diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000000..241a06879e7 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,19 @@ +module.exports = { + root: true, + env: { + browser: true, + node: true, + }, + parserOptions: { + ecmaVersion: 2016, + project: './tsconfig.base.json', + tsconfigRootDir: __dirname, + sourceType: 'module', + }, + extends: ['eslint-config-base-web3/ts'], + settings: { + 'import/resolver': { + typescript: {}, // this loads tsconfig.json to eslint + }, + }, +}; diff --git a/.eslintrc.test.js b/.eslintrc.test.js new file mode 100644 index 00000000000..c7c7cc047b0 --- /dev/null +++ b/.eslintrc.test.js @@ -0,0 +1,7 @@ +module.exports = { + parserOptions: { + project: './tsconfig.base.json', + tsconfigRootDir: __dirname, + }, + extends: ['eslint-config-base-web3/ts-jest'], +}; diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000000..ed6a5bfe2af --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,5 @@ +# For details about the contents of this file, see +# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners + +# Automatically assigns members of the web3.js team to new pending PRs as reviewers +* @avkos @jdevcs @luu-alex @Muhammad-Altabba diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 03125db96c0..9424fbc6fd8 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -23,10 +23,11 @@ Fixes #(issue) - [ ] I have made corresponding changes to the documentation. - [ ] My changes generate no new warnings. - [ ] Any dependent changes have been merged and published in downstream modules. -- [ ] I ran `npm run dtslint` with success and extended the tests and types if necessary. +- [ ] I ran `npm run lint` with success and extended the tests and types if necessary. - [ ] I ran `npm run test:unit` with success. -- [ ] I ran `npm run test:cov` and my test cases cover all the lines and branches of the added code. +- [ ] I ran `npm run test:coverage` and my test cases cover all the lines and branches of the added code. - [ ] I ran `npm run build` and tested `dist/web3.min.js` in a browser. - [ ] I have tested my code on the live network. - [ ] I have checked the Deploy Preview and it looks correct. - [ ] I have updated the `CHANGELOG.md` file in the root folder. +- [ ] I have linked Issue(s) with this PR in "Linked Issues" menu. diff --git a/.github/workflows/black_box_tests.yml b/.github/workflows/black_box_tests.yml new file mode 100644 index 00000000000..a0f5d261c77 --- /dev/null +++ b/.github/workflows/black_box_tests.yml @@ -0,0 +1,53 @@ +name: 'Black Box Tests' +on: + push: + branches: + - release/** + tags: + - v4.* + +jobs: + build: + strategy: + matrix: + node: [18, 16] + name: Build Packages + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.mode }} + - run: yarn + - run: tar -czf /tmp/web3-${{ matrix.node }}.js.tar.gz --exclude="./.git" ./ + - uses: actions/upload-artifact@v3 + with: + name: web3-${{ matrix.node }}.js.tar.gz + path: /tmp/web3-${{ matrix.node }}.js.tar.gz + black-box: + name: Black Box + needs: build + runs-on: ubuntu-latest + env: + INFURA_HTTP: ${{ secrets.INFURA_HTTP }} + INFURA_WSS: ${{ secrets.INFURA_WSS }} + INFURA_GOERLI_WS: ${{ secrets.INFURA_GOERLI_WS }} + MODE: ${{ matrix.mode }} + strategy: + fail-fast: false + matrix: + node: [18, 16] + mode: ['http', 'ws'] + backend: ['geth', 'infura'] + steps: + - uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + - uses: actions/download-artifact@v3 + with: + name: web3-${{ matrix.node }}.js.tar.gz + path: /tmp + - run: tar -xf /tmp/web3-${{ matrix.node }}.js.tar.gz -C ./ + - run: | + yarn test:blackbox:${{ matrix.backend }}:${{ matrix.mode }} + shell: bash diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6cca3a80720..fb73ef0c5d7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,112 +1,238 @@ -name: "Build" +name: 'Build' on: - push: - branches: - - "1.x" - tags: - - v1* - pull_request: - branches: - - "1.x" - types: [opened, reopened, synchronize] + push: + branches: + - '4.x' + tags: + - v4* + pull_request: + branches: + - '4.x' + types: [opened, reopened, synchronize] + jobs: - lint: - runs-on: ubuntu-latest - env: - TEST: "build_and_lint" - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/setup-node@v1 + build: + strategy: + matrix: + node: [18, 16] + name: Build CJS + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + cache: yarn + - run: yarn install --ignore-scripts + - run: yarn prebuild + - run: yarn build:cjs + - run: tar -czf /tmp/web3-${{ matrix.node }}.js.tar.gz --exclude="./.git" ./ + - uses: actions/upload-artifact@v3 + with: + name: web3-${{ matrix.node }}.js.tar.gz + path: /tmp/web3-${{ matrix.node }}.js.tar.gz + build-esm: + name: Build ESM + needs: build + runs-on: ubuntu-latest + strategy: + matrix: + node: [ 18, 16 ] + steps: + - uses: actions/setup-node@v3 with: - node-version: 12 - - - uses: actions/checkout@v2 - - - uses: actions/cache@v2 - id: cache-deps + node-version: ${{ matrix.node }} + - uses: actions/download-artifact@v3 with: - path: | - node_modules - */*/node_modules - key: ${{ runner.os }}-node12-${{ hashFiles('**/package-lock.json') }} - - - run: npm ci - if: steps.cache-deps.outputs.cache-hit != 'true' - - - run: bash ./scripts/ci.sh - unit: - runs-on: ubuntu-latest - strategy: - matrix: - node: [8, 10, 11, 12, 13] - env: - TEST: "unit" - steps: - - uses: actions/setup-node@v1 + name: web3-${{ matrix.node }}.js.tar.gz + path: /tmp + - run: tar -xf /tmp/web3-${{ matrix.node }}.js.tar.gz -C ./ + - run: yarn build:esm + build-types: + name: Build Types + needs: build + runs-on: ubuntu-latest + strategy: + matrix: + node: [ 18, 16 ] + steps: + - uses: actions/setup-node@v3 with: - node-version: ${{ matrix.node }} - - - uses: actions/checkout@v2 - - - uses: actions/cache@v2 - id: cache-deps + node-version: ${{ matrix.node }} + - uses: actions/download-artifact@v3 with: - path: | - node_modules - */*/node_modules - key: ${{ runner.os }}-node${{ matrix.node }}-${{ hashFiles('**/package-lock.json') }} + name: web3-${{ matrix.node }}.js.tar.gz + path: /tmp + - run: tar -xf /tmp/web3-${{ matrix.node }}.js.tar.gz -C ./ + - run: yarn build:types + lint: + name: Lint + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/setup-node@v3 + with: + node-version: 18 + - uses: actions/download-artifact@v3 + with: + name: web3-18.js.tar.gz + path: /tmp + - run: tar -xf /tmp/web3-18.js.tar.gz -C ./ + - run: yarn lint - - run: npm ci - if: steps.cache-deps.outputs.cache-hit != 'true' + build-web: + name: Build Web + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/setup-node@v3 + with: + node-version: 18 + - uses: actions/download-artifact@v3 + with: + name: web3-18.js.tar.gz + path: /tmp + - run: tar -xf /tmp/web3-18.js.tar.gz -C ./ + - name: Restore default branch stats + if: github.event_name != 'push' + uses: actions/cache/restore@v3 + with: + path: packages/web3/dist/4.x.json + key: web3-bundle-stats-4x-${{github.event.pull_request.base.sha}} + - run: yarn build:web:analyze + env: + STATS_FILE: ${{ github.ref_name }}.json + - name: Compare bundle stats + uses: github/webpack-bundlesize-compare-action@v1 + if: github.event_name != 'push' + continue-on-error: true + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + current-stats-json-path: "packages/web3/dist/${{ github.ref_name }}.json" + base-stats-json-path: "packages/web3/dist/4.x.json" + - name: Cache default branch stats + uses: actions/cache/save@v3 + if: github.event_name == 'push' && github.ref == 'refs/heads/4.x' + with: + path: packages/web3/dist/4.x.json + key: web3-bundle-stats-4x-${{github.sha}} - - run: bash ./scripts/ci.sh - e2e: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - testCmd: - [ - 'unit_and_e2e_clients', - 'e2e_browsers', - 'e2e_ganache', - 'e2e_mosaic', - 'e2e_gnosis_dex', - ] - env: - TEST: ${{ matrix.testCmd }} - steps: - - uses: actions/setup-node@v1 - with: - node-version: 12 - - uses: actions/checkout@v2 + unit: + name: Unit Tests + needs: build + runs-on: ubuntu-latest + strategy: + matrix: + node: [18, 16] + steps: + - uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + - uses: actions/download-artifact@v3 + with: + name: web3-${{ matrix.node }}.js.tar.gz + path: /tmp + - run: tar -xf /tmp/web3-${{ matrix.node }}.js.tar.gz -C ./ + - run: yarn test:unit + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + with: + flags: UnitTests + token: ${{ secrets.CODECOV_TOKEN }} + if: ${{ matrix.node == 18 }} - - uses: actions/cache@v2 - id: cache-deps - if: env.TEST == 'unit_and_e2e_clients' || env.TEST == 'e2e_browsers' - with: - path: | - node_modules - */*/node_modules - key: ${{ runner.os }}-node12-${{ hashFiles('**/package-lock.json') }} + integration: + name: Integration + needs: build + runs-on: ubuntu-latest + env: + INFURA_GOERLI_HTTP: ${{ secrets.INFURA_GOERLI_HTTP }} + INFURA_GOERLI_WS: ${{ secrets.INFURA_GOERLI_WS }} + strategy: + fail-fast: false + matrix: + node: [18, 16] + backend: ['geth', 'ganache'] + mode: ['http', 'ws'] + steps: + - uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + - uses: actions/download-artifact@v3 + with: + name: web3-${{ matrix.node }}.js.tar.gz + path: /tmp + - run: tar -xf /tmp/web3-${{ matrix.node }}.js.tar.gz -C ./ + - run: yarn test:e2e:${{ matrix.backend }}:${{ matrix.mode }} + shell: bash - - run: npm ci - if: (env.TEST == 'unit_and_e2e_clients' || env.TEST == 'e2e_browsers') && steps.cache-deps.outputs.cache-hit != 'true' + e2e-ipc: + name: Integration IPC + needs: build + runs-on: ubuntu-latest + env: + INFURA_GOERLI_HTTP: ${{ secrets.INFURA_GOERLI_HTTP }} + INFURA_GOERLI_WS: ${{ secrets.INFURA_GOERLI_WS }} + strategy: + fail-fast: false + matrix: + node: [ 18, 16 ] + backend: [ 'geth' ] + mode: [ 'ipc' ] + steps: + - uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + - uses: actions/download-artifact@v3 + with: + name: web3-${{ matrix.node }}.js.tar.gz + path: /tmp + - run: tar -xf /tmp/web3-${{ matrix.node }}.js.tar.gz -C ./ + - run: yarn test:e2e:${{ matrix.backend }}:${{ matrix.mode }} + shell: bash - - run: bash ./scripts/ci.sh + e2e: + name: End-to-End ganache:ws + needs: build + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + node: [18, 16] + browser: ['electron', 'chrome', 'firefox'] + steps: + - uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + - uses: browser-actions/setup-firefox@latest + if: matrix.browser == 'firefox' + - uses: actions/download-artifact@v3 + with: + name: web3-${{ matrix.node }}.js.tar.gz + path: /tmp + - run: tar -xf /tmp/web3-${{ matrix.node }}.js.tar.gz -C ./ + - run: npm install --no-package-lock --no-save --force cypress + - name: Cypress run + uses: cypress-io/github-action@v4 + with: + install: false + command: yarn test:e2e:ganache:ws:${{ matrix.browser }} + cache-key: node-v${{ matrix.node }}-on-${{ matrix.browser }}-hash-${{ hashFiles('yarn.lock') }} - - name: Send coverage reports to Coveralls - if: env.TEST == 'unit_and_e2e_clients' - uses: coverallsapp/github-action@master - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - e2e_windows: - runs-on: windows-latest - env: - TEST: "e2e_windows" - steps: - - uses: actions/setup-node@v1 - with: - node-version: 12 - - uses: actions/checkout@v2 - - run: bash ./scripts/ci.sh + build-docs: + name: Build Docs + needs: build + runs-on: ubuntu-latest + strategy: + matrix: + node: [ 18 ] + steps: + - uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + - uses: actions/download-artifact@v3 + with: + name: web3-${{ matrix.node }}.js.tar.gz + path: /tmp + - run: tar -xf /tmp/web3-${{ matrix.node }}.js.tar.gz -C ./ + - run: yarn build:docs diff --git a/.github/workflows/canary_release.yml b/.github/workflows/canary_release.yml new file mode 100644 index 00000000000..c208c943c1a --- /dev/null +++ b/.github/workflows/canary_release.yml @@ -0,0 +1,23 @@ +name: 'Release Canary' +on: + push: + branches: + - '4.x' + +jobs: + release: + name: release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 16 + cache: yarn + registry-url: 'https://registry.npmjs.org' + - run: yarn install --frozen-lockfile + - run: yarn build:web + - run: yarn publish:canary + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + \ No newline at end of file diff --git a/.github/workflows/deploy-docs.yaml b/.github/workflows/deploy-docs.yaml new file mode 100644 index 00000000000..b766fb7e4a9 --- /dev/null +++ b/.github/workflows/deploy-docs.yaml @@ -0,0 +1,28 @@ +name: Docs CloudFlare Deploy +on: + push: + branches-ignore: + - "1.x" + - "1.x/*" +jobs: + deploy: + runs-on: ubuntu-latest + permissions: + contents: read + deployments: write + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + cache: yarn + node-version: '16' + - run: yarn install --frozen-lockfile + - run: yarn run build:docs + - name: Publish to Cloudflare Pages + uses: cloudflare/pages-action@v1 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: 2238a825c5aca59233eab1f221f7aefb + projectName: web3-js-docs + directory: ./docs/build + gitHubToken: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/e2e_network_tests.yml b/.github/workflows/e2e_network_tests.yml new file mode 100644 index 00000000000..58adb0ee4bf --- /dev/null +++ b/.github/workflows/e2e_network_tests.yml @@ -0,0 +1,52 @@ +name: 'E2E Network Tests' +on: + push: + branches: + - release/** + tags: + - v4.* + +jobs: + build: + name: Build Packages + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 16 + cache: yarn + - run: yarn + - run: tar -czf /tmp/web3-16.js.tar.gz --exclude="./.git" ./ + - uses: actions/upload-artifact@v3 + with: + name: web3-16.js.tar.gz + path: /tmp/web3-16.js.tar.gz + e2e: + name: E2E Network Tests + needs: build + runs-on: ubuntu-latest + env: + INFURA_SEPOLIA_HTTP: ${{ secrets.INFURA_SEPOLIA_HTTP }} + INFURA_MAINNET_HTTP: ${{ secrets.INFURA_MAINNET_HTTP }} + MODE: ${{ matrix.mode }} + TEST_ACCOUNT_ADDRESS: ${{ fromJSON('{"sepolia":"0xa127C5E6a7E3600Ac34A9a9928E52521677e7211","mainnet":"0x98AF911164f9d4E0f5983ed114949c3Bfe3ADc9d"}')[matrix.network] }} + ALLOWED_SEND_TRANSACTION: ${{ secrets.E2E_TESTS_ALLOWED_SEND_TRANSACTION }} + TEST_ACCOUNT_PRIVATE_KEY: ${{ secrets.TEST_ACCOUNT_PRIVATE_KEY }} + strategy: + fail-fast: false + matrix: + mode: ['http'] + network: ['sepolia', 'mainnet'] + steps: + - uses: actions/setup-node@v3 + with: + node-version: 16 + - uses: actions/download-artifact@v3 + with: + name: web3-16.js.tar.gz + path: /tmp + - run: tar -xf /tmp/web3-16.js.tar.gz -C ./ + - run: | + yarn test:e2e:${{ matrix.network }}:${{ matrix.mode }} + shell: bash diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index e3e5f19f9ec..d89cbdb6622 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -11,9 +11,9 @@ jobs: with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 7 days if no further activity occurs. Thank you for your contributions. If you believe this was a mistake, please comment.' - stale-pr-message: 'This PR has been automatically marked as stale beacause it has not had recent activity. It will be closed in 7 days if no further activity occurs. Thank you for your contributions. If you believe this was a mistake, please comment.' + stale-pr-message: 'This PR has been automatically marked as stale because it has not had recent activity. It will be closed in 7 days if no further activity occurs. Thank you for your contributions. If you believe this was a mistake, please comment.' days-before-stale: 60 days-before-close: 14 operations-per-run: 100 - exempt-pr-labels: 'work-in-progress' - exempt-issue-labels: 'work-in-progress' + exempt-pr-labels: 'work-in-progress,4.x' + exempt-issue-labels: 'work-in-progress,4.x' diff --git a/.gitignore b/.gitignore index 72b3cfa06ec..f85d4f36b67 100644 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,44 @@ +# General .DS_Store *.swp -*/**/*un~ -*un~ -*/**/.DS_Store -npm-debug.log -.npm/ -/coverage -/tmp +*.orig + +# Secrets +.secrets.json + +# Logs +logs +*.log +npm-debug.log* + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# nyc test coverage +.nyc_output + +# Dependency directories node_modules -.idea/ -.npm/ -.history/ -.vscode/ -packages/web3/dist/ -lerna-debug.log -.nyc_output/ -build/ -contracts/ -migrations/ -truffle-config.js -test/config/ensAddresses.json -*/**/lib + +# Optional npm cache directory +.npm +.coverage +.tool-versions + +# IDE directories +.idea +tmp + +# Distribution directory +.vscode +lib/ +dist/ +tsconfig.tsbuildinfo + +# Unsupported lock files +package-lock.json + +tmp/ + +# Incubed (in3) nodelist +packages/web3/.in3/ diff --git a/.husky/.gitignore b/.husky/.gitignore new file mode 100644 index 00000000000..31354ec1389 --- /dev/null +++ b/.husky/.gitignore @@ -0,0 +1 @@ +_ diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100755 index 00000000000..3b614330e02 --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +yarn run lint diff --git a/.jshintignore b/.jshintignore deleted file mode 100644 index ff16e08d03a..00000000000 --- a/.jshintignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -packages/**/node_modules/ -karma.conf.js diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 7bc37324e70..00000000000 --- a/.jshintrc +++ /dev/null @@ -1,20 +0,0 @@ -{ - "browserify": true, - "bitwise": true, - "camelcase": true, - "eqeqeq": true, - "esversion": 8, - "freeze": true, - "funcscope": false, - "maxcomplexity": 15, - "maxdepth": 4, - "maxerr": 50, - /*"maxlen": 80*/ /*this should be our goal*/ - /*"maxparams": 3,*/ - "nonew": true, - "unused": true, - "undef": true, - "predef": [ - "console" - ] -} diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 00000000000..064a45756b1 --- /dev/null +++ b/.lintstagedrc.json @@ -0,0 +1,5 @@ +{ + "*.js": ["prettier --write"], + "*.ts": ["prettier --write", "eslint"], + "*.{json,md}": ["prettier --write"] +} diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 4c71292fe6e..00000000000 --- a/.npmignore +++ /dev/null @@ -1,10 +0,0 @@ -*.idea -test -dist -docs -coverage -scripts -.gitignore -.editorconfig -.npmignore -.DS_Store diff --git a/.npmrc b/.npmrc new file mode 120000 index 00000000000..e48092b8968 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +templates/.npmrc.tmpl \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 120000 index 00000000000..2710f71b380 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1 @@ +templates/.prettierrc.json.tmpl \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index dfcacb10598..e1714a8f56b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ # Changelog + All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), @@ -42,279 +43,2186 @@ Released with 1.0.0-beta.37 code base. ### Fixed -- ``websocket`` dependency fixed (#2971, #2976) -- ``requestOptions`` added to ``WebsocketProvider`` (#2979) -- Node >= v8.0.0 support (#2938) +- `websocket` dependency fixed (#2971, #2976) +- `requestOptions` added to `WebsocketProvider` (#2979) +- Node >= v8.0.0 support (#2938) ## [1.2.2] ### Added -- localStorage support detection added (#3031) -- getNetworkType method extended with Görli testnet (#3095) -- supportsSubscriptions method added to providers (#3116) -- Add `eth.getChainId` method (#3113) -- Minified file added to web3 package (#3131) -- The transaction confirmation workflow can now be configured (#3130) -- Additional parameters for accounts.signTransaction added [(docs)](https://web3js.readthedocs.io/en/v1.2.2/web3-eth-accounts.html#signtransaction) (#3141) -- Emit `connected` event on subscription creation (#3028) -- TypeScript type definitions added for all modules (#3132) -- Bloom filters added to web3.utils (#3137) - -### Fixed - -- Fix allow `0` as a valid `fromBlock` or `toBlock` filter param (#1100) -- Fix randomHex returning inconsistent string lengths (#1490) -- Fix make isBN minification safe (#1777) -- Fix incorrect references to BigNumber in utils.fromWei and utils.toWei error messages (#2468) -- Fix error incorrectly thrown when receipt.status is `null` (#2183) -- Fix incorrectly populating chainId param with `net_version` when signing txs (#2378) -- regeneratorRuntime error fixed (#3058) -- Fix accessing event.name where event is undefined (#3014) -- fixed Web3Utils toHex() for Buffer input (#3021) -- Fix bubbling up tx signing errors (#2063, #3105) -- HttpProvider: CORS issue with Firefox and Safari (#2978) -- Ensure the immutability of the `tx` object passed to function `signTransaction` (#2190) -- Gas check fixed (#2381) -- Signing issues #1998, #2033, and #1074 fixed (#3125) -- Fix hexToNumber and hexToNumberString prefix validation (#3086) -- The receipt will now returned on a EVM error (this got removed on beta.18) (#3129) -- Fixes transaction confirmations with the HttpProvider (#3140) +- localStorage support detection added (#3031) +- getNetworkType method extended with Görli testnet (#3095) +- supportsSubscriptions method added to providers (#3116) +- Add `eth.getChainId` method (#3113) +- Minified file added to web3 package (#3131) +- The transaction confirmation workflow can now be configured (#3130) +- Additional parameters for accounts.signTransaction added [(docs)](https://web3js.readthedocs.io/en/v1.2.2/web3-eth-accounts.html#signtransaction) (#3141) +- Emit `connected` event on subscription creation (#3028) +- TypeScript type definitions added for all modules (#3132) +- Bloom filters added to web3.utils (#3137) + +### Fixed + +- Fix allow `0` as a valid `fromBlock` or `toBlock` filter param (#1100) +- Fix randomHex returning inconsistent string lengths (#1490) +- Fix make isBN minification safe (#1777) +- Fix incorrect references to BigNumber in utils.fromWei and utils.toWei error messages (#2468) +- Fix error incorrectly thrown when receipt.status is `null` (#2183) +- Fix incorrectly populating chainId param with `net_version` when signing txs (#2378) +- regeneratorRuntime error fixed (#3058) +- Fix accessing event.name where event is undefined (#3014) +- fixed Web3Utils toHex() for Buffer input (#3021) +- Fix bubbling up tx signing errors (#2063, #3105) +- HttpProvider: CORS issue with Firefox and Safari (#2978) +- Ensure the immutability of the `tx` object passed to function `signTransaction` (#2190) +- Gas check fixed (#2381) +- Signing issues #1998, #2033, and #1074 fixed (#3125) +- Fix hexToNumber and hexToNumberString prefix validation (#3086) +- The receipt will now returned on a EVM error (this got removed on beta.18) (#3129) +- Fixes transaction confirmations with the HttpProvider (#3140) ## [1.2.3] ### Fixed -- Fix perfect gas usage causes tx to error (#3175) -- Fix regenerator runtime error in web3.min.js (#3155) -- Fix TS types for eth.subscribe syncing, newBlockHeaders, pendingTransactions (#3159) -- Improve web3-eth-abi decodeParameters error message (#3134) +- Fix perfect gas usage causes tx to error (#3175) +- Fix regenerator runtime error in web3.min.js (#3155) +- Fix TS types for eth.subscribe syncing, newBlockHeaders, pendingTransactions (#3159) +- Improve web3-eth-abi decodeParameters error message (#3134) ## [1.2.4] ### Fixed -- Fix npm installation error for scrypt-shim and websocket (#3210) +- Fix npm installation error for scrypt-shim and websocket (#3210) ## [1.2.5] ### Added -- ``eth_requestAccounts`` as ``requestAccounts`` added to web3-eth package (#3219) -- ``sha3Raw`` and ``soliditySha3Raw`` added to web3-utils package (#3226) -- ``eth_getProof`` as ``getProof`` added to web3-eth package (#3220) -- ``BN`` and ``BigNumber`` objects are now supported by the ``abi.encodeParameter(s)`` method (#3238) -- ``getPendingTransactions`` added to web3-eth package (#3239) -- Revert instruction handling added which can get activated with the ``handleRevert`` module property (#3248) -- The ``receipt`` does now exist as property on the error object for transaction related errors (#3259) -- ``internalType`` added to ``AbiInput`` TS interface in ``web3-utils`` (#3279) -- Agent option added to the ``HttpProvider`` options (#2980) +- `eth_requestAccounts` as `requestAccounts` added to web3-eth package (#3219) +- `sha3Raw` and `soliditySha3Raw` added to web3-utils package (#3226) +- `eth_getProof` as `getProof` added to web3-eth package (#3220) +- `BN` and `BigNumber` objects are now supported by the `abi.encodeParameter(s)` method (#3238) +- `getPendingTransactions` added to web3-eth package (#3239) +- Revert instruction handling added which can get activated with the `handleRevert` module property (#3248) +- The `receipt` does now exist as property on the error object for transaction related errors (#3259) +- `internalType` added to `AbiInput` TS interface in `web3-utils` (#3279) +- Agent option added to the `HttpProvider` options (#2980) ### Changed -- ``eth-lib`` dependency updated (0.2.7 => ^0.2.8) (#3242) +- `eth-lib` dependency updated (0.2.7 => ^0.2.8) (#3242) ### Fixed -- Fix crash when decoding events with identical signatures, differently indexed args (#3272) -- Fix user supplied callback not fired in eth.accounts.signTransaction (#3283) -- Fix minified bundle (#3256) -- ``defaultBlock`` property handling fixed (#3247) -- ``clearSubscriptions`` does no longer throw an error if no running subscriptions do exist (#3246) -- callback type definition for ``Accounts.signTransaction`` fixed (#3280) -- fix: export bloom functions on the index.js -- Prefer receipt status to code availability on contract deployment (#3298) +- Fix crash when decoding events with identical signatures, differently indexed args (#3272) +- Fix user supplied callback not fired in eth.accounts.signTransaction (#3283) +- Fix minified bundle (#3256) +- `defaultBlock` property handling fixed (#3247) +- `clearSubscriptions` does no longer throw an error if no running subscriptions do exist (#3246) +- callback type definition for `Accounts.signTransaction` fixed (#3280) +- fix: export bloom functions on the index.js +- Prefer receipt status to code availability on contract deployment (#3298) ## [1.2.6] ### Added -- Görli testnet ENS registry added to the known registries (#3338) +- Görli testnet ENS registry added to the known registries (#3338) ### Changed -- ENS registry addresses updated (#3353, https://medium.com/the-ethereum-name-service/ens-registry-migration-bug-fix-new-features-64379193a5a) +- ENS registry addresses updated (#3353, ) ## [1.2.7] ### Added -- Add revert reason support to sendSignedTransaction (#3345) -- ENS module extended with the possibility to add a custom registry (#3301) -- Missing ENS Registry methods and Resolver.supportsInterface method added (#3325) -- Add optional gas type to AbiItem typescript definitions (for ABIs generated by Vyper) (#3437) -- Add görli testnet ENS registry to the known registries (#3252) -- Add auto-reconnect option for Websockets (#3092, #1085, #1391, #1558, #1852, #1646) +- Add revert reason support to sendSignedTransaction (#3345) +- ENS module extended with the possibility to add a custom registry (#3301) +- Missing ENS Registry methods and Resolver.supportsInterface method added (#3325) +- Add optional gas type to AbiItem typescript definitions (for ABIs generated by Vyper) (#3437) +- Add görli testnet ENS registry to the known registries (#3252) +- Add auto-reconnect option for Websockets (#3092, #1085, #1391, #1558, #1852, #1646) ### Changed -- Ensure '0x' prefix is existing for Accounts.sign and Accounts.privateKeyToAccount (#3041) -- Repository cleanup (#3443) - - Removed old `docs/_build` folder - - Removed old bower and meteor artifacts - - Moved logo assets to own folder - - Moved github assets to own folder - - Remove @types/node from (non-dev) dependency tree (#3965, #3227) -- *Please note*: Geth [v1.9.12](https://github.com/ethereum/go-ethereum/releases/tag/v1.9.12) contains a breaking change for `eth_call` that will not default to your first account anymore if `from` is not set. If a sender is not explicitly defined, the `eth_call` will be executed from `address(0)`. (#3467) - - This was done to avoid the same input behaving differently in different environments. You should never do `eth_call` without explicitly setting a sender. - - This means that if you're calling `view` methods that refer to a `msg.sender` without explicitly setting a `from` address in your request options, you may see unexpected behavior. - - In `web3.js`, the `from` address can be specified on a per-call basis or by setting the `defaultAccount` property. +- Ensure '0x' prefix is existing for Accounts.sign and Accounts.privateKeyToAccount (#3041) +- Repository cleanup (#3443) + - Removed old `docs/_build` folder + - Removed old bower and meteor artifacts + - Moved logo assets to own folder + - Moved github assets to own folder + - Remove @types/node from (non-dev) dependency tree (#3965, #3227) +- _Please note_: Geth [v1.9.12](https://github.com/ethereum/go-ethereum/releases/tag/v1.9.12) contains a breaking change for `eth_call` that will not default to your first account anymore if `from` is not set. If a sender is not explicitly defined, the `eth_call` will be executed from `address(0)`. (#3467) + - This was done to avoid the same input behaving differently in different environments. You should never do `eth_call` without explicitly setting a sender. + - This means that if you're calling `view` methods that refer to a `msg.sender` without explicitly setting a `from` address in your request options, you may see unexpected behavior. + - In `web3.js`, the `from` address can be specified on a per-call basis or by setting the `defaultAccount` property. ### Fixed -- Add missing subscription.on('connected') TS type definition (#3319) -- Add missing bignumber.js dependency for TS types (#3386) -- Upgrade swarm-js to 0.1.40 to remove npm vulnerability warning (#3399) -- Upgrade devDeps to resolve security warnings (#3464) - - dtslint 0.4.2 => 3.4.1 - - definitelytyped-header-parser 1.0.1 => 3.9.0 -- Race-condition when subscribing to historical logs as first client request (#3389) -- Fix crash when using Web-Workers by removing any-promise dependency (#3377 #2211 #1774) -- MaxListenersExceededWarning event emitter warning mitigated (#1648) +- Add missing subscription.on('connected') TS type definition (#3319) +- Add missing bignumber.js dependency for TS types (#3386) +- Upgrade swarm-js to 0.1.40 to remove npm vulnerability warning (#3399) +- Upgrade devDeps to resolve security warnings (#3464) + - dtslint 0.4.2 => 3.4.1 + - definitelytyped-header-parser 1.0.1 => 3.9.0 +- Race-condition when subscribing to historical logs as first client request (#3389) +- Fix crash when using Web-Workers by removing any-promise dependency (#3377 #2211 #1774) +- MaxListenersExceededWarning event emitter warning mitigated (#1648) ## [1.2.8] ### Added -- Introduce review and release guidelines. (#3460) -- Add EIP-1193 compatible provider to `AbstractProvider` interface. (#3499) -- Add Typescript definitions for contract `methods` and `call`. (#3454) -- Update AbstractProvider and contract.methods TS definitions (#3521) -- Add support for ENS contenthash methods. (#3392, #2782) +- Introduce review and release guidelines. (#3460) +- Add EIP-1193 compatible provider to `AbstractProvider` interface. (#3499) +- Add Typescript definitions for contract `methods` and `call`. (#3454) +- Update AbstractProvider and contract.methods TS definitions (#3521) +- Add support for ENS contenthash methods. (#3392, #2782) ### Changed -- Change CI provider from Travis to Github Actions. (#3468) -- Update `web3-eth-abi` ABICoder dependency. (#3490) -- Update AbiCoder param formatting (#3522) -- Improve code clarity of HttpProvider keepAlive option setting. (#3463) -- Updated type definitions for Web3 HTTP Provider. (#3482) -- Fix indentation of web3-eth documentation. (#3478) +- Change CI provider from Travis to Github Actions. (#3468) +- Update `web3-eth-abi` ABICoder dependency. (#3490) +- Update AbiCoder param formatting (#3522) +- Improve code clarity of HttpProvider keepAlive option setting. (#3463) +- Updated type definitions for Web3 HTTP Provider. (#3482) +- Fix indentation of web3-eth documentation. (#3478) ### Fixed -- Fix intermittent CI build issues with `dtslint`. (#3479) -- Fix WSS credentials Base64 encoding (for browser) (#3508) -- Fire provider "error" and/or "end" events when Websocket provider disconnects. (#3485) -- Remove web3-eth revert error return types to squash TS compilation errors. (#3496) -- Backfill event subscriptions when WS connection dropped across multiple blocks. (#3491) -- Stop swallowing errors when WS connection has died after exhausting reconnection attempts. (#3492) -- Fix setContenthash docs formatting (#3511) +- Fix intermittent CI build issues with `dtslint`. (#3479) +- Fix WSS credentials Base64 encoding (for browser) (#3508) +- Fire provider "error" and/or "end" events when Websocket provider disconnects. (#3485) +- Remove web3-eth revert error return types to squash TS compilation errors. (#3496) +- Backfill event subscriptions when WS connection dropped across multiple blocks. (#3491) +- Stop swallowing errors when WS connection has died after exhausting reconnection attempts. (#3492) +- Fix setContenthash docs formatting (#3511) ## [1.2.9] ### Added -- Add `sending` and `sent` events for tx submissions (#3438) -- Add `latestBlockHash` arg to `confirmation` event handler payload (#3438) -- Make socket providers' max listeners threshold configurable (#3469) -- Documentation about testing & ci resources for Web3.js development (#3528) -- More detailed documentation about how to use `method.encodeABI` (#3549) -- Integration tests for `transactionPollingTimeout` (#3513) +- Add `sending` and `sent` events for tx submissions (#3438) +- Add `latestBlockHash` arg to `confirmation` event handler payload (#3438) +- Make socket providers' max listeners threshold configurable (#3469) +- Documentation about testing & ci resources for Web3.js development (#3528) +- More detailed documentation about how to use `method.encodeABI` (#3549) +- Integration tests for `transactionPollingTimeout` (#3513) ### Changed -- Websocket package from @web3-js/websocket@1.0.29 to websocket@1.0.31 (#3371) -- Upgrade `@web3-js/scrypt-shim@0.1.0` to `scrypt-js@3.0.1` -- sendSignedTransaction revert handling synthesizes tx without network call (#3457) -- Make docs grammar more idiomatic, normalize punctuation (#3543) +- Websocket package from @web3-js/websocket@1.0.29 to websocket@1.0.31 (#3371) +- Upgrade `@web3-js/scrypt-shim@0.1.0` to `scrypt-js@3.0.1` +- sendSignedTransaction revert handling synthesizes tx without network call (#3457) +- Make docs grammar more idiomatic, normalize punctuation (#3543) ### Fixed -- Size property de-referencing crash when calling web3.eth.clearSubscriptions (#3527) -- Abi param encoding for tuple arrays (#3538) -- `account.hashMessage` with non-ASCII characters (#3523) -- Subscription support check in method confirmations loop (#3432) -- TS bindings for `handleRevert` added (#3452) -- Docs: spelling of pre-defined block number (#3539) -- Docs: missing defaultBlock param option in `method.call` description (#3558) +- Size property de-referencing crash when calling web3.eth.clearSubscriptions (#3527) +- Abi param encoding for tuple arrays (#3538) +- `account.hashMessage` with non-ASCII characters (#3523) +- Subscription support check in method confirmations loop (#3432) +- TS bindings for `handleRevert` added (#3452) +- Docs: spelling of pre-defined block number (#3539) +- Docs: missing defaultBlock param option in `method.call` description (#3558) ## [1.2.10] ### Added -- Add support for EIP-1193 provider `request` method (#3625) +- Add support for EIP-1193 provider `request` method (#3625) ### Changed -- Upgrade minified bundle build process (from gulp to webpack) (#3618) -- CI improvements: add dependency caching, netlify browser test preview (#3598, #3602) -- Remove references to `genesis` block in 1.x documentation (#3594) -- Disallow setting `toBlock` when subscribing to contract events (#3207) +- Upgrade minified bundle build process (from gulp to webpack) (#3618) +- CI improvements: add dependency caching, netlify browser test preview (#3598, #3602) +- Remove references to `genesis` block in 1.x documentation (#3594) +- Disallow setting `toBlock` when subscribing to contract events (#3207) ### Fixed -- Extend `_txInputFormatter` with hex prefix check (#3317) -- Extract revert reason string for geth >= 1.9.15 (#3520) -- Fix Incorrect param encoding of BN object in arrayed inputs (#3592) -- Remove mis-encoded whitespace characters from web3-utils files (#3601) -- Fix incompatibilities with webpack Buffer polyfill for wallet.encrypt/decrypt (#3580) -- Fix misformatted `fromBlock` value when re-subscribing to events over WS (#3596) -- Support `Function` type log parameter decoding (#2826) -- Add undefined callback check to websocket provider response queue (#3574) -- Fix WS clientConfig type (#3563) +- Extend `_txInputFormatter` with hex prefix check (#3317) +- Extract revert reason string for geth >= 1.9.15 (#3520) +- Fix Incorrect param encoding of BN object in arrayed inputs (#3592) +- Remove mis-encoded whitespace characters from web3-utils files (#3601) +- Fix incompatibilities with webpack Buffer polyfill for wallet.encrypt/decrypt (#3580) +- Fix misformatted `fromBlock` value when re-subscribing to events over WS (#3596) +- Support `Function` type log parameter decoding (#2826) +- Add undefined callback check to websocket provider response queue (#3574) +- Fix WS clientConfig type (#3563) ## [1.2.11] ### Fixed -- Fix Provider.request response (#3647) +- Fix Provider.request response (#3647) ### Added -- Add unit tests for isHex and isHexStrict (#3622) +- Add unit tests for isHex and isHexStrict (#3622) ## [1.3.0] ### Added -- Support for typescript files (.ts) to be written alongside regular .js files (#3652) -- Add compareBlock function that allows for complex block comparisons (#3682) +- Support for typescript files (.ts) to be written alongside regular .js files (#3652) +- Add compareBlock function that allows for complex block comparisons (#3682) ### Changed -- Improve RequestManager send method (#3649) -- `npm run build` now uses TSC to compile (.js allowed) and the build folder is now located under `lib` (#3652) -- Modernized web3-core to use newer es syntax (#3652) -- Bumped `web3-providers-ipc` `oboe` version to 2.1.5 (#3661) -- Bump lodash from 4.17.15 to 4.17.19 (#3641) -- Bump websocket version which removes node-gyp from web3.js (#3685) +- Improve RequestManager send method (#3649) +- `npm run build` now uses TSC to compile (.js allowed) and the build folder is now located under `lib` (#3652) +- Modernized web3-core to use newer es syntax (#3652) +- Bumped `web3-providers-ipc` `oboe` version to 2.1.5 (#3661) +- Bump lodash from 4.17.15 to 4.17.19 (#3641) +- Bump websocket version which removes node-gyp from web3.js (#3685) ### Fixed -- Fix parsing of non-`eth_subscription` provider events (#3660) -- Fix parsedUrl problem of websocket provider (#3666) -- Fix return value for `clearSubscriptions` (#3689) +- Fix parsing of non-`eth_subscription` provider events (#3660) +- Fix parsedUrl problem of websocket provider (#3666) +- Fix return value for `clearSubscriptions` (#3689) ## [1.3.1] ### Added -- Add `web3-eth2-core` package (#3743) (renamed to `web3-eth2-base`) -- Add `web3-eth2-beaconchain` package (#3743) (renamed to `web3-eth2-beacon`) -- Add `stripHexPrefix` method to `web3-utils` package (#3776) +- Add `web3-eth2-core` package (#3743) (renamed to `web3-eth2-base`) +- Add `web3-eth2-beaconchain` package (#3743) (renamed to `web3-eth2-beacon`) +- Add `stripHexPrefix` method to `web3-utils` package (#3776) ### Changed -- bump utils 0.10.0^ -> 0.12.0 (#3733) +- bump utils 0.10.0^ -> 0.12.0 (#3733) ### Removed -- Removed post-install script in `packages/web3`. Added documentation to root README (#3717) +- Removed post-install script in `packages/web3`. Added documentation to root README (#3717) ### Fixed -- Fix possible unhandled promise rejection when sending a transaction (#3708) -- Fixed decoding bytes and string parameters for logs emitted with solc 0.4.x (#3724, #3738) -- Grammar changes to inputAddressFormatter error message -- Fixed vulnerable dependencies - -## [Unreleased] +- Fix possible unhandled promise rejection when sending a transaction (#3708) +- Fixed decoding bytes and string parameters for logs emitted with solc 0.4.x (#3724, #3738) +- Grammar changes to inputAddressFormatter error message +- Fixed vulnerable dependencies ## [1.3.2] +### Fixed + +- Fix EIP-1193 provider subscriptions (#3864) + +## [1.3.3] + +### Fixed + +- Update `dist` to latest release (`1.3.2`) (#3875) + +## [1.3.4] + +### Changed + +- Fixed mutation of inputs to encoding and decoding functions (#3748) +- Fix default value for `fromBlock` option for `logs` subscriptions (defaults to `latest`) (#3883) +- ethjs-signer test (#3876) +- Rename `web3-eth2-base` to `web3-eth2-core` and `web3-eth2-beacon` to `web3-eth2-beaconchain` (#3833) +- Bump `ts-node` from version `^8.10.2` to `^9.0.0` (#3856) +- Ran `npm audit fix` which fixed 4 vulnerabilities (#3856) +- Correct `web3-eth2-beaconchain` type declarations (#3859) and (#3865) +- Move interfaces `IBaseAPISchema` and `IBaseAPIMethodSchema` to `index.d.ts` for `web3-eth2-core` (#3878) +- Update dependencies for `web3-eth2-core` (#3878) + +### Removed + +- Remove `notImplemented` flag from ETH2 Beacon Chain package methods schema (#3861) +- Removes `IETH2BeaconChain` interface in favor of exporting a class type: `ETH2BeaconChain` (#3878) +- Remove `index.d.ts` files in favor of `types.ts` for `web3-eth2-core` and `web3-eth2-beaconchain` (#3878) +- `schema.ts` from `web3-eth2-core` (#3878) +- `dtslint` npm command from `web3-eth2-core` and `web3-eth2-beaconchain` as `index.d.ts` files were removed (#3878) + +### Added + +- Add `ETH2Core` class export to `index.d.ts` for `web3-eth2-core` (#3878) +- Deprecation of bzz warning (#3872) +- Deprecation of shh warning (#3888) + +## [1.3.5] + +### Added + +- Github action for running tests for `web3-eth2-core` and `web3-eth2-beaconchain` packages (#3892) +- Added description to documentation on how to connect using a remote node provider (#3884) +- Added Security risk warning to docs for `web3.utils.soliditySha3` (#3908) +- `.nvmrc` file using Node.js version `v.14.15.1` (#3817) +- Add commitment to semantic versioning since version `1.3.0` and onwards (#3961) + +### Changed + +- Unified babel compiler for `web3-eth2-core` and `web3-eth2-beaconchain` (#3892) +- Renamed the `tsc` script in all packages to `compile`; updates the corresponding `lerna run` usage in the main `package.json` (#3894) +- moved deprecation warnings to postinstall scripts (#3917) +- Upgrade `@chainsafe/geth-dev-assistant` from `0.1.5` to `0.1.9` (#3950) +- Replaced hardcoded infura link with Github Secret for some tests (#3943) +- Bump `elliptic` from `6.5.3` to `6.5.4` for `web3-eth-accounts` (#3941) +- Bump `elliptic` from `6.5.3` to `6.5.4` for `web3-bzz` (#3940) +- Bump `elliptic` from `6.5.3` to `6.5.4` for `web3-core-requestmanager` (#3945) +- Rewrite `web3-eth-iban` in ES6 (#3955) + +## [1.3.6] + +### Changes + +- Bump `underscore` package from `1.9.1` to `1.12.1` (#4051) +- Bump `@ensdomains/ens` package from `^0.4.5` to `^0.6.0` (#4059) +- Bump `ethers` package from `^5.0.18` to `^5.1.4` (#4059) + +### Removes + +- Accidental commit (yarn-error.log) (#4062) + +## [1.4.0] + +### Added + +- Berlin Transaction Support (#4083) +- When signing a transaction, common object now defaults to berlin instead of petersburg + +### Changed + +- Changed Geth Docker verision from `stable` to `1.10.3` in `e2e.geth.instamine.sh` and `scripts/e2e.geth.automine.sh` (#4154) + +## [1.4.1] + +### Removes + +- Removing the underscore package + +## [1.5.0] + +### Added + +- London transaction support (#4155) +- RPC support `eth_feehistory` call (#4191) +- Add `toNumber` method to `web3.utils` (#4191) + +### Changed + +- Grammar fix (#4088) and updated Swarm (#4151)and Whisper doc links (#4170) +- Removed deprecation notice for HttpProvider (#4008) +- Nonce added to send options in documentation and types (#4052) +- Updated Solidity example to modern syntax (#4147) +- Changing web3 connection example from lets to const (#3967) +- Updated the documentation for the transaction object to include EIP-2718 and EIP-1559 options (#4188) + +## [1.5.1] + +### Added + +- `maxPriorityFeePerGas` and `maxFeePerGas` now included in `_txInputFormatter` (#4217) +- If `maxPriorityFeePerGas` of `maxFeePerGas` present `_txInputFormatter` deletes `tx.gasPrice` (fixes #4211) (#4217) +- Add block tag support (e.g. `latest`, `pending`, `earliest`) to `getFeeHistory` (#4224) +- Support for EIP-1559 to `web3.eth.sendTransaction` (#4220) + +## [1.5.2] + +### Fixed + +- Remove transaction `type` defaulting for `eth.sendTransaction`, `eth.sendRawTransaction` (#4241) +- `type: 0x0` was being added to legacy transaction when using `eth.signTransaction` (#4241) + +## [1.5.3] + +### Fixed + +- Unable to send legacy transaction if network supported EIP-1559 (#4277) +- Fixed bug in sending transaction with providers not support "newBlockHeaders" event (#3891) + +### Changed + +- ethers from 5.1.4 to 5.4.4 (#4231) +- karma from 5.2.3 to 6.3.4 (#4231) +- lerna from 3.22.1 to 4.0.0 (#4231) +- Dropped build tests in CI for Node v8 and v10, and added support for Node v14 (#4231) +- Change default value for `maxPriorityFeePerGas` from `1 Gwei` to `2.5 Gwei` (#4284) +- Fixed bug in signTransaction (#4295) + +## [1.6.0] + +### Changed + +- Partially replace usage of [eth-lib](https://github.com/MaiaVictor/eth-lib) with [ethereumjs-util](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/util) (#4390) + +## [1.6.1] + +### Added + +- Support for `eth_createAccessList` as both an rpc call (`web3.eth.createAccessList`) and property of contract method wrappers (`contractInstance.methods.getValue().createAccessList`) (#4332) + +### Changed + +- Not considering `tx.chainId` if `tx.common.customChain.chainId` is provided for `web3.eth.accounts.signTransaction` function (#4293) +- Added missing PromiEvent handler types (#4194) +- Updated README to include Webpack 5 angular support instructions (#4174) +- Updated the documentation for the `Web3.utils`, removed context for `_` (underscore lib) (#4403) +- Emit subscription id with connect event when creating a subscription (#4300) +- Introduced new configuration "blockHeaderTimeout" for waiting of block headers for transaction receipt (#3891) +- Format `block.baseFeePerGas` to number (#4330) +- Correct `web3-eth-personal.sendTransaction` example in documentation (#4409) +- Updated README to include Webpack 5 angular support instructions (#4174) + +### Fixed + +- Fix 1.6.1 build size issue with removing static asset files (#4506) +- Correct `web3.rst` example in documentation (#4511) +- Correct `BlockHeader` typing (`receiptRoot` -> `receiptsRoot`) (#4452) + +## [1.7.0] + +### Added + +- `maxPriorityFeePerGas` and `maxFeePerGas` added to `Transaction` and `TransactionConfig` interfaces (#4232) (#4585) + +### Fixed + +- Fix readthedoc's build for web3js documentation (#4425) +- Fix response sorting for batch requests (#4250) + +### Changed + +- Changed getFeeHistory first parameter type from `number` to `hex` according to the [spec](https://playground.open-rpc.org/?schemaUrl=https://raw.githubusercontent.com/ethereum/eth1.0-apis/assembled-spec/openrpc.json&uiSchema%5BappBar%5D%5Bui:splitView%5D=false&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false) (#4529) + +## [1.7.1] + +### Added + +- `transactionPollingInterval` added to web3, contract and method constructor options. defaults to 1 second. (#4584) +- Add example import for package level types (#4611) + +### Fixed + +- Fix a typo in the documentation for `methods.myMethod.send` (#4599) +- Use globalThis to locate global object if possible (#4613) +- Fix typos in web3-utils.rst (#4662) +- Added effectiveGasPrice to TransactionReceipt (#4692) +- Correction in documentation for `web3.eth.accounts.signTransaction` (#4576) +- Updated README to include Webpack 5 create-react-app support instructions (#4173) +- Update the documentation for `methods.myMethod.estimateGas` (#4702) +- Fix typos in REVIEW.md and TESTING.md (#4691) +- Fix encoding for "0x" string values (#4512) + +### Changed + +- Muted E2E gnosis dex tests in CI until fix for issue #4436 is applied (#4701) + +### Removed + +- Removed deprecated Morden testnet code (#4339) + +### Security + +- Ran `npm audit fix` to address vulnerabilities and update libraries (#4719) (#4728) + +## [1.7.2] + +### Changed + +- Remove deprecated `close` event listener (#4825) (#4839) + +### Security + +- `npm audit fix` to update libraries (#4860) + +### Fixed + +- Fix jsonrpc payload and response types (#4743) (#4761) +- Allowed more flexibility in typing the overly constrained `provider.disconnect` function (#4833) + +## [1.7.3] + +### Fixed + +- Fixed build issues of 1.7.2 + +## [1.7.4] + +### Fixed + +- Fix dead link in web3-eth.rst (#4916) +- Fix web3-core-method throws on `f.call = this.call` when intrinsic is frozen (#4918) (#4938) +- Fix static tuple encoding (#4673) (#4884) +- Fix bug in handleRevert logic for eth_sendRawTransaction (#4902) +- Fix resolve type of getBlock function (#4911) +- Web3-utils BN fix (#5132) + +### Changed + +- Replace deprecated String.prototype.substr() (#4855) +- Exporting AbiCoder as coder (#4937) +- Github build workflow updated min build for node.js 12 and tests for 12, 14 and 16 (#5014) +- Updated libraries using BN and the BN library (#5072) + +### Added + +- Exposing `web3.eth.Contract.setProvider()` as per public documentation (#4822) (#5001) +- Improve npm script commands for development purposes (#4848) + +### Security + +- `npm audit fix` to address vulnerabilities and update libraries (#5014) + +## [1.7.5] + +### Changed + +- Replace xhr2-cookies deps to cross-fetch for web3-providers-http (#5085) + +### Added + +- Documentation details about `maxFeePerGas` and `maxPriorityFeePerGas` (#5121) +- Added `createAccessList` types in web3.eth (#5146) + +### Fixed + +- Improving `AbstractProvider` interface (#5150) +- Fix typos in web3-eth-accounts.rst & TESTING.md (#5047) +- Fix remove wallet using an index when an account address and address lowercase are equal (#5049) +- Improve README.md & Fix typos (#4848) +- Add optional hex formatting parameter for getTransactionReceipt (#5153) +- Fix transactionRoot -> transactionsRoot in BlockHeader (#5083) +- Fix Promise in Accounts.signTransaction() throwing errors that cannot be caught (#4724) +- Fixed unit tests & removed dead code for web3-providers-http (#5228) + +### Security + +- Updated `got` lib version and fixed other libs using npm audit fix (#5178) (#5254) + +## [4.0.0-alpha.0] + +Note: Yarn is resolving to some old deprecated package versions for 4.0.0-alpha.0 instead of latest alpha versions. A patch bump is posted so yarn users +should use 4.0.1-alpha.0 for testing. + +### Added + +#### web3-errors + +- `web3-errors` new package is created, it has Web3 Error codes and classes + +#### web3-types + +- `web3-types` new package is created, it provides the common data structures and interfaces for web3 modules + +#### web3-validator + +- `web3-validator` new package is created, it has JSON-Schema compatible validator functionality for Web3 + +### Removed + +#### web3-bzz + +- This Package is deprecated + +#### web3-shh + +- This Package is deprecated + +#### web3-core-helpers + +- This Package is removed, `errors` are moved to `web3-errors` package and formatters are moved in `web3-core` package + +#### web3-core-method + +- This Package is removed, and `web3-core-method` functionality is moved to `web3-eth` package + +#### web3-core-promieevent + +- This Package is removed, and core promi events functionality is moved to `web3-core` package + +#### web3-core-requestmanager + +- This Package is removed, batch requests and request manager functionality is moved to `web3-core` package + +#### web3-core-subscription + +- This Package is removed, and core subscription functionality is moved to `web3-core` package + +### Changed + +#### web3 + +- Passing callbacks to functions is no longer supported, except for event listeners. +- Method `extend` is deprecated + +#### web3-core + +- The function `outputBigNumberFormatter` in `web3-core-helper` renamed to `outputBigIntFormatter` under `web3-core` +- Removed `this.defaultBlock` context from `inputDefaultBlockNumberFormatter` in `web3-core-helper` and converted to additional parameter +- Removed `this.defaultBlock` context from `inputTransactionFormatter` in `web3-core-helper` and converted to additional parameter + +#### web3-utils + +- The following functions `soliditySha3` `soliditySha3Raw` `encodePacked` now includes type validation and requires type specification, instead of guessing the value type +- The functions `soliditySha3`, `soliditySha3Raw` and `encodePacked` did not support BN; But, now supports `BigInt` +- The functions `flattenTypes` and `jsonInterfaceMethodToString` moved to the `web3-eth-abi` package +- The function `isAddress` now includes an optional parameter `checkChecksum` type boolean +- `isBoolean` now accept `1`, and `0` as valid values to test. Ref: `web3-validator` + +#### web3-eth-accounts + +- `create` function does not take in the optional parameter `entropy` +- `Wallet.create` function doesn't accept `entropy` param + +#### web3-validator + +- `isBoolean` now accept `1`, and `0` as valid values to test. + +#### web3-eth-contract + +- Event logs do not support types for indexed properties, but named properties are supported. +- Types for overloaded ABI functions are not yet supported. +- `signTransaction` will not fill any default values, and it will only sign and return result. For filling default values, use `web3-eth` package +- `recover` function's last param is boolean `hashed`, it is used to indicate if data provided is already hashed or not. By default, this function will assume data is not hashed. +- The `Wallet` no longer supports address/number indexing. Have to use `wallet.get` instead. +- `Wallet.create` function doesn't accept `entropy` param +- `contract.method.send()` will resolve to transaction receipt instead of `transactionHash`. User can use `receipt.transactionHash` instead. + +#### web3-net + +- Package will not support web3.bzz.net and web3.shh.net + +#### web3-eth-iban + +- IBAN constructor now has validation checks for indirect/direct iban. +- `isDirect`, `isValid`, `isIndirect` are now also included as static methods. + +#### web3-eth-ens + +- `setMultihash` is not supported in web3-eth-ens 4.x as it's deprecated in ENS public resolver (https://github.com/ensdomains/resolvers/blob/master/contracts/PublicResolver.sol) +- `setContent` is not supported in web3-eth-ens 4.x as it's deprecated in ENS public resolver (https://github.com/ensdomains/resolvers/blob/master/contracts/PublicResolver.sol) +- `getContent` is not supported in web3-eth-ens 4.x as it's deprecated in ENS public resolver. +- `getMultihash` is not supported in web3-eth-ens 4.x as it's deprecated in ENS public resolver. + +#### web3-eth-abi + +- `internalType` was renamed to `baseType` in all abi types + +#### web3-eth + +- `givenProvider` default value is undefined +- `defaultHardfork` default value is 'london' +- `defaultAccount` default value is undefined +- `defaultNetworkId` default value is undefined +- When sending a transaction, if Ethereum Node does not respond within `transactionSendTimeout`, throw an Error. + +#### web3-eth-subscribe + +- `clearSubscriptions` Instead of returning `true` , `clearSubscriptions` now returns array of subscription's ids + +#### web3-eth-personal + +- `givenProvider` default value is undefined +- `currentProvider` default value is undefined + +## [4.0.1-alpha.0] + +### Fixed + +- Dependency tree cannot be resolved by Yarn due to old deprecated packages picked by yarn - fixed (#5382) + +## [4.0.1-alpha.1] + +### Added + +#### web3-core + +- If the response error was `execution reverted`, raise `ContractExecutionError` and pass the response error to it in order to be set as `innerError` (this innerError will be decoded at web3-eth-contract if its ABI was provided according to EIP-838). (#5434) +- Added a new configuration variable `enableExperimentalFeatures`. (#5481) +- `registerPlugin` method to `Web3Context` (#5393) +- `Web3PluginBase` exported abstract class (#5393) +- `Web3EthPluginBase` exported abstract class (#5393) + +#### web3-error + +- Add optional `innerError` property to the abstract class `Web3Error`. This `innerError` could be `Error`, `Error[]` or `undefined`. (#5435) (#5434) +- The class `Web3ContractError` is moved to this package from `web3-eth-contract`. (#5434) +- Added the error code `ERR_TX_SIGNING` and used it inside `TransactionSigningError` (#5462) +- Added the error code `ERR_TX_GAS_MISMATCH` and used it inside `TransactionGasMismatchError` (#5462) +- Added `SignatureError` to `web3-errors/src/errors/signature_errors.ts` (moved from `web3-eth/src/errors.ts`) (#5462) +- Added the errors' classes to `web3-errors/src/errors/transaction_errors.ts` from `web3-eth/src/errors.ts` (#5462) +- Added `TransactionBlockTimeoutError` class and its error code `ERR_TX_BLOCK_TIMEOUT` (#5294) +- `ExistingPluginNamespaceError` class and it's error code `ERR_EXISTING_PLUGIN_NAMESPACE` (#5393) + +#### web3-eth + +- `web3-rpc-methods` dependency (#5441) +- Added chain and hardfork validation for transaction and transaction.common object in `validateTransactionForSigning` + +#### web3-eth-abi + +- If an error happens when decoding a value, preserve that exception at `innerError` inside the error class `AbiError`. (#5435) +- Add basic functionality that is used, by `web3-eth-contract`, when decoding error data according to EIP-838. (#5434) + +#### web3-eth-contract + +- Decoding error data, using Error ABI if available, according to EIP-838. (#5434) +- The class `Web3ContractError` is moved from this package to `web3-error`. (#5434) + +#### web3-plugin-example + +- Example plugin for wrapping contract methods to provide custom functionality (#5393) +- Example plugin for custom RPC methods using the `requestManager` (#5393) + +#### web3-utils + +- Added and exported three reusable utility functions: `pollTillDefined`, `rejectIfTimeout` and `rejectIfConditionAtInterval` which are useful when dealing with promises that involves polling, rejecting after timeout or rejecting if a condition was met when calling repeatably at every time intervals. + +#### web3-eth-personal + +- `web3-rpc-methods` dependency (#5441) + +#### web3-eth-net + +- `web3-rpc-methods` dependency (#5441) + +#### web3-providers-ipc + +- Show error message and return dummy promise if socket is not writable (#5294) + +#### web3-rpc-methods + +- web3-rpc-methods package added + +#### web3-types + +- `Web3EthExecutionAPI` export (#5441) +- `Web3NetAPI` export (#5441) +- `EthPersonalAPI` export (#5441) + ### Changed -- Remove `notImplemented` flag from ETH2 Beacon Chain package methods schema -- Fixed mutation of inputs to encoding and decoding functions (#3748) -- Rename `web3-eth2-base` to `web3-eth2-core` and `web3-eth2-beacon` to `web3-eth2-beaconchain` +#### web3-core + +- Default value for `API` generic for `Web3ContextObject` from `any` to `unknown` (#5393) +- Default value for `API` generic for `Web3ContextInitOptions` from `any` to `unknown` (#5393) +- Added validation when `defaultHardfork` and `defaultCommon.hardfork` are different in web3config +- Added validation when `defaultChain` and `defaultCommon.basechain` are different in web3config +- Added a new configuration variable `enableExperimentalFeatures`. (#5481) + +#### web3-error + +- Moved `SignerError` from `web3-errors/src/errors/signature_errors.ts` to `web3-errors/src/errors/transaction_errors.ts`, and renamed it to `TransactionSigningError` (#5462) +- Corrected the error code for `JSONRPC_ERR_UNAUTHORIZED` to be `4100` (#5462) + +#### web3-eth + +- `Web3EthExecutionAPI` is now imported via `web3-types` instead of `web3_eth_execution_api.ts` (#5441) +- Replace the imported methods from `rpc_methods.ts` with `ethRpcMethods` imports from `web3-rpc-methods` (#5441) +- `Web3NetAPI` is now imported from `web3-types` instead of `web3-net` (#5441) +- Moved `rpc_methods` tests to `web3-rpc-methods` (#5441) +- Implemented the logic for `transactionBlockTimeout` (#5294) +- Use subscription at `rejectIfBlockTimeout` when the provider supports subscription. Implement this as an experimental feature (if `useSubscriptionWhenCheckingBlockTimeout` at `enableExperimentalFeatures` is `true`). (#5481) +- At some test cases, optimized some codes. (#5481) + +#### web3-eth-accounts + +- `signTransaction` and `privateKeyToAccount` will throw `TransactionSigningError` instead of `SignerError` now (#5462) + +#### web3-eth-ens + +- `Web3NetAPI` is now imported from `web3-types` instead of `web3-net` (#5441) + +#### web3-eth-personal + +- Import `EthPersonalAPI` from `web3-types` instead of local import (#5441) +- Replace the imported methods from `rcp_methods.ts` with `personalRpcMethods` imports from `web3-rpc-methods` (#5441) +- Replace use of `EthPersonalAPIManager` with `Web3RequestManager` (#5441) + +#### web3-eth-net + +- `Web3NetAPI` is now imported from `web3-types` instead of `web3_net_api.ts` (#5441) +- Replace the imported methods from `rpc_methods.ts` with `netRpcMethods` imports from `web3-rpc-methods` (#5441) + +#### web3-types + +- `Web3APISpec`, `Web3APIMethod`, and `Web3APIParams` now supports `unknown` APIs (#5393) + +### Fixed + +#### web3-error + +- Corrected the error code for `JSONRPC_ERR_UNAUTHORIZED` to be `4100` (#5462) + +#### web3-eth + +- Fix `getBlock` returning empty transactions object on `hydrated` true (#5556) +- [setimmediate](https://github.com/yuzujs/setImmediate) package to polyfill [setImmediate](https://nodejs.org/api/timers.html#setimmediatecallback-args) for browsers (#5450) + +#### web3-eth-contract + +- According to the latest change in `web3-eth-abi`, the decoded values of the large numbers, returned from function calls or events, are now available as `BigInt`. (#5435) + +#### web3-eth-abi + +- Return `BigInt` instead of `string` when decoding function parameters for large numbers, such as `uint256`. (#5435) + +#### web3-types + +- `Web3APISpec`, `Web3APIMethod`, and `Web3APIParams` now supports `unknown` APIs (#5393) + +### Removed + +#### web3-eth + +- Moved the errors' classes from `web3-eth/src/errors.ts` to `web3-errors/src/errors/transaction_errors.ts` (#5462) + +#### web3-eth-personal + +- Exported type `EthPersonalAPIManager`, `EthPersonalAPI` is not exported via `web3-types` (#5441) + +#### web3-eth-net + +- `rpcMethods` export, these methods are now exported via `web3-rpc-methods` as `netRpcMethods` (#5441) +- `Web3NetAPI` export, now exported via `web3-types` as `Web3NetAPI` (#5441) + +#### web3-validator + +- Removed direct function `toJSON()` in `Web3ValidatorError` class as its available via base class (#5435) + +## [4.0.1-alpha.2] + +### Added + +#### web3-eth-contract + +- Decoding error data, using Error ABI if available, if error was returned from a smart contract function call (#5662). + +#### web3-types + +- These types were moved from `web3-eth-accounts` to `web3-types` package: Cipher, CipherOptions, ScryptParams, PBKDF2SHA256Params, KeyStore (#5581 ) + +#### web3-utils + +- Export a new function `uuidV4` that generates a random v4 Uuid (#5373). +- Enable passing a starting number, to increment based on it, for the Json Rpc Request `id` (#5652). +- Export a new function `isPromise` that checks if an object is a promise (#5652). + +#### web3-eth-contract + +- `SpecialOutput` type was added as a generic type into the call function to support reassigning output types (#5631) +- Overloaded functions types (`ContractOverloadedMethodInputs`, `ContractOverloadedMethodOutputs`) was added (#5631) + +### Fixed + +#### web3-eth-contract + +- Emit past contract events based on `fromBlock` when passed to `contract.events.someEventName` (#5201) +- Use different types for `ContractOptions` -> `jsonInterface` setter and getter (#5474) +- An issue within the `Contract` constructor where `provider` wasn't being set when provided within the `optionsOrContextOrReturnFormat` argument (#5669) + +#### web3-types + +- Make the `request` method of `EIP1193Provider` class, compatible with EIP 1193 (#5591) + +#### web3-utils + +- Use Uuid for the response id, to fix the issue "Responses get mixed up due to conflicting payload IDs" (#5373). + +#### web3-validator + +- Fix `isHex`returning `false` for `-123`, fix `isHexStrict` returning `true` for `-0x`, and fix `isHex` returning `true` for empty strings `` (#5373). + +#### web3-eth-abi + +- Fix `ContractMethodOutputParameters` type to support output object types by index and string key. Also, it returns void if ABI doesn't have outputs and returns exactly one type if the output array has only one element. (#5631) + +### Removed + +#### web3-eth-accounts + +- These types were moved from `web3-eth-accounts` to `web3-types` package: Cipher, CipherOptions, ScryptParams, PBKDF2SHA256Params, KeyStore (#5581 ) + +## [4.0.1-alpha.3] + +### Fixed + +#### web3-validator + +- Fix issue when importing `web3-validator` package within browser environments (Webpack minified filename changed from `index.min.js` to `web3-validator.min.js`) (#5710) +- Fix build error '"type"' does not satisfy the constraint (#5712) + +#### web3-eth-abi + +- Parameters decoding error for nested components (#5714) + +## [4.0.1-alpha.4] + +### Changed + +#### web3 + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +#### web3-core + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +#### web3-errors + +- `main` and `files` entries in `package.json` changed to `lib/` directory from `dist/` (#5739) + +#### web3-eth + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +#### web3-eth-abi + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +#### web3-eth-accounts + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +#### web3-eth-contract + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +#### web3-eth-ens + +- `main` and `files` entries in `package.json` changed to `lib/` directory from `dist/` (#5739) + +#### web3-eth-iban + +- `main` and `files` entries in `package.json` changed to `lib/` directory from `dist/` (#5739) + +#### web3-eth-personal + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +#### web3-net + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +#### web3-providers-http + +- `main` and `files` entries in `package.json` changed to `lib/` directory from `dist/` (#5739) + +#### web3-providers-ipc + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +#### web3-providers-ws + +- `main` and `files` entries in `package.json` changed to `lib/` directory from `dist/` (#5739) + +#### web3-rpc-methods + +- `main` and `files` entries in `package.json` changed to `lib/` directory from `dist/` (#5739) + +#### web3-types + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +#### web3-utils + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +#### web3-validator + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +#### web3-providers-ipc + +- Refactor to use common SocketProvider class (#5683) + +#### web3-providers-ws + +- Refactor to use common SocketProvider class (#5683) + +#### web3-utils + +- Add SocketProvider class and Eip1193Provider abstract class (#5683) + +#### web3-types + +- These types were added: ProviderRpcError, EthSubscription, ProviderMessage, ProviderConnectInfo (#5683) + +## [4.0.1-alpha.5] + +### Removed + +#### web3 + +- `build` entry from `package.json` (#5755) + +#### web3-validator + +- `build` entry from `package.json` (#5755) + +### Changed + +#### web3-core + +- web3.js dependencies (#5757) + +#### web3-errors + +- web3.js dependencies (#5757) + +#### web3-eth + +- web3.js dependencies (#5757) + +#### web3-eth-abi + +- web3.js dependencies (#5757) + +#### web3-eth-accounts + +- web3.js dependencies (#5757) + +#### web3-eth-contract + +- web3.js dependencies (#5757) + +#### web3-eth-ens + +- web3.js dependencies (#5757) + +#### web3-eth-iban + +- web3.js dependencies (#5757) + +#### web3-eth-personal + +- web3.js dependencies (#5757) + +#### web3-eth-net + +- web3.js dependencies (#5757) + +#### web3-providers-http + +- web3.js dependencies (#5757) + +#### web3-providers-ipc + +- web3.js dependencies (#5757) + +#### web3-providers-ws + +- web3.js dependencies (#5757) + +#### web3-rpc-methods + +- web3.js dependencies (#5757) + +#### web3-utils + +- web3.js dependencies (#5757) + +### Fixed + +#### web3-eth + +- Enable transaction with local wallet index in the `to` field (#5731) + +### Added + +#### web3-types + +- Add `TransactionWithFromLocalWalletIndex`, `TransactionWithToLocalWalletIndex` and `TransactionWithFromAndToLocalWalletIndex` types (#5731) + +## [4.0.1-rc.0] + +### Added + +#### web3 + +- `registeredSubscriptions` was added by default in web3 constructor (#5792) +- Add named exports for all objects which are the default-exported-object in their packages (#5771) +- Export all packages' objects organized by namespaces (#5771) +- Add Additional flat exports for all types and constants from `web3-types`, `web3-errors` and `web3`. (#5771) +- Fix few issues with `new Web3().eth.contract` (#5824) + +#### web3-core + +- Added rpc exception codes following eip-1474 as an experimental feature (if `useRpcCallSpecification` at `enableExperimentalFeatures` is `true`) (#5525) +- Added support of `safe` and `finalized` block tags (#5823) + +#### web3-errors + +- Added error class `InvalidMethodParamsError` and error code `ERR_INVALID_METHOD_PARAMS = 207` (#5824) +- `request` property to `ResponseError` (#5854) +- `data` property to `TransactionRevertInstructionError` (#5854) +- `TransactionRevertWithCustomError` was added to handle custom solidity errors (#5854) + +#### web3-eth + +- Added `createAccessList` functionality ( #5780 ) +- Added support of `safe` and `finalized` block tags (#5823) +- `contractAbi` option to `SendTransactionOptions` and `SendSignedTransactionOptions` to added the ability to parse custom solidity errors (#5854) + +#### web3-eth-abi + +- `decodeErrorData` from `web3-eth-contract` is now exported from this package and was renamed to `decodeContractErrorData` (#5844) + +#### web3-eth-contract + +- Added functionality of `createAccessList` for contracts ( #5780 ) +- An instance of `Contract` will `subscribeToContextEvents` upon instantiation if `syncWithContext` is set to `true` and the constructor is passed an instance of `Web3Context` (#5833) +- Added support of `safe` and `finalized` block tags (#5823) + +#### web3-providers-http + +- Added named export for `HttpProvider` (#5771) + +#### web3-providers-ipc + +- Added named export for `IpcProvider` (#5771) +- Pass `_socketOptions` from `IpcProvider` constructor to the underlying `Socket` (#5891) +- The getter of `SocketConnection` in `IpcProvider` (inherited from `SocketProvider`) returns `net.Socket` (#5891) + +#### web3-providers-ws + +- Added named export for `WebSocketProvider` (#5771) +- The getter of `SocketConnection` in `WebSocketProvider` (inherited from `SocketProvider`) returns isomorphic `WebSocket` (#5891) + +#### web3-rpc-methods + +- Added `createAccessList` functionality ( #5780 ) +- Added support of `safe` and `finalized` block tags (#5823) + +#### web3-types + +- Added types from `web3-eth-abi` and `TypedArray` from (#5771) +- Added `TypedArray` from `web3-utils` and `web3-validator` (it was defined twice) (#5771) +- Added `safe` and `finalized` block tags in `BlockTags` and `BlockTag` types (#5823) + +#### web3-utils + +- Added support of `safe` and `finalized` block tags (#5823) + +#### web3-validator + +- Added support of `safe` and `finalized` block tags in `isBlockTag` method (#5823) + +### Changed + +#### web3 + +- `require('web3')` will now return all web3 exported-objects organized in namespaces . (#5771) + +#### web3-errors + +- The abstract class `Web3Error` is renamed to `BaseWeb3Error` (#5771) +- Renamed TransactionRevertError to TransactionRevertInstructionError to remain consistent with 1.x +- Using `MaxAttemptsReachedOnReconnectingError` with the same message for 1.x but also adding the `maxAttempts` (#5894) + +#### web3-eth + +- Update imports statements for objects that was moved between web3 packages (#5771) +- `sendTransaction` and `sendSignedTransaction` now errors with (and `error` event emits) the following possible errors: `TransactionRevertedWithoutReasonError`, `TransactionRevertInstructionError`, `TransactionRevertWithCustomError`, `InvalidResponseError`, or `ContractExecutionError` (#5854) + +#### web3-eth-accounts + +- Updated dependencies (#5912) + +#### web3-eth-contract + +- Update imports statements for objects that was moved between web3 packages (#5771) + +#### web3-eth-ens + +- Updated dependencies (#5912) + +#### web3-eth-iban + +- Updated dependencies (#5912) + +#### web3-eth-personal + +- Updated dependencies (#5912) + +#### web3-net + +- Updated dependencies (#5912) + +#### web3-utils + +- `compareBlockNumbers` function now only supports comparison of both blocktags params ( except `earliest` vs number) or both block number params (#5842) +- `SocketProvider` abstract class now resolves JSON RPC response errors instead of rejecting them (#5844) +- Exposes the getter of `SocketConnection` in `SocketProvider` (#5891) + +### Removed + +#### web3 + +- Private static `_contracts:Contract[]` and static `setProvider` function was removed (#5792) + +#### web3-eth + +- `getRevertReason` is no longer exported (#5844) + +#### web3-eth-abi + +- Moved all types and interfaces to `web3-types` (#5771) + +#### web3-eth-contract + +- `decodeErrorData` is no longer exported (method was moved to `web3-eth-abi` and renamed `decodeContractErrorData`) (#5844) + +#### web3-utils + +- Moved `TypedArray` to `web3-types` (was also duplicated at `web3-validator`) (#5771) +- Removed support of `genesis` tag in `compareBlockNumbers` function (#5823) + +#### web3-validator + +- Moved `TypedArray` to `web3-types` (was also duplicated at `web3-utils`) (#5771) + +### Fixed + +#### web3-eth-contract + +- Fix contract defaults (#5756) +- Fixed getPastEventsError (#5819) + +## [4.0.1-rc.1] + +### Changed + +#### web3 + +- No need for polyfilling nodejs `net` and `fs` modules (#5978) +- Removed IPC provider dependency, IPC path is no longer viable provider. If you wanna use IPC, please install `web3-providers-ipc` and instantiate provider yourself (#5978) + +#### web3-core + +- If a transaction object with a `data` property is passed to `txInputOptionsFormatter`, it will now be replaced with `input` (#5915) +- The types `TransactionTypeParser` and `TransactionBuilder` are now utilizing the type `Transaction` for the transaction object. (#5993) +- No need for polyfilling nodejs `net` and `fs` modules (#5978) +- Removed IPC provider dependency, IPC path is no longer viable provider. If you wanna use IPC, please install `web3-providers-ipc` and instantiate provider yourself (#5978) + +#### web3-errors + +- `gasLimit` is no longer accepted as a parameter for `MissingGasError` and `TransactionGasMismatchError, and is also no longer included in error message (#5915) + +#### web3-eth + +- `signTransaction` will now return `gas` instead of `gasLimit` for returned transaction object regardless of what property name the provider uses (#5915) +- `formatTransaction` will now replace `data` transaction property with `input` (#5915) +- `isTransactionCall` will now check if `value.input` `isHexStrict` if provided (#5915) +- The functions `defaultTransactionBuilder` and `transactionBuilder` are now utilizing the type `Transaction` for the transaction object. (#5993) + +#### web3-eth-accounts + +- Moved @ethereumjs/tx, @ethereumjs/common code to our source code (#5963) +- The method `signTransaction` returned by `privateKeyToAccount` is now accepting the type `Transaction` for its argument. (#5993) + +#### web3-eth-contract + +- `getSendTxParams` will now return `input` instead of `data` in returned transaction parameters object (#5915) +- `Contract` constructor will now thrown new `ContractTransactionDataAndInputError` if both `data` and `input` are passed in `ContractInitOptions` for `Contract` constructor (#5915) +- The types `ContractInitOptions`, `NonPayableCallOptions` and `PayableCallOptions` are moved to `web3-types`. (#5993) + +#### web3-types + +- `data` property in `TransactionOutput` was renamed to `input` (#5915) +- The method `signTransaction` inside `Web3BaseWalletAccount` is now utilizing the type `Transaction` for its argument. (#5993) +- The types `FMT_NUMBER`, `NumberTypes`, `FMT_BYTES`, `ByteTypes`, `DataFormat`, `DEFAULT_RETURN_FORMAT`, `ETH_DATA_FORMAT` and `FormatType` moved from `web3-utils`. (#5993) +- The types `ContractInitOptions`, `NonPayableCallOptions` and `PayableCallOptions` are moved from `web3-eth-contract`. (#5993) + +#### web3-utils + +- The types `FMT_NUMBER`, `NumberTypes`, `FMT_BYTES`, `ByteTypes`, `DataFormat`, `DEFAULT_RETURN_FORMAT`, `ETH_DATA_FORMAT` and `FormatType` moved to `web3-types`. (#5993) + +### Added + +#### web3 + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +#### web3-core + +- Added hybrid build (ESM and CJS) of library (#5904) +- Added source files (#5956) + +#### web3-errors + +- Added hybrid build (ESM and CJS) of library (#5904) +- Added source files (#5956) + +#### web3-eth + +- Added source files (#5956) + +#### web3-eth-abi + +- Added hybrid build (ESM and CJS) of library (#5904) +- Added source files (#5956) + +#### web3-eth-accounts + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +#### web3-eth-contract + +- `input` is now an acceptable property for `ContractInitOptions` in place of `data` (either can be used, but `input` is used withing the `Contract` class) (#5915) +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +#### web3-eth-ens + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +#### web3-eth-iban + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +#### web3-eth-personal + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +#### web3-net + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +#### web3-providers-http + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +#### web3-providers-ipc + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +#### web3-providers-ws + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +#### web3-rpc-methods + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +#### web3-types + +- Added hybrid build (ESM and CJS) of library (#5904) +- Added source files (#5956) + +#### web3-utils + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +#### web3-validator + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) +- Added functions `isHexString`, `isHexPrefixed`, `validateNoLeadingZeroes` (#5963) + +### Removed + +#### web3-core + +- `getConfig` method from `Web3Config` class, `config` is now public and accessible using `Web3Config.config` (#5950) + +#### web3-eth + +- Removed dependencies @ethereumjs/tx, @ethereumjs/common (#5963) + +#### web3-eth-abi + +- Removed `formatDecodedObject` function (#5934) + +#### web3-eth-contract + +- `data` was removed as a property of `ContractOptions` type (#5915) + +#### web3-utils + +- Removed dependencies @ethereumjs/tx, @ethereumjs/common (#5963) + +### Fixed + +#### web3-eth-ens + +- Bug fix of `checkNetwork` in ENS (#5988) + +## [4.0.1-rc.2] + +### Added + +#### web3-errors + +- `InvalidPropertiesForTransactionTypeError` with error code `429` (#6102) + +#### web3-eth-contract + +- Added support for `getPastEvents` method to filter `allEvents` and specific event (#6010) +- Added `maxPriorityFeePerGas` and `maxFeePerGas` in `ContractOptions` type and updated function using it in utils (#6118) +- Added method's type autodetection by ABI param (#6137) + +#### web3-types + +- Added `filters` param to the `Filter` type (#6010) +- Added types `JsonRpcSubscriptionResultOld`, `Web3ProviderMessageEventCallback`. Added `.on('data')` type support for old providers (#6082) +- Export for `HardforksOrdered` enum (#6102) +- Export for `Web3ValidationErrorObject` type (#6102) + +#### web3-utils + +- Optional `hexstrict` parameter added to numberToHex (#6004) + +### Fixed + +#### web3-eth + +- Fixed `ignoreGasPricing` bug with wallet in context (#6071) + +#### web3-eth-accounts + +- Fixed ESM import bugs reported in (#6032) and (#6034) +- ESM projects will not need to run --experimental-specifier-resolution=node (#6127) + +### Changed + +#### web3-core + +- Replaced Buffer for Uint8Array (#6004) + +#### web3-errors + +- Nested Smart Contract error data is extracted at `Eip838ExecutionError` constructor and the nested error is set at `innerError` (#6045) + +#### web3-eth + +- `formatTransaction` no longer throws a `TransactionDataAndInputError` if it's passed a transaction object with both `data` and `input` properties set (as long as they are the same value) (#6064) +- Refactored documentation for `rpc_method_wrappers` to point to the previously duplicated documentation found under the `Web3Eth` class documentation (#6054) +- Replaced Buffer for Uint8Array (#6004) +- Refactored `defaultTransactionTypeParser` to return correct EIP-2718 types, prior implementation was prioritizing `transaction.hardfork` and ignoring the use of `transaction.gasLimit`. `defaultTransactionTypeParser` will now throw `InvalidPropertiesForTransactionTypeError`s for properties are used that are incompatible with `transaction.type` (#6102) +- `prepareTransactionForSigning` and `defaultTransactionBuilder` now accepts optional `fillGasPrice` flag and by default will not fill gas(#6071) + +#### web3-eth-abi + +- Nested Smart Contract error data hex string is decoded when the error contains the data as object (when the data hex string is inside data.originalError.data or data.data) (#6045) + +#### web3-eth-accounts + +- Replaced `Buffer` for `Uint8Array` (#6004) +- The methods `recover`, `encrypt`, `privateKeyToAddress` does not support type `Buffer` but supports type `Uint8Array` (#6004) +- The method `parseAndValidatePrivateKey` returns a type `Uint8Array` instead of type `Buffer` (#6004) + +#### web3-providers-ipc + +- Replaced Buffer for Uint8Array (#6004) + +#### web3-types + +- Removed chainId, to, data & input properties from NonPayableCallOptions +- Replaced Buffer for Uint8Array (#6004) +- types `FMT_BYTES.BUFFER`, `Bytes` and `FormatType` and encryption option types for `salt` and `iv` has replaced support for `Buffer` for `Uint8Array` (#6004) +- Added `internalType` property to the `AbiParameter` type. + +#### web3-utils + +- Replaced Buffer for Uint8Array (#6004) +- The methods `hexToBytes`, `randomBytes` does not return type `Buffer` but type `Uint8Array` (#6004) +- The methods `sha3` and `keccak256Wrapper` does not accept type `Buffer` but type `Uint8Array` (#6004) +- The method `bytesToBuffer` has been removed for the usage of `bytesToUint8Array` (#6004) + +#### web3-validator + +- Replaced Buffer for Uint8Array (#6004) + +### Removed + +#### web3-eth-ens + +- Removed non read-only methods (#6084) + +#### web3-validator + +- `Web3ValidationErrorObject` type is now exported from `web3-types` package (#6102) + +## [4.0.1] + +Release Notes: + +Web3.js 4.0.1 is written in TypeScript and has many exciting features such as: +Easy extensibility ( with web3 Plugins feature ) +In compliance with ETH EL Specification +Dynamic Contract Typing +Native typescript +ESM CJS native builds +85%+ test coverage +Custom data formatting feature +Reduced package size +New packages ( web3-types, web3-errors, web3-validator, web3-rpc-methods ) +Validation functionality using schema + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) +[Plugin Developers](https://docs.web3js.org/guides/web3_plugin_guide/plugin_authors) +[Plugin Users](https://docs.web3js.org/guides/web3_plugin_guide/plugin_users) + +Detailed List of changes are mentioned under: +4.0.0-alpha.0 +4.0.1-alpha.1 +4.0.1-alpha.2 +4.0.1-alpha.3 +4.0.1-alpha.4 +4.0.1-alpha.5 +4.0.1-rc.0 +4.0.1-rc.1 +4.0.1-rc.2 + +If there are any bugs, improvements, optimizations or any new feature proposal feel free to create github issue, or post a pull request for contributions. + +## [4.0.2] + +### Fixed + +#### web3 + +- Fixed bug #6185, now web3.js compiles on typescript v5 (#6195) +- Fixed #6162 @types/ws issue (#6205) + +#### web3-core + +- Fixed Batch requests erroring out on one request (#6164) +- Fixed the issue: Subscribing to multiple blockchain events causes every listener to be fired for every registered event (#6210) +- Fixed the issue: Unsubscribe at a Web3Subscription class will still have the id of the subscription at the Web3SubscriptionManager (#6210) +- Fixed the issue: A call to the provider is made for every subscription object (#6210) + +#### web3-eth-abi + +- Support for "decoding" indexed string event arguments (returns the keccak256 hash of the string value instead of the actual string value) (#6167) + +#### web3-eth-accounts + +- Fixed "The `r` and `s` returned by `signTransaction` to does not always consist of 64 characters #6207" (#6216) + +#### web3-eth-contract + +- Event filtering using non-indexed and indexed string event arguments (#6167) + +#### web3-eth-ens + +- Fixed bug #6185, now web3.js compiles on typescript v5 (#6195) + +#### web3-providers-ws + +- Fixed #6162 @types/ws issue (#6205) + +#### web3-types + +- Fixed bug #6185, now web3.js compiles on typescript v5 (#6195) + +### Added + +#### web3 + +- Exported `Web3Context`, `Web3PluginBase`, `Web3EthPluginBase` from `'web3-core'`, and `Web3Validator` from `'web3-validator'` (#6165) + +#### web3-core + +- Web3Subscription constructor accept a Subscription Manager (as an alternative to accepting Request Manager that is now marked marked as deprecated) (#6210) + +#### web3-types + +- Added the `SimpleProvider` interface which has only `request(args)` method that is compatible with EIP-1193 (#6210) +- Added the `Eip1193EventName` type that contains the possible events names according to EIP-1193 (#6210) + +### Changed + +#### web3-core + +- Web3Subscription constructor overloading that accept a Request Manager is marked as deprecated (#6210) + +#### web3-errors + +- Dependencies updated + +#### web3-eth + +- Dependencies updated + +#### web3-eth-iban + +- Dependencies updated + +#### web3-eth-personal + +- Dependencies updated + +#### web3-net + +- Dependencies updated + +#### web3-providers-http + +- Dependencies updated + +#### web3-providers-ipc + +- Dependencies updated + +#### web3-rpc-methods + +- Dependencies updated + +#### web3-types + +- The `EIP1193Provider` class has now all the events (for `on` and `removeListener`) according to EIP-1193 (#6210) + +#### web3-utils + +- Dependencies updated + +#### web3-validator + +- Dependencies updated + +## [4.0.3] + +### Fixed + +#### web3 + +- Fixed bug #6236 by adding personal type in web3.eth (#6245) + +#### web3-rpc-methods + +- Rpc method `getPastLogs` accept blockHash as a parameter https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs (#6181) + +#### web3-types + +- type `Filter` includes `blockHash` (#6206) + +#### web3-utils + +- BigInts pass validation within the method `numberToHex` (#6206) + +### Changed + +#### web3-core + +- Dependencies updated + +#### web3-errors + +- Dependencies updated + +#### web3-eth + +- Dependencies updated + +#### web3-eth-abi + +- Dependencies updated + +#### web3-eth-accounts + +- Dependencies updated + +#### web3-eth-contract + +- Dependencies updated + +#### web3-eth-ens + +- Dependencies updated + +#### web3-eth-iban + +- Dependencies updated + +#### web3-eth-personal + +- Dependencies updated + +#### web3-net + +- Dependencies updated + +#### web3-providers-http + +- Dependencies updated + +#### web3-providers-ipc + +- Dependencies updated + +#### web3-providers-ws + +- Dependencies updated + +#### web3-validator + +- Dependencies updated + +## [4.1.0] + +### Added + +#### web3 + +- Added minimum support of web3.extend function + +#### web3-core + +- Added minimum support of web3.extend function + +#### web3-errors + +- `RpcErrorMessages` that contains mapping for standard RPC Errors and their messages. (#6230) +- created `TransactionGasMismatchInnerError` for clarity on the error in `TransactionGasMismatchError` (#6215) +- created `MissingGasInnerError` for clarity on the error in `MissingGasError` (#6215) + +#### web3-eth + +- A `rpc_method_wrapper` (`signTypedData`) for the rpc calls `eth_signTypedData` and `eth_signTypedData_v4` (#6286) +- A `signTypedData` method to the `Web3Eth` class (#6286) + +#### web3-eth-abi + +- A `getEncodedEip712Data` method that takes an EIP-712 typed data object and returns the encoded data with the option to also keccak256 hash it (#6286) + +#### web3-rpc-methods + +- A `signTypedData` method to `eth_rpc_methods` for the rpc calls `eth_signTypedData` and `eth_signTypedData_v4` (#6286) + +#### web3-types + +- `eth_signTypedData` and `eth_signTypedData_v4` to `web3_eth_execution_api` (#6286) +- `Eip712TypeDetails` and `Eip712TypedData` to `eth_types` (#6286) + +#### web3-validator + +- Added `json-schema` as a main json schema type (#6264) + +### Fixed + +#### web3-core + +- Fixed the issue: "Version 4.x does not fire connected event for subscriptions. #6252". (#6262) + +#### web3-errors + +- Fixed: "'disconnect' in Eip1193 provider must emit ProviderRpcError #6003".(#6230) + +#### web3-eth + +- sendTransaction will have gas filled by default using method `estimateGas` unless transaction builder `options.fillGas` is false. (#6249) +- Missing `blockHeaderSchema` properties causing some properties to not appear in response of `newHeads` subscription (#6243) +- Missing `blockHeaderSchema` properties causing some properties to not appear in response of `newHeads` subscription (#6243) + +#### web3-providers-ws + +- Ensure a fixed version for "@types/ws": "8.5.3" (#6309) + +### Changed + +#### web3-core + +- No need to pass `CommonSubscriptionEvents &` at every child class of `Web3Subscription` (#6262) +- Implementation of `_processSubscriptionResult` and `_processSubscriptionError` has been written in the base class `Web3Subscription` and maid `public`. (#6262) +- A new optional protected method `formatSubscriptionResult` could be used to customize data formatting instead of re-implementing `_processSubscriptionResult`. (#6262) +- No more needed to pass `CommonSubscriptionEvents & ` for the first generic parameter of `Web3Subscription` when inheriting from it. (#6262) + +#### web3-eth + +- `MissingGasError` error message changed for clarity (#6215) +- `input` and `data` are no longer auto populated for transaction objects if they are not present. Instead, whichever property is provided by the user is formatted and sent to the RPC provider. Transaction objects returned from RPC responses are still formatted to contain both `input` and `data` properties (#6294) + +#### web3-eth-accounts + +- Dependencies updated + +#### web3-eth-contract + +- Dependencies updated + +#### web3-eth-ens + +- Dependencies updated + +#### web3-eth-iban + +- Dependencies updated + +#### web3-eth-personal + +- Dependencies updated + +#### web3-net + +- Dependencies updated + +#### web3-providers-http + +- Dependencies updated + +#### web3-providers-ipc + +- Dependencies updated + +#### web3-types + +- `input` and `data` are now optional properties on `PopulatedUnsignedBaseTransaction` (previously `input` was a required property, and `data` was not available) (#6294) + +#### web3-utils + +- Dependencies updated + +#### web3-validator + +- Replace `is-my-json-valid` with `zod` dependency. Related code was changed (#6264) +- Types `ValidationError` and `JsonSchema` were changed (#6264) + +### Removed + +#### web3-eth + +- Missing `blockHeaderSchema` properties causing some properties to not appear in response of `newHeads` subscription (#6243) +- Type `RawValidationError` was removed (#6264) + +#### web3-validator + +- Type `RawValidationError` was removed (#6264) + +## [4.1.1] + +### Added + +#### web3 + +- To fix issue #6190, added the functionality to introduce different timeout value for Web3. (#6336) + +#### web3-core + +- To fix issue #6190, added the functionality to introduce different timeout value for Web3. (#6336) + +#### web3-eth-contract + +- In case of error events there will be inner error also available for details + +### Fixed + +#### web3-eth + +- Added return type for `formatSubscriptionResult` in class `NewHeadsSubscription` (#6368) + +#### web3-core + +- Fixed rpc errors not being sent as an inner error when using the `send` method on request manager (#6300). + +#### web3-errors + +- ESM import bug (#6359) + +#### web3-eth-contract + +- Fixed bug in `contract.events.allEvents` + +#### web3-validator + +- ESM import bug (#6359) + +### Changed + +#### web3-eth-abi + +- Dependencies updated + +#### web3-eth-accounts + +- Dependencies updated + +#### web3-eth-ens + +- Dependencies updated + +#### web3-eth-iban + +- Dependencies updated + +#### web3-eth-personal + +- Dependencies updated + +#### web3-net + +- Dependencies updated + +#### web3-providers-http + +- Dependencies updated + +#### web3-providers-ipc + +- Dependencies updated + +#### web3-providers-ws + +- Dependencies updated + +#### web3-rpc-methods + +- Dependencies updated + +#### web3-types + +- Dependencies updated + +#### web3-utils + +- Dependencies updated + +## [4.1.2] + +### Fixed + +#### web3 + +- Fix of incorrect provider warning behavior + +#### web3-eth-accounts + +- Fixed "The `r` and `s` returned by `sign` to does not always consist of 64 characters" (#6411) + +#### web3-eth-contract + +#### web3-utils + +- `soliditySha3()` with BigInt support + +### Added + +#### web3-core + +- Added to `Web3Config` property `contractDataInputFill` allowing users to have the choice using property `data`, `input` or `both` for contract methods to be sent to the RPC provider when creating contracts. (#6377) (#6400) + +#### web3-eth + +- Added to `Web3Config` property `contractDataInputFill` allowing users to have the choice using property `data`, `input` or `both` for contract methods to be sent to the RPC provider when creating contracts. (#6377) (#6400) +- Added `ALL_EVENTS` and `ALL_EVENTS_ABI` constants, `SendTransactionEventsBase` type, `decodeEventABI` method (#6410) + +#### web3-eth-contract + +- Added `dataInputFill` as a ContractInitOption, allowing users to have the choice using property `data`, `input` or `both` for contract methods to be sent to the RPC provider. (#6355) +- Added to `Web3Config` property `contractDataInputFill` allowing users to have the choice using property `data`, `input` or `both` for contract methods to be sent to the RPC provider when creating contracts. (#6377) + +#### web3-types + +- add `asEIP1193Provider` to `Web3BaseProvider` so every inherited class can have the returned value of `request` method, fully compatible with EIP-1193. (#6407) + +### Changed + +#### web3-core + +- Dependencies updated + +#### web3-errors + +- Dependencies updated + +#### web3-eth-abi + +- Dependencies updated + +#### web3-eth-ens + +- Dependencies updated + +#### web3-eth-iban + +- Dependencies updated + +#### web3-eth-personal + +- Dependencies updated + +#### web3-net + +- Dependencies updated + +#### web3-providers-http + +- Dependencies updated + +#### web3-providers-ipc + +- Dependencies updated + +#### web3-providers-ws + +- Dependencies updated + +#### web3-rpc-methods + +- Dependencies updated + +#### web3-validator + +- Dependencies updated + +## [4.2.0] + +### Added + +#### web3 + +- Various web3 sub packages has new functions details are in root changelog + +#### web3-eth + +- Added `ALL_EVENTS` and `ALL_EVENTS_ABI` constants, `SendTransactionEventsBase` type, `decodeEventABI` method (#6410) + +#### web3-eth-accounts + +- Added public function `privateKeyToPublicKey` +- Added exporting `BaseTransaction` from the package (#6493) +- Added exporting `txUtils` from the package (#6493) + +#### web3-types + +- Interface `EventLog` was added. (#6410) + +#### web3-utils + +- As a replacment of the node EventEmitter, a custom `EventEmitter` has been implemented and exported. (#6398) + +### Fixed + +#### web3-core + +- Fix the issue: "Uncaught TypeError: Class extends value undefined is not a constructor or null #6371". (#6398) + +#### web3-errors + +- Added new SchemaFormatError (#6434) + +#### web3-eth + +- Ensure provider.supportsSubscriptions exists before watching by subscription (#6440) +- Fixed param sent to `checkRevertBeforeSending` in `sendSignedTransaction` +- Fixed `defaultTransactionBuilder` for value issue (#6509) + +#### web3-eth-abi + +- Fix issue with default config with babel (and React): "TypeError: Cannot convert a BigInt value to a number #6187" (#6506) + +#### web3-eth-accounts + +- Fixed `recover` function, `v` will be normalized to value 0,1 (#6344) + +#### web3-providers-http + +- Fix issue lquixada/cross-fetch#78, enabling to run web3.js in service worker (#6463) + +#### web3-providers-ipc + +- Fixed bug in chunks processing logic (#6496) + +#### web3-providers-ws + +- Fixed bug in chunks processing logic (#6496) + +#### web3-utils + +- Fix issue with default config with babel (and React): "TypeError: Cannot convert a BigInt value to a number #6187" (#6506) +- Fixed bug in chunks processing logic (#6496) + +#### web3-validator + +- Multi-dimensional arrays are now handled properly when parsing ABIs (#6435) +- Fix issue with default config with babel (and React): "TypeError: Cannot convert a BigInt value to a number #6187" (#6506) +- Validator will now properly handle all valid numeric type sizes: intN / uintN where 8 <= N <= 256 and N % 8 == 0 (#6434) +- Will now throw SchemaFormatError when unsupported format is passed to `convertToZod` method (#6434) + +### Changed + +#### web3 + +- Dependencies updated + +#### web3-core + +- defaultTransactionType is now type 0x2 instead of 0x0 (#6282) +- Allows formatter to parse large base fee (#6456) +- The package now uses `EventEmitter` from `web3-utils` that works in node envrioment as well as in the browser. (#6398) + +#### web3-eth + +- Transactions will now default to type 2 transactions instead of type 0, similar to 1.x version. (#6282) + +#### web3-eth-contract + +- The `events` property was added to the `receipt` object (#6410) + +#### web3-eth-ens + +- Dependencies updated + +#### web3-eth-iban + +- Dependencies updated + +#### web3-eth-personal + +- Dependencies updated + +#### web3-net + +- Dependencies updated + +#### web3-providers-http + +- Bump cross-fetch to version 4 (#6463). + +#### web3-rpc-methods + +- Dependencies updated + +## [4.2.1] + +### Fixed + +#### web3-eth-abi + +- Bug fix of `ERR_UNSUPPORTED_DIR_IMPORT` in ABI (#6535) + +### Changed + +#### web3-eth-contract + +- Dependencies updated + +#### web3-eth + +- Dependencies updated + +#### web3-eth-ens + +- Dependencies updated + +#### web3-eth-personal + +- Dependencies updated + +## [Unreleased] \ No newline at end of file diff --git a/CONTRIBUTIONS.md b/CONTRIBUTIONS.md index 048fdb5918d..243e89e27f4 100644 --- a/CONTRIBUTIONS.md +++ b/CONTRIBUTIONS.md @@ -1,7 +1,7 @@ -## Guidelines for Pull Requests and Releases (Web3 1.x) +## Guidelines for Pull Requests and Releases (Web3 4.x) This document provides some ground rules for contributors (including the maintainer(s) of -the project) about how to make, review and publish changes to 1.x. The most basic requirement is +the project) about how to make, review and publish changes to 4.x. The most basic requirement is that **Web3 not break**. ### Pull Requests for substantive changes (e.g. everything except comments and docs) diff --git a/README.md b/README.md index 1ad5ccc36ef..e9ff2250abf 100644 --- a/README.md +++ b/README.md @@ -1,187 +1,91 @@

- web3.js + web3.js

-# web3.js - Ethereum JavaScript API +# Web3.js -[![Gitter][gitter-image]][gitter-url] [![StackExchange][stackexchange-image]][stackexchange-url] [![NPM Package Version][npm-image-version]][npm-url] [![NPM Package Downloads][npm-image-downloads]][npm-url] [![Build Status][actions-image]][actions-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] [![Coverage Status][coveralls-image]][coveralls-url] [![Lerna][lerna-image]][lerna-url] [![Netlify Status][netlify-image]][netlify-url] +[![Dependency Status][downloads-image]][npm-url] ![Unit Test Coverage](https://img.shields.io/codecov/c/github/web3/web3.js/4.x?label=unit%20test%20coverage) +![Commit Activity](https://img.shields.io/github/commit-activity/m/web3/web3.js/4.x?label=commit%20activity%20on%204.x) +![Contributors](https://img.shields.io/github/contributors/web3/web3.js?label=contributors%20on%20all%20branches) -This is the Ethereum [JavaScript API][docs] -which connects to the [Generic JSON-RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC) spec. +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) -You need to run a local or remote [Ethereum](https://www.ethereum.org/) node to use this library. - -Please read the [documentation][docs] for more. +Web3.js is a TypeScript implementation of the [Ethereum JSON RPC API](https://eth.wiki/json-rpc/API) and related tooling maintained by [ChainSafe Systems](https://chainsafe.io). ## Installation -### Node - -```bash -npm install web3 -``` - -### Yarn - -```bash -yarn add web3 -``` - -### In the Browser - -Use the prebuilt `dist/web3.min.js`, or -build using the [web3.js][repo] repository: - -```bash -npm run build -``` - -Then include `dist/web3.min.js` in your html file. -This will expose `Web3` on the window object. - -Or via jsDelivr CDN: - -```html - -``` - -UNPKG: - -```html - -``` - -## Usage - -```js -// In Node.js -const Web3 = require('web3'); - -let web3 = new Web3('ws://localhost:8546'); -console.log(web3); -> { - eth: ... , - shh: ... , - utils: ..., - ... -} -``` - -Additionally you can set a provider using `web3.setProvider()` (e.g. WebsocketProvider): - -```js -web3.setProvider('ws://localhost:8546'); -// or -web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:8546')); -``` - -There you go, now you can use it: +You can install the package either using [NPM](https://www.npmjs.com/package/web3) or using [Yarn](https://yarnpkg.com/package/web3) -```js -web3.eth.getAccounts().then(console.log); -``` - -### Usage with TypeScript - -We support types within the repo itself. Please open an issue here if you find any wrong types. - -You can use `web3.js` as follows: - -```typescript -import Web3 from 'web3'; -const web3 = new Web3('ws://localhost:8546'); -``` - -If you are using the types in a `commonjs` module, like in a Node app, you just have to enable `esModuleInterop` and `allowSyntheticDefaultImports` in your `tsconfig` for typesystem compatibility: - -```js -"compilerOptions": { - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - .... -``` - -## Trouble shooting and known issues. - -### Web3 and Angular -If you are using Ionic/Angular at a version >5 you may run into a build error in which modules `crypto` and `stream` are `undefined` - -a work around for this is to go into your node-modules and at `/angular-cli-files/models/webpack-configs/browser.js` change the `node: false` to `node: {crypto: true, stream: true}` as mentioned [here](https://github.com/ethereum/web3.js/issues/2260#issuecomment-458519127) - -Another variation of this problem was an issue opned on angular-cli: https://github.com/angular/angular-cli/issues/1548 - -## Documentation - -Documentation can be found at [ReadTheDocs][docs]. +> If you wanna checkout latest bugfix or feature, use `npm install web3@dev` -## Building - -### Requirements - -- [Node.js](https://nodejs.org) -- [npm](https://www.npmjs.com/) - -```bash -sudo apt-get update -sudo apt-get install nodejs -sudo apt-get install npm -``` - -### Building (webpack) - -Build the web3.js package: +### Using NPM ```bash -npm run build +npm install web3 ``` -### Testing (mocha) +### Using Yarn ```bash -npm test +yarn add web3 ``` -### Contributing - -Please follow the [Contribution Guidelines](./CONTRIBUTIONS.md) and [Review Guidelines](./REVIEW.md). - -This project adheres to the [Release Guidelines](./REVIEW.md). - -### Community - -- [Gitter][gitter-url] -- [StackExchange][stackexchange-url] - -### Similar libraries in other languages - -- Haskell: [hs-web3](https://github.com/airalab/hs-web3) -- Java: [web3j](https://github.com/web3j/web3j) -- PHP: [web3.php](https://github.com/sc0Vu/web3.php) -- Purescript: [purescript-web3](https://github.com/f-o-a-m/purescript-web3) -- Python: [Web3.py](https://github.com/ethereum/web3.py) -- Ruby: [ethereum.rb](https://github.com/EthWorks/ethereum.rb) -- Scala: [web3j-scala](https://github.com/mslinn/web3j-scala) +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new/choose) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Migration Guide + +- [Migration Guide from Web3.js 1.x to 4.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + Breaking changes are listed in migration guide and its first step for migrating from Web3.js 1.x to 4.x. If there is any question or discussion feel free to ask in [Discord](https://discord.gg/yjyvFRP), and in case of any bug or new feature request [open issue](https://github.com/web3/web3.js/issues/new) or create a pull request for [contributions](https://github.com/web3/web3.js/blob/4.x/CONTRIBUTIONS.md). + +## Useful links + +- [Web3 tree shaking support guide](https://docs.web3js.org/guides/advanced/web3_tree_shaking_support_guide/) +- [React App Example](https://github.com/ChainSafe/web3js-example-react-app) + +## Architecture Overview + +| Package | Version | License | Docs | Description | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| [web3](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3%2Fpackage.json)](https://www.npmjs.com/package/web3) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3) | :rotating_light: Entire Web3.js offering (includes all packages) | +| [web3-core](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-core) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-core%2Fpackage.json)](https://www.npmjs.com/package/web3-core) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-core) | Core functions for web3.js packages | +| [web3-errors](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-errors) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-errors%2Fpackage.json)](https://www.npmjs.com/package/web3-core) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-errors) | Errors Objects | +| [web3-eth](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth%2Fpackage.json)](https://www.npmjs.com/package/web3-eth) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth) | Modules to interact with the Ethereum blockchain and smart contracts | +| [web3-eth-abi](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth-abi) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-abi%2Fpackage.json)](https://www.npmjs.com/package/web3-eth-abi) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth-abi) | Functions for encoding and decoding EVM in/output | +| [web3-eth-accounts](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth-accounts) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-accounts%2Fpackage.json)](https://www.npmjs.com/package/web3-eth-accounts) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth-accounts) | Functions for managing Ethereum accounts and signing | +| [web3-eth-contract](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth-contract) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-contract%2Fpackage.json)](https://www.npmjs.com/package/web3-eth-contract) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth-contract) | The contract package contained in [web3-eth](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth) | +| [web3-eth-ens](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth-ens) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-ens%2Fpackage.json)](https://www.npmjs.com/package/web3-eth-ens) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth-ens) | Functions for interacting with the Ethereum Name Service | +| [web3-eth-iban](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth-iban) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-iban%2Fpackage.json)](https://www.npmjs.com/package/web3-eth-iban) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth-iban) | Functionality for converting Ethereum addressed to IBAN addressed and vice versa | +| [web3-eth-personal](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth-personal) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-personal%2Fpackage.json)](https://www.npmjs.com/package/web3-eth-personal) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth-personal) | Module to interact with the Ethereum blockchain accounts stored in the node | +| [web3-net](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-net) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-net%2Fpackage.json)](https://www.npmjs.com/package/web3-net) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-net) | Functions to interact with an Ethereum node's network properties | +| [web3-providers-http](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-providers-http) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-providers-http%2Fpackage.json)](https://www.npmjs.com/package/web3-providers-http) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-providers-http) | Web3.js provider for the HTTP protocol | +| [web3-providers-ipc](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-providers-ipc) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-providers-ipc%2Fpackage.json)](https://www.npmjs.com/package/web3-providers-ipc) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-providers-ipc) | Web3.js provider for IPC | +| [web3-providers-ws](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-providers-ws) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-providers-ws%2Fpackage.json)](https://www.npmjs.com/package/web3-providers-ws) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-providers-ws) | Web3.js provider for the Websocket protocol | +| [web3-rpc-methods](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-rpc-methods) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-rpc-methods%2Fpackage.json)](https://www.npmjs.com/package/web3-types) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/) | RPC Methods | +| [web3-types](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-types) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-types%2Fpackage.json)](https://www.npmjs.com/package/web3-types) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-types) | Shared useable types | +| [web3-utils](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-utils) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-utils%2Fpackage.json)](https://www.npmjs.com/package/web3-utils) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-utils) | Useful utility functions for Dapp developers | +| [web3-validator](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-validator) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-validator%2Fpackage.json)](https://www.npmjs.com/package/web3-validator) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-validator) | Utilities for validating objects | + +## Package.json Scripts + +| Script | Description | +| ---------------- | ------------------------------------------------------------------ | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build all packages | +| lint | Uses `eslint` to lint all packages | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests in each package | +| test:integration | Uses `jest` to run tests under `/test/integration` in each package | +| test:unit | Uses `jest` to run tests under `/test/unit` in each package | -[repo]: https://github.com/ethereum/web3.js -[docs]: http://web3js.readthedocs.io/ -[npm-image-version]: https://img.shields.io/npm/v/web3.svg -[npm-image-downloads]: https://img.shields.io/npm/dm/web3.svg [npm-url]: https://npmjs.org/package/web3 -[actions-image]: https://github.com/ethereum/web3.js/workflows/Build/badge.svg -[actions-url]: https://github.com/ethereum/web3.js/actions -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev -[dep-dev-image]: https://david-dm.org/ethereum/web3.js/dev-status.svg -[dep-dev-url]: https://david-dm.org/ethereum/web3.js#info=devDependencies -[coveralls-image]: https://coveralls.io/repos/ethereum/web3.js/badge.svg?branch=1.x -[coveralls-url]: https://coveralls.io/r/ethereum/web3.js?branch=1.x -[waffle-image]: https://badge.waffle.io/ethereum/web3.js.svg?label=ready&title=Ready -[waffle-url]: https://waffle.io/ethereum/web3.js -[gitter-image]: https://badges.gitter.im/Join%20Chat.svg -[gitter-url]: https://gitter.im/ethereum/web3.js -[lerna-image]: https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg -[lerna-url]: https://lerna.js.org/ -[netlify-image]: https://api.netlify.com/api/v1/badges/1fc64933-d170-4939-8bdb-508ecd205519/deploy-status -[netlify-url]: https://app.netlify.com/sites/web3-staging/deploys -[stackexchange-image]: https://img.shields.io/badge/web3js-stackexchange-brightgreen -[stackexchange-url]: https://ethereum.stackexchange.com/questions/tagged/web3js +[downloads-image]: https://img.shields.io/npm/dm/web3?label=npm%20downloads diff --git a/RELEASE.md b/RELEASE.md index 9b8f6b9b302..feb3295b429 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -18,110 +18,41 @@ A patch release only contains required bug fixes with a low risk to impact depen Further details about versioning can be found in the [semver 2.0.0 specification](https://semver.org/) we follow. -## Release Process Rules - -### Major - -1. The release should get released as an `RC` version on the specified track below. -1. The minor `RC` version stays released for a `month` for testing purposes. -1. During release review, the code is frozen unless new changes are proposed, approved and merged. - 1. Changes should trigger a new `RC` release and set the release clock back a `week` so reviewers have the time they need to test new changes. -1. The project lead should manually test the `RC` against a Node project and the published - minified bundle in a browser context. An external reviewer should verify they have done the same. - -### Minor - -The `minor` release inherits the rules from the `major` release but has a smaller testing phase of one `week` and the release clock will be set back `2 days` on a change of the published code. - -### Patch - -Since November 2019, Web3 has been following the `minor` rules for `patch` as well, to help establish a series of non-breaking releases. - -## Prereleases - -### Release Candidate - -A release candidate gets published on the `rc` track and is no longer under active development. A release candidate gets released with the version number defined in the [semver 2.0.0 specification](https://semver.org/) specification. - -### Beta Release - -A `beta` release gets published on the `beta` track and is under active developemnt. The version number of the `beta` release gets defined as specified in the [semver 2.0.0](https://semver.org/) document. - -## Long Term Support (LTS) - -> Note: This section has not yet been decided and so for now is purely informative. - -To provide safety over longer periods, it is important to have versions tagged as `LTS`. - -| Release | Status | Initial Release | LTS Start | End-of-Life | -| :-----: | :-----------: | :-------------: | :-----------: | :---------: | -| 1.x | LTS | 24. Jul. 2017 | 23. Jul. 2019 | TBD | -| 2.x | Alpha Preview | 13. Jul. 2019 | TBD | TBD | - -## Deprecation Rules - -Because breaking changes are always happening during the development of a project it is required to define rules on how we inform depending projects about coming changes with enough time to react. This doesn't mean that we plan to introduce breaking changes but sometimes they are required. - -1. Deprecations will be announced in our `CHANGELOG` and in the description of a release. -2. Deprecated functionalities should be marked in the developer documentation, function documentation, and the related types as deprecated. -3. A deprecated functionality stays deprecated for the next `X (TBD)` increases of the minor version. - -# web3.js Release Process - -The following describes the steps required to release a new version of `web3.js`. It is followed to adhere to community standards and expectations. - -## Release Candidate (RC) Release Procedure - -1. Create a GitHub draft release. - 1. [Example](https://github.com/ethereum/web3.js/releases/tag/v1.2.7-rc.0) - should contain at a minimum: release notes, changelog, any other important notes. - 1. Request review on the draft release from a web3.js contributor ([@cgewecke](https://github.com/cgewecke)) for completeness, grammar, etc. -1. Create release branch (e.g. `release/1.2.7`). -1. Update and commit `CHANGELOG.md`. - 1. Move section header `[Unreleased]` to bottom. - 1. Add next anticipated release version number to bottom (as a placeholder for new changelog entries). -1. Create release commit and tags e.g. `lerna version 1.2.7-rc.0 --no-push` - 1. (updates package version numbers, builds minified file (for `1.x`), creates release commit and tags.) -1. Push release branch to origin with tags `git push origin release/1.2.7 --follow-tags`. -1. Create release PR as draft ([example](https://github.com/ethereum/web3.js/pull/3351)). -1. Ensure CI is green / passing. - 1. (spend time here inspecting the CI logs to ensure everything looks valid and results were reported correctly) -1. Run `npm run publish from-package -- --dist-tag rc`. - 1. Lerna can sometimes have difficulty with the number of packages we have. If the above command is unsuccessful, for every unpublished package run: `lerna publish --scope="package-name"` `npm dist-tag add @ rc`) -1. Publish the GitHub release. -1. A GitHub Webhook should trigger the ReadTheDocs build after the release is published. - 1. (The build may sometimes need to be manually triggered in ReadTheDocs admin panel. If the version does not appear, create a build of a previous version to refresh the list.) - 1. Activate the new version. -1. Request PR review from key contributors: - 1. Chris from EthereumJS ([@cgewecke](https://github.com/cgewecke)) - 1. Patricio from Nomic Labs ([@alcuadrado](https://github.com/alcuadrado)) - 1. Michael from Embark ([@michaelsbradleyjr](https://github.com/michaelsbradleyjr)) - 1. Nicholas from Truffle ([@gnidan](https://github.com/gnidan)) - 1. If touches or affects ENS: Nick Johnson ([@Arachnid](https://github.com/Arachnid)) -1. Wait 1 week for community discourse and 2 reviewer approvals. - 1. (if release is an emergency patch, time limit may be reduced relative to severity.) - -## Formal Release Procedure - -1. Create GitHub draft release from text of `rc` release. -1. Checkout release branch (e.g. `release/1.2.7`). -1. Create and push release commit and tags: `lerna version 1.2.7 --force-publish --no-push` -1. Push release branch to origin with tags `git push origin release/1.2.7 --follow-tags`. -1. Publish the GitHub release. -1. A GitHub Webhook should trigger the ReadTheDocs build after the release is published. - 1. (The build may sometimes need to be manually triggered in ReadTheDocs admin panel. If the version does not appear, create a build of a previous version to refresh the list.) - 1. Activate the new version. - 1. Set the version to default. -1. Run `npm run publish from-package`. -1. Merge release PR. -1. Share the release announcement on: - 1. (_Note:_ There is a delay on npm between different regions, so all may not see the release immediately.) - 1. Twitter - 1. Gitter - 1. Ethereum JavaScript Community (EJC) Discord - 1. Reddit - 1. Depending on release's significance to certain projects, write to: - 1. Fabio from 0x ([@fabioberger](https://github.com/fabioberger)) - 1. Santiago from OpenZeppelin ([@spalladino](https://github.com/spalladino)) - 1. Pedro from WalletConnect ([@pedrouid](https://github.com/pedrouid)) - 1. Josh from FunFair ([@joshstevens19](https://github.com/joshstevens19)) - 1. Truffle, Gnosis, Aragon, Embark, Alchemy, Buidler, Remix +## Release Process + +### Running E2E Tests + +`E2E Network Tests` will be triggered to run via a Github workflow when a PR is open for a branch prefixed with `release/` and is being merged into `4.x` branch. These tests depend on a couple of ENVs to be set that are configurable in Github's Action Secrets when running these tests in CI. The following required secrets are: + +- `E2E_TESTS_ALLOWED_SEND_TRANSACTION`: If set to `false` this will keep the Sepolia tests that spend ETH from runnning, setting to anything else will cause them to run +- `TEST_ACCOUNT_PRIVATE_KEY`: The private key of the Sepolia account to use when submitting transactions +- `INFURA_SEPOLIA_HTTP`: The provider to be used to access the Sepolia network +- `INFURA_MAINNET_HTTP`: The provider to be used to access Mainnet + +--- + +1. `git checkout 4.x`: Verify you are on the `4.x` base branch +2. `git checkout -b release/bumped-version`: Create and checkout a branch with the `bumped-version` e.g. `git checkout -b release/4.0.0-alpha.0` + - `bumped-version` of release branch should be of main web3 package. +3. `yarn`: Verify all dependencies have been installed +4. Bump packages version numbers using `lerna version --no-push --no-private --no-git-tag-version` . This will update package versions and also run lifecycle scripts. + - It will prompt for new version , modify package metadata and run life cycle scripts (in our case `version`), for bootstrapping lerna will use underlying yarn. +5. Update the root and each package's `CHANGELOG.md`: Replace the `## [Unreleased]` header with new package version, and move `## [Unreleased]` header below listed changes + - For root `CHANGELOG.md` copy over all the listed changes for each package +6. Run `yarn build:web` after lerna updates version and builds lib . This will bundle minified builds. +7. Commit the version bump changes and builds in release branch created in step 2 +8. `git tag bumped-version`: Tag the commit with bumped version having prefix `v` , e.g. `git tag v4.0.1-alpha.0` +9. `git push origin release/bumped-version`: Push release branch to `origin` +10. `git push origin --tags`: Push release tag created in `Step 8` to `origin` +11. Create a draft release on Github similar to [this](https://github.com/ChainSafe/web3.js/releases/tag/web3-providers-base%401.0.0-alpha.1) + - Check `This is a pre-release` + - In the release description, copy all entries in `CHANGELOG.md` for the version being released +12. Click `Save draft` +13. Open pull request to merge branch created in `Step 2` (`release/bumped-version`) into `4.x` +14. Wait for all tests to pass in github CI/CD , If there are any unusual warnings or errors in logs, discuss with team +15. When sufficient approvals have been met, publish draft release created in `Step 11` +16. Run `npx lerna publish from-package --ignore-scripts --dist-tag <>` in the root directory to publish packages to NPM + - IMPORTANT: Replace `<>` with required tag in above command, e.g. if publishing RC, use following command: + `npx lerna publish from-package --ignore-scripts --dist-tag rc` + - lerna will not invoke life cycle scripts before publishing and this will publish all packages to NPM public registry. +17. Finally if all of above steps are completed successfully, merge release PR into `4.x` branch. diff --git a/REVIEW.md b/REVIEW.md index 19d1abe230f..60078bc6121 100644 --- a/REVIEW.md +++ b/REVIEW.md @@ -6,22 +6,22 @@ Only published PRs will be considered for review. Draft PRs will be considered i ## Rules -* [ ] PR follows the provided [template](.github/PULL_REQUEST_TEMPLATE.md). -* [ ] PR doesn't contain unneccessary changes. -* [ ] The changed code preserves the conventions and stylistic consistency of the project. -* [ ] PR uses labels accordingly. (new labels may be suggested) -* [ ] PR includes unit and e2e tests if related to any logic changes. - * [ ] The code coverage rate did not decrease. - * [ ] The error case is always tested. - * [ ] The description of the test case is self-describing. - * [ ] Test cases are grouped for clarity. -* [ ] A PR may only be merged if the following conditions are fulfilled: - * [ ] The correct base branch is selected. - * [ ] Any new files contain the web3.js file header. - * [ ] The documentation was updated (if applicable). - * [ ] The CHANGELOG was updated accordingly. - * [ ] The CI with QA passes succesfully. - * [ ] The CI logs were manually checked to ensure false positives were not reported. - * [ ] All comments have been addressed. - * [ ] Doesn't add undue maintenance burden. - * [ ] Doesn't increase the bundle size or is clearly explained why. +- [ ] PR follows the provided [template](.github/PULL_REQUEST_TEMPLATE.md). +- [ ] PR doesn't contain unnecessary changes. +- [ ] The changed code preserves the conventions and stylistic consistency of the project. +- [ ] PR uses labels accordingly. (new labels may be suggested) +- [ ] PR includes unit and e2e tests if related to any logic changes. + - [ ] The code coverage rate did not decrease. + - [ ] The error case is always tested. + - [ ] The description of the test case is self-describing. + - [ ] Test cases are grouped for clarity. +- [ ] A PR may only be merged if the following conditions are fulfilled: + - [ ] The correct base branch is selected. + - [ ] Any new files contain the web3.js file header. + - [ ] The documentation was updated (if applicable). + - [ ] The CHANGELOG was updated accordingly. + - [ ] The CI with QA passes successfully. + - [ ] The CI logs were manually checked to ensure false positives were not reported. + - [ ] All comments have been addressed. + - [ ] Doesn't add undue maintenance burden. + - [ ] Doesn't increase the bundle size or is clearly explained why. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000000..8a185527d3d --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,18 @@ +# Security Policy + +## Supported Versions + +Legacy-compatibility `v1.x`: + +- :hourglass_flowing_sand: Web3.js was the previous implementation of the library, written in JavaScript. + +Current-implementation `v4.x`: + +- :hourglass: Web3.js has undergone a complete refactoring and rewrite. +- :stop_sign: We encourage **not** using these releases until official stable releases will be announced. +- :globe_with_meridians: We encourage using the [most recently released version](https://github.com/ChainSafe/web3.js/releases/latest) from the `v1.x` release track before reporting an issue. + +## Reporting a Vulnerability + +- :rotating_light: Please, send vulnerability reports to `security@chainsafe.io`. +- :warning: **Please do not file a public ticket** mentioning the vulnerability, as doing so could increase the likelihood of the vulnerability being exploited before a fix has been created, released and installed on the network. diff --git a/TESTING.md b/TESTING.md deleted file mode 100644 index a21c4a1a484..00000000000 --- a/TESTING.md +++ /dev/null @@ -1,89 +0,0 @@ -# Guide to Web3's tests and CI - -Web3 is used in Node.js and browser contexts to interact with a wide variety of clients. Its tests -try to cover as much of this domain as possible. - -If you're looking for a fixture, test pattern or common execution context to validate a change, you should be able find it in the existing test suite. (Caveats include Parity / Quorum clients and MetaMask specific tests.) - -## Required Tests - -These should pass for PRs to merge: - -| Test type | npm command | Example | Description | CI Only | -| --------- | --------------- | ------ | ----------- | ----- | -| unit | test | [eth.accounts.sign.js][1] | For discrete pieces of logic | -| integration | test:e2e:clients | [e2e.contract.events.js][2] | Tests using geth and ganache-cli, (insta-mining and interval mining.) Easy to write and good for modeling complex use-cases | -| browser | test:e2e:browsers | | The integration tests run in a headless browser using web3.min.js (browserified, vs. ganache-cli) | -| typescript | dtslint | -- | TS type definitions tests | -| dependencies | depcheck | -- | Verifies every dependency is listed correctly in the module package | -| bundle | test:e2e:min | [e2e.minified.js][3] | Verifies minified bundle loads in a headless browser *without* being webpacked / browserified | :white_check_mark: | -| cdn | test:e2e:cdn | [e2e.cdn.sh][4]| Visual inspection check: publishes an (un-webpacked) site that uses web3.min.js at https://web3-staging.netlify.app/ | :white_check_mark: | -| windows | -- | [e2e.windows.sh][5] | Verifies Web3 installs on Windows OS / Node 12 and can connect to Infura over wss and https | :white_check_mark: | - - -## Optional Tests - -CI also has tests that install Web3's state at an arbitrary commit in an external real-world project and run *their* unit tests with it. This strategy is borrowed from ethereum/solidity which checks latest Solidity against OpenZeppelin and others to keep abreast of how local changes might affect critical projects downstream from them. - -Examples include: -+ [e2e.mosaic.sh][8]: ~300 unit tests for [a Solidity project built with Buidler & @truffle/contract][9] -+ [e2e.ganache.core.sh][9]: ~600 unit tests for [a widely used JS testrpc][11] - -These tests are "allowed failures". They're: -+ a pre-publication sanity check that discovers how Web3 performs in the wild -+ useful for catching problems which are difficult to anticipate -+ exposed to failure for reasons outside of Web3's control, ex: when fixes here surface bugs in the target. - -## Implementation Details - -**Code coverage** - -Coverage is measured by aggregating the results of tests run in the `unit_and_e2e_clients` -CI job. - -**Tests which use an Ethereum client** - -The npm script `test:e2e:clients` greps all tests with an `[ @E2E ]` tag -in their mocha test description and runs them against: -+ ganache-cli -+ geth stable (POA, single instance, instamining) -+ geth stable (POA, single instance, mining at 2s intervals) - -These tests are grouped in files prefixed by "e2e", ex: `test/e2e.method.call.js`. - -Additionally, there are conventional unit tests postfixed `.ganache.js` which spin up a ganache -server programatically within mocha. This pattern is useful if you want to -control client configuration for a specific case, test against multiple independent providers, etc. - -**"Real world" tests** - -The tests which install Web3's current state in an external real-world project and -run their unit tests accomplish this by publishing the monorepo to an ephemeral private -npm registry which is spun up in CI using [verdaccio][14]. (Implementation details can -be seen in [scripts/e2e.npm.publish.sh][15]) - -The real world target is then cloned and npm or yarn are used to replace its existing -Web3 version with the version published to the the private registry. A simple example can be seen at -[scripts/e2e.ganache.core.sh][10]. - -In practice, complex projects can have many versions of Web3 nested in their dependency tree. -It's important to coerce all of them to the virtually published package's version for the test to be valid. -This can be done with [scripts/js/resolutions.js][18] which modifies the target's -`package.json` to take advantage of Yarn's [selective dependency resolutions][17]. -An example of its use can be seen at [scripts/e2e.mosaic.sh][8]. - -[14]: https://verdaccio.org/docs/en/installation -[15]: https://github.com/ethereum/web3.js/blob/1.x/scripts/e2e.npm.publish.sh -[17]: https://classic.yarnpkg.com/en/docs/selective-version-resolutions/ -[18]: https://github.com/ethereum/web3.js/blob/1.x/scripts/js/resolutions.js - -[8]: https://github.com/ethereum/web3.js/blob/1.x/scripts/e2e.mosaic.sh -[9]: https://github.com/cgewecke/mosaic-1 -[10]: https://github.com/ethereum/web3.js/blob/1.x/scripts/e2e.ganache.core.sh -[11]: https://github.com/trufflesuite/ganache-core - -[1]: https://github.com/ethereum/web3.js/blob/1.x/test/eth.accounts.sign.js -[2]: https://github.com/ethereum/web3.js/blob/1.x/test/e2e.contract.events.js -[3]: https://github.com/ethereum/web3.js/blob/1.x/test/e2e.minified.js -[4]: https://github.com/ethereum/web3.js/blob/1.x/scripts/e2e.cdn.sh -[5]: https://github.com/ethereum/web3.js/blob/1.x/scripts/e2e.windows.sh diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 00000000000..c80b88db171 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,78 @@ +coverage: + status: + project: + default: + target: 80% + threshold: 1% + patch: + default: + target: auto + threshold: 5% + +component_management: + default_rules: # default rules that will be inherited by all components + statuses: + - type: project + target: 80% + - type: patch + target: 80% + + individual_components: + - component_id: "web3" + paths: + - /packages/web3/src/ + - component_id: "web3-core" + paths: + - /packages/web3-core/src/ + - component_id: "web3-errors" + paths: + - /packages/web3-errors/src/ + - component_id: "web3-eth" + paths: + - /packages/web3-eth/src/ + - component_id: "web3-eth-abi" + paths: + - /packages/web3-eth-abi/src/ + - component_id: "web3-eth-accounts" + paths: + - /packages/web3-eth-accounts/src/ + - component_id: "web3-eth-contract" + paths: + - /packages/web3-eth-contract/src/ + - component_id: "web3-eth-ens" + paths: + - /packages/web3-eth-ens/src/ + - component_id: "web3-eth-iban" + paths: + - /packages/web3-eth-iban/src/ + - component_id: "web3-eth-personal" + paths: + - /packages/web3-eth-personal/src/ + - component_id: "web3-net" + paths: + - /packages/web3-net/src/ + - component_id: "web3-providers-http" + paths: + - /packages/web3-providers-http/src/ + - component_id: "web3-providers-ipc" + paths: + - /packages/web3-providers-ipc/src/ + - component_id: "web3-providers-ws" + paths: + - /packages/web3-providers-ws/src/ + - component_id: "web3-rpc-methods" + paths: + - /packages/web3-rpc-methods/src/ + - component_id: "web3-utils" + paths: + - /packages/web3-utils/src/ + - component_id: "web3-validator" + paths: + - /packages/web3-validator/src/ + +comment: + layout: 'header, diff, flags, components' + behavior: 'default' + require_changes: false + require_base: no + require_head: no \ No newline at end of file diff --git a/config/test/tsconfig.json b/config/test/tsconfig.json new file mode 100644 index 00000000000..831ffc02b5d --- /dev/null +++ b/config/test/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.cjs.json", + "compilerOptions": { + "declaration": false, + "declarationMap": false + }, + "include": ["./**/*", "../node_modules/jest-extended/types/**/*.ts"] +} diff --git a/config/tsconfig.cjs.json b/config/tsconfig.cjs.json new file mode 100644 index 00000000000..675976cf375 --- /dev/null +++ b/config/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./lib/commonjs", + "esModuleInterop": true, + "declaration": true, + "module": "commonjs" + }, + "include": ["src/**/*"] +} diff --git a/config/tsconfig.esm.json b/config/tsconfig.esm.json new file mode 100644 index 00000000000..c8e53463a6e --- /dev/null +++ b/config/tsconfig.esm.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./lib/esm", + "esModuleInterop": true, + "module": "es2020" + }, + "include": ["src/**/*"] +} diff --git a/config/tsconfig.types.json b/config/tsconfig.types.json new file mode 100644 index 00000000000..4f71bd3a4ba --- /dev/null +++ b/config/tsconfig.types.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "declarationDir": "./lib/types", + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true + }, + "include": ["src/**/*"] +} diff --git a/dist/web3.min.js b/dist/web3.min.js deleted file mode 100644 index 433b54d3fa4..00000000000 --- a/dist/web3.min.js +++ /dev/null @@ -1,54 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Web3=t():e.Web3=t()}(window,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=171)}([function(e,t,r){"use strict";e.exports=function(e){return e&&e.__esModule?e:{default:e}}},function(e,t,r){"use strict";function n(t){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?e.exports=n=function(e){return typeof e}:e.exports=n=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(t)}e.exports=n},function(e,t,r){"use strict";(function(e){ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -var n=r(178),i=r(179),o=r(90);function a(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function p(e,t){if(u.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return D(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return q(e).length;default:if(n)return D(e).length;t=(""+t).toLowerCase(),n=!0}}function b(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return O(this,t,r);case"utf8":case"utf-8":return x(this,t,r);case"ascii":return M(this,t,r);case"latin1":case"binary":return I(this,t,r);case"base64":return E(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function m(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function y(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=u.from(t,n)),u.isBuffer(t))return 0===t.length?-1:v(e,t,r,n,i);if("number"==typeof t)return t&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):v(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function v(e,t,r,n,i){var o,a=1,s=e.length,u=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,s/=2,u/=2,r/=2}function f(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(i){var c=-1;for(o=r;os&&(r=s-u),o=r;o>=0;o--){for(var h=!0,d=0;di&&(n=i):n=i;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a>8,i=r%256,o.push(i),o.push(n);return o}(t,e.length-r),e,r,n)}function E(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function x(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:f>223?3:f>191?2:1;if(i+h<=r)switch(h){case 1:f<128&&(c=f);break;case 2:128==(192&(o=e[i+1]))&&(u=(31&f)<<6|63&o)>127&&(c=u);break;case 3:o=e[i+1],a=e[i+2],128==(192&o)&&128==(192&a)&&(u=(15&f)<<12|(63&o)<<6|63&a)>2047&&(u<55296||u>57343)&&(c=u);break;case 4:o=e[i+1],a=e[i+2],s=e[i+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&(u=(15&f)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&u<1114112&&(c=u)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=h}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var r="",n=0;for(;n0&&(e=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(e+=" ... ")),""},u.prototype.compare=function(e,t,r,n,i){if(!u.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0),s=Math.min(o,a),f=this.slice(n,i),c=e.slice(t,r),h=0;hi)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return g(this,e,t,r);case"utf8":case"utf-8":return w(this,e,t,r);case"ascii":return _(this,e,t,r);case"latin1":case"binary":return k(this,e,t,r);case"base64":return A(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function M(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;in)&&(r=n);for(var i="",o=t;or)throw new RangeError("Trying to access beyond buffer length")}function T(e,t,r,n,i,o){if(!u.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function U(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-r,2);i>>8*(n?i:1-i)}function B(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-r,4);i>>8*(n?i:3-i)&255}function R(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function N(e,t,r,n,o){return o||R(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function j(e,t,r,n,o){return o||R(e,0,r,8),i.write(e,t,r,n,52,8),r+8}u.prototype.slice=function(e,t){var r,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t0&&(i*=256);)n+=this[e+--t]*i;return n},u.prototype.readUInt8=function(e,t){return t||P(e,1,this.length),this[e]},u.prototype.readUInt16LE=function(e,t){return t||P(e,2,this.length),this[e]|this[e+1]<<8},u.prototype.readUInt16BE=function(e,t){return t||P(e,2,this.length),this[e]<<8|this[e+1]},u.prototype.readUInt32LE=function(e,t){return t||P(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},u.prototype.readUInt32BE=function(e,t){return t||P(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},u.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||P(e,t,this.length);for(var n=this[e],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*t)),n},u.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||P(e,t,this.length);for(var n=t,i=1,o=this[e+--n];n>0&&(i*=256);)o+=this[e+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},u.prototype.readInt8=function(e,t){return t||P(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},u.prototype.readInt16LE=function(e,t){t||P(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},u.prototype.readInt16BE=function(e,t){t||P(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},u.prototype.readInt32LE=function(e,t){return t||P(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},u.prototype.readInt32BE=function(e,t){return t||P(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},u.prototype.readFloatLE=function(e,t){return t||P(e,4,this.length),i.read(this,e,!0,23,4)},u.prototype.readFloatBE=function(e,t){return t||P(e,4,this.length),i.read(this,e,!1,23,4)},u.prototype.readDoubleLE=function(e,t){return t||P(e,8,this.length),i.read(this,e,!0,52,8)},u.prototype.readDoubleBE=function(e,t){return t||P(e,8,this.length),i.read(this,e,!1,52,8)},u.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t|=0,r|=0,n)||T(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[t]=255&e;++o=0&&(o*=256);)this[t+i]=e/o&255;return t+r},u.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||T(this,e,t,1,255,0),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},u.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||T(this,e,t,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):U(this,e,t,!0),t+2},u.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||T(this,e,t,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):U(this,e,t,!1),t+2},u.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||T(this,e,t,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):B(this,e,t,!0),t+4},u.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||T(this,e,t,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):B(this,e,t,!1),t+4},u.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);T(this,e,t,r,i-1,-i)}var o=0,a=1,s=0;for(this[t]=255&e;++o>0)-s&255;return t+r},u.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);T(this,e,t,r,i-1,-i)}var o=r-1,a=1,s=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===s&&0!==this[t+o+1]&&(s=1),this[t+o]=(e/a>>0)-s&255;return t+r},u.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||T(this,e,t,1,127,-128),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},u.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||T(this,e,t,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):U(this,e,t,!0),t+2},u.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||T(this,e,t,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):U(this,e,t,!1),t+2},u.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||T(this,e,t,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):B(this,e,t,!0),t+4},u.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||T(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):B(this,e,t,!1),t+4},u.prototype.writeFloatLE=function(e,t,r){return N(this,e,t,!0,r)},u.prototype.writeFloatBE=function(e,t,r){return N(this,e,t,!1,r)},u.prototype.writeDoubleLE=function(e,t,r){return j(this,e,t,!0,r)},u.prototype.writeDoubleBE=function(e,t,r){return j(this,e,t,!1,r)},u.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--i)e[i+t]=this[i+r];else if(o<1e3||!u.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function q(e){return n.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(L,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function z(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}}).call(this,r(8))},function(e,t,r){"use strict";"function"==typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},function(e,t,r){"use strict";var n=r(2),i=n.Buffer;function o(e,t){for(var r in e)t[r]=e[r]}function a(e,t,r){return i(e,t,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?e.exports=n:(o(n,t),t.Buffer=a),o(i,a),a.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return i(e,t,r)},a.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var n=i(e);return void 0!==t?"string"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}},function(e,t,r){"use strict";(function(e){var t=r(0)(r(1));!function(e,n){function i(e,t){if(!e)throw new Error(t||"Assertion failed")}function o(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function a(e,t,r){if(a.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==t&&"be"!==t||(r=t,t=10),this._init(e||0,t||10,r||"be"))}var s;"object"===(0,t.default)(e)?e.exports=a:(void 0).BN=a,a.BN=a,a.wordSize=26;try{s=r(181).Buffer}catch(e){}function u(e,t,r){for(var n=0,i=Math.min(e.length,r),o=t;o=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function f(e,t,r,n){for(var i=0,o=Math.min(e.length,r),a=t;a=49?s-49+10:s>=17?s-17+10:s}return i}a.isBN=function(e){return e instanceof a||null!==e&&"object"===(0,t.default)(e)&&e.constructor.wordSize===a.wordSize&&Array.isArray(e.words)},a.max=function(e,t){return e.cmp(t)>0?e:t},a.min=function(e,t){return e.cmp(t)<0?e:t},a.prototype._init=function(e,r,n){if("number"==typeof e)return this._initNumber(e,r,n);if("object"===(0,t.default)(e))return this._initArray(e,r,n);"hex"===r&&(r=16),i(r===(0|r)&&r>=2&&r<=36);var o=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&o++,16===r?this._parseHex(e,o):this._parseBase(e,r,o),"-"===e[0]&&(this.negative=1),this.strip(),"le"===n&&this._initArray(this.toArray(),r,n)},a.prototype._initNumber=function(e,t,r){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),t,r)},a.prototype._initArray=function(e,t,r){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var n=0;n=0;n-=3)a=e[n]|e[n-1]<<8|e[n-2]<<16,this.words[o]|=a<>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);else if("le"===r)for(n=0,o=0;n>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);return this.strip()},a.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r=t;r-=6)i=u(e,r,r+6),this.words[n]|=i<>>26-o&4194303,(o+=24)>=26&&(o-=26,n++);r+6!==t&&(i=u(e,t,r+6),this.words[n]|=i<>>26-o&4194303),this.strip()},a.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=t)n++;n--,i=i/t|0;for(var o=e.length-r,a=o%n,s=Math.min(o,o-a)+r,u=0,c=r;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},a.prototype.inspect=function(){return(this.red?""};var c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],h=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],d=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function l(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var i=0|e.words[0],o=0|t.words[0],a=i*o,s=67108863&a,u=a/67108864|0;r.words[0]=s;for(var f=1;f>>26,h=67108863&u,d=Math.min(f,t.length-1),l=Math.max(0,f-e.length+1);l<=d;l++){var p=f-l|0;c+=(a=(i=0|e.words[p])*(o=0|t.words[l])+h)/67108864|0,h=67108863&a}r.words[f]=0|h,u=0|c}return 0!==u?r.words[f]=0|u:r.length--,r.strip()}a.prototype.toString=function(e,t){var r;if(t=0|t||1,16===(e=e||10)||"hex"===e){r="";for(var n=0,o=0,a=0;a>>24-n&16777215)||a!==this.length-1?c[6-u.length]+u+r:u+r,(n+=2)>=26&&(n-=26,a--)}for(0!==o&&(r=o.toString(16)+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(e===(0|e)&&e>=2&&e<=36){var f=h[e],l=d[e];r="";var p=this.clone();for(p.negative=0;!p.isZero();){var b=p.modn(l).toString(e);r=(p=p.idivn(l)).isZero()?b+r:c[f-b.length]+b+r}for(this.isZero()&&(r="0"+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}i(!1,"Base should be between 2 and 36")},a.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},a.prototype.toJSON=function(){return this.toString(16)},a.prototype.toBuffer=function(e,t){return i(void 0!==s),this.toArrayLike(s,e,t)},a.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},a.prototype.toArrayLike=function(e,t,r){var n=this.byteLength(),o=r||Math.max(1,n);i(n<=o,"byte array longer than desired length"),i(o>0,"Requested array length <= 0"),this.strip();var a,s,u="le"===t,f=new e(o),c=this.clone();if(u){for(s=0;!c.isZero();s++)a=c.andln(255),c.iushrn(8),f[s]=a;for(;s=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},a.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},a.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},a.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},a.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},a.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},a.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},a.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},a.prototype.inotn=function(e){i("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var n=0;n0&&(this.words[n]=~this.words[n]&67108863>>26-r),this.strip()},a.prototype.notn=function(e){return this.clone().inotn(e)},a.prototype.setn=function(e,t){i("number"==typeof e&&e>=0);var r=e/26|0,n=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<e.length?(r=this,n=e):(r=e,n=this);for(var i=0,o=0;o>>26;for(;0!==i&&o>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;oe.length?this.clone().iadd(e):e.clone().iadd(this)},a.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,n,i=this.cmp(e);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=e):(r=e,n=this);for(var o=0,a=0;a>26,this.words[a]=67108863&t;for(;0!==o&&a>26,this.words[a]=67108863&t;if(0===o&&a>>13,l=0|a[1],p=8191&l,b=l>>>13,m=0|a[2],y=8191&m,v=m>>>13,g=0|a[3],w=8191&g,_=g>>>13,k=0|a[4],A=8191&k,S=k>>>13,E=0|a[5],x=8191&E,M=E>>>13,I=0|a[6],O=8191&I,C=I>>>13,P=0|a[7],T=8191&P,U=P>>>13,B=0|a[8],R=8191&B,N=B>>>13,j=0|a[9],L=8191&j,F=j>>>13,D=0|s[0],q=8191&D,z=D>>>13,H=0|s[1],K=8191&H,V=H>>>13,G=0|s[2],W=8191&G,Y=G>>>13,$=0|s[3],J=8191&$,Z=$>>>13,X=0|s[4],Q=8191&X,ee=X>>>13,te=0|s[5],re=8191&te,ne=te>>>13,ie=0|s[6],oe=8191&ie,ae=ie>>>13,se=0|s[7],ue=8191&se,fe=se>>>13,ce=0|s[8],he=8191&ce,de=ce>>>13,le=0|s[9],pe=8191&le,be=le>>>13;r.negative=e.negative^t.negative,r.length=19;var me=(f+(n=Math.imul(h,q))|0)+((8191&(i=(i=Math.imul(h,z))+Math.imul(d,q)|0))<<13)|0;f=((o=Math.imul(d,z))+(i>>>13)|0)+(me>>>26)|0,me&=67108863,n=Math.imul(p,q),i=(i=Math.imul(p,z))+Math.imul(b,q)|0,o=Math.imul(b,z);var ye=(f+(n=n+Math.imul(h,K)|0)|0)+((8191&(i=(i=i+Math.imul(h,V)|0)+Math.imul(d,K)|0))<<13)|0;f=((o=o+Math.imul(d,V)|0)+(i>>>13)|0)+(ye>>>26)|0,ye&=67108863,n=Math.imul(y,q),i=(i=Math.imul(y,z))+Math.imul(v,q)|0,o=Math.imul(v,z),n=n+Math.imul(p,K)|0,i=(i=i+Math.imul(p,V)|0)+Math.imul(b,K)|0,o=o+Math.imul(b,V)|0;var ve=(f+(n=n+Math.imul(h,W)|0)|0)+((8191&(i=(i=i+Math.imul(h,Y)|0)+Math.imul(d,W)|0))<<13)|0;f=((o=o+Math.imul(d,Y)|0)+(i>>>13)|0)+(ve>>>26)|0,ve&=67108863,n=Math.imul(w,q),i=(i=Math.imul(w,z))+Math.imul(_,q)|0,o=Math.imul(_,z),n=n+Math.imul(y,K)|0,i=(i=i+Math.imul(y,V)|0)+Math.imul(v,K)|0,o=o+Math.imul(v,V)|0,n=n+Math.imul(p,W)|0,i=(i=i+Math.imul(p,Y)|0)+Math.imul(b,W)|0,o=o+Math.imul(b,Y)|0;var ge=(f+(n=n+Math.imul(h,J)|0)|0)+((8191&(i=(i=i+Math.imul(h,Z)|0)+Math.imul(d,J)|0))<<13)|0;f=((o=o+Math.imul(d,Z)|0)+(i>>>13)|0)+(ge>>>26)|0,ge&=67108863,n=Math.imul(A,q),i=(i=Math.imul(A,z))+Math.imul(S,q)|0,o=Math.imul(S,z),n=n+Math.imul(w,K)|0,i=(i=i+Math.imul(w,V)|0)+Math.imul(_,K)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(y,W)|0,i=(i=i+Math.imul(y,Y)|0)+Math.imul(v,W)|0,o=o+Math.imul(v,Y)|0,n=n+Math.imul(p,J)|0,i=(i=i+Math.imul(p,Z)|0)+Math.imul(b,J)|0,o=o+Math.imul(b,Z)|0;var we=(f+(n=n+Math.imul(h,Q)|0)|0)+((8191&(i=(i=i+Math.imul(h,ee)|0)+Math.imul(d,Q)|0))<<13)|0;f=((o=o+Math.imul(d,ee)|0)+(i>>>13)|0)+(we>>>26)|0,we&=67108863,n=Math.imul(x,q),i=(i=Math.imul(x,z))+Math.imul(M,q)|0,o=Math.imul(M,z),n=n+Math.imul(A,K)|0,i=(i=i+Math.imul(A,V)|0)+Math.imul(S,K)|0,o=o+Math.imul(S,V)|0,n=n+Math.imul(w,W)|0,i=(i=i+Math.imul(w,Y)|0)+Math.imul(_,W)|0,o=o+Math.imul(_,Y)|0,n=n+Math.imul(y,J)|0,i=(i=i+Math.imul(y,Z)|0)+Math.imul(v,J)|0,o=o+Math.imul(v,Z)|0,n=n+Math.imul(p,Q)|0,i=(i=i+Math.imul(p,ee)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,ee)|0;var _e=(f+(n=n+Math.imul(h,re)|0)|0)+((8191&(i=(i=i+Math.imul(h,ne)|0)+Math.imul(d,re)|0))<<13)|0;f=((o=o+Math.imul(d,ne)|0)+(i>>>13)|0)+(_e>>>26)|0,_e&=67108863,n=Math.imul(O,q),i=(i=Math.imul(O,z))+Math.imul(C,q)|0,o=Math.imul(C,z),n=n+Math.imul(x,K)|0,i=(i=i+Math.imul(x,V)|0)+Math.imul(M,K)|0,o=o+Math.imul(M,V)|0,n=n+Math.imul(A,W)|0,i=(i=i+Math.imul(A,Y)|0)+Math.imul(S,W)|0,o=o+Math.imul(S,Y)|0,n=n+Math.imul(w,J)|0,i=(i=i+Math.imul(w,Z)|0)+Math.imul(_,J)|0,o=o+Math.imul(_,Z)|0,n=n+Math.imul(y,Q)|0,i=(i=i+Math.imul(y,ee)|0)+Math.imul(v,Q)|0,o=o+Math.imul(v,ee)|0,n=n+Math.imul(p,re)|0,i=(i=i+Math.imul(p,ne)|0)+Math.imul(b,re)|0,o=o+Math.imul(b,ne)|0;var ke=(f+(n=n+Math.imul(h,oe)|0)|0)+((8191&(i=(i=i+Math.imul(h,ae)|0)+Math.imul(d,oe)|0))<<13)|0;f=((o=o+Math.imul(d,ae)|0)+(i>>>13)|0)+(ke>>>26)|0,ke&=67108863,n=Math.imul(T,q),i=(i=Math.imul(T,z))+Math.imul(U,q)|0,o=Math.imul(U,z),n=n+Math.imul(O,K)|0,i=(i=i+Math.imul(O,V)|0)+Math.imul(C,K)|0,o=o+Math.imul(C,V)|0,n=n+Math.imul(x,W)|0,i=(i=i+Math.imul(x,Y)|0)+Math.imul(M,W)|0,o=o+Math.imul(M,Y)|0,n=n+Math.imul(A,J)|0,i=(i=i+Math.imul(A,Z)|0)+Math.imul(S,J)|0,o=o+Math.imul(S,Z)|0,n=n+Math.imul(w,Q)|0,i=(i=i+Math.imul(w,ee)|0)+Math.imul(_,Q)|0,o=o+Math.imul(_,ee)|0,n=n+Math.imul(y,re)|0,i=(i=i+Math.imul(y,ne)|0)+Math.imul(v,re)|0,o=o+Math.imul(v,ne)|0,n=n+Math.imul(p,oe)|0,i=(i=i+Math.imul(p,ae)|0)+Math.imul(b,oe)|0,o=o+Math.imul(b,ae)|0;var Ae=(f+(n=n+Math.imul(h,ue)|0)|0)+((8191&(i=(i=i+Math.imul(h,fe)|0)+Math.imul(d,ue)|0))<<13)|0;f=((o=o+Math.imul(d,fe)|0)+(i>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,n=Math.imul(R,q),i=(i=Math.imul(R,z))+Math.imul(N,q)|0,o=Math.imul(N,z),n=n+Math.imul(T,K)|0,i=(i=i+Math.imul(T,V)|0)+Math.imul(U,K)|0,o=o+Math.imul(U,V)|0,n=n+Math.imul(O,W)|0,i=(i=i+Math.imul(O,Y)|0)+Math.imul(C,W)|0,o=o+Math.imul(C,Y)|0,n=n+Math.imul(x,J)|0,i=(i=i+Math.imul(x,Z)|0)+Math.imul(M,J)|0,o=o+Math.imul(M,Z)|0,n=n+Math.imul(A,Q)|0,i=(i=i+Math.imul(A,ee)|0)+Math.imul(S,Q)|0,o=o+Math.imul(S,ee)|0,n=n+Math.imul(w,re)|0,i=(i=i+Math.imul(w,ne)|0)+Math.imul(_,re)|0,o=o+Math.imul(_,ne)|0,n=n+Math.imul(y,oe)|0,i=(i=i+Math.imul(y,ae)|0)+Math.imul(v,oe)|0,o=o+Math.imul(v,ae)|0,n=n+Math.imul(p,ue)|0,i=(i=i+Math.imul(p,fe)|0)+Math.imul(b,ue)|0,o=o+Math.imul(b,fe)|0;var Se=(f+(n=n+Math.imul(h,he)|0)|0)+((8191&(i=(i=i+Math.imul(h,de)|0)+Math.imul(d,he)|0))<<13)|0;f=((o=o+Math.imul(d,de)|0)+(i>>>13)|0)+(Se>>>26)|0,Se&=67108863,n=Math.imul(L,q),i=(i=Math.imul(L,z))+Math.imul(F,q)|0,o=Math.imul(F,z),n=n+Math.imul(R,K)|0,i=(i=i+Math.imul(R,V)|0)+Math.imul(N,K)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(T,W)|0,i=(i=i+Math.imul(T,Y)|0)+Math.imul(U,W)|0,o=o+Math.imul(U,Y)|0,n=n+Math.imul(O,J)|0,i=(i=i+Math.imul(O,Z)|0)+Math.imul(C,J)|0,o=o+Math.imul(C,Z)|0,n=n+Math.imul(x,Q)|0,i=(i=i+Math.imul(x,ee)|0)+Math.imul(M,Q)|0,o=o+Math.imul(M,ee)|0,n=n+Math.imul(A,re)|0,i=(i=i+Math.imul(A,ne)|0)+Math.imul(S,re)|0,o=o+Math.imul(S,ne)|0,n=n+Math.imul(w,oe)|0,i=(i=i+Math.imul(w,ae)|0)+Math.imul(_,oe)|0,o=o+Math.imul(_,ae)|0,n=n+Math.imul(y,ue)|0,i=(i=i+Math.imul(y,fe)|0)+Math.imul(v,ue)|0,o=o+Math.imul(v,fe)|0,n=n+Math.imul(p,he)|0,i=(i=i+Math.imul(p,de)|0)+Math.imul(b,he)|0,o=o+Math.imul(b,de)|0;var Ee=(f+(n=n+Math.imul(h,pe)|0)|0)+((8191&(i=(i=i+Math.imul(h,be)|0)+Math.imul(d,pe)|0))<<13)|0;f=((o=o+Math.imul(d,be)|0)+(i>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,n=Math.imul(L,K),i=(i=Math.imul(L,V))+Math.imul(F,K)|0,o=Math.imul(F,V),n=n+Math.imul(R,W)|0,i=(i=i+Math.imul(R,Y)|0)+Math.imul(N,W)|0,o=o+Math.imul(N,Y)|0,n=n+Math.imul(T,J)|0,i=(i=i+Math.imul(T,Z)|0)+Math.imul(U,J)|0,o=o+Math.imul(U,Z)|0,n=n+Math.imul(O,Q)|0,i=(i=i+Math.imul(O,ee)|0)+Math.imul(C,Q)|0,o=o+Math.imul(C,ee)|0,n=n+Math.imul(x,re)|0,i=(i=i+Math.imul(x,ne)|0)+Math.imul(M,re)|0,o=o+Math.imul(M,ne)|0,n=n+Math.imul(A,oe)|0,i=(i=i+Math.imul(A,ae)|0)+Math.imul(S,oe)|0,o=o+Math.imul(S,ae)|0,n=n+Math.imul(w,ue)|0,i=(i=i+Math.imul(w,fe)|0)+Math.imul(_,ue)|0,o=o+Math.imul(_,fe)|0,n=n+Math.imul(y,he)|0,i=(i=i+Math.imul(y,de)|0)+Math.imul(v,he)|0,o=o+Math.imul(v,de)|0;var xe=(f+(n=n+Math.imul(p,pe)|0)|0)+((8191&(i=(i=i+Math.imul(p,be)|0)+Math.imul(b,pe)|0))<<13)|0;f=((o=o+Math.imul(b,be)|0)+(i>>>13)|0)+(xe>>>26)|0,xe&=67108863,n=Math.imul(L,W),i=(i=Math.imul(L,Y))+Math.imul(F,W)|0,o=Math.imul(F,Y),n=n+Math.imul(R,J)|0,i=(i=i+Math.imul(R,Z)|0)+Math.imul(N,J)|0,o=o+Math.imul(N,Z)|0,n=n+Math.imul(T,Q)|0,i=(i=i+Math.imul(T,ee)|0)+Math.imul(U,Q)|0,o=o+Math.imul(U,ee)|0,n=n+Math.imul(O,re)|0,i=(i=i+Math.imul(O,ne)|0)+Math.imul(C,re)|0,o=o+Math.imul(C,ne)|0,n=n+Math.imul(x,oe)|0,i=(i=i+Math.imul(x,ae)|0)+Math.imul(M,oe)|0,o=o+Math.imul(M,ae)|0,n=n+Math.imul(A,ue)|0,i=(i=i+Math.imul(A,fe)|0)+Math.imul(S,ue)|0,o=o+Math.imul(S,fe)|0,n=n+Math.imul(w,he)|0,i=(i=i+Math.imul(w,de)|0)+Math.imul(_,he)|0,o=o+Math.imul(_,de)|0;var Me=(f+(n=n+Math.imul(y,pe)|0)|0)+((8191&(i=(i=i+Math.imul(y,be)|0)+Math.imul(v,pe)|0))<<13)|0;f=((o=o+Math.imul(v,be)|0)+(i>>>13)|0)+(Me>>>26)|0,Me&=67108863,n=Math.imul(L,J),i=(i=Math.imul(L,Z))+Math.imul(F,J)|0,o=Math.imul(F,Z),n=n+Math.imul(R,Q)|0,i=(i=i+Math.imul(R,ee)|0)+Math.imul(N,Q)|0,o=o+Math.imul(N,ee)|0,n=n+Math.imul(T,re)|0,i=(i=i+Math.imul(T,ne)|0)+Math.imul(U,re)|0,o=o+Math.imul(U,ne)|0,n=n+Math.imul(O,oe)|0,i=(i=i+Math.imul(O,ae)|0)+Math.imul(C,oe)|0,o=o+Math.imul(C,ae)|0,n=n+Math.imul(x,ue)|0,i=(i=i+Math.imul(x,fe)|0)+Math.imul(M,ue)|0,o=o+Math.imul(M,fe)|0,n=n+Math.imul(A,he)|0,i=(i=i+Math.imul(A,de)|0)+Math.imul(S,he)|0,o=o+Math.imul(S,de)|0;var Ie=(f+(n=n+Math.imul(w,pe)|0)|0)+((8191&(i=(i=i+Math.imul(w,be)|0)+Math.imul(_,pe)|0))<<13)|0;f=((o=o+Math.imul(_,be)|0)+(i>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,n=Math.imul(L,Q),i=(i=Math.imul(L,ee))+Math.imul(F,Q)|0,o=Math.imul(F,ee),n=n+Math.imul(R,re)|0,i=(i=i+Math.imul(R,ne)|0)+Math.imul(N,re)|0,o=o+Math.imul(N,ne)|0,n=n+Math.imul(T,oe)|0,i=(i=i+Math.imul(T,ae)|0)+Math.imul(U,oe)|0,o=o+Math.imul(U,ae)|0,n=n+Math.imul(O,ue)|0,i=(i=i+Math.imul(O,fe)|0)+Math.imul(C,ue)|0,o=o+Math.imul(C,fe)|0,n=n+Math.imul(x,he)|0,i=(i=i+Math.imul(x,de)|0)+Math.imul(M,he)|0,o=o+Math.imul(M,de)|0;var Oe=(f+(n=n+Math.imul(A,pe)|0)|0)+((8191&(i=(i=i+Math.imul(A,be)|0)+Math.imul(S,pe)|0))<<13)|0;f=((o=o+Math.imul(S,be)|0)+(i>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,n=Math.imul(L,re),i=(i=Math.imul(L,ne))+Math.imul(F,re)|0,o=Math.imul(F,ne),n=n+Math.imul(R,oe)|0,i=(i=i+Math.imul(R,ae)|0)+Math.imul(N,oe)|0,o=o+Math.imul(N,ae)|0,n=n+Math.imul(T,ue)|0,i=(i=i+Math.imul(T,fe)|0)+Math.imul(U,ue)|0,o=o+Math.imul(U,fe)|0,n=n+Math.imul(O,he)|0,i=(i=i+Math.imul(O,de)|0)+Math.imul(C,he)|0,o=o+Math.imul(C,de)|0;var Ce=(f+(n=n+Math.imul(x,pe)|0)|0)+((8191&(i=(i=i+Math.imul(x,be)|0)+Math.imul(M,pe)|0))<<13)|0;f=((o=o+Math.imul(M,be)|0)+(i>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,n=Math.imul(L,oe),i=(i=Math.imul(L,ae))+Math.imul(F,oe)|0,o=Math.imul(F,ae),n=n+Math.imul(R,ue)|0,i=(i=i+Math.imul(R,fe)|0)+Math.imul(N,ue)|0,o=o+Math.imul(N,fe)|0,n=n+Math.imul(T,he)|0,i=(i=i+Math.imul(T,de)|0)+Math.imul(U,he)|0,o=o+Math.imul(U,de)|0;var Pe=(f+(n=n+Math.imul(O,pe)|0)|0)+((8191&(i=(i=i+Math.imul(O,be)|0)+Math.imul(C,pe)|0))<<13)|0;f=((o=o+Math.imul(C,be)|0)+(i>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,n=Math.imul(L,ue),i=(i=Math.imul(L,fe))+Math.imul(F,ue)|0,o=Math.imul(F,fe),n=n+Math.imul(R,he)|0,i=(i=i+Math.imul(R,de)|0)+Math.imul(N,he)|0,o=o+Math.imul(N,de)|0;var Te=(f+(n=n+Math.imul(T,pe)|0)|0)+((8191&(i=(i=i+Math.imul(T,be)|0)+Math.imul(U,pe)|0))<<13)|0;f=((o=o+Math.imul(U,be)|0)+(i>>>13)|0)+(Te>>>26)|0,Te&=67108863,n=Math.imul(L,he),i=(i=Math.imul(L,de))+Math.imul(F,he)|0,o=Math.imul(F,de);var Ue=(f+(n=n+Math.imul(R,pe)|0)|0)+((8191&(i=(i=i+Math.imul(R,be)|0)+Math.imul(N,pe)|0))<<13)|0;f=((o=o+Math.imul(N,be)|0)+(i>>>13)|0)+(Ue>>>26)|0,Ue&=67108863;var Be=(f+(n=Math.imul(L,pe))|0)+((8191&(i=(i=Math.imul(L,be))+Math.imul(F,pe)|0))<<13)|0;return f=((o=Math.imul(F,be))+(i>>>13)|0)+(Be>>>26)|0,Be&=67108863,u[0]=me,u[1]=ye,u[2]=ve,u[3]=ge,u[4]=we,u[5]=_e,u[6]=ke,u[7]=Ae,u[8]=Se,u[9]=Ee,u[10]=xe,u[11]=Me,u[12]=Ie,u[13]=Oe,u[14]=Ce,u[15]=Pe,u[16]=Te,u[17]=Ue,u[18]=Be,0!==f&&(u[19]=f,r.length++),r};function b(e,t,r){return(new m).mulp(e,t,r)}function m(e,t){this.x=e,this.y=t}Math.imul||(p=l),a.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?p(this,e,t):r<63?l(this,e,t):r<1024?function(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,i=0,o=0;o>>26)|0)>>>26,a&=67108863}r.words[o]=s,n=a,a=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}(this,e,t):b(this,e,t)},m.prototype.makeRBT=function(e){for(var t=new Array(e),r=a.prototype._countBits(e)-1,n=0;n>=1;return n},m.prototype.permute=function(e,t,r,n,i,o){for(var a=0;a>>=1)i++;return 1<>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*t;a>=26,t+=n/67108864|0,t+=o>>>26,this.words[r]=67108863&o}return 0!==t&&(this.words[r]=t,this.length++),this},a.prototype.muln=function(e){return this.clone().imuln(e)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r>>i}return t}(e);if(0===t.length)return new a(1);for(var r=this,n=0;n=0);var t,r=e%26,n=(e-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(t=0;t>>26-r}a&&(this.words[t]=a,this.length++)}if(0!==n){for(t=this.length-1;t>=0;t--)this.words[t+n]=this.words[t];for(t=0;t=0),n=t?(t-t%26)/26:0;var o=e%26,a=Math.min((e-o)/26,this.length),s=67108863^67108863>>>o<a)for(this.length-=a,f=0;f=0&&(0!==c||f>=n);f--){var h=0|this.words[f];this.words[f]=c<<26-o|h>>>o,c=h&s}return u&&0!==c&&(u.words[u.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},a.prototype.ishrn=function(e,t,r){return i(0===this.negative),this.iushrn(e,t,r)},a.prototype.shln=function(e){return this.clone().ishln(e)},a.prototype.ushln=function(e){return this.clone().iushln(e)},a.prototype.shrn=function(e){return this.clone().ishrn(e)},a.prototype.ushrn=function(e){return this.clone().iushrn(e)},a.prototype.testn=function(e){i("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,n=1<=0);var t=e%26,r=(e-t)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var n=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},a.prototype.isubn=function(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(u/67108864|0),this.words[n+r]=67108863&o}for(;n>26,this.words[n+r]=67108863&o;if(0===s)return this.strip();for(i(-1===s),s=0,n=0;n>26,this.words[n]=67108863&o;return this.negative=1,this.strip()},a.prototype._wordDiv=function(e,t){var r=(this.length,e.length),n=this.clone(),i=e,o=0|i.words[i.length-1];0!==(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var s,u=n.length-i.length;if("mod"!==t){(s=new a(null)).length=u+1,s.words=new Array(s.length);for(var f=0;f=0;h--){var d=67108864*(0|n.words[i.length+h])+(0|n.words[i.length+h-1]);for(d=Math.min(d/o|0,67108863),n._ishlnsubmul(i,d,h);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(i,1,h),n.isZero()||(n.negative^=1);s&&(s.words[h]=d)}return s&&s.strip(),n.strip(),"div"!==t&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},a.prototype.divmod=function(e,t,r){return i(!e.isZero()),this.isZero()?{div:new a(0),mod:new a(0)}:0!==this.negative&&0===e.negative?(s=this.neg().divmod(e,t),"mod"!==t&&(n=s.div.neg()),"div"!==t&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(e)),{div:n,mod:o}):0===this.negative&&0!==e.negative?(s=this.divmod(e.neg(),t),"mod"!==t&&(n=s.div.neg()),{div:n,mod:s.mod}):0!=(this.negative&e.negative)?(s=this.neg().divmod(e.neg(),t),"div"!==t&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(e)),{div:s.div,mod:o}):e.length>this.length||this.cmp(e)<0?{div:new a(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new a(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new a(this.modn(e.words[0]))}:this._wordDiv(e,t);var n,o,s},a.prototype.div=function(e){return this.divmod(e,"div",!1).div},a.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},a.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},a.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),i=e.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},a.prototype.modn=function(e){i(e<=67108863);for(var t=(1<<26)%e,r=0,n=this.length-1;n>=0;n--)r=(t*r+(0|this.words[n]))%e;return r},a.prototype.idivn=function(e){i(e<=67108863);for(var t=0,r=this.length-1;r>=0;r--){var n=(0|this.words[r])+67108864*t;this.words[r]=n/e|0,t=n%e}return this.strip()},a.prototype.divn=function(e){return this.clone().idivn(e)},a.prototype.egcd=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var n=new a(1),o=new a(0),s=new a(0),u=new a(1),f=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++f;for(var c=r.clone(),h=t.clone();!t.isZero();){for(var d=0,l=1;0==(t.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(t.iushrn(d);d-- >0;)(n.isOdd()||o.isOdd())&&(n.iadd(c),o.isub(h)),n.iushrn(1),o.iushrn(1);for(var p=0,b=1;0==(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(s.isOdd()||u.isOdd())&&(s.iadd(c),u.isub(h)),s.iushrn(1),u.iushrn(1);t.cmp(r)>=0?(t.isub(r),n.isub(s),o.isub(u)):(r.isub(t),s.isub(n),u.isub(o))}return{a:s,b:u,gcd:r.iushln(f)}},a.prototype._invmp=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var n,o=new a(1),s=new a(0),u=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var f=0,c=1;0==(t.words[0]&c)&&f<26;++f,c<<=1);if(f>0)for(t.iushrn(f);f-- >0;)o.isOdd()&&o.iadd(u),o.iushrn(1);for(var h=0,d=1;0==(r.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(r.iushrn(h);h-- >0;)s.isOdd()&&s.iadd(u),s.iushrn(1);t.cmp(r)>=0?(t.isub(r),o.isub(s)):(r.isub(t),s.isub(o))}return(n=0===t.cmpn(1)?o:s).cmpn(0)<0&&n.iadd(e),n},a.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=t.cmp(r);if(i<0){var o=t;t=r,r=o}else if(0===i||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},a.prototype.invm=function(e){return this.egcd(e).a.umod(e)},a.prototype.isEven=function(){return 0==(1&this.words[0])},a.prototype.isOdd=function(){return 1==(1&this.words[0])},a.prototype.andln=function(e){return this.words[0]&e},a.prototype.bincn=function(e){i("number"==typeof e);var t=e%26,r=(e-t)/26,n=1<>>26,s&=67108863,this.words[a]=s}return 0!==o&&(this.words[a]=o,this.length++),this},a.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},a.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)t=1;else{r&&(e=-e),i(e<=67108863,"Number is too big");var n=0|this.words[0];t=n===e?0:ne.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|e.words[r];if(n!==i){ni&&(t=1);break}}return t},a.prototype.gtn=function(e){return 1===this.cmpn(e)},a.prototype.gt=function(e){return 1===this.cmp(e)},a.prototype.gten=function(e){return this.cmpn(e)>=0},a.prototype.gte=function(e){return this.cmp(e)>=0},a.prototype.ltn=function(e){return-1===this.cmpn(e)},a.prototype.lt=function(e){return-1===this.cmp(e)},a.prototype.lten=function(e){return this.cmpn(e)<=0},a.prototype.lte=function(e){return this.cmp(e)<=0},a.prototype.eqn=function(e){return 0===this.cmpn(e)},a.prototype.eq=function(e){return 0===this.cmp(e)},a.red=function(e){return new A(e)},a.prototype.toRed=function(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},a.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},a.prototype._forceRed=function(e){return this.red=e,this},a.prototype.forceRed=function(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},a.prototype.redAdd=function(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},a.prototype.redIAdd=function(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},a.prototype.redSub=function(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},a.prototype.redISub=function(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},a.prototype.redShl=function(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},a.prototype.redMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},a.prototype.redIMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},a.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var y={k256:null,p224:null,p192:null,p25519:null};function v(e,t){this.name=e,this.p=new a(t,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function g(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function w(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function _(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function k(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function A(e){if("string"==typeof e){var t=a._prime(e);this.m=t.p,this.prime=t}else i(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function S(e){A.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function(){var e=new a(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var n=t0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},v.prototype.split=function(e,t){e.iushrn(this.n,0,t)},v.prototype.imulK=function(e){return e.imul(this.k)},o(g,v),g.prototype.split=function(e,t){for(var r=Math.min(e.length,9),n=0;n>>22,i=o}i>>>=22,e.words[n-10]=i,0===i&&e.length>10?e.length-=10:e.length-=9},g.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r>>=26,e.words[r]=i,t=n}return 0!==t&&(e.words[e.length++]=t),e},a._prime=function(e){if(y[e])return y[e];var t;if("k256"===e)t=new g;else if("p224"===e)t=new w;else if("p192"===e)t=new _;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new k}return y[e]=t,t},A.prototype._verify1=function(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},A.prototype._verify2=function(e,t){i(0==(e.negative|t.negative),"red works only with positives"),i(e.red&&e.red===t.red,"red works only with red numbers")},A.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},A.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},A.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},A.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},A.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},A.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},A.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},A.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},A.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},A.prototype.isqr=function(e){return this.imul(e,e.clone())},A.prototype.sqr=function(e){return this.mul(e,e)},A.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(i(t%2==1),3===t){var r=this.m.add(new a(1)).iushrn(2);return this.pow(e,r)}for(var n=this.m.subn(1),o=0;!n.isZero()&&0===n.andln(1);)o++,n.iushrn(1);i(!n.isZero());var s=new a(1).toRed(this),u=s.redNeg(),f=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new a(2*c*c).toRed(this);0!==this.pow(c,f).cmp(u);)c.redIAdd(u);for(var h=this.pow(c,n),d=this.pow(e,n.addn(1).iushrn(1)),l=this.pow(e,n),p=o;0!==l.cmp(s);){for(var b=l,m=0;0!==b.cmp(s);m++)b=b.redSqr();i(m=0;n--){for(var f=t.words[n],c=u-1;c>=0;c--){var h=f>>c&1;i!==r[0]&&(i=this.sqr(i)),0!==h||0!==o?(o<<=1,o|=h,(4===++s||0===n&&0===c)&&(i=this.mul(i,r[o]),s=0,o=0)):s=0}u=26}return i},A.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},A.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},a.mont=function(e){return new S(e)},o(S,A),S.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},S.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},S.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new a(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},S.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(e)}).call(this,r(22)(e))},function(e,t,r){"use strict";e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,r){"use strict";function n(e,t){for(var r=0;r=0&&t<=M};v.each=v.forEach=function(e,t,r){var n,i;if(t=w(t,r),O(e))for(n=0,i=e.length;n0?0:a-1;for(i||(n=t[o?o[s]:s],s+=e);s>=0&&s=3;return t(e,w(r,i,4),n,o)}};v.reduce=v.foldl=v.inject=C(1),v.reduceRight=v.foldr=C(-1),v.find=v.detect=function(e,t,r){var n=(O(e)?v.findIndex:v.findKey)(e,t,r);if(void 0!==n&&-1!==n)return e[n]},v.filter=v.select=function(e,t,r){var n=[];return t=_(t,r),v.each(e,(function(e,r,i){t(e,r,i)&&n.push(e)})),n},v.reject=function(e,t,r){return v.filter(e,v.negate(_(t)),r)},v.every=v.all=function(e,t,r){t=_(t,r);for(var n=!O(e)&&v.keys(e),i=(n||e).length,o=0;o=0},v.invoke=k((function(e,t,r){var n,i;return v.isFunction(t)?i=t:v.isArray(t)&&(n=t.slice(0,-1),t=t[t.length-1]),v.map(e,(function(e){var o=i;if(!o){if(n&&n.length&&(e=x(e,n)),null==e)return;o=e[t]}return null==o?o:o.apply(e,r)}))})),v.pluck=function(e,t){return v.map(e,v.property(t))},v.where=function(e,t){return v.filter(e,v.matcher(t))},v.findWhere=function(e,t){return v.find(e,v.matcher(t))},v.max=function(e,t,r){var n,i,a=-1/0,s=-1/0;if(null==t||"number"==typeof t&&"object"!=(0,o.default)(e[0])&&null!=e)for(var u=0,f=(e=O(e)?e:v.values(e)).length;ua&&(a=n);else t=_(t,r),v.each(e,(function(e,r,n){((i=t(e,r,n))>s||i===-1/0&&a===-1/0)&&(a=e,s=i)}));return a},v.min=function(e,t,r){var n,i,a=1/0,s=1/0;if(null==t||"number"==typeof t&&"object"!=(0,o.default)(e[0])&&null!=e)for(var u=0,f=(e=O(e)?e:v.values(e)).length;un||void 0===r)return 1;if(r0?0:i-1;o>=0&&o0?a=o>=0?o:Math.max(o+s,a):s=o>=0?Math.min(o+1,s):o+s+1;else if(r&&o&&s)return n[o=r(n,i)]===i?o:-1;if(i!=i)return(o=t(h.call(n,a,s),v.isNaN))>=0?o+a:-1;for(o=e>0?a:s-1;o>=0&&ot?(n&&(clearTimeout(n),n=null),s=f,a=e.apply(i,o),n||(i=o=null)):n||!1===r.trailing||(n=setTimeout(u,c)),a};return f.cancel=function(){clearTimeout(n),s=0,n=i=o=null},f},v.debounce=function(e,t,r){var n,i,o=function(t,r){n=null,r&&(i=e.apply(t,r))},a=k((function(a){if(n&&clearTimeout(n),r){var s=!n;n=setTimeout(o,t),s&&(i=e.apply(this,a))}else n=v.delay(o,t,this,a);return i}));return a.cancel=function(){clearTimeout(n),n=null},a},v.wrap=function(e,t){return v.partial(t,e)},v.negate=function(e){return function(){return!e.apply(this,arguments)}},v.compose=function(){var e=arguments,t=e.length-1;return function(){for(var r=t,n=e[t].apply(this,arguments);r--;)n=e[r].call(this,n);return n}},v.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},v.before=function(e,t){var r;return function(){return--e>0&&(r=t.apply(this,arguments)),e<=1&&(t=null),r}},v.once=v.partial(v.before,2),v.restArguments=k;var j=!{toString:null}.propertyIsEnumerable("toString"),L=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],F=function(e,t){var r=L.length,n=e.constructor,i=v.isFunction(n)&&n.prototype||u,o="constructor";for(E(e,o)&&!v.contains(t,o)&&t.push(o);r--;)(o=L[r])in e&&e[o]!==i[o]&&!v.contains(t,o)&&t.push(o)};v.keys=function(e){if(!v.isObject(e))return[];if(b)return b(e);var t=[];for(var r in e)E(e,r)&&t.push(r);return j&&F(e,t),t},v.allKeys=function(e){if(!v.isObject(e))return[];var t=[];for(var r in e)t.push(r);return j&&F(e,t),t},v.values=function(e){for(var t=v.keys(e),r=t.length,n=Array(r),i=0;i1&&(n=w(n,t[1])),t=v.allKeys(e)):(n=H,t=U(t,!1,!1),e=Object(e));for(var i=0,o=t.length;i1&&(r=t[1])):(t=v.map(U(t,!1,!1),String),n=function(e,r){return!v.contains(t,r)}),v.pick(e,n,r)})),v.defaults=D(v.allKeys,!0),v.create=function(e,t){var r=A(e);return t&&v.extendOwn(r,t),r},v.clone=function(e){return v.isObject(e)?v.isArray(e)?e.slice():v.extend({},e):e},v.tap=function(e,t){return t(e),e},v.isMatch=function(e,t){var r=v.keys(t),n=r.length;if(null==e)return!n;for(var i=Object(e),o=0;o":">",'"':""","'":"'","`":"`"},G=v.invert(V),W=function(e){var t=function(t){return e[t]},r="(?:"+v.keys(e).join("|")+")",n=RegExp(r),i=RegExp(r,"g");return function(e){return e=null==e?"":""+e,n.test(e)?e.replace(i,t):e}};v.escape=W(V),v.unescape=W(G),v.result=function(e,t,r){v.isArray(t)||(t=[t]);var n=t.length;if(!n)return v.isFunction(r)?r.call(e):r;for(var i=0;i/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var $=/(.)^/,J={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Z=/\\|'|\r|\n|\u2028|\u2029/g,X=function(e){return"\\"+J[e]};v.template=function(e,t,r){!t&&r&&(t=r),t=v.defaults({},t,v.templateSettings);var n,i=RegExp([(t.escape||$).source,(t.interpolate||$).source,(t.evaluate||$).source].join("|")+"|$","g"),o=0,a="__p+='";e.replace(i,(function(t,r,n,i,s){return a+=e.slice(o,s).replace(Z,X),o=s+t.length,r?a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":n?a+="'+\n((__t=("+n+"))==null?'':__t)+\n'":i&&(a+="';\n"+i+"\n__p+='"),t})),a+="';\n",t.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{n=new Function(t.variable||"obj","_",a)}catch(e){throw e.source=a,e}var s=function(e){return n.call(this,e,v)},u=t.variable||"obj";return s.source="function("+u+"){\n"+a+"}",s},v.chain=function(e){var t=v(e);return t._chain=!0,t};var Q=function(e,t){return e._chain?v(t).chain():t};v.mixin=function(e){return v.each(v.functions(e),(function(t){var r=v[t]=e[t];v.prototype[t]=function(){var e=[this._wrapped];return c.apply(e,arguments),Q(this,r.apply(v,e))}})),v},v.mixin(v),v.each(["pop","push","reverse","shift","sort","splice","unshift"],(function(e){var t=s[e];v.prototype[e]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==e&&"splice"!==e||0!==r.length||delete r[0],Q(this,r)}})),v.each(["concat","join","slice"],(function(e){var t=s[e];v.prototype[e]=function(){return Q(this,t.apply(this._wrapped,arguments))}})),v.prototype.value=function(){return this._wrapped},v.prototype.valueOf=v.prototype.toJSON=v.prototype.value,v.prototype.toString=function(){return String(this._wrapped)},void 0===(i=function(){return v}.apply(t,[]))||(n.exports=i)}()}).call(this,r(8),r(22)(e))},function(e,t,r){"use strict";var n,i,o=e.exports={};function a(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function u(e){if(n===setTimeout)return setTimeout(e,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:a}catch(e){n=a}try{i="function"==typeof clearTimeout?clearTimeout:s}catch(e){i=s}}();var f,c=[],h=!1,d=-1;function l(){h&&f&&(h=!1,f.length?c=f.concat(c):d=-1,c.length&&p())}function p(){if(!h){var e=u(l);h=!0;for(var t=c.length;t;){for(f=c,c=[];++d1)for(var r=1;r=256||r%1)return!1}return!0}function c(e,t){if(t||(t={}),"number"==typeof e){o.checkSafeUint53(e,"invalid arrayify value");for(var r=[];e;)r.unshift(255&e),e=parseInt(String(e/256));return 0===r.length&&r.push(0),s(new Uint8Array(r))}if(t.allowMissingPrefix&&"string"==typeof e&&"0x"!==e.substring(0,2)&&(e="0x"+e),a(e)&&(e=e.toHexString()),l(e)){var n=e.substring(2);n.length%2&&("left"===t.hexPad?n="0x0"+n.substring(2):"right"===t.hexPad?n+="0":o.throwArgumentError("hex data is odd-length","value",e));for(var i=[],u=0;ut&&o.throwArgumentError("value out of range","value",arguments[0]);var r=new Uint8Array(t);return r.set(e,t-e.length),s(r)}function l(e,t){return!("string"!=typeof e||!e.match(/^0x[0-9A-Fa-f]*$/))&&(!t||e.length===2+2*t)}function p(e,t){if(t||(t={}),"number"==typeof e){o.checkSafeUint53(e,"invalid hexlify value");for(var r="";e;)r="0123456789abcdef"[15&e]+r,e=Math.floor(e/16);return r.length?(r.length%2&&(r="0"+r),"0x"+r):"0x00"}if(t.allowMissingPrefix&&"string"==typeof e&&"0x"!==e.substring(0,2)&&(e="0x"+e),a(e))return e.toHexString();if(l(e))return e.length%2&&("left"===t.hexPad?e="0x0"+e.substring(2):"right"===t.hexPad?e+="0":o.throwArgumentError("hex data is odd-length","value",e)),e.toLowerCase();if(f(e)){for(var n="0x",i=0;i>4]+"0123456789abcdef"[15&s]}return n}return o.throwArgumentError("invalid hexlify value","value",e)}function b(e){"string"!=typeof e&&(e=p(e)),l(e)||o.throwArgumentError("invalid hex string","value",e),e=e.substring(2);for(var t=0;t2*t+2&&o.throwArgumentError("value out of range","value",arguments[1]);e.length<2*t+2;)e="0x0"+e.substring(2);return e}function y(e){var t={r:"0x",s:"0x",_vs:"0x",recoveryParam:0,v:0};if(u(e)){var r=c(e);65!==r.length&&o.throwArgumentError("invalid signature string; must be 65 bytes","signature",e),t.r=p(r.slice(0,32)),t.s=p(r.slice(32,64)),t.v=r[64],t.v<27&&(0===t.v||1===t.v?t.v+=27:o.throwArgumentError("signature invalid v byte","signature",e)),t.recoveryParam=1-t.v%2,t.recoveryParam&&(r[32]|=128),t._vs=p(r.slice(32,64))}else{if(t.r=e.r,t.s=e.s,t.v=e.v,t.recoveryParam=e.recoveryParam,t._vs=e._vs,null!=t._vs){var n=d(c(t._vs),32);t._vs=p(n);var i=n[0]>=128?1:0;null==t.recoveryParam?t.recoveryParam=i:t.recoveryParam!==i&&o.throwArgumentError("signature recoveryParam mismatch _vs","signature",e),n[0]&=127;var a=p(n);null==t.s?t.s=a:t.s!==a&&o.throwArgumentError("signature v mismatch _vs","signature",e)}null==t.recoveryParam?null==t.v?o.throwArgumentError("signature missing v and recoveryParam","signature",e):t.recoveryParam=1-t.v%2:null==t.v?t.v=27+t.recoveryParam:t.recoveryParam!==1-t.v%2&&o.throwArgumentError("signature recoveryParam mismatch v","signature",e),null!=t.r&&l(t.r)?t.r=m(t.r,32):o.throwArgumentError("signature missing or invalid r","signature",e),null!=t.s&&l(t.s)?t.s=m(t.s,32):o.throwArgumentError("signature missing or invalid s","signature",e);var s=c(t.s);s[0]>=128&&o.throwArgumentError("signature s out of range","signature",e),t.recoveryParam&&(s[0]|=128);var f=p(s);t._vs&&(l(t._vs)||o.throwArgumentError("signature invalid _vs","signature",e),t._vs=m(t._vs,32)),null==t._vs?t._vs=f:t._vs!==f&&o.throwArgumentError("signature _vs mismatch v and s","signature",e)}return t}},function(e,t,r){"use strict";var n=t;n.version=r(358).version,n.utils=r(359),n.rand=r(51),n.curve=r(58),n.curves=r(364),n.ec=r(366),n.eddsa=r(369)},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.Logger=t.ErrorCode=t.LogLevel=void 0;var i=n(r(6)),o=n(r(7)),a=r(226),s=!1,u=!1,f={debug:1,default:2,info:2,warning:3,error:4,off:5},c=f.default,h=null;var d,l,p=function(){try{var e=[];if(["NFD","NFC","NFKD","NFKC"].forEach((function(t){try{if("test"!=="test".normalize(t))throw new Error("bad normalize")}catch(r){e.push(t)}})),e.length)throw new Error("missing "+e.join(", "));if(String.fromCharCode(233).normalize("NFD")!==String.fromCharCode(101,769))throw new Error("broken implementation")}catch(e){return e.message}return null}();t.LogLevel=d,function(e){e.DEBUG="DEBUG",e.INFO="INFO",e.WARNING="WARNING",e.ERROR="ERROR",e.OFF="OFF"}(d||(t.LogLevel=d={})),t.ErrorCode=l,function(e){e.UNKNOWN_ERROR="UNKNOWN_ERROR",e.NOT_IMPLEMENTED="NOT_IMPLEMENTED",e.UNSUPPORTED_OPERATION="UNSUPPORTED_OPERATION",e.NETWORK_ERROR="NETWORK_ERROR",e.SERVER_ERROR="SERVER_ERROR",e.TIMEOUT="TIMEOUT",e.BUFFER_OVERRUN="BUFFER_OVERRUN",e.NUMERIC_FAULT="NUMERIC_FAULT",e.MISSING_NEW="MISSING_NEW",e.INVALID_ARGUMENT="INVALID_ARGUMENT",e.MISSING_ARGUMENT="MISSING_ARGUMENT",e.UNEXPECTED_ARGUMENT="UNEXPECTED_ARGUMENT",e.CALL_EXCEPTION="CALL_EXCEPTION",e.INSUFFICIENT_FUNDS="INSUFFICIENT_FUNDS",e.NONCE_EXPIRED="NONCE_EXPIRED",e.REPLACEMENT_UNDERPRICED="REPLACEMENT_UNDERPRICED",e.UNPREDICTABLE_GAS_LIMIT="UNPREDICTABLE_GAS_LIMIT"}(l||(t.ErrorCode=l={}));var b=function(){function e(t){(0,i.default)(this,e),Object.defineProperty(this,"version",{enumerable:!0,value:t,writable:!1})}return(0,o.default)(e,[{key:"_log",value:function(e,t){var r=e.toLowerCase();null==f[r]&&this.throwArgumentError("invalid log level name","logLevel",e),c>f[r]||console.log.apply(console,t)}},{key:"debug",value:function(){for(var t=arguments.length,r=new Array(t),n=0;n=9007199254740991)&&this.throwError(r,e.errors.NUMERIC_FAULT,{operation:"checkSafeInteger",fault:"out-of-safe-range",value:t}),t%1&&this.throwError(r,e.errors.NUMERIC_FAULT,{operation:"checkSafeInteger",fault:"non-integer",value:t}))}},{key:"checkArgumentCount",value:function(t,r,n){n=n?": "+n:"",tr&&this.throwError("too many arguments"+n,e.errors.UNEXPECTED_ARGUMENT,{count:t,expectedCount:r})}},{key:"checkNew",value:function(t,r){t!==Object&&null!=t||this.throwError("missing new",e.errors.MISSING_NEW,{name:r.name})}},{key:"checkAbstract",value:function(t,r){t===r?this.throwError("cannot instantiate abstract class "+JSON.stringify(r.name)+" directly; use a sub-class",e.errors.UNSUPPORTED_OPERATION,{name:t.name,operation:"new"}):t!==Object&&null!=t||this.throwError("missing new",e.errors.MISSING_NEW,{name:r.name})}}],[{key:"globalLogger",value:function(){return h||(h=new e(a.version)),h}},{key:"setCensorship",value:function(t,r){if(!t&&r&&this.globalLogger().throwError("cannot permanently disable censorship",e.errors.UNSUPPORTED_OPERATION,{operation:"setCensorship"}),s){if(!t)return;this.globalLogger().throwError("error censorship permanent",e.errors.UNSUPPORTED_OPERATION,{operation:"setCensorship"})}u=!!t,s=!!r}},{key:"setLogLevel",value:function(t){var r=f[t.toLowerCase()];null!=r?c=r:e.globalLogger().warn("invalid log level - "+t)}}]),e}();t.Logger=b,b.errors=l,b.levels=d},function(e,t,r){"use strict";function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(t)}e.exports=n},function(e,t,r){"use strict";var n=r(0)(r(1)),i=r(10),o=r(177),a=r(92),s=r(188),u=r(26),f=r(5),c=function e(t,r){var o=[];return r.forEach((function(r){if("object"===(0,n.default)(r.components)){if("tuple"!==r.type.substring(0,5))throw new Error("components found but type is not tuple; report on GitHub");var a="",s=r.type.indexOf("[");s>=0&&(a=r.type.substring(s));var u=e(t,r.components);i.isArray(u)&&t?o.push("tuple("+u.join(",")+")"+a):t?o.push("("+u+")"):o.push("("+u.join(",")+")"+a)}else o.push(r.type)})),o},h=function(e){if(!a.isHexStrict(e))throw new Error("The parameter must be a valid HEX string.");var t="",r=0,n=e.length;for("0x"===e.substring(0,2)&&(r=2);r7?r+=e[n].toUpperCase():r+=e[n];return r},toHex:a.toHex,toBN:a.toBN,bytesToHex:a.bytesToHex,hexToBytes:a.hexToBytes,hexToNumberString:a.hexToNumberString,hexToNumber:a.hexToNumber,toDecimal:a.hexToNumber,numberToHex:a.numberToHex,fromDecimal:a.numberToHex,hexToUtf8:a.hexToUtf8,hexToString:a.hexToUtf8,toUtf8:a.hexToUtf8,utf8ToHex:a.utf8ToHex,stringToHex:a.utf8ToHex,fromUtf8:a.utf8ToHex,hexToAscii:h,toAscii:h,asciiToHex:d,fromAscii:d,unitMap:o.unitMap,toWei:function(e,t){if(t=l(t),!a.isBN(e)&&!i.isString(e))throw new Error("Please pass numbers as strings or BN objects to avoid precision errors.");return a.isBN(e)?o.toWei(e,t):o.toWei(e,t).toString(10)},fromWei:function(e,t){if(t=l(t),!a.isBN(e)&&!i.isString(e))throw new Error("Please pass numbers as strings or BN objects to avoid precision errors.");return a.isBN(e)?o.fromWei(e,t):o.fromWei(e,t).toString(10)},padLeft:a.leftPad,leftPad:a.leftPad,padRight:a.rightPad,rightPad:a.rightPad,toTwosComplement:a.toTwosComplement,isBloom:a.isBloom,isUserEthereumAddressInBloom:a.isUserEthereumAddressInBloom,isContractAddressInBloom:a.isContractAddressInBloom,isTopic:a.isTopic,isTopicInBloom:a.isTopicInBloom,isInBloom:a.isInBloom,compareBlockNumbers:function(e,t){if(e==t)return 0;if("genesis"!=e&&"earliest"!=e&&0!=e||"genesis"!=t&&"earliest"!=t&&0!=t){if("genesis"==e||"earliest"==e)return-1;if("genesis"==t||"earliest"==t)return 1;if("latest"==e)return"pending"==t?-1:1;if("latest"===t)return"pending"==e?1:-1;if("pending"==e)return 1;if("pending"==t)return-1;var r=new f(e),n=new f(t);return r.lt(n)?-1:r.eq(n)?0:1}return 0}}},function(e,t,r){"use strict";function n(e,t){if(!e)throw new Error(t||"Assertion failed")}e.exports=n,n.equal=function(e,t,r){if(e!=t)throw new Error(r||"Assertion failed: "+e+" != "+t)}},function(e,t,r){"use strict";var n=r(117);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&n(e,t)}},function(e,t,r){"use strict";var n=r(1),i=r(118);e.exports=function(e,t){return!t||"object"!==n(t)&&"function"!=typeof t?i(e):t}},function(e,t,r){"use strict";var n=t,i=r(5),o=r(17),a=r(72);n.assert=o,n.toArray=a.toArray,n.zero2=a.zero2,n.toHex=a.toHex,n.encode=a.encode,n.getNAF=function(e,t,r){var n=new Array(Math.max(e.bitLength(),r)+1);n.fill(0);for(var i=1<(i>>1)-1?(i>>1)-u:u,o.isubn(s)):s=0,n[a]=s,o.iushrn(1)}return n},n.getJSF=function(e,t){var r=[[],[]];e=e.clone(),t=t.clone();for(var n=0,i=0;e.cmpn(-n)>0||t.cmpn(-i)>0;){var o,a,s,u=e.andln(3)+n&3,f=t.andln(3)+i&3;if(3===u&&(u=-1),3===f&&(f=-1),0==(1&u))o=0;else o=3!==(s=e.andln(7)+n&7)&&5!==s||2!==f?u:-u;if(r[0].push(o),0==(1&f))a=0;else a=3!==(s=t.andln(7)+i&7)&&5!==s||2!==u?f:-f;r[1].push(a),2*n===o+1&&(n=1-n),2*i===a+1&&(i=1-i),e.iushrn(1),t.iushrn(1)}return r},n.cachedProperty=function(e,t,r){var n="_"+t;e.prototype[t]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}},n.parseBytes=function(e){return"string"==typeof e?n.toArray(e,"hex"):e},n.intFromLE=function(e){return new i(e,"hex","le")}},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.checkResultErrors=function(e){var t=[];return function e(r,n){if(!Array.isArray(n))return;for(var i in n){var o=r.slice();o.push(i);try{e(o,n[i])}catch(e){t.push({path:o,error:e})}}}([],e),t},t.Reader=t.Writer=t.Coder=void 0;var i=n(r(6)),o=n(r(7)),a=r(12),s=r(29),u=r(31),f=r(14),c=r(38),h=new f.Logger(c.version);var d=function(){function e(t,r,n,o){(0,i.default)(this,e),this.name=t,this.type=r,this.localName=n,this.dynamic=o}return(0,o.default)(e,[{key:"_throwError",value:function(e,t){h.throwArgumentError(e,this.localName,t)}}]),e}();t.Coder=d;var l=function(){function e(t){(0,i.default)(this,e),(0,u.defineReadOnly)(this,"wordSize",t||32),this._data=(0,a.arrayify)([]),this._padding=new Uint8Array(t)}return(0,o.default)(e,[{key:"_writeData",value:function(e){return this._data=(0,a.concat)([this._data,e]),e.length}},{key:"writeBytes",value:function(e){var t=(0,a.arrayify)(e);return t.length%this.wordSize&&(t=(0,a.concat)([t,this._padding.slice(t.length%this.wordSize)])),this._writeData(t)}},{key:"_getValue",value:function(e){var t=(0,a.arrayify)(s.BigNumber.from(e));return t.length>this.wordSize&&h.throwError("value out-of-bounds",f.Logger.errors.BUFFER_OVERRUN,{length:this.wordSize,offset:t.length}),t.length%this.wordSize&&(t=(0,a.concat)([this._padding.slice(t.length%this.wordSize),t])),t}},{key:"writeValue",value:function(e){return this._writeData(this._getValue(e))}},{key:"writeUpdatableValue",value:function(){var e=this,t=this.length;return this.writeValue(0),function(r){e._data.set(e._getValue(r),t)}}},{key:"data",get:function(){return(0,a.hexlify)(this._data)}},{key:"length",get:function(){return this._data.length}}]),e}();t.Writer=l;var p=function(){function e(t,r,n){(0,i.default)(this,e),(0,u.defineReadOnly)(this,"_data",(0,a.arrayify)(t)),(0,u.defineReadOnly)(this,"wordSize",r||32),(0,u.defineReadOnly)(this,"_coerceFunc",n),this._offset=0}return(0,o.default)(e,[{key:"coerce",value:function(t,r){return this._coerceFunc?this._coerceFunc(t,r):e.coerce(t,r)}},{key:"_peekBytes",value:function(e,t){var r=Math.ceil(t/this.wordSize)*this.wordSize;return this._offset+r>this._data.length&&h.throwError("data out-of-bounds",f.Logger.errors.BUFFER_OVERRUN,{length:this._data.length,offset:this._offset+r}),this._data.slice(this._offset,this._offset+r)}},{key:"subReader",value:function(t){return new e(this._data.slice(this._offset+t),this.wordSize,this._coerceFunc)}},{key:"readBytes",value:function(e){var t=this._peekBytes(0,e);return this._offset+=t.length,t.slice(0,e)}},{key:"readValue",value:function(){return s.BigNumber.from(this.readBytes(this.wordSize))}},{key:"data",get:function(){return(0,a.hexlify)(this._data)}},{key:"consumed",get:function(){return this._offset}}],[{key:"coerce",value:function(e,t){var r=e.match("^u?int([0-9]+)$");return r&&parseInt(r[1])<=48&&(t=t.toNumber()),t}}]),e}();t.Reader=p},function(e,t,r){"use strict";e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,r){"use strict";var n=r(17),i=r(3);function o(e,t){return 55296==(64512&e.charCodeAt(t))&&(!(t<0||t+1>=e.length)&&56320==(64512&e.charCodeAt(t+1)))}function a(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function s(e){return 1===e.length?"0"+e:e}function u(e){return 7===e.length?"0"+e:6===e.length?"00"+e:5===e.length?"000"+e:4===e.length?"0000"+e:3===e.length?"00000"+e:2===e.length?"000000"+e:1===e.length?"0000000"+e:e}t.inherits=i,t.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if("string"==typeof e)if(t){if("hex"===t)for((e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e),i=0;i>6|192,r[n++]=63&a|128):o(e,i)?(a=65536+((1023&a)<<10)+(1023&e.charCodeAt(++i)),r[n++]=a>>18|240,r[n++]=a>>12&63|128,r[n++]=a>>6&63|128,r[n++]=63&a|128):(r[n++]=a>>12|224,r[n++]=a>>6&63|128,r[n++]=63&a|128)}else for(i=0;i>>0}return a},t.split32=function(e,t){for(var r=new Array(4*e.length),n=0,i=0;n>>24,r[i+1]=o>>>16&255,r[i+2]=o>>>8&255,r[i+3]=255&o):(r[i+3]=o>>>24,r[i+2]=o>>>16&255,r[i+1]=o>>>8&255,r[i]=255&o)}return r},t.rotr32=function(e,t){return e>>>t|e<<32-t},t.rotl32=function(e,t){return e<>>32-t},t.sum32=function(e,t){return e+t>>>0},t.sum32_3=function(e,t,r){return e+t+r>>>0},t.sum32_4=function(e,t,r,n){return e+t+r+n>>>0},t.sum32_5=function(e,t,r,n,i){return e+t+r+n+i>>>0},t.sum64=function(e,t,r,n){var i=e[t],o=n+e[t+1]>>>0,a=(o>>0,e[t+1]=o},t.sum64_hi=function(e,t,r,n){return(t+n>>>0>>0},t.sum64_lo=function(e,t,r,n){return t+n>>>0},t.sum64_4_hi=function(e,t,r,n,i,o,a,s){var u=0,f=t;return u+=(f=f+n>>>0)>>0)>>0)>>0},t.sum64_4_lo=function(e,t,r,n,i,o,a,s){return t+n+o+s>>>0},t.sum64_5_hi=function(e,t,r,n,i,o,a,s,u,f){var c=0,h=t;return c+=(h=h+n>>>0)>>0)>>0)>>0)>>0},t.sum64_5_lo=function(e,t,r,n,i,o,a,s,u,f){return t+n+o+s+f>>>0},t.rotr64_hi=function(e,t,r){return(t<<32-r|e>>>r)>>>0},t.rotr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0},t.shr64_hi=function(e,t,r){return e>>>r},t.shr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0}},function(e,t,r){"use strict";var n=r(4).Buffer,i=r(42).Transform,o=r(67).StringDecoder;function a(e){i.call(this),this.hashMode="string"==typeof e,this.hashMode?this[e]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}r(3)(a,i),a.prototype.update=function(e,t,r){"string"==typeof e&&(e=n.from(e,t));var i=this._update(e);return this.hashMode?this:(r&&(i=this._toString(i,r)),i)},a.prototype.setAutoPadding=function(){},a.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},a.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},a.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},a.prototype._transform=function(e,t,r){var n;try{this.hashMode?this._update(e):this.push(this._update(e))}catch(e){n=e}finally{r(n)}},a.prototype._flush=function(e){var t;try{this.push(this.__final())}catch(e){t=e}e(t)},a.prototype._finalOrDigest=function(e){var t=this.__final()||n.alloc(0);return e&&(t=this._toString(t,e,!0)),t},a.prototype._toString=function(e,t,r){if(this._decoder||(this._decoder=new o(t),this._encoding=t),this._encoding!==t)throw new Error("can't switch encodings");var n=this._decoder.write(e);return r&&(n+=this._decoder.end()),n},e.exports=a},function(e,t,r){"use strict";var n=r(173),i=r(221);e.exports={packageInit:function(e,t){if(t=Array.prototype.slice.call(t),!e)throw new Error('You need to instantiate using the "new" keyword.');Object.defineProperty(e,"currentProvider",{get:function(){return e._provider},set:function(t){return e.setProvider(t)},enumerable:!0,configurable:!0}),t[0]&&t[0]._requestManager?e._requestManager=t[0]._requestManager:e._requestManager=new n.Manager(t[0],t[1]),e.givenProvider=n.Manager.givenProvider,e.providers=n.Manager.providers,e._provider=e._requestManager.provider,e.setProvider||(e.setProvider=function(t,r){return e._requestManager.setProvider(t,r),e._provider=e._requestManager.provider,!0}),e.setRequestManager=function(t){e._requestManager=t,e._provider=t.provider},e.BatchRequest=n.BatchManager.bind(null,e._requestManager),e.extend=i(e)},addProviders:function(e){e.givenProvider=n.Manager.givenProvider,e.providers=n.Manager.providers}}},function(e,t,r){"use strict";(function(t,n){var i=r(4).Buffer,o=t.crypto||t.msCrypto;o&&o.getRandomValues?e.exports=function(e,t){if(e>4294967295)throw new RangeError("requested too many random bytes");var r=i.allocUnsafe(e);if(e>0)if(e>65536)for(var a=0;a1?(e[r[0]]=e[r[0]]||{},e[r[0]][r[1]]=t):e[r[0]]=t},l.prototype.getCall=function(e){return a.isFunction(this.call)?this.call(e):this.call},l.prototype.extractCallback=function(e){if(a.isFunction(e[e.length-1]))return e.pop()},l.prototype.validateArgs=function(e){if(e.length!==this.params)throw s.InvalidNumberOfParams(e.length,this.params,this.name)},l.prototype.formatInput=function(e){var t=this;return this.inputFormatter?this.inputFormatter.map((function(r,n){return r?r.call(t,e[n]):e[n]})):e},l.prototype.formatOutput=function(e){var t=this;return a.isArray(e)?e.map((function(e){return t.outputFormatter&&e?t.outputFormatter(e):e})):this.outputFormatter&&e?this.outputFormatter(e):e},l.prototype.toPayload=function(e){var t=this.getCall(e),r=this.extractCallback(e),n=this.formatInput(e);this.validateArgs(n);var i={method:t,params:n,callback:r};return this.transformPayload&&(i=this.transformPayload(i)),i},l.prototype._confirmTransaction=function(e,t,r){var n=this,p=!1,b=!0,m=0,y=0,v=null,g=null,w=a.isObject(r.params[0])&&r.params[0].gas?r.params[0].gas:null,_=a.isObject(r.params[0])&&r.params[0].data&&r.params[0].from&&!r.params[0].to,k=_&&r.params[0].data.length>2,A=[new l({name:"getBlockByNumber",call:"eth_getBlockByNumber",params:2,inputFormatter:[u.inputBlockNumberFormatter,function(e){return!!e}],outputFormatter:u.outputBlockFormatter}),new l({name:"getTransactionReceipt",call:"eth_getTransactionReceipt",params:1,inputFormatter:[null],outputFormatter:u.outputTransactionReceiptFormatter}),new l({name:"getCode",call:"eth_getCode",params:2,inputFormatter:[u.inputAddressFormatter,u.inputDefaultBlockNumberFormatter]}),new l({name:"getTransactionByHash",call:"eth_getTransactionByHash",params:1,inputFormatter:[null],outputFormatter:u.outputTransactionFormatter}),new h({name:"subscribe",type:"eth",subscriptions:{newBlockHeaders:{subscriptionName:"newHeads",params:0,outputFormatter:u.outputBlockFormatter}}})],S={};a.each(A,(function(e){e.attachToObject(S),e.requestManager=n.requestManager}));var E=function(a,h,l,A,E){if(!l)return E||(E={unsubscribe:function(){clearInterval(v)}}),(a?c.resolve(a):S.getTransactionReceipt(t)).catch((function(t){E.unsubscribe(),p=!0,f._fireError({message:"Failed to check for transaction receipt:",data:t},e.eventEmitter,e.reject)})).then(function(){var t=(0,o.default)(i.default.mark((function t(r){var o,s,u;return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r&&r.blockHash){t.next=2;break}throw new Error("Receipt missing or blockHash null");case 2:if(n.extraFormatters&&n.extraFormatters.receiptFormatter&&(r=n.extraFormatters.receiptFormatter(r)),!(e.eventEmitter.listeners("confirmation").length>0)){t.next=28;break}if(void 0!==a&&0===y){t.next=25;break}return t.next=7,S.getBlockByNumber("latest");case 7:if(s=t.sent,u=s?s.hash:null,!h){t.next=24;break}if(!g){t.next=17;break}return t.next=13,S.getBlockByNumber(g.number+1);case 13:(o=t.sent)&&(g=o,e.eventEmitter.emit("confirmation",y,r,u)),t.next=22;break;case 17:return t.next=19,S.getBlockByNumber(r.blockNumber);case 19:o=t.sent,g=o,e.eventEmitter.emit("confirmation",y,r,u);case 22:t.next=25;break;case 24:e.eventEmitter.emit("confirmation",y,r,u);case 25:(h&&o||!h)&&y++,b=!1,y===n.transactionConfirmationBlocks+1&&(E.unsubscribe(),e.eventEmitter.removeAllListeners());case 28:return t.abrupt("return",r);case 29:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()).then(function(){var t=(0,o.default)(i.default.mark((function t(r){var o;return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!_||p){t.next=19;break}if(r.contractAddress){t.next=5;break}return b&&(E.unsubscribe(),p=!0),f._fireError(s.NoContractAddressFoundError(r),e.eventEmitter,e.reject,null,r),t.abrupt("return");case 5:return t.prev=5,t.next=8,S.getCode(r.contractAddress);case 8:o=t.sent,t.next=13;break;case 11:t.prev=11,t.t0=t.catch(5);case 13:if(o){t.next=15;break}return t.abrupt("return");case 15:!0===r.status&&k||o.length>2?(e.eventEmitter.emit("receipt",r),n.extraFormatters&&n.extraFormatters.contractDeployFormatter?e.resolve(n.extraFormatters.contractDeployFormatter(r)):e.resolve(r),b&&e.eventEmitter.removeAllListeners()):f._fireError(s.ContractCodeNotStoredError(r),e.eventEmitter,e.reject,null,r),b&&E.unsubscribe(),p=!0;case 19:return t.abrupt("return",r);case 20:case"end":return t.stop()}}),t,null,[[5,11]])})));return function(e){return t.apply(this,arguments)}}()).then(function(){var t=(0,o.default)(i.default.mark((function t(o){var a,c,h,l;return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(_||p){t.next=35;break}if(o.outOfGas||w&&w===o.gasUsed||!0!==o.status&&"0x1"!==o.status&&void 0!==o.status){t.next=7;break}e.eventEmitter.emit("receipt",o),e.resolve(o),b&&e.eventEmitter.removeAllListeners(),t.next=33;break;case 7:if(JSON.stringify(o,null,2),!1!==o.status&&"0x0"!==o.status){t.next=32;break}if(t.prev=9,a=null,!n.handleRevert||"eth_sendTransaction"!==n.call&&"eth_sendRawTransaction"!==n.call){t.next=24;break}return c=r.params[0],"eth_sendRawTransaction"===n.call&&(h=r.params[0],l=d.parse(h),c=u.inputTransactionFormatter({data:l.data,to:l.to,from:l.from,gas:l.gasLimit.toHexString(),gasPrice:l.gasPrice.toHexString(),value:l.value.toHexString()})),t.next=16,n.getRevertReason(c,o.blockNumber);case 16:if(!(a=t.sent)){t.next=21;break}f._fireError(s.TransactionRevertInstructionError(a.reason,a.signature,o),e.eventEmitter,e.reject,null,o),t.next=22;break;case 21:throw!1;case 22:t.next=25;break;case 24:throw!1;case 25:t.next=30;break;case 27:t.prev=27,t.t0=t.catch(9),f._fireError(s.TransactionRevertedWithoutReasonError(o),e.eventEmitter,e.reject,null,o);case 30:t.next=33;break;case 32:f._fireError(s.TransactionOutOfGasError(o),e.eventEmitter,e.reject,null,o);case 33:b&&E.unsubscribe(),p=!0;case 35:case"end":return t.stop()}}),t,null,[[9,27]])})));return function(e){return t.apply(this,arguments)}}()).catch((function(){m++,h?m-1>=n.transactionPollingTimeout&&(E.unsubscribe(),p=!0,f._fireError(s.TransactionError("Transaction was not mined within "+n.transactionPollingTimeout+" seconds, please make sure your transaction was properly sent. Be aware that it might still be mined!"),e.eventEmitter,e.reject)):m-1>=n.transactionBlockTimeout&&(E.unsubscribe(),p=!0,f._fireError(s.TransactionError("Transaction was not mined within "+n.transactionBlockTimeout+" blocks, please make sure your transaction was properly sent. Be aware that it might still be mined!"),e.eventEmitter,e.reject))}));E.unsubscribe(),p=!0,f._fireError({message:"Failed to subscribe to new newBlockHeaders to confirm the transaction receipts.",data:l},e.eventEmitter,e.reject)},x=function(e){var t=function(){v=setInterval(E.bind(null,e,!0),1e3)};this.requestManager.provider.on?S.subscribe("newBlockHeaders",(function(r,n,i){r||!n?t():E(e,!1,r,0,i)})):t()}.bind(this);S.getTransactionReceipt(t).then((function(t){t&&t.blockHash?(e.eventEmitter.listeners("confirmation").length>0&&x(t),E(t,!1)):p||x()})).catch((function(){p||x()}))};var p=function(e,t){return a.isNumber(e)?t.wallet[e]:a.isObject(e)&&e.address&&e.privateKey?e:t.wallet[e.toLowerCase()]};l.prototype.buildCall=function(){var e=this,t="eth_sendTransaction"===e.call||"eth_sendRawTransaction"===e.call,r="eth_call"===e.call,n=function(){var n=c(!t),i=e.toPayload(Array.prototype.slice.call(arguments)),o=function(o,a){var u;if(e.handleRevert&&r&&e.abiCoder&&(!o&&e.isRevertReasonString(a)?u=a.substring(10):o&&o.data&&(u=o.data.substring(10)),u)){var c=e.abiCoder.decodeParameter("string","0x"+u);return void f._fireError(s.RevertInstructionError(c,"Error(String)"),n.eventEmitter,n.reject,i.callback,{reason:c,signature:"Error(String)"})}try{a=e.formatOutput(a)}catch(e){o=e}if(a instanceof Error&&(o=a),o)return o.error&&(o=o.error),f._fireError(o,n.eventEmitter,n.reject,i.callback);i.callback&&i.callback(null,a),t?(n.eventEmitter.emit("transactionHash",a),e._confirmTransaction(n,a,i)):o||n.resolve(a)},u=function(t){var r=a.extend({},i,{method:"eth_sendRawTransaction",params:[t.rawTransaction]});e.requestManager.send(r,o)},h=function(e,t){var r;if(t&&t.accounts&&t.accounts.wallet&&t.accounts.wallet.length)if("eth_sendTransaction"===e.method){var i=e.params[0];if((r=p(a.isObject(i)?i.from:null,t.accounts))&&r.privateKey){var s=a.omit(i,"from");return t.defaultChain&&!s.chain&&(s.chain=t.defaultChain),t.defaultHardfork&&!s.hardfork&&(s.hardfork=t.defaultHardfork),t.defaultCommon&&!s.common&&(s.common=t.defaultCommon),t.accounts.signTransaction(s,r.privateKey).then(u).catch((function(e){a.isFunction(n.eventEmitter.listeners)&&n.eventEmitter.listeners("error").length&&(n.eventEmitter.emit("error",e),n.eventEmitter.removeAllListeners(),n.eventEmitter.catch((function(){}))),n.reject(e)}))}}else if("eth_sign"===e.method){var f=e.params[1];if((r=p(e.params[0],t.accounts))&&r.privateKey){var c=t.accounts.sign(f,r.privateKey);return e.callback&&e.callback(null,c.signature),void n.resolve(c.signature)}}return t.requestManager.send(e,o)};if(t&&a.isObject(i.params[0])&&void 0===i.params[0].gasPrice){var d=new l({name:"getGasPrice",call:"eth_gasPrice",params:0}).createFunction(e.requestManager);d((function(r,o){o&&(i.params[0].gasPrice=o),t&&setTimeout((function(){n.eventEmitter.emit("sending",i)}),0),h(i,e)}))}else t&&setTimeout((function(){n.eventEmitter.emit("sending",i)}),0),h(i,e);return t&&setTimeout((function(){n.eventEmitter.emit("sent",i)}),0),n.eventEmitter};return n.method=e,n.request=this.request.bind(this),n},l.prototype.getRevertReason=function(e,t){var r=this;return new Promise((function(n,i){new l({name:"call",call:"eth_call",params:2,abiCoder:r.abiCoder,handleRevert:!0}).createFunction(r.requestManager)(e,f.numberToHex(t)).then((function(){n(!1)})).catch((function(e){e.reason?n({reason:e.reason,signature:e.signature}):i(e)}))}))},l.prototype.isRevertReasonString=function(e){return a.isString(e)&&(e.length-2)/2%32==4&&"0x08c379a0"===e.substring(0,10)},l.prototype.request=function(){var e=this.toPayload(Array.prototype.slice.call(arguments));return e.format=this.formatOutput.bind(this),e},e.exports=l},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"BigNumber",{enumerable:!0,get:function(){return n.BigNumber}}),Object.defineProperty(t,"formatFixed",{enumerable:!0,get:function(){return i.formatFixed}}),Object.defineProperty(t,"FixedFormat",{enumerable:!0,get:function(){return i.FixedFormat}}),Object.defineProperty(t,"FixedNumber",{enumerable:!0,get:function(){return i.FixedNumber}}),Object.defineProperty(t,"parseFixed",{enumerable:!0,get:function(){return i.parseFixed}});var n=r(105),i=r(228)},function(e,t,r){"use strict";var n=r(3),i=r(78),o=r(79),a=r(80),s=r(24);function u(e){s.call(this,"digest"),this._hash=e}n(u,s),u.prototype._update=function(e){this._hash.update(e)},u.prototype._final=function(){return this._hash.digest()},e.exports=function(e){return"md5"===(e=e.toLowerCase())?new i:"rmd160"===e||"ripemd160"===e?new o:new u(a(e))}},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.defineReadOnly=h,t.getStatic=function(e,t){for(var r=0;r<32;r++){if(e[t])return e[t];if(!e.prototype||"object"!==(0,a.default)(e.prototype))break;e=Object.getPrototypeOf(e.prototype).constructor}return null},t.resolveProperties=function(e){return f(this,void 0,void 0,o.default.mark((function t(){var r,n;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=Object.keys(e).map((function(t){var r=e[t];return Promise.resolve(r).then((function(e){return{key:t,value:e}}))})),t.next=3,Promise.all(r);case 3:return n=t.sent,t.abrupt("return",n.reduce((function(e,t){return e[t.key]=t.value,e}),{}));case 5:case"end":return t.stop()}}),t)})))},t.checkProperties=function(e,t){e&&"object"===(0,a.default)(e)||c.throwArgumentError("invalid object","object",e);Object.keys(e).forEach((function(r){t[r]||c.throwArgumentError("invalid object key - "+r,"transaction:"+r,e)}))},t.shallowCopy=function(e){var t={};for(var r in e)t[r]=e[r];return t},t.deepCopy=p,t.Description=void 0;var i=n(r(6)),o=n(r(47)),a=n(r(1)),s=r(14),u=r(232),f=function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{u(n.next(e))}catch(e){o(e)}}function s(e){try{u(n.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,s)}u((n=n.apply(e,t||[])).next())}))},c=new s.Logger(u.version);function h(e,t,r){Object.defineProperty(e,t,{enumerable:!0,value:r,writable:!1})}var d={bigint:!0,boolean:!0,function:!0,number:!0,string:!0};function l(e){if(function e(t){if(null==t||d[(0,a.default)(t)])return!0;if(Array.isArray(t)||"object"===(0,a.default)(t)){if(!Object.isFrozen(t))return!1;for(var r=Object.keys(t),n=0;n=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,i=(r-n)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var o=this._hash();return e?o.toString(e):o},i.prototype._update=function(){throw new Error("_update must be implemented by subclass")},e.exports=i},function(e,t,r){"use strict";var n=r(0)(r(1)),i=r(95),o=r(193);function a(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=w,t.resolve=function(e,t){return w(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?w(e,!1,!0).resolveObject(t):t},t.format=function(e){o.isString(e)&&(e=w(e));return e instanceof a?e.format():a.prototype.format.call(e)},t.Url=a;var s=/^([a-z0-9.+-]+:)/i,u=/:[0-9]*$/,f=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,c=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),h=["'"].concat(c),d=["%","/","?",";","#"].concat(h),l=["/","?","#"],p=/^[+a-z0-9A-Z_-]{0,63}$/,b=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,m={javascript:!0,"javascript:":!0},y={javascript:!0,"javascript:":!0},v={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},g=r(194);function w(e,t,r){if(e&&o.isObject(e)&&e instanceof a)return e;var n=new a;return n.parse(e,t,r),n}a.prototype.parse=function(e,t,r){if(!o.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+(0,n.default)(e));var a=e.indexOf("?"),u=-1!==a&&a127?B+="x":B+=U[R];if(!B.match(p)){var j=P.slice(0,I),L=P.slice(I+1),F=U.match(b);F&&(j.push(F[1]),L.unshift(F[2])),L.length&&(w="/"+L.join(".")+w),this.hostname=j.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),C||(this.hostname=i.toASCII(this.hostname));var D=this.port?":"+this.port:"",q=this.hostname||"";this.host=q+D,this.href+=this.host,C&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==w[0]&&(w="/"+w))}if(!m[A])for(I=0,T=h.length;I0)&&r.host.split("@"))&&(r.auth=O.shift(),r.host=r.hostname=O.shift());return r.search=e.search,r.query=e.query,o.isNull(r.pathname)&&o.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!A.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var E=A.slice(-1)[0],x=(r.host||e.host||A.length>1)&&("."===E||".."===E)||""===E,M=0,I=A.length;I>=0;I--)"."===(E=A[I])?A.splice(I,1):".."===E?(A.splice(I,1),M++):M&&(A.splice(I,1),M--);if(!_&&!k)for(;M--;M)A.unshift("..");!_||""===A[0]||A[0]&&"/"===A[0].charAt(0)||A.unshift(""),x&&"/"!==A.join("/").substr(-1)&&A.push("");var O,C=""===A[0]||A[0]&&"/"===A[0].charAt(0);S&&(r.hostname=r.host=C?"":A.length?A.shift():"",(O=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=O.shift(),r.host=r.hostname=O.shift()));return(_=_||r.host&&A.length)&&!C&&A.unshift(""),A.length?r.pathname=A.join("/"):(r.pathname=null,r.path=null),o.isNull(r.pathname)&&o.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},a.prototype.parseHost=function(){var e=this.host,t=u.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,r){"use strict";(t=e.exports=r(98)).Stream=t,t.Readable=t,t.Writable=r(66),t.Duplex=r(27),t.Transform=r(102),t.PassThrough=r(211)},function(e,t,r){"use strict";(function(e){var n=r(0)(r(1));function i(e){return Object.prototype.toString.call(e)}t.isArray=function(e){return Array.isArray?Array.isArray(e):"[object Array]"===i(e)},t.isBoolean=function(e){return"boolean"==typeof e},t.isNull=function(e){return null===e},t.isNullOrUndefined=function(e){return null==e},t.isNumber=function(e){return"number"==typeof e},t.isString=function(e){return"string"==typeof e},t.isSymbol=function(e){return"symbol"===(0,n.default)(e)},t.isUndefined=function(e){return void 0===e},t.isRegExp=function(e){return"[object RegExp]"===i(e)},t.isObject=function(e){return"object"===(0,n.default)(e)&&null!==e},t.isDate=function(e){return"[object Date]"===i(e)},t.isError=function(e){return"[object Error]"===i(e)||e instanceof Error},t.isFunction=function(e){return"function"==typeof e},t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"===(0,n.default)(e)||void 0===e},t.isBuffer=e.isBuffer}).call(this,r(2).Buffer)},function(e,t,r){"use strict";var n=t;n.utils=r(23),n.common=r(37),n.sha=r(240),n.ripemd=r(244),n.hmac=r(245),n.sha1=n.sha.sha1,n.sha256=n.sha.sha256,n.sha224=n.sha.sha224,n.sha384=n.sha.sha384,n.sha512=n.sha.sha512,n.ripemd160=n.ripemd.ripemd160},function(e,t,r){"use strict";var n=r(23),i=r(17);function o(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}t.BlockHash=o,o.prototype.update=function(e,t){if(e=n.toArray(e,t),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){var r=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-r,e.length),0===this.pending.length&&(this.pending=null),e=n.join32(e,0,e.length-r,this.endian);for(var i=0;i>>24&255,n[i++]=e>>>16&255,n[i++]=e>>>8&255,n[i++]=255&e}else for(n[i++]=255&e,n[i++]=e>>>8&255,n[i++]=e>>>16&255,n[i++]=e>>>24&255,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0,o=8;o1?(e[r[0]]=e[r[0]]||{},e[r[0]][r[1]]=t):e[r[0]]=t},i.prototype.buildCall=function(){var e=this;return function(){e.subscriptions[arguments[0]]||console.warn("Subscription "+JSON.stringify(arguments[0])+" doesn't exist. Subscribing anyway.");var t=new n({subscription:e.subscriptions[arguments[0]]||{},requestManager:e.requestManager,type:e.type});return t.subscribe.apply(t,arguments)}},e.exports={subscriptions:i,subscription:n}},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.keccak256=function(e){return"0x"+i.default.keccak_256((0,o.arrayify)(e))};var i=n(r(229)),o=r(12)},function(e,t,r){"use strict";var n,i=r(0)(r(1));function o(e){this.rand=e}if(e.exports=function(e){return n||(n=new o(null)),n.generate(e)},e.exports.Rand=o,o.prototype.generate=function(e){return this._rand(e)},o.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),r=0;r0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function f(e,t){this.curve=e,this.type=t,this.precomputed=null}e.exports=u,u.prototype.point=function(){throw new Error("Not implemented")},u.prototype.validate=function(){throw new Error("Not implemented")},u.prototype._fixedNafMul=function(e,t){s(e.precomputed);var r=e._getDoubles(),n=o(t,1,this._bitLength),i=(1<=u;t--)f=(f<<1)+n[t];a.push(f)}for(var c=this.jpoint(null,null,null),h=this.jpoint(null,null,null),d=i;d>0;d--){for(u=0;u=0;f--){for(t=0;f>=0&&0===a[f];f--)t++;if(f>=0&&t++,u=u.dblp(t),f<0)break;var c=a[f];s(0!==c),u="affine"===e.type?c>0?u.mixedAdd(i[c-1>>1]):u.mixedAdd(i[-c-1>>1].neg()):c>0?u.add(i[c-1>>1]):u.add(i[-c-1>>1].neg())}return"affine"===e.type?u.toP():u},u.prototype._wnafMulAdd=function(e,t,r,n,i){for(var s=this._wnafT1,u=this._wnafT2,f=this._wnafT3,c=0,h=0;h=1;h-=2){var l=h-1,p=h;if(1===s[l]&&1===s[p]){var b=[t[l],null,null,t[p]];0===t[l].y.cmp(t[p].y)?(b[1]=t[l].add(t[p]),b[2]=t[l].toJ().mixedAdd(t[p].neg())):0===t[l].y.cmp(t[p].y.redNeg())?(b[1]=t[l].toJ().mixedAdd(t[p]),b[2]=t[l].add(t[p].neg())):(b[1]=t[l].toJ().mixedAdd(t[p]),b[2]=t[l].toJ().mixedAdd(t[p].neg()));var m=[-3,-1,-5,-7,0,7,5,1,3],y=a(r[l],r[p]);c=Math.max(y[0].length,c),f[l]=new Array(c),f[p]=new Array(c);for(var v=0;v=0;h--){for(var A=0;h>=0;){var S=!0;for(v=0;v=0&&A++,_=_.dblp(A),h<0)break;for(v=0;v0?E=u[v][x-1>>1]:x<0&&(E=u[v][-x-1>>1].neg()),_="affine"===E.type?_.mixedAdd(E):_.add(E))}}for(h=0;h=Math.ceil((e.bitLength()+1)/t.step)},f.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;i>>24]^c[p>>>16&255]^h[b>>>8&255]^d[255&m]^t[y++],a=f[p>>>24]^c[b>>>16&255]^h[m>>>8&255]^d[255&l]^t[y++],s=f[b>>>24]^c[m>>>16&255]^h[l>>>8&255]^d[255&p]^t[y++],u=f[m>>>24]^c[l>>>16&255]^h[p>>>8&255]^d[255&b]^t[y++],l=o,p=a,b=s,m=u;return o=(n[l>>>24]<<24|n[p>>>16&255]<<16|n[b>>>8&255]<<8|n[255&m])^t[y++],a=(n[p>>>24]<<24|n[b>>>16&255]<<16|n[m>>>8&255]<<8|n[255&l])^t[y++],s=(n[b>>>24]<<24|n[m>>>16&255]<<16|n[l>>>8&255]<<8|n[255&p])^t[y++],u=(n[m>>>24]<<24|n[l>>>16&255]<<16|n[p>>>8&255]<<8|n[255&b])^t[y++],[o>>>=0,a>>>=0,s>>>=0,u>>>=0]}var s=[0,1,2,4,8,16,32,64,128,27,54],u=function(){for(var e=new Array(256),t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;for(var r=[],n=[],i=[[],[],[],[]],o=[[],[],[],[]],a=0,s=0,u=0;u<256;++u){var f=s^s<<1^s<<2^s<<3^s<<4;f=f>>>8^255&f^99,r[a]=f,n[f]=a;var c=e[a],h=e[c],d=e[h],l=257*e[f]^16843008*f;i[0][a]=l<<24|l>>>8,i[1][a]=l<<16|l>>>16,i[2][a]=l<<8|l>>>24,i[3][a]=l,l=16843009*d^65537*h^257*c^16843008*a,o[0][f]=l<<24|l>>>8,o[1][f]=l<<16|l>>>16,o[2][f]=l<<8|l>>>24,o[3][f]=l,0===a?a=s=1:(a=c^e[e[e[d^c]]],s^=e[e[s]])}return{SBOX:r,INV_SBOX:n,SUB_MIX:i,INV_SUB_MIX:o}}();function f(e){this._key=i(e),this._reset()}f.blockSize=16,f.keySize=32,f.prototype.blockSize=f.blockSize,f.prototype.keySize=f.keySize,f.prototype._reset=function(){for(var e=this._key,t=e.length,r=t+6,n=4*(r+1),i=[],o=0;o>>24,a=u.SBOX[a>>>24]<<24|u.SBOX[a>>>16&255]<<16|u.SBOX[a>>>8&255]<<8|u.SBOX[255&a],a^=s[o/t|0]<<24):t>6&&o%t==4&&(a=u.SBOX[a>>>24]<<24|u.SBOX[a>>>16&255]<<16|u.SBOX[a>>>8&255]<<8|u.SBOX[255&a]),i[o]=i[o-t]^a}for(var f=[],c=0;c>>24]]^u.INV_SUB_MIX[1][u.SBOX[d>>>16&255]]^u.INV_SUB_MIX[2][u.SBOX[d>>>8&255]]^u.INV_SUB_MIX[3][u.SBOX[255&d]]}this._nRounds=r,this._keySchedule=i,this._invKeySchedule=f},f.prototype.encryptBlockRaw=function(e){return a(e=i(e),this._keySchedule,u.SUB_MIX,u.SBOX,this._nRounds)},f.prototype.encryptBlock=function(e){var t=this.encryptBlockRaw(e),r=n.allocUnsafe(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[1],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[3],12),r},f.prototype.decryptBlock=function(e){var t=(e=i(e))[1];e[1]=e[3],e[3]=t;var r=a(e,this._invKeySchedule,u.INV_SUB_MIX,u.INV_SBOX,this._nRounds),o=n.allocUnsafe(16);return o.writeUInt32BE(r[0],0),o.writeUInt32BE(r[3],4),o.writeUInt32BE(r[2],8),o.writeUInt32BE(r[1],12),o},f.prototype.scrub=function(){o(this._keySchedule),o(this._invKeySchedule),o(this._key)},e.exports.AES=f},function(e,t,r){"use strict";var n=r(4).Buffer,i=r(78);e.exports=function(e,t,r,o){if(n.isBuffer(e)||(e=n.from(e,"binary")),t&&(n.isBuffer(t)||(t=n.from(t,"binary")),8!==t.length))throw new RangeError("salt should be Buffer with 8 byte length");for(var a=r/8,s=n.alloc(a),u=n.alloc(o||0),f=n.alloc(0);a>0||o>0;){var c=new i;c.update(f),c.update(e),t&&c.update(t),f=c.digest();var h=0;if(a>0){var d=s.length-a;h=Math.min(a,f.length),f.copy(s,d,0,h),a-=h}if(h0){var l=u.length-o,p=Math.min(o,f.length-h);f.copy(u,l,h,h+p),o-=p}}return f.fill(0),{key:s,iv:u}}},function(e,t,r){"use strict";var n=t;n.base=r(360),n.short=r(361),n.mont=r(362),n.edwards=r(363)},function(e,t,r){"use strict";var n=r(0)(r(1)),i=r(372),o=r(383),a=r(384),s=r(82),u=r(138),f=r(4).Buffer;function c(e){var t;"object"!==(0,n.default)(e)||f.isBuffer(e)||(t=e.passphrase,e=e.key),"string"==typeof e&&(e=f.from(e));var r,c,h=a(e,t),d=h.tag,l=h.data;switch(d){case"CERTIFICATE":c=i.certificate.decode(l,"der").tbsCertificate.subjectPublicKeyInfo;case"PUBLIC KEY":switch(c||(c=i.PublicKey.decode(l,"der")),r=c.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return i.RSAPublicKey.decode(c.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":return c.subjectPrivateKey=c.subjectPublicKey,{type:"ec",data:c};case"1.2.840.10040.4.1":return c.algorithm.params.pub_key=i.DSAparam.decode(c.subjectPublicKey.data,"der"),{type:"dsa",data:c.algorithm.params};default:throw new Error("unknown key id "+r)}throw new Error("unknown key type "+d);case"ENCRYPTED PRIVATE KEY":l=function(e,t){var r=e.algorithm.decrypt.kde.kdeparams.salt,n=parseInt(e.algorithm.decrypt.kde.kdeparams.iters.toString(),10),i=o[e.algorithm.decrypt.cipher.algo.join(".")],a=e.algorithm.decrypt.cipher.iv,c=e.subjectPrivateKey,h=parseInt(i.split("-")[1],10)/8,d=u.pbkdf2Sync(t,r,n,h,"sha1"),l=s.createDecipheriv(i,d,a),p=[];return p.push(l.update(c)),p.push(l.final()),f.concat(p)}(l=i.EncryptedPrivateKey.decode(l,"der"),t);case"PRIVATE KEY":switch(r=(c=i.PrivateKey.decode(l,"der")).algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return i.RSAPrivateKey.decode(c.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:c.algorithm.curve,privateKey:i.ECPrivateKey.decode(c.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":return c.algorithm.params.priv_key=i.DSAparam.decode(c.subjectPrivateKey,"der"),{type:"dsa",params:c.algorithm.params};default:throw new Error("unknown key id "+r)}throw new Error("unknown key type "+d);case"RSA PUBLIC KEY":return i.RSAPublicKey.decode(l,"der");case"RSA PRIVATE KEY":return i.RSAPrivateKey.decode(l,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:i.DSAPrivateKey.decode(l,"der")};case"EC PRIVATE KEY":return{curve:(l=i.ECPrivateKey.decode(l,"der")).parameters.value,privateKey:l.privateKey};default:throw new Error("unknown key type "+d)}}e.exports=c,c.signature=i.signature},function(e,t,r){"use strict";var n=r(91);e.exports=function(e){return"string"!=typeof e?e:n(e)?e.slice(2):e}},function(e,t,r){"use strict";var n="0123456789abcdef".split(""),i=[1,256,65536,16777216],o=[0,8,16,24],a=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],s=function(e){var t,r,n,i,o,s,u,f,c,h,d,l,p,b,m,y,v,g,w,_,k,A,S,E,x,M,I,O,C,P,T,U,B,R,N,j,L,F,D,q,z,H,K,V,G,W,Y,$,J,Z,X,Q,ee,te,re,ne,ie,oe,ae,se,ue,fe,ce;for(n=0;n<48;n+=2)i=e[0]^e[10]^e[20]^e[30]^e[40],o=e[1]^e[11]^e[21]^e[31]^e[41],s=e[2]^e[12]^e[22]^e[32]^e[42],u=e[3]^e[13]^e[23]^e[33]^e[43],f=e[4]^e[14]^e[24]^e[34]^e[44],c=e[5]^e[15]^e[25]^e[35]^e[45],h=e[6]^e[16]^e[26]^e[36]^e[46],d=e[7]^e[17]^e[27]^e[37]^e[47],t=(l=e[8]^e[18]^e[28]^e[38]^e[48])^(s<<1|u>>>31),r=(p=e[9]^e[19]^e[29]^e[39]^e[49])^(u<<1|s>>>31),e[0]^=t,e[1]^=r,e[10]^=t,e[11]^=r,e[20]^=t,e[21]^=r,e[30]^=t,e[31]^=r,e[40]^=t,e[41]^=r,t=i^(f<<1|c>>>31),r=o^(c<<1|f>>>31),e[2]^=t,e[3]^=r,e[12]^=t,e[13]^=r,e[22]^=t,e[23]^=r,e[32]^=t,e[33]^=r,e[42]^=t,e[43]^=r,t=s^(h<<1|d>>>31),r=u^(d<<1|h>>>31),e[4]^=t,e[5]^=r,e[14]^=t,e[15]^=r,e[24]^=t,e[25]^=r,e[34]^=t,e[35]^=r,e[44]^=t,e[45]^=r,t=f^(l<<1|p>>>31),r=c^(p<<1|l>>>31),e[6]^=t,e[7]^=r,e[16]^=t,e[17]^=r,e[26]^=t,e[27]^=r,e[36]^=t,e[37]^=r,e[46]^=t,e[47]^=r,t=h^(i<<1|o>>>31),r=d^(o<<1|i>>>31),e[8]^=t,e[9]^=r,e[18]^=t,e[19]^=r,e[28]^=t,e[29]^=r,e[38]^=t,e[39]^=r,e[48]^=t,e[49]^=r,b=e[0],m=e[1],W=e[11]<<4|e[10]>>>28,Y=e[10]<<4|e[11]>>>28,O=e[20]<<3|e[21]>>>29,C=e[21]<<3|e[20]>>>29,se=e[31]<<9|e[30]>>>23,ue=e[30]<<9|e[31]>>>23,H=e[40]<<18|e[41]>>>14,K=e[41]<<18|e[40]>>>14,R=e[2]<<1|e[3]>>>31,N=e[3]<<1|e[2]>>>31,y=e[13]<<12|e[12]>>>20,v=e[12]<<12|e[13]>>>20,$=e[22]<<10|e[23]>>>22,J=e[23]<<10|e[22]>>>22,P=e[33]<<13|e[32]>>>19,T=e[32]<<13|e[33]>>>19,fe=e[42]<<2|e[43]>>>30,ce=e[43]<<2|e[42]>>>30,te=e[5]<<30|e[4]>>>2,re=e[4]<<30|e[5]>>>2,j=e[14]<<6|e[15]>>>26,L=e[15]<<6|e[14]>>>26,g=e[25]<<11|e[24]>>>21,w=e[24]<<11|e[25]>>>21,Z=e[34]<<15|e[35]>>>17,X=e[35]<<15|e[34]>>>17,U=e[45]<<29|e[44]>>>3,B=e[44]<<29|e[45]>>>3,E=e[6]<<28|e[7]>>>4,x=e[7]<<28|e[6]>>>4,ne=e[17]<<23|e[16]>>>9,ie=e[16]<<23|e[17]>>>9,F=e[26]<<25|e[27]>>>7,D=e[27]<<25|e[26]>>>7,_=e[36]<<21|e[37]>>>11,k=e[37]<<21|e[36]>>>11,Q=e[47]<<24|e[46]>>>8,ee=e[46]<<24|e[47]>>>8,V=e[8]<<27|e[9]>>>5,G=e[9]<<27|e[8]>>>5,M=e[18]<<20|e[19]>>>12,I=e[19]<<20|e[18]>>>12,oe=e[29]<<7|e[28]>>>25,ae=e[28]<<7|e[29]>>>25,q=e[38]<<8|e[39]>>>24,z=e[39]<<8|e[38]>>>24,A=e[48]<<14|e[49]>>>18,S=e[49]<<14|e[48]>>>18,e[0]=b^~y&g,e[1]=m^~v&w,e[10]=E^~M&O,e[11]=x^~I&C,e[20]=R^~j&F,e[21]=N^~L&D,e[30]=V^~W&$,e[31]=G^~Y&J,e[40]=te^~ne&oe,e[41]=re^~ie&ae,e[2]=y^~g&_,e[3]=v^~w&k,e[12]=M^~O&P,e[13]=I^~C&T,e[22]=j^~F&q,e[23]=L^~D&z,e[32]=W^~$&Z,e[33]=Y^~J&X,e[42]=ne^~oe&se,e[43]=ie^~ae&ue,e[4]=g^~_&A,e[5]=w^~k&S,e[14]=O^~P&U,e[15]=C^~T&B,e[24]=F^~q&H,e[25]=D^~z&K,e[34]=$^~Z&Q,e[35]=J^~X&ee,e[44]=oe^~se&fe,e[45]=ae^~ue&ce,e[6]=_^~A&b,e[7]=k^~S&m,e[16]=P^~U&E,e[17]=T^~B&x,e[26]=q^~H&R,e[27]=z^~K&N,e[36]=Z^~Q&V,e[37]=X^~ee&G,e[46]=se^~fe&te,e[47]=ue^~ce&re,e[8]=A^~b&y,e[9]=S^~m&v,e[18]=U^~E&M,e[19]=B^~x&I,e[28]=H^~R&j,e[29]=K^~N&L,e[38]=Q^~V&W,e[39]=ee^~G&Y,e[48]=fe^~te&ne,e[49]=ce^~re&ie,e[0]^=a[n],e[1]^=a[n+1]},u=function(e){return function(t){var r;if("0x"===t.slice(0,2)){r=[];for(var a=2,u=t.length;a>2]|=t[l]<>2]|=r<>2]|=(192|r>>6)<>2]|=(128|63&r)<=57344?(u[m>>2]|=(224|r>>12)<>2]|=(128|r>>6&63)<>2]|=(128|63&r)<>2]|=(240|r>>18)<>2]|=(128|r>>12&63)<>2]|=(128|r>>6&63)<>2]|=(128|63&r)<=f){for(e.start=m-f,e.block=u[c],m=0;m>2]|=i[3&m],e.lastByteIndex===f)for(u[0]=u[c],m=1;m>4&15]+n[15&p]+n[p>>12&15]+n[p>>8&15]+n[p>>20&15]+n[p>>16&15]+n[p>>28&15]+n[p>>24&15];y%c==0&&(s(d),m=0)}return"0x"+b}(function(e){return{blocks:[],reset:!0,block:0,start:0,blockCount:1600-(e<<1)>>5,outputBlocks:e>>5,s:(t=[0,0,0,0,0,0,0,0,0,0],[].concat(t,t,t,t,t))};var t}(e),r)}};e.exports={keccak256:u(256),keccak512:u(512),keccak256s:u(256),keccak512s:u(512)}},function(e,t){(function(t){e.exports=t}).call(this,{})},function(e,t,r){"use strict";var n=Object.prototype.hasOwnProperty,i="~";function o(){}function a(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function s(e,t,r,n,o){if("function"!=typeof r)throw new TypeError("The listener must be a function");var s=new a(r,n||e,o),u=i?i+t:t;return e._events[u]?e._events[u].fn?e._events[u]=[e._events[u],s]:e._events[u].push(s):(e._events[u]=s,e._eventsCount++),e}function u(e,t){0==--e._eventsCount?e._events=new o:delete e._events[t]}function f(){this._events=new o,this._eventsCount=0}Object.create&&(o.prototype=Object.create(null),(new o).__proto__||(i=!1)),f.prototype.eventNames=function(){var e,t,r=[];if(0===this._eventsCount)return r;for(t in e=this._events)n.call(e,t)&&r.push(i?t.slice(1):t);return Object.getOwnPropertySymbols?r.concat(Object.getOwnPropertySymbols(e)):r},f.prototype.listeners=function(e){var t=i?i+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var n=0,o=r.length,a=new Array(o);n0&&a.length>i&&!a.warned){a.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=e,u.type=t,u.count=a.length,s=u,console&&console.warn&&console.warn(s)}return e}function l(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=l.bind(n);return i.listener=r,n.wrapFn=i,i}function b(e,t,r){var n=e._events;if(void 0===n)return[];var i=n[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r0&&(o=t[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var u=i[e];if(void 0===u)return!1;if("function"==typeof u)a(u,this,t);else{var f=u.length,c=y(u,f);for(r=0;r=0;o--)if(r[o]===t||r[o].listener===t){a=r[o].listener,i=o;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},u.prototype.listeners=function(e){return b(this,e,!0)},u.prototype.rawListeners=function(e){return b(this,e,!1)},u.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):m.call(e,t)},u.prototype.listenerCount=m,u.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]}},function(e,t,r){"use strict";(function(t,n,i){var o=r(46);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,r){var n=e.entry;e.entry=null;for(;n;){var i=n.callback;t.pendingcb--,i(r),n=n.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=v;var s,u=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?n:o.nextTick;v.WritableState=y;var f=r(35);f.inherits=r(3);var c={deprecate:r(209)},h=r(99),d=r(4).Buffer,l=i.Uint8Array||function(){};var p,b=r(100);function m(){}function y(e,t){s=s||r(27),e=e||{};var n=t instanceof s;this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var i=e.highWaterMark,f=e.writableHighWaterMark,c=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(f||0===f)?f:c,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var h=!1===e.decodeStrings;this.decodeStrings=!h,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var r=e._writableState,n=r.sync,i=r.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function(e,t,r,n,i){--t.pendingcb,r?(o.nextTick(i,n),o.nextTick(S,e,t),e._writableState.errorEmitted=!0,e.emit("error",n)):(i(n),e._writableState.errorEmitted=!0,e.emit("error",n),S(e,t))}(e,r,n,t,i);else{var a=k(r);a||r.corked||r.bufferProcessing||!r.bufferedRequest||_(e,r),n?u(w,e,r,a,i):w(e,r,a,i)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function v(e){if(s=s||r(27),!(p.call(v,this)||this instanceof s))return new v(e);this._writableState=new y(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),h.call(this)}function g(e,t,r,n,i,o,a){t.writelen=n,t.writecb=a,t.writing=!0,t.sync=!0,r?e._writev(i,t.onwrite):e._write(i,o,t.onwrite),t.sync=!1}function w(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,n(),S(e,t)}function _(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,i=new Array(n),o=t.corkedRequestsFree;o.entry=r;for(var s=0,u=!0;r;)i[s]=r,r.isBuf||(u=!1),r=r.next,s+=1;i.allBuffers=u,g(e,t,!0,t.length,i,"",o.finish),t.pendingcb++,t.lastBufferedRequest=null,o.next?(t.corkedRequestsFree=o.next,o.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;r;){var f=r.chunk,c=r.encoding,h=r.callback;if(g(e,t,!1,t.objectMode?1:f.length,f,c,h),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function k(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function A(e,t){e._final((function(r){t.pendingcb--,r&&e.emit("error",r),t.prefinished=!0,e.emit("prefinish"),S(e,t)}))}function S(e,t){var r=k(t);return r&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,o.nextTick(A,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),r}f.inherits(v,h),y.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(y.prototype,"buffer",{get:c.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(v,Symbol.hasInstance,{value:function(e){return!!p.call(this,e)||this===v&&(e&&e._writableState instanceof y)}})):p=function(e){return e instanceof this},v.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},v.prototype.write=function(e,t,r){var n,i=this._writableState,a=!1,s=!i.objectMode&&(n=e,d.isBuffer(n)||n instanceof l);return s&&!d.isBuffer(e)&&(e=function(e){return d.from(e)}(e)),"function"==typeof t&&(r=t,t=null),s?t="buffer":t||(t=i.defaultEncoding),"function"!=typeof r&&(r=m),i.ended?function(e,t){var r=new Error("write after end");e.emit("error",r),o.nextTick(t,r)}(this,r):(s||function(e,t,r,n){var i=!0,a=!1;return null===r?a=new TypeError("May not write null values to stream"):"string"==typeof r||void 0===r||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),o.nextTick(n,a),i=!1),i}(this,i,e,r))&&(i.pendingcb++,a=function(e,t,r,n,i,o){if(!r){var a=function(e,t,r){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=d.from(t,r));return t}(t,n,i);n!==a&&(r=!0,i="buffer",n=a)}var s=t.objectMode?1:n.length;t.length+=s;var u=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(v.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),v.prototype._write=function(e,t,r){r(new Error("_write() is not implemented"))},v.prototype._writev=null,v.prototype.end=function(e,t,r){var n=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||function(e,t,r){t.ending=!0,S(e,t),r&&(t.finished?o.nextTick(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,n,r)},Object.defineProperty(v.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),v.prototype.destroy=b.destroy,v.prototype._undestroy=b.undestroy,v.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,r(11),r(101).setImmediate,r(8))},function(e,t,r){"use strict";var n=r(210).Buffer,i=n.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(n.isEncoding===i||!i(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=u,this.end=f,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=c,this.end=h,t=3;break;default:return this.write=d,void(this.end=l)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function u(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function f(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function c(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function h(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function d(e){return e.toString(this.encoding)}function l(e){return e&&e.length?this.write(e):""}t.StringDecoder=o,o.prototype.write=function(e){if(0===e.length)return"";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return i>0&&(e.lastNeed=i-1),i;if(--n=0)return i>0&&(e.lastNeed=i-2),i;if(--n=0)return i>0&&(2===i?i=0:e.lastNeed=i-3),i;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString("utf8",t,n)},o.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(){this.listeners={}}return e.prototype.addEventListener=function(e,t){e=e.toLowerCase(),this.listeners[e]=this.listeners[e]||[],this.listeners[e].push(t.handleEvent||t)},e.prototype.removeEventListener=function(e,t){if(e=e.toLowerCase(),this.listeners[e]){var r=this.listeners[e].indexOf(t.handleEvent||t);r<0||this.listeners[e].splice(r,1)}},e.prototype.dispatchEvent=function(e){var t=e.type.toLowerCase();if(e.target=this,this.listeners[t])for(var r=0,n=this.listeners[t];r>1]>>4>=8&&(t[s]=t[s].toUpperCase()),(15&o[s>>1])>=8&&(t[s+1]=t[s+1].toUpperCase());return"0x"+t.join("")}for(var d={},l=0;l<10;l++)d[String(l)]=String(l);for(var p=0;p<26;p++)d[String.fromCharCode(65+p)]=String(10+p);var b,m=Math.floor((b=9007199254740991,Math.log10?Math.log10(b):Math.log(b)/Math.LN10));function y(e){for(var t=(e=(e=e.toUpperCase()).substring(4)+e.substring(0,2)+"00").split("").map((function(e){return d[e]})).join("");t.length>=m;){var r=t.substring(0,m);t=parseInt(r,10)%97+t.substring(r.length)}for(var n=String(98-parseInt(t,10)%97);n.length<2;)n="0"+n;return n}function v(e){var t=null;if("string"!=typeof e&&c.throwArgumentError("invalid address","address",e),e.match(/^(0x)?[0-9a-fA-F]{40}$/))"0x"!==e.substring(0,2)&&(e="0x"+e),t=h(e),e.match(/([A-F].*[a-f])|([a-f].*[A-F])/)&&t!==e&&c.throwArgumentError("bad address checksum","address",e);else if(e.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)){for(e.substring(2,4)!==y(e)&&c.throwArgumentError("bad icap checksum","address",e),t=new n.BN(e.substring(4),36).toString(16);t.length<40;)t="0"+t;t=h("0x"+t)}else c.throwArgumentError("invalid address","address",e);return t}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MaxUint256=t.WeiPerEther=t.Two=t.One=t.Zero=t.NegativeOne=t.EtherSymbol=t.HashZero=t.AddressZero=void 0;var n=r(29);t.AddressZero="0x0000000000000000000000000000000000000000";t.HashZero="0x0000000000000000000000000000000000000000000000000000000000000000";t.EtherSymbol="Ξ";var i=n.BigNumber.from(-1);t.NegativeOne=i;var o=n.BigNumber.from(0);t.Zero=o;var a=n.BigNumber.from(1);t.One=a;var s=n.BigNumber.from(2);t.Two=s;var u=n.BigNumber.from("1000000000000000000");t.WeiPerEther=u;var f=n.BigNumber.from("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");t.MaxUint256=f},function(e,t,r){"use strict";var n=t;function i(e){return 1===e.length?"0"+e:e}function o(e){for(var t="",r=0;r>8,a=255&i;o?r.push(o,a):r.push(a)}return r},n.zero2=i,n.toHex=o,n.encode=function(e,t){return"hex"===t?o(e):e}},function(e,t,r){"use strict";var n,i=t,o=r(36),a=r(108),s=r(20).assert;function u(e){"short"===e.type?this.curve=new a.short(e):"edwards"===e.type?this.curve=new a.edwards(e):this.curve=new a.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,s(this.g.validate(),"Invalid curve"),s(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function f(e,t){Object.defineProperty(i,e,{configurable:!0,enumerable:!0,get:function(){var r=new u(t);return Object.defineProperty(i,e,{configurable:!0,enumerable:!0,value:r}),r}})}i.PresetCurve=u,f("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:o.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),f("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:o.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),f("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:o.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),f("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:o.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),f("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:o.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),f("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["9"]}),f("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{n=r(246)}catch(e){n=void 0}f("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:o.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",n]})},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.FunctionFragment=t.ConstructorFragment=t.EventFragment=t.Fragment=t.ParamType=t.FormatTypes=void 0;var i=n(r(18)),o=n(r(19)),a=n(r(15)),s=n(r(6)),u=n(r(7)),f=r(29),c=r(31),h=r(14),d=r(38);function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,a.default)(e);if(t){var i=(0,a.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,o.default)(this,r)}}var p=new h.Logger(d.version),b={},m={calldata:!0,memory:!0,storage:!0},y={calldata:!0,memory:!0};function v(e,t){if("bytes"===e||"string"===e){if(m[t])return!0}else if("address"===e){if("payable"===t)return!0}else if((e.indexOf("[")>=0||"tuple"===e)&&y[t])return!0;return(m[t]||"payable"===t)&&p.throwArgumentError("invalid modifier","name",t),!1}function g(e,t){for(var r in t)(0,c.defineReadOnly)(e,r,t[r])}var w=Object.freeze({sighash:"sighash",minimal:"minimal",full:"full",json:"json"});t.FormatTypes=w;var _=new RegExp(/^(.*)\[([0-9]*)\]$/),k=function(){function e(t,r){(0,s.default)(this,e),t!==b&&p.throwError("use fromString",h.Logger.errors.UNSUPPORTED_OPERATION,{operation:"new ParamType()"}),g(this,r);var n=this.type.match(_);g(this,n?{arrayLength:parseInt(n[2]||"-1"),arrayChildren:e.fromObject({type:n[1],components:this.components}),baseType:"array"}:{arrayLength:null,arrayChildren:null,baseType:null!=this.components?"tuple":this.type}),this._isParamType=!0,Object.freeze(this)}return(0,u.default)(e,[{key:"format",value:function(e){if(e||(e=w.sighash),w[e]||p.throwArgumentError("invalid format type","format",e),e===w.json){var t={type:"tuple"===this.baseType?"tuple":this.type,name:this.name||void 0};return"boolean"==typeof this.indexed&&(t.indexed=this.indexed),this.components&&(t.components=this.components.map((function(t){return JSON.parse(t.format(e))}))),JSON.stringify(t)}var r="";return"array"===this.baseType?(r+=this.arrayChildren.format(e),r+="["+(this.arrayLength<0?"":String(this.arrayLength))+"]"):"tuple"===this.baseType?(e!==w.sighash&&(r+=this.type),r+="("+this.components.map((function(t){return t.format(e)})).join(e===w.full?", ":",")+")"):r+=this.type,e!==w.sighash&&(!0===this.indexed&&(r+=" indexed"),e===w.full&&this.name&&(r+=" "+this.name)),r}}],[{key:"from",value:function(t,r){return"string"==typeof t?e.fromString(t,r):e.fromObject(t)}},{key:"fromObject",value:function(t){return e.isParamType(t)?t:new e(b,{name:t.name||null,type:P(t.type),indexed:null==t.indexed?null:!!t.indexed,components:t.components?t.components.map(e.fromObject):null})}},{key:"fromString",value:function(t,r){return function(t){return e.fromObject({name:t.name,type:t.type,indexed:t.indexed,components:t.components})}(function(e,t){var r=e;function n(t){p.throwArgumentError("unexpected character at position ".concat(t),"param",e)}function i(e){var r={type:"",name:"",parent:e,state:{allowType:!0}};return t&&(r.indexed=!1),r}e=e.replace(/\s/g," ");for(var o={type:"",name:"",state:{allowType:!0}},a=o,s=0;s2&&p.throwArgumentError("invalid human-readable ABI signature","value",e),r[1].match(/^[0-9]+$/)||p.throwArgumentError("invalid human-readable ABI signature gas","value",e),t.gas=f.BigNumber.from(r[1]),r[0]):e}function M(e,t){t.constant=!1,t.payable=!1,t.stateMutability="nonpayable",e.split(" ").forEach((function(e){switch(e.trim()){case"constant":t.constant=!0;break;case"payable":t.payable=!0,t.stateMutability="payable";break;case"pure":t.constant=!0,t.stateMutability="pure";break;case"view":t.constant=!0,t.stateMutability="view";break;case"external":case"public":case"":break;default:console.log("unknown modifier: "+e)}}))}function I(e){var t={constant:!1,payable:!0,stateMutability:"payable"};return null!=e.stateMutability?(t.stateMutability=e.stateMutability,t.constant="view"===t.stateMutability||"pure"===t.stateMutability,null!=e.constant&&!!e.constant!==t.constant&&p.throwArgumentError("cannot have constant function with mutability "+t.stateMutability,"value",e),t.payable="payable"===t.stateMutability,null!=e.payable&&!!e.payable!==t.payable&&p.throwArgumentError("cannot have payable function with mutability "+t.stateMutability,"value",e)):null!=e.payable?(t.payable=!!e.payable,null!=e.constant||t.payable||"constructor"===e.type||p.throwArgumentError("unable to determine stateMutability","value",e),t.constant=!!e.constant,t.constant?t.stateMutability="view":t.stateMutability=t.payable?"payable":"nonpayable",t.payable&&t.constant&&p.throwArgumentError("cannot have constant payable function","value",e)):null!=e.constant?(t.constant=!!e.constant,t.payable=!t.constant,t.stateMutability=t.constant?"view":"payable"):"constructor"!==e.type&&p.throwArgumentError("unable to determine stateMutability","value",e),t}t.EventFragment=E;var O=function(e){(0,i.default)(r,e);var t=l(r);function r(){return(0,s.default)(this,r),t.apply(this,arguments)}return(0,u.default)(r,[{key:"format",value:function(e){if(e||(e=w.sighash),w[e]||p.throwArgumentError("invalid format type","format",e),e===w.json)return JSON.stringify({type:"constructor",stateMutability:"nonpayable"!==this.stateMutability?this.stateMutability:void 0,payble:this.payable,gas:this.gas?this.gas.toNumber():void 0,inputs:this.inputs.map((function(t){return JSON.parse(t.format(e))}))});e===w.sighash&&p.throwError("cannot format a constructor for sighash",h.Logger.errors.UNSUPPORTED_OPERATION,{operation:"format(sighash)"});var t="constructor("+this.inputs.map((function(t){return t.format(e)})).join(e===w.full?", ":",")+") ";return this.stateMutability&&"nonpayable"!==this.stateMutability&&(t+=this.stateMutability+" "),t.trim()}}],[{key:"from",value:function(e){return"string"==typeof e?r.fromString(e):r.fromObject(e)}},{key:"fromObject",value:function(e){if(r.isConstructorFragment(e))return e;"constructor"!==e.type&&p.throwArgumentError("invalid constructor object","value",e);var t=I(e);t.constant&&p.throwArgumentError("constructor cannot be constant","value",e);var n={name:null,type:e.type,inputs:e.inputs?e.inputs.map(k.fromObject):[],payable:t.payable,stateMutability:t.stateMutability,gas:e.gas?f.BigNumber.from(e.gas):null};return new r(b,n)}},{key:"fromString",value:function(e){var t={type:"constructor"},n=(e=x(e,t)).match(B);return n&&"constructor"===n[1].trim()||p.throwArgumentError("invalid constructor string","value",e),t.inputs=A(n[2].trim(),!1),M(n[3].trim(),t),r.fromObject(t)}},{key:"isConstructorFragment",value:function(e){return e&&e._isFragment&&"constructor"===e.type}}]),r}(S);t.ConstructorFragment=O;var C=function(e){(0,i.default)(r,e);var t=l(r);function r(){return(0,s.default)(this,r),t.apply(this,arguments)}return(0,u.default)(r,[{key:"format",value:function(e){if(e||(e=w.sighash),w[e]||p.throwArgumentError("invalid format type","format",e),e===w.json)return JSON.stringify({type:"function",name:this.name,constant:this.constant,stateMutability:"nonpayable"!==this.stateMutability?this.stateMutability:void 0,payble:this.payable,gas:this.gas?this.gas.toNumber():void 0,inputs:this.inputs.map((function(t){return JSON.parse(t.format(e))})),ouputs:this.outputs.map((function(t){return JSON.parse(t.format(e))}))});var t="";return e!==w.sighash&&(t+="function "),t+=this.name+"("+this.inputs.map((function(t){return t.format(e)})).join(e===w.full?", ":",")+") ",e!==w.sighash&&(this.stateMutability?"nonpayable"!==this.stateMutability&&(t+=this.stateMutability+" "):this.constant&&(t+="view "),this.outputs&&this.outputs.length&&(t+="returns ("+this.outputs.map((function(t){return t.format(e)})).join(", ")+") "),null!=this.gas&&(t+="@"+this.gas.toString()+" ")),t.trim()}}],[{key:"from",value:function(e){return"string"==typeof e?r.fromString(e):r.fromObject(e)}},{key:"fromObject",value:function(e){if(r.isFunctionFragment(e))return e;"function"!==e.type&&p.throwArgumentError("invalid function object","value",e);var t=I(e),n={type:e.type,name:U(e.name),constant:t.constant,inputs:e.inputs?e.inputs.map(k.fromObject):[],outputs:e.outputs?e.outputs.map(k.fromObject):[],payable:t.payable,stateMutability:t.stateMutability,gas:e.gas?f.BigNumber.from(e.gas):null};return new r(b,n)}},{key:"fromString",value:function(e){var t={type:"function"},n=(e=x(e,t)).split(" returns ");n.length>2&&p.throwArgumentError("invalid function string","value",e);var i=n[0].match(B);if(i||p.throwArgumentError("invalid function signature","value",e),t.name=i[1].trim(),t.name&&U(t.name),t.inputs=A(i[2],!1),M(i[3].trim(),t),n.length>1){var o=n[1].match(B);""==o[1].trim()&&""==o[3].trim()||p.throwArgumentError("unexpected tokens","value",e),t.outputs=A(o[2],!1)}else t.outputs=[];return r.fromObject(t)}},{key:"isFunctionFragment",value:function(e){return e&&e._isFragment&&"function"===e.type}}]),r}(O);function P(e){return e.match(/^uint($|[^1-9])/)?e="uint256"+e.substring(4):e.match(/^int($|[^1-9])/)&&(e="int256"+e.substring(3)),e}t.FunctionFragment=C;var T=new RegExp("^[A-Za-z_][A-Za-z0-9_]*$");function U(e){return e&&e.match(T)||p.throwArgumentError('invalid identifier "'.concat(e,'"'),"value",e),e}var B=new RegExp("^([^)(]*)\\((.*)\\)([^)(]*)$")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.toUtf8Bytes=d,t._toEscapedUtf8String=function(e,t){return'"'+h(e,t).map((function(e){if(e<256){switch(e){case 8:return"\\b";case 9:return"\\t";case 10:return"\\n";case 13:return"\\r";case 34:return'\\"';case 92:return"\\\\"}if(e>=32&&e<127)return String.fromCharCode(e)}return e<=65535?l(e):l(55296+((e-=65536)>>10&1023))+l(56320+(1023&e))})).join("")+'"'},t._toUtf8String=p,t.toUtf8String=function(e,t){return p(h(e,t))},t.toUtf8CodePoints=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.current;return h(d(e,t))},t.Utf8ErrorFuncs=t.Utf8ErrorReason=t.UnicodeNormalizationForm=void 0;var n,i,o=r(12),a=r(14),s=r(268),u=new a.Logger(s.version);function f(e,t,r,n,o){if(e===i.BAD_PREFIX||e===i.UNEXPECTED_CONTINUE){for(var a=0,s=t+1;s>6==2;s++)a++;return a}return e===i.OVERRUN?r.length-t-1:0}t.UnicodeNormalizationForm=n,function(e){e.current="",e.NFC="NFC",e.NFD="NFD",e.NFKC="NFKC",e.NFKD="NFKD"}(n||(t.UnicodeNormalizationForm=n={})),t.Utf8ErrorReason=i,function(e){e.UNEXPECTED_CONTINUE="unexpected continuation byte",e.BAD_PREFIX="bad codepoint prefix",e.OVERRUN="string overrun",e.MISSING_CONTINUE="missing continuation byte",e.OUT_OF_RANGE="out of UTF-8 range",e.UTF16_SURROGATE="UTF-16 surrogate",e.OVERLONG="overlong representation"}(i||(t.Utf8ErrorReason=i={}));var c=Object.freeze({error:function(e,t,r,n,i){return u.throwArgumentError("invalid codepoint at offset ".concat(t,"; ").concat(e),"bytes",r)},ignore:f,replace:function(e,t,r,n,o){return e===i.OVERLONG?(n.push(o),0):(n.push(65533),f(e,t,r))}});function h(e,t){null==t&&(t=c.error),e=(0,o.arrayify)(e);for(var r=[],n=0;n>7!=0){var s=null,u=null;if(192==(224&a))s=1,u=127;else if(224==(240&a))s=2,u=2047;else{if(240!=(248&a)){n+=t(128==(192&a)?i.UNEXPECTED_CONTINUE:i.BAD_PREFIX,n-1,e,r);continue}s=3,u=65535}if(n-1+s>=e.length)n+=t(i.OVERRUN,n-1,e,r);else{for(var f=a&(1<<8-s-1)-1,h=0;h1114111?n+=t(i.OUT_OF_RANGE,n-1-s,e,r,f):f>=55296&&f<=57343?n+=t(i.UTF16_SURROGATE,n-1-s,e,r,f):f<=u?n+=t(i.OVERLONG,n-1-s,e,r,f):r.push(f))}}else r.push(a)}return r}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.current;t!=n.current&&(u.checkNormalize(),e=e.normalize(t));for(var r=[],i=0;i>6|192),r.push(63&a|128);else if(55296==(64512&a)){i++;var s=e.charCodeAt(i);if(i>=e.length||56320!=(64512&s))throw new Error("invalid utf-8 string");var f=65536+((1023&a)<<10)+(1023&s);r.push(f>>18|240),r.push(f>>12&63|128),r.push(f>>6&63|128),r.push(63&f|128)}else r.push(a>>12|224),r.push(a>>6&63|128),r.push(63&a|128)}return(0,o.arrayify)(r)}function l(e){var t="0000"+e.toString(16);return"\\u"+t.substring(t.length-4)}function p(e){return e.map((function(e){return e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode(55296+(e>>10&1023),56320+(1023&e)))})).join("")}t.Utf8ErrorFuncs=c},function(e,t,r){"use strict";var n=r(2).Buffer,i=r(294),o=r(39),a=r(300);function s(e){t.decode(e)}t.names=a.names,t.codes=a.codes,t.defaultLengths=a.defaultLengths,t.toHexString=function(e){if(!n.isBuffer(e))throw new Error("must be passed a buffer");return e.toString("hex")},t.fromHexString=function(e){return n.from(e,"hex")},t.toB58String=function(e){if(!n.isBuffer(e))throw new Error("must be passed a buffer");return i.encode("base58btc",e).toString().slice(1)},t.fromB58String=function(e){var t=e;return n.isBuffer(e)&&(t=e.toString()),i.decode("z"+t)},t.decode=function(e){if(!n.isBuffer(e))throw new Error("multihash must be a Buffer");if(e.length<2)throw new Error("multihash too short. must be > 2 bytes.");var r=o.decode(e);if(!t.isValidCode(r))throw new Error("multihash unknown function code: 0x".concat(r.toString(16)));e=e.slice(o.decode.bytes);var i=o.decode(e);if(i<0)throw new Error("multihash invalid length: ".concat(i));if((e=e.slice(o.decode.bytes)).length!==i)throw new Error("multihash length inconsistent: 0x".concat(e.toString("hex")));return{code:r,name:a.codes[r],length:i,digest:e}},t.encode=function(e,r,i){if(!e||void 0===r)throw new Error("multihash encode requires at least two args: digest, code");var a=t.coerceCode(r);if(!n.isBuffer(e))throw new Error("digest should be a Buffer");if(null==i&&(i=e.length),i&&e.length!==i)throw new Error("digest length should be equal to specified length.");return n.concat([n.from(o.encode(a)),n.from(o.encode(i)),e])},t.coerceCode=function(e){var r=e;if("string"==typeof e){if(void 0===a.names[e])throw new Error("Unrecognized hash function named: ".concat(e));r=a.names[e]}if("number"!=typeof r)throw new Error("Hash function code should be a number. Got: ".concat(r));if(void 0===a.codes[r]&&!t.isAppCode(r))throw new Error("Unrecognized function code: ".concat(r));return r},t.isAppCode=function(e){return e>0&&e<16},t.isValidCode=function(e){return!!t.isAppCode(e)||!!a.codes[e]},t.validate=s,t.prefix=function(e){return s(e),e.slice(0,2)}},function(e,t,r){"use strict";r(324);var n=function(e,t){return parseInt(e.slice(2*t+2,2*t+4),16)},i=function(e){return(e.length-2)/2},o=function(e){for(var t=[],r=2,n=e.length;r>6|192);else{if(i>55295&&i<56320){if(++n==e.length)return null;var o=e.charCodeAt(n);if(o<56320||o>57343)return null;r+=t((i=65536+((1023&i)<<10)+(1023&o))>>18|240),r+=t(i>>12&63|128)}else r+=t(i>>12|224);r+=t(i>>6&63|128)}r+=t(63&i|128)}}return r},toString:function(e){for(var t="",r=0,o=i(e);r127){if(a>191&&a<224){if(r>=o)return null;a=(31&a)<<6|63&n(e,r)}else if(a>223&&a<240){if(r+1>=o)return null;a=(15&a)<<12|(63&n(e,r))<<6|63&n(e,++r)}else{if(!(a>239&&a<248))return null;if(r+2>=o)return null;a=(7&a)<<18|(63&n(e,r))<<12|(63&n(e,++r))<<6|63&n(e,++r)}++r}if(a<=65535)t+=String.fromCharCode(a);else{if(!(a<=1114111))return null;a-=65536,t+=String.fromCharCode(a>>10|55296),t+=String.fromCharCode(1023&a|56320)}}return t},fromNumber:function(e){var t=e.toString(16);return t.length%2==0?"0x"+t:"0x0"+t},toNumber:function(e){return parseInt(e.slice(2),16)},fromNat:function(e){return"0x0"===e?"0x":e.length%2==0?e:"0x0"+e.slice(2)},toNat:function(e){return"0"===e[2]?"0x"+e.slice(3):e},fromArray:a,toArray:o,fromUint8Array:function(e){return a([].slice.call(e,0))},toUint8Array:function(e){return new Uint8Array(o(e))}}},function(e,t,r){"use strict";var n=r(3),i=r(132),o=r(4).Buffer,a=new Array(16);function s(){i.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function u(e,t){return e<>>32-t}function f(e,t,r,n,i,o,a){return u(e+(t&r|~t&n)+i+o|0,a)+t|0}function c(e,t,r,n,i,o,a){return u(e+(t&n|r&~n)+i+o|0,a)+t|0}function h(e,t,r,n,i,o,a){return u(e+(t^r^n)+i+o|0,a)+t|0}function d(e,t,r,n,i,o,a){return u(e+(r^(t|~n))+i+o|0,a)+t|0}n(s,i),s.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);var r=this._a,n=this._b,i=this._c,o=this._d;r=f(r,n,i,o,e[0],3614090360,7),o=f(o,r,n,i,e[1],3905402710,12),i=f(i,o,r,n,e[2],606105819,17),n=f(n,i,o,r,e[3],3250441966,22),r=f(r,n,i,o,e[4],4118548399,7),o=f(o,r,n,i,e[5],1200080426,12),i=f(i,o,r,n,e[6],2821735955,17),n=f(n,i,o,r,e[7],4249261313,22),r=f(r,n,i,o,e[8],1770035416,7),o=f(o,r,n,i,e[9],2336552879,12),i=f(i,o,r,n,e[10],4294925233,17),n=f(n,i,o,r,e[11],2304563134,22),r=f(r,n,i,o,e[12],1804603682,7),o=f(o,r,n,i,e[13],4254626195,12),i=f(i,o,r,n,e[14],2792965006,17),r=c(r,n=f(n,i,o,r,e[15],1236535329,22),i,o,e[1],4129170786,5),o=c(o,r,n,i,e[6],3225465664,9),i=c(i,o,r,n,e[11],643717713,14),n=c(n,i,o,r,e[0],3921069994,20),r=c(r,n,i,o,e[5],3593408605,5),o=c(o,r,n,i,e[10],38016083,9),i=c(i,o,r,n,e[15],3634488961,14),n=c(n,i,o,r,e[4],3889429448,20),r=c(r,n,i,o,e[9],568446438,5),o=c(o,r,n,i,e[14],3275163606,9),i=c(i,o,r,n,e[3],4107603335,14),n=c(n,i,o,r,e[8],1163531501,20),r=c(r,n,i,o,e[13],2850285829,5),o=c(o,r,n,i,e[2],4243563512,9),i=c(i,o,r,n,e[7],1735328473,14),r=h(r,n=c(n,i,o,r,e[12],2368359562,20),i,o,e[5],4294588738,4),o=h(o,r,n,i,e[8],2272392833,11),i=h(i,o,r,n,e[11],1839030562,16),n=h(n,i,o,r,e[14],4259657740,23),r=h(r,n,i,o,e[1],2763975236,4),o=h(o,r,n,i,e[4],1272893353,11),i=h(i,o,r,n,e[7],4139469664,16),n=h(n,i,o,r,e[10],3200236656,23),r=h(r,n,i,o,e[13],681279174,4),o=h(o,r,n,i,e[0],3936430074,11),i=h(i,o,r,n,e[3],3572445317,16),n=h(n,i,o,r,e[6],76029189,23),r=h(r,n,i,o,e[9],3654602809,4),o=h(o,r,n,i,e[12],3873151461,11),i=h(i,o,r,n,e[15],530742520,16),r=d(r,n=h(n,i,o,r,e[2],3299628645,23),i,o,e[0],4096336452,6),o=d(o,r,n,i,e[7],1126891415,10),i=d(i,o,r,n,e[14],2878612391,15),n=d(n,i,o,r,e[5],4237533241,21),r=d(r,n,i,o,e[12],1700485571,6),o=d(o,r,n,i,e[3],2399980690,10),i=d(i,o,r,n,e[10],4293915773,15),n=d(n,i,o,r,e[1],2240044497,21),r=d(r,n,i,o,e[8],1873313359,6),o=d(o,r,n,i,e[15],4264355552,10),i=d(i,o,r,n,e[6],2734768916,15),n=d(n,i,o,r,e[13],1309151649,21),r=d(r,n,i,o,e[4],4149444226,6),o=d(o,r,n,i,e[11],3174756917,10),i=d(i,o,r,n,e[2],718787259,15),n=d(n,i,o,r,e[9],3951481745,21),this._a=this._a+r|0,this._b=this._b+n|0,this._c=this._c+i|0,this._d=this._d+o|0},s.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=o.allocUnsafe(16);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e},e.exports=s},function(e,t,r){"use strict";var n=r(2).Buffer,i=r(3),o=r(132),a=new Array(16),s=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],u=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],f=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],c=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],h=[0,1518500249,1859775393,2400959708,2840853838],d=[1352829926,1548603684,1836072691,2053994217,0];function l(){o.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(e,t){return e<>>32-t}function b(e,t,r,n,i,o,a,s){return p(e+(t^r^n)+o+a|0,s)+i|0}function m(e,t,r,n,i,o,a,s){return p(e+(t&r|~t&n)+o+a|0,s)+i|0}function y(e,t,r,n,i,o,a,s){return p(e+((t|~r)^n)+o+a|0,s)+i|0}function v(e,t,r,n,i,o,a,s){return p(e+(t&n|r&~n)+o+a|0,s)+i|0}function g(e,t,r,n,i,o,a,s){return p(e+(t^(r|~n))+o+a|0,s)+i|0}i(l,o),l.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);for(var r=0|this._a,n=0|this._b,i=0|this._c,o=0|this._d,l=0|this._e,w=0|this._a,_=0|this._b,k=0|this._c,A=0|this._d,S=0|this._e,E=0;E<80;E+=1){var x,M;E<16?(x=b(r,n,i,o,l,e[s[E]],h[0],f[E]),M=g(w,_,k,A,S,e[u[E]],d[0],c[E])):E<32?(x=m(r,n,i,o,l,e[s[E]],h[1],f[E]),M=v(w,_,k,A,S,e[u[E]],d[1],c[E])):E<48?(x=y(r,n,i,o,l,e[s[E]],h[2],f[E]),M=y(w,_,k,A,S,e[u[E]],d[2],c[E])):E<64?(x=v(r,n,i,o,l,e[s[E]],h[3],f[E]),M=m(w,_,k,A,S,e[u[E]],d[3],c[E])):(x=g(r,n,i,o,l,e[s[E]],h[4],f[E]),M=b(w,_,k,A,S,e[u[E]],d[4],c[E])),r=l,l=o,o=p(i,10),i=n,n=x,w=S,S=A,A=p(k,10),k=_,_=M}var I=this._b+i+A|0;this._b=this._c+o+S|0,this._c=this._d+l+w|0,this._d=this._e+r+_|0,this._e=this._a+n+k|0,this._a=I},l.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=n.alloc?n.alloc(20):new n(20);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e.writeInt32LE(this._e,16),e},e.exports=l},function(e,t,r){"use strict";var n=e.exports=function(e){e=e.toLowerCase();var t=n[e];if(!t)throw new Error(e+" is not supported (we accept pull requests)");return new t};n.sha=r(329),n.sha1=r(330),n.sha224=r(331),n.sha256=r(133),n.sha384=r(332),n.sha512=r(134)},function(e,t,r){"use strict";t.utils=r(338),t.Cipher=r(339),t.DES=r(340),t.CBC=r(341),t.EDE=r(342)},function(e,t,r){"use strict";var n=r(343),i=r(351),o=r(144);t.createCipher=t.Cipher=n.createCipher,t.createCipheriv=t.Cipheriv=n.createCipheriv,t.createDecipher=t.Decipher=i.createDecipher,t.createDecipheriv=t.Decipheriv=i.createDecipheriv,t.listCiphers=t.getCiphers=function(){return Object.keys(o)}},function(e,t,r){"use strict";var n={ECB:r(344),CBC:r(345),CFB:r(346),CFB8:r(347),CFB1:r(348),OFB:r(349),CTR:r(142),GCM:r(142)},i=r(144);for(var o in i)i[o].module=n[i[o].mode];e.exports=i},function(e,t,r){"use strict";(function(t){var n=r(5),i=r(26);function o(e,r){var i=function(e){var t=a(e);return{blinder:t.toRed(n.mont(e.modulus)).redPow(new n(e.publicExponent)).fromRed(),unblinder:t.invm(e.modulus)}}(r),o=r.modulus.byteLength(),s=(n.mont(r.modulus),new n(e).mul(i.blinder).umod(r.modulus)),u=s.toRed(n.mont(r.prime1)),f=s.toRed(n.mont(r.prime2)),c=r.coefficient,h=r.prime1,d=r.prime2,l=u.redPow(r.exponent1),p=f.redPow(r.exponent2);l=l.fromRed(),p=p.fromRed();var b=l.isub(p).imul(c).umod(h);return b.imul(d),p.iadd(b),new t(p.imul(i.unblinder).umod(r.modulus).toArray(!1,o))}function a(e){for(var t=e.modulus.byteLength(),r=new n(i(t));r.cmp(e.modulus)>=0||!r.umod(e.prime1)||!r.umod(e.prime2);)r=new n(i(t));return r}e.exports=o,o.getr=a}).call(this,r(2).Buffer)},function(e,t,r){"use strict"; -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/var n=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},r=0;r<10;r++)t["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach((function(e){n[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var r,s,u=a(e),f=1;f=i)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}})),s=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),b(r)?n.showHidden=r:r&&t._extend(n,r),g(n.showHidden)&&(n.showHidden=!1),g(n.depth)&&(n.depth=2),g(n.colors)&&(n.colors=!1),g(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=f),h(n,e,n.depth)}function f(e,t){var r=u.styles[t];return r?"["+u.colors[r][0]+"m"+e+"["+u.colors[r][1]+"m":e}function c(e,t){return e}function h(e,r,n){if(e.customInspect&&r&&S(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,e);return v(i)||(i=h(e,i,n)),i}var o=function(e,t){if(g(t))return e.stylize("undefined","undefined");if(v(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}if(y(t))return e.stylize(""+t,"number");if(b(t))return e.stylize(""+t,"boolean");if(m(t))return e.stylize("null","null")}(e,r);if(o)return o;var a=Object.keys(r),s=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(r)),A(r)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return d(r);if(0===a.length){if(S(r)){var u=r.name?": "+r.name:"";return e.stylize("[Function"+u+"]","special")}if(w(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(k(r))return e.stylize(Date.prototype.toString.call(r),"date");if(A(r))return d(r)}var f,c="",_=!1,E=["{","}"];(p(r)&&(_=!0,E=["[","]"]),S(r))&&(c=" [Function"+(r.name?": "+r.name:"")+"]");return w(r)&&(c=" "+RegExp.prototype.toString.call(r)),k(r)&&(c=" "+Date.prototype.toUTCString.call(r)),A(r)&&(c=" "+d(r)),0!==a.length||_&&0!=r.length?n<0?w(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special"):(e.seen.push(r),f=_?function(e,t,r,n,i){for(var o=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1];return r[0]+t+" "+e.join(", ")+" "+r[1]}(f,c,E)):E[0]+c+E[1]}function d(e){return"["+Error.prototype.toString.call(e)+"]"}function l(e,t,r,n,i,o){var a,s,u;if((u=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?s=u.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):u.set&&(s=e.stylize("[Setter]","special")),O(n,i)||(a="["+i+"]"),s||(e.seen.indexOf(u.value)<0?(s=m(r)?h(e,u.value,null):h(e,u.value,r-1)).indexOf("\n")>-1&&(s=o?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),g(a)){if(o&&i.match(/^\d+$/))return s;(a=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function p(e){return Array.isArray(e)}function b(e){return"boolean"==typeof e}function m(e){return null===e}function y(e){return"number"==typeof e}function v(e){return"string"==typeof e}function g(e){return void 0===e}function w(e){return _(e)&&"[object RegExp]"===E(e)}function _(e){return"object"===(0,n.default)(e)&&null!==e}function k(e){return _(e)&&"[object Date]"===E(e)}function A(e){return _(e)&&("[object Error]"===E(e)||e instanceof Error)}function S(e){return"function"==typeof e}function E(e){return Object.prototype.toString.call(e)}function x(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(r){if(g(a)&&(a=e.env.NODE_DEBUG||""),r=r.toUpperCase(),!s[r])if(new RegExp("\\b"+r+"\\b","i").test(a)){var n=e.pid;s[r]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",r,n,e)}}else s[r]=function(){};return s[r]},t.inspect=u,u.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},u.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=p,t.isBoolean=b,t.isNull=m,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=v,t.isSymbol=function(e){return"symbol"===(0,n.default)(e)},t.isUndefined=g,t.isRegExp=w,t.isObject=_,t.isDate=k,t.isError=A,t.isFunction=S,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"===(0,n.default)(e)||void 0===e},t.isBuffer=r(174);var M=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function I(){var e=new Date,t=[x(e.getHours()),x(e.getMinutes()),x(e.getSeconds())].join(":");return[e.getDate(),M[e.getMonth()],t].join(" ")}function O(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",I(),t.format.apply(t,arguments))},t.inherits=r(3),t._extend=function(e,t){if(!t||!_(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e};var C="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function P(e,t){if(!e){var r=new Error("Promise was rejected with a falsy value");r.reason=e,e=r}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(C&&e[C]){var t;if("function"!=typeof(t=e[C]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,C,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,r,n=new Promise((function(e,n){t=e,r=n})),i=[],o=0;o=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function f(e,t,r,n){for(var i=0,o=Math.min(e.length,r),a=t;a=49?s-49+10:s>=17?s-17+10:s}return i}a.isBN=function(e){return e instanceof a||null!==e&&"object"===(0,t.default)(e)&&e.constructor.wordSize===a.wordSize&&Array.isArray(e.words)},a.max=function(e,t){return e.cmp(t)>0?e:t},a.min=function(e,t){return e.cmp(t)<0?e:t},a.prototype._init=function(e,r,n){if("number"==typeof e)return this._initNumber(e,r,n);if("object"===(0,t.default)(e))return this._initArray(e,r,n);"hex"===r&&(r=16),i(r===(0|r)&&r>=2&&r<=36);var o=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&o++,16===r?this._parseHex(e,o):this._parseBase(e,r,o),"-"===e[0]&&(this.negative=1),this.strip(),"le"===n&&this._initArray(this.toArray(),r,n)},a.prototype._initNumber=function(e,t,r){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),t,r)},a.prototype._initArray=function(e,t,r){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var n=0;n=0;n-=3)a=e[n]|e[n-1]<<8|e[n-2]<<16,this.words[o]|=a<>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);else if("le"===r)for(n=0,o=0;n>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);return this.strip()},a.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r=t;r-=6)i=u(e,r,r+6),this.words[n]|=i<>>26-o&4194303,(o+=24)>=26&&(o-=26,n++);r+6!==t&&(i=u(e,t,r+6),this.words[n]|=i<>>26-o&4194303),this.strip()},a.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=t)n++;n--,i=i/t|0;for(var o=e.length-r,a=o%n,s=Math.min(o,o-a)+r,u=0,c=r;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},a.prototype.inspect=function(){return(this.red?""};var c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],h=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],d=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function l(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var i=0|e.words[0],o=0|t.words[0],a=i*o,s=67108863&a,u=a/67108864|0;r.words[0]=s;for(var f=1;f>>26,h=67108863&u,d=Math.min(f,t.length-1),l=Math.max(0,f-e.length+1);l<=d;l++){var p=f-l|0;c+=(a=(i=0|e.words[p])*(o=0|t.words[l])+h)/67108864|0,h=67108863&a}r.words[f]=0|h,u=0|c}return 0!==u?r.words[f]=0|u:r.length--,r.strip()}a.prototype.toString=function(e,t){var r;if(t=0|t||1,16===(e=e||10)||"hex"===e){r="";for(var n=0,o=0,a=0;a>>24-n&16777215)||a!==this.length-1?c[6-u.length]+u+r:u+r,(n+=2)>=26&&(n-=26,a--)}for(0!==o&&(r=o.toString(16)+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(e===(0|e)&&e>=2&&e<=36){var f=h[e],l=d[e];r="";var p=this.clone();for(p.negative=0;!p.isZero();){var b=p.modn(l).toString(e);r=(p=p.idivn(l)).isZero()?b+r:c[f-b.length]+b+r}for(this.isZero()&&(r="0"+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}i(!1,"Base should be between 2 and 36")},a.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},a.prototype.toJSON=function(){return this.toString(16)},a.prototype.toBuffer=function(e,t){return i(void 0!==s),this.toArrayLike(s,e,t)},a.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},a.prototype.toArrayLike=function(e,t,r){var n=this.byteLength(),o=r||Math.max(1,n);i(n<=o,"byte array longer than desired length"),i(o>0,"Requested array length <= 0"),this.strip();var a,s,u="le"===t,f=new e(o),c=this.clone();if(u){for(s=0;!c.isZero();s++)a=c.andln(255),c.iushrn(8),f[s]=a;for(;s=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},a.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},a.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},a.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},a.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},a.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},a.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},a.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},a.prototype.inotn=function(e){i("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var n=0;n0&&(this.words[n]=~this.words[n]&67108863>>26-r),this.strip()},a.prototype.notn=function(e){return this.clone().inotn(e)},a.prototype.setn=function(e,t){i("number"==typeof e&&e>=0);var r=e/26|0,n=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<e.length?(r=this,n=e):(r=e,n=this);for(var i=0,o=0;o>>26;for(;0!==i&&o>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;oe.length?this.clone().iadd(e):e.clone().iadd(this)},a.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,n,i=this.cmp(e);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=e):(r=e,n=this);for(var o=0,a=0;a>26,this.words[a]=67108863&t;for(;0!==o&&a>26,this.words[a]=67108863&t;if(0===o&&a>>13,l=0|a[1],p=8191&l,b=l>>>13,m=0|a[2],y=8191&m,v=m>>>13,g=0|a[3],w=8191&g,_=g>>>13,k=0|a[4],A=8191&k,S=k>>>13,E=0|a[5],x=8191&E,M=E>>>13,I=0|a[6],O=8191&I,C=I>>>13,P=0|a[7],T=8191&P,U=P>>>13,B=0|a[8],R=8191&B,N=B>>>13,j=0|a[9],L=8191&j,F=j>>>13,D=0|s[0],q=8191&D,z=D>>>13,H=0|s[1],K=8191&H,V=H>>>13,G=0|s[2],W=8191&G,Y=G>>>13,$=0|s[3],J=8191&$,Z=$>>>13,X=0|s[4],Q=8191&X,ee=X>>>13,te=0|s[5],re=8191&te,ne=te>>>13,ie=0|s[6],oe=8191&ie,ae=ie>>>13,se=0|s[7],ue=8191&se,fe=se>>>13,ce=0|s[8],he=8191&ce,de=ce>>>13,le=0|s[9],pe=8191&le,be=le>>>13;r.negative=e.negative^t.negative,r.length=19;var me=(f+(n=Math.imul(h,q))|0)+((8191&(i=(i=Math.imul(h,z))+Math.imul(d,q)|0))<<13)|0;f=((o=Math.imul(d,z))+(i>>>13)|0)+(me>>>26)|0,me&=67108863,n=Math.imul(p,q),i=(i=Math.imul(p,z))+Math.imul(b,q)|0,o=Math.imul(b,z);var ye=(f+(n=n+Math.imul(h,K)|0)|0)+((8191&(i=(i=i+Math.imul(h,V)|0)+Math.imul(d,K)|0))<<13)|0;f=((o=o+Math.imul(d,V)|0)+(i>>>13)|0)+(ye>>>26)|0,ye&=67108863,n=Math.imul(y,q),i=(i=Math.imul(y,z))+Math.imul(v,q)|0,o=Math.imul(v,z),n=n+Math.imul(p,K)|0,i=(i=i+Math.imul(p,V)|0)+Math.imul(b,K)|0,o=o+Math.imul(b,V)|0;var ve=(f+(n=n+Math.imul(h,W)|0)|0)+((8191&(i=(i=i+Math.imul(h,Y)|0)+Math.imul(d,W)|0))<<13)|0;f=((o=o+Math.imul(d,Y)|0)+(i>>>13)|0)+(ve>>>26)|0,ve&=67108863,n=Math.imul(w,q),i=(i=Math.imul(w,z))+Math.imul(_,q)|0,o=Math.imul(_,z),n=n+Math.imul(y,K)|0,i=(i=i+Math.imul(y,V)|0)+Math.imul(v,K)|0,o=o+Math.imul(v,V)|0,n=n+Math.imul(p,W)|0,i=(i=i+Math.imul(p,Y)|0)+Math.imul(b,W)|0,o=o+Math.imul(b,Y)|0;var ge=(f+(n=n+Math.imul(h,J)|0)|0)+((8191&(i=(i=i+Math.imul(h,Z)|0)+Math.imul(d,J)|0))<<13)|0;f=((o=o+Math.imul(d,Z)|0)+(i>>>13)|0)+(ge>>>26)|0,ge&=67108863,n=Math.imul(A,q),i=(i=Math.imul(A,z))+Math.imul(S,q)|0,o=Math.imul(S,z),n=n+Math.imul(w,K)|0,i=(i=i+Math.imul(w,V)|0)+Math.imul(_,K)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(y,W)|0,i=(i=i+Math.imul(y,Y)|0)+Math.imul(v,W)|0,o=o+Math.imul(v,Y)|0,n=n+Math.imul(p,J)|0,i=(i=i+Math.imul(p,Z)|0)+Math.imul(b,J)|0,o=o+Math.imul(b,Z)|0;var we=(f+(n=n+Math.imul(h,Q)|0)|0)+((8191&(i=(i=i+Math.imul(h,ee)|0)+Math.imul(d,Q)|0))<<13)|0;f=((o=o+Math.imul(d,ee)|0)+(i>>>13)|0)+(we>>>26)|0,we&=67108863,n=Math.imul(x,q),i=(i=Math.imul(x,z))+Math.imul(M,q)|0,o=Math.imul(M,z),n=n+Math.imul(A,K)|0,i=(i=i+Math.imul(A,V)|0)+Math.imul(S,K)|0,o=o+Math.imul(S,V)|0,n=n+Math.imul(w,W)|0,i=(i=i+Math.imul(w,Y)|0)+Math.imul(_,W)|0,o=o+Math.imul(_,Y)|0,n=n+Math.imul(y,J)|0,i=(i=i+Math.imul(y,Z)|0)+Math.imul(v,J)|0,o=o+Math.imul(v,Z)|0,n=n+Math.imul(p,Q)|0,i=(i=i+Math.imul(p,ee)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,ee)|0;var _e=(f+(n=n+Math.imul(h,re)|0)|0)+((8191&(i=(i=i+Math.imul(h,ne)|0)+Math.imul(d,re)|0))<<13)|0;f=((o=o+Math.imul(d,ne)|0)+(i>>>13)|0)+(_e>>>26)|0,_e&=67108863,n=Math.imul(O,q),i=(i=Math.imul(O,z))+Math.imul(C,q)|0,o=Math.imul(C,z),n=n+Math.imul(x,K)|0,i=(i=i+Math.imul(x,V)|0)+Math.imul(M,K)|0,o=o+Math.imul(M,V)|0,n=n+Math.imul(A,W)|0,i=(i=i+Math.imul(A,Y)|0)+Math.imul(S,W)|0,o=o+Math.imul(S,Y)|0,n=n+Math.imul(w,J)|0,i=(i=i+Math.imul(w,Z)|0)+Math.imul(_,J)|0,o=o+Math.imul(_,Z)|0,n=n+Math.imul(y,Q)|0,i=(i=i+Math.imul(y,ee)|0)+Math.imul(v,Q)|0,o=o+Math.imul(v,ee)|0,n=n+Math.imul(p,re)|0,i=(i=i+Math.imul(p,ne)|0)+Math.imul(b,re)|0,o=o+Math.imul(b,ne)|0;var ke=(f+(n=n+Math.imul(h,oe)|0)|0)+((8191&(i=(i=i+Math.imul(h,ae)|0)+Math.imul(d,oe)|0))<<13)|0;f=((o=o+Math.imul(d,ae)|0)+(i>>>13)|0)+(ke>>>26)|0,ke&=67108863,n=Math.imul(T,q),i=(i=Math.imul(T,z))+Math.imul(U,q)|0,o=Math.imul(U,z),n=n+Math.imul(O,K)|0,i=(i=i+Math.imul(O,V)|0)+Math.imul(C,K)|0,o=o+Math.imul(C,V)|0,n=n+Math.imul(x,W)|0,i=(i=i+Math.imul(x,Y)|0)+Math.imul(M,W)|0,o=o+Math.imul(M,Y)|0,n=n+Math.imul(A,J)|0,i=(i=i+Math.imul(A,Z)|0)+Math.imul(S,J)|0,o=o+Math.imul(S,Z)|0,n=n+Math.imul(w,Q)|0,i=(i=i+Math.imul(w,ee)|0)+Math.imul(_,Q)|0,o=o+Math.imul(_,ee)|0,n=n+Math.imul(y,re)|0,i=(i=i+Math.imul(y,ne)|0)+Math.imul(v,re)|0,o=o+Math.imul(v,ne)|0,n=n+Math.imul(p,oe)|0,i=(i=i+Math.imul(p,ae)|0)+Math.imul(b,oe)|0,o=o+Math.imul(b,ae)|0;var Ae=(f+(n=n+Math.imul(h,ue)|0)|0)+((8191&(i=(i=i+Math.imul(h,fe)|0)+Math.imul(d,ue)|0))<<13)|0;f=((o=o+Math.imul(d,fe)|0)+(i>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,n=Math.imul(R,q),i=(i=Math.imul(R,z))+Math.imul(N,q)|0,o=Math.imul(N,z),n=n+Math.imul(T,K)|0,i=(i=i+Math.imul(T,V)|0)+Math.imul(U,K)|0,o=o+Math.imul(U,V)|0,n=n+Math.imul(O,W)|0,i=(i=i+Math.imul(O,Y)|0)+Math.imul(C,W)|0,o=o+Math.imul(C,Y)|0,n=n+Math.imul(x,J)|0,i=(i=i+Math.imul(x,Z)|0)+Math.imul(M,J)|0,o=o+Math.imul(M,Z)|0,n=n+Math.imul(A,Q)|0,i=(i=i+Math.imul(A,ee)|0)+Math.imul(S,Q)|0,o=o+Math.imul(S,ee)|0,n=n+Math.imul(w,re)|0,i=(i=i+Math.imul(w,ne)|0)+Math.imul(_,re)|0,o=o+Math.imul(_,ne)|0,n=n+Math.imul(y,oe)|0,i=(i=i+Math.imul(y,ae)|0)+Math.imul(v,oe)|0,o=o+Math.imul(v,ae)|0,n=n+Math.imul(p,ue)|0,i=(i=i+Math.imul(p,fe)|0)+Math.imul(b,ue)|0,o=o+Math.imul(b,fe)|0;var Se=(f+(n=n+Math.imul(h,he)|0)|0)+((8191&(i=(i=i+Math.imul(h,de)|0)+Math.imul(d,he)|0))<<13)|0;f=((o=o+Math.imul(d,de)|0)+(i>>>13)|0)+(Se>>>26)|0,Se&=67108863,n=Math.imul(L,q),i=(i=Math.imul(L,z))+Math.imul(F,q)|0,o=Math.imul(F,z),n=n+Math.imul(R,K)|0,i=(i=i+Math.imul(R,V)|0)+Math.imul(N,K)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(T,W)|0,i=(i=i+Math.imul(T,Y)|0)+Math.imul(U,W)|0,o=o+Math.imul(U,Y)|0,n=n+Math.imul(O,J)|0,i=(i=i+Math.imul(O,Z)|0)+Math.imul(C,J)|0,o=o+Math.imul(C,Z)|0,n=n+Math.imul(x,Q)|0,i=(i=i+Math.imul(x,ee)|0)+Math.imul(M,Q)|0,o=o+Math.imul(M,ee)|0,n=n+Math.imul(A,re)|0,i=(i=i+Math.imul(A,ne)|0)+Math.imul(S,re)|0,o=o+Math.imul(S,ne)|0,n=n+Math.imul(w,oe)|0,i=(i=i+Math.imul(w,ae)|0)+Math.imul(_,oe)|0,o=o+Math.imul(_,ae)|0,n=n+Math.imul(y,ue)|0,i=(i=i+Math.imul(y,fe)|0)+Math.imul(v,ue)|0,o=o+Math.imul(v,fe)|0,n=n+Math.imul(p,he)|0,i=(i=i+Math.imul(p,de)|0)+Math.imul(b,he)|0,o=o+Math.imul(b,de)|0;var Ee=(f+(n=n+Math.imul(h,pe)|0)|0)+((8191&(i=(i=i+Math.imul(h,be)|0)+Math.imul(d,pe)|0))<<13)|0;f=((o=o+Math.imul(d,be)|0)+(i>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,n=Math.imul(L,K),i=(i=Math.imul(L,V))+Math.imul(F,K)|0,o=Math.imul(F,V),n=n+Math.imul(R,W)|0,i=(i=i+Math.imul(R,Y)|0)+Math.imul(N,W)|0,o=o+Math.imul(N,Y)|0,n=n+Math.imul(T,J)|0,i=(i=i+Math.imul(T,Z)|0)+Math.imul(U,J)|0,o=o+Math.imul(U,Z)|0,n=n+Math.imul(O,Q)|0,i=(i=i+Math.imul(O,ee)|0)+Math.imul(C,Q)|0,o=o+Math.imul(C,ee)|0,n=n+Math.imul(x,re)|0,i=(i=i+Math.imul(x,ne)|0)+Math.imul(M,re)|0,o=o+Math.imul(M,ne)|0,n=n+Math.imul(A,oe)|0,i=(i=i+Math.imul(A,ae)|0)+Math.imul(S,oe)|0,o=o+Math.imul(S,ae)|0,n=n+Math.imul(w,ue)|0,i=(i=i+Math.imul(w,fe)|0)+Math.imul(_,ue)|0,o=o+Math.imul(_,fe)|0,n=n+Math.imul(y,he)|0,i=(i=i+Math.imul(y,de)|0)+Math.imul(v,he)|0,o=o+Math.imul(v,de)|0;var xe=(f+(n=n+Math.imul(p,pe)|0)|0)+((8191&(i=(i=i+Math.imul(p,be)|0)+Math.imul(b,pe)|0))<<13)|0;f=((o=o+Math.imul(b,be)|0)+(i>>>13)|0)+(xe>>>26)|0,xe&=67108863,n=Math.imul(L,W),i=(i=Math.imul(L,Y))+Math.imul(F,W)|0,o=Math.imul(F,Y),n=n+Math.imul(R,J)|0,i=(i=i+Math.imul(R,Z)|0)+Math.imul(N,J)|0,o=o+Math.imul(N,Z)|0,n=n+Math.imul(T,Q)|0,i=(i=i+Math.imul(T,ee)|0)+Math.imul(U,Q)|0,o=o+Math.imul(U,ee)|0,n=n+Math.imul(O,re)|0,i=(i=i+Math.imul(O,ne)|0)+Math.imul(C,re)|0,o=o+Math.imul(C,ne)|0,n=n+Math.imul(x,oe)|0,i=(i=i+Math.imul(x,ae)|0)+Math.imul(M,oe)|0,o=o+Math.imul(M,ae)|0,n=n+Math.imul(A,ue)|0,i=(i=i+Math.imul(A,fe)|0)+Math.imul(S,ue)|0,o=o+Math.imul(S,fe)|0,n=n+Math.imul(w,he)|0,i=(i=i+Math.imul(w,de)|0)+Math.imul(_,he)|0,o=o+Math.imul(_,de)|0;var Me=(f+(n=n+Math.imul(y,pe)|0)|0)+((8191&(i=(i=i+Math.imul(y,be)|0)+Math.imul(v,pe)|0))<<13)|0;f=((o=o+Math.imul(v,be)|0)+(i>>>13)|0)+(Me>>>26)|0,Me&=67108863,n=Math.imul(L,J),i=(i=Math.imul(L,Z))+Math.imul(F,J)|0,o=Math.imul(F,Z),n=n+Math.imul(R,Q)|0,i=(i=i+Math.imul(R,ee)|0)+Math.imul(N,Q)|0,o=o+Math.imul(N,ee)|0,n=n+Math.imul(T,re)|0,i=(i=i+Math.imul(T,ne)|0)+Math.imul(U,re)|0,o=o+Math.imul(U,ne)|0,n=n+Math.imul(O,oe)|0,i=(i=i+Math.imul(O,ae)|0)+Math.imul(C,oe)|0,o=o+Math.imul(C,ae)|0,n=n+Math.imul(x,ue)|0,i=(i=i+Math.imul(x,fe)|0)+Math.imul(M,ue)|0,o=o+Math.imul(M,fe)|0,n=n+Math.imul(A,he)|0,i=(i=i+Math.imul(A,de)|0)+Math.imul(S,he)|0,o=o+Math.imul(S,de)|0;var Ie=(f+(n=n+Math.imul(w,pe)|0)|0)+((8191&(i=(i=i+Math.imul(w,be)|0)+Math.imul(_,pe)|0))<<13)|0;f=((o=o+Math.imul(_,be)|0)+(i>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,n=Math.imul(L,Q),i=(i=Math.imul(L,ee))+Math.imul(F,Q)|0,o=Math.imul(F,ee),n=n+Math.imul(R,re)|0,i=(i=i+Math.imul(R,ne)|0)+Math.imul(N,re)|0,o=o+Math.imul(N,ne)|0,n=n+Math.imul(T,oe)|0,i=(i=i+Math.imul(T,ae)|0)+Math.imul(U,oe)|0,o=o+Math.imul(U,ae)|0,n=n+Math.imul(O,ue)|0,i=(i=i+Math.imul(O,fe)|0)+Math.imul(C,ue)|0,o=o+Math.imul(C,fe)|0,n=n+Math.imul(x,he)|0,i=(i=i+Math.imul(x,de)|0)+Math.imul(M,he)|0,o=o+Math.imul(M,de)|0;var Oe=(f+(n=n+Math.imul(A,pe)|0)|0)+((8191&(i=(i=i+Math.imul(A,be)|0)+Math.imul(S,pe)|0))<<13)|0;f=((o=o+Math.imul(S,be)|0)+(i>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,n=Math.imul(L,re),i=(i=Math.imul(L,ne))+Math.imul(F,re)|0,o=Math.imul(F,ne),n=n+Math.imul(R,oe)|0,i=(i=i+Math.imul(R,ae)|0)+Math.imul(N,oe)|0,o=o+Math.imul(N,ae)|0,n=n+Math.imul(T,ue)|0,i=(i=i+Math.imul(T,fe)|0)+Math.imul(U,ue)|0,o=o+Math.imul(U,fe)|0,n=n+Math.imul(O,he)|0,i=(i=i+Math.imul(O,de)|0)+Math.imul(C,he)|0,o=o+Math.imul(C,de)|0;var Ce=(f+(n=n+Math.imul(x,pe)|0)|0)+((8191&(i=(i=i+Math.imul(x,be)|0)+Math.imul(M,pe)|0))<<13)|0;f=((o=o+Math.imul(M,be)|0)+(i>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,n=Math.imul(L,oe),i=(i=Math.imul(L,ae))+Math.imul(F,oe)|0,o=Math.imul(F,ae),n=n+Math.imul(R,ue)|0,i=(i=i+Math.imul(R,fe)|0)+Math.imul(N,ue)|0,o=o+Math.imul(N,fe)|0,n=n+Math.imul(T,he)|0,i=(i=i+Math.imul(T,de)|0)+Math.imul(U,he)|0,o=o+Math.imul(U,de)|0;var Pe=(f+(n=n+Math.imul(O,pe)|0)|0)+((8191&(i=(i=i+Math.imul(O,be)|0)+Math.imul(C,pe)|0))<<13)|0;f=((o=o+Math.imul(C,be)|0)+(i>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,n=Math.imul(L,ue),i=(i=Math.imul(L,fe))+Math.imul(F,ue)|0,o=Math.imul(F,fe),n=n+Math.imul(R,he)|0,i=(i=i+Math.imul(R,de)|0)+Math.imul(N,he)|0,o=o+Math.imul(N,de)|0;var Te=(f+(n=n+Math.imul(T,pe)|0)|0)+((8191&(i=(i=i+Math.imul(T,be)|0)+Math.imul(U,pe)|0))<<13)|0;f=((o=o+Math.imul(U,be)|0)+(i>>>13)|0)+(Te>>>26)|0,Te&=67108863,n=Math.imul(L,he),i=(i=Math.imul(L,de))+Math.imul(F,he)|0,o=Math.imul(F,de);var Ue=(f+(n=n+Math.imul(R,pe)|0)|0)+((8191&(i=(i=i+Math.imul(R,be)|0)+Math.imul(N,pe)|0))<<13)|0;f=((o=o+Math.imul(N,be)|0)+(i>>>13)|0)+(Ue>>>26)|0,Ue&=67108863;var Be=(f+(n=Math.imul(L,pe))|0)+((8191&(i=(i=Math.imul(L,be))+Math.imul(F,pe)|0))<<13)|0;return f=((o=Math.imul(F,be))+(i>>>13)|0)+(Be>>>26)|0,Be&=67108863,u[0]=me,u[1]=ye,u[2]=ve,u[3]=ge,u[4]=we,u[5]=_e,u[6]=ke,u[7]=Ae,u[8]=Se,u[9]=Ee,u[10]=xe,u[11]=Me,u[12]=Ie,u[13]=Oe,u[14]=Ce,u[15]=Pe,u[16]=Te,u[17]=Ue,u[18]=Be,0!==f&&(u[19]=f,r.length++),r};function b(e,t,r){return(new m).mulp(e,t,r)}function m(e,t){this.x=e,this.y=t}Math.imul||(p=l),a.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?p(this,e,t):r<63?l(this,e,t):r<1024?function(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,i=0,o=0;o>>26)|0)>>>26,a&=67108863}r.words[o]=s,n=a,a=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}(this,e,t):b(this,e,t)},m.prototype.makeRBT=function(e){for(var t=new Array(e),r=a.prototype._countBits(e)-1,n=0;n>=1;return n},m.prototype.permute=function(e,t,r,n,i,o){for(var a=0;a>>=1)i++;return 1<>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*t;a>=26,t+=n/67108864|0,t+=o>>>26,this.words[r]=67108863&o}return 0!==t&&(this.words[r]=t,this.length++),this},a.prototype.muln=function(e){return this.clone().imuln(e)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r>>i}return t}(e);if(0===t.length)return new a(1);for(var r=this,n=0;n=0);var t,r=e%26,n=(e-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(t=0;t>>26-r}a&&(this.words[t]=a,this.length++)}if(0!==n){for(t=this.length-1;t>=0;t--)this.words[t+n]=this.words[t];for(t=0;t=0),n=t?(t-t%26)/26:0;var o=e%26,a=Math.min((e-o)/26,this.length),s=67108863^67108863>>>o<a)for(this.length-=a,f=0;f=0&&(0!==c||f>=n);f--){var h=0|this.words[f];this.words[f]=c<<26-o|h>>>o,c=h&s}return u&&0!==c&&(u.words[u.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},a.prototype.ishrn=function(e,t,r){return i(0===this.negative),this.iushrn(e,t,r)},a.prototype.shln=function(e){return this.clone().ishln(e)},a.prototype.ushln=function(e){return this.clone().iushln(e)},a.prototype.shrn=function(e){return this.clone().ishrn(e)},a.prototype.ushrn=function(e){return this.clone().iushrn(e)},a.prototype.testn=function(e){i("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,n=1<=0);var t=e%26,r=(e-t)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var n=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},a.prototype.isubn=function(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(u/67108864|0),this.words[n+r]=67108863&o}for(;n>26,this.words[n+r]=67108863&o;if(0===s)return this.strip();for(i(-1===s),s=0,n=0;n>26,this.words[n]=67108863&o;return this.negative=1,this.strip()},a.prototype._wordDiv=function(e,t){var r=(this.length,e.length),n=this.clone(),i=e,o=0|i.words[i.length-1];0!==(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var s,u=n.length-i.length;if("mod"!==t){(s=new a(null)).length=u+1,s.words=new Array(s.length);for(var f=0;f=0;h--){var d=67108864*(0|n.words[i.length+h])+(0|n.words[i.length+h-1]);for(d=Math.min(d/o|0,67108863),n._ishlnsubmul(i,d,h);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(i,1,h),n.isZero()||(n.negative^=1);s&&(s.words[h]=d)}return s&&s.strip(),n.strip(),"div"!==t&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},a.prototype.divmod=function(e,t,r){return i(!e.isZero()),this.isZero()?{div:new a(0),mod:new a(0)}:0!==this.negative&&0===e.negative?(s=this.neg().divmod(e,t),"mod"!==t&&(n=s.div.neg()),"div"!==t&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(e)),{div:n,mod:o}):0===this.negative&&0!==e.negative?(s=this.divmod(e.neg(),t),"mod"!==t&&(n=s.div.neg()),{div:n,mod:s.mod}):0!=(this.negative&e.negative)?(s=this.neg().divmod(e.neg(),t),"div"!==t&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(e)),{div:s.div,mod:o}):e.length>this.length||this.cmp(e)<0?{div:new a(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new a(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new a(this.modn(e.words[0]))}:this._wordDiv(e,t);var n,o,s},a.prototype.div=function(e){return this.divmod(e,"div",!1).div},a.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},a.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},a.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),i=e.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},a.prototype.modn=function(e){i(e<=67108863);for(var t=(1<<26)%e,r=0,n=this.length-1;n>=0;n--)r=(t*r+(0|this.words[n]))%e;return r},a.prototype.idivn=function(e){i(e<=67108863);for(var t=0,r=this.length-1;r>=0;r--){var n=(0|this.words[r])+67108864*t;this.words[r]=n/e|0,t=n%e}return this.strip()},a.prototype.divn=function(e){return this.clone().idivn(e)},a.prototype.egcd=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var n=new a(1),o=new a(0),s=new a(0),u=new a(1),f=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++f;for(var c=r.clone(),h=t.clone();!t.isZero();){for(var d=0,l=1;0==(t.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(t.iushrn(d);d-- >0;)(n.isOdd()||o.isOdd())&&(n.iadd(c),o.isub(h)),n.iushrn(1),o.iushrn(1);for(var p=0,b=1;0==(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(s.isOdd()||u.isOdd())&&(s.iadd(c),u.isub(h)),s.iushrn(1),u.iushrn(1);t.cmp(r)>=0?(t.isub(r),n.isub(s),o.isub(u)):(r.isub(t),s.isub(n),u.isub(o))}return{a:s,b:u,gcd:r.iushln(f)}},a.prototype._invmp=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var n,o=new a(1),s=new a(0),u=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var f=0,c=1;0==(t.words[0]&c)&&f<26;++f,c<<=1);if(f>0)for(t.iushrn(f);f-- >0;)o.isOdd()&&o.iadd(u),o.iushrn(1);for(var h=0,d=1;0==(r.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(r.iushrn(h);h-- >0;)s.isOdd()&&s.iadd(u),s.iushrn(1);t.cmp(r)>=0?(t.isub(r),o.isub(s)):(r.isub(t),s.isub(o))}return(n=0===t.cmpn(1)?o:s).cmpn(0)<0&&n.iadd(e),n},a.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=t.cmp(r);if(i<0){var o=t;t=r,r=o}else if(0===i||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},a.prototype.invm=function(e){return this.egcd(e).a.umod(e)},a.prototype.isEven=function(){return 0==(1&this.words[0])},a.prototype.isOdd=function(){return 1==(1&this.words[0])},a.prototype.andln=function(e){return this.words[0]&e},a.prototype.bincn=function(e){i("number"==typeof e);var t=e%26,r=(e-t)/26,n=1<>>26,s&=67108863,this.words[a]=s}return 0!==o&&(this.words[a]=o,this.length++),this},a.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},a.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)t=1;else{r&&(e=-e),i(e<=67108863,"Number is too big");var n=0|this.words[0];t=n===e?0:ne.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|e.words[r];if(n!==i){ni&&(t=1);break}}return t},a.prototype.gtn=function(e){return 1===this.cmpn(e)},a.prototype.gt=function(e){return 1===this.cmp(e)},a.prototype.gten=function(e){return this.cmpn(e)>=0},a.prototype.gte=function(e){return this.cmp(e)>=0},a.prototype.ltn=function(e){return-1===this.cmpn(e)},a.prototype.lt=function(e){return-1===this.cmp(e)},a.prototype.lten=function(e){return this.cmpn(e)<=0},a.prototype.lte=function(e){return this.cmp(e)<=0},a.prototype.eqn=function(e){return 0===this.cmpn(e)},a.prototype.eq=function(e){return 0===this.cmp(e)},a.red=function(e){return new A(e)},a.prototype.toRed=function(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},a.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},a.prototype._forceRed=function(e){return this.red=e,this},a.prototype.forceRed=function(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},a.prototype.redAdd=function(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},a.prototype.redIAdd=function(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},a.prototype.redSub=function(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},a.prototype.redISub=function(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},a.prototype.redShl=function(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},a.prototype.redMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},a.prototype.redIMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},a.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var y={k256:null,p224:null,p192:null,p25519:null};function v(e,t){this.name=e,this.p=new a(t,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function g(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function w(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function _(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function k(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function A(e){if("string"==typeof e){var t=a._prime(e);this.m=t.p,this.prime=t}else i(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function S(e){A.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function(){var e=new a(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var n=t0?r.isub(this.p):r.strip(),r},v.prototype.split=function(e,t){e.iushrn(this.n,0,t)},v.prototype.imulK=function(e){return e.imul(this.k)},o(g,v),g.prototype.split=function(e,t){for(var r=Math.min(e.length,9),n=0;n>>22,i=o}i>>>=22,e.words[n-10]=i,0===i&&e.length>10?e.length-=10:e.length-=9},g.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r>>=26,e.words[r]=i,t=n}return 0!==t&&(e.words[e.length++]=t),e},a._prime=function(e){if(y[e])return y[e];var t;if("k256"===e)t=new g;else if("p224"===e)t=new w;else if("p192"===e)t=new _;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new k}return y[e]=t,t},A.prototype._verify1=function(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},A.prototype._verify2=function(e,t){i(0==(e.negative|t.negative),"red works only with positives"),i(e.red&&e.red===t.red,"red works only with red numbers")},A.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},A.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},A.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},A.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},A.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},A.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},A.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},A.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},A.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},A.prototype.isqr=function(e){return this.imul(e,e.clone())},A.prototype.sqr=function(e){return this.mul(e,e)},A.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(i(t%2==1),3===t){var r=this.m.add(new a(1)).iushrn(2);return this.pow(e,r)}for(var n=this.m.subn(1),o=0;!n.isZero()&&0===n.andln(1);)o++,n.iushrn(1);i(!n.isZero());var s=new a(1).toRed(this),u=s.redNeg(),f=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new a(2*c*c).toRed(this);0!==this.pow(c,f).cmp(u);)c.redIAdd(u);for(var h=this.pow(c,n),d=this.pow(e,n.addn(1).iushrn(1)),l=this.pow(e,n),p=o;0!==l.cmp(s);){for(var b=l,m=0;0!==b.cmp(s);m++)b=b.redSqr();i(m=0;n--){for(var f=t.words[n],c=u-1;c>=0;c--){var h=f>>c&1;i!==r[0]&&(i=this.sqr(i)),0!==h||0!==o?(o<<=1,o|=h,(4===++s||0===n&&0===c)&&(i=this.mul(i,r[o]),s=0,o=0)):s=0}u=26}return i},A.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},A.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},a.mont=function(e){return new S(e)},o(S,A),S.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},S.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},S.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new a(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},S.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(e)}).call(this,r(22)(e))},function(e,t,r){"use strict";var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,r){"use strict";var n=r(0)(r(1));e.exports=function(e){if("string"!=typeof e)throw new Error("[is-hex-prefixed] value must be type 'string', is currently type "+(0,n.default)(e)+", while checking isHexPrefixed.");return"0x"===e.slice(0,2)}},function(e,t,r){"use strict";(function(t){var n=r(10),i=r(5),o=r(182),a=r(184),s=r(61),u=r(185),f=function(e){return i.isBN(e)},c=function(e){return e&&e.constructor&&"BigNumber"===e.constructor.name},h=function(e){try{return o.apply(null,arguments)}catch(t){throw new Error(t+' Given value: "'+e+'"')}},d=function(e){return!!/^(0x)?[0-9a-f]{40}$/i.test(e)&&(!(!/^(0x|0X)?[0-9a-f]{40}$/.test(e)&&!/^(0x|0X)?[0-9A-F]{40}$/.test(e))||l(e))},l=function(e){e=e.replace(/^0x/i,"");for(var t=g(e.toLowerCase()).replace(/^0x/i,""),r=0;r<40;r++)if(parseInt(t[r],16)>7&&e[r].toUpperCase()!==e[r]||parseInt(t[r],16)<=7&&e[r].toLowerCase()!==e[r])return!1;return!0},p=function(e){var t="";e=(e=(e=(e=(e=a.encode(e)).replace(/^(?:\u0000)*/,"")).split("").reverse().join("")).replace(/^(?:\u0000)*/,"")).split("").reverse().join("");for(var r=0;r>>4).toString(16)),t.push((15&e[r]).toString(16));return"0x"+t.join("")},isHex:function(e){return(n.isString(e)||n.isNumber(e))&&/^(-0x|0x)?[0-9a-f]*$/i.test(e)},isHexStrict:y,leftPad:function(e,t,r){var n=/^0x/i.test(e)||"number"==typeof e,i=t-(e=e.toString(16).replace(/^0x/i,"")).length+1>=0?t-e.length+1:0;return(n?"0x":"")+new Array(i).join(r||"0")+e},rightPad:function(e,t,r){var n=/^0x/i.test(e)||"number"==typeof e,i=t-(e=e.toString(16).replace(/^0x/i,"")).length+1>=0?t-e.length+1:0;return(n?"0x":"")+e+new Array(i).join(r||"0")},toTwosComplement:function(e){return"0x"+h(e).toTwos(256).toString(16,64)},sha3:g,sha3Raw:function(e){return null===(e=g(e))?v:e}}}).call(this,r(2).Buffer)},function(e,t,r){"use strict";var n=r(16),i=r(5),o=function(e){var t="A".charCodeAt(0),r="Z".charCodeAt(0);return(e=(e=e.toUpperCase()).substr(4)+e.substr(0,4)).split("").map((function(e){var n=e.charCodeAt(0);return n>=t&&n<=r?n-t+10:e})).join("")},a=function(e){for(var t,r=e;r.length>2;)t=r.slice(0,9),r=parseInt(t,10)%97+r.slice(t.length);return parseInt(r,10)%97},s=function(e){this._iban=e};s.toAddress=function(e){if(!(e=new s(e)).isDirect())throw new Error("IBAN is indirect and can't be converted");return e.toAddress()},s.toIban=function(e){return s.fromAddress(e).toString()},s.fromAddress=function(e){if(!n.isAddress(e))throw new Error("Provided address is not a valid address: "+e);e=e.replace("0x","").replace("0X","");var t=function(e,t){for(var r=e;r.length<2*t;)r="0"+r;return r}(new i(e,16).toString(36),15);return s.fromBban(t.toUpperCase())},s.fromBban=function(e){var t=("0"+(98-a(o("XE00"+e)))).slice(-2);return new s("XE"+t+e)},s.createIndirect=function(e){return s.fromBban("ETH"+e.institution+e.identifier)},s.isValid=function(e){return new s(e).isValid()},s.prototype.isValid=function(){return/^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban)&&1===a(o(this._iban))},s.prototype.isDirect=function(){return 34===this._iban.length||35===this._iban.length},s.prototype.isIndirect=function(){return 20===this._iban.length},s.prototype.checksum=function(){return this._iban.substr(2,2)},s.prototype.institution=function(){return this.isIndirect()?this._iban.substr(7,4):""},s.prototype.client=function(){return this.isIndirect()?this._iban.substr(11):""},s.prototype.toAddress=function(){if(this.isDirect()){var e=this._iban.substr(4),t=new i(e,36);return n.toChecksumAddress(t.toString(16,20))}return""},s.prototype.toString=function(){return this._iban},e.exports=s},function(e,t,r){"use strict";var n={messageId:0,toPayload:function(e,t){if(!e)throw new Error('JSONRPC method should be specified for params: "'+JSON.stringify(t)+'"!');return n.messageId++,{jsonrpc:"2.0",id:n.messageId,method:e,params:t||[]}},isValidResponse:function(e){return Array.isArray(e)?e.every(t):t(e);function t(e){return!(!e||e.error||"2.0"!==e.jsonrpc||"number"!=typeof e.id&&"string"!=typeof e.id||void 0===e.result)}},toBatchPayload:function(e){return e.map((function(e){return n.toPayload(e.method,e.params)}))}};e.exports=n},function(e,t,r){"use strict";(function(e,n){var i,o=r(0)(r(1));!function(a){var s="object"==(0,o.default)(t)&&t&&!t.nodeType&&t,u="object"==(0,o.default)(e)&&e&&!e.nodeType&&e,f="object"==(void 0===n?"undefined":(0,o.default)(n))&&n;f.global!==f&&f.window!==f&&f.self!==f||(a=f);var c,h,d=2147483647,l=/^xn--/,p=/[^\x20-\x7E]/,b=/[\x2E\u3002\uFF0E\uFF61]/g,m={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},y=Math.floor,v=String.fromCharCode;function g(e){throw new RangeError(m[e])}function w(e,t){for(var r=e.length,n=[];r--;)n[r]=t(e[r]);return n}function _(e,t){var r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),n+w((e=e.replace(b,".")).split("."),t).join(".")}function k(e){for(var t,r,n=[],i=0,o=e.length;i=55296&&t<=56319&&i65535&&(t+=v((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=v(e)})).join("")}function S(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function E(e,t,r){var n=0;for(e=r?y(e/700):e>>1,e+=y(e/t);e>455;n+=36)e=y(e/35);return y(n+36*e/(e+38))}function x(e){var t,r,n,i,o,a,s,u,f,c,h,l=[],p=e.length,b=0,m=128,v=72;for((r=e.lastIndexOf("-"))<0&&(r=0),n=0;n=128&&g("not-basic"),l.push(e.charCodeAt(n));for(i=r>0?r+1:0;i=p&&g("invalid-input"),((u=(h=e.charCodeAt(i++))-48<10?h-22:h-65<26?h-65:h-97<26?h-97:36)>=36||u>y((d-b)/a))&&g("overflow"),b+=u*a,!(u<(f=s<=v?1:s>=v+26?26:s-v));s+=36)a>y(d/(c=36-f))&&g("overflow"),a*=c;v=E(b-o,t=l.length+1,0==o),y(b/t)>d-m&&g("overflow"),m+=y(b/t),b%=t,l.splice(b++,0,m)}return A(l)}function M(e){var t,r,n,i,o,a,s,u,f,c,h,l,p,b,m,w=[];for(l=(e=k(e)).length,t=128,r=0,o=72,a=0;a=t&&hy((d-r)/(p=n+1))&&g("overflow"),r+=(s-t)*p,t=s,a=0;ad&&g("overflow"),h==t){for(u=r,f=36;!(u<(c=f<=o?1:f>=o+26?26:f-o));f+=36)m=u-c,b=36-c,w.push(v(S(c+m%b,0))),u=y(m/b);w.push(v(S(u,0))),o=E(r,p,n==i),r=0,++n}++r,++t}return w.join("")}if(c={version:"1.4.1",ucs2:{decode:k,encode:A},decode:x,encode:M,toASCII:function(e){return _(e,(function(e){return p.test(e)?"xn--"+M(e):e}))},toUnicode:function(e){return _(e,(function(e){return l.test(e)?x(e.slice(4).toLowerCase()):e}))}},"object"==(0,o.default)(r(62))&&r(62))void 0===(i=function(){return c}.call(t,r,t,e))||(e.exports=i);else if(s&&u)if(e.exports==s)u.exports=c;else for(h in c)c.hasOwnProperty(h)&&(s[h]=c[h]);else a.punycode=c}(void 0)}).call(this,r(22)(e),r(8))},function(e,t,r){"use strict";(function(e){t.fetch=s(e.fetch)&&s(e.ReadableStream),t.writableStream=s(e.WritableStream),t.abortController=s(e.AbortController),t.blobConstructor=!1;try{new Blob([new ArrayBuffer(1)]),t.blobConstructor=!0}catch(e){}var r;function n(){if(void 0!==r)return r;if(e.XMLHttpRequest){r=new e.XMLHttpRequest;try{r.open("GET",e.XDomainRequest?"/":"https://example.com")}catch(e){r=null}}else r=null;return r}function i(e){var t=n();if(!t)return!1;try{return t.responseType=e,t.responseType===e}catch(e){}return!1}var o=void 0!==e.ArrayBuffer,a=o&&s(e.ArrayBuffer.prototype.slice);function s(e){return"function"==typeof e}t.arraybuffer=t.fetch||o&&i("arraybuffer"),t.msstream=!t.fetch&&a&&i("ms-stream"),t.mozchunkedarraybuffer=!t.fetch&&o&&i("moz-chunked-arraybuffer"),t.overrideMimeType=t.fetch||!!n()&&s(n().overrideMimeType),t.vbArray=s(e.VBArray),r=null}).call(this,r(8))},function(e,t,r){"use strict";(function(e,n,i){var o=r(96),a=r(3),s=r(34),u=t.readyStates={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},f=t.IncomingMessage=function(t,r,a,u){var f=this;if(s.Readable.call(f),f._mode=a,f.headers={},f.rawHeaders=[],f.trailers={},f.rawTrailers=[],f.on("end",(function(){e.nextTick((function(){f.emit("close")}))})),"fetch"===a){if(f._fetchResponse=r,f.url=r.url,f.statusCode=r.status,f.statusMessage=r.statusText,r.headers.forEach((function(e,t){f.headers[t.toLowerCase()]=e,f.rawHeaders.push(t,e)})),o.writableStream){var c=new WritableStream({write:function(e){return new Promise((function(t,r){f._destroyed?r():f.push(new i(e))?t():f._resumeFetch=t}))},close:function(){n.clearTimeout(u),f._destroyed||f.push(null)},abort:function(e){f._destroyed||f.emit("error",e)}});try{return void r.body.pipeTo(c).catch((function(e){n.clearTimeout(u),f._destroyed||f.emit("error",e)}))}catch(e){}}var h=r.body.getReader();!function e(){h.read().then((function(t){if(!f._destroyed){if(t.done)return n.clearTimeout(u),void f.push(null);f.push(new i(t.value)),e()}})).catch((function(e){n.clearTimeout(u),f._destroyed||f.emit("error",e)}))}()}else{if(f._xhr=t,f._pos=0,f.url=t.responseURL,f.statusCode=t.status,f.statusMessage=t.statusText,t.getAllResponseHeaders().split(/\r?\n/).forEach((function(e){var t=e.match(/^([^:]+):\s*(.*)/);if(t){var r=t[1].toLowerCase();"set-cookie"===r?(void 0===f.headers[r]&&(f.headers[r]=[]),f.headers[r].push(t[2])):void 0!==f.headers[r]?f.headers[r]+=", "+t[2]:f.headers[r]=t[2],f.rawHeaders.push(t[1],t[2])}})),f._charset="x-user-defined",!o.overrideMimeType){var d=f.rawHeaders["mime-type"];if(d){var l=d.match(/;\s*charset=([^;])(;|$)/);l&&(f._charset=l[1].toLowerCase())}f._charset||(f._charset="utf-8")}}};a(f,s.Readable),f.prototype._read=function(){var e=this._resumeFetch;e&&(this._resumeFetch=null,e())},f.prototype._onXHRProgress=function(){var e=this,t=e._xhr,r=null;switch(e._mode){case"text:vbarray":if(t.readyState!==u.DONE)break;try{r=new n.VBArray(t.responseBody).toArray()}catch(e){}if(null!==r){e.push(new i(r));break}case"text":try{r=t.responseText}catch(t){e._mode="text:vbarray";break}if(r.length>e._pos){var o=r.substr(e._pos);if("x-user-defined"===e._charset){for(var a=new i(o.length),s=0;se._pos&&(e.push(new i(new Uint8Array(f.result.slice(e._pos)))),e._pos=f.result.byteLength)},f.onload=function(){e.push(null)},f.readAsArrayBuffer(r)}e._xhr.readyState===u.DONE&&"ms-stream"!==e._mode&&e.push(null)}}).call(this,r(11),r(8),r(2).Buffer)},function(e,t,r){"use strict";(function(t,n){var i=r(46);e.exports=g;var o,a=r(90);g.ReadableState=v;r(65).EventEmitter;var s=function(e,t){return e.listeners(t).length},u=r(99),f=r(4).Buffer,c=t.Uint8Array||function(){};var h=r(35);h.inherits=r(3);var d=r(205),l=void 0;l=d&&d.debuglog?d.debuglog("stream"):function(){};var p,b=r(206),m=r(100);h.inherits(g,u);var y=["error","close","destroy","pause","resume"];function v(e,t){e=e||{};var n=t instanceof(o=o||r(27));this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var i=e.highWaterMark,a=e.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(a||0===a)?a:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new b,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=r(67).StringDecoder),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function g(e){if(o=o||r(27),!(this instanceof g))return new g(e);this._readableState=new v(e,this),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),u.call(this)}function w(e,t,r,n,i){var o,a=e._readableState;null===t?(a.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,A(e)}(e,a)):(i||(o=function(e,t){var r;n=t,f.isBuffer(n)||n instanceof c||"string"==typeof t||void 0===t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk"));var n;return r}(a,t)),o?e.emit("error",o):a.objectMode||t&&t.length>0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===f.prototype||(t=function(e){return f.from(e)}(t)),n?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):_(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!r?(t=a.decoder.write(t),a.objectMode||0!==t.length?_(e,a,t,!1):E(e,a)):_(e,a,t,!1))):n||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function A(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(l("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?i.nextTick(S,e):S(e))}function S(e){l("emit readable"),e.emit("readable"),O(e)}function E(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(x,e,t))}function x(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;eo.length?o.length:e;if(a===o.length?i+=o:i+=o.slice(0,e),0===(e-=a)){a===o.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=o.slice(a));break}++n}return t.length-=n,i}(e,t):function(e,t){var r=f.allocUnsafe(e),n=t.head,i=1;n.data.copy(r),e-=n.data.length;for(;n=n.next;){var o=n.data,a=e>o.length?o.length:e;if(o.copy(r,r.length-e,0,a),0===(e-=a)){a===o.length?(++i,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=o.slice(a));break}++i}return t.length-=i,r}(e,t);return n}(e,t.buffer,t.decoder),r);var r}function P(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,i.nextTick(T,t,e))}function T(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function U(e,t){for(var r=0,n=e.length;r=t.highWaterMark||t.ended))return l("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?P(this):A(this),null;if(0===(e=k(e,t))&&t.ended)return 0===t.length&&P(this),null;var n,i=t.needReadable;return l("need readable",i),(0===t.length||t.length-e0?C(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&P(this)),null!==n&&this.emit("data",n),n},g.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},g.prototype.pipe=function(e,t){var r=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=e;break;case 1:o.pipes=[o.pipes,e];break;default:o.pipes.push(e)}o.pipesCount+=1,l("pipe count=%d opts=%j",o.pipesCount,t);var u=(!t||!1!==t.end)&&e!==n.stdout&&e!==n.stderr?c:g;function f(t,n){l("onunpipe"),t===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,l("cleanup"),e.removeListener("close",y),e.removeListener("finish",v),e.removeListener("drain",h),e.removeListener("error",m),e.removeListener("unpipe",f),r.removeListener("end",c),r.removeListener("end",g),r.removeListener("data",b),d=!0,!o.awaitDrain||e._writableState&&!e._writableState.needDrain||h())}function c(){l("onend"),e.end()}o.endEmitted?i.nextTick(u):r.once("end",u),e.on("unpipe",f);var h=function(e){return function(){var t=e._readableState;l("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,O(e))}}(r);e.on("drain",h);var d=!1;var p=!1;function b(t){l("ondata"),p=!1,!1!==e.write(t)||p||((1===o.pipesCount&&o.pipes===e||o.pipesCount>1&&-1!==U(o.pipes,e))&&!d&&(l("false write response, pause",r._readableState.awaitDrain),r._readableState.awaitDrain++,p=!0),r.pause())}function m(t){l("onerror",t),g(),e.removeListener("error",m),0===s(e,"error")&&e.emit("error",t)}function y(){e.removeListener("finish",v),g()}function v(){l("onfinish"),e.removeListener("close",y),g()}function g(){l("unpipe"),r.unpipe(e)}return r.on("data",b),function(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,"error",m),e.once("close",y),e.once("finish",v),e.emit("pipe",r),o.flowing||(l("pipe resume"),r.resume()),e},g.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,r)),this;if(!e){var n=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},r(208),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||void 0,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||void 0}).call(this,r(8))},function(e,t,r){"use strict";e.exports=a;var n=r(27),i=r(35);function o(e,t){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(!n)return this.emit("error",new Error("write callback called multiple times"));r.writechunk=null,r.writecb=null,null!=t&&this.push(t),n(e);var i=this._readableState;i.reading=!1,(i.needReadable||i.length=9007199254740991||t<=-9007199254740991)&&m("overflow","BigNumber.from",t),e.from(String(t))):"bigint"==typeof t?e.from(t.toString()):(0,s.isBytes)(t)?e.from((0,s.hexlify)(t)):t._hex&&(0,s.isHexString)(t._hex)?e.from(t._hex):t.toHexString&&"string"==typeof(t=t.toHexString())?e.from(t):c.throwArgumentError("invalid BigNumber value","value",t)}},{key:"isBigNumber",value:function(e){return!(!e||!e._isBigNumber)}}]),e}();function l(e){if("string"!=typeof e)return l(e.toString(16));if("-"===e[0])return"-"===(e=e.substring(1))[0]&&c.throwArgumentError("invalid hex","value",e),"0x00"===(e=l(e))?e:"-"+e;if("0x"!==e.substring(0,2)&&(e="0x"+e),"0x"===e)return"0x00";for(e.length%2&&(e="0x0"+e.substring(2));e.length>4&&"0x00"===e.substring(0,4);)e="0x"+e.substring(4);return e}function p(e){return d.from(l(e))}function b(e){var t=d.from(e).toHexString();return"-"===t[0]?new a.BN("-"+t.substring(3),16):new a.BN(t.substring(2),16)}function m(e,t,r){var n={fault:e,operation:t};return null!=r&&(n.value=r),c.throwError(e,u.Logger.errors.NUMERIC_FAULT,n)}t.BigNumber=d},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.version=void 0;t.version="bignumber/5.0.5"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.encode=function(e){return(0,n.hexlify)(function e(t){if(Array.isArray(t)){var r=[];if(t.forEach((function(t){r=r.concat(e(t))})),r.length<=55)return r.unshift(192+r.length),r;var i=s(r.length);return i.unshift(247+i.length),i.concat(r)}(0,n.isBytesLike)(t)||a.throwArgumentError("RLP object must be BytesLike","object",t);var o=Array.prototype.slice.call((0,n.arrayify)(t));if(1===o.length&&o[0]<=127)return o;if(o.length<=55)return o.unshift(128+o.length),o;var u=s(o.length);return u.unshift(183+u.length),u.concat(o)}(e))},t.decode=function(e){var t=(0,n.arrayify)(e),r=c(t,0);r.consumed!==t.length&&a.throwArgumentError("invalid rlp data","data",e);return r.result};var n=r(12),i=r(14),o=r(230),a=new i.Logger(o.version);function s(e){for(var t=[];e;)t.unshift(255&e),e>>=8;return t}function u(e,t,r){for(var n=0,i=0;it+1+n&&a.throwError("child data too short",i.Logger.errors.BUFFER_OVERRUN,{})}return{consumed:1+n,result:o}}function c(e,t){if(0===e.length&&a.throwError("data too short",i.Logger.errors.BUFFER_OVERRUN,{}),e[t]>=248){var r=e[t]-247;t+1+r>e.length&&a.throwError("data short segment too short",i.Logger.errors.BUFFER_OVERRUN,{});var o=u(e,t+1,r);return t+1+r+o>e.length&&a.throwError("data long segment too short",i.Logger.errors.BUFFER_OVERRUN,{}),f(e,t,t+1+r,r+o)}if(e[t]>=192){var s=e[t]-192;return t+1+s>e.length&&a.throwError("data array too short",i.Logger.errors.BUFFER_OVERRUN,{}),f(e,t,t+1,s)}if(e[t]>=184){var c=e[t]-183;t+1+c>e.length&&a.throwError("data array too short",i.Logger.errors.BUFFER_OVERRUN,{});var h=u(e,t+1,c);return t+1+c+h>e.length&&a.throwError("data array too short",i.Logger.errors.BUFFER_OVERRUN,{}),{consumed:1+c+h,result:(0,n.hexlify)(e.slice(t+1+c,t+1+c+h))}}if(e[t]>=128){var d=e[t]-128;return t+1+d>e.length&&a.throwError("data too short",i.Logger.errors.BUFFER_OVERRUN,{}),{consumed:1+d,result:(0,n.hexlify)(e.slice(t+1,t+1+d))}}return{consumed:1,result:(0,n.hexlify)(e[t])}}},function(e,t,r){"use strict";var n=t;n.base=r(52),n.short=r(237),n.mont=r(238),n.edwards=r(239)},function(e,t,r){"use strict";var n=r(23).rotr32;function i(e,t,r){return e&t^~e&r}function o(e,t,r){return e&t^e&r^t&r}function a(e,t,r){return e^t^r}t.ft_1=function(e,t,r,n){return 0===e?i(t,r,n):1===e||3===e?a(t,r,n):2===e?o(t,r,n):void 0},t.ch32=i,t.maj32=o,t.p32=a,t.s0_256=function(e){return n(e,2)^n(e,13)^n(e,22)},t.s1_256=function(e){return n(e,6)^n(e,11)^n(e,25)},t.g0_256=function(e){return n(e,7)^n(e,18)^e>>>3},t.g1_256=function(e){return n(e,17)^n(e,19)^e>>>10}},function(e,t,r){"use strict";var n=r(23),i=r(37),o=r(109),a=r(17),s=n.sum32,u=n.sum32_4,f=n.sum32_5,c=o.ch32,h=o.maj32,d=o.s0_256,l=o.s1_256,p=o.g0_256,b=o.g1_256,m=i.BlockHash,y=[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];function v(){if(!(this instanceof v))return new v;m.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=y,this.W=new Array(64)}n.inherits(v,m),e.exports=v,v.blockSize=512,v.outSize=256,v.hmacStrength=192,v.padLength=64,v.prototype._update=function(e,t){for(var r=this.W,n=0;n<16;n++)r[n]=e[t+n];for(;n=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(t,r,n)}e.exports=a,a.prototype._init=function(e,t,r){var n=e.concat(t).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var i=0;i=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(r||[])),this._reseed=1},a.prototype.generate=function(e,t,r,n){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof t&&(n=r,r=t,t=null),r&&(r=i.toArray(r,n||"hex"),this._update(r));for(var o=[];o.length0&&e.topics.length!==n+1&&(t={anonymous:!0,inputs:[]})}var i=t.anonymous?e.topics:e.topics.slice(1);return r.returnValues=h.decodeLog(t.inputs,e.data,i),delete r.returnValues.__length__,r.event=t.name,r.signature=t.anonymous||!e.topics[0]?null:e.topics[0],r.raw={data:r.data,topics:r.topics},delete r.data,delete r.topics,r},d.prototype._encodeMethodABI=function(){var e=this._method.signature,t=this.arguments||[],r=!1,i=this._parent.options.jsonInterface.filter((function(t){return"constructor"===e&&t.type===e||(t.signature===e||t.signature===e.replace("0x","")||t.name===e)&&"function"===t.type})).map((function(e){var i=n.isArray(e.inputs)?e.inputs.length:0;if(i!==t.length)throw new Error("The number of arguments is not matching the methods required number. You need to pass "+i+" arguments.");return"function"===e.type&&(r=e.signature),n.isArray(e.inputs)?e.inputs:[]})).map((function(e){return h.encodeParameters(e,t).replace("0x","")}))[0]||"";if("constructor"===e){if(!this._deployData)throw new Error("The contract has no contract data option set. This is necessary to append the constructor parameters.");return this._deployData.startsWith("0x")||(this._deployData="0x"+this._deployData),this._deployData+i}var o=r?r+i:i;if(!o)throw new Error("Couldn't find a matching contract method named \""+this._method.name+'".');return o},d.prototype._decodeMethodReturn=function(e,t){if(!t)return null;t=t.length>=2?t.slice(2):t;var r=h.decodeParameters(e,t);return 1===r.__length__?r[0]:(delete r.__length__,r)},d.prototype.deploy=function(e,t){if((e=e||{}).arguments=e.arguments||[],!(e=this._getOrSetDefaultOptions(e)).data){if("function"==typeof t)return t(f.ContractMissingDeployDataError());throw f.ContractMissingDeployDataError()}var r=n.find(this.options.jsonInterface,(function(e){return"constructor"===e.type}))||{};return r.signature="constructor",this._createTxObject.apply({method:r,parent:this,deployData:e.data,_ethAccounts:this.constructor._ethAccounts},e.arguments)},d.prototype._generateEventOptions=function(){var e=Array.prototype.slice.call(arguments),t=this._getCallback(e),r=n.isObject(e[e.length-1])?e.pop():{},i=n.isString(e[0])?e[0]:"allevents",o="allevents"===i.toLowerCase()?{name:"ALLEVENTS",jsonInterface:this.options.jsonInterface}:this.options.jsonInterface.find((function(e){return"event"===e.type&&(e.name===i||e.signature==="0x"+i.replace("0x",""))}));if(!o)throw f.ContractEventDoesNotExistError(i);if(!a.isAddress(this.options.address))throw f.ContractNoAddressDefinedError();return{params:this._encodeEventABI(o,r),event:o,callback:t}},d.prototype.clone=function(){return new this.constructor(this.options.jsonInterface,this.options.address,this.options)},d.prototype.once=function(e,t,r){var i=Array.prototype.slice.call(arguments);if(!(r=this._getCallback(i)))throw f.ContractOnceRequiresCallbackError();t&&delete t.fromBlock,this._on(e,t,(function(e,t,i){i.unsubscribe(),n.isFunction(r)&&r(e,t,i)}))},d.prototype._on=function(){var e=this._generateEventOptions.apply(this,arguments);e.params&&e.params.toBlock&&(delete e.params.toBlock,console.warn("Invalid option: toBlock. Use getPastEvents for specific range.")),this._checkListener("newListener",e.event.name),this._checkListener("removeListener",e.event.name);var t=new s({subscription:{params:1,inputFormatter:[u.inputLogFormatter],outputFormatter:this._decodeEventABI.bind(e.event),subscriptionHandler:function(e){e.removed?this.emit("changed",e):this.emit("data",e),n.isFunction(this.callback)&&this.callback(null,e,this)}},type:"eth",requestManager:this._requestManager});return t.subscribe("logs",e.params,e.callback||function(){}),t},d.prototype.getPastEvents=function(){var e=this._generateEventOptions.apply(this,arguments),t=new o({name:"getPastLogs",call:"eth_getLogs",params:1,inputFormatter:[u.inputLogFormatter],outputFormatter:this._decodeEventABI.bind(e.event)});t.setRequestManager(this._requestManager);var r=t.buildCall();return t=null,r(e.params,e.callback)},d.prototype._createTxObject=function(){var e=Array.prototype.slice.call(arguments),t={};if("function"===this.method.type&&(t.call=this.parent._executeMethod.bind(t,"call"),t.call.request=this.parent._executeMethod.bind(t,"call",!0)),t.send=this.parent._executeMethod.bind(t,"send"),t.send.request=this.parent._executeMethod.bind(t,"send",!0),t.encodeABI=this.parent._encodeMethodABI.bind(t),t.estimateGas=this.parent._executeMethod.bind(t,"estimate"),e&&this.method.inputs&&e.length!==this.method.inputs.length){if(this.nextMethod)return this.nextMethod.apply(null,e);throw f.InvalidNumberOfParams(e.length,this.method.inputs.length,this.method.name)}return t.arguments=e||[],t._method=this.method,t._parent=this.parent,t._ethAccounts=this.parent.constructor._ethAccounts||this._ethAccounts,this.deployData&&(t._deployData=this.deployData),t},d.prototype._processExecuteArguments=function(e,t){var r={};if(r.type=e.shift(),r.callback=this._parent._getCallback(e),"call"===r.type&&!0!==e[e.length-1]&&(n.isString(e[e.length-1])||isFinite(e[e.length-1]))&&(r.defaultBlock=e.pop()),r.options=n.isObject(e[e.length-1])?e.pop():{},r.generateRequest=!0===e[e.length-1]&&e.pop(),r.options=this._parent._getOrSetDefaultOptions(r.options),r.options.data=this.encodeABI(),!this._deployData&&!a.isAddress(this._parent.options.address))throw f.ContractNoAddressDefinedError();return this._deployData||(r.options.to=this._parent.options.address),r.options.data?r:a._fireError(new Error("Couldn't find a matching contract method, or the number of parameters is wrong."),t.eventEmitter,t.reject,r.callback)},d.prototype._executeMethod=function(){var e=this,t=this._parent._processExecuteArguments.call(this,Array.prototype.slice.call(arguments),r),r=c("send"!==t.type),i=e.constructor._ethAccounts||e._ethAccounts;if(t.generateRequest){var s={params:[u.inputCallFormatter.call(this._parent,t.options)],callback:t.callback};return"call"===t.type?(s.params.push(u.inputDefaultBlockNumberFormatter.call(this._parent,t.defaultBlock)),s.method="eth_call",s.format=this._parent._decodeMethodReturn.bind(null,this._method.outputs)):s.method="eth_sendTransaction",s}switch(t.type){case"estimate":var d=new o({name:"estimateGas",call:"eth_estimateGas",params:1,inputFormatter:[u.inputCallFormatter],outputFormatter:a.hexToNumber,requestManager:e._parent._requestManager,accounts:i,defaultAccount:e._parent.defaultAccount,defaultBlock:e._parent.defaultBlock}).createFunction();return d(t.options,t.callback);case"call":var l=new o({name:"call",call:"eth_call",params:2,inputFormatter:[u.inputCallFormatter,u.inputDefaultBlockNumberFormatter],outputFormatter:function(t){return e._parent._decodeMethodReturn(e._method.outputs,t)},requestManager:e._parent._requestManager,accounts:i,defaultAccount:e._parent.defaultAccount,defaultBlock:e._parent.defaultBlock,handleRevert:e._parent.handleRevert,abiCoder:h}).createFunction();return l(t.options,t.defaultBlock,t.callback);case"send":if(!a.isAddress(t.options.from))return a._fireError(f.ContractNoFromAddressDefinedError(),r.eventEmitter,r.reject,t.callback);if(n.isBoolean(this._method.payable)&&!this._method.payable&&t.options.value&&t.options.value>0)return a._fireError(new Error("Can not send value to non-payable contract method or constructor"),r.eventEmitter,r.reject,t.callback);var p={receiptFormatter:function(t){if(n.isArray(t.logs)){var r=n.map(t.logs,(function(t){return e._parent._decodeEventABI.call({name:"ALLEVENTS",jsonInterface:e._parent.options.jsonInterface},t)}));t.events={};var i=0;r.forEach((function(e){e.event?t.events[e.event]?Array.isArray(t.events[e.event])?t.events[e.event].push(e):t.events[e.event]=[t.events[e.event],e]:t.events[e.event]=e:(t.events[i]=e,i++)})),delete t.logs}return t},contractDeployFormatter:function(t){var r=e._parent.clone();return r.options.address=t.contractAddress,r}},b=new o({name:"sendTransaction",call:"eth_sendTransaction",params:1,inputFormatter:[u.inputTransactionFormatter],requestManager:e._parent._requestManager,accounts:e.constructor._ethAccounts||e._ethAccounts,defaultAccount:e._parent.defaultAccount,defaultBlock:e._parent.defaultBlock,transactionBlockTimeout:e._parent.transactionBlockTimeout,transactionConfirmationBlocks:e._parent.transactionConfirmationBlocks,transactionPollingTimeout:e._parent.transactionPollingTimeout,defaultCommon:e._parent.defaultCommon,defaultChain:e._parent.defaultChain,defaultHardfork:e._parent.defaultHardfork,handleRevert:e._parent.handleRevert,extraFormatters:p,abiCoder:h}).createFunction();return b(t.options,t.callback);default:throw new Error('Method "'+t.type+'" not implemented.')}},e.exports=d},function(e,t,r){"use strict";var n=r(0)(r(1)),i=r(2).Buffer,o=r(10),a=r(16),s=r(116).AbiCoder,u=r(116).ParamType,f=new s((function(e,t){return!e.match(/^u?int/)||o.isArray(t)||o.isObject(t)&&"BN"===t.constructor.name?t:t.toString()}));function c(){}var h=function(){};h.prototype.encodeFunctionSignature=function(e){return o.isObject(e)&&(e=a._jsonInterfaceMethodToString(e)),a.sha3(e).slice(0,10)},h.prototype.encodeEventSignature=function(e){return o.isObject(e)&&(e=a._jsonInterfaceMethodToString(e)),a.sha3(e)},h.prototype.encodeParameter=function(e,t){return this.encodeParameters([e],[t])},h.prototype.encodeParameters=function(e,t){var r=this;return e=r.mapTypes(e),t=t.map((function(t,i){var o=e[i];if("object"===(0,n.default)(o)&&o.type&&(o=o.type),t=r.formatParam(o,t),"string"==typeof o&&o.includes("tuple")){!function e(t,n){if("array"===t.name)return n.map((function(r){return e(f._getCoder(u.from(t.type.replace("[]",""))),r)}));t.coders.forEach((function(t,i){"tuple"===t.name?e(t,n[i]):n[i]=r.formatParam(t.name,n[i])}))}(f._getCoder(u.from(o)),t)}return t})),f.encode(e,t)},h.prototype.mapTypes=function(e){var t=this,r=[];return e.forEach((function(e){if("object"===(0,n.default)(e)&&"function"===e.type&&(e.type="bytes24"),t.isSimplifiedStructFormat(e)){var i=Object.keys(e)[0];r.push(Object.assign(t.mapStructNameAndType(i),{components:t.mapStructToCoderFormat(e[i])}))}else r.push(e)})),r},h.prototype.isSimplifiedStructFormat=function(e){return"object"===(0,n.default)(e)&&void 0===e.components&&void 0===e.name},h.prototype.mapStructNameAndType=function(e){var t="tuple";return e.indexOf("[]")>-1&&(t="tuple[]",e=e.slice(0,-2)),{type:t,name:e}},h.prototype.mapStructToCoderFormat=function(e){var t=this,r=[];return Object.keys(e).forEach((function(i){"object"!==(0,n.default)(e[i])?r.push({name:i,type:e[i]}):r.push(Object.assign(t.mapStructNameAndType(i),{components:t.mapStructToCoderFormat(e[i])}))})),r},h.prototype.formatParam=function(e,t){var r=this,n=new RegExp(/^bytes([0-9]*)$/),o=new RegExp(/^bytes([0-9]*)\[\]$/),s=new RegExp(/^(u?int)([0-9]*)$/),u=new RegExp(/^(u?int)([0-9]*)\[\]$/);if(a.isBN(t)||a.isBigNumber(t))return t.toString(10);if(e.match(o)||e.match(u))return t.map((function(t){return r.formatParam(e.replace("[]",""),t)}));var f=e.match(s);if(f){var c=parseInt(f[2]||"256");c/80&&(!t||"0x"===t||"0X"===t))throw new Error("Returned values aren't valid, did it run Out of Gas? You might also see this error if you are not using the correct ABI for the contract you are retrieving data from, requesting data from a block number that does not exist, or querying a node which is not fully synced.");var r=f.decode(this.mapTypes(e),"0x"+t.replace(/0x/i,"")),n=new c;return n.__length__=0,e.forEach((function(e,t){var i=r[n.__length__];i="0x"===i?null:i,n[t]=i,o.isObject(e)&&e.name&&(n[e.name]=i),n.__length__++})),n},h.prototype.decodeLog=function(e,t,r){var n=this;r=o.isArray(r)?r:[r],t=t||"";var i=[],a=[],s=0;e.forEach((function(e,t){e.indexed?(a[t]=["bool","int","uint","address","fixed","ufixed"].find((function(t){return-1!==e.type.indexOf(t)}))?n.decodeParameter(e.type,r[s]):r[s],s++):i[t]=e}));var u=t,f=u?this.decodeParameters(i,u):[],h=new c;return h.__length__=0,e.forEach((function(e,t){h[t]="string"===e.type?"":null,void 0!==f[t]&&(h[t]=f[t]),void 0!==a[t]&&(h[t]=a[t]),e.name&&(h[e.name]=h[t]),h.__length__++})),h};var d=new h;e.exports=d},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ConstructorFragment",{enumerable:!0,get:function(){return n.ConstructorFragment}}),Object.defineProperty(t,"EventFragment",{enumerable:!0,get:function(){return n.EventFragment}}),Object.defineProperty(t,"FormatTypes",{enumerable:!0,get:function(){return n.FormatTypes}}),Object.defineProperty(t,"Fragment",{enumerable:!0,get:function(){return n.Fragment}}),Object.defineProperty(t,"FunctionFragment",{enumerable:!0,get:function(){return n.FunctionFragment}}),Object.defineProperty(t,"ParamType",{enumerable:!0,get:function(){return n.ParamType}}),Object.defineProperty(t,"AbiCoder",{enumerable:!0,get:function(){return i.AbiCoder}}),Object.defineProperty(t,"defaultAbiCoder",{enumerable:!0,get:function(){return i.defaultAbiCoder}}),Object.defineProperty(t,"checkResultErrors",{enumerable:!0,get:function(){return o.checkResultErrors}}),Object.defineProperty(t,"Indexed",{enumerable:!0,get:function(){return o.Indexed}}),Object.defineProperty(t,"Interface",{enumerable:!0,get:function(){return o.Interface}}),Object.defineProperty(t,"LogDescription",{enumerable:!0,get:function(){return o.LogDescription}}),Object.defineProperty(t,"TransactionDescription",{enumerable:!0,get:function(){return o.TransactionDescription}});var n=r(74),i=r(119),o=r(271)},function(e,t,r){"use strict";function n(t,r){return e.exports=n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},n(t,r)}e.exports=n},function(e,t,r){"use strict";e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.defaultAbiCoder=t.AbiCoder=void 0;var i=n(r(6)),o=n(r(7)),a=r(12),s=r(31),u=r(14),f=r(38),c=r(21),h=r(259),d=r(120),l=r(261),p=r(121),b=r(263),m=r(264),y=r(265),v=r(266),g=r(270),w=r(74),_=new u.Logger(f.version),k=new RegExp(/^bytes([0-9]*)$/),A=new RegExp(/^(u?int)([0-9]*)$/),S=function(){function e(t){(0,i.default)(this,e),_.checkNew(this instanceof e?this.constructor:void 0,e),(0,s.defineReadOnly)(this,"coerceFunc",t||null)}return(0,o.default)(e,[{key:"_getCoder",value:function(e){var t=this;switch(e.baseType){case"address":return new h.AddressCoder(e.name);case"bool":return new l.BooleanCoder(e.name);case"string":return new v.StringCoder(e.name);case"bytes":return new p.BytesCoder(e.name);case"array":return new d.ArrayCoder(this._getCoder(e.arrayChildren),e.arrayLength,e.name);case"tuple":return new g.TupleCoder((e.components||[]).map((function(e){return t._getCoder(e)})),e.name);case"":return new m.NullCoder(e.name)}var r=e.type.match(A);if(r){var n=parseInt(r[2]||"256");return(0===n||n>256||n%8!=0)&&_.throwArgumentError("invalid "+r[1]+" bit length","param",e),new y.NumberCoder(n/8,"int"===r[1],e.name)}if(r=e.type.match(k)){var i=parseInt(r[1]);return(0===i||i>32)&&_.throwArgumentError("invalid bytes length","param",e),new b.FixedBytesCoder(i,e.name)}return _.throwArgumentError("invalid type","type",e.type)}},{key:"_getWordSize",value:function(){return 32}},{key:"_getReader",value:function(e){return new c.Reader(e,this._getWordSize(),this.coerceFunc)}},{key:"_getWriter",value:function(){return new c.Writer(this._getWordSize())}},{key:"encode",value:function(e,t){var r=this;e.length!==t.length&&_.throwError("types/values length mismatch",u.Logger.errors.INVALID_ARGUMENT,{count:{types:e.length,values:t.length},value:{types:e,values:t}});var n=e.map((function(e){return r._getCoder(w.ParamType.from(e))})),i=new g.TupleCoder(n,"_"),o=this._getWriter();return i.encode(o,t),o.data}},{key:"decode",value:function(e,t){var r=this,n=e.map((function(e){return r._getCoder(w.ParamType.from(e))}));return new g.TupleCoder(n,"_").decode(this._getReader((0,a.arrayify)(t)))}}]),e}();t.AbiCoder=S;var E=new S;t.defaultAbiCoder=E},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.pack=m,t.unpack=y,t.ArrayCoder=void 0;var i=n(r(6)),o=n(r(7)),a=n(r(18)),s=n(r(19)),u=n(r(15)),f=n(r(1)),c=r(14),h=r(38),d=r(21),l=r(260);function p(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,u.default)(e);if(t){var i=(0,u.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,s.default)(this,r)}}var b=new c.Logger(h.version);function m(e,t,r){if(Array.isArray(r));else if(r&&"object"===(0,f.default)(r)){var n=[];t.forEach((function(e){n.push(r[e.localName])})),r=n}else b.throwArgumentError("invalid tuple value","tuple",r);t.length!==r.length&&b.throwArgumentError("types/value length mismatch","tuple",r);var i=new d.Writer(e.wordSize),o=new d.Writer(e.wordSize),a=[];t.forEach((function(e,t){var n=r[t];if(e.dynamic){var s=o.length;e.encode(o,n);var u=i.writeUpdatableValue();a.push((function(e){u(e+s)}))}else e.encode(i,n)})),a.forEach((function(e){e(i.length)}));var s=e.writeBytes(i.data);return s+=e.writeBytes(o.data)}function y(e,t){var r=[],n=e.subReader(0),i=0;t.forEach((function(t){var o=null;if(t.dynamic){var a=e.readValue(),s=n.subReader(a.toNumber());try{o=t.decode(s)}catch(e){if(e.code===c.Logger.errors.BUFFER_OVERRUN)throw e;(o=e).baseType=t.name,o.name=t.localName,o.type=t.type}i+=s.consumed}else try{o=t.decode(e)}catch(e){if(e.code===c.Logger.errors.BUFFER_OVERRUN)throw e;(o=e).baseType=t.name,o.name=t.localName,o.type=t.type}null!=o&&r.push(o)})),e.readBytes(i),t.forEach((function(e,t){var n=e.localName;if(n&&("length"===n&&(n="_length"),null==r[n])){var i=r[t];i instanceof Error?Object.defineProperty(r,n,{get:function(){throw i}}):r[n]=i}}));for(var o=function(e){var t=r[e];t instanceof Error&&Object.defineProperty(r,e,{get:function(){throw t}})},a=0;a=0?n:"")+"]",u=-1===n||e.dynamic;return(a=t.call(this,"array",s,o,u)).coder=e,a.length=n,a}return(0,o.default)(r,[{key:"encode",value:function(e,t){Array.isArray(t)||this._throwError("expected array value",t);var r=this.length;-1===r&&(r=t.length,e.writeValue(t.length)),b.checkArgumentCount(r,t.length,"coder array"+(this.localName?" "+this.localName:""));for(var n=[],i=0;i=0;i--){var s=n(a[i]);r=n(new e(r+s,"hex"))}}return"0x"+r},t.normalize=o}).call(this,r(2).Buffer)},function(e,t,r){"use strict";(function(t){var n=r(39);function i(e){return parseInt(e.toString("hex"),16)}function o(e){var r=e.toString(16);return r.length%2==1&&(r="0"+r),t.from(r,"hex")}e.exports={numberToBuffer:o,bufferToNumber:i,varintBufferEncode:function(e){return t.from(n.encode(i(e)))},varintBufferDecode:function(e){return o(n.decode(e))},varintEncode:function(e){return t.from(n.encode(e))}}}).call(this,r(2).Buffer)},function(e,t,r){"use strict";var n=r(127);e.exports=function(e,t){if(e){if("string"==typeof e)return n(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}}},function(e,t,r){"use strict";e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&void 0!==arguments[0]?arguments[0]:this.multibaseName;if(this.string&&e===this.multibaseName)return this.string;var t=null;if(0===this.version){if("base58btc"!==e)throw new Error("not supported with CIDv0, to support different bases, please migrate the instance do CIDv1, you can do that through cid.toV1()");t=s.toB58String(this.multihash)}else{if(1!==this.version)throw new Error("unsupported version");t=u.encode(e,this.buffer).toString()}return e===this.multibaseName&&Object.defineProperty(this,"string",{value:t}),t}},{key:Symbol.for("nodejs.util.inspect.custom"),value:function(){return"CID("+this.toString()+")"}},{key:"toString",value:function(e){return this.toBaseEncodedString(e)}},{key:"toJSON",value:function(){return{codec:this.codec,version:this.version,hash:this.multihash}}},{key:"equals",value:function(e){return this.codec===e.codec&&this.version===e.version&&this.multihash.equals(e.multihash)}},{key:"buffer",get:function(){var e=this._buffer;if(!e){if(0===this.version)e=this.multihash;else{if(1!==this.version)throw new Error("unsupported version");e=a.concat([a.from("01","hex"),f.getCodeVarint(this.codec),this.multihash])}Object.defineProperty(this,"_buffer",{value:e})}return e}},{key:"prefix",get:function(){return a.concat([a.from("0".concat(this.version),"hex"),f.getCodeVarint(this.codec),s.prefix(this.multihash)])}}],[{key:"validateCID",value:function(e){var t=h.checkCIDComponents(e);if(t)throw new Error(t)}}]),e}(),{className:"CID",symbolName:"@ipld/js-cid/CID"});d.codecs=c,e.exports=d},function(e,t,r){"use strict";var n=r(4).Buffer;e.exports=function(e){if(e.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),r=0;r>>0,c=new Uint8Array(a);e[r];){var h=t[e.charCodeAt(r)];if(255===h)return;for(var d=0,l=a-1;(0!==h||d>>0,c[l]=h%256>>>0,h=h/256>>>0;if(0!==h)throw new Error("Non-zero carry");o=d,r++}if(" "!==e[r]){for(var p=a-o;p!==a&&0===c[p];)p++;var b=n.allocUnsafe(i+(a-p));b.fill(0,0,i);for(var m=i;p!==a;)b[m++]=c[p++];return b}}}return{encode:function(t){if((Array.isArray(t)||t instanceof Uint8Array)&&(t=n.from(t)),!n.isBuffer(t))throw new TypeError("Expected Buffer");if(0===t.length)return"";for(var r=0,i=0,o=0,a=t.length;o!==a&&0===t[o];)o++,r++;for(var f=(a-o)*c+1>>>0,h=new Uint8Array(f);o!==a;){for(var d=t[o],l=0,p=f-1;(0!==d||l>>0,h[p]=d%s>>>0,d=d/s>>>0;if(0!==d)throw new Error("Non-zero carry");i=l,o++}for(var b=f-i;b!==f&&0===h[b];)b++;for(var m=u.repeat(r);b=this._blockSize;){for(var o=this._blockOffset;o0;++a)this._length[a]+=s,(s=this._length[a]/4294967296|0)>0&&(this._length[a]-=4294967296*s);return this},o.prototype._update=function(){throw new Error("_update is not implemented")},o.prototype.digest=function(e){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var t=this._digest();void 0!==e&&(t=t.toString(e)),this._block.fill(0),this._blockOffset=0;for(var r=0;r<4;++r)this._length[r]=0;return t},o.prototype._digest=function(){throw new Error("_digest is not implemented")},e.exports=o},function(e,t,r){"use strict";var n=r(3),i=r(32),o=r(4).Buffer,a=[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],s=new Array(64);function u(){this.init(),this._w=s,i.call(this,64,56)}function f(e,t,r){return r^e&(t^r)}function c(e,t,r){return e&t|r&(e|t)}function h(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function d(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function l(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}n(u,i),u.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},u.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,u=0|this._e,p=0|this._f,b=0|this._g,m=0|this._h,y=0;y<16;++y)r[y]=e.readInt32BE(4*y);for(;y<64;++y)r[y]=0|(((t=r[y-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+r[y-7]+l(r[y-15])+r[y-16];for(var v=0;v<64;++v){var g=m+d(u)+f(u,p,b)+a[v]+r[v]|0,w=h(n)+c(n,i,o)|0;m=b,b=p,p=u,u=s+g|0,s=o,o=i,i=n,n=g+w|0}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0,this._f=p+this._f|0,this._g=b+this._g|0,this._h=m+this._h|0},u.prototype._hash=function(){var e=o.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},e.exports=u},function(e,t,r){"use strict";var n=r(3),i=r(32),o=r(4).Buffer,a=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],s=new Array(160);function u(){this.init(),this._w=s,i.call(this,128,112)}function f(e,t,r){return r^e&(t^r)}function c(e,t,r){return e&t|r&(e|t)}function h(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function d(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function l(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function p(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function b(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function m(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function y(e,t){return e>>>0>>0?1:0}n(u,i),u.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},u.prototype._update=function(e){for(var t=this._w,r=0|this._ah,n=0|this._bh,i=0|this._ch,o=0|this._dh,s=0|this._eh,u=0|this._fh,v=0|this._gh,g=0|this._hh,w=0|this._al,_=0|this._bl,k=0|this._cl,A=0|this._dl,S=0|this._el,E=0|this._fl,x=0|this._gl,M=0|this._hl,I=0;I<32;I+=2)t[I]=e.readInt32BE(4*I),t[I+1]=e.readInt32BE(4*I+4);for(;I<160;I+=2){var O=t[I-30],C=t[I-30+1],P=l(O,C),T=p(C,O),U=b(O=t[I-4],C=t[I-4+1]),B=m(C,O),R=t[I-14],N=t[I-14+1],j=t[I-32],L=t[I-32+1],F=T+N|0,D=P+R+y(F,T)|0;D=(D=D+U+y(F=F+B|0,B)|0)+j+y(F=F+L|0,L)|0,t[I]=D,t[I+1]=F}for(var q=0;q<160;q+=2){D=t[q],F=t[q+1];var z=c(r,n,i),H=c(w,_,k),K=h(r,w),V=h(w,r),G=d(s,S),W=d(S,s),Y=a[q],$=a[q+1],J=f(s,u,v),Z=f(S,E,x),X=M+W|0,Q=g+G+y(X,M)|0;Q=(Q=(Q=Q+J+y(X=X+Z|0,Z)|0)+Y+y(X=X+$|0,$)|0)+D+y(X=X+F|0,F)|0;var ee=V+H|0,te=K+z+y(ee,V)|0;g=v,M=x,v=u,x=E,u=s,E=S,s=o+Q+y(S=A+X|0,A)|0,o=i,A=k,i=n,k=_,n=r,_=w,r=Q+te+y(w=X+ee|0,X)|0}this._al=this._al+w|0,this._bl=this._bl+_|0,this._cl=this._cl+k|0,this._dl=this._dl+A|0,this._el=this._el+S|0,this._fl=this._fl+E|0,this._gl=this._gl+x|0,this._hl=this._hl+M|0,this._ah=this._ah+r+y(this._al,w)|0,this._bh=this._bh+n+y(this._bl,_)|0,this._ch=this._ch+i+y(this._cl,k)|0,this._dh=this._dh+o+y(this._dl,A)|0,this._eh=this._eh+s+y(this._el,S)|0,this._fh=this._fh+u+y(this._fl,E)|0,this._gh=this._gh+v+y(this._gl,x)|0,this._hh=this._hh+g+y(this._hl,M)|0},u.prototype._hash=function(){var e=o.allocUnsafe(64);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},e.exports=u},function(e,t,r){"use strict";var n=r(3),i=r(333),o=r(24),a=r(4).Buffer,s=r(136),u=r(79),f=r(80),c=a.alloc(128);function h(e,t){o.call(this,"digest"),"string"==typeof t&&(t=a.from(t));var r="sha512"===e||"sha384"===e?128:64;(this._alg=e,this._key=t,t.length>r)?t=("rmd160"===e?new u:f(e)).update(t).digest():t.lengthr||o!=o)throw new TypeError("Bad key length")}}).call(this,r(2).Buffer)},function(e,t,r){"use strict";(function(t){var r;t.browser?r="utf-8":r=parseInt(t.version.split(".")[0].slice(1),10)>=6?"utf-8":"binary";e.exports=r}).call(this,r(11))},function(e,t,r){"use strict";var n=r(136),i=r(79),o=r(80),a=r(139),s=r(140),u=r(4).Buffer,f=u.alloc(128),c={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function h(e,t,r){var a=function(e){function t(t){return o(e).update(t).digest()}return"rmd160"===e||"ripemd160"===e?function(e){return(new i).update(e).digest()}:"md5"===e?n:t}(e),s="sha512"===e||"sha384"===e?128:64;t.length>s?t=a(t):t.lengthe;)r.ishrn(1);if(r.isEven()&&r.iadd(s),r.testn(1)||r.iadd(u),t.cmp(u)){if(!t.cmp(f))for(;r.mod(c).cmp(h);)r.iadd(l)}else for(;r.mod(o).cmp(d);)r.iadd(l);if(m(p=r.shrn(1))&&m(r)&&y(p)&&y(r)&&a.test(p)&&a.test(r))return r}}},function(e,t,r){"use strict";var n=r(5),i=r(51);function o(e){this.rand=e||new i.Rand}e.exports=o,o.create=function(e){return new o(e)},o.prototype._randbelow=function(e){var t=e.bitLength(),r=Math.ceil(t/8);do{var i=new n(this.rand.generate(r))}while(i.cmp(e)>=0);return i},o.prototype._randrange=function(e,t){var r=t.sub(e);return e.add(this._randbelow(r))},o.prototype.test=function(e,t,r){var i=e.bitLength(),o=n.mont(e),a=new n(1).toRed(o);t||(t=Math.max(1,i/48|0));for(var s=e.subn(1),u=0;!s.testn(u);u++);for(var f=e.shrn(u),c=s.toRed(o);t>0;t--){var h=this._randrange(new n(2),s);r&&r(h);var d=h.toRed(o).redPow(f);if(0!==d.cmp(a)&&0!==d.cmp(c)){for(var l=1;l0;t--){var c=this._randrange(new n(2),a),h=e.gcd(c);if(0!==h.cmpn(1))return h;var d=c.toRed(i).redPow(u);if(0!==d.cmp(o)&&0!==d.cmp(f)){for(var l=1;l>6],i=0==(32&r);if(31==(31&r)){var o=r;for(r=0;128==(128&o);){if(o=e.readUInt8(t),e.isError(o))return o;r<<=7,r|=127&o}}else r&=31;return{cls:n,primitive:i,tag:r,tagStr:s.tag[r]}}function h(e,t,r){var n=e.readUInt8(r);if(e.isError(n))return n;if(!t&&128===n)return null;if(0==(128&n))return n;var i=127&n;if(i>4)return e.error("length octect is too long");n=0;for(var o=0;o=31)return n.error("Multi-octet tag encoding unsupported");t||(i|=32);return i|=s.tagClassByName[r||"universal"]<<6}(e,t,r,this.reporter);if(n.length<128)return(o=new i(2))[0]=a,o[1]=n.length,this._createEncoderBuffer([o,n]);for(var u=1,f=n.length;f>=256;f>>=8)u++;(o=new i(2+u))[0]=a,o[1]=128|u;f=1+u;for(var c=n.length;c>0;f--,c>>=8)o[f]=255&c;return this._createEncoderBuffer([o,n])},f.prototype._encodeStr=function(e,t){if("bitstr"===t)return this._createEncoderBuffer([0|e.unused,e.data]);if("bmpstr"===t){for(var r=new i(2*e.length),n=0;n=40)return this.reporter.error("Second objid identifier OOB");e.splice(0,2,40*e[0]+e[1])}var o=0;for(n=0;n=128;a>>=7)o++}var s=new i(o),u=s.length-1;for(n=e.length-1;n>=0;n--){a=e[n];for(s[u--]=127&a;(a>>=7)>0;)s[u--]=128|127&a}return this._createEncoderBuffer(s)},f.prototype._encodeTime=function(e,t){var r,n=new Date(e);return"gentime"===t?r=[c(n.getFullYear()),c(n.getUTCMonth()+1),c(n.getUTCDate()),c(n.getUTCHours()),c(n.getUTCMinutes()),c(n.getUTCSeconds()),"Z"].join(""):"utctime"===t?r=[c(n.getFullYear()%100),c(n.getUTCMonth()+1),c(n.getUTCDate()),c(n.getUTCHours()),c(n.getUTCMinutes()),c(n.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+t+" time is not supported yet"),this._encodeStr(r,"octstr")},f.prototype._encodeNull=function(){return this._createEncoderBuffer("")},f.prototype._encodeInt=function(e,t){if("string"==typeof e){if(!t)return this.reporter.error("String int or enum given, but no values map");if(!t.hasOwnProperty(e))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(e));e=t[e]}if("number"!=typeof e&&!i.isBuffer(e)){var r=e.toArray();!e.sign&&128&r[0]&&r.unshift(0),e=new i(r)}if(i.isBuffer(e)){var n=e.length;0===e.length&&n++;var o=new i(n);return e.copy(o),0===e.length&&(o[0]=0),this._createEncoderBuffer(o)}if(e<128)return this._createEncoderBuffer(e);if(e<256)return this._createEncoderBuffer([0,e]);n=1;for(var a=e;a>=256;a>>=8)n++;for(a=(o=new Array(n)).length-1;a>=0;a--)o[a]=255&e,e>>=8;return 128&o[0]&&o.unshift(0),this._createEncoderBuffer(new i(o))},f.prototype._encodeBool=function(e){return this._createEncoderBuffer(e?255:0)},f.prototype._use=function(e,t){return"function"==typeof e&&(e=e(t)),e._getEncoder("der").tree},f.prototype._skipDefault=function(e,t,r){var n,i=this._baseState;if(null===i.default)return!1;var o=e.join();if(void 0===i.defaultBuffer&&(i.defaultBuffer=this._encodeValue(i.default,t,r).join()),o.length!==i.defaultBuffer.length)return!1;for(n=0;n="80"?r(n.length/2,128):"")+n}var i=t.map(e).join("");return r(i.length/2,192)+i}(e)},decode:function(e){var t=2,r=function(){if(t>=e.length)throw"";var r=e.slice(t,t+2);return r<"80"?(t+=2,"0x"+r):r<"c0"?i():o()},n=function(){var r=parseInt(e.slice(t,t+=2),16)%64;return r<56?r:parseInt(e.slice(t,t+=2*(r-55)),16)},i=function(){var r=n();return"0x"+e.slice(t,t+=2*r)},o=function(){for(var e=2*n()+t,i=[];t>>((3&t)<<3)&255;return o}}},function(e,t,r){"use strict";for(var n=[],i=0;i<256;++i)n[i]=(i+256).toString(16).substr(1);e.exports=function(e,t){var r=t||0,i=n;return[i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]],"-",i[e[r++]],i[e[r++]],"-",i[e[r++]],i[e[r++]],"-",i[e[r++]],i[e[r++]],"-",i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]]].join("")}},function(e,t,r){"use strict";var n=function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=2*this.getChainId()+35&&this._common.gteHardfork("spuriousDragon");this._senderPubKey=i.ecrecover(e,t,this.r,this.s,r?this.getChainId():void 0)}catch(e){return!1}return!!this._senderPubKey},e.prototype.sign=function(e){this.v=new a.Buffer([]),this.s=new a.Buffer([]),this.r=new a.Buffer([]);var t=this.hash(!1),r=i.ecsign(t,e);this._implementsEIP155()&&(r.v+=2*this.getChainId()+8),Object.assign(this,r)},e.prototype.getDataFee=function(){for(var e=this.raw[5],t=new i.BN(0),r=0;r0&&t.push(["gas limit is too low. Need at least "+this.getBaseFee()]),!1===e?0===t.length:t.join(" ")},e.prototype.serialize=function(){return i.rlp.encode(this.raw)},e.prototype.toJSON=function(e){return void 0===e&&(e=!1),{}},e.prototype._validateV=function(e){if(void 0!==e&&0!==e.length&&this._common.gteHardfork("spuriousDragon")){var t=i.bufferToInt(e);if(27!==t&&28!==t)if(!(t===2*this.getChainId()+35||t===2*this.getChainId()+36))throw new Error("Incompatible EIP155-based V "+t+" and chain id "+this.getChainId()+". See the second parameter of the Transaction constructor to set the chain id.")}},e.prototype._isSigned=function(){return this.v.length>0&&this.r.length>0&&this.s.length>0},e.prototype._overrideVSetterWithValidation=function(){var e=this,t=Object.getOwnPropertyDescriptor(this,"v");Object.defineProperty(this,"v",n({},t,{set:function(r){void 0!==r&&e._validateV(i.toBuffer(r)),t.set(r)}}))},e.prototype._implementsEIP155=function(){var e=this._common.gteHardfork("spuriousDragon");if(!this._isSigned())return e;var t=i.bufferToInt(this.v);return(t===2*this.getChainId()+35||t===2*this.getChainId()+36)&&e},e}();t.default=u},function(e,t,r){"use strict";var n=r(0)(r(1));Object.defineProperty(t,"__esModule",{value:!0});var i=r(5);t.BN=i;var o=r(397);t.rlp=o;var a=r(398),s=r(404);t.secp256k1=s;var u=r(410),f=r(30),c=r(4).Buffer,h=r(411);function d(e,t){return t?e-(2*t+35):e-27}function l(e){return 0===e||1===e}Object.assign(t,h),t.MAX_INTEGER=new i("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",16),t.TWO_POW256=new i("10000000000000000000000000000000000000000000000000000000000000000",16),t.KECCAK256_NULL_S="c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",t.KECCAK256_NULL=c.from(t.KECCAK256_NULL_S,"hex"),t.KECCAK256_RLP_ARRAY_S="1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",t.KECCAK256_RLP_ARRAY=c.from(t.KECCAK256_RLP_ARRAY_S,"hex"),t.KECCAK256_RLP_S="56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",t.KECCAK256_RLP=c.from(t.KECCAK256_RLP_S,"hex"),t.zeros=function(e){return c.allocUnsafe(e).fill(0)},t.zeroAddress=function(){var e=t.zeros(20);return t.bufferToHex(e)},t.setLengthLeft=function(e,r,n){void 0===n&&(n=!1);var i=t.zeros(r);return e=t.toBuffer(e),n?e.length0&&"0"===t.toString();)t=(e=e.slice(1))[0];return e},t.stripZeros=t.unpad,t.toBuffer=function(e){if(!c.isBuffer(e))if(Array.isArray(e))e=c.from(e);else if("string"==typeof e)e=t.isHexString(e)?c.from(t.padToEven(t.stripHexPrefix(e)),"hex"):c.from(e);else if("number"==typeof e)e=t.intToBuffer(e);else if(null==e)e=c.allocUnsafe(0);else if(i.isBN(e))e=e.toArrayLike(c);else{if(!e.toArray)throw new Error("invalid type");e=c.from(e.toArray())}return e},t.bufferToInt=function(e){return new i(t.toBuffer(e)).toNumber()},t.bufferToHex=function(e){return"0x"+(e=t.toBuffer(e)).toString("hex")},t.fromSigned=function(e){return new i(e).fromTwos(256)},t.toUnsigned=function(e){return c.from(e.toTwos(256).toArray())},t.keccak=function(e,r){return void 0===r&&(r=256),e=t.toBuffer(e),r||(r=256),a("keccak"+r).update(e).digest()},t.keccak256=function(e){return t.keccak(e)},t.sha256=function(e){return e=t.toBuffer(e),f("sha256").update(e).digest()},t.ripemd160=function(e,r){e=t.toBuffer(e);var n=f("rmd160").update(e).digest();return!0===r?t.setLength(n,32):n},t.rlphash=function(e){return t.keccak(o.encode(e))},t.isValidPrivate=function(e){return s.privateKeyVerify(e)},t.isValidPublic=function(e,t){return void 0===t&&(t=!1),64===e.length?s.publicKeyVerify(c.concat([c.from([4]),e])):!!t&&s.publicKeyVerify(e)},t.pubToAddress=function(e,r){return void 0===r&&(r=!1),e=t.toBuffer(e),r&&64!==e.length&&(e=s.publicKeyConvert(e,!1).slice(1)),u(64===e.length),t.keccak(e).slice(-20)},t.publicToAddress=t.pubToAddress,t.privateToPublic=function(e){return e=t.toBuffer(e),s.publicKeyCreate(e,!1).slice(1)},t.importPublic=function(e){return 64!==(e=t.toBuffer(e)).length&&(e=s.publicKeyConvert(e,!1).slice(1)),e},t.ecsign=function(e,t,r){var n=s.sign(e,t),i=n.recovery;return{r:n.signature.slice(0,32),s:n.signature.slice(32,64),v:r?i+(2*r+35):i+27}},t.hashPersonalMessage=function(e){var r=t.toBuffer("Ethereum Signed Message:\n"+e.length.toString());return t.keccak(c.concat([r,e]))},t.ecrecover=function(e,r,n,i,o){var a=c.concat([t.setLength(n,32),t.setLength(i,32)],64),u=d(r,o);if(!l(u))throw new Error("Invalid signature v value");var f=s.recover(e,a,u);return s.publicKeyConvert(f,!1).slice(1)},t.toRpcSig=function(e,r,n,i){if(!l(d(e,i)))throw new Error("Invalid signature v value");return t.bufferToHex(c.concat([t.setLengthLeft(r,32),t.setLengthLeft(n,32),t.toBuffer(e)]))},t.fromRpcSig=function(e){var r=t.toBuffer(e);if(65!==r.length)throw new Error("Invalid signature length");var n=r[64];return n<27&&(n+=27),{v:n,r:r.slice(0,32),s:r.slice(32,64)}},t.privateToAddress=function(e){return t.publicToAddress(t.privateToPublic(e))},t.isValidAddress=function(e){return/^0x[0-9a-fA-F]{40}$/.test(e)},t.isZeroAddress=function(e){return t.zeroAddress()===t.addHexPrefix(e)},t.toChecksumAddress=function(e){e=h.stripHexPrefix(e).toLowerCase();for(var r=t.keccak(e).toString("hex"),n="0x",i=0;i=8?n+=e[i].toUpperCase():n+=e[i];return n},t.isValidChecksumAddress=function(e){return t.isValidAddress(e)&&t.toChecksumAddress(e)===e},t.generateAddress=function(e,r){e=t.toBuffer(e);var n=new i(r);return n.isZero()?t.rlphash([e,null]).slice(-20):t.rlphash([e,c.from(n.toArray())]).slice(-20)},t.generateAddress2=function(e,r,n){var i=t.toBuffer(e),o=t.toBuffer(r),a=t.toBuffer(n);return u(20===i.length),u(32===o.length),t.keccak256(c.concat([c.from("ff","hex"),i,o,t.keccak256(a)])).slice(-20)},t.isPrecompiled=function(e){var r=t.unpad(e);return 1===r.length&&r[0]>=1&&r[0]<=8},t.addHexPrefix=function(e){return"string"!=typeof e||h.isHexPrefixed(e)?e:"0x"+e},t.isValidSignature=function(e,t,r,n,o){void 0===n&&(n=!0);var a=new i("7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0",16),s=new i("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",16);if(32!==t.length||32!==r.length)return!1;if(!l(d(e,o)))return!1;var u=new i(t),f=new i(r);return!(u.isZero()||u.gt(s)||f.isZero()||f.gt(s))&&(!n||1!==f.cmp(a))},t.baToJSON=function(e){if(c.isBuffer(e))return"0x"+e.toString("hex");if(e instanceof Array){for(var r=[],n=0;n=i.length,"The field "+r.name+" must not have more "+r.length+" bytes")):r.allowZero&&0===i.length||!r.length||u(r.length===i.length,"The field "+r.name+" must have byte length of "+r.length),e.raw[n]=i}e._fields.push(r.name),Object.defineProperty(e,r.name,{enumerable:!0,configurable:!0,get:i,set:o}),r.default&&(e[r.name]=r.default),r.alias&&Object.defineProperty(e,r.alias,{enumerable:!1,configurable:!0,set:o,get:i})})),i)if("string"==typeof i&&(i=c.from(h.stripHexPrefix(i),"hex")),c.isBuffer(i)&&(i=o.decode(i)),Array.isArray(i)){if(i.length>e._fields.length)throw new Error("wrong number of fields in data");i.forEach((function(r,n){e[e._fields[n]]=t.toBuffer(r)}))}else{if("object"!==(0,n.default)(i))throw new Error("invalid data");var a=Object.keys(i);r.forEach((function(t){-1!==a.indexOf(t.name)&&(e[t.name]=i[t.name]),-1!==a.indexOf(t.alias)&&(e[t.alias]=i[t.alias])}))}}},function(e){e.exports=JSON.parse('{"COMPRESSED_TYPE_INVALID":"compressed should be a boolean","EC_PRIVATE_KEY_TYPE_INVALID":"private key should be a Buffer","EC_PRIVATE_KEY_LENGTH_INVALID":"private key length is invalid","EC_PRIVATE_KEY_RANGE_INVALID":"private key range is invalid","EC_PRIVATE_KEY_TWEAK_ADD_FAIL":"tweak out of range or resulting private key is invalid","EC_PRIVATE_KEY_TWEAK_MUL_FAIL":"tweak out of range","EC_PRIVATE_KEY_EXPORT_DER_FAIL":"couldn\'t export to DER format","EC_PRIVATE_KEY_IMPORT_DER_FAIL":"couldn\'t import from DER format","EC_PUBLIC_KEYS_TYPE_INVALID":"public keys should be an Array","EC_PUBLIC_KEYS_LENGTH_INVALID":"public keys Array should have at least 1 element","EC_PUBLIC_KEY_TYPE_INVALID":"public key should be a Buffer","EC_PUBLIC_KEY_LENGTH_INVALID":"public key length is invalid","EC_PUBLIC_KEY_PARSE_FAIL":"the public key could not be parsed or is invalid","EC_PUBLIC_KEY_CREATE_FAIL":"private was invalid, try again","EC_PUBLIC_KEY_TWEAK_ADD_FAIL":"tweak out of range or resulting public key is invalid","EC_PUBLIC_KEY_TWEAK_MUL_FAIL":"tweak out of range","EC_PUBLIC_KEY_COMBINE_FAIL":"the sum of the public keys is not valid","ECDH_FAIL":"scalar was invalid (zero or overflow)","ECDSA_SIGNATURE_TYPE_INVALID":"signature should be a Buffer","ECDSA_SIGNATURE_LENGTH_INVALID":"signature length is invalid","ECDSA_SIGNATURE_PARSE_FAIL":"couldn\'t parse signature","ECDSA_SIGNATURE_PARSE_DER_FAIL":"couldn\'t parse DER signature","ECDSA_SIGNATURE_SERIALIZE_DER_FAIL":"couldn\'t serialize signature to DER format","ECDSA_SIGN_FAIL":"nonce generation function failed or private key is invalid","ECDSA_RECOVER_FAIL":"couldn\'t recover public key from signature","MSG32_TYPE_INVALID":"message should be a Buffer","MSG32_LENGTH_INVALID":"message length is invalid","OPTIONS_TYPE_INVALID":"options should be an Object","OPTIONS_DATA_TYPE_INVALID":"options.data should be a Buffer","OPTIONS_DATA_LENGTH_INVALID":"options.data length is invalid","OPTIONS_NONCEFN_TYPE_INVALID":"options.noncefn should be a Function","RECOVERY_ID_TYPE_INVALID":"recovery should be a Number","RECOVERY_ID_VALUE_INVALID":"recovery should have value between -1 and 4","TWEAK_TYPE_INVALID":"tweak should be a Buffer","TWEAK_LENGTH_INVALID":"tweak length is invalid"}')},function(e,t,r){"use strict";var n=r(0)(r(1)),i=function(){return(i=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0))return!0;for(var t=0,r=this._supportedHardforks;t=i},e.prototype.activeOnBlock=function(e,t){return this.hardforkIsActiveOnBlock(null,e,t)},e.prototype.hardforkGteHardfork=function(e,t,r){var n=void 0!==(r=void 0!==r?r:{}).onlyActive&&r.onlyActive;e=this._chooseHardfork(e,r.onlySupported);for(var i=-1,o=-1,a=0,s=0,u=n?this.activeHardforks(null,r):this.hardforks();s=o},e.prototype.gteHardfork=function(e,t){return this.hardforkGteHardfork(null,e,t)},e.prototype.hardforkIsActiveOnChain=function(e,t){var r=void 0!==(t=void 0!==t?t:{}).onlySupported&&t.onlySupported;e=this._chooseHardfork(e,r);for(var n=0,i=this.hardforks();n0)return r[r.length-1].name;throw new Error("No (supported) active hardfork found")},e.prototype.hardforkBlock=function(e){return e=this._chooseHardfork(e,!1),this._getHardfork(e).block},e.prototype.isHardforkBlock=function(e,t){return t=this._chooseHardfork(t,!1),this.hardforkBlock(t)===e},e.prototype.consensus=function(e){return e=this._chooseHardfork(e),this._getHardfork(e).consensus},e.prototype.finality=function(e){return e=this._chooseHardfork(e),this._getHardfork(e).finality},e.prototype.genesis=function(){return this._chainParams.genesis},e.prototype.hardforks=function(){return this._chainParams.hardforks},e.prototype.bootstrapNodes=function(){return this._chainParams.bootstrapNodes},e.prototype.hardfork=function(){return this._hardfork},e.prototype.chainId=function(){return this._chainParams.chainId},e.prototype.chainName=function(){return o.chains.names[this.chainId()]||this._chainParams.name},e.prototype.networkId=function(){return this._chainParams.networkId},e}();t.default=s},function(e,t,r){"use strict";var n=r(0)(r(1)),i=r(446),o="function"==typeof Symbol&&"symbol"===(0,n.default)(Symbol("foo")),a=Object.prototype.toString,s=Array.prototype.concat,u=Object.defineProperty,f=u&&function(){var e={};try{for(var t in u(e,"x",{enumerable:!1,value:e}),e)return!1;return e.x===e}catch(e){return!1}}(),c=function(e,t,r,n){var i;(!(t in e)||"function"==typeof(i=n)&&"[object Function]"===a.call(i)&&n())&&(f?u(e,t,{configurable:!0,enumerable:!1,value:r,writable:!0}):e[t]=r)},h=function(e,t){var r=arguments.length>2?arguments[2]:{},n=i(t);o&&(n=s.call(n,Object.getOwnPropertySymbols(t)));for(var a=0;a=0&&"[object Function]"===i.call(e.callee)),r}},function(e,t,r){"use strict";var n=r(86),i=r(448),o=n.call(Function.call,String.prototype.replace),a=/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/,s=/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/;e.exports=function(){var e=i.ToString(i.CheckObjectCoercible(this));return o(o(e,a,""),s,"")}},function(e,t,r){"use strict";var n=r(0)(r(1)),i=Object.getOwnPropertyDescriptor?function(){return Object.getOwnPropertyDescriptor(arguments,"callee").get}():function(){throw new TypeError},o="function"==typeof Symbol&&"symbol"===(0,n.default)(Symbol.iterator),a=Object.getPrototypeOf||function(e){return e.__proto__},s=void 0,u="undefined"==typeof Uint8Array?void 0:a(Uint8Array),f={"$ %Array%":Array,"$ %ArrayBuffer%":"undefined"==typeof ArrayBuffer?void 0:ArrayBuffer,"$ %ArrayBufferPrototype%":"undefined"==typeof ArrayBuffer?void 0:ArrayBuffer.prototype,"$ %ArrayIteratorPrototype%":o?a([][Symbol.iterator]()):void 0,"$ %ArrayPrototype%":Array.prototype,"$ %ArrayProto_entries%":Array.prototype.entries,"$ %ArrayProto_forEach%":Array.prototype.forEach,"$ %ArrayProto_keys%":Array.prototype.keys,"$ %ArrayProto_values%":Array.prototype.values,"$ %AsyncFromSyncIteratorPrototype%":void 0,"$ %AsyncFunction%":void 0,"$ %AsyncFunctionPrototype%":void 0,"$ %AsyncGenerator%":void 0,"$ %AsyncGeneratorFunction%":void 0,"$ %AsyncGeneratorPrototype%":void 0,"$ %AsyncIteratorPrototype%":s&&o&&Symbol.asyncIterator?s[Symbol.asyncIterator]():void 0,"$ %Atomics%":"undefined"==typeof Atomics?void 0:Atomics,"$ %Boolean%":Boolean,"$ %BooleanPrototype%":Boolean.prototype,"$ %DataView%":"undefined"==typeof DataView?void 0:DataView,"$ %DataViewPrototype%":"undefined"==typeof DataView?void 0:DataView.prototype,"$ %Date%":Date,"$ %DatePrototype%":Date.prototype,"$ %decodeURI%":decodeURI,"$ %decodeURIComponent%":decodeURIComponent,"$ %encodeURI%":encodeURI,"$ %encodeURIComponent%":encodeURIComponent,"$ %Error%":Error,"$ %ErrorPrototype%":Error.prototype,"$ %eval%":eval,"$ %EvalError%":EvalError,"$ %EvalErrorPrototype%":EvalError.prototype,"$ %Float32Array%":"undefined"==typeof Float32Array?void 0:Float32Array,"$ %Float32ArrayPrototype%":"undefined"==typeof Float32Array?void 0:Float32Array.prototype,"$ %Float64Array%":"undefined"==typeof Float64Array?void 0:Float64Array,"$ %Float64ArrayPrototype%":"undefined"==typeof Float64Array?void 0:Float64Array.prototype,"$ %Function%":Function,"$ %FunctionPrototype%":Function.prototype,"$ %Generator%":void 0,"$ %GeneratorFunction%":void 0,"$ %GeneratorPrototype%":void 0,"$ %Int8Array%":"undefined"==typeof Int8Array?void 0:Int8Array,"$ %Int8ArrayPrototype%":"undefined"==typeof Int8Array?void 0:Int8Array.prototype,"$ %Int16Array%":"undefined"==typeof Int16Array?void 0:Int16Array,"$ %Int16ArrayPrototype%":"undefined"==typeof Int16Array?void 0:Int8Array.prototype,"$ %Int32Array%":"undefined"==typeof Int32Array?void 0:Int32Array,"$ %Int32ArrayPrototype%":"undefined"==typeof Int32Array?void 0:Int32Array.prototype,"$ %isFinite%":isFinite,"$ %isNaN%":isNaN,"$ %IteratorPrototype%":o?a(a([][Symbol.iterator]())):void 0,"$ %JSON%":JSON,"$ %JSONParse%":JSON.parse,"$ %Map%":"undefined"==typeof Map?void 0:Map,"$ %MapIteratorPrototype%":"undefined"!=typeof Map&&o?a((new Map)[Symbol.iterator]()):void 0,"$ %MapPrototype%":"undefined"==typeof Map?void 0:Map.prototype,"$ %Math%":Math,"$ %Number%":Number,"$ %NumberPrototype%":Number.prototype,"$ %Object%":Object,"$ %ObjectPrototype%":Object.prototype,"$ %ObjProto_toString%":Object.prototype.toString,"$ %ObjProto_valueOf%":Object.prototype.valueOf,"$ %parseFloat%":parseFloat,"$ %parseInt%":parseInt,"$ %Promise%":"undefined"==typeof Promise?void 0:Promise,"$ %PromisePrototype%":"undefined"==typeof Promise?void 0:Promise.prototype,"$ %PromiseProto_then%":"undefined"==typeof Promise?void 0:Promise.prototype.then,"$ %Promise_all%":"undefined"==typeof Promise?void 0:Promise.all,"$ %Promise_reject%":"undefined"==typeof Promise?void 0:Promise.reject,"$ %Promise_resolve%":"undefined"==typeof Promise?void 0:Promise.resolve,"$ %Proxy%":"undefined"==typeof Proxy?void 0:Proxy,"$ %RangeError%":RangeError,"$ %RangeErrorPrototype%":RangeError.prototype,"$ %ReferenceError%":ReferenceError,"$ %ReferenceErrorPrototype%":ReferenceError.prototype,"$ %Reflect%":"undefined"==typeof Reflect?void 0:Reflect,"$ %RegExp%":RegExp,"$ %RegExpPrototype%":RegExp.prototype,"$ %Set%":"undefined"==typeof Set?void 0:Set,"$ %SetIteratorPrototype%":"undefined"!=typeof Set&&o?a((new Set)[Symbol.iterator]()):void 0,"$ %SetPrototype%":"undefined"==typeof Set?void 0:Set.prototype,"$ %SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?void 0:SharedArrayBuffer,"$ %SharedArrayBufferPrototype%":"undefined"==typeof SharedArrayBuffer?void 0:SharedArrayBuffer.prototype,"$ %String%":String,"$ %StringIteratorPrototype%":o?a(""[Symbol.iterator]()):void 0,"$ %StringPrototype%":String.prototype,"$ %Symbol%":o?Symbol:void 0,"$ %SymbolPrototype%":o?Symbol.prototype:void 0,"$ %SyntaxError%":SyntaxError,"$ %SyntaxErrorPrototype%":SyntaxError.prototype,"$ %ThrowTypeError%":i,"$ %TypedArray%":u,"$ %TypedArrayPrototype%":u?u.prototype:void 0,"$ %TypeError%":TypeError,"$ %TypeErrorPrototype%":TypeError.prototype,"$ %Uint8Array%":"undefined"==typeof Uint8Array?void 0:Uint8Array,"$ %Uint8ArrayPrototype%":"undefined"==typeof Uint8Array?void 0:Uint8Array.prototype,"$ %Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?void 0:Uint8ClampedArray,"$ %Uint8ClampedArrayPrototype%":"undefined"==typeof Uint8ClampedArray?void 0:Uint8ClampedArray.prototype,"$ %Uint16Array%":"undefined"==typeof Uint16Array?void 0:Uint16Array,"$ %Uint16ArrayPrototype%":"undefined"==typeof Uint16Array?void 0:Uint16Array.prototype,"$ %Uint32Array%":"undefined"==typeof Uint32Array?void 0:Uint32Array,"$ %Uint32ArrayPrototype%":"undefined"==typeof Uint32Array?void 0:Uint32Array.prototype,"$ %URIError%":URIError,"$ %URIErrorPrototype%":URIError.prototype,"$ %WeakMap%":"undefined"==typeof WeakMap?void 0:WeakMap,"$ %WeakMapPrototype%":"undefined"==typeof WeakMap?void 0:WeakMap.prototype,"$ %WeakSet%":"undefined"==typeof WeakSet?void 0:WeakSet,"$ %WeakSetPrototype%":"undefined"==typeof WeakSet?void 0:WeakSet.prototype};e.exports=function(e,t){if(arguments.length>1&&"boolean"!=typeof t)throw new TypeError('"allowMissing" argument must be a boolean');var r="$ "+e;if(!(r in f))throw new SyntaxError("intrinsic "+e+" does not exist!");if(void 0===f[r]&&!t)throw new TypeError("intrinsic "+e+" exists, but is not available. Please file an issue!");return f[r]}},function(e,t,r){"use strict";var n=r(86);e.exports=n.call(Function.call,Object.prototype.hasOwnProperty)},function(e,t,r){"use strict";var n=r(166);e.exports=function(){return String.prototype.trim&&"​"==="​".trim()?String.prototype.trim:n}},function(e,t,r){"use strict";r(459);var n=function(e,t){return parseInt(e.slice(2*t+2,2*t+4),16)},i=function(e){return(e.length-2)/2},o=function(e){for(var t=[],r=2,n=e.length;r>6|192);else{if(i>55295&&i<56320){if(++n==e.length)return null;var o=e.charCodeAt(n);if(o<56320||o>57343)return null;r+=t((i=65536+((1023&i)<<10)+(1023&o))>>18|240),r+=t(i>>12&63|128)}else r+=t(i>>12|224);r+=t(i>>6&63|128)}r+=t(63&i|128)}}return r},toString:function(e){for(var t="",r=0,o=i(e);r127){if(a>191&&a<224){if(r>=o)return null;a=(31&a)<<6|63&n(e,r)}else if(a>223&&a<240){if(r+1>=o)return null;a=(15&a)<<12|(63&n(e,r))<<6|63&n(e,++r)}else{if(!(a>239&&a<248))return null;if(r+2>=o)return null;a=(7&a)<<18|(63&n(e,r))<<12|(63&n(e,++r))<<6|63&n(e,++r)}++r}if(a<=65535)t+=String.fromCharCode(a);else{if(!(a<=1114111))return null;a-=65536,t+=String.fromCharCode(a>>10|55296),t+=String.fromCharCode(1023&a|56320)}}return t},fromNumber:function(e){var t=e.toString(16);return t.length%2==0?"0x"+t:"0x0"+t},toNumber:function(e){return parseInt(e.slice(2),16)},fromNat:function(e){return"0x0"===e?"0x":e.length%2==0?e:"0x0"+e.slice(2)},toNat:function(e){return"0"===e[2]?"0x"+e.slice(3):e},fromArray:a,toArray:o,fromUint8Array:function(e){return a([].slice.call(e,0))},toUint8Array:function(e){return new Uint8Array(o(e))}}},function(e,t,r){"use strict";var n=r(172).version,i=r(25),o=r(255),a=r(53),s=r(131),u=r(430),f=r(431),c=r(16),h=function(){var e=this;i.packageInit(this,arguments),this.version=n,this.utils=c,this.eth=new o(this),this.shh=new u(this),this.bzz=new f(this);var t=this.setProvider;this.setProvider=function(r,n){return t.apply(e,arguments),e.eth.setRequestManager(e._requestManager),e.shh.setRequestManager(e._requestManager),e.bzz.setProvider(r),!0}};h.version=n,h.utils=c,h.modules={Eth:o,Net:a,Personal:s,Shh:u,Bzz:f},i.addProviders(h),e.exports=h},function(e){e.exports=JSON.parse('{"name":"web3","version":"1.3.0","description":"Ethereum JavaScript API","repository":"https://github.com/ethereum/web3.js","license":"LGPL-3.0","engines":{"node":">=8.0.0"},"main":"lib/index.js","bugs":{"url":"https://github.com/ethereum/web3.js/issues"},"keywords":["Ethereum","JavaScript","API"],"author":"ethereum.org","types":"types/index.d.ts","scripts":{"tsc":"tsc -b tsconfig.json","dtslint":"dtslint --localTs ../../node_modules/typescript/lib types","postinstall":"node angular-patch.js"},"authors":[{"name":"Fabian Vogelsteller","email":"fabian@ethereum.org","homepage":"http://frozeman.de"},{"name":"Marek Kotewicz","email":"marek@parity.io","url":"https://github.com/debris"},{"name":"Marian Oancea","url":"https://github.com/cubedro"},{"name":"Gav Wood","email":"g@parity.io","homepage":"http://gavwood.com"},{"name":"Jeffery Wilcke","email":"jeffrey.wilcke@ethereum.org","url":"https://github.com/obscuren"}],"dependencies":{"web3-bzz":"1.3.0","web3-core":"1.3.0","web3-eth":"1.3.0","web3-eth-personal":"1.3.0","web3-net":"1.3.0","web3-shh":"1.3.0","web3-utils":"1.3.0"},"devDependencies":{"@types/node":"^12.12.6","dtslint":"^3.4.1","typescript":"^3.9.5"}}')},function(e,t,r){"use strict";var n=r(0)(r(1)),i=r(88).callbackify,o=r(10),a=r(9).errors,s=r(94),u=r(189),f=r(190),c=function e(t,r){this.provider=null,this.providers=e.providers,this.setProvider(t,r),this.subscriptions=new Map};c.givenProvider=f,c.providers={WebsocketProvider:r(191),HttpProvider:r(201),IpcProvider:r(219)},c.prototype.setProvider=function(e,t){var r=this;if(e&&"string"==typeof e&&this.providers)if(/^http(s)?:\/\//i.test(e))e=new this.providers.HttpProvider(e);else if(/^ws(s)?:\/\//i.test(e))e=new this.providers.WebsocketProvider(e);else if(e&&"object"===(0,n.default)(t)&&"function"==typeof t.connect)e=new this.providers.IpcProvider(e,t);else if(e)throw new Error("Can't autodetect provider for \""+e+'"');this.provider&&this.provider.connected&&this.clearSubscriptions(),this.provider=e||null,this.provider&&this.provider.on&&(this.provider.on("data",(function(e,t){(e=e||t).method&&e.params&&e.params.subscription&&r.subscriptions.has(e.params.subscription)&&r.subscriptions.get(e.params.subscription).callback(null,e.params.result)})),this.provider.on("connect",(function(){r.subscriptions.forEach((function(e){e.subscription.resubscribe()}))})),this.provider.on("error",(function(e){r.subscriptions.forEach((function(t){t.callback(e)}))})),this.provider.on("close",(function(e){r._isCleanCloseEvent(e)&&!r._isIpcCloseError(e)||(r.subscriptions.forEach((function(t){t.callback(a.ConnectionCloseError(e)),r.subscriptions.delete(t.subscription.id)})),r.provider&&r.provider.emit&&r.provider.emit("error",a.ConnectionCloseError(e))),r.provider&&r.provider.emit&&r.provider.emit("end",e)})))},c.prototype.send=function(e,t){if(t=t||function(){},!this.provider)return t(a.InvalidProvider());var r=e.method,n=e.params,o=s.toPayload(r,n),u=this._jsonrpcResultCallback(t,o);if(this.provider.request)i(this.provider.request)({method:r,params:n},t);else if(this.provider.sendAsync)this.provider.sendAsync(o,u);else{if(!this.provider.send)throw new Error("Provider does not have a request or send method to use.");this.provider.send(o,u)}},c.prototype.sendBatch=function(e,t){if(!this.provider)return t(a.InvalidProvider());var r=s.toBatchPayload(e);this.provider[this.provider.sendAsync?"sendAsync":"send"](r,(function(e,r){return e?t(e):o.isArray(r)?void t(null,r):t(a.InvalidResponse(r))}))},c.prototype.addSubscription=function(e,t){if(!this.provider.on)throw new Error("The provider doesn't support subscriptions: "+this.provider.constructor.name);this.subscriptions.set(e.id,{callback:t,subscription:e})},c.prototype.removeSubscription=function(e,t){if(this.subscriptions.has(e)){var r=this.subscriptions.get(e).subscription.options.type;return this.subscriptions.delete(e),void this.send({method:r+"_unsubscribe",params:[e]},t)}"function"==typeof t&&t(null)},c.prototype.clearSubscriptions=function(e){try{var t=this;return this.subscriptions.size>0&&this.subscriptions.forEach((function(r,n){e&&"syncing"===r.name||t.removeSubscription(n)})),this.provider.reset&&this.provider.reset(),!0}catch(e){throw new Error("Error while clearing subscriptions: ".concat(e))}},c.prototype._isCleanCloseEvent=function(e){return"object"===(0,n.default)(e)&&([1e3].includes(e.code)||!0===e.wasClean)},c.prototype._isIpcCloseError=function(e){return"boolean"==typeof e&&e},c.prototype._jsonrpcResultCallback=function(e,t){return function(r,n){return n&&n.id&&t.id!==n.id?e(new Error("Wrong response id ".concat(n.id," (expected: ").concat(t.id,") in ").concat(JSON.stringify(t)))):r?e(r):n&&n.error?e(a.ErrorResponse(n)):s.isValidResponse(n)?void e(null,n.result):e(a.InvalidResponse(n))}},e.exports={Manager:c,BatchManager:u}},function(e,t,r){"use strict";var n=r(0)(r(1));e.exports=function(e){return e&&"object"===(0,n.default)(e)&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},function(e,t,r){"use strict";var n=r(0)(r(1));e.exports={ErrorResponse:function(e){var t=e&&e.error&&e.error.message?e.error.message:JSON.stringify(e),r=e.error&&e.error.data?e.error.data:null,n=new Error("Returned error: "+t);return n.data=r,n},InvalidNumberOfParams:function(e,t,r){return new Error('Invalid number of parameters for "'+r+'". Got '+e+" expected "+t+"!")},InvalidConnection:function(e,t){return this.ConnectionError("CONNECTION ERROR: Couldn't connect to node "+e+".",t)},InvalidProvider:function(){return new Error("Provider not set or invalid")},InvalidResponse:function(e){var t=e&&e.error&&e.error.message?e.error.message:"Invalid JSON RPC response: "+JSON.stringify(e);return new Error(t)},ConnectionTimeout:function(e){return new Error("CONNECTION TIMEOUT: timeout of "+e+" ms achived")},ConnectionNotOpenError:function(e){return this.ConnectionError("connection not open on send()",e)},ConnectionCloseError:function(e){return"object"===(0,n.default)(e)&&e.code&&e.reason?this.ConnectionError("CONNECTION ERROR: The connection got closed with the close code `"+e.code+"` and the following reason string `"+e.reason+"`",e):new Error("CONNECTION ERROR: The connection closed unexpectedly")},MaxAttemptsReachedOnReconnectingError:function(){return new Error("Maximum number of reconnect attempts reached!")},PendingRequestsOnReconnectingError:function(){return new Error("CONNECTION ERROR: Provider started to reconnect before the response got received!")},ConnectionError:function(e,t){var r=new Error(e);return t&&(r.code=t.code,r.reason=t.reason),r},RevertInstructionError:function(e,t){var r=new Error("Your request got reverted with the following reason string: "+e);return r.reason=e,r.signature=t,r},TransactionRevertInstructionError:function(e,t,r){var n=new Error("Transaction has been reverted by the EVM:\n"+JSON.stringify(r,null,2));return n.reason=e,n.signature=t,n.receipt=r,n},TransactionError:function(e,t){var r=new Error(e);return r.receipt=t,r},NoContractAddressFoundError:function(e){return this.TransactionError("The transaction receipt didn't contain a contract address.",e)},ContractCodeNotStoredError:function(e){return this.TransactionError("The contract code couldn't be stored, please check your gas limit.",e)},TransactionRevertedWithoutReasonError:function(e){return this.TransactionError("Transaction has been reverted by the EVM:\n"+JSON.stringify(e,null,2),e)},TransactionOutOfGasError:function(e){return this.TransactionError("Transaction ran out of gas. Please provide more gas:\n"+JSON.stringify(e,null,2),e)},ResolverMethodMissingError:function(e,t){return new Error("The resolver at "+e+'does not implement requested method: "'+t+'".')},ContractMissingABIError:function(){return new Error("You must provide the json interface of the contract when instantiating a contract object.")},ContractOnceRequiresCallbackError:function(){return new Error("Once requires a callback as the second parameter.")},ContractEventDoesNotExistError:function(e){return new Error('Event "'+e+"\" doesn't exist in this contract.")},ContractReservedEventError:function(e){return new Error('The event "'+e+"\" is a reserved event name, you can't use it.")},ContractMissingDeployDataError:function(){return new Error('No "data" specified in neither the given options, nor the default options.')},ContractNoAddressDefinedError:function(){return new Error("This contract object doesn't have address set yet, please set an address first.")},ContractNoFromAddressDefinedError:function(){return new Error('No "from" address specified in neither the given options, nor the default options.')}}},function(e,t,r){"use strict";var n=r(0)(r(1)),i=r(10),o=r(16),a=r(93),s=function(e){return o.toBN(e).toString(10)},u=function(e){if(void 0!==e)return function(e){return"latest"===e||"pending"===e||"earliest"===e}(e)?e:"genesis"===e?"0x0":o.isHexStrict(e)?i.isString(e)?e.toLowerCase():e:o.numberToHex(e)},f=function(e){if(e.to&&(e.to=d(e.to)),e.data&&e.input)throw new Error('You can\'t have "data" and "input" as properties of transactions at the same time, please use either "data" or "input" instead.');if(!e.data&&e.input&&(e.data=e.input,delete e.input),e.data&&!e.data.startsWith("0x")&&(e.data="0x"+e.data),e.data&&!o.isHex(e.data))throw new Error("The data field must be HEX encoded data.");return(e.gas||e.gasLimit)&&(e.gas=e.gas||e.gasLimit),["gasPrice","gas","value","nonce"].filter((function(t){return void 0!==e[t]})).forEach((function(t){e[t]=o.numberToHex(e[t])})),e},c=function(e){return null!==e.blockNumber&&(e.blockNumber=o.hexToNumber(e.blockNumber)),null!==e.transactionIndex&&(e.transactionIndex=o.hexToNumber(e.transactionIndex)),e.nonce=o.hexToNumber(e.nonce),e.gas=o.hexToNumber(e.gas),e.gasPrice=s(e.gasPrice),e.value=s(e.value),e.to&&o.isAddress(e.to)?e.to=o.toChecksumAddress(e.to):e.to=null,e.from&&(e.from=o.toChecksumAddress(e.from)),e},h=function(e){if("string"==typeof e.blockHash&&"string"==typeof e.transactionHash&&"string"==typeof e.logIndex){var t=o.sha3(e.blockHash.replace("0x","")+e.transactionHash.replace("0x","")+e.logIndex.replace("0x",""));e.id="log_"+t.replace("0x","").substr(0,8)}else e.id||(e.id=null);return null!==e.blockNumber&&(e.blockNumber=o.hexToNumber(e.blockNumber)),null!==e.transactionIndex&&(e.transactionIndex=o.hexToNumber(e.transactionIndex)),null!==e.logIndex&&(e.logIndex=o.hexToNumber(e.logIndex)),e.address&&(e.address=o.toChecksumAddress(e.address)),e},d=function(e){var t=new a(e);if(t.isValid()&&t.isDirect())return t.toAddress().toLowerCase();if(o.isAddress(e))return"0x"+e.toLowerCase().replace("0x","");throw new Error('Provided address "'+e+"\" is invalid, the capitalization checksum test failed, or its an indrect IBAN address which can't be converted.")};e.exports={inputDefaultBlockNumberFormatter:function(e){return u(this&&null==e?this.defaultBlock:e)},inputBlockNumberFormatter:u,inputCallFormatter:function(e){var t=(e=f(e)).from||(this?this.defaultAccount:null);return t&&(e.from=d(t)),e},inputTransactionFormatter:function(e){if(e=f(e),!i.isNumber(e.from)&&!i.isObject(e.from)){if(e.from=e.from||(this?this.defaultAccount:null),!e.from&&!i.isNumber(e.from))throw new Error('The send transactions "from" field must be defined!');e.from=d(e.from)}return e},inputAddressFormatter:d,inputPostFormatter:function(e){return e.ttl&&(e.ttl=o.numberToHex(e.ttl)),e.workToProve&&(e.workToProve=o.numberToHex(e.workToProve)),e.priority&&(e.priority=o.numberToHex(e.priority)),i.isArray(e.topics)||(e.topics=e.topics?[e.topics]:[]),e.topics=e.topics.map((function(e){return 0===e.indexOf("0x")?e:o.fromUtf8(e)})),e},inputLogFormatter:function(e){var t=function(e){return null==e?null:0===(e=String(e)).indexOf("0x")?e:o.fromUtf8(e)};return(e.fromBlock||0===e.fromBlock)&&(e.fromBlock=u(e.fromBlock)),(e.toBlock||0===e.toBlock)&&(e.toBlock=u(e.toBlock)),e.topics=e.topics||[],e.topics=e.topics.map((function(e){return i.isArray(e)?e.map(t):t(e)})),t=null,e.address&&(e.address=i.isArray(e.address)?e.address.map((function(e){return d(e)})):d(e.address)),e},inputSignFormatter:function(e){return o.isHexStrict(e)?e:o.utf8ToHex(e)},inputStorageKeysFormatter:function(e){return e.map(o.numberToHex)},outputProofFormatter:function(e){return e.address=o.toChecksumAddress(e.address),e.nonce=o.hexToNumberString(e.nonce),e.balance=o.hexToNumberString(e.balance),e},outputBigNumberFormatter:s,outputTransactionFormatter:c,outputTransactionReceiptFormatter:function(e){if("object"!==(0,n.default)(e))throw new Error("Received receipt is invalid: "+e);return null!==e.blockNumber&&(e.blockNumber=o.hexToNumber(e.blockNumber)),null!==e.transactionIndex&&(e.transactionIndex=o.hexToNumber(e.transactionIndex)),e.cumulativeGasUsed=o.hexToNumber(e.cumulativeGasUsed),e.gasUsed=o.hexToNumber(e.gasUsed),i.isArray(e.logs)&&(e.logs=e.logs.map(h)),e.contractAddress&&(e.contractAddress=o.toChecksumAddress(e.contractAddress)),void 0!==e.status&&null!==e.status&&(e.status=Boolean(parseInt(e.status))),e},outputBlockFormatter:function(e){return e.gasLimit=o.hexToNumber(e.gasLimit),e.gasUsed=o.hexToNumber(e.gasUsed),e.size=o.hexToNumber(e.size),e.timestamp=o.hexToNumber(e.timestamp),null!==e.number&&(e.number=o.hexToNumber(e.number)),e.difficulty&&(e.difficulty=s(e.difficulty)),e.totalDifficulty&&(e.totalDifficulty=s(e.totalDifficulty)),i.isArray(e.transactions)&&e.transactions.forEach((function(e){if(!i.isString(e))return c(e)})),e.miner&&(e.miner=o.toChecksumAddress(e.miner)),e},outputLogFormatter:h,outputPostFormatter:function(e){return e.expiry=o.hexToNumber(e.expiry),e.sent=o.hexToNumber(e.sent),e.ttl=o.hexToNumber(e.ttl),e.workProved=o.hexToNumber(e.workProved),e.topics||(e.topics=[]),e.topics=e.topics.map((function(e){return o.toUtf8(e)})),e},outputSyncingFormatter:function(e){return e.startingBlock=o.hexToNumber(e.startingBlock),e.currentBlock=o.hexToNumber(e.currentBlock),e.highestBlock=o.hexToNumber(e.highestBlock),e.knownStates&&(e.knownStates=o.hexToNumber(e.knownStates),e.pulledStates=o.hexToNumber(e.pulledStates)),e}}},function(e,t,r){"use strict";var n=r(0)(r(1)),i=r(89),o=r(180),a=new i(0),s=new i(-1),u={noether:"0",wei:"1",kwei:"1000",Kwei:"1000",babbage:"1000",femtoether:"1000",mwei:"1000000",Mwei:"1000000",lovelace:"1000000",picoether:"1000000",gwei:"1000000000",Gwei:"1000000000",shannon:"1000000000",nanoether:"1000000000",nano:"1000000000",szabo:"1000000000000",microether:"1000000000000",micro:"1000000000000",finney:"1000000000000000",milliether:"1000000000000000",milli:"1000000000000000",ether:"1000000000000000000",kether:"1000000000000000000000",grand:"1000000000000000000000",mether:"1000000000000000000000000",gether:"1000000000000000000000000000",tether:"1000000000000000000000000000000"};function f(e){var t=e?e.toLowerCase():"ether",r=u[t];if("string"!=typeof r)throw new Error("[ethjs-unit] the unit provided "+e+" doesn't exists, please use the one of the following units "+JSON.stringify(u,null,2));return new i(r,10)}function c(e){if("string"==typeof e){if(!e.match(/^-?[0-9.]+$/))throw new Error("while converting number to string, invalid number value '"+e+"', should be a number matching (^-?[0-9.]+).");return e}if("number"==typeof e)return String(e);if("object"===(0,n.default)(e)&&e.toString&&(e.toTwos||e.dividedToIntegerBy))return e.toPrecision?String(e.toPrecision()):e.toString(10);throw new Error("while converting number to string, invalid number value '"+e+"' type "+(0,n.default)(e)+".")}e.exports={unitMap:u,numberToString:c,getValueOfUnit:f,fromWei:function(e,t,r){var n=o(e),i=n.lt(a),c=f(t),h=u[t].length-1||1,d=r||{};i&&(n=n.mul(s));for(var l=n.mod(c).toString(10);l.length2)throw new Error("[ethjs-unit] while converting number "+e+" to wei, too many decimal points");var d=h[0],l=h[1];if(d||(d="0"),l||(l="0"),l.length>o)throw new Error("[ethjs-unit] while converting number "+e+" to wei, too many decimal places");for(;l.length0?n-4:n,h=0;h>16&255,s[u++]=t>>8&255,s[u++]=255&t;2===a&&(t=i[e.charCodeAt(h)]<<2|i[e.charCodeAt(h+1)]>>4,s[u++]=255&t);1===a&&(t=i[e.charCodeAt(h)]<<10|i[e.charCodeAt(h+1)]<<4|i[e.charCodeAt(h+2)]>>2,s[u++]=t>>8&255,s[u++]=255&t);return s},t.fromByteArray=function(e){for(var t,r=e.length,i=r%3,o=[],a=0,s=r-i;as?s:a+16383));1===i?(t=e[r-1],o.push(n[t>>2]+n[t<<4&63]+"==")):2===i&&(t=(e[r-2]<<8)+e[r-1],o.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return o.join("")};for(var n=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,u=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function c(e,t,r){for(var i,o,a=[],s=t;s>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(e,t,r){"use strict";t.read=function(e,t,r,n,i){var o,a,s=8*i-n-1,u=(1<>1,c=-7,h=r?i-1:0,d=r?-1:1,l=e[t+h];for(h+=d,o=l&(1<<-c)-1,l>>=-c,c+=s;c>0;o=256*o+e[t+h],h+=d,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=n;c>0;a=256*a+e[t+h],h+=d,c-=8);if(0===o)o=1-f;else{if(o===u)return a?NaN:1/0*(l?-1:1);a+=Math.pow(2,n),o-=f}return(l?-1:1)*a*Math.pow(2,o-n)},t.write=function(e,t,r,n,i,o){var a,s,u,f=8*o-i-1,c=(1<>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:o-1,p=n?1:-1,b=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-a))<1&&(a--,u*=2),(t+=a+h>=1?d/u:d*Math.pow(2,1-h))*u>=2&&(a++,u/=2),a+h>=c?(s=0,a=c):a+h>=1?(s=(t*u-1)*Math.pow(2,i),a+=h):(s=t*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;e[r+l]=255&s,l+=p,s/=256,i-=8);for(a=a<0;e[r+l]=255&a,l+=p,a/=256,f-=8);e[r+l-p]|=128*b}},function(e,t,r){"use strict";var n=r(0)(r(1)),i=r(89),o=r(60);e.exports=function(e){if("string"==typeof e||"number"==typeof e){var t=new i(1),r=String(e).toLowerCase().trim(),a="0x"===r.substr(0,2)||"-0x"===r.substr(0,3),s=o(r);if("-"===s.substr(0,1)&&(s=o(s.slice(1)),t=new i(-1,10)),!(s=""===s?"0":s).match(/^-?[0-9]+$/)&&s.match(/^[0-9A-Fa-f]+$/)||s.match(/^[a-fA-F]+$/)||!0===a&&s.match(/^[0-9A-Fa-f]+$/))return new i(s,16).mul(t);if((s.match(/^-?[0-9]+$/)||""===s)&&!1===a)return new i(s,10).mul(t)}else if("object"===(0,n.default)(e)&&e.toString&&!e.pop&&!e.push&&e.toString(10).match(/^-?[0-9]+$/)&&(e.mul||e.dividedToIntegerBy))return new i(e.toString(10),10);throw new Error("[number-to-bn] while converting number "+JSON.stringify(e)+" to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.")}},function(e,t){},function(e,t,r){"use strict";var n=r(0)(r(1)),i=r(183),o=r(60);e.exports=function(e){if("string"==typeof e||"number"==typeof e){var t=new i(1),r=String(e).toLowerCase().trim(),a="0x"===r.substr(0,2)||"-0x"===r.substr(0,3),s=o(r);if("-"===s.substr(0,1)&&(s=o(s.slice(1)),t=new i(-1,10)),!(s=""===s?"0":s).match(/^-?[0-9]+$/)&&s.match(/^[0-9A-Fa-f]+$/)||s.match(/^[a-fA-F]+$/)||!0===a&&s.match(/^[0-9A-Fa-f]+$/))return new i(s,16).mul(t);if((s.match(/^-?[0-9]+$/)||""===s)&&!1===a)return new i(s,10).mul(t)}else if("object"===(0,n.default)(e)&&e.toString&&!e.pop&&!e.push&&e.toString(10).match(/^-?[0-9]+$/)&&(e.mul||e.dividedToIntegerBy))return new i(e.toString(10),10);throw new Error("[number-to-bn] while converting number "+JSON.stringify(e)+" to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.")}},function(e,t,r){"use strict";(function(e){var t=r(0)(r(1));!function(e,n){function i(e,t){if(!e)throw new Error(t||"Assertion failed")}function o(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function a(e,t,r){if(a.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==t&&"be"!==t||(r=t,t=10),this._init(e||0,t||10,r||"be"))}var s;"object"===(0,t.default)(e)?e.exports=a:(void 0).BN=a,a.BN=a,a.wordSize=26;try{s=r(2).Buffer}catch(e){}function u(e,t,r){for(var n=0,i=Math.min(e.length,r),o=t;o=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function f(e,t,r,n){for(var i=0,o=Math.min(e.length,r),a=t;a=49?s-49+10:s>=17?s-17+10:s}return i}a.isBN=function(e){return e instanceof a||null!==e&&"object"===(0,t.default)(e)&&e.constructor.wordSize===a.wordSize&&Array.isArray(e.words)},a.max=function(e,t){return e.cmp(t)>0?e:t},a.min=function(e,t){return e.cmp(t)<0?e:t},a.prototype._init=function(e,r,n){if("number"==typeof e)return this._initNumber(e,r,n);if("object"===(0,t.default)(e))return this._initArray(e,r,n);"hex"===r&&(r=16),i(r===(0|r)&&r>=2&&r<=36);var o=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&o++,16===r?this._parseHex(e,o):this._parseBase(e,r,o),"-"===e[0]&&(this.negative=1),this.strip(),"le"===n&&this._initArray(this.toArray(),r,n)},a.prototype._initNumber=function(e,t,r){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),t,r)},a.prototype._initArray=function(e,t,r){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var n=0;n=0;n-=3)a=e[n]|e[n-1]<<8|e[n-2]<<16,this.words[o]|=a<>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);else if("le"===r)for(n=0,o=0;n>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);return this.strip()},a.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r=t;r-=6)i=u(e,r,r+6),this.words[n]|=i<>>26-o&4194303,(o+=24)>=26&&(o-=26,n++);r+6!==t&&(i=u(e,t,r+6),this.words[n]|=i<>>26-o&4194303),this.strip()},a.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=t)n++;n--,i=i/t|0;for(var o=e.length-r,a=o%n,s=Math.min(o,o-a)+r,u=0,c=r;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},a.prototype.inspect=function(){return(this.red?""};var c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],h=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],d=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function l(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var i=0|e.words[0],o=0|t.words[0],a=i*o,s=67108863&a,u=a/67108864|0;r.words[0]=s;for(var f=1;f>>26,h=67108863&u,d=Math.min(f,t.length-1),l=Math.max(0,f-e.length+1);l<=d;l++){var p=f-l|0;c+=(a=(i=0|e.words[p])*(o=0|t.words[l])+h)/67108864|0,h=67108863&a}r.words[f]=0|h,u=0|c}return 0!==u?r.words[f]=0|u:r.length--,r.strip()}a.prototype.toString=function(e,t){var r;if(t=0|t||1,16===(e=e||10)||"hex"===e){r="";for(var n=0,o=0,a=0;a>>24-n&16777215)||a!==this.length-1?c[6-u.length]+u+r:u+r,(n+=2)>=26&&(n-=26,a--)}for(0!==o&&(r=o.toString(16)+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(e===(0|e)&&e>=2&&e<=36){var f=h[e],l=d[e];r="";var p=this.clone();for(p.negative=0;!p.isZero();){var b=p.modn(l).toString(e);r=(p=p.idivn(l)).isZero()?b+r:c[f-b.length]+b+r}for(this.isZero()&&(r="0"+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}i(!1,"Base should be between 2 and 36")},a.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},a.prototype.toJSON=function(){return this.toString(16)},a.prototype.toBuffer=function(e,t){return i(void 0!==s),this.toArrayLike(s,e,t)},a.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},a.prototype.toArrayLike=function(e,t,r){var n=this.byteLength(),o=r||Math.max(1,n);i(n<=o,"byte array longer than desired length"),i(o>0,"Requested array length <= 0"),this.strip();var a,s,u="le"===t,f=new e(o),c=this.clone();if(u){for(s=0;!c.isZero();s++)a=c.andln(255),c.iushrn(8),f[s]=a;for(;s=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},a.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},a.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},a.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},a.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},a.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},a.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},a.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},a.prototype.inotn=function(e){i("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var n=0;n0&&(this.words[n]=~this.words[n]&67108863>>26-r),this.strip()},a.prototype.notn=function(e){return this.clone().inotn(e)},a.prototype.setn=function(e,t){i("number"==typeof e&&e>=0);var r=e/26|0,n=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<e.length?(r=this,n=e):(r=e,n=this);for(var i=0,o=0;o>>26;for(;0!==i&&o>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;oe.length?this.clone().iadd(e):e.clone().iadd(this)},a.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,n,i=this.cmp(e);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=e):(r=e,n=this);for(var o=0,a=0;a>26,this.words[a]=67108863&t;for(;0!==o&&a>26,this.words[a]=67108863&t;if(0===o&&a>>13,l=0|a[1],p=8191&l,b=l>>>13,m=0|a[2],y=8191&m,v=m>>>13,g=0|a[3],w=8191&g,_=g>>>13,k=0|a[4],A=8191&k,S=k>>>13,E=0|a[5],x=8191&E,M=E>>>13,I=0|a[6],O=8191&I,C=I>>>13,P=0|a[7],T=8191&P,U=P>>>13,B=0|a[8],R=8191&B,N=B>>>13,j=0|a[9],L=8191&j,F=j>>>13,D=0|s[0],q=8191&D,z=D>>>13,H=0|s[1],K=8191&H,V=H>>>13,G=0|s[2],W=8191&G,Y=G>>>13,$=0|s[3],J=8191&$,Z=$>>>13,X=0|s[4],Q=8191&X,ee=X>>>13,te=0|s[5],re=8191&te,ne=te>>>13,ie=0|s[6],oe=8191&ie,ae=ie>>>13,se=0|s[7],ue=8191&se,fe=se>>>13,ce=0|s[8],he=8191&ce,de=ce>>>13,le=0|s[9],pe=8191&le,be=le>>>13;r.negative=e.negative^t.negative,r.length=19;var me=(f+(n=Math.imul(h,q))|0)+((8191&(i=(i=Math.imul(h,z))+Math.imul(d,q)|0))<<13)|0;f=((o=Math.imul(d,z))+(i>>>13)|0)+(me>>>26)|0,me&=67108863,n=Math.imul(p,q),i=(i=Math.imul(p,z))+Math.imul(b,q)|0,o=Math.imul(b,z);var ye=(f+(n=n+Math.imul(h,K)|0)|0)+((8191&(i=(i=i+Math.imul(h,V)|0)+Math.imul(d,K)|0))<<13)|0;f=((o=o+Math.imul(d,V)|0)+(i>>>13)|0)+(ye>>>26)|0,ye&=67108863,n=Math.imul(y,q),i=(i=Math.imul(y,z))+Math.imul(v,q)|0,o=Math.imul(v,z),n=n+Math.imul(p,K)|0,i=(i=i+Math.imul(p,V)|0)+Math.imul(b,K)|0,o=o+Math.imul(b,V)|0;var ve=(f+(n=n+Math.imul(h,W)|0)|0)+((8191&(i=(i=i+Math.imul(h,Y)|0)+Math.imul(d,W)|0))<<13)|0;f=((o=o+Math.imul(d,Y)|0)+(i>>>13)|0)+(ve>>>26)|0,ve&=67108863,n=Math.imul(w,q),i=(i=Math.imul(w,z))+Math.imul(_,q)|0,o=Math.imul(_,z),n=n+Math.imul(y,K)|0,i=(i=i+Math.imul(y,V)|0)+Math.imul(v,K)|0,o=o+Math.imul(v,V)|0,n=n+Math.imul(p,W)|0,i=(i=i+Math.imul(p,Y)|0)+Math.imul(b,W)|0,o=o+Math.imul(b,Y)|0;var ge=(f+(n=n+Math.imul(h,J)|0)|0)+((8191&(i=(i=i+Math.imul(h,Z)|0)+Math.imul(d,J)|0))<<13)|0;f=((o=o+Math.imul(d,Z)|0)+(i>>>13)|0)+(ge>>>26)|0,ge&=67108863,n=Math.imul(A,q),i=(i=Math.imul(A,z))+Math.imul(S,q)|0,o=Math.imul(S,z),n=n+Math.imul(w,K)|0,i=(i=i+Math.imul(w,V)|0)+Math.imul(_,K)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(y,W)|0,i=(i=i+Math.imul(y,Y)|0)+Math.imul(v,W)|0,o=o+Math.imul(v,Y)|0,n=n+Math.imul(p,J)|0,i=(i=i+Math.imul(p,Z)|0)+Math.imul(b,J)|0,o=o+Math.imul(b,Z)|0;var we=(f+(n=n+Math.imul(h,Q)|0)|0)+((8191&(i=(i=i+Math.imul(h,ee)|0)+Math.imul(d,Q)|0))<<13)|0;f=((o=o+Math.imul(d,ee)|0)+(i>>>13)|0)+(we>>>26)|0,we&=67108863,n=Math.imul(x,q),i=(i=Math.imul(x,z))+Math.imul(M,q)|0,o=Math.imul(M,z),n=n+Math.imul(A,K)|0,i=(i=i+Math.imul(A,V)|0)+Math.imul(S,K)|0,o=o+Math.imul(S,V)|0,n=n+Math.imul(w,W)|0,i=(i=i+Math.imul(w,Y)|0)+Math.imul(_,W)|0,o=o+Math.imul(_,Y)|0,n=n+Math.imul(y,J)|0,i=(i=i+Math.imul(y,Z)|0)+Math.imul(v,J)|0,o=o+Math.imul(v,Z)|0,n=n+Math.imul(p,Q)|0,i=(i=i+Math.imul(p,ee)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,ee)|0;var _e=(f+(n=n+Math.imul(h,re)|0)|0)+((8191&(i=(i=i+Math.imul(h,ne)|0)+Math.imul(d,re)|0))<<13)|0;f=((o=o+Math.imul(d,ne)|0)+(i>>>13)|0)+(_e>>>26)|0,_e&=67108863,n=Math.imul(O,q),i=(i=Math.imul(O,z))+Math.imul(C,q)|0,o=Math.imul(C,z),n=n+Math.imul(x,K)|0,i=(i=i+Math.imul(x,V)|0)+Math.imul(M,K)|0,o=o+Math.imul(M,V)|0,n=n+Math.imul(A,W)|0,i=(i=i+Math.imul(A,Y)|0)+Math.imul(S,W)|0,o=o+Math.imul(S,Y)|0,n=n+Math.imul(w,J)|0,i=(i=i+Math.imul(w,Z)|0)+Math.imul(_,J)|0,o=o+Math.imul(_,Z)|0,n=n+Math.imul(y,Q)|0,i=(i=i+Math.imul(y,ee)|0)+Math.imul(v,Q)|0,o=o+Math.imul(v,ee)|0,n=n+Math.imul(p,re)|0,i=(i=i+Math.imul(p,ne)|0)+Math.imul(b,re)|0,o=o+Math.imul(b,ne)|0;var ke=(f+(n=n+Math.imul(h,oe)|0)|0)+((8191&(i=(i=i+Math.imul(h,ae)|0)+Math.imul(d,oe)|0))<<13)|0;f=((o=o+Math.imul(d,ae)|0)+(i>>>13)|0)+(ke>>>26)|0,ke&=67108863,n=Math.imul(T,q),i=(i=Math.imul(T,z))+Math.imul(U,q)|0,o=Math.imul(U,z),n=n+Math.imul(O,K)|0,i=(i=i+Math.imul(O,V)|0)+Math.imul(C,K)|0,o=o+Math.imul(C,V)|0,n=n+Math.imul(x,W)|0,i=(i=i+Math.imul(x,Y)|0)+Math.imul(M,W)|0,o=o+Math.imul(M,Y)|0,n=n+Math.imul(A,J)|0,i=(i=i+Math.imul(A,Z)|0)+Math.imul(S,J)|0,o=o+Math.imul(S,Z)|0,n=n+Math.imul(w,Q)|0,i=(i=i+Math.imul(w,ee)|0)+Math.imul(_,Q)|0,o=o+Math.imul(_,ee)|0,n=n+Math.imul(y,re)|0,i=(i=i+Math.imul(y,ne)|0)+Math.imul(v,re)|0,o=o+Math.imul(v,ne)|0,n=n+Math.imul(p,oe)|0,i=(i=i+Math.imul(p,ae)|0)+Math.imul(b,oe)|0,o=o+Math.imul(b,ae)|0;var Ae=(f+(n=n+Math.imul(h,ue)|0)|0)+((8191&(i=(i=i+Math.imul(h,fe)|0)+Math.imul(d,ue)|0))<<13)|0;f=((o=o+Math.imul(d,fe)|0)+(i>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,n=Math.imul(R,q),i=(i=Math.imul(R,z))+Math.imul(N,q)|0,o=Math.imul(N,z),n=n+Math.imul(T,K)|0,i=(i=i+Math.imul(T,V)|0)+Math.imul(U,K)|0,o=o+Math.imul(U,V)|0,n=n+Math.imul(O,W)|0,i=(i=i+Math.imul(O,Y)|0)+Math.imul(C,W)|0,o=o+Math.imul(C,Y)|0,n=n+Math.imul(x,J)|0,i=(i=i+Math.imul(x,Z)|0)+Math.imul(M,J)|0,o=o+Math.imul(M,Z)|0,n=n+Math.imul(A,Q)|0,i=(i=i+Math.imul(A,ee)|0)+Math.imul(S,Q)|0,o=o+Math.imul(S,ee)|0,n=n+Math.imul(w,re)|0,i=(i=i+Math.imul(w,ne)|0)+Math.imul(_,re)|0,o=o+Math.imul(_,ne)|0,n=n+Math.imul(y,oe)|0,i=(i=i+Math.imul(y,ae)|0)+Math.imul(v,oe)|0,o=o+Math.imul(v,ae)|0,n=n+Math.imul(p,ue)|0,i=(i=i+Math.imul(p,fe)|0)+Math.imul(b,ue)|0,o=o+Math.imul(b,fe)|0;var Se=(f+(n=n+Math.imul(h,he)|0)|0)+((8191&(i=(i=i+Math.imul(h,de)|0)+Math.imul(d,he)|0))<<13)|0;f=((o=o+Math.imul(d,de)|0)+(i>>>13)|0)+(Se>>>26)|0,Se&=67108863,n=Math.imul(L,q),i=(i=Math.imul(L,z))+Math.imul(F,q)|0,o=Math.imul(F,z),n=n+Math.imul(R,K)|0,i=(i=i+Math.imul(R,V)|0)+Math.imul(N,K)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(T,W)|0,i=(i=i+Math.imul(T,Y)|0)+Math.imul(U,W)|0,o=o+Math.imul(U,Y)|0,n=n+Math.imul(O,J)|0,i=(i=i+Math.imul(O,Z)|0)+Math.imul(C,J)|0,o=o+Math.imul(C,Z)|0,n=n+Math.imul(x,Q)|0,i=(i=i+Math.imul(x,ee)|0)+Math.imul(M,Q)|0,o=o+Math.imul(M,ee)|0,n=n+Math.imul(A,re)|0,i=(i=i+Math.imul(A,ne)|0)+Math.imul(S,re)|0,o=o+Math.imul(S,ne)|0,n=n+Math.imul(w,oe)|0,i=(i=i+Math.imul(w,ae)|0)+Math.imul(_,oe)|0,o=o+Math.imul(_,ae)|0,n=n+Math.imul(y,ue)|0,i=(i=i+Math.imul(y,fe)|0)+Math.imul(v,ue)|0,o=o+Math.imul(v,fe)|0,n=n+Math.imul(p,he)|0,i=(i=i+Math.imul(p,de)|0)+Math.imul(b,he)|0,o=o+Math.imul(b,de)|0;var Ee=(f+(n=n+Math.imul(h,pe)|0)|0)+((8191&(i=(i=i+Math.imul(h,be)|0)+Math.imul(d,pe)|0))<<13)|0;f=((o=o+Math.imul(d,be)|0)+(i>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,n=Math.imul(L,K),i=(i=Math.imul(L,V))+Math.imul(F,K)|0,o=Math.imul(F,V),n=n+Math.imul(R,W)|0,i=(i=i+Math.imul(R,Y)|0)+Math.imul(N,W)|0,o=o+Math.imul(N,Y)|0,n=n+Math.imul(T,J)|0,i=(i=i+Math.imul(T,Z)|0)+Math.imul(U,J)|0,o=o+Math.imul(U,Z)|0,n=n+Math.imul(O,Q)|0,i=(i=i+Math.imul(O,ee)|0)+Math.imul(C,Q)|0,o=o+Math.imul(C,ee)|0,n=n+Math.imul(x,re)|0,i=(i=i+Math.imul(x,ne)|0)+Math.imul(M,re)|0,o=o+Math.imul(M,ne)|0,n=n+Math.imul(A,oe)|0,i=(i=i+Math.imul(A,ae)|0)+Math.imul(S,oe)|0,o=o+Math.imul(S,ae)|0,n=n+Math.imul(w,ue)|0,i=(i=i+Math.imul(w,fe)|0)+Math.imul(_,ue)|0,o=o+Math.imul(_,fe)|0,n=n+Math.imul(y,he)|0,i=(i=i+Math.imul(y,de)|0)+Math.imul(v,he)|0,o=o+Math.imul(v,de)|0;var xe=(f+(n=n+Math.imul(p,pe)|0)|0)+((8191&(i=(i=i+Math.imul(p,be)|0)+Math.imul(b,pe)|0))<<13)|0;f=((o=o+Math.imul(b,be)|0)+(i>>>13)|0)+(xe>>>26)|0,xe&=67108863,n=Math.imul(L,W),i=(i=Math.imul(L,Y))+Math.imul(F,W)|0,o=Math.imul(F,Y),n=n+Math.imul(R,J)|0,i=(i=i+Math.imul(R,Z)|0)+Math.imul(N,J)|0,o=o+Math.imul(N,Z)|0,n=n+Math.imul(T,Q)|0,i=(i=i+Math.imul(T,ee)|0)+Math.imul(U,Q)|0,o=o+Math.imul(U,ee)|0,n=n+Math.imul(O,re)|0,i=(i=i+Math.imul(O,ne)|0)+Math.imul(C,re)|0,o=o+Math.imul(C,ne)|0,n=n+Math.imul(x,oe)|0,i=(i=i+Math.imul(x,ae)|0)+Math.imul(M,oe)|0,o=o+Math.imul(M,ae)|0,n=n+Math.imul(A,ue)|0,i=(i=i+Math.imul(A,fe)|0)+Math.imul(S,ue)|0,o=o+Math.imul(S,fe)|0,n=n+Math.imul(w,he)|0,i=(i=i+Math.imul(w,de)|0)+Math.imul(_,he)|0,o=o+Math.imul(_,de)|0;var Me=(f+(n=n+Math.imul(y,pe)|0)|0)+((8191&(i=(i=i+Math.imul(y,be)|0)+Math.imul(v,pe)|0))<<13)|0;f=((o=o+Math.imul(v,be)|0)+(i>>>13)|0)+(Me>>>26)|0,Me&=67108863,n=Math.imul(L,J),i=(i=Math.imul(L,Z))+Math.imul(F,J)|0,o=Math.imul(F,Z),n=n+Math.imul(R,Q)|0,i=(i=i+Math.imul(R,ee)|0)+Math.imul(N,Q)|0,o=o+Math.imul(N,ee)|0,n=n+Math.imul(T,re)|0,i=(i=i+Math.imul(T,ne)|0)+Math.imul(U,re)|0,o=o+Math.imul(U,ne)|0,n=n+Math.imul(O,oe)|0,i=(i=i+Math.imul(O,ae)|0)+Math.imul(C,oe)|0,o=o+Math.imul(C,ae)|0,n=n+Math.imul(x,ue)|0,i=(i=i+Math.imul(x,fe)|0)+Math.imul(M,ue)|0,o=o+Math.imul(M,fe)|0,n=n+Math.imul(A,he)|0,i=(i=i+Math.imul(A,de)|0)+Math.imul(S,he)|0,o=o+Math.imul(S,de)|0;var Ie=(f+(n=n+Math.imul(w,pe)|0)|0)+((8191&(i=(i=i+Math.imul(w,be)|0)+Math.imul(_,pe)|0))<<13)|0;f=((o=o+Math.imul(_,be)|0)+(i>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,n=Math.imul(L,Q),i=(i=Math.imul(L,ee))+Math.imul(F,Q)|0,o=Math.imul(F,ee),n=n+Math.imul(R,re)|0,i=(i=i+Math.imul(R,ne)|0)+Math.imul(N,re)|0,o=o+Math.imul(N,ne)|0,n=n+Math.imul(T,oe)|0,i=(i=i+Math.imul(T,ae)|0)+Math.imul(U,oe)|0,o=o+Math.imul(U,ae)|0,n=n+Math.imul(O,ue)|0,i=(i=i+Math.imul(O,fe)|0)+Math.imul(C,ue)|0,o=o+Math.imul(C,fe)|0,n=n+Math.imul(x,he)|0,i=(i=i+Math.imul(x,de)|0)+Math.imul(M,he)|0,o=o+Math.imul(M,de)|0;var Oe=(f+(n=n+Math.imul(A,pe)|0)|0)+((8191&(i=(i=i+Math.imul(A,be)|0)+Math.imul(S,pe)|0))<<13)|0;f=((o=o+Math.imul(S,be)|0)+(i>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,n=Math.imul(L,re),i=(i=Math.imul(L,ne))+Math.imul(F,re)|0,o=Math.imul(F,ne),n=n+Math.imul(R,oe)|0,i=(i=i+Math.imul(R,ae)|0)+Math.imul(N,oe)|0,o=o+Math.imul(N,ae)|0,n=n+Math.imul(T,ue)|0,i=(i=i+Math.imul(T,fe)|0)+Math.imul(U,ue)|0,o=o+Math.imul(U,fe)|0,n=n+Math.imul(O,he)|0,i=(i=i+Math.imul(O,de)|0)+Math.imul(C,he)|0,o=o+Math.imul(C,de)|0;var Ce=(f+(n=n+Math.imul(x,pe)|0)|0)+((8191&(i=(i=i+Math.imul(x,be)|0)+Math.imul(M,pe)|0))<<13)|0;f=((o=o+Math.imul(M,be)|0)+(i>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,n=Math.imul(L,oe),i=(i=Math.imul(L,ae))+Math.imul(F,oe)|0,o=Math.imul(F,ae),n=n+Math.imul(R,ue)|0,i=(i=i+Math.imul(R,fe)|0)+Math.imul(N,ue)|0,o=o+Math.imul(N,fe)|0,n=n+Math.imul(T,he)|0,i=(i=i+Math.imul(T,de)|0)+Math.imul(U,he)|0,o=o+Math.imul(U,de)|0;var Pe=(f+(n=n+Math.imul(O,pe)|0)|0)+((8191&(i=(i=i+Math.imul(O,be)|0)+Math.imul(C,pe)|0))<<13)|0;f=((o=o+Math.imul(C,be)|0)+(i>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,n=Math.imul(L,ue),i=(i=Math.imul(L,fe))+Math.imul(F,ue)|0,o=Math.imul(F,fe),n=n+Math.imul(R,he)|0,i=(i=i+Math.imul(R,de)|0)+Math.imul(N,he)|0,o=o+Math.imul(N,de)|0;var Te=(f+(n=n+Math.imul(T,pe)|0)|0)+((8191&(i=(i=i+Math.imul(T,be)|0)+Math.imul(U,pe)|0))<<13)|0;f=((o=o+Math.imul(U,be)|0)+(i>>>13)|0)+(Te>>>26)|0,Te&=67108863,n=Math.imul(L,he),i=(i=Math.imul(L,de))+Math.imul(F,he)|0,o=Math.imul(F,de);var Ue=(f+(n=n+Math.imul(R,pe)|0)|0)+((8191&(i=(i=i+Math.imul(R,be)|0)+Math.imul(N,pe)|0))<<13)|0;f=((o=o+Math.imul(N,be)|0)+(i>>>13)|0)+(Ue>>>26)|0,Ue&=67108863;var Be=(f+(n=Math.imul(L,pe))|0)+((8191&(i=(i=Math.imul(L,be))+Math.imul(F,pe)|0))<<13)|0;return f=((o=Math.imul(F,be))+(i>>>13)|0)+(Be>>>26)|0,Be&=67108863,u[0]=me,u[1]=ye,u[2]=ve,u[3]=ge,u[4]=we,u[5]=_e,u[6]=ke,u[7]=Ae,u[8]=Se,u[9]=Ee,u[10]=xe,u[11]=Me,u[12]=Ie,u[13]=Oe,u[14]=Ce,u[15]=Pe,u[16]=Te,u[17]=Ue,u[18]=Be,0!==f&&(u[19]=f,r.length++),r};function b(e,t,r){return(new m).mulp(e,t,r)}function m(e,t){this.x=e,this.y=t}Math.imul||(p=l),a.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?p(this,e,t):r<63?l(this,e,t):r<1024?function(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,i=0,o=0;o>>26)|0)>>>26,a&=67108863}r.words[o]=s,n=a,a=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}(this,e,t):b(this,e,t)},m.prototype.makeRBT=function(e){for(var t=new Array(e),r=a.prototype._countBits(e)-1,n=0;n>=1;return n},m.prototype.permute=function(e,t,r,n,i,o){for(var a=0;a>>=1)i++;return 1<>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*t;a>=26,t+=n/67108864|0,t+=o>>>26,this.words[r]=67108863&o}return 0!==t&&(this.words[r]=t,this.length++),this},a.prototype.muln=function(e){return this.clone().imuln(e)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r>>i}return t}(e);if(0===t.length)return new a(1);for(var r=this,n=0;n=0);var t,r=e%26,n=(e-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(t=0;t>>26-r}a&&(this.words[t]=a,this.length++)}if(0!==n){for(t=this.length-1;t>=0;t--)this.words[t+n]=this.words[t];for(t=0;t=0),n=t?(t-t%26)/26:0;var o=e%26,a=Math.min((e-o)/26,this.length),s=67108863^67108863>>>o<a)for(this.length-=a,f=0;f=0&&(0!==c||f>=n);f--){var h=0|this.words[f];this.words[f]=c<<26-o|h>>>o,c=h&s}return u&&0!==c&&(u.words[u.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},a.prototype.ishrn=function(e,t,r){return i(0===this.negative),this.iushrn(e,t,r)},a.prototype.shln=function(e){return this.clone().ishln(e)},a.prototype.ushln=function(e){return this.clone().iushln(e)},a.prototype.shrn=function(e){return this.clone().ishrn(e)},a.prototype.ushrn=function(e){return this.clone().iushrn(e)},a.prototype.testn=function(e){i("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,n=1<=0);var t=e%26,r=(e-t)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var n=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},a.prototype.isubn=function(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(u/67108864|0),this.words[n+r]=67108863&o}for(;n>26,this.words[n+r]=67108863&o;if(0===s)return this.strip();for(i(-1===s),s=0,n=0;n>26,this.words[n]=67108863&o;return this.negative=1,this.strip()},a.prototype._wordDiv=function(e,t){var r=(this.length,e.length),n=this.clone(),i=e,o=0|i.words[i.length-1];0!==(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var s,u=n.length-i.length;if("mod"!==t){(s=new a(null)).length=u+1,s.words=new Array(s.length);for(var f=0;f=0;h--){var d=67108864*(0|n.words[i.length+h])+(0|n.words[i.length+h-1]);for(d=Math.min(d/o|0,67108863),n._ishlnsubmul(i,d,h);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(i,1,h),n.isZero()||(n.negative^=1);s&&(s.words[h]=d)}return s&&s.strip(),n.strip(),"div"!==t&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},a.prototype.divmod=function(e,t,r){return i(!e.isZero()),this.isZero()?{div:new a(0),mod:new a(0)}:0!==this.negative&&0===e.negative?(s=this.neg().divmod(e,t),"mod"!==t&&(n=s.div.neg()),"div"!==t&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(e)),{div:n,mod:o}):0===this.negative&&0!==e.negative?(s=this.divmod(e.neg(),t),"mod"!==t&&(n=s.div.neg()),{div:n,mod:s.mod}):0!=(this.negative&e.negative)?(s=this.neg().divmod(e.neg(),t),"div"!==t&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(e)),{div:s.div,mod:o}):e.length>this.length||this.cmp(e)<0?{div:new a(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new a(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new a(this.modn(e.words[0]))}:this._wordDiv(e,t);var n,o,s},a.prototype.div=function(e){return this.divmod(e,"div",!1).div},a.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},a.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},a.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),i=e.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},a.prototype.modn=function(e){i(e<=67108863);for(var t=(1<<26)%e,r=0,n=this.length-1;n>=0;n--)r=(t*r+(0|this.words[n]))%e;return r},a.prototype.idivn=function(e){i(e<=67108863);for(var t=0,r=this.length-1;r>=0;r--){var n=(0|this.words[r])+67108864*t;this.words[r]=n/e|0,t=n%e}return this.strip()},a.prototype.divn=function(e){return this.clone().idivn(e)},a.prototype.egcd=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var n=new a(1),o=new a(0),s=new a(0),u=new a(1),f=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++f;for(var c=r.clone(),h=t.clone();!t.isZero();){for(var d=0,l=1;0==(t.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(t.iushrn(d);d-- >0;)(n.isOdd()||o.isOdd())&&(n.iadd(c),o.isub(h)),n.iushrn(1),o.iushrn(1);for(var p=0,b=1;0==(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(s.isOdd()||u.isOdd())&&(s.iadd(c),u.isub(h)),s.iushrn(1),u.iushrn(1);t.cmp(r)>=0?(t.isub(r),n.isub(s),o.isub(u)):(r.isub(t),s.isub(n),u.isub(o))}return{a:s,b:u,gcd:r.iushln(f)}},a.prototype._invmp=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var n,o=new a(1),s=new a(0),u=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var f=0,c=1;0==(t.words[0]&c)&&f<26;++f,c<<=1);if(f>0)for(t.iushrn(f);f-- >0;)o.isOdd()&&o.iadd(u),o.iushrn(1);for(var h=0,d=1;0==(r.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(r.iushrn(h);h-- >0;)s.isOdd()&&s.iadd(u),s.iushrn(1);t.cmp(r)>=0?(t.isub(r),o.isub(s)):(r.isub(t),s.isub(o))}return(n=0===t.cmpn(1)?o:s).cmpn(0)<0&&n.iadd(e),n},a.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=t.cmp(r);if(i<0){var o=t;t=r,r=o}else if(0===i||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},a.prototype.invm=function(e){return this.egcd(e).a.umod(e)},a.prototype.isEven=function(){return 0==(1&this.words[0])},a.prototype.isOdd=function(){return 1==(1&this.words[0])},a.prototype.andln=function(e){return this.words[0]&e},a.prototype.bincn=function(e){i("number"==typeof e);var t=e%26,r=(e-t)/26,n=1<>>26,s&=67108863,this.words[a]=s}return 0!==o&&(this.words[a]=o,this.length++),this},a.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},a.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)t=1;else{r&&(e=-e),i(e<=67108863,"Number is too big");var n=0|this.words[0];t=n===e?0:ne.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|e.words[r];if(n!==i){ni&&(t=1);break}}return t},a.prototype.gtn=function(e){return 1===this.cmpn(e)},a.prototype.gt=function(e){return 1===this.cmp(e)},a.prototype.gten=function(e){return this.cmpn(e)>=0},a.prototype.gte=function(e){return this.cmp(e)>=0},a.prototype.ltn=function(e){return-1===this.cmpn(e)},a.prototype.lt=function(e){return-1===this.cmp(e)},a.prototype.lten=function(e){return this.cmpn(e)<=0},a.prototype.lte=function(e){return this.cmp(e)<=0},a.prototype.eqn=function(e){return 0===this.cmpn(e)},a.prototype.eq=function(e){return 0===this.cmp(e)},a.red=function(e){return new A(e)},a.prototype.toRed=function(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},a.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},a.prototype._forceRed=function(e){return this.red=e,this},a.prototype.forceRed=function(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},a.prototype.redAdd=function(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},a.prototype.redIAdd=function(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},a.prototype.redSub=function(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},a.prototype.redISub=function(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},a.prototype.redShl=function(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},a.prototype.redMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},a.prototype.redIMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},a.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var y={k256:null,p224:null,p192:null,p25519:null};function v(e,t){this.name=e,this.p=new a(t,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function g(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function w(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function _(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function k(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function A(e){if("string"==typeof e){var t=a._prime(e);this.m=t.p,this.prime=t}else i(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function S(e){A.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function(){var e=new a(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var n=t0?r.isub(this.p):r.strip(),r},v.prototype.split=function(e,t){e.iushrn(this.n,0,t)},v.prototype.imulK=function(e){return e.imul(this.k)},o(g,v),g.prototype.split=function(e,t){for(var r=Math.min(e.length,9),n=0;n>>22,i=o}i>>>=22,e.words[n-10]=i,0===i&&e.length>10?e.length-=10:e.length-=9},g.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r>>=26,e.words[r]=i,t=n}return 0!==t&&(e.words[e.length++]=t),e},a._prime=function(e){if(y[e])return y[e];var t;if("k256"===e)t=new g;else if("p224"===e)t=new w;else if("p192"===e)t=new _;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new k}return y[e]=t,t},A.prototype._verify1=function(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},A.prototype._verify2=function(e,t){i(0==(e.negative|t.negative),"red works only with positives"),i(e.red&&e.red===t.red,"red works only with red numbers")},A.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},A.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},A.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},A.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},A.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},A.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},A.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},A.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},A.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},A.prototype.isqr=function(e){return this.imul(e,e.clone())},A.prototype.sqr=function(e){return this.mul(e,e)},A.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(i(t%2==1),3===t){var r=this.m.add(new a(1)).iushrn(2);return this.pow(e,r)}for(var n=this.m.subn(1),o=0;!n.isZero()&&0===n.andln(1);)o++,n.iushrn(1);i(!n.isZero());var s=new a(1).toRed(this),u=s.redNeg(),f=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new a(2*c*c).toRed(this);0!==this.pow(c,f).cmp(u);)c.redIAdd(u);for(var h=this.pow(c,n),d=this.pow(e,n.addn(1).iushrn(1)),l=this.pow(e,n),p=o;0!==l.cmp(s);){for(var b=l,m=0;0!==b.cmp(s);m++)b=b.redSqr();i(m=0;n--){for(var f=t.words[n],c=u-1;c>=0;c--){var h=f>>c&1;i!==r[0]&&(i=this.sqr(i)),0!==h||0!==o?(o<<=1,o|=h,(4===++s||0===n&&0===c)&&(i=this.mul(i,r[o]),s=0,o=0)):s=0}u=26}return i},A.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},A.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},a.mont=function(e){return new S(e)},o(S,A),S.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},S.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},S.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new a(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},S.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(e)}).call(this,r(22)(e))},function(e,t,r){"use strict"; -/*! https://mths.be/utf8js v3.0.0 by @mathias */!function(e){var t,r,n,i=String.fromCharCode;function o(e){for(var t,r,n=[],i=0,o=e.length;i=55296&&t<=56319&&i=55296&&e<=57343)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function s(e,t){return i(e>>t&63|128)}function u(e){if(0==(4294967168&e))return i(e);var t="";return 0==(4294965248&e)?t=i(e>>6&31|192):0==(4294901760&e)?(a(e),t=i(e>>12&15|224),t+=s(e,6)):0==(4292870144&e)&&(t=i(e>>18&7|240),t+=s(e,12),t+=s(e,6)),t+=i(63&e|128)}function f(){if(n>=r)throw Error("Invalid byte index");var e=255&t[n];if(n++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function c(){var e,i;if(n>r)throw Error("Invalid byte index");if(n==r)return!1;if(e=255&t[n],n++,0==(128&e))return e;if(192==(224&e)){if((i=(31&e)<<6|f())>=128)return i;throw Error("Invalid continuation byte")}if(224==(240&e)){if((i=(15&e)<<12|f()<<6|f())>=2048)return a(i),i;throw Error("Invalid continuation byte")}if(240==(248&e)&&(i=(7&e)<<18|f()<<12|f()<<6|f())>=65536&&i<=1114111)return i;throw Error("Invalid UTF-8 detected")}e.version="3.0.0",e.encode=function(e){for(var t=o(e),r=t.length,n=-1,i="";++n65535&&(o+=i((t-=65536)>>>10&1023|55296),t=56320|1023&t),o+=i(t);return o}(s)}}(t)},function(e,t,r){"use strict";var n=r(0)(r(1));Object.defineProperty(t,"__esModule",{value:!0});var i=r(186);function o(e){return"string"==typeof e&&(!!/^(0x)?[0-9a-f]{512}$/i.test(e)&&!(!/^(0x)?[0-9a-f]{512}$/.test(e)&&!/^(0x)?[0-9A-F]{512}$/.test(e)))}function a(e,t){"object"===(0,n.default)(t)&&t.constructor===Uint8Array&&(t=i.bytesToHex(t));for(var r=i.keccak256(t).replace("0x",""),o=0;o<12;o+=4){var a=(parseInt(r.substr(o,2),16)<<8)+parseInt(r.substr(o+2,2),16)&2047,u=1<=48&&e<=57)return e-48;if(e>=65&&e<=70)return e-55;if(e>=97&&e<=102)return e-87;throw new Error("invalid bloom")}function u(e){return"string"==typeof e&&(!!/^(0x)?[0-9a-f]{64}$/i.test(e)&&!(!/^(0x)?[0-9a-f]{64}$/.test(e)&&!/^(0x)?[0-9A-F]{64}$/.test(e)))}function f(e){return"string"==typeof e&&(!!e.match(/^(0x)?[0-9a-fA-F]{40}$/)||!!e.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/))}t.isBloom=o,t.isInBloom=a,t.isUserEthereumAddressInBloom=function(e,t){if(!o(e))throw new Error("Invalid bloom given");if(!f(t))throw new Error('Invalid ethereum address given: "'.concat(t,'"'));return a(e,i.padLeft(t,64))},t.isContractAddressInBloom=function(e,t){if(!o(e))throw new Error("Invalid bloom given");if(!f(t))throw new Error('Invalid contract address given: "'.concat(t,'"'));return a(e,t)},t.isTopicInBloom=function(e,t){if(!o(e))throw new Error("Invalid bloom given");if(!u(t))throw new Error("Invalid topic");return a(e,t)},t.isTopic=u,t.isAddress=f},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(187);function i(e){if(null==e)throw new Error("cannot convert null value to array");if("string"==typeof e){var t=e.match(/^(0x)?[0-9a-fA-F]*$/);if(!t)throw new Error("invalid hexidecimal string");if("0x"!==t[1])throw new Error("hex string must have 0x prefix");(e=e.substring(2)).length%2&&(e="0"+e);for(var r=[],n=0;n=256||parseInt(String(r))!=r)return!1}return!0}(e))return o(new Uint8Array(e));throw new Error("invalid arrayify value")}function o(e){return e.slice||(e.slice=function(){var t=Array.prototype.slice.call(arguments);return o(new Uint8Array(Array.prototype.slice.apply(e,t)))}),e}t.keccak256=function(e){return"0x"+n.keccak_256(i(e))},t.padLeft=function(e,t){var r=/^0x/i.test(e)||"number"==typeof e,n=t-(e=e.toString().replace(/^0x/i,"")).length+1>=0?t-e.length+1:0;return(r?"0x":"")+new Array(n).join("0")+e},t.bytesToHex=function(e){for(var t=[],r=0;r>>4).toString(16)),t.push((15&e[r]).toString(16));return"0x".concat(t.join("").replace(/^0+/,""))},t.toByteArray=i},function(e,t,r){"use strict";(function(e,n,i){var o,a=r(0)(r(1)); -/** - * [js-sha3]{@link https://github.com/emn178/js-sha3} - * - * @version 0.8.0 - * @author Chen, Yi-Cyuan [emn178@gmail.com] - * @copyright Chen, Yi-Cyuan 2015-2018 - * @license MIT - */ -!function(){var s="input is invalid type",u="object"===("undefined"==typeof window?"undefined":(0,a.default)(window)),f=u?window:{};f.JS_SHA3_NO_WINDOW&&(u=!1);var c=!u&&"object"===("undefined"==typeof self?"undefined":(0,a.default)(self));!f.JS_SHA3_NO_NODE_JS&&"object"===(void 0===e?"undefined":(0,a.default)(e))&&e.versions&&e.versions.node?f=n:c&&(f=self);var h=!f.JS_SHA3_NO_COMMON_JS&&"object"===(0,a.default)(i)&&i.exports,d=r(62),l=!f.JS_SHA3_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,p="0123456789abcdef".split(""),b=[4,1024,262144,67108864],m=[0,8,16,24],y=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],v=[224,256,384,512],g=[128,256],w=["hex","buffer","arrayBuffer","array","digest"],_={128:168,256:136};!f.JS_SHA3_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!l||!f.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"===(0,a.default)(e)&&e.buffer&&e.buffer.constructor===ArrayBuffer});for(var k=function(e,t,r){return function(n){return new j(e,t,e).update(n)[r]()}},A=function(e,t,r){return function(n,i){return new j(e,t,i).update(n)[r]()}},S=function(e,t,r){return function(t,n,i,o){return O["cshake"+e].update(t,n,i,o)[r]()}},E=function(e,t,r){return function(t,n,i,o){return O["kmac"+e].update(t,n,i,o)[r]()}},x=function(e,t,r,n){for(var i=0;i>5,this.byteCount=this.blockCount<<2,this.outputBlocks=r>>5,this.extraBytes=(31&r)>>3;for(var n=0;n<50;++n)this.s[n]=0}function L(e,t,r){j.call(this,e,t,r)}j.prototype.update=function(e){if(this.finalized)throw new Error("finalize already called");var t,r=(0,a.default)(e);if("string"!==r){if("object"!==r)throw new Error(s);if(null===e)throw new Error(s);if(l&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||l&&ArrayBuffer.isView(e)))throw new Error(s);t=!0}for(var n,i,o=this.blocks,u=this.byteCount,f=e.length,c=this.blockCount,h=0,d=this.s;h>2]|=e[h]<>2]|=i<>2]|=(192|i>>6)<>2]|=(128|63&i)<=57344?(o[n>>2]|=(224|i>>12)<>2]|=(128|i>>6&63)<>2]|=(128|63&i)<>2]|=(240|i>>18)<>2]|=(128|i>>12&63)<>2]|=(128|i>>6&63)<>2]|=(128|63&i)<=u){for(this.start=n-u,this.block=o[c],n=0;n>=8);r>0;)i.unshift(r),r=255&(e>>=8),++n;return t?i.push(n):i.unshift(n),this.update(i),i.length},j.prototype.encodeString=function(e){var t,r=(0,a.default)(e);if("string"!==r){if("object"!==r)throw new Error(s);if(null===e)throw new Error(s);if(l&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||l&&ArrayBuffer.isView(e)))throw new Error(s);t=!0}var n=0,i=e.length;if(t)n=i;else for(var o=0;o=57344?n+=3:(u=65536+((1023&u)<<10|1023&e.charCodeAt(++o)),n+=4)}return n+=this.encode(8*n),this.update(e),n},j.prototype.bytepad=function(e,t){for(var r=this.encode(t),n=0;n>2]|=this.padding[3&t],this.lastByteIndex===this.byteCount)for(e[0]=e[r],t=1;t>4&15]+p[15&e]+p[e>>12&15]+p[e>>8&15]+p[e>>20&15]+p[e>>16&15]+p[e>>28&15]+p[e>>24&15];a%t==0&&(F(r),o=0)}return i&&(e=r[o],s+=p[e>>4&15]+p[15&e],i>1&&(s+=p[e>>12&15]+p[e>>8&15]),i>2&&(s+=p[e>>20&15]+p[e>>16&15])),s},j.prototype.arrayBuffer=function(){this.finalize();var e,t=this.blockCount,r=this.s,n=this.outputBlocks,i=this.extraBytes,o=0,a=0,s=this.outputBits>>3;e=i?new ArrayBuffer(n+1<<2):new ArrayBuffer(s);for(var u=new Uint32Array(e);a>8&255,u[e+2]=t>>16&255,u[e+3]=t>>24&255;s%r==0&&F(n)}return o&&(e=s<<2,t=n[a],u[e]=255&t,o>1&&(u[e+1]=t>>8&255),o>2&&(u[e+2]=t>>16&255)),u},L.prototype=new j,L.prototype.finalize=function(){return this.encode(this.outputBits,!0),j.prototype.finalize.call(this)};var F=function(e){var t,r,n,i,o,a,s,u,f,c,h,d,l,p,b,m,v,g,w,_,k,A,S,E,x,M,I,O,C,P,T,U,B,R,N,j,L,F,D,q,z,H,K,V,G,W,Y,$,J,Z,X,Q,ee,te,re,ne,ie,oe,ae,se,ue,fe,ce;for(n=0;n<48;n+=2)i=e[0]^e[10]^e[20]^e[30]^e[40],o=e[1]^e[11]^e[21]^e[31]^e[41],a=e[2]^e[12]^e[22]^e[32]^e[42],s=e[3]^e[13]^e[23]^e[33]^e[43],u=e[4]^e[14]^e[24]^e[34]^e[44],f=e[5]^e[15]^e[25]^e[35]^e[45],c=e[6]^e[16]^e[26]^e[36]^e[46],h=e[7]^e[17]^e[27]^e[37]^e[47],t=(d=e[8]^e[18]^e[28]^e[38]^e[48])^(a<<1|s>>>31),r=(l=e[9]^e[19]^e[29]^e[39]^e[49])^(s<<1|a>>>31),e[0]^=t,e[1]^=r,e[10]^=t,e[11]^=r,e[20]^=t,e[21]^=r,e[30]^=t,e[31]^=r,e[40]^=t,e[41]^=r,t=i^(u<<1|f>>>31),r=o^(f<<1|u>>>31),e[2]^=t,e[3]^=r,e[12]^=t,e[13]^=r,e[22]^=t,e[23]^=r,e[32]^=t,e[33]^=r,e[42]^=t,e[43]^=r,t=a^(c<<1|h>>>31),r=s^(h<<1|c>>>31),e[4]^=t,e[5]^=r,e[14]^=t,e[15]^=r,e[24]^=t,e[25]^=r,e[34]^=t,e[35]^=r,e[44]^=t,e[45]^=r,t=u^(d<<1|l>>>31),r=f^(l<<1|d>>>31),e[6]^=t,e[7]^=r,e[16]^=t,e[17]^=r,e[26]^=t,e[27]^=r,e[36]^=t,e[37]^=r,e[46]^=t,e[47]^=r,t=c^(i<<1|o>>>31),r=h^(o<<1|i>>>31),e[8]^=t,e[9]^=r,e[18]^=t,e[19]^=r,e[28]^=t,e[29]^=r,e[38]^=t,e[39]^=r,e[48]^=t,e[49]^=r,p=e[0],b=e[1],W=e[11]<<4|e[10]>>>28,Y=e[10]<<4|e[11]>>>28,O=e[20]<<3|e[21]>>>29,C=e[21]<<3|e[20]>>>29,se=e[31]<<9|e[30]>>>23,ue=e[30]<<9|e[31]>>>23,H=e[40]<<18|e[41]>>>14,K=e[41]<<18|e[40]>>>14,R=e[2]<<1|e[3]>>>31,N=e[3]<<1|e[2]>>>31,m=e[13]<<12|e[12]>>>20,v=e[12]<<12|e[13]>>>20,$=e[22]<<10|e[23]>>>22,J=e[23]<<10|e[22]>>>22,P=e[33]<<13|e[32]>>>19,T=e[32]<<13|e[33]>>>19,fe=e[42]<<2|e[43]>>>30,ce=e[43]<<2|e[42]>>>30,te=e[5]<<30|e[4]>>>2,re=e[4]<<30|e[5]>>>2,j=e[14]<<6|e[15]>>>26,L=e[15]<<6|e[14]>>>26,g=e[25]<<11|e[24]>>>21,w=e[24]<<11|e[25]>>>21,Z=e[34]<<15|e[35]>>>17,X=e[35]<<15|e[34]>>>17,U=e[45]<<29|e[44]>>>3,B=e[44]<<29|e[45]>>>3,E=e[6]<<28|e[7]>>>4,x=e[7]<<28|e[6]>>>4,ne=e[17]<<23|e[16]>>>9,ie=e[16]<<23|e[17]>>>9,F=e[26]<<25|e[27]>>>7,D=e[27]<<25|e[26]>>>7,_=e[36]<<21|e[37]>>>11,k=e[37]<<21|e[36]>>>11,Q=e[47]<<24|e[46]>>>8,ee=e[46]<<24|e[47]>>>8,V=e[8]<<27|e[9]>>>5,G=e[9]<<27|e[8]>>>5,M=e[18]<<20|e[19]>>>12,I=e[19]<<20|e[18]>>>12,oe=e[29]<<7|e[28]>>>25,ae=e[28]<<7|e[29]>>>25,q=e[38]<<8|e[39]>>>24,z=e[39]<<8|e[38]>>>24,A=e[48]<<14|e[49]>>>18,S=e[49]<<14|e[48]>>>18,e[0]=p^~m&g,e[1]=b^~v&w,e[10]=E^~M&O,e[11]=x^~I&C,e[20]=R^~j&F,e[21]=N^~L&D,e[30]=V^~W&$,e[31]=G^~Y&J,e[40]=te^~ne&oe,e[41]=re^~ie&ae,e[2]=m^~g&_,e[3]=v^~w&k,e[12]=M^~O&P,e[13]=I^~C&T,e[22]=j^~F&q,e[23]=L^~D&z,e[32]=W^~$&Z,e[33]=Y^~J&X,e[42]=ne^~oe&se,e[43]=ie^~ae&ue,e[4]=g^~_&A,e[5]=w^~k&S,e[14]=O^~P&U,e[15]=C^~T&B,e[24]=F^~q&H,e[25]=D^~z&K,e[34]=$^~Z&Q,e[35]=J^~X&ee,e[44]=oe^~se&fe,e[45]=ae^~ue&ce,e[6]=_^~A&p,e[7]=k^~S&b,e[16]=P^~U&E,e[17]=T^~B&x,e[26]=q^~H&R,e[27]=z^~K&N,e[36]=Z^~Q&V,e[37]=X^~ee&G,e[46]=se^~fe&te,e[47]=ue^~ce&re,e[8]=A^~p&m,e[9]=S^~b&v,e[18]=U^~E&M,e[19]=B^~x&I,e[28]=H^~R&j,e[29]=K^~N&L,e[38]=Q^~V&W,e[39]=ee^~G&Y,e[48]=fe^~te&ne,e[49]=ce^~re&ie,e[0]^=y[n],e[1]^=y[n+1]};if(h)i.exports=O;else{for(P=0;P32||n256)throw new Error("Invalid uint"+n+" size");if((i=s(t)).bitLength()>n)throw new Error("Supplied uint exceeds width: "+n+" vs "+i.bitLength());if(i.lt(new o(0)))throw new Error("Supplied uint "+i.toString()+" is negative");return n?a.leftPad(i.toString("hex"),n/8*2):i}if(e.startsWith("int")){if(n%8||n<8||n>256)throw new Error("Invalid int"+n+" size");if((i=s(t)).bitLength()>n)throw new Error("Supplied int exceeds width: "+n+" vs "+i.bitLength());return i.lt(new o(0))?i.toTwos(n).toString("hex"):n?a.leftPad(i.toString("hex"),n/8*2):i}throw new Error("Unsupported or invalid type: "+e)},f=function(e){if(i.isArray(e))throw new Error("Autodetection of array types is not supported.");var t,r,n="";if(i.isObject(e)&&(e.hasOwnProperty("v")||e.hasOwnProperty("t")||e.hasOwnProperty("value")||e.hasOwnProperty("type"))?(t=e.hasOwnProperty("t")?e.t:e.type,n=e.hasOwnProperty("v")?e.v:e.value):(t=a.toHex(e,!0),n=a.toHex(e),t.startsWith("int")||t.startsWith("uint")||(t="bytes")),!t.startsWith("int")&&!t.startsWith("uint")||"string"!=typeof n||/^(-)?0x/i.test(n)||(n=new o(n)),i.isArray(n)){if((r=function(e){var t=/^\D+\d*\[(\d+)\]$/.exec(e);return t?parseInt(t[1],10):null}(t))&&n.length!==r)throw new Error(t+" is not matching the given array "+JSON.stringify(n));r=n.length}return i.isArray(n)?n.map((function(e){return u(t,e,r).toString("hex").replace("0x","")})).join(""):u(t,n,r).toString("hex").replace("0x","")};e.exports={soliditySha3:function(){var e=Array.prototype.slice.call(arguments),t=i.map(e,f);return a.sha3("0x"+t.join(""))},soliditySha3Raw:function(){return a.sha3Raw("0x"+i.map(Array.prototype.slice.call(arguments),f).join(""))},encodePacked:function(){var e=Array.prototype.slice.call(arguments),t=i.map(e,f);return"0x"+t.join("").toLowerCase()}}},function(e,t,r){"use strict";var n=r(94),i=r(9).errors,o=function(e){this.requestManager=e,this.requests=[]};o.prototype.add=function(e){this.requests.push(e)},o.prototype.execute=function(){var e=this.requests;this.requestManager.sendBatch(e,(function(t,r){r=r||[],e.map((function(e,t){return r[t]||{}})).forEach((function(t,r){if(e[r].callback){if(t&&t.error)return e[r].callback(i.ErrorResponse(t));if(!n.isValidResponse(t))return e[r].callback(i.InvalidResponse(t));try{e[r].callback(null,e[r].format?e[r].format(t.result):t.result)}catch(t){e[r].callback(t)}}}))}))},e.exports=o},function(e,t,r){"use strict";var n,i=null;try{n=Function("return this")()}catch(e){n=window}void 0!==n.ethereum?i=n.ethereum:void 0!==n.web3&&n.web3.currentProvider&&(n.web3.currentProvider.sendAsync&&(n.web3.currentProvider.send=n.web3.currentProvider.sendAsync,delete n.web3.currentProvider.sendAsync),!n.web3.currentProvider.on&&n.web3.currentProvider.connection&&"ipcProviderWrapper"===n.web3.currentProvider.connection.constructor.name&&(n.web3.currentProvider.on=function(e,t){if("function"!=typeof t)throw new Error("The second parameter callback must be a function.");switch(e){case"data":this.connection.on("data",(function(e){var r="";e=e.toString();try{r=JSON.parse(e)}catch(r){return t(new Error("Couldn't parse response data"+e))}r.id||-1===r.method.indexOf("_subscription")||t(null,r)}));break;default:this.connection.on(e,t)}}),i=n.web3.currentProvider),e.exports=i},function(e,t,r){"use strict";var n=r(63),i=r(192),o=r(9).errors,a=r(197).w3cwebsocket,s=function(e,t){n.call(this),t=t||{},this.url=e,this._customTimeout=t.timeout||15e3,this.headers=t.headers||{},this.protocol=t.protocol||void 0,this.reconnectOptions=Object.assign({auto:!1,delay:5e3,maxAttempts:!1,onTimeout:!1},t.reconnect),this.clientConfig=t.clientConfig||void 0,this.requestOptions=t.requestOptions||void 0,this.DATA="data",this.CLOSE="close",this.ERROR="error",this.CONNECT="connect",this.RECONNECT="reconnect",this.connection=null,this.requestQueue=new Map,this.responseQueue=new Map,this.reconnectAttempts=0,this.reconnecting=!1;var r=i.parseURL(e);r.username&&r.password&&(this.headers.authorization="Basic "+i.btoa(r.username+":"+r.password)),r.auth&&(this.headers.authorization="Basic "+i.btoa(r.auth)),Object.defineProperty(this,"connected",{get:function(){return this.connection&&this.connection.readyState===this.connection.OPEN},enumerable:!0}),this.connect()};(s.prototype=Object.create(n.prototype)).constructor=s,s.prototype.connect=function(){this.connection=new a(this.url,this.protocol,void 0,this.headers,this.requestOptions,this.clientConfig),this._addSocketListeners()},s.prototype._onMessage=function(e){var t=this;this._parseResponse("string"==typeof e.data?e.data:"").forEach((function(e){if(e.method&&-1!==e.method.indexOf("_subscription"))t.emit(t.DATA,e);else{var r=e.id;Array.isArray(e)&&(r=e[0].id),t.responseQueue.has(r)&&(void 0!==t.responseQueue.get(r).callback&&t.responseQueue.get(r).callback(!1,e),t.responseQueue.delete(r))}}))},s.prototype._onConnect=function(){if(this.emit(this.CONNECT),this.reconnectAttempts=0,this.reconnecting=!1,this.requestQueue.size>0){var e=this;this.requestQueue.forEach((function(t,r){e.send(t.payload,t.callback),e.requestQueue.delete(r)}))}},s.prototype._onClose=function(e){var t=this;!this.reconnectOptions.auto||[1e3,1001].includes(e.code)&&!1!==e.wasClean?(this.emit(this.CLOSE,e),this.requestQueue.size>0&&this.requestQueue.forEach((function(r,n){r.callback(o.ConnectionNotOpenError(e)),t.requestQueue.delete(n)})),this.responseQueue.size>0&&this.responseQueue.forEach((function(r,n){r.callback(o.InvalidConnection("on WS",e)),t.responseQueue.delete(n)})),this._removeSocketListeners(),this.removeAllListeners()):this.reconnect()},s.prototype._addSocketListeners=function(){this.connection.addEventListener("message",this._onMessage.bind(this)),this.connection.addEventListener("open",this._onConnect.bind(this)),this.connection.addEventListener("close",this._onClose.bind(this))},s.prototype._removeSocketListeners=function(){this.connection.removeEventListener("message",this._onMessage),this.connection.removeEventListener("open",this._onConnect),this.connection.removeEventListener("close",this._onClose)},s.prototype._parseResponse=function(e){var t=this,r=[];return e.replace(/\}[\n\r]?\{/g,"}|--|{").replace(/\}\][\n\r]?\[\{/g,"}]|--|[{").replace(/\}[\n\r]?\[\{/g,"}|--|[{").replace(/\}\][\n\r]?\{/g,"}]|--|{").split("|--|").forEach((function(e){t.lastChunk&&(e=t.lastChunk+e);var n=null;try{n=JSON.parse(e)}catch(r){return t.lastChunk=e,clearTimeout(t.lastChunkTimeout),void(t.lastChunkTimeout=setTimeout((function(){t.reconnectOptions.auto&&t.reconnectOptions.onTimeout?t.reconnect():(t.emit(t.ERROR,o.ConnectionTimeout(t._customTimeout)),t.requestQueue.size>0&&t.requestQueue.forEach((function(e,r){e.callback(o.ConnectionTimeout(t._customTimeout)),t.requestQueue.delete(r)})))}),t._customTimeout))}clearTimeout(t.lastChunkTimeout),t.lastChunk=null,n&&r.push(n)})),r},s.prototype.send=function(e,t){var r=e.id,n={payload:e,callback:t};if(Array.isArray(e)&&(r=e[0].id),this.connection.readyState===this.connection.CONNECTING||this.reconnecting)this.requestQueue.set(r,n);else{if(this.connection.readyState!==this.connection.OPEN)return this.requestQueue.delete(r),this.emit(this.ERROR,o.ConnectionNotOpenError()),void n.callback(o.ConnectionNotOpenError());this.responseQueue.set(r,n),this.requestQueue.delete(r);try{this.connection.send(JSON.stringify(n.payload))}catch(e){n.callback(e),this.responseQueue.delete(r)}}},s.prototype.reset=function(){this.responseQueue.clear(),this.requestQueue.clear(),this.removeAllListeners(),this._removeSocketListeners(),this._addSocketListeners()},s.prototype.disconnect=function(e,t){this._removeSocketListeners(),this.connection.close(e||1e3,t)},s.prototype.supportsSubscriptions=function(){return!0},s.prototype.reconnect=function(){var e=this;this.reconnecting=!0,this.responseQueue.size>0&&this.responseQueue.forEach((function(t,r){t.callback(o.PendingRequestsOnReconnectingError()),e.responseQueue.delete(r)})),!this.reconnectOptions.maxAttempts||this.reconnectAttempts0&&this.requestQueue.forEach((function(t,r){t.callback(o.MaxAttemptsReachedOnReconnectingError()),e.requestQueue.delete(r)})))},e.exports=s},function(e,t,r){"use strict";(function(t,n){var i="[object process]"===Object.prototype.toString.call(void 0!==t?t:0),o="undefined"!=typeof navigator&&"ReactNative"===navigator.product,a=null,s=null;if(i||o){a=function(e){return n.from(e).toString("base64")};var u=r(33);if(u.URL){var f=u.URL;s=function(e){return new f(e)}}else s=r(33).parse}else a=btoa.bind(window),s=function(e){return new URL(e)};e.exports={parseURL:s,btoa:a}}).call(this,r(11),r(2).Buffer)},function(e,t,r){"use strict";var n=r(0)(r(1));e.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"===(0,n.default)(e)&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},function(e,t,r){"use strict";t.decode=t.parse=r(195),t.encode=t.stringify=r(196)},function(e,t,r){"use strict";function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,r,o){t=t||"&",r=r||"=";var a={};if("string"!=typeof e||0===e.length)return a;var s=/\+/g;e=e.split(t);var u=1e3;o&&"number"==typeof o.maxKeys&&(u=o.maxKeys);var f=e.length;u>0&&f>u&&(f=u);for(var c=0;c=0?(h=b.substr(0,m),d=b.substr(m+1)):(h=b,d=""),l=decodeURIComponent(h),p=decodeURIComponent(d),n(a,l)?i(a[l])?a[l].push(p):a[l]=[a[l],p]:a[l]=p}return a};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,r){"use strict";var n=r(0)(r(1)),i=function(e){switch((0,n.default)(e)){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,r,u){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"===(0,n.default)(e)?a(s(e),(function(n){var s=encodeURIComponent(i(n))+r;return o(e[n])?a(e[n],(function(e){return s+encodeURIComponent(i(e))})).join(t):s+encodeURIComponent(i(e[n]))})).join(t):u?encodeURIComponent(i(u))+r+encodeURIComponent(i(e)):""};var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function a(e,t){if(e.map)return e.map(t);for(var r=[],n=0;n=4.0.0"},"homepage":"https://github.com/theturtle32/WebSocket-Node","keywords":["websocket","websockets","socket","networking","comet","push","RFC-6455","realtime","server","client"],"license":"Apache-2.0","main":"index","name":"websocket","repository":{"type":"git","url":"git+https://github.com/theturtle32/WebSocket-Node.git"},"scripts":{"gulp":"gulp","test":"tape test/unit/*.js"},"version":"1.0.32"}')},function(e,t,r){"use strict";var n=r(9).errors,i=r(202).XMLHttpRequest,o=r(64),a=r(104),s=function(e,t){t=t||{},this.withCredentials=t.withCredentials||!1,this.timeout=t.timeout||0,this.headers=t.headers,this.agent=t.agent,this.connected=!1;var r=!1!==t.keepAlive;this.host=e||"http://localhost:8545",this.agent||("https"===this.host.substring(0,5)?this.httpsAgent=new a.Agent({keepAlive:r}):this.httpAgent=new o.Agent({keepAlive:r}))};s.prototype._prepareRequest=function(){var e;if("undefined"!=typeof XMLHttpRequest)e=new XMLHttpRequest;else{e=new i;var t={httpsAgent:this.httpsAgent,httpAgent:this.httpAgent,baseUrl:this.baseUrl};this.agent&&(t.httpsAgent=this.agent.https,t.httpAgent=this.agent.http,t.baseUrl=this.agent.baseUrl),e.nodejsSet(t)}return e.open("POST",this.host,!0),e.setRequestHeader("Content-Type","application/json"),e.timeout=this.timeout,e.withCredentials=this.withCredentials,this.headers&&this.headers.forEach((function(t){e.setRequestHeader(t.name,t.value)})),e},s.prototype.send=function(e,t){var r=this,i=this._prepareRequest();i.onreadystatechange=function(){if(4===i.readyState&&1!==i.timeout){var e=i.responseText,o=null;try{e=JSON.parse(e)}catch(e){o=n.InvalidResponse(i.responseText)}r.connected=!0,t(o,e)}},i.ontimeout=function(){r.connected=!1,t(n.ConnectionTimeout(this.timeout))};try{i.send(JSON.stringify(e))}catch(e){this.connected=!1,t(n.InvalidConnection(this.host))}},s.prototype.disconnect=function(){},s.prototype.supportsSubscriptions=function(){return!1},e.exports=s},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){for(var r in e)t.hasOwnProperty(r)||(t[r]=e[r])}(r(203));var n=r(68);t.XMLHttpRequestEventTarget=n.XMLHttpRequestEventTarget},function(e,t,r){"use strict";(function(e,n){var i,o=(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=0)return this._url=this._parseUrl(t.headers.location),this._method="GET",this._loweredHeaders["content-type"]&&(delete this._headers[this._loweredHeaders["content-type"]],delete this._loweredHeaders["content-type"]),null!=this._headers["Content-Type"]&&delete this._headers["Content-Type"],delete this._headers["Content-Length"],this.upload._reset(),this._finalizeHeaders(),void this._sendHxxpRequest();this._response=t,this._response.on("data",(function(e){return n._onHttpResponseData(t,e)})),this._response.on("end",(function(){return n._onHttpResponseEnd(t)})),this._response.on("close",(function(){return n._onHttpResponseClose(t)})),this.responseUrl=this._url.href.split("#")[0],this.status=t.statusCode,this.statusText=s.STATUS_CODES[this.status],this._parseResponseHeaders(t);var i=this._responseHeaders["content-length"]||"";this._totalBytes=+i,this._lengthComputable=!!i,this._setReadyState(r.HEADERS_RECEIVED)}},r.prototype._onHttpResponseData=function(e,t){this._response===e&&(this._responseParts.push(new n(t)),this._loadedBytes+=t.length,this.readyState!==r.LOADING&&this._setReadyState(r.LOADING),this._dispatchProgress("progress"))},r.prototype._onHttpResponseEnd=function(e){this._response===e&&(this._parseResponse(),this._request=null,this._response=null,this._setReadyState(r.DONE),this._dispatchProgress("load"),this._dispatchProgress("loadend"))},r.prototype._onHttpResponseClose=function(e){if(this._response===e){var t=this._request;this._setError(),t.abort(),this._setReadyState(r.DONE),this._dispatchProgress("error"),this._dispatchProgress("loadend")}},r.prototype._onHttpTimeout=function(e){this._request===e&&(this._setError(),e.abort(),this._setReadyState(r.DONE),this._dispatchProgress("timeout"),this._dispatchProgress("loadend"))},r.prototype._onHttpRequestError=function(e,t){this._request===e&&(this._setError(),e.abort(),this._setReadyState(r.DONE),this._dispatchProgress("error"),this._dispatchProgress("loadend"))},r.prototype._dispatchProgress=function(e){var t=new r.ProgressEvent(e);t.lengthComputable=this._lengthComputable,t.loaded=this._loadedBytes,t.total=this._totalBytes,this.dispatchEvent(t)},r.prototype._setError=function(){this._request=null,this._response=null,this._responseHeaders=null,this._responseParts=null},r.prototype._parseUrl=function(e,t,r){var n=null==this.nodejsBaseUrl?e:c.resolve(this.nodejsBaseUrl,e),i=c.parse(n,!1,!0);i.hash=null;var o=(i.auth||"").split(":"),a=o[0],s=o[1];return(a||s||t||r)&&(i.auth=(t||a||"")+":"+(r||s||"")),i},r.prototype._parseResponseHeaders=function(e){for(var t in this._responseHeaders={},e.headers){var r=t.toLowerCase();this._privateHeaders[r]||(this._responseHeaders[r]=e.headers[t])}null!=this._mimeOverride&&(this._responseHeaders["content-type"]=this._mimeOverride)},r.prototype._parseResponse=function(){var e=n.concat(this._responseParts);switch(this._responseParts=null,this.responseType){case"json":this.responseText=null;try{this.response=JSON.parse(e.toString("utf-8"))}catch(e){this.response=null}return;case"buffer":return this.responseText=null,void(this.response=e);case"arraybuffer":this.responseText=null;for(var t=new ArrayBuffer(e.length),r=new Uint8Array(t),i=0;i0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return n.alloc(0);if(1===this.length)return this.head.data;for(var t,r,i,o=n.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,r=o,i=s,t.copy(r,i),s+=a.data.length,a=a.next;return o},e}(),i&&i.inspect&&i.inspect.custom&&(e.exports.prototype[i.inspect.custom]=function(){var e=i.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,r){"use strict";(function(e,t){!function(e,r){if(!e.setImmediate){var n,i,o,a,s,u=1,f={},c=!1,h=e.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(e);d=d&&d.setTimeout?d:e,"[object process]"==={}.toString.call(e.process)?n=function(){var e=l(arguments);return t.nextTick(p(b,e)),e}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,r=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=r,t}}()?e.MessageChannel?((o=new MessageChannel).port1.onmessage=function(e){b(e.data)},n=function(){var e=l(arguments);return o.port2.postMessage(e),e}):h&&"onreadystatechange"in h.createElement("script")?(i=h.documentElement,n=function(){var e=l(arguments),t=h.createElement("script");return t.onreadystatechange=function(){b(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t),e}):n=function(){var e=l(arguments);return setTimeout(p(b,e),0),e}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&b(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),n=function(){var t=l(arguments);return e.postMessage(a+t,"*"),t}),d.setImmediate=n,d.clearImmediate=m}function l(e){return f[u]=p.apply(void 0,e),u++}function p(e){var t=[].slice.call(arguments,1);return function(){"function"==typeof e?e.apply(void 0,t):new Function(""+e)()}}function b(e){if(c)setTimeout(p(b,e),0);else{var t=f[e];if(t){c=!0;try{t()}finally{m(e),c=!1}}}}function m(e){delete f[e]}}("undefined"==typeof self?void 0===e?void 0:e:self)}).call(this,r(8),r(11))},function(e,t,r){"use strict";(function(t){function r(e){try{if(!t.localStorage)return!1}catch(e){return!1}var r=t.localStorage[e];return null!=r&&"true"===String(r).toLowerCase()}e.exports=function(e,t){if(r("noDeprecation"))return e;var n=!1;return function(){if(!n){if(r("throwDeprecation"))throw new Error(t);r("traceDeprecation")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}}}).call(this,r(8))},function(e,t,r){"use strict";var n=r(2),i=n.Buffer;function o(e,t){for(var r in e)t[r]=e[r]}function a(e,t,r){return i(e,t,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?e.exports=n:(o(n,t),t.Buffer=a),a.prototype=Object.create(i.prototype),o(i,a),a.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return i(e,t,r)},a.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var n=i(e);return void 0!==t?"string"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}},function(e,t,r){"use strict";e.exports=o;var n=r(102),i=r(35);function o(e){if(!(this instanceof o))return new o(e);n.call(this,e)}i.inherits=r(3),i.inherits(o,n),o.prototype._transform=function(e,t,r){r(null,e)}},function(e,t,r){"use strict";var n=r(2).Buffer;e.exports=function(e){if(e instanceof Uint8Array){if(0===e.byteOffset&&e.byteLength===e.buffer.byteLength)return e.buffer;if("function"==typeof e.buffer.slice)return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}if(n.isBuffer(e)){for(var t=new Uint8Array(e.length),r=e.length,i=0;i0&&(i=r),r=e[f++]);)switch(q++,"\n"===r?(H++,z=0):z++,N){case d:if("{"===r)N=p;else if("["===r)N=m;else if(!V(r))return K("Non-whitespace before {[.");continue;case g:case p:if(V(r))continue;if(N===g)j.push(w);else{if("}"===r){s({}),u(),N=j.pop()||l;continue}j.push(b)}if('"'!==r)return K('Malformed object key should start with " ');N=v;continue;case w:case b:if(V(r))continue;if(":"===r)N===b?(j.push(b),void 0!==o&&(s({}),a(o),o=void 0),D++):void 0!==o&&(a(o),o=void 0),N=l;else if("}"===r)void 0!==o&&(s(o),u(),o=void 0),u(),D--,N=j.pop()||l;else{if(","!==r)return K("Bad object");N===b&&j.push(b),void 0!==o&&(s(o),u(),o=void 0),N=g}continue;case m:case l:if(V(r))continue;if(N===m){if(s([]),D++,N=l,"]"===r){u(),D--,N=j.pop()||l;continue}j.push(y)}if('"'===r)N=v;else if("{"===r)N=p;else if("["===r)N=m;else if("t"===r)N=_;else if("f"===r)N=S;else if("n"===r)N=I;else if("-"===r)U+=r;else if("0"===r)U+=r,N=20;else{if(-1==="123456789".indexOf(r))return K("Bad value");U+=r,N=20}continue;case y:if(","===r)j.push(y),void 0!==o&&(s(o),u(),o=void 0),N=l;else{if("]"!==r){if(V(r))continue;return K("Bad array")}void 0!==o&&(s(o),u(),o=void 0),u(),D--,N=j.pop()||l}continue;case v:void 0===o&&(o="");var h=f-1;e:for(;;){for(;F>0;)if(L+=r,r=e.charAt(f++),4===F?(o+=String.fromCharCode(parseInt(L,16)),F=0,h=f-1):F++,!r)break e;if('"'===r&&!B){N=j.pop()||l,o+=e.substring(h,f-1);break}if(!("\\"!==r||B||(B=!0,o+=e.substring(h,f-1),r=e.charAt(f++))))break;if(B){if(B=!1,"n"===r?o+="\n":"r"===r?o+="\r":"t"===r?o+="\t":"f"===r?o+="\f":"b"===r?o+="\b":"u"===r?(F=1,L=""):o+=r,r=e.charAt(f++),h=f-1,r)continue;break}c.lastIndex=f;var G=c.exec(e);if(!G){f=e.length+1,o+=e.substring(h,f-1);break}if(f=G.index+1,!(r=e.charAt(G.index))){o+=e.substring(h,f-1);break}}continue;case _:if(!r)continue;if("r"!==r)return K("Invalid true started with t"+r);N=k;continue;case k:if(!r)continue;if("u"!==r)return K("Invalid true started with tr"+r);N=A;continue;case A:if(!r)continue;if("e"!==r)return K("Invalid true started with tru"+r);s(!0),u(),N=j.pop()||l;continue;case S:if(!r)continue;if("a"!==r)return K("Invalid false started with f"+r);N=E;continue;case E:if(!r)continue;if("l"!==r)return K("Invalid false started with fa"+r);N=x;continue;case x:if(!r)continue;if("s"!==r)return K("Invalid false started with fal"+r);N=M;continue;case M:if(!r)continue;if("e"!==r)return K("Invalid false started with fals"+r);s(!1),u(),N=j.pop()||l;continue;case I:if(!r)continue;if("u"!==r)return K("Invalid null started with n"+r);N=O;continue;case O:if(!r)continue;if("l"!==r)return K("Invalid null started with nu"+r);N=C;continue;case C:if(!r)continue;if("l"!==r)return K("Invalid null started with nul"+r);s(null),u(),N=j.pop()||l;continue;case P:if("."!==r)return K("Leading zero not followed by .");U+=r,N=20;continue;case 20:if(-1!=="0123456789".indexOf(r))U+=r;else if("."===r){if(-1!==U.indexOf("."))return K("Invalid number has two dots");U+=r}else if("e"===r||"E"===r){if(-1!==U.indexOf("e")||-1!==U.indexOf("E"))return K("Invalid number has two exponential");U+=r}else if("+"===r||"-"===r){if("e"!==i&&"E"!==i)return K("Invalid symbol in number");U+=r}else U&&(s(parseFloat(U)),u(),U=""),f--,N=j.pop()||l;continue;default:return K("Unknown state: "+N)}q>=T&&(n=0,void 0!==o&&o.length>65536&&(K("Max buffer length exceeded: textNode"),n=Math.max(n,o.length)),U.length>65536&&(K("Max buffer length exceeded: numberNode"),n=Math.max(n,U.length)),T=65536-n+q)}})),e(n.n).on((function(){if(N===d)return s({}),u(),void(R=!0);N===l&&0===D||K("Unexpected end"),void 0!==o&&(s(o),u(),o=void 0),R=!0}))}},function(e,t,r){r.d(t,"a",(function(){return u})),r.d(t,"b",(function(){return f}));var n=r(19),i=r(3),o=r(2),a=r(20),s=r(0);function u(){return new XMLHttpRequest}function f(e,t,r,u,f,c,h){var d=e(i.m).emit,l=e(i.b).emit,p=0,b=!0;function m(){if("2"===String(t.status)[0]){var e=t.responseText,r=(" "+e.substr(p)).substr(1);r&&d(r),p=Object(o.e)(e)}}function y(t){try{b&&e(i.c).emit(t.status,Object(a.a)(t.getAllResponseHeaders())),b=!1}catch(e){}}e(i.a).on((function(){t.onreadystatechange=null,t.abort()})),"onprogress"in t&&(t.onprogress=m),t.onreadystatechange=function(){switch(t.readyState){case 2:case 3:return y(t);case 4:y(t),"2"===String(t.status)[0]?(m(),e(i.n).emit()):l(Object(i.o)(t.status,t.responseText))}};try{for(var v in t.open(r,u,!0),c)t.setRequestHeader(v,c[v]);Object(n.a)(window.location,Object(n.b)(u))||t.setRequestHeader("X-Requested-With","XMLHttpRequest"),t.withCredentials=h,t.send(f)}catch(e){window.setTimeout(Object(s.j)(l,Object(i.o)(void 0,void 0,e)),0)}}},function(e,t,r){function n(e,t){function r(t){return String(t.port||{"http:":80,"https:":443}[t.protocol||e.protocol])}return!!(t.protocol&&t.protocol!==e.protocol||t.host&&t.host!==e.host||t.host&&r(t)!==r(e))}function i(e){var t=/(\w+:)?(?:\/\/)([\w.-]+)?(?::(\d+))?\/?/.exec(e)||[];return{protocol:t[1]||"",host:t[2]||"",port:t[3]||""}}r.d(t,"a",(function(){return n})),r.d(t,"b",(function(){return i}))},function(e,t,r){function n(e){var t={};return e&&e.split("\r\n").forEach((function(e){var r=e.indexOf(": ");t[e.substring(0,r)]=e.substring(r+2)})),t}r.d(t,"a",(function(){return n}))}]).default},"object"===(0,s.default)(t)&&"object"===(0,s.default)(e)?e.exports=a():(i=[],void 0===(o="function"==typeof(n=a)?n.apply(t,i):n)||(e.exports=o))}).call(this,r(22)(e))},function(e,t,r){"use strict";var n=r(9).formatters,i=r(28),o=r(16);e.exports=function(e){var t=function(t){var r;return t.property?(e[t.property]||(e[t.property]={}),r=e[t.property]):r=e,t.methods&&t.methods.forEach((function(t){t instanceof i||(t=new i(t)),t.attachToObject(r),t.setRequestManager(e._requestManager)})),e};return t.formatters=n,t.utils=o,t.Method=i,t}},function(e,t,r){"use strict";(function(e){var t=r(0)(r(1)),n=function(e){var r=Object.prototype,n=r.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",a=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function u(e,t,r,n){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),a=new A(n||[]);return o._invoke=function(e,t,r){var n="suspendedStart";return function(i,o){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw o;return E()}for(r.method=i,r.arg=o;;){var a=r.delegate;if(a){var s=w(a,r);if(s){if(s===c)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var u=f(e,t,r);if("normal"===u.type){if(n=r.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n="completed",r.method="throw",r.arg=u.arg)}}}(e,r,a),o}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var c={};function h(){}function d(){}function l(){}var p={};p[o]=function(){return this};var b=Object.getPrototypeOf,m=b&&b(b(S([])));m&&m!==r&&n.call(m,o)&&(p=m);var y=l.prototype=h.prototype=Object.create(p);function v(e){["next","throw","return"].forEach((function(t){e[t]=function(e){return this._invoke(t,e)}}))}function g(e,r){var i;this._invoke=function(o,a){function s(){return new r((function(i,s){!function i(o,a,s,u){var c=f(e[o],e,a);if("throw"!==c.type){var h=c.arg,d=h.value;return d&&"object"===(0,t.default)(d)&&n.call(d,"__await")?r.resolve(d.__await).then((function(e){i("next",e,s,u)}),(function(e){i("throw",e,s,u)})):r.resolve(d).then((function(e){h.value=e,s(h)}),(function(e){return i("throw",e,s,u)}))}u(c.arg)}(o,a,i,s)}))}return i=i?i.then(s,s):s()}}function w(e,t){var r=e.iterator[t.method];if(void 0===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var n=f(r,e.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,c;var i=n.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function _(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function k(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function A(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(_,this),this.reset(!0)}function S(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--i){var o=this.tryEntries[i],a=o.completion;if("root"===o.tryLoc)return r("end");if(o.tryLoc<=this.prev){var s=n.call(o,"catchLoc"),u=n.call(o,"finallyLoc");if(s&&u){if(this.prev=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),k(r),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var i=n.arg;k(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:S(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),c}},e}("object"===(0,t.default)(e)?e.exports:{});try{regeneratorRuntime=n}catch(e){Function("r","regeneratorRuntime = r")(n)}}).call(this,r(22)(e))},function(e,t,r){"use strict";var n=r(0)(r(1)),i=r(10),o=r(9).errors,a=r(63),s=r(9).formatters;function u(e){a.call(this),this.id=null,this.callback=i.identity,this.arguments=null,this.lastBlock=null,this.options={subscription:e.subscription,type:e.type,requestManager:e.requestManager}}u.prototype=Object.create(a.prototype),u.prototype.constructor=u,u.prototype._extractCallback=function(e){if(i.isFunction(e[e.length-1]))return e.pop()},u.prototype._validateArgs=function(e){var t=this.options.subscription;if(t||(t={}),t.params||(t.params=0),e.length!==t.params)throw o.InvalidNumberOfParams(e.length,t.params,t.subscriptionName)},u.prototype._formatInput=function(e){var t=this.options.subscription;return t&&t.inputFormatter?t.inputFormatter.map((function(t,r){return t?t(e[r]):e[r]})):e},u.prototype._formatOutput=function(e){var t=this.options.subscription;return t&&t.outputFormatter&&e?t.outputFormatter(e):e},u.prototype._toPayload=function(e){var t=[];if(this.callback=this._extractCallback(e)||i.identity,this.subscriptionMethod||(this.subscriptionMethod=e.shift(),this.options.subscription.subscriptionName&&(this.subscriptionMethod=this.options.subscription.subscriptionName)),this.arguments||(this.arguments=this._formatInput(e),this._validateArgs(this.arguments),e=[]),t.push(this.subscriptionMethod),t=t.concat(this.arguments),e.length)throw new Error("Only a callback is allowed as parameter on an already instantiated subscription.");return{method:this.options.type+"_subscribe",params:t}},u.prototype.unsubscribe=function(e){this.options.requestManager.removeSubscription(this.id,e),this.id=null,this.lastBlock=null,this.removeAllListeners()},u.prototype.subscribe=function(){var e=this,t=Array.prototype.slice.call(arguments),r=this._toPayload(t);if(!r)return this;if(!this.options.requestManager.provider)return setTimeout((function(){var t=new Error("No provider set.");e.callback(t,null,e),e.emit("error",t)}),0),this;if(!this.options.requestManager.provider.on)return setTimeout((function(){var t=new Error("The current provider doesn't support subscriptions: "+e.options.requestManager.provider.constructor.name);e.callback(t,null,e),e.emit("error",t)}),0),this;if(this.lastBlock&&i.isObject(this.options.params)&&(r.params[1]=this.options.params,r.params[1].fromBlock=s.inputBlockNumberFormatter(this.lastBlock+1)),this.id&&this.unsubscribe(),this.options.params=r.params[1],"logs"===r.params[0]&&i.isObject(r.params[1])&&r.params[1].hasOwnProperty("fromBlock")&&isFinite(r.params[1].fromBlock)){var o=Object.assign({},r.params[1]);this.options.requestManager.send({method:"eth_getLogs",params:[o]},(function(t,r){t?setTimeout((function(){e.callback(t,null,e),e.emit("error",t)}),0):r.forEach((function(t){var r=e._formatOutput(t);e.callback(null,r,e),e.emit("data",r)}))}))}return"object"===(0,n.default)(r.params[1])&&delete r.params[1].fromBlock,this.options.requestManager.send(r,(function(t,n){!t&&n?(e.id=n,e.method=r.params[0],e.emit("connected",n),e.options.requestManager.addSubscription(e,(function(t,r){t?(e.callback(t,!1,e),e.emit("error",t)):(i.isArray(r)||(r=[r]),r.forEach((function(t){var r=e._formatOutput(t);if(e.lastBlock=i.isObject(r)?r.blockNumber:null,i.isFunction(e.options.subscription.subscriptionHandler))return e.options.subscription.subscriptionHandler.call(e,r);e.emit("data",r),e.callback(null,r,e)})))}))):setTimeout((function(){e.callback(t,!1,e),e.emit("error",t)}),0)})),this},u.prototype.resubscribe=function(){this.options.requestManager.removeSubscription(this.id),this.id=null,this.subscribe(this.callback)},e.exports=u},function(e,t,r){"use strict";var n=r(225);Object.defineProperty(t,"__esModule",{value:!0}),t.computeAddress=g,t.recoverAddress=w,t.serialize=function(e,t){(0,f.checkProperties)(e,v);var r=[];y.forEach((function(t){var n=e[t.name]||[],i={};t.numeric&&(i.hexPad="left"),n=(0,a.arrayify)((0,a.hexlify)(n,i)),t.length&&n.length!==t.length&&n.length>0&&p.throwArgumentError("invalid length for "+t.name,"transaction:"+t.name,n),t.maxLength&&(n=(0,a.stripZeros)(n)).length>t.maxLength&&p.throwArgumentError("invalid length for "+t.name,"transaction:"+t.name,n),r.push((0,a.hexlify)(n))}));var n=0;null!=e.chainId?"number"!=typeof(n=e.chainId)&&p.throwArgumentError("invalid transaction.chainId","transaction",e):t&&!(0,a.isBytesLike)(t)&&t.v>28&&(n=Math.floor((t.v-35)/2));0!==n&&(r.push((0,a.hexlify)(n)),r.push("0x"),r.push("0x"));if(!t)return c.encode(r);var i=(0,a.splitSignature)(t),o=27+i.recoveryParam;0!==n?(r.pop(),r.pop(),r.pop(),o+=2*n+8,i.v>28&&i.v!==o&&p.throwArgumentError("transaction.chainId/signature.v mismatch","signature",t)):i.v!==o&&p.throwArgumentError("transaction.chainId/signature.v mismatch","signature",t);return r.push((0,a.hexlify)(o)),r.push((0,a.stripZeros)((0,a.arrayify)(i.r))),r.push((0,a.stripZeros)((0,a.arrayify)(i.s))),c.encode(r)},t.parse=function(e){var t=c.decode(e);9!==t.length&&6!==t.length&&p.throwArgumentError("invalid raw transaction","rawTransaction",e);var r={nonce:m(t[0]).toNumber(),gasPrice:m(t[1]),gasLimit:m(t[2]),to:b(t[3]),value:m(t[4]),data:t[5],chainId:0};if(6===t.length)return r;try{r.v=o.BigNumber.from(t[6]).toNumber()}catch(e){return console.log(e),r}if(r.r=(0,a.hexZeroPad)(t[7],32),r.s=(0,a.hexZeroPad)(t[8],32),o.BigNumber.from(r.r).isZero()&&o.BigNumber.from(r.s).isZero())r.chainId=r.v,r.v=0;else{r.chainId=Math.floor((r.v-35)/2),r.chainId<0&&(r.chainId=0);var n=r.v-27,i=t.slice(0,6);0!==r.chainId&&(i.push((0,a.hexlify)(r.chainId)),i.push("0x"),i.push("0x"),n-=2*r.chainId+8);var s=(0,u.keccak256)(c.encode(i));try{r.from=w(s,{r:(0,a.hexlify)(r.r),s:(0,a.hexlify)(r.s),recoveryParam:n})}catch(e){console.log(e)}r.hash=(0,u.keccak256)(e)}return r};var i=r(70),o=r(29),a=r(12),s=r(71),u=r(50),f=r(31),c=n(r(107)),h=r(233),d=r(14),l=r(254),p=new d.Logger(l.version);function b(e){return"0x"===e?null:(0,i.getAddress)(e)}function m(e){return"0x"===e?s.Zero:o.BigNumber.from(e)}var y=[{name:"nonce",maxLength:32,numeric:!0},{name:"gasPrice",maxLength:32,numeric:!0},{name:"gasLimit",maxLength:32,numeric:!0},{name:"to",length:20},{name:"value",maxLength:32,numeric:!0},{name:"data"}],v={chainId:!0,data:!0,gasLimit:!0,gasPrice:!0,nonce:!0,to:!0,value:!0};function g(e){var t=(0,h.computePublicKey)(e);return(0,i.getAddress)((0,a.hexDataSlice)((0,u.keccak256)((0,a.hexDataSlice)(t,1)),12))}function w(e,t){return g((0,h.recoverPublicKey)((0,a.arrayify)(e),t))}},function(e,t,r){"use strict";var n=r(1);function i(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return i=function(){return e},e}e.exports=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==n(e)&&"function"!=typeof e)return{default:e};var t=i();if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var s=o?Object.getOwnPropertyDescriptor(e,a):null;s&&(s.get||s.set)?Object.defineProperty(r,a,s):r[a]=e[a]}return r.default=e,t&&t.set(e,r),r}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.version=void 0;t.version="logger/5.0.4"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.version=void 0;t.version="bytes/5.0.3"},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.formatFixed=v,t.parseFixed=g,t.FixedNumber=t.FixedFormat=void 0;var i=n(r(1)),o=n(r(6)),a=n(r(7)),s=r(12),u=r(14),f=r(106),c=r(105),h=new u.Logger(f.version),d={},l=c.BigNumber.from(0),p=c.BigNumber.from(-1);function b(e,t,r,n){var i={fault:t,operation:r};return void 0!==n&&(i.value=n),h.throwError(e,u.Logger.errors.NUMERIC_FAULT,i)}for(var m="0";m.length<256;)m+=m;function y(e){if("number"!=typeof e)try{e=c.BigNumber.from(e).toNumber()}catch(e){}return"number"==typeof e&&e>=0&&e<=256&&!(e%1)?"1"+m.substring(0,e):h.throwArgumentError("invalid decimal size","decimals",e)}function v(e,t){null==t&&(t=0);var r=y(t),n=(e=c.BigNumber.from(e)).lt(l);n&&(e=e.mul(p));for(var i=e.mod(r).toString();i.length2&&h.throwArgumentError("too many decimal points","value",e);var o=i[0],a=i[1];for(o||(o="0"),a||(a="0"),a.length>r.length-1&&b("fractional component exceeds decimals","underflow","parseFixed");a.length80&&h.throwArgumentError("invalid fixed format (decimals too large)","format.decimals",o),new e(d,r,n,o)}}]),e}();t.FixedFormat=w;var _=function(){function e(t,r,n,i){(0,o.default)(this,e),h.checkNew(this instanceof e?this.constructor:void 0,e),t!==d&&h.throwError("cannot use FixedNumber constructor; use FixedNumber.from",u.Logger.errors.UNSUPPORTED_OPERATION,{operation:"new FixedFormat"}),this.format=i,this._hex=r,this._value=n,this._isFixedNumber=!0,Object.freeze(this)}return(0,a.default)(e,[{key:"_checkFormat",value:function(e){this.format.name!==e.format.name&&h.throwArgumentError("incompatible format; use fixedNumber.toFormat","other",e)}},{key:"addUnsafe",value:function(t){this._checkFormat(t);var r=g(this._value,this.format.decimals),n=g(t._value,t.format.decimals);return e.fromValue(r.add(n),this.format.decimals,this.format)}},{key:"subUnsafe",value:function(t){this._checkFormat(t);var r=g(this._value,this.format.decimals),n=g(t._value,t.format.decimals);return e.fromValue(r.sub(n),this.format.decimals,this.format)}},{key:"mulUnsafe",value:function(t){this._checkFormat(t);var r=g(this._value,this.format.decimals),n=g(t._value,t.format.decimals);return e.fromValue(r.mul(n).div(this.format._multiplier),this.format.decimals,this.format)}},{key:"divUnsafe",value:function(t){this._checkFormat(t);var r=g(this._value,this.format.decimals),n=g(t._value,t.format.decimals);return e.fromValue(r.mul(this.format._multiplier).div(n),this.format.decimals,this.format)}},{key:"round",value:function(t){null==t&&(t=0),(t<0||t>80||t%1)&&h.throwArgumentError("invalid decimal count","decimals",t);var r=this.toString().split(".");if(r[1].length<=t)return this;var n="0."+m.substring(0,t)+"5";return r=this.addUnsafe(e.fromString(n,this.format))._value.split("."),e.fromString(r[0]+"."+r[1].substring(0,t))}},{key:"isZero",value:function(){return"0.0"===this._value}},{key:"toString",value:function(){return this._value}},{key:"toHexString",value:function(e){if(null==e)return this._hex;e%8&&h.throwArgumentError("invalid byte width","width",e);var t=c.BigNumber.from(this._hex).fromTwos(this.format.width).toTwos(e).toHexString();return(0,s.hexZeroPad)(t,e/8)}},{key:"toUnsafeFloat",value:function(){return parseFloat(this.toString())}},{key:"toFormat",value:function(t){return e.fromString(this._value,t)}}],[{key:"fromValue",value:function(t,r,n){return null!=n||null==r||(0,c.isBigNumberish)(r)||(n=r,r=null),null==r&&(r=0),null==n&&(n="fixed"),e.fromString(v(t,r),w.from(n))}},{key:"fromString",value:function(t,r){null==r&&(r="fixed");var n=w.from(r),i=g(t,n.decimals);!n.signed&&i.lt(l)&&b("unsigned value cannot be negative","overflow","value",t);var o=null;n.signed?o=i.toTwos(n.width).toHexString():(o=i.toHexString(),o=(0,s.hexZeroPad)(o,n.width/8));var a=v(i,n.decimals);return new e(d,o,a,n)}},{key:"fromBytes",value:function(t,r){null==r&&(r="fixed");var n=w.from(r);if((0,s.arrayify)(t).length>n.width/8)throw new Error("overflow");var i=c.BigNumber.from(t);n.signed&&(i=i.fromTwos(n.width));var o=i.toTwos((n.signed?0:1)+n.width).toHexString(),a=v(i,n.decimals);return new e(d,o,a,n)}},{key:"from",value:function(t,r){if("string"==typeof t)return e.fromString(t,r);if((0,s.isBytes)(t))return e.fromBytes(t,r);try{return e.fromValue(t,0,r)}catch(e){if(e.code!==u.Logger.errors.INVALID_ARGUMENT)throw e}return h.throwArgumentError("invalid FixedNumber value","value",t)}},{key:"isFixedNumber",value:function(e){return!(!e||!e._isFixedNumber)}}]),e}();t.FixedNumber=_},function(e,t,r){"use strict";(function(e,t,n){var i=r(0)(r(1)); -/** - * [js-sha3]{@link https://github.com/emn178/js-sha3} - * - * @version 0.5.7 - * @author Chen, Yi-Cyuan [emn178@gmail.com] - * @copyright Chen, Yi-Cyuan 2015-2016 - * @license MIT - */ -!function(){var r="object"===("undefined"==typeof window?"undefined":(0,i.default)(window))?window:{};!r.JS_SHA3_NO_NODE_JS&&"object"===(void 0===e?"undefined":(0,i.default)(e))&&e.versions&&e.versions.node&&(r=t);for(var o=!r.JS_SHA3_NO_COMMON_JS&&"object"===(0,i.default)(n)&&n.exports,a="0123456789abcdef".split(""),s=[0,8,16,24],u=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],f=[224,256,384,512],c=["hex","buffer","arrayBuffer","array"],h=function(e,t,r){return function(n){return new k(e,t,e).update(n)[r]()}},d=function(e,t,r){return function(n,i){return new k(e,t,i).update(n)[r]()}},l=function(e,t){var r=h(e,t,"hex");r.create=function(){return new k(e,t,e)},r.update=function(e){return r.create().update(e)};for(var n=0;n>5,this.byteCount=this.blockCount<<2,this.outputBlocks=r>>5,this.extraBytes=(31&r)>>3;for(var n=0;n<50;++n)this.s[n]=0}k.prototype.update=function(e){var t="string"!=typeof e;t&&e.constructor===ArrayBuffer&&(e=new Uint8Array(e));for(var r,n,i=e.length,o=this.blocks,a=this.byteCount,u=this.blockCount,f=0,c=this.s;f>2]|=e[f]<>2]|=n<>2]|=(192|n>>6)<>2]|=(128|63&n)<=57344?(o[r>>2]|=(224|n>>12)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<>2]|=(240|n>>18)<>2]|=(128|n>>12&63)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<=a){for(this.start=r-a,this.block=o[u],r=0;r>2]|=this.padding[3&t],this.lastByteIndex===this.byteCount)for(e[0]=e[r],t=1;t>4&15]+a[15&e]+a[e>>12&15]+a[e>>8&15]+a[e>>20&15]+a[e>>16&15]+a[e>>28&15]+a[e>>24&15];s%t==0&&(A(r),o=0)}return i&&(e=r[o],i>0&&(u+=a[e>>4&15]+a[15&e]),i>1&&(u+=a[e>>12&15]+a[e>>8&15]),i>2&&(u+=a[e>>20&15]+a[e>>16&15])),u},k.prototype.arrayBuffer=function(){this.finalize();var e,t=this.blockCount,r=this.s,n=this.outputBlocks,i=this.extraBytes,o=0,a=0,s=this.outputBits>>3;e=i?new ArrayBuffer(n+1<<2):new ArrayBuffer(s);for(var u=new Uint32Array(e);a>8&255,u[e+2]=t>>16&255,u[e+3]=t>>24&255;s%r==0&&A(n)}return o&&(e=s<<2,t=n[a],o>0&&(u[e]=255&t),o>1&&(u[e+1]=t>>8&255),o>2&&(u[e+2]=t>>16&255)),u};var A=function(e){var t,r,n,i,o,a,s,f,c,h,d,l,p,b,m,y,v,g,w,_,k,A,S,E,x,M,I,O,C,P,T,U,B,R,N,j,L,F,D,q,z,H,K,V,G,W,Y,$,J,Z,X,Q,ee,te,re,ne,ie,oe,ae,se,ue,fe,ce;for(n=0;n<48;n+=2)i=e[0]^e[10]^e[20]^e[30]^e[40],o=e[1]^e[11]^e[21]^e[31]^e[41],a=e[2]^e[12]^e[22]^e[32]^e[42],s=e[3]^e[13]^e[23]^e[33]^e[43],f=e[4]^e[14]^e[24]^e[34]^e[44],c=e[5]^e[15]^e[25]^e[35]^e[45],h=e[6]^e[16]^e[26]^e[36]^e[46],d=e[7]^e[17]^e[27]^e[37]^e[47],t=(l=e[8]^e[18]^e[28]^e[38]^e[48])^(a<<1|s>>>31),r=(p=e[9]^e[19]^e[29]^e[39]^e[49])^(s<<1|a>>>31),e[0]^=t,e[1]^=r,e[10]^=t,e[11]^=r,e[20]^=t,e[21]^=r,e[30]^=t,e[31]^=r,e[40]^=t,e[41]^=r,t=i^(f<<1|c>>>31),r=o^(c<<1|f>>>31),e[2]^=t,e[3]^=r,e[12]^=t,e[13]^=r,e[22]^=t,e[23]^=r,e[32]^=t,e[33]^=r,e[42]^=t,e[43]^=r,t=a^(h<<1|d>>>31),r=s^(d<<1|h>>>31),e[4]^=t,e[5]^=r,e[14]^=t,e[15]^=r,e[24]^=t,e[25]^=r,e[34]^=t,e[35]^=r,e[44]^=t,e[45]^=r,t=f^(l<<1|p>>>31),r=c^(p<<1|l>>>31),e[6]^=t,e[7]^=r,e[16]^=t,e[17]^=r,e[26]^=t,e[27]^=r,e[36]^=t,e[37]^=r,e[46]^=t,e[47]^=r,t=h^(i<<1|o>>>31),r=d^(o<<1|i>>>31),e[8]^=t,e[9]^=r,e[18]^=t,e[19]^=r,e[28]^=t,e[29]^=r,e[38]^=t,e[39]^=r,e[48]^=t,e[49]^=r,b=e[0],m=e[1],W=e[11]<<4|e[10]>>>28,Y=e[10]<<4|e[11]>>>28,O=e[20]<<3|e[21]>>>29,C=e[21]<<3|e[20]>>>29,se=e[31]<<9|e[30]>>>23,ue=e[30]<<9|e[31]>>>23,H=e[40]<<18|e[41]>>>14,K=e[41]<<18|e[40]>>>14,R=e[2]<<1|e[3]>>>31,N=e[3]<<1|e[2]>>>31,y=e[13]<<12|e[12]>>>20,v=e[12]<<12|e[13]>>>20,$=e[22]<<10|e[23]>>>22,J=e[23]<<10|e[22]>>>22,P=e[33]<<13|e[32]>>>19,T=e[32]<<13|e[33]>>>19,fe=e[42]<<2|e[43]>>>30,ce=e[43]<<2|e[42]>>>30,te=e[5]<<30|e[4]>>>2,re=e[4]<<30|e[5]>>>2,j=e[14]<<6|e[15]>>>26,L=e[15]<<6|e[14]>>>26,g=e[25]<<11|e[24]>>>21,w=e[24]<<11|e[25]>>>21,Z=e[34]<<15|e[35]>>>17,X=e[35]<<15|e[34]>>>17,U=e[45]<<29|e[44]>>>3,B=e[44]<<29|e[45]>>>3,E=e[6]<<28|e[7]>>>4,x=e[7]<<28|e[6]>>>4,ne=e[17]<<23|e[16]>>>9,ie=e[16]<<23|e[17]>>>9,F=e[26]<<25|e[27]>>>7,D=e[27]<<25|e[26]>>>7,_=e[36]<<21|e[37]>>>11,k=e[37]<<21|e[36]>>>11,Q=e[47]<<24|e[46]>>>8,ee=e[46]<<24|e[47]>>>8,V=e[8]<<27|e[9]>>>5,G=e[9]<<27|e[8]>>>5,M=e[18]<<20|e[19]>>>12,I=e[19]<<20|e[18]>>>12,oe=e[29]<<7|e[28]>>>25,ae=e[28]<<7|e[29]>>>25,q=e[38]<<8|e[39]>>>24,z=e[39]<<8|e[38]>>>24,A=e[48]<<14|e[49]>>>18,S=e[49]<<14|e[48]>>>18,e[0]=b^~y&g,e[1]=m^~v&w,e[10]=E^~M&O,e[11]=x^~I&C,e[20]=R^~j&F,e[21]=N^~L&D,e[30]=V^~W&$,e[31]=G^~Y&J,e[40]=te^~ne&oe,e[41]=re^~ie&ae,e[2]=y^~g&_,e[3]=v^~w&k,e[12]=M^~O&P,e[13]=I^~C&T,e[22]=j^~F&q,e[23]=L^~D&z,e[32]=W^~$&Z,e[33]=Y^~J&X,e[42]=ne^~oe&se,e[43]=ie^~ae&ue,e[4]=g^~_&A,e[5]=w^~k&S,e[14]=O^~P&U,e[15]=C^~T&B,e[24]=F^~q&H,e[25]=D^~z&K,e[34]=$^~Z&Q,e[35]=J^~X&ee,e[44]=oe^~se&fe,e[45]=ae^~ue&ce,e[6]=_^~A&b,e[7]=k^~S&m,e[16]=P^~U&E,e[17]=T^~B&x,e[26]=q^~H&R,e[27]=z^~K&N,e[36]=Z^~Q&V,e[37]=X^~ee&G,e[46]=se^~fe&te,e[47]=ue^~ce&re,e[8]=A^~b&y,e[9]=S^~m&v,e[18]=U^~E&M,e[19]=B^~x&I,e[28]=H^~R&j,e[29]=K^~N&L,e[38]=Q^~V&W,e[39]=ee^~G&Y,e[48]=fe^~te&ne,e[49]=ce^~re&ie,e[0]^=u[n],e[1]^=u[n+1]};if(o)n.exports=b;else for(y=0;y=0&&(a=t,s=r),n.negative&&(n=n.neg(),o=o.neg()),a.negative&&(a=a.neg(),s=s.neg()),[{a:n,b:o},{a:a,b:s}]},u.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],n=t[1],i=n.b.mul(e).divRound(this.n),o=r.b.neg().mul(e).divRound(this.n),a=i.mul(r.a),s=o.mul(n.a),u=i.mul(r.b),f=o.mul(n.b);return{k1:e.sub(a).sub(s),k2:u.add(f).neg()}},u.prototype.pointFromX=function(e,t){(e=new i(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var o=n.fromRed().isOdd();return(t&&!o||!t&&o)&&(n=n.redNeg()),this.point(e,n)},u.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,n=this.a.redMul(t),i=t.redSqr().redMul(t).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},u.prototype._endoWnafMulAdd=function(e,t,r){for(var n=this._endoWnafT1,i=this._endoWnafT2,o=0;o":""},f.prototype.isInfinity=function(){return this.inf},f.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),n=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},f.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),n=e.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),a=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,a)},f.prototype.getX=function(){return this.x.fromRed()},f.prototype.getY=function(){return this.y.fromRed()},f.prototype.mul=function(e){return e=new i(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},f.prototype.mulAdd=function(e,t,r){var n=[this,t],i=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},f.prototype.jmulAdd=function(e,t,r){var n=[this,t],i=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i,!0):this.curve._wnafMulAdd(1,n,i,2,!0)},f.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},f.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,n=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return t},f.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},o(c,a.BasePoint),u.prototype.jpoint=function(e,t,r){return new c(this,e,t,r)},c.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),n=this.y.redMul(t).redMul(e);return this.curve.point(r,n)},c.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},c.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(t),i=e.x.redMul(r),o=this.y.redMul(t.redMul(e.z)),a=e.y.redMul(r.redMul(this.z)),s=n.redSub(i),u=o.redSub(a);if(0===s.cmpn(0))return 0!==u.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=s.redSqr(),c=f.redMul(s),h=n.redMul(f),d=u.redSqr().redIAdd(c).redISub(h).redISub(h),l=u.redMul(h.redISub(d)).redISub(o.redMul(c)),p=this.z.redMul(e.z).redMul(s);return this.curve.jpoint(d,l,p)},c.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,n=e.x.redMul(t),i=this.y,o=e.y.redMul(t).redMul(this.z),a=r.redSub(n),s=i.redSub(o);if(0===a.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=a.redSqr(),f=u.redMul(a),c=r.redMul(u),h=s.redSqr().redIAdd(f).redISub(c).redISub(c),d=s.redMul(c.redISub(h)).redISub(i.redMul(f)),l=this.z.redMul(a);return this.curve.jpoint(h,d,l)},c.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,r=0;r=0)return!1;if(r.redIAdd(i),0===this.x.cmp(r))return!0}},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(e,t,r){"use strict";var n=r(5),i=r(3),o=r(52),a=r(20);function s(e){o.call(this,"mont",e),this.a=new n(e.a,16).toRed(this.red),this.b=new n(e.b,16).toRed(this.red),this.i4=new n(4).toRed(this.red).redInvm(),this.two=new n(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function u(e,t,r){o.BasePoint.call(this,e,"projective"),null===t&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new n(t,16),this.z=new n(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}i(s,o),e.exports=s,s.prototype.validate=function(e){var t=e.normalize().x,r=t.redSqr(),n=r.redMul(t).redAdd(r.redMul(this.a)).redAdd(t);return 0===n.redSqrt().redSqr().cmp(n)},i(u,o.BasePoint),s.prototype.decodePoint=function(e,t){return this.point(a.toArray(e,t),1)},s.prototype.point=function(e,t){return new u(this,e,t)},s.prototype.pointFromJSON=function(e){return u.fromJSON(this,e)},u.prototype.precompute=function(){},u.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},u.fromJSON=function(e,t){return new u(e,t[0],t[1]||e.one)},u.prototype.inspect=function(){return this.isInfinity()?"":""},u.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},u.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),r=e.redSub(t),n=e.redMul(t),i=r.redMul(t.redAdd(this.curve.a24.redMul(r)));return this.curve.point(n,i)},u.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},u.prototype.diffAdd=function(e,t){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=e.x.redAdd(e.z),o=e.x.redSub(e.z).redMul(r),a=i.redMul(n),s=t.z.redMul(o.redAdd(a).redSqr()),u=t.x.redMul(o.redISub(a).redSqr());return this.curve.point(s,u)},u.prototype.mul=function(e){for(var t=e.clone(),r=this,n=this.curve.point(null,null),i=[];0!==t.cmpn(0);t.iushrn(1))i.push(t.andln(1));for(var o=i.length-1;o>=0;o--)0===i[o]?(r=r.diffAdd(n,this),n=n.dbl()):(n=r.diffAdd(n,this),r=r.dbl());return n},u.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},u.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},u.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},u.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},u.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(e,t,r){"use strict";var n=r(20),i=r(5),o=r(3),a=r(52),s=n.assert;function u(e){this.twisted=1!=(0|e.a),this.mOneA=this.twisted&&-1==(0|e.a),this.extended=this.mOneA,a.call(this,"edwards",e),this.a=new i(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new i(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new i(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),s(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|e.c)}function f(e,t,r,n,o){a.BasePoint.call(this,e,"projective"),null===t&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new i(t,16),this.y=new i(r,16),this.z=n?new i(n,16):this.curve.one,this.t=o&&new i(o,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}o(u,a),e.exports=u,u.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},u.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},u.prototype.jpoint=function(e,t,r,n){return this.point(e,t,r,n)},u.prototype.pointFromX=function(e,t){(e=new i(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),n=this.c2.redSub(this.a.redMul(r)),o=this.one.redSub(this.c2.redMul(this.d).redMul(r)),a=n.redMul(o.redInvm()),s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");var u=s.fromRed().isOdd();return(t&&!u||!t&&u)&&(s=s.redNeg()),this.point(e,s)},u.prototype.pointFromY=function(e,t){(e=new i(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),n=r.redSub(this.c2),o=r.redMul(this.d).redMul(this.c2).redSub(this.a),a=n.redMul(o.redInvm());if(0===a.cmp(this.zero)){if(t)throw new Error("invalid point");return this.point(this.zero,e)}var s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");return s.fromRed().isOdd()!==t&&(s=s.redNeg()),this.point(s,e)},u.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),r=e.y.redSqr(),n=t.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(r)));return 0===n.cmp(i)},o(f,a.BasePoint),u.prototype.pointFromJSON=function(e){return f.fromJSON(this,e)},u.prototype.point=function(e,t,r,n){return new f(this,e,t,r,n)},f.fromJSON=function(e,t){return new f(e,t[0],t[1],t[2])},f.prototype.inspect=function(){return this.isInfinity()?"":""},f.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},f.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(e),i=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),o=n.redAdd(t),a=o.redSub(r),s=n.redSub(t),u=i.redMul(a),f=o.redMul(s),c=i.redMul(s),h=a.redMul(o);return this.curve.point(u,f,h,c)},f.prototype._projDbl=function(){var e,t,r,n=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),o=this.y.redSqr();if(this.curve.twisted){var a=(f=this.curve._mulA(i)).redAdd(o);if(this.zOne)e=n.redSub(i).redSub(o).redMul(a.redSub(this.curve.two)),t=a.redMul(f.redSub(o)),r=a.redSqr().redSub(a).redSub(a);else{var s=this.z.redSqr(),u=a.redSub(s).redISub(s);e=n.redSub(i).redISub(o).redMul(u),t=a.redMul(f.redSub(o)),r=a.redMul(u)}}else{var f=i.redAdd(o);s=this.curve._mulC(this.z).redSqr(),u=f.redSub(s).redSub(s);e=this.curve._mulC(n.redISub(f)).redMul(u),t=this.curve._mulC(f).redMul(i.redISub(o)),r=f.redMul(u)}return this.curve.point(e,t,r)},f.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},f.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),i=this.z.redMul(e.z.redAdd(e.z)),o=r.redSub(t),a=i.redSub(n),s=i.redAdd(n),u=r.redAdd(t),f=o.redMul(a),c=s.redMul(u),h=o.redMul(u),d=a.redMul(s);return this.curve.point(f,c,d,h)},f.prototype._projAdd=function(e){var t,r,n=this.z.redMul(e.z),i=n.redSqr(),o=this.x.redMul(e.x),a=this.y.redMul(e.y),s=this.curve.d.redMul(o).redMul(a),u=i.redSub(s),f=i.redAdd(s),c=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(o).redISub(a),h=n.redMul(u).redMul(c);return this.curve.twisted?(t=n.redMul(f).redMul(a.redSub(this.curve._mulA(o))),r=u.redMul(f)):(t=n.redMul(f).redMul(a.redSub(o)),r=this.curve._mulC(u).redMul(f)),this.curve.point(h,t,r)},f.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},f.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},f.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!1)},f.prototype.jmulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!0)},f.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},f.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},f.prototype.getX=function(){return this.normalize(),this.x.fromRed()},f.prototype.getY=function(){return this.normalize(),this.y.fromRed()},f.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},f.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var r=e.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(n),0===this.x.cmp(t))return!0}},f.prototype.toP=f.prototype.normalize,f.prototype.mixedAdd=f.prototype.add},function(e,t,r){"use strict";t.sha1=r(241),t.sha224=r(242),t.sha256=r(110),t.sha384=r(243),t.sha512=r(111)},function(e,t,r){"use strict";var n=r(23),i=r(37),o=r(109),a=n.rotl32,s=n.sum32,u=n.sum32_5,f=o.ft_1,c=i.BlockHash,h=[1518500249,1859775393,2400959708,3395469782];function d(){if(!(this instanceof d))return new d;c.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}n.inherits(d,c),e.exports=d,d.blockSize=512,d.outSize=160,d.hmacStrength=80,d.padLength=64,d.prototype._update=function(e,t){for(var r=this.W,n=0;n<16;n++)r[n]=e[t+n];for(;nthis.blockSize&&(e=(new this.Hash).update(e).digest()),i(e.length<=this.blockSize);for(var t=e.length;t0))return a.iaddn(1),this.keyFromPrivate(a)}},d.prototype._truncateToN=function(e,t){var r=8*e.byteLength()-this.n.bitLength();return r>0&&(e=e.ushrn(r)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},d.prototype.sign=function(e,t,r,a){"object"===(0,n.default)(r)&&(a=r,r=null),a||(a={}),t=this.keyFromPrivate(t,r),e=this._truncateToN(new i(e,16));for(var s=this.n.byteLength(),u=t.getPrivate().toArray("be",s),f=e.toArray("be",s),c=new o({hash:this.hash,entropy:u,nonce:f,pers:a.pers,persEnc:a.persEnc||"utf8"}),d=this.n.sub(new i(1)),l=0;;l++){var p=a.k?a.k(l):new i(c.generate(this.n.byteLength()));if(!((p=this._truncateToN(p,!0)).cmpn(1)<=0||p.cmp(d)>=0)){var b=this.g.mul(p);if(!b.isInfinity()){var m=b.getX(),y=m.umod(this.n);if(0!==y.cmpn(0)){var v=p.invm(this.n).mul(y.mul(t.getPrivate()).iadd(e));if(0!==(v=v.umod(this.n)).cmpn(0)){var g=(b.getY().isOdd()?1:0)|(0!==m.cmp(y)?2:0);return a.canonical&&v.cmp(this.nh)>0&&(v=this.n.sub(v),g^=1),new h({r:y,s:v,recoveryParam:g})}}}}}},d.prototype.verify=function(e,t,r,n){e=this._truncateToN(new i(e,16)),r=this.keyFromPublic(r,n);var o=(t=new h(t,"hex")).r,a=t.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var s,u=a.invm(this.n),f=u.mul(e).umod(this.n),c=u.mul(o).umod(this.n);return this.curve._maxwellTrick?!(s=this.g.jmulAdd(f,r.getPublic(),c)).isInfinity()&&s.eqXToP(o):!(s=this.g.mulAdd(f,r.getPublic(),c)).isInfinity()&&0===s.getX().umod(this.n).cmp(o)},d.prototype.recoverPubKey=function(e,t,r,n){f((3&r)===r,"The recovery param is more than two bits"),t=new h(t,n);var o=this.n,a=new i(e),s=t.r,u=t.s,c=1&r,d=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&d)throw new Error("Unable to find sencond key candinate");s=d?this.curve.pointFromX(s.add(this.curve.n),c):this.curve.pointFromX(s,c);var l=t.r.invm(o),p=o.sub(a).mul(l).umod(o),b=u.mul(l).umod(o);return this.g.mulAdd(p,s,b)},d.prototype.getKeyRecoveryParam=function(e,t,r,n){if(null!==(t=new h(t,n)).recoveryParam)return t.recoveryParam;for(var i=0;i<4;i++){var o;try{o=this.recoverPubKey(e,t,i)}catch(e){continue}if(o.eq(r))return i}throw new Error("Unable to find valid recovery factor")}},function(e,t,r){"use strict";var n=r(5),i=r(20).assert;function o(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}e.exports=o,o.fromPublic=function(e,t,r){return t instanceof o?t:new o(e,{pub:t,pubEnc:r})},o.fromPrivate=function(e,t,r){return t instanceof o?t:new o(e,{priv:t,privEnc:r})},o.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},o.prototype.getPublic=function(e,t){return"string"==typeof e&&(t=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),t?this.pub.encode(t,e):this.pub},o.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},o.prototype._importPrivate=function(e,t){this.priv=new n(e,t||16),this.priv=this.priv.umod(this.ec.curve.n)},o.prototype._importPublic=function(e,t){if(e.x||e.y)return"mont"===this.ec.curve.type?i(e.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||i(e.x&&e.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,t)},o.prototype.derive=function(e){return e.mul(this.priv).getX()},o.prototype.sign=function(e,t,r){return this.ec.sign(e,this,t,r)},o.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},o.prototype.inspect=function(){return""}},function(e,t,r){"use strict";var n=r(5),i=r(20),o=i.assert;function a(e,t){if(e instanceof a)return e;this._importDER(e,t)||(o(e.r&&e.s,"Signature without r or s"),this.r=new n(e.r,16),this.s=new n(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function s(){this.place=0}function u(e,t){var r=e[t.place++];if(!(128&r))return r;var n=15&r;if(0===n||n>4)return!1;for(var i=0,o=0,a=t.place;o>>=0;return!(i<=127)&&(t.place=a,i)}function f(e){for(var t=0,r=e.length-1;!e[t]&&!(128&e[t+1])&&t>>3);for(e.push(128|r);--r;)e.push(t>>>(r<<3)&255);e.push(t)}}e.exports=a,a.prototype._importDER=function(e,t){e=i.toArray(e,t);var r=new s;if(48!==e[r.place++])return!1;var o=u(e,r);if(!1===o)return!1;if(o+r.place!==e.length)return!1;if(2!==e[r.place++])return!1;var a=u(e,r);if(!1===a)return!1;var f=e.slice(r.place,a+r.place);if(r.place+=a,2!==e[r.place++])return!1;var c=u(e,r);if(!1===c)return!1;if(e.length!==c+r.place)return!1;var h=e.slice(r.place,c+r.place);if(0===f[0]){if(!(128&f[1]))return!1;f=f.slice(1)}if(0===h[0]){if(!(128&h[1]))return!1;h=h.slice(1)}return this.r=new n(f),this.s=new n(h),this.recoveryParam=null,!0},a.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r)),t=f(t),r=f(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];c(n,t.length),(n=n.concat(t)).push(2),c(n,r.length);var o=n.concat(r),a=[48];return c(a,o.length),a=a.concat(o),i.encode(a,e)}},function(e,t,r){"use strict";var n=r(36),i=r(73),o=r(20),a=o.assert,s=o.parseBytes,u=r(251),f=r(252);function c(e){if(a("ed25519"===e,"only tested with ed25519 so far"),!(this instanceof c))return new c(e);e=i[e].curve;this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=n.sha512}e.exports=c,c.prototype.sign=function(e,t){e=s(e);var r=this.keyFromSecret(t),n=this.hashInt(r.messagePrefix(),e),i=this.g.mul(n),o=this.encodePoint(i),a=this.hashInt(o,r.pubBytes(),e).mul(r.priv()),u=n.add(a).umod(this.curve.n);return this.makeSignature({R:i,S:u,Rencoded:o})},c.prototype.verify=function(e,t,r){e=s(e),t=this.makeSignature(t);var n=this.keyFromPublic(r),i=this.hashInt(t.Rencoded(),n.pubBytes(),e),o=this.g.mul(t.S());return t.R().add(n.pub().mul(i)).eq(o)},c.prototype.hashInt=function(){for(var e=this.hash(),t=0;te.highestBlock-200&&(t._isSyncing=!1,t.emit("changed",t._isSyncing),n.isFunction(t.callback)&&t.callback(null,t._isSyncing,t))}),500))}}}})];B.forEach((function(t){t.attachToObject(e),t.setRequestManager(e._requestManager,e.accounts),t.defaultBlock=e.defaultBlock,t.defaultAccount=e.defaultAccount,t.transactionBlockTimeout=e.transactionBlockTimeout,t.transactionConfirmationBlocks=e.transactionConfirmationBlocks,t.transactionPollingTimeout=e.transactionPollingTimeout,t.handleRevert=e.handleRevert}))};i.addProviders(A),e.exports=A},function(e,t,r){"use strict";var n=r(257);e.exports=n},function(e,t,r){"use strict";var n=r(0),i=n(r(47)),o=n(r(69)),a=r(10),s=r(113),u=r(9).formatters,f=r(16),c=r(258),h=r(279),d=r(280);function l(e){this.eth=e;var t=null;this._detectedAddress=null,this._lastSyncCheck=null,Object.defineProperty(this,"registry",{get:function(){return new c(this)},enumerable:!0}),Object.defineProperty(this,"resolverMethodHandler",{get:function(){return new h(this.registry)},enumerable:!0}),Object.defineProperty(this,"registryAddress",{get:function(){return t},set:function(e){t=null!==e?u.inputAddressFormatter(e):e},enumerable:!0})}l.prototype.supportsInterface=function(e,t,r){return this.getResolver(e).then((function(e){return f.isHexStrict(t)||(t=f.sha3(t).slice(0,10)),e.methods.supportsInterface(t).call(r)})).catch((function(e){if(!a.isFunction(r))throw e;r(e,null)}))},l.prototype.resolver=function(e,t){return this.registry.resolver(e,t)},l.prototype.getResolver=function(e,t){return this.registry.getResolver(e,t)},l.prototype.setResolver=function(e,t,r,n){return this.registry.setResolver(e,t,r,n)},l.prototype.setRecord=function(e,t,r,n,i,o){return this.registry.setRecord(e,t,r,n,i,o)},l.prototype.setSubnodeRecord=function(e,t,r,n,i,o,a){return this.registry.setSubnodeRecord(e,t,r,n,i,o,a)},l.prototype.setApprovalForAll=function(e,t,r,n){return this.registry.setApprovalForAll(e,t,r,n)},l.prototype.isApprovedForAll=function(e,t,r){return this.registry.isApprovedForAll(e,t,r)},l.prototype.recordExists=function(e,t){return this.registry.recordExists(e,t)},l.prototype.setSubnodeOwner=function(e,t,r,n,i){return this.registry.setSubnodeOwner(e,t,r,n,i)},l.prototype.getTTL=function(e,t){return this.registry.getTTL(e,t)},l.prototype.setTTL=function(e,t,r,n){return this.registry.setTTL(e,t,r,n)},l.prototype.getOwner=function(e,t){return this.registry.getOwner(e,t)},l.prototype.setOwner=function(e,t,r,n){return this.registry.setOwner(e,t,r,n)},l.prototype.getAddress=function(e,t){return this.resolverMethodHandler.method(e,"addr",[]).call(t)},l.prototype.setAddress=function(e,t,r,n){return this.resolverMethodHandler.method(e,"setAddr",[t]).send(r,n)},l.prototype.getPubkey=function(e,t){return this.resolverMethodHandler.method(e,"pubkey",[],null,t).call(t)},l.prototype.setPubkey=function(e,t,r,n,i){return this.resolverMethodHandler.method(e,"setPubkey",[t,r]).send(n,i)},l.prototype.getContent=function(e,t){return this.resolverMethodHandler.method(e,"content",[]).call(t)},l.prototype.setContent=function(e,t,r,n){return this.resolverMethodHandler.method(e,"setContent",[t]).send(r,n)},l.prototype.getContenthash=function(e,t){return this.resolverMethodHandler.method(e,"contenthash",[],d.decode).call(t)},l.prototype.setContenthash=function(e,t,r,n){var i;try{i=d.encode(t)}catch(e){var o=new Error("Could not encode "+t+". See docs for supported hash protocols.");if(a.isFunction(n))return void n(o,null);throw o}return this.resolverMethodHandler.method(e,"setContenthash",[i]).send(r,n)},l.prototype.getMultihash=function(e,t){return this.resolverMethodHandler.method(e,"multihash",[]).call(t)},l.prototype.setMultihash=function(e,t,r,n){return this.resolverMethodHandler.method(e,"multihash",[t]).send(r,n)},l.prototype.checkNetwork=(0,o.default)(i.default.mark((function e(){var t,r,n,o,a;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=new Date/1e3,this._lastSyncCheck&&!(t-this._lastSyncCheck>3600)){e.next=9;break}return e.next=4,this.eth.getBlock("latest");case 4:if(r=e.sent,!((n=t-r.timestamp)>3600)){e.next=8;break}throw new Error("Network not synced; last block was "+n+" seconds ago");case 8:this._lastSyncCheck=t;case 9:if(!this.registryAddress){e.next=11;break}return e.abrupt("return",this.registryAddress);case 11:if(this._detectedAddress){e.next=20;break}return e.next=14,this.eth.net.getNetworkType();case 14:if(o=e.sent,void 0!==(a=s.addresses[o])){e.next=18;break}throw new Error("ENS is not supported on network "+o);case 18:return this._detectedAddress=a,e.abrupt("return",this._detectedAddress);case 20:return e.abrupt("return",this._detectedAddress);case 21:case"end":return e.stop()}}),e,this)}))),e.exports=l},function(e,t,r){"use strict";var n=r(10),i=r(114),o=r(124),a=r(48),s=r(9).formatters,u=r(16),f=r(277),c=r(278);function h(e){var t=this;this.ens=e,this.contract=e.checkNetwork().then((function(e){var r=new i(f,e);return r.setProvider(t.ens.eth.currentProvider),r}))}h.prototype.owner=function(e,t){return console.warn('Deprecated: Please use the "getOwner" method instead of "owner".'),this.getOwner(e,t)},h.prototype.getOwner=function(e,t){var r=new a(!0);return this.contract.then((function(t){return t.methods.owner(o.hash(e)).call()})).then((function(e){n.isFunction(t)?t(e,e):r.resolve(e)})).catch((function(e){n.isFunction(t)?t(e,null):r.reject(e)})),r.eventEmitter},h.prototype.setOwner=function(e,t,r,i){var u=new a(!0);return this.contract.then((function(n){return n.methods.setOwner(o.hash(e),s.inputAddressFormatter(t)).send(r)})).then((function(e){n.isFunction(i)?i(e,e):u.resolve(e)})).catch((function(e){n.isFunction(i)?i(e,null):u.reject(e)})),u.eventEmitter},h.prototype.getTTL=function(e,t){var r=new a(!0);return this.contract.then((function(t){return t.methods.ttl(o.hash(e)).call()})).then((function(e){n.isFunction(t)?t(e,e):r.resolve(e)})).catch((function(e){n.isFunction(t)?t(e,null):r.reject(e)})),r.eventEmitter},h.prototype.setTTL=function(e,t,r,i){var s=new a(!0);return this.contract.then((function(n){return n.methods.setTTL(o.hash(e),t).send(r)})).then((function(e){n.isFunction(i)?i(e,e):s.resolve(e)})).catch((function(e){n.isFunction(i)?i(e,null):s.reject(e)})),s.eventEmitter},h.prototype.setSubnodeOwner=function(e,t,r,i,f){var c=new a(!0);return u.isHexStrict(t)||(t=u.sha3(t)),this.contract.then((function(n){return n.methods.setSubnodeOwner(o.hash(e),t,s.inputAddressFormatter(r)).send(i)})).then((function(e){n.isFunction(f)?f(e,e):c.resolve(e)})).catch((function(e){n.isFunction(f)?f(e,null):c.reject(e)})),c.eventEmitter},h.prototype.setRecord=function(e,t,r,i,u,f){var c=new a(!0);return this.contract.then((function(n){return n.methods.setRecord(o.hash(e),s.inputAddressFormatter(t),s.inputAddressFormatter(r),i).send(u)})).then((function(e){n.isFunction(f)?f(e,e):c.resolve(e)})).catch((function(e){n.isFunction(f)?f(e,null):c.reject(e)})),c.eventEmitter},h.prototype.setSubnodeRecord=function(e,t,r,i,f,c,h){var d=new a(!0);return u.isHexStrict(t)||(t=u.sha3(t)),this.contract.then((function(n){return n.methods.setSubnodeRecord(o.hash(e),t,s.inputAddressFormatter(r),s.inputAddressFormatter(i),f).send(c)})).then((function(e){n.isFunction(h)?h(e,e):d.resolve(e)})).catch((function(e){n.isFunction(h)?h(e,null):d.reject(e)})),d.eventEmitter},h.prototype.setApprovalForAll=function(e,t,r,i){var o=new a(!0);return this.contract.then((function(n){return n.methods.setApprovalForAll(s.inputAddressFormatter(e),t).send(r)})).then((function(e){n.isFunction(i)?i(e,e):o.resolve(e)})).catch((function(e){n.isFunction(i)?i(e,null):o.reject(e)})),o.eventEmitter},h.prototype.isApprovedForAll=function(e,t,r){var i=new a(!0);return this.contract.then((function(r){return r.methods.isApprovedForAll(s.inputAddressFormatter(e),s.inputAddressFormatter(t)).call()})).then((function(e){n.isFunction(r)?r(e,e):i.resolve(e)})).catch((function(e){n.isFunction(r)?r(e,null):i.reject(e)})),i.eventEmitter},h.prototype.recordExists=function(e,t){var r=new a(!0);return this.contract.then((function(t){return t.methods.recordExists(o.hash(e)).call()})).then((function(e){n.isFunction(t)?t(e,e):r.resolve(e)})).catch((function(e){n.isFunction(t)?t(e,null):r.reject(e)})),r.eventEmitter},h.prototype.resolver=function(e,t){return console.warn('Deprecated: Please use the "getResolver" method instead of "resolver".'),this.getResolver(e,t)},h.prototype.getResolver=function(e,t){var r=this;return this.contract.then((function(t){return t.methods.resolver(o.hash(e)).call()})).then((function(e){var o=new i(c,e);if(o.setProvider(r.ens.eth.currentProvider),!n.isFunction(t))return o;t(o,o)})).catch((function(e){if(!n.isFunction(t))throw e;t(e,null)}))},h.prototype.setResolver=function(e,t,r,i){var u=new a(!0);return this.contract.then((function(n){return n.methods.setResolver(o.hash(e),s.inputAddressFormatter(t)).send(r)})).then((function(e){n.isFunction(i)?i(e,e):u.resolve(e)})).catch((function(e){n.isFunction(i)?i(e,null):u.reject(e)})),u.eventEmitter},e.exports=h},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.AddressCoder=void 0;var i=n(r(6)),o=n(r(7)),a=n(r(18)),s=n(r(19)),u=n(r(15)),f=r(70),c=r(12);function h(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,u.default)(e);if(t){var i=(0,u.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,s.default)(this,r)}}var d=function(e){(0,a.default)(r,e);var t=h(r);function r(e){return(0,i.default)(this,r),t.call(this,"address","address",e,!1)}return(0,o.default)(r,[{key:"encode",value:function(e,t){try{(0,f.getAddress)(t)}catch(e){this._throwError(e.message,t)}return e.writeValue(t)}},{key:"decode",value:function(e){return(0,f.getAddress)((0,c.hexZeroPad)(e.readValue().toHexString(),20))}}]),r}(r(21).Coder);t.AddressCoder=d},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.AnonymousCoder=void 0;var i=n(r(6)),o=n(r(7)),a=n(r(18)),s=n(r(19)),u=n(r(15));function f(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,u.default)(e);if(t){var i=(0,u.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,s.default)(this,r)}}var c=function(e){(0,a.default)(r,e);var t=f(r);function r(e){var n;return(0,i.default)(this,r),(n=t.call(this,e.name,e.type,void 0,e.dynamic)).coder=e,n}return(0,o.default)(r,[{key:"encode",value:function(e,t){return this.coder.encode(e,t)}},{key:"decode",value:function(e){return this.coder.decode(e)}}]),r}(r(21).Coder);t.AnonymousCoder=c},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.BooleanCoder=void 0;var i=n(r(6)),o=n(r(7)),a=n(r(18)),s=n(r(19)),u=n(r(15));function f(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,u.default)(e);if(t){var i=(0,u.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,s.default)(this,r)}}var c=function(e){(0,a.default)(r,e);var t=f(r);function r(e){return(0,i.default)(this,r),t.call(this,"bool","bool",e,!1)}return(0,o.default)(r,[{key:"encode",value:function(e,t){return e.writeValue(t?1:0)}},{key:"decode",value:function(e){return e.coerce(this.type,!e.readValue().isZero())}}]),r}(r(21).Coder);t.BooleanCoder=c},function(e,t,r){"use strict";var n=r(15);e.exports=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=n(e)););return e}},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.FixedBytesCoder=void 0;var i=n(r(6)),o=n(r(7)),a=n(r(18)),s=n(r(19)),u=n(r(15)),f=r(12);function c(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,u.default)(e);if(t){var i=(0,u.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,s.default)(this,r)}}var h=function(e){(0,a.default)(r,e);var t=c(r);function r(e,n){var o;(0,i.default)(this,r);var a="bytes"+String(e);return(o=t.call(this,a,a,n,!1)).size=e,o}return(0,o.default)(r,[{key:"encode",value:function(e,t){var r=(0,f.arrayify)(t);return r.length!==this.size&&this._throwError("incorrect data length",t),e.writeBytes(r)}},{key:"decode",value:function(e){return e.coerce(this.name,(0,f.hexlify)(e.readBytes(this.size)))}}]),r}(r(21).Coder);t.FixedBytesCoder=h},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.NullCoder=void 0;var i=n(r(6)),o=n(r(7)),a=n(r(18)),s=n(r(19)),u=n(r(15));function f(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,u.default)(e);if(t){var i=(0,u.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,s.default)(this,r)}}var c=function(e){(0,a.default)(r,e);var t=f(r);function r(e){return(0,i.default)(this,r),t.call(this,"null","",e,!1)}return(0,o.default)(r,[{key:"encode",value:function(e,t){return null!=t&&this._throwError("not null",t),e.writeBytes([])}},{key:"decode",value:function(e){return e.readBytes(0),e.coerce(this.name,null)}}]),r}(r(21).Coder);t.NullCoder=c},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.NumberCoder=void 0;var i=n(r(6)),o=n(r(7)),a=n(r(18)),s=n(r(19)),u=n(r(15)),f=r(29),c=r(71);function h(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,u.default)(e);if(t){var i=(0,u.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,s.default)(this,r)}}var d=function(e){(0,a.default)(r,e);var t=h(r);function r(e,n,o){var a;(0,i.default)(this,r);var s=(n?"int":"uint")+8*e;return(a=t.call(this,s,s,o,!1)).size=e,a.signed=n,a}return(0,o.default)(r,[{key:"encode",value:function(e,t){var r=f.BigNumber.from(t),n=c.MaxUint256.mask(8*e.wordSize);if(this.signed){var i=n.mask(8*this.size-1);(r.gt(i)||r.lt(i.add(c.One).mul(c.NegativeOne)))&&this._throwError("value out-of-bounds",t)}else(r.lt(c.Zero)||r.gt(n.mask(8*this.size)))&&this._throwError("value out-of-bounds",t);return r=r.toTwos(8*this.size).mask(8*this.size),this.signed&&(r=r.fromTwos(8*this.size).toTwos(8*e.wordSize)),e.writeValue(r)}},{key:"decode",value:function(e){var t=e.readValue().mask(8*this.size);return this.signed&&(t=t.fromTwos(8*this.size)),e.coerce(this.name,t)}}]),r}(r(21).Coder);t.NumberCoder=d},function(e,t,r){"use strict";var n=r(0);Object.defineProperty(t,"__esModule",{value:!0}),t.StringCoder=void 0;var i=n(r(6)),o=n(r(7)),a=n(r(122)),s=n(r(18)),u=n(r(19)),f=n(r(15)),c=r(123);function h(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,f.default)(e);if(t){var i=(0,f.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,u.default)(this,r)}}var d=function(e){(0,s.default)(r,e);var t=h(r);function r(e){return(0,i.default)(this,r),t.call(this,"string",e)}return(0,o.default)(r,[{key:"encode",value:function(e,t){return(0,a.default)((0,f.default)(r.prototype),"encode",this).call(this,e,(0,c.toUtf8Bytes)(t))}},{key:"decode",value:function(e){return(0,c.toUtf8String)((0,a.default)((0,f.default)(r.prototype),"decode",this).call(this,e))}}]),r}(r(121).DynamicBytesCoder);t.StringCoder=d},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.formatBytes32String=function(e){var t=(0,o.toUtf8Bytes)(e);if(t.length>31)throw new Error("bytes32 string must be less than 32 bytes");return(0,i.hexlify)((0,i.concat)([t,n.HashZero]).slice(0,32))},t.parseBytes32String=function(e){var t=(0,i.arrayify)(e);if(32!==t.length)throw new Error("invalid bytes32 - not 32 bytes long");if(0!==t[31])throw new Error("invalid bytes32 string - no null terminator");var r=31;for(;0===t[r-1];)r--;return(0,o.toUtf8String)(t.slice(0,r))};var n=r(71),i=r(12),o=r(75)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.version=void 0;t.version="strings/5.0.2"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t._nameprepTableA1=p,t._nameprepTableB2=b,t._nameprepTableC=m,t.nameprep=function(e){if(e.match(/^[a-z0-9-]*$/i)&&e.length<=59)return e.toLowerCase();var t=(0,n.toUtf8CodePoints)(e);r=t.map((function(e){if(u.indexOf(e)>=0)return[];if(e>=65024&&e<=65039)return[];var t=b(e);return t||[e]})),t=r.reduce((function(e,t){return t.forEach((function(t){e.push(t)})),e}),[]),(t=(0,n.toUtf8CodePoints)((0,n._toUtf8String)(t),n.UnicodeNormalizationForm.NFKC)).forEach((function(e){if(m(e))throw new Error("STRINGPREP_CONTAINS_PROHIBITED")})),t.forEach((function(e){if(p(e))throw new Error("STRINGPREP_CONTAINS_UNASSIGNED")}));var r;var i=(0,n._toUtf8String)(t);if("-"===i.substring(0,1)||"--"===i.substring(2,4)||"-"===i.substring(i.length-1))throw new Error("invalid hyphen");if(i.length>63)throw new Error("too long");return i};var n=r(75);function i(e,t){t||(t=function(e){return[parseInt(e,16)]});var r=0,n={};return e.split(",").forEach((function(e){var i=e.split(":");r+=parseInt(i[0],16),n[r]=t(i[1])})),n}function o(e){var t=0;return e.split(",").map((function(e){var r=e.split("-");return 1===r.length?r[1]="0":""===r[1]&&(r[1]="1"),{l:t+parseInt(r[0],16),h:t=parseInt(r[1],16)}}))}function a(e,t){for(var r=0,n=0;n=(r+=i.l)&&e<=r+i.h&&(e-r)%(i.d||1)==0){if(i.e&&-1!==i.e.indexOf(e-r))continue;return i}}return null}var s=o("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"),u="ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff".split(",").map((function(e){return parseInt(e,16)})),f=[{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}],c=i("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"),h=i("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"),d=i("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(e){if(e.length%4!=0)throw new Error("bad data");for(var t=[],r=0;r1&&_.throwArgumentError("multiple matching functions","name",r),this.functions[n[0]]}var i=this.functions[y.FunctionFragment.fromString(e).format()];return i||_.throwArgumentError("no matching function","signature",e),i}},{key:"getEvent",value:function(e){if((0,h.isHexString)(e)){var t=e.toLowerCase();for(var r in this.events)if(t===this.getEventTopic(r))return this.events[r];_.throwArgumentError("no matching event","topichash",t)}if(-1===e.indexOf("(")){var n=e.trim(),i=Object.keys(this.events).filter((function(e){return e.split("(")[0]===n}));return 0===i.length?_.throwArgumentError("no matching event","name",n):i.length>1&&_.throwArgumentError("multiple matching events","name",n),this.events[i[0]]}var o=this.events[y.EventFragment.fromString(e).format()];return o||_.throwArgumentError("no matching event","signature",e),o}},{key:"getSighash",value:function(e){return"string"==typeof e&&(e=this.getFunction(e)),(0,p.getStatic)(this.constructor,"getSighash")(e)}},{key:"getEventTopic",value:function(e){return"string"==typeof e&&(e=this.getEvent(e)),(0,p.getStatic)(this.constructor,"getEventTopic")(e)}},{key:"_decodeParams",value:function(e,t){return this._abiCoder.decode(e,t)}},{key:"_encodeParams",value:function(e,t){return this._abiCoder.encode(e,t)}},{key:"encodeDeploy",value:function(e){return this._encodeParams(this.deploy.inputs,e||[])}},{key:"decodeFunctionData",value:function(e,t){"string"==typeof e&&(e=this.getFunction(e));var r=(0,h.arrayify)(t);return(0,h.hexlify)(r.slice(0,4))!==this.getSighash(e)&&_.throwArgumentError("data signature does not match function ".concat(e.name,"."),"data",(0,h.hexlify)(r)),this._decodeParams(e.inputs,r.slice(4))}},{key:"encodeFunctionData",value:function(e,t){return"string"==typeof e&&(e=this.getFunction(e)),(0,h.hexlify)((0,h.concat)([this.getSighash(e),this._encodeParams(e.inputs,t||[])]))}},{key:"decodeFunctionResult",value:function(e,t){"string"==typeof e&&(e=this.getFunction(e));var r=(0,h.arrayify)(t),n=null,i=null;switch(r.length%this._abiCoder._getWordSize()){case 0:try{return this._abiCoder.decode(e.outputs,r)}catch(e){}break;case 4:"0x08c379a0"===(0,h.hexlify)(r.slice(0,4))&&(i="Error(string)",n=this._abiCoder.decode(["string"],r.slice(4))[0])}return _.throwError("call revert exception",v.Logger.errors.CALL_EXCEPTION,{method:e.format(),errorSignature:i,errorArgs:[n],reason:n})}},{key:"encodeFunctionResult",value:function(e,t){return"string"==typeof e&&(e=this.getFunction(e)),(0,h.hexlify)(this._abiCoder.encode(e.outputs,t||[]))}},{key:"encodeFilterTopics",value:function(e,t){var r=this;"string"==typeof e&&(e=this.getEvent(e)),t.length>e.inputs.length&&_.throwError("too many arguments for "+e.format(),v.Logger.errors.UNEXPECTED_ARGUMENT,{argument:"values",value:t});var n=[];e.anonymous||n.push(this.getEventTopic(e));var i=function(e,t){return"string"===e.type?(0,d.id)(t):"bytes"===e.type?(0,l.keccak256)((0,h.hexlify)(t)):("address"===e.type&&r._abiCoder.encode(["address"],[t]),(0,h.hexZeroPad)((0,h.hexlify)(t),32))};for(t.forEach((function(t,r){var o=e.inputs[r];o.indexed?null==t?n.push(null):"array"===o.baseType||"tuple"===o.baseType?_.throwArgumentError("filtering with tuples or arrays not supported","contract."+o.name,t):Array.isArray(t)?n.push(t.map((function(e){return i(o,e)}))):n.push(i(o,t)):null!=t&&_.throwArgumentError("cannot filter non-indexed parameters; must be null","contract."+o.name,t)}));n.length&&null===n[n.length-1];)n.pop();return n}},{key:"encodeEventLog",value:function(e,t){var r=this;"string"==typeof e&&(e=this.getEvent(e));var n=[],i=[],o=[];return e.anonymous||n.push(this.getEventTopic(e)),t.length!==e.inputs.length&&_.throwArgumentError("event arguments/values mismatch","values",t),e.inputs.forEach((function(e,a){var s=t[a];if(e.indexed)if("string"===e.type)n.push((0,d.id)(s));else if("bytes"===e.type)n.push((0,l.keccak256)(s));else{if("tuple"===e.baseType||"array"===e.baseType)throw new Error("not implemented");n.push(r._abiCoder.encode([e.type],[s]))}else i.push(e),o.push(s)})),{data:this._abiCoder.encode(i,o),topics:n}}},{key:"decodeEventLog",value:function(e,t,r){if("string"==typeof e&&(e=this.getEvent(e)),null!=r&&!e.anonymous){var n=this.getEventTopic(e);(0,h.isHexString)(r[0],32)&&r[0].toLowerCase()===n||_.throwError("fragment/topic mismatch",v.Logger.errors.INVALID_ARGUMENT,{argument:"topics[0]",expected:n,value:r[0]}),r=r.slice(1)}var i=[],o=[],a=[];e.inputs.forEach((function(e,t){e.indexed?"string"===e.type||"bytes"===e.type||"tuple"===e.baseType||"array"===e.baseType?(i.push(y.ParamType.fromObject({type:"bytes32",name:e.name})),a.push(!0)):(i.push(e),a.push(!1)):(o.push(e),a.push(!1))}));var s=null!=r?this._abiCoder.decode(i,(0,h.concat)(r)):null,u=this._abiCoder.decode(o,t),f=[],c=0,d=0;e.inputs.forEach((function(e,t){if(e.indexed)if(null==s)f[t]=new S({_isIndexed:!0,hash:null});else if(a[t])f[t]=new S({_isIndexed:!0,hash:s[d++]});else try{f[t]=s[d++]}catch(e){f[t]=e}else try{f[t]=u[c++]}catch(e){f[t]=e}if(e.name&&null==f[e.name]){var r=f[t];r instanceof Error?Object.defineProperty(f,e.name,{get:function(){throw E("property ".concat(JSON.stringify(e.name)),r)}}):f[e.name]=r}}));for(var l=function(e){var t=f[e];t instanceof Error&&Object.defineProperty(f,e,{get:function(){throw E("index ".concat(e),t)}})},p=0;p>5,this.byteCount=this.blockCount<<2,this.outputBlocks=r>>5,this.extraBytes=(31&r)>>3;for(var n=0;n<50;++n)this.s[n]=0}k.prototype.update=function(e){var t="string"!=typeof e;t&&e.constructor===ArrayBuffer&&(e=new Uint8Array(e));for(var r,n,i=e.length,o=this.blocks,a=this.byteCount,u=this.blockCount,f=0,c=this.s;f>2]|=e[f]<>2]|=n<>2]|=(192|n>>6)<>2]|=(128|63&n)<=57344?(o[r>>2]|=(224|n>>12)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<>2]|=(240|n>>18)<>2]|=(128|n>>12&63)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<=a){for(this.start=r-a,this.block=o[u],r=0;r>2]|=this.padding[3&t],this.lastByteIndex===this.byteCount)for(e[0]=e[r],t=1;t>4&15]+a[15&e]+a[e>>12&15]+a[e>>8&15]+a[e>>20&15]+a[e>>16&15]+a[e>>28&15]+a[e>>24&15];s%t==0&&(A(r),o=0)}return i&&(e=r[o],i>0&&(u+=a[e>>4&15]+a[15&e]),i>1&&(u+=a[e>>12&15]+a[e>>8&15]),i>2&&(u+=a[e>>20&15]+a[e>>16&15])),u},k.prototype.arrayBuffer=function(){this.finalize();var e,t=this.blockCount,r=this.s,n=this.outputBlocks,i=this.extraBytes,o=0,a=0,s=this.outputBits>>3;e=i?new ArrayBuffer(n+1<<2):new ArrayBuffer(s);for(var u=new Uint32Array(e);a>8&255,u[e+2]=t>>16&255,u[e+3]=t>>24&255;s%r==0&&A(n)}return o&&(e=s<<2,t=n[a],o>0&&(u[e]=255&t),o>1&&(u[e+1]=t>>8&255),o>2&&(u[e+2]=t>>16&255)),u};var A=function(e){var t,r,n,i,o,a,s,f,c,h,d,l,p,b,m,y,v,g,w,_,k,A,S,E,x,M,I,O,C,P,T,U,B,R,N,j,L,F,D,q,z,H,K,V,G,W,Y,$,J,Z,X,Q,ee,te,re,ne,ie,oe,ae,se,ue,fe,ce;for(n=0;n<48;n+=2)i=e[0]^e[10]^e[20]^e[30]^e[40],o=e[1]^e[11]^e[21]^e[31]^e[41],a=e[2]^e[12]^e[22]^e[32]^e[42],s=e[3]^e[13]^e[23]^e[33]^e[43],f=e[4]^e[14]^e[24]^e[34]^e[44],c=e[5]^e[15]^e[25]^e[35]^e[45],h=e[6]^e[16]^e[26]^e[36]^e[46],d=e[7]^e[17]^e[27]^e[37]^e[47],t=(l=e[8]^e[18]^e[28]^e[38]^e[48])^(a<<1|s>>>31),r=(p=e[9]^e[19]^e[29]^e[39]^e[49])^(s<<1|a>>>31),e[0]^=t,e[1]^=r,e[10]^=t,e[11]^=r,e[20]^=t,e[21]^=r,e[30]^=t,e[31]^=r,e[40]^=t,e[41]^=r,t=i^(f<<1|c>>>31),r=o^(c<<1|f>>>31),e[2]^=t,e[3]^=r,e[12]^=t,e[13]^=r,e[22]^=t,e[23]^=r,e[32]^=t,e[33]^=r,e[42]^=t,e[43]^=r,t=a^(h<<1|d>>>31),r=s^(d<<1|h>>>31),e[4]^=t,e[5]^=r,e[14]^=t,e[15]^=r,e[24]^=t,e[25]^=r,e[34]^=t,e[35]^=r,e[44]^=t,e[45]^=r,t=f^(l<<1|p>>>31),r=c^(p<<1|l>>>31),e[6]^=t,e[7]^=r,e[16]^=t,e[17]^=r,e[26]^=t,e[27]^=r,e[36]^=t,e[37]^=r,e[46]^=t,e[47]^=r,t=h^(i<<1|o>>>31),r=d^(o<<1|i>>>31),e[8]^=t,e[9]^=r,e[18]^=t,e[19]^=r,e[28]^=t,e[29]^=r,e[38]^=t,e[39]^=r,e[48]^=t,e[49]^=r,b=e[0],m=e[1],W=e[11]<<4|e[10]>>>28,Y=e[10]<<4|e[11]>>>28,O=e[20]<<3|e[21]>>>29,C=e[21]<<3|e[20]>>>29,se=e[31]<<9|e[30]>>>23,ue=e[30]<<9|e[31]>>>23,H=e[40]<<18|e[41]>>>14,K=e[41]<<18|e[40]>>>14,R=e[2]<<1|e[3]>>>31,N=e[3]<<1|e[2]>>>31,y=e[13]<<12|e[12]>>>20,v=e[12]<<12|e[13]>>>20,$=e[22]<<10|e[23]>>>22,J=e[23]<<10|e[22]>>>22,P=e[33]<<13|e[32]>>>19,T=e[32]<<13|e[33]>>>19,fe=e[42]<<2|e[43]>>>30,ce=e[43]<<2|e[42]>>>30,te=e[5]<<30|e[4]>>>2,re=e[4]<<30|e[5]>>>2,j=e[14]<<6|e[15]>>>26,L=e[15]<<6|e[14]>>>26,g=e[25]<<11|e[24]>>>21,w=e[24]<<11|e[25]>>>21,Z=e[34]<<15|e[35]>>>17,X=e[35]<<15|e[34]>>>17,U=e[45]<<29|e[44]>>>3,B=e[44]<<29|e[45]>>>3,E=e[6]<<28|e[7]>>>4,x=e[7]<<28|e[6]>>>4,ne=e[17]<<23|e[16]>>>9,ie=e[16]<<23|e[17]>>>9,F=e[26]<<25|e[27]>>>7,D=e[27]<<25|e[26]>>>7,_=e[36]<<21|e[37]>>>11,k=e[37]<<21|e[36]>>>11,Q=e[47]<<24|e[46]>>>8,ee=e[46]<<24|e[47]>>>8,V=e[8]<<27|e[9]>>>5,G=e[9]<<27|e[8]>>>5,M=e[18]<<20|e[19]>>>12,I=e[19]<<20|e[18]>>>12,oe=e[29]<<7|e[28]>>>25,ae=e[28]<<7|e[29]>>>25,q=e[38]<<8|e[39]>>>24,z=e[39]<<8|e[38]>>>24,A=e[48]<<14|e[49]>>>18,S=e[49]<<14|e[48]>>>18,e[0]=b^~y&g,e[1]=m^~v&w,e[10]=E^~M&O,e[11]=x^~I&C,e[20]=R^~j&F,e[21]=N^~L&D,e[30]=V^~W&$,e[31]=G^~Y&J,e[40]=te^~ne&oe,e[41]=re^~ie&ae,e[2]=y^~g&_,e[3]=v^~w&k,e[12]=M^~O&P,e[13]=I^~C&T,e[22]=j^~F&q,e[23]=L^~D&z,e[32]=W^~$&Z,e[33]=Y^~J&X,e[42]=ne^~oe&se,e[43]=ie^~ae&ue,e[4]=g^~_&A,e[5]=w^~k&S,e[14]=O^~P&U,e[15]=C^~T&B,e[24]=F^~q&H,e[25]=D^~z&K,e[34]=$^~Z&Q,e[35]=J^~X&ee,e[44]=oe^~se&fe,e[45]=ae^~ue&ce,e[6]=_^~A&b,e[7]=k^~S&m,e[16]=P^~U&E,e[17]=T^~B&x,e[26]=q^~H&R,e[27]=z^~K&N,e[36]=Z^~Q&V,e[37]=X^~ee&G,e[46]=se^~fe&te,e[47]=ue^~ce&re,e[8]=A^~b&y,e[9]=S^~m&v,e[18]=U^~E&M,e[19]=B^~x&I,e[28]=H^~R&j,e[29]=K^~N&L,e[38]=Q^~V&W,e[39]=ee^~G&Y,e[48]=fe^~te&ne,e[49]=ce^~re&ie,e[0]^=u[n],e[1]^=u[n+1]};if(o)n.exports=b;else for(y=0;y>23,d=c>>21&3,l=c>>5&65535,p=31&c,b=t.mapStr.substr(l,p);if(0===d||n&&1&h)throw new Error("Illegal char "+f);1===d?o.push(b):2===d?o.push(i?b:f):3===d&&o.push(f)}return o.join("").normalize("NFC")}function n(t,n,o){void 0===o&&(o=!1);var a=r(t,o,n).split(".");return(a=a.map((function(t){return t.startsWith("xn--")?i(t=e.decode(t.substring(4)),o,!1):i(t,o,n),t}))).join(".")}function i(e,n,i){if("-"===e[2]&&"-"===e[3])throw new Error("Failed to validate "+e);if(e.startsWith("-")||e.endsWith("-"))throw new Error("Failed to validate "+e);if(e.includes("."))throw new Error("Failed to validate "+e);if(r(e,n,i)!==e)throw new Error("Failed to validate "+e);var o=e.codePointAt(0);if(t.mapChar(o)&2<<23)throw new Error("Label contains illegal character: "+o)}return{toUnicode:function(e,t){return void 0===t&&(t={}),n(e,!1,"useStd3ASCII"in t&&t.useStd3ASCII)},toAscii:function(t,r){void 0===r&&(r={});var i,o=!("transitional"in r)||r.transitional,a="useStd3ASCII"in r&&r.useStd3ASCII,s="verifyDnsLength"in r&&r.verifyDnsLength,u=n(t,o,a).split(".").map(e.toASCII),f=u.join(".");if(s){if(f.length<1||f.length>253)throw new Error("DNS name has wrong length: "+f);for(i=0;i63)throw new Error("DNS label has wrong length: "+c)}}return f}}}(e,t)}.apply(t,n))||(e.exports=i)},function(e,t,r){"use strict";var n;r(0)(r(1));void 0===(n=function(){return e=[new Uint32Array([2157250,2157314,2157378,2157442,2157506,2157570,2157634,0,2157698,2157762,2157826,2157890,2157954,0,2158018,0]),new Uint32Array([2179041,6291456,2179073,6291456,2179105,6291456,2179137,6291456,2179169,6291456,2179201,6291456,2179233,6291456,2179265,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,14680064,14680064,14680064,14680064,14680064]),new Uint32Array([0,2113729,2197345,2197377,2113825,2197409,2197441,2113921,2197473,2114017,2197505,2197537,2197569,2197601,2197633,2197665]),new Uint32Array([6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,23068672,23068672,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,0,23068672,23068672,23068672,0,0,0,0,23068672]),new Uint32Array([14680064,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,14680064,14680064]),new Uint32Array([2196001,2196033,2196065,2196097,2196129,2196161,2196193,2196225,2196257,2196289,2196321,2196353,2196385,2196417,2196449,2196481]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,6291456,0,0,0,0,0]),new Uint32Array([2097281,2105921,2097729,2106081,0,2097601,2162337,2106017,2133281,2097505,2105889,2097185,2097697,2135777,2097633,2097441]),new Uint32Array([2177025,6291456,2177057,6291456,2177089,6291456,2177121,6291456,2177153,6291456,2177185,6291456,2177217,6291456,2177249,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,0,6291456,6291456,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456]),new Uint32Array([0,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,6291456]),new Uint32Array([2134435,2134531,2134627,2134723,2134723,2134819,2134819,2134915,2134915,2135011,2105987,2135107,2135203,2135299,2131587,2135395]),new Uint32Array([0,0,0,0,0,0,0,6291456,2168673,2169249,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2147906,2147970,2148034,2148098,2148162,2148226,2148290,2148354,2147906,2147970,2148034,2148098,2148162,2148226,2148290,2148354]),new Uint32Array([2125219,2125315,2152834,2152898,2125411,2152962,2153026,2125506,2125507,2125603,2153090,2153154,2153218,2153282,2153346,2105348]),new Uint32Array([2203393,6291456,2203425,6291456,2203457,6291456,2203489,6291456,6291456,6291456,6291456,2203521,6291456,2181281,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,23068672,6291456,2145538,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,6291456]),new Uint32Array([2139426,2160834,2160898,2160962,2134242,2161026,2161090,2161154,2161218,2161282,2161346,2161410,2138658,2161474,2161538,2134722]),new Uint32Array([2119939,2124930,2125026,2106658,2125218,2128962,2129058,2129154,2129250,2129346,2129442,2108866,2108770,2150466,2150530,2150594]),new Uint32Array([2201601,6291456,2201633,6291456,2201665,6291456,2201697,6291456,2201729,6291456,2201761,6291456,2201793,6291456,2201825,6291456]),new Uint32Array([2193537,2193569,2193601,2193633,2193665,2193697,2193729,2193761,2193793,2193825,2193857,2193889,2193921,2193953,2193985,2194017]),new Uint32Array([6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([0,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([2190561,6291456,2190593,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2190625,6291456,2190657,6291456,23068672]),new Uint32Array([2215905,2215937,2215969,2216001,2216033,2216065,2216097,2216129,2216161,2216193,2216225,2216257,2105441,2216289,2216321,2216353]),new Uint32Array([23068672,18884130,23068672,23068672,23068672,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672]),new Uint32Array([23068672,23068672,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([6291456,6291456,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([2191233,2191265,2191297,2191329,2191361,2191393,2191425,2117377,2191457,2191489,2191521,2191553,2191585,2191617,2191649,2117953]),new Uint32Array([2132227,2132323,2132419,2132419,2132515,2132515,2132611,2132707,2132707,2132803,2132899,2132899,2132995,2132995,2133091,2133187]),new Uint32Array([0,0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,6291456,0,0]),new Uint32Array([2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,10609889,10610785,10609921,10610817,2222241]),new Uint32Array([6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,0,0]),new Uint32Array([2219969,2157121,2157441,2157505,2157889,2157953,2220001,2158465,2158529,10575617,2156994,2157058,2129923,2130019,2157122,2157186]),new Uint32Array([6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0]),new Uint32Array([2185249,6291456,2185281,6291456,2185313,6291456,2185345,6291456,2185377,6291456,2185409,6291456,2185441,6291456,2185473,6291456]),new Uint32Array([0,0,0,0,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,0,23068672,23068672,0,0,23068672,23068672,23068672,6291456,0]),new Uint32Array([2183361,6291456,2183393,6291456,2183425,6291456,2183457,6291456,2183489,6291456,2183521,6291456,2183553,6291456,2183585,6291456]),new Uint32Array([2192161,2192193,2192225,2192257,2192289,2192321,2192353,2192385,2192417,2192449,2192481,2192513,2192545,2192577,2192609,2192641]),new Uint32Array([2212001,2212033,2212065,2212097,2212129,2212161,2212193,2212225,2212257,2212289,2212321,2212353,2212385,2212417,2212449,2207265]),new Uint32Array([2249825,2249857,2249889,2249921,2249954,2250018,2250082,2250145,2250177,2250209,2250241,2250274,2250337,2250370,2250433,2250465]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2147905,2147969,2148033,2148097,2148161,2148225,2148289,2148353]),new Uint32Array([10485857,6291456,2197217,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,23068672,23068672]),new Uint32Array([0,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]),new Uint32Array([2180353,2180385,2144033,2180417,2180449,2180481,2180513,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,10610209,10610465,10610241,10610753,10609857]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,0,0]),new Uint32Array([2223842,2223906,2223970,2224034,2224098,2224162,2224226,2224290,2224354,2224418,2224482,2224546,2224610,2224674,2224738,2224802]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,6291456,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456]),new Uint32Array([23068672,23068672,23068672,18923650,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,18923714,23068672,23068672]),new Uint32Array([2126179,2125538,2126275,2126371,2126467,2125634,2126563,2105603,2105604,2125346,2126659,2126755,2126851,2098179,2098181,2098182]),new Uint32Array([2227426,2227490,2227554,2227618,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2192353,2240642,2240642,2240705,2240737,2240737,2240769,2240802,2240866,2240929,2240961,2240993,2241025,2241057,2241089,2241121]),new Uint32Array([6291456,2170881,2170913,2170945,6291456,2170977,6291456,2171009,2171041,6291456,6291456,6291456,2171073,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([2132226,2132514,2163586,2132610,2160386,2133090,2133186,2160450,2160514,2160578,2133570,2106178,2160642,2133858,2160706,2160770]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,10532162,10532226,10532290,10532354,10532418,10532482,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,23068672]),new Uint32Array([2098209,2108353,2108193,2108481,2170241,2111713,2105473,2105569,2105601,2112289,2112481,2098305,2108321,0,0,0]),new Uint32Array([2209121,2209153,2209185,2209217,2209249,2209281,2209313,2209345,2209377,2209409,2209441,2209473,2207265,2209505,2209537,2209569]),new Uint32Array([2189025,6291456,2189057,6291456,2189089,6291456,2189121,6291456,2189153,6291456,2189185,6291456,2189217,6291456,2189249,6291456]),new Uint32Array([2173825,2153473,2173857,2173889,2173921,2173953,2173985,2173761,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233057]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2165764,2140004]),new Uint32Array([2215105,6291456,2215137,6291456,6291456,2215169,2215201,6291456,6291456,6291456,2215233,2215265,2215297,2215329,2215361,2215393]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([23068672,23068672,6291456,6291456,6291456,23068672,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([10505091,10505187,10505283,10505379,10505475,10505571,10505667,10505763,10505859,10505955,10506051,10506147,10506243,10506339,10506435,10506531]),new Uint32Array([2229730,2229794,2229858,2229922,2229986,2230050,2230114,2230178,2230242,2230306,2230370,2230434,2230498,2230562,2230626,2230690]),new Uint32Array([2105505,2098241,2108353,2108417,2105825,0,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177]),new Uint32Array([6291456,6291456,6291456,6291456,10502115,10502178,10502211,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([0,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456]),new Uint32Array([2190305,6291456,2190337,6291456,2190369,6291456,2190401,6291456,2190433,6291456,2190465,6291456,2190497,6291456,2190529,6291456]),new Uint32Array([2173793,2173985,2174017,6291456,2173761,2173697,6291456,2174689,6291456,2174017,2174721,6291456,6291456,2174753,2174785,2174817]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2099521,2099105,2120705,2098369,2120801,2103361,2097985,2098433,2121377,2121473,2099169,2099873,2098401,2099393,2152609,2100033]),new Uint32Array([2132898,2163842,2163906,2133282,2132034,2131938,2137410,2132802,2132706,2164866,2133282,2160578,2165186,2165186,6291456,6291456]),new Uint32Array([10500003,10500099,10500195,10500291,10500387,10500483,10500579,10500675,10500771,10500867,10500963,10501059,10501155,10501251,10501347,10501443]),new Uint32Array([2163458,2130978,2131074,2131266,2131362,2163522,2160130,2132066,2131010,2131106,2106018,2131618,2131298,2132034,2131938,2137410]),new Uint32Array([2212961,2116993,2212993,2213025,2213057,2213089,2213121,2213153,2213185,2213217,2213249,2209633,2213281,2213313,2213345,2213377]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]),new Uint32Array([2113729,2113825,2113921,2114017,2114113,2114209,2114305,2114401,2114497,2114593,2114689,2114785,2114881,2114977,2115073,2115169]),new Uint32Array([2238177,2238209,2238241,2238273,2238305,2238337,2238337,2217537,2238369,2238401,2238433,2238465,2215649,2238497,2238529,2238561]),new Uint32Array([2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905]),new Uint32Array([6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,0]),new Uint32Array([6291456,0,6291456,2145026,0,6291456,2145090,0,6291456,6291456,0,0,23068672,0,23068672,23068672]),new Uint32Array([2099233,2122017,2200673,2098113,2121537,2103201,2200705,2104033,2121857,2121953,2122401,2099649,2099969,2123009,2100129,2100289]),new Uint32Array([6291456,23068672,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,23068672,23068672,0,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0]),new Uint32Array([2187681,2187713,2187745,2187777,2187809,2187841,2187873,2187905,2187937,2187969,2188001,2188033,2188065,2188097,2188129,2188161]),new Uint32Array([0,10554498,10554562,10554626,10554690,10554754,10554818,10554882,10554946,10555010,10555074,6291456,6291456,0,0,0]),new Uint32Array([2235170,2235234,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0]),new Uint32Array([2181153,6291456,2188897,6291456,6291456,2188929,6291456,6291456,6291456,6291456,6291456,6291456,2111905,2100865,2188961,2188993]),new Uint32Array([2100833,2100897,0,0,2101569,2101697,2101825,2101953,2102081,2102209,10575617,2187041,10502177,10489601,10489697,2112289]),new Uint32Array([6291456,2172833,6291456,2172865,2172897,2172929,2172961,6291456,2172993,6291456,2173025,6291456,2173057,6291456,2173089,6291456]),new Uint32Array([6291456,0,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,0,0,23068672,6291456,23068672,23068672]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,2190721]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,23068672,6291456,6291456]),new Uint32Array([2184993,6291456,2185025,6291456,2185057,6291456,2185089,6291456,2185121,6291456,2185153,6291456,2185185,6291456,2185217,6291456]),new Uint32Array([2115265,2115361,2115457,2115553,2115649,2115745,2115841,2115937,2116033,2116129,2116225,2116321,2150658,2150722,2200225,6291456]),new Uint32Array([2168321,6291456,2168353,6291456,2168385,6291456,2168417,6291456,2168449,6291456,2168481,6291456,2168513,6291456,2168545,6291456]),new Uint32Array([23068672,23068672,23068672,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([6291456,0,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,0,6291456,0,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,2186625,0,0,6291456,6291456,2186657,2186689,2186721,2173505,0,10496067,10496163,10496259]),new Uint32Array([2178785,6291456,2178817,6291456,2178849,6291456,2178881,6291456,2178913,6291456,2178945,6291456,2178977,6291456,2179009,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0]),new Uint32Array([2097152,0,0,0,2097152,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456]),new Uint32Array([6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([0,0,2197857,2197889,2197921,2197953,2197985,2198017,0,0,2198049,2198081,2198113,2198145,2198177,2198209]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2098209,2167297,2111137,6291456]),new Uint32Array([2171393,6291456,2171425,6291456,2171457,6291456,2171489,6291456,2171521,6291456,2171553,6291456,2171585,6291456,2171617,6291456]),new Uint32Array([2206753,2206785,2195457,2206817,2206849,2206881,2206913,2197153,2197153,2206945,2117857,2206977,2207009,2207041,2207073,2207105]),new Uint32Array([0,0,0,0,0,0,0,23068672,0,0,0,0,2144834,2144898,0,2144962]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,23068672]),new Uint32Array([2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,0,2105505,2098241]),new Uint32Array([6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,2202049,6291456,2202081,6291456,2202113,6291456,2202145,6291456,2202177,6291456,2202209,6291456,2202241,6291456]),new Uint32Array([10501155,10501251,10501347,10501443,10501539,10501635,10501731,10501827,10501923,10502019,2141731,2105505,2098177,2155586,2166530,0]),new Uint32Array([2102081,2102209,2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,2100833,2100737,2098337,2101441]),new Uint32Array([2146882,2146946,2147010,2147074,2147138,2147202,2147266,2147330,2146882,2146946,2147010,2147074,2147138,2147202,2147266,2147330]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0]),new Uint32Array([10502307,10502403,10502499,10502595,10502691,10502787,10502883,10502979,10503075,10503171,10503267,10503363,10503459,10503555,10503651,10503747]),new Uint32Array([2179937,2179969,2180001,2180033,2156545,2180065,2156577,2180097,2180129,2180161,2180193,2180225,2180257,2180289,2156737,2180321]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,0,0,0,6291456,0,0,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0]),new Uint32Array([2227682,2227746,2227810,2227874,2227938,2228002,2228066,2228130,2228194,2228258,2228322,2228386,2228450,2228514,2228578,2228642]),new Uint32Array([2105601,2169121,2108193,2170049,2181025,2181057,2112481,2108321,2108289,2181089,2170497,2100865,2181121,2173601,2173633,2173665]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2180641,6291456,6291456,6291456]),new Uint32Array([0,6291456,6291456,6291456,0,6291456,0,6291456,0,0,6291456,6291456,0,6291456,6291456,6291456]),new Uint32Array([2178273,6291456,2178305,6291456,2178337,6291456,2178369,6291456,2178401,6291456,2178433,6291456,2178465,6291456,2178497,6291456]),new Uint32Array([6291456,6291456,23068672,23068672,23068672,6291456,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,14680064,14680064,14680064,14680064,14680064,14680064]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456]),new Uint32Array([2237377,2237409,2236225,2237441,2237473,2217441,2215521,2215553,2217473,2237505,2237537,2209697,2237569,2215585,2237601,2237633]),new Uint32Array([2221985,2165601,2165601,2165665,2165665,2222017,2222017,2165729,2165729,2158913,2158913,2158913,2158913,2097281,2097281,2105921]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2149634,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2176897,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,2176929,6291456,2176961,6291456,2176993,6291456]),new Uint32Array([2172641,6291456,2172673,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2172705,2172737,6291456,2172769,2172801,6291456]),new Uint32Array([2099173,2104196,2121667,2099395,2121763,2152258,2152322,2098946,2152386,2121859,2121955,2099333,2122051,2104324,2099493,2122147]),new Uint32Array([6291456,6291456,6291456,2145794,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,2145858,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,0,0,6291456,0]),new Uint32Array([0,2105921,2097729,0,2097377,0,0,2106017,0,2097505,2105889,2097185,2097697,2135777,2097633,2097441]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([2239074,2239138,2239201,2239233,2239265,2239297,2239329,2239361,0,2239393,2239425,2239425,2239458,2239521,2239553,2209569]),new Uint32Array([14680064,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,6291456,23068672]),new Uint32Array([2108321,2108289,2113153,2098209,2180897,2180929,2180961,2111137,2098241,2108353,2170241,2170273,2180993,2105825,6291456,2105473]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2146114,6291456,6291456,6291456,0,0,0]),new Uint32Array([2105921,2105921,2105921,2222049,2222049,2130977,2130977,2130977,2130977,2160065,2160065,2160065,2160065,2097729,2097729,2097729]),new Uint32Array([2218145,2214785,2207937,2218177,2218209,2192993,2210113,2212769,2218241,2218273,2216129,2218305,2216161,2218337,2218369,2218401]),new Uint32Array([0,0,0,2156546,2156610,2156674,2156738,2156802,0,0,0,0,0,2156866,23068672,2156930]),new Uint32Array([23068672,23068672,23068672,0,0,0,0,23068672,23068672,0,0,23068672,23068672,23068672,0,0]),new Uint32Array([2213409,2213441,2213473,2213505,2213537,2213569,2213601,2213633,2213665,2195681,2213697,2213729,2213761,2213793,2213825,2213857]),new Uint32Array([2100033,2099233,2122017,2200673,2098113,2121537,2103201,2200705,2104033,2121857,2121953,2122401,2099649,2099969,2123009,2100129]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0]),new Uint32Array([2201857,6291456,2201889,6291456,2201921,6291456,2201953,6291456,2201985,6291456,2202017,6291456,2176193,2176257,23068672,23068672]),new Uint32Array([6291456,6291456,23068672,23068672,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2188193,2188225,2188257,2188289,2188321,2188353,2188385,2188417,2188449,2188481,2188513,2188545,2188577,2188609,2188641,0]),new Uint32Array([10554529,2221089,0,10502113,10562017,10537921,10538049,2221121,2221153,0,0,0,0,0,0,0]),new Uint32Array([2213889,2213921,2213953,2213985,2214017,2214049,2214081,2194177,2214113,2214145,2214177,2214209,2214241,2214273,2214305,2214337]),new Uint32Array([2166978,2167042,2099169,0,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2180545,6291456,6291456,6291456]),new Uint32Array([10518915,10519011,10519107,10519203,2162242,2162306,2159554,2162370,2159362,2159618,2105922,2162434,2159746,2162498,2159810,2159874]),new Uint32Array([2161730,2161794,2135586,2161858,2161922,2137186,2131810,2160290,2135170,2161986,2137954,2162050,2162114,2162178,10518723,10518819]),new Uint32Array([10506627,10506723,10506819,10506915,10507011,10507107,10507203,10507299,10507395,10507491,10507587,10507683,10507779,10507875,10507971,10508067]),new Uint32Array([6291456,23068672,23068672,23068672,0,23068672,23068672,0,0,0,0,0,23068672,23068672,23068672,23068672]),new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0]),new Uint32Array([2175873,2175905,2175937,2175969,2176001,2176033,2176065,2176097,2176129,2176161,2176193,2176225,2176257,2176289,2176321,2176353]),new Uint32Array([2140006,2140198,2140390,2140582,2140774,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,23068672,23068672,23068672]),new Uint32Array([2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241]),new Uint32Array([0,23068672,0,0,0,0,0,0,0,2145154,2145218,2145282,6291456,0,2145346,0]),new Uint32Array([0,0,0,0,10531458,10495395,2148545,2143201,2173473,2148865,2173505,0,2173537,0,2173569,2149121]),new Uint32Array([10537282,10495683,2148738,2148802,2148866,0,6291456,2148930,2186593,2173473,2148737,2148865,2148802,10495779,10495875,10495971]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([2215425,2215457,2215489,2215521,2215553,2215585,2215617,2215649,2215681,2215713,2215745,2215777,2192033,2215809,2215841,2215873]),new Uint32Array([2242049,2242081,2242113,2242145,2242177,2242209,2242241,2242273,2215937,2242305,2242338,2242401,2242433,2242465,2242497,2216001]),new Uint32Array([10554529,2221089,0,0,10562017,10502113,10538049,10537921,2221185,10489601,10489697,10609889,10609921,2141729,2141793,10610273]),new Uint32Array([2141923,2142019,2142115,2142211,2142307,2142403,2142499,2142595,2142691,0,0,0,0,0,0,0]),new Uint32Array([0,2221185,2221217,10609857,10609857,10489601,10489697,10609889,10609921,2141729,2141793,2221345,2221377,2221409,2221441,2187105]),new Uint32Array([6291456,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,18923970,23068672,23068672,23068672,0,6291456,6291456]),new Uint32Array([2183105,6291456,2183137,6291456,2183169,6291456,2183201,6291456,2183233,6291456,2183265,6291456,2183297,6291456,2183329,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0]),new Uint32Array([23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456]),new Uint32Array([2134434,2134818,2097666,2097186,2097474,2097698,2105986,2131586,2132450,2131874,2131778,2135970,2135778,2161602,2136162,2161666]),new Uint32Array([2236865,2236897,2236930,2236993,2237025,2235681,2237058,2237121,2237153,2237185,2237217,2217281,2237250,2191233,2237313,2237345]),new Uint32Array([2190049,6291456,2190081,6291456,2190113,6291456,2190145,6291456,2190177,6291456,2190209,6291456,2190241,6291456,2190273,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2101922,2102050,2102178,2102306,10498755,10498851,10498947,10499043,10499139,10499235,10499331,10499427,10499523,10489604,10489732,10489860]),new Uint32Array([2166914,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0]),new Uint32Array([2181601,2170561,2181633,2181665,2170753,2181697,2172897,2170881,2181729,2170913,2172929,2113441,2181761,2181793,2171009,2173761]),new Uint32Array([0,2105921,2097729,2106081,0,2097601,2162337,2106017,2133281,2097505,0,2097185,2097697,2135777,2097633,2097441]),new Uint32Array([6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,0,0,0,0]),new Uint32Array([2248001,2248033,2248066,2248130,2248193,2248226,2248289,2248322,2248385,2248417,2216673,2248450,2248514,2248577,2248610,2248673]),new Uint32Array([6291456,6291456,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,0,0,0]),new Uint32Array([2169729,6291456,2169761,6291456,2169793,6291456,2169825,6291456,2169857,2169889,6291456,2169921,6291456,2143329,6291456,2098305]),new Uint32Array([2162178,2163202,2163266,2135170,2136226,2161986,2137954,2159426,2159490,2163330,2159554,2163394,2159682,2139522,2136450,2159746]),new Uint32Array([2173953,2173985,0,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2174209,2174241,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,4271169,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2174273]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([6291456,6291456,0,0,0,0,0,0,0,6291456,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,2190785,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([2189793,6291456,2189825,6291456,2189857,6291456,2189889,6291456,2189921,6291456,2189953,6291456,2189985,6291456,2190017,6291456]),new Uint32Array([2105601,2112289,2108193,2112481,2112577,0,2098305,2108321,2108289,2100865,2113153,2108481,2113345,0,2098209,2111137]),new Uint32Array([2172129,6291456,2172161,6291456,2172193,6291456,2172225,6291456,2172257,6291456,2172289,6291456,2172321,6291456,2172353,6291456]),new Uint32Array([2214753,6291456,2214785,6291456,6291456,2214817,2214849,2214881,2214913,2214945,2214977,2215009,2215041,2215073,2194401,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,6291456,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([0,0,0,0,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([10610305,10610337,10575617,2221761,10610401,10610433,10502177,0,10610465,10610497,10610529,10610561,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,23068672,0,0,0,0,23068672]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2187105,2187137,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2199393,2199425,2199457,2199489,2199521,2199553,2199585,2199617,2199649,2199681,2199713,2199745,2199777,2199809,2199841,0]),new Uint32Array([2217249,2217281,2217313,2217345,2217377,2217409,2217441,2217473,2215617,2217505,2217537,2217569,2214753,2217601,2217633,2217665]),new Uint32Array([2170273,2170305,6291456,2170337,2170369,6291456,2170401,2170433,2170465,6291456,6291456,6291456,2170497,2170529,6291456,2170561]),new Uint32Array([2188673,6291456,2188705,2188737,2188769,6291456,6291456,2188801,6291456,2188833,6291456,2188865,6291456,2180929,2181505,2180897]),new Uint32Array([10489988,10490116,10490244,10490372,10490500,10490628,10490756,10490884,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2147393,2147457,2147521,2147585,2147649,2147713,2147777,2147841]),new Uint32Array([23068672,23068672,0,23068672,23068672,0,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0]),new Uint32Array([2241153,2241185,2241217,2215809,2241250,2241313,2241345,2241377,2217921,2241377,2241409,2215873,2241441,2241473,2241505,2241537]),new Uint32Array([23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2220417,2220417,2220449,2220449,2220481,2220481,2220513,2220513,2220545,2220545,2220577,2220577,2220609,2220609,2220641,2220641]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,2144002,0,6291456,6291456,0,0,6291456,6291456,6291456]),new Uint32Array([2167105,2167137,2167169,2167201,2167233,2167265,2167297,2167329,2167361,2167393,2167425,2167457,2167489,2167521,2167553,2167585]),new Uint32Array([10575521,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193]),new Uint32Array([2234146,2234210,2234274,2234338,2234402,2234466,2234530,2234594,2234658,2234722,2234786,2234850,2234914,2234978,2235042,2235106]),new Uint32Array([0,0,0,0,0,0,0,2180577,0,0,0,0,0,2180609,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,0,0,6291456,6291456]),new Uint32Array([2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481]),new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2242529,2242561,2242593,2242625,2242657,2242689,2242721,2242753,2207937,2218177,2242785,2242817,2242849,2242882,2242945,2242977]),new Uint32Array([2118049,2105345,2118241,2105441,2118433,2118529,2118625,2118721,2118817,2200257,2200289,2191809,2200321,2200353,2200385,2200417]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,6291456,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0]),new Uint32Array([2185505,6291456,2185537,6291456,2185569,6291456,2185601,6291456,2185633,6291456,2185665,6291456,2185697,6291456,2185729,6291456]),new Uint32Array([2231970,2232034,2232098,2232162,2232226,2232290,2232354,2232418,2232482,2232546,2232610,2232674,2232738,2232802,2232866,2232930]),new Uint32Array([2218625,2246402,2246466,2246530,2246594,2246657,2246689,2246689,2218657,2219681,2246721,2246753,2246785,2246818,2246881,2208481]),new Uint32Array([2197025,2197057,2197089,2197121,2197153,2197185,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([2219137,2216961,2219169,2219201,2219233,2219265,2219297,2217025,2215041,2219329,2217057,2219361,2217089,2219393,2197153,2219426]),new Uint32Array([23068672,23068672,23068672,0,0,0,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,0,0]),new Uint32Array([2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713]),new Uint32Array([2243522,2243585,2243617,2243649,2243681,2210113,2243713,2243746,2243810,2243874,2243937,2243970,2244033,2244065,2244097,2244129]),new Uint32Array([2178017,6291456,2178049,6291456,2178081,6291456,2178113,6291456,2178145,6291456,2178177,6291456,2178209,6291456,2178241,6291456]),new Uint32Array([10553858,2165314,10518722,6291456,10518818,0,10518914,2130690,10519010,2130786,10519106,2130882,10519202,2165378,10554050,2165506]),new Uint32Array([0,0,2135491,2135587,2135683,2135779,2135875,2135971,2135971,2136067,2136163,2136259,2136355,2136355,2136451,2136547]),new Uint32Array([23068672,23068672,23068672,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456]),new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456]),new Uint32Array([23068672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([2220033,2220033,2220065,2220065,2220065,2220065,2220097,2220097,2220097,2220097,2220129,2220129,2220129,2220129,2220161,2220161]),new Uint32Array([6291456,6291456,6291456,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,23068672,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([2100897,2100898,2100899,2150018,2100865,2100866,2100867,2100868,2150082,2108481,2109858,2109859,2105569,2105505,2098241,2105601]),new Uint32Array([2097217,2097505,2097505,2097505,2097505,2165570,2165570,2165634,2165634,2165698,2165698,2097858,2097858,0,0,2097152]),new Uint32Array([23068672,6291456,23068672,23068672,23068672,6291456,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,23068672,23068672]),new Uint32Array([23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0]),new Uint32Array([10503843,10503939,10504035,10504131,10504227,10504323,10504419,10504515,10504611,10504707,10504803,10504899,10504995,10491140,10491268,0]),new Uint32Array([2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953,2173985,2173761,2174017,2174049]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([2134145,2097153,2134241,2105953,2132705,2130977,2160065,2131297,2162049,2133089,2160577,2133857,2235297,2220769,2235329,2235361]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([2222401,2222433,2222465,10531394,2222497,2222529,2222561,0,2222593,2222625,2222657,2222689,2222721,2222753,2222785,0]),new Uint32Array([2184481,6291456,2184513,6291456,2184545,6291456,2184577,6291456,2184609,6291456,2184641,6291456,2184673,6291456,2184705,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,23068672,23068672]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,0,0,0,0,0,0,0,0,0]),new Uint32Array([2105570,2156034,2126947,2156098,2153666,2127043,2127139,2156162,0,2127235,2156226,2156290,2156354,2156418,2127331,2127427]),new Uint32Array([2215905,2207041,2153185,2241569,2241601,2241633,2241665,2241697,2241730,2241793,2241825,2241857,2241889,2241921,2241954,2242017]),new Uint32Array([2203777,6291456,2203809,6291456,2203841,6291456,2203873,6291456,2203905,6291456,2173121,2180993,2181249,2203937,2181313,0]),new Uint32Array([2168577,6291456,2168609,6291456,2168641,6291456,2168673,6291456,2168705,6291456,2168737,6291456,2168769,6291456,2168801,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,23068672,23068672,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,0,23068672,23068672,23068672,0,0]),new Uint32Array([2210113,2195521,2210145,2210177,2210209,2210241,2210273,2210305,2210337,2210369,2210401,2210433,2210465,2210497,2210529,2210561]),new Uint32Array([6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0]),new Uint32Array([2228706,2228770,2228834,2228898,2228962,2229026,2229090,2229154,2229218,2229282,2229346,2229410,2229474,2229538,2229602,2229666]),new Uint32Array([23068672,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,18874368,18874368,18874368,0,0]),new Uint32Array([2133089,2133281,2133281,2133281,2133281,2160577,2160577,2160577,2160577,2097441,2097441,2097441,2097441,2133857,2133857,2133857]),new Uint32Array([6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2173825,2153473,2173857,2173889,2173921,2173953,2173985,2174017,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233089]),new Uint32Array([2178529,6291456,2178561,6291456,2178593,6291456,2178625,6291456,2178657,6291456,2178689,6291456,2178721,6291456,2178753,6291456]),new Uint32Array([2221025,2221025,2221057,2221057,2159329,2159329,2159329,2159329,2097217,2097217,2158914,2158914,2158978,2158978,2159042,2159042]),new Uint32Array([2208161,2208193,2208225,2208257,2194433,2208289,2208321,2208353,2208385,2208417,2208449,2208481,2208513,2208545,2208577,2208609]),new Uint32Array([2169217,6291456,2169249,6291456,2169281,6291456,2169313,6291456,2169345,6291456,2169377,6291456,2169409,6291456,2169441,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456]),new Uint32Array([2133187,2133283,2133283,2133379,2133475,2133571,2133667,2133667,2133763,2133859,2133955,2134051,2134147,2134147,2134243,2134339]),new Uint32Array([2197697,2114113,2114209,2197729,2197761,2114305,2197793,2114401,2114497,2197825,2114593,2114689,2114785,2114881,2114977,0]),new Uint32Array([2193089,2193121,2193153,2193185,2117665,2117569,2193217,2193249,2193281,2193313,2193345,2193377,2193409,2193441,2193473,2193505]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0]),new Uint32Array([6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2184225,6291456,2184257,6291456,2184289,6291456,2184321,6291456,2184353,6291456,2184385,6291456,2184417,6291456,2184449,6291456]),new Uint32Array([2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2100833,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([2098657,2098049,2200737,2123489,2123681,2200769,2098625,2100321,2098145,2100449,2098017,2098753,2200801,2200833,2200865,0]),new Uint32Array([23068672,23068672,23068672,0,0,0,0,0,0,0,0,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0]),new Uint32Array([2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,0,2098241,2108353,2108417,2105825,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2181153,2105505,2181185,2167617,2180993]),new Uint32Array([2160002,2160066,2160130,2160194,2160258,2132066,2131010,2131106,2106018,2131618,2160322,2131298,2132034,2131938,2137410,2132226]),new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,6291456]),new Uint32Array([2183617,6291456,2183649,6291456,2183681,6291456,2183713,6291456,2183745,6291456,2183777,6291456,2183809,6291456,2183841,6291456]),new Uint32Array([0,6291456,6291456,0,6291456,0,0,6291456,6291456,0,6291456,0,0,6291456,0,0]),new Uint32Array([2250977,2251009,2251041,2251073,2195009,2251106,2251169,2251201,2251233,2251265,2251297,2251330,2251394,2251457,2251489,2251521]),new Uint32Array([2205729,2205761,2205793,2205825,2205857,2205889,2205921,2205953,2205985,2206017,2206049,2206081,2206113,2206145,2206177,2206209]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2143170,2168993,6291456,2169025,6291456,2169057,6291456,2169089,6291456,2143234,2169121,6291456,2169153,6291456,2169185,6291456]),new Uint32Array([23068672,23068672,2190689,6291456,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2248706,2248769,2248801,2248833,2248865,2248897,2248929,2248962,2249026,2249090,2249154,2240705,2249217,2249249,2249281,2249313]),new Uint32Array([10485857,6291456,6291456,6291456,6291456,6291456,6291456,6291456,10495394,6291456,2098209,6291456,6291456,2097152,6291456,10531394]),new Uint32Array([0,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,0]),new Uint32Array([14680064,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2173985,2173953,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889]),new Uint32Array([6291456,2186977,6291456,6291456,6291456,6291456,6291456,10537858,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2209601,2209633,2209665,2209697,2209729,2209761,2209793,2209825,2209857,2209889,2209921,2209953,2209985,2210017,2210049,2210081]),new Uint32Array([10501539,10501635,10501731,10501827,10501923,10502019,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905]),new Uint32Array([2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953,2173985,2174017,2174017,2174049]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,0,0]),new Uint32Array([6291456,6291456,23068672,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([2194561,2194593,2194625,2119777,2119873,2194657,2194689,2194721,2194753,2194785,2194817,2194849,2194881,2194913,2194945,2194977]),new Uint32Array([2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569]),new Uint32Array([2222818,2222882,2222946,2223010,2223074,2223138,2223202,2223266,2223330,2223394,2223458,2223522,2223586,2223650,2223714,2223778]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672]),new Uint32Array([0,2179553,2179585,2179617,2179649,2144001,2179681,2179713,2179745,2179777,2179809,2156705,2179841,2156833,2179873,2179905]),new Uint32Array([6291456,23068672,6291456,2145602,23068672,23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,6291456,0,0]),new Uint32Array([2196513,2196545,2196577,2196609,2196641,2196673,2196705,2196737,2196769,2196801,2196833,2196865,2196897,2196929,2196961,2196993]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2177281,6291456,2177313,6291456,2177345,6291456,2177377,6291456,2177409,6291456,2177441,6291456,2177473,6291456,2177505,6291456]),new Uint32Array([2187137,2221473,2221505,2221537,2221569,6291456,6291456,10610209,10610241,10537986,10537986,10537986,10537986,10609857,10609857,10609857]),new Uint32Array([2243009,2243041,2216033,2243074,2243137,2243169,2243201,2219617,2243233,2243265,2243297,2243329,2243362,2243425,2243457,2243489]),new Uint32Array([10485857,10485857,10485857,10485857,10485857,10485857,10485857,10485857,10485857,10485857,10485857,2097152,4194304,4194304,0,0]),new Uint32Array([2143042,6291456,2143106,2143106,2168833,6291456,2168865,6291456,6291456,2168897,6291456,2168929,6291456,2168961,6291456,2143170]),new Uint32Array([6291456,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2204193,2204225,2204257,2204289,2204321,2204353,2204385,2204417,2204449,2204481,2204513,2204545,2204577,2204609,2204641,2204673]),new Uint32Array([2202753,6291456,2202785,6291456,2202817,6291456,2202849,6291456,2202881,6291456,2202913,6291456,2202945,6291456,2202977,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321]),new Uint32Array([2147394,2147458,2147522,2147586,2147650,2147714,2147778,2147842,2147394,2147458,2147522,2147586,2147650,2147714,2147778,2147842]),new Uint32Array([2253313,2253346,2253409,2253441,2253473,2253505,2253537,2253569,2253601,2253634,2219393,2253697,2253729,2253761,2253793,2253825]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,6291456,6291456]),new Uint32Array([2162562,2162626,2131362,2162690,2159938,2160002,2162754,2162818,2160130,2162882,2160194,2160258,2160834,2160898,2161026,2161090]),new Uint32Array([2175361,2175393,2175425,2175457,2175489,2175521,2175553,2175585,2175617,2175649,2175681,2175713,2175745,2175777,2175809,2175841]),new Uint32Array([2253858,2253921,2253954,2254018,2254082,2196737,2254145,2196865,2254177,2254209,2254241,2254273,2197025,2254306,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2202113,2204129,2188705,2204161]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,6291456,6291456,6291456,6291456,0,0]),new Uint32Array([2173985,2174017,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233089,2173697,2173761,2173793,2174113,2173985,2173953]),new Uint32Array([2101569,2101697,2101825,2101953,2102081,2102209,2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209]),new Uint32Array([2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,0,2108417,0,2111713,2100897,2111905]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0]),new Uint32Array([2175425,2175489,2175809,2175905,2175937,2175937,2176193,2176417,2180865,0,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,2143298,2143298,2143298,2143362,2143362,2143362,2143426,2143426,2143426,2171105,6291456,2171137]),new Uint32Array([2120162,2120258,2151618,2151682,2151746,2151810,2151874,2151938,2152002,2120035,2120131,2120227,2152066,2120323,2152130,2120419]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2195361,2142433,2236065,2236097,2236129,2236161,2118241,2117473,2236193,2236225,2236257,2236289,0,0,0,0]),new Uint32Array([2189281,6291456,2189313,6291456,2189345,6291456,2189377,6291456,2189409,6291456,2189441,6291456,2189473,6291456,2189505,6291456]),new Uint32Array([6291456,6291456,2145922,6291456,6291456,6291456,6291456,2145986,6291456,6291456,6291456,6291456,2146050,6291456,6291456,6291456]),new Uint32Array([2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,10502113,10562017,10610401,10502177,10610433,10538049]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,2186401,0,2186433,0,2186465,0,2186497]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,23068672,23068672,23068672]),new Uint32Array([0,0,2198241,2198273,2198305,2198337,2198369,2198401,0,0,2198433,2198465,2198497,0,0,0]),new Uint32Array([6291456,0,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,0,6291456,0,23068672,23068672,23068672,23068672,23068672,23068672,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,0,0,23068672,6291456,23068672,23068672]),new Uint32Array([0,2105921,2097729,0,2097377,0,0,2106017,2133281,2097505,2105889,0,2097697,2135777,2097633,2097441]),new Uint32Array([2197889,2197921,2197953,2197985,2198017,2198049,2198081,2198113,2198145,2198177,2198209,2198241,2198273,2198305,2198337,2198369]),new Uint32Array([2132514,2132610,2160386,2133090,2133186,2160450,2160514,2133282,2160578,2133570,2106178,2160642,2133858,2160706,2160770,2134146]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,0,0,0,0,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,23068672,23068672,6291456,23068672,23068672,6291456,23068672,0,0,0,0,0,0,0,0]),new Uint32Array([2184737,6291456,2184769,6291456,2184801,6291456,2184833,6291456,2184865,6291456,2184897,6291456,2184929,6291456,2184961,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,6291456,6291456,6291456,6291456,0,6291456]),new Uint32Array([6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,6291456,23068672,23068672,23068672,6291456,23068672,23068672,23068672,23068672,23068672,0,0]),new Uint32Array([6291456,6291456,6291456,2186753,6291456,6291456,6291456,6291456,2186785,2186817,2186849,2173569,2186881,10496355,10495395,10575521]),new Uint32Array([0,0,2097729,0,0,0,0,2106017,0,2097505,0,2097185,0,2135777,2097633,2097441]),new Uint32Array([2189537,6291456,2189569,6291456,2189601,6291456,2189633,6291456,2189665,6291456,2189697,6291456,2189729,6291456,2189761,6291456]),new Uint32Array([2202497,6291456,2202529,6291456,2202561,6291456,2202593,6291456,2202625,6291456,2202657,6291456,2202689,6291456,2202721,6291456]),new Uint32Array([2245217,2218369,2245249,2245282,2245345,2245377,2245410,2245474,2245537,2245569,2245601,2245633,2245665,2245665,2245697,2245729]),new Uint32Array([6291456,0,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,0,0,0,0,0,0,23068672,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,6291456,23068672,6291456,23068672,6291456,6291456,6291456,6291456,23068672,23068672]),new Uint32Array([0,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0]),new Uint32Array([2097281,2105921,2097729,2106081,2097377,2097601,2162337,2106017,2133281,2097505,0,2097185,2097697,2135777,2097633,2097441]),new Uint32Array([2176641,6291456,2176673,6291456,2176705,6291456,2176737,6291456,2176769,6291456,2176801,6291456,2176833,6291456,2176865,6291456]),new Uint32Array([2174145,2174177,2149057,2233089,2173697,2173761,2173793,2174113,2173985,2173953,2174369,2174369,0,0,2100833,2100737]),new Uint32Array([2116513,2190817,2190849,2190881,2190913,2190945,2116609,2190977,2191009,2191041,2191073,2117185,2191105,2191137,2191169,2191201]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,6291456,6291456,6291456]),new Uint32Array([0,0,0,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456]),new Uint32Array([2167617,2167649,2167681,2167713,2167745,2167777,2167809,6291456,2167841,2167873,2167905,2167937,2167969,2168001,2168033,4240130]),new Uint32Array([2165122,2163970,2164034,2164098,2164162,2164226,2164290,2164354,2164418,2164482,2164546,2133122,2134562,2132162,2132834,2136866]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,2186209,2186241,2186273,2186305,2186337,2186369,0,0]),new Uint32Array([2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,14680064,14680064,14680064,14680064,14680064]),new Uint32Array([0,0,23068672,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456]),new Uint32Array([0,10537921,10610689,10610273,10610497,10610529,10610305,10610721,10489601,10489697,10610337,10575617,10554529,2221761,2197217,10496577]),new Uint32Array([2105473,2105569,2105601,2112289,0,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441]),new Uint32Array([2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481]),new Uint32Array([2125346,2153410,2153474,2127394,2153538,2153602,2153666,2153730,2105507,2105476,2153794,2153858,2153922,2153986,2154050,2105794]),new Uint32Array([2200449,2119681,2200481,2153313,2199873,2199905,2199937,2200513,2200545,2200577,2200609,2119105,2119201,2119297,2119393,2119489]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2175777,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2222273,2197217,2221473,2221505,2221089,2222305,2200865,2099681,2104481,2222337,2099905,2120737,2222369,2103713,2100225,2098785]),new Uint32Array([2201377,6291456,2201409,6291456,2201441,6291456,2201473,6291456,2201505,6291456,2201537,6291456,2201569,6291456,6291456,23068672]),new Uint32Array([2174081,2174113,2174145,2174177,2149057,2233057,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793]),new Uint32Array([2200897,6291456,2200929,6291456,2200961,6291456,2200993,6291456,2201025,6291456,2180865,6291456,2201057,6291456,2201089,6291456]),new Uint32Array([0,0,0,0,0,23068672,23068672,0,6291456,6291456,6291456,0,0,0,0,0]),new Uint32Array([2161154,2161410,2138658,2161474,2161538,2097666,2097186,2097474,2162946,2132450,2163010,2163074,2136162,2163138,2161666,2161730]),new Uint32Array([2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953]),new Uint32Array([0,0,0,0,0,0,23068672,23068672,0,0,0,0,2145410,2145474,0,6291456]),new Uint32Array([2244161,2216065,2212769,2244193,2244225,2244257,2244290,2244353,2244385,2244417,2244449,2218273,2244481,2244514,2244577,2244609]),new Uint32Array([2125730,2125699,2125795,2125891,2125987,2154114,2154178,2154242,2154306,2154370,2154434,2154498,2126082,2126178,2126274,2126083]),new Uint32Array([2237665,2237697,2237697,2237697,2237730,2237793,2237825,2237857,2237890,2237953,2237985,2238017,2238049,2238081,2238113,2238145]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2150146,6291456,6291456,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,0,23068672,23068672,0,0,23068672,23068672,23068672,0,0]),new Uint32Array([2214369,2238593,2238625,2238657,2238689,2238721,2238753,2238785,2238817,2238850,2238913,2238945,2238977,2235457,2239009,2239041]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0]),new Uint32Array([2252066,2252130,2252193,2252225,2252257,2252290,2252353,2252385,2252417,2252449,2252481,2252513,2252545,2252578,2252641,2252673]),new Uint32Array([2197697,2114113,2114209,2197729,2197761,2114305,2197793,2114401,2114497,2197825,2114593,2114689,2114785,2114881,2114977,2197857]),new Uint32Array([2224866,2224930,2224994,2225058,2225122,2225186,2225250,2225314,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2219490,2219554,2219617,2219649,2219681,2219714,2219778,2219842,2219905,2219937,0,0,0,0,0,0]),new Uint32Array([6291456,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456]),new Uint32Array([2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289]),new Uint32Array([2174081,2174113,2174145,2174177,2149057,2233089,2173697,2173761,2173793,2174113,2173985,2173953,2148481,2173601,2173633,2173665]),new Uint32Array([2220161,2220161,2220193,2220193,2220193,2220193,2220225,2220225,2220225,2220225,2220257,2220257,2220257,2220257,2220289,2220289]),new Uint32Array([2192673,2192705,2192737,2192769,2192801,2192833,2192865,2118049,2192897,2117473,2117761,2192929,2192961,2192993,2193025,2193057]),new Uint32Array([2179297,6291456,2179329,6291456,2179361,6291456,2179393,6291456,2179425,6291456,2179457,6291456,2179489,6291456,2179521,6291456]),new Uint32Array([6291456,6291456,6291456,23068672,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0]),new Uint32Array([2235745,2235777,2193633,2235809,2235841,2235873,2235905,2235937,2235969,2116513,2116705,2236001,2200513,2199905,2200545,2236033]),new Uint32Array([2113153,2108481,2113345,2113441,2232993,2233025,0,0,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761]),new Uint32Array([2170593,6291456,2170625,6291456,2170657,6291456,2170689,2170721,6291456,2170753,6291456,6291456,2170785,6291456,2170817,2170849]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2166786,2166850,0,0,0,0]),new Uint32Array([23068672,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]),new Uint32Array([2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,10575617,2187041,10502177,10489601,10489697,0]),new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2134562,2132162,2132834,2136866,2136482,2164610,2164674,2164738,2164802,2132802,2132706,2164866,2132898,2164930,2164994,2165058]),new Uint32Array([6291456,6291456,2098337,2101441,10531458,2153473,6291456,6291456,10531522,2100737,2108193,6291456,2106499,2106595,2106691,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,0]),new Uint32Array([2233122,2233186,2233250,2233314,2233378,2233442,2233506,2233570,2233634,2233698,2233762,2233826,2233890,2233954,2234018,2234082]),new Uint32Array([23068672,6291456,23068672,23068672,23068672,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([2205217,2205249,2205281,2205313,2205345,2205377,2205409,2205441,2205473,2205505,2205537,2205569,2205601,2205633,2205665,2205697]),new Uint32Array([6291456,0,6291456,0,0,0,6291456,6291456,6291456,6291456,0,0,23068672,6291456,23068672,23068672]),new Uint32Array([2173601,2173761,2174081,2173569,2174241,2174113,2173953,6291456,2174305,6291456,2174337,6291456,2174369,6291456,2174401,6291456]),new Uint32Array([6291456,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]),new Uint32Array([2152450,2152514,2099653,2104452,2099813,2122243,2099973,2152578,2122339,2122435,2122531,2122627,2122723,2104580,2122819,2152642]),new Uint32Array([2236385,2236417,2236449,2236482,2236545,2215425,2236577,2236609,2236641,2236673,2215457,2236705,2236737,2236770,2215489,2236833]),new Uint32Array([2163394,2159746,2163458,2131362,2163522,2160130,2163778,2132226,2163842,2132898,2163906,2161410,2138658,2097666,2136162,2163650]),new Uint32Array([2218721,2246913,2246946,2216385,2247010,2247074,2215009,2247137,2247169,2216481,2247201,2247233,2247266,2247330,2247330,0]),new Uint32Array([2129730,2129762,2129858,2129731,2129827,2156482,2156482,0,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,0,0,0,0,6291456,0,0]),new Uint32Array([2203969,2204001,2181377,2204033,2204065,6291456,2204097,6291456,0,0,0,0,0,0,0,0]),new Uint32Array([2169473,6291456,2169505,6291456,2169537,6291456,2169569,6291456,2169601,6291456,2169633,6291456,2169665,6291456,2169697,6291456]),new Uint32Array([2141542,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2220801,2220801,2220801,2220801,2220833,2220833,2220865,2220865,2220865,2220865,2220897,2220897,2220897,2220897,2139873,2139873]),new Uint32Array([0,0,0,0,0,23068672,23068672,0,0,0,0,0,0,0,6291456,0]),new Uint32Array([2214849,2218433,2218465,2218497,2218529,2218561,2214881,2218593,2218625,2218657,2218689,2218721,2218753,2216545,2218785,2218817]),new Uint32Array([23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0,6291456]),new Uint32Array([2136482,2164610,2164674,2164738,2164802,2132802,2132706,2164866,2132898,2164930,2164994,2165058,2165122,2132802,2132706,2164866]),new Uint32Array([2207649,2207681,2207713,2207745,2207777,2207809,2207841,2207873,2207905,2207937,2207969,2208001,2208033,2208065,2208097,2208129]),new Uint32Array([2123683,2105092,2152706,2123779,2105220,2152770,2100453,2098755,2123906,2124002,2124098,2124194,2124290,2124386,2124482,2124578]),new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,6291456,0,0,0,0,0,0,0,10485857]),new Uint32Array([6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([10508163,10508259,10508355,10508451,2200129,2200161,2192737,2200193,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2203553,6291456,2203585,6291456,6291456,6291456,2203617,6291456,2203649,6291456,2203681,6291456,2203713,6291456,2203745,6291456]),new Uint32Array([18884449,18884065,23068672,18884417,18884034,18921185,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,18874368]),new Uint32Array([2247393,2247426,2247489,2247521,2247553,2247586,2247649,2247681,2247713,2247745,2247777,2247810,2247873,2247905,2247937,2247969]),new Uint32Array([6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,23068672]),new Uint32Array([2134145,2097153,2134241,0,2132705,2130977,2160065,2131297,0,2133089,2160577,2133857,2235297,0,2235329,0]),new Uint32Array([2182593,6291456,2182625,6291456,2182657,6291456,2182689,6291456,2182721,6291456,2182753,6291456,2182785,6291456,2182817,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2102402,2102403,6291456,2110050]),new Uint32Array([2149890,2108323,2149954,6291456,2113441,6291456,2149057,6291456,2113441,6291456,2105473,2167265,2111137,2105505,6291456,2108353]),new Uint32Array([2219105,2219137,2195233,2251554,2251617,2251649,2251681,2251713,2251746,2251810,2251873,2251905,2251937,2251970,2252033,2219169]),new Uint32Array([2203009,6291456,2203041,6291456,2203073,6291456,2203105,6291456,2203137,6291456,2203169,6291456,2203201,6291456,2203233,6291456]),new Uint32Array([2128195,2128291,2128387,2128483,2128579,2128675,2128771,2128867,2128963,2129059,2129155,2129251,2129347,2129443,2129539,2129635]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2140964,2141156,2140966,2141158,2141350]),new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([2225378,2225442,2225506,2225570,2225634,2225698,2225762,2225826,2225890,2225954,2226018,2226082,2226146,2226210,2226274,2226338]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417]),new Uint32Array([2108353,2108417,0,2105601,2108193,2157121,2157313,2157377,2157441,2100897,6291456,2108419,2173953,2173633,2173633,2173953]),new Uint32Array([2111713,2173121,2111905,2098177,2173153,2173185,2173217,2113153,2113345,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,2190753]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,2197249,6291456,2117377,2197281,2197313,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,0,0,0,0,0,0,23068672,0,0,0,0,0,6291456,6291456,6291456]),new Uint32Array([2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953]),new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0]),new Uint32Array([0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,23068672,23068672,23068672]),new Uint32Array([2173281,6291456,2173313,6291456,2173345,6291456,2173377,6291456,0,0,10532546,6291456,6291456,6291456,10562017,2173441]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,0,0]),new Uint32Array([23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2159426,2159490,2159554,2159362,2159618,2159682,2139522,2136450,2159746,2159810,2159874,2130978,2131074,2131266,2131362,2159938]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2203233,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2203265,6291456,2203297,6291456,2203329,2203361,6291456]),new Uint32Array([6291456,6291456,2148418,2148482,2148546,0,6291456,2148610,2186529,2186561,2148417,2148545,2148482,10495778,2143969,10495778]),new Uint32Array([2134146,2139426,2160962,2134242,2161218,2161282,2161346,2161410,2138658,2134722,2134434,2134818,2097666,2097346,2097698,2105986]),new Uint32Array([2198881,2198913,2198945,2198977,2199009,2199041,2199073,2199105,2199137,2199169,2199201,2199233,2199265,2199297,2199329,2199361]),new Uint32Array([0,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456]),new Uint32Array([10610561,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193]),new Uint32Array([2183873,6291456,2183905,6291456,2183937,6291456,2183969,6291456,2184001,6291456,2184033,6291456,2184065,6291456,2184097,6291456]),new Uint32Array([2244642,2244706,2244769,2244801,2218305,2244833,2244865,2244897,2244929,2244961,2244993,2245026,2245089,2245122,2245185,0]),new Uint32Array([6291456,6291456,2116513,2116609,2116705,2116801,2199873,2199905,2199937,2199969,2190913,2200001,2200033,2200065,2200097,2191009]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,2180673,2180705,2180737,2180769,2180801,2180833,0,0]),new Uint32Array([2098081,2099521,2099105,2120705,2098369,2120801,2103361,2097985,2098433,2121377,2121473,2099169,2099873,2098401,2099393,2152609]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2150402]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,2145666,2145730,6291456,6291456]),new Uint32Array([2173921,2173953,2173985,2173761,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233057,2148481,2173601,2173633,2173665]),new Uint32Array([2187073,6291456,6291456,6291456,6291456,2098241,2098241,2108353,2100897,2111905,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2102404,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,2100612,6291456,6291456,6291456,6291456,6291456,6291456,6291456,10485857]),new Uint32Array([2149057,2233057,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889]),new Uint32Array([2217697,2217729,2217761,2217793,2217825,2217857,2217889,2217921,2217953,2215873,2217985,2215905,2218017,2218049,2218081,2218113]),new Uint32Array([2211233,2218849,2216673,2218881,2218913,2218945,2218977,2219009,2216833,2219041,2215137,2219073,2216865,2209505,2219105,2216897]),new Uint32Array([2240097,2240129,2240161,2240193,2240225,2240257,2240289,2240321,2240353,2240386,2240449,2240481,2240513,2240545,2207905,2240578]),new Uint32Array([6291456,6291456,2202273,6291456,2202305,6291456,2202337,6291456,2202369,6291456,2202401,6291456,2202433,6291456,2202465,6291456]),new Uint32Array([0,23068672,23068672,18923394,23068672,18923458,18923522,18884099,18923586,18884195,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([2201121,6291456,2201153,6291456,2201185,6291456,2201217,6291456,2201249,6291456,2201281,6291456,2201313,6291456,2201345,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456]),new Uint32Array([2211041,2211073,2211105,2211137,2211169,2211201,2211233,2211265,2211297,2211329,2211361,2211393,2211425,2211457,2211489,2211521]),new Uint32Array([2181825,6291456,2181857,6291456,2181889,6291456,2181921,6291456,2181953,6291456,2181985,6291456,2182017,6291456,2182049,6291456]),new Uint32Array([2162337,2097633,2097633,2097633,2097633,2132705,2132705,2132705,2132705,2097153,2097153,2097153,2097153,2133089,2133089,2133089]),new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,2148545,6291456,2173473,6291456,2148865,6291456,2173505,6291456,2173537,6291456,2173569,6291456,2149121,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,0,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0]),new Uint32Array([2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953,2173985,2174017,2174017,2174049,2174081,2174113]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([2207137,2207169,2207201,2207233,2207265,2207297,2207329,2207361,2207393,2207425,2207457,2207489,2207521,2207553,2207585,2207617]),new Uint32Array([6291456,6291456,23068672,23068672,23068672,6291456,6291456,0,23068672,23068672,0,0,0,0,0,0]),new Uint32Array([2198401,2198433,2198465,2198497,0,2198529,2198561,2198593,2198625,2198657,2198689,2198721,2198753,2198785,2198817,2198849]),new Uint32Array([2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177]),new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,0,0]),new Uint32Array([2216385,2118721,2216417,2216449,2216481,2216513,2216545,2211233,2216577,2216609,2216641,2216673,2216705,2216737,2216737,2216769]),new Uint32Array([2216801,2216833,2216865,2216897,2216929,2216961,2216993,2215169,2217025,2217057,2217089,2217121,2217154,2217217,0,0]),new Uint32Array([2210593,2191809,2210625,2210657,2210689,2210721,2210753,2210785,2210817,2210849,2191297,2210881,2210913,2210945,2210977,2211009]),new Uint32Array([0,0,2105825,0,0,2111905,2105473,0,0,2112289,2108193,2112481,2112577,0,2098305,2108321]),new Uint32Array([0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([0,2097153,2134241,0,2132705,0,0,2131297,0,2133089,0,2133857,0,2220769,0,2235361]),new Uint32Array([14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,6291456,6291456,14680064]),new Uint32Array([23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0]),new Uint32Array([2171873,6291456,2171905,6291456,2171937,6291456,2171969,6291456,2172001,6291456,2172033,6291456,2172065,6291456,2172097,6291456]),new Uint32Array([2220929,2220929,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2133857,2134145,2134145,2134145,2134145,2134241,2134241,2134241,2134241,2105889,2105889,2105889,2105889,2097185,2097185,2097185]),new Uint32Array([2173697,2173761,2173793,2174113,2173985,2173953,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793]),new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,0,10499619,10499715,10499811,10499907]),new Uint32Array([0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23068672]),new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,0,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,0,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,23068672,23068672]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,2144322,2144386,2144450,2144514,2144578,2144642,2144706,2144770]),new Uint32Array([23068672,23068672,23068672,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456]),new Uint32Array([2113153,2108481,2113345,2113441,2098209,2111137,0,2098241,2108353,2108417,2105825,0,0,2111905,2105473,2105569]),new Uint32Array([2236321,2236353,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([2152194,2121283,2103684,2103812,2097986,2098533,2097990,2098693,2098595,2098853,2099013,2103940,2121379,2121475,2121571,2104068]),new Uint32Array([2206241,2206273,2206305,2206337,2206369,2206401,2206433,2206465,2206497,2206529,2206561,2206593,2206625,2206657,2206689,2206721]),new Uint32Array([6291456,6291456,6291456,6291456,16777216,16777216,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,23068672,23068672,10538818,10538882,6291456,6291456,2150338]),new Uint32Array([6291456,6291456,6291456,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2214369,2214401,2214433,2214465,2214497,2214529,2214561,2214593,2194977,2214625,2195073,2214657,2214689,2214721,6291456,6291456]),new Uint32Array([2097152,2097152,2097152,2097152,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([2182081,6291456,2182113,6291456,2182145,6291456,2182177,6291456,2182209,6291456,2182241,6291456,2182273,6291456,2182305,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2146881,2146945,2147009,2147073,2147137,2147201,2147265,2147329]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,23068672,23068672]),new Uint32Array([0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2122915,2123011,2123107,2104708,2123203,2123299,2123395,2100133,2104836,2100290,2100293,2104962,2104964,2098052,2123491,2123587]),new Uint32Array([23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456]),new Uint32Array([6291456,2171169,6291456,2171201,6291456,2171233,6291456,2171265,6291456,2171297,6291456,2171329,6291456,6291456,2171361,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([0,0,2148994,2149058,2149122,0,6291456,2149186,2186945,2173537,2148993,2149121,2149058,10531458,10496066,0]),new Uint32Array([2195009,2195041,2195073,2195105,2195137,2195169,2195201,2195233,2195265,2195297,2195329,2195361,2195393,2195425,2195457,2195489]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,0,0,6291456,6291456]),new Uint32Array([2182849,6291456,2182881,6291456,2182913,6291456,2182945,6291456,2182977,6291456,2183009,6291456,2183041,6291456,2183073,6291456]),new Uint32Array([2211553,2210081,2211585,2211617,2211649,2211681,2211713,2211745,2211777,2211809,2209569,2211841,2211873,2211905,2211937,2211969]),new Uint32Array([2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2166594,2127298,2166658,2142978,2141827,2166722]),new Uint32Array([2173985,2173761,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233057,2148481,2173601,2173633,2173665,2173697,2173729]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,2185761,2185793,2185825,2185857,2185889,2185921,0,0]),new Uint32Array([6291456,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,6291456]),new Uint32Array([0,0,0,2220961,2220961,2220961,2220961,2144193,2144193,2159201,2159201,2159265,2159265,2144194,2220993,2220993]),new Uint32Array([2192641,2235393,2235425,2152257,2116609,2235457,2235489,2200065,2235521,2235553,2235585,2212449,2235617,2235649,2235681,2235713]),new Uint32Array([2194049,2194081,2194113,2194145,2194177,2194209,2194241,2194273,2194305,2194337,2194369,2194401,2194433,2194465,2194497,2194529]),new Uint32Array([2196673,2208641,2208673,2208705,2208737,2208769,2208801,2208833,2208865,2208897,2208929,2208961,2208993,2209025,2209057,2209089]),new Uint32Array([2191681,2191713,2191745,2191777,2153281,2191809,2191841,2191873,2191905,2191937,2191969,2192001,2192033,2192065,2192097,2192129]),new Uint32Array([2230946,2231010,2231074,2231138,2231202,2231266,2231330,2231394,2231458,2231522,2231586,2231650,2231714,2231778,2231842,2231906]),new Uint32Array([14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2185953,2185985,2186017,2186049,2186081,2186113,2186145,2186177]),new Uint32Array([2139811,2139907,2097284,2105860,2105988,2106116,2106244,2097444,2097604,2097155,10485778,10486344,2106372,6291456,0,0]),new Uint32Array([2110051,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2172385,6291456,2172417,6291456,2172449,6291456,2172481,6291456,2172513,6291456,2172545,6291456,2172577,6291456,2172609,6291456]),new Uint32Array([0,0,23068672,23068672,6291456,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([2249345,2249377,2249409,2249441,2249473,2249505,2249537,2249570,2210209,2249633,2249665,2249697,2249729,2249761,2249793,2216769]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,6291456,6291456,6291456,6291456]),new Uint32Array([2187169,2187201,2187233,2187265,2187297,2187329,2187361,2187393,2187425,2187457,2187489,2187521,2187553,2187585,2187617,2187649]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([0,0,0,6291456,6291456,0,0,0,6291456,6291456,6291456,0,0,0,6291456,6291456]),new Uint32Array([2182337,6291456,2182369,6291456,2182401,6291456,2182433,6291456,2182465,6291456,2182497,6291456,2182529,6291456,2182561,6291456]),new Uint32Array([2138179,2138275,2138371,2138467,2134243,2134435,2138563,2138659,2138755,2138851,2138947,2139043,2138947,2138755,2139139,2139235]),new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0]),new Uint32Array([0,0,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2250498,2250562,2250625,2250657,2208321,2250689,2250721,2250753,2250785,2250817,2250849,2218945,2250881,2250913,2250945,0]),new Uint32Array([2170369,2105569,2098305,2108481,2173249,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456]),new Uint32Array([2100897,2111905,2105473,2105569,2105601,0,2108193,0,0,0,2098305,2108321,2108289,2100865,2113153,2108481]),new Uint32Array([2100897,2100897,2105569,2105569,6291456,2112289,2149826,6291456,6291456,2112481,2112577,2098177,2098177,2098177,6291456,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,6291456,6291456,6291456]),new Uint32Array([6291456,2169953,2169985,6291456,2170017,6291456,2170049,2170081,6291456,2170113,2170145,2170177,6291456,6291456,2170209,2170241]),new Uint32Array([6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2220641,2220641,2220673,2220673,2220673,2220673,2220705,2220705,2220705,2220705,2220737,2220737,2220737,2220737,2220769,2220769]),new Uint32Array([2127650,2127746,2127842,2127938,2128034,2128130,2128226,2128322,2128418,2127523,2127619,2127715,2127811,2127907,2128003,2128099]),new Uint32Array([2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953,2173985,2173761,2174017,2174049,2174081,2174113,2174145,2174177]),new Uint32Array([0,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([2204705,2204737,2204769,2204801,2204833,2204865,2204897,2204929,2204961,2204993,2205025,2205057,2205089,2205121,2205153,2205185]),new Uint32Array([2176385,6291456,2176417,6291456,2176449,6291456,2176481,6291456,2176513,6291456,2176545,6291456,2176577,6291456,2176609,6291456]),new Uint32Array([2195521,2195553,2195585,2195617,2195649,2195681,2117857,2195713,2195745,2195777,2195809,2195841,2195873,2195905,2195937,2195969]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456]),new Uint32Array([2173921,2173953,2173985,2174017,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233089,2173697,2173761,2173793,2174113]),new Uint32Array([2131586,2132450,2135970,2135778,2161602,2136162,2163650,2161794,2135586,2163714,2137186,2131810,2160290,2135170,2097506,2159554]),new Uint32Array([2134145,2097153,2134241,2105953,2132705,2130977,2160065,2131297,2162049,2133089,2160577,2133857,0,0,0,0]),new Uint32Array([2116513,2116609,2116705,2116801,2116897,2116993,2117089,2117185,2117281,2117377,2117473,2117569,2117665,2117761,2117857,2117953]),new Uint32Array([2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,2100802,2101154,2101282,2101410,2101538,2101666,2101794]),new Uint32Array([2100289,2098657,2098049,2200737,2123489,2123681,2200769,2098625,2100321,2098145,2100449,2098017,2098753,2098977,2150241,2150305]),new Uint32Array([6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,2109955,6291456,6291456,0,0,0,0]),new Uint32Array([18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,6291456,0,0]),new Uint32Array([2130979,2131075,2131075,2131171,2131267,2131363,2131459,2131555,2131651,2131651,2131747,2131843,2131939,2132035,2132131,2132227]),new Uint32Array([0,2177793,6291456,2177825,6291456,2177857,6291456,2177889,6291456,2177921,6291456,2177953,6291456,2177985,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]),new Uint32Array([6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([2113345,0,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289]),new Uint32Array([2136643,2136739,2136835,2136931,2137027,2137123,2137219,2137315,2137411,2137507,2137603,2137699,2137795,2137891,2137987,2138083]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0]),new Uint32Array([2174433,6291456,2174465,6291456,2174497,6291456,2174529,6291456,2174561,6291456,2174593,6291456,2174625,6291456,2174657,6291456]),new Uint32Array([0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441]),new Uint32Array([10496547,10496643,2105505,2149698,6291456,10496739,10496835,2170273,6291456,2149762,2105825,2111713,2111713,2111713,2111713,2168673]),new Uint32Array([6291456,2143490,2143490,2143490,2171649,6291456,2171681,2171713,2171745,6291456,2171777,6291456,2171809,6291456,2171841,6291456]),new Uint32Array([2159106,2159106,2159170,2159170,2159234,2159234,2159298,2159298,2159298,2159362,2159362,2159362,2106401,2106401,2106401,2106401]),new Uint32Array([2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137]),new Uint32Array([2108417,2181217,2181249,2181281,2170433,2170401,2181313,2181345,2181377,2181409,2181441,2181473,2181505,2181537,2170529,2181569]),new Uint32Array([2218433,2245761,2245793,2245825,2245857,2245890,2245953,2245986,2209665,2246050,2246113,2246146,2246210,2246274,2246337,2246369]),new Uint32Array([2230754,2230818,2230882,0,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([6291456,0,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2184129,6291456,2184161,6291456,2184193,6291456,6291456,6291456,6291456,6291456,2146818,2183361,6291456,6291456,2142978,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2135170,2097506,2130691,2130787,2130883,2163970,2164034,2164098,2164162,2164226,2164290,2164354,2164418,2164482,2164546,2133122]),new Uint32Array([2108515,2108611,2100740,2108707,2108803,2108899,2108995,2109091,2109187,2109283,2109379,2109475,2109571,2109667,2109763,2100738]),new Uint32Array([2102788,2102916,2103044,2120515,2103172,2120611,2120707,2098373,2103300,2120803,2120899,2120995,2103428,2103556,2121091,2121187]),new Uint32Array([2158082,2158146,0,2158210,2158274,0,2158338,2158402,2158466,2129922,2158530,2158594,2158658,2158722,2158786,2158850]),new Uint32Array([10499619,10499715,10499811,10499907,10500003,10500099,10500195,10500291,10500387,10500483,10500579,10500675,10500771,10500867,10500963,10501059]),new Uint32Array([2239585,2239618,2239681,2239713,0,2191969,2239745,2239777,2192033,2239809,2239841,2239874,2239937,2239970,2240033,2240065]),new Uint32Array([2252705,2252738,2252801,2252833,2252865,2252897,2252930,2252994,2253057,2253089,2253121,2253154,2253217,2253250,2219361,2219361]),new Uint32Array([2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,10538050,10538114,10538178,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([2226402,2226466,2226530,2226594,2226658,2226722,2226786,2226850,2226914,2226978,2227042,2227106,2227170,2227234,2227298,2227362]),new Uint32Array([23068672,6291456,6291456,6291456,6291456,2144066,2144130,2144194,2144258,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,6291456,23068672,23068672]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0]),new Uint32Array([2124674,2124770,2123875,2123971,2124067,2124163,2124259,2124355,2124451,2124547,2124643,2124739,2124835,2124931,2125027,2125123]),new Uint32Array([2168065,6291456,2168097,6291456,2168129,6291456,2168161,6291456,2168193,6291456,2168225,6291456,2168257,6291456,2168289,6291456]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0]),new Uint32Array([23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,2100610,2100611,6291456,2107842,2107843,6291456,6291456,6291456,6291456,10537922,6291456,10537986,6291456]),new Uint32Array([2174849,2174881,2174913,2174945,2174977,2175009,2175041,2175073,2175105,2175137,2175169,2175201,2175233,2175265,2175297,2175329]),new Uint32Array([2154562,2154626,2154690,2154754,2141858,2154818,2154882,2127298,2154946,2127298,2155010,2155074,2155138,2155202,2155266,2155202]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,23068672,0]),new Uint32Array([2200641,2150786,2150850,2150914,2150978,2151042,2106562,2151106,2150562,2151170,2151234,2151298,2151362,2151426,2151490,2151554]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,6291456,6291456]),new Uint32Array([2220289,2220289,2220321,2220321,2220321,2220321,2220353,2220353,2220353,2220353,2220385,2220385,2220385,2220385,2220417,2220417]),new Uint32Array([2155330,2155394,0,2155458,2155522,2155586,2105732,0,2155650,2155714,2155778,2125314,2155842,2155906,2126274,2155970]),new Uint32Array([23068672,23068672,23068672,23068672,23068672,6291456,6291456,23068672,23068672,6291456,23068672,23068672,23068672,23068672,6291456,6291456]),new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0]),new Uint32Array([2097729,2106017,2106017,2106017,2106017,2131297,2131297,2131297,2131297,2106081,2106081,2162049,2162049,2105953,2105953,2162337]),new Uint32Array([2097185,2097697,2097697,2097697,2097697,2135777,2135777,2135777,2135777,2097377,2097377,2097377,2097377,2097601,2097601,2097217]),new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23068672]),new Uint32Array([2139331,2139427,2139523,2139043,2133571,2132611,2139619,2139715,0,0,0,0,0,0,0,0]),new Uint32Array([2174113,2174145,2100897,2098177,2108289,2100865,2173601,2173633,2173985,2174113,2174145,6291456,6291456,6291456,6291456,6291456]),new Uint32Array([6291456,6291456,23068672,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456]),new Uint32Array([23068672,23068672,18923778,23068672,23068672,23068672,23068672,18923842,23068672,23068672,23068672,23068672,18923906,23068672,23068672,23068672]),new Uint32Array([2134145,2097153,2134241,0,2132705,2130977,2160065,2131297,0,2133089,0,2133857,0,0,0,0]),new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0]),new Uint32Array([2177537,6291456,2177569,6291456,2177601,6291456,2177633,6291456,2177665,6291456,2177697,6291456,2177729,6291456,2177761,6291456]),new Uint32Array([2212481,2212513,2212545,2212577,2197121,2212609,2212641,2212673,2212705,2212737,2212769,2212801,2212833,2212865,2212897,2212929]),new Uint32Array([6291456,6291456,23068672,23068672,23068672,6291456,6291456,0,0,0,0,0,0,0,0,0]),new Uint32Array([2098241,2108353,2170209,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,6291456,2108193,2172417,2112481,2098177]),new Uint32Array([6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456])],t=new Uint16Array([616,616,565,147,161,411,330,2,131,131,328,454,241,408,86,86,696,113,285,350,325,301,473,214,639,232,447,64,369,598,124,672,567,223,621,154,107,86,86,86,86,86,86,505,86,68,634,86,218,218,218,218,486,218,218,513,188,608,216,86,217,463,668,85,700,360,184,86,86,86,647,402,153,10,346,718,662,260,145,298,117,1,443,342,138,54,563,86,240,572,218,70,387,86,118,460,641,602,86,86,306,218,86,692,86,86,86,86,86,162,707,86,458,26,86,218,638,86,86,86,86,86,65,449,86,86,306,183,86,58,391,667,86,157,131,131,131,131,86,433,131,406,31,218,247,86,86,693,218,581,351,86,438,295,69,462,45,126,173,650,14,295,69,97,168,187,641,78,523,390,69,108,287,664,173,219,83,295,69,108,431,426,173,694,412,115,628,52,257,398,641,118,501,121,69,579,151,423,173,620,464,121,69,382,151,476,173,27,53,121,86,594,578,226,173,86,632,130,86,96,228,268,641,622,563,86,86,21,148,650,131,131,321,43,144,343,381,531,131,131,178,20,86,399,156,375,164,541,30,60,715,198,92,118,131,131,86,86,306,407,86,280,457,196,488,358,131,131,244,86,86,143,86,86,86,86,86,667,563,86,86,86,86,86,86,86,86,86,86,86,86,86,336,363,86,86,336,86,86,380,678,67,86,86,86,678,86,86,86,512,86,307,86,708,86,86,86,86,86,528,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,563,307,86,86,86,86,86,104,450,337,86,720,86,32,450,397,86,86,86,587,218,558,708,708,293,708,86,86,86,86,86,694,205,86,8,86,86,86,86,549,86,667,697,697,679,86,458,460,86,86,650,86,708,543,86,86,86,245,86,86,86,140,218,127,708,708,458,197,131,131,131,131,500,86,86,483,251,86,306,510,515,86,722,86,86,86,65,201,86,86,483,580,470,86,86,86,368,131,131,131,694,114,110,555,86,86,123,721,163,142,713,418,86,317,675,209,218,218,218,371,545,592,629,490,603,199,46,320,525,680,310,279,388,111,42,252,593,607,235,617,410,377,50,548,135,356,17,520,189,116,392,600,349,332,482,699,690,535,119,106,451,71,152,667,131,218,218,265,671,637,492,504,533,683,269,269,658,86,86,86,86,86,86,86,86,86,491,619,86,86,6,86,86,86,86,86,86,86,86,86,86,86,229,86,86,86,86,86,86,86,86,86,86,86,86,667,86,86,171,131,118,131,656,206,234,571,89,334,670,246,311,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,534,86,86,86,86,86,86,82,86,86,86,86,86,430,86,86,86,86,86,86,86,86,86,599,86,324,86,470,69,640,264,131,626,101,174,86,86,667,233,105,73,374,394,221,204,84,28,326,86,86,471,86,86,86,109,573,86,171,200,200,200,200,218,218,86,86,86,86,460,131,131,131,86,506,86,86,86,86,86,220,404,34,614,47,442,305,25,612,338,601,648,7,344,255,131,131,51,86,312,507,563,86,86,86,86,588,86,86,86,86,86,530,511,86,458,3,435,384,556,522,230,527,86,118,86,86,717,86,137,273,79,181,484,23,93,112,655,249,417,703,370,87,98,313,684,585,155,465,596,481,695,18,416,428,61,701,706,282,643,495,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,549,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,549,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,307,86,86,86,171,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,650,131,422,542,420,263,24,172,86,86,86,86,86,566,86,86,132,540,395,353,494,519,19,485,284,472,131,131,131,16,714,86,211,708,86,86,86,694,698,86,86,483,704,708,218,272,86,86,120,86,159,478,86,307,247,86,86,663,597,459,627,667,86,86,277,455,39,302,86,250,86,86,86,271,99,452,306,281,329,400,200,86,86,362,549,352,646,461,323,586,86,86,4,708,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,717,86,518,86,86,650,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,125,554,480,300,613,72,333,288,561,544,604,48,719,91,169,176,590,224,76,191,29,559,560,231,537,166,477,538,256,437,131,131,469,167,40,0,685,266,441,705,239,642,475,568,640,610,299,673,517,318,385,22,202,180,179,359,424,215,90,66,521,653,467,682,453,409,479,88,131,661,35,303,15,262,666,630,712,131,131,618,659,175,218,195,347,193,227,261,150,165,709,546,294,569,710,270,413,376,524,55,242,38,419,529,170,657,3,304,122,379,278,131,651,86,67,576,458,458,131,131,86,86,86,86,86,86,86,118,309,86,86,547,86,86,86,86,667,650,664,131,131,86,86,56,131,131,131,131,131,131,131,131,86,307,86,86,86,664,238,650,86,86,717,86,118,86,86,315,86,59,86,86,574,549,131,131,340,57,436,86,86,86,86,86,86,458,708,499,691,62,86,650,86,86,694,86,86,86,319,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,171,86,549,694,131,131,131,131,131,131,131,131,131,77,86,86,139,86,502,86,86,86,667,595,131,131,131,86,12,86,13,86,609,131,131,131,131,86,86,86,625,86,669,86,86,182,129,86,5,694,104,86,86,86,86,131,131,86,86,386,171,86,86,86,345,86,324,86,589,86,213,36,131,131,131,131,131,86,86,86,86,104,131,131,131,141,290,80,677,86,86,86,267,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,667,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,515,86,86,33,136,669,86,711,515,86,86,550,640,86,104,708,515,86,159,372,717,86,86,444,515,86,86,663,37,86,563,460,86,390,624,702,131,131,131,131,389,59,708,86,86,341,208,708,635,295,69,108,431,508,100,190,131,131,131,131,131,131,131,131,86,86,86,649,516,660,131,131,86,86,86,218,631,708,131,131,131,131,131,131,131,131,131,131,86,86,341,575,238,514,131,131,86,86,86,218,291,708,307,131,86,86,306,367,708,131,131,131,86,378,697,86,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,615,253,86,86,86,292,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,104,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,69,86,341,553,549,86,307,86,86,645,275,455,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,708,131,131,131,131,131,131,86,86,86,86,86,86,667,460,86,86,86,86,86,86,86,86,86,86,86,86,717,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,667,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,171,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,104,86,667,459,131,131,131,131,131,131,86,458,225,86,86,86,516,549,11,390,405,86,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,460,44,218,197,711,515,131,131,131,131,664,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,307,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,308,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,640,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,118,307,104,286,591,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,549,86,86,681,86,86,75,185,314,582,86,358,496,474,86,104,131,86,86,86,86,146,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,171,86,640,131,131,131,131,131,131,131,131,246,503,689,339,674,81,258,415,439,128,562,366,414,246,503,689,583,222,557,316,636,665,186,355,95,670,246,503,689,339,674,557,258,415,439,186,355,95,670,246,503,689,446,644,536,652,331,532,335,440,274,421,297,570,74,425,364,425,606,552,403,509,134,365,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,218,218,218,498,218,218,577,627,551,497,572,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,553,354,236,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,296,455,131,131,456,243,103,86,41,459,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,9,276,158,716,393,564,383,489,401,654,210,654,131,131,131,640,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,650,86,86,86,86,86,86,717,667,563,563,563,86,549,102,686,133,246,605,86,448,86,86,207,307,131,131,131,641,86,177,611,445,373,194,584,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,308,307,171,86,86,86,86,86,86,86,717,86,86,86,86,86,460,131,131,650,86,86,86,694,708,86,86,694,86,458,131,131,131,131,131,131,667,694,289,650,667,131,131,86,640,131,131,664,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,171,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,460,86,86,86,86,86,86,86,86,86,86,86,86,86,458,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,640,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,466,203,149,429,94,432,160,687,539,63,237,283,192,248,348,259,427,526,396,676,254,468,487,212,327,623,49,633,322,493,434,688,357,361,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131]),{mapStr:"صلى الله عليه وسلمجل جلالهキロメートルrad∕s2エスクードキログラムキロワットグラムトンクルゼイロサンチームパーセントピアストルファラッドブッシェルヘクタールマンションミリバールレントゲン′′′′1⁄10viii(10)(11)(12)(13)(14)(15)(16)(17)(18)(19)(20)∫∫∫∫(오전)(오후)アパートアルファアンペアイニングエーカーカラットカロリーキュリーギルダークローネサイクルシリングバーレルフィートポイントマイクロミクロンメガトンリットルルーブル株式会社kcalm∕s2c∕kgاكبرمحمدصلعمرسولریال1⁄41⁄23⁄4 ̈́ྲཱྀླཱྀ ̈͂ ̓̀ ̓́ ̓͂ ̔̀ ̔́ ̔͂ ̈̀‵‵‵a/ca/sc/oc/utelfax1⁄71⁄91⁄32⁄31⁄52⁄53⁄54⁄51⁄65⁄61⁄83⁄85⁄87⁄8xii0⁄3∮∮∮(1)(2)(3)(4)(5)(6)(7)(8)(9)(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)(x)(y)(z)::====(ᄀ)(ᄂ)(ᄃ)(ᄅ)(ᄆ)(ᄇ)(ᄉ)(ᄋ)(ᄌ)(ᄎ)(ᄏ)(ᄐ)(ᄑ)(ᄒ)(가)(나)(다)(라)(마)(바)(사)(아)(자)(차)(카)(타)(파)(하)(주)(一)(二)(三)(四)(五)(六)(七)(八)(九)(十)(月)(火)(水)(木)(金)(土)(日)(株)(有)(社)(名)(特)(財)(祝)(労)(代)(呼)(学)(監)(企)(資)(協)(祭)(休)(自)(至)pte10月11月12月ergltdアールインチウォンオンスオームカイリガロンガンマギニーケースコルナコーポセンチダースノットハイツパーツピクルフランペニヒヘルツペンスページベータボルトポンドホールホーンマイルマッハマルクヤードヤールユアンルピー10点11点12点13点14点15点16点17点18点19点20点21点22点23点24点hpabardm2dm3khzmhzghzthzmm2cm2km2mm3cm3km3kpampagpalogmilmolppmv∕ma∕m10日11日12日13日14日15日16日17日18日19日20日21日22日23日24日25日26日27日28日29日30日31日galffifflשּׁשּׂ ٌّ ٍّ َّ ُّ ِّ ّٰـَّـُّـِّتجمتحجتحمتخمتمجتمحتمخجمححميحمىسحجسجحسجىسمحسمجسممصححصممشحمشجيشمخشممضحىضخمطمحطممطميعجمعممعمىغممغميغمىفخمقمحقمملحملحيلحىلججلخملمحمحجمحيمجحمجممخممجخهمجهممنحمنحىنجمنجىنمينمىيممبخيتجيتجىتخيتخىتميتمىجميجحىجمىسخىصحيشحيضحيلجيلمييحييجييميمميقمينحيعميكمينجحمخيلجمكممجحيحجيمجيفميبحيسخينجيصلےقلے𝅘𝅥𝅮𝅘𝅥𝅯𝅘𝅥𝅰𝅘𝅥𝅱𝅘𝅥𝅲𝆹𝅥𝅮𝆺𝅥𝅮𝆹𝅥𝅯𝆺𝅥𝅯〔s〕ppv〔本〕〔三〕〔二〕〔安〕〔点〕〔打〕〔盗〕〔勝〕〔敗〕 ̄ ́ ̧ssi̇ijl·ʼndžljnjdz ̆ ̇ ̊ ̨ ̃ ̋ ιեւاٴوٴۇٴيٴक़ख़ग़ज़ड़ढ़फ़य़ড়ঢ়য়ਲ਼ਸ਼ਖ਼ਗ਼ਜ਼ਫ਼ଡ଼ଢ଼ําໍາຫນຫມགྷཌྷདྷབྷཛྷཀྵཱཱིུྲྀླྀྒྷྜྷྡྷྦྷྫྷྐྵaʾἀιἁιἂιἃιἄιἅιἆιἇιἠιἡιἢιἣιἤιἥιἦιἧιὠιὡιὢιὣιὤιὥιὦιὧιὰιαιάιᾶι ͂ὴιηιήιῆιὼιωιώιῶι ̳!! ̅???!!?rs°c°fnosmtmivix⫝̸ ゙ ゚よりコト333435참고주의363738394042444546474849503月4月5月6月7月8月9月hgevギガデシドルナノピコビルペソホンリラレムdaauovpciu平成昭和大正明治naμakakbmbgbpfnfμfμgmgμlmldlklfmnmμmpsnsμsmsnvμvkvpwnwμwmwkwkωmωbqcccddbgyhainkkktlnlxphprsrsvwbstմնմեմիվնմխיִײַשׁשׂאַאָאּבּגּדּהּוּזּטּיּךּכּלּמּנּסּףּפּצּקּרּתּוֹבֿכֿפֿאלئائەئوئۇئۆئۈئېئىئجئحئمئيبجبمبىبيتىتيثجثمثىثيخحضجضمطحظمغجفجفحفىفيقحقىقيكاكجكحكخكلكىكينخنىنيهجهىهييىذٰرٰىٰئرئزئنبزبنترتزتنثرثزثنمانرنزننيريزئخئهبهتهصخنههٰثهسهشهطىطيعىعيغىغيسىسيشىشيصىصيضىضيشخشرسرصرضراً ًـًـّ ْـْلآلألإ𝅗𝅥0,1,2,3,4,5,6,7,8,9,wzhvsdwcmcmddjほかココàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįĵķĺļľłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷÿźżɓƃƅɔƈɖɗƌǝəɛƒɠɣɩɨƙɯɲɵơƣƥʀƨʃƭʈưʊʋƴƶʒƹƽǎǐǒǔǖǘǚǜǟǡǣǥǧǩǫǭǯǵƕƿǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟƞȣȥȧȩȫȭȯȱȳⱥȼƚⱦɂƀʉʌɇɉɋɍɏɦɹɻʁʕͱͳʹͷ;ϳέίόύβγδεζθκλνξοπρστυφχψϊϋϗϙϛϝϟϡϣϥϧϩϫϭϯϸϻͻͼͽѐёђѓєѕіїјљњћќѝўџабвгдежзийклмнопрстуфхцчшщъыьэюяѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿԁԃԅԇԉԋԍԏԑԓԕԗԙԛԝԟԡԣԥԧԩԫԭԯաբգդզէըթժլծկհձղճյշոչպջռստրցփքօֆ་ⴧⴭნᏰᏱᏲᏳᏴᏵꙋɐɑᴂɜᴖᴗᴝᴥɒɕɟɡɥɪᵻʝɭᶅʟɱɰɳɴɸʂƫᴜʐʑḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹỻỽỿἐἑἒἓἔἕἰἱἲἳἴἵἶἷὀὁὂὃὄὅὑὓὕὗᾰᾱὲΐῐῑὶΰῠῡὺῥ`ὸ‐+−∑〈〉ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞⱡɫᵽɽⱨⱪⱬⱳⱶȿɀⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣⳬⳮⳳⵡ母龟丨丶丿乙亅亠人儿入冂冖冫几凵刀力勹匕匚匸卜卩厂厶又口囗士夂夊夕女子宀寸小尢尸屮山巛工己巾干幺广廴廾弋弓彐彡彳心戈戶手支攴文斗斤方无曰欠止歹殳毋比毛氏气爪父爻爿片牙牛犬玄玉瓜瓦甘生用田疋疒癶白皮皿目矛矢石示禸禾穴立竹米糸缶网羊羽老而耒耳聿肉臣臼舌舛舟艮色艸虍虫血行衣襾見角言谷豆豕豸貝赤走足身車辛辰辵邑酉釆里長門阜隶隹雨靑非面革韋韭音頁風飛食首香馬骨高髟鬥鬯鬲鬼魚鳥鹵鹿麥麻黃黍黑黹黽鼎鼓鼠鼻齊齒龍龜龠.〒卄卅ᄁᆪᆬᆭᄄᆰᆱᆲᆳᆴᆵᄚᄈᄡᄊ짜ᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵᄔᄕᇇᇈᇌᇎᇓᇗᇙᄜᇝᇟᄝᄞᄠᄢᄣᄧᄩᄫᄬᄭᄮᄯᄲᄶᅀᅇᅌᇱᇲᅗᅘᅙᆄᆅᆈᆑᆒᆔᆞᆡ上中下甲丙丁天地問幼箏우秘男適優印注項写左右医宗夜テヌモヨヰヱヲꙁꙃꙅꙇꙉꙍꙏꙑꙓꙕꙗꙙꙛꙝꙟꙡꙣꙥꙧꙩꙫꙭꚁꚃꚅꚇꚉꚋꚍꚏꚑꚓꚕꚗꚙꚛꜣꜥꜧꜩꜫꜭꜯꜳꜵꜷꜹꜻꜽꜿꝁꝃꝅꝇꝉꝋꝍꝏꝑꝓꝕꝗꝙꝛꝝꝟꝡꝣꝥꝧꝩꝫꝭꝯꝺꝼᵹꝿꞁꞃꞅꞇꞌꞑꞓꞗꞙꞛꞝꞟꞡꞣꞥꞧꞩɬʞʇꭓꞵꞷꬷꭒᎠᎡᎢᎣᎤᎥᎦᎧᎨᎩᎪᎫᎬᎭᎮᎯᎰᎱᎲᎳᎴᎵᎶᎷᎸᎹᎺᎻᎼᎽᎾᎿᏀᏁᏂᏃᏄᏅᏆᏇᏈᏉᏊᏋᏌᏍᏎᏏᏐᏑᏒᏓᏔᏕᏖᏗᏘᏙᏚᏛᏜᏝᏞᏟᏠᏡᏢᏣᏤᏥᏦᏧᏨᏩᏪᏫᏬᏭᏮᏯ豈更賈滑串句契喇奈懶癩羅蘿螺裸邏樂洛烙珞落酪駱亂卵欄爛蘭鸞嵐濫藍襤拉臘蠟廊朗浪狼郎來冷勞擄櫓爐盧蘆虜路露魯鷺碌祿綠菉錄論壟弄籠聾牢磊賂雷壘屢樓淚漏累縷陋勒肋凜凌稜綾菱陵讀拏諾丹寧怒率異北磻便復不泌數索參塞省葉說殺沈拾若掠略亮兩凉梁糧良諒量勵呂廬旅濾礪閭驪麗黎曆歷轢年憐戀撚漣煉璉秊練聯輦蓮連鍊列劣咽烈裂廉念捻殮簾獵令囹嶺怜玲瑩羚聆鈴零靈領例禮醴隸惡了僚寮尿料燎療蓼遼暈阮劉杻柳流溜琉留硫紐類戮陸倫崙淪輪律慄栗隆利吏履易李梨泥理痢罹裏裡離匿溺吝燐璘藺隣鱗麟林淋臨笠粒狀炙識什茶刺切度拓糖宅洞暴輻降廓兀嗀塚晴凞猪益礼神祥福靖精蘒諸逸都飯飼館鶴郞隷侮僧免勉勤卑喝嘆器塀墨層悔慨憎懲敏既暑梅海渚漢煮爫琢碑祉祈祐祖禍禎穀突節縉繁署者臭艹著褐視謁謹賓贈辶難響頻恵𤋮舘並况全侀充冀勇勺啕喙嗢墳奄奔婢嬨廒廙彩徭惘慎愈慠戴揄搜摒敖望杖滛滋瀞瞧爵犯瑱甆画瘝瘟盛直睊着磌窱类絛缾荒華蝹襁覆調請諭變輸遲醙鉶陼韛頋鬒𢡊𢡄𣏕㮝䀘䀹𥉉𥳐𧻓齃龎עםٱٻپڀٺٿٹڤڦڄڃچڇڍڌڎڈژڑکگڳڱںڻۀہھۓڭۋۅۉ、〖〗—–_{}【】《》「」『』[]#&*-<>\\$%@ءؤة\"'^|~⦅⦆・ゥャ¢£¬¦¥₩│←↑→↓■○𐐨𐐩𐐪𐐫𐐬𐐭𐐮𐐯𐐰𐐱𐐲𐐳𐐴𐐵𐐶𐐷𐐸𐐹𐐺𐐻𐐼𐐽𐐾𐐿𐑀𐑁𐑂𐑃𐑄𐑅𐑆𐑇𐑈𐑉𐑊𐑋𐑌𐑍𐑎𐑏𐓘𐓙𐓚𐓛𐓜𐓝𐓞𐓟𐓠𐓡𐓢𐓣𐓤𐓥𐓦𐓧𐓨𐓩𐓪𐓫𐓬𐓭𐓮𐓯𐓰𐓱𐓲𐓳𐓴𐓵𐓶𐓷𐓸𐓹𐓺𐓻𐳀𐳁𐳂𐳃𐳄𐳅𐳆𐳇𐳈𐳉𐳊𐳋𐳌𐳍𐳎𐳏𐳐𐳑𐳒𐳓𐳔𐳕𐳖𐳗𐳘𐳙𐳚𐳛𐳜𐳝𐳞𐳟𐳠𐳡𐳢𐳣𐳤𐳥𐳦𐳧𐳨𐳩𐳪𐳫𐳬𐳭𐳮𐳯𐳰𐳱𐳲𑣀𑣁𑣂𑣃𑣄𑣅𑣆𑣇𑣈𑣉𑣊𑣋𑣌𑣍𑣎𑣏𑣐𑣑𑣒𑣓𑣔𑣕𑣖𑣗𑣘𑣙𑣚𑣛𑣜𑣝𑣞𑣟ıȷ∇∂𞤢𞤣𞤤𞤥𞤦𞤧𞤨𞤩𞤪𞤫𞤬𞤭𞤮𞤯𞤰𞤱𞤲𞤳𞤴𞤵𞤶𞤷𞤸𞤹𞤺𞤻𞤼𞤽𞤾𞤿𞥀𞥁𞥂𞥃ٮڡٯ字双多解交映無前後再新初終販声吹演投捕遊指禁空合満申割営配得可丽丸乁𠄢你侻倂偺備像㒞𠘺兔兤具𠔜㒹內𠕋冗冤仌冬𩇟刃㓟刻剆剷㔕包匆卉博即卽卿𠨬灰及叟𠭣叫叱吆咞吸呈周咢哶唐啓啣善喫喳嗂圖圗噑噴壮城埴堍型堲報墬𡓤売壷夆夢奢𡚨𡛪姬娛娧姘婦㛮嬈嬾𡧈寃寘寳𡬘寿将㞁屠峀岍𡷤嵃𡷦嵮嵫嵼巡巢㠯巽帨帽幩㡢𢆃㡼庰庳庶𪎒𢌱舁弢㣇𣊸𦇚形彫㣣徚忍志忹悁㤺㤜𢛔惇慈慌慺憲憤憯懞戛扝抱拔捐𢬌挽拼捨掃揤𢯱搢揅掩㨮摩摾撝摷㩬敬𣀊旣書晉㬙㬈㫤冒冕最暜肭䏙朡杞杓𣏃㭉柺枅桒𣑭梎栟椔楂榣槪檨𣚣櫛㰘次𣢧歔㱎歲殟殻𣪍𡴋𣫺汎𣲼沿泍汧洖派浩浸涅𣴞洴港湮㴳滇𣻑淹潮𣽞𣾎濆瀹瀛㶖灊災灷炭𠔥煅𤉣熜爨牐𤘈犀犕𤜵𤠔獺王㺬玥㺸瑇瑜璅瓊㼛甤𤰶甾𤲒𢆟瘐𤾡𤾸𥁄㿼䀈𥃳𥃲𥄙𥄳眞真瞋䁆䂖𥐝硎䃣𥘦𥚚𥛅秫䄯穊穏𥥼𥪧䈂𥮫篆築䈧𥲀糒䊠糨糣紀𥾆絣䌁緇縂繅䌴𦈨𦉇䍙𦋙罺𦌾羕翺𦓚𦔣聠𦖨聰𣍟䏕育脃䐋脾媵𦞧𦞵𣎓𣎜舄辞䑫芑芋芝劳花芳芽苦𦬼茝荣莭茣莽菧荓菊菌菜𦰶𦵫𦳕䔫蓱蓳蔖𧏊蕤𦼬䕝䕡𦾱𧃒䕫虐虧虩蚩蚈蜎蛢蜨蝫螆蟡蠁䗹衠𧙧裗裞䘵裺㒻𧢮𧥦䚾䛇誠𧲨貫賁贛起𧼯𠠄跋趼跰𠣞軔𨗒𨗭邔郱鄑𨜮鄛鈸鋗鋘鉼鏹鐕𨯺開䦕閷𨵷䧦雃嶲霣𩅅𩈚䩮䩶韠𩐊䪲𩒖頩𩖶飢䬳餩馧駂駾䯎𩬰鱀鳽䳎䳭鵧𪃎䳸𪄅𪈎𪊑䵖黾鼅鼏鼖𪘀",mapChar:function(r){return r>=196608?r>=917760&&r<=917999?18874368:0:e[t[r>>4]][15&r]}};var e,t}.apply(t,[]))||(e.exports=n)},function(e,t,r){"use strict";e.exports=[{constant:!0,inputs:[{name:"node",type:"bytes32"}],name:"resolver",outputs:[{name:"",type:"address"}],payable:!1,type:"function"},{constant:!0,inputs:[{name:"node",type:"bytes32"}],name:"owner",outputs:[{name:"",type:"address"}],payable:!1,type:"function"},{constant:!1,inputs:[{name:"node",type:"bytes32"},{name:"label",type:"bytes32"},{name:"owner",type:"address"}],name:"setSubnodeOwner",outputs:[],payable:!1,type:"function"},{constant:!1,inputs:[{name:"node",type:"bytes32"},{name:"ttl",type:"uint64"}],name:"setTTL",outputs:[],payable:!1,type:"function"},{constant:!0,inputs:[{name:"node",type:"bytes32"}],name:"ttl",outputs:[{name:"",type:"uint64"}],payable:!1,type:"function"},{constant:!1,inputs:[{name:"node",type:"bytes32"},{name:"resolver",type:"address"}],name:"setResolver",outputs:[],payable:!1,type:"function"},{constant:!1,inputs:[{name:"node",type:"bytes32"},{name:"owner",type:"address"}],name:"setOwner",outputs:[],payable:!1,type:"function"},{anonymous:!1,inputs:[{indexed:!0,name:"node",type:"bytes32"},{indexed:!1,name:"owner",type:"address"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"node",type:"bytes32"},{indexed:!0,name:"label",type:"bytes32"},{indexed:!1,name:"owner",type:"address"}],name:"NewOwner",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"node",type:"bytes32"},{indexed:!1,name:"resolver",type:"address"}],name:"NewResolver",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"node",type:"bytes32"},{indexed:!1,name:"ttl",type:"uint64"}],name:"NewTTL",type:"event"},{constant:!1,inputs:[{internalType:"bytes32",name:"node",type:"bytes32"},{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"resolver",type:"address"},{internalType:"uint64",name:"ttl",type:"uint64"}],name:"setRecord",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"operator",type:"address"},{internalType:"bool",name:"approved",type:"bool"}],name:"setApprovalForAll",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"operator",type:"address"},{indexed:!1,internalType:"bool",name:"approved",type:"bool"}],name:"ApprovalForAll",type:"event"},{constant:!0,inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"operator",type:"address"}],name:"isApprovedForAll",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{internalType:"bytes32",name:"node",type:"bytes32"}],name:"recordExists",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"bytes32",name:"node",type:"bytes32"},{internalType:"bytes32",name:"label",type:"bytes32"},{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"resolver",type:"address"},{internalType:"uint64",name:"ttl",type:"uint64"}],name:"setSubnodeRecord",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"}]},function(e,t,r){"use strict";e.exports=[{constant:!0,inputs:[{name:"interfaceID",type:"bytes4"}],name:"supportsInterface",outputs:[{name:"",type:"bool"}],payable:!1,type:"function"},{constant:!0,inputs:[{name:"node",type:"bytes32"},{name:"contentTypes",type:"uint256"}],name:"ABI",outputs:[{name:"contentType",type:"uint256"},{name:"data",type:"bytes"}],payable:!1,type:"function"},{constant:!1,inputs:[{name:"node",type:"bytes32"},{name:"hash",type:"bytes"}],name:"setMultihash",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"node",type:"bytes32"}],name:"multihash",outputs:[{name:"",type:"bytes"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"node",type:"bytes32"},{name:"x",type:"bytes32"},{name:"y",type:"bytes32"}],name:"setPubkey",outputs:[],payable:!1,type:"function"},{constant:!0,inputs:[{name:"node",type:"bytes32"}],name:"content",outputs:[{name:"ret",type:"bytes32"}],payable:!1,type:"function"},{constant:!0,inputs:[{name:"node",type:"bytes32"}],name:"addr",outputs:[{name:"ret",type:"address"}],payable:!1,type:"function"},{constant:!1,inputs:[{name:"node",type:"bytes32"},{name:"contentType",type:"uint256"},{name:"data",type:"bytes"}],name:"setABI",outputs:[],payable:!1,type:"function"},{constant:!0,inputs:[{name:"node",type:"bytes32"}],name:"name",outputs:[{name:"ret",type:"string"}],payable:!1,type:"function"},{constant:!1,inputs:[{name:"node",type:"bytes32"},{name:"name",type:"string"}],name:"setName",outputs:[],payable:!1,type:"function"},{constant:!1,inputs:[{name:"node",type:"bytes32"},{name:"hash",type:"bytes32"}],name:"setContent",outputs:[],payable:!1,type:"function"},{constant:!0,inputs:[{name:"node",type:"bytes32"}],name:"pubkey",outputs:[{name:"x",type:"bytes32"},{name:"y",type:"bytes32"}],payable:!1,type:"function"},{constant:!1,inputs:[{name:"node",type:"bytes32"},{name:"addr",type:"address"}],name:"setAddr",outputs:[],payable:!1,type:"function"},{inputs:[{name:"ensAddr",type:"address"}],payable:!1,type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,name:"node",type:"bytes32"},{indexed:!1,name:"a",type:"address"}],name:"AddrChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"node",type:"bytes32"},{indexed:!1,name:"hash",type:"bytes32"}],name:"ContentChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"node",type:"bytes32"},{indexed:!1,name:"name",type:"string"}],name:"NameChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"node",type:"bytes32"},{indexed:!0,name:"contentType",type:"uint256"}],name:"ABIChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"node",type:"bytes32"},{indexed:!1,name:"x",type:"bytes32"},{indexed:!1,name:"y",type:"bytes32"}],name:"PubkeyChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"node",type:"bytes32"},{indexed:!1,name:"hash",type:"bytes"}],name:"ContenthashChanged",type:"event"},{constant:!0,inputs:[{name:"node",type:"bytes32"}],name:"contenthash",outputs:[{name:"",type:"bytes"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"node",type:"bytes32"},{name:"hash",type:"bytes"}],name:"setContenthash",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"}]},function(e,t,r){"use strict";var n=r(0),i=n(r(47)),o=n(r(69)),a=r(48),s=r(124),u=r(9).errors,f=r(10),c=r(113).interfaceIds;function h(e){this.registry=e}h.prototype.method=function(e,t,r,n,i){return{call:this.call.bind({ensName:e,methodName:t,methodArguments:r,callback:i,parent:this,outputFormatter:n}),send:this.send.bind({ensName:e,methodName:t,methodArguments:r,callback:i,parent:this})}},h.prototype.call=function(e){var t=this,r=new a,n=this.parent.prepareArguments(this.ensName,this.methodArguments),s=this.outputFormatter||null;return this.parent.registry.getResolver(this.ensName).then(function(){var a=(0,o.default)(i.default.mark((function o(a){return i.default.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,t.parent.checkInterfaceSupport(a,t.methodName);case 2:t.parent.handleCall(r,a.methods[t.methodName],n,s,e);case 3:case"end":return i.stop()}}),o)})));return function(e){return a.apply(this,arguments)}}()).catch((function(t){f.isFunction(e)?e(t,null):r.reject(t)})),r.eventEmitter},h.prototype.send=function(e,t){var r=this,n=new a,s=this.parent.prepareArguments(this.ensName,this.methodArguments);return this.parent.registry.getResolver(this.ensName).then(function(){var a=(0,o.default)(i.default.mark((function o(a){return i.default.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,r.parent.checkInterfaceSupport(a,r.methodName);case 2:r.parent.handleSend(n,a.methods[r.methodName],s,e,t);case 3:case"end":return i.stop()}}),o)})));return function(e){return a.apply(this,arguments)}}()).catch((function(e){f.isFunction(t)?t(e,null):n.reject(e)})),n.eventEmitter},h.prototype.handleCall=function(e,t,r,n,i){return t.apply(this,r).call().then((function(t){n&&(t=n(t)),f.isFunction(i)?i(t,t):e.resolve(t)})).catch((function(t){f.isFunction(i)?i(t,null):e.reject(t)})),e},h.prototype.handleSend=function(e,t,r,n,i){return t.apply(this,r).send(n).on("sending",(function(){e.eventEmitter.emit("sending")})).on("sent",(function(){e.eventEmitter.emit("sent")})).on("transactionHash",(function(t){e.eventEmitter.emit("transactionHash",t)})).on("confirmation",(function(t,r){e.eventEmitter.emit("confirmation",t,r)})).on("receipt",(function(t){e.eventEmitter.emit("receipt",t),e.resolve(t),f.isFunction(i)&&i(t,t)})).on("error",(function(t){e.eventEmitter.emit("error",t),f.isFunction(i)?i(t,null):e.reject(t)})),e},h.prototype.prepareArguments=function(e,t){var r=s.hash(e);return t.length>0?(t.unshift(r),t):[r]},h.prototype.checkInterfaceSupport=function(){var e=(0,o.default)(i.default.mark((function e(t,r){var n;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c[r]){e.next=2;break}return e.abrupt("return");case 2:return n=!1,e.prev=3,e.next=6,t.methods.supportsInterface(c[r]).call();case 6:n=e.sent,e.next=12;break;case 9:e.prev=9,e.t0=e.catch(3),console.warn('Could not verify interface of resolver contract at "'+t.options.address+'". ');case 12:if(n){e.next=14;break}throw u.ResolverMethodMissingError(t.options.address,r);case 14:case"end":return e.stop()}}),e,null,[[3,9]])})));return function(t,r){return e.apply(this,arguments)}}(),e.exports=h},function(e,t,r){"use strict";var n=r(281);e.exports={decode:function(e){var t=null,r=null,i=null;if(e&&e.error)return{protocolType:null,decoded:e.error};if(e)try{t=n.decode(e);var o=n.getCodec(e);"ipfs-ns"===o?r="ipfs":"swarm-ns"===o?r="bzz":"onion"===o?r="onion":"onion3"===o?r="onion3":t=e}catch(e){i=e.message}return{protocolType:r,decoded:t,error:i}},encode:function(e){var t,r,i=!1;if(e){var o=e.match(/^(ipfs|bzz|onion|onion3):\/\/(.*)/)||e.match(/\/(ipfs)\/(.*)/);o&&(r=o[1],t=o[2]);try{if("ipfs"===r)t.length>=4&&(i="0x"+n.fromIpfs(t));else if("bzz"===r)t.length>=4&&(i="0x"+n.fromSwarm(t));else if("onion"===r)16===t.length&&(i="0x"+n.encode("onion",t));else{if("onion3"!==r)throw new Error("Could not encode content hash: unsupported content type");56===t.length&&(i="0x"+n.encode("onion3",t))}}catch(e){throw e}}return i}}},function(e,t,r){"use strict";var n=r(282),i=r(293),o=i.hexStringToBuffer,a=i.profiles,s=r(317).cidV0ToV1Base32;e.exports={helpers:{cidV0ToV1Base32:s},decode:function(e){var t=o(e),r=n.getCodec(t),i=n.rmPrefix(t),s=a[r];return s||(s=a.default),s.decode(i)},fromIpfs:function(e){return this.encode("ipfs-ns",e)},fromSwarm:function(e){return this.encode("swarm-ns",e)},encode:function(e,t){var r=a[e];r||(r=a.default);var i=r.encode(t);return n.addPrefix(e,i).toString("hex")},getCodec:function(e){var t=o(e);return n.getCodec(t)}}},function(e,t,r){"use strict";(function(n){var i=r(39),o=r(286),a=r(287),s=r(125);(t=e.exports).addPrefix=function(e,t){var r;if(n.isBuffer(e))r=s.varintBufferEncode(e);else{if(!a[e])throw new Error("multicodec not recognized");r=a[e]}return n.concat([r,t])},t.rmPrefix=function(e){return i.decode(e),e.slice(i.decode.bytes)},t.getCodec=function(e){var t=i.decode(e),r=o.get(t);if(void 0===r)throw new Error("Code ".concat(t," not found"));return r},t.getName=function(e){return o.get(e)},t.getNumber=function(e){var t=a[e];if(void 0===t)throw new Error("Codec `"+e+"` not found");return s.varintBufferDecode(t)[0]},t.getCode=function(e){return i.decode(e)},t.getCodeVarint=function(e){var t=a[e];if(void 0===t)throw new Error("Codec `"+e+"` not found");return t},t.getVarint=function(e){return i.encode(e)};var u=r(288);Object.assign(t,u),t.print=r(292)}).call(this,r(2).Buffer)},function(e,t,r){"use strict";e.exports=function e(t,r,i){r=r||[];var o=i=i||0;for(;t>=n;)r[i++]=255&t|128,t/=128;for(;-128&t;)r[i++]=255&t|128,t>>>=7;return r[i]=0|t,e.bytes=i-o+1,r};var n=Math.pow(2,31)},function(e,t,r){"use strict";e.exports=function e(t,r){var n,i=0,o=0,a=r=r||0,s=t.length;do{if(a>=s)throw e.bytes=0,new RangeError("Could not decode varint");n=t[a++],i+=o<28?(127&n)<=128);return e.bytes=a-r,i}},function(e,t,r){"use strict";var n=Math.pow(2,7),i=Math.pow(2,14),o=Math.pow(2,21),a=Math.pow(2,28),s=Math.pow(2,35),u=Math.pow(2,42),f=Math.pow(2,49),c=Math.pow(2,56),h=Math.pow(2,63);e.exports=function(e){return e=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==r.return||r.return()}finally{if(u)throw a}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==r.return||r.return()}finally{if(u)throw a}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=5;)s+=t[a>>>o-5&31],o-=5;if(o>0&&(s+=t[a<<5-o&31]),i)for(;s.length%8!=0;)s+="=";return s}e.exports=function(e){return{encode:function(t){return o("string"==typeof t?Uint8Array.from(t):t,e)},decode:function(t){var r,i=n(t);try{for(i.s();!(r=i.n()).done;){var o=r.value;if(e.indexOf(o)<0)throw new Error("invalid base32 character")}}catch(e){i.e(e)}finally{i.f()}return function(e,t){for(var r=(e=e.replace(new RegExp("=","g"),"")).length,n=0,i=0,o=0,a=new Uint8Array(5*r/8|0),s=0;s=8&&(a[o++]=i>>>n-8&255,n-=8);return a.buffer}(t,e)}}}},function(e,t,r){"use strict";function n(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return i(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==r.return||r.return()}finally{if(u)throw a}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r-1,r=e.indexOf("-")>-1&&e.indexOf("_")>-1;return{encode:function(e){var n="";n="string"==typeof e?o.from(e).toString("base64"):e.toString("base64"),r&&(n=n.replace(/\+/g,"-").replace(/\//g,"_"));var i=n.indexOf("=");return i>0&&!t&&(n=n.substring(0,i)),n},decode:function(t){var r,i=n(t);try{for(i.s();!(r=i.n()).done;){var a=r.value;if(e.indexOf(a)<0)throw new Error("invalid base64 character")}}catch(e){i.e(e)}finally{i.f()}return o.from(t,"base64")}}}},function(e,t,r){"use strict";t.names=Object.freeze({identity:0,sha1:17,"sha2-256":18,"sha2-512":19,"dbl-sha2-256":86,"sha3-224":23,"sha3-256":22,"sha3-384":21,"sha3-512":20,"shake-128":24,"shake-256":25,"keccak-224":26,"keccak-256":27,"keccak-384":28,"keccak-512":29,"murmur3-128":34,"murmur3-32":35,md4:212,md5:213,"blake2b-8":45569,"blake2b-16":45570,"blake2b-24":45571,"blake2b-32":45572,"blake2b-40":45573,"blake2b-48":45574,"blake2b-56":45575,"blake2b-64":45576,"blake2b-72":45577,"blake2b-80":45578,"blake2b-88":45579,"blake2b-96":45580,"blake2b-104":45581,"blake2b-112":45582,"blake2b-120":45583,"blake2b-128":45584,"blake2b-136":45585,"blake2b-144":45586,"blake2b-152":45587,"blake2b-160":45588,"blake2b-168":45589,"blake2b-176":45590,"blake2b-184":45591,"blake2b-192":45592,"blake2b-200":45593,"blake2b-208":45594,"blake2b-216":45595,"blake2b-224":45596,"blake2b-232":45597,"blake2b-240":45598,"blake2b-248":45599,"blake2b-256":45600,"blake2b-264":45601,"blake2b-272":45602,"blake2b-280":45603,"blake2b-288":45604,"blake2b-296":45605,"blake2b-304":45606,"blake2b-312":45607,"blake2b-320":45608,"blake2b-328":45609,"blake2b-336":45610,"blake2b-344":45611,"blake2b-352":45612,"blake2b-360":45613,"blake2b-368":45614,"blake2b-376":45615,"blake2b-384":45616,"blake2b-392":45617,"blake2b-400":45618,"blake2b-408":45619,"blake2b-416":45620,"blake2b-424":45621,"blake2b-432":45622,"blake2b-440":45623,"blake2b-448":45624,"blake2b-456":45625,"blake2b-464":45626,"blake2b-472":45627,"blake2b-480":45628,"blake2b-488":45629,"blake2b-496":45630,"blake2b-504":45631,"blake2b-512":45632,"blake2s-8":45633,"blake2s-16":45634,"blake2s-24":45635,"blake2s-32":45636,"blake2s-40":45637,"blake2s-48":45638,"blake2s-56":45639,"blake2s-64":45640,"blake2s-72":45641,"blake2s-80":45642,"blake2s-88":45643,"blake2s-96":45644,"blake2s-104":45645,"blake2s-112":45646,"blake2s-120":45647,"blake2s-128":45648,"blake2s-136":45649,"blake2s-144":45650,"blake2s-152":45651,"blake2s-160":45652,"blake2s-168":45653,"blake2s-176":45654,"blake2s-184":45655,"blake2s-192":45656,"blake2s-200":45657,"blake2s-208":45658,"blake2s-216":45659,"blake2s-224":45660,"blake2s-232":45661,"blake2s-240":45662,"blake2s-248":45663,"blake2s-256":45664,"Skein256-8":45825,"Skein256-16":45826,"Skein256-24":45827,"Skein256-32":45828,"Skein256-40":45829,"Skein256-48":45830,"Skein256-56":45831,"Skein256-64":45832,"Skein256-72":45833,"Skein256-80":45834,"Skein256-88":45835,"Skein256-96":45836,"Skein256-104":45837,"Skein256-112":45838,"Skein256-120":45839,"Skein256-128":45840,"Skein256-136":45841,"Skein256-144":45842,"Skein256-152":45843,"Skein256-160":45844,"Skein256-168":45845,"Skein256-176":45846,"Skein256-184":45847,"Skein256-192":45848,"Skein256-200":45849,"Skein256-208":45850,"Skein256-216":45851,"Skein256-224":45852,"Skein256-232":45853,"Skein256-240":45854,"Skein256-248":45855,"Skein256-256":45856,"Skein512-8":45857,"Skein512-16":45858,"Skein512-24":45859,"Skein512-32":45860,"Skein512-40":45861,"Skein512-48":45862,"Skein512-56":45863,"Skein512-64":45864,"Skein512-72":45865,"Skein512-80":45866,"Skein512-88":45867,"Skein512-96":45868,"Skein512-104":45869,"Skein512-112":45870,"Skein512-120":45871,"Skein512-128":45872,"Skein512-136":45873,"Skein512-144":45874,"Skein512-152":45875,"Skein512-160":45876,"Skein512-168":45877,"Skein512-176":45878,"Skein512-184":45879,"Skein512-192":45880,"Skein512-200":45881,"Skein512-208":45882,"Skein512-216":45883,"Skein512-224":45884,"Skein512-232":45885,"Skein512-240":45886,"Skein512-248":45887,"Skein512-256":45888,"Skein512-264":45889,"Skein512-272":45890,"Skein512-280":45891,"Skein512-288":45892,"Skein512-296":45893,"Skein512-304":45894,"Skein512-312":45895,"Skein512-320":45896,"Skein512-328":45897,"Skein512-336":45898,"Skein512-344":45899,"Skein512-352":45900,"Skein512-360":45901,"Skein512-368":45902,"Skein512-376":45903,"Skein512-384":45904,"Skein512-392":45905,"Skein512-400":45906,"Skein512-408":45907,"Skein512-416":45908,"Skein512-424":45909,"Skein512-432":45910,"Skein512-440":45911,"Skein512-448":45912,"Skein512-456":45913,"Skein512-464":45914,"Skein512-472":45915,"Skein512-480":45916,"Skein512-488":45917,"Skein512-496":45918,"Skein512-504":45919,"Skein512-512":45920,"Skein1024-8":45921,"Skein1024-16":45922,"Skein1024-24":45923,"Skein1024-32":45924,"Skein1024-40":45925,"Skein1024-48":45926,"Skein1024-56":45927,"Skein1024-64":45928,"Skein1024-72":45929,"Skein1024-80":45930,"Skein1024-88":45931,"Skein1024-96":45932,"Skein1024-104":45933,"Skein1024-112":45934,"Skein1024-120":45935,"Skein1024-128":45936,"Skein1024-136":45937,"Skein1024-144":45938,"Skein1024-152":45939,"Skein1024-160":45940,"Skein1024-168":45941,"Skein1024-176":45942,"Skein1024-184":45943,"Skein1024-192":45944,"Skein1024-200":45945,"Skein1024-208":45946,"Skein1024-216":45947,"Skein1024-224":45948,"Skein1024-232":45949,"Skein1024-240":45950,"Skein1024-248":45951,"Skein1024-256":45952,"Skein1024-264":45953,"Skein1024-272":45954,"Skein1024-280":45955,"Skein1024-288":45956,"Skein1024-296":45957,"Skein1024-304":45958,"Skein1024-312":45959,"Skein1024-320":45960,"Skein1024-328":45961,"Skein1024-336":45962,"Skein1024-344":45963,"Skein1024-352":45964,"Skein1024-360":45965,"Skein1024-368":45966,"Skein1024-376":45967,"Skein1024-384":45968,"Skein1024-392":45969,"Skein1024-400":45970,"Skein1024-408":45971,"Skein1024-416":45972,"Skein1024-424":45973,"Skein1024-432":45974,"Skein1024-440":45975,"Skein1024-448":45976,"Skein1024-456":45977,"Skein1024-464":45978,"Skein1024-472":45979,"Skein1024-480":45980,"Skein1024-488":45981,"Skein1024-496":45982,"Skein1024-504":45983,"Skein1024-512":45984,"Skein1024-520":45985,"Skein1024-528":45986,"Skein1024-536":45987,"Skein1024-544":45988,"Skein1024-552":45989,"Skein1024-560":45990,"Skein1024-568":45991,"Skein1024-576":45992,"Skein1024-584":45993,"Skein1024-592":45994,"Skein1024-600":45995,"Skein1024-608":45996,"Skein1024-616":45997,"Skein1024-624":45998,"Skein1024-632":45999,"Skein1024-640":46e3,"Skein1024-648":46001,"Skein1024-656":46002,"Skein1024-664":46003,"Skein1024-672":46004,"Skein1024-680":46005,"Skein1024-688":46006,"Skein1024-696":46007,"Skein1024-704":46008,"Skein1024-712":46009,"Skein1024-720":46010,"Skein1024-728":46011,"Skein1024-736":46012,"Skein1024-744":46013,"Skein1024-752":46014,"Skein1024-760":46015,"Skein1024-768":46016,"Skein1024-776":46017,"Skein1024-784":46018,"Skein1024-792":46019,"Skein1024-800":46020,"Skein1024-808":46021,"Skein1024-816":46022,"Skein1024-824":46023,"Skein1024-832":46024,"Skein1024-840":46025,"Skein1024-848":46026,"Skein1024-856":46027,"Skein1024-864":46028,"Skein1024-872":46029,"Skein1024-880":46030,"Skein1024-888":46031,"Skein1024-896":46032,"Skein1024-904":46033,"Skein1024-912":46034,"Skein1024-920":46035,"Skein1024-928":46036,"Skein1024-936":46037,"Skein1024-944":46038,"Skein1024-952":46039,"Skein1024-960":46040,"Skein1024-968":46041,"Skein1024-976":46042,"Skein1024-984":46043,"Skein1024-992":46044,"Skein1024-1000":46045,"Skein1024-1008":46046,"Skein1024-1016":46047,"Skein1024-1024":46048}),t.codes=Object.freeze({0:"identity",17:"sha1",18:"sha2-256",19:"sha2-512",86:"dbl-sha2-256",23:"sha3-224",22:"sha3-256",21:"sha3-384",20:"sha3-512",24:"shake-128",25:"shake-256",26:"keccak-224",27:"keccak-256",28:"keccak-384",29:"keccak-512",34:"murmur3-128",35:"murmur3-32",212:"md4",213:"md5",45569:"blake2b-8",45570:"blake2b-16",45571:"blake2b-24",45572:"blake2b-32",45573:"blake2b-40",45574:"blake2b-48",45575:"blake2b-56",45576:"blake2b-64",45577:"blake2b-72",45578:"blake2b-80",45579:"blake2b-88",45580:"blake2b-96",45581:"blake2b-104",45582:"blake2b-112",45583:"blake2b-120",45584:"blake2b-128",45585:"blake2b-136",45586:"blake2b-144",45587:"blake2b-152",45588:"blake2b-160",45589:"blake2b-168",45590:"blake2b-176",45591:"blake2b-184",45592:"blake2b-192",45593:"blake2b-200",45594:"blake2b-208",45595:"blake2b-216",45596:"blake2b-224",45597:"blake2b-232",45598:"blake2b-240",45599:"blake2b-248",45600:"blake2b-256",45601:"blake2b-264",45602:"blake2b-272",45603:"blake2b-280",45604:"blake2b-288",45605:"blake2b-296",45606:"blake2b-304",45607:"blake2b-312",45608:"blake2b-320",45609:"blake2b-328",45610:"blake2b-336",45611:"blake2b-344",45612:"blake2b-352",45613:"blake2b-360",45614:"blake2b-368",45615:"blake2b-376",45616:"blake2b-384",45617:"blake2b-392",45618:"blake2b-400",45619:"blake2b-408",45620:"blake2b-416",45621:"blake2b-424",45622:"blake2b-432",45623:"blake2b-440",45624:"blake2b-448",45625:"blake2b-456",45626:"blake2b-464",45627:"blake2b-472",45628:"blake2b-480",45629:"blake2b-488",45630:"blake2b-496",45631:"blake2b-504",45632:"blake2b-512",45633:"blake2s-8",45634:"blake2s-16",45635:"blake2s-24",45636:"blake2s-32",45637:"blake2s-40",45638:"blake2s-48",45639:"blake2s-56",45640:"blake2s-64",45641:"blake2s-72",45642:"blake2s-80",45643:"blake2s-88",45644:"blake2s-96",45645:"blake2s-104",45646:"blake2s-112",45647:"blake2s-120",45648:"blake2s-128",45649:"blake2s-136",45650:"blake2s-144",45651:"blake2s-152",45652:"blake2s-160",45653:"blake2s-168",45654:"blake2s-176",45655:"blake2s-184",45656:"blake2s-192",45657:"blake2s-200",45658:"blake2s-208",45659:"blake2s-216",45660:"blake2s-224",45661:"blake2s-232",45662:"blake2s-240",45663:"blake2s-248",45664:"blake2s-256",45825:"Skein256-8",45826:"Skein256-16",45827:"Skein256-24",45828:"Skein256-32",45829:"Skein256-40",45830:"Skein256-48",45831:"Skein256-56",45832:"Skein256-64",45833:"Skein256-72",45834:"Skein256-80",45835:"Skein256-88",45836:"Skein256-96",45837:"Skein256-104",45838:"Skein256-112",45839:"Skein256-120",45840:"Skein256-128",45841:"Skein256-136",45842:"Skein256-144",45843:"Skein256-152",45844:"Skein256-160",45845:"Skein256-168",45846:"Skein256-176",45847:"Skein256-184",45848:"Skein256-192",45849:"Skein256-200",45850:"Skein256-208",45851:"Skein256-216",45852:"Skein256-224",45853:"Skein256-232",45854:"Skein256-240",45855:"Skein256-248",45856:"Skein256-256",45857:"Skein512-8",45858:"Skein512-16",45859:"Skein512-24",45860:"Skein512-32",45861:"Skein512-40",45862:"Skein512-48",45863:"Skein512-56",45864:"Skein512-64",45865:"Skein512-72",45866:"Skein512-80",45867:"Skein512-88",45868:"Skein512-96",45869:"Skein512-104",45870:"Skein512-112",45871:"Skein512-120",45872:"Skein512-128",45873:"Skein512-136",45874:"Skein512-144",45875:"Skein512-152",45876:"Skein512-160",45877:"Skein512-168",45878:"Skein512-176",45879:"Skein512-184",45880:"Skein512-192",45881:"Skein512-200",45882:"Skein512-208",45883:"Skein512-216",45884:"Skein512-224",45885:"Skein512-232",45886:"Skein512-240",45887:"Skein512-248",45888:"Skein512-256",45889:"Skein512-264",45890:"Skein512-272",45891:"Skein512-280",45892:"Skein512-288",45893:"Skein512-296",45894:"Skein512-304",45895:"Skein512-312",45896:"Skein512-320",45897:"Skein512-328",45898:"Skein512-336",45899:"Skein512-344",45900:"Skein512-352",45901:"Skein512-360",45902:"Skein512-368",45903:"Skein512-376",45904:"Skein512-384",45905:"Skein512-392",45906:"Skein512-400",45907:"Skein512-408",45908:"Skein512-416",45909:"Skein512-424",45910:"Skein512-432",45911:"Skein512-440",45912:"Skein512-448",45913:"Skein512-456",45914:"Skein512-464",45915:"Skein512-472",45916:"Skein512-480",45917:"Skein512-488",45918:"Skein512-496",45919:"Skein512-504",45920:"Skein512-512",45921:"Skein1024-8",45922:"Skein1024-16",45923:"Skein1024-24",45924:"Skein1024-32",45925:"Skein1024-40",45926:"Skein1024-48",45927:"Skein1024-56",45928:"Skein1024-64",45929:"Skein1024-72",45930:"Skein1024-80",45931:"Skein1024-88",45932:"Skein1024-96",45933:"Skein1024-104",45934:"Skein1024-112",45935:"Skein1024-120",45936:"Skein1024-128",45937:"Skein1024-136",45938:"Skein1024-144",45939:"Skein1024-152",45940:"Skein1024-160",45941:"Skein1024-168",45942:"Skein1024-176",45943:"Skein1024-184",45944:"Skein1024-192",45945:"Skein1024-200",45946:"Skein1024-208",45947:"Skein1024-216",45948:"Skein1024-224",45949:"Skein1024-232",45950:"Skein1024-240",45951:"Skein1024-248",45952:"Skein1024-256",45953:"Skein1024-264",45954:"Skein1024-272",45955:"Skein1024-280",45956:"Skein1024-288",45957:"Skein1024-296",45958:"Skein1024-304",45959:"Skein1024-312",45960:"Skein1024-320",45961:"Skein1024-328",45962:"Skein1024-336",45963:"Skein1024-344",45964:"Skein1024-352",45965:"Skein1024-360",45966:"Skein1024-368",45967:"Skein1024-376",45968:"Skein1024-384",45969:"Skein1024-392",45970:"Skein1024-400",45971:"Skein1024-408",45972:"Skein1024-416",45973:"Skein1024-424",45974:"Skein1024-432",45975:"Skein1024-440",45976:"Skein1024-448",45977:"Skein1024-456",45978:"Skein1024-464",45979:"Skein1024-472",45980:"Skein1024-480",45981:"Skein1024-488",45982:"Skein1024-496",45983:"Skein1024-504",45984:"Skein1024-512",45985:"Skein1024-520",45986:"Skein1024-528",45987:"Skein1024-536",45988:"Skein1024-544",45989:"Skein1024-552",45990:"Skein1024-560",45991:"Skein1024-568",45992:"Skein1024-576",45993:"Skein1024-584",45994:"Skein1024-592",45995:"Skein1024-600",45996:"Skein1024-608",45997:"Skein1024-616",45998:"Skein1024-624",45999:"Skein1024-632",46e3:"Skein1024-640",46001:"Skein1024-648",46002:"Skein1024-656",46003:"Skein1024-664",46004:"Skein1024-672",46005:"Skein1024-680",46006:"Skein1024-688",46007:"Skein1024-696",46008:"Skein1024-704",46009:"Skein1024-712",46010:"Skein1024-720",46011:"Skein1024-728",46012:"Skein1024-736",46013:"Skein1024-744",46014:"Skein1024-752",46015:"Skein1024-760",46016:"Skein1024-768",46017:"Skein1024-776",46018:"Skein1024-784",46019:"Skein1024-792",46020:"Skein1024-800",46021:"Skein1024-808",46022:"Skein1024-816",46023:"Skein1024-824",46024:"Skein1024-832",46025:"Skein1024-840",46026:"Skein1024-848",46027:"Skein1024-856",46028:"Skein1024-864",46029:"Skein1024-872",46030:"Skein1024-880",46031:"Skein1024-888",46032:"Skein1024-896",46033:"Skein1024-904",46034:"Skein1024-912",46035:"Skein1024-920",46036:"Skein1024-928",46037:"Skein1024-936",46038:"Skein1024-944",46039:"Skein1024-952",46040:"Skein1024-960",46041:"Skein1024-968",46042:"Skein1024-976",46043:"Skein1024-984",46044:"Skein1024-992",46045:"Skein1024-1000",46046:"Skein1024-1008",46047:"Skein1024-1016",46048:"Skein1024-1024"}),t.defaultLengths=Object.freeze({17:20,18:32,19:64,86:32,23:28,22:32,21:48,20:64,24:32,25:64,26:28,27:32,28:48,29:64,34:32,45569:1,45570:2,45571:3,45572:4,45573:5,45574:6,45575:7,45576:8,45577:9,45578:10,45579:11,45580:12,45581:13,45582:14,45583:15,45584:16,45585:17,45586:18,45587:19,45588:20,45589:21,45590:22,45591:23,45592:24,45593:25,45594:26,45595:27,45596:28,45597:29,45598:30,45599:31,45600:32,45601:33,45602:34,45603:35,45604:36,45605:37,45606:38,45607:39,45608:40,45609:41,45610:42,45611:43,45612:44,45613:45,45614:46,45615:47,45616:48,45617:49,45618:50,45619:51,45620:52,45621:53,45622:54,45623:55,45624:56,45625:57,45626:58,45627:59,45628:60,45629:61,45630:62,45631:63,45632:64,45633:1,45634:2,45635:3,45636:4,45637:5,45638:6,45639:7,45640:8,45641:9,45642:10,45643:11,45644:12,45645:13,45646:14,45647:15,45648:16,45649:17,45650:18,45651:19,45652:20,45653:21,45654:22,45655:23,45656:24,45657:25,45658:26,45659:27,45660:28,45661:29,45662:30,45663:31,45664:32,45825:1,45826:2,45827:3,45828:4,45829:5,45830:6,45831:7,45832:8,45833:9,45834:10,45835:11,45836:12,45837:13,45838:14,45839:15,45840:16,45841:17,45842:18,45843:19,45844:20,45845:21,45846:22,45847:23,45848:24,45849:25,45850:26,45851:27,45852:28,45853:29,45854:30,45855:31,45856:32,45857:1,45858:2,45859:3,45860:4,45861:5,45862:6,45863:7,45864:8,45865:9,45866:10,45867:11,45868:12,45869:13,45870:14,45871:15,45872:16,45873:17,45874:18,45875:19,45876:20,45877:21,45878:22,45879:23,45880:24,45881:25,45882:26,45883:27,45884:28,45885:29,45886:30,45887:31,45888:32,45889:33,45890:34,45891:35,45892:36,45893:37,45894:38,45895:39,45896:40,45897:41,45898:42,45899:43,45900:44,45901:45,45902:46,45903:47,45904:48,45905:49,45906:50,45907:51,45908:52,45909:53,45910:54,45911:55,45912:56,45913:57,45914:58,45915:59,45916:60,45917:61,45918:62,45919:63,45920:64,45921:1,45922:2,45923:3,45924:4,45925:5,45926:6,45927:7,45928:8,45929:9,45930:10,45931:11,45932:12,45933:13,45934:14,45935:15,45936:16,45937:17,45938:18,45939:19,45940:20,45941:21,45942:22,45943:23,45944:24,45945:25,45946:26,45947:27,45948:28,45949:29,45950:30,45951:31,45952:32,45953:33,45954:34,45955:35,45956:36,45957:37,45958:38,45959:39,45960:40,45961:41,45962:42,45963:43,45964:44,45965:45,45966:46,45967:47,45968:48,45969:49,45970:50,45971:51,45972:52,45973:53,45974:54,45975:55,45976:56,45977:57,45978:58,45979:59,45980:60,45981:61,45982:62,45983:63,45984:64,45985:65,45986:66,45987:67,45988:68,45989:69,45990:70,45991:71,45992:72,45993:73,45994:74,45995:75,45996:76,45997:77,45998:78,45999:79,46e3:80,46001:81,46002:82,46003:83,46004:84,46005:85,46006:86,46007:87,46008:88,46009:89,46010:90,46011:91,46012:92,46013:93,46014:94,46015:95,46016:96,46017:97,46018:98,46019:99,46020:100,46021:101,46022:102,46023:103,46024:104,46025:105,46026:106,46027:107,46028:108,46029:109,46030:110,46031:111,46032:112,46033:113,46034:114,46035:115,46036:116,46037:117,46038:118,46039:119,46040:120,46041:121,46042:122,46043:123,46044:124,46045:125,46046:126,46047:127,46048:128})},function(e,t,r){"use strict";var n=r(2).Buffer,i=r(302);(t=e.exports=a).encode=function(e,t){var r=s(e);return a(r.name,n.from(r.encode(t)))},t.decode=function(e){n.isBuffer(e)&&(e=e.toString());var t=e.substring(0,1);"string"==typeof(e=e.substring(1,e.length))&&(e=n.from(e));var r=s(t);return n.from(r.decode(e.toString()))},t.isEncoded=function(e){n.isBuffer(e)&&(e=e.toString());if("[object String]"!==Object.prototype.toString.call(e))return!1;var t=e.substring(0,1);try{return s(t).name}catch(e){return!1}},t.names=Object.freeze(Object.keys(i.names)),t.codes=Object.freeze(Object.keys(i.codes));var o=new Error("Unsupported encoding");function a(e,t){if(!t)throw new Error("requires an encoded buffer");var r=s(e),i=n.from(r.code);return function(e,t){s(e).decode(t.toString())}(r.name,t),n.concat([i,t])}function s(e){var t;if(i.names[e])t=i.names[e];else{if(!i.codes[e])throw o;t=i.codes[e]}if(!t.isImplemented())throw new Error("Base "+e+" is not implemented yet");return t}},function(e,t,r){"use strict";var n=r(303),i=r(129),o=r(304),a=r(305),s=r(306),u=[["base1","1","","1"],["base2","0",i,"01"],["base8","7",i,"01234567"],["base10","9",i,"0123456789"],["base16","f",o,"0123456789abcdef"],["base32","b",a,"abcdefghijklmnopqrstuvwxyz234567"],["base32pad","c",a,"abcdefghijklmnopqrstuvwxyz234567="],["base32hex","v",a,"0123456789abcdefghijklmnopqrstuv"],["base32hexpad","t",a,"0123456789abcdefghijklmnopqrstuv="],["base32z","h",a,"ybndrfg8ejkmcpqxot1uwisza345h769"],["base58flickr","Z",i,"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"],["base58btc","z",i,"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"],["base64","m",s,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"],["base64pad","M",s,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="],["base64url","u",s,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"],["base64urlpad","U",s,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_="]],f=u.reduce((function(e,t){return e[t[0]]=new n(t[0],t[1],t[2],t[3]),e}),{}),c=u.reduce((function(e,t){return e[t[1]]=f[t[0]],e}),{});e.exports={names:f,codes:c}},function(e,t,r){"use strict";var n=r(0),i=n(r(6)),o=n(r(7)),a=function(){function e(t,r,n,o){(0,i.default)(this,e),this.name=t,this.code=r,this.alphabet=o,n&&o&&(this.engine=n(o))}return(0,o.default)(e,[{key:"encode",value:function(e){return this.engine.encode(e)}},{key:"decode",value:function(e){return this.engine.decode(e)}},{key:"isImplemented",value:function(){return this.engine}}]),e}();e.exports=a},function(e,t,r){"use strict";function n(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return i(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==r.return||r.return()}finally{if(u)throw a}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==r.return||r.return()}finally{if(u)throw a}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=5;)s+=t[a>>>o-5&31],o-=5;if(o>0&&(s+=t[a<<5-o&31]),i)for(;s.length%8!=0;)s+="=";return s}e.exports=function(e){return{encode:function(t){return o("string"==typeof t?Uint8Array.from(t):t,e)},decode:function(t){var r,i=n(t);try{for(i.s();!(r=i.n()).done;){var o=r.value;if(e.indexOf(o)<0)throw new Error("invalid base32 character")}}catch(e){i.e(e)}finally{i.f()}return function(e,t){for(var r=(e=e.replace(new RegExp("=","g"),"")).length,n=0,i=0,o=0,a=new Uint8Array(5*r/8|0),s=0;s=8&&(a[o++]=i>>>n-8&255,n-=8);return a.buffer}(t,e)}}}},function(e,t,r){"use strict";function n(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return i(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==r.return||r.return()}finally{if(u)throw a}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r-1,r=e.indexOf("-")>-1&&e.indexOf("_")>-1;return{encode:function(e){var n="";n="string"==typeof e?o.from(e).toString("base64"):e.toString("base64"),r&&(n=n.replace(/\+/g,"-").replace(/\//g,"_"));var i=n.indexOf("=");return i>0&&!t&&(n=n.substring(0,i)),n},decode:function(t){var r,i=n(t);try{for(i.s();!(r=i.n()).done;){var a=r.value;if(e.indexOf(a)<0)throw new Error("invalid base64 character")}}catch(e){i.e(e)}finally{i.f()}return o.from(t,"base64")}}}},function(e,t,r){"use strict";var n=r(2).Buffer,i=r(39),o=r(308),a=r(309),s=r(130);(t=e.exports).addPrefix=function(e,t){var r;if(n.isBuffer(e))r=s.varintBufferEncode(e);else{if(!a[e])throw new Error("multicodec not recognized");r=a[e]}return n.concat([r,t])},t.rmPrefix=function(e){return i.decode(e),e.slice(i.decode.bytes)},t.getCodec=function(e){var t=i.decode(e),r=o.get(t);if(void 0===r)throw new Error("Code ".concat(t," not found"));return r},t.getName=function(e){return o.get(e)},t.getNumber=function(e){var t=a[e];if(void 0===t)throw new Error("Codec `"+e+"` not found");return s.varintBufferDecode(t)[0]},t.getCode=function(e){return i.decode(e)},t.getCodeVarint=function(e){var t=a[e];if(void 0===t)throw new Error("Codec `"+e+"` not found");return t},t.getVarint=function(e){return i.encode(e)};var u=r(310);Object.assign(t,u),t.print=r(311)},function(e,t,r){"use strict";var n=r(41),i=new Map;for(var o in n){var a=n[o];i.set(a,o)}e.exports=Object.freeze(i)},function(e,t,r){"use strict";var n=r(41),i=r(130).varintEncode,o={};for(var a in n){var s=n[a];o[a]=i(s)}e.exports=Object.freeze(o)},function(e,t,r){"use strict";for(var n=r(0)(r(40)),i=r(41),o={},a=0,s=Object.entries(i);a>1),"0x","0x"],o=t.slice(0,6).concat(i),a=c.encode(o);return u.recover(f.keccak256(a),r)},w.prototype.hashMessage=function(e){var t=b.isHexStrict(e)?e:b.utf8ToHex(e),r=b.hexToBytes(t),i=n.from(r),o="Ethereum Signed Message:\n"+r.length,a=n.from(o),s=n.concat([a,i]);return f.keccak256s(s)},w.prototype.sign=function(e,t){if(t.startsWith("0x")||(t="0x"+t),66!==t.length)throw new Error("Private key must be 32 bytes long");var r=this.hashMessage(e),n=u.sign(r,t),i=u.decodeSignature(n);return{message:e,messageHash:r,v:i[0],r:i[1],s:i[2],signature:n}},w.prototype.recover=function(e,t,r){var n=[].slice.apply(arguments);return o.isObject(e)?this.recover(e.messageHash,u.encodeSignature([e.v,e.r,e.s]),!0):(r||(e=this.hashMessage(e)),n.length>=4?(r=n.slice(-1)[0],r=!!o.isBoolean(r)&&!!r,this.recover(e,u.encodeSignature(n.slice(1,4)),r)):u.recover(e,t))},w.prototype.decrypt=function(e,t,r){if(!o.isString(t))throw new Error("No password given.");var a,s,u=o.isObject(e)?e:JSON.parse(r?e.toLowerCase():e);if(3!==u.version)throw new Error("Not a valid V3 wallet");if("scrypt"===u.crypto.kdf)s=u.crypto.kdfparams,a=l.syncScrypt(n.from(t),n.from(s.salt,"hex"),s.n,s.r,s.p,s.dklen);else{if("pbkdf2"!==u.crypto.kdf)throw new Error("Unsupported key derivation scheme");if("hmac-sha256"!==(s=u.crypto.kdfparams).prf)throw new Error("Unsupported parameters to PBKDF2");a=d.pbkdf2Sync(n.from(t),n.from(s.salt,"hex"),s.c,s.dklen,"sha256")}var f=n.from(u.crypto.ciphertext,"hex");if(b.sha3(n.from([].concat((0,i.default)(a.slice(16,32)),(0,i.default)(f)))).replace("0x","")!==u.crypto.mac)throw new Error("Key derivation failed - possibly wrong password");var c=d.createDecipheriv(u.crypto.cipher,a.slice(0,16),n.from(u.crypto.cipherparams.iv,"hex")),h="0x"+n.from([].concat((0,i.default)(c.update(f)),(0,i.default)(c.final()))).toString("hex");return this.privateKeyToAccount(h,!0)},w.prototype.encrypt=function(e,t,r){var o,a=this.privateKeyToAccount(e,!0),s=(r=r||{}).salt||d.randomBytes(32),u=r.iv||d.randomBytes(16),f=r.kdf||"scrypt",c={dklen:r.dklen||32,salt:s.toString("hex")};if("pbkdf2"===f)c.c=r.c||262144,c.prf="hmac-sha256",o=d.pbkdf2Sync(n.from(t),n.from(c.salt,"hex"),c.c,c.dklen,"sha256");else{if("scrypt"!==f)throw new Error("Unsupported kdf");c.n=r.n||8192,c.r=r.r||8,c.p=r.p||1,o=l.syncScrypt(n.from(t),n.from(c.salt,"hex"),c.n,c.r,c.p,c.dklen)}var h=d.createCipheriv(r.cipher||"aes-128-ctr",o.slice(0,16),u);if(!h)throw new Error("Unsupported cipher");var m=n.from([].concat((0,i.default)(h.update(n.from(a.privateKey.replace("0x",""),"hex"))),(0,i.default)(h.final()))),y=b.sha3(n.from([].concat((0,i.default)(o.slice(16,32)),(0,i.default)(m)))).replace("0x","");return{version:3,id:p.v4({random:r.uuid||d.randomBytes(16)}),address:a.address.toLowerCase().replace("0x",""),crypto:{ciphertext:m.toString("hex"),cipherparams:{iv:u.toString("hex")},cipher:r.cipher||"aes-128-ctr",kdf:f,kdfparams:c,mac:y.toString("hex")}}},_.prototype._findSafeIndex=function(e){return e=e||0,o.has(this,e)?this._findSafeIndex(e+1):e},_.prototype._currentIndexes=function(){return Object.keys(this).map((function(e){return parseInt(e)})).filter((function(e){return e<9e20}))},_.prototype.create=function(e,t){for(var r=0;r7?e[n+2].toUpperCase():e[n+2];return r},d=function(e){var r=new t(e.slice(2),"hex"),n="0x"+s.keyFromPrivate(r).getPublic(!1,"hex").slice(2),i=f(n);return{address:h("0x"+i.slice(-40)),privateKey:e}},l=function(e){var t=(0,n.default)(e,3),r=t[0],o=t[1],a=t[2];return i.flatten([o,a,r])},p=function(e){return[i.slice(64,i.length(e),e),i.slice(0,32,e),i.slice(32,64,e)]},b=function(e){return function(r,n){var a=s.keyFromPrivate(new t(n.slice(2),"hex")).sign(new t(r.slice(2),"hex"),{canonical:!0});return l([o.fromString(i.fromNumber(e+a.recoveryParam)),i.pad(32,i.fromNat("0x"+a.r.toString(16))),i.pad(32,i.fromNat("0x"+a.s.toString(16)))])}},m=b(27);e.exports={create:function(e){var t=f(i.concat(i.random(32),e||i.random(32))),r=i.concat(i.concat(i.random(32),t),i.random(32)),n=f(r);return d(n)},toChecksum:h,fromPrivate:d,sign:m,makeSigner:b,recover:function(e,r){var n=p(r),o={v:i.toNumber(n[0]),r:n[1].slice(2),s:n[2].slice(2)},a="0x"+s.recoverPubKey(new t(e.slice(2),"hex"),o,o.v<2?o.v:1-o.v%2).encode("hex",!1).slice(2),u=f(a);return h("0x"+u.slice(-40))},encodeSignature:l,decodeSignature:p}}).call(this,r(2).Buffer)},function(e,t,r){"use strict";var n=function(e,t){for(var r=[],n=0;n>>2}function c(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(u,i),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,u=0|this._e,h=0;h<16;++h)r[h]=e.readInt32BE(4*h);for(;h<80;++h)r[h]=r[h-3]^r[h-8]^r[h-14]^r[h-16];for(var d=0;d<80;++d){var l=~~(d/20),p=0|((t=n)<<5|t>>>27)+c(l,i,o,s)+u+r[d]+a[l];u=s,s=o,o=f(i),i=n,n=p}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0},u.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=u},function(e,t,r){"use strict";var n=r(3),i=r(32),o=r(4).Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function u(){this.init(),this._w=s,i.call(this,64,56)}function f(e){return e<<5|e>>>27}function c(e){return e<<30|e>>>2}function h(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(u,i),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,u=0|this._e,d=0;d<16;++d)r[d]=e.readInt32BE(4*d);for(;d<80;++d)r[d]=(t=r[d-3]^r[d-8]^r[d-14]^r[d-16])<<1|t>>>31;for(var l=0;l<80;++l){var p=~~(l/20),b=f(n)+h(p,i,o,s)+u+r[l]+a[p]|0;u=s,s=o,o=c(i),i=n,n=b}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0},u.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=u},function(e,t,r){"use strict";var n=r(3),i=r(133),o=r(32),a=r(4).Buffer,s=new Array(64);function u(){this.init(),this._w=s,o.call(this,64,56)}n(u,i),u.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},u.prototype._hash=function(){var e=a.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},e.exports=u},function(e,t,r){"use strict";var n=r(3),i=r(134),o=r(32),a=r(4).Buffer,s=new Array(160);function u(){this.init(),this._w=s,o.call(this,128,112)}n(u,i),u.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},u.prototype._hash=function(){var e=a.allocUnsafe(48);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},e.exports=u},function(e,t,r){"use strict";var n=r(3),i=r(4).Buffer,o=r(24),a=i.alloc(128);function s(e,t){o.call(this,"digest"),"string"==typeof t&&(t=i.from(t)),this._alg=e,this._key=t,t.length>64?t=e(t):t.length<64&&(t=i.concat([t,a],64));for(var r=this._ipad=i.allocUnsafe(64),n=this._opad=i.allocUnsafe(64),s=0;s<64;s++)r[s]=54^t[s],n[s]=92^t[s];this._hash=[r]}n(s,o),s.prototype._update=function(e){this._hash.push(e)},s.prototype._final=function(){var e=this._alg(i.concat(this._hash));return this._alg(i.concat([this._opad,e]))},e.exports=s},function(e,t,r){"use strict";e.exports=r(137)},function(e,t,r){"use strict";(function(t,n){var i,o=r(139),a=r(140),s=r(141),u=r(4).Buffer,f=t.crypto&&t.crypto.subtle,c={sha:"SHA-1","sha-1":"SHA-1",sha1:"SHA-1",sha256:"SHA-256","sha-256":"SHA-256",sha384:"SHA-384","sha-384":"SHA-384","sha-512":"SHA-512",sha512:"SHA-512"},h=[];function d(e,t,r,n,i){return f.importKey("raw",e,{name:"PBKDF2"},!1,["deriveBits"]).then((function(e){return f.deriveBits({name:"PBKDF2",salt:t,iterations:r,hash:{name:i}},e,n<<3)})).then((function(e){return u.from(e)}))}e.exports=function(e,r,l,p,b,m){"function"==typeof b&&(m=b,b=void 0);var y=c[(b=b||"sha1").toLowerCase()];if(!y||"function"!=typeof t.Promise)return n.nextTick((function(){var t;try{t=s(e,r,l,p,b)}catch(e){return m(e)}m(null,t)}));if(o(e,r,l,p),"function"!=typeof m)throw new Error("No callback provided to pbkdf2");u.isBuffer(e)||(e=u.from(e,a)),u.isBuffer(r)||(r=u.from(r,a)),function(e,t){e.then((function(e){n.nextTick((function(){t(null,e)}))}),(function(e){n.nextTick((function(){t(e)}))}))}(function(e){if(t.process&&!t.process.browser)return Promise.resolve(!1);if(!f||!f.importKey||!f.deriveBits)return Promise.resolve(!1);if(void 0!==h[e])return h[e];var r=d(i=i||u.alloc(8),i,10,128,e).then((function(){return!0})).catch((function(){return!1}));return h[e]=r,r}(y).then((function(t){return t?d(e,r,l,p,y):s(e,r,l,p,b)})),m)}}).call(this,r(8),r(11))},function(e,t,r){"use strict";var n=r(337),i=r(82),o=r(83),a=r(352),s=r(57);function u(e,t,r){if(e=e.toLowerCase(),o[e])return i.createCipheriv(e,t,r);if(a[e])return new n({key:t,iv:r,mode:e});throw new TypeError("invalid suite type")}function f(e,t,r){if(e=e.toLowerCase(),o[e])return i.createDecipheriv(e,t,r);if(a[e])return new n({key:t,iv:r,mode:e,decrypt:!0});throw new TypeError("invalid suite type")}t.createCipher=t.Cipher=function(e,t){var r,n;if(e=e.toLowerCase(),o[e])r=o[e].key,n=o[e].iv;else{if(!a[e])throw new TypeError("invalid suite type");r=8*a[e].key,n=a[e].iv}var i=s(t,!1,r,n);return u(e,i.key,i.iv)},t.createCipheriv=t.Cipheriv=u,t.createDecipher=t.Decipher=function(e,t){var r,n;if(e=e.toLowerCase(),o[e])r=o[e].key,n=o[e].iv;else{if(!a[e])throw new TypeError("invalid suite type");r=8*a[e].key,n=a[e].iv}var i=s(t,!1,r,n);return f(e,i.key,i.iv)},t.createDecipheriv=t.Decipheriv=f,t.listCiphers=t.getCiphers=function(){return Object.keys(a).concat(i.getCiphers())}},function(e,t,r){"use strict";var n=r(24),i=r(81),o=r(3),a=r(4).Buffer,s={"des-ede3-cbc":i.CBC.instantiate(i.EDE),"des-ede3":i.EDE,"des-ede-cbc":i.CBC.instantiate(i.EDE),"des-ede":i.EDE,"des-cbc":i.CBC.instantiate(i.DES),"des-ecb":i.DES};function u(e){n.call(this);var t,r=e.mode.toLowerCase(),i=s[r];t=e.decrypt?"decrypt":"encrypt";var o=e.key;a.isBuffer(o)||(o=a.from(o)),"des-ede"!==r&&"des-ede-cbc"!==r||(o=a.concat([o,o.slice(0,8)]));var u=e.iv;a.isBuffer(u)||(u=a.from(u)),this._des=i.create({key:o,iv:u,type:t})}s.des=s["des-cbc"],s.des3=s["des-ede3-cbc"],e.exports=u,o(u,n),u.prototype._update=function(e){return a.from(this._des.update(e))},u.prototype._final=function(){return a.from(this._des.final())}},function(e,t,r){"use strict";t.readUInt32BE=function(e,t){return(e[0+t]<<24|e[1+t]<<16|e[2+t]<<8|e[3+t])>>>0},t.writeUInt32BE=function(e,t,r){e[0+r]=t>>>24,e[1+r]=t>>>16&255,e[2+r]=t>>>8&255,e[3+r]=255&t},t.ip=function(e,t,r,n){for(var i=0,o=0,a=6;a>=0;a-=2){for(var s=0;s<=24;s+=8)i<<=1,i|=t>>>s+a&1;for(s=0;s<=24;s+=8)i<<=1,i|=e>>>s+a&1}for(a=6;a>=0;a-=2){for(s=1;s<=25;s+=8)o<<=1,o|=t>>>s+a&1;for(s=1;s<=25;s+=8)o<<=1,o|=e>>>s+a&1}r[n+0]=i>>>0,r[n+1]=o>>>0},t.rip=function(e,t,r,n){for(var i=0,o=0,a=0;a<4;a++)for(var s=24;s>=0;s-=8)i<<=1,i|=t>>>s+a&1,i<<=1,i|=e>>>s+a&1;for(a=4;a<8;a++)for(s=24;s>=0;s-=8)o<<=1,o|=t>>>s+a&1,o<<=1,o|=e>>>s+a&1;r[n+0]=i>>>0,r[n+1]=o>>>0},t.pc1=function(e,t,r,n){for(var i=0,o=0,a=7;a>=5;a--){for(var s=0;s<=24;s+=8)i<<=1,i|=t>>s+a&1;for(s=0;s<=24;s+=8)i<<=1,i|=e>>s+a&1}for(s=0;s<=24;s+=8)i<<=1,i|=t>>s+a&1;for(a=1;a<=3;a++){for(s=0;s<=24;s+=8)o<<=1,o|=t>>s+a&1;for(s=0;s<=24;s+=8)o<<=1,o|=e>>s+a&1}for(s=0;s<=24;s+=8)o<<=1,o|=e>>s+a&1;r[n+0]=i>>>0,r[n+1]=o>>>0},t.r28shl=function(e,t){return e<>>28-t};var n=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];t.pc2=function(e,t,r,i){for(var o=0,a=0,s=n.length>>>1,u=0;u>>n[u]&1;for(u=s;u>>n[u]&1;r[i+0]=o>>>0,r[i+1]=a>>>0},t.expand=function(e,t,r){var n=0,i=0;n=(1&e)<<5|e>>>27;for(var o=23;o>=15;o-=4)n<<=6,n|=e>>>o&63;for(o=11;o>=3;o-=4)i|=e>>>o&63,i<<=6;i|=(31&e)<<1|e>>>31,t[r+0]=n>>>0,t[r+1]=i>>>0};var i=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];t.substitute=function(e,t){for(var r=0,n=0;n<4;n++){r<<=4,r|=i[64*n+(e>>>18-6*n&63)]}for(n=0;n<4;n++){r<<=4,r|=i[256+64*n+(t>>>18-6*n&63)]}return r>>>0};var o=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];t.permute=function(e){for(var t=0,r=0;r>>o[r]&1;return t>>>0},t.padSplit=function(e,t,r){for(var n=e.toString(2);n.length0;n--)t+=this._buffer(e,t),r+=this._flushBuffer(i,r);return t+=this._buffer(e,t),i},i.prototype.final=function(e){var t,r;return e&&(t=this.update(e)),r="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),t?t.concat(r):r},i.prototype._pad=function(e,t){if(0===t)return!1;for(;t>>1];r=a.r28shl(r,s),i=a.r28shl(i,s),a.pc2(r,i,e.keys,o)}},f.prototype._update=function(e,t,r,n){var i=this._desState,o=a.readUInt32BE(e,t),s=a.readUInt32BE(e,t+4);a.ip(o,s,i.tmp,0),o=i.tmp[0],s=i.tmp[1],"encrypt"===this.type?this._encrypt(i,o,s,i.tmp,0):this._decrypt(i,o,s,i.tmp,0),o=i.tmp[0],s=i.tmp[1],a.writeUInt32BE(r,o,n),a.writeUInt32BE(r,s,n+4)},f.prototype._pad=function(e,t){for(var r=e.length-t,n=t;n>>0,o=d}a.rip(s,o,n,i)},f.prototype._decrypt=function(e,t,r,n,i){for(var o=r,s=t,u=e.keys.length-2;u>=0;u-=2){var f=e.keys[u],c=e.keys[u+1];a.expand(o,e.tmp,0),f^=e.tmp[0],c^=e.tmp[1];var h=a.substitute(f,c),d=o;o=(s^a.permute(h))>>>0,s=d}a.rip(o,s,n,i)}},function(e,t,r){"use strict";var n=r(17),i=r(3),o={};function a(e){n.equal(e.length,8,"Invalid IV length"),this.iv=new Array(8);for(var t=0;t15){var e=this.cache.slice(0,16);return this.cache=this.cache.slice(16),e}return null},d.prototype.flush=function(){for(var e=16-this.cache.length,t=o.allocUnsafe(e),r=-1;++r>a%8,e._prev=o(e._prev,r?n:i);return s}function o(e,t){var r=e.length,i=-1,o=n.allocUnsafe(e.length);for(e=n.concat([e,n.from([t])]);++i>7;return o}t.encrypt=function(e,t,r){for(var o=t.length,a=n.allocUnsafe(o),s=-1;++s>>0,0),t.writeUInt32BE(e[1]>>>0,4),t.writeUInt32BE(e[2]>>>0,8),t.writeUInt32BE(e[3]>>>0,12),t}function a(e){this.h=e,this.state=n.alloc(16,0),this.cache=n.allocUnsafe(0)}a.prototype.ghash=function(e){for(var t=-1;++t0;t--)n[t]=n[t]>>>1|(1&n[t-1])<<31;n[0]=n[0]>>>1,r&&(n[0]=n[0]^225<<24)}this.state=o(i)},a.prototype.update=function(e){var t;for(this.cache=n.concat([this.cache,e]);this.cache.length>=16;)t=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(t)},a.prototype.final=function(e,t){return this.cache.length&&this.ghash(n.concat([this.cache,i],16)),this.ghash(o([0,e,0,t])),this.state},e.exports=a},function(e,t,r){"use strict";var n=r(145),i=r(4).Buffer,o=r(83),a=r(146),s=r(24),u=r(56),f=r(57);function c(e,t,r){s.call(this),this._cache=new h,this._last=void 0,this._cipher=new u.AES(t),this._prev=i.from(r),this._mode=e,this._autopadding=!0}function h(){this.cache=i.allocUnsafe(0)}function d(e,t,r){var s=o[e.toLowerCase()];if(!s)throw new TypeError("invalid suite type");if("string"==typeof r&&(r=i.from(r)),"GCM"!==s.mode&&r.length!==s.iv)throw new TypeError("invalid iv length "+r.length);if("string"==typeof t&&(t=i.from(t)),t.length!==s.key/8)throw new TypeError("invalid key length "+t.length);return"stream"===s.type?new a(s.module,t,r,!0):"auth"===s.type?new n(s.module,t,r,!0):new c(s.module,t,r)}r(3)(c,s),c.prototype._update=function(e){var t,r;this._cache.add(e);for(var n=[];t=this._cache.get(this._autopadding);)r=this._mode.decrypt(this,t),n.push(r);return i.concat(n)},c.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return function(e){var t=e[15];if(t<1||t>16)throw new Error("unable to decrypt data");var r=-1;for(;++r16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t}else if(this.cache.length>=16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t;return null},h.prototype.flush=function(){if(this.cache.length)return this.cache},t.createDecipher=function(e,t){var r=o[e.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=f(t,!1,r.key,r.iv);return d(e,n.key,n.iv)},t.createDecipheriv=d},function(e,t,r){"use strict";t["des-ecb"]={key:8,iv:0},t["des-cbc"]=t.des={key:8,iv:8},t["des-ede3-cbc"]=t.des3={key:24,iv:8},t["des-ede3"]={key:24,iv:0},t["des-ede-cbc"]={key:16,iv:8},t["des-ede"]={key:16,iv:0}},function(e,t,r){"use strict";(function(e){var n=r(147),i=r(354),o=r(355);var a={binary:!0,hex:!0,base64:!0};t.DiffieHellmanGroup=t.createDiffieHellmanGroup=t.getDiffieHellman=function(t){var r=new e(i[t].prime,"hex"),n=new e(i[t].gen,"hex");return new o(r,n)},t.createDiffieHellman=t.DiffieHellman=function t(r,i,s,u){return e.isBuffer(i)||void 0===a[i]?t(r,"binary",i,s):(i=i||"binary",u=u||"binary",s=s||new e([2]),e.isBuffer(s)||(s=new e(s,u)),"number"==typeof r?new o(n(r,s),s,!0):(e.isBuffer(r)||(r=new e(r,i)),new o(r,s,!0)))}}).call(this,r(2).Buffer)},function(e){e.exports=JSON.parse('{"modp1":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},"modp2":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},"modp5":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},"modp14":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},"modp15":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},"modp16":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},"modp17":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},"modp18":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}')},function(e,t,r){"use strict";(function(t){var n=r(5),i=new(r(148)),o=new n(24),a=new n(11),s=new n(10),u=new n(3),f=new n(7),c=r(147),h=r(26);function d(e,r){return r=r||"utf8",t.isBuffer(e)||(e=new t(e,r)),this._pub=new n(e),this}function l(e,r){return r=r||"utf8",t.isBuffer(e)||(e=new t(e,r)),this._priv=new n(e),this}e.exports=b;var p={};function b(e,t,r){this.setGenerator(t),this.__prime=new n(e),this._prime=n.mont(this.__prime),this._primeLen=e.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,r?(this.setPublicKey=d,this.setPrivateKey=l):this._primeCode=8}function m(e,r){var n=new t(e.toArray());return r?n.toString(r):n}Object.defineProperty(b.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=function(e,t){var r=t.toString("hex"),n=[r,e.toString(16)].join("_");if(n in p)return p[n];var h,d=0;if(e.isEven()||!c.simpleSieve||!c.fermatTest(e)||!i.test(e))return d+=1,d+="02"===r||"05"===r?8:4,p[n]=d,d;switch(i.test(e.shrn(1))||(d+=2),r){case"02":e.mod(o).cmp(a)&&(d+=8);break;case"05":(h=e.mod(s)).cmp(u)&&h.cmp(f)&&(d+=8);break;default:d+=4}return p[n]=d,d}(this.__prime,this.__gen)),this._primeCode}}),b.prototype.generateKeys=function(){return this._priv||(this._priv=new n(h(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},b.prototype.computeSecret=function(e){var r=(e=(e=new n(e)).toRed(this._prime)).redPow(this._priv).fromRed(),i=new t(r.toArray()),o=this.getPrime();if(i.length0&&r.ishrn(n),r}function h(e,r,i){var o,a;do{for(o=new t(0);8*o.length=0;){var o;if(i.isOdd()){var a=i.andln(n-1);o=a>(n>>1)-1?(n>>1)-a:a,i.isubn(o)}else o=0;r.push(o);for(var s=0!==i.cmpn(0)&&0===i.andln(n-1)?t+1:1,u=1;u0||t.cmpn(-i)>0;){var o,a,s,u=e.andln(3)+n&3,f=t.andln(3)+i&3;if(3===u&&(u=-1),3===f&&(f=-1),0==(1&u))o=0;else o=3!==(s=e.andln(7)+n&7)&&5!==s||2!==f?u:-u;if(r[0].push(o),0==(1&f))a=0;else a=3!==(s=t.andln(7)+i&7)&&5!==s||2!==u?f:-f;r[1].push(a),2*n===o+1&&(n=1-n),2*i===a+1&&(i=1-i),e.iushrn(1),t.iushrn(1)}return r},n.cachedProperty=function(e,t,r){var n="_"+t;e.prototype[t]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}},n.parseBytes=function(e){return"string"==typeof e?n.toArray(e,"hex"):e},n.intFromLE=function(e){return new i(e,"hex","le")}},function(e,t,r){"use strict";var n=r(5),i=r(13).utils,o=i.getNAF,a=i.getJSF,s=i.assert;function u(e,t){this.type=e,this.p=new n(t.p,16),this.red=t.prime?n.red(t.prime):n.mont(this.p),this.zero=new n(0).toRed(this.red),this.one=new n(1).toRed(this.red),this.two=new n(2).toRed(this.red),this.n=t.n&&new n(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4);var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function f(e,t){this.curve=e,this.type=t,this.precomputed=null}e.exports=u,u.prototype.point=function(){throw new Error("Not implemented")},u.prototype.validate=function(){throw new Error("Not implemented")},u.prototype._fixedNafMul=function(e,t){s(e.precomputed);var r=e._getDoubles(),n=o(t,1),i=(1<=u;t--)f=(f<<1)+n[t];a.push(f)}for(var c=this.jpoint(null,null,null),h=this.jpoint(null,null,null),d=i;d>0;d--){for(u=0;u=0;f--){for(t=0;f>=0&&0===a[f];f--)t++;if(f>=0&&t++,u=u.dblp(t),f<0)break;var c=a[f];s(0!==c),u="affine"===e.type?c>0?u.mixedAdd(i[c-1>>1]):u.mixedAdd(i[-c-1>>1].neg()):c>0?u.add(i[c-1>>1]):u.add(i[-c-1>>1].neg())}return"affine"===e.type?u.toP():u},u.prototype._wnafMulAdd=function(e,t,r,n,i){for(var s=this._wnafT1,u=this._wnafT2,f=this._wnafT3,c=0,h=0;h=1;h-=2){var l=h-1,p=h;if(1===s[l]&&1===s[p]){var b=[t[l],null,null,t[p]];0===t[l].y.cmp(t[p].y)?(b[1]=t[l].add(t[p]),b[2]=t[l].toJ().mixedAdd(t[p].neg())):0===t[l].y.cmp(t[p].y.redNeg())?(b[1]=t[l].toJ().mixedAdd(t[p]),b[2]=t[l].add(t[p].neg())):(b[1]=t[l].toJ().mixedAdd(t[p]),b[2]=t[l].toJ().mixedAdd(t[p].neg()));var m=[-3,-1,-5,-7,0,7,5,1,3],y=a(r[l],r[p]);c=Math.max(y[0].length,c),f[l]=new Array(c),f[p]=new Array(c);for(var v=0;v=0;h--){for(var A=0;h>=0;){var S=!0;for(v=0;v=0&&A++,_=_.dblp(A),h<0)break;for(v=0;v0?E=u[v][x-1>>1]:x<0&&(E=u[v][-x-1>>1].neg()),_="affine"===E.type?_.mixedAdd(E):_.add(E))}}for(h=0;h=Math.ceil((e.bitLength()+1)/t.step)},f.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;i=0&&(a=t,s=r),n.negative&&(n=n.neg(),i=i.neg()),a.negative&&(a=a.neg(),s=s.neg()),[{a:n,b:i},{a:a,b:s}]},f.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],n=t[1],i=n.b.mul(e).divRound(this.n),o=r.b.neg().mul(e).divRound(this.n),a=i.mul(r.a),s=o.mul(n.a),u=i.mul(r.b),f=o.mul(n.b);return{k1:e.sub(a).sub(s),k2:u.add(f).neg()}},f.prototype.pointFromX=function(e,t){(e=new o(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var i=n.fromRed().isOdd();return(t&&!i||!t&&i)&&(n=n.redNeg()),this.point(e,n)},f.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,n=this.a.redMul(t),i=t.redSqr().redMul(t).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},f.prototype._endoWnafMulAdd=function(e,t,r){for(var n=this._endoWnafT1,i=this._endoWnafT2,o=0;o":""},c.prototype.isInfinity=function(){return this.inf},c.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),n=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},c.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),n=e.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),a=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,a)},c.prototype.getX=function(){return this.x.fromRed()},c.prototype.getY=function(){return this.y.fromRed()},c.prototype.mul=function(e){return e=new o(e,16),this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,t,r){var n=[this,t],i=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},c.prototype.jmulAdd=function(e,t,r){var n=[this,t],i=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i,!0):this.curve._wnafMulAdd(1,n,i,2,!0)},c.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},c.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,n=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return t},c.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},a(h,s.BasePoint),f.prototype.jpoint=function(e,t,r){return new h(this,e,t,r)},h.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),n=this.y.redMul(t).redMul(e);return this.curve.point(r,n)},h.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},h.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(t),i=e.x.redMul(r),o=this.y.redMul(t.redMul(e.z)),a=e.y.redMul(r.redMul(this.z)),s=n.redSub(i),u=o.redSub(a);if(0===s.cmpn(0))return 0!==u.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=s.redSqr(),c=f.redMul(s),h=n.redMul(f),d=u.redSqr().redIAdd(c).redISub(h).redISub(h),l=u.redMul(h.redISub(d)).redISub(o.redMul(c)),p=this.z.redMul(e.z).redMul(s);return this.curve.jpoint(d,l,p)},h.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,n=e.x.redMul(t),i=this.y,o=e.y.redMul(t).redMul(this.z),a=r.redSub(n),s=i.redSub(o);if(0===a.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=a.redSqr(),f=u.redMul(a),c=r.redMul(u),h=s.redSqr().redIAdd(f).redISub(c).redISub(c),d=s.redMul(c.redISub(h)).redISub(i.redMul(f)),l=this.z.redMul(a);return this.curve.jpoint(h,d,l)},h.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,r=0;r=0)return!1;if(r.redIAdd(i),0===this.x.cmp(r))return!0}},h.prototype.inspect=function(){return this.isInfinity()?"":""},h.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(e,t,r){"use strict";var n=r(58),i=r(5),o=r(3),a=n.base,s=r(13).utils;function u(e){a.call(this,"mont",e),this.a=new i(e.a,16).toRed(this.red),this.b=new i(e.b,16).toRed(this.red),this.i4=new i(4).toRed(this.red).redInvm(),this.two=new i(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function f(e,t,r){a.BasePoint.call(this,e,"projective"),null===t&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new i(t,16),this.z=new i(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}o(u,a),e.exports=u,u.prototype.validate=function(e){var t=e.normalize().x,r=t.redSqr(),n=r.redMul(t).redAdd(r.redMul(this.a)).redAdd(t);return 0===n.redSqrt().redSqr().cmp(n)},o(f,a.BasePoint),u.prototype.decodePoint=function(e,t){return this.point(s.toArray(e,t),1)},u.prototype.point=function(e,t){return new f(this,e,t)},u.prototype.pointFromJSON=function(e){return f.fromJSON(this,e)},f.prototype.precompute=function(){},f.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},f.fromJSON=function(e,t){return new f(e,t[0],t[1]||e.one)},f.prototype.inspect=function(){return this.isInfinity()?"":""},f.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},f.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),r=e.redSub(t),n=e.redMul(t),i=r.redMul(t.redAdd(this.curve.a24.redMul(r)));return this.curve.point(n,i)},f.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},f.prototype.diffAdd=function(e,t){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=e.x.redAdd(e.z),o=e.x.redSub(e.z).redMul(r),a=i.redMul(n),s=t.z.redMul(o.redAdd(a).redSqr()),u=t.x.redMul(o.redISub(a).redSqr());return this.curve.point(s,u)},f.prototype.mul=function(e){for(var t=e.clone(),r=this,n=this.curve.point(null,null),i=[];0!==t.cmpn(0);t.iushrn(1))i.push(t.andln(1));for(var o=i.length-1;o>=0;o--)0===i[o]?(r=r.diffAdd(n,this),n=n.dbl()):(n=r.diffAdd(n,this),r=r.dbl());return n},f.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},f.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},f.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},f.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},f.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(e,t,r){"use strict";var n=r(58),i=r(13),o=r(5),a=r(3),s=n.base,u=i.utils.assert;function f(e){this.twisted=1!=(0|e.a),this.mOneA=this.twisted&&-1==(0|e.a),this.extended=this.mOneA,s.call(this,"edwards",e),this.a=new o(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new o(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new o(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),u(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|e.c)}function c(e,t,r,n,i){s.BasePoint.call(this,e,"projective"),null===t&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new o(t,16),this.y=new o(r,16),this.z=n?new o(n,16):this.curve.one,this.t=i&&new o(i,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}a(f,s),e.exports=f,f.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},f.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},f.prototype.jpoint=function(e,t,r,n){return this.point(e,t,r,n)},f.prototype.pointFromX=function(e,t){(e=new o(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),n=this.c2.redSub(this.a.redMul(r)),i=this.one.redSub(this.c2.redMul(this.d).redMul(r)),a=n.redMul(i.redInvm()),s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");var u=s.fromRed().isOdd();return(t&&!u||!t&&u)&&(s=s.redNeg()),this.point(e,s)},f.prototype.pointFromY=function(e,t){(e=new o(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),n=r.redSub(this.c2),i=r.redMul(this.d).redMul(this.c2).redSub(this.a),a=n.redMul(i.redInvm());if(0===a.cmp(this.zero)){if(t)throw new Error("invalid point");return this.point(this.zero,e)}var s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");return s.fromRed().isOdd()!==t&&(s=s.redNeg()),this.point(s,e)},f.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),r=e.y.redSqr(),n=t.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(r)));return 0===n.cmp(i)},a(c,s.BasePoint),f.prototype.pointFromJSON=function(e){return c.fromJSON(this,e)},f.prototype.point=function(e,t,r,n){return new c(this,e,t,r,n)},c.fromJSON=function(e,t){return new c(e,t[0],t[1],t[2])},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},c.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(e),i=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),o=n.redAdd(t),a=o.redSub(r),s=n.redSub(t),u=i.redMul(a),f=o.redMul(s),c=i.redMul(s),h=a.redMul(o);return this.curve.point(u,f,h,c)},c.prototype._projDbl=function(){var e,t,r,n=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),o=this.y.redSqr();if(this.curve.twisted){var a=(f=this.curve._mulA(i)).redAdd(o);if(this.zOne)e=n.redSub(i).redSub(o).redMul(a.redSub(this.curve.two)),t=a.redMul(f.redSub(o)),r=a.redSqr().redSub(a).redSub(a);else{var s=this.z.redSqr(),u=a.redSub(s).redISub(s);e=n.redSub(i).redISub(o).redMul(u),t=a.redMul(f.redSub(o)),r=a.redMul(u)}}else{var f=i.redAdd(o);s=this.curve._mulC(this.z).redSqr(),u=f.redSub(s).redSub(s);e=this.curve._mulC(n.redISub(f)).redMul(u),t=this.curve._mulC(f).redMul(i.redISub(o)),r=f.redMul(u)}return this.curve.point(e,t,r)},c.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},c.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),i=this.z.redMul(e.z.redAdd(e.z)),o=r.redSub(t),a=i.redSub(n),s=i.redAdd(n),u=r.redAdd(t),f=o.redMul(a),c=s.redMul(u),h=o.redMul(u),d=a.redMul(s);return this.curve.point(f,c,d,h)},c.prototype._projAdd=function(e){var t,r,n=this.z.redMul(e.z),i=n.redSqr(),o=this.x.redMul(e.x),a=this.y.redMul(e.y),s=this.curve.d.redMul(o).redMul(a),u=i.redSub(s),f=i.redAdd(s),c=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(o).redISub(a),h=n.redMul(u).redMul(c);return this.curve.twisted?(t=n.redMul(f).redMul(a.redSub(this.curve._mulA(o))),r=u.redMul(f)):(t=n.redMul(f).redMul(a.redSub(o)),r=this.curve._mulC(u).redMul(f)),this.curve.point(h,t,r)},c.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},c.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!1)},c.prototype.jmulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!0)},c.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},c.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()},c.prototype.getY=function(){return this.normalize(),this.y.fromRed()},c.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},c.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var r=e.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(n),0===this.x.cmp(t))return!0}},c.prototype.toP=c.prototype.normalize,c.prototype.mixedAdd=c.prototype.add},function(e,t,r){"use strict";var n,i=t,o=r(36),a=r(13),s=a.utils.assert;function u(e){"short"===e.type?this.curve=new a.curve.short(e):"edwards"===e.type?this.curve=new a.curve.edwards(e):this.curve=new a.curve.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,s(this.g.validate(),"Invalid curve"),s(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function f(e,t){Object.defineProperty(i,e,{configurable:!0,enumerable:!0,get:function(){var r=new u(t);return Object.defineProperty(i,e,{configurable:!0,enumerable:!0,value:r}),r}})}i.PresetCurve=u,f("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:o.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),f("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:o.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),f("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:o.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),f("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:o.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),f("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:o.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),f("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["9"]}),f("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{n=r(365)}catch(e){n=void 0}f("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:o.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",n]})},function(e,t,r){"use strict";e.exports={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}}},function(e,t,r){"use strict";var n=r(0)(r(1)),i=r(5),o=r(112),a=r(13),s=a.utils.assert,u=r(367),f=r(368);function c(e){if(!(this instanceof c))return new c(e);"string"==typeof e&&(s(a.curves.hasOwnProperty(e),"Unknown curve "+e),e=a.curves[e]),e instanceof a.curves.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}e.exports=c,c.prototype.keyPair=function(e){return new u(this,e)},c.prototype.keyFromPrivate=function(e,t){return u.fromPrivate(this,e,t)},c.prototype.keyFromPublic=function(e,t){return u.fromPublic(this,e,t)},c.prototype.genKeyPair=function(e){e||(e={});for(var t=new o({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||a.rand(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.n.toArray()}),r=this.n.byteLength(),n=this.n.sub(new i(2));;){var s=new i(t.generate(r));if(!(s.cmp(n)>0))return s.iaddn(1),this.keyFromPrivate(s)}},c.prototype._truncateToN=function(e,t){var r=8*e.byteLength()-this.n.bitLength();return r>0&&(e=e.ushrn(r)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},c.prototype.sign=function(e,t,r,a){"object"===(0,n.default)(r)&&(a=r,r=null),a||(a={}),t=this.keyFromPrivate(t,r),e=this._truncateToN(new i(e,16));for(var s=this.n.byteLength(),u=t.getPrivate().toArray("be",s),c=e.toArray("be",s),h=new o({hash:this.hash,entropy:u,nonce:c,pers:a.pers,persEnc:a.persEnc||"utf8"}),d=this.n.sub(new i(1)),l=0;;l++){var p=a.k?a.k(l):new i(h.generate(this.n.byteLength()));if(!((p=this._truncateToN(p,!0)).cmpn(1)<=0||p.cmp(d)>=0)){var b=this.g.mul(p);if(!b.isInfinity()){var m=b.getX(),y=m.umod(this.n);if(0!==y.cmpn(0)){var v=p.invm(this.n).mul(y.mul(t.getPrivate()).iadd(e));if(0!==(v=v.umod(this.n)).cmpn(0)){var g=(b.getY().isOdd()?1:0)|(0!==m.cmp(y)?2:0);return a.canonical&&v.cmp(this.nh)>0&&(v=this.n.sub(v),g^=1),new f({r:y,s:v,recoveryParam:g})}}}}}},c.prototype.verify=function(e,t,r,n){e=this._truncateToN(new i(e,16)),r=this.keyFromPublic(r,n);var o=(t=new f(t,"hex")).r,a=t.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var s,u=a.invm(this.n),c=u.mul(e).umod(this.n),h=u.mul(o).umod(this.n);return this.curve._maxwellTrick?!(s=this.g.jmulAdd(c,r.getPublic(),h)).isInfinity()&&s.eqXToP(o):!(s=this.g.mulAdd(c,r.getPublic(),h)).isInfinity()&&0===s.getX().umod(this.n).cmp(o)},c.prototype.recoverPubKey=function(e,t,r,n){s((3&r)===r,"The recovery param is more than two bits"),t=new f(t,n);var o=this.n,a=new i(e),u=t.r,c=t.s,h=1&r,d=r>>1;if(u.cmp(this.curve.p.umod(this.curve.n))>=0&&d)throw new Error("Unable to find sencond key candinate");u=d?this.curve.pointFromX(u.add(this.curve.n),h):this.curve.pointFromX(u,h);var l=t.r.invm(o),p=o.sub(a).mul(l).umod(o),b=c.mul(l).umod(o);return this.g.mulAdd(p,u,b)},c.prototype.getKeyRecoveryParam=function(e,t,r,n){if(null!==(t=new f(t,n)).recoveryParam)return t.recoveryParam;for(var i=0;i<4;i++){var o;try{o=this.recoverPubKey(e,t,i)}catch(e){continue}if(o.eq(r))return i}throw new Error("Unable to find valid recovery factor")}},function(e,t,r){"use strict";var n=r(5),i=r(13).utils.assert;function o(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}e.exports=o,o.fromPublic=function(e,t,r){return t instanceof o?t:new o(e,{pub:t,pubEnc:r})},o.fromPrivate=function(e,t,r){return t instanceof o?t:new o(e,{priv:t,privEnc:r})},o.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},o.prototype.getPublic=function(e,t){return"string"==typeof e&&(t=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),t?this.pub.encode(t,e):this.pub},o.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},o.prototype._importPrivate=function(e,t){this.priv=new n(e,t||16),this.priv=this.priv.umod(this.ec.curve.n)},o.prototype._importPublic=function(e,t){if(e.x||e.y)return"mont"===this.ec.curve.type?i(e.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||i(e.x&&e.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,t)},o.prototype.derive=function(e){return e.mul(this.priv).getX()},o.prototype.sign=function(e,t,r){return this.ec.sign(e,this,t,r)},o.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},o.prototype.inspect=function(){return""}},function(e,t,r){"use strict";var n=r(5),i=r(13).utils,o=i.assert;function a(e,t){if(e instanceof a)return e;this._importDER(e,t)||(o(e.r&&e.s,"Signature without r or s"),this.r=new n(e.r,16),this.s=new n(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function s(){this.place=0}function u(e,t){var r=e[t.place++];if(!(128&r))return r;for(var n=15&r,i=0,o=0,a=t.place;o>>3);for(e.push(128|r);--r;)e.push(t>>>(r<<3)&255);e.push(t)}}e.exports=a,a.prototype._importDER=function(e,t){e=i.toArray(e,t);var r=new s;if(48!==e[r.place++])return!1;if(u(e,r)+r.place!==e.length)return!1;if(2!==e[r.place++])return!1;var o=u(e,r),a=e.slice(r.place,o+r.place);if(r.place+=o,2!==e[r.place++])return!1;var f=u(e,r);if(e.length!==f+r.place)return!1;var c=e.slice(r.place,f+r.place);return 0===a[0]&&128&a[1]&&(a=a.slice(1)),0===c[0]&&128&c[1]&&(c=c.slice(1)),this.r=new n(a),this.s=new n(c),this.recoveryParam=null,!0},a.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r)),t=f(t),r=f(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];c(n,t.length),(n=n.concat(t)).push(2),c(n,r.length);var o=n.concat(r),a=[48];return c(a,o.length),a=a.concat(o),i.encode(a,e)}},function(e,t,r){"use strict";var n=r(36),i=r(13),o=i.utils,a=o.assert,s=o.parseBytes,u=r(370),f=r(371);function c(e){if(a("ed25519"===e,"only tested with ed25519 so far"),!(this instanceof c))return new c(e);e=i.curves[e].curve;this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=n.sha512}e.exports=c,c.prototype.sign=function(e,t){e=s(e);var r=this.keyFromSecret(t),n=this.hashInt(r.messagePrefix(),e),i=this.g.mul(n),o=this.encodePoint(i),a=this.hashInt(o,r.pubBytes(),e).mul(r.priv()),u=n.add(a).umod(this.curve.n);return this.makeSignature({R:i,S:u,Rencoded:o})},c.prototype.verify=function(e,t,r){e=s(e),t=this.makeSignature(t);var n=this.keyFromPublic(r),i=this.hashInt(t.Rencoded(),n.pubBytes(),e),o=this.g.mul(t.S());return t.R().add(n.pub().mul(i)).eq(o)},c.prototype.hashInt=function(){for(var e=this.hash(),t=0;t=t)throw new Error("invalid sig")}e.exports=function(e,r,u,f,c){var h=o(u);if("ec"===h.type){if("ecdsa"!==f&&"ecdsa/rsa"!==f)throw new Error("wrong public key type");return function(e,t,r){var n=a[r.data.algorithm.curve.join(".")];if(!n)throw new Error("unknown curve "+r.data.algorithm.curve.join("."));var o=new i(n),s=r.data.subjectPrivateKey.data;return o.verify(t,e,s)}(e,r,h)}if("dsa"===h.type){if("dsa"!==f)throw new Error("wrong public key type");return function(e,t,r){var i=r.data.p,a=r.data.q,u=r.data.g,f=r.data.pub_key,c=o.signature.decode(e,"der"),h=c.s,d=c.r;s(h,a),s(d,a);var l=n.mont(i),p=h.invm(a);return 0===u.toRed(l).redPow(new n(t).mul(p).mod(a)).fromRed().mul(f.toRed(l).redPow(d.mul(p).mod(a)).fromRed()).mod(i).mod(a).cmp(d)}(e,r,h)}if("rsa"!==f&&"ecdsa/rsa"!==f)throw new Error("wrong public key type");r=t.concat([c,r]);for(var d=h.modulus.byteLength(),l=[1],p=0;r.length+l.length+2r-d-2)throw new Error("message too long");var l=h.alloc(r-n-d-2),p=r-c-1,b=i(c),m=s(h.concat([f,l,h.alloc(1,1),t],p),a(b,p)),y=s(b,a(m,c));return new u(h.concat([h.alloc(1),y,m],r))}(p,t);else if(1===d)l=function(e,t,r){var n,o=t.length,a=e.modulus.byteLength();if(o>a-11)throw new Error("message too long");n=r?h.alloc(a-o-3,255):function(e){var t,r=h.allocUnsafe(e),n=0,o=i(2*e),a=0;for(;n=0)throw new Error("data too long for modulus")}return r?c(l,p):f(l,p)}},function(e,t,r){"use strict";var n=r(59),i=r(154),o=r(155),a=r(5),s=r(84),u=r(30),f=r(156),c=r(4).Buffer;e.exports=function(e,t,r){var h;h=e.padding?e.padding:r?1:4;var d,l=n(e),p=l.modulus.byteLength();if(t.length>p||new a(t).cmp(l.modulus)>=0)throw new Error("decryption error");d=r?f(new a(t),l):s(t,l);var b=c.alloc(p-d.length);if(d=c.concat([b,d],p),4===h)return function(e,t){var r=e.modulus.byteLength(),n=u("sha1").update(c.alloc(0)).digest(),a=n.length;if(0!==t[0])throw new Error("decryption error");var s=t.slice(1,a+1),f=t.slice(a+1),h=o(s,i(f,a)),d=o(f,i(h,r-a-1));if(function(e,t){e=c.from(e),t=c.from(t);var r=0,n=e.length;e.length!==t.length&&(r++,n=Math.min(e.length,t.length));var i=-1;for(;++i=t.length){o++;break}var a=t.slice(2,i-1);("0002"!==n.toString("hex")&&!r||"0001"!==n.toString("hex")&&r)&&o++;a.length<8&&o++;if(o)throw new Error("decryption error");return t.slice(i)}(0,d,r);if(3===h)return d;throw new Error("unknown padding")}},function(e,t,r){"use strict";(function(e,n){function i(){throw new Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11")}var o=r(4),a=r(26),s=o.Buffer,u=o.kMaxLength,f=e.crypto||e.msCrypto,c=Math.pow(2,32)-1;function h(e,t){if("number"!=typeof e||e!=e)throw new TypeError("offset must be a number");if(e>c||e<0)throw new TypeError("offset must be a uint32");if(e>u||e>t)throw new RangeError("offset out of range")}function d(e,t,r){if("number"!=typeof e||e!=e)throw new TypeError("size must be a number");if(e>c||e<0)throw new TypeError("size must be a uint32");if(e+t>r||e>u)throw new RangeError("buffer too small")}function l(e,t,r,i){if(n.browser){var o=e.buffer,s=new Uint8Array(o,t,r);return f.getRandomValues(s),i?void n.nextTick((function(){i(null,e)})):e}if(!i)return a(r).copy(e,t),e;a(r,(function(r,n){if(r)return i(r);n.copy(e,t),i(null,e)}))}f&&f.getRandomValues||!n.browser?(t.randomFill=function(t,r,n,i){if(!(s.isBuffer(t)||t instanceof e.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if("function"==typeof r)i=r,r=0,n=t.length;else if("function"==typeof n)i=n,n=t.length-r;else if("function"!=typeof i)throw new TypeError('"cb" argument must be a function');return h(r,t.length),d(n,r,t.length),l(t,r,n,i)},t.randomFillSync=function(t,r,n){void 0===r&&(r=0);if(!(s.isBuffer(t)||t instanceof e.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');h(r,t.length),void 0===n&&(n=t.length-r);return d(n,r,t.length),l(t,r,n)}):(t.randomFill=i,t.randomFillSync=i)}).call(this,r(8),r(11))},function(e,t,r){"use strict";var n=r(5),i=r(77),o=function(e){return new n(e.slice(2),16)},a=function(e){var t="0x"+("0x"===e.slice(0,2)?new n(e.slice(2),16):new n(e,10)).toString("hex");return"0x0"===t?"0x":t},s=function(e){return"string"==typeof e?/^0x/.test(e)?e:"0x"+e:"0x"+new n(e).toString("hex")},u=function(e){return o(e).toNumber()},f=function(e){return function(t,r){return"0x"+o(t)[e](o(r)).toString("hex")}},c=f("add"),h=f("mul"),d=f("div"),l=f("sub");e.exports={toString:function(e){return o(e).toString(10)},fromString:a,toNumber:u,fromNumber:s,toEther:function(e){return u(d(e,a("10000000000")))/1e8},fromEther:function(e){return h(s(Math.floor(1e8*e)),a("10000000000"))},toUint256:function(e){return i.pad(32,e)},add:c,mul:h,div:d,sub:l}},function(e,t,r){"use strict";(function(t){!function(r){function n(e){var t=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]),r=1779033703,n=3144134277,i=1013904242,o=2773480762,a=1359893119,s=2600822924,u=528734635,f=1541459225,c=new Uint32Array(64);function h(e){for(var h=0,d=e.length;d>=64;){var l=r,p=n,b=i,m=o,y=a,v=s,g=u,w=f,_=void 0,k=void 0,A=void 0,S=void 0,E=void 0;for(k=0;k<16;k++)A=h+4*k,c[k]=(255&e[A])<<24|(255&e[A+1])<<16|(255&e[A+2])<<8|255&e[A+3];for(k=16;k<64;k++)S=((_=c[k-2])>>>17|_<<15)^(_>>>19|_<<13)^_>>>10,E=((_=c[k-15])>>>7|_<<25)^(_>>>18|_<<14)^_>>>3,c[k]=(S+c[k-7]|0)+(E+c[k-16]|0)|0;for(k=0;k<64;k++)S=(((y>>>6|y<<26)^(y>>>11|y<<21)^(y>>>25|y<<7))+(y&v^~y&g)|0)+(w+(t[k]+c[k]|0)|0)|0,E=((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+(l&p^l&b^p&b)|0,w=g,g=v,v=y,y=m+S|0,m=b,b=p,p=l,l=S+E|0;r=r+l|0,n=n+p|0,i=i+b|0,o=o+m|0,a=a+y|0,s=s+v|0,u=u+g|0,f=f+w|0,h+=64,d-=64}}h(e);var d,l=e.length%64,p=e.length/536870912|0,b=e.length<<3,m=l<56?56:120,y=e.slice(e.length-l,e.length);for(y.push(128),d=l+1;d>>24&255),y.push(p>>>16&255),y.push(p>>>8&255),y.push(p>>>0&255),y.push(b>>>24&255),y.push(b>>>16&255),y.push(b>>>8&255),y.push(b>>>0&255),h(y),[r>>>24&255,r>>>16&255,r>>>8&255,r>>>0&255,n>>>24&255,n>>>16&255,n>>>8&255,n>>>0&255,i>>>24&255,i>>>16&255,i>>>8&255,i>>>0&255,o>>>24&255,o>>>16&255,o>>>8&255,o>>>0&255,a>>>24&255,a>>>16&255,a>>>8&255,a>>>0&255,s>>>24&255,s>>>16&255,s>>>8&255,s>>>0&255,u>>>24&255,u>>>16&255,u>>>8&255,u>>>0&255,f>>>24&255,f>>>16&255,f>>>8&255,f>>>0&255]}function i(e,t,r){e=e.length<=64?e:n(e);var i,o=64+t.length+4,a=new Array(o),s=new Array(64),u=[];for(i=0;i<64;i++)a[i]=54;for(i=0;i=o-4;e--){if(a[e]++,a[e]<=255)return;a[e]=0}}for(;r>=32;)f(),u=u.concat(n(s.concat(n(a)))),r-=32;return r>0&&(f(),u=u.concat(n(s.concat(n(a))).slice(0,r))),u}function o(e,t,r,n,i){var o;for(f(e,16*(2*r-1),i,0,16),o=0;o<2*r;o++)u(e,16*o,i,16),s(i,n),f(i,0,e,t+16*o,16);for(o=0;o>>32-t}function s(e,t){f(e,0,t,0,16);for(var r=8;r>0;r-=2)t[4]^=a(t[0]+t[12],7),t[8]^=a(t[4]+t[0],9),t[12]^=a(t[8]+t[4],13),t[0]^=a(t[12]+t[8],18),t[9]^=a(t[5]+t[1],7),t[13]^=a(t[9]+t[5],9),t[1]^=a(t[13]+t[9],13),t[5]^=a(t[1]+t[13],18),t[14]^=a(t[10]+t[6],7),t[2]^=a(t[14]+t[10],9),t[6]^=a(t[2]+t[14],13),t[10]^=a(t[6]+t[2],18),t[3]^=a(t[15]+t[11],7),t[7]^=a(t[3]+t[15],9),t[11]^=a(t[7]+t[3],13),t[15]^=a(t[11]+t[7],18),t[1]^=a(t[0]+t[3],7),t[2]^=a(t[1]+t[0],9),t[3]^=a(t[2]+t[1],13),t[0]^=a(t[3]+t[2],18),t[6]^=a(t[5]+t[4],7),t[7]^=a(t[6]+t[5],9),t[4]^=a(t[7]+t[6],13),t[5]^=a(t[4]+t[7],18),t[11]^=a(t[10]+t[9],7),t[8]^=a(t[11]+t[10],9),t[9]^=a(t[8]+t[11],13),t[10]^=a(t[9]+t[8],18),t[12]^=a(t[15]+t[14],7),t[13]^=a(t[12]+t[15],9),t[14]^=a(t[13]+t[12],13),t[15]^=a(t[14]+t[13],18);for(var n=0;n<16;++n)e[n]+=t[n]}function u(e,t,r,n){for(var i=0;i=256)return!1}return!0}function h(e,t){if("number"!=typeof e||e%1)throw new Error("invalid "+t);return e}function d(e,r,n,a,s,d,l){if(n=h(n,"N"),a=h(a,"r"),s=h(s,"p"),d=h(d,"dkLen"),0===n||0!=(n&n-1))throw new Error("N must be power of 2");if(n>2147483647/128/a)throw new Error("N too large");if(a>2147483647/128/s)throw new Error("r too large");if(!c(e))throw new Error("password must be an array or buffer");if(e=Array.prototype.slice.call(e),!c(r))throw new Error("salt must be an array or buffer");r=Array.prototype.slice.call(r);for(var p=i(e,r,128*s*a),b=new Uint32Array(32*s*a),m=0;mP&&(r=P);for(var c=0;cP&&(r=P);for(var m=0;m>0&255),p.push(b[B]>>8&255),p.push(b[B]>>16&255),p.push(b[B]>>24&255);var R=i(e,p,d);return l&&l(null,1,R),R}l&&T(t)};if(!l)for(;;){var B=U();if(null!=B)return B}U()}var l={scrypt:function(e,t,r,n,i,o,a){return new Promise((function(s,u){var f=0;a&&a(0),d(e,t,r,n,i,o,(function(e,t,r){if(e)u(e);else if(r)a&&1!==f&&a(1),s(new Uint8Array(r));else if(a&&t!==f)return f=t,a(t)}))}))},syncScrypt:function(e,t,r,n,i,o){return new Uint8Array(d(e,t,r,n,i,o))}};e.exports=l}()}).call(this,r(101).setImmediate)},function(e,t,r){"use strict";var n=r(394),i=r(395),o=i;o.v1=n,o.v4=i,e.exports=o},function(e,t,r){"use strict";var n,i,o=r(158),a=r(159),s=0,u=0;e.exports=function(e,t,r){var f=t&&r||0,c=t||[],h=(e=e||{}).node||n,d=void 0!==e.clockseq?e.clockseq:i;if(null==h||null==d){var l=o();null==h&&(h=n=[1|l[0],l[1],l[2],l[3],l[4],l[5]]),null==d&&(d=i=16383&(l[6]<<8|l[7]))}var p=void 0!==e.msecs?e.msecs:(new Date).getTime(),b=void 0!==e.nsecs?e.nsecs:u+1,m=p-s+(b-u)/1e4;if(m<0&&void 0===e.clockseq&&(d=d+1&16383),(m<0||p>s)&&void 0===e.nsecs&&(b=0),b>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");s=p,u=b,i=d;var y=(1e4*(268435455&(p+=122192928e5))+b)%4294967296;c[f++]=y>>>24&255,c[f++]=y>>>16&255,c[f++]=y>>>8&255,c[f++]=255&y;var v=p/4294967296*1e4&268435455;c[f++]=v>>>8&255,c[f++]=255&v,c[f++]=v>>>24&15|16,c[f++]=v>>>16&255,c[f++]=d>>>8|128,c[f++]=255&d;for(var g=0;g<6;++g)c[f+g]=h[g];return t||a(c)}},function(e,t,r){"use strict";var n=r(158),i=r(159);e.exports=function(e,t,r){var o=t&&r||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var a=(e=e||{}).random||(e.rng||n)();if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,t)for(var s=0;s<16;++s)t[o+s]=a[s];return t||i(a)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(160);t.Transaction=n.default;var i=r(428);t.FakeTransaction=i.default},function(e,t,r){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0});var n=r(5);function i(e,t){if("00"===e.slice(0,2))throw new Error("invalid RLP: extra zeros");return parseInt(e,t)}function o(t,r){if(t<56)return e.from([t+r]);var n=s(t),i=s(r+55+n.length/2);return e.from(i+n,"hex")}function a(e){return"0x"===e.slice(0,2)}function s(e){if(e<0)throw new Error("Invalid integer as argument, must be unsigned!");var t=e.toString(16);return t.length%2?"0"+t:t}function u(t){if(!e.isBuffer(t)){if("string"==typeof t)return a(t)?e.from((i="string"!=typeof(o=t)?o:a(o)?o.slice(2):o).length%2?"0"+i:i,"hex"):e.from(t);if("number"==typeof t)return t?(r=s(t),e.from(r,"hex")):e.from([]);if(null==t)return e.from([]);if(t instanceof Uint8Array)return e.from(t);if(n.isBN(t))return e.from(t.toArray());throw new Error("invalid type")}var r,i,o;return t}t.encode=function t(r){if(Array.isArray(r)){for(var n=[],i=0;ir.length)throw new Error("invalid rlp: total length is larger than the data");if(0===(s=r.slice(o,h)).length)throw new Error("invalid rlp, List has a invalid length");for(;s.length;)u=t(s),f.push(u.data),s=u.remainder;return{data:f,remainder:r.slice(h)}}(u(t));if(r)return n;if(0!==n.remainder.length)throw new Error("invalid remainder");return n.data},t.getLength=function(t){if(!t||0===t.length)return e.from([]);var r=u(t),n=r[0];if(n<=127)return r.length;if(n<=183)return n-127;if(n<=191)return n-182;if(n<=247)return n-191;var o=n-246;return o+i(r.slice(1,o).toString("hex"),16)}}).call(this,r(2).Buffer)},function(e,t,r){"use strict";e.exports=r(399)(r(402))},function(e,t,r){"use strict";var n=r(400),i=r(401);e.exports=function(e){var t=n(e),r=i(e);return function(e,n){switch("string"==typeof e?e.toLowerCase():e){case"keccak224":return new t(1152,448,null,224,n);case"keccak256":return new t(1088,512,null,256,n);case"keccak384":return new t(832,768,null,384,n);case"keccak512":return new t(576,1024,null,512,n);case"sha3-224":return new t(1152,448,6,224,n);case"sha3-256":return new t(1088,512,6,256,n);case"sha3-384":return new t(832,768,6,384,n);case"sha3-512":return new t(576,1024,6,512,n);case"shake128":return new r(1344,256,31,n);case"shake256":return new r(1088,512,31,n);default:throw new Error("Invald algorithm: "+e)}}}},function(e,t,r){"use strict";var n=r(4).Buffer,i=r(42).Transform,o=r(3);e.exports=function(e){function t(t,r,n,o,a){i.call(this,a),this._rate=t,this._capacity=r,this._delimitedSuffix=n,this._hashBitLength=o,this._options=a,this._state=new e,this._state.initialize(t,r),this._finalized=!1}return o(t,i),t.prototype._transform=function(e,t,r){var n=null;try{this.update(e,t)}catch(e){n=e}r(n)},t.prototype._flush=function(e){var t=null;try{this.push(this.digest())}catch(e){t=e}e(t)},t.prototype.update=function(e,t){if(!n.isBuffer(e)&&"string"!=typeof e)throw new TypeError("Data must be a string or a buffer");if(this._finalized)throw new Error("Digest already called");return n.isBuffer(e)||(e=n.from(e,t)),this._state.absorb(e),this},t.prototype.digest=function(e){if(this._finalized)throw new Error("Digest already called");this._finalized=!0,this._delimitedSuffix&&this._state.absorbLastFewBits(this._delimitedSuffix);var t=this._state.squeeze(this._hashBitLength/8);return void 0!==e&&(t=t.toString(e)),this._resetState(),t},t.prototype._resetState=function(){return this._state.initialize(this._rate,this._capacity),this},t.prototype._clone=function(){var e=new t(this._rate,this._capacity,this._delimitedSuffix,this._hashBitLength,this._options);return this._state.copy(e._state),e._finalized=this._finalized,e},t}},function(e,t,r){"use strict";var n=r(4).Buffer,i=r(42).Transform,o=r(3);e.exports=function(e){function t(t,r,n,o){i.call(this,o),this._rate=t,this._capacity=r,this._delimitedSuffix=n,this._options=o,this._state=new e,this._state.initialize(t,r),this._finalized=!1}return o(t,i),t.prototype._transform=function(e,t,r){var n=null;try{this.update(e,t)}catch(e){n=e}r(n)},t.prototype._flush=function(){},t.prototype._read=function(e){this.push(this.squeeze(e))},t.prototype.update=function(e,t){if(!n.isBuffer(e)&&"string"!=typeof e)throw new TypeError("Data must be a string or a buffer");if(this._finalized)throw new Error("Squeeze already called");return n.isBuffer(e)||(e=n.from(e,t)),this._state.absorb(e),this},t.prototype.squeeze=function(e,t){this._finalized||(this._finalized=!0,this._state.absorbLastFewBits(this._delimitedSuffix));var r=this._state.squeeze(e);return void 0!==t&&(r=r.toString(t)),r},t.prototype._resetState=function(){return this._state.initialize(this._rate,this._capacity),this},t.prototype._clone=function(){var e=new t(this._rate,this._capacity,this._delimitedSuffix,this._options);return this._state.copy(e._state),e._finalized=this._finalized,e},t}},function(e,t,r){"use strict";var n=r(4).Buffer,i=r(403);function o(){this.state=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.blockSize=null,this.count=0,this.squeezing=!1}o.prototype.initialize=function(e,t){for(var r=0;r<50;++r)this.state[r]=0;this.blockSize=e/8,this.count=0,this.squeezing=!1},o.prototype.absorb=function(e){for(var t=0;t>>this.count%4*8&255,this.count+=1,this.count===this.blockSize&&(i.p1600(this.state),this.count=0);return t},o.prototype.copy=function(e){for(var t=0;t<50;++t)e.state[t]=this.state[t];e.blockSize=this.blockSize,e.count=this.count,e.squeezing=this.squeezing},e.exports=o},function(e,t,r){"use strict";var n=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648];t.p1600=function(e){for(var t=0;t<24;++t){var r=e[0]^e[10]^e[20]^e[30]^e[40],i=e[1]^e[11]^e[21]^e[31]^e[41],o=e[2]^e[12]^e[22]^e[32]^e[42],a=e[3]^e[13]^e[23]^e[33]^e[43],s=e[4]^e[14]^e[24]^e[34]^e[44],u=e[5]^e[15]^e[25]^e[35]^e[45],f=e[6]^e[16]^e[26]^e[36]^e[46],c=e[7]^e[17]^e[27]^e[37]^e[47],h=e[8]^e[18]^e[28]^e[38]^e[48],d=e[9]^e[19]^e[29]^e[39]^e[49],l=h^(o<<1|a>>>31),p=d^(a<<1|o>>>31),b=e[0]^l,m=e[1]^p,y=e[10]^l,v=e[11]^p,g=e[20]^l,w=e[21]^p,_=e[30]^l,k=e[31]^p,A=e[40]^l,S=e[41]^p;l=r^(s<<1|u>>>31),p=i^(u<<1|s>>>31);var E=e[2]^l,x=e[3]^p,M=e[12]^l,I=e[13]^p,O=e[22]^l,C=e[23]^p,P=e[32]^l,T=e[33]^p,U=e[42]^l,B=e[43]^p;l=o^(f<<1|c>>>31),p=a^(c<<1|f>>>31);var R=e[4]^l,N=e[5]^p,j=e[14]^l,L=e[15]^p,F=e[24]^l,D=e[25]^p,q=e[34]^l,z=e[35]^p,H=e[44]^l,K=e[45]^p;l=s^(h<<1|d>>>31),p=u^(d<<1|h>>>31);var V=e[6]^l,G=e[7]^p,W=e[16]^l,Y=e[17]^p,$=e[26]^l,J=e[27]^p,Z=e[36]^l,X=e[37]^p,Q=e[46]^l,ee=e[47]^p;l=f^(r<<1|i>>>31),p=c^(i<<1|r>>>31);var te=e[8]^l,re=e[9]^p,ne=e[18]^l,ie=e[19]^p,oe=e[28]^l,ae=e[29]^p,se=e[38]^l,ue=e[39]^p,fe=e[48]^l,ce=e[49]^p,he=b,de=m,le=v<<4|y>>>28,pe=y<<4|v>>>28,be=g<<3|w>>>29,me=w<<3|g>>>29,ye=k<<9|_>>>23,ve=_<<9|k>>>23,ge=A<<18|S>>>14,we=S<<18|A>>>14,_e=E<<1|x>>>31,ke=x<<1|E>>>31,Ae=I<<12|M>>>20,Se=M<<12|I>>>20,Ee=O<<10|C>>>22,xe=C<<10|O>>>22,Me=T<<13|P>>>19,Ie=P<<13|T>>>19,Oe=U<<2|B>>>30,Ce=B<<2|U>>>30,Pe=N<<30|R>>>2,Te=R<<30|N>>>2,Ue=j<<6|L>>>26,Be=L<<6|j>>>26,Re=D<<11|F>>>21,Ne=F<<11|D>>>21,je=q<<15|z>>>17,Le=z<<15|q>>>17,Fe=K<<29|H>>>3,De=H<<29|K>>>3,qe=V<<28|G>>>4,ze=G<<28|V>>>4,He=Y<<23|W>>>9,Ke=W<<23|Y>>>9,Ve=$<<25|J>>>7,Ge=J<<25|$>>>7,We=Z<<21|X>>>11,Ye=X<<21|Z>>>11,$e=ee<<24|Q>>>8,Je=Q<<24|ee>>>8,Ze=te<<27|re>>>5,Xe=re<<27|te>>>5,Qe=ne<<20|ie>>>12,et=ie<<20|ne>>>12,tt=ae<<7|oe>>>25,rt=oe<<7|ae>>>25,nt=se<<8|ue>>>24,it=ue<<8|se>>>24,ot=fe<<14|ce>>>18,at=ce<<14|fe>>>18;e[0]=he^~Ae&Re,e[1]=de^~Se&Ne,e[10]=qe^~Qe&be,e[11]=ze^~et&me,e[20]=_e^~Ue&Ve,e[21]=ke^~Be&Ge,e[30]=Ze^~le&Ee,e[31]=Xe^~pe&xe,e[40]=Pe^~He&tt,e[41]=Te^~Ke&rt,e[2]=Ae^~Re&We,e[3]=Se^~Ne&Ye,e[12]=Qe^~be&Me,e[13]=et^~me&Ie,e[22]=Ue^~Ve&nt,e[23]=Be^~Ge&it,e[32]=le^~Ee&je,e[33]=pe^~xe&Le,e[42]=He^~tt&ye,e[43]=Ke^~rt&ve,e[4]=Re^~We&ot,e[5]=Ne^~Ye&at,e[14]=be^~Me&Fe,e[15]=me^~Ie&De,e[24]=Ve^~nt&ge,e[25]=Ge^~it&we,e[34]=Ee^~je&$e,e[35]=xe^~Le&Je,e[44]=tt^~ye&Oe,e[45]=rt^~ve&Ce,e[6]=We^~ot&he,e[7]=Ye^~at&de,e[16]=Me^~Fe&qe,e[17]=Ie^~De&ze,e[26]=nt^~ge&_e,e[27]=it^~we&ke,e[36]=je^~$e&Ze,e[37]=Le^~Je&Xe,e[46]=ye^~Oe&Pe,e[47]=ve^~Ce&Te,e[8]=ot^~he&Ae,e[9]=at^~de&Se,e[18]=Fe^~qe&Qe,e[19]=De^~ze&et,e[28]=ge^~_e&Ue,e[29]=we^~ke&Be,e[38]=$e^~Ze&le,e[39]=Je^~Xe&pe,e[48]=Oe^~Pe&He,e[49]=Ce^~Te&Ke,e[0]^=n[2*t],e[1]^=n[2*t+1]}}},function(e,t,r){"use strict";e.exports=r(405)(r(409))},function(e,t,r){"use strict";var n=r(406),i=r(407),o=r(162);function a(e,t){return void 0===e?t:(n.isBoolean(e,o.COMPRESSED_TYPE_INVALID),e)}e.exports=function(e){return{privateKeyVerify:function(t){return n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),32===t.length&&e.privateKeyVerify(t)},privateKeyExport:function(t,r){n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(t,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),r=a(r,!0);var s=e.privateKeyExport(t,r);return i.privateKeyExport(t,s,r)},privateKeyImport:function(t){if(n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),(t=i.privateKeyImport(t))&&32===t.length&&e.privateKeyVerify(t))return t;throw new Error(o.EC_PRIVATE_KEY_IMPORT_DER_FAIL)},privateKeyNegate:function(t){return n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(t,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),e.privateKeyNegate(t)},privateKeyModInverse:function(t){return n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(t,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),e.privateKeyModInverse(t)},privateKeyTweakAdd:function(t,r){return n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(t,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),e.privateKeyTweakAdd(t,r)},privateKeyTweakMul:function(t,r){return n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(t,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),e.privateKeyTweakMul(t,r)},publicKeyCreate:function(t,r){return n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(t,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),r=a(r,!0),e.publicKeyCreate(t,r)},publicKeyConvert:function(t,r){return n.isBuffer(t,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(t,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),r=a(r,!0),e.publicKeyConvert(t,r)},publicKeyVerify:function(t){return n.isBuffer(t,o.EC_PUBLIC_KEY_TYPE_INVALID),e.publicKeyVerify(t)},publicKeyTweakAdd:function(t,r,i){return n.isBuffer(t,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(t,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),i=a(i,!0),e.publicKeyTweakAdd(t,r,i)},publicKeyTweakMul:function(t,r,i){return n.isBuffer(t,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(t,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),i=a(i,!0),e.publicKeyTweakMul(t,r,i)},publicKeyCombine:function(t,r){n.isArray(t,o.EC_PUBLIC_KEYS_TYPE_INVALID),n.isLengthGTZero(t,o.EC_PUBLIC_KEYS_LENGTH_INVALID);for(var i=0;i=r)throw RangeError(n)}}).call(this,r(2).Buffer)},function(e,t,r){"use strict";var n=r(4).Buffer,i=r(408),o=n.from([48,129,211,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,133,48,129,130,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,33,2,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,36,3,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),a=n.from([48,130,1,19,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,165,48,129,162,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,65,4,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,72,58,218,119,38,163,196,101,93,164,251,252,14,17,8,168,253,23,180,72,166,133,84,25,156,71,208,143,251,16,212,184,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,68,3,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);t.privateKeyExport=function(e,t,r){var i=n.from(r?o:a);return e.copy(i,r?8:9),t.copy(i,r?181:214),i},t.privateKeyImport=function(e){var t=e.length,r=0;if(!(t2||t1?e[r+n-2]<<8:0);if(!(t<(r+=n)+i||t32||t1&&0===t[o]&&!(128&t[o+1]);--r,++o);for(var a=n.concat([n.from([0]),e.s]),s=33,u=0;s>1&&0===a[u]&&!(128&a[u+1]);--s,++u);return i.encode(t.slice(o),a.slice(u))},t.signatureImport=function(e){var t=n.alloc(32,0),r=n.alloc(32,0);try{var o=i.decode(e);if(33===o.r.length&&0===o.r[0]&&(o.r=o.r.slice(1)),o.r.length>32)throw new Error("R length is too long");if(33===o.s.length&&0===o.s[0]&&(o.s=o.s.slice(1)),o.s.length>32)throw new Error("S length is too long")}catch(e){return}return o.r.copy(t,32-o.r.length),o.s.copy(r,32-o.s.length),{r:t,s:r}},t.signatureImportLax=function(e){var t=n.alloc(32,0),r=n.alloc(32,0),i=e.length,o=0;if(48===e[o++]){var a=e[o++];if(!(128&a&&(o+=a-128)>i)&&2===e[o++]){var s=e[o++];if(128&s){if(o+(a=s-128)>i)return;for(;a>0&&0===e[o];o+=1,a-=1);for(s=0;a>0;o+=1,a-=1)s=(s<<8)+e[o]}if(!(s>i-o)){var u=o;if(o+=s,2===e[o++]){var f=e[o++];if(128&f){if(o+(a=f-128)>i)return;for(;a>0&&0===e[o];o+=1,a-=1);for(f=0;a>0;o+=1,a-=1)f=(f<<8)+e[o]}if(!(f>i-o)){var c=o;for(o+=f;s>0&&0===e[u];s-=1,u+=1);if(!(s>32)){var h=e.slice(u,u+s);for(h.copy(t,32-h.length);f>0&&0===e[c];f-=1,c+=1);if(!(f>32)){var d=e.slice(c,c+f);return d.copy(r,32-d.length),{r:t,s:r}}}}}}}}}},function(e,t,r){"use strict";var n=r(4).Buffer;e.exports={check:function(e){if(e.length<8)return!1;if(e.length>72)return!1;if(48!==e[0])return!1;if(e[1]!==e.length-2)return!1;if(2!==e[2])return!1;var t=e[3];if(0===t)return!1;if(5+t>=e.length)return!1;if(2!==e[4+t])return!1;var r=e[5+t];return 0!==r&&(6+t+r===e.length&&(!(128&e[4])&&(!(t>1&&0===e[4]&&!(128&e[5]))&&(!(128&e[t+6])&&!(r>1&&0===e[t+6]&&!(128&e[t+7]))))))},decode:function(e){if(e.length<8)throw new Error("DER sequence length is too short");if(e.length>72)throw new Error("DER sequence length is too long");if(48!==e[0])throw new Error("Expected DER sequence");if(e[1]!==e.length-2)throw new Error("DER sequence length is invalid");if(2!==e[2])throw new Error("Expected DER integer");var t=e[3];if(0===t)throw new Error("R length is zero");if(5+t>=e.length)throw new Error("R length is too long");if(2!==e[4+t])throw new Error("Expected DER integer (2)");var r=e[5+t];if(0===r)throw new Error("S length is zero");if(6+t+r!==e.length)throw new Error("S length is invalid");if(128&e[4])throw new Error("R value is negative");if(t>1&&0===e[4]&&!(128&e[5]))throw new Error("R value excessively padded");if(128&e[t+6])throw new Error("S value is negative");if(r>1&&0===e[t+6]&&!(128&e[t+7]))throw new Error("S value excessively padded");return{r:e.slice(4,4+t),s:e.slice(6+t)}},encode:function(e,t){var r=e.length,i=t.length;if(0===r)throw new Error("R length is zero");if(0===i)throw new Error("S length is zero");if(r>33)throw new Error("R length is too long");if(i>33)throw new Error("S length is too long");if(128&e[0])throw new Error("R value is negative");if(128&t[0])throw new Error("S value is negative");if(r>1&&0===e[0]&&!(128&e[1]))throw new Error("R value excessively padded");if(i>1&&0===t[0]&&!(128&t[1]))throw new Error("S value excessively padded");var o=n.allocUnsafe(6+r+i);return o[0]=48,o[1]=o.length-2,o[2]=2,o[3]=e.length,e.copy(o,4),o[4+r]=2,o[5+r]=t.length,t.copy(o,6+r),o}}},function(e,t,r){"use strict";var n=r(4).Buffer,i=r(30),o=r(5),a=r(13).ec,s=r(162),u=new a("secp256k1"),f=u.curve;function c(e){var t=e[0];switch(t){case 2:case 3:return 33!==e.length?null:function(e,t){var r=new o(t);if(r.cmp(f.p)>=0)return null;var n=(r=r.toRed(f.red)).redSqr().redIMul(r).redIAdd(f.b).redSqrt();return 3===e!==n.isOdd()&&(n=n.redNeg()),u.keyPair({pub:{x:r,y:n}})}(t,e.slice(1,33));case 4:case 6:case 7:return 65!==e.length?null:function(e,t,r){var n=new o(t),i=new o(r);if(n.cmp(f.p)>=0||i.cmp(f.p)>=0)return null;if(n=n.toRed(f.red),i=i.toRed(f.red),(6===e||7===e)&&i.isOdd()!==(7===e))return null;var a=n.redSqr().redIMul(n);return i.redSqr().redISub(a.redIAdd(f.b)).isZero()?u.keyPair({pub:{x:n,y:i}}):null}(t,e.slice(1,33),e.slice(33,65));default:return null}}t.privateKeyVerify=function(e){var t=new o(e);return t.cmp(f.n)<0&&!t.isZero()},t.privateKeyExport=function(e,t){var r=new o(e);if(r.cmp(f.n)>=0||r.isZero())throw new Error(s.EC_PRIVATE_KEY_EXPORT_DER_FAIL);return n.from(u.keyFromPrivate(e).getPublic(t,!0))},t.privateKeyNegate=function(e){var t=new o(e);return t.isZero()?n.alloc(32):f.n.sub(t).umod(f.n).toArrayLike(n,"be",32)},t.privateKeyModInverse=function(e){var t=new o(e);if(t.cmp(f.n)>=0||t.isZero())throw new Error(s.EC_PRIVATE_KEY_RANGE_INVALID);return t.invm(f.n).toArrayLike(n,"be",32)},t.privateKeyTweakAdd=function(e,t){var r=new o(t);if(r.cmp(f.n)>=0)throw new Error(s.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);if(r.iadd(new o(e)),r.cmp(f.n)>=0&&r.isub(f.n),r.isZero())throw new Error(s.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);return r.toArrayLike(n,"be",32)},t.privateKeyTweakMul=function(e,t){var r=new o(t);if(r.cmp(f.n)>=0||r.isZero())throw new Error(s.EC_PRIVATE_KEY_TWEAK_MUL_FAIL);return r.imul(new o(e)),r.cmp(f.n)&&(r=r.umod(f.n)),r.toArrayLike(n,"be",32)},t.publicKeyCreate=function(e,t){var r=new o(e);if(r.cmp(f.n)>=0||r.isZero())throw new Error(s.EC_PUBLIC_KEY_CREATE_FAIL);return n.from(u.keyFromPrivate(e).getPublic(t,!0))},t.publicKeyConvert=function(e,t){var r=c(e);if(null===r)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);return n.from(r.getPublic(t,!0))},t.publicKeyVerify=function(e){return null!==c(e)},t.publicKeyTweakAdd=function(e,t,r){var i=c(e);if(null===i)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);if((t=new o(t)).cmp(f.n)>=0)throw new Error(s.EC_PUBLIC_KEY_TWEAK_ADD_FAIL);var a=f.g.mul(t).add(i.pub);if(a.isInfinity())throw new Error(s.EC_PUBLIC_KEY_TWEAK_ADD_FAIL);return n.from(a.encode(!0,r))},t.publicKeyTweakMul=function(e,t,r){var i=c(e);if(null===i)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);if((t=new o(t)).cmp(f.n)>=0||t.isZero())throw new Error(s.EC_PUBLIC_KEY_TWEAK_MUL_FAIL);return n.from(i.pub.mul(t).encode(!0,r))},t.publicKeyCombine=function(e,t){for(var r=new Array(e.length),i=0;i=0||r.cmp(f.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);var i=n.from(e);return 1===r.cmp(u.nh)&&f.n.sub(r).toArrayLike(n,"be",32).copy(i,32),i},t.signatureExport=function(e){var t=e.slice(0,32),r=e.slice(32,64);if(new o(t).cmp(f.n)>=0||new o(r).cmp(f.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);return{r:t,s:r}},t.signatureImport=function(e){var t=new o(e.r);t.cmp(f.n)>=0&&(t=new o(0));var r=new o(e.s);return r.cmp(f.n)>=0&&(r=new o(0)),n.concat([t.toArrayLike(n,"be",32),r.toArrayLike(n,"be",32)])},t.sign=function(e,t,r,i){if("function"==typeof r){var a=r;r=function(r){var u=a(e,t,null,i,r);if(!n.isBuffer(u)||32!==u.length)throw new Error(s.ECDSA_SIGN_FAIL);return new o(u)}}var c=new o(t);if(c.cmp(f.n)>=0||c.isZero())throw new Error(s.ECDSA_SIGN_FAIL);var h=u.sign(e,t,{canonical:!0,k:r,pers:i});return{signature:n.concat([h.r.toArrayLike(n,"be",32),h.s.toArrayLike(n,"be",32)]),recovery:h.recoveryParam}},t.verify=function(e,t,r){var n={r:t.slice(0,32),s:t.slice(32,64)},i=new o(n.r),a=new o(n.s);if(i.cmp(f.n)>=0||a.cmp(f.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);if(1===a.cmp(u.nh)||i.isZero()||a.isZero())return!1;var h=c(r);if(null===h)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);return u.verify(e,n,{x:h.pub.x,y:h.pub.y})},t.recover=function(e,t,r,i){var a={r:t.slice(0,32),s:t.slice(32,64)},c=new o(a.r),h=new o(a.s);if(c.cmp(f.n)>=0||h.cmp(f.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);try{if(c.isZero()||h.isZero())throw new Error;var d=u.recoverPubKey(e,a,r);return n.from(d.encode(!0,i))}catch(e){throw new Error(s.ECDSA_RECOVER_FAIL)}},t.ecdh=function(e,r){var n=t.ecdhUnsafe(e,r,!0);return i("sha256").update(n).digest()},t.ecdhUnsafe=function(e,t,r){var i=c(e);if(null===i)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);var a=new o(t);if(a.cmp(f.n)>=0||a.isZero())throw new Error(s.ECDH_FAIL);return n.from(i.pub.mul(a).encode(!0,r))}},function(e,t,r){"use strict";(function(t){var n=r(0)(r(1)),i=r(85); -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -function o(e,t){if(e===t)return 0;for(var r=e.length,n=t.length,i=0,o=Math.min(r,n);i=0;u--)if(c[u]!==h[u])return!1;for(u=c.length-1;u>=0;u--)if(a=c[u],!w(e[a],t[a],r,n))return!1;return!0}(e,t,r,i))}return r?e===t:e==t}function _(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function k(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function A(e,t,r,n){var i;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=function(e){var t;try{e()}catch(e){t=e}return t}(t),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),e&&!i&&v(i,r,"Missing expected exception"+n);var o="string"==typeof n,a=!e&&i&&!r;if((!e&&s.isError(i)&&o&&k(i,r)||a)&&v(i,r,"Got unwanted exception"+n),e&&i&&r&&!k(i,r)||!e&&i)throw i}l.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return m(y(e.actual),128)+" "+e.operator+" "+m(y(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var r=new Error;if(r.stack){var n=r.stack,i=b(t),o=n.indexOf("\n"+i);if(o>=0){var a=n.indexOf("\n",o+1);n=n.substring(a+1)}this.stack=n}}},s.inherits(l.AssertionError,Error),l.fail=v,l.ok=g,l.equal=function(e,t,r){e!=t&&v(e,t,r,"==",l.equal)},l.notEqual=function(e,t,r){e==t&&v(e,t,r,"!=",l.notEqual)},l.deepEqual=function(e,t,r){w(e,t,!1)||v(e,t,r,"deepEqual",l.deepEqual)},l.deepStrictEqual=function(e,t,r){w(e,t,!0)||v(e,t,r,"deepStrictEqual",l.deepStrictEqual)},l.notDeepEqual=function(e,t,r){w(e,t,!1)&&v(e,t,r,"notDeepEqual",l.notDeepEqual)},l.notDeepStrictEqual=function e(t,r,n){w(t,r,!0)&&v(t,r,n,"notDeepStrictEqual",e)},l.strictEqual=function(e,t,r){e!==t&&v(e,t,r,"===",l.strictEqual)},l.notStrictEqual=function(e,t,r){e===t&&v(e,t,r,"!==",l.notStrictEqual)},l.throws=function(e,t,r){A(!0,e,t,r)},l.doesNotThrow=function(e,t,r){A(!1,e,t,r)},l.ifError=function(e){if(e)throw e},l.strict=i((function e(t,r){t||v(t,!0,r,"==",e)}),l,{equal:l.strictEqual,deepEqual:l.deepStrictEqual,notEqual:l.notStrictEqual,notDeepEqual:l.notDeepStrictEqual}),l.strict.strict=l.strict;var S=Object.keys||function(e){var t=[];for(var r in e)u.call(e,r)&&t.push(r);return t}}).call(this,r(8))},function(e,t,r){"use strict";(function(t){var n=r(0)(r(1)),i=r(91),o=r(60);function a(e){var t=e;if("string"!=typeof t)throw new Error("[ethjs-util] while padding to even, value must be string, is currently "+(0,n.default)(t)+", while padToEven.");return t.length%2&&(t="0"+t),t}function s(e){return"0x"+e.toString(16)}e.exports={arrayContainsArray:function(e,t,r){if(!0!==Array.isArray(e))throw new Error("[ethjs-util] method arrayContainsArray requires input 'superset' to be an array got type '"+(0,n.default)(e)+"'");if(!0!==Array.isArray(t))throw new Error("[ethjs-util] method arrayContainsArray requires input 'subset' to be an array got type '"+(0,n.default)(t)+"'");return t[Boolean(r)?"some":"every"]((function(t){return e.indexOf(t)>=0}))},intToBuffer:function(e){var r=s(e);return new t(a(r.slice(2)),"hex")},getBinarySize:function(e){if("string"!=typeof e)throw new Error("[ethjs-util] while getting binary size, method getBinarySize requires input 'str' to be type String, got '"+(0,n.default)(e)+"'.");return t.byteLength(e,"utf8")},isHexPrefixed:i,stripHexPrefix:o,padToEven:a,intToHex:s,fromAscii:function(e){for(var t="",r=0;r0&&(h=setTimeout((function(){if(!f){f=!0,c.abort("timeout");var e=new Error("XMLHttpRequest timeout");e.code="ETIMEDOUT",i(e)}}),e.timeout)),c.setRequestHeader)for(s in b)b.hasOwnProperty(s)&&c.setRequestHeader(s,b[s]);else if(e.headers&&!function(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0}(e.headers))throw new Error("Headers cannot be set on an XDomainRequest object");return"responseType"in e&&(c.responseType=e.responseType),"beforeSend"in e&&"function"==typeof e.beforeSend&&e.beforeSend(c),c.send(p||null),c}e.exports=u,e.exports.default=u,u.XMLHttpRequest=n.XMLHttpRequest||function(){},u.XDomainRequest="withCredentials"in new u.XMLHttpRequest?u.XMLHttpRequest:n.XDomainRequest,function(e,t){for(var r=0;r0&&!o.call(e,0))for(var m=0;m0)for(var y=0;y>0},ToUint32:function(e){return this.ToNumber(e)>>>0},ToUint16:function(e){var t=this.ToNumber(e);if(f(t)||0===t||!c(t))return 0;var r=h(t)*Math.floor(Math.abs(t));return d(r,65536)},ToString:function(e){return s(e)},ToObject:function(e){return this.CheckObjectCoercible(e),o(e)},CheckObjectCoercible:function(e,t){if(null==e)throw new a(t||"Cannot call method on "+e);return e},IsCallable:l,SameValue:function(e,t){return e===t?0!==e||1/e==1/t:f(e)&&f(t)},Type:function(e){return null===e?"Null":void 0===e?"Undefined":"function"==typeof e||"object"===(0,n.default)(e)?"Object":"number"==typeof e?"Number":"boolean"==typeof e?"Boolean":"string"==typeof e?"String":void 0},IsPropertyDescriptor:function(e){if("Object"!==this.Type(e))return!1;var t={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};for(var r in e)if(b(e,r)&&!t[r])return!1;var n=b(e,"[[Value]]"),i=b(e,"[[Get]]")||b(e,"[[Set]]");if(n&&i)throw new a("Property Descriptors may not be both accessor and data descriptors");return!0},IsAccessorDescriptor:function(e){return void 0!==e&&(u(this,"Property Descriptor","Desc",e),!(!b(e,"[[Get]]")&&!b(e,"[[Set]]")))},IsDataDescriptor:function(e){return void 0!==e&&(u(this,"Property Descriptor","Desc",e),!(!b(e,"[[Value]]")&&!b(e,"[[Writable]]")))},IsGenericDescriptor:function(e){return void 0!==e&&(u(this,"Property Descriptor","Desc",e),!this.IsAccessorDescriptor(e)&&!this.IsDataDescriptor(e))},FromPropertyDescriptor:function(e){if(void 0===e)return e;if(u(this,"Property Descriptor","Desc",e),this.IsDataDescriptor(e))return{value:e["[[Value]]"],writable:!!e["[[Writable]]"],enumerable:!!e["[[Enumerable]]"],configurable:!!e["[[Configurable]]"]};if(this.IsAccessorDescriptor(e))return{get:e["[[Get]]"],set:e["[[Set]]"],enumerable:!!e["[[Enumerable]]"],configurable:!!e["[[Configurable]]"]};throw new a("FromPropertyDescriptor must be called with a fully populated Property Descriptor")},ToPropertyDescriptor:function(e){if("Object"!==this.Type(e))throw new a("ToPropertyDescriptor requires an object");var t={};if(b(e,"enumerable")&&(t["[[Enumerable]]"]=this.ToBoolean(e.enumerable)),b(e,"configurable")&&(t["[[Configurable]]"]=this.ToBoolean(e.configurable)),b(e,"value")&&(t["[[Value]]"]=e.value),b(e,"writable")&&(t["[[Writable]]"]=this.ToBoolean(e.writable)),b(e,"get")){var r=e.get;if(void 0!==r&&!this.IsCallable(r))throw new TypeError("getter must be a function");t["[[Get]]"]=r}if(b(e,"set")){var n=e.set;if(void 0!==n&&!this.IsCallable(n))throw new a("setter must be a function");t["[[Set]]"]=n}if((b(t,"[[Get]]")||b(t,"[[Set]]"))&&(b(t,"[[Value]]")||b(t,"[[Writable]]")))throw new a("Invalid property descriptor. Cannot both specify accessors and a value or writable attribute");return t}};e.exports=m},function(e,t,r){"use strict";var n=r(167),i=n("%TypeError%"),o=n("%SyntaxError%"),a=r(168),s={"Property Descriptor":function(e,t){if("Object"!==e.Type(t))return!1;var r={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};for(var n in t)if(a(t,n)&&!r[n])return!1;var o=a(t,"[[Value]]"),s=a(t,"[[Get]]")||a(t,"[[Set]]");if(o&&s)throw new i("Property Descriptors may not be both accessor and data descriptors");return!0}};e.exports=function(e,t,r,n){var a=s[t];if("function"!=typeof a)throw new o("unknown record type: "+t);if(!a(e,n))throw new i(r+" must be a "+t);console.log(a(e,n),n)}},function(e,t,r){"use strict";e.exports=Number.isNaN||function(e){return e!=e}},function(e,t,r){"use strict";var n=Number.isNaN||function(e){return e!=e};e.exports=Number.isFinite||function(e){return"number"==typeof e&&!n(e)&&e!==1/0&&e!==-1/0}},function(e,t,r){"use strict";e.exports=function(e){return e>=0?1:-1}},function(e,t,r){"use strict";e.exports=function(e,t){var r=e%t;return Math.floor(r>=0?r:r+t)}},function(e,t,r){"use strict";var n=Object.prototype.toString,i=r(455),o=r(87),a=function(e){var t;if((t=arguments.length>1?arguments[1]:"[object Date]"===n.call(e)?String:Number)===String||t===Number){var r,a,s=t===String?["toString","valueOf"]:["valueOf","toString"];for(a=0;a1?a(e,arguments[1]):a(e)}},function(e,t,r){"use strict";var n=r(0)(r(1));e.exports=function(e){return null===e||"function"!=typeof e&&"object"!==(0,n.default)(e)}},function(e,t,r){"use strict";var n=r(164),i=r(169);e.exports=function(){var e=i();return n(String.prototype,{trim:e},{trim:function(){return String.prototype.trim!==e}}),e}},function(e,t,r){"use strict";var n=r(87),i=Object.prototype.toString,o=Object.prototype.hasOwnProperty,a=function(e,t,r){for(var n=0,i=e.length;n=3&&(o=r),"[object Array]"===i.call(e)?a(e,t,o):"string"==typeof e?s(e,t,o):u(e,t,o)}},function(e,t,r){"use strict";e.exports=function(e,t){return t?{statusCode:t.statusCode,headers:t.headers,method:e.method,url:e.url,rawRequest:t.rawRequest?t.rawRequest:t}:null}},function(e,t,r){"use strict";var n=function(e,t){for(var r=[],n=0;n>>31),r=(p=e[9]^e[19]^e[29]^e[39]^e[49])^(u<<1|s>>>31),e[0]^=t,e[1]^=r,e[10]^=t,e[11]^=r,e[20]^=t,e[21]^=r,e[30]^=t,e[31]^=r,e[40]^=t,e[41]^=r,t=i^(f<<1|c>>>31),r=o^(c<<1|f>>>31),e[2]^=t,e[3]^=r,e[12]^=t,e[13]^=r,e[22]^=t,e[23]^=r,e[32]^=t,e[33]^=r,e[42]^=t,e[43]^=r,t=s^(h<<1|d>>>31),r=u^(d<<1|h>>>31),e[4]^=t,e[5]^=r,e[14]^=t,e[15]^=r,e[24]^=t,e[25]^=r,e[34]^=t,e[35]^=r,e[44]^=t,e[45]^=r,t=f^(l<<1|p>>>31),r=c^(p<<1|l>>>31),e[6]^=t,e[7]^=r,e[16]^=t,e[17]^=r,e[26]^=t,e[27]^=r,e[36]^=t,e[37]^=r,e[46]^=t,e[47]^=r,t=h^(i<<1|o>>>31),r=d^(o<<1|i>>>31),e[8]^=t,e[9]^=r,e[18]^=t,e[19]^=r,e[28]^=t,e[29]^=r,e[38]^=t,e[39]^=r,e[48]^=t,e[49]^=r,b=e[0],m=e[1],W=e[11]<<4|e[10]>>>28,Y=e[10]<<4|e[11]>>>28,O=e[20]<<3|e[21]>>>29,C=e[21]<<3|e[20]>>>29,se=e[31]<<9|e[30]>>>23,ue=e[30]<<9|e[31]>>>23,H=e[40]<<18|e[41]>>>14,K=e[41]<<18|e[40]>>>14,R=e[2]<<1|e[3]>>>31,N=e[3]<<1|e[2]>>>31,y=e[13]<<12|e[12]>>>20,v=e[12]<<12|e[13]>>>20,$=e[22]<<10|e[23]>>>22,J=e[23]<<10|e[22]>>>22,P=e[33]<<13|e[32]>>>19,T=e[32]<<13|e[33]>>>19,fe=e[42]<<2|e[43]>>>30,ce=e[43]<<2|e[42]>>>30,te=e[5]<<30|e[4]>>>2,re=e[4]<<30|e[5]>>>2,j=e[14]<<6|e[15]>>>26,L=e[15]<<6|e[14]>>>26,g=e[25]<<11|e[24]>>>21,w=e[24]<<11|e[25]>>>21,Z=e[34]<<15|e[35]>>>17,X=e[35]<<15|e[34]>>>17,U=e[45]<<29|e[44]>>>3,B=e[44]<<29|e[45]>>>3,E=e[6]<<28|e[7]>>>4,x=e[7]<<28|e[6]>>>4,ne=e[17]<<23|e[16]>>>9,ie=e[16]<<23|e[17]>>>9,F=e[26]<<25|e[27]>>>7,D=e[27]<<25|e[26]>>>7,_=e[36]<<21|e[37]>>>11,k=e[37]<<21|e[36]>>>11,Q=e[47]<<24|e[46]>>>8,ee=e[46]<<24|e[47]>>>8,V=e[8]<<27|e[9]>>>5,G=e[9]<<27|e[8]>>>5,M=e[18]<<20|e[19]>>>12,I=e[19]<<20|e[18]>>>12,oe=e[29]<<7|e[28]>>>25,ae=e[28]<<7|e[29]>>>25,q=e[38]<<8|e[39]>>>24,z=e[39]<<8|e[38]>>>24,A=e[48]<<14|e[49]>>>18,S=e[49]<<14|e[48]>>>18,e[0]=b^~y&g,e[1]=m^~v&w,e[10]=E^~M&O,e[11]=x^~I&C,e[20]=R^~j&F,e[21]=N^~L&D,e[30]=V^~W&$,e[31]=G^~Y&J,e[40]=te^~ne&oe,e[41]=re^~ie&ae,e[2]=y^~g&_,e[3]=v^~w&k,e[12]=M^~O&P,e[13]=I^~C&T,e[22]=j^~F&q,e[23]=L^~D&z,e[32]=W^~$&Z,e[33]=Y^~J&X,e[42]=ne^~oe&se,e[43]=ie^~ae&ue,e[4]=g^~_&A,e[5]=w^~k&S,e[14]=O^~P&U,e[15]=C^~T&B,e[24]=F^~q&H,e[25]=D^~z&K,e[34]=$^~Z&Q,e[35]=J^~X&ee,e[44]=oe^~se&fe,e[45]=ae^~ue&ce,e[6]=_^~A&b,e[7]=k^~S&m,e[16]=P^~U&E,e[17]=T^~B&x,e[26]=q^~H&R,e[27]=z^~K&N,e[36]=Z^~Q&V,e[37]=X^~ee&G,e[46]=se^~fe&te,e[47]=ue^~ce&re,e[8]=A^~b&y,e[9]=S^~m&v,e[18]=U^~E&M,e[19]=B^~x&I,e[28]=H^~R&j,e[29]=K^~N&L,e[38]=Q^~V&W,e[39]=ee^~G&Y,e[48]=fe^~te&ne,e[49]=ce^~re&ie,e[0]^=a[n],e[1]^=a[n+1]},u=function(e){return function(t){var r;if("0x"===t.slice(0,2)){r=[];for(var a=2,u=t.length;a>2]|=t[l]<>2]|=r<>2]|=(192|r>>6)<>2]|=(128|63&r)<=57344?(u[m>>2]|=(224|r>>12)<>2]|=(128|r>>6&63)<>2]|=(128|63&r)<>2]|=(240|r>>18)<>2]|=(128|r>>12&63)<>2]|=(128|r>>6&63)<>2]|=(128|63&r)<=f){for(e.start=m-f,e.block=u[c],m=0;m>2]|=i[3&m],e.lastByteIndex===f)for(u[0]=u[c],m=1;m>4&15]+n[15&p]+n[p>>12&15]+n[p>>8&15]+n[p>>20&15]+n[p>>16&15]+n[p>>28&15]+n[p>>24&15];y%c==0&&(s(d),m=0)}return"0x"+b}(function(e){return{blocks:[],reset:!0,block:0,start:0,blockCount:1600-(e<<1)>>5,outputBlocks:e>>5,s:(t=[0,0,0,0,0,0,0,0,0,0],[].concat(t,t,t,t,t))};var t}(e),r)}};e.exports={keccak256:u(256),keccak512:u(512),keccak256s:u(256),keccak512s:u(512)}},function(e,t,r){"use strict";var n=function(e){return function(){return new Promise((function(t,r){var n,i=function(r){var n={},i=r.target.files.length,o=0;[].map.call(r.target.files,(function(r){var a=new FileReader;a.onload=function(a){var s=new Uint8Array(a.target.result);if("directory"===e){var u=r.webkitRelativePath;n[u.slice(u.indexOf("/")+1)]={type:"text/plain",data:s},++o===i&&t(n)}else if("file"===e){var f=r.webkitRelativePath;t({type:mimetype.lookup(f),data:s})}else t(s)},a.readAsArrayBuffer(r)}))};"directory"===e?((n=document.createElement("input")).addEventListener("change",i),n.type="file",n.webkitdirectory=!0,n.mozdirectory=!0,n.msdirectory=!0,n.odirectory=!0,n.directory=!0):((n=document.createElement("input")).addEventListener("change",i),n.type="file");var o=document.createEvent("MouseEvents");o.initEvent("click",!0,!1),n.dispatchEvent(o)}))}};e.exports={data:n("data"),file:n("file"),directory:n("directory")}},function(e,t,r){"use strict";e.exports=function(e){var t=e.fs,r=e.files,n=e.os,i=e.path,o=e.child_process,a=e.mimetype,s=e.defaultArchives,u=e.request,f=e.downloadUrl,c=e.bytes,h=e.hash,d=e.pick,l=function(e){return function(t){for(var r={},n=0,i=e.length;n=400?n(new Error("Error ".concat(i.statusCode,"."))):r(new Uint8Array(t))}))}))}},m=function(e){return function(t){return function t(r){return function(n){return function(i){var o=function(e){return void 0===e.path?Promise.resolve():"application/bzz-manifest+json"===e.contentType?t(e.hash)(n+e.path)(i):Promise.resolve((r=n+e.path,function(e){return function(t){return t[r]=e,t}})(function(e){return{type:e.contentType,hash:e.hash}}(e))(i));var r};return b(e)(r).then((function(e){return JSON.parse(N(e)).entries})).then((function(e){return Promise.all(e.map(o))})).then((function(){return i}))}}}(t)("")({})}},y=function(e){return function(t){return m(e)(t).then((function(e){return l(Object.keys(e))(Object.keys(e).map((function(t){return e[t].hash})))}))}},v=function(e){return function(t){return m(e)(t).then((function(t){var r=Object.keys(t),n=r.map((function(e){return t[e].hash})),i=r.map((function(e){return t[e].type})),o=n.map(b(e));return Promise.all(o).then((function(e){return l(r)(function(e){return e.map((function(e,t){return{type:i[t],data:e}}))}(e))}))}))}},g=function(e){return function(t){return function(n){return r.download(p(e)(t))(n)}}},w=function(e){return function(t){return function(r){return y(e)(t).then((function(t){var n=[];for(var o in t)if(o.length>0){var a=i.join(r,o);n.push(g(e)(t[o])(a))}return Promise.all(n).then((function(){return r}))}))}}},_=function(e){return function(t){return new Promise((function(r,n){var i={body:"string"==typeof t?j(t):t,method:"POST"};u("".concat(e,"/bzz-raw:/"),i,(function(e,t){return e?n(e):r(t)}))}))}},k=function(e){return function(t){return function(r){return function(n){return function i(o){var a="/"===r[0]?r:"/"+r,s="".concat(e,"/bzz:/").concat(t).concat(a),f={method:"PUT",headers:{"Content-Type":n.type},body:n.data};return new Promise((function(e,t){u(s,f,(function(r,n){return r?t(r):-1!==n.indexOf("error")?t(n):e(n)}))})).catch((function(e){return o>0&&i(o-1)}))}(3)}}}},A=function(e){return function(t){return E(e)({"":t})}},S=function(e){return function(r){return t.readFile(r).then((function(t){return A(e)({type:a.lookup(r),data:t})}))}},E=function(e){return function(t){return _(e)("{}").then((function(r){return Object.keys(t).reduce((function(r,n){return r.then(function(r){return function(n){return k(e)(n)(r)(t[r])}}(n))}),Promise.resolve(r))}))}},x=function(e){return function(r){return t.readFile(r).then(_(e))}},M=function(e){return function(n){return function(i){return r.directoryTree(i).then((function(e){return Promise.all(e.map((function(e){return t.readFile(e)}))).then((function(t){var r=e.map((function(e){return e.slice(i.length)})),n=e.map((function(e){return a.lookup(e)||"text/plain"}));return l(r)(t.map((function(e,t){return{type:n[t],data:e}})))}))})).then((function(e){return(t=n?{"":e[n]}:{},function(e){var r={};for(var n in t)r[n]=t[n];for(var i in e)r[i]=e[i];return r})(e);var t})).then(E(e))}}},I=function(e){return function(t){if("data"===t.pick)return d.data().then(_(e));if("file"===t.pick)return d.file().then(A(e));if("directory"===t.pick)return d.directory().then(E(e));if(t.path)switch(t.kind){case"data":return x(e)(t.path);case"file":return S(e)(t.path);case"directory":return M(e)(t.defaultFile)(t.path)}else{if(t.length||"string"==typeof t)return _(e)(t);if(t instanceof Object)return E(e)(t)}return Promise.reject(new Error("Bad arguments"))}},O=function(e){return function(t){return function(r){return B(e)(t).then((function(n){return n?r?w(e)(t)(r):v(e)(t):r?g(e)(t)(r):b(e)(t)}))}}},C=function(e,t){var i=n.platform().replace("win32","windows")+"-"+("x64"===n.arch()?"amd64":"386"),o=(t||s)[i],a=f+o.archive+".tar.gz",u=o.archiveMD5,c=o.binaryMD5;return r.safeDownloadArchived(a)(u)(c)(e)},P=function(e){return new Promise((function(t,r){var n=o.spawn,i=function(e){return function(t){return-1!==(""+t).indexOf(e)}},a=e.account,s=e.password,u=e.dataDir,f=e.ensApi,c=e.privateKey,h=0,d=n(e.binPath,["--bzzaccount",a||c,"--datadir",u,"--ens-api",f]),l=function(e){0===h&&i("Passphrase")(e)?setTimeout((function(){h=1,d.stdin.write(s+"\n")}),500):i("Swarm http proxy started")(e)&&(h=2,clearTimeout(p),t(d))};d.stdout.on("data",l),d.stderr.on("data",l);var p=setTimeout((function(){return r(new Error("Couldn't start swarm process."))}),2e4)}))},T=function(e){return new Promise((function(t,r){e.stderr.removeAllListeners("data"),e.stdout.removeAllListeners("data"),e.stdin.removeAllListeners("error"),e.removeAllListeners("error"),e.removeAllListeners("exit"),e.kill("SIGINT");var n=setTimeout((function(){return e.kill("SIGKILL")}),8e3);e.once("close",(function(){clearTimeout(n),t()}))}))},U=function(e){return _(e)("test").then((function(e){return"c9a99c7d326dcc6316f32fe2625b311f6dc49a175e6877681ded93137d3569e7"===e})).catch((function(){return!1}))},B=function(e){return function(t){return b(e)(t).then((function(e){try{return!!JSON.parse(N(e)).entries}catch(e){return!1}}))}},R=function(e){return function(t,r,n,i,o){var a;return void 0!==t&&(a=e(t)),void 0!==r&&(a=e(r)),void 0!==n&&(a=e(n)),void 0!==i&&(a=e(i)),void 0!==o&&(a=e(o)),a}},N=function(e){return c.toString(c.fromUint8Array(e))},j=function(e){return c.toUint8Array(c.fromString(e))},L=function(e){return{download:function(t,r){return O(e)(t)(r)},downloadData:R(b(e)),downloadDataToDisk:R(g(e)),downloadDirectory:R(v(e)),downloadDirectoryToDisk:R(w(e)),downloadEntries:R(m(e)),downloadRoutes:R(y(e)),isAvailable:function(){return U(e)},upload:function(t){return I(e)(t)},uploadData:R(_(e)),uploadFile:R(A(e)),uploadFileFromDisk:R(A(e)),uploadDataFromDisk:R(x(e)),uploadDirectory:R(E(e)),uploadDirectoryFromDisk:R(M(e)),uploadToManifest:R(k(e)),pick:d,hash:h,fromString:j,toString:N}};return{at:L,local:function(e){return function(t){return U("http://localhost:8500").then((function(r){return r?t(L("http://localhost:8500")).then((function(){})):C(e.binPath,e.archives).onData((function(t){return(e.onProgress||function(){})(t.length)})).then((function(){return P(e)})).then((function(e){return t(L("http://localhost:8500")).then((function(){return e}))})).then(T)}))}},download:O,downloadBinary:C,downloadData:b,downloadDataToDisk:g,downloadDirectory:v,downloadDirectoryToDisk:w,downloadEntries:m,downloadRoutes:y,isAvailable:U,startProcess:P,stopProcess:T,upload:I,uploadData:_,uploadDataFromDisk:x,uploadFile:A,uploadFileFromDisk:S,uploadDirectory:E,uploadDirectoryFromDisk:M,uploadToManifest:k,pick:d,hash:h,fromString:j,toString:N}}}])})); -//# sourceMappingURL=web3.min.js.map \ No newline at end of file diff --git a/dist/web3.min.js.map b/dist/web3.min.js.map deleted file mode 100644 index daeccbb1175..00000000000 --- a/dist/web3.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack:///./node_modules/@babel/runtime/helpers/typeof.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/bn.js/lib/bn.js","webpack:///./node_modules/@babel/runtime/helpers/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/createClass.js","webpack:///(webpack)/buildin/global.js","webpack:///./packages/web3-core-helpers/lib/index.js","webpack:///./node_modules/underscore/underscore.js","webpack:///./node_modules/process/browser.js","webpack:///../src.ts/index.ts","webpack:///./node_modules/elliptic/lib/elliptic.js","webpack:///./node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack:///./packages/web3-utils/lib/index.js","webpack:///./node_modules/minimalistic-assert/index.js","webpack:///./node_modules/@babel/runtime/helpers/inherits.js","webpack:///./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/coders/abstract-coder.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/hash.js/lib/hash/utils.js","webpack:///./node_modules/cipher-base/index.js","webpack:///./packages/web3-core/lib/index.js","webpack:///./node_modules/randombytes/browser.js","webpack:///./node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./packages/web3-core-method/lib/index.js","webpack:///./node_modules/create-hash/browser.js","webpack:///./node_modules/sha.js/hash.js","webpack:///./node_modules/url/url.js","webpack:///./node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/core-util-is/lib/util.js","webpack:///./node_modules/hash.js/lib/hash.js","webpack:///./node_modules/hash.js/lib/hash/common.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/_version.js","webpack:///./node_modules/varint/index.js","webpack:///./node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:///./node_modules/stream-browserify/index.js","webpack:///./node_modules/buffer-xor/index.js","webpack:///./node_modules/asn1.js/lib/asn1.js","webpack:///./node_modules/asn1.js/lib/asn1/base/index.js","webpack:///./node_modules/process-nextick-args/index.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./packages/web3-core-promievent/lib/index.js","webpack:///./packages/web3-core-subscriptions/lib/index.js","webpack:///./node_modules/brorand/index.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js","webpack:///./packages/web3-net/lib/index.js","webpack:///./node_modules/crypto-browserify/index.js","webpack:///./node_modules/browserify-aes/aes.js","webpack:///./node_modules/evp_bytestokey/index.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/index.js","webpack:///./node_modules/parse-asn1/index.js","webpack:///./node_modules/strip-hex-prefix/src/index.js","webpack:///./node_modules/eth-lib/lib/hash.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./node_modules/eventemitter3/index.js","webpack:///./node_modules/node-libs-browser/node_modules/stream-http/index.js","webpack:///./node_modules/node-libs-browser/node_modules/events/events.js","webpack:///./node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/string_decoder/lib/string_decoder.js","webpack:///../xml-http-request-event-target.ts","webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack:///./node_modules/minimalistic-crypto-utils/lib/utils.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curves.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/fragments.js","webpack:///../src.ts/utf8.ts","webpack:///./node_modules/multihashes/src/index.js","webpack:///./node_modules/eth-lib/lib/bytes.js","webpack:///./node_modules/md5.js/index.js","webpack:///./node_modules/ripemd160/index.js","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/des.js/lib/des.js","webpack:///./node_modules/browserify-aes/browser.js","webpack:///./node_modules/browserify-aes/modes/index.js","webpack:///./node_modules/browserify-rsa/index.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/function-bind/index.js","webpack:///./node_modules/is-callable/index.js","webpack:///./node_modules/node-libs-browser/node_modules/util/util.js","webpack:///./node_modules/ethjs-unit/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/is-hex-prefixed/src/index.js","webpack:///./packages/web3-utils/lib/utils.js","webpack:///./packages/web3-eth-iban/lib/index.js","webpack:///./packages/web3-core-requestmanager/lib/jsonrpc.js","webpack:///./node_modules/punycode/punycode.js","webpack:///./node_modules/node-libs-browser/node_modules/stream-http/lib/capability.js","webpack:///./node_modules/node-libs-browser/node_modules/stream-http/lib/response.js","webpack:///./node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/node-libs-browser/node_modules/timers-browserify/main.js","webpack:///./node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/xtend/immutable.js","webpack:///./node_modules/https-browserify/index.js","webpack:///../src.ts/bignumber.ts","webpack:///../src.ts/_version.ts","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/index.js","webpack:///./node_modules/hash.js/lib/hash/sha/common.js","webpack:///./node_modules/hash.js/lib/hash/sha/256.js","webpack:///./node_modules/hash.js/lib/hash/sha/512.js","webpack:///./node_modules/hmac-drbg/lib/hmac-drbg.js","webpack:///./packages/web3-eth-ens/lib/config.js","webpack:///./packages/web3-eth-contract/lib/index.js","webpack:///./packages/web3-eth-abi/lib/index.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/index.js","webpack:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/abi-coder.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/coders/array.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/coders/bytes.js","webpack:///./node_modules/@babel/runtime/helpers/get.js","webpack:///./node_modules/eth-ens-namehash/index.js","webpack:///./node_modules/multicodec/src/util.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/cids/src/index.js","webpack:///./node_modules/base-x/src/index.js","webpack:///./node_modules/cids/node_modules/multicodec/src/util.js","webpack:///./packages/web3-eth-personal/lib/index.js","webpack:///./node_modules/hash-base/index.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/create-hmac/browser.js","webpack:///./node_modules/create-hash/md5.js","webpack:///./node_modules/pbkdf2/browser.js","webpack:///./node_modules/pbkdf2/lib/precondition.js","webpack:///./node_modules/pbkdf2/lib/default-encoding.js","webpack:///./node_modules/pbkdf2/lib/sync-browser.js","webpack:///./node_modules/browserify-aes/modes/ctr.js","webpack:///./node_modules/browserify-aes/incr32.js","webpack:///./node_modules/browserify-aes/authCipher.js","webpack:///./node_modules/browserify-aes/streamCipher.js","webpack:///./node_modules/diffie-hellman/lib/generatePrime.js","webpack:///./node_modules/miller-rabin/lib/mr.js","webpack:///./node_modules/asn1.js/lib/asn1/base/buffer.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/der.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/der.js","webpack:///./node_modules/public-encrypt/mgf.js","webpack:///./node_modules/public-encrypt/xor.js","webpack:///./node_modules/public-encrypt/withPublic.js","webpack:///./node_modules/eth-lib/lib/rlp.js","webpack:///./node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///../src/transaction.ts","webpack:///../src/index.ts","webpack:///./node_modules/define-properties/index.js","webpack:///./node_modules/object-keys/isArguments.js","webpack:///./node_modules/string.prototype.trim/implementation.js","webpack:///./node_modules/es-abstract/GetIntrinsic.js","webpack:///./node_modules/has/src/index.js","webpack:///./node_modules/string.prototype.trim/polyfill.js","webpack:///./node_modules/swarm-js/node_modules/eth-lib/lib/bytes.js","webpack:///./packages/web3/lib/index.js","webpack:///./packages/web3-core-requestmanager/lib/index.js","webpack:///./node_modules/node-libs-browser/node_modules/util/support/isBufferBrowser.js","webpack:///./packages/web3-core-helpers/lib/errors.js","webpack:///./packages/web3-core-helpers/lib/formatters.js","webpack:///./node_modules/ethjs-unit/lib/index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/ethjs-unit/node_modules/number-to-bn/src/index.js","webpack:///./node_modules/number-to-bn/src/index.js","webpack:///./node_modules/number-to-bn/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/utf8/utf8.js","webpack:///./node_modules/ethereum-bloom-filters/dist/index.js","webpack:///./node_modules/ethereum-bloom-filters/dist/utils.js","webpack:///./node_modules/ethereum-bloom-filters/node_modules/js-sha3/src/sha3.js","webpack:///./packages/web3-utils/lib/soliditySha3.js","webpack:///./packages/web3-core-requestmanager/lib/batch.js","webpack:///./packages/web3-core-requestmanager/lib/givenProvider.js","webpack:///./packages/web3-providers-ws/lib/index.js","webpack:///./packages/web3-providers-ws/lib/helpers.js","webpack:///./node_modules/url/util.js","webpack:///./node_modules/querystring-es3/index.js","webpack:///./node_modules/querystring-es3/decode.js","webpack:///./node_modules/querystring-es3/encode.js","webpack:///./node_modules/websocket/lib/browser.js","webpack:///./node_modules/es5-ext/global.js","webpack:///./node_modules/websocket/lib/version.js","webpack:///./packages/web3-providers-http/lib/index.js","webpack:///../index.ts","webpack:///../xml-http-request.ts","webpack:///./node_modules/node-libs-browser/node_modules/stream-http/lib/request.js","webpack:///./node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/util-deprecate/browser.js","webpack:///./node_modules/string_decoder/node_modules/safe-buffer/index.js","webpack:///./node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/to-arraybuffer/index.js","webpack:///./node_modules/builtin-status-codes/browser.js","webpack:///./node_modules/os-browserify/browser.js","webpack:///../progress-event.ts","webpack:///../errors.ts","webpack:///../xml-http-request-upload.ts","webpack:///./node_modules/cookiejar/cookiejar.js","webpack:///./packages/web3-providers-ipc/lib/index.js","webpack:///./node_modules/oboe/dist/oboe-browser.js","webpack:///./packages/web3-core/lib/extend.js","webpack:///./node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js","webpack:///./packages/web3-core-subscriptions/lib/subscription.js","webpack:///./node_modules/@babel/runtime/helpers/interopRequireWildcard.js","webpack:///../src.ts/fixednumber.ts","webpack:///./node_modules/@ethersproject/keccak256/node_modules/js-sha3/src/sha3.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/mont.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack:///./node_modules/hash.js/lib/hash/sha.js","webpack:///./node_modules/hash.js/lib/hash/sha/1.js","webpack:///./node_modules/hash.js/lib/hash/sha/224.js","webpack:///./node_modules/hash.js/lib/hash/sha/384.js","webpack:///./node_modules/hash.js/lib/hash/ripemd.js","webpack:///./node_modules/hash.js/lib/hash/hmac.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/index.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/key.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/signature.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack:///./packages/web3-eth/lib/index.js","webpack:///./packages/web3-eth-ens/lib/index.js","webpack:///./packages/web3-eth-ens/lib/ENS.js","webpack:///./packages/web3-eth-ens/lib/contracts/Registry.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/coders/address.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/coders/anonymous.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/coders/boolean.js","webpack:///./node_modules/@babel/runtime/helpers/superPropBase.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/coders/fixed-bytes.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/coders/null.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/coders/number.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/coders/string.js","webpack:///../src.ts/bytes32.ts","webpack:///../src.ts/idna.ts","webpack:///./node_modules/@ethersproject/abi/lib.esm/coders/tuple.js","webpack:///./node_modules/@ethersproject/abi/lib.esm/interface.js","webpack:///./node_modules/eth-ens-namehash/node_modules/js-sha3/src/sha3.js","webpack:///./node_modules/idna-uts46-hx/uts46.js","webpack:///./node_modules/idna-uts46-hx/idna-map.js","webpack:///./packages/web3-eth-ens/lib/resources/ABI/Registry.js","webpack:///./packages/web3-eth-ens/lib/resources/ABI/Resolver.js","webpack:///./packages/web3-eth-ens/lib/lib/ResolverMethodHandler.js","webpack:///./packages/web3-eth-ens/lib/lib/contentHash.js","webpack:///./node_modules/content-hash/src/index.js","webpack:///./node_modules/multicodec/src/index.js","webpack:///./node_modules/varint/encode.js","webpack:///./node_modules/varint/decode.js","webpack:///./node_modules/varint/length.js","webpack:///./node_modules/multicodec/src/int-table.js","webpack:///./node_modules/multicodec/src/varint-table.js","webpack:///./node_modules/multicodec/src/constants.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:///./node_modules/multicodec/src/print.js","webpack:///./node_modules/content-hash/src/profiles.js","webpack:///./node_modules/multihashes/node_modules/multibase/src/index.js","webpack:///./node_modules/multihashes/node_modules/multibase/src/constants.js","webpack:///./node_modules/multihashes/node_modules/multibase/src/base.js","webpack:///./node_modules/multihashes/node_modules/multibase/src/base16.js","webpack:///./node_modules/multihashes/node_modules/multibase/src/base32.js","webpack:///./node_modules/multihashes/node_modules/multibase/src/base64.js","webpack:///./node_modules/multihashes/src/constants.js","webpack:///./node_modules/multibase/src/index.js","webpack:///./node_modules/multibase/src/constants.js","webpack:///./node_modules/multibase/src/base.js","webpack:///./node_modules/multibase/src/base16.js","webpack:///./node_modules/multibase/src/base32.js","webpack:///./node_modules/multibase/src/base64.js","webpack:///./node_modules/cids/node_modules/multicodec/src/index.js","webpack:///./node_modules/cids/node_modules/multicodec/src/int-table.js","webpack:///./node_modules/cids/node_modules/multicodec/src/varint-table.js","webpack:///./node_modules/cids/node_modules/multicodec/src/constants.js","webpack:///./node_modules/cids/node_modules/multicodec/src/print.js","webpack:///./node_modules/cids/src/cid-util.js","webpack:///./node_modules/class-is/index.js","webpack:///./node_modules/@babel/runtime/helpers/construct.js","webpack:///./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/content-hash/src/helpers.js","webpack:///./packages/web3-eth-accounts/lib/index.js","webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack:///./node_modules/eth-lib/lib/account.js","webpack:///./node_modules/eth-lib/lib/array.js","webpack:///./node_modules/readable-stream/writable-browser.js","webpack:///./node_modules/readable-stream/duplex-browser.js","webpack:///./node_modules/readable-stream/transform.js","webpack:///./node_modules/readable-stream/passthrough.js","webpack:///./node_modules/sha.js/sha.js","webpack:///./node_modules/sha.js/sha1.js","webpack:///./node_modules/sha.js/sha224.js","webpack:///./node_modules/sha.js/sha384.js","webpack:///./node_modules/create-hmac/legacy.js","webpack:///./node_modules/browserify-sign/algos.js","webpack:///./node_modules/pbkdf2/lib/async.js","webpack:///./node_modules/browserify-cipher/browser.js","webpack:///./node_modules/browserify-des/index.js","webpack:///./node_modules/des.js/lib/des/utils.js","webpack:///./node_modules/des.js/lib/des/cipher.js","webpack:///./node_modules/des.js/lib/des/des.js","webpack:///./node_modules/des.js/lib/des/cbc.js","webpack:///./node_modules/des.js/lib/des/ede.js","webpack:///./node_modules/browserify-aes/encrypter.js","webpack:///./node_modules/browserify-aes/modes/ecb.js","webpack:///./node_modules/browserify-aes/modes/cbc.js","webpack:///./node_modules/browserify-aes/modes/cfb.js","webpack:///./node_modules/browserify-aes/modes/cfb8.js","webpack:///./node_modules/browserify-aes/modes/cfb1.js","webpack:///./node_modules/browserify-aes/modes/ofb.js","webpack:///./node_modules/browserify-aes/ghash.js","webpack:///./node_modules/browserify-aes/decrypter.js","webpack:///./node_modules/browserify-des/modes.js","webpack:///./node_modules/diffie-hellman/browser.js","webpack:///./node_modules/diffie-hellman/lib/dh.js","webpack:///./node_modules/browserify-sign/browser/index.js","webpack:///./node_modules/browserify-sign/browser/sign.js","webpack:///./node_modules/elliptic/lib/elliptic/utils.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/base.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/mont.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack:///./node_modules/elliptic/lib/elliptic/curves.js","webpack:///./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/index.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/key.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/signature.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack:///./node_modules/parse-asn1/asn1.js","webpack:///./node_modules/asn1.js/lib/asn1/api.js","webpack:///./node_modules/vm-browserify/index.js","webpack:///./node_modules/asn1.js/lib/asn1/base/reporter.js","webpack:///./node_modules/asn1.js/lib/asn1/base/node.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/der.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack:///./node_modules/parse-asn1/certificate.js","webpack:///./node_modules/parse-asn1/fixProc.js","webpack:///./node_modules/browserify-sign/browser/verify.js","webpack:///./node_modules/create-ecdh/browser.js","webpack:///./node_modules/public-encrypt/browser.js","webpack:///./node_modules/public-encrypt/publicEncrypt.js","webpack:///./node_modules/public-encrypt/privateDecrypt.js","webpack:///./node_modules/randomfill/browser.js","webpack:///./node_modules/eth-lib/lib/nat.js","webpack:///./node_modules/scrypt-js/scrypt.js","webpack:///./node_modules/uuid/index.js","webpack:///./node_modules/uuid/v1.js","webpack:///./node_modules/uuid/v4.js","webpack:///./node_modules/keccak/js.js","webpack:///./node_modules/keccak/lib/api/index.js","webpack:///./node_modules/keccak/lib/api/keccak.js","webpack:///./node_modules/keccak/lib/api/shake.js","webpack:///./node_modules/keccak/lib/keccak.js","webpack:///./node_modules/keccak/lib/keccak-state-unroll.js","webpack:///./node_modules/secp256k1/elliptic.js","webpack:///./node_modules/secp256k1/lib/index.js","webpack:///./node_modules/secp256k1/lib/assert.js","webpack:///./node_modules/secp256k1/lib/der.js","webpack:///./node_modules/bip66/index.js","webpack:///./node_modules/secp256k1/lib/elliptic/index.js","webpack:///./node_modules/assert/assert.js","webpack:///./node_modules/ethjs-util/lib/index.js","webpack:///../../src/chains/index.ts","webpack:///../../src/hardforks/index.ts","webpack:///../src/fake.ts","webpack:///./packages/web3-eth/lib/getNetworkType.js","webpack:///./packages/web3-shh/lib/index.js","webpack:///./packages/web3-bzz/lib/index.js","webpack:///./node_modules/swarm-js/lib/api-browser.js","webpack:///./node_modules/xhr-request/index.js","webpack:///./node_modules/query-string/index.js","webpack:///./node_modules/strict-uri-encode/index.js","webpack:///./node_modules/decode-uri-component/index.js","webpack:///./node_modules/url-set-query/index.js","webpack:///./node_modules/xhr-request/lib/ensure-header.js","webpack:///./node_modules/xhr-request/lib/request-browser.js","webpack:///./node_modules/xhr/index.js","webpack:///./node_modules/global/window.js","webpack:///./node_modules/is-function/index.js","webpack:///./node_modules/parse-headers/parse-headers.js","webpack:///./node_modules/string.prototype.trim/index.js","webpack:///./node_modules/function-bind/implementation.js","webpack:///./node_modules/object-keys/index.js","webpack:///./node_modules/object-keys/implementation.js","webpack:///./node_modules/es-abstract/es5.js","webpack:///./node_modules/es-abstract/helpers/assertRecord.js","webpack:///./node_modules/es-abstract/helpers/isNaN.js","webpack:///./node_modules/es-abstract/helpers/isFinite.js","webpack:///./node_modules/es-abstract/helpers/sign.js","webpack:///./node_modules/es-abstract/helpers/mod.js","webpack:///./node_modules/es-to-primitive/es5.js","webpack:///./node_modules/es-to-primitive/helpers/isPrimitive.js","webpack:///./node_modules/string.prototype.trim/shim.js","webpack:///./node_modules/for-each/index.js","webpack:///./node_modules/xhr-request/lib/normalize-response.js","webpack:///./node_modules/swarm-js/node_modules/eth-lib/lib/array.js","webpack:///./node_modules/swarm-js/lib/swarm-hash.js","webpack:///./node_modules/swarm-js/node_modules/eth-lib/lib/hash.js","webpack:///./node_modules/swarm-js/lib/pick.js","webpack:///./node_modules/swarm-js/lib/swarm.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","obj","_typeof","iterator","constructor","base64","require","ieee754","isArray","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","createBuffer","that","length","RangeError","Uint8Array","__proto__","arg","encodingOrOffset","this","Error","allocUnsafe","from","TypeError","ArrayBuffer","array","byteOffset","byteLength","undefined","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","actual","write","slice","fromString","isBuffer","len","checked","copy","buffer","val","type","data","fromObject","assertSize","size","toString","isView","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","start","end","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","b","bidirectionalIndexOf","dir","isNaN","arrayIndexOf","indexOf","lastIndexOf","arr","indexSize","arrLength","valLength","String","read","buf","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","push","charCodeAt","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","fromByteArray","Math","min","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","fromCharCode","apply","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","global","foo","subarray","e","typedArraySupport","poolSize","_augment","species","configurable","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","swap16","swap32","swap64","arguments","equals","inspect","max","match","join","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","Array","_arr","ret","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","floor","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","set","code","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","trim","replace","stringtrim","base64clean","src","dst","ctor","superCtor","super_","writable","TempCtor","copyProps","SafeBuffer","assert","msg","inherits","BN","number","base","endian","isBN","negative","words","red","_init","wordSize","parseHex","parseBase","num","left","right","cmp","_initNumber","_initArray","_parseHex","_parseBase","strip","toArray","ceil","w","off","limbLen","limbPow","total","mod","word","imuln","_iaddn","dest","clone","_expand","_normSign","zeros","groupSizes","groupBases","smallMulTo","self","carry","k","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","toBuffer","toArrayLike","ArrayType","reqLength","q","andln","iushrn","clz32","_countBits","_zeroBits","bitLength","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","add","comb10MulTo","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","bits","carryMask","newCarry","ishln","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","shift","_wordDiv","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","tmp","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","split","imulK","_strip","input","output","outLen","prev","next","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","mont","u","instance","Constructor","_defineProperties","props","descriptor","protoProps","staticProps","Function","errors","formatters","previousUnderscore","ArrayProto","ObjProto","SymbolProto","nativeIsArray","nativeKeys","keys","nativeCreate","Ctor","_wrapped","nodeType","VERSION","builtinIteratee","optimizeCb","func","context","argCount","index","collection","accumulator","cb","iteratee","identity","isFunction","isObject","matcher","restArguments","startIndex","rest","args","baseCreate","result","shallowProperty","has","path","deepGet","MAX_ARRAY_INDEX","getLength","isArrayLike","each","forEach","map","collect","results","currentKey","createReduce","reducer","memo","initial","reduce","foldl","inject","reduceRight","foldr","find","detect","predicate","findIndex","findKey","filter","select","reject","negate","every","all","some","any","contains","include","item","fromIndex","guard","values","invoke","contextPath","method","pluck","where","attrs","findWhere","computed","lastComputed","v","shuffle","sample","random","last","rand","temp","sortBy","criteria","sort","group","behavior","partition","groupBy","indexBy","countBy","reStrSymbol","isString","pass","first","head","take","tail","drop","compact","Boolean","flatten","shallow","strict","idx","isArguments","without","otherArrays","difference","uniq","unique","isSorted","isBoolean","seen","union","arrays","intersection","argsLength","unzip","zip","createPredicateIndexFinder","findLastIndex","sortedIndex","low","high","createIndexFinder","predicateFind","range","stop","step","chunk","count","executeBound","sourceFunc","boundFunc","callingContext","bound","callArgs","partial","boundArgs","placeholder","position","bindAll","memoize","hasher","cache","address","delay","wait","setTimeout","defer","throttle","options","timeout","previous","later","leading","now","throttled","clearTimeout","trailing","cancel","debounce","immediate","debounced","callNow","wrap","wrapper","compose","after","times","before","once","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","proto","prop","allKeys","mapObject","pairs","invert","functions","methods","names","createAssigner","keysFunc","defaults","source","extend","extendOwn","assign","deepEq","keyInObj","pick","omit","tap","interceptor","isMatch","aStack","bStack","className","valueOf","areArrays","aCtor","bCtor","pop","isEqual","isEmpty","isElement","nodelist","document","childNodes","Int8Array","isSymbol","parseFloat","isNumber","isNull","isUndefined","noConflict","constant","noop","propertyOf","matches","accum","Date","getTime","escapeMap","unescapeMap","createEscaper","escaper","testRegexp","RegExp","replaceRegexp","test","escape","unescape","fallback","idCounter","uniqueId","prefix","id","templateSettings","evaluate","interpolate","noMatch","escapes","escapeRegExp","escapeChar","template","text","settings","oldSettings","render","variable","argument","chain","_chain","chainResult","mixin","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","nextTick","title","browser","env","argv","version","versions","on","addListener","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","elliptic","utils","curve","curves","ec","eddsa","_getPrototypeOf","setPrototypeOf","getPrototypeOf","ethjsUnit","soliditySha3","randombytes","_flattenTypes","includeTuple","puts","types","param","components","substring","suffix","arrayBracket","hexToAscii","hex","isHexStrict","asciiToHex","getUnitValue","unit","unitMap","JSON","stringify","_fireError","error","emitter","callback","optionalData","message","catch","_jsonInterfaceMethodToString","json","inputs","randomHex","isBigNumber","isHex","sha3","sha3Raw","keccak256","soliditySha3Raw","encodePacked","isAddress","checkAddressChecksum","toChecksumAddress","addressHash","checksumAddress","toUpperCase","toBN","bytesToHex","hexToBytes","hexToNumberString","hexToNumber","toDecimal","numberToHex","fromDecimal","hexToUtf8","hexToString","toUtf8","utf8ToHex","stringToHex","fromUtf8","toAscii","fromAscii","toWei","fromWei","padLeft","leftPad","padRight","rightPad","toTwosComplement","isBloom","isUserEthereumAddressInBloom","isContractAddressInBloom","isTopic","isTopicInBloom","isInBloom","compareBlockNumbers","bnA","bnB","equal","subClass","superClass","assertThisInitialized","minAssert","minUtils","zero2","encode","getNAF","naf","getJSF","k1","k2","jsf","d1","d2","u1","u2","m8","m14","m24","cachedProperty","computer","parseBytes","intFromLE","checkErrors","childPath","logger","Logger","Coder","localName","dynamic","throwArgumentError","Writer","defineReadOnly","_data","arrayify","_padding","_writeData","BigNumber","throwError","BUFFER_OVERRUN","_getValue","writeValue","hexlify","Reader","coerceFunc","_offset","_coerceFunc","coerce","alignedLength","_peekBytes","readBytes","webpackPolyfill","deprecate","paths","children","isSurrogatePair","htonl","zero8","enc","toHex32","join32","split32","rotr32","rotl32","sum32","sum32_3","sum32_4","sum32_5","sum64","ah","al","bh","sum64_hi","bl","sum64_lo","sum64_4_hi","ch","cl","dh","dl","sum64_4_lo","sum64_5_hi","eh","el","sum64_5_lo","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","Transform","StringDecoder","CipherBase","hashMode","_finalOrDigest","final","_final","__final","_decoder","_encoding","update","inputEnc","outputEnc","outData","_update","_toString","setAutoPadding","getAuthTag","setAuthTag","setAAD","_transform","err","_flush","done","fin","requestManager","packageInit","pkg","_provider","setProvider","_requestManager","Manager","givenProvider","providers","provider","net","setRequestManager","manager","BatchRequest","BatchManager","addProviders","crypto","msCrypto","getRandomValues","generated","pna","objectKeys","Duplex","util","Readable","Writable","readable","allowHalfOpen","onend","_writableState","ended","onEndNT","highWaterMark","_readableState","destroyed","_destroy","promiEvent","Subscriptions","subscriptions","EthersTransactionUtils","Method","params","inputFormatter","outputFormatter","transformPayload","extraFormatters","abiCoder","accounts","defaultBlock","defaultAccount","transactionBlockTimeout","transactionConfirmationBlocks","transactionPollingTimeout","defaultCommon","defaultChain","defaultHardfork","handleRevert","createFunction","buildCall","attachToObject","getCall","extractCallback","validateArgs","InvalidNumberOfParams","formatInput","_this","formatter","formatOutput","toPayload","payload","_confirmTransaction","promiseResolved","canUnsubscribe","timeoutCount","confirmationCount","intervalId","lastBlock","gasProvided","gas","isContractDeployment","to","hasBytecode","_ethereumCalls","inputBlockNumberFormatter","outputBlockFormatter","outputTransactionReceiptFormatter","inputAddressFormatter","inputDefaultBlockNumberFormatter","outputTransactionFormatter","subscriptionName","_ethereumCall","mthd","checkConfirmation","existingReceipt","isPolling","blockHeader","unsubscribe","clearInterval","resolve","getTransactionReceipt","eventEmitter","then","receipt","blockHash","receiptFormatter","getBlockByNumber","latestBlock","latestBlockHash","hash","block","blockNumber","contractAddress","NoContractAddressFoundError","getCode","status","contractDeployFormatter","ContractCodeNotStoredError","outOfGas","gasUsed","revertMessage","txReplayOptions","rawTransactionHex","parsedTx","parse","inputTransactionFormatter","gasLimit","toHexString","gasPrice","getRevertReason","TransactionRevertInstructionError","reason","signature","TransactionRevertedWithoutReasonError","TransactionOutOfGasError","TransactionError","startWatching","startInterval","setInterval","subscribe","getWallet","wallet","privateKey","isSendTx","isCall","send","sendTxCallback","reasonData","isRevertReasonString","decodeParameter","RevertInstructionError","sendSignedTx","sign","signedPayload","rawTransaction","sendRequest","tx","txOptions","hardfork","common","signTransaction","getGasPrice","request","Promise","format","MD5","RIPEMD160","sha","Base","Hash","_hash","digest","alg","blockSize","finalSize","_block","_finalSize","_blockSize","_len","assigned","remainder","rem","lowBits","highBits","punycode","Url","protocol","slashes","auth","host","port","hostname","search","query","pathname","href","urlParse","relative","resolveObject","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","querystring","url","parseQueryString","slashesDenoteHost","queryIndex","splitter","uSplit","simplePath","exec","lowerProto","atSign","hostEnd","hec","decodeURIComponent","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","unshift","toASCII","ae","esc","encodeURIComponent","qm","charAt","rel","tkeys","tk","tkey","rkeys","rk","rkey","relPath","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","isNullOrUndefined","authInHost","hasTrailingSlash","up","splice","isAbsolute","Stream","PassThrough","objectToString","isRegExp","isDate","isError","isPrimitive","ripemd","hmac","sha1","sha256","sha224","sha384","sha512","ripemd160","BlockHash","pending","pendingTotal","outSize","hmacStrength","padLength","_delta8","_delta32","_pad","_digest","decode","encodingLength","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","EE","EventEmitter","pipe","ondata","pause","ondrain","resume","_isStdio","onclose","didOnEnd","destroy","onerror","er","cleanup","listenerCount","asn1","bignum","constants","decoders","encoders","Reporter","DecoderBuffer","EncoderBuffer","Node","fn","arg1","arg2","arg3","PromiEvent","justPromise","_events","promise","Subscription","rm","console","warn","subscription","Rand","generate","_rand","getBytes","getByte","randomBytes","BaseCurve","conf","zero","two","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","precomputed","point","validate","_fixedNafMul","doubles","_getDoubles","I","repr","nafW","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","ja","jb","decodePoint","pointFromX","encodeCompressed","_encode","getX","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","core","Net","rng","pseudoRandomBytes","prng","createHash","createHmac","Hmac","algos","algoKeys","hashes","getHashes","pbkdf2","pbkdf2Sync","aes","Cipher","createCipher","Cipheriv","createCipheriv","Decipher","createDecipher","Decipheriv","createDecipheriv","getCiphers","listCiphers","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createSign","Sign","createVerify","Verify","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","randomFillSync","createCredentials","asUInt32Array","scrubVec","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","t0","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","RCON","G","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","AES","_key","_reset","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","decryptBlock","m1","scrub","password","salt","keyBits","ivLen","keyLen","iv","used","keyStart","ivStart","short","edwards","aesid","fixProc","ciphers","compat","parseKeys","passphrase","subtype","ndata","stripped","tag","certificate","tbsCertificate","subjectPublicKeyInfo","PublicKey","algorithm","RSAPublicKey","subjectPublicKey","subjectPrivateKey","pub_key","DSAparam","decrypt","kde","kdeparams","iters","algo","cipher","cipherText","keylen","EncryptedPrivateKey","PrivateKey","RSAPrivateKey","ECPrivateKey","priv_key","DSAPrivateKey","parameters","isHexPrefixed","HEX_CHARS","KECCAK_PADDING","SHIFT","RC","f","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","b10","b11","b12","b13","b14","b15","b16","b17","b18","b19","b20","b21","b22","b23","b24","b25","b26","b27","b28","b29","b30","b31","b32","b33","b34","b35","b36","b37","b38","b39","b40","b41","b42","b43","b44","b45","b46","b47","b48","b49","keccak","state","blocks","byteCount","blockCount","outputBlocks","reset","lastByteIndex","Keccak","keccak512","keccak256s","keccak512s","__webpack_amd_options__","Events","event","listener","evt","_eventsCount","clearEvent","eventNames","events","getOwnPropertySymbols","handlers","ee","prefixed","ClientRequest","response","statusCodes","http","opts","defaultProtocol","location","headers","req","IncomingMessage","Agent","defaultMaxSockets","globalAgent","STATUS_CODES","METHODS","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","ownKeys","getOwnPropertyNames","NumberIsNaN","init","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","_addListener","prepend","existing","warning","newListener","warned","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","setMaxListeners","getMaxListeners","doError","handler","originalListener","spliceOne","rawListeners","CorkedRequest","entry","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","asyncWrite","setImmediate","WritableState","internalUtil","OurUint8Array","realHasInstance","destroyImpl","nop","stream","isDuplex","objectMode","writableObjectMode","hwm","writableHwm","writableHighWaterMark","defaultHwm","finalCalled","needDrain","ending","finished","noDecode","decodeStrings","defaultEncoding","writing","corked","sync","bufferProcessing","onwrite","writecb","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","_write","writev","_writev","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","prefinish","getBuffer","hasInstance","_uint8ArrayToBuffer","writeAfterEnd","valid","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_undestroy","undestroy","nb","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8CheckIncomplete","asyncGeneratorStep","gen","_next","_throw","info","pre","PresetCurve","isInfinity","defineCurve","lambda","basis","_constructorGuard","ModifiersBytes","calldata","memory","storage","ModifiersNest","checkModifier","populate","FormatTypes","freeze","sighash","minimal","full","paramTypeArray","ParamType","constructorGuard","UNSUPPORTED_OPERATION","operation","arrayLength","arrayChildren","baseType","_isParamType","indexed","comp","allowIndexed","isParamType","verifyType","node","ParamTypify","originalParam","newNode","parent","allowType","allowParams","child","allowName","allowArray","sibling","readArray","parseParamType","parseParams","allowIndex","depth","splitNesting","Fragment","_isFragment","isFragment","FunctionFragment","EventFragment","ConstructorFragment","anonymous","isEventFragment","verifyIdentifier","regexParen","modifier","parseGas","comps","parseModifiers","payable","stateMutability","log","verifyState","payble","isConstructorFragment","parens","ouputs","outputs","isFunctionFragment","returns","regexIdentifier","UnicodeNormalizationForm","Utf8ErrorReason","multibase","varint","cs","multihash","codes","defaultLengths","fromHexString","toB58String","fromB58String","encoded","isValidCode","hashfn","coerceCode","isAppCode","at","fromArray","rnd","bs","reverse","rev","pad","ascii","makeByte","uint8","ci","fromNumber","fromNat","bn","toNat","fromUint8Array","toUint8Array","HashBase","ARRAY16","_a","_b","_c","_d","rotl","fnF","fnG","fnH","fnI","_blockOffset","_length","zl","zr","sl","sr","hl","hr","_e","fn1","fn2","fn3","fn4","fn5","ar","br","cr","dr","tl","tr","Algorithm","DES","CBC","EDE","deciphers","modes","modeModules","ECB","CFB","CFB8","CFB1","OFB","CTR","GCM","crt","priv","blinds","getr","blinder","modulus","publicExponent","unblinder","blind","blinded","prime1","prime2","qinv","coefficient","exponent1","m2","exponent2","propIsEnumerable","toObject","test1","test2","test3","letter","shouldUseNative","symbols","implementation","fnToStr","constructorRegex","isES6ClassFn","fnStr","toStr","hasToStringTag","tryFunctionObject","strClass","getOwnPropertyDescriptors","descriptors","getOwnPropertyDescriptor","formatRegExp","objects","noDeprecation","throwDeprecation","traceDeprecation","trace","debugEnviron","debugs","stylize","stylizeNoColor","colors","showHidden","_extend","customInspect","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","primitive","simple","formatPrimitive","visibleKeys","arrayToHash","formatError","braces","toUTCString","formatProperty","formatArray","cur","numLinesEst","reduceToSingleString","desc","line","debuglog","NODE_DEBUG","pid","months","timestamp","time","getHours","getMinutes","getSeconds","getDate","getMonth","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","newReason","promisify","original","promiseResolve","promiseReject","defineProperties","custom","callbackify","callbackified","maybeCb","rej","numberToBN","utf8","ethereumBloomFilters","SHA3_NULL_S","returnValue","_Hash","bloom","ethereumAddress","topic","returnType","chars","hasPrefix","iso13616Prepare","iban","Z","mod9710","Iban","_iban","toAddress","ib","isDirect","toIban","fromAddress","padded","fromBban","bban","checkDigit","countryCode","createIndirect","institution","identifier","isValid","isIndirect","checksum","client","base36","asBn","Jsonrpc","messageId","jsonrpc","validateSingleMessage","messages","freeExports","freeModule","freeGlobal","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","mapDomain","parts","ucs2decode","extra","counter","ucs2encode","digitToBasic","digit","flag","adapt","numPoints","firstTime","baseMinusTMin","basic","oldi","baseMinusT","inputLength","bias","handledCPCount","basicLength","currentValue","handledCPCountPlusOne","qMinusT","fetch","ReadableStream","writableStream","WritableStream","abortController","AbortController","blobConstructor","Blob","xhr","getXHR","XMLHttpRequest","open","XDomainRequest","checkTypeSupport","responseType","haveArrayBuffer","haveSlice","arraybuffer","msstream","mozchunkedarraybuffer","overrideMimeType","vbArray","VBArray","capability","rStates","readyStates","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","fetchTimer","_mode","rawHeaders","trailers","rawTrailers","_fetchResponse","statusCode","statusMessage","statusText","header","_destroyed","_resumeFetch","close","abort","body","pipeTo","reader","getReader","_xhr","_pos","responseURL","getAllResponseHeaders","_charset","mimeType","charsetMatch","_read","_onXHRProgress","readyState","responseBody","responseText","newData","MSStreamReader","onprogress","onload","readAsArrayBuffer","ReadableState","EElistenerCount","debugUtil","debug","BufferList","kProxyEvents","readableObjectMode","readableHwm","readableHighWaterMark","pipes","pipesCount","flowing","endEmitted","reading","needReadable","emittedReadable","readableListening","resumeScheduled","awaitDrain","readingMore","decoder","readableAddChunk","addToFront","skipChunkCheck","emitReadable","onEofChunk","chunkInvalid","addChunk","maybeReadMore","needMoreData","isPaused","setEncoding","howMuchToRead","computeNewHighWaterMark","emitReadable_","flow","maybeReadMore_","nReadingNextTick","resume_","fromList","clear","hasStrings","copyFromBufferString","copyFromBuffer","fromListPartial","endReadable","endReadableNT","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onfinish","cleanedUp","pipeOnDrain","increasedAwaitDrain","dests","ev","paused","_fromList","emitErrorNT","readableDestroyed","writableDestroyed","scope","Timeout","clearFn","_id","_clearFn","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","clearImmediate","afterTransform","ts","_transformState","transforming","writechunk","rs","needTransform","writeencoding","flush","_this2","err2","https","validateParams","other","toBigNumber","ch32","maj32","p32","ft_1","s0_256","s1_256","g0_256","g1_256","shaCommon","sha256_K","SHA256","W","T1","T2","sha512_K","SHA512","ch64_hi","xh","xl","yh","yl","zh","ch64_lo","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","fh","fl","gh","gl","hh","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","HmacDRBG","predResist","minEntropy","_reseed","reseedInterval","K","V","entropy","entropyEnc","nonce","nonceEnc","pers","persEnc","seed","_hmac","kmac","reseed","addEnc","addresses","main","ropsten","rinkeby","goerli","interfaceIds","addr","setAddr","pubkey","setPubkey","contenthash","setContenthash","content","setContent","abi","Contract","jsonInterface","clearSubscriptions","ContractMissingABIError","lastArg","_getOrSetDefaultOptions","_address","_jsonInterface","funcName","encodeFunctionSignature","_createTxObject","cascadeFunc","nextMethod","encodeEventSignature","_on","allEvents","_ethAccounts","_getCallback","_checkListener","ContractReservedEventError","_encodeEventABI","topics","indexedTopics","encodeParameter","_decodeEventABI","outputLogFormatter","intf","indexedInputs","argTopics","returnValues","decodeLog","__length__","raw","_encodeMethodABI","methodSignature","_method","paramsABI","_parent","encodeParameters","_deployData","startsWith","_decodeMethodReturn","decodeParameters","deploy","ContractMissingDeployDataError","deployData","_generateEventOptions","eventName","ContractEventDoesNotExistError","ContractNoAddressDefinedError","ContractOnceRequiresCallbackError","fromBlock","subOptions","toBlock","inputLogFormatter","subscriptionHandler","removed","getPastEvents","getPastLogs","txObject","_executeMethod","encodeABI","estimateGas","_processExecuteArguments","processedArgs","generateRequest","ethAccounts","inputCallFormatter","ContractNoFromAddressDefinedError","logs","newContract","sendTransaction","EthersAbiCoder","AbiCoder","ethersAbiCoder","Result","ABICoder","functionName","mapTypes","formatParam","modifyParams","coder","_getCoder","coders","mappedTypes","isSimplifiedStructFormat","structName","mapStructNameAndType","mapStructToCoderFormat","struct","paramTypeBytes","paramTypeBytesArray","paramTypeNumber","paramTypeNumberArray","maxSize","encodeFunctionCall","decodedValue","notIndexedInputs","indexedParams","topicCount","staticType","nonIndexedData","notIndexedParams","_setPrototypeOf","ReferenceError","checkNew","AddressCoder","BooleanCoder","StringCoder","BytesCoder","ArrayCoder","TupleCoder","component","NullCoder","NumberCoder","FixedBytesCoder","_getWordSize","INVALID_ARGUMENT","writer","_getWriter","_getReader","defaultAbiCoder","pack","arrayValues","staticWriter","dynamicWriter","updateFuncs","dynamicOffset","updateFunc","writeUpdatableValue","baseOffset","writeBytes","unpack","baseReader","subReader","dynamicLength","readValue","offsetReader","consumed","_throwError","checkArgumentCount","AnonymousCoder","DynamicBytesCoder","superPropBase","_get","keccak_256","uts46","normalize","toUnicode","useStd3ASCII","transitional","inputName","labels","labelSha","bufferToNumber","numberToBuffer","hexString","varintBufferEncode","varintBufferDecode","varintEncode","arrayLikeToArray","minLen","arr2","mh","multicodec","codecs","CIDUtil","_CID","withIs","codec","multibaseName","isCID","cid","baseName","isEncoded","getCodec","rmPrefix","CID","validateCID","for","toBaseEncodedString","_buffer","getCodeVarint","errorMsg","checkCIDComponents","symbolName","_Buffer","ALPHABET","BASE_MAP","xc","BASE","LEADER","FACTOR","iFACTOR","decodeUnsafe","psz","zeroes","b256","it3","it4","vch","pbegin","pend","b58","it1","it2","repeat","Personal","inputSignFormatter","_finalized","throwIfNotStringOrBuffer","Sha256","_w","maj","sigma0","sigma1","gamma0","_f","_g","_h","H","Sha512","Ch","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","writeInt64BE","Legacy","md5","ZEROS","blocksize","_alg","ipad","_ipad","opad","_opad","MAX_ALLOC","checkBuffer","iterations","checkParameters","sizes","rmd160","saltLen","shaFunc","getDigest","ipad1","ipad2","DK","block1","destPos","hLen","T","U","incr32","getBlock","_cipher","_prev","encrypt","chunkNum","_cache","GHASH","StreamCipher","ck","_ghash","_finID","ghash","toPad","ivBits","calcIv","_secCache","_decrypt","_alen","_authTag","_called","rump","xorTest","findPrime","simpleSieve","fermatTest","TWENTYFOUR","millerRabin","ONE","TWO","FIVE","TEN","THREE","ELEVEN","FOUR","_getPrimes","n2","brorand","MillerRabin","_randbelow","min_bytes","_randrange","rone","n1","rn1","getDivisor","reporter","save","restore","fail","skip","_reporterState","_reverse","der","DERDecoder","entity","tree","DERNode","derDecodeTag","cls","tagClass","oct","tagStr","derDecodeLen","_decode","_peekTag","decodedTag","_decodeTag","_skipUntilEnd","_decodeList","possibleEnd","_decodeStr","unused","numstr","_isNumstr","printstr","_isPrintstr","_decodeObjid","identifiers","ident","subident","second","_decodeTime","year","mon","day","hour","sec","UTC","_decodeNull","_decodeBool","_decodeInt","_use","_getDecoder","DEREncoder","_encodeComposite","encodedTag","tagByName","tagClassByName","encodeTag","_createEncoderBuffer","lenOctets","_encodeStr","_encodeObjid","objid","_encodeTime","date","getFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","_encodeNull","_encodeInt","numArray","_encodeBool","_getEncoder","_skipDefault","dataBuffer","_baseState","defaultBuffer","_encodeValue","i2ops","paddedMsg","uint","dataTree","parseTree","parseList","parseLength","lim","rnds8","rnds","byteToHex","bth","ethereumjs_util_1","Transaction","hasSymbols","origDefineProperty","supportsDescriptors","arePropertyDescriptorsSupported","predicates","isArgs","callee","ES","leftWhitespace","rightWhitespace","S","ToString","CheckObjectCoercible","ThrowTypeError","getProto","asyncGenIterator","TypedArray","INTRINSICS","entries","asyncIterator","Atomics","DataView","decodeURI","encodeURI","eval","EvalError","Float32Array","Float64Array","Int16Array","Int32Array","Map","Proxy","Set","SharedArrayBuffer","SyntaxError","Uint8ClampedArray","Uint16Array","Uint32Array","URIError","WeakMap","WeakSet","allowMissing","Eth","Shh","Bzz","Web3","eth","shh","bzz","RequestManager","WebsocketProvider","HttpProvider","IpcProvider","connect","connected","deprecatedResult","resubscribe","_isCleanCloseEvent","_isIpcCloseError","ConnectionCloseError","delete","InvalidProvider","jsonrpcPayload","jsonrpcResultCallback","_jsonrpcResultCallback","callbackRequest","sendAsync","sendBatch","toBatchPayload","InvalidResponse","addSubscription","removeSubscription","keepIsSyncing","wasClean","ErrorResponse","isValidResponse","got","expected","InvalidConnection","ConnectionError","ConnectionTimeout","ms","ConnectionNotOpenError","MaxAttemptsReachedOnReconnectingError","PendingRequestsOnReconnectingError","ResolverMethodMissingError","outputBigNumberFormatter","isPredefinedBlockNumber","_txInputFormatter","transactionIndex","transactionHash","logIndex","shaId","inputPostFormatter","post","ttl","workToProve","priority","toTopic","inputStorageKeysFormatter","outputProofFormatter","proof","balance","cumulativeGasUsed","difficulty","totalDifficulty","transactions","miner","outputPostFormatter","expiry","sent","workProved","outputSyncingFormatter","startingBlock","currentBlock","highestBlock","knownStates","pulledStates","negative1","getValueOfUnit","unitInput","unitValue","numberToString","dividedToIntegerBy","toPrecision","weiInput","optionsInput","wei","baseLength","fraction","whole","commify","etherInput","ether","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","extraBytes","len2","encodeChunk","lookup","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","stripHexPrefix","multiplier","formattedString","stringArg","byteIndex","checkScalarValue","createByte","encodeCodePoint","symbol","readContinuationByte","continuationByte","decodeSymbol","byte1","byteString","utils_1","bitpos","codePointToInt","addSlice","isByteArray","INPUT_ERROR","WINDOW","JS_SHA3_NO_WINDOW","WEB_WORKER","JS_SHA3_NO_NODE_JS","COMMON_JS","JS_SHA3_NO_COMMON_JS","AMD","ARRAY_BUFFER","JS_SHA3_NO_ARRAY_BUFFER","CSHAKE_PADDING","BITS","SHAKE_BITS","OUTPUT_TYPES","CSHAKE_BYTEPAD","JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW","createOutputMethod","outputType","createShakeOutputMethod","outputBits","createCshakeOutputMethod","createKmacOutputMethod","createOutputMethods","createMethod","algorithms","bytepad","Kmac","methodNames","methodName","newMethodName","finalized","notString","encodeString","strs","paddingBytes","finalize","arrayBuffer","_parseNumber","_solidityPack","arraySize","_elementaryName","typesize","_parseTypeN","_processSolidityEncodePackedArgs","_parseTypeNArray","hexArgs","Batch","requests","execute","ethereum","web3","currentProvider","connection","helpers","Ws","w3cwebsocket","_customTimeout","reconnectOptions","auto","maxAttempts","onTimeout","reconnect","clientConfig","requestOptions","DATA","CLOSE","ERROR","CONNECT","RECONNECT","requestQueue","responseQueue","reconnectAttempts","reconnecting","parsedURL","parseURL","username","authorization","btoa","OPEN","_addSocketListeners","_onMessage","_parseResponse","_onConnect","_onClose","_removeSocketListeners","addEventListener","removeEventListener","lastChunk","lastChunkTimeout","CONNECTING","disconnect","supportsSubscriptions","isNode","isRN","navigator","product","_btoa","URL","newURL","qs","sep","regexp","maxKeys","kstr","vstr","stringifyPrimitive","ks","_globalThis","NativeWebSocket","WebSocket","MozWebSocket","websocket_version","W3CWebSocket","uri","protocols","__global__","XHR2","withCredentials","agent","keepAlive","httpsAgent","httpAgent","_prepareRequest","agents","baseUrl","nodejsSet","setRequestHeader","onreadystatechange","ontimeout","toArrayBuffer","preferBinary","_opts","_body","_headers","setHeader","useFetch","decideMode","_fetchTimer","_onFinish","lowerName","unsafeHeaders","getHeader","removeHeader","headersObj","headersList","keyName","signal","controller","_fetchAbortController","requestTimeout","credentials","_connect","_response","statusValid","flushHeaders","setNoDelay","setSocketKeepAlive","_classCallCheck","html","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","handle","addFromSetImmediateArguments","partiallyApplied","runIfPresent","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","port2","createElement","documentElement","script","removeChild","appendChild","attachEvent","task","config","localStorage","arrayCopy","endianness","loadavg","uptime","freemem","MAX_VALUE","totalmem","cpus","release","appVersion","networkInterfaces","getNetworkInterfaces","arch","platform","tmpdir","tmpDir","EOL","homedir","ProgressEvent","CookieAccessInfo","domain","secure","Cookie","cookiestr","request_domain","request_path","expiration_date","explicit_path","explicit_domain","noscript","All","toGMTString","toValueString","cookie_str_splitter","CookieJar","cookies","cookies_list","setCookie","cookie","remove","collidesWith","getCookie","cookie_name","access_info","getCookies","pair","access_domain","cookie_domain","wildcard","setCookies","successful","oboe","responseCallbacks","notificationCallbacks","addDefaultEvents","load","_timeout","_addResponseCallback","__webpack_exports__","partialComplete","compose2","attr","lazyUnion","varArgs","flip","lazyIntersection","always","functor","__WEBPACK_IMPORTED_MODULE_0__lists__","numBoundArgs","f1","f2","fns","fnsList","curFn","startParams","maybeValue","numberOfFixedArguments","argsHolder","cons","arrayAsList","listAsArray","foldR","applyEach","reverseList","__WEBPACK_IMPORTED_MODULE_0__functional__","inputArray","arraySoFar","listItem","startValue","removedFn","withoutInner","subList","fnList","reverseInner","reversedAlready","isOfType","defined","hasAllProperties","__WEBPACK_IMPORTED_MODULE_1__functional__","maybeSomething","fieldList","field","NODE_OPENED","NODE_CLOSED","NODE_SWAP","NODE_DROP","FAIL_EVENT","ROOT_NODE_FOUND","ROOT_PATH_FOUND","HTTP_START","STREAM_DATA","STREAM_END","ABORTING","SAX_KEY","SAX_VALUE_OPEN","SAX_VALUE_CLOSE","errorReport","_S","jsonBody","thrown","namedNode","keyOf","nodeOf","__WEBPACK_IMPORTED_MODULE_2__util__","__WEBPACK_IMPORTED_MODULE_3__defaults__","__WEBPACK_IMPORTED_MODULE_4__wire__","nodeStreamMethodNames","isStream","cached","incrementalContentBuilder","ROOT_PATH","__WEBPACK_IMPORTED_MODULE_0__events__","__WEBPACK_IMPORTED_MODULE_1__ascent__","__WEBPACK_IMPORTED_MODULE_3__lists__","oboeBus","emitNodeOpened","emitNodeClosed","emitRootOpened","emitRootClosed","appendBuiltContent","ancestorBranches","keyFound","ascent","newDeepestName","maybeNewDeepestNode","ascentWithNewPath","contentBuilderHandlers","newDeepestNode","arrayConsistentAscent","possiblyInconsistentAscent","parentNode","arrayIndicesAreKeys","previouslyUnmappedName","__WEBPACK_IMPORTED_MODULE_0__publicApi__","applyDefaults","__WEBPACK_IMPORTED_MODULE_0__util__","passthrough","httpMethodName","modifiedUrl","wire","__WEBPACK_IMPORTED_MODULE_0__pubSub__","__WEBPACK_IMPORTED_MODULE_1__ascentManager__","__WEBPACK_IMPORTED_MODULE_2__incrementalContentBuilder__","__WEBPACK_IMPORTED_MODULE_3__patternAdapter__","__WEBPACK_IMPORTED_MODULE_4__jsonPath__","__WEBPACK_IMPORTED_MODULE_5__instanceApi__","__WEBPACK_IMPORTED_MODULE_6__libs_clarinet__","__WEBPACK_IMPORTED_MODULE_7__streamingHttp_node__","contentSource","pubSub","__WEBPACK_IMPORTED_MODULE_0__singleEventPubSub__","singles","newSingle","pubSubInstance","singleEventPubSub","__WEBPACK_IMPORTED_MODULE_1__util__","__WEBPACK_IMPORTED_MODULE_2__functional__","eventType","listenerTupleList","listenerList","hasId","tuple","listenerId","un","hasListener","ascentManager","__WEBPACK_IMPORTED_MODULE_0__ascent__","__WEBPACK_IMPORTED_MODULE_1__events__","__WEBPACK_IMPORTED_MODULE_2__lists__","stateAfter","oldHead","ancestors","patternAdapter","__WEBPACK_IMPORTED_MODULE_1__lists__","__WEBPACK_IMPORTED_MODULE_2__ascent__","jsonPathCompiler","predicateEventMap","addUnderlyingListener","fullEventName","predicateEvent","compiledJsonPath","emitMatch","maybeMatchingMapping","descent","emitMatchingNode","removedEventName","__WEBPACK_IMPORTED_MODULE_3__util__","__WEBPACK_IMPORTED_MODULE_4__incrementalContentBuilder__","__WEBPACK_IMPORTED_MODULE_5__jsonPathSyntax__","pathNodeSyntax","doubleDotSyntax","dotSyntax","bangSyntax","emptySyntax","headKey","headNode","capture","previousExpr","detection","skip1","rootExpr","generateClauseReaderIfTokenFound","tokenDetector","clauseEvaluatorGenerators","jsonPath","parserGeneratedSoFar","onSuccess","detected","compiledParser","exprs","expr","expressionsReader","clauseMatcher","clauseForJsonPath","fieldListStr","hasAllrequiredFields","matchesName","terminalCaseWhenArrivingAtRoot","terminalCaseWhenPreviousExpressionIsSatisfied","recursiveCase","cases","lastClause","exprMatch","returnFoundParser","_remainingJsonPath","compileJsonPathToFunction","uncompiledJsonPath","jsonPathSyntax","jsonPathClause","possiblyCapturing","optionalFieldList","jsonPathNamedNodeInObjectNotation","jsonPathNamedNodeInArrayNotation","jsonPathNumberedNodeInArrayNotation","jsonPathPureDuckTyping","jsonPathDoubleDot","jsonPathDot","jsonPathBang","emptyString","componentRegexes","regex","instanceApi","__WEBPACK_IMPORTED_MODULE_3__publicApi__","oboeApi","fullyQualifiedNamePattern","rootNodeFinishedEvent","emitNodeDrop","emitNodeSwap","eventId","addForgettableCallback","wrapCallbackToSwapNodeIfSomethingReturned","safeCallback","protectedCallback","discard","forget","returnValueFromCallback","addSingleNodeOrPathListener","pattern","effectiveCallback","fullyQualifiedPatternMatchEvent","addNodeOrPathListenerApi","jsonPathOrListenerMap","listenerMap","addMultipleNodeOrPathListeners","rootNode","_statusCode","p2","p3","clarinet","eventBus","latestError","textNode","emitSaxKey","emitValueOpen","emitValueClose","emitFail","stringTokenPattern","_n","BEGIN","VALUE","OPEN_OBJECT","CLOSE_OBJECT","OPEN_ARRAY","CLOSE_ARRAY","STRING","OPEN_KEY","CLOSE_KEY","TRUE","TRUE2","TRUE3","FALSE","FALSE2","FALSE3","FALSE4","NULL","NULL2","NULL3","NUMBER_DECIMAL_POINT","bufferCheckPosition","numberNode","slashed","closed","stack","unicodeS","unicodeI","column","emitError","errorString","whitespace","maxActual","starti","STRING_BIGLOOP","lastIndex","reResult","httpTransport","streamingHttp","__WEBPACK_IMPORTED_MODULE_0__detectCrossOrigin_browser__","__WEBPACK_IMPORTED_MODULE_3__parseResponseHeaders_browser__","__WEBPACK_IMPORTED_MODULE_4__functional__","emitStreamData","numberOfCharsAlreadyGivenToCallback","stillToSendStartEvent","handleProgress","textSoFar","newText","sendStartIfNotAlready","headerName","isCrossOrigin","pageLocation","ajaxHost","portOf","parseUrlOrigin","urlHostMatch","parseResponseHeaders","headerStr","headerPair","pckg","ex","extension","extendedObject","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","toStringTagSymbol","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","__await","unwrapped","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","displayName","isGeneratorFunction","genFun","mark","awrap","async","iter","skipTempReset","rootRecord","rval","exception","loc","caught","hasCatch","hasFinally","finallyEntry","complete","delegateYield","regeneratorRuntime","accidentalStrictMode","_extractCallback","_validateArgs","_formatInput","_formatOutput","_toPayload","subscriptionMethod","err1","blockParams","resultItem","_getRequireWildcardCache","newObj","hasPropertyDescriptor","FixedNumber","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","Point","isRed","inf","JPoint","zOne","betas","_getEndoRoots","lambdas","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y1","y2","len1","_endoSplit","v1","v2","p1","q1","q2","ax","rhs","_endoWnafMulAdd","npoints","ncoeffs","fromJSON","endoMul","obj2point","nx","ny","ys1","dyinv","mulAdd","jmulAdd","_precompute","zinv","zinv2","ay","pz2","z2","h2","h3","nz","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","yyu4","kbase","z3","pz3","eqXToP","zs","MontCurve","i4","a24","aa","bb","diffAdd","da","jumlAdd","EdwardsCurve","twisted","mOneA","dd","oneC","_mulA","_mulC","lhs","pointFromY","_extDbl","nt","_projDbl","_extAdd","_projAdd","zi","sha1_K","SHA1","SHA224","SHA384","Kh","E","Ah","Bh","Dh","Eh","rh","sh","inner","outer","KeyPair","Signature","EC","nh","keyPair","keyFromPrivate","fromPrivate","keyFromPublic","pub","fromPublic","genKeyPair","drbg","ns2","_truncateToN","truncOnly","bkey","getPrivate","ns1","kp","kpX","recoveryParam","canonical","verify","sinv","getPublic","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","_importPrivate","privEnc","_importPublic","pubEnc","derive","_importDER","Position","place","octetLen","rmPadding","constructLength","octets","slen","toDER","backHalf","EDDSA","pointClass","secret","keyFromSecret","hashInt","Rencoded","encodePoint","s_","pubBytes","makeSignature","sig","SG","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","_secret","_pub","_pubBytes","privBytes","getSecret","_R","_Rencoded","_Sencoded","Sencoded","toBytes","ENS","BaseContract","Accounts","getNetworkType","blockCall","transactionFromBlockCall","uncleCall","getBlockTransactionCountCall","uncleCountCall","personal","ens","_detectedAddress","_lastSyncCheck","maxListenersWarningThreshold","_isSyncing","_isSyncingTimeout","Registry","ResolverMethodHandler","registryAddress","registry","supportsInterface","interfaceId","getResolver","resolver","setResolver","txConfig","setRecord","owner","setSubnodeRecord","label","setApprovalForAll","operator","approved","isApprovedForAll","recordExists","setSubnodeOwner","getTTL","setTTL","getOwner","setOwner","getAddress","resolverMethodHandler","setAddress","getPubkey","getContent","getContenthash","getMultihash","setMultihash","checkNetwork","headAge","networkType","namehash","REGISTRY_ABI","RESOLVER_ABI","contract","hexZeroPad","signed","maxUintValue","MaxUint256","bounds","One","NegativeOne","Zero","toUtf8Bytes","toUtf8String","LogDescription","Description","TransactionDescription","Indexed","_isIndexed","wrapAccessError","checkNames","fragment","Interface","fragments","getStatic","bucket","nameOrSignatureOrSighash","isHexString","getSighash","matching","nameOrSignatureOrTopic","topichash","getEventTopic","functionFragment","getFunction","eventFragment","getEvent","_abiCoder","_encodeParams","_decodeParams","errorSignature","CALL_EXCEPTION","errorArgs","UNEXPECTED_ARGUMENT","encodeTopic","dataTypes","dataValues","topicHash","nonIndexed","resultIndexed","resultNonIndexed","nonIndexedIndex","indexedIndex","decodeEventLog","hexDataSlice","_isInterface","idna_map","mapLabel","mapped","ucs2","cp","composite","mapChar","flags","kind","mapStr","validateLabel","endsWith","codePointAt","verifyDnsLength","asciiLabels","asciiString","blockIdxes","ensName","methodArguments","preparedArguments","prepareArguments","checkInterfaceSupport","handleCall","sendOptions","handleSend","confirmationNumber","supported","contentHash","decoded","protocolType","contentType","matched","fromIpfs","fromSwarm","multiC","hexStringToBuffer","profiles","cidV0ToV1Base32","profile","ipfsHash","swarmHash","encodedValue","addPrefix","intTable","codecNameToCodeVarint","multicodecStrOrCode","prefixedData","codecName","getName","getNumber","getVarint","print","oldOffset","INT","N1","N2","N3","N4","N5","N6","N7","N8","N9","baseTable","nameTable","encodingName","varintTable","table","_s","_i","tableByCode","multiH","encodes","swarm","ipfs","decodes","hexMultiHash","b58MultiHash","nameOrCode","getBase","codeBuf","validEncode","isImplemented","bufOrString","baseX","base16","base32","tupple","alphabet","engine","stringOrBuffer","char","view","0","errNotSupported","Class","ClassIsWrapper","withoutNew","isNativeReflectConstruct","_construct","Parent","construct","sham","toV1","Account","RLP","Bytes","cryp","scrypt","uuid","Common","default","isNot","Wallet","_accounts","defaultKeyName","_addAccountFunctions","account","privateKeyToAccount","ignoreLength","transactionOptions","hasTxSigningOptions","chainId","_validateTransactionForSigning","transaction","forCustomChain","baseChain","customChain","networkId","ethTx","validationResult","serialize","messageHash","getChainId","getTransactionCount","getNetworkId","recoverTransaction","rawTx","encodeSignature","recovery","extraData","signingData","signingDataHex","recover","hashMessage","messageHex","messageBytes","messageBuffer","preamble","preambleBuffer","ethMessage","vrs","decodeSignature","preFixed","v3Keystore","nonStrict","derivedKey","kdfparams","kdf","syncScrypt","dklen","prf","ciphertext","mac","decipher","cipherparams","v4","_findSafeIndex","pointer","_currentIndexes","numberOfAccounts","addressOrIndex","encryptedWallet","keystore","setItem","getItem","removeItem","storageAvailable","arrayWithoutHoles","iterableToArray","nonIterableSpread","Nat","secp256k1","toChecksum","publicKey","publicHash","makeSigner","addToV","innerHex","middleHex","outerHex","vals","replicate","J","chunksOf","Sha","rotl30","ft","Sha1","rotl5","Sha224","Sha384","ZERO_BUF","subtle","toBrowser","checks","browserPbkdf2","importKey","deriveBits","resolvePromise","prom","checkNative","resp","aesModes","desModes","ebtk","suite","des","instantiate","modeName","_des","des3","ip","inL","inR","outL","outR","rip","pc1","r28shl","pc2table","pc2","expand","sTable","substitute","permuteTable","padSplit","bufferOff","_updateDecrypt","_updateEncrypt","_flushBuffer","inputOff","outputOff","_finalEncrypt","_finalDecrypt","_unpad","DESState","_desState","deriveKeys","shiftTable","kL","kR","inp","inOff","outOff","_encrypt","lStart","rStart","keyL","keyR","CBCState","_cbcInit","_cbcState","superProto","EDEState","k3","_edeState","MODES","AuthCipher","Splitter","_autopadding","thing","PADDING","setTo","padBuff","encryptStart","encryptByte","byteParam","shiftIn","ZEROES","_multiply","lsbVi","Vi","Zi","abl","_last","unpad","autoPadding","generatePrime","DH","ENCODINGS","genc","SEVEN","setPublicKey","setPrivateKey","_priv","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","formatReturnValue","checkPrime","__gen","generateKeys","_gen","getPublicKey","computeSecret","getPrime","front","getPrivateKey","getGenerator","_hashType","_tag","_signType","getKey","hlen","hbits","bits2int","bits2octets","obits","makeKey","kv","makeR","hashType","signType","curveId","ecSign","dsaSign","seq","int","use","AlgorithmIdentifier","bitstr","null_","optional","PrivateKeyInfo","octstr","EncryptedPrivateKeyInfo","explicit","ECParameters","choice","namedCurve","Entity","_createNamed","named","runInThisContext","_initNamed","Object_keys","defineProp","globals","Script","runInContext","iframe","display","win","contentWindow","wEval","wExecScript","execScript","winKeys","runInNewContext","createContext","isContext","createScript","ReporterError","rethrow","pathLen","enterKey","exitKey","leaveKey","enterObject","leaveObject","inherited","elem","wrapResult","captureStackTrace","tags","reverseArgs","useDecoder","implicit","_wrap","stateProps","cstate","_useArgs","def","newKey","prevObj","present","prevKey","_decodeGeneric","_decodeChoice","track","_getUse","_encodeChoice","_encodePrimitive","1","2","3","pem","PEMDecoder","lines","PEMEncoder","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","bool","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherKey","match2","checkValue","ecVerify","unpacked","montp","dsaVerify","padNum","ECDH","aliases","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","p256","secp256r1","secp192r1","p384","p521","inenc","mgf","withPublic","iHash","hLen2","ps","dblen","maskedDb","maskedSeed","oaep","nonZero","pkcs1","zBuffer","db","dif","oldBrowser","safeBuffer","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","bin","toEther","fromEther","toUint256","h0","h1","h4","h5","h6","h7","bytesLeft","bitLenHi","bitLenLo","numZeros","PBKDF2_HMAC_SHA256_OneIter","dkLen","innerLen","outerKey","dk","incrementCounter","blockmix_salsa8","BY","Yi","_X","arraycopy","blockxor","salsa20_8","Si","srcPos","checkBufferish","ensureInteger","_scrypt","i1","Bi","XY","totalOps","currentOp","lastPercent10","i0","incrementalSMix","steps","percent10","lib","progressCallback","lastProgress","progress","_nodeId","_clockseq","bytesToUuid","_lastMSecs","_lastNSecs","clockseq","seedBytes","nsecs","dt","tmh","ii","createKeccak","createShake","KeccakState","Shake","rate","capacity","delimitedSuffix","hashBitLength","_rate","_capacity","_delimitedSuffix","_hashBitLength","_options","_state","initialize","absorb","absorbLastFewBits","squeeze","_resetState","_clone","dataByteLength","keccakState","squeezing","p1600","P1600_ROUND_CONSTANTS","lo0","hi0","lo1","hi1","lo2","hi2","lo3","hi3","lo4","hi4","t1slo0","t1shi0","t1slo5","t1shi5","t1slo10","t1shi10","t1slo15","t1shi15","t1slo20","t1shi20","t1slo1","t1shi1","t1slo6","t1shi6","t1slo11","t1shi11","t1slo16","t1shi16","t1slo21","t1shi21","t1slo2","t1shi2","t1slo7","t1shi7","t1slo12","t1shi12","t1slo17","t1shi17","t1slo22","t1shi22","t1slo3","t1shi3","t1slo8","t1shi8","t1slo13","t1shi13","t1slo18","t1shi18","t1slo23","t1shi23","t1slo4","t1shi4","t1slo9","t1shi9","t1slo14","t1shi14","t1slo19","t1shi19","t1slo24","t1shi24","t2slo0","t2shi0","t2slo16","t2shi16","t2slo7","t2shi7","t2slo23","t2shi23","t2slo14","t2shi14","t2slo10","t2shi10","t2slo1","t2shi1","t2slo17","t2shi17","t2slo8","t2shi8","t2slo24","t2shi24","t2slo20","t2shi20","t2slo11","t2shi11","t2slo2","t2shi2","t2slo18","t2shi18","t2slo9","t2shi9","t2slo5","t2shi5","t2slo21","t2shi21","t2slo12","t2shi12","t2slo3","t2shi3","t2slo19","t2shi19","t2slo15","t2shi15","t2slo6","t2shi6","t2slo22","t2shi22","t2slo13","t2shi13","t2slo4","t2shi4","initCompressedValue","defaultValue","COMPRESSED_TYPE_INVALID","privateKeyVerify","EC_PRIVATE_KEY_TYPE_INVALID","privateKeyExport","compressed","isBufferLength","EC_PRIVATE_KEY_LENGTH_INVALID","privateKeyImport","EC_PRIVATE_KEY_IMPORT_DER_FAIL","privateKeyNegate","privateKeyModInverse","privateKeyTweakAdd","tweak","TWEAK_TYPE_INVALID","TWEAK_LENGTH_INVALID","privateKeyTweakMul","publicKeyCreate","publicKeyConvert","EC_PUBLIC_KEY_TYPE_INVALID","isBufferLength2","EC_PUBLIC_KEY_LENGTH_INVALID","publicKeyVerify","publicKeyTweakAdd","publicKeyTweakMul","publicKeyCombine","publicKeys","EC_PUBLIC_KEYS_TYPE_INVALID","isLengthGTZero","EC_PUBLIC_KEYS_LENGTH_INVALID","signatureNormalize","ECDSA_SIGNATURE_TYPE_INVALID","ECDSA_SIGNATURE_LENGTH_INVALID","signatureExport","sigObj","signatureImport","ECDSA_SIGNATURE_PARSE_DER_FAIL","signatureImportLax","MSG32_TYPE_INVALID","MSG32_LENGTH_INVALID","noncefn","OPTIONS_TYPE_INVALID","OPTIONS_DATA_TYPE_INVALID","OPTIONS_DATA_LENGTH_INVALID","OPTIONS_NONCEFN_TYPE_INVALID","RECOVERY_ID_TYPE_INVALID","isNumberInInterval","RECOVERY_ID_VALUE_INVALID","ecdh","ecdhUnsafe","length1","length2","bip66","EC_PRIVKEY_EXPORT_DER_COMPRESSED","EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED","lenb","lenR","posR","lenS","posS","lenbyte","rindex","sindex","rvalue","svalue","check","ecparams","loadPublicKey","xBuffer","loadCompressedPublicKey","yBuffer","x3","loadUncompressedPublicKey","EC_PRIVATE_KEY_EXPORT_DER_FAIL","EC_PRIVATE_KEY_RANGE_INVALID","EC_PRIVATE_KEY_TWEAK_ADD_FAIL","EC_PRIVATE_KEY_TWEAK_MUL_FAIL","EC_PUBLIC_KEY_CREATE_FAIL","EC_PUBLIC_KEY_PARSE_FAIL","EC_PUBLIC_KEY_TWEAK_ADD_FAIL","EC_PUBLIC_KEY_TWEAK_MUL_FAIL","EC_PUBLIC_KEY_COMBINE_FAIL","ECDSA_SIGNATURE_PARSE_FAIL","getNonce","ECDSA_SIGN_FAIL","sigr","sigs","ECDSA_RECOVER_FAIL","shared","scalar","ECDH_FAIL","objectAssign","pSlice","functionsHaveNames","pToString","arrbuf","ok","truncate","something","rawname","stackStartFunction","AssertionError","_deepEqual","memos","multiline","ignoreCase","actualIndex","actualVisitedObjects","aIsArgs","bIsArgs","ka","kb","objEquiv","expectedException","isPrototypeOf","_throws","shouldThrow","_tryBlock","userProvidedMessage","isUnexpectedException","generatedMessage","getMessage","fn_name","next_line","notEqual","deepEqual","deepStrictEqual","notDeepEqual","notDeepStrictEqual","strictEqual","notStrictEqual","throws","doesNotThrow","ifError","padToEven","intToHex","arrayContainsArray","superset","subset","intToBuffer","getBinarySize","stringValue","getKeys","allowEmpty","mainnet","kovan","getId","givenId","genesis","noProviderError","download","upload","isAvailable","unavailable","fs","readFile","files","safeDownloadArchived","directoryTree","os","child_process","spawn","mimetype","defaultArchives","downloadUrl","queryString","setQuery","ensureHeader","opt","defaultResponse","strictUriEncode","decodeComponent","extract","queryStart","arrayFormat","parserForArrayFormat","keysSorter","encoderForArrayFormat","val2","parseUrl","singleMatcher","multiMatcher","decodeComponents","tokens","encodedURI","replaceMap","customDecodeURIComponent","lower","useJson","rawRequest","onabort","parseHeaders","xtend","initParams","createXHR","_createXHR","called","getBody","responseXML","firefoxBugTakenEffect","nodeName","getXml","isJson","errorFunc","timeoutTimer","failureResponse","loadFunc","aborted","useXDR","cors","beforeSend","forEachArray","alert","confirm","prompt","row","getPolyfill","shim","boundTrim","ERROR_MESSAGE","binder","boundLength","Empty","origKeys","keysShim","originalKeys","isEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","theKeys","skipProto","skipConstructor","equalsConstructorPrototypeIfNotBuggy","GetIntrinsic","$Object","$TypeError","$String","assertRecord","$isNaN","$isFinite","IsCallable","toPrimitive","ES5","ToPrimitive","ToBoolean","ToNumber","ToInteger","ToInt32","ToUint32","ToUint16","posInt","ToObject","optMessage","SameValue","Type","IsPropertyDescriptor","Desc","allowed","isData","IsAccessor","IsAccessorDescriptor","IsDataDescriptor","IsGenericDescriptor","FromPropertyDescriptor","ToPropertyDescriptor","Obj","setter","$SyntaxError","recordType","argumentName","modulo","remain","isCallable","ES5internalSlots","O","actualHint","polyfill","forEachString","forEachObject","thisArg","swarmHashBlock","lengthEncoded","innerNodes","picker","fileInput","fileLoader","directory","totalFiles","loadedFiles","file","FileReader","webkitRelativePath","_path","webkitdirectory","mozdirectory","msdirectory","odirectory","mouseEvent","createEvent","initEvent","dispatchEvent","_ref","toMap","rawUrl","swarmUrl","downloadData","downloadEntries","routes","downloadEntry","impureInsert","downloadRoutes","route","downloadDirectory","hashs","datas","downloadDataToDisk","filePath","downloadDirectoryToDisk","dirPath","routingTable","downloads","uploadData","uploadToManifest","attempt","slashRoute","uploadFile","uploadDirectory","uploadFileFromDisk","uploadRoute","uploadDataFromDisk","uploadDirectoryFromDisk","defaultPath","fullPaths","_upload","defaultFile","_download","isDirectory","isDir","downloadBinary","archives","system","archive","archiveUrl","archiveMD5","binaryMD5","startProcess","swarmSetup","hasString","dataDir","ensApi","swarmProcess","binPath","handleProcessOutput","stdin","stopProcess","kill","killTimeout","_isAvailable","uncurry","uint8Array","local","useAPI","onData","onProgress"],"mappings":"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uzB,GAE3C,OADAnhC,KAAK6sH,MAAMjpF,OAAOh2B,EAAKuzB,GAChBnhC,MAGTm9C,EAAK1+C,UAAU4wC,OAAS,SAAgBlO,GAEtC,OADAnhC,KAAK8sH,MAAMlpF,OAAO5jC,KAAK6sH,MAAMx9E,UACtBrvC,KAAK8sH,MAAMz9E,OAAOlO,K,6BC7C3B7kC,EAAOD,QAAU,CACfq+C,QAAS,CACPltB,KAAM,EACNytB,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAINjd,IAAK,CACH/Z,IAAK,EACLg3B,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,wE,8CCrwBJntC,EAAK5O,EAAQ,GACbw2E,EAAWx2E,EAAQ,KACnBg5B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Q,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,UACzI,IAAIA,YAAY,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,UACzI,IAAIA,YAAY,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,UACzI,IAAIA,YAAY,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,UACzI,IAAIA,YAAY,CAAC,QAAQ,QAAQ,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IACjE,IAAIA,YAAY,CAAC,QAAQ,EAAE,QAAQ,QAAQ,QAAQ,QAAQ,EAAE,EAAE,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,UACvH,IAAIA,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,UACvH,IAAIA,YAAY,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,UACzI,IAAIA,YAAY,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,EAAE,EAAE,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,UAC7H,IAAIA,YAAY,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,UACzI,IAAIA,YAAY,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,UACzI,IAAIA,YAAY,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,UACzI,IAAIA,YAAY,CAAC,QAAQ,QAAQ,EAAE,QAAQ,QAAQ,EAAE,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,UAC7H,IAA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C,YAAY,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAA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,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,YAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,aAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,aAAc,MACd,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,aAAc,MACd,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MA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,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,aACR,MAAQ,cACR,MAAQ,cACR,MAAQ,cACR,MAAQ,cACR,MAAQ,cACR,MAAQ,cACR,MAAQ,cACR,MAAQ,cACR,MAAQ,cACR,MAAQ,cACR,MAAQ,cACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,cACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,eACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,KAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,gBACR,MAAQ,iBACR,MAAQ,iBACR,MAAQ,iBACR,MAAQ,mBAGV9hI,EAAQy8D,eAAiBv7D,OAAOm3D,OAAO,CACrC,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GAEN,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR,MAAQ,GACR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ACNytB,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAINjd,IAAK,CACH/Z,IAAK,EACLg3B,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,wE,8CCrwBJntC,EAAK5O,EAAQ,GACbw2E,EAAWx2E,EAAQ,KACnB+4B,EAAW/4B,EAAQ,IAEnByO,EADQsqB,EAASC,MACFvqB,OAEfo/G,EAAU7tH,EAAQ,KAClB8tH,EAAY9tH,EAAQ,KAExB,SAAS+tH,EAAGl+F,GACV,KAAM/uB,gBAAgBitH,GACpB,OAAO,IAAIA,EAAGl+F,GAGO,iBAAZA,IACTphB,EAAOsqB,EAASG,OAAO15B,eAAeqwB,GAAU,iBAAmBA,GAEnEA,EAAUkJ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","file":"web3.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Web3\"] = factory();\n\telse\n\t\troot[\"Web3\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 171);\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar errors = require('./errors');\nvar formatters = require('./formatters');\nmodule.exports = {\n errors: errors,\n formatters: formatters\n};\n","// Underscore.js 1.9.1\n// http://underscorejs.org\n// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n this ||\n {};\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for their old module API. If we're in\n // the browser, add `_` as a global object.\n // (`nodeType` is checked to ensure that `module`\n // and `exports` are not HTML elements.)\n if (typeof exports != 'undefined' && !exports.nodeType) {\n if (typeof module != 'undefined' && !module.nodeType && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.9.1';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n var builtinIteratee;\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);\n return _.property(value);\n };\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only argCount argument.\n _.iteratee = builtinIteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n var restArguments = function(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var shallowProperty = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n var has = function(obj, path) {\n return obj != null && hasOwnProperty.call(obj, path);\n }\n\n var deepGet = function(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = shallowProperty('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n var createReduce = function(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n };\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (_.isFunction(path)) {\n func = path;\n } else if (_.isArray(path)) {\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return _.map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection.\n _.shuffle = function(obj) {\n return _.sample(obj, Infinity);\n };\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = _.random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n });\n\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (_.isString(obj)) {\n // Keep surrogate pair characters together\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, Boolean);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, output) {\n output = output || [];\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (shallow) {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n } else {\n flatten(value, shallow, strict, output);\n idx = output.length;\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = restArguments(function(array, otherArrays) {\n return _.difference(array, otherArrays);\n });\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = restArguments(function(arrays) {\n return _.uniq(flatten(arrays, true, true));\n });\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n });\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = restArguments(_.unzip);\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of _.pairs.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions.\n var createPredicateIndexFinder = function(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n };\n\n // Returns the first index on an array-like that passes a predicate test.\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions.\n var createIndexFinder = function(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n };\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n _.chunk = function(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments.\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = restArguments(function(func, context, args) {\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n _.partial = restArguments(function(func, boundArgs) {\n var placeholder = _.partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n _.partial.placeholder = _;\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = _.bind(obj[key], obj);\n }\n });\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, result;\n\n var later = function(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function(args) {\n if (timeout) clearTimeout(timeout);\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = _.delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n _.restArguments = restArguments;\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n var collectNonEnumProps = function(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = _.isFunction(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n };\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object.\n // In contrast to _.map it returns an object.\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n // The opposite of _.object.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`.\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test.\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Internal pick helper function to determine if `obj` has key `key`.\n var keyInObj = function(value, key, obj) {\n return key in obj;\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (_.isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = _.allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = _.map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n });\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq, deepEq;\n eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n };\n\n // Internal recursive comparison function for `isEqual`.\n deepEq = function(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`?\n _.isNaN = function(obj) {\n return _.isNumber(obj) && isNaN(obj);\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, path) {\n if (!_.isArray(path)) {\n return has(obj, path);\n }\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (obj == null || !hasOwnProperty.call(obj, key)) {\n return false;\n }\n obj = obj[key];\n }\n return !!length;\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indexes.\n _.property = function(path) {\n if (!_.isArray(path)) {\n return shallowProperty(path);\n }\n return function(obj) {\n return deepGet(obj, path);\n };\n };\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n if (obj == null) {\n return function(){};\n }\n return function(path) {\n return !_.isArray(path) ? obj[path] : deepGet(obj, path);\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n _.result = function(obj, path, fallback) {\n if (!_.isArray(path)) path = [path];\n var length = path.length;\n if (!length) {\n return _.isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = _.isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var chainResult = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return chainResult(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return chainResult(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return String(this._wrapped);\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define == 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\n}());\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","\"use strict\";\nimport { concat, hexlify } from \"@ethersproject/bytes\";\nimport { nameprep, toUtf8Bytes } from \"@ethersproject/strings\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n///////////////////////////////\nconst Zeros = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 /* istanbul ignore if */\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid address - \" + String(name), \"name\", name);\n }\n let result = Zeros;\n while (name.length) {\n const partition = name.match(Partition);\n const label = toUtf8Bytes(nameprep(partition[3]));\n result = keccak256(concat([result, keccak256(label)]));\n name = partition[2] || \"\";\n }\n return hexlify(result);\n}\nexport function id(text) {\n return keccak256(toUtf8Bytes(text));\n}\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=index.js.map","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file utils.js\n * @author Marek Kotewicz \n * @author Fabian Vogelsteller \n * @date 2017\n */\nvar _ = require('underscore');\nvar ethjsUnit = require('ethjs-unit');\nvar utils = require('./utils.js');\nvar soliditySha3 = require('./soliditySha3.js');\nvar randombytes = require('randombytes');\nvar BN = require('bn.js');\n/**\n * Fires an error in an event emitter and callback and returns the eventemitter\n *\n * @method _fireError\n * @param {Object} error a string, a error, or an object with {message, data}\n * @param {Object} emitter\n * @param {Function} reject\n * @param {Function} callback\n * @param {any} optionalData\n * @return {Object} the emitter\n */\nvar _fireError = function (error, emitter, reject, callback, optionalData) {\n /*jshint maxcomplexity: 10 */\n // add data if given\n if (_.isObject(error) && !(error instanceof Error) && error.data) {\n if (_.isObject(error.data) || _.isArray(error.data)) {\n error.data = JSON.stringify(error.data, null, 2);\n }\n error = error.message + \"\\n\" + error.data;\n }\n if (_.isString(error)) {\n error = new Error(error);\n }\n if (_.isFunction(callback)) {\n callback(error, optionalData);\n }\n if (_.isFunction(reject)) {\n // suppress uncatched error if an error listener is present\n // OR suppress uncatched error if an callback listener is present\n if (emitter &&\n (_.isFunction(emitter.listeners) &&\n emitter.listeners('error').length) || _.isFunction(callback)) {\n emitter.catch(function () { });\n }\n // reject later, to be able to return emitter\n setTimeout(function () {\n reject(error);\n }, 1);\n }\n if (emitter && _.isFunction(emitter.emit)) {\n // emit later, to be able to return emitter\n setTimeout(function () {\n emitter.emit('error', error, optionalData);\n emitter.removeAllListeners();\n }, 1);\n }\n return emitter;\n};\n/**\n * Should be used to create full function/event name from json abi\n *\n * @method _jsonInterfaceMethodToString\n * @param {Object} json\n * @return {String} full function/event name\n */\nvar _jsonInterfaceMethodToString = function (json) {\n if (_.isObject(json) && json.name && json.name.indexOf('(') !== -1) {\n return json.name;\n }\n return json.name + '(' + _flattenTypes(false, json.inputs).join(',') + ')';\n};\n/**\n * Should be used to flatten json abi inputs/outputs into an array of type-representing-strings\n *\n * @method _flattenTypes\n * @param {bool} includeTuple\n * @param {Object} puts\n * @return {Array} parameters as strings\n */\nvar _flattenTypes = function (includeTuple, puts) {\n // console.log(\"entered _flattenTypes. inputs/outputs: \" + puts)\n var types = [];\n puts.forEach(function (param) {\n if (typeof param.components === 'object') {\n if (param.type.substring(0, 5) !== 'tuple') {\n throw new Error('components found but type is not tuple; report on GitHub');\n }\n var suffix = '';\n var arrayBracket = param.type.indexOf('[');\n if (arrayBracket >= 0) {\n suffix = param.type.substring(arrayBracket);\n }\n var result = _flattenTypes(includeTuple, param.components);\n // console.log(\"result should have things: \" + result)\n if (_.isArray(result) && includeTuple) {\n // console.log(\"include tuple word, and its an array. joining...: \" + result.types)\n types.push('tuple(' + result.join(',') + ')' + suffix);\n }\n else if (!includeTuple) {\n // console.log(\"don't include tuple, but its an array. joining...: \" + result)\n types.push('(' + result.join(',') + ')' + suffix);\n }\n else {\n // console.log(\"its a single type within a tuple: \" + result.types)\n types.push('(' + result + ')');\n }\n }\n else {\n // console.log(\"its a type and not directly in a tuple: \" + param.type)\n types.push(param.type);\n }\n });\n return types;\n};\n/**\n * Returns a random hex string by the given bytes size\n *\n * @param {Number} size\n * @returns {string}\n */\nvar randomHex = function (size) {\n return '0x' + randombytes(size).toString('hex');\n};\n/**\n * Should be called to get ascii from it's hex representation\n *\n * @method hexToAscii\n * @param {String} hex\n * @returns {String} ascii string representation of hex value\n */\nvar hexToAscii = function (hex) {\n if (!utils.isHexStrict(hex))\n throw new Error('The parameter must be a valid HEX string.');\n var str = \"\";\n var i = 0, l = hex.length;\n if (hex.substring(0, 2) === '0x') {\n i = 2;\n }\n for (; i < l; i += 2) {\n var code = parseInt(hex.substr(i, 2), 16);\n str += String.fromCharCode(code);\n }\n return str;\n};\n/**\n * Should be called to get hex representation (prefixed by 0x) of ascii string\n *\n * @method asciiToHex\n * @param {String} str\n * @returns {String} hex representation of input string\n */\nvar asciiToHex = function (str) {\n if (!str)\n return \"0x00\";\n var hex = \"\";\n for (var i = 0; i < str.length; i++) {\n var code = str.charCodeAt(i);\n var n = code.toString(16);\n hex += n.length < 2 ? '0' + n : n;\n }\n return \"0x\" + hex;\n};\n/**\n * Returns value of unit in Wei\n *\n * @method getUnitValue\n * @param {String} unit the unit to convert to, default ether\n * @returns {BN} value of the unit (in Wei)\n * @throws error if the unit is not correct:w\n */\nvar getUnitValue = function (unit) {\n unit = unit ? unit.toLowerCase() : 'ether';\n if (!ethjsUnit.unitMap[unit]) {\n throw new Error('This unit \"' + unit + '\" doesn\\'t exist, please use the one of the following units' + JSON.stringify(ethjsUnit.unitMap, null, 2));\n }\n return unit;\n};\n/**\n * Takes a number of wei and converts it to any other ether unit.\n *\n * Possible units are:\n * SI Short SI Full Effigy Other\n * - kwei femtoether babbage\n * - mwei picoether lovelace\n * - gwei nanoether shannon nano\n * - -- microether szabo micro\n * - -- milliether finney milli\n * - ether -- --\n * - kether -- grand\n * - mether\n * - gether\n * - tether\n *\n * @method fromWei\n * @param {Number|String} number can be a number, number string or a HEX of a decimal\n * @param {String} unit the unit to convert to, default ether\n * @return {String|Object} When given a BN object it returns one as well, otherwise a number\n */\nvar fromWei = function (number, unit) {\n unit = getUnitValue(unit);\n if (!utils.isBN(number) && !_.isString(number)) {\n throw new Error('Please pass numbers as strings or BN objects to avoid precision errors.');\n }\n return utils.isBN(number) ? ethjsUnit.fromWei(number, unit) : ethjsUnit.fromWei(number, unit).toString(10);\n};\n/**\n * Takes a number of a unit and converts it to wei.\n *\n * Possible units are:\n * SI Short SI Full Effigy Other\n * - kwei femtoether babbage\n * - mwei picoether lovelace\n * - gwei nanoether shannon nano\n * - -- microether szabo micro\n * - -- microether szabo micro\n * - -- milliether finney milli\n * - ether -- --\n * - kether -- grand\n * - mether\n * - gether\n * - tether\n *\n * @method toWei\n * @param {Number|String|BN} number can be a number, number string or a HEX of a decimal\n * @param {String} unit the unit to convert from, default ether\n * @return {String|Object} When given a BN object it returns one as well, otherwise a number\n */\nvar toWei = function (number, unit) {\n unit = getUnitValue(unit);\n if (!utils.isBN(number) && !_.isString(number)) {\n throw new Error('Please pass numbers as strings or BN objects to avoid precision errors.');\n }\n return utils.isBN(number) ? ethjsUnit.toWei(number, unit) : ethjsUnit.toWei(number, unit).toString(10);\n};\n/**\n * Converts to a checksum address\n *\n * @method toChecksumAddress\n * @param {String} address the given HEX address\n * @return {String}\n */\nvar toChecksumAddress = function (address) {\n if (typeof address === 'undefined')\n return '';\n if (!/^(0x)?[0-9a-f]{40}$/i.test(address))\n throw new Error('Given address \"' + address + '\" is not a valid Ethereum address.');\n address = address.toLowerCase().replace(/^0x/i, '');\n var addressHash = utils.sha3(address).replace(/^0x/i, '');\n var checksumAddress = '0x';\n for (var i = 0; i < address.length; i++) {\n // If ith character is 8 to f then make it uppercase\n if (parseInt(addressHash[i], 16) > 7) {\n checksumAddress += address[i].toUpperCase();\n }\n else {\n checksumAddress += address[i];\n }\n }\n return checksumAddress;\n};\n/**\n * Returns -1 if ab; 0 if a == b.\n * For more details on this type of function, see\n * developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\n *\n * @method compareBlockNumbers\n *\n * @param {String|Number|BN} a\n *\n * @param {String|Number|BN} b\n *\n * @returns {Number} -1, 0, or 1\n */\nvar compareBlockNumbers = function (a, b) {\n if (a == b) {\n return 0;\n }\n else if ((\"genesis\" == a || \"earliest\" == a || 0 == a) && (\"genesis\" == b || \"earliest\" == b || 0 == b)) {\n return 0;\n }\n else if (\"genesis\" == a || \"earliest\" == a) {\n // b !== a, thus a < b\n return -1;\n }\n else if (\"genesis\" == b || \"earliest\" == b) {\n // b !== a, thus a > b\n return 1;\n }\n else if (a == \"latest\") {\n if (b == \"pending\") {\n return -1;\n }\n else {\n // b !== (\"pending\" OR \"latest\"), thus a > b\n return 1;\n }\n }\n else if (b === \"latest\") {\n if (a == \"pending\") {\n return 1;\n }\n else {\n // b !== (\"pending\" OR \"latest\"), thus a > b\n return -1;\n }\n }\n else if (a == \"pending\") {\n // b (== OR <) \"latest\", thus a > b\n return 1;\n }\n else if (b == \"pending\") {\n return -1;\n }\n else {\n let bnA = new BN(a);\n let bnB = new BN(b);\n if (bnA.lt(bnB)) {\n return -1;\n }\n else if (bnA.eq(bnB)) {\n return 0;\n }\n else {\n return 1;\n }\n }\n};\nmodule.exports = {\n _fireError: _fireError,\n _jsonInterfaceMethodToString: _jsonInterfaceMethodToString,\n _flattenTypes: _flattenTypes,\n // extractDisplayName: extractDisplayName,\n // extractTypeName: extractTypeName,\n randomHex: randomHex,\n _: _,\n BN: utils.BN,\n isBN: utils.isBN,\n isBigNumber: utils.isBigNumber,\n isHex: utils.isHex,\n isHexStrict: utils.isHexStrict,\n sha3: utils.sha3,\n sha3Raw: utils.sha3Raw,\n keccak256: utils.sha3,\n soliditySha3: soliditySha3.soliditySha3,\n soliditySha3Raw: soliditySha3.soliditySha3Raw,\n encodePacked: soliditySha3.encodePacked,\n isAddress: utils.isAddress,\n checkAddressChecksum: utils.checkAddressChecksum,\n toChecksumAddress: toChecksumAddress,\n toHex: utils.toHex,\n toBN: utils.toBN,\n bytesToHex: utils.bytesToHex,\n hexToBytes: utils.hexToBytes,\n hexToNumberString: utils.hexToNumberString,\n hexToNumber: utils.hexToNumber,\n toDecimal: utils.hexToNumber,\n numberToHex: utils.numberToHex,\n fromDecimal: utils.numberToHex,\n hexToUtf8: utils.hexToUtf8,\n hexToString: utils.hexToUtf8,\n toUtf8: utils.hexToUtf8,\n utf8ToHex: utils.utf8ToHex,\n stringToHex: utils.utf8ToHex,\n fromUtf8: utils.utf8ToHex,\n hexToAscii: hexToAscii,\n toAscii: hexToAscii,\n asciiToHex: asciiToHex,\n fromAscii: asciiToHex,\n unitMap: ethjsUnit.unitMap,\n toWei: toWei,\n fromWei: fromWei,\n padLeft: utils.leftPad,\n leftPad: utils.leftPad,\n padRight: utils.rightPad,\n rightPad: utils.rightPad,\n toTwosComplement: utils.toTwosComplement,\n isBloom: utils.isBloom,\n isUserEthereumAddressInBloom: utils.isUserEthereumAddressInBloom,\n isContractAddressInBloom: utils.isContractAddressInBloom,\n isTopic: utils.isTopic,\n isTopicInBloom: utils.isTopicInBloom,\n isInBloom: utils.isInBloom,\n compareBlockNumbers: compareBlockNumbers\n};\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n []\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n var m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n var m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","\"use strict\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"../_version\";\nconst logger = new Logger(version);\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}\nexport class Coder {\n constructor(name, type, localName, dynamic) {\n // @TODO: defineReadOnly these\n this.name = name;\n this.type = type;\n this.localName = localName;\n this.dynamic = dynamic;\n }\n _throwError(message, value) {\n logger.throwArgumentError(message, this.localName, value);\n }\n}\nexport class Writer {\n constructor(wordSize) {\n defineReadOnly(this, \"wordSize\", wordSize || 32);\n this._data = arrayify([]);\n this._padding = new Uint8Array(wordSize);\n }\n get data() { return hexlify(this._data); }\n get length() { return this._data.length; }\n _writeData(data) {\n this._data = concat([this._data, data]);\n return data.length;\n }\n // Arrayish items; padded on the right to wordSize\n writeBytes(value) {\n let bytes = arrayify(value);\n if (bytes.length % this.wordSize) {\n bytes = concat([bytes, this._padding.slice(bytes.length % this.wordSize)]);\n }\n return this._writeData(bytes);\n }\n _getValue(value) {\n let bytes = arrayify(BigNumber.from(value));\n if (bytes.length > this.wordSize) {\n logger.throwError(\"value out-of-bounds\", Logger.errors.BUFFER_OVERRUN, {\n length: this.wordSize,\n offset: bytes.length\n });\n }\n if (bytes.length % this.wordSize) {\n bytes = concat([this._padding.slice(bytes.length % this.wordSize), bytes]);\n }\n return bytes;\n }\n // BigNumberish items; padded on the left to wordSize\n writeValue(value) {\n return this._writeData(this._getValue(value));\n }\n writeUpdatableValue() {\n let offset = this.length;\n this.writeValue(0);\n return (value) => {\n this._data.set(this._getValue(value), offset);\n };\n }\n}\nexport class Reader {\n constructor(data, wordSize, coerceFunc) {\n defineReadOnly(this, \"_data\", arrayify(data));\n defineReadOnly(this, \"wordSize\", wordSize || 32);\n defineReadOnly(this, \"_coerceFunc\", coerceFunc);\n this._offset = 0;\n }\n get data() { return hexlify(this._data); }\n get consumed() { return this._offset; }\n // The default Coerce function\n static coerce(name, value) {\n let match = name.match(\"^u?int([0-9]+)$\");\n if (match && parseInt(match[1]) <= 48) {\n value = value.toNumber();\n }\n return value;\n }\n coerce(name, value) {\n if (this._coerceFunc) {\n return this._coerceFunc(name, value);\n }\n return Reader.coerce(name, value);\n }\n _peekBytes(offset, length) {\n let alignedLength = Math.ceil(length / this.wordSize) * this.wordSize;\n if (this._offset + alignedLength > this._data.length) {\n logger.throwError(\"data out-of-bounds\", Logger.errors.BUFFER_OVERRUN, {\n length: this._data.length,\n offset: this._offset + alignedLength\n });\n }\n return this._data.slice(this._offset, this._offset + alignedLength);\n }\n subReader(offset) {\n return new Reader(this._data.slice(this._offset + offset), this.wordSize, this._coerceFunc);\n }\n readBytes(length) {\n let bytes = this._peekBytes(0, length);\n this._offset += bytes.length;\n // @TODO: Make sure the length..end bytes are all 0?\n return bytes.slice(0, length);\n }\n readValue() {\n return BigNumber.from(this.readBytes(this.wordSize));\n }\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\nconst requestManager = require(\"web3-core-requestmanager\");\nconst extend = require(\"./extend\");\nconst packageInit = (pkg, args) => {\n args = Array.prototype.slice.call(args);\n if (!pkg) {\n throw new Error('You need to instantiate using the \"new\" keyword.');\n }\n // make property of pkg._provider, which can properly set providers\n Object.defineProperty(pkg, 'currentProvider', {\n get: () => {\n return pkg._provider;\n },\n set: (value) => {\n return pkg.setProvider(value);\n },\n enumerable: true,\n configurable: true\n });\n // inherit from parent package or create a new RequestManager\n if (args[0] && args[0]._requestManager) {\n pkg._requestManager = args[0]._requestManager;\n }\n else {\n pkg._requestManager = new requestManager.Manager(args[0], args[1]);\n }\n // add givenProvider\n pkg.givenProvider = requestManager.Manager.givenProvider;\n pkg.providers = requestManager.Manager.providers;\n pkg._provider = pkg._requestManager.provider;\n // add SETPROVIDER function (don't overwrite if already existing)\n if (!pkg.setProvider) {\n pkg.setProvider = (provider, net) => {\n pkg._requestManager.setProvider(provider, net);\n pkg._provider = pkg._requestManager.provider;\n return true;\n };\n }\n pkg.setRequestManager = (manager) => {\n pkg._requestManager = manager;\n pkg._provider = manager.provider;\n };\n // attach batch request creation\n pkg.BatchRequest = requestManager.BatchManager.bind(null, pkg._requestManager);\n // attach extend function\n pkg.extend = extend(pkg);\n};\nconst addProviders = (pkg) => {\n pkg.givenProvider = requestManager.Manager.givenProvider;\n pkg.providers = requestManager.Manager.providers;\n};\nmodule.exports = {\n packageInit,\n addProviders\n};\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @author Marek Kotewicz \n * @date 2017\n */\n'use strict';\nvar _ = require('underscore');\nvar errors = require('web3-core-helpers').errors;\nvar formatters = require('web3-core-helpers').formatters;\nvar utils = require('web3-utils');\nvar promiEvent = require('web3-core-promievent');\nvar Subscriptions = require('web3-core-subscriptions').subscriptions;\nvar EthersTransactionUtils = require('@ethersproject/transactions');\nvar Method = function Method(options) {\n if (!options.call || !options.name) {\n throw new Error('When creating a method you need to provide at least the \"name\" and \"call\" property.');\n }\n this.name = options.name;\n this.call = options.call;\n this.params = options.params || 0;\n this.inputFormatter = options.inputFormatter;\n this.outputFormatter = options.outputFormatter;\n this.transformPayload = options.transformPayload;\n this.extraFormatters = options.extraFormatters;\n this.abiCoder = options.abiCoder; // Will be used to encode the revert reason string\n this.requestManager = options.requestManager;\n // reference to eth.accounts\n this.accounts = options.accounts;\n this.defaultBlock = options.defaultBlock || 'latest';\n this.defaultAccount = options.defaultAccount || null;\n this.transactionBlockTimeout = options.transactionBlockTimeout || 50;\n this.transactionConfirmationBlocks = options.transactionConfirmationBlocks || 24;\n this.transactionPollingTimeout = options.transactionPollingTimeout || 750;\n this.defaultCommon = options.defaultCommon;\n this.defaultChain = options.defaultChain;\n this.defaultHardfork = options.defaultHardfork;\n this.handleRevert = options.handleRevert;\n};\nMethod.prototype.setRequestManager = function (requestManager, accounts) {\n this.requestManager = requestManager;\n // reference to eth.accounts\n if (accounts) {\n this.accounts = accounts;\n }\n};\nMethod.prototype.createFunction = function (requestManager, accounts) {\n var func = this.buildCall();\n func.call = this.call;\n this.setRequestManager(requestManager || this.requestManager, accounts || this.accounts);\n return func;\n};\nMethod.prototype.attachToObject = function (obj) {\n var func = this.buildCall();\n func.call = this.call;\n var name = this.name.split('.');\n if (name.length > 1) {\n obj[name[0]] = obj[name[0]] || {};\n obj[name[0]][name[1]] = func;\n }\n else {\n obj[name[0]] = func;\n }\n};\n/**\n * Should be used to determine name of the jsonrpc method based on arguments\n *\n * @method getCall\n * @param {Array} arguments\n * @return {String} name of jsonrpc method\n */\nMethod.prototype.getCall = function (args) {\n return _.isFunction(this.call) ? this.call(args) : this.call;\n};\n/**\n * Should be used to extract callback from array of arguments. Modifies input param\n *\n * @method extractCallback\n * @param {Array} arguments\n * @return {Function|Null} callback, if exists\n */\nMethod.prototype.extractCallback = function (args) {\n if (_.isFunction(args[args.length - 1])) {\n return args.pop(); // modify the args array!\n }\n};\n/**\n * Should be called to check if the number of arguments is correct\n *\n * @method validateArgs\n * @param {Array} arguments\n * @throws {Error} if it is not\n */\nMethod.prototype.validateArgs = function (args) {\n if (args.length !== this.params) {\n throw errors.InvalidNumberOfParams(args.length, this.params, this.name);\n }\n};\n/**\n * Should be called to format input args of method\n *\n * @method formatInput\n * @param {Array}\n * @return {Array}\n */\nMethod.prototype.formatInput = function (args) {\n var _this = this;\n if (!this.inputFormatter) {\n return args;\n }\n return this.inputFormatter.map(function (formatter, index) {\n // bind this for defaultBlock, and defaultAccount\n return formatter ? formatter.call(_this, args[index]) : args[index];\n });\n};\n/**\n * Should be called to format output(result) of method\n *\n * @method formatOutput\n * @param {Object}\n * @return {Object}\n */\nMethod.prototype.formatOutput = function (result) {\n var _this = this;\n if (_.isArray(result)) {\n return result.map(function (res) {\n return _this.outputFormatter && res ? _this.outputFormatter(res) : res;\n });\n }\n else {\n return this.outputFormatter && result ? this.outputFormatter(result) : result;\n }\n};\n/**\n * Should create payload from given input args\n *\n * @method toPayload\n * @param {Array} args\n * @return {Object}\n */\nMethod.prototype.toPayload = function (args) {\n var call = this.getCall(args);\n var callback = this.extractCallback(args);\n var params = this.formatInput(args);\n this.validateArgs(params);\n var payload = {\n method: call,\n params: params,\n callback: callback\n };\n if (this.transformPayload) {\n payload = this.transformPayload(payload);\n }\n return payload;\n};\nMethod.prototype._confirmTransaction = function (defer, result, payload) {\n var method = this, promiseResolved = false, canUnsubscribe = true, timeoutCount = 0, confirmationCount = 0, intervalId = null, lastBlock = null, receiptJSON = '', gasProvided = (_.isObject(payload.params[0]) && payload.params[0].gas) ? payload.params[0].gas : null, isContractDeployment = _.isObject(payload.params[0]) &&\n payload.params[0].data &&\n payload.params[0].from &&\n !payload.params[0].to, hasBytecode = isContractDeployment && payload.params[0].data.length > 2;\n // add custom send Methods\n var _ethereumCalls = [\n new Method({\n name: 'getBlockByNumber',\n call: 'eth_getBlockByNumber',\n params: 2,\n inputFormatter: [formatters.inputBlockNumberFormatter, function (val) {\n return !!val;\n }],\n outputFormatter: formatters.outputBlockFormatter\n }),\n new Method({\n name: 'getTransactionReceipt',\n call: 'eth_getTransactionReceipt',\n params: 1,\n inputFormatter: [null],\n outputFormatter: formatters.outputTransactionReceiptFormatter\n }),\n new Method({\n name: 'getCode',\n call: 'eth_getCode',\n params: 2,\n inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]\n }),\n new Method({\n name: 'getTransactionByHash',\n call: 'eth_getTransactionByHash',\n params: 1,\n inputFormatter: [null],\n outputFormatter: formatters.outputTransactionFormatter\n }),\n new Subscriptions({\n name: 'subscribe',\n type: 'eth',\n subscriptions: {\n 'newBlockHeaders': {\n subscriptionName: 'newHeads',\n params: 0,\n outputFormatter: formatters.outputBlockFormatter\n }\n }\n })\n ];\n // attach methods to this._ethereumCall\n var _ethereumCall = {};\n _.each(_ethereumCalls, function (mthd) {\n mthd.attachToObject(_ethereumCall);\n mthd.requestManager = method.requestManager; // assign rather than call setRequestManager()\n });\n // fire \"receipt\" and confirmation events and resolve after\n var checkConfirmation = function (existingReceipt, isPolling, err, blockHeader, sub) {\n if (!err) {\n // create fake unsubscribe\n if (!sub) {\n sub = {\n unsubscribe: function () {\n clearInterval(intervalId);\n }\n };\n }\n // if we have a valid receipt we don't need to send a request\n return (existingReceipt ? promiEvent.resolve(existingReceipt) : _ethereumCall.getTransactionReceipt(result))\n // catch error from requesting receipt\n .catch(function (err) {\n sub.unsubscribe();\n promiseResolved = true;\n utils._fireError({\n message: 'Failed to check for transaction receipt:',\n data: err\n }, defer.eventEmitter, defer.reject);\n })\n // if CONFIRMATION listener exists check for confirmations, by setting canUnsubscribe = false\n .then(async function (receipt) {\n if (!receipt || !receipt.blockHash) {\n throw new Error('Receipt missing or blockHash null');\n }\n // apply extra formatters\n if (method.extraFormatters && method.extraFormatters.receiptFormatter) {\n receipt = method.extraFormatters.receiptFormatter(receipt);\n }\n // check if confirmation listener exists\n if (defer.eventEmitter.listeners('confirmation').length > 0) {\n var block;\n // If there was an immediately retrieved receipt, it's already\n // been confirmed by the direct call to checkConfirmation needed\n // for parity instant-seal\n if (existingReceipt === undefined || confirmationCount !== 0) {\n // Get latest block to emit with confirmation\n var latestBlock = await _ethereumCall.getBlockByNumber('latest');\n var latestBlockHash = latestBlock ? latestBlock.hash : null;\n if (isPolling) { // Check if actually a new block is existing on polling\n if (lastBlock) {\n block = await _ethereumCall.getBlockByNumber(lastBlock.number + 1);\n if (block) {\n lastBlock = block;\n defer.eventEmitter.emit('confirmation', confirmationCount, receipt, latestBlockHash);\n }\n }\n else {\n block = await _ethereumCall.getBlockByNumber(receipt.blockNumber);\n lastBlock = block;\n defer.eventEmitter.emit('confirmation', confirmationCount, receipt, latestBlockHash);\n }\n }\n else {\n defer.eventEmitter.emit('confirmation', confirmationCount, receipt, latestBlockHash);\n }\n }\n if ((isPolling && block) || !isPolling) {\n confirmationCount++;\n }\n canUnsubscribe = false;\n if (confirmationCount === method.transactionConfirmationBlocks + 1) { // add 1 so we account for conf 0\n sub.unsubscribe();\n defer.eventEmitter.removeAllListeners();\n }\n }\n return receipt;\n })\n // CHECK for CONTRACT DEPLOYMENT\n .then(async function (receipt) {\n if (isContractDeployment && !promiseResolved) {\n if (!receipt.contractAddress) {\n if (canUnsubscribe) {\n sub.unsubscribe();\n promiseResolved = true;\n }\n utils._fireError(errors.NoContractAddressFoundError(receipt), defer.eventEmitter, defer.reject, null, receipt);\n return;\n }\n var code;\n try {\n code = await _ethereumCall.getCode(receipt.contractAddress);\n }\n catch (err) {\n // ignore;\n }\n if (!code) {\n return;\n }\n // If deployment is status.true and there was a real\n // bytecode string, assume it was successful.\n var deploymentSuccess = receipt.status === true && hasBytecode;\n if (deploymentSuccess || code.length > 2) {\n defer.eventEmitter.emit('receipt', receipt);\n // if contract, return instance instead of receipt\n if (method.extraFormatters && method.extraFormatters.contractDeployFormatter) {\n defer.resolve(method.extraFormatters.contractDeployFormatter(receipt));\n }\n else {\n defer.resolve(receipt);\n }\n // need to remove listeners, as they aren't removed automatically when succesfull\n if (canUnsubscribe) {\n defer.eventEmitter.removeAllListeners();\n }\n }\n else {\n utils._fireError(errors.ContractCodeNotStoredError(receipt), defer.eventEmitter, defer.reject, null, receipt);\n }\n if (canUnsubscribe) {\n sub.unsubscribe();\n }\n promiseResolved = true;\n }\n return receipt;\n })\n // CHECK for normal tx check for receipt only\n .then(async function (receipt) {\n if (!isContractDeployment && !promiseResolved) {\n if (!receipt.outOfGas &&\n (!gasProvided || gasProvided !== receipt.gasUsed) &&\n (receipt.status === true || receipt.status === '0x1' || typeof receipt.status === 'undefined')) {\n defer.eventEmitter.emit('receipt', receipt);\n defer.resolve(receipt);\n // need to remove listeners, as they aren't removed automatically when succesfull\n if (canUnsubscribe) {\n defer.eventEmitter.removeAllListeners();\n }\n }\n else {\n receiptJSON = JSON.stringify(receipt, null, 2);\n if (receipt.status === false || receipt.status === '0x0') {\n try {\n var revertMessage = null;\n if (method.handleRevert &&\n (method.call === 'eth_sendTransaction' || method.call === 'eth_sendRawTransaction')) {\n var txReplayOptions = payload.params[0];\n // If send was raw, fetch the transaction and reconstitute the\n // original params so they can be replayed with `eth_call`\n if (method.call === 'eth_sendRawTransaction') {\n var rawTransactionHex = payload.params[0];\n var parsedTx = EthersTransactionUtils.parse(rawTransactionHex);\n txReplayOptions = formatters.inputTransactionFormatter({\n data: parsedTx.data,\n to: parsedTx.to,\n from: parsedTx.from,\n gas: parsedTx.gasLimit.toHexString(),\n gasPrice: parsedTx.gasPrice.toHexString(),\n value: parsedTx.value.toHexString()\n });\n }\n // Get revert reason string with eth_call\n revertMessage = await method.getRevertReason(txReplayOptions, receipt.blockNumber);\n if (revertMessage) { // Only throw a revert error if a revert reason is existing\n utils._fireError(errors.TransactionRevertInstructionError(revertMessage.reason, revertMessage.signature, receipt), defer.eventEmitter, defer.reject, null, receipt);\n }\n else {\n throw false; // Throw false and let the try/catch statement handle the error correctly after\n }\n }\n else {\n throw false; // Throw false and let the try/catch statement handle the error correctly after\n }\n }\n catch (error) {\n // Throw an normal revert error if no revert reason is given or the detection of it is disabled\n utils._fireError(errors.TransactionRevertedWithoutReasonError(receipt), defer.eventEmitter, defer.reject, null, receipt);\n }\n }\n else {\n // Throw OOG if status is not existing and provided gas and used gas are equal\n utils._fireError(errors.TransactionOutOfGasError(receipt), defer.eventEmitter, defer.reject, null, receipt);\n }\n }\n if (canUnsubscribe) {\n sub.unsubscribe();\n }\n promiseResolved = true;\n }\n })\n // time out the transaction if not mined after 50 blocks\n .catch(function () {\n timeoutCount++;\n // check to see if we are http polling\n if (!!isPolling) {\n // polling timeout is different than transactionBlockTimeout blocks since we are triggering every second\n if (timeoutCount - 1 >= method.transactionPollingTimeout) {\n sub.unsubscribe();\n promiseResolved = true;\n utils._fireError(errors.TransactionError('Transaction was not mined within ' + method.transactionPollingTimeout + ' seconds, please make sure your transaction was properly sent. Be aware that it might still be mined!'), defer.eventEmitter, defer.reject);\n }\n }\n else {\n if (timeoutCount - 1 >= method.transactionBlockTimeout) {\n sub.unsubscribe();\n promiseResolved = true;\n utils._fireError(errors.TransactionError('Transaction was not mined within ' + method.transactionBlockTimeout + ' blocks, please make sure your transaction was properly sent. Be aware that it might still be mined!'), defer.eventEmitter, defer.reject);\n }\n }\n });\n }\n else {\n sub.unsubscribe();\n promiseResolved = true;\n utils._fireError({\n message: 'Failed to subscribe to new newBlockHeaders to confirm the transaction receipts.',\n data: err\n }, defer.eventEmitter, defer.reject);\n }\n };\n // start watching for confirmation depending on the support features of the provider\n var startWatching = function (existingReceipt) {\n const startInterval = () => {\n intervalId = setInterval(checkConfirmation.bind(null, existingReceipt, true), 1000);\n };\n if (!this.requestManager.provider.on) {\n startInterval();\n }\n else {\n _ethereumCall.subscribe('newBlockHeaders', function (err, blockHeader, sub) {\n if (err || !blockHeader) {\n // fall back to polling\n startInterval();\n }\n else {\n checkConfirmation(existingReceipt, false, err, blockHeader, sub);\n }\n });\n }\n }.bind(this);\n // first check if we already have a confirmed transaction\n _ethereumCall.getTransactionReceipt(result)\n .then(function (receipt) {\n if (receipt && receipt.blockHash) {\n if (defer.eventEmitter.listeners('confirmation').length > 0) {\n // We must keep on watching for new Blocks, if a confirmation listener is present\n startWatching(receipt);\n }\n checkConfirmation(receipt, false);\n }\n else if (!promiseResolved) {\n startWatching();\n }\n })\n .catch(function () {\n if (!promiseResolved)\n startWatching();\n });\n};\nvar getWallet = function (from, accounts) {\n var wallet = null;\n // is index given\n if (_.isNumber(from)) {\n wallet = accounts.wallet[from];\n // is account given\n }\n else if (_.isObject(from) && from.address && from.privateKey) {\n wallet = from;\n // search in wallet for address\n }\n else {\n wallet = accounts.wallet[from.toLowerCase()];\n }\n return wallet;\n};\nMethod.prototype.buildCall = function () {\n var method = this, isSendTx = (method.call === 'eth_sendTransaction' || method.call === 'eth_sendRawTransaction'), // || method.call === 'personal_sendTransaction'\n isCall = (method.call === 'eth_call');\n // actual send function\n var send = function () {\n var defer = promiEvent(!isSendTx), payload = method.toPayload(Array.prototype.slice.call(arguments));\n // CALLBACK function\n var sendTxCallback = function (err, result) {\n if (method.handleRevert && isCall && method.abiCoder) {\n var reasonData;\n // Ganache / Geth <= 1.9.13 return the reason data as a successful eth_call response\n // Geth >= 1.9.15 attaches the reason data to an error object.\n // Geth 1.9.14 is missing revert reason (https://github.com/ethereum/web3.js/issues/3520)\n if (!err && method.isRevertReasonString(result)) {\n reasonData = result.substring(10);\n }\n else if (err && err.data) {\n reasonData = err.data.substring(10);\n }\n if (reasonData) {\n var reason = method.abiCoder.decodeParameter('string', '0x' + reasonData);\n var signature = 'Error(String)';\n utils._fireError(errors.RevertInstructionError(reason, signature), defer.eventEmitter, defer.reject, payload.callback, {\n reason: reason,\n signature: signature\n });\n return;\n }\n }\n try {\n result = method.formatOutput(result);\n }\n catch (e) {\n err = e;\n }\n if (result instanceof Error) {\n err = result;\n }\n if (!err) {\n if (payload.callback) {\n payload.callback(null, result);\n }\n }\n else {\n if (err.error) {\n err = err.error;\n }\n return utils._fireError(err, defer.eventEmitter, defer.reject, payload.callback);\n }\n // return PROMISE\n if (!isSendTx) {\n if (!err) {\n defer.resolve(result);\n }\n // return PROMIEVENT\n }\n else {\n defer.eventEmitter.emit('transactionHash', result);\n method._confirmTransaction(defer, result, payload);\n }\n };\n // SENDS the SIGNED SIGNATURE\n var sendSignedTx = function (sign) {\n var signedPayload = _.extend({}, payload, {\n method: 'eth_sendRawTransaction',\n params: [sign.rawTransaction]\n });\n method.requestManager.send(signedPayload, sendTxCallback);\n };\n var sendRequest = function (payload, method) {\n if (method && method.accounts && method.accounts.wallet && method.accounts.wallet.length) {\n var wallet;\n // ETH_SENDTRANSACTION\n if (payload.method === 'eth_sendTransaction') {\n var tx = payload.params[0];\n wallet = getWallet((_.isObject(tx)) ? tx.from : null, method.accounts);\n // If wallet was found, sign tx, and send using sendRawTransaction\n if (wallet && wallet.privateKey) {\n var txOptions = _.omit(tx, 'from');\n if (method.defaultChain && !txOptions.chain) {\n txOptions.chain = method.defaultChain;\n }\n if (method.defaultHardfork && !txOptions.hardfork) {\n txOptions.hardfork = method.defaultHardfork;\n }\n if (method.defaultCommon && !txOptions.common) {\n txOptions.common = method.defaultCommon;\n }\n return method.accounts.signTransaction(txOptions, wallet.privateKey)\n .then(sendSignedTx)\n .catch(function (err) {\n if (_.isFunction(defer.eventEmitter.listeners) && defer.eventEmitter.listeners('error').length) {\n defer.eventEmitter.emit('error', err);\n defer.eventEmitter.removeAllListeners();\n defer.eventEmitter.catch(function () {\n });\n }\n defer.reject(err);\n });\n }\n // ETH_SIGN\n }\n else if (payload.method === 'eth_sign') {\n var data = payload.params[1];\n wallet = getWallet(payload.params[0], method.accounts);\n // If wallet was found, sign tx, and send using sendRawTransaction\n if (wallet && wallet.privateKey) {\n var sign = method.accounts.sign(data, wallet.privateKey);\n if (payload.callback) {\n payload.callback(null, sign.signature);\n }\n defer.resolve(sign.signature);\n return;\n }\n }\n }\n return method.requestManager.send(payload, sendTxCallback);\n };\n // Send the actual transaction\n if (isSendTx && _.isObject(payload.params[0]) && typeof payload.params[0].gasPrice === 'undefined') {\n var getGasPrice = (new Method({\n name: 'getGasPrice',\n call: 'eth_gasPrice',\n params: 0\n })).createFunction(method.requestManager);\n getGasPrice(function (err, gasPrice) {\n if (gasPrice) {\n payload.params[0].gasPrice = gasPrice;\n }\n if (isSendTx) {\n setTimeout(() => {\n defer.eventEmitter.emit('sending', payload);\n }, 0);\n }\n sendRequest(payload, method);\n });\n }\n else {\n if (isSendTx) {\n setTimeout(() => {\n defer.eventEmitter.emit('sending', payload);\n }, 0);\n }\n sendRequest(payload, method);\n }\n if (isSendTx) {\n setTimeout(() => {\n defer.eventEmitter.emit('sent', payload);\n }, 0);\n }\n return defer.eventEmitter;\n };\n // necessary to attach things to the method\n send.method = method;\n // necessary for batch requests\n send.request = this.request.bind(this);\n return send;\n};\n/**\n * Returns the revert reason string if existing or otherwise false.\n *\n * @method getRevertReason\n *\n * @param {Object} txOptions\n * @param {Number} blockNumber\n *\n * @returns {Promise}\n */\nMethod.prototype.getRevertReason = function (txOptions, blockNumber) {\n var self = this;\n return new Promise(function (resolve, reject) {\n (new Method({\n name: 'call',\n call: 'eth_call',\n params: 2,\n abiCoder: self.abiCoder,\n handleRevert: true\n }))\n .createFunction(self.requestManager)(txOptions, utils.numberToHex(blockNumber))\n .then(function () {\n resolve(false);\n })\n .catch(function (error) {\n if (error.reason) {\n resolve({\n reason: error.reason,\n signature: error.signature\n });\n }\n else {\n reject(error);\n }\n });\n });\n};\n/**\n * Checks if the given hex string is a revert message from the EVM\n *\n * @method isRevertReasonString\n *\n * @param {String} data - Hex string prefixed with 0x\n *\n * @returns {Boolean}\n */\nMethod.prototype.isRevertReasonString = function (data) {\n return _.isString(data) && ((data.length - 2) / 2) % 32 === 4 && data.substring(0, 10) === '0x08c379a0';\n};\n/**\n * Should be called to create the pure JSONRPC request which can be used in a batch request\n *\n * @method request\n * @return {Object} jsonrpc request\n */\nMethod.prototype.request = function () {\n var payload = this.toPayload(Array.prototype.slice.call(arguments));\n payload.format = this.formatOutput.bind(this);\n return payload;\n};\nmodule.exports = Method;\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","export const version = \"abi/5.0.0-beta.153\";\n","module.exports = {\n encode: require('./encode.js')\n , decode: require('./decode.js')\n , encodingLength: require('./length.js')\n}\n","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","var asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","var base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","'use strict';\n\nif (!process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","module.exports = require(\"regenerator-runtime\");\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2016\n */\n\"use strict\";\nvar EventEmitter = require('eventemitter3');\n/**\n * This function generates a defer promise and adds eventEmitter functionality to it\n *\n * @method eventifiedPromise\n */\nvar PromiEvent = function PromiEvent(justPromise) {\n var resolve, reject, eventEmitter = new Promise(function () {\n resolve = arguments[0];\n reject = arguments[1];\n });\n if (justPromise) {\n return {\n resolve: resolve,\n reject: reject,\n eventEmitter: eventEmitter\n };\n }\n // get eventEmitter\n var emitter = new EventEmitter();\n // add eventEmitter to the promise\n eventEmitter._events = emitter._events;\n eventEmitter.emit = emitter.emit;\n eventEmitter.on = emitter.on;\n eventEmitter.once = emitter.once;\n eventEmitter.off = emitter.off;\n eventEmitter.listeners = emitter.listeners;\n eventEmitter.addListener = emitter.addListener;\n eventEmitter.removeListener = emitter.removeListener;\n eventEmitter.removeAllListeners = emitter.removeAllListeners;\n return {\n resolve: resolve,\n reject: reject,\n eventEmitter: eventEmitter\n };\n};\nPromiEvent.resolve = function (value) {\n var promise = PromiEvent(true);\n promise.resolve(value);\n return promise.eventEmitter;\n};\nmodule.exports = PromiEvent;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar Subscription = require('./subscription.js');\nvar Subscriptions = function Subscriptions(options) {\n this.name = options.name;\n this.type = options.type;\n this.subscriptions = options.subscriptions || {};\n this.requestManager = null;\n};\nSubscriptions.prototype.setRequestManager = function (rm) {\n this.requestManager = rm;\n};\nSubscriptions.prototype.attachToObject = function (obj) {\n var func = this.buildCall();\n var name = this.name.split('.');\n if (name.length > 1) {\n obj[name[0]] = obj[name[0]] || {};\n obj[name[0]][name[1]] = func;\n }\n else {\n obj[name[0]] = func;\n }\n};\nSubscriptions.prototype.buildCall = function () {\n var _this = this;\n return function () {\n if (!_this.subscriptions[arguments[0]]) {\n console.warn('Subscription ' + JSON.stringify(arguments[0]) + ' doesn\\'t exist. Subscribing anyway.');\n }\n var subscription = new Subscription({\n subscription: _this.subscriptions[arguments[0]] || {},\n requestManager: _this.requestManager,\n type: _this.type\n });\n return subscription.subscribe.apply(subscription, arguments);\n };\n};\nmodule.exports = {\n subscriptions: Subscriptions,\n subscription: Subscription\n};\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n for (var j = 0; j < naf.length; j += doubles.step) {\n var nafW = 0;\n for (var k = j + doubles.step - 1; k >= j; k--)\n nafW = (nafW << 1) + naf[k];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (var j = 0; j < repr.length; j++) {\n var nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\n k++;\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n for (var i = 0; i < len; i++) {\n var p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (var i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b] /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3 /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (var j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (var i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (var j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (var j = 0; j < len; j++) {\n var z = tmp[j];\n var p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (var i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar core = require('web3-core');\nvar Method = require('web3-core-method');\nvar utils = require('web3-utils');\nvar Net = function () {\n var _this = this;\n // sets _requestmanager\n core.packageInit(this, arguments);\n [\n new Method({\n name: 'getId',\n call: 'net_version',\n params: 0,\n outputFormatter: parseInt\n }),\n new Method({\n name: 'isListening',\n call: 'net_listening',\n params: 0\n }),\n new Method({\n name: 'getPeerCount',\n call: 'net_peerCount',\n params: 0,\n outputFormatter: utils.hexToNumber\n })\n ].forEach(function (method) {\n method.attachToObject(_this);\n method.setRequestManager(_this._requestManager);\n });\n};\ncore.addProviders(Net);\nmodule.exports = Net;\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","var isHexPrefixed = require('is-hex-prefixed');\n\n/**\n * Removes '0x' from a given `String` is present\n * @param {String} str the string value\n * @return {String|Optional} a string by pass if necessary\n */\nmodule.exports = function stripHexPrefix(str) {\n if (typeof str !== 'string') {\n return str;\n }\n\n return isHexPrefixed(str) ? str.slice(2) : str;\n}\n","// This was ported from https://github.com/emn178/js-sha3, with some minor\n// modifications and pruning. It is licensed under MIT:\n//\n// Copyright 2015-2016 Chen, Yi-Cyuan\n// \n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nconst HEX_CHARS = '0123456789abcdef'.split('');\nconst KECCAK_PADDING = [1, 256, 65536, 16777216];\nconst SHIFT = [0, 8, 16, 24];\nconst RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\n\nconst Keccak = bits => ({\n blocks: [],\n reset: true,\n block: 0,\n start: 0,\n blockCount: 1600 - (bits << 1) >> 5,\n outputBlocks: bits >> 5,\n s: (s => [].concat(s, s, s, s, s))([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n});\n\nconst update = (state, message) => {\n var length = message.length,\n blocks = state.blocks,\n byteCount = state.blockCount << 2,\n blockCount = state.blockCount,\n outputBlocks = state.outputBlocks,\n s = state.s,\n index = 0,\n i,\n code;\n\n // update\n while (index < length) {\n if (state.reset) {\n state.reset = false;\n blocks[0] = state.block;\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n if (typeof message !== \"string\") {\n for (i = state.start; index < length && i < byteCount; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = state.start; index < length && i < byteCount; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff);\n blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];\n }\n }\n }\n state.lastByteIndex = i;\n if (i >= byteCount) {\n state.start = i - byteCount;\n state.block = blocks[blockCount];\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n state.reset = true;\n } else {\n state.start = i;\n }\n }\n\n // finalize\n i = state.lastByteIndex;\n blocks[i >> 2] |= KECCAK_PADDING[i & 3];\n if (state.lastByteIndex === byteCount) {\n blocks[0] = blocks[blockCount];\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n blocks[blockCount - 1] |= 0x80000000;\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n\n // toString\n var hex = '',\n i = 0,\n j = 0,\n block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n block = s[i];\n hex += HEX_CHARS[block >> 4 & 0x0F] + HEX_CHARS[block & 0x0F] + HEX_CHARS[block >> 12 & 0x0F] + HEX_CHARS[block >> 8 & 0x0F] + HEX_CHARS[block >> 20 & 0x0F] + HEX_CHARS[block >> 16 & 0x0F] + HEX_CHARS[block >> 28 & 0x0F] + HEX_CHARS[block >> 24 & 0x0F];\n }\n if (j % blockCount === 0) {\n f(s);\n i = 0;\n }\n }\n return \"0x\" + hex;\n};\n\nconst f = s => {\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\n\n for (n = 0; n < 48; n += 2) {\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\n\n h = c8 ^ (c2 << 1 | c3 >>> 31);\n l = c9 ^ (c3 << 1 | c2 >>> 31);\n s[0] ^= h;\n s[1] ^= l;\n s[10] ^= h;\n s[11] ^= l;\n s[20] ^= h;\n s[21] ^= l;\n s[30] ^= h;\n s[31] ^= l;\n s[40] ^= h;\n s[41] ^= l;\n h = c0 ^ (c4 << 1 | c5 >>> 31);\n l = c1 ^ (c5 << 1 | c4 >>> 31);\n s[2] ^= h;\n s[3] ^= l;\n s[12] ^= h;\n s[13] ^= l;\n s[22] ^= h;\n s[23] ^= l;\n s[32] ^= h;\n s[33] ^= l;\n s[42] ^= h;\n s[43] ^= l;\n h = c2 ^ (c6 << 1 | c7 >>> 31);\n l = c3 ^ (c7 << 1 | c6 >>> 31);\n s[4] ^= h;\n s[5] ^= l;\n s[14] ^= h;\n s[15] ^= l;\n s[24] ^= h;\n s[25] ^= l;\n s[34] ^= h;\n s[35] ^= l;\n s[44] ^= h;\n s[45] ^= l;\n h = c4 ^ (c8 << 1 | c9 >>> 31);\n l = c5 ^ (c9 << 1 | c8 >>> 31);\n s[6] ^= h;\n s[7] ^= l;\n s[16] ^= h;\n s[17] ^= l;\n s[26] ^= h;\n s[27] ^= l;\n s[36] ^= h;\n s[37] ^= l;\n s[46] ^= h;\n s[47] ^= l;\n h = c6 ^ (c0 << 1 | c1 >>> 31);\n l = c7 ^ (c1 << 1 | c0 >>> 31);\n s[8] ^= h;\n s[9] ^= l;\n s[18] ^= h;\n s[19] ^= l;\n s[28] ^= h;\n s[29] ^= l;\n s[38] ^= h;\n s[39] ^= l;\n s[48] ^= h;\n s[49] ^= l;\n\n b0 = s[0];\n b1 = s[1];\n b32 = s[11] << 4 | s[10] >>> 28;\n b33 = s[10] << 4 | s[11] >>> 28;\n b14 = s[20] << 3 | s[21] >>> 29;\n b15 = s[21] << 3 | s[20] >>> 29;\n b46 = s[31] << 9 | s[30] >>> 23;\n b47 = s[30] << 9 | s[31] >>> 23;\n b28 = s[40] << 18 | s[41] >>> 14;\n b29 = s[41] << 18 | s[40] >>> 14;\n b20 = s[2] << 1 | s[3] >>> 31;\n b21 = s[3] << 1 | s[2] >>> 31;\n b2 = s[13] << 12 | s[12] >>> 20;\n b3 = s[12] << 12 | s[13] >>> 20;\n b34 = s[22] << 10 | s[23] >>> 22;\n b35 = s[23] << 10 | s[22] >>> 22;\n b16 = s[33] << 13 | s[32] >>> 19;\n b17 = s[32] << 13 | s[33] >>> 19;\n b48 = s[42] << 2 | s[43] >>> 30;\n b49 = s[43] << 2 | s[42] >>> 30;\n b40 = s[5] << 30 | s[4] >>> 2;\n b41 = s[4] << 30 | s[5] >>> 2;\n b22 = s[14] << 6 | s[15] >>> 26;\n b23 = s[15] << 6 | s[14] >>> 26;\n b4 = s[25] << 11 | s[24] >>> 21;\n b5 = s[24] << 11 | s[25] >>> 21;\n b36 = s[34] << 15 | s[35] >>> 17;\n b37 = s[35] << 15 | s[34] >>> 17;\n b18 = s[45] << 29 | s[44] >>> 3;\n b19 = s[44] << 29 | s[45] >>> 3;\n b10 = s[6] << 28 | s[7] >>> 4;\n b11 = s[7] << 28 | s[6] >>> 4;\n b42 = s[17] << 23 | s[16] >>> 9;\n b43 = s[16] << 23 | s[17] >>> 9;\n b24 = s[26] << 25 | s[27] >>> 7;\n b25 = s[27] << 25 | s[26] >>> 7;\n b6 = s[36] << 21 | s[37] >>> 11;\n b7 = s[37] << 21 | s[36] >>> 11;\n b38 = s[47] << 24 | s[46] >>> 8;\n b39 = s[46] << 24 | s[47] >>> 8;\n b30 = s[8] << 27 | s[9] >>> 5;\n b31 = s[9] << 27 | s[8] >>> 5;\n b12 = s[18] << 20 | s[19] >>> 12;\n b13 = s[19] << 20 | s[18] >>> 12;\n b44 = s[29] << 7 | s[28] >>> 25;\n b45 = s[28] << 7 | s[29] >>> 25;\n b26 = s[38] << 8 | s[39] >>> 24;\n b27 = s[39] << 8 | s[38] >>> 24;\n b8 = s[48] << 14 | s[49] >>> 18;\n b9 = s[49] << 14 | s[48] >>> 18;\n\n s[0] = b0 ^ ~b2 & b4;\n s[1] = b1 ^ ~b3 & b5;\n s[10] = b10 ^ ~b12 & b14;\n s[11] = b11 ^ ~b13 & b15;\n s[20] = b20 ^ ~b22 & b24;\n s[21] = b21 ^ ~b23 & b25;\n s[30] = b30 ^ ~b32 & b34;\n s[31] = b31 ^ ~b33 & b35;\n s[40] = b40 ^ ~b42 & b44;\n s[41] = b41 ^ ~b43 & b45;\n s[2] = b2 ^ ~b4 & b6;\n s[3] = b3 ^ ~b5 & b7;\n s[12] = b12 ^ ~b14 & b16;\n s[13] = b13 ^ ~b15 & b17;\n s[22] = b22 ^ ~b24 & b26;\n s[23] = b23 ^ ~b25 & b27;\n s[32] = b32 ^ ~b34 & b36;\n s[33] = b33 ^ ~b35 & b37;\n s[42] = b42 ^ ~b44 & b46;\n s[43] = b43 ^ ~b45 & b47;\n s[4] = b4 ^ ~b6 & b8;\n s[5] = b5 ^ ~b7 & b9;\n s[14] = b14 ^ ~b16 & b18;\n s[15] = b15 ^ ~b17 & b19;\n s[24] = b24 ^ ~b26 & b28;\n s[25] = b25 ^ ~b27 & b29;\n s[34] = b34 ^ ~b36 & b38;\n s[35] = b35 ^ ~b37 & b39;\n s[44] = b44 ^ ~b46 & b48;\n s[45] = b45 ^ ~b47 & b49;\n s[6] = b6 ^ ~b8 & b0;\n s[7] = b7 ^ ~b9 & b1;\n s[16] = b16 ^ ~b18 & b10;\n s[17] = b17 ^ ~b19 & b11;\n s[26] = b26 ^ ~b28 & b20;\n s[27] = b27 ^ ~b29 & b21;\n s[36] = b36 ^ ~b38 & b30;\n s[37] = b37 ^ ~b39 & b31;\n s[46] = b46 ^ ~b48 & b40;\n s[47] = b47 ^ ~b49 & b41;\n s[8] = b8 ^ ~b0 & b2;\n s[9] = b9 ^ ~b1 & b3;\n s[18] = b18 ^ ~b10 & b12;\n s[19] = b19 ^ ~b11 & b13;\n s[28] = b28 ^ ~b20 & b22;\n s[29] = b29 ^ ~b21 & b23;\n s[38] = b38 ^ ~b30 & b32;\n s[39] = b39 ^ ~b31 & b33;\n s[48] = b48 ^ ~b40 & b42;\n s[49] = b49 ^ ~b41 & b43;\n\n s[0] ^= RC[n];\n s[1] ^= RC[n + 1];\n }\n};\n\nconst keccak = bits => str => {\n var msg;\n if (str.slice(0, 2) === \"0x\") {\n msg = [];\n for (var i = 2, l = str.length; i < l; i += 2) msg.push(parseInt(str.slice(i, i + 2), 16));\n } else {\n msg = str;\n }\n return update(Keccak(bits, bits), msg);\n};\n\nmodule.exports = {\n keccak256: keccak(256),\n keccak512: keccak(512),\n keccak256s: keccak(256),\n keccak512s: keccak(512)\n};","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","var ClientRequest = require('./lib/request')\nvar response = require('./lib/response')\nvar extend = require('xtend')\nvar statusCodes = require('builtin-status-codes')\nvar url = require('url')\n\nvar http = exports\n\nhttp.request = function (opts, cb) {\n\tif (typeof opts === 'string')\n\t\topts = url.parse(opts)\n\telse\n\t\topts = extend(opts)\n\n\t// Normally, the page is loaded from http or https, so not specifying a protocol\n\t// will result in a (valid) protocol-relative url. However, this won't work if\n\t// the protocol is something else, like 'file:'\n\tvar defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''\n\n\tvar protocol = opts.protocol || defaultProtocol\n\tvar host = opts.hostname || opts.host\n\tvar port = opts.port\n\tvar path = opts.path || '/'\n\n\t// Necessary for IPv6 addresses\n\tif (host && host.indexOf(':') !== -1)\n\t\thost = '[' + host + ']'\n\n\t// This may be a relative url. The browser should always be able to interpret it correctly.\n\topts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path\n\topts.method = (opts.method || 'GET').toUpperCase()\n\topts.headers = opts.headers || {}\n\n\t// Also valid opts.auth, opts.mode\n\n\tvar req = new ClientRequest(opts)\n\tif (cb)\n\t\treq.on('response', cb)\n\treturn req\n}\n\nhttp.get = function get (opts, cb) {\n\tvar req = http.request(opts, cb)\n\treq.end()\n\treturn req\n}\n\nhttp.ClientRequest = ClientRequest\nhttp.IncomingMessage = response.IncomingMessage\n\nhttp.Agent = function () {}\nhttp.Agent.defaultMaxSockets = 4\n\nhttp.globalAgent = new http.Agent()\n\nhttp.STATUS_CODES = statusCodes\n\nhttp.METHODS = [\n\t'CHECKOUT',\n\t'CONNECT',\n\t'COPY',\n\t'DELETE',\n\t'GET',\n\t'HEAD',\n\t'LOCK',\n\t'M-SEARCH',\n\t'MERGE',\n\t'MKACTIVITY',\n\t'MKCOL',\n\t'MOVE',\n\t'NOTIFY',\n\t'OPTIONS',\n\t'PATCH',\n\t'POST',\n\t'PROPFIND',\n\t'PROPPATCH',\n\t'PURGE',\n\t'PUT',\n\t'REPORT',\n\t'SEARCH',\n\t'SUBSCRIBE',\n\t'TRACE',\n\t'UNLOCK',\n\t'UNSUBSCRIBE'\n]","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar XMLHttpRequestEventTarget = /** @class */ (function () {\n function XMLHttpRequestEventTarget() {\n this.listeners = {};\n }\n XMLHttpRequestEventTarget.prototype.addEventListener = function (eventType, listener) {\n eventType = eventType.toLowerCase();\n this.listeners[eventType] = this.listeners[eventType] || [];\n this.listeners[eventType].push(listener.handleEvent || listener);\n };\n XMLHttpRequestEventTarget.prototype.removeEventListener = function (eventType, listener) {\n eventType = eventType.toLowerCase();\n if (!this.listeners[eventType]) {\n return;\n }\n var index = this.listeners[eventType].indexOf(listener.handleEvent || listener);\n if (index < 0) {\n return;\n }\n this.listeners[eventType].splice(index, 1);\n };\n XMLHttpRequestEventTarget.prototype.dispatchEvent = function (event) {\n var eventType = event.type.toLowerCase();\n event.target = this; // TODO: set event.currentTarget?\n if (this.listeners[eventType]) {\n for (var _i = 0, _a = this.listeners[eventType]; _i < _a.length; _i++) {\n var listener_1 = _a[_i];\n listener_1.call(this, event);\n }\n }\n var listener = this[\"on\" + eventType];\n if (listener) {\n listener.call(this, event);\n }\n return true;\n };\n return XMLHttpRequestEventTarget;\n}());\nexports.XMLHttpRequestEventTarget = XMLHttpRequestEventTarget;\n//# sourceMappingURL=xml-http-request-event-target.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve\n });\n return curve;\n }\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n ]\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n ]\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n ]\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n ]\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n ]\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9'\n ]\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658'\n ]\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3'\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15'\n }\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre\n ]\n});\n","\"use strict\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n;\nconst _constructorGuard = {};\nlet ModifiersBytes = { calldata: true, memory: true, storage: true };\nlet ModifiersNest = { calldata: true, memory: true };\nfunction checkModifier(type, name) {\n if (type === \"bytes\" || type === \"string\") {\n if (ModifiersBytes[name]) {\n return true;\n }\n }\n else if (type === \"address\") {\n if (name === \"payable\") {\n return true;\n }\n }\n else if (type.indexOf(\"[\") >= 0 || type === \"tuple\") {\n if (ModifiersNest[name]) {\n return true;\n }\n }\n if (ModifiersBytes[name] || name === \"payable\") {\n logger.throwArgumentError(\"invalid modifier\", \"name\", name);\n }\n return false;\n}\n// @TODO: Make sure that children of an indexed tuple are marked with a null indexed\nfunction parseParamType(param, allowIndexed) {\n let originalParam = param;\n function throwError(i) {\n logger.throwArgumentError(`unexpected character at position ${i}`, \"param\", param);\n }\n param = param.replace(/\\s/g, \" \");\n function newNode(parent) {\n let node = { type: \"\", name: \"\", parent: parent, state: { allowType: true } };\n if (allowIndexed) {\n node.indexed = false;\n }\n return node;\n }\n let parent = { type: \"\", name: \"\", state: { allowType: true } };\n let node = parent;\n for (let i = 0; i < param.length; i++) {\n let c = param[i];\n switch (c) {\n case \"(\":\n if (node.state.allowType && node.type === \"\") {\n node.type = \"tuple\";\n }\n else if (!node.state.allowParams) {\n throwError(i);\n }\n node.state.allowType = false;\n node.type = verifyType(node.type);\n node.components = [newNode(node)];\n node = node.components[0];\n break;\n case \")\":\n delete node.state;\n if (node.name === \"indexed\") {\n if (!allowIndexed) {\n throwError(i);\n }\n node.indexed = true;\n node.name = \"\";\n }\n if (checkModifier(node.type, node.name)) {\n node.name = \"\";\n }\n node.type = verifyType(node.type);\n let child = node;\n node = node.parent;\n if (!node) {\n throwError(i);\n }\n delete child.parent;\n node.state.allowParams = false;\n node.state.allowName = true;\n node.state.allowArray = true;\n break;\n case \",\":\n delete node.state;\n if (node.name === \"indexed\") {\n if (!allowIndexed) {\n throwError(i);\n }\n node.indexed = true;\n node.name = \"\";\n }\n if (checkModifier(node.type, node.name)) {\n node.name = \"\";\n }\n node.type = verifyType(node.type);\n let sibling = newNode(node.parent);\n //{ type: \"\", name: \"\", parent: node.parent, state: { allowType: true } };\n node.parent.components.push(sibling);\n delete node.parent;\n node = sibling;\n break;\n // Hit a space...\n case \" \":\n // If reading type, the type is done and may read a param or name\n if (node.state.allowType) {\n if (node.type !== \"\") {\n node.type = verifyType(node.type);\n delete node.state.allowType;\n node.state.allowName = true;\n node.state.allowParams = true;\n }\n }\n // If reading name, the name is done\n if (node.state.allowName) {\n if (node.name !== \"\") {\n if (node.name === \"indexed\") {\n if (!allowIndexed) {\n throwError(i);\n }\n if (node.indexed) {\n throwError(i);\n }\n node.indexed = true;\n node.name = \"\";\n }\n else if (checkModifier(node.type, node.name)) {\n node.name = \"\";\n }\n else {\n node.state.allowName = false;\n }\n }\n }\n break;\n case \"[\":\n if (!node.state.allowArray) {\n throwError(i);\n }\n node.type += c;\n node.state.allowArray = false;\n node.state.allowName = false;\n node.state.readArray = true;\n break;\n case \"]\":\n if (!node.state.readArray) {\n throwError(i);\n }\n node.type += c;\n node.state.readArray = false;\n node.state.allowArray = true;\n node.state.allowName = true;\n break;\n default:\n if (node.state.allowType) {\n node.type += c;\n node.state.allowParams = true;\n node.state.allowArray = true;\n }\n else if (node.state.allowName) {\n node.name += c;\n delete node.state.allowArray;\n }\n else if (node.state.readArray) {\n node.type += c;\n }\n else {\n throwError(i);\n }\n }\n }\n if (node.parent) {\n logger.throwArgumentError(\"unexpected eof\", \"param\", param);\n }\n delete parent.state;\n if (node.name === \"indexed\") {\n if (!allowIndexed) {\n throwError(originalParam.length - 7);\n }\n if (node.indexed) {\n throwError(originalParam.length - 7);\n }\n node.indexed = true;\n node.name = \"\";\n }\n else if (checkModifier(node.type, node.name)) {\n node.name = \"\";\n }\n parent.type = verifyType(parent.type);\n return parent;\n}\nfunction populate(object, params) {\n for (let key in params) {\n defineReadOnly(object, key, params[key]);\n }\n}\nexport const FormatTypes = Object.freeze({\n // Bare formatting, as is needed for computing a sighash of an event or function\n sighash: \"sighash\",\n // Human-Readable with Minimal spacing and without names (compact human-readable)\n minimal: \"minimal\",\n // Human-Readble with nice spacing, including all names\n full: \"full\",\n // JSON-format a la Solidity\n json: \"json\"\n});\nconst paramTypeArray = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\nexport class ParamType {\n constructor(constructorGuard, params) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"use fromString\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new ParamType()\"\n });\n }\n populate(this, params);\n let match = this.type.match(paramTypeArray);\n if (match) {\n populate(this, {\n arrayLength: parseInt(match[2] || \"-1\"),\n arrayChildren: ParamType.fromObject({\n type: match[1],\n components: this.components\n }),\n baseType: \"array\"\n });\n }\n else {\n populate(this, {\n arrayLength: null,\n arrayChildren: null,\n baseType: ((this.components != null) ? \"tuple\" : this.type)\n });\n }\n this._isParamType = true;\n Object.freeze(this);\n }\n // Format the parameter fragment\n // - sighash: \"(uint256,address)\"\n // - minimal: \"tuple(uint256,address) indexed\"\n // - full: \"tuple(uint256 foo, addres bar) indexed baz\"\n format(format) {\n if (!format) {\n format = FormatTypes.sighash;\n }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatTypes.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.components) {\n result.components = this.components.map((comp) => JSON.parse(comp.format(format)));\n }\n return JSON.stringify(result);\n }\n let result = \"\";\n // Array\n if (this.baseType === \"array\") {\n result += this.arrayChildren.format(format);\n result += \"[\" + (this.arrayLength < 0 ? \"\" : String(this.arrayLength)) + \"]\";\n }\n else {\n if (this.baseType === \"tuple\") {\n if (format !== FormatTypes.sighash) {\n result += this.type;\n }\n result += \"(\" + this.components.map((comp) => comp.format(format)).join((format === FormatTypes.full) ? \", \" : \",\") + \")\";\n }\n else {\n result += this.type;\n }\n }\n if (format !== FormatTypes.sighash) {\n if (this.indexed === true) {\n result += \" indexed\";\n }\n if (format === FormatTypes.full && this.name) {\n result += \" \" + this.name;\n }\n }\n return result;\n }\n static from(value, allowIndexed) {\n if (typeof (value) === \"string\") {\n return ParamType.fromString(value, allowIndexed);\n }\n return ParamType.fromObject(value);\n }\n static fromObject(value) {\n if (ParamType.isParamType(value)) {\n return value;\n }\n return new ParamType(_constructorGuard, {\n name: (value.name || null),\n type: verifyType(value.type),\n indexed: ((value.indexed == null) ? null : !!value.indexed),\n components: (value.components ? value.components.map(ParamType.fromObject) : null)\n });\n }\n static fromString(value, allowIndexed) {\n function ParamTypify(node) {\n return ParamType.fromObject({\n name: node.name,\n type: node.type,\n indexed: node.indexed,\n components: node.components\n });\n }\n return ParamTypify(parseParamType(value, !!allowIndexed));\n }\n static isParamType(value) {\n return !!(value != null && value._isParamType);\n }\n}\n;\nfunction parseParams(value, allowIndex) {\n return splitNesting(value).map((param) => ParamType.fromString(param, allowIndex));\n}\nexport class Fragment {\n constructor(constructorGuard, params) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"use a static from method\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new Fragment()\"\n });\n }\n populate(this, params);\n this._isFragment = true;\n Object.freeze(this);\n }\n static from(value) {\n if (Fragment.isFragment(value)) {\n return value;\n }\n if (typeof (value) === \"string\") {\n return Fragment.fromString(value);\n }\n return Fragment.fromObject(value);\n }\n static fromObject(value) {\n if (Fragment.isFragment(value)) {\n return value;\n }\n switch (value.type) {\n case \"function\":\n return FunctionFragment.fromObject(value);\n case \"event\":\n return EventFragment.fromObject(value);\n case \"constructor\":\n return ConstructorFragment.fromObject(value);\n case \"fallback\":\n case \"receive\":\n // @TODO: Something? Maybe return a FunctionFragment? A custom DefaultFunctionFragment?\n return null;\n }\n return logger.throwArgumentError(\"invalid fragment object\", \"value\", value);\n }\n static fromString(value) {\n // Make sure the \"returns\" is surrounded by a space and all whitespace is exactly one space\n value = value.replace(/\\s/g, \" \");\n value = value.replace(/\\(/g, \" (\").replace(/\\)/g, \") \").replace(/\\s+/g, \" \");\n value = value.trim();\n if (value.split(\" \")[0] === \"event\") {\n return EventFragment.fromString(value.substring(5).trim());\n }\n else if (value.split(\" \")[0] === \"function\") {\n return FunctionFragment.fromString(value.substring(8).trim());\n }\n else if (value.split(\"(\")[0].trim() === \"constructor\") {\n return ConstructorFragment.fromString(value.trim());\n }\n return logger.throwArgumentError(\"unsupported fragment\", \"value\", value);\n }\n static isFragment(value) {\n return !!(value && value._isFragment);\n }\n}\nexport class EventFragment extends Fragment {\n format(format) {\n if (!format) {\n format = FormatTypes.sighash;\n }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"event\",\n anonymous: this.anonymous,\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format)))\n });\n }\n let result = \"\";\n if (format !== FormatTypes.sighash) {\n result += \"event \";\n }\n result += this.name + \"(\" + this.inputs.map((input) => input.format(format)).join((format === FormatTypes.full) ? \", \" : \",\") + \") \";\n if (format !== FormatTypes.sighash) {\n if (this.anonymous) {\n result += \"anonymous \";\n }\n }\n return result.trim();\n }\n static from(value) {\n if (typeof (value) === \"string\") {\n return EventFragment.fromString(value);\n }\n return EventFragment.fromObject(value);\n }\n static fromObject(value) {\n if (EventFragment.isEventFragment(value)) {\n return value;\n }\n if (value.type !== \"event\") {\n logger.throwArgumentError(\"invalid event object\", \"value\", value);\n }\n const params = {\n name: verifyIdentifier(value.name),\n anonymous: value.anonymous,\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),\n type: \"event\"\n };\n return new EventFragment(_constructorGuard, params);\n }\n static fromString(value) {\n let match = value.match(regexParen);\n if (!match) {\n logger.throwArgumentError(\"invalid event string\", \"value\", value);\n }\n let anonymous = false;\n match[3].split(\" \").forEach((modifier) => {\n switch (modifier.trim()) {\n case \"anonymous\":\n anonymous = true;\n break;\n case \"\":\n break;\n default:\n logger.warn(\"unknown modifier: \" + modifier);\n }\n });\n return EventFragment.fromObject({\n name: match[1].trim(),\n anonymous: anonymous,\n inputs: parseParams(match[2], true),\n type: \"event\"\n });\n }\n static isEventFragment(value) {\n return (value && value._isFragment && value.type === \"event\");\n }\n}\nfunction parseGas(value, params) {\n params.gas = null;\n let comps = value.split(\"@\");\n if (comps.length !== 1) {\n if (comps.length > 2) {\n logger.throwArgumentError(\"invalid human-readable ABI signature\", \"value\", value);\n }\n if (!comps[1].match(/^[0-9]+$/)) {\n logger.throwArgumentError(\"invalid human-readable ABI signature gas\", \"value\", value);\n }\n params.gas = BigNumber.from(comps[1]);\n return comps[0];\n }\n return value;\n}\nfunction parseModifiers(value, params) {\n params.constant = false;\n params.payable = false;\n params.stateMutability = \"nonpayable\";\n value.split(\" \").forEach((modifier) => {\n switch (modifier.trim()) {\n case \"constant\":\n params.constant = true;\n break;\n case \"payable\":\n params.payable = true;\n params.stateMutability = \"payable\";\n break;\n case \"pure\":\n params.constant = true;\n params.stateMutability = \"pure\";\n break;\n case \"view\":\n params.constant = true;\n params.stateMutability = \"view\";\n break;\n case \"external\":\n case \"public\":\n case \"\":\n break;\n default:\n console.log(\"unknown modifier: \" + modifier);\n }\n });\n}\nfunction verifyState(value) {\n let result = {\n constant: false,\n payable: true,\n stateMutability: \"payable\"\n };\n if (value.stateMutability != null) {\n result.stateMutability = value.stateMutability;\n // Set (and check things are consistent) the constant property\n result.constant = (result.stateMutability === \"view\" || result.stateMutability === \"pure\");\n if (value.constant != null) {\n if ((!!value.constant) !== result.constant) {\n logger.throwArgumentError(\"cannot have constant function with mutability \" + result.stateMutability, \"value\", value);\n }\n }\n // Set (and check things are consistent) the payable property\n result.payable = (result.stateMutability === \"payable\");\n if (value.payable != null) {\n if ((!!value.payable) !== result.payable) {\n logger.throwArgumentError(\"cannot have payable function with mutability \" + result.stateMutability, \"value\", value);\n }\n }\n }\n else if (value.payable != null) {\n result.payable = !!value.payable;\n // If payable we can assume non-constant; otherwise we can't assume\n if (value.constant == null && !result.payable && value.type !== \"constructor\") {\n logger.throwArgumentError(\"unable to determine stateMutability\", \"value\", value);\n }\n result.constant = !!value.constant;\n if (result.constant) {\n result.stateMutability = \"view\";\n }\n else {\n result.stateMutability = (result.payable ? \"payable\" : \"nonpayable\");\n }\n if (result.payable && result.constant) {\n logger.throwArgumentError(\"cannot have constant payable function\", \"value\", value);\n }\n }\n else if (value.constant != null) {\n result.constant = !!value.constant;\n result.payable = !result.constant;\n result.stateMutability = (result.constant ? \"view\" : \"payable\");\n }\n else if (value.type !== \"constructor\") {\n logger.throwArgumentError(\"unable to determine stateMutability\", \"value\", value);\n }\n return result;\n}\nexport class ConstructorFragment extends Fragment {\n format(format) {\n if (!format) {\n format = FormatTypes.sighash;\n }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"constructor\",\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability : undefined),\n payble: this.payable,\n gas: (this.gas ? this.gas.toNumber() : undefined),\n inputs: this.inputs.map((input) => JSON.parse(input.format(format)))\n });\n }\n if (format === FormatTypes.sighash) {\n logger.throwError(\"cannot format a constructor for sighash\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"format(sighash)\"\n });\n }\n let result = \"constructor(\" + this.inputs.map((input) => input.format(format)).join((format === FormatTypes.full) ? \", \" : \",\") + \") \";\n if (this.stateMutability && this.stateMutability !== \"nonpayable\") {\n result += this.stateMutability + \" \";\n }\n return result.trim();\n }\n static from(value) {\n if (typeof (value) === \"string\") {\n return ConstructorFragment.fromString(value);\n }\n return ConstructorFragment.fromObject(value);\n }\n static fromObject(value) {\n if (ConstructorFragment.isConstructorFragment(value)) {\n return value;\n }\n if (value.type !== \"constructor\") {\n logger.throwArgumentError(\"invalid constructor object\", \"value\", value);\n }\n let state = verifyState(value);\n if (state.constant) {\n logger.throwArgumentError(\"constructor cannot be constant\", \"value\", value);\n }\n const params = {\n name: null,\n type: value.type,\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),\n payable: state.payable,\n stateMutability: state.stateMutability,\n gas: (value.gas ? BigNumber.from(value.gas) : null)\n };\n return new ConstructorFragment(_constructorGuard, params);\n }\n static fromString(value) {\n let params = { type: \"constructor\" };\n value = parseGas(value, params);\n let parens = value.match(regexParen);\n if (!parens || parens[1].trim() !== \"constructor\") {\n logger.throwArgumentError(\"invalid constructor string\", \"value\", value);\n }\n params.inputs = parseParams(parens[2].trim(), false);\n parseModifiers(parens[3].trim(), params);\n return ConstructorFragment.fromObject(params);\n }\n static isConstructorFragment(value) {\n return (value && value._isFragment && value.type === \"constructor\");\n }\n}\nexport class FunctionFragment extends ConstructorFragment {\n format(format) {\n if (!format) {\n format = FormatTypes.sighash;\n }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatTypes.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 payble: this.payable,\n gas: (this.gas ? this.gas.toNumber() : undefined),\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n ouputs: this.outputs.map((output) => JSON.parse(output.format(format))),\n });\n }\n let result = \"\";\n if (format !== FormatTypes.sighash) {\n result += \"function \";\n }\n result += this.name + \"(\" + this.inputs.map((input) => input.format(format)).join((format === FormatTypes.full) ? \", \" : \",\") + \") \";\n if (format !== FormatTypes.sighash) {\n if (this.stateMutability) {\n if (this.stateMutability !== \"nonpayable\") {\n result += (this.stateMutability + \" \");\n }\n }\n else if (this.constant) {\n result += \"view \";\n }\n if (this.outputs && this.outputs.length) {\n result += \"returns (\" + this.outputs.map((output) => output.format(format)).join(\", \") + \") \";\n }\n if (this.gas != null) {\n result += \"@\" + this.gas.toString() + \" \";\n }\n }\n return result.trim();\n }\n static from(value) {\n if (typeof (value) === \"string\") {\n return FunctionFragment.fromString(value);\n }\n return FunctionFragment.fromObject(value);\n }\n static fromObject(value) {\n if (FunctionFragment.isFunctionFragment(value)) {\n return value;\n }\n if (value.type !== \"function\") {\n logger.throwArgumentError(\"invalid function object\", \"value\", value);\n }\n let state = verifyState(value);\n const params = {\n type: value.type,\n name: verifyIdentifier(value.name),\n constant: state.constant,\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),\n outputs: (value.outputs ? value.outputs.map(ParamType.fromObject) : []),\n payable: state.payable,\n stateMutability: state.stateMutability,\n gas: (value.gas ? BigNumber.from(value.gas) : null)\n };\n return new FunctionFragment(_constructorGuard, params);\n }\n static fromString(value) {\n let params = { type: \"function\" };\n value = parseGas(value, params);\n let comps = value.split(\" returns \");\n if (comps.length > 2) {\n logger.throwArgumentError(\"invalid function string\", \"value\", value);\n }\n let parens = comps[0].match(regexParen);\n if (!parens) {\n logger.throwArgumentError(\"invalid function signature\", \"value\", value);\n }\n params.name = parens[1].trim();\n if (params.name) {\n verifyIdentifier(params.name);\n }\n params.inputs = parseParams(parens[2], false);\n parseModifiers(parens[3].trim(), params);\n // We have outputs\n if (comps.length > 1) {\n let returns = comps[1].match(regexParen);\n if (returns[1].trim() != \"\" || returns[3].trim() != \"\") {\n logger.throwArgumentError(\"unexpected tokens\", \"value\", value);\n }\n params.outputs = parseParams(returns[2], false);\n }\n else {\n params.outputs = [];\n }\n return FunctionFragment.fromObject(params);\n }\n static isFunctionFragment(value) {\n return (value && value._isFragment && value.type === \"function\");\n }\n}\n//export class ErrorFragment extends Fragment {\n//}\n//export class StructFragment extends Fragment {\n//}\nfunction verifyType(type) {\n // These need to be transformed to their full description\n if (type.match(/^uint($|[^1-9])/)) {\n type = \"uint256\" + type.substring(4);\n }\n else if (type.match(/^int($|[^1-9])/)) {\n type = \"int256\" + type.substring(3);\n }\n // @TODO: more verification\n return type;\n}\nconst regexIdentifier = new RegExp(\"^[A-Za-z_][A-Za-z0-9_]*$\");\nfunction verifyIdentifier(value) {\n if (!value || !value.match(regexIdentifier)) {\n logger.throwArgumentError(`invalid identifier \"${value}\"`, \"value\", value);\n }\n return value;\n}\nconst regexParen = new RegExp(\"^([^)(]*)\\\\((.*)\\\\)([^)(]*)$\");\nfunction splitNesting(value) {\n value = value.trim();\n let result = [];\n let accum = \"\";\n let depth = 0;\n for (let offset = 0; offset < value.length; offset++) {\n let c = value[offset];\n if (c === \",\" && depth === 0) {\n result.push(accum);\n accum = \"\";\n }\n else {\n accum += c;\n if (c === \"(\") {\n depth++;\n }\n else if (c === \")\") {\n depth--;\n if (depth === -1) {\n logger.throwArgumentError(\"unbalanced parenthesis\", \"value\", value);\n }\n }\n }\n }\n if (accum) {\n result.push(accum);\n }\n return result;\n}\n","\"use strict\";\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\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 reperesentation\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);\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 bytes = arrayify(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 contimuation 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.checkNormalize();\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 arrayify(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","/**\n * Multihash implementation in JavaScript.\n *\n * @module multihash\n */\n'use strict'\n\nconst { Buffer } = require('buffer')\nconst multibase = require('multibase')\nconst varint = require('varint')\nconst cs = require('./constants')\n\nexports.names = cs.names\nexports.codes = cs.codes\nexports.defaultLengths = cs.defaultLengths\n\n/**\n * Convert the given multihash to a hex encoded string.\n *\n * @param {Buffer} hash\n * @returns {string}\n */\nexports.toHexString = function toHexString (hash) {\n if (!Buffer.isBuffer(hash)) {\n throw new Error('must be passed a buffer')\n }\n\n return hash.toString('hex')\n}\n\n/**\n * Convert the given hex encoded string to a multihash.\n *\n * @param {string} hash\n * @returns {Buffer}\n */\nexports.fromHexString = function fromHexString (hash) {\n return Buffer.from(hash, 'hex')\n}\n\n/**\n * Convert the given multihash to a base58 encoded string.\n *\n * @param {Buffer} hash\n * @returns {string}\n */\nexports.toB58String = function toB58String (hash) {\n if (!Buffer.isBuffer(hash)) {\n throw new Error('must be passed a buffer')\n }\n\n return multibase.encode('base58btc', hash).toString().slice(1)\n}\n\n/**\n * Convert the given base58 encoded string to a multihash.\n *\n * @param {string|Buffer} hash\n * @returns {Buffer}\n */\nexports.fromB58String = function fromB58String (hash) {\n let encoded = hash\n if (Buffer.isBuffer(hash)) {\n encoded = hash.toString()\n }\n\n return multibase.decode('z' + encoded)\n}\n\n/**\n * Decode a hash from the given multihash.\n *\n * @param {Buffer} buf\n * @returns {{code: number, name: string, length: number, digest: Buffer}} result\n */\nexports.decode = function decode (buf) {\n if (!(Buffer.isBuffer(buf))) {\n throw new Error('multihash must be a Buffer')\n }\n\n if (buf.length < 2) {\n throw new Error('multihash too short. must be > 2 bytes.')\n }\n\n const code = varint.decode(buf)\n if (!exports.isValidCode(code)) {\n throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\n }\n buf = buf.slice(varint.decode.bytes)\n\n const len = varint.decode(buf)\n if (len < 0) {\n throw new Error(`multihash invalid length: ${len}`)\n }\n buf = buf.slice(varint.decode.bytes)\n\n if (buf.length !== len) {\n throw new Error(`multihash length inconsistent: 0x${buf.toString('hex')}`)\n }\n\n return {\n code: code,\n name: cs.codes[code],\n length: len,\n digest: buf\n }\n}\n\n/**\n * Encode a hash digest along with the specified function code.\n *\n * > **Note:** the length is derived from the length of the digest itself.\n *\n * @param {Buffer} digest\n * @param {string|number} code\n * @param {number} [length]\n * @returns {Buffer}\n */\nexports.encode = function encode (digest, code, length) {\n if (!digest || code === undefined) {\n throw new Error('multihash encode requires at least two args: digest, code')\n }\n\n // ensure it's a hashfunction code.\n const hashfn = exports.coerceCode(code)\n\n if (!(Buffer.isBuffer(digest))) {\n throw new Error('digest should be a Buffer')\n }\n\n if (length == null) {\n length = digest.length\n }\n\n if (length && digest.length !== length) {\n throw new Error('digest length should be equal to specified length.')\n }\n\n return Buffer.concat([\n Buffer.from(varint.encode(hashfn)),\n Buffer.from(varint.encode(length)),\n digest\n ])\n}\n\n/**\n * Converts a hash function name into the matching code.\n * If passed a number it will return the number if it's a valid code.\n * @param {string|number} name\n * @returns {number}\n */\nexports.coerceCode = function coerceCode (name) {\n let code = name\n\n if (typeof name === 'string') {\n if (cs.names[name] === undefined) {\n throw new Error(`Unrecognized hash function named: ${name}`)\n }\n code = cs.names[name]\n }\n\n if (typeof code !== 'number') {\n throw new Error(`Hash function code should be a number. Got: ${code}`)\n }\n\n if (cs.codes[code] === undefined && !exports.isAppCode(code)) {\n throw new Error(`Unrecognized function code: ${code}`)\n }\n\n return code\n}\n\n/**\n * Checks wether a code is part of the app range\n *\n * @param {number} code\n * @returns {boolean}\n */\nexports.isAppCode = function appCode (code) {\n return code > 0 && code < 0x10\n}\n\n/**\n * Checks whether a multihash code is valid.\n *\n * @param {number} code\n * @returns {boolean}\n */\nexports.isValidCode = function validCode (code) {\n if (exports.isAppCode(code)) {\n return true\n }\n\n if (cs.codes[code]) {\n return true\n }\n\n return false\n}\n\n/**\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\n *\n * @param {Buffer} multihash\n * @returns {undefined}\n * @throws {Error}\n */\nfunction validate (multihash) {\n exports.decode(multihash) // throws if bad.\n}\nexports.validate = validate\n\n/**\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\n *\n * @param {Buffer} multihash\n * @returns {undefined}\n * @throws {Error}\n */\nexports.prefix = function prefix (multihash) {\n validate(multihash)\n\n return multihash.slice(0, 2)\n}\n","const A = require(\"./array.js\");\n\nconst at = (bytes, index) => parseInt(bytes.slice(index * 2 + 2, index * 2 + 4), 16);\n\nconst random = bytes => {\n let rnd;\n if (typeof window !== \"undefined\" && window.crypto && window.crypto.getRandomValues) rnd = window.crypto.getRandomValues(new Uint8Array(bytes));else if (typeof require !== \"undefined\") rnd = require(\"c\" + \"rypto\").randomBytes(bytes);else throw \"Safe random numbers not available.\";\n let hex = \"0x\";\n for (let i = 0; i < bytes; ++i) hex += (\"00\" + rnd[i].toString(16)).slice(-2);\n return hex;\n};\n\nconst length = a => (a.length - 2) / 2;\n\nconst flatten = a => \"0x\" + a.reduce((r, s) => r + s.slice(2), \"\");\n\nconst slice = (i, j, bs) => \"0x\" + bs.slice(i * 2 + 2, j * 2 + 2);\n\nconst reverse = hex => {\n let rev = \"0x\";\n for (let i = 0, l = length(hex); i < l; ++i) {\n rev += hex.slice((l - i) * 2, (l - i + 1) * 2);\n }\n return rev;\n};\n\nconst pad = (l, hex) => hex.length === l * 2 + 2 ? hex : pad(l, \"0x\" + \"0\" + hex.slice(2));\n\nconst padRight = (l, hex) => hex.length === l * 2 + 2 ? hex : padRight(l, hex + \"0\");\n\nconst toArray = hex => {\n let arr = [];\n for (let i = 2, l = hex.length; i < l; i += 2) arr.push(parseInt(hex.slice(i, i + 2), 16));\n return arr;\n};\n\nconst fromArray = arr => {\n let hex = \"0x\";\n for (let i = 0, l = arr.length; i < l; ++i) {\n let b = arr[i];\n hex += (b < 16 ? \"0\" : \"\") + b.toString(16);\n }\n return hex;\n};\n\nconst toUint8Array = hex => new Uint8Array(toArray(hex));\n\nconst fromUint8Array = arr => fromArray([].slice.call(arr, 0));\n\nconst fromNumber = num => {\n let hex = num.toString(16);\n return hex.length % 2 === 0 ? \"0x\" + hex : \"0x0\" + hex;\n};\n\nconst toNumber = hex => parseInt(hex.slice(2), 16);\n\nconst concat = (a, b) => a.concat(b.slice(2));\n\nconst fromNat = bn => bn === \"0x0\" ? \"0x\" : bn.length % 2 === 0 ? bn : \"0x0\" + bn.slice(2);\n\nconst toNat = bn => bn[2] === \"0\" ? \"0x\" + bn.slice(3) : bn;\n\nconst fromAscii = ascii => {\n let hex = \"0x\";\n for (let i = 0; i < ascii.length; ++i) hex += (\"00\" + ascii.charCodeAt(i).toString(16)).slice(-2);\n return hex;\n};\n\nconst toAscii = hex => {\n let ascii = \"\";\n for (let i = 2; i < hex.length; i += 2) ascii += String.fromCharCode(parseInt(hex.slice(i, i + 2), 16));\n return ascii;\n};\n\n// From https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330\nconst fromString = s => {\n const makeByte = uint8 => {\n const b = uint8.toString(16);\n return b.length < 2 ? \"0\" + b : b;\n };\n let bytes = \"0x\";\n for (let ci = 0; ci != s.length; ci++) {\n let c = s.charCodeAt(ci);\n if (c < 128) {\n bytes += makeByte(c);\n continue;\n }\n if (c < 2048) {\n bytes += makeByte(c >> 6 | 192);\n } else {\n if (c > 0xd7ff && c < 0xdc00) {\n if (++ci == s.length) return null;\n let c2 = s.charCodeAt(ci);\n if (c2 < 0xdc00 || c2 > 0xdfff) return null;\n c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n bytes += makeByte(c >> 18 | 240);\n bytes += makeByte(c >> 12 & 63 | 128);\n } else {\n // c <= 0xffff\n bytes += makeByte(c >> 12 | 224);\n }\n bytes += makeByte(c >> 6 & 63 | 128);\n }\n bytes += makeByte(c & 63 | 128);\n }\n return bytes;\n};\n\nconst toString = bytes => {\n let s = '';\n let i = 0;\n let l = length(bytes);\n while (i < l) {\n let c = at(bytes, i++);\n if (c > 127) {\n if (c > 191 && c < 224) {\n if (i >= l) return null;\n c = (c & 31) << 6 | at(bytes, i) & 63;\n } else if (c > 223 && c < 240) {\n if (i + 1 >= l) return null;\n c = (c & 15) << 12 | (at(bytes, i) & 63) << 6 | at(bytes, ++i) & 63;\n } else if (c > 239 && c < 248) {\n if (i + 2 >= l) return null;\n c = (c & 7) << 18 | (at(bytes, i) & 63) << 12 | (at(bytes, ++i) & 63) << 6 | at(bytes, ++i) & 63;\n } else return null;\n ++i;\n }\n if (c <= 0xffff) s += String.fromCharCode(c);else if (c <= 0x10ffff) {\n c -= 0x10000;\n s += String.fromCharCode(c >> 10 | 0xd800);\n s += String.fromCharCode(c & 0x3FF | 0xdc00);\n } else return null;\n }\n return s;\n};\n\nmodule.exports = {\n random,\n length,\n concat,\n flatten,\n slice,\n reverse,\n pad,\n padRight,\n fromAscii,\n toAscii,\n fromString,\n toString,\n fromNumber,\n toNumber,\n fromNat,\n toNat,\n fromArray,\n toArray,\n fromUint8Array,\n toUint8Array\n};","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var bn = require('bn.js');\nvar randomBytes = require('randombytes');\nmodule.exports = crt;\nfunction blind(priv) {\n var r = getr(priv);\n var blinder = r.toRed(bn.mont(priv.modulus))\n .redPow(new bn(priv.publicExponent)).fromRed();\n return {\n blinder: blinder,\n unblinder:r.invm(priv.modulus)\n };\n}\nfunction crt(msg, priv) {\n var blinds = blind(priv);\n var len = priv.modulus.byteLength();\n var mod = bn.mont(priv.modulus);\n var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);\n var c1 = blinded.toRed(bn.mont(priv.prime1));\n var c2 = blinded.toRed(bn.mont(priv.prime2));\n var qinv = priv.coefficient;\n var p = priv.prime1;\n var q = priv.prime2;\n var m1 = c1.redPow(priv.exponent1);\n var m2 = c2.redPow(priv.exponent2);\n m1 = m1.fromRed();\n m2 = m2.fromRed();\n var h = m1.isub(m2).imul(qinv).umod(p);\n h.imul(q);\n m2.iadd(h);\n return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));\n}\ncrt.getr = getr;\nfunction getr(priv) {\n var len = priv.modulus.byteLength();\n var r = new bn(randomBytes(len));\n while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {\n r = new bn(randomBytes(len));\n }\n return r;\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\n\nmodule.exports = function isCallable(value) {\n\tif (!value) { return false; }\n\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\tif (typeof value === 'function' && !value.prototype) { return true; }\n\tif (hasToStringTag) { return tryFunctionObject(value); }\n\tif (isES6ClassFn(value)) { return false; }\n\tvar strClass = toStr.call(value);\n\treturn strClass === fnClass || strClass === genClass;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buf' + 'fer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n r.strip();\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/**\n * Returns a `Boolean` on whether or not the a `String` starts with '0x'\n * @param {String} str the string input value\n * @return {Boolean} a boolean if it is or is not hex prefixed\n * @throws if the str input is not a string\n */\nmodule.exports = function isHexPrefixed(str) {\n if (typeof str !== 'string') {\n throw new Error(\"[is-hex-prefixed] value must be type 'string', is currently type \" + (typeof str) + \", while checking isHexPrefixed.\");\n }\n\n return str.slice(0, 2) === '0x';\n}\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file utils.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\nvar _ = require('underscore');\nvar BN = require('bn.js');\nvar numberToBN = require('number-to-bn');\nvar utf8 = require('utf8');\nvar Hash = require(\"eth-lib/lib/hash\");\nvar ethereumBloomFilters = require('ethereum-bloom-filters');\n/**\n * Returns true if object is BN, otherwise false\n *\n * @method isBN\n * @param {Object} object\n * @return {Boolean}\n */\nvar isBN = function (object) {\n return BN.isBN(object);\n};\n/**\n * Returns true if object is BigNumber, otherwise false\n *\n * @method isBigNumber\n * @param {Object} object\n * @return {Boolean}\n */\nvar isBigNumber = function (object) {\n return object && object.constructor && object.constructor.name === 'BigNumber';\n};\n/**\n * Takes an input and transforms it into an BN\n *\n * @method toBN\n * @param {Number|String|BN} number, string, HEX string or BN\n * @return {BN} BN\n */\nvar toBN = function (number) {\n try {\n return numberToBN.apply(null, arguments);\n }\n catch (e) {\n throw new Error(e + ' Given value: \"' + number + '\"');\n }\n};\n/**\n * Takes and input transforms it into BN and if it is negative value, into two's complement\n *\n * @method toTwosComplement\n * @param {Number|String|BN} number\n * @return {String}\n */\nvar toTwosComplement = function (number) {\n return '0x' + toBN(number).toTwos(256).toString(16, 64);\n};\n/**\n * Checks if the given string is an address\n *\n * @method isAddress\n * @param {String} address the given HEX address\n * @return {Boolean}\n */\nvar isAddress = function (address) {\n // check if it has the basic requirements of an address\n if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {\n return false;\n // If it's ALL lowercase or ALL upppercase\n }\n else if (/^(0x|0X)?[0-9a-f]{40}$/.test(address) || /^(0x|0X)?[0-9A-F]{40}$/.test(address)) {\n return true;\n // Otherwise check each case\n }\n else {\n return checkAddressChecksum(address);\n }\n};\n/**\n * Checks if the given string is a checksummed address\n *\n * @method checkAddressChecksum\n * @param {String} address the given HEX address\n * @return {Boolean}\n */\nvar checkAddressChecksum = function (address) {\n // Check each case\n address = address.replace(/^0x/i, '');\n var addressHash = sha3(address.toLowerCase()).replace(/^0x/i, '');\n for (var i = 0; i < 40; i++) {\n // the nth letter should be uppercase if the nth digit of casemap is 1\n if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) {\n return false;\n }\n }\n return true;\n};\n/**\n * Should be called to pad string to expected length\n *\n * @method leftPad\n * @param {String} string to be padded\n * @param {Number} chars that result string should have\n * @param {String} sign, by default 0\n * @returns {String} right aligned string\n */\nvar leftPad = function (string, chars, sign) {\n var hasPrefix = /^0x/i.test(string) || typeof string === 'number';\n string = string.toString(16).replace(/^0x/i, '');\n var padding = (chars - string.length + 1 >= 0) ? chars - string.length + 1 : 0;\n return (hasPrefix ? '0x' : '') + new Array(padding).join(sign ? sign : \"0\") + string;\n};\n/**\n * Should be called to pad string to expected length\n *\n * @method rightPad\n * @param {String} string to be padded\n * @param {Number} chars that result string should have\n * @param {String} sign, by default 0\n * @returns {String} right aligned string\n */\nvar rightPad = function (string, chars, sign) {\n var hasPrefix = /^0x/i.test(string) || typeof string === 'number';\n string = string.toString(16).replace(/^0x/i, '');\n var padding = (chars - string.length + 1 >= 0) ? chars - string.length + 1 : 0;\n return (hasPrefix ? '0x' : '') + string + (new Array(padding).join(sign ? sign : \"0\"));\n};\n/**\n * Should be called to get hex representation (prefixed by 0x) of utf8 string\n *\n * @method utf8ToHex\n * @param {String} str\n * @returns {String} hex representation of input string\n */\nvar utf8ToHex = function (str) {\n str = utf8.encode(str);\n var hex = \"\";\n // remove \\u0000 padding from either side\n str = str.replace(/^(?:\\u0000)*/, '');\n str = str.split(\"\").reverse().join(\"\");\n str = str.replace(/^(?:\\u0000)*/, '');\n str = str.split(\"\").reverse().join(\"\");\n for (var i = 0; i < str.length; i++) {\n var code = str.charCodeAt(i);\n // if (code !== 0) {\n var n = code.toString(16);\n hex += n.length < 2 ? '0' + n : n;\n // }\n }\n return \"0x\" + hex;\n};\n/**\n * Should be called to get utf8 from it's hex representation\n *\n * @method hexToUtf8\n * @param {String} hex\n * @returns {String} ascii string representation of hex value\n */\nvar hexToUtf8 = function (hex) {\n if (!isHexStrict(hex))\n throw new Error('The parameter \"' + hex + '\" must be a valid HEX string.');\n var str = \"\";\n var code = 0;\n hex = hex.replace(/^0x/i, '');\n // remove 00 padding from either side\n hex = hex.replace(/^(?:00)*/, '');\n hex = hex.split(\"\").reverse().join(\"\");\n hex = hex.replace(/^(?:00)*/, '');\n hex = hex.split(\"\").reverse().join(\"\");\n var l = hex.length;\n for (var i = 0; i < l; i += 2) {\n code = parseInt(hex.substr(i, 2), 16);\n // if (code !== 0) {\n str += String.fromCharCode(code);\n // }\n }\n return utf8.decode(str);\n};\n/**\n * Converts value to it's number representation\n *\n * @method hexToNumber\n * @param {String|Number|BN} value\n * @return {String}\n */\nvar hexToNumber = function (value) {\n if (!value) {\n return value;\n }\n if (_.isString(value) && !isHexStrict(value)) {\n throw new Error('Given value \"' + value + '\" is not a valid hex string.');\n }\n return toBN(value).toNumber();\n};\n/**\n * Converts value to it's decimal representation in string\n *\n * @method hexToNumberString\n * @param {String|Number|BN} value\n * @return {String}\n */\nvar hexToNumberString = function (value) {\n if (!value)\n return value;\n if (_.isString(value) && !isHexStrict(value)) {\n throw new Error('Given value \"' + value + '\" is not a valid hex string.');\n }\n return toBN(value).toString(10);\n};\n/**\n * Converts value to it's hex representation\n *\n * @method numberToHex\n * @param {String|Number|BN} value\n * @return {String}\n */\nvar numberToHex = function (value) {\n if (_.isNull(value) || _.isUndefined(value)) {\n return value;\n }\n if (!isFinite(value) && !isHexStrict(value)) {\n throw new Error('Given input \"' + value + '\" is not a number.');\n }\n var number = toBN(value);\n var result = number.toString(16);\n return number.lt(new BN(0)) ? '-0x' + result.substr(1) : '0x' + result;\n};\n/**\n * Convert a byte array to a hex string\n *\n * Note: Implementation from crypto-js\n *\n * @method bytesToHex\n * @param {Array} bytes\n * @return {String} the hex string\n */\nvar bytesToHex = function (bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n /* jshint ignore:start */\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n /* jshint ignore:end */\n }\n return '0x' + hex.join(\"\");\n};\n/**\n * Convert a hex string to a byte array\n *\n * Note: Implementation from crypto-js\n *\n * @method hexToBytes\n * @param {string} hex\n * @return {Array} the byte array\n */\nvar hexToBytes = function (hex) {\n hex = hex.toString(16);\n if (!isHexStrict(hex)) {\n throw new Error('Given value \"' + hex + '\" is not a valid hex string.');\n }\n hex = hex.replace(/^0x/i, '');\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n};\n/**\n * Auto converts any given value into it's hex representation.\n *\n * And even stringifys objects before.\n *\n * @method toHex\n * @param {String|Number|BN|Object|Buffer} value\n * @param {Boolean} returnType\n * @return {String}\n */\nvar toHex = function (value, returnType) {\n /*jshint maxcomplexity: false */\n if (isAddress(value)) {\n return returnType ? 'address' : '0x' + value.toLowerCase().replace(/^0x/i, '');\n }\n if (_.isBoolean(value)) {\n return returnType ? 'bool' : value ? '0x01' : '0x00';\n }\n if (Buffer.isBuffer(value)) {\n return '0x' + value.toString('hex');\n }\n if (_.isObject(value) && !isBigNumber(value) && !isBN(value)) {\n return returnType ? 'string' : utf8ToHex(JSON.stringify(value));\n }\n // if its a negative number, pass it through numberToHex\n if (_.isString(value)) {\n if (value.indexOf('-0x') === 0 || value.indexOf('-0X') === 0) {\n return returnType ? 'int256' : numberToHex(value);\n }\n else if (value.indexOf('0x') === 0 || value.indexOf('0X') === 0) {\n return returnType ? 'bytes' : value;\n }\n else if (!isFinite(value)) {\n return returnType ? 'string' : utf8ToHex(value);\n }\n }\n return returnType ? (value < 0 ? 'int256' : 'uint256') : numberToHex(value);\n};\n/**\n * Check if string is HEX, requires a 0x in front\n *\n * @method isHexStrict\n * @param {String} hex to be checked\n * @returns {Boolean}\n */\nvar isHexStrict = function (hex) {\n return ((_.isString(hex) || _.isNumber(hex)) && /^(-)?0x[0-9a-f]*$/i.test(hex));\n};\n/**\n * Check if string is HEX\n *\n * @method isHex\n * @param {String} hex to be checked\n * @returns {Boolean}\n */\nvar isHex = function (hex) {\n return ((_.isString(hex) || _.isNumber(hex)) && /^(-0x|0x)?[0-9a-f]*$/i.test(hex));\n};\n/**\n * Returns true if given string is a valid Ethereum block header bloom.\n *\n * @method isBloom\n * @param {String} bloom encoded bloom filter\n * @return {Boolean}\n */\nvar isBloom = function (bloom) {\n return ethereumBloomFilters.isBloom(bloom);\n};\n/**\n * Returns true if the ethereum users address is part of the given bloom\n * note: false positives are possible.\n *\n * @method isUserEthereumAddressInBloom\n * @param {String} ethereumAddress encoded bloom filter\n * @param {String} bloom ethereum addresss\n * @return {Boolean}\n */\nvar isUserEthereumAddressInBloom = function (bloom, ethereumAddress) {\n return ethereumBloomFilters.isUserEthereumAddressInBloom(bloom, ethereumAddress);\n};\n/**\n * Returns true if the contract address is part of the given bloom\n * note: false positives are possible.\n *\n * @method isUserEthereumAddressInBloom\n * @param {String} bloom encoded bloom filter\n * @param {String} contractAddress contract addresss\n * @return {Boolean}\n */\nvar isContractAddressInBloom = function (bloom, contractAddress) {\n return ethereumBloomFilters.isContractAddressInBloom(bloom, contractAddress);\n};\n/**\n * Returns true if given string is a valid log topic.\n *\n * @method isTopic\n * @param {String} topic encoded topic\n * @return {Boolean}\n */\nvar isTopic = function (topic) {\n return ethereumBloomFilters.isTopic(topic);\n};\n/**\n * Returns true if the topic is part of the given bloom\n * note: false positives are possible.\n *\n * @method isTopicInBloom\n * @param {String} bloom encoded bloom filter\n * @param {String} topic encoded topic\n * @return {Boolean}\n */\nvar isTopicInBloom = function (bloom, topic) {\n return ethereumBloomFilters.isTopicInBloom(bloom, topic);\n};\n/**\n * Returns true if the value is part of the given bloom\n * note: false positives are possible.\n *\n * @method isInBloom\n * @param {String} bloom encoded bloom filter\n * @param {String | Uint8Array} topic encoded value\n * @return {Boolean}\n */\nvar isInBloom = function (bloom, topic) {\n return ethereumBloomFilters.isInBloom(bloom, topic);\n};\n/**\n * Hashes values to a sha3 hash using keccak 256\n *\n * To hash a HEX string the hex must have 0x in front.\n *\n * @method sha3\n * @return {String} the sha3 string\n */\nvar SHA3_NULL_S = '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470';\nvar sha3 = function (value) {\n if (isBN(value)) {\n value = value.toString();\n }\n if (isHexStrict(value) && /^0x/i.test((value).toString())) {\n value = hexToBytes(value);\n }\n var returnValue = Hash.keccak256(value); // jshint ignore:line\n if (returnValue === SHA3_NULL_S) {\n return null;\n }\n else {\n return returnValue;\n }\n};\n// expose the under the hood keccak256\nsha3._Hash = Hash;\n/**\n * @method sha3Raw\n *\n * @param value\n *\n * @returns {string}\n */\nvar sha3Raw = function (value) {\n value = sha3(value);\n if (value === null) {\n return SHA3_NULL_S;\n }\n return value;\n};\nmodule.exports = {\n BN: BN,\n isBN: isBN,\n isBigNumber: isBigNumber,\n toBN: toBN,\n isAddress: isAddress,\n isBloom: isBloom,\n isUserEthereumAddressInBloom: isUserEthereumAddressInBloom,\n isContractAddressInBloom: isContractAddressInBloom,\n isTopic: isTopic,\n isTopicInBloom: isTopicInBloom,\n isInBloom: isInBloom,\n checkAddressChecksum: checkAddressChecksum,\n utf8ToHex: utf8ToHex,\n hexToUtf8: hexToUtf8,\n hexToNumber: hexToNumber,\n hexToNumberString: hexToNumberString,\n numberToHex: numberToHex,\n toHex: toHex,\n hexToBytes: hexToBytes,\n bytesToHex: bytesToHex,\n isHex: isHex,\n isHexStrict: isHexStrict,\n leftPad: leftPad,\n rightPad: rightPad,\n toTwosComplement: toTwosComplement,\n sha3: sha3,\n sha3Raw: sha3Raw\n};\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file iban.js\n *\n * Details: https://github.com/ethereum/wiki/wiki/ICAP:-Inter-exchange-Client-Address-Protocol\n *\n * @author Marek Kotewicz \n * @date 2015\n */\n\"use strict\";\nvar utils = require('web3-utils');\nvar BigNumber = require('bn.js');\nvar leftPad = function (string, bytes) {\n var result = string;\n while (result.length < bytes * 2) {\n result = '0' + result;\n }\n return result;\n};\n/**\n * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to\n * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.\n *\n * @method iso13616Prepare\n * @param {String} iban the IBAN\n * @returns {String} the prepared IBAN\n */\nvar iso13616Prepare = function (iban) {\n var A = 'A'.charCodeAt(0);\n var Z = 'Z'.charCodeAt(0);\n iban = iban.toUpperCase();\n iban = iban.substr(4) + iban.substr(0, 4);\n return iban.split('').map(function (n) {\n var code = n.charCodeAt(0);\n if (code >= A && code <= Z) {\n // A = 10, B = 11, ... Z = 35\n return code - A + 10;\n }\n else {\n return n;\n }\n }).join('');\n};\n/**\n * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.\n *\n * @method mod9710\n * @param {String} iban\n * @returns {Number}\n */\nvar mod9710 = function (iban) {\n var remainder = iban, block;\n while (remainder.length > 2) {\n block = remainder.slice(0, 9);\n remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);\n }\n return parseInt(remainder, 10) % 97;\n};\n/**\n * This prototype should be used to create iban object from iban correct string\n *\n * @param {String} iban\n */\nvar Iban = function Iban(iban) {\n this._iban = iban;\n};\n/**\n * This method should be used to create an ethereum address from a direct iban address\n *\n * @method toAddress\n * @param {String} iban address\n * @return {String} the ethereum address\n */\nIban.toAddress = function (ib) {\n ib = new Iban(ib);\n if (!ib.isDirect()) {\n throw new Error('IBAN is indirect and can\\'t be converted');\n }\n return ib.toAddress();\n};\n/**\n * This method should be used to create iban address from an ethereum address\n *\n * @method toIban\n * @param {String} address\n * @return {String} the IBAN address\n */\nIban.toIban = function (address) {\n return Iban.fromAddress(address).toString();\n};\n/**\n * This method should be used to create iban object from an ethereum address\n *\n * @method fromAddress\n * @param {String} address\n * @return {Iban} the IBAN object\n */\nIban.fromAddress = function (address) {\n if (!utils.isAddress(address)) {\n throw new Error('Provided address is not a valid address: ' + address);\n }\n address = address.replace('0x', '').replace('0X', '');\n var asBn = new BigNumber(address, 16);\n var base36 = asBn.toString(36);\n var padded = leftPad(base36, 15);\n return Iban.fromBban(padded.toUpperCase());\n};\n/**\n * Convert the passed BBAN to an IBAN for this country specification.\n * Please note that \"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account\".\n * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits\n *\n * @method fromBban\n * @param {String} bban the BBAN to convert to IBAN\n * @returns {Iban} the IBAN object\n */\nIban.fromBban = function (bban) {\n var countryCode = 'XE';\n var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));\n var checkDigit = ('0' + (98 - remainder)).slice(-2);\n return new Iban(countryCode + checkDigit + bban);\n};\n/**\n * Should be used to create IBAN object for given institution and identifier\n *\n * @method createIndirect\n * @param {Object} options, required options are \"institution\" and \"identifier\"\n * @return {Iban} the IBAN object\n */\nIban.createIndirect = function (options) {\n return Iban.fromBban('ETH' + options.institution + options.identifier);\n};\n/**\n * This method should be used to check if given string is valid iban object\n *\n * @method isValid\n * @param {String} iban string\n * @return {Boolean} true if it is valid IBAN\n */\nIban.isValid = function (iban) {\n var i = new Iban(iban);\n return i.isValid();\n};\n/**\n * Should be called to check if iban is correct\n *\n * @method isValid\n * @returns {Boolean} true if it is, otherwise false\n */\nIban.prototype.isValid = function () {\n return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&\n mod9710(iso13616Prepare(this._iban)) === 1;\n};\n/**\n * Should be called to check if iban number is direct\n *\n * @method isDirect\n * @returns {Boolean} true if it is, otherwise false\n */\nIban.prototype.isDirect = function () {\n return this._iban.length === 34 || this._iban.length === 35;\n};\n/**\n * Should be called to check if iban number if indirect\n *\n * @method isIndirect\n * @returns {Boolean} true if it is, otherwise false\n */\nIban.prototype.isIndirect = function () {\n return this._iban.length === 20;\n};\n/**\n * Should be called to get iban checksum\n * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)\n *\n * @method checksum\n * @returns {String} checksum\n */\nIban.prototype.checksum = function () {\n return this._iban.substr(2, 2);\n};\n/**\n * Should be called to get institution identifier\n * eg. XREG\n *\n * @method institution\n * @returns {String} institution identifier\n */\nIban.prototype.institution = function () {\n return this.isIndirect() ? this._iban.substr(7, 4) : '';\n};\n/**\n * Should be called to get client identifier within institution\n * eg. GAVOFYORK\n *\n * @method client\n * @returns {String} client identifier\n */\nIban.prototype.client = function () {\n return this.isIndirect() ? this._iban.substr(11) : '';\n};\n/**\n * Should be called to get client direct address\n *\n * @method toAddress\n * @returns {String} ethereum address\n */\nIban.prototype.toAddress = function () {\n if (this.isDirect()) {\n var base36 = this._iban.substr(4);\n var asBn = new BigNumber(base36, 36);\n return utils.toChecksumAddress(asBn.toString(16, 20));\n }\n return '';\n};\nIban.prototype.toString = function () {\n return this._iban;\n};\nmodule.exports = Iban;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file jsonrpc.js\n * @authors:\n * Fabian Vogelsteller \n * Marek Kotewicz \n * Aaron Kumavis \n * @date 2015\n */\n\"use strict\";\n// Initialize Jsonrpc as a simple object with utility functions.\nvar Jsonrpc = {\n messageId: 0\n};\n/**\n * Should be called to valid json create payload object\n *\n * @method toPayload\n * @param {Function} method of jsonrpc call, required\n * @param {Array} params, an array of method params, optional\n * @returns {Object} valid jsonrpc payload object\n */\nJsonrpc.toPayload = function (method, params) {\n if (!method) {\n throw new Error('JSONRPC method should be specified for params: \"' + JSON.stringify(params) + '\"!');\n }\n // advance message ID\n Jsonrpc.messageId++;\n return {\n jsonrpc: '2.0',\n id: Jsonrpc.messageId,\n method: method,\n params: params || []\n };\n};\n/**\n * Should be called to check if jsonrpc response is valid\n *\n * @method isValidResponse\n * @param {Object}\n * @returns {Boolean} true if response is valid, otherwise false\n */\nJsonrpc.isValidResponse = function (response) {\n return Array.isArray(response) ? response.every(validateSingleMessage) : validateSingleMessage(response);\n function validateSingleMessage(message) {\n return !!message &&\n !message.error &&\n message.jsonrpc === '2.0' &&\n (typeof message.id === 'number' || typeof message.id === 'string') &&\n message.result !== undefined; // only undefined is not valid json object\n }\n};\n/**\n * Should be called to create batch payload object\n *\n * @method toBatchPayload\n * @param {Array} messages, an array of objects with method (required) and params (optional) fields\n * @returns {Array} batch payload\n */\nJsonrpc.toBatchPayload = function (messages) {\n return messages.map(function (message) {\n return Jsonrpc.toPayload(message.method, message.params);\n });\n};\nmodule.exports = Jsonrpc;\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream)\n\nexports.writableStream = isFunction(global.WritableStream)\n\nexports.abortController = isFunction(global.AbortController)\n\nexports.blobConstructor = false\ntry {\n\tnew Blob([new ArrayBuffer(1)])\n\texports.blobConstructor = true\n} catch (e) {}\n\n// The xhr request to example.com may violate some restrictive CSP configurations,\n// so if we're running in a browser that supports `fetch`, avoid calling getXHR()\n// and assume support for certain features below.\nvar xhr\nfunction getXHR () {\n\t// Cache the xhr value\n\tif (xhr !== undefined) return xhr\n\n\tif (global.XMLHttpRequest) {\n\t\txhr = new global.XMLHttpRequest()\n\t\t// If XDomainRequest is available (ie only, where xhr might not work\n\t\t// cross domain), use the page location. Otherwise use example.com\n\t\t// Note: this doesn't actually make an http request.\n\t\ttry {\n\t\t\txhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com')\n\t\t} catch(e) {\n\t\t\txhr = null\n\t\t}\n\t} else {\n\t\t// Service workers don't have XHR\n\t\txhr = null\n\t}\n\treturn xhr\n}\n\nfunction checkTypeSupport (type) {\n\tvar xhr = getXHR()\n\tif (!xhr) return false\n\ttry {\n\t\txhr.responseType = type\n\t\treturn xhr.responseType === type\n\t} catch (e) {}\n\treturn false\n}\n\n// For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'.\n// Safari 7.1 appears to have fixed this bug.\nvar haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined'\nvar haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice)\n\n// If fetch is supported, then arraybuffer will be supported too. Skip calling\n// checkTypeSupport(), since that calls getXHR().\nexports.arraybuffer = exports.fetch || (haveArrayBuffer && checkTypeSupport('arraybuffer'))\n\n// These next two tests unavoidably show warnings in Chrome. Since fetch will always\n// be used if it's available, just return false for these to avoid the warnings.\nexports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream')\nexports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer &&\n\tcheckTypeSupport('moz-chunked-arraybuffer')\n\n// If fetch is supported, then overrideMimeType will be supported too. Skip calling\n// getXHR().\nexports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false)\n\nexports.vbArray = isFunction(global.VBArray)\n\nfunction isFunction (value) {\n\treturn typeof value === 'function'\n}\n\nxhr = null // Help gc\n","var capability = require('./capability')\nvar inherits = require('inherits')\nvar stream = require('readable-stream')\n\nvar rStates = exports.readyStates = {\n\tUNSENT: 0,\n\tOPENED: 1,\n\tHEADERS_RECEIVED: 2,\n\tLOADING: 3,\n\tDONE: 4\n}\n\nvar IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, fetchTimer) {\n\tvar self = this\n\tstream.Readable.call(self)\n\n\tself._mode = mode\n\tself.headers = {}\n\tself.rawHeaders = []\n\tself.trailers = {}\n\tself.rawTrailers = []\n\n\t// Fake the 'close' event, but only once 'end' fires\n\tself.on('end', function () {\n\t\t// The nextTick is necessary to prevent the 'request' module from causing an infinite loop\n\t\tprocess.nextTick(function () {\n\t\t\tself.emit('close')\n\t\t})\n\t})\n\n\tif (mode === 'fetch') {\n\t\tself._fetchResponse = response\n\n\t\tself.url = response.url\n\t\tself.statusCode = response.status\n\t\tself.statusMessage = response.statusText\n\t\t\n\t\tresponse.headers.forEach(function (header, key){\n\t\t\tself.headers[key.toLowerCase()] = header\n\t\t\tself.rawHeaders.push(key, header)\n\t\t})\n\n\t\tif (capability.writableStream) {\n\t\t\tvar writable = new WritableStream({\n\t\t\t\twrite: function (chunk) {\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tif (self._destroyed) {\n\t\t\t\t\t\t\treject()\n\t\t\t\t\t\t} else if(self.push(new Buffer(chunk))) {\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself._resumeFetch = resolve\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tclose: function () {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.push(null)\n\t\t\t\t},\n\t\t\t\tabort: function (err) {\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttry {\n\t\t\t\tresponse.body.pipeTo(writable).catch(function (err) {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t} catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this\n\t\t}\n\t\t// fallback for when writableStream or pipeTo aren't available\n\t\tvar reader = response.body.getReader()\n\t\tfunction read () {\n\t\t\treader.read().then(function (result) {\n\t\t\t\tif (self._destroyed)\n\t\t\t\t\treturn\n\t\t\t\tif (result.done) {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tself.push(null)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tself.push(new Buffer(result.value))\n\t\t\t\tread()\n\t\t\t}).catch(function (err) {\n\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\tif (!self._destroyed)\n\t\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t}\n\t\tread()\n\t} else {\n\t\tself._xhr = xhr\n\t\tself._pos = 0\n\n\t\tself.url = xhr.responseURL\n\t\tself.statusCode = xhr.status\n\t\tself.statusMessage = xhr.statusText\n\t\tvar headers = xhr.getAllResponseHeaders().split(/\\r?\\n/)\n\t\theaders.forEach(function (header) {\n\t\t\tvar matches = header.match(/^([^:]+):\\s*(.*)/)\n\t\t\tif (matches) {\n\t\t\t\tvar key = matches[1].toLowerCase()\n\t\t\t\tif (key === 'set-cookie') {\n\t\t\t\t\tif (self.headers[key] === undefined) {\n\t\t\t\t\t\tself.headers[key] = []\n\t\t\t\t\t}\n\t\t\t\t\tself.headers[key].push(matches[2])\n\t\t\t\t} else if (self.headers[key] !== undefined) {\n\t\t\t\t\tself.headers[key] += ', ' + matches[2]\n\t\t\t\t} else {\n\t\t\t\t\tself.headers[key] = matches[2]\n\t\t\t\t}\n\t\t\t\tself.rawHeaders.push(matches[1], matches[2])\n\t\t\t}\n\t\t})\n\n\t\tself._charset = 'x-user-defined'\n\t\tif (!capability.overrideMimeType) {\n\t\t\tvar mimeType = self.rawHeaders['mime-type']\n\t\t\tif (mimeType) {\n\t\t\t\tvar charsetMatch = mimeType.match(/;\\s*charset=([^;])(;|$)/)\n\t\t\t\tif (charsetMatch) {\n\t\t\t\t\tself._charset = charsetMatch[1].toLowerCase()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!self._charset)\n\t\t\t\tself._charset = 'utf-8' // best guess\n\t\t}\n\t}\n}\n\ninherits(IncomingMessage, stream.Readable)\n\nIncomingMessage.prototype._read = function () {\n\tvar self = this\n\n\tvar resolve = self._resumeFetch\n\tif (resolve) {\n\t\tself._resumeFetch = null\n\t\tresolve()\n\t}\n}\n\nIncomingMessage.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tvar xhr = self._xhr\n\n\tvar response = null\n\tswitch (self._mode) {\n\t\tcase 'text:vbarray': // For IE9\n\t\t\tif (xhr.readyState !== rStates.DONE)\n\t\t\t\tbreak\n\t\t\ttry {\n\t\t\t\t// This fails in IE8\n\t\t\t\tresponse = new global.VBArray(xhr.responseBody).toArray()\n\t\t\t} catch (e) {}\n\t\t\tif (response !== null) {\n\t\t\t\tself.push(new Buffer(response))\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// Falls through in IE8\t\n\t\tcase 'text':\n\t\t\ttry { // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4\n\t\t\t\tresponse = xhr.responseText\n\t\t\t} catch (e) {\n\t\t\t\tself._mode = 'text:vbarray'\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (response.length > self._pos) {\n\t\t\t\tvar newData = response.substr(self._pos)\n\t\t\t\tif (self._charset === 'x-user-defined') {\n\t\t\t\t\tvar buffer = new Buffer(newData.length)\n\t\t\t\t\tfor (var i = 0; i < newData.length; i++)\n\t\t\t\t\t\tbuffer[i] = newData.charCodeAt(i) & 0xff\n\n\t\t\t\t\tself.push(buffer)\n\t\t\t\t} else {\n\t\t\t\t\tself.push(newData, self._charset)\n\t\t\t\t}\n\t\t\t\tself._pos = response.length\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'arraybuffer':\n\t\t\tif (xhr.readyState !== rStates.DONE || !xhr.response)\n\t\t\t\tbreak\n\t\t\tresponse = xhr.response\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'moz-chunked-arraybuffer': // take whole\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING || !response)\n\t\t\t\tbreak\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'ms-stream':\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING)\n\t\t\t\tbreak\n\t\t\tvar reader = new global.MSStreamReader()\n\t\t\treader.onprogress = function () {\n\t\t\t\tif (reader.result.byteLength > self._pos) {\n\t\t\t\t\tself.push(new Buffer(new Uint8Array(reader.result.slice(self._pos))))\n\t\t\t\t\tself._pos = reader.result.byteLength\n\t\t\t\t}\n\t\t\t}\n\t\t\treader.onload = function () {\n\t\t\t\tself.push(null)\n\t\t\t}\n\t\t\t// reader.onerror = ??? // TODO: this\n\t\t\treader.readAsArrayBuffer(response)\n\t\t\tbreak\n\t}\n\n\t// The ms-stream case handles end separately in reader.onload()\n\tif (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {\n\t\tself.push(null)\n\t}\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, unpipeInfo);\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","var http = require('http')\nvar url = require('url')\n\nvar https = module.exports\n\nfor (var key in http) {\n if (http.hasOwnProperty(key)) https[key] = http[key]\n}\n\nhttps.request = function (params, cb) {\n params = validateParams(params)\n return http.request.call(this, params, cb)\n}\n\nhttps.get = function (params, cb) {\n params = validateParams(params)\n return http.get.call(this, params, cb)\n}\n\nfunction validateParams (params) {\n if (typeof params === 'string') {\n params = url.parse(params)\n }\n if (!params.protocol) {\n params.protocol = 'https:'\n }\n if (params.protocol !== 'https:') {\n throw new Error('Protocol \"' + params.protocol + '\" not supported. Expected \"https:\"')\n }\n return params\n}\n","\"use strict\";\n/**\n * BigNumber\n *\n * A wrapper around the BN.js object. We use the BN.js library\n * because it is used by elliptic, so it is required regardles.\n *\n */\nimport { BN } from \"bn.js\";\nimport { hexlify, isBytes, isHexString } from \"@ethersproject/bytes\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nconst _constructorGuard = {};\nconst MAX_SAFE = 0x1fffffffffffff;\nexport function isBigNumberish(value) {\n return (value != null) && (BigNumber.isBigNumber(value) ||\n (typeof (value) === \"number\" && (value % 1) === 0) ||\n (typeof (value) === \"string\" && !!value.match(/^-?[0-9]+$/)) ||\n isHexString(value) ||\n (typeof (value) === \"bigint\") ||\n isBytes(value));\n}\nexport class BigNumber {\n constructor(constructorGuard, hex) {\n logger.checkNew(new.target, BigNumber);\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot call constructor directly; use BigNumber.from\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new (BigNumber)\"\n });\n }\n this._hex = hex;\n this._isBigNumber = true;\n Object.freeze(this);\n }\n fromTwos(value) {\n return toBigNumber(toBN(this).fromTwos(value));\n }\n toTwos(value) {\n return toBigNumber(toBN(this).toTwos(value));\n }\n abs() {\n if (this._hex[0] === \"-\") {\n return BigNumber.from(this._hex.substring(1));\n }\n return this;\n }\n add(other) {\n return toBigNumber(toBN(this).add(toBN(other)));\n }\n sub(other) {\n return toBigNumber(toBN(this).sub(toBN(other)));\n }\n div(other) {\n const o = BigNumber.from(other);\n if (o.isZero()) {\n throwFault(\"division by zero\", \"div\");\n }\n return toBigNumber(toBN(this).div(toBN(other)));\n }\n mul(other) {\n return toBigNumber(toBN(this).mul(toBN(other)));\n }\n mod(other) {\n const value = toBN(other);\n if (value.isNeg()) {\n throwFault(\"cannot modulo negative values\", \"mod\");\n }\n return toBigNumber(toBN(this).umod(value));\n }\n pow(other) {\n const value = toBN(other);\n if (value.isNeg()) {\n throwFault(\"cannot raise to negative values\", \"pow\");\n }\n return toBigNumber(toBN(this).pow(value));\n }\n and(other) {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"cannot 'and' negative values\", \"and\");\n }\n return toBigNumber(toBN(this).and(value));\n }\n or(other) {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"cannot 'or' negative values\", \"or\");\n }\n return toBigNumber(toBN(this).or(value));\n }\n xor(other) {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"cannot 'xor' negative values\", \"xor\");\n }\n return toBigNumber(toBN(this).xor(value));\n }\n mask(value) {\n if (this.isNegative() || value < 0) {\n throwFault(\"cannot mask negative values\", \"mask\");\n }\n return toBigNumber(toBN(this).maskn(value));\n }\n shl(value) {\n if (this.isNegative() || value < 0) {\n throwFault(\"cannot shift negative values\", \"shl\");\n }\n return toBigNumber(toBN(this).shln(value));\n }\n shr(value) {\n if (this.isNegative() || value < 0) {\n throwFault(\"cannot shift negative values\", \"shr\");\n }\n return toBigNumber(toBN(this).shrn(value));\n }\n eq(other) {\n return toBN(this).eq(toBN(other));\n }\n lt(other) {\n return toBN(this).lt(toBN(other));\n }\n lte(other) {\n return toBN(this).lte(toBN(other));\n }\n gt(other) {\n return toBN(this).gt(toBN(other));\n }\n gte(other) {\n return toBN(this).gte(toBN(other));\n }\n isNegative() {\n return (this._hex[0] === \"-\");\n }\n isZero() {\n return toBN(this).isZero();\n }\n toNumber() {\n try {\n return toBN(this).toNumber();\n }\n catch (error) {\n throwFault(\"overflow\", \"toNumber\", this.toString());\n }\n return null;\n }\n toString() {\n // Lots of people expect this, which we do not support, so check\n if (arguments.length !== 0) {\n logger.throwError(\"bigNumber.toString does not accept parameters\", Logger.errors.UNEXPECTED_ARGUMENT, {});\n }\n return toBN(this).toString(10);\n }\n toHexString() {\n return this._hex;\n }\n static from(value) {\n if (value instanceof BigNumber) {\n return value;\n }\n if (typeof (value) === \"string\") {\n if (value.match(/^-?0x[0-9a-f]+$/i)) {\n return new BigNumber(_constructorGuard, toHex(value));\n }\n if (value.match(/^-?[0-9]+$/)) {\n return new BigNumber(_constructorGuard, toHex(new BN(value)));\n }\n return logger.throwArgumentError(\"invalid BigNumber string\", \"value\", value);\n }\n if (typeof (value) === \"number\") {\n if (value % 1) {\n throwFault(\"underflow\", \"BigNumber.from\", value);\n }\n if (value >= MAX_SAFE || value <= -MAX_SAFE) {\n throwFault(\"overflow\", \"BigNumber.from\", value);\n }\n return BigNumber.from(String(value));\n }\n if (typeof (value) === \"bigint\") {\n return BigNumber.from(value.toString());\n }\n if (isBytes(value)) {\n return BigNumber.from(hexlify(value));\n }\n if (value._hex && isHexString(value._hex)) {\n return BigNumber.from(value._hex);\n }\n if (value.toHexString) {\n value = value.toHexString();\n if (typeof (value) === \"string\") {\n return BigNumber.from(value);\n }\n }\n return logger.throwArgumentError(\"invalid BigNumber value\", \"value\", value);\n }\n static isBigNumber(value) {\n return !!(value && value._isBigNumber);\n }\n}\n// Normalize the hex string\nfunction toHex(value) {\n // For BN, call on the hex string\n if (typeof (value) !== \"string\") {\n return toHex(value.toString(16));\n }\n // If negative, prepend the negative sign to the normalized positive value\n if (value[0] === \"-\") {\n // Strip off the negative sign\n value = value.substring(1);\n // Cannot have mulitple negative signs (e.g. \"--0x04\")\n if (value[0] === \"-\") {\n logger.throwArgumentError(\"invalid hex\", \"value\", value);\n }\n // Call toHex on the positive component\n value = toHex(value);\n // Do not allow \"-0x00\"\n if (value === \"0x00\") {\n return value;\n }\n // Negate the value\n return \"-\" + value;\n }\n // Add a \"0x\" prefix if missing\n if (value.substring(0, 2) !== \"0x\") {\n value = \"0x\" + value;\n }\n // Normalize zero\n if (value === \"0x\") {\n return \"0x00\";\n }\n // Make the string even length\n if (value.length % 2) {\n value = \"0x0\" + value.substring(2);\n }\n // Trim to smallest even-length string\n while (value.length > 4 && value.substring(0, 4) === \"0x00\") {\n value = \"0x\" + value.substring(4);\n }\n return value;\n}\nfunction toBigNumber(value) {\n return BigNumber.from(toHex(value));\n}\nfunction toBN(value) {\n const hex = BigNumber.from(value).toHexString();\n if (hex[0] === \"-\") {\n return (new BN(\"-\" + hex.substring(3), 16));\n }\n return new BN(hex.substring(2), 16);\n}\nfunction throwFault(fault, operation, value) {\n const params = { fault: fault, operation: operation };\n if (value != null) {\n params.value = value;\n }\n return logger.throwError(fault, Logger.errors.NUMERIC_FAULT, params);\n}\n//# sourceMappingURL=bignumber.js.map","export const version = \"hash/5.0.2\";\n//# sourceMappingURL=_version.js.map","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","/*\n This file is part of web3.js.\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file config.js\n *\n * @author Samuel Furter \n * @date 2017\n */\n\"use strict\";\n/**\n * Source: https://docs.ens.domains/ens-deployments\n *\n * @type {{addresses: {main: string, rinkeby: string, goerli: string, ropsten: string}}}\n */\nvar config = {\n addresses: {\n main: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n ropsten: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n rinkeby: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n goerli: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\"\n },\n // These ids obtained at ensdomains docs:\n // https://docs.ens.domains/contract-developer-guide/writing-a-resolver\n interfaceIds: {\n addr: \"0x3b3b57de\",\n setAddr: \"0x3b3b57de\",\n pubkey: \"0xc8690233\",\n setPubkey: \"0xc8690233\",\n contenthash: \"0xbc1c58d1\",\n setContenthash: \"0xbc1c58d1\",\n content: \"0xd8389dc5\",\n setContent: \"0xd8389dc5\"\n }\n};\nmodule.exports = config;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file contract.js\n *\n * To initialize a contract use:\n *\n * var Contract = require('web3-eth-contract');\n * Contract.setProvider('ws://localhost:8546');\n * var contract = new Contract(abi, address, ...);\n *\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar _ = require('underscore');\nvar core = require('web3-core');\nvar Method = require('web3-core-method');\nvar utils = require('web3-utils');\nvar Subscription = require('web3-core-subscriptions').subscription;\nvar formatters = require('web3-core-helpers').formatters;\nvar errors = require('web3-core-helpers').errors;\nvar promiEvent = require('web3-core-promievent');\nvar abi = require('web3-eth-abi');\n/**\n * Should be called to create new contract instance\n *\n * @method Contract\n * @constructor\n * @param {Array} jsonInterface\n * @param {String} address\n * @param {Object} options\n */\nvar Contract = function Contract(jsonInterface, address, options) {\n var _this = this, args = Array.prototype.slice.call(arguments);\n if (!(this instanceof Contract)) {\n throw new Error('Please use the \"new\" keyword to instantiate a web3.eth.Contract() object!');\n }\n this.setProvider = function () {\n core.packageInit(_this, arguments);\n _this.clearSubscriptions = _this._requestManager.clearSubscriptions;\n };\n // sets _requestmanager\n core.packageInit(this, [this.constructor]);\n this.clearSubscriptions = this._requestManager.clearSubscriptions;\n if (!jsonInterface || !(Array.isArray(jsonInterface))) {\n throw errors.ContractMissingABIError();\n }\n // create the options object\n this.options = {};\n var lastArg = args[args.length - 1];\n if (_.isObject(lastArg) && !_.isArray(lastArg)) {\n options = lastArg;\n this.options = _.extend(this.options, this._getOrSetDefaultOptions(options));\n if (_.isObject(address)) {\n address = null;\n }\n }\n // set address\n Object.defineProperty(this.options, 'address', {\n set: function (value) {\n if (value) {\n _this._address = utils.toChecksumAddress(formatters.inputAddressFormatter(value));\n }\n },\n get: function () {\n return _this._address;\n },\n enumerable: true\n });\n // add method and event signatures, when the jsonInterface gets set\n Object.defineProperty(this.options, 'jsonInterface', {\n set: function (value) {\n _this.methods = {};\n _this.events = {};\n _this._jsonInterface = value.map(function (method) {\n var func, funcName;\n // make constant and payable backwards compatible\n method.constant = (method.stateMutability === \"view\" || method.stateMutability === \"pure\" || method.constant);\n method.payable = (method.stateMutability === \"payable\" || method.payable);\n if (method.name) {\n funcName = utils._jsonInterfaceMethodToString(method);\n }\n // function\n if (method.type === 'function') {\n method.signature = abi.encodeFunctionSignature(funcName);\n func = _this._createTxObject.bind({\n method: method,\n parent: _this\n });\n // add method only if not one already exists\n if (!_this.methods[method.name]) {\n _this.methods[method.name] = func;\n }\n else {\n var cascadeFunc = _this._createTxObject.bind({\n method: method,\n parent: _this,\n nextMethod: _this.methods[method.name]\n });\n _this.methods[method.name] = cascadeFunc;\n }\n // definitely add the method based on its signature\n _this.methods[method.signature] = func;\n // add method by name\n _this.methods[funcName] = func;\n // event\n }\n else if (method.type === 'event') {\n method.signature = abi.encodeEventSignature(funcName);\n var event = _this._on.bind(_this, method.signature);\n // add method only if not already exists\n if (!_this.events[method.name] || _this.events[method.name].name === 'bound ')\n _this.events[method.name] = event;\n // definitely add the method based on its signature\n _this.events[method.signature] = event;\n // add event by name\n _this.events[funcName] = event;\n }\n return method;\n });\n // add allEvents\n _this.events.allEvents = _this._on.bind(_this, 'allevents');\n return _this._jsonInterface;\n },\n get: function () {\n return _this._jsonInterface;\n },\n enumerable: true\n });\n // get default account from the Class\n var defaultAccount = this.constructor.defaultAccount;\n var defaultBlock = this.constructor.defaultBlock || 'latest';\n Object.defineProperty(this, 'handleRevert', {\n get: function () {\n if (_this.options.handleRevert === false || _this.options.handleRevert === true) {\n return _this.options.handleRevert;\n }\n return this.constructor.handleRevert;\n },\n set: function (val) {\n _this.options.handleRevert = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultCommon', {\n get: function () {\n return _this.options.common || this.constructor.defaultCommon;\n },\n set: function (val) {\n _this.options.common = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultHardfork', {\n get: function () {\n return _this.options.hardfork || this.constructor.defaultHardfork;\n },\n set: function (val) {\n _this.options.hardfork = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultChain', {\n get: function () {\n return _this.options.chain || this.constructor.defaultChain;\n },\n set: function (val) {\n _this.options.chain = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'transactionPollingTimeout', {\n get: function () {\n if (_this.options.transactionPollingTimeout === 0) {\n return _this.options.transactionPollingTimeout;\n }\n return _this.options.transactionPollingTimeout || this.constructor.transactionPollingTimeout;\n },\n set: function (val) {\n _this.options.transactionPollingTimeout = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'transactionConfirmationBlocks', {\n get: function () {\n if (_this.options.transactionConfirmationBlocks === 0) {\n return _this.options.transactionConfirmationBlocks;\n }\n return _this.options.transactionConfirmationBlocks || this.constructor.transactionConfirmationBlocks;\n },\n set: function (val) {\n _this.options.transactionConfirmationBlocks = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'transactionBlockTimeout', {\n get: function () {\n if (_this.options.transactionBlockTimeout === 0) {\n return _this.options.transactionBlockTimeout;\n }\n return _this.options.transactionBlockTimeout || this.constructor.transactionBlockTimeout;\n },\n set: function (val) {\n _this.options.transactionBlockTimeout = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultAccount', {\n get: function () {\n return defaultAccount;\n },\n set: function (val) {\n if (val) {\n defaultAccount = utils.toChecksumAddress(formatters.inputAddressFormatter(val));\n }\n return val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultBlock', {\n get: function () {\n return defaultBlock;\n },\n set: function (val) {\n defaultBlock = val;\n return val;\n },\n enumerable: true\n });\n // properties\n this.methods = {};\n this.events = {};\n this._address = null;\n this._jsonInterface = [];\n // set getter/setter properties\n this.options.address = address;\n this.options.jsonInterface = jsonInterface;\n};\n/**\n * Sets the new provider, creates a new requestManager, registers the \"data\" listener on the provider and sets the\n * accounts module for the Contract class.\n *\n * @method setProvider\n *\n * @param {string|provider} provider\n * @param {Accounts} accounts\n *\n * @returns void\n */\nContract.setProvider = function (provider, accounts) {\n // Contract.currentProvider = provider;\n core.packageInit(this, [provider]);\n this._ethAccounts = accounts;\n};\n/**\n * Get the callback and modify the array if necessary\n *\n * @method _getCallback\n * @param {Array} args\n * @return {Function} the callback\n */\nContract.prototype._getCallback = function getCallback(args) {\n if (args && _.isFunction(args[args.length - 1])) {\n return args.pop(); // modify the args array!\n }\n};\n/**\n * Checks that no listener with name \"newListener\" or \"removeListener\" is added.\n *\n * @method _checkListener\n * @param {String} type\n * @param {String} event\n * @return {Object} the contract instance\n */\nContract.prototype._checkListener = function (type, event) {\n if (event === type) {\n throw errors.ContractReservedEventError(type);\n }\n};\n/**\n * Use default values, if options are not available\n *\n * @method _getOrSetDefaultOptions\n * @param {Object} options the options gived by the user\n * @return {Object} the options with gaps filled by defaults\n */\nContract.prototype._getOrSetDefaultOptions = function getOrSetDefaultOptions(options) {\n var gasPrice = options.gasPrice ? String(options.gasPrice) : null;\n var from = options.from ? utils.toChecksumAddress(formatters.inputAddressFormatter(options.from)) : null;\n options.data = options.data || this.options.data;\n options.from = from || this.options.from;\n options.gasPrice = gasPrice || this.options.gasPrice;\n options.gas = options.gas || options.gasLimit || this.options.gas;\n // TODO replace with only gasLimit?\n delete options.gasLimit;\n return options;\n};\n/**\n * Should be used to encode indexed params and options to one final object\n *\n * @method _encodeEventABI\n * @param {Object} event\n * @param {Object} options\n * @return {Object} everything combined together and encoded\n */\nContract.prototype._encodeEventABI = function (event, options) {\n options = options || {};\n var filter = options.filter || {}, result = {};\n ['fromBlock', 'toBlock'].filter(function (f) {\n return options[f] !== undefined;\n }).forEach(function (f) {\n result[f] = formatters.inputBlockNumberFormatter(options[f]);\n });\n // use given topics\n if (_.isArray(options.topics)) {\n result.topics = options.topics;\n // create topics based on filter\n }\n else {\n result.topics = [];\n // add event signature\n if (event && !event.anonymous && event.name !== 'ALLEVENTS') {\n result.topics.push(event.signature);\n }\n // add event topics (indexed arguments)\n if (event.name !== 'ALLEVENTS') {\n var indexedTopics = event.inputs.filter(function (i) {\n return i.indexed === true;\n }).map(function (i) {\n var value = filter[i.name];\n if (!value) {\n return null;\n }\n // TODO: https://github.com/ethereum/web3.js/issues/344\n // TODO: deal properly with components\n if (_.isArray(value)) {\n return value.map(function (v) {\n return abi.encodeParameter(i.type, v);\n });\n }\n return abi.encodeParameter(i.type, value);\n });\n result.topics = result.topics.concat(indexedTopics);\n }\n if (!result.topics.length)\n delete result.topics;\n }\n if (this.options.address) {\n result.address = this.options.address.toLowerCase();\n }\n return result;\n};\n/**\n * Should be used to decode indexed params and options\n *\n * @method _decodeEventABI\n * @param {Object} data\n * @return {Object} result object with decoded indexed && not indexed params\n */\nContract.prototype._decodeEventABI = function (data) {\n var event = this;\n data.data = data.data || '';\n data.topics = data.topics || [];\n var result = formatters.outputLogFormatter(data);\n // if allEvents get the right event\n if (event.name === 'ALLEVENTS') {\n event = event.jsonInterface.find(function (intf) {\n return (intf.signature === data.topics[0]);\n }) || { anonymous: true };\n }\n // create empty inputs if none are present (e.g. anonymous events on allEvents)\n event.inputs = event.inputs || [];\n // Handle case where an event signature shadows the current ABI with non-identical\n // arg indexing. If # of topics doesn't match, event is anon.\n if (!event.anonymous) {\n let indexedInputs = 0;\n event.inputs.forEach(input => input.indexed ? indexedInputs++ : null);\n if (indexedInputs > 0 && (data.topics.length !== indexedInputs + 1)) {\n event = {\n anonymous: true,\n inputs: []\n };\n }\n }\n var argTopics = event.anonymous ? data.topics : data.topics.slice(1);\n result.returnValues = abi.decodeLog(event.inputs, data.data, argTopics);\n delete result.returnValues.__length__;\n // add name\n result.event = event.name;\n // add signature\n result.signature = (event.anonymous || !data.topics[0]) ? null : data.topics[0];\n // move the data and topics to \"raw\"\n result.raw = {\n data: result.data,\n topics: result.topics\n };\n delete result.data;\n delete result.topics;\n return result;\n};\n/**\n * Encodes an ABI for a method, including signature or the method.\n * Or when constructor encodes only the constructor parameters.\n *\n * @method _encodeMethodABI\n * @param {Mixed} args the arguments to encode\n * @param {String} the encoded ABI\n */\nContract.prototype._encodeMethodABI = function _encodeMethodABI() {\n var methodSignature = this._method.signature, args = this.arguments || [];\n var signature = false, paramsABI = this._parent.options.jsonInterface.filter(function (json) {\n return ((methodSignature === 'constructor' && json.type === methodSignature) ||\n ((json.signature === methodSignature || json.signature === methodSignature.replace('0x', '') || json.name === methodSignature) && json.type === 'function'));\n }).map(function (json) {\n var inputLength = (_.isArray(json.inputs)) ? json.inputs.length : 0;\n if (inputLength !== args.length) {\n throw new Error('The number of arguments is not matching the methods required number. You need to pass ' + inputLength + ' arguments.');\n }\n if (json.type === 'function') {\n signature = json.signature;\n }\n return _.isArray(json.inputs) ? json.inputs : [];\n }).map(function (inputs) {\n return abi.encodeParameters(inputs, args).replace('0x', '');\n })[0] || '';\n // return constructor\n if (methodSignature === 'constructor') {\n if (!this._deployData)\n throw new Error('The contract has no contract data option set. This is necessary to append the constructor parameters.');\n if (!this._deployData.startsWith('0x')) {\n this._deployData = '0x' + this._deployData;\n }\n return this._deployData + paramsABI;\n }\n // return method\n var returnValue = (signature) ? signature + paramsABI : paramsABI;\n if (!returnValue) {\n throw new Error('Couldn\\'t find a matching contract method named \"' + this._method.name + '\".');\n }\n return returnValue;\n};\n/**\n * Decode method return values\n *\n * @method _decodeMethodReturn\n * @param {Array} outputs\n * @param {String} returnValues\n * @return {Object} decoded output return values\n */\nContract.prototype._decodeMethodReturn = function (outputs, returnValues) {\n if (!returnValues) {\n return null;\n }\n returnValues = returnValues.length >= 2 ? returnValues.slice(2) : returnValues;\n var result = abi.decodeParameters(outputs, returnValues);\n if (result.__length__ === 1) {\n return result[0];\n }\n delete result.__length__;\n return result;\n};\n/**\n * Deploys a contract and fire events based on its state: transactionHash, receipt\n *\n * All event listeners will be removed, once the last possible event is fired (\"error\", or \"receipt\")\n *\n * @method deploy\n * @param {Object} options\n * @param {Function} callback\n * @return {Object} EventEmitter possible events are \"error\", \"transactionHash\" and \"receipt\"\n */\nContract.prototype.deploy = function (options, callback) {\n options = options || {};\n options.arguments = options.arguments || [];\n options = this._getOrSetDefaultOptions(options);\n // throw error, if no \"data\" is specified\n if (!options.data) {\n if (typeof callback === 'function') {\n return callback(errors.ContractMissingDeployDataError());\n }\n throw errors.ContractMissingDeployDataError();\n }\n var constructor = _.find(this.options.jsonInterface, function (method) {\n return (method.type === 'constructor');\n }) || {};\n constructor.signature = 'constructor';\n return this._createTxObject.apply({\n method: constructor,\n parent: this,\n deployData: options.data,\n _ethAccounts: this.constructor._ethAccounts\n }, options.arguments);\n};\n/**\n * Gets the event signature and outputFormatters\n *\n * @method _generateEventOptions\n * @param {Object} event\n * @param {Object} options\n * @param {Function} callback\n * @return {Object} the event options object\n */\nContract.prototype._generateEventOptions = function () {\n var args = Array.prototype.slice.call(arguments);\n // get the callback\n var callback = this._getCallback(args);\n // get the options\n var options = (_.isObject(args[args.length - 1])) ? args.pop() : {};\n var eventName = (_.isString(args[0])) ? args[0] : 'allevents';\n var event = (eventName.toLowerCase() === 'allevents') ? {\n name: 'ALLEVENTS',\n jsonInterface: this.options.jsonInterface\n } : this.options.jsonInterface.find(function (json) {\n return (json.type === 'event' && (json.name === eventName || json.signature === '0x' + eventName.replace('0x', '')));\n });\n if (!event) {\n throw errors.ContractEventDoesNotExistError(eventName);\n }\n if (!utils.isAddress(this.options.address)) {\n throw errors.ContractNoAddressDefinedError();\n }\n return {\n params: this._encodeEventABI(event, options),\n event: event,\n callback: callback\n };\n};\n/**\n * Adds event listeners and creates a subscription, and remove it once its fired.\n *\n * @method clone\n * @return {Object} the event subscription\n */\nContract.prototype.clone = function () {\n return new this.constructor(this.options.jsonInterface, this.options.address, this.options);\n};\n/**\n * Adds event listeners and creates a subscription, and remove it once its fired.\n *\n * @method once\n * @param {String} event\n * @param {Object} options\n * @param {Function} callback\n * @return {Object} the event subscription\n */\nContract.prototype.once = function (event, options, callback) {\n var args = Array.prototype.slice.call(arguments);\n // get the callback\n callback = this._getCallback(args);\n if (!callback) {\n throw errors.ContractOnceRequiresCallbackError();\n }\n // don't allow fromBlock\n if (options)\n delete options.fromBlock;\n // don't return as once shouldn't provide \"on\"\n this._on(event, options, function (err, res, sub) {\n sub.unsubscribe();\n if (_.isFunction(callback)) {\n callback(err, res, sub);\n }\n });\n return undefined;\n};\n/**\n * Adds event listeners and creates a subscription.\n *\n * @method _on\n *\n * @param {String} event\n * @param {Object} options\n * @param {Function} callback\n *\n * @return {Object} the event subscription\n */\nContract.prototype._on = function () {\n var subOptions = this._generateEventOptions.apply(this, arguments);\n if (subOptions.params && subOptions.params.toBlock) {\n delete subOptions.params.toBlock;\n console.warn('Invalid option: toBlock. Use getPastEvents for specific range.');\n }\n // prevent the event \"newListener\" and \"removeListener\" from being overwritten\n this._checkListener('newListener', subOptions.event.name);\n this._checkListener('removeListener', subOptions.event.name);\n // TODO check if listener already exists? and reuse subscription if options are the same.\n // create new subscription\n var subscription = new Subscription({\n subscription: {\n params: 1,\n inputFormatter: [formatters.inputLogFormatter],\n outputFormatter: this._decodeEventABI.bind(subOptions.event),\n // DUBLICATE, also in web3-eth\n subscriptionHandler: function (output) {\n if (output.removed) {\n this.emit('changed', output);\n }\n else {\n this.emit('data', output);\n }\n if (_.isFunction(this.callback)) {\n this.callback(null, output, this);\n }\n }\n },\n type: 'eth',\n requestManager: this._requestManager\n });\n subscription.subscribe('logs', subOptions.params, subOptions.callback || function () { });\n return subscription;\n};\n/**\n * Get past events from contracts\n *\n * @method getPastEvents\n * @param {String} event\n * @param {Object} options\n * @param {Function} callback\n * @return {Object} the promievent\n */\nContract.prototype.getPastEvents = function () {\n var subOptions = this._generateEventOptions.apply(this, arguments);\n var getPastLogs = new Method({\n name: 'getPastLogs',\n call: 'eth_getLogs',\n params: 1,\n inputFormatter: [formatters.inputLogFormatter],\n outputFormatter: this._decodeEventABI.bind(subOptions.event)\n });\n getPastLogs.setRequestManager(this._requestManager);\n var call = getPastLogs.buildCall();\n getPastLogs = null;\n return call(subOptions.params, subOptions.callback);\n};\n/**\n * returns the an object with call, send, estimate functions\n *\n * @method _createTxObject\n * @returns {Object} an object with functions to call the methods\n */\nContract.prototype._createTxObject = function _createTxObject() {\n var args = Array.prototype.slice.call(arguments);\n var txObject = {};\n if (this.method.type === 'function') {\n txObject.call = this.parent._executeMethod.bind(txObject, 'call');\n txObject.call.request = this.parent._executeMethod.bind(txObject, 'call', true); // to make batch requests\n }\n txObject.send = this.parent._executeMethod.bind(txObject, 'send');\n txObject.send.request = this.parent._executeMethod.bind(txObject, 'send', true); // to make batch requests\n txObject.encodeABI = this.parent._encodeMethodABI.bind(txObject);\n txObject.estimateGas = this.parent._executeMethod.bind(txObject, 'estimate');\n if (args && this.method.inputs && args.length !== this.method.inputs.length) {\n if (this.nextMethod) {\n return this.nextMethod.apply(null, args);\n }\n throw errors.InvalidNumberOfParams(args.length, this.method.inputs.length, this.method.name);\n }\n txObject.arguments = args || [];\n txObject._method = this.method;\n txObject._parent = this.parent;\n txObject._ethAccounts = this.parent.constructor._ethAccounts || this._ethAccounts;\n if (this.deployData) {\n txObject._deployData = this.deployData;\n }\n return txObject;\n};\n/**\n * Generates the options for the execute call\n *\n * @method _processExecuteArguments\n * @param {Array} args\n * @param {Promise} defer\n */\nContract.prototype._processExecuteArguments = function _processExecuteArguments(args, defer) {\n var processedArgs = {};\n processedArgs.type = args.shift();\n // get the callback\n processedArgs.callback = this._parent._getCallback(args);\n // get block number to use for call\n if (processedArgs.type === 'call' && args[args.length - 1] !== true && (_.isString(args[args.length - 1]) || isFinite(args[args.length - 1])))\n processedArgs.defaultBlock = args.pop();\n // get the options\n processedArgs.options = (_.isObject(args[args.length - 1])) ? args.pop() : {};\n // get the generateRequest argument for batch requests\n processedArgs.generateRequest = (args[args.length - 1] === true) ? args.pop() : false;\n processedArgs.options = this._parent._getOrSetDefaultOptions(processedArgs.options);\n processedArgs.options.data = this.encodeABI();\n // add contract address\n if (!this._deployData && !utils.isAddress(this._parent.options.address))\n throw errors.ContractNoAddressDefinedError();\n if (!this._deployData)\n processedArgs.options.to = this._parent.options.address;\n // return error, if no \"data\" is specified\n if (!processedArgs.options.data)\n return utils._fireError(new Error('Couldn\\'t find a matching contract method, or the number of parameters is wrong.'), defer.eventEmitter, defer.reject, processedArgs.callback);\n return processedArgs;\n};\n/**\n * Executes a call, transact or estimateGas on a contract function\n *\n * @method _executeMethod\n * @param {String} type the type this execute function should execute\n * @param {Boolean} makeRequest if true, it simply returns the request parameters, rather than executing it\n */\nContract.prototype._executeMethod = function _executeMethod() {\n var _this = this, args = this._parent._processExecuteArguments.call(this, Array.prototype.slice.call(arguments), defer), defer = promiEvent((args.type !== 'send')), ethAccounts = _this.constructor._ethAccounts || _this._ethAccounts;\n // simple return request for batch requests\n if (args.generateRequest) {\n var payload = {\n params: [formatters.inputCallFormatter.call(this._parent, args.options)],\n callback: args.callback\n };\n if (args.type === 'call') {\n payload.params.push(formatters.inputDefaultBlockNumberFormatter.call(this._parent, args.defaultBlock));\n payload.method = 'eth_call';\n payload.format = this._parent._decodeMethodReturn.bind(null, this._method.outputs);\n }\n else {\n payload.method = 'eth_sendTransaction';\n }\n return payload;\n }\n switch (args.type) {\n case 'estimate':\n var estimateGas = (new Method({\n name: 'estimateGas',\n call: 'eth_estimateGas',\n params: 1,\n inputFormatter: [formatters.inputCallFormatter],\n outputFormatter: utils.hexToNumber,\n requestManager: _this._parent._requestManager,\n accounts: ethAccounts,\n defaultAccount: _this._parent.defaultAccount,\n defaultBlock: _this._parent.defaultBlock\n })).createFunction();\n return estimateGas(args.options, args.callback);\n case 'call':\n // TODO check errors: missing \"from\" should give error on deploy and send, call ?\n var call = (new Method({\n name: 'call',\n call: 'eth_call',\n params: 2,\n inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter],\n // add output formatter for decoding\n outputFormatter: function (result) {\n return _this._parent._decodeMethodReturn(_this._method.outputs, result);\n },\n requestManager: _this._parent._requestManager,\n accounts: ethAccounts,\n defaultAccount: _this._parent.defaultAccount,\n defaultBlock: _this._parent.defaultBlock,\n handleRevert: _this._parent.handleRevert,\n abiCoder: abi\n })).createFunction();\n return call(args.options, args.defaultBlock, args.callback);\n case 'send':\n // return error, if no \"from\" is specified\n if (!utils.isAddress(args.options.from)) {\n return utils._fireError(errors.ContractNoFromAddressDefinedError(), defer.eventEmitter, defer.reject, args.callback);\n }\n if (_.isBoolean(this._method.payable) && !this._method.payable && args.options.value && args.options.value > 0) {\n return utils._fireError(new Error('Can not send value to non-payable contract method or constructor'), defer.eventEmitter, defer.reject, args.callback);\n }\n // make sure receipt logs are decoded\n var extraFormatters = {\n receiptFormatter: function (receipt) {\n if (_.isArray(receipt.logs)) {\n // decode logs\n var events = _.map(receipt.logs, function (log) {\n return _this._parent._decodeEventABI.call({\n name: 'ALLEVENTS',\n jsonInterface: _this._parent.options.jsonInterface\n }, log);\n });\n // make log names keys\n receipt.events = {};\n var count = 0;\n events.forEach(function (ev) {\n if (ev.event) {\n // if > 1 of the same event, don't overwrite any existing events\n if (receipt.events[ev.event]) {\n if (Array.isArray(receipt.events[ev.event])) {\n receipt.events[ev.event].push(ev);\n }\n else {\n receipt.events[ev.event] = [receipt.events[ev.event], ev];\n }\n }\n else {\n receipt.events[ev.event] = ev;\n }\n }\n else {\n receipt.events[count] = ev;\n count++;\n }\n });\n delete receipt.logs;\n }\n return receipt;\n },\n contractDeployFormatter: function (receipt) {\n var newContract = _this._parent.clone();\n newContract.options.address = receipt.contractAddress;\n return newContract;\n }\n };\n var sendTransaction = (new Method({\n name: 'sendTransaction',\n call: 'eth_sendTransaction',\n params: 1,\n inputFormatter: [formatters.inputTransactionFormatter],\n requestManager: _this._parent._requestManager,\n accounts: _this.constructor._ethAccounts || _this._ethAccounts,\n defaultAccount: _this._parent.defaultAccount,\n defaultBlock: _this._parent.defaultBlock,\n transactionBlockTimeout: _this._parent.transactionBlockTimeout,\n transactionConfirmationBlocks: _this._parent.transactionConfirmationBlocks,\n transactionPollingTimeout: _this._parent.transactionPollingTimeout,\n defaultCommon: _this._parent.defaultCommon,\n defaultChain: _this._parent.defaultChain,\n defaultHardfork: _this._parent.defaultHardfork,\n handleRevert: _this._parent.handleRevert,\n extraFormatters: extraFormatters,\n abiCoder: abi\n })).createFunction();\n return sendTransaction(args.options, args.callback);\n default:\n throw new Error('Method \"' + args.type + '\" not implemented.');\n }\n};\nmodule.exports = Contract;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file index.js\n * @author Marek Kotewicz \n * @author Fabian Vogelsteller \n * @date 2018\n */\nvar Buffer = require('buffer').Buffer;\nvar _ = require('underscore');\nvar utils = require('web3-utils');\nvar EthersAbiCoder = require('@ethersproject/abi').AbiCoder;\nvar ParamType = require('@ethersproject/abi').ParamType;\nvar ethersAbiCoder = new EthersAbiCoder(function (type, value) {\n if (type.match(/^u?int/) && !_.isArray(value) && (!_.isObject(value) || value.constructor.name !== 'BN')) {\n return value.toString();\n }\n return value;\n});\n// result method\nfunction Result() {\n}\n/**\n * ABICoder prototype should be used to encode/decode solidity params of any type\n */\nvar ABICoder = function () {\n};\n/**\n * Encodes the function name to its ABI representation, which are the first 4 bytes of the sha3 of the function name including types.\n *\n * @method encodeFunctionSignature\n * @param {String|Object} functionName\n * @return {String} encoded function name\n */\nABICoder.prototype.encodeFunctionSignature = function (functionName) {\n if (_.isObject(functionName)) {\n functionName = utils._jsonInterfaceMethodToString(functionName);\n }\n return utils.sha3(functionName).slice(0, 10);\n};\n/**\n * Encodes the function name to its ABI representation, which are the first 4 bytes of the sha3 of the function name including types.\n *\n * @method encodeEventSignature\n * @param {String|Object} functionName\n * @return {String} encoded function name\n */\nABICoder.prototype.encodeEventSignature = function (functionName) {\n if (_.isObject(functionName)) {\n functionName = utils._jsonInterfaceMethodToString(functionName);\n }\n return utils.sha3(functionName);\n};\n/**\n * Should be used to encode plain param\n *\n * @method encodeParameter\n *\n * @param {String|Object} type\n * @param {any} param\n *\n * @return {String} encoded plain param\n */\nABICoder.prototype.encodeParameter = function (type, param) {\n return this.encodeParameters([type], [param]);\n};\n/**\n * Should be used to encode list of params\n *\n * @method encodeParameters\n *\n * @param {Array} types\n * @param {Array} params\n *\n * @return {String} encoded list of params\n */\nABICoder.prototype.encodeParameters = function (types, params) {\n var self = this;\n types = self.mapTypes(types);\n params = params.map(function (param, index) {\n let type = types[index];\n if (typeof type === 'object' && type.type) {\n // We may get a named type of shape {name, type}\n type = type.type;\n }\n param = self.formatParam(type, param);\n // Format params for tuples\n if (typeof type === 'string' && type.includes('tuple')) {\n const coder = ethersAbiCoder._getCoder(ParamType.from(type));\n const modifyParams = (coder, param) => {\n if (coder.name === 'array') {\n return param.map(p => modifyParams(ethersAbiCoder._getCoder(ParamType.from(coder.type.replace('[]', ''))), p));\n }\n coder.coders.forEach((c, i) => {\n if (c.name === 'tuple') {\n modifyParams(c, param[i]);\n }\n else {\n param[i] = self.formatParam(c.name, param[i]);\n }\n });\n };\n modifyParams(coder, param);\n }\n return param;\n });\n return ethersAbiCoder.encode(types, params);\n};\n/**\n * Map types if simplified format is used\n *\n * @method mapTypes\n * @param {Array} types\n * @return {Array}\n */\nABICoder.prototype.mapTypes = function (types) {\n var self = this;\n var mappedTypes = [];\n types.forEach(function (type) {\n // Remap `function` type params to bytes24 since Ethers does not\n // recognize former type. Solidity docs say `Function` is a bytes24\n // encoding the contract address followed by the function selector hash.\n if (typeof type === 'object' && type.type === 'function') {\n type.type = \"bytes24\";\n }\n if (self.isSimplifiedStructFormat(type)) {\n var structName = Object.keys(type)[0];\n mappedTypes.push(Object.assign(self.mapStructNameAndType(structName), {\n components: self.mapStructToCoderFormat(type[structName])\n }));\n return;\n }\n mappedTypes.push(type);\n });\n return mappedTypes;\n};\n/**\n * Check if type is simplified struct format\n *\n * @method isSimplifiedStructFormat\n * @param {string | Object} type\n * @returns {boolean}\n */\nABICoder.prototype.isSimplifiedStructFormat = function (type) {\n return typeof type === 'object' && typeof type.components === 'undefined' && typeof type.name === 'undefined';\n};\n/**\n * Maps the correct tuple type and name when the simplified format in encode/decodeParameter is used\n *\n * @method mapStructNameAndType\n * @param {string} structName\n * @return {{type: string, name: *}}\n */\nABICoder.prototype.mapStructNameAndType = function (structName) {\n var type = 'tuple';\n if (structName.indexOf('[]') > -1) {\n type = 'tuple[]';\n structName = structName.slice(0, -2);\n }\n return { type: type, name: structName };\n};\n/**\n * Maps the simplified format in to the expected format of the ABICoder\n *\n * @method mapStructToCoderFormat\n * @param {Object} struct\n * @return {Array}\n */\nABICoder.prototype.mapStructToCoderFormat = function (struct) {\n var self = this;\n var components = [];\n Object.keys(struct).forEach(function (key) {\n if (typeof struct[key] === 'object') {\n components.push(Object.assign(self.mapStructNameAndType(key), {\n components: self.mapStructToCoderFormat(struct[key])\n }));\n return;\n }\n components.push({\n name: key,\n type: struct[key]\n });\n });\n return components;\n};\n/**\n * Handle some formatting of params for backwards compatability with Ethers V4\n *\n * @method formatParam\n * @param {String} - type\n * @param {any} - param\n * @return {any} - The formatted param\n */\nABICoder.prototype.formatParam = function (type, param) {\n const paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\n const paramTypeBytesArray = new RegExp(/^bytes([0-9]*)\\[\\]$/);\n const paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\n const paramTypeNumberArray = new RegExp(/^(u?int)([0-9]*)\\[\\]$/);\n // Format BN to string\n if (utils.isBN(param) || utils.isBigNumber(param)) {\n return param.toString(10);\n }\n if (type.match(paramTypeBytesArray) || type.match(paramTypeNumberArray)) {\n return param.map(p => this.formatParam(type.replace('[]', ''), p));\n }\n // Format correct width for u?int[0-9]*\n let match = type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n if (size / 8 < param.length) {\n // pad to correct bit width\n param = utils.leftPad(param, size);\n }\n }\n // Format correct length for bytes[0-9]+\n match = type.match(paramTypeBytes);\n if (match) {\n if (Buffer.isBuffer(param)) {\n param = utils.toHex(param);\n }\n // format to correct length\n let size = parseInt(match[1]);\n if (size) {\n let maxSize = size * 2;\n if (param.substring(0, 2) === '0x') {\n maxSize += 2;\n }\n if (param.length < maxSize) {\n // pad to correct length\n param = utils.rightPad(param, size * 2);\n }\n }\n // format odd-length bytes to even-length\n if (param.length % 2 === 1) {\n param = '0x0' + param.substring(2);\n }\n }\n return param;\n};\n/**\n * Encodes a function call from its json interface and parameters.\n *\n * @method encodeFunctionCall\n * @param {Array} jsonInterface\n * @param {Array} params\n * @return {String} The encoded ABI for this function call\n */\nABICoder.prototype.encodeFunctionCall = function (jsonInterface, params) {\n return this.encodeFunctionSignature(jsonInterface) + this.encodeParameters(jsonInterface.inputs, params).replace('0x', '');\n};\n/**\n * Should be used to decode bytes to plain param\n *\n * @method decodeParameter\n * @param {String} type\n * @param {String} bytes\n * @return {Object} plain param\n */\nABICoder.prototype.decodeParameter = function (type, bytes) {\n return this.decodeParameters([type], bytes)[0];\n};\n/**\n * Should be used to decode list of params\n *\n * @method decodeParameter\n * @param {Array} outputs\n * @param {String} bytes\n * @return {Array} array of plain params\n */\nABICoder.prototype.decodeParameters = function (outputs, bytes) {\n if (outputs.length > 0 && (!bytes || bytes === '0x' || bytes === '0X')) {\n throw new Error('Returned values aren\\'t valid, did it run Out of Gas? ' +\n 'You might also see this error if you are not using the ' +\n 'correct ABI for the contract you are retrieving data from, ' +\n 'requesting data from a block number that does not exist, ' +\n 'or querying a node which is not fully synced.');\n }\n var res = ethersAbiCoder.decode(this.mapTypes(outputs), '0x' + bytes.replace(/0x/i, ''));\n var returnValue = new Result();\n returnValue.__length__ = 0;\n outputs.forEach(function (output, i) {\n var decodedValue = res[returnValue.__length__];\n decodedValue = (decodedValue === '0x') ? null : decodedValue;\n returnValue[i] = decodedValue;\n if (_.isObject(output) && output.name) {\n returnValue[output.name] = decodedValue;\n }\n returnValue.__length__++;\n });\n return returnValue;\n};\n/**\n * Decodes events non- and indexed parameters.\n *\n * @method decodeLog\n * @param {Object} inputs\n * @param {String} data\n * @param {Array} topics\n * @return {Array} array of plain params\n */\nABICoder.prototype.decodeLog = function (inputs, data, topics) {\n var _this = this;\n topics = _.isArray(topics) ? topics : [topics];\n data = data || '';\n var notIndexedInputs = [];\n var indexedParams = [];\n var topicCount = 0;\n // TODO check for anonymous logs?\n inputs.forEach(function (input, i) {\n if (input.indexed) {\n indexedParams[i] = (['bool', 'int', 'uint', 'address', 'fixed', 'ufixed'].find(function (staticType) {\n return input.type.indexOf(staticType) !== -1;\n })) ? _this.decodeParameter(input.type, topics[topicCount]) : topics[topicCount];\n topicCount++;\n }\n else {\n notIndexedInputs[i] = input;\n }\n });\n var nonIndexedData = data;\n var notIndexedParams = (nonIndexedData) ? this.decodeParameters(notIndexedInputs, nonIndexedData) : [];\n var returnValue = new Result();\n returnValue.__length__ = 0;\n inputs.forEach(function (res, i) {\n returnValue[i] = (res.type === 'string') ? '' : null;\n if (typeof notIndexedParams[i] !== 'undefined') {\n returnValue[i] = notIndexedParams[i];\n }\n if (typeof indexedParams[i] !== 'undefined') {\n returnValue[i] = indexedParams[i];\n }\n if (res.name) {\n returnValue[res.name] = returnValue[i];\n }\n returnValue.__length__++;\n });\n return returnValue;\n};\nvar coder = new ABICoder();\nmodule.exports = coder;\n","\"use strict\";\nimport { ConstructorFragment, EventFragment, FormatTypes, Fragment, FunctionFragment, ParamType } from \"./fragments\";\nimport { AbiCoder, defaultAbiCoder } from \"./abi-coder\";\nimport { checkResultErrors, Indexed, Interface, LogDescription, TransactionDescription } from \"./interface\";\nexport { ConstructorFragment, EventFragment, Fragment, FunctionFragment, ParamType, FormatTypes, AbiCoder, defaultAbiCoder, Interface, Indexed, checkResultErrors, LogDescription, TransactionDescription };\n","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","\"use strict\";\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { Reader, Writer } from \"./coders/abstract-coder\";\nimport { AddressCoder } from \"./coders/address\";\nimport { ArrayCoder } from \"./coders/array\";\nimport { BooleanCoder } from \"./coders/boolean\";\nimport { BytesCoder } from \"./coders/bytes\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes\";\nimport { NullCoder } from \"./coders/null\";\nimport { NumberCoder } from \"./coders/number\";\nimport { StringCoder } from \"./coders/string\";\nimport { TupleCoder } from \"./coders/tuple\";\nimport { ParamType } from \"./fragments\";\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\nexport class AbiCoder {\n constructor(coerceFunc) {\n logger.checkNew(new.target, AbiCoder);\n defineReadOnly(this, \"coerceFunc\", coerceFunc || null);\n }\n _getCoder(param) {\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 \"array\":\n return new ArrayCoder(this._getCoder(param.arrayChildren), param.arrayLength, param.name);\n case \"tuple\":\n return new TupleCoder((param.components || []).map((component) => {\n return this._getCoder(component);\n }), 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 }\n _getWordSize() { return 32; }\n _getReader(data) {\n return new Reader(data, this._getWordSize(), this.coerceFunc);\n }\n _getWriter() {\n return new Writer(this._getWordSize());\n }\n encode(types, values) {\n if (types.length !== values.length) {\n logger.throwError(\"types/values length mismatch\", Logger.errors.INVALID_ARGUMENT, {\n count: { types: types.length, values: values.length },\n value: { types: types, values: values }\n });\n }\n const coders = types.map((type) => this._getCoder(ParamType.from(type)));\n const coder = (new TupleCoder(coders, \"_\"));\n const writer = this._getWriter();\n coder.encode(writer, values);\n return writer.data;\n }\n decode(types, data) {\n const coders = types.map((type) => this._getCoder(ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.decode(this._getReader(arrayify(data)));\n }\n}\nexport const defaultAbiCoder = new AbiCoder();\n","\"use strict\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"../_version\";\nconst logger = new Logger(version);\nimport { Coder, Writer } from \"./abstract-coder\";\nimport { AnonymousCoder } from \"./anonymous\";\nexport function pack(writer, coders, values) {\n if (Array.isArray(values)) {\n // do nothing\n }\n else if (values && typeof (values) === \"object\") {\n let arrayValues = [];\n coders.forEach(function (coder) {\n arrayValues.push(values[coder.localName]);\n });\n values = arrayValues;\n }\n else {\n logger.throwArgumentError(\"invalid tuple value\", \"tuple\", values);\n }\n if (coders.length !== values.length) {\n logger.throwArgumentError(\"types/value length mismatch\", \"tuple\", values);\n }\n let staticWriter = new Writer(writer.wordSize);\n let dynamicWriter = new Writer(writer.wordSize);\n let updateFuncs = [];\n coders.forEach((coder, index) => {\n let value = values[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.writeBytes(staticWriter.data);\n length += writer.writeBytes(dynamicWriter.data);\n return length;\n}\nexport function unpack(reader, coders) {\n let values = [];\n // A reader anchored to this base\n let baseReader = reader.subReader(0);\n // The amount of dynamic data read; to consume later to synchronize\n let dynamicLength = 0;\n coders.forEach((coder) => {\n let value = null;\n if (coder.dynamic) {\n let offset = reader.readValue();\n let offsetReader = baseReader.subReader(offset.toNumber());\n try {\n value = coder.decode(offsetReader);\n }\n catch (error) {\n // Cannot recover from this\n if (error.code === Logger.errors.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 dynamicLength += offsetReader.consumed;\n }\n else {\n try {\n value = coder.decode(reader);\n }\n catch (error) {\n // Cannot recover from this\n if (error.code === Logger.errors.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 values.push(value);\n }\n });\n // @TODO: get rid of this an see if it still works?\n // Consume the dynamic components in the main reader\n reader.readBytes(dynamicLength);\n // Add any named parameters (i.e. tuples)\n coders.forEach((coder, index) => {\n let name = coder.localName;\n if (!name) {\n return;\n }\n if (name === \"length\") {\n name = \"_length\";\n }\n if (values[name] != null) {\n return;\n }\n const value = values[index];\n if (value instanceof Error) {\n Object.defineProperty(values, name, {\n get: () => { throw value; }\n });\n }\n else {\n values[name] = value;\n }\n });\n for (let i = 0; i < values.length; i++) {\n const value = values[i];\n if (value instanceof Error) {\n Object.defineProperty(values, i, {\n get: () => { throw value; }\n });\n }\n }\n return Object.freeze(values);\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 this.coder = coder;\n this.length = length;\n }\n encode(writer, value) {\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.checkArgumentCount(count, value.length, \"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.readValue().toNumber();\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","\"use strict\";\nimport { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { Coder } from \"./abstract-coder\";\nexport class DynamicBytesCoder extends Coder {\n constructor(type, localName) {\n super(type, type, localName, true);\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.readValue().toNumber());\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","var superPropBase = require(\"./superPropBase\");\n\nfunction _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n module.exports = _get = Reflect.get;\n } else {\n module.exports = _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}\n\nmodule.exports = _get;","var sha3 = require('js-sha3').keccak_256\nvar uts46 = require('idna-uts46-hx')\n\nfunction namehash (inputName) {\n // Reject empty names:\n var node = ''\n for (var i = 0; i < 32; i++) {\n node += '00'\n }\n\n name = normalize(inputName)\n\n if (name) {\n var labels = name.split('.')\n\n for(var i = labels.length - 1; i >= 0; i--) {\n var labelSha = sha3(labels[i])\n node = sha3(new Buffer(node + labelSha, 'hex'))\n }\n }\n\n return '0x' + node\n}\n\nfunction normalize(name) {\n return name ? uts46.toUnicode(name, {useStd3ASCII: true, transitional: false}) : name\n}\n\nexports.hash = namehash\nexports.normalize = normalize\n","'use strict'\nconst varint = require('varint')\n\nmodule.exports = {\n numberToBuffer,\n bufferToNumber,\n varintBufferEncode,\n varintBufferDecode,\n varintEncode\n}\n\nfunction bufferToNumber (buf) {\n return parseInt(buf.toString('hex'), 16)\n}\n\nfunction numberToBuffer (num) {\n let hexString = num.toString(16)\n if (hexString.length % 2 === 1) {\n hexString = '0' + hexString\n }\n return Buffer.from(hexString, 'hex')\n}\n\nfunction varintBufferEncode (input) {\n return Buffer.from(varint.encode(bufferToNumber(input)))\n}\n\nfunction varintBufferDecode (input) {\n return numberToBuffer(varint.decode(input))\n}\n\nfunction varintEncode (num) {\n return Buffer.from(varint.encode(num))\n}\n","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","'use strict'\n\nconst { Buffer } = require('buffer')\nconst mh = require('multihashes')\nconst multibase = require('multibase')\nconst multicodec = require('multicodec')\nconst codecs = require('multicodec/src/base-table.json')\nconst CIDUtil = require('./cid-util')\nconst withIs = require('class-is')\n\n/**\n * @typedef {Object} SerializedCID\n * @param {string} codec\n * @param {number} version\n * @param {Buffer} multihash\n */\n\n/**\n * Test if the given input is a CID.\n * @function isCID\n * @memberof CID\n * @static\n * @param {any} other\n * @returns {bool}\n */\n\n/**\n * Class representing a CID ``\n * , as defined in [ipld/cid](https://github.com/multiformats/cid).\n * @class CID\n */\nclass CID {\n /**\n * Create a new CID.\n *\n * The algorithm for argument input is roughly:\n * ```\n * if (cid)\n * -> create a copy\n * else if (str)\n * if (1st char is on multibase table) -> CID String\n * else -> bs58 encoded multihash\n * else if (Buffer)\n * if (1st byte is 0 or 1) -> CID\n * else -> multihash\n * else if (Number)\n * -> construct CID by parts\n * ```\n *\n * @param {string|Buffer|CID} version\n * @param {string} [codec]\n * @param {Buffer} [multihash]\n * @param {string} [multibaseName]\n *\n * @example\n * new CID(, , , )\n * new CID()\n * new CID()\n * new CID()\n * new CID()\n * new CID()\n */\n constructor (version, codec, multihash, multibaseName) {\n if (_CID.isCID(version)) {\n // version is an exising CID instance\n const cid = version\n this.version = cid.version\n this.codec = cid.codec\n this.multihash = Buffer.from(cid.multihash)\n // Default guard for when a CID < 0.7 is passed with no multibaseName\n this.multibaseName = cid.multibaseName || (cid.version === 0 ? 'base58btc' : 'base32')\n return\n }\n\n if (typeof version === 'string') {\n // e.g. 'base32' or false\n const baseName = multibase.isEncoded(version)\n if (baseName) {\n // version is a CID String encoded with multibase, so v1\n const cid = multibase.decode(version)\n this.version = parseInt(cid.slice(0, 1).toString('hex'), 16)\n this.codec = multicodec.getCodec(cid.slice(1))\n this.multihash = multicodec.rmPrefix(cid.slice(1))\n this.multibaseName = baseName\n } else {\n // version is a base58btc string multihash, so v0\n this.version = 0\n this.codec = 'dag-pb'\n this.multihash = mh.fromB58String(version)\n this.multibaseName = 'base58btc'\n }\n CID.validateCID(this)\n Object.defineProperty(this, 'string', { value: version })\n return\n }\n\n if (Buffer.isBuffer(version)) {\n const firstByte = version.slice(0, 1)\n const v = parseInt(firstByte.toString('hex'), 16)\n if (v === 1) {\n // version is a CID buffer\n const cid = version\n this.version = v\n this.codec = multicodec.getCodec(cid.slice(1))\n this.multihash = multicodec.rmPrefix(cid.slice(1))\n this.multibaseName = 'base32'\n } else {\n // version is a raw multihash buffer, so v0\n this.version = 0\n this.codec = 'dag-pb'\n this.multihash = version\n this.multibaseName = 'base58btc'\n }\n CID.validateCID(this)\n return\n }\n\n // otherwise, assemble the CID from the parameters\n\n /**\n * @type {number}\n */\n this.version = version\n\n /**\n * @type {string}\n */\n this.codec = codec\n\n /**\n * @type {Buffer}\n */\n this.multihash = multihash\n\n /**\n * @type {string}\n */\n this.multibaseName = multibaseName || (version === 0 ? 'base58btc' : 'base32')\n\n CID.validateCID(this)\n }\n\n /**\n * The CID as a `Buffer`\n *\n * @return {Buffer}\n * @readonly\n *\n * @memberOf CID\n */\n get buffer () {\n let buffer = this._buffer\n\n if (!buffer) {\n if (this.version === 0) {\n buffer = this.multihash\n } else if (this.version === 1) {\n buffer = Buffer.concat([\n Buffer.from('01', 'hex'),\n multicodec.getCodeVarint(this.codec),\n this.multihash\n ])\n } else {\n throw new Error('unsupported version')\n }\n\n // Cache this buffer so it doesn't have to be recreated\n Object.defineProperty(this, '_buffer', { value: buffer })\n }\n\n return buffer\n }\n\n /**\n * Get the prefix of the CID.\n *\n * @returns {Buffer}\n * @readonly\n */\n get prefix () {\n return Buffer.concat([\n Buffer.from(`0${this.version}`, 'hex'),\n multicodec.getCodeVarint(this.codec),\n mh.prefix(this.multihash)\n ])\n }\n\n /**\n * Convert to a CID of version `0`.\n *\n * @returns {CID}\n */\n toV0 () {\n if (this.codec !== 'dag-pb') {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n const { name, length } = mh.decode(this.multihash)\n\n if (name !== 'sha2-256') {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n if (length !== 32) {\n throw new Error('Cannot convert non 32 byte multihash CID to CIDv0')\n }\n\n return new _CID(0, this.codec, this.multihash)\n }\n\n /**\n * Convert to a CID of version `1`.\n *\n * @returns {CID}\n */\n toV1 () {\n return new _CID(1, this.codec, this.multihash)\n }\n\n /**\n * Encode the CID into a string.\n *\n * @param {string} [base=this.multibaseName] - Base encoding to use.\n * @returns {string}\n */\n toBaseEncodedString (base = this.multibaseName) {\n if (this.string && base === this.multibaseName) {\n return this.string\n }\n let str = null\n if (this.version === 0) {\n if (base !== 'base58btc') {\n throw new Error('not supported with CIDv0, to support different bases, please migrate the instance do CIDv1, you can do that through cid.toV1()')\n }\n str = mh.toB58String(this.multihash)\n } else if (this.version === 1) {\n str = multibase.encode(base, this.buffer).toString()\n } else {\n throw new Error('unsupported version')\n }\n if (base === this.multibaseName) {\n // cache the string value\n Object.defineProperty(this, 'string', { value: str })\n }\n return str\n }\n\n /**\n * CID(QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n)\n *\n * @returns {String}\n */\n [Symbol.for('nodejs.util.inspect.custom')] () {\n return 'CID(' + this.toString() + ')'\n }\n\n toString (base) {\n return this.toBaseEncodedString(base)\n }\n\n /**\n * Serialize to a plain object.\n *\n * @returns {SerializedCID}\n */\n toJSON () {\n return {\n codec: this.codec,\n version: this.version,\n hash: this.multihash\n }\n }\n\n /**\n * Compare equality with another CID.\n *\n * @param {CID} other\n * @returns {bool}\n */\n equals (other) {\n return this.codec === other.codec &&\n this.version === other.version &&\n this.multihash.equals(other.multihash)\n }\n\n /**\n * Test if the given input is a valid CID object.\n * Throws if it is not.\n *\n * @param {any} other\n * @returns {void}\n */\n static validateCID (other) {\n const errorMsg = CIDUtil.checkCIDComponents(other)\n if (errorMsg) {\n throw new Error(errorMsg)\n }\n }\n}\n\nconst _CID = withIs(CID, {\n className: 'CID',\n symbolName: '@ipld/js-cid/CID'\n})\n\n_CID.codecs = codecs\n\nmodule.exports = _CID\n","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n// @ts-ignore\nvar _Buffer = require('safe-buffer').Buffer\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (Array.isArray(source) || source instanceof Uint8Array) { source = _Buffer.from(source) }\n if (!_Buffer.isBuffer(source)) { throw new TypeError('Expected Buffer') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return _Buffer.alloc(0) }\n var psz = 0\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = _Buffer.allocUnsafe(zeroes + (size - it4))\n vch.fill(0x00, 0, zeroes)\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n","'use strict'\nconst varint = require('varint')\nconst { Buffer } = require('buffer')\n\nmodule.exports = {\n numberToBuffer,\n bufferToNumber,\n varintBufferEncode,\n varintBufferDecode,\n varintEncode\n}\n\nfunction bufferToNumber (buf) {\n return parseInt(buf.toString('hex'), 16)\n}\n\nfunction numberToBuffer (num) {\n let hexString = num.toString(16)\n if (hexString.length % 2 === 1) {\n hexString = '0' + hexString\n }\n return Buffer.from(hexString, 'hex')\n}\n\nfunction varintBufferEncode (input) {\n return Buffer.from(varint.encode(bufferToNumber(input)))\n}\n\nfunction varintBufferDecode (input) {\n return numberToBuffer(varint.decode(input))\n}\n\nfunction varintEncode (num) {\n return Buffer.from(varint.encode(num))\n}\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar core = require('web3-core');\nvar Method = require('web3-core-method');\nvar utils = require('web3-utils');\nvar Net = require('web3-net');\nvar formatters = require('web3-core-helpers').formatters;\nvar Personal = function Personal() {\n var _this = this;\n // sets _requestmanager\n core.packageInit(this, arguments);\n this.net = new Net(this);\n var defaultAccount = null;\n var defaultBlock = 'latest';\n Object.defineProperty(this, 'defaultAccount', {\n get: function () {\n return defaultAccount;\n },\n set: function (val) {\n if (val) {\n defaultAccount = utils.toChecksumAddress(formatters.inputAddressFormatter(val));\n }\n // update defaultBlock\n methods.forEach(function (method) {\n method.defaultAccount = defaultAccount;\n });\n return val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultBlock', {\n get: function () {\n return defaultBlock;\n },\n set: function (val) {\n defaultBlock = val;\n // update defaultBlock\n methods.forEach(function (method) {\n method.defaultBlock = defaultBlock;\n });\n return val;\n },\n enumerable: true\n });\n var methods = [\n new Method({\n name: 'getAccounts',\n call: 'personal_listAccounts',\n params: 0,\n outputFormatter: utils.toChecksumAddress\n }),\n new Method({\n name: 'newAccount',\n call: 'personal_newAccount',\n params: 1,\n inputFormatter: [null],\n outputFormatter: utils.toChecksumAddress\n }),\n new Method({\n name: 'unlockAccount',\n call: 'personal_unlockAccount',\n params: 3,\n inputFormatter: [formatters.inputAddressFormatter, null, null]\n }),\n new Method({\n name: 'lockAccount',\n call: 'personal_lockAccount',\n params: 1,\n inputFormatter: [formatters.inputAddressFormatter]\n }),\n new Method({\n name: 'importRawKey',\n call: 'personal_importRawKey',\n params: 2\n }),\n new Method({\n name: 'sendTransaction',\n call: 'personal_sendTransaction',\n params: 2,\n inputFormatter: [formatters.inputTransactionFormatter, null]\n }),\n new Method({\n name: 'signTransaction',\n call: 'personal_signTransaction',\n params: 2,\n inputFormatter: [formatters.inputTransactionFormatter, null]\n }),\n new Method({\n name: 'sign',\n call: 'personal_sign',\n params: 3,\n inputFormatter: [formatters.inputSignFormatter, formatters.inputAddressFormatter, null]\n }),\n new Method({\n name: 'ecRecover',\n call: 'personal_ecRecover',\n params: 2,\n inputFormatter: [formatters.inputSignFormatter, null]\n })\n ];\n methods.forEach(function (method) {\n method.attachToObject(_this);\n method.setRequestManager(_this._requestManager);\n method.defaultBlock = _this.defaultBlock;\n method.defaultAccount = _this.defaultAccount;\n });\n};\ncore.addProviders(Personal);\nmodule.exports = Personal;\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nfunction checkBuffer (buf, name) {\n if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) {\n throw new TypeError(name + ' must be a buffer or string')\n }\n}\n\nmodule.exports = function (password, salt, iterations, keylen) {\n checkBuffer(password, 'Password')\n checkBuffer(salt, 'Salt')\n\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n defaultEncoding = 'utf-8'\n} else {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n}\nmodule.exports = defaultEncoding\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar Buffer = require('safe-buffer').Buffer\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(password, salt, iterations, keylen)\n\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","var inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n var res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n var res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!(item instanceof EncoderBuffer))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = new Buffer(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n var res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n var value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!(data instanceof base.DecoderBuffer))\n data = new base.DecoderBuffer(data, options);\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n var state = buffer.save();\n var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n var decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n var len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n var state = buffer.save();\n var res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n while (true) {\n var tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n var len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n var res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len)\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n var result = [];\n while (!buffer.isEmpty()) {\n var possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n var res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n var unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n var raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n var str = '';\n for (var i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n var numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n var printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n var result;\n var identifiers = [];\n var ident = 0;\n while (!buffer.isEmpty()) {\n var subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n var first = (identifiers[0] / 40) | 0;\n var second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n var tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n var str = buffer.raw().toString();\n if (tag === 'gentime') {\n var year = str.slice(0, 4) | 0;\n var mon = str.slice(4, 6) | 0;\n var day = str.slice(6, 8) | 0;\n var hour = str.slice(8, 10) | 0;\n var min = str.slice(10, 12) | 0;\n var sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n var year = str.slice(0, 2) | 0;\n var mon = str.slice(2, 4) | 0;\n var day = str.slice(4, 6) | 0;\n var hour = str.slice(6, 8) | 0;\n var min = str.slice(8, 10) | 0;\n var sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n var res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n var raw = buffer.raw();\n var res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n var tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n var cls = der.tagClass[tag >> 6];\n var primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n var oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n var tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n var len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n var num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (var i = 0; i < num; i++) {\n len <<= 8;\n var j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n var header = new Buffer(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n var lenOctets = 1;\n for (var i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n var header = new Buffer(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n var buf = new Buffer(str.length * 2);\n for (var i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s\\.]+/g);\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n var size = 0;\n for (var i = 0; i < id.length; i++) {\n var ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n var objid = new Buffer(size);\n var offset = objid.length - 1;\n for (var i = id.length - 1; i >= 0; i--) {\n var ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n var str;\n var date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n var numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = new Buffer(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n var size = num.length;\n if (num.length === 0)\n size++;\n\n var out = new Buffer(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n var size = 1;\n for (var i = num; i >= 0x100; i >>= 8)\n size++;\n\n var out = new Array(size);\n for (var i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n var state = this._baseState;\n var i;\n if (state['default'] === null)\n return false;\n\n var data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n var res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","// The RLP format\n// Serialization and deserialization for the BytesTree type, under the following grammar:\n// | First byte | Meaning |\n// | ---------- | -------------------------------------------------------------------------- |\n// | 0 to 127 | HEX(leaf) |\n// | 128 to 183 | HEX(length_of_leaf + 128) + HEX(leaf) |\n// | 184 to 191 | HEX(length_of_length_of_leaf + 128 + 55) + HEX(length_of_leaf) + HEX(leaf) |\n// | 192 to 247 | HEX(length_of_node + 192) + HEX(node) |\n// | 248 to 255 | HEX(length_of_length_of_node + 128 + 55) + HEX(length_of_node) + HEX(node) |\n\nconst encode = tree => {\n const padEven = str => str.length % 2 === 0 ? str : \"0\" + str;\n\n const uint = num => padEven(num.toString(16));\n\n const length = (len, add) => len < 56 ? uint(add + len) : uint(add + uint(len).length / 2 + 55) + uint(len);\n\n const dataTree = tree => {\n if (typeof tree === \"string\") {\n const hex = tree.slice(2);\n const pre = hex.length != 2 || hex >= \"80\" ? length(hex.length / 2, 128) : \"\";\n return pre + hex;\n } else {\n const hex = tree.map(dataTree).join(\"\");\n const pre = length(hex.length / 2, 192);\n return pre + hex;\n }\n };\n\n return \"0x\" + dataTree(tree);\n};\n\nconst decode = hex => {\n let i = 2;\n\n const parseTree = () => {\n if (i >= hex.length) throw \"\";\n const head = hex.slice(i, i + 2);\n return head < \"80\" ? (i += 2, \"0x\" + head) : head < \"c0\" ? parseHex() : parseList();\n };\n\n const parseLength = () => {\n const len = parseInt(hex.slice(i, i += 2), 16) % 64;\n return len < 56 ? len : parseInt(hex.slice(i, i += (len - 55) * 2), 16);\n };\n\n const parseHex = () => {\n const len = parseLength();\n return \"0x\" + hex.slice(i, i += len * 2);\n };\n\n const parseList = () => {\n const lim = parseLength() * 2 + i;\n let list = [];\n while (i < lim) list.push(parseTree());\n return list;\n };\n\n try {\n return parseTree();\n } catch (e) {\n return [];\n }\n};\n\nmodule.exports = { encode, decode };","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ethereumjs_util_1 = require(\"ethereumjs-util\");\nvar ethereumjs_common_1 = require(\"ethereumjs-common\");\nvar buffer_1 = require(\"buffer\");\n// secp256k1n/2\nvar N_DIV_2 = new ethereumjs_util_1.BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16);\n/**\n * An Ethereum transaction.\n */\nvar Transaction = /** @class */ (function () {\n /**\n * Creates a new transaction from an object with its fields' values.\n *\n * @param data - A transaction can be initialized with its rlp representation, an array containing\n * the value of its fields in order, or an object containing them by name.\n *\n * @param opts - The transaction's options, used to indicate the chain and hardfork the\n * transactions belongs to.\n *\n * @note Transaction objects implement EIP155 by default. To disable it, use the constructor's\n * second parameter to set a chain and hardfork before EIP155 activation (i.e. before Spurious\n * Dragon.)\n *\n * @example\n * ```js\n * const txData = {\n * nonce: '0x00',\n * gasPrice: '0x09184e72a000',\n * gasLimit: '0x2710',\n * to: '0x0000000000000000000000000000000000000000',\n * value: '0x00',\n * data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057',\n * v: '0x1c',\n * r: '0x5e1d3a76fbf824220eafc8c79ad578ad2b67d01b0c2425eb1f1347e8f50882ab',\n * s: '0x5bd428537f05f9830e93792f90ea6a3e2d1ee84952dd96edbae9f658f831ab13'\n * };\n * const tx = new Transaction(txData);\n * ```\n */\n function Transaction(data, opts) {\n if (data === void 0) { data = {}; }\n if (opts === void 0) { opts = {}; }\n // instantiate Common class instance based on passed options\n if (opts.common) {\n if (opts.chain || opts.hardfork) {\n throw new Error('Instantiation with both opts.common, and opts.chain and opts.hardfork parameter not allowed!');\n }\n this._common = opts.common;\n }\n else {\n var chain = opts.chain ? opts.chain : 'mainnet';\n var hardfork = opts.hardfork ? opts.hardfork : 'petersburg';\n this._common = new ethereumjs_common_1.default(chain, hardfork);\n }\n // Define Properties\n var fields = [\n {\n name: 'nonce',\n length: 32,\n allowLess: true,\n default: new buffer_1.Buffer([]),\n },\n {\n name: 'gasPrice',\n length: 32,\n allowLess: true,\n default: new buffer_1.Buffer([]),\n },\n {\n name: 'gasLimit',\n alias: 'gas',\n length: 32,\n allowLess: true,\n default: new buffer_1.Buffer([]),\n },\n {\n name: 'to',\n allowZero: true,\n length: 20,\n default: new buffer_1.Buffer([]),\n },\n {\n name: 'value',\n length: 32,\n allowLess: true,\n default: new buffer_1.Buffer([]),\n },\n {\n name: 'data',\n alias: 'input',\n allowZero: true,\n default: new buffer_1.Buffer([]),\n },\n {\n name: 'v',\n allowZero: true,\n default: new buffer_1.Buffer([]),\n },\n {\n name: 'r',\n length: 32,\n allowZero: true,\n allowLess: true,\n default: new buffer_1.Buffer([]),\n },\n {\n name: 's',\n length: 32,\n allowZero: true,\n allowLess: true,\n default: new buffer_1.Buffer([]),\n },\n ];\n // attached serialize\n ethereumjs_util_1.defineProperties(this, fields, data);\n /**\n * @property {Buffer} from (read only) sender address of this transaction, mathematically derived from other parameters.\n * @name from\n * @memberof Transaction\n */\n Object.defineProperty(this, 'from', {\n enumerable: true,\n configurable: true,\n get: this.getSenderAddress.bind(this),\n });\n this._validateV(this.v);\n this._overrideVSetterWithValidation();\n }\n /**\n * If the tx's `to` is to the creation address\n */\n Transaction.prototype.toCreationAddress = function () {\n return this.to.toString('hex') === '';\n };\n /**\n * Computes a sha3-256 hash of the serialized tx\n * @param includeSignature - Whether or not to include the signature\n */\n Transaction.prototype.hash = function (includeSignature) {\n if (includeSignature === void 0) { includeSignature = true; }\n var items;\n if (includeSignature) {\n items = this.raw;\n }\n else {\n if (this._implementsEIP155()) {\n items = this.raw.slice(0, 6).concat([\n ethereumjs_util_1.toBuffer(this.getChainId()),\n // TODO: stripping zeros should probably be a responsibility of the rlp module\n ethereumjs_util_1.stripZeros(ethereumjs_util_1.toBuffer(0)),\n ethereumjs_util_1.stripZeros(ethereumjs_util_1.toBuffer(0)),\n ]);\n }\n else {\n items = this.raw.slice(0, 6);\n }\n }\n // create hash\n return ethereumjs_util_1.rlphash(items);\n };\n /**\n * returns chain ID\n */\n Transaction.prototype.getChainId = function () {\n return this._common.chainId();\n };\n /**\n * returns the sender's address\n */\n Transaction.prototype.getSenderAddress = function () {\n if (this._from) {\n return this._from;\n }\n var pubkey = this.getSenderPublicKey();\n this._from = ethereumjs_util_1.publicToAddress(pubkey);\n return this._from;\n };\n /**\n * returns the public key of the sender\n */\n Transaction.prototype.getSenderPublicKey = function () {\n if (!this.verifySignature()) {\n throw new Error('Invalid Signature');\n }\n // If the signature was verified successfully the _senderPubKey field is defined\n return this._senderPubKey;\n };\n /**\n * Determines if the signature is valid\n */\n Transaction.prototype.verifySignature = function () {\n var msgHash = this.hash(false);\n // All transaction signatures whose s-value is greater than secp256k1n/2 are considered invalid.\n if (this._common.gteHardfork('homestead') && new ethereumjs_util_1.BN(this.s).cmp(N_DIV_2) === 1) {\n return false;\n }\n try {\n var v = ethereumjs_util_1.bufferToInt(this.v);\n var useChainIdWhileRecoveringPubKey = v >= this.getChainId() * 2 + 35 && this._common.gteHardfork('spuriousDragon');\n this._senderPubKey = ethereumjs_util_1.ecrecover(msgHash, v, this.r, this.s, useChainIdWhileRecoveringPubKey ? this.getChainId() : undefined);\n }\n catch (e) {\n return false;\n }\n return !!this._senderPubKey;\n };\n /**\n * sign a transaction with a given private key\n * @param privateKey - Must be 32 bytes in length\n */\n Transaction.prototype.sign = function (privateKey) {\n // We clear any previous signature before signing it. Otherwise, _implementsEIP155's can give\n // different results if this tx was already signed.\n this.v = new buffer_1.Buffer([]);\n this.s = new buffer_1.Buffer([]);\n this.r = new buffer_1.Buffer([]);\n var msgHash = this.hash(false);\n var sig = ethereumjs_util_1.ecsign(msgHash, privateKey);\n if (this._implementsEIP155()) {\n sig.v += this.getChainId() * 2 + 8;\n }\n Object.assign(this, sig);\n };\n /**\n * The amount of gas paid for the data in this tx\n */\n Transaction.prototype.getDataFee = function () {\n var data = this.raw[5];\n var cost = new ethereumjs_util_1.BN(0);\n for (var i = 0; i < data.length; i++) {\n data[i] === 0\n ? cost.iaddn(this._common.param('gasPrices', 'txDataZero'))\n : cost.iaddn(this._common.param('gasPrices', 'txDataNonZero'));\n }\n return cost;\n };\n /**\n * the minimum amount of gas the tx must have (DataFee + TxFee + Creation Fee)\n */\n Transaction.prototype.getBaseFee = function () {\n var fee = this.getDataFee().iaddn(this._common.param('gasPrices', 'tx'));\n if (this._common.gteHardfork('homestead') && this.toCreationAddress()) {\n fee.iaddn(this._common.param('gasPrices', 'txCreation'));\n }\n return fee;\n };\n /**\n * the up front amount that an account must have for this transaction to be valid\n */\n Transaction.prototype.getUpfrontCost = function () {\n return new ethereumjs_util_1.BN(this.gasLimit).imul(new ethereumjs_util_1.BN(this.gasPrice)).iadd(new ethereumjs_util_1.BN(this.value));\n };\n Transaction.prototype.validate = function (stringError) {\n if (stringError === void 0) { stringError = false; }\n var errors = [];\n if (!this.verifySignature()) {\n errors.push('Invalid Signature');\n }\n if (this.getBaseFee().cmp(new ethereumjs_util_1.BN(this.gasLimit)) > 0) {\n errors.push([\"gas limit is too low. Need at least \" + this.getBaseFee()]);\n }\n if (stringError === false) {\n return errors.length === 0;\n }\n else {\n return errors.join(' ');\n }\n };\n /**\n * Returns the rlp encoding of the transaction\n */\n Transaction.prototype.serialize = function () {\n // Note: This never gets executed, defineProperties overwrites it.\n return ethereumjs_util_1.rlp.encode(this.raw);\n };\n /**\n * Returns the transaction in JSON format\n * @see {@link https://github.com/ethereumjs/ethereumjs-util/blob/master/docs/index.md#defineproperties|ethereumjs-util}\n */\n Transaction.prototype.toJSON = function (labels) {\n if (labels === void 0) { labels = false; }\n // Note: This never gets executed, defineProperties overwrites it.\n return {};\n };\n Transaction.prototype._validateV = function (v) {\n if (v === undefined || v.length === 0) {\n return;\n }\n if (!this._common.gteHardfork('spuriousDragon')) {\n return;\n }\n var vInt = ethereumjs_util_1.bufferToInt(v);\n if (vInt === 27 || vInt === 28) {\n return;\n }\n var isValidEIP155V = vInt === this.getChainId() * 2 + 35 || vInt === this.getChainId() * 2 + 36;\n if (!isValidEIP155V) {\n throw new Error(\"Incompatible EIP155-based V \" + vInt + \" and chain id \" + this.getChainId() + \". See the second parameter of the Transaction constructor to set the chain id.\");\n }\n };\n Transaction.prototype._isSigned = function () {\n return this.v.length > 0 && this.r.length > 0 && this.s.length > 0;\n };\n Transaction.prototype._overrideVSetterWithValidation = function () {\n var _this = this;\n var vDescriptor = Object.getOwnPropertyDescriptor(this, 'v');\n Object.defineProperty(this, 'v', __assign({}, vDescriptor, { set: function (v) {\n if (v !== undefined) {\n _this._validateV(ethereumjs_util_1.toBuffer(v));\n }\n vDescriptor.set(v);\n } }));\n };\n Transaction.prototype._implementsEIP155 = function () {\n var onEIP155BlockOrLater = this._common.gteHardfork('spuriousDragon');\n if (!this._isSigned()) {\n // We sign with EIP155 all unsigned transactions after spuriousDragon\n return onEIP155BlockOrLater;\n }\n // EIP155 spec:\n // If block.number >= 2,675,000 and v = CHAIN_ID * 2 + 35 or v = CHAIN_ID * 2 + 36, then when computing\n // the hash of a transaction for purposes of signing or recovering, instead of hashing only the first six\n // elements (i.e. nonce, gasprice, startgas, to, value, data), hash nine elements, with v replaced by\n // CHAIN_ID, r = 0 and s = 0.\n var v = ethereumjs_util_1.bufferToInt(this.v);\n var vAndChainIdMeetEIP155Conditions = v === this.getChainId() * 2 + 35 || v === this.getChainId() * 2 + 36;\n return vAndChainIdMeetEIP155Conditions && onEIP155BlockOrLater;\n };\n return Transaction;\n}());\nexports.default = Transaction;\n//# sourceMappingURL=transaction.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar BN = require(\"bn.js\");\n/**\n * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP\n * This function takes in a data, convert it to buffer if not, and a length for recursion\n * @param input - will be converted to buffer\n * @returns returns buffer of encoded data\n **/\nfunction encode(input) {\n if (Array.isArray(input)) {\n var output = [];\n for (var i = 0; i < input.length; i++) {\n output.push(encode(input[i]));\n }\n var buf = Buffer.concat(output);\n return Buffer.concat([encodeLength(buf.length, 192), buf]);\n }\n else {\n var inputBuf = toBuffer(input);\n return inputBuf.length === 1 && inputBuf[0] < 128\n ? inputBuf\n : Buffer.concat([encodeLength(inputBuf.length, 128), inputBuf]);\n }\n}\nexports.encode = encode;\n/**\n * Parse integers. Check if there is no leading zeros\n * @param v The value to parse\n * @param base The base to parse the integer into\n */\nfunction safeParseInt(v, base) {\n if (v.slice(0, 2) === '00') {\n throw new Error('invalid RLP: extra zeros');\n }\n return parseInt(v, base);\n}\nfunction encodeLength(len, offset) {\n if (len < 56) {\n return Buffer.from([len + offset]);\n }\n else {\n var hexLength = intToHex(len);\n var lLength = hexLength.length / 2;\n var firstByte = intToHex(offset + 55 + lLength);\n return Buffer.from(firstByte + hexLength, 'hex');\n }\n}\nfunction decode(input, stream) {\n if (stream === void 0) { stream = false; }\n if (!input || input.length === 0) {\n return Buffer.from([]);\n }\n var inputBuffer = toBuffer(input);\n var decoded = _decode(inputBuffer);\n if (stream) {\n return decoded;\n }\n if (decoded.remainder.length !== 0) {\n throw new Error('invalid remainder');\n }\n return decoded.data;\n}\nexports.decode = decode;\n/**\n * Get the length of the RLP input\n * @param input\n * @returns The length of the input or an empty Buffer if no input\n */\nfunction getLength(input) {\n if (!input || input.length === 0) {\n return Buffer.from([]);\n }\n var inputBuffer = toBuffer(input);\n var firstByte = inputBuffer[0];\n if (firstByte <= 0x7f) {\n return inputBuffer.length;\n }\n else if (firstByte <= 0xb7) {\n return firstByte - 0x7f;\n }\n else if (firstByte <= 0xbf) {\n return firstByte - 0xb6;\n }\n else if (firstByte <= 0xf7) {\n // a list between 0-55 bytes long\n return firstByte - 0xbf;\n }\n else {\n // a list over 55 bytes long\n var llength = firstByte - 0xf6;\n var length = safeParseInt(inputBuffer.slice(1, llength).toString('hex'), 16);\n return llength + length;\n }\n}\nexports.getLength = getLength;\n/** Decode an input with RLP */\nfunction _decode(input) {\n var length, llength, data, innerRemainder, d;\n var decoded = [];\n var firstByte = input[0];\n if (firstByte <= 0x7f) {\n // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.\n return {\n data: input.slice(0, 1),\n remainder: input.slice(1),\n };\n }\n else if (firstByte <= 0xb7) {\n // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string\n // The range of the first byte is [0x80, 0xb7]\n length = firstByte - 0x7f;\n // set 0x80 null to 0\n if (firstByte === 0x80) {\n data = Buffer.from([]);\n }\n else {\n data = input.slice(1, length);\n }\n if (length === 2 && data[0] < 0x80) {\n throw new Error('invalid rlp encoding: byte must be less 0x80');\n }\n return {\n data: data,\n remainder: input.slice(length),\n };\n }\n else if (firstByte <= 0xbf) {\n llength = firstByte - 0xb6;\n length = safeParseInt(input.slice(1, llength).toString('hex'), 16);\n data = input.slice(llength, length + llength);\n if (data.length < length) {\n throw new Error('invalid RLP');\n }\n return {\n data: data,\n remainder: input.slice(length + llength),\n };\n }\n else if (firstByte <= 0xf7) {\n // a list between 0-55 bytes long\n length = firstByte - 0xbf;\n innerRemainder = input.slice(1, length);\n while (innerRemainder.length) {\n d = _decode(innerRemainder);\n decoded.push(d.data);\n innerRemainder = d.remainder;\n }\n return {\n data: decoded,\n remainder: input.slice(length),\n };\n }\n else {\n // a list over 55 bytes long\n llength = firstByte - 0xf6;\n length = safeParseInt(input.slice(1, llength).toString('hex'), 16);\n var totalLength = llength + length;\n if (totalLength > input.length) {\n throw new Error('invalid rlp: total length is larger than the data');\n }\n innerRemainder = input.slice(llength, totalLength);\n if (innerRemainder.length === 0) {\n throw new Error('invalid rlp, List has a invalid length');\n }\n while (innerRemainder.length) {\n d = _decode(innerRemainder);\n decoded.push(d.data);\n innerRemainder = d.remainder;\n }\n return {\n data: decoded,\n remainder: input.slice(totalLength),\n };\n }\n}\n/** Check if a string is prefixed by 0x */\nfunction isHexPrefixed(str) {\n return str.slice(0, 2) === '0x';\n}\n/** Removes 0x from a given String */\nfunction stripHexPrefix(str) {\n if (typeof str !== 'string') {\n return str;\n }\n return isHexPrefixed(str) ? str.slice(2) : str;\n}\n/** Transform an integer into its hexadecimal value */\nfunction intToHex(integer) {\n if (integer < 0) {\n throw new Error('Invalid integer as argument, must be unsigned!');\n }\n var hex = integer.toString(16);\n return hex.length % 2 ? \"0\" + hex : hex;\n}\n/** Pad a string to be even */\nfunction padToEven(a) {\n return a.length % 2 ? \"0\" + a : a;\n}\n/** Transform an integer into a Buffer */\nfunction intToBuffer(integer) {\n var hex = intToHex(integer);\n return Buffer.from(hex, 'hex');\n}\n/** Transform anything into a Buffer */\nfunction toBuffer(v) {\n if (!Buffer.isBuffer(v)) {\n if (typeof v === 'string') {\n if (isHexPrefixed(v)) {\n return Buffer.from(padToEven(stripHexPrefix(v)), 'hex');\n }\n else {\n return Buffer.from(v);\n }\n }\n else if (typeof v === 'number') {\n if (!v) {\n return Buffer.from([]);\n }\n else {\n return intToBuffer(v);\n }\n }\n else if (v === null || v === undefined) {\n return Buffer.from([]);\n }\n else if (v instanceof Uint8Array) {\n return Buffer.from(v);\n }\n else if (BN.isBN(v)) {\n // converts a BN to a Buffer\n return Buffer.from(v.toArray());\n }\n else {\n throw new Error('invalid type');\n }\n }\n return v;\n}\n//# sourceMappingURL=index.js.map","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar ES = require('es-abstract/es5');\nvar replace = bind.call(Function.call, String.prototype.replace);\n\n/* eslint-disable no-control-regex */\nvar leftWhitespace = /^[\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF]+/;\nvar rightWhitespace = /[\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF]+$/;\n/* eslint-enable no-control-regex */\n\nmodule.exports = function trim() {\n\tvar S = ES.ToString(ES.CheckObjectCoercible(this));\n\treturn replace(replace(S, leftWhitespace, ''), rightWhitespace, '');\n};\n","'use strict';\n\n/* globals\n\tSet,\n\tMap,\n\tWeakSet,\n\tWeakMap,\n\n\tPromise,\n\n\tSymbol,\n\tProxy,\n\n\tAtomics,\n\tSharedArrayBuffer,\n\n\tArrayBuffer,\n\tDataView,\n\tUint8Array,\n\tFloat32Array,\n\tFloat64Array,\n\tInt8Array,\n\tInt16Array,\n\tInt32Array,\n\tUint8ClampedArray,\n\tUint16Array,\n\tUint32Array,\n*/\n\nvar undefined; // eslint-disable-line no-shadow-restricted-names\n\nvar ThrowTypeError = Object.getOwnPropertyDescriptor\n\t? (function () { return Object.getOwnPropertyDescriptor(arguments, 'callee').get; }())\n\t: function () { throw new TypeError(); };\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar generator; // = function * () {};\nvar generatorFunction = generator ? getProto(generator) : undefined;\nvar asyncFn; // async function() {};\nvar asyncFunction = asyncFn ? asyncFn.constructor : undefined;\nvar asyncGen; // async function * () {};\nvar asyncGenFunction = asyncGen ? getProto(asyncGen) : undefined;\nvar asyncGenIterator = asyncGen ? asyncGen() : undefined;\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'$ %Array%': Array,\n\t'$ %ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'$ %ArrayBufferPrototype%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer.prototype,\n\t'$ %ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'$ %ArrayPrototype%': Array.prototype,\n\t'$ %ArrayProto_entries%': Array.prototype.entries,\n\t'$ %ArrayProto_forEach%': Array.prototype.forEach,\n\t'$ %ArrayProto_keys%': Array.prototype.keys,\n\t'$ %ArrayProto_values%': Array.prototype.values,\n\t'$ %AsyncFromSyncIteratorPrototype%': undefined,\n\t'$ %AsyncFunction%': asyncFunction,\n\t'$ %AsyncFunctionPrototype%': asyncFunction ? asyncFunction.prototype : undefined,\n\t'$ %AsyncGenerator%': asyncGen ? getProto(asyncGenIterator) : undefined,\n\t'$ %AsyncGeneratorFunction%': asyncGenFunction,\n\t'$ %AsyncGeneratorPrototype%': asyncGenFunction ? asyncGenFunction.prototype : undefined,\n\t'$ %AsyncIteratorPrototype%': asyncGenIterator && hasSymbols && Symbol.asyncIterator ? asyncGenIterator[Symbol.asyncIterator]() : undefined,\n\t'$ %Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'$ %Boolean%': Boolean,\n\t'$ %BooleanPrototype%': Boolean.prototype,\n\t'$ %DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'$ %DataViewPrototype%': typeof DataView === 'undefined' ? undefined : DataView.prototype,\n\t'$ %Date%': Date,\n\t'$ %DatePrototype%': Date.prototype,\n\t'$ %decodeURI%': decodeURI,\n\t'$ %decodeURIComponent%': decodeURIComponent,\n\t'$ %encodeURI%': encodeURI,\n\t'$ %encodeURIComponent%': encodeURIComponent,\n\t'$ %Error%': Error,\n\t'$ %ErrorPrototype%': Error.prototype,\n\t'$ %eval%': eval, // eslint-disable-line no-eval\n\t'$ %EvalError%': EvalError,\n\t'$ %EvalErrorPrototype%': EvalError.prototype,\n\t'$ %Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'$ %Float32ArrayPrototype%': typeof Float32Array === 'undefined' ? undefined : Float32Array.prototype,\n\t'$ %Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'$ %Float64ArrayPrototype%': typeof Float64Array === 'undefined' ? undefined : Float64Array.prototype,\n\t'$ %Function%': Function,\n\t'$ %FunctionPrototype%': Function.prototype,\n\t'$ %Generator%': generator ? getProto(generator()) : undefined,\n\t'$ %GeneratorFunction%': generatorFunction,\n\t'$ %GeneratorPrototype%': generatorFunction ? generatorFunction.prototype : undefined,\n\t'$ %Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'$ %Int8ArrayPrototype%': typeof Int8Array === 'undefined' ? undefined : Int8Array.prototype,\n\t'$ %Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'$ %Int16ArrayPrototype%': typeof Int16Array === 'undefined' ? undefined : Int8Array.prototype,\n\t'$ %Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'$ %Int32ArrayPrototype%': typeof Int32Array === 'undefined' ? undefined : Int32Array.prototype,\n\t'$ %isFinite%': isFinite,\n\t'$ %isNaN%': isNaN,\n\t'$ %IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'$ %JSON%': JSON,\n\t'$ %JSONParse%': JSON.parse,\n\t'$ %Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'$ %MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'$ %MapPrototype%': typeof Map === 'undefined' ? undefined : Map.prototype,\n\t'$ %Math%': Math,\n\t'$ %Number%': Number,\n\t'$ %NumberPrototype%': Number.prototype,\n\t'$ %Object%': Object,\n\t'$ %ObjectPrototype%': Object.prototype,\n\t'$ %ObjProto_toString%': Object.prototype.toString,\n\t'$ %ObjProto_valueOf%': Object.prototype.valueOf,\n\t'$ %parseFloat%': parseFloat,\n\t'$ %parseInt%': parseInt,\n\t'$ %Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'$ %PromisePrototype%': typeof Promise === 'undefined' ? undefined : Promise.prototype,\n\t'$ %PromiseProto_then%': typeof Promise === 'undefined' ? undefined : Promise.prototype.then,\n\t'$ %Promise_all%': typeof Promise === 'undefined' ? undefined : Promise.all,\n\t'$ %Promise_reject%': typeof Promise === 'undefined' ? undefined : Promise.reject,\n\t'$ %Promise_resolve%': typeof Promise === 'undefined' ? undefined : Promise.resolve,\n\t'$ %Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'$ %RangeError%': RangeError,\n\t'$ %RangeErrorPrototype%': RangeError.prototype,\n\t'$ %ReferenceError%': ReferenceError,\n\t'$ %ReferenceErrorPrototype%': ReferenceError.prototype,\n\t'$ %Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'$ %RegExp%': RegExp,\n\t'$ %RegExpPrototype%': RegExp.prototype,\n\t'$ %Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'$ %SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'$ %SetPrototype%': typeof Set === 'undefined' ? undefined : Set.prototype,\n\t'$ %SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'$ %SharedArrayBufferPrototype%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer.prototype,\n\t'$ %String%': String,\n\t'$ %StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'$ %StringPrototype%': String.prototype,\n\t'$ %Symbol%': hasSymbols ? Symbol : undefined,\n\t'$ %SymbolPrototype%': hasSymbols ? Symbol.prototype : undefined,\n\t'$ %SyntaxError%': SyntaxError,\n\t'$ %SyntaxErrorPrototype%': SyntaxError.prototype,\n\t'$ %ThrowTypeError%': ThrowTypeError,\n\t'$ %TypedArray%': TypedArray,\n\t'$ %TypedArrayPrototype%': TypedArray ? TypedArray.prototype : undefined,\n\t'$ %TypeError%': TypeError,\n\t'$ %TypeErrorPrototype%': TypeError.prototype,\n\t'$ %Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'$ %Uint8ArrayPrototype%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array.prototype,\n\t'$ %Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'$ %Uint8ClampedArrayPrototype%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray.prototype,\n\t'$ %Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'$ %Uint16ArrayPrototype%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array.prototype,\n\t'$ %Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'$ %Uint32ArrayPrototype%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array.prototype,\n\t'$ %URIError%': URIError,\n\t'$ %URIErrorPrototype%': URIError.prototype,\n\t'$ %WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'$ %WeakMapPrototype%': typeof WeakMap === 'undefined' ? undefined : WeakMap.prototype,\n\t'$ %WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\t'$ %WeakSetPrototype%': typeof WeakSet === 'undefined' ? undefined : WeakSet.prototype\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar key = '$ ' + name;\n\tif (!(key in INTRINSICS)) {\n\t\tthrow new SyntaxError('intrinsic ' + name + ' does not exist!');\n\t}\n\n\t// istanbul ignore if // hopefully this is impossible to test :-)\n\tif (typeof INTRINSICS[key] === 'undefined' && !allowMissing) {\n\t\tthrow new TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t}\n\treturn INTRINSICS[key];\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar zeroWidthSpace = '\\u200b';\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.trim && zeroWidthSpace.trim() === zeroWidthSpace) {\n\t\treturn String.prototype.trim;\n\t}\n\treturn implementation;\n};\n","var A = require(\"./array.js\");\n\nvar at = function at(bytes, index) {\n return parseInt(bytes.slice(index * 2 + 2, index * 2 + 4), 16);\n};\n\nvar random = function random(bytes) {\n var rnd = void 0;\n if (typeof window !== \"undefined\" && window.crypto && window.crypto.getRandomValues) rnd = window.crypto.getRandomValues(new Uint8Array(bytes));else if (typeof require !== \"undefined\") rnd = require(\"c\" + \"rypto\").randomBytes(bytes);else throw \"Safe random numbers not available.\";\n var hex = \"0x\";\n for (var i = 0; i < bytes; ++i) {\n hex += (\"00\" + rnd[i].toString(16)).slice(-2);\n }return hex;\n};\n\nvar length = function length(a) {\n return (a.length - 2) / 2;\n};\n\nvar flatten = function flatten(a) {\n return \"0x\" + a.reduce(function (r, s) {\n return r + s.slice(2);\n }, \"\");\n};\n\nvar slice = function slice(i, j, bs) {\n return \"0x\" + bs.slice(i * 2 + 2, j * 2 + 2);\n};\n\nvar reverse = function reverse(hex) {\n var rev = \"0x\";\n for (var i = 0, l = length(hex); i < l; ++i) {\n rev += hex.slice((l - i) * 2, (l - i + 1) * 2);\n }\n return rev;\n};\n\nvar pad = function pad(l, hex) {\n return hex.length === l * 2 + 2 ? hex : pad(l, \"0x\" + \"0\" + hex.slice(2));\n};\n\nvar padRight = function padRight(l, hex) {\n return hex.length === l * 2 + 2 ? hex : padRight(l, hex + \"0\");\n};\n\nvar toArray = function toArray(hex) {\n var arr = [];\n for (var i = 2, l = hex.length; i < l; i += 2) {\n arr.push(parseInt(hex.slice(i, i + 2), 16));\n }return arr;\n};\n\nvar fromArray = function fromArray(arr) {\n var hex = \"0x\";\n for (var i = 0, l = arr.length; i < l; ++i) {\n var b = arr[i];\n hex += (b < 16 ? \"0\" : \"\") + b.toString(16);\n }\n return hex;\n};\n\nvar toUint8Array = function toUint8Array(hex) {\n return new Uint8Array(toArray(hex));\n};\n\nvar fromUint8Array = function fromUint8Array(arr) {\n return fromArray([].slice.call(arr, 0));\n};\n\nvar fromNumber = function fromNumber(num) {\n var hex = num.toString(16);\n return hex.length % 2 === 0 ? \"0x\" + hex : \"0x0\" + hex;\n};\n\nvar toNumber = function toNumber(hex) {\n return parseInt(hex.slice(2), 16);\n};\n\nvar concat = function concat(a, b) {\n return a.concat(b.slice(2));\n};\n\nvar fromNat = function fromNat(bn) {\n return bn === \"0x0\" ? \"0x\" : bn.length % 2 === 0 ? bn : \"0x0\" + bn.slice(2);\n};\n\nvar toNat = function toNat(bn) {\n return bn[2] === \"0\" ? \"0x\" + bn.slice(3) : bn;\n};\n\nvar fromAscii = function fromAscii(ascii) {\n var hex = \"0x\";\n for (var i = 0; i < ascii.length; ++i) {\n hex += (\"00\" + ascii.charCodeAt(i).toString(16)).slice(-2);\n }return hex;\n};\n\nvar toAscii = function toAscii(hex) {\n var ascii = \"\";\n for (var i = 2; i < hex.length; i += 2) {\n ascii += String.fromCharCode(parseInt(hex.slice(i, i + 2), 16));\n }return ascii;\n};\n\n// From https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330\nvar fromString = function fromString(s) {\n var makeByte = function makeByte(uint8) {\n var b = uint8.toString(16);\n return b.length < 2 ? \"0\" + b : b;\n };\n var bytes = \"0x\";\n for (var ci = 0; ci != s.length; ci++) {\n var c = s.charCodeAt(ci);\n if (c < 128) {\n bytes += makeByte(c);\n continue;\n }\n if (c < 2048) {\n bytes += makeByte(c >> 6 | 192);\n } else {\n if (c > 0xd7ff && c < 0xdc00) {\n if (++ci == s.length) return null;\n var c2 = s.charCodeAt(ci);\n if (c2 < 0xdc00 || c2 > 0xdfff) return null;\n c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n bytes += makeByte(c >> 18 | 240);\n bytes += makeByte(c >> 12 & 63 | 128);\n } else {\n // c <= 0xffff\n bytes += makeByte(c >> 12 | 224);\n }\n bytes += makeByte(c >> 6 & 63 | 128);\n }\n bytes += makeByte(c & 63 | 128);\n }\n return bytes;\n};\n\nvar toString = function toString(bytes) {\n var s = '';\n var i = 0;\n var l = length(bytes);\n while (i < l) {\n var c = at(bytes, i++);\n if (c > 127) {\n if (c > 191 && c < 224) {\n if (i >= l) return null;\n c = (c & 31) << 6 | at(bytes, i) & 63;\n } else if (c > 223 && c < 240) {\n if (i + 1 >= l) return null;\n c = (c & 15) << 12 | (at(bytes, i) & 63) << 6 | at(bytes, ++i) & 63;\n } else if (c > 239 && c < 248) {\n if (i + 2 >= l) return null;\n c = (c & 7) << 18 | (at(bytes, i) & 63) << 12 | (at(bytes, ++i) & 63) << 6 | at(bytes, ++i) & 63;\n } else return null;\n ++i;\n }\n if (c <= 0xffff) s += String.fromCharCode(c);else if (c <= 0x10ffff) {\n c -= 0x10000;\n s += String.fromCharCode(c >> 10 | 0xd800);\n s += String.fromCharCode(c & 0x3FF | 0xdc00);\n } else return null;\n }\n return s;\n};\n\nmodule.exports = {\n random: random,\n length: length,\n concat: concat,\n flatten: flatten,\n slice: slice,\n reverse: reverse,\n pad: pad,\n padRight: padRight,\n fromAscii: fromAscii,\n toAscii: toAscii,\n fromString: fromString,\n toString: toString,\n fromNumber: fromNumber,\n toNumber: toNumber,\n fromNat: fromNat,\n toNat: toNat,\n fromArray: fromArray,\n toArray: toArray,\n fromUint8Array: fromUint8Array,\n toUint8Array: toUint8Array\n};","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @authors:\n * Fabian Vogelsteller \n * Gav Wood \n * Jeffrey Wilcke \n * Marek Kotewicz \n * Marian Oancea \n * @date 2017\n */\n\"use strict\";\nvar version = require('../package.json').version;\nvar core = require('web3-core');\nvar Eth = require('web3-eth');\nvar Net = require('web3-net');\nvar Personal = require('web3-eth-personal');\nvar Shh = require('web3-shh');\nvar Bzz = require('web3-bzz');\nvar utils = require('web3-utils');\nvar Web3 = function Web3() {\n var _this = this;\n // sets _requestmanager etc\n core.packageInit(this, arguments);\n this.version = version;\n this.utils = utils;\n this.eth = new Eth(this);\n this.shh = new Shh(this);\n this.bzz = new Bzz(this);\n // overwrite package setProvider\n var setProvider = this.setProvider;\n this.setProvider = function (provider, net) {\n /*jshint unused: false */\n setProvider.apply(_this, arguments);\n _this.eth.setRequestManager(_this._requestManager);\n _this.shh.setRequestManager(_this._requestManager);\n _this.bzz.setProvider(provider);\n return true;\n };\n};\nWeb3.version = version;\nWeb3.utils = utils;\nWeb3.modules = {\n Eth: Eth,\n Net: Net,\n Personal: Personal,\n Shh: Shh,\n Bzz: Bzz\n};\ncore.addProviders(Web3);\nmodule.exports = Web3;\n","/*\n This file is part of web3.js.\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nconst { callbackify } = require('util');\nvar _ = require('underscore');\nvar errors = require('web3-core-helpers').errors;\nvar Jsonrpc = require('./jsonrpc.js');\nvar BatchManager = require('./batch.js');\nvar givenProvider = require('./givenProvider.js');\n/**\n * It's responsible for passing messages to providers\n * It's also responsible for polling the ethereum node for incoming messages\n * Default poll timeout is 1 second\n * Singleton\n *\n * @param {string|Object}provider\n * @param {Net.Socket} net\n *\n * @constructor\n */\nvar RequestManager = function RequestManager(provider, net) {\n this.provider = null;\n this.providers = RequestManager.providers;\n this.setProvider(provider, net);\n this.subscriptions = new Map();\n};\nRequestManager.givenProvider = givenProvider;\nRequestManager.providers = {\n WebsocketProvider: require('web3-providers-ws'),\n HttpProvider: require('web3-providers-http'),\n IpcProvider: require('web3-providers-ipc')\n};\n/**\n * Should be used to set provider of request manager\n *\n * @method setProvider\n *\n * @param {Object} provider\n * @param {net.Socket} net\n *\n * @returns void\n */\nRequestManager.prototype.setProvider = function (provider, net) {\n var _this = this;\n // autodetect provider\n if (provider && typeof provider === 'string' && this.providers) {\n // HTTP\n if (/^http(s)?:\\/\\//i.test(provider)) {\n provider = new this.providers.HttpProvider(provider);\n // WS\n }\n else if (/^ws(s)?:\\/\\//i.test(provider)) {\n provider = new this.providers.WebsocketProvider(provider);\n // IPC\n }\n else if (provider && typeof net === 'object' && typeof net.connect === 'function') {\n provider = new this.providers.IpcProvider(provider, net);\n }\n else if (provider) {\n throw new Error('Can\\'t autodetect provider for \"' + provider + '\"');\n }\n }\n // reset the old one before changing, if still connected\n if (this.provider && this.provider.connected)\n this.clearSubscriptions();\n this.provider = provider || null;\n // listen to incoming notifications\n if (this.provider && this.provider.on) {\n this.provider.on('data', function data(result, deprecatedResult) {\n result = result || deprecatedResult; // this is for possible old providers, which may had the error first handler\n // if result is a subscription, call callback for that subscription\n if (result.method && result.params && result.params.subscription && _this.subscriptions.has(result.params.subscription)) {\n _this.subscriptions.get(result.params.subscription).callback(null, result.params.result);\n }\n });\n // resubscribe if the provider has reconnected\n this.provider.on('connect', function connect() {\n _this.subscriptions.forEach(function (subscription) {\n subscription.subscription.resubscribe();\n });\n });\n // notify all subscriptions about the error condition\n this.provider.on('error', function error(error) {\n _this.subscriptions.forEach(function (subscription) {\n subscription.callback(error);\n });\n });\n // notify all subscriptions about bad close conditions\n this.provider.on('close', function close(event) {\n if (!_this._isCleanCloseEvent(event) || _this._isIpcCloseError(event)) {\n _this.subscriptions.forEach(function (subscription) {\n subscription.callback(errors.ConnectionCloseError(event));\n _this.subscriptions.delete(subscription.subscription.id);\n });\n if (_this.provider && _this.provider.emit) {\n _this.provider.emit('error', errors.ConnectionCloseError(event));\n }\n }\n if (_this.provider && _this.provider.emit) {\n _this.provider.emit('end', event);\n }\n });\n // TODO add end, timeout??\n }\n};\n/**\n * Asynchronously send request to provider.\n * Prefers to use the `request` method available on the provider as specified in [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193).\n * If `request` is not available, falls back to `sendAsync` and `send` respectively.\n * @method send\n * @param {Object} data\n * @param {Function} callback\n */\nRequestManager.prototype.send = function (data, callback) {\n callback = callback || function () { };\n if (!this.provider) {\n return callback(errors.InvalidProvider());\n }\n const { method, params } = data;\n const jsonrpcPayload = Jsonrpc.toPayload(method, params);\n const jsonrpcResultCallback = this._jsonrpcResultCallback(callback, jsonrpcPayload);\n if (this.provider.request) {\n const callbackRequest = callbackify(this.provider.request);\n const requestArgs = { method, params };\n callbackRequest(requestArgs, callback);\n }\n else if (this.provider.sendAsync) {\n this.provider.sendAsync(jsonrpcPayload, jsonrpcResultCallback);\n }\n else if (this.provider.send) {\n this.provider.send(jsonrpcPayload, jsonrpcResultCallback);\n }\n else {\n throw new Error('Provider does not have a request or send method to use.');\n }\n};\n/**\n * Asynchronously send batch request.\n * Only works if provider supports batch methods through `sendAsync` or `send`.\n * @method sendBatch\n * @param {Array} data - array of payload objects\n * @param {Function} callback\n */\nRequestManager.prototype.sendBatch = function (data, callback) {\n if (!this.provider) {\n return callback(errors.InvalidProvider());\n }\n var payload = Jsonrpc.toBatchPayload(data);\n this.provider[this.provider.sendAsync ? 'sendAsync' : 'send'](payload, function (err, results) {\n if (err) {\n return callback(err);\n }\n if (!_.isArray(results)) {\n return callback(errors.InvalidResponse(results));\n }\n callback(null, results);\n });\n};\n/**\n * Waits for notifications\n *\n * @method addSubscription\n * @param {Subscription} subscription the subscription\n * @param {String} type the subscription namespace (eth, personal, etc)\n * @param {Function} callback the callback to call for incoming notifications\n */\nRequestManager.prototype.addSubscription = function (subscription, callback) {\n if (this.provider.on) {\n this.subscriptions.set(subscription.id, {\n callback: callback,\n subscription: subscription\n });\n }\n else {\n throw new Error('The provider doesn\\'t support subscriptions: ' + this.provider.constructor.name);\n }\n};\n/**\n * Waits for notifications\n *\n * @method removeSubscription\n * @param {String} id the subscription id\n * @param {Function} callback fired once the subscription is removed\n */\nRequestManager.prototype.removeSubscription = function (id, callback) {\n if (this.subscriptions.has(id)) {\n var type = this.subscriptions.get(id).subscription.options.type;\n // remove subscription first to avoid reentry\n this.subscriptions.delete(id);\n // then, try to actually unsubscribe\n this.send({\n method: type + '_unsubscribe',\n params: [id]\n }, callback);\n return;\n }\n if (typeof callback === 'function') {\n // call the callback if the subscription was already removed\n callback(null);\n }\n};\n/**\n * Should be called to reset the subscriptions\n *\n * @method reset\n *\n * @returns {boolean}\n */\nRequestManager.prototype.clearSubscriptions = function (keepIsSyncing) {\n try {\n var _this = this;\n // uninstall all subscriptions\n if (this.subscriptions.size > 0) {\n this.subscriptions.forEach(function (value, id) {\n if (!keepIsSyncing || value.name !== 'syncing')\n _this.removeSubscription(id);\n });\n }\n // reset notification callbacks etc.\n if (this.provider.reset)\n this.provider.reset();\n return true;\n }\n catch (e) {\n throw new Error(`Error while clearing subscriptions: ${e}`);\n }\n};\n/**\n * Evaluates WS close event\n *\n * @method _isCleanClose\n *\n * @param {CloseEvent | boolean} event WS close event or exception flag\n *\n * @returns {boolean}\n */\nRequestManager.prototype._isCleanCloseEvent = function (event) {\n return typeof event === 'object' && ([1000].includes(event.code) || event.wasClean === true);\n};\n/**\n * Detects Ipc close error. The node.net module emits ('close', isException)\n *\n * @method _isIpcCloseError\n *\n * @param {CloseEvent | boolean} event WS close event or exception flag\n *\n * @returns {boolean}\n */\nRequestManager.prototype._isIpcCloseError = function (event) {\n return typeof event === 'boolean' && event;\n};\n/**\n * The jsonrpc result callback for RequestManager.send\n *\n * @method _jsonrpcResultCallback\n *\n * @param {Function} callback the callback to use\n * @param {Object} payload the jsonrpc payload\n *\n * @returns {Function} return callback of form (err, result)\n *\n */\nRequestManager.prototype._jsonrpcResultCallback = function (callback, payload) {\n return function (err, result) {\n if (result && result.id && payload.id !== result.id) {\n return callback(new Error(`Wrong response id ${result.id} (expected: ${payload.id}) in ${JSON.stringify(payload)}`));\n }\n if (err) {\n return callback(err);\n }\n if (result && result.error) {\n return callback(errors.ErrorResponse(result));\n }\n if (!Jsonrpc.isValidResponse(result)) {\n return callback(errors.InvalidResponse(result));\n }\n callback(null, result.result);\n };\n};\nmodule.exports = {\n Manager: RequestManager,\n BatchManager: BatchManager\n};\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file errors.js\n * @author Fabian Vogelsteller \n * @author Marek Kotewicz \n * @date 2017\n */\n\"use strict\";\nmodule.exports = {\n ErrorResponse: function (result) {\n var message = !!result && !!result.error && !!result.error.message ? result.error.message : JSON.stringify(result);\n var data = (!!result.error && !!result.error.data) ? result.error.data : null;\n var err = new Error('Returned error: ' + message);\n err.data = data;\n return err;\n },\n InvalidNumberOfParams: function (got, expected, method) {\n return new Error('Invalid number of parameters for \"' + method + '\". Got ' + got + ' expected ' + expected + '!');\n },\n InvalidConnection: function (host, event) {\n return this.ConnectionError('CONNECTION ERROR: Couldn\\'t connect to node ' + host + '.', event);\n },\n InvalidProvider: function () {\n return new Error('Provider not set or invalid');\n },\n InvalidResponse: function (result) {\n var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);\n return new Error(message);\n },\n ConnectionTimeout: function (ms) {\n return new Error('CONNECTION TIMEOUT: timeout of ' + ms + ' ms achived');\n },\n ConnectionNotOpenError: function (event) {\n return this.ConnectionError('connection not open on send()', event);\n },\n ConnectionCloseError: function (event) {\n if (typeof event === 'object' && event.code && event.reason) {\n return this.ConnectionError('CONNECTION ERROR: The connection got closed with ' +\n 'the close code `' + event.code + '` and the following ' +\n 'reason string `' + event.reason + '`', event);\n }\n return new Error('CONNECTION ERROR: The connection closed unexpectedly');\n },\n MaxAttemptsReachedOnReconnectingError: function () {\n return new Error('Maximum number of reconnect attempts reached!');\n },\n PendingRequestsOnReconnectingError: function () {\n return new Error('CONNECTION ERROR: Provider started to reconnect before the response got received!');\n },\n ConnectionError: function (msg, event) {\n const error = new Error(msg);\n if (event) {\n error.code = event.code;\n error.reason = event.reason;\n }\n return error;\n },\n RevertInstructionError: function (reason, signature) {\n var error = new Error('Your request got reverted with the following reason string: ' + reason);\n error.reason = reason;\n error.signature = signature;\n return error;\n },\n TransactionRevertInstructionError: function (reason, signature, receipt) {\n var error = new Error('Transaction has been reverted by the EVM:\\n' + JSON.stringify(receipt, null, 2));\n error.reason = reason;\n error.signature = signature;\n error.receipt = receipt;\n return error;\n },\n TransactionError: function (message, receipt) {\n var error = new Error(message);\n error.receipt = receipt;\n return error;\n },\n NoContractAddressFoundError: function (receipt) {\n return this.TransactionError('The transaction receipt didn\\'t contain a contract address.', receipt);\n },\n ContractCodeNotStoredError: function (receipt) {\n return this.TransactionError('The contract code couldn\\'t be stored, please check your gas limit.', receipt);\n },\n TransactionRevertedWithoutReasonError: function (receipt) {\n return this.TransactionError('Transaction has been reverted by the EVM:\\n' + JSON.stringify(receipt, null, 2), receipt);\n },\n TransactionOutOfGasError: function (receipt) {\n return this.TransactionError('Transaction ran out of gas. Please provide more gas:\\n' + JSON.stringify(receipt, null, 2), receipt);\n },\n ResolverMethodMissingError: function (address, name) {\n return new Error('The resolver at ' + address + 'does not implement requested method: \"' + name + '\".');\n },\n ContractMissingABIError: function () {\n return new Error('You must provide the json interface of the contract when instantiating a contract object.');\n },\n ContractOnceRequiresCallbackError: function () {\n return new Error('Once requires a callback as the second parameter.');\n },\n ContractEventDoesNotExistError: function (eventName) {\n return new Error('Event \"' + eventName + '\" doesn\\'t exist in this contract.');\n },\n ContractReservedEventError: function (type) {\n return new Error('The event \"' + type + '\" is a reserved event name, you can\\'t use it.');\n },\n ContractMissingDeployDataError: function () {\n return new Error('No \"data\" specified in neither the given options, nor the default options.');\n },\n ContractNoAddressDefinedError: function () {\n return new Error('This contract object doesn\\'t have address set yet, please set an address first.');\n },\n ContractNoFromAddressDefinedError: function () {\n return new Error('No \"from\" address specified in neither the given options, nor the default options.');\n }\n};\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file formatters.js\n * @author Fabian Vogelsteller \n * @author Marek Kotewicz \n * @date 2017\n */\n\"use strict\";\nvar _ = require('underscore');\nvar utils = require('web3-utils');\nvar Iban = require('web3-eth-iban');\n/**\n * Will format the given storage key array values to hex strings.\n *\n * @method inputStorageKeysFormatter\n *\n * @param {Array} keys\n *\n * @returns {Array}\n */\nvar inputStorageKeysFormatter = function (keys) {\n return keys.map(utils.numberToHex);\n};\n/**\n * Will format the given proof response from the node.\n *\n * @method outputProofFormatter\n *\n * @param {object} proof\n *\n * @returns {object}\n */\nvar outputProofFormatter = function (proof) {\n proof.address = utils.toChecksumAddress(proof.address);\n proof.nonce = utils.hexToNumberString(proof.nonce);\n proof.balance = utils.hexToNumberString(proof.balance);\n return proof;\n};\n/**\n * Should the format output to a big number\n *\n * @method outputBigNumberFormatter\n *\n * @param {String|Number|BigNumber|BN} number\n *\n * @returns {BN} object\n */\nvar outputBigNumberFormatter = function (number) {\n return utils.toBN(number).toString(10);\n};\n/**\n * Returns true if the given blockNumber is 'latest', 'pending', or 'earliest.\n *\n * @method isPredefinedBlockNumber\n *\n * @param {String} blockNumber\n *\n * @returns {Boolean}\n */\nvar isPredefinedBlockNumber = function (blockNumber) {\n return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest';\n};\n/**\n * Returns the given block number as hex string or does return the defaultBlock property of the current module\n *\n * @method inputDefaultBlockNumberFormatter\n *\n * @param {String|Number|BN|BigNumber} blockNumber\n *\n * @returns {String}\n */\nvar inputDefaultBlockNumberFormatter = function (blockNumber) {\n if (this && (blockNumber === undefined || blockNumber === null)) {\n return inputBlockNumberFormatter(this.defaultBlock);\n }\n return inputBlockNumberFormatter(blockNumber);\n};\n/**\n * Returns the given block number as hex string or the predefined block number 'latest', 'pending', 'earliest', 'genesis'\n *\n * @param {String|Number|BN|BigNumber} blockNumber\n *\n * @returns {String}\n */\nvar inputBlockNumberFormatter = function (blockNumber) {\n if (blockNumber === undefined) {\n return undefined;\n }\n if (isPredefinedBlockNumber(blockNumber)) {\n return blockNumber;\n }\n if (blockNumber === 'genesis') {\n return '0x0';\n }\n return (utils.isHexStrict(blockNumber)) ? ((_.isString(blockNumber)) ? blockNumber.toLowerCase() : blockNumber) : utils.numberToHex(blockNumber);\n};\n/**\n * Formats the input of a transaction and converts all values to HEX\n *\n * @method _txInputFormatter\n * @param {Object} transaction options\n * @returns object\n */\nvar _txInputFormatter = function (options) {\n if (options.to) { // it might be contract creation\n options.to = inputAddressFormatter(options.to);\n }\n if (options.data && options.input) {\n throw new Error('You can\\'t have \"data\" and \"input\" as properties of transactions at the same time, please use either \"data\" or \"input\" instead.');\n }\n if (!options.data && options.input) {\n options.data = options.input;\n delete options.input;\n }\n if (options.data && !options.data.startsWith('0x')) {\n options.data = '0x' + options.data;\n }\n if (options.data && !utils.isHex(options.data)) {\n throw new Error('The data field must be HEX encoded data.');\n }\n // allow both\n if (options.gas || options.gasLimit) {\n options.gas = options.gas || options.gasLimit;\n }\n ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {\n return options[key] !== undefined;\n }).forEach(function (key) {\n options[key] = utils.numberToHex(options[key]);\n });\n return options;\n};\n/**\n * Formats the input of a transaction and converts all values to HEX\n *\n * @method inputCallFormatter\n * @param {Object} transaction options\n * @returns object\n */\nvar inputCallFormatter = function (options) {\n options = _txInputFormatter(options);\n var from = options.from || (this ? this.defaultAccount : null);\n if (from) {\n options.from = inputAddressFormatter(from);\n }\n return options;\n};\n/**\n * Formats the input of a transaction and converts all values to HEX\n *\n * @method inputTransactionFormatter\n * @param {Object} options\n * @returns object\n */\nvar inputTransactionFormatter = function (options) {\n options = _txInputFormatter(options);\n // check from, only if not number, or object\n if (!_.isNumber(options.from) && !_.isObject(options.from)) {\n options.from = options.from || (this ? this.defaultAccount : null);\n if (!options.from && !_.isNumber(options.from)) {\n throw new Error('The send transactions \"from\" field must be defined!');\n }\n options.from = inputAddressFormatter(options.from);\n }\n return options;\n};\n/**\n * Hex encodes the data passed to eth_sign and personal_sign\n *\n * @method inputSignFormatter\n * @param {String} data\n * @returns {String}\n */\nvar inputSignFormatter = function (data) {\n return (utils.isHexStrict(data)) ? data : utils.utf8ToHex(data);\n};\n/**\n * Formats the output of a transaction to its proper values\n *\n * @method outputTransactionFormatter\n * @param {Object} tx\n * @returns {Object}\n */\nvar outputTransactionFormatter = function (tx) {\n if (tx.blockNumber !== null)\n tx.blockNumber = utils.hexToNumber(tx.blockNumber);\n if (tx.transactionIndex !== null)\n tx.transactionIndex = utils.hexToNumber(tx.transactionIndex);\n tx.nonce = utils.hexToNumber(tx.nonce);\n tx.gas = utils.hexToNumber(tx.gas);\n tx.gasPrice = outputBigNumberFormatter(tx.gasPrice);\n tx.value = outputBigNumberFormatter(tx.value);\n if (tx.to && utils.isAddress(tx.to)) { // tx.to could be `0x0` or `null` while contract creation\n tx.to = utils.toChecksumAddress(tx.to);\n }\n else {\n tx.to = null; // set to `null` if invalid address\n }\n if (tx.from) {\n tx.from = utils.toChecksumAddress(tx.from);\n }\n return tx;\n};\n/**\n * Formats the output of a transaction receipt to its proper values\n *\n * @method outputTransactionReceiptFormatter\n * @param {Object} receipt\n * @returns {Object}\n */\nvar outputTransactionReceiptFormatter = function (receipt) {\n if (typeof receipt !== 'object') {\n throw new Error('Received receipt is invalid: ' + receipt);\n }\n if (receipt.blockNumber !== null)\n receipt.blockNumber = utils.hexToNumber(receipt.blockNumber);\n if (receipt.transactionIndex !== null)\n receipt.transactionIndex = utils.hexToNumber(receipt.transactionIndex);\n receipt.cumulativeGasUsed = utils.hexToNumber(receipt.cumulativeGasUsed);\n receipt.gasUsed = utils.hexToNumber(receipt.gasUsed);\n if (_.isArray(receipt.logs)) {\n receipt.logs = receipt.logs.map(outputLogFormatter);\n }\n if (receipt.contractAddress) {\n receipt.contractAddress = utils.toChecksumAddress(receipt.contractAddress);\n }\n if (typeof receipt.status !== 'undefined' && receipt.status !== null) {\n receipt.status = Boolean(parseInt(receipt.status));\n }\n return receipt;\n};\n/**\n * Formats the output of a block to its proper values\n *\n * @method outputBlockFormatter\n * @param {Object} block\n * @returns {Object}\n */\nvar outputBlockFormatter = function (block) {\n // transform to number\n block.gasLimit = utils.hexToNumber(block.gasLimit);\n block.gasUsed = utils.hexToNumber(block.gasUsed);\n block.size = utils.hexToNumber(block.size);\n block.timestamp = utils.hexToNumber(block.timestamp);\n if (block.number !== null)\n block.number = utils.hexToNumber(block.number);\n if (block.difficulty)\n block.difficulty = outputBigNumberFormatter(block.difficulty);\n if (block.totalDifficulty)\n block.totalDifficulty = outputBigNumberFormatter(block.totalDifficulty);\n if (_.isArray(block.transactions)) {\n block.transactions.forEach(function (item) {\n if (!_.isString(item))\n return outputTransactionFormatter(item);\n });\n }\n if (block.miner)\n block.miner = utils.toChecksumAddress(block.miner);\n return block;\n};\n/**\n * Formats the input of a log\n *\n * @method inputLogFormatter\n * @param {Object} log object\n * @returns {Object} log\n */\nvar inputLogFormatter = function (options) {\n var toTopic = function (value) {\n if (value === null || typeof value === 'undefined')\n return null;\n value = String(value);\n if (value.indexOf('0x') === 0)\n return value;\n else\n return utils.fromUtf8(value);\n };\n if (options.fromBlock || options.fromBlock === 0)\n options.fromBlock = inputBlockNumberFormatter(options.fromBlock);\n if (options.toBlock || options.toBlock === 0)\n options.toBlock = inputBlockNumberFormatter(options.toBlock);\n // make sure topics, get converted to hex\n options.topics = options.topics || [];\n options.topics = options.topics.map(function (topic) {\n return (_.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);\n });\n toTopic = null;\n if (options.address) {\n options.address = (_.isArray(options.address)) ? options.address.map(function (addr) {\n return inputAddressFormatter(addr);\n }) : inputAddressFormatter(options.address);\n }\n return options;\n};\n/**\n * Formats the output of a log\n *\n * @method outputLogFormatter\n * @param {Object} log object\n * @returns {Object} log\n */\nvar outputLogFormatter = function (log) {\n // generate a custom log id\n if (typeof log.blockHash === 'string' &&\n typeof log.transactionHash === 'string' &&\n typeof log.logIndex === 'string') {\n var shaId = utils.sha3(log.blockHash.replace('0x', '') + log.transactionHash.replace('0x', '') + log.logIndex.replace('0x', ''));\n log.id = 'log_' + shaId.replace('0x', '').substr(0, 8);\n }\n else if (!log.id) {\n log.id = null;\n }\n if (log.blockNumber !== null)\n log.blockNumber = utils.hexToNumber(log.blockNumber);\n if (log.transactionIndex !== null)\n log.transactionIndex = utils.hexToNumber(log.transactionIndex);\n if (log.logIndex !== null)\n log.logIndex = utils.hexToNumber(log.logIndex);\n if (log.address) {\n log.address = utils.toChecksumAddress(log.address);\n }\n return log;\n};\n/**\n * Formats the input of a whisper post and converts all values to HEX\n *\n * @method inputPostFormatter\n * @param {Object} transaction object\n * @returns {Object}\n */\nvar inputPostFormatter = function (post) {\n // post.payload = utils.toHex(post.payload);\n if (post.ttl)\n post.ttl = utils.numberToHex(post.ttl);\n if (post.workToProve)\n post.workToProve = utils.numberToHex(post.workToProve);\n if (post.priority)\n post.priority = utils.numberToHex(post.priority);\n // fallback\n if (!_.isArray(post.topics)) {\n post.topics = post.topics ? [post.topics] : [];\n }\n // format the following options\n post.topics = post.topics.map(function (topic) {\n // convert only if not hex\n return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic);\n });\n return post;\n};\n/**\n * Formats the output of a received post message\n *\n * @method outputPostFormatter\n * @param {Object}\n * @returns {Object}\n */\nvar outputPostFormatter = function (post) {\n post.expiry = utils.hexToNumber(post.expiry);\n post.sent = utils.hexToNumber(post.sent);\n post.ttl = utils.hexToNumber(post.ttl);\n post.workProved = utils.hexToNumber(post.workProved);\n // post.payloadRaw = post.payload;\n // post.payload = utils.hexToAscii(post.payload);\n // if (utils.isJson(post.payload)) {\n // post.payload = JSON.parse(post.payload);\n // }\n // format the following options\n if (!post.topics) {\n post.topics = [];\n }\n post.topics = post.topics.map(function (topic) {\n return utils.toUtf8(topic);\n });\n return post;\n};\nvar inputAddressFormatter = function (address) {\n var iban = new Iban(address);\n if (iban.isValid() && iban.isDirect()) {\n return iban.toAddress().toLowerCase();\n }\n else if (utils.isAddress(address)) {\n return '0x' + address.toLowerCase().replace('0x', '');\n }\n throw new Error('Provided address \"' + address + '\" is invalid, the capitalization checksum test failed, or its an indrect IBAN address which can\\'t be converted.');\n};\nvar outputSyncingFormatter = function (result) {\n result.startingBlock = utils.hexToNumber(result.startingBlock);\n result.currentBlock = utils.hexToNumber(result.currentBlock);\n result.highestBlock = utils.hexToNumber(result.highestBlock);\n if (result.knownStates) {\n result.knownStates = utils.hexToNumber(result.knownStates);\n result.pulledStates = utils.hexToNumber(result.pulledStates);\n }\n return result;\n};\nmodule.exports = {\n inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,\n inputBlockNumberFormatter: inputBlockNumberFormatter,\n inputCallFormatter: inputCallFormatter,\n inputTransactionFormatter: inputTransactionFormatter,\n inputAddressFormatter: inputAddressFormatter,\n inputPostFormatter: inputPostFormatter,\n inputLogFormatter: inputLogFormatter,\n inputSignFormatter: inputSignFormatter,\n inputStorageKeysFormatter: inputStorageKeysFormatter,\n outputProofFormatter: outputProofFormatter,\n outputBigNumberFormatter: outputBigNumberFormatter,\n outputTransactionFormatter: outputTransactionFormatter,\n outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,\n outputBlockFormatter: outputBlockFormatter,\n outputLogFormatter: outputLogFormatter,\n outputPostFormatter: outputPostFormatter,\n outputSyncingFormatter: outputSyncingFormatter\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar numberToBN = require('number-to-bn');\n\nvar zero = new BN(0);\nvar negative1 = new BN(-1);\n\n// complete ethereum unit map\nvar unitMap = {\n 'noether': '0', // eslint-disable-line\n 'wei': '1', // eslint-disable-line\n 'kwei': '1000', // eslint-disable-line\n 'Kwei': '1000', // eslint-disable-line\n 'babbage': '1000', // eslint-disable-line\n 'femtoether': '1000', // eslint-disable-line\n 'mwei': '1000000', // eslint-disable-line\n 'Mwei': '1000000', // eslint-disable-line\n 'lovelace': '1000000', // eslint-disable-line\n 'picoether': '1000000', // eslint-disable-line\n 'gwei': '1000000000', // eslint-disable-line\n 'Gwei': '1000000000', // eslint-disable-line\n 'shannon': '1000000000', // eslint-disable-line\n 'nanoether': '1000000000', // eslint-disable-line\n 'nano': '1000000000', // eslint-disable-line\n 'szabo': '1000000000000', // eslint-disable-line\n 'microether': '1000000000000', // eslint-disable-line\n 'micro': '1000000000000', // eslint-disable-line\n 'finney': '1000000000000000', // eslint-disable-line\n 'milliether': '1000000000000000', // eslint-disable-line\n 'milli': '1000000000000000', // eslint-disable-line\n 'ether': '1000000000000000000', // eslint-disable-line\n 'kether': '1000000000000000000000', // eslint-disable-line\n 'grand': '1000000000000000000000', // eslint-disable-line\n 'mether': '1000000000000000000000000', // eslint-disable-line\n 'gether': '1000000000000000000000000000', // eslint-disable-line\n 'tether': '1000000000000000000000000000000' };\n\n/**\n * Returns value of unit in Wei\n *\n * @method getValueOfUnit\n * @param {String} unit the unit to convert to, default ether\n * @returns {BigNumber} value of the unit (in Wei)\n * @throws error if the unit is not correct:w\n */\nfunction getValueOfUnit(unitInput) {\n var unit = unitInput ? unitInput.toLowerCase() : 'ether';\n var unitValue = unitMap[unit]; // eslint-disable-line\n\n if (typeof unitValue !== 'string') {\n throw new Error('[ethjs-unit] the unit provided ' + unitInput + ' doesn\\'t exists, please use the one of the following units ' + JSON.stringify(unitMap, null, 2));\n }\n\n return new BN(unitValue, 10);\n}\n\nfunction numberToString(arg) {\n if (typeof arg === 'string') {\n if (!arg.match(/^-?[0-9.]+$/)) {\n throw new Error('while converting number to string, invalid number value \\'' + arg + '\\', should be a number matching (^-?[0-9.]+).');\n }\n return arg;\n } else if (typeof arg === 'number') {\n return String(arg);\n } else if (typeof arg === 'object' && arg.toString && (arg.toTwos || arg.dividedToIntegerBy)) {\n if (arg.toPrecision) {\n return String(arg.toPrecision());\n } else {\n // eslint-disable-line\n return arg.toString(10);\n }\n }\n throw new Error('while converting number to string, invalid number value \\'' + arg + '\\' type ' + typeof arg + '.');\n}\n\nfunction fromWei(weiInput, unit, optionsInput) {\n var wei = numberToBN(weiInput); // eslint-disable-line\n var negative = wei.lt(zero); // eslint-disable-line\n var base = getValueOfUnit(unit);\n var baseLength = unitMap[unit].length - 1 || 1;\n var options = optionsInput || {};\n\n if (negative) {\n wei = wei.mul(negative1);\n }\n\n var fraction = wei.mod(base).toString(10); // eslint-disable-line\n\n while (fraction.length < baseLength) {\n fraction = '0' + fraction;\n }\n\n if (!options.pad) {\n fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1];\n }\n\n var whole = wei.div(base).toString(10); // eslint-disable-line\n\n if (options.commify) {\n whole = whole.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n var value = '' + whole + (fraction == '0' ? '' : '.' + fraction); // eslint-disable-line\n\n if (negative) {\n value = '-' + value;\n }\n\n return value;\n}\n\nfunction toWei(etherInput, unit) {\n var ether = numberToString(etherInput); // eslint-disable-line\n var base = getValueOfUnit(unit);\n var baseLength = unitMap[unit].length - 1 || 1;\n\n // Is it negative?\n var negative = ether.substring(0, 1) === '-'; // eslint-disable-line\n if (negative) {\n ether = ether.substring(1);\n }\n\n if (ether === '.') {\n throw new Error('[ethjs-unit] while converting number ' + etherInput + ' to wei, invalid value');\n }\n\n // Split it into a whole and fractional part\n var comps = ether.split('.'); // eslint-disable-line\n if (comps.length > 2) {\n throw new Error('[ethjs-unit] while converting number ' + etherInput + ' to wei, too many decimal points');\n }\n\n var whole = comps[0],\n fraction = comps[1]; // eslint-disable-line\n\n if (!whole) {\n whole = '0';\n }\n if (!fraction) {\n fraction = '0';\n }\n if (fraction.length > baseLength) {\n throw new Error('[ethjs-unit] while converting number ' + etherInput + ' to wei, too many decimal places');\n }\n\n while (fraction.length < baseLength) {\n fraction += '0';\n }\n\n whole = new BN(whole);\n fraction = new BN(fraction);\n var wei = whole.mul(base).add(fraction); // eslint-disable-line\n\n if (negative) {\n wei = wei.mul(negative1);\n }\n\n return new BN(wei.toString(10), 10);\n}\n\nmodule.exports = {\n unitMap: unitMap,\n numberToString: numberToString,\n getValueOfUnit: getValueOfUnit,\n fromWei: fromWei,\n toWei: toWei\n};","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n for (var i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var BN = require('bn.js');\nvar stripHexPrefix = require('strip-hex-prefix');\n\n/**\n * Returns a BN object, converts a number value to a BN\n * @param {String|Number|Object} `arg` input a string number, hex string number, number, BigNumber or BN object\n * @return {Object} `output` BN object of the number\n * @throws if the argument is not an array, object that isn't a bignumber, not a string number or number\n */\nmodule.exports = function numberToBN(arg) {\n if (typeof arg === 'string' || typeof arg === 'number') {\n var multiplier = new BN(1); // eslint-disable-line\n var formattedString = String(arg).toLowerCase().trim();\n var isHexPrefixed = formattedString.substr(0, 2) === '0x' || formattedString.substr(0, 3) === '-0x';\n var stringArg = stripHexPrefix(formattedString); // eslint-disable-line\n if (stringArg.substr(0, 1) === '-') {\n stringArg = stripHexPrefix(stringArg.slice(1));\n multiplier = new BN(-1, 10);\n }\n stringArg = stringArg === '' ? '0' : stringArg;\n\n if ((!stringArg.match(/^-?[0-9]+$/) && stringArg.match(/^[0-9A-Fa-f]+$/))\n || stringArg.match(/^[a-fA-F]+$/)\n || (isHexPrefixed === true && stringArg.match(/^[0-9A-Fa-f]+$/))) {\n return new BN(stringArg, 16).mul(multiplier);\n }\n\n if ((stringArg.match(/^-?[0-9]+$/) || stringArg === '') && isHexPrefixed === false) {\n return new BN(stringArg, 10).mul(multiplier);\n }\n } else if (typeof arg === 'object' && arg.toString && (!arg.pop && !arg.push)) {\n if (arg.toString(10).match(/^-?[0-9]+$/) && (arg.mul || arg.dividedToIntegerBy)) {\n return new BN(arg.toString(10), 10);\n }\n }\n\n throw new Error('[number-to-bn] while converting number ' + JSON.stringify(arg) + ' to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.');\n}\n","var BN = require('bn.js');\nvar stripHexPrefix = require('strip-hex-prefix');\n\n/**\n * Returns a BN object, converts a number value to a BN\n * @param {String|Number|Object} `arg` input a string number, hex string number, number, BigNumber or BN object\n * @return {Object} `output` BN object of the number\n * @throws if the argument is not an array, object that isn't a bignumber, not a string number or number\n */\nmodule.exports = function numberToBN(arg) {\n if (typeof arg === 'string' || typeof arg === 'number') {\n var multiplier = new BN(1); // eslint-disable-line\n var formattedString = String(arg).toLowerCase().trim();\n var isHexPrefixed = formattedString.substr(0, 2) === '0x' || formattedString.substr(0, 3) === '-0x';\n var stringArg = stripHexPrefix(formattedString); // eslint-disable-line\n if (stringArg.substr(0, 1) === '-') {\n stringArg = stripHexPrefix(stringArg.slice(1));\n multiplier = new BN(-1, 10);\n }\n stringArg = stringArg === '' ? '0' : stringArg;\n\n if ((!stringArg.match(/^-?[0-9]+$/) && stringArg.match(/^[0-9A-Fa-f]+$/))\n || stringArg.match(/^[a-fA-F]+$/)\n || (isHexPrefixed === true && stringArg.match(/^[0-9A-Fa-f]+$/))) {\n return new BN(stringArg, 16).mul(multiplier);\n }\n\n if ((stringArg.match(/^-?[0-9]+$/) || stringArg === '') && isHexPrefixed === false) {\n return new BN(stringArg, 10).mul(multiplier);\n }\n } else if (typeof arg === 'object' && arg.toString && (!arg.pop && !arg.push)) {\n if (arg.toString(10).match(/^-?[0-9]+$/) && (arg.mul || arg.dividedToIntegerBy)) {\n return new BN(arg.toString(10), 10);\n }\n }\n\n throw new Error('[number-to-bn] while converting number ' + JSON.stringify(arg) + ' to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.');\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buf' + 'fer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n r.strip();\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","/*! https://mths.be/utf8js v3.0.0 by @mathias */\n;(function(root) {\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\troot.version = '3.0.0';\n\troot.encode = utf8encode;\n\troot.decode = utf8decode;\n\n}(typeof exports === 'undefined' ? this.utf8 = {} : exports));\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst utils_1 = require(\"./utils\");\r\n/**\r\n * Returns true if the bloom is a valid bloom\r\n * @param bloom The bloom\r\n */\r\nfunction isBloom(bloom) {\r\n if (typeof bloom !== 'string') {\r\n return false;\r\n }\r\n if (!/^(0x)?[0-9a-f]{512}$/i.test(bloom)) {\r\n return false;\r\n }\r\n if (/^(0x)?[0-9a-f]{512}$/.test(bloom) ||\r\n /^(0x)?[0-9A-F]{512}$/.test(bloom)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexports.isBloom = isBloom;\r\n/**\r\n * Returns true if the value is part of the given bloom\r\n * note: false positives are possible.\r\n * @param bloom encoded bloom\r\n * @param value The value\r\n */\r\nfunction isInBloom(bloom, value) {\r\n if (typeof value === 'object' && value.constructor === Uint8Array) {\r\n value = utils_1.bytesToHex(value);\r\n }\r\n const hash = utils_1.keccak256(value).replace('0x', '');\r\n for (let i = 0; i < 12; i += 4) {\r\n // calculate bit position in bloom filter that must be active\r\n const bitpos = ((parseInt(hash.substr(i, 2), 16) << 8) +\r\n parseInt(hash.substr(i + 2, 2), 16)) &\r\n 2047;\r\n // test if bitpos in bloom is active\r\n const code = codePointToInt(bloom.charCodeAt(bloom.length - 1 - Math.floor(bitpos / 4)));\r\n const offset = 1 << bitpos % 4;\r\n if ((code & offset) !== offset) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nexports.isInBloom = isInBloom;\r\n/**\r\n * Code points to int\r\n * @param codePoint The code point\r\n */\r\nfunction codePointToInt(codePoint) {\r\n if (codePoint >= 48 && codePoint <= 57) {\r\n /* ['0'..'9'] -> [0..9] */\r\n return codePoint - 48;\r\n }\r\n if (codePoint >= 65 && codePoint <= 70) {\r\n /* ['A'..'F'] -> [10..15] */\r\n return codePoint - 55;\r\n }\r\n if (codePoint >= 97 && codePoint <= 102) {\r\n /* ['a'..'f'] -> [10..15] */\r\n return codePoint - 87;\r\n }\r\n throw new Error('invalid bloom');\r\n}\r\n/**\r\n * Returns true if the ethereum users address is part of the given bloom.\r\n * note: false positives are possible.\r\n * @param bloom encoded bloom\r\n * @param address the address to test\r\n */\r\nfunction isUserEthereumAddressInBloom(bloom, ethereumAddress) {\r\n if (!isBloom(bloom)) {\r\n throw new Error('Invalid bloom given');\r\n }\r\n if (!isAddress(ethereumAddress)) {\r\n throw new Error(`Invalid ethereum address given: \"${ethereumAddress}\"`);\r\n }\r\n // you have to pad the ethereum address to 32 bytes\r\n // else the bloom filter does not work\r\n // this is only if your matching the USERS\r\n // ethereum address. Contract address do not need this\r\n // hence why we have 2 methods\r\n // (0x is not in the 2nd parameter of padleft so 64 chars is fine)\r\n const address = utils_1.padLeft(ethereumAddress, 64);\r\n return isInBloom(bloom, address);\r\n}\r\nexports.isUserEthereumAddressInBloom = isUserEthereumAddressInBloom;\r\n/**\r\n * Returns true if the contract address is part of the given bloom.\r\n * note: false positives are possible.\r\n * @param bloom encoded bloom\r\n * @param contractAddress the contract address to test\r\n */\r\nfunction isContractAddressInBloom(bloom, contractAddress) {\r\n if (!isBloom(bloom)) {\r\n throw new Error('Invalid bloom given');\r\n }\r\n if (!isAddress(contractAddress)) {\r\n throw new Error(`Invalid contract address given: \"${contractAddress}\"`);\r\n }\r\n return isInBloom(bloom, contractAddress);\r\n}\r\nexports.isContractAddressInBloom = isContractAddressInBloom;\r\n/**\r\n * Returns true if the topic is part of the given bloom.\r\n * note: false positives are possible.\r\n * @param bloom encoded bloom\r\n * @param topic the topic encoded hex\r\n */\r\nfunction isTopicInBloom(bloom, topic) {\r\n if (!isBloom(bloom)) {\r\n throw new Error('Invalid bloom given');\r\n }\r\n if (!isTopic(topic)) {\r\n throw new Error('Invalid topic');\r\n }\r\n return isInBloom(bloom, topic);\r\n}\r\nexports.isTopicInBloom = isTopicInBloom;\r\n/**\r\n * Checks if its a valid topic\r\n * @param topic encoded hex topic\r\n */\r\nfunction isTopic(topic) {\r\n if (typeof topic !== 'string') {\r\n return false;\r\n }\r\n if (!/^(0x)?[0-9a-f]{64}$/i.test(topic)) {\r\n return false;\r\n }\r\n else if (/^(0x)?[0-9a-f]{64}$/.test(topic) ||\r\n /^(0x)?[0-9A-F]{64}$/.test(topic)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexports.isTopic = isTopic;\r\n/**\r\n * Is valid address\r\n * @param address The address\r\n */\r\nfunction isAddress(address) {\r\n if (typeof address !== 'string') {\r\n return false;\r\n }\r\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\r\n return true;\r\n }\r\n if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexports.isAddress = isAddress;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst sha3 = require(\"js-sha3\");\r\n/**\r\n * Keccak256 hash\r\n * @param data The data\r\n */\r\nfunction keccak256(data) {\r\n return '0x' + sha3.keccak_256(toByteArray(data));\r\n}\r\nexports.keccak256 = keccak256;\r\n/**\r\n * Adding padding to string on the left\r\n * @param value The value\r\n * @param chars The chars\r\n */\r\nexports.padLeft = (value, chars) => {\r\n const hasPrefix = /^0x/i.test(value) || typeof value === 'number';\r\n value = value.toString().replace(/^0x/i, '');\r\n const padding = chars - value.length + 1 >= 0 ? chars - value.length + 1 : 0;\r\n return (hasPrefix ? '0x' : '') + new Array(padding).join('0') + value;\r\n};\r\n/**\r\n * Convert bytes to hex\r\n * @param bytes The bytes\r\n */\r\nfunction bytesToHex(bytes) {\r\n let hex = [];\r\n for (let i = 0; i < bytes.length; i++) {\r\n hex.push((bytes[i] >>> 4).toString(16));\r\n hex.push((bytes[i] & 0xf).toString(16));\r\n }\r\n return `0x${hex.join('').replace(/^0+/, '')}`;\r\n}\r\nexports.bytesToHex = bytesToHex;\r\n/**\r\n * To byte array\r\n * @param value The value\r\n */\r\nfunction toByteArray(value) {\r\n if (value == null) {\r\n throw new Error('cannot convert null value to array');\r\n }\r\n if (typeof value === 'string') {\r\n let match = value.match(/^(0x)?[0-9a-fA-F]*$/);\r\n if (!match) {\r\n throw new Error('invalid hexidecimal string');\r\n }\r\n if (match[1] !== '0x') {\r\n throw new Error('hex string must have 0x prefix');\r\n }\r\n value = value.substring(2);\r\n if (value.length % 2) {\r\n value = '0' + value;\r\n }\r\n const result = [];\r\n for (let i = 0; i < value.length; i += 2) {\r\n result.push(parseInt(value.substr(i, 2), 16));\r\n }\r\n return addSlice(new Uint8Array(result));\r\n }\r\n if (isByteArray(value)) {\r\n return addSlice(new Uint8Array(value));\r\n }\r\n throw new Error('invalid arrayify value');\r\n}\r\nexports.toByteArray = toByteArray;\r\n/**\r\n * Is byte array\r\n * @param value The value\r\n */\r\nfunction isByteArray(value) {\r\n if (!value ||\r\n parseInt(String(value.length)) != value.length ||\r\n typeof value === 'string') {\r\n return false;\r\n }\r\n for (let i = 0; i < value.length; i++) {\r\n const v = value[i];\r\n if (v < 0 || v >= 256 || parseInt(String(v)) != v) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * Add slice to array\r\n * @param array The array\r\n */\r\nfunction addSlice(array) {\r\n if (array.slice) {\r\n return array;\r\n }\r\n array.slice = function () {\r\n const args = Array.prototype.slice.call(arguments);\r\n return addSlice(new Uint8Array(Array.prototype.slice.apply(array, args)));\r\n };\r\n return array;\r\n}\r\n","/**\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\n *\n * @version 0.8.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2015-2018\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var INPUT_ERROR = 'input is invalid type';\n var FINALIZE_ERROR = 'finalize already called';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_SHA3_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\n var PADDING = [6, 1536, 393216, 100663296];\n var SHIFT = [0, 8, 16, 24];\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\n var BITS = [224, 256, 384, 512];\n var SHAKE_BITS = [128, 256];\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\n var CSHAKE_BYTEPAD = {\n '128': 168,\n '256': 136\n };\n\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n var createOutputMethod = function (bits, padding, outputType) {\n return function (message) {\n return new Keccak(bits, padding, bits).update(message)[outputType]();\n };\n };\n\n var createShakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits) {\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\n };\n };\n\n var createCshakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits, n, s) {\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\n };\n };\n\n var createKmacOutputMethod = function (bits, padding, outputType) {\n return function (key, message, outputBits, s) {\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\n };\n };\n\n var createOutputMethods = function (method, createMethod, bits, padding) {\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createMethod(bits, padding, type);\n }\n return method;\n };\n\n var createMethod = function (bits, padding) {\n var method = createOutputMethod(bits, padding, 'hex');\n method.create = function () {\n return new Keccak(bits, padding, bits);\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n return createOutputMethods(method, createOutputMethod, bits, padding);\n };\n\n var createShakeMethod = function (bits, padding) {\n var method = createShakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits) {\n return new Keccak(bits, padding, outputBits);\n };\n method.update = function (message, outputBits) {\n return method.create(outputBits).update(message);\n };\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\n };\n\n var createCshakeMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createCshakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits, n, s) {\n if (!n && !s) {\n return methods['shake' + bits].create(outputBits);\n } else {\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\n }\n };\n method.update = function (message, outputBits, n, s) {\n return method.create(outputBits, n, s).update(message);\n };\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\n };\n\n var createKmacMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createKmacOutputMethod(bits, padding, 'hex');\n method.create = function (key, outputBits, s) {\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\n };\n method.update = function (key, message, outputBits, s) {\n return method.create(key, outputBits, s).update(message);\n };\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\n };\n\n var algorithms = [\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\n ];\n\n var methods = {}, methodNames = [];\n\n for (var i = 0; i < algorithms.length; ++i) {\n var algorithm = algorithms[i];\n var bits = algorithm.bits;\n for (var j = 0; j < bits.length; ++j) {\n var methodName = algorithm.name + '_' + bits[j];\n methodNames.push(methodName);\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\n if (algorithm.name !== 'sha3') {\n var newMethodName = algorithm.name + bits[j];\n methodNames.push(newMethodName);\n methods[newMethodName] = methods[methodName];\n }\n }\n }\n\n function Keccak(bits, padding, outputBits) {\n this.blocks = [];\n this.s = [];\n this.padding = padding;\n this.outputBits = outputBits;\n this.reset = true;\n this.finalized = false;\n this.block = 0;\n this.start = 0;\n this.blockCount = (1600 - (bits << 1)) >> 5;\n this.byteCount = this.blockCount << 2;\n this.outputBlocks = outputBits >> 5;\n this.extraBytes = (outputBits & 31) >> 3;\n\n for (var i = 0; i < 50; ++i) {\n this.s[i] = 0;\n }\n }\n\n Keccak.prototype.update = function (message) {\n if (this.finalized) {\n throw new Error(FINALIZE_ERROR);\n }\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\n\n while (index < length) {\n if (this.reset) {\n this.reset = false;\n blocks[0] = this.block;\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n if (notString) {\n for (i = this.start; index < length && i < byteCount; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < byteCount; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n if (i >= byteCount) {\n this.start = i - byteCount;\n this.block = blocks[blockCount];\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n this.reset = true;\n } else {\n this.start = i;\n }\n }\n return this;\n };\n\n Keccak.prototype.encode = function (x, right) {\n var o = x & 255, n = 1;\n var bytes = [o];\n x = x >> 8;\n o = x & 255;\n while (o > 0) {\n bytes.unshift(o);\n x = x >> 8;\n o = x & 255;\n ++n;\n }\n if (right) {\n bytes.push(n);\n } else {\n bytes.unshift(n);\n }\n this.update(bytes);\n return bytes.length;\n };\n\n Keccak.prototype.encodeString = function (str) {\n var notString, type = typeof str;\n if (type !== 'string') {\n if (type === 'object') {\n if (str === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\n str = new Uint8Array(str);\n } else if (!Array.isArray(str)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var bytes = 0, length = str.length;\n if (notString) {\n bytes = length;\n } else {\n for (var i = 0; i < str.length; ++i) {\n var code = str.charCodeAt(i);\n if (code < 0x80) {\n bytes += 1;\n } else if (code < 0x800) {\n bytes += 2;\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes += 3;\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\n bytes += 4;\n }\n }\n }\n bytes += this.encode(bytes * 8);\n this.update(str);\n return bytes;\n };\n\n Keccak.prototype.bytepad = function (strs, w) {\n var bytes = this.encode(w);\n for (var i = 0; i < strs.length; ++i) {\n bytes += this.encodeString(strs[i]);\n }\n var paddingBytes = w - bytes % w;\n var zeros = [];\n zeros.length = paddingBytes;\n this.update(zeros);\n return this;\n };\n\n Keccak.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\n blocks[i >> 2] |= this.padding[i & 3];\n if (this.lastByteIndex === this.byteCount) {\n blocks[0] = blocks[blockCount];\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n blocks[blockCount - 1] |= 0x80000000;\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n };\n\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var hex = '', block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\n }\n if (j % blockCount === 0) {\n f(s);\n i = 0;\n }\n }\n if (extraBytes) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\n if (extraBytes > 1) {\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\n }\n if (extraBytes > 2) {\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\n }\n }\n return hex;\n };\n\n Keccak.prototype.arrayBuffer = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var bytes = this.outputBits >> 3;\n var buffer;\n if (extraBytes) {\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\n } else {\n buffer = new ArrayBuffer(bytes);\n }\n var array = new Uint32Array(buffer);\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n array[j] = s[i];\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n array[i] = s[i];\n buffer = buffer.slice(0, bytes);\n }\n return buffer;\n };\n\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\n\n Keccak.prototype.digest = Keccak.prototype.array = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var array = [], offset, block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n array[offset + 1] = (block >> 8) & 0xFF;\n array[offset + 2] = (block >> 16) & 0xFF;\n array[offset + 3] = (block >> 24) & 0xFF;\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n if (extraBytes > 1) {\n array[offset + 1] = (block >> 8) & 0xFF;\n }\n if (extraBytes > 2) {\n array[offset + 2] = (block >> 16) & 0xFF;\n }\n }\n return array;\n };\n\n function Kmac(bits, padding, outputBits) {\n Keccak.call(this, bits, padding, outputBits);\n }\n\n Kmac.prototype = new Keccak();\n\n Kmac.prototype.finalize = function () {\n this.encode(this.outputBits, true);\n return Keccak.prototype.finalize.call(this);\n };\n\n var f = function (s) {\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\n for (n = 0; n < 48; n += 2) {\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\n\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\n s[0] ^= h;\n s[1] ^= l;\n s[10] ^= h;\n s[11] ^= l;\n s[20] ^= h;\n s[21] ^= l;\n s[30] ^= h;\n s[31] ^= l;\n s[40] ^= h;\n s[41] ^= l;\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\n s[2] ^= h;\n s[3] ^= l;\n s[12] ^= h;\n s[13] ^= l;\n s[22] ^= h;\n s[23] ^= l;\n s[32] ^= h;\n s[33] ^= l;\n s[42] ^= h;\n s[43] ^= l;\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\n s[4] ^= h;\n s[5] ^= l;\n s[14] ^= h;\n s[15] ^= l;\n s[24] ^= h;\n s[25] ^= l;\n s[34] ^= h;\n s[35] ^= l;\n s[44] ^= h;\n s[45] ^= l;\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\n s[6] ^= h;\n s[7] ^= l;\n s[16] ^= h;\n s[17] ^= l;\n s[26] ^= h;\n s[27] ^= l;\n s[36] ^= h;\n s[37] ^= l;\n s[46] ^= h;\n s[47] ^= l;\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\n s[8] ^= h;\n s[9] ^= l;\n s[18] ^= h;\n s[19] ^= l;\n s[28] ^= h;\n s[29] ^= l;\n s[38] ^= h;\n s[39] ^= l;\n s[48] ^= h;\n s[49] ^= l;\n\n b0 = s[0];\n b1 = s[1];\n b32 = (s[11] << 4) | (s[10] >>> 28);\n b33 = (s[10] << 4) | (s[11] >>> 28);\n b14 = (s[20] << 3) | (s[21] >>> 29);\n b15 = (s[21] << 3) | (s[20] >>> 29);\n b46 = (s[31] << 9) | (s[30] >>> 23);\n b47 = (s[30] << 9) | (s[31] >>> 23);\n b28 = (s[40] << 18) | (s[41] >>> 14);\n b29 = (s[41] << 18) | (s[40] >>> 14);\n b20 = (s[2] << 1) | (s[3] >>> 31);\n b21 = (s[3] << 1) | (s[2] >>> 31);\n b2 = (s[13] << 12) | (s[12] >>> 20);\n b3 = (s[12] << 12) | (s[13] >>> 20);\n b34 = (s[22] << 10) | (s[23] >>> 22);\n b35 = (s[23] << 10) | (s[22] >>> 22);\n b16 = (s[33] << 13) | (s[32] >>> 19);\n b17 = (s[32] << 13) | (s[33] >>> 19);\n b48 = (s[42] << 2) | (s[43] >>> 30);\n b49 = (s[43] << 2) | (s[42] >>> 30);\n b40 = (s[5] << 30) | (s[4] >>> 2);\n b41 = (s[4] << 30) | (s[5] >>> 2);\n b22 = (s[14] << 6) | (s[15] >>> 26);\n b23 = (s[15] << 6) | (s[14] >>> 26);\n b4 = (s[25] << 11) | (s[24] >>> 21);\n b5 = (s[24] << 11) | (s[25] >>> 21);\n b36 = (s[34] << 15) | (s[35] >>> 17);\n b37 = (s[35] << 15) | (s[34] >>> 17);\n b18 = (s[45] << 29) | (s[44] >>> 3);\n b19 = (s[44] << 29) | (s[45] >>> 3);\n b10 = (s[6] << 28) | (s[7] >>> 4);\n b11 = (s[7] << 28) | (s[6] >>> 4);\n b42 = (s[17] << 23) | (s[16] >>> 9);\n b43 = (s[16] << 23) | (s[17] >>> 9);\n b24 = (s[26] << 25) | (s[27] >>> 7);\n b25 = (s[27] << 25) | (s[26] >>> 7);\n b6 = (s[36] << 21) | (s[37] >>> 11);\n b7 = (s[37] << 21) | (s[36] >>> 11);\n b38 = (s[47] << 24) | (s[46] >>> 8);\n b39 = (s[46] << 24) | (s[47] >>> 8);\n b30 = (s[8] << 27) | (s[9] >>> 5);\n b31 = (s[9] << 27) | (s[8] >>> 5);\n b12 = (s[18] << 20) | (s[19] >>> 12);\n b13 = (s[19] << 20) | (s[18] >>> 12);\n b44 = (s[29] << 7) | (s[28] >>> 25);\n b45 = (s[28] << 7) | (s[29] >>> 25);\n b26 = (s[38] << 8) | (s[39] >>> 24);\n b27 = (s[39] << 8) | (s[38] >>> 24);\n b8 = (s[48] << 14) | (s[49] >>> 18);\n b9 = (s[49] << 14) | (s[48] >>> 18);\n\n s[0] = b0 ^ (~b2 & b4);\n s[1] = b1 ^ (~b3 & b5);\n s[10] = b10 ^ (~b12 & b14);\n s[11] = b11 ^ (~b13 & b15);\n s[20] = b20 ^ (~b22 & b24);\n s[21] = b21 ^ (~b23 & b25);\n s[30] = b30 ^ (~b32 & b34);\n s[31] = b31 ^ (~b33 & b35);\n s[40] = b40 ^ (~b42 & b44);\n s[41] = b41 ^ (~b43 & b45);\n s[2] = b2 ^ (~b4 & b6);\n s[3] = b3 ^ (~b5 & b7);\n s[12] = b12 ^ (~b14 & b16);\n s[13] = b13 ^ (~b15 & b17);\n s[22] = b22 ^ (~b24 & b26);\n s[23] = b23 ^ (~b25 & b27);\n s[32] = b32 ^ (~b34 & b36);\n s[33] = b33 ^ (~b35 & b37);\n s[42] = b42 ^ (~b44 & b46);\n s[43] = b43 ^ (~b45 & b47);\n s[4] = b4 ^ (~b6 & b8);\n s[5] = b5 ^ (~b7 & b9);\n s[14] = b14 ^ (~b16 & b18);\n s[15] = b15 ^ (~b17 & b19);\n s[24] = b24 ^ (~b26 & b28);\n s[25] = b25 ^ (~b27 & b29);\n s[34] = b34 ^ (~b36 & b38);\n s[35] = b35 ^ (~b37 & b39);\n s[44] = b44 ^ (~b46 & b48);\n s[45] = b45 ^ (~b47 & b49);\n s[6] = b6 ^ (~b8 & b0);\n s[7] = b7 ^ (~b9 & b1);\n s[16] = b16 ^ (~b18 & b10);\n s[17] = b17 ^ (~b19 & b11);\n s[26] = b26 ^ (~b28 & b20);\n s[27] = b27 ^ (~b29 & b21);\n s[36] = b36 ^ (~b38 & b30);\n s[37] = b37 ^ (~b39 & b31);\n s[46] = b46 ^ (~b48 & b40);\n s[47] = b47 ^ (~b49 & b41);\n s[8] = b8 ^ (~b0 & b2);\n s[9] = b9 ^ (~b1 & b3);\n s[18] = b18 ^ (~b10 & b12);\n s[19] = b19 ^ (~b11 & b13);\n s[28] = b28 ^ (~b20 & b22);\n s[29] = b29 ^ (~b21 & b23);\n s[38] = b38 ^ (~b30 & b32);\n s[39] = b39 ^ (~b31 & b33);\n s[48] = b48 ^ (~b40 & b42);\n s[49] = b49 ^ (~b41 & b43);\n\n s[0] ^= RC[n];\n s[1] ^= RC[n + 1];\n }\n };\n\n if (COMMON_JS) {\n module.exports = methods;\n } else {\n for (i = 0; i < methodNames.length; ++i) {\n root[methodNames[i]] = methods[methodNames[i]];\n }\n if (AMD) {\n define(function () {\n return methods;\n });\n }\n }\n})();\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file soliditySha3.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\nvar _ = require('underscore');\nvar BN = require('bn.js');\nvar utils = require('./utils.js');\nvar _elementaryName = function (name) {\n /*jshint maxcomplexity:false */\n if (name.startsWith('int[')) {\n return 'int256' + name.slice(3);\n }\n else if (name === 'int') {\n return 'int256';\n }\n else if (name.startsWith('uint[')) {\n return 'uint256' + name.slice(4);\n }\n else if (name === 'uint') {\n return 'uint256';\n }\n else if (name.startsWith('fixed[')) {\n return 'fixed128x128' + name.slice(5);\n }\n else if (name === 'fixed') {\n return 'fixed128x128';\n }\n else if (name.startsWith('ufixed[')) {\n return 'ufixed128x128' + name.slice(6);\n }\n else if (name === 'ufixed') {\n return 'ufixed128x128';\n }\n return name;\n};\n// Parse N from type\nvar _parseTypeN = function (type) {\n var typesize = /^\\D+(\\d+).*$/.exec(type);\n return typesize ? parseInt(typesize[1], 10) : null;\n};\n// Parse N from type[]\nvar _parseTypeNArray = function (type) {\n var arraySize = /^\\D+\\d*\\[(\\d+)\\]$/.exec(type);\n return arraySize ? parseInt(arraySize[1], 10) : null;\n};\nvar _parseNumber = function (arg) {\n var type = typeof arg;\n if (type === 'string') {\n if (utils.isHexStrict(arg)) {\n return new BN(arg.replace(/0x/i, ''), 16);\n }\n else {\n return new BN(arg, 10);\n }\n }\n else if (type === 'number') {\n return new BN(arg);\n }\n else if (utils.isBigNumber(arg)) {\n return new BN(arg.toString(10));\n }\n else if (utils.isBN(arg)) {\n return arg;\n }\n else {\n throw new Error(arg + ' is not a number');\n }\n};\nvar _solidityPack = function (type, value, arraySize) {\n /*jshint maxcomplexity:false */\n var size, num;\n type = _elementaryName(type);\n if (type === 'bytes') {\n if (value.replace(/^0x/i, '').length % 2 !== 0) {\n throw new Error('Invalid bytes characters ' + value.length);\n }\n return value;\n }\n else if (type === 'string') {\n return utils.utf8ToHex(value);\n }\n else if (type === 'bool') {\n return value ? '01' : '00';\n }\n else if (type.startsWith('address')) {\n if (arraySize) {\n size = 64;\n }\n else {\n size = 40;\n }\n if (!utils.isAddress(value)) {\n throw new Error(value + ' is not a valid address, or the checksum is invalid.');\n }\n return utils.leftPad(value.toLowerCase(), size);\n }\n size = _parseTypeN(type);\n if (type.startsWith('bytes')) {\n if (!size) {\n throw new Error('bytes[] not yet supported in solidity');\n }\n // must be 32 byte slices when in an array\n if (arraySize) {\n size = 32;\n }\n if (size < 1 || size > 32 || size < value.replace(/^0x/i, '').length / 2) {\n throw new Error('Invalid bytes' + size + ' for ' + value);\n }\n return utils.rightPad(value, size * 2);\n }\n else if (type.startsWith('uint')) {\n if ((size % 8) || (size < 8) || (size > 256)) {\n throw new Error('Invalid uint' + size + ' size');\n }\n num = _parseNumber(value);\n if (num.bitLength() > size) {\n throw new Error('Supplied uint exceeds width: ' + size + ' vs ' + num.bitLength());\n }\n if (num.lt(new BN(0))) {\n throw new Error('Supplied uint ' + num.toString() + ' is negative');\n }\n return size ? utils.leftPad(num.toString('hex'), size / 8 * 2) : num;\n }\n else if (type.startsWith('int')) {\n if ((size % 8) || (size < 8) || (size > 256)) {\n throw new Error('Invalid int' + size + ' size');\n }\n num = _parseNumber(value);\n if (num.bitLength() > size) {\n throw new Error('Supplied int exceeds width: ' + size + ' vs ' + num.bitLength());\n }\n if (num.lt(new BN(0))) {\n return num.toTwos(size).toString('hex');\n }\n else {\n return size ? utils.leftPad(num.toString('hex'), size / 8 * 2) : num;\n }\n }\n else {\n // FIXME: support all other types\n throw new Error('Unsupported or invalid type: ' + type);\n }\n};\nvar _processSolidityEncodePackedArgs = function (arg) {\n /*jshint maxcomplexity:false */\n if (_.isArray(arg)) {\n throw new Error('Autodetection of array types is not supported.');\n }\n var type, value = '';\n var hexArg, arraySize;\n // if type is given\n if (_.isObject(arg) && (arg.hasOwnProperty('v') || arg.hasOwnProperty('t') || arg.hasOwnProperty('value') || arg.hasOwnProperty('type'))) {\n type = arg.hasOwnProperty('t') ? arg.t : arg.type;\n value = arg.hasOwnProperty('v') ? arg.v : arg.value;\n // otherwise try to guess the type\n }\n else {\n type = utils.toHex(arg, true);\n value = utils.toHex(arg);\n if (!type.startsWith('int') && !type.startsWith('uint')) {\n type = 'bytes';\n }\n }\n if ((type.startsWith('int') || type.startsWith('uint')) && typeof value === 'string' && !/^(-)?0x/i.test(value)) {\n value = new BN(value);\n }\n // get the array size\n if (_.isArray(value)) {\n arraySize = _parseTypeNArray(type);\n if (arraySize && value.length !== arraySize) {\n throw new Error(type + ' is not matching the given array ' + JSON.stringify(value));\n }\n else {\n arraySize = value.length;\n }\n }\n if (_.isArray(value)) {\n hexArg = value.map(function (val) {\n return _solidityPack(type, val, arraySize).toString('hex').replace('0x', '');\n });\n return hexArg.join('');\n }\n else {\n hexArg = _solidityPack(type, value, arraySize);\n return hexArg.toString('hex').replace('0x', '');\n }\n};\n/**\n * Hashes solidity values to a sha3 hash using keccak 256\n *\n * @method soliditySha3\n * @return {Object} the sha3\n */\nvar soliditySha3 = function () {\n /*jshint maxcomplexity:false */\n var args = Array.prototype.slice.call(arguments);\n var hexArgs = _.map(args, _processSolidityEncodePackedArgs);\n // console.log(args, hexArgs);\n // console.log('0x'+ hexArgs.join(''));\n return utils.sha3('0x' + hexArgs.join(''));\n};\n/**\n * Hashes solidity values to a sha3 hash using keccak 256 but does return the hash of value `null` instead of `null`\n *\n * @method soliditySha3Raw\n * @return {Object} the sha3\n */\nvar soliditySha3Raw = function () {\n return utils.sha3Raw('0x' + _.map(Array.prototype.slice.call(arguments), _processSolidityEncodePackedArgs).join(''));\n};\n/**\n * Encode packed args to hex\n *\n * @method encodePacked\n * @return {String} the hex encoded arguments\n */\nvar encodePacked = function () {\n /*jshint maxcomplexity:false */\n var args = Array.prototype.slice.call(arguments);\n var hexArgs = _.map(args, _processSolidityEncodePackedArgs);\n return '0x' + hexArgs.join('').toLowerCase();\n};\nmodule.exports = {\n soliditySha3: soliditySha3,\n soliditySha3Raw: soliditySha3Raw,\n encodePacked: encodePacked\n};\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file batch.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\"use strict\";\nvar Jsonrpc = require('./jsonrpc');\nvar errors = require('web3-core-helpers').errors;\nvar Batch = function (requestManager) {\n this.requestManager = requestManager;\n this.requests = [];\n};\n/**\n * Should be called to add create new request to batch request\n *\n * @method add\n * @param {Object} jsonrpc requet object\n */\nBatch.prototype.add = function (request) {\n this.requests.push(request);\n};\n/**\n * Should be called to execute batch request\n *\n * @method execute\n */\nBatch.prototype.execute = function () {\n var requests = this.requests;\n this.requestManager.sendBatch(requests, function (err, results) {\n results = results || [];\n requests.map(function (request, index) {\n return results[index] || {};\n }).forEach(function (result, index) {\n if (requests[index].callback) {\n if (result && result.error) {\n return requests[index].callback(errors.ErrorResponse(result));\n }\n if (!Jsonrpc.isValidResponse(result)) {\n return requests[index].callback(errors.InvalidResponse(result));\n }\n try {\n requests[index].callback(null, requests[index].format ? requests[index].format(result.result) : result.result);\n }\n catch (err) {\n requests[index].callback(err);\n }\n }\n });\n });\n};\nmodule.exports = Batch;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file givenProvider.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar givenProvider = null;\n// ADD GIVEN PROVIDER\n/* jshint ignore:start */\nvar global;\ntry {\n global = Function('return this')();\n}\ncatch (e) {\n global = window;\n}\n// EIP-1193: window.ethereum\nif (typeof global.ethereum !== 'undefined') {\n givenProvider = global.ethereum;\n // Legacy web3.currentProvider\n}\nelse if (typeof global.web3 !== 'undefined' && global.web3.currentProvider) {\n if (global.web3.currentProvider.sendAsync) {\n global.web3.currentProvider.send = global.web3.currentProvider.sendAsync;\n delete global.web3.currentProvider.sendAsync;\n }\n // if connection is 'ipcProviderWrapper', add subscription support\n if (!global.web3.currentProvider.on &&\n global.web3.currentProvider.connection &&\n global.web3.currentProvider.connection.constructor.name === 'ipcProviderWrapper') {\n global.web3.currentProvider.on = function (type, callback) {\n if (typeof callback !== 'function')\n throw new Error('The second parameter callback must be a function.');\n switch (type) {\n case 'data':\n this.connection.on('data', function (data) {\n var result = '';\n data = data.toString();\n try {\n result = JSON.parse(data);\n }\n catch (e) {\n return callback(new Error('Couldn\\'t parse response data' + data));\n }\n // notification\n if (!result.id && result.method.indexOf('_subscription') !== -1) {\n callback(null, result);\n }\n });\n break;\n default:\n this.connection.on(type, callback);\n break;\n }\n };\n }\n givenProvider = global.web3.currentProvider;\n}\n/* jshint ignore:end */\nmodule.exports = givenProvider;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file WebsocketProvider.js\n * @authors: Samuel Furter , Fabian Vogelsteller \n * @date 2019\n */\n'use strict';\nvar EventEmitter = require('eventemitter3');\nvar helpers = require('./helpers.js');\nvar errors = require('web3-core-helpers').errors;\nvar Ws = require('websocket').w3cwebsocket;\n/**\n * @param {string} url\n * @param {Object} options\n *\n * @constructor\n */\nvar WebsocketProvider = function WebsocketProvider(url, options) {\n EventEmitter.call(this);\n options = options || {};\n this.url = url;\n this._customTimeout = options.timeout || 1000 * 15;\n this.headers = options.headers || {};\n this.protocol = options.protocol || undefined;\n this.reconnectOptions = Object.assign({\n auto: false,\n delay: 5000,\n maxAttempts: false,\n onTimeout: false\n }, options.reconnect);\n this.clientConfig = options.clientConfig || undefined; // Allow a custom client configuration\n this.requestOptions = options.requestOptions || undefined; // Allow a custom request options (https://github.com/theturtle32/WebSocket-Node/blob/master/docs/WebSocketClient.md#connectrequesturl-requestedprotocols-origin-headers-requestoptions)\n this.DATA = 'data';\n this.CLOSE = 'close';\n this.ERROR = 'error';\n this.CONNECT = 'connect';\n this.RECONNECT = 'reconnect';\n this.connection = null;\n this.requestQueue = new Map();\n this.responseQueue = new Map();\n this.reconnectAttempts = 0;\n this.reconnecting = false;\n // The w3cwebsocket implementation does not support Basic Auth\n // username/password in the URL. So generate the basic auth header, and\n // pass through with any additional headers supplied in constructor\n var parsedURL = helpers.parseURL(url);\n if (parsedURL.username && parsedURL.password) {\n this.headers.authorization = 'Basic ' + helpers.btoa(parsedURL.username + ':' + parsedURL.password);\n }\n // When all node core implementations that do not have the\n // WHATWG compatible URL parser go out of service this line can be removed.\n if (parsedURL.auth) {\n this.headers.authorization = 'Basic ' + helpers.btoa(parsedURL.auth);\n }\n // make property `connected` which will return the current connection status\n Object.defineProperty(this, 'connected', {\n get: function () {\n return this.connection && this.connection.readyState === this.connection.OPEN;\n },\n enumerable: true\n });\n this.connect();\n};\n// Inherit from EventEmitter\nWebsocketProvider.prototype = Object.create(EventEmitter.prototype);\nWebsocketProvider.prototype.constructor = WebsocketProvider;\n/**\n * Connects to the configured node\n *\n * @method connect\n *\n * @returns {void}\n */\nWebsocketProvider.prototype.connect = function () {\n this.connection = new Ws(this.url, this.protocol, undefined, this.headers, this.requestOptions, this.clientConfig);\n this._addSocketListeners();\n};\n/**\n * Listener for the `data` event of the underlying WebSocket object\n *\n * @method _onMessage\n *\n * @returns {void}\n */\nWebsocketProvider.prototype._onMessage = function (e) {\n var _this = this;\n this._parseResponse((typeof e.data === 'string') ? e.data : '').forEach(function (result) {\n if (result.method && result.method.indexOf('_subscription') !== -1) {\n _this.emit(_this.DATA, result);\n return;\n }\n var id = result.id;\n // get the id which matches the returned id\n if (Array.isArray(result)) {\n id = result[0].id;\n }\n if (_this.responseQueue.has(id)) {\n if (_this.responseQueue.get(id).callback !== undefined) {\n _this.responseQueue.get(id).callback(false, result);\n }\n _this.responseQueue.delete(id);\n }\n });\n};\n/**\n * Listener for the `open` event of the underlying WebSocket object\n *\n * @method _onConnect\n *\n * @returns {void}\n */\nWebsocketProvider.prototype._onConnect = function () {\n this.emit(this.CONNECT);\n this.reconnectAttempts = 0;\n this.reconnecting = false;\n if (this.requestQueue.size > 0) {\n var _this = this;\n this.requestQueue.forEach(function (request, key) {\n _this.send(request.payload, request.callback);\n _this.requestQueue.delete(key);\n });\n }\n};\n/**\n * Listener for the `close` event of the underlying WebSocket object\n *\n * @method _onClose\n *\n * @returns {void}\n */\nWebsocketProvider.prototype._onClose = function (event) {\n var _this = this;\n if (this.reconnectOptions.auto && (![1000, 1001].includes(event.code) || event.wasClean === false)) {\n this.reconnect();\n return;\n }\n this.emit(this.CLOSE, event);\n if (this.requestQueue.size > 0) {\n this.requestQueue.forEach(function (request, key) {\n request.callback(errors.ConnectionNotOpenError(event));\n _this.requestQueue.delete(key);\n });\n }\n if (this.responseQueue.size > 0) {\n this.responseQueue.forEach(function (request, key) {\n request.callback(errors.InvalidConnection('on WS', event));\n _this.responseQueue.delete(key);\n });\n }\n this._removeSocketListeners();\n this.removeAllListeners();\n};\n/**\n * Will add the required socket listeners\n *\n * @method _addSocketListeners\n *\n * @returns {void}\n */\nWebsocketProvider.prototype._addSocketListeners = function () {\n this.connection.addEventListener('message', this._onMessage.bind(this));\n this.connection.addEventListener('open', this._onConnect.bind(this));\n this.connection.addEventListener('close', this._onClose.bind(this));\n};\n/**\n * Will remove all socket listeners\n *\n * @method _removeSocketListeners\n *\n * @returns {void}\n */\nWebsocketProvider.prototype._removeSocketListeners = function () {\n this.connection.removeEventListener('message', this._onMessage);\n this.connection.removeEventListener('open', this._onConnect);\n this.connection.removeEventListener('close', this._onClose);\n};\n/**\n * Will parse the response and make an array out of it.\n *\n * @method _parseResponse\n *\n * @param {String} data\n *\n * @returns {Array}\n */\nWebsocketProvider.prototype._parseResponse = function (data) {\n var _this = this, returnValues = [];\n // DE-CHUNKER\n var dechunkedData = data\n .replace(/\\}[\\n\\r]?\\{/g, '}|--|{') // }{\n .replace(/\\}\\][\\n\\r]?\\[\\{/g, '}]|--|[{') // }][{\n .replace(/\\}[\\n\\r]?\\[\\{/g, '}|--|[{') // }[{\n .replace(/\\}\\][\\n\\r]?\\{/g, '}]|--|{') // }]{\n .split('|--|');\n dechunkedData.forEach(function (data) {\n // prepend the last chunk\n if (_this.lastChunk)\n data = _this.lastChunk + data;\n var result = null;\n try {\n result = JSON.parse(data);\n }\n catch (e) {\n _this.lastChunk = data;\n // start timeout to cancel all requests\n clearTimeout(_this.lastChunkTimeout);\n _this.lastChunkTimeout = setTimeout(function () {\n if (_this.reconnectOptions.auto && _this.reconnectOptions.onTimeout) {\n _this.reconnect();\n return;\n }\n _this.emit(_this.ERROR, errors.ConnectionTimeout(_this._customTimeout));\n if (_this.requestQueue.size > 0) {\n _this.requestQueue.forEach(function (request, key) {\n request.callback(errors.ConnectionTimeout(_this._customTimeout));\n _this.requestQueue.delete(key);\n });\n }\n }, _this._customTimeout);\n return;\n }\n // cancel timeout and set chunk to null\n clearTimeout(_this.lastChunkTimeout);\n _this.lastChunk = null;\n if (result)\n returnValues.push(result);\n });\n return returnValues;\n};\n/**\n * Does check if the provider is connecting and will add it to the queue or will send it directly\n *\n * @method send\n *\n * @param {Object} payload\n * @param {Function} callback\n *\n * @returns {void}\n */\nWebsocketProvider.prototype.send = function (payload, callback) {\n var _this = this;\n var id = payload.id;\n var request = { payload: payload, callback: callback };\n if (Array.isArray(payload)) {\n id = payload[0].id;\n }\n if (this.connection.readyState === this.connection.CONNECTING || this.reconnecting) {\n this.requestQueue.set(id, request);\n return;\n }\n if (this.connection.readyState !== this.connection.OPEN) {\n this.requestQueue.delete(id);\n this.emit(this.ERROR, errors.ConnectionNotOpenError());\n request.callback(errors.ConnectionNotOpenError());\n return;\n }\n this.responseQueue.set(id, request);\n this.requestQueue.delete(id);\n try {\n this.connection.send(JSON.stringify(request.payload));\n }\n catch (error) {\n request.callback(error);\n _this.responseQueue.delete(id);\n }\n};\n/**\n * Resets the providers, clears all callbacks\n *\n * @method reset\n *\n * @returns {void}\n */\nWebsocketProvider.prototype.reset = function () {\n this.responseQueue.clear();\n this.requestQueue.clear();\n this.removeAllListeners();\n this._removeSocketListeners();\n this._addSocketListeners();\n};\n/**\n * Closes the current connection with the given code and reason arguments\n *\n * @method disconnect\n *\n * @param {number} code\n * @param {string} reason\n *\n * @returns {void}\n */\nWebsocketProvider.prototype.disconnect = function (code, reason) {\n this._removeSocketListeners();\n this.connection.close(code || 1000, reason);\n};\n/**\n * Returns the desired boolean.\n *\n * @method supportsSubscriptions\n *\n * @returns {boolean}\n */\nWebsocketProvider.prototype.supportsSubscriptions = function () {\n return true;\n};\n/**\n * Removes the listeners and reconnects to the socket.\n *\n * @method reconnect\n *\n * @returns {void}\n */\nWebsocketProvider.prototype.reconnect = function () {\n var _this = this;\n this.reconnecting = true;\n if (this.responseQueue.size > 0) {\n this.responseQueue.forEach(function (request, key) {\n request.callback(errors.PendingRequestsOnReconnectingError());\n _this.responseQueue.delete(key);\n });\n }\n if (!this.reconnectOptions.maxAttempts ||\n this.reconnectAttempts < this.reconnectOptions.maxAttempts) {\n setTimeout(function () {\n _this.reconnectAttempts++;\n _this._removeSocketListeners();\n _this.emit(_this.RECONNECT, _this.reconnectAttempts);\n _this.connect();\n }, this.reconnectOptions.delay);\n return;\n }\n this.emit(this.ERROR, errors.MaxAttemptsReachedOnReconnectingError());\n this.reconnecting = false;\n if (this.requestQueue.size > 0) {\n this.requestQueue.forEach(function (request, key) {\n request.callback(errors.MaxAttemptsReachedOnReconnectingError());\n _this.requestQueue.delete(key);\n });\n }\n};\nmodule.exports = WebsocketProvider;\n","var isNode = Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\nvar isRN = typeof navigator !== 'undefined' && navigator.product === 'ReactNative';\nvar _btoa = null;\nvar helpers = null;\nif (isNode || isRN) {\n _btoa = function (str) {\n return Buffer.from(str).toString('base64');\n };\n var url = require('url');\n if (url.URL) {\n // Use the new Node 6+ API for parsing URLs that supports username/password\n var newURL = url.URL;\n helpers = function (url) {\n return new newURL(url);\n };\n }\n else {\n // Web3 supports Node.js 5, so fall back to the legacy URL API if necessary\n helpers = require('url').parse;\n }\n}\nelse {\n _btoa = btoa.bind(window);\n helpers = function (url) {\n return new URL(url);\n };\n}\nmodule.exports = {\n parseURL: helpers,\n btoa: _btoa\n};\n","'use strict';\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n","var _globalThis;\ntry {\n\t_globalThis = require('es5-ext/global');\n} catch (error) {\n} finally {\n\tif (!_globalThis && typeof window !== 'undefined') { _globalThis = window; }\n\tif (!_globalThis) { throw new Error('Could not determine global this'); }\n}\n\nvar NativeWebSocket = _globalThis.WebSocket || _globalThis.MozWebSocket;\nvar websocket_version = require('./version');\n\n\n/**\n * Expose a W3C WebSocket class with just one or two arguments.\n */\nfunction W3CWebSocket(uri, protocols) {\n\tvar native_instance;\n\n\tif (protocols) {\n\t\tnative_instance = new NativeWebSocket(uri, protocols);\n\t}\n\telse {\n\t\tnative_instance = new NativeWebSocket(uri);\n\t}\n\n\t/**\n\t * 'native_instance' is an instance of nativeWebSocket (the browser's WebSocket\n\t * class). Since it is an Object it will be returned as it is when creating an\n\t * instance of W3CWebSocket via 'new W3CWebSocket()'.\n\t *\n\t * ECMAScript 5: http://bclary.com/2004/11/07/#a-13.2.2\n\t */\n\treturn native_instance;\n}\nif (NativeWebSocket) {\n\t['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'].forEach(function(prop) {\n\t\tObject.defineProperty(W3CWebSocket, prop, {\n\t\t\tget: function() { return NativeWebSocket[prop]; }\n\t\t});\n\t});\n}\n\n/**\n * Module exports.\n */\nmodule.exports = {\n 'w3cwebsocket' : NativeWebSocket ? W3CWebSocket : null,\n 'version' : websocket_version\n};\n","module.exports = (function () {\n\tif (this) return this;\n\n\t// Unexpected strict mode (may happen if e.g. bundled into ESM module) be nice\n\n\t// Thanks @mathiasbynens -> https://mathiasbynens.be/notes/globalthis\n\t// In all ES5 engines global object inherits from Object.prototype\n\t// (if you approached one that doesn't please report)\n\tObject.defineProperty(Object.prototype, \"__global__\", {\n\t\tget: function () { return this; },\n\t\tconfigurable: true\n\t});\n\ttry { return __global__; }\n\tfinally { delete Object.prototype.__global__; }\n})();\n","module.exports = require('../package.json').version;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file httpprovider.js\n * @authors:\n * Marek Kotewicz \n * Marian Oancea\n * Fabian Vogelsteller \n * @date 2015\n */\nvar errors = require('web3-core-helpers').errors;\nvar XHR2 = require('xhr2-cookies').XMLHttpRequest; // jshint ignore: line\nvar http = require('http');\nvar https = require('https');\n/**\n * HttpProvider should be used to send rpc calls over http\n */\nvar HttpProvider = function HttpProvider(host, options) {\n options = options || {};\n this.withCredentials = options.withCredentials || false;\n this.timeout = options.timeout || 0;\n this.headers = options.headers;\n this.agent = options.agent;\n this.connected = false;\n // keepAlive is true unless explicitly set to false\n const keepAlive = options.keepAlive !== false;\n this.host = host || 'http://localhost:8545';\n if (!this.agent) {\n if (this.host.substring(0, 5) === \"https\") {\n this.httpsAgent = new https.Agent({ keepAlive });\n }\n else {\n this.httpAgent = new http.Agent({ keepAlive });\n }\n }\n};\nHttpProvider.prototype._prepareRequest = function () {\n var request;\n // the current runtime is a browser\n if (typeof XMLHttpRequest !== 'undefined') {\n request = new XMLHttpRequest();\n }\n else {\n request = new XHR2();\n var agents = { httpsAgent: this.httpsAgent, httpAgent: this.httpAgent, baseUrl: this.baseUrl };\n if (this.agent) {\n agents.httpsAgent = this.agent.https;\n agents.httpAgent = this.agent.http;\n agents.baseUrl = this.agent.baseUrl;\n }\n request.nodejsSet(agents);\n }\n request.open('POST', this.host, true);\n request.setRequestHeader('Content-Type', 'application/json');\n request.timeout = this.timeout;\n request.withCredentials = this.withCredentials;\n if (this.headers) {\n this.headers.forEach(function (header) {\n request.setRequestHeader(header.name, header.value);\n });\n }\n return request;\n};\n/**\n * Should be used to make async request\n *\n * @method send\n * @param {Object} payload\n * @param {Function} callback triggered on end with (err, result)\n */\nHttpProvider.prototype.send = function (payload, callback) {\n var _this = this;\n var request = this._prepareRequest();\n request.onreadystatechange = function () {\n if (request.readyState === 4 && request.timeout !== 1) {\n var result = request.responseText;\n var error = null;\n try {\n result = JSON.parse(result);\n }\n catch (e) {\n error = errors.InvalidResponse(request.responseText);\n }\n _this.connected = true;\n callback(error, result);\n }\n };\n request.ontimeout = function () {\n _this.connected = false;\n callback(errors.ConnectionTimeout(this.timeout));\n };\n try {\n request.send(JSON.stringify(payload));\n }\n catch (error) {\n this.connected = false;\n callback(errors.InvalidConnection(this.host));\n }\n};\nHttpProvider.prototype.disconnect = function () {\n //NO OP\n};\n/**\n * Returns the desired boolean.\n *\n * @method supportsSubscriptions\n * @returns {boolean}\n */\nHttpProvider.prototype.supportsSubscriptions = function () {\n return false;\n};\nmodule.exports = HttpProvider;\n","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./xml-http-request\"));\nvar xml_http_request_event_target_1 = require(\"./xml-http-request-event-target\");\nexports.XMLHttpRequestEventTarget = xml_http_request_event_target_1.XMLHttpRequestEventTarget;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar os = require(\"os\");\nvar url = require(\"url\");\nvar progress_event_1 = require(\"./progress-event\");\nvar errors_1 = require(\"./errors\");\nvar xml_http_request_event_target_1 = require(\"./xml-http-request-event-target\");\nvar xml_http_request_upload_1 = require(\"./xml-http-request-upload\");\nvar Cookie = require(\"cookiejar\");\nvar XMLHttpRequest = /** @class */ (function (_super) {\n __extends(XMLHttpRequest, _super);\n function XMLHttpRequest(options) {\n if (options === void 0) { options = {}; }\n var _this = _super.call(this) || this;\n _this.UNSENT = XMLHttpRequest.UNSENT;\n _this.OPENED = XMLHttpRequest.OPENED;\n _this.HEADERS_RECEIVED = XMLHttpRequest.HEADERS_RECEIVED;\n _this.LOADING = XMLHttpRequest.LOADING;\n _this.DONE = XMLHttpRequest.DONE;\n _this.onreadystatechange = null;\n _this.readyState = XMLHttpRequest.UNSENT;\n _this.response = null;\n _this.responseText = '';\n _this.responseType = '';\n _this.status = 0; // TODO: UNSENT?\n _this.statusText = '';\n _this.timeout = 0;\n _this.upload = new xml_http_request_upload_1.XMLHttpRequestUpload();\n _this.responseUrl = '';\n _this.withCredentials = false;\n _this._method = null;\n _this._url = null;\n _this._sync = false;\n _this._headers = {};\n _this._loweredHeaders = {};\n _this._mimeOverride = null; // TODO: is type right?\n _this._request = null;\n _this._response = null;\n _this._responseParts = null;\n _this._responseHeaders = null;\n _this._aborting = null; // TODO: type?\n _this._error = null; // TODO: type?\n _this._loadedBytes = 0;\n _this._totalBytes = 0;\n _this._lengthComputable = false;\n _this._restrictedMethods = { CONNECT: true, TRACE: true, TRACK: true };\n _this._restrictedHeaders = {\n 'accept-charset': true,\n 'accept-encoding': true,\n 'access-control-request-headers': true,\n 'access-control-request-method': true,\n connection: true,\n 'content-length': true,\n cookie: true,\n cookie2: true,\n date: true,\n dnt: true,\n expect: true,\n host: true,\n 'keep-alive': true,\n origin: true,\n referer: true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n 'user-agent': true,\n via: true\n };\n _this._privateHeaders = { 'set-cookie': true, 'set-cookie2': true };\n _this._userAgent = \"Mozilla/5.0 (\" + os.type() + \" \" + os.arch() + \") node.js/\" + process.versions.node + \" v8/\" + process.versions.v8;\n _this._anonymous = options.anon || false;\n return _this;\n }\n XMLHttpRequest.prototype.open = function (method, url, async, user, password) {\n if (async === void 0) { async = true; }\n method = method.toUpperCase();\n if (this._restrictedMethods[method]) {\n throw new XMLHttpRequest.SecurityError(\"HTTP method \" + method + \" is not allowed in XHR\");\n }\n ;\n var xhrUrl = this._parseUrl(url, user, password);\n if (this.readyState === XMLHttpRequest.HEADERS_RECEIVED || this.readyState === XMLHttpRequest.LOADING) {\n // TODO(pwnall): terminate abort(), terminate send()\n }\n this._method = method;\n this._url = xhrUrl;\n this._sync = !async;\n this._headers = {};\n this._loweredHeaders = {};\n this._mimeOverride = null;\n this._setReadyState(XMLHttpRequest.OPENED);\n this._request = null;\n this._response = null;\n this.status = 0;\n this.statusText = '';\n this._responseParts = [];\n this._responseHeaders = null;\n this._loadedBytes = 0;\n this._totalBytes = 0;\n this._lengthComputable = false;\n };\n XMLHttpRequest.prototype.setRequestHeader = function (name, value) {\n if (this.readyState !== XMLHttpRequest.OPENED) {\n throw new XMLHttpRequest.InvalidStateError('XHR readyState must be OPENED');\n }\n var loweredName = name.toLowerCase();\n if (this._restrictedHeaders[loweredName] || /^sec-/.test(loweredName) || /^proxy-/.test(loweredName)) {\n console.warn(\"Refused to set unsafe header \\\"\" + name + \"\\\"\");\n return;\n }\n value = value.toString();\n if (this._loweredHeaders[loweredName] != null) {\n name = this._loweredHeaders[loweredName];\n this._headers[name] = this._headers[name] + \", \" + value;\n }\n else {\n this._loweredHeaders[loweredName] = name;\n this._headers[name] = value;\n }\n };\n XMLHttpRequest.prototype.send = function (data) {\n if (this.readyState !== XMLHttpRequest.OPENED) {\n throw new XMLHttpRequest.InvalidStateError('XHR readyState must be OPENED');\n }\n if (this._request) {\n throw new XMLHttpRequest.InvalidStateError('send() already called');\n }\n switch (this._url.protocol) {\n case 'file:':\n return this._sendFile(data);\n case 'http:':\n case 'https:':\n return this._sendHttp(data);\n default:\n throw new XMLHttpRequest.NetworkError(\"Unsupported protocol \" + this._url.protocol);\n }\n };\n XMLHttpRequest.prototype.abort = function () {\n if (this._request == null) {\n return;\n }\n this._request.abort();\n this._setError();\n this._dispatchProgress('abort');\n this._dispatchProgress('loadend');\n };\n XMLHttpRequest.prototype.getResponseHeader = function (name) {\n if (this._responseHeaders == null || name == null) {\n return null;\n }\n var loweredName = name.toLowerCase();\n return this._responseHeaders.hasOwnProperty(loweredName)\n ? this._responseHeaders[name.toLowerCase()]\n : null;\n };\n XMLHttpRequest.prototype.getAllResponseHeaders = function () {\n var _this = this;\n if (this._responseHeaders == null) {\n return '';\n }\n return Object.keys(this._responseHeaders).map(function (key) { return key + \": \" + _this._responseHeaders[key]; }).join('\\r\\n');\n };\n XMLHttpRequest.prototype.overrideMimeType = function (mimeType) {\n if (this.readyState === XMLHttpRequest.LOADING || this.readyState === XMLHttpRequest.DONE) {\n throw new XMLHttpRequest.InvalidStateError('overrideMimeType() not allowed in LOADING or DONE');\n }\n this._mimeOverride = mimeType.toLowerCase();\n };\n XMLHttpRequest.prototype.nodejsSet = function (options) {\n this.nodejsHttpAgent = options.httpAgent || this.nodejsHttpAgent;\n this.nodejsHttpsAgent = options.httpsAgent || this.nodejsHttpsAgent;\n if (options.hasOwnProperty('baseUrl')) {\n if (options.baseUrl != null) {\n var parsedUrl = url.parse(options.baseUrl, false, true);\n if (!parsedUrl.protocol) {\n throw new XMLHttpRequest.SyntaxError(\"baseUrl must be an absolute URL\");\n }\n }\n this.nodejsBaseUrl = options.baseUrl;\n }\n };\n XMLHttpRequest.nodejsSet = function (options) {\n XMLHttpRequest.prototype.nodejsSet(options);\n };\n XMLHttpRequest.prototype._setReadyState = function (readyState) {\n this.readyState = readyState;\n this.dispatchEvent(new progress_event_1.ProgressEvent('readystatechange'));\n };\n XMLHttpRequest.prototype._sendFile = function (data) {\n // TODO\n throw new Error('Protocol file: not implemented');\n };\n XMLHttpRequest.prototype._sendHttp = function (data) {\n if (this._sync) {\n throw new Error('Synchronous XHR processing not implemented');\n }\n if (data && (this._method === 'GET' || this._method === 'HEAD')) {\n console.warn(\"Discarding entity body for \" + this._method + \" requests\");\n data = null;\n }\n else {\n data = data || '';\n }\n this.upload._setData(data);\n this._finalizeHeaders();\n this._sendHxxpRequest();\n };\n XMLHttpRequest.prototype._sendHxxpRequest = function () {\n var _this = this;\n if (this.withCredentials) {\n var cookie = XMLHttpRequest.cookieJar\n .getCookies(Cookie.CookieAccessInfo(this._url.hostname, this._url.pathname, this._url.protocol === 'https:')).toValueString();\n this._headers.cookie = this._headers.cookie2 = cookie;\n }\n var _a = this._url.protocol === 'http:' ? [http, this.nodejsHttpAgent] : [https, this.nodejsHttpsAgent], hxxp = _a[0], agent = _a[1];\n var requestMethod = hxxp.request.bind(hxxp);\n var request = requestMethod({\n hostname: this._url.hostname,\n port: +this._url.port,\n path: this._url.path,\n auth: this._url.auth,\n method: this._method,\n headers: this._headers,\n agent: agent\n });\n this._request = request;\n if (this.timeout) {\n request.setTimeout(this.timeout, function () { return _this._onHttpTimeout(request); });\n }\n request.on('response', function (response) { return _this._onHttpResponse(request, response); });\n request.on('error', function (error) { return _this._onHttpRequestError(request, error); });\n this.upload._startUpload(request);\n if (this._request === request) {\n this._dispatchProgress('loadstart');\n }\n };\n XMLHttpRequest.prototype._finalizeHeaders = function () {\n this._headers = __assign({}, this._headers, { Connection: 'keep-alive', Host: this._url.host, 'User-Agent': this._userAgent }, this._anonymous ? { Referer: 'about:blank' } : {});\n this.upload._finalizeHeaders(this._headers, this._loweredHeaders);\n };\n XMLHttpRequest.prototype._onHttpResponse = function (request, response) {\n var _this = this;\n if (this._request !== request) {\n return;\n }\n if (this.withCredentials && (response.headers['set-cookie'] || response.headers['set-cookie2'])) {\n XMLHttpRequest.cookieJar\n .setCookies(response.headers['set-cookie'] || response.headers['set-cookie2']);\n }\n if ([301, 302, 303, 307, 308].indexOf(response.statusCode) >= 0) {\n this._url = this._parseUrl(response.headers.location);\n this._method = 'GET';\n if (this._loweredHeaders['content-type']) {\n delete this._headers[this._loweredHeaders['content-type']];\n delete this._loweredHeaders['content-type'];\n }\n if (this._headers['Content-Type'] != null) {\n delete this._headers['Content-Type'];\n }\n delete this._headers['Content-Length'];\n this.upload._reset();\n this._finalizeHeaders();\n this._sendHxxpRequest();\n return;\n }\n this._response = response;\n this._response.on('data', function (data) { return _this._onHttpResponseData(response, data); });\n this._response.on('end', function () { return _this._onHttpResponseEnd(response); });\n this._response.on('close', function () { return _this._onHttpResponseClose(response); });\n this.responseUrl = this._url.href.split('#')[0];\n this.status = response.statusCode;\n this.statusText = http.STATUS_CODES[this.status];\n this._parseResponseHeaders(response);\n var lengthString = this._responseHeaders['content-length'] || '';\n this._totalBytes = +lengthString;\n this._lengthComputable = !!lengthString;\n this._setReadyState(XMLHttpRequest.HEADERS_RECEIVED);\n };\n XMLHttpRequest.prototype._onHttpResponseData = function (response, data) {\n if (this._response !== response) {\n return;\n }\n this._responseParts.push(new Buffer(data));\n this._loadedBytes += data.length;\n if (this.readyState !== XMLHttpRequest.LOADING) {\n this._setReadyState(XMLHttpRequest.LOADING);\n }\n this._dispatchProgress('progress');\n };\n XMLHttpRequest.prototype._onHttpResponseEnd = function (response) {\n if (this._response !== response) {\n return;\n }\n this._parseResponse();\n this._request = null;\n this._response = null;\n this._setReadyState(XMLHttpRequest.DONE);\n this._dispatchProgress('load');\n this._dispatchProgress('loadend');\n };\n XMLHttpRequest.prototype._onHttpResponseClose = function (response) {\n if (this._response !== response) {\n return;\n }\n var request = this._request;\n this._setError();\n request.abort();\n this._setReadyState(XMLHttpRequest.DONE);\n this._dispatchProgress('error');\n this._dispatchProgress('loadend');\n };\n XMLHttpRequest.prototype._onHttpTimeout = function (request) {\n if (this._request !== request) {\n return;\n }\n this._setError();\n request.abort();\n this._setReadyState(XMLHttpRequest.DONE);\n this._dispatchProgress('timeout');\n this._dispatchProgress('loadend');\n };\n XMLHttpRequest.prototype._onHttpRequestError = function (request, error) {\n if (this._request !== request) {\n return;\n }\n this._setError();\n request.abort();\n this._setReadyState(XMLHttpRequest.DONE);\n this._dispatchProgress('error');\n this._dispatchProgress('loadend');\n };\n XMLHttpRequest.prototype._dispatchProgress = function (eventType) {\n var event = new XMLHttpRequest.ProgressEvent(eventType);\n event.lengthComputable = this._lengthComputable;\n event.loaded = this._loadedBytes;\n event.total = this._totalBytes;\n this.dispatchEvent(event);\n };\n XMLHttpRequest.prototype._setError = function () {\n this._request = null;\n this._response = null;\n this._responseHeaders = null;\n this._responseParts = null;\n };\n XMLHttpRequest.prototype._parseUrl = function (urlString, user, password) {\n var absoluteUrl = this.nodejsBaseUrl == null ? urlString : url.resolve(this.nodejsBaseUrl, urlString);\n var xhrUrl = url.parse(absoluteUrl, false, true);\n xhrUrl.hash = null;\n var _a = (xhrUrl.auth || '').split(':'), xhrUser = _a[0], xhrPassword = _a[1];\n if (xhrUser || xhrPassword || user || password) {\n xhrUrl.auth = (user || xhrUser || '') + \":\" + (password || xhrPassword || '');\n }\n return xhrUrl;\n };\n XMLHttpRequest.prototype._parseResponseHeaders = function (response) {\n this._responseHeaders = {};\n for (var name_1 in response.headers) {\n var loweredName = name_1.toLowerCase();\n if (this._privateHeaders[loweredName]) {\n continue;\n }\n this._responseHeaders[loweredName] = response.headers[name_1];\n }\n if (this._mimeOverride != null) {\n this._responseHeaders['content-type'] = this._mimeOverride;\n }\n };\n XMLHttpRequest.prototype._parseResponse = function () {\n var buffer = Buffer.concat(this._responseParts);\n this._responseParts = null;\n switch (this.responseType) {\n case 'json':\n this.responseText = null;\n try {\n this.response = JSON.parse(buffer.toString('utf-8'));\n }\n catch (_a) {\n this.response = null;\n }\n return;\n case 'buffer':\n this.responseText = null;\n this.response = buffer;\n return;\n case 'arraybuffer':\n this.responseText = null;\n var arrayBuffer = new ArrayBuffer(buffer.length);\n var view = new Uint8Array(arrayBuffer);\n for (var i = 0; i < buffer.length; i++) {\n view[i] = buffer[i];\n }\n this.response = arrayBuffer;\n return;\n case 'text':\n default:\n try {\n this.responseText = buffer.toString(this._parseResponseEncoding());\n }\n catch (_b) {\n this.responseText = buffer.toString('binary');\n }\n this.response = this.responseText;\n }\n };\n XMLHttpRequest.prototype._parseResponseEncoding = function () {\n return /;\\s*charset=(.*)$/.exec(this._responseHeaders['content-type'] || '')[1] || 'utf-8';\n };\n XMLHttpRequest.ProgressEvent = progress_event_1.ProgressEvent;\n XMLHttpRequest.InvalidStateError = errors_1.InvalidStateError;\n XMLHttpRequest.NetworkError = errors_1.NetworkError;\n XMLHttpRequest.SecurityError = errors_1.SecurityError;\n XMLHttpRequest.SyntaxError = errors_1.SyntaxError;\n XMLHttpRequest.XMLHttpRequestUpload = xml_http_request_upload_1.XMLHttpRequestUpload;\n XMLHttpRequest.UNSENT = 0;\n XMLHttpRequest.OPENED = 1;\n XMLHttpRequest.HEADERS_RECEIVED = 2;\n XMLHttpRequest.LOADING = 3;\n XMLHttpRequest.DONE = 4;\n XMLHttpRequest.cookieJar = Cookie.CookieJar();\n return XMLHttpRequest;\n}(xml_http_request_event_target_1.XMLHttpRequestEventTarget));\nexports.XMLHttpRequest = XMLHttpRequest;\nXMLHttpRequest.prototype.nodejsHttpAgent = http.globalAgent;\nXMLHttpRequest.prototype.nodejsHttpsAgent = https.globalAgent;\nXMLHttpRequest.prototype.nodejsBaseUrl = null;\n//# sourceMappingURL=xml-http-request.js.map","var capability = require('./capability')\nvar inherits = require('inherits')\nvar response = require('./response')\nvar stream = require('readable-stream')\nvar toArrayBuffer = require('to-arraybuffer')\n\nvar IncomingMessage = response.IncomingMessage\nvar rStates = response.readyStates\n\nfunction decideMode (preferBinary, useFetch) {\n\tif (capability.fetch && useFetch) {\n\t\treturn 'fetch'\n\t} else if (capability.mozchunkedarraybuffer) {\n\t\treturn 'moz-chunked-arraybuffer'\n\t} else if (capability.msstream) {\n\t\treturn 'ms-stream'\n\t} else if (capability.arraybuffer && preferBinary) {\n\t\treturn 'arraybuffer'\n\t} else if (capability.vbArray && preferBinary) {\n\t\treturn 'text:vbarray'\n\t} else {\n\t\treturn 'text'\n\t}\n}\n\nvar ClientRequest = module.exports = function (opts) {\n\tvar self = this\n\tstream.Writable.call(self)\n\n\tself._opts = opts\n\tself._body = []\n\tself._headers = {}\n\tif (opts.auth)\n\t\tself.setHeader('Authorization', 'Basic ' + new Buffer(opts.auth).toString('base64'))\n\tObject.keys(opts.headers).forEach(function (name) {\n\t\tself.setHeader(name, opts.headers[name])\n\t})\n\n\tvar preferBinary\n\tvar useFetch = true\n\tif (opts.mode === 'disable-fetch' || ('requestTimeout' in opts && !capability.abortController)) {\n\t\t// If the use of XHR should be preferred. Not typically needed.\n\t\tuseFetch = false\n\t\tpreferBinary = true\n\t} else if (opts.mode === 'prefer-streaming') {\n\t\t// If streaming is a high priority but binary compatibility and\n\t\t// the accuracy of the 'content-type' header aren't\n\t\tpreferBinary = false\n\t} else if (opts.mode === 'allow-wrong-content-type') {\n\t\t// If streaming is more important than preserving the 'content-type' header\n\t\tpreferBinary = !capability.overrideMimeType\n\t} else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {\n\t\t// Use binary if text streaming may corrupt data or the content-type header, or for speed\n\t\tpreferBinary = true\n\t} else {\n\t\tthrow new Error('Invalid value for opts.mode')\n\t}\n\tself._mode = decideMode(preferBinary, useFetch)\n\tself._fetchTimer = null\n\n\tself.on('finish', function () {\n\t\tself._onFinish()\n\t})\n}\n\ninherits(ClientRequest, stream.Writable)\n\nClientRequest.prototype.setHeader = function (name, value) {\n\tvar self = this\n\tvar lowerName = name.toLowerCase()\n\t// This check is not necessary, but it prevents warnings from browsers about setting unsafe\n\t// headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but\n\t// http-browserify did it, so I will too.\n\tif (unsafeHeaders.indexOf(lowerName) !== -1)\n\t\treturn\n\n\tself._headers[lowerName] = {\n\t\tname: name,\n\t\tvalue: value\n\t}\n}\n\nClientRequest.prototype.getHeader = function (name) {\n\tvar header = this._headers[name.toLowerCase()]\n\tif (header)\n\t\treturn header.value\n\treturn null\n}\n\nClientRequest.prototype.removeHeader = function (name) {\n\tvar self = this\n\tdelete self._headers[name.toLowerCase()]\n}\n\nClientRequest.prototype._onFinish = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\tvar opts = self._opts\n\n\tvar headersObj = self._headers\n\tvar body = null\n\tif (opts.method !== 'GET' && opts.method !== 'HEAD') {\n\t\tif (capability.arraybuffer) {\n\t\t\tbody = toArrayBuffer(Buffer.concat(self._body))\n\t\t} else if (capability.blobConstructor) {\n\t\t\tbody = new global.Blob(self._body.map(function (buffer) {\n\t\t\t\treturn toArrayBuffer(buffer)\n\t\t\t}), {\n\t\t\t\ttype: (headersObj['content-type'] || {}).value || ''\n\t\t\t})\n\t\t} else {\n\t\t\t// get utf8 string\n\t\t\tbody = Buffer.concat(self._body).toString()\n\t\t}\n\t}\n\n\t// create flattened list of headers\n\tvar headersList = []\n\tObject.keys(headersObj).forEach(function (keyName) {\n\t\tvar name = headersObj[keyName].name\n\t\tvar value = headersObj[keyName].value\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue.forEach(function (v) {\n\t\t\t\theadersList.push([name, v])\n\t\t\t})\n\t\t} else {\n\t\t\theadersList.push([name, value])\n\t\t}\n\t})\n\n\tif (self._mode === 'fetch') {\n\t\tvar signal = null\n\t\tvar fetchTimer = null\n\t\tif (capability.abortController) {\n\t\t\tvar controller = new AbortController()\n\t\t\tsignal = controller.signal\n\t\t\tself._fetchAbortController = controller\n\n\t\t\tif ('requestTimeout' in opts && opts.requestTimeout !== 0) {\n\t\t\t\tself._fetchTimer = global.setTimeout(function () {\n\t\t\t\t\tself.emit('requestTimeout')\n\t\t\t\t\tif (self._fetchAbortController)\n\t\t\t\t\t\tself._fetchAbortController.abort()\n\t\t\t\t}, opts.requestTimeout)\n\t\t\t}\n\t\t}\n\n\t\tglobal.fetch(self._opts.url, {\n\t\t\tmethod: self._opts.method,\n\t\t\theaders: headersList,\n\t\t\tbody: body || undefined,\n\t\t\tmode: 'cors',\n\t\t\tcredentials: opts.withCredentials ? 'include' : 'same-origin',\n\t\t\tsignal: signal\n\t\t}).then(function (response) {\n\t\t\tself._fetchResponse = response\n\t\t\tself._connect()\n\t\t}, function (reason) {\n\t\t\tglobal.clearTimeout(self._fetchTimer)\n\t\t\tif (!self._destroyed)\n\t\t\t\tself.emit('error', reason)\n\t\t})\n\t} else {\n\t\tvar xhr = self._xhr = new global.XMLHttpRequest()\n\t\ttry {\n\t\t\txhr.open(self._opts.method, self._opts.url, true)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\t// Can't set responseType on really old browsers\n\t\tif ('responseType' in xhr)\n\t\t\txhr.responseType = self._mode.split(':')[0]\n\n\t\tif ('withCredentials' in xhr)\n\t\t\txhr.withCredentials = !!opts.withCredentials\n\n\t\tif (self._mode === 'text' && 'overrideMimeType' in xhr)\n\t\t\txhr.overrideMimeType('text/plain; charset=x-user-defined')\n\n\t\tif ('requestTimeout' in opts) {\n\t\t\txhr.timeout = opts.requestTimeout\n\t\t\txhr.ontimeout = function () {\n\t\t\t\tself.emit('requestTimeout')\n\t\t\t}\n\t\t}\n\n\t\theadersList.forEach(function (header) {\n\t\t\txhr.setRequestHeader(header[0], header[1])\n\t\t})\n\n\t\tself._response = null\n\t\txhr.onreadystatechange = function () {\n\t\t\tswitch (xhr.readyState) {\n\t\t\t\tcase rStates.LOADING:\n\t\t\t\tcase rStates.DONE:\n\t\t\t\t\tself._onXHRProgress()\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// Necessary for streaming in Firefox, since xhr.response is ONLY defined\n\t\t// in onprogress, not in onreadystatechange with xhr.readyState = 3\n\t\tif (self._mode === 'moz-chunked-arraybuffer') {\n\t\t\txhr.onprogress = function () {\n\t\t\t\tself._onXHRProgress()\n\t\t\t}\n\t\t}\n\n\t\txhr.onerror = function () {\n\t\t\tif (self._destroyed)\n\t\t\t\treturn\n\t\t\tself.emit('error', new Error('XHR error'))\n\t\t}\n\n\t\ttry {\n\t\t\txhr.send(body)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t}\n}\n\n/**\n * Checks if xhr.status is readable and non-zero, indicating no error.\n * Even though the spec says it should be available in readyState 3,\n * accessing it throws an exception in IE8\n */\nfunction statusValid (xhr) {\n\ttry {\n\t\tvar status = xhr.status\n\t\treturn (status !== null && status !== 0)\n\t} catch (e) {\n\t\treturn false\n\t}\n}\n\nClientRequest.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tif (!statusValid(self._xhr) || self._destroyed)\n\t\treturn\n\n\tif (!self._response)\n\t\tself._connect()\n\n\tself._response._onXHRProgress()\n}\n\nClientRequest.prototype._connect = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\n\tself._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode, self._fetchTimer)\n\tself._response.on('error', function(err) {\n\t\tself.emit('error', err)\n\t})\n\n\tself.emit('response', self._response)\n}\n\nClientRequest.prototype._write = function (chunk, encoding, cb) {\n\tvar self = this\n\n\tself._body.push(chunk)\n\tcb()\n}\n\nClientRequest.prototype.abort = ClientRequest.prototype.destroy = function () {\n\tvar self = this\n\tself._destroyed = true\n\tglobal.clearTimeout(self._fetchTimer)\n\tif (self._response)\n\t\tself._response._destroyed = true\n\tif (self._xhr)\n\t\tself._xhr.abort()\n\telse if (self._fetchAbortController)\n\t\tself._fetchAbortController.abort()\n}\n\nClientRequest.prototype.end = function (data, encoding, cb) {\n\tvar self = this\n\tif (typeof data === 'function') {\n\t\tcb = data\n\t\tdata = undefined\n\t}\n\n\tstream.Writable.prototype.end.call(self, data, encoding, cb)\n}\n\nClientRequest.prototype.flushHeaders = function () {}\nClientRequest.prototype.setTimeout = function () {}\nClientRequest.prototype.setNoDelay = function () {}\nClientRequest.prototype.setSocketKeepAlive = function () {}\n\n// Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method\nvar unsafeHeaders = [\n\t'accept-charset',\n\t'accept-encoding',\n\t'access-control-request-headers',\n\t'access-control-request-method',\n\t'connection',\n\t'content-length',\n\t'cookie',\n\t'cookie2',\n\t'date',\n\t'dnt',\n\t'expect',\n\t'host',\n\t'keep-alive',\n\t'origin',\n\t'referer',\n\t'te',\n\t'trailer',\n\t'transfer-encoding',\n\t'upgrade',\n\t'via'\n]\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var setImmediate;\n\n function addFromSetImmediateArguments(args) {\n tasksByHandle[nextHandle] = partiallyApplied.apply(undefined, args);\n return nextHandle++;\n }\n\n // This function accepts the same arguments as setImmediate, but\n // returns a function that requires no arguments.\n function partiallyApplied(handler) {\n var args = [].slice.call(arguments, 1);\n return function() {\n if (typeof handler === \"function\") {\n handler.apply(undefined, args);\n } else {\n (new Function(\"\" + handler))();\n }\n };\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(partiallyApplied(runIfPresent, handle), 0);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n task();\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function installNextTickImplementation() {\n setImmediate = function() {\n var handle = addFromSetImmediateArguments(arguments);\n process.nextTick(partiallyApplied(runIfPresent, handle));\n return handle;\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n setImmediate = function() {\n var handle = addFromSetImmediateArguments(arguments);\n global.postMessage(messagePrefix + handle, \"*\");\n return handle;\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n setImmediate = function() {\n var handle = addFromSetImmediateArguments(arguments);\n channel.port2.postMessage(handle);\n return handle;\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n setImmediate = function() {\n var handle = addFromSetImmediateArguments(arguments);\n // Create a + + + +``` + +7. Create a new file called `server.js` (inside `web3-browser-injected-providers`). +8. Copy and paste the following code into `server.js`, and save it after: + + ```js + const express = require('express'); + const app = express(); + const path = require('path'); + + app.use(express.static(path.join(__dirname, '.'))); + + app.listen(8097, () => { + console.log('Server started on port 8097'); + }); + ``` + +9. Start the Node.js server by executing the following command. This will execute the content of `server.js` which will run the server on port 8097: + + ```bash + node server.js + ``` + +10. Open your web browser and navigate to `http://localhost:8097/`. MetaMask should ask for your approval to connect to your website. Follow the steps and give your consent. +11. If everything is set up properly, you should be able to connect to the Ethereum network with MetaMask and see the logged account address. + +Note that in the above steps you had created a local web server using Node.js and Express, serving your HTML file from the root directory of your project. You needs this local server because many browser does not allow extensions to inject objects for static files located on your machine. However, you can customize the port number and the root directory if needed. + +Now you can start building your Ethereum application with web3.js and MetaMask! + +### Setting Web3 Provider using a String URL + +web3.js allows you to set the Ethereum network provider, easily, by passing a string URL containing either the `http`, `https`, `ws`, or `wss` protocol. This provider can be used to connect to a remote server or node. + +And when a string is passed, an instance of the compatible class above will be created accordingly. ex. WebSocketProvider instance will be created for string containing `ws` or `wss`. And you access this instance by calling `web3.provider` to read the provider and possibly register an event listener. + +To set the Web3 provider from a URL, you can use the following code snippet: + +```js +const web3 = new Web3('https://ropsten.infura.io/v3/YOUR_INFURA_PROJECT_ID'); +``` + +Replace `` with your own Infura project ID. This code snippet creates a new Web3 instance with Infura's Ropsten network endpoint as the provider. + +However, if you do not want to use Infura and want to run your own Ethereum node, you can set the provider to a local node with, for example, the `http` protocol, like this: + +```js +const web3 = new Web3('http://localhost:8545'); +``` + +This code snippet sets the provider to a local node running on port 8545. + +You can also use the `WebSocket` protocol to connect to a remote Ethereum node that supports it, like this: + +```js +const web3 = new Web3('wss://eth-mainnet.alchemyapi.io/v2/'); +``` + +With this code snippet, Web3 will create a WebSocket provider object connection to Alchemy's mainnet endpoint. However, you need to replace `` with your own API Key. + +A few points to consider: + +- Make sure the URL you are using is correct, including the protocol and port if necessary. +- If you are using a remote node, make sure your firewall allows access to the specified port. +- It is recommended to use encrypted protocols `https` and `wss` when connecting to Ethereum network using a string URL. + +## Conclusion + +In this tutorial, we explored different types of providers available in web3.js and learned how to set them up and use them in our code. Depending on your application's needs, you can choose the provider that best suits your requirements. The HTTP Provider is the simplest and most widely used provider, while the Websocket Provider and IPC Provider offer real-time communication and faster performance, respectively. With these providers, you can connect your web application to the Ethereum network and start building decentralized applications. diff --git a/docs/docs/guides/web3_providers_guide/index.md b/docs/docs/guides/web3_providers_guide/index.md new file mode 100644 index 00000000000..9a03cbefef7 --- /dev/null +++ b/docs/docs/guides/web3_providers_guide/index.md @@ -0,0 +1,327 @@ +--- +sidebar_position: 2 +sidebar_label: 'Providers' +--- + +# web3.js Providers Guide + +## Introduction + +web3.js providers are objects responsible for enabling connectivity with the Ethereum network in various ways. Connecting your web application to an Ethereum node is necessary for sending transactions, querying data, and interacting with smart contracts on the network. In this guide, we will explore the different types of providers available in web3.js, how to set them up, and how to use them in your code. + +Connecting to a chain happens through a provider. You can pass the provider to the constructor as in the following example: + +```ts +import Web3 from 'web3'; + +const web3 = new Web3(/* PROVIDER*/); + +// calling any method that interact with the network would involve using the early passed provider. +await web3.eth.sendTransaction({ + from, + to, + value, +}); +``` + +The created Web3 instance will use the passed provider to interact with the blockchain network. This interaction happen when sending a request and receiving the response, and when possibly listen to provider events (if the provider support this). + +## Providers Types + +Actually, the provider could be any of the following: + +- An instance of [HttpProvider](/api/web3-providers-http/class/HttpProvider) +- An instance of [WebSocketProvider](/api/web3-providers-ws/class/WebSocketProvider) +- An instance of [IpcProvider](/api/web3-providers-ipc/class/IpcProvider) +- A string containing string url for `http`/`https` or `ws`/`wss` protocol. And when a string is passed, an instance of the compatible class above will be created accordingly. ex. WebSocketProvider instance will be created for string containing `ws` or `wss`. And you access this instance by calling `web3.provider` to read the provider and possibly register an event listener. +- Any provider object that adhere to [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193). And it has been tested with Ganache provider, Hardhat provider, and Incubed (IN3) as a provider. + +For both [WebSocketProvider](/api/web3-providers-ws/class/WebSocketProvider) and [IpcProvider](/api/web3-providers-ipc/class/IpcProvider) the user can listen to emitted events. More on this is at [Providers Events Listening](events_listening). + +:::tip +The passed provider can be either type `string` or one of the [`SupportedProviders`](/api/web3-core#SupportedProviders). And if it is passed as a string, then internally the compatible provider object will be created and used. +::: + +## Providers Priorities + +There are multiple ways to set the provider. + +```ts title='Setting a provider' +web3.setProvider(myProvider); +web3.eth.setProvider(myProvider); +web3.Contract.setProvider(myProvider); +contractInstance.setProvider(myProvider); +``` + +The key rule for setting provider is as follows: + +1. Any provider set on the higher level will be applied to all lower levels. e.g. Any provider set using `web3.setProvider` will also be applied to `web3.eth` object. +2. For contracts `web3.Contract.setProvider` can be used to set provider for **all instances** of contracts created by `web3.eth.Contract`. + +--- + +## Examples + +### Local Geth Node + +```ts +const { Web3 } = require('web3'); +const web3 = new Web3('http://localhost:8545'); +// or +const web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545')); + +// change provider +web3.setProvider('ws://localhost:8546'); +// or +web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:8546')); + +// Using the IPC provider in node.js +const net = require('net'); +const web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os path +// or +const web3 = new Web3( + new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net), +); // mac os path +// on windows the path is: "\\\\.\\pipe\\geth.ipc" +// on linux the path is: "/users/myuser/.ethereum/geth.ipc" +``` + +### Remote Node Provider + +```ts +// Using a remote node provider, like Alchemy (https://www.alchemyapi.io/supernode), is simple. +const { Web3 } = require('web3'); +const web3 = new Web3('https://eth-mainnet.alchemyapi.io/v2/your-api-key'); +``` + +### Injected providers + +As stated above, the injected provider should be in compliance with [EIP-1193](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md). And it is tested with Ganache provider, Hardhat provider, and Incubed (IN3) as a provider. + +The web3.js 4.x Provider specifications are defined in [web3 base provider](https://github.com/ChainSafe/web3.js/blob/4.x/packages/web3-types/src/web3_base_provider.ts) for Injected Providers. + +```html + + +``` + +Note that the above code should be hosted in a web server (that could be a simple local web server), because many browser does not support this feature for static files located on your machine. + +### Provider Options + +There are differences in the objects that could be passed in the Provider constructors. + +#### HttpProvider + +The options is of type `HttpProviderOptions`, which is an object with a single key named `providerOptions` and its value is an object of type `RequestInit`. +Regarding `RequestInit` see [microsoft's github](https://microsoft.github.io/PowerBI-JavaScript/interfaces/_node_modules_typedoc_node_modules_typescript_lib_lib_dom_d_.requestinit.html). + +For example: + +```ts +const httpOptions = { + providerOptions: { + body: undefined, + cache: 'force-cache', + credentials: 'same-origin', + headers: { + 'Content-Type': 'application/json', + }, + integrity: 'foo', + keepalive: true, + method: 'GET', + mode: 'same-origin', + redirect: 'error', + referrer: 'foo', + referrerPolicy: 'same-origin', + signal: undefined, + window: undefined, + } as RequestInit, +}; +``` + +#### WebSocketProvider + +Use WebSocketProvider to connect to a Node using a WebSocket connection, i.e. over the `ws` or `wss` protocol. + +The options object is of type `ClientRequestArgs` or of `ClientOptions`. See [here](https://microsoft.github.io/PowerBI-JavaScript/interfaces/_node_modules__types_node_http_d_._http_.clientrequestargs.html) for `ClientRequestArgs` and [here](https://github.com/websockets/ws) for `ClientOptions`. + +The second option parameter can be given regarding reconnecting. And here is its type: + +```ts +// this is the same options interface used for both WebSocketProvider and IpcProvider +type ReconnectOptions = { + autoReconnect: boolean; // default: `true` + delay: number; // default: `5000` + maxAttempts: number; // default: `5` +}; +``` + +And here is a sample instantiation for the `WebSocketProvider`: + +```ts +const provider = new WebSocketProvider( + `ws://localhost:8545`, + { + headers: { + // to provide the API key if the Node requires the key to be inside the `headers` for example: + 'x-api-key': '', + }, + }, + { + delay: 500, + autoReconnect: true, + maxAttempts: 10, + }, +); +``` + +The second and the third parameters are both optional. And, for example, the second parameter could be an empty object or undefined, like in the following example: + +```ts +const provider = new WebSocketProvider( + `ws://localhost:8545`, + {}, + { + delay: 500, + autoReconnect: true, + maxAttempts: 10, + }, +); +``` + +##### Options example + +Below is an example for the passed options: + +```ts +let clientOptions: ClientOptions = { + // Useful for credentialed urls, e.g: ws://username:password@localhost:8546 + headers: { + authorization: 'Basic username:password', + }, + maxPayload: 100000000, +}; + +const reconnectOptions: ReconnectOptions = { + autoReconnect: true, + delay: 5000, + maxAttempts: 5, +}; +``` + +### IpcProvider + +The IPC Provider could be used in node.js dapps when running a local node. And it provide the most secure connection. + +It accepts a second parameter called `socketOptions`. And, its type is `SocketConstructorOpts`. See [here](https://microsoft.github.io/PowerBI-JavaScript/interfaces/_node_modules__types_node_net_d_._net_.socketconstructoropts.html) for full details. And here is its interface: + +```ts +// for more check: https://microsoft.github.io/PowerBI-JavaScript/interfaces/_node_modules__types_node_net_d_._net_.socketconstructoropts.html +interface SocketConstructorOpts { + fd?: number | undefined; + allowHalfOpen?: boolean | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; +} +``` + +And, the third parameter is called `reconnectOptions` that is of the type `ReconnectOptions`. It can be given to control: auto-reconnecting, delay and max tries attempts. And here its type: + +```ts +// this is the same options interface used for both WebSocketProvider and IpcProvider +type ReconnectOptions = { + autoReconnect: boolean; // default: `true` + delay: number; // default: `5000` + maxAttempts: number; // default: `5` +}; +``` + +##### Options examples + +Below is an example for the passed options for each version: + +```ts +let clientOptions: SocketConstructorOpts = { + allowHalfOpen: false; + readable: true; + writable: true; +}; + +const reconnectOptions: ReconnectOptions = { + autoReconnect: true, + delay: 5000, + maxAttempts: 5, +}; +``` + +And here is a sample instantiation for the `IpcProvider`: + +```ts +const provider = new IpcProvider( + `path.ipc`, + { + writable: false, + }, + { + delay: 500, + autoReconnect: true, + maxAttempts: 10, + }, +); +``` + +The second and the third parameters are both optional. And, for example, the second parameter could be an empty object or undefined. + +```ts +const provider = new IpcProvider( + `path.ipc`, + {}, + { + delay: 500, + autoReconnect: true, + maxAttempts: 10, + }, +); +``` + +#### Error message for reconnect attempts + +:::info +This section applies for both `IpcProvider` and `WebSocketProvider`. +::: + +The error message, for the max reconnect attempts, will contain the value of the variable `maxAttempts` as follows: + +`` `Maximum number of reconnect attempts reached! (${maxAttempts})` `` + +And here is how to catch the error, if max attempts reached when there is auto reconnecting: + +```ts +provider.on('error', error => { + if (error.message.startsWith('Maximum number of reconnect attempts reached!')) { + // the `error.message` will be `Maximum number of reconnect attempts reached! (${maxAttempts})` + // the `maxAttempts` is equal to the provided value by the user, or the default value `5`. + } +}); +``` diff --git a/docs/docs/guides/web3_upgrade_guide/1.x/abi_migration_guide.md b/docs/docs/guides/web3_upgrade_guide/1.x/abi_migration_guide.md new file mode 100644 index 00000000000..a8df358dacd --- /dev/null +++ b/docs/docs/guides/web3_upgrade_guide/1.x/abi_migration_guide.md @@ -0,0 +1,43 @@ +--- +sidebar_position: 6 +sidebar_label: web3.eth.abi +--- + +# web3.eth.abi Migration Guide + +## Breaking Changes + +- `AbiInput` has moved from `web3-eth-utils` to `web3-eth-abi` + +- type `AbiInput` attribute was renamed to `baseType` from `internalType`. + +In 1.x: + +``` +export interface AbiInput { + name: string; + type: string; + indexed?: boolean; + components?: AbiInput[]; + internalType?: string; +} +``` + +In 4.x: + +``` + +export type AbiInput = string | AbiParameter | { readonly [key: string]: unknown }; +// where AbiParameter is ... + +export type AbiParameter = { + readonly name: string; + readonly type: string; + readonly baseType?: string; + readonly indexed?: boolean; + readonly components?: ReadonlyArray; + readonly arrayLength?: number; + readonly arrayChildren?: ReadonlyArray; +}; + +``` diff --git a/docs/docs/guides/web3_upgrade_guide/1.x/accounts_migration_guide.md b/docs/docs/guides/web3_upgrade_guide/1.x/accounts_migration_guide.md new file mode 100644 index 00000000000..9446135ef4b --- /dev/null +++ b/docs/docs/guides/web3_upgrade_guide/1.x/accounts_migration_guide.md @@ -0,0 +1,36 @@ +--- +sidebar_position: 5 +sidebar_label: web3.eth.accounts +--- + +# web3.eth.accounts Migration Guide + +## Breaking Changes + +### web3.eth.accounts.create and wallet.create + +In 1.x the create method has an optional parameter `entropy`. + +In 4.x the create method does not have `entropy` as a parameter. Instead 4.x uses an audited package [ethereum-cryptography/secp256k1](https://github.com/ethereum/js-ethereum-cryptography#secp256k1-curve) to generate private keys. + +Accounts: + +```typescript +// In 1.x +const account = web3.eth.accounts.create('optionalEntropy'); // entropy is an optional parameter + +// In 4.x +const account = web3.eth.accounts.create('optionalEntropy'); // will result in an error +const account = web3.eth.accounts.create(); // correct way +``` + +Wallets: + +```typescript +// In 1.x +const wallet = web3.eth.accounts.wallet.create(1, 'optionalEntropy'); // entropy is an optional parameter + +// In 4.x +const account = web3.eth.accounts.wallet.create(1, 'optionalEntropy'); // will result in an error +const account = web3.eth.accounts.wallet.create(); // correct way +``` diff --git a/docs/docs/guides/web3_upgrade_guide/1.x/contracts_migration_guide.md b/docs/docs/guides/web3_upgrade_guide/1.x/contracts_migration_guide.md new file mode 100644 index 00000000000..c78af41704d --- /dev/null +++ b/docs/docs/guides/web3_upgrade_guide/1.x/contracts_migration_guide.md @@ -0,0 +1,183 @@ +--- +sidebar_position: 4 +sidebar_label: web3.eth.Contract +--- + +# web3.eth.Contract Migration Guide + +## Breaking Changes + +### Receipt Status + +The `receipt.status` will now be be an `unsigned integer` instead of `boolean` value to comply with the specification. + +```ts +// in 1.x +myContract.methods + .MyMethod() + .send() + .on('receipt', receipt => { + console.log(receipt.status); // true | false + }); + +// in 4.x +myContract.methods + .MyMethod() + .send() + .on('receipt', receipt => { + console.log(receipt.status); // BigInt(0) | BigInt(1) + }); +``` + +:::note +The `unsigned integer` type is dependent on the data format you specified. Default type is `BigInt`. +::: + +### Deploy `sending` and `sent` event will fire only the params + +In 1.x, when following was executed `deploy().send().on(‘sending’, payload => {})`. The `payload` was the complete the JSON-RPC Payload. In 4.x, it will just be the transaction which is about to be transmitted. Earlier it was accessible by from `payload.params[0]`, now will be available directly to event handler. + +```ts +// 1.x +myContract + .deploy() + .send() + .on('send', payload => { + console.log(payload); + // {id: <1>, jsonrpc: '2.0', method: 'eth_sendTransaction', params: [txObject] } + }); + +// 4.x +myContract + .deploy() + .send() + .on('send', txObject => { + console.log(txObject); + // {id: <>, gas: <>,...} + }); +``` + +### Deploy ’confirmations’ handler will be invoked with object + +In 1.x, the `confirmations` handler was invoked with multiple parameters. But in 4.x there will be one parameter as object but with all the same properties. + +```ts +//1.x +myContract .send().on(‘confirmation’, (confirmations: number, receipt: object, latestBlockHash: string) => {}) + +//4.x +myContract .send().on(‘confirmation’, ({confirmations: bigint, receipt: object, latestBlockHash: string}) => {}) +``` + +### Strict validation for `encodeABI` + +`encodeABI` now has strict validation for the ABI types. It's not limited to the mentioned use cases below, but applied in general. Some use cases are: + +- Earlier a `byte32` ABI type was successfully encoded even providing less bytes as input. Now it will throw an error. +- Earlier a `byte32` ABI type was successfully encoded even with an empty bytes. Now it will throw an error. + +### Different error message for creating object without `new` keyword + +The error message will be different if you try to create a contract object without a `new` keyword. + +```ts +// 1.x +const contract = Contract(jsonInterface, address); +// Please use the "new" keyword to instantiate a web3.eth.Contract() object! + +// 4.x +const contract = Contract(jsonInterface, address); +// Class constructor ContractBuilder cannot be invoked without 'new' +``` + +### No warning message when `toBlock` passed to event subscription + +In 1.x, if you pass the `toBlock` as event options you would get a warning message: + +> Invalid option: toBlock. Use getPastEvents for specific range. + +In 4.x, you will not get any warning but `toBlock` will still have no effect. + +### The contract `send` method will now resolve with the `receipt` object + +In 1.x, the contract `.send` method was always resolved with `transactionHash`. That enforces the user to make an extra call to get any further information. In 4.x the `.send` function will resolve with `receipt` object. + +```ts +// 1.x +const transactionHash = await myContract.method.MyMethod().send(); + +// 4.x +const receipt = await myContract.method.MyMethod().send(); +const transactionHash = receipt.transactionHash; +``` + +### `BigInt` is used when decoding functions' and events' parameters + +In 1.x, decoded functions' and events' parameters were of type `string`. In 4.x, the `BigInt` type is used instead. + +```ts +// Events +// 1.x +instance.events.BasicEvent().on('data', function (event) { + console.log(event); +}); + +await instance.methods.firesEvent(acc, 1).send(); +/** +{ address: '0x607A075cB7710AA8544c4E0F929e344Bf91AB631', + blockHash: .., + blockNumber: 9, logIndex: 0, removed: false, transactionHash: ..., transactionIndex: 0, + returnValues: {0: '0xd0731FAE14781104c42B8914b4cc6634b6038daC', 1: '1', addr: '0xd0731FAE14781104c42B8914b4cc6634b6038daC', val: '1'} // Note the value of val + ,event: 'BasicEvent', signature: ..., raw: ...} +*/ + +//4.x +instance.events + .MultiValueIndexedEvent({ + filter: { val: 100 }, + }) + .on('data', console.log); +await instance.methods.firesMultiValueIndexedEvent('value', 100, true).send(sendOptions); +/** + * { + address: '0x0c1b54fb6fdf63dee15e65cadba8f2e028e26bd0', + topics: [ + '0x553c4a49a36d26504ba0880f2f9bfe9ac7db4b81a893bde296546cd96ae0b33c', + '0x0000000000000000000000000000000000000000000000000000000000000064', + '0x0000000000000000000000000000000000000000000000000000000000000001' + ], + data: '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000', + blockNumber: 23n, + transactionHash: '0xf7e56f38b0f75c0926862ef4195df779003a0e960162a65b214c40232ba17925', + transactionIndex: 0n, + blockHash: '0x15a77129afdcec739924c58fb3aba456428d8c3f5d181af559d50458d468eb33', + logIndex: 0n, + removed: false, + returnValues: { + '0': 'value', + '1': 100n, + '2': true, + __length__: 3, + str: 'value', + val: 100n, //Note that a BigInt is returned + flag: true + }, + event: 'MultiValueIndexedEvent', + signature: '0x553c4a49a36d26504ba0880f2f9bfe9ac7db4b81a893bde296546cd96ae0b33c', + raw: ... + } +*/ + +// Functions +//1.x +await instance.methods.setValue(1).send(); +var value = await instance.methods.getValue().call(); +console.log(value); +// > '1' + +//4.x +await instance.methods.setValue(10).send(); +var value = await instance.methods.getValue().call(); +console.log(value); +// 10n // Note that a BigInt is returned +``` diff --git a/docs/docs/guides/web3_upgrade_guide/1.x/index.md b/docs/docs/guides/web3_upgrade_guide/1.x/index.md new file mode 100644 index 00000000000..a8f1a205bbd --- /dev/null +++ b/docs/docs/guides/web3_upgrade_guide/1.x/index.md @@ -0,0 +1,217 @@ +--- +sidebar_position: 1 +sidebar_label: 'Upgrade from 1.x' +--- + +# Upgrade from 1.x + +This upgrade guide is for upgrading from web3.js 1.x to web3.js 4.x. + +## Breaking Changes + +### The `web3` package will return all web3.js exported objects + +`require('web3')` will now return all web3 exported-objects organized in namespaces (and few are available on top level). So, it is no longer supported to write the following code: + +```ts +// This will return the name space and the line after it will throw an error! +const Web3 = require('web3'); + +const web3 = new Web3(); +``` + +And the correct usage now is: + +```ts +const { Web3 } = require('web3'); + +const web3 = new Web3(); +``` + +### Passing Callbacks to functions + +Passing callbacks to functions is no longer supported, except for event listeners. + +For example, the approach to subscribing-to and listening-for blockchain events has changed in version 4.x. Detailed instructions can be found in the [**`web3.eth.subscribe` Migration Guide**](./subscribe_migration_guide.md#subscribing-to-events). + +However, the approach to subscribing to Provider events remains the same, utilizing callbacks as explained in the [Providers Events Listening guide](../../web3_providers_guide/events_listening.md). It is important to note that Providers have undergone some breaking changes, including the renaming of the `on('close', ...)` to `on('disconnect', ...)`. + +### Not Available + + +- [web3.bzz](https://web3js.readthedocs.io/en/v1.7.3/web3-bzz.html) Package for interacting with Swarm is not implemented +- [web3.shh](https://web3js.readthedocs.io/en/v1.7.3/web3-shh.html) Package for interacting with Whisper is not implemented + +`const web3 = new Web3(Web3.givenProvider);` + +It will not have: + +```ts +// web3.bzz is NOT available +// web3.shh is NOT available +``` + +### Defaults and Configs + +- `givenProvider` default value is `undefined` instead of `null` +- `currentProvider` default value is `undefined` instead of `null` (if web3 is instantiated without a provider) + +### Web3 BatchRequest + +```ts +const batch = new web3.BatchRequest(); +``` + +#### batch.add() + +In 1.x nothing was returned, in 4.x returns a deferred promise which can be used to run specific code after completion of each respective request. + +```ts +// in 1.x +batch.add( + web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback), +); + +// in 4.x + +const request1 = { + jsonrpc: '2.0', + id: 10, + method: 'eth_getBalance', + params: ['0xf4ffff492596ac13fee6126846350433bf9a5021', 'latest'], +}; +const request2 = { + jsonrpc: '2.0', + id: 12, + method: 'eth_getBalance', + params: ['0xdc6bad79dab7ea733098f66f6c6f9dd008da3258', 'latest'], +}; +batch.add(request1); +const request2Promise = batch.add(request2); +request2Promise.then(response => { + console.log(response); +}); +``` + +#### batch.execute() + +In 4.x execute returns a promise, where 1.x was based on the callbacks of requests passed to `add`. + +```ts +// in 1.x +batch.execute(); + +// in 4.x +const responses = await batch.execute(); +``` + +### Types + +All the re-useable types which were earlier been exposed from `web3` package are now moved to independent package `web3-types` package. + +:::note +We don't encourage using the `@types/web3` package. +::: + +```ts +// Provider types +// in 1.x +import type { Provider, Callback, JsonRPCResponse } from 'web3/providers'; + +// in 4.x +import type { + Web3BaseProvider as Provider, + Web3ProviderRequestCallback as Callback, + JsonRpcResponse, +} from 'web3-types'; +``` + +Similarly some useable types from the old package `web3-core` are also moved to `web3-types` + +```ts +// in 1.x +import type { Transaction, TransactionReceipt } from 'web3-core'; + +// in 4.x +import type { Transaction, TransactionReceipt } from 'web3-types'; +``` + +### Web3 Extend + +`web3.extend` is available but methods.params , methods.inputFormatter and methods.outputFormatter are not available to set. In typescript +you will need to set module augmentation as mentioned in following example. + +```ts +// in 1.x +web3.extend({ + property: 'myModule', + methods: [ + { + name: 'getBalance', + call: 'eth_getBalance', + params: 2, + inputFormatter: [ + web3.extend.formatters.inputAddressFormatter, + web3.extend.formatters.inputDefaultBlockNumberFormatter, + ], + outputFormatter: web3.utils.hexToNumberString, + }, + { + name: 'getGasPriceSuperFunction', + call: 'eth_gasPriceSuper', + params: 2, + inputFormatter: [null, web3.utils.numberToHex], + }, + ], +}); + +// in 4.0.4+ +declare module 'web3' { + interface Web3Context { + myModule: { + getBalance(address: Address, blockTag: BlockTag): Promise; + getGasPriceSuperFunction(blockTag: BlockTag): Promise; + }; + } +} + +web3.extend({ + property: 'myModule', + methods: [ + { + name: 'getBalance', + call: 'eth_getBalance', + }, + { + name: 'getGasPriceSuperFunction', + call: 'eth_gasPriceSuper', + }, + ], +}); +``` + +### Formatters + +Starting 4.x releases, the package `web3-core-helpers` will not be maintained and the formatters are now moved to the `web3-core` package. + +```ts +// in 1.x +import { formatters } from 'web3-core-helpers'; + +// in 4.x +import { formatters } from 'web3-core'; +``` + +### PromiEvent + +Starting 4.x releases, the package `web3-core-promievent` will not be maintained and the class are now moved to the `web3-core` package. + +```ts +// in 1.x +import Web3PromiEvent from 'web3-core-promievent'; + +// in 4.x +import { Web3PromiEvent } from 'web3-core'; +``` + +The `PromiEvent` class does not support `removeEventListener` or `addEventListener`. Instead we recommend to use `on` and `off`. diff --git a/docs/docs/guides/web3_upgrade_guide/1.x/net_migration_guide.md b/docs/docs/guides/web3_upgrade_guide/1.x/net_migration_guide.md new file mode 100644 index 00000000000..1c35ae25981 --- /dev/null +++ b/docs/docs/guides/web3_upgrade_guide/1.x/net_migration_guide.md @@ -0,0 +1,25 @@ +--- +sidebar_position: 10 +sidebar_label: web3.*.net +--- + +# web3 Net Migration Guide + +## Breaking Changes + +### web3.\*.net.getId + +The `bzz` and `shh` package are deprecated, therefore `web3.bzz.net.getId` and `web3.shh.net.getId` functions are not available. + +### web3.\*.net.isListening + +The `bzz` and `shh` package are deprecated, therefore `web3.bzz.net.isListening` and `web3.shh.net.isListening` functions are not available. + +### web3.\*.net.getPeerCount + +The `bzz` and `shh` package are deprecated, therefore `web3.bzz.net.getPeerCount` and `web3.shh.net.getPeerCount` functions are not available. + +```typescript +// web3.bzz.net is NOT available +// web3.shh.net is NOT available +``` diff --git a/docs/docs/guides/web3_upgrade_guide/1.x/personal_migration_guide.md b/docs/docs/guides/web3_upgrade_guide/1.x/personal_migration_guide.md new file mode 100644 index 00000000000..1e46f8fb623 --- /dev/null +++ b/docs/docs/guides/web3_upgrade_guide/1.x/personal_migration_guide.md @@ -0,0 +1,26 @@ +--- +sidebar_position: 8 +sidebar_label: web3.eth.personal +--- + +# web3.eth.personal Migration Guide + +## Breaking Changes + +### extend + +In 4.x the method `extend` is deprecated. + +web3 4.x will not have: + +```ts +// -> web3.extend +// -> web3.eth.extend +// -> web3.shh.extend +// -> web3.bzz.extend +``` + +### Defaults and Configs + +- `givenProvider` default value is `undefined` instead of `null` +- `currentProvider` default value is `undefined` instead of `null` (if web3 is instantiated without a provider) diff --git a/docs/docs/guides/web3_upgrade_guide/1.x/providers_migration_guide.md b/docs/docs/guides/web3_upgrade_guide/1.x/providers_migration_guide.md new file mode 100644 index 00000000000..8a59b8e0e2d --- /dev/null +++ b/docs/docs/guides/web3_upgrade_guide/1.x/providers_migration_guide.md @@ -0,0 +1,383 @@ +--- +title: web3.providers Migration Guide +sidebar_position: 2 +sidebar_label: web3.providers +--- + +For full description about the providers, their priorities and their types, you can check [web3.js Providers Guide](../../web3_providers_guide/). + +### Provider Options Changes + +There are differences in the objects that could be passed in the Provider constructors between version 1.x and 4.x. Below, you will find the difference for every Provider object type. + +#### HttpProvider + +In 1.x, options passed in the constructor should be of type [`HttpProviderOptions`](https://github.com/web3/web3.js/blob/1.x/packages/web3-core-helpers/types/index.d.ts#L173). The `HttpProviderOptions` interface consists of: + +```ts +interface HttpProviderOptions { + keepAlive?: boolean; + timeout?: number; + headers?: HttpHeader[]; + withCredentials?: boolean; + agent?: HttpAgent; +} + +interface HttpAgent { + http?: http.Agent; + https?: https.Agent; + baseUrl?: string; +} + +interface HttpHeader { + name: string; + value: string; +} +``` + +In 4.x, the options is of type `HttpProviderOptions`, which is an object with a `providerOptions` key and value a `RequestInit` object. +Regarding `RequestInit` see [microsoft's github](https://microsoft.github.io/PowerBI-JavaScript/interfaces/_node_modules_typedoc_node_modules_typescript_lib_lib_dom_d_.requestinit.html). + +For example: + +```ts +// in 1.x +let httpOptions = { + keepAlive: true, + withCredentials: false, + timeout: 20000, // ms + headers: [ + { + name: 'Access-Control-Allow-Origin', + value: '*' + }, + ], + agent: { + http: http.Agent(...), + baseUrl: '' + } +}; + +// in 4.x +let httpOptions = { + providerOptions: { + body: undefined, + cache: 'force-cache', + credentials: 'same-origin', + headers: { + 'Content-Type': 'application/json', + }, + integrity: 'foo', + keepalive: true, + method: 'GET', + mode: 'same-origin', + redirect: 'error', + referrer: 'foo', + referrerPolicy: 'same-origin', + signal: undefined, + window: undefined, + } as RequestInit, +}; +``` + +#### WebSocketProvider + +In 1.x, options passed in the constructor should be of type [`WebsocketProviderOptions`](https://github.com/web3/web3.js/blob/1.x/packages/web3-core-helpers/types/index.d.ts#L192). The `WebsocketProviderOptions` interface consists of: + +```ts +interface WebsocketProviderOptions { + host?: string; + timeout?: number; + reconnectDelay?: number; + headers?: any; + protocol?: string; + clientConfig?: object; + requestOptions?: any; + origin?: string; + reconnect?: ReconnectOptions; +} + +interface ReconnectOptions { + auto?: boolean; + delay?: number; + maxAttempts?: number; + onTimeout?: boolean; +} +``` + +In 4.x, the `socketOptions` parameter is of type `ClientRequestArgs` or of `ClientOptions`. See [here](https://microsoft.github.io/PowerBI-JavaScript/interfaces/_node_modules__types_node_http_d_._http_.clientrequestargs.html) for `ClientRequestArgs` and [here](https://github.com/websockets/ws) for `ClientOptions`. + +In 4.x the `reconnectOptions` parameter can be given to control: auto-reconnecting, delay and max tries attempts. And here is its type: + +```ts +// this is the same options interface used for both WebSocketProvider and IpcProvider +type ReconnectOptions = { + autoReconnect: boolean; // default: `true` + delay: number; // default: `5000` + maxAttempts: number; // default: `5` +}; +``` + +##### Options examples + +Below is an example for the passed options for each version: + +```ts +// in 1.x +var options = { + timeout: 30000, // ms + + // Useful for credentialed urls, e.g: ws://username:password@localhost:8546 + headers: { + authorization: 'Basic username:password', + }, + + clientConfig: { + // Useful if requests are large + maxReceivedFrameSize: 100000000, // bytes - default: 1MiB + maxReceivedMessageSize: 100000000, // bytes - default: 8MiB + + // Useful to keep a connection alive + keepalive: true, + keepaliveInterval: 60000, // ms + }, + + // Enable auto reconnection + reconnect: { + auto: true, + delay: 5000, // ms + maxAttempts: 5, + onTimeout: false, + }, +}; +// in 4.x +let clientOptions: ClientOptions = { + // Useful for credentialed urls, e.g: ws://username:password@localhost:8546 + headers: { + authorization: 'Basic username:password', + }, + maxPayload: 100000000, +}; + +const reconnectOptions: ReconnectOptions = { + autoReconnect: true, + delay: 5000, + maxAttempts: 5, +}; +``` + +And here is a sample instantiation for the `WebSocketProvider`: + +```ts +const provider = new WebSocketProvider( + `ws://localhost:8545`, + { + headers: { + // to provide the API key if the Node requires the key to be inside the `headers` for example: + 'x-api-key': '', + }, + }, + { + delay: 500, + autoReconnect: true, + maxAttempts: 10, + }, +); +``` + +The second and the third parameters are both optional. And you can for example, the second parameter could be an empty object or undefined, like in the following example: + +```ts +const provider = new WebSocketProvider( + `ws://localhost:8545`, + {}, + { + delay: 500, + autoReconnect: true, + maxAttempts: 10, + }, +); +``` + +#### Legacy Event `close` has been deprecated + +Following EIP-1193, the `close` event has been deprecated and is superceded by `disconnect`. +In 1.x, we listen for a `close` event: + +```ts +const provider = new WebSocketProvider(host + port); +// we would use close to listen to the disconnect function +provider.on('close', function (err) { + console.log('closed'); + resolve(); +}); +provider.disconnect(1012); +// would eventually log closed +``` + +In 4.x, we listen for a `disconnect` event: + +```ts +const provider = new WebSocketProvider(host + port); +// we would use disconnect to listen to the disconnect function +provider.on('disconnect', function (err) { + console.log('closed'); + resolve(); +}); +provider.disconnect(1012); +// would eventually log 'closed' +``` + +#### IpcProvider + +The IPC provider is used in node.js dapps when running a local node. And it provide the most secure connection. + +In 1.x, it used to accept the path and an instance of net.Server as in the following example: + +```ts +import * as net from 'net'; + +const ipcProvider = new IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', new net.Server()); +``` + +In 4.x, it's no longer installed by default as its nodejs modules are impacting web3.js browser usage. +You can use it by installing `web3-providers-ipc` and creating a new instance. Since it's compatible with Eip1193Provider, +you can pass it on to the Web3 instance. + +```ts +import { IpcProvider } from 'web3-providers-ipc'; + +const ipcProvider = new IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc'); +``` + +It accepts a second parameter called `socketOptions`. And, its type is `SocketConstructorOpts`. See [here](https://microsoft.github.io/PowerBI-JavaScript/interfaces/_node_modules__types_node_net_d_._net_.socketconstructoropts.html) for full details. And here is its interface: + +```ts +interface SocketConstructorOpts { + fd?: number | undefined; + allowHalfOpen?: boolean | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; + signal?: AbortSignal; +} +``` + +In 4.x the third parameter is called `reconnectOptions` that is of the type `ReconnectOptions`. It can be given to control: auto-reconnecting, delay and max tries attempts. And here its type: + +```ts +// this is the same options interface used for both WebSocketProvider and IpcProvider +type ReconnectOptions = { + autoReconnect: boolean; // default: `true` + delay: number; // default: `5000` + maxAttempts: number; // default: `5` +}; +``` + +##### Options examples + +Below is an example for the passed options for each version: + +```ts +// in 1.x +var net = require('net'); + +new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os path +// on windows the path is: "\\\\.\\pipe\\geth.ipc" +// on linux the path is: "/users/myuser/.ethereum/geth.ipc" + +// in 4.x +let clientOptions: SocketConstructorOpts = { + allowHalfOpen: false; + readable: true; + writable: true; +}; + +const reconnectOptions: ReconnectOptions = { + autoReconnect: true, + delay: 5000, + maxAttempts: 5, +}; +``` + +And here is a sample instantiation for the `IpcProvider`: + +```ts +const provider = new IpcProvider( + `path.ipc`, + { + writable: false, + }, + { + delay: 500, + autoReconnect: true, + maxAttempts: 10, + }, +); +``` + +The second and the third parameters are both optional. And, for example, the second parameter could be an empty object or undefined. + +```ts +const provider = new IpcProvider( + `path.ipc`, + {}, + { + delay: 500, + autoReconnect: true, + maxAttempts: 10, + }, +); +``` + +#### Error message for reconnect attempts + +:::note +This section applies for both `IpcProvider` and `WebSocketProvider`. +::: + +The error in, version 1.x, was an Error object that contains the message: +`'Maximum number of reconnect attempts reached!'` + +And, the error in version 4.x, is the same, but will also contain the value of the variable `maxAttempts` as follows: + +`` `Maximum number of reconnect attempts reached! (${maxAttempts})` `` + +And here is how to catch the error, in version 4.x, if max attempts reached when there is auto reconnecting: + +```ts +provider.on('error', error => { + if (error.message.startsWith('Maximum number of reconnect attempts reached!')) { + // the `error.message` will be `Maximum number of reconnect attempts reached! (${maxAttempts})` + // the `maxAttempts` is equal to the provided value by the user, or the default value `5`. + } +}); +``` + +#### Legacy Event `close` has been deprecated + +Following EIP-1193, the `close` event has been deprecated and is superceded by `disconnect`. +In 1.x, we listen for a `close` event: + +```ts +const provider = new IpcProvider(host + port); +// we would use close to listen to the disconnect function +provider.on('close', function (err) { + console.log('closed'); + resolve(); +}); +provider.disconnect(1012); +// would eventually log closed +``` + +In 4.x, we listen for a `disconnect` event: + +```ts +const provider = new IpcProvider(host + port); +// we would use disconnect to listen to the disconnect function +provider.on('disconnect', function (err) { + console.log('closed'); + resolve(); +}); +provider.disconnect(1012); +// would eventually log 'closed' +``` diff --git a/docs/docs/guides/web3_upgrade_guide/1.x/subscribe_migration_guide.md b/docs/docs/guides/web3_upgrade_guide/1.x/subscribe_migration_guide.md new file mode 100644 index 00000000000..6ce6c2512a2 --- /dev/null +++ b/docs/docs/guides/web3_upgrade_guide/1.x/subscribe_migration_guide.md @@ -0,0 +1,86 @@ +--- +sidebar_position: 9 +sidebar_label: web3.eth.subscribe +--- + +# web3.eth.subscribe Migration Guide + +## Breaking Changes + +### Subscribing to events + +You subscribe to blockchain events using the `web3.eth.subscribe` API. + +However, in web3.js version 1.x, for example, you could subscribe to the `newBlockHeaders` event, in one step, with the following code snippet: + +```typescript +var subscription = web3.eth.subscribe('newBlockHeaders', function (error, result) { + if (!error) console.log(result); +}); +``` + +But, in web3.js Version 4.x, the function signature has changed for `web3.eth.subscribe`. In addition, the way you get notified for `data` and `error` has also changed. It is now in 2 steps: First you subscribe and then you listen to events. Here's an example of how you would subscribe to the same `newBlockHeaders` event in web3.js version 4.x: + +```typescript +// in 4.x +const subscription = await web3.eth.subscribe('newHeads'); + +// note that in version 4.x the way you get notified for `data` and `error` has changed +subscription.on('data', async blockhead => { + console.log('New block header: ', blockhead); +}); +subscription.on('error', error => + console.log('Error when subscribing to New block header: ', error), +); +``` + +#### Differences + +In summary, the differences you need to be aware of when subscribing to blockchain events in web3.js version 4.x are: + +- The `subscribe` function signature has changed: + - It does not accept a callback function. + - It returns a subscription object that you can use to listen to `data` and `error` events. +- You should now use the `on`, or `once`, method on the newly returned subscription object to listen to `data` and `error` events, instead of passing a callback function directly. +- You can have multiple event listeners, if you have, for example multiple `on` calls. And you can get the number of listeners in you code by calling `listenerCount(event_name)` or get the listeners with `listeners(event_name)`. + +Keep in mind that these differences apply to all blockchain event subscriptions, not just to the `newBlockHeaders` event. + +### New Block Headers event + +In 1.x, `web3.eth.subscribe('newBlockHeaders')` was used to subscribe to new block headers. + +In 4.x, either `web3.eth.subscribe('newHeads')` or `web3.eth.subscribe('newBlockHeaders')` can be used to subscribe to new block headers. + +### web3.eth.clearSubscriptions + +In 1.x, `web3.eth.clearSubscriptions` returns `true` on success. + +In 4.x, `web3.eth.clearSubscriptions` returns an `Array of subscription ids`. + +```typescript +// in 1.x +var subscription = web3.eth.subscribe('newBlockHeaders', function (error, result) { + if (!error) console.log(result); +}); +web3.eth.clearSubscriptions(function (error, success) { + console.log(success); // true +}); + +// in 4.x +const subscription = await web3.eth.subscribe('newHeads'); + +// note that in version 4.x the way you get notified for `data` and `error` has changed +newBlocksSubscription.on('data', async blockhead => { + console.log('New block header: ', blockhead); +}); +newBlocksSubscription.on('error', error => + console.log('Error when subscribing to New block header: ', error), +); + +const ids = await web3.eth.clearSubscriptions(); +console.log(ids); // [...] An array of subscription ids that were cleared + +// note that you can unsubscribe from a specific subscription by calling unsubscribe() +// on that subscription object: `await subscription.unsubscribe();` and this would return void if succeeded. +``` diff --git a/docs/docs/guides/web3_upgrade_guide/1.x/web3_eth_ens.md b/docs/docs/guides/web3_upgrade_guide/1.x/web3_eth_ens.md new file mode 100644 index 00000000000..10ba96391b7 --- /dev/null +++ b/docs/docs/guides/web3_upgrade_guide/1.x/web3_eth_ens.md @@ -0,0 +1,61 @@ +--- +sidebar_position: 3 +sidebar_label: web3.eth.ens +--- + +# web3.eth.ens Migration Guide + +## Breaking Changes + +- All the API level interfaces returning or accepting `null` in 1.x, use `undefined` in 4.x. +- Functions don't accept a callback anymore. +- Functions that accepted an optional `TransactionConfig` as the last argument, now accept an optional `NonPayableCallOptions`. See `web3-eth-contract` package for more details. +- List of web3-eth-ens set functions are removed in 4.x + +#### receipt + +- The `receipt` object the event listener receives: + - Returns a `BigInt` instead of a number for the following properties: + - `transactionIndex` + - `blockNumber` + - `cumulativeGasUsed` + - `gasUsed` + - `effectiveGasPrice` + - Returns a `BigInt` instead of a boolean for the following properties: + - `status` + +#### web3.eth.ens.registryAddress + +- In 1.x ens was trying to find the registry address of the current network. In 4.x the default value is set to the address of registry address in the mainnet. + +#### web3.eth.ens.registry + +- `registry` was the way to get the ENS registry in 1.x. In 4.x the registry functionality is exposed directly through the `ens` class. + +#### resolver + +- `resolver` was already deprecated in the latest versions of 1.x. In 4.x it doesn't exist, use `getResolver` instead. + +#### setOwner + +- In 1.x documentation it is mentioned that `name`,`txConfig` and `callback` are the function arguments. This is wrong, since there is one more argument, `address`. So the right signature is `setOwner(name: string, address: string, txConfig?: TransactionConfig | undefined, callback?: ....)`. The same applies for 4.x, too. + +#### `getTTL` + +- In 4.x a `bigint` is returned instead of a `number`. + +### Removed functions + + - `getMultihash` is not supported in web3-eth-ens 4.x as it's deprecated in ENS public resolver + - Following functions are not supported in web3-eth-ens 4.x : + `setResolver` + `setSubnodeRecord` + `setApprovalForAll` + `isApprovedForAll` + `setSubnodeOwner` + `setTTL` + `setOwner` + `setRecord` + `setAddress` + `setPubkey` + `setContenthash` diff --git a/docs/docs/guides/web3_upgrade_guide/1.x/web3_eth_iban.md b/docs/docs/guides/web3_upgrade_guide/1.x/web3_eth_iban.md new file mode 100644 index 00000000000..33e60c93071 --- /dev/null +++ b/docs/docs/guides/web3_upgrade_guide/1.x/web3_eth_iban.md @@ -0,0 +1,40 @@ +--- +sidebar_position: 7 +sidebar_label: web3.eth.iban +--- + +# web3.eth.iban Migration Guide + +## Breaking Changes + +### Iban class + +#### The Iban contractor + +##### In version 1.x + +It used to just accept the passed string without any check. + +##### In version 4.x + +If the provided string was not of either the length of a direct IBAN (34 or 35), or the length of an indirect IBAN (20), an Error will be thrown. The error will contain the message `'Invalid IBAN was provided'` + +#### Calling `toAddress` on an Iban that is not Direct + +##### In version 1.x + +It used to behave differently, if it was called on an instance of IBAN, from if it was called as a static method. However, this used to happen only if the provided address was not a Direct IBAN. More specifically, if the instance method `new Iban(address).toAddress()` was called, it will return an empty string (`''`) for that non Direct IBAN. And if the static method `Iban.toAddress(address)` was called, it used to throw an Error with the message `'IBAN is indirect and can\'t be converted'`, for that non Direct IBAN. + +##### In version 4.x + +If the provided IBAN was not a Direct one, an error will be thrown which contains the message: `'Iban is indirect and cannot be converted. Must be length of 34 or 35'`. And this behavior is now the same for the instance method `new Iban(address).toAddress()` and the static method `Iban.toAddress(address)`. + +#### Calling `fromAddress` on an invalid address + +##### In version 1.x + +If the provided IBAN was not a valid Ethereum Address, an error used be thrown which contains the message `'Provided address is not a valid address: '+ address`. + +##### In version 4.x + +If the provided IBAN was not a valid Ethereum Address, an error object will be thrown which contains the message: `'Invalid value given "${address}". Error: 'invalid ethereum address'` and the code `1005`. diff --git a/docs/docs/guides/web3_upgrade_guide/1.x/web3_eth_migration_guide.md b/docs/docs/guides/web3_upgrade_guide/1.x/web3_eth_migration_guide.md new file mode 100644 index 00000000000..10b57e1d261 --- /dev/null +++ b/docs/docs/guides/web3_upgrade_guide/1.x/web3_eth_migration_guide.md @@ -0,0 +1,665 @@ +--- +sidebar_position: 3 +sidebar_label: web3.eth +--- + +# web3.eth Migration Guide + +## Breaking Changes + +All the API level interfaces returning or accepting `null` in 1.x, use `undefined` in 4.x. + +### Return Values + +#### Returns a `BigInt` instead of a number string + +- `web3.eth.getGasPrice` +- `web3.eth.getBalance` + +#### Returns a `BigInt` instead of a number + +- `web3.eth.getBlockNumber` +- `web3.eth.getBlockTransactionCount` +- `web3.eth.getBlockUncleCount` +- `web3.eth.getTransactionCount` +- `web3.eth.estimateGas` + +--- + +#### web3.eth.getBlock + +- Returns a `BigInt` instead of a number for the following properties: + - `baseFeePerGas` + - `gasLimit` + - `gasUsed` + - `number` + - `size` + - `timestamp` +- Returns a `BigInt` instead of a number string for the following properties: + - `difficulty` + - `totalDifficulty` + +#### web3.eth.getUncle + +- Returns a `BigInt` instead of a number for the following properties: + - `baseFeePerGas` + - `gasLimit` + - `gasUsed` + - `number` + - `size` + - `timestamp` +- Returns a `BigInt` instead of a number string for the following properties: + - `difficulty` + +#### web3.eth.getTransaction + +- Returns a `BigInt` instead of a number for the following properties: + - `blockNumber` + - `gas` + - `nonce` + - `transactionIndex` + - `type` +- Returns a `BigInt` instead of a number string for the following properties: + - `gasPrice` + - `maxFeePerGas` + - `maxPriorityFeePerGas` + - `value` + - `chainId` + +#### web3.eth.getPendingTransactions + +- Returns a `BigInt` instead of a number for the following properties: + - `blockNumber` + - `gas` + - `nonce` + - `transactionIndex` + - `type` +- Returns a `BigInt` instead of a number string for the following properties: + - `gasPrice` + - `maxFeePerGas` + - `maxPriorityFeePerGas` + - `value` + +#### web3.eth.getTransactionFromBlock + +- Returns a `BigInt` instead of a number for the following properties: + - `blockNumber` + - `gas` + - `nonce` + - `transactionIndex` + - `type` +- Returns a `BigInt` instead of a number string for the following properties: + - `gasPrice` + - `maxFeePerGas` + - `maxPriorityFeePerGas` + - `value` + +#### web3.eth.getTransactionReceipt + +- Returns a `BigInt` instead of a number for the following properties: + - `blockNumber` + - `cumulativeGasUsed` + - `effectiveGasPrice` + - `gasUsed` + - `transactionIndex` +- Returns a `BigInt` instead of a boolean for the following properties: + - `status` + +#### web3.eth.sendSignedTransaction + +- Returns a `BigInt` instead of a number for the following properties: + - `blockNumber` + - `cumulativeGasUsed` + - `effectiveGasPrice` + - `gasUsed` + - `transactionIndex` +- Returns a `BigInt` instead of a boolean for the following properties: + - `status` + +### Not Implemented + +- [extend](https://web3js.readthedocs.io/en/v1.7.3/web3-eth.html#extend) functionality not implemented + +### Defaults and Configs + +- In 1.x all default values that returned `null` now return `undefined` in 4.x, these include: + + - `givenProvider` + - `currentProvider` + - `web3.eth.defaultAccount` + - 1.x has `undefined` documented as default, but in implementation it's `null` + +- `web3.eth.defaultHardfork` default is `"london"` instead of `undefined` + - 1.x has `"london"` documented as default, but in implementation it's `undefined` +- `web3.eth.defaultChain` default is `"mainnet"` instead of `undefined` + - 1.x has `"mainnet"` documented as default, but in implementation it's `undefined` + +### Web3Eth Methods + +#### web3.eth.getHashrate + +4.x `getHashrate` is deprecated, and will be removed in a future release. Please use `getHashRate`. + +``` +web3.eth.getHashrate // -> deprecated, do not use +web3.eth.getHashRate // -> correct usage +``` + +#### web3.eth.getFeeHistory + +4.x returns a `BigInt` for `oldestBlock` instead of the hex string that's returned in 1.x. + +```typescript +// in 1.x +await web3.eth.getFeeHistory('0x1', 'latest', []); +// { +// oldestBlock: '0x0', +// baseFeePerGas: [ '0x3b9aca00', '0x342770c0' ], +// gasUsedRatio: [ 0 ] +// } + +// in 4.x +await web3.eth.getFeeHistory('0x1', 'latest', []); +// { +// oldestBlock: 0n, +// baseFeePerGas: [ '0x3b9aca00', '0x342770c0' ], +// gasUsedRatio: [ 0 ] +// } +``` + +#### web3.eth.sendTransaction + +- `userTransactionObject.chain` no longer defaults to `"mainnet"`, will be `undefined` if not provided +- `userTransactionObject.hardfork` no longer defaults to `"london"`, will be `undefined` if not provided + +### PromiEvents + +#### sending + +- In 1.x, the event listener would receive a `payload` object as an argument. In 4.x, just the sent transaction object is received + +```typescript +// in 1.x +web3.eth.sendTransaction({ ... }).on('sending', (payload) => { ... }); +// payload would be: +// { +// method: 'eth_sendTransaction', +// params: [ +// { +// from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', +// to: '0x0000000000000000000000000000000000000000', +// value: '0x1', +// maxPriorityFeePerGas: '0x9502F900', +// maxFeePerGas: '0xc3e17d20' +// } +// ], +// callback: undefined +// } + +// in 4.x +web3.eth.sendTransaction({ ... }).on('sending', (sendTransactionObject) => { ... }); +// sendTransactionObject would be: +// { +// from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', +// to: '0x0000000000000000000000000000000000000000', +// value: '0x1', +// gasPrice: '0x77359400', +// maxPriorityFeePerGas: undefined, +// maxFeePerGas: undefined +// } +``` + +#### sent + +- In 1.x, the event listener would receive a `payload` object as an argument. In 4.x just the sent transaction object is received + +```typescript +// in 1.x +web3.eth.sendTransaction({ ... }).on('sent', (payload) => { ... }); +// payload would be: +// { +// method: 'eth_sendTransaction', +// params: [ +// { +// from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', +// to: '0x0000000000000000000000000000000000000000', +// value: '0x1' +// } +// ], +// callback: undefined +// } + +// in 4.x +web3.eth.sendTransaction({ ... }).on('sent', (sentTransactionObject) => { ... }); +// sentTransactionObject would be: +// { +// from: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', +// to: '0x0000000000000000000000000000000000000000', +// value: '0x1', +// gasPrice: '0x77359400', +// maxPriorityFeePerGas: undefined, +// maxFeePerGas: undefined +// } +``` + +#### receipt + +- The `receipt` object the event listener receives: + - Returns a `BigInt` instead of a number for the following properties: + - `transactionIndex` + - `blockNumber` + - `cumulativeGasUsed` + - `gasUsed` + - `effectiveGasPrice` + - Returns a `BigInt` instead of a boolean for the following properties: + - `status` + +```typescript +// in 1.x +web3.eth.sendTransaction({ ... }).on('receipt', (receipt) => { ... }); +// receipt would be: +// { +// blockHash: '0x55ff0699736027fd0eddf90e890294ba6765ecf699cefd2f6c255a2fdae06a5a', +// blockNumber: 14966017n, +// cumulativeGasUsed: 6992382n, +// effectiveGasPrice: 31200410061n, +// from: '0x3b7414be92e87837d6f95d01b8e3c93ac9d20804', +// gasUsed: 21000n, +// logs: [], +// logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', +// status: 1n, +// to: '0x8b664e252b7c5c87c17e73c69f16e56454c9661f', +// transactionHash: '0x219f94fa188e6a0927c3c659537b5c76f4a750b948e7a73c80b28786227aa593', +// transactionIndex: 80n, +// type: 2n +// } + +// in 4.x +web3.eth.sendTransaction({ ... }).on('receipt', (receipt) => { ... }); +// receipt would be: +// { +// transactionHash: '0xef37e818889e7b40df24f8546ae15b16cda7e8fdc99ad76356611401cb4c4f93', +// transactionIndex: '0x0', +// blockNumber: '0xf', +// blockHash: '0x8a700d6665a5b91789f7525490c453d55208f7560662aa3ff2eaab8d297bfd07', +// from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', +// to: '0x0000000000000000000000000000000000000000', +// cumulativeGasUsed: '0x5208', +// gasUsed: '0x5208', +// logs: [], +// logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', +// status: '0x1', +// effectiveGasPrice: '0x77359400', +// type: '0x0' +// } +``` + +#### confirmation + +- In 1.x, this event listener would receive `confirmationNumber` and `receipt` as arguments, in 4.x an object containing the properties: `confirmationNumber`, `receipt`, and `latestBlockHash` will be received +- `confirmationNumber` is returned as a `BigInt` instead of a number +- For the returned `receipt` object: + - Returns a `BigInt` instead of a number for the following properties: + - `transactionIndex` + - `blockNumber` + - `cumulativeGasUsed` + - `gasUsed` + - `effectiveGasPrice` + - Returns a `BigInt` instead of a boolean for the following properties: + - `status` + +```typescript +// in 1.x +web3.eth.sendTransaction({ ... }).on('confirmation', (confirmationNumber, receipt) => { ... }); +// confirmationNumber would be: 1 +// receipt would be: +// { +// transactionHash: '0x1e657e53a0e5a75fe36af8a05c89b8a8ea155c951ce43a7c42a77a48c4c89e2f', +// transactionIndex: 0, +// blockNumber: 2, +// blockHash: '0x940bfb359be8064d7c65408efaba3068bdd6995b810aae5fb355bd3d95d3079b', +// from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', +// to: '0x0000000000000000000000000000000000000000', +// cumulativeGasUsed: 21000, +// gasUsed: 21000, +// contractAddress: null, +// logs: [], +// logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', +// status: true, +// effectiveGasPrice: 3265778125, +// type: '0x2' +// } + +// in 4.x +web3.eth.sendTransaction({ ... }).on('confirmation', (confirmationObject) => { ... }); +// confirmationObject would have the following structure: +// { +// confirmationNumber: 2n, +// receipt: { +// transactionHash: '0xd93fe25c2066cd8f15565bcff693507a3c70f5fb9387db57f939ae91f4080c6c', +// transactionIndex: 0n, +// blockNumber: 5n, +// blockHash: '0xe1775977a8041cb2709136804e4be609135f8367b49d38960f92a95b4c02189a', +// from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', +// to: '0x0000000000000000000000000000000000000000', +// cumulativeGasUsed: 5208n, +// gasUsed: 5208n, +// logs: [], +// logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', +// status: 1n, +// effectiveGasPrice: 77359400n, +// type: '0x0' +// }, +// latestBlockHash: '0xb2ef3763190da82d8efa938f73efa5bb21e3d95c2ce25dd38ca21eea1a942260' +// } +``` + +- In 1.x, an event was emitted for each confirmation starting from `0` (the first block the transaction was included in), in 4.x confirmations start from `1` and the first event to be emitted will have a `confirmationNumber` of `2` + +```typescript +// in 1.x +web3.eth.sendTransaction({ ... }).on('confirmation', (confirmationNumber, receipt) => { + // confirmationNumber would equal 1 the first time the event was emitted + // confirmationNumber would then equal 2 the next time + // and so on until 12 (or whatever transactionConfirmationBlocks is set to) confirmations are found +}); + +// in 4.x +web3.eth.sendTransaction({ ... }).on('confirmation', (confirmationObject) => { + // confirmationNumber would equal 2 the first time the event was emitted + // confirmationNumber would then equal 3 the next time + // and so on until 12 (or whatever transactionConfirmationBlocks is set to) confirmations are found +}); +``` + +### web3.eth.sign + +- To-be-signed data must be provided as a `HexString` + +```typescript +// In 1.x, data can be provided as both a UTF-8 string and a hex string +await web3.eth.sign('Hello world', '0xd8c375f286c258521564da00ddee3945d1d057c4'); +// 0x7907ca312eb55a54673255dfa4e947d7533dcf746460c82b50e281fe88a6f0d17d602d2205b2d7c137cf7cb9b86a7ea976fd062e39bc08373dffa72f020776e11c +await web3.eth.sign( + web3.utils.utf8ToHex('Hello world'), + '0xd8c375f286c258521564da00ddee3945d1d057c4', +); +// 0x7907ca312eb55a54673255dfa4e947d7533dcf746460c82b50e281fe88a6f0d17d602d2205b2d7c137cf7cb9b86a7ea976fd062e39bc08373dffa72f020776e11c + +// 4.x only supports Hex Strings +await web3.eth.sign( + web3.utils.utf8ToHex('Hello world'), + '0xd8c375f286c258521564da00ddee3945d1d057c4', +); +// 0x7907ca312eb55a54673255dfa4e947d7533dcf746460c82b50e281fe88a6f0d17d602d2205b2d7c137cf7cb9b86a7ea976fd062e39bc08373dffa72f020776e11c +``` + +### web3.eth.signTransaction + +- In 1.x, for untyped, `0x0` and `0x1` typed transactions, `maxPriorityFeePerGas` and `maxFeePerGas` are set to `null`. For `0x2` typed transactions, `gasPrice` is set to `null`. In 4.x these properties are not present unless provided +- In 1.x contract deployment data is provided via the `input` property, while in 4.x it is provided using the `data` property +- In 1.x the hash of the transaction is included in the returned `transaction` object, while in 4.x it's not + +```typescript +// In 1.x - Legacy (type 0x0) transaction +await web3.eth.signTransaction({ + from: '0x95Cd1391888fe2460371c67cc3e45b9579c3E0dA', + to: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + gas: '21000', + gasPrice: '0xc3e17d20', + nonce: '0x4', +}); +// { +// raw: '0x02f86c82053904849502f90084c3e17d20825208946e599da0bff7a6598ac1224e4985430bf16458a48080c080a0711c981b34204725019d9851ee0c127543b0c7caf4f8850024e26aefabf26f20a033d8447d959bd596c90d57db90917a126b95a0f152c9c86b36d97b177f7ae85f', +// tx: { +// type: '0x2', +// nonce: '0x4', +// gasPrice: '0xc3e17d20, +// maxPriorityFeePerGas: null, +// maxFeePerGas: null, +// gas: '0x5208', +// value: '0x0', +// input: '0x', +// v: '0x0', +// r: '0x711c981b34204725019d9851ee0c127543b0c7caf4f8850024e26aefabf26f20', +// s: '0x33d8447d959bd596c90d57db90917a126b95a0f152c9c86b36d97b177f7ae85f', +// to: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', +// chainId: '0x539', +// accessList: [], +// hash: '0x2ddb1224899bcbc07c89631870870c61195214bab64d60985cd6d8f1c2fd872b' +// } +// } + +// In 1.x - EIP-1559 (type 0x2) transaction +await web3.eth.signTransaction({ + from: '0x95Cd1391888fe2460371c67cc3e45b9579c3E0dA', + to: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + gas: '21000', + maxPriorityFeePerGas: '0x9502F900', + maxFeePerGas: '0xc3e17d20', + nonce: '0x4', +}); +// { +// raw: '0x02f86c82053904849502f90084c3e17d20825208946e599da0bff7a6598ac1224e4985430bf16458a48080c080a0711c981b34204725019d9851ee0c127543b0c7caf4f8850024e26aefabf26f20a033d8447d959bd596c90d57db90917a126b95a0f152c9c86b36d97b177f7ae85f', +// tx: { +// type: '0x2', +// nonce: '0x4', +// gasPrice: null, +// maxPriorityFeePerGas: '0x9502f900', +// maxFeePerGas: '0xc3e17d20', +// gas: '0x5208', +// value: '0x0', +// input: '0x', +// v: '0x0', +// r: '0x711c981b34204725019d9851ee0c127543b0c7caf4f8850024e26aefabf26f20', +// s: '0x33d8447d959bd596c90d57db90917a126b95a0f152c9c86b36d97b177f7ae85f', +// to: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', +// chainId: '0x539', +// accessList: [], +// hash: '0x2ddb1224899bcbc07c89631870870c61195214bab64d60985cd6d8f1c2fd872b' +// } +// } + +// In 4.x - Legacy (type 0x0) transaction +await web3.eth.signTransaction({ + from: '0x95Cd1391888fe2460371c67cc3e45b9579c3E0dA', + to: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + gas: '21000', + gasPrice: '0xc3e17d20', + nonce: '0x4', +}); +// { +// raw: '0x02f86c82053904849502f90084c3e17d20825208946e599da0bff7a6598ac1224e4985430bf16458a48080c080a0711c981b34204725019d9851ee0c127543b0c7caf4f8850024e26aefabf26f20a033d8447d959bd596c90d57db90917a126b95a0f152c9c86b36d97b177f7ae85f', +// tx: { +// type: 2n, +// nonce: 4n, +// gasPrice: 3286334752n, +// gas: 21000n, +// value: 0n, +// v: 0n, +// r: '0x711c981b34204725019d9851ee0c127543b0c7caf4f8850024e26aefabf26f20', +// s: '0x33d8447d959bd596c90d57db90917a126b95a0f152c9c86b36d97b177f7ae85f', +// to: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', +// chainId: 1337n, +// accessList: [], +// data: '0x' +// } +// } + +// In 4.x - EIP-1559 (type 0x2) transaction +await web3.eth.signTransaction({ + from: '0x95Cd1391888fe2460371c67cc3e45b9579c3E0dA', + to: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + gas: '21000', + maxPriorityFeePerGas: '0x9502F900', + maxFeePerGas: '0xc3e17d20', + nonce: '0x4', +}); +// { +// raw: '0x02f86c82053904849502f90084c3e17d20825208946e599da0bff7a6598ac1224e4985430bf16458a48080c080a0711c981b34204725019d9851ee0c127543b0c7caf4f8850024e26aefabf26f20a033d8447d959bd596c90d57db90917a126b95a0f152c9c86b36d97b177f7ae85f', +// tx: { +// type: 2n, +// nonce: 4n, +// maxPriorityFeePerGas: 2500000000n, +// maxFeePerGas: 3286334752n, +// gas: 21000n, +// value: 0n, +// v: 0n, +// r: '0x711c981b34204725019d9851ee0c127543b0c7caf4f8850024e26aefabf26f20', +// s: '0x33d8447d959bd596c90d57db90917a126b95a0f152c9c86b36d97b177f7ae85f', +// to: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', +// chainId: 1337n, +// accessList: [], +// data: '0x' +// } +// } +``` + +### web3.eth.getPastLogs + +- Returns a `BigInt` instead of a number for the following properties: + - `logIndex` + - `transactionIndex` + - `blockNumber` + +```typescript +//in 1.x +await web3.eth + .getPastLogs({ + address: '0xE012dB5CA859A3238DdC576c0092BA5E728B7268', + topics: ['0x617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab'], + }) + .then(console.log); +// [ +// { +// address: "0xe405df0ea854cd98df9f646559ce2001396e8f5b", +// topics: [ +// "0x617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab", +// ], +// data: "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000027431000000000000000000000000000000000000000000000000000000000000", +// blockNumber: 221, +// transactionHash: +// "0xc96bbd8308f70940aa465ecdf95c7ce8c687dede5c53e5ce5ce55434c6e406bd", +// transactionIndex: 0, +// blockHash: +// "0xfd1657fc5d2b18153aa569956718cd2d3a05285712208a9544dfc093966b9c5f", +// logIndex: 0, +// removed: false, +// }, +// ]; + +//in 4.x +await web3.eth + .getPastLogs({ + address: '0xE012dB5CA859A3238DdC576c0092BA5E728B7268', + topics: ['0x617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab'], + }) + .then(console.log); +// [ +// { +// address: "0xe405df0ea854cd98df9f646559ce2001396e8f5b", +// topics: [ +// "0x617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab", +// ], +// data: "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000027431000000000000000000000000000000000000000000000000000000000000", +// blockNumber: 221n, +// transactionHash: +// "0xc96bbd8308f70940aa465ecdf95c7ce8c687dede5c53e5ce5ce55434c6e406bd", +// transactionIndex: 0n, +// blockHash: +// "0xfd1657fc5d2b18153aa569956718cd2d3a05285712208a9544dfc093966b9c5f", +// logIndex: 0n, +// removed: false, +// }, +// ]; +``` + +### web3.eth.getChainId + +Returns a `BigInt` instead of a number string. + +```typescript +// in 1.x +web3.eth.getChainId().then(console.log); +// 1337 + +// in 4.x +web3.eth.getChainId().then(console.log); +// 1337n +``` + +### web3.eth.getProof + +- Returns a `BigInt` instead of a number string for the following properties: + - `balance` + - `nonce` + +In 1.x, `balance` and `nonce` were described as numbers. + +```typescript +// in 1.x +web3.eth + .getProof( + '0x10d53fb7D9C9EedC40A97B51663fFd8DcC651a6b', + [ + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + ], + 'latest', + ) + .then(console.log); +// { +// address: '0x10d53fb7D9C9EedC40A97B51663fFd8DcC651a6b', +// accountProof: [ +// '0xf90211a057107845987d38b07b52dd91268d5a41dc0c5d262feb2a21a27165387bca0447a063d1f4079378d594b3a02ac552c5d303fd0ddda203d674114468ee1908e3c61ba06e25ed79c830f5375e01e142f165f2cfd9c6c966e3755f62ae7eac87b6972dcba0e9d751f777e854f7c87fc590f20bd45d5142dd804904746fe0eec6969ef2904ca0e5eb80b4790935a22f416cbdf7abf5658c1b26d9aadcaddda80dfd30fb477605a06ebd45fd404417976368dfc3225139b9c475cd199f0e2ec9dc2bc66894c7b478a0389e57b4c2e590bd7fc4a42c5f8d1ae4f03f981c8d10fd028fe8a8cd21d4b9f6a063662eba9e6e5c1229f73d9b8123a35e837ab9b51c12bd2c21342860a850be5fa088a53f78919dddb7ec2eddb967b7d74eeab59c0352fe0a9fceeab86d3061a2aea06fec4053b58d1914ef325a74d9ad13658f19478091484935cbfb82f2ace45d07a099455c1fe3bc9c9c90668fcaf3996182b0ea32c36b16b757f877981e74265313a07afabdbb861f9c9c801a8be8b9a30fcad67b0468c1599f3150417df833b1ed15a0937108ade09abe0eb7a5d5abf7834cb4d5c6a42256071a203c97e219c9b35e4fa07333b514b144076aedef8232f460a65c5845fb7bee1dffa3d02a63d27ee103dda02a5f97f2acf28a2ef6098553188bb578f5699e5ddd86e750906427c04146638aa0b1ea877b1fb989471890e9e0eea1ca9ecabe4a501f5427dcc6122ac602ec5e5a80', +// '0xf8b1808080a01fcc2ac732952007a813f5d53b517a2f0c3b5faf38cd0654e564302e39e2fec68080a040cb340b7815612dc0705235c46f04565d5e7005b26b1544bd72d2a0cde1f7fb80a05902a1a7c70a64efedd39ed9ae25078e9054ab531c8fe4bdd7ff245ecd2bca0780a06117e0dc18ac6d32f46418eabf875a8cd21bf05b62013f87242824ca939cb776808080a0261eb1dc702fff2a022d7a2f0386224a760971187e3d6447958293f455aafbc78080', +// '0xf869a02032c2889a72d251d4f0bbf5eb448f4af962917185a86532af762ff82865ca68b846f8440180a0291bd0e0825fa92cfeb0d3b28529bae6709aa1db89a25f7e62ba5422bbb1e10ea09bbff76f89bb6a6e787eea245acb599900f2d58faab236e165e2b32df0198c84' +// ], +// balance: '0', +// codeHash: '0x9bbff76f89bb6a6e787eea245acb599900f2d58faab236e165e2b32df0198c84', +// nonce: '1', +// storageHash: '0x291bd0e0825fa92cfeb0d3b28529bae6709aa1db89a25f7e62ba5422bbb1e10e', +// storageProof: [ +// { +// key: '0x0', +// value: '0x736f6c79656e7420677265656e2069732070656f706c6500000000000000002e', +// proof: [Array] +// }, +// { key: '0x1', value: '0x0', proof: [Array] } +// ] +//} +// in 4.x +web3.eth + .getProof( + '0x10d53fb7D9C9EedC40A97B51663fFd8DcC651a6b', + [ + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + ], + 'latest', + ) + .then(console.log); + { +// accountProof: [ +// '0xf90211a057107845987d38b07b52dd91268d5a41dc0c5d262feb2a21a27165387bca0447a063d1f4079378d594b3a02ac552c5d303fd0ddda203d674114468ee1908e3c61ba06e25ed79c830f5375e01e142f165f2cfd9c6c966e3755f62ae7eac87b6972dcba0e9d751f777e854f7c87fc590f20bd45d5142dd804904746fe0eec6969ef2904ca0e5eb80b4790935a22f416cbdf7abf5658c1b26d9aadcaddda80dfd30fb477605a06ebd45fd404417976368dfc3225139b9c475cd199f0e2ec9dc2bc66894c7b478a0389e57b4c2e590bd7fc4a42c5f8d1ae4f03f981c8d10fd028fe8a8cd21d4b9f6a063662eba9e6e5c1229f73d9b8123a35e837ab9b51c12bd2c21342860a850be5fa088a53f78919dddb7ec2eddb967b7d74eeab59c0352fe0a9fceeab86d3061a2aea06fec4053b58d1914ef325a74d9ad13658f19478091484935cbfb82f2ace45d07a099455c1fe3bc9c9c90668fcaf3996182b0ea32c36b16b757f877981e74265313a07afabdbb861f9c9c801a8be8b9a30fcad67b0468c1599f3150417df833b1ed15a0937108ade09abe0eb7a5d5abf7834cb4d5c6a42256071a203c97e219c9b35e4fa07333b514b144076aedef8232f460a65c5845fb7bee1dffa3d02a63d27ee103dda02a5f97f2acf28a2ef6098553188bb578f5699e5ddd86e750906427c04146638aa0b1ea877b1fb989471890e9e0eea1ca9ecabe4a501f5427dcc6122ac602ec5e5a80', +// '0xf8b1808080a01fcc2ac732952007a813f5d53b517a2f0c3b5faf38cd0654e564302e39e2fec68080a040cb340b7815612dc0705235c46f04565d5e7005b26b1544bd72d2a0cde1f7fb80a05902a1a7c70a64efedd39ed9ae25078e9054ab531c8fe4bdd7ff245ecd2bca0780a06117e0dc18ac6d32f46418eabf875a8cd21bf05b62013f87242824ca939cb776808080a0261eb1dc702fff2a022d7a2f0386224a760971187e3d6447958293f455aafbc78080', +// '0xf869a02032c2889a72d251d4f0bbf5eb448f4af962917185a86532af762ff82865ca68b846f8440180a0291bd0e0825fa92cfeb0d3b28529bae6709aa1db89a25f7e62ba5422bbb1e10ea09bbff76f89bb6a6e787eea245acb599900f2d58faab236e165e2b32df0198c84' +// ], +// balance: 0n, +// codeHash: '0x9bbff76f89bb6a6e787eea245acb599900f2d58faab236e165e2b32df0198c84', +// nonce: 1n, +// storageHash: '0x291bd0e0825fa92cfeb0d3b28529bae6709aa1db89a25f7e62ba5422bbb1e10e', +// storageProof: [ +// { +// key: '0x0000000000000000000000000000000000000000000000000000000000000000', +// value: '0x736f6c79656e7420677265656e2069732070656f706c6500000000000000002e', +// proof: [Array] +// }, +// { +// key: '0x0000000000000000000000000000000000000000000000000000000000000001', +// value: '0x0', +// proof: [Array] +// } +// ] +// } +``` diff --git a/docs/docs/guides/web3_upgrade_guide/1.x/web3_utils_migration_guide.md b/docs/docs/guides/web3_upgrade_guide/1.x/web3_utils_migration_guide.md new file mode 100644 index 00000000000..1b7410aa197 --- /dev/null +++ b/docs/docs/guides/web3_upgrade_guide/1.x/web3_utils_migration_guide.md @@ -0,0 +1,76 @@ +--- +sidebar_position: 11 +sidebar_label: web3.utils +--- + +# web3 Utils Migration Guide + +## Import + +To make use you only import the utility functions which are needed by your app. We encourage the named import for `web3-utils` package. This change has no impact on the using the namespace `Web3.utils` or `web3.utils`. If you still want to import the full utils it can be done as following: + +```ts +// 1.x +import web3Utils from 'web3-utils'; + +// 4.x +import * as web3Utils from 'web3-utils'; +``` + +## Unit conversion functions + +The `toWei` does not have an optional second parameter. You have to pass the source unit explicitly. + +```ts +// 1.x +web3.utils.toWei('0.1'); + +// 4.x +web3.utils.toWei('0.1', 'ether'); +``` + +## Validation functions + +Validation functions has been moved to the new package `web3-validator`. Actually, you can still import them from `web3-util`. But they are marked as "deprecated" and you are encouraged to import them from `web3-validator`. + +However, there are changes for the following: + +### `isHex` and `isHexStrict` validation functions + +There is a fix, and some edge-cases-changes for those 2 functions but the overall functionality stayed the same. And here is exactly whet changed: + +#### `isHex` now returns `true` for all negative numbers + +```ts +isHex('-123'); // in 1.x used to return `false`. But changed in 4.x to return `true` +// `true` +``` + +#### `isHex` now returns `false` for an empty string + +```ts +isHex(''); // in 1.x used to return `true`. But changed in 4.x to return `false` +// `false` +``` + +#### `isHex` and `isHexStrict` now returns `false` for `'-0x'` + +```ts +isHex('-0x'); // in 1.x used to return `true`. But changed in 4.x to return `false` +// `false` + +isHexStrict('-0x'); // in 1.x used to return `true`. But changed in 4.x to return `false` +// `false` +``` + +## Other functions + +`compareBlockNumbers` now accepts either both block tags or both block numbers for comparison as parameters. The only exception is comparison of block tag `earliest` with numbers. + +```ts +compareBlockNumbers('earliest', 'safe'); // its valid comparison, and it will return `-1` + +compareBlockNumbers(8692, 2); // its valid comparison, and it will return `1` + +compareBlockNumbers('latest', 500); // in 1.x it used to return `1`, but now it will throw error InvalidBlockError +``` diff --git a/docs/docs/guides/web3_upgrade_guide/_category_.yml b/docs/docs/guides/web3_upgrade_guide/_category_.yml new file mode 100644 index 00000000000..7c77bf16406 --- /dev/null +++ b/docs/docs/guides/web3_upgrade_guide/_category_.yml @@ -0,0 +1,4 @@ +label: 'Upgrading' +collapsible: true +collapsed: false +link: null \ No newline at end of file diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js new file mode 100644 index 00000000000..94bb0216cfc --- /dev/null +++ b/docs/docusaurus.config.js @@ -0,0 +1,179 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +const lightCodeTheme = require('prism-react-renderer/themes/github'); +const darkCodeTheme = require('prism-react-renderer/themes/dracula'); +const { join } = require('path'); + +const packages = [ + 'web3', + 'web3-eth', + 'web3-eth-contract', + 'web3-utils', + 'web3-validator', + 'web3-types', + 'web3-core', + 'web3-errors', + 'web3-net', + 'web3-eth-abi', + 'web3-eth-accounts', + 'web3-eth-ens', + 'web3-eth-iban', + 'web3-eth-personal', + 'web3-providers-http', + 'web3-providers-ws', + 'web3-providers-ipc', +]; + +/** @type {import('@docusaurus/types').Config} */ +const config = { + title: 'web3.js', + tagline: 'The ultimate JavaScript library for Ethereum', + url: 'https://docs.web3js.org', + baseUrl: '/', + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'throw', + favicon: 'img/favicon.ico', + + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + organizationName: 'ChainSafe', // Usually your GitHub org/user name. + projectName: 'web3.js', // Usually your repo name. + + // Even if you don't use internalization, you can use this field to set useful + // metadata like html lang. For example, if your site is Chinese, you may want + // to replace "en" with "zh-Hans". + i18n: { + defaultLocale: 'en', + locales: ['en'], + }, + + plugins: [ + '@docusaurus/theme-live-codeblock', + [ + '@mpetrunic/docusaurus-plugin-typedoc-api', + { + projectRoot: join(__dirname, '..'), + // Monorepo + packages: packages.map(p => `packages/${p}`), + minimal: false, + debug: true, + changelogs: true, + readmes: false, + tsconfigName: 'docs/tsconfig.docs.json', + typedocOptions: { + plugin: [ + 'typedoc-monorepo-link-types', + 'typedoc-plugin-extras', + 'typedoc-plugin-mdn-links', + ], + }, + }, + ], + 'docusaurus-lunr-search', + ], + presets: [ + [ + 'classic', + /** @type {import('@docusaurus/preset-classic').Options} */ + ({ + docs: { + sidebarPath: require.resolve('./sidebars.js'), + routeBasePath: '/', // Serve the docs at the site's root + // Please change this to your repo. + // Remove this to remove the "edit this page" links. + editUrl: 'https://github.com/web3/web3.js/tree/4.x/docs', + }, + theme: { + customCss: require.resolve('./src/css/custom.css'), + }, + }), + ], + ], + + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + navbar: { + title: 'Web3.js Docs', + logo: { + src: 'img/web3js.svg', + }, + items: [ + { + to: '/', + activeBasePath: '/', + label: 'Documentation', + position: 'left', + }, + { + to: 'api', // 'api' is the 'out' directory + label: 'API', + position: 'left', + }, + { + to: '/glossary/json_interface', + activeBasePath: '/glossary/', + label: 'Glossary', + position: 'left', + }, + { + href: 'https://github.com/ChainSafe/web3.js/tree/4.x/', + label: 'GitHub', + position: 'right', + }, + { + href: 'https://web3js.org/#/', + label: 'Web3js.org', + position: 'right', + }, + ], + }, + footer: { + style: 'dark', + links: [ + { + title: 'Community', + items: [ + { + label: 'Stack Overflow', + href: 'https://stackoverflow.com/questions/tagged/web3js', + }, + { + label: 'Discord', + href: 'https://discord.com/invite/pb3U4zE8ca', + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} Web3.js . Built with Docusaurus.`, + }, + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + }, + liveCodeBlock: { + /** + * The position of the live playground, above or under the editor + * Possible values: "top" | "bottom" + */ + playgroundPosition: 'bottom', + }, + }), +}; + +module.exports = config; diff --git a/docs/getting-started.rst b/docs/getting-started.rst deleted file mode 100644 index 303b22857cd..00000000000 --- a/docs/getting-started.rst +++ /dev/null @@ -1,42 +0,0 @@ - -=============== -Getting Started -=============== - -The web3.js library is a collection of modules that contain functionality for the ethereum ecosystem. - -- ``web3-eth`` is for the ethereum blockchain and smart contracts. -- ``web3-shh`` is for the whisper protocol, to communicate p2p and broadcast. -- ``web3-bzz`` is for the swarm protocol, the decentralized file storage. -- ``web3-utils`` contains useful helper functions for Dapp developers. - - -.. _adding-web3: - -Adding web3.js -============== - -.. index:: npm -.. index:: yarn - -First you need to get web3.js into your project. This can be done using the following methods: - -- npm: ``npm install web3`` -- yarn: ``yarn add web3`` -- pure js: link the ``dist/web3.min.js`` - -After that you need to create a web3 instance and set a provider. - -Most Ethereum-supported browsers like MetaMask have an `EIP-1193 `_ compliant provider available at ``window.ethereum``. - -For web3.js, check ``Web3.givenProvider``. - -If this property is ``null`` you should connect to a remote/local node. - -.. code-block:: javascript - - // In Node.js use: const Web3 = require('web3'); - - let web3 = new Web3(Web3.givenProvider || "ws://localhost:8545"); - -That's it! now you can use the ``web3`` object. diff --git a/docs/glossary.rst b/docs/glossary.rst deleted file mode 100644 index d3b1967b934..00000000000 --- a/docs/glossary.rst +++ /dev/null @@ -1,97 +0,0 @@ - -======== -Glossary -======== - - - -.. _glossary-json-interface: - ------------------------------------------------------------------------------- - -json interface -===================== - -The json interface is a json object describing the `Application Binary Interface (ABI) `_ for an Ethereum smart contract. - -Using this json interface web3.js is able to create JavaScript object representing the smart contract and its methods and events using the :ref:`web3.eth.Contract object `. - -------- -Specification -------- - -Functions: - -- ``type``: ``"function"``, ``"constructor"`` (can be omitted, defaulting to ``"function"``; ``"fallback"`` also possible but not relevant in web3.js); -- ``name``: the name of the function (only present for function types); -- ``constant``: ``true`` if function is specified to not modify the blockchain state; -- ``payable``: ``true`` if function accepts ether, defaults to ``false``; -- ``stateMutability``: a string with one of the following values: ``pure`` (specified to not read blockchain state), ``view`` (same as ``constant`` above), ``nonpayable`` and ``payable`` (same as ``payable`` above); -- ``inputs``: an array of objects, each of which contains: - - - ``name``: the name of the parameter; - - ``type``: the canonical type of the parameter. -- ``outputs``: an array of objects same as ``inputs``, can be omitted if no outputs exist. - -Events: - -- ``type``: always ``"event"`` -- ``name``: the name of the event; -- ``inputs``: an array of objects, each of which contains: - - - ``name``: the name of the parameter; - - ``type``: the canonical type of the parameter. - - ``indexed``: ``true`` if the field is part of the log's topics, ``false`` if it one of the log's data segment. -- ``anonymous``: ``true`` if the event was declared as ``anonymous``. - - -------- -Example -------- - -.. code-block:: javascript - - contract Test { - uint a; - address d = 0x12345678901234567890123456789012; - - function Test(uint testInt) { a = testInt;} - - event Event(uint indexed b, bytes32 c); - - event Event2(uint indexed b, bytes32 c); - - function foo(uint b, bytes32 c) returns(address) { - Event(b, c); - return d; - } - } - - // would result in the JSON: - [{ - "type":"constructor", - "payable":false, - "stateMutability":"nonpayable" - "inputs":[{"name":"testInt","type":"uint256"}], - },{ - "type":"function", - "name":"foo", - "constant":false, - "payable":false, - "stateMutability":"nonpayable", - "inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}], - "outputs":[{"name":"","type":"address"}] - },{ - "type":"event", - "name":"Event", - "inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}], - "anonymous":false - },{ - "type":"event", - "name":"Event2", - "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}], - "anonymous":false - }] - - ------------------------------------------------------------------------------- diff --git a/docs/include_package-core.rst b/docs/include_package-core.rst deleted file mode 100644 index 9cc0e9bc8c1..00000000000 --- a/docs/include_package-core.rst +++ /dev/null @@ -1,360 +0,0 @@ - - -setProvider -===================== - -.. code-block:: javascript - - web3.setProvider(myProvider) - web3.eth.setProvider(myProvider) - web3.shh.setProvider(myProvider) - web3.bzz.setProvider(myProvider) - ... - -Will change the provider for its module. - -.. note:: - When called on the umbrella package ``web3`` it will also set the provider for all sub modules ``web3.eth``, ``web3.shh``, etc. EXCEPT ``web3.bzz`` which needs a separate provider at all times. - ----------- -Parameters ----------- - -1. ``Object`` - ``myProvider``: :ref:`a valid provider `. - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - var Web3 = require('web3'); - var web3 = new Web3('http://localhost:8545'); - // or - var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545')); - - // change provider - web3.setProvider('ws://localhost:8546'); - // or - web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:8546')); - - // Using the IPC provider in node.js - var net = require('net'); - var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os path - // or - var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os path - // on windows the path is: "\\\\.\\pipe\\geth.ipc" - // on linux the path is: "/users/myuser/.ethereum/geth.ipc" - - ------------------------------------------------------------------------------- - -providers -===================== - -.. code-block:: javascript - - web3.providers - web3.eth.providers - web3.shh.providers - web3.bzz.providers - ... - -Contains the current available :ref:`providers `. - ----------- -Value ----------- - -``Object`` with the following providers: - - - ``Object`` - ``HttpProvider``: The HTTP provider is **deprecated**, as it won't work for subscriptions. - - ``Object`` - ``WebsocketProvider``: The Websocket provider is the standard for usage in legacy browsers. - - ``Object`` - ``IpcProvider``: The IPC provider is used node.js dapps when running a local node. Gives the most secure connection. - -------- -Example -------- - -.. code-block:: javascript - - var Web3 = require('web3'); - // use the given Provider, e.g in Mist, or instantiate a new websocket provider - var web3 = new Web3(Web3.givenProvider || 'ws://remotenode.com:8546'); - // or - var web3 = new Web3(Web3.givenProvider || new Web3.providers.WebsocketProvider('ws://remotenode.com:8546')); - - // Using the IPC provider in node.js - var net = require('net'); - - var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os path - // or - var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os path - // on windows the path is: "\\\\.\\pipe\\geth.ipc" - // on linux the path is: "/users/myuser/.ethereum/geth.ipc" - -------------- -Configuration -------------- - -.. code-block:: javascript - - // ==== - // Http - // ==== - - var Web3HttpProvider = require('web3-providers-http'); - - var options = { - keepAlive: true, - withCredentials: false, - timeout: 20000, // ms - headers: [ - { - name: 'Access-Control-Allow-Origin', - value: '*' - }, - { - ... - } - ], - agent: { - http: http.Agent(...), - baseUrl: '' - } - }; - - var provider = new Web3HttpProvider('http://localhost:8545', options); - - // ========== - // Websockets - // ========== - - var Web3WsProvider = require('web3-providers-ws'); - - var options = { - timeout: 30000, // ms - - // Useful for credentialed urls, e.g: ws://username:password@localhost:8546 - headers: { - authorization: 'Basic username:password' - }, - - clientConfig: { - // Useful if requests are large - maxReceivedFrameSize: 100000000, // bytes - default: 1MiB - maxReceivedMessageSize: 100000000, // bytes - default: 8MiB - - // Useful to keep a connection alive - keepalive: true, - keepaliveInterval: 60000 // ms - }, - - // Enable auto reconnection - reconnect: { - auto: true, - delay: 5000, // ms - maxAttempts: 5, - onTimeout: false - } - }; - - var ws = new Web3WsProvider('ws://localhost:8546', options); - - -More information for the Http and Websocket provider modules can be found here: - - - `HttpProvider `_ - - `WebsocketProvider `_ - ------------------------------------------------------------------------------- - -givenProvider -===================== - -.. code-block:: javascript - - web3.givenProvider - web3.eth.givenProvider - web3.shh.givenProvider - web3.bzz.givenProvider - ... - -When using web3.js in an Ethereum compatible browser, it will set with the current native provider by that browser. -Will return the given provider by the (browser) environment, otherwise ``null``. - - -------- -Returns -------- - -``Object``: The given provider set or ``null``; - -------- -Example -------- - -.. code-block:: javascript - web3.setProvider(web3.givenProvider || "ws://remotenode.com:8546"); - ------------------------------------------------------------------------------- - - -currentProvider -===================== - -.. code-block:: javascript - - web3.currentProvider - web3.eth.currentProvider - web3.shh.currentProvider - web3.bzz.currentProvider - ... - -Will return the current provider, otherwise ``null``. - - -------- -Returns -------- - -``Object``: The current provider set or ``null``. - -------- -Example -------- - -.. code-block:: javascript - if(!web3.currentProvider) { - web3.setProvider("http://localhost:8545"); - } - ------------------------------------------------------------------------------- - -BatchRequest -===================== - -.. code-block:: javascript - - new web3.BatchRequest() - new web3.eth.BatchRequest() - new web3.shh.BatchRequest() - new web3.bzz.BatchRequest() - -Class to create and execute batch requests. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``Object``: With the following methods: - - - ``add(request)``: To add a request object to the batch call. - - ``execute()``: Will execute the batch request. - -------- -Example -------- - -.. code-block:: javascript - - var contract = new web3.eth.Contract(abi, address); - - var batch = new web3.BatchRequest(); - batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback)); - batch.add(contract.methods.balance(address).call.request({from: '0x0000000000000000000000000000000000000000'}, callback2)); - batch.execute(); - - ------------------------------------------------------------------------------- - -extend -===================== - -.. code-block:: javascript - - web3.extend(methods) - web3.eth.extend(methods) - web3.shh.extend(methods) - web3.bzz.extend(methods) - ... - -Allows extending the web3 modules. - -.. note:: You also have ``*.extend.formatters`` as additional formatter functions to be used for input and output formatting. Please see the `source file `_ for function details. - ----------- -Parameters ----------- - -1. ``methods`` - ``Object``: Extension object with array of methods description objects as follows: - - ``property`` - ``String``: (optional) The name of the property to add to the module. If no property is set it will be added to the module directly. - - ``methods`` - ``Array``: The array of method descriptions: - - ``name`` - ``String``: Name of the method to add. - - ``call`` - ``String``: The RPC method name. - - ``params`` - ``Number``: (optional) The number of parameters for that function. Default 0. - - ``inputFormatter`` - ``Array``: (optional) Array of inputformatter functions. Each array item responds to a function parameter, so if you want some parameters not to be formatted, add a ``null`` instead. - - ``outputFormatter - ``Function``: (optional) Can be used to format the output of the method. - - ----------- -Returns ----------- - -``Object``: The extended module. - -------- -Example -------- - -.. code-block:: javascript - - web3.extend({ - property: 'myModule', - methods: [{ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [web3.extend.formatters.inputAddressFormatter, web3.extend.formatters.inputDefaultBlockNumberFormatter], - outputFormatter: web3.utils.hexToNumberString - },{ - name: 'getGasPriceSuperFunction', - call: 'eth_gasPriceSuper', - params: 2, - inputFormatter: [null, web3.utils.numberToHex] - }] - }); - - web3.extend({ - methods: [{ - name: 'directCall', - call: 'eth_callForFun', - }] - }); - - console.log(web3); - > Web3 { - myModule: { - getBalance: function(){}, - getGasPriceSuperFunction: function(){} - }, - directCall: function(){}, - eth: Eth {...}, - bzz: Bzz {...}, - ... - } - - ------------------------------------------------------------------------------- diff --git a/docs/include_package-net.rst b/docs/include_package-net.rst deleted file mode 100644 index 3b0b0bc4ea8..00000000000 --- a/docs/include_package-net.rst +++ /dev/null @@ -1,106 +0,0 @@ - -.. _net-getid: - -getId -========= - -.. code-block:: javascript - - web3.eth.net.getId([callback]) - web3.bzz.net.getId([callback]) - web3.shh.net.getId([callback]) - -Gets the current network ID. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``Promise`` returns ``Number``: The network ID. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.net.getId() - .then(console.log); - > 1 - ------------------------------------------------------------------------------- - - -isListening -========= - -.. code-block:: javascript - - web3.eth.net.isListening([callback]) - web3.bzz.net.isListening([callback]) - web3.shh.net.isListening([callback]) - -Checks if the node is listening for peers. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``Promise`` returns ``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.net.isListening() - .then(console.log); - > true - ------------------------------------------------------------------------------- - -getPeerCount -========= - -.. code-block:: javascript - - web3.eth.net.getPeerCount([callback]) - web3.bzz.net.getPeerCount([callback]) - web3.shh.net.getPeerCount([callback]) - -Get the number of peers connected to. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``Promise`` returns ``Number`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.net.getPeerCount() - .then(console.log); - > 25 diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index b1f3bbff733..00000000000 --- a/docs/index.rst +++ /dev/null @@ -1,43 +0,0 @@ - -================================= -web3.js - Ethereum JavaScript API -================================= - -web3.js is a collection of libraries that allow you to interact with a local or remote ethereum node using HTTP, IPC or WebSocket. - -The following documentation will guide you through :ref:`installing and running web3.js ` as well as providing an :ref:`API reference documentation <#id1>` with examples. - -Contents: - -:ref:`Keyword Index `, :ref:`Search Page ` - -.. toctree:: - :maxdepth: 2 - :caption: User Documentation - - getting-started - callbacks-promises-events - glossary - - -.. toctree:: - :maxdepth: 2 - :caption: API Reference - - web3 - web3-eth - web3-eth-subscribe - web3-eth-contract - web3-eth-accounts - web3-eth-personal - web3-eth-ens - web3-eth-iban - web3-eth-abi - web3-net - web3-bzz - web3-shh - web3-utils - web3-admin - - -Special thanks to `Netlify `_ for providing build and deploy services for our end-to-end integration tests. \ No newline at end of file diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 71cb5fa18ad..00000000000 --- a/docs/make.bat +++ /dev/null @@ -1,281 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -set I18NSPHINXOPTS=%SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. epub3 to make an epub3 - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. xml to make Docutils-native XML files - echo. pseudoxml to make pseudoxml-XML files for display purposes - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - echo. coverage to run coverage check of the documentation if enabled - echo. dummy to check syntax errors of document sources - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - - -REM Check if sphinx-build is available and fallback to Python version if any -%SPHINXBUILD% 1>NUL 2>NUL -if errorlevel 9009 goto sphinx_python -goto sphinx_ok - -:sphinx_python - -set SPHINXBUILD=python -m sphinx.__init__ -%SPHINXBUILD% 2> nul -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -:sphinx_ok - - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\web3js.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\web3js.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "epub3" ( - %SPHINXBUILD% -b epub3 %ALLSPHINXOPTS% %BUILDDIR%/epub3 - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub3 file is in %BUILDDIR%/epub3. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdf" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf - cd %~dp0 - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdfja" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf-ja - cd %~dp0 - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -if "%1" == "coverage" ( - %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage - if errorlevel 1 exit /b 1 - echo. - echo.Testing of coverage in the sources finished, look at the ^ -results in %BUILDDIR%/coverage/python.txt. - goto end -) - -if "%1" == "xml" ( - %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The XML files are in %BUILDDIR%/xml. - goto end -) - -if "%1" == "pseudoxml" ( - %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. - goto end -) - -if "%1" == "dummy" ( - %SPHINXBUILD% -b dummy %ALLSPHINXOPTS% %BUILDDIR%/dummy - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. Dummy builder generates no files. - goto end -) - -:end diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 00000000000..dfec5d39d90 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,46 @@ +{ + "name": "web3-docs", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids", + "typecheck": "tsc" + }, + "dependencies": { + "@docusaurus/core": "^2.4.1", + "@docusaurus/preset-classic": "^2.4.1", + "@docusaurus/theme-live-codeblock": "^2.4.1", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.1.1", + "docusaurus-lunr-search": "^2.3.2", + "prism-react-renderer": "^1.3.1", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "^2.4.1", + "@tsconfig/docusaurus": "^1.0.7", + "@mpetrunic/docusaurus-plugin-typedoc-api": "^3.0.0", + "typescript": "^4.6.4" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/docs/sidebars.js b/docs/sidebars.js new file mode 100644 index 00000000000..ef08921da7b --- /dev/null +++ b/docs/sidebars.js @@ -0,0 +1,30 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const sidebars = { + guidesSidebar: [{ type: 'autogenerated', dirName: 'guides' }], + glossarySidebar: [{ type: 'autogenerated', dirName: 'glossary' }], + apiSidebar: [ + { + type: 'autogenerated', + dirName: 'api', // 'api' is the 'out' directory + }, + ], +}; + +module.exports = sidebars; diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css new file mode 100644 index 00000000000..b97c44162d5 --- /dev/null +++ b/docs/src/css/custom.css @@ -0,0 +1,30 @@ +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +/* You can override the default Infima variables here. */ +:root { + --ifm-color-primary: #F16822; + --ifm-color-primary-dark: #ab5124; + --ifm-color-primary-darker: #914723; + --ifm-color-primary-darkest: #9b4921; + --ifm-color-primary-light: #e78e61; + --ifm-color-primary-lighter: #e5956d; + --ifm-color-primary-lightest: #e99c76; + --ifm-code-font-size: 95%; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); +} + +/* For readability concerns, you should choose a lighter palette in dark mode. */ +[data-theme='dark'] { + --ifm-color-primary: #e66626; + --ifm-color-primary-dark: #dc5e1f; + --ifm-color-primary-darker: #db5f21; + --ifm-color-primary-darkest: #d55b1e; + --ifm-color-primary-light: #ef6b29; + --ifm-color-primary-lighter: #ee7438; + --ifm-color-primary-lightest: #f1773a; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); +} diff --git a/docs/src/theme/SearchBar/DocSearch.js b/docs/src/theme/SearchBar/DocSearch.js new file mode 100644 index 00000000000..9bffab768d1 --- /dev/null +++ b/docs/src/theme/SearchBar/DocSearch.js @@ -0,0 +1,272 @@ +import Hogan from 'hogan.js'; +import LunrSearchAdapter from './lunar-search'; +import autocomplete from 'autocomplete.js'; +import templates from './templates'; +import utils from './utils'; +import $ from 'autocomplete.js/zepto'; + +class DocSearch { + constructor({ + searchDocs, + searchIndex, + inputSelector, + debug = false, + baseUrl = '/', + queryDataCallback = null, + autocompleteOptions = { + debug: false, + hint: false, + autoselect: true, + }, + transformData = false, + queryHook = false, + handleSelected = false, + enhancedSearchInput = false, + layout = 'collumns', + }) { + this.input = DocSearch.getInputFromSelector(inputSelector); + this.queryDataCallback = queryDataCallback || null; + const autocompleteOptionsDebug = + autocompleteOptions && autocompleteOptions.debug ? autocompleteOptions.debug : false; + // eslint-disable-next-line no-param-reassign + autocompleteOptions.debug = debug || autocompleteOptionsDebug; + this.autocompleteOptions = autocompleteOptions; + this.autocompleteOptions.cssClasses = this.autocompleteOptions.cssClasses || {}; + this.autocompleteOptions.cssClasses.prefix = + this.autocompleteOptions.cssClasses.prefix || 'ds'; + const inputAriaLabel = + this.input && typeof this.input.attr === 'function' && this.input.attr('aria-label'); + this.autocompleteOptions.ariaLabel = + this.autocompleteOptions.ariaLabel || inputAriaLabel || 'search input'; + + this.isSimpleLayout = layout === 'simple'; + + this.client = new LunrSearchAdapter(searchDocs, searchIndex, baseUrl); + + if (enhancedSearchInput) { + this.input = DocSearch.injectSearchBox(this.input); + } + this.autocomplete = autocomplete(this.input, autocompleteOptions, [ + { + source: this.getAutocompleteSource(transformData, queryHook), + templates: { + suggestion: DocSearch.getSuggestionTemplate(this.isSimpleLayout), + footer: templates.footer, + empty: DocSearch.getEmptyTemplate(), + }, + }, + ]); + + const customHandleSelected = handleSelected; + this.handleSelected = customHandleSelected || this.handleSelected; + + // We prevent default link clicking if a custom handleSelected is defined + if (customHandleSelected) { + $('.algolia-autocomplete').on('click', '.ds-suggestions a', event => { + event.preventDefault(); + }); + } + + this.autocomplete.on( + 'autocomplete:selected', + this.handleSelected.bind(null, this.autocomplete.autocomplete), + ); + + this.autocomplete.on('autocomplete:shown', this.handleShown.bind(null, this.input)); + + if (enhancedSearchInput) { + DocSearch.bindSearchBoxEvent(); + } + } + + static injectSearchBox(input) { + input.before(templates.searchBox); + const newInput = input.prev().prev().find('input'); + input.remove(); + return newInput; + } + + static bindSearchBoxEvent() { + $('.searchbox [type="reset"]').on('click', function () { + $('input#docsearch').focus(); + $(this).addClass('hide'); + autocomplete.autocomplete.setVal(''); + }); + + $('input#docsearch').on('keyup', () => { + const searchbox = document.querySelector('input#docsearch'); + const reset = document.querySelector('.searchbox [type="reset"]'); + reset.className = 'searchbox__reset'; + if (searchbox.value.length === 0) { + reset.className += ' hide'; + } + }); + } + + /** + * Returns the matching input from a CSS selector, null if none matches + * @function getInputFromSelector + * @param {string} selector CSS selector that matches the search + * input of the page + * @returns {void} + */ + static getInputFromSelector(selector) { + const input = $(selector).filter('input'); + return input.length ? $(input[0]) : null; + } + + /** + * Returns the `source` method to be passed to autocomplete.js. It will query + * the Algolia index and call the callbacks with the formatted hits. + * @function getAutocompleteSource + * @param {function} transformData An optional function to transform the hits + * @param {function} queryHook An optional function to transform the query + * @returns {function} Method to be passed as the `source` option of + * autocomplete + */ + getAutocompleteSource(transformData, queryHook) { + return (query, callback) => { + if (queryHook) { + // eslint-disable-next-line no-param-reassign + query = queryHook(query) || query; + } + this.client.search(query).then(hits => { + if (this.queryDataCallback && typeof this.queryDataCallback == 'function') { + this.queryDataCallback(hits); + } + if (transformData) { + hits = transformData(hits) || hits; + } + callback(DocSearch.formatHits(hits)); + }); + }; + } + + // Given a list of hits returned by the API, will reformat them to be used in + // a Hogan template + static formatHits(receivedHits) { + const clonedHits = utils.deepClone(receivedHits); + const hits = clonedHits.map(hit => { + if (hit._highlightResult) { + // eslint-disable-next-line no-param-reassign + hit._highlightResult = utils.mergeKeyWithParent(hit._highlightResult, 'hierarchy'); + } + return utils.mergeKeyWithParent(hit, 'hierarchy'); + }); + + // Group hits by category / subcategory + let groupedHits = utils.groupBy(hits, 'lvl0'); + $.each(groupedHits, (level, collection) => { + const groupedHitsByLvl1 = utils.groupBy(collection, 'lvl1'); + const flattenedHits = utils.flattenAndFlagFirst( + groupedHitsByLvl1, + 'isSubCategoryHeader', + ); + groupedHits[level] = flattenedHits; + }); + groupedHits = utils.flattenAndFlagFirst(groupedHits, 'isCategoryHeader'); + + // Translate hits into smaller objects to be send to the template + return groupedHits.map(hit => { + const url = DocSearch.formatURL(hit); + const category = utils.getHighlightedValue(hit, 'lvl0'); + const subcategory = utils.getHighlightedValue(hit, 'lvl1') || category; + const displayTitle = utils + .compact([ + utils.getHighlightedValue(hit, 'lvl2') || subcategory, + utils.getHighlightedValue(hit, 'lvl3'), + utils.getHighlightedValue(hit, 'lvl4'), + utils.getHighlightedValue(hit, 'lvl5'), + utils.getHighlightedValue(hit, 'lvl6'), + ]) + .join(''); + const text = utils.getSnippetedValue(hit, 'content'); + const isTextOrSubcategoryNonEmpty = + (subcategory && subcategory !== '') || (displayTitle && displayTitle !== ''); + const isLvl1EmptyOrDuplicate = + !subcategory || subcategory === '' || subcategory === category; + const isLvl2 = displayTitle && displayTitle !== '' && displayTitle !== subcategory; + const isLvl1 = !isLvl2 && subcategory && subcategory !== '' && subcategory !== category; + const isLvl0 = !isLvl1 && !isLvl2; + + return { + isLvl0, + isLvl1, + isLvl2, + isLvl1EmptyOrDuplicate, + isCategoryHeader: hit.isCategoryHeader, + isSubCategoryHeader: hit.isSubCategoryHeader, + isTextOrSubcategoryNonEmpty, + category, + subcategory, + title: displayTitle, + text, + url, + }; + }); + } + + static formatURL(hit) { + const { url, anchor } = hit; + if (url) { + const containsAnchor = url.indexOf('#') !== -1; + if (containsAnchor) return url; + else if (anchor) return `${hit.url}#${hit.anchor}`; + return url; + } else if (anchor) return `#${hit.anchor}`; + /* eslint-disable */ + console.warn('no anchor nor url for : ', JSON.stringify(hit)); + /* eslint-enable */ + return null; + } + + static getEmptyTemplate() { + return args => Hogan.compile(templates.empty).render(args); + } + + static getSuggestionTemplate(isSimpleLayout) { + const stringTemplate = isSimpleLayout ? templates.suggestionSimple : templates.suggestion; + const template = Hogan.compile(stringTemplate); + return suggestion => template.render(suggestion); + } + + handleSelected(input, event, suggestion, datasetNumber, context = {}) { + // Do nothing if click on the suggestion, as it's already a , the + // browser will take care of it. This allow Ctrl-Clicking on results and not + // having the main window being redirected as well + if (context.selectionMethod === 'click') { + return; + } + + input.setVal(''); + window.location.assign(suggestion.url); + } + + handleShown(input) { + const middleOfInput = input.offset().left + input.width() / 2; + let middleOfWindow = $(document).width() / 2; + + if (isNaN(middleOfWindow)) { + middleOfWindow = 900; + } + + const alignClass = + middleOfInput - middleOfWindow >= 0 + ? 'algolia-autocomplete-right' + : 'algolia-autocomplete-left'; + const otherAlignClass = + middleOfInput - middleOfWindow < 0 + ? 'algolia-autocomplete-right' + : 'algolia-autocomplete-left'; + const autocompleteWrapper = $('.algolia-autocomplete'); + if (!autocompleteWrapper.hasClass(alignClass)) { + autocompleteWrapper.addClass(alignClass); + } + + if (autocompleteWrapper.hasClass(otherAlignClass)) { + autocompleteWrapper.removeClass(otherAlignClass); + } + } +} + +export default DocSearch; diff --git a/docs/src/theme/SearchBar/algolia.css b/docs/src/theme/SearchBar/algolia.css new file mode 100644 index 00000000000..8c3782ba827 --- /dev/null +++ b/docs/src/theme/SearchBar/algolia.css @@ -0,0 +1,526 @@ +/* Bottom border of each suggestion */ +.algolia-docsearch-suggestion { + border-bottom-color: #3a3dd1; +} +/* Main category headers */ +.algolia-docsearch-suggestion--category-header { + background-color: #4b54de; +} +/* Highlighted search terms */ +.algolia-docsearch-suggestion--highlight { + color: #3a33d1; +} +/* Highlighted search terms in the main category headers */ +.algolia-docsearch-suggestion--category-header + .algolia-docsearch-suggestion--highlight { + background-color: #4d47d5; +} +/* Currently selected suggestion */ +.aa-cursor .algolia-docsearch-suggestion--content { + color: #272296; +} +.aa-cursor .algolia-docsearch-suggestion { + background: #ebebfb; +} + +/* For bigger screens, when displaying results in two columns */ +@media (min-width: 768px) { + /* Bottom border of each suggestion */ + .algolia-docsearch-suggestion { + border-bottom-color: #7671df; + } + /* Left column, with secondary category header */ + .algolia-docsearch-suggestion--subcategory-column { + border-right-color: #7671df; + color: #4e4726; + } +} + +.searchbox { + display: inline-block; + position: relative; + width: 200px; + height: 32px !important; + white-space: nowrap; + box-sizing: border-box; + visibility: visible !important; +} + +.searchbox .algolia-autocomplete { + display: block; + width: 100%; + height: 100%; +} + +.searchbox__wrapper { + width: 100%; + height: 100%; + z-index: 999; + position: relative; +} + +.searchbox__input { + display: inline-block; + box-sizing: border-box; + -webkit-transition: box-shadow 0.4s ease, background 0.4s ease; + transition: box-shadow 0.4s ease, background 0.4s ease; + border: 0; + border-radius: 16px; + box-shadow: inset 0 0 0 1px #cccccc; + background: #ffffff !important; + padding: 0; + padding-right: 26px; + padding-left: 32px; + width: 100%; + height: 100%; + vertical-align: middle; + white-space: normal; + font-size: 12px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.searchbox__input::-webkit-search-decoration, +.searchbox__input::-webkit-search-cancel-button, +.searchbox__input::-webkit-search-results-button, +.searchbox__input::-webkit-search-results-decoration { + display: none; +} + +.searchbox__input:hover { + box-shadow: inset 0 0 0 1px #b3b3b3; +} + +.searchbox__input:focus, +.searchbox__input:active { + outline: 0; + box-shadow: inset 0 0 0 1px #aaaaaa; + background: #ffffff; +} + +.searchbox__input::-webkit-input-placeholder { + color: #aaaaaa; +} + +.searchbox__input::-moz-placeholder { + color: #aaaaaa; +} + +.searchbox__input:-ms-input-placeholder { + color: #aaaaaa; +} + +.searchbox__input::placeholder { + color: #aaaaaa; +} + +.searchbox__submit { + position: absolute; + top: 0; + margin: 0; + border: 0; + border-radius: 16px 0 0 16px; + background-color: rgba(69, 142, 225, 0); + padding: 0; + width: 32px; + height: 100%; + vertical-align: middle; + text-align: center; + font-size: inherit; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + right: inherit; + left: 0; +} + +.searchbox__submit::before { + display: inline-block; + margin-right: -4px; + height: 100%; + vertical-align: middle; + content: ''; +} + +.searchbox__submit:hover, +.searchbox__submit:active { + cursor: pointer; +} + +.searchbox__submit:focus { + outline: 0; +} + +.searchbox__submit svg { + width: 14px; + height: 14px; + vertical-align: middle; + fill: #6d7e96; +} + +.searchbox__reset { + display: block; + position: absolute; + top: 8px; + right: 8px; + margin: 0; + border: 0; + background: none; + cursor: pointer; + padding: 0; + font-size: inherit; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + fill: rgba(0, 0, 0, 0.5); +} + +.searchbox__reset.hide { + display: none; +} + +.searchbox__reset:focus { + outline: 0; +} + +.searchbox__reset svg { + display: block; + margin: 4px; + width: 8px; + height: 8px; +} + +.searchbox__input:valid ~ .searchbox__reset { + display: block; + -webkit-animation-name: sbx-reset-in; + animation-name: sbx-reset-in; + -webkit-animation-duration: 0.15s; + animation-duration: 0.15s; +} + +@-webkit-keyframes sbx-reset-in { + 0% { + -webkit-transform: translate3d(-20%, 0, 0); + transform: translate3d(-20%, 0, 0); + opacity: 0; + } + 100% { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes sbx-reset-in { + 0% { + -webkit-transform: translate3d(-20%, 0, 0); + transform: translate3d(-20%, 0, 0); + opacity: 0; + } + 100% { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.algolia-autocomplete .ds-dropdown-menu:before { + display: block; + position: absolute; + content: ''; + width: 14px; + height: 14px; + background: #373940; + z-index: 1000; + top: -7px; + border-top: 1px solid #373940; + border-right: 1px solid #373940; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + border-radius: 2px; +} + +.algolia-autocomplete .ds-dropdown-menu { + box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.2), 0 2px 3px 0 rgba(0, 0, 0, 0.1); +} + +@media (min-width: 601px) { + .algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu { + right: 0 !important; + left: inherit !important; + } + + .algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before { + right: 48px; + } + + .algolia-autocomplete .ds-dropdown-menu { + position: relative; + top: -6px; + border-radius: 4px; + margin: 6px 0 0; + padding: 0; + text-align: left; + height: auto; + position: relative; + background: transparent; + border: none; + z-index: 999; + max-width: 600px; + min-width: 500px; + } +} + +@media (max-width: 600px) { + .algolia-autocomplete .ds-dropdown-menu { + z-index: 100; + position: fixed !important; + top: 50px !important; + left: auto !important; + right: 1rem !important; + width: 600px; + max-width: calc(100% - 2rem); + max-height: calc(100% - 5rem); + display: block; + } + + .algolia-autocomplete .ds-dropdown-menu:before { + right: 6rem; + } +} + +.algolia-autocomplete .ds-dropdown-menu .ds-suggestions { + position: relative; + z-index: 1000; +} + +.algolia-autocomplete .ds-dropdown-menu .ds-suggestion { + cursor: pointer; +} + +.algolia-autocomplete .ds-dropdown-menu [class^='ds-dataset-'] { + position: relative; + border-radius: 4px; + overflow: auto; + padding: 0; + background: #ffffff; +} + +.algolia-autocomplete .ds-dropdown-menu * { + box-sizing: border-box; +} + +.algolia-autocomplete .algolia-docsearch-suggestion { + display: block; + position: relative; + padding: 0; + overflow: hidden; + text-decoration: none; +} + +.algolia-autocomplete .ds-cursor .algolia-docsearch-suggestion--wrapper { + background: #f1f1f1; + box-shadow: inset -2px 0 0 #61dafb; +} + +.algolia-autocomplete .algolia-docsearch-suggestion--highlight { + background: #ffe564; + padding: 0.1em 0.05em; +} + +.algolia-autocomplete + .algolia-docsearch-suggestion--category-header + .algolia-docsearch-suggestion--category-header-lvl0 + .algolia-docsearch-suggestion--highlight, +.algolia-autocomplete + .algolia-docsearch-suggestion--category-header + .algolia-docsearch-suggestion--category-header-lvl1 + .algolia-docsearch-suggestion--highlight { + color: inherit; + background: inherit; +} + +.algolia-autocomplete + .algolia-docsearch-suggestion--text + .algolia-docsearch-suggestion--highlight { + padding: 0 0 1px; + background: inherit; + box-shadow: inset 0 -2px 0 0 rgba(69, 142, 225, 0.8); + color: inherit; +} + +.algolia-autocomplete .algolia-docsearch-suggestion--content { + display: block; + float: right; + width: 70%; + position: relative; + padding: 5.33333px 0 5.33333px 10.66667px; + cursor: pointer; +} + +.algolia-autocomplete .algolia-docsearch-suggestion--content:before { + content: ''; + position: absolute; + display: block; + top: 0; + height: 100%; + width: 1px; + background: #ececec; + left: -1px; +} + +.algolia-autocomplete .algolia-docsearch-suggestion--category-header { + position: relative; + display: none; + font-size: 14px; + letter-spacing: 0.08em; + font-weight: 700; + background-color: #373940; + text-transform: uppercase; + color: #fff; + margin: 0; + padding: 5px 8px; +} + +.algolia-autocomplete .algolia-docsearch-suggestion--wrapper { + background-color: #fff; + width: 100%; + float: left; + padding: 8px 0 0 0; +} + +.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column { + float: left; + width: 30%; + display: none; + padding-left: 0; + text-align: right; + position: relative; + padding: 5.33333px 10.66667px; + color: #777; + font-size: 0.9em; + word-wrap: break-word; +} + +.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before { + content: ''; + position: absolute; + display: block; + top: 0; + height: 100%; + width: 1px; + background: #ececec; + right: 0; +} + +.algolia-autocomplete + .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main + .algolia-docsearch-suggestion--category-header, +.algolia-autocomplete + .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary { + display: block; +} + +.algolia-autocomplete + .algolia-docsearch-suggestion--subcategory-column + .algolia-docsearch-suggestion--highlight { + background-color: inherit; + color: inherit; +} + +.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline { + display: none; +} + +.algolia-autocomplete .algolia-docsearch-suggestion--title { + margin-bottom: 4px; + color: #02060c; + font-size: 0.9em; + font-weight: bold; +} + +.algolia-autocomplete .algolia-docsearch-suggestion--text { + display: block; + line-height: 1.2em; + font-size: 0.85em; + color: #63676d; + padding-right: 2px; +} + +.algolia-autocomplete .algolia-docsearch-suggestion--no-results { + width: 100%; + padding: 8px 0; + text-align: center; + font-size: 1.2em; + background-color: #373940; + margin-top: -8px; +} + +.algolia-autocomplete + .algolia-docsearch-suggestion--no-results + .algolia-docsearch-suggestion--text { + color: #ffffff; + margin-top: 4px; +} + +.algolia-autocomplete .algolia-docsearch-suggestion--no-results::before { + display: none; +} + +.algolia-autocomplete .algolia-docsearch-suggestion code { + padding: 1px 5px; + font-size: 90%; + border: none; + color: #222222; + background-color: #ebebeb; + border-radius: 3px; + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} + +.algolia-autocomplete + .algolia-docsearch-suggestion + code + .algolia-docsearch-suggestion--highlight { + background: none; +} + +.algolia-autocomplete + .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main + .algolia-docsearch-suggestion--category-header { + color: white; + display: block; +} + +.algolia-autocomplete + .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary + .algolia-docsearch-suggestion--subcategory-column { + display: block; +} + +.algolia-autocomplete .algolia-docsearch-footer { + background-color: #fff; + width: 100%; + height: 30px; + z-index: 2000; + float: right; + font-size: 0; + line-height: 0; +} + +.algolia-autocomplete .algolia-docsearch-footer--logo { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 130 18'%3E%3Cdefs%3E%3ClinearGradient id='a' x1='-36.87%25' x2='129.43%25' y1='134.94%25' y2='-27.7%25'%3E%3Cstop stop-color='%252300AEFF' offset='0%25'/%3E%3Cstop stop-color='%25233369E7' offset='100%25'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='url(%2523a)' d='M59.4.02h13.3a2.37 2.37 0 0 1 2.38 2.37V15.6a2.37 2.37 0 0 1-2.38 2.36H59.4a2.37 2.37 0 0 1-2.38-2.36V2.38A2.37 2.37 0 0 1 59.4.02z'/%3E%3Cpath fill='%2523FFF' d='M66.26 4.56c-2.82 0-5.1 2.27-5.1 5.08 0 2.8 2.28 5.07 5.1 5.07 2.8 0 5.1-2.26 5.1-5.07 0-2.8-2.28-5.07-5.1-5.07zm0 8.65c-2 0-3.6-1.6-3.6-3.56 0-1.97 1.6-3.58 3.6-3.58 1.98 0 3.6 1.6 3.6 3.58a3.58 3.58 0 0 1-3.6 3.57zm0-6.4v2.66c0 .07.08.13.15.1l2.4-1.24c.04-.02.06-.1.03-.14a2.96 2.96 0 0 0-2.46-1.5c-.06 0-.1.05-.1.1zm-3.33-1.96l-.3-.3a.78.78 0 0 0-1.12 0l-.36.36a.77.77 0 0 0 0 1.1l.3.3c.05.05.13.04.17 0 .2-.25.4-.5.6-.7.23-.23.46-.43.7-.6.07-.04.07-.1.03-.16zm5-.8V3.4a.78.78 0 0 0-.78-.78h-1.83a.78.78 0 0 0-.78.78v.63c0 .07.06.12.14.1a5.74 5.74 0 0 1 1.58-.22c.52 0 1.04.07 1.54.2a.1.1 0 0 0 .13-.1z'/%3E%3Cpath fill='%2523182359' d='M102.16 13.76c0 1.46-.37 2.52-1.12 3.2-.75.67-1.9 1-3.44 1-.56 0-1.74-.1-2.67-.3l.34-1.7c.78.17 1.82.2 2.36.2.86 0 1.48-.16 1.84-.5.37-.36.55-.88.55-1.57v-.35a6.37 6.37 0 0 1-.84.3 4.15 4.15 0 0 1-1.2.17 4.5 4.5 0 0 1-1.6-.28 3.38 3.38 0 0 1-1.26-.82 3.74 3.74 0 0 1-.8-1.35c-.2-.54-.3-1.5-.3-2.2 0-.67.1-1.5.3-2.06a3.92 3.92 0 0 1 .9-1.43 4.12 4.12 0 0 1 1.45-.92 5.3 5.3 0 0 1 1.94-.37c.7 0 1.35.1 1.97.2a15.86 15.86 0 0 1 1.6.33v8.46zm-5.95-4.2c0 .9.2 1.88.6 2.3.4.4.9.62 1.53.62.34 0 .66-.05.96-.15a2.75 2.75 0 0 0 .73-.33V6.7a8.53 8.53 0 0 0-1.42-.17c-.76-.02-1.36.3-1.77.8-.4.5-.62 1.4-.62 2.23zm16.13 0c0 .72-.1 1.26-.32 1.85a4.4 4.4 0 0 1-.9 1.53c-.38.42-.85.75-1.4.98-.54.24-1.4.37-1.8.37-.43 0-1.27-.13-1.8-.36a4.1 4.1 0 0 1-1.4-.97 4.5 4.5 0 0 1-.92-1.52 5.04 5.04 0 0 1-.33-1.84c0-.72.1-1.4.32-2 .22-.6.53-1.1.92-1.5.4-.43.86-.75 1.4-.98a4.55 4.55 0 0 1 1.78-.34 4.7 4.7 0 0 1 1.8.34c.54.23 1 .55 1.4.97.38.42.68.92.9 1.5.23.6.35 1.3.35 2zm-2.2 0c0-.92-.2-1.7-.6-2.22-.38-.54-.94-.8-1.64-.8-.72 0-1.27.26-1.67.8-.4.54-.58 1.3-.58 2.22 0 .93.2 1.56.6 2.1.38.54.94.8 1.64.8s1.25-.26 1.65-.8c.4-.55.6-1.17.6-2.1zm6.97 4.7c-3.5.02-3.5-2.8-3.5-3.27L113.57.92l2.15-.34v10c0 .25 0 1.87 1.37 1.88v1.8zm3.77 0h-2.15v-9.2l2.15-.33v9.54zM119.8 3.74c.7 0 1.3-.58 1.3-1.3 0-.7-.58-1.3-1.3-1.3-.73 0-1.3.6-1.3 1.3 0 .72.58 1.3 1.3 1.3zm6.43 1c.7 0 1.3.1 1.78.27.5.18.88.42 1.17.73.28.3.5.74.6 1.18.13.46.2.95.2 1.5v5.47a25.24 25.24 0 0 1-1.5.25c-.67.1-1.42.15-2.25.15a6.83 6.83 0 0 1-1.52-.16 3.2 3.2 0 0 1-1.18-.5 2.46 2.46 0 0 1-.76-.9c-.18-.37-.27-.9-.27-1.44 0-.52.1-.85.3-1.2.2-.37.48-.67.83-.9a3.6 3.6 0 0 1 1.23-.5 7.07 7.07 0 0 1 2.2-.1l.83.16v-.35c0-.25-.03-.48-.1-.7a1.5 1.5 0 0 0-.3-.58c-.15-.18-.34-.3-.58-.4a2.54 2.54 0 0 0-.92-.17c-.5 0-.94.06-1.35.13-.4.08-.75.16-1 .25l-.27-1.74c.27-.1.67-.18 1.2-.28a9.34 9.34 0 0 1 1.65-.14zm.18 7.74c.66 0 1.15-.04 1.5-.1V10.2a5.1 5.1 0 0 0-2-.1c-.23.03-.45.1-.64.2a1.17 1.17 0 0 0-.47.38c-.13.17-.18.26-.18.52 0 .5.17.8.5.98.32.2.74.3 1.3.3zM84.1 4.8c.72 0 1.3.08 1.8.26.48.17.87.42 1.15.73.3.3.5.72.6 1.17.14.45.2.94.2 1.47v5.48a25.24 25.24 0 0 1-1.5.26c-.67.1-1.42.14-2.25.14a6.83 6.83 0 0 1-1.52-.16 3.2 3.2 0 0 1-1.18-.5 2.46 2.46 0 0 1-.76-.9c-.18-.38-.27-.9-.27-1.44 0-.53.1-.86.3-1.22.2-.36.5-.65.84-.88a3.6 3.6 0 0 1 1.24-.5 7.07 7.07 0 0 1 2.2-.1c.26.03.54.08.84.15v-.35c0-.24-.03-.48-.1-.7a1.5 1.5 0 0 0-.3-.58c-.15-.17-.34-.3-.58-.4a2.54 2.54 0 0 0-.9-.15c-.5 0-.96.05-1.37.12-.4.07-.75.15-1 .24l-.26-1.75c.27-.08.67-.17 1.18-.26a8.9 8.9 0 0 1 1.66-.15zm.2 7.73c.65 0 1.14-.04 1.48-.1v-2.17a5.1 5.1 0 0 0-1.98-.1c-.24.03-.46.1-.65.18a1.17 1.17 0 0 0-.47.4c-.12.17-.17.26-.17.52 0 .5.18.8.5.98.32.2.75.3 1.3.3zm8.68 1.74c-3.5 0-3.5-2.82-3.5-3.28L89.45.92 91.6.6v10c0 .25 0 1.87 1.38 1.88v1.8z'/%3E%3Cpath fill='%25231D3657' d='M5.03 11.03c0 .7-.26 1.24-.76 1.64-.5.4-1.2.6-2.1.6-.88 0-1.6-.14-2.17-.42v-1.2c.36.16.74.3 1.14.38.4.1.78.15 1.13.15.5 0 .88-.1 1.12-.3a.94.94 0 0 0 .35-.77.98.98 0 0 0-.33-.74c-.22-.2-.68-.44-1.37-.72-.72-.3-1.22-.62-1.52-1C.23 8.27.1 7.82.1 7.3c0-.65.22-1.17.7-1.55.46-.37 1.08-.56 1.86-.56.76 0 1.5.16 2.25.48l-.4 1.05c-.7-.3-1.32-.44-1.87-.44-.4 0-.73.08-.94.26a.9.9 0 0 0-.33.72c0 .2.04.38.12.52.08.15.22.3.42.4.2.14.55.3 1.06.52.58.24 1 .47 1.27.67.27.2.47.44.6.7.12.26.18.57.18.92zM9 13.27c-.92 0-1.64-.27-2.16-.8-.52-.55-.78-1.3-.78-2.24 0-.97.24-1.73.72-2.3.5-.54 1.15-.82 2-.82.78 0 1.4.25 1.85.72.46.48.7 1.14.7 1.97v.67H7.35c0 .58.17 1.02.46 1.33.3.3.7.47 1.24.47.36 0 .68-.04.98-.1a5.1 5.1 0 0 0 .98-.33v1.02a3.87 3.87 0 0 1-.94.32 5.72 5.72 0 0 1-1.08.1zm-.22-5.2c-.4 0-.73.12-.97.38s-.37.62-.42 1.1h2.7c0-.48-.13-.85-.36-1.1-.23-.26-.54-.38-.94-.38zm7.7 5.1l-.26-.84h-.05c-.28.36-.57.6-.86.74-.28.13-.65.2-1.1.2-.6 0-1.05-.16-1.38-.48-.32-.32-.5-.77-.5-1.34 0-.62.24-1.08.7-1.4.45-.3 1.14-.47 2.07-.5l1.02-.03V9.2c0-.37-.1-.65-.27-.84-.17-.2-.45-.28-.82-.28-.3 0-.6.04-.88.13a6.68 6.68 0 0 0-.8.33l-.4-.9a4.4 4.4 0 0 1 1.05-.4 4.86 4.86 0 0 1 1.08-.12c.76 0 1.33.18 1.7.5.4.33.6.85.6 1.56v4h-.9zm-1.9-.87c.47 0 .83-.13 1.1-.38.3-.26.43-.62.43-1.08v-.52l-.76.03c-.6.03-1.02.13-1.3.3s-.4.45-.4.82c0 .26.08.47.24.6.16.16.4.23.7.23zm7.57-5.2c.25 0 .46.03.62.06l-.12 1.18a2.38 2.38 0 0 0-.56-.06c-.5 0-.92.16-1.24.5-.3.32-.47.75-.47 1.27v3.1h-1.27V7.23h1l.16 1.05h.05c.2-.36.45-.64.77-.85a1.83 1.83 0 0 1 1.02-.3zm4.12 6.17c-.9 0-1.58-.27-2.05-.8-.47-.52-.7-1.27-.7-2.25 0-1 .24-1.77.73-2.3.5-.54 1.2-.8 2.12-.8.63 0 1.2.1 1.7.34l-.4 1c-.52-.2-.96-.3-1.3-.3-1.04 0-1.55.68-1.55 2.05 0 .67.13 1.17.38 1.5.26.34.64.5 1.13.5a3.23 3.23 0 0 0 1.6-.4v1.1a2.53 2.53 0 0 1-.73.28 4.36 4.36 0 0 1-.93.08zm8.28-.1h-1.27V9.5c0-.45-.1-.8-.28-1.02-.18-.23-.47-.34-.88-.34-.53 0-.9.16-1.16.48-.25.3-.38.85-.38 1.6v2.94h-1.26V4.8h1.26v2.12c0 .34-.02.7-.06 1.1h.08a1.76 1.76 0 0 1 .72-.67c.3-.16.66-.24 1.07-.24 1.43 0 2.15.74 2.15 2.2v3.86zM42.2 7.1c.74 0 1.32.28 1.73.82.4.53.62 1.3.62 2.26 0 .97-.2 1.73-.63 2.27-.42.54-1 .82-1.75.82s-1.33-.27-1.75-.8h-.08l-.23.7h-.94V4.8h1.26v2l-.02.64-.03.56h.05c.4-.6 1-.9 1.78-.9zm-.33 1.04c-.5 0-.88.15-1.1.45-.22.3-.34.8-.35 1.5v.08c0 .72.12 1.24.35 1.57.23.32.6.48 1.12.48.44 0 .78-.17 1-.53.24-.35.36-.87.36-1.53 0-1.35-.47-2.03-1.4-2.03zm3.24-.92h1.4l1.2 3.37c.18.47.3.92.36 1.34h.04l.18-.72 1.37-4H51l-2.53 6.73c-.46 1.23-1.23 1.85-2.3 1.85-.3 0-.56-.03-.83-.1v-1c.2.05.4.08.65.08.6 0 1.03-.36 1.28-1.06l.22-.56-2.4-5.94z'/%3E%3C/g%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; + overflow: hidden; + text-indent: -9000px; + width: 110px; + height: 100%; + display: block; + margin-left: auto; + margin-right: 5px; +} diff --git a/docs/src/theme/SearchBar/index.js b/docs/src/theme/SearchBar/index.js new file mode 100644 index 00000000000..a34e4b7efe1 --- /dev/null +++ b/docs/src/theme/SearchBar/index.js @@ -0,0 +1,114 @@ +import React, { useRef, useCallback, useState } from 'react'; +import classnames from 'classnames'; +import { useHistory } from '@docusaurus/router'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import { usePluginData } from '@docusaurus/useGlobalData'; +import useIsBrowser from '@docusaurus/useIsBrowser'; +const Search = props => { + const initialized = useRef(false); + const searchBarRef = useRef(null); + const [indexReady, setIndexReady] = useState(false); + const history = useHistory(); + const { siteConfig = {} } = useDocusaurusContext(); + const isBrowser = useIsBrowser(); + const { baseUrl } = siteConfig; + const initAlgolia = (searchDocs, searchIndex, DocSearch) => { + new DocSearch({ + searchDocs, + searchIndex, + baseUrl, + inputSelector: '#search_input_react', + // Override algolia's default selection event, allowing us to do client-side + // navigation and avoiding a full page refresh. + handleSelected: (_input, _event, suggestion) => { + const url = suggestion.url || '/'; + // Use an anchor tag to parse the absolute url into a relative url + // Alternatively, we can use new URL(suggestion.url) but its not supported in IE + const a = document.createElement('a'); + a.href = url; + // Algolia use closest parent element id #__docusaurus when a h1 page title does not have an id + // So, we can safely remove it. See https://github.com/facebook/docusaurus/issues/1828 for more details. + + history.push(url); + }, + }); + }; + + const pluginData = usePluginData('docusaurus-lunr-search'); + const getSearchDoc = () => + process.env.NODE_ENV === 'production' + ? fetch(`${baseUrl}${pluginData.fileNames.searchDoc}`).then(content => content.json()) + : Promise.resolve([]); + + const getLunrIndex = () => + process.env.NODE_ENV === 'production' + ? fetch(`${baseUrl}${pluginData.fileNames.lunrIndex}`).then(content => content.json()) + : Promise.resolve([]); + + const loadAlgolia = () => { + if (!initialized.current) { + Promise.all([ + getSearchDoc(), + getLunrIndex(), + import('./DocSearch'), + import('./algolia.css'), + ]).then(([searchDocs, searchIndex, { default: DocSearch }]) => { + if (searchDocs.length === 0) { + return; + } + initAlgolia(searchDocs, searchIndex, DocSearch); + setIndexReady(true); + }); + initialized.current = true; + } + }; + + const toggleSearchIconClick = useCallback( + e => { + if (!searchBarRef.current.contains(e.target)) { + searchBarRef.current.focus(); + } + + props.handleSearchBarToggle && props.handleSearchBarToggle(!props.isSearchBarExpanded); + }, + [props.isSearchBarExpanded], + ); + + if (isBrowser) { + loadAlgolia(); + } + + return ( +
+ + +
+ ); +}; + +export default Search; diff --git a/docs/src/theme/SearchBar/lunar-search.js b/docs/src/theme/SearchBar/lunar-search.js new file mode 100644 index 00000000000..34ca13f6353 --- /dev/null +++ b/docs/src/theme/SearchBar/lunar-search.js @@ -0,0 +1,164 @@ +import lunr from '@generated/lunr.client'; +lunr.tokenizer.separator = /[\s\-/]+/; + +class LunrSearchAdapter { + constructor(searchDocs, searchIndex, baseUrl = '/') { + this.searchDocs = searchDocs; + this.lunrIndex = lunr.Index.load(searchIndex); + this.baseUrl = baseUrl; + } + + getLunrResult(input) { + return this.lunrIndex.query(function (query) { + const tokens = lunr.tokenizer(input); + query.term(tokens, { + boost: 10, + }); + query.term(tokens, { + wildcard: lunr.Query.wildcard.TRAILING, + }); + }); + } + + getHit(doc, formattedTitle, formattedContent) { + return { + hierarchy: { + lvl0: doc.pageTitle || doc.title, + lvl1: doc.type === 0 ? null : doc.title, + }, + url: doc.url, + _snippetResult: formattedContent + ? { + content: { + value: formattedContent, + matchLevel: 'full', + }, + } + : null, + _highlightResult: { + hierarchy: { + lvl0: { + value: doc.type === 0 ? formattedTitle || doc.title : doc.pageTitle, + }, + lvl1: + doc.type === 0 + ? null + : { + value: formattedTitle || doc.title, + }, + }, + }, + }; + } + getTitleHit(doc, position, length) { + const start = position[0]; + const end = position[0] + length; + let formattedTitle = + doc.title.substring(0, start) + + '' + + doc.title.substring(start, end) + + '' + + doc.title.substring(end, doc.title.length); + return this.getHit(doc, formattedTitle); + } + + getKeywordHit(doc, position, length) { + const start = position[0]; + const end = position[0] + length; + let formattedTitle = + doc.title + + '
Keywords: ' + + doc.keywords.substring(0, start) + + '' + + doc.keywords.substring(start, end) + + '' + + doc.keywords.substring(end, doc.keywords.length) + + ''; + return this.getHit(doc, formattedTitle); + } + + getContentHit(doc, position) { + const start = position[0]; + const end = position[0] + position[1]; + let previewStart = start; + let previewEnd = end; + let ellipsesBefore = true; + let ellipsesAfter = true; + for (let k = 0; k < 3; k++) { + const nextSpace = doc.content.lastIndexOf(' ', previewStart - 2); + const nextDot = doc.content.lastIndexOf('.', previewStart - 2); + if (nextDot > 0 && nextDot > nextSpace) { + previewStart = nextDot + 1; + ellipsesBefore = false; + break; + } + if (nextSpace < 0) { + previewStart = 0; + ellipsesBefore = false; + break; + } + previewStart = nextSpace + 1; + } + for (let k = 0; k < 10; k++) { + const nextSpace = doc.content.indexOf(' ', previewEnd + 1); + const nextDot = doc.content.indexOf('.', previewEnd + 1); + if (nextDot > 0 && nextDot < nextSpace) { + previewEnd = nextDot; + ellipsesAfter = false; + break; + } + if (nextSpace < 0) { + previewEnd = doc.content.length; + ellipsesAfter = false; + break; + } + previewEnd = nextSpace; + } + let preview = doc.content.substring(previewStart, start); + if (ellipsesBefore) { + preview = '... ' + preview; + } + preview += + '' + + doc.content.substring(start, end) + + ''; + preview += doc.content.substring(end, previewEnd); + if (ellipsesAfter) { + preview += ' ...'; + } + return this.getHit(doc, null, preview); + } + search(input) { + return new Promise((resolve, rej) => { + const results = this.getLunrResult(input); + const hits = []; + results.length > 5 && (results.length = 5); + this.titleHitsRes = []; + this.contentHitsRes = []; + results.forEach(result => { + const doc = this.searchDocs[result.ref]; + const { metadata } = result.matchData; + for (let i in metadata) { + if (metadata[i].title) { + if (!this.titleHitsRes.includes(result.ref)) { + const position = metadata[i].title.position[0]; + hits.push(this.getTitleHit(doc, position, input.length)); + this.titleHitsRes.push(result.ref); + } + } else if (metadata[i].content) { + const position = metadata[i].content.position[0]; + hits.push(this.getContentHit(doc, position)); + } else if (metadata[i].keywords) { + const position = metadata[i].keywords.position[0]; + hits.push(this.getKeywordHit(doc, position, input.length)); + this.titleHitsRes.push(result.ref); + } + } + }); + hits.length > 5 && (hits.length = 5); + resolve(hits); + }); + } +} + +export default LunrSearchAdapter; diff --git a/docs/src/theme/SearchBar/styles.css b/docs/src/theme/SearchBar/styles.css new file mode 100644 index 00000000000..8dc3b0a12ba --- /dev/null +++ b/docs/src/theme/SearchBar/styles.css @@ -0,0 +1,33 @@ +.search-icon { + background-image: var(--ifm-navbar-search-input-icon); + height: auto; + width: 24px; + cursor: pointer; + padding: 8px; + line-height: 32px; + background-repeat: no-repeat; + background-position: center; + display: none; +} + +.search-icon-hidden { + visibility: hidden; +} + +@media (max-width: 360px) { + .search-bar { + width: 0 !important; + background: none !important; + padding: 0 !important; + transition: none !important; + } + + .search-bar-expanded { + width: 9rem !important; + } + + .search-icon { + display: inline; + vertical-align: sub; + } +} diff --git a/docs/src/theme/SearchBar/templates.js b/docs/src/theme/SearchBar/templates.js new file mode 100644 index 00000000000..f145e09543e --- /dev/null +++ b/docs/src/theme/SearchBar/templates.js @@ -0,0 +1,112 @@ +const prefix = 'algolia-docsearch'; +const suggestionPrefix = `${prefix}-suggestion`; +const footerPrefix = `${prefix}-footer`; + +const templates = { + suggestion: ` +
+
+ {{{category}}} +
+
+
+ {{{subcategory}}} +
+ {{#isTextOrSubcategoryNonEmpty}} +
+
{{{subcategory}}}
+
{{{title}}}
+ {{#text}}
{{{text}}}
{{/text}} +
+ {{/isTextOrSubcategoryNonEmpty}} +
+
+ `, + suggestionSimple: ` +
+
+ {{^isLvl0}} + {{{category}}} + {{^isLvl1}} + {{^isLvl1EmptyOrDuplicate}} + + {{{subcategory}}} + + {{/isLvl1EmptyOrDuplicate}} + {{/isLvl1}} + {{/isLvl0}} +
+ {{#isLvl2}} + {{{title}}} + {{/isLvl2}} + {{#isLvl1}} + {{{subcategory}}} + {{/isLvl1}} + {{#isLvl0}} + {{{category}}} + {{/isLvl0}} +
+
+
+ {{#text}} +
+
{{{text}}}
+
+ {{/text}} +
+
+ `, + footer: ` +
+
+ `, + empty: ` +
+
+
+
+
+ No results found for query "{{query}}" +
+
+
+
+
+ `, + searchBox: ` + + + + `, +}; + +export default templates; diff --git a/docs/src/theme/SearchBar/utils.js b/docs/src/theme/SearchBar/utils.js new file mode 100644 index 00000000000..d955950ef46 --- /dev/null +++ b/docs/src/theme/SearchBar/utils.js @@ -0,0 +1,270 @@ +import $ from 'autocomplete.js/zepto'; + +const utils = { + /* + * Move the content of an object key one level higher. + * eg. + * { + * name: 'My name', + * hierarchy: { + * lvl0: 'Foo', + * lvl1: 'Bar' + * } + * } + * Will be converted to + * { + * name: 'My name', + * lvl0: 'Foo', + * lvl1: 'Bar' + * } + * @param {Object} object Main object + * @param {String} property Main object key to move up + * @return {Object} + * @throws Error when key is not an attribute of Object or is not an object itself + */ + mergeKeyWithParent(object, property) { + if (object[property] === undefined) { + return object; + } + if (typeof object[property] !== 'object') { + return object; + } + const newObject = $.extend({}, object, object[property]); + delete newObject[property]; + return newObject; + }, + /* + * Group all objects of a collection by the value of the specified attribute + * If the attribute is a string, use the lowercase form. + * + * eg. + * groupBy([ + * {name: 'Tim', category: 'dev'}, + * {name: 'Vincent', category: 'dev'}, + * {name: 'Ben', category: 'sales'}, + * {name: 'Jeremy', category: 'sales'}, + * {name: 'AlexS', category: 'dev'}, + * {name: 'AlexK', category: 'sales'} + * ], 'category'); + * => + * { + * 'devs': [ + * {name: 'Tim', category: 'dev'}, + * {name: 'Vincent', category: 'dev'}, + * {name: 'AlexS', category: 'dev'} + * ], + * 'sales': [ + * {name: 'Ben', category: 'sales'}, + * {name: 'Jeremy', category: 'sales'}, + * {name: 'AlexK', category: 'sales'} + * ] + * } + * @param {array} collection Array of objects to group + * @param {String} property The attribute on which apply the grouping + * @return {array} + * @throws Error when one of the element does not have the specified property + */ + groupBy(collection, property) { + const newCollection = {}; + $.each(collection, (index, item) => { + if (item[property] === undefined) { + throw new Error(`[groupBy]: Object has no key ${property}`); + } + let key = item[property]; + if (typeof key === 'string') { + key = key.toLowerCase(); + } + // fix #171 the given data type of docsearch hits might be conflict with the properties of the native Object, + // such as the constructor, so we need to do this check. + if (!Object.prototype.hasOwnProperty.call(newCollection, key)) { + newCollection[key] = []; + } + newCollection[key].push(item); + }); + return newCollection; + }, + /* + * Return an array of all the values of the specified object + * eg. + * values({ + * foo: 42, + * bar: true, + * baz: 'yep' + * }) + * => + * [42, true, yep] + * @param {object} object Object to extract values from + * @return {array} + */ + values(object) { + return Object.keys(object).map(key => object[key]); + }, + /* + * Flattens an array + * eg. + * flatten([1, 2, [3, 4], [5, 6]]) + * => + * [1, 2, 3, 4, 5, 6] + * @param {array} array Array to flatten + * @return {array} + */ + flatten(array) { + const results = []; + array.forEach(value => { + if (!Array.isArray(value)) { + results.push(value); + return; + } + value.forEach(subvalue => { + results.push(subvalue); + }); + }); + return results; + }, + /* + * Flatten all values of an object into an array, marking each first element of + * each group with a specific flag + * eg. + * flattenAndFlagFirst({ + * 'devs': [ + * {name: 'Tim', category: 'dev'}, + * {name: 'Vincent', category: 'dev'}, + * {name: 'AlexS', category: 'dev'} + * ], + * 'sales': [ + * {name: 'Ben', category: 'sales'}, + * {name: 'Jeremy', category: 'sales'}, + * {name: 'AlexK', category: 'sales'} + * ] + * , 'isTop'); + * => + * [ + * {name: 'Tim', category: 'dev', isTop: true}, + * {name: 'Vincent', category: 'dev', isTop: false}, + * {name: 'AlexS', category: 'dev', isTop: false}, + * {name: 'Ben', category: 'sales', isTop: true}, + * {name: 'Jeremy', category: 'sales', isTop: false}, + * {name: 'AlexK', category: 'sales', isTop: false} + * ] + * @param {object} object Object to flatten + * @param {string} flag Flag to set to true on first element of each group + * @return {array} + */ + flattenAndFlagFirst(object, flag) { + const values = this.values(object).map(collection => + collection.map((item, index) => { + // eslint-disable-next-line no-param-reassign + item[flag] = index === 0; + return item; + }), + ); + return this.flatten(values); + }, + /* + * Removes all empty strings, null, false and undefined elements array + * eg. + * compact([42, false, null, undefined, '', [], 'foo']); + * => + * [42, [], 'foo'] + * @param {array} array Array to compact + * @return {array} + */ + compact(array) { + const results = []; + array.forEach(value => { + if (!value) { + return; + } + results.push(value); + }); + return results; + }, + /* + * Returns the highlighted value of the specified key in the specified object. + * If no highlighted value is available, will return the key value directly + * eg. + * getHighlightedValue({ + * _highlightResult: { + * text: { + * value: 'foo' + * } + * }, + * text: 'foo' + * }, 'text'); + * => + * 'foo' + * @param {object} object Hit object returned by the Algolia API + * @param {string} property Object key to look for + * @return {string} + **/ + getHighlightedValue(object, property) { + if ( + object._highlightResult && + object._highlightResult.hierarchy_camel && + object._highlightResult.hierarchy_camel[property] && + object._highlightResult.hierarchy_camel[property].matchLevel && + object._highlightResult.hierarchy_camel[property].matchLevel !== 'none' && + object._highlightResult.hierarchy_camel[property].value + ) { + return object._highlightResult.hierarchy_camel[property].value; + } + if ( + object._highlightResult && + object._highlightResult && + object._highlightResult[property] && + object._highlightResult[property].value + ) { + return object._highlightResult[property].value; + } + return object[property]; + }, + /* + * Returns the snippeted value of the specified key in the specified object. + * If no highlighted value is available, will return the key value directly. + * Will add starting and ending ellipsis (…) if we detect that a sentence is + * incomplete + * eg. + * getSnippetedValue({ + * _snippetResult: { + * text: { + * value: 'This is an unfinished sentence' + * } + * }, + * text: 'This is an unfinished sentence' + * }, 'text'); + * => + * 'This is an unfinished sentence…' + * @param {object} object Hit object returned by the Algolia API + * @param {string} property Object key to look for + * @return {string} + **/ + getSnippetedValue(object, property) { + if ( + !object._snippetResult || + !object._snippetResult[property] || + !object._snippetResult[property].value + ) { + return object[property]; + } + let snippet = object._snippetResult[property].value; + + if (snippet[0] !== snippet[0].toUpperCase()) { + snippet = `…${snippet}`; + } + if (['.', '!', '?'].indexOf(snippet[snippet.length - 1]) === -1) { + snippet = `${snippet}…`; + } + return snippet; + }, + /* + * Deep clone an object. + * Note: This will not clone functions and dates + * @param {object} object Object to clone + * @return {object} + */ + deepClone(object) { + return JSON.parse(JSON.stringify(object)); + }, +}; + +export default utils; diff --git a/docs/static/.nojekyll b/docs/static/.nojekyll new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/static/img/docusaurus.png b/docs/static/img/docusaurus.png new file mode 100644 index 00000000000..f458149e3c8 Binary files /dev/null and b/docs/static/img/docusaurus.png differ diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico new file mode 100644 index 00000000000..eebd0cf4872 Binary files /dev/null and b/docs/static/img/favicon.ico differ diff --git a/docs/static/img/undraw_docusaurus_mountain.svg b/docs/static/img/undraw_docusaurus_mountain.svg new file mode 100644 index 00000000000..af961c49a88 --- /dev/null +++ b/docs/static/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,171 @@ + + Easy to Use + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/static/img/undraw_docusaurus_react.svg b/docs/static/img/undraw_docusaurus_react.svg new file mode 100644 index 00000000000..94b5cf08f88 --- /dev/null +++ b/docs/static/img/undraw_docusaurus_react.svg @@ -0,0 +1,170 @@ + + Powered by React + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/static/img/undraw_docusaurus_tree.svg b/docs/static/img/undraw_docusaurus_tree.svg new file mode 100644 index 00000000000..d9161d33920 --- /dev/null +++ b/docs/static/img/undraw_docusaurus_tree.svg @@ -0,0 +1,40 @@ + + Focus on What Matters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/static/img/web3js.svg b/docs/static/img/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/docs/static/img/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/docs/tsconfig.docs.json b/docs/tsconfig.docs.json new file mode 100644 index 00000000000..b11eca77af2 --- /dev/null +++ b/docs/tsconfig.docs.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "declarationDir": "dts", + "outDir": "dts", + "declaration": true, + "declarationMap": true + }, + "include": ["../packages/*/src/**/*", "../packages/*/types/**/*"] +} diff --git a/docs/tsconfig.json b/docs/tsconfig.json new file mode 100644 index 00000000000..3d0923875f2 --- /dev/null +++ b/docs/tsconfig.json @@ -0,0 +1,7 @@ +{ + // This file is not used in compilation. It is here just for a nice editor experience. + "extends": "@tsconfig/docusaurus/tsconfig.json", + "compilerOptions": { + "baseUrl": "." + } +} diff --git a/docs/web3-bzz.rst b/docs/web3-bzz.rst deleted file mode 100644 index fdefefeb07f..00000000000 --- a/docs/web3-bzz.rst +++ /dev/null @@ -1,309 +0,0 @@ -.. _bzz: - -======== -web3.bzz -======== - -.. note:: This API might change over time. - - -The ``web3-bzz`` package allows you to interact with swarm, the decentralized file store. -For more see the `Swarm Docs `_. - - -.. code-block:: javascript - - var Bzz = require('web3-bzz'); - - // will autodetect if the "ethereum" object is present and will either connect to the local swarm node, or the swarm-gateways.net. - // Optional you can give your own provider URL; If no provider URL is given it will use "http://swarm-gateways.net" - var bzz = new Bzz(Bzz.givenProvider || 'http://swarm-gateways.net'); - - - // or using the web3 umbrella package - - var Web3 = require('web3'); - var web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546'); - - // -> web3.bzz.currentProvider // if Web3.givenProvider was an ethereum provider it will set: "http://localhost:8500" otherwise it will set: "http://swarm-gateways.net" - - // set the provider manually if necessary - web3.bzz.setProvider("http://localhost:8500"); - - ------------------------------------------------------------------------------- - - -setProvider -===================== - -.. code-block:: javascript - - web3.bzz.setProvider(myProvider) - -Will change the provider for its module. - -.. note:: When called on the umbrella package ``web3`` it will also set the provider for all sub modules ``web3.eth``, ``web3.shh``, etc. EXCEPT ``web3.bzz`` which needs a separate provider at all times. - ----------- -Parameters ----------- - -1. ``Object`` - ``myProvider``: :ref:`a valid provider `. - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - var Bzz = require('web3-bzz'); - var bzz = new Bzz('http://localhost:8500'); - - // change provider - bzz.setProvider('http://swarm-gateways.net'); - - ------------------------------------------------------------------------------- - -givenProvider -===================== - -.. code-block:: javascript - - web3.bzz.givenProvider - -When using web3.js in an Ethereum compatible browser, it will set with the current native provider by that browser. -Returns the given provider by the (browser) environment, otherwise ``null``. - - -------- -Returns -------- - -``Object``: The given provider set or ``null``; - -------- -Example -------- - -.. code-block:: javascript - - bzz.givenProvider; - > { - send: function(), - on: function(), - bzz: "http://localhost:8500", - shh: true, - ... - } - - bzz.setProvider(bzz.givenProvider || "http://swarm-gateways.net"); - - ------------------------------------------------------------------------------- - - -currentProvider -===================== - -.. code-block:: javascript - - bzz.currentProvider - -Returns the current provider URL, otherwise ``null``. - - -------- -Returns -------- - -``Object``: The current provider URL or ``null``. - -------- -Example -------- - -.. code-block:: javascript - - bzz.currentProvider; - > "http://localhost:8500" - - - if(!bzz.currentProvider) { - bzz.setProvider("http://swarm-gateways.net"); - } - - ------------------------------------------------------------------------------- - - -upload -===================== - -.. code-block:: javascript - - web3.bzz.upload(mixed) - -Uploads files, folders or raw data to swarm. - ----------- -Parameters ----------- - -1. ``mixed`` - ``String|Buffer|Uint8Array|Object``: The data to upload, can be a file content, file Buffer/Uint8Array, multiple files, or a directory or file (only in node.js). The following types are allowed: - - ``String|Buffer|Uint8Array``: A file content, file Uint8Array or Buffer to upload, or: - - ``Object``: - 1. Multiple key values for files and directories. The paths will be kept the same: - - key must be the files path, or name, e.g. ``"/foo.txt"`` and its value is an object with: - - ``type``: The mime-type of the file, e.g. ``"text/html"``. - - ``data``: A file content, file Uint8Array or Buffer to upload. - 2. Upload a file or a directory from disk in Node.js. Requires and object with the following properties: - - ``path``: The path to the file or directory. - - ``kind``: The type of the source ``"directory"``, ``"file"`` or ``"data"``. - - ``defaultFile`` (optional): Path of the "defaultFile" when ``"kind": "directory"``, e.g. ``"/index.html"``. - 3. Upload file or folder in the browser. Requres and object with the following properties: - - ``pick``: The file picker to launch. Can be ``"file"``, ``"directory"`` or ``"data"``. - - -------- -Returns -------- - -``Promise`` returning ``String``: Returns the content hash of the manifest. - - -------- -Example -------- - -.. code-block:: javascript - - var bzz = web3.bzz; - - // raw data - bzz.upload("test file").then(function(hash) { - console.log("Uploaded file. Address:", hash); - }) - - // raw directory - var dir = { - "/foo.txt": {type: "text/plain", data: "sample file"}, - "/bar.txt": {type: "text/plain", data: "another file"} - }; - bzz.upload(dir).then(function(hash) { - console.log("Uploaded directory. Address:", hash); - }); - - // upload from disk in node.js - bzz.upload({ - path: "/path/to/thing", // path to data / file / directory - kind: "directory", // could also be "file" or "data" - defaultFile: "/index.html" // optional, and only for kind === "directory" - }) - .then(console.log) - .catch(console.log); - - // upload from disk in the browser - bzz.upload({pick: "file"}) // could also be "directory" or "data" - .then(console.log); - ------------------------------------------------------------------------------- - -download -===================== - -.. code-block:: javascript - - web3.bzz.download(bzzHash [, localpath]) - -Downloads files and folders from swarm as buffer or to disk (only node.js). - ----------- -Parameters ----------- - -1. ``bzzHash`` - ``String``: The file or directory to download. If the hash is a raw file it will return a Buffer, if a manifest file, it will return the directory structure. If the ``localpath`` is given, it will return that path where it downloaded the files to. -2. ``localpath`` - ``String``: The local folder to download the content into. (only node.js) - -------- -Returns -------- - -``Promise`` returning ``Buffer|Object|String``: The Buffer of the file downloaded, an object with the directory structure, or the path where it was downloaded to. - - -------- -Example -------- - -.. code-block:: javascript - - var bzz = web3.bzz; - - // download raw file - var fileHash = "a5c10851ef054c268a2438f10a21f6efe3dc3dcdcc2ea0e6a1a7a38bf8c91e23"; - bzz.download(fileHash).then(function(buffer) { - console.log("Downloaded file:", buffer.toString()); - }); - - // download directory, if the hash is manifest file. - var dirHash = "7e980476df218c05ecfcb0a2ca73597193a34c5a9d6da84d54e295ecd8e0c641"; - bzz.download(dirHash).then(function(dir) { - console.log("Downloaded directory:"); - > { - 'bar.txt': { type: 'text/plain', data: }, - 'foo.txt': { type: 'text/plain', data: } - } - }); - - // download file/directory to disk (only node.js) - var dirHash = "a5c10851ef054c268a2438f10a21f6efe3dc3dcdcc2ea0e6a1a7a38bf8c91e23"; - bzz.download(dirHash, "/target/dir") - .then(path => console.log(`Downloaded directory to ${path}.`)) - .catch(console.log); - - ------------------------------------------------------------------------------- - - -pick -===================== - -.. code-block:: javascript - - web3.bzz.pick.file() - web3.bzz.pick.directory() - web3.bzz.pick.data() - -Opens a file picker in the browser to select file(s), directory or data. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``Promise`` returning ``Object``: Returns the file or multiple files. - -------- -Example -------- - -.. code-block:: javascript - - web3.bzz.pick.file() - .then(console.log); - > { - ... - } diff --git a/docs/web3-eth-abi.rst b/docs/web3-eth-abi.rst deleted file mode 100644 index c36e2995d52..00000000000 --- a/docs/web3-eth-abi.rst +++ /dev/null @@ -1,510 +0,0 @@ -.. _eth-abi: - -========= -web3.eth.abi -========= - -The ``web3.eth.abi`` functions let you encode and decode parameters to ABI (Application Binary Interface) for function calls to the EVM (Ethereum Virtual Machine). - - ------------------------------------------------------------------------------- - - -encodeFunctionSignature -===================== - -.. code-block:: javascript - - web3.eth.abi.encodeFunctionSignature(functionName); - -Encodes the function name to its ABI signature, which are the first 4 bytes of the sha3 hash of the function name including types. - ----------- -Parameters ----------- - -1. ``functionName`` - ``String|Object``: The function name to encode. -or the :ref:`JSON interface ` object of the function. If string it has to be in the form ``function(type,type,...)``, e.g: ``myFunction(uint256,uint32[],bytes10,bytes)`` - -------- -Returns -------- - -``String`` - The ABI signature of the function. - -------- -Example -------- - -.. code-block:: javascript - - // From a JSON interface object - web3.eth.abi.encodeFunctionSignature({ - name: 'myMethod', - type: 'function', - inputs: [{ - type: 'uint256', - name: 'myNumber' - },{ - type: 'string', - name: 'myString' - }] - }) - > 0x24ee0097 - - // Or string - web3.eth.abi.encodeFunctionSignature('myMethod(uint256,string)') - > '0x24ee0097' - - ------------------------------------------------------------------------------- - -encodeEventSignature -===================== - -.. code-block:: javascript - - web3.eth.abi.encodeEventSignature(eventName); - -Encodes the event name to its ABI signature, which are the sha3 hash of the event name including input types. - ----------- -Parameters ----------- - -1. ``eventName`` - ``String|Object``: The event name to encode. -or the :ref:`JSON interface ` object of the event. If string it has to be in the form ``event(type,type,...)``, e.g: ``myEvent(uint256,uint32[],bytes10,bytes)`` - -------- -Returns -------- - -``String`` - The ABI signature of the event. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.abi.encodeEventSignature('myEvent(uint256,bytes32)') - > 0xf2eeb729e636a8cb783be044acf6b7b1e2c5863735b60d6daae84c366ee87d97 - - // or from a json interface object - web3.eth.abi.encodeEventSignature({ - name: 'myEvent', - type: 'event', - inputs: [{ - type: 'uint256', - name: 'myNumber' - },{ - type: 'bytes32', - name: 'myBytes' - }] - }) - > 0xf2eeb729e636a8cb783be044acf6b7b1e2c5863735b60d6daae84c366ee87d97 - - ------------------------------------------------------------------------------- - -encodeParameter -===================== - -.. code-block:: javascript - - web3.eth.abi.encodeParameter(type, parameter); - -Encodes a parameter based on its type to its ABI representation. - ----------- -Parameters ----------- - -1. ``type`` - ``String|Object``: The type of the parameter, see the `solidity documentation `_ for a list of types. -2. ``parameter`` - ``Mixed``: The actual parameter to encode. - -------- -Returns -------- - -``String`` - The ABI encoded parameter. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.abi.encodeParameter('uint256', '2345675643'); - > "0x000000000000000000000000000000000000000000000000000000008bd02b7b" - - web3.eth.abi.encodeParameter('uint256', '2345675643'); - > "0x000000000000000000000000000000000000000000000000000000008bd02b7b" - - web3.eth.abi.encodeParameter('bytes32', '0xdf3234'); - > "0xdf32340000000000000000000000000000000000000000000000000000000000" - - web3.eth.abi.encodeParameter('bytes', '0xdf3234'); - > "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003df32340000000000000000000000000000000000000000000000000000000000" - - web3.eth.abi.encodeParameter('bytes32[]', ['0xdf3234', '0xfdfd']); - > "00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002df32340000000000000000000000000000000000000000000000000000000000fdfd000000000000000000000000000000000000000000000000000000000000" - - web3.eth.abi.encodeParameter( - { - "ParentStruct": { - "propertyOne": 'uint256', - "propertyTwo": 'uint256', - "childStruct": { - "propertyOne": 'uint256', - "propertyTwo": 'uint256' - } - } - }, - { - "propertyOne": 42, - "propertyTwo": 56, - "childStruct": { - "propertyOne": 45, - "propertyTwo": 78 - } - } - ); - > "0x000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004e" ------------------------------------------------------------------------------- - -encodeParameters -===================== - -.. code-block:: javascript - - web3.eth.abi.encodeParameters(typesArray, parameters); - -Encodes a function parameters based on its :ref:`JSON interface ` object. - ----------- -Parameters ----------- - -1. ``typesArray`` - ``Array|Object``: An array with types or a :ref:`JSON interface ` of a function. See the `solidity documentation `_ for a list of types. -2. ``parameters`` - ``Array``: The parameters to encode. - -------- -Returns -------- - -``String`` - The ABI encoded parameters. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.abi.encodeParameters(['uint256','string'], ['2345675643', 'Hello!%']); - > "0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000" - - web3.eth.abi.encodeParameters(['uint8[]','bytes32'], [['34','434'], '0x324567fff']); - > "0x0 - - web3.eth.abi.encodeParameters( - [ - 'uint8[]', - { - "ParentStruct": { - "propertyOne": 'uint256', - "propertyTwo": 'uint256', - "ChildStruct": { - "propertyOne": 'uint256', - "propertyTwo": 'uint256' - } - } - } - ], - [ - ['34','434'], - { - "propertyOne": '42', - "propertyTwo": '56', - "ChildStruct": { - "propertyOne": '45', - "propertyTwo": '78' - } - } - ] - ); - > "0x00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000018" - ------------------------------------------------------------------------------- - -encodeFunctionCall -===================== - -.. code-block:: javascript - - web3.eth.abi.encodeFunctionCall(jsonInterface, parameters); - -Encodes a function call using its :ref:`JSON interface ` object and given parameters. - ----------- -Parameters ----------- - -1. ``jsonInterface`` - ``Object``: The :ref:`JSON interface ` object of a function. -2. ``parameters`` - ``Array``: The parameters to encode. - -------- -Returns -------- - -``String`` - The ABI encoded function call. Means function signature + parameters. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.abi.encodeFunctionCall({ - name: 'myMethod', - type: 'function', - inputs: [{ - type: 'uint256', - name: 'myNumber' - },{ - type: 'string', - name: 'myString' - }] - }, ['2345675643', 'Hello!%']); - > "0x24ee0097000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000" - ------------------------------------------------------------------------------- - -decodeParameter -===================== - -.. code-block:: javascript - - web3.eth.abi.decodeParameter(type, hexString); - -Decodes an ABI encoded parameter to its JavaScript type. - ----------- -Parameters ----------- - -1. ``type`` - ``String|Object``: The type of the parameter, see the `solidity documentation `_ for a list of types. -2. ``hexString`` - ``String``: The ABI byte code to decode. - -------- -Returns -------- - -``Mixed`` - The decoded parameter. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.abi.decodeParameter('uint256', '0x0000000000000000000000000000000000000000000000000000000000000010'); - > "16" - - web3.eth.abi.decodeParameter('string', '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000'); - > "Hello!%!" - - web3.eth.abi.decodeParameter('string', '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000'); - > "Hello!%!" - - web3.eth.abi.decodeParameter( - { - "ParentStruct": { - "propertyOne": 'uint256', - "propertyTwo": 'uint256', - "childStruct": { - "propertyOne": 'uint256', - "propertyTwo": 'uint256' - } - } - }, - - , '0x000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004e'); - > { - '0': { - '0': '42', - '1': '56', - '2': { - '0': '45', - '1': '78', - 'propertyOne': '45', - 'propertyTwo': '78' - }, - 'childStruct': { - '0': '45', - '1': '78', - 'propertyOne': '45', - 'propertyTwo': '78' - }, - 'propertyOne': '42', - 'propertyTwo': '56' - }, - 'ParentStruct': { - '0': '42', - '1': '56', - '2': { - '0': '45', - '1': '78', - 'propertyOne': '45', - 'propertyTwo': '78' - }, - 'childStruct': { - '0': '45', - '1': '78', - 'propertyOne': '45', - 'propertyTwo': '78' - }, - 'propertyOne': '42', - 'propertyTwo': '56' - } - } - ------------------------------------------------------------------------------- - -decodeParameters -===================== - -.. code-block:: javascript - - web3.eth.abi.decodeParameters(typesArray, hexString); - -Decodes ABI encoded parameters to its JavaScript types. - ----------- -Parameters ----------- - -1. ``typesArray`` - ``Array|Object``: An array with types or a :ref:`JSON interface ` outputs array. See the `solidity documentation `_ for a list of types. -2. ``hexString`` - ``String``: The ABI byte code to decode. - -------- -Returns -------- - -``Object`` - The result object containing the decoded parameters. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.abi.decodeParameters(['string', 'uint256'], '0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000ea000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000'); - > Result { '0': 'Hello!%!', '1': '234' } - - web3.eth.abi.decodeParameters([{ - type: 'string', - name: 'myString' - },{ - type: 'uint256', - name: 'myNumber' - }], '0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000ea000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000'); - > Result { - '0': 'Hello!%!', - '1': '234', - myString: 'Hello!%!', - myNumber: '234' - } - - web3.eth.abi.decodeParameters([ - 'uint8[]', - { - "ParentStruct": { - "propertyOne": 'uint256', - "propertyTwo": 'uint256', - "childStruct": { - "propertyOne": 'uint256', - "propertyTwo": 'uint256' - } - } - } - ], '0x00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000018'); - > Result { - '0': ['42', '24'], - '1': { - '0': '42', - '1': '56', - '2': - { - '0': '45', - '1': '78', - 'propertyOne': '45', - 'propertyTwo': '78' - }, - 'childStruct': - { - '0': '45', - '1': '78', - 'propertyOne': '45', - 'propertyTwo': '78' - }, - 'propertyOne': '42', - 'propertyTwo': '56' - } - } - ------------------------------------------------------------------------------- - - -decodeLog -===================== - -.. code-block:: javascript - - web3.eth.abi.decodeLog(inputs, hexString, topics); - -Decodes ABI-encoded log data and indexed topic data. - ----------- -Parameters ----------- - -1. ``inputs`` - ``Object``: A :ref:`JSON interface ` inputs array. See the `solidity documentation `_ for a list of types. -2. ``hexString`` - ``String``: The ABI byte code in the ``data`` field of a log. -3. ``topics`` - ``Array``: An array with the index parameter topics of the log, without the topic[0] if its a non-anonymous event, otherwise with topic[0]. - -------- -Returns -------- - -``Object`` - The result object containing the decoded parameters. - -------- -Example -------- - -.. code-block:: javascript - - - web3.eth.abi.decodeLog([{ - type: 'string', - name: 'myString' - },{ - type: 'uint256', - name: 'myNumber', - indexed: true - },{ - type: 'uint8', - name: 'mySmallNumber', - indexed: true - }], - '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000748656c6c6f252100000000000000000000000000000000000000000000000000', - ['0x000000000000000000000000000000000000000000000000000000000000f310', '0x0000000000000000000000000000000000000000000000000000000000000010']); - > Result { - '0': 'Hello%!', - '1': '62224', - '2': '16', - myString: 'Hello%!', - myNumber: '62224', - mySmallNumber: '16' - } diff --git a/docs/web3-eth-accounts.rst b/docs/web3-eth-accounts.rst deleted file mode 100644 index 3cd2f111aae..00000000000 --- a/docs/web3-eth-accounts.rst +++ /dev/null @@ -1,971 +0,0 @@ -.. _eth-accounts: - -========= -web3.eth.accounts -========= - -The ``web3.eth.accounts`` contains functions to generate Ethereum accounts and sign transactions and data. - -.. note:: This package has NOT been audited and might potentially be unsafe. Take precautions to clear memory properly, store the private keys safely, and test transaction receiving and sending functionality properly before using in production! - -To use this package standalone use: - - -.. code-block:: javascript - - var Accounts = require('web3-eth-accounts'); - - // Passing in the eth or web3 package is necessary to allow retrieving chainId, gasPrice and nonce automatically - // for accounts.signTransaction(). - var accounts = new Accounts('ws://localhost:8546'); - - - ------------------------------------------------------------------------------- - -.. _accounts-create: - -create -===================== - -.. code-block:: javascript - - web3.eth.accounts.create([entropy]); - -Generates an account object with private key and public key. - ----------- -Parameters ----------- - -1. ``entropy`` - ``String`` (optional): A random string to increase entropy. If given it should be at least 32 characters. If none is given a random string will be generated using :ref:`randomhex `. - -.. _eth-accounts-create-return: - -------- -Returns -------- - -``Object`` - The account object with the following structure: - - - ``address`` - ``string``: The account address. - - ``privateKey`` - ``string``: The accounts private key. This should never be shared or stored unencrypted in localstorage! Also make sure to ``null`` the memory after usage. - - ``signTransaction(tx [, callback])`` - ``Function``: The function to sign transactions. See :ref:`web3.eth.accounts.signTransaction() ` for more. - - ``sign(data)`` - ``Function``: The function to sign transactions. See :ref:`web3.eth.accounts.sign() ` for more. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.create(); - > { - address: "0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01", - privateKey: "0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709", - signTransaction: function(tx){...}, - sign: function(data){...}, - encrypt: function(password){...} - } - - web3.eth.accounts.create('2435@#@#@±±±±!!!!678543213456764321§34567543213456785432134567'); - > { - address: "0xF2CD2AA0c7926743B1D4310b2BC984a0a453c3d4", - privateKey: "0xd7325de5c2c1cf0009fac77d3d04a9c004b038883446b065871bc3e831dcd098", - signTransaction: function(tx){...}, - sign: function(data){...}, - encrypt: function(password){...} - } - - web3.eth.accounts.create(web3.utils.randomHex(32)); - > { - address: "0xe78150FaCD36E8EB00291e251424a0515AA1FF05", - privateKey: "0xcc505ee6067fba3f6fc2050643379e190e087aeffe5d958ab9f2f3ed3800fa4e", - signTransaction: function(tx){...}, - sign: function(data){...}, - encrypt: function(password){...} - } - ------------------------------------------------------------------------------- - - -privateKeyToAccount -===================== - -.. code-block:: javascript - - web3.eth.accounts.privateKeyToAccount(privateKey [, ignoreLength ]); - -Creates an account object from a private key. - -For more advanced hierarchial address derivation, see -[truffle-hd-wallet-provider](https://github.com/trufflesuite/truffle/tree/develop/packages/hdwallet-provider) -package. - ----------- -Parameters ----------- - -1. ``privateKey`` - ``String``: The private key to import. This is 32 bytes of random data. -If you are supplying a hexadecimal number, it must have `0x` prefix in order to be in line -with other Ethereum libraries. -2. ``ignoreLength`` - ``Boolean``: If set to true does the ``privateKey`` length not get validated. - -------- -Returns -------- - -``Object`` - The account object with the :ref:`structure seen here `. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.privateKeyToAccount('0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709'); - > { - address: '0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01', - privateKey: '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', - signTransaction: function(tx){...}, - sign: function(data){...}, - encrypt: function(password){...} - } - ------------------------------------------------------------------------------- - -.. _eth-accounts-signtransaction: - -signTransaction -===================== - -.. code-block:: javascript - - web3.eth.accounts.signTransaction(tx, privateKey [, callback]); - -Signs an Ethereum transaction with a given private key. - ----------- -Parameters ----------- - -1. ``tx`` - ``Object``: The transaction object as follows: - - ``nonce`` - ``String``: (optional) The nonce to use when signing this transaction. Default will use :ref:`web3.eth.getTransactionCount() `. - - ``chainId`` - ``String``: (optional) The chain id to use when signing this transaction. Default will use :ref:`web3.eth.net.getId() `. - - ``to`` - ``String``: (optional) The recevier of the transaction, can be empty when deploying a contract. - - ``data`` - ``String``: (optional) The call data of the transaction, can be empty for simple value transfers. - - ``value`` - ``String``: (optional) The value of the transaction in wei. - - ``gasPrice`` - ``String``: (optional) The gas price set by this transaction, if empty, it will use :ref:`web3.eth.getGasPrice() ` - - ``gas`` - ``String``: The gas provided by the transaction. - - ``chain`` - ``String``: (optional) Defaults to ``mainnet``. - - ``hardfork`` - ``String``: (optional) Defaults to ``petersburg``. - - ``common`` - ``Object``: (optional) The common object - - ``customChain`` - ``Object``: The custom chain properties - - ``name`` - ``string``: (optional) The name of the chain - - ``networkId`` - ``number``: Network ID of the custom chain - - ``chainId`` - ``number``: Chain ID of the custom chain - - ``baseChain`` - ``string``: (optional) ``mainnet``, ``goerli``, ``kovan``, ``rinkeby``, or ``ropsten`` - - ``hardfork`` - ``string``: (optional) ``chainstart``, ``homestead``, ``dao``, ``tangerineWhistle``, ``spuriousDragon``, ``byzantium``, ``constantinople``, ``petersburg``, or ``istanbul`` -2. ``privateKey`` - ``String``: The private key to sign with. -3. ``callback`` - ``Function``: (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - -``Promise`` returning ``Object``: The signed data RLP encoded transaction, or if ``returnSignature`` is ``true`` the signature values as follows: - - ``messageHash`` - ``String``: The hash of the given message. - - ``r`` - ``String``: First 32 bytes of the signature - - ``s`` - ``String``: Next 32 bytes of the signature - - ``v`` - ``String``: Recovery value + 27 - - ``rawTransaction`` - ``String``: The RLP encoded transaction, ready to be send using :ref:`web3.eth.sendSignedTransaction `. - - ``transactionHash`` - ``String``: The transaction hash for the RLP encoded transaction. - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.signTransaction({ - to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', - value: '1000000000', - gas: 2000000 - }, '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318') - .then(console.log); - > { - messageHash: '0x31c2f03766b36f0346a850e78d4f7db2d9f4d7d54d5f272a750ba44271e370b1', - v: '0x25', - r: '0xc9cf86333bcb065d140032ecaab5d9281bde80f21b9687b3e94161de42d51895', - s: '0x727a108a0b8d101465414033c3f705a9c7b826e596766046ee1183dbc8aeaa68', - rawTransaction: '0xf869808504e3b29200831e848094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008025a0c9cf86333bcb065d140032ecaab5d9281bde80f21b9687b3e94161de42d51895a0727a108a0b8d101465414033c3f705a9c7b826e596766046ee1183dbc8aeaa68' - transactionHash: '0xde8db924885b0803d2edc335f745b2b8750c8848744905684c20b987443a9593' - } - - web3.eth.accounts.signTransaction({ - to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', - value: '1000000000', - gas: 2000000, - gasPrice: '234567897654321', - nonce: 0, - chainId: 1 - }, '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318') - .then(console.log); - > { - messageHash: '0x6893a6ee8df79b0f5d64a180cd1ef35d030f3e296a5361cf04d02ce720d32ec5', - r: '0x9ebb6ca057a0535d6186462bc0b465b561c94a295bdb0621fc19208ab149a9c', - s: '0x440ffd775ce91a833ab410777204d5341a6f9fa91216a6f3ee2c051fea6a0428', - v: '0x25', - rawTransaction: '0xf86a8086d55698372431831e848094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008025a009ebb6ca057a0535d6186462bc0b465b561c94a295bdb0621fc19208ab149a9ca0440ffd775ce91a833ab410777204d5341a6f9fa91216a6f3ee2c051fea6a0428' - transactionHash: '0xd8f64a42b57be0d565f385378db2f6bf324ce14a594afc05de90436e9ce01f60' - } - - // or with a common - web3.eth.accounts.signTransaction({ - to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', - value: '1000000000', - gas: 2000000 - common: { - baseChain: 'mainnet', - hardfork: 'petersburg', - customChain: { - name: 'custom-chain', - chainId: 1, - networkId: 1 - } - } - }, '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318') - .then(console.log); - - - - ------------------------------------------------------------------------------- - - -recoverTransaction -===================== - -.. code-block:: javascript - - web3.eth.accounts.recoverTransaction(rawTransaction); - -Recovers the Ethereum address which was used to sign the given RLP encoded transaction. - ----------- -Parameters ----------- - -1. ``signature`` - ``String``: The RLP encoded transaction. - - -------- -Returns -------- - -``String``: The Ethereum address used to sign this transaction. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.recoverTransaction('0xf86180808401ef364594f0109fc8df283027b6285cc889f5aa624eac1f5580801ca031573280d608f75137e33fc14655f097867d691d5c4c44ebe5ae186070ac3d5ea0524410802cdc025034daefcdfa08e7d2ee3f0b9d9ae184b2001fe0aff07603d9'); - > "0xF0109fC8DF283027b6285cc889F5aA624EaC1F55" - - - ------------------------------------------------------------------------------- - -hashMessage -===================== - -.. code-block:: javascript - - web3.eth.accounts.hashMessage(message); - -Hashes the given message to be passed :ref:`web3.eth.accounts.recover() ` function. The data will be UTF-8 HEX decoded and enveloped as follows: ``"\x19Ethereum Signed Message:\n" + message.length + message`` and hashed using keccak256. - ----------- -Parameters ----------- - -1. ``message`` - ``String``: A message to hash, if its HEX it will be UTF8 decoded before. - - -------- -Returns -------- - -``String``: The hashed message - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.hashMessage("Hello World") - > "0xa1de988600a42c4b4ab089b619297c17d53cffae5d5120d82d8a92d0bb3b78f2" - - // the below results in the same hash - web3.eth.accounts.hashMessage(web3.utils.utf8ToHex("Hello World")) - > "0xa1de988600a42c4b4ab089b619297c17d53cffae5d5120d82d8a92d0bb3b78f2" - - - ------------------------------------------------------------------------------- - -.. _eth-accounts-sign: - -sign -===================== - -.. code-block:: javascript - - web3.eth.accounts.sign(data, privateKey); - -Signs arbitrary data. - ----------- -Parameters ----------- - -1. ``data`` - ``String``: The data to sign. -2. ``privateKey`` - ``String``: The private key to sign with. - -.. note:: The value passed as the `data` parameter will be UTF-8 HEX decoded and wrapped as follows: ``"\x19Ethereum Signed Message:\n" + message.length + message``. - -------- -Returns -------- - -``Object``: The signature object - - ``message`` - ``String``: The the given message. - - ``messageHash`` - ``String``: The hash of the given message. - - ``r`` - ``String``: First 32 bytes of the signature - - ``s`` - ``String``: Next 32 bytes of the signature - - ``v`` - ``String``: Recovery value + 27 - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.sign('Some data', '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318'); - > { - message: 'Some data', - messageHash: '0x1da44b586eb0729ff70a73c326926f6ed5a25f5b056e7f47fbc6e58d86871655', - v: '0x1c', - r: '0xb91467e570a6466aa9e9876cbcd013baba02900b8979d43fe208a4a4f339f5fd', - s: '0x6007e74cd82e037b800186422fc2da167c747ef045e5d18a5f5d4300f8e1a029', - signature: '0xb91467e570a6466aa9e9876cbcd013baba02900b8979d43fe208a4a4f339f5fd6007e74cd82e037b800186422fc2da167c747ef045e5d18a5f5d4300f8e1a0291c' - } - - - ------------------------------------------------------------------------------- - -.. _accounts-recover: - -recover -===================== - -.. code-block:: javascript - - web3.eth.accounts.recover(signatureObject); - web3.eth.accounts.recover(message, signature [, preFixed]); - web3.eth.accounts.recover(message, v, r, s [, preFixed]); - -Recovers the Ethereum address which was used to sign the given data. - ----------- -Parameters ----------- - -1. ``message|signatureObject`` - ``String|Object``: Either signed message or hash, or the signature object as following values: - - ``messageHash`` - ``String``: The hash of the given message already prefixed with ``"\x19Ethereum Signed Message:\n" + message.length + message``. - - ``r`` - ``String``: First 32 bytes of the signature - - ``s`` - ``String``: Next 32 bytes of the signature - - ``v`` - ``String``: Recovery value + 27 -2. ``signature`` - ``String``: The raw RLP encoded signature, OR parameter 2-4 as v, r, s values. -3. ``preFixed`` - ``Boolean`` (optional, default: ``false``): If the last parameter is ``true``, the given message will NOT automatically be prefixed with ``"\x19Ethereum Signed Message:\n" + message.length + message``, and assumed to be already prefixed. - - -------- -Returns -------- - -``String``: The Ethereum address used to sign this data. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.recover({ - messageHash: '0x1da44b586eb0729ff70a73c326926f6ed5a25f5b056e7f47fbc6e58d86871655', - v: '0x1c', - r: '0xb91467e570a6466aa9e9876cbcd013baba02900b8979d43fe208a4a4f339f5fd', - s: '0x6007e74cd82e037b800186422fc2da167c747ef045e5d18a5f5d4300f8e1a029' - }) - > "0x2c7536E3605D9C16a7a3D7b1898e529396a65c23" - - // message, signature - web3.eth.accounts.recover('Some data', '0xb91467e570a6466aa9e9876cbcd013baba02900b8979d43fe208a4a4f339f5fd6007e74cd82e037b800186422fc2da167c747ef045e5d18a5f5d4300f8e1a0291c'); - > "0x2c7536E3605D9C16a7a3D7b1898e529396a65c23" - - // message, v, r, s - web3.eth.accounts.recover('Some data', '0x1c', '0xb91467e570a6466aa9e9876cbcd013baba02900b8979d43fe208a4a4f339f5fd', '0x6007e74cd82e037b800186422fc2da167c747ef045e5d18a5f5d4300f8e1a029'); - > "0x2c7536E3605D9C16a7a3D7b1898e529396a65c23" - - - ------------------------------------------------------------------------------- - - -encrypt -===================== - -.. code-block:: javascript - - web3.eth.accounts.encrypt(privateKey, password); - -Encrypts a private key to the web3 keystore v3 standard. - ----------- -Parameters ----------- - -1. ``privateKey`` - ``String``: The private key to encrypt. -2. ``password`` - ``String``: The password used for encryption. - - -------- -Returns -------- - -``Object``: The encrypted keystore v3 JSON. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.encrypt('0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', 'test!') - > { - version: 3, - id: '04e9bcbb-96fa-497b-94d1-14df4cd20af6', - address: '2c7536e3605d9c16a7a3d7b1898e529396a65c23', - crypto: { - ciphertext: 'a1c25da3ecde4e6a24f3697251dd15d6208520efc84ad97397e906e6df24d251', - cipherparams: { iv: '2885df2b63f7ef247d753c82fa20038a' }, - cipher: 'aes-128-ctr', - kdf: 'scrypt', - kdfparams: { - dklen: 32, - salt: '4531b3c174cc3ff32a6a7a85d6761b410db674807b2d216d022318ceee50be10', - n: 262144, - r: 8, - p: 1 - }, - mac: 'b8b010fff37f9ae5559a352a185e86f9b9c1d7f7a9f1bd4e82a5dd35468fc7f6' - } - } - - - ------------------------------------------------------------------------------- - -decrypt -===================== - -.. code-block:: javascript - - web3.eth.accounts.decrypt(keystoreJsonV3, password); - -Decrypts a keystore v3 JSON, and creates the account. - ----------- -Parameters ----------- - -1. ``encryptedPrivateKey`` - ``String``: The encrypted private key to decrypt. -2. ``password`` - ``String``: The password used for encryption. - - -------- -Returns -------- - -``Object``: The decrypted account. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.decrypt({ - version: 3, - id: '04e9bcbb-96fa-497b-94d1-14df4cd20af6', - address: '2c7536e3605d9c16a7a3d7b1898e529396a65c23', - crypto: { - ciphertext: 'a1c25da3ecde4e6a24f3697251dd15d6208520efc84ad97397e906e6df24d251', - cipherparams: { iv: '2885df2b63f7ef247d753c82fa20038a' }, - cipher: 'aes-128-ctr', - kdf: 'scrypt', - kdfparams: { - dklen: 32, - salt: '4531b3c174cc3ff32a6a7a85d6761b410db674807b2d216d022318ceee50be10', - n: 262144, - r: 8, - p: 1 - }, - mac: 'b8b010fff37f9ae5559a352a185e86f9b9c1d7f7a9f1bd4e82a5dd35468fc7f6' - } - }, 'test!'); - > { - address: "0x2c7536E3605D9C16a7a3D7b1898e529396a65c23", - privateKey: "0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318", - signTransaction: function(tx){...}, - sign: function(data){...}, - encrypt: function(password){...} - } - - - ------------------------------------------------------------------------------- -.. _eth-accounts-wallet: - -wallet -===================== - -.. code-block:: javascript - - web3.eth.accounts.wallet; - -Contains an in memory wallet with multiple accounts. These accounts can be used when using :ref:`web3.eth.sendTransaction() `. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.wallet; - > Wallet { - 0: {...}, // account by index - "0xF0109fC8DF283027b6285cc889F5aA624EaC1F55": {...}, // same account by address - "0xf0109fc8df283027b6285cc889f5aa624eac1f55": {...}, // same account by address lowercase - 1: {...}, - "0xD0122fC8DF283027b6285cc889F5aA624EaC1d23": {...}, - "0xd0122fc8df283027b6285cc889f5aa624eac1d23": {...}, - - add: function(){}, - remove: function(){}, - save: function(){}, - load: function(){}, - clear: function(){}, - - length: 2, - } - - - ------------------------------------------------------------------------------- - -wallet.create -===================== - -.. code-block:: javascript - - web3.eth.accounts.wallet.create(numberOfAccounts [, entropy]); - -Generates one or more accounts in the wallet. If wallets already exist they will not be overridden. - ----------- -Parameters ----------- - -1. ``numberOfAccounts`` - ``Number``: Number of accounts to create. Leave empty to create an empty wallet. -2. ``entropy`` - ``String`` (optional): A string with random characters as additional entropy when generating accounts. If given it should be at least 32 characters. - - -------- -Returns -------- - -``Object``: The wallet object. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.wallet.create(2, '54674321§3456764321§345674321§3453647544±±±§±±±!!!43534534534534'); - > Wallet { - 0: {...}, - "0xF0109fC8DF283027b6285cc889F5aA624EaC1F55": {...}, - "0xf0109fc8df283027b6285cc889f5aa624eac1f55": {...}, - ... - } - - - ------------------------------------------------------------------------------- - -wallet.add -===================== - -.. code-block:: javascript - - web3.eth.accounts.wallet.add(account); - -Adds an account using a private key or account object to the wallet. - ----------- -Parameters ----------- - -1. ``account`` - ``String|Object``: A private key or account object created with :ref:`web3.eth.accounts.create() `. - - -------- -Returns -------- - -``Object``: The added account. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.wallet.add('0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318'); - > { - index: 0, - address: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', - privateKey: '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', - signTransaction: function(tx){...}, - sign: function(data){...}, - encrypt: function(password){...} - } - - web3.eth.accounts.wallet.add({ - privateKey: '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', - address: '0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01' - }); - > { - index: 0, - address: '0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01', - privateKey: '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', - signTransaction: function(tx){...}, - sign: function(data){...}, - encrypt: function(password){...} - } - - - ------------------------------------------------------------------------------- - -wallet.remove -===================== - -.. code-block:: javascript - - web3.eth.accounts.wallet.remove(account); - -Removes an account from the wallet. - ----------- -Parameters ----------- - -1. ``account`` - ``String|Number``: The account address, or index in the wallet. - - -------- -Returns -------- - -``Boolean``: ``true`` if the wallet was removed. ``false`` if it couldn't be found. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.wallet; - > Wallet { - 0: {...}, - "0xF0109fC8DF283027b6285cc889F5aA624EaC1F55": {...} - 1: {...}, - "0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01": {...} - ... - } - - web3.eth.accounts.wallet.remove('0xF0109fC8DF283027b6285cc889F5aA624EaC1F55'); - > true - - web3.eth.accounts.wallet.remove(3); - > false - - - ------------------------------------------------------------------------------- - - -wallet.clear -===================== - -.. code-block:: javascript - - web3.eth.accounts.wallet.clear(); - -Securely empties the wallet and removes all its accounts. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``Object``: The wallet object. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.wallet.clear(); - > Wallet { - add: function(){}, - remove: function(){}, - save: function(){}, - load: function(){}, - clear: function(){}, - - length: 0 - } - - ------------------------------------------------------------------------------- - -wallet.encrypt -===================== - -.. code-block:: javascript - - web3.eth.accounts.wallet.encrypt(password); - -Encrypts all wallet accounts to an array of encrypted keystore v3 objects. - ----------- -Parameters ----------- - -1. ``password`` - ``String``: The password which will be used for encryption. - - -------- -Returns -------- - -``Array``: The encrypted keystore v3. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.wallet.encrypt('test'); - > [ { version: 3, - id: 'dcf8ab05-a314-4e37-b972-bf9b86f91372', - address: '06f702337909c06c82b09b7a22f0a2f0855d1f68', - crypto: - { ciphertext: '0de804dc63940820f6b3334e5a4bfc8214e27fb30bb7e9b7b74b25cd7eb5c604', - cipherparams: [Object], - cipher: 'aes-128-ctr', - kdf: 'scrypt', - kdfparams: [Object], - mac: 'b2aac1485bd6ee1928665642bf8eae9ddfbc039c3a673658933d320bac6952e3' } }, - { version: 3, - id: '9e1c7d24-b919-4428-b10e-0f3ef79f7cf0', - address: 'b5d89661b59a9af0b34f58d19138baa2de48baaf', - crypto: - { ciphertext: 'd705ebed2a136d9e4db7e5ae70ed1f69d6a57370d5fbe06281eb07615f404410', - cipherparams: [Object], - cipher: 'aes-128-ctr', - kdf: 'scrypt', - kdfparams: [Object], - mac: 'af9eca5eb01b0f70e909f824f0e7cdb90c350a802f04a9f6afe056602b92272b' } } - ] - ------------------------------------------------------------------------------- - - -wallet.decrypt -===================== - -.. code-block:: javascript - - web3.eth.accounts.wallet.decrypt(keystoreArray, password); - -Decrypts keystore v3 objects. - ----------- -Parameters ----------- - -1. ``keystoreArray`` - ``Array``: The encrypted keystore v3 objects to decrypt. -2. ``password`` - ``String``: The password which will be used for encryption. - - -------- -Returns -------- - -``Object``: The wallet object. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.wallet.decrypt([ - { version: 3, - id: '83191a81-aaca-451f-b63d-0c5f3b849289', - address: '06f702337909c06c82b09b7a22f0a2f0855d1f68', - crypto: - { ciphertext: '7d34deae112841fba86e3e6cf08f5398dda323a8e4d29332621534e2c4069e8d', - cipherparams: { iv: '497f4d26997a84d570778eae874b2333' }, - cipher: 'aes-128-ctr', - kdf: 'scrypt', - kdfparams: - { dklen: 32, - salt: '208dd732a27aa4803bb760228dff18515d5313fd085bbce60594a3919ae2d88d', - n: 262144, - r: 8, - p: 1 }, - mac: '0062a853de302513c57bfe3108ab493733034bf3cb313326f42cf26ea2619cf9' } }, - { version: 3, - id: '7d6b91fa-3611-407b-b16b-396efb28f97e', - address: 'b5d89661b59a9af0b34f58d19138baa2de48baaf', - crypto: - { ciphertext: 'cb9712d1982ff89f571fa5dbef447f14b7e5f142232bd2a913aac833730eeb43', - cipherparams: { iv: '8cccb91cb84e435437f7282ec2ffd2db' }, - cipher: 'aes-128-ctr', - kdf: 'scrypt', - kdfparams: - { dklen: 32, - salt: '08ba6736363c5586434cd5b895e6fe41ea7db4785bd9b901dedce77a1514e8b8', - n: 262144, - r: 8, - p: 1 }, - mac: 'd2eb068b37e2df55f56fa97a2bf4f55e072bef0dd703bfd917717d9dc54510f0' } } - ], 'test'); - > Wallet { - 0: {...}, - 1: {...}, - "0xF0109fC8DF283027b6285cc889F5aA624EaC1F55": {...}, - "0xD0122fC8DF283027b6285cc889F5aA624EaC1d23": {...} - ... - } - - - ------------------------------------------------------------------------------- - -wallet.save -===================== - -.. code-block:: javascript - - web3.eth.accounts.wallet.save(password [, keyName]); - -Stores the wallet encrypted and as string in local storage. - -.. note:: Browser only. - ----------- -Parameters ----------- - -1. ``password`` - ``String``: The password to encrypt the wallet. -2. ``keyName`` - ``String``: (optional) The key used for the local storage position, defaults to ``"web3js_wallet"``. - - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.wallet.save('test#!$'); - > true - - ------------------------------------------------------------------------------- - -wallet.load -===================== - -.. code-block:: javascript - - web3.eth.accounts.wallet.load(password [, keyName]); - -Loads a wallet from local storage and decrypts it. - -.. note:: Browser only. - ----------- -Parameters ----------- - -1. ``password`` - ``String``: The password to decrypt the wallet. -2. ``keyName`` - ``String``: (optional) The key used for the localstorage position, defaults to ``"web3js_wallet"``. - - -------- -Returns -------- - -``Object``: The wallet object. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.accounts.wallet.load('test#!$', 'myWalletKey'); - > Wallet { - 0: {...}, - 1: {...}, - "0xF0109fC8DF283027b6285cc889F5aA624EaC1F55": {...}, - "0xD0122fC8DF283027b6285cc889F5aA624EaC1d23": {...} - ... - } diff --git a/docs/web3-eth-contract.rst b/docs/web3-eth-contract.rst deleted file mode 100644 index a15a9b1025b..00000000000 --- a/docs/web3-eth-contract.rst +++ /dev/null @@ -1,1263 +0,0 @@ -.. _eth-contract: - -======== -web3.eth.Contract -======== - -The ``web3.eth.Contract`` object makes it easy to interact with smart contracts on the ethereum blockchain. -When you create a new contract object you give it the json interface of the respective smart contract -and web3 will auto convert all calls into low level ABI calls over RPC for you. - -This allows you to interact with smart contracts as if they were JavaScript objects. - -To use it standalone: - -.. code-block:: javascript - - var Contract = require('web3-eth-contract'); - - // set provider for all later instances to use - Contract.setProvider('ws://localhost:8546'); - - var contract = new Contract(jsonInterface, address); - - contract.methods.somFunc().send({from: ....}) - .on('receipt', function(){ - ... - }); - - ------------------------------------------------------------------------------- - - -new contract -========= - -.. index:: JSON interface - -.. code-block:: javascript - - new web3.eth.Contract(jsonInterface[, address][, options]) - -Creates a new contract instance with all its methods and events defined in its :ref:`json interface ` object. - ----------- -Parameters ----------- - -1. ``jsonInterface`` - ``Object``: The json interface for the contract to instantiate -2. ``address`` - ``String`` (optional): The address of the smart contract to call. -3. ``options`` - ``Object`` (optional): The options of the contract. Some are used as fallbacks for calls and transactions: - * ``from`` - ``String``: The address transactions should be made from. - * ``gasPrice`` - ``String``: The gas price in wei to use for transactions. - * ``gas`` - ``Number``: The maximum gas provided for a transaction (gas limit). - * ``data`` - ``String``: The byte code of the contract. Used when the contract gets :ref:`deployed `. - -------- -Returns -------- - -``Object``: The contract instance with all its methods and events. - - -------- -Example -------- - -.. code-block:: javascript - - var myContract = new web3.eth.Contract([...], '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', { - from: '0x1234567890123456789012345678901234567891', // default from address - gasPrice: '20000000000' // default gas price in wei, 20 gwei in this case - }); - - ------------------------------------------------------------------------------- - - -= Properties = -========= - ------------------------------------------------------------------------------- - -.. _eth-contract-defaultaccount - -defaultAccount -===================== - -.. code-block:: javascript - - web3.eth.Contract.defaultAccount - contract.defaultAccount // on contract instance - -This default address is used as the default ``"from"`` property, if no ``"from"`` property is specified in for the following methods: - -- :ref:`web3.eth.sendTransaction() ` -- :ref:`web3.eth.call() ` -- :ref:`new web3.eth.Contract() -> myContract.methods.myMethod().call() ` -- :ref:`new web3.eth.Contract() -> myContract.methods.myMethod().send() ` - --------- -Property --------- - - -``String`` - 20 Bytes: Any ethereum address. You should have the private key for that address in your node or keystore. (Default is ``undefined``) - - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.defaultAccount; - > undefined - - // set the default account - web3.eth.defaultAccount = '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe'; - - ------------------------------------------------------------------------------- - -.. _eth-contract-defaultblock: - -defaultBlock -===================== - -.. code-block:: javascript - - web3.eth.Contract.defaultBlock - contract.defaultBlock // on contract instance - -The default block is used for certain methods. You can override it by passing in the defaultBlock as last parameter. The default value is ``"latest"``. - ----------- -Property ----------- - - -The default block parameters can be one of the following: - -- ``Number|BN|BigNumber``: A block number -- ``"earliest"`` - ``String``: The genesis block -- ``"latest"`` - ``String``: The latest block (current head of the blockchain) -- ``"pending"`` - ``String``: The currently mined block (including pending transactions) - -Default is ``"latest"``. - - -------- -Example -------- - -.. code-block:: javascript - - contract.defaultBlock; - > "latest" - - // set the default block - contract.defaultBlock = 231; - - - ------------------------------------------------------------------------------- - -.. _eth-contract-defaulthardfork: - -defaultHardfork -===================== - -.. code-block:: javascript - - contract.defaultHardfork - -The default hardfork property is used for signing transactions locally. - ----------- -Property ----------- - - -The default hardfork property can be one of the following: - -- ``"chainstart"`` - ``String`` -- ``"homestead"`` - ``String`` -- ``"dao"`` - ``String`` -- ``"tangerineWhistle"`` - ``String`` -- ``"spuriousDragon"`` - ``String`` -- ``"byzantium"`` - ``String`` -- ``"constantinople"`` - ``String`` -- ``"petersburg"`` - ``String`` -- ``"istanbul"`` - ``String`` - -Default is ``"petersburg"`` - - -------- -Example -------- - -.. code-block:: javascript - - contract.defaultHardfork; - > "petersburg" - - // set the default block - contract.defaultHardfork = 'istanbul'; - - ------------------------------------------------------------------------------- - -.. _eth-contract-defaultchain: - -defaultChain -===================== - -.. code-block:: javascript - - contract.defaultChain - -The default chain property is used for signing transactions locally. - ----------- -Property ----------- - - -The default chain property can be one of the following: - -- ``"mainnet"`` - ``String`` -- ``"goerli"`` - ``String`` -- ``"kovan"`` - ``String`` -- ``"rinkeby"`` - ``String`` -- ``"ropsten"`` - ``String`` - -Default is ``"mainnet"`` - - -------- -Example -------- - -.. code-block:: javascript - - contract.defaultChain; - > "mainnet" - - // set the default chain - contract.defaultChain = 'goerli'; - - ------------------------------------------------------------------------------- - -.. _eth-contract-defaultcommon: - -defaultCommon -===================== - -.. code-block:: javascript - - contract.defaultCommon - -The default common property is used for signing transactions locally. - ----------- -Property ----------- - - -The default common property does contain the following ``Common`` object: - -- ``customChain`` - ``Object``: The custom chain properties - - ``name`` - ``string``: (optional) The name of the chain - - ``networkId`` - ``number``: Network ID of the custom chain - - ``chainId`` - ``number``: Chain ID of the custom chain -- ``baseChain`` - ``string``: (optional) ``mainnet``, ``goerli``, ``kovan``, ``rinkeby``, or ``ropsten`` -- ``hardfork`` - ``string``: (optional) ``chainstart``, ``homestead``, ``dao``, ``tangerineWhistle``, ``spuriousDragon``, ``byzantium``, ``constantinople``, ``petersburg``, or ``istanbul`` - - -Default is ``undefined``. - - -------- -Example -------- - -.. code-block:: javascript - - contract.defaultCommon; - > {customChain: {name: 'custom-network', chainId: 1, networkId: 1}, baseChain: 'mainnet', hardfork: 'petersburg'} - - // set the default common - contract.defaultCommon = {customChain: {name: 'custom-network', chainId: 1, networkId: 1}, baseChain: 'mainnet', hardfork: 'petersburg'}; - - ------------------------------------------------------------------------------- - -.. _eth-contract-transactionblocktimeout: - -transactionBlockTimeout -===================== - -.. code-block:: javascript - - web3.eth.Contract.transcationBlockTimeout - contract.transactionBlockTimeout // on contract instance - -The ``transactionBlockTimeout`` is used over socket-based connections. This option defines the amount of new blocks it should wait until the first confirmation happens, otherwise the PromiEvent rejects with a timeout error. - - -------- -Returns -------- - -``number``: The current value of transactionBlockTimeout (default: 50) - ------------------------------------------------------------------------------- - -.. _eth-contract-module-transactionconfirmationblocks: - -transactionConfirmationBlocks -===================== - -.. code-block:: javascript - - web3.eth.Contract.transactionConfirmationBlocks - contract.transactionConfirmationBlocks // on contract instance - -This defines the number of blocks it requires until a transaction is considered confirmed. - - -------- -Returns -------- - -``number``: The current value of transactionConfirmationBlocks (default: 24) - ------------------------------------------------------------------------------- - -.. _eth-contract-module-transactionpollingtimeout: - -transactionPollingTimeout -===================== - -.. code-block:: javascript - - web3.eth.Contract.transactionPollingTimeout - contract.transactionPollingTimeout // on contract instance - -The ``transactionPollingTimeout`` is used over HTTP connections. This option defines the number of seconds Web3 will wait for a receipt which confirms that a transaction was mined by the network. Note: If this method times out, the transaction may still be pending. - - -------- -Returns -------- - -``number``: The current value of transactionPollingTimeout (default: 750) - ------------------------------------------------------------------------------- - -.. _eth-contract-module-handlerevert: - -handleRevert -============ - -.. code-block:: javascript - - web3.eth.Contract.handleRevert - contract.handleRevert // on contract instance - -The ``handleRevert`` options property defaults to ``false`` and returns the revert reason string if enabled on :ref:`send ` or :ref:`call ` of a contract method. - -.. note:: The revert reason string and signature are properties on the returned error. - -------- -Returns -------- - -``boolean``: The current value of ``handleRevert`` (default: false) - ------------------------------------------------------------------------------- - -options -========= - -.. code-block:: javascript - - myContract.options - -The options ``object`` for the contract instance. ``from``, ``gas`` and ``gasPrice`` are used as fallback values when sending transactions. - -------- -Properties -------- - -``Object`` - options: - -- ``address`` - ``String``: The address where the contract is deployed. See :ref:`options.address `. -- ``jsonInterface`` - ``Array``: The json interface of the contract. See :ref:`options.jsonInterface `. -- ``data`` - ``String``: The byte code of the contract. Used when the contract gets :ref:`deployed `. -- ``from`` - ``String``: The address transactions should be made from. -- ``gasPrice`` - ``String``: The gas price in wei to use for transactions. -- ``gas`` - ``Number``: The maximum gas provided for a transaction (gas limit). -- ``handleRevert`` - ``Boolean``: It will otherwise use the default value provided from the Eth module. See :ref:`handleRevert `. -- ``transactionBlockTimeout`` - ``Number``: It will otherwise use the default value provided from the Eth module. See :ref:`transactionBlockTimeout `. -- ``transactionConfirmationBlocks`` - ``Number``: It will otherwise use the default value provided from the Eth module. See :ref:`transactionConfirmationBlocks `. -- ``transactionPollingTimeout`` - ``Number``: It will otherwise use the default value provided from the Eth module. See :ref:`transactionPollingTimeout `. -- ``chain`` - ``Number``: It will otherwise use the default value provided from the Eth module. See :ref:`defaultChain `. -- ``hardfork`` - ``Number``: It will otherwise use the default value provided from the Eth module. See :ref:`defaultHardfork `. -- ``common`` - ``Number``: It will otherwise use the default value provided from the Eth module. See :ref:`defaultCommon `. - - -------- -Example -------- - -.. code-block:: javascript - - myContract.options; - > { - address: '0x1234567890123456789012345678901234567891', - jsonInterface: [...], - from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', - gasPrice: '10000000000000', - gas: 1000000 - } - - myContract.options.from = '0x1234567890123456789012345678901234567891'; // default from address - myContract.options.gasPrice = '20000000000000'; // default gas price in wei - myContract.options.gas = 5000000; // provide as fallback always 5M gas - - ------------------------------------------------------------------------------- - -.. _contract-address: - -options.address -========= - -.. code-block:: javascript - - myContract.options.address - -The address used for this contract instance. -All transactions generated by web3.js from this contract will contain this address as the ``"to"``. - -The address will be stored in lowercase. - - -------- -Property -------- - -``address`` - ``String|null``: The address for this contract, or ``null`` if not yet set. - - -------- -Example -------- - -.. code-block:: javascript - - myContract.options.address; - > '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae' - - // set a new address - myContract.options.address = '0x1234FFDD...'; - - ------------------------------------------------------------------------------- - -.. _contract-json-interface: - -options.jsonInterface -========= - -.. code-block:: javascript - - myContract.options.jsonInterface - -The :ref:`json interface ` object derived from the `ABI `_ of this contract. - - -------- -Property -------- - -``jsonInterface`` - ``Array``: The :ref:`json interface ` for this contract. Re-setting this will regenerate the methods and events of the contract instance. - - -------- -Example -------- - -.. code-block:: javascript - - myContract.options.jsonInterface; - > [{ - "type":"function", - "name":"foo", - "inputs": [{"name":"a","type":"uint256"}], - "outputs": [{"name":"b","type":"address"}] - },{ - "type":"event", - "name":"Event", - "inputs": [{"name":"a","type":"uint256","indexed":true},{"name":"b","type":"bytes32","indexed":false}], - }] - - // set a new interface - myContract.options.jsonInterface = [...]; - - ------------------------------------------------------------------------------- - - -= Methods = -========= - - ------------------------------------------------------------------------------- - -clone -===================== - -.. code-block:: javascript - - myContract.clone() - -Clones the current contract instance. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - - -``Object``: The new contract instance. - -------- -Example -------- - -.. code-block:: javascript - - var contract1 = new eth.Contract(abi, address, {gasPrice: '12345678', from: fromAddress}); - - var contract2 = contract1.clone(); - contract2.options.address = address2; - - (contract1.options.address !== contract2.options.address); - > true - ------------------------------------------------------------------------------- - - -.. _contract-deploy: - -.. index:: contract deploy - -deploy -===================== - -.. code-block:: javascript - - myContract.deploy(options) - -Call this function to deploy the contract to the blockchain. -After successful deployment the promise will resolve with a new contract instance. - ----------- -Parameters ----------- - -1. ``options`` - ``Object``: The options used for deployment. - * ``data`` - ``String``: The byte code of the contract. - * ``arguments`` - ``Array`` (optional): The arguments which get passed to the constructor on deployment. - -------- -Returns -------- - - -``Object``: The transaction object: - -- ``Array`` - arguments: The arguments passed to the method before. They can be changed. -- ``Function`` - :ref:`send `: Will deploy the contract. The promise will resolve with the new contract instance, instead of the receipt! -- ``Function`` - :ref:`estimateGas `: Will estimate the gas used for deploying. Note: You must specify a ``from`` address otherwise you may experience odd behavior. -- ``Function`` - :ref:`encodeABI `: Encodes the ABI of the deployment, which is contract data + constructor parameters - -------- -Example -------- - -.. code-block:: javascript - - myContract.deploy({ - data: '0x12345...', - arguments: [123, 'My String'] - }) - .send({ - from: '0x1234567890123456789012345678901234567891', - gas: 1500000, - gasPrice: '30000000000000' - }, function(error, transactionHash){ ... }) - .on('error', function(error){ ... }) - .on('transactionHash', function(transactionHash){ ... }) - .on('receipt', function(receipt){ - console.log(receipt.contractAddress) // contains the new contract address - }) - .on('confirmation', function(confirmationNumber, receipt){ ... }) - .then(function(newContractInstance){ - console.log(newContractInstance.options.address) // instance with the new contract address - }); - - - // When the data is already set as an option to the contract itself - myContract.options.data = '0x12345...'; - - myContract.deploy({ - arguments: [123, 'My String'] - }) - .send({ - from: '0x1234567890123456789012345678901234567891', - gas: 1500000, - gasPrice: '30000000000000' - }) - .then(function(newContractInstance){ - console.log(newContractInstance.options.address) // instance with the new contract address - }); - - - // Simply encoding - myContract.deploy({ - data: '0x12345...', - arguments: [123, 'My String'] - }) - .encodeABI(); - > '0x12345...0000012345678765432' - - - // Gas estimation - myContract.deploy({ - data: '0x12345...', - arguments: [123, 'My String'] - }) - .estimateGas(function(err, gas){ - console.log(gas); - }); - ------------------------------------------------------------------------------- - - -methods -===================== - -.. code-block:: javascript - - myContract.methods.myMethod([param1[, param2[, ...]]]) - -Creates a transaction object for that method, which then can be :ref:`called `, :ref:`send `, :ref:`estimated `, or :ref:`ABI encoded `. - -The methods of this smart contract are available through: - -- The name: ``myContract.methods.myMethod(123)`` -- The name with parameters: ``myContract.methods['myMethod(uint256)'](123)`` -- The signature: ``myContract.methods['0x58cf5f10'](123)`` - -This allows calling functions with same name but different parameters from the JavaScript contract object. - ----------- -Parameters ----------- - -Parameters of any method depend on the smart contracts methods, defined in the :ref:`JSON interface `. - -------- -Returns -------- - -``Object``: The transaction object: - -- ``Array`` - arguments: The arguments passed to the method before. They can be changed. -- ``Function`` - :ref:`call `: Will call the "constant" method and execute its smart contract method in the EVM without sending a transaction (Can't alter the smart contract state). -- ``Function`` - :ref:`send `: Will send a transaction to the smart contract and execute its method (Can alter the smart contract state). -- ``Function`` - :ref:`estimateGas `: Will estimate the gas used when the method would be executed on chain. Note: You must specify a ``from`` address otherwise you may experience odd behavior. -- ``Function`` - :ref:`encodeABI `: Encodes the ABI for this method. This can be send using a transaction, call the method or passing into another smart contracts method as argument. - -------- -Example -------- - -.. code-block:: javascript - - // calling a method - - myContract.methods.myMethod(123).call({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}, function(error, result){ - ... - }); - - // or sending and using a promise - myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}) - .then(function(receipt){ - // receipt can also be a new contract instance, when coming from a "contract.deploy({...}).send()" - }); - - // or sending and using the events - - myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}) - .on('transactionHash', function(hash){ - ... - }) - .on('receipt', function(receipt){ - ... - }) - .on('confirmation', function(confirmationNumber, receipt){ - ... - }) - .on('error', function(error, receipt) { - ... - }); - - ------------------------------------------------------------------------------- - - -.. _contract-call: - -methods.myMethod.call -===================== - -.. code-block:: javascript - - myContract.methods.myMethod([param1[, param2[, ...]]]).call(options [, defaultBlock] [, callback]) - -Will call a "constant" method and execute its smart contract method in the EVM without sending any transaction. Note calling cannot alter the smart contract state. - ----------- -Parameters ----------- - -1. ``options`` - ``Object`` (optional): The options used for calling. - * ``from`` - ``String`` (optional): The address the call "transaction" should be made from. For calls the ``from`` property is optional however it is highly recommended to explicitly set it or it may default to `address(0)` depending on your node or provider. - * ``gasPrice`` - ``String`` (optional): The gas price in wei to use for this call "transaction". - * ``gas`` - ``Number`` (optional): The maximum gas provided for this call "transaction" (gas limit). -2. ``defaultBlock`` - ``Number|String|BN|BigNumber`` (optional): If you pass this parameter it will not use the default block set with :ref:`contract.defaultBlock `. Pre-defined block numbers as ``"earliest"``, ``"latest"``, and ``"pending"`` can also be used. Useful for requesting data from or replaying transactions in past blocks. -3. ``callback`` - ``Function`` (optional): This callback will be fired with the result of the smart contract method execution as the second argument, or with an error object as the first argument. - -------- -Returns -------- - -``Promise`` returns ``Mixed``: The return value(s) of the smart contract method. -If it returns a single value, it's returned as is. If it has multiple return values they are returned as an object with properties and indices: - -------- -Example -------- - -.. code-block:: javascript - - // using the callback - myContract.methods.myMethod(123).call({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}, function(error, result){ - ... - }); - - // using the promise - myContract.methods.myMethod(123).call({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}) - .then(function(result){ - ... - }); - - - // MULTI-ARGUMENT RETURN: - - // Solidity - contract MyContract { - function myFunction() returns(uint256 myNumber, string myString) { - return (23456, "Hello!%"); - } - } - - // web3.js - var MyContract = new web3.eth.Contract(abi, address); - MyContract.methods.myFunction().call() - .then(console.log); - > Result { - myNumber: '23456', - myString: 'Hello!%', - 0: '23456', // these are here as fallbacks if the name is not know or given - 1: 'Hello!%' - } - - - // SINGLE-ARGUMENT RETURN: - - // Solidity - contract MyContract { - function myFunction() returns(string myString) { - return "Hello!%"; - } - } - - // web3.js - var MyContract = new web3.eth.Contract(abi, address); - MyContract.methods.myFunction().call() - .then(console.log); - > "Hello!%" - - - ------------------------------------------------------------------------------- - - -.. _contract-send: - -methods.myMethod.send -===================== - -.. code-block:: javascript - - myContract.methods.myMethod([param1[, param2[, ...]]]).send(options[, callback]) - -Will send a transaction to the smart contract and execute its method. Note this can alter the smart contract state. - ----------- -Parameters ----------- - -1. ``options`` - ``Object``: The options used for sending. - * ``from`` - ``String``: The address the transaction should be sent from. - * ``gasPrice`` - ``String`` (optional): The gas price in wei to use for this transaction. - * ``gas`` - ``Number`` (optional): The maximum gas provided for this transaction (gas limit). - * ``value`` - ``Number|String|BN|BigNumber``(optional): The value transferred for the transaction in wei. -2. ``callback`` - ``Function`` (optional): This callback will be fired first with the "transactionHash", or with an error object as the first argument. - -------- -Returns -------- - -The **callback** will return the 32 bytes transaction hash. - -``PromiEvent``: A :ref:`promise combined event emitter `. Resolves when the transaction *receipt* is available, OR if this ``send()`` is called from a ``someContract.deploy()``, then the promise will resolve with the *new contract instance*. Additionally the following events are available: - -- ``sending`` returns ``payload: Object``: Fired immediately before transmitting the transaction request. -- ``sent`` returns ``payload: Object``: Fired immediately after the request body has been written to the client, but before the transaction hash is received. -- ``"transactionHash"`` returns ``transactionHash: String``: Fired when the transaction hash is available. -- ``"receipt"`` returns ``receipt: Object``: Fired when the transaction *receipt* is available. Receipts from contracts will have no ``logs`` property, but instead an ``events`` property with event names as keys and events as properties. See :ref:`getPastEvents return values ` for details about the returned event object. -- ``"confirmation"`` returns ``confirmation: Number``, ``receipt: Object``, ``latestBlockHash: String``: Fired for every confirmation up to the 24th confirmation. -- ``"error"`` returns ``error: Error``: Fired if an error occurs during sending. If the transaction was rejected by the network with a receipt, the receipt will be available as a property on the error object. - - -------- -Example -------- - -.. code-block:: javascript - - // using the callback - myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}, function(error, transactionHash){ - ... - }); - - // using the promise - myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}) - .then(function(receipt){ - // receipt can also be a new contract instance, when coming from a "contract.deploy({...}).send()" - }); - - - // using the event emitter - myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}) - .on('transactionHash', function(hash){ - ... - }) - .on('confirmation', function(confirmationNumber, receipt){ - ... - }) - .on('receipt', function(receipt){ - // receipt example - console.log(receipt); - > { - "transactionHash": "0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b", - "transactionIndex": 0, - "blockHash": "0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46", - "blockNumber": 3, - "contractAddress": "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", - "cumulativeGasUsed": 314159, - "gasUsed": 30234, - "events": { - "MyEvent": { - returnValues: { - myIndexedParam: 20, - myOtherIndexedParam: '0x123456789...', - myNonIndexParam: 'My String' - }, - raw: { - data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385'] - }, - event: 'MyEvent', - signature: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - logIndex: 0, - transactionIndex: 0, - transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - blockNumber: 1234, - address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' - }, - "MyOtherEvent": { - ... - }, - "MyMultipleEvent":[{...}, {...}] // If there are multiple of the same event, they will be in an array - } - } - }) - .on('error', function(error, receipt) { // If the transaction was rejected by the network with a receipt, the second parameter will be the receipt. - ... - }); - ------------------------------------------------------------------------------- - - -.. _contract-estimateGas: - -methods.myMethod.estimateGas -===================== - -.. code-block:: javascript - - myContract.methods.myMethod([param1[, param2[, ...]]]).estimateGas(options[, callback]) - -Will call to estimate the gas a method execution will take when executed in the EVM. -The estimation can differ from the actual gas used when later sending a transaction, as the state of the smart contract can be different at that time. -Note: You must specify a ``from`` address otherwise you may experience odd behavior. - ----------- -Parameters ----------- - -1. ``options`` - ``Object`` (optional): The options used for calling. - * ``from`` - ``String`` (optional): The address the call "transaction" should be made from. - * ``gas`` - ``Number`` (optional): The maximum gas provided for this call "transaction" (gas limit). Setting a specific value helps to detect out of gas errors. If all gas is used it will return the same number. - * ``value`` - ``Number|String|BN|BigNumber`` (optional): The value transferred for the call "transaction" in wei. -2. ``callback`` - ``Function`` (optional): This callback will be fired with the result of the gas estimation as the second argument, or with an error object as the first argument. - -------- -Returns -------- - -``Promise`` returns ``Number``: The gas amount estimated. - -------- -Example -------- - -.. code-block:: javascript - - // using the callback - myContract.methods.myMethod(123).estimateGas({gas: 5000000}, function(error, gasAmount){ - if(gasAmount == 5000000) - console.log('Method ran out of gas'); - }); - - // using the promise - myContract.methods.myMethod(123).estimateGas({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}) - .then(function(gasAmount){ - ... - }) - .catch(function(error){ - ... - }); - - ------------------------------------------------------------------------------- - - -.. _contract-encodeABI: - -methods.myMethod.encodeABI -===================== - -.. code-block:: javascript - - myContract.methods.myMethod([param1[, param2[, ...]]]).encodeABI() - -Encodes the ABI for this method. The resulting hex string is 32-bit function signature hash plus the passed parameters in Solidity tightly packed format. This can be used to send a transaction, call a method, or pass it into another smart contract's method as arguments. Set the `data` field on `web3.eth.sendTransaction` options as the `encodeABI()` result and it is the same as calling the contract method with `contract.myMethod.send()`. - -Some use cases for `encodeABI()` include: preparing a smart contract transaction for a multisignature wallet, working with offline wallets and cold storage and creating transaction payload for complex smart contract proxy calls. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``String``: The encoded ABI byte code to send via a transaction or call. - -------- -Example -------- - -.. code-block:: javascript - - myContract.methods.myMethod(123).encodeABI(); - > '0x58cf5f1000000000000000000000000000000000000000000000000000000000000007B' - - ------------------------------------------------------------------------------- - - -= Events = -========= - - ------------------------------------------------------------------------------- - - -once -===================== - -.. code-block:: javascript - - myContract.once(event[, options], callback) - -Subscribes to an event and unsubscribes immediately after the first event or error. Will only fire for a single event. - ----------- -Parameters ----------- - -1. ``event`` - ``String``: The name of the event in the contract, or ``"allEvents"`` to get all events. -2. ``options`` - ``Object`` (optional): The options used for deployment. - * ``filter`` - ``Object`` (optional): Lets you filter events by indexed parameters, e.g. ``{filter: {myNumber: [12,13]}}`` means all events where "myNumber" is 12 or 13. - * ``topics`` - ``Array`` (optional): This allows you to manually set the topics for the event filter. If given the filter property and event signature, (topic[0]) will not be set automatically. Each topic can also be a nested array of topics that behaves as “or” operation between the given nested topics. -3. ``callback`` - ``Function``: This callback will be fired for the first *event* as the second argument, or an error as the first argument. See :ref:`getPastEvents return values ` for details about the event structure. - -------- -Returns -------- - -``undefined`` - -------- -Example -------- - -.. code-block:: javascript - - myContract.once('MyEvent', { - filter: {myIndexedParam: [20,23], myOtherIndexedParam: '0x123456789...'}, // Using an array means OR: e.g. 20 or 23 - fromBlock: 0 - }, function(error, event){ console.log(event); }); - - // event output example - > { - returnValues: { - myIndexedParam: 20, - myOtherIndexedParam: '0x123456789...', - myNonIndexParam: 'My String' - }, - raw: { - data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385'] - }, - event: 'MyEvent', - signature: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - logIndex: 0, - transactionIndex: 0, - transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - blockNumber: 1234, - address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' - } - - ------------------------------------------------------------------------------- - -.. _contract-events: - -events -===================== - -.. code-block:: javascript - - myContract.events.MyEvent([options][, callback]) - -Subscribe to an event. - ----------- -Parameters ----------- - -1. ``options`` - ``Object`` (optional): The options used for deployment. - * ``filter`` - ``Object`` (optional): Let you filter events by indexed parameters, e.g. ``{filter: {myNumber: [12,13]}}`` means all events where "myNumber" is 12 or 13. - * ``fromBlock`` - ``Number|String|BN|BigNumber`` (optional): The block number (greater than or equal to) from which to get events on. Pre-defined block numbers as ``"earliest"``, ``"latest"`` and ``"pending"`` can also be used. For specific range use :ref:`getPastEvents `. - * ``topics`` - ``Array`` (optional): This allows to manually set the topics for the event filter. If given the filter property and event signature, (topic[0]) will not be set automatically. Each topic can also be a nested array of topics that behaves as “or” operation between the given nested topics. -2. ``callback`` - ``Function`` (optional): This callback will be fired for each *event* as the second argument, or an error as the first argument. - -.. _contract-events-return: - -------- -Returns -------- - -``EventEmitter``: The event emitter has the following events: - -- ``"data"`` returns ``Object``: Fires on each incoming event with the event object as argument. -- ``"changed"`` returns ``Object``: Fires on each event which was removed from the blockchain. The event will have the additional property ``"removed: true"``. -- ``"error"`` returns ``Object``: Fires when an error in the subscription occours. -- ``"connected"`` returns ``String``: Fires once after the subscription successfully connected. Returns the subscription id. - - -The structure of the returned event ``Object`` looks as follows: - -- ``event`` - ``String``: The event name. -- ``signature`` - ``String|Null``: The event signature, ``null`` if it's an anonymous event. -- ``address`` - ``String``: Address this event originated from. -- ``returnValues`` - ``Object``: The return values coming from the event, e.g. ``{myVar: 1, myVar2: '0x234...'}``. -- ``logIndex`` - ``Number``: Integer of the event index position in the block. -- ``transactionIndex`` - ``Number``: Integer of the transaction's index position the event was created in. -- ``transactionHash`` 32 Bytes - ``String``: Hash of the transaction this event was created in. -- ``blockHash`` 32 Bytes - ``String``: Hash of the block this event was created in. ``null`` when it's still pending. -- ``blockNumber`` - ``Number``: The block number this log was created in. ``null`` when still pending. -- ``raw.data`` - ``String``: The data containing non-indexed log parameter. -- ``raw.topics`` - ``Array``: An array with max 4 32 Byte topics, topic 1-3 contains indexed parameters of the event. - -------- -Example -------- - -.. code-block:: javascript - - myContract.events.MyEvent({ - filter: {myIndexedParam: [20,23], myOtherIndexedParam: '0x123456789...'}, // Using an array means OR: e.g. 20 or 23 - fromBlock: 0 - }, function(error, event){ console.log(event); }) - .on("connected", function(subscriptionId){ - console.log(subscriptionId); - }) - .on('data', function(event){ - console.log(event); // same results as the optional callback above - }) - .on('changed', function(event){ - // remove event from local database - }) - .on('error', function(error, receipt) { // If the transaction was rejected by the network with a receipt, the second parameter will be the receipt. - ... - }); - - // event output example - > { - returnValues: { - myIndexedParam: 20, - myOtherIndexedParam: '0x123456789...', - myNonIndexParam: 'My String' - }, - raw: { - data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385'] - }, - event: 'MyEvent', - signature: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - logIndex: 0, - transactionIndex: 0, - transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - blockNumber: 1234, - address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' - } - - ------------------------------------------------------------------------------- - -events.allEvents -===================== - -.. code-block:: javascript - - myContract.events.allEvents([options][, callback]) - -Same as :ref:`events ` but receives all events from this smart contract. -Optionally the filter property can filter those events. - - ------------------------------------------------------------------------------- - - -getPastEvents -===================== - -.. code-block:: javascript - - myContract.getPastEvents(event[, options][, callback]) - -Gets past events for this contract. - ----------- -Parameters ----------- - -1. ``event`` - ``String``: The name of the event in the contract, or ``"allEvents"`` to get all events. -2. ``options`` - ``Object`` (optional): The options used for deployment. - * ``filter`` - ``Object`` (optional): Lets you filter events by indexed parameters, e.g. ``{filter: {myNumber: [12,13]}}`` means all events where "myNumber" is 12 or 13. - * ``fromBlock`` - ``Number|String|BN|BigNumber`` (optional): The block number (greater than or equal to) from which to get events on. Pre-defined block numbers as ``"earliest"``, ``"latest"`` and ``"pending"`` can also be used. - * ``toBlock`` - ``Number|String|BN|BigNumber`` (optional): The block number (less than or equal to) to get events up to (Defaults to ``"latest"``). Pre-defined block numbers as ``"earliest"``, ``"latest"`` and ``"pending"`` can also be used. - * ``topics`` - ``Array`` (optional): This allows manually setting the topics for the event filter. If given the filter property and event signature, (topic[0]) will not be set automatically. Each topic can also be a nested array of topics that behaves as “or” operation between the given nested topics. -3. ``callback`` - ``Function`` (optional): This callback will be fired with an array of event logs as the second argument, or an error as the first argument. - - -------- -Returns -------- - -``Promise`` returns ``Array``: An array with the past event ``Objects``, matching the given event name and filter. - -For the structure of a returned event ``Object`` see :ref:`getPastEvents return values `. - -------- -Example -------- - -.. code-block:: javascript - - myContract.getPastEvents('MyEvent', { - filter: {myIndexedParam: [20,23], myOtherIndexedParam: '0x123456789...'}, // Using an array means OR: e.g. 20 or 23 - fromBlock: 0, - toBlock: 'latest' - }, function(error, events){ console.log(events); }) - .then(function(events){ - console.log(events) // same results as the optional callback above - }); - - > [{ - returnValues: { - myIndexedParam: 20, - myOtherIndexedParam: '0x123456789...', - myNonIndexParam: 'My String' - }, - raw: { - data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385'] - }, - event: 'MyEvent', - signature: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - logIndex: 0, - transactionIndex: 0, - transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - blockNumber: 1234, - address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' - },{ - ... - }] diff --git a/docs/web3-eth-ens.rst b/docs/web3-eth-ens.rst deleted file mode 100644 index 6fc04caaa4d..00000000000 --- a/docs/web3-eth-ens.rst +++ /dev/null @@ -1,1319 +0,0 @@ -.. _eth-ens: - -============ -web3.eth.ens -============ - -The ``web3.eth.ens`` functions let you interact with ENS. -We recommend reading the `ENS documentation `_ to get deeper insights about the internals of the name service. - ------------------------------------------------------------------------------- - -registryAddress -===================== - -.. code-block:: javascript - - web3.eth.ens.registryAddress; - -The ``registryAddress`` property can be used to define a custom registry address when you are connected to an unknown chain. - -.. note:: - If no address is defined will it try to detect the registry on the chain you are currently connected with and on the call of ``setProvider`` in the Eth module will it keep the defined address and use it for the ENS module. - -------- -Returns -------- - -``String`` - The address of the custom registry. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.registryAddress; - > "0x314159265dD8dbb310642f98f50C066173C1259b" - ------------------------------------------------------------------------------- - -registry -======== - -.. code-block:: javascript - - web3.eth.ens.registry; - -Returns the network specific ENS registry. - -------- -Returns -------- - -``Registry`` - The current ENS registry. - -- ``contract: Contract`` - The ``Registry`` contract with the interface we know from the :ref:`Contract ` object. -- ``owner(name, callback): Promise`` - Deprecated please use ``getOwner`` -- ``getOwner(name, callback): Promise`` -- ``setOwner(name, address, txConfig, callback): PromiEvent`` -- ``resolver(name, callback): Promise`` - Deprecated please use ``getResolver`` -- ``getResolver(name, callback): Promise`` -- ``setResolver(name, address, txConfig, callback): PromiEvent`` -- ``getTTL(name, callback): Promise`` -- ``setTTL(name, ttl, txConfig, callback): PromiEvent`` -- ``setSubnodeOwner(name, label, address, txConfig, callback): PromiEvent`` -- ``setRecord(name, owner, resolver, ttl, txConfig, callback): PromiEvent`` -- ``setSubnodeRecord(name, label, owner, resolver, ttl, txConfig, callback): PromiEvent`` -- ``setApprovalForAll(operator, approved, txConfig, callback): PromiEvent`` -- ``isApprovedForAll(owner, operator, callback): Promise`` -- ``recordExists(name, callback): Promise`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.registry; - > { - contract: Contract, - owner: Function(name, callback), // Deprecated - getOwner: Function(name, callback), - setOwner: Function(name, address, txConfig, callback), - resolver: Function(name, callback), // Deprecated - getResolver: Function(name, callback), - setResolver: Function(name, address, txConfig, callback), - getTTL: Function(name, callback), - setTTL: Function(name, ttl, txConfig, callback), - setSubnodeOwner: Function(name, label, address, txConfig, callback), - setRecord(name, owner, resolver, ttl, txConfig, callback), - setSubnodeRecord(name, label, owner, resolver, ttl, txConfig, callback), - setApprovalForAll(operator, approved, txConfig, callback), - isApprovedForAll(owner, operator, txConfig, callback), - recordExists(name, callback) - } - ------------------------------------------------------------------------------- - -resolver -======== - -.. code-block:: javascript - - web3.eth.ens.resolver(name [, callback]); - -Returns the resolver contract to an Ethereum address. - -.. note:: - This method is deprecated please use ``getResolver`` - ----------- -Parameters ----------- - -1. ``name`` - ``String``: The ENS name. -2. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``Promise`` - The ENS resolver for this name. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.resolver('ethereum.eth').then(function (contract) { - console.log(contract); - }); - > Contract - ------------------------------------------------------------------------------- - -getResolver -=========== - -.. code-block:: javascript - - web3.eth.ens.getResolver(name [, callback]); - -Returns the resolver contract to an Ethereum address. - ----------- -Parameters ----------- - -1. ``name`` - ``String``: The ENS name. -2. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``Promise`` - The ENS resolver for this name. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.getResolver('ethereum.eth').then(function (contract) { - console.log(contract); - }); - > Contract - ------------------------------------------------------------------------------- - -setResolver -=========== - -.. code-block:: javascript - - web3.eth.ens.setResolver(name, address [, txConfig ] [, callback]); - -Sets the resolver contract address of a name. - ----------- -Parameters ----------- - -1. ``name`` - ``String``: The ENS name. -2. ``address`` - ``String``: The contract address of the deployed ``Resolver`` contract. -3. ``txConfig`` - ``Object``: (optional) The transaction options as described :ref:`here ` -4. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``PromiEvent`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.setResolver('ethereum.eth', '0x...', {...}).then(function (receipt) { - console.log(receipt); - }); - > {...} - ------------------------------------------------------------------------------- - -getOwner -======== - -.. code-block:: javascript - - web3.eth.ens.getOwner(name [, callback]); - -Returns the owner of a name. - ----------- -Parameters ----------- - -1. ``name`` - ``String``: The ENS name. -2. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -`Promise`` - The address of the registrar (EOA or CA). - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.getOwner('ethereum.eth').then(function (owner) { - console.log(owner); - }); - > '0x...' - - ------------------------------------------------------------------------------- - -setOwner -======== - -.. code-block:: javascript - - web3.eth.ens.setOwner(name [, txConfig ] [, callback]); - -Sets the owner of the given name. - ----------- -Parameters ----------- - -1. ``name`` - ``String``: The ENS name. -2. ``txConfig`` - ``Object``: (optional) The transaction options as described :ref:`here ` -3. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``PromiEvent`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.setOwner('ethereum.eth', {...}).then(function (receipt) { - console.log(receipt); - }); - > {...} - ------------------------------------------------------------------------------- - -getTTL -====== - -.. code-block:: javascript - - web3.eth.ens.getTTL(name [, callback]); - -Returns the caching TTL (time-to-live) of a name. - ----------- -Parameters ----------- - -1. ``name`` - ``String``: The ENS name. -2. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``Promise`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.getTTL('ethereum.eth').then(function (ttl) { - console.log(ttl); - }); - > 100000 - ------------------------------------------------------------------------------- - -setTTL -====== - -.. code-block:: javascript - - web3.eth.ens.setTTL(name, ttl [, txConfig ] [, callback]); - -Sets the caching TTL (time-to-live) of a name. - ----------- -Parameters ----------- - -1. ``name`` - ``String``: The ENS name. -2. ``ttl`` - ``Number``: The TTL value (uint64) -3. ``txConfig`` - ``Object``: (optional) The transaction options as described :ref:`here ` -4. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``PromiEvent`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.setTTL('ethereum.eth', 10000, {...}).then(function (receipt) { - console.log(receipt); - }); - > {...} - ------------------------------------------------------------------------------- - -setSubnodeOwner -=============== - -.. code-block:: javascript - - web3.eth.ens.setSubnodeOwner(name, label, address [, txConfig ] [, callback]); - -Creates a new subdomain of the given node, assigning ownership of it to the specified owner. - ----------- -Parameters ----------- - -1. ``name`` - ``String``: The ENS name. -2. ``label`` - ``String``: The name of the sub-domain or the sha3 hash of it. -3. ``address`` - ``String``: The registrar of this sub-domain. -4. ``txConfig`` - ``Object``: (optional) The transaction options as described :ref:`here `. -5. ``callback`` - ``Function``: (optional) Optional callback. - -------- -Returns -------- - -``PromiEvent`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.setSubnodeOwner('ethereum.eth', 'web3', '0x...', {...}).then(function (receipt) { - console.log(receipt); // successfully defined the owner of web3.ethereum.eth - }); - > {...} - ------------------------------------------------------------------------------- - -setRecord -========= - -.. code-block:: javascript - - web3.eth.ens.setRecord(name, owner, resolver, ttl, [, txConfig ] [, callback]); - -Sets the owner, resolver, and TTL for an ENS record in a single operation. - ----------- -Parameters ----------- - -1. ``name`` - ``String``: The ENS name. -2. ``owner`` - ``String``: The owner of the name record. -3. ``resolver`` - ``String``: The resolver address of the name record. -4. ``ttl`` - ``String | Number``: Time to live value (uint64). -5. ``txConfig`` - ``Object``: (optional) The transaction options as described :ref:`here `. -6. ``callback`` - ``Function``: (optional) Optional callback. - -------- -Returns -------- - -``PromiEvent`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.setRecord('ethereum.eth', '0x...', '0x...', 1000000, {...}).then(function (receipt) { - console.log(receipt); // successfully registered ethereum.eth - }); - > {...} - ------------------------------------------------------------------------------- - -setSubnodeRecord -================ - -.. code-block:: javascript - - web3.eth.ens.setSubnodeRecord(name, label, owner, resolver, ttl, [, txConfig ] [, callback]); - -Sets the owner, resolver and TTL for a subdomain, creating it if necessary. - ----------- -Parameters ----------- - -1. ``name`` - ``String``: The ENS name. -2. ``label`` - ``String``: The name of the sub-domain or the sha3 hash of it. -3. ``owner`` - ``String``: The owner of the name record. -4. ``resolver`` - ``String``: The resolver address of the name record. -5. ``ttl`` - ``String | Number``: Time to live value (uint64). -6. ``txConfig`` - ``Object``: (optional) The transaction options as described :ref:`here `. -7. ``callback`` - ``Function``: (optional) Optional callback. - -------- -Returns -------- - -``PromiEvent`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.setSubnodeRecord('ethereum.eth', 'web3', '0x...', '0x...', 1000000, {...}).then(function (receipt) { - console.log(receipt); // successfully registered web3.ethereum.eth - }); - > {...} - ------------------------------------------------------------------------------- - -setApprovalForAll -================= - -.. code-block:: javascript - - web3.eth.ens.setApprovalForAll(operator, approved, [, txConfig ] [, callback]); - -Sets or clears an approval. Approved accounts can execute all ENS registry operations on behalf of the caller. - ----------- -Parameters ----------- - -1. ``operator`` - ``String``: The operator address -2. ``approved`` - ``Boolean`` -3. ``txConfig`` - ``Object``: (optional) The transaction options as described :ref:`here ` -4. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``PromiEvent`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.setApprovalForAll('0x...', true, {...}).then(function (receipt) { - console.log(receipt); - }); - > {...} - ------------------------------------------------------------------------------- - -isApprovedForAll -================ - -.. code-block:: javascript - - web3.eth.ens.isApprovedForAll(owner, operator [, callback]); - -Returns ``true`` if the operator is approved to make ENS registry operations on behalf of the owner. - ----------- -Parameters ----------- - -1. ``owner`` - ``String``: The owner address. -2. ``operator`` - ``String``: The operator address. -3. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``Promise`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.isApprovedForAll('0x0...', '0x0...').then(function (isApproved) { - console.log(isApproved); - }) - > true - ------------------------------------------------------------------------------- - -recordExists -============ - -.. code-block:: javascript - - web3.eth.ens.recordExists(name [, callback]); - -Returns ``true`` if node exists in this ENS registry. -This will return ``false`` for records that are in the legacy ENS registry but have not yet been migrated to the new one. - ----------- -Parameters ----------- - -1. ``name`` - ``String``: The ENS name. -2. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``Promise`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.recordExists('0x0...', '0x0...').then(function (isExisting) { - console.log(isExisting); - }) - > true - ------------------------------------------------------------------------------- - -getAddress -===================== - -.. code-block:: javascript - - web3.eth.ens.getAddress(ENSName [, callback]); - -Resolves an ENS name to an Ethereum address. - ----------- -Parameters ----------- - -1. ``ENSName`` - ``String``: The ENS name to resolve. -2. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``String`` - The Ethereum address of the given name. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.getAddress('ethereum.eth').then(function (address) { - console.log(address); - }) - > 0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359 - ------------------------------------------------------------------------------- - -setAddress -===================== - -.. code-block:: javascript - - web3.eth.ens.setAddress(ENSName, address [, txConfig ] [, callback]); - -Sets the address of an ENS name in this resolver. - ----------- -Parameters ----------- - -1. ``ENSName`` - ``String``: The ENS name. -2. ``address`` - ``String``: The address to set. -3. ``txConfig`` - ``Object``: (optional) The transaction options as described :ref:`here ` -4. ``callback`` - ``Function``: (optional) Optional callback - -Emits an ``AddrChanged`` event. - -------- -Returns -------- - -``PromiEvent`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.setAddress( - 'ethereum.eth', - '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359', - { - from: '0x9CC9a2c777605Af16872E0997b3Aeb91d96D5D8c' - } - ).then(function (result) { - console.log(result.events); - }); - > AddrChanged(...) - - // Or using the event emitter - - web3.eth.ens.setAddress( - 'ethereum.eth', - '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359', - { - from: '0x9CC9a2c777605Af16872E0997b3Aeb91d96D5D8c' - } - ) - .on('transactionHash', function(hash){ - ... - }) - .on('confirmation', function(confirmationNumber, receipt){ - ... - }) - .on('receipt', function(receipt){ - ... - }) - .on('error', console.error); - - // Or listen to the AddrChanged event on the resolver - - web3.eth.ens.resolver('ethereum.eth').then(function (resolver) { - resolver.events.AddrChanged({fromBlock: 0}, function(error, event) { - console.log(event); - }) - .on('data', function(event){ - console.log(event); - }) - .on('changed', function(event){ - // remove event from local database - }) - .on('error', console.error); - }); - - -For further information on the handling of contract events please see :ref:`here `. - ------------------------------------------------------------------------------- - -getPubkey -===================== - -.. code-block:: javascript - - web3.eth.ens.getPubkey(ENSName [, callback]); - -Returns the X and Y coordinates of the curve point for the public key. - ----------- -Parameters ----------- - -1. ``ENSName`` - ``String``: The ENS name. -2. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``Promise>`` - The X and Y coordinates. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.getPubkey('ethereum.eth').then(function (result) { - console.log(result) - }); - > { - "0": "0x0000000000000000000000000000000000000000000000000000000000000000", - "1": "0x0000000000000000000000000000000000000000000000000000000000000000", - "x": "0x0000000000000000000000000000000000000000000000000000000000000000", - "y": "0x0000000000000000000000000000000000000000000000000000000000000000" - } - ------------------------------------------------------------------------------- - -setPubkey -===================== - -.. code-block:: javascript - - web3.eth.ens.setPubkey(ENSName, x, y [, txConfig ] [, callback]); - -Sets the SECP256k1 public key associated with an ENS node. - ----------- -Parameters ----------- - -1. ``ENSName`` - ``String``: The ENS name. -2. ``x`` - ``String``: The X coordinate of the public key. -3. ``y`` - ``String``: The Y coordinate of the public key. -4. ``txConfig`` - ``Object``: (optional) The transaction options as described :ref:`here ` -5. ``callback`` - ``Function``: (optional) Optional callback - -Emits an ``PubkeyChanged`` event. - -------- -Returns -------- - -``PromiEvent`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.setPubkey( - 'ethereum.eth', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - { - from: '0x9CC9a2c777605Af16872E0997b3Aeb91d96D5D8c' - } - ).then(function (result) { - console.log(result.events); - }); - > PubkeyChanged(...) - - // Or using the event emitter - - web3.eth.ens.setPubkey( - 'ethereum.eth', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - { - from: '0x9CC9a2c777605Af16872E0997b3Aeb91d96D5D8c' - } - ) - .on('transactionHash', function(hash){ - ... - }) - .on('confirmation', function(confirmationNumber, receipt){ - ... - }) - .on('receipt', function(receipt){ - ... - }) - .on('error', console.error); - - // Or listen to the PubkeyChanged event on the resolver - - web3.eth.ens.resolver('ethereum.eth').then(function (resolver) { - resolver.events.PubkeyChanged({fromBlock: 0}, function(error, event) { - console.log(event); - }) - .on('data', function(event){ - console.log(event); - }) - .on('changed', function(event){ - // remove event from local database - }) - .on('error', console.error); - }); - - -For further information on the handling of contract events please see :ref:`here `. - ------------------------------------------------------------------------------- - -getContent -===================== - -.. code-block:: javascript - - web3.eth.ens.getContent(ENSName [, callback]); - -Returns the content hash associated with an ENS node. - ----------- -Parameters ----------- - -1. ``ENSName`` - ``String``: The ENS name. -2. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``Promise`` - The content hash associated with an ENS node. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.getContent('ethereum.eth').then(function (result) { - console.log(result); - }); - > "0x0000000000000000000000000000000000000000000000000000000000000000" - ------------------------------------------------------------------------------- - -setContent -===================== - -.. code-block:: javascript - - web3.eth.ens.setContent(ENSName, hash [, txConfig ] [, callback]); - -Sets the content hash associated with an ENS node. - ----------- -Parameters ----------- - -1. ``ENSName`` - ``String``: The ENS name. -2. ``hash`` - ``String``: The content hash to set. -3. ``txConfig`` - ``Object``: (optional) The transaction options as described :ref:`here ` -4. ``callback`` - ``Function``: (optional) Optional callback - -Emits an ``ContentChanged`` event. - -------- -Returns -------- - -``PromiEvent`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.setContent( - 'ethereum.eth', - '0x0000000000000000000000000000000000000000000000000000000000000000', - { - from: '0x9CC9a2c777605Af16872E0997b3Aeb91d96D5D8c' - } - ).then(function (result) { - console.log(result.events); - }); - > ContentChanged(...) - - // Or using the event emitter - - web3.eth.ens.setContent( - 'ethereum.eth', - '0x0000000000000000000000000000000000000000000000000000000000000000', - { - from: '0x9CC9a2c777605Af16872E0997b3Aeb91d96D5D8c' - } - ) - .on('transactionHash', function(hash){ - ... - }) - .on('confirmation', function(confirmationNumber, receipt){ - ... - }) - .on('receipt', function(receipt){ - ... - }) - .on('error', console.error); - - // Or listen to the ContentChanged event on the resolver - - web3.eth.ens.resolver('ethereum.eth').then(function (resolver) { - resolver.events.ContentChanged({fromBlock: 0}, function(error, event) { - console.log(event); - }) - .on('data', function(event){ - console.log(event); - }) - .on('changed', function(event){ - // remove event from local database - }) - .on('error', console.error); - }); - - -For further information on the handling of contract events please see :ref:`here `. - ------------------------------------------------------------------------------- - -getContenthash -===================== - -.. code-block:: javascript - - web3.eth.ens.getContenthash(ENSName [, callback]); - -Returns the content hash object associated with an ENS node. - ----------- -Parameters ----------- - -1. ``ENSName`` - ``String``: The ENS name. -2. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``Promise`` - The content hash object associated with an ENS node. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.getContenthash('ethereum.eth').then(function (result) { - console.log(result); - }); - > { - "protocolType": "ipfs", - "decoded": "QmaEBknbGT4bTQiQoe2VNgBJbRfygQGktnaW5TbuKixjYL" - } - ------------------------------------------------------------------------------- - -setContenthash -===================== - -.. code-block:: javascript - - web3.eth.ens.setContenthash(ENSName, hash [, txConfig ] [, callback]); - -Sets the content hash associated with an ENS node. - ----------- -Parameters ----------- - -1. ``ENSName`` - ``String``: The ENS name. -2. ``hash`` - ``String``: The content hash to set. -3. ``txConfig`` - ``Object``: (optional) The transaction options as described :ref:`here ` -4. ``callback`` - ``Function``: (optional) Optional callback - -Emits a ``ContenthashChanged`` event. - -Supports the following protocols as valid ``hash`` inputs: - -1. ``ipfs://`` - ipfs://QmaEBknbGT4bTQiQoe2VNgBJbRfygQGktnaW5TbuKixjYL -2. ``/ipfs/`` - /ipfs/QmaEBknbGT4bTQiQoe2VNgBJbRfygQGktnaW5TbuKixjYL -3. ``bzz://`` - bzz://d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162 -4. ``onion://`` - onion://3g2upl4pq6kufc4m -5. ``onion3://`` - onion3://p53lf57qovyuvwsc6xnrppyply3vtqm7l6pcobkmyqsiofyeznfu5uqd - -------- -Returns -------- - -``PromiEvent`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.setContenthash( - 'ethereum.eth', - 'ipfs://QmaEBknbGT4bTQiQoe2VNgBJbRfygQGktnaW5TbuKixjYL', - { - from: '0x9CC9a2c777605Af16872E0997b3Aeb91d96D5D8c' - } - ).then(function (result) { - console.log(result.events); - }); - > ContenthashChanged(...) - - // Or using the event emitter - - web3.eth.ens.setContenthash( - 'ethereum.eth', - 'ipfs://QmaEBknbGT4bTQiQoe2VNgBJbRfygQGktnaW5TbuKixjYL', - { - from: '0x9CC9a2c777605Af16872E0997b3Aeb91d96D5D8c' - } - ) - .on('transactionHash', function(hash){ - ... - }) - .on('confirmation', function(confirmationNumber, receipt){ - ... - }) - .on('receipt', function(receipt){ - ... - }) - .on('error', console.error); - - // Or listen to the ContenthashChanged event on the resolver - - web3.eth.ens.resolver('ethereum.eth').then(function (resolver) { - resolver.events.ContenthashChanged({fromBlock: 0}, function(error, event) { - console.log(event); - }) - .on('data', function(event){ - console.log(event); - }) - .on('changed', function(event){ - // remove event from local database - }) - .on('error', console.error); - }); - - -For further information on the handling of contract events please see :ref:`here `. - - -getMultihash -===================== - -.. code-block:: javascript - - web3.eth.ens.getMultihash(ENSName [, callback]); - -Returns the multihash associated with an ENS node. - ----------- -Parameters ----------- - -1. ``ENSName`` - ``String``: The ENS name. -2. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``Promise`` - The associated multihash. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.getMultihash('ethereum.eth').then(function (result) { - console.log(result); - }); - > 'QmXpSwxdmgWaYrgMUzuDWCnjsZo5RxphE3oW7VhTMSCoKK' - ------------------------------------------------------------------------------- - -supportsInterface -================= - -.. code-block:: javascript - - web3.eth.ens.supportsInterface(name, interfaceId [, callback]); - -Returns ``true`` if the related ``Resolver`` does support the given signature or interfaceId. - ----------- -Parameters ----------- - -1. ``name`` - ``String``: The ENS name. -2. ``interfaceId`` - ``String``: The signature of the function or the interfaceId as described in the ENS documentation -3. ``callback`` - ``Function``: (optional) Optional callback - -------- -Returns -------- - -``Promise`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.supportsInterface('ethereum.eth', 'addr(bytes32').then(function (result) { - console.log(result); - }); - > true - ------------------------------------------------------------------------------- - -setMultihash -===================== - -.. code-block:: javascript - - web3.eth.ens.setMultihash(ENSName, hash [, txConfig ] [, callback]); - -Sets the multihash associated with an ENS node. - ----------- -Parameters ----------- - -1. ``ENSName`` - ``String``: The ENS name. -2. ``hash`` - ``String``: The multihash to set. -3. ``txConfig`` - ``Object``: (optional) The transaction options as described :ref:`here ` -4. ``callback`` - ``Function``: (optional) Optional callback - -Emits an ``MultihashChanged``event. - -------- -Returns -------- - -``PromiEvent`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.setMultihash( - 'ethereum.eth', - 'QmXpSwxdmgWaYrgMUzuDWCnjsZo5RxphE3oW7VhTMSCoKK', - { - from: '0x9CC9a2c777605Af16872E0997b3Aeb91d96D5D8c' - } - ).then(function (result) { - console.log(result.events); - }); - > MultihashChanged(...) - - // Or using the event emitter - - web3.eth.ens.setMultihash( - 'ethereum.eth', - 'QmXpSwxdmgWaYrgMUzuDWCnjsZo5RxphE3oW7VhTMSCoKK', - { - from: '0x9CC9a2c777605Af16872E0997b3Aeb91d96D5D8c' - } - ) - .on('transactionHash', function(hash){ - ... - }) - .on('confirmation', function(confirmationNumber, receipt){ - ... - }) - .on('receipt', function(receipt){ - ... - }) - .on('error', console.error); - - -For further information on the handling of contract events please see :ref:`here `. - ------------------------------------------------------------------------------- - -ENS events -===================== - -The ENS API provides the possibility for listening to all ENS related events. - ------------- -Known resolver events ------------- - -1. AddrChanged(node bytes32, a address) -1. ContentChanged(node bytes32, hash bytes32) -1. NameChanged(node bytes32, name string) -1. ABIChanged(node bytes32, contentType uint256) -1. PubkeyChanged(node bytes32, x bytes32, y bytes32) - -------- -Returns -------- - -``PromiEvent`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.resolver('ethereum.eth').then(function (resolver) { - resolver.events.AddrChanged({fromBlock: 0}, function(error, event) { - console.log(event); - }) - .on('data', function(event){ - console.log(event); - }) - .on('changed', function(event){ - // remove event from local database - }) - .on('error', console.error); - }); - > { - returnValues: { - node: '0x123456789...', - a: '0x123456789...', - }, - raw: { - data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - topics: [ - '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385' - ] - }, - event: 'AddrChanged', - signature: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - logIndex: 0, - transactionIndex: 0, - transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - blockNumber: 1234, - address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' - } - ------------- -Known registry events ------------- - -1. Transfer(node bytes32, owner address) -1. NewOwner(node bytes32, label bytes32, owner address) -1. NewResolver(node bytes32, resolver address) -1. NewTTL(node bytes32, ttl uint64) - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.ens.resistry.then(function (registry) { - registry.events.Transfer({fromBlock: 0}, , function(error, event) { - console.log(event); - }) - .on('data', function(event){ - console.log(event); - }) - .on('changed', function(event){ - // remove event from local database - }) - .on('error', console.error); - }); - > { - returnValues: { - node: '0x123456789...', - owner: '0x123456789...', - }, - raw: { - data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - topics: [ - '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385' - ] - }, - event: 'Transfer', - signature: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - logIndex: 0, - transactionIndex: 0, - transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - blockNumber: 1234, - address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' - } - - -For further information on the handling of contract events please see :ref:`here `. diff --git a/docs/web3-eth-iban.rst b/docs/web3-eth-iban.rst deleted file mode 100644 index 6ef06e06a3f..00000000000 --- a/docs/web3-eth-iban.rst +++ /dev/null @@ -1,581 +0,0 @@ -.. _eth-iban: - -========= -web3.eth.Iban -========= - -The ``web3.eth.Iban`` function converts Ethereum addresses from and to IBAN and BBAN. - ------------------------------------------------------------------------------- - -Iban instance -===================== - -This instance of Iban. - -.. code-block:: javascript - - > Iban { _iban: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS' } - ------------------------------------------------------------------------------- - -Iban contructor -===================== - -.. code-block:: javascript - - new web3.eth.Iban(ibanAddress) - -Generates a iban object with conversion methods and validity checks. - -Also has singleton functions for conversion like: - -- :ref:`Iban.toAddress() ` -- :ref:`Iban.toIban() ` -- :ref:`Iban.fromAddress() ` -- :ref:`Iban.fromBban() ` -- :ref:`Iban.createIndirect() ` -- :ref:`Iban.isValid() ` - ----------- -Parameters ----------- - -1. ``String``: the IBAN address to instantiate an Iban instance from. - -------- -Returns -------- - -``Object`` - The Iban instance. - -------- -Example -------- - -.. code-block:: javascript - - var iban = new web3.eth.Iban("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"); - > Iban { _iban: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS' } - - ------------------------------------------------------------------------------- - -.. _eth-iban-toaddress: - -toAddress -===================== - -Static function. - -.. code-block:: javascript - - web3.eth.Iban.toAddress(ibanAddress) - -Singleton: Converts a direct IBAN address into an Ethereum address. - -.. note:: This method also exists on the IBAN instance. - ----------- -Parameters ----------- - -1. ``String``: the IBAN address to convert. - -------- -Returns -------- - -``String`` - The Ethereum address. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"); - > "0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8" - - ------------------------------------------------------------------------------- - -.. _eth-iban-toiban: - -toIban -===================== - -Static function. - -.. code-block:: javascript - - web3.eth.Iban.toIban(address) - -Singleton: Converts an Ethereum address to a direct IBAN address. - ----------- -Parameters ----------- - -1. ``String``: the Ethereum address to convert. - -------- -Returns -------- - -``String`` - The IBAN address. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.Iban.toIban("0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8"); - > "XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS" - - ------------------------------------------------------------------------------- - -.. _eth-iban-fromaddress: - -fromAddress -===================== - -Static function, returns IBAN instance. - -.. code-block:: javascript - - web3.eth.Iban.fromAddress(address) - -Singleton: Converts an Ethereum address to a direct IBAN instance. - ----------- -Parameters ----------- - -1. ``String``: the Ethereum address to convert. - -------- -Returns -------- - -``Object`` - The IBAN instance. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.Iban.fromAddress("0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8"); - > Iban {_iban: "XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"} - - ------------------------------------------------------------------------------- - -.. _eth-iban-frombban: - - static function, return IBAN instance - -fromBban -===================== - -.. code-block:: javascript - - web3.eth.Iban.fromBban(bbanAddress) - -Singleton: Converts an BBAN address to a direct IBAN instance. - ----------- -Parameters ----------- - -1. ``String``: the BBAN address to convert. - -------- -Returns -------- - -``Object`` - The IBAN instance. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.Iban.fromBban('ETHXREGGAVOFYORK'); - > Iban {_iban: "XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"} - - ------------------------------------------------------------------------------- - -.. _eth-iban-createindirect: - - static function, return IBAN instance - -createIndirect -===================== - -.. code-block:: javascript - - web3.eth.Iban.createIndirect(options) - -Singleton: Creates an indirect IBAN address from an institution and identifier. - ----------- -Parameters ----------- - -1. ``Object``: the options object as follows: - - ``institution`` - ``String``: the institution to be assigned. - - ``identifier`` - ``String``: the identifier to be assigned. - -------- -Returns -------- - -``Object`` - The IBAN instance. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.Iban.createIndirect({ - institution: "XREG", - identifier: "GAVOFYORK" - }); - > Iban {_iban: "XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"} - - ------------------------------------------------------------------------------- - -.. _eth-iban-isvalid: - -Static function, returns boolean. - -isValid -===================== - -.. code-block:: javascript - - web3.eth.Iban.isValid(ibanAddress) - -Singleton: Checks if an IBAN address is valid. - -.. note:: This method also exists on the IBAN instance. - ----------- -Parameters ----------- - -1. ``String``: the IBAN address to check. - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK"); - > true - - web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK"); - > false // because the checksum is incorrect - - ------------------------------------------------------------------------------- - -prototype.isValid -===================== - -Method of Iban instance. - -.. code-block:: javascript - - web3.eth.Iban.prototype.isValid() - -Singleton: Checks if an IBAN address is valid. - -.. note:: This method also exists on the IBAN instance. - ----------- -Parameters ----------- - -1. ``String``: the IBAN address to check. - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - var iban = new web3.eth.Iban("XE81ETHXREGGAVOFYORK"); - iban.isValid(); - > true - - ------------------------------------------------------------------------------- - -prototype.isDirect -===================== - -Method of Iban instance. - -.. code-block:: javascript - - web3.eth.Iban.prototype.isDirect() - -Checks if the IBAN instance is direct. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - var iban = new web3.eth.Iban("XE81ETHXREGGAVOFYORK"); - iban.isDirect(); - > false - ------------------------------------------------------------------------------- - -prototype.isIndirect -===================== - -Method of Iban instance. - -.. code-block:: javascript - - web3.eth.Iban.prototype.isIndirect() - -Checks if the IBAN instance is indirect. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - var iban = new web3.eth.Iban("XE81ETHXREGGAVOFYORK"); - iban.isIndirect(); - > true - ------------------------------------------------------------------------------- - -prototype.checksum -===================== - -Method of Iban instance. - -.. code-block:: javascript - - web3.eth.Iban.prototype.checksum() - -Returns the checksum of the IBAN instance. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``String``: The checksum of the IBAN - -------- -Example -------- - -.. code-block:: javascript - - var iban = new web3.eth.Iban("XE81ETHXREGGAVOFYORK"); - iban.checksum(); - > "81" - - ------------------------------------------------------------------------------- - -prototype.institution -===================== - -Method of Iban instance. - -.. code-block:: javascript - - web3.eth.Iban.prototype.institution() - -Returns the institution of the IBAN instance. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``String``: The institution of the IBAN - -------- -Example -------- - -.. code-block:: javascript - - var iban = new web3.eth.Iban("XE81ETHXREGGAVOFYORK"); - iban.institution(); - > 'XREG' - - ------------------------------------------------------------------------------- - -prototype.client -===================== - -Method of Iban instance. - -.. code-block:: javascript - - web3.eth.Iban.prototype.client() - -Returns the client of the IBAN instance. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``String``: The client of the IBAN - -------- -Example -------- - -.. code-block:: javascript - - var iban = new web3.eth.Iban("XE81ETHXREGGAVOFYORK"); - iban.client(); - > 'GAVOFYORK' - ------------------------------------------------------------------------------- - -prototype.toAddress -===================== - -Method of Iban instance. - -.. code-block:: javascript - - web3.eth.Iban.prototype.toString() - -Returns the Ethereum address of the IBAN instance. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``String``: The Ethereum address of the IBAN - -------- -Example -------- - -.. code-block:: javascript - - var iban = new web3.eth.Iban('XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'); - iban.toAddress(); - > '0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8' - - ------------------------------------------------------------------------------- - -prototype.toString -===================== - -Method of Iban instance. - -.. code-block:: javascript - - web3.eth.Iban.prototype.toString() - -Returns the IBAN address of the IBAN instance. - ----------- -Parameters ----------- - -none - -------- -Returns -------- - -``String``: The IBAN address. - -------- -Example -------- - -.. code-block:: javascript - - var iban = new web3.eth.Iban('XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'); - iban.toString(); - > 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS' - diff --git a/docs/web3-eth-net.rst b/docs/web3-eth-net.rst deleted file mode 100644 index b32284c04e7..00000000000 --- a/docs/web3-eth-net.rst +++ /dev/null @@ -1,51 +0,0 @@ -.. _eth-net: - -========= -web3.eth.net -========= - - -Contains functions to get information about the current network. - - ------------------------------------------------------------------------------- - - -.. include:: include_package-net.rst - - ------------------------------------------------------------------------------- - -getNetworkType -===================== - -.. code-block:: javascript - - web3.eth.net.getNetworkType([callback]) - -Guesses the chain the node is connected by comparing the genesis hashes. - -.. note:: It's recommended to use the :ref:`web3.eth.getChainId ` method to detect the currently connected chain. - -------- -Returns -------- - -``Promise`` returns ``String``: - - ``"main"`` for main network - - ``"morden"`` for the morden test network - - ``"ropsten"`` for the morden test network - - ``"private"`` for undetectable networks. - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.net.getNetworkType() - .then(console.log); - > "main" - - diff --git a/docs/web3-eth-personal.rst b/docs/web3-eth-personal.rst deleted file mode 100644 index acc91fb9122..00000000000 --- a/docs/web3-eth-personal.rst +++ /dev/null @@ -1,441 +0,0 @@ -.. _eth-personal: - -======== -web3.eth.personal -======== - - -The ``web3-eth-personal`` package allows you to interact with the Ethereum node's accounts. - -.. note:: Many of these functions send sensitive information like passwords. Never call these functions over a unsecured Websocket or HTTP provider, as your password will be sent in plain text! - - -.. code-block:: javascript - - var Personal = require('web3-eth-personal'); - - // "Personal.providers.givenProvider" will be set if in an Ethereum supported browser. - var personal = new Personal(Personal.givenProvider || 'ws://some.local-or-remote.node:8546'); - - - // or using the web3 umbrella package - - var Web3 = require('web3'); - var web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546'); - - // -> web3.eth.personal - - ------------------------------------------------------------------------------- - - -.. include:: include_package-core.rst - - - ------------------------------------------------------------------------------- - - - -newAccount -========= - -.. code-block:: javascript - - web3.eth.personal.newAccount(password, [callback]) - -Creates a new account. - -.. note:: Never call this function over a unsecured Websocket or HTTP provider, as your password will be sent in plain text! - ----------- -Parameters ----------- - -1. ``password`` - ``String``: The password to encrypt this account with. - -------- -Returns -------- - -``Promise`` returns ``String``: The address of the newly created account. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.personal.newAccount('!@superpassword') - .then(console.log); - > '0x1234567891011121314151617181920212223456' - ------------------------------------------------------------------------------- - - -sign -===================== - -.. code-block:: javascript - - web3.eth.personal.sign(dataToSign, address, password [, callback]) - -The sign method calculates an Ethereum specific signature with: - -.. code-block:: javascript - - sign(keccak256("\x19Ethereum Signed Message:\n" + dataToSign.length + dataToSign))) - -Adding a prefix to the message makes the calculated signature recognisable as an Ethereum specific signature. - -If you have the original message and the signed message, you can discover the signing account address -using :ref:`web3.eth.personal.ecRecover `. See example below. - - -.. note:: Sending your account password over an unsecured HTTP RPC connection is highly unsecure. - ----------- -Parameters ----------- - - -1. ``String`` - Data to sign. If String it will be converted using :ref:`web3.utils.utf8ToHex `. -2. ``String`` - Address to sign data with. -3. ``String`` - The password of the account to sign data with. -4. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Promise`` returns ``String`` - The signature. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.personal.sign("Hello world", "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", "test password!") - .then(console.log); - > "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400" - - // the below is the same - web3.eth.personal.sign(web3.utils.utf8ToHex("Hello world"), "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", "test password!") - .then(console.log); - > "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400" - - // recover the signing account address using original message and signed message - web3.eth.personal.ecRecover("Hello world", "0x30755ed65396...etc...") - .then(console.log); - > "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe" - - ------------------------------------------------------------------------------- - - -ecRecover -===================== - -.. code-block:: javascript - - web3.eth.personal.ecRecover(dataThatWasSigned, signature [, callback]) - -Recovers the account that signed the data. - ----------- -Parameters ----------- - - -1. ``String`` - Data that was signed. If String it will be converted using :ref:`web3.utils.utf8ToHex `. -2. ``String`` - The signature. -3. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Promise`` returns ``String`` - The account. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.personal.ecRecover("Hello world", "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400").then(console.log); - > "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe" - ------------------------------------------------------------------------------- - -signTransaction -===================== - -.. code-block:: javascript - - web3.eth.personal.signTransaction(transaction, password [, callback]) - -Signs a transaction. This account needs to be unlocked. - -.. note:: Sending your account password over an unsecured HTTP RPC connection is highly unsecure. - ----------- -Parameters ----------- - - -1. ``Object`` - The transaction data to sign :ref:`web3.eth.sendTransaction() ` for more. -2. ``String`` - The password of the ``from`` account, to sign the transaction with. -3. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Promise`` returns ``Object`` - The RLP encoded transaction. The ``raw`` property can be used to send the transaction using :ref:`web3.eth.sendSignedTransaction `. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.signTransaction({ - from: "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0", - gasPrice: "20000000000", - gas: "21000", - to: '0x3535353535353535353535353535353535353535', - value: "1000000000000000000", - data: "" - }, 'MyPassword!').then(console.log); - > { - raw: '0xf86c808504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a04f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88da07e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', - tx: { - nonce: '0x0', - gasPrice: '0x4a817c800', - gas: '0x5208', - to: '0x3535353535353535353535353535353535353535', - value: '0xde0b6b3a7640000', - input: '0x', - v: '0x25', - r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', - s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', - hash: '0xda3be87732110de6c1354c83770aae630ede9ac308d9f7b399ecfba23d923384' - } - } - ------------------------------------------------------------------------------- - -sendTransaction -===================== - -.. code-block:: javascript - - web3.eth.personal.sendTransaction(transactionOptions, password [, callback]) - -This method sends a transaction over the management API. - -.. note:: Sending your account password over an unsecured HTTP RPC connection is highly unsecure. - ----------- -Parameters ----------- - - -1. ``Object`` - The transaction options -2. ``String`` - The passphrase for the current account -3. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Promise`` - The transaction hash. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.sendTransaction({ - from: "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0", - gasPrice: "20000000000", - gas: "21000", - to: '0x3535353535353535353535353535353535353535', - value: "1000000000000000000", - data: "" - }, 'MyPassword!').then(console.log); - > '0xda3be87732110de6c1354c83770aae630ede9ac308d9f7b399ecfba23d923384' - ------------------------------------------------------------------------------- - - -unlockAccount -===================== - -.. code-block:: javascript - - web3.eth.personal.unlockAccount(address, password, unlockDuraction [, callback]) - -Signs data using a specific account. - -.. note:: Sending your account password over an unsecured HTTP RPC connection is highly unsecure. - ----------- -Parameters ----------- - - -1. ``address`` - ``String``: The account address. -2. ``password`` - ``String`` - The password of the account. -3. ``unlockDuration`` - ``Number`` - The duration for the account to remain unlocked. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.personal.unlockAccount("0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", "test password!", 600) - .then(console.log('Account unlocked!')); - > "Account unlocked!" - ------------------------------------------------------------------------------- - -lockAccount -===================== - -.. code-block:: javascript - - web3.eth.personal.lockAccount(address [, callback]) - -Locks the given account. - -.. note:: Sending your account password over an unsecured HTTP RPC connection is highly unsecure. - ----------- -Parameters ----------- - - -1. ``address`` - ``String``: The account address. -4. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Promise`` - - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.personal.lockAccount("0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe") - .then(console.log('Account locked!')); - > "Account locked!" - ------------------------------------------------------------------------------- - -.. _personal-getaccounts: - -getAccounts -===================== - -.. code-block:: javascript - - web3.eth.personal.getAccounts([callback]) - -Returns a list of accounts the node controls by using the provider and calling -the RPC method ``personal_listAccounts``. Using :ref:`web3.eth.accounts.create() ` -will not add accounts into this list. For that use -:ref:`web3.eth.personal.newAccount() `. - -The results are the same as :ref:`web3.eth.getAccounts() ` except that calls the RPC method ``eth_accounts``. - -------- -Returns -------- - - -``Promise`` - An array of addresses controlled by node. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.personal.getAccounts() - .then(console.log); - > ["0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", "0xDCc6960376d6C6dEa93647383FfB245CfCed97Cf"] - ------------------------------------------------------------------------------- - -importRawKey -===================== - -.. code-block:: javascript - - web3.eth.personal.importRawKey(privateKey, password) - -Imports the given private key into the key store, encrypting it with the passphrase. - -Returns the address of the new account. - -.. note:: Sending your account password over an unsecured HTTP RPC connection is highly unsecure. - ----------- -Parameters ----------- - - -1. ``privateKey`` - ``String`` - An unencrypted private key (hex string). -2. ``password`` - ``String`` - The password of the account. - - -------- -Returns -------- - - -``Promise`` - The address of the account. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.personal.importRawKey("cd3376bb711cb332ee3fb2ca04c6a8b9f70c316fcdf7a1f44ef4c7999483295e", "password1234") - .then(console.log); - > "0x8f337bf484b2fc75e4b0436645dcc226ee2ac531" - - diff --git a/docs/web3-eth-subscribe.rst b/docs/web3-eth-subscribe.rst deleted file mode 100644 index 886754351c8..00000000000 --- a/docs/web3-eth-subscribe.rst +++ /dev/null @@ -1,386 +0,0 @@ -.. _eth-subscribe: - -========= -web3.eth.subscribe -========= - -The ``web3.eth.subscribe`` function lets you subscribe to specific events in the blockchain. - - -subscribe -===================== - -.. code-block:: javascript - - web3.eth.subscribe(type [, options] [, callback]); - ----------- -Parameters ----------- - -1. ``String`` - The subscription you want to subscribe to. -2. ``Mixed`` - (optional) Optional additional parameters, depending on the subscription type. -3. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. Will be called for each incoming subscription, and the subscription itself as the 3rd parameter. - -.. _eth-subscription-return: - -------- -Returns -------- - -``EventEmitter`` - A Subscription instance - - - ``subscription.id``: The subscription id, used to identify and unsubscribing the subscription. - - ``subscription.subscribe([callback])``: Can be used to re-subscribe with the same parameters. - - ``subscription.unsubscribe([callback])``: Unsubscribes the subscription and returns `TRUE` in the callback if successful. - - ``subscription.arguments``: The subscription arguments, used when re-subscribing. - - ``on("data")`` returns ``Object``: Fires on each incoming log with the log object as argument. - - ``on("changed")`` returns ``Object``: Fires on each log which was removed from the blockchain. The log will have the additional property ``"removed: true"``. - - ``on("error")`` returns ``Object``: Fires when an error in the subscription occurs. - - ``on("connected")`` returns ``String``: Fires once after the subscription successfully connected. Returns the subscription id. - ----------------- -Notification returns ----------------- - -- ``Mixed`` - depends on the subscription, see the different subscriptions for more. - -------- -Example -------- - -.. code-block:: javascript - - var subscription = web3.eth.subscribe('logs', { - address: '0x123456..', - topics: ['0x12345...'] - }, function(error, result){ - if (!error) - console.log(result); - }); - - // unsubscribes the subscription - subscription.unsubscribe(function(error, success){ - if(success) - console.log('Successfully unsubscribed!'); - }); - - ------------------------------------------------------------------------------- - - -clearSubscriptions -===================== - -.. code-block:: javascript - - web3.eth.clearSubscriptions() - -Resets subscriptions. - -.. note:: This will not reset subscriptions from other packages like ``web3-shh``, as they use their own requestManager. - ----------- -Parameters ----------- - -1. ``Boolean``: If ``true`` it keeps the ``"syncing"`` subscription. - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.subscribe('logs', {} ,function(){ ... }); - - ... - - web3.eth.clearSubscriptions(); - - ------------------------------------------------------------------------------- - - -subscribe("pendingTransactions") -===================== - -.. code-block:: javascript - - web3.eth.subscribe('pendingTransactions' [, callback]); - -Subscribes to incoming pending transactions. - ----------- -Parameters ----------- - -1. ``String`` - ``"pendingTransactions"``, the type of the subscription. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. Will be called for each incoming subscription. - -------- -Returns -------- - -``EventEmitter``: An :ref:`subscription instance ` as an event emitter with the following events: - -- ``"data"`` returns ``String``: Fires on each incoming pending transaction and returns the transaction hash. -- ``"error"`` returns ``Object``: Fires when an error in the subscription occurs. - ----------------- -Notification returns ----------------- - -1. ``Object|Null`` - First parameter is an error object if the subscription failed. -2. ``String`` - Second parameter is the transaction hash. - -------- -Example -------- - - -.. code-block:: javascript - - var subscription = web3.eth.subscribe('pendingTransactions', function(error, result){ - if (!error) - console.log(result); - }) - .on("data", function(transaction){ - console.log(transaction); - }); - - // unsubscribes the subscription - subscription.unsubscribe(function(error, success){ - if(success) - console.log('Successfully unsubscribed!'); - }); - - ------------------------------------------------------------------------------- - - -subscribe("newBlockHeaders") -===================== - -.. code-block:: javascript - - web3.eth.subscribe('newBlockHeaders' [, callback]); - -Subscribes to incoming block headers. This can be used as timer to check for changes on the blockchain. - ----------- -Parameters ----------- - -1. ``String`` - ``"newBlockHeaders"``, the type of the subscription. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. Will be called for each incoming subscription. - -------- -Returns -------- - -``EventEmitter``: An :ref:`subscription instance ` as an event emitter with the following events: - -- ``"data"`` returns ``Object``: Fires on each incoming block header. -- ``"error"`` returns ``Object``: Fires when an error in the subscription occurs. -- ``"connected"`` returns ``Number``: Fires once after the subscription successfully connected. Returns the subscription id. - -The structure of a returned block header is as follows: - - - ``number`` - ``Number``: The block number. ``null`` when its pending block. - - ``hash`` 32 Bytes - ``String``: Hash of the block. ``null`` when its pending block. - - ``parentHash`` 32 Bytes - ``String``: Hash of the parent block. - - ``nonce`` 8 Bytes - ``String``: Hash of the generated proof-of-work. ``null`` when its pending block. - - ``sha3Uncles`` 32 Bytes - ``String``: SHA3 of the uncles data in the block. - - ``logsBloom`` 256 Bytes - ``String``: The bloom filter for the logs of the block. ``null`` when its pending block. - - ``transactionsRoot`` 32 Bytes - ``String``: The root of the transaction trie of the block - - ``stateRoot`` 32 Bytes - ``String``: The root of the final state trie of the block. - - ``receiptsRoot`` 32 Bytes - ``String``: The root of the receipts. - - ``miner`` - ``String``: The address of the beneficiary to whom the mining rewards were given. - - ``extraData`` - ``String``: The "extra data" field of this block. - - ``gasLimit`` - ``Number``: The maximum gas allowed in this block. - - ``gasUsed`` - ``Number``: The total used gas by all transactions in this block. - - ``timestamp`` - ``Number``: The unix timestamp for when the block was collated. - ----------------- -Notification returns ----------------- - -1. ``Object|Null`` - First parameter is an error object if the subscription failed. -2. ``Object`` - The block header object like above. - -------- -Example -------- - - -.. code-block:: javascript - - var subscription = web3.eth.subscribe('newBlockHeaders', function(error, result){ - if (!error) { - console.log(result); - - return; - } - - console.error(error); - }) - .on("connected", function(subscriptionId){ - console.log(subscriptionId); - }) - .on("data", function(blockHeader){ - console.log(blockHeader); - }) - .on("error", console.error); - - // unsubscribes the subscription - subscription.unsubscribe(function(error, success){ - if (success) { - console.log('Successfully unsubscribed!'); - } - }); - ------------------------------------------------------------------------------- - - -subscribe("syncing") -===================== - -.. code-block:: javascript - - web3.eth.subscribe('syncing' [, callback]); - -Subscribe to syncing events. This will return an object when the node is syncing and when it's finished syncing will return ``FALSE``. - ----------- -Parameters ----------- - -1. ``String`` - ``"syncing"``, the type of the subscription. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. Will be called for each incoming subscription. - -------- -Returns -------- - -``EventEmitter``: An :ref:`subscription instance ` as an event emitter with the following events: - -- ``"data"`` returns ``Object``: Fires on each incoming sync object as argument. -- ``"changed"`` returns ``Object``: Fires when the synchronisation is started with ``true`` and when finished with ``false``. -- ``"error"`` returns ``Object``: Fires when an error in the subscription occurs. - -For the structure of a returned event ``Object`` see :ref:`web3.eth.isSyncing return values `. - ----------------- -Notification returns ----------------- - -1. ``Object|Null`` - First parameter is an error object if the subscription failed. -2. ``Object|Boolean`` - The syncing object, when started it will return ``true`` once or when finished it will return `false` once. - -------- -Example -------- - - -.. code-block:: javascript - - var subscription = web3.eth.subscribe('syncing', function(error, sync){ - if (!error) - console.log(sync); - }) - .on("data", function(sync){ - // show some syncing stats - }) - .on("changed", function(isSyncing){ - if(isSyncing) { - // stop app operation - } else { - // regain app operation - } - }); - - // unsubscribes the subscription - subscription.unsubscribe(function(error, success){ - if(success) - console.log('Successfully unsubscribed!'); - }); - ------------------------------------------------------------------------------- - - -subscribe("logs") -===================== - -.. code-block:: javascript - - web3.eth.subscribe('logs', options [, callback]); - -Subscribes to incoming logs, filtered by the given options. -If a valid numerical ``fromBlock`` options property is set, Web3 will retrieve logs beginning from this point, backfilling the response as necessary. - ----------- -Parameters ----------- - -1. ``"logs"`` - ``String``, the type of the subscription. -2. ``Object`` - The subscription options - - ``fromBlock`` - ``Number``: The number of the earliest block. By default ``null``. - - ``address`` - ``String|Array``: An address or a list of addresses to only get logs from particular account(s). - - ``topics`` - ``Array``: An array of values which must each appear in the log entries. The order is important, if you want to leave topics out use ``null``, e.g. ``[null, '0x00...']``. You can also pass another array for each topic with options for that topic e.g. ``[null, ['option1', 'option2']]`` -3. ``callback`` - ``Function``: (optional) Optional callback, returns an error object as first parameter and the result as second. Will be called for each incoming subscription. - -------- -Returns -------- - -``EventEmitter``: A :ref:`subscription instance ` as an event emitter with the following events: - -- ``"data"`` returns ``Object``: Fires on each incoming log with the log object as argument. -- ``"changed"`` returns ``Object``: Fires on each log which was removed from the blockchain. The log will have the additional property ``"removed: true"``. -- ``"error"`` returns ``Object``: Fires when an error in the subscription occurs. -- ``"connected"`` returns ``Number``: Fires once after the subscription successfully connected. Returns the subscription id. - -For the structure of a returned event ``Object`` see :ref:`web3.eth.getPastEvents return values `. - ----------------- -Notification returns ----------------- - -1. ``Object|Null`` - First parameter is an error object if the subscription failed. -2. ``Object`` - The log object like in :ref:`web3.eth.getPastEvents return values `. - -------- -Example -------- - - -.. code-block:: javascript - - var subscription = web3.eth.subscribe('logs', { - address: '0x123456..', - topics: ['0x12345...'] - }, function(error, result){ - if (!error) - console.log(result); - }) - .on("connected", function(subscriptionId){ - console.log(subscriptionId); - }) - .on("data", function(log){ - console.log(log); - }) - .on("changed", function(log){ - }); - - // unsubscribes the subscription - subscription.unsubscribe(function(error, success){ - if(success) - console.log('Successfully unsubscribed!'); - }); diff --git a/docs/web3-eth.rst b/docs/web3-eth.rst deleted file mode 100644 index 81c9b3771f8..00000000000 --- a/docs/web3-eth.rst +++ /dev/null @@ -1,2076 +0,0 @@ -.. _eth: - -======== -web3.eth -======== - -The ``web3-eth`` package allows you to interact with an Ethereum blockchain and Ethereum smart contracts. - - -.. code-block:: javascript - - var Eth = require('web3-eth'); - - // "Eth.providers.givenProvider" will be set if in an Ethereum supported browser. - var eth = new Eth(Eth.givenProvider || 'ws://some.local-or-remote.node:8546'); - - - // or using the web3 umbrella package - - var Web3 = require('web3'); - var web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546'); - - // -> web3.eth - - -Note on checksum addresses -======= - -All Ethereum addresses returned by functions of this package are returned as checksum addresses. -This means some letters are uppercase and some are lowercase. -Based on that it will calculate a checksum for the address and prove its correctness. -Incorrect checksum addresses will throw an error when passed into functions. -If you want to circumvent the checksum check you can make an address all lower- or uppercase. - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.getAccounts(console.log); - > ["0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe" ,"0x85F43D8a49eeB85d32Cf465507DD71d507100C1d"] - - ------------------------------------------------------------------------------- - - -subscribe -===================== - -For ``web3.eth.subscribe`` see the :ref:`Subscribe reference documentation `. - - ------------------------------------------------------------------------------- - - -Contract -===================== - -For ``web3.eth.Contract`` see the :ref:`Contract reference documentation `. - - ------------------------------------------------------------------------------- - - -Iban -===================== - -For ``web3.eth.Iban`` see the :ref:`Iban reference documentation `. - - ------------------------------------------------------------------------------- - - -personal -===================== - -For ``web3.eth.personal`` see the :ref:`personal reference documentation `. - - ------------------------------------------------------------------------------- - -accounts -===================== - -For ``web3.eth.accounts`` see the :ref:`accounts reference documentation `. - - ------------------------------------------------------------------------------- - -ens -===================== - -For ``web3.eth.ens`` see the :ref:`ENS reference documentation `. - - - ------------------------------------------------------------------------------- - -abi -===================== - -For ``web3.eth.abi`` see the :ref:`ABI reference documentation `. - - ------------------------------------------------------------------------------- - - -net -===================== - -For ``web3.eth.net`` see the :ref:`net reference documentation `. - - ------------------------------------------------------------------------------- - - -.. include:: include_package-core.rst - - ------------------------------------------------------------------------------- - -.. _eth-defaultaccount - -defaultAccount -===================== - -.. code-block:: javascript - - web3.eth.defaultAccount - -This default address is used as the default ``"from"`` property, if no ``"from"`` property is specified in for the following methods: - -- :ref:`web3.eth.sendTransaction() ` -- :ref:`web3.eth.call() ` -- :ref:`new web3.eth.Contract() -> myContract.methods.myMethod().call() ` -- :ref:`new web3.eth.Contract() -> myContract.methods.myMethod().send() ` - --------- -Property --------- - - -``String`` - 20 Bytes: Any ethereum address. You should have the private key for that address in your node or keystore. (Default is ``undefined``) - - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.defaultAccount; - > undefined - - // set the default account - web3.eth.defaultAccount = '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe'; - - ------------------------------------------------------------------------------- - -.. _eth-defaultblock: - -defaultBlock -===================== - -.. code-block:: javascript - - web3.eth.defaultBlock - -The default block is used for certain methods. You can override it by passing in the defaultBlock as last parameter. -The default value is ``"latest"``. - -- :ref:`web3.eth.getBalance() ` -- :ref:`web3.eth.getCode() ` -- :ref:`web3.eth.getTransactionCount() ` -- :ref:`web3.eth.getStorageAt() ` -- :ref:`web3.eth.call() ` -- :ref:`new web3.eth.Contract() -> myContract.methods.myMethod().call() ` - ----------- -Property ----------- - - -Default block parameters can be one of the following: - -- ``Number|BN|BigNumber``: A block number -- ``"earliest"`` - ``String``: The genesis block -- ``"latest"`` - ``String``: The latest block (current head of the blockchain) -- ``"pending"`` - ``String``: The currently mined block (including pending transactions) - -Default is ``"latest"`` - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.defaultBlock; - > "latest" - - // set the default block - web3.eth.defaultBlock = 231; - - ------------------------------------------------------------------------------- -.. _eth-defaulthardfork: - -defaultHardfork -===================== - -.. code-block:: javascript - - web3.eth.defaultHardfork - -The default hardfork property is used for signing transactions locally. - ----------- -Property ----------- - - -The default hardfork property can be one of the following: - -- ``"chainstart"`` - ``String`` -- ``"homestead"`` - ``String`` -- ``"dao"`` - ``String`` -- ``"tangerineWhistle"`` - ``String`` -- ``"spuriousDragon"`` - ``String`` -- ``"byzantium"`` - ``String`` -- ``"constantinople"`` - ``String`` -- ``"petersburg"`` - ``String`` -- ``"istanbul"`` - ``String`` - -Default is ``"petersburg"`` - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.defaultHardfork; - > "petersburg" - - // set the default block - web3.eth.defaultHardfork = 'istanbul'; - - ------------------------------------------------------------------------------- -.. _eth-defaultchain: - -defaultChain -===================== - -.. code-block:: javascript - - web3.eth.defaultChain - -The default chain property is used for signing transactions locally. - ----------- -Property ----------- - - -The default chain property can be one of the following: - -- ``"mainnet"`` - ``String`` -- ``"goerli"`` - ``String`` -- ``"kovan"`` - ``String`` -- ``"rinkeby"`` - ``String`` -- ``"ropsten"`` - ``String`` - -Default is ``"mainnet"`` - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.defaultChain; - > "mainnet" - - // set the default chain - web3.eth.defaultChain = 'goerli'; - - ------------------------------------------------------------------------------- -.. _eth-defaultcommon: - -defaultCommon -===================== - -.. code-block:: javascript - - web3.eth.defaultCommon - -The default common property is used for signing transactions locally. - ----------- -Property ----------- - - -The default common property does contain the following ``Common`` object: - -- ``customChain`` - ``Object``: The custom chain properties - - ``name`` - ``string``: (optional) The name of the chain - - ``networkId`` - ``number``: Network ID of the custom chain - - ``chainId`` - ``number``: Chain ID of the custom chain -- ``baseChain`` - ``string``: (optional) ``mainnet``, ``goerli``, ``kovan``, ``rinkeby``, or ``ropsten`` -- ``hardfork`` - ``string``: (optional) ``chainstart``, ``homestead``, ``dao``, ``tangerineWhistle``, ``spuriousDragon``, ``byzantium``, ``constantinople``, ``petersburg``, or ``istanbul`` - - -Default is ``undefined``. - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.defaultCommon; - > {customChain: {name: 'custom-network', chainId: 1, networkId: 1}, baseChain: 'mainnet', hardfork: 'petersburg'} - - // set the default common - web3.eth.defaultCommon = {customChain: {name: 'custom-network', chainId: 1, networkId: 1}, baseChain: 'mainnet', hardfork: 'petersburg'}; - - ------------------------------------------------------------------------------- - -.. _web3-module-transactionblocktimeout: - -transactionBlockTimeout -===================== - -.. code-block:: javascript - - web3.eth.transactionBlockTimeout - -The ``transactionBlockTimeout`` is used over socket-based connections. This option defines the amount of new blocks it should wait until the first confirmation happens, otherwise the PromiEvent rejects with a timeout error. - - -------- -Returns -------- - -``number``: The current value of transactionBlockTimeout (default: 50) - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.transactionBlockTimeout; - > 50 - - // set the transaction block timeout - web3.eth.transactionBlockTimeout = 100; - - ------------------------------------------------------------------------------- - -.. _web3-module-transactionconfirmationblocks: - -transactionConfirmationBlocks -===================== - -.. code-block:: javascript - - web3.eth.transactionConfirmationBlocks - -This defines the number of blocks it requires until a transaction is considered confirmed. - - -------- -Returns -------- - -``number``: The current value of transactionConfirmationBlocks (default: 24) - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.transactionConfirmationBlocks; - > 24 - - // set the transaction confirmations blocks - web3.eth.transactionConfirmationBlocks = 50; - - ------------------------------------------------------------------------------- - -.. _web3-module-transactionpollingtimeout: - -transactionPollingTimeout -===================== - -.. code-block:: javascript - - web3.eth.transactionPollingTimeout - -The ``transactionPollingTimeout`` is used over HTTP connections. This option defines the number of seconds Web3 will wait for a receipt which confirms that a transaction was mined by the network. Note: If this method times out, the transaction may still be pending. - - -------- -Returns -------- - -``number``: The current value of transactionPollingTimeout (default: 750) - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.transactionPollingTimeout; - > 750 - - // set the transaction polling timeout - web3.eth.transactionPollingTimeout = 1000; - - ------------------------------------------------------------------------------- - -.. _web3-module-handlerevert: - -handleRevert -============ - -.. code-block:: javascript - - web3.eth.handleRevert - -The ``handleRevert`` options property defaults to ``false`` and returns the revert reason string if enabled for the following methods: - -- :ref:`web3.eth.call() ` -- :ref:`web3.eth.sendTransaction() ` -- :ref:`contract.methods.myMethod(...).send(...) ` -- :ref:`contract.methods.myMethod(...).call(...) ` - -.. note:: The revert reason string and signature exist as a property on the returned error. - -------- -Returns -------- - -``boolean``: The current value of ``handleRevert`` (default: false) - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.handlRevert; - > false - - // turn revert handling on - web3.eth.handleRevert = true; - - ------------------------------------------------------------------------------- - -.. _web3-module-maxListenersWarningThreshold: - -maxListenersWarningThreshold -===================== - -.. code-block:: javascript - - web3.eth.maxListenersWarningThreshold - -This defines the threshold above which a warning about the number of event listeners -attached to a provider which supports sockets subscriptions will be written to the console. -You may see this warning if you call ``setProvider`` on large numbers of Web3 contract objects. - -------- -Returns -------- - -``number``: The current value of maxListenersWarningThreshold (default: 100) - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.maxListenersWarningThreshold; - > 100 - - // set the max listeners warning threshold - web3.eth.maxListenersWarningThreshold = 200; - ------------------------------------------------------------------------------- - -getProtocolVersion -===================== - -.. code-block:: javascript - - web3.eth.getProtocolVersion([callback]) - -Returns the ethereum protocol version of the node. - -------- -Returns -------- - -``Promise`` returns ``String``: the protocol version. - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.getProtocolVersion() - .then(console.log); - > "63" - - ------------------------------------------------------------------------------- - - -isSyncing -===================== - -.. code-block:: javascript - - web3.eth.isSyncing([callback]) - -Checks if the node is currently syncing and returns either a syncing object, or ``false``. - -.. _eth-issyncing-return: - -------- -Returns -------- - -``Promise`` returns ``Object|Boolean`` - A sync object when the node is currently syncing or ``false``: - - - ``startingBlock`` - ``Number``: The block number where the sync started. - - ``currentBlock`` - ``Number``: The block number where the node is currently synced to. - - ``highestBlock`` - ``Number``: The estimated block number to sync to. - - ``knownStates`` - ``Number``: The number of estimated states to download. - - ``pulledStates`` - ``Number``: The number of already downloaded states. - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.isSyncing() - .then(console.log); - - > { - startingBlock: 100, - currentBlock: 312, - highestBlock: 512, - knownStates: 234566, - pulledStates: 123455 - } - - ------------------------------------------------------------------------------- - - -getCoinbase -===================== - -.. code-block:: javascript - - getCoinbase([callback]) - -Returns the coinbase address to which mining rewards will go. - -------- -Returns -------- - -``Promise`` returns ``String`` - bytes 20: The coinbase address set in the node for mining rewards. - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.getCoinbase() - .then(console.log); - > "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe" - - ------------------------------------------------------------------------------- - -isMining -===================== - -.. code-block:: javascript - - web3.eth.isMining([callback]) - - -Checks whether the node is mining or not. - -------- -Returns -------- - -``Promise`` returns ``Boolean``: ``true`` if the node is mining, otherwise ``false``. - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.isMining() - .then(console.log); - > true - - ------------------------------------------------------------------------------- - -getHashrate -===================== - -.. code-block:: javascript - - web3.eth.getHashrate([callback]) - -Returns the number of hashes per second that the node is mining with. - -------- -Returns -------- - -``Promise`` returns ``Number``: Number of hashes per second. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getHashrate() - .then(console.log); - > 493736 - - ------------------------------------------------------------------------------- - -.. _eth-gasprice: - - -getGasPrice -===================== - -.. code-block:: javascript - - web3.eth.getGasPrice([callback]) - - -Returns the current gas price oracle. -The gas price is determined by the last few blocks median gas price. - -------- -Returns -------- - -``Promise`` returns ``String`` - Number string of the current gas price in :ref:`wei `. - -See the :ref:`A note on dealing with big numbers in JavaScript `. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getGasPrice() - .then(console.log); - > "20000000000" - - ------------------------------------------------------------------------------- - - -getAccounts -===================== - -.. code-block:: javascript - - web3.eth.getAccounts([callback]) - -Returns a list of accounts the node controls. - -------- -Returns -------- - - -``Promise`` returns ``Array`` - An array of addresses controlled by node. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getAccounts() - .then(console.log); - > ["0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", "0xDCc6960376d6C6dEa93647383FfB245CfCed97Cf"] - - ------------------------------------------------------------------------------- - - -getBlockNumber -===================== - -.. code-block:: javascript - - web3.eth.getBlockNumber([callback]) - -Returns the current block number. - -------- -Returns -------- - -``Promise`` returns ``Number`` - The number of the most recent block. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getBlockNumber() - .then(console.log); - > 2744 - - ------------------------------------------------------------------------------- - - - -getBalance -===================== - -.. code-block:: javascript - - web3.eth.getBalance(address [, defaultBlock] [, callback]) - -Get the balance of an address at a given block. - ----------- -Parameters ----------- - -1. ``String`` - The address to get the balance of. -2. ``Number|String|BN|BigNumber`` - (optional) If you pass this parameter it will not use the default block set with :ref:`web3.eth.defaultBlock `. Pre-defined block numbers as ``"earliest"``, ``"latest"`` and ``"pending"`` can also be used. -3. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - -------- -Returns -------- - - -``Promise`` returns ``String`` - The current balance for the given address in :ref:`wei `. - -See the :ref:`A note on dealing with big numbers in JavaScript `. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getBalance("0x407d73d8a49eeb85d32cf465507dd71d507100c1") - .then(console.log); - > "1000000000000" - - ------------------------------------------------------------------------------- - -getStorageAt -===================== - -.. code-block:: javascript - - web3.eth.getStorageAt(address, position [, defaultBlock] [, callback]) - -Get the storage at a specific position of an address. - ----------- -Parameters ----------- - -1. ``String`` - The address to get the storage from. -2. ``Number|String|BN|BigNumber`` - The index position of the storage. -3. ``Number|String|BN|BigNumber`` - (optional) If you pass this parameter it will not use the default block set with :ref:`web3.eth.defaultBlock `. Pre-defined block numbers as ``"earliest"``, ``"latest"`` and ``"pending"`` can also be used. -4. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - -``Promise`` returns ``String`` - The value in storage at the given position. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getStorageAt("0x407d73d8a49eeb85d32cf465507dd71d507100c1", 0) - .then(console.log); - > "0x033456732123ffff2342342dd12342434324234234fd234fd23fd4f23d4234" - - ------------------------------------------------------------------------------- - -getCode -===================== - -.. code-block:: javascript - - web3.eth.getCode(address [, defaultBlock] [, callback]) - -Get the code at a specific address. - ----------- -Parameters ----------- - -1. ``String`` - The address to get the code from. -2. ``Number|String|BN|BigNumber`` - (optional) If you pass this parameter it will not use the default block set with :ref:`web3.eth.defaultBlock `. Pre-defined block numbers as ``"earliest"``, ``"latest"`` and ``"pending"`` can also be used. -3. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - -------- -Returns -------- - - -``Promise`` returns ``String`` - The data at given address ``address``. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getCode("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8") - .then(console.log); - > "0x600160008035811a818181146012578301005b601b6001356025565b8060005260206000f25b600060078202905091905056" - - ------------------------------------------------------------------------------- - -.. _eth-getblock: - -getBlock -===================== - -.. code-block:: javascript - - web3.eth.getBlock(blockHashOrBlockNumber [, returnTransactionObjects] [, callback]) - -Returns a block matching the block number or block hash. - ----------- -Parameters ----------- - -1. ``String|Number|BN|BigNumber`` - The block number or block hash. Or the string ``"earliest"``, ``"latest"`` or ``"pending"`` as in the :ref:`default block parameter `. -2. ``Boolean`` - (optional, default ``false``) If specified ``true``, the returned block will contain all transactions as objects. If ``false`` it will only contains the transaction hashes. -3. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - -------- -Returns -------- - - -``Promise`` returns ``Object`` - The block object: - - - ``number`` - ``Number``: The block number. ``null`` if a pending block. - - ``hash`` 32 Bytes - ``String``: Hash of the block. ``null`` if a pending block. - - ``parentHash`` 32 Bytes - ``String``: Hash of the parent block. - - ``nonce`` 8 Bytes - ``String``: Hash of the generated proof-of-work. ``null`` if a pending block. - - ``sha3Uncles`` 32 Bytes - ``String``: SHA3 of the uncles data in the block. - - ``logsBloom`` 256 Bytes - ``String``: The bloom filter for the logs of the block. ``null`` if a pending block. - - ``transactionsRoot`` 32 Bytes - ``String``: The root of the transaction trie of the block. - - ``stateRoot`` 32 Bytes - ``String``: The root of the final state trie of the block. - - ``miner`` - ``String``: The address of the beneficiary to whom the mining rewards were given. - - ``difficulty`` - ``String``: Integer of the difficulty for this block. - - ``totalDifficulty`` - ``String``: Integer of the total difficulty of the chain until this block. - - ``extraData`` - ``String``: The "extra data" field of this block. - - ``size`` - ``Number``: Integer the size of this block in bytes. - - ``gasLimit`` - ``Number``: The maximum gas allowed in this block. - - ``gasUsed`` - ``Number``: The total used gas by all transactions in this block. - - ``timestamp`` - ``Number``: The unix timestamp for when the block was collated. - - ``transactions`` - ``Array``: Array of transaction objects, or 32 Bytes transaction hashes depending on the ``returnTransactionObjects`` parameter. - - ``uncles`` - ``Array``: Array of uncle hashes. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getBlock(3150) - .then(console.log); - - > { - "number": 3, - "hash": "0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46", - "parentHash": "0x2302e1c0b972d00932deb5dab9eb2982f570597d9d42504c05d9c2147eaf9c88", - "nonce": "0xfb6e1a62d119228b", - "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "transactionsRoot": "0x3a1b03875115b79539e5bd33fb00d8f7b7cd61929d5a3c574f507b8acf415bee", - "stateRoot": "0xf1133199d44695dfa8fd1bcfe424d82854b5cebef75bddd7e40ea94cda515bcb", - "miner": "0x8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty": '21345678965432', - "totalDifficulty": '324567845321', - "size": 616, - "extraData": "0x", - "gasLimit": 3141592, - "gasUsed": 21662, - "timestamp": 1429287689, - "transactions": [ - "0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b" - ], - "uncles": [] - } - - ------------------------------------------------------------------------------- - - -getBlockTransactionCount -===================== - -.. code-block:: javascript - - web3.eth.getBlockTransactionCount(blockHashOrBlockNumber [, callback]) - -Returns the number of transaction in a given block. - ----------- -Parameters ----------- - - -1. ``String|Number|BN|BigNumber`` - The block number or hash. Or the string ``"earliest"``, ``"latest"`` or ``"pending"`` as in the :ref:`default block parameter `. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - -------- -Returns -------- - - -``Promise`` returns ``Number`` - The number of transactions in the given block. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getBlockTransactionCount("0x407d73d8a49eeb85d32cf465507dd71d507100c1") - .then(console.log); - > 1 - - - ------------------------------------------------------------------------------- - - -getBlockUncleCount -===================== - -.. code-block:: javascript - - web3.eth.getBlockUncleCount(blockHashOrBlockNumber [, callback]) - -Returns the number of uncles in a block from a block matching the given block hash. - ----------- -Parameters ----------- - - -1. ``String|Number|BN|BigNumber`` - The block number or hash. Or the string ``"earliest"``, ``"latest"`` or ``"pending"`` as in the :ref:`default block parameter `. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - -------- -Returns -------- - - -``Promise`` returns ``Number`` - The number of transactions in the given block. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getBlockUncleCount("0x407d73d8a49eeb85d32cf465507dd71d507100c1") - .then(console.log); - > 1 - - ------------------------------------------------------------------------------- - -getUncle -===================== - -.. code-block:: javascript - - web3.eth.getUncle(blockHashOrBlockNumber, uncleIndex [, returnTransactionObjects] [, callback]) - -Returns a blocks uncle by a given uncle index position. - ----------- -Parameters ----------- - -1. ``String|Number|BN|BigNumber`` - The block number or hash. Or the string ``"earliest"``, ``"latest"`` or ``"pending"`` as in the :ref:`default block parameter `. -2. ``Number`` - The index position of the uncle. -3. ``Boolean`` - (optional, default ``false``) If specified ``true``, the returned block will contain all transactions as objects. By default it is ``false`` so, there is no need to explictly specify false. And, if ``false`` it will only contains the transaction hashes. -4. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Promise`` returns ``Object`` - the returned uncle. For a return value see :ref:`web3.eth.getBlock() `. - -.. note:: An uncle doesn't contain individual transactions. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getUncle(500, 0) - .then(console.log); - > // see web3.eth.getBlock - - - ------------------------------------------------------------------------------- - - -getTransaction -===================== - -.. code-block:: javascript - - web3.eth.getTransaction(transactionHash [, callback]) - -Returns a transaction matching the given transaction hash. - ----------- -Parameters ----------- - -1. ``String`` - The transaction hash. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -.. _eth-gettransaction-return: - -------- -Returns -------- - - -``Promise`` returns ``Object`` - A transaction object its hash ``transactionHash``: - - - ``hash`` 32 Bytes - ``String``: Hash of the transaction. - - ``nonce`` - ``Number``: The number of transactions made by the sender prior to this one. - - ``blockHash`` 32 Bytes - ``String``: Hash of the block where this transaction was in. ``null`` if pending. - - ``blockNumber`` - ``Number``: Block number where this transaction was in. ``null`` if pending. - - ``transactionIndex`` - ``Number``: Integer of the transactions index position in the block. ``null`` if pending. - - ``from`` - ``String``: Address of the sender. - - ``to`` - ``String``: Address of the receiver. ``null`` if it's a contract creation transaction. - - ``value`` - ``String``: Value transferred in :ref:`wei `. - - ``gasPrice`` - ``String``: Gas price provided by the sender in :ref:`wei `. - - ``gas`` - ``Number``: Gas provided by the sender. - - ``input`` - ``String``: The data sent along with the transaction. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getTransaction('0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b§234') - .then(console.log); - - > { - "hash": "0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b", - "nonce": 2, - "blockHash": "0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46", - "blockNumber": 3, - "transactionIndex": 0, - "from": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", - "to": "0x6295ee1b4f6dd65047762f924ecd367c17eabf8f", - "value": '123450000000000000', - "gas": 314159, - "gasPrice": '2000000000000', - "input": "0x57cb2fc4" - } - ------------------------------------------------------------------------------- - -.. _eth-getpendingtransactions: - -getPendingTransactions -====================== - -.. code-block:: javascript - - web3.eth.getPendingTransactions([, callback]) - -Returns a list of pending transactions. - ----------- -Parameters ----------- - -1. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -.. _eth-getpendingtransactions-return: - -------- -Returns -------- - - -``Promise`` - Array of pending transactions: - - - ``hash`` 32 Bytes - ``String``: Hash of the transaction. - - ``nonce`` - ``Number``: The number of transactions made by the sender prior to this one. - - ``blockHash`` 32 Bytes - ``String``: Hash of the block where this transaction was in. ``null`` if pending. - - ``blockNumber`` - ``Number``: Block number where this transaction was in. ``null`` if pending. - - ``transactionIndex`` - ``Number``: Integer of the transactions index position in the block. ``null`` if pending. - - ``from`` - ``String``: Address of the sender. - - ``to`` - ``String``: Address of the receiver. ``null`` when it's a contract creation transaction. - - ``value`` - ``String``: Value transferred in :ref:`wei `. - - ``gasPrice`` - ``String``: The wei per unit of gas provided by the sender in :ref:`wei `. - - ``gas`` - ``Number``: Gas provided by the sender. - - ``input`` - ``String``: The data sent along with the transaction. - - - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.getPendingTransactions().then(console.log); - > [ - { - hash: '0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b', - nonce: 2, - blockHash: '0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46', - blockNumber: 3, - transactionIndex: 0, - from: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', - to: '0x6295ee1b4f6dd65047762f924ecd367c17eabf8f', - value: '123450000000000000', - gas: 314159, - gasPrice: '2000000000000', - input: '0x57cb2fc4' - v: '0x3d', - r: '0xaabc9ddafffb2ae0bac4107697547d22d9383667d9e97f5409dd6881ce08f13f', - s: '0x69e43116be8f842dcd4a0b2f760043737a59534430b762317db21d9ac8c5034' - },....,{ - hash: '0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b', - nonce: 3, - blockHash: '0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46', - blockNumber: 4, - transactionIndex: 0, - from: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', - to: '0x6295ee1b4f6dd65047762f924ecd367c17eabf8f', - value: '123450000000000000', - gas: 314159, - gasPrice: '2000000000000', - input: '0x57cb2fc4' - v: '0x3d', - r: '0xaabc9ddafffb2ae0bac4107697547d22d9383667d9e97f5409dd6881ce08f13f', - s: '0x69e43116be8f842dcd4a0b2f760043737a59534430b762317db21d9ac8c5034' - } - ] - ------------------------------------------------------------------------------- - -getTransactionFromBlock -===================== - -.. code-block:: javascript - - getTransactionFromBlock(hashStringOrNumber, indexNumber [, callback]) - -Returns a transaction based on a block hash or number and the transaction's index position. - ----------- -Parameters ----------- - - -1. ``String|Number|BN|BigNumber`` - A block number or hash. Or the string ``"earliest"``, ``"latest"`` or ``"pending"`` as in the :ref:`default block parameter `. -2. ``Number`` - The transaction's index position. -3. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - -------- -Returns -------- - - -``Promise`` returns ``Object`` - A transaction object, see :ref:`web3.eth.getTransaction `: - - -------- -Example -------- - - -.. code-block:: javascript - - var transaction = web3.eth.getTransactionFromBlock('0x4534534534', 2) - .then(console.log); - > // see web3.eth.getTransaction - - - ------------------------------------------------------------------------------- - - -getTransactionReceipt -===================== - -.. code-block:: javascript - - web3.eth.getTransactionReceipt(hash [, callback]) - -Returns the receipt of a transaction by transaction hash. - -.. note:: The receipt is not available for pending transactions and returns ``null``. - - ----------- -Parameters ----------- - -1. ``String`` - The transaction hash. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -.. _eth-gettransactionreceipt-return: - -------- -Returns -------- - - -``Promise`` returns ``Object`` - A transaction receipt object, or ``null`` if no receipt was found: - - - ``status`` - ``Boolean``: ``TRUE`` if the transaction was successful, ``FALSE`` if the EVM reverted the transaction. - - ``blockHash`` 32 Bytes - ``String``: Hash of the block where this transaction was in. - - ``blockNumber`` - ``Number``: Block number where this transaction was in. - - ``transactionHash`` 32 Bytes - ``String``: Hash of the transaction. - - ``transactionIndex``- ``Number``: Integer of the transactions index position in the block. - - ``from`` - ``String``: Address of the sender. - - ``to`` - ``String``: Address of the receiver. ``null`` when it's a contract creation transaction. - - ``contractAddress`` - ``String``: The contract address created, if the transaction was a contract creation, otherwise ``null``. - - ``cumulativeGasUsed`` - ``Number``: The total amount of gas used when this transaction was executed in the block. - - ``gasUsed``- ``Number``: The amount of gas used by this specific transaction alone. - - ``logs`` - ``Array``: Array of log objects, which this transaction generated. - -------- -Example -------- - -.. code-block:: javascript - - var receipt = web3.eth.getTransactionReceipt('0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b') - .then(console.log); - - > { - "status": true, - "transactionHash": "0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b", - "transactionIndex": 0, - "blockHash": "0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46", - "blockNumber": 3, - "contractAddress": "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", - "cumulativeGasUsed": 314159, - "gasUsed": 30234, - "logs": [{ - // logs as returned by getPastLogs, etc. - }, ...] - } - - ------------------------------------------------------------------------------- - - -.. _eth-gettransactioncount: - -getTransactionCount -===================== - -.. code-block:: javascript - - web3.eth.getTransactionCount(address [, defaultBlock] [, callback]) - -Get the number of transactions sent from this address. - ----------- -Parameters ----------- - -1. ``String`` - The address to get the numbers of transactions from. -2. ``Number|String|BN|BigNumber`` - (optional) If you pass this parameter it will not use the default block set with :ref:`web3.eth.defaultBlock `. Pre-defined block numbers as ``"earliest"``, ``"latest"`` and ``"pending"`` can also be used. -3. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - -------- -Returns -------- - - -``Promise`` returns ``Number`` - The number of transactions sent from the given address. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getTransactionCount("0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe") - .then(console.log); - > 1 - - ------------------------------------------------------------------------------- - -.. _eth-sendtransaction: - -sendTransaction -===================== - -.. code-block:: javascript - - web3.eth.sendTransaction(transactionObject [, callback]) - -Sends a transaction to the network. - ----------- -Parameters ----------- - - -1. ``Object`` - The transaction object to send: - - ``from`` - ``String|Number``: The address for the sending account. Uses the :ref:`web3.eth.defaultAccount ` property, if not specified. Or an address or index of a local wallet in :ref:`web3.eth.accounts.wallet `. - - ``to`` - ``String``: (optional) The destination address of the message, left undefined for a contract-creation transaction. - - ``value`` - ``Number|String|BN|BigNumber``: (optional) The value transferred for the transaction in :ref:`wei `, also the endowment if it's a contract-creation transaction. - - ``gas`` - ``Number``: (optional, default: To-Be-Determined) The amount of gas to use for the transaction (unused gas is refunded). - - ``gasPrice`` - ``Number|String|BN|BigNumber``: (optional) The price of gas for this transaction in :ref:`wei `, defaults to :ref:`web3.eth.gasPrice `. - - ``data`` - ``String``: (optional) Either a `ABI byte string `_ containing the data of the function call on a contract, or in the case of a contract-creation transaction the initialisation code. - - ``nonce`` - ``Number``: (optional) Integer of the nonce. This allows to overwrite your own pending transactions that use the same nonce. - - ``chain`` - ``String``: (optional) Defaults to ``mainnet``. - - ``hardfork`` - ``String``: (optional) Defaults to ``petersburg``. - - ``common`` - ``Object``: (optional) The common object - - ``customChain`` - ``Object``: The custom chain properties - - ``name`` - ``string``: (optional) The name of the chain - - ``networkId`` - ``number``: Network ID of the custom chain - - ``chainId`` - ``number``: Chain ID of the custom chain - - ``baseChain`` - ``string``: (optional) ``mainnet``, ``goerli``, ``kovan``, ``rinkeby``, or ``ropsten`` - - ``hardfork`` - ``string``: (optional) ``chainstart``, ``homestead``, ``dao``, ``tangerineWhistle``, ``spuriousDragon``, ``byzantium``, ``constantinople``, ``petersburg``, or ``istanbul`` - -2. ``callback`` - ``Function``: (optional) Optional callback, returns an error object as first parameter and the result as second. - -.. note:: The ``from`` property can also be an address or index from the :ref:`web3.eth.accounts.wallet `. It will then sign locally using the private key of that account, and send the transaction via :ref:`web3.eth.sendSignedTransaction() `. If the properties ``chain`` and ``hardfork`` or ``common`` are not set, Web3 will try to set appropriate values by querying the network for its chainId and networkId. - -.. _eth-sendtransaction-return: - -------- -Returns -------- - -The **callback** will return the 32 bytes transaction hash. - -``PromiEvent``: A :ref:`promise combined event emitter `. Resolves when the transaction :ref:`receipt ` is available. The following events are also available: - -- ``sending`` returns ``payload: Object``: Fired immediately before transmitting the transaction request. -- ``sent`` returns ``payload: Object``: Fired immediately after the request body has been written to the client, but before the transaction hash is received. -- ``"transactionHash"`` returns ``transactionHash: String``: Fired when the transaction hash is available. -- ``"receipt"`` returns ``receipt: Object``: Fired when the transaction receipt is available. -- ``"confirmation"`` returns ``confirmationNumber: Number``, ``receipt: Object``, ``latestBlockHash: String``: Fired for every confirmation up to the 12th confirmation. Receives the confirmation number as the first and the :ref:`receipt ` as the second argument. Fired from confirmation 0 on, which is the block where it's mined. -``"error"`` returns ``error: Error``: Fired if an error occurs during sending. If the transaction was rejected by the network with a receipt, the receipt will be available as a property on the error object. - - -------- -Example -------- - -.. code-block:: javascript - - // compiled solidity source code using https://remix.ethereum.org - var code = "603d80600c6000396000f3007c01000000000000000000000000000000000000000000000000000000006000350463c6888fa18114602d57005b6007600435028060005260206000f3"; - - - // using the callback - web3.eth.sendTransaction({ - from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', - data: code // deploying a contract - }, function(error, hash){ - ... - }); - - // using the promise - web3.eth.sendTransaction({ - from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - value: '1000000000000000' - }) - .then(function(receipt){ - ... - }); - - - // using the event emitter - web3.eth.sendTransaction({ - from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - value: '1000000000000000' - }) - .on('transactionHash', function(hash){ - ... - }) - .on('receipt', function(receipt){ - ... - }) - .on('confirmation', function(confirmationNumber, receipt){ ... }) - .on('error', console.error); // If a out of gas error, the second parameter is the receipt. - - ------------------------------------------------------------------------------- - -.. _eth-sendsignedtransaction: - -sendSignedTransaction -===================== - -.. code-block:: javascript - - web3.eth.sendSignedTransaction(signedTransactionData [, callback]) - -Sends an already signed transaction, generated for example using :ref:`web3.eth.accounts.signTransaction `. - ----------- -Parameters ----------- - -1. ``String`` - Signed transaction data in HEX format -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - -------- -Returns -------- - - -``PromiEvent``: A :ref:`promise combined event emitter `. Resolves when the transaction :ref:`receipt ` is available. - -Please see the return values for :ref:`web3.eth.sendTransaction ` for details. - -------- -Example -------- - - -.. code-block:: javascript - - var Tx = require('ethereumjs-tx').Transaction; - var privateKey = Buffer.from('e331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109', 'hex'); - - var rawTx = { - nonce: '0x00', - gasPrice: '0x09184e72a000', - gasLimit: '0x2710', - to: '0x0000000000000000000000000000000000000000', - value: '0x00', - data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057' - } - - var tx = new Tx(rawTx, {'chain':'ropsten'}); - tx.sign(privateKey); - - var serializedTx = tx.serialize(); - - // console.log(serializedTx.toString('hex')); - // 0xf889808609184e72a00082271094000000000000000000000000000000000000000080a47f74657374320000000000000000000000000000000000000000000000000000006000571ca08a8bbf888cfa37bbf0bb965423625641fc956967b81d12e23709cead01446075a01ce999b56a8a88504be365442ea61239198e23d1fce7d00fcfc5cd3b44b7215f - - web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex')) - .on('receipt', console.log); - - > // see eth.getTransactionReceipt() for details - -.. note:: When using `ethereumjs-tx@2.0.0` if you don't specify the parameter `chain` it will use `mainnet` by default. - - ------------------------------------------------------------------------------- - - -sign -===================== - -.. code-block:: javascript - - web3.eth.sign(dataToSign, address [, callback]) - -Signs data using a specific account. This account needs to be unlocked. - ----------- -Parameters ----------- - - -1. ``String`` - Data to sign. If it is a string it will be converted using :ref:`web3.utils.utf8ToHex `. -2. ``String|Number`` - Address to sign data with. Can be an address or the index of a local wallet in :ref:`web3.eth.accounts.wallet `. -3. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Promise`` returns ``String`` - The signature. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.sign("Hello world", "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe") - .then(console.log); - > "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400" - - // the below is the same - web3.eth.sign(web3.utils.utf8ToHex("Hello world"), "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe") - .then(console.log); - > "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400" - - ------------------------------------------------------------------------------- - -signTransaction -===================== - -.. code-block:: javascript - - web3.eth.signTransaction(transactionObject, address [, callback]) - -Signs a transaction. This account needs to be unlocked. - ----------- -Parameters ----------- - - -1. ``Object`` - The transaction data to sign. See :ref:`web3.eth.sendTransaction() ` for more. -2. ``String`` - Address to sign transaction with. -3. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Promise`` returns ``Object`` - The RLP encoded transaction. The ``raw`` property can be used to send the transaction using :ref:`web3.eth.sendSignedTransaction `. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.signTransaction({ - from: "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0", - gasPrice: "20000000000", - gas: "21000", - to: '0x3535353535353535353535353535353535353535', - value: "1000000000000000000", - data: "" - }).then(console.log); - > { - raw: '0xf86c808504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a04f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88da07e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', - tx: { - nonce: '0x0', - gasPrice: '0x4a817c800', - gas: '0x5208', - to: '0x3535353535353535353535353535353535353535', - value: '0xde0b6b3a7640000', - input: '0x', - v: '0x25', - r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', - s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', - hash: '0xda3be87732110de6c1354c83770aae630ede9ac308d9f7b399ecfba23d923384' - } - } - - ------------------------------------------------------------------------------- - - -call -===================== - -.. code-block:: javascript - - web3.eth.call(callObject [, defaultBlock] [, callback]) - -Executes a message call transaction, which is directly executed in the VM of the node, but never mined into the blockchain. - ----------- -Parameters ----------- - -1. ``Object`` - A transaction object, see :ref:`web3.eth.sendTransaction `. For calls the ``from`` property is optional however it is highly recommended to explicitly set it or it may default to `address(0)` depending on your node or provider. -2. ``Number|String|BN|BigNumber`` - (optional) If you pass this parameter it will not use the default block set with :ref:`web3.eth.defaultBlock `. Pre-defined block numbers as ``"earliest"``, ``"latest"`` and ``"pending"`` can also be used. -3. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - -------- -Returns -------- - -``Promise`` returns ``String``: The returned data of the call, e.g. a smart contract functions return value. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.call({ - to: "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", // contract address - data: "0xc6888fa10000000000000000000000000000000000000000000000000000000000000003" - }) - .then(console.log); - > "0x000000000000000000000000000000000000000000000000000000000000000a" - - ------------------------------------------------------------------------------- - - -estimateGas -===================== - -.. code-block:: javascript - - web3.eth.estimateGas(callObject [, callback]) - -Executes a message call or transaction and returns the amount of the gas used. -Note: You must specify a ``from`` address otherwise you may experience odd behavior. - ----------- -Parameters ----------- - - -1. ``Object`` - A transaction object, see :ref:`web3.eth.sendTransaction ` with the difference that for calls the ``from`` property is optional as well. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - -``Promise`` returns ``Number`` - the used gas for the simulated call/transaction. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.estimateGas({ - to: "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", - data: "0xc6888fa10000000000000000000000000000000000000000000000000000000000000003" - }) - .then(console.log); - > "0x0000000000000000000000000000000000000000000000000000000000000015" - - ------------------------------------------------------------------------------- - - -getPastLogs -===================== - -.. code-block:: javascript - - web3.eth.getPastLogs(options [, callback]) - -Gets past logs, matching the given options. - ----------- -Parameters ----------- - -1. ``Object`` - The filter options as follows: - - ``fromBlock`` - ``Number|String``: The number of the earliest block (``"latest"`` may be given to mean the most recent and ``"pending"`` currently mining, block). By default ``"latest"``. - - ``toBlock`` - ``Number|String``: The number of the latest block (``"latest"`` may be given to mean the most recent and ``"pending"`` currently mining, block). By default ``"latest"``. - - ``address`` - ``String|Array``: An address or a list of addresses to only get logs from particular account(s). - - ``topics`` - ``Array``: An array of values which must each appear in the log entries. The order is important, if you want to leave topics out use ``null``, e.g. ``[null, '0x12...']``. You can also pass an array for each topic with options for that topic e.g. ``[null, ['option1', 'option2']]`` - - -.. _eth-getpastlogs-return: - -------- -Returns -------- - -``Promise`` returns ``Array`` - Array of log objects. - -The structure of the returned event ``Object`` in the ``Array`` looks as follows: - -- ``address`` - ``String``: From which this event originated from. -- ``data`` - ``String``: The data containing non-indexed log parameter. -- ``topics`` - ``Array``: An array with max 4 32 Byte topics, topic 1-3 contains indexed parameters of the log. -- ``logIndex`` - ``Number``: Integer of the event index position in the block. -- ``transactionIndex`` - ``Number``: Integer of the transaction's index position, the event was created in. -- ``transactionHash`` 32 Bytes - ``String``: Hash of the transaction this event was created in. -- ``blockHash`` 32 Bytes - ``String``: Hash of the block where this event was created in. ``null`` if still pending. -- ``blockNumber`` - ``Number``: The block number where this log was created in. ``null`` if still pending. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.getPastLogs({ - address: "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", - topics: ["0x033456732123ffff2342342dd12342434324234234fd234fd23fd4f23d4234"] - }) - .then(console.log); - - > [{ - data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385'] - logIndex: 0, - transactionIndex: 0, - transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', - blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', - blockNumber: 1234, - address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' - },{...}] - - ------------------------------------------------------------------------------- - -getWork -===================== - -.. code-block:: javascript - - web3.eth.getWork([callback]) - -Gets work for miners to mine on. Returns the hash of the current block, the seedHash, and the boundary condition to be met ("target"). - ----------- -Parameters ----------- - -1. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - -------- -Returns -------- - -``Promise`` returns ``Array`` - the mining work with the following structure: - - - ``String`` 32 Bytes - at **index 0**: current block header pow-hash - - ``String`` 32 Bytes - at **index 1**: the seed hash used for the DAG. - - ``String`` 32 Bytes - at **index 2**: the boundary condition ("target"), 2^256 / difficulty. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getWork() - .then(console.log); - > [ - "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", - "0x5EED00000000000000000000000000005EED0000000000000000000000000000", - "0xd1ff1c01710000000000000000000000d1ff1c01710000000000000000000000" - ] - - ------------------------------------------------------------------------------- - -submitWork -===================== - -.. code-block:: javascript - - web3.eth.submitWork(nonce, powHash, digest, [callback]) - -Used for submitting a proof-of-work solution. - ----------- -Parameters ----------- - -1. ``String`` 8 Bytes: The nonce found (64 bits) -2. ``String`` 32 Bytes: The header's pow-hash (256 bits) -3. ``String`` 32 Bytes: The mix digest (256 bits) -4. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - -------- -Returns -------- - -``Promise`` returns ``Boolean`` - Returns ``TRUE`` if the provided solution is valid, otherwise ``FALSE``. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.submitWork([ - "0x0000000000000001", - "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", - "0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000" - ]) - .then(console.log); - > true - - ------------------------------------------------------------------------------- - -.. _eth-requestaccounts: - -requestAccounts -===================== - -.. code-block:: javascript - - web3.eth.requestAccounts([callback]) - -This method will request/enable the accounts from the current environment. This method will only work if you're using the injected provider from a application like Metamask, Status or TrustWallet. It doesn't work if you're connected to a node with a default Web3.js provider (WebsocketProvider, HttpProvidder and IpcProvider). - -For more information about the behavior of this method please read `EIP-1102: Opt-in account exposure `_. - ----------- -Parameters ----------- - -1. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - -------- -Returns -------- - -``Promise`` - Returns an array of enabled accounts. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.requestAccounts().then(console.log); - > ['0aae0B295369a9FD31d5F28D9Ec85E40f4cb692BAf', '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'] - ------------------------------------------------------------------------------- - -.. _eth-chainId: - -getChainId -========== - -.. code-block:: javascript - - web3.eth.getChainId([callback]) - -Returns the chain ID of the current connected node as described in the `EIP-695 `_. - -------- -Returns -------- - -``Promise`` - Returns chain ID. - -------- -Example -------- - -.. code-block:: javascript - - web3.eth.getChainId().then(console.log); - > 61 - ------------------------------------------------------------------------------- - -.. _eth-getNodeInfo: - -getNodeInfo -=========== - -.. code-block:: javascript - - web3.eth.getNodeInfo([callback]) - -------- -Returns -------- - -``Promise`` - The current client version. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getNodeInfo().then(console.log); - > "Mist/v0.9.3/darwin/go1.4.1" - ------------------------------------------------------------------------------- - -.. _eth-getProof: - -getProof -======== - -.. code-block:: javascript - - web3.eth.getProof(address, storageKey, blockNumber, [callback]) - -Returns the account and storage-values of the specified account including the Merkle-proof as described in `EIP-1186 `_. - ----------- -Parameters ----------- - -1. ``String`` 20 Bytes: The Address of the account or contract. -2. ``Number[] | BigNumber[] | BN[] | String[]`` 32 Bytes: Array of storage-keys which should be proofed and included. See :ref:`web3.eth.getStorageAt `. -3. ``Number | String | BN | BigNumber``: Integer block number. Pre-defined block numbers as ``"earliest"``, ``"latest"`` and ``"pending"`` can also be used. -4. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - -------- -Returns -------- - -``Promise`` - A account object. - - - ``address`` - ``String``: The address of the account. - - ``balance`` - ``String``: The balance of the account. See :ref:`web3.eth.getBalance `. - - ``codeHash`` - ``String``: hash of the code of the account. For a simple account without code it will return ``"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"``. - - ``nonce`` - ``String``: Nonce of the account. - - ``storageHash`` - ``String``: SHA3 of the StorageRoot. All storage will deliver a MerkleProof starting with this rootHash. - - ``accountProof`` - ``String[]``:Array of rlp-serialized MerkleTree-Nodes, starting with the stateRoot-Node, following the path of the SHA3 (address) as key. - - ``storageProof`` - ``Object[]`` Array of storage-entries as requested. - - ``key`` - ``String`` The requested storage key. - - ``value`` - ``String`` The storage value. - -------- -Example -------- - - -.. code-block:: javascript - - web3.eth.getProof( - "0x1234567890123456789012345678901234567890", - ["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001"], - "latest" - ).then(console.log); - > { - "address": "0x1234567890123456789012345678901234567890", - "accountProof": [ - "0xf90211a090dcaf88c40c7bbc95a912cbdde67c175767b31173df9ee4b0d733bfdd511c43a0babe369f6b12092f49181ae04ca173fb68d1a5456f18d20fa32cba73954052bda0473ecf8a7e36a829e75039a3b055e51b8332cbf03324ab4af2066bbd6fbf0021a0bbda34753d7aa6c38e603f360244e8f59611921d9e1f128372fec0d586d4f9e0a04e44caecff45c9891f74f6a2156735886eedf6f1a733628ebc802ec79d844648a0a5f3f2f7542148c973977c8a1e154c4300fec92f755f7846f1b734d3ab1d90e7a0e823850f50bf72baae9d1733a36a444ab65d0a6faaba404f0583ce0ca4dad92da0f7a00cbe7d4b30b11faea3ae61b7f1f2b315b61d9f6bd68bfe587ad0eeceb721a07117ef9fc932f1a88e908eaead8565c19b5645dc9e5b1b6e841c5edbdfd71681a069eb2de283f32c11f859d7bcf93da23990d3e662935ed4d6b39ce3673ec84472a0203d26456312bbc4da5cd293b75b840fc5045e493d6f904d180823ec22bfed8ea09287b5c21f2254af4e64fca76acc5cd87399c7f1ede818db4326c98ce2dc2208a06fc2d754e304c48ce6a517753c62b1a9c1d5925b89707486d7fc08919e0a94eca07b1c54f15e299bd58bdfef9741538c7828b5d7d11a489f9c20d052b3471df475a051f9dd3739a927c89e357580a4c97b40234aa01ed3d5e0390dc982a7975880a0a089d613f26159af43616fd9455bb461f4869bfede26f2130835ed067a8b967bfb80", - "0xf90211a0395d87a95873cd98c21cf1df9421af03f7247880a2554e20738eec2c7507a494a0bcf6546339a1e7e14eb8fb572a968d217d2a0d1f3bc4257b22ef5333e9e4433ca012ae12498af8b2752c99efce07f3feef8ec910493be749acd63822c3558e6671a0dbf51303afdc36fc0c2d68a9bb05dab4f4917e7531e4a37ab0a153472d1b86e2a0ae90b50f067d9a2244e3d975233c0a0558c39ee152969f6678790abf773a9621a01d65cd682cc1be7c5e38d8da5c942e0a73eeaef10f387340a40a106699d494c3a06163b53d956c55544390c13634ea9aa75309f4fd866f312586942daf0f60fb37a058a52c1e858b1382a8893eb9c1f111f266eb9e21e6137aff0dddea243a567000a037b4b100761e02de63ea5f1fcfcf43e81a372dafb4419d126342136d329b7a7ba032472415864b08f808ba4374092003c8d7c40a9f7f9fe9cc8291f62538e1cc14a074e238ff5ec96b810364515551344100138916594d6af966170ff326a092fab0a0d31ac4eef14a79845200a496662e92186ca8b55e29ed0f9f59dbc6b521b116fea090607784fe738458b63c1942bba7c0321ae77e18df4961b2bc66727ea996464ea078f757653c1b63f72aff3dcc3f2a2e4c8cb4a9d36d1117c742833c84e20de994a0f78407de07f4b4cb4f899dfb95eedeb4049aeb5fc1635d65cf2f2f4dfd25d1d7a0862037513ba9d45354dd3e36264aceb2b862ac79d2050f14c95657e43a51b85c80", - "0xf90171a04ad705ea7bf04339fa36b124fa221379bd5a38ffe9a6112cb2d94be3a437b879a08e45b5f72e8149c01efcb71429841d6a8879d4bbe27335604a5bff8dfdf85dcea00313d9b2f7c03733d6549ea3b810e5262ed844ea12f70993d87d3e0f04e3979ea0b59e3cdd6750fa8b15164612a5cb6567cdfb386d4e0137fccee5f35ab55d0efda0fe6db56e42f2057a071c980a778d9a0b61038f269dd74a0e90155b3f40f14364a08538587f2378a0849f9608942cf481da4120c360f8391bbcc225d811823c6432a026eac94e755534e16f9552e73025d6d9c30d1d7682a4cb5bd7741ddabfd48c50a041557da9a74ca68da793e743e81e2029b2835e1cc16e9e25bd0c1e89d4ccad6980a041dda0a40a21ade3a20fcd1a4abb2a42b74e9a32b02424ff8db4ea708a5e0fb9a09aaf8326a51f613607a8685f57458329b41e938bb761131a5747e066b81a0a16808080a022e6cef138e16d2272ef58434ddf49260dc1de1f8ad6dfca3da5d2a92aaaadc58080", - "0xf851808080a009833150c367df138f1538689984b8a84fc55692d3d41fe4d1e5720ff5483a6980808080808080808080a0a319c1c415b271afc0adcb664e67738d103ac168e0bc0b7bd2da7966165cb9518080" - ], - "balance": 0, - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "nonce": 0, - "storageHash": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "storageProof": [ - { - "key": "0x0000000000000000000000000000000000000000000000000000000000000000", - "value": '0', - "proof": [] - }, - { - "key": "0x0000000000000000000000000000000000000000000000000000000000000001", - "value": '0', - "proof": [] - } - ] - } - ------------------------------------------------------------------------------- diff --git a/docs/web3-net.rst b/docs/web3-net.rst deleted file mode 100644 index d1ff4ad945e..00000000000 --- a/docs/web3-net.rst +++ /dev/null @@ -1,36 +0,0 @@ -.. _net: - -======== -web3.*.net -======== - - -The ``web3-net`` package allows you to interact with an Ethereum node's network properties. - - -.. code-block:: javascript - - var Net = require('web3-net'); - - // "Personal.providers.givenProvider" will be set if in an Ethereum supported browser. - var net = new Net(Net.givenProvider || 'ws://some.local-or-remote.node:8546'); - - - // or using the web3 umbrella package - - var Web3 = require('web3'); - var web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546'); - - // -> web3.eth.net - // -> web3.bzz.net - // -> web3.shh.net - - - ------------------------------------------------------------------------------- - - -.. include:: include_package-net.rst - - ------------------------------------------------------------------------------- diff --git a/docs/web3-shh.rst b/docs/web3-shh.rst deleted file mode 100644 index bb74e34e511..00000000000 --- a/docs/web3-shh.rst +++ /dev/null @@ -1,1025 +0,0 @@ -.. _shh: - -======== -web3.shh -======== - - -The ``web3-shh`` package allows you to interact with the whisper protocol for broadcasting. For more see `Whisper Overview `_. - - -.. code-block:: javascript - - var Shh = require('web3-shh'); - - // "Shh.providers.givenProvider" will be set if in an Ethereum supported browser. - var shh = new Shh(Shh.givenProvider || 'ws://some.local-or-remote.node:8546'); - - - // or using the web3 umbrella package - - var Web3 = require('web3'); - var web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546'); - - // -> web3.shh - - ------------------------------------------------------------------------------- - - -.. include:: include_package-core.rst - - - ------------------------------------------------------------------------------- - - -.. include:: include_package-net.rst - - ------------------------------------------------------------------------------- - -getVersion -===================== - -.. code-block:: javascript - - web3.shh.getVersion([callback]) - -Returns the version of the running whisper. - ----------- -Parameters ----------- - -1. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``String`` - The version of the current whisper running. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.getVersion() - .then(console.log); - > "5.0" - - ------------------------------------------------------------------------------- - -.. _shh-getinfo: - -getInfo -===================== - -.. code-block:: javascript - - web3.shh.getInfo([callback]) - -Gets information about the current whisper node. - ----------- -Parameters ----------- - -1. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Object`` - The information of the node with the following properties: - - - ``messages`` - ``Number``: Number of currently floating messages. - - ``maxMessageSize`` - ``Number``: The current message size limit in bytes. - - ``memory`` - ``Number``: The memory size of the floating messages in bytes. - - ``minPow`` - ``Number``: The current minimum PoW requirement. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.getInfo() - .then(console.log); - > { - "minPow": 0.8, - "maxMessageSize": 12345, - "memory": 1234335, - "messages": 20 - } - - ------------------------------------------------------------------------------- - -setMaxMessageSize -===================== - -.. code-block:: javascript - - web3.shh.setMaxMessageSize(size, [callback]) - -Sets the maximal message size allowed by this node. Incoming and outgoing messages with a larger size will be rejected. -Whisper message size can never exceed the limit imposed by the underlying P2P protocol (10 Mb). - ----------- -Parameters ----------- - -1. ``Number`` - Message size in bytes. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Boolean`` - ``true`` on success, error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.setMaxMessageSize(1234565) - .then(console.log); - > true - - ------------------------------------------------------------------------------- - -setMinPoW -===================== - -.. code-block:: javascript - - web3.shh.setMinPoW(pow, [callback]) - -Sets the minimal PoW required by this node. - -This experimental function was introduced for the future dynamic adjustment of PoW requirement. -If the node is overwhelmed with messages, it should raise the PoW requirement and notify the peers. -The new value should be set relative to the old value (e.g. double). The old value can be obtained via :ref:`web3.shh.getInfo() `. - ----------- -Parameters ----------- - -1. ``Number`` - The new PoW requirement. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Boolean`` - ``true`` on success, error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.setMinPoW(0.9) - .then(console.log); - > true - - ------------------------------------------------------------------------------- - -markTrustedPeer -===================== - -.. code-block:: javascript - - web3.shh.markTrustedPeer(enode, [callback]) - -Marks specific peer trusted, which will allow it to send historic (expired) messages. - -.. note:: This function is not adding new nodes, the node needs to be an existing peer. - ----------- -Parameters ----------- - -1. ``String`` - Enode of the trusted peer. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Boolean`` - ``true`` on success, error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.markTrustedPeer() - .then(console.log); - > true - - ------------------------------------------------------------------------------- - -newKeyPair -===================== - -.. code-block:: javascript - - web3.shh.newKeyPair([callback]) - -Generates a new public and private key pair for message decryption and encryption. - ----------- -Parameters ----------- - -1. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``String`` - Key ID on success and an error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.newKeyPair() - .then(console.log); - > "5e57b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f" - - ------------------------------------------------------------------------------- - -addPrivateKey -===================== - -.. code-block:: javascript - - web3.shh.addPrivateKey(privateKey, [callback]) - -Stores a key pair derived from a private key, and returns its ID. - ----------- -Parameters ----------- - -1. ``String`` - The private key as HEX bytes to import. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``String`` - Key ID on success and an error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.addPrivateKey('0x8bda3abeb454847b515fa9b404cede50b1cc63cfdeddd4999d074284b4c21e15') - .then(console.log); - > "3e22b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f" - - ------------------------------------------------------------------------------- - -deleteKeyPair -===================== - -.. code-block:: javascript - - web3.shh.deleteKeyPair(id, [callback]) - -Deletes the specifies key if it exists. - ----------- -Parameters ----------- - -1. ``String`` - The key pair ID, returned by the creation functions (``shh.newKeyPair`` and ``shh.addPrivateKey``). -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Boolean`` - ``true`` on success, error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.deleteKeyPair('3e22b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f') - .then(console.log); - > true - - ------------------------------------------------------------------------------- - -hasKeyPair -===================== - -.. code-block:: javascript - - web3.shh.hasKeyPair(id, [callback]) - -Checks if the whisper node has a private key of a key pair matching the given ID. - ----------- -Parameters ----------- - -1. ``String`` - The key pair ID, returned by the creation functions (``shh.newKeyPair`` and ``shh.addPrivateKey``). -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Boolean`` - ``true`` on if the key pair exist in the node, ``false`` if not. Error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.hasKeyPair('fe22b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f') - .then(console.log); - > true - - ------------------------------------------------------------------------------- - -getPublicKey -===================== - -.. code-block:: javascript - - web3.shh.getPublicKey(id, [callback]) - -Returns the public key for a key pair ID. - ----------- -Parameters ----------- - -1. ``String`` - The key pair ID, returned by the creation functions (``shh.newKeyPair`` and ``shh.addPrivateKey``). -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``String`` - Public key on success and an error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.getPublicKey('3e22b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f') - .then(console.log); - > "0x04d1574d4eab8f3dde4d2dc7ed2c4d699d77cbbdd09167b8fffa099652ce4df00c4c6e0263eafe05007a46fdf0c8d32b11aeabcd3abbc7b2bc2bb967368a68e9c6" - - ------------------------------------------------------------------------------- - -getPrivateKey -===================== - -.. code-block:: javascript - - web3.shh.getPrivateKey(id, [callback]) - -Returns the private key for a key pair ID. - ----------- -Parameters ----------- - -1. ``String`` - The key pair ID, returned by the creation functions (``shh.newKeyPair`` and ``shh.addPrivateKey``). -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``String`` - Private key on success and an error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.getPrivateKey('3e22b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f') - .then(console.log); - > "0x234234e22b9ffc2387e18636e0534534a3d0c56b0243567432453264c16e78a2adc" - - ------------------------------------------------------------------------------- - -newSymKey -===================== - -.. code-block:: javascript - - web3.shh.newSymKey([callback]) - -Generates a random symmetric key and stores it under an ID, which is then returned. -Will be used for encrypting and decrypting of messages where the sym key is known to both parties. - ----------- -Parameters ----------- - -1. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``String`` - Key ID on success and an error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.newSymKey() - .then(console.log); - > "cec94d139ff51d7df1d228812b90c23ec1f909afa0840ed80f1e04030bb681e4" - - ------------------------------------------------------------------------------- - -addSymKey -===================== - -.. code-block:: javascript - - web3.shh.addSymKey(symKey, [callback]) - -Stores the key, and returns its ID. - ----------- -Parameters ----------- - -1. ``String`` - The raw key for symmetric encryption as HEX bytes. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``String`` - Key ID on success and an error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.addSymKey('0x5e11b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f') - .then(console.log); - > "fea94d139ff51d7df1d228812b90c23ec1f909afa0840ed80f1e04030bb681e4" - - ------------------------------------------------------------------------------- - -generateSymKeyFromPassword -===================== - -.. code-block:: javascript - - web3.shh.generateSymKeyFromPassword(password, [callback]) - -Generates the key from password, stores it, and returns its ID. - ----------- -Parameters ----------- - -1. ``String`` - A password to generate the sym key from. -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Promise|undefined`` - Returns the Key ID as Promise or undefined if a callback is defined. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.generateSymKeyFromPassword('Never use this password - password!') - .then(console.log); - > "2e57b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f" - - ------------------------------------------------------------------------------- - -hasSymKey -===================== - -.. code-block:: javascript - - web3.shh.hasSymKey(id, [callback]) - -Checks if there is a symmetric key stored with the given ID. - ----------- -Parameters ----------- - -1. ``String`` - The key pair ID, returned by the creation functions (``shh.newSymKey``, ``shh.addSymKey`` or ``shh.generateSymKeyFromPassword``). -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Boolean`` - ``true`` on if the symmetric key exist in the node, ``false`` if not. Error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.hasSymKey('f6dcf21ed6a17bd78d8c4c63195ab997b3b65ea683705501eae82d32667adc92') - .then(console.log); - > true - - ------------------------------------------------------------------------------- - -getSymKey -===================== - -.. code-block:: javascript - - web3.shh.getSymKey(id, [callback]) - -Returns the symmetric key associated with the given ID. - ----------- -Parameters ----------- - -1. ``String`` - The key pair ID, returned by the creation functions (``shh.newKeyPair`` and ``shh.addPrivateKey``). -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``String`` - The raw symmetric key on success and an error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.getSymKey('af33b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f') - .then(console.log); - > "0xa82a520aff70f7a989098376e48ec128f25f767085e84d7fb995a9815eebff0a" - - ------------------------------------------------------------------------------- - -deleteSymKey -===================== - -.. code-block:: javascript - - web3.shh.deleteSymKey(id, [callback]) - -Deletes the symmetric key associated with the given ID. - ----------- -Parameters ----------- - -1. ``String`` - The key pair ID, returned by the creation functions (``shh.newKeyPair`` and ``shh.addPrivateKey``). -2. ``Function`` - (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - - -``Boolean`` - ``true`` on if the symmetric key was deleted, error on failure. - - -------- -Example -------- - - -.. code-block:: javascript - - web3.shh.deleteSymKey('bf31b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f') - .then(console.log); - > true - - ------------------------------------------------------------------------------- - - -post -===================== - -.. code-block:: javascript - - web3.shh.post(object [, callback]) - -This method should be called, when we want to post whisper a message to the network. - ----------- -Parameters ----------- - -1. ``Object`` - The post object: - - ``symKeyID`` - ``String`` (optional): ID of symmetric key for message encryption (Either ``symKeyID`` or ``pubKey`` must be present. Can not be both.). - - ``pubKey`` - ``String`` (optional): The public key for message encryption (Either ``symKeyID`` or ``pubKey`` must be present. Can not be both.). - - ``sig`` - ``String`` (optional): The ID of the signing key. - - ``ttl`` - ``Number``: Time-to-live in seconds. - - ``topic`` - ``String``: 4 Bytes (mandatory when key is symmetric): Message topic. - - ``payload`` - ``String``: The payload of the message to be encrypted. - - ``padding`` - ``Number`` (optional): Padding (byte array of arbitrary length). - - ``powTime`` - ``Number`` (optional)?: Maximal time in seconds to be spent on proof of work. - - ``powTarget`` - ``Number`` (optional)?: Minimal PoW target required for this message. - - ``targetPeer`` - ``Number`` (optional): Peer ID (for peer-to-peer message only). -2. ``callback`` - ``Function``: (optional) Optional callback, returns an error object as first parameter and the result as second. - - -------- -Returns -------- - -``Promise`` - returns a promise. Upon success, the ``then`` function will be passed a string representing the hash of the sent message. On error, the ``catch`` function will be passed a string containing the reason for the error. - - -------- -Example -------- - -.. code-block:: javascript - - var identities = {}; - var subscription = null; - - Promise.all([ - web3.shh.newSymKey().then((id) => {identities.symKey = id;}), - web3.shh.newKeyPair().then((id) => {identities.keyPair = id;}) - - ]).then(() => { - - // will receive also its own message send, below - subscription = web3.shh.subscribe("messages", { - symKeyID: identities.symKey, - topics: ['0xffaadd11'] - }).on('data', console.log); - - }).then(() => { - web3.shh.post({ - symKeyID: identities.symKey, // encrypts using the sym key ID - sig: identities.keyPair, // signs the message using the keyPair ID - ttl: 10, - topic: '0xffaadd11', - payload: '0xffffffdddddd1122', - powTime: 3, - powTarget: 0.5 - }).then(h => console.log(`Message with hash ${h} was successfuly sent`)) - .catch(err => console.log("Error: ", err)); - }); - - - ------------------------------------------------------------------------------- - - -subscribe -===================== - -.. code-block:: javascript - - web3.shh.subscribe('messages', options [, callback]) - -Subscribe for incoming whisper messages. - - -.. _shh-subscribeoptions: - ----------- -Parameters ----------- - -1. ``"messages"`` - ``String``: Type of the subscription. -2. ``Object`` - The subscription options: - - ``symKeyID`` - ``String``: ID of symmetric key for message decryption. - - ``privateKeyID`` - ``String``: ID of private (asymmetric) key for message decryption. - - ``sig`` - ``String`` (optional): Public key of the signature, to verify. - - ``topics``- ``Array`` (optional when "privateKeyID" key is given): Filters messages by this topic(s). Each topic must be a 4 bytes HEX string. - - ``minPow`` - ``Number`` (optional): Minimal PoW requirement for incoming messages. - - ``allowP2P`` - ``Boolean`` (optional): Indicates if this filter allows processing of direct peer-to-peer messages (which are not to be forwarded any further, because they might be expired). This might be the case in some very rare cases, e.g. if you intend to communicate to MailServers, etc. -3. ``callback`` - ``Function``: (optional) Optional callback, returns an error object as first parameter and the result as second. Will be called for each incoming subscription, and the subscription itself as 3 parameter. - - -.. _shh-subscribenotificationreturns: - ----------- -Notification Returns ----------- - -``Object`` - The incoming message: - - - ``hash`` - ``String``: Hash of the enveloped message. - - ``sig`` - ``String``: Public key which signed this message. - - ``recipientPublicKey`` - ``String``: The recipients public key. - - ``timestamp`` - ``String``: Unix timestamp of the message genertion. - - ``ttl`` - ``Number``: Time-to-live in seconds. - - ``topic`` - ``String``: 4 Bytes HEX string message topic. - - ``payload`` - ``String``: Decrypted payload. - - ``padding`` - ``Number``: Optional padding (byte array of arbitrary length). - - ``pow`` - ``Number``: Proof of work value. - - ----------- -Example ----------- - -.. code-block:: javascript - - web3.shh.subscribe('messages', { - symKeyID: 'bf31b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f', - sig: '0x04d1574d4eab8f3dde4d2dc7ed2c4d699d77cbbdd09167b8fffa099652ce4df00c4c6e0263eafe05007a46fdf0c8d32b11aeabcd3abbc7b2bc2bb967368a68e9c6', - ttl: 20, - topics: ['0xffddaa11'], - minPow: 0.8, - }, function(error, message, subscription){ - - console.log(message); - > { - "hash": "0x4158eb81ad8e30cfcee67f20b1372983d388f1243a96e39f94fd2797b1e9c78e", - "padding": "0xc15f786f34e5cef0fef6ce7c1185d799ecdb5ebca72b3310648c5588db2e99a0d73301c7a8d90115a91213f0bc9c72295fbaf584bf14dc97800550ea53577c9fb57c0249caeb081733b4e605cdb1a6011cee8b6d8fddb972c2b90157e23ba3baae6c68d4f0b5822242bb2c4cd821b9568d3033f10ec1114f641668fc1083bf79ebb9f5c15457b538249a97b22a4bcc4f02f06dec7318c16758f7c008001c2e14eba67d26218ec7502ad6ba81b2402159d7c29b068b8937892e3d4f0d4ad1fb9be5e66fb61d3d21a1c3163bce74c0a9d16891e2573146aa92ecd7b91ea96a6987ece052edc5ffb620a8987a83ac5b8b6140d8df6e92e64251bf3a2cec0cca", - "payload": "0xdeadbeaf", - "pow": 0.5371803278688525, - "recipientPublicKey": null, - "sig": null, - "timestamp": 1496991876, - "topic": "0x01020304", - "ttl": 50 - } - }) - // or - .on('data', function(message){ ... }); - - ------------------------------------------------------------------------------- - - -clearSubscriptions -===================== - -.. code-block:: javascript - - web3.shh.clearSubscriptions() - -Resets subscriptions. - -.. note:: This will not reset subscriptions from other packages like ``web3-eth``, as they use their own requestManager. - ----------- -Parameters ----------- - -1. ``Boolean``: If ``true`` it keeps the ``"syncing"`` subscription. - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - web3.shh.subscribe('messages', {...} ,function(){ ... }); - - ... - - web3.shh.clearSubscriptions(); - - ------------------------------------------------------------------------------- - - -newMessageFilter -===================== - -.. code-block:: javascript - - web3.shh.newMessageFilter(options) - -Create a new filter within the node. This filter can be used to poll for new messages that match the set of criteria. - - ----------- -Parameters ----------- - -1. ``Object``: See :ref:`web3.shh.subscribe() options ` for details. - -------- -Returns -------- - -``String``: The filter ID. - -------- -Example -------- - -.. code-block:: javascript - - web3.shh.newMessageFilter() - .then(console.log); - > "2b47fbafb3cce24570812a82e6e93cd9e2551bbc4823f6548ff0d82d2206b326" - ------------------------------------------------------------------------------- - - -deleteMessageFilter -===================== - -.. code-block:: javascript - - web3.shh.deleteMessageFilter(id) - -Deletes a message filter in the node. - ----------- -Parameters ----------- - -1. ``String``: The filter ID created with ``shh.newMessageFilter()``. - -------- -Returns -------- - -``Boolean``: ``true`` on success, error on failure. - -------- -Example -------- - -.. code-block:: javascript - - web3.shh.deleteMessageFilter('2b47fbafb3cce24570812a82e6e93cd9e2551bbc4823f6548ff0d82d2206b326') - .then(console.log); - > true - - ------------------------------------------------------------------------------- - - -getFilterMessages -===================== - -.. code-block:: javascript - - web3.shh.getFilterMessages(id) - -Retrieve messages that match the filter criteria and are received between the last time this function was called and now. - ----------- -Parameters ----------- - -1. ``String``: The filter ID created with ``shh.newMessageFilter()``. - -------- -Returns -------- - -``Array``: Returns an array of message objects like :ref:`web3.shh.subscribe() notification returns ` - -------- -Example -------- - -.. code-block:: javascript - - web3.shh.getFilterMessages('2b47fbafb3cce24570812a82e6e93cd9e2551bbc4823f6548ff0d82d2206b326') - .then(console.log); - > [{ - "hash": "0x4158eb81ad8e30cfcee67f20b1372983d388f1243a96e39f94fd2797b1e9c78e", - "padding": "0xc15f786f34e5cef0fef6ce7c1185d799ecdb5ebca72b3310648c5588db2e99a0d73301c7a8d90115a91213f0bc9c72295fbaf584bf14dc97800550ea53577c9fb57c0249caeb081733b4e605cdb1a6011cee8b6d8fddb972c2b90157e23ba3baae6c68d4f0b5822242bb2c4cd821b9568d3033f10ec1114f641668fc1083bf79ebb9f5c15457b538249a97b22a4bcc4f02f06dec7318c16758f7c008001c2e14eba67d26218ec7502ad6ba81b2402159d7c29b068b8937892e3d4f0d4ad1fb9be5e66fb61d3d21a1c3163bce74c0a9d16891e2573146aa92ecd7b91ea96a6987ece052edc5ffb620a8987a83ac5b8b6140d8df6e92e64251bf3a2cec0cca", - "payload": "0xdeadbeaf", - "pow": 0.5371803278688525, - "recipientPublicKey": null, - "sig": null, - "timestamp": 1496991876, - "topic": "0x01020304", - "ttl": 50 - },{...}] - - diff --git a/docs/web3-utils.rst b/docs/web3-utils.rst deleted file mode 100644 index 46ab23a07fb..00000000000 --- a/docs/web3-utils.rst +++ /dev/null @@ -1,1428 +0,0 @@ -.. _utils: - -======== -web3.utils -======== - -This package provides utility functions for Ethereum dapps and other web3.js packages. - ------------------------------------------------------------------------------- - -Bloom Filters -===================== - ------------------------ -What are bloom filters? ------------------------ - -A Bloom filter is a probabilistic, space-efficient data structure used for fast checks of set membership. That probably doesn’t mean much to you yet, and so let’s explore how bloom filters might be used. - -Imagine that we have some large set of data, and we want to be able to quickly test if some element is currently in that set. The naive way of checking might be to query the set to see if our element is in there. That’s probably fine if our data set is relatively small. Unfortunately, if our data set is really big, this search might take a while. Luckily, we have tricks to speed things up in the ethereum world! - -A bloom filter is one of these tricks. The basic idea behind the Bloom filter is to hash each new element that goes into the data set, take certain bits from this hash, and then use those bits to fill in parts of a fixed-size bit array (e.g. set certain bits to 1). This bit array is called a bloom filter. - -Later, when we want to check if an element is in the set, we simply hash the element and check that the right bits are in the bloom filter. If at least one of the bits is 0, then the element definitely isn’t in our data set! If all of the bits are 1, then the element might be in the data set, but we need to actually query the database to be sure. So we might have false positives, but we’ll never have false negatives. This can greatly reduce the number of database queries we have to make. - -**Real Life Example** - -An ethereum real life example in where this is useful is if you want to update a users balance on every new block so it stays as close to real time as possible. Without using a bloom filter on every new block you would have to force the balances even if that user may not of had any activity within that block. But if you use the logBlooms from the block you can test the bloom filter against the users ethereum address before you do any more slow operations, this will dramatically decrease the amount of calls you do as you will only be doing those extra operations if that ethereum address is within that block (minus the false positives outcome which will be negligible). This will be highly performant for your app. - ---------- -Functions ---------- - -- `web3.utils.isBloom `_ -- `web3.utils.isUserEthereumAddressInBloom `_ -- `web3.utils.isContractAddressInBloom `_ -- `web3.utils.isTopic `_ -- `web3.utils.isTopicInBloom `_ -- `web3.utils.isInBloom `_ - - -.. note:: Please raise any issues `here `_ - - ------------------------------------------------------------------------------- - -randomHex -===================== - -.. code-block:: javascript - - web3.utils.randomHex(size) - -The `randomHex `_ library to generate cryptographically strong pseudo-random HEX strings from a given byte size. - ----------- -Parameters ----------- - -1. ``size`` - ``Number``: The byte size for the HEX string, e.g. ``32`` will result in a 32 bytes HEX string with 64 characters preficed with "0x". - -------- -Returns -------- - -``String``: The generated random HEX string. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.randomHex(32) - > "0xa5b9d60f32436310afebcfda832817a68921beb782fabf7915cc0460b443116a" - - web3.utils.randomHex(4) - > "0x6892ffc6" - - web3.utils.randomHex(2) - > "0x99d6" - - web3.utils.randomHex(1) - > "0x9a" - - web3.utils.randomHex(0) - > "0x" - - - - ------------------------------------------------------------------------------- - -_ -===================== - -.. code-block:: javascript - - web3.utils._() - -The `underscore `_ library for many convenience JavaScript functions. - -See the `underscore API reference `_ for details. - -------- -Example -------- - -.. code-block:: javascript - - var _ = web3.utils._; - - _.union([1,2],[3]); - > [1,2,3] - - _.each({my: 'object'}, function(value, key){ ... }) - - ... - - - ------------------------------------------------------------------------------- - -.. _utils-bn: - -BN -===================== - -.. code-block:: javascript - - web3.utils.BN(mixed) - -The `BN.js `_ library for calculating with big numbers in JavaScript. -See the `BN.js documentation `_ for details. - -.. note:: For safe conversion of many types, incl `BigNumber.js `_ use :ref:`utils.toBN ` - ----------- -Parameters ----------- - -1. ``mixed`` - ``String|Number``: A number, number string or HEX string to convert to a BN object. - -------- -Returns -------- - -``Object``: The `BN.js `_ instance. - -------- -Example -------- - -.. code-block:: javascript - - var BN = web3.utils.BN; - - new BN(1234).toString(); - > "1234" - - new BN('1234').add(new BN('1')).toString(); - > "1235" - - new BN('0xea').toString(); - > "234" - - ------------------------------------------------------------------------------- - -isBN -===================== - -.. code-block:: javascript - - web3.utils.isBN(bn) - - -Checks if a given value is a `BN.js `_ instance. - - ----------- -Parameters ----------- - -1. ``bn`` - ``Object``: An `BN.js `_ instance. - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - var number = new BN(10); - - web3.utils.isBN(number); - > true - - ------------------------------------------------------------------------------- - -isBigNumber -===================== - -.. code-block:: javascript - - web3.utils.isBigNumber(bignumber) - - -Checks if a given value is a `BigNumber.js `_ instance. - - ----------- -Parameters ----------- - -1. ``bignumber`` - ``Object``: A `BigNumber.js `_ instance. - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - var number = new BigNumber(10); - - web3.utils.isBigNumber(number); - > true - - ------------------------------------------------------------------------------- - -.. _utils-sha3: - -sha3 -===================== - -.. code-block:: javascript - - web3.utils.sha3(string) - web3.utils.keccak256(string) // ALIAS - -Will calculate the sha3 of the input. - -.. note:: To mimic the sha3 behaviour of solidity use :ref:`soliditySha3 ` - ----------- -Parameters ----------- - -1. ``string`` - ``String``: A string to hash. - -------- -Returns -------- - -``String``: the result hash. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.sha3('234'); // taken as string - > "0xc1912fee45d61c87cc5ea59dae311904cd86b84fee17cc96966216f811ce6a79" - - web3.utils.sha3(new BN('234')); - > "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a" - - web3.utils.sha3(234); - > null // can't calculate the hash of a number - - web3.utils.sha3(0xea); // same as above, just the HEX representation of the number - > null - - web3.utils.sha3('0xea'); // will be converted to a byte array first, and then hashed - > "0x2f20677459120677484f7104c76deb6846a2c071f9b3152c103bb12cd54d1a4a" - - ------------------------------------------------------------------------------- - - -sha3Raw -===================== - -.. code-block:: javascript - - web3.utils.sha3Raw(string) - -Will calculate the sha3 of the input but does return the hash value instead of ``null`` if for example a empty string is passed. - -.. note:: Further details about this function can be seen here :ref:`sha3 ` - - ------------------------------------------------------------------------------- - -.. _utils-soliditysha3: - - -soliditySha3 -===================== - -.. code-block:: javascript - - web3.utils.soliditySha3(param1 [, param2, ...]) - -Will calculate the sha3 of given input parameters in the same way solidity would. -This means arguments will be ABI converted and tightly packed before being hashed. - ----------- -Parameters ----------- - -1. ``paramX`` - ``Mixed``: Any type, or an object with ``{type: 'uint', value: '123456'}`` or ``{t: 'bytes', v: '0xfff456'}``. Basic types are autodetected as follows: - - - ``String`` non numerical UTF-8 string is interpreted as ``string``. - - ``String|Number|BN|HEX`` positive number is interpreted as ``uint256``. - - ``String|Number|BN`` negative number is interpreted as ``int256``. - - ``Boolean`` as ``bool``. - - ``String`` HEX string with leading ``0x`` is interpreted as ``bytes``. - - ``HEX`` HEX number representation is interpreted as ``uint256``. - -------- -Returns -------- - -``String``: the result hash. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.soliditySha3('234564535', '0xfff23243', true, -10); - // auto detects: uint256, bytes, bool, int256 - > "0x3e27a893dc40ef8a7f0841d96639de2f58a132be5ae466d40087a2cfa83b7179" - - - web3.utils.soliditySha3('Hello!%'); // auto detects: string - > "0x661136a4267dba9ccdf6bfddb7c00e714de936674c4bdb065a531cf1cb15c7fc" - - - web3.utils.soliditySha3('234'); // auto detects: uint256 - > "0x61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2" - - web3.utils.soliditySha3(0xea); // same as above - > "0x61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2" - - web3.utils.soliditySha3(new BN('234')); // same as above - > "0x61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2" - - web3.utils.soliditySha3({type: 'uint256', value: '234'})); // same as above - > "0x61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2" - - web3.utils.soliditySha3({t: 'uint', v: new BN('234')})); // same as above - > "0x61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2" - - - web3.utils.soliditySha3('0x407D73d8a49eeb85D32Cf465507dd71d507100c1'); - > "0x4e8ebbefa452077428f93c9520d3edd60594ff452a29ac7d2ccc11d47f3ab95b" - - web3.utils.soliditySha3({t: 'bytes', v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1'}); - > "0x4e8ebbefa452077428f93c9520d3edd60594ff452a29ac7d2ccc11d47f3ab95b" // same result as above - - - web3.utils.soliditySha3({t: 'address', v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1'}); - > "0x4e8ebbefa452077428f93c9520d3edd60594ff452a29ac7d2ccc11d47f3ab95b" // same as above, but will do a checksum check, if its multi case - - - web3.utils.soliditySha3({t: 'bytes32', v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1'}); - > "0x3c69a194aaf415ba5d6afca734660d0a3d45acdc05d54cd1ca89a8988e7625b4" // different result as above - - - web3.utils.soliditySha3({t: 'string', v: 'Hello!%'}, {t: 'int8', v:-23}, {t: 'address', v: '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d'}); - > "0xa13b31627c1ed7aaded5aecec71baf02fe123797fffd45e662eac8e06fbe4955" - - - ------------------------------------------------------------------------------- - -.. _utils-soliditysha3Raw: - - -soliditySha3Raw -===================== - -.. code-block:: javascript - - web3.utils.soliditySha3Raw(param1 [, param2, ...]) - -Will calculate the sha3 of given input parameters in the same way solidity would. -This means arguments will be ABI converted and tightly packed before being hashed. -The difference between this function and the ``soliditySha3`` function is that it will return the hash value instead of ``null`` if for example a empty string is given. - - -.. note:: Further details about this function can be seen here :ref:`soliditySha3 ` - - ------------------------------------------------------------------------------- - -isHex -===================== - -.. code-block:: javascript - - web3.utils.isHex(hex) - -Checks if a given string is a HEX string. - ----------- -Parameters ----------- - -1. ``hex`` - ``String|HEX``: The given HEX string. - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.isHex('0xc1912'); - > true - - web3.utils.isHex(0xc1912); - > true - - web3.utils.isHex('c1912'); - > true - - web3.utils.isHex(345); - > true // this is tricky, as 345 can be a a HEX representation or a number, be careful when not having a 0x in front! - - web3.utils.isHex('0xZ1912'); - > false - - web3.utils.isHex('Hello'); - > false - ------------------------------------------------------------------------------- - -isHexStrict -===================== - -.. code-block:: javascript - - web3.utils.isHexStrict(hex) - -Checks if a given string is a HEX string. Difference to ``web3.utils.isHex()`` is that it expects HEX to be prefixed with ``0x``. - ----------- -Parameters ----------- - -1. ``hex`` - ``String|HEX``: The given HEX string. - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.isHexStrict('0xc1912'); - > true - - web3.utils.isHexStrict(0xc1912); - > false - - web3.utils.isHexStrict('c1912'); - > false - - web3.utils.isHexStrict(345); - > false // this is tricky, as 345 can be a a HEX representation or a number, be careful when not having a 0x in front! - - web3.utils.isHexStrict('0xZ1912'); - > false - - web3.utils.isHex('Hello'); - > false - ------------------------------------------------------------------------------- - -isAddress -===================== - -.. code-block:: javascript - - web3.utils.isAddress(address) - -Checks if a given string is a valid Ethereum address. -It will also check the checksum, if the address has upper and lowercase letters. - ----------- -Parameters ----------- - -1. ``address`` - ``String``: An address string. - -------- -Returns -------- - -``Boolean`` - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.isAddress('0xc1912fee45d61c87cc5ea59dae31190fffff232d'); - > true - - web3.utils.isAddress('c1912fee45d61c87cc5ea59dae31190fffff232d'); - > true - - web3.utils.isAddress('0XC1912FEE45D61C87CC5EA59DAE31190FFFFF232D'); - > true // as all is uppercase, no checksum will be checked - - web3.utils.isAddress('0xc1912fEE45d61C87Cc5EA59DaE31190FFFFf232d'); - > true - - web3.utils.isAddress('0xC1912fEE45d61C87Cc5EA59DaE31190FFFFf232d'); - > false // wrong checksum - ------------------------------------------------------------------------------- - - -toChecksumAddress -===================== - -.. code-block:: javascript - - web3.utils.toChecksumAddress(address) - -Will convert an upper or lowercase Ethereum address to a checksum address. - ----------- -Parameters ----------- - -1. ``address`` - ``String``: An address string. - -------- -Returns -------- - -``String``: The checksum address. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.toChecksumAddress('0xc1912fee45d61c87cc5ea59dae31190fffff232d'); - > "0xc1912fEE45d61C87Cc5EA59DaE31190FFFFf232d" - - web3.utils.toChecksumAddress('0XC1912FEE45D61C87CC5EA59DAE31190FFFFF232D'); - > "0xc1912fEE45d61C87Cc5EA59DaE31190FFFFf232d" // same as above - - ------------------------------------------------------------------------------- - - -checkAddressChecksum -===================== - -.. code-block:: javascript - - web3.utils.checkAddressChecksum(address) - -Checks the checksum of a given address. Will also return false on non-checksum addresses. - ----------- -Parameters ----------- - -1. ``address`` - ``String``: An address string. - -------- -Returns -------- - -``Boolean``: ``true`` when the checksum of the address is valid, ``false`` if its not a checksum address, or the checksum is invalid. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.checkAddressChecksum('0xc1912fEE45d61C87Cc5EA59DaE31190FFFFf232d'); - > true - - ------------------------------------------------------------------------------- - - -toHex -===================== - -.. code-block:: javascript - - web3.utils.toHex(mixed) - -Will auto convert any given value to HEX. -Number strings will interpreted as numbers. -Text strings will be interpreted as UTF-8 strings. - ----------- -Parameters ----------- - -1. ``mixed`` - ``String|Number|BN|BigNumber``: The input to convert to HEX. - -------- -Returns -------- - -``String``: The resulting HEX string. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.toHex('234'); - > "0xea" - - web3.utils.toHex(234); - > "0xea" - - web3.utils.toHex(new BN('234')); - > "0xea" - - web3.utils.toHex(new BigNumber('234')); - > "0xea" - - web3.utils.toHex('I have 100€'); - > "0x49206861766520313030e282ac" - ------------------------------------------------------------------------------- - -stripHexPrefix -===================== - -.. code-block:: javascript - web3.utils.stripHexPrefix(str) -Returns provided string without 0x prefix. - ----------- -Parameters ----------- - -1. ``str`` - ``string``: Input string - -------- -Returns -------- - -``String``: The input string without 0x prefix. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.stripHexPrefix('234'); - > "234" - - web3.utils.stripHexPrefix('0x234'); - > "234" - - web3.utils.stripHexPrefix(42); - > 42 - ------------------------------------------------------------------------------- - -.. _utils-tobn: - -toBN -===================== - -.. code-block:: javascript - - web3.utils.toBN(number) - -Will safely convert any given value (including `BigNumber.js `_ instances) into a `BN.js `_ instance, for handling big numbers in JavaScript. - -.. note:: For just the `BN.js `_ class use :ref:`utils.BN ` - ----------- -Parameters ----------- - -1. ``number`` - ``String|Number|HEX``: Number to convert to a big number. - -------- -Returns -------- - -``Object``: The `BN.js `_ instance. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.toBN(1234).toString(); - > "1234" - - web3.utils.toBN('1234').add(web3.utils.toBN('1')).toString(); - > "1235" - - web3.utils.toBN('0xea').toString(); - > "234" - - ------------------------------------------------------------------------------- - - -hexToNumberString -===================== - -.. code-block:: javascript - - web3.utils.hexToNumberString(hex) - -Returns the number representation of a given HEX value as a string. - ----------- -Parameters ----------- - -1. ``hexString`` - ``String|HEX``: A string to hash. - -------- -Returns -------- - -``String``: The number as a string. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.hexToNumberString('0xea'); - > "234" - - ------------------------------------------------------------------------------- - -hexToNumber -===================== - -.. code-block:: javascript - - web3.utils.hexToNumber(hex) - web3.utils.toDecimal(hex) // ALIAS, deprecated - -Returns the number representation of a given HEX value. - -.. note:: This is not useful for big numbers, rather use :ref:`utils.toBN ` instead. - ----------- -Parameters ----------- - -1. ``hexString`` - ``String|HEX``: A string to hash. - -------- -Returns -------- - -``Number`` - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.hexToNumber('0xea'); - > 234 - - ------------------------------------------------------------------------------- - -numberToHex -===================== - -.. code-block:: javascript - - web3.utils.numberToHex(number) - web3.utils.fromDecimal(number) // ALIAS, deprecated - -Returns the HEX representation of a given number value. - ----------- -Parameters ----------- - -1. ``number`` - ``String|Number|BN|BigNumber``: A number as string or number. - -------- -Returns -------- - -``String``: The HEX value of the given number. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.numberToHex('234'); - > '0xea' - - ------------------------------------------------------------------------------- - - -hexToUtf8 -===================== - -.. code-block:: javascript - - web3.utils.hexToUtf8(hex) - web3.utils.hexToString(hex) // ALIAS - web3.utils.toUtf8(hex) // ALIAS, deprecated - -Returns the UTF-8 string representation of a given HEX value. - - ----------- -Parameters ----------- - -1. ``hex`` - ``String``: A HEX string to convert to a UTF-8 string. - -------- -Returns -------- - -``String``: The UTF-8 string. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.hexToUtf8('0x49206861766520313030e282ac'); - > "I have 100€" - - ------------------------------------------------------------------------------- - -hexToAscii -===================== - -.. code-block:: javascript - - web3.utils.hexToAscii(hex) - web3.utils.toAscii(hex) // ALIAS, deprecated - -Returns the ASCII string representation of a given HEX value. - - ----------- -Parameters ----------- - -1. ``hex`` - ``String``: A HEX string to convert to a ASCII string. - -------- -Returns -------- - -``String``: The ASCII string. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.hexToAscii('0x4920686176652031303021'); - > "I have 100!" - - ------------------------------------------------------------------------------- - -.. _utils-utf8tohex: - -utf8ToHex -===================== - -.. code-block:: javascript - - web3.utils.utf8ToHex(string) - web3.utils.stringToHex(string) // ALIAS - web3.utils.fromUtf8(string) // ALIAS, deprecated - -Returns the HEX representation of a given UTF-8 string. - - ----------- -Parameters ----------- - -1. ``string`` - ``String``: A UTF-8 string to convert to a HEX string. - -------- -Returns -------- - -``String``: The HEX string. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.utf8ToHex('I have 100€'); - > "0x49206861766520313030e282ac" - - ------------------------------------------------------------------------------- - -asciiToHex -===================== - -.. code-block:: javascript - - web3.utils.asciiToHex(string) - web3.utils.fromAscii(string) // ALIAS, deprecated - - -Returns the HEX representation of a given ASCII string. - - ----------- -Parameters ----------- - -1. ``string`` - ``String``: A ASCII string to convert to a HEX string. - -------- -Returns -------- - -``String``: The HEX string. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.asciiToHex('I have 100!'); - > "0x4920686176652031303021" - - ------------------------------------------------------------------------------- - -hexToBytes -===================== - -.. code-block:: javascript - - web3.utils.hexToBytes(hex) - -Returns a byte array from the given HEX string. - ----------- -Parameters ----------- - -1. ``hex`` - ``String|HEX``: A HEX to convert. - -------- -Returns -------- - -``Array``: The byte array. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.hexToBytes('0x000000ea'); - > [ 0, 0, 0, 234 ] - - web3.utils.hexToBytes(0x000000ea); - > [ 234 ] - - ------------------------------------------------------------------------------- - - -bytesToHex -===================== - -.. code-block:: javascript - - web3.utils.bytesToHex(byteArray) - -Returns a HEX string from a byte array. - ----------- -Parameters ----------- - -1. ``byteArray`` - ``Array``: A byte array to convert. - -------- -Returns -------- - -``String``: The HEX string. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.bytesToHex([ 72, 101, 108, 108, 111, 33, 36 ]); - > "0x48656c6c6f2125" - - - ------------------------------------------------------------------------------- - -toWei -===================== - -.. code-block:: javascript - - web3.utils.toWei(number [, unit]) - - -Converts any `ether value `_ value into `wei `_. - -.. note:: "wei" are the smallest ether unit, and you should always make calculations in wei and convert only for display reasons. - ----------- -Parameters ----------- - -1. ``number`` - ``String|BN``: The value. -2. ``unit`` - ``String`` (optional, defaults to ``"ether"``): The ether to convert from. Possible units are: - - ``noether``: '0' - - ``wei``: '1' - - ``kwei``: '1000' - - ``Kwei``: '1000' - - ``babbage``: '1000' - - ``femtoether``: '1000' - - ``mwei``: '1000000' - - ``Mwei``: '1000000' - - ``lovelace``: '1000000' - - ``picoether``: '1000000' - - ``gwei``: '1000000000' - - ``Gwei``: '1000000000' - - ``shannon``: '1000000000' - - ``nanoether``: '1000000000' - - ``nano``: '1000000000' - - ``szabo``: '1000000000000' - - ``microether``: '1000000000000' - - ``micro``: '1000000000000' - - ``finney``: '1000000000000000' - - ``milliether``: '1000000000000000' - - ``milli``: '1000000000000000' - - ``ether``: '1000000000000000000' - - ``kether``: '1000000000000000000000' - - ``grand``: '1000000000000000000000' - - ``mether``: '1000000000000000000000000' - - ``gether``: '1000000000000000000000000000' - - ``tether``: '1000000000000000000000000000000' - -------- -Returns -------- - -``String|BN``: If a string is given it returns a number string, otherwise a `BN.js `_ instance. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.toWei('1', 'ether'); - > "1000000000000000000" - - web3.utils.toWei('1', 'finney'); - > "1000000000000000" - - web3.utils.toWei('1', 'szabo'); - > "1000000000000" - - web3.utils.toWei('1', 'shannon'); - > "1000000000" - - - ------------------------------------------------------------------------------- - -fromWei -===================== - -.. code-block:: javascript - - web3.utils.fromWei(number [, unit]) - - -Converts any `wei `_ value into a `ether value `_. - -.. note:: "wei" are the smallest ether unit, and you should always make calculations in wei and convert only for display reasons. - ----------- -Parameters ----------- - -1. ``number`` - ``String|BN``: The value in wei. -2. ``unit`` - ``String`` (optional, defaults to ``"ether"``): The ether to convert to. Possible units are: - - ``noether``: '0' - - ``wei``: '1' - - ``kwei``: '1000' - - ``Kwei``: '1000' - - ``babbage``: '1000' - - ``femtoether``: '1000' - - ``mwei``: '1000000' - - ``Mwei``: '1000000' - - ``lovelace``: '1000000' - - ``picoether``: '1000000' - - ``gwei``: '1000000000' - - ``Gwei``: '1000000000' - - ``shannon``: '1000000000' - - ``nanoether``: '1000000000' - - ``nano``: '1000000000' - - ``szabo``: '1000000000000' - - ``microether``: '1000000000000' - - ``micro``: '1000000000000' - - ``finney``: '1000000000000000' - - ``milliether``: '1000000000000000' - - ``milli``: '1000000000000000' - - ``ether``: '1000000000000000000' - - ``kether``: '1000000000000000000000' - - ``grand``: '1000000000000000000000' - - ``mether``: '1000000000000000000000000' - - ``gether``: '1000000000000000000000000000' - - ``tether``: '1000000000000000000000000000000' - -------- -Returns -------- - -``String``: It always returns a string number. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.fromWei('1', 'ether'); - > "0.000000000000000001" - - web3.utils.fromWei('1', 'finney'); - > "0.000000000000001" - - web3.utils.fromWei('1', 'szabo'); - > "0.000000000001" - - web3.utils.fromWei('1', 'shannon'); - > "0.000000001" - ------------------------------------------------------------------------------- - -unitMap -===================== - -.. code-block:: javascript - - web3.utils.unitMap - - -Shows all possible `ether value `_ and their amount in `wei `_. - ----------- -Return value ----------- - -- ``Object`` with the following properties: - - ``noether``: '0' - - ``wei``: '1' - - ``kwei``: '1000' - - ``Kwei``: '1000' - - ``babbage``: '1000' - - ``femtoether``: '1000' - - ``mwei``: '1000000' - - ``Mwei``: '1000000' - - ``lovelace``: '1000000' - - ``picoether``: '1000000' - - ``gwei``: '1000000000' - - ``Gwei``: '1000000000' - - ``shannon``: '1000000000' - - ``nanoether``: '1000000000' - - ``nano``: '1000000000' - - ``szabo``: '1000000000000' - - ``microether``: '1000000000000' - - ``micro``: '1000000000000' - - ``finney``: '1000000000000000' - - ``milliether``: '1000000000000000' - - ``milli``: '1000000000000000' - - ``ether``: '1000000000000000000' - - ``kether``: '1000000000000000000000' - - ``grand``: '1000000000000000000000' - - ``mether``: '1000000000000000000000000' - - ``gether``: '1000000000000000000000000000' - - ``tether``: '1000000000000000000000000000000' - - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.unitMap - > { - noether: '0', - wei: '1', - kwei: '1000', - Kwei: '1000', - babbage: '1000', - femtoether: '1000', - mwei: '1000000', - Mwei: '1000000', - lovelace: '1000000', - picoether: '1000000', - gwei: '1000000000', - Gwei: '1000000000', - shannon: '1000000000', - nanoether: '1000000000', - nano: '1000000000', - szabo: '1000000000000', - microether: '1000000000000', - micro: '1000000000000', - finney: '1000000000000000', - milliether: '1000000000000000', - milli: '1000000000000000', - ether: '1000000000000000000', - kether: '1000000000000000000000', - grand: '1000000000000000000000', - mether: '1000000000000000000000000', - gether: '1000000000000000000000000000', - tether: '1000000000000000000000000000000' - } - ------------------------------------------------------------------------------- - -padLeft -===================== - -.. code-block:: javascript - - web3.utils.padLeft(string, characterAmount [, sign]) - web3.utils.leftPad(string, characterAmount [, sign]) // ALIAS - - -Adds a padding on the left of a string, Useful for adding paddings to HEX strings. - - ----------- -Parameters ----------- - -1. ``string`` - ``String``: The string to add padding on the left. -2. ``characterAmount`` - ``Number``: The number of characters the total string should have. -3. ``sign`` - ``String`` (optional): The character sign to use, defaults to ``"0"``. - -------- -Returns -------- - -``String``: The padded string. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.padLeft('0x3456ff', 20); - > "0x000000000000003456ff" - - web3.utils.padLeft(0x3456ff, 20); - > "0x000000000000003456ff" - - web3.utils.padLeft('Hello', 20, 'x'); - > "xxxxxxxxxxxxxxxHello" - ------------------------------------------------------------------------------- - -padRight -===================== - -.. code-block:: javascript - - web3.utils.padRight(string, characterAmount [, sign]) - web3.utils.rightPad(string, characterAmount [, sign]) // ALIAS - - -Adds a padding on the right of a string, Useful for adding paddings to HEX strings. - - ----------- -Parameters ----------- - -1. ``string`` - ``String``: The string to add padding on the right. -2. ``characterAmount`` - ``Number``: The number of characters the total string should have. -3. ``sign`` - ``String`` (optional): The character sign to use, defaults to ``"0"``. - -------- -Returns -------- - -``String``: The padded string. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.padRight('0x3456ff', 20); - > "0x3456ff00000000000000" - - web3.utils.padRight(0x3456ff, 20); - > "0x3456ff00000000000000" - - web3.utils.padRight('Hello', 20, 'x'); - > "Helloxxxxxxxxxxxxxxx" - ------------------------------------------------------------------------------- - -toTwosComplement -===================== - -.. code-block:: javascript - - web3.utils.toTwosComplement(number) - - -Converts a negative numer into a two's complement. - - ----------- -Parameters ----------- - -1. ``number`` - ``Number|String|BigNumber``: The number to convert. - -------- -Returns -------- - -``String``: The converted hex string. - -------- -Example -------- - -.. code-block:: javascript - - web3.utils.toTwosComplement('-1'); - > "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - - web3.utils.toTwosComplement(-1); - > "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - - web3.utils.toTwosComplement('0x1'); - > "0x0000000000000000000000000000000000000000000000000000000000000001" - - web3.utils.toTwosComplement(-15); - > "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1" - - web3.utils.toTwosComplement('-0x1'); - > "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" diff --git a/docs/web3.rst b/docs/web3.rst deleted file mode 100644 index 5ae5666957f..00000000000 --- a/docs/web3.rst +++ /dev/null @@ -1,132 +0,0 @@ - -==== -Web3 -==== - -This is the main (or 'umbrella') class of the web3.js library. - -.. code-block:: javascript - - var Web3 = require('web3'); - - > Web3.utils - > Web3.version - > Web3.givenProvider - > Web3.providers - > Web3.modules - ------------------------------------------------------------------------------- - -Web3.modules -===================== - -.. code-block:: javascript - - Web3.modules - -Will return an object with the classes of all major sub modules, to be able to instantiate them manually. - -------- -Returns -------- - -``Object``: A list of module constructors: - - ``Eth`` - ``Constructor``: The Eth module for interacting with the Ethereum network (:ref:`web3.eth `). - - ``Net`` - ``Constructor``: The Net module for interacting with network properties (:ref:`web3.eth.net `). - - ``Personal`` - ``Constructor``: The Personal module for interacting with the Ethereum accounts (:ref:`web3.eth.personal `). - - ``Shh`` - ``Constructor``: The Shh module for interacting with the whisper protocol (:ref:`web3.shh `). - - ``Bzz`` - ``Constructor``: The Bzz module for interacting with the swarm network (:ref:`web3.bzz `). - -------- -Example -------- - -.. code-block:: javascript - - Web3.modules - > { - Eth: Eth(provider), - Net: Net(provider), - Personal: Personal(provider), - Shh: Shh(provider), - Bzz: Bzz(provider), - } - - ------------------------------------------------------------------------------- - -Web3 Instance -============= - -The Web3 class is an umbrella package to house all Ethereum related modules. - -.. code-block:: javascript - - var Web3 = require('web3'); - - // "Web3.providers.givenProvider" will be set if in an Ethereum supported browser. - var web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546'); - - > web3.eth - > web3.shh - > web3.bzz - > web3.utils - > web3.version - - ------------------------------------------------------------------------------- - -version -============ - -Static accessible property of the Web3 class and property of the instance as well. - -.. code-block:: javascript - - Web3.version - web3.version - -Contains the current package version of the web3.js library. - -------- -Returns -------- - -``String``: The current version. - -------- -Example -------- - -.. code-block:: javascript - - web3.version; - > "1.2.3" - - - ------------------------------------------------------------------------------- - - -utils -===================== - -Static accessible property of the Web3 class and property of the instance as well. - -.. code-block:: javascript - - Web3.utils - web3.utils - -Utility functions are also exposes on the ``Web3`` class object directly. - -See :ref:`web3.utils ` for more. - - ------------------------------------------------------------------------------- - - -.. include:: include_package-core.rst - - ------------------------------------------------------------------------------- diff --git a/docs/yarn.lock b/docs/yarn.lock new file mode 100644 index 00000000000..c92fb8060de --- /dev/null +++ b/docs/yarn.lock @@ -0,0 +1,8214 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@algolia/autocomplete-core@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz#8d758c8652742e2761450d2b615a841fca24e10e" + integrity sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ== + dependencies: + "@algolia/autocomplete-shared" "1.8.2" + +"@algolia/autocomplete-preset-algolia@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz#706e87f94c5f198c0e90502b97af09adeeddcc79" + integrity sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA== + dependencies: + "@algolia/autocomplete-shared" "1.8.2" + +"@algolia/autocomplete-shared@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz#e6972df5c6935a241f16e4909aa82902338e029d" + integrity sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g== + +"@algolia/cache-browser-local-storage@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.1.tgz#b2f204a436893b4856165670ec4dda12cdc055b8" + integrity sha512-e91Jpu93X3t3mVdQwF3ZDjSFMFIfzSc+I76G4EX8nl9RYXgqcjframoL05VTjcD2YCsI18RIHAWVCBoCXVZnrw== + dependencies: + "@algolia/cache-common" "4.17.1" + +"@algolia/cache-common@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.17.1.tgz#f4877f6fdc594a29ce6d032fae96f0517bf80b1d" + integrity sha512-fvi1WT8aSiGAKrcTw8Qg3RYgcwW8GZMHcqEm4AyDBEy72JZlFBSY80cTQ75MslINjCHXLDT+9EN8AGI9WVY7uA== + +"@algolia/cache-in-memory@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.1.tgz#7b3ab5f6de897677d92db549f8228966c62966d5" + integrity sha512-NbBt6eBWlsXc5geSpfPRC5dkIB/0Ptthw8r0yM5Z7D3sPlYdnTZSO9y9XWXIptRMwmZe4cM8iBMN8y0tzbcBkA== + dependencies: + "@algolia/cache-common" "4.17.1" + +"@algolia/client-account@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.17.1.tgz#81747c0828d2688af4a98bbed3d3b0aa7daa25f6" + integrity sha512-3rL/6ofJvyL+q8TiWM3qoM9tig+SY4gB1Vbsj+UeJPnJm8Khm+7OS+r+mFraqR6pTehYqN8yGYoE7x4diEn4aA== + dependencies: + "@algolia/client-common" "4.17.1" + "@algolia/client-search" "4.17.1" + "@algolia/transporter" "4.17.1" + +"@algolia/client-analytics@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.17.1.tgz#d6ecc75fd792fb1dee67c01497098ce175f1c4c9" + integrity sha512-Bepr2w249vODqeBtM7i++tPmUsQ9B81aupUGbDWmjA/FX+jzQqOdhW8w1CFO5kWViNKTbz2WBIJ9U3x8hOa4bA== + dependencies: + "@algolia/client-common" "4.17.1" + "@algolia/client-search" "4.17.1" + "@algolia/requester-common" "4.17.1" + "@algolia/transporter" "4.17.1" + +"@algolia/client-common@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.17.1.tgz#a8b561c1e3a19cce2c24e9a49bd822477c2f56d9" + integrity sha512-+r7kg4EgbFnGsDnoGSVNtXZO8xvZ0vzf1WAOV7sqV9PMf1bp6cpJP/3IuPrSk4t5w2KVl+pC8jfTM7HcFlfBEQ== + dependencies: + "@algolia/requester-common" "4.17.1" + "@algolia/transporter" "4.17.1" + +"@algolia/client-personalization@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.17.1.tgz#26b2c8e13e9b69afd4e2c17879f538d408b708f3" + integrity sha512-gJku9DG/THJpfsSlG/az0a3QIn+VVff9kKh8PG8+7ZfxOHS+C+Y5YSeZVsC+c2cfoKLPo3CuHIiJ/p86erR3bA== + dependencies: + "@algolia/client-common" "4.17.1" + "@algolia/requester-common" "4.17.1" + "@algolia/transporter" "4.17.1" + +"@algolia/client-search@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.17.1.tgz#defaf56083e613fb593a9a49837b6aa551ed38eb" + integrity sha512-Q5YfT5gVkx60PZDQBqp/zH9aUbBdC7HVvxupiHUgnCKqRQsRZjOhLest7AI6FahepuZLBZS62COrO7v+JvKY7w== + dependencies: + "@algolia/client-common" "4.17.1" + "@algolia/requester-common" "4.17.1" + "@algolia/transporter" "4.17.1" + +"@algolia/events@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" + integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== + +"@algolia/logger-common@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.17.1.tgz#fe50f67a86276cebdfd8337bc5d925f7a3bf9e43" + integrity sha512-Us28Ot+fLEmX9M96sa65VZ8EyEEzhYPxfhV9aQyKDjfXbUdJlJxKt6wZpoEg9RAPSdO8IjK9nmuW2P8au3rRsg== + +"@algolia/logger-console@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.17.1.tgz#d9d6dc0bb6ad1321b66163491cc4618d27beb73d" + integrity sha512-iKGQTpOjHiE64W3JIOu6dmDvn+AfYIElI9jf/Nt6umRPmP/JI9rK+OHUoW4pKrBtdG0DPd62ppeNXzSnLxY6/g== + dependencies: + "@algolia/logger-common" "4.17.1" + +"@algolia/requester-browser-xhr@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.1.tgz#8be50e4196cd9d1ec311970845a42f2aee35860e" + integrity sha512-W5mGfGDsyfVR+r4pUFrYLGBEM18gs38+GNt5PE5uPULy4uVTSnnVSkJkWeRkmLBk9zEZ/Nld8m4zavK6dtEuYg== + dependencies: + "@algolia/requester-common" "4.17.1" + +"@algolia/requester-common@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.17.1.tgz#3b3912c8df1e05f0fd49f4c9a7caa3fe45d2d995" + integrity sha512-HggXdjvVFQR0I5l7hM5WdHgQ1tqcRWeyXZz8apQ7zPWZhirmY2E9D6LVhDh/UnWQNEm7nBtM+eMFONJ3bZccIQ== + +"@algolia/requester-node-http@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.17.1.tgz#f4eeee985833ad2b51ac9ff757be5c1a786ff80a" + integrity sha512-NzFWecXT6d0PPsQY9L+/qoK2deF74OLcpvqCH+Vh3mh+QzPsFafcBExdguAjZsAWDn1R6JEeFW7/fo/p0SE57w== + dependencies: + "@algolia/requester-common" "4.17.1" + +"@algolia/transporter@4.17.1": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.17.1.tgz#9508e08e984e110603ec66a19362017c1df59e05" + integrity sha512-ZM+qhX47Vh46mWH8/U9ihvy98HdTYpYQDSlqBD7IbiUbbyoCMke+qmdSX2MGhR2FCcXBSxejsJKKVAfbpaLVgg== + dependencies: + "@algolia/cache-common" "4.17.1" + "@algolia/logger-common" "4.17.1" + "@algolia/requester-common" "4.17.1" + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.8.3": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/code-frame@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== + dependencies: + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.22.0", "@babel/compat-data@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.3.tgz#cd502a6a0b6e37d7ad72ce7e71a7160a3ae36f7e" + integrity sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ== + +"@babel/core@7.12.9": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.18.6", "@babel/core@^7.19.6": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.1.tgz#5de51c5206f4c6f5533562838337a603c1033cfd" + integrity sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.22.0" + "@babel/helper-compilation-targets" "^7.22.1" + "@babel/helper-module-transforms" "^7.22.1" + "@babel/helpers" "^7.22.0" + "@babel/parser" "^7.22.0" + "@babel/template" "^7.21.9" + "@babel/traverse" "^7.22.1" + "@babel/types" "^7.22.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.0": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.3.tgz#0ff675d2edb93d7596c5f6728b52615cfc0df01e" + integrity sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A== + dependencies: + "@babel/types" "^7.22.3" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/generator@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" + integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== + dependencies: + "@babel/types" "^7.23.0" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.3.tgz#c9b83d1ba74e163e023f008a3d3204588a7ceb60" + integrity sha512-ahEoxgqNoYXm0k22TvOke48i1PkavGu0qGCmcq9ugi6gnmvKNaMjKBSrZTnWUi1CFEeNAUiVba0Wtzm03aSkJg== + dependencies: + "@babel/types" "^7.22.3" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.1": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz#bfcd6b7321ffebe33290d68550e2c9d7eb7c7a58" + integrity sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ== + dependencies: + "@babel/compat-data" "^7.22.0" + "@babel/helper-validator-option" "^7.21.0" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.1": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.1.tgz#ae3de70586cc757082ae3eba57240d42f468c41b" + integrity sha512-SowrZ9BWzYFgzUMwUmowbPSGu6CXL5MSuuCkG3bejahSpSymioPmuLdhPxNOc9MjuNGjy7M/HaXvJ8G82Lywlw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.22.1" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-member-expression-to-functions" "^7.22.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.22.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-split-export-declaration" "^7.18.6" + semver "^6.3.0" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.1": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.1.tgz#a7ed9a8488b45b467fca353cd1a44dc5f0cf5c70" + integrity sha512-WWjdnfR3LPIe+0EY8td7WmjhytxXtjKAEpnAxun/hkNiyOaPlvGK+NZaBFIdi9ndYV3Gav7BpFvtUwnaJlwi1w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.3.1" + semver "^6.3.0" + +"@babel/helper-define-polyfill-provider@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz#487053f103110f25b9755c5980e031e93ced24d8" + integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.1": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz#ac3a56dbada59ed969d712cf527bd8271fe3eba8" + integrity sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA== + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-member-expression-to-functions@^7.22.0": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.3.tgz#4b77a12c1b4b8e9e28736ed47d8b91f00976911f" + integrity sha512-Gl7sK04b/2WOb6OPVeNy9eFKeD3L6++CzL3ykPOWqTn08xgYYK0wz4TUh2feIImDXxcVW3/9WQ1NMKY66/jfZA== + dependencies: + "@babel/types" "^7.22.3" + +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== + dependencies: + "@babel/types" "^7.21.4" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.5", "@babel/helper-module-transforms@^7.22.1": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz#e0cad47fedcf3cae83c11021696376e2d5a50c63" + integrity sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.1" + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-simple-access" "^7.21.5" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.21.9" + "@babel/traverse" "^7.22.1" + "@babel/types" "^7.22.0" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" + integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== + +"@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7", "@babel/helper-replace-supers@^7.22.1": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.1.tgz#38cf6e56f7dc614af63a21b45565dd623f0fdc95" + integrity sha512-ut4qrkE4AuSfrwHSps51ekR1ZY/ygrP1tp0WFm8oVq6nzc/hvfV/22JylndIbsf2U2M9LOMwiSddr6y+78j+OQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.1" + "@babel/helper-member-expression-to-functions" "^7.22.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/template" "^7.21.9" + "@babel/traverse" "^7.22.1" + "@babel/types" "^7.22.0" + +"@babel/helper-simple-access@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" + integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== + dependencies: + "@babel/types" "^7.21.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== + dependencies: + "@babel/types" "^7.20.0" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" + integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== + +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== + +"@babel/helper-wrap-function@^7.18.9": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== + dependencies: + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.22.0": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.3.tgz#53b74351da9684ea2f694bf0877998da26dd830e" + integrity sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w== + dependencies: + "@babel/template" "^7.21.9" + "@babel/traverse" "^7.22.1" + "@babel/types" "^7.22.3" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.21.9", "@babel/parser@^7.22.0": + version "7.22.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.4.tgz#a770e98fd785c231af9d93f6459d36770993fb32" + integrity sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA== + +"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" + integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.3.tgz#a75be1365c0c3188c51399a662168c1c98108659" + integrity sha512-6r4yRwEnorYByILoDRnEqxtojYKuiIv9FojW2E8GUKo9eWBwbKcd9IiZOZpdyXc64RmyGGyPu3/uAcrz/dq2kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-transform-optional-chaining" "^7.22.3" + +"@babel/plugin-proposal-object-rest-spread@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-private-property-in-object@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" + integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-syntax-import-attributes@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.3.tgz#d7168f22b9b49a6cc1792cec78e06a18ad2e7b4b" + integrity sha512-i35jZJv6aO7hxEbIWQ41adVfOzjm9dcYDNeWlBMd8p0ZQRtNUCBrmGwZt+H5lb+oOC9a3svp956KP0oWGA1YsA== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-jsx@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" + integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" + integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz#9bb42a53de447936a57ba256fbf537fc312b6929" + integrity sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-async-generator-functions@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.3.tgz#3ed99924c354fb9e80dabb2cc8d002c702e94527" + integrity sha512-36A4Aq48t66btydbZd5Fk0/xJqbpg/v4QWI4AH4cYHBXy9Mu42UOupZpebKFiCFNT9S9rJFcsld0gsv0ayLjtA== + dependencies: + "@babel/helper-environment-visitor" "^7.22.1" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" + integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" + integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-class-properties@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.3.tgz#3407145e513830df77f0cef828b8b231c166fe4c" + integrity sha512-mASLsd6rhOrLZ5F3WbCxkzl67mmOnqik0zrg5W6D/X0QMW7HtvnoL1dRARLKIbMP3vXwkwziuLesPqWVGIl6Bw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.1" + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-class-static-block@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.3.tgz#e352cf33567385c731a8f21192efeba760358773" + integrity sha512-5BirgNWNOx7cwbTJCOmKFJ1pZjwk5MUfMIwiBBvsirCJMZeQgs5pk6i1OlkVg+1Vef5LfBahFOrdCnAWvkVKMw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.1" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" + integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz#3a2d8bb771cd2ef1cd736435f6552fe502e11b44" + integrity sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/template" "^7.20.7" + +"@babel/plugin-transform-destructuring@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" + integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-dynamic-import@^7.22.1": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.1.tgz#6c56afaf896a07026330cf39714532abed8d9ed1" + integrity sha512-rlhWtONnVBPdmt+jeewS0qSnMz/3yLFrqAP8hHC6EDcrYRSyuz9f9yQhHvVn2Ad6+yO9fHXac5piudeYrInxwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-export-namespace-from@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.3.tgz#9b8700aa495007d3bebac8358d1c562434b680b9" + integrity sha512-5Ti1cHLTDnt3vX61P9KZ5IG09bFXp4cDVFJIAeCZuxu9OXXJJZp5iP0n/rzM2+iAutJY+KWEyyHcRaHlpQ/P5g== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz#e890032b535f5a2e237a18535f56a9fdaa7b83fc" + integrity sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-json-strings@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.3.tgz#a181b8679cf7c93e9d0e3baa5b1776d65be601a9" + integrity sha512-IuvOMdeOOY2X4hRNAT6kwbePtK21BUyrAEgLKviL8pL6AEEVUVcqtRdN/HJXBLGIbt9T3ETmXRnFedRRmQNTYw== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-logical-assignment-operators@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.3.tgz#9e021455810f33b0baccb82fb759b194f5dc36f0" + integrity sha512-CbayIfOw4av2v/HYZEsH+Klks3NC2/MFIR3QR8gnpGNNPEaq2fdlVCRYG/paKs7/5hvBLQ+H70pGWOHtlNEWNA== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" + integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== + dependencies: + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-modules-commonjs@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz#d69fb947eed51af91de82e4708f676864e5e47bc" + integrity sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ== + dependencies: + "@babel/helper-module-transforms" "^7.21.5" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-simple-access" "^7.21.5" + +"@babel/plugin-transform-modules-systemjs@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.3.tgz#cc507e03e88d87b016feaeb5dae941e6ef50d91e" + integrity sha512-V21W3bKLxO3ZjcBJZ8biSvo5gQ85uIXW2vJfh7JSWf/4SLUSr1tOoHX3ruN4+Oqa2m+BKfsxTR1I+PsvkIWvNw== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.22.1" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-validator-identifier" "^7.19.1" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.3.tgz#db6fb77e6b3b53ec3b8d370246f0b7cf67d35ab4" + integrity sha512-c6HrD/LpUdNNJsISQZpds3TXvfYIAbo+efE9aWmY/PmSRD0agrJ9cPMt4BmArwUQ7ZymEWTFjTyp+yReLJZh0Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.1" + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-new-target@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.3.tgz#deb0377d741cbee2f45305868b9026dcd6dd96e2" + integrity sha512-5RuJdSo89wKdkRTqtM9RVVJzHum9c2s0te9rB7vZC1zKKxcioWIy+xcu4OoIAjyFZhb/bp5KkunuLin1q7Ct+w== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.3.tgz#8c519f8bf5af94a9ca6f65cf422a9d3396e542b9" + integrity sha512-CpaoNp16nX7ROtLONNuCyenYdY/l7ZsR6aoVa7rW7nMWisoNoQNIH5Iay/4LDyRjKMuElMqXiBoOQCDLTMGZiw== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.3.tgz#02493070ca6685884b0eee705363ee4da2132ab0" + integrity sha512-+AF88fPDJrnseMh5vD9+SH6wq4ZMvpiTMHh58uLs+giMEyASFVhcT3NkoyO+NebFCNnpHJEq5AXO2txV4AGPDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.3.tgz#da6fba693effb8c203d8c3bdf7bf4e2567e802e9" + integrity sha512-38bzTsqMMCI46/TQnJwPPpy33EjLCc1Gsm2hRTF6zTMWnKsN61vdrpuzIEGQyKEhDSYDKyZHrrd5FMj4gcUHhw== + dependencies: + "@babel/compat-data" "^7.22.3" + "@babel/helper-compilation-targets" "^7.22.1" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.22.3" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-optional-catch-binding@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.3.tgz#e971a083fc7d209d9cd18253853af1db6d8dc42f" + integrity sha512-bnDFWXFzWY0BsOyqaoSXvMQ2F35zutQipugog/rqotL2S4ciFOKlRYUu9djt4iq09oh2/34hqfRR2k1dIvuu4g== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.3.tgz#5fd24a4a7843b76da6aeec23c7f551da5d365290" + integrity sha512-63v3/UFFxhPKT8j8u1jTTGVyITxl7/7AfOqK8C5gz1rHURPUGe3y5mvIf68eYKGoBNahtJnTxBKug4BQOnzeJg== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.3.tgz#24477acfd2fd2bc901df906c9bf17fbcfeee900d" + integrity sha512-x7QHQJHPuD9VmfpzboyGJ5aHEr9r7DsAsdxdhJiTB3J3j8dyl+NFZ+rX5Q2RWFDCs61c06qBfS4ys2QYn8UkMw== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-private-methods@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.3.tgz#adac38020bab5047482d3297107c1f58e9c574f6" + integrity sha512-fC7jtjBPFqhqpPAE+O4LKwnLq7gGkD3ZmC2E3i4qWH34mH3gOg2Xrq5YMHUq6DM30xhqM1DNftiRaSqVjEG+ug== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.1" + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-private-property-in-object@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.3.tgz#031621b02c7b7d95389de1a3dba2fe9e8c548e56" + integrity sha512-C7MMl4qWLpgVCbXfj3UW8rR1xeCnisQ0cU7YJHV//8oNBS0aCIVg1vFnZXxOckHhEpQyqNNkWmvSEWnMLlc+Vw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.22.1" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-constant-elements@^7.18.12": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.3.tgz#b87a436c3377f29b37409f9c02c99c9ce377909d" + integrity sha512-b5J6muxQYp4H7loAQv/c7GO5cPuRA6H5hx4gO+/Hn+Cu9MRQU0PNiUoWq1L//8sq6kFSNxGXFb2XTaUfa9y+Pg== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.18.6" + +"@babel/plugin-transform-react-jsx@^7.18.6", "@babel/plugin-transform-react-jsx@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.3.tgz#5a1f380df3703ba92eb1a930a539c6d88836f690" + integrity sha512-JEulRWG2f04a7L8VWaOngWiK6p+JOSpB+DAtwfJgOaej1qdbNxqtK7MwTBHjUA10NeFcszlFNqCdbRcirzh2uQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-jsx" "^7.21.4" + "@babel/types" "^7.22.3" + +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz#576c62f9923f94bcb1c855adc53561fd7913724e" + integrity sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + regenerator-transform "^0.15.1" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-runtime@^7.18.6": + version "7.22.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.4.tgz#f8353f313f18c3ce1315688631ec48657b97af42" + integrity sha512-Urkiz1m4zqiRo17klj+l3nXgiRTFQng91Bc1eiLF7BMQu1e7wE5Gcq9xSv062IF068NHjcutSbIMev60gXxAvA== + dependencies: + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-plugin-utils" "^7.21.5" + babel-plugin-polyfill-corejs2 "^0.4.3" + babel-plugin-polyfill-corejs3 "^0.8.1" + babel-plugin-polyfill-regenerator "^0.5.0" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" + integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.21.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.3.tgz#8f662cec8ba88c873f1c7663c0c94e3f68592f09" + integrity sha512-pyjnCIniO5PNaEuGxT28h0HbMru3qCVrMqVgVOz/krComdIrY9W6FCLBq9NWHY8HDGaUlan+UhmZElDENIfCcw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.22.1" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-typescript" "^7.21.4" + +"@babel/plugin-transform-unicode-escapes@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz#1e55ed6195259b0e9061d81f5ef45a9b009fb7f2" + integrity sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-unicode-property-regex@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.3.tgz#597b6a614dc93eaae605ee293e674d79d32eb380" + integrity sha512-5ScJ+OmdX+O6HRuMGW4kv7RL9vIKdtdAj9wuWUKy1wbHY3jaM/UlyIiC1G7J6UJiiyMukjjK0QwL3P0vBd0yYg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.1" + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-unicode-sets-regex@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.3.tgz#7c14ee33fa69782b0101d0f7143d3fc73ce00700" + integrity sha512-hNufLdkF8vqywRp+P55j4FHXqAX2LRUccoZHH7AFn1pq5ZOO2ISKW9w13bFZVjBoTqeve2HOgoJCcaziJVhGNw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.1" + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4": + version "7.22.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.4.tgz#c86a82630f0e8c61d9bb9327b7b896732028cbed" + integrity sha512-c3lHOjbwBv0TkhYCr+XCR6wKcSZ1QbQTVdSkZUaVpLv8CVWotBMArWUi5UAJrcrQaEnleVkkvaV8F/pmc/STZQ== + dependencies: + "@babel/compat-data" "^7.22.3" + "@babel/helper-compilation-targets" "^7.22.1" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.3" + "@babel/plugin-proposal-private-property-in-object" "^7.21.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-import-attributes" "^7.22.3" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.21.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.3" + "@babel/plugin-transform-async-to-generator" "^7.20.7" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.21.0" + "@babel/plugin-transform-class-properties" "^7.22.3" + "@babel/plugin-transform-class-static-block" "^7.22.3" + "@babel/plugin-transform-classes" "^7.21.0" + "@babel/plugin-transform-computed-properties" "^7.21.5" + "@babel/plugin-transform-destructuring" "^7.21.3" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-dynamic-import" "^7.22.1" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-export-namespace-from" "^7.22.3" + "@babel/plugin-transform-for-of" "^7.21.5" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-json-strings" "^7.22.3" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.3" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.20.11" + "@babel/plugin-transform-modules-commonjs" "^7.21.5" + "@babel/plugin-transform-modules-systemjs" "^7.22.3" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.3" + "@babel/plugin-transform-new-target" "^7.22.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.3" + "@babel/plugin-transform-numeric-separator" "^7.22.3" + "@babel/plugin-transform-object-rest-spread" "^7.22.3" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-optional-catch-binding" "^7.22.3" + "@babel/plugin-transform-optional-chaining" "^7.22.3" + "@babel/plugin-transform-parameters" "^7.22.3" + "@babel/plugin-transform-private-methods" "^7.22.3" + "@babel/plugin-transform-private-property-in-object" "^7.22.3" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.21.5" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.20.7" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.21.5" + "@babel/plugin-transform-unicode-property-regex" "^7.22.3" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/plugin-transform-unicode-sets-regex" "^7.22.3" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.22.4" + babel-plugin-polyfill-corejs2 "^0.4.3" + babel-plugin-polyfill-corejs3 "^0.8.1" + babel-plugin-polyfill-regenerator "^0.5.0" + core-js-compat "^3.30.2" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.18.6": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.3.tgz#2ec7f91d0c924fa2ea0c7cfbbf690bc62b79cd84" + integrity sha512-lxDz1mnZ9polqClBCVBjIVUypoB4qV3/tZUDb/IlYbW1kiiLaXaX+bInbRjl+lNQ/iUZraQ3+S8daEmoELMWug== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.22.3" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + +"@babel/preset-typescript@^7.18.6": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.5.tgz#68292c884b0e26070b4d66b202072d391358395f" + integrity sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-syntax-jsx" "^7.21.4" + "@babel/plugin-transform-modules-commonjs" "^7.21.5" + "@babel/plugin-transform-typescript" "^7.21.3" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime-corejs3@^7.18.6": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.3.tgz#a684fb6b2eb987d9eb4ee7f1bba832473a29f0f1" + integrity sha512-6bdmknScYKmt8I9VjsJuKKGr+TwUb555FTf6tT1P/ANlCjTHCiYLhiQ4X/O7J731w5NOqu8c1aYHEVuOwPz7jA== + dependencies: + core-js-pure "^3.30.2" + regenerator-runtime "^0.13.11" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.8.4": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.3.tgz#0a7fce51d43adbf0f7b517a71f4c3aaca92ebcbb" + integrity sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.21.9": + version "7.21.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.21.9.tgz#bf8dad2859130ae46088a99c1f265394877446fb" + integrity sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ== + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/parser" "^7.21.9" + "@babel/types" "^7.21.5" + +"@babel/template@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.20.5", "@babel/traverse@^7.22.1": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" + integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.0" + "@babel/types" "^7.23.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.7", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.22.0", "@babel/types@^7.22.3", "@babel/types@^7.22.4", "@babel/types@^7.4.4": + version "7.22.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.4.tgz#56a2653ae7e7591365dabf20b76295410684c071" + integrity sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA== + dependencies: + "@babel/helper-string-parser" "^7.21.5" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" + integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@discoveryjs/json-ext@0.5.7": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@docsearch/css@3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.4.0.tgz#4d4fc36352b06b512e97412c37c005f07c9a968b" + integrity sha512-Hg8Xfma+rFwRi6Y/pfei4FJoQ1hdVURmmNs/XPoMTCPAImU+d5yxj+M+qdLtNjWRpfWziU4dQcqY94xgFBn2dg== + +"@docsearch/react@^3.1.1": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.4.0.tgz#12ef4977064f7f8d02ea35706d60e172c101395a" + integrity sha512-ufrp5879XYGojgS30ZAp8H4qIMbahRHB9M85VDBP36Xgz5QjYM54i1URKj5e219F7gqTtOivfztFTij6itc0MQ== + dependencies: + "@algolia/autocomplete-core" "1.8.2" + "@algolia/autocomplete-preset-algolia" "1.8.2" + "@docsearch/css" "3.4.0" + algoliasearch "^4.0.0" + +"@docusaurus/core@2.4.1", "@docusaurus/core@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.4.1.tgz#4b8ff5766131ce3fbccaad0b1daf2ad4dc76f62d" + integrity sha512-SNsY7PshK3Ri7vtsLXVeAJGS50nJN3RgF836zkyUfAD01Fq+sAk5EwWgLw+nnm5KVNGDu7PRR2kRGDsWvqpo0g== + dependencies: + "@babel/core" "^7.18.6" + "@babel/generator" "^7.18.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.18.6" + "@babel/preset-env" "^7.18.6" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@babel/runtime" "^7.18.6" + "@babel/runtime-corejs3" "^7.18.6" + "@babel/traverse" "^7.18.8" + "@docusaurus/cssnano-preset" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" + "@slorber/static-site-generator-webpack-plugin" "^4.0.7" + "@svgr/webpack" "^6.2.1" + autoprefixer "^10.4.7" + babel-loader "^8.2.5" + babel-plugin-dynamic-import-node "^2.3.3" + boxen "^6.2.1" + chalk "^4.1.2" + chokidar "^3.5.3" + clean-css "^5.3.0" + cli-table3 "^0.6.2" + combine-promises "^1.1.0" + commander "^5.1.0" + copy-webpack-plugin "^11.0.0" + core-js "^3.23.3" + css-loader "^6.7.1" + css-minimizer-webpack-plugin "^4.0.0" + cssnano "^5.1.12" + del "^6.1.1" + detect-port "^1.3.0" + escape-html "^1.0.3" + eta "^2.0.0" + file-loader "^6.2.0" + fs-extra "^10.1.0" + html-minifier-terser "^6.1.0" + html-tags "^3.2.0" + html-webpack-plugin "^5.5.0" + import-fresh "^3.3.0" + leven "^3.1.0" + lodash "^4.17.21" + mini-css-extract-plugin "^2.6.1" + postcss "^8.4.14" + postcss-loader "^7.0.0" + prompts "^2.4.2" + react-dev-utils "^12.0.1" + react-helmet-async "^1.3.0" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + react-loadable-ssr-addon-v5-slorber "^1.0.1" + react-router "^5.3.3" + react-router-config "^5.1.1" + react-router-dom "^5.3.3" + rtl-detect "^1.0.4" + semver "^7.3.7" + serve-handler "^6.1.3" + shelljs "^0.8.5" + terser-webpack-plugin "^5.3.3" + tslib "^2.4.0" + update-notifier "^5.1.0" + url-loader "^4.1.1" + wait-on "^6.0.1" + webpack "^5.73.0" + webpack-bundle-analyzer "^4.5.0" + webpack-dev-server "^4.9.3" + webpack-merge "^5.8.0" + webpackbar "^5.0.2" + +"@docusaurus/cssnano-preset@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.1.tgz#eacadefb1e2e0f59df3467a0fe83e4ff79eed163" + integrity sha512-ka+vqXwtcW1NbXxWsh6yA1Ckii1klY9E53cJ4O9J09nkMBgrNX3iEFED1fWdv8wf4mJjvGi5RLZ2p9hJNjsLyQ== + dependencies: + cssnano-preset-advanced "^5.3.8" + postcss "^8.4.14" + postcss-sort-media-queries "^4.2.1" + tslib "^2.4.0" + +"@docusaurus/logger@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.4.1.tgz#4d2c0626b40752641f9fdd93ad9b5a7a0792f767" + integrity sha512-5h5ysIIWYIDHyTVd8BjheZmQZmEgWDR54aQ1BX9pjFfpyzFo5puKXKYrYJXbjEHGyVhEzmB9UXwbxGfaZhOjcg== + dependencies: + chalk "^4.1.2" + tslib "^2.4.0" + +"@docusaurus/mdx-loader@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.4.1.tgz#6425075d7fc136dbfdc121349060cedd64118393" + integrity sha512-4KhUhEavteIAmbBj7LVFnrVYDiU51H5YWW1zY6SmBSte/YLhDutztLTBE0PQl1Grux1jzUJeaSvAzHpTn6JJDQ== + dependencies: + "@babel/parser" "^7.18.8" + "@babel/traverse" "^7.18.8" + "@docusaurus/logger" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@mdx-js/mdx" "^1.6.22" + escape-html "^1.0.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + image-size "^1.0.1" + mdast-util-to-string "^2.0.0" + remark-emoji "^2.2.0" + stringify-object "^3.3.0" + tslib "^2.4.0" + unified "^9.2.2" + unist-util-visit "^2.0.3" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@docusaurus/module-type-aliases@2.4.1", "@docusaurus/module-type-aliases@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.1.tgz#38b3c2d2ae44bea6d57506eccd84280216f0171c" + integrity sha512-gLBuIFM8Dp2XOCWffUDSjtxY7jQgKvYujt7Mx5s4FCTfoL5dN1EVbnrn+O2Wvh8b0a77D57qoIDY7ghgmatR1A== + dependencies: + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/types" "2.4.1" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + "@types/react-router-dom" "*" + react-helmet-async "*" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + +"@docusaurus/plugin-content-blog@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.1.tgz#c705a8b1a36a34f181dcf43b7770532e4dcdc4a3" + integrity sha512-E2i7Knz5YIbE1XELI6RlTnZnGgS52cUO4BlCiCUCvQHbR+s1xeIWz4C6BtaVnlug0Ccz7nFSksfwDpVlkujg5Q== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" + cheerio "^1.0.0-rc.12" + feed "^4.2.2" + fs-extra "^10.1.0" + lodash "^4.17.21" + reading-time "^1.5.0" + tslib "^2.4.0" + unist-util-visit "^2.0.3" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-docs@2.4.1", "@docusaurus/plugin-content-docs@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.1.tgz#ed94d9721b5ce7a956fb01cc06c40d8eee8dfca7" + integrity sha512-Lo7lSIcpswa2Kv4HEeUcGYqaasMUQNpjTXpV0N8G6jXgZaQurqp7E8NGYeGbDXnb48czmHWbzDL4S3+BbK0VzA== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/module-type-aliases" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" + "@types/react-router-config" "^5.0.6" + combine-promises "^1.1.0" + fs-extra "^10.1.0" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-pages@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.1.tgz#c534f7e49967699a45bbe67050d1605ebbf3d285" + integrity sha512-/UjuH/76KLaUlL+o1OvyORynv6FURzjurSjvn2lbWTFc4tpYY2qLYTlKpTCBVPhlLUQsfyFnshEJDLmPneq2oA== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" + fs-extra "^10.1.0" + tslib "^2.4.0" + webpack "^5.73.0" + +"@docusaurus/plugin-debug@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.4.1.tgz#461a2c77b0c5a91b2c05257c8f9585412aaa59dc" + integrity sha512-7Yu9UPzRShlrH/G8btOpR0e6INFZr0EegWplMjOqelIwAcx3PKyR8mgPTxGTxcqiYj6hxSCRN0D8R7YrzImwNA== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + fs-extra "^10.1.0" + react-json-view "^1.21.3" + tslib "^2.4.0" + +"@docusaurus/plugin-google-analytics@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.1.tgz#30de1c35773bf9d52bb2d79b201b23eb98022613" + integrity sha512-dyZJdJiCoL+rcfnm0RPkLt/o732HvLiEwmtoNzOoz9MSZz117UH2J6U2vUDtzUzwtFLIf32KkeyzisbwUCgcaQ== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" + tslib "^2.4.0" + +"@docusaurus/plugin-google-gtag@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.1.tgz#6a3eb91022714735e625c7ca70ef5188fa7bd0dc" + integrity sha512-mKIefK+2kGTQBYvloNEKtDmnRD7bxHLsBcxgnbt4oZwzi2nxCGjPX6+9SQO2KCN5HZbNrYmGo5GJfMgoRvy6uA== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" + tslib "^2.4.0" + +"@docusaurus/plugin-google-tag-manager@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.1.tgz#b99f71aec00b112bbf509ef2416e404a95eb607e" + integrity sha512-Zg4Ii9CMOLfpeV2nG74lVTWNtisFaH9QNtEw48R5QE1KIwDBdTVaiSA18G1EujZjrzJJzXN79VhINSbOJO/r3g== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" + tslib "^2.4.0" + +"@docusaurus/plugin-sitemap@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.1.tgz#8a7a76ed69dc3e6b4474b6abb10bb03336a9de6d" + integrity sha512-lZx+ijt/+atQ3FVE8FOHV/+X3kuok688OydDXrqKRJyXBJZKgGjA2Qa8RjQ4f27V2woaXhtnyrdPop/+OjVMRg== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" + fs-extra "^10.1.0" + sitemap "^7.1.1" + tslib "^2.4.0" + +"@docusaurus/preset-classic@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.4.1.tgz#072f22d0332588e9c5f512d4bded8d7c99f91497" + integrity sha512-P4//+I4zDqQJ+UDgoFrjIFaQ1MeS9UD1cvxVQaI6O7iBmiHQm0MGROP1TbE7HlxlDPXFJjZUK3x3cAoK63smGQ== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/plugin-content-blog" "2.4.1" + "@docusaurus/plugin-content-docs" "2.4.1" + "@docusaurus/plugin-content-pages" "2.4.1" + "@docusaurus/plugin-debug" "2.4.1" + "@docusaurus/plugin-google-analytics" "2.4.1" + "@docusaurus/plugin-google-gtag" "2.4.1" + "@docusaurus/plugin-google-tag-manager" "2.4.1" + "@docusaurus/plugin-sitemap" "2.4.1" + "@docusaurus/theme-classic" "2.4.1" + "@docusaurus/theme-common" "2.4.1" + "@docusaurus/theme-search-algolia" "2.4.1" + "@docusaurus/types" "2.4.1" + +"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" + integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== + dependencies: + "@types/react" "*" + prop-types "^15.6.2" + +"@docusaurus/theme-classic@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.4.1.tgz#0060cb263c1a73a33ac33f79bb6bc2a12a56ad9e" + integrity sha512-Rz0wKUa+LTW1PLXmwnf8mn85EBzaGSt6qamqtmnh9Hflkc+EqiYMhtUJeLdV+wsgYq4aG0ANc+bpUDpsUhdnwg== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/module-type-aliases" "2.4.1" + "@docusaurus/plugin-content-blog" "2.4.1" + "@docusaurus/plugin-content-docs" "2.4.1" + "@docusaurus/plugin-content-pages" "2.4.1" + "@docusaurus/theme-common" "2.4.1" + "@docusaurus/theme-translations" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" + "@mdx-js/react" "^1.6.22" + clsx "^1.2.1" + copy-text-to-clipboard "^3.0.1" + infima "0.2.0-alpha.43" + lodash "^4.17.21" + nprogress "^0.2.0" + postcss "^8.4.14" + prism-react-renderer "^1.3.5" + prismjs "^1.28.0" + react-router-dom "^5.3.3" + rtlcss "^3.5.0" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-common@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.4.1.tgz#03e16f7aa96455e952f3243ac99757b01a3c83d4" + integrity sha512-G7Zau1W5rQTaFFB3x3soQoZpkgMbl/SYNG8PfMFIjKa3M3q8n0m/GRf5/H/e5BqOvt8c+ZWIXGCiz+kUCSHovA== + dependencies: + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/module-type-aliases" "2.4.1" + "@docusaurus/plugin-content-blog" "2.4.1" + "@docusaurus/plugin-content-docs" "2.4.1" + "@docusaurus/plugin-content-pages" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + clsx "^1.2.1" + parse-numeric-range "^1.3.0" + prism-react-renderer "^1.3.5" + tslib "^2.4.0" + use-sync-external-store "^1.2.0" + utility-types "^3.10.0" + +"@docusaurus/theme-live-codeblock@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-live-codeblock/-/theme-live-codeblock-2.4.1.tgz#214168e29041efc1eed1540f4989dd2efcfe6658" + integrity sha512-KBKrm34kcdNbSeEm6RujN5GWWg4F2dmAYZyHMMQM8FXokx8mNShRx6uq17WXi23JNm7niyMhNOBRfZWay+5Hkg== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/theme-common" "2.4.1" + "@docusaurus/theme-translations" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" + "@philpl/buble" "^0.19.7" + clsx "^1.2.1" + fs-extra "^10.1.0" + react-live "2.2.3" + tslib "^2.4.0" + +"@docusaurus/theme-search-algolia@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.1.tgz#906bd2cca3fced0241985ef502c892f58ff380fc" + integrity sha512-6BcqW2lnLhZCXuMAvPRezFs1DpmEKzXFKlYjruuas+Xy3AQeFzDJKTJFIm49N77WFCTyxff8d3E4Q9pi/+5McQ== + dependencies: + "@docsearch/react" "^3.1.1" + "@docusaurus/core" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/plugin-content-docs" "2.4.1" + "@docusaurus/theme-common" "2.4.1" + "@docusaurus/theme-translations" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" + algoliasearch "^4.13.1" + algoliasearch-helper "^3.10.0" + clsx "^1.2.1" + eta "^2.0.0" + fs-extra "^10.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-translations@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.4.1.tgz#4d49df5865dae9ef4b98a19284ede62ae6f98726" + integrity sha512-T1RAGP+f86CA1kfE8ejZ3T3pUU3XcyvrGMfC/zxCtc2BsnoexuNI9Vk2CmuKCb+Tacvhxjv5unhxXce0+NKyvA== + dependencies: + fs-extra "^10.1.0" + tslib "^2.4.0" + +"@docusaurus/types@2.4.1", "@docusaurus/types@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.4.1.tgz#d8e82f9e0f704984f98df1f93d6b4554d5458705" + integrity sha512-0R+cbhpMkhbRXX138UOc/2XZFF8hiZa6ooZAEEJFp5scytzCw4tC1gChMFXrpa3d2tYE6AX8IrOEpSonLmfQuQ== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + commander "^5.1.0" + joi "^17.6.0" + react-helmet-async "^1.3.0" + utility-types "^3.10.0" + webpack "^5.73.0" + webpack-merge "^5.8.0" + +"@docusaurus/utils-common@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.4.1.tgz#7f72e873e49bd5179588869cc3ab7449a56aae63" + integrity sha512-bCVGdZU+z/qVcIiEQdyx0K13OC5mYwxhSuDUR95oFbKVuXYRrTVrwZIqQljuo1fyJvFTKHiL9L9skQOPokuFNQ== + dependencies: + tslib "^2.4.0" + +"@docusaurus/utils-validation@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.4.1.tgz#19959856d4a886af0c5cfb357f4ef68b51151244" + integrity sha512-unII3hlJlDwZ3w8U+pMO3Lx3RhI4YEbY3YNsQj4yzrkZzlpqZOLuAiZK2JyULnD+TKbceKU0WyWkQXtYbLNDFA== + dependencies: + "@docusaurus/logger" "2.4.1" + "@docusaurus/utils" "2.4.1" + joi "^17.6.0" + js-yaml "^4.1.0" + tslib "^2.4.0" + +"@docusaurus/utils@2.4.1", "@docusaurus/utils@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.4.1.tgz#9c5f76eae37b71f3819c1c1f0e26e6807c99a4fc" + integrity sha512-1lvEZdAQhKNht9aPXPoh69eeKnV0/62ROhQeFKKxmzd0zkcuE/Oc5Gpnt00y/f5bIsmOsYMY7Pqfm/5rteT5GA== + dependencies: + "@docusaurus/logger" "2.4.1" + "@svgr/webpack" "^6.2.1" + escape-string-regexp "^4.0.0" + file-loader "^6.2.0" + fs-extra "^10.1.0" + github-slugger "^1.4.0" + globby "^11.1.0" + gray-matter "^4.0.3" + js-yaml "^4.1.0" + lodash "^4.17.21" + micromatch "^4.0.5" + resolve-pathname "^3.0.0" + shelljs "^0.8.5" + tslib "^2.4.0" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@jest/schemas@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" + integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== + dependencies: + "@sinclair/typebox" "^0.25.16" + +"@jest/types@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" + integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== + dependencies: + "@jest/schemas" "^29.4.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" + integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@mdx-js/mdx@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" + integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== + dependencies: + "@babel/core" "7.12.9" + "@babel/plugin-syntax-jsx" "7.12.1" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "1.6.22" + babel-plugin-apply-mdx-type-prop "1.6.22" + babel-plugin-extract-import-names "1.6.22" + camelcase-css "2.0.1" + detab "2.0.4" + hast-util-raw "6.0.1" + lodash.uniq "4.5.0" + mdast-util-to-hast "10.0.1" + remark-footnotes "2.0.0" + remark-mdx "1.6.22" + remark-parse "8.0.3" + remark-squeeze-paragraphs "4.0.0" + style-to-object "0.3.0" + unified "9.2.0" + unist-builder "2.0.3" + unist-util-visit "2.0.3" + +"@mdx-js/react@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" + integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== + +"@mdx-js/util@1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" + integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== + +"@mpetrunic/docusaurus-plugin-typedoc-api@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@mpetrunic/docusaurus-plugin-typedoc-api/-/docusaurus-plugin-typedoc-api-3.0.0.tgz#fd93c8f7e1a38b1a050b4fd170c9a05c9c55d18e" + integrity sha512-ma7iYojh6DT7VHkM6EQKVPCmN6FBHGMGU3IsF//O3+Ls6/QdGHALAPfVdt0K+cm6cdJv+GOKAkfr5e+qAnRNZg== + dependencies: + "@docusaurus/plugin-content-docs" "^2.4.0" + "@docusaurus/types" "^2.4.0" + "@docusaurus/utils" "^2.4.0" + "@vscode/codicons" "^0.0.32" + marked "^4.3.0" + typedoc "^0.23.28" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@philpl/buble@^0.19.7": + version "0.19.7" + resolved "https://registry.yarnpkg.com/@philpl/buble/-/buble-0.19.7.tgz#27231e6391393793b64bc1c982fc7b593198b893" + integrity sha512-wKTA2DxAGEW+QffRQvOhRQ0VBiYU2h2p8Yc1oBNlqSKws48/8faxqKNIuub0q4iuyTuLwtB8EkwiKwhlfV1PBA== + dependencies: + acorn "^6.1.1" + acorn-class-fields "^0.2.1" + acorn-dynamic-import "^4.0.0" + acorn-jsx "^5.0.1" + chalk "^2.4.2" + magic-string "^0.25.2" + minimist "^1.2.0" + os-homedir "^1.0.1" + regexpu-core "^4.5.4" + +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.21" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" + integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== + +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sinclair/typebox@^0.25.16": + version "0.25.24" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" + integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@slorber/static-site-generator-webpack-plugin@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz#fc1678bddefab014e2145cbe25b3ce4e1cfc36f3" + integrity sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA== + dependencies: + eval "^0.1.8" + p-map "^4.0.0" + webpack-sources "^3.2.2" + +"@svgr/babel-plugin-add-jsx-attribute@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba" + integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== + +"@svgr/babel-plugin-remove-jsx-attribute@*": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== + +"@svgr/babel-plugin-remove-jsx-empty-expression@*": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz#fb9d22ea26d2bc5e0a44b763d4c46d5d3f596c60" + integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== + +"@svgr/babel-plugin-svg-dynamic-title@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz#01b2024a2b53ffaa5efceaa0bf3e1d5a4c520ce4" + integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== + +"@svgr/babel-plugin-svg-em-dimensions@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz#dd3fa9f5b24eb4f93bcf121c3d40ff5facecb217" + integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== + +"@svgr/babel-plugin-transform-react-native-svg@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz#1d8e945a03df65b601551097d8f5e34351d3d305" + integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== + +"@svgr/babel-plugin-transform-svg-component@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz#48620b9e590e25ff95a80f811544218d27f8a250" + integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== + +"@svgr/babel-preset@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.5.1.tgz#b90de7979c8843c5c580c7e2ec71f024b49eb828" + integrity sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^6.5.1" + "@svgr/babel-plugin-remove-jsx-attribute" "*" + "@svgr/babel-plugin-remove-jsx-empty-expression" "*" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.5.1" + "@svgr/babel-plugin-svg-dynamic-title" "^6.5.1" + "@svgr/babel-plugin-svg-em-dimensions" "^6.5.1" + "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" + "@svgr/babel-plugin-transform-svg-component" "^6.5.1" + +"@svgr/core@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.5.1.tgz#d3e8aa9dbe3fbd747f9ee4282c1c77a27410488a" + integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== + dependencies: + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + camelcase "^6.2.0" + cosmiconfig "^7.0.1" + +"@svgr/hast-util-to-babel-ast@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz#81800bd09b5bcdb968bf6ee7c863d2288fdb80d2" + integrity sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw== + dependencies: + "@babel/types" "^7.20.0" + entities "^4.4.0" + +"@svgr/plugin-jsx@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz#0e30d1878e771ca753c94e69581c7971542a7072" + integrity sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw== + dependencies: + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/hast-util-to-babel-ast" "^6.5.1" + svg-parser "^2.0.4" + +"@svgr/plugin-svgo@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz#0f91910e988fc0b842f88e0960c2862e022abe84" + integrity sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ== + dependencies: + cosmiconfig "^7.0.1" + deepmerge "^4.2.2" + svgo "^2.8.0" + +"@svgr/webpack@^6.2.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.5.1.tgz#ecf027814fc1cb2decc29dc92f39c3cf691e40e8" + integrity sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA== + dependencies: + "@babel/core" "^7.19.6" + "@babel/plugin-transform-react-constant-elements" "^7.18.12" + "@babel/preset-env" "^7.19.4" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@svgr/core" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + "@svgr/plugin-svgo" "^6.5.1" + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@tsconfig/docusaurus@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@tsconfig/docusaurus/-/docusaurus-1.0.7.tgz#a3ee3c8109b3fec091e3d61a61834e563aeee3c3" + integrity sha512-ffTXxGIP/IRMCjuzHd6M4/HdIrw1bMfC7Bv8hMkTadnePkpe0lG0oDSdbRpSDZb2rQMAgpbWiR10BvxvNYwYrg== + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#9fd20b3974bdc2bcd4ac6567e2e0f6885cb2cf41" + integrity sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.0.tgz#ae73dc9ec5237f2794c4f79efd6a4c73b13daf23" + integrity sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": + version "4.17.35" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" + integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/hast@^2.0.0": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + dependencies: + "@types/unist" "*" + +"@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-proxy@^1.17.8": + version "1.17.11" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293" + integrity sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + +"@types/mdast@^3.0.0": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.11.tgz#dc130f7e7d9306124286f6d6cee40cf4d14a3dc0" + integrity sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw== + dependencies: + "@types/unist" "*" + +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/node@*": + version "20.2.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" + integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== + +"@types/node@^17.0.5": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/parse5@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" + integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/react-router-config@*", "@types/react-router-config@^5.0.6": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.7.tgz#36207a3fe08b271abee62b26993ee932d13cbb02" + integrity sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "^5.1.0" + +"@types/react-router-dom@*": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*", "@types/react-router@^5.1.0": + version "5.1.20" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" + integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react@*": + version "18.2.7" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.7.tgz#dfb4518042a3117a045b8c222316f83414a783b3" + integrity sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/sax@^1.2.1": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.4.tgz#8221affa7f4f3cb21abd22f244cfabfa63e6a69e" + integrity sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw== + dependencies: + "@types/node" "*" + +"@types/scheduler@*": + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== + +"@types/send@*": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" + integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" + integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + +"@types/ws@^8.5.1": + version "8.5.4" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" + integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.24" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== + dependencies: + "@types/yargs-parser" "*" + +"@vscode/codicons@^0.0.32": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@vscode/codicons/-/codicons-0.0.32.tgz#9e27de90d509c69762b073719ba3bf46c3cd2530" + integrity sha512-3lgSTWhAzzWN/EPURoY4ZDBEA80OPmnaknNujA3qnI4Iu7AONWd9xF3iE4L+4prIe8E3TUnLQ4pxoaFTEEZNwg== + +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-class-fields@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-0.2.1.tgz#748058bceeb0ef25164bbc671993984083f5a085" + integrity sha512-US/kqTe0H8M4LN9izoL+eykVAitE68YMuYZ3sHn3i1fjniqR7oQ3SPvuMK/VT1kjOQHrx5Q88b90TtOKgAv2hQ== + +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== + +acorn-jsx@^5.0.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^6.1.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +address@^1.0.1, address@^1.1.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.9.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +algoliasearch-helper@^3.10.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.13.0.tgz#1ccca7056fd27c2b0b5c92dd5c0abf4314bec3b8" + integrity sha512-kV3c1jMQCvkARtGsSDvAwuht4PAMSsQILqPiH4WFiARoa3jXJ/r1TQoBWAjWyWF48rsNYCv7kzxgB4LTxrvvuw== + dependencies: + "@algolia/events" "^4.0.1" + +algoliasearch@^4.0.0, algoliasearch@^4.13.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.17.1.tgz#23926448b815bbf9a921bc6077abc1ce8d3224b2" + integrity sha512-4GDQ1RhP2qUR3x8PevFRbEdqZqIARNViZYjgTJmA1T7wRNtFA3W4Aqc/RsODqa1J8IO/QDla5x4tWuUS8NV8wA== + dependencies: + "@algolia/cache-browser-local-storage" "4.17.1" + "@algolia/cache-common" "4.17.1" + "@algolia/cache-in-memory" "4.17.1" + "@algolia/client-account" "4.17.1" + "@algolia/client-analytics" "4.17.1" + "@algolia/client-common" "4.17.1" + "@algolia/client-personalization" "4.17.1" + "@algolia/client-search" "4.17.1" + "@algolia/logger-common" "4.17.1" + "@algolia/logger-console" "4.17.1" + "@algolia/requester-browser-xhr" "4.17.1" + "@algolia/requester-common" "4.17.1" + "@algolia/requester-node-http" "4.17.1" + "@algolia/transporter" "4.17.1" + +ansi-align@^3.0.0, ansi-align@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-sequence-parser@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz#4d790f31236ac20366b23b3916b789e1bde39aed" + integrity sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +arg@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +autocomplete.js@^0.37.0: + version "0.37.1" + resolved "https://registry.yarnpkg.com/autocomplete.js/-/autocomplete.js-0.37.1.tgz#a29a048d827e7d2bf8f7df8b831766e5cc97df01" + integrity sha512-PgSe9fHYhZEsm/9jggbjtVsGXJkPLvd+9mC7gZJ662vVL5CRWEtm/mIrrzCx0MrNxHVwxD5d00UOn6NsmL2LUQ== + dependencies: + immediate "^3.2.3" + +autoprefixer@^10.4.12, autoprefixer@^10.4.7: + version "10.4.14" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +axios@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" + integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== + dependencies: + follow-redirects "^1.14.7" + +babel-loader@^8.2.5: + version "8.3.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-apply-mdx-type-prop@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b" + integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + "@mdx-js/util" "1.6.22" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-extract-import-names@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" + integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + +babel-plugin-polyfill-corejs2@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz#75044d90ba5043a5fb559ac98496f62f3eb668fd" + integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.4.0" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz#39248263c38191f0d226f928d666e6db1b4b3a8a" + integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.0" + core-js-compat "^3.30.1" + +babel-plugin-polyfill-regenerator@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz#e7344d88d9ef18a3c47ded99362ae4a757609380" + integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.0" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +bcp-47-match@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bcp-47-match/-/bcp-47-match-1.0.3.tgz#cb8d03071389a10aff2062b862d6575ffd7cd7ef" + integrity sha512-LggQ4YTdjWQSKELZF5JwchnBa1u0pIQSZf5lSdOHEdbVP55h0qICA/FUp3+W99q0xqxYa1ZQizTUH87gecII5w== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" + integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== + dependencies: + array-flatten "^2.1.2" + dns-equal "^1.0.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +boxen@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +boxen@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d" + integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== + dependencies: + ansi-align "^3.0.1" + camelcase "^6.2.0" + chalk "^4.1.2" + cli-boxes "^3.0.0" + string-width "^5.0.1" + type-fest "^2.5.0" + widest-line "^4.0.1" + wrap-ansi "^8.0.1" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: + version "4.21.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.7.tgz#e2b420947e5fb0a58e8f4668ae6e23488127e551" + integrity sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA== + dependencies: + caniuse-lite "^1.0.30001489" + electron-to-chromium "^1.4.411" + node-releases "^2.0.12" + update-browserslist-db "^1.0.11" + +buble@0.19.6: + version "0.19.6" + resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.6.tgz#915909b6bd5b11ee03b1c885ec914a8b974d34d3" + integrity sha512-9kViM6nJA1Q548Jrd06x0geh+BG2ru2+RMDkIHHgJY/8AcyCs34lTHwra9BX7YdPrZXd5aarkpr/SY8bmPgPdg== + dependencies: + chalk "^2.4.1" + magic-string "^0.25.1" + minimist "^1.2.0" + os-homedir "^1.0.1" + regexpu-core "^4.2.0" + vlq "^1.0.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-css@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001489: + version "1.0.30001492" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001492.tgz#4a06861788a52b4c81fd3344573b68cc87fe062b" + integrity sha512-2efF8SAZwgAX1FJr87KWhvuJxnGJKOnctQa8xLOskAXNXq8oiuqgl6u1kk3fFpsp3GgvzlRjiK1sl63hNtFADw== + +ccount@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chokidar@^3.4.2, chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.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" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + +classnames@^2.2.6: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + +clean-css@^5.2.2, clean-css@^5.3.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" + integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-boxes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== + +cli-table3@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clsx@^1.1.1, clsx@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + +collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colord@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +colorette@^2.0.10: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +combine-promises@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" + integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== + +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +component-props@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/component-props/-/component-props-1.1.1.tgz#f9b7df9b9927b6e6d97c9bd272aa867670f34944" + integrity sha512-69pIRJs9fCCHRqCz3390YF2LV1Lu6iEMZ5zuVqqUn+G20V9BNXlMs0cWawWeW9g4Ynmg29JmkG6R7/lUJoGd1Q== + +component-xor@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/component-xor/-/component-xor-0.0.4.tgz#c55d83ccc1b94cd5089a4e93fa7891c7263e59aa" + integrity sha512-ZIt6sla8gfo+AFVRZoZOertcnD5LJaY2T9CKE2j13NJxQt/mUafD69Bl7/Y4AnpI2LGjiXH7cOfJDx/n2G9edA== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +consola@^2.15.3: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + +console-control-strings@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +copy-text-to-clipboard@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz#6bf40deef0a51ac6858efb0d76ded2c6d6a15059" + integrity sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng== + +copy-webpack-plugin@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== + dependencies: + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.30.1, core-js-compat@^3.30.2: + version "3.30.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.2.tgz#83f136e375babdb8c80ad3c22d67c69098c1dd8b" + integrity sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA== + dependencies: + browserslist "^4.21.5" + +core-js-pure@^3.30.2: + version "3.30.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.30.2.tgz#005a82551f4af3250dcfb46ed360fad32ced114e" + integrity sha512-p/npFUJXXBkCCTIlEGBdghofn00jWG6ZOtdoIXSJmAu2QBvN0IqpZXWweOytcwE6cfx8ZvVUy1vw8zxhe4Y2vg== + +core-js@^2.4.1: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-js@^3.23.3: + version "3.30.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.2.tgz#6528abfda65e5ad728143ea23f7a14f0dcf503fc" + integrity sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cosmiconfig@^8.1.3: + version "8.1.3" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" + integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== + dependencies: + import-fresh "^3.2.1" + js-yaml "^4.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + +cross-fetch@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.6.tgz#bae05aa31a4da760969756318feeee6e70f15d6c" + integrity sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g== + dependencies: + node-fetch "^2.6.11" + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-declaration-sorter@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" + integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== + +css-loader@^6.7.1: + version "6.8.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" + integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.21" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.3" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.8" + +css-minimizer-webpack-plugin@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz#79f6199eb5adf1ff7ba57f105e3752d15211eb35" + integrity sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA== + dependencies: + cssnano "^5.1.8" + jest-worker "^29.1.2" + postcss "^8.4.17" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-selector-parser@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" + integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^6.0.1, css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-advanced@^5.3.8: + version "5.3.10" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz#25558a1fbf3a871fb6429ce71e41be7f5aca6eef" + integrity sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ== + dependencies: + autoprefixer "^10.4.12" + cssnano-preset-default "^5.2.14" + postcss-discard-unused "^5.1.0" + postcss-merge-idents "^5.1.1" + postcss-reduce-idents "^5.2.0" + postcss-zindex "^5.1.0" + +cssnano-preset-default@^5.2.14: + version "5.2.14" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" + integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== + dependencies: + css-declaration-sorter "^6.3.1" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.1" + postcss-convert-values "^5.1.3" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.7" + postcss-merge-rules "^5.1.4" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.4" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.1" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.2" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== + +cssnano@^5.1.12, cssnano@^5.1.8: + version "5.1.15" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" + integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== + dependencies: + cssnano-preset-default "^5.2.14" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +csstype@^3.0.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + +debug@2.6.9, debug@^2.6.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +del@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detab@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" + integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== + dependencies: + repeat-string "^1.5.4" + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +detect-port-alt@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" + integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== + dependencies: + address "^1.0.1" + debug "4" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +direction@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/direction/-/direction-1.0.4.tgz#2b86fb686967e987088caf8b89059370d4837442" + integrity sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ== + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^5.2.2: + version "5.6.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.0.tgz#2202c947845c7a63c23ece58f2f70ff6ab4c2f7d" + integrity sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +docusaurus-lunr-search@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/docusaurus-lunr-search/-/docusaurus-lunr-search-2.3.2.tgz#9991ef51addb0bf09ac80a06cb5729f28939332d" + integrity sha512-Ngvm2kXwliWThqAThXI1912rOKHlFL7BjIc+OVNUfzkjpk5ar4TFEh+EUaaMOLw4V0BBko3CW0Ym7prqqm3jLQ== + dependencies: + autocomplete.js "^0.37.0" + classnames "^2.2.6" + gauge "^3.0.0" + hast-util-select "^4.0.0" + hast-util-to-text "^2.0.0" + hogan.js "^3.0.2" + lunr "^2.3.8" + lunr-languages "^1.4.0" + minimatch "^3.0.4" + object-assign "^4.1.1" + rehype-parse "^7.0.1" + to-vfile "^6.1.0" + unified "^9.0.0" + unist-util-is "^4.0.2" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dom-iterator/-/dom-iterator-1.0.0.tgz#9c09899846ec41c2d257adc4d6015e4759ef05ad" + integrity sha512-7dsMOQI07EMU98gQM8NSB3GsAiIeBYIPKpnxR3c9xOvdvBjChAcOM0iJ222I3p5xyiZO9e5oggkNaCusuTdYig== + dependencies: + component-props "1.1.1" + component-xor "0.0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.411: + version "1.4.416" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.416.tgz#7291f704168d3842ae4da3ae9fdc7bfbeb97d116" + integrity sha512-AUYh0XDTb2vrj0rj82jb3P9hHSyzQNdTPYWZIhPdCOui7/vpme7+HTE07BE5jwuqg/34TZ8ktlRz6GImJ4IXjA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +emoticon@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f" + integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.14.1: + version "5.14.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3" + integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-module-lexer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" + integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@^1.0.3, escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eta@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eta/-/eta-2.2.0.tgz#eb8b5f8c4e8b6306561a455e62cd7492fe3a9b8a" + integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eval@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" + integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== + dependencies: + "@types/node" "*" + require-like ">= 0.1.1" + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +express@^4.17.3: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-url-parser@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" + integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== + dependencies: + punycode "^1.3.2" + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^3.0.0, fbjs@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" + integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== + dependencies: + cross-fetch "^3.1.5" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.30" + +feed@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" + integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== + dependencies: + xml-js "^1.6.11" + +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +filesize@^8.0.6: + version "8.0.7" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" + integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flux@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.4.tgz#9661182ea81d161ee1a6a6af10d20485ef2ac572" + integrity sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw== + dependencies: + fbemitter "^3.0.0" + fbjs "^3.0.1" + +follow-redirects@^1.0.0, follow-redirects@^1.14.7: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +fork-ts-checker-webpack-plugin@^6.5.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3" + integrity sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-monkey@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.4.tgz#ee8c1b53d3fe8bb7e5d2c5c5dfc0168afdd2f747" + integrity sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +github-slugger@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" + integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== + dependencies: + ini "2.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.1: + version "13.1.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" + integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hast-to-hyperscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" + integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== + dependencies: + "@types/unist" "^2.0.3" + comma-separated-tokens "^1.0.0" + property-information "^5.3.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.3.0" + unist-util-is "^4.0.0" + web-namespaces "^1.0.0" + +hast-util-from-parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" + integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== + dependencies: + "@types/parse5" "^5.0.0" + hastscript "^6.0.0" + property-information "^5.0.0" + vfile "^4.0.0" + vfile-location "^3.2.0" + web-namespaces "^1.0.0" + +hast-util-has-property@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/hast-util-has-property/-/hast-util-has-property-1.0.4.tgz#9f137565fad6082524b382c1e7d7d33ca5059f36" + integrity sha512-ghHup2voGfgFoHMGnaLHOjbYFACKrRh9KFttdCzMCbFoBMJXiNi2+XTrPP8+q6cDJM/RSqlCfVWrjp1H201rZg== + +hast-util-is-element@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz#3b3ed5159a2707c6137b48637fbfe068e175a425" + integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ== + +hast-util-parse-selector@^2.0.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hast-util-raw@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977" + integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^6.0.0" + hast-util-to-parse5 "^6.0.0" + html-void-elements "^1.0.0" + parse5 "^6.0.0" + unist-util-position "^3.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-select@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hast-util-select/-/hast-util-select-4.0.2.tgz#ae3ef2860e02cda2ad3a2e72b47c1f5e8f44e9e7" + integrity sha512-8EEG2//bN5rrzboPWD2HdS3ugLijNioS1pqOTIolXNf67xxShYw4SQEmVXd3imiBG+U2bC2nVTySr/iRAA7Cjg== + dependencies: + bcp-47-match "^1.0.0" + comma-separated-tokens "^1.0.0" + css-selector-parser "^1.0.0" + direction "^1.0.0" + hast-util-has-property "^1.0.0" + hast-util-is-element "^1.0.0" + hast-util-to-string "^1.0.0" + hast-util-whitespace "^1.0.0" + not "^0.1.0" + nth-check "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + unist-util-visit "^2.0.0" + zwitch "^1.0.0" + +hast-util-to-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" + integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== + dependencies: + hast-to-hyperscript "^9.0.0" + property-information "^5.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-to-string@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/hast-util-to-string/-/hast-util-to-string-1.0.4.tgz#9b24c114866bdb9478927d7e9c36a485ac728378" + integrity sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w== + +hast-util-to-text@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hast-util-to-text/-/hast-util-to-text-2.0.1.tgz#04f2e065642a0edb08341976084aa217624a0f8b" + integrity sha512-8nsgCARfs6VkwH2jJU9b8LNTuR4700na+0h3PqCaEk4MAnMDeu5P0tP8mjk9LLNGxIeQRLbiDbZVw6rku+pYsQ== + dependencies: + hast-util-is-element "^1.0.0" + repeat-string "^1.0.0" + unist-util-find-after "^3.0.0" + +hast-util-whitespace@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41" + integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A== + +hastscript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hogan.js@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd" + integrity sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg== + dependencies: + mkdirp "0.3.0" + nopt "1.0.10" + +hoist-non-react-statics@^3.1.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-tags@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== + +html-void-elements@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== + +html-webpack-plugin@^5.5.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763" + integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +image-size@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486" + integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== + dependencies: + queue "6.0.2" + +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + +immer@^9.0.7: + version "9.0.21" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" + integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== + +import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infima@0.2.0-alpha.43: + version "0.2.0-alpha.43" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.43.tgz#f7aa1d7b30b6c08afef441c726bac6150228cbe0" + integrity sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +ini@^1.3.5, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" + integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== + +is-alphabetical@1.0.4, is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-installed-globally@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-npm@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" + integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-root@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" + integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== + dependencies: + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^29.1.2: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" + integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== + dependencies: + "@types/node" "*" + jest-util "^29.5.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jiti@^1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd" + integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== + +joi@^17.6.0: + version "17.9.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690" + integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@^2.1.2, json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +latest-version@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +launch-editor@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" + integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.7.3" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +lilconfig@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.uniq@4.5.0, lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lunr-languages@^1.4.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/lunr-languages/-/lunr-languages-1.12.0.tgz#c44d8f2127054a55c62e1aebe0b1eaea6dfc1d91" + integrity sha512-C2z02jt74ymrDocBwxYB4Cr1LNZj9rHGLTH/00+JuoT6eJOSSuPBzeqQG8kjnlPUQe+/PAWv1/KHbDT+YYYRnA== + +lunr@^2.3.8, lunr@^2.3.9: + version "2.3.9" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" + integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== + +magic-string@^0.25.1, magic-string@^0.25.2: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== + +marked@^4.2.12, marked@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== + +mdast-squeeze-paragraphs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" + integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== + dependencies: + unist-util-remove "^2.0.0" + +mdast-util-definitions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" + integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-to-hast@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" + integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.1.2, memfs@^3.4.3: + version "3.5.1" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.5.1.tgz#f0cd1e2bfaef58f6fe09bfb9c2288f07fea099ec" + integrity sha512-UWbFJKvj5k+nETdteFndTpYxdeTMox/ULeqX5k/dpaQJCCFmj5EeKv3dBcyO2xmkRAx2vppRu5dVG7SOtsGOzA== + dependencies: + fs-monkey "^1.0.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== + +mime-types@2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== + dependencies: + mime-db "~1.33.0" + +mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mini-css-extract-plugin@^2.6.1: + version "2.7.6" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" + integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== + dependencies: + schema-utils "^4.0.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^7.1.3: + version "7.4.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" + integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + integrity sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew== + +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-fetch@^2.6.11: + version "2.6.11" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" + integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-releases@^2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== + +nopt@1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +not@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/not/-/not-0.1.0.tgz#c9691c1746c55dcfbe54cbd8bd4ff041bc2b519d" + integrity sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== + +nth-check@^2.0.0, nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9, open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-numeric-range@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" + integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-is-inside@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-to-regexp@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" + integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-colormin@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" + integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" + integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== + +postcss-discard-unused@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz#8974e9b143d887677304e558c1166d3762501142" + integrity sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-loader@^7.0.0: + version "7.3.2" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.2.tgz#ac3344ad1f14bb65df135744b7efae4dbdad4301" + integrity sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig== + dependencies: + cosmiconfig "^8.1.3" + jiti "^1.18.2" + klona "^2.0.6" + semver "^7.3.8" + +postcss-merge-idents@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz#7753817c2e0b75d0853b56f78a89771e15ca04a1" + integrity sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-merge-longhand@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" + integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.1" + +postcss-merge-rules@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" + integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" + integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== + dependencies: + browserslist "^4.21.4" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" + integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" + integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-idents@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz#c89c11336c432ac4b28792f24778859a67dfba95" + integrity sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" + integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-sort-media-queries@^4.2.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz#04a5a78db3921eb78f28a1a781a2e68e65258128" + integrity sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw== + dependencies: + sort-css-media-queries "2.1.0" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss-zindex@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" + integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== + +postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.21: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-time@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" + integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== + +prism-react-renderer@^1.0.1, prism-react-renderer@^1.3.1, prism-react-renderer@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" + integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== + +prismjs@^1.28.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" + integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +property-information@^5.0.0, property-information@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +pupa@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +queue@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@1.2.8, rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + +react-dev-utils@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" + integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== + dependencies: + "@babel/code-frame" "^7.16.0" + address "^1.1.2" + browserslist "^4.18.1" + chalk "^4.1.2" + cross-spawn "^7.0.3" + detect-port-alt "^1.1.6" + escape-string-regexp "^4.0.0" + filesize "^8.0.6" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^6.5.0" + global-modules "^2.0.0" + globby "^11.0.4" + gzip-size "^6.0.0" + immer "^9.0.7" + is-root "^2.1.0" + loader-utils "^3.2.0" + open "^8.4.0" + pkg-up "^3.1.0" + prompts "^2.4.2" + react-error-overlay "^6.0.11" + recursive-readdir "^2.2.2" + shell-quote "^1.7.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-error-overlay@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" + integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== + +react-fast-compare@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== + +react-helmet-async@*, react-helmet-async@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" + integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== + dependencies: + "@babel/runtime" "^7.12.5" + invariant "^2.2.4" + prop-types "^15.7.2" + react-fast-compare "^3.2.0" + shallowequal "^1.1.0" + +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-json-view@^1.21.3: + version "1.21.3" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" + integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== + dependencies: + flux "^4.0.1" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^8.3.2" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-live@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/react-live/-/react-live-2.2.3.tgz#260f99194213799f0005e473e7a4154c699d6a7c" + integrity sha512-tpKruvfytNETuzO3o1mrQUj180GVrq35IE8F5gH1NJVPt4szYCx83/dOSCOyjgRhhc3gQvl0pQ3k/CjOjwJkKQ== + dependencies: + buble "0.19.6" + core-js "^2.4.1" + dom-iterator "^1.0.0" + prism-react-renderer "^1.0.1" + prop-types "^15.5.8" + react-simple-code-editor "^0.10.0" + unescape "^1.0.1" + +react-loadable-ssr-addon-v5-slorber@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz#2cdc91e8a744ffdf9e3556caabeb6e4278689883" + integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A== + dependencies: + "@babel/runtime" "^7.10.3" + +react-router-config@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" + integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== + dependencies: + "@babel/runtime" "^7.1.2" + +react-router-dom@^5.3.3: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" + integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.3.4" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.3.4, react-router@^5.3.3: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" + integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-simple-code-editor@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/react-simple-code-editor/-/react-simple-code-editor-0.10.0.tgz#73e7ac550a928069715482aeb33ccba36efe2373" + integrity sha512-bL5W5mAxSW6+cLwqqVWY47Silqgy2DKDTR4hDBrLrUqC5BXc29YVx17l2IZk5v36VcDEq1Bszu2oHm1qBwKqBA== + +react-textarea-autosize@^8.3.2: + version "8.4.1" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz#bcfc5462727014b808b14ee916c01e275e8a8335" + integrity sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q== + dependencies: + "@babel/runtime" "^7.20.13" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" + +react@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +readable-stream@^2.0.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reading-time@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb" + integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + dependencies: + regenerate "^1.4.2" + +regenerate-unicode-properties@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" + integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexpu-core@^4.2.0, regexpu-core@^4.5.4: + version "4.8.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" + integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^9.0.0" + regjsgen "^0.5.2" + regjsparser "^0.7.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +registry-auth-token@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" + integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== + dependencies: + rc "1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +regjsgen@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" + integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== + dependencies: + jsesc "~0.5.0" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +rehype-parse@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-7.0.1.tgz#58900f6702b56767814afc2a9efa2d42b1c90c57" + integrity sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw== + dependencies: + hast-util-from-parse5 "^6.0.0" + parse5 "^6.0.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +remark-emoji@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" + integrity sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w== + dependencies: + emoticon "^3.2.0" + node-emoji "^1.10.0" + unist-util-visit "^2.0.3" + +remark-footnotes@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f" + integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== + +remark-mdx@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd" + integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== + dependencies: + "@babel/core" "7.12.9" + "@babel/helper-plugin-utils" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.12.1" + "@babel/plugin-syntax-jsx" "7.12.1" + "@mdx-js/util" "1.6.22" + is-alphabetical "1.0.4" + remark-parse "8.0.3" + unified "9.2.0" + +remark-parse@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" + integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== + dependencies: + ccount "^1.0.0" + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^2.0.0" + vfile-location "^3.0.0" + xtend "^4.0.1" + +remark-squeeze-paragraphs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" + integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== + dependencies: + mdast-squeeze-paragraphs "^4.0.0" + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +repeat-string@^1.0.0, repeat-string@^1.5.4: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rtl-detect@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.0.4.tgz#40ae0ea7302a150b96bc75af7d749607392ecac6" + integrity sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ== + +rtlcss@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-3.5.0.tgz#c9eb91269827a102bac7ae3115dd5d049de636c3" + integrity sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A== + dependencies: + find-up "^5.0.0" + picocolors "^1.0.0" + postcss "^8.3.11" + strip-json-comments "^3.1.1" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.4: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" + integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.1.tgz#eb2d042df8b01f4b5c276a2dfd41ba0faab72e8d" + integrity sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" + integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + dependencies: + node-forge "^1" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver@^5.4.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +serve-handler@^6.1.3: + version "6.1.5" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.5.tgz#a4a0964f5c55c7e37a02a633232b6f0d6f068375" + integrity sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg== + dependencies: + bytes "3.0.0" + content-disposition "0.5.2" + fast-url-parser "1.1.3" + mime-types "2.1.18" + minimatch "3.1.2" + path-is-inside "1.0.2" + path-to-regexp "2.2.1" + range-parser "1.2.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +shelljs@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +shiki@^0.14.1: + version "0.14.2" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.2.tgz#d51440800b701392b31ce2336036058e338247a1" + integrity sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A== + dependencies: + ansi-sequence-parser "^1.1.0" + jsonc-parser "^3.2.0" + vscode-oniguruma "^1.7.0" + vscode-textmate "^8.0.0" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sirv@^1.0.7: + version "1.0.19" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== + dependencies: + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +sitemap@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef" + integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== + dependencies: + "@types/node" "^17.0.5" + "@types/sax" "^1.2.1" + arg "^5.0.0" + sax "^1.2.4" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +sort-css-media-queries@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz#7c85e06f79826baabb232f5560e9745d7a78c4ce" + integrity sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +std-env@^3.0.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.3.tgz#a54f06eb245fdcfef53d56f3c0251f1d5c3d01fe" + integrity sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg== + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +style-to-object@0.3.0, style-to-object@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" + integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== + dependencies: + inline-style-parser "0.1.1" + +stylehacks@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" + integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== + dependencies: + browserslist "^4.21.4" + postcss-selector-parser "^6.0.4" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^2.7.0, svgo@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.7: + version "5.3.9" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" + integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.16.8" + +terser@^5.10.0, terser@^5.16.8: + version "5.17.7" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.7.tgz#2a8b134826fe179b711969fd9d9a0c2479b2a8c3" + integrity sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tiny-invariant@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" + integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== + +tiny-warning@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-vfile@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/to-vfile/-/to-vfile-6.1.0.tgz#5f7a3f65813c2c4e34ee1f7643a5646344627699" + integrity sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw== + dependencies: + is-buffer "^2.0.0" + vfile "^4.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +trim-trailing-lines@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^2.5.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedoc@^0.23.28: + version "0.23.28" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.23.28.tgz#3ce9c36ef1c273fa849d2dea18651855100d3ccd" + integrity sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w== + dependencies: + lunr "^2.3.9" + marked "^4.2.12" + minimatch "^7.1.3" + shiki "^0.14.1" + +typescript@^4.6.4: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +ua-parser-js@^0.7.30: + version "0.7.35" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307" + integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== + +unescape@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unescape/-/unescape-1.0.1.tgz#956e430f61cad8a4d57d82c518f5e6cc5d0dda96" + integrity sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ== + dependencies: + extend-shallow "^2.0.1" + +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0, unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unified@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" + integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unified@^9.0.0, unified@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +unist-builder@2.0.3, unist-builder@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== + +unist-util-find-after@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-util-find-after/-/unist-util-find-after-3.0.0.tgz#5c65fcebf64d4f8f496db46fa8fd0fbf354b43e6" + integrity sha512-ojlBqfsBftYXExNu3+hHLfJQ/X1jYY/9vdm4yZWjIbf0VuWF6CRufci1ZyoD/wV2TYMKxXUoNuoqwy+CkgzAiQ== + dependencies: + unist-util-is "^4.0.0" + +unist-util-generated@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== + +unist-util-is@^4.0.0, unist-util-is@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-position@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + +unist-util-remove-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" + integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== + dependencies: + unist-util-visit "^2.0.0" + +unist-util-remove@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz#b0b4738aa7ee445c402fda9328d604a02d010588" + integrity sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q== + dependencies: + unist-util-is "^4.0.0" + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +update-notifier@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" + integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== + dependencies: + boxen "^5.0.0" + chalk "^4.1.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.4.0" + is-npm "^5.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.1.0" + pupa "^2.1.1" + semver "^7.3.4" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-loader@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +use-composed-ref@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" + integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== + +use-isomorphic-layout-effect@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + +use-latest@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" + integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== + dependencies: + use-isomorphic-layout-effect "^1.1.1" + +use-sync-external-store@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utility-types@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vfile-location@^3.0.0, vfile-location@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" + integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +vlq@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" + integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== + +vscode-oniguruma@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" + integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== + +vscode-textmate@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" + integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== + +wait-on@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.1.tgz#16bbc4d1e4ebdd41c5b4e63a2e16dbd1f4e5601e" + integrity sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw== + dependencies: + axios "^0.25.0" + joi "^17.6.0" + lodash "^4.17.21" + minimist "^1.2.5" + rxjs "^7.5.4" + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-namespaces@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-bundle-analyzer@^4.5.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz#fc093c4ab174fd3dcbd1c30b763f56d10141209d" + integrity sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw== + dependencies: + "@discoveryjs/json-ext" "0.5.7" + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^7.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.9.3: + version "4.15.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz#87ba9006eca53c551607ea0d663f4ae88be7af21" + integrity sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.13.0" + +webpack-merge@^5.8.0: + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.2, webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.73.0: + version "5.85.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.85.0.tgz#c14a6a3a91f84d67c450225661fda8da36bc7f49" + integrity sha512-7gazTiYqwo5OSqwH1tigLDL2r3qDeP2dOKYgd+LlXpsUMqDTklg6tOghexqky0/+6QY38kb/R/uRPUleuL43zg== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + acorn "^8.7.1" + acorn-import-assertions "^1.9.0" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.14.1" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.2" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.7" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +webpackbar@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-5.0.2.tgz#d3dd466211c73852741dfc842b7556dcbc2b0570" + integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ== + dependencies: + chalk "^4.1.0" + consola "^2.15.3" + pretty-time "^1.1.0" + std-env "^3.0.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +widest-line@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" + integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== + dependencies: + string-width "^5.0.1" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.3.1: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xml-js@^1.6.11: + version "1.6.11" + resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== + dependencies: + sax "^1.2.4" + +xtend@^4.0.0, xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== diff --git a/fixtures/build/Basic.json b/fixtures/build/Basic.json new file mode 100644 index 00000000000..13871960a67 --- /dev/null +++ b/fixtures/build/Basic.json @@ -0,0 +1,301 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_val", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_stringValue", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "str", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "val", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "flag", + "type": "bool" + } + ], + "name": "MultiValueEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "str", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "val", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bool", + "name": "flag", + "type": "bool" + } + ], + "name": "MultiValueIndexedEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "string", + "name": "str", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "val", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bool", + "name": "flag", + "type": "bool" + } + ], + "name": "MultiValueIndexedEventWithStringIndexed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringEvent", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + }, + { + "internalType": "uint256", + "name": "val", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "flag", + "type": "bool" + } + ], + "name": "firesMultiValueEvent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + }, + { + "internalType": "uint256", + "name": "val", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "flag", + "type": "bool" + } + ], + "name": "firesMultiValueIndexedEvent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + }, + { + "internalType": "uint256", + "name": "val", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "flag", + "type": "bool" + } + ], + "name": "firesMultiValueIndexedEventWithStringIndexed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_str", + "type": "string" + } + ], + "name": "firesStringEvent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getBoolValue", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getIntValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStringValue", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getValues", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "string", + "name": "", + "type": "string" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "requireWithReason", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "requireWithoutReason", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "reverts", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_stringValue", + "type": "string" + }, + { + "internalType": "bool", + "name": "_boolValue", + "type": "bool" + } + ], + "name": "setValues", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "object": "60806040523480156200001157600080fd5b5060405162001068380380620010688339818101604052810190620000379190620002e7565b816000819055508060019080519060200190620000569291906200005f565b505050620003b1565b8280546200006d906200037c565b90600052602060002090601f016020900481019282620000915760008555620000dd565b82601f10620000ac57805160ff1916838001178555620000dd565b82800160010185558215620000dd579182015b82811115620000dc578251825591602001919060010190620000bf565b5b509050620000ec9190620000f0565b5090565b5b808211156200010b576000816000905550600101620000f1565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b620001388162000123565b81146200014457600080fd5b50565b60008151905062000158816200012d565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001b38262000168565b810181811067ffffffffffffffff82111715620001d557620001d462000179565b5b80604052505050565b6000620001ea6200010f565b9050620001f88282620001a8565b919050565b600067ffffffffffffffff8211156200021b576200021a62000179565b5b620002268262000168565b9050602081019050919050565b60005b838110156200025357808201518184015260208101905062000236565b8381111562000263576000848401525b50505050565b6000620002806200027a84620001fd565b620001de565b9050828152602081018484840111156200029f576200029e62000163565b5b620002ac84828562000233565b509392505050565b600082601f830112620002cc57620002cb6200015e565b5b8151620002de84826020860162000269565b91505092915050565b6000806040838503121562000301576200030062000119565b5b6000620003118582860162000147565b925050602083015167ffffffffffffffff8111156200033557620003346200011e565b5b6200034385828601620002b4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200039557607f821691505b602082108103620003ab57620003aa6200034d565b5b50919050565b610ca780620003c16000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063844d6a3211610071578063844d6a3214610157578063939d7c4e14610161578063ae012ede1461017d578063b7a8238a14610187578063d7af8ac1146101a3578063e8256ea0146101bf576100b4565b806319eb4a90146100b95780632bfc4c69146100d95780633bccbbc9146100f75780635a018657146101015780637cfbdcf01461011d578063828909bd14610139575b600080fd5b6100c16101dd565b6040516100d093929190610680565b60405180910390f35b6100e161028e565b6040516100ee91906106be565b60405180910390f35b6100ff610320565b005b61011b60048036038101906101169190610881565b61035b565b005b61013760048036038101906101329190610950565b61039b565b005b6101416103e9565b60405161014e91906109c4565b60405180910390f35b61015f6103f2565b005b61017b60048036038101906101769190610881565b610435565b005b610185610475565b005b6101a1600480360381019061019c91906109df565b610482565b005b6101bd60048036038101906101b89190610a28565b6104bc565b005b6101c76104f9565b6040516101d49190610a97565b60405180910390f35b60006060600080546001600260009054906101000a900460ff1681805461020390610ae1565b80601f016020809104026020016040519081016040528092919081815260200182805461022f90610ae1565b801561027c5780601f106102515761010080835404028352916020019161027c565b820191906000526020600020905b81548152906001019060200180831161025f57829003601f168201915b50505050509150925092509250909192565b60606001805461029d90610ae1565b80601f01602080910402602001604051908101604052809291908181526020018280546102c990610ae1565b80156103165780601f106102eb57610100808354040283529160200191610316565b820191906000526020600020905b8154815290600101906020018083116102f957829003601f168201915b5050505050905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035290610b5e565b60405180910390fd5b7fa8297798732ff8a80a23cf22707934835a9d5b03536598708f7414646a1b95b383838360405161038e93929190610b7e565b60405180910390a1505050565b8015158285856040516103af929190610bec565b60405180910390207f5b5730af07e266d8b4845f404beb3b193085c686b0edd8e8e20cd4b3fc2b6cd560405160405180910390a450505050565b60008054905090565b6000610433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042a90610c51565b60405180910390fd5b565b801515827f553c4a49a36d26504ba0880f2f9bfe9ac7db4b81a893bde296546cd96ae0b33c8560405161046891906106be565b60405180910390a3505050565b600061048057600080fd5b565b7f617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab816040516104b191906106be565b60405180910390a150565b8260008190555081600190805190602001906104d9929190610510565b5080600260006101000a81548160ff021916908315150217905550505050565b6000600260009054906101000a900460ff16905090565b82805461051c90610ae1565b90600052602060002090601f01602090048101928261053e5760008555610585565b82601f1061055757805160ff1916838001178555610585565b82800160010185558215610585579182015b82811115610584578251825591602001919060010190610569565b5b5090506105929190610596565b5090565b5b808211156105af576000816000905550600101610597565b5090565b6000819050919050565b6105c6816105b3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156106065780820151818401526020810190506105eb565b83811115610615576000848401525b50505050565b6000601f19601f8301169050919050565b6000610637826105cc565b61064181856105d7565b93506106518185602086016105e8565b61065a8161061b565b840191505092915050565b60008115159050919050565b61067a81610665565b82525050565b600060608201905061069560008301866105bd565b81810360208301526106a7818561062c565b90506106b66040830184610671565b949350505050565b600060208201905081810360008301526106d8818461062c565b905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6107368261061b565b810181811067ffffffffffffffff82111715610755576107546106fe565b5b80604052505050565b60006107686106e0565b9050610774828261072d565b919050565b600067ffffffffffffffff821115610794576107936106fe565b5b61079d8261061b565b9050602081019050919050565b82818337600083830152505050565b60006107cc6107c784610779565b61075e565b9050828152602081018484840111156107e8576107e76106f9565b5b6107f38482856107aa565b509392505050565b600082601f8301126108105761080f6106f4565b5b81356108208482602086016107b9565b91505092915050565b610832816105b3565b811461083d57600080fd5b50565b60008135905061084f81610829565b92915050565b61085e81610665565b811461086957600080fd5b50565b60008135905061087b81610855565b92915050565b60008060006060848603121561089a576108996106ea565b5b600084013567ffffffffffffffff8111156108b8576108b76106ef565b5b6108c4868287016107fb565b93505060206108d586828701610840565b92505060406108e68682870161086c565b9150509250925092565b600080fd5b600080fd5b60008083601f8401126109105761090f6106f4565b5b8235905067ffffffffffffffff81111561092d5761092c6108f0565b5b602083019150836001820283011115610949576109486108f5565b5b9250929050565b6000806000806060858703121561096a576109696106ea565b5b600085013567ffffffffffffffff811115610988576109876106ef565b5b610994878288016108fa565b945094505060206109a787828801610840565b92505060406109b88782880161086c565b91505092959194509250565b60006020820190506109d960008301846105bd565b92915050565b6000602082840312156109f5576109f46106ea565b5b600082013567ffffffffffffffff811115610a1357610a126106ef565b5b610a1f848285016107fb565b91505092915050565b600080600060608486031215610a4157610a406106ea565b5b6000610a4f86828701610840565b935050602084013567ffffffffffffffff811115610a7057610a6f6106ef565b5b610a7c868287016107fb565b9250506040610a8d8682870161086c565b9150509250925092565b6000602082019050610aac6000830184610671565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610af957607f821691505b602082108103610b0c57610b0b610ab2565b5b50919050565b7f5245564552544544205749544820524556455254000000000000000000000000600082015250565b6000610b486014836105d7565b9150610b5382610b12565b602082019050919050565b60006020820190508181036000830152610b7781610b3b565b9050919050565b60006060820190508181036000830152610b98818661062c565b9050610ba760208301856105bd565b610bb46040830184610671565b949350505050565b600081905092915050565b6000610bd38385610bbc565b9350610be08385846107aa565b82840190509392505050565b6000610bf9828486610bc7565b91508190509392505050565b7f5245564552544544205749544820524551554952450000000000000000000000600082015250565b6000610c3b6015836105d7565b9150610c4682610c05565b602082019050919050565b60006020820190508181036000830152610c6a81610c2e565b905091905056fea2646970667358221220ca8ff7a2edb3cb30dd9de0ed5a0665fd7ee39e4680760776b264f55d8f5ef51c64736f6c634300080d0033" + } + } +} diff --git a/fixtures/build/Basic.ts b/fixtures/build/Basic.ts new file mode 100644 index 00000000000..f0e46a36550 --- /dev/null +++ b/fixtures/build/Basic.ts @@ -0,0 +1,312 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const BasicAbi = [ + { + inputs: [ + { + internalType: 'uint256', + name: '_val', + type: 'uint256', + }, + { + internalType: 'string', + name: '_stringValue', + type: 'string', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'string', + name: 'str', + type: 'string', + }, + { + indexed: false, + internalType: 'uint256', + name: 'val', + type: 'uint256', + }, + { + indexed: false, + internalType: 'bool', + name: 'flag', + type: 'bool', + }, + ], + name: 'MultiValueEvent', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'string', + name: 'str', + type: 'string', + }, + { + indexed: true, + internalType: 'uint256', + name: 'val', + type: 'uint256', + }, + { + indexed: true, + internalType: 'bool', + name: 'flag', + type: 'bool', + }, + ], + name: 'MultiValueIndexedEvent', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'string', + name: 'str', + type: 'string', + }, + { + indexed: true, + internalType: 'uint256', + name: 'val', + type: 'uint256', + }, + { + indexed: true, + internalType: 'bool', + name: 'flag', + type: 'bool', + }, + ], + name: 'MultiValueIndexedEventWithStringIndexed', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'string', + name: 'str', + type: 'string', + }, + ], + name: 'StringEvent', + type: 'event', + }, + { + inputs: [ + { + internalType: 'string', + name: 'str', + type: 'string', + }, + { + internalType: 'uint256', + name: 'val', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'flag', + type: 'bool', + }, + ], + name: 'firesMultiValueEvent', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'string', + name: 'str', + type: 'string', + }, + { + internalType: 'uint256', + name: 'val', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'flag', + type: 'bool', + }, + ], + name: 'firesMultiValueIndexedEvent', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'string', + name: 'str', + type: 'string', + }, + { + internalType: 'uint256', + name: 'val', + type: 'uint256', + }, + { + internalType: 'bool', + name: 'flag', + type: 'bool', + }, + ], + name: 'firesMultiValueIndexedEventWithStringIndexed', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'string', + name: '_str', + type: 'string', + }, + ], + name: 'firesStringEvent', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'getBoolValue', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'getIntValue', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'getStringValue', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'getValues', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + { + internalType: 'string', + name: '', + type: 'string', + }, + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'requireWithReason', + outputs: [], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [], + name: 'requireWithoutReason', + outputs: [], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [], + name: 'reverts', + outputs: [], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: '_value', + type: 'uint256', + }, + { + internalType: 'string', + name: '_stringValue', + type: 'string', + }, + { + internalType: 'bool', + name: '_boolValue', + type: 'bool', + }, + ], + name: 'setValues', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, +] as const; +export const BasicBytecode = + '0x60806040523480156200001157600080fd5b5060405162001068380380620010688339818101604052810190620000379190620002e7565b816000819055508060019080519060200190620000569291906200005f565b505050620003b1565b8280546200006d906200037c565b90600052602060002090601f016020900481019282620000915760008555620000dd565b82601f10620000ac57805160ff1916838001178555620000dd565b82800160010185558215620000dd579182015b82811115620000dc578251825591602001919060010190620000bf565b5b509050620000ec9190620000f0565b5090565b5b808211156200010b576000816000905550600101620000f1565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b620001388162000123565b81146200014457600080fd5b50565b60008151905062000158816200012d565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001b38262000168565b810181811067ffffffffffffffff82111715620001d557620001d462000179565b5b80604052505050565b6000620001ea6200010f565b9050620001f88282620001a8565b919050565b600067ffffffffffffffff8211156200021b576200021a62000179565b5b620002268262000168565b9050602081019050919050565b60005b838110156200025357808201518184015260208101905062000236565b8381111562000263576000848401525b50505050565b6000620002806200027a84620001fd565b620001de565b9050828152602081018484840111156200029f576200029e62000163565b5b620002ac84828562000233565b509392505050565b600082601f830112620002cc57620002cb6200015e565b5b8151620002de84826020860162000269565b91505092915050565b6000806040838503121562000301576200030062000119565b5b6000620003118582860162000147565b925050602083015167ffffffffffffffff8111156200033557620003346200011e565b5b6200034385828601620002b4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200039557607f821691505b602082108103620003ab57620003aa6200034d565b5b50919050565b610ca780620003c16000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063844d6a3211610071578063844d6a3214610157578063939d7c4e14610161578063ae012ede1461017d578063b7a8238a14610187578063d7af8ac1146101a3578063e8256ea0146101bf576100b4565b806319eb4a90146100b95780632bfc4c69146100d95780633bccbbc9146100f75780635a018657146101015780637cfbdcf01461011d578063828909bd14610139575b600080fd5b6100c16101dd565b6040516100d093929190610680565b60405180910390f35b6100e161028e565b6040516100ee91906106be565b60405180910390f35b6100ff610320565b005b61011b60048036038101906101169190610881565b61035b565b005b61013760048036038101906101329190610950565b61039b565b005b6101416103e9565b60405161014e91906109c4565b60405180910390f35b61015f6103f2565b005b61017b60048036038101906101769190610881565b610435565b005b610185610475565b005b6101a1600480360381019061019c91906109df565b610482565b005b6101bd60048036038101906101b89190610a28565b6104bc565b005b6101c76104f9565b6040516101d49190610a97565b60405180910390f35b60006060600080546001600260009054906101000a900460ff1681805461020390610ae1565b80601f016020809104026020016040519081016040528092919081815260200182805461022f90610ae1565b801561027c5780601f106102515761010080835404028352916020019161027c565b820191906000526020600020905b81548152906001019060200180831161025f57829003601f168201915b50505050509150925092509250909192565b60606001805461029d90610ae1565b80601f01602080910402602001604051908101604052809291908181526020018280546102c990610ae1565b80156103165780601f106102eb57610100808354040283529160200191610316565b820191906000526020600020905b8154815290600101906020018083116102f957829003601f168201915b5050505050905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035290610b5e565b60405180910390fd5b7fa8297798732ff8a80a23cf22707934835a9d5b03536598708f7414646a1b95b383838360405161038e93929190610b7e565b60405180910390a1505050565b8015158285856040516103af929190610bec565b60405180910390207f5b5730af07e266d8b4845f404beb3b193085c686b0edd8e8e20cd4b3fc2b6cd560405160405180910390a450505050565b60008054905090565b6000610433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042a90610c51565b60405180910390fd5b565b801515827f553c4a49a36d26504ba0880f2f9bfe9ac7db4b81a893bde296546cd96ae0b33c8560405161046891906106be565b60405180910390a3505050565b600061048057600080fd5b565b7f617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab816040516104b191906106be565b60405180910390a150565b8260008190555081600190805190602001906104d9929190610510565b5080600260006101000a81548160ff021916908315150217905550505050565b6000600260009054906101000a900460ff16905090565b82805461051c90610ae1565b90600052602060002090601f01602090048101928261053e5760008555610585565b82601f1061055757805160ff1916838001178555610585565b82800160010185558215610585579182015b82811115610584578251825591602001919060010190610569565b5b5090506105929190610596565b5090565b5b808211156105af576000816000905550600101610597565b5090565b6000819050919050565b6105c6816105b3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156106065780820151818401526020810190506105eb565b83811115610615576000848401525b50505050565b6000601f19601f8301169050919050565b6000610637826105cc565b61064181856105d7565b93506106518185602086016105e8565b61065a8161061b565b840191505092915050565b60008115159050919050565b61067a81610665565b82525050565b600060608201905061069560008301866105bd565b81810360208301526106a7818561062c565b90506106b66040830184610671565b949350505050565b600060208201905081810360008301526106d8818461062c565b905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6107368261061b565b810181811067ffffffffffffffff82111715610755576107546106fe565b5b80604052505050565b60006107686106e0565b9050610774828261072d565b919050565b600067ffffffffffffffff821115610794576107936106fe565b5b61079d8261061b565b9050602081019050919050565b82818337600083830152505050565b60006107cc6107c784610779565b61075e565b9050828152602081018484840111156107e8576107e76106f9565b5b6107f38482856107aa565b509392505050565b600082601f8301126108105761080f6106f4565b5b81356108208482602086016107b9565b91505092915050565b610832816105b3565b811461083d57600080fd5b50565b60008135905061084f81610829565b92915050565b61085e81610665565b811461086957600080fd5b50565b60008135905061087b81610855565b92915050565b60008060006060848603121561089a576108996106ea565b5b600084013567ffffffffffffffff8111156108b8576108b76106ef565b5b6108c4868287016107fb565b93505060206108d586828701610840565b92505060406108e68682870161086c565b9150509250925092565b600080fd5b600080fd5b60008083601f8401126109105761090f6106f4565b5b8235905067ffffffffffffffff81111561092d5761092c6108f0565b5b602083019150836001820283011115610949576109486108f5565b5b9250929050565b6000806000806060858703121561096a576109696106ea565b5b600085013567ffffffffffffffff811115610988576109876106ef565b5b610994878288016108fa565b945094505060206109a787828801610840565b92505060406109b88782880161086c565b91505092959194509250565b60006020820190506109d960008301846105bd565b92915050565b6000602082840312156109f5576109f46106ea565b5b600082013567ffffffffffffffff811115610a1357610a126106ef565b5b610a1f848285016107fb565b91505092915050565b600080600060608486031215610a4157610a406106ea565b5b6000610a4f86828701610840565b935050602084013567ffffffffffffffff811115610a7057610a6f6106ef565b5b610a7c868287016107fb565b9250506040610a8d8682870161086c565b9150509250925092565b6000602082019050610aac6000830184610671565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610af957607f821691505b602082108103610b0c57610b0b610ab2565b5b50919050565b7f5245564552544544205749544820524556455254000000000000000000000000600082015250565b6000610b486014836105d7565b9150610b5382610b12565b602082019050919050565b60006020820190508181036000830152610b7781610b3b565b9050919050565b60006060820190508181036000830152610b98818661062c565b9050610ba760208301856105bd565b610bb46040830184610671565b949350505050565b600081905092915050565b6000610bd38385610bbc565b9350610be08385846107aa565b82840190509392505050565b6000610bf9828486610bc7565b91508190509392505050565b7f5245564552544544205749544820524551554952450000000000000000000000600082015250565b6000610c3b6015836105d7565b9150610c4682610c05565b602082019050919050565b60006020820190508181036000830152610c6a81610c2e565b905091905056fea2646970667358221220ca8ff7a2edb3cb30dd9de0ed5a0665fd7ee39e4680760776b264f55d8f5ef51c64736f6c634300080d0033'; diff --git a/fixtures/build/DeployRevert.json b/fixtures/build/DeployRevert.json new file mode 100644 index 00000000000..a269cb96e51 --- /dev/null +++ b/fixtures/build/DeployRevert.json @@ -0,0 +1,14 @@ +{ + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + } + ], + "evm": { + "bytecode": { + "object": "6080604052348015600f57600080fd5b506000601a57600080fd5b603f8060276000396000f3fe6080604052600080fdfea264697066735822122097fd7c0cdcb3a8015df4cce061a4d7f8c2919787475e0b07d1b0ec13223097ac64736f6c63430008100033" + } + } +} diff --git a/fixtures/build/DeployRevert.ts b/fixtures/build/DeployRevert.ts new file mode 100644 index 00000000000..9f18d1a3630 --- /dev/null +++ b/fixtures/build/DeployRevert.ts @@ -0,0 +1,21 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const DeployRevertAbi = [ + { inputs: [], stateMutability: 'nonpayable', type: 'constructor' }, +] as const; +export const DeployRevertBytecode = + '0x6080604052348015600f57600080fd5b506000601a57600080fd5b603f8060276000396000f3fe6080604052600080fdfea264697066735822122097fd7c0cdcb3a8015df4cce061a4d7f8c2919787475e0b07d1b0ec13223097ac64736f6c63430008100033'; diff --git a/fixtures/build/ERC20Token.json b/fixtures/build/ERC20Token.json new file mode 100644 index 00000000000..98469b057a6 --- /dev/null +++ b/fixtures/build/ERC20Token.json @@ -0,0 +1,290 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "initialSupply", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "object": "60806040523480156200001157600080fd5b5060405162001990380380620019908339818101604052810190620000379190620002a4565b6040518060400160405280600481526020017f476f6c64000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f474c4400000000000000000000000000000000000000000000000000000000008152508160039081620000b4919062000546565b508060049081620000c6919062000546565b505050620000db3382620000e260201b60201c565b5062000748565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000154576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014b906200068e565b60405180910390fd5b62000168600083836200025a60201b60201c565b80600260008282546200017c9190620006df565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620001d39190620006df565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200023a91906200072b565b60405180910390a362000256600083836200025f60201b60201c565b5050565b505050565b505050565b600080fd5b6000819050919050565b6200027e8162000269565b81146200028a57600080fd5b50565b6000815190506200029e8162000273565b92915050565b600060208284031215620002bd57620002bc62000264565b5b6000620002cd848285016200028d565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200035857607f821691505b6020821081036200036e576200036d62000310565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003d87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000399565b620003e4868362000399565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000427620004216200041b8462000269565b620003fc565b62000269565b9050919050565b6000819050919050565b620004438362000406565b6200045b62000452826200042e565b848454620003a6565b825550505050565b600090565b6200047262000463565b6200047f81848462000438565b505050565b5b81811015620004a7576200049b60008262000468565b60018101905062000485565b5050565b601f821115620004f657620004c08162000374565b620004cb8462000389565b81016020851015620004db578190505b620004f3620004ea8562000389565b83018262000484565b50505b505050565b600082821c905092915050565b60006200051b60001984600802620004fb565b1980831691505092915050565b600062000536838362000508565b9150826002028217905092915050565b6200055182620002d6565b67ffffffffffffffff8111156200056d576200056c620002e1565b5b6200057982546200033f565b62000586828285620004ab565b600060209050601f831160018114620005be5760008415620005a9578287015190505b620005b5858262000528565b86555062000625565b601f198416620005ce8662000374565b60005b82811015620005f857848901518255600182019150602085019450602081019050620005d1565b8683101562000618578489015162000614601f89168262000508565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000676601f836200062d565b915062000683826200063e565b602082019050919050565b60006020820190508181036000830152620006a98162000667565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620006ec8262000269565b9150620006f98362000269565b9250828201905080821115620007145762000713620006b0565b5b92915050565b620007258162000269565b82525050565b60006020820190506200074260008301846200071a565b92915050565b61123880620007586000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b15565b60405180910390f35b6100e660048036038101906100e19190610bd0565b610308565b6040516100f39190610c2b565b60405180910390f35b61010461032b565b6040516101119190610c55565b60405180910390f35b610134600480360381019061012f9190610c70565b610335565b6040516101419190610c2b565b60405180910390f35b610152610364565b60405161015f9190610cdf565b60405180910390f35b610182600480360381019061017d9190610bd0565b61036d565b60405161018f9190610c2b565b60405180910390f35b6101b260048036038101906101ad9190610cfa565b6103a4565b6040516101bf9190610c55565b60405180910390f35b6101d06103ec565b6040516101dd9190610b15565b60405180910390f35b61020060048036038101906101fb9190610bd0565b61047e565b60405161020d9190610c2b565b60405180910390f35b610230600480360381019061022b9190610bd0565b6104f5565b60405161023d9190610c2b565b60405180910390f35b610260600480360381019061025b9190610d27565b610518565b60405161026d9190610c55565b60405180910390f35b60606003805461028590610d96565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610d96565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b60008061031361059f565b90506103208185856105a7565b600191505092915050565b6000600254905090565b60008061034061059f565b905061034d858285610770565b6103588585856107fc565b60019150509392505050565b60006012905090565b60008061037861059f565b905061039981858561038a8589610518565b6103949190610df6565b6105a7565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610d96565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610d96565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b60008061048961059f565b905060006104978286610518565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610e9c565b60405180910390fd5b6104e982868684036105a7565b60019250505092915050565b60008061050061059f565b905061050d8185856107fc565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d90610f2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c90610fc0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107639190610c55565b60405180910390a3505050565b600061077c8484610518565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107f657818110156107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df9061102c565b60405180910390fd5b6107f584848484036105a7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361086b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610862906110be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190611150565b60405180910390fd5b6108e5838383610a7b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610962906111e2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109fe9190610df6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a629190610c55565b60405180910390a3610a75848484610a80565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610abf578082015181840152602081019050610aa4565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ae782610a85565b610af18185610a90565b9350610b01818560208601610aa1565b610b0a81610acb565b840191505092915050565b60006020820190508181036000830152610b2f8184610adc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b6782610b3c565b9050919050565b610b7781610b5c565b8114610b8257600080fd5b50565b600081359050610b9481610b6e565b92915050565b6000819050919050565b610bad81610b9a565b8114610bb857600080fd5b50565b600081359050610bca81610ba4565b92915050565b60008060408385031215610be757610be6610b37565b5b6000610bf585828601610b85565b9250506020610c0685828601610bbb565b9150509250929050565b60008115159050919050565b610c2581610c10565b82525050565b6000602082019050610c406000830184610c1c565b92915050565b610c4f81610b9a565b82525050565b6000602082019050610c6a6000830184610c46565b92915050565b600080600060608486031215610c8957610c88610b37565b5b6000610c9786828701610b85565b9350506020610ca886828701610b85565b9250506040610cb986828701610bbb565b9150509250925092565b600060ff82169050919050565b610cd981610cc3565b82525050565b6000602082019050610cf46000830184610cd0565b92915050565b600060208284031215610d1057610d0f610b37565b5b6000610d1e84828501610b85565b91505092915050565b60008060408385031215610d3e57610d3d610b37565b5b6000610d4c85828601610b85565b9250506020610d5d85828601610b85565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610dae57607f821691505b602082108103610dc157610dc0610d67565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e0182610b9a565b9150610e0c83610b9a565b9250828201905080821115610e2457610e23610dc7565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610e86602583610a90565b9150610e9182610e2a565b604082019050919050565b60006020820190508181036000830152610eb581610e79565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000610f18602483610a90565b9150610f2382610ebc565b604082019050919050565b60006020820190508181036000830152610f4781610f0b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000610faa602283610a90565b9150610fb582610f4e565b604082019050919050565b60006020820190508181036000830152610fd981610f9d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611016601d83610a90565b915061102182610fe0565b602082019050919050565b6000602082019050818103600083015261104581611009565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006110a8602583610a90565b91506110b38261104c565b604082019050919050565b600060208201905081810360008301526110d78161109b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061113a602383610a90565b9150611145826110de565b604082019050919050565b600060208201905081810360008301526111698161112d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006111cc602683610a90565b91506111d782611170565b604082019050919050565b600060208201905081810360008301526111fb816111bf565b905091905056fea26469706673582212200f5d4d388d874300a0683419c878ee355f87f7a6d61c24dc48ad65d7996e729964736f6c63430008100033" + } + } +} diff --git a/fixtures/build/ERC20Token.ts b/fixtures/build/ERC20Token.ts new file mode 100644 index 00000000000..4516af45e9f --- /dev/null +++ b/fixtures/build/ERC20Token.ts @@ -0,0 +1,141 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const ERC20TokenAbi = [ + { + inputs: [{ internalType: 'uint256', name: 'initialSupply', type: 'uint256' }], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'owner', type: 'address' }, + { indexed: true, internalType: 'address', name: 'spender', type: 'address' }, + { indexed: false, internalType: 'uint256', name: 'value', type: 'uint256' }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'from', type: 'address' }, + { indexed: true, internalType: 'address', name: 'to', type: 'address' }, + { indexed: false, internalType: 'uint256', name: 'value', type: 'uint256' }, + ], + name: 'Transfer', + type: 'event', + }, + { + inputs: [ + { internalType: 'address', name: 'owner', type: 'address' }, + { internalType: 'address', name: 'spender', type: 'address' }, + ], + name: 'allowance', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'spender', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'approve', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [{ internalType: 'address', name: 'account', type: 'address' }], + name: 'balanceOf', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'decimals', + outputs: [{ internalType: 'uint8', name: '', type: 'uint8' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'spender', type: 'address' }, + { internalType: 'uint256', name: 'subtractedValue', type: 'uint256' }, + ], + name: 'decreaseAllowance', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'spender', type: 'address' }, + { internalType: 'uint256', name: 'addedValue', type: 'uint256' }, + ], + name: 'increaseAllowance', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'name', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'symbol', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'totalSupply', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'transfer', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'from', type: 'address' }, + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, +] as const; +export const ERC20TokenBytecode = + '0x60806040523480156200001157600080fd5b5060405162001990380380620019908339818101604052810190620000379190620002a4565b6040518060400160405280600481526020017f476f6c64000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f474c4400000000000000000000000000000000000000000000000000000000008152508160039081620000b4919062000546565b508060049081620000c6919062000546565b505050620000db3382620000e260201b60201c565b5062000748565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000154576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014b906200068e565b60405180910390fd5b62000168600083836200025a60201b60201c565b80600260008282546200017c9190620006df565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620001d39190620006df565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200023a91906200072b565b60405180910390a362000256600083836200025f60201b60201c565b5050565b505050565b505050565b600080fd5b6000819050919050565b6200027e8162000269565b81146200028a57600080fd5b50565b6000815190506200029e8162000273565b92915050565b600060208284031215620002bd57620002bc62000264565b5b6000620002cd848285016200028d565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200035857607f821691505b6020821081036200036e576200036d62000310565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003d87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000399565b620003e4868362000399565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000427620004216200041b8462000269565b620003fc565b62000269565b9050919050565b6000819050919050565b620004438362000406565b6200045b62000452826200042e565b848454620003a6565b825550505050565b600090565b6200047262000463565b6200047f81848462000438565b505050565b5b81811015620004a7576200049b60008262000468565b60018101905062000485565b5050565b601f821115620004f657620004c08162000374565b620004cb8462000389565b81016020851015620004db578190505b620004f3620004ea8562000389565b83018262000484565b50505b505050565b600082821c905092915050565b60006200051b60001984600802620004fb565b1980831691505092915050565b600062000536838362000508565b9150826002028217905092915050565b6200055182620002d6565b67ffffffffffffffff8111156200056d576200056c620002e1565b5b6200057982546200033f565b62000586828285620004ab565b600060209050601f831160018114620005be5760008415620005a9578287015190505b620005b5858262000528565b86555062000625565b601f198416620005ce8662000374565b60005b82811015620005f857848901518255600182019150602085019450602081019050620005d1565b8683101562000618578489015162000614601f89168262000508565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000676601f836200062d565b915062000683826200063e565b602082019050919050565b60006020820190508181036000830152620006a98162000667565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620006ec8262000269565b9150620006f98362000269565b9250828201905080821115620007145762000713620006b0565b5b92915050565b620007258162000269565b82525050565b60006020820190506200074260008301846200071a565b92915050565b61123880620007586000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b15565b60405180910390f35b6100e660048036038101906100e19190610bd0565b610308565b6040516100f39190610c2b565b60405180910390f35b61010461032b565b6040516101119190610c55565b60405180910390f35b610134600480360381019061012f9190610c70565b610335565b6040516101419190610c2b565b60405180910390f35b610152610364565b60405161015f9190610cdf565b60405180910390f35b610182600480360381019061017d9190610bd0565b61036d565b60405161018f9190610c2b565b60405180910390f35b6101b260048036038101906101ad9190610cfa565b6103a4565b6040516101bf9190610c55565b60405180910390f35b6101d06103ec565b6040516101dd9190610b15565b60405180910390f35b61020060048036038101906101fb9190610bd0565b61047e565b60405161020d9190610c2b565b60405180910390f35b610230600480360381019061022b9190610bd0565b6104f5565b60405161023d9190610c2b565b60405180910390f35b610260600480360381019061025b9190610d27565b610518565b60405161026d9190610c55565b60405180910390f35b60606003805461028590610d96565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610d96565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b60008061031361059f565b90506103208185856105a7565b600191505092915050565b6000600254905090565b60008061034061059f565b905061034d858285610770565b6103588585856107fc565b60019150509392505050565b60006012905090565b60008061037861059f565b905061039981858561038a8589610518565b6103949190610df6565b6105a7565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610d96565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610d96565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b60008061048961059f565b905060006104978286610518565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610e9c565b60405180910390fd5b6104e982868684036105a7565b60019250505092915050565b60008061050061059f565b905061050d8185856107fc565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d90610f2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c90610fc0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107639190610c55565b60405180910390a3505050565b600061077c8484610518565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107f657818110156107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df9061102c565b60405180910390fd5b6107f584848484036105a7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361086b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610862906110be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190611150565b60405180910390fd5b6108e5838383610a7b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610962906111e2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109fe9190610df6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a629190610c55565b60405180910390a3610a75848484610a80565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610abf578082015181840152602081019050610aa4565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ae782610a85565b610af18185610a90565b9350610b01818560208601610aa1565b610b0a81610acb565b840191505092915050565b60006020820190508181036000830152610b2f8184610adc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b6782610b3c565b9050919050565b610b7781610b5c565b8114610b8257600080fd5b50565b600081359050610b9481610b6e565b92915050565b6000819050919050565b610bad81610b9a565b8114610bb857600080fd5b50565b600081359050610bca81610ba4565b92915050565b60008060408385031215610be757610be6610b37565b5b6000610bf585828601610b85565b9250506020610c0685828601610bbb565b9150509250929050565b60008115159050919050565b610c2581610c10565b82525050565b6000602082019050610c406000830184610c1c565b92915050565b610c4f81610b9a565b82525050565b6000602082019050610c6a6000830184610c46565b92915050565b600080600060608486031215610c8957610c88610b37565b5b6000610c9786828701610b85565b9350506020610ca886828701610b85565b9250506040610cb986828701610bbb565b9150509250925092565b600060ff82169050919050565b610cd981610cc3565b82525050565b6000602082019050610cf46000830184610cd0565b92915050565b600060208284031215610d1057610d0f610b37565b5b6000610d1e84828501610b85565b91505092915050565b60008060408385031215610d3e57610d3d610b37565b5b6000610d4c85828601610b85565b9250506020610d5d85828601610b85565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610dae57607f821691505b602082108103610dc157610dc0610d67565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e0182610b9a565b9150610e0c83610b9a565b9250828201905080821115610e2457610e23610dc7565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610e86602583610a90565b9150610e9182610e2a565b604082019050919050565b60006020820190508181036000830152610eb581610e79565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000610f18602483610a90565b9150610f2382610ebc565b604082019050919050565b60006020820190508181036000830152610f4781610f0b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000610faa602283610a90565b9150610fb582610f4e565b604082019050919050565b60006020820190508181036000830152610fd981610f9d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611016601d83610a90565b915061102182610fe0565b602082019050919050565b6000602082019050818103600083015261104581611009565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006110a8602583610a90565b91506110b38261104c565b604082019050919050565b600060208201905081810360008301526110d78161109b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061113a602383610a90565b9150611145826110de565b604082019050919050565b600060208201905081810360008301526111698161112d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006111cc602683610a90565b91506111d782611170565b604082019050919050565b600060208201905081810360008301526111fb816111bf565b905091905056fea26469706673582212200f5d4d388d874300a0683419c878ee355f87f7a6d61c24dc48ad65d7996e729964736f6c63430008100033'; diff --git a/fixtures/build/ERC721Token.json b/fixtures/build/ERC721Token.json new file mode 100644 index 00000000000..805adc04d81 --- /dev/null +++ b/fixtures/build/ERC721Token.json @@ -0,0 +1,368 @@ +{ + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "player", + "type": "address" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + } + ], + "name": "awardItem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "object": "60806040523480156200001157600080fd5b506040518060400160405280600881526020017f47616d654974656d0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f49544d000000000000000000000000000000000000000000000000000000000081525081600090816200008f919062000324565b508060019081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b612a36806200041b6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063b88d4fde11610066578063b88d4fde1461025b578063c87b56dd14610277578063cf378343146102a7578063e985e9c5146102d7576100ea565b806370a08231146101f157806395d89b4114610221578063a22cb4651461023f576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b610109600480360381019061010491906117b5565b610307565b60405161011691906117fd565b60405180910390f35b6101276103e9565b60405161013491906118a8565b60405180910390f35b61015760048036038101906101529190611900565b61047b565b604051610164919061196e565b60405180910390f35b610187600480360381019061018291906119b5565b6104c1565b005b6101a3600480360381019061019e91906119f5565b6105d8565b005b6101bf60048036038101906101ba91906119f5565b610638565b005b6101db60048036038101906101d69190611900565b610658565b6040516101e8919061196e565b60405180910390f35b61020b60048036038101906102069190611a48565b610709565b6040516102189190611a84565b60405180910390f35b6102296107c0565b60405161023691906118a8565b60405180910390f35b61025960048036038101906102549190611acb565b610852565b005b61027560048036038101906102709190611c40565b610868565b005b610291600480360381019061028c9190611900565b6108ca565b60405161029e91906118a8565b60405180910390f35b6102c160048036038101906102bc9190611d64565b6109dc565b6040516102ce9190611a84565b60405180910390f35b6102f160048036038101906102ec9190611dc0565b610a13565b6040516102fe91906117fd565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103e257506103e182610aa7565b5b9050919050565b6060600080546103f890611e2f565b80601f016020809104026020016040519081016040528092919081815260200182805461042490611e2f565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600061048682610b11565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104cc82610658565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611ed2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661055b610b5c565b73ffffffffffffffffffffffffffffffffffffffff16148061058a575061058981610584610b5c565b610a13565b5b6105c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c090611f64565b60405180910390fd5b6105d38383610b64565b505050565b6105e96105e3610b5c565b82610c1d565b610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f90611ff6565b60405180910390fd5b610633838383610cb2565b505050565b61065383838360405180602001604052806000815250610868565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f790612062565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610770906120f4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546107cf90611e2f565b80601f01602080910402602001604051908101604052809291908181526020018280546107fb90611e2f565b80156108485780601f1061081d57610100808354040283529160200191610848565b820191906000526020600020905b81548152906001019060200180831161082b57829003601f168201915b5050505050905090565b61086461085d610b5c565b8383610f18565b5050565b610879610873610b5c565b83610c1d565b6108b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108af90611ff6565b60405180910390fd5b6108c484848484611084565b50505050565b60606108d582610b11565b60006006600084815260200190815260200160002080546108f590611e2f565b80601f016020809104026020016040519081016040528092919081815260200182805461092190611e2f565b801561096e5780601f106109435761010080835404028352916020019161096e565b820191906000526020600020905b81548152906001019060200180831161095157829003601f168201915b50505050509050600061097f6110e0565b905060008151036109945781925050506109d7565b6000825111156109c95780826040516020016109b1929190612150565b604051602081830303815290604052925050506109d7565b6109d2846110f7565b925050505b919050565b6000806109e9600761115f565b90506109f5848261116d565b6109ff8184611346565b610a0960076113b3565b8091505092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610b1a816113c9565b610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090612062565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610bd783610658565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610c2983610658565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610c6b5750610c6a8185610a13565b5b80610ca957508373ffffffffffffffffffffffffffffffffffffffff16610c918461047b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610cd282610658565b73ffffffffffffffffffffffffffffffffffffffff1614610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f906121e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90612278565b60405180910390fd5b610da2838383611435565b610dad600082610b64565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610dfd91906122c7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e5491906122fb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f1383838361143a565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d9061237b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161107791906117fd565b60405180910390a3505050565b61108f848484610cb2565b61109b8484848461143f565b6110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d19061240d565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606061110282610b11565b600061110c6110e0565b9050600081511161112c5760405180602001604052806000815250611157565b80611136846115c6565b604051602001611147929190612150565b6040516020818303038152906040525b915050919050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d390612479565b60405180910390fd5b6111e5816113c9565b15611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c906124e5565b60405180910390fd5b61123160008383611435565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461128191906122fb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46113426000838361143a565b5050565b61134f826113c9565b61138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138590612577565b60405180910390fd5b806006600084815260200190815260200160002090816113ae9190612743565b505050565b6001816000016000828254019250508190555050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b60006114608473ffffffffffffffffffffffffffffffffffffffff16611726565b156115b9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611489610b5c565b8786866040518563ffffffff1660e01b81526004016114ab949392919061286a565b6020604051808303816000875af19250505080156114e757506040513d601f19601f820116820180604052508101906114e491906128cb565b60015b611569573d8060008114611517576040519150601f19603f3d011682016040523d82523d6000602084013e61151c565b606091505b506000815103611561576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115589061240d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506115be565b600190505b949350505050565b60606000820361160d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611721565b600082905060005b6000821461163f578080611628906128f8565b915050600a82611638919061296f565b9150611615565b60008167ffffffffffffffff81111561165b5761165a611b15565b5b6040519080825280601f01601f19166020018201604052801561168d5781602001600182028036833780820191505090505b5090505b6000851461171a576001826116a691906122c7565b9150600a856116b591906129a0565b60306116c191906122fb565b60f81b8183815181106116d7576116d66129d1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611713919061296f565b9450611691565b8093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117928161175d565b811461179d57600080fd5b50565b6000813590506117af81611789565b92915050565b6000602082840312156117cb576117ca611753565b5b60006117d9848285016117a0565b91505092915050565b60008115159050919050565b6117f7816117e2565b82525050565b600060208201905061181260008301846117ee565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611852578082015181840152602081019050611837565b60008484015250505050565b6000601f19601f8301169050919050565b600061187a82611818565b6118848185611823565b9350611894818560208601611834565b61189d8161185e565b840191505092915050565b600060208201905081810360008301526118c2818461186f565b905092915050565b6000819050919050565b6118dd816118ca565b81146118e857600080fd5b50565b6000813590506118fa816118d4565b92915050565b60006020828403121561191657611915611753565b5b6000611924848285016118eb565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119588261192d565b9050919050565b6119688161194d565b82525050565b6000602082019050611983600083018461195f565b92915050565b6119928161194d565b811461199d57600080fd5b50565b6000813590506119af81611989565b92915050565b600080604083850312156119cc576119cb611753565b5b60006119da858286016119a0565b92505060206119eb858286016118eb565b9150509250929050565b600080600060608486031215611a0e57611a0d611753565b5b6000611a1c868287016119a0565b9350506020611a2d868287016119a0565b9250506040611a3e868287016118eb565b9150509250925092565b600060208284031215611a5e57611a5d611753565b5b6000611a6c848285016119a0565b91505092915050565b611a7e816118ca565b82525050565b6000602082019050611a996000830184611a75565b92915050565b611aa8816117e2565b8114611ab357600080fd5b50565b600081359050611ac581611a9f565b92915050565b60008060408385031215611ae257611ae1611753565b5b6000611af0858286016119a0565b9250506020611b0185828601611ab6565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611b4d8261185e565b810181811067ffffffffffffffff82111715611b6c57611b6b611b15565b5b80604052505050565b6000611b7f611749565b9050611b8b8282611b44565b919050565b600067ffffffffffffffff821115611bab57611baa611b15565b5b611bb48261185e565b9050602081019050919050565b82818337600083830152505050565b6000611be3611bde84611b90565b611b75565b905082815260208101848484011115611bff57611bfe611b10565b5b611c0a848285611bc1565b509392505050565b600082601f830112611c2757611c26611b0b565b5b8135611c37848260208601611bd0565b91505092915050565b60008060008060808587031215611c5a57611c59611753565b5b6000611c68878288016119a0565b9450506020611c79878288016119a0565b9350506040611c8a878288016118eb565b925050606085013567ffffffffffffffff811115611cab57611caa611758565b5b611cb787828801611c12565b91505092959194509250565b600067ffffffffffffffff821115611cde57611cdd611b15565b5b611ce78261185e565b9050602081019050919050565b6000611d07611d0284611cc3565b611b75565b905082815260208101848484011115611d2357611d22611b10565b5b611d2e848285611bc1565b509392505050565b600082601f830112611d4b57611d4a611b0b565b5b8135611d5b848260208601611cf4565b91505092915050565b60008060408385031215611d7b57611d7a611753565b5b6000611d89858286016119a0565b925050602083013567ffffffffffffffff811115611daa57611da9611758565b5b611db685828601611d36565b9150509250929050565b60008060408385031215611dd757611dd6611753565b5b6000611de5858286016119a0565b9250506020611df6858286016119a0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611e4757607f821691505b602082108103611e5a57611e59611e00565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611ebc602183611823565b9150611ec782611e60565b604082019050919050565b60006020820190508181036000830152611eeb81611eaf565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000611f4e603e83611823565b9150611f5982611ef2565b604082019050919050565b60006020820190508181036000830152611f7d81611f41565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000611fe0602e83611823565b9150611feb82611f84565b604082019050919050565b6000602082019050818103600083015261200f81611fd3565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061204c601883611823565b915061205782612016565b602082019050919050565b6000602082019050818103600083015261207b8161203f565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006120de602983611823565b91506120e982612082565b604082019050919050565b6000602082019050818103600083015261210d816120d1565b9050919050565b600081905092915050565b600061212a82611818565b6121348185612114565b9350612144818560208601611834565b80840191505092915050565b600061215c828561211f565b9150612168828461211f565b91508190509392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006121d0602583611823565b91506121db82612174565b604082019050919050565b600060208201905081810360008301526121ff816121c3565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612262602483611823565b915061226d82612206565b604082019050919050565b6000602082019050818103600083015261229181612255565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006122d2826118ca565b91506122dd836118ca565b92508282039050818111156122f5576122f4612298565b5b92915050565b6000612306826118ca565b9150612311836118ca565b925082820190508082111561232957612328612298565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612365601983611823565b91506123708261232f565b602082019050919050565b6000602082019050818103600083015261239481612358565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006123f7603283611823565b91506124028261239b565b604082019050919050565b60006020820190508181036000830152612426816123ea565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000612463602083611823565b915061246e8261242d565b602082019050919050565b6000602082019050818103600083015261249281612456565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006124cf601c83611823565b91506124da82612499565b602082019050919050565b600060208201905081810360008301526124fe816124c2565b9050919050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b6000612561602e83611823565b915061256c82612505565b604082019050919050565b6000602082019050818103600083015261259081612554565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026125f97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826125bc565b61260386836125bc565b95508019841693508086168417925050509392505050565b6000819050919050565b600061264061263b612636846118ca565b61261b565b6118ca565b9050919050565b6000819050919050565b61265a83612625565b61266e61266682612647565b8484546125c9565b825550505050565b600090565b612683612676565b61268e818484612651565b505050565b5b818110156126b2576126a760008261267b565b600181019050612694565b5050565b601f8211156126f7576126c881612597565b6126d1846125ac565b810160208510156126e0578190505b6126f46126ec856125ac565b830182612693565b50505b505050565b600082821c905092915050565b600061271a600019846008026126fc565b1980831691505092915050565b60006127338383612709565b9150826002028217905092915050565b61274c82611818565b67ffffffffffffffff81111561276557612764611b15565b5b61276f8254611e2f565b61277a8282856126b6565b600060209050601f8311600181146127ad576000841561279b578287015190505b6127a58582612727565b86555061280d565b601f1984166127bb86612597565b60005b828110156127e3578489015182556001820191506020850194506020810190506127be565b8683101561280057848901516127fc601f891682612709565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b600082825260208201905092915050565b600061283c82612815565b6128468185612820565b9350612856818560208601611834565b61285f8161185e565b840191505092915050565b600060808201905061287f600083018761195f565b61288c602083018661195f565b6128996040830185611a75565b81810360608301526128ab8184612831565b905095945050505050565b6000815190506128c581611789565b92915050565b6000602082840312156128e1576128e0611753565b5b60006128ef848285016128b6565b91505092915050565b6000612903826118ca565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361293557612934612298565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061297a826118ca565b9150612985836118ca565b92508261299557612994612940565b5b828204905092915050565b60006129ab826118ca565b91506129b6836118ca565b9250826129c6576129c5612940565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220646cbcc4f2750bbafd66aba1e32cf1d9d60ee7b67010014294621c87b820bc3364736f6c63430008100033" + } + } +} diff --git a/fixtures/build/ERC721Token.ts b/fixtures/build/ERC721Token.ts new file mode 100644 index 00000000000..b95c73b0e1c --- /dev/null +++ b/fixtures/build/ERC721Token.ts @@ -0,0 +1,174 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const ERC721TokenAbi = [ + { inputs: [], stateMutability: 'nonpayable', type: 'constructor' }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'owner', type: 'address' }, + { indexed: true, internalType: 'address', name: 'approved', type: 'address' }, + { indexed: true, internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'owner', type: 'address' }, + { indexed: true, internalType: 'address', name: 'operator', type: 'address' }, + { indexed: false, internalType: 'bool', name: 'approved', type: 'bool' }, + ], + name: 'ApprovalForAll', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'from', type: 'address' }, + { indexed: true, internalType: 'address', name: 'to', type: 'address' }, + { indexed: true, internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + ], + name: 'Transfer', + type: 'event', + }, + { + inputs: [ + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + ], + name: 'approve', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'player', type: 'address' }, + { internalType: 'string', name: 'tokenURI', type: 'string' }, + ], + name: 'awardItem', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [{ internalType: 'address', name: 'owner', type: 'address' }], + name: 'balanceOf', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'uint256', name: 'tokenId', type: 'uint256' }], + name: 'getApproved', + outputs: [{ internalType: 'address', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'owner', type: 'address' }, + { internalType: 'address', name: 'operator', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'name', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'uint256', name: 'tokenId', type: 'uint256' }], + name: 'ownerOf', + outputs: [{ internalType: 'address', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'from', type: 'address' }, + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'from', type: 'address' }, + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + { internalType: 'bytes', name: 'data', type: 'bytes' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'operator', type: 'address' }, + { internalType: 'bool', name: 'approved', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [{ internalType: 'bytes4', name: 'interfaceId', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'symbol', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'uint256', name: 'tokenId', type: 'uint256' }], + name: 'tokenURI', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'from', type: 'address' }, + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, +] as const; +export const ERC721TokenBytecode = + '0x60806040523480156200001157600080fd5b506040518060400160405280600881526020017f47616d654974656d0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f49544d000000000000000000000000000000000000000000000000000000000081525081600090816200008f919062000324565b508060019081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b612a36806200041b6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063b88d4fde11610066578063b88d4fde1461025b578063c87b56dd14610277578063cf378343146102a7578063e985e9c5146102d7576100ea565b806370a08231146101f157806395d89b4114610221578063a22cb4651461023f576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b610109600480360381019061010491906117b5565b610307565b60405161011691906117fd565b60405180910390f35b6101276103e9565b60405161013491906118a8565b60405180910390f35b61015760048036038101906101529190611900565b61047b565b604051610164919061196e565b60405180910390f35b610187600480360381019061018291906119b5565b6104c1565b005b6101a3600480360381019061019e91906119f5565b6105d8565b005b6101bf60048036038101906101ba91906119f5565b610638565b005b6101db60048036038101906101d69190611900565b610658565b6040516101e8919061196e565b60405180910390f35b61020b60048036038101906102069190611a48565b610709565b6040516102189190611a84565b60405180910390f35b6102296107c0565b60405161023691906118a8565b60405180910390f35b61025960048036038101906102549190611acb565b610852565b005b61027560048036038101906102709190611c40565b610868565b005b610291600480360381019061028c9190611900565b6108ca565b60405161029e91906118a8565b60405180910390f35b6102c160048036038101906102bc9190611d64565b6109dc565b6040516102ce9190611a84565b60405180910390f35b6102f160048036038101906102ec9190611dc0565b610a13565b6040516102fe91906117fd565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103e257506103e182610aa7565b5b9050919050565b6060600080546103f890611e2f565b80601f016020809104026020016040519081016040528092919081815260200182805461042490611e2f565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600061048682610b11565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104cc82610658565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611ed2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661055b610b5c565b73ffffffffffffffffffffffffffffffffffffffff16148061058a575061058981610584610b5c565b610a13565b5b6105c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c090611f64565b60405180910390fd5b6105d38383610b64565b505050565b6105e96105e3610b5c565b82610c1d565b610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f90611ff6565b60405180910390fd5b610633838383610cb2565b505050565b61065383838360405180602001604052806000815250610868565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f790612062565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610770906120f4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546107cf90611e2f565b80601f01602080910402602001604051908101604052809291908181526020018280546107fb90611e2f565b80156108485780601f1061081d57610100808354040283529160200191610848565b820191906000526020600020905b81548152906001019060200180831161082b57829003601f168201915b5050505050905090565b61086461085d610b5c565b8383610f18565b5050565b610879610873610b5c565b83610c1d565b6108b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108af90611ff6565b60405180910390fd5b6108c484848484611084565b50505050565b60606108d582610b11565b60006006600084815260200190815260200160002080546108f590611e2f565b80601f016020809104026020016040519081016040528092919081815260200182805461092190611e2f565b801561096e5780601f106109435761010080835404028352916020019161096e565b820191906000526020600020905b81548152906001019060200180831161095157829003601f168201915b50505050509050600061097f6110e0565b905060008151036109945781925050506109d7565b6000825111156109c95780826040516020016109b1929190612150565b604051602081830303815290604052925050506109d7565b6109d2846110f7565b925050505b919050565b6000806109e9600761115f565b90506109f5848261116d565b6109ff8184611346565b610a0960076113b3565b8091505092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610b1a816113c9565b610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090612062565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610bd783610658565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610c2983610658565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610c6b5750610c6a8185610a13565b5b80610ca957508373ffffffffffffffffffffffffffffffffffffffff16610c918461047b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610cd282610658565b73ffffffffffffffffffffffffffffffffffffffff1614610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f906121e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90612278565b60405180910390fd5b610da2838383611435565b610dad600082610b64565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610dfd91906122c7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e5491906122fb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f1383838361143a565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d9061237b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161107791906117fd565b60405180910390a3505050565b61108f848484610cb2565b61109b8484848461143f565b6110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d19061240d565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606061110282610b11565b600061110c6110e0565b9050600081511161112c5760405180602001604052806000815250611157565b80611136846115c6565b604051602001611147929190612150565b6040516020818303038152906040525b915050919050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d390612479565b60405180910390fd5b6111e5816113c9565b15611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c906124e5565b60405180910390fd5b61123160008383611435565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461128191906122fb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46113426000838361143a565b5050565b61134f826113c9565b61138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138590612577565b60405180910390fd5b806006600084815260200190815260200160002090816113ae9190612743565b505050565b6001816000016000828254019250508190555050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b60006114608473ffffffffffffffffffffffffffffffffffffffff16611726565b156115b9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611489610b5c565b8786866040518563ffffffff1660e01b81526004016114ab949392919061286a565b6020604051808303816000875af19250505080156114e757506040513d601f19601f820116820180604052508101906114e491906128cb565b60015b611569573d8060008114611517576040519150601f19603f3d011682016040523d82523d6000602084013e61151c565b606091505b506000815103611561576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115589061240d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506115be565b600190505b949350505050565b60606000820361160d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611721565b600082905060005b6000821461163f578080611628906128f8565b915050600a82611638919061296f565b9150611615565b60008167ffffffffffffffff81111561165b5761165a611b15565b5b6040519080825280601f01601f19166020018201604052801561168d5781602001600182028036833780820191505090505b5090505b6000851461171a576001826116a691906122c7565b9150600a856116b591906129a0565b60306116c191906122fb565b60f81b8183815181106116d7576116d66129d1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611713919061296f565b9450611691565b8093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117928161175d565b811461179d57600080fd5b50565b6000813590506117af81611789565b92915050565b6000602082840312156117cb576117ca611753565b5b60006117d9848285016117a0565b91505092915050565b60008115159050919050565b6117f7816117e2565b82525050565b600060208201905061181260008301846117ee565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611852578082015181840152602081019050611837565b60008484015250505050565b6000601f19601f8301169050919050565b600061187a82611818565b6118848185611823565b9350611894818560208601611834565b61189d8161185e565b840191505092915050565b600060208201905081810360008301526118c2818461186f565b905092915050565b6000819050919050565b6118dd816118ca565b81146118e857600080fd5b50565b6000813590506118fa816118d4565b92915050565b60006020828403121561191657611915611753565b5b6000611924848285016118eb565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119588261192d565b9050919050565b6119688161194d565b82525050565b6000602082019050611983600083018461195f565b92915050565b6119928161194d565b811461199d57600080fd5b50565b6000813590506119af81611989565b92915050565b600080604083850312156119cc576119cb611753565b5b60006119da858286016119a0565b92505060206119eb858286016118eb565b9150509250929050565b600080600060608486031215611a0e57611a0d611753565b5b6000611a1c868287016119a0565b9350506020611a2d868287016119a0565b9250506040611a3e868287016118eb565b9150509250925092565b600060208284031215611a5e57611a5d611753565b5b6000611a6c848285016119a0565b91505092915050565b611a7e816118ca565b82525050565b6000602082019050611a996000830184611a75565b92915050565b611aa8816117e2565b8114611ab357600080fd5b50565b600081359050611ac581611a9f565b92915050565b60008060408385031215611ae257611ae1611753565b5b6000611af0858286016119a0565b9250506020611b0185828601611ab6565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611b4d8261185e565b810181811067ffffffffffffffff82111715611b6c57611b6b611b15565b5b80604052505050565b6000611b7f611749565b9050611b8b8282611b44565b919050565b600067ffffffffffffffff821115611bab57611baa611b15565b5b611bb48261185e565b9050602081019050919050565b82818337600083830152505050565b6000611be3611bde84611b90565b611b75565b905082815260208101848484011115611bff57611bfe611b10565b5b611c0a848285611bc1565b509392505050565b600082601f830112611c2757611c26611b0b565b5b8135611c37848260208601611bd0565b91505092915050565b60008060008060808587031215611c5a57611c59611753565b5b6000611c68878288016119a0565b9450506020611c79878288016119a0565b9350506040611c8a878288016118eb565b925050606085013567ffffffffffffffff811115611cab57611caa611758565b5b611cb787828801611c12565b91505092959194509250565b600067ffffffffffffffff821115611cde57611cdd611b15565b5b611ce78261185e565b9050602081019050919050565b6000611d07611d0284611cc3565b611b75565b905082815260208101848484011115611d2357611d22611b10565b5b611d2e848285611bc1565b509392505050565b600082601f830112611d4b57611d4a611b0b565b5b8135611d5b848260208601611cf4565b91505092915050565b60008060408385031215611d7b57611d7a611753565b5b6000611d89858286016119a0565b925050602083013567ffffffffffffffff811115611daa57611da9611758565b5b611db685828601611d36565b9150509250929050565b60008060408385031215611dd757611dd6611753565b5b6000611de5858286016119a0565b9250506020611df6858286016119a0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611e4757607f821691505b602082108103611e5a57611e59611e00565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611ebc602183611823565b9150611ec782611e60565b604082019050919050565b60006020820190508181036000830152611eeb81611eaf565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000611f4e603e83611823565b9150611f5982611ef2565b604082019050919050565b60006020820190508181036000830152611f7d81611f41565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000611fe0602e83611823565b9150611feb82611f84565b604082019050919050565b6000602082019050818103600083015261200f81611fd3565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061204c601883611823565b915061205782612016565b602082019050919050565b6000602082019050818103600083015261207b8161203f565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006120de602983611823565b91506120e982612082565b604082019050919050565b6000602082019050818103600083015261210d816120d1565b9050919050565b600081905092915050565b600061212a82611818565b6121348185612114565b9350612144818560208601611834565b80840191505092915050565b600061215c828561211f565b9150612168828461211f565b91508190509392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006121d0602583611823565b91506121db82612174565b604082019050919050565b600060208201905081810360008301526121ff816121c3565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612262602483611823565b915061226d82612206565b604082019050919050565b6000602082019050818103600083015261229181612255565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006122d2826118ca565b91506122dd836118ca565b92508282039050818111156122f5576122f4612298565b5b92915050565b6000612306826118ca565b9150612311836118ca565b925082820190508082111561232957612328612298565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612365601983611823565b91506123708261232f565b602082019050919050565b6000602082019050818103600083015261239481612358565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006123f7603283611823565b91506124028261239b565b604082019050919050565b60006020820190508181036000830152612426816123ea565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000612463602083611823565b915061246e8261242d565b602082019050919050565b6000602082019050818103600083015261249281612456565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006124cf601c83611823565b91506124da82612499565b602082019050919050565b600060208201905081810360008301526124fe816124c2565b9050919050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b6000612561602e83611823565b915061256c82612505565b604082019050919050565b6000602082019050818103600083015261259081612554565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026125f97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826125bc565b61260386836125bc565b95508019841693508086168417925050509392505050565b6000819050919050565b600061264061263b612636846118ca565b61261b565b6118ca565b9050919050565b6000819050919050565b61265a83612625565b61266e61266682612647565b8484546125c9565b825550505050565b600090565b612683612676565b61268e818484612651565b505050565b5b818110156126b2576126a760008261267b565b600181019050612694565b5050565b601f8211156126f7576126c881612597565b6126d1846125ac565b810160208510156126e0578190505b6126f46126ec856125ac565b830182612693565b50505b505050565b600082821c905092915050565b600061271a600019846008026126fc565b1980831691505092915050565b60006127338383612709565b9150826002028217905092915050565b61274c82611818565b67ffffffffffffffff81111561276557612764611b15565b5b61276f8254611e2f565b61277a8282856126b6565b600060209050601f8311600181146127ad576000841561279b578287015190505b6127a58582612727565b86555061280d565b601f1984166127bb86612597565b60005b828110156127e3578489015182556001820191506020850194506020810190506127be565b8683101561280057848901516127fc601f891682612709565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b600082825260208201905092915050565b600061283c82612815565b6128468185612820565b9350612856818560208601611834565b61285f8161185e565b840191505092915050565b600060808201905061287f600083018761195f565b61288c602083018661195f565b6128996040830185611a75565b81810360608301526128ab8184612831565b905095945050505050565b6000815190506128c581611789565b92915050565b6000602082840312156128e1576128e0611753565b5b60006128ef848285016128b6565b91505092915050565b6000612903826118ca565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361293557612934612298565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061297a826118ca565b9150612985836118ca565b92508261299557612994612940565b5b828204905092915050565b60006129ab826118ca565b91506129b6836118ca565b9250826129c6576129c5612940565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220646cbcc4f2750bbafd66aba1e32cf1d9d60ee7b67010014294621c87b820bc3364736f6c63430008100033'; diff --git a/fixtures/build/ErrorsContract.json b/fixtures/build/ErrorsContract.json new file mode 100644 index 00000000000..0a407d25c63 --- /dev/null +++ b/fixtures/build/ErrorsContract.json @@ -0,0 +1,44 @@ +{ + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "CustomError", + "type": "error" + }, + { + "inputs": [], + "name": "Unauthorized", + "type": "error" + }, + { + "inputs": [], + "name": "badRequire", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unauthorize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "object": "608060405260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005157600080fd5b5061029e806100616000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063593b0df41461003b5780638ec6371414610045575b600080fd5b61004361004f565b005b61004d6100fd565b005b600260011015610094576040517f8d6ea8be00000000000000000000000000000000000000000000000000000000815260040161008b90610248565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156100fa573d6000803e3d6000fd5b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610182576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156101e8573d6000803e3d6000fd5b50565b600082825260208201905092915050565b7f7265766572746564207573696e6720637573746f6d204572726f720000000000600082015250565b6000610232601b836101eb565b915061023d826101fc565b602082019050919050565b6000602082019050818103600083015261026181610225565b905091905056fea264697066735822122044b9ec500058314fc2322d787ecf6c99c1470d0ace05668c811cfe70fdd05c2764736f6c63430008100033" + } + } +} diff --git a/fixtures/build/ErrorsContract.ts b/fixtures/build/ErrorsContract.ts new file mode 100644 index 00000000000..06dfd115c11 --- /dev/null +++ b/fixtures/build/ErrorsContract.ts @@ -0,0 +1,41 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const ErrorsContractAbi = [ + { inputs: [], stateMutability: 'nonpayable', type: 'constructor' }, + { + inputs: [{ internalType: 'string', name: '', type: 'string' }], + name: 'CustomError', + type: 'error', + }, + { inputs: [], name: 'Unauthorized', type: 'error' }, + { + inputs: [], + name: 'badRequire', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'unauthorize', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, +] as const; +export const ErrorsContractBytecode = + '0x608060405260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005157600080fd5b5061029e806100616000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063593b0df41461003b5780638ec6371414610045575b600080fd5b61004361004f565b005b61004d6100fd565b005b600260011015610094576040517f8d6ea8be00000000000000000000000000000000000000000000000000000000815260040161008b90610248565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156100fa573d6000803e3d6000fd5b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610182576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156101e8573d6000803e3d6000fd5b50565b600082825260208201905092915050565b7f7265766572746564207573696e6720637573746f6d204572726f720000000000600082015250565b6000610232601b836101eb565b915061023d826101fc565b602082019050919050565b6000602082019050818103600083015261026181610225565b905091905056fea264697066735822122044b9ec500058314fc2322d787ecf6c99c1470d0ace05668c811cfe70fdd05c2764736f6c63430008100033'; diff --git a/fixtures/build/Greeter.json b/fixtures/build/Greeter.json new file mode 100644 index 00000000000..ad25bbf5a68 --- /dev/null +++ b/fixtures/build/Greeter.json @@ -0,0 +1,96 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_greeting", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "greeting", + "type": "string" + } + ], + "name": "GREETING_CHANGED", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "from", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "to", + "type": "string" + } + ], + "name": "GREETING_CHANGING", + "type": "event" + }, + { + "inputs": [], + "name": "greet", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "increment", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_greeting", + "type": "string" + } + ], + "name": "setGreeting", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "object": "60806040523480156200001157600080fd5b5060405162000ed038038062000ed08339818101604052810190620000379190620001ea565b806001908162000048919062000486565b5060008081905550506200056d565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000c08262000075565b810181811067ffffffffffffffff82111715620000e257620000e162000086565b5b80604052505050565b6000620000f762000057565b9050620001058282620000b5565b919050565b600067ffffffffffffffff82111562000128576200012762000086565b5b620001338262000075565b9050602081019050919050565b60005b838110156200016057808201518184015260208101905062000143565b60008484015250505050565b6000620001836200017d846200010a565b620000eb565b905082815260208101848484011115620001a257620001a162000070565b5b620001af84828562000140565b509392505050565b600082601f830112620001cf57620001ce6200006b565b5b8151620001e18482602086016200016c565b91505092915050565b60006020828403121562000203576200020262000061565b5b600082015167ffffffffffffffff81111562000224576200022362000066565b5b6200023284828501620001b7565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028e57607f821691505b602082108103620002a457620002a362000246565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200030e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002cf565b6200031a8683620002cf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000367620003616200035b8462000332565b6200033c565b62000332565b9050919050565b6000819050919050565b620003838362000346565b6200039b62000392826200036e565b848454620002dc565b825550505050565b600090565b620003b2620003a3565b620003bf81848462000378565b505050565b5b81811015620003e757620003db600082620003a8565b600181019050620003c5565b5050565b601f82111562000436576200040081620002aa565b6200040b84620002bf565b810160208510156200041b578190505b620004336200042a85620002bf565b830182620003c4565b50505b505050565b600082821c905092915050565b60006200045b600019846008026200043b565b1980831691505092915050565b600062000476838362000448565b9150826002028217905092915050565b62000491826200023b565b67ffffffffffffffff811115620004ad57620004ac62000086565b5b620004b9825462000275565b620004c6828285620003eb565b600060209050601f831160018114620004fe5760008415620004e9578287015190505b620004f5858262000468565b86555062000565565b601f1984166200050e86620002aa565b60005b82811015620005385784890151825560018201915060208501945060208101905062000511565b8683101562000558578489015162000554601f89168262000448565b8355505b6001600288020188555050505b505050505050565b610953806200057d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063a413686214610046578063cfae321714610077578063d09de08a14610095575b600080fd5b610060600480360381019061005b91906103c0565b61009f565b60405161006e9291906104a3565b60405180910390f35b61007f6101bd565b60405161008c91906104d3565b60405180910390f35b61009d61024f565b005b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756001846040516100d59291906105ee565b60405180910390a182600190816100ec91906107c6565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600160405161011d9190610898565b60405180910390a160018080805461013490610524565b80601f016020809104026020016040519081016040528092919081815260200182805461016090610524565b80156101ad5780601f10610182576101008083540402835291602001916101ad565b820191906000526020600020905b81548152906001019060200180831161019057829003601f168201915b5050505050905091509150915091565b6060600180546101cc90610524565b80601f01602080910402602001604051908101604052809291908181526020018280546101f890610524565b80156102455780601f1061021a57610100808354040283529160200191610245565b820191906000526020600020905b81548152906001019060200180831161022857829003601f168201915b5050505050905090565b600160005461025e91906108e9565b600081905550565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6102cd82610284565b810181811067ffffffffffffffff821117156102ec576102eb610295565b5b80604052505050565b60006102ff610266565b905061030b82826102c4565b919050565b600067ffffffffffffffff82111561032b5761032a610295565b5b61033482610284565b9050602081019050919050565b82818337600083830152505050565b600061036361035e84610310565b6102f5565b90508281526020810184848401111561037f5761037e61027f565b5b61038a848285610341565b509392505050565b600082601f8301126103a7576103a661027a565b5b81356103b7848260208601610350565b91505092915050565b6000602082840312156103d6576103d5610270565b5b600082013567ffffffffffffffff8111156103f4576103f3610275565b5b61040084828501610392565b91505092915050565b60008115159050919050565b61041e81610409565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561045e578082015181840152602081019050610443565b60008484015250505050565b600061047582610424565b61047f818561042f565b935061048f818560208601610440565b61049881610284565b840191505092915050565b60006040820190506104b86000830185610415565b81810360208301526104ca818461046a565b90509392505050565b600060208201905081810360008301526104ed818461046a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061053c57607f821691505b60208210810361054f5761054e6104f5565b5b50919050565b60008190508160005260206000209050919050565b6000815461057781610524565b610581818661042f565b9450600182166000811461059c57600181146105b2576105e5565b60ff1983168652811515602002860193506105e5565b6105bb85610555565b60005b838110156105dd578154818901526001820191506020810190506105be565b808801955050505b50505092915050565b60006040820190508181036000830152610608818561056a565b9050818103602083015261061c818461046a565b90509392505050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026106727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610635565b61067c8683610635565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006106c36106be6106b984610694565b61069e565b610694565b9050919050565b6000819050919050565b6106dd836106a8565b6106f16106e9826106ca565b848454610642565b825550505050565b600090565b6107066106f9565b6107118184846106d4565b505050565b5b818110156107355761072a6000826106fe565b600181019050610717565b5050565b601f82111561077a5761074b81610555565b61075484610625565b81016020851015610763578190505b61077761076f85610625565b830182610716565b50505b505050565b600082821c905092915050565b600061079d6000198460080261077f565b1980831691505092915050565b60006107b6838361078c565b9150826002028217905092915050565b6107cf82610424565b67ffffffffffffffff8111156107e8576107e7610295565b5b6107f28254610524565b6107fd828285610739565b600060209050601f831160018114610830576000841561081e578287015190505b61082885826107aa565b865550610890565b601f19841661083e86610555565b60005b8281101561086657848901518255600182019150602085019450602081019050610841565b86831015610883578489015161087f601f89168261078c565b8355505b6001600288020188555050505b505050505050565b600060208201905081810360008301526108b2818461056a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006108f482610694565b91506108ff83610694565b9250828201905080821115610917576109166108ba565b5b9291505056fea26469706673582212207e5ba44159ffb37af8e8a9e7c5b6fb5ce81ea195b62ae3ac36288f2cf72c18a764736f6c63430008100033" + } + } +} diff --git a/fixtures/build/Greeter.ts b/fixtures/build/Greeter.ts new file mode 100644 index 00000000000..3ce6ab1b3dd --- /dev/null +++ b/fixtures/build/Greeter.ts @@ -0,0 +1,58 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const GreeterAbi = [ + { + inputs: [{ internalType: 'string', name: '_greeting', type: 'string' }], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [{ indexed: false, internalType: 'string', name: 'greeting', type: 'string' }], + name: 'GREETING_CHANGED', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: false, internalType: 'string', name: 'from', type: 'string' }, + { indexed: false, internalType: 'string', name: 'to', type: 'string' }, + ], + name: 'GREETING_CHANGING', + type: 'event', + }, + { + inputs: [], + name: 'greet', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { inputs: [], name: 'increment', outputs: [], stateMutability: 'nonpayable', type: 'function' }, + { + inputs: [{ internalType: 'string', name: '_greeting', type: 'string' }], + name: 'setGreeting', + outputs: [ + { internalType: 'bool', name: '', type: 'bool' }, + { internalType: 'string', name: '', type: 'string' }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, +] as const; +export const GreeterBytecode = + '0x60806040523480156200001157600080fd5b5060405162000ed038038062000ed08339818101604052810190620000379190620001ea565b806001908162000048919062000486565b5060008081905550506200056d565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000c08262000075565b810181811067ffffffffffffffff82111715620000e257620000e162000086565b5b80604052505050565b6000620000f762000057565b9050620001058282620000b5565b919050565b600067ffffffffffffffff82111562000128576200012762000086565b5b620001338262000075565b9050602081019050919050565b60005b838110156200016057808201518184015260208101905062000143565b60008484015250505050565b6000620001836200017d846200010a565b620000eb565b905082815260208101848484011115620001a257620001a162000070565b5b620001af84828562000140565b509392505050565b600082601f830112620001cf57620001ce6200006b565b5b8151620001e18482602086016200016c565b91505092915050565b60006020828403121562000203576200020262000061565b5b600082015167ffffffffffffffff81111562000224576200022362000066565b5b6200023284828501620001b7565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028e57607f821691505b602082108103620002a457620002a362000246565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200030e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002cf565b6200031a8683620002cf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000367620003616200035b8462000332565b6200033c565b62000332565b9050919050565b6000819050919050565b620003838362000346565b6200039b62000392826200036e565b848454620002dc565b825550505050565b600090565b620003b2620003a3565b620003bf81848462000378565b505050565b5b81811015620003e757620003db600082620003a8565b600181019050620003c5565b5050565b601f82111562000436576200040081620002aa565b6200040b84620002bf565b810160208510156200041b578190505b620004336200042a85620002bf565b830182620003c4565b50505b505050565b600082821c905092915050565b60006200045b600019846008026200043b565b1980831691505092915050565b600062000476838362000448565b9150826002028217905092915050565b62000491826200023b565b67ffffffffffffffff811115620004ad57620004ac62000086565b5b620004b9825462000275565b620004c6828285620003eb565b600060209050601f831160018114620004fe5760008415620004e9578287015190505b620004f5858262000468565b86555062000565565b601f1984166200050e86620002aa565b60005b82811015620005385784890151825560018201915060208501945060208101905062000511565b8683101562000558578489015162000554601f89168262000448565b8355505b6001600288020188555050505b505050505050565b610953806200057d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063a413686214610046578063cfae321714610077578063d09de08a14610095575b600080fd5b610060600480360381019061005b91906103c0565b61009f565b60405161006e9291906104a3565b60405180910390f35b61007f6101bd565b60405161008c91906104d3565b60405180910390f35b61009d61024f565b005b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756001846040516100d59291906105ee565b60405180910390a182600190816100ec91906107c6565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600160405161011d9190610898565b60405180910390a160018080805461013490610524565b80601f016020809104026020016040519081016040528092919081815260200182805461016090610524565b80156101ad5780601f10610182576101008083540402835291602001916101ad565b820191906000526020600020905b81548152906001019060200180831161019057829003601f168201915b5050505050905091509150915091565b6060600180546101cc90610524565b80601f01602080910402602001604051908101604052809291908181526020018280546101f890610524565b80156102455780601f1061021a57610100808354040283529160200191610245565b820191906000526020600020905b81548152906001019060200180831161022857829003601f168201915b5050505050905090565b600160005461025e91906108e9565b600081905550565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6102cd82610284565b810181811067ffffffffffffffff821117156102ec576102eb610295565b5b80604052505050565b60006102ff610266565b905061030b82826102c4565b919050565b600067ffffffffffffffff82111561032b5761032a610295565b5b61033482610284565b9050602081019050919050565b82818337600083830152505050565b600061036361035e84610310565b6102f5565b90508281526020810184848401111561037f5761037e61027f565b5b61038a848285610341565b509392505050565b600082601f8301126103a7576103a661027a565b5b81356103b7848260208601610350565b91505092915050565b6000602082840312156103d6576103d5610270565b5b600082013567ffffffffffffffff8111156103f4576103f3610275565b5b61040084828501610392565b91505092915050565b60008115159050919050565b61041e81610409565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561045e578082015181840152602081019050610443565b60008484015250505050565b600061047582610424565b61047f818561042f565b935061048f818560208601610440565b61049881610284565b840191505092915050565b60006040820190506104b86000830185610415565b81810360208301526104ca818461046a565b90509392505050565b600060208201905081810360008301526104ed818461046a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061053c57607f821691505b60208210810361054f5761054e6104f5565b5b50919050565b60008190508160005260206000209050919050565b6000815461057781610524565b610581818661042f565b9450600182166000811461059c57600181146105b2576105e5565b60ff1983168652811515602002860193506105e5565b6105bb85610555565b60005b838110156105dd578154818901526001820191506020810190506105be565b808801955050505b50505092915050565b60006040820190508181036000830152610608818561056a565b9050818103602083015261061c818461046a565b90509392505050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026106727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610635565b61067c8683610635565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006106c36106be6106b984610694565b61069e565b610694565b9050919050565b6000819050919050565b6106dd836106a8565b6106f16106e9826106ca565b848454610642565b825550505050565b600090565b6107066106f9565b6107118184846106d4565b505050565b5b818110156107355761072a6000826106fe565b600181019050610717565b5050565b601f82111561077a5761074b81610555565b61075484610625565b81016020851015610763578190505b61077761076f85610625565b830182610716565b50505b505050565b600082821c905092915050565b600061079d6000198460080261077f565b1980831691505092915050565b60006107b6838361078c565b9150826002028217905092915050565b6107cf82610424565b67ffffffffffffffff8111156107e8576107e7610295565b5b6107f28254610524565b6107fd828285610739565b600060209050601f831160018114610830576000841561081e578287015190505b61082885826107aa565b865550610890565b601f19841661083e86610555565b60005b8281101561086657848901518255600182019150602085019450602081019050610841565b86831015610883578489015161087f601f89168261078c565b8355505b6001600288020188555050505b505050505050565b600060208201905081810360008301526108b2818461056a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006108f482610694565b91506108ff83610694565b9250828201905080821115610917576109166108ba565b5b9291505056fea26469706673582212207e5ba44159ffb37af8e8a9e7c5b6fb5ce81ea195b62ae3ac36288f2cf72c18a764736f6c63430008100033'; diff --git a/fixtures/build/MsgSender.json b/fixtures/build/MsgSender.json new file mode 100644 index 00000000000..6db015bbdbf --- /dev/null +++ b/fixtures/build/MsgSender.json @@ -0,0 +1,70 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_testString", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "from", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_testString", + "type": "string" + } + ], + "name": "setTestString", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "testString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "object": "60806040523480156200001157600080fd5b5060405162000d7538038062000d758339818101604052810190620000379190620001e3565b80600090816200004891906200047f565b505062000566565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000b9826200006e565b810181811067ffffffffffffffff82111715620000db57620000da6200007f565b5b80604052505050565b6000620000f062000050565b9050620000fe8282620000ae565b919050565b600067ffffffffffffffff8211156200012157620001206200007f565b5b6200012c826200006e565b9050602081019050919050565b60005b83811015620001595780820151818401526020810190506200013c565b60008484015250505050565b60006200017c620001768462000103565b620000e4565b9050828152602081018484840111156200019b576200019a62000069565b5b620001a884828562000139565b509392505050565b600082601f830112620001c857620001c762000064565b5b8151620001da84826020860162000165565b91505092915050565b600060208284031215620001fc57620001fb6200005a565b5b600082015167ffffffffffffffff8111156200021d576200021c6200005f565b5b6200022b84828501620001b0565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028757607f821691505b6020821081036200029d576200029c6200023f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003077fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002c8565b620003138683620002c8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003606200035a62000354846200032b565b62000335565b6200032b565b9050919050565b6000819050919050565b6200037c836200033f565b620003946200038b8262000367565b848454620002d5565b825550505050565b600090565b620003ab6200039c565b620003b881848462000371565b505050565b5b81811015620003e057620003d4600082620003a1565b600181019050620003be565b5050565b601f8211156200042f57620003f981620002a3565b6200040484620002b8565b8101602085101562000414578190505b6200042c6200042385620002b8565b830182620003bd565b50505b505050565b600082821c905092915050565b6000620004546000198460080262000434565b1980831691505092915050565b60006200046f838362000441565b9150826002028217905092915050565b6200048a8262000234565b67ffffffffffffffff811115620004a657620004a56200007f565b5b620004b282546200026e565b620004bf828285620003e4565b600060209050601f831160018114620004f75760008415620004e2578287015190505b620004ee858262000461565b8655506200055e565b601f1984166200050786620002a3565b60005b8281101562000531578489015182556001820191506020850194506020810190506200050a565b868310156200055157848901516200054d601f89168262000441565b8355505b6001600288020188555050505b505050505050565b6107ff80620005766000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063315e2f1b14610046578063d5ce338914610077578063fb8f0f5914610095575b600080fd5b610060600480360381019061005b9190610350565b6100b3565b60405161006e929190610433565b60405180910390f35b61007f610160565b60405161008c91906104a4565b60405180910390f35b61009d610168565b6040516100aa91906104bf565b60405180910390f35b6000606082600090816100c691906106f7565b50600160008080546100d790610510565b80601f016020809104026020016040519081016040528092919081815260200182805461010390610510565b80156101505780601f1061012557610100808354040283529160200191610150565b820191906000526020600020905b81548152906001019060200180831161013357829003601f168201915b5050505050905091509150915091565b600033905090565b6000805461017590610510565b80601f01602080910402602001604051908101604052809291908181526020018280546101a190610510565b80156101ee5780601f106101c3576101008083540402835291602001916101ee565b820191906000526020600020905b8154815290600101906020018083116101d157829003601f168201915b505050505081565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61025d82610214565b810181811067ffffffffffffffff8211171561027c5761027b610225565b5b80604052505050565b600061028f6101f6565b905061029b8282610254565b919050565b600067ffffffffffffffff8211156102bb576102ba610225565b5b6102c482610214565b9050602081019050919050565b82818337600083830152505050565b60006102f36102ee846102a0565b610285565b90508281526020810184848401111561030f5761030e61020f565b5b61031a8482856102d1565b509392505050565b600082601f8301126103375761033661020a565b5b81356103478482602086016102e0565b91505092915050565b60006020828403121561036657610365610200565b5b600082013567ffffffffffffffff81111561038457610383610205565b5b61039084828501610322565b91505092915050565b60008115159050919050565b6103ae81610399565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156103ee5780820151818401526020810190506103d3565b60008484015250505050565b6000610405826103b4565b61040f81856103bf565b935061041f8185602086016103d0565b61042881610214565b840191505092915050565b600060408201905061044860008301856103a5565b818103602083015261045a81846103fa565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061048e82610463565b9050919050565b61049e81610483565b82525050565b60006020820190506104b96000830184610495565b92915050565b600060208201905081810360008301526104d981846103fa565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061052857607f821691505b60208210810361053b5761053a6104e1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026105a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610566565b6105ad8683610566565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006105f46105ef6105ea846105c5565b6105cf565b6105c5565b9050919050565b6000819050919050565b61060e836105d9565b61062261061a826105fb565b848454610573565b825550505050565b600090565b61063761062a565b610642818484610605565b505050565b5b818110156106665761065b60008261062f565b600181019050610648565b5050565b601f8211156106ab5761067c81610541565b61068584610556565b81016020851015610694578190505b6106a86106a085610556565b830182610647565b50505b505050565b600082821c905092915050565b60006106ce600019846008026106b0565b1980831691505092915050565b60006106e783836106bd565b9150826002028217905092915050565b610700826103b4565b67ffffffffffffffff81111561071957610718610225565b5b6107238254610510565b61072e82828561066a565b600060209050601f831160018114610761576000841561074f578287015190505b61075985826106db565b8655506107c1565b601f19841661076f86610541565b60005b8281101561079757848901518255600182019150602085019450602081019050610772565b868310156107b457848901516107b0601f8916826106bd565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220f5b52b9777b17d7a9f963ebe1aebfd28e8dbda53903b34c06791e2ba5acd46d964736f6c63430008100033" + } + } +} diff --git a/fixtures/build/MsgSender.ts b/fixtures/build/MsgSender.ts new file mode 100644 index 00000000000..a3020cdfba0 --- /dev/null +++ b/fixtures/build/MsgSender.ts @@ -0,0 +1,49 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const MsgSenderAbi = [ + { + inputs: [{ internalType: 'string', name: '_testString', type: 'string' }], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + inputs: [], + name: 'from', + outputs: [{ internalType: 'address', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'string', name: '_testString', type: 'string' }], + name: 'setTestString', + outputs: [ + { internalType: 'bool', name: '', type: 'bool' }, + { internalType: 'string', name: '', type: 'string' }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'testString', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, +] as const; +export const MsgSenderBytecode = + '0x60806040523480156200001157600080fd5b5060405162000d7538038062000d758339818101604052810190620000379190620001e3565b80600090816200004891906200047f565b505062000566565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000b9826200006e565b810181811067ffffffffffffffff82111715620000db57620000da6200007f565b5b80604052505050565b6000620000f062000050565b9050620000fe8282620000ae565b919050565b600067ffffffffffffffff8211156200012157620001206200007f565b5b6200012c826200006e565b9050602081019050919050565b60005b83811015620001595780820151818401526020810190506200013c565b60008484015250505050565b60006200017c620001768462000103565b620000e4565b9050828152602081018484840111156200019b576200019a62000069565b5b620001a884828562000139565b509392505050565b600082601f830112620001c857620001c762000064565b5b8151620001da84826020860162000165565b91505092915050565b600060208284031215620001fc57620001fb6200005a565b5b600082015167ffffffffffffffff8111156200021d576200021c6200005f565b5b6200022b84828501620001b0565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028757607f821691505b6020821081036200029d576200029c6200023f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003077fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002c8565b620003138683620002c8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003606200035a62000354846200032b565b62000335565b6200032b565b9050919050565b6000819050919050565b6200037c836200033f565b620003946200038b8262000367565b848454620002d5565b825550505050565b600090565b620003ab6200039c565b620003b881848462000371565b505050565b5b81811015620003e057620003d4600082620003a1565b600181019050620003be565b5050565b601f8211156200042f57620003f981620002a3565b6200040484620002b8565b8101602085101562000414578190505b6200042c6200042385620002b8565b830182620003bd565b50505b505050565b600082821c905092915050565b6000620004546000198460080262000434565b1980831691505092915050565b60006200046f838362000441565b9150826002028217905092915050565b6200048a8262000234565b67ffffffffffffffff811115620004a657620004a56200007f565b5b620004b282546200026e565b620004bf828285620003e4565b600060209050601f831160018114620004f75760008415620004e2578287015190505b620004ee858262000461565b8655506200055e565b601f1984166200050786620002a3565b60005b8281101562000531578489015182556001820191506020850194506020810190506200050a565b868310156200055157848901516200054d601f89168262000441565b8355505b6001600288020188555050505b505050505050565b6107ff80620005766000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063315e2f1b14610046578063d5ce338914610077578063fb8f0f5914610095575b600080fd5b610060600480360381019061005b9190610350565b6100b3565b60405161006e929190610433565b60405180910390f35b61007f610160565b60405161008c91906104a4565b60405180910390f35b61009d610168565b6040516100aa91906104bf565b60405180910390f35b6000606082600090816100c691906106f7565b50600160008080546100d790610510565b80601f016020809104026020016040519081016040528092919081815260200182805461010390610510565b80156101505780601f1061012557610100808354040283529160200191610150565b820191906000526020600020905b81548152906001019060200180831161013357829003601f168201915b5050505050905091509150915091565b600033905090565b6000805461017590610510565b80601f01602080910402602001604051908101604052809291908181526020018280546101a190610510565b80156101ee5780601f106101c3576101008083540402835291602001916101ee565b820191906000526020600020905b8154815290600101906020018083116101d157829003601f168201915b505050505081565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61025d82610214565b810181811067ffffffffffffffff8211171561027c5761027b610225565b5b80604052505050565b600061028f6101f6565b905061029b8282610254565b919050565b600067ffffffffffffffff8211156102bb576102ba610225565b5b6102c482610214565b9050602081019050919050565b82818337600083830152505050565b60006102f36102ee846102a0565b610285565b90508281526020810184848401111561030f5761030e61020f565b5b61031a8482856102d1565b509392505050565b600082601f8301126103375761033661020a565b5b81356103478482602086016102e0565b91505092915050565b60006020828403121561036657610365610200565b5b600082013567ffffffffffffffff81111561038457610383610205565b5b61039084828501610322565b91505092915050565b60008115159050919050565b6103ae81610399565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156103ee5780820151818401526020810190506103d3565b60008484015250505050565b6000610405826103b4565b61040f81856103bf565b935061041f8185602086016103d0565b61042881610214565b840191505092915050565b600060408201905061044860008301856103a5565b818103602083015261045a81846103fa565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061048e82610463565b9050919050565b61049e81610483565b82525050565b60006020820190506104b96000830184610495565b92915050565b600060208201905081810360008301526104d981846103fa565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061052857607f821691505b60208210810361053b5761053a6104e1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026105a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610566565b6105ad8683610566565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006105f46105ef6105ea846105c5565b6105cf565b6105c5565b9050919050565b6000819050919050565b61060e836105d9565b61062261061a826105fb565b848454610573565b825550505050565b600090565b61063761062a565b610642818484610605565b505050565b5b818110156106665761065b60008261062f565b600181019050610648565b5050565b601f8211156106ab5761067c81610541565b61068584610556565b81016020851015610694578190505b6106a86106a085610556565b830182610647565b50505b505050565b600082821c905092915050565b60006106ce600019846008026106b0565b1980831691505092915050565b60006106e783836106bd565b9150826002028217905092915050565b610700826103b4565b67ffffffffffffffff81111561071957610718610225565b5b6107238254610510565b61072e82828561066a565b600060209050601f831160018114610761576000841561074f578287015190505b61075985826106db565b8655506107c1565b601f19841661076f86610541565b60005b8281101561079757848901518255600182019150602085019450602081019050610772565b868310156107b457848901516107b0601f8916826106bd565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220f5b52b9777b17d7a9f963ebe1aebfd28e8dbda53903b34c06791e2ba5acd46d964736f6c63430008100033'; diff --git a/fixtures/build/MyContract.json b/fixtures/build/MyContract.json new file mode 100644 index 00000000000..7da2cedd55e --- /dev/null +++ b/fixtures/build/MyContract.json @@ -0,0 +1,22 @@ +{ + "abi": [ + { + "inputs": [], + "name": "getAttr", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "object": "608060405234801561001057600080fd5b50610228806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f540c8ba14610030575b600080fd5b61003861004e565b6040516100459190610170565b60405180910390f35b60606000805461005d906101c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610089906101c1565b80156100d65780601f106100ab576101008083540402835291602001916100d6565b820191906000526020600020905b8154815290600101906020018083116100b957829003601f168201915b5050505050905090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561011a5780820151818401526020810190506100ff565b60008484015250505050565b6000601f19601f8301169050919050565b6000610142826100e0565b61014c81856100eb565b935061015c8185602086016100fc565b61016581610126565b840191505092915050565b6000602082019050818103600083015261018a8184610137565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806101d957607f821691505b6020821081036101ec576101eb610192565b5b5091905056fea264697066735822122061f485ab43edfa5bd740bc1f3dd0d643813a4bd2457119e6578414d7389fbd8964736f6c63430008100033" + } + } +} diff --git a/fixtures/build/MyContract.ts b/fixtures/build/MyContract.ts new file mode 100644 index 00000000000..468e35ead71 --- /dev/null +++ b/fixtures/build/MyContract.ts @@ -0,0 +1,27 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const MyContractAbi = [ + { + inputs: [], + name: 'getAttr', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, +] as const; +export const MyContractBytecode = + '0x608060405234801561001057600080fd5b50610228806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f540c8ba14610030575b600080fd5b61003861004e565b6040516100459190610170565b60405180910390f35b60606000805461005d906101c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610089906101c1565b80156100d65780601f106100ab576101008083540402835291602001916100d6565b820191906000526020600020905b8154815290600101906020018083116100b957829003601f168201915b5050505050905090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561011a5780820151818401526020810190506100ff565b60008484015250505050565b6000601f19601f8301169050919050565b6000610142826100e0565b61014c81856100eb565b935061015c8185602086016100fc565b61016581610126565b840191505092915050565b6000602082019050818103600083015261018a8184610137565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806101d957607f821691505b6020821081036101ec576101eb610192565b5b5091905056fea264697066735822122061f485ab43edfa5bd740bc1f3dd0d643813a4bd2457119e6578414d7389fbd8964736f6c63430008100033'; diff --git a/fixtures/build/NegativeNumbers.json b/fixtures/build/NegativeNumbers.json new file mode 100644 index 00000000000..fa33b6f147a --- /dev/null +++ b/fixtures/build/NegativeNumbers.json @@ -0,0 +1,201 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "int256", + "name": "number", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "int256", + "name": "one", + "type": "int256" + } + ], + "name": "OneNegativeNumber", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "int256", + "name": "one", + "type": "int256" + } + ], + "name": "OneNegativeNumberIndexed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "positive", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "int256", + "name": "negative", + "type": "int256" + }, + { + "indexed": false, + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "OtherNegativeNumbers", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "positive", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "int256", + "name": "negative", + "type": "int256" + }, + { + "indexed": false, + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "OtherNegativeNumbersIndexed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "int256", + "name": "one", + "type": "int256" + }, + { + "indexed": false, + "internalType": "int256", + "name": "two", + "type": "int256" + } + ], + "name": "TwoNegativeNumbers", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "int256", + "name": "one", + "type": "int256" + }, + { + "indexed": true, + "internalType": "int256", + "name": "two", + "type": "int256" + } + ], + "name": "TwoNegativeNumbersIndexed", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "number", + "type": "int256" + } + ], + "name": "oneNegativeNumber", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "number", + "type": "int256" + }, + { + "internalType": "int256", + "name": "number2", + "type": "int256" + }, + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "otherNegativeNumbers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "storedNegativeNumber", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "number", + "type": "int256" + }, + { + "internalType": "int256", + "name": "number2", + "type": "int256" + } + ], + "name": "twoNegativeNumbers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "object": "608060405234801561001057600080fd5b506040516105b93803806105b98339818101604052810190610032919061007a565b80600081905550506100a7565b600080fd5b6000819050919050565b61005781610044565b811461006257600080fd5b50565b6000815190506100748161004e565b92915050565b6000602082840312156100905761008f61003f565b5b600061009e84828501610065565b91505092915050565b610503806100b66000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806309872ebc1461005157806310e9b2b41461006f5780634a299b871461008b5780636119780b146100a7575b600080fd5b6100596100c3565b6040516100669190610232565b60405180910390f35b61008960048036038101906100849190610283565b6100c9565b005b6100a560048036038101906100a09190610315565b610130565b005b6100c160048036038101906100bc9190610389565b6101ae565b005b60005481565b7f5b53dc4e9e8fa2416d4e172bdad04be5a6d622643bc9ef45987b2caadd0d0c95816040516100f89190610232565b60405180910390a1807f33e7dccd3899498f4408d6468e5dfad650f32574dba2ec4f13399a82e62166d560405160405180910390a250565b7f2e1fb99ee1b27b6491b2d46a54ac8daca82f2da6810e4b8eed4d634f78fa6948848484846040516101659493929190610440565b60405180910390a182847f0e29b573959c1b6ffd5e16886385ec1732e187cc5ac10e8faceb5e02a1c7b50b84846040516101a0929190610480565b60405180910390a350505050565b7ffaa997e4b16dcde196bbb99868e16fa934a0b4c1f019e494d9fbffb5abc46fc282826040516101df9291906104a4565b60405180910390a180827f0204c97becd72594486cf753e30e8acfc9951ee663e404bc858e3d10b80da99b60405160405180910390a35050565b6000819050919050565b61022c81610219565b82525050565b60006020820190506102476000830184610223565b92915050565b600080fd5b600080fd5b61026081610219565b811461026b57600080fd5b50565b60008135905061027d81610257565b92915050565b6000602082840312156102995761029861024d565b5b60006102a78482850161026e565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126102d5576102d46102b0565b5b8235905067ffffffffffffffff8111156102f2576102f16102b5565b5b60208301915083600182028301111561030e5761030d6102ba565b5b9250929050565b6000806000806060858703121561032f5761032e61024d565b5b600061033d8782880161026e565b945050602061034e8782880161026e565b935050604085013567ffffffffffffffff81111561036f5761036e610252565b5b61037b878288016102bf565b925092505092959194509250565b600080604083850312156103a05761039f61024d565b5b60006103ae8582860161026e565b92505060206103bf8582860161026e565b9150509250929050565b6000819050919050565b6103dc816103c9565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600061041f83856103e2565b935061042c8385846103f3565b61043583610402565b840190509392505050565b600060608201905061045560008301876103d3565b6104626020830186610223565b8181036040830152610475818486610413565b905095945050505050565b6000602082019050818103600083015261049b818486610413565b90509392505050565b60006040820190506104b96000830185610223565b6104c66020830184610223565b939250505056fea26469706673582212203eb052901c785465d43fe463b8123363abc0767d1df3b47a9c4cdc319870d8c264736f6c634300080d0033" + } + } +} diff --git a/fixtures/build/NegativeNumbers.ts b/fixtures/build/NegativeNumbers.ts new file mode 100644 index 00000000000..fd630ed48c2 --- /dev/null +++ b/fixtures/build/NegativeNumbers.ts @@ -0,0 +1,213 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const NegativeNumbersAbi = [ + { + inputs: [ + { + internalType: 'int256', + name: 'number', + type: 'int256', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'int256', + name: 'one', + type: 'int256', + }, + ], + name: 'OneNegativeNumber', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'int256', + name: 'one', + type: 'int256', + }, + ], + name: 'OneNegativeNumberIndexed', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint256', + name: 'positive', + type: 'uint256', + }, + { + indexed: false, + internalType: 'int256', + name: 'negative', + type: 'int256', + }, + { + indexed: false, + internalType: 'string', + name: 'str', + type: 'string', + }, + ], + name: 'OtherNegativeNumbers', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'uint256', + name: 'positive', + type: 'uint256', + }, + { + indexed: true, + internalType: 'int256', + name: 'negative', + type: 'int256', + }, + { + indexed: false, + internalType: 'string', + name: 'str', + type: 'string', + }, + ], + name: 'OtherNegativeNumbersIndexed', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'int256', + name: 'one', + type: 'int256', + }, + { + indexed: false, + internalType: 'int256', + name: 'two', + type: 'int256', + }, + ], + name: 'TwoNegativeNumbers', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'int256', + name: 'one', + type: 'int256', + }, + { + indexed: true, + internalType: 'int256', + name: 'two', + type: 'int256', + }, + ], + name: 'TwoNegativeNumbersIndexed', + type: 'event', + }, + { + inputs: [ + { + internalType: 'int256', + name: 'number', + type: 'int256', + }, + ], + name: 'oneNegativeNumber', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int256', + name: 'number', + type: 'int256', + }, + { + internalType: 'int256', + name: 'number2', + type: 'int256', + }, + { + internalType: 'string', + name: 'str', + type: 'string', + }, + ], + name: 'otherNegativeNumbers', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'storedNegativeNumber', + outputs: [ + { + internalType: 'int256', + name: '', + type: 'int256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'int256', + name: 'number', + type: 'int256', + }, + { + internalType: 'int256', + name: 'number2', + type: 'int256', + }, + ], + name: 'twoNegativeNumbers', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, +] as const; + +export const NegativeNumbersBytecode = + '0x608060405234801561001057600080fd5b506040516105b93803806105b98339818101604052810190610032919061007a565b80600081905550506100a7565b600080fd5b6000819050919050565b61005781610044565b811461006257600080fd5b50565b6000815190506100748161004e565b92915050565b6000602082840312156100905761008f61003f565b5b600061009e84828501610065565b91505092915050565b610503806100b66000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806309872ebc1461005157806310e9b2b41461006f5780634a299b871461008b5780636119780b146100a7575b600080fd5b6100596100c3565b6040516100669190610232565b60405180910390f35b61008960048036038101906100849190610283565b6100c9565b005b6100a560048036038101906100a09190610315565b610130565b005b6100c160048036038101906100bc9190610389565b6101ae565b005b60005481565b7f5b53dc4e9e8fa2416d4e172bdad04be5a6d622643bc9ef45987b2caadd0d0c95816040516100f89190610232565b60405180910390a1807f33e7dccd3899498f4408d6468e5dfad650f32574dba2ec4f13399a82e62166d560405160405180910390a250565b7f2e1fb99ee1b27b6491b2d46a54ac8daca82f2da6810e4b8eed4d634f78fa6948848484846040516101659493929190610440565b60405180910390a182847f0e29b573959c1b6ffd5e16886385ec1732e187cc5ac10e8faceb5e02a1c7b50b84846040516101a0929190610480565b60405180910390a350505050565b7ffaa997e4b16dcde196bbb99868e16fa934a0b4c1f019e494d9fbffb5abc46fc282826040516101df9291906104a4565b60405180910390a180827f0204c97becd72594486cf753e30e8acfc9951ee663e404bc858e3d10b80da99b60405160405180910390a35050565b6000819050919050565b61022c81610219565b82525050565b60006020820190506102476000830184610223565b92915050565b600080fd5b600080fd5b61026081610219565b811461026b57600080fd5b50565b60008135905061027d81610257565b92915050565b6000602082840312156102995761029861024d565b5b60006102a78482850161026e565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126102d5576102d46102b0565b5b8235905067ffffffffffffffff8111156102f2576102f16102b5565b5b60208301915083600182028301111561030e5761030d6102ba565b5b9250929050565b6000806000806060858703121561032f5761032e61024d565b5b600061033d8782880161026e565b945050602061034e8782880161026e565b935050604085013567ffffffffffffffff81111561036f5761036e610252565b5b61037b878288016102bf565b925092505092959194509250565b600080604083850312156103a05761039f61024d565b5b60006103ae8582860161026e565b92505060206103bf8582860161026e565b9150509250929050565b6000819050919050565b6103dc816103c9565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600061041f83856103e2565b935061042c8385846103f3565b61043583610402565b840190509392505050565b600060608201905061045560008301876103d3565b6104626020830186610223565b8181036040830152610475818486610413565b905095945050505050565b6000602082019050818103600083015261049b818486610413565b90509392505050565b60006040820190506104b96000830185610223565b6104c66020830184610223565b939250505056fea26469706673582212203eb052901c785465d43fe463b8123363abc0767d1df3b47a9c4cdc319870d8c264736f6c634300080d0033'; diff --git a/fixtures/contracts/Basic.sol b/fixtures/contracts/Basic.sol new file mode 100644 index 00000000000..89b3a1c8a65 --- /dev/null +++ b/fixtures/contracts/Basic.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GNU + +pragma solidity ^0.8.13; + +contract Basic { + uint256 intValue; + string stringValue; + bool boolValue; + + event StringEvent(string str); + event MultiValueEvent(string str, uint256 val, bool flag); + event MultiValueIndexedEvent(string str, uint256 indexed val, bool indexed flag); + event MultiValueIndexedEventWithStringIndexed(string indexed str, uint256 indexed val, bool indexed flag); + + constructor(uint256 _val, string memory _stringValue) { + intValue = _val; + stringValue = _stringValue; + } + + function getStringValue() public view returns (string memory) { + return stringValue; + } + + function getIntValue() public view returns (uint256) { + return intValue; + } + + function getBoolValue() public view returns (bool) { + return boolValue; + } + + function getValues() public view returns (uint256, string memory, bool) { + return (intValue, stringValue, boolValue); + } + + function setValues(uint256 _value, string memory _stringValue, bool _boolValue) public { + intValue = _value; + stringValue = _stringValue; + boolValue = _boolValue; + } + + function requireWithoutReason() public pure { + require(false); + } + + function requireWithReason() public pure { + require(false, 'REVERTED WITH REQUIRE'); + } + + function reverts() public pure { + revert('REVERTED WITH REVERT'); + } + + function firesMultiValueEvent(string memory str, uint256 val, bool flag) public { + emit MultiValueEvent(str, val, flag); + } + + function firesMultiValueIndexedEvent(string memory str, uint256 val, bool flag) public { + emit MultiValueIndexedEvent(str, val, flag); + } + + function firesStringEvent(string memory _str) public { + emit StringEvent(_str); + } + + function firesMultiValueIndexedEventWithStringIndexed(string calldata str, uint256 val, bool flag) public { + emit MultiValueIndexedEventWithStringIndexed(str, val, flag); + } +} diff --git a/fixtures/contracts/DeployRevert.sol b/fixtures/contracts/DeployRevert.sol new file mode 100644 index 00000000000..a04b0f1cbb1 --- /dev/null +++ b/fixtures/contracts/DeployRevert.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GNU + +pragma solidity ^0.8.13; + +contract DeployRevert { + constructor() public { + require(false); + } +} diff --git a/fixtures/contracts/ERC20Token.sol b/fixtures/contracts/ERC20Token.sol new file mode 100644 index 00000000000..7a94d0ff0e9 --- /dev/null +++ b/fixtures/contracts/ERC20Token.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: GNU + +pragma solidity ^0.8.13; + +import '@openzeppelin/contracts/token/ERC20/ERC20.sol'; + +contract ERC20Token is ERC20 { + constructor(uint256 initialSupply) ERC20('Gold', 'GLD') { + _mint(msg.sender, initialSupply); + } +} diff --git a/fixtures/contracts/ERC721Token.sol b/fixtures/contracts/ERC721Token.sol new file mode 100644 index 00000000000..4fa7f445e79 --- /dev/null +++ b/fixtures/contracts/ERC721Token.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GNU + +pragma solidity ^0.8.13; + +import '@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol'; +import '@openzeppelin/contracts/utils/Counters.sol'; + +contract ERC721Token is ERC721URIStorage { + using Counters for Counters.Counter; + Counters.Counter private _tokenIds; + + constructor() ERC721('GameItem', 'ITM') {} + + function awardItem(address player, string memory tokenURI) public returns (uint256) { + uint256 newItemId = _tokenIds.current(); + _mint(player, newItemId); + _setTokenURI(newItemId, tokenURI); + + _tokenIds.increment(); + return newItemId; + } +} diff --git a/fixtures/contracts/ErrorsContract.sol b/fixtures/contracts/ErrorsContract.sol new file mode 100644 index 00000000000..d6b7bb7c0db --- /dev/null +++ b/fixtures/contracts/ErrorsContract.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GNU + +pragma solidity ^0.8.13; + +error Unauthorized(); +error CustomError(string); + +contract ErrorsContract { + address payable owner = payable(0x0); + + constructor() {} + + function unauthorize() public { + if (msg.sender != owner) revert Unauthorized(); + + owner.transfer(address(this).balance); + } + + function badRequire() public { + if (1 < 2) revert CustomError('reverted using custom Error'); + + owner.transfer(address(this).balance); + } +} diff --git a/fixtures/contracts/Greeter.sol b/fixtures/contracts/Greeter.sol new file mode 100644 index 00000000000..387ebe99fcd --- /dev/null +++ b/fixtures/contracts/Greeter.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GNU + +pragma solidity ^0.8.13; + +contract Greeter { + uint256 counter; + string private greeting; + + event GREETING_CHANGING(string from, string to); + event GREETING_CHANGED(string greeting); + + constructor(string memory _greeting) { + greeting = _greeting; + counter = 0; + } + + function greet() public view returns (string memory) { + return greeting; + } + + function setGreeting(string memory _greeting) public returns (bool, string memory) { + emit GREETING_CHANGING(greeting, _greeting); + greeting = _greeting; + emit GREETING_CHANGED(greeting); + return (true, greeting); + } + + function increment() public { + counter = counter + 1; + } +} diff --git a/fixtures/contracts/MsgSender.sol b/fixtures/contracts/MsgSender.sol new file mode 100644 index 00000000000..bac6ab9ee4b --- /dev/null +++ b/fixtures/contracts/MsgSender.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GNU + +pragma solidity ^0.8.13; + +contract MsgSender { + string public testString; + + constructor(string memory _testString) { + testString = _testString; + } + + function from() public view returns (address) { + return msg.sender; + } + + function setTestString(string memory _testString) public returns (bool, string memory) { + testString = _testString; + return (true, testString); + } +} diff --git a/fixtures/contracts/MyContract.sol b/fixtures/contracts/MyContract.sol new file mode 100644 index 00000000000..b24fad18374 --- /dev/null +++ b/fixtures/contracts/MyContract.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: GNU + +pragma solidity ^0.8.13; + +contract MyContract { + string private myAttribute; + + function getAttr() public view returns (string memory) { + return myAttribute; + } +} diff --git a/fixtures/contracts/NegativeNumbers.sol b/fixtures/contracts/NegativeNumbers.sol new file mode 100644 index 00000000000..4c11a6b5449 --- /dev/null +++ b/fixtures/contracts/NegativeNumbers.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.13; + +contract NegativeNumbers { + int256 public storedNegativeNumber; + + event OneNegativeNumber(int256 one); + event OneNegativeNumberIndexed(int256 indexed one); + event TwoNegativeNumbers(int256 one, int256 two); + event TwoNegativeNumbersIndexed(int256 indexed one, int256 indexed two); + event OtherNegativeNumbers(uint256 positive, int256 negative, string str); + event OtherNegativeNumbersIndexed( + uint256 indexed positive, + int256 indexed negative, + string str + ); + + constructor(int256 number) { + storedNegativeNumber = number; + } + + function oneNegativeNumber(int256 number) public { + emit OneNegativeNumber(number); + emit OneNegativeNumberIndexed(number); + } + + function twoNegativeNumbers(int256 number, int256 number2) public { + emit TwoNegativeNumbers(number, number2); + emit TwoNegativeNumbersIndexed(number, number2); + } + + function otherNegativeNumbers( + int256 number, + int256 number2, + string calldata str + ) public { + emit OtherNegativeNumbers(uint256(number), number2, str); + emit OtherNegativeNumbersIndexed(uint256(number), number2, str); + } +} diff --git a/fixtures/utils.ts b/fixtures/utils.ts new file mode 100644 index 00000000000..191aed2138e --- /dev/null +++ b/fixtures/utils.ts @@ -0,0 +1,69 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const processAsync = async ( + processFunc: ( + resolver: (value: unknown) => void, + reject: (value: unknown) => void, + ) => Promise | unknown, +) => + new Promise((resolve, reject) => { + (async () => { + await processFunc(resolve, reject); + })() as unknown; + }); + +export const sleep = async (ms: number) => + new Promise(resolve => { + const id = setTimeout(() => { + clearTimeout(id); + resolve(true); + }, ms); + }); + +type InObj = { + [key: string]: unknown; +}; +const getNameValue = ( + data: Partial, + obj: InObj, + keys: string[], + result: Array, +) => { + if (keys.length === 0) { + result.push(data as R); + } + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const key: keyof InObj = keys.pop()!; + if (obj[key]) { + (obj[key] as []).map(v => getNameValue({ ...data, [key]: v }, obj, [...keys], result)); + } +}; + +export const toAllVariants = (obj: InObj): R[] => { + const keys: string[] = Object.keys(obj); + const result: Array = []; + getNameValue({}, obj, keys, result); + return result; +}; + +export const toUpperCaseHex = (str: string) => { + if (str.startsWith('0x') || str.startsWith('0X')) { + return `0x${str.toUpperCase().slice(2)}`; + } + + return `0x${str.toUpperCase()}`; +}; diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000000..04e695a8e3a --- /dev/null +++ b/jest.config.js @@ -0,0 +1,37 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +const path = require('path'); +const { lstatSync, readdirSync } = require('fs'); +// get listing of packages in the mono repo +const basePath = path.resolve(__dirname, 'packages'); +const packages = readdirSync(basePath).filter(name => + lstatSync(path.join(basePath, name)).isDirectory(), +); +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + moduleNameMapper: { + ...packages.reduce( + (acc, name) => ({ + ...acc, + [`${name}(.*)$`]: `/packages/./${name}/$1`, + }), + {}, + ), + }, +}; diff --git a/karma.conf.js b/karma.conf.js deleted file mode 100644 index 24aa753f59c..00000000000 --- a/karma.conf.js +++ /dev/null @@ -1,42 +0,0 @@ -// BROWSER_BUNDLE_TEST is set for an un-browserified check that both bundles load correctly. -// BROWSER_BUNDLE_TEST is not set for the e2e unit tests, which check that bundle internals are ok. -function getTestFiles() { - switch (process.env.BROWSER_BUNDLE_TEST) { - case 'publishedDist': - return ['packages/web3/dist/web3.min.js', 'test/e2e.minified.js']; - case 'gitRepoDist': - return ['dist/web3.min.js', 'test/e2e.minified.js']; - default: - return ['test/**/e2e*.js']; - } -} - -// Only loads browserified preprocessor for the logic unit tests so we can `require` stuff. -function getPreprocessors() { - if (!process.env.BROWSER_BUNDLE_TEST) { - return { 'test/**/e2e*.js': ['browserify'] }; - } -} - -module.exports = function (config) { - const configuration = { - frameworks: ['mocha', 'browserify'], - files: getTestFiles(), - preprocessors: getPreprocessors(), - plugins: [ - 'karma-chrome-launcher', - 'karma-firefox-launcher', - 'karma-mocha', - 'karma-browserify', - 'karma-spec-reporter', - ], - reporters: ['spec'], - port: 9876, // karma web server port - colors: true, - logLevel: config.LOG_INFO, - autoWatch: false, - browsers: ['ChromeHeadless', 'FirefoxHeadless'], - }; - - config.set(configuration); -}; diff --git a/lerna.json b/lerna.json index 535b6320ce7..b5104ac58aa 100644 --- a/lerna.json +++ b/lerna.json @@ -1,16 +1,7 @@ { - "version": "1.3.0", - "lerna": "2.0.0", - "command": { - "init": { - "exact": true - }, - "publish": { - "exact": true, - "skipGit": true - } - }, - "packages": [ - "packages/*" - ] + "lerna": "4.0.0", + "npmClient": "yarn", + "useWorkspaces": true, + "version": "independent", + "packages": ["packages/*", "tools/*"] } diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index f04a8e93621..00000000000 --- a/package-lock.json +++ /dev/null @@ -1,21083 +0,0 @@ -{ - "name": "web3.js", - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@babel/cli": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.12.1.tgz", - "integrity": "sha512-eRJREyrfAJ2r42Iaxe8h3v6yyj1wu9OyosaUHW6UImjGf9ahGL9nsFNh7OCopvtcPL8WnEo7tp78wrZaZ6vG9g==", - "dev": true, - "requires": { - "@nicolo-ribaudo/chokidar-2": "^2.1.8", - "chokidar": "^3.4.0", - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.0.0", - "lodash": "^4.17.19", - "make-dir": "^2.1.0", - "slash": "^2.0.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/compat-data": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", - "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==", - "dev": true - }, - "@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } - } - }, - "@babel/generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.4.tgz", - "integrity": "sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w==", - "dev": true, - "requires": { - "@babel/types": "^7.6.3", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", - "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.12.1", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.12.0", - "semver": "^5.5.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", - "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } - } - }, - "@babel/helpers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", - "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } - } - }, - "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.4.tgz", - "integrity": "sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", - "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", - "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", - "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", - "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "resolve": "^1.8.1", - "semver": "^5.5.1" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", - "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", - "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", - "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-typescript": "^7.12.1" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/preset-env": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", - "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.12.1", - "@babel/helper-compilation-targets": "^7.12.1", - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.1", - "@babel/plugin-proposal-async-generator-functions": "^7.12.1", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.1", - "@babel/plugin-proposal-json-strings": "^7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.1", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.12.1", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-async-to-generator": "^7.12.1", - "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.1", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-computed-properties": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-dotall-regex": "^7.12.1", - "@babel/plugin-transform-duplicate-keys": "^7.12.1", - "@babel/plugin-transform-exponentiation-operator": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-function-name": "^7.12.1", - "@babel/plugin-transform-literals": "^7.12.1", - "@babel/plugin-transform-member-expression-literals": "^7.12.1", - "@babel/plugin-transform-modules-amd": "^7.12.1", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-modules-systemjs": "^7.12.1", - "@babel/plugin-transform-modules-umd": "^7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", - "@babel/plugin-transform-new-target": "^7.12.1", - "@babel/plugin-transform-object-super": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-property-literals": "^7.12.1", - "@babel/plugin-transform-regenerator": "^7.12.1", - "@babel/plugin-transform-reserved-words": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.1", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.1", - "@babel/plugin-transform-unicode-escapes": "^7.12.1", - "@babel/plugin-transform-unicode-regex": "^7.12.1", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.1", - "core-js-compat": "^3.6.2", - "semver": "^5.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz", - "integrity": "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-typescript": "^7.12.1" - } - }, - "@babel/runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", - "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", - "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.0" - } - }, - "@babel/traverse": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.3.tgz", - "integrity": "sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.6.3", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.6.3", - "@babel/types": "^7.6.3", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "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 - } - } - }, - "@babel/types": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz", - "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@chainsafe/geth-dev-assistant": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@chainsafe/geth-dev-assistant/-/geth-dev-assistant-0.1.5.tgz", - "integrity": "sha512-9q5SuFSU+RAcxutg3Fs6Sz1BH120Lg2rWGJON29VVLmzyKzGJbTu9760OT9Gvv1x1pOiyZBduQ3C62SQpCTv+Q==", - "dev": true, - "requires": { - "colors": "^1.3.3", - "node-emoji": "^1.10.0", - "web3": "^1.2.9", - "yargs": "^13.2.2" - } - }, - "@ensdomains/ens": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", - "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", - "dev": true, - "requires": { - "bluebird": "^3.5.2", - "eth-ens-namehash": "^2.0.8", - "solc": "^0.4.20", - "testrpc": "0.0.1", - "web3-utils": "^1.0.0-beta.31" - } - }, - "@ensdomains/resolver": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", - "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", - "dev": true - }, - "@ethersproject/abi": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", - "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - }, - "dependencies": { - "@ethersproject/address": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz", - "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/rlp": "^5.0.3", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/constants": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", - "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", - "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz", - "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - } - } - }, - "@ethersproject/abstract-provider": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.5.tgz", - "integrity": "sha512-i/CjElAkzV7vQBAeoz+IpjGfcFYEP9eD7j3fzZ0fzTq03DO7PPnR+xkEZ1IoDXGwDS+55aLM1xvLDwB/Lx6IOQ==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/networks": "^5.0.3", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/transactions": "^5.0.5", - "@ethersproject/web": "^5.0.6" - }, - "dependencies": { - "@ethersproject/address": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz", - "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/rlp": "^5.0.3", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/constants": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", - "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", - "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz", - "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/signing-key": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.5.tgz", - "integrity": "sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "elliptic": "6.5.3" - } - }, - "@ethersproject/transactions": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.6.tgz", - "integrity": "sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/rlp": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - } - } - }, - "@ethersproject/abstract-signer": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.7.tgz", - "integrity": "sha512-8W8gy/QutEL60EoMEpvxZ8MFAEWs/JvH5nmZ6xeLXoZvmBCasGmxqHdYjo2cxg0nevkPkq9SeenSsBBZSCx+SQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3" - }, - "dependencies": { - "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - } - } - }, - "@ethersproject/address": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.2.tgz", - "integrity": "sha512-+rz26RKj7ujGfQynys4V9VJRbR+wpC6eL8F22q3raWMH3152Ha31GwJPWzxE/bEA+43M/zTNVwY0R53gn53L2Q==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.0", - "@ethersproject/bytes": "^5.0.0", - "@ethersproject/keccak256": "^5.0.0", - "@ethersproject/logger": "^5.0.0", - "@ethersproject/rlp": "^5.0.0", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/base64": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.4.tgz", - "integrity": "sha512-4KRykQ7BQMeOXfvio1YITwHjxwBzh92UoXIdzxDE1p53CK28bbHPdsPNYo0wl0El7lJAMpT2SOdL0hhbWRnyIA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4" - }, - "dependencies": { - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - } - } - }, - "@ethersproject/basex": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.0.4.tgz", - "integrity": "sha512-ixIr/kKiAoSzOnSc777AGIOAhKai5Ivqr4HO/Gz+YG+xkfv6kqD6AW4ga9vM20Wwb0QBhh3LoRWTu4V1K+x9Ew==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/properties": "^5.0.3" - }, - "dependencies": { - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - } - } - }, - "@ethersproject/bignumber": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.5.tgz", - "integrity": "sha512-24ln7PV0g8ZzjcVZiLW9Wod0i+XCmK6zKkAaxw5enraTIT1p7gVOcSXFSzNQ9WYAwtiFQPvvA+TIO2oEITZNJA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.0", - "@ethersproject/logger": "^5.0.0", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.3.tgz", - "integrity": "sha512-AyPMAlY+Amaw4Zfp8OAivm1xYPI8mqiUYmEnSUk1CnS2NrQGHEMmFJFiOJdS3gDDpgSOFhWIjZwxKq2VZpqNTA==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.0" - } - }, - "@ethersproject/constants": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.2.tgz", - "integrity": "sha512-nNoVlNP6bgpog7pQ2EyD1xjlaXcy1Cl4kK5v1KoskHj58EtB6TK8M8AFGi3GgHTdMldfT4eN3OsoQ/CdOTVNFA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.0" - } - }, - "@ethersproject/contracts": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.0.5.tgz", - "integrity": "sha512-tFI255lFbmbqMkgnuyhDWHl3yWqttPlReplYuVvDCT/SuvBjLR4ad2uipBlh1fh5X1ipK9ettAoV4S0HKim4Kw==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.0.5", - "@ethersproject/abstract-provider": "^5.0.4", - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3" - }, - "dependencies": { - "@ethersproject/address": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz", - "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/rlp": "^5.0.3", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/constants": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", - "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", - "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz", - "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - } - } - }, - "@ethersproject/hash": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.5.tgz", - "integrity": "sha512-GpI80/h2HDpfNKpCZoxQJCjOQloGnlD5hM1G+tZe8FQDJhEvFjJoPDuWv+NaYjJfOciKS2Axqc4Q4WamdLoUgg==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/strings": "^5.0.4" - }, - "dependencies": { - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", - "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - } - } - }, - "@ethersproject/hdnode": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.0.5.tgz", - "integrity": "sha512-Ho4HZaK+KijE5adayvjAGusWMnT0mgwGa5hGMBofBOgX9nqiKf6Wxx68SXBGI1/L3rmKo6mlAjxUd8gefs0teQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/basex": "^5.0.3", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/pbkdf2": "^5.0.3", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/sha2": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4", - "@ethersproject/strings": "^5.0.4", - "@ethersproject/transactions": "^5.0.5", - "@ethersproject/wordlists": "^5.0.4" - }, - "dependencies": { - "@ethersproject/address": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz", - "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/rlp": "^5.0.3", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/constants": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", - "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", - "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz", - "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/signing-key": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.5.tgz", - "integrity": "sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "elliptic": "6.5.3" - } - }, - "@ethersproject/transactions": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.6.tgz", - "integrity": "sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/rlp": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - } - } - }, - "@ethersproject/json-wallets": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.0.7.tgz", - "integrity": "sha512-dgOn9JtGgjT28mDXs4LYY2rT4CzS6bG/rxoYuPq3TLHIf6nmvBcr33Fee6RrM/y8UAx4gyIkf6wb2cXsOctvQQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/address": "^5.0.4", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/hdnode": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/pbkdf2": "^5.0.3", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/random": "^5.0.3", - "@ethersproject/strings": "^5.0.4", - "@ethersproject/transactions": "^5.0.5", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - }, - "dependencies": { - "@ethersproject/address": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz", - "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/rlp": "^5.0.3", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/constants": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", - "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", - "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz", - "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/signing-key": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.5.tgz", - "integrity": "sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "elliptic": "6.5.3" - } - }, - "@ethersproject/transactions": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.6.tgz", - "integrity": "sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/rlp": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - } - } - }, - "@ethersproject/keccak256": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.2.tgz", - "integrity": "sha512-MbroXutc0gPNYIrUjS4Aw0lDuXabdzI7+l7elRWr1G6G+W0v00e/3gbikWkCReGtt2Jnt4lQSgnflhDwQGcIhA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.0", - "js-sha3": "0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - } - } - }, - "@ethersproject/logger": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.4.tgz", - "integrity": "sha512-alA2LiAy1LdQ/L1SA9ajUC7MvGAEQLsICEfKK4erX5qhkXE1LwLSPIzobtOWFsMHf2yrXGKBLnnpuVHprI3sAw==", - "dev": true - }, - "@ethersproject/networks": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.4.tgz", - "integrity": "sha512-/wHDTRms5mpJ09BoDrbNdFWINzONe05wZRgohCXvEv39rrH/Gd/yAnct8wC0RsW3tmFOgjgQxuBvypIxuUynTw==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - }, - "dependencies": { - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - } - } - }, - "@ethersproject/pbkdf2": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.0.4.tgz", - "integrity": "sha512-9jVBjHXQKfr9+3bkCg01a8Cd1H9e+7Kw3ZMIvAxD0lZtuzrXsJxm1hVwY9KA+PRUvgS/9tTP4viXQYwLAax7zg==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/sha2": "^5.0.3" - }, - "dependencies": { - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - } - } - }, - "@ethersproject/properties": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.2.tgz", - "integrity": "sha512-FxAisPGAOACQjMJzewl9OJG6lsGCPTm5vpUMtfeoxzAlAb2lv+kHzQPUh9h4jfAILzE8AR1jgXMzRmlhwyra1Q==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.0" - } - }, - "@ethersproject/providers": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.0.13.tgz", - "integrity": "sha512-5jsuk1FwXxmoQApGs8LSQyS43KP01pHA+6cQ1OPov5pT5Pcqe6ffh6UD1//BZ9Vjf+5e9AQqIk8w7FkGyROuCA==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.0.4", - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/address": "^5.0.4", - "@ethersproject/basex": "^5.0.3", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/networks": "^5.0.3", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/random": "^5.0.3", - "@ethersproject/rlp": "^5.0.3", - "@ethersproject/sha2": "^5.0.3", - "@ethersproject/strings": "^5.0.4", - "@ethersproject/transactions": "^5.0.5", - "@ethersproject/web": "^5.0.6", - "bech32": "1.1.4", - "ws": "7.2.3" - }, - "dependencies": { - "@ethersproject/address": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz", - "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/rlp": "^5.0.3", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/constants": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", - "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", - "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz", - "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/signing-key": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.5.tgz", - "integrity": "sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "elliptic": "6.5.3" - } - }, - "@ethersproject/transactions": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.6.tgz", - "integrity": "sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/rlp": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - }, - "ws": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", - "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==", - "dev": true - } - } - }, - "@ethersproject/random": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.0.4.tgz", - "integrity": "sha512-AIZJhqs6Ba4/+U3lOjt3QZbP6b/kuuGLJUYFUonAgWmkTHwqsCwYnFvnHKQSUuHbXHvErp7WFXFlztx+yMn3kQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - }, - "dependencies": { - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - } - } - }, - "@ethersproject/rlp": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.2.tgz", - "integrity": "sha512-oE0M5jqQ67fi2SuMcrpoewOpEuoXaD8M9JeR9md1bXRMvDYgKXUtDHs22oevpEOdnO2DPIRabp6MVHa4aDuWmw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.0", - "@ethersproject/logger": "^5.0.0" - } - }, - "@ethersproject/sha2": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.0.4.tgz", - "integrity": "sha512-0yFhf1mspxAfWdXXoPtK94adUeu1R7/FzAa+DfEiZTc76sz/vHXf0LSIazoR3znYKFny6haBxME+usbvvEcF3A==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "hash.js": "1.1.3" - }, - "dependencies": { - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - } - } - }, - "@ethersproject/signing-key": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.3.tgz", - "integrity": "sha512-5QPZaBRGCLzfVMbFb3LcVjNR0UbTXnwDHASnQYfbzwUOnFYHKxHsrcbl/5ONGoppgi8yXgOocKqlPCFycJJVWQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.0", - "@ethersproject/logger": "^5.0.0", - "@ethersproject/properties": "^5.0.0", - "elliptic": "6.5.3" - }, - "dependencies": { - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - } - } - }, - "@ethersproject/solidity": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.0.5.tgz", - "integrity": "sha512-DMFQ0ouXmNVoKWbGEUFGi8Urli4SJip9jXafQyFHWPRr5oJUqDVkNfwcyC37k+mhBG93k7qrYXCH2xJnGEOxHg==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/sha2": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - }, - "dependencies": { - "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", - "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - } - } - }, - "@ethersproject/strings": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.5.tgz", - "integrity": "sha512-JED6WaIV00xM/gvj8vSnd+0VWtDYdidTmavFRCTQakqfz+4tDo6Jz5LHgG+dd45h7ah7ykCHW0C7ZXWEDROCXQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - }, - "dependencies": { - "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/constants": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", - "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - } - } - }, - "@ethersproject/transactions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.2.tgz", - "integrity": "sha512-jZp0ZbbJlq4JLZY6qoMzNtp2HQsX6USQposi3ns0MPUdn3OdZJBDtrcO15r/2VS5t/K1e1GE5MI1HmMKlcTbbQ==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.0.0", - "@ethersproject/bignumber": "^5.0.0", - "@ethersproject/bytes": "^5.0.0", - "@ethersproject/constants": "^5.0.0", - "@ethersproject/keccak256": "^5.0.0", - "@ethersproject/logger": "^5.0.0", - "@ethersproject/properties": "^5.0.0", - "@ethersproject/rlp": "^5.0.0", - "@ethersproject/signing-key": "^5.0.0" - } - }, - "@ethersproject/units": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.0.6.tgz", - "integrity": "sha512-tsJuy4mipppdmooukRfhXt8fGx9nxvfvG6Xdy0RDm7LzHsjghjwQ69m2bCpId6SDSR1Uq1cQ9irPiUBSyWolUA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - }, - "dependencies": { - "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/constants": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", - "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - } - } - }, - "@ethersproject/wallet": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.0.6.tgz", - "integrity": "sha512-dRqx3+Degc5pvjaeeTHuk2EuTRM3b6ce/TiV0HRZhRXYnKyyjg0iYXEZo/b6p3rnV+Xhwxkc0+I/ISPkNpictA==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.0.4", - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/hdnode": "^5.0.4", - "@ethersproject/json-wallets": "^5.0.6", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/random": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4", - "@ethersproject/transactions": "^5.0.5", - "@ethersproject/wordlists": "^5.0.4" - }, - "dependencies": { - "@ethersproject/address": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz", - "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/rlp": "^5.0.3", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/constants": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", - "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", - "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz", - "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/signing-key": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.5.tgz", - "integrity": "sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "elliptic": "6.5.3" - } - }, - "@ethersproject/transactions": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.6.tgz", - "integrity": "sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/rlp": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - } - } - }, - "@ethersproject/web": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.9.tgz", - "integrity": "sha512-//QNlv1MSkOII1hv3+HQwWoiVFS+BMVGI0KYeUww4cyrEktnx1QIez5bTSab9s9fWTFaWKNmQNBwMbxAqPuYDw==", - "dev": true, - "requires": { - "@ethersproject/base64": "^5.0.3", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - }, - "dependencies": { - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - } - } - }, - "@ethersproject/wordlists": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.0.5.tgz", - "integrity": "sha512-XA3ycFltVrCTQt04w5nHu3Xq5Z6HjqWsXaAYQHFdqtugyUsIumaO9S5MOwFFuUYTNkZUoT3jCRa/OBS+K4tLfA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - }, - "dependencies": { - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - } - } - }, - "@evocateur/libnpmaccess": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz", - "integrity": "sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg==", - "dev": true, - "requires": { - "@evocateur/npm-registry-fetch": "^4.0.0", - "aproba": "^2.0.0", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "npm-package-arg": "^6.1.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "@evocateur/libnpmpublish": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz", - "integrity": "sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg==", - "dev": true, - "requires": { - "@evocateur/npm-registry-fetch": "^4.0.0", - "aproba": "^2.0.0", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "lodash.clonedeep": "^4.5.0", - "normalize-package-data": "^2.4.0", - "npm-package-arg": "^6.1.0", - "semver": "^5.5.1", - "ssri": "^6.0.1" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "@evocateur/npm-registry-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz", - "integrity": "sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g==", - "dev": true, - "requires": { - "JSONStream": "^1.3.4", - "bluebird": "^3.5.1", - "figgy-pudding": "^3.4.1", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "npm-package-arg": "^6.1.0", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@evocateur/pacote": { - "version": "9.6.5", - "resolved": "https://registry.npmjs.org/@evocateur/pacote/-/pacote-9.6.5.tgz", - "integrity": "sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w==", - "dev": true, - "requires": { - "@evocateur/npm-registry-fetch": "^4.0.0", - "bluebird": "^3.5.3", - "cacache": "^12.0.3", - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.1.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "minimatch": "^3.0.4", - "minipass": "^2.3.5", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "normalize-package-data": "^2.5.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.4.4", - "npm-pick-manifest": "^3.0.0", - "osenv": "^0.1.5", - "promise-inflight": "^1.0.1", - "promise-retry": "^1.1.1", - "protoduck": "^5.0.1", - "rimraf": "^2.6.3", - "safe-buffer": "^5.2.0", - "semver": "^5.7.0", - "ssri": "^6.0.1", - "tar": "^4.4.10", - "unique-filename": "^1.1.1", - "which": "^1.3.1" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@lerna/add": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.21.0.tgz", - "integrity": "sha512-vhUXXF6SpufBE1EkNEXwz1VLW03f177G9uMOFMQkp6OJ30/PWg4Ekifuz9/3YfgB2/GH8Tu4Lk3O51P2Hskg/A==", - "dev": true, - "requires": { - "@evocateur/pacote": "^9.6.3", - "@lerna/bootstrap": "3.21.0", - "@lerna/command": "3.21.0", - "@lerna/filter-options": "3.20.0", - "@lerna/npm-conf": "3.16.0", - "@lerna/validation-error": "3.13.0", - "dedent": "^0.7.0", - "npm-package-arg": "^6.1.0", - "p-map": "^2.1.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@lerna/bootstrap": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.21.0.tgz", - "integrity": "sha512-mtNHlXpmvJn6JTu0KcuTTPl2jLsDNud0QacV/h++qsaKbhAaJr/FElNZ5s7MwZFUM3XaDmvWzHKaszeBMHIbBw==", - "dev": true, - "requires": { - "@lerna/command": "3.21.0", - "@lerna/filter-options": "3.20.0", - "@lerna/has-npm-version": "3.16.5", - "@lerna/npm-install": "3.16.5", - "@lerna/package-graph": "3.18.5", - "@lerna/pulse-till-done": "3.13.0", - "@lerna/rimraf-dir": "3.16.5", - "@lerna/run-lifecycle": "3.16.2", - "@lerna/run-topologically": "3.18.5", - "@lerna/symlink-binary": "3.17.0", - "@lerna/symlink-dependencies": "3.17.0", - "@lerna/validation-error": "3.13.0", - "dedent": "^0.7.0", - "get-port": "^4.2.0", - "multimatch": "^3.0.0", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2", - "p-finally": "^1.0.0", - "p-map": "^2.1.0", - "p-map-series": "^1.0.0", - "p-waterfall": "^1.0.0", - "read-package-tree": "^5.1.6", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@lerna/changed": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.21.0.tgz", - "integrity": "sha512-hzqoyf8MSHVjZp0gfJ7G8jaz+++mgXYiNs9iViQGA8JlN/dnWLI5sWDptEH3/B30Izo+fdVz0S0s7ydVE3pWIw==", - "dev": true, - "requires": { - "@lerna/collect-updates": "3.20.0", - "@lerna/command": "3.21.0", - "@lerna/listable": "3.18.5", - "@lerna/output": "3.13.0" - } - }, - "@lerna/check-working-tree": { - "version": "3.16.5", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz", - "integrity": "sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ==", - "dev": true, - "requires": { - "@lerna/collect-uncommitted": "3.16.5", - "@lerna/describe-ref": "3.16.5", - "@lerna/validation-error": "3.13.0" - } - }, - "@lerna/child-process": { - "version": "3.16.5", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.16.5.tgz", - "integrity": "sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg==", - "dev": true, - "requires": { - "chalk": "^2.3.1", - "execa": "^1.0.0", - "strong-log-transformer": "^2.0.0" - } - }, - "@lerna/clean": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.21.0.tgz", - "integrity": "sha512-b/L9l+MDgE/7oGbrav6rG8RTQvRiZLO1zTcG17zgJAAuhlsPxJExMlh2DFwJEVi2les70vMhHfST3Ue1IMMjpg==", - "dev": true, - "requires": { - "@lerna/command": "3.21.0", - "@lerna/filter-options": "3.20.0", - "@lerna/prompt": "3.18.5", - "@lerna/pulse-till-done": "3.13.0", - "@lerna/rimraf-dir": "3.16.5", - "p-map": "^2.1.0", - "p-map-series": "^1.0.0", - "p-waterfall": "^1.0.0" - } - }, - "@lerna/cli": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-3.18.5.tgz", - "integrity": "sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA==", - "dev": true, - "requires": { - "@lerna/global-options": "3.13.0", - "dedent": "^0.7.0", - "npmlog": "^4.1.2", - "yargs": "^14.2.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "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 - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", - "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^15.0.1" - } - }, - "yargs-parser": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", - "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "@lerna/collect-uncommitted": { - "version": "3.16.5", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz", - "integrity": "sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg==", - "dev": true, - "requires": { - "@lerna/child-process": "3.16.5", - "chalk": "^2.3.1", - "figgy-pudding": "^3.5.1", - "npmlog": "^4.1.2" - } - }, - "@lerna/collect-updates": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.20.0.tgz", - "integrity": "sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q==", - "dev": true, - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/describe-ref": "3.16.5", - "minimatch": "^3.0.4", - "npmlog": "^4.1.2", - "slash": "^2.0.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "@lerna/command": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.21.0.tgz", - "integrity": "sha512-T2bu6R8R3KkH5YoCKdutKv123iUgUbW8efVjdGCDnCMthAQzoentOJfDeodBwn0P2OqCl3ohsiNVtSn9h78fyQ==", - "dev": true, - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/package-graph": "3.18.5", - "@lerna/project": "3.21.0", - "@lerna/validation-error": "3.13.0", - "@lerna/write-log-file": "3.13.0", - "clone-deep": "^4.0.1", - "dedent": "^0.7.0", - "execa": "^1.0.0", - "is-ci": "^2.0.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/conventional-commits": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.22.0.tgz", - "integrity": "sha512-z4ZZk1e8Mhz7+IS8NxHr64wyklHctCJyWpJKEZZPJiLFJ8yKto/x38O80R10pIzC0rr8Sy/OsjSH4bl0TbbgqA==", - "dev": true, - "requires": { - "@lerna/validation-error": "3.13.0", - "conventional-changelog-angular": "^5.0.3", - "conventional-changelog-core": "^3.1.6", - "conventional-recommended-bump": "^5.0.0", - "fs-extra": "^8.1.0", - "get-stream": "^4.0.0", - "lodash.template": "^4.5.0", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2", - "pify": "^4.0.1", - "semver": "^6.2.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "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 - } - } - }, - "@lerna/create": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.22.0.tgz", - "integrity": "sha512-MdiQQzCcB4E9fBF1TyMOaAEz9lUjIHp1Ju9H7f3lXze5JK6Fl5NYkouAvsLgY6YSIhXMY8AHW2zzXeBDY4yWkw==", - "dev": true, - "requires": { - "@evocateur/pacote": "^9.6.3", - "@lerna/child-process": "3.16.5", - "@lerna/command": "3.21.0", - "@lerna/npm-conf": "3.16.0", - "@lerna/validation-error": "3.13.0", - "camelcase": "^5.0.0", - "dedent": "^0.7.0", - "fs-extra": "^8.1.0", - "globby": "^9.2.0", - "init-package-json": "^1.10.3", - "npm-package-arg": "^6.1.0", - "p-reduce": "^1.0.0", - "pify": "^4.0.1", - "semver": "^6.2.0", - "slash": "^2.0.0", - "validate-npm-package-license": "^3.0.3", - "validate-npm-package-name": "^3.0.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "dev": true, - "requires": { - "path-type": "^3.0.0" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "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 - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "@lerna/create-symlink": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.16.2.tgz", - "integrity": "sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw==", - "dev": true, - "requires": { - "@zkochan/cmd-shim": "^3.1.0", - "fs-extra": "^8.1.0", - "npmlog": "^4.1.2" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "@lerna/describe-ref": { - "version": "3.16.5", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.16.5.tgz", - "integrity": "sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw==", - "dev": true, - "requires": { - "@lerna/child-process": "3.16.5", - "npmlog": "^4.1.2" - } - }, - "@lerna/diff": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.21.0.tgz", - "integrity": "sha512-5viTR33QV3S7O+bjruo1SaR40m7F2aUHJaDAC7fL9Ca6xji+aw1KFkpCtVlISS0G8vikUREGMJh+c/VMSc8Usw==", - "dev": true, - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/command": "3.21.0", - "@lerna/validation-error": "3.13.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/exec": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.21.0.tgz", - "integrity": "sha512-iLvDBrIE6rpdd4GIKTY9mkXyhwsJ2RvQdB9ZU+/NhR3okXfqKc6py/24tV111jqpXTtZUW6HNydT4dMao2hi1Q==", - "dev": true, - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/command": "3.21.0", - "@lerna/filter-options": "3.20.0", - "@lerna/profiler": "3.20.0", - "@lerna/run-topologically": "3.18.5", - "@lerna/validation-error": "3.13.0", - "p-map": "^2.1.0" - } - }, - "@lerna/filter-options": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.20.0.tgz", - "integrity": "sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g==", - "dev": true, - "requires": { - "@lerna/collect-updates": "3.20.0", - "@lerna/filter-packages": "3.18.0", - "dedent": "^0.7.0", - "figgy-pudding": "^3.5.1", - "npmlog": "^4.1.2" - } - }, - "@lerna/filter-packages": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.18.0.tgz", - "integrity": "sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ==", - "dev": true, - "requires": { - "@lerna/validation-error": "3.13.0", - "multimatch": "^3.0.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/get-npm-exec-opts": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz", - "integrity": "sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw==", - "dev": true, - "requires": { - "npmlog": "^4.1.2" - } - }, - "@lerna/get-packed": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-3.16.0.tgz", - "integrity": "sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw==", - "dev": true, - "requires": { - "fs-extra": "^8.1.0", - "ssri": "^6.0.1", - "tar": "^4.4.8" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "@lerna/github-client": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-3.22.0.tgz", - "integrity": "sha512-O/GwPW+Gzr3Eb5bk+nTzTJ3uv+jh5jGho9BOqKlajXaOkMYGBELEAqV5+uARNGWZFvYAiF4PgqHb6aCUu7XdXg==", - "dev": true, - "requires": { - "@lerna/child-process": "3.16.5", - "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^16.28.4", - "git-url-parse": "^11.1.2", - "npmlog": "^4.1.2" - } - }, - "@lerna/gitlab-client": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz", - "integrity": "sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q==", - "dev": true, - "requires": { - "node-fetch": "^2.5.0", - "npmlog": "^4.1.2", - "whatwg-url": "^7.0.0" - } - }, - "@lerna/global-options": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.13.0.tgz", - "integrity": "sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ==", - "dev": true - }, - "@lerna/has-npm-version": { - "version": "3.16.5", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz", - "integrity": "sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q==", - "dev": true, - "requires": { - "@lerna/child-process": "3.16.5", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@lerna/import": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.22.0.tgz", - "integrity": "sha512-uWOlexasM5XR6tXi4YehODtH9Y3OZrFht3mGUFFT3OIl2s+V85xIGFfqFGMTipMPAGb2oF1UBLL48kR43hRsOg==", - "dev": true, - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/command": "3.21.0", - "@lerna/prompt": "3.18.5", - "@lerna/pulse-till-done": "3.13.0", - "@lerna/validation-error": "3.13.0", - "dedent": "^0.7.0", - "fs-extra": "^8.1.0", - "p-map-series": "^1.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "@lerna/info": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-3.21.0.tgz", - "integrity": "sha512-0XDqGYVBgWxUquFaIptW2bYSIu6jOs1BtkvRTWDDhw4zyEdp6q4eaMvqdSap1CG+7wM5jeLCi6z94wS0AuiuwA==", - "dev": true, - "requires": { - "@lerna/command": "3.21.0", - "@lerna/output": "3.13.0", - "envinfo": "^7.3.1" - } - }, - "@lerna/init": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.21.0.tgz", - "integrity": "sha512-6CM0z+EFUkFfurwdJCR+LQQF6MqHbYDCBPyhu/d086LRf58GtYZYj49J8mKG9ktayp/TOIxL/pKKjgLD8QBPOg==", - "dev": true, - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/command": "3.21.0", - "fs-extra": "^8.1.0", - "p-map": "^2.1.0", - "write-json-file": "^3.2.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "@lerna/link": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.21.0.tgz", - "integrity": "sha512-tGu9GxrX7Ivs+Wl3w1+jrLi1nQ36kNI32dcOssij6bg0oZ2M2MDEFI9UF2gmoypTaN9uO5TSsjCFS7aR79HbdQ==", - "dev": true, - "requires": { - "@lerna/command": "3.21.0", - "@lerna/package-graph": "3.18.5", - "@lerna/symlink-dependencies": "3.17.0", - "p-map": "^2.1.0", - "slash": "^2.0.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "@lerna/list": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.21.0.tgz", - "integrity": "sha512-KehRjE83B1VaAbRRkRy6jLX1Cin8ltsrQ7FHf2bhwhRHK0S54YuA6LOoBnY/NtA8bHDX/Z+G5sMY78X30NS9tg==", - "dev": true, - "requires": { - "@lerna/command": "3.21.0", - "@lerna/filter-options": "3.20.0", - "@lerna/listable": "3.18.5", - "@lerna/output": "3.13.0" - } - }, - "@lerna/listable": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-3.18.5.tgz", - "integrity": "sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg==", - "dev": true, - "requires": { - "@lerna/query-graph": "3.18.5", - "chalk": "^2.3.1", - "columnify": "^1.5.4" - } - }, - "@lerna/log-packed": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.16.0.tgz", - "integrity": "sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ==", - "dev": true, - "requires": { - "byte-size": "^5.0.1", - "columnify": "^1.5.4", - "has-unicode": "^2.0.1", - "npmlog": "^4.1.2" - } - }, - "@lerna/npm-conf": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-3.16.0.tgz", - "integrity": "sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA==", - "dev": true, - "requires": { - "config-chain": "^1.1.11", - "pify": "^4.0.1" - } - }, - "@lerna/npm-dist-tag": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz", - "integrity": "sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ==", - "dev": true, - "requires": { - "@evocateur/npm-registry-fetch": "^4.0.0", - "@lerna/otplease": "3.18.5", - "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/npm-install": { - "version": "3.16.5", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.16.5.tgz", - "integrity": "sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg==", - "dev": true, - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/get-npm-exec-opts": "3.13.0", - "fs-extra": "^8.1.0", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2", - "signal-exit": "^3.0.2", - "write-pkg": "^3.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "@lerna/npm-publish": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.18.5.tgz", - "integrity": "sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg==", - "dev": true, - "requires": { - "@evocateur/libnpmpublish": "^1.2.2", - "@lerna/otplease": "3.18.5", - "@lerna/run-lifecycle": "3.16.2", - "figgy-pudding": "^3.5.1", - "fs-extra": "^8.1.0", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2", - "pify": "^4.0.1", - "read-package-json": "^2.0.13" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "@lerna/npm-run-script": { - "version": "3.16.5", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz", - "integrity": "sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ==", - "dev": true, - "requires": { - "@lerna/child-process": "3.16.5", - "@lerna/get-npm-exec-opts": "3.13.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/otplease": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-3.18.5.tgz", - "integrity": "sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog==", - "dev": true, - "requires": { - "@lerna/prompt": "3.18.5", - "figgy-pudding": "^3.5.1" - } - }, - "@lerna/output": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-3.13.0.tgz", - "integrity": "sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg==", - "dev": true, - "requires": { - "npmlog": "^4.1.2" - } - }, - "@lerna/pack-directory": { - "version": "3.16.4", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.16.4.tgz", - "integrity": "sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng==", - "dev": true, - "requires": { - "@lerna/get-packed": "3.16.0", - "@lerna/package": "3.16.0", - "@lerna/run-lifecycle": "3.16.2", - "figgy-pudding": "^3.5.1", - "npm-packlist": "^1.4.4", - "npmlog": "^4.1.2", - "tar": "^4.4.10", - "temp-write": "^3.4.0" - } - }, - "@lerna/package": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-3.16.0.tgz", - "integrity": "sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw==", - "dev": true, - "requires": { - "load-json-file": "^5.3.0", - "npm-package-arg": "^6.1.0", - "write-pkg": "^3.1.0" - }, - "dependencies": { - "load-json-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", - "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^4.0.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0", - "type-fest": "^0.3.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "@lerna/package-graph": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.18.5.tgz", - "integrity": "sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA==", - "dev": true, - "requires": { - "@lerna/prerelease-id-from-version": "3.16.0", - "@lerna/validation-error": "3.13.0", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@lerna/prerelease-id-from-version": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz", - "integrity": "sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA==", - "dev": true, - "requires": { - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@lerna/profiler": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-3.20.0.tgz", - "integrity": "sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "fs-extra": "^8.1.0", - "npmlog": "^4.1.2", - "upath": "^1.2.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "@lerna/project": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-3.21.0.tgz", - "integrity": "sha512-xT1mrpET2BF11CY32uypV2GPtPVm6Hgtha7D81GQP9iAitk9EccrdNjYGt5UBYASl4CIDXBRxwmTTVGfrCx82A==", - "dev": true, - "requires": { - "@lerna/package": "3.16.0", - "@lerna/validation-error": "3.13.0", - "cosmiconfig": "^5.1.0", - "dedent": "^0.7.0", - "dot-prop": "^4.2.0", - "glob-parent": "^5.0.0", - "globby": "^9.2.0", - "load-json-file": "^5.3.0", - "npmlog": "^4.1.2", - "p-map": "^2.1.0", - "resolve-from": "^4.0.0", - "write-json-file": "^3.2.0" - }, - "dependencies": { - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "dev": true, - "requires": { - "path-type": "^3.0.0" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "load-json-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", - "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^4.0.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0", - "type-fest": "^0.3.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "@lerna/prompt": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.18.5.tgz", - "integrity": "sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ==", - "dev": true, - "requires": { - "inquirer": "^6.2.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/publish": { - "version": "3.22.1", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.22.1.tgz", - "integrity": "sha512-PG9CM9HUYDreb1FbJwFg90TCBQooGjj+n/pb3gw/eH5mEDq0p8wKdLFe0qkiqUkm/Ub5C8DbVFertIo0Vd0zcw==", - "dev": true, - "requires": { - "@evocateur/libnpmaccess": "^3.1.2", - "@evocateur/npm-registry-fetch": "^4.0.0", - "@evocateur/pacote": "^9.6.3", - "@lerna/check-working-tree": "3.16.5", - "@lerna/child-process": "3.16.5", - "@lerna/collect-updates": "3.20.0", - "@lerna/command": "3.21.0", - "@lerna/describe-ref": "3.16.5", - "@lerna/log-packed": "3.16.0", - "@lerna/npm-conf": "3.16.0", - "@lerna/npm-dist-tag": "3.18.5", - "@lerna/npm-publish": "3.18.5", - "@lerna/otplease": "3.18.5", - "@lerna/output": "3.13.0", - "@lerna/pack-directory": "3.16.4", - "@lerna/prerelease-id-from-version": "3.16.0", - "@lerna/prompt": "3.18.5", - "@lerna/pulse-till-done": "3.13.0", - "@lerna/run-lifecycle": "3.16.2", - "@lerna/run-topologically": "3.18.5", - "@lerna/validation-error": "3.13.0", - "@lerna/version": "3.22.1", - "figgy-pudding": "^3.5.1", - "fs-extra": "^8.1.0", - "npm-package-arg": "^6.1.0", - "npmlog": "^4.1.2", - "p-finally": "^1.0.0", - "p-map": "^2.1.0", - "p-pipe": "^1.2.0", - "semver": "^6.2.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "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 - } - } - }, - "@lerna/pulse-till-done": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz", - "integrity": "sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA==", - "dev": true, - "requires": { - "npmlog": "^4.1.2" - } - }, - "@lerna/query-graph": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-3.18.5.tgz", - "integrity": "sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA==", - "dev": true, - "requires": { - "@lerna/package-graph": "3.18.5", - "figgy-pudding": "^3.5.1" - } - }, - "@lerna/resolve-symlink": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz", - "integrity": "sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ==", - "dev": true, - "requires": { - "fs-extra": "^8.1.0", - "npmlog": "^4.1.2", - "read-cmd-shim": "^1.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "@lerna/rimraf-dir": { - "version": "3.16.5", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz", - "integrity": "sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA==", - "dev": true, - "requires": { - "@lerna/child-process": "3.16.5", - "npmlog": "^4.1.2", - "path-exists": "^3.0.0", - "rimraf": "^2.6.2" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "@lerna/run": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.21.0.tgz", - "integrity": "sha512-fJF68rT3veh+hkToFsBmUJ9MHc9yGXA7LSDvhziAojzOb0AI/jBDp6cEcDQyJ7dbnplba2Lj02IH61QUf9oW0Q==", - "dev": true, - "requires": { - "@lerna/command": "3.21.0", - "@lerna/filter-options": "3.20.0", - "@lerna/npm-run-script": "3.16.5", - "@lerna/output": "3.13.0", - "@lerna/profiler": "3.20.0", - "@lerna/run-topologically": "3.18.5", - "@lerna/timer": "3.13.0", - "@lerna/validation-error": "3.13.0", - "p-map": "^2.1.0" - } - }, - "@lerna/run-lifecycle": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz", - "integrity": "sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A==", - "dev": true, - "requires": { - "@lerna/npm-conf": "3.16.0", - "figgy-pudding": "^3.5.1", - "npm-lifecycle": "^3.1.2", - "npmlog": "^4.1.2" - } - }, - "@lerna/run-topologically": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-3.18.5.tgz", - "integrity": "sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg==", - "dev": true, - "requires": { - "@lerna/query-graph": "3.18.5", - "figgy-pudding": "^3.5.1", - "p-queue": "^4.0.0" - } - }, - "@lerna/symlink-binary": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz", - "integrity": "sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ==", - "dev": true, - "requires": { - "@lerna/create-symlink": "3.16.2", - "@lerna/package": "3.16.0", - "fs-extra": "^8.1.0", - "p-map": "^2.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "@lerna/symlink-dependencies": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz", - "integrity": "sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q==", - "dev": true, - "requires": { - "@lerna/create-symlink": "3.16.2", - "@lerna/resolve-symlink": "3.16.0", - "@lerna/symlink-binary": "3.17.0", - "fs-extra": "^8.1.0", - "p-finally": "^1.0.0", - "p-map": "^2.1.0", - "p-map-series": "^1.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "@lerna/timer": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-3.13.0.tgz", - "integrity": "sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw==", - "dev": true - }, - "@lerna/validation-error": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-3.13.0.tgz", - "integrity": "sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA==", - "dev": true, - "requires": { - "npmlog": "^4.1.2" - } - }, - "@lerna/version": { - "version": "3.22.1", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.22.1.tgz", - "integrity": "sha512-PSGt/K1hVqreAFoi3zjD0VEDupQ2WZVlVIwesrE5GbrL2BjXowjCsTDPqblahDUPy0hp6h7E2kG855yLTp62+g==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "3.16.5", - "@lerna/child-process": "3.16.5", - "@lerna/collect-updates": "3.20.0", - "@lerna/command": "3.21.0", - "@lerna/conventional-commits": "3.22.0", - "@lerna/github-client": "3.22.0", - "@lerna/gitlab-client": "3.15.0", - "@lerna/output": "3.13.0", - "@lerna/prerelease-id-from-version": "3.16.0", - "@lerna/prompt": "3.18.5", - "@lerna/run-lifecycle": "3.16.2", - "@lerna/run-topologically": "3.18.5", - "@lerna/validation-error": "3.13.0", - "chalk": "^2.3.1", - "dedent": "^0.7.0", - "load-json-file": "^5.3.0", - "minimatch": "^3.0.4", - "npmlog": "^4.1.2", - "p-map": "^2.1.0", - "p-pipe": "^1.2.0", - "p-reduce": "^1.0.0", - "p-waterfall": "^1.0.0", - "semver": "^6.2.0", - "slash": "^2.0.0", - "temp-write": "^3.4.0", - "write-json-file": "^3.2.0" - }, - "dependencies": { - "load-json-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", - "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^4.0.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0", - "type-fest": "^0.3.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "@lerna/write-log-file": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-3.13.0.tgz", - "integrity": "sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A==", - "dev": true, - "requires": { - "npmlog": "^4.1.2", - "write-file-atomic": "^2.3.0" - } - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8.tgz", - "integrity": "sha512-FohwULwAebCUKi/akMFyGi7jfc7JXTeMHzKxuP3umRd9mK/2Y7/SMBSI2jX+YLopPXi+PF9l307NmpfxTdCegA==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "2.1.8" - }, - "dependencies": { - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - } - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" - } - }, - "@octokit/auth-token": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.2.tgz", - "integrity": "sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ==", - "dev": true, - "requires": { - "@octokit/types": "^5.0.0" - } - }, - "@octokit/endpoint": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.8.tgz", - "integrity": "sha512-MuRrgv+bM4Q+e9uEvxAB/Kf+Sj0O2JAOBA131uo1o6lgdq1iS8ejKwtqHgdfY91V3rN9R/hdGKFiQYMzVzVBEQ==", - "dev": true, - "requires": { - "@octokit/types": "^5.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - } - } - }, - "@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz", - "integrity": "sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q==", - "dev": true, - "requires": { - "@octokit/types": "^2.0.1" - }, - "dependencies": { - "@octokit/types": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", - "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", - "dev": true, - "requires": { - "@types/node": ">= 8" - } - } - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.1.tgz", - "integrity": "sha512-d8vmiGAUGswxErdIGfpd0I2UHo2Cs7EaBDpFUZQ9UqYmA0s5/4XoMO4HBld73xGpCj2BvyVyQe2qd9e+/nvKwQ==", - "dev": true - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz", - "integrity": "sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ==", - "dev": true, - "requires": { - "@octokit/types": "^2.0.1", - "deprecation": "^2.3.1" - }, - "dependencies": { - "@octokit/types": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", - "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", - "dev": true, - "requires": { - "@types/node": ">= 8" - } - } - } - }, - "@octokit/request": { - "version": "5.4.9", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.9.tgz", - "integrity": "sha512-CzwVvRyimIM1h2n9pLVYfTDmX9m+KHSgCpqPsY8F1NdEK8IaWqXhSBXsdjOBFZSpEcxNEeg4p0UO9cQ8EnOCLA==", - "dev": true, - "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.0.0", - "@octokit/types": "^5.0.0", - "deprecation": "^2.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.1", - "once": "^1.4.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "@octokit/request-error": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.2.tgz", - "integrity": "sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw==", - "dev": true, - "requires": { - "@octokit/types": "^5.0.1", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - } - } - }, - "@octokit/request-error": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz", - "integrity": "sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==", - "dev": true, - "requires": { - "@octokit/types": "^2.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "dependencies": { - "@octokit/types": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", - "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", - "dev": true, - "requires": { - "@types/node": ">= 8" - } - } - } - }, - "@octokit/rest": { - "version": "16.43.2", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.43.2.tgz", - "integrity": "sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ==", - "dev": true, - "requires": { - "@octokit/auth-token": "^2.4.0", - "@octokit/plugin-paginate-rest": "^1.1.1", - "@octokit/plugin-request-log": "^1.0.0", - "@octokit/plugin-rest-endpoint-methods": "2.4.0", - "@octokit/request": "^5.2.0", - "@octokit/request-error": "^1.0.2", - "atob-lite": "^2.0.0", - "before-after-hook": "^2.0.0", - "btoa-lite": "^1.0.0", - "deprecation": "^2.0.0", - "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", - "lodash.uniq": "^4.5.0", - "octokit-pagination-methods": "^1.1.0", - "once": "^1.4.0", - "universal-user-agent": "^4.0.0" - } - }, - "@octokit/types": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-5.5.0.tgz", - "integrity": "sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ==", - "dev": true, - "requires": { - "@types/node": ">= 8" - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", - "dev": true - }, - "@types/bignumber.js": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-4.0.3.tgz", - "integrity": "sha512-KoJPKjhlWBry4fk8qcIufXFOU+zcZBfkHQWKbnAMQTMoe2GDeLpjSQHS+22gv+dg7gKdTP2WCjSeCVnfj8e+Gw==", - "dev": true - }, - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", - "dev": true - }, - "@types/node": { - "version": "12.19.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.1.tgz", - "integrity": "sha512-/xaVmBBjOGh55WCqumLAHXU9VhjGtmyTGqJzFBXRWZzByOXI5JAJNx9xPVGEsNizrNwcec92fQMj458MWfjN1A==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.1.tgz", - "integrity": "sha512-+ZjSA8ELlOp8SlKi0YLB2tz9d5iPNEmOBd+8Rz21wTMdaXQIa9b6TEnD6l5qKOCypE7FSyPyck12qZJxSDNoog==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/tapable": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", - "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.2.tgz", - "integrity": "sha512-d6dIfpPbF+8B7WiCi2ELY7m0w1joD8cRW4ms88Emdb2w062NeEpbNCeWwVCgzLRpVG+5e74VFSg4rgJ2xXjEiQ==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "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 - } - } - }, - "@types/underscore": { - "version": "1.10.24", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.10.24.tgz", - "integrity": "sha512-T3NQD8hXNW2sRsSbLNjF/aBo18MyJlbw0lSpQHB/eZZtScPdexN4HSa8cByYwTw9Wy7KuOFr81mlDQcQQaZ79w==", - "dev": true - }, - "@types/webpack": { - "version": "4.41.18", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.18.tgz", - "integrity": "sha512-mQm2R8vV2BZE/qIDVYqmBVLfX73a8muwjs74SpjEyJWJxeXBbsI9L65Pcia9XfYLYWzD1c1V8m+L0p30y2N7MA==", - "dev": true, - "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "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 - } - } - }, - "@types/webpack-sources": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-1.4.0.tgz", - "integrity": "sha512-c88dKrpSle9BtTqR6ifdaxu1Lvjsl3C5OsfvuUbUwdXymshv1TkufUAXBajCCUM/f/TmnkZC/Esb03MinzSiXQ==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - }, - "dependencies": { - "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 - } - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "@zkochan/cmd-shim": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz", - "integrity": "sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg==", - "dev": true, - "requires": { - "is-windows": "^1.0.0", - "mkdirp-promise": "^5.0.1", - "mz": "^2.5.0" - } - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.0.0.tgz", - "integrity": "sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg==", - "dev": true - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=", - "dev": true - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "agentkeepalive": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", - "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", - "dev": true, - "requires": { - "humanize-ms": "^1.2.1" - } - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.0.tgz", - "integrity": "sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw==", - "dev": true - }, - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "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" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-differ": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz", - "integrity": "sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w==", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "atob-lite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", - "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", - "dev": true, - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "dev": true, - "requires": { - "debug": "=3.1.0" - } - }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - } - } - }, - "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "dev": true, - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", - "dev": true - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true - }, - "before-after-hook": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz", - "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==", - "dev": true - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", - "dev": true - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "blakejs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz", - "integrity": "sha1-ad+S75U6qIylGjLfarHFShVfx6U=", - "dev": true - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "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": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "brotli-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-0.1.0.tgz", - "integrity": "sha512-5ny7BNvpe2TSmdafF1T9dnFYp3AIrJ8qJt29K0DQJzORlK38LBim/CmlY26JtreV6SWmXza7Oa+9m61SzvxR0Q==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "iltorb": "^2.4.3" - } - }, - "browser-pack": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "combine-source-map": "~0.8.0", - "defined": "^1.0.0", - "safe-buffer": "^5.1.1", - "through2": "^2.0.0", - "umd": "^3.0.0" - } - }, - "browser-resolve": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", - "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", - "dev": true, - "requires": { - "resolve": "^1.17.0" - }, - "dependencies": { - "resolve": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", - "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", - "dev": true, - "requires": { - "is-core-module": "^2.0.0", - "path-parse": "^1.0.6" - } - } - } - }, - "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 - }, - "browserify": { - "version": "16.5.2", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.2.tgz", - "integrity": "sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g==", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "assert": "^1.4.0", - "browser-pack": "^6.0.1", - "browser-resolve": "^2.0.0", - "browserify-zlib": "~0.2.0", - "buffer": "~5.2.1", - "cached-path-relative": "^1.0.0", - "concat-stream": "^1.6.0", - "console-browserify": "^1.1.0", - "constants-browserify": "~1.0.0", - "crypto-browserify": "^3.0.0", - "defined": "^1.0.0", - "deps-sort": "^2.0.0", - "domain-browser": "^1.2.0", - "duplexer2": "~0.1.2", - "events": "^2.0.0", - "glob": "^7.1.0", - "has": "^1.0.0", - "htmlescape": "^1.1.0", - "https-browserify": "^1.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^7.0.0", - "labeled-stream-splicer": "^2.0.0", - "mkdirp-classic": "^0.5.2", - "module-deps": "^6.2.3", - "os-browserify": "~0.3.0", - "parents": "^1.0.1", - "path-browserify": "~0.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^2.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.1.4", - "shasum": "^1.0.0", - "shell-quote": "^1.6.1", - "stream-browserify": "^2.0.0", - "stream-http": "^3.0.0", - "string_decoder": "^1.1.1", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^2.0.0", - "timers-browserify": "^1.0.1", - "tty-browserify": "0.0.1", - "url": "~0.11.0", - "util": "~0.10.1", - "vm-browserify": "^1.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - } - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.14.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", - "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001135", - "electron-to-chromium": "^1.3.571", - "escalade": "^3.1.0", - "node-releases": "^1.1.61" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "dev": true, - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", - "dev": true - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "bufferutil": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.1.tgz", - "integrity": "sha512-xowrxvpxojqkagPcWRQVXZl0YXhRhAtBEIq3VoER1NH5Mw1n1o0ojdspp+GS2J//2gCVyrzQDApQ4unGF+QOoA==", - "dev": true, - "requires": { - "node-gyp-build": "~3.7.0" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "bundlesize": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/bundlesize/-/bundlesize-0.18.0.tgz", - "integrity": "sha512-GZURr25umfYxZYZUyOlOtJRbYjAn0VfbjbnS0NBcOiF8VcjmhoEhmx8Gw4va8HeQb8j7Ra0ZltY/IeHgSHFXFw==", - "dev": true, - "requires": { - "axios": "^0.19.0", - "brotli-size": "0.1.0", - "bytes": "^3.1.0", - "ci-env": "^1.4.0", - "commander": "^2.20.0", - "cosmiconfig": "^5.2.1", - "github-build": "^1.2.0", - "glob": "^7.1.4", - "gzip-size": "^4.0.0", - "prettycli": "^1.4.3" - }, - "dependencies": { - "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 - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - } - } - }, - "byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", - "dev": true - }, - "byte-size": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-5.0.1.tgz", - "integrity": "sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw==", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "cached-path-relative": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", - "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", - "dev": true - }, - "caching-transform": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", - "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", - "dev": true, - "requires": { - "hasha": "^3.0.0", - "make-dir": "^2.0.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.4.2" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } - } - }, - "caniuse-lite": { - "version": "1.0.30001150", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001150.tgz", - "integrity": "sha512-kiNKvihW0m36UhAFnl7bOAv0i1K1f6wpfVtTF5O5O82XzgtBnb05V0XeV3oZ968vfg2sRNChsHw8ASH2hDfoYQ==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "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" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "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-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - }, - "dependencies": { - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - } - } - }, - "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" - } - } - } - }, - "chownr": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-env": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/ci-env/-/ci-env-1.12.0.tgz", - "integrity": "sha512-4dS9YjX4kpaFmkJWZPuDPK3WlPKdMjx/3JH39vyHj+G4/ED2DCgHQLbh9tKBQjwAwR/sGHOqIVMTlMUZcfJPWw==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "dependencies": { - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "dev": true, - "requires": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", - "dev": true, - "requires": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" - } - }, - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "^7.1.1" - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.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 - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "columnify": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", - "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", - "dev": true, - "requires": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - } - }, - "combine-source-map": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", - "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", - "dev": true, - "requires": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" - }, - "dependencies": { - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true - } - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - }, - "dependencies": { - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - } - } - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "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 - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - } - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", - "dev": true, - "requires": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "conventional-changelog-angular": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.11.tgz", - "integrity": "sha512-nSLypht/1yEflhuTogC03i7DX7sOrXGsRn14g131Potqi6cbGbGEE9PSDEHKldabB6N76HiSyw9Ph+kLmC04Qw==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-changelog-core": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz", - "integrity": "sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ==", - "dev": true, - "requires": { - "conventional-changelog-writer": "^4.0.6", - "conventional-commits-parser": "^3.0.3", - "dateformat": "^3.0.0", - "get-pkg-repo": "^1.0.0", - "git-raw-commits": "2.0.0", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^2.0.3", - "lodash": "^4.2.1", - "normalize-package-data": "^2.3.5", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - } - } - }, - "conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true - }, - "conventional-changelog-writer": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.17.tgz", - "integrity": "sha512-IKQuK3bib/n032KWaSb8YlBFds+aLmzENtnKtxJy3+HqDq5kohu3g/UdNbIHeJWygfnEbZjnCKFxAW0y7ArZAw==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "conventional-commits-filter": "^2.0.6", - "dateformat": "^3.0.0", - "handlebars": "^4.7.6", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^7.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^3.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "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 - }, - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - } - } - }, - "conventional-commits-filter": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.6.tgz", - "integrity": "sha512-4g+sw8+KA50/Qwzfr0hL5k5NWxqtrOVw4DDk3/h6L85a9Gz0/Eqp3oP+CWCNfesBvZZZEFHF7OTEbRe+yYSyKw==", - "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.1.0.tgz", - "integrity": "sha512-RSo5S0WIwXZiRxUGTPuYFbqvrR4vpJ1BDdTlthFgvHt5kEdnd1+pdvwWphWn57/oIl4V72NMmOocFqqJ8mFFhA==", - "dev": true, - "requires": { - "JSONStream": "^1.0.4", - "is-text-path": "^1.0.1", - "lodash": "^4.17.15", - "meow": "^7.0.0", - "split2": "^2.0.0", - "through2": "^3.0.0", - "trim-off-newlines": "^1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - } - } - }, - "conventional-recommended-bump": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz", - "integrity": "sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ==", - "dev": true, - "requires": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.1.1", - "conventional-commits-filter": "^2.0.2", - "conventional-commits-parser": "^3.0.3", - "git-raw-commits": "2.0.0", - "git-semver-tags": "^2.0.3", - "meow": "^4.0.0", - "q": "^1.5.1" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - } - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", - "dev": true - }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", - "dev": true, - "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" - } - }, - "minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "dev": true, - "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - } - } - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "dev": true, - "requires": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } - } - }, - "cp-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", - "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^2.0.0", - "nested-error-stacks": "^2.0.0", - "pify": "^4.0.1", - "safe-buffer": "^5.0.1" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "crypto-js": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", - "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dargs": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", - "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "dash-ast": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", - "dev": true - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", - "dev": true - }, - "decache": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.0.tgz", - "integrity": "sha512-PppOuLiz+DFeaUvFXEYZjLxAkKiMYH/do/b/MxpDe/8AgKBi5GhZxridoVIbBq72GDbL36e4p0Ce2jTGUwwU+w==", - "dev": true, - "requires": { - "callsite": "^1.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - } - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "dependency-check": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/dependency-check/-/dependency-check-4.1.0.tgz", - "integrity": "sha512-nlw+PvhVQwg0gSNNlVUiuRv0765gah9pZEXdQlIFzeSnD85Eex0uM0bkrAWrHdeTzuMGZnR9daxkup/AqqgqzA==", - "dev": true, - "requires": { - "debug": "^4.0.0", - "detective": "^5.0.2", - "globby": "^10.0.1", - "is-relative": "^1.0.0", - "micromatch": "^4.0.2", - "minimist": "^1.2.0", - "pkg-up": "^3.1.0", - "read-package-json": "^2.0.10", - "resolve": "^1.1.7" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "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" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "fast-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.0.tgz", - "integrity": "sha512-TrUz3THiq2Vy3bjfQUB2wNyPdGBeGmdjbzzBLhfHN4YFurYptCKwGq/TfiRavbGywFRzY6U2CdmQ1zmsY5yYaw==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2" - } - }, - "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" - } - }, - "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - }, - "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 - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "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 - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "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" - } - } - } - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "deps-sort": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", - "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "shasum-object": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" - } - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", - "dev": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true - }, - "detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", - "dev": true, - "requires": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - } - }, - "dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - }, - "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } - } - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", - "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==", - "dev": true - }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true - } - } - }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", - "dev": true - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-prop": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", - "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.583", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.583.tgz", - "integrity": "sha512-L9BwLwJohjZW9mQESI79HRzhicPk1DFgM+8hOCfGgGCFEcA3Otpv7QK6SGtYoZvfQfE3wKLh0Hd5ptqUFv3gvQ==", - "dev": true - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "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, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "engine.io": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.2.tgz", - "integrity": "sha512-b4Q85dFkGw+TqgytGPrGgACRUhsdKc9S9ErRAXpPGy/CXKs4tYoHDkvIRdsseAF7NjfVwjRFIn6KTnbw7LwJZg==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "0.3.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "ws": "^7.1.2" - }, - "dependencies": { - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "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 - }, - "ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", - "dev": true - } - } - }, - "engine.io-client": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.4.tgz", - "integrity": "sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ==", - "dev": true, - "requires": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~6.1.0", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", - "dev": true - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", - "dev": true - }, - "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "dev": true - }, - "env-paths": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", - "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", - "dev": true - }, - "envinfo": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", - "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==", - "dev": true - }, - "err-code": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", - "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.50", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", - "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "^1.0.0" - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "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 - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", - "dev": true, - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - } - } - }, - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "ethereum-bloom-filters": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.6.tgz", - "integrity": "sha512-dE9CGNzgOOsdh7msZirvv8qjHtnHpvBlKe2647kM8v+yeF71IRso55jpojemvHV+jMjr48irPWxMRaHuOWzAFA==", - "dev": true, - "requires": { - "js-sha3": "^0.8.0" - }, - "dependencies": { - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true - } - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-common": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.3.2.tgz", - "integrity": "sha512-GkltYRIqBLzaZLmF/K3E+g9lZ4O4FL+TtpisAlD3N+UVlR+mrtoG+TvxavqVa6PwOY4nKIEMe5pl6MrTio3Lww==", - "dev": true - }, - "ethereumjs-tx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", - "dev": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "ethereumjs-common": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", - "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", - "dev": true - } - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "ethers": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.0.18.tgz", - "integrity": "sha512-WCiKGfAt09hBS1HZspu+JTgeunFcUCVRhCXO8X+VadBJGTRlG722XXib79Vz2oyBperz90CcjkBPdNly61Ah4A==", - "dev": true, - "requires": { - "@ethersproject/abi": "5.0.7", - "@ethersproject/abstract-provider": "5.0.5", - "@ethersproject/abstract-signer": "5.0.7", - "@ethersproject/address": "5.0.5", - "@ethersproject/base64": "5.0.4", - "@ethersproject/basex": "5.0.4", - "@ethersproject/bignumber": "5.0.8", - "@ethersproject/bytes": "5.0.5", - "@ethersproject/constants": "5.0.5", - "@ethersproject/contracts": "5.0.5", - "@ethersproject/hash": "5.0.6", - "@ethersproject/hdnode": "5.0.5", - "@ethersproject/json-wallets": "5.0.7", - "@ethersproject/keccak256": "5.0.4", - "@ethersproject/logger": "5.0.6", - "@ethersproject/networks": "5.0.4", - "@ethersproject/pbkdf2": "5.0.4", - "@ethersproject/properties": "5.0.4", - "@ethersproject/providers": "5.0.13", - "@ethersproject/random": "5.0.4", - "@ethersproject/rlp": "5.0.4", - "@ethersproject/sha2": "5.0.4", - "@ethersproject/signing-key": "5.0.5", - "@ethersproject/solidity": "5.0.5", - "@ethersproject/strings": "5.0.5", - "@ethersproject/transactions": "5.0.6", - "@ethersproject/units": "5.0.6", - "@ethersproject/wallet": "5.0.6", - "@ethersproject/web": "5.0.9", - "@ethersproject/wordlists": "5.0.5" - }, - "dependencies": { - "@ethersproject/address": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz", - "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/rlp": "^5.0.3", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/constants": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", - "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.0.7" - } - }, - "@ethersproject/hash": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.6.tgz", - "integrity": "sha512-Gvh57v6BWhwnud6l7tMfQm32PRQ2DYx2WaAAQmAxAfYvmzUkpQCBstnGeNMXIL8/2wdkvcB2u+WZRWaZtsFuUQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.0.6", - "@ethersproject/address": "^5.0.5", - "@ethersproject/bignumber": "^5.0.8", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.4", - "@ethersproject/strings": "^5.0.4" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", - "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==", - "dev": true - }, - "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz", - "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - } - }, - "@ethersproject/signing-key": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.5.tgz", - "integrity": "sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "elliptic": "6.5.3" - } - }, - "@ethersproject/transactions": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.6.tgz", - "integrity": "sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/rlp": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true - } - } - }, - "ethjs-signer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ethjs-signer/-/ethjs-signer-0.1.1.tgz", - "integrity": "sha1-Cvd5YeKe5FhgOqvTZguIaNM4ZEE=", - "dev": true, - "requires": { - "elliptic": "6.3.2", - "js-sha3": "0.5.5", - "number-to-bn": "1.1.0", - "rlp": "2.0.0", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "elliptic": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.2.tgz", - "integrity": "sha1-5MgeCCnPCmWrcOmYuCMnI7XBvEg=", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" - } - }, - "number-to-bn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.1.0.tgz", - "integrity": "sha1-UaM4fFvGgDWrQFjGJhMvdn2dCL8=", - "dev": true, - "requires": { - "bn.js": "4.11.6", - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "dev": true - } - } - }, - "rlp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.0.0.tgz", - "integrity": "sha1-nbOE/0uJqPYVY9kjldhiWxjzr7A=", - "dev": true - } - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "dev": true, - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "dev": true - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "dev": true, - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - } - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "events": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", - "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - } - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", - "dev": true - }, - "fastq": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", - "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", - "dev": true, - "requires": { - "reusify": "^1.0.0" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - } - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "foreground-child": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - } - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "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": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "ganache-cli": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.0.tgz", - "integrity": "sha512-WV354mOSCbVH+qR609ftpz/1zsZPRsHMaQ4jo9ioBQAkguYNVU5arfgIE0+0daU0Vl9WJ/OMhRyl0XRswd/j9A==", - "dev": true, - "requires": { - "ethereumjs-util": "6.2.1", - "source-map-support": "0.5.12", - "yargs": "13.2.4" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "bundled": true, - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "14.11.2", - "bundled": true, - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "ansi-regex": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "base-x": { - "version": "3.0.8", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "blakejs": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "bn.js": { - "version": "4.11.9", - "bundled": true, - "dev": true - }, - "brorand": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer-from": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "bundled": true, - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cliui": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "color-convert": { - "version": "1.9.3", - "bundled": true, - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "create-hash": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "bundled": true, - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "decamelize": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "elliptic": { - "version": "6.5.3", - "bundled": true, - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "bundled": true, - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "bundled": true, - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "ethjs-util": { - "version": "0.1.6", - "bundled": true, - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "bundled": true, - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "hash-base": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-hex-prefixed": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "keccak": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "lcid": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mem": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "bundled": true, - "dev": true - }, - "node-gyp-build": { - "version": "4.2.3", - "bundled": true, - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-locale": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "pbkdf2": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "pump": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "randombytes": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "ripemd160": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.6", - "bundled": true, - "dev": true, - "requires": { - "bn.js": "^4.11.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "bundled": true, - "dev": true - }, - "scrypt-js": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "secp256k1": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "bundled": true, - "dev": true - }, - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - }, - "source-map-support": { - "version": "0.5.12", - "bundled": true, - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "string-width": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "strip-hex-prefix": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "which": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "y18n": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "yargs": { - "version": "13.2.4", - "bundled": true, - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" - } - }, - "yargs-parser": { - "version": "13.1.2", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "genfun": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", - "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true - }, - "get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-pkg-repo": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", - "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "meow": "^3.3.0", - "normalize-package-data": "^2.3.0", - "parse-github-repo-url": "^1.3.0", - "through2": "^2.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - } - } - }, - "get-port": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", - "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "git-raw-commits": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz", - "integrity": "sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==", - "dev": true, - "requires": { - "dargs": "^4.0.1", - "lodash.template": "^4.0.2", - "meow": "^4.0.0", - "split2": "^2.0.0", - "through2": "^2.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", - "dev": true - }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", - "dev": true, - "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" - } - }, - "minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "dev": true, - "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - } - } - }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", - "dev": true, - "requires": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "git-semver-tags": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.3.tgz", - "integrity": "sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA==", - "dev": true, - "requires": { - "meow": "^4.0.0", - "semver": "^6.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", - "dev": true - }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", - "dev": true, - "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" - } - }, - "minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "dev": true, - "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - } - } - }, - "git-up": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.2.tgz", - "integrity": "sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "parse-url": "^5.0.0" - } - }, - "git-url-parse": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.4.0.tgz", - "integrity": "sha512-KlIa5jvMYLjXMQXkqpFzobsyD/V2K5DRHl5OAf+6oDFPlPLxrGDVQlIdI63c4/Kt6kai4kALENSALlzTGST3GQ==", - "dev": true, - "requires": { - "git-up": "^4.0.0" - } - }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", - "dev": true, - "requires": { - "ini": "^1.3.2" - } - }, - "github-build": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/github-build/-/github-build-1.2.1.tgz", - "integrity": "sha512-VAT4NFU8hm9Ks5yNKuuczD2zMbmouAKHtxtwvmCj34Q2DpZsjgp3LLjtrKlm/YvGSzSNGmj22ccJQQei+f/vIw==", - "dev": true, - "requires": { - "axios": "0.19.0" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "dev": true - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "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": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - }, - "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "dev": true - } - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "gzip-size": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-4.1.0.tgz", - "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.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 - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "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-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "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 - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hasha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", - "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", - "dev": true, - "requires": { - "is-stream": "^1.0.1" - } - }, - "hat": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz", - "integrity": "sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo=", - "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 - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "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 - }, - "htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "dev": true - }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "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-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "dev": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "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 - } - } - }, - "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.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "dev": true, - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", - "dev": true - } - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - }, - "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "iltorb": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-2.4.4.tgz", - "integrity": "sha512-7Qk6O7TK3rSWVRVRkPehcNTSN+P2i7MsG9pWmw6iVw/W6NcoNj0rFKOuBDM6fbZV6NNGuUW3JBRem6Ozn4KXhg==", - "dev": true, - "requires": { - "detect-libc": "^1.0.3", - "nan": "^2.14.0", - "npmlog": "^4.1.2", - "prebuild-install": "^5.3.2", - "which-pm-runs": "^1.0.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.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 - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "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.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "init-package-json": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz", - "integrity": "sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==", - "dev": true, - "requires": { - "glob": "^7.1.1", - "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "1 || 2", - "semver": "2.x || 3.x || 4 || 5", - "validate-npm-package-license": "^3.0.1", - "validate-npm-package-name": "^3.0.0" - } - }, - "inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", - "dev": true, - "requires": { - "source-map": "~0.5.3" - } - }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } - } - } - } - }, - "insert-module-globals": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", - "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "acorn-node": "^1.5.2", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "undeclared-identifiers": "^1.1.2", - "xtend": "^4.0.0" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", - "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "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-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true - }, - "is-path-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz", - "integrity": "sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true - }, - "is-ssh": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.2.tgz", - "integrity": "sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ==", - "dev": true, - "requires": { - "protocols": "^1.1.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", - "dev": true, - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", - "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", - "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 - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0" - } - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "js-sha3": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", - "integrity": "sha1-uvDA6MVK1ZA0R9+Wreekobynmko=", - "dev": true - }, - "js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", - "dev": true - }, - "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": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "jshint": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.12.0.tgz", - "integrity": "sha512-TwuuaUDmra0JMkuqvqy+WGo2xGHSNjv1BA1nTIgtH2K5z1jHuAEeAgp7laaR+hLRmajRjcrM71+vByBDanCyYA==", - "dev": true, - "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.19", - "minimatch": "~3.0.2", - "shelljs": "0.3.x", - "strip-json-comments": "1.0.x" - }, - "dependencies": { - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - } - } - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "karma": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/karma/-/karma-5.2.3.tgz", - "integrity": "sha512-tHdyFADhVVPBorIKCX8A37iLHxc6RBRphkSoQ+MLKdAtFn1k97tD8WUGi1KlEtDZKL3hui0qhsY9HXUfSNDYPQ==", - "dev": true, - "requires": { - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.4.2", - "colors": "^1.4.0", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.6", - "graceful-fs": "^4.2.4", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.6", - "lodash": "^4.17.19", - "log4js": "^6.2.1", - "mime": "^2.4.5", - "minimatch": "^3.0.4", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^2.3.0", - "source-map": "^0.6.1", - "tmp": "0.2.1", - "ua-parser-js": "0.7.22", - "yargs": "^15.3.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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" - } - }, - "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" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.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 - }, - "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 - }, - "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": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "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.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "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-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true - }, - "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 - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "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" - } - }, - "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 - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "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" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "karma-browserify": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/karma-browserify/-/karma-browserify-7.0.0.tgz", - "integrity": "sha512-SLgh1dmF2eZEj3glrmTD2CMJRGZwEiKA6k2hBr2+2JDC4JMU1dlsvBKpV66Lvi/tbj3H9qA+Vl/FdIcfPRrJpA==", - "dev": true, - "requires": { - "convert-source-map": "^1.1.3", - "hat": "^0.0.3", - "js-string-escape": "^1.0.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.0", - "os-shim": "^0.1.3" - } - }, - "karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", - "dev": true, - "requires": { - "which": "^1.2.1" - } - }, - "karma-firefox-launcher": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.3.0.tgz", - "integrity": "sha512-Fi7xPhwrRgr+94BnHX0F5dCl1miIW4RHnzjIGxF8GaIEp7rNqX7LSi7ok63VXs3PS/5MQaQMhGxw+bvD+pibBQ==", - "dev": true, - "requires": { - "is-wsl": "^2.1.0" - } - }, - "karma-mocha": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz", - "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==", - "dev": true, - "requires": { - "minimist": "^1.2.3" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } - } - }, - "karma-spec-reporter": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.32.tgz", - "integrity": "sha1-LpxyB+pyZ3EmAln4K+y1QyCeRAo=", - "dev": true, - "requires": { - "colors": "^1.1.2" - } - }, - "keccak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", - "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "dependencies": { - "node-gyp-build": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", - "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==", - "dev": true - } - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "labeled-stream-splicer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", - "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "stream-splicer": "^2.0.0" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "lerna": { - "version": "3.22.1", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.22.1.tgz", - "integrity": "sha512-vk1lfVRFm+UuEFA7wkLKeSF7Iz13W+N/vFd48aW2yuS7Kv0RbNm2/qcDPV863056LMfkRlsEe+QYOw3palj5Lg==", - "dev": true, - "requires": { - "@lerna/add": "3.21.0", - "@lerna/bootstrap": "3.21.0", - "@lerna/changed": "3.21.0", - "@lerna/clean": "3.21.0", - "@lerna/cli": "3.18.5", - "@lerna/create": "3.22.0", - "@lerna/diff": "3.21.0", - "@lerna/exec": "3.21.0", - "@lerna/import": "3.22.0", - "@lerna/info": "3.21.0", - "@lerna/init": "3.21.0", - "@lerna/link": "3.21.0", - "@lerna/list": "3.21.0", - "@lerna/publish": "3.22.1", - "@lerna/run": "3.21.0", - "@lerna/version": "3.22.1", - "import-local": "^2.0.0", - "npmlog": "^4.1.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", - "dev": true - }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", - "dev": true - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", - "dev": true, - "requires": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "macos-release": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.4.1.tgz", - "integrity": "sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg==", - "dev": true - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "make-fetch-happen": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", - "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", - "dev": true, - "requires": { - "agentkeepalive": "^3.4.1", - "cacache": "^12.0.0", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" - }, - "dependencies": { - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", - "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true - }, - "meow": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", - "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^2.5.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.13.1", - "yargs-parser": "^18.1.3" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "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 - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "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 - } - } - }, - "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "requires": { - "mime-db": "1.40.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "dev": true, - "requires": { - "mkdirp": "*" - } - }, - "mocha": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", - "dev": true, - "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.4", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "mock-fs": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.12.0.tgz", - "integrity": "sha512-/P/HtrlvBxY4o/PzXY9cCNBrdylDNxg7gnrv2sMNxj+UJ2m8jSpl0/A6fuJeNAWr99ZvGWH8XCbE0vmnM5KupQ==", - "dev": true - }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, - "module-deps": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", - "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "browser-resolve": "^2.0.0", - "cached-path-relative": "^1.0.2", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.2.0", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.4.0", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "dev": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - }, - "dependencies": { - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - } - } - }, - "multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "dev": true, - "requires": { - "varint": "^5.0.0" - } - }, - "multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - }, - "dependencies": { - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "dev": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - } - } - }, - "multimatch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz", - "integrity": "sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA==", - "dev": true, - "requires": { - "array-differ": "^2.0.3", - "array-union": "^1.0.2", - "arrify": "^1.0.1", - "minimatch": "^3.0.4" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "napi-build-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", - "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-abi": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.13.0.tgz", - "integrity": "sha512-9HrZGFVTR5SOu3PZAnAY2hLO36aW1wmA+FDsVkr85BTST32TLCA1H/AEcatVRAsWLyXS3bqUDYCAjq5/QGuSTA==", - "dev": true, - "requires": { - "semver": "^5.4.1" - } - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - }, - "node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", - "dev": true, - "requires": { - "lodash.toarray": "^4.4.0" - } - }, - "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true - }, - "node-fetch-npm": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz", - "integrity": "sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node-gyp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz", - "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.1.2", - "request": "^2.88.0", - "rimraf": "^2.6.3", - "semver": "^5.7.1", - "tar": "^4.4.12", - "which": "^1.3.1" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "node-gyp-build": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.7.0.tgz", - "integrity": "sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", - "dev": true - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - } - } - }, - "node-releases": { - "version": "1.1.64", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.64.tgz", - "integrity": "sha512-Iec8O9166/x2HRMJyLLLWkd0sFFLrFNy+Xf+JQfSQsdBJzPcHpNl3JQ9gD4j+aJxmCa25jNsIbM4bmACtSbkSg==", - "dev": true - }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", - "dev": true - }, - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "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 - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true - }, - "npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-lifecycle": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz", - "integrity": "sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==", - "dev": true, - "requires": { - "byline": "^5.0.0", - "graceful-fs": "^4.1.15", - "node-gyp": "^5.0.2", - "resolve-from": "^4.0.0", - "slide": "^1.1.6", - "uid-number": "0.0.6", - "umask": "^1.1.0", - "which": "^1.3.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", - "dev": true, - "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "dev": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", - "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.0.0", - "semver": "^5.4.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "dev": true, - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "dev": true - } - } - }, - "nyc": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", - "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "caching-transform": "^3.0.2", - "convert-source-map": "^1.6.0", - "cp-file": "^6.2.0", - "find-cache-dir": "^2.1.0", - "find-up": "^3.0.0", - "foreground-child": "^1.5.6", - "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.5", - "istanbul-lib-hook": "^2.0.7", - "istanbul-lib-instrument": "^3.3.0", - "istanbul-lib-report": "^2.0.8", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.4", - "js-yaml": "^3.13.1", - "make-dir": "^2.1.0", - "merge-source-map": "^1.1.0", - "resolve-from": "^4.0.0", - "rimraf": "^2.6.3", - "signal-exit": "^3.0.2", - "spawn-wrap": "^1.4.2", - "test-exclude": "^5.2.3", - "uuid": "^3.3.2", - "yargs": "^13.2.2", - "yargs-parser": "^13.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "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 - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", - "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "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 - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "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 - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - } - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - } - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "octokit-pagination-methods": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", - "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "os-name": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", - "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", - "dev": true, - "requires": { - "macos-release": "^2.2.0", - "windows-release": "^3.1.0" - } - }, - "os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "p-map-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", - "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-pipe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", - "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", - "dev": true - }, - "p-queue": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-4.0.0.tgz", - "integrity": "sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg==", - "dev": true, - "requires": { - "eventemitter3": "^3.1.0" - }, - "dependencies": { - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", - "dev": true - } - } - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "p-waterfall": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-1.0.0.tgz", - "integrity": "sha1-ftlLPOszMngjU69qrhGqn8I1uwA=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "package-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", - "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dev": true, - "requires": { - "path-platform": "~0.11.15" - } - }, - "parse-asn1": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", - "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-github-repo-url": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", - "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=", - "dev": true - }, - "parse-headers": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", - "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", - "dev": true, - "requires": { - "for-each": "^0.3.3", - "string.prototype.trim": "^1.1.2" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse-path": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.2.tgz", - "integrity": "sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "protocols": "^1.4.0" - } - }, - "parse-url": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.2.tgz", - "integrity": "sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "normalize-url": "^3.3.0", - "parse-path": "^4.0.0", - "protocols": "^1.4.0" - }, - "dependencies": { - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true - } - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "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-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", - "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prebuild-install": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz", - "integrity": "sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==", - "dev": true, - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dev": true, - "requires": { - "mimic-response": "^2.0.0" - } - }, - "mimic-response": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.0.0.tgz", - "integrity": "sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dev": true, - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - } - } - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "prettycli": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/prettycli/-/prettycli-1.4.3.tgz", - "integrity": "sha512-KLiwAXXfSWXZqGmZlnKPuGMTFp+0QbcySplL1ft9gfteT/BNsG64Xo8u2Qr9r+qnsIZWBQ66Zs8tg+8s2fmzvw==", - "dev": true, - "requires": { - "chalk": "2.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.1.0", - "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } - } - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "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": "1.1.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", - "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", - "dev": true, - "requires": { - "err-code": "^1.0.0", - "retry": "^0.10.0" - } - }, - "promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", - "dev": true, - "requires": { - "read": "1" - } - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true - }, - "protocols": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", - "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", - "dev": true - }, - "protoduck": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", - "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", - "dev": true, - "requires": { - "genfun": "^5.0.0" - } - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.1.32", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz", - "integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, - "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" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz", - "integrity": "sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "read-package-json": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.0.tgz", - "integrity": "sha512-KLhu8M1ZZNkMcrq1+0UJbR8Dii8KZUqB0Sha4mOx/bknfKI/fyrQVrG/YIt2UOtG667sD8+ee4EXMM91W9dC+A==", - "dev": true, - "requires": { - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "json-parse-better-errors": "^1.0.1", - "normalize-package-data": "^2.0.0", - "slash": "^1.0.0" - } - }, - "read-package-tree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", - "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", - "dev": true, - "requires": { - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "util-promisify": "^2.1.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true, - "optional": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "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 - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - }, - "require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", - "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", - "dev": true - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz", - "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==", - "dev": true, - "requires": { - "bn.js": "^4.11.1" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "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 - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sandboxed-module": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sandboxed-module/-/sandboxed-module-2.0.4.tgz", - "integrity": "sha512-AwEPOdO8mg/wJjr876yCHP2DHqVN0MaggEXhp6IIf3bcI5cYoQl9QrrCHSrvToHjvdEiS5x4TVZRgjD2bEmNTA==", - "dev": true, - "requires": { - "require-like": "0.1.2", - "stack-trace": "0.0.9" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": 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 - }, - "secp256k1": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.2.tgz", - "integrity": "sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==", - "dev": true, - "requires": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "dependencies": { - "node-gyp-build": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", - "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==", - "dev": true - } - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "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" - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dev": true, - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "dev": true, - "requires": { - "json-stable-stringify": "~0.0.0", - "sha.js": "~2.4.4" - } - }, - "shasum-object": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", - "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", - "dev": true, - "requires": { - "fast-safe-stringify": "^2.0.7" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", - "dev": true - }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", - "dev": true - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "dev": true, - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true - }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "socket.io": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz", - "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==", - "dev": true, - "requires": { - "debug": "~4.1.0", - "engine.io": "~3.4.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.3.0", - "socket.io-parser": "~3.4.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "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 - } - } - }, - "socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", - "dev": true - }, - "socket.io-client": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", - "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "engine.io-client": "~3.4.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "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 - }, - "socket.io-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.1.tgz", - "integrity": "sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ==", - "dev": true, - "requires": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - } - } - }, - "socket.io-parser": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", - "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "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 - } - } - }, - "socks": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", - "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", - "dev": true, - "requires": { - "ip": "1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", - "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", - "dev": true, - "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" - }, - "dependencies": { - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - } - } - }, - "solc": { - "version": "0.4.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", - "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", - "dev": true, - "requires": { - "fs-extra": "^0.30.0", - "memorystream": "^0.3.1", - "require-from-string": "^1.1.0", - "semver": "^5.3.0", - "yargs": "^4.7.1" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", - "dev": true, - "requires": { - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.1", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" - } - }, - "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } - } - } - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "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 - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spawn-wrap": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", - "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "split2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", - "dev": true, - "requires": { - "through2": "^2.0.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stack-trace": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", - "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true, - "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", - "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - } - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "stream-splicer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", - "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, - "streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", - "dev": true, - "requires": { - "date-format": "^2.1.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "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 - } - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string.prototype.trim": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz", - "integrity": "sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.13.0", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", - "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - } - } - }, - "string.prototype.trimstart": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", - "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - } - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true - }, - "strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - } - }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dev": true, - "requires": { - "minimist": "^1.1.0" - } - }, - "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" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - } - } - }, - "swarm-js": { - "version": "0.1.40", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", - "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", - "dev": true, - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - }, - "dependencies": { - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "dev": true, - "requires": { - "acorn-node": "^1.2.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - }, - "dependencies": { - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - } - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - } - } - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", - "dev": true - }, - "temp-write": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz", - "integrity": "sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "is-stream": "^1.1.0", - "make-dir": "^1.0.0", - "pify": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "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 - }, - "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 - } - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "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 - } - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "testrpc": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", - "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", - "dev": true - }, - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true - }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dev": true, - "requires": { - "process": "~0.11.0" - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - }, - "dependencies": { - "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" - } - } - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "trim-newlines": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", - "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", - "dev": true - }, - "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", - "dev": true - }, - "ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/type/-/type-1.0.1.tgz", - "integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw==", - "dev": true - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.22", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", - "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==", - "dev": true - }, - "uglify-js": { - "version": "3.11.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.3.tgz", - "integrity": "sha512-wDRziHG94mNj2n3R864CvYw/+pc9y/RNImiTyrrf8BzgWn75JgFSwYvXrtZQMnMnOp/4UTrf3iCSQxSStPiByA==", - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "dev": true - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "umask": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", - "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", - "dev": true - }, - "umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "dev": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "undeclared-identifiers": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", - "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", - "dev": true, - "requires": { - "acorn-node": "^1.3.0", - "dash-ast": "^1.0.0", - "get-assigned-identifiers": "^1.2.0", - "simple-concat": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "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" - } - }, - "universal-user-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.1.tgz", - "integrity": "sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==", - "dev": true, - "requires": { - "os-name": "^3.1.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=", - "dev": true - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "utf-8-validate": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.2.tgz", - "integrity": "sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw==", - "dev": true, - "requires": { - "node-gyp-build": "~3.7.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util-promisify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", - "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - }, - "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" - } - }, - "varint": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.0.tgz", - "integrity": "sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8=", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "wait-port": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-0.2.9.tgz", - "integrity": "sha512-hQ/cVKsNqGZ/UbZB/oakOGFqic00YAMM5/PEj3Bt4vKarv2jWIWzDbqlwT94qMs/exAQAsvMOq99sZblV92zxQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "commander": "^3.0.2", - "debug": "^4.1.1" - }, - "dependencies": { - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } - } - }, - "watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" - } - }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - } - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "web3": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.11.tgz", - "integrity": "sha512-mjQ8HeU41G6hgOYm1pmeH0mRAeNKJGnJEUzDMoerkpw7QUQT4exVREgF1MYPvL/z6vAshOXei25LE/t/Bxl8yQ==", - "dev": true, - "requires": { - "web3-bzz": "1.2.11", - "web3-core": "1.2.11", - "web3-eth": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-shh": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "web3-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", - "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } - } - }, - "web3-bzz": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.11.tgz", - "integrity": "sha512-XGpWUEElGypBjeFyUhTkiPXFbDVD6Nr/S5jznE3t8cWUA0FxRf1n3n/NuIZeb0H9RkN2Ctd/jNma/k8XGa3YKg==", - "dev": true, - "requires": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - } - }, - "web3-core": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.11.tgz", - "integrity": "sha512-CN7MEYOY5ryo5iVleIWRE3a3cZqVaLlIbIzDPsvQRUfzYnvzZQRZBm9Mq+ttDi2STOOzc1MKylspz/o3yq/LjQ==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.5", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-requestmanager": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "web3-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", - "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } - } - }, - "web3-core-helpers": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz", - "integrity": "sha512-PEPoAoZd5ME7UfbnCZBdzIerpe74GEvlwT4AjOmHeCVZoIFk7EqvOZDejJHt+feJA6kMVTdd0xzRNN295UhC1A==", - "dev": true, - "requires": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "web3-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", - "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } - } - }, - "web3-core-method": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.11.tgz", - "integrity": "sha512-ff0q76Cde94HAxLDZ6DbdmKniYCQVtvuaYh+rtOUMB6kssa5FX0q3vPmixi7NPooFnbKmmZCM6NvXg4IreTPIw==", - "dev": true, - "requires": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "web3-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", - "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } - } - }, - "web3-core-promievent": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.11.tgz", - "integrity": "sha512-il4McoDa/Ox9Agh4kyfQ8Ak/9ABYpnF8poBLL33R/EnxLsJOGQG2nZhkJa3I067hocrPSjEdlPt/0bHXsln4qA==", - "dev": true, - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-core-requestmanager": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz", - "integrity": "sha512-oFhBtLfOiIbmfl6T6gYjjj9igOvtyxJ+fjS+byRxiwFJyJ5BQOz4/9/17gWR1Cq74paTlI7vDGxYfuvfE/mKvA==", - "dev": true, - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-providers-http": "1.2.11", - "web3-providers-ipc": "1.2.11", - "web3-providers-ws": "1.2.11" - } - }, - "web3-core-subscriptions": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.11.tgz", - "integrity": "sha512-qEF/OVqkCvQ7MPs1JylIZCZkin0aKK9lDxpAtQ1F8niEDGFqn7DT8E/vzbIa0GsOjL2fZjDhWJsaW+BSoAW1gg==", - "dev": true, - "requires": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - } - }, - "web3-eth": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.11.tgz", - "integrity": "sha512-REvxW1wJ58AgHPcXPJOL49d1K/dPmuw4LjPLBPStOVkQjzDTVmJEIsiLwn2YeuNDd4pfakBwT8L3bz1G1/wVsQ==", - "dev": true, - "requires": { - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-accounts": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-eth-ens": "1.2.11", - "web3-eth-iban": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "web3-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", - "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } - } - }, - "web3-eth-abi": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz", - "integrity": "sha512-PkRYc0+MjuLSgg03QVWqWlQivJqRwKItKtEpRUaxUAeLE7i/uU39gmzm2keHGcQXo3POXAbOnMqkDvOep89Crg==", - "dev": true, - "requires": { - "@ethersproject/abi": "5.0.0-beta.153", - "underscore": "1.9.1", - "web3-utils": "1.2.11" - }, - "dependencies": { - "@ethersproject/abi": { - "version": "5.0.0-beta.153", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz", - "integrity": "sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg==", - "dev": true, - "requires": { - "@ethersproject/address": ">=5.0.0-beta.128", - "@ethersproject/bignumber": ">=5.0.0-beta.130", - "@ethersproject/bytes": ">=5.0.0-beta.129", - "@ethersproject/constants": ">=5.0.0-beta.128", - "@ethersproject/hash": ">=5.0.0-beta.128", - "@ethersproject/keccak256": ">=5.0.0-beta.127", - "@ethersproject/logger": ">=5.0.0-beta.129", - "@ethersproject/properties": ">=5.0.0-beta.131", - "@ethersproject/strings": ">=5.0.0-beta.130" - } - }, - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "web3-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", - "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } - } - }, - "web3-eth-accounts": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.11.tgz", - "integrity": "sha512-6FwPqEpCfKIh3nSSGeo3uBm2iFSnFJDfwL3oS9pyegRBXNsGRVpgiW63yhNzL0796StsvjHWwQnQHsZNxWAkGw==", - "dev": true, - "requires": { - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "web3-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", - "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } - } - }, - "web3-eth-contract": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.11.tgz", - "integrity": "sha512-MzYuI/Rq2o6gn7vCGcnQgco63isPNK5lMAan2E51AJLknjSLnOxwNY3gM8BcKoy4Z+v5Dv00a03Xuk78JowFow==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.5", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "web3-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", - "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } - } - }, - "web3-eth-ens": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.11.tgz", - "integrity": "sha512-dbW7dXP6HqT1EAPvnniZVnmw6TmQEKF6/1KgAxbo8iBBYrVTMDGFQUUnZ+C4VETGrwwaqtX4L9d/FrQhZ6SUiA==", - "dev": true, - "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "web3-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", - "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } - } - }, - "web3-eth-iban": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.11.tgz", - "integrity": "sha512-ozuVlZ5jwFC2hJY4+fH9pIcuH1xP0HEFhtWsR69u9uDIANHLPQQtWYmdj7xQ3p2YT4bQLq/axKhZi7EZVetmxQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "web3-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", - "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } - } - }, - "web3-eth-personal": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.11.tgz", - "integrity": "sha512-42IzUtKq9iHZ8K9VN0vAI50iSU9tOA1V7XU2BhF/tb7We2iKBVdkley2fg26TxlOcKNEHm7o6HRtiiFsVK4Ifw==", - "dev": true, - "requires": { - "@types/node": "^12.12.6", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "web3-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", - "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } - } - }, - "web3-net": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.11.tgz", - "integrity": "sha512-sjrSDj0pTfZouR5BSTItCuZ5K/oZPVdVciPQ6981PPPIwJJkCMeVjD7I4zO3qDPCnBjBSbWvVnLdwqUBPtHxyg==", - "dev": true, - "requires": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "web3-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", - "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } - } - }, - "web3-providers-http": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.11.tgz", - "integrity": "sha512-psh4hYGb1+ijWywfwpB2cvvOIMISlR44F/rJtYkRmQ5jMvG4FOCPlQJPiHQZo+2cc3HbktvvSJzIhkWQJdmvrA==", - "dev": true, - "requires": { - "web3-core-helpers": "1.2.11", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz", - "integrity": "sha512-yhc7Y/k8hBV/KlELxynWjJDzmgDEDjIjBzXK+e0rHBsYEhdCNdIH5Psa456c+l0qTEU2YzycF8VAjYpWfPnBpQ==", - "dev": true, - "requires": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - }, - "dependencies": { - "oboe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", - "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", - "dev": true, - "requires": { - "http-https": "^1.0.0" - } - } - } - }, - "web3-providers-ws": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.11.tgz", - "integrity": "sha512-ZxnjIY1Er8Ty+cE4migzr43zA/+72AF1myzsLaU5eVgdsfV7Jqx7Dix1hbevNZDKFlSoEyq/3j/jYalh3So1Zg==", - "dev": true, - "requires": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "websocket": "^1.0.31" - } - }, - "web3-shh": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.11.tgz", - "integrity": "sha512-B3OrO3oG1L+bv3E1sTwCx66injW1A8hhwpknDUbV+sw3fehFazA06z9SGXUefuFI1kVs4q2vRi0n4oCcI4dZDg==", - "dev": true, - "requires": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-net": "1.2.11" - } - }, - "web3-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.3.0.tgz", - "integrity": "sha512-2mS5axFCbkhicmoDRuJeuo0TVGQDgC2sPi/5dblfVC+PMtX0efrb8Xlttv/eGkq7X4E83Pds34FH98TP2WOUZA==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "webpack-cli": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", - "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "enhanced-resolve": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz", - "integrity": "sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "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 - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "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 - } - } - }, - "websocket": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.32.tgz", - "integrity": "sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q==", - "dev": true, - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", - "dev": true - }, - "windows-release": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.3.tgz", - "integrity": "sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg==", - "dev": true, - "requires": { - "execa": "^1.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "requires": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - } - }, - "write-pkg": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-3.2.0.tgz", - "integrity": "sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw==", - "dev": true, - "requires": { - "sort-keys": "^2.0.0", - "write-json-file": "^2.2.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "write-json-file": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz", - "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=", - "dev": true, - "requires": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "pify": "^3.0.0", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.0.0" - } - } - } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "dev": true, - "requires": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dev": true, - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "xhr-request-promise": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", - "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", - "dev": true, - "requires": { - "xhr-request": "^1.0.1" - } - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", - "dev": true, - "requires": { - "cookiejar": "^2.1.1" - } - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "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 - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } - } - }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } - } -} diff --git a/package.json b/package.json index c36ec2338b5..c136d147f66 100644 --- a/package.json +++ b/package.json @@ -1,142 +1,135 @@ { - "name": "web3.js", - "private": true, - "description": "Ethereum JavaScript API wrapper repository", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "main": "./packages/web3/src/index.js", - "bundlesize": [ - { - "path": "./packages/web3/dist/web3.min.js", - "maxSize": "1.5 mB", - "compression": "none" - } - ], - "scripts": { - "version": "npm run build", - "postinstall": "npm run bootstrap", - "build": "npm run bootstrap && lerna run tsc && webpack && cp -r ./dist ./packages/web3", - "publish": "lerna publish", - "bootstrap": "lerna bootstrap --hoist", - "lint": "jshint *.js packages", - "test": "mocha -R spec --require ts-node/register --grep E2E --invert", - "test:unit": "nyc --no-clean --silent _mocha -- -R spec --require ts-node/register --grep E2E --invert --exit", - "test:cov": "npm run cov:clean; npm run test:unit; npm run test:e2e:clients; npm run cov:merge_reports", - "dtslint": "lerna run dtslint", - "depcheck": "lerna exec dependency-check -- --missing --verbose .", - "bundlesize": "bundlesize || true", - "geth": "geth-dev-assistant --accounts 5 --tag stable --gasLimit 7000000", - "test:e2e:ganache": "./scripts/e2e.ganache.sh", - "test:e2e:geth:auto": "./scripts/e2e.geth.automine.sh", - "test:e2e:geth:insta": "./scripts/e2e.geth.instamine.sh", - "test:e2e:clients": "npm run test:e2e:ganache; npm run test:e2e:geth:insta; npm run test:e2e:geth:auto", - "test:e2e:chrome": "./scripts/e2e.chrome.sh", - "test:e2e:firefox": "./scripts/e2e.firefox.sh", - "test:e2e:min": "./scripts/e2e.min.sh", - "test:e2e:cdn": "./scripts/e2e.cdn.sh", - "test:e2e:browsers": "npm run build; npm run test:e2e:chrome; npm run test:e2e:firefox", - "test:e2e:publish": "./scripts/e2e.npm.publish.sh", - "test:e2e:truffle": "./scripts/e2e.truffle.sh", - "test:e2e:mosaic": "./scripts/e2e.mosaic.sh", - "test:e2e:ganache:core": "./scripts/e2e.ganache.core.sh", - "test:e2e:gnosis:dex": "./scripts/e2e.gnosis.dex.sh", - "ci": "./scripts/ci.sh", - "cov:clean": "rm -rf .nyc_output; rm -rf coverage", - "cov:merge_reports": "nyc report --reporter=lcov --reporter=html" - }, - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js.git" - }, - "homepage": "https://github.com/ethereum/web3.js", - "bugs": { - "url": "https://github.com/ethereum/web3.js/issues" - }, - "keywords": [ - "Ethereum", - "JavaScript", - "API" - ], - "author": "ethereum.org", - "authors": [ - { - "name": "Fabian Vogelsteller", - "email": "fabian@ethereum.org", - "homepage": "https://github.com/frozeman" - }, - { - "name": "Marek Kotewicz", - "email": "marek@parity.io", - "url": "https://github.com/debris" - }, - { - "name": "Marian Oancea", - "url": "https://github.com/cubedro" - }, - { - "name": "Gav Wood", - "email": "g@parity.io", - "homepage": "http://gavwood.com" - }, - { - "name": "Jeffery Wilcke", - "email": "jeffrey.wilcke@ethereum.org", - "url": "https://github.com/obscuren" - } - ], - "devDependencies": { - "@babel/cli": "^7.12.1", - "@babel/core": "^7.12.3", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-runtime": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-typescript": "^7.12.1", - "@babel/runtime": "^7.12.1", - "@chainsafe/geth-dev-assistant": "^0.1.5", - "@ensdomains/ens": "^0.4.5", - "@ensdomains/resolver": "^0.2.4", - "@types/bignumber.js": "^4.0.2", - "@types/bn.js": "^4.11.6", - "@types/node": "^12.12.68", - "@types/underscore": "^1.10.24", - "babel-loader": "^8.1.0", - "bignumber.js": "^9.0.1", - "bn.js": "^4.11.9", - "browserify": "^16.5.2", - "buffer": "^4.9.2", - "bundlesize": "^0.18.0", - "chai": "^4.2.0", - "clean-webpack-plugin": "^3.0.0", - "core-js": "^3.6.5", - "crypto-js": "^3.3.0", - "decache": "^4.6.0", - "dependency-check": "^4.1.0", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.2", - "ethers": "^5.0.18", - "ethjs-signer": "^0.1.1", - "ganache-cli": "^6.12.0", - "jshint": "^2.12.0", - "karma": "^5.2.3", - "karma-browserify": "^7.0.0", - "karma-chrome-launcher": "^3.1.0", - "karma-firefox-launcher": "^1.3.0", - "karma-mocha": "^2.0.1", - "karma-spec-reporter": "0.0.32", - "lerna": "^3.22.1", - "mocha": "^6.2.3", - "nyc": "^14.1.1", - "pify": "^4.0.1", - "sandboxed-module": "^2.0.4", - "ts-node": "^8.10.2", - "typescript": "^3.9.7", - "underscore": "1.9.1", - "wait-port": "^0.2.9", - "webpack": "^4.44.2", - "webpack-cli": "^3.3.12" - }, - "dependencies": {} + "name": "web3.js", + "private": true, + "description": "Ethereum API wrappers and utilities", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "keywords": [ + "ethereum", + "eth", + "web3", + "web3js", + "web3.js", + "blockchain" + ], + "homepage": "https://github.com/ChainSafe/web3.js#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/ChainSafe/web3.js.git" + }, + "bugs": { + "url": "https://github.com/ChainSafe/web3.js/issues" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "workspaces": { + "packages": [ + "packages/*", + "tools/*" + ] + }, + "scripts": { + "version": "yarn run bootstrap && yarn build", + "bootstrap": "lerna bootstrap", + "prebuild": "yarn clean && ts-node scripts/init.ts", + "build": "lerna run build --stream", + "build:types": "lerna run build:types --stream", + "build:cjs": "lerna run build:cjs --stream", + "build:esm": "lerna run build:esm --stream", + "build:web": "lerna run build:web --stream", + "build:web:analyze": "lerna run build:web:analyze --stream", + "build:docs": "cd docs && yarn install && yarn build", + "changelog": "ts-node -P scripts/changelog/tsconfig.json scripts/changelog/src/index.ts", + "clean": "lerna run clean --stream --parallel", + "ganache:start": "WEB3_SYSTEM_TEST_BACKEND=ganache && ./scripts/ganache.sh start", + "ganache:start:background": "WEB3_SYSTEM_TEST_BACKEND=ganache && ./scripts/ganache.sh start 1", + "ganache:stop": "./scripts/ganache.sh stop", + "geth:start": "WEB3_SYSTEM_TEST_BACKEND=geth && ./scripts/geth.sh start", + "geth:start:background": "WEB3_SYSTEM_TEST_BACKEND=geth && ./scripts/geth.sh start 1", + "geth:stop": "./scripts/geth.sh stop", + "geth-binary:start": "WEB3_SYSTEM_TEST_BACKEND=geth && ./scripts/geth_binary.sh start", + "geth-binary:start:background": "WEB3_SYSTEM_TEST_BACKEND=geth && ./scripts/geth_binary.sh start 1", + "geth-binary:stop": "WEB3_SYSTEM_TEST_BACKEND=geth && ./scripts/geth_binary.sh stop", + "lint": "lerna run lint --stream --parallel", + "lint:fix": "lerna run lint:fix --stream --parallel", + "format": "lerna run format --stream --parallel && prettier --write ./scripts/**/*.ts", + "test": "lerna run test --stream --parallel", + "test:coverage:unit": "lerna run test:coverage:unit --stream --parallel", + "test:coverage:integration": "lerna run test:coverage:integration --stream --parallel", + "test:unit": "lerna run test:unit --stream --parallel && jest --config=./scripts/jest.config.js", + "test:integration": "lerna run test:integration --stream", + "test:e2e:ganache:http": "./scripts/test-runner.sh ganache http", + "test:e2e:ganache:ws": "./scripts/test-runner.sh ganache ws", + "test:e2e:geth:http": "./scripts/test-runner.sh geth http", + "test:e2e:geth:ws": "./scripts/test-runner.sh geth ws", + "test:e2e:geth:ipc": "./scripts/test-runner.sh geth ipc", + "test:e2e:ganache:ws:electron": "./scripts/test-runner.sh ganache ws electron", + "test:e2e:ganache:ws:chrome": "./scripts/test-runner.sh ganache ws chrome", + "test:e2e:ganache:ws:firefox": "./scripts/test-runner.sh ganache ws firefox", + "test:e2e:coverage": "./scripts/test-runner.sh coverage", + "test:e2e:mainnet:http": "./scripts/test-runner.sh mainnet http", + "test:e2e:mainnet:ws": "./scripts/test-runner.sh mainnet ws", + "test:e2e:sepolia:http": "./scripts/test-runner.sh sepolia http", + "test:e2e:sepolia:ws": "./scripts/test-runner.sh sepolia ws", + "generate:accounts": "node ./scripts/gen_accounts.js", + "pre-blackbox": "yarn config set registry http://localhost:4873 && git init && git config --global user.email \"ci@github.com\" && git config --global user.name \"CI\"", + "post-blackbox": "./scripts/verdaccio.sh stop", + "post-blackbox:ganache": "yarn ganache:stop && yarn post-blackbox", + "post-blackbox:geth": "yarn geth:stop && yarn post-blackbox", + "test:blackbox:ganache:http": "yarn pre-blackbox && yarn ganache:start:background && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:ganache:http --stream && yarn post-blackbox:ganache", + "test:blackbox:ganache:ws": "yarn pre-blackbox && yarn ganache:start:background && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:ganache:ws --stream && yarn post-blackbox:ganache", + "test:blackbox:geth:http": "yarn pre-blackbox && yarn geth:start:background && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:geth:http --stream && yarn post-blackbox:geth", + "test:blackbox:geth:ws": "yarn pre-blackbox && yarn geth:start:background && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:geth:ws --stream && yarn post-blackbox:geth", + "test:blackbox:infura:http": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:http --stream && yarn post-blackbox", + "test:blackbox:infura:ws": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:ws --stream && yarn post-blackbox", + "husky:install": "husky install", + "husky:uninstall": "husky uninstall", + "postinstall": "yarn build", + "compile:contracts": "node ./scripts/compile_contracts.js && yarn format && yarn lint:fix", + "publish:canary": "lerna publish --canary --dist-tag dev --preid dev.$(git rev-parse --short HEAD) --exact --graph-type all --force-publish \"*\" --no-verify-access --yes" + }, + "devDependencies": { + "@cypress/webpack-preprocessor": "^5.12.0", + "@droppedcode/typedoc-plugin-relative-includes": "^1.0.2", + "@openzeppelin/contracts": "^4.7.1", + "@types/node": "^18.11.9", + "@types/webpack": "^5.28.0", + "assert": "^2.0.0", + "buffer": "^6.0.3", + "bufferutil": "^4.0.6", + "clean-webpack-plugin": "^4.0.0", + "concurrently": "^8.2.0", + "cypress-jest-adapter": "^0.1.1", + "declaration-bundler-webpack-plugin": "^1.0.3", + "eslint": "^8.20.0", + "eslint-import-resolver-typescript": "^3.5.5", + "eslint-plugin-require-extensions": "^0.1.3", + "http-browserify": "^1.7.0", + "https-browserify": "^1.0.0", + "husky": "^8.0.3", + "jest": "^28.1.3", + "lerna": "^6.6.2", + "npm-auth-to-token": "^1.0.0", + "prettier": "^2.7.1", + "prettier-plugin-solidity": "^1.0.0-beta.20", + "process": "^0.11.10", + "solc": "^0.8.15", + "ts-jest": "^28.0.7", + "ts-loader": "^9.3.1", + "ts-node": "^10.9.1", + "typedoc": "^0.23.9", + "typedoc-monorepo-link-types": "^0.0.4", + "typedoc-plugin-extras": "^2.2.5", + "typedoc-plugin-mdn-links": "^2.0.0", + "typescript": "^4.7.4", + "utf-8-validate": "^5.0.9", + "webpack": "^5.73.0", + "webpack-cli": "^4.10.0" + }, + "packageManager": "yarn@1.22.15", + "dependencies": { + "webpack-bundle-analyzer": "^4.7.0" + } } diff --git a/packages/web3-bzz/README.md b/packages/web3-bzz/README.md deleted file mode 100644 index 383dfddc7c3..00000000000 --- a/packages/web3-bzz/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# web3-bzz - -[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] - -This is a sub-package of [web3.js][repo]. - -This is the swarm package. - -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-bzz -``` - -## Usage - -```js -const Web3Bzz = require('web3-bzz'); - -const bzz = new Web3Bzz('http://swarm-gateways.net'); -``` - -## Types - -All the TypeScript typings are placed in the `types` folder. - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-bzz.svg -[npm-url]: https://npmjs.org/package/web3-bzz -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-bzz -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-bzz -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-bzz -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-bzz diff --git a/packages/web3-bzz/package-lock.json b/packages/web3-bzz/package-lock.json deleted file mode 100644 index 580dfdbee01..00000000000 --- a/packages/web3-bzz/package-lock.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "web3-bzz", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/node": { - "version": "12.12.68", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.68.tgz", - "integrity": "sha512-3RW2s24ewB7F9dAHvgb9FRvNHn6nO9IK6Eaknbz7HTOe2a5GVne5XbUh5+YA+kcCn67glyHhClUUdFP73LWrgQ==" - }, - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-bzz/package.json b/packages/web3-bzz/package.json deleted file mode 100644 index e009353379a..00000000000 --- a/packages/web3-bzz/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "web3-bzz", - "version": "1.3.0", - "description": "Web3 module to interact with the Swarm network.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-bzz", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } -} diff --git a/packages/web3-bzz/src/index.js b/packages/web3-bzz/src/index.js deleted file mode 100644 index 7f87381f838..00000000000 --- a/packages/web3-bzz/src/index.js +++ /dev/null @@ -1,88 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var _ = require('underscore'); -var swarm = require("swarm-js"); - - -var Bzz = function Bzz(provider) { - - this.givenProvider = Bzz.givenProvider; - - if (provider && provider._requestManager) { - provider = provider.currentProvider; - } - - // only allow file picker when in browser - if(typeof document !== 'undefined') { - this.pick = swarm.pick; - } - - this.setProvider(provider); -}; - -// set default ethereum provider -/* jshint ignore:start */ -Bzz.givenProvider = null; -if (typeof ethereum !== 'undefined' && ethereum.bzz) { - Bzz.givenProvider = ethereum.bzz; -} -/* jshint ignore:end */ - -Bzz.prototype.setProvider = function(provider) { - // is ethereum provider - if(_.isObject(provider) && _.isString(provider.bzz)) { - provider = provider.bzz; - // is no string, set default - } - // else if(!_.isString(provider)) { - // provider = 'http://swarm-gateways.net'; // default to gateway - // } - - - if(_.isString(provider)) { - this.currentProvider = provider; - } else { - this.currentProvider = null; - - var noProviderError = new Error('No provider set, please set one using bzz.setProvider().'); - - this.download = this.upload = this.isAvailable = function(){ - throw noProviderError; - }; - - return false; - } - - // add functions - this.download = swarm.at(provider).download; - this.upload = swarm.at(provider).upload; - this.isAvailable = swarm.at(provider).isAvailable; - - return true; -}; - - -module.exports = Bzz; - diff --git a/packages/web3-bzz/tsconfig.json b/packages/web3-bzz/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-bzz/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-bzz/types/index.d.ts b/packages/web3-bzz/types/index.d.ts deleted file mode 100644 index 340ee13b780..00000000000 --- a/packages/web3-bzz/types/index.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens - * @date 2018 - */ - -export class Bzz { - constructor(); - constructor(provider: any); - - readonly givenProvider: any; - static readonly givenProvider: any; - readonly currentProvider: any; - setProvider(provider: any): boolean; - - upload(data: any): Promise; - - download(bzzHash: string, localPath?: string): Promise; - - pick: Pick; -} - -export interface Pick { - file: () => Promise; - directory: () => Promise; - data: () => Promise; -} diff --git a/packages/web3-bzz/types/tests/bzz-test.ts b/packages/web3-bzz/types/tests/bzz-test.ts deleted file mode 100644 index 286486e82ba..00000000000 --- a/packages/web3-bzz/types/tests/bzz-test.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file bzz-tests.ts - * @author Josh Stevens - * @date 2018 - */ - -import { Bzz } from 'web3-bzz'; - -// $ExpectType Bzz -const bzz_empty = new Bzz(); - -// $ExpectType Bzz -const bzz = new Bzz('http://swarm-gateways.net'); - -// $ExpectType any -Bzz.givenProvider; - -// $ExpectType boolean -bzz.setProvider('test.com'); - -// $ExpectType any -bzz.currentProvider; - -// $ExpectType any -bzz.givenProvider; - -// $ExpectType boolean -bzz.setProvider('https://localhost:2100'); - -// $ExpectType Promise -bzz.upload('test file'); - -const dir = { - '/foo.txt': { type: 'text/plain', data: 'sample file' }, - '/bar.txt': { type: 'text/plain', data: 'another file' } -}; - -// $ExpectType Promise -bzz.upload(dir); -// $ExpectType Promise -bzz.upload({ - path: '/path/to/thing', - kind: 'directory', - defaultFile: '/index.html' -}); - -// ExpectType Promise; -bzz.download('hash'); - -// ExpectType Promise; -bzz.download('hash', 'path'); - -// $ExpectType Promise -bzz.pick.file(); - -// $ExpectType Promise -bzz.pick.directory(); - -// $ExpectType Promise -bzz.pick.data(); diff --git a/packages/web3-bzz/types/tsconfig.json b/packages/web3-bzz/types/tsconfig.json deleted file mode 100644 index bf0cfa6d681..00000000000 --- a/packages/web3-bzz/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-bzz": ["."] - } - } -} diff --git a/packages/web3-bzz/types/tslint.json b/packages/web3-bzz/types/tslint.json deleted file mode 100644 index 2a4469808b0..00000000000 --- a/packages/web3-bzz/types/tslint.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false, - "unified-signatures": false, - "no-redundant-jsdoc": false - } -} diff --git a/packages/web3-core-helpers/README.md b/packages/web3-core-helpers/README.md deleted file mode 100644 index 777ba872783..00000000000 --- a/packages/web3-core-helpers/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# web3-core-helpers - -[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] - -This is a sub-package of [web3.js][repo] with useful helper functions. - -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-core-helpers -``` - -## Usage - -```js -const helpers = require('web3-core-helpers'); - -helpers.formatters; -helpers.errors; -... -``` - -## Types - -All the TypeScript typings are placed in the `types` folder. - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-core-helpers.svg -[npm-url]: https://npmjs.org/package/web3-core-helpers -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-core-helpers -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-core-helpers -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-core-helpers -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-core-helpers \ No newline at end of file diff --git a/packages/web3-core-helpers/package-lock.json b/packages/web3-core-helpers/package-lock.json deleted file mode 100644 index 1fc8d1c3692..00000000000 --- a/packages/web3-core-helpers/package-lock.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "web3-core-helpers", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/node": { - "version": "12.12.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.26.tgz", - "integrity": "sha512-UmUm94/QZvU5xLcUlNR8hA7Ac+fGpO1EG/a8bcWVz0P0LqtxFmun9Y2bbtuckwGboWJIT70DoWq1r3hb56n3DA==", - "dev": true - }, - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-core-helpers/package.json b/packages/web3-core-helpers/package.json deleted file mode 100644 index 52484d8f5de..00000000000 --- a/packages/web3-core-helpers/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "web3-core-helpers", - "version": "1.3.0", - "description": "Web3 core tools helper for sub packages. This is an internal package.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-core-helpers", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "underscore": "1.9.1", - "web3-eth-iban": "1.3.0", - "web3-utils": "1.3.0" - }, - "devDependencies": { - "@types/node": "^12.12.6", - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } -} diff --git a/packages/web3-core-helpers/src/errors.js b/packages/web3-core-helpers/src/errors.js deleted file mode 100644 index 9f16f677313..00000000000 --- a/packages/web3-core-helpers/src/errors.js +++ /dev/null @@ -1,137 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file errors.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2017 - */ - -"use strict"; - -module.exports = { - ErrorResponse: function (result) { - var message = !!result && !!result.error && !!result.error.message ? result.error.message : JSON.stringify(result); - var data = (!!result.error && !!result.error.data) ? result.error.data : null; - var err = new Error('Returned error: ' + message); - err.data = data; - return err; - }, - InvalidNumberOfParams: function (got, expected, method) { - return new Error('Invalid number of parameters for "'+ method +'". Got '+ got +' expected '+ expected +'!'); - }, - InvalidConnection: function (host, event){ - return this.ConnectionError('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.', event); - }, - InvalidProvider: function () { - return new Error('Provider not set or invalid'); - }, - InvalidResponse: function (result){ - var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result); - return new Error(message); - }, - ConnectionTimeout: function (ms){ - return new Error('CONNECTION TIMEOUT: timeout of ' + ms + ' ms achived'); - }, - ConnectionNotOpenError: function (event){ - return this.ConnectionError('connection not open on send()', event); - }, - ConnectionCloseError: function (event){ - if (typeof event === 'object' && event.code && event.reason) { - return this.ConnectionError( - 'CONNECTION ERROR: The connection got closed with ' + - 'the close code `' + event.code + '` and the following ' + - 'reason string `' + event.reason + '`', - event - ); - } - - return new Error('CONNECTION ERROR: The connection closed unexpectedly'); - }, - MaxAttemptsReachedOnReconnectingError: function (){ - return new Error('Maximum number of reconnect attempts reached!'); - }, - PendingRequestsOnReconnectingError: function (){ - return new Error('CONNECTION ERROR: Provider started to reconnect before the response got received!'); - }, - ConnectionError: function (msg, event){ - const error = new Error(msg); - if (event) { - error.code = event.code; - error.reason = event.reason; - } - - return error; - }, - RevertInstructionError: function(reason, signature) { - var error = new Error('Your request got reverted with the following reason string: ' + reason); - error.reason = reason; - error.signature = signature; - - return error; - }, - TransactionRevertInstructionError: function(reason, signature, receipt) { - var error = new Error('Transaction has been reverted by the EVM:\n' + JSON.stringify(receipt, null, 2)); - error.reason = reason; - error.signature = signature; - error.receipt = receipt; - - return error; - }, - TransactionError: function(message, receipt) { - var error = new Error(message); - error.receipt = receipt; - - return error; - }, - NoContractAddressFoundError: function(receipt) { - return this.TransactionError('The transaction receipt didn\'t contain a contract address.', receipt); - }, - ContractCodeNotStoredError: function(receipt) { - return this.TransactionError('The contract code couldn\'t be stored, please check your gas limit.', receipt); - }, - TransactionRevertedWithoutReasonError: function(receipt) { - return this.TransactionError('Transaction has been reverted by the EVM:\n' + JSON.stringify(receipt, null, 2), receipt); - }, - TransactionOutOfGasError: function(receipt) { - return this.TransactionError('Transaction ran out of gas. Please provide more gas:\n' + JSON.stringify(receipt, null, 2), receipt); - }, - ResolverMethodMissingError: function(address, name) { - return new Error('The resolver at ' + address + 'does not implement requested method: "' + name + '".'); - }, - ContractMissingABIError: function() { - return new Error('You must provide the json interface of the contract when instantiating a contract object.'); - }, - ContractOnceRequiresCallbackError: function() { - return new Error('Once requires a callback as the second parameter.'); - }, - ContractEventDoesNotExistError: function(eventName) { - return new Error('Event "' + eventName + '" doesn\'t exist in this contract.'); - }, - ContractReservedEventError: function(type) { - return new Error('The event "'+ type +'" is a reserved event name, you can\'t use it.'); - }, - ContractMissingDeployDataError: function() { - return new Error('No "data" specified in neither the given options, nor the default options.'); - }, - ContractNoAddressDefinedError: function() { - return new Error('This contract object doesn\'t have address set yet, please set an address first.'); - }, - ContractNoFromAddressDefinedError: function() { - return new Error('No "from" address specified in neither the given options, nor the default options.'); - } -}; diff --git a/packages/web3-core-helpers/src/formatters.js b/packages/web3-core-helpers/src/formatters.js deleted file mode 100644 index 0b0e580cbf7..00000000000 --- a/packages/web3-core-helpers/src/formatters.js +++ /dev/null @@ -1,510 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2017 - */ - -"use strict"; - -var _ = require('underscore'); -var utils = require('web3-utils'); -var Iban = require('web3-eth-iban'); - - -/** - * Will format the given storage key array values to hex strings. - * - * @method inputStorageKeysFormatter - * - * @param {Array} keys - * - * @returns {Array} - */ -var inputStorageKeysFormatter = function (keys) { - return keys.map(utils.numberToHex); -}; - -/** - * Will format the given proof response from the node. - * - * @method outputProofFormatter - * - * @param {object} proof - * - * @returns {object} - */ -var outputProofFormatter = function (proof) { - proof.address = utils.toChecksumAddress(proof.address); - proof.nonce = utils.hexToNumberString(proof.nonce); - proof.balance = utils.hexToNumberString(proof.balance); - - return proof; -}; - -/** - * Should the format output to a big number - * - * @method outputBigNumberFormatter - * - * @param {String|Number|BigNumber|BN} number - * - * @returns {BN} object - */ -var outputBigNumberFormatter = function (number) { - return utils.toBN(number).toString(10); -}; - -/** - * Returns true if the given blockNumber is 'latest', 'pending', or 'earliest. - * - * @method isPredefinedBlockNumber - * - * @param {String} blockNumber - * - * @returns {Boolean} - */ -var isPredefinedBlockNumber = function (blockNumber) { - return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest'; -}; - -/** - * Returns the given block number as hex string or does return the defaultBlock property of the current module - * - * @method inputDefaultBlockNumberFormatter - * - * @param {String|Number|BN|BigNumber} blockNumber - * - * @returns {String} - */ -var inputDefaultBlockNumberFormatter = function (blockNumber) { - if (this && (blockNumber === undefined || blockNumber === null)) { - return inputBlockNumberFormatter(this.defaultBlock); - } - - return inputBlockNumberFormatter(blockNumber); -}; - -/** - * Returns the given block number as hex string or the predefined block number 'latest', 'pending', 'earliest', 'genesis' - * - * @param {String|Number|BN|BigNumber} blockNumber - * - * @returns {String} - */ -var inputBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return undefined; - } - - if (isPredefinedBlockNumber(blockNumber)) { - return blockNumber; - } - - if (blockNumber === 'genesis') { - return '0x0'; - } - - return (utils.isHexStrict(blockNumber)) ? ((_.isString(blockNumber)) ? blockNumber.toLowerCase() : blockNumber) : utils.numberToHex(blockNumber); -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method _txInputFormatter - * @param {Object} transaction options - * @returns object - */ -var _txInputFormatter = function (options) { - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - if (options.data && options.input) { - throw new Error('You can\'t have "data" and "input" as properties of transactions at the same time, please use either "data" or "input" instead.'); - } - - if (!options.data && options.input) { - options.data = options.input; - delete options.input; - } - - if (options.data && !options.data.startsWith('0x')) { - options.data = '0x' + options.data; - } - - if (options.data && !utils.isHex(options.data)) { - throw new Error('The data field must be HEX encoded data.'); - } - - // allow both - if (options.gas || options.gasLimit) { - options.gas = options.gas || options.gasLimit; - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function (key) { - options[key] = utils.numberToHex(options[key]); - }); - - return options; -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputCallFormatter - * @param {Object} transaction options - * @returns object - */ -var inputCallFormatter = function (options) { - - options = _txInputFormatter(options); - - var from = options.from || (this ? this.defaultAccount : null); - - if (from) { - options.from = inputAddressFormatter(from); - } - - - return options; -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputTransactionFormatter - * @param {Object} options - * @returns object - */ -var inputTransactionFormatter = function (options) { - - options = _txInputFormatter(options); - - // check from, only if not number, or object - if (!_.isNumber(options.from) && !_.isObject(options.from)) { - options.from = options.from || (this ? this.defaultAccount : null); - - if (!options.from && !_.isNumber(options.from)) { - throw new Error('The send transactions "from" field must be defined!'); - } - - options.from = inputAddressFormatter(options.from); - } - - return options; -}; - -/** - * Hex encodes the data passed to eth_sign and personal_sign - * - * @method inputSignFormatter - * @param {String} data - * @returns {String} - */ -var inputSignFormatter = function (data) { - return (utils.isHexStrict(data)) ? data : utils.utf8ToHex(data); -}; - -/** - * Formats the output of a transaction to its proper values - * - * @method outputTransactionFormatter - * @param {Object} tx - * @returns {Object} - */ -var outputTransactionFormatter = function (tx) { - if (tx.blockNumber !== null) - tx.blockNumber = utils.hexToNumber(tx.blockNumber); - if (tx.transactionIndex !== null) - tx.transactionIndex = utils.hexToNumber(tx.transactionIndex); - tx.nonce = utils.hexToNumber(tx.nonce); - tx.gas = utils.hexToNumber(tx.gas); - tx.gasPrice = outputBigNumberFormatter(tx.gasPrice); - tx.value = outputBigNumberFormatter(tx.value); - - if (tx.to && utils.isAddress(tx.to)) { // tx.to could be `0x0` or `null` while contract creation - tx.to = utils.toChecksumAddress(tx.to); - } else { - tx.to = null; // set to `null` if invalid address - } - - if (tx.from) { - tx.from = utils.toChecksumAddress(tx.from); - } - - return tx; -}; - -/** - * Formats the output of a transaction receipt to its proper values - * - * @method outputTransactionReceiptFormatter - * @param {Object} receipt - * @returns {Object} - */ -var outputTransactionReceiptFormatter = function (receipt) { - if (typeof receipt !== 'object') { - throw new Error('Received receipt is invalid: ' + receipt); - } - - if (receipt.blockNumber !== null) - receipt.blockNumber = utils.hexToNumber(receipt.blockNumber); - if (receipt.transactionIndex !== null) - receipt.transactionIndex = utils.hexToNumber(receipt.transactionIndex); - receipt.cumulativeGasUsed = utils.hexToNumber(receipt.cumulativeGasUsed); - receipt.gasUsed = utils.hexToNumber(receipt.gasUsed); - - if (_.isArray(receipt.logs)) { - receipt.logs = receipt.logs.map(outputLogFormatter); - } - - if (receipt.contractAddress) { - receipt.contractAddress = utils.toChecksumAddress(receipt.contractAddress); - } - - if (typeof receipt.status !== 'undefined' && receipt.status !== null) { - receipt.status = Boolean(parseInt(receipt.status)); - } - - return receipt; -}; - -/** - * Formats the output of a block to its proper values - * - * @method outputBlockFormatter - * @param {Object} block - * @returns {Object} - */ -var outputBlockFormatter = function (block) { - - // transform to number - block.gasLimit = utils.hexToNumber(block.gasLimit); - block.gasUsed = utils.hexToNumber(block.gasUsed); - block.size = utils.hexToNumber(block.size); - block.timestamp = utils.hexToNumber(block.timestamp); - if (block.number !== null) - block.number = utils.hexToNumber(block.number); - - if (block.difficulty) - block.difficulty = outputBigNumberFormatter(block.difficulty); - if (block.totalDifficulty) - block.totalDifficulty = outputBigNumberFormatter(block.totalDifficulty); - - if (_.isArray(block.transactions)) { - block.transactions.forEach(function (item) { - if (!_.isString(item)) - return outputTransactionFormatter(item); - }); - } - - if (block.miner) - block.miner = utils.toChecksumAddress(block.miner); - - return block; -}; - -/** - * Formats the input of a log - * - * @method inputLogFormatter - * @param {Object} log object - * @returns {Object} log - */ -var inputLogFormatter = function (options) { - var toTopic = function (value) { - - if (value === null || typeof value === 'undefined') - return null; - - value = String(value); - - if (value.indexOf('0x') === 0) - return value; - else - return utils.fromUtf8(value); - }; - - if (options.fromBlock || options.fromBlock === 0) - options.fromBlock = inputBlockNumberFormatter(options.fromBlock); - - if (options.toBlock || options.toBlock === 0) - options.toBlock = inputBlockNumberFormatter(options.toBlock); - - - // make sure topics, get converted to hex - options.topics = options.topics || []; - options.topics = options.topics.map(function (topic) { - return (_.isArray(topic)) ? topic.map(toTopic) : toTopic(topic); - }); - - toTopic = null; - - if (options.address) { - options.address = (_.isArray(options.address)) ? options.address.map(function (addr) { - return inputAddressFormatter(addr); - }) : inputAddressFormatter(options.address); - } - - return options; -}; - -/** - * Formats the output of a log - * - * @method outputLogFormatter - * @param {Object} log object - * @returns {Object} log - */ -var outputLogFormatter = function (log) { - - // generate a custom log id - if (typeof log.blockHash === 'string' && - typeof log.transactionHash === 'string' && - typeof log.logIndex === 'string') { - var shaId = utils.sha3(log.blockHash.replace('0x', '') + log.transactionHash.replace('0x', '') + log.logIndex.replace('0x', '')); - log.id = 'log_' + shaId.replace('0x', '').substr(0, 8); - } else if (!log.id) { - log.id = null; - } - - if (log.blockNumber !== null) - log.blockNumber = utils.hexToNumber(log.blockNumber); - if (log.transactionIndex !== null) - log.transactionIndex = utils.hexToNumber(log.transactionIndex); - if (log.logIndex !== null) - log.logIndex = utils.hexToNumber(log.logIndex); - - if (log.address) { - log.address = utils.toChecksumAddress(log.address); - } - - return log; -}; - -/** - * Formats the input of a whisper post and converts all values to HEX - * - * @method inputPostFormatter - * @param {Object} transaction object - * @returns {Object} - */ -var inputPostFormatter = function (post) { - - // post.payload = utils.toHex(post.payload); - - if (post.ttl) - post.ttl = utils.numberToHex(post.ttl); - if (post.workToProve) - post.workToProve = utils.numberToHex(post.workToProve); - if (post.priority) - post.priority = utils.numberToHex(post.priority); - - // fallback - if (!_.isArray(post.topics)) { - post.topics = post.topics ? [post.topics] : []; - } - - // format the following options - post.topics = post.topics.map(function (topic) { - // convert only if not hex - return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic); - }); - - return post; -}; - -/** - * Formats the output of a received post message - * - * @method outputPostFormatter - * @param {Object} - * @returns {Object} - */ -var outputPostFormatter = function (post) { - - post.expiry = utils.hexToNumber(post.expiry); - post.sent = utils.hexToNumber(post.sent); - post.ttl = utils.hexToNumber(post.ttl); - post.workProved = utils.hexToNumber(post.workProved); - // post.payloadRaw = post.payload; - // post.payload = utils.hexToAscii(post.payload); - - // if (utils.isJson(post.payload)) { - // post.payload = JSON.parse(post.payload); - // } - - // format the following options - if (!post.topics) { - post.topics = []; - } - post.topics = post.topics.map(function (topic) { - return utils.toUtf8(topic); - }); - - return post; -}; - -var inputAddressFormatter = function (address) { - var iban = new Iban(address); - if (iban.isValid() && iban.isDirect()) { - return iban.toAddress().toLowerCase(); - } else if (utils.isAddress(address)) { - return '0x' + address.toLowerCase().replace('0x', ''); - } - throw new Error(`Provided address ${address} is invalid, the capitalization checksum test failed, or it's an indirect IBAN address which can't be converted.`); -}; - - -var outputSyncingFormatter = function (result) { - - result.startingBlock = utils.hexToNumber(result.startingBlock); - result.currentBlock = utils.hexToNumber(result.currentBlock); - result.highestBlock = utils.hexToNumber(result.highestBlock); - if (result.knownStates) { - result.knownStates = utils.hexToNumber(result.knownStates); - result.pulledStates = utils.hexToNumber(result.pulledStates); - } - - return result; -}; - -module.exports = { - inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter, - inputBlockNumberFormatter: inputBlockNumberFormatter, - inputCallFormatter: inputCallFormatter, - inputTransactionFormatter: inputTransactionFormatter, - inputAddressFormatter: inputAddressFormatter, - inputPostFormatter: inputPostFormatter, - inputLogFormatter: inputLogFormatter, - inputSignFormatter: inputSignFormatter, - inputStorageKeysFormatter: inputStorageKeysFormatter, - outputProofFormatter: outputProofFormatter, - outputBigNumberFormatter: outputBigNumberFormatter, - outputTransactionFormatter: outputTransactionFormatter, - outputTransactionReceiptFormatter: outputTransactionReceiptFormatter, - outputBlockFormatter: outputBlockFormatter, - outputLogFormatter: outputLogFormatter, - outputPostFormatter: outputPostFormatter, - outputSyncingFormatter: outputSyncingFormatter -}; diff --git a/packages/web3-core-helpers/src/index.js b/packages/web3-core-helpers/src/index.js deleted file mode 100644 index b0f9a4db528..00000000000 --- a/packages/web3-core-helpers/src/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var errors = require('./errors'); -var formatters = require('./formatters'); - -module.exports = { - errors: errors, - formatters: formatters -}; - diff --git a/packages/web3-core-helpers/tsconfig.json b/packages/web3-core-helpers/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-core-helpers/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-core-helpers/types/index.d.ts b/packages/web3-core-helpers/types/index.d.ts deleted file mode 100644 index 2a072af3bc1..00000000000 --- a/packages/web3-core-helpers/types/index.d.ts +++ /dev/null @@ -1,252 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens - * @date 2018 - */ - -import * as net from 'net'; -import * as http from 'http'; -import * as https from 'https'; - -export class formatters { - static outputBigNumberFormatter(number: number): number; - - static inputSignFormatter(data: string): string; - - static inputAddressFormatter(address: string): string; - - static isPredefinedBlockNumber(blockNumber: string): boolean; - - static inputDefaultBlockNumberFormatter(blockNumber: string): string; - - static inputBlockNumberFormatter(blockNumber: string | number): string | number; - - static outputBlockFormatter(block: any): any; // TODO: Create Block interface - - static txInputFormatter(txObject: any): any; - - static inputCallFormatter(txObject: any): any; - - static inputTransactionFormatter(txObject: any): any; - - static outputTransactionFormatter(receipt: any): any; - - static outputTransactionReceiptFormatter(receipt: any): any; - - static inputLogFormatter(log: any): any; - - static outputLogFormatter(log: any): any; - - static inputPostFormatter(post: any): any; // TODO: Create Post interface - - static outputPostFormatter(post: any): any; // TODO: Create Post interface - - static outputSyncingFormatter(result: any): any; // TODO: Create SyncLog interface -} - -export class errors { - static ErrorResponse(result: Error): Error; - static InvalidNumberOfParams( - got: number, - expected: number, - method: string - ): Error; - static InvalidConnection(host: string, event?: WebSocketEvent): ConnectionError; - static InvalidProvider(): Error; - static InvalidResponse(result: Error): Error; - static ConnectionTimeout(ms: string): Error; - static ConnectionNotOpenError(): Error; - static ConnectionCloseError(event: WebSocketEvent | boolean): Error | ConnectionError; - static MaxAttemptsReachedOnReconnectingError(): Error; - static PendingRequestsOnReconnectingError(): Error; - static ConnectionError(msg: string, event?: WebSocketEvent): ConnectionError; - static RevertInstructionError(reason: string, signature: string): RevertInstructionError - static TransactionRevertInstructionError(reason: string, signature: string, receipt: object): TransactionRevertInstructionError - static TransactionError(message: string, receipt: object): TransactionError - static NoContractAddressFoundError(receipt: object): TransactionError - static ContractCodeNotStoredError(receipt: object): TransactionError - static TransactionRevertedWithoutReasonError(receipt: object): TransactionError - static TransactionOutOfGasError(receipt: object): TransactionError - static ResolverMethodMissingError(address: string, name: string): Error - static ContractMissingABIError(): Error - static ContractOnceRequiresCallbackError(): Error - static ContractEventDoesNotExistError(eventName: string): Error - static ContractReservedEventError(type: string): Error - static ContractMissingDeployDataError(): Error - static ContractNoAddressDefinedError(): Error - static ContractNoFromAddressDefinedError(): Error -} - -export class WebsocketProviderBase { - constructor(host: string, options?: WebsocketProviderOptions); - - isConnecting(): boolean; - - requestQueue: Map; - responseQueue: Map; - connected: boolean; - connection: any; - - supportsSubscriptions(): boolean; - - send( - payload: JsonRpcPayload, - callback: (error: Error | null, result?: JsonRpcResponse) => void - ): void; - - on(type: string, callback: () => void): void; - - once(type: string, callback: () => void): void; - - removeListener(type: string, callback: () => void): void; - - removeAllListeners(type: string): void; - - reset(): void; - - disconnect(code: number, reason: string): void; - - connect(): void; - - reconnect(): void; -} - -export class IpcProviderBase { - constructor(path: string, net: net.Server); - - responseCallbacks: any; - notificationCallbacks: any; - connected: boolean; - connection: any; - - addDefaultEvents(): void; - - supportsSubscriptions(): boolean; - - send( - payload: JsonRpcPayload, - callback: (error: Error | null, result?: JsonRpcResponse) => void - ): void; - - on(type: string, callback: () => void): void; - - once(type: string, callback: () => void): void; - - removeListener(type: string, callback: () => void): void; - - removeAllListeners(type: string): void; - - reset(): void; - - reconnect(): void; -} - -export class HttpProviderBase { - constructor(host: string, options?: HttpProviderOptions); - - host: string; - connected: boolean; - - supportsSubscriptions(): boolean; - - send( - payload: JsonRpcPayload, - callback: (error: Error | null, result?: JsonRpcResponse) => void - ): void; - - disconnect(): boolean; -} - -export interface HttpProviderOptions { - keepAlive?: boolean; - timeout?: number; - headers?: HttpHeader[]; - withCredentials?: boolean; - agent?: HttpAgent -} - -export interface HttpAgent { - http?: http.Agent; - https?: https.Agent; - baseUrl?: string; -} - -export interface HttpHeader { - name: string; - value: string; -} - -export interface WebsocketProviderOptions { - host?: string; - timeout?: number; - reconnectDelay?: number; - headers?: any; - protocol?: string; - clientConfig?: object; - requestOptions?: any; - origin?: string; - reconnect?: ReconnectOptions; -} - -export interface ReconnectOptions { - auto?: boolean; - delay?: number; - maxAttempts?: number; - onTimeout?: boolean; -} - -export interface RequestItem { - payload: JsonRpcPayload; - callback: (error: any, result: any) => void; -} - -export interface JsonRpcPayload { - jsonrpc: string; - method: string; - params: any[]; - id?: string | number; -} - -export interface JsonRpcResponse { - jsonrpc: string; - id: number; - result?: any; - error?: string; -} - -export interface RevertInstructionError extends Error { - reason: string; - signature: string; -} - -export interface TransactionRevertInstructionError extends Error { - reason: string; - signature: string; -} - -export interface TransactionError extends Error { - receipt: object; -} - -export interface ConnectionError extends Error { - code: string | undefined; - reason: string | undefined; -} - -export interface WebSocketEvent { - code?: number; - reason?: string; -} diff --git a/packages/web3-core-helpers/types/tests/errors-test.ts b/packages/web3-core-helpers/types/tests/errors-test.ts deleted file mode 100644 index 48405346208..00000000000 --- a/packages/web3-core-helpers/types/tests/errors-test.ts +++ /dev/null @@ -1,102 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file errors-test.ts - * @author Josh Stevens - * @date 2019 - */ - -import { errors, WebSocketEvent } from 'web3-core-helpers'; - -// $ExpectType Error -errors.ErrorResponse(new Error('hey')); - -// $ExpectType Error -errors.InvalidNumberOfParams(1, 3, 'method'); - -// $ExpectType ConnectionError -errors.InvalidConnection('https://localhost:2345432'); - -// $ExpectType Error -errors.InvalidProvider(); - -// $ExpectType Error -errors.InvalidResponse(new Error('hey')); - -// $ExpectType Error -errors.ConnectionTimeout('timeout'); - -// $ExpectType Error -errors.ConnectionNotOpenError(); - -// $ExpectType Error -errors.MaxAttemptsReachedOnReconnectingError(); - -// $ExpectType Error -errors.PendingRequestsOnReconnectingError(); - -const event: WebSocketEvent = {code: 100, reason: 'reason'}; -// $ExpectType ConnectionError -errors.ConnectionError('msg', event); - -// $ExpectType Error | ConnectionError -errors.ConnectionCloseError(event); - -// $ExpectType Error | ConnectionError -errors.ConnectionCloseError(true); - -// $ExpectType RevertInstructionError -errors.RevertInstructionError('reason', 'signature'); - -// $ExpectType TransactionRevertInstructionError -errors.TransactionRevertInstructionError('reason', 'signature', {}); - -// $ExpectType TransactionError -errors.TransactionError('reason', {}); - -// $ExpectType TransactionError -errors.NoContractAddressFoundError({}); - -// $ExpectType TransactionError -errors.ContractCodeNotStoredError({}); - -// $ExpectType TransactionError -errors.TransactionRevertedWithoutReasonError({}); - -// $ExpectType TransactionError -errors.TransactionOutOfGasError({}); - -// $ExpectType Error -errors.ResolverMethodMissingError('0x0000000000000000000000000000000000000001', 'content'); - -// $ExpectType Error -errors.ContractMissingABIError(); - -// $ExpectType Error -errors.ContractOnceRequiresCallbackError(); - -// $ExpectType Error -errors.ContractEventDoesNotExistError('nonEvent'); - -// $ExpectType Error -errors.ContractReservedEventError('newListener'); - -// $ExpectType Error -errors.ContractMissingDeployDataError(); - -// $ExpectType Error -errors.ContractNoAddressDefinedError(); - -// $ExpectType Error -errors.ContractNoFromAddressDefinedError(); diff --git a/packages/web3-core-helpers/types/tests/formatters-test.ts b/packages/web3-core-helpers/types/tests/formatters-test.ts deleted file mode 100644 index 90c57c20a41..00000000000 --- a/packages/web3-core-helpers/types/tests/formatters-test.ts +++ /dev/null @@ -1,68 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters-test.ts - * @author Samuel Furter - * @date 2018 - */ - -import { formatters } from 'web3-core-helpers'; - -// $ExpectType number -formatters.outputBigNumberFormatter(100); - -// $ExpectType string -formatters.inputSignFormatter('0x0'); - -// $ExpectType string -formatters.inputAddressFormatter('0x0'); - -// $ExpectType boolean -formatters.isPredefinedBlockNumber('latest'); - -// $ExpectType string | number -formatters.inputBlockNumberFormatter('0x0'); - -// $ExpectType any -formatters.outputBlockFormatter({}); - -// $ExpectType any -formatters.txInputFormatter({}); - -// $ExpectType any -formatters.inputCallFormatter({}); - -// $ExpectType any -formatters.inputTransactionFormatter({}); - -// $ExpectType any -formatters.outputTransactionFormatter({}); - -// $ExpectType any -formatters.outputTransactionReceiptFormatter({}); - -// $ExpectType any -formatters.inputLogFormatter({}); - -// $ExpectType any -formatters.outputLogFormatter({}); - -// $ExpectType any -formatters.inputPostFormatter({}); - -// $ExpectType any -formatters.outputPostFormatter({}); - -// $ExpectType any -formatters.outputSyncingFormatter({}); diff --git a/packages/web3-core-helpers/types/tsconfig.json b/packages/web3-core-helpers/types/tsconfig.json deleted file mode 100644 index fd847a8cabb..00000000000 --- a/packages/web3-core-helpers/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-core-helpers": ["."] - } - } -} diff --git a/packages/web3-core-helpers/types/tslint.json b/packages/web3-core-helpers/types/tslint.json deleted file mode 100644 index 6429b0c446e..00000000000 --- a/packages/web3-core-helpers/types/tslint.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false - } -} diff --git a/packages/web3-core-method/README.md b/packages/web3-core-method/README.md deleted file mode 100644 index c7394b92fad..00000000000 --- a/packages/web3-core-method/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# web3-core-method - -[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] - -This is a sub-package of [web3.js][repo]. - -This method package is used within most [web3.js][repo] packages. - -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-core-method -``` - -## Usage - -```js -const Web3Method = require('web3-core-method'); - -const method = new Web3Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [inputTransactionFormatter] -}); -method.attachToObject(myCoolLib); - -myCoolLib.sendTransaction({...}, function(){ ... }); -``` - -## Types - -All the TypeScript typings are placed in the `types` folder. - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-core-method.svg -[npm-url]: https://npmjs.org/package/web3-core-method -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-core-method -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-core-method -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-core-method -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-core-method diff --git a/packages/web3-core-method/package-lock.json b/packages/web3-core-method/package-lock.json deleted file mode 100644 index a31bc10d859..00000000000 --- a/packages/web3-core-method/package-lock.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "web3-core-method", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-core-method/package.json b/packages/web3-core-method/package.json deleted file mode 100644 index efff922e752..00000000000 --- a/packages/web3-core-method/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "web3-core-method", - "version": "1.3.0", - "description": "Creates the methods on the web3 modules. This is an internal package.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-core-method", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.3.0", - "web3-core-promievent": "1.3.0", - "web3-core-subscriptions": "1.3.0", - "web3-utils": "1.3.0" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } -} diff --git a/packages/web3-core-method/src/index.js b/packages/web3-core-method/src/index.js deleted file mode 100644 index 63ce5acbc00..00000000000 --- a/packages/web3-core-method/src/index.js +++ /dev/null @@ -1,884 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2017 - */ - -'use strict'; - -var _ = require('underscore'); -var errors = require('web3-core-helpers').errors; -var formatters = require('web3-core-helpers').formatters; -var utils = require('web3-utils'); -var promiEvent = require('web3-core-promievent'); -var Subscriptions = require('web3-core-subscriptions').subscriptions; - -var EthersTransactionUtils = require('@ethersproject/transactions'); - -var Method = function Method(options) { - - if (!options.call || !options.name) { - throw new Error('When creating a method you need to provide at least the "name" and "call" property.'); - } - - this.name = options.name; - this.call = options.call; - this.params = options.params || 0; - this.inputFormatter = options.inputFormatter; - this.outputFormatter = options.outputFormatter; - this.transformPayload = options.transformPayload; - this.extraFormatters = options.extraFormatters; - this.abiCoder = options.abiCoder; // Will be used to encode the revert reason string - - this.requestManager = options.requestManager; - - // reference to eth.accounts - this.accounts = options.accounts; - - this.defaultBlock = options.defaultBlock || 'latest'; - this.defaultAccount = options.defaultAccount || null; - this.transactionBlockTimeout = options.transactionBlockTimeout || 50; - this.transactionConfirmationBlocks = options.transactionConfirmationBlocks || 24; - this.transactionPollingTimeout = options.transactionPollingTimeout || 750; - this.defaultCommon = options.defaultCommon; - this.defaultChain = options.defaultChain; - this.defaultHardfork = options.defaultHardfork; - this.handleRevert = options.handleRevert; -}; - -Method.prototype.setRequestManager = function (requestManager, accounts) { - this.requestManager = requestManager; - - // reference to eth.accounts - if (accounts) { - this.accounts = accounts; - } - -}; - -Method.prototype.createFunction = function (requestManager, accounts) { - var func = this.buildCall(); - func.call = this.call; - - this.setRequestManager(requestManager || this.requestManager, accounts || this.accounts); - - return func; -}; - -Method.prototype.attachToObject = function (obj) { - var func = this.buildCall(); - func.call = this.call; - var name = this.name.split('.'); - if (name.length > 1) { - obj[name[0]] = obj[name[0]] || {}; - obj[name[0]][name[1]] = func; - } else { - obj[name[0]] = func; - } -}; - -/** - * Should be used to determine name of the jsonrpc method based on arguments - * - * @method getCall - * @param {Array} arguments - * @return {String} name of jsonrpc method - */ -Method.prototype.getCall = function (args) { - return _.isFunction(this.call) ? this.call(args) : this.call; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Method.prototype.extractCallback = function (args) { - if (_.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Should be called to check if the number of arguments is correct - * - * @method validateArgs - * @param {Array} arguments - * @throws {Error} if it is not - */ -Method.prototype.validateArgs = function (args) { - if (args.length !== this.params) { - throw errors.InvalidNumberOfParams(args.length, this.params, this.name); - } -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Method.prototype.formatInput = function (args) { - var _this = this; - - if (!this.inputFormatter) { - return args; - } - - return this.inputFormatter.map(function (formatter, index) { - // bind this for defaultBlock, and defaultAccount - return formatter ? formatter.call(_this, args[index]) : args[index]; - }); -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Method.prototype.formatOutput = function (result) { - var _this = this; - - if (_.isArray(result)) { - return result.map(function (res) { - return _this.outputFormatter && res ? _this.outputFormatter(res) : res; - }); - } else { - return this.outputFormatter && result ? this.outputFormatter(result) : result; - } -}; - -/** - * Should create payload from given input args - * - * @method toPayload - * @param {Array} args - * @return {Object} - */ -Method.prototype.toPayload = function (args) { - var call = this.getCall(args); - var callback = this.extractCallback(args); - var params = this.formatInput(args); - this.validateArgs(params); - - var payload = { - method: call, - params: params, - callback: callback - }; - - if (this.transformPayload) { - payload = this.transformPayload(payload); - } - - return payload; -}; - - -Method.prototype._confirmTransaction = function (defer, result, payload) { - var method = this, - promiseResolved = false, - canUnsubscribe = true, - timeoutCount = 0, - confirmationCount = 0, - intervalId = null, - lastBlock = null, - receiptJSON = '', - gasProvided = (_.isObject(payload.params[0]) && payload.params[0].gas) ? payload.params[0].gas : null, - isContractDeployment = _.isObject(payload.params[0]) && - payload.params[0].data && - payload.params[0].from && - !payload.params[0].to, - hasBytecode = isContractDeployment && payload.params[0].data.length > 2; - - // add custom send Methods - var _ethereumCalls = [ - new Method({ - name: 'getBlockByNumber', - call: 'eth_getBlockByNumber', - params: 2, - inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { - return !!val; - }], - outputFormatter: formatters.outputBlockFormatter - }), - new Method({ - name: 'getTransactionReceipt', - call: 'eth_getTransactionReceipt', - params: 1, - inputFormatter: [null], - outputFormatter: formatters.outputTransactionReceiptFormatter - }), - new Method({ - name: 'getCode', - call: 'eth_getCode', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter] - }), - new Method({ - name: 'getTransactionByHash', - call: 'eth_getTransactionByHash', - params: 1, - inputFormatter: [null], - outputFormatter: formatters.outputTransactionFormatter - }), - new Subscriptions({ - name: 'subscribe', - type: 'eth', - subscriptions: { - 'newBlockHeaders': { - subscriptionName: 'newHeads', // replace subscription with this name - params: 0, - outputFormatter: formatters.outputBlockFormatter - } - } - }) - ]; - // attach methods to this._ethereumCall - var _ethereumCall = {}; - _.each(_ethereumCalls, function (mthd) { - mthd.attachToObject(_ethereumCall); - mthd.requestManager = method.requestManager; // assign rather than call setRequestManager() - }); - - - // fire "receipt" and confirmation events and resolve after - var checkConfirmation = function (existingReceipt, isPolling, err, blockHeader, sub) { - if (!err) { - // create fake unsubscribe - if (!sub) { - sub = { - unsubscribe: function () { - clearInterval(intervalId); - } - }; - } - // if we have a valid receipt we don't need to send a request - return (existingReceipt ? promiEvent.resolve(existingReceipt) : _ethereumCall.getTransactionReceipt(result)) - // catch error from requesting receipt - .catch(function (err) { - sub.unsubscribe(); - promiseResolved = true; - utils._fireError( - { - message: 'Failed to check for transaction receipt:', - data: err - }, - defer.eventEmitter, - defer.reject - ); - }) - // if CONFIRMATION listener exists check for confirmations, by setting canUnsubscribe = false - .then(async function (receipt) { - if (!receipt || !receipt.blockHash) { - throw new Error('Receipt missing or blockHash null'); - } - - // apply extra formatters - if (method.extraFormatters && method.extraFormatters.receiptFormatter) { - receipt = method.extraFormatters.receiptFormatter(receipt); - } - - // check if confirmation listener exists - if (defer.eventEmitter.listeners('confirmation').length > 0) { - var block; - - // If there was an immediately retrieved receipt, it's already - // been confirmed by the direct call to checkConfirmation needed - // for parity instant-seal - if (existingReceipt === undefined || confirmationCount !== 0) { - // Get latest block to emit with confirmation - var latestBlock = await _ethereumCall.getBlockByNumber('latest'); - var latestBlockHash = latestBlock ? latestBlock.hash : null; - - if (isPolling) { // Check if actually a new block is existing on polling - if (lastBlock) { - block = await _ethereumCall.getBlockByNumber(lastBlock.number + 1); - if (block) { - lastBlock = block; - defer.eventEmitter.emit('confirmation', confirmationCount, receipt, latestBlockHash); - } - } else { - block = await _ethereumCall.getBlockByNumber(receipt.blockNumber); - lastBlock = block; - defer.eventEmitter.emit('confirmation', confirmationCount, receipt, latestBlockHash); - } - } else { - defer.eventEmitter.emit('confirmation', confirmationCount, receipt, latestBlockHash); - } - } - - if ((isPolling && block) || !isPolling) { - confirmationCount++; - } - canUnsubscribe = false; - - if (confirmationCount === method.transactionConfirmationBlocks + 1) { // add 1 so we account for conf 0 - sub.unsubscribe(); - defer.eventEmitter.removeAllListeners(); - } - } - - return receipt; - }) - // CHECK for CONTRACT DEPLOYMENT - .then(async function (receipt) { - - if (isContractDeployment && !promiseResolved) { - - if (!receipt.contractAddress) { - - if (canUnsubscribe) { - sub.unsubscribe(); - promiseResolved = true; - } - - utils._fireError( - errors.NoContractAddressFoundError(receipt), - defer.eventEmitter, - defer.reject, - null, - receipt - ); - return; - } - - var code; - try { - code = await _ethereumCall.getCode(receipt.contractAddress); - } catch(err){ - // ignore; - } - - if (!code) { - return; - } - - // If deployment is status.true and there was a real - // bytecode string, assume it was successful. - var deploymentSuccess = receipt.status === true && hasBytecode; - - if (deploymentSuccess || code.length > 2) { - defer.eventEmitter.emit('receipt', receipt); - - // if contract, return instance instead of receipt - if (method.extraFormatters && method.extraFormatters.contractDeployFormatter) { - defer.resolve(method.extraFormatters.contractDeployFormatter(receipt)); - } else { - defer.resolve(receipt); - } - - // need to remove listeners, as they aren't removed automatically when succesfull - if (canUnsubscribe) { - defer.eventEmitter.removeAllListeners(); - } - - } else { - utils._fireError( - errors.ContractCodeNotStoredError(receipt), - defer.eventEmitter, - defer.reject, - null, - receipt - ); - } - - if (canUnsubscribe) { - sub.unsubscribe(); - } - promiseResolved = true; - } - - return receipt; - }) - // CHECK for normal tx check for receipt only - .then(async function (receipt) { - if (!isContractDeployment && !promiseResolved) { - if (!receipt.outOfGas && - (!gasProvided || gasProvided !== receipt.gasUsed) && - (receipt.status === true || receipt.status === '0x1' || typeof receipt.status === 'undefined')) { - defer.eventEmitter.emit('receipt', receipt); - defer.resolve(receipt); - - // need to remove listeners, as they aren't removed automatically when succesfull - if (canUnsubscribe) { - defer.eventEmitter.removeAllListeners(); - } - - } else { - receiptJSON = JSON.stringify(receipt, null, 2); - - if (receipt.status === false || receipt.status === '0x0') { - try { - var revertMessage = null; - - if ( method.handleRevert && - (method.call === 'eth_sendTransaction' || method.call === 'eth_sendRawTransaction')) - { - var txReplayOptions = payload.params[0]; - - // If send was raw, fetch the transaction and reconstitute the - // original params so they can be replayed with `eth_call` - if (method.call === 'eth_sendRawTransaction'){ - var rawTransactionHex = payload.params[0]; - - var parsedTx = EthersTransactionUtils.parse(rawTransactionHex); - - txReplayOptions = formatters.inputTransactionFormatter({ - data: parsedTx.data, - to: parsedTx.to, - from: parsedTx.from, - gas: parsedTx.gasLimit.toHexString(), - gasPrice: parsedTx.gasPrice.toHexString(), - value: parsedTx.value.toHexString() - }); - } - - // Get revert reason string with eth_call - revertMessage = await method.getRevertReason( - txReplayOptions, - receipt.blockNumber - ); - - if (revertMessage) { // Only throw a revert error if a revert reason is existing - utils._fireError( - errors.TransactionRevertInstructionError(revertMessage.reason, revertMessage.signature, receipt), - defer.eventEmitter, - defer.reject, - null, - receipt - ); - } else { - throw false; // Throw false and let the try/catch statement handle the error correctly after - } - } else { - throw false; // Throw false and let the try/catch statement handle the error correctly after - } - } catch (error) { - // Throw an normal revert error if no revert reason is given or the detection of it is disabled - utils._fireError( - errors.TransactionRevertedWithoutReasonError(receipt), - defer.eventEmitter, - defer.reject, - null, - receipt - ); - } - } else { - // Throw OOG if status is not existing and provided gas and used gas are equal - utils._fireError( - errors.TransactionOutOfGasError(receipt), - defer.eventEmitter, - defer.reject, - null, - receipt - ); - } - } - - if (canUnsubscribe) { - sub.unsubscribe(); - } - promiseResolved = true; - } - - }) - // time out the transaction if not mined after 50 blocks - .catch(function () { - timeoutCount++; - - // check to see if we are http polling - if (!!isPolling) { - // polling timeout is different than transactionBlockTimeout blocks since we are triggering every second - if (timeoutCount - 1 >= method.transactionPollingTimeout) { - sub.unsubscribe(); - promiseResolved = true; - utils._fireError( - errors.TransactionError('Transaction was not mined within ' + method.transactionPollingTimeout + ' seconds, please make sure your transaction was properly sent. Be aware that it might still be mined!'), - defer.eventEmitter, - defer.reject - ); - } - } else { - if (timeoutCount - 1 >= method.transactionBlockTimeout) { - sub.unsubscribe(); - promiseResolved = true; - utils._fireError( - errors.TransactionError('Transaction was not mined within ' + method.transactionBlockTimeout + ' blocks, please make sure your transaction was properly sent. Be aware that it might still be mined!'), - defer.eventEmitter, - defer.reject - ); - } - } - }); - - - } else { - sub.unsubscribe(); - promiseResolved = true; - utils._fireError({ - message: 'Failed to subscribe to new newBlockHeaders to confirm the transaction receipts.', - data: err - }, defer.eventEmitter, defer.reject); - } - }; - - // start watching for confirmation depending on the support features of the provider - var startWatching = function (existingReceipt) { - const startInterval = () => { - intervalId = setInterval(checkConfirmation.bind(null, existingReceipt, true), 1000); - }; - - if (!this.requestManager.provider.on) { - startInterval(); - } else { - _ethereumCall.subscribe('newBlockHeaders', function (err, blockHeader, sub) { - if (err || !blockHeader) { - // fall back to polling - startInterval(); - } else { - checkConfirmation(existingReceipt, false, err, blockHeader, sub); - } - }); - } - }.bind(this); - - - // first check if we already have a confirmed transaction - _ethereumCall.getTransactionReceipt(result) - .then(function (receipt) { - if (receipt && receipt.blockHash) { - if (defer.eventEmitter.listeners('confirmation').length > 0) { - // We must keep on watching for new Blocks, if a confirmation listener is present - startWatching(receipt); - } - checkConfirmation(receipt, false); - - } else if (!promiseResolved) { - startWatching(); - } - }) - .catch(function () { - if (!promiseResolved) startWatching(); - }); - -}; - - -var getWallet = function (from, accounts) { - var wallet = null; - - // is index given - if (_.isNumber(from)) { - wallet = accounts.wallet[from]; - - // is account given - } else if (_.isObject(from) && from.address && from.privateKey) { - wallet = from; - - // search in wallet for address - } else { - wallet = accounts.wallet[from.toLowerCase()]; - } - - return wallet; -}; - -Method.prototype.buildCall = function () { - var method = this, - isSendTx = (method.call === 'eth_sendTransaction' || method.call === 'eth_sendRawTransaction'), // || method.call === 'personal_sendTransaction' - isCall = (method.call === 'eth_call'); - - // actual send function - var send = function () { - var defer = promiEvent(!isSendTx), - payload = method.toPayload(Array.prototype.slice.call(arguments)); - - // CALLBACK function - var sendTxCallback = function (err, result) { - if (method.handleRevert && isCall && method.abiCoder) { - var reasonData; - - // Ganache / Geth <= 1.9.13 return the reason data as a successful eth_call response - // Geth >= 1.9.15 attaches the reason data to an error object. - // Geth 1.9.14 is missing revert reason (https://github.com/ethereum/web3.js/issues/3520) - if (!err && method.isRevertReasonString(result)){ - reasonData = result.substring(10); - } else if (err && err.data){ - reasonData = err.data.substring(10); - } - - if (reasonData){ - var reason = method.abiCoder.decodeParameter('string', '0x' + reasonData); - var signature = 'Error(String)'; - - utils._fireError( - errors.RevertInstructionError(reason, signature), - defer.eventEmitter, - defer.reject, - payload.callback, - { - reason: reason, - signature: signature - } - ); - - return; - } - } - - try { - result = method.formatOutput(result); - } catch (e) { - err = e; - } - - if (result instanceof Error) { - err = result; - } - - if (!err) { - if (payload.callback) { - payload.callback(null, result); - } - } else { - if (err.error) { - err = err.error; - } - - return utils._fireError(err, defer.eventEmitter, defer.reject, payload.callback); - } - - // return PROMISE - if (!isSendTx) { - if (!err) { - defer.resolve(result); - } - - // return PROMIEVENT - } else { - defer.eventEmitter.emit('transactionHash', result); - - method._confirmTransaction(defer, result, payload); - } - - }; - - // SENDS the SIGNED SIGNATURE - var sendSignedTx = function (sign) { - - var signedPayload = _.extend({}, payload, { - method: 'eth_sendRawTransaction', - params: [sign.rawTransaction] - }); - - method.requestManager.send(signedPayload, sendTxCallback); - }; - - - var sendRequest = function (payload, method) { - - if (method && method.accounts && method.accounts.wallet && method.accounts.wallet.length) { - var wallet; - - // ETH_SENDTRANSACTION - if (payload.method === 'eth_sendTransaction') { - var tx = payload.params[0]; - wallet = getWallet((_.isObject(tx)) ? tx.from : null, method.accounts); - - - // If wallet was found, sign tx, and send using sendRawTransaction - if (wallet && wallet.privateKey) { - var txOptions = _.omit(tx, 'from'); - - if (method.defaultChain && !txOptions.chain) { - txOptions.chain = method.defaultChain; - } - - if (method.defaultHardfork && !txOptions.hardfork) { - txOptions.hardfork = method.defaultHardfork; - } - - if (method.defaultCommon && !txOptions.common) { - txOptions.common = method.defaultCommon; - } - - method.accounts.signTransaction(txOptions, wallet.privateKey) - .then(sendSignedTx) - .catch(function (err) { - if (_.isFunction(defer.eventEmitter.listeners) && defer.eventEmitter.listeners('error').length) { - try { - defer.eventEmitter.emit('error', err); - } catch (err) { - // Ignore userland error prevent it to bubble up within web3. - } - defer.eventEmitter.removeAllListeners(); - defer.eventEmitter.catch(function () { - }); - } - defer.reject(err); - }); - return; - } - - // ETH_SIGN - } else if (payload.method === 'eth_sign') { - var data = payload.params[1]; - wallet = getWallet(payload.params[0], method.accounts); - - // If wallet was found, sign tx, and send using sendRawTransaction - if (wallet && wallet.privateKey) { - var sign = method.accounts.sign(data, wallet.privateKey); - - if (payload.callback) { - payload.callback(null, sign.signature); - } - - defer.resolve(sign.signature); - return; - } - - - } - } - - - return method.requestManager.send(payload, sendTxCallback); - }; - - // Send the actual transaction - if (isSendTx && _.isObject(payload.params[0]) && typeof payload.params[0].gasPrice === 'undefined') { - - var getGasPrice = (new Method({ - name: 'getGasPrice', - call: 'eth_gasPrice', - params: 0 - })).createFunction(method.requestManager); - - getGasPrice(function (err, gasPrice) { - - if (gasPrice) { - payload.params[0].gasPrice = gasPrice; - } - - if (isSendTx) { - setTimeout(() => { - defer.eventEmitter.emit('sending', payload); - }, 0); - } - - sendRequest(payload, method); - }); - - } else { - if (isSendTx) { - setTimeout(() => { - defer.eventEmitter.emit('sending', payload); - }, 0); - } - - sendRequest(payload, method); - } - - if (isSendTx) { - setTimeout(() => { - defer.eventEmitter.emit('sent', payload); - }, 0); - } - - return defer.eventEmitter; - }; - - // necessary to attach things to the method - send.method = method; - // necessary for batch requests - send.request = this.request.bind(this); - return send; -}; - -/** - * Returns the revert reason string if existing or otherwise false. - * - * @method getRevertReason - * - * @param {Object} txOptions - * @param {Number} blockNumber - * - * @returns {Promise} - */ -Method.prototype.getRevertReason = function (txOptions, blockNumber) { - var self = this; - - return new Promise(function (resolve, reject) { - (new Method({ - name: 'call', - call: 'eth_call', - params: 2, - abiCoder: self.abiCoder, - handleRevert: true - })) - .createFunction(self.requestManager)(txOptions, utils.numberToHex(blockNumber)) - .then(function () { - resolve(false); - }) - .catch(function (error) { - if (error.reason) { - resolve({ - reason: error.reason, - signature: error.signature - }); - } else { - reject(error); - } - }); - }); -}; - -/** - * Checks if the given hex string is a revert message from the EVM - * - * @method isRevertReasonString - * - * @param {String} data - Hex string prefixed with 0x - * - * @returns {Boolean} - */ -Method.prototype.isRevertReasonString = function (data) { - return _.isString(data) && ((data.length - 2) / 2) % 32 === 4 && data.substring(0, 10) === '0x08c379a0'; -}; - -/** - * Should be called to create the pure JSONRPC request which can be used in a batch request - * - * @method request - * @return {Object} jsonrpc request - */ -Method.prototype.request = function () { - var payload = this.toPayload(Array.prototype.slice.call(arguments)); - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Method; diff --git a/packages/web3-core-method/tsconfig.json b/packages/web3-core-method/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-core-method/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-core-method/types/index.d.ts b/packages/web3-core-method/types/index.d.ts deleted file mode 100644 index 438b315ef4c..00000000000 --- a/packages/web3-core-method/types/index.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Samuel Furter - * @date 2018 - */ - -import {JsonRpcPayload} from 'web3-core-helpers'; - -export interface Method { - name: string; - call: string; - params?: number; - inputFormatter?: Array<(() => void) | null>; - outputFormatter?: () => void; - transformPayload?: () => void; - extraFormatters?: any; - defaultBlock?: string; - defaultAccount?: string | null; - abiCoder?: any; - handleRevert?: boolean; -} diff --git a/packages/web3-core-method/types/tsconfig.json b/packages/web3-core-method/types/tsconfig.json deleted file mode 100644 index 17889c4b6ce..00000000000 --- a/packages/web3-core-method/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-core-method": ["."] - } - } -} diff --git a/packages/web3-core-method/types/tslint.json b/packages/web3-core-method/types/tslint.json deleted file mode 100644 index 6429b0c446e..00000000000 --- a/packages/web3-core-method/types/tslint.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false - } -} diff --git a/packages/web3-core-promievent/README.md b/packages/web3-core-promievent/README.md deleted file mode 100644 index 0f43a02bc4e..00000000000 --- a/packages/web3-core-promievent/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# web3-core-promievent - -[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] - -This is a sub-package of [web3.js][repo]. - -This is the PromiEvent package used to return a EventEmitter mixed with a Promise to allow multiple final states as well as chaining. - -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-core-promievent -``` - -## Usage - -```js -const Web3PromiEvent = require('web3-core-promievent'); - -const myFunc = function(){ - const promiEvent = Web3PromiEvent(); - - setTimeout(function() { - promiEvent.eventEmitter.emit('done', 'Hello!'); - promiEvent.resolve('Hello!'); - }, 10); - - return promiEvent.eventEmitter; -}; - -// and run it -myFunc() -.on('done', console.log) -.then(console.log); -``` - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-core-promievent.svg -[npm-url]: https://npmjs.org/package/web3-core-promievent -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-core-promievent -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-core-promievent -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-core-promievent -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-core-promievent diff --git a/packages/web3-core-promievent/package-lock.json b/packages/web3-core-promievent/package-lock.json deleted file mode 100644 index 81cf42a6772..00000000000 --- a/packages/web3-core-promievent/package-lock.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "web3-core-promievent", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - } - } -} diff --git a/packages/web3-core-promievent/package.json b/packages/web3-core-promievent/package.json deleted file mode 100644 index b69a0fd1ccf..00000000000 --- a/packages/web3-core-promievent/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "web3-core-promievent", - "version": "1.3.0", - "description": "This package extends the EventEmitter with the Promise class to allow chaining as well as multiple final states of a function.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-core-promievent", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "main": "lib/index.js", - "scripts": { - "tsc": "tsc -b tsconfig.json" - }, - "dependencies": { - "eventemitter3": "4.0.4" - } -} diff --git a/packages/web3-core-promievent/src/index.js b/packages/web3-core-promievent/src/index.js deleted file mode 100644 index e1468349c35..00000000000 --- a/packages/web3-core-promievent/src/index.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2016 - */ - -"use strict"; - -var EventEmitter = require('eventemitter3'); - -/** - * This function generates a defer promise and adds eventEmitter functionality to it - * - * @method eventifiedPromise - */ -var PromiEvent = function PromiEvent(justPromise) { - var resolve, reject, - eventEmitter = new Promise(function() { - resolve = arguments[0]; - reject = arguments[1]; - }); - - if(justPromise) { - return { - resolve: resolve, - reject: reject, - eventEmitter: eventEmitter - }; - } - - // get eventEmitter - var emitter = new EventEmitter(); - - // add eventEmitter to the promise - eventEmitter._events = emitter._events; - eventEmitter.emit = emitter.emit; - eventEmitter.on = emitter.on; - eventEmitter.once = emitter.once; - eventEmitter.off = emitter.off; - eventEmitter.listeners = emitter.listeners; - eventEmitter.addListener = emitter.addListener; - eventEmitter.removeListener = emitter.removeListener; - eventEmitter.removeAllListeners = emitter.removeAllListeners; - - return { - resolve: resolve, - reject: reject, - eventEmitter: eventEmitter - }; -}; - -PromiEvent.resolve = function(value) { - var promise = PromiEvent(true); - promise.resolve(value); - return promise.eventEmitter; -}; - -module.exports = PromiEvent; diff --git a/packages/web3-core-promievent/tsconfig.json b/packages/web3-core-promievent/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-core-promievent/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-core-requestmanager/README.md b/packages/web3-core-requestmanager/README.md deleted file mode 100644 index 7ca0d9288e9..00000000000 --- a/packages/web3-core-requestmanager/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# web3-core-requestmanager - -[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] - -This is a sub-package of [web3.js][repo]. - -This requestmanager package is used by most [web3.js][repo] packages. - -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-core-requestmanager -``` - -## Usage - -```js -const Web3WsProvider = require('web3-providers-ws'); -const Web3RequestManager = require('web3-core-requestmanager'); - -const requestManager = new Web3RequestManager(new Web3WsProvider('ws://localhost:8546')); -``` - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-core-requestmanager.svg -[npm-url]: https://npmjs.org/package/web3-core-requestmanager -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-core-requestmanager -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-core-requestmanager -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-core-requestmanager -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-core-requestmanager - diff --git a/packages/web3-core-requestmanager/package-lock.json b/packages/web3-core-requestmanager/package-lock.json deleted file mode 100644 index e1923792279..00000000000 --- a/packages/web3-core-requestmanager/package-lock.json +++ /dev/null @@ -1,713 +0,0 @@ -{ - "name": "web3-core-requestmanager", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" - }, - "bufferutil": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.1.tgz", - "integrity": "sha512-xowrxvpxojqkagPcWRQVXZl0YXhRhAtBEIq3VoER1NH5Mw1n1o0ojdspp+GS2J//2gCVyrzQDApQ4unGF+QOoA==", - "requires": { - "node-gyp-build": "~3.7.0" - } - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "ethereum-bloom-filters": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.7.tgz", - "integrity": "sha512-cDcJJSJ9GMAcURiAWO3DxIEhTL/uWqlQnvgKpuYQzYPrt/izuGU+1ntQmHt0IRq6ADoSYHFnB+aCEFIldjhkMQ==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==" - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "is-generator-function": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", - "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==" - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" - }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "node-gyp-build": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.7.0.tgz", - "integrity": "sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==" - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.0.tgz", - "integrity": "sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "object.entries": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", - "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "has": "^1.0.3" - } - }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha1-VVQoTFQ6ImbXo48X4HOCH73jk80=", - "requires": { - "http-https": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "parse-headers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", - "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" - }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" - }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" - }, - "utf-8-validate": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.2.tgz", - "integrity": "sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw==", - "requires": { - "node-gyp-build": "~3.7.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "util": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.0.tgz", - "integrity": "sha512-pPSOFl7VLhZ7LO/SFABPraZEEurkJUWSMn3MuA/r3WQZc+Z1fqou2JqLSOZbCLl73EUIxuUVX8X4jkX2vfJeAA==", - "requires": { - "inherits": "2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "object.entries": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "web3-core-helpers": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.0.tgz", - "integrity": "sha512-+MFb1kZCrRctf7UYE7NCG4rGhSXaQJ/KF07di9GVK1pxy1K0+rFi61ZobuV1ky9uQp+uhhSPts4Zp55kRDB5sw==", - "requires": { - "underscore": "1.9.1", - "web3-eth-iban": "1.3.0", - "web3-utils": "1.3.0" - } - }, - "web3-eth-iban": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.0.tgz", - "integrity": "sha512-v9mZWhR4fPF17/KhHLiWir4YHWLe09O3B/NTdhWqw3fdAMJNztzMHGzgHxA/4fU+rhrs/FhDzc4yt32zMEXBZw==", - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.0" - } - }, - "web3-providers-http": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.3.0.tgz", - "integrity": "sha512-cMKhUI6PqlY/EC+ZDacAxajySBu8AzW8jOjt1Pe/mbRQgS0rcZyvLePGTTuoyaA8C21F8UW+EE5jj7YsNgOuqA==", - "requires": { - "web3-core-helpers": "1.3.0", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.3.0.tgz", - "integrity": "sha512-0CrLuRofR+1J38nEj4WsId/oolwQEM6Yl1sOt41S/6bNI7htdkwgVhSloFIMJMDFHtRw229QIJ6wIaKQz0X1Og==", - "requires": { - "oboe": "2.1.5", - "underscore": "1.9.1", - "web3-core-helpers": "1.3.0" - } - }, - "web3-providers-ws": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.3.0.tgz", - "integrity": "sha512-Im5MthhJnJst8nSoq0TgbyOdaiFQFa5r6sHPOVllhgIgViDqzbnlAFW9sNzQ0Q8VXPNfPIQKi9cOrHlSRNPjRw==", - "requires": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.3.0", - "websocket": "^1.0.32" - } - }, - "web3-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.3.0.tgz", - "integrity": "sha512-2mS5axFCbkhicmoDRuJeuo0TVGQDgC2sPi/5dblfVC+PMtX0efrb8Xlttv/eGkq7X4E83Pds34FH98TP2WOUZA==", - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - }, - "websocket": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.32.tgz", - "integrity": "sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "requires": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "requires": { - "xhr-request": "^1.1.0" - } - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", - "requires": { - "cookiejar": "^2.1.1" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - } - } -} diff --git a/packages/web3-core-requestmanager/package.json b/packages/web3-core-requestmanager/package.json deleted file mode 100644 index 799b6abfacf..00000000000 --- a/packages/web3-core-requestmanager/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "web3-core-requestmanager", - "version": "1.3.0", - "description": "Web3 module to handle requests to external providers.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-core-requestmanager", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "main": "lib/index.js", - "scripts": { - "tsc": "tsc -b tsconfig.json" - }, - "dependencies": { - "underscore": "1.9.1", - "util": "^0.12.0", - "web3-core-helpers": "1.3.0", - "web3-providers-http": "1.3.0", - "web3-providers-ipc": "1.3.0", - "web3-providers-ws": "1.3.0" - } -} diff --git a/packages/web3-core-requestmanager/src/batch.js b/packages/web3-core-requestmanager/src/batch.js deleted file mode 100644 index c47aaf7b9dd..00000000000 --- a/packages/web3-core-requestmanager/src/batch.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file batch.js - * @author Marek Kotewicz - * @date 2015 - */ - -"use strict"; - -var Jsonrpc = require('./jsonrpc'); -var errors = require('web3-core-helpers').errors; - -var Batch = function (requestManager) { - this.requestManager = requestManager; - this.requests = []; -}; - -/** - * Should be called to add create new request to batch request - * - * @method add - * @param {Object} jsonrpc requet object - */ -Batch.prototype.add = function (request) { - this.requests.push(request); -}; - -/** - * Should be called to execute batch request - * - * @method execute - */ -Batch.prototype.execute = function () { - var requests = this.requests; - this.requestManager.sendBatch(requests, function (err, results) { - results = results || []; - requests.map(function (request, index) { - return results[index] || {}; - }).forEach(function (result, index) { - if (requests[index].callback) { - if (result && result.error) { - return requests[index].callback(errors.ErrorResponse(result)); - } - - if (!Jsonrpc.isValidResponse(result)) { - return requests[index].callback(errors.InvalidResponse(result)); - } - - try { - requests[index].callback(null, requests[index].format ? requests[index].format(result.result) : result.result); - } catch (err) { - requests[index].callback(err); - } - } - }); - }); -}; - -module.exports = Batch; - diff --git a/packages/web3-core-requestmanager/src/givenProvider.js b/packages/web3-core-requestmanager/src/givenProvider.js deleted file mode 100644 index 2f57f1a51ce..00000000000 --- a/packages/web3-core-requestmanager/src/givenProvider.js +++ /dev/null @@ -1,91 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file givenProvider.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var givenProvider = null; - -// ADD GIVEN PROVIDER -/* jshint ignore:start */ -var global; -try { - global = Function('return this')(); -} catch (e) { - global = window; -} - -// EIP-1193: window.ethereum -if (typeof global.ethereum !== 'undefined') { - givenProvider = global.ethereum; - -// Legacy web3.currentProvider -} else if(typeof global.web3 !== 'undefined' && global.web3.currentProvider) { - - if(global.web3.currentProvider.sendAsync) { - global.web3.currentProvider.send = global.web3.currentProvider.sendAsync; - delete global.web3.currentProvider.sendAsync; - } - - // if connection is 'ipcProviderWrapper', add subscription support - if(!global.web3.currentProvider.on && - global.web3.currentProvider.connection && - global.web3.currentProvider.connection.constructor.name === 'ipcProviderWrapper') { - - global.web3.currentProvider.on = function (type, callback) { - - if(typeof callback !== 'function') - throw new Error('The second parameter callback must be a function.'); - - switch(type){ - case 'data': - this.connection.on('data', function(data) { - var result = ''; - - data = data.toString(); - - try { - result = JSON.parse(data); - } catch(e) { - return callback(new Error('Couldn\'t parse response data'+ data)); - } - - // notification - if(!result.id && result.method.indexOf('_subscription') !== -1) { - callback(null, result); - } - - }); - break; - - default: - this.connection.on(type, callback); - break; - } - }; - } - - givenProvider = global.web3.currentProvider; -} -/* jshint ignore:end */ - - -module.exports = givenProvider; diff --git a/packages/web3-core-requestmanager/src/index.js b/packages/web3-core-requestmanager/src/index.js deleted file mode 100644 index 635c57b1db0..00000000000 --- a/packages/web3-core-requestmanager/src/index.js +++ /dev/null @@ -1,350 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - - -const { callbackify } = require('util'); -var _ = require('underscore'); -var errors = require('web3-core-helpers').errors; -var Jsonrpc = require('./jsonrpc.js'); -var BatchManager = require('./batch.js'); -var givenProvider = require('./givenProvider.js'); - -/** - * It's responsible for passing messages to providers - * It's also responsible for polling the ethereum node for incoming messages - * Default poll timeout is 1 second - * Singleton - * - * @param {string|Object}provider - * @param {Net.Socket} net - * - * @constructor - */ -var RequestManager = function RequestManager(provider, net) { - this.provider = null; - this.providers = RequestManager.providers; - - this.setProvider(provider, net); - this.subscriptions = new Map(); -}; - - -RequestManager.givenProvider = givenProvider; - -RequestManager.providers = { - WebsocketProvider: require('web3-providers-ws'), - HttpProvider: require('web3-providers-http'), - IpcProvider: require('web3-providers-ipc') -}; - - -/** - * Should be used to set provider of request manager - * - * @method setProvider - * - * @param {Object} provider - * @param {net.Socket} net - * - * @returns void - */ -RequestManager.prototype.setProvider = function (provider, net) { - var _this = this; - - // autodetect provider - if (provider && typeof provider === 'string' && this.providers) { - - // HTTP - if (/^http(s)?:\/\//i.test(provider)) { - provider = new this.providers.HttpProvider(provider); - - // WS - } else if (/^ws(s)?:\/\//i.test(provider)) { - provider = new this.providers.WebsocketProvider(provider); - - // IPC - } else if (provider && typeof net === 'object' && typeof net.connect === 'function') { - provider = new this.providers.IpcProvider(provider, net); - - } else if (provider) { - throw new Error('Can\'t autodetect provider for "' + provider + '"'); - } - } - - - // reset the old one before changing, if still connected - if (this.provider && this.provider.connected) - this.clearSubscriptions(); - - this.provider = provider || null; - - // listen to incoming notifications - if (this.provider && this.provider.on) { - this.provider.on('data', function data(result, deprecatedResult) { - result = result || deprecatedResult; // this is for possible old providers, which may had the error first handler - - // if result is a subscription, call callback for that subscription - if (result.method && result.params && result.params.subscription && _this.subscriptions.has(result.params.subscription)) { - _this.subscriptions.get(result.params.subscription).callback(null, result.params.result); - } - }); - - // resubscribe if the provider has reconnected - this.provider.on('connect', function connect() { - _this.subscriptions.forEach(function (subscription) { - subscription.subscription.resubscribe(); - }); - }); - - // notify all subscriptions about the error condition - this.provider.on('error', function error(error) { - _this.subscriptions.forEach(function (subscription) { - subscription.callback(error); - }); - }); - - // notify all subscriptions about bad close conditions - const disconnect = function disconnect(event) { - if (!_this._isCleanCloseEvent(event) || _this._isIpcCloseError(event)) { - _this.subscriptions.forEach(function (subscription) { - subscription.callback(errors.ConnectionCloseError(event)); - _this.subscriptions.delete(subscription.subscription.id); - }); - - if (_this.provider && _this.provider.emit) { - _this.provider.emit('error', errors.ConnectionCloseError(event)); - } - } - if (_this.provider && _this.provider.emit) { - _this.provider.emit('end', event); - } - }; - // TODO: Remove close once the standard allows it - this.provider.on('close', disconnect); - this.provider.on('disconnect', disconnect); - - // TODO add end, timeout?? - } -}; - -/** - * Asynchronously send request to provider. - * Prefers to use the `request` method available on the provider as specified in [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193). - * If `request` is not available, falls back to `sendAsync` and `send` respectively. - * @method send - * @param {Object} data - * @param {Function} callback - */ -RequestManager.prototype.send = function (data, callback) { - callback = callback || function () { }; - - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - const { method, params } = data - - const jsonrpcPayload = Jsonrpc.toPayload(method, params); - const jsonrpcResultCallback = this._jsonrpcResultCallback(callback, jsonrpcPayload) - - if (this.provider.request) { - const callbackRequest = callbackify(this.provider.request.bind(this.provider)) - const requestArgs = { method, params } - callbackRequest(requestArgs, callback); - } else if (this.provider.sendAsync) { - this.provider.sendAsync(jsonrpcPayload, jsonrpcResultCallback); - } else if (this.provider.send) { - this.provider.send(jsonrpcPayload, jsonrpcResultCallback); - } else { - throw new Error('Provider does not have a request or send method to use.'); - } -}; - -/** - * Asynchronously send batch request. - * Only works if provider supports batch methods through `sendAsync` or `send`. - * @method sendBatch - * @param {Array} data - array of payload objects - * @param {Function} callback - */ -RequestManager.prototype.sendBatch = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.toBatchPayload(data); - this.provider[this.provider.sendAsync ? 'sendAsync' : 'send'](payload, function (err, results) { - if (err) { - return callback(err); - } - - if (!_.isArray(results)) { - return callback(errors.InvalidResponse(results)); - } - - callback(null, results); - }); -}; - - -/** - * Waits for notifications - * - * @method addSubscription - * @param {Subscription} subscription the subscription - * @param {String} type the subscription namespace (eth, personal, etc) - * @param {Function} callback the callback to call for incoming notifications - */ -RequestManager.prototype.addSubscription = function (subscription, callback) { - if (this.provider.on) { - this.subscriptions.set( - subscription.id, - { - callback: callback, - subscription: subscription - } - ); - } else { - throw new Error('The provider doesn\'t support subscriptions: ' + this.provider.constructor.name); - } -}; - -/** - * Waits for notifications - * - * @method removeSubscription - * @param {String} id the subscription id - * @param {Function} callback fired once the subscription is removed - */ -RequestManager.prototype.removeSubscription = function (id, callback) { - if (this.subscriptions.has(id)) { - var type = this.subscriptions.get(id).subscription.options.type; - - // remove subscription first to avoid reentry - this.subscriptions.delete(id); - - // then, try to actually unsubscribe - this.send({ - method: type + '_unsubscribe', - params: [id] - }, callback); - - return; - } - - if (typeof callback === 'function') { - // call the callback if the subscription was already removed - callback(null); - } -}; - -/** - * Should be called to reset the subscriptions - * - * @method reset - * - * @returns {boolean} - */ -RequestManager.prototype.clearSubscriptions = function (keepIsSyncing) { - try { - var _this = this; - - // uninstall all subscriptions - if (this.subscriptions.size > 0) { - this.subscriptions.forEach(function (value, id) { - if (!keepIsSyncing || value.name !== 'syncing') - _this.removeSubscription(id); - }); - } - - // reset notification callbacks etc. - if (this.provider.reset) - this.provider.reset(); - - return true - } catch (e) { - throw new Error(`Error while clearing subscriptions: ${e}`) - } -}; - -/** - * Evaluates WS close event - * - * @method _isCleanClose - * - * @param {CloseEvent | boolean} event WS close event or exception flag - * - * @returns {boolean} - */ -RequestManager.prototype._isCleanCloseEvent = function (event) { - return typeof event === 'object' && ([1000].includes(event.code) || event.wasClean === true); -}; - -/** - * Detects Ipc close error. The node.net module emits ('close', isException) - * - * @method _isIpcCloseError - * - * @param {CloseEvent | boolean} event WS close event or exception flag - * - * @returns {boolean} - */ -RequestManager.prototype._isIpcCloseError = function (event) { - return typeof event === 'boolean' && event; -}; - -/** - * The jsonrpc result callback for RequestManager.send - * - * @method _jsonrpcResultCallback - * - * @param {Function} callback the callback to use - * @param {Object} payload the jsonrpc payload - * - * @returns {Function} return callback of form (err, result) - * - */ -RequestManager.prototype._jsonrpcResultCallback = function (callback, payload) { - return function (err, result) { - if (result && result.id && payload.id !== result.id) { - return callback(new Error(`Wrong response id ${result.id} (expected: ${payload.id}) in ${JSON.stringify(payload)}`)); - } - - if (err) { - return callback(err); - } - - if (result && result.error) { - return callback(errors.ErrorResponse(result)); - } - - if (!Jsonrpc.isValidResponse(result)) { - return callback(errors.InvalidResponse(result)); - } - - callback(null, result.result); - } -}; - -module.exports = { - Manager: RequestManager, - BatchManager: BatchManager -}; diff --git a/packages/web3-core-requestmanager/src/jsonrpc.js b/packages/web3-core-requestmanager/src/jsonrpc.js deleted file mode 100644 index dfb90184203..00000000000 --- a/packages/web3-core-requestmanager/src/jsonrpc.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file jsonrpc.js - * @authors: - * Fabian Vogelsteller - * Marek Kotewicz - * Aaron Kumavis - * @date 2015 - */ - -"use strict"; - -// Initialize Jsonrpc as a simple object with utility functions. -var Jsonrpc = { - messageId: 0 -}; - -/** - * Should be called to valid json create payload object - * - * @method toPayload - * @param {Function} method of jsonrpc call, required - * @param {Array} params, an array of method params, optional - * @returns {Object} valid jsonrpc payload object - */ -Jsonrpc.toPayload = function (method, params) { - if (!method) { - throw new Error('JSONRPC method should be specified for params: "'+ JSON.stringify(params) +'"!'); - } - - // advance message ID - Jsonrpc.messageId++; - - return { - jsonrpc: '2.0', - id: Jsonrpc.messageId, - method: method, - params: params || [] - }; -}; - -/** - * Should be called to check if jsonrpc response is valid - * - * @method isValidResponse - * @param {Object} - * @returns {Boolean} true if response is valid, otherwise false - */ -Jsonrpc.isValidResponse = function (response) { - return Array.isArray(response) ? response.every(validateSingleMessage) : validateSingleMessage(response); - - function validateSingleMessage(message){ - return !!message && - !message.error && - message.jsonrpc === '2.0' && - (typeof message.id === 'number' || typeof message.id === 'string') && - message.result !== undefined; // only undefined is not valid json object - } -}; - -/** - * Should be called to create batch payload object - * - * @method toBatchPayload - * @param {Array} messages, an array of objects with method (required) and params (optional) fields - * @returns {Array} batch payload - */ -Jsonrpc.toBatchPayload = function (messages) { - return messages.map(function (message) { - return Jsonrpc.toPayload(message.method, message.params); - }); -}; - -module.exports = Jsonrpc; - diff --git a/packages/web3-core-requestmanager/tsconfig.json b/packages/web3-core-requestmanager/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-core-requestmanager/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-core-subscriptions/README.md b/packages/web3-core-subscriptions/README.md deleted file mode 100644 index c41b3ded74f..00000000000 --- a/packages/web3-core-subscriptions/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# web3-core-subscriptions - -[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url]tus][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] - -This is a sub-package of [web3.js][repo] - -This subscriptions package is used within some [web3.js][repo] packages. - -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-core-subscriptions -``` - -## Usage - -```js -const Web3Subscriptions = require('web3-core-subscriptions'); - -const sub = new Web3Subscriptions({ - name: 'subscribe', - type: 'eth', - subscriptions: { - 'newBlockHeaders': { - subscriptionName: 'newHeads', - params: 0, - outputFormatter: formatters.outputBlockFormatter - }, - 'pendingTransactions': { - params: 0, - outputFormatter: formatters.outputTransactionFormatter - } - } -}); -sub.attachToObject(myCoolLib); - -myCoolLib.subscribe('newBlockHeaders', function(){ ... }); -``` - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-core-subscriptions.svg -[npm-url]: https://npmjs.org/package/web3-core-subscriptions -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-core-subscriptions -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-core-subscriptions -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-core-subscriptions -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-core-subscriptions - diff --git a/packages/web3-core-subscriptions/package-lock.json b/packages/web3-core-subscriptions/package-lock.json deleted file mode 100644 index 3c4287dac77..00000000000 --- a/packages/web3-core-subscriptions/package-lock.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "web3-core-subscriptions", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-core-subscriptions/package.json b/packages/web3-core-subscriptions/package.json deleted file mode 100644 index 65031375d64..00000000000 --- a/packages/web3-core-subscriptions/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "web3-core-subscriptions", - "version": "1.3.0", - "description": "Manages web3 subscriptions. This is an internal package.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-core-subscriptions", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.3.0" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } -} diff --git a/packages/web3-core-subscriptions/src/index.js b/packages/web3-core-subscriptions/src/index.js deleted file mode 100644 index 113f6757fd9..00000000000 --- a/packages/web3-core-subscriptions/src/index.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var Subscription = require('./subscription.js'); - - -var Subscriptions = function Subscriptions(options) { - this.name = options.name; - this.type = options.type; - this.subscriptions = options.subscriptions || {}; - this.requestManager = null; -}; - - -Subscriptions.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - - -Subscriptions.prototype.attachToObject = function (obj) { - var func = this.buildCall(); - var name = this.name.split('.'); - if (name.length > 1) { - obj[name[0]] = obj[name[0]] || {}; - obj[name[0]][name[1]] = func; - } else { - obj[name[0]] = func; - } -}; - - -Subscriptions.prototype.buildCall = function() { - var _this = this; - - return function(){ - if(!_this.subscriptions[arguments[0]]) { - console.warn('Subscription '+ JSON.stringify(arguments[0]) +' doesn\'t exist. Subscribing anyway.'); - } - - var subscription = new Subscription({ - subscription: _this.subscriptions[arguments[0]] || {}, // Subscript might not exist - requestManager: _this.requestManager, - type: _this.type - }); - - return subscription.subscribe.apply(subscription, arguments); - }; -}; - - -module.exports = { - subscriptions: Subscriptions, - subscription: Subscription -}; diff --git a/packages/web3-core-subscriptions/src/subscription.js b/packages/web3-core-subscriptions/src/subscription.js deleted file mode 100644 index 9303b98401d..00000000000 --- a/packages/web3-core-subscriptions/src/subscription.js +++ /dev/null @@ -1,336 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file subscription.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var _ = require('underscore'); -var errors = require('web3-core-helpers').errors; -var EventEmitter = require('eventemitter3'); -var formatters = require('web3-core-helpers').formatters; - -function Subscription(options) { - EventEmitter.call(this); - - this.id = null; - this.callback = _.identity; - this.arguments = null; - this.lastBlock = null; // "from" block tracker for backfilling events on reconnection - - this.options = { - subscription: options.subscription, - type: options.type, - requestManager: options.requestManager - }; -} - -// INHERIT -Subscription.prototype = Object.create(EventEmitter.prototype); -Subscription.prototype.constructor = Subscription; - - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ - -Subscription.prototype._extractCallback = function (args) { - if (_.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Should be called to check if the number of arguments is correct - * - * @method validateArgs - * @param {Array} arguments - * @throws {Error} if it is not - */ - -Subscription.prototype._validateArgs = function (args) { - var subscription = this.options.subscription; - - if(!subscription) - subscription = {}; - - if(!subscription.params) - subscription.params = 0; - - if (args.length !== subscription.params) { - throw errors.InvalidNumberOfParams( - args.length, - subscription.params, - subscription.subscriptionName - ); - } -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ - -Subscription.prototype._formatInput = function (args) { - var subscription = this.options.subscription; - - if (!subscription) { - return args; - } - - if (!subscription.inputFormatter) { - return args; - } - - var formattedArgs = subscription.inputFormatter.map(function (formatter, index) { - return formatter ? formatter(args[index]) : args[index]; - }); - - return formattedArgs; -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param result {Object} - * @return {Object} - */ - -Subscription.prototype._formatOutput = function (result) { - var subscription = this.options.subscription; - - return (subscription && subscription.outputFormatter && result) ? subscription.outputFormatter(result) : result; -}; - -/** - * Should create payload from given input args - * - * @method toPayload - * @param {Array} args - * @return {Object} - */ -Subscription.prototype._toPayload = function (args) { - var params = []; - this.callback = this._extractCallback(args) || _.identity; - - if (!this.subscriptionMethod) { - this.subscriptionMethod = args.shift(); - - // replace subscription with given name - if (this.options.subscription.subscriptionName) { - this.subscriptionMethod = this.options.subscription.subscriptionName; - } - } - - if (!this.arguments) { - this.arguments = this._formatInput(args); - this._validateArgs(this.arguments); - args = []; // make empty after validation - - } - - // re-add subscriptionName - params.push(this.subscriptionMethod); - params = params.concat(this.arguments); - - - if (args.length) { - throw new Error('Only a callback is allowed as parameter on an already instantiated subscription.'); - } - - return { - method: this.options.type + '_subscribe', - params: params - }; -}; - -/** - * Unsubscribes and clears callbacks - * - * @method unsubscribe - * @return {Object} - */ -Subscription.prototype.unsubscribe = function(callback) { - this.options.requestManager.removeSubscription(this.id, callback); - this.id = null; - this.lastBlock = null; - this.removeAllListeners(); -}; - -/** - * Subscribes and watches for changes - * - * @method subscribe - * @param {String} subscription the subscription - * @param {Object} options the options object with address topics and fromBlock - * @return {Object} - */ -Subscription.prototype.subscribe = function() { - var _this = this; - var args = Array.prototype.slice.call(arguments); - var payload = this._toPayload(args); - - if(!payload) { - return this; - } - - // throw error, if provider is not set - if(!this.options.requestManager.provider) { - setTimeout(function(){ - var err1 = new Error('No provider set.'); - _this.callback(err1, null, _this); - _this.emit('error', err1); - },0); - - return this; - } - - // throw error, if provider doesnt support subscriptions - if(!this.options.requestManager.provider.on) { - setTimeout(function(){ - var err2 = new Error( - 'The current provider doesn\'t support subscriptions: ' + - _this.options.requestManager.provider.constructor.name - ); - _this.callback(err2, null, _this); - _this.emit('error', err2); - },0); - - return this; - } - - // Re-subscription only: continue fetching from the last block we received. - // a dropped connection may have resulted in gaps in the logs... - if (this.lastBlock && _.isObject(this.options.params)){ - payload.params[1] = this.options.params; - payload.params[1].fromBlock = formatters.inputBlockNumberFormatter(this.lastBlock + 1); - } - - // if id is there unsubscribe first - if (this.id) { - this.unsubscribe(); - } - - // store the params in the options object - this.options.params = payload.params[1]; - - // get past logs, if fromBlock is available - if(payload.params[0] === 'logs' && _.isObject(payload.params[1]) && payload.params[1].hasOwnProperty('fromBlock') && isFinite(payload.params[1].fromBlock)) { - // send the subscription request - - // copy the params to avoid race-condition with deletion below this block - var blockParams = Object.assign({}, payload.params[1]); - - this.options.requestManager.send({ - method: 'eth_getLogs', - params: [blockParams] - }, function (err, logs) { - if(!err) { - logs.forEach(function(log){ - var output = _this._formatOutput(log); - _this.callback(null, output, _this); - _this.emit('data', output); - }); - - // TODO subscribe here? after the past logs? - - } else { - setTimeout(function(){ - _this.callback(err, null, _this); - _this.emit('error', err); - },0); - } - }); - } - - // create subscription - // TODO move to separate function? so that past logs can go first? - - if(typeof payload.params[1] === 'object') - delete payload.params[1].fromBlock; - - this.options.requestManager.send(payload, function (err, result) { - if(!err && result) { - _this.id = result; - _this.method = payload.params[0]; - _this.emit('connected', result); - - // call callback on notifications - _this.options.requestManager.addSubscription(_this, function(error, result) { - if (!error) { - if (!_.isArray(result)) { - result = [result]; - } - - result.forEach(function(resultItem) { - var output = _this._formatOutput(resultItem); - - // Track current block (for gaps introduced by dropped connections) - _this.lastBlock = _.isObject(output) ? output.blockNumber : null; - - if (_.isFunction(_this.options.subscription.subscriptionHandler)) { - return _this.options.subscription.subscriptionHandler.call(_this, output); - } else { - _this.emit('data', output); - } - - // call the callback, last so that unsubscribe there won't affect the emit above - _this.callback(null, output, _this); - }); - } else { - _this.callback(error, false, _this); - _this.emit('error', error); - } - }); - } else { - setTimeout(function(){ - _this.callback(err, false, _this); - _this.emit('error', err); - },0); - } - }); - - // return an object to cancel the subscription - return this; -}; - -/** - * Resubscribe - * - * @method resubscribe - * - * @returns {void} - */ -Subscription.prototype.resubscribe = function () { - this.options.requestManager.removeSubscription(this.id); // unsubscribe - this.id = null; - - this.subscribe(this.callback); -}; - -module.exports = Subscription; diff --git a/packages/web3-core-subscriptions/tsconfig.json b/packages/web3-core-subscriptions/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-core-subscriptions/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-core-subscriptions/types/index.d.ts b/packages/web3-core-subscriptions/types/index.d.ts deleted file mode 100644 index 634fc620868..00000000000 --- a/packages/web3-core-subscriptions/types/index.d.ts +++ /dev/null @@ -1,81 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Samuel Furter - * @date 2019 - */ - -export class Subscription { - constructor(options: SubscriptionOptions); - - id: string; - options: SubscriptionOptions; - callback: () => void; - arguments: any; - lastBlock: number; - - subscribe(callback?: (error: Error, result: T) => void): Subscription; - - unsubscribe( - callback?: (error: Error, result: boolean) => void - ): Promise; - - on(type: 'data', handler: (data: T) => void): Subscription; - - on(type: 'changed', handler: (data: T) => void): Subscription; - - on(type: 'connected', handler: (subscriptionId: string) => void): Subscription; - - on(type: 'error', handler: (data: Error) => void): Subscription; -} - -export class Subscriptions { - constructor(options: SubscriptionsOptions); - - name: string; - type: string; - subscriptions: SubscriptionsModel; - readonly requestManager: any; - - attachToObject(obj: any): void; - - setRequestManager(requestManager: any): void; - - buildCall(): () => any; -} - -export interface SubscriptionOptions { - subscription: string; - type: string; - requestManager: any; -} - -export interface SubscriptionsOptions { - name: string; - type: string; - subscriptions: SubscriptionsModel; -} - -export interface SubscriptionsModel { - [name: string]: SubscriptionModel; -} - -export interface SubscriptionModel { - subscriptionName: string; - params: number; - outputFormatter: () => void; - inputFormatter: Array<() => void>; - subscriptionHandler: () => void; -} diff --git a/packages/web3-core-subscriptions/types/tests/subscriptions.tests.ts b/packages/web3-core-subscriptions/types/tests/subscriptions.tests.ts deleted file mode 100644 index 0d4f8ce592f..00000000000 --- a/packages/web3-core-subscriptions/types/tests/subscriptions.tests.ts +++ /dev/null @@ -1,91 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file subscriptions-tests.ts - * @author Samuel Furter - * @date 2019 - */ - -import {Subscriptions, Subscription} from 'web3-core-subscriptions'; - -const subscriptions = new Subscriptions({ - name: '', - type: '', - subscriptions: - { - test: { - subscriptionName: '', - inputFormatter: [() => {}], - outputFormatter: () => {}, - params: 0, - subscriptionHandler: () => {} - } - } -}); - -// $ExpectType string -subscriptions.name; - -// $ExpectType string -subscriptions.type; - -// $ExpectType SubscriptionsModel -subscriptions.subscriptions; - -// $ExpectType void -subscriptions.setRequestManager({}); - -// $ExpectType void -subscriptions.attachToObject({}); - -// $ExpectType () => any -subscriptions.buildCall(); - -const subscription = new Subscription({subscription: '', type: '', requestManager: null}); - -// $ExpectType string -subscription.id; - -// $ExpectType () => void -subscription.callback; - -// $ExpectType any -subscription.arguments; - -// $ExpectType SubscriptionOptions -subscription.options; - -// $ExpectType number -subscription.lastBlock; - -// $ExpectType Subscription -subscription.subscribe(() => {}); - -// $ExpectType Promise -subscription.unsubscribe(() => {}); - -// $ExpectType Subscription -subscription.on('data', () => {}); - -// $ExpectType Subscription -subscription.on('changed', () => {}); - -// $ExpectType Subscription -subscription.on('error', () => {}); - -// $ExpectType Subscription -subscription.on('connected', () => {}); diff --git a/packages/web3-core-subscriptions/types/tsconfig.json b/packages/web3-core-subscriptions/types/tsconfig.json deleted file mode 100644 index 4fa0faa5998..00000000000 --- a/packages/web3-core-subscriptions/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-core-subscriptions": ["."] - } - } -} diff --git a/packages/web3-core-subscriptions/types/tslint.json b/packages/web3-core-subscriptions/types/tslint.json deleted file mode 100644 index 2a4469808b0..00000000000 --- a/packages/web3-core-subscriptions/types/tslint.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false, - "unified-signatures": false, - "no-redundant-jsdoc": false - } -} diff --git a/packages/web3-core/.eslintignore b/packages/web3-core/.eslintignore new file mode 100644 index 00000000000..e3d7e665285 --- /dev/null +++ b/packages/web3-core/.eslintignore @@ -0,0 +1,4 @@ +dist +lib +jest.config.js +.eslintrc.js diff --git a/packages/web3-core/.eslintrc.js b/packages/web3-core/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-core/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-core/.gitignore b/packages/web3-core/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-core/.npmignore b/packages/web3-core/.npmignore new file mode 100644 index 00000000000..0b1a9d71c23 --- /dev/null +++ b/packages/web3-core/.npmignore @@ -0,0 +1,26 @@ +.babelrc +.eslintignore +.eslintrc.json +.eslintrc.js +.gitignore +.lintstagedrc.json +.nycrc +.prettierrc.json +.prettierignore +cypress.json +index.html +Jenkinsfile* +*.log + +.nyc_output/ +coverage/ +benchmark/ +.coverage/ +cypress/ +fixtures/ +tmp/ +logs/ +test/ +scripts/ +browsertest/ +examples/ diff --git a/packages/web3-core/.prettierignore b/packages/web3-core/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-core/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-core/.prettierrc.json b/packages/web3-core/.prettierrc.json new file mode 100644 index 00000000000..7b23ef55098 --- /dev/null +++ b/packages/web3-core/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": true, + "arrowParens": "avoid" +} diff --git a/packages/web3-core/CHANGELOG.md b/packages/web3-core/CHANGELOG.md new file mode 100644 index 00000000000..2075f77082d --- /dev/null +++ b/packages/web3-core/CHANGELOG.md @@ -0,0 +1,194 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [4.0.1-alpha.1] + +### Added + +- If the response error was `execution reverted`, raise `ContractExecutionError` and pass the response error to it in order to be set as `innerError` (this innerError will be decoded at web3-eth-contract if its ABI was provided according to EIP-838). (#5434) +- `registerPlugin` method to `Web3Context` (#5393) +- `Web3PluginBase` exported abstract class (#5393) +- `Web3EthPluginBase` exported abstract class (#5393) + +### Changed + +- Default value for `API` generic for `Web3ContextObject` from `any` to `unknown` (#5393) +- Default value for `API` generic for `Web3ContextInitOptions` from `any` to `unknown` (#5393) +- Added validation when `defaultHardfork` and `defaultCommon.hardfork` are different in web3config +- Added validation when `defaultChain` and `defaultCommon.basechain` are different in web3config +- Added a new configuration variable `enableExperimentalFeatures`. (#5481) + +## [4.0.1-alpha.2] + +### Fixed + +- Make the `request` method of `EIP1193Provider` class, compatible with EIP 1193 (#5591) + +## [4.0.1-alpha.3] + +### Changed + +- Updated dependencies (#5725) + +## [4.0.1-alpha.4] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +## [4.0.1-alpha.5] + +### Changed + +- web3.js dependencies (#5757) + +## [4.0.1-rc.0] + +### Added + +- Added rpc exception codes following eip-1474 as an experimental feature (if `useRpcCallSpecification` at `enableExperimentalFeatures` is `true`) (#5525) +- Added support of `safe` and `finalized` block tags (#5823) + +## [4.0.1-rc.1] + +### Added + +- Added hybrid build (ESM and CJS) of library (#5904) +- Added source files (#5956) + +### Changed + +- If a transaction object with a `data` property is passed to `txInputOptionsFormatter`, it will now be replaced with `input` (#5915) +- The types `TransactionTypeParser` and `TransactionBuilder` are now utilizing the type `Transaction` for the transaction object. (#5993) +- No need for polyfilling nodejs `net` and `fs` modules (#5978) +- Removed IPC provider dependency, IPC path is no longer viable provider. If you wanna use IPC, please install `web3-providers-ipc` and instantiate provider yourself (#5978) + +### Removed + +- `getConfig` method from `Web3Config` class, `config` is now public and accessible using `Web3Config.config` (#5950) +- Error param in the `messageListener` in subscription was removed (triggered by `.on('data')` or `.on('message')`) to properly support all providers. (#6082) + +## [4.0.1-rc.2] + +### Changed + +- Replaced Buffer for Uint8Array (#6004) + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Added + +- Web3Subscription constructor accept a Subscription Manager (as an alternative to accepting Request Manager that is now marked marked as deprecated) (#6210) + +### Changed + +- Web3Subscription constructor overloading that accept a Request Manager is marked as deprecated (#6210) + +### Fixed + +- Fixed Batch requests erroring out on one request (#6164) +- Fixed the issue: Subscribing to multiple blockchain events causes every listener to be fired for every registered event (#6210) +- Fixed the issue: Unsubscribe at a Web3Subscription class will still have the id of the subscription at the Web3SubscriptionManager (#6210) +- Fixed the issue: A call to the provider is made for every subscription object (#6210) + +## [4.0.3] + +### Added + +- Expose `subscriptionManager` as a `protected get` at `Web3Subscription` to be able to use it inside custom subscriptions, if needed. (#6285) + +### Changed + +- Dependencies updated + +## [4.1.0] + +### Changed + +- No need to pass `CommonSubscriptionEvents &` at every child class of `Web3Subscription` (#6262) +- Implementation of `_processSubscriptionResult` and `_processSubscriptionError` has been written in the base class `Web3Subscription` and maid `public`. (#6262) +- A new optional protected method `formatSubscriptionResult` could be used to customize data formatting instead of re-implementing `_processSubscriptionResult`. (#6262) +- No more needed to pass `CommonSubscriptionEvents & ` for the first generic parameter of `Web3Subscription` when inheriting from it. (#6262) + +### Fixed + +- Fixed the issue: "Version 4.x does not fire connected event for subscriptions. #6252". (#6262) + +### Added + +- Added minimum support of web3.extend function + +## [4.1.1] + +### Fixed + +- Fixed rpc errors not being sent as an inner error when using the `send` method on request manager (#6300). + +### Added + +- To fix issue #6190, added the functionality to introduce different timeout value for Web3. (#6336) + +## [4.2.0] + +### Added + +- Added to `Web3Config` property `contractDataInputFill` allowing users to have the choice using property `data`, `input` or `both` for contract methods to be sent to the RPC provider when creating contracts. (#6377) (#6400) + +## [4.3.0] + +### Changed + +- defaultTransactionType is now type 0x2 instead of 0x0 (#6282) +- Allows formatter to parse large base fee (#6456) +- The package now uses `EventEmitter` from `web3-utils` that works in node envrioment as well as in the browser. (#6398) + +### Fixed + +- Fix the issue: "Uncaught TypeError: Class extends value undefined is not a constructor or null #6371". (#6398) + +## [Unreleased] diff --git a/packages/web3-core/README.md b/packages/web3-core/README.md index 7b1269b67e9..a5a2110742c 100644 --- a/packages/web3-core/README.md +++ b/packages/web3-core/README.md @@ -1,48 +1,59 @@ -# web3-core +

+ web3.js +

-[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +# web3.js - Web3 Core -This is a sub-package of [web3.js][repo]. +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] -The core package contains core functions for [web3.js][repo] packages. +This is a sub-package of [web3.js][repo]. -Please read the [documentation][docs] for more. +`web3-core` package contains core functions for [web3.js][repo] packages. ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3-core) or using [Yarn](https://yarnpkg.com/package/web3-core) + +### Using NPM ```bash npm install web3-core ``` -## Usage +### Using Yarn + +```bash +yarn add web3-core +``` + +## Getting Started -```js -const core = require('web3-core'); +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) -const CoolLib = function CoolLib() { - // sets _requestmanager and adds basic functions - core.packageInit(this, arguments); -}; +## Prerequisites -CoolLib.providers; -CoolLib.givenProvider; -CoolLib.setProvider(); -CoolLib.BatchRequest(); -CoolLib.extend(); -... -``` +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) -## Types +## Package.json Scripts -All the TypeScript typings are placed in the `types` folder. +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-core.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-core +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-core%2Fpackage.json [npm-url]: https://npmjs.org/package/web3-core -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-core -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-core -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-core -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-core +[downloads-image]: https://img.shields.io/npm/dm/web3-core?label=npm%20downloads diff --git a/packages/web3-core/assets/logo/web3js.ai b/packages/web3-core/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-core/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-core/assets/logo/web3js.jpg b/packages/web3-core/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-core/assets/logo/web3js.jpg differ diff --git a/packages/web3-core/assets/logo/web3js.svg b/packages/web3-core/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-core/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-core/package-lock.json b/packages/web3-core/package-lock.json deleted file mode 100644 index 61494941ead..00000000000 --- a/packages/web3-core/package-lock.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "web3-core", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "12.12.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.26.tgz", - "integrity": "sha512-UmUm94/QZvU5xLcUlNR8hA7Ac+fGpO1EG/a8bcWVz0P0LqtxFmun9Y2bbtuckwGboWJIT70DoWq1r3hb56n3DA==" - }, - "bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" - }, - "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", - "dev": true - } - } -} diff --git a/packages/web3-core/package.json b/packages/web3-core/package.json index 66a822489ab..215f86bdff0 100644 --- a/packages/web3-core/package.json +++ b/packages/web3-core/package.json @@ -1,29 +1,72 @@ { - "name": "web3-core", - "version": "1.3.0", - "description": "Web3 core tools for sub-packages. This is an internal package.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-core", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "@types/bn.js": "^4.11.5", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.3.0", - "web3-core-method": "1.3.0", - "web3-core-requestmanager": "1.3.0", - "web3-utils": "1.3.0" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3-core", + "version": "4.3.0", + "description": "Web3 core tools for sub-packages. This is an internal package.", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests" + }, + "dependencies": { + "web3-errors": "^1.1.3", + "web3-eth-iban": "^4.0.7", + "web3-providers-http": "^4.1.0", + "web3-providers-ws": "^4.0.7", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + }, + "optionalDependencies": { + "web3-providers-ipc": "^4.0.7" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@types/jest-when": "^3.5.2", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "jest-when": "^3.5.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + } } diff --git a/packages/web3-core/src/extend.js b/packages/web3-core/src/extend.js deleted file mode 100644 index c8b787848fd..00000000000 --- a/packages/web3-core/src/extend.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file extend.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - - -var formatters = require('web3-core-helpers').formatters; -var Method = require('web3-core-method'); -var utils = require('web3-utils'); - - -var extend = function (pckg) { - /* jshint maxcomplexity:5 */ - var ex = function (extension) { - - var extendedObject; - if (extension.property) { - if (!pckg[extension.property]) { - pckg[extension.property] = {}; - } - extendedObject = pckg[extension.property]; - } else { - extendedObject = pckg; - } - - if (extension.methods) { - extension.methods.forEach(function (method) { - if(!(method instanceof Method)) { - method = new Method(method); - } - - method.attachToObject(extendedObject); - method.setRequestManager(pckg._requestManager); - }); - } - - return pckg; - }; - - ex.formatters = formatters; - ex.utils = utils; - ex.Method = Method; - - return ex; -}; - - - -module.exports = extend; - diff --git a/packages/web3-core/src/formatters.ts b/packages/web3-core/src/formatters.ts new file mode 100644 index 00000000000..b6d6af3bd3b --- /dev/null +++ b/packages/web3-core/src/formatters.ts @@ -0,0 +1,551 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { FormatterError } from 'web3-errors'; +import { Iban } from 'web3-eth-iban'; +import { + BlockTags, + Filter, + Numbers, + Topic, + BlockInput, + BlockOutput, + LogsInput, + LogsOutput, + Mutable, + PostInput, + PostOutput, + Proof, + ReceiptInput, + ReceiptOutput, + SyncInput, + SyncOutput, + TransactionInput, + TransactionOutput, +} from 'web3-types'; +import { + fromUtf8, + hexToNumber, + hexToNumberString, + isAddress, + isHexStrict, + mergeDeep, + numberToHex, + sha3Raw, + toChecksumAddress, + toNumber, + toUtf8, + utf8ToHex, +} from 'web3-utils'; +import { isBlockTag, isHex, isNullish } from 'web3-validator'; + +/* eslint-disable deprecation/deprecation */ +/** + * @deprecated Use format function from web3-utils package instead + * Will format the given storage key array values to hex strings. + */ +export const inputStorageKeysFormatter = (keys: Array) => keys.map(num => numberToHex(num)); + +/** + * @deprecated Use format function from web3-utils package instead + * Will format the given proof response from the node. + */ +export const outputProofFormatter = (proof: Proof): Proof => ({ + address: toChecksumAddress(proof.address), + nonce: hexToNumberString(proof.nonce), + balance: hexToNumberString(proof.balance), +}); + +/** + * @deprecated Use format function from web3-utils package instead + * Should the format output to a big number + */ +export const outputBigIntegerFormatter = (number: Numbers) => toNumber(number); + +/** + * @deprecated Use format function from web3-utils package instead + * Returns the given block number as hex string or the predefined block number 'latest', 'pending', 'earliest', 'genesis' + */ +export const inputBlockNumberFormatter = (blockNumber: Numbers | undefined) => { + if (isNullish(blockNumber)) { + return undefined; + } + + if (typeof blockNumber === 'string' && isBlockTag(blockNumber)) { + return blockNumber; + } + + if (blockNumber === 'genesis') { + return '0x0'; + } + + if (typeof blockNumber === 'string' && isHexStrict(blockNumber)) { + return blockNumber.toLowerCase(); + } + + return numberToHex(blockNumber); +}; + +/** + * @deprecated Use format function from web3-utils package instead + * Returns the given block number as hex string or does return the defaultBlock property of the current module + */ +export const inputDefaultBlockNumberFormatter = ( + blockNumber: Numbers | undefined, + defaultBlock: Numbers, +) => { + if (!blockNumber) { + return inputBlockNumberFormatter(defaultBlock); + } + + return inputBlockNumberFormatter(blockNumber); +}; + +/** + * @deprecated Use format function from web3-utils package instead + * @param address + */ +export const inputAddressFormatter = (address: string): string | never => { + if (Iban.isValid(address) && Iban.isDirect(address)) { + const iban = new Iban(address); + + return iban.toAddress().toLowerCase(); + } + + if (isAddress(address)) { + return `0x${address.toLowerCase().replace('0x', '')}`; + } + + throw new FormatterError( + `Provided address ${address} is invalid, the capitalization checksum test failed, or it's an indirect IBAN address which can't be converted.`, + ); +}; + +/** + * @deprecated Use format function from web3-utils package instead + * Formats the input of a transaction and converts all values to HEX + */ +export const txInputOptionsFormatter = (options: TransactionInput): Mutable => { + const modifiedOptions = { ...options } as unknown as Mutable; + + if (options.to) { + // it might be contract creation + modifiedOptions.to = inputAddressFormatter(options.to); + } + + if (options.data && options.input) { + throw new FormatterError( + 'You can\'t have "data" and "input" as properties of transactions at the same time, please use either "data" or "input" instead.', + ); + } + + if (!options.input && options.data) { + modifiedOptions.input = options.data; + delete modifiedOptions.data; + } + + if (options.input && !options.input.startsWith('0x')) { + modifiedOptions.input = `0x${options.input}`; + } + + if (modifiedOptions.input && !isHexStrict(modifiedOptions.input)) { + throw new FormatterError('The input field must be HEX encoded data.'); + } + + // allow both + if (options.gas || options.gasLimit) { + modifiedOptions.gas = toNumber(options.gas ?? options.gasLimit); + } + + if (options.maxPriorityFeePerGas || options.maxFeePerGas) { + delete modifiedOptions.gasPrice; + } + + ['gasPrice', 'gas', 'value', 'maxPriorityFeePerGas', 'maxFeePerGas', 'nonce', 'chainId'] + .filter(key => !isNullish(modifiedOptions[key])) + .forEach(key => { + modifiedOptions[key] = numberToHex(modifiedOptions[key] as Numbers); + }); + + return modifiedOptions as TransactionOutput; +}; + +/** + * @deprecated Use format function from web3-utils package instead + * Formats the input of a transaction and converts all values to HEX + */ +export const inputCallFormatter = (options: TransactionInput, defaultAccount?: string) => { + const opts = txInputOptionsFormatter(options); + + const from = opts.from ?? defaultAccount; + + if (from) { + opts.from = inputAddressFormatter(from); + } + + return opts; +}; + +/** + * @deprecated Use format function from web3-utils package instead + * Formats the input of a transaction and converts all values to HEX + */ +export const inputTransactionFormatter = (options: TransactionInput, defaultAccount?: string) => { + const opts = txInputOptionsFormatter(options); + + // check from, only if not number, or object + if (!(typeof opts.from === 'number') && !(!!opts.from && typeof opts.from === 'object')) { + opts.from = opts.from ?? defaultAccount; + + if (!options.from && !(typeof options.from === 'number')) { + throw new FormatterError('The send transactions "from" field must be defined!'); + } + + opts.from = inputAddressFormatter(options.from); + } + + return opts; +}; + +/** + * @deprecated Use format function from web3-utils package instead + * Hex encodes the data passed to eth_sign and personal_sign + */ +export const inputSignFormatter = (data: string) => (isHexStrict(data) ? data : utf8ToHex(data)); + +/** + * @deprecated Use format function from web3-utils package instead + * Formats the output of a transaction to its proper values + * @function outputTransactionFormatter + */ +export const outputTransactionFormatter = (tx: TransactionInput): TransactionOutput => { + const modifiedTx = { ...tx } as unknown as Mutable; + + if (tx.blockNumber) { + modifiedTx.blockNumber = hexToNumber(tx.blockNumber); + } + + if (tx.transactionIndex) { + modifiedTx.transactionIndex = hexToNumber(tx.transactionIndex); + } + + modifiedTx.nonce = hexToNumber(tx.nonce); + modifiedTx.gas = hexToNumber(tx.gas); + + if (tx.gasPrice) { + modifiedTx.gasPrice = outputBigIntegerFormatter(tx.gasPrice); + } + + if (tx.maxFeePerGas) { + modifiedTx.maxFeePerGas = outputBigIntegerFormatter(tx.maxFeePerGas); + } + + if (tx.maxPriorityFeePerGas) { + modifiedTx.maxPriorityFeePerGas = outputBigIntegerFormatter(tx.maxPriorityFeePerGas); + } + + if (tx.type) { + modifiedTx.type = hexToNumber(tx.type); + } + + modifiedTx.value = outputBigIntegerFormatter(tx.value); + + if (tx.to && isAddress(tx.to)) { + // tx.to could be `0x0` or `null` while contract creation + modifiedTx.to = toChecksumAddress(tx.to); + } else { + modifiedTx.to = undefined; // set to `null` if invalid address + } + + if (tx.from) { + modifiedTx.from = toChecksumAddress(tx.from); + } + + return modifiedTx; +}; + +/** + * @deprecated Use format function from web3-utils package instead + * @param topic + */ +// To align with specification we use the type "null" here +// eslint-disable-next-line @typescript-eslint/ban-types +export const inputTopicFormatter = (topic: Topic): Topic | null => { + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + if (isNullish(topic)) return null; + + const value = String(topic); + + return isHex(value) ? value : fromUtf8(value); +}; + +/** + * @deprecated Use format function from web3-utils package instead + * @param filter + */ +export const inputLogFormatter = (filter: Filter) => { + const val: Mutable = isNullish(filter) + ? {} + : mergeDeep({}, filter as Record); + + // If options !== undefined, don't blow out existing data + if (isNullish(val.fromBlock)) { + val.fromBlock = BlockTags.LATEST; + } + + val.fromBlock = inputBlockNumberFormatter(val.fromBlock); + + if (!isNullish(val.toBlock)) { + val.toBlock = inputBlockNumberFormatter(val.toBlock); + } + + // make sure topics, get converted to hex + val.topics = val.topics ?? []; + val.topics = val.topics.map(topic => + Array.isArray(topic) + ? (topic.map(inputTopicFormatter) as Topic[]) + : inputTopicFormatter(topic as Topic), + ); + + if (val.address) { + val.address = Array.isArray(val.address) + ? val.address.map(addr => inputAddressFormatter(addr)) + : inputAddressFormatter(val.address); + } + + return val as Filter; +}; + +/** + * @deprecated Use format function from web3-utils package instead + * Formats the output of a log + * @function outputLogFormatter + */ +export const outputLogFormatter = (log: Partial): LogsOutput => { + const modifiedLog = { ...log } as unknown as Mutable; + + const logIndex = + typeof log.logIndex === 'string' + ? log.logIndex + : numberToHex(log.logIndex as unknown as number); + + // generate a custom log id + if (typeof log.blockHash === 'string' && typeof log.transactionHash === 'string') { + const shaId = sha3Raw( + `${log.blockHash.replace('0x', '')}${log.transactionHash.replace( + '0x', + '', + )}${logIndex.replace('0x', '')}`, + ); + modifiedLog.id = `log_${shaId.replace('0x', '').slice(0, 8)}`; + } else if (!log.id) { + modifiedLog.id = undefined; + } + + if (log.blockNumber && isHexStrict(log.blockNumber)) { + modifiedLog.blockNumber = hexToNumber(log.blockNumber); + } + if (log.transactionIndex && isHexStrict(log.transactionIndex)) { + modifiedLog.transactionIndex = hexToNumber(log.transactionIndex); + } + + if (log.logIndex && isHexStrict(log.logIndex)) { + modifiedLog.logIndex = hexToNumber(log.logIndex); + } + + if (log.address) { + modifiedLog.address = toChecksumAddress(log.address); + } + + return modifiedLog; +}; + +/** + * @deprecated Use format function from web3-utils package instead + * Formats the output of a transaction receipt to its proper values + */ +export const outputTransactionReceiptFormatter = (receipt: ReceiptInput): ReceiptOutput => { + if (typeof receipt !== 'object') { + throw new FormatterError(`Received receipt is invalid: ${String(receipt)}`); + } + const modifiedReceipt = { ...receipt } as unknown as Mutable; + + if (receipt.blockNumber) { + modifiedReceipt.blockNumber = hexToNumber(receipt.blockNumber); + } + + if (receipt.transactionIndex) { + modifiedReceipt.transactionIndex = hexToNumber(receipt.transactionIndex); + } + + modifiedReceipt.cumulativeGasUsed = hexToNumber(receipt.cumulativeGasUsed); + modifiedReceipt.gasUsed = hexToNumber(receipt.gasUsed); + + if (receipt.logs && Array.isArray(receipt.logs)) { + modifiedReceipt.logs = receipt.logs.map(outputLogFormatter); + } + + if (receipt.effectiveGasPrice) { + modifiedReceipt.effectiveGasPrice = hexToNumber(receipt.effectiveGasPrice); + } + + if (receipt.contractAddress) { + modifiedReceipt.contractAddress = toChecksumAddress(receipt.contractAddress); + } + + if (receipt.status) { + modifiedReceipt.status = Boolean(parseInt(receipt.status, 10)); + } + + return modifiedReceipt; +}; + +/** + * @deprecated Use format function from web3-utils package instead + * Formats the output of a block to its proper values + * @function outputBlockFormatter + */ +export const outputBlockFormatter = (block: BlockInput): BlockOutput => { + const modifiedBlock = { ...block } as unknown as Mutable; + + // transform to number + modifiedBlock.gasLimit = hexToNumber(block.gasLimit); + modifiedBlock.gasUsed = hexToNumber(block.gasUsed); + modifiedBlock.size = hexToNumber(block.size); + modifiedBlock.timestamp = hexToNumber(block.timestamp); + + if (block.number) { + modifiedBlock.number = hexToNumber(block.number); + } + + if (block.difficulty) { + modifiedBlock.difficulty = outputBigIntegerFormatter(block.difficulty); + } + + if (block.totalDifficulty) { + modifiedBlock.totalDifficulty = outputBigIntegerFormatter(block.totalDifficulty); + } + + if (block.transactions && Array.isArray(block.transactions)) { + modifiedBlock.transactions = block.transactions.map(outputTransactionFormatter); + } + + if (block.miner) { + modifiedBlock.miner = toChecksumAddress(block.miner); + } + + if (block.baseFeePerGas) { + modifiedBlock.baseFeePerGas = outputBigIntegerFormatter(block.baseFeePerGas); + } + + return modifiedBlock; +}; + +/** + * @deprecated Use format function from web3-utils package instead + * Formats the input of a whisper post and converts all values to HEX + */ +export const inputPostFormatter = (post: PostOutput): PostInput => { + const modifiedPost = { ...post } as unknown as Mutable; + + if (post.ttl) { + modifiedPost.ttl = numberToHex(post.ttl); + } + + if (post.workToProve) { + modifiedPost.workToProve = numberToHex(post.workToProve); + } + + if (post.priority) { + modifiedPost.priority = numberToHex(post.priority); + } + + // fallback + if (post.topics && !Array.isArray(post.topics)) { + modifiedPost.topics = post.topics ? [post.topics] : []; + } + + // format the following options + modifiedPost.topics = modifiedPost.topics?.map(topic => + topic.startsWith('0x') ? topic : fromUtf8(topic), + ); + + return modifiedPost; +}; + +/** + * @deprecated Use format function from web3-utils package instead + * Formats the output of a received post message + * @function outputPostFormatter + */ +export const outputPostFormatter = (post: PostInput): PostOutput => { + const modifiedPost = { ...post } as unknown as Mutable; + + if (post.expiry) { + modifiedPost.expiry = hexToNumber(post.expiry); + } + + if (post.sent) { + modifiedPost.sent = hexToNumber(post.sent); + } + + if (post.ttl) { + modifiedPost.ttl = hexToNumber(post.ttl); + } + + if (post.workProved) { + modifiedPost.workProved = hexToNumber(post.workProved); + } + + // post.payloadRaw = post.payload; + // post.payload = utils.hexToAscii(post.payload); + + // if (utils.isJson(post.payload)) { + // post.payload = JSON.parse(post.payload); + // } + + // format the following options + if (!post.topics) { + modifiedPost.topics = []; + } + + modifiedPost.topics = modifiedPost.topics?.map(toUtf8); + + return modifiedPost; +}; + +/** + * @deprecated Use format function from web3-utils package instead + */ +export const outputSyncingFormatter = (result: SyncInput): SyncOutput => { + const modifiedResult = { ...result } as unknown as Mutable; + + modifiedResult.startingBlock = hexToNumber(result.startingBlock); + modifiedResult.currentBlock = hexToNumber(result.currentBlock); + modifiedResult.highestBlock = hexToNumber(result.highestBlock); + + if (result.knownStates) { + modifiedResult.knownStates = hexToNumber(result.knownStates); + } + + if (result.pulledStates) { + modifiedResult.pulledStates = hexToNumber(result.pulledStates); + } + + return modifiedResult; +}; diff --git a/packages/web3-core/src/index.js b/packages/web3-core/src/index.js deleted file mode 100644 index ba98b80a35c..00000000000 --- a/packages/web3-core/src/index.js +++ /dev/null @@ -1,87 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -const requestManager = require("web3-core-requestmanager"); -const extend = require("./extend"); - -const packageInit = (pkg, args) => { - args = Array.prototype.slice.call(args); - - if (!pkg) { - throw new Error('You need to instantiate using the "new" keyword.'); - } - - // make property of pkg._provider, which can properly set providers - Object.defineProperty(pkg, 'currentProvider', { - get: () => { - return pkg._provider; - }, - set: (value) => { - return pkg.setProvider(value); - }, - enumerable: true, - configurable: true - }); - - // inherit from parent package or create a new RequestManager - if (args[0] && args[0]._requestManager) { - pkg._requestManager = args[0]._requestManager; - } else { - pkg._requestManager = new requestManager.Manager(args[0], args[1]); - } - - // add givenProvider - pkg.givenProvider = requestManager.Manager.givenProvider; - pkg.providers = requestManager.Manager.providers; - - pkg._provider = pkg._requestManager.provider; - - // add SETPROVIDER function (don't overwrite if already existing) - if (!pkg.setProvider) { - pkg.setProvider = (provider, net) => { - pkg._requestManager.setProvider(provider, net); - pkg._provider = pkg._requestManager.provider; - return true; - }; - } - - pkg.setRequestManager = (manager) => { - pkg._requestManager = manager; - pkg._provider = manager.provider; - }; - - // attach batch request creation - pkg.BatchRequest = requestManager.BatchManager.bind(null, pkg._requestManager); - - // attach extend function - pkg.extend = extend(pkg); -} - -const addProviders = (pkg) => { - pkg.givenProvider = requestManager.Manager.givenProvider; - pkg.providers = requestManager.Manager.providers; -} - -module.exports = { - packageInit, - addProviders -} diff --git a/packages/web3-core/src/index.ts b/packages/web3-core/src/index.ts new file mode 100644 index 00000000000..88eb6c63151 --- /dev/null +++ b/packages/web3-core/src/index.ts @@ -0,0 +1,31 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export * from './web3_config.js'; +export * from './web3_request_manager.js'; +export * from './web3_subscription_manager.js'; +export * from './web3_subscriptions.js'; +export * from './web3_context.js'; +export * from './web3_batch_request.js'; +export * from './utils.js'; +export * from './types.js'; +export * from './formatters.js'; +export * from './web3_promi_event.js'; +export * from './web3_event_emitter.js'; + +// For backward usability export as namespace +export * as formatters from './formatters.js'; diff --git a/packages/web3-core/src/types.ts b/packages/web3-core/src/types.ts new file mode 100644 index 00000000000..3f4e66d1f52 --- /dev/null +++ b/packages/web3-core/src/types.ts @@ -0,0 +1,32 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { HexString, Transaction } from 'web3-types'; + +export type TransactionTypeParser = ( + transaction: Transaction, +) => HexString | undefined; + +export interface Method { + name: string; + call: string; +} + +export interface ExtensionObject { + property?: string; + methods: Method[]; +} diff --git a/packages/web3-core/src/utils.ts b/packages/web3-core/src/utils.ts new file mode 100644 index 00000000000..e5b30f0db83 --- /dev/null +++ b/packages/web3-core/src/utils.ts @@ -0,0 +1,76 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + EIP1193Provider, + LegacyRequestProvider, + LegacySendAsyncProvider, + LegacySendProvider, + SupportedProviders, + Web3APISpec, + Web3BaseProvider, +} from 'web3-types'; + +export const isWeb3Provider = ( + provider: SupportedProviders, +): provider is Web3BaseProvider => Web3BaseProvider.isWeb3Provider(provider); + +export const isLegacyRequestProvider = ( + provider: SupportedProviders, +): provider is LegacyRequestProvider => + typeof provider !== 'string' && + 'request' in provider && + provider.request.constructor.name === 'Function'; + +export const isEIP1193Provider = ( + provider: SupportedProviders, +): provider is EIP1193Provider => + typeof provider !== 'string' && + 'request' in provider && + provider.request.constructor.name === 'AsyncFunction'; + +export const isLegacySendProvider = ( + provider: SupportedProviders, +): provider is LegacySendProvider => typeof provider !== 'string' && 'send' in provider; + +export const isLegacySendAsyncProvider = ( + provider: SupportedProviders, +): provider is LegacySendAsyncProvider => typeof provider !== 'string' && 'sendAsync' in provider; + +export const isSupportedProvider = ( + provider: SupportedProviders, +): provider is SupportedProviders => + provider && + (isWeb3Provider(provider) || + isEIP1193Provider(provider) || + isLegacyRequestProvider(provider) || + isLegacySendAsyncProvider(provider) || + isLegacySendProvider(provider)); + +export const isSupportSubscriptions = ( + provider: SupportedProviders, +): boolean => { + if (provider && 'supportsSubscriptions' in provider) { + return provider.supportsSubscriptions(); + } + + if (provider && typeof provider !== 'string' && 'on' in provider) { + return true; + } + + return false; +}; diff --git a/packages/web3-core/src/web3_batch_request.ts b/packages/web3-core/src/web3_batch_request.ts new file mode 100644 index 00000000000..10a3eaf4693 --- /dev/null +++ b/packages/web3-core/src/web3_batch_request.ts @@ -0,0 +1,128 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { JsonRpcBatchResponse, JsonRpcOptionalRequest, JsonRpcRequest } from 'web3-types'; +import { jsonRpc, Web3DeferredPromise } from 'web3-utils'; +import { OperationAbortError, OperationTimeoutError, ResponseError } from 'web3-errors'; +import { Web3RequestManager } from './web3_request_manager.js'; + +export const DEFAULT_BATCH_REQUEST_TIMEOUT = 1000; + +export class Web3BatchRequest { + private readonly _requestManager: Web3RequestManager; + private readonly _requests: Map< + number, + { payload: JsonRpcRequest; promise: Web3DeferredPromise } + >; + + public constructor(requestManager: Web3RequestManager) { + this._requestManager = requestManager; + this._requests = new Map(); + } + + public get requests() { + return [...this._requests.values()].map(r => r.payload); + } + + public add(request: JsonRpcOptionalRequest) { + const payload = jsonRpc.toPayload(request) as JsonRpcRequest; + const promise = new Web3DeferredPromise(); + + this._requests.set(payload.id as number, { payload, promise }); + + return promise; + } + + // eslint-disable-next-line class-methods-use-this + public async execute(options?: { + timeout?: number; + }): Promise> { + if (this.requests.length === 0) { + return Promise.resolve([]); + } + + const request = new Web3DeferredPromise>({ + timeout: options?.timeout ?? DEFAULT_BATCH_REQUEST_TIMEOUT, + eagerStart: true, + timeoutMessage: 'Batch request timeout', + }); + + this._processBatchRequest(request).catch(err => request.reject(err)); + + request.catch((err: Error) => { + if (err instanceof OperationTimeoutError) { + this._abortAllRequests('Batch request timeout'); + } + + request.reject(err); + }); + + return request; + } + + private async _processBatchRequest( + promise: Web3DeferredPromise>, + ) { + const response = await this._requestManager.sendBatch( + [...this._requests.values()].map(r => r.payload), + ); + + if (response.length !== this._requests.size) { + this._abortAllRequests('Invalid batch response'); + + throw new ResponseError( + response, + `Batch request size mismatch the results size. Requests: ${this._requests.size}, Responses: ${response.length}`, + ); + } + + const requestIds = this.requests + .map(r => r.id) + .map(Number) + .sort((a, b) => a - b); + + const responseIds = response + .map(r => r.id) + .map(Number) + .sort((a, b) => a - b); + + if (JSON.stringify(requestIds) !== JSON.stringify(responseIds)) { + this._abortAllRequests('Invalid batch response'); + + throw new ResponseError( + response, + `Batch request mismatch the results. Requests: [${requestIds.join()}], Responses: [${responseIds.join()}]`, + ); + } + + for (const res of response) { + if (jsonRpc.isResponseWithResult(res)) { + this._requests.get(res.id as number)?.promise.resolve(res.result); + } else if (jsonRpc.isResponseWithError(res)) { + this._requests.get(res.id as number)?.promise.reject(res.error); + } + } + + promise.resolve(response); + } + + private _abortAllRequests(msg: string) { + for (const { promise } of this._requests.values()) { + promise.reject(new OperationAbortError(msg)); + } + } +} diff --git a/packages/web3-core/src/web3_config.ts b/packages/web3-core/src/web3_config.ts new file mode 100644 index 00000000000..a8dffebab03 --- /dev/null +++ b/packages/web3-core/src/web3_config.ts @@ -0,0 +1,503 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Numbers, HexString, BlockNumberOrTag, Common } from 'web3-types'; +import { ConfigHardforkMismatchError, ConfigChainMismatchError } from 'web3-errors'; +import { isNullish, toHex } from 'web3-utils'; +import { TransactionTypeParser } from './types.js'; +// eslint-disable-next-line import/no-cycle +import { TransactionBuilder } from './web3_context.js'; +import { Web3EventEmitter } from './web3_event_emitter.js'; + +// To avoid cycle dependency declare this +export interface Web3ConfigOptions { + handleRevert: boolean; + defaultAccount?: HexString; + defaultBlock: BlockNumberOrTag; + transactionSendTimeout: number; + transactionBlockTimeout: number; + transactionConfirmationBlocks: number; + transactionPollingInterval: number; + transactionPollingTimeout: number; + transactionReceiptPollingInterval?: number; + transactionConfirmationPollingInterval?: number; + blockHeaderTimeout: number; + maxListenersWarningThreshold: number; + contractDataInputFill: 'data' | 'input' | 'both'; + defaultNetworkId?: Numbers; + defaultChain: string; + defaultHardfork: string; + + defaultCommon?: Common; + defaultTransactionType: Numbers; + defaultMaxPriorityFeePerGas: Numbers; + enableExperimentalFeatures: { + useSubscriptionWhenCheckingBlockTimeout: boolean; + useRpcCallSpecification: boolean; // EIP-1474 https://eips.ethereum.org/EIPS/eip-1474 + // other experimental features... + }; + transactionBuilder?: TransactionBuilder; + transactionTypeParser?: TransactionTypeParser; +} + +type ConfigEvent = P extends unknown + ? { name: P; oldValue: T[P]; newValue: T[P] } + : never; + +export enum Web3ConfigEvent { + CONFIG_CHANGE = 'CONFIG_CHANGE', +} + +export abstract class Web3Config + extends Web3EventEmitter<{ [Web3ConfigEvent.CONFIG_CHANGE]: ConfigEvent }> + implements Web3ConfigOptions +{ + public config: Web3ConfigOptions = { + handleRevert: false, + defaultAccount: undefined, + defaultBlock: 'latest', + transactionBlockTimeout: 50, + transactionConfirmationBlocks: 24, + transactionPollingInterval: 1000, + transactionPollingTimeout: 750 * 1000, + transactionReceiptPollingInterval: undefined, + transactionSendTimeout: 750 * 1000, + transactionConfirmationPollingInterval: undefined, + blockHeaderTimeout: 10, + maxListenersWarningThreshold: 100, + contractDataInputFill: 'input', + defaultNetworkId: undefined, + defaultChain: 'mainnet', + defaultHardfork: 'london', + // TODO - Check if there is a default Common + defaultCommon: undefined, + defaultTransactionType: '0x2', + defaultMaxPriorityFeePerGas: toHex(2500000000), + enableExperimentalFeatures: { + useSubscriptionWhenCheckingBlockTimeout: false, + useRpcCallSpecification: false, + }, + transactionBuilder: undefined, + transactionTypeParser: undefined, + }; + + public constructor(options?: Partial) { + super(); + + this.setConfig(options ?? {}); + } + + public setConfig(options: Partial) { + // TODO: Improve and add key check + Object.assign(this.config, options); + } + + /** + * The `handleRevert` options property returns the revert reason string if enabled for the following methods: + * - web3.eth.sendTransaction() + * - web3.eth.call() + * - myContract.methods.myMethod().call() + * - myContract.methods.myMethod().send() + * Default is `false`. + * + * `Note`: At the moment `handleRevert` is only supported for `sendTransaction` and not for `sendSignedTransaction` + */ + public get handleRevert() { + return this.config.handleRevert; + } + + /** + * Will set the handleRevert + */ + public set handleRevert(val) { + this._triggerConfigChange('handleRevert', val); + this.config.handleRevert = val; + } + + /** + * The `contractDataInputFill` options property will allow you to set the hash of the method signature and encoded parameters to the property + * either `data`, `input` or both within your contract. + * This will affect the contracts send, call and estimateGas methods + * Default is `input`. + */ + public get contractDataInputFill() { + return this.config.contractDataInputFill; + } + + /** + * Will set the contractDataInputFill + */ + public set contractDataInputFill(val) { + this._triggerConfigChange('contractDataInputFill', val); + this.config.contractDataInputFill = val; + } + + /** + * This default address is used as the default `from` property, if no `from` property is specified in for the following methods: + * - web3.eth.sendTransaction() + * - web3.eth.call() + * - myContract.methods.myMethod().call() + * - myContract.methods.myMethod().send() + */ + public get defaultAccount() { + return this.config.defaultAccount; + } + /** + * Will set the default account. + */ + public set defaultAccount(val) { + this._triggerConfigChange('defaultAccount', val); + this.config.defaultAccount = val; + } + + /** + * The default block is used for certain methods. You can override it by passing in the defaultBlock as last parameter. The default value is `"latest"`. + * - web3.eth.getBalance() + * - web3.eth.getCode() + * - web3.eth.getTransactionCount() + * - web3.eth.getStorageAt() + * - web3.eth.call() + * - myContract.methods.myMethod().call() + */ + public get defaultBlock() { + return this.config.defaultBlock; + } + + /** + * Will set the default block. + * + * - A block number + * - `"earliest"` - String: The genesis block + * - `"latest"` - String: The latest block (current head of the blockchain) + * - `"pending"` - String: The currently mined block (including pending transactions) + * - `"finalized"` - String: (For POS networks) The finalized block is one which has been accepted as canonical by greater than 2/3 of validators + * - `"safe"` - String: (For POS networks) The safe head block is one which under normal network conditions, is expected to be included in the canonical chain. Under normal network conditions the safe head and the actual tip of the chain will be equivalent (with safe head trailing only by a few seconds). Safe heads will be less likely to be reorged than the proof of work network`s latest blocks. + */ + public set defaultBlock(val) { + this._triggerConfigChange('defaultBlock', val); + this.config.defaultBlock = val; + } + + /** + * The time used to wait for Ethereum Node to return the sent transaction result. + * Note: If the RPC call stuck at the Node and therefor timed-out, the transaction may still be pending or even mined by the Network. We recommend checking the pending transactions in such a case. + * Default is `750` seconds (12.5 minutes). + */ + public get transactionSendTimeout() { + return this.config.transactionSendTimeout; + } + + /** + * Will set the transactionSendTimeout. + */ + public set transactionSendTimeout(val) { + this._triggerConfigChange('transactionSendTimeout', val); + this.config.transactionSendTimeout = val; + } + + /** + * The `transactionBlockTimeout` is used over socket-based connections. This option defines the amount of new blocks it should wait until the first confirmation happens, otherwise the PromiEvent rejects with a timeout error. + * Default is `50`. + */ + public get transactionBlockTimeout() { + return this.config.transactionBlockTimeout; + } + + /** + * Will set the transactionBlockTimeout. + */ + public set transactionBlockTimeout(val) { + this._triggerConfigChange('transactionBlockTimeout', val); + this.config.transactionBlockTimeout = val; + } + + /** + * This defines the number of blocks it requires until a transaction is considered confirmed. + * Default is `24`. + */ + public get transactionConfirmationBlocks() { + return this.config.transactionConfirmationBlocks; + } + + /** + * Will set the transactionConfirmationBlocks. + */ + public set transactionConfirmationBlocks(val) { + this._triggerConfigChange('transactionConfirmationBlocks', val); + this.config.transactionConfirmationBlocks = val; + } + + /** + * Used over HTTP connections. This option defines the number of seconds between Web3 calls for a receipt which confirms that a transaction was mined by the network. + * Default is `1000` ms. + */ + public get transactionPollingInterval() { + return this.config.transactionPollingInterval; + } + + /** + * Will set the transactionPollingInterval. + */ + public set transactionPollingInterval(val) { + this._triggerConfigChange('transactionPollingInterval', val); + this.config.transactionPollingInterval = val; + + this.transactionReceiptPollingInterval = val; + this.transactionConfirmationPollingInterval = val; + } + /** + * Used over HTTP connections. This option defines the number of seconds Web3 will wait for a receipt which confirms that a transaction was mined by the network. Note: If this method times out, the transaction may still be pending. + * Default is `750` seconds (12.5 minutes). + */ + public get transactionPollingTimeout() { + return this.config.transactionPollingTimeout; + } + + /** + * Will set the transactionPollingTimeout. + */ + public set transactionPollingTimeout(val) { + this._triggerConfigChange('transactionPollingTimeout', val); + + this.config.transactionPollingTimeout = val; + } + + /** + * The `transactionPollingInterval` is used over HTTP connections. This option defines the number of seconds between Web3 calls for a receipt which confirms that a transaction was mined by the network. + * Default is `undefined` + */ + public get transactionReceiptPollingInterval() { + return this.config.transactionReceiptPollingInterval; + } + + /** + * Will set the transactionReceiptPollingInterval + */ + public set transactionReceiptPollingInterval(val) { + this._triggerConfigChange('transactionReceiptPollingInterval', val); + this.config.transactionReceiptPollingInterval = val; + } + + public get transactionConfirmationPollingInterval() { + return this.config.transactionConfirmationPollingInterval; + } + + public set transactionConfirmationPollingInterval(val) { + this._triggerConfigChange('transactionConfirmationPollingInterval', val); + this.config.transactionConfirmationPollingInterval = val; + } + + /** + * The blockHeaderTimeout is used over socket-based connections. This option defines the amount seconds it should wait for `'newBlockHeaders'` event before falling back to polling to fetch transaction receipt. + * Default is `10` seconds. + */ + public get blockHeaderTimeout() { + return this.config.blockHeaderTimeout; + } + + /** + * Will set the blockHeaderTimeout + */ + public set blockHeaderTimeout(val) { + this._triggerConfigChange('blockHeaderTimeout', val); + + this.config.blockHeaderTimeout = val; + } + + /** + * The enableExperimentalFeatures is used to enable trying new experimental features that are still not fully implemented or not fully tested or still have some related issues. + * Default is `false` for every feature. + */ + public get enableExperimentalFeatures() { + return this.config.enableExperimentalFeatures; + } + + /** + * Will set the enableExperimentalFeatures + */ + public set enableExperimentalFeatures(val) { + this._triggerConfigChange('enableExperimentalFeatures', val); + + this.config.enableExperimentalFeatures = val; + } + + public get maxListenersWarningThreshold() { + return this.config.maxListenersWarningThreshold; + } + + public set maxListenersWarningThreshold(val) { + this._triggerConfigChange('maxListenersWarningThreshold', val); + this.setMaxListenerWarningThreshold(val); + this.config.maxListenersWarningThreshold = val; + } + + public get defaultNetworkId() { + return this.config.defaultNetworkId; + } + + public set defaultNetworkId(val) { + this._triggerConfigChange('defaultNetworkId', val); + + this.config.defaultNetworkId = val; + } + + public get defaultChain() { + return this.config.defaultChain; + } + + public set defaultChain(val) { + if ( + !isNullish(this.config.defaultCommon) && + !isNullish(this.config.defaultCommon.baseChain) && + val !== this.config.defaultCommon.baseChain + ) + throw new ConfigChainMismatchError(this.config.defaultChain, val); + + this._triggerConfigChange('defaultChain', val); + + this.config.defaultChain = val; + } + + /** + * Will return the default hardfork. Default is `london` + * The default hardfork property can be one of the following: + * - `chainstart` + * - `homestead` + * - `dao` + * - `tangerineWhistle` + * - `spuriousDragon` + * - `byzantium` + * - `constantinople` + * - `petersburg` + * - `istanbul` + * - `berlin` + * - `london` + * - 'arrowGlacier', + * - 'tangerineWhistle', + * - 'muirGlacier' + * + */ + public get defaultHardfork() { + return this.config.defaultHardfork; + } + + /** + * Will set the default hardfork. + * + */ + public set defaultHardfork(val) { + if ( + !isNullish(this.config.defaultCommon) && + !isNullish(this.config.defaultCommon.hardfork) && + val !== this.config.defaultCommon.hardfork + ) + throw new ConfigHardforkMismatchError(this.config.defaultCommon.hardfork, val); + this._triggerConfigChange('defaultHardfork', val); + + this.config.defaultHardfork = val; + } + + /** + * + * Will get the default common property + * The default common property does contain the following Common object: + * - `customChain` - `Object`: The custom chain properties + * - `name` - `string`: (optional) The name of the chain + * - `networkId` - `number`: Network ID of the custom chain + * - `chainId` - `number`: Chain ID of the custom chain + * - `baseChain` - `string`: (optional) mainnet, goerli, kovan, rinkeby, or ropsten + * - `hardfork` - `string`: (optional) chainstart, homestead, dao, tangerineWhistle, spuriousDragon, byzantium, constantinople, petersburg, istanbul, berlin, or london + * Default is `undefined`. + * + */ + public get defaultCommon() { + return this.config.defaultCommon; + } + + /** + * Will set the default common property + * + */ + public set defaultCommon(val: Common | undefined) { + // validation check if default hardfork is set and matches defaultCommon hardfork + if ( + !isNullish(this.config.defaultHardfork) && + !isNullish(val) && + !isNullish(val.hardfork) && + this.config.defaultHardfork !== val.hardfork + ) + throw new ConfigHardforkMismatchError(this.config.defaultHardfork, val.hardfork); + if ( + !isNullish(this.config.defaultChain) && + !isNullish(val) && + !isNullish(val.baseChain) && + this.config.defaultChain !== val.baseChain + ) + throw new ConfigChainMismatchError(this.config.defaultChain, val.baseChain); + this._triggerConfigChange('defaultCommon', val); + + this.config.defaultCommon = val; + } + + public get defaultTransactionType() { + return this.config.defaultTransactionType; + } + + public set defaultTransactionType(val) { + this._triggerConfigChange('defaultTransactionType', val); + + this.config.defaultTransactionType = val; + } + + public get defaultMaxPriorityFeePerGas() { + return this.config.defaultMaxPriorityFeePerGas; + } + + public set defaultMaxPriorityFeePerGas(val) { + this._triggerConfigChange('defaultMaxPriorityFeePerGas', val); + this.config.defaultMaxPriorityFeePerGas = val; + } + + public get transactionBuilder() { + return this.config.transactionBuilder; + } + + public set transactionBuilder(val) { + this._triggerConfigChange('transactionBuilder', val); + this.config.transactionBuilder = val; + } + + public get transactionTypeParser() { + return this.config.transactionTypeParser; + } + + public set transactionTypeParser(val) { + this._triggerConfigChange('transactionTypeParser', val); + this.config.transactionTypeParser = val; + } + + private _triggerConfigChange( + config: K, + newValue: Web3ConfigOptions[K], + ) { + this.emit(Web3ConfigEvent.CONFIG_CHANGE, { + name: config, + oldValue: this.config[config], + newValue, + } as ConfigEvent); + } +} diff --git a/packages/web3-core/src/web3_context.ts b/packages/web3-core/src/web3_context.ts new file mode 100644 index 00000000000..f653b581456 --- /dev/null +++ b/packages/web3-core/src/web3_context.ts @@ -0,0 +1,450 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// eslint-disable-next-line max-classes-per-file +import { + Web3APISpec, + Web3BaseWallet, + Web3BaseWalletAccount, + Web3AccountProvider, + SupportedProviders, + HexString, + EthExecutionAPI, + Web3BaseProvider, + Transaction, +} from 'web3-types'; +import { isNullish } from 'web3-utils'; +import { ExistingPluginNamespaceError } from 'web3-errors'; + +import { isSupportedProvider } from './utils.js'; +// eslint-disable-next-line import/no-cycle +import { Web3Config, Web3ConfigEvent, Web3ConfigOptions } from './web3_config.js'; +import { Web3RequestManager } from './web3_request_manager.js'; +import { Web3SubscriptionConstructor } from './web3_subscriptions.js'; +import { Web3SubscriptionManager } from './web3_subscription_manager.js'; +import { Web3BatchRequest } from './web3_batch_request.js'; +import { ExtensionObject } from './types.js'; + +// To avoid circular dependencies, we need to export type from here. +export type Web3ContextObject< + API extends Web3APISpec = unknown, + RegisteredSubs extends { + [key: string]: Web3SubscriptionConstructor; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } = any, +> = { + config: Web3ConfigOptions; + provider?: SupportedProviders | string; + requestManager: Web3RequestManager; + subscriptionManager?: Web3SubscriptionManager | undefined; + registeredSubscriptions?: RegisteredSubs; + providers: typeof Web3RequestManager.providers; + accountProvider?: Web3AccountProvider; + wallet?: Web3BaseWallet; +}; + +export type Web3ContextInitOptions< + API extends Web3APISpec = unknown, + RegisteredSubs extends { + [key: string]: Web3SubscriptionConstructor; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } = any, +> = { + config?: Partial; + provider?: SupportedProviders | string; + requestManager?: Web3RequestManager; + subscriptionManager?: Web3SubscriptionManager | undefined; + registeredSubscriptions?: RegisteredSubs; + accountProvider?: Web3AccountProvider; + wallet?: Web3BaseWallet; +}; + +// eslint-disable-next-line no-use-before-define +export type Web3ContextConstructor = new ( + ...args: [...extras: T2, context: Web3ContextObject] +) => T; + +// To avoid circular dependencies, we need to export type from here. +export type Web3ContextFactory< + // eslint-disable-next-line no-use-before-define + T extends Web3Context, + T2 extends unknown[], +> = Web3ContextConstructor & { + fromContextObject(this: Web3ContextConstructor, contextObject: Web3ContextObject): T; +}; + +export class Web3Context< + API extends Web3APISpec = unknown, + RegisteredSubs extends { + [key: string]: Web3SubscriptionConstructor; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } = any, +> extends Web3Config { + public static readonly providers = Web3RequestManager.providers; + public static givenProvider?: SupportedProviders; + public readonly providers = Web3RequestManager.providers; + protected _requestManager: Web3RequestManager; + protected _subscriptionManager: Web3SubscriptionManager; + protected _accountProvider?: Web3AccountProvider; + protected _wallet?: Web3BaseWallet; + + public constructor( + providerOrContext?: + | string + | SupportedProviders + | Web3ContextInitOptions, + ) { + super(); + + // If "providerOrContext" is provided as "string" or an objects matching "SupportedProviders" interface + if ( + isNullish(providerOrContext) || + (typeof providerOrContext === 'string' && providerOrContext.trim() !== '') || + isSupportedProvider(providerOrContext as SupportedProviders) + ) { + this._requestManager = new Web3RequestManager( + providerOrContext as undefined | string | SupportedProviders, + ); + this._subscriptionManager = new Web3SubscriptionManager( + this._requestManager, + {} as RegisteredSubs, + ); + + return; + } + + const { + config, + provider, + requestManager, + subscriptionManager, + registeredSubscriptions, + accountProvider, + wallet, + } = providerOrContext as Web3ContextInitOptions; + + this.setConfig(config ?? {}); + + this._requestManager = + requestManager ?? + new Web3RequestManager( + provider, + config?.enableExperimentalFeatures?.useSubscriptionWhenCheckingBlockTimeout, + ); + + if (subscriptionManager) { + this._subscriptionManager = subscriptionManager; + } else { + this._subscriptionManager = new Web3SubscriptionManager( + this.requestManager, + registeredSubscriptions ?? ({} as RegisteredSubs), + ); + } + + if (accountProvider) { + this._accountProvider = accountProvider; + } + + if (wallet) { + this._wallet = wallet; + } + } + + public get requestManager() { + return this._requestManager; + } + + /** + * Will return the current subscriptionManager ({@link Web3SubscriptionManager}) + */ + public get subscriptionManager() { + return this._subscriptionManager; + } + + public get wallet() { + return this._wallet; + } + + public get accountProvider() { + return this._accountProvider; + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + public static fromContextObject( + this: Web3ContextConstructor, + ...args: [Web3ContextObject, ...T3] + ) { + return new this(...(args.reverse() as [...T3, Web3ContextObject])); + } + + public getContextObject(): Web3ContextObject { + return { + config: this.config, + provider: this.provider, + requestManager: this.requestManager, + subscriptionManager: this.subscriptionManager, + registeredSubscriptions: this.subscriptionManager?.registeredSubscriptions, + providers: this.providers, + wallet: this.wallet, + accountProvider: this.accountProvider, + }; + } + + /** + * Use to create new object of any type extended by `Web3Context` + * and link it to current context. This can be used to initiate a global context object + * and then use it to create new objects of any type extended by `Web3Context`. + */ + public use( + ContextRef: Web3ContextConstructor, + ...args: [...T2] + ) { + const newContextChild: T = new ContextRef( + ...([...args, this.getContextObject()] as unknown as [...T2, Web3ContextObject]), + ); + + this.on(Web3ConfigEvent.CONFIG_CHANGE, event => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + newContextChild.setConfig({ [event.name]: event.newValue }); + }); + + return newContextChild; + } + + /** + * Link current context to another context. + */ + public link(parentContext: T) { + this.setConfig(parentContext.config); + this._requestManager = parentContext.requestManager; + this.provider = parentContext.provider; + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + this._subscriptionManager = parentContext.subscriptionManager; + this._wallet = parentContext.wallet; + this._accountProvider = parentContext._accountProvider; + + parentContext.on(Web3ConfigEvent.CONFIG_CHANGE, event => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + this.setConfig({ [event.name]: event.newValue }); + }); + } + + // eslint-disable-next-line no-use-before-define + public registerPlugin(plugin: Web3PluginBase) { + // @ts-expect-error No index signature with a parameter of type 'string' was found on type 'Web3Context' + if (this[plugin.pluginNamespace] !== undefined) + throw new ExistingPluginNamespaceError(plugin.pluginNamespace); + + const _pluginObject = { + [plugin.pluginNamespace]: plugin, + }; + _pluginObject[plugin.pluginNamespace].link(this); + Object.assign(this, _pluginObject); + } + + /** + * Will return the current provider. + * + * @returns Returns the current provider + * @example + * ```ts + * const web3 = new Web3Context("http://localhost:8545"); + * console.log(web3.provider); + * > HttpProvider { + * clientUrl: 'http://localhost:8545', + * httpProviderOptions: undefined + * } + * ``` + */ + + public get provider(): Web3BaseProvider | undefined { + return this.currentProvider; + } + + /** + * Will set the current provider. + * + * @param provider - The provider to set + * + * Accepted providers are of type {@link SupportedProviders} + * @example + * ```ts + * const web3Context = new web3ContextContext("http://localhost:8545"); + * web3Context.provider = "ws://localhost:8545"; + * console.log(web3Context.provider); + * > WebSocketProvider { + * _eventEmitter: EventEmitter { + * _events: [Object: null prototype] {}, + * _eventsCount: 0, + * ... + * } + * ``` + */ + + public set provider(provider: SupportedProviders | string | undefined) { + this.requestManager.setProvider(provider); + } + + /** + * Will return the current provider. (The same as `provider`) + * + * @returns Returns the current provider + * @example + * ```ts + * const web3Context = new Web3Context("http://localhost:8545"); + * console.log(web3Context.provider); + * > HttpProvider { + * clientUrl: 'http://localhost:8545', + * httpProviderOptions: undefined + * } + * ``` + */ + public get currentProvider(): Web3BaseProvider | undefined { + return this.requestManager.provider as Web3BaseProvider; + } + + /** + * Will set the current provider. (The same as `provider`) + * + * @param provider - {@link SupportedProviders} The provider to set + * + * @example + * ```ts + * const web3Context = new Web3Context("http://localhost:8545"); + * web3Context.currentProvider = "ws://localhost:8545"; + * console.log(web3Context.provider); + * > WebSocketProvider { + * _eventEmitter: EventEmitter { + * _events: [Object: null prototype] {}, + * _eventsCount: 0, + * ... + * } + * ``` + */ + public set currentProvider(provider: SupportedProviders | string | undefined) { + this.requestManager.setProvider(provider); + } + + /** + * Will return the givenProvider if available. + * + * When using web3.js in an Ethereum compatible browser, it will set with the current native provider by that browser. Will return the given provider by the (browser) environment, otherwise `undefined`. + */ + // eslint-disable-next-line class-methods-use-this + public get givenProvider() { + return Web3Context.givenProvider; + } + /** + * Will set the provider. + * + * @param provider - {@link SupportedProviders} The provider to set + * @returns Returns true if the provider was set + */ + public setProvider(provider?: SupportedProviders | string): boolean { + this.provider = provider; + return true; + } + /** + * Will return the {@link Web3BatchRequest} constructor. + */ + public get BatchRequest(): new () => Web3BatchRequest { + return Web3BatchRequest.bind( + undefined, + this._requestManager as unknown as Web3RequestManager, + ); + } + + /** + * This method allows extending the web3 modules. + * Note: This method is only for backward compatibility, and It is recommended to use Web3 v4 Plugin feature for extending web3.js functionality if you are developing some thing new. + */ + public extend(extendObj: ExtensionObject) { + // @ts-expect-error No index signature with a parameter of type 'string' was found on type 'Web3Context' + if (extendObj.property && !this[extendObj.property]) + // @ts-expect-error No index signature with a parameter of type 'string' was found on type 'Web3Context' + this[extendObj.property] = {}; + + extendObj.methods?.forEach(element => { + const method = async (...givenParams: unknown[]) => + this.requestManager.send({ + method: element.call, + params: givenParams, + }); + + if (extendObj.property) + // @ts-expect-error No index signature with a parameter of type 'string' was found on type 'Web3Context' + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + this[extendObj.property][element.name] = method; + // @ts-expect-error No index signature with a parameter of type 'string' was found on type 'Web3Context' + else this[element.name] = method; + }); + return this; + } +} + +// To avoid cycle dependency declare this type in this file +export type TransactionBuilder = < + ReturnType = Transaction, +>(options: { + transaction: Transaction; + web3Context: Web3Context; + privateKey?: HexString | Uint8Array; + fillGasPrice?: boolean; +}) => Promise; + +/** + * Extend this class when creating a plugin that either doesn't require {@link EthExecutionAPI}, + * or interacts with a RPC node that doesn't fully implement {@link EthExecutionAPI}. + * + * To add type support for RPC methods to the {@link Web3RequestManager}, + * define a {@link Web3APISpec} and pass it as a generic to Web3PluginBase like so: + * + * @example + * ```ts + * type CustomRpcApi = { + * custom_rpc_method: () => string; + * custom_rpc_method_with_parameters: (parameter1: string, parameter2: number) => string; + * }; + * + * class CustomPlugin extends Web3PluginBase {...} + * ``` + */ +export abstract class Web3PluginBase< + API extends Web3APISpec = Web3APISpec, +> extends Web3Context { + public abstract pluginNamespace: string; +} + +/** + * Extend this class when creating a plugin that makes use of {@link EthExecutionAPI}, + * or depends on other Web3 packages (such as `web3-eth-contract`) that depend on {@link EthExecutionAPI}. + * + * To add type support for RPC methods to the {@link Web3RequestManager} (in addition to {@link EthExecutionAPI}), + * define a {@link Web3APISpec} and pass it as a generic to Web3PluginBase like so: + * + * @example + * ```ts + * type CustomRpcApi = { + * custom_rpc_method: () => string; + * custom_rpc_method_with_parameters: (parameter1: string, parameter2: number) => string; + * }; + * + * class CustomPlugin extends Web3PluginBase {...} + * ``` + */ +export abstract class Web3EthPluginBase extends Web3PluginBase< + API & EthExecutionAPI +> {} diff --git a/packages/web3-core/src/web3_event_emitter.ts b/packages/web3-core/src/web3_event_emitter.ts new file mode 100644 index 00000000000..36180c51df3 --- /dev/null +++ b/packages/web3-core/src/web3_event_emitter.ts @@ -0,0 +1,73 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { EventEmitter } from 'web3-utils'; + +export type Web3EventMap = Record; +export type Web3EventKey = string & keyof T; +export type Web3EventCallback = (params: T) => void | Promise; +export interface Web3Emitter { + on>(eventName: K, fn: Web3EventCallback): void; + once>(eventName: K, fn: Web3EventCallback): void; + off>(eventName: K, fn: Web3EventCallback): void; + emit>(eventName: K, params: T[K]): void; +} + +export class Web3EventEmitter implements Web3Emitter { + private readonly _emitter = new EventEmitter(); + + public on>(eventName: K, fn: Web3EventCallback) { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + this._emitter.on(eventName, fn); + } + + public once>(eventName: K, fn: Web3EventCallback) { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + this._emitter.once(eventName, fn); + } + + public off>(eventName: K, fn: Web3EventCallback) { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + this._emitter.off(eventName, fn); + } + + public emit>(eventName: K, params: T[K]) { + this._emitter.emit(eventName, params); + } + + public listenerCount>(eventName: K) { + return this._emitter.listenerCount(eventName); + } + + public listeners>(eventName: K) { + return this._emitter.listeners(eventName); + } + + public eventNames() { + return this._emitter.eventNames(); + } + + public removeAllListeners() { + return this._emitter.removeAllListeners(); + } + public setMaxListenerWarningThreshold(maxListenersWarningThreshold: number) { + this._emitter.setMaxListeners(maxListenersWarningThreshold); + } + public getMaxListeners() { + return this._emitter.getMaxListeners(); + } +} diff --git a/packages/web3-core/src/web3_promi_event.ts b/packages/web3-core/src/web3_promi_event.ts new file mode 100644 index 00000000000..c907d1f1529 --- /dev/null +++ b/packages/web3-core/src/web3_promi_event.ts @@ -0,0 +1,79 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + Web3EventCallback, + Web3EventEmitter, + Web3EventKey, + Web3EventMap, +} from './web3_event_emitter.js'; + +export type PromiseExecutor = ( + resolve: (data: T) => void, + reject: (reason: unknown) => void, +) => void; + +export class Web3PromiEvent + extends Web3EventEmitter + implements Promise +{ + private readonly _promise: Promise; + + public constructor(executor: PromiseExecutor) { + super(); + this._promise = new Promise(executor); + } + + // public tag to treat object as promise by different libs + // eslint-disable-next-line @typescript-eslint/prefer-as-const + public [Symbol.toStringTag]: 'Promise' = 'Promise'; + + public async then( + onfulfilled?: ((value: ResolveType) => TResult1 | PromiseLike) | undefined, + onrejected?: ((reason: unknown) => TResult2 | PromiseLike) | undefined, + ): Promise { + return this._promise.then(onfulfilled, onrejected); + } + + public async catch( + onrejected?: ((reason: unknown) => TResult | PromiseLike) | undefined, + ): Promise { + return this._promise.catch(onrejected); + } + + public async finally(onfinally?: (() => void) | undefined): Promise { + return this._promise.finally(onfinally); + } + + public on>( + eventName: K, + fn: Web3EventCallback, + ): this { + super.on(eventName, fn); + + return this; + } + + public once>( + eventName: K, + fn: Web3EventCallback, + ): this { + super.once(eventName, fn); + + return this; + } +} diff --git a/packages/web3-core/src/web3_request_manager.ts b/packages/web3-core/src/web3_request_manager.ts new file mode 100644 index 00000000000..7a6018ce253 --- /dev/null +++ b/packages/web3-core/src/web3_request_manager.ts @@ -0,0 +1,467 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + ContractExecutionError, + InvalidResponseError, + ProviderError, + ResponseError, + rpcErrorsMap, + RpcError, +} from 'web3-errors'; +import HttpProvider from 'web3-providers-http'; +import WSProvider from 'web3-providers-ws'; +import { + EthExecutionAPI, + JsonRpcBatchRequest, + JsonRpcBatchResponse, + JsonRpcPayload, + JsonRpcResponse, + JsonRpcError, + JsonRpcResponseWithResult, + JsonRpcResponseWithError, + SupportedProviders, + Web3APIMethod, + Web3APIPayload, + Web3APIRequest, + Web3APIReturnType, + Web3APISpec, + Web3BaseProvider, + Web3BaseProviderConstructor, +} from 'web3-types'; +import { isNullish, isPromise, jsonRpc, isResponseRpcError } from 'web3-utils'; +import { + isEIP1193Provider, + isLegacyRequestProvider, + isLegacySendAsyncProvider, + isLegacySendProvider, + isWeb3Provider, +} from './utils.js'; +import { Web3EventEmitter } from './web3_event_emitter.js'; + +export enum Web3RequestManagerEvent { + PROVIDER_CHANGED = 'PROVIDER_CHANGED', + BEFORE_PROVIDER_CHANGE = 'BEFORE_PROVIDER_CHANGE', +} + +const availableProviders: { + HttpProvider: Web3BaseProviderConstructor; + WebsocketProvider: Web3BaseProviderConstructor; +} = { + HttpProvider: HttpProvider as Web3BaseProviderConstructor, + WebsocketProvider: WSProvider as Web3BaseProviderConstructor, +}; + +export class Web3RequestManager< + API extends Web3APISpec = EthExecutionAPI, +> extends Web3EventEmitter<{ + [key in Web3RequestManagerEvent]: SupportedProviders | undefined; +}> { + private _provider?: SupportedProviders; + private readonly useRpcCallSpecification?: boolean; + public constructor( + provider?: SupportedProviders | string, + useRpcCallSpecification?: boolean, + ) { + super(); + + if (!isNullish(provider)) { + this.setProvider(provider); + } + this.useRpcCallSpecification = useRpcCallSpecification; + } + + /** + * Will return all available providers + */ + public static get providers() { + return availableProviders; + } + + /** + * Will return the current provider. + * + * @returns Returns the current provider + */ + public get provider() { + return this._provider; + } + + /** + * Will return all available providers + */ + // eslint-disable-next-line class-methods-use-this + public get providers() { + return availableProviders; + } + + /** + * Use to set provider. Provider can be a provider instance or a string. + * + * @param provider - The provider to set + */ + public setProvider(provider?: SupportedProviders | string): boolean { + let newProvider: SupportedProviders | undefined; + + // autodetect provider + if (provider && typeof provider === 'string' && this.providers) { + // HTTP + if (/^http(s)?:\/\//i.test(provider)) { + newProvider = new this.providers.HttpProvider(provider); + + // WS + } else if (/^ws(s)?:\/\//i.test(provider)) { + newProvider = new this.providers.WebsocketProvider(provider); + } else { + throw new ProviderError(`Can't autodetect provider for "${provider}"`); + } + } else if (isNullish(provider)) { + // In case want to unset the provider + newProvider = undefined; + } else { + newProvider = provider as SupportedProviders; + } + + this.emit(Web3RequestManagerEvent.BEFORE_PROVIDER_CHANGE, this._provider); + this._provider = newProvider; + this.emit(Web3RequestManagerEvent.PROVIDER_CHANGED, this._provider); + return true; + } + + /** + * + * Will execute a request + * + * @param request - {@link Web3APIRequest} The request to send + * + * @returns The response of the request {@link ResponseType}. If there is error + * in the response, will throw an error + */ + public async send< + Method extends Web3APIMethod, + ResponseType = Web3APIReturnType, + >(request: Web3APIRequest): Promise { + const response = await this._sendRequest(request); + if (jsonRpc.isResponseWithResult(response)) { + return response.result; + } + + throw new ResponseError(response); + } + + /** + * Same as send, but, will execute a batch of requests + * + * @param request {@link JsonRpcBatchRequest} The batch request to send + */ + public async sendBatch(request: JsonRpcBatchRequest): Promise> { + const response = await this._sendRequest(request); + + return response as JsonRpcBatchResponse; + } + + private async _sendRequest< + Method extends Web3APIMethod, + ResponseType = Web3APIReturnType, + >( + request: Web3APIRequest | JsonRpcBatchRequest, + ): Promise> { + const { provider } = this; + + if (isNullish(provider)) { + throw new ProviderError( + 'Provider not available. Use `.setProvider` or `.provider=` to initialize the provider.', + ); + } + + const payload = jsonRpc.isBatchRequest(request) + ? jsonRpc.toBatchPayload(request) + : jsonRpc.toPayload(request); + + if (isWeb3Provider(provider)) { + let response; + + try { + response = await provider.request( + payload as Web3APIPayload, + ); + } catch (error) { + // Check if the provider throw an error instead of reject with error + response = error as JsonRpcResponse; + } + return this._processJsonRpcResponse(payload, response, { legacy: false, error: false }); + } + + if (isEIP1193Provider(provider)) { + return (provider as Web3BaseProvider) + .request(payload as Web3APIPayload) + .then( + res => + this._processJsonRpcResponse(payload, res, { + legacy: true, + error: false, + }) as JsonRpcResponseWithResult, + ) + .catch(error => + this._processJsonRpcResponse( + payload, + error as JsonRpcResponse, + { legacy: true, error: true }, + ), + ); + } + + // TODO: This could be deprecated and removed. + if (isLegacyRequestProvider(provider)) { + return new Promise>((resolve, reject) => { + const rejectWithError = (err: unknown) => + reject( + this._processJsonRpcResponse( + payload, + err as JsonRpcResponse, + { + legacy: true, + error: true, + }, + ), + ); + const resolveWithResponse = (response: JsonRpcResponse) => + resolve( + this._processJsonRpcResponse(payload, response, { + legacy: true, + error: false, + }), + ); + const result = provider.request( + payload, + // a callback that is expected to be called after getting the response: + (err, response) => { + if (err) { + return rejectWithError(err); + } + + return resolveWithResponse(response); + }, + ); + // Some providers, that follow a previous drafted version of EIP1193, has a `request` function + // that is not defined as `async`, but it returns a promise. + // Such providers would not be picked with if(isEIP1193Provider(provider)) above + // because the `request` function was not defined with `async` and so the function definition is not `AsyncFunction`. + // Like this provider: https://github.dev/NomicFoundation/hardhat/blob/62bea2600785595ba36f2105564076cf5cdf0fd8/packages/hardhat-core/src/internal/core/providers/backwards-compatibility.ts#L19 + // So check if the returned result is a Promise, and resolve with it accordingly. + // Note: in this case we expect the callback provided above to never be called. + if (isPromise(result)) { + const responsePromise = result as unknown as Promise< + JsonRpcResponse + >; + responsePromise.then(resolveWithResponse).catch(rejectWithError); + } + }); + } + + // TODO: This could be deprecated and removed. + if (isLegacySendProvider(provider)) { + return new Promise>((resolve, reject): void => { + provider.send(payload, (err, response) => { + if (err) { + return reject( + this._processJsonRpcResponse( + payload, + err as unknown as JsonRpcResponse, + { + legacy: true, + error: true, + }, + ), + ); + } + + if (isNullish(response)) { + throw new ResponseError( + '' as never, + 'Got a "nullish" response from provider.', + ); + } + + return resolve( + this._processJsonRpcResponse(payload, response, { + legacy: true, + error: false, + }), + ); + }); + }); + } + + // TODO: This could be deprecated and removed. + if (isLegacySendAsyncProvider(provider)) { + return provider + .sendAsync(payload) + .then(response => + this._processJsonRpcResponse(payload, response, { legacy: true, error: false }), + ) + .catch(error => + this._processJsonRpcResponse(payload, error as JsonRpcResponse, { + legacy: true, + error: true, + }), + ); + } + + throw new ProviderError('Provider does not have a request or send method to use.'); + } + + // eslint-disable-next-line class-methods-use-this + private _processJsonRpcResponse( + payload: JsonRpcPayload, + response: JsonRpcResponse, + { legacy, error }: { legacy: boolean; error: boolean }, + ): JsonRpcResponse | never { + if (isNullish(response)) { + return this._buildResponse( + payload, + // Some providers uses "null" as valid empty response + // eslint-disable-next-line no-null/no-null + null as unknown as JsonRpcResponse, + error, + ); + } + + // This is the majority of the cases so check these first + // A valid JSON-RPC response with error object + if (jsonRpc.isResponseWithError(response)) { + // check if its an rpc error + if ( + this.useRpcCallSpecification && + isResponseRpcError(response as JsonRpcResponseWithError) + ) { + const rpcErrorResponse = response as JsonRpcResponseWithError; + // check if rpc error flag is on and response error code match an EIP-1474 or a standard rpc error code + if (rpcErrorsMap.get(rpcErrorResponse.error.code)) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const Err = rpcErrorsMap.get(rpcErrorResponse.error.code)!.error; + throw new Err(rpcErrorResponse); + } else { + throw new RpcError(rpcErrorResponse); + } + } else if (!Web3RequestManager._isReverted(response)) { + throw new InvalidResponseError(response, payload); + } + } + + // This is the majority of the cases so check these first + // A valid JSON-RPC response with result object + if (jsonRpc.isResponseWithResult(response)) { + return response; + } + + if ((response as unknown) instanceof Error) { + Web3RequestManager._isReverted(response); + throw response; + } + + if (!legacy && jsonRpc.isBatchRequest(payload) && jsonRpc.isBatchResponse(response)) { + return response as JsonRpcBatchResponse; + } + + if (legacy && !error && jsonRpc.isBatchRequest(payload)) { + return response as JsonRpcBatchResponse; + } + + if (legacy && error && jsonRpc.isBatchRequest(payload)) { + // In case of error batch response we don't want to throw Invalid response + throw response; + } + + if ( + legacy && + !jsonRpc.isResponseWithError(response) && + !jsonRpc.isResponseWithResult(response) + ) { + return this._buildResponse(payload, response, error); + } + + if (jsonRpc.isBatchRequest(payload) && !Array.isArray(response)) { + throw new ResponseError(response, 'Got normal response for a batch request.'); + } + + if (!jsonRpc.isBatchRequest(payload) && Array.isArray(response)) { + throw new ResponseError(response, 'Got batch response for a normal request.'); + } + + if ( + (jsonRpc.isResponseWithError(response) || jsonRpc.isResponseWithResult(response)) && + !jsonRpc.isBatchRequest(payload) + ) { + if (response.id && payload.id !== response.id) { + throw new InvalidResponseError(response); + } + } + + throw new ResponseError(response, 'Invalid response'); + } + + private static _isReverted( + response: JsonRpcResponse, + ): boolean { + let error: JsonRpcError | undefined; + + if (jsonRpc.isResponseWithError(response)) { + error = (response as JsonRpcResponseWithError).error; + } else if ((response as unknown) instanceof Error) { + error = response as unknown as JsonRpcError; + } + + // This message means that there was an error while executing the code of the smart contract + // However, more processing will happen at a higher level to decode the error data, + // according to the Error ABI, if it was available as of EIP-838. + if (error?.message.includes('revert')) throw new ContractExecutionError(error); + + return false; + } + // Need to use same types as _processJsonRpcResponse so have to declare as instance method + // eslint-disable-next-line class-methods-use-this + private _buildResponse( + payload: JsonRpcPayload, + response: JsonRpcResponse, + error: boolean, + ): JsonRpcResponse { + const res = { + jsonrpc: '2.0', + // eslint-disable-next-line no-nested-ternary + id: jsonRpc.isBatchRequest(payload) + ? payload[0].id + : 'id' in payload + ? payload.id + : // Have to use the null here explicitly + // eslint-disable-next-line no-null/no-null + null, + }; + + if (error) { + return { + ...res, + error: response as unknown, + } as JsonRpcResponse; + } + + return { + ...res, + result: response as unknown, + } as JsonRpcResponse; + } +} diff --git a/packages/web3-core/src/web3_subscription_manager.ts b/packages/web3-core/src/web3_subscription_manager.ts new file mode 100644 index 00000000000..8e76498e3c2 --- /dev/null +++ b/packages/web3-core/src/web3_subscription_manager.ts @@ -0,0 +1,266 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + DataFormat, + DEFAULT_RETURN_FORMAT, + EIP1193Provider, + JsonRpcNotification, + JsonRpcSubscriptionResult, + JsonRpcSubscriptionResultOld, + Log, + Web3APISpec, + Web3BaseProvider, +} from 'web3-types'; +import { ProviderError, SubscriptionError } from 'web3-errors'; +import { isNullish } from 'web3-utils'; +import { isSupportSubscriptions } from './utils.js'; +import { Web3RequestManager, Web3RequestManagerEvent } from './web3_request_manager.js'; +// eslint-disable-next-line import/no-cycle +import { Web3SubscriptionConstructor } from './web3_subscriptions.js'; + +type ShouldUnsubscribeCondition = ({ + id, + sub, +}: { + id: string; + sub: unknown; +}) => boolean | undefined; + +export class Web3SubscriptionManager< + API extends Web3APISpec = Web3APISpec, + RegisteredSubs extends { [key: string]: Web3SubscriptionConstructor } = { + [key: string]: Web3SubscriptionConstructor; + }, +> { + private readonly _subscriptions: Map< + string, + InstanceType + > = new Map(); + + /** + * + * @param - requestManager + * @param - registeredSubscriptions + * + * @example + * ```ts + * const requestManager = new Web3RequestManager("ws://localhost:8545"); + * const subscriptionManager = new Web3SubscriptionManager(requestManager, {}); + * ``` + */ + public constructor( + requestManager: Web3RequestManager, + registeredSubscriptions: RegisteredSubs, + ); + /** + * @deprecated This constructor overloading should not be used + */ + public constructor( + requestManager: Web3RequestManager, + registeredSubscriptions: RegisteredSubs, + tolerateUnlinkedSubscription: boolean, + ); + public constructor( + public readonly requestManager: Web3RequestManager, + public readonly registeredSubscriptions: RegisteredSubs, + private readonly tolerateUnlinkedSubscription: boolean = false, + ) { + this.requestManager.on(Web3RequestManagerEvent.BEFORE_PROVIDER_CHANGE, async () => { + await this.unsubscribe(); + }); + + this.requestManager.on(Web3RequestManagerEvent.PROVIDER_CHANGED, () => { + this.clear(); + this.listenToProviderEvents(); + }); + + this.listenToProviderEvents(); + } + + private listenToProviderEvents() { + const providerAsWebProvider = this.requestManager.provider as Web3BaseProvider; + if ( + !this.requestManager.provider || + (typeof providerAsWebProvider?.supportsSubscriptions === 'function' && + !providerAsWebProvider?.supportsSubscriptions()) + ) { + return; + } + + if (typeof (this.requestManager.provider as EIP1193Provider).on === 'function') { + if ( + typeof (this.requestManager.provider as EIP1193Provider).request === 'function' + ) { + // Listen to provider messages and data + (this.requestManager.provider as EIP1193Provider).on( + 'message', + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument + (message: any) => this.messageListener(message), + ); + } else { + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument + providerAsWebProvider.on('data', (data: any) => this.messageListener(data)); + } + } + } + + protected messageListener( + data?: + | JsonRpcSubscriptionResult + | JsonRpcSubscriptionResultOld + | JsonRpcNotification, + ) { + if (!data) { + throw new SubscriptionError('Should not call messageListener with no data. Type was'); + } + const subscriptionId = + (data as JsonRpcNotification).params?.subscription || + (data as JsonRpcSubscriptionResultOld).data?.subscription || + (data as JsonRpcSubscriptionResult).id?.toString(16); + + // Process if the received data is related to a subscription + if (subscriptionId) { + const sub = this._subscriptions.get(subscriptionId); + sub?.processSubscriptionData(data); + } + } + /** + * Will create a new subscription + * + * @param name - The subscription you want to subscribe to + * @param args - Optional additional parameters, depending on the subscription type + * @param returnFormat- ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) - Specifies how the return data from the call should be formatted. + * + * Will subscribe to a specific topic (note: name) + * @returns The subscription object + */ + public async subscribe( + name: T, + args?: ConstructorParameters[0], + returnFormat: DataFormat = DEFAULT_RETURN_FORMAT, + ): Promise> { + const Klass: RegisteredSubs[T] = this.registeredSubscriptions[name]; + if (!Klass) { + throw new SubscriptionError('Invalid subscription type'); + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + const subscription = new Klass(args ?? undefined, { + subscriptionManager: this as Web3SubscriptionManager, + returnFormat, + } as any) as InstanceType; + + await this.addSubscription(subscription); + + return subscription; + } + + /** + * Will returns all subscriptions. + */ + public get subscriptions() { + return this._subscriptions; + } + + /** + * + * Adds an instance of {@link Web3Subscription} and subscribes to it + * + * @param sub - A {@link Web3Subscription} object + */ + public async addSubscription(sub: InstanceType) { + if (!this.requestManager.provider) { + throw new ProviderError('Provider not available'); + } + + if (!this.supportsSubscriptions()) { + throw new SubscriptionError('The current provider does not support subscriptions'); + } + + if (sub.id && this._subscriptions.has(sub.id)) { + throw new SubscriptionError(`Subscription with id "${sub.id}" already exists`); + } + + await sub.sendSubscriptionRequest(); + + if (isNullish(sub.id)) { + throw new SubscriptionError('Subscription is not subscribed yet.'); + } + + this._subscriptions.set(sub.id, sub); + + return sub.id; + } + + /** + * Will clear a subscription + * + * @param id - The subscription of type {@link Web3Subscription} to remove + */ + public async removeSubscription(sub: InstanceType) { + const { id } = sub; + + if (isNullish(id)) { + throw new SubscriptionError( + 'Subscription is not subscribed yet. Or, had already been unsubscribed but not through the Subscription Manager.', + ); + } + + if (!this._subscriptions.has(id) && !this.tolerateUnlinkedSubscription) { + throw new SubscriptionError(`Subscription with id "${id.toString()}" does not exists`); + } + + await sub.sendUnsubscribeRequest(); + this._subscriptions.delete(id); + return id; + } + /** + * Will unsubscribe all subscriptions that fulfill the condition + * + * @param condition - A function that access and `id` and a `subscription` and return `true` or `false` + * @returns An array of all the un-subscribed subscriptions + */ + public async unsubscribe(condition?: ShouldUnsubscribeCondition) { + const result = []; + for (const [id, sub] of this.subscriptions.entries()) { + if (!condition || (typeof condition === 'function' && condition({ id, sub }))) { + result.push(this.removeSubscription(sub)); + } + } + + return Promise.all(result); + } + + /** + * Clears all subscriptions + */ + public clear() { + this._subscriptions.clear(); + } + + /** + * Check whether the current provider supports subscriptions. + * + * @returns `true` or `false` depending on if the current provider supports subscriptions + */ + public supportsSubscriptions(): boolean { + return isNullish(this.requestManager.provider) + ? false + : isSupportSubscriptions(this.requestManager.provider); + } +} diff --git a/packages/web3-core/src/web3_subscriptions.ts b/packages/web3-core/src/web3_subscriptions.ts new file mode 100644 index 00000000000..3cf4cee9f50 --- /dev/null +++ b/packages/web3-core/src/web3_subscriptions.ts @@ -0,0 +1,218 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// eslint-disable-next-line max-classes-per-file +import { + BlockOutput, + DEFAULT_RETURN_FORMAT, + DataFormat, + EthExecutionAPI, + JsonRpcSubscriptionResult, + JsonRpcSubscriptionResultOld, + JsonRpcNotification, + Log, + HexString, + Web3APIParams, + Web3APISpec, +} from 'web3-types'; +import { jsonRpc } from 'web3-utils'; +import { SubscriptionError } from 'web3-errors'; + +// eslint-disable-next-line import/no-cycle +import { Web3SubscriptionManager } from './web3_subscription_manager.js'; +import { Web3EventEmitter, Web3EventMap } from './web3_event_emitter.js'; +import { Web3RequestManager } from './web3_request_manager.js'; + +type CommonSubscriptionEvents = { + data: unknown; // Fires on each incoming block header. + error: Error; // Fires when an error in the subscription occurs. + connected: string; // Fires once after the subscription successfully connected. Returns the subscription id. +}; + +export abstract class Web3Subscription< + EventMap extends Web3EventMap, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ArgsType = any, + API extends Web3APISpec = EthExecutionAPI, + // The following generic type is just to define the type `CombinedEventMap` and use it inside the class + // it combines the user passed `EventMap` with the `CommonSubscriptionEvents` + // However, this type definition could be refactored depending on the closure of + // [Permit type alias declarations inside a class](https://github.com/microsoft/TypeScript/issues/7061) + CombinedEventMap extends CommonSubscriptionEvents = EventMap & CommonSubscriptionEvents, +> extends Web3EventEmitter { + private readonly _subscriptionManager: Web3SubscriptionManager; + private readonly _lastBlock?: BlockOutput; + private readonly _returnFormat: DataFormat; + protected _id?: HexString; + + public constructor( + args: ArgsType, + options: { subscriptionManager: Web3SubscriptionManager; returnFormat?: DataFormat }, + ); + /** + * @deprecated This constructor overloading should not be used + */ + public constructor( + args: ArgsType, + options: { requestManager: Web3RequestManager; returnFormat?: DataFormat }, + ); + public constructor( + public readonly args: ArgsType, + options: ( + | { subscriptionManager: Web3SubscriptionManager } + | { requestManager: Web3RequestManager } + ) & { + returnFormat?: DataFormat; + }, + ) { + super(); + const { requestManager } = options as { requestManager: Web3RequestManager }; + const { subscriptionManager } = options as { subscriptionManager: Web3SubscriptionManager }; + if (requestManager && subscriptionManager) { + throw new SubscriptionError( + 'Only requestManager or subscriptionManager should be provided at Subscription constructor', + ); + } + if (!requestManager && !subscriptionManager) { + throw new SubscriptionError( + 'Either requestManager or subscriptionManager should be provided at Subscription constructor', + ); + } + if (requestManager) { + // eslint-disable-next-line deprecation/deprecation + this._subscriptionManager = new Web3SubscriptionManager(requestManager, {}, true); + } else { + this._subscriptionManager = subscriptionManager; + } + + this._returnFormat = options?.returnFormat ?? (DEFAULT_RETURN_FORMAT as DataFormat); + } + + public get id() { + return this._id; + } + + public get lastBlock() { + return this._lastBlock; + } + + public async subscribe(): Promise { + return this._subscriptionManager.addSubscription(this); + } + + public processSubscriptionData( + data: + | JsonRpcSubscriptionResult + | JsonRpcSubscriptionResultOld + | JsonRpcNotification, + ) { + if (data?.data) { + // for EIP-1193 provider + this._processSubscriptionResult(data?.data?.result ?? data?.data); + } else if ( + data && + jsonRpc.isResponseWithNotification( + data as unknown as JsonRpcSubscriptionResult | JsonRpcNotification, + ) + ) { + this._processSubscriptionResult(data?.params.result); + } + } + + public async sendSubscriptionRequest(): Promise { + this._id = await this._subscriptionManager.requestManager.send({ + method: 'eth_subscribe', + params: this._buildSubscriptionParams(), + }); + + this.emit('connected', this._id); + return this._id; + } + + protected get returnFormat() { + return this._returnFormat; + } + + protected get subscriptionManager() { + return this._subscriptionManager; + } + + public async resubscribe() { + await this.unsubscribe(); + await this.subscribe(); + } + + public async unsubscribe() { + if (!this.id) { + return; + } + + await this._subscriptionManager.removeSubscription(this); + } + + public async sendUnsubscribeRequest() { + await this._subscriptionManager.requestManager.send({ + method: 'eth_unsubscribe', + params: [this.id] as Web3APIParams, + }); + this._id = undefined; + } + + // eslint-disable-next-line class-methods-use-this + protected formatSubscriptionResult(data: CombinedEventMap['data']) { + return data; + } + + public _processSubscriptionResult(data: CombinedEventMap['data'] | unknown) { + this.emit('data', this.formatSubscriptionResult(data)); + } + + public _processSubscriptionError(error: Error) { + this.emit('error', error); + } + + // eslint-disable-next-line class-methods-use-this + protected _buildSubscriptionParams(): Web3APIParams { + // This should be overridden in the subclass + throw new Error('Implement in the child class'); + } +} + +export type Web3SubscriptionConstructor< + API extends Web3APISpec, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + SubscriptionType extends Web3Subscription = Web3Subscription, +> = + | (new ( + // We accept any type of arguments here and don't deal with this type internally + // eslint-disable-next-line @typescript-eslint/no-explicit-any + args: any, + options: + | { subscriptionManager: Web3SubscriptionManager; returnFormat?: DataFormat } + | { requestManager: Web3RequestManager; returnFormat?: DataFormat }, + ) => SubscriptionType) + | (new ( + args: any, + options: { + subscriptionManager: Web3SubscriptionManager; + returnFormat?: DataFormat; + }, + ) => SubscriptionType) + | (new ( + args: any, + options: { requestManager: Web3RequestManager; returnFormat?: DataFormat }, + ) => SubscriptionType); diff --git a/packages/web3-core/test/.eslintrc.js b/packages/web3-core/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-core/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-core/test/config/jest.config.js b/packages/web3-core/test/config/jest.config.js new file mode 100644 index 00000000000..4a60f95b353 --- /dev/null +++ b/packages/web3-core/test/config/jest.config.js @@ -0,0 +1,43 @@ +module.exports = { + globals: { + 'ts-jest': { + tsconfig: './test/tsconfig.json', + }, + }, + rootDir: '../..', + testMatch: ['/test/**/?(*.)+(spec|test).+(ts|tsx|js)'], + setupFilesAfterEnv: ['/test/config/setup.js'], + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + verbose: false, + collectCoverage: false, + coverageReporters: ['json'], + coverageDirectory: '.coverage', + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, +}; diff --git a/packages/web3-core/test/config/setup.js b/packages/web3-core/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-core/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-core/test/integration/jest.config.js b/packages/web3-core/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-core/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-core/test/integration/setup.js b/packages/web3-core/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-core/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-core/test/tsconfig.json b/packages/web3-core/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-core/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-core/test/unit/__snapshots__/web3_context.test.ts.snap b/packages/web3-core/test/unit/__snapshots__/web3_context.test.ts.snap new file mode 100644 index 00000000000..bcfd03001aa --- /dev/null +++ b/packages/web3-core/test/unit/__snapshots__/web3_context.test.ts.snap @@ -0,0 +1,81 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Web3Context getContextObject should return correct context object 1`] = ` +Object { + "accountProvider": undefined, + "config": Object { + "blockHeaderTimeout": 10, + "contractDataInputFill": "input", + "defaultAccount": undefined, + "defaultBlock": "latest", + "defaultChain": "mainnet", + "defaultCommon": undefined, + "defaultHardfork": "london", + "defaultMaxPriorityFeePerGas": "0x9502f900", + "defaultNetworkId": undefined, + "defaultTransactionType": "0x2", + "enableExperimentalFeatures": Object { + "useRpcCallSpecification": false, + "useSubscriptionWhenCheckingBlockTimeout": false, + }, + "handleRevert": false, + "maxListenersWarningThreshold": 100, + "transactionBlockTimeout": 50, + "transactionBuilder": undefined, + "transactionConfirmationBlocks": 24, + "transactionConfirmationPollingInterval": undefined, + "transactionPollingInterval": 1000, + "transactionPollingTimeout": 750000, + "transactionReceiptPollingInterval": undefined, + "transactionSendTimeout": 750000, + "transactionTypeParser": undefined, + }, + "provider": HttpProvider { + "clientUrl": "http://test/abc", + "httpProviderOptions": undefined, + }, + "providers": Object { + "HttpProvider": [Function], + "WebsocketProvider": [Function], + }, + "registeredSubscriptions": Object {}, + "requestManager": Web3RequestManager { + "_emitter": EventEmitter { + "_events": Object { + "BEFORE_PROVIDER_CHANGE": [Function], + "PROVIDER_CHANGED": [Function], + }, + "_eventsCount": 2, + "_maxListeners": undefined, + Symbol(kCapture): false, + }, + "_provider": HttpProvider { + "clientUrl": "http://test/abc", + "httpProviderOptions": undefined, + }, + "useRpcCallSpecification": undefined, + }, + "subscriptionManager": Web3SubscriptionManager { + "_subscriptions": Map {}, + "registeredSubscriptions": Object {}, + "requestManager": Web3RequestManager { + "_emitter": EventEmitter { + "_events": Object { + "BEFORE_PROVIDER_CHANGE": [Function], + "PROVIDER_CHANGED": [Function], + }, + "_eventsCount": 2, + "_maxListeners": undefined, + Symbol(kCapture): false, + }, + "_provider": HttpProvider { + "clientUrl": "http://test/abc", + "httpProviderOptions": undefined, + }, + "useRpcCallSpecification": undefined, + }, + "tolerateUnlinkedSubscription": false, + }, + "wallet": undefined, +} +`; diff --git a/packages/web3-core/test/unit/fixtures/example_subscription.ts b/packages/web3-core/test/unit/fixtures/example_subscription.ts new file mode 100644 index 00000000000..ee23ce2311e --- /dev/null +++ b/packages/web3-core/test/unit/fixtures/example_subscription.ts @@ -0,0 +1,29 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Subscription } from '../../../src'; + +export class ExampleSubscription extends Web3Subscription< + { data: string }, + { param1: string }, + { eth_subscribe: (newHeads: string) => void } +> { + // eslint-disable-next-line class-methods-use-this + protected _buildSubscriptionParams() { + return ['newHeads']; + } +} diff --git a/packages/web3-core/test/unit/formatters.test.ts b/packages/web3-core/test/unit/formatters.test.ts new file mode 100644 index 00000000000..d1aedd01d71 --- /dev/null +++ b/packages/web3-core/test/unit/formatters.test.ts @@ -0,0 +1,685 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import * as utils from 'web3-utils'; +import { BlockTags } from 'web3-types'; +import { Iban } from 'web3-eth-iban'; +import { + inputAddressFormatter, + inputBlockNumberFormatter, + inputDefaultBlockNumberFormatter, + inputPostFormatter, + outputBigIntegerFormatter, + outputBlockFormatter, + outputLogFormatter, + outputPostFormatter, + outputProofFormatter, + outputSyncingFormatter, + outputTransactionReceiptFormatter, + txInputOptionsFormatter, +} from '../../src/formatters'; + +import * as formatters from '../../src/formatters'; + +/* eslint-disable deprecation/deprecation */ +jest.mock('web3-eth-iban'); +jest.mock('web3-utils'); + +describe('formatters', () => { + const toNumberResult = 12345; + const numberToHexResult = '0xff'; + const hexToNumberResult = 123; + const sha3Result = 'sha3Result'; + const toChecksumAddressResult = 'toChecksumAddress'; + const hexToNumberStringResult = '1234'; + + beforeEach(() => { + jest.spyOn(utils, 'toChecksumAddress').mockReturnValue(toChecksumAddressResult); + jest.spyOn(utils, 'hexToNumberString').mockReturnValue(hexToNumberStringResult); + jest.spyOn(utils, 'toNumber').mockReturnValue(toNumberResult); + jest.spyOn(utils, 'numberToHex').mockReturnValue(numberToHexResult); + jest.spyOn(utils, 'hexToNumber').mockReturnValue(hexToNumberResult); + jest.spyOn(utils, 'isHexStrict').mockReturnValue(true); + jest.spyOn(utils, 'isAddress').mockReturnValue(true); + jest.spyOn(utils, 'sha3Raw').mockReturnValue(sha3Result); + jest.spyOn(Iban, 'isValid').mockImplementation(() => false); + jest.spyOn(Iban, 'isDirect').mockImplementation(() => false); + }); + + describe('outputProofFormatter', () => { + it('should format the values correctly', () => { + const result = outputProofFormatter({ + address: '0x09d7bD9E185fbC2d265D8DBe81e5e888E391688b', + nonce: '0xFF', + balance: '0xFA', + }); + + expect(utils.toChecksumAddress).toHaveBeenCalledWith( + '0x09d7bD9E185fbC2d265D8DBe81e5e888E391688b', + ); + expect(utils.hexToNumberString).toHaveBeenCalledWith('0xFF'); + expect(utils.hexToNumberString).toHaveBeenCalledWith('0xFA'); + + expect(result).toEqual({ + address: toChecksumAddressResult, + balance: hexToNumberStringResult, + nonce: hexToNumberStringResult, + }); + }); + }); + + describe('outputBigIntegerFormatter', () => { + it('should convert input to number', () => { + const result = outputBigIntegerFormatter(BigInt(12)); + + expect(utils.toNumber).toHaveBeenCalledWith(BigInt(12)); + expect(result).toEqual(toNumberResult); + }); + }); + + describe('inputBlockNumberFormatter', () => { + it('should return undefined if block number not given', () => { + expect(inputBlockNumberFormatter(undefined)).toBeUndefined(); + }); + + it.each([BlockTags.EARLIEST, BlockTags.LATEST, BlockTags.PENDING])( + 'should return "%s" values for "%s" block numbers', + blockNumber => { + expect(inputBlockNumberFormatter(blockNumber)).toEqual(blockNumber); + }, + ); + + it('should return valid genesis block number', () => { + expect(inputBlockNumberFormatter('genesis')).toBe('0x0'); + }); + + it('should return lower case hex value for a valid hex string', () => { + jest.spyOn(utils, 'isHexStrict').mockReturnValue(true); + const result = inputBlockNumberFormatter('0xAF0AF'); + + expect(utils.isHexStrict).toHaveBeenCalledWith('0xAF0AF'); + expect(utils.numberToHex).not.toHaveBeenCalled(); + expect(result).toBe('0xaf0af'); + }); + + it('should try parsing number if given value is not valid hex string', () => { + jest.spyOn(utils, 'isHexStrict').mockReturnValue(false); + const result = inputBlockNumberFormatter('0xAF0AF'); + + expect(utils.isHexStrict).toHaveBeenCalledWith('0xAF0AF'); + expect(utils.numberToHex).toHaveBeenCalledWith('0xAF0AF'); + expect(result).toEqual(numberToHexResult); + }); + }); + + describe('inputDefaultBlockNumberFormatter', () => { + it('should return default block if block number not provided', () => { + expect(inputDefaultBlockNumberFormatter(undefined, 255)).toBe('0xff'); + }); + + it('should return block number if block number provided', () => { + expect(inputDefaultBlockNumberFormatter(10, 255)).toEqual(numberToHexResult); + + expect(utils.numberToHex).toHaveBeenCalledWith(10); + }); + }); + + describe('inputAddressFormatter', () => { + it('should return lowercase address if given value is iban', () => { + const address = '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8'; + Iban.prototype.toAddress = jest.fn(() => address); + + jest.spyOn(Iban, 'isValid').mockImplementation(() => true); + jest.spyOn(Iban, 'isDirect').mockImplementation(() => true); + + expect(inputAddressFormatter('XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS')).toBe(address); + expect(Iban.prototype.toAddress).toHaveBeenCalled(); + }); + + it('should return lower case value if valid address', () => { + jest.spyOn(utils, 'isAddress').mockReturnValue(true); + + expect(inputAddressFormatter('0xAcb')).toBe('0xacb'); + }); + + it('should throw error if not a valid address or iban', () => { + jest.spyOn(utils, 'isAddress').mockReturnValue(false); + + expect(() => inputAddressFormatter('0xAcb')).toThrow( + 'Provided address 0xAcb is invalid', + ); + }); + }); + + describe('txInputOptionsFormatter', () => { + let txInput: any; + + beforeEach(() => { + jest.spyOn(utils, 'isAddress').mockReturnValue(true); + txInput = { + to: '0xabcd', + }; + }); + + it('should format "to" address if provided', () => { + expect(txInputOptionsFormatter({ ...txInput, to: '0xABCD' })).toEqual( + expect.objectContaining({ to: '0xabcd' }), + ); + }); + + it('should throw error if "data" and "input" both are provided', () => { + expect(() => + txInputOptionsFormatter({ ...txInput, input: '0xff0011', data: '0xff' }), + ).toThrow( + 'You can\'t have "data" and "input" as properties of transactions at the same time, please use either "data" or "input" instead.', + ); + }); + + it('should replace "input" with "data" if "data" is given and "input" is not', () => { + const result = txInputOptionsFormatter({ ...txInput, data: '0xff0011' }); + + expect(result).toEqual(expect.objectContaining({ input: '0xff0011' })); + expect(Object.keys(result)).not.toContain('data'); + }); + + it('should prefix "input" with "0x" if not already', () => { + expect(txInputOptionsFormatter({ ...txInput, input: 'ff0011' })).toEqual( + expect.objectContaining({ input: '0xff0011' }), + ); + }); + + it('should throw error if "input" is not a valid hex string', () => { + jest.spyOn(utils, 'isHexStrict').mockReturnValue(false); + + expect(() => txInputOptionsFormatter({ ...txInput, input: 'ff0011' })).toThrow( + 'The input field must be HEX encoded data.', + ); + expect(utils.isHexStrict).toHaveBeenCalledWith('0xff0011'); + }); + it('should set "gas" equal to "gas" if provided', () => { + expect(txInputOptionsFormatter({ ...txInput, data: '0xff0011', gas: '123' })).toEqual( + expect.objectContaining({ gas: numberToHexResult }), + ); + expect(utils.toNumber).toHaveBeenCalledWith('123'); + }); + + it('should set "gas" equal to "gasLimit" if "gas" not provided', () => { + expect( + txInputOptionsFormatter({ ...txInput, data: '0xff0011', gasLimit: '446' }), + ).toEqual(expect.objectContaining({ gas: numberToHexResult })); + expect(utils.toNumber).toHaveBeenCalledWith('446'); + }); + + it('should remove "gasPrice" if "maxPriorityFeePerGas" or "maxFeePerGas" is given', () => { + const result = txInputOptionsFormatter({ + ...txInput, + input: '0xff0011', + gasPrice: '123', + maxPriorityFeePerGas: '456', + }); + expect(Object.keys(result)).not.toContain('gasPrice'); + + const result2 = txInputOptionsFormatter({ + ...txInput, + input: '0xff0011', + gasPrice: '123', + maxFeePerGas: '456', + }); + expect(Object.keys(result2)).not.toContain('gasPrice'); + }); + + it.each(['gasPrice', 'gas', 'value', 'maxPriorityFeePerGas', 'maxFeePerGas', 'nonce'])( + 'should convert "%s" number value to hex', + attr => { + jest.spyOn(utils, 'toNumber').mockReturnValue(BigInt(5678)); + + expect( + txInputOptionsFormatter({ ...txInput, data: '0xff0011', [attr]: BigInt(5678) }), + ).toEqual(expect.objectContaining({ [attr]: numberToHexResult })); + + expect(utils.numberToHex).toHaveBeenCalledWith(BigInt(5678)); + }, + ); + }); + + describe('outputLogFormatter', () => { + it('should set log id from "blockHash", "transactionHash" and "logIndex"', () => { + const result = outputLogFormatter({ + blockHash: 'blockHash', + transactionHash: 'transactionHash', + logIndex: 'logIndex', + }); + + expect(utils.sha3Raw).toHaveBeenCalledWith('blockHashtransactionHashlogIndex'); + + expect(result.id).toBe(`log_${sha3Result.slice(0, 8)}`); + }); + + it('should convert "blockNumber" from hex to number', () => { + const result = outputLogFormatter({ + blockHash: 'blockHash', + transactionHash: 'transactionHash', + logIndex: 'logIndex', + blockNumber: '0xFF0011', + }); + + expect(utils.hexToNumber).toHaveBeenCalledWith('0xFF0011'); + expect(result.blockNumber).toEqual(hexToNumberResult); + }); + + it('should convert "transactionIndex" from hex to number', () => { + const result = outputLogFormatter({ + blockHash: 'blockHash', + transactionHash: 'transactionHash', + logIndex: 'logIndex', + transactionIndex: '0xFF0011', + }); + + expect(utils.hexToNumber).toHaveBeenCalledWith('0xFF0011'); + expect(result.transactionIndex).toEqual(hexToNumberResult); + }); + + it('should convert "logIndex" from hex to number', () => { + const result = outputLogFormatter({ + blockHash: 'blockHash', + transactionHash: 'transactionHash', + logIndex: '0xFF0011', + }); + + expect(utils.hexToNumber).toHaveBeenCalledWith('0xFF0011'); + expect(result.logIndex).toEqual(hexToNumberResult); + }); + + it('should convert "address" to checksum address', () => { + const result = outputLogFormatter({ + blockHash: 'blockHash', + transactionHash: 'transactionHash', + logIndex: '0xFF0011', + address: 'address', + }); + + expect(utils.toChecksumAddress).toHaveBeenCalledWith('address'); + expect(result.address).toEqual(toChecksumAddressResult); + }); + }); + + describe('outputTransactionReceiptFormatter', () => { + const validReceipt = { cumulativeGasUsed: '0x1234', gasUsed: '0x4567' }; + + it('should convert "blockNumber" from hex to number', () => { + const result = outputTransactionReceiptFormatter({ + ...validReceipt, + blockNumber: '0x12', + }); + + expect(utils.hexToNumber).toHaveBeenCalledWith('0x12'); + expect(result).toEqual(expect.objectContaining({ blockNumber: hexToNumberResult })); + }); + + it('should convert "transactionIndex" from hex to number', () => { + const result = outputTransactionReceiptFormatter({ + ...validReceipt, + transactionIndex: '0x12', + }); + + expect(utils.hexToNumber).toHaveBeenCalledWith('0x12'); + expect(result).toEqual( + expect.objectContaining({ transactionIndex: hexToNumberResult }), + ); + }); + + it('should convert "cumulativeGasUsed" from hex to number', () => { + const result = outputTransactionReceiptFormatter({ + ...validReceipt, + }); + + expect(utils.hexToNumber).toHaveBeenCalledWith(validReceipt.cumulativeGasUsed); + expect(result).toEqual( + expect.objectContaining({ cumulativeGasUsed: hexToNumberResult }), + ); + }); + + it('should convert "gasUsed" from hex to number', () => { + const result = outputTransactionReceiptFormatter({ + ...validReceipt, + }); + + expect(utils.hexToNumber).toHaveBeenCalledWith(validReceipt.gasUsed); + expect(result).toEqual(expect.objectContaining({ gasUsed: hexToNumberResult })); + }); + + it('should format "logs" if available', () => { + const logs = ['0x12' as any, '0x456' as any]; + jest.spyOn(formatters, 'outputLogFormatter').mockReturnValue( + 'outputLogFormatterResult' as any, + ); + + const result = outputTransactionReceiptFormatter({ + ...validReceipt, + logs, + }); + + expect(formatters.outputLogFormatter).toHaveBeenCalledTimes(logs.length); + + expect(formatters.outputLogFormatter).toHaveBeenCalledWith(logs[0], 0, logs); + + expect(formatters.outputLogFormatter).toHaveBeenCalledWith(logs[1], 1, logs); + expect(result.logs).toEqual(['outputLogFormatterResult', 'outputLogFormatterResult']); + }); + + it('should convert "contractAddress" to checksum address', () => { + const result = outputTransactionReceiptFormatter({ + ...validReceipt, + contractAddress: '0x12', + }); + + expect(utils.toChecksumAddress).toHaveBeenCalledWith('0x12'); + expect(result).toEqual( + expect.objectContaining({ contractAddress: toChecksumAddressResult }), + ); + }); + + it('should convert "status" to boolean value "true"', () => { + const result = outputTransactionReceiptFormatter({ + ...validReceipt, + status: '10', + }); + + expect(result.status).toBeTruthy(); + }); + + it('should convert "status" to boolean value "false"', () => { + const result = outputTransactionReceiptFormatter({ + ...validReceipt, + status: '0', + }); + + expect(result.status).toBeFalsy(); + }); + + it('should convert "effectiveGasPrice" from hex to number', () => { + const effectiveGasPrice = '0x80d9594d23495b'; + + const result = outputTransactionReceiptFormatter({ + ...validReceipt, + effectiveGasPrice, + }); + + expect(utils.hexToNumber).toHaveBeenCalledWith(effectiveGasPrice); + expect(result).toEqual( + expect.objectContaining({ effectiveGasPrice: hexToNumberResult }), + ); + }); + }); + + describe('outputBlockFormatter', () => { + const validBlock = { + gasLimit: 'gasLimit', + gasUsed: 'gasUsed', + size: 'size', + timestamp: 'timestamp', + }; + + it('should convert "gasLimit" from hex to number', () => { + const result = outputBlockFormatter({ ...validBlock } as any); + + expect(utils.hexToNumber).toHaveBeenCalledWith('gasLimit'); + expect(result).toEqual(expect.objectContaining({ gasLimit: hexToNumberResult })); + }); + + it('should convert "gasUsed" from hex to number', () => { + const result = outputBlockFormatter({ ...validBlock } as any); + + expect(utils.hexToNumber).toHaveBeenCalledWith('gasUsed'); + expect(result).toEqual(expect.objectContaining({ gasUsed: hexToNumberResult })); + }); + + it('should convert "size" from hex to number', () => { + const result = outputBlockFormatter({ ...validBlock } as any); + + expect(utils.hexToNumber).toHaveBeenCalledWith('size'); + expect(result).toEqual(expect.objectContaining({ size: hexToNumberResult })); + }); + + it('should convert "timestamp" from hex to number', () => { + const result = outputBlockFormatter({ ...validBlock } as any); + + expect(utils.hexToNumber).toHaveBeenCalledWith('timestamp'); + expect(result).toEqual(expect.objectContaining({ timestamp: hexToNumberResult })); + }); + + it('should convert "number" from hex to number', () => { + const result = outputBlockFormatter({ ...validBlock, number: 'number' } as any); + + expect(utils.hexToNumber).toHaveBeenCalledWith('number'); + expect(result).toEqual(expect.objectContaining({ number: hexToNumberResult })); + }); + + it('should convert "difficulty" to bigint', () => { + jest.spyOn(formatters, 'outputBigIntegerFormatter').mockReturnValue( + 'outputBigIntegerFormatterResult' as any, + ); + const result = outputBlockFormatter({ ...validBlock, difficulty: 'difficulty' } as any); + + expect(formatters.outputBigIntegerFormatter).toHaveBeenCalledWith('difficulty'); + expect(result).toEqual( + expect.objectContaining({ difficulty: 'outputBigIntegerFormatterResult' }), + ); + }); + + it('should convert "totalDifficulty" to bigint', () => { + jest.spyOn(formatters, 'outputBigIntegerFormatter').mockReturnValue( + 'outputBigIntegerFormatterResult' as any, + ); + const result = outputBlockFormatter({ + ...validBlock, + totalDifficulty: 'totalDifficulty', + } as any); + + expect(formatters.outputBigIntegerFormatter).toHaveBeenCalledWith('totalDifficulty'); + expect(result).toEqual( + expect.objectContaining({ totalDifficulty: 'outputBigIntegerFormatterResult' }), + ); + }); + + it('should format "transactions" with correct formatter', () => { + const transactions = ['trs1', 'trs2']; + jest.spyOn(formatters, 'outputTransactionFormatter').mockReturnValue( + 'outputTransactionFormatterResult' as any, + ); + + const result = outputBlockFormatter({ ...validBlock, transactions } as any); + + expect(formatters.outputTransactionFormatter).toHaveBeenCalledTimes( + transactions.length, + ); + expect(formatters.outputTransactionFormatter).toHaveBeenCalledWith( + transactions[0], + + 0, + transactions, + ); + expect(formatters.outputTransactionFormatter).toHaveBeenCalledWith( + transactions[1], + + 1, + transactions, + ); + expect(result).toEqual( + expect.objectContaining({ + transactions: [ + 'outputTransactionFormatterResult', + 'outputTransactionFormatterResult', + ], + }), + ); + }); + + it('should convert "miner" to checksum address', () => { + const result = outputBlockFormatter({ ...validBlock, miner: 'miner' } as any); + + expect(utils.toChecksumAddress).toHaveBeenCalledWith('miner'); + expect(result).toEqual(expect.objectContaining({ miner: toChecksumAddressResult })); + }); + + it('should convert "baseFeePerGas" from hex to number', () => { + jest.spyOn(formatters, 'outputBigIntegerFormatter').mockReturnValue(123); + const result = outputBlockFormatter({ + ...validBlock, + baseFeePerGas: 'baseFeePerGas', + } as any); + + expect(outputBigIntegerFormatter).toHaveBeenCalledWith('baseFeePerGas'); + expect(result).toEqual(expect.objectContaining({ baseFeePerGas: hexToNumberResult })); + }); + }); + + describe('inputPostFormatter', () => { + it('should convert "ttl" from number to hex', () => { + const result = inputPostFormatter({ ttl: 'ttl' } as any); + + expect(utils.numberToHex).toHaveBeenCalledWith('ttl'); + expect(result).toEqual(expect.objectContaining({ ttl: numberToHexResult })); + }); + + it('should convert "workToProve" from number to hex', () => { + const result = inputPostFormatter({ workToProve: 'workToProve' } as any); + + expect(utils.numberToHex).toHaveBeenCalledWith('workToProve'); + expect(result).toEqual(expect.objectContaining({ workToProve: numberToHexResult })); + }); + + it('should convert "priority" from number to hex', () => { + const result = inputPostFormatter({ priority: 'priority' } as any); + + expect(utils.numberToHex).toHaveBeenCalledWith('priority'); + expect(result).toEqual(expect.objectContaining({ priority: numberToHexResult })); + }); + + it('should convert "topics" to array if single value provided', () => { + const result = inputPostFormatter({ topics: '0x123' } as any); + + expect(result).toEqual(expect.objectContaining({ topics: ['0x123'] })); + }); + + it('should convert "topics" to hex if not already', () => { + jest.spyOn(utils, 'fromUtf8').mockReturnValue('fromUtf8Result'); + const result = inputPostFormatter({ topics: ['0x123', 'non-hex-value'] } as any); + + expect(utils.fromUtf8).toHaveBeenCalledTimes(1); + expect(utils.fromUtf8).toHaveBeenCalledWith('non-hex-value'); + expect(result).toEqual( + expect.objectContaining({ topics: ['0x123', 'fromUtf8Result'] }), + ); + }); + }); + + describe('outputPostFormatter', () => { + it('should convert "expiry" from hex to number', () => { + const result = outputPostFormatter({ expiry: 'expiry' } as any); + + expect(utils.hexToNumber).toHaveBeenCalledWith('expiry'); + expect(result).toEqual(expect.objectContaining({ expiry: hexToNumberResult })); + }); + + it('should convert "sent" from hex to number', () => { + const result = outputPostFormatter({ sent: 'sent' } as any); + + expect(utils.hexToNumber).toHaveBeenCalledWith('sent'); + expect(result).toEqual(expect.objectContaining({ sent: hexToNumberResult })); + }); + + it('should convert "ttl" from hex to number', () => { + const result = outputPostFormatter({ ttl: 'ttl' } as any); + + expect(utils.hexToNumber).toHaveBeenCalledWith('ttl'); + expect(result).toEqual(expect.objectContaining({ ttl: hexToNumberResult })); + }); + + it('should convert "workProved" from hex to number', () => { + const result = outputPostFormatter({ workProved: 'workProved' } as any); + + expect(utils.hexToNumber).toHaveBeenCalledWith('workProved'); + expect(result).toEqual(expect.objectContaining({ workProved: hexToNumberResult })); + }); + + it('should set "topics" to empty array if not provided', () => { + const result = outputPostFormatter({} as any); + + expect(result).toEqual(expect.objectContaining({ topics: [] })); + }); + + it('should convert "topics" from utf8 to hex', () => { + const topics = ['0x123', 'non-hex-value']; + jest.spyOn(utils, 'toUtf8').mockReturnValue('toUtf8Result'); + + const result = outputPostFormatter({ topics } as any); + + expect(utils.toUtf8).toHaveBeenCalledTimes(topics.length); + + expect(utils.toUtf8).toHaveBeenCalledWith(topics[0], 0, topics); + + expect(utils.toUtf8).toHaveBeenCalledWith(topics[1], 1, topics); + expect(result).toEqual( + expect.objectContaining({ topics: ['toUtf8Result', 'toUtf8Result'] }), + ); + }); + }); + + describe('outputSyncingFormatter', () => { + const validObject = { + startingBlock: 'startingBlock', + currentBlock: 'currentBlock', + highestBlock: 'highestBlock', + }; + + it('should convert "startingBlock" from hex to number', () => { + const result = outputSyncingFormatter({ ...validObject }); + + expect(utils.hexToNumber).toHaveBeenCalledWith('startingBlock'); + expect(result).toEqual(expect.objectContaining({ startingBlock: hexToNumberResult })); + }); + + it('should convert "currentBlock" from hex to number', () => { + const result = outputSyncingFormatter({ ...validObject }); + + expect(utils.hexToNumber).toHaveBeenCalledWith('currentBlock'); + expect(result).toEqual(expect.objectContaining({ currentBlock: hexToNumberResult })); + }); + + it('should convert "highestBlock" from hex to number', () => { + const result = outputSyncingFormatter({ ...validObject }); + + expect(utils.hexToNumber).toHaveBeenCalledWith('highestBlock'); + expect(result).toEqual(expect.objectContaining({ highestBlock: hexToNumberResult })); + }); + + it('should convert "knownStates" from hex to number', () => { + const result = outputSyncingFormatter({ ...validObject, knownStates: 'knownStates' }); + + expect(utils.hexToNumber).toHaveBeenCalledWith('highestBlock'); + expect(result).toEqual(expect.objectContaining({ knownStates: hexToNumberResult })); + }); + + it('should convert "pulledStates" from hex to number', () => { + const result = outputSyncingFormatter({ ...validObject, pulledStates: 'pulledStates' }); + + expect(utils.hexToNumber).toHaveBeenCalledWith('highestBlock'); + expect(result).toEqual(expect.objectContaining({ pulledStates: hexToNumberResult })); + }); + }); +}); diff --git a/packages/web3-core/test/unit/jest.config.js b/packages/web3-core/test/unit/jest.config.js new file mode 100644 index 00000000000..0d8c33a998a --- /dev/null +++ b/packages/web3-core/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-core-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-core/test/unit/reexported_web3_context.ts b/packages/web3-core/test/unit/reexported_web3_context.ts new file mode 100644 index 00000000000..b54881fd724 --- /dev/null +++ b/packages/web3-core/test/unit/reexported_web3_context.ts @@ -0,0 +1,19 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from '../../src/index'; + +export { Web3Context }; diff --git a/packages/web3-core/test/unit/web3_batch_request.test.ts b/packages/web3-core/test/unit/web3_batch_request.test.ts new file mode 100644 index 00000000000..cc861276a5f --- /dev/null +++ b/packages/web3-core/test/unit/web3_batch_request.test.ts @@ -0,0 +1,199 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { JsonRpcBatchRequest, JsonRpcBatchResponse, JsonRpcOptionalRequest } from 'web3-types'; +import { jsonRpc, Web3DeferredPromise, Timeout } from 'web3-utils'; +import { OperationAbortError, OperationTimeoutError } from 'web3-errors'; +import { Web3BatchRequest } from '../../src/web3_batch_request'; + +describe('Web3BatchRequest', () => { + let requestManager: any; + let batchRequest: Web3BatchRequest; + let requestId = 0; + + beforeEach(() => { + requestManager = { + sendBatch: jest.fn(), + }; + + batchRequest = new Web3BatchRequest(requestManager); + + jest.spyOn(jsonRpc, 'toPayload').mockImplementation(request => { + // eslint-disable-next-line no-plusplus + return { ...request, id: request.id ?? ++requestId, jsonrpc: '2.0' }; + }); + }); + + describe('constructor', () => { + it('should create batch request object with empty list of requests', () => { + expect(batchRequest).toBeInstanceOf(Web3BatchRequest); + expect(batchRequest.requests).toEqual([]); + }); + }); + + describe('add', () => { + it('should add request to the list', async () => { + jest.spyOn(requestManager, 'sendBatch').mockResolvedValue([ + { id: 1, jsonrpc: '2.0', result: 'result' }, + ]); + + // This catch should never trigger + batchRequest.add({ method: 'my_method', params: [], id: 1 }).catch(err => { + throw err; + }); + + expect(batchRequest.requests).toEqual([ + { method: 'my_method', params: [], id: 1, jsonrpc: '2.0' }, + ]); + + // Make sure request didn't timeout + await batchRequest.execute(); + }); + + it('should return a deferred promise', async () => { + jest.spyOn(requestManager, 'sendBatch').mockResolvedValue([ + { id: 1, jsonrpc: '2.0', result: 'result' }, + ]); + + const result = batchRequest.add({ id: 1, method: 'my_method', params: [] }); + expect(result).toBeInstanceOf(Web3DeferredPromise); + + // Make sure request didn't timeout + await batchRequest.execute(); + }); + }); + + describe('execute', () => { + let request1: JsonRpcOptionalRequest; + let request2: JsonRpcOptionalRequest; + let batchPayload: JsonRpcBatchRequest; + let response1: any; + let response2: any; + let batchResponse: JsonRpcBatchResponse; + + beforeEach(() => { + request1 = { id: 10, method: 'my_method', params: [] }; + request2 = { id: 11, method: 'my_method2', params: [] }; + response1 = { + id: 10, + jsonrpc: '2.0', + result: 'request-1-result', + }; + response2 = { + id: 11, + jsonrpc: '2.0', + result: 'request-2-result', + }; + batchPayload = jsonRpc.toBatchPayload([request1, request2]); + batchResponse = [response1, response2]; + + jest.spyOn(requestManager, 'sendBatch').mockResolvedValue(batchResponse); + }); + + it('should send batch request to request manager', async () => { + const res1 = batchRequest.add(request1); + const res2 = batchRequest.add(request2); + + await batchRequest.execute(); + + expect(requestManager.sendBatch).toHaveBeenCalledTimes(1); + expect(requestManager.sendBatch).toHaveBeenCalledWith(batchPayload); + await expect(res1).resolves.toBeDefined(); + await expect(res2).resolves.toBeDefined(); + }); + + it('should throw error if response size does not match', async () => { + jest.spyOn(requestManager, 'sendBatch').mockResolvedValue([response1]); + + const res1 = batchRequest.add(request1); + const res2 = batchRequest.add(request2); + + await expect(batchRequest.execute()).rejects.toThrow( + 'Batch request size mismatch the results size. Requests: 2, Responses: 1', + ); + await expect(res1).rejects.toThrow(new OperationAbortError('Invalid batch response')); + await expect(res2).rejects.toThrow(new OperationAbortError('Invalid batch response')); + }); + + it('should throw error if response ids does not match', async () => { + jest.spyOn(requestManager, 'sendBatch').mockResolvedValue([ + response1, + { ...response2, id: 1 }, + ]); + + const res1 = batchRequest.add(request1); + const res2 = batchRequest.add(request2); + + await expect(batchRequest.execute()).rejects.toThrow( + 'Batch request mismatch the results. Requests: [10,11], Responses: [1,10]', + ); + await expect(res1).rejects.toThrow(new OperationAbortError('Invalid batch response')); + await expect(res2).rejects.toThrow(new OperationAbortError('Invalid batch response')); + }); + + it('should resolve individual request on execution', async () => { + const res1 = batchRequest.add(request1); + const res2 = batchRequest.add(request2); + + await expect(batchRequest.execute()).resolves.toEqual([response1, response2]); + await expect(res1).resolves.toEqual(response1.result); + await expect(res2).resolves.toEqual(response2.result); + }); + + it('should resolve request with result and reject request with error', async () => { + const responseWithError = { + ...response2, + result: undefined, + error: { message: 'RPC responded with error response', code: 12 }, + }; + jest.spyOn(requestManager, 'sendBatch').mockResolvedValue([ + response1, + responseWithError, + ]); + + const res1 = batchRequest.add(request1); + const res2 = batchRequest.add(request2); + + await expect(batchRequest.execute()).resolves.toEqual([response1, responseWithError]); + await expect(res1).resolves.toEqual(response1.result); + await expect(res2).rejects.toEqual(responseWithError.error); + }); + + it('should timeout if request not executed in a particular time', async () => { + let timerId!: Timeout; + + jest.spyOn(requestManager, 'sendBatch').mockImplementation(async () => { + return new Promise(resolve => { + timerId = setTimeout(() => { + resolve(batchResponse); + }, 2000); + }); + }); + + const res1 = batchRequest.add(request1); + const res2 = batchRequest.add(request2); + + await expect(batchRequest.execute()).rejects.toThrow( + new OperationTimeoutError('Batch request timeout'), + ); + await expect(res1).rejects.toThrow(new OperationAbortError('Batch request timeout')); + await expect(res2).rejects.toThrow(new OperationAbortError('Batch request timeout')); + + clearTimeout(timerId); + }); + }); +}); diff --git a/packages/web3-core/test/unit/web3_config.test.ts b/packages/web3-core/test/unit/web3_config.test.ts new file mode 100644 index 00000000000..c5950117a03 --- /dev/null +++ b/packages/web3-core/test/unit/web3_config.test.ts @@ -0,0 +1,132 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { toHex } from 'web3-utils'; +import { Web3Config, Web3ConfigEvent } from '../../src/web3_config'; + +class MyConfigObject extends Web3Config {} + +const defaultConfig = { + blockHeaderTimeout: 10, + defaultAccount: undefined, + defaultBlock: 'latest', + defaultChain: 'mainnet', + defaultNetworkId: undefined, + defaultCommon: undefined, + defaultHardfork: 'london', + enableExperimentalFeatures: { + useSubscriptionWhenCheckingBlockTimeout: false, + useRpcCallSpecification: false, + }, + handleRevert: false, + contractDataInputFill: 'input', + maxListenersWarningThreshold: 100, + transactionBlockTimeout: 50, + transactionConfirmationBlocks: 24, + transactionPollingInterval: 1000, + transactionPollingTimeout: 750 * 1000, + transactionReceiptPollingInterval: undefined, + transactionSendTimeout: 750 * 1000, + transactionConfirmationPollingInterval: undefined, + defaultTransactionType: '0x2', + defaultMaxPriorityFeePerGas: toHex(2500000000), +}; +const setValue = { + string: 'newValue', + number: 99, +}; + +describe('Web3Config', () => { + it('should init default config values', () => { + const obj = new MyConfigObject(); + + expect(obj.config).toEqual(defaultConfig); + }); + + it.each(Object.keys(defaultConfig))('should expose a public getter for "%s"', key => { + const obj = new MyConfigObject(); + const getterSpy = jest.spyOn(obj, key as keyof MyConfigObject, 'get'); + + const result = obj[key as never]; + + expect(getterSpy).toHaveBeenCalledTimes(1); + expect(result).toEqual(defaultConfig[key as never]); + }); + + it.each(Object.keys(defaultConfig))('should expose a public setter for "%s"', key => { + const obj = new MyConfigObject(); + const setterSpy = jest.spyOn(obj, key as keyof MyConfigObject, 'set'); + obj[key as keyof MyConfigObject] = obj[key as never]; + expect(setterSpy).toHaveBeenCalledTimes(1); + }); + + it.each(Object.keys(defaultConfig))('should set new config for "%s"', key => { + const obj = new MyConfigObject(); + + const valueType = typeof obj[key as never]; + const newValue = setValue[valueType as never]; + obj[key as never] = newValue; + const result = obj[key as never]; + + expect(result).toBe(newValue); + }); + + it.each(Object.keys(defaultConfig))( + 'should trigger "configChange" event if "%s" is changed', + key => { + const obj = new MyConfigObject(); + const configChange = jest.fn(); + obj.on(Web3ConfigEvent.CONFIG_CHANGE, configChange); + const valueType = typeof obj[key as never]; + const newValue = setValue[valueType as never]; + obj[key as never] = newValue; + if (key === 'transactionPollingInterval') return; + + expect(configChange).toHaveBeenCalledTimes(1); + expect(configChange).toHaveBeenCalledWith({ + name: key, + oldValue: defaultConfig[key as never], + newValue, + }); + }, + ); + + it('Updating transactionPollingInterval should update transactionReceiptPollingInterval and transactionConfirmationPollingInterval', () => { + const obj = new MyConfigObject(); + const configChange = jest.fn(); + obj.on(Web3ConfigEvent.CONFIG_CHANGE, configChange); + + obj.transactionPollingInterval = 1500; + + expect(configChange).toHaveBeenCalledTimes(3); + expect(configChange).toHaveBeenCalledWith({ + name: 'transactionPollingInterval', + oldValue: defaultConfig.transactionPollingInterval, + newValue: 1500, + }); + expect(configChange).toHaveBeenCalledWith({ + name: 'transactionReceiptPollingInterval', + oldValue: defaultConfig.transactionReceiptPollingInterval, + newValue: 1500, + }); + expect(configChange).toHaveBeenCalledWith({ + name: 'transactionConfirmationPollingInterval', + oldValue: defaultConfig.transactionConfirmationPollingInterval, + newValue: 1500, + }); + }); +}); diff --git a/packages/web3-core/test/unit/web3_context.test.ts b/packages/web3-core/test/unit/web3_context.test.ts new file mode 100644 index 00000000000..1bedd82ba5b --- /dev/null +++ b/packages/web3-core/test/unit/web3_context.test.ts @@ -0,0 +1,224 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// eslint-disable-next-line max-classes-per-file +import { ExistingPluginNamespaceError } from 'web3-errors'; +import HttpProvider from 'web3-providers-http'; +import { Web3Context, Web3PluginBase } from '../../src/web3_context'; +import { Web3RequestManager } from '../../src/web3_request_manager'; + +// eslint-disable-next-line @typescript-eslint/ban-types +class Context1 extends Web3Context<{}> {} +// eslint-disable-next-line @typescript-eslint/ban-types +class Context2 extends Web3Context<{}> {} + +describe('Web3Context', () => { + describe('constructor()', () => { + it('should return providers on class level', () => { + expect(Web3Context.providers).toBeDefined(); + }); + + it('should return providers on instance level', () => { + const context = new Web3Context('http://test.com'); + expect(context.providers).toBeDefined(); + expect(context.providers).toEqual(Web3Context.providers); + }); + + it('should create instance of request manager', () => { + const context = new Web3Context('http://test.com'); + + expect(context.requestManager).toBeInstanceOf(Web3RequestManager); + }); + + it('should return current provider from request manager', () => { + const context = new Web3Context('http://test.com'); + + expect(context.currentProvider).toBe(context.requestManager.provider); + }); + + it('should initialize the provider from options', () => { + const context = new Web3Context({ provider: 'http://test.com' }); + + expect(context.currentProvider).toBeInstanceOf(HttpProvider); + }); + + it('should set return current provider for the request manager', () => { + const context = new Web3Context('http://test.com'); + + context.currentProvider = 'http://test/abc'; + + expect(context.currentProvider).toBeInstanceOf(HttpProvider); + }); + }); + + describe('getContextObject', () => { + it('should return correct context object', () => { + const context = new Context1('http://test/abc'); + + expect(context.getContextObject()).toMatchSnapshot(); + }); + }); + + describe('use', () => { + it('should init child context with correct type', () => { + const parent = new Context1('http://test/abc'); + const child = parent.use(Context2); + + expect(child).toBeInstanceOf(Context2); + }); + + it('should init context with correct configuration', () => { + const parent = new Context1({ + provider: 'http://test/abc', + config: { defaultNetworkId: 'my-network-id', defaultHardfork: 'my-fork' }, + }); + const child = parent.use(Context2); + + expect(child.defaultNetworkId).toBe('my-network-id'); + expect(child.defaultHardfork).toBe('my-fork'); + }); + + it('should change config of child context', () => { + const parent = new Context1('http://test/abc'); + const child = parent.use(Context2); + + parent.defaultNetworkId = 'my-network-id'; + + expect(child.defaultNetworkId).toBe('my-network-id'); + }); + + it('should use same instance of request manager', () => { + const parent = new Context1('http://test/abc'); + const child = parent.use(Context2); + + expect(child.requestManager).toBe(parent.requestManager); + }); + + it('should use same instance of subscription manager', () => { + const parent = new Context1({ + provider: 'http://test/abc', + subscriptionManager: {} as any, + }); + const child = parent.use(Context2); + + expect(child.subscriptionManager).toBe(parent.subscriptionManager); + }); + + it('should use same instance of provider', () => { + const parent = new Context1('http://test/abc'); + const child = parent.use(Context2); + + expect(child.provider).toBe(parent.provider); + }); + + it('context should be using the default common', () => { + const parent = new Context1({ + provider: 'http://test/abc', + config: { + defaultCommon: { + customChain: { + name: 'foo', + networkId: 'my-network-id', + chainId: 1337, + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + }, + }); + const child = parent.use(Context2); + + expect(child.defaultCommon?.customChain.networkId).toBe('my-network-id'); + expect(child.defaultCommon?.customChain.chainId).toBe(1337); + }); + }); + + describe('link', () => { + it('should link context with correct configuration', () => { + const parent = new Context1({ + provider: 'http://test/abc', + config: { defaultNetworkId: 'my-network-id', defaultHardfork: 'my-fork' }, + }); + const child = new Context2('http://test/abc'); + + child.link(parent); + + expect(child.defaultNetworkId).toBe('my-network-id'); + expect(child.defaultHardfork).toBe('my-fork'); + }); + + it('should change config of child context', () => { + const parent = new Context1('http://test/abc'); + const child = new Context2('http://test/abc'); + + child.link(parent); + + parent.defaultNetworkId = 'my-network-id'; + + expect(child.defaultNetworkId).toBe('my-network-id'); + }); + + it('should use same instance of request manager', () => { + const parent = new Context1('http://test/abc'); + const child = new Context2('http://test/abc'); + + child.link(parent); + + expect(child.requestManager).toBe(parent.requestManager); + }); + + it('should use same instance of subscription manager', () => { + const parent = new Context1({ + provider: 'http://test/abc', + subscriptionManager: {} as any, + }); + const child = new Context2('http://test/abc'); + + child.link(parent); + + expect(child.subscriptionManager).toBe(parent.subscriptionManager); + }); + + it('should use same instance of provider', () => { + const parent = new Context1('http://test/abc'); + const child = new Context2('http://test/abc'); + + child.link(parent); + + expect(child.provider).toBe(parent.provider); + }); + }); + + describe('registerPlugin', () => { + it('should throw ExistingPluginNamespaceError', () => { + const context = new Context1('http://test/abc'); + const pluginNamespace = 'plugin'; + + class Plugin extends Web3PluginBase { + public pluginNamespace = pluginNamespace; + } + class Plugin2 extends Web3PluginBase { + public pluginNamespace = pluginNamespace; + } + + context.registerPlugin(new Plugin()); + expect(() => context.registerPlugin(new Plugin2())).toThrow( + new ExistingPluginNamespaceError(pluginNamespace), + ); + }); + }); +}); diff --git a/packages/web3-core/test/unit/web3_extend.test.ts b/packages/web3-core/test/unit/web3_extend.test.ts new file mode 100644 index 00000000000..f26978fb7c3 --- /dev/null +++ b/packages/web3-core/test/unit/web3_extend.test.ts @@ -0,0 +1,78 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Address, BlockTag } from 'web3-types'; +import { Web3Context } from './reexported_web3_context'; + +declare module './reexported_web3_context' { + interface Web3Context { + L2Module: { + getL2Balance(address: Address, blockTag: BlockTag): Promise; + }; + + getL0Balance(address: Address, blockTag: BlockTag): Promise; + } +} + +describe('Web3Context extend tests', () => { + it('Web3Context extend should send correct rpc call', async () => { + const web3 = new Web3Context('http://127.0.0.1:7545'); + + const requestManagerSendSpy = jest.fn(); + web3.requestManager.send = requestManagerSendSpy; + + web3.extend({ + property: 'L2Module', + methods: [ + { + name: 'getL2Balance', + call: 'eth_getBalance', + }, + ], + }); + + await web3.L2Module.getL2Balance('0x5b43746580AAF00A69019fA59D9ed7d9c85dDd70', 'latest'); + + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getBalance', + params: ['0x5b43746580AAF00A69019fA59D9ed7d9c85dDd70', 'latest'], + }); + }); + + it('Web3Context extend should send correct rpc call without property field defined', async () => { + const web3 = new Web3Context('http://127.0.0.1:7545'); + + const requestManagerSendSpy = jest.fn(); + web3.requestManager.send = requestManagerSendSpy; + + web3.extend({ + methods: [ + { + name: 'getL0Balance', + call: 'eth_getBalance', + }, + ], + }); + + await web3.getL0Balance('0x5b43746580AAF00A69019fA59D9ed7d9c85dDd70', 'latest'); + + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getBalance', + params: ['0x5b43746580AAF00A69019fA59D9ed7d9c85dDd70', 'latest'], + }); + }); +}); diff --git a/packages/web3-core/test/unit/web3_promi_event.test.ts b/packages/web3-core/test/unit/web3_promi_event.test.ts new file mode 100644 index 00000000000..d41372a0377 --- /dev/null +++ b/packages/web3-core/test/unit/web3_promi_event.test.ts @@ -0,0 +1,125 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3PromiEvent } from '../../src/web3_promi_event'; + +describe('Web3PromiEvent', () => { + it('should initialize and resolve promise', async () => { + const p = new Web3PromiEvent(resolve => { + resolve('Resolved Value'); + }); + + await expect(p).resolves.toBe('Resolved Value'); + }); + + it('should initialize and reject promise', async () => { + const p = new Web3PromiEvent((_, reject) => { + reject(new Error('My Error')); + }); + + await expect(p).rejects.toThrow('My Error'); + }); + + it('should initialize and emit event', async () => { + return new Promise(done => { + const p = new Web3PromiEvent(resolve => { + resolve('resolved value'); + }); + + p.on('data', data => { + // eslint-disable-next-line jest/no-conditional-expect + expect(data).toBe('resolved value'); + done(undefined); + }) + .then(data => { + p.emit('data', data); + }) + .catch(e => done(e)); + + expect.assertions(1); + }); + }); + + it('should initialize and emit later', async () => { + return new Promise(done => { + const func = () => { + const p = new Web3PromiEvent(resolve => { + resolve('resolved value'); + }); + + setImmediate(() => { + p.emit('data', 'emitted data'); + }); + + return p; + }; + + const p = func(); + + // eslint-disable-next-line no-void + void p.on('data', data => { + expect(data).toBe('emitted data'); + done(undefined); + }); + }); + }); + + it('should return the promi-event object from "on" handler', async () => { + const p = new Web3PromiEvent(resolve => { + resolve('resolved value'); + }) + .on('event1', data => { + expect(data).toBe('string value'); + }) + .on('event2', data => { + expect(data).toBe(3); + }); + + p.emit('event1', 'string value'); + p.emit('event2', 3); + + await expect(p).resolves.toBe('resolved value'); + expect.assertions(3); + }); + + it('should return the promi-event object from "once" handler', async () => { + const p = new Web3PromiEvent(resolve => { + resolve('resolved value'); + }) + .once('event1', data => { + expect(data).toBe('string value'); + }) + .once('event2', data => { + expect(data).toBe(3); + }); + + p.emit('event1', 'string value'); + p.emit('event2', 3); + + await expect(p).resolves.toBe('resolved value'); + expect.assertions(3); + }); + + it('set and get maxListeners', () => { + const p = new Web3PromiEvent>(resolve => { + resolve('resolved value'); + }); + p.setMaxListenerWarningThreshold(3); + + expect(p.getMaxListeners()).toBe(3); + }); +}); diff --git a/packages/web3-core/test/unit/web3_request_manager.test.ts b/packages/web3-core/test/unit/web3_request_manager.test.ts new file mode 100644 index 00000000000..bbd6dec6698 --- /dev/null +++ b/packages/web3-core/test/unit/web3_request_manager.test.ts @@ -0,0 +1,1245 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + Web3BaseProvider, + JsonRpcPayload, + JsonRpcBatchRequest, + JsonRpcBatchResponse, + JsonRpcResponseWithError, + JsonRpcResponseWithResult, + JsonRpcIdentifier, +} from 'web3-types'; +import { jsonRpc } from 'web3-utils'; +import { + InvalidResponseError, + ParseError, + InvalidRequestError, + MethodNotFoundError, + InvalidParamsError, + InternalError, + InvalidInputError, + ResourcesNotFoundError, + TransactionRejectedError, + MethodNotSupported, + LimitExceededError, + VersionNotSupportedError, + RpcError, + ResourceUnavailableError, + ResponseError, +} from 'web3-errors'; +import HttpProvider from 'web3-providers-http'; +import WSProvider from 'web3-providers-ws'; +import { Web3RequestManager, Web3RequestManagerEvent } from '../../src/web3_request_manager'; +import * as utils from '../../src/utils'; + +describe('Web3RequestManager', () => { + describe('constructor', () => { + it('should create instance of request manager without any params', () => { + const manager = new Web3RequestManager(); + + expect(manager).toBeInstanceOf(Web3RequestManager); + }); + + it('should create instance of request manager without given provider', () => { + const provider = 'http://mydomain.com'; + jest.spyOn(Web3RequestManager.prototype, 'setProvider').mockReturnValue(true); + + const manager = new Web3RequestManager(provider); + + expect(manager.setProvider).toHaveBeenCalledTimes(1); + expect(manager.setProvider).toHaveBeenCalledWith(provider); + expect(manager).toBeInstanceOf(Web3RequestManager); + }); + }); + + describe('providers', () => { + it('should return providers on instance', () => { + const manager = new Web3RequestManager(); + + expect(Object.keys(manager.providers)).toEqual(['HttpProvider', 'WebsocketProvider']); + }); + + it('should return providers of particular instances', () => { + expect(Web3RequestManager.providers.HttpProvider).toBe(HttpProvider); + expect(Web3RequestManager.providers.WebsocketProvider).toBe(WSProvider); + }); + }); + + describe('setProvider()', () => { + let myProvider: Web3BaseProvider; + let emitSpy: jest.Mock; + + beforeEach(() => { + myProvider = { request: jest.fn() } as any; + emitSpy = jest.spyOn(Web3RequestManager.prototype, 'emit') as jest.Mock; + }); + + describe('http provider', () => { + beforeEach(() => { + jest.spyOn(Web3RequestManager.prototype, 'providers', 'get').mockReturnValue({ + ...Web3RequestManager.prototype.providers, + HttpProvider: jest.fn().mockImplementation(() => myProvider) as any, + }); + }); + + it('should detect and set http provider', () => { + const providerString = 'http://mydomain.com'; + + const manager = new Web3RequestManager(); + manager.setProvider(providerString); + + expect(manager.providers.HttpProvider).toHaveBeenCalledTimes(1); + expect(manager.providers.HttpProvider).toHaveBeenCalledWith(providerString); + expect(manager.provider).toEqual(myProvider); + }); + + it('should emit events before changing the provider', () => { + const providerString = 'http://mydomain.com'; + + const manager = new Web3RequestManager(); + manager.setProvider(providerString); + + expect(emitSpy).toHaveBeenCalledTimes(2); + expect(emitSpy).toHaveBeenCalledWith( + Web3RequestManagerEvent.BEFORE_PROVIDER_CHANGE, + undefined, + ); + expect(emitSpy).toHaveBeenCalledWith( + Web3RequestManagerEvent.PROVIDER_CHANGED, + myProvider, + ); + }); + }); + + describe('https provider', () => { + beforeEach(() => { + jest.spyOn(Web3RequestManager.prototype, 'providers', 'get').mockReturnValue({ + ...Web3RequestManager.prototype.providers, + HttpProvider: jest.fn().mockImplementation(() => myProvider) as any, + }); + }); + + it('should detect and set http provider', () => { + const providerString = 'https://mydomain.com'; + + const manager = new Web3RequestManager(); + manager.setProvider(providerString); + + expect(manager.providers.HttpProvider).toHaveBeenCalledTimes(1); + expect(manager.providers.HttpProvider).toHaveBeenCalledWith(providerString); + expect(manager.provider).toEqual(myProvider); + }); + + it('should emit events before changing the provider', () => { + const providerString = 'https://mydomain.com'; + + const manager = new Web3RequestManager(); + manager.setProvider(providerString); + + expect(emitSpy).toHaveBeenCalledTimes(2); + expect(emitSpy).toHaveBeenCalledWith( + Web3RequestManagerEvent.BEFORE_PROVIDER_CHANGE, + undefined, + ); + expect(emitSpy).toHaveBeenCalledWith( + Web3RequestManagerEvent.PROVIDER_CHANGED, + myProvider, + ); + }); + }); + + describe('ws provider', () => { + beforeEach(() => { + jest.spyOn(Web3RequestManager.prototype, 'providers', 'get').mockReturnValue({ + ...Web3RequestManager.prototype.providers, + WebsocketProvider: jest.fn().mockImplementation(() => myProvider), + }); + }); + + it('should detect and set ws provider', () => { + const providerString = 'ws://mydomain.com'; + + const manager = new Web3RequestManager(); + manager.setProvider(providerString); + + expect(manager.providers.WebsocketProvider).toHaveBeenCalledTimes(1); + expect(manager.providers.WebsocketProvider).toHaveBeenCalledWith(providerString); + expect(manager.provider).toEqual(myProvider); + }); + + it('should emit events before changing the provider', () => { + const providerString = 'ws://mydomain.com'; + + const manager = new Web3RequestManager(); + manager.setProvider(providerString); + + expect(emitSpy).toHaveBeenCalledTimes(2); + expect(emitSpy).toHaveBeenCalledWith( + Web3RequestManagerEvent.BEFORE_PROVIDER_CHANGE, + undefined, + ); + expect(emitSpy).toHaveBeenCalledWith( + Web3RequestManagerEvent.PROVIDER_CHANGED, + myProvider, + ); + }); + }); + + it('should throw error if can not detect the provider', () => { + const providerString = 'pc://mydomain.com'; + const manager = new Web3RequestManager(); + + expect(() => manager.setProvider(providerString)).toThrow( + `Can't autodetect provider for "pc://mydomain.com"`, + ); + }); + }); + + describe('send()', () => { + let request: any; + let payload: JsonRpcPayload; + let errorResponse!: JsonRpcResponseWithError; + let successResponse!: JsonRpcResponseWithResult; + + beforeEach(() => { + request = { method: 'my_method', params: [] }; + payload = { method: 'my_method', params: [], id: 1, jsonrpc: '2.0' }; + errorResponse = { + id: 1, + jsonrpc: '2.0', + error: { code: 123, message: 'my-rejected-value' }, + }; + successResponse = { + id: 1, + jsonrpc: '2.0', + result: 'my-resolved-value', + }; + + jest.spyOn(jsonRpc, 'toPayload').mockReturnValue(payload); + }); + + it('should throw error if no provider is set', async () => { + const manager = new Web3RequestManager(); + + await expect(manager.send(request)).rejects.toThrow('Provider not available'); + }); + + describe('test rpc errors', () => { + it('should pass request to provider and reject with a generic rpc error when rpc call specification flag is undefined', async () => { + const parseErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32700, message: 'Parse error' }, + }; + const manager = new Web3RequestManager(undefined, undefined); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(parseErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new InvalidResponseError(parseErrorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with a generic rpc error when rpc call specification flag is false', async () => { + const parseErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32700, message: 'Parse error' }, + }; + const manager = new Web3RequestManager(undefined, false); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(parseErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new InvalidResponseError(parseErrorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with a parse rpc error when rpc call specification flag is true', async () => { + const parseErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32700, message: 'Parse error' }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(parseErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new ParseError(parseErrorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with an invalid request rpc error when rpc call specification flag is true', async () => { + const rpcErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32600, message: 'Invalid request' }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(rpcErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new InvalidRequestError(rpcErrorResponse), + ); + // await expect(manager.send(request)).rejects.toThrow(parseErrorResponse.error.message); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with an invalid Method error when rpc call specification flag is true', async () => { + const rpcErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32601, message: 'Method not found' }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(rpcErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new MethodNotFoundError(rpcErrorResponse), + ); + // await expect(manager.send(request)).rejects.toThrow(parseErrorResponse.error.message); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with an invalid method rpc error when rpc call specification flag is true', async () => { + const rpcErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32602, message: 'Invalid params' }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(rpcErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new InvalidParamsError(rpcErrorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with an internal rpc error when rpc call specification flag is true', async () => { + const rpcErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32603, message: 'Internal error' }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(rpcErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new InternalError(rpcErrorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with an invalid input rpc error when rpc call specification flag is true', async () => { + const rpcErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32000, message: 'Invalid input' }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(rpcErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new InvalidInputError(rpcErrorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with a resource not found rpc error when rpc call specification flag is true', async () => { + const rpcErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32001, message: 'Resource not found' }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(rpcErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new ResourcesNotFoundError(rpcErrorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with a resource unavailable rpc error when rpc call specification flag is true', async () => { + const rpcErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32002, message: 'Resource unavailable' }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(rpcErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new ResourceUnavailableError(rpcErrorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with a transaction rejected rpc error when rpc call specification flag is true', async () => { + const rpcErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32003, message: 'Transaction rejected' }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(rpcErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new TransactionRejectedError(rpcErrorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with a method not supported rpc error when rpc call specification flag is true', async () => { + const rpcErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32004, message: 'Method not supported' }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(rpcErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new MethodNotSupported(rpcErrorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with a limited exceeded rpc error when rpc call specification flag is true', async () => { + const rpcErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32005, message: 'Limit exceeded' }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(rpcErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new LimitExceededError(rpcErrorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with a JSON-RPC version not supported rpc error when rpc call specification flag is true', async () => { + const rpcErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32006, message: 'JSON-RPC version not supported' }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(rpcErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new VersionNotSupportedError(rpcErrorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject with a generic rpc error when rpc call specification flag is true', async () => { + const rpcErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: -32015, message: 'Custom rpc error' }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(rpcErrorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow(new RpcError(rpcErrorResponse)); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + it('should reject and include inner error when send method errors with an error property', async () => { + const rpcErrorResponse = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { + code: 4001, + message: 'MetaMask Tx Signature: User denied transaction signature.', + }, + }; + const manager = new Web3RequestManager(undefined, true); + const myProvider = { + request: jest.fn().mockImplementation(async () => { + return Promise.resolve(successResponse.result); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + // use any as a way to test private method '_sendRequest' + jest.spyOn(manager as any, '_sendRequest').mockReturnValue(rpcErrorResponse); + let err; + try { + await manager.send(request); + } catch (error: any) { + err = error; + } finally { + expect(err).toBeInstanceOf(ResponseError); + expect(err.innerError).toEqual(rpcErrorResponse.error); + } + }); + }); + + describe('web3-provider', () => { + beforeEach(() => { + // isWeb3Provider uses instanceof to check if the provider is a Web3Provider + // So we have to mock the response + jest.spyOn(utils, 'isWeb3Provider').mockReturnValue(true); + }); + + it('should pass request to provider and resolve if provider resolves it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest + .fn() + .mockImplementation(async () => Promise.resolve(successResponse)), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).resolves.toEqual(successResponse.result); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + + it('should pass request to provider and reject if provider rejects it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest + .fn() + .mockImplementation(async () => Promise.reject(new Error('my-error'))), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow('my-error'); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + }); + + describe('legacy-request-provider', () => { + it('should pass request to provider and resolve if provider resolves it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(undefined, successResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).resolves.toEqual(successResponse.result); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject if provider throws error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(errorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow(errorResponse.error.message); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject if provider returns error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + // eslint-disable-next-line no-null/no-null + cb(null, errorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new InvalidResponseError(errorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + }); + + describe('eip1193-provider', () => { + beforeEach(() => { + // isEIP1193Provider uses typeof to check if the provider is a EIP1193Provider + // So we have to mock the response + jest.spyOn(utils, 'isEIP1193Provider').mockReturnValue(true); + }); + + it('should pass request to provider and resolve if provider resolves it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest.fn().mockImplementation(async () => { + return Promise.resolve(successResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).resolves.toEqual(successResponse.result); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + + it('should pass request to provider and reject if provider throws error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest.fn().mockImplementation(async () => { + return Promise.reject(errorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow(errorResponse.error.message); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + + it('should pass request to provider and reject if provider returns error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest.fn().mockImplementation(async () => { + return Promise.resolve(errorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new InvalidResponseError(errorResponse), + ); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + }); + + describe('eip1193-provider - return non json-rpc compliance response', () => { + beforeEach(() => { + // isEIP1193Provider uses typeof to check if the provider is a EIP1193Provider + // So we have to mock the response + jest.spyOn(utils, 'isEIP1193Provider').mockReturnValue(true); + }); + + it('should pass request to provider and resolve if provider resolves it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest.fn().mockImplementation(async () => { + return Promise.resolve(successResponse.result); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).resolves.toEqual(successResponse.result); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + + it('should pass request to provider and reject if provider throws error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest.fn().mockImplementation(async _ => { + return Promise.reject(errorResponse.error); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow(errorResponse.error.message); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + + it('should pass request to provider and pass if provider returns "null', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest.fn().mockImplementation(async _ => { + // Explicitly used for test case + // eslint-disable-next-line no-null/no-null + return null; + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).resolves.toBeNull(); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + + it('should pass request to provider and pass if provider returns "undefined', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest.fn().mockImplementation(async _ => { + return undefined; + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).resolves.toBeNull(); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + }); + + describe('legacy-send-provider', () => { + it('should pass request to provider and resolve if provider resolves it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + send: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(undefined, successResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).resolves.toEqual(successResponse.result); + expect(myProvider.send).toHaveBeenCalledTimes(1); + expect(myProvider.send).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject if provider throws error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + send: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(errorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow(errorResponse.error.message); + expect(myProvider.send).toHaveBeenCalledTimes(1); + expect(myProvider.send).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject if provider returns error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + send: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(undefined, errorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow( + new InvalidResponseError(errorResponse), + ); + expect(myProvider.send).toHaveBeenCalledTimes(1); + expect(myProvider.send).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + }); + + describe('legacy-send-async-provider', () => { + it('should pass request to provider and resolve if provider resolves it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + sendAsync: jest + .fn() + .mockImplementation(async () => Promise.resolve(successResponse)), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).resolves.toEqual(successResponse.result); + expect(myProvider.sendAsync).toHaveBeenCalledTimes(1); + expect(myProvider.sendAsync).toHaveBeenCalledWith(payload); + }); + + it('should pass request to provider and reject if provider rejects it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + sendAsync: jest + .fn() + .mockImplementation(async () => Promise.reject(new Error('my-error'))), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.send(request)).rejects.toThrow('my-error'); + expect(myProvider.sendAsync).toHaveBeenCalledTimes(1); + expect(myProvider.sendAsync).toHaveBeenCalledWith(payload); + }); + }); + }); + + describe('sendBatch()', () => { + let request: JsonRpcBatchRequest; + let payload: JsonRpcPayload; + let errorResponse!: JsonRpcBatchResponse; + let successResponse!: JsonRpcBatchResponse; + + beforeEach(() => { + request = [ + { id: 1, jsonrpc: '2.0', method: 'my_method', params: [] }, + { id: 2, jsonrpc: '2.0', method: 'my_method', params: [] }, + ]; + payload = [...request]; + errorResponse = [ + { + id: 1, + jsonrpc: '2.0', + error: { code: 123, message: 'my-rejected-value-1' }, + }, + { + id: 2, + jsonrpc: '2.0', + error: { code: 123, message: 'my-rejected-value-2' }, + }, + ]; + successResponse = [ + { + id: 1, + jsonrpc: '2.0', + result: 'my-resolved-value1', + }, + { + id: 1, + jsonrpc: '2.0', + result: 'my-resolved-value1', + }, + ]; + + jest.spyOn(jsonRpc, 'toBatchPayload').mockReturnValue(payload); + }); + + it('should throw error if no provider is set', async () => { + const manager = new Web3RequestManager(); + + await expect(manager.sendBatch(request)).rejects.toThrow('Provider not available'); + }); + + describe('web3-provider', () => { + beforeEach(() => { + // isWeb3Provider is using `Symbol` to identify which get change with the + // mock implementation of the provider, so we have to mock it's response. + jest.spyOn(utils, 'isWeb3Provider').mockReturnValue(true); + }); + + it('should pass request to provider and resolve if provider resolves it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest + .fn() + .mockImplementation(async () => Promise.resolve(successResponse)), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).resolves.toEqual(successResponse); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + + it('should pass request to provider and reject if provider rejects it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest + .fn() + .mockImplementation(async () => Promise.reject(new Error('my-error'))), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).rejects.toThrow('my-error'); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + + it('should pass request to provider and return response if provider returns error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest + .fn() + .mockImplementation(async () => Promise.resolve(errorResponse)), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).resolves.toEqual(errorResponse); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + }); + + describe('legacy-request-provider', () => { + it('should pass request to provider and resolve if provider resolves it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(undefined, successResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).resolves.toEqual(successResponse); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject if provider throws error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(errorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).rejects.toEqual(errorResponse); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject if provider returns error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(undefined, errorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).resolves.toEqual(errorResponse); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + }); + + describe('eip1193-provider', () => { + beforeEach(() => { + // isEIP1193Provider is using `Symbol.toStringTag` which get change with the + // mock implementation of the provider, so we have to mock it's response. + jest.spyOn(utils, 'isEIP1193Provider').mockReturnValue(true); + }); + + it('should pass request to provider and resolve if provider resolves it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest.fn().mockImplementation(async _ => { + return Promise.resolve(successResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).resolves.toEqual(successResponse); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + + it('should pass request to provider and reject if provider throws error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest.fn().mockImplementation(async _ => { + throw errorResponse; + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).rejects.toEqual(errorResponse); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + + it('should pass request to provider and reject if provider returns error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + request: jest.fn().mockImplementation(async _ => { + return Promise.resolve(errorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).resolves.toEqual(errorResponse); + expect(myProvider.request).toHaveBeenCalledTimes(1); + expect(myProvider.request).toHaveBeenCalledWith(payload); + }); + }); + + describe('legacy-send-provider', () => { + it('should pass request to provider and resolve if provider resolves it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + send: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(undefined, successResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).resolves.toEqual(successResponse); + expect(myProvider.send).toHaveBeenCalledTimes(1); + expect(myProvider.send).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and reject if provider throws error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + send: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(errorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).rejects.toEqual(errorResponse); + expect(myProvider.send).toHaveBeenCalledTimes(1); + expect(myProvider.send).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + + it('should pass request to provider and return response if provider returns error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + send: jest + .fn() + .mockImplementation((_, cb: (error?: any, data?: any) => void) => { + cb(undefined, errorResponse); + }), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).resolves.toEqual(errorResponse); + expect(myProvider.send).toHaveBeenCalledTimes(1); + expect(myProvider.send).toHaveBeenCalledWith(payload, expect.any(Function)); + }); + }); + + describe('legacy-send-async-provider', () => { + it('should pass request to provider and resolve if provider resolves it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + sendAsync: jest + .fn() + .mockImplementation(async () => Promise.resolve(successResponse)), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).resolves.toEqual(successResponse); + expect(myProvider.sendAsync).toHaveBeenCalledTimes(1); + expect(myProvider.sendAsync).toHaveBeenCalledWith(payload); + }); + + it('should pass request to provider and reject if provider rejects it', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + sendAsync: jest + .fn() + .mockImplementation(async () => Promise.reject(new Error('my-error'))), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).rejects.toThrow('my-error'); + expect(myProvider.sendAsync).toHaveBeenCalledTimes(1); + expect(myProvider.sendAsync).toHaveBeenCalledWith(payload); + }); + + it('should pass request to provider and return response if provider returns error', async () => { + const manager = new Web3RequestManager(); + const myProvider = { + sendAsync: jest + .fn() + .mockImplementation(async () => Promise.resolve(errorResponse)), + } as any; + + jest.spyOn(manager, 'provider', 'get').mockReturnValue(myProvider); + + await expect(manager.sendBatch(request)).resolves.toEqual(errorResponse); + expect(myProvider.sendAsync).toHaveBeenCalledTimes(1); + expect(myProvider.sendAsync).toHaveBeenCalledWith(payload); + }); + }); + }); +}); diff --git a/packages/web3-core/test/unit/web3_subscription.test.ts b/packages/web3-core/test/unit/web3_subscription.test.ts new file mode 100644 index 00000000000..cab940b0f00 --- /dev/null +++ b/packages/web3-core/test/unit/web3_subscription.test.ts @@ -0,0 +1,184 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3SubscriptionManager } from '../../src'; +import { ExampleSubscription } from './fixtures/example_subscription'; + +const subscriptions = { example: ExampleSubscription as never }; + +describe('Web3Subscription', () => { + let requestManager: any; + let subscriptionManager: Web3SubscriptionManager; + let sub: ExampleSubscription; + + beforeEach(() => { + requestManager = { + send: jest.fn().mockImplementation(async () => { + return 'sub-id'; + }), + on: jest.fn(), + provider: { on: jest.fn(), removeListener: jest.fn(), request: jest.fn() }, + }; + subscriptionManager = new Web3SubscriptionManager(requestManager, subscriptions); + }); + + describe('subscriptionManager', () => { + it('subscriptionManager is accessible in inherited subscription', async () => { + class InheritedExampleSubscription extends ExampleSubscription { + public verifyAccessToSubscriptionManager( + originalSubscriptionManager: Web3SubscriptionManager, + ) { + expect(this.subscriptionManager).toBe(originalSubscriptionManager); + } + } + new InheritedExampleSubscription( + { param1: 'value' }, + { subscriptionManager }, + ).verifyAccessToSubscriptionManager(subscriptionManager); + }); + }); + + describe('subscribe', () => { + beforeEach(() => { + sub = new ExampleSubscription({ param1: 'value' }, { subscriptionManager }); + }); + it('should invoke request manager for subscription', async () => { + await sub.subscribe(); + + expect(requestManager.send).toHaveBeenCalledTimes(1); + expect(requestManager.send).toHaveBeenCalledWith({ + method: 'eth_subscribe', + params: ['newHeads'], + }); + }); + + it('should set correct subscription id', async () => { + expect(sub.id).toBeUndefined(); + await sub.subscribe(); + expect(sub.id).toBe('sub-id'); + }); + + it('should start listening to the "message" event', async () => { + await sub.subscribe(); + + expect(requestManager.provider.on).toHaveBeenCalledTimes(1); + expect(requestManager.provider.on).toHaveBeenCalledWith( + 'message', + expect.any(Function), + ); + }); + }); + + describe('unsubscribe', () => { + beforeEach(() => { + sub = new ExampleSubscription({ param1: 'value' }, { subscriptionManager }); + sub['_id'] = 'sub-id'; + subscriptionManager.subscriptions.set('sub-id', sub); + }); + + it('should invoke request manager to unsubscribe', async () => { + await sub.unsubscribe(); + + expect(requestManager.send).toHaveBeenCalledTimes(1); + expect(requestManager.send).toHaveBeenCalledWith({ + method: 'eth_unsubscribe', + params: ['sub-id'], + }); + }); + + it('should remove the subscription id', async () => { + expect(sub.id).toBe('sub-id'); + await sub.unsubscribe(); + expect(sub.id).toBeUndefined(); + }); + }); +}); + +describe('Web3Subscription without subscription manager - (deprecated)', () => { + let requestManager: any; + let sub: ExampleSubscription; + + beforeEach(() => { + requestManager = { + send: jest.fn().mockImplementation(async () => { + return 'sub-id'; + }), + on: jest.fn(), + provider: { on: jest.fn(), removeListener: jest.fn(), request: jest.fn() }, + }; + }); + describe('subscribe', () => { + beforeEach(() => { + // eslint-disable-next-line deprecation/deprecation + sub = new ExampleSubscription({ param1: 'value' }, { requestManager }); + }); + + it('should invoke request manager for subscription', async () => { + (requestManager.send as jest.Mock).mockResolvedValue('sub-id'); + await sub.subscribe(); + + expect(requestManager.send).toHaveBeenCalledTimes(1); + expect(requestManager.send).toHaveBeenCalledWith({ + method: 'eth_subscribe', + params: ['newHeads'], + }); + }); + + it('should set correct subscription id', async () => { + (requestManager.send as jest.Mock).mockResolvedValue('sub-id'); + + expect(sub.id).toBeUndefined(); + await sub.subscribe(); + expect(sub.id).toBe('sub-id'); + }); + + it('should start listening to the "message" event', async () => { + // requestManager.provider.on.mockClear(); + await sub.subscribe(); + + expect(requestManager.provider.on).toHaveBeenCalledTimes(1); + expect(requestManager.provider.on).toHaveBeenCalledWith( + 'message', + expect.any(Function), + ); + }); + }); + + describe('unsubscribe', () => { + beforeEach(() => { + // eslint-disable-next-line deprecation/deprecation + sub = new ExampleSubscription({ param1: 'value' }, { requestManager }); + sub['_id'] = 'sub-id'; + }); + + it('should invoke request manager to unsubscribe', async () => { + await sub.unsubscribe(); + + expect(requestManager.provider.on).toHaveBeenCalledTimes(1); + expect(requestManager.provider.on).toHaveBeenCalledWith( + 'message', + expect.any(Function), + ); + }); + + it('should remove the subscription id', async () => { + expect(sub.id).toBe('sub-id'); + await sub.unsubscribe(); + expect(sub.id).toBeUndefined(); + }); + }); +}); diff --git a/packages/web3-core/test/unit/web3_subscription_manager.test.ts b/packages/web3-core/test/unit/web3_subscription_manager.test.ts new file mode 100644 index 00000000000..403719b292a --- /dev/null +++ b/packages/web3-core/test/unit/web3_subscription_manager.test.ts @@ -0,0 +1,224 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { DEFAULT_RETURN_FORMAT } from 'web3-types'; +import { Web3RequestManagerEvent } from '../../src/web3_request_manager'; +import { Web3SubscriptionManager } from '../../src/web3_subscription_manager'; +import { ExampleSubscription } from './fixtures/example_subscription'; + +jest.mock('./fixtures/example_subscription'); + +const subscriptions = { example: ExampleSubscription as never }; + +describe('Web3SubscriptionManager', () => { + let requestManager: any; + let subManager: Web3SubscriptionManager; + + beforeEach(() => { + requestManager = { + send: jest.fn().mockImplementation(async () => { + return 'sub-id'; + }), + on: jest.fn(), + provider: { on: jest.fn() }, + }; + subManager = new Web3SubscriptionManager(requestManager, subscriptions); + (ExampleSubscription as jest.Mock).mockClear(); + }); + + describe('constructor', () => { + it('should create subscription manager object', () => { + subManager = new Web3SubscriptionManager(requestManager, {}); + expect(subManager).toBeInstanceOf(Web3SubscriptionManager); + }); + + it('should create register events for request manager', () => { + const requestMan: any = { + send: jest.fn(), + on: jest.fn(), + provider: { + on: jest + .fn() + .mockImplementation((_: string, callback: (a: string) => unknown) => + callback('something'), + ), + }, + }; + const subscriptionMan = new Web3SubscriptionManager(requestMan, {}); + + expect(subscriptionMan).toBeDefined(); + expect(requestMan.on).toHaveBeenCalledTimes(2); + expect(requestMan.on).toHaveBeenCalledWith( + Web3RequestManagerEvent.BEFORE_PROVIDER_CHANGE, + expect.any(Function), + ); + expect(requestMan.on).toHaveBeenCalledWith( + Web3RequestManagerEvent.PROVIDER_CHANGED, + expect.any(Function), + ); + }); + + it('should register the subscription types', () => { + subManager = new Web3SubscriptionManager(requestManager, { + example: ExampleSubscription as never, + }); + + expect(subManager.registeredSubscriptions).toEqual(subscriptions); + }); + }); + + describe('subscribe', () => { + beforeEach(() => { + subManager = new Web3SubscriptionManager(requestManager, subscriptions); + + jest.spyOn(subManager, 'supportsSubscriptions').mockReturnValue(true); + }); + + it('should throw error if current provider not available', async () => { + delete requestManager.provider; + jest.spyOn(subManager, 'supportsSubscriptions').mockReturnValue(false); + + await expect(subManager.subscribe('example')).rejects.toThrow('Provider not available'); + }); + + it('should throw error if subscription is not supported', async () => { + jest.spyOn(subManager, 'supportsSubscriptions').mockReturnValue(false); + + await expect(subManager.subscribe('example')).rejects.toThrow( + 'The current provider does not support subscriptions', + ); + }); + + it('should throw error if invalid subscription type is called', async () => { + await expect(subManager.subscribe('example2')).rejects.toThrow( + 'Invalid subscription type', + ); + }); + + it('should return valid subscription type if subscribed', async () => { + jest.spyOn(subManager, 'addSubscription').mockResolvedValue('123'); + const result = await subManager.subscribe('example'); + + expect(result).toBeInstanceOf(ExampleSubscription); + }); + + it('should initialize subscription with valid args', async () => { + jest.spyOn(subManager, 'addSubscription').mockResolvedValue('456'); + const result = await subManager.subscribe('example', { test1: 'test1' }); + + expect(result).toBeInstanceOf(ExampleSubscription); + expect(ExampleSubscription).toHaveBeenCalledTimes(1); + expect(ExampleSubscription).toHaveBeenCalledWith( + { test1: 'test1' }, + { subscriptionManager: subManager, returnFormat: DEFAULT_RETURN_FORMAT }, + ); + }); + }); + + describe('addSubscription', () => { + let sub: ExampleSubscription; + + beforeEach(() => { + subManager = new Web3SubscriptionManager(requestManager, subscriptions); + jest.spyOn(subManager, 'supportsSubscriptions').mockReturnValue(true); + sub = new ExampleSubscription( + { param1: 'param1' }, + { subscriptionManager: subManager }, + ); + + (sub as any).id = '123'; + }); + + it('should throw error if a subscription already exists with same id', async () => { + await subManager.addSubscription(sub); + + await expect(subManager.addSubscription(sub)).rejects.toThrow( + 'Subscription with id "123" already exists', + ); + }); + + it('should try to subscribe the subscription', async () => { + sub = new ExampleSubscription( + { param1: 'param1' }, + { subscriptionManager: subManager }, + ); + jest.spyOn(sub, 'sendSubscriptionRequest').mockImplementation(async () => { + (sub as any).id = 'value'; + return Promise.resolve(sub.id as string); + }); + await subManager.addSubscription(sub); + + expect(sub.sendSubscriptionRequest).toHaveBeenCalledTimes(1); + expect(sub.sendSubscriptionRequest).toHaveBeenCalledWith(); + }); + + it('should set the subscription to the map', async () => { + expect(subManager.subscriptions).toEqual(new Map()); + + await subManager.addSubscription(sub); + + expect(subManager.subscriptions).toEqual(new Map([['123', sub]])); + }); + }); + + describe('removeSubscription', () => { + let sub: ExampleSubscription; + + beforeEach(async () => { + subManager = new Web3SubscriptionManager(requestManager, subscriptions); + jest.spyOn(subManager, 'supportsSubscriptions').mockReturnValue(true); + sub = new ExampleSubscription( + { param1: 'param1' }, + { subscriptionManager: subManager }, + ); + + (sub as any).id = '123'; + await subManager.addSubscription(sub); + }); + + it('should throw error if a subscription id does not exists', async () => { + delete (sub as any).id; + + await expect(subManager.removeSubscription(sub)).rejects.toThrow( + 'Subscription is not subscribed yet.', + ); + }); + + it('should throw error if a subscription does not exists', async () => { + (sub as any).id = '456'; + + await expect(subManager.removeSubscription(sub)).rejects.toThrow( + 'Subscription with id "456" does not exists', + ); + }); + + it('should try to unsubscribe the subscription', async () => { + await subManager.removeSubscription(sub); + + expect(sub.sendUnsubscribeRequest).toHaveBeenCalledTimes(1); + expect(sub.sendUnsubscribeRequest).toHaveBeenCalledWith(); + }); + + it('should remove the subscription to the map', async () => { + expect(subManager.subscriptions).toEqual(new Map([['123', sub]])); + + await subManager.removeSubscription(sub); + + expect(subManager.subscriptions).toEqual(new Map()); + }); + }); +}); diff --git a/packages/web3-core/test/unit/web3_subscription_old_providers.test.ts b/packages/web3-core/test/unit/web3_subscription_old_providers.test.ts new file mode 100644 index 00000000000..9cf2949fb23 --- /dev/null +++ b/packages/web3-core/test/unit/web3_subscription_old_providers.test.ts @@ -0,0 +1,124 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ExampleSubscription } from './fixtures/example_subscription'; +import { Web3EventEmitter } from '../../src/web3_event_emitter'; +import { Web3SubscriptionManager } from '../../src'; + +describe('Web3Subscription', () => { + let requestManager: any; + let subscriptionManager: Web3SubscriptionManager; + let eipRequestManager: any; + let subscriptionManagerWithEipReqMan: Web3SubscriptionManager; + let provider: Web3EventEmitter; + let eipProvider: Web3EventEmitter; + + beforeEach(() => { + provider = new Web3EventEmitter(); + eipProvider = new Web3EventEmitter(); + // @ts-expect-error add to test eip providers + eipProvider.request = jest.fn(); + requestManager = { + send: jest.fn().mockImplementation(async () => { + return 'sub-id'; + }), + on: jest.fn(), + provider, + }; + subscriptionManager = new Web3SubscriptionManager(requestManager, {}); + + eipRequestManager = { + send: jest.fn().mockImplementation(async () => { + return 'sub-id'; + }), + on: jest.fn(), + provider: eipProvider, + }; + subscriptionManagerWithEipReqMan = new Web3SubscriptionManager(eipRequestManager, {}); + }); + + describe('providers response for old provider', () => { + it('data with result', async () => { + const sub = new ExampleSubscription({ param1: 'param1' }, { subscriptionManager }); + await sub.subscribe(); + const testData = { + data: { + subscription: sub.id, + result: { + some: 1, + }, + }, + }; + const processResult = jest.spyOn(sub, '_processSubscriptionResult'); + provider.emit('data', testData); + expect(processResult).toHaveBeenCalledWith(testData.data.result); + }); + + it('data without result for old provider', async () => { + const sub = new ExampleSubscription({ param1: 'param1' }, { subscriptionManager }); + await sub.subscribe(); + const testData = { + data: { + subscription: sub.id, + other: { + some: 1, + }, + }, + }; + const processResult = jest.spyOn(sub, '_processSubscriptionResult'); + provider.emit('data', testData); + expect(processResult).toHaveBeenCalledWith(testData.data); + }); + it('data with result for eipProvider', async () => { + const sub = new ExampleSubscription( + { param1: 'param1' }, + { subscriptionManager: subscriptionManagerWithEipReqMan }, + ); + await sub.subscribe(); + const testData = { + data: { + subscription: sub.id, + result: { + some: 1, + }, + }, + }; + const processResult = jest.spyOn(sub, '_processSubscriptionResult'); + eipProvider.emit('message', testData); + expect(processResult).toHaveBeenCalledWith(testData.data.result); + }); + + it('data without result for eipProvider', async () => { + const sub = new ExampleSubscription( + { param1: 'param1' }, + { subscriptionManager: subscriptionManagerWithEipReqMan }, + ); + await sub.subscribe(); + const testData = { + data: { + subscription: sub.id, + other: { + some: 1, + }, + }, + }; + const processResult = jest.spyOn(sub, '_processSubscriptionResult'); + eipProvider.emit('message', testData); + expect(processResult).toHaveBeenCalledWith(testData.data); + }); + }); +}); diff --git a/packages/web3-core/tsconfig.cjs.json b/packages/web3-core/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-core/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-core/tsconfig.esm.json b/packages/web3-core/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-core/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-core/tsconfig.json b/packages/web3-core/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-core/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-core/tsconfig.types.json b/packages/web3-core/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-core/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-core/tsdoc.json b/packages/web3-core/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-core/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-core/types/index.d.ts b/packages/web3-core/types/index.d.ts deleted file mode 100644 index adc7692213f..00000000000 --- a/packages/web3-core/types/index.d.ts +++ /dev/null @@ -1,442 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens - * @author Prince Sinha - * @date 2018 - */ - -import * as net from 'net'; -import { - HttpProviderBase, - HttpProviderOptions, - IpcProviderBase, - WebsocketProviderBase, - WebsocketProviderOptions, - JsonRpcPayload, - JsonRpcResponse -} from 'web3-core-helpers'; -import { Method } from 'web3-core-method'; -import BN = require('bn.js'); -import BigNumber from 'bignumber.js'; - -export interface SignedTransaction { - messageHash?: string; - r: string; - s: string; - v: string; - rawTransaction?: string; - transactionHash?: string; -} - -export interface Extension { - property?: string, - methods: Method[] -} - -export interface Providers { - HttpProvider: new ( - host: string, - options?: HttpProviderOptions - ) => HttpProvider; - WebsocketProvider: new ( - host: string, - options?: WebsocketProviderOptions - ) => WebsocketProvider; - IpcProvider: new (path: string, net: any) => IpcProvider; -} - -export interface PromiEvent extends Promise { - once( - type: 'sending', - handler: (payload: object) => void - ): PromiEvent; - - once( - type: 'sent', - handler: (payload: object) => void - ): PromiEvent; - - once( - type: 'transactionHash', - handler: (transactionHash: string) => void - ): PromiEvent; - - once( - type: 'receipt', - handler: (receipt: TransactionReceipt) => void - ): PromiEvent; - - once( - type: 'confirmation', - handler: (confirmationNumber: number, receipt: TransactionReceipt, latestBlockHash?: string) => void - ): PromiEvent; - - once(type: 'error', handler: (error: Error) => void): PromiEvent; - - once( - type: 'error' | 'confirmation' | 'receipt' | 'transactionHash', - handler: (error: Error | TransactionReceipt | string) => void - ): PromiEvent; - - on( - type: 'transactionHash', - handler: (receipt: string) => void - ): PromiEvent; - - on( - type: 'receipt', - handler: (receipt: TransactionReceipt) => void - ): PromiEvent; - - on( - type: 'confirmation', - handler: (confNumber: number, receipt: TransactionReceipt, latestBlockHash?: string) => void - ): PromiEvent; - - on(type: 'error', handler: (error: Error) => void): PromiEvent; - - on( - type: 'error' | 'confirmation' | 'receipt' | 'transactionHash', - handler: (error: Error | TransactionReceipt | string) => void - ): PromiEvent; -} - -export interface Transaction { - hash: string; - nonce: number; - blockHash: string | null; - blockNumber: number | null; - transactionIndex: number | null; - from: string; - to: string | null; - value: string; - gasPrice: string; - gas: number; - input: string; -} - -export interface TransactionConfig { - from?: string | number; - to?: string; - value?: number | string | BN; - gas?: number | string; - gasPrice?: number | string | BN; - data?: string; - nonce?: number; - chainId?: number; - common?: Common; - chain?: string; - hardfork?: string; -} - -export type chain = - | 'mainnet' - | 'goerli' - | 'kovan' - | 'rinkeby' - | 'ropsten'; - -export type hardfork = - | 'chainstart' - | 'homestead' - | 'dao' - | 'tangerineWhistle' - | 'spuriousDragon' - | 'byzantium' - | 'constantinople' - | 'petersburg' - | 'istanbul'; - -export interface Common { - customChain: CustomChainParams; - baseChain?: chain; - hardfork?: hardfork; -} - -export interface CustomChainParams { - name?: string; - networkId: number; - chainId: number; -} - -export interface RLPEncodedTransaction { - raw: string; - tx: { - nonce: string; - gasPrice: string; - gas: string; - to: string; - value: string; - input: string; - r: string; - s: string; - v: string; - hash: string; - }; -} - -export interface TransactionReceipt { - status: boolean; - transactionHash: string; - transactionIndex: number; - blockHash: string; - blockNumber: number; - from: string; - to: string; - contractAddress?: string; - cumulativeGasUsed: number; - gasUsed: number; - logs: Log[]; - logsBloom: string; - events?: { - [eventName: string]: EventLog; - }; -} - -export interface EventLog { - event: string; - address: string; - returnValues: any; - logIndex: number; - transactionIndex: number; - transactionHash: string; - blockHash: string; - blockNumber: number; - raw?: {data: string; topics: any[]}; -} - -export interface Log { - address: string; - data: string; - topics: string[]; - logIndex: number; - transactionIndex: number; - transactionHash: string; - blockHash: string; - blockNumber: number; -} - -// had to move `web3-net` due to other modules in `1.x` not referencing - -export class NetworkBase { - constructor(); - constructor(provider: provider); - constructor(provider: provider, net: net.Socket); - - readonly givenProvider: any; - readonly currentProvider: provider; - static readonly givenProvider: any; - static readonly providers: Providers; - BatchRequest: new () => BatchRequest; - - setProvider(provider: provider): boolean; - - extend(extension: Extension): any; - - getNetworkType( - callback?: (error: Error, returnValue: string) => void - ): Promise; - - getId(callback?: (error: Error, id: number) => void): Promise; - - isListening( - callback?: (error: Error, listening: boolean) => void - ): Promise; - - getPeerCount( - callback?: (error: Error, peerCount: number) => void - ): Promise; -} - -// had to move accounts from web3-eth-accounts due to other modules in 1.x not referencing - -export class AccountsBase { - constructor(); - constructor(provider: provider); - constructor(provider: provider, net: net.Socket); - - readonly givenProvider: any; - readonly currentProvider: provider; - - setProvider(provider: provider): boolean; - - create(entropy?: string): Account; - - privateKeyToAccount(privateKey: string, ignoreLength?: boolean): Account; - - signTransaction( - transactionConfig: TransactionConfig, - privateKey: string, - callback?: (error: Error, signedTransaction: SignedTransaction) => void - ): Promise; - - recoverTransaction(signature: string): string; - - hashMessage(message: string): string; - - sign(data: string, privateKey: string): Sign; - - recover(signatureObject: SignatureObject): string; - recover(message: string, signature: string, preFixed?: boolean): string; - recover( - message: string, - v: string, - r: string, - s: string, - preFixed?: boolean - ): string; - - encrypt(privateKey: string, password: string): EncryptedKeystoreV3Json; - - decrypt(keystoreJsonV3: EncryptedKeystoreV3Json, password: string): Account; - - wallet: WalletBase; -} - -export class WalletBase { - constructor(accounts: AccountsBase); - - length: number; - defaultKeyName: string; - - [key: number]: Account; - - create(numberOfAccounts: number, entropy?: string): WalletBase; - - add(account: string | AddAccount): AddedAccount; - - remove(account: string | number): boolean; - - clear(): WalletBase; - - encrypt(password: string): EncryptedKeystoreV3Json[]; - - decrypt( - keystoreArray: EncryptedKeystoreV3Json[], - password: string - ): WalletBase; - - save(password: string, keyName?: string): boolean; - - load(password: string, keyName?: string): WalletBase; -} - -export interface AddAccount { - address: string; - privateKey: string; -} - -export interface AddedAccount extends Account { - index: number; -} - -export interface Account { - address: string; - privateKey: string; - signTransaction: ( - transactionConfig: TransactionConfig, - callback?: (signTransaction: SignedTransaction) => void - ) => Promise; - sign: (data: string) => Sign; - encrypt: (password: string) => EncryptedKeystoreV3Json; -} - -export interface EncryptedKeystoreV3Json { - version: number; - id: string; - address: string; - crypto: { - ciphertext: string; - cipherparams: {iv: string}; - cipher: string; - kdf: string; - kdfparams: { - dklen: number; - salt: string; - n: number; - r: number; - p: number; - }; - mac: string; - }; -} - -export interface Sign extends SignedTransaction { - message: string; - signature: string; -} - -export interface SignatureObject { - messageHash: string; - r: string; - s: string; - v: string; -} - -// put all the `web3-provider` typings in here so we can get to them everywhere as this module does not exist in 1.x - -export class BatchRequest { - constructor(); - - add(method: Method): void; - - execute(): void; -} - -export class HttpProvider extends HttpProviderBase { - constructor(host: string, options?: HttpProviderOptions); -} - -export class IpcProvider extends IpcProviderBase { - constructor(path: string, net: net.Server); -} - -export class WebsocketProvider extends WebsocketProviderBase { - constructor(host: string, options?: WebsocketProviderOptions); -} - -export interface PastLogsOptions extends LogsOptions { - toBlock?: BlockNumber; -} - -export interface LogsOptions { - fromBlock?: BlockNumber; - address?: string | string[]; - topics?: Array; -} - -export type BlockNumber = string | number | BN | BigNumber | 'latest' | 'pending' | 'earliest' | 'genesis'; - -export interface RequestArguments { - method: string; - params?: any; - [key: string]: any; -} - -export interface AbstractProvider { - sendAsync(payload: JsonRpcPayload, callback: (error: Error | null, result?: JsonRpcResponse) => void): void; - send?(payload: JsonRpcPayload, callback: (error: Error | null, result?: JsonRpcResponse) => void): void; - request?(args: RequestArguments): Promise; - connected?: boolean; - } - -export type provider = - | HttpProvider - | IpcProvider - | WebsocketProvider - | AbstractProvider - | string - | null; diff --git a/packages/web3-core/types/tsconfig.json b/packages/web3-core/types/tsconfig.json deleted file mode 100644 index 9db422ea462..00000000000 --- a/packages/web3-core/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-core": ["."] - } - } -} diff --git a/packages/web3-core/types/tslint.json b/packages/web3-core/types/tslint.json deleted file mode 100644 index 2a4469808b0..00000000000 --- a/packages/web3-core/types/tslint.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false, - "unified-signatures": false, - "no-redundant-jsdoc": false - } -} diff --git a/packages/web3-errors/.eslintignore b/packages/web3-errors/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/packages/web3-errors/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/packages/web3-errors/.eslintrc.js b/packages/web3-errors/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-errors/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-errors/.gitignore b/packages/web3-errors/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-errors/.npmignore b/packages/web3-errors/.npmignore new file mode 120000 index 00000000000..8a0be70f3ed --- /dev/null +++ b/packages/web3-errors/.npmignore @@ -0,0 +1 @@ +../../templates/.npmignore.tmpl \ No newline at end of file diff --git a/packages/web3-errors/.npmrc b/packages/web3-errors/.npmrc new file mode 120000 index 00000000000..5cc817c4313 --- /dev/null +++ b/packages/web3-errors/.npmrc @@ -0,0 +1 @@ +../../templates/.npmrc.tmpl \ No newline at end of file diff --git a/packages/web3-errors/.prettierignore b/packages/web3-errors/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-errors/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-errors/.prettierrc.json b/packages/web3-errors/.prettierrc.json new file mode 120000 index 00000000000..00ecd510aaf --- /dev/null +++ b/packages/web3-errors/.prettierrc.json @@ -0,0 +1 @@ +../../templates/.prettierrc.json.tmpl \ No newline at end of file diff --git a/packages/web3-errors/CHANGELOG.md b/packages/web3-errors/CHANGELOG.md new file mode 100644 index 00000000000..abf921d4027 --- /dev/null +++ b/packages/web3-errors/CHANGELOG.md @@ -0,0 +1,163 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [0.1.1-alpha.1] + +### Added + +- Add optional `innerError` property to the abstract class `Web3Error`. This `innerError` could be `Error`, `Error[]` or `undefined`. (#5435) (#5434) +- The class `Web3ContractError` is moved to this package from `web3-eth-contract`. (#5434) +- Added the error code `ERR_TX_SIGNING` and used it inside `TransactionSigningError` (#5462) +- Added the error code `ERR_TX_GAS_MISMATCH` and used it inside `TransactionGasMismatchError` (#5462) +- Added `SignatureError` to `web3-errors/src/errors/signature_errors.ts` (moved from `web3-eth/src/errors.ts`) (#5462) +- Added the errors' classes to `web3-errors/src/errors/transaction_errors.ts` from `web3-eth/src/errors.ts` (#5462) +- Added `TransactionBlockTimeoutError` class and its error code `ERR_TX_BLOCK_TIMEOUT` (#5294) +- `ExistingPluginNamespaceError` class and it's error code `ERR_EXISTING_PLUGIN_NAMESPACE` (#5393) + +### Changed + +- Corrected the error code for `JSONRPC_ERR_UNAUTHORIZED` to be `4100` (#5462) +- Moved `SignerError` from `web3-errors/src/errors/signature_errors.ts` to `web3-errors/src/errors/transaction_errors.ts`, and renamed it to `TransactionSigningError` (#5462) + +## [0.1.1-alpha.2] + +### Changed + +- Updated Web3.js dependencies (#5664) + +## [0.1.1-alpha.3] + +### Changed + +- `main` and `files` entries in `package.json` changed to `lib/` directory from `dist/` (#5739) + +## [0.1.1-alpha.4] + +### Changed + +- web3.js dependencies (#5757) + +## [1.0.0-rc.0] + +### Changed + +- The abstract class `Web3Error` is renamed to `BaseWeb3Error` (#5771) +- Renamed TransactionRevertError to TransactionRevertInstructionError to remain consistent with 1.x +- Using `MaxAttemptsReachedOnReconnectingError` with the same message for 1.x but also adding the `maxAttempts` (#5894) + +### Added + +- Added error class `InvalidMethodParamsError` and error code `ERR_INVALID_METHOD_PARAMS = 207` (#5824) +- `request` property to `ResponseError` (#5854) +- `data` property to `TransactionRevertInstructionError` (#5854) +- `TransactionRevertWithCustomError` was added to handle custom solidity errors (#5854) + +## [1.0.0-rc.1] + +### Added + +- Added hybrid build (ESM and CJS) of library (#5904) +- Added source files (#5956) + +### Changed + +- `gasLimit` is no longer accepted as a parameter for `MissingGasError` and `TransactionGasMismatchError, and is also no longer included in error message (#5915) + +## [1.0.0-rc.2] + +### Added + +- `InvalidPropertiesForTransactionTypeError` with error code `429` (#6102) + +### Changed + +- Nested Smart Contract error data is extracted at `Eip838ExecutionError` constructor and the nested error is set at `innerError` (#6045) + +## [1.0.0] + +Release Notes: + +Detailed List of change logs are mentioned under previous 1.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [1.0.1] + +### Changed + +- Dependencies updated + +## [1.0.2] + +### Changed + +- Dependencies updated + +## [1.1.0] + +### Added + +- `RpcErrorMessages` that contains mapping for standard RPC Errors and their messages. (#6230) +- created `TransactionGasMismatchInnerError` for clarity on the error in `TransactionGasMismatchError` (#6215) +- created `MissingGasInnerError` for clarity on the error in `MissingGasError` (#6215) + +### Fixed + +- Fixed: "'disconnect' in Eip1193 provider must emit ProviderRpcError #6003".(#6230) + +## [1.1.1] + +### Fixed + +- ESM import bug (#6359) + +## [1.1.2] + +### Changed + +- Dependencies updated + +## [1.1.3] + +### Fixed + +- Added new SchemaFormatError (#6434) + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-errors/README.md b/packages/web3-errors/README.md new file mode 100644 index 00000000000..9a68b9a7b8d --- /dev/null +++ b/packages/web3-errors/README.md @@ -0,0 +1,59 @@ +

+ web3.js +

+ +# web3.js - Web3-Errors + +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] + +This is a sub-package of [web3.js][repo]. + +`web3-errors` This package has web3 error classes. + +## Installation + +You can install the package either using [NPM](https://www.npmjs.com/package/web3-errors) or using [Yarn](https://yarnpkg.com/package/web3-errors) + +### Using NPM + +```bash +npm install web3-errors +``` + +### Using Yarn + +```bash +yarn add web3-errors +``` + +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts + +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | + +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-errors +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-errors%2Fpackage.json +[npm-url]: https://npmjs.org/package/web3-errors +[downloads-image]: https://img.shields.io/npm/dm/web3-errors?label=npm%20downloads diff --git a/packages/web3-errors/assets/logo/web3js.ai b/packages/web3-errors/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-errors/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-errors/assets/logo/web3js.jpg b/packages/web3-errors/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-errors/assets/logo/web3js.jpg differ diff --git a/packages/web3-errors/assets/logo/web3js.svg b/packages/web3-errors/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-errors/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-errors/package.json b/packages/web3-errors/package.json new file mode 100644 index 00000000000..64dfb0fb667 --- /dev/null +++ b/packages/web3-errors/package.json @@ -0,0 +1,60 @@ +{ + "name": "web3-errors", + "version": "1.1.3", + "description": "This package has web3 error classes", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests" + }, + "dependencies": { + "web3-types": "^1.3.0" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + } +} diff --git a/packages/web3-errors/src/error_codes.ts b/packages/web3-errors/src/error_codes.ts new file mode 100644 index 00000000000..c9ff68f6d7f --- /dev/null +++ b/packages/web3-errors/src/error_codes.ts @@ -0,0 +1,182 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Response error +export const ERR_RESPONSE = 100; +export const ERR_INVALID_RESPONSE = 101; + +// Generic errors +export const ERR_PARAM = 200; +export const ERR_FORMATTERS = 201; +export const ERR_METHOD_NOT_IMPLEMENTED = 202; +export const ERR_OPERATION_TIMEOUT = 203; +export const ERR_OPERATION_ABORT = 204; +export const ERR_ABI_ENCODING = 205; +export const ERR_EXISTING_PLUGIN_NAMESPACE = 206; +export const ERR_INVALID_METHOD_PARAMS = 207; + +// Contract error codes +export const ERR_CONTRACT = 300; +export const ERR_CONTRACT_RESOLVER_MISSING = 301; +export const ERR_CONTRACT_ABI_MISSING = 302; +export const ERR_CONTRACT_REQUIRED_CALLBACK = 303; +export const ERR_CONTRACT_EVENT_NOT_EXISTS = 304; +export const ERR_CONTRACT_RESERVED_EVENT = 305; +export const ERR_CONTRACT_MISSING_DEPLOY_DATA = 306; +export const ERR_CONTRACT_MISSING_ADDRESS = 307; +export const ERR_CONTRACT_MISSING_FROM_ADDRESS = 308; +export const ERR_CONTRACT_INSTANTIATION = 309; +export const ERR_CONTRACT_EXECUTION_REVERTED = 310; +export const ERR_CONTRACT_TX_DATA_AND_INPUT = 311; + +// Transaction error codes +export const ERR_TX = 400; +export const ERR_TX_REVERT_INSTRUCTION = 401; +export const ERR_TX_REVERT_TRANSACTION = 402; +export const ERR_TX_NO_CONTRACT_ADDRESS = 403; +export const ERR_TX_CONTRACT_NOT_STORED = 404; +export const ERR_TX_REVERT_WITHOUT_REASON = 405; +export const ERR_TX_OUT_OF_GAS = 406; +export const ERR_RAW_TX_UNDEFINED = 407; + +export const ERR_TX_INVALID_SENDER = 408; +export const ERR_TX_INVALID_CALL = 409; +export const ERR_TX_MISSING_CUSTOM_CHAIN = 410; +export const ERR_TX_MISSING_CUSTOM_CHAIN_ID = 411; +export const ERR_TX_CHAIN_ID_MISMATCH = 412; +export const ERR_TX_INVALID_CHAIN_INFO = 413; +export const ERR_TX_MISSING_CHAIN_INFO = 414; +export const ERR_TX_MISSING_GAS = 415; +export const ERR_TX_INVALID_LEGACY_GAS = 416; +export const ERR_TX_INVALID_FEE_MARKET_GAS = 417; +export const ERR_TX_INVALID_FEE_MARKET_GAS_PRICE = 418; +export const ERR_TX_INVALID_LEGACY_FEE_MARKET = 419; +export const ERR_TX_INVALID_OBJECT = 420; +export const ERR_TX_INVALID_NONCE_OR_CHAIN_ID = 421; +export const ERR_TX_UNABLE_TO_POPULATE_NONCE = 422; +export const ERR_TX_UNSUPPORTED_EIP_1559 = 423; +export const ERR_TX_UNSUPPORTED_TYPE = 424; +export const ERR_TX_DATA_AND_INPUT = 425; +export const ERR_TX_POLLING_TIMEOUT = 426; +export const ERR_TX_RECEIPT_MISSING_OR_BLOCKHASH_NULL = 427; +export const ERR_TX_RECEIPT_MISSING_BLOCK_NUMBER = 428; + +export const ERR_TX_LOCAL_WALLET_NOT_AVAILABLE = 429; + +export const ERR_TX_NOT_FOUND = 430; +export const ERR_TX_SEND_TIMEOUT = 431; +export const ERR_TX_BLOCK_TIMEOUT = 432; + +export const ERR_TX_SIGNING = 433; +export const ERR_TX_GAS_MISMATCH = 434; + +export const ERR_TX_CHAIN_MISMATCH = 435; +export const ERR_TX_HARDFORK_MISMATCH = 436; +export const ERR_TX_INVALID_RECEIVER = 437; +export const ERR_TX_REVERT_TRANSACTION_CUSTOM_ERROR = 438; +export const ERR_TX_INVALID_PROPERTIES_FOR_TYPE = 439; + +export const ERR_TX_MISSING_GAS_INNER_ERROR = 440; +export const ERR_TX_GAS_MISMATCH_INNER_ERROR = 441; +// Connection error codes +export const ERR_CONN = 500; +export const ERR_CONN_INVALID = 501; +export const ERR_CONN_TIMEOUT = 502; +export const ERR_CONN_NOT_OPEN = 503; +export const ERR_CONN_CLOSE = 504; +export const ERR_CONN_MAX_ATTEMPTS = 505; +export const ERR_CONN_PENDING_REQUESTS = 506; +export const ERR_REQ_ALREADY_SENT = 507; + +// Provider error codes +export const ERR_PROVIDER = 600; +export const ERR_INVALID_PROVIDER = 601; +export const ERR_INVALID_CLIENT = 602; +export const ERR_SUBSCRIPTION = 603; +export const ERR_WS_PROVIDER = 604; + +// Account error codes +export const ERR_PRIVATE_KEY_LENGTH = 701; +export const ERR_INVALID_PRIVATE_KEY = 702; +export const ERR_UNSUPPORTED_KDF = 703; +export const ERR_KEY_DERIVATION_FAIL = 704; +export const ERR_KEY_VERSION_UNSUPPORTED = 705; +export const ERR_INVALID_PASSWORD = 706; +export const ERR_IV_LENGTH = 707; +export const ERR_INVALID_KEYSTORE = 708; +export const ERR_PBKDF2_ITERATIONS = 709; + +// Signature error codes +export const ERR_SIGNATURE_FAILED = 801; +export const ERR_INVALID_SIGNATURE = 802; + +export const GENESIS_BLOCK_NUMBER = '0x0'; + +// RPC error codes (EIP-1193) +// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md#provider-errors +export const JSONRPC_ERR_REJECTED_REQUEST = 4001; +export const JSONRPC_ERR_UNAUTHORIZED = 4100; +export const JSONRPC_ERR_UNSUPPORTED_METHOD = 4200; +export const JSONRPC_ERR_DISCONNECTED = 4900; +export const JSONRPC_ERR_CHAIN_DISCONNECTED = 4901; + +// ENS error codes +export const ERR_ENS_CHECK_INTERFACE_SUPPORT = 901; +export const ERR_ENS_UNSUPPORTED_NETWORK = 902; +export const ERR_ENS_NETWORK_NOT_SYNCED = 903; + +// Utils error codes +export const ERR_INVALID_STRING = 1001; +export const ERR_INVALID_BYTES = 1002; +export const ERR_INVALID_NUMBER = 1003; +export const ERR_INVALID_UNIT = 1004; +export const ERR_INVALID_ADDRESS = 1005; +export const ERR_INVALID_HEX = 1006; +export const ERR_INVALID_TYPE = 1007; +export const ERR_INVALID_BOOLEAN = 1008; +export const ERR_INVALID_UNSIGNED_INTEGER = 1009; +export const ERR_INVALID_SIZE = 1010; +export const ERR_INVALID_LARGE_VALUE = 1011; +export const ERR_INVALID_BLOCK = 1012; +export const ERR_INVALID_TYPE_ABI = 1013; +export const ERR_INVALID_NIBBLE_WIDTH = 1014; + +// Validation error codes +export const ERR_VALIDATION = 1100; + + +// Core error codes +export const ERR_CORE_HARDFORK_MISMATCH = 1101; +export const ERR_CORE_CHAIN_MISMATCH = 1102; + +// Schema error codes +export const ERR_SCHEMA_FORMAT = 1200; + +// RPC error codes (EIP-1474) +// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1474.md +export const ERR_RPC_INVALID_JSON = -32700; +export const ERR_RPC_INVALID_REQUEST = -32600; +export const ERR_RPC_INVALID_METHOD = -32601; +export const ERR_RPC_INVALID_PARAMS = -32602; +export const ERR_RPC_INTERNAL_ERROR = -32603; +export const ERR_RPC_INVALID_INPUT = -32000; +export const ERR_RPC_MISSING_RESOURCE = -32001; +export const ERR_RPC_UNAVAILABLE_RESOURCE = -32002; +export const ERR_RPC_TRANSACTION_REJECTED = -32003; +export const ERR_RPC_UNSUPPORTED_METHOD = -32004; +export const ERR_RPC_LIMIT_EXCEEDED = -32005; +export const ERR_RPC_NOT_SUPPORTED = -32006; diff --git a/packages/web3-errors/src/errors/account_errors.ts b/packages/web3-errors/src/errors/account_errors.ts new file mode 100644 index 00000000000..9d0d0c7580a --- /dev/null +++ b/packages/web3-errors/src/errors/account_errors.ts @@ -0,0 +1,94 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable max-classes-per-file */ + +import { + ERR_PRIVATE_KEY_LENGTH, + ERR_INVALID_PRIVATE_KEY, + ERR_INVALID_SIGNATURE, + ERR_UNSUPPORTED_KDF, + ERR_KEY_DERIVATION_FAIL, + ERR_KEY_VERSION_UNSUPPORTED, + ERR_INVALID_PASSWORD, + ERR_IV_LENGTH, + ERR_PBKDF2_ITERATIONS, +} from '../error_codes.js'; +import { BaseWeb3Error } from '../web3_error_base.js'; + +export class PrivateKeyLengthError extends BaseWeb3Error { + public code = ERR_PRIVATE_KEY_LENGTH; + public constructor() { + super(`Private key must be 32 bytes.`); + } +} + +export class InvalidPrivateKeyError extends BaseWeb3Error { + public code = ERR_INVALID_PRIVATE_KEY; + public constructor() { + super(`Invalid Private Key, Not a valid string or uint8Array`); + } +} + +export class InvalidSignatureError extends BaseWeb3Error { + public code = ERR_INVALID_SIGNATURE; + public constructor(errorDetails: string) { + super(`"${errorDetails}"`); + } +} + +export class InvalidKdfError extends BaseWeb3Error { + public code = ERR_UNSUPPORTED_KDF; + public constructor() { + super(`Invalid key derivation function`); + } +} + +export class KeyDerivationError extends BaseWeb3Error { + public code = ERR_KEY_DERIVATION_FAIL; + public constructor() { + super(`Key derivation failed - possibly wrong password`); + } +} + +export class KeyStoreVersionError extends BaseWeb3Error { + public code = ERR_KEY_VERSION_UNSUPPORTED; + public constructor() { + super('Unsupported key store version'); + } +} + +export class InvalidPasswordError extends BaseWeb3Error { + public code = ERR_INVALID_PASSWORD; + public constructor() { + super('Password cannot be empty'); + } +} + +export class IVLengthError extends BaseWeb3Error { + public code = ERR_IV_LENGTH; + public constructor() { + super('Initialization vector must be 16 bytes'); + } +} + +export class PBKDF2IterationsError extends BaseWeb3Error { + public code = ERR_PBKDF2_ITERATIONS; + public constructor() { + super('c > 1000, pbkdf2 is less secure with less iterations'); + } +} diff --git a/packages/web3-errors/src/errors/connection_errors.ts b/packages/web3-errors/src/errors/connection_errors.ts new file mode 100644 index 00000000000..d9d820898b0 --- /dev/null +++ b/packages/web3-errors/src/errors/connection_errors.ts @@ -0,0 +1,112 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable max-classes-per-file */ + +import { ConnectionEvent } from 'web3-types'; +import { + ERR_CONN, + ERR_CONN_INVALID, + ERR_CONN_TIMEOUT, + ERR_CONN_NOT_OPEN, + ERR_CONN_CLOSE, + ERR_CONN_MAX_ATTEMPTS, + ERR_CONN_PENDING_REQUESTS, + ERR_REQ_ALREADY_SENT, +} from '../error_codes.js'; +import { BaseWeb3Error } from '../web3_error_base.js'; + +export class ConnectionError extends BaseWeb3Error { + public code = ERR_CONN; + public errorCode?: number; + public errorReason?: string; + + public constructor(message: string, event?: ConnectionEvent) { + super(message); + + if (event) { + this.errorCode = event.code; + this.errorReason = event.reason; + } + } + + public toJSON() { + return { ...super.toJSON(), errorCode: this.errorCode, errorReason: this.errorReason }; + } +} + +export class InvalidConnectionError extends ConnectionError { + public constructor(public host: string, event?: ConnectionEvent) { + super(`CONNECTION ERROR: Couldn't connect to node ${host}.`, event); + this.code = ERR_CONN_INVALID; + } + + public toJSON() { + return { ...super.toJSON(), host: this.host }; + } +} + +export class ConnectionTimeoutError extends ConnectionError { + public constructor(public duration: number) { + super(`CONNECTION TIMEOUT: timeout of ${duration}ms achieved`); + this.code = ERR_CONN_TIMEOUT; + } + + public toJSON() { + return { ...super.toJSON(), duration: this.duration }; + } +} + +export class ConnectionNotOpenError extends ConnectionError { + public constructor(event?: ConnectionEvent) { + super('Connection not open', event); + this.code = ERR_CONN_NOT_OPEN; + } +} + +export class ConnectionCloseError extends ConnectionError { + public constructor(event?: ConnectionEvent) { + super( + `CONNECTION ERROR: The connection got closed with the close code ${ + event?.code ?? '' + } and the following reason string ${event?.reason ?? ''}`, + event, + ); + this.code = ERR_CONN_CLOSE; + } +} + +export class MaxAttemptsReachedOnReconnectingError extends ConnectionError { + public constructor(numberOfAttempts: number) { + super(`Maximum number of reconnect attempts reached! (${numberOfAttempts})`); + this.code = ERR_CONN_MAX_ATTEMPTS; + } +} + +export class PendingRequestsOnReconnectingError extends ConnectionError { + public constructor() { + super('CONNECTION ERROR: Provider started to reconnect before the response got received!'); + this.code = ERR_CONN_PENDING_REQUESTS; + } +} + +export class RequestAlreadySentError extends ConnectionError { + public constructor(id: number | string) { + super(`Request already sent with following id: ${id}`); + this.code = ERR_REQ_ALREADY_SENT; + } +} diff --git a/packages/web3-errors/src/errors/contract_errors.ts b/packages/web3-errors/src/errors/contract_errors.ts new file mode 100644 index 00000000000..98a38245da6 --- /dev/null +++ b/packages/web3-errors/src/errors/contract_errors.ts @@ -0,0 +1,237 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable max-classes-per-file */ + +import { JsonRpcError, TransactionReceipt, HexString } from 'web3-types'; +import { + ERR_CONTRACT, + ERR_CONTRACT_ABI_MISSING, + ERR_CONTRACT_EXECUTION_REVERTED, + ERR_CONTRACT_EVENT_NOT_EXISTS, + ERR_CONTRACT_INSTANTIATION, + ERR_CONTRACT_MISSING_ADDRESS, + ERR_CONTRACT_MISSING_DEPLOY_DATA, + ERR_CONTRACT_MISSING_FROM_ADDRESS, + ERR_CONTRACT_REQUIRED_CALLBACK, + ERR_CONTRACT_RESERVED_EVENT, + ERR_CONTRACT_RESOLVER_MISSING, + ERR_CONTRACT_TX_DATA_AND_INPUT, +} from '../error_codes.js'; +import { BaseWeb3Error, InvalidValueError } from '../web3_error_base.js'; + +export class Web3ContractError extends BaseWeb3Error { + public code = ERR_CONTRACT; + public receipt?: TransactionReceipt; + + public constructor(message: string, receipt?: TransactionReceipt) { + super(message); + + this.receipt = receipt; + } +} +export class ResolverMethodMissingError extends BaseWeb3Error { + public code = ERR_CONTRACT_RESOLVER_MISSING; + + public constructor(public address: string, public name: string) { + super(`The resolver at ${address} does not implement requested method: "${name}".`); + } + + public toJSON() { + return { ...super.toJSON(), address: this.address, name: this.name }; + } +} + +export class ContractMissingABIError extends BaseWeb3Error { + public code = ERR_CONTRACT_ABI_MISSING; + + public constructor() { + super( + 'You must provide the json interface of the contract when instantiating a contract object.', + ); + } +} + +export class ContractOnceRequiresCallbackError extends BaseWeb3Error { + public code = ERR_CONTRACT_REQUIRED_CALLBACK; + + public constructor() { + super('Once requires a callback as the second parameter.'); + } +} + +export class ContractEventDoesNotExistError extends BaseWeb3Error { + public code = ERR_CONTRACT_EVENT_NOT_EXISTS; + + public constructor(public eventName: string) { + super(`Event "${eventName}" doesn't exist in this contract.`); + } + + public toJSON() { + return { ...super.toJSON(), eventName: this.eventName }; + } +} + +export class ContractReservedEventError extends BaseWeb3Error { + public code = ERR_CONTRACT_RESERVED_EVENT; + + public constructor(public type: string) { + super(`Event "${type}" doesn't exist in this contract.`); + } + + public toJSON() { + return { ...super.toJSON(), type: this.type }; + } +} + +export class ContractMissingDeployDataError extends BaseWeb3Error { + public code = ERR_CONTRACT_MISSING_DEPLOY_DATA; + + public constructor() { + super(`No "data" specified in neither the given options, nor the default options.`); + } +} + +export class ContractNoAddressDefinedError extends BaseWeb3Error { + public code = ERR_CONTRACT_MISSING_ADDRESS; + + public constructor() { + super("This contract object doesn't have address set yet, please set an address first."); + } +} + +export class ContractNoFromAddressDefinedError extends BaseWeb3Error { + public code = ERR_CONTRACT_MISSING_FROM_ADDRESS; + + public constructor() { + super('No "from" address specified in neither the given options, nor the default options.'); + } +} + +export class ContractInstantiationError extends BaseWeb3Error { + public code = ERR_CONTRACT_INSTANTIATION; +} + +export type ProviderErrorData = + | HexString + | { data: HexString } + | { originalError: { data: HexString } }; + +/** + * This class is expected to be set as an `innerError` inside ContractExecutionError + * The properties would be typically decoded from the `data` if it was encoded according to EIP-838 + */ +export class Eip838ExecutionError extends Web3ContractError { + public readonly name: string; + public code: number; + public data?: HexString; + public errorName?: string; + public errorSignature?: string; + public errorArgs?: { [K in string]: unknown }; + + // eslint-disable-next-line no-use-before-define + public innerError: Eip838ExecutionError | undefined; + + public constructor(error: JsonRpcError | Eip838ExecutionError) { + super(error.message || 'Error'); + + this.name = ('name' in error && error.name) || this.constructor.name; + this.stack = ('stack' in error && error.stack) || undefined; + this.code = error.code; + + // get embedded error details got from some providers like MetaMask + // and set this.data from the inner error data for easier read. + // note: the data is a hex string inside either: + // error.data, error.data.data or error.data.originalError.data (https://github.com/web3/web3.js/issues/4454#issuecomment-1485953455) + if (typeof error.data === 'object') { + let originalError: { data: string }; + if ('originalError' in error.data) { + originalError = error.data.originalError; + } else { + // Ganache has no `originalError` sub-object unlike others + originalError = error.data; + } + this.data = originalError.data; + this.innerError = new Eip838ExecutionError( + originalError as JsonRpcError, + ); + } else { + this.data = error.data; + } + } + + public setDecodedProperties( + errorName: string, + errorSignature?: string, + errorArgs?: { [K in string]: unknown }, + ) { + this.errorName = errorName; + this.errorSignature = errorSignature; + this.errorArgs = errorArgs; + } + + public toJSON() { + let json = { + ...super.toJSON(), + data: this.data, + } as { + name: string; + code: number; + message: string; + innerError: Error | Error[] | undefined; + data: string; + errorName?: string; + errorSignature?: string; + errorArgs?: { [K in string]: unknown }; + }; + + if (this.errorName) { + json = { + ...json, + errorName: this.errorName, + errorSignature: this.errorSignature, + errorArgs: this.errorArgs, + }; + } + return json; + } +} + +/** + * Used when an error is raised while executing a function inside a smart contract. + * The data is expected to be encoded according to EIP-848. + */ +export class ContractExecutionError extends Web3ContractError { + public innerError: Eip838ExecutionError; + + public constructor(rpcError: JsonRpcError) { + super('Error happened while trying to execute a function inside a smart contract'); + this.code = ERR_CONTRACT_EXECUTION_REVERTED; + this.innerError = new Eip838ExecutionError(rpcError as JsonRpcError); + } +} + +export class ContractTransactionDataAndInputError extends InvalidValueError { + public code = ERR_CONTRACT_TX_DATA_AND_INPUT; + + public constructor(value: { data: HexString | undefined; input: HexString | undefined }) { + super( + `data: ${value.data ?? 'undefined'}, input: ${value.input ?? 'undefined'}`, + 'You can\'t have "data" and "input" as properties of a contract at the same time, please use either "data" or "input" instead.', + ); + } +} diff --git a/packages/web3-errors/src/errors/core_errors.ts b/packages/web3-errors/src/errors/core_errors.ts new file mode 100644 index 00000000000..5adb6f732ec --- /dev/null +++ b/packages/web3-errors/src/errors/core_errors.ts @@ -0,0 +1,41 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable max-classes-per-file */ + +import { BaseWeb3Error } from '../web3_error_base.js'; +import { ERR_CORE_HARDFORK_MISMATCH } from '../error_codes.js'; + +export class ConfigHardforkMismatchError extends BaseWeb3Error { + public code = ERR_CORE_HARDFORK_MISMATCH; + + public constructor(defaultHardfork: string, commonHardFork: string) { + super( + `Web3Config hardfork doesnt match in defaultHardfork ${defaultHardfork} and common.hardfork ${commonHardFork}`, + ); + } +} + +export class ConfigChainMismatchError extends BaseWeb3Error { + public code = ERR_CORE_HARDFORK_MISMATCH; + + public constructor(defaultHardfork: string, commonHardFork: string) { + super( + `Web3Config chain doesnt match in defaultHardfork ${defaultHardfork} and common.hardfork ${commonHardFork}`, + ); + } +} diff --git a/packages/web3-errors/src/errors/ens_errors.ts b/packages/web3-errors/src/errors/ens_errors.ts new file mode 100644 index 00000000000..20a5796c931 --- /dev/null +++ b/packages/web3-errors/src/errors/ens_errors.ts @@ -0,0 +1,46 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable max-classes-per-file */ + +import { + ERR_ENS_CHECK_INTERFACE_SUPPORT, + ERR_ENS_NETWORK_NOT_SYNCED, + ERR_ENS_UNSUPPORTED_NETWORK, +} from '../error_codes.js'; +import { BaseWeb3Error } from '../web3_error_base.js'; + +export class ENSCheckInterfaceSupportError extends BaseWeb3Error { + public code = ERR_ENS_CHECK_INTERFACE_SUPPORT; + public constructor(errorDetails: string) { + super(`ENS resolver check interface support error. "${errorDetails}"`); + } +} + +export class ENSUnsupportedNetworkError extends BaseWeb3Error { + public code = ERR_ENS_UNSUPPORTED_NETWORK; + public constructor(networkType: string) { + super(`ENS is not supported on network ${networkType}`); + } +} + +export class ENSNetworkNotSyncedError extends BaseWeb3Error { + public code = ERR_ENS_NETWORK_NOT_SYNCED; + public constructor() { + super(`Network not synced`); + } +} diff --git a/packages/web3-errors/src/errors/generic_errors.ts b/packages/web3-errors/src/errors/generic_errors.ts new file mode 100644 index 00000000000..1e246bf88ff --- /dev/null +++ b/packages/web3-errors/src/errors/generic_errors.ts @@ -0,0 +1,100 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable max-classes-per-file */ + +import { + ERR_ABI_ENCODING, + ERR_FORMATTERS, + ERR_METHOD_NOT_IMPLEMENTED, + ERR_OPERATION_ABORT, + ERR_OPERATION_TIMEOUT, + ERR_PARAM, + ERR_EXISTING_PLUGIN_NAMESPACE, + ERR_INVALID_METHOD_PARAMS, +} from '../error_codes.js'; +import { BaseWeb3Error } from '../web3_error_base.js'; + +export class InvalidNumberOfParamsError extends BaseWeb3Error { + public code = ERR_PARAM; + + public constructor(public got: number, public expected: number, public method: string) { + super(`Invalid number of parameters for "${method}". Got "${got}" expected "${expected}"!`); + } + + public toJSON() { + return { + ...super.toJSON(), + got: this.got, + expected: this.expected, + method: this.method, + }; + } +} + +export class InvalidMethodParamsError extends BaseWeb3Error { + public code = ERR_INVALID_METHOD_PARAMS; + + public constructor(public hint?: string) { + super(`Invalid parameters passed. "${typeof hint !== 'undefined' ? hint : ''}"`); + } + + public toJSON() { + return { + ...super.toJSON(), + hint: this.hint, + }; + } +} + +export class FormatterError extends BaseWeb3Error { + public code = ERR_FORMATTERS; +} + +export class MethodNotImplementedError extends BaseWeb3Error { + public code = ERR_METHOD_NOT_IMPLEMENTED; + + public constructor() { + super("The method you're trying to call is not implemented."); + } +} + +export class OperationTimeoutError extends BaseWeb3Error { + public code = ERR_OPERATION_TIMEOUT; +} + +export class OperationAbortError extends BaseWeb3Error { + public code = ERR_OPERATION_ABORT; +} + +export class AbiError extends BaseWeb3Error { + public code = ERR_ABI_ENCODING; + public readonly props: Record & { name?: string }; + + public constructor(message: string, props?: Record & { name?: string }) { + super(message); + this.props = props ?? {}; + } +} + +export class ExistingPluginNamespaceError extends BaseWeb3Error { + public code = ERR_EXISTING_PLUGIN_NAMESPACE; + + public constructor(pluginNamespace: string) { + super(`A plugin with the namespace: ${pluginNamespace} has already been registered.`); + } +} diff --git a/packages/web3-errors/src/errors/provider_errors.ts b/packages/web3-errors/src/errors/provider_errors.ts new file mode 100644 index 00000000000..bbaadf96c28 --- /dev/null +++ b/packages/web3-errors/src/errors/provider_errors.ts @@ -0,0 +1,55 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable max-classes-per-file */ + +import { + ERR_PROVIDER, + ERR_INVALID_PROVIDER, + ERR_INVALID_CLIENT, + ERR_SUBSCRIPTION, + ERR_WS_PROVIDER, +} from '../error_codes.js'; +import { BaseWeb3Error } from '../web3_error_base.js'; + +export class ProviderError extends BaseWeb3Error { + public code = ERR_PROVIDER; +} + +export class InvalidProviderError extends BaseWeb3Error { + public code = ERR_INVALID_PROVIDER; + + public constructor(public clientUrl: string) { + super(`Provider with url "${clientUrl}" is not set or invalid`); + } +} + +export class InvalidClientError extends BaseWeb3Error { + public code = ERR_INVALID_CLIENT; + + public constructor(clientUrl: string) { + super(`Client URL "${clientUrl}" is invalid.`); + } +} + +export class SubscriptionError extends BaseWeb3Error { + public code = ERR_SUBSCRIPTION; +} + +export class Web3WSProviderError extends BaseWeb3Error { + public code = ERR_WS_PROVIDER; // this had duplicate code with generic provider +} diff --git a/packages/web3-errors/src/errors/response_errors.ts b/packages/web3-errors/src/errors/response_errors.ts new file mode 100644 index 00000000000..95d08b91ad6 --- /dev/null +++ b/packages/web3-errors/src/errors/response_errors.ts @@ -0,0 +1,104 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// eslint-disable-next-line max-classes-per-file +import { + JsonRpcError, + JsonRpcPayload, + JsonRpcResponse, + JsonRpcResponseWithError, +} from 'web3-types'; +import { BaseWeb3Error } from '../web3_error_base.js'; +import { ERR_INVALID_RESPONSE, ERR_RESPONSE } from '../error_codes.js'; + +// To avoid circular package dependency, copied to code here. If you update this please update same function in `json_rpc.ts` +const isResponseWithError = ( + response: JsonRpcResponse, +): response is JsonRpcResponseWithError => + !Array.isArray(response) && + response.jsonrpc === '2.0' && + !!response && + // eslint-disable-next-line no-null/no-null + (response.result === undefined || response.result === null) && + // JSON RPC consider "null" as valid response + 'error' in response && + (typeof response.id === 'number' || typeof response.id === 'string'); + +const buildErrorMessage = (response: JsonRpcResponse): string => + isResponseWithError(response) ? response.error.message : ''; + +export class ResponseError extends BaseWeb3Error { + public code = ERR_RESPONSE; + public data?: ErrorType | ErrorType[]; + public request?: JsonRpcPayload; + + public constructor( + response: JsonRpcResponse, + message?: string, + request?: JsonRpcPayload, + ) { + super( + message ?? + `Returned error: ${ + Array.isArray(response) + ? response.map(r => buildErrorMessage(r)).join(',') + : buildErrorMessage(response) + }`, + ); + + if (!message) { + this.data = Array.isArray(response) + ? response.map(r => r.error?.data as ErrorType) + : response?.error?.data; + } + + this.request = request; + let errorOrErrors: JsonRpcError | JsonRpcError[] | undefined; + if (`error` in response) { + errorOrErrors = response.error as JsonRpcError; + } else if (response instanceof Array) { + errorOrErrors = response.map(r => r.error) as JsonRpcError[]; + } + + this.innerError = errorOrErrors as Error | Error[] | undefined; + } + + public toJSON() { + return { ...super.toJSON(), data: this.data, request: this.request }; + } +} + +export class InvalidResponseError extends ResponseError< + ErrorType, + RequestType +> { + public constructor( + result: JsonRpcResponse, + request?: JsonRpcPayload, + ) { + super(result, undefined, request); + this.code = ERR_INVALID_RESPONSE; + let errorOrErrors: JsonRpcError | JsonRpcError[] | undefined; + if (`error` in result) { + errorOrErrors = result.error as JsonRpcError; + } else if (result instanceof Array) { + errorOrErrors = result.map(r => r.error) as JsonRpcError[]; + } + + this.innerError = errorOrErrors as Error | Error[] | undefined; + } +} diff --git a/packages/web3-errors/src/errors/rpc_error_messages.ts b/packages/web3-errors/src/errors/rpc_error_messages.ts new file mode 100644 index 00000000000..f61c5a41ff0 --- /dev/null +++ b/packages/web3-errors/src/errors/rpc_error_messages.ts @@ -0,0 +1,221 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + ERR_RPC_INTERNAL_ERROR, + ERR_RPC_INVALID_INPUT, + ERR_RPC_INVALID_JSON, + ERR_RPC_INVALID_METHOD, + ERR_RPC_INVALID_PARAMS, + ERR_RPC_INVALID_REQUEST, + ERR_RPC_LIMIT_EXCEEDED, + ERR_RPC_MISSING_RESOURCE, + ERR_RPC_NOT_SUPPORTED, + ERR_RPC_TRANSACTION_REJECTED, + ERR_RPC_UNAVAILABLE_RESOURCE, + ERR_RPC_UNSUPPORTED_METHOD, + JSONRPC_ERR_CHAIN_DISCONNECTED, + JSONRPC_ERR_DISCONNECTED, + JSONRPC_ERR_REJECTED_REQUEST, + JSONRPC_ERR_UNAUTHORIZED, + JSONRPC_ERR_UNSUPPORTED_METHOD, +} from '../error_codes.js'; + +/** + * A template string for a generic Rpc Error. The `*code*` will be replaced with the code number. + * Note: consider in next version that a spelling mistake could be corrected for `occured` and the value could be: + * `An Rpc error has occurred with a code of *code*` + */ +export const genericRpcErrorMessageTemplate = 'An Rpc error has occured with a code of *code*'; + +/* eslint-disable @typescript-eslint/naming-convention */ +export const RpcErrorMessages: { + [key: number | string]: { name?: string; message: string; description?: string }; +} = { + // EIP-1474 & JSON RPC 2.0 + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1474.md + [ERR_RPC_INVALID_JSON]: { + message: 'Parse error', + description: 'Invalid JSON', + }, + [ERR_RPC_INVALID_REQUEST]: { + message: 'Invalid request', + description: 'JSON is not a valid request object ', + }, + [ERR_RPC_INVALID_METHOD]: { + message: 'Method not found', + description: 'Method does not exist ', + }, + [ERR_RPC_INVALID_PARAMS]: { + message: 'Invalid params', + description: 'Invalid method parameters', + }, + [ERR_RPC_INTERNAL_ERROR]: { + message: 'Internal error', + description: 'Internal JSON-RPC error', + }, + + [ERR_RPC_INVALID_INPUT]: { + message: 'Invalid input', + description: 'Missing or invalid parameters', + }, + [ERR_RPC_MISSING_RESOURCE]: { + message: 'Resource not found', + description: 'Requested resource not found', + }, + [ERR_RPC_UNAVAILABLE_RESOURCE]: { + message: 'Resource unavailable', + description: 'Requested resource not available', + }, + [ERR_RPC_TRANSACTION_REJECTED]: { + message: 'Transaction rejected', + description: 'Transaction creation failed', + }, + [ERR_RPC_UNSUPPORTED_METHOD]: { + message: 'Method not supported', + description: 'Method is not implemented', + }, + [ERR_RPC_LIMIT_EXCEEDED]: { + message: 'Limit exceeded', + description: 'Request exceeds defined limit', + }, + [ERR_RPC_NOT_SUPPORTED]: { + message: 'JSON-RPC version not supported', + description: 'Version of JSON-RPC protocol is not supported', + }, + + // EIP-1193 + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md#provider-errors + [JSONRPC_ERR_REJECTED_REQUEST]: { + name: 'User Rejected Request', + message: 'The user rejected the request.', + }, + [JSONRPC_ERR_UNAUTHORIZED]: { + name: 'Unauthorized', + message: 'The requested method and/or account has not been authorized by the user.', + }, + [JSONRPC_ERR_UNSUPPORTED_METHOD]: { + name: 'Unsupported Method', + message: 'The Provider does not support the requested method.', + }, + [JSONRPC_ERR_DISCONNECTED]: { + name: 'Disconnected', + message: 'The Provider is disconnected from all chains.', + }, + [JSONRPC_ERR_CHAIN_DISCONNECTED]: { + name: 'Chain Disconnected', + message: 'The Provider is not connected to the requested chain.', + }, + + // EIP-1193 - CloseEvent + // https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent/code + '0-999': { + name: '', + message: 'Not used.', + }, + 1000: { + name: 'Normal Closure', + message: 'The connection successfully completed the purpose for which it was created.', + }, + 1001: { + name: 'Going Away', + message: + 'The endpoint is going away, either because of a server failure or because the browser is navigating away from the page that opened the connection.', + }, + 1002: { + name: 'Protocol error', + message: 'The endpoint is terminating the connection due to a protocol error.', + }, + 1003: { + name: 'Unsupported Data', + message: + 'The connection is being terminated because the endpoint received data of a type it cannot accept. (For example, a text-only endpoint received binary data.)', + }, + 1004: { + name: 'Reserved', + message: 'Reserved. A meaning might be defined in the future.', + }, + 1005: { + name: 'No Status Rcvd', + message: + 'Reserved. Indicates that no status code was provided even though one was expected.', + }, + 1006: { + name: 'Abnormal Closure', + message: + 'Reserved. Indicates that a connection was closed abnormally (that is, with no close frame being sent) when a status code is expected.', + }, + 1007: { + name: 'Invalid frame payload data', + message: + 'The endpoint is terminating the connection because a message was received that contained inconsistent data (e.g., non-UTF-8 data within a text message).', + }, + 1008: { + name: 'Policy Violation', + message: + 'The endpoint is terminating the connection because it received a message that violates its policy. This is a generic status code, used when codes 1003 and 1009 are not suitable.', + }, + 1009: { + name: 'Message Too Big', + message: + 'The endpoint is terminating the connection because a data frame was received that is too large.', + }, + 1010: { + name: 'Mandatory Ext.', + message: + "The client is terminating the connection because it expected the server to negotiate one or more extension, but the server didn't.", + }, + 1011: { + name: 'Internal Error', + message: + 'The server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request.', + }, + 1012: { + name: 'Service Restart', + message: 'The server is terminating the connection because it is restarting.', + }, + 1013: { + name: 'Try Again Later', + message: + 'The server is terminating the connection due to a temporary condition, e.g. it is overloaded and is casting off some of its clients.', + }, + 1014: { + name: 'Bad Gateway', + message: + 'The server was acting as a gateway or proxy and received an invalid response from the upstream server. This is similar to 502 HTTP Status Code.', + }, + 1015: { + name: 'TLS handshake', + message: + "Reserved. Indicates that the connection was closed due to a failure to perform a TLS handshake (e.g., the server certificate can't be verified).", + }, + '1016-2999': { + name: '', + message: + 'For definition by future revisions of the WebSocket Protocol specification, and for definition by extension specifications.', + }, + '3000-3999': { + name: '', + message: + 'For use by libraries, frameworks, and applications. These status codes are registered directly with IANA. The interpretation of these codes is undefined by the WebSocket protocol.', + }, + '4000-4999': { + name: '', + message: + "For private use, and thus can't be registered. Such codes can be used by prior agreements between WebSocket applications. The interpretation of these codes is undefined by the WebSocket protocol.", + }, +}; diff --git a/packages/web3-errors/src/errors/rpc_errors.ts b/packages/web3-errors/src/errors/rpc_errors.ts new file mode 100644 index 00000000000..d7f7e899e59 --- /dev/null +++ b/packages/web3-errors/src/errors/rpc_errors.ts @@ -0,0 +1,197 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable max-classes-per-file */ + +import { JsonRpcResponseWithError, JsonRpcId, JsonRpcError } from 'web3-types'; +import { BaseWeb3Error } from '../web3_error_base.js'; +import { + ERR_RPC_INTERNAL_ERROR, + ERR_RPC_INVALID_INPUT, + ERR_RPC_INVALID_JSON, + ERR_RPC_INVALID_METHOD, + ERR_RPC_INVALID_PARAMS, + ERR_RPC_INVALID_REQUEST, + ERR_RPC_LIMIT_EXCEEDED, + ERR_RPC_MISSING_RESOURCE, + ERR_RPC_NOT_SUPPORTED, + ERR_RPC_TRANSACTION_REJECTED, + ERR_RPC_UNAVAILABLE_RESOURCE, + ERR_RPC_UNSUPPORTED_METHOD, +} from '../error_codes.js'; +import { RpcErrorMessages, genericRpcErrorMessageTemplate } from './rpc_error_messages.js'; + +export class RpcError extends BaseWeb3Error { + public code: number; + public id: JsonRpcId; + public jsonrpc: string; + public jsonRpcError: JsonRpcError; + public constructor(rpcError: JsonRpcResponseWithError, message?: string) { + super( + message ?? + genericRpcErrorMessageTemplate.replace('*code*', rpcError.error.code.toString()), + ); + this.code = rpcError.error.code; + this.id = rpcError.id; + this.jsonrpc = rpcError.jsonrpc; + this.jsonRpcError = rpcError.error; + } + + public toJSON() { + return { ...super.toJSON(), error: this.jsonRpcError, id: this.id, jsonRpc: this.jsonrpc }; + } +} + +export class EIP1193ProviderRpcError extends BaseWeb3Error { + public code: number; + public data?: unknown; + + public constructor(code: number, data?: unknown) { + if (!code) { + // this case should ideally not happen + super(); + } else if (RpcErrorMessages[code]?.message) { + super(RpcErrorMessages[code].message); + } else { + // Retrieve the status code object for the given code from the table, by searching through the appropriate range + const statusCodeRange = Object.keys(RpcErrorMessages).find( + statusCode => + typeof statusCode === 'string' && + code >= parseInt(statusCode.split('-')[0], 10) && + code <= parseInt(statusCode.split('-')[1], 10), + ); + super( + RpcErrorMessages[statusCodeRange ?? '']?.message ?? + genericRpcErrorMessageTemplate.replace('*code*', code?.toString() ?? '""'), + ); + } + this.code = code; + this.data = data; + } +} + +export class ParseError extends RpcError { + public code = ERR_RPC_INVALID_JSON; + public constructor(rpcError: JsonRpcResponseWithError) { + super(rpcError, RpcErrorMessages[ERR_RPC_INVALID_JSON].message); + } +} + +export class InvalidRequestError extends RpcError { + public code = ERR_RPC_INVALID_REQUEST; + public constructor(rpcError: JsonRpcResponseWithError) { + super(rpcError, RpcErrorMessages[ERR_RPC_INVALID_REQUEST].message); + } +} + +export class MethodNotFoundError extends RpcError { + public code = ERR_RPC_INVALID_METHOD; + public constructor(rpcError: JsonRpcResponseWithError) { + super(rpcError, RpcErrorMessages[ERR_RPC_INVALID_METHOD].message); + } +} + +export class InvalidParamsError extends RpcError { + public code = ERR_RPC_INVALID_PARAMS; + public constructor(rpcError: JsonRpcResponseWithError) { + super(rpcError, RpcErrorMessages[ERR_RPC_INVALID_PARAMS].message); + } +} + +export class InternalError extends RpcError { + public code = ERR_RPC_INTERNAL_ERROR; + public constructor(rpcError: JsonRpcResponseWithError) { + super(rpcError, RpcErrorMessages[ERR_RPC_INTERNAL_ERROR].message); + } +} + +export class InvalidInputError extends RpcError { + public code = ERR_RPC_INVALID_INPUT; + public constructor(rpcError: JsonRpcResponseWithError) { + super(rpcError, RpcErrorMessages[ERR_RPC_INVALID_INPUT].message); + } +} + +export class MethodNotSupported extends RpcError { + public code = ERR_RPC_UNSUPPORTED_METHOD; + public constructor(rpcError: JsonRpcResponseWithError) { + super(rpcError, RpcErrorMessages[ERR_RPC_UNSUPPORTED_METHOD].message); + } +} + +export class ResourceUnavailableError extends RpcError { + public code = ERR_RPC_UNAVAILABLE_RESOURCE; + public constructor(rpcError: JsonRpcResponseWithError) { + super(rpcError, RpcErrorMessages[ERR_RPC_UNAVAILABLE_RESOURCE].message); + } +} + +export class ResourcesNotFoundError extends RpcError { + public code = ERR_RPC_MISSING_RESOURCE; + public constructor(rpcError: JsonRpcResponseWithError) { + super(rpcError, RpcErrorMessages[ERR_RPC_MISSING_RESOURCE].message); + } +} + +export class VersionNotSupportedError extends RpcError { + public code = ERR_RPC_NOT_SUPPORTED; + public constructor(rpcError: JsonRpcResponseWithError) { + super(rpcError, RpcErrorMessages[ERR_RPC_NOT_SUPPORTED].message); + } +} + +export class TransactionRejectedError extends RpcError { + public code = ERR_RPC_TRANSACTION_REJECTED; + public constructor(rpcError: JsonRpcResponseWithError) { + super(rpcError, RpcErrorMessages[ERR_RPC_TRANSACTION_REJECTED].message); + } +} + +export class LimitExceededError extends RpcError { + public code = ERR_RPC_LIMIT_EXCEEDED; + public constructor(rpcError: JsonRpcResponseWithError) { + super(rpcError, RpcErrorMessages[ERR_RPC_LIMIT_EXCEEDED].message); + } +} + +export const rpcErrorsMap = new Map(); +rpcErrorsMap.set(ERR_RPC_INVALID_JSON, { error: ParseError }); +rpcErrorsMap.set(ERR_RPC_INVALID_REQUEST, { + error: InvalidRequestError, +}); +rpcErrorsMap.set(ERR_RPC_INVALID_METHOD, { + error: MethodNotFoundError, +}); +rpcErrorsMap.set(ERR_RPC_INVALID_PARAMS, { error: InvalidParamsError }); +rpcErrorsMap.set(ERR_RPC_INTERNAL_ERROR, { error: InternalError }); +rpcErrorsMap.set(ERR_RPC_INVALID_INPUT, { error: InvalidInputError }); +rpcErrorsMap.set(ERR_RPC_UNSUPPORTED_METHOD, { + error: MethodNotSupported, +}); +rpcErrorsMap.set(ERR_RPC_UNAVAILABLE_RESOURCE, { + error: ResourceUnavailableError, +}); +rpcErrorsMap.set(ERR_RPC_TRANSACTION_REJECTED, { + error: TransactionRejectedError, +}); +rpcErrorsMap.set(ERR_RPC_MISSING_RESOURCE, { + error: ResourcesNotFoundError, +}); +rpcErrorsMap.set(ERR_RPC_NOT_SUPPORTED, { + error: VersionNotSupportedError, +}); +rpcErrorsMap.set(ERR_RPC_LIMIT_EXCEEDED, { error: LimitExceededError }); diff --git a/packages/web3-errors/src/errors/schema_errors.ts b/packages/web3-errors/src/errors/schema_errors.ts new file mode 100644 index 00000000000..4d61684c616 --- /dev/null +++ b/packages/web3-errors/src/errors/schema_errors.ts @@ -0,0 +1,32 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ERR_SCHEMA_FORMAT } from '../error_codes.js'; +import { BaseWeb3Error } from '../web3_error_base.js'; + +export class SchemaFormatError extends BaseWeb3Error { + public code = ERR_SCHEMA_FORMAT; + + public constructor(public type: string) { + super(`Format for the type ${type} is unsupported`); + } + + public toJSON() { + return { ...super.toJSON(), type: this.type }; + } + +} diff --git a/packages/web3-errors/src/errors/signature_errors.ts b/packages/web3-errors/src/errors/signature_errors.ts new file mode 100644 index 00000000000..c5a07173e25 --- /dev/null +++ b/packages/web3-errors/src/errors/signature_errors.ts @@ -0,0 +1,23 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ERR_SIGNATURE_FAILED } from '../error_codes.js'; +import { InvalidValueError } from '../web3_error_base.js'; + +export class SignatureError extends InvalidValueError { + public code = ERR_SIGNATURE_FAILED; +} diff --git a/packages/web3-errors/src/errors/transaction_errors.ts b/packages/web3-errors/src/errors/transaction_errors.ts new file mode 100644 index 00000000000..f8549a3bc57 --- /dev/null +++ b/packages/web3-errors/src/errors/transaction_errors.ts @@ -0,0 +1,589 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable max-classes-per-file */ + +import { + Bytes, + HexString, + Numbers, + TransactionReceipt, + Web3ValidationErrorObject, +} from 'web3-types'; +import { + ERR_RAW_TX_UNDEFINED, + ERR_TX, + ERR_TX_BLOCK_TIMEOUT, + ERR_TX_CONTRACT_NOT_STORED, + ERR_TX_CHAIN_ID_MISMATCH, + ERR_TX_DATA_AND_INPUT, + ERR_TX_GAS_MISMATCH, + ERR_TX_CHAIN_MISMATCH, + ERR_TX_HARDFORK_MISMATCH, + ERR_TX_INVALID_CALL, + ERR_TX_INVALID_CHAIN_INFO, + ERR_TX_INVALID_FEE_MARKET_GAS, + ERR_TX_INVALID_FEE_MARKET_GAS_PRICE, + ERR_TX_INVALID_LEGACY_FEE_MARKET, + ERR_TX_INVALID_LEGACY_GAS, + ERR_TX_INVALID_NONCE_OR_CHAIN_ID, + ERR_TX_INVALID_OBJECT, + ERR_TX_INVALID_SENDER, + ERR_TX_INVALID_RECEIVER, + ERR_TX_LOCAL_WALLET_NOT_AVAILABLE, + ERR_TX_MISSING_CHAIN_INFO, + ERR_TX_MISSING_CUSTOM_CHAIN, + ERR_TX_MISSING_CUSTOM_CHAIN_ID, + ERR_TX_MISSING_GAS, + ERR_TX_NO_CONTRACT_ADDRESS, + ERR_TX_NOT_FOUND, + ERR_TX_OUT_OF_GAS, + ERR_TX_POLLING_TIMEOUT, + ERR_TX_RECEIPT_MISSING_BLOCK_NUMBER, + ERR_TX_RECEIPT_MISSING_OR_BLOCKHASH_NULL, + ERR_TX_REVERT_INSTRUCTION, + ERR_TX_REVERT_TRANSACTION, + ERR_TX_REVERT_WITHOUT_REASON, + ERR_TX_SEND_TIMEOUT, + ERR_TX_SIGNING, + ERR_TX_UNABLE_TO_POPULATE_NONCE, + ERR_TX_UNSUPPORTED_EIP_1559, + ERR_TX_UNSUPPORTED_TYPE, + ERR_TX_REVERT_TRANSACTION_CUSTOM_ERROR, + ERR_TX_INVALID_PROPERTIES_FOR_TYPE, + ERR_TX_MISSING_GAS_INNER_ERROR, + ERR_TX_GAS_MISMATCH_INNER_ERROR, +} from '../error_codes.js'; +import { InvalidValueError, BaseWeb3Error } from '../web3_error_base.js'; + +export class TransactionError extends BaseWeb3Error { + public code = ERR_TX; + + public constructor(message: string, public receipt?: ReceiptType) { + super(message); + } + + public toJSON() { + return { ...super.toJSON(), receipt: this.receipt }; + } +} + +export class RevertInstructionError extends BaseWeb3Error { + public code = ERR_TX_REVERT_INSTRUCTION; + + public constructor(public reason: string, public signature: string) { + super(`Your request got reverted with the following reason string: ${reason}`); + } + + public toJSON() { + return { ...super.toJSON(), reason: this.reason, signature: this.signature }; + } +} + +export class TransactionRevertInstructionError< + ReceiptType = TransactionReceipt, +> extends BaseWeb3Error { + public code = ERR_TX_REVERT_TRANSACTION; + + public constructor( + public reason: string, + public signature?: string, + public receipt?: ReceiptType, + public data?: string, + ) { + super( + `Transaction has been reverted by the EVM${ + receipt === undefined ? '' : `:\n ${BaseWeb3Error.convertToString(receipt)}` + }`, + ); + } + + public toJSON() { + return { + ...super.toJSON(), + reason: this.reason, + signature: this.signature, + receipt: this.receipt, + data: this.data, + }; + } +} + +/** + * This error is used when a transaction to a smart contract fails and + * a custom user error (https://blog.soliditylang.org/2021/04/21/custom-errors/) + * is able to be parsed from the revert reason + */ +export class TransactionRevertWithCustomError< + ReceiptType = TransactionReceipt, +> extends TransactionRevertInstructionError { + public code = ERR_TX_REVERT_TRANSACTION_CUSTOM_ERROR; + + public constructor( + public reason: string, + public customErrorName: string, + public customErrorDecodedSignature: string, + public customErrorArguments: Record, + public signature?: string, + public receipt?: ReceiptType, + public data?: string, + ) { + super(reason); + } + + public toJSON() { + return { + ...super.toJSON(), + reason: this.reason, + customErrorName: this.customErrorName, + customErrorDecodedSignature: this.customErrorDecodedSignature, + customErrorArguments: this.customErrorArguments, + signature: this.signature, + receipt: this.receipt, + data: this.data, + }; + } +} + +export class NoContractAddressFoundError extends TransactionError { + public constructor(receipt: TransactionReceipt) { + super("The transaction receipt didn't contain a contract address.", receipt); + this.code = ERR_TX_NO_CONTRACT_ADDRESS; + } + + public toJSON() { + return { ...super.toJSON(), receipt: this.receipt }; + } +} + +export class ContractCodeNotStoredError extends TransactionError { + public constructor(receipt: TransactionReceipt) { + super("The contract code couldn't be stored, please check your gas limit.", receipt); + this.code = ERR_TX_CONTRACT_NOT_STORED; + } +} + +export class TransactionRevertedWithoutReasonError< + ReceiptType = TransactionReceipt, +> extends TransactionError { + public constructor(receipt?: ReceiptType) { + super( + `Transaction has been reverted by the EVM${ + receipt === undefined ? '' : `:\n ${BaseWeb3Error.convertToString(receipt)}` + }`, + receipt, + ); + this.code = ERR_TX_REVERT_WITHOUT_REASON; + } +} + +export class TransactionOutOfGasError extends TransactionError { + public constructor(receipt: TransactionReceipt) { + super( + `Transaction ran out of gas. Please provide more gas:\n ${JSON.stringify( + receipt, + undefined, + 2, + )}`, + receipt, + ); + this.code = ERR_TX_OUT_OF_GAS; + } +} + +export class UndefinedRawTransactionError extends TransactionError { + public constructor() { + super(`Raw transaction undefined`); + this.code = ERR_RAW_TX_UNDEFINED; + } +} +export class TransactionNotFound extends TransactionError { + public constructor() { + super('Transaction not found'); + this.code = ERR_TX_NOT_FOUND; + } +} + +export class InvalidTransactionWithSender extends InvalidValueError { + public code = ERR_TX_INVALID_SENDER; + + public constructor(value: unknown) { + super(value, 'invalid transaction with invalid sender'); + } +} +export class InvalidTransactionWithReceiver extends InvalidValueError { + public code = ERR_TX_INVALID_RECEIVER; + + public constructor(value: unknown) { + super(value, 'invalid transaction with invalid receiver'); + } +} +export class InvalidTransactionCall extends InvalidValueError { + public code = ERR_TX_INVALID_CALL; + + public constructor(value: unknown) { + super(value, 'invalid transaction call'); + } +} + +export class MissingCustomChainError extends InvalidValueError { + public code = ERR_TX_MISSING_CUSTOM_CHAIN; + + public constructor() { + super( + 'MissingCustomChainError', + 'If tx.common is provided it must have tx.common.customChain', + ); + } +} + +export class MissingCustomChainIdError extends InvalidValueError { + public code = ERR_TX_MISSING_CUSTOM_CHAIN_ID; + + public constructor() { + super( + 'MissingCustomChainIdError', + 'If tx.common is provided it must have tx.common.customChain and tx.common.customChain.chainId', + ); + } +} + +export class ChainIdMismatchError extends InvalidValueError { + public code = ERR_TX_CHAIN_ID_MISMATCH; + + public constructor(value: { txChainId: unknown; customChainId: unknown }) { + super( + JSON.stringify(value), + // https://github.com/ChainSafe/web3.js/blob/8783f4d64e424456bdc53b34ef1142d0a7cee4d7/packages/web3-eth-accounts/src/index.js#L176 + 'Chain Id doesnt match in tx.chainId tx.common.customChain.chainId', + ); + } +} + +export class ChainMismatchError extends InvalidValueError { + public code = ERR_TX_CHAIN_MISMATCH; + + public constructor(value: { txChain: unknown; baseChain: unknown }) { + super(JSON.stringify(value), 'Chain doesnt match in tx.chain tx.common.basechain'); + } +} + +export class HardforkMismatchError extends InvalidValueError { + public code = ERR_TX_HARDFORK_MISMATCH; + + public constructor(value: { txHardfork: unknown; commonHardfork: unknown }) { + super(JSON.stringify(value), 'hardfork doesnt match in tx.hardfork tx.common.hardfork'); + } +} + +export class CommonOrChainAndHardforkError extends InvalidValueError { + public code = ERR_TX_INVALID_CHAIN_INFO; + + public constructor() { + super( + 'CommonOrChainAndHardforkError', + 'Please provide the common object or the chain and hardfork property but not all together.', + ); + } +} + +export class MissingChainOrHardforkError extends InvalidValueError { + public code = ERR_TX_MISSING_CHAIN_INFO; + + public constructor(value: { chain: string | undefined; hardfork: string | undefined }) { + super( + 'MissingChainOrHardforkError', + `When specifying chain and hardfork, both values must be defined. Received "chain": ${ + value.chain ?? 'undefined' + }, "hardfork": ${value.hardfork ?? 'undefined'}`, + ); + } +} + +export class MissingGasInnerError extends BaseWeb3Error { + public code = ERR_TX_MISSING_GAS_INNER_ERROR; + + public constructor() { + super( + 'Missing properties in transaction, either define "gas" and "gasPrice" for type 0 transactions or "gas", "maxPriorityFeePerGas" and "maxFeePerGas" for type 2 transactions', + ); + } +} + +export class MissingGasError extends InvalidValueError { + public code = ERR_TX_MISSING_GAS; + + public constructor(value: { + gas: Numbers | undefined; + gasPrice: Numbers | undefined; + maxPriorityFeePerGas: Numbers | undefined; + maxFeePerGas: Numbers | undefined; + }) { + super( + `gas: ${value.gas ?? 'undefined'}, gasPrice: ${ + value.gasPrice ?? 'undefined' + }, maxPriorityFeePerGas: ${value.maxPriorityFeePerGas ?? 'undefined'}, maxFeePerGas: ${ + value.maxFeePerGas ?? 'undefined' + }`, + '"gas" is missing', + ); + this.innerError = new MissingGasInnerError(); + } +} + +export class TransactionGasMismatchInnerError extends BaseWeb3Error { + public code = ERR_TX_GAS_MISMATCH_INNER_ERROR; + + public constructor() { + super( + 'Missing properties in transaction, either define "gas" and "gasPrice" for type 0 transactions or "gas", "maxPriorityFeePerGas" and "maxFeePerGas" for type 2 transactions, not both', + ); + } +} + +export class TransactionGasMismatchError extends InvalidValueError { + public code = ERR_TX_GAS_MISMATCH; + + public constructor(value: { + gas: Numbers | undefined; + gasPrice: Numbers | undefined; + maxPriorityFeePerGas: Numbers | undefined; + maxFeePerGas: Numbers | undefined; + }) { + super( + `gas: ${value.gas ?? 'undefined'}, gasPrice: ${ + value.gasPrice ?? 'undefined' + }, maxPriorityFeePerGas: ${value.maxPriorityFeePerGas ?? 'undefined'}, maxFeePerGas: ${ + value.maxFeePerGas ?? 'undefined' + }`, + 'transaction must specify legacy or fee market gas properties, not both', + ); + this.innerError = new TransactionGasMismatchInnerError(); + } +} + +export class InvalidGasOrGasPrice extends InvalidValueError { + public code = ERR_TX_INVALID_LEGACY_GAS; + + public constructor(value: { gas: Numbers | undefined; gasPrice: Numbers | undefined }) { + super( + `gas: ${value.gas ?? 'undefined'}, gasPrice: ${value.gasPrice ?? 'undefined'}`, + 'Gas or gasPrice is lower than 0', + ); + } +} + +export class InvalidMaxPriorityFeePerGasOrMaxFeePerGas extends InvalidValueError { + public code = ERR_TX_INVALID_FEE_MARKET_GAS; + + public constructor(value: { + maxPriorityFeePerGas: Numbers | undefined; + maxFeePerGas: Numbers | undefined; + }) { + super( + `maxPriorityFeePerGas: ${value.maxPriorityFeePerGas ?? 'undefined'}, maxFeePerGas: ${ + value.maxFeePerGas ?? 'undefined' + }`, + 'maxPriorityFeePerGas or maxFeePerGas is lower than 0', + ); + } +} + +export class Eip1559GasPriceError extends InvalidValueError { + public code = ERR_TX_INVALID_FEE_MARKET_GAS_PRICE; + + public constructor(value: unknown) { + super(value, "eip-1559 transactions don't support gasPrice"); + } +} + +export class UnsupportedFeeMarketError extends InvalidValueError { + public code = ERR_TX_INVALID_LEGACY_FEE_MARKET; + + public constructor(value: { + maxPriorityFeePerGas: Numbers | undefined; + maxFeePerGas: Numbers | undefined; + }) { + super( + `maxPriorityFeePerGas: ${value.maxPriorityFeePerGas ?? 'undefined'}, maxFeePerGas: ${ + value.maxFeePerGas ?? 'undefined' + }`, + "pre-eip-1559 transaction don't support maxFeePerGas/maxPriorityFeePerGas", + ); + } +} + +export class InvalidTransactionObjectError extends InvalidValueError { + public code = ERR_TX_INVALID_OBJECT; + + public constructor(value: unknown) { + super(value, 'invalid transaction object'); + } +} + +export class InvalidNonceOrChainIdError extends InvalidValueError { + public code = ERR_TX_INVALID_NONCE_OR_CHAIN_ID; + + public constructor(value: { nonce: Numbers | undefined; chainId: Numbers | undefined }) { + super( + `nonce: ${value.nonce ?? 'undefined'}, chainId: ${value.chainId ?? 'undefined'}`, + 'Nonce or chainId is lower than 0', + ); + } +} + +export class UnableToPopulateNonceError extends InvalidValueError { + public code = ERR_TX_UNABLE_TO_POPULATE_NONCE; + + public constructor() { + super('UnableToPopulateNonceError', 'unable to populate nonce, no from address available'); + } +} + +export class Eip1559NotSupportedError extends InvalidValueError { + public code = ERR_TX_UNSUPPORTED_EIP_1559; + + public constructor() { + super('Eip1559NotSupportedError', "Network doesn't support eip-1559"); + } +} + +export class UnsupportedTransactionTypeError extends InvalidValueError { + public code = ERR_TX_UNSUPPORTED_TYPE; + + public constructor(value: unknown) { + super(value, 'unsupported transaction type'); + } +} + +export class TransactionDataAndInputError extends InvalidValueError { + public code = ERR_TX_DATA_AND_INPUT; + + public constructor(value: { data: HexString | undefined; input: HexString | undefined }) { + super( + `data: ${value.data ?? 'undefined'}, input: ${value.input ?? 'undefined'}`, + 'You can\'t have "data" and "input" as properties of transactions at the same time, please use either "data" or "input" instead.', + ); + } +} + +export class TransactionSendTimeoutError extends BaseWeb3Error { + public code = ERR_TX_SEND_TIMEOUT; + + public constructor(value: { numberOfSeconds: number; transactionHash?: Bytes }) { + super( + `The connected Ethereum Node did not respond within ${ + value.numberOfSeconds + } seconds, please make sure your transaction was properly sent and you are connected to a healthy Node. Be aware that transaction might still be pending or mined!\n\tTransaction Hash: ${ + value.transactionHash ? value.transactionHash.toString() : 'not available' + }`, + ); + } +} + +function transactionTimeoutHint(transactionHash?: Bytes) { + return `Please make sure your transaction was properly sent and there no pervious pending transaction for the same account. However, be aware that it might still be mined!\n\tTransaction Hash: ${ + transactionHash ? transactionHash.toString() : 'not available' + }`; +} + +export class TransactionPollingTimeoutError extends BaseWeb3Error { + public code = ERR_TX_POLLING_TIMEOUT; + + public constructor(value: { numberOfSeconds: number; transactionHash: Bytes }) { + super( + `Transaction was not mined within ${ + value.numberOfSeconds + } seconds. ${transactionTimeoutHint(value.transactionHash)}`, + ); + } +} + +export class TransactionBlockTimeoutError extends BaseWeb3Error { + public code = ERR_TX_BLOCK_TIMEOUT; + + public constructor(value: { + starterBlockNumber: number; + numberOfBlocks: number; + transactionHash?: Bytes; + }) { + super( + `Transaction started at ${value.starterBlockNumber} but was not mined within ${ + value.numberOfBlocks + } blocks. ${transactionTimeoutHint(value.transactionHash)}`, + ); + } +} + +export class TransactionMissingReceiptOrBlockHashError extends InvalidValueError { + public code = ERR_TX_RECEIPT_MISSING_OR_BLOCKHASH_NULL; + + public constructor(value: { + receipt: TransactionReceipt; + blockHash: Bytes; + transactionHash: Bytes; + }) { + super( + `receipt: ${JSON.stringify( + value.receipt, + )}, blockHash: ${value.blockHash?.toString()}, transactionHash: ${value.transactionHash?.toString()}`, + `Receipt missing or blockHash null`, + ); + } +} + +export class TransactionReceiptMissingBlockNumberError extends InvalidValueError { + public code = ERR_TX_RECEIPT_MISSING_BLOCK_NUMBER; + + public constructor(value: { receipt: TransactionReceipt }) { + super(`receipt: ${JSON.stringify(value.receipt)}`, `Receipt missing block number`); + } +} + +export class TransactionSigningError extends BaseWeb3Error { + public code = ERR_TX_SIGNING; + public constructor(errorDetails: string) { + super(`Invalid signature. "${errorDetails}"`); + } +} + +export class LocalWalletNotAvailableError extends InvalidValueError { + public code = ERR_TX_LOCAL_WALLET_NOT_AVAILABLE; + + public constructor() { + super( + 'LocalWalletNotAvailableError', + `Attempted to index account in local wallet, but no wallet is available`, + ); + } +} +export class InvalidPropertiesForTransactionTypeError extends BaseWeb3Error { + public code = ERR_TX_INVALID_PROPERTIES_FOR_TYPE; + + public constructor( + validationError: Web3ValidationErrorObject[], + txType: '0x0' | '0x1' | '0x2', + ) { + const invalidPropertyNames: string[] = []; + validationError.forEach(error => invalidPropertyNames.push(error.keyword)); + super( + `The following properties are invalid for the transaction type ${txType}: ${invalidPropertyNames.join( + ', ', + )}`, + ); + } +} diff --git a/packages/web3-errors/src/errors/utils_errors.ts b/packages/web3-errors/src/errors/utils_errors.ts new file mode 100644 index 00000000000..b93ff964f38 --- /dev/null +++ b/packages/web3-errors/src/errors/utils_errors.ts @@ -0,0 +1,148 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable max-classes-per-file */ + +import { + ERR_INVALID_BYTES, + ERR_INVALID_NUMBER, + ERR_INVALID_ADDRESS, + ERR_INVALID_BLOCK, + ERR_INVALID_BOOLEAN, + ERR_INVALID_HEX, + ERR_INVALID_LARGE_VALUE, + ERR_INVALID_NIBBLE_WIDTH, + ERR_INVALID_SIZE, + ERR_INVALID_STRING, + ERR_INVALID_TYPE, + ERR_INVALID_TYPE_ABI, + ERR_INVALID_UNIT, + ERR_INVALID_UNSIGNED_INTEGER, +} from '../error_codes.js'; +import { InvalidValueError } from '../web3_error_base.js'; + +export class InvalidBytesError extends InvalidValueError { + public code = ERR_INVALID_BYTES; + + public constructor(value: unknown) { + super(value, 'can not parse as byte data'); + } +} + +export class InvalidNumberError extends InvalidValueError { + public code = ERR_INVALID_NUMBER; + + public constructor(value: unknown) { + super(value, 'can not parse as number data'); + } +} + +export class InvalidAddressError extends InvalidValueError { + public code = ERR_INVALID_ADDRESS; + + public constructor(value: unknown) { + super(value, 'invalid ethereum address'); + } +} + +export class InvalidStringError extends InvalidValueError { + public code = ERR_INVALID_STRING; + + public constructor(value: unknown) { + super(value, 'not a valid string'); + } +} + +export class InvalidUnitError extends InvalidValueError { + public code = ERR_INVALID_UNIT; + + public constructor(value: unknown) { + super(value, 'invalid unit'); + } +} + +export class HexProcessingError extends InvalidValueError { + public code = ERR_INVALID_HEX; + + public constructor(value: unknown) { + super(value, 'can not be converted to hex'); + } +} + +export class NibbleWidthError extends InvalidValueError { + public code = ERR_INVALID_NIBBLE_WIDTH; + + public constructor(value: string) { + super(value, 'value greater than the nibble width'); + } +} + +export class InvalidTypeError extends InvalidValueError { + public code = ERR_INVALID_TYPE; + + public constructor(value: unknown) { + super(value, 'invalid type, type not supported'); + } +} + +export class InvalidBooleanError extends InvalidValueError { + public code = ERR_INVALID_BOOLEAN; + + public constructor(value: unknown) { + super(value, 'not a valid boolean.'); + } +} + +export class InvalidUnsignedIntegerError extends InvalidValueError { + public code = ERR_INVALID_UNSIGNED_INTEGER; + + public constructor(value: unknown) { + super(value, 'not a valid unsigned integer.'); + } +} + +export class InvalidSizeError extends InvalidValueError { + public code = ERR_INVALID_SIZE; + + public constructor(value: unknown) { + super(value, 'invalid size given.'); + } +} + +export class InvalidLargeValueError extends InvalidValueError { + public code = ERR_INVALID_LARGE_VALUE; + + public constructor(value: unknown) { + super(value, 'value is larger than size.'); + } +} + +export class InvalidBlockError extends InvalidValueError { + public code = ERR_INVALID_BLOCK; + + public constructor(value: string) { + super(value, 'invalid string given'); + } +} + +export class InvalidTypeAbiInputError extends InvalidValueError { + public code = ERR_INVALID_TYPE_ABI; + + public constructor(value: string) { + super(value, 'components found but type is not tuple'); + } +} diff --git a/packages/web3-errors/src/index.ts b/packages/web3-errors/src/index.ts new file mode 100644 index 00000000000..2e4ef7abca6 --- /dev/null +++ b/packages/web3-errors/src/index.ts @@ -0,0 +1,33 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export * from './error_codes.js'; +export * from './web3_error_base.js'; +export * from './errors/account_errors.js'; +export * from './errors/connection_errors.js'; +export * from './errors/contract_errors.js'; +export * from './errors/ens_errors.js'; +export * from './errors/generic_errors.js'; +export * from './errors/provider_errors.js'; +export * from './errors/signature_errors.js'; +export * from './errors/transaction_errors.js'; +export * from './errors/utils_errors.js'; +export * from './errors/response_errors.js'; +export * from './errors/core_errors.js'; +export * from './errors/rpc_errors.js'; +export * from './errors/rpc_error_messages.js'; +export * from './errors/schema_errors.js'; \ No newline at end of file diff --git a/packages/web3-errors/src/web3_error_base.ts b/packages/web3-errors/src/web3_error_base.ts new file mode 100644 index 00000000000..72a6fd01731 --- /dev/null +++ b/packages/web3-errors/src/web3_error_base.ts @@ -0,0 +1,74 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable max-classes-per-file */ + +import { Web3Error } from 'web3-types'; + +export abstract class BaseWeb3Error extends Error implements Web3Error { + public readonly name: string; + public abstract readonly code: number; + public stack: string | undefined; + public innerError: Error | Error[] | undefined; + + public constructor(msg?: string, innerError?: Error | Error[]) { + super(msg); + this.innerError = innerError; + this.name = this.constructor.name; + + if (typeof Error.captureStackTrace === 'function') { + Error.captureStackTrace(new.target.constructor); + } else { + this.stack = new Error().stack; + } + } + + public static convertToString(value: unknown, unquotValue = false) { + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + if (value === null || value === undefined) return 'undefined'; + + const result = JSON.stringify( + value, + (_, v) => (typeof v === 'bigint' ? v.toString() : v) as unknown, + ); + + return unquotValue && ['bigint', 'string'].includes(typeof value) + ? result.replace(/['\\"]+/g, '') + : result; + } + + public toJSON() { + return { + name: this.name, + code: this.code, + message: this.message, + innerError: this.innerError, + }; + } +} + +export abstract class InvalidValueError extends BaseWeb3Error { + public readonly name: string; + + public constructor(value: unknown, msg: string) { + super( + `Invalid value given "${BaseWeb3Error.convertToString(value, true)}". Error: ${msg}.`, + ); + this.name = this.constructor.name; + } +} diff --git a/packages/web3-errors/test/.eslintrc.js b/packages/web3-errors/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-errors/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-errors/test/config/jest.config.js b/packages/web3-errors/test/config/jest.config.js new file mode 120000 index 00000000000..b875b48129d --- /dev/null +++ b/packages/web3-errors/test/config/jest.config.js @@ -0,0 +1 @@ +../../../../templates/jest.config.js.tmpl \ No newline at end of file diff --git a/packages/web3-errors/test/config/setup.js b/packages/web3-errors/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-errors/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-errors/test/fixtures/accounts.json b/packages/web3-errors/test/fixtures/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3-errors/test/fixtures/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3-errors/test/fixtures/errors.ts b/packages/web3-errors/test/fixtures/errors.ts new file mode 100644 index 00000000000..10fb6893788 --- /dev/null +++ b/packages/web3-errors/test/fixtures/errors.ts @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const ConvertValueToString: [unknown, string][] = [ + [BigInt(9007199254740991), '9007199254740991'], + ['Invalid data', 'Invalid data'], + ['0x0', '0x0'], + [0, '0'], + [{ title: 'testObj', id: 1 }, '{"title":"testObj","id":1}'], +]; diff --git a/packages/web3-errors/test/integration/jest.config.js b/packages/web3-errors/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-errors/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-errors/test/integration/setup.js b/packages/web3-errors/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-errors/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-errors/test/tsconfig.json b/packages/web3-errors/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-errors/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-errors/test/unit/__snapshots__/errors.test.ts.snap b/packages/web3-errors/test/unit/__snapshots__/errors.test.ts.snap new file mode 100644 index 00000000000..ab49d6aaa0a --- /dev/null +++ b/packages/web3-errors/test/unit/__snapshots__/errors.test.ts.snap @@ -0,0 +1,420 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`errors ConnectionCloseError should have valid json structure 1`] = ` +Object { + "code": 504, + "errorCode": 10, + "errorReason": "reason", + "innerError": undefined, + "message": "CONNECTION ERROR: The connection got closed with the close code 10 and the following reason string reason", + "name": "ConnectionCloseError", +} +`; + +exports[`errors ConnectionError should have valid json structure 1`] = ` +Object { + "code": 500, + "errorCode": 10, + "errorReason": "reason", + "innerError": undefined, + "message": "error message", + "name": "ConnectionError", +} +`; + +exports[`errors ConnectionNotOpenError should have valid json structure 1`] = ` +Object { + "code": 503, + "errorCode": 10, + "errorReason": "reason", + "innerError": undefined, + "message": "Connection not open", + "name": "ConnectionNotOpenError", +} +`; + +exports[`errors ConnectionTimeoutError should have valid json structure 1`] = ` +Object { + "code": 502, + "duration": 5000, + "errorCode": undefined, + "errorReason": undefined, + "innerError": undefined, + "message": "CONNECTION TIMEOUT: timeout of 5000ms achieved", + "name": "ConnectionTimeoutError", +} +`; + +exports[`errors ContractCodeNotStoredError should have valid json structure 1`] = ` +Object { + "code": 404, + "innerError": undefined, + "message": "The contract code couldn't be stored, please check your gas limit.", + "name": "ContractCodeNotStoredError", + "receipt": Object { + "attr1": "attr1", + }, +} +`; + +exports[`errors ContractEventDoesNotExistError should have valid json structure 1`] = ` +Object { + "code": 304, + "eventName": "eventName", + "innerError": undefined, + "message": "Event \\"eventName\\" doesn't exist in this contract.", + "name": "ContractEventDoesNotExistError", +} +`; + +exports[`errors ContractMissingABIError should have valid json structure 1`] = ` +Object { + "code": 302, + "innerError": undefined, + "message": "You must provide the json interface of the contract when instantiating a contract object.", + "name": "ContractMissingABIError", +} +`; + +exports[`errors ContractMissingDeployDataError should have valid json structure 1`] = ` +Object { + "code": 306, + "innerError": undefined, + "message": "No \\"data\\" specified in neither the given options, nor the default options.", + "name": "ContractMissingDeployDataError", +} +`; + +exports[`errors ContractNoAddressDefinedError should have valid json structure 1`] = ` +Object { + "code": 307, + "innerError": undefined, + "message": "This contract object doesn't have address set yet, please set an address first.", + "name": "ContractNoAddressDefinedError", +} +`; + +exports[`errors ContractNoFromAddressDefinedError should have valid json structure 1`] = ` +Object { + "code": 308, + "innerError": undefined, + "message": "No \\"from\\" address specified in neither the given options, nor the default options.", + "name": "ContractNoFromAddressDefinedError", +} +`; + +exports[`errors ContractOnceRequiresCallbackError should have valid json structure 1`] = ` +Object { + "code": 303, + "innerError": undefined, + "message": "Once requires a callback as the second parameter.", + "name": "ContractOnceRequiresCallbackError", +} +`; + +exports[`errors ContractReservedEventError should have valid json structure 1`] = ` +Object { + "code": 305, + "innerError": undefined, + "message": "Event \\"type\\" doesn't exist in this contract.", + "name": "ContractReservedEventError", + "type": "type", +} +`; + +exports[`errors Eip838ExecutionError should get the data from error.data.data 1`] = ` +Object { + "code": undefined, + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016300000000000000000000000000000000000000000000000000000000000000", + "innerError": [Eip838ExecutionError: Error], + "message": "Error", + "name": "Eip838ExecutionError", +} +`; + +exports[`errors Eip838ExecutionError should get the data from error.data.originalError.data 1`] = ` +Object { + "code": undefined, + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016300000000000000000000000000000000000000000000000000000000000000", + "innerError": [Eip838ExecutionError: Error], + "message": "Error", + "name": "Eip838ExecutionError", +} +`; + +exports[`errors InvalidConnectionError should have valid json structure 1`] = ` +Object { + "code": 501, + "errorCode": 10, + "errorReason": "reason", + "host": "my host", + "innerError": undefined, + "message": "CONNECTION ERROR: Couldn't connect to node my host.", + "name": "InvalidConnectionError", +} +`; + +exports[`errors InvalidNumberOfParamsError should have valid json structure 1`] = ` +Object { + "code": 200, + "expected": 20, + "got": 10, + "innerError": undefined, + "message": "Invalid number of parameters for \\"method\\". Got \\"10\\" expected \\"20\\"!", + "method": "method", + "name": "InvalidNumberOfParamsError", +} +`; + +exports[`errors InvalidPropertiesForTransactionTypeError should have valid json structure 1`] = ` +Object { + "code": 439, + "innerError": undefined, + "message": "The following properties are invalid for the transaction type 0x0: property", + "name": "InvalidPropertiesForTransactionTypeError", +} +`; + +exports[`errors InvalidProviderError should have valid json structure 1`] = ` +Object { + "code": 601, + "innerError": undefined, + "message": "Provider with url \\"my url\\" is not set or invalid", + "name": "InvalidProviderError", +} +`; + +exports[`errors InvalidResponseError should have valid json structure 1`] = ` +Object { + "code": 101, + "data": Object { + "a": "10", + "b": "20", + }, + "innerError": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "message": "Returned error: error message", + "name": "InvalidResponseError", + "request": undefined, +} +`; + +exports[`errors MaxAttemptsReachedOnReconnectingError should have valid json structure 1`] = ` +Object { + "code": 505, + "errorCode": undefined, + "errorReason": undefined, + "innerError": undefined, + "message": "Maximum number of reconnect attempts reached! (5)", + "name": "MaxAttemptsReachedOnReconnectingError", +} +`; + +exports[`errors NoContractAddressFoundError should have valid json structure 1`] = ` +Object { + "code": 403, + "innerError": undefined, + "message": "The transaction receipt didn't contain a contract address.", + "name": "NoContractAddressFoundError", + "receipt": Object { + "attr1": "attr1", + }, +} +`; + +exports[`errors PendingRequestsOnReconnectingError should have valid json structure 1`] = ` +Object { + "code": 506, + "errorCode": undefined, + "errorReason": undefined, + "innerError": undefined, + "message": "CONNECTION ERROR: Provider started to reconnect before the response got received!", + "name": "PendingRequestsOnReconnectingError", +} +`; + +exports[`errors ResolverMethodMissingError should have valid json structure 1`] = ` +Object { + "address": "address", + "code": 301, + "innerError": undefined, + "message": "The resolver at address does not implement requested method: \\"name\\".", + "name": "name", +} +`; + +exports[`errors ResponseError should have valid json structure with data 1`] = ` +Object { + "code": 100, + "data": Object { + "a": "10", + "b": "20", + }, + "innerError": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "message": "Returned error: error message", + "name": "ResponseError", + "request": undefined, +} +`; + +exports[`errors ResponseError should have valid json structure without data 1`] = ` +Object { + "code": 100, + "data": undefined, + "innerError": Object { + "code": 123, + "data": undefined, + "message": "error message", + }, + "message": "Returned error: error message", + "name": "ResponseError", + "request": undefined, +} +`; + +exports[`errors ResponseError should include the array of inner errors 1`] = ` +Object { + "code": 100, + "data": Array [ + Object { + "a": "10", + "b": "20", + }, + Object { + "c": "30", + "d": "40", + }, + ], + "innerError": Array [ + Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + Object { + "code": 124, + "data": Object { + "c": "30", + "d": "40", + }, + "message": "error message", + }, + ], + "message": "Returned error: error message,error message", + "name": "ResponseError", + "request": undefined, +} +`; + +exports[`errors RevertInstructionError should have valid json structure 1`] = ` +Object { + "code": 401, + "innerError": undefined, + "message": "Your request got reverted with the following reason string: message", + "name": "RevertInstructionError", + "reason": "message", + "signature": "signature", +} +`; + +exports[`errors SchemaFormatError should have valid json structure 1`] = ` +Object { + "code": 1200, + "innerError": undefined, + "message": "Format for the type unsupported is unsupported", + "name": "SchemaFormatError", + "type": "unsupported", +} +`; + +exports[`errors TransactionError should have valid json structure 1`] = ` +Object { + "code": 400, + "innerError": undefined, + "message": "message", + "name": "TransactionError", + "receipt": Object { + "attr1": "attr1", + }, +} +`; + +exports[`errors TransactionOutOfGasError should have valid json structure 1`] = ` +Object { + "code": 406, + "innerError": undefined, + "message": "Transaction ran out of gas. Please provide more gas: + { + \\"attr1\\": \\"attr1\\" +}", + "name": "TransactionOutOfGasError", + "receipt": Object { + "attr1": "attr1", + }, +} +`; + +exports[`errors TransactionRevertInstructionError should have valid json structure 1`] = ` +Object { + "code": 402, + "data": undefined, + "innerError": undefined, + "message": "Transaction has been reverted by the EVM: + {\\"attr1\\":\\"attr1\\"}", + "name": "TransactionRevertInstructionError", + "reason": "message", + "receipt": Object { + "attr1": "attr1", + }, + "signature": "signature", +} +`; + +exports[`errors TransactionRevertWithCustomError should have valid json structure 1`] = ` +Object { + "code": 438, + "customErrorArguments": Object { + "customErrorArgument": "customErrorArgument", + }, + "customErrorDecodedSignature": "customErrorDecodedSignature", + "customErrorName": "customErrorName", + "data": "data", + "innerError": undefined, + "message": "Transaction has been reverted by the EVM", + "name": "TransactionRevertWithCustomError", + "reason": "reason", + "receipt": Object { + "attr1": "attr1", + }, + "signature": "signature", +} +`; + +exports[`errors TransactionRevertedWithoutReasonError should have valid json structure 1`] = ` +Object { + "code": 405, + "innerError": undefined, + "message": "Transaction has been reverted by the EVM: + {\\"attr1\\":\\"attr1\\"}", + "name": "TransactionRevertedWithoutReasonError", + "receipt": Object { + "attr1": "attr1", + }, +} +`; diff --git a/packages/web3-errors/test/unit/__snapshots__/rpc-errors.test.ts.snap b/packages/web3-errors/test/unit/__snapshots__/rpc-errors.test.ts.snap new file mode 100644 index 00000000000..93330d6576f --- /dev/null +++ b/packages/web3-errors/test/unit/__snapshots__/rpc-errors.test.ts.snap @@ -0,0 +1,294 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rpc errors EIP1193ProviderRpcError test constructor with a known code (1000) 1`] = ` +Object { + "code": 1000, + "innerError": undefined, + "message": "The connection successfully completed the purpose for which it was created.", + "name": "EIP1193ProviderRpcError", +} +`; + +exports[`rpc errors EIP1193ProviderRpcError test constructor with no code 1`] = ` +Object { + "code": undefined, + "innerError": undefined, + "message": "", + "name": "EIP1193ProviderRpcError", +} +`; + +exports[`rpc errors EIP1193ProviderRpcError test constructor with un registered code 1`] = ` +Object { + "code": 99999, + "innerError": undefined, + "message": "An Rpc error has occured with a code of 99999", + "name": "EIP1193ProviderRpcError", +} +`; + +exports[`rpc errors InternalError test constructor 1`] = ` +Object { + "code": -32603, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "Internal error", + "name": "InternalError", +} +`; + +exports[`rpc errors InvalidInputError test constructor 1`] = ` +Object { + "code": -32000, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "Invalid input", + "name": "InvalidInputError", +} +`; + +exports[`rpc errors InvalidParamsError test constructor 1`] = ` +Object { + "code": -32602, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "Invalid params", + "name": "InvalidParamsError", +} +`; + +exports[`rpc errors InvalidRequestError test constructor 1`] = ` +Object { + "code": -32600, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "Invalid request", + "name": "InvalidRequestError", +} +`; + +exports[`rpc errors LimitExceededError test constructor 1`] = ` +Object { + "code": -32005, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "Limit exceeded", + "name": "LimitExceededError", +} +`; + +exports[`rpc errors MethodNotFoundError test constructor 1`] = ` +Object { + "code": -32601, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "Method not found", + "name": "MethodNotFoundError", +} +`; + +exports[`rpc errors MethodNotSupported test constructor 1`] = ` +Object { + "code": -32004, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "Method not supported", + "name": "MethodNotSupported", +} +`; + +exports[`rpc errors ParseError test constructor 1`] = ` +Object { + "code": -32700, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "Parse error", + "name": "ParseError", +} +`; + +exports[`rpc errors ResourceUnavailableError test constructor 1`] = ` +Object { + "code": -32002, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "Resource unavailable", + "name": "ResourceUnavailableError", +} +`; + +exports[`rpc errors ResourcesNotFoundError test constructor 1`] = ` +Object { + "code": -32001, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "Resource not found", + "name": "ResourcesNotFoundError", +} +`; + +exports[`rpc errors TransactionRejectedError test constructor 1`] = ` +Object { + "code": -32003, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "Transaction rejected", + "name": "TransactionRejectedError", +} +`; + +exports[`rpc errors VersionNotSupportedError test constructor 1`] = ` +Object { + "code": -32006, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "JSON-RPC version not supported", + "name": "VersionNotSupportedError", +} +`; + +exports[`rpc errors rpcErrors.RpcError test constructor 1`] = ` +Object { + "code": 123, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "An Rpc error has occured with a code of 123", + "name": "RpcError", +} +`; + +exports[`rpc errors rpcErrors.RpcError test constructor with custom message 1`] = ` +Object { + "code": 123, + "error": Object { + "code": 123, + "data": Object { + "a": "10", + "b": "20", + }, + "message": "error message", + }, + "id": 1, + "innerError": undefined, + "jsonRpc": "2.0", + "message": "some message", + "name": "RpcError", +} +`; diff --git a/packages/web3-errors/test/unit/errors.test.ts b/packages/web3-errors/test/unit/errors.test.ts new file mode 100644 index 00000000000..7428cc9b6b3 --- /dev/null +++ b/packages/web3-errors/test/unit/errors.test.ts @@ -0,0 +1,393 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { JsonRpcError } from 'web3-types'; +import * as accountErrors from '../../src/errors/account_errors'; +import * as connectionErrors from '../../src/errors/connection_errors'; +import * as contractErrors from '../../src/errors/contract_errors'; +import * as ensErrors from '../../src/errors/ens_errors'; +import * as genericErrors from '../../src/errors/generic_errors'; +import * as providerErrors from '../../src/errors/provider_errors'; +import * as signatureErrors from '../../src/errors/signature_errors'; +import * as transactionErrors from '../../src/errors/transaction_errors'; +import * as utilsErrors from '../../src/errors/utils_errors'; +import * as responseErrors from '../../src/errors/response_errors'; +import * as schemaErrors from '../../src/errors/schema_errors'; + +import { ConvertValueToString } from '../fixtures/errors'; +import { BaseWeb3Error } from '../../src/web3_error_base'; + +describe('errors', () => { + describe('error convertToString', () => { + it.each(ConvertValueToString)('%s', (input, output) => { + expect(BaseWeb3Error.convertToString(input, true)).toEqual(output); + }); + }); + + it('should have unique codes for each error', () => { + const errorCodes: number[] = []; + + for (const ErrorClass of Object.values({ + ...accountErrors, + ...connectionErrors, + ...contractErrors, + ...ensErrors, + ...genericErrors, + ...providerErrors, + ...signatureErrors, + ...transactionErrors, + ...utilsErrors, + ...schemaErrors, + })) { + if (ErrorClass === transactionErrors.InvalidPropertiesForTransactionTypeError) break; + // To disable error for the abstract class + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + const err = new ErrorClass({} as never, {} as never, {} as never, {} as never); + errorCodes.push(err.code); + } + + expect(errorCodes.filter((x, y) => errorCodes.indexOf(x) === y)).toHaveLength( + errorCodes.length, + ); + }); + + describe('InvalidNumberOfParamsError', () => { + it('should have valid json structure', () => { + const got = 10; + const expected = 20; + + expect( + new genericErrors.InvalidNumberOfParamsError(got, expected, 'method').toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('ConnectionError', () => { + it('should have valid json structure', () => { + expect( + new connectionErrors.ConnectionError('error message', { + code: 10, + reason: 'reason', + }).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('InvalidConnectionError', () => { + it('should have valid json structure', () => { + expect( + new connectionErrors.InvalidConnectionError('my host', { + code: 10, + reason: 'reason', + }).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('ConnectionTimeoutError', () => { + it('should have valid json structure', () => { + const timeoutValue = 5000; + + expect( + new connectionErrors.ConnectionTimeoutError(timeoutValue).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('ConnectionNotOpenError', () => { + it('should have valid json structure', () => { + expect( + new connectionErrors.ConnectionNotOpenError({ + code: 10, + reason: 'reason', + }).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('ConnectionCloseError', () => { + it('should have valid json structure', () => { + expect( + new connectionErrors.ConnectionCloseError({ code: 10, reason: 'reason' }).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('MaxAttemptsReachedOnReconnectingError', () => { + it('should have valid json structure', () => { + expect( + new connectionErrors.MaxAttemptsReachedOnReconnectingError(5).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('PendingRequestsOnReconnectingError', () => { + it('should have valid json structure', () => { + expect( + new connectionErrors.PendingRequestsOnReconnectingError().toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('InvalidProviderError', () => { + it('should have valid json structure', () => { + expect(new providerErrors.InvalidProviderError('my url').toJSON()).toMatchSnapshot(); + }); + }); + + describe('TransactionError', () => { + it('should have valid json structure', () => { + expect( + new transactionErrors.TransactionError('message', { attr1: 'attr1' }).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('RevertInstructionError', () => { + it('should have valid json structure', () => { + expect( + new transactionErrors.RevertInstructionError('message', 'signature').toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('TransactionRevertInstructionError', () => { + it('should have valid json structure', () => { + expect( + new transactionErrors.TransactionRevertInstructionError('message', 'signature', { + attr1: 'attr1', + } as any).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('TransactionRevertWithCustomError', () => { + it('should have valid json structure', () => { + expect( + new transactionErrors.TransactionRevertWithCustomError( + 'reason', + 'customErrorName', + 'customErrorDecodedSignature', + { customErrorArgument: 'customErrorArgument' }, + 'signature', + { + attr1: 'attr1', + } as any, + 'data', + ).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('InvalidPropertiesForTransactionTypeError', () => { + it('should have valid json structure', () => { + expect( + new transactionErrors.InvalidPropertiesForTransactionTypeError( + [ + { + keyword: 'property', + instancePath: '', + schemaPath: '', + params: {}, + }, + ], + '0x0', + ).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('NoContractAddressFoundError', () => { + it('should have valid json structure', () => { + expect( + new transactionErrors.NoContractAddressFoundError({ + attr1: 'attr1', + } as any).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('ContractCodeNotStoredError', () => { + it('should have valid json structure', () => { + expect( + new transactionErrors.ContractCodeNotStoredError({ + attr1: 'attr1', + } as any).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('TransactionRevertedWithoutReasonError', () => { + it('should have valid json structure', () => { + expect( + new transactionErrors.TransactionRevertedWithoutReasonError({ + attr1: 'attr1', + } as any).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('TransactionOutOfGasError', () => { + it('should have valid json structure', () => { + expect( + new transactionErrors.TransactionOutOfGasError({ attr1: 'attr1' } as any).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('ResolverMethodMissingError', () => { + it('should have valid json structure', () => { + expect( + new contractErrors.ResolverMethodMissingError('address', 'name').toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('ContractMissingABIError', () => { + it('should have valid json structure', () => { + expect(new contractErrors.ContractMissingABIError().toJSON()).toMatchSnapshot(); + }); + }); + + describe('ContractOnceRequiresCallbackError', () => { + it('should have valid json structure', () => { + expect( + new contractErrors.ContractOnceRequiresCallbackError().toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('ContractEventDoesNotExistError', () => { + it('should have valid json structure', () => { + expect( + new contractErrors.ContractEventDoesNotExistError('eventName').toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('ContractReservedEventError', () => { + it('should have valid json structure', () => { + expect( + new contractErrors.ContractReservedEventError('type').toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('ContractMissingDeployDataError', () => { + it('should have valid json structure', () => { + expect(new contractErrors.ContractMissingDeployDataError().toJSON()).toMatchSnapshot(); + }); + }); + + describe('ContractNoAddressDefinedError', () => { + it('should have valid json structure', () => { + expect(new contractErrors.ContractNoAddressDefinedError().toJSON()).toMatchSnapshot(); + }); + }); + + describe('ContractNoFromAddressDefinedError', () => { + it('should have valid json structure', () => { + expect( + new contractErrors.ContractNoFromAddressDefinedError().toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('Eip838ExecutionError', () => { + it('should get the data from error.data.data', () => { + expect( + new contractErrors.Eip838ExecutionError({ + data: { + data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016300000000000000000000000000000000000000000000000000000000000000', + }, + } as JsonRpcError).toJSON(), + ).toMatchSnapshot(); + }); + it('should get the data from error.data.originalError.data', () => { + expect( + new contractErrors.Eip838ExecutionError({ + data: { + originalError: { + data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016300000000000000000000000000000000000000000000000000000000000000', + }, + }, + } as JsonRpcError).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('ResponseError', () => { + it('should have valid json structure with data', () => { + expect( + new responseErrors.ResponseError({ + id: 1, + jsonrpc: '2.0', + error: { code: 123, message: 'error message', data: { a: '10', b: '20' } }, + }).toJSON(), + ).toMatchSnapshot(); + }); + + it('should have valid json structure without data', () => { + expect( + new responseErrors.ResponseError({ + id: 1, + jsonrpc: '2.0', + error: { code: 123, message: 'error message', data: undefined }, + }).toJSON(), + ).toMatchSnapshot(); + }); + + it('should include the array of inner errors', () => { + expect( + new responseErrors.ResponseError([ + { + id: 1, + jsonrpc: '2.0', + error: { code: 123, message: 'error message', data: { a: '10', b: '20' } }, + }, + { + id: 2, + jsonrpc: '2.0', + error: { code: 124, message: 'error message', data: { c: '30', d: '40' } }, + }, + ]).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('InvalidResponseError', () => { + it('should have valid json structure', () => { + expect( + new responseErrors.InvalidResponseError({ + id: 1, + jsonrpc: '2.0', + error: { code: 123, message: 'error message', data: { a: '10', b: '20' } }, + }).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('SchemaFormatError', () => { + it('should have valid json structure', () => { + expect( + new schemaErrors.SchemaFormatError("unsupported" + ).toJSON(), + ).toMatchSnapshot(); + }); + }); +}); diff --git a/packages/web3-errors/test/unit/jest.config.js b/packages/web3-errors/test/unit/jest.config.js new file mode 100644 index 00000000000..ba9d5b9b33c --- /dev/null +++ b/packages/web3-errors/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-errors-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-errors/test/unit/rpc-errors.test.ts b/packages/web3-errors/test/unit/rpc-errors.test.ts new file mode 100644 index 00000000000..584b9397216 --- /dev/null +++ b/packages/web3-errors/test/unit/rpc-errors.test.ts @@ -0,0 +1,149 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { JsonRpcIdentifier } from 'web3-types'; + +import * as rpcErrors from '../../src/errors/rpc_errors'; +import { RpcErrorMessages } from '../../src/errors/rpc_error_messages'; + +const rpcReturnedError = { + id: 1, + jsonrpc: '2.0' as JsonRpcIdentifier, + error: { code: 123, message: 'error message', data: { a: '10', b: '20' } }, +}; + +describe('rpc errors', () => { + describe('rpcErrorsMap', () => { + it('child RpcError classes should be also mapped inside `rpcErrorsMap`', () => { + expect( + Object.values(rpcErrors).filter( + err => + (err as any).prototype?.constructor?.prototype instanceof + rpcErrors.RpcError, + ), + ).toHaveLength(rpcErrors.rpcErrorsMap.size); + }); + }); + + describe('rpcErrors.RpcError', () => { + it('test constructor', () => { + expect(new rpcErrors.RpcError(rpcReturnedError).toJSON()).toMatchSnapshot(); + }); + it('test constructor with custom message', () => { + expect( + new rpcErrors.RpcError(rpcReturnedError, `some message`).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('EIP1193ProviderRpcError', () => { + it('test constructor with no code', () => { + expect( + new rpcErrors.EIP1193ProviderRpcError(undefined as unknown as number).toJSON(), + ).toMatchSnapshot(); + }); + it('test constructor with a known code (1000)', () => { + const code = 1000; + const error = new rpcErrors.EIP1193ProviderRpcError(code); + expect(error.toJSON()).toMatchSnapshot(); + expect(error.message).toEqual(RpcErrorMessages[code].message); + }); + it('test constructor with un registered code', () => { + expect(new rpcErrors.EIP1193ProviderRpcError(99999).toJSON()).toMatchSnapshot(); + }); + }); + + describe('ParseError', () => { + it('test constructor', () => { + expect(new rpcErrors.ParseError(rpcReturnedError).toJSON()).toMatchSnapshot(); + }); + }); + + describe('InvalidRequestError', () => { + it('test constructor', () => { + expect(new rpcErrors.InvalidRequestError(rpcReturnedError).toJSON()).toMatchSnapshot(); + }); + }); + + describe('MethodNotFoundError', () => { + it('test constructor', () => { + expect(new rpcErrors.MethodNotFoundError(rpcReturnedError).toJSON()).toMatchSnapshot(); + }); + }); + + describe('InvalidParamsError', () => { + it('test constructor', () => { + expect(new rpcErrors.InvalidParamsError(rpcReturnedError).toJSON()).toMatchSnapshot(); + }); + }); + + describe('InternalError', () => { + it('test constructor', () => { + expect(new rpcErrors.InternalError(rpcReturnedError).toJSON()).toMatchSnapshot(); + }); + }); + + describe('InvalidInputError', () => { + it('test constructor', () => { + expect(new rpcErrors.InvalidInputError(rpcReturnedError).toJSON()).toMatchSnapshot(); + }); + }); + + describe('MethodNotSupported', () => { + it('test constructor', () => { + expect(new rpcErrors.MethodNotSupported(rpcReturnedError).toJSON()).toMatchSnapshot(); + }); + }); + + describe('ResourceUnavailableError', () => { + it('test constructor', () => { + expect( + new rpcErrors.ResourceUnavailableError(rpcReturnedError).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('ResourcesNotFoundError', () => { + it('test constructor', () => { + expect( + new rpcErrors.ResourcesNotFoundError(rpcReturnedError).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('VersionNotSupportedError', () => { + it('test constructor', () => { + expect( + new rpcErrors.VersionNotSupportedError(rpcReturnedError).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('TransactionRejectedError', () => { + it('test constructor', () => { + expect( + new rpcErrors.TransactionRejectedError(rpcReturnedError).toJSON(), + ).toMatchSnapshot(); + }); + }); + + describe('LimitExceededError', () => { + it('test constructor', () => { + expect(new rpcErrors.LimitExceededError(rpcReturnedError).toJSON()).toMatchSnapshot(); + }); + }); +}); diff --git a/packages/web3-errors/tsconfig.cjs.json b/packages/web3-errors/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-errors/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-errors/tsconfig.esm.json b/packages/web3-errors/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-errors/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-errors/tsconfig.types.json b/packages/web3-errors/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-errors/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-errors/tsdoc.json b/packages/web3-errors/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-errors/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-eth-abi/.eslintignore b/packages/web3-eth-abi/.eslintignore new file mode 100644 index 00000000000..e3d7e665285 --- /dev/null +++ b/packages/web3-eth-abi/.eslintignore @@ -0,0 +1,4 @@ +dist +lib +jest.config.js +.eslintrc.js diff --git a/packages/web3-eth-abi/.eslintrc.js b/packages/web3-eth-abi/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-eth-abi/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth-abi/.gitignore b/packages/web3-eth-abi/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-eth-abi/.npmignore b/packages/web3-eth-abi/.npmignore new file mode 100644 index 00000000000..0b1a9d71c23 --- /dev/null +++ b/packages/web3-eth-abi/.npmignore @@ -0,0 +1,26 @@ +.babelrc +.eslintignore +.eslintrc.json +.eslintrc.js +.gitignore +.lintstagedrc.json +.nycrc +.prettierrc.json +.prettierignore +cypress.json +index.html +Jenkinsfile* +*.log + +.nyc_output/ +coverage/ +benchmark/ +.coverage/ +cypress/ +fixtures/ +tmp/ +logs/ +test/ +scripts/ +browsertest/ +examples/ diff --git a/packages/web3-eth-abi/.prettierignore b/packages/web3-eth-abi/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-eth-abi/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-abi/.prettierrc.json b/packages/web3-eth-abi/.prettierrc.json new file mode 100644 index 00000000000..7b23ef55098 --- /dev/null +++ b/packages/web3-eth-abi/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": true, + "arrowParens": "avoid" +} diff --git a/packages/web3-eth-abi/CHANGELOG.md b/packages/web3-eth-abi/CHANGELOG.md new file mode 100644 index 00000000000..69c387b19c7 --- /dev/null +++ b/packages/web3-eth-abi/CHANGELOG.md @@ -0,0 +1,157 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [4.0.1-alpha.1] + +### Added + +- If an error happens when decoding a value, preserve that exception at `innerError` inside the error class `AbiError`. (#5435) +- Add basic functionality that is used, by `web3-eth-contract`, when decoding error data according to EIP-838. (#5434) + +### Fixed + +- Return `BigInt` instead of `string` when decoding function parameters for large numbers, such as `uint256`. (#5435) + +## [4.0.1-alpha.2] + +### Changed + +- Updated Web3.js dependencies (#5664) + +### Fixed + +- Fix `ContractMethodOutputParameters` type to support output object types by index and string key. Also, it returns void if ABI doesn't have outputs and returns exactly one type if the output array has only one element. (#5631) + +## [4.0.1-alpha.3] + +### Fixed + +- Parameters decoding error for nested components (#5714) + +### Changed + +- Updated dependencies (#5725) + +## [4.0.1-alpha.4] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +## [4.0.1-alpha.5] + +## [4.0.1-rc.0] + +### Removed + +- Moved all types and interfaces to `web3-types` (#5771) + +### Added + +- `decodeErrorData` from `web3-eth-contract` is now exported from this package and was renamed to `decodeContractErrorData` (#5844) + +## [4.0.1-rc.1] + +### Added + +- Added hybrid build (ESM and CJS) of library (#5904) +- Added source files (#5956) + +### Removed + +- Removed `formatDecodedObject` function (#5934) + +## [4.0.1-rc.2] + +### Changed + +- Nested Smart Contract error data hex string is decoded when the error contains the data as object (when the data hex string is inside data.originalError.data or data.data) (#6045) + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Fixed + +- Support for "decoding" indexed string event arguments (returns the keccak256 hash of the string value instead of the actual string value) (#6167) + +## [4.0.3] + +### Changed + +- Dependencies updated + +## [4.1.0] + +### Added + +- A `getEncodedEip712Data` method that takes an EIP-712 typed data object and returns the encoded data with the option to also keccak256 hash it (#6286) + +## [4.1.1] + +### Changed + +- Dependencies updated + +## [4.1.2] + +### Changed + +- Dependencies updated + +## [4.1.3] + +### Fixed + +- Fix issue with default config with babel (and React): "TypeError: Cannot convert a BigInt value to a number #6187" (#6506) + +## [4.1.4] + +### Fixed + +- Bug fix of `ERR_UNSUPPORTED_DIR_IMPORT` in ABI (#6535) + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-eth-abi/README.md b/packages/web3-eth-abi/README.md index 46deccdc39b..bbeb96bf2c4 100644 --- a/packages/web3-eth-abi/README.md +++ b/packages/web3-eth-abi/README.md @@ -1,39 +1,59 @@ -# web3-eth-abi +

+ web3.js +

-[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +# web3.js - Web3-Eth-Abi -This is a sub-package of [web3.js][repo]. +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] -This is the abi package used in the `web3-eth` package. +This is a sub-package of [web3.js][repo]. -Please read the [documentation][docs] for more. +`web3-eth-abi` contains functions for the encode and decode EVM in/output. ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3-eth-abi) or using [Yarn](https://yarnpkg.com/package/web3-eth-abi) + +### Using NPM ```bash npm install web3-eth-abi ``` -## Usage +### Using Yarn -```js -const Web3EthAbi = require('web3-eth-abi'); - -Web3EthAbi.encodeFunctionSignature('myMethod(uint256,string)'); -> '0x24ee0097' +```bash +yarn add web3-eth-abi ``` -## Types +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts -All the TypeScript typings are placed in the `types` folder. +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-eth-abi.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-eth-abi +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-abi%2Fpackage.json [npm-url]: https://npmjs.org/package/web3-eth-abi -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-eth-abi -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-eth-abi -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-eth-abi -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-eth-abi +[downloads-image]: https://img.shields.io/npm/dm/web3-eth-abi?label=npm%20downloads diff --git a/packages/web3-eth-abi/assets/logo/web3js.ai b/packages/web3-eth-abi/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-eth-abi/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-eth-abi/assets/logo/web3js.jpg b/packages/web3-eth-abi/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-eth-abi/assets/logo/web3js.jpg differ diff --git a/packages/web3-eth-abi/assets/logo/web3js.svg b/packages/web3-eth-abi/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-eth-abi/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-eth-abi/package-lock.json b/packages/web3-eth-abi/package-lock.json deleted file mode 100644 index e374fb36bf6..00000000000 --- a/packages/web3-eth-abi/package-lock.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "web3-eth-abi", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-eth-abi/package.json b/packages/web3-eth-abi/package.json index 34715a32424..c685639c1ac 100644 --- a/packages/web3-eth-abi/package.json +++ b/packages/web3-eth-abi/package.json @@ -1,25 +1,68 @@ { - "name": "web3-eth-abi", - "version": "1.3.0", - "description": "Web3 module encode and decode EVM in/output.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-eth-abi", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "@ethersproject/abi": "5.0.7", - "underscore": "1.9.1", - "web3-utils": "1.3.0" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3-eth-abi", + "version": "4.1.4", + "description": "Web3 module encode and decode EVM in/output.", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ethereum/web3.js/tree/4.x/packages/web3-eth-abi", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests" + }, + "dependencies": { + "abitype": "0.7.1", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + }, + "devDependencies": { + "@humeris/espresso-shot": "^4.0.0", + "@types/jest": "^28.1.6", + "@types/jest-when": "^3.5.2", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "jest-when": "^3.5.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + } } diff --git a/packages/web3-eth-abi/src/api/errors_api.ts b/packages/web3-eth-abi/src/api/errors_api.ts new file mode 100644 index 00000000000..7a6a2bc85ff --- /dev/null +++ b/packages/web3-eth-abi/src/api/errors_api.ts @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { sha3Raw } from 'web3-utils'; +import { AbiError } from 'web3-errors'; +import { AbiErrorFragment } from 'web3-types'; +import { jsonInterfaceMethodToString, isAbiErrorFragment } from '../utils.js'; + +/** + * Encodes the error name to its ABI signature, which are the sha3 hash of the error name including input types. + */ +export const encodeErrorSignature = (functionName: string | AbiErrorFragment): string => { + if (typeof functionName !== 'string' && !isAbiErrorFragment(functionName)) { + throw new AbiError('Invalid parameter value in encodeErrorSignature'); + } + + let name: string; + + if (functionName && (typeof functionName === 'function' || typeof functionName === 'object')) { + name = jsonInterfaceMethodToString(functionName); + } else { + name = functionName; + } + + return sha3Raw(name); +}; diff --git a/packages/web3-eth-abi/src/api/events_api.ts b/packages/web3-eth-abi/src/api/events_api.ts new file mode 100644 index 00000000000..92b38b4afb9 --- /dev/null +++ b/packages/web3-eth-abi/src/api/events_api.ts @@ -0,0 +1,86 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { sha3Raw } from 'web3-utils'; +import { AbiError } from 'web3-errors'; +import { AbiEventFragment } from 'web3-types'; +import { jsonInterfaceMethodToString, isAbiEventFragment } from '../utils.js'; + +/** + * Encodes the event name to its ABI signature, which are the sha3 hash of the event name including input types. + * @param functionName - The event name to encode, or the {@link AbiEventFragment} object of the event. If string, it has to be in the form of `eventName(param1Type,param2Type,...)`. eg: myEvent(uint256,bytes32). + * @returns - The ABI signature of the event. + * + * @example + * ```ts + * const event = web3.eth.abi.encodeEventSignature({ + * name: "myEvent", + * type: "event", + * inputs: [ + * { + * type: "uint256", + * name: "myNumber", + * }, + * { + * type: "bytes32", + * name: "myBytes", + * }, + * ], + * }); + * console.log(event); + * > 0xf2eeb729e636a8cb783be044acf6b7b1e2c5863735b60d6daae84c366ee87d97 + * + * const event = web3.eth.abi.encodeEventSignature({ + * inputs: [ + * { + * indexed: true, + * name: "from", + * type: "address", + * }, + * { + * indexed: true, + * name: "to", + * type: "address", + * }, + * { + * indexed: false, + * name: "value", + * type: "uint256", + * }, + * ], + * name: "Transfer", + * type: "event", + * }); + * console.log(event); + * > 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef + * ``` + */ +export const encodeEventSignature = (functionName: string | AbiEventFragment): string => { + if (typeof functionName !== 'string' && !isAbiEventFragment(functionName)) { + throw new AbiError('Invalid parameter value in encodeEventSignature'); + } + + let name: string; + + if (functionName && (typeof functionName === 'function' || typeof functionName === 'object')) { + name = jsonInterfaceMethodToString(functionName); + } else { + name = functionName; + } + + return sha3Raw(name); +}; diff --git a/packages/web3-eth-abi/src/api/functions_api.ts b/packages/web3-eth-abi/src/api/functions_api.ts new file mode 100644 index 00000000000..0c78c4f5a1f --- /dev/null +++ b/packages/web3-eth-abi/src/api/functions_api.ts @@ -0,0 +1,141 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiError } from 'web3-errors'; +import { sha3Raw } from 'web3-utils'; +import { AbiFunctionFragment } from 'web3-types'; +import { isAbiFunctionFragment, jsonInterfaceMethodToString } from '../utils.js'; +import { encodeParameters } from './parameters_api.js'; + +// todo Add link to JSON interface documentation +/** + * Encodes the function name to its ABI representation, which are the first 4 bytes of the sha3 of the function name including types. + * @param functionName - The function name to encode or the `JSON interface` object of the function. + * If the passed parameter is a string, it has to be in the form of `functionName(param1Type,param2Type,...)`. eg: myFunction(uint256,uint32[],bytes10,bytes) + * @returns - The ABI signature of the function. + * @example + * ```ts + * const signature = web3.eth.abi.encodeFunctionSignature({ + * name: "myMethod", + * type: "function", + * inputs: [ + * { + * type: "uint256", + * name: "myNumber", + * }, + * { + * type: "string", + * name: "myString", + * }, + * ], + * }); + * console.log(signature); + * > 0x24ee0097 + * + * const signature = web3.eth.abi.encodeFunctionSignature('myMethod(uint256,string)') + * console.log(signature); + * > 0x24ee0097 + * + * const signature = web3.eth.abi.encodeFunctionSignature('safeTransferFrom(address,address,uint256,bytes)'); + * console.log(signature); + * > 0xb88d4fde + * ``` + */ +export const encodeFunctionSignature = (functionName: string | AbiFunctionFragment): string => { + if (typeof functionName !== 'string' && !isAbiFunctionFragment(functionName)) { + throw new AbiError('Invalid parameter value in encodeFunctionSignature'); + } + + let name: string; + + if (functionName && (typeof functionName === 'function' || typeof functionName === 'object')) { + name = jsonInterfaceMethodToString(functionName); + } else { + name = functionName; + } + + return sha3Raw(name).slice(0, 10); +}; + +// todo Add link to JSON interface documentation +/** + * Encodes a function call using its `JSON interface` object and given parameters. + * @param jsonInterface - The `JSON interface` object of the function. + * @param params - The parameters to encode + * @returns - The ABI encoded function call, which, means the function signature and the parameters passed. + * @example + * ```ts + * const sig = web3.eth.abi.encodeFunctionCall( + * { + * name: "myMethod", + * type: "function", + * inputs: [ + * { + * type: "uint256", + * name: "myNumber", + * }, + * { + * type: "string", + * name: "myString", + * }, + * ], + * }, + * ["2345675643", "Hello!%"] + * ); + * console.log(sig); + * > 0x24ee0097000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000 + * + * + * + * const sig = web3.eth.abi.encodeFunctionCall( + * { + * inputs: [ + * { + * name: "account", + * type: "address", + * }, + * ], + * name: "balanceOf", + * outputs: [ + * { + * name: "", + * type: "uint256", + * }, + * ], + * stateMutability: "view", + * type: "function", + * }, + * ["0x1234567890123456789012345678901234567890"] + * ); + * + * console.log(sig); + * > 0x70a082310000000000000000000000001234567890123456789012345678901234567890 + * ``` + */ +export const encodeFunctionCall = ( + jsonInterface: AbiFunctionFragment, + params: unknown[], +): string => { + if (!isAbiFunctionFragment(jsonInterface)) { + throw new AbiError('Invalid parameter value in encodeFunctionCall'); + } + + return `${encodeFunctionSignature(jsonInterface)}${encodeParameters( + jsonInterface.inputs ?? [], + params ?? [], + ).replace('0x', '')}`; +}; diff --git a/packages/web3-eth-abi/src/api/logs_api.ts b/packages/web3-eth-abi/src/api/logs_api.ts new file mode 100644 index 00000000000..677a4c50478 --- /dev/null +++ b/packages/web3-eth-abi/src/api/logs_api.ts @@ -0,0 +1,126 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { HexString, AbiParameter, DecodedParams } from 'web3-types'; +import { decodeParameter, decodeParametersWith } from './parameters_api.js'; + +const STATIC_TYPES = ['bool', 'string', 'int', 'uint', 'address', 'fixed', 'ufixed']; + +const _decodeParameter = (inputType: string, clonedTopic: string) => + inputType === 'string' ? clonedTopic : decodeParameter(inputType, clonedTopic); + +/** + * Decodes ABI-encoded log data and indexed topic data. + * @param inputs - A {@link AbiParameter} input array. See the [Solidity documentation](https://docs.soliditylang.org/en/develop/types.html) for a list of types. + * @param data - The ABI byte code in the `data` field of a log. + * @param topics - An array with the index parameter topics of the log, without the topic[0] if its a non-anonymous event, otherwise with topic[0] + * @returns - The result object containing the decoded parameters. + * + * @example + * ```ts + * let res = web3.eth.abi.decodeLog( + * [ + * { + * type: "string", + * name: "myString", + * }, + * { + * type: "uint256", + * name: "myNumber", + * indexed: true, + * }, + * { + * type: "uint8", + * name: "mySmallNumber", + * indexed: true, + * }, + * ], + * "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000748656c6c6f252100000000000000000000000000000000000000000000000000", + * [ + * "0x000000000000000000000000000000000000000000000000000000000000f310", + * "0x0000000000000000000000000000000000000000000000000000000000000010", + * ] + * ); + * > { + * '0': 'Hello%!', + * '1': 62224n, + * '2': 16n, + * __length__: 3, + * myString: 'Hello%!', + * myNumber: 62224n, + * mySmallNumber: 16n + * } + * ``` + */ +export const decodeLog = ( + inputs: Array, + data: HexString, + topics: string | string[], +) => { + const clonedTopics = Array.isArray(topics) ? topics : [topics]; + + const indexedInputs: Record = {}; + const nonIndexedInputs: Record = {}; + + for (const [i, input] of inputs.entries()) { + if (input.indexed) { + indexedInputs[i] = input; + } else { + nonIndexedInputs[i] = input; + } + } + + const decodedNonIndexedInputs: DecodedParams = data + ? decodeParametersWith(Object.values(nonIndexedInputs), data, true) + : { __length__: 0 }; + + // If topics are more than indexed inputs, that means first topic is the event signature + const offset = clonedTopics.length - Object.keys(indexedInputs).length; + + const decodedIndexedInputs = Object.values(indexedInputs).map((input, index) => + STATIC_TYPES.some(s => input.type.startsWith(s)) + ? _decodeParameter(input.type, clonedTopics[index + offset]) + : clonedTopics[index + offset], + ); + + const returnValues: DecodedParams = { __length__: 0 }; + + let indexedCounter = 0; + let nonIndexedCounter = 0; + + for (const [i, res] of inputs.entries()) { + returnValues[i] = res.type === 'string' ? '' : undefined; + + if (indexedInputs[i]) { + returnValues[i] = decodedIndexedInputs[indexedCounter]; + indexedCounter += 1; + } + + if (nonIndexedInputs[i]) { + returnValues[i] = decodedNonIndexedInputs[String(nonIndexedCounter)]; + nonIndexedCounter += 1; + } + + if (res.name) { + returnValues[res.name] = returnValues[i]; + } + + returnValues.__length__ += 1; + } + + return returnValues as ReturnType; +}; diff --git a/packages/web3-eth-abi/src/api/parameters_api.ts b/packages/web3-eth-abi/src/api/parameters_api.ts new file mode 100644 index 00000000000..98624b20daa --- /dev/null +++ b/packages/web3-eth-abi/src/api/parameters_api.ts @@ -0,0 +1,298 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AbiError } from 'web3-errors'; +import { AbiInput, HexString } from 'web3-types'; +import { decodeParameters as decodeParametersInternal } from '../coders/decode.js'; +import { encodeParameters as encodeParametersInternal } from '../coders/encode.js'; + +/** + * Encodes a parameter based on its type to its ABI representation. + * @param abi - An array of {@link AbiInput}. See [Solidity's documentation](https://solidity.readthedocs.io/en/v0.5.3/abi-spec.html#json) for more details. + * @param params - The actual parameters to encode. + * @returns - The ABI encoded parameters + * @example + * ```ts + * const res = web3.eth.abi.encodeParameters( + * ["uint256", "string"], + * ["2345675643", "Hello!%"] + * ); + * + * console.log(res); + * > 0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000 + * ``` + */ +export const encodeParameters = (abi: ReadonlyArray, params: unknown[]): string => + encodeParametersInternal(abi, params); + +/** + * Encodes a parameter based on its type to its ABI representation. + * @param abi - The type of the parameter. See the [Solidity documentation](https://docs.soliditylang.org/en/develop/types.html) for a list of types. + * @param param - The actual parameter to encode. + * @returns - The ABI encoded parameter + * @example + * ```ts + * const res = web3.eth.abi.encodeParameter("uint256", "2345675643"); + * console.log(res); + * 0x000000000000000000000000000000000000000000000000000000008bd02b7b + * + * const res = web3.eth.abi.encodeParameter("uint", "2345675643"); + * + * console.log(res); + * >0x000000000000000000000000000000000000000000000000000000008bd02b7b + * + * const res = web3.eth.abi.encodeParameter("bytes32", "0xdf3234"); + * + * console.log(res); + * >0xdf32340000000000000000000000000000000000000000000000000000000000 + * + * const res = web3.eth.abi.encodeParameter("bytes", "0xdf3234"); + * + * console.log(res); + * > 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003df32340000000000000000000000000000000000000000000000000000000000 + * + * const res = web3.eth.abi.encodeParameter("bytes32[]", ["0xdf3234", "0xfdfd"]); + * + * console.log(res); + * > 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002df32340000000000000000000000000000000000000000000000000000000000fdfd000000000000000000000000000000000000000000000000000000000000 + * + * const res = web3.eth.abi.encodeParameter( + * { + * ParentStruct: { + * propertyOne: "uint256", + * propertyTwo: "uint256", + * childStruct: { + * propertyOne: "uint256", + * propertyTwo: "uint256", + * }, + * }, + * }, + * { + * propertyOne: 42, + * propertyTwo: 56, + * childStruct: { + * propertyOne: 45, + * propertyTwo: 78, + * }, + * } + * ); + * + * console.log(res); + * > 0x000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004e + * ``` + */ +export const encodeParameter = (abi: AbiInput, param: unknown): string => + encodeParameters([abi], [param]); +/** + * Should be used to decode list of params + */ +export const decodeParametersWith = ( + abis: AbiInput[], + bytes: HexString, + loose: boolean, +): { [key: string]: unknown; __length__: number } => { + try { + if (abis.length > 0 && (!bytes || bytes === '0x' || bytes === '0X')) { + throw new AbiError( + "Returned values aren't valid, did it run Out of Gas? " + + 'You might also see this error if you are not using the ' + + 'correct ABI for the contract you are retrieving data from, ' + + 'requesting data from a block number that does not exist, ' + + 'or querying a node which is not fully synced.', + ); + } + return decodeParametersInternal(abis, `0x${bytes.replace(/0x/i, '')}`, loose); + } catch (err) { + throw new AbiError(`Parameter decoding error: ${(err as Error).message}`, { + internalErr: err, + }); + } +}; + +/** + * Should be used to decode list of params + */ +/** + * Decodes ABI encoded parameters to its JavaScript types. + * @param abi - An array of {@link AbiInput}. See the [Solidity documentation](https://docs.soliditylang.org/en/develop/types.html) for a list of types. + * @param bytes - The ABI byte code to decode + * @returns - The result object containing the decoded parameters. + * @example + * ```ts + * let res = web3.eth.abi.decodeParameters( + * ["string", "uint256"], + * "0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000ea000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000" + * ); + * console.log(res); + * > { '0': 'Hello!%!', '1': 234n, __length__: 2 } + * + * let res = web3.eth.abi.decodeParameters( + * [ + * { + * type: "string", + * name: "myString", + * }, + * { + * type: "uint256", + * name: "myNumber", + * }, + * ], + * "0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000ea000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000" + * ); + * console.log(res); + * > { + * '0': 'Hello!%!', + * '1': 234n, + * __length__: 2, + * myString: 'Hello!%!', + * myNumber: 234n + * } + * + * const res = web3.eth.abi.decodeParameters( + * [ + * "uint8[]", + * { + * ParentStruct: { + * propertyOne: "uint256", + * propertyTwo: "uint256", + * childStruct: { + * propertyOne: "uint256", + * propertyTwo: "uint256", + * }, + * }, + * }, + * ], + * "0x00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000018" + * ); + * console.log(res); + * > + * '0': [ 42n, 24n ], + * '1': { + * '0': 42n, + * '1': 56n, + * '2': { + * '0': 45n, + * '1': 78n, + * __length__: 2, + * propertyOne: 45n, + * propertyTwo: 78n + * }, + * __length__: 3, + * propertyOne: 42n, + * propertyTwo: 56n, + * childStruct: { + * '0': 45n, + * '1': 78n, + * __length__: 2, + * propertyOne: 45n, + * propertyTwo: 78n + * } + * }, + * __length__: 2, + * ParentStruct: { + * '0': 42n, + * '1': 56n, + * '2': { + * '0': 45n, + * '1': 78n, + * __length__: 2, + * propertyOne: 45n, + * propertyTwo: 78n + * }, + * __length__: 3, + * propertyOne: 42n, + * propertyTwo: 56n, + * childStruct: { + * '0': 45n, + * '1': 78n, + * __length__: 2, + * propertyOne: 45n, + * propertyTwo: 78n + * } + * } + *} + * ``` + */ +export const decodeParameters = ( + abi: AbiInput[], + bytes: HexString, +): { [key: string]: unknown; __length__: number } => decodeParametersWith(abi, bytes, false); + +/** + * Should be used to decode bytes to plain param + */ +/** + * Decodes an ABI encoded parameter to its JavaScript type. + * @param abi - The type of the parameter. See the [Solidity documentation](https://docs.soliditylang.org/en/develop/types.html) for a list of types. + * @param bytes - The ABI byte code to decode + * @returns - The decoded parameter + * @example + * ```ts + * const res = web3.eth.abi.decodeParameter( + * "uint256", + * "0x0000000000000000000000000000000000000000000000000000000000000010" + * ); + * console.log(res); + * > 16n + * + * const res = web3.eth.abi.decodeParameter( + * "string", + * "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000" + * ); + * + * console.log(res); + * > Hello!%! + * + * const res = web3.eth.abi.decodeParameter( + * { + * ParentStruct: { + * propertyOne: "uint256", + * propertyTwo: "uint256", + * childStruct: { + * propertyOne: "uint256", + * propertyTwo: "uint256", + * }, + * }, + * }, + * "0x000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004e" + * ); + * + * console.log(res); + * { + * '0': 42n, + * '1': 56n, + * '2': { + * '0': 45n, + * '1': 78n, + * __length__: 2, + * propertyOne: 45n, + * propertyTwo: 78n + * }, + * __length__: 3, + * propertyOne: 42n, + * propertyTwo: 56n, + * childStruct: { + * '0': 45n, + * '1': 78n, + * __length__: 2, + * propertyOne: 45n, + * propertyTwo: 78n + * } + *} + * ``` + */ +export const decodeParameter = (abi: AbiInput, bytes: HexString): unknown => + decodeParameters([abi], bytes)['0']; diff --git a/packages/web3-eth-abi/src/coders/base/address.ts b/packages/web3-eth-abi/src/coders/base/address.ts new file mode 100644 index 00000000000..ae63744ebe3 --- /dev/null +++ b/packages/web3-eth-abi/src/coders/base/address.ts @@ -0,0 +1,75 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AbiError } from 'web3-errors'; +import { AbiParameter } from 'web3-types'; +import { toChecksumAddress } from 'web3-utils'; +import { isAddress, utils } from 'web3-validator'; +import { DecoderResult, EncoderResult } from '../types.js'; +import { alloc, WORD_SIZE } from '../utils.js'; + +const ADDRESS_BYTES_COUNT = 20; +const ADDRESS_OFFSET = WORD_SIZE - ADDRESS_BYTES_COUNT; + +export function encodeAddress(param: AbiParameter, input: unknown): EncoderResult { + if (typeof input !== 'string') { + throw new AbiError('address type expects string as input type', { + value: input, + name: param.name, + type: param.type, + }); + } + let address = input.toLowerCase(); + if (!address.startsWith('0x')) { + address = `0x${address}`; + } + if (!isAddress(address)) { + throw new AbiError('provided input is not valid address', { + value: input, + name: param.name, + type: param.type, + }); + } + // for better performance, we could convert hex to destination bytes directly (encoded var) + const addressBytes = utils.hexToUint8Array(address); + // expand address to WORD_SIZE + const encoded = alloc(WORD_SIZE); + encoded.set(addressBytes, ADDRESS_OFFSET); + return { + dynamic: false, + encoded, + }; +} + +export function decodeAddress(_param: AbiParameter, bytes: Uint8Array): DecoderResult { + const addressBytes = bytes.subarray(ADDRESS_OFFSET, WORD_SIZE); + if (addressBytes.length !== ADDRESS_BYTES_COUNT) { + throw new AbiError('Invalid decoding input, not enough bytes to decode address', { bytes }); + } + const result = utils.uint8ArrayToHexString(addressBytes); + + // should we check is decoded value is valid address? + // if(!isAddress(result)) { + // throw new AbiError("encoded data is not valid address", { + // address: result, + // }); + // } + return { + result: toChecksumAddress(result), + encoded: bytes.subarray(WORD_SIZE), + consumed: WORD_SIZE, + }; +} diff --git a/packages/web3-eth-abi/src/coders/base/array.ts b/packages/web3-eth-abi/src/coders/base/array.ts new file mode 100644 index 00000000000..0c23ac4e287 --- /dev/null +++ b/packages/web3-eth-abi/src/coders/base/array.ts @@ -0,0 +1,120 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AbiError } from 'web3-errors'; +import { AbiParameter } from 'web3-types'; +import { uint8ArrayConcat } from 'web3-utils'; +// eslint-disable-next-line import/no-cycle +import { decodeParamFromAbiParameter, encodeNumber, encodeParamFromAbiParameter } from './index.js'; +import { DecoderResult, EncoderResult } from '../types.js'; +import { extractArrayType, isDynamic, WORD_SIZE } from '../utils.js'; +import { decodeNumber } from './number.js'; +import { encodeDynamicParams } from './utils.js'; + +export function encodeArray(param: AbiParameter, values: unknown): EncoderResult { + if (!Array.isArray(values)) { + throw new AbiError('Expected value to be array', { abi: param, values }); + } + const { size, param: arrayItemParam } = extractArrayType(param); + const encodedParams = values.map(v => encodeParamFromAbiParameter(arrayItemParam, v)); + const dynamic = size === -1; + const dynamicItems = encodedParams.length > 0 && encodedParams[0].dynamic; + if (!dynamic && values.length !== size) { + throw new AbiError("Given arguments count doesn't match array length", { + arrayLength: size, + argumentsLength: values.length, + }); + } + if (dynamic || dynamicItems) { + const encodingResult = encodeDynamicParams(encodedParams); + if (dynamic) { + const encodedLength = encodeNumber( + { type: 'uint256', name: '' }, + encodedParams.length, + ).encoded; + return { + dynamic: true, + encoded: + encodedParams.length > 0 + ? uint8ArrayConcat(encodedLength, encodingResult) + : encodedLength, + }; + } + return { + dynamic: true, + encoded: encodingResult, + }; + } + + return { + dynamic: false, + encoded: uint8ArrayConcat(...encodedParams.map(p => p.encoded)), + }; +} + +export function decodeArray(param: AbiParameter, bytes: Uint8Array): DecoderResult { + // eslint-disable-next-line prefer-const + let { size, param: arrayItemParam } = extractArrayType(param); + const dynamic = size === -1; + + let consumed = 0; + const result: unknown[] = []; + let remaining = bytes; + // dynamic array, we need to decode length + if (dynamic) { + const lengthResult = decodeNumber({ type: 'uint32', name: '' }, bytes); + size = Number(lengthResult.result); + consumed = lengthResult.consumed; + remaining = lengthResult.encoded; + } + const hasDynamicChild = isDynamic(arrayItemParam); + if (hasDynamicChild) { + // known length but dynamic child, each child is actually head element with encoded offset + for (let i = 0; i < size; i += 1) { + const offsetResult = decodeNumber( + { type: 'uint32', name: '' }, + remaining.subarray(i * WORD_SIZE), + ); + consumed += offsetResult.consumed; + const decodedChildResult = decodeParamFromAbiParameter( + arrayItemParam, + remaining.subarray(Number(offsetResult.result)), + ); + consumed += decodedChildResult.consumed; + result.push(decodedChildResult.result); + } + return { + result, + encoded: remaining.subarray(consumed), + consumed, + }; + } + + for (let i = 0; i < size; i += 1) { + // decode static params + const decodedChildResult = decodeParamFromAbiParameter( + arrayItemParam, + bytes.subarray(consumed), + ); + consumed += decodedChildResult.consumed; + result.push(decodedChildResult.result); + } + return { + result, + encoded: bytes.subarray(consumed), + consumed, + }; +} diff --git a/packages/web3-eth-abi/src/coders/base/bool.ts b/packages/web3-eth-abi/src/coders/base/bool.ts new file mode 100644 index 00000000000..af0b95dcfe7 --- /dev/null +++ b/packages/web3-eth-abi/src/coders/base/bool.ts @@ -0,0 +1,54 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AbiError, InvalidBooleanError } from 'web3-errors'; +import { AbiParameter } from 'web3-types'; +import { toBool } from 'web3-utils'; +import { DecoderResult, EncoderResult } from '../types.js'; +import { WORD_SIZE } from '../utils.js'; +import { decodeNumber, encodeNumber } from './number.js'; + +export function encodeBoolean(param: AbiParameter, input: unknown): EncoderResult { + let value; + try { + value = toBool(input); + } catch (e) { + if (e instanceof InvalidBooleanError) { + throw new AbiError('provided input is not valid boolean value', { + type: param.type, + value: input, + name: param.name, + }); + } + } + + return encodeNumber({ type: 'uint8', name: '' }, Number(value)); +} + +export function decodeBool(_param: AbiParameter, bytes: Uint8Array): DecoderResult { + const numberResult = decodeNumber({ type: 'uint8', name: '' }, bytes); + if (numberResult.result > 1 || numberResult.result < 0) { + throw new AbiError('Invalid boolean value encoded', { + boolBytes: bytes.subarray(0, WORD_SIZE), + numberResult, + }); + } + return { + result: numberResult.result === BigInt(1), + encoded: numberResult.encoded, + consumed: WORD_SIZE, + }; +} diff --git a/packages/web3-eth-abi/src/coders/base/bytes.ts b/packages/web3-eth-abi/src/coders/base/bytes.ts new file mode 100644 index 00000000000..714abbfdbd2 --- /dev/null +++ b/packages/web3-eth-abi/src/coders/base/bytes.ts @@ -0,0 +1,106 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AbiError } from 'web3-errors'; +import { AbiParameter, Bytes } from 'web3-types'; +import { bytesToHex, bytesToUint8Array } from 'web3-utils'; +import { isBytes, ValidInputTypes } from 'web3-validator'; +import { DecoderResult, EncoderResult } from '../types.js'; +import { alloc, WORD_SIZE } from '../utils.js'; +import { decodeNumber, encodeNumber } from './number.js'; + +const MAX_STATIC_BYTES_COUNT = 32; + +export function encodeBytes(param: AbiParameter, input: unknown): EncoderResult { + // hack for odd length hex strings + if (typeof input === 'string' && input.length % 2 !== 0) { + // eslint-disable-next-line no-param-reassign + input += '0'; + } + if (!isBytes(input as ValidInputTypes)) { + throw new AbiError('provided input is not valid bytes value', { + type: param.type, + value: input, + name: param.name, + }); + } + const bytes = bytesToUint8Array(input as Bytes); + const [, size] = param.type.split('bytes'); + // fixed size + if (size) { + if (Number(size) > MAX_STATIC_BYTES_COUNT || Number(size) < 1) { + throw new AbiError( + 'invalid bytes type. Static byte type can have between 1 and 32 bytes', + { + type: param.type, + }, + ); + } + if (Number(size) < bytes.length) { + throw new AbiError('provided input size is different than type size', { + type: param.type, + value: input, + name: param.name, + }); + } + const encoded = alloc(WORD_SIZE); + encoded.set(bytes); + return { + dynamic: false, + encoded, + }; + } + + const partsLength = Math.ceil(bytes.length / WORD_SIZE); + // one word for length of data + WORD for each part of actual data + const encoded = alloc(WORD_SIZE + partsLength * WORD_SIZE); + + encoded.set(encodeNumber({ type: 'uint32', name: '' }, bytes.length).encoded); + encoded.set(bytes, WORD_SIZE); + return { + dynamic: true, + encoded, + }; +} + +export function decodeBytes(param: AbiParameter, bytes: Uint8Array): DecoderResult { + const [, sizeString] = param.type.split('bytes'); + let size = Number(sizeString); + let remainingBytes = bytes; + let partsCount = 1; + let consumed = 0; + if (!size) { + // dynamic bytes + const result = decodeNumber({ type: 'uint32', name: '' }, remainingBytes); + size = Number(result.result); + consumed += result.consumed; + remainingBytes = result.encoded; + partsCount = Math.ceil(size / WORD_SIZE); + } + if (size > bytes.length) { + throw new AbiError('there is not enough data to decode', { + type: param.type, + encoded: bytes, + size, + }); + } + + return { + result: bytesToHex(remainingBytes.subarray(0, size)), + encoded: remainingBytes.subarray(partsCount * WORD_SIZE), + consumed: consumed + partsCount * WORD_SIZE, + }; +} diff --git a/packages/web3-eth-abi/src/coders/base/index.ts b/packages/web3-eth-abi/src/coders/base/index.ts new file mode 100644 index 00000000000..007d31e98a4 --- /dev/null +++ b/packages/web3-eth-abi/src/coders/base/index.ts @@ -0,0 +1,88 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiParameter } from 'web3-types'; +import { EncoderResult, DecoderResult } from '../types.js'; +import { decodeAddress, encodeAddress } from './address.js'; +import { decodeBool, encodeBoolean } from './bool.js'; +import { decodeBytes, encodeBytes } from './bytes.js'; +import { decodeNumber, encodeNumber } from './number.js'; +import { decodeString, encodeString } from './string.js'; +// eslint-disable-next-line import/no-cycle +import { decodeTuple, encodeTuple } from './tuple.js'; +// eslint-disable-next-line import/no-cycle +import { decodeArray, encodeArray } from './array.js'; + +export { encodeAddress, decodeAddress } from './address.js'; +export { encodeBoolean, decodeBool } from './bool.js'; +export { encodeBytes, decodeBytes } from './bytes.js'; +export { encodeNumber, decodeNumber } from './number.js'; +export { encodeString, decodeString } from './string.js'; +// eslint-disable-next-line import/no-cycle +export { encodeTuple, decodeTuple } from './tuple.js'; +// eslint-disable-next-line import/no-cycle +export { encodeArray, decodeArray } from './array.js'; + +export function encodeParamFromAbiParameter(param: AbiParameter, value: unknown): EncoderResult { + if (param.type === 'string') { + return encodeString(param, value); + } + if (param.type === 'bool') { + return encodeBoolean(param, value); + } + if (param.type === 'address') { + return encodeAddress(param, value); + } + if (param.type === 'tuple') { + return encodeTuple(param, value); + } + if (param.type.endsWith(']')) { + return encodeArray(param, value); + } + if (param.type.startsWith('bytes')) { + return encodeBytes(param, value); + } + if (param.type.startsWith('uint') || param.type.startsWith('int')) { + return encodeNumber(param, value); + } + throw new Error('Unsupported'); +} + +export function decodeParamFromAbiParameter(param: AbiParameter, bytes: Uint8Array): DecoderResult { + if (param.type === 'string') { + return decodeString(param, bytes); + } + if (param.type === 'bool') { + return decodeBool(param, bytes); + } + if (param.type === 'address') { + return decodeAddress(param, bytes); + } + if (param.type === 'tuple') { + return decodeTuple(param, bytes); + } + if (param.type.endsWith(']')) { + return decodeArray(param, bytes); + } + if (param.type.startsWith('bytes')) { + return decodeBytes(param, bytes); + } + if (param.type.startsWith('uint') || param.type.startsWith('int')) { + return decodeNumber(param, bytes); + } + throw new Error('Unsupported'); +} diff --git a/packages/web3-eth-abi/src/coders/base/number.ts b/packages/web3-eth-abi/src/coders/base/number.ts new file mode 100644 index 00000000000..a86ee4f6acd --- /dev/null +++ b/packages/web3-eth-abi/src/coders/base/number.ts @@ -0,0 +1,116 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiError } from 'web3-errors'; +import type { AbiParameter } from 'web3-types'; +import { padLeft, toBigInt } from 'web3-utils'; +import { utils } from 'web3-validator'; +import { DecoderResult, EncoderResult } from '../types.js'; +import { WORD_SIZE } from '../utils.js'; +import { numberLimits } from './numbersLimits.js'; + +// eslint-disable-next-line no-bitwise +const mask = BigInt(1) << BigInt(256); + +function bigIntToUint8Array(value: bigint, byteLength = WORD_SIZE): Uint8Array { + let hexValue; + if (value < 0) { + hexValue = (mask + value).toString(16); + } else { + hexValue = value.toString(16); + } + hexValue = padLeft(hexValue, byteLength * 2); + return utils.hexToUint8Array(hexValue); +} + +function uint8ArrayToBigInt(value: Uint8Array, max: bigint): bigint { + const hexValue = utils.uint8ArrayToHexString(value); + const result = BigInt(hexValue); + if (result <= max) return result; + return result - mask; +} + +export function encodeNumber(param: AbiParameter, input: unknown): EncoderResult { + let value; + try { + value = toBigInt(input); + } catch (e) { + throw new AbiError('provided input is not number value', { + type: param.type, + value: input, + name: param.name, + }); + } + const limit = numberLimits.get(param.type); + if (!limit) { + throw new AbiError('provided abi contains invalid number datatype', { type: param.type }); + } + if (value < limit.min) { + throw new AbiError('provided input is less then minimum for given type', { + type: param.type, + value: input, + name: param.name, + minimum: limit.min.toString(), + }); + } + if (value > limit.max) { + throw new AbiError('provided input is greater then maximum for given type', { + type: param.type, + value: input, + name: param.name, + maximum: limit.max.toString(), + }); + } + return { + dynamic: false, + encoded: bigIntToUint8Array(value), + }; +} + +export function decodeNumber(param: AbiParameter, bytes: Uint8Array): DecoderResult { + if (bytes.length < WORD_SIZE) { + throw new AbiError('Not enough bytes left to decode', { param, bytesLeft: bytes.length }); + } + const boolBytes = bytes.subarray(0, WORD_SIZE); + const limit = numberLimits.get(param.type); + if (!limit) { + throw new AbiError('provided abi contains invalid number datatype', { type: param.type }); + } + const numberResult = uint8ArrayToBigInt(boolBytes, limit.max); + + if (numberResult < limit.min) { + throw new AbiError('decoded value is less then minimum for given type', { + type: param.type, + value: numberResult, + name: param.name, + minimum: limit.min.toString(), + }); + } + if (numberResult > limit.max) { + throw new AbiError('decoded value is greater then maximum for given type', { + type: param.type, + value: numberResult, + name: param.name, + maximum: limit.max.toString(), + }); + } + return { + result: numberResult, + encoded: bytes.subarray(WORD_SIZE), + consumed: WORD_SIZE, + }; +} diff --git a/packages/web3-eth-abi/src/coders/base/numbersLimits.ts b/packages/web3-eth-abi/src/coders/base/numbersLimits.ts new file mode 100644 index 00000000000..29f11462843 --- /dev/null +++ b/packages/web3-eth-abi/src/coders/base/numbersLimits.ts @@ -0,0 +1,39 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* + * this variable contains the precalculated limits for all the numbers for uint and int types +*/ +export const numberLimits = new Map(); + +let base = BigInt(256); // 2 ^ 8 = 256 +for (let i = 8; i <= 256; i += 8) { + numberLimits.set(`uint${i}`, { + min: BigInt(0), + max: base - BigInt(1), + }); + numberLimits.set(`int${i}`, { + min: -base / BigInt(2), + max: base / BigInt(2) - BigInt(1), + }); + base *= BigInt(256); +} + +// eslint-disable-next-line @typescript-eslint/no-non-null-assertion +numberLimits.set(`int`, numberLimits.get('int256')!); +// eslint-disable-next-line @typescript-eslint/no-non-null-assertion +numberLimits.set(`uint`, numberLimits.get('uint256')!); diff --git a/packages/web3-eth-abi/src/coders/base/string.ts b/packages/web3-eth-abi/src/coders/base/string.ts new file mode 100644 index 00000000000..6ad69e23ef3 --- /dev/null +++ b/packages/web3-eth-abi/src/coders/base/string.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AbiError } from 'web3-errors'; +import { AbiParameter } from 'web3-types'; +import { hexToUtf8, utf8ToBytes } from 'web3-utils'; +import { DecoderResult, EncoderResult } from '../types.js'; +import { decodeBytes, encodeBytes } from './bytes.js'; + +export function encodeString(_param: AbiParameter, input: unknown): EncoderResult { + if (typeof input !== 'string') { + throw new AbiError('invalid input, should be string', { input }); + } + const bytes = utf8ToBytes(input); + return encodeBytes({ type: 'bytes', name: '' }, bytes); +} + +export function decodeString(_param: AbiParameter, bytes: Uint8Array): DecoderResult { + const r = decodeBytes({ type: 'bytes', name: '' }, bytes); + return { + result: hexToUtf8(r.result), + encoded: r.encoded, + consumed: r.consumed, + }; +} diff --git a/packages/web3-eth-abi/src/coders/base/tuple.ts b/packages/web3-eth-abi/src/coders/base/tuple.ts new file mode 100644 index 00000000000..89ccff48cf3 --- /dev/null +++ b/packages/web3-eth-abi/src/coders/base/tuple.ts @@ -0,0 +1,130 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AbiError } from 'web3-errors'; +import { AbiParameter } from 'web3-types'; +import { uint8ArrayConcat } from 'web3-utils'; +import { DecoderResult, EncoderResult } from '../types.js'; +// eslint-disable-next-line import/no-cycle +import { decodeParamFromAbiParameter, encodeParamFromAbiParameter } from './index.js'; +import { encodeDynamicParams } from './utils.js'; +import { isDynamic } from '../utils.js'; +import { decodeNumber } from './number.js'; + +export function encodeTuple(param: AbiParameter, input: unknown): EncoderResult { + let dynamic = false; + if (!Array.isArray(input) && typeof input !== 'object') { + throw new AbiError('param must be either Array or Object', { + param, + input, + }); + } + const narrowedInput = input as Array | Record; + const encoded: Array = []; + for (let i = 0; i < (param.components?.length ?? 0); i += 1) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const paramComponent = param.components![i]; + let result: EncoderResult; + if (Array.isArray(narrowedInput)) { + if (i >= narrowedInput.length) { + throw new AbiError('input param length missmatch', { + param, + input, + }); + } + result = encodeParamFromAbiParameter(paramComponent, narrowedInput[i]); + } else { + const paramInput = narrowedInput[paramComponent.name ?? '']; + // eslint-disable-next-line no-null/no-null + if (paramInput === undefined || paramInput === null) { + throw new AbiError('missing input defined in abi', { + param, + input, + paramName: paramComponent.name, + }); + } + result = encodeParamFromAbiParameter(paramComponent, paramInput); + } + if (result.dynamic) { + dynamic = true; + } + encoded.push(result); + } + + if (dynamic) { + return { + dynamic: true, + encoded: encodeDynamicParams(encoded), + }; + } + return { + dynamic: false, + encoded: uint8ArrayConcat(...encoded.map(e => e.encoded)), + }; +} + +export function decodeTuple( + param: AbiParameter, + bytes: Uint8Array, +): DecoderResult<{ [key: string]: unknown; __length__: number }> { + const result: { [key: string]: unknown; __length__: number } = { + __length__: 0, + }; + + // tracks how much static params consumed bytes + let consumed = 0; + + if (!param.components) { + return { + result, + encoded: bytes, + consumed, + }; + } + // track how much dynamic params consumed bytes + let dynamicConsumed = 0; + for (const [index, childParam] of param.components.entries()) { + let decodedResult: DecoderResult; + if (isDynamic(childParam)) { + // if dynamic, we will have offset encoded + const offsetResult = decodeNumber( + { type: 'uint32', name: '' }, + bytes.subarray(consumed), + ); + // offset counts from start of original byte sequence + decodedResult = decodeParamFromAbiParameter( + childParam, + bytes.subarray(Number(offsetResult.result)), + ); + consumed += offsetResult.consumed; + dynamicConsumed += decodedResult.consumed; + } else { + // static param, just decode + decodedResult = decodeParamFromAbiParameter(childParam, bytes.subarray(consumed)); + consumed += decodedResult.consumed; + } + result.__length__ += 1; + result[index] = decodedResult.result; + if (childParam.name && childParam.name !== '') { + result[childParam.name] = decodedResult.result; + } + } + return { + encoded: bytes.subarray(consumed + dynamicConsumed), + result, + consumed: consumed + dynamicConsumed, + }; +} diff --git a/packages/web3-eth-abi/src/coders/base/utils.ts b/packages/web3-eth-abi/src/coders/base/utils.ts new file mode 100644 index 00000000000..65a7f46aaf5 --- /dev/null +++ b/packages/web3-eth-abi/src/coders/base/utils.ts @@ -0,0 +1,51 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { uint8ArrayConcat } from 'web3-utils'; +import { EncoderResult } from '../types.js'; +import { WORD_SIZE } from '../utils.js'; +import { encodeNumber } from './number.js'; + +export function encodeDynamicParams(encodedParams: ReadonlyArray): Uint8Array { + let staticSize = 0; + let dynamicSize = 0; + const staticParams: EncoderResult[] = []; + const dynamicParams: EncoderResult[] = []; + // figure out static size + for (const encodedParam of encodedParams) { + if (encodedParam.dynamic) { + staticSize += WORD_SIZE; + } else { + staticSize += encodedParam.encoded.length; + } + } + + for (const encodedParam of encodedParams) { + if (encodedParam.dynamic) { + staticParams.push( + encodeNumber({ type: 'uint256', name: '' }, staticSize + dynamicSize), + ); + dynamicParams.push(encodedParam); + dynamicSize += encodedParam.encoded.length; + } else { + staticParams.push(encodedParam); + } + } + return uint8ArrayConcat( + ...staticParams.map(p => p.encoded), + ...dynamicParams.map(p => p.encoded), + ); +} diff --git a/packages/web3-eth-abi/src/coders/decode.ts b/packages/web3-eth-abi/src/coders/decode.ts new file mode 100644 index 00000000000..adc84ad93bb --- /dev/null +++ b/packages/web3-eth-abi/src/coders/decode.ts @@ -0,0 +1,32 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiInput, HexString } from 'web3-types'; +import { utils } from 'web3-validator'; +import { decodeTuple } from './base/tuple.js'; +import { toAbiParams } from './utils.js'; + +export function decodeParameters( + abis: AbiInput[], + bytes: HexString, + _loose: boolean, +): { [key: string]: unknown; __length__: number } { + const abiParams = toAbiParams(abis); + const bytesArray = utils.hexToUint8Array(bytes); + + return decodeTuple({ type: 'tuple', name: '', components: abiParams }, bytesArray).result; +} diff --git a/packages/web3-eth-abi/src/coders/encode.ts b/packages/web3-eth-abi/src/coders/encode.ts new file mode 100644 index 00000000000..d0d8260db16 --- /dev/null +++ b/packages/web3-eth-abi/src/coders/encode.ts @@ -0,0 +1,34 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AbiError } from 'web3-errors'; +import { AbiInput } from 'web3-types'; +import { utils } from 'web3-validator'; +import { encodeTuple } from './base/index.js'; +import { toAbiParams } from './utils.js'; + +export function encodeParameters(abi: ReadonlyArray, params: unknown[]): string { + if (abi.length !== params.length) { + throw new AbiError('Invalid number of values received for given ABI', { + expected: abi.length, + received: params.length, + }); + } + const abiParams = toAbiParams(abi); + return utils.uint8ArrayToHexString( + encodeTuple({ type: 'tuple', name: '', components: abiParams }, params).encoded, + ); +} diff --git a/packages/web3-eth-abi/src/coders/types.ts b/packages/web3-eth-abi/src/coders/types.ts new file mode 100644 index 00000000000..b99d85618d3 --- /dev/null +++ b/packages/web3-eth-abi/src/coders/types.ts @@ -0,0 +1,39 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export type EncoderResult = { + dynamic: boolean; + + encoded: Uint8Array; +}; +export type DecoderResult = { + result: T; + + // remaining bytes not yet decoded + encoded: Uint8Array; + + // number of bytes consumed + consumed: number; +}; + +export type NumberType = { + signed: boolean; + byteLength: number; +}; +export type BytesType = { + size?: number; +}; diff --git a/packages/web3-eth-abi/src/coders/utils.ts b/packages/web3-eth-abi/src/coders/utils.ts new file mode 100644 index 00000000000..82b557262a8 --- /dev/null +++ b/packages/web3-eth-abi/src/coders/utils.ts @@ -0,0 +1,128 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiParameter as ExternalAbiParameter, parseAbiParameter } from 'abitype'; +import { AbiError } from 'web3-errors'; +import { AbiInput, AbiParameter, AbiStruct } from 'web3-types'; +import { isNullish } from 'web3-utils'; +import { + isSimplifiedStructFormat, + mapStructNameAndType, + mapStructToCoderFormat, +} from '../utils.js'; + +export const WORD_SIZE = 32; + +export function alloc(size = 0): Uint8Array { + if (globalThis.Buffer?.alloc !== undefined) { + const buf = globalThis.Buffer.alloc(size); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); + } + + return new Uint8Array(size); +} + +/** + * Where possible returns a Uint8Array of the requested size that references + * uninitialized memory. Only use if you are certain you will immediately + * overwrite every value in the returned `Uint8Array`. + */ +export function allocUnsafe(size = 0): Uint8Array { + if (globalThis.Buffer?.allocUnsafe !== undefined) { + const buf = globalThis.Buffer.allocUnsafe(size); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); + } + + return new Uint8Array(size); +} + +export function convertExternalAbiParameter(abiParam: ExternalAbiParameter): AbiParameter { + return { + ...abiParam, + name: abiParam.name ?? '', + components: (abiParam as { components: readonly AbiParameter[] }).components?.map(c => + convertExternalAbiParameter(c), + ), + }; +} + +export function isAbiParameter(param: unknown): param is AbiParameter { + return ( + !isNullish(param) && + typeof param === 'object' && + !isNullish((param as { type: unknown }).type) && + typeof (param as { type: unknown }).type === 'string' + ); +} + +export function toAbiParams(abi: ReadonlyArray): ReadonlyArray { + return abi.map(input => { + if (isAbiParameter(input)) { + return input; + } + if (typeof input === 'string') { + return convertExternalAbiParameter(parseAbiParameter(input.replace(/tuple/, ''))); + } + + if (isSimplifiedStructFormat(input)) { + const structName = Object.keys(input)[0]; + const structInfo = mapStructNameAndType(structName); + structInfo.name = structInfo.name ?? ''; + return { + ...structInfo, + components: mapStructToCoderFormat( + input[structName as keyof typeof input] as unknown as AbiStruct, + ), + }; + } + throw new AbiError('Invalid abi'); + }); +} + +export function extractArrayType(param: AbiParameter): { size: number; param: AbiParameter } { + const arrayParenthesisStart = param.type.lastIndexOf('['); + const arrayParamType = param.type.substring(0, arrayParenthesisStart); + const sizeString = param.type.substring(arrayParenthesisStart); + let size = -1; + if (sizeString !== '[]') { + size = Number(sizeString.slice(1, -1)); + // eslint-disable-next-line no-restricted-globals + if (isNaN(size)) { + throw new AbiError('Invalid fixed array size', { size: sizeString }); + } + } + return { + param: { type: arrayParamType, name: '', components: param.components }, + size, + }; +} + +/** + * Param is dynamic if it's dynamic base type or if some of his children (components, array items) + * is of dynamic type + * @param param + */ +export function isDynamic(param: AbiParameter): boolean { + if (param.type === 'string' || param.type === 'bytes' || param.type.endsWith('[]')) return true; + if (param.type === 'tuple') { + return param.components?.some(isDynamic) ?? false; + } + if (param.type.endsWith(']')) { + return isDynamic(extractArrayType(param).param); + } + return false; +} diff --git a/packages/web3-eth-abi/src/decode_contract_error_data.ts b/packages/web3-eth-abi/src/decode_contract_error_data.ts new file mode 100644 index 00000000000..98eb02d4fd8 --- /dev/null +++ b/packages/web3-eth-abi/src/decode_contract_error_data.ts @@ -0,0 +1,50 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Eip838ExecutionError } from 'web3-errors'; +import { AbiErrorFragment } from 'web3-types'; + +import { encodeErrorSignature } from './api/errors_api.js'; +import { decodeParameters } from './api/parameters_api.js'; +import { jsonInterfaceMethodToString } from './utils.js'; + +export const decodeContractErrorData = ( + errorsAbi: AbiErrorFragment[], + error: Eip838ExecutionError, +) => { + if (error?.data) { + let errorName: string | undefined; + let errorSignature: string | undefined; + let errorArgs: { [K in string]: unknown } | undefined; + try { + const errorSha = error.data.slice(0, 10); + const errorAbi = errorsAbi.find(abi => encodeErrorSignature(abi).startsWith(errorSha)); + + if (errorAbi?.inputs) { + errorName = errorAbi.name; + errorSignature = jsonInterfaceMethodToString(errorAbi); + // decode abi.inputs according to EIP-838 + errorArgs = decodeParameters([...errorAbi.inputs], error.data.substring(10)); + } + } catch (err) { + console.error(err); + } + if (errorName) { + error.setDecodedProperties(errorName, errorSignature, errorArgs); + } + } +}; diff --git a/packages/web3-eth-abi/src/eip_712.ts b/packages/web3-eth-abi/src/eip_712.ts new file mode 100644 index 00000000000..f08609bffc5 --- /dev/null +++ b/packages/web3-eth-abi/src/eip_712.ts @@ -0,0 +1,200 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * @note This code was taken from: https://github.com/Mrtenz/eip-712/tree/master + */ + +import { Eip712TypedData } from 'web3-types'; +import { isNullish, keccak256 } from 'web3-utils'; +import { encodeParameters } from './coders/encode.js'; + +const TYPE_REGEX = /^\w+/; +const ARRAY_REGEX = /^(.*)\[([0-9]*?)]$/; + +/** + * Get the dependencies of a struct type. If a struct has the same dependency multiple times, it's only included once + * in the resulting array. + */ +const getDependencies = ( + typedData: Eip712TypedData, + type: string, + dependencies: string[] = [], +): string[] => { + const match = type.match(TYPE_REGEX)!; + const actualType = match[0]; + if (dependencies.includes(actualType)) { + return dependencies; + } + + if (!typedData.types[actualType]) { + return dependencies; + } + + return [ + actualType, + ...typedData.types[actualType].reduce( + (previous, _type) => [ + ...previous, + ...getDependencies(typedData, _type.type, previous).filter( + dependency => !previous.includes(dependency), + ), + ], + [], + ), + ]; +}; + +/** + * Encode a type to a string. All dependant types are alphabetically sorted. + * + * @param {TypedData} typedData + * @param {string} type + * @param {Options} [options] + * @return {string} + */ +const encodeType = (typedData: Eip712TypedData, type: string): string => { + const [primary, ...dependencies] = getDependencies(typedData, type); + // eslint-disable-next-line @typescript-eslint/require-array-sort-compare + const types = [primary, ...dependencies.sort()]; + + return types + .map( + dependency => + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + `${dependency}(${typedData.types[dependency].map( + _type => `${_type.type} ${_type.name}`, + )})`, + ) + .join(''); +}; + +/** + * Get a type string as hash. + */ +const getTypeHash = (typedData: Eip712TypedData, type: string) => + keccak256(encodeType(typedData, type)); + +/** + * Get encoded data as a hash. The data should be a key -> value object with all the required values. All dependant + * types are automatically encoded. + */ +const getStructHash = ( + typedData: Eip712TypedData, + type: string, + data: Record, + // eslint-disable-next-line no-use-before-define +): string => keccak256(encodeData(typedData, type, data)); + +/** + * Get the EIP-191 encoded message to sign, from the typedData object. If `hash` is enabled, the message will be hashed + * with Keccak256. + */ +export const getMessage = (typedData: Eip712TypedData, hash?: boolean): string => { + const EIP_191_PREFIX = '1901'; + const message = `0x${EIP_191_PREFIX}${getStructHash( + typedData, + 'EIP712Domain', + typedData.domain as Record, + ).substring(2)}${getStructHash(typedData, typedData.primaryType, typedData.message).substring( + 2, + )}`; + + if (hash) { + return keccak256(message); + } + + return message; +}; + +/** + * Encodes a single value to an ABI serialisable string, number or Buffer. Returns the data as tuple, which consists of + * an array of ABI compatible types, and an array of corresponding values. + */ +const encodeValue = ( + typedData: Eip712TypedData, + type: string, + data: unknown, +): [string, string | Uint8Array | number] => { + const match = type.match(ARRAY_REGEX); + + // Checks for array types + if (match) { + const arrayType = match[1]; + const length = Number(match[2]) || undefined; + + if (!Array.isArray(data)) { + throw new Error('Cannot encode data: value is not of array type'); + } + + if (length && data.length !== length) { + throw new Error( + `Cannot encode data: expected length of ${length}, but got ${data.length}`, + ); + } + + const encodedData = data.map(item => encodeValue(typedData, arrayType, item)); + const types = encodedData.map(item => item[0]); + const values = encodedData.map(item => item[1]); + + return ['bytes32', keccak256(encodeParameters(types, values))]; + } + + if (typedData.types[type]) { + return ['bytes32', getStructHash(typedData, type, data as Record)]; + } + + // Strings and arbitrary byte arrays are hashed to bytes32 + if (type === 'string') { + return ['bytes32', keccak256(data as string)]; + } + + if (type === 'bytes') { + return ['bytes32', keccak256(data as string)]; + } + + return [type, data as string]; +}; + +/** + * Encode the data to an ABI encoded Buffer. The data should be a key -> value object with all the required values. All + * dependant types are automatically encoded. + */ +const encodeData = ( + typedData: Eip712TypedData, + type: string, + data: Record, +): string => { + const [types, values] = typedData.types[type].reduce<[string[], unknown[]]>( + ([_types, _values], field) => { + if (isNullish(data[field.name]) || isNullish(data[field.name])) { + throw new Error(`Cannot encode data: missing data for '${field.name}'`); + } + + const value = data[field.name]; + const [_type, encodedValue] = encodeValue(typedData, field.type, value); + + return [ + [..._types, _type], + [..._values, encodedValue], + ]; + }, + [['bytes32'], [getTypeHash(typedData, type)]], + ); + + return encodeParameters(types, values); +}; diff --git a/packages/web3-eth-abi/src/index.js b/packages/web3-eth-abi/src/index.js deleted file mode 100644 index 34801939265..00000000000 --- a/packages/web3-eth-abi/src/index.js +++ /dev/null @@ -1,442 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file index.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2018 - */ - -var Buffer = require('buffer').Buffer; -var _ = require('underscore'); -var utils = require('web3-utils'); - -var EthersAbiCoder = require('@ethersproject/abi').AbiCoder; -var ParamType = require('@ethersproject/abi').ParamType; -var ethersAbiCoder = new EthersAbiCoder(function (type, value) { - if (type.match(/^u?int/) && !_.isArray(value) && (!_.isObject(value) || value.constructor.name !== 'BN')) { - return value.toString(); - } - return value; -}); - -// result method -function Result() { -} - -/** - * ABICoder prototype should be used to encode/decode solidity params of any type - */ -var ABICoder = function () { -}; - -/** - * Encodes the function name to its ABI representation, which are the first 4 bytes of the sha3 of the function name including types. - * - * @method encodeFunctionSignature - * @param {String|Object} functionName - * @return {String} encoded function name - */ -ABICoder.prototype.encodeFunctionSignature = function (functionName) { - if (_.isObject(functionName)) { - functionName = utils._jsonInterfaceMethodToString(functionName); - } - - return utils.sha3(functionName).slice(0, 10); -}; - -/** - * Encodes the function name to its ABI representation, which are the first 4 bytes of the sha3 of the function name including types. - * - * @method encodeEventSignature - * @param {String|Object} functionName - * @return {String} encoded function name - */ -ABICoder.prototype.encodeEventSignature = function (functionName) { - if (_.isObject(functionName)) { - functionName = utils._jsonInterfaceMethodToString(functionName); - } - - return utils.sha3(functionName); -}; - -/** - * Should be used to encode plain param - * - * @method encodeParameter - * - * @param {String|Object} type - * @param {any} param - * - * @return {String} encoded plain param - */ -ABICoder.prototype.encodeParameter = function (type, param) { - return this.encodeParameters([type], [param]); -}; - -/** - * Should be used to encode list of params - * - * @method encodeParameters - * - * @param {Array} types - * @param {Array} params - * - * @return {String} encoded list of params - */ -ABICoder.prototype.encodeParameters = function (types, params) { - var self = this; - types = self.mapTypes(types); - - params = params.map(function (param, index) { - let type = types[index]; - if (typeof type === 'object' && type.type) { - // We may get a named type of shape {name, type} - type = type.type; - } - - param = self.formatParam(type, param); - - // Format params for tuples - if (typeof type === 'string' && type.includes('tuple')) { - const coder = ethersAbiCoder._getCoder(ParamType.from(type)); - const modifyParams = (coder, param) => { - if (coder.name === 'array') { - return param.map(p => - modifyParams( - ethersAbiCoder._getCoder(ParamType.from(coder.type.replace('[]', ''))), - p - ) - ); - } - coder.coders.forEach((c, i) => { - if (c.name === 'tuple') { - modifyParams(c, param[i]); - } else { - param[i] = self.formatParam(c.name, param[i]); - } - }); - }; - modifyParams(coder, param); - } - - return param; - }); - - return ethersAbiCoder.encode(types, params); -}; - -/** - * Map types if simplified format is used - * - * @method mapTypes - * @param {Array} types - * @return {Array} - */ -ABICoder.prototype.mapTypes = function (types) { - var self = this; - var mappedTypes = []; - types.forEach(function (type) { - // Remap `function` type params to bytes24 since Ethers does not - // recognize former type. Solidity docs say `Function` is a bytes24 - // encoding the contract address followed by the function selector hash. - if (typeof type === 'object' && type.type === 'function'){ - type = Object.assign({}, type, { type: "bytes24" }); - } - if (self.isSimplifiedStructFormat(type)) { - var structName = Object.keys(type)[0]; - mappedTypes.push( - Object.assign( - self.mapStructNameAndType(structName), - { - components: self.mapStructToCoderFormat(type[structName]) - } - ) - ); - - return; - } - - mappedTypes.push(type); - }); - - return mappedTypes; -}; - -/** - * Check if type is simplified struct format - * - * @method isSimplifiedStructFormat - * @param {string | Object} type - * @returns {boolean} - */ -ABICoder.prototype.isSimplifiedStructFormat = function (type) { - return typeof type === 'object' && typeof type.components === 'undefined' && typeof type.name === 'undefined'; -}; - -/** - * Maps the correct tuple type and name when the simplified format in encode/decodeParameter is used - * - * @method mapStructNameAndType - * @param {string} structName - * @return {{type: string, name: *}} - */ -ABICoder.prototype.mapStructNameAndType = function (structName) { - var type = 'tuple'; - - if (structName.indexOf('[]') > -1) { - type = 'tuple[]'; - structName = structName.slice(0, -2); - } - - return {type: type, name: structName}; -}; - -/** - * Maps the simplified format in to the expected format of the ABICoder - * - * @method mapStructToCoderFormat - * @param {Object} struct - * @return {Array} - */ -ABICoder.prototype.mapStructToCoderFormat = function (struct) { - var self = this; - var components = []; - Object.keys(struct).forEach(function (key) { - if (typeof struct[key] === 'object') { - components.push( - Object.assign( - self.mapStructNameAndType(key), - { - components: self.mapStructToCoderFormat(struct[key]) - } - ) - ); - - return; - } - - components.push({ - name: key, - type: struct[key] - }); - }); - - return components; -}; - -/** - * Handle some formatting of params for backwards compatability with Ethers V4 - * - * @method formatParam - * @param {String} - type - * @param {any} - param - * @return {any} - The formatted param - */ -ABICoder.prototype.formatParam = function (type, param) { - const paramTypeBytes = new RegExp(/^bytes([0-9]*)$/); - const paramTypeBytesArray = new RegExp(/^bytes([0-9]*)\[\]$/); - const paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/); - const paramTypeNumberArray = new RegExp(/^(u?int)([0-9]*)\[\]$/); - - // Format BN to string - if (utils.isBN(param) || utils.isBigNumber(param)) { - return param.toString(10); - } - - if (type.match(paramTypeBytesArray) || type.match(paramTypeNumberArray)) { - return param.map(p => this.formatParam(type.replace('[]', ''), p)); - } - - // Format correct width for u?int[0-9]* - let match = type.match(paramTypeNumber); - if (match) { - let size = parseInt(match[2] || "256"); - if (size / 8 < param.length) { - // pad to correct bit width - param = utils.leftPad(param, size); - } - } - - // Format correct length for bytes[0-9]+ - match = type.match(paramTypeBytes); - if (match) { - if (Buffer.isBuffer(param)) { - param = utils.toHex(param); - } - - // format to correct length - let size = parseInt(match[1]); - if (size) { - let maxSize = size * 2; - if (param.substring(0, 2) === '0x') { - maxSize += 2; - } - if (param.length < maxSize) { - // pad to correct length - param = utils.rightPad(param, size * 2); - } - } - - // format odd-length bytes to even-length - if (param.length % 2 === 1) { - param = '0x0' + param.substring(2); - } - } - - return param; -}; - -/** - * Encodes a function call from its json interface and parameters. - * - * @method encodeFunctionCall - * @param {Array} jsonInterface - * @param {Array} params - * @return {String} The encoded ABI for this function call - */ -ABICoder.prototype.encodeFunctionCall = function (jsonInterface, params) { - return this.encodeFunctionSignature(jsonInterface) + this.encodeParameters(jsonInterface.inputs, params).replace('0x', ''); -}; - -/** - * Should be used to decode bytes to plain param - * - * @method decodeParameter - * @param {String} type - * @param {String} bytes - * @return {Object} plain param - */ -ABICoder.prototype.decodeParameter = function (type, bytes) { - return this.decodeParameters([type], bytes)[0]; -}; - -/** - * Should be used to decode list of params - * - * @method decodeParameter - * @param {Array} outputs - * @param {String} bytes - * @return {Array} array of plain params - */ -ABICoder.prototype.decodeParameters = function (outputs, bytes) { - return this.decodeParametersWith(outputs, bytes, false); -} - -/** - * Should be used to decode list of params - * - * @method decodeParameter - * @param {Array} outputs - * @param {String} bytes - * @param {Boolean} loose - * @return {Array} array of plain params - */ -ABICoder.prototype.decodeParametersWith = function (outputs, bytes, loose) { - if (outputs.length > 0 && (!bytes || bytes === '0x' || bytes === '0X')) { - throw new Error( - 'Returned values aren\'t valid, did it run Out of Gas? ' + - 'You might also see this error if you are not using the ' + - 'correct ABI for the contract you are retrieving data from, ' + - 'requesting data from a block number that does not exist, ' + - 'or querying a node which is not fully synced.' - ); - } - - var res = ethersAbiCoder.decode(this.mapTypes(outputs), '0x' + bytes.replace(/0x/i, ''), loose); - var returnValue = new Result(); - returnValue.__length__ = 0; - - outputs.forEach(function (output, i) { - var decodedValue = res[returnValue.__length__]; - decodedValue = (decodedValue === '0x') ? null : decodedValue; - - returnValue[i] = decodedValue; - - if (_.isObject(output) && output.name) { - returnValue[output.name] = decodedValue; - } - - returnValue.__length__++; - }); - - return returnValue; -}; - -/** - * Decodes events non- and indexed parameters. - * - * @method decodeLog - * @param {Object} inputs - * @param {String} data - * @param {Array} topics - * @return {Array} array of plain params - */ -ABICoder.prototype.decodeLog = function (inputs, data, topics) { - var _this = this; - topics = _.isArray(topics) ? topics : [topics]; - - data = data || ''; - - var notIndexedInputs = []; - var indexedParams = []; - var topicCount = 0; - - // TODO check for anonymous logs? - - inputs.forEach(function (input, i) { - if (input.indexed) { - indexedParams[i] = (['bool', 'int', 'uint', 'address', 'fixed', 'ufixed'].find(function (staticType) { - return input.type.indexOf(staticType) !== -1; - })) ? _this.decodeParameter(input.type, topics[topicCount]) : topics[topicCount]; - topicCount++; - } else { - notIndexedInputs[i] = input; - } - }); - - - var nonIndexedData = data; - var notIndexedParams = (nonIndexedData) ? this.decodeParametersWith(notIndexedInputs, nonIndexedData, true) : []; - - var returnValue = new Result(); - returnValue.__length__ = 0; - - - inputs.forEach(function (res, i) { - returnValue[i] = (res.type === 'string') ? '' : null; - - if (typeof notIndexedParams[i] !== 'undefined') { - returnValue[i] = notIndexedParams[i]; - } - if (typeof indexedParams[i] !== 'undefined') { - returnValue[i] = indexedParams[i]; - } - - if (res.name) { - returnValue[res.name] = returnValue[i]; - } - - returnValue.__length__++; - }); - - return returnValue; -}; - -var coder = new ABICoder(); - -module.exports = coder; diff --git a/packages/web3-eth-abi/src/index.ts b/packages/web3-eth-abi/src/index.ts new file mode 100644 index 00000000000..baa57947847 --- /dev/null +++ b/packages/web3-eth-abi/src/index.ts @@ -0,0 +1,28 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * The web3.eth.abi functions let you encode and decode parameters to ABI (Application Binary Interface) for function calls to the EVM (Ethereum Virtual Machine). + */ +export * from './api/errors_api.js'; +export * from './api/events_api.js'; +export * from './api/functions_api.js'; +export * from './api/logs_api.js'; +export * from './api/parameters_api.js'; +export * from './utils.js'; +export * from './decode_contract_error_data.js'; +export { getMessage as getEncodedEip712Data } from './eip_712.js'; diff --git a/packages/web3-eth-abi/src/utils.ts b/packages/web3-eth-abi/src/utils.ts new file mode 100644 index 00000000000..e8212c28329 --- /dev/null +++ b/packages/web3-eth-abi/src/utils.ts @@ -0,0 +1,266 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiError } from 'web3-errors'; +import { isNullish, leftPad, rightPad, toHex } from 'web3-utils'; +import { + AbiInput, + AbiCoderStruct, + AbiFragment, + AbiParameter, + AbiStruct, + AbiEventFragment, + AbiFunctionFragment, + AbiConstructorFragment, +} from 'web3-types'; + +export const isAbiFragment = (item: unknown): item is AbiFragment => + !isNullish(item) && + typeof item === 'object' && + !isNullish((item as { type: string }).type) && + ['function', 'event', 'constructor', 'error'].includes((item as { type: string }).type); + +export const isAbiErrorFragment = (item: unknown): item is AbiEventFragment => + !isNullish(item) && + typeof item === 'object' && + !isNullish((item as { type: string }).type) && + (item as { type: string }).type === 'error'; + +export const isAbiEventFragment = (item: unknown): item is AbiEventFragment => + !isNullish(item) && + typeof item === 'object' && + !isNullish((item as { type: string }).type) && + (item as { type: string }).type === 'event'; + +export const isAbiFunctionFragment = (item: unknown): item is AbiFunctionFragment => + !isNullish(item) && + typeof item === 'object' && + !isNullish((item as { type: string }).type) && + (item as { type: string }).type === 'function'; + +export const isAbiConstructorFragment = (item: unknown): item is AbiConstructorFragment => + !isNullish(item) && + typeof item === 'object' && + !isNullish((item as { type: string }).type) && + (item as { type: string }).type === 'constructor'; + +/** + * Check if type is simplified struct format + */ +export const isSimplifiedStructFormat = ( + type: string | Partial | Partial, +): type is Omit => + typeof type === 'object' && + typeof (type as { components: unknown }).components === 'undefined' && + typeof (type as { name: unknown }).name === 'undefined'; + +/** + * Maps the correct tuple type and name when the simplified format in encode/decodeParameter is used + */ +export const mapStructNameAndType = (structName: string): AbiStruct => + structName.includes('[]') + ? { type: 'tuple[]', name: structName.slice(0, -2) } + : { type: 'tuple', name: structName }; + +/** + * Maps the simplified format in to the expected format of the ABICoder + */ +export const mapStructToCoderFormat = (struct: AbiStruct): Array => { + const components: Array = []; + + for (const key of Object.keys(struct)) { + const item = struct[key]; + + if (typeof item === 'object') { + components.push({ + ...mapStructNameAndType(key), + components: mapStructToCoderFormat(item as unknown as AbiStruct), + }); + } else { + components.push({ + name: key, + type: struct[key] as string, + }); + } + } + return components; +}; + +/** + * Map types if simplified format is used + */ +export const mapTypes = ( + types: AbiInput[], +): Array> => { + const mappedTypes: Array> = []; + + for (const type of types) { + let modifiedType = type; + + // Clone object + if (typeof type === 'object') { + modifiedType = { ...type }; + } + + // Remap `function` type params to bytes24 since Ethers does not + // recognize former type. Solidity docs say `Function` is a bytes24 + // encoding the contract address followed by the function selector hash. + if (typeof type === 'object' && type.type === 'function') { + modifiedType = { ...type, type: 'bytes24' }; + } + + if (isSimplifiedStructFormat(modifiedType)) { + const structName = Object.keys(modifiedType)[0] as unknown as keyof typeof modifiedType; + + mappedTypes.push({ + ...mapStructNameAndType(structName), + components: mapStructToCoderFormat( + modifiedType[structName] as unknown as AbiStruct, + ) as unknown as AbiParameter[], + }); + } else { + mappedTypes.push(modifiedType); + } + } + + return mappedTypes; +}; + +/** + * returns true if input is a hexstring and is odd-lengthed + */ +export const isOddHexstring = (param: unknown): boolean => + typeof param === 'string' && /^(-)?0x[0-9a-f]*$/i.test(param) && param.length % 2 === 1; + +/** + * format odd-length bytes to even-length + */ +export const formatOddHexstrings = (param: string): string => + isOddHexstring(param) ? `0x0${param.substring(2)}` : param; + +/** + * Handle some formatting of params for backwards compatibility with Ethers V4 + */ +export const formatParam = (type: string, _param: unknown): unknown => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + + // clone if _param is an object + const param = typeof _param === 'object' && !Array.isArray(_param) ? { ..._param } : _param; + const paramTypeBytes = /^bytes([0-9]*)$/; + const paramTypeBytesArray = /^bytes([0-9]*)\[\]$/; + const paramTypeNumber = /^(u?int)([0-9]*)$/; + const paramTypeNumberArray = /^(u?int)([0-9]*)\[\]$/; + + // Format BN to string + if (param instanceof BigInt) { + return param.toString(10); + } + + if (paramTypeBytesArray.exec(type) || paramTypeNumberArray.exec(type)) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + const paramClone = [...(param as Array)]; + return paramClone.map(p => formatParam(type.replace('[]', ''), p)); + } + + // Format correct width for u?int[0-9]* + let match = paramTypeNumber.exec(type); + if (match) { + const size = parseInt(match[2] ?? '256', 10); + if (size / 8 < (param as { length: number }).length) { + // pad to correct bit width + return leftPad(param as string, size); + } + } + + // Format correct length for bytes[0-9]+ + match = paramTypeBytes.exec(type); + if (match) { + const hexParam = param instanceof Uint8Array ? toHex(param) : param; + + // format to correct length + const size = parseInt(match[1], 10); + if (size) { + let maxSize = size * 2; + + if ((param as string).startsWith('0x')) { + maxSize += 2; + } + // pad to correct length + const paddedParam = + (hexParam as string).length < maxSize + ? rightPad(param as string, size * 2) + : hexParam; + return formatOddHexstrings(paddedParam as string); + } + + return formatOddHexstrings(hexParam as string); + } + return param; +}; + +/** + * used to flatten json abi inputs/outputs into an array of type-representing-strings + */ + +export const flattenTypes = ( + includeTuple: boolean, + puts: ReadonlyArray, +): string[] => { + const types: string[] = []; + + puts.forEach(param => { + if (typeof param.components === 'object') { + if (!param.type.startsWith('tuple')) { + throw new AbiError( + `Invalid value given "${param.type}". Error: components found but type is not tuple.`, + ); + } + const arrayBracket = param.type.indexOf('['); + const suffix = arrayBracket >= 0 ? param.type.substring(arrayBracket) : ''; + const result = flattenTypes(includeTuple, param.components); + + if (Array.isArray(result) && includeTuple) { + types.push(`tuple(${result.join(',')})${suffix}`); + } else if (!includeTuple) { + types.push(`(${result.join(',')})${suffix}`); + } else { + types.push(`(${result.join()})`); + } + } else { + types.push(param.type); + } + }); + + return types; +}; + +/** + * Should be used to create full function/event name from json abi + * returns a string + */ +export const jsonInterfaceMethodToString = (json: AbiFragment): string => { + if (isAbiErrorFragment(json) || isAbiEventFragment(json) || isAbiFunctionFragment(json)) { + if (json.name?.includes('(')) { + return json.name; + } + + return `${json.name ?? ''}(${flattenTypes(false, json.inputs ?? []).join(',')})`; + } + + // Constructor fragment + return `(${flattenTypes(false, json.inputs ?? []).join(',')})`; +}; diff --git a/packages/web3-eth-abi/test/.eslintrc.js b/packages/web3-eth-abi/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-eth-abi/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth-abi/test/config/jest.config.js b/packages/web3-eth-abi/test/config/jest.config.js new file mode 100644 index 00000000000..c8c21e06e6a --- /dev/null +++ b/packages/web3-eth-abi/test/config/jest.config.js @@ -0,0 +1,43 @@ +module.exports = { + globals: { + 'ts-jest': { + tsconfig: './test/tsconfig.json', + }, + }, + rootDir: '../..', + testMatch: ['/test/**/?(*.)+(spec|test).+(ts|tsx|js)'], + setupFilesAfterEnv: ['/test/config/setup.js'], + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + verbose: false, + collectCoverage: false, + coverageReporters: ['json'], + coverageDirectory: '.coverage', + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, +}; diff --git a/packages/web3-eth-abi/test/config/setup.js b/packages/web3-eth-abi/test/config/setup.js new file mode 100644 index 00000000000..d6d6c564527 --- /dev/null +++ b/packages/web3-eth-abi/test/config/setup.js @@ -0,0 +1,23 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-eth-abi/test/fixtures/abitestsdata.json b/packages/web3-eth-abi/test/fixtures/abitestsdata.json new file mode 100644 index 00000000000..14b1af0ccb0 --- /dev/null +++ b/packages/web3-eth-abi/test/fixtures/abitestsdata.json @@ -0,0 +1,86632 @@ +[ + { + "name": "random-((string))", + "type": "((string))", + "value": [["Moo é🚀 éooM🚀🚀ooMoo🚀M🚀ooooMé🚀éé🚀é 🚀M 🚀 ooéoéM"]], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 éooM🚀🚀ooMoo🚀M🚀ooooMé🚀éé🚀é 🚀M 🚀 ooéoéM" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610199806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ac565b60405180910390f35b60408051808201909152606060208201908152815260408051808201909152606060208201908152815260408051602081019091526060815260006040518060800160405280604f8152602001610115604f91398252508152919050565b600060208083528351818285015280519050816040850152805180606086015260005b818110156100eb578281018401518682016080015283016100cf565b818111156100fd576000608083880101525b50601f01601f19169390930160800194935050505056fe4d6f6f20c3a9f09f9a8020c3a96f6f4df09f9a80f09f9a806f6f4d6f6ff09f9a804df09f9a806f6f6f6f4dc3a9f09f9a80c3a9c3a9f09f9a80c3a920f09f9a804d20f09f9a80206f6fc3a96fc3a94da26469706673582212205c11039b5dafbaf421f0109e51e8f4662430f78a30191fd97c9dadd6dfa20b3664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_5ea5d66d {\n S_97fc4627 s_0;\n }\n\n function test () public pure returns (S_5ea5d66d memory) {\n S_5ea5d66d memory r;\n {\n S_97fc4627 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀 éooM🚀🚀ooMoo🚀M🚀ooooMé🚀éé🚀é 🚀M 🚀 ooéoéM\";\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a8020c3a96f6f4df09f9a80f09f9a806f6f4d6f6ff09f9a804df09f9a806f6f6f6f4dc3a9f09f9a80c3a9c3a9f09f9a80c3a920f09f9a804d20f09f9a80206f6fc3a96fc3a94d0000000000000000000000000000000000" + }, + { + "name": "random-((uint16))", + "type": "((uint16))", + "value": [["16180"]], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "16180" + } + ] + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060b08061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260006020808301828152909252825180840184528083019182529081528251918201909252613f348152815260405190515161ffff16815260200160405180910390f3fea2646970667358221220598ebe5e371d88deaa75b4d935f46cf5fe504fa1fd158c0c660afbc48055de4a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_267213ef {\n uint16 s_0;\n }\n\n struct S_92a3c0c7 {\n S_267213ef s_0;\n }\n\n function test () public pure returns (S_92a3c0c7 memory) {\n S_92a3c0c7 memory r;\n {\n S_267213ef memory r_0;\n {\n uint16 r_0_0 = 16180;\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000003f34" + }, + { + "name": "random-(address)", + "type": "(address)", + "value": ["0xA85DE98436C142F3CB0F727669C1438481c6287E"], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xA85DE98436C142F3CB0F727669C1438481c6287E" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060a28061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516020808201835260009091528151808201835273a85de98436c142f3cb0f727669c1438481c6287e9081905282519081529151918290030190f3fea264697066735822122047335b3e176fff1aab4b3ed5a4bb776911a5f963a936a8e38e01feb4ca5253ee64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_421683f8 {\n address s_0;\n }\n\n function test () public pure returns (S_421683f8 memory) {\n S_421683f8 memory r;\n {\n address r_0 = 0xA85DE98436C142F3CB0F727669C1438481c6287E;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000a85de98436c142f3cb0f727669c1438481c6287e" + }, + { + "name": "random-(bool)", + "type": "(bool)", + "value": [true], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608f8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516020808201835260009091528151808201835260019081905282519081529151918290030190f3fea26469706673582212201073a4e507b400849eb27b71c8bcbd3d72793bdb17bf93281a2f401a23c227f064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1053bda {\n bool s_0;\n }\n\n function test () public pure returns (S_c1053bda memory) {\n S_c1053bda memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bytes1)", + "type": "(bytes1)", + "value": ["0x7e"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x7e" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060928061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160208082018352600090915281518082018352603f60f91b9081905282519081529151918290030190f3fea2646970667358221220386f7afee78977eaeedc6b9c747c78cab135f8ccbeb6767b57e7687bad833c7f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_042b2302 {\n bytes1 s_0;\n }\n\n function test () public pure returns (S_042b2302 memory) {\n S_042b2302 memory r;\n {\n bytes1 r_0 = bytes1(0x7e);\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x7e00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes10)", + "type": "(bytes10)", + "value": ["0x66797f01a6c8ae85d634"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x66797f01a6c8ae85d634" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b50609b8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516020808201835260009091528151808201835269199e5fc069b22ba1758d60b21b9081905282519081529151918290030190f3fea26469706673582212206118c83566b3bd1e76e7c21aa0461ac5325d8c9c4e73e1b33ab2557fb2ec368464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6ebf9ebb {\n bytes10 s_0;\n }\n\n function test () public pure returns (S_6ebf9ebb memory) {\n S_6ebf9ebb memory r;\n {\n bytes10 r_0 = bytes10(0x66797f01a6c8ae85d634);\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x66797f01a6c8ae85d63400000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes14)", + "type": "(bytes14)", + "value": ["0xe12ab06442648cc40bb1f74fb803"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xe12ab06442648cc40bb1f74fb803" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b50609f8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051602080820183526000909152815180820183526de12ab06442648cc40bb1f74fb80360901b9081905282519081529151918290030190f3fea264697066735822122075220b15dff30d0536923822109629e83cce5b7d4e0c72d19de09803ef72065064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d5bccb4a {\n bytes14 s_0;\n }\n\n function test () public pure returns (S_d5bccb4a memory) {\n S_d5bccb4a memory r;\n {\n bytes14 r_0 = bytes14(0xe12ab06442648cc40bb1f74fb803);\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0xe12ab06442648cc40bb1f74fb803000000000000000000000000000000000000" + }, + { + "name": "random-(bytes16)", + "type": "(bytes16)", + "value": ["0x1b192d259d4a003d63d4fa10cf5180a1"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x1b192d259d4a003d63d4fa10cf5180a1" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060a18061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051602080820183526000909152815180820183526f1b192d259d4a003d63d4fa10cf5180a160801b9081905282519081529151918290030190f3fea2646970667358221220622d271d37b9c44a1465479b9a46117bf2377bc480f1f92ddaa18e10d8a9ae2364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a1126f25 {\n bytes16 s_0;\n }\n\n function test () public pure returns (S_a1126f25 memory) {\n S_a1126f25 memory r;\n {\n bytes16 r_0 = bytes16(0x1b192d259d4a003d63d4fa10cf5180a1);\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x1b192d259d4a003d63d4fa10cf5180a100000000000000000000000000000000" + }, + { + "name": "random-(bytes21)", + "type": "(bytes21)", + "value": ["0xf0ab471b24e8861217784778e5e988d2db7e116eb0"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf0ab471b24e8861217784778e5e988d2db7e116eb0" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060a68061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160208082018352600090915281518082018352740f0ab471b24e8861217784778e5e988d2db7e116eb605c1b9081905282519081529151918290030190f3fea26469706673582212205b57d6db89296344bcbc9f0fa4ea6e7b2495de3540232363a7677cea32549dde64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_29c3139a {\n bytes21 s_0;\n }\n\n function test () public pure returns (S_29c3139a memory) {\n S_29c3139a memory r;\n {\n bytes21 r_0 = bytes21(0xf0ab471b24e8861217784778e5e988d2db7e116eb0);\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0xf0ab471b24e8861217784778e5e988d2db7e116eb00000000000000000000000" + }, + { + "name": "random-(bytes24)", + "type": "(bytes24)", + "value": ["0xdc342499cfae666808f0ee94fd4ff08931aad5be0e505d3c"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xdc342499cfae666808f0ee94fd4ff08931aad5be0e505d3c" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060ae8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051602080820183526000909152815180820183527fdc342499cfae666808f0ee94fd4ff08931aad5be0e505d3c00000000000000009081905282519081529151918290030190f3fea2646970667358221220777cf6e52989ed92a7fadb9fbf8dfe440701fb51c482765f2de1d3ad360ad0e764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fce5fa1a {\n bytes24 s_0;\n }\n\n function test () public pure returns (S_fce5fa1a memory) {\n S_fce5fa1a memory r;\n {\n bytes24 r_0 = bytes24(0xdc342499cfae666808f0ee94fd4ff08931aad5be0e505d3c);\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0xdc342499cfae666808f0ee94fd4ff08931aad5be0e505d3c0000000000000000" + }, + { + "name": "random-(bytes25)", + "type": "(bytes25)", + "value": ["0xb223b86d8033db9687864c5442845456933d821b815db3e02d"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xb223b86d8033db9687864c5442845456933d821b815db3e02d" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060ae8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051602080820183526000909152815180820183527fb223b86d8033db9687864c5442845456933d821b815db3e02d000000000000009081905282519081529151918290030190f3fea2646970667358221220f15492c66d9aad3538ccf3088da4b19c34789eb2af150ec3df26e64d4e5fc12b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_28cc611d {\n bytes25 s_0;\n }\n\n function test () public pure returns (S_28cc611d memory) {\n S_28cc611d memory r;\n {\n bytes25 r_0 = bytes25(0xb223b86d8033db9687864c5442845456933d821b815db3e02d);\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0xb223b86d8033db9687864c5442845456933d821b815db3e02d00000000000000" + }, + { + "name": "random-(bytes6)", + "type": "(bytes6)", + "value": ["0x21f16141a002"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x21f16141a002" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060978061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051602080820183526000909152815180820183526510f8b0a0d00160d11b9081905282519081529151918290030190f3fea2646970667358221220c2e1644690044dcfd103a183df324067dfdbfe3de73ee4e4ece5fd279249d67964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a3f0fe8b {\n bytes6 s_0;\n }\n\n function test () public pure returns (S_a3f0fe8b memory) {\n S_a3f0fe8b memory r;\n {\n bytes6 r_0 = bytes6(0x21f16141a002);\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x21f16141a0020000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes8)", + "type": "(bytes8)", + "value": ["0xe4092c7e602f2769"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xe4092c7e602f2769" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060998061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516020808201835260009091528151808201835267e4092c7e602f276960c01b9081905282519081529151918290030190f3fea2646970667358221220cbecfe5100940c7413702264bac8b0d09e3b4fe6d6d3f8fb0f9d79816ffc227f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b915b7d0 {\n bytes8 s_0;\n }\n\n function test () public pure returns (S_b915b7d0 memory) {\n S_b915b7d0 memory r;\n {\n bytes8 r_0 = bytes8(0xe4092c7e602f2769);\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0xe4092c7e602f2769000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int16)", + "type": "(int16)", + "value": ["-27402"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-27402" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060918061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160208082018352600090915281518082018352616b09199081905282519081529151918290030190f3fea26469706673582212200800c35dc1dcb7ea848ec2194efefeeb42c3ba66763aa3f2f3f89cd4f4ac5c0564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_26007289 {\n int16 s_0;\n }\n\n function test () public pure returns (S_26007289 memory) {\n S_26007289 memory r;\n {\n int16 r_0 = -27402;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94f6" + }, + { + "name": "random-(int200)", + "type": "(int200)", + "value": ["-543743724524076305014218871275020539778907053744360586100627"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-543743724524076305014218871275020539778907053744360586100627" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060a88061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516020808201835260009091528151808201835278569f955e3df69009921503322d4ac3c079bab87b6b8df63f92199081905282519081529151918290030190f3fea2646970667358221220356641e67406ad07fdb771bd57c2df8ccadafecddd7d1958615ad07488c9c4ed64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_530fe426 {\n int200 s_0;\n }\n\n function test () public pure returns (S_530fe426 memory) {\n S_530fe426 memory r;\n {\n int200 r_0 = -543743724524076305014218871275020539778907053744360586100627;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffa9606aa1c2096ff66deafccdd2b53c3f86454784947209c06d" + }, + { + "name": "random-(int232)", + "type": "(int232)", + "value": ["-2618176276362370898099084067003760844264514476765138906113408408975639"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-2618176276362370898099084067003760844264514476765138906113408408975639" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060ae8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051602080820183526000909152815180820183527fffffff9ee2ee0734d2824e1ee6d0bc473c5d6e23df3387cf1ee3a7da398886e99081905282519081529151918290030190f3fea2646970667358221220efaf284d7246228597fb0eb00f16e0d1153030d0521c4ad5bf360bb2ae5ca52b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f2e9ab46 {\n int232 s_0;\n }\n\n function test () public pure returns (S_f2e9ab46 memory) {\n S_f2e9ab46 memory r;\n {\n int232 r_0 = -2618176276362370898099084067003760844264514476765138906113408408975639;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0xffffff9ee2ee0734d2824e1ee6d0bc473c5d6e23df3387cf1ee3a7da398886e9" + }, + { + "name": "random-(int24)", + "type": "(int24)", + "value": ["-17668"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-17668" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060918061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160208082018352600090915281518082018352614503199081905282519081529151918290030190f3fea26469706673582212203eb286356364c25876340972391eb8fc8db6eb84094f3893ae36ce89a4796aa064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a9554343 {\n int24 s_0;\n }\n\n function test () public pure returns (S_a9554343 memory) {\n S_a9554343 memory r;\n {\n int24 r_0 = -17668;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbafc" + }, + { + "name": "random-(int256)", + "type": "(int256)", + "value": ["27802518402575066607249769491585535785998548161249427099741273810538706891652"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "27802518402575066607249769491585535785998548161249427099741273810538706891652" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060b18061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160208082018352600090915281519081019091527f3d77aaf2a26292612f77f218a76f2bb30e4a7289d62dfe1930434ef806b5f38481526040519051815260200160405180910390f3fea2646970667358221220cbc7206b46315a30707e3f1303c033418de4fe1cc8afe45a0cb961586386e62a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f6107def {\n int256 s_0;\n }\n\n function test () public pure returns (S_f6107def memory) {\n S_f6107def memory r;\n {\n int256 r_0 = 27802518402575066607249769491585535785998548161249427099741273810538706891652;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x3d77aaf2a26292612f77f218a76f2bb30e4a7289d62dfe1930434ef806b5f384" + }, + { + "name": "random-(int56)", + "type": "(int56)", + "value": ["22658172671604279"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "22658172671604279" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060958061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516020808201835260009091528151808201835266507f7ced59b6379081905282519081529151918290030190f3fea264697066735822122086d7b676336d976f36731ab967758df117478dfdfab8eada0efb06e4227bcfb764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_14df74d1 {\n int56 s_0;\n }\n\n function test () public pure returns (S_14df74d1 memory) {\n S_14df74d1 memory r;\n {\n int56 r_0 = 22658172671604279;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000507f7ced59b637" + }, + { + "name": "random-(int80)", + "type": "(int80)", + "value": ["-597361723518518618222556"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-597361723518518618222556" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060998061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160208082018352600090915281518082018352697e7f0b3e560999cbefdb199081905282519081529151918290030190f3fea2646970667358221220472c195a8b23c759e2178f982f923b9ff71943e2567079518053960d4a86fe5964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5e77151a {\n int80 s_0;\n }\n\n function test () public pure returns (S_5e77151a memory) {\n S_5e77151a memory r;\n {\n int80 r_0 = -597361723518518618222556;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffff8180f4c1a9f666341024" + }, + { + "name": "random-(string)", + "type": "(string)", + "value": ["Moo é🚀Mo🚀M🚀éoo🚀Moo🚀🚀 🚀 oo o🚀M MoMoéoé🚀 o🚀M 🚀oo"], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mo🚀M🚀éoo🚀Moo🚀🚀 🚀 oo o🚀M MoMoéoé🚀 o🚀M 🚀oo" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610178806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061008f565b60405180910390f35b60408051602081019091526060815260408051602081019091526060815260006040518060800160405280605581526020016100ee60559139825250919050565b6000602080835283518182850152805180604086015260005b818110156100c4578281018401518682016060015283016100a8565b818111156100d6576000606083880101525b50601f01601f19169390930160600194935050505056fe4d6f6f20c3a9f09f9a804d6ff09f9a804df09f9a80c3a96f6ff09f9a804d6f6ff09f9a80f09f9a8020f09f9a802020206f6f206ff09f9a804d204d6f4d6fc3a96fc3a9f09f9a80206ff09f9a804d20f09f9a806f6fa2646970667358221220191e3a197d2921e20bd5c773ce3404e4c844fbbcd4dd6d022bb07d8fa132339764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n function test () public pure returns (S_97fc4627 memory) {\n S_97fc4627 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀Mo🚀M🚀éoo🚀Moo🚀🚀 🚀 oo o🚀M MoMoéoé🚀 o🚀M 🚀oo\";\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a804d6ff09f9a804df09f9a80c3a96f6ff09f9a804d6f6ff09f9a80f09f9a8020f09f9a802020206f6f206ff09f9a804d204d6f4d6fc3a96fc3a9f09f9a80206ff09f9a804d20f09f9a806f6f0000000000000000000000" + }, + { + "name": "random-(uint128)", + "type": "(uint128)", + "value": ["78162529404699341344790272052163598633"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "78162529404699341344790272052163598633" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b50609e8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051602080820183526000909152815180820183526f3acd8e3b35793d1e9c4b377005a159299081905282519081529151918290030190f3fea264697066735822122032d38ad66b0d24fa2ddfb068bc8d9eb98a9809c91c66359eaec8f322a6c6727f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_26255fcf {\n uint128 s_0;\n }\n\n function test () public pure returns (S_26255fcf memory) {\n S_26255fcf memory r;\n {\n uint128 r_0 = 78162529404699341344790272052163598633;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000003acd8e3b35793d1e9c4b377005a15929" + }, + { + "name": "random-(uint16)", + "type": "(uint16)", + "value": ["9275"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "9275" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060908061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516020808201835260009091528151808201835261243b9081905282519081529151918290030190f3fea264697066735822122003b3dffadacfb304679415e028c922e1d6bd00705e9780659ee79c9ec82010bf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_267213ef {\n uint16 s_0;\n }\n\n function test () public pure returns (S_267213ef memory) {\n S_267213ef memory r;\n {\n uint16 r_0 = 9275;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000243b" + }, + { + "name": "random-(uint216)", + "type": "(uint216)", + "value": ["3044574225585255785909769824617452177609355233879489853710262367"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "3044574225585255785909769824617452177609355233879489853710262367" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060a98061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051602080820183526000909152815180820183527a0766a4a83bc88c18803900d1895e9b73eb25f63ed0845f34d9e05f9081905282519081529151918290030190f3fea26469706673582212205416f08a3481c848a8ffe35ee83c78612da518f03a0682b7f960a5ba0a64413064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_070be4eb {\n uint216 s_0;\n }\n\n function test () public pure returns (S_070be4eb memory) {\n S_070be4eb memory r;\n {\n uint216 r_0 = 3044574225585255785909769824617452177609355233879489853710262367;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000766a4a83bc88c18803900d1895e9b73eb25f63ed0845f34d9e05f" + }, + { + "name": "random-(uint224)", + "type": "(uint224)", + "value": ["1282084592987022422242522085630842818150387711887499434337293747163"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "1282084592987022422242522085630842818150387711887499434337293747163" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060aa8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051602080820183526000909152815180820183527b0c2c9333729075a2b70fc0b17606e5d0aca2fd6a68a4e81753e2c3db9081905282519081529151918290030190f3fea2646970667358221220e99453e1e827d2873f7546efefba22dd8d0431f3e7c5085ddebbc8147ec1302164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1fc0f737 {\n uint224 s_0;\n }\n\n function test () public pure returns (S_1fc0f737 memory) {\n S_1fc0f737 memory r;\n {\n uint224 r_0 = 1282084592987022422242522085630842818150387711887499434337293747163;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000c2c9333729075a2b70fc0b17606e5d0aca2fd6a68a4e81753e2c3db" + }, + { + "name": "random-(uint24)", + "type": "(uint24)", + "value": ["1174031"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "1174031" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060918061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051602080820183526000909152815180820183526211ea0f9081905282519081529151918290030190f3fea26469706673582212204b5652923cae9eb53f531ae6a9b7aa368a0fa6b2ff4ab863dcf9b5fc5d7ac6f764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5f492329 {\n uint24 s_0;\n }\n\n function test () public pure returns (S_5f492329 memory) {\n S_5f492329 memory r;\n {\n uint24 r_0 = 1174031;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000011ea0f" + }, + { + "name": "random-(uint40)", + "type": "(uint40)", + "value": ["975645451054"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "975645451054" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060938061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516020808201835260009091528151808201835264e32900232e9081905282519081529151918290030190f3fea26469706673582212209c95221f6c7d8a8aee35ab6dd44a240198dd10320af0f9bec7969f188a2fc62164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9181b294 {\n uint40 s_0;\n }\n\n function test () public pure returns (S_9181b294 memory) {\n S_9181b294 memory r;\n {\n uint40 r_0 = 975645451054;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000e32900232e" + }, + { + "name": "random-(uint64)", + "type": "(uint64)", + "value": ["4247559938102816625"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "4247559938102816625" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160208082018352600090915281518082018352673af25d4258cc6f719081905282519081529151918290030190f3fea26469706673582212206fd7bc2f2124824af078aebef3e62b627e47e397aeca48c329a116472ac6ae4764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f1b7aa7b {\n uint64 s_0;\n }\n\n function test () public pure returns (S_f1b7aa7b memory) {\n S_f1b7aa7b memory r;\n {\n uint64 r_0 = 4247559938102816625;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000003af25d4258cc6f71" + }, + { + "name": "random-(uint72)", + "type": "(uint72)", + "value": ["2250494111447602377695"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "2250494111447602377695" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060978061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051602080820183526000909152815180820183526879ffe136bb96b333df9081905282519081529151918290030190f3fea26469706673582212206062c12fb307ce8110450b30bea5219bb730b25b8acdaf516041ac18cb971ab664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_bdee8c4b {\n uint72 s_0;\n }\n\n function test () public pure returns (S_bdee8c4b memory) {\n S_bdee8c4b memory r;\n {\n uint72 r_0 = 2250494111447602377695;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000079ffe136bb96b333df" + }, + { + "name": "random-(uint80)", + "type": "(uint80)", + "value": ["122208858707769561411055"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "122208858707769561411055" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060988061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051602080820183526000909152815180820183526919e0f49c006ecc136def9081905282519081529151918290030190f3fea264697066735822122059b341ad0690f963b924a810663383db317b1863e882d919d1818e49f27db01764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_54896afd {\n uint80 s_0;\n }\n\n function test () public pure returns (S_54896afd memory) {\n S_54896afd memory r;\n {\n uint80 r_0 = 122208858707769561411055;\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000019e0f49c006ecc136def" + }, + { + "name": "random-address", + "type": "address", + "value": "0x01010D8955e5cECc6705b73064baA37a703d65cB", + "verbose": { + "type": "address", + "value": "0x01010D8955e5cECc6705b73064baA37a703d65cB" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608a8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517301010d8955e5cecc6705b73064baa37a703d65cb815290519081900360200190f3fea2646970667358221220c10ff6617b6805e55dadad03258bca32e620f027e65e5738959badcf635a291864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address) {\n address r = 0x01010D8955e5cECc6705b73064baA37a703d65cB;\n return r;\n }\n}", + "encoded": "0x00000000000000000000000001010d8955e5cecc6705b73064baa37a703d65cb" + }, + { + "name": "random-bool", + "type": "bool", + "value": false, + "verbose": { + "type": "boolean", + "value": false + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607780601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516000815290519081900360200190f3fea2646970667358221220284cde3c646ece15e9b9a8fc7672ad2026e2203570d0f7947e2e2eb79cd4beb064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool) {\n bool r = false;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes1", + "type": "bytes1", + "value": "0xe6", + "verbose": { + "type": "hexstring", + "value": "0xe6" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607a80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051607360f91b815290519081900360200190f3fea2646970667358221220215dfecec49ae4340c0d8ae821b33c44ffeaf99665a08cfd7e71de90179cbceb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes1) {\n bytes1 r = bytes1(0xe6);\n return r;\n }\n}", + "encoded": "0xe600000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes10", + "type": "bytes10", + "value": "0x40aea19dcc610d8b16d4", + "verbose": { + "type": "hexstring", + "value": "0x40aea19dcc610d8b16d4" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608380601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805169102ba86773184362c5b560b21b815290519081900360200190f3fea26469706673582212200024bf9b69cebc60bd86a6a218b11a0ccc86e7e51b71d446294d29b32819dd7164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes10) {\n bytes10 r = bytes10(0x40aea19dcc610d8b16d4);\n return r;\n }\n}", + "encoded": "0x40aea19dcc610d8b16d400000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes11", + "type": "bytes11", + "value": "0xd44e3a9fa2701442669492", + "verbose": { + "type": "hexstring", + "value": "0xd44e3a9fa2701442669492" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608480601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516a6a271d4fd1380a21334a4960a91b815290519081900360200190f3fea26469706673582212208df4350a579ca2373fa2cedce5ba3895cc881dab21679822fe94f48a7348f89064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes11) {\n bytes11 r = bytes11(0xd44e3a9fa2701442669492);\n return r;\n }\n}", + "encoded": "0xd44e3a9fa2701442669492000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes12", + "type": "bytes12", + "value": "0x877f9779d5743ea8b00feb67", + "verbose": { + "type": "hexstring", + "value": "0x877f9779d5743ea8b00feb67" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608580601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516b877f9779d5743ea8b00feb6760a01b815290519081900360200190f3fea26469706673582212201525cab12cabd5a1391872230de8f3bb7d2c179f0df77a1807bd05e6e91f8f1764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes12) {\n bytes12 r = bytes12(0x877f9779d5743ea8b00feb67);\n return r;\n }\n}", + "encoded": "0x877f9779d5743ea8b00feb670000000000000000000000000000000000000000" + }, + { + "name": "random-bytes13", + "type": "bytes13", + "value": "0xc04a4aab8c27dc824ddf2f31db", + "verbose": { + "type": "hexstring", + "value": "0xc04a4aab8c27dc824ddf2f31db" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608680601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516cc04a4aab8c27dc824ddf2f31db60981b815290519081900360200190f3fea2646970667358221220fe0b49566bbcbf839e067bebcba143e234af38333a3015a89b39ff2f65cd13b464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes13) {\n bytes13 r = bytes13(0xc04a4aab8c27dc824ddf2f31db);\n return r;\n }\n}", + "encoded": "0xc04a4aab8c27dc824ddf2f31db00000000000000000000000000000000000000" + }, + { + "name": "random-bytes14", + "type": "bytes14", + "value": "0x955b756fa187410677f35e34d7d2", + "verbose": { + "type": "hexstring", + "value": "0x955b756fa187410677f35e34d7d2" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060878061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516d4aadbab7d0c3a0833bf9af1a6be960911b815290519081900360200190f3fea26469706673582212207b418569108b134523ea12e966560e1fc00319c6a22bdb2cce436cc78e5e547664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes14) {\n bytes14 r = bytes14(0x955b756fa187410677f35e34d7d2);\n return r;\n }\n}", + "encoded": "0x955b756fa187410677f35e34d7d2000000000000000000000000000000000000" + }, + { + "name": "random-bytes15", + "type": "bytes15", + "value": "0xe4be19eca22678edf23dbbd8eaff7e", + "verbose": { + "type": "hexstring", + "value": "0xe4be19eca22678edf23dbbd8eaff7e" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060888061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516e725f0cf651133c76f91eddec757fbf60891b815290519081900360200190f3fea2646970667358221220b84705619b75be162ddcf86f87705424b0549dd9d256620f49a06b3c30da6d9b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes15) {\n bytes15 r = bytes15(0xe4be19eca22678edf23dbbd8eaff7e);\n return r;\n }\n}", + "encoded": "0xe4be19eca22678edf23dbbd8eaff7e0000000000000000000000000000000000" + }, + { + "name": "random-bytes16", + "type": "bytes16", + "value": "0xbce511e04fffbb632f04623d274c6900", + "verbose": { + "type": "hexstring", + "value": "0xbce511e04fffbb632f04623d274c6900" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060888061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516ebce511e04fffbb632f04623d274c6960881b815290519081900360200190f3fea2646970667358221220ac0b79a1c105e8594527a6869aae2859d9c69e8e18399f7578d3d30d65c40a7664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes16) {\n bytes16 r = bytes16(0xbce511e04fffbb632f04623d274c6900);\n return r;\n }\n}", + "encoded": "0xbce511e04fffbb632f04623d274c690000000000000000000000000000000000" + }, + { + "name": "random-bytes17", + "type": "bytes17", + "value": "0xcbcf179179cc5764c2a6fd3030a442dc1b", + "verbose": { + "type": "hexstring", + "value": "0xcbcf179179cc5764c2a6fd3030a442dc1b" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608a8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805170cbcf179179cc5764c2a6fd3030a442dc1b60781b815290519081900360200190f3fea26469706673582212200d84ab895135b978dbe45fa3e11f2b9caded378a658dc47931b447ec6a6b923664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes17) {\n bytes17 r = bytes17(0xcbcf179179cc5764c2a6fd3030a442dc1b);\n return r;\n }\n}", + "encoded": "0xcbcf179179cc5764c2a6fd3030a442dc1b000000000000000000000000000000" + }, + { + "name": "random-bytes18", + "type": "bytes18", + "value": "0xeb027976754eee5cf138ea8dd15773df192f", + "verbose": { + "type": "hexstring", + "value": "0xeb027976754eee5cf138ea8dd15773df192f" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608b8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805171eb027976754eee5cf138ea8dd15773df192f60701b815290519081900360200190f3fea2646970667358221220f5dfbc740691845d33042fff8cade63bdd255c65bd4402dfa7f4f91dda3607a764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes18) {\n bytes18 r = bytes18(0xeb027976754eee5cf138ea8dd15773df192f);\n return r;\n }\n}", + "encoded": "0xeb027976754eee5cf138ea8dd15773df192f0000000000000000000000000000" + }, + { + "name": "random-bytes19", + "type": "bytes19", + "value": "0x0bef39c3343414597f60ffb527b9de28b4daa7", + "verbose": { + "type": "hexstring", + "value": "0x0bef39c3343414597f60ffb527b9de28b4daa7" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608c8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051720bef39c3343414597f60ffb527b9de28b4daa760681b815290519081900360200190f3fea2646970667358221220bbb2913c82fc0594cf2f1787befb8e1c36b8ca56cd195642f5981ce49579192364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes19) {\n bytes19 r = bytes19(0x0bef39c3343414597f60ffb527b9de28b4daa7);\n return r;\n }\n}", + "encoded": "0x0bef39c3343414597f60ffb527b9de28b4daa700000000000000000000000000" + }, + { + "name": "random-bytes2", + "type": "bytes2", + "value": "0xcd3a", + "verbose": { + "type": "hexstring", + "value": "0xcd3a" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607b80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805161669d60f11b815290519081900360200190f3fea2646970667358221220d7b4b17ec91e305f3c7ef6f1269fdce284fbc2910a986069a76cce73108c2d5964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes2) {\n bytes2 r = bytes2(0xcd3a);\n return r;\n }\n}", + "encoded": "0xcd3a000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes20", + "type": "bytes20", + "value": "0x4603c7b2c7652fc2137dca1260b23024c318c8a2", + "verbose": { + "type": "hexstring", + "value": "0x4603c7b2c7652fc2137dca1260b23024c318c8a2" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608d8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051732301e3d963b297e109bee50930591812618c645160611b815290519081900360200190f3fea26469706673582212203df31b939df9f809b5b0e04737203e31d4f3ca5ea91ea797feeea91b512f614764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes20) {\n bytes20 r = bytes20(0x4603c7B2c7652fC2137dCa1260B23024C318C8a2);\n return r;\n }\n}", + "encoded": "0x4603c7b2c7652fc2137dca1260b23024c318c8a2000000000000000000000000" + }, + { + "name": "random-bytes21", + "type": "bytes21", + "value": "0x1484ff0c40b3ed2db0d25c9c38ad48ebdfd756f261", + "verbose": { + "type": "hexstring", + "value": "0x1484ff0c40b3ed2db0d25c9c38ad48ebdfd756f261" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608e8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051741484ff0c40b3ed2db0d25c9c38ad48ebdfd756f26160581b815290519081900360200190f3fea264697066735822122014add29ac6d286e0cdee4c0e928b29b20e29b07332d3c0fbb359858ec863999864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes21) {\n bytes21 r = bytes21(0x1484ff0c40b3ed2db0d25c9c38ad48ebdfd756f261);\n return r;\n }\n}", + "encoded": "0x1484ff0c40b3ed2db0d25c9c38ad48ebdfd756f2610000000000000000000000" + }, + { + "name": "random-bytes22", + "type": "bytes22", + "value": "0x6a37664d1028fa4ef06eaaf4f2cd150e34ea4b95733c", + "verbose": { + "type": "hexstring", + "value": "0x6a37664d1028fa4ef06eaaf4f2cd150e34ea4b95733c" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608f8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051751a8dd993440a3e93bc1baabd3cb345438d3a92e55ccf60521b815290519081900360200190f3fea26469706673582212203c4e6f1de07a8b3c584d0416cb8121de3f9da72b4c2d9ee3d9afac880e22f21d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes22) {\n bytes22 r = bytes22(0x6a37664d1028fa4ef06eaaf4f2cd150e34ea4b95733c);\n return r;\n }\n}", + "encoded": "0x6a37664d1028fa4ef06eaaf4f2cd150e34ea4b95733c00000000000000000000" + }, + { + "name": "random-bytes23", + "type": "bytes23", + "value": "0x96ea30c50c807fd0686d2800560835208f66a60144f672", + "verbose": { + "type": "hexstring", + "value": "0x96ea30c50c807fd0686d2800560835208f66a60144f672" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517f96ea30c50c807fd0686d2800560835208f66a60144f672000000000000000000815290519081900360200190f3fea26469706673582212204b6d3802911ea91de10d0666a45050b301eb2742369c221de07932b7a5a50c4e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes23) {\n bytes23 r = bytes23(0x96ea30c50c807fd0686d2800560835208f66a60144f672);\n return r;\n }\n}", + "encoded": "0x96ea30c50c807fd0686d2800560835208f66a60144f672000000000000000000" + }, + { + "name": "random-bytes24", + "type": "bytes24", + "value": "0x8fe567a1bb957458ac2ba8653556c06464d2e4d69be214b7", + "verbose": { + "type": "hexstring", + "value": "0x8fe567a1bb957458ac2ba8653556c06464d2e4d69be214b7" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517f8fe567a1bb957458ac2ba8653556c06464d2e4d69be214b70000000000000000815290519081900360200190f3fea2646970667358221220eed092774f3a74bcd58b7afb329313466677f866187a6b45bf03bc557e7c78a264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes24) {\n bytes24 r = bytes24(0x8fe567a1bb957458ac2ba8653556c06464d2e4d69be214b7);\n return r;\n }\n}", + "encoded": "0x8fe567a1bb957458ac2ba8653556c06464d2e4d69be214b70000000000000000" + }, + { + "name": "random-bytes25", + "type": "bytes25", + "value": "0xe1b7373a5b8f605fea4f2939656952ea26e60cf14f267c19dc", + "verbose": { + "type": "hexstring", + "value": "0xe1b7373a5b8f605fea4f2939656952ea26e60cf14f267c19dc" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517fe1b7373a5b8f605fea4f2939656952ea26e60cf14f267c19dc00000000000000815290519081900360200190f3fea264697066735822122098953bf8506b43f2535675790cb96d5bde43ac2199f9f72eb8b81369f2e0889764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes25) {\n bytes25 r = bytes25(0xe1b7373a5b8f605fea4f2939656952ea26e60cf14f267c19dc);\n return r;\n }\n}", + "encoded": "0xe1b7373a5b8f605fea4f2939656952ea26e60cf14f267c19dc00000000000000" + }, + { + "name": "random-bytes26", + "type": "bytes26", + "value": "0xda703890717a7bdb0ee1a73714697c1b6d24f82f5cba04d87718", + "verbose": { + "type": "hexstring", + "value": "0xda703890717a7bdb0ee1a73714697c1b6d24f82f5cba04d87718" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517fda703890717a7bdb0ee1a73714697c1b6d24f82f5cba04d87718000000000000815290519081900360200190f3fea2646970667358221220913628cc081cee66a8c957ee54c9d8c806723ace8708ad02ee4455c56b1c23da64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes26) {\n bytes26 r = bytes26(0xda703890717a7bdb0ee1a73714697c1b6d24f82f5cba04d87718);\n return r;\n }\n}", + "encoded": "0xda703890717a7bdb0ee1a73714697c1b6d24f82f5cba04d87718000000000000" + }, + { + "name": "random-bytes27", + "type": "bytes27", + "value": "0xdc72e3c4b9935700147080c2c164fb492e7787a933e55c01c4850c", + "verbose": { + "type": "hexstring", + "value": "0xdc72e3c4b9935700147080c2c164fb492e7787a933e55c01c4850c" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517fdc72e3c4b9935700147080c2c164fb492e7787a933e55c01c4850c0000000000815290519081900360200190f3fea2646970667358221220006a28fcc598e4b7dbb203dbad00a6bfd4b2bd57278e1c703a96a937289515ca64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes27) {\n bytes27 r = bytes27(0xdc72e3c4b9935700147080c2c164fb492e7787a933e55c01c4850c);\n return r;\n }\n}", + "encoded": "0xdc72e3c4b9935700147080c2c164fb492e7787a933e55c01c4850c0000000000" + }, + { + "name": "random-bytes28", + "type": "bytes28", + "value": "0x633e51d725e1f444b9a724729fb8bd052ec4737eceba804e846a32b4", + "verbose": { + "type": "hexstring", + "value": "0x633e51d725e1f444b9a724729fb8bd052ec4737eceba804e846a32b4" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517f633e51d725e1f444b9a724729fb8bd052ec4737eceba804e846a32b400000000815290519081900360200190f3fea26469706673582212200747c0f1fb0cc0e21f58ef140d8491a7c49fee77ae40d798b70fff4eef2d044d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes28) {\n bytes28 r = bytes28(0x633e51d725e1f444b9a724729fb8bd052ec4737eceba804e846a32b4);\n return r;\n }\n}", + "encoded": "0x633e51d725e1f444b9a724729fb8bd052ec4737eceba804e846a32b400000000" + }, + { + "name": "random-bytes29", + "type": "bytes29", + "value": "0x5fe4cbc14ae9bbb97ade4a806927659dc69b19b83ec25266ae25b61aad", + "verbose": { + "type": "hexstring", + "value": "0x5fe4cbc14ae9bbb97ade4a806927659dc69b19b83ec25266ae25b61aad" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517f5fe4cbc14ae9bbb97ade4a806927659dc69b19b83ec25266ae25b61aad000000815290519081900360200190f3fea26469706673582212207e954eb63a8d77b0ca234248429c61a26fd979fd8bc7950452e923c3c394cca464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes29) {\n bytes29 r = bytes29(0x5fe4cbc14ae9bbb97ade4a806927659dc69b19b83ec25266ae25b61aad);\n return r;\n }\n}", + "encoded": "0x5fe4cbc14ae9bbb97ade4a806927659dc69b19b83ec25266ae25b61aad000000" + }, + { + "name": "random-bytes3", + "type": "bytes3", + "value": "0xc4a145", + "verbose": { + "type": "hexstring", + "value": "0xc4a145" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607c80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805162c4a14560e81b815290519081900360200190f3fea26469706673582212207e01f99d933fac98d3f0f06e286c6423659f0c2dd0c05c6529d90c3f4bdd726b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes3) {\n bytes3 r = bytes3(0xc4a145);\n return r;\n }\n}", + "encoded": "0xc4a1450000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes30", + "type": "bytes30", + "value": "0x30f241ca2691711b6289b07e9d60adcd530d82049e195a22202170b18328", + "verbose": { + "type": "hexstring", + "value": "0x30f241ca2691711b6289b07e9d60adcd530d82049e195a22202170b18328" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517f30f241ca2691711b6289b07e9d60adcd530d82049e195a22202170b183280000815290519081900360200190f3fea2646970667358221220ba9c09c709ac08e5bce49d016a0f174fae1b7f46d49057796de2a6b1dde077b764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes30) {\n bytes30 r = bytes30(0x30f241ca2691711b6289b07e9d60adcd530d82049e195a22202170b18328);\n return r;\n }\n}", + "encoded": "0x30f241ca2691711b6289b07e9d60adcd530d82049e195a22202170b183280000" + }, + { + "name": "random-bytes31", + "type": "bytes31", + "value": "0xd57fde2c0dae771d5cb66092b8905ba5691226740d7398459c60712a5793f0", + "verbose": { + "type": "hexstring", + "value": "0xd57fde2c0dae771d5cb66092b8905ba5691226740d7398459c60712a5793f0" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517fd57fde2c0dae771d5cb66092b8905ba5691226740d7398459c60712a5793f000815290519081900360200190f3fea2646970667358221220359f5433d8e5dc6741aff8390d1c6f702e2b901ecdad1b30ca454a7b2847d47564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes31) {\n bytes31 r = bytes31(0xd57fde2c0dae771d5cb66092b8905ba5691226740d7398459c60712a5793f0);\n return r;\n }\n}", + "encoded": "0xd57fde2c0dae771d5cb66092b8905ba5691226740d7398459c60712a5793f000" + }, + { + "name": "random-bytes32", + "type": "bytes32", + "value": "0x2f858d197c64331bd6f5df571f1b82871ad380bb85031324bbed22bd71196ec6", + "verbose": { + "type": "hexstring", + "value": "0x2f858d197c64331bd6f5df571f1b82871ad380bb85031324bbed22bd71196ec6" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b7f2f858d197c64331bd6f5df571f1b82871ad380bb85031324bbed22bd71196ec660405190815260200160405180910390f3fea26469706673582212204bf98126419b04d9c54cc17aaaf7089ab3d1a58a879323e2eb532fa6cdcd7cce64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes32) {\n bytes32 r = bytes32(0x2f858d197c64331bd6f5df571f1b82871ad380bb85031324bbed22bd71196ec6);\n return r;\n }\n}", + "encoded": "0x2f858d197c64331bd6f5df571f1b82871ad380bb85031324bbed22bd71196ec6" + }, + { + "name": "random-bytes4", + "type": "bytes4", + "value": "0xa09ba3b1", + "verbose": { + "type": "hexstring", + "value": "0xa09ba3b1" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607d80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805163a09ba3b160e01b815290519081900360200190f3fea26469706673582212202f1078853dc16a29a78c1756d78a8193c398d4c2d4a7e66a8db8b024453acb6364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes4) {\n bytes4 r = bytes4(0xa09ba3b1);\n return r;\n }\n}", + "encoded": "0xa09ba3b100000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes5", + "type": "bytes5", + "value": "0x8eef2efdb1", + "verbose": { + "type": "hexstring", + "value": "0x8eef2efdb1" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607e80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051648eef2efdb160d81b815290519081900360200190f3fea2646970667358221220f2b5df6df7f402ab389cfb010e499cd4073a1bd5079db8736de7e2afbea52c0564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes5) {\n bytes5 r = bytes5(0x8eef2efdb1);\n return r;\n }\n}", + "encoded": "0x8eef2efdb1000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes6", + "type": "bytes6", + "value": "0x7d23c4ec970b", + "verbose": { + "type": "hexstring", + "value": "0x7d23c4ec970b" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607f80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051657d23c4ec970b60d01b815290519081900360200190f3fea26469706673582212209d39bb561c73cdef23580d1b2b3f5062004478dc7c64b38d30bd828950cf99da64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes6) {\n bytes6 r = bytes6(0x7d23c4ec970b);\n return r;\n }\n}", + "encoded": "0x7d23c4ec970b0000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes7", + "type": "bytes7", + "value": "0xee0456738cd294", + "verbose": { + "type": "hexstring", + "value": "0xee0456738cd294" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608080601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051663b81159ce334a560ca1b815290519081900360200190f3fea2646970667358221220ceb17ef7171070d6368eb4ffe3dbc2ddd4f37ee01df411badd89d2cd4b343cb064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes7) {\n bytes7 r = bytes7(0xee0456738cd294);\n return r;\n }\n}", + "encoded": "0xee0456738cd29400000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes8", + "type": "bytes8", + "value": "0xe7661e40caa66524", + "verbose": { + "type": "hexstring", + "value": "0xe7661e40caa66524" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608180601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516739d9879032a9994960c21b815290519081900360200190f3fea2646970667358221220ebccd36e6ee302e3704d01922326511a4438dcf1b2bf5417cc142a9bab3d832b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes8) {\n bytes8 r = bytes8(0xe7661e40caa66524);\n return r;\n }\n}", + "encoded": "0xe7661e40caa66524000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes9", + "type": "bytes9", + "value": "0x64c14141b98fdad31c", + "verbose": { + "type": "hexstring", + "value": "0x64c14141b98fdad31c" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608280601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805168193050506e63f6b4c760ba1b815290519081900360200190f3fea264697066735822122093185c32de39a7e6a67021b7af534d093429936154487ea71ebe992d3a288ccc64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes9) {\n bytes9 r = bytes9(0x64c14141b98fdad31c);\n return r;\n }\n}", + "encoded": "0x64c14141b98fdad31c0000000000000000000000000000000000000000000000" + }, + { + "name": "random-int", + "type": "int", + "value": "-26255925039512057524307572166989437894713560916285620166517646090861937311528", + "verbose": { + "type": "number", + "value": "-26255925039512057524307572166989437894713560916285620166517646090861937311528" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b7fc5f3ac4d83b8e4876858294faaf863b82ae7e8024600881b6fa10abc24e5c0d860405190815260200160405180910390f3fea2646970667358221220f4dbb475ec0a858a09bcbffeb4432cf87e81a162681e5009c59b44ced9f1718964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int) {\n int r = -26255925039512057524307572166989437894713560916285620166517646090861937311528;\n return r;\n }\n}", + "encoded": "0xc5f3ac4d83b8e4876858294faaf863b82ae7e8024600881b6fa10abc24e5c0d8" + }, + { + "name": "random-int104", + "type": "int104", + "value": "-8562581926942599809533268621101", + "verbose": { + "type": "number", + "value": "-8562581926942599809533268621101" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608480601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516c6c1331c36bd06ddabaa116772c19815290519081900360200190f3fea2646970667358221220c8160c93767b116a583c36623637c20b1a9eed1a6460590f4ab1ef5cf58e9de964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int104) {\n int104 r = -8562581926942599809533268621101;\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffff93ecce3c942f9225455ee988d3" + }, + { + "name": "random-int112", + "type": "int112", + "value": "-8624528862358063573753019443579", + "verbose": { + "type": "number", + "value": "-8624528862358063573753019443579" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608480601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516c6cdb5b113da09f29611a5b297a19815290519081900360200190f3fea2646970667358221220f6ab81667531d2afa9849f87c3b7ae9f0b218fcd62a05cfef7cef42fc87f1cdf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int112) {\n int112 r = -8624528862358063573753019443579;\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffff9324a4eec25f60d69ee5a4d685" + }, + { + "name": "random-int120", + "type": "int120", + "value": "-462766101327592648630431727750229060", + "verbose": { + "type": "number", + "value": "-462766101327592648630431727750229060" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608680601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516e5920215e9cef3f5d2c992b29d02c4319815290519081900360200190f3fea2646970667358221220bee2c18147e1d6360ff543d3d48b8dd895c8549ac05c45017566ea5cdb48f14864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int120) {\n int120 r = -462766101327592648630431727750229060;\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffa6dfdea16310c0a2d366d4d62fd3bc" + }, + { + "name": "random-int128", + "type": "int128", + "value": "-55184947544049518631110762832686643522", + "verbose": { + "type": "number", + "value": "-55184947544049518631110762832686643522" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060878061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516f29843bfac96994bcecebe57b40d6794119815290519081900360200190f3fea2646970667358221220532b5aa8bf32fa9ea767e48012ac0db4f4fa28e30be3e4004e621876aa1b31e664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int128) {\n int128 r = -55184947544049518631110762832686643522;\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffd67bc40536966b4313141a84bf2986be" + }, + { + "name": "random-int136", + "type": "int136", + "value": "2775798966944847613333829391810929523411", + "verbose": { + "type": "number", + "value": "2775798966944847613333829391810929523411" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060878061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051700828476f5c691c77b7877b024caf467ad3815290519081900360200190f3fea26469706673582212203ea1e73befc31c2548f83d004b3513b9a728c4a7b152b1f50381519ed98ee73d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int136) {\n int136 r = 2775798966944847613333829391810929523411;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000828476f5c691c77b7877b024caf467ad3" + }, + { + "name": "random-int144", + "type": "int144", + "value": "-363718379591518793727767879689219529367686", + "verbose": { + "type": "number", + "value": "-363718379591518793727767879689219529367686" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060898061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805171042cdf4bdba15c939427b4ae3f29d8c5e08519815290519081900360200190f3fea264697066735822122082289b5b4297836b267b88411210c42e407fcd28ff4967526e56cfd343bc8f3764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int144) {\n int144 r = -363718379591518793727767879689219529367686;\n return r;\n }\n}", + "encoded": "0xfffffffffffffffffffffffffffffbd320b4245ea36c6bd84b51c0d6273a1f7a" + }, + { + "name": "random-int152", + "type": "int152", + "value": "-147749319219988340932695550711932801186883833", + "verbose": { + "type": "number", + "value": "-147749319219988340932695550711932801186883833" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608a8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517206a01439a6dc43d91da2ac748342549fe968f819815290519081900360200190f3fea26469706673582212201faa4bb919c692cf590d6e09adbb65ddc3587078b3a723c89b4bce1e49feaaf864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int152) {\n int152 r = -147749319219988340932695550711932801186883833;\n return r;\n }\n}", + "encoded": "0xfffffffffffffffffffffffffff95febc65923bc26e25d538b7cbdab60169707" + }, + { + "name": "random-int16", + "type": "int16", + "value": "13823", + "verbose": { + "type": "number", + "value": "13823" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607880601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516135ff815290519081900360200190f3fea2646970667358221220cf151814d55a28c0d040906a3458ec3f236eb04c7c47a083db85256b8dfe304464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int16) {\n int16 r = 13823;\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000035ff" + }, + { + "name": "random-int160", + "type": "int160", + "value": "151119732203137519047732454126318610094325788070", + "verbose": { + "type": "number", + "value": "151119732203137519047732454126318610094325788070" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608a8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051731a787172c1a442ff6874130ffc416c1f3d1c6da6815290519081900360200190f3fea26469706673582212204c9060b2d50998672974eb25db49c34cdd1a4ea064d0dca03daaa7b21cd785c564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int160) {\n int160 r = 151119732203137519047732454126318610094325788070;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000001a787172c1a442ff6874130ffc416c1f3d1c6da6" + }, + { + "name": "random-int168", + "type": "int168", + "value": "-49282786805534471400299016326292420482724598195631", + "verbose": { + "type": "number", + "value": "-49282786805534471400299016326292420482724598195631" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608c8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517421b87c974ab65c89d262412516ecd870fadfad25ae19815290519081900360200190f3fea26469706673582212203016950e8d0f6c37b999f938722cf8e7ed07ee7a36c2e0d93efa5bc7674bd85564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int168) {\n int168 r = -49282786805534471400299016326292420482724598195631;\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffde478368b549a3762d9dbedae913278f052052da51" + }, + { + "name": "random-int176", + "type": "int176", + "value": "6647903707472561280319565962196032177978666206339670", + "verbose": { + "type": "number", + "value": "6647903707472561280319565962196032177978666206339670" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608c8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517511c4ae2833495783224afa4a98d4b89a6fe391d3a256815290519081900360200190f3fea26469706673582212202f7b7eece1a2383685cbe7c5e85853281b3ab000b600ae552bfa06aa1fce208864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int176) {\n int176 r = 6647903707472561280319565962196032177978666206339670;\n return r;\n }\n}", + "encoded": "0x0000000000000000000011c4ae2833495783224afa4a98d4b89a6fe391d3a256" + }, + { + "name": "random-int184", + "type": "int184", + "value": "-380751355982565965197402108514891290357791703621900548", + "verbose": { + "type": "number", + "value": "-380751355982565965197402108514891290357791703621900548" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608e8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517603f9a8a64db1dc2f8681bcb020c14bb5a61803be1f190319815290519081900360200190f3fea2646970667358221220ae281f464d09c7acd2ec5c87dd14a7653d1235978036a6bb86a4273ec0c9063c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int184) {\n int184 r = -380751355982565965197402108514891290357791703621900548;\n return r;\n }\n}", + "encoded": "0xfffffffffffffffffffc065759b24e23d0797e434fdf3eb44a59e7fc41e0e6fc" + }, + { + "name": "random-int192", + "type": "int192", + "value": "2724577381513482373522931652777613141929354012702272431296", + "verbose": { + "type": "number", + "value": "2724577381513482373522931652777613141929354012702272431296" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608e8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051776f1dea46751f2bbe88a44915d1f37ae6dc97a79311f0a4c0815290519081900360200190f3fea2646970667358221220cbbe9cd94eea24a799d8c98028019d5d490985e06e64f811b6f7bdf6e6f152b364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int192) {\n int192 r = 2724577381513482373522931652777613141929354012702272431296;\n return r;\n }\n}", + "encoded": "0x00000000000000006f1dea46751f2bbe88a44915d1f37ae6dc97a79311f0a4c0" + }, + { + "name": "random-int200", + "type": "int200", + "value": "199439548901092738437200165153811973647433862120145899508764", + "verbose": { + "type": "number", + "value": "199439548901092738437200165153811973647433862120145899508764" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608f8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051781fc5c60c197bf065881ce3a417a20d6de67c95ca3a6590541c815290519081900360200190f3fea264697066735822122029521bb1fe121d5e9c544c2592e77faede6614e082ccc790c168c329bce62ecb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int200) {\n int200 r = 199439548901092738437200165153811973647433862120145899508764;\n return r;\n }\n}", + "encoded": "0x000000000000001fc5c60c197bf065881ce3a417a20d6de67c95ca3a6590541c" + }, + { + "name": "random-int208", + "type": "int208", + "value": "-145081760657922645913317772039034132032200546213034639370012249", + "verbose": { + "type": "number", + "value": "-145081760657922645913317772039034132032200546213034639370012249" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060918061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051795a48dba1ac89b63618acd056621774dd60a7ef7f891f64c8c65819815290519081900360200190f3fea2646970667358221220568ca528e82550f3657434a9596643a897d1a3d3218cf5bfc990944d1266c5b164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int208) {\n int208 r = -145081760657922645913317772039034132032200546213034639370012249;\n return r;\n }\n}", + "encoded": "0xffffffffffffa5b7245e537649c9e7532fa99de88b229f58108076e09b3739a7" + }, + { + "name": "random-int216", + "type": "int216", + "value": "37231349733597917415470434925349371338876454545686076902114676815", + "verbose": { + "type": "number", + "value": "37231349733597917415470434925349371338876454545686076902114676815" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060918061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517a5a812035ca04fbbc5cdbc14a1a5ec1a941c5cb8ae25f28dec9504f815290519081900360200190f3fea2646970667358221220ca4385948500ae40e0276dd7ecc00e3a4fa9dea260634d845d844941ac5ba18864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int216) {\n int216 r = 37231349733597917415470434925349371338876454545686076902114676815;\n return r;\n }\n}", + "encoded": "0x00000000005a812035ca04fbbc5cdbc14a1a5ec1a941c5cb8ae25f28dec9504f" + }, + { + "name": "random-int224", + "type": "int224", + "value": "-2643979962046221639837115164504645921304153958933631827251227519824", + "verbose": { + "type": "number", + "value": "-2643979962046221639837115164504645921304153958933631827251227519824" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517fffffffffe6e4d73aed41f3f8a1f9a907caaf1251323982198597f57347f814b0815290519081900360200190f3fea26469706673582212207a46acecbd41069c957d24c52a498f56283dd87f6f13653d62adb4129519d62a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int224) {\n int224 r = -2643979962046221639837115164504645921304153958933631827251227519824;\n return r;\n }\n}", + "encoded": "0xffffffffe6e4d73aed41f3f8a1f9a907caaf1251323982198597f57347f814b0" + }, + { + "name": "random-int232", + "type": "int232", + "value": "-1199739459909607425085838105297782153487991194393672195814284403310503", + "verbose": { + "type": "number", + "value": "-1199739459909607425085838105297782153487991194393672195814284403310503" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517fffffffd37fcaed2728a32991e78079ccc5803270706e7eeef230bcc41c118059815290519081900360200190f3fea26469706673582212200775fb6a0376c2c86820c894872ebc5d2c07485d87f1f4acb665610d97b777bd64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int232) {\n int232 r = -1199739459909607425085838105297782153487991194393672195814284403310503;\n return r;\n }\n}", + "encoded": "0xffffffd37fcaed2728a32991e78079ccc5803270706e7eeef230bcc41c118059" + }, + { + "name": "random-int24", + "type": "int24", + "value": "-4622596", + "verbose": { + "type": "number", + "value": "-4622596" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607a80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516246890319815290519081900360200190f3fea264697066735822122009df45c81689d8235e54894622cc72c4038568a09e1a7f1d3b7a11cd0bec2b7d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int24) {\n int24 r = -4622596;\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb976fc" + }, + { + "name": "random-int240", + "type": "int240", + "value": "-112189086378421734275432940598331757030895011393237596929733524338085420", + "verbose": { + "type": "number", + "value": "-112189086378421734275432940598331757030895011393237596929733524338085420" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517fffffefbeacee11c7a290df0ce4ce2c05c913612154fd6d3f3c2cdb7c6a1e71d4815290519081900360200190f3fea26469706673582212201cf422c1f294849404c456be79fcfec792868c581bf00b68bde361e722ec287c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int240) {\n int240 r = -112189086378421734275432940598331757030895011393237596929733524338085420;\n return r;\n }\n}", + "encoded": "0xffffefbeacee11c7a290df0ce4ce2c05c913612154fd6d3f3c2cdb7c6a1e71d4" + }, + { + "name": "random-int248", + "type": "int248", + "value": "-136391232753734294032458996424669437269638260940933792517004359432318895236", + "verbose": { + "type": "number", + "value": "-136391232753734294032458996424669437269638260940933792517004359432318895236" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517fffb2ce2801758fa72dc9ad2a6a1f706513e38a95031ca89d981b0b502041bb7c815290519081900360200190f3fea2646970667358221220e3d09025886e43f1d7a608f6b358a5814ff8f3228822256f04bdfe13d9ee9db764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int248) {\n int248 r = -136391232753734294032458996424669437269638260940933792517004359432318895236;\n return r;\n }\n}", + "encoded": "0xffb2ce2801758fa72dc9ad2a6a1f706513e38a95031ca89d981b0b502041bb7c" + }, + { + "name": "random-int256", + "type": "int256", + "value": "17341743117399148630397984039620022603237598144338917275043206886377469215133", + "verbose": { + "type": "number", + "value": "17341743117399148630397984039620022603237598144338917275043206886377469215133" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b7f2657142a58d3cc787e089ca7f20a6b66776ed5b04dc9d4dceef253d7b697819d60405190815260200160405180910390f3fea2646970667358221220c07cb2a46f789439dca44d9e5e9ff87983ada70d570b8dc5098510f920815a4d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int256) {\n int256 r = 17341743117399148630397984039620022603237598144338917275043206886377469215133;\n return r;\n }\n}", + "encoded": "0x2657142a58d3cc787e089ca7f20a6b66776ed5b04dc9d4dceef253d7b697819d" + }, + { + "name": "random-int32", + "type": "int32", + "value": "-141365570", + "verbose": { + "type": "number", + "value": "-141365570" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607b80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805163086d114119815290519081900360200190f3fea2646970667358221220f9b3a6e399835e1397e71a8ba3e0f9068639a783ce6016027130e8cd91318bba64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int32) {\n int32 r = -141365570;\n return r;\n }\n}", + "encoded": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffff792eebe" + }, + { + "name": "random-int40", + "type": "int40", + "value": "82472483236", + "verbose": { + "type": "number", + "value": "82472483236" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607b80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051641333be39a4815290519081900360200190f3fea264697066735822122041c1a61d3e60d7526f1f11c8fdf1ed50718379b668900ea9b2d40f0b4899740564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int40) {\n int40 r = 82472483236;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000001333be39a4" + }, + { + "name": "random-int48", + "type": "int48", + "value": "66155558158762", + "verbose": { + "type": "number", + "value": "66155558158762" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607c80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051653c2b0a8b41aa815290519081900360200190f3fea26469706673582212209b62f3489d6e4279747b5352eaa1aa0353cf50df2ecfba51f64311173a6651f864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int48) {\n int48 r = 66155558158762;\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000003c2b0a8b41aa" + }, + { + "name": "random-int56", + "type": "int56", + "value": "-19966811269996487", + "verbose": { + "type": "number", + "value": "-19966811269996487" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607e80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516646efb5850b9fc619815290519081900360200190f3fea2646970667358221220225004e46102f9099fb621b2a47cde095bdeb292ad79a8eef4a57eb87b39c9b764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int56) {\n int56 r = -19966811269996487;\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffffffffffb9104a7af46039" + }, + { + "name": "random-int64", + "type": "int64", + "value": "4255346393493761394", + "verbose": { + "type": "number", + "value": "4255346393493761394" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607e80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051673b0e06ffc46f6d72815290519081900360200190f3fea2646970667358221220f4a86958aa8b3d80c651ba824ab5993198c388c01f0f278aead8ec8a4f533c7264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int64) {\n int64 r = 4255346393493761394;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000003b0e06ffc46f6d72" + }, + { + "name": "random-int72", + "type": "int72", + "value": "2324338567697373784283", + "verbose": { + "type": "number", + "value": "2324338567697373784283" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607f80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051687e00ad6c727e32e8db815290519081900360200190f3fea264697066735822122066dd00a0f42314f1ad122ca83a919193735140793c33f8c48c2a1f5f5e0243b564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int72) {\n int72 r = 2324338567697373784283;\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000007e00ad6c727e32e8db" + }, + { + "name": "random-int8", + "type": "int8", + "value": "-48", + "verbose": { + "type": "number", + "value": "-48" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607880601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051602f19815290519081900360200190f3fea2646970667358221220f9cf83a30e2bdb322d22425094f05b255f5c573663b263916c9f3378f7db11a264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int8) {\n int8 r = -48;\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0" + }, + { + "name": "random-int80", + "type": "int80", + "value": "500244458024648396165024", + "verbose": { + "type": "number", + "value": "500244458024648396165024" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608080601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516969ee4e70c4b00dd6cfa0815290519081900360200190f3fea2646970667358221220627bdd8de7defce9a123fb526d9a8483e86208e19ae07bfcbdb7774c47f0553e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int80) {\n int80 r = 500244458024648396165024;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000069ee4e70c4b00dd6cfa0" + }, + { + "name": "random-int88", + "type": "int88", + "value": "-66461998403773885279080344", + "verbose": { + "type": "number", + "value": "-66461998403773885279080344" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608280601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516a36f9e027218129919b8f9719815290519081900360200190f3fea26469706673582212207db5cc1176bbb496f287c593dd6fa213acb56a78f1ce00226fa29b124c71435364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int88) {\n int88 r = -66461998403773885279080344;\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffc9061fd8de7ed66e647068" + }, + { + "name": "random-int96", + "type": "int96", + "value": "-37552556857280689649601840143", + "verbose": { + "type": "number", + "value": "-37552556857280689649601840143" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608380601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516b7956bf3a5a3aa81b59e9840e19815290519081900360200190f3fea26469706673582212205b4a9dc3bf8ad84a7a1f4824334324483aa5e16bff24bca70ed6804c8b3989fd64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int96) {\n int96 r = -37552556857280689649601840143;\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffff86a940c5a5c557e4a6167bf1" + }, + { + "name": "random-string", + "type": "string", + "value": "Moo é🚀oo🚀🚀oMo🚀o Moé MMMoooo🚀oo🚀 MoMo🚀🚀éooo🚀Moo🚀é🚀o oo🚀MM", + "verbose": { + "type": "string", + "value": "Moo é🚀oo🚀🚀oMo🚀o Moé MMMoooo🚀oo🚀 MoMo🚀🚀éooo🚀Moo🚀é🚀o oo🚀MM" + }, + "bytecode": "0x608060405234801561001057600080fd5b5061015e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610071565b60405180910390f35b606060006040518060a00160405280606281526020016100c76062913992915050565b600060208083528351808285015260005b8181101561009e57858101830151858201604001528201610082565b818111156100b0576000604083870101525b50601f01601f191692909201604001939250505056fe4d6f6f20c3a9f09f9a806f6ff09f9a80f09f9a806f4d6ff09f9a806f204d6fc3a920204d4d4d6f6f6f6ff09f9a806f6ff09f9a8020204d6f4d6ff09f9a80f09f9a80c3a96f6f6ff09f9a804d6f6ff09f9a80c3a9f09f9a806f206f6ff09f9a804d4da2646970667358221220afea53f93ff3833ec3c36f66f37ba29d9549c8ba0f175477736daf405cd16f7764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string memory) {\n string memory r = unicode\"Moo é🚀oo🚀🚀oMo🚀o Moé MMMoooo🚀oo🚀 MoMo🚀🚀éooo🚀Moo🚀é🚀o oo🚀MM\";\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000624d6f6f20c3a9f09f9a806f6ff09f9a80f09f9a806f4d6ff09f9a806f204d6fc3a920204d4d4d6f6f6f6ff09f9a806f6ff09f9a8020204d6f4d6ff09f9a80f09f9a80c3a96f6f6ff09f9a804d6f6ff09f9a80c3a9f09f9a806f206f6ff09f9a804d4d000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-uint", + "type": "uint", + "value": "37642957074023195853779734190782238456527330246074594528052195054167642887032", + "verbose": { + "type": "number", + "value": "37642957074023195853779734190782238456527330246074594528052195054167642887032" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b7f5339289f171d84cbf53f883826fece91d9b0c0b9b1f3cd6b43bc463cb2a0537860405190815260200160405180910390f3fea2646970667358221220694f0810955352cfaa102387ccea9928b1ba55a9fb6996d2c9804b3bfb1e8a8864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint) {\n uint r = 37642957074023195853779734190782238456527330246074594528052195054167642887032;\n return r;\n }\n}", + "encoded": "0x5339289f171d84cbf53f883826fece91d9b0c0b9b1f3cd6b43bc463cb2a05378" + }, + { + "name": "random-uint104", + "type": "uint104", + "value": "17913975601573238324443407088409", + "verbose": { + "type": "number", + "value": "17913975601573238324443407088409" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608380601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516ce21b2d4fb5e6bc3b44b6067b19815290519081900360200190f3fea2646970667358221220693f1d0f907c1b11d5493e415c08f5ac3f18233c6762361fb64595ad192bdae264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint104) {\n uint104 r = 17913975601573238324443407088409;\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000e21b2d4fb5e6bc3b44b6067b19" + }, + { + "name": "random-uint112", + "type": "uint112", + "value": "1385922929925776929805341676396001", + "verbose": { + "type": "number", + "value": "1385922929925776929805341676396001" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608480601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516d4454ce82209624c8b7960d21dde1815290519081900360200190f3fea2646970667358221220ca584c8385c4bdef6972da6f8103f3fd93b7bea5f52847eaae0507cf4c425c2764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint112) {\n uint112 r = 1385922929925776929805341676396001;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000004454ce82209624c8b7960d21dde1" + }, + { + "name": "random-uint120", + "type": "uint120", + "value": "545352431828331262509167639268443853", + "verbose": { + "type": "number", + "value": "545352431828331262509167639268443853" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608580601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516e6907f368990ad57c20417aaaf046cd815290519081900360200190f3fea2646970667358221220e2de557e8d050ca8f662bbaa9e57ea38d7a506841065bc10d1b4f05a52273f3b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint120) {\n uint120 r = 545352431828331262509167639268443853;\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000006907f368990ad57c20417aaaf046cd" + }, + { + "name": "random-uint128", + "type": "uint128", + "value": "111924611176033105071727486901084974225", + "verbose": { + "type": "number", + "value": "111924611176033105071727486901084974225" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608680601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516f5433e5616bde82d528e67a172b476c91815290519081900360200190f3fea26469706673582212206cd9cfec4600ddf9b4a5a5282cbbebce09eb09a03698479d099347a16f1c079f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint128) {\n uint128 r = 111924611176033105071727486901084974225;\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000005433e5616bde82d528e67a172b476c91" + }, + { + "name": "random-uint136", + "type": "uint136", + "value": "43986561248492894798711773167037158366224", + "verbose": { + "type": "number", + "value": "43986561248492894798711773167037158366224" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060878061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051708143cf8bc0bab67d76b9af34f2e5599c10815290519081900360200190f3fea2646970667358221220108820269592aa05f41f911a69478141c766ae2b6d094bd7a633d73b4dfae61764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint136) {\n uint136 r = 43986561248492894798711773167037158366224;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000008143cf8bc0bab67d76b9af34f2e5599c10" + }, + { + "name": "random-uint144", + "type": "uint144", + "value": "10346813070208734245737897105980978469392993", + "verbose": { + "type": "number", + "value": "10346813070208734245737897105980978469392993" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060888061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517176c68d0016d755e7ae74d0b1ef3323a1d261815290519081900360200190f3fea264697066735822122068a6dc983ce15e2b9af952933e49a748ab090fb5fc88884edfc04007c179c07264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint144) {\n uint144 r = 10346813070208734245737897105980978469392993;\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000076c68d0016d755e7ae74d0b1ef3323a1d261" + }, + { + "name": "random-uint152", + "type": "uint152", + "value": "3932965063127854836163531433723453859275816910", + "verbose": { + "type": "number", + "value": "3932965063127854836163531433723453859275816910" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060898061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805172b05c3988c2ad567eecfd863f44edc93e893fce815290519081900360200190f3fea26469706673582212203086deaf0d3e924703bec5474c27c9ec7de59cb8c7fad532d944c0fd7f89180564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint152) {\n uint152 r = 3932965063127854836163531433723453859275816910;\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000b05c3988c2ad567eecfd863f44edc93e893fce" + }, + { + "name": "random-uint16", + "type": "uint16", + "value": "35129", + "verbose": { + "type": "number", + "value": "35129" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607880601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051618939815290519081900360200190f3fea2646970667358221220f5ee21d598ed3acdae43998ca80cdffa34c2f2781dcff5cc0866b9ea1d5c290164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint16) {\n uint16 r = 35129;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000008939" + }, + { + "name": "random-uint160", + "type": "uint160", + "value": "976868990350635167580094247999194416134506239198", + "verbose": { + "type": "number", + "value": "976868990350635167580094247999194416134506239198" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608a8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805173ab1c520d2069670d4871426a267b2f2a3d7554de815290519081900360200190f3fea26469706673582212209a19f9c8c6924f839ad946ab59183d948444042c891c8903adea7a305109734064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint160) {\n uint160 r = 976868990350635167580094247999194416134506239198;\n return r;\n }\n}", + "encoded": "0x000000000000000000000000ab1c520d2069670d4871426a267b2f2a3d7554de" + }, + { + "name": "random-uint168", + "type": "uint168", + "value": "48125002532792639775459255832607855817411527542796", + "verbose": { + "type": "number", + "value": "48125002532792639775459255832607855817411527542796" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608b8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517420edafbfa683db545d3051a20b7bf0bff94bcd880c815290519081900360200190f3fea26469706673582212205ffaab30858e47f2594ccc3180400e774ea1a89748cfbd17341153c5de11e08c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint168) {\n uint168 r = 48125002532792639775459255832607855817411527542796;\n return r;\n }\n}", + "encoded": "0x000000000000000000000020edafbfa683db545d3051a20b7bf0bff94bcd880c" + }, + { + "name": "random-uint176", + "type": "uint176", + "value": "30579399407103330424251442826479658805267727153132813", + "verbose": { + "type": "number", + "value": "30579399407103330424251442826479658805267727153132813" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608c8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517551bb462dbb96eeaa27746b8ee585d41602f9d074750d815290519081900360200190f3fea26469706673582212207ba6b042b05977dad47c2ef127b15242acd2b11fc5d34ffbb952515652330ca264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint176) {\n uint176 r = 30579399407103330424251442826479658805267727153132813;\n return r;\n }\n}", + "encoded": "0x0000000000000000000051bb462dbb96eeaa27746b8ee585d41602f9d074750d" + }, + { + "name": "random-uint184", + "type": "uint184", + "value": "5098096734486986820668146211327243391771838887503657737", + "verbose": { + "type": "number", + "value": "5098096734486986820668146211327243391771838887503657737" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608d8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805176353a0356a082e709dbe91490cb5d4a7e7e12445418fb09815290519081900360200190f3fea2646970667358221220aabacf171d1866e412eafd77853b17dd904810b0e15cd330b0c9e524846b1ac664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint184) {\n uint184 r = 5098096734486986820668146211327243391771838887503657737;\n return r;\n }\n}", + "encoded": "0x000000000000000000353a0356a082e709dbe91490cb5d4a7e7e12445418fb09" + }, + { + "name": "random-uint192", + "type": "uint192", + "value": "6060878314271660430611206175479316499921596300384474648780", + "verbose": { + "type": "number", + "value": "6060878314271660430611206175479316499921596300384474648780" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608e8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805177f72e85aba90ed74c1d9804f890870e4899456bb710ae50cc815290519081900360200190f3fea264697066735822122078873aad8334a176d8615b8aa324f3dab94ed71c2ef2384845c0cdacc5ef95b364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint192) {\n uint192 r = 6060878314271660430611206175479316499921596300384474648780;\n return r;\n }\n}", + "encoded": "0x0000000000000000f72e85aba90ed74c1d9804f890870e4899456bb710ae50cc" + }, + { + "name": "random-uint200", + "type": "uint200", + "value": "1123115900587354017922510028386880077312658173678492090643579", + "verbose": { + "type": "number", + "value": "1123115900587354017922510028386880077312658173678492090643579" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608f8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805178b2ec35206eec6335755ea0af70597226ce90905e9a1938347b815290519081900360200190f3fea2646970667358221220a7644461640e3b464a27fb3d6a3b4951fe495dc9e3703a6184c1d4024bdda96d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint200) {\n uint200 r = 1123115900587354017922510028386880077312658173678492090643579;\n return r;\n }\n}", + "encoded": "0x00000000000000b2ec35206eec6335755ea0af70597226ce90905e9a1938347b" + }, + { + "name": "random-uint208", + "type": "uint208", + "value": "46361431004407880768686670986179307842131091545485179376650393", + "verbose": { + "type": "number", + "value": "46361431004407880768686670986179307842131091545485179376650393" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060908061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051791cd9cd5499f49f98bf33c85fd389e9ec79fd483ab6cb59684899815290519081900360200190f3fea2646970667358221220549087332682249560fd86feeb63ceb8c67dec664545a9a73150484bc410c88964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint208) {\n uint208 r = 46361431004407880768686670986179307842131091545485179376650393;\n return r;\n }\n}", + "encoded": "0x0000000000001cd9cd5499f49f98bf33c85fd389e9ec79fd483ab6cb59684899" + }, + { + "name": "random-uint216", + "type": "uint216", + "value": "33004691470497468391251589798886032765906994717774989774465925829", + "verbose": { + "type": "number", + "value": "33004691470497468391251589798886032765906994717774989774465925829" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060918061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517a503adeb37bc2874cd79bffbe7383aa12562f832e17cdcf51ee02c5815290519081900360200190f3fea2646970667358221220039b1983e5c17e8ffab6cabdc42ce27f35c065437b1fc4dd7a010053d549704664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint216) {\n uint216 r = 33004691470497468391251589798886032765906994717774989774465925829;\n return r;\n }\n}", + "encoded": "0x0000000000503adeb37bc2874cd79bffbe7383aa12562f832e17cdcf51ee02c5" + }, + { + "name": "random-uint224", + "type": "uint224", + "value": "12406777805631668379618346086673256758342161881889570061767456465530", + "verbose": { + "type": "number", + "value": "12406777805631668379618346086673256758342161881889570061767456465530" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060928061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517b75cf34c88975356657ebef8d2c84447f51adb404b9c810755d2a227a815290519081900360200190f3fea264697066735822122007be3f1722167204a521e1b1b02d82739f6070253183c33ed92c1a2a7edee14b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint224) {\n uint224 r = 12406777805631668379618346086673256758342161881889570061767456465530;\n return r;\n }\n}", + "encoded": "0x0000000075cf34c88975356657ebef8d2c84447f51adb404b9c810755d2a227a" + }, + { + "name": "random-uint232", + "type": "uint232", + "value": "3257449474963252897887112977149379608168353209009584672586229872744221", + "verbose": { + "type": "number", + "value": "3257449474963252897887112977149379608168353209009584672586229872744221" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060938061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517c78d35508f4a9432f646d9bd9bf0bc8ee9ead7b42fcfa1bdc0dd922571d815290519081900360200190f3fea2646970667358221220e77adf4c511aa18544a5e831b75510c2aa7412e3f2c14480ed424f0da0c070db64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint232) {\n uint232 r = 3257449474963252897887112977149379608168353209009584672586229872744221;\n return r;\n }\n}", + "encoded": "0x00000078d35508f4a9432f646d9bd9bf0bc8ee9ead7b42fcfa1bdc0dd922571d" + }, + { + "name": "random-uint24", + "type": "uint24", + "value": "16386876", + "verbose": { + "type": "number", + "value": "16386876" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607980601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805162fa0b3c815290519081900360200190f3fea26469706673582212206e1c2cab0a55cb9c9bc4a84c7a441189e402a22d9d5ecb2c87b3c508ed0cda1864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint24) {\n uint24 r = 16386876;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000fa0b3c" + }, + { + "name": "random-uint240", + "type": "uint240", + "value": "1230369107383705889263297569125918636265812625102184716214592736346898326", + "verbose": { + "type": "number", + "value": "1230369107383705889263297569125918636265812625102184716214592736346898326" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060948061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517db244ed3621b7bdd490b49bd7ab5e864b5bb60e5d3fe67c853222aa05ff96815290519081900360200190f3fea2646970667358221220408cd467d721bbd6d5d5a4a59a1c31148c74590a58e373bdc129a766f9d37e2a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint240) {\n uint240 r = 1230369107383705889263297569125918636265812625102184716214592736346898326;\n return r;\n }\n}", + "encoded": "0x0000b244ed3621b7bdd490b49bd7ab5e864b5bb60e5d3fe67c853222aa05ff96" + }, + { + "name": "random-uint248", + "type": "uint248", + "value": "145756579769137467382998304930303074032901322972956568619289317474173521900", + "verbose": { + "type": "number", + "value": "145756579769137467382998304930303074032901322972956568619289317474173521900" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060958061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080517e527ecc05968cddc3006032a6fd3088e4313ceef7d2a95619e9089e09390fec815290519081900360200190f3fea2646970667358221220e0ecb58bd7fbe8b1c37bcf31a682ee960b00b2d60d8551464af85c5f79012ca364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint248) {\n uint248 r = 145756579769137467382998304930303074032901322972956568619289317474173521900;\n return r;\n }\n}", + "encoded": "0x00527ecc05968cddc3006032a6fd3088e4313ceef7d2a95619e9089e09390fec" + }, + { + "name": "random-uint256", + "type": "uint256", + "value": "101611154195520776335741463917853444671577865378275924493376429267637792638729", + "verbose": { + "type": "number", + "value": "101611154195520776335741463917853444671577865378275924493376429267637792638729" + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b7fe0a5e00d34699be3c391395b9f04e2df71c1078ebee0581d62c92eead133870960405190815260200160405180910390f3fea26469706673582212204543bb6c0df20ae860d231f005bbaa66f91016687fbced7bb05ca2d145f59cc864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint256) {\n uint256 r = 101611154195520776335741463917853444671577865378275924493376429267637792638729;\n return r;\n }\n}", + "encoded": "0xe0a5e00d34699be3c391395b9f04e2df71c1078ebee0581d62c92eead1338709" + }, + { + "name": "random-uint32", + "type": "uint32", + "value": "18052803", + "verbose": { + "type": "number", + "value": "18052803" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607a80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805163011376c3815290519081900360200190f3fea26469706673582212202a6ce292a4c8a71e3a4bf5f6853eae8d5b6b744c7db80a0c0e09ffbb04f6b7f164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint32) {\n uint32 r = 18052803;\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000011376c3" + }, + { + "name": "random-uint40", + "type": "uint40", + "value": "574301773314", + "verbose": { + "type": "number", + "value": "574301773314" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607b80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516485b70d9e02815290519081900360200190f3fea264697066735822122090bdfd3f9e0b5f1c663c81adf83aabcb1ae79db40a92fbc23307f426ac56e01b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint40) {\n uint40 r = 574301773314;\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000085b70d9e02" + }, + { + "name": "random-uint48", + "type": "uint48", + "value": "262423823815899", + "verbose": { + "type": "number", + "value": "262423823815899" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607c80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805165eeac4ecc94db815290519081900360200190f3fea26469706673582212208001be73b0cdebcde704e4326857eb3841ffd9a96971bedef049fb8dc9024ab764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint48) {\n uint48 r = 262423823815899;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000eeac4ecc94db" + }, + { + "name": "random-uint56", + "type": "uint56", + "value": "6375275489279484", + "verbose": { + "type": "number", + "value": "6375275489279484" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607d80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516616a6477ee23dfc815290519081900360200190f3fea264697066735822122078fb18839ef59792d1675a93bea80a444c1fa6dbd299c81ff012d9f9791227e564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint56) {\n uint56 r = 6375275489279484;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000016a6477ee23dfc" + }, + { + "name": "random-uint64", + "type": "uint64", + "value": "13321099036857048053", + "verbose": { + "type": "number", + "value": "13321099036857048053" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607e80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805167b8de0cfeeda99bf5815290519081900360200190f3fea2646970667358221220e57afe71c849b9e702b816d64359e0a359ddd12b6a51f9fe9a26b57ff5a6a8ba64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint64) {\n uint64 r = 13321099036857048053;\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000b8de0cfeeda99bf5" + }, + { + "name": "random-uint72", + "type": "uint72", + "value": "2819722053248274284385", + "verbose": { + "type": "number", + "value": "2819722053248274284385" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607f80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516898db811be6ce7a3f61815290519081900360200190f3fea2646970667358221220354bc9c6eddc7ad8dd91268dbcf4bfad5011a4a086f51dab0d720d4b7b2b248564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint72) {\n uint72 r = 2819722053248274284385;\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000098db811be6ce7a3f61" + }, + { + "name": "random-uint8", + "type": "uint8", + "value": "138", + "verbose": { + "type": "number", + "value": "138" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50607780601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051608a815290519081900360200190f3fea26469706673582212202546f8b48b0e541f961da3492be3a1d6aed5ff522f57677efada0e37b7c3fb4064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint8) {\n uint8 r = 138;\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000008a" + }, + { + "name": "random-uint80", + "type": "uint80", + "value": "817716888934872342694660", + "verbose": { + "type": "number", + "value": "817716888934872342694660" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608080601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805169ad288578b48226c18b04815290519081900360200190f3fea2646970667358221220b2bdb7b644dc2f883e153d3fe686d8cc7ca30260f20d764d98cc5592a882029964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint80) {\n uint80 r = 817716888934872342694660;\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000ad288578b48226c18b04" + }, + { + "name": "random-uint88", + "type": "uint88", + "value": "154717455470646237453481833", + "verbose": { + "type": "number", + "value": "154717455470646237453481833" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608180601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516a7ffab2112fc5b44925f769815290519081900360200190f3fea26469706673582212207bd6d015b101b85b546277f475d2c9cf2817d63c7dd5055dcb639bfdcd179a9c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint88) {\n uint88 r = 154717455470646237453481833;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000007ffab2112fc5b44925f769" + }, + { + "name": "random-uint96", + "type": "uint96", + "value": "70655261155009064824419212005", + "verbose": { + "type": "number", + "value": "70655261155009064824419212005" + }, + "bytecode": "0x6080604052348015600f57600080fd5b50608280601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516be44ca98616ee629199215ae5815290519081900360200190f3fea2646970667358221220e2cc72bd98ddb41e8b7e5e5657f257f670a7eb57ebc06b732498ed56274d2fa564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint96) {\n uint96 r = 70655261155009064824419212005;\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000e44ca98616ee629199215ae5" + }, + { + "name": "random-((address,bool))", + "type": "((address,bool))", + "value": [["0xcBE2BC4C7147b773483F4BC2F5f0eAb8A3bEc647", false]], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xcBE2BC4C7147b773483F4BC2F5f0eAb8A3bEc647" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f18061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b609260408051606081018252600060208201818152928201529081526040805160608101825260006020820181815292820152908152604080518082019091526000602082015273cbe2bc4c7147b773483f4bc2f5f0eab8a3bec64781528152919050565b60408051915180516001600160a01b031683526020908101511515908301520160405180910390f3fea264697066735822122085e50b4e5d3f9167bb4efcd7f17871ee031fb3eef1fd09f7710a016525709e0564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5cde0d08 {\n address s_0;\n bool s_1;\n }\n\n struct S_d0b75772 {\n S_5cde0d08 s_0;\n }\n\n function test () public pure returns (S_d0b75772 memory) {\n S_d0b75772 memory r;\n {\n S_5cde0d08 memory r_0;\n {\n address r_0_0 = 0xcBE2BC4C7147b773483F4BC2F5f0eAb8A3bEc647;\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000cbe2bc4c7147b773483f4bc2f5f0eab8a3bec6470000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((string,bytes1))", + "type": "((string,bytes1))", + "value": [["Moo é🚀🚀 oo ooé oéo🚀🚀ééMoo🚀Mo ooé 🚀oéooooM", "0x3b"]], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀 oo ooé oéo🚀🚀ééMoo🚀Mo ooé 🚀oéooooM" + }, + { + "type": "hexstring", + "value": "0x3b" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101c0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ce565b60405180910390f35b604080516060808201835260208201908152600092820192909252908152604080516060808201835260208201908152600092820192909252908152604080518082019091526060815260006020820152600060405180608001604052806044815260200161014760449139825250603b60f81b60208201528152919050565b60006020808352835181828501528051604080860152805180608087015260005b8181101561010b5782810185015187820160a0015284016100ef565b8181111561011d57600060a083890101525b5091909201516001600160f81b0319166060850152601f01601f191690920160a001939250505056fe4d6f6f20c3a9f09f9a80f09f9a80206f6f20206f6fc3a9206fc3a96ff09f9a80f09f9a80c3a9c3a94d6f6ff09f9a804d6f20206f6fc3a920f09f9a806fc3a96f6f6f6f4da26469706673582212203a8d6ae0b6b53bd02b3ad2a4f0a150a3290dd42dd65c108a70d87974b78d96a564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2e44d04d {\n string s_0;\n bytes1 s_1;\n }\n\n struct S_ccb1aaf0 {\n S_2e44d04d s_0;\n }\n\n function test () public pure returns (S_ccb1aaf0 memory) {\n S_ccb1aaf0 memory r;\n {\n S_2e44d04d memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀🚀 oo ooé oéo🚀🚀ééMoo🚀Mo ooé 🚀oéooooM\";\n r_0.s_0 = r_0_0;\n }\n {\n bytes1 r_0_1 = bytes1(0x3b);\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000403b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444d6f6f20c3a9f09f9a80f09f9a80206f6f20206f6fc3a9206fc3a96ff09f9a80f09f9a80c3a9c3a94d6f6ff09f9a804d6f20206f6fc3a920f09f9a806fc3a96f6f6f6f4d00000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((uint),bytes22)", + "type": "((uint),bytes22)", + "value": [ + ["31722712024044883318309071563085303055552253891348445219825010881989539700544"], + "0xfb1b67718377036b9b87314bf3d8aaf5b21ef4a0e672" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "31722712024044883318309071563085303055552253891348445219825010881989539700544" + } + ] + }, + { + "type": "hexstring", + "value": "0xfb1b67718377036b9b87314bf3d8aaf5b21ef4a0e672" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101068061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600082840181815283526020928301819052835191820184528184018181528252818301908152835180840185527f46226b318f8c110fa533bec605f128da474c55bfa1a9a7f6f0963963821a9f40815291829052757d8db3b8c1bb81b5cdc398a5f9ec557ad90f7a50733960511b81528351915182525169ffffffffffffffffffff19169181019190915281519081900390910190f3fea2646970667358221220bdb014f6deadce020e4684371a8a74e4677d0949856141ee85ea4724c264501c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ec13d6d1 {\n uint256 s_0;\n }\n\n struct S_4d14112c {\n S_ec13d6d1 s_0;\n bytes22 s_1;\n }\n\n function test () public pure returns (S_4d14112c memory) {\n S_4d14112c memory r;\n {\n S_ec13d6d1 memory r_0;\n {\n uint r_0_0 = 31722712024044883318309071563085303055552253891348445219825010881989539700544;\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n bytes22 r_1 = bytes22(0xfb1b67718377036b9b87314bf3d8aaf5b21ef4a0e672);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x46226b318f8c110fa533bec605f128da474c55bfa1a9a7f6f0963963821a9f40fb1b67718377036b9b87314bf3d8aaf5b21ef4a0e67200000000000000000000" + }, + { + "name": "random-(address,address)", + "type": "(address,address)", + "value": [ + "0xFca7D1FB3c078F21a7f7F1798928e8cEBd300237", + "0xb1d8C2E9FC502cc40c6c32EB1452343ae9B23A4f" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xFca7D1FB3c078F21a7f7F1798928e8cEBd300237" + }, + { + "type": "address", + "value": "0xb1d8C2E9FC502cc40c6c32EB1452343ae9B23A4f" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d48061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201528151808301835273fca7d1fb3c078f21a7f7f1798928e8cebd30023780825273b1d8c2e9fc502cc40c6c32eb1452343ae9b23a4f918301918252835190815290516001600160a01b03169181019190915281519081900390910190f3fea264697066735822122065179b442321f8af046a3e80511eb8773ba55894a9da83fa3808da6b474dbd1064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_3b625bf6 {\n address s_0;\n address s_1;\n }\n\n function test () public pure returns (S_3b625bf6 memory) {\n S_3b625bf6 memory r;\n {\n address r_0 = 0xFca7D1FB3c078F21a7f7F1798928e8cEBd300237;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xb1d8C2E9FC502cc40c6c32EB1452343ae9B23A4f;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000fca7d1fb3c078f21a7f7f1798928e8cebd300237000000000000000000000000b1d8c2e9fc502cc40c6c32eb1452343ae9b23a4f" + }, + { + "name": "random-(address,bool)", + "type": "(address,bool)", + "value": ["0x6F9D3545C259E2c428bcFeA188Cad82D8a945265", true], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6F9D3545C259E2c428bcFeA188Cad82D8a945265" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060ba8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252600080825260209182015281518083018352736f9d3545c259e2c428bcfea188cad82d8a94526580825260019183019182528351908152905115159181019190915281519081900390910190f3fea26469706673582212208ff2f6490f6a67acb5772ad5e6b7b22c2ec5ec0950bf6b47107fc2d75394863b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5cde0d08 {\n address s_0;\n bool s_1;\n }\n\n function test () public pure returns (S_5cde0d08 memory) {\n S_5cde0d08 memory r;\n {\n address r_0 = 0x6F9D3545C259E2c428bcFeA188Cad82D8a945265;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000006f9d3545c259e2c428bcfea188cad82d8a9452650000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(address,bytes24)", + "type": "(address,bytes24)", + "value": [ + "0x0825dE986E921840d2d018FF0F958460bFc85CfF", + "0x886aea78ace7cd0232f599b5bb3339a82308787c59b5e1dc" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x0825dE986E921840d2d018FF0F958460bFc85CfF" + }, + { + "type": "hexstring", + "value": "0x886aea78ace7cd0232f599b5bb3339a82308787c59b5e1dc" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060e28061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252600080825260209182015281518083018352730825de986e921840d2d018ff0f958460bfc85cff8082527f886aea78ace7cd0232f599b5bb3339a82308787c59b5e1dc00000000000000009183019182528351908152905167ffffffffffffffff19169181019190915281519081900390910190f3fea26469706673582212206c0bc0b5728602b0f7d15cf760a38a1710c5ff777b995eeaa9efba87c0b0d64664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c0e29cb9 {\n address s_0;\n bytes24 s_1;\n }\n\n function test () public pure returns (S_c0e29cb9 memory) {\n S_c0e29cb9 memory r;\n {\n address r_0 = 0x0825dE986E921840d2d018FF0F958460bFc85CfF;\n r.s_0 = r_0;\n }\n {\n bytes24 r_1 = bytes24(0x886aea78ace7cd0232f599b5bb3339a82308787c59b5e1dc);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000825de986e921840d2d018ff0f958460bfc85cff886aea78ace7cd0232f599b5bb3339a82308787c59b5e1dc0000000000000000" + }, + { + "name": "random-(address,bytes5)", + "type": "(address,bytes5)", + "value": ["0xF662ECd8666B9f56225A499ab6c24DAbAc830015", "0xa7c6d6708a"], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xF662ECd8666B9f56225A499ab6c24DAbAc830015" + }, + { + "type": "hexstring", + "value": "0xa7c6d6708a" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060c98061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201528151808301835273f662ecd8666b9f56225a499ab6c24dabac8300158082526453e36b384560d91b918301918252835190815290516001600160d81b0319169181019190915281519081900390910190f3fea264697066735822122057b27ebb848c9e7dc13d4708eb2c1bf7f29c52585fc79a9a4b856535d7ce72b164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9dc6833e {\n address s_0;\n bytes5 s_1;\n }\n\n function test () public pure returns (S_9dc6833e memory) {\n S_9dc6833e memory r;\n {\n address r_0 = 0xF662ECd8666B9f56225A499ab6c24DAbAc830015;\n r.s_0 = r_0;\n }\n {\n bytes5 r_1 = bytes5(0xa7c6d6708a);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000f662ecd8666b9f56225a499ab6c24dabac830015a7c6d6708a000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,int)", + "type": "(address,int)", + "value": [ + "0xcDc1da2760569BCccc488E0F4033e1f7c2B860D1", + "22529625887994294237558491374122388884021191001808361938647694649486330678162" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xcDc1da2760569BCccc488E0F4033e1f7c2B860D1" + }, + { + "type": "number", + "value": "22529625887994294237558491374122388884021191001808361938647694649486330678162" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d78061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201528151808301835273cdc1da2760569bcccc488e0f4033e1f7c2b860d18082527f31cf50fd2a12d6715923a3ef88e86338c4d258d6b1865626cb427f195121cb92918301918252835190815290519181019190915281519081900390910190f3fea2646970667358221220c60820bf5c605880c7be52285e949a0b3a5faccfaa59e35618edfc010ed36bc864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5ad558fe {\n address s_0;\n int256 s_1;\n }\n\n function test () public pure returns (S_5ad558fe memory) {\n S_5ad558fe memory r;\n {\n address r_0 = 0xcDc1da2760569BCccc488E0F4033e1f7c2B860D1;\n r.s_0 = r_0;\n }\n {\n int r_1 = 22529625887994294237558491374122388884021191001808361938647694649486330678162;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000cdc1da2760569bcccc488e0f4033e1f7c2b860d131cf50fd2a12d6715923a3ef88e86338c4d258d6b1865626cb427f195121cb92" + }, + { + "name": "random-(address,int192)", + "type": "(address,int192)", + "value": [ + "0x6D55C2a2b62C0f564cd5F1F80711FcAa36Ca5240", + "-288124533153251206941489716571630506550342779909795549676" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6D55C2a2b62C0f564cd5F1F80711FcAa36Ca5240" + }, + { + "type": "number", + "value": "-288124533153251206941489716571630506550342779909795549676" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d38061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252600080825260209182015281518083018352736d55c2a2b62c0f564cd5f1f80711fcaa36ca5240808252770bc02915963e95959aa708762aabdc50b912ea4f5e9911eb199183019182528351908152905160170b9181019190915281519081900390910190f3fea2646970667358221220608194287605e659faa25f8590493ca1f8c5967ea77fba18fd1588d5f4fe5aae64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_432a42d1 {\n address s_0;\n int192 s_1;\n }\n\n function test () public pure returns (S_432a42d1 memory) {\n S_432a42d1 memory r;\n {\n address r_0 = 0x6D55C2a2b62C0f564cd5F1F80711FcAa36Ca5240;\n r.s_0 = r_0;\n }\n {\n int192 r_1 = -288124533153251206941489716571630506550342779909795549676;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000006d55c2a2b62c0f564cd5f1f80711fcaa36ca5240fffffffffffffffff43fd6ea69c16a6a6558f789d55423af46ed15b0a166ee14" + }, + { + "name": "random-(address,string)", + "type": "(address,string)", + "value": [ + "0x93Ad742A155A6dBBF1AC37F0B2F9C7C12762a0d1", + "Moo é🚀éMM oM oé🚀MoééMoooM🚀éMéoMoéoM🚀éoéé oo 🚀é oo🚀é o🚀oéo🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x93Ad742A155A6dBBF1AC37F0B2F9C7C12762a0d1" + }, + { + "type": "string", + "value": "Moo é🚀éMM oM oé🚀MoééMoooM🚀éMéoMoéoM🚀éoéé oo 🚀é oo🚀é o🚀oéo🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ac565b60405180910390f35b604080518082018252600080825260606020808401829052845180860186528082018390527393ad742a155a6dbbf1ac37f0b2f9c7c12762a0d181528551608081019096528286529394919061011c90830139602083015250919050565b6000602080835260018060a01b038451168184015280840151604080850152805180606086015260005b818110156100f2578281018401518682016080015283016100d6565b81811115610104576000608083880101525b50601f01601f19169390930160800194935050505056fe4d6f6f20c3a9f09f9a80c3a94d4d206f4d206fc3a9f09f9a804d6fc3a9c3a94d6f6f6f4df09f9a80c3a94dc3a96f4d6fc3a96f4df09f9a80c3a96fc3a9c3a9206f6f20f09f9a80c3a9206f6ff09f9a80c3a9206ff09f9a806fc3a96ff09f9a80a2646970667358221220f0b83aec3f17b770d4ebc7c1c740bd0ef55846a4a577569cd8c5512d0f73b67664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8090aaf4 {\n address s_0;\n string s_1;\n }\n\n function test () public pure returns (S_8090aaf4 memory) {\n S_8090aaf4 memory r;\n {\n address r_0 = 0x93Ad742A155A6dBBF1AC37F0B2F9C7C12762a0d1;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀éMM oM oé🚀MoééMoooM🚀éMéoMoéoM🚀éoéé oo 🚀é oo🚀é o🚀oéo🚀\";\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000093ad742a155a6dbbf1ac37f0b2f9c7c12762a0d1000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a80c3a94d4d206f4d206fc3a9f09f9a804d6fc3a9c3a94d6f6f6f4df09f9a80c3a94dc3a96f4d6fc3a96f4df09f9a80c3a96fc3a9c3a9206f6f20f09f9a80c3a9206f6ff09f9a80c3a9206ff09f9a806fc3a96ff09f9a80" + }, + { + "name": "random-(address,uint208)", + "type": "(address,uint208)", + "value": [ + "0xF0C5AB155A255b8B542d1218A48c81D8d6992C07", + "66740310468053313184364306813255572937396422973552391636174513" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xF0C5AB155A255b8B542d1218A48c81D8d6992C07" + }, + { + "type": "number", + "value": "66740310468053313184364306813255572937396422973552391636174513" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060da8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201528151808301835273f0c5ab155a255b8b542d1218a48c81d8d6992c078082527929885849bf9c119fcff239ca6f86b948ca3048bc0f08b10cc6b1918301918252835190815290516001600160d01b03169181019190915281519081900390910190f3fea2646970667358221220d431751444b1855bf608511b12ea4f96d2096f923913c689f7b77bb13c6f250164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6d025777 {\n address s_0;\n uint208 s_1;\n }\n\n function test () public pure returns (S_6d025777 memory) {\n S_6d025777 memory r;\n {\n address r_0 = 0xF0C5AB155A255b8B542d1218A48c81D8d6992C07;\n r.s_0 = r_0;\n }\n {\n uint208 r_1 = 66740310468053313184364306813255572937396422973552391636174513;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000f0c5ab155a255b8b542d1218a48c81d8d6992c0700000000000029885849bf9c119fcff239ca6f86b948ca3048bc0f08b10cc6b1" + }, + { + "name": "random-(address,uint248)", + "type": "(address,uint248)", + "value": [ + "0x8784A0575D056ea6AB0A716B3cfd0A0812Ca5788", + "154743979034731572387730583035613718093947081363307515106590196508669198594" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x8784A0575D056ea6AB0A716B3cfd0A0812Ca5788" + }, + { + "type": "number", + "value": "154743979034731572387730583035613718093947081363307515106590196508669198594" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060df8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252600080825260209182015281518083018352738784a0575d056ea6ab0a716b3cfd0a0812ca57888082527e5794fd302c37e0d7373971f8ef697af4b024d2b133c9652260e44c752f4102918301918252835190815290516001600160f81b03169181019190915281519081900390910190f3fea2646970667358221220a5705a46d4b6208eff9968ccf2e4cafbe61fd2e90003374b9efea1c8ddb3be5864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_67df5764 {\n address s_0;\n uint248 s_1;\n }\n\n function test () public pure returns (S_67df5764 memory) {\n S_67df5764 memory r;\n {\n address r_0 = 0x8784A0575D056ea6AB0A716B3cfd0A0812Ca5788;\n r.s_0 = r_0;\n }\n {\n uint248 r_1 = 154743979034731572387730583035613718093947081363307515106590196508669198594;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000008784a0575d056ea6ab0a716b3cfd0a0812ca5788005794fd302c37e0d7373971f8ef697af4b024d2b133c9652260e44c752f4102" + }, + { + "name": "random-(address)[3]", + "type": "(address)[3]", + "value": [ + ["0x97077f92BDd737FAB412DADF719caa16dC5145B5"], + ["0xa62D60E07aa23A521251A3bE118e2F5A7E82A99f"], + ["0xDC039E2E2Eb0976c6566746C6f1D3279717B0Cc0"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x97077f92BDd737FAB412DADF719caa16dC5145B5" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xa62D60E07aa23A521251A3bE118e2F5A7E82A99f" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xDC039E2E2Eb0976c6566746C6f1D3279717B0Cc0" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610171806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610100565b60405180910390f35b6100566100cc565b61005e6100cc565b60408051602080820183527397077f92bdd737fab412dadf719caa16dc5145b582529083528151808201835273a62d60e07aa23a521251a3be118e2f5a7e82a99f8152838201528151908101825273dc039e2e2eb0976c6566746c6f1d3279717b0cc0815290820152919050565b60405180606001604052806003905b6040805160208101909152600081528152602001906001900390816100db5790505090565b60608101818360005b6003811015610132578151516001600160a01b0316835260209283019290910190600101610109565b5050509291505056fea2646970667358221220aff74e1aa42c81913577d8ae418bd13218e119670c2b1e989d0865eec552bf1d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_421683f8 {\n address s_0;\n }\n\n function test () public pure returns (S_421683f8[3] memory) {\n S_421683f8[3] memory r;\n {\n S_421683f8 memory r_0;\n {\n address r_0_0 = 0x97077f92BDd737FAB412DADF719caa16dC5145B5;\n r_0.s_0 = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_421683f8 memory r_1;\n {\n address r_1_0 = 0xa62D60E07aa23A521251A3bE118e2F5A7E82A99f;\n r_1.s_0 = r_1_0;\n }\n r[1] = r_1;\n }\n {\n S_421683f8 memory r_2;\n {\n address r_2_0 = 0xDC039E2E2Eb0976c6566746C6f1D3279717B0Cc0;\n r_2.s_0 = r_2_0;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000097077f92bdd737fab412dadf719caa16dc5145b5000000000000000000000000a62d60e07aa23a521251a3be118e2f5a7e82a99f000000000000000000000000dc039e2e2eb0976c6566746c6f1d3279717b0cc0" + }, + { + "name": "random-(address[2])", + "type": "(address[2])", + "value": [ + [ + "0x4Dd619E0Bd36C127256eED954270dDb41047AF6F", + "0xE5a8B84E1E3e31F9865e21dC9a27d1e2A53ddCb6" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x4Dd619E0Bd36C127256eED954270dDb41047AF6F" + }, + { + "type": "address", + "value": "0xE5a8B84E1E3e31F9865e21dC9a27d1e2A53ddCb6" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610146806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d4565b60405180910390f35b61005661009e565b61005e61009e565b6100666100b6565b734dd619e0bd36c127256eed954270ddb41047af6f815273e5a8b84e1e3e31f9865e21dc9a27d1e2a53ddcb660208201528152919050565b60405180602001604052806100b16100b6565b905290565b60405180604001604052806002906020820280368337509192915050565b815160408201908260005b60028110156101075782516001600160a01b03168252602092830192909101906001016100df565b5050509291505056fea2646970667358221220706211c13053ddb06401cf9d73169b0b6366d596bd768aa3ee38b1d78ed8c64964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6acf71d8 {\n address[2] s_0;\n }\n\n function test () public pure returns (S_6acf71d8 memory) {\n S_6acf71d8 memory r;\n {\n address[2] memory r_0;\n {\n address r_0_0 = 0x4Dd619E0Bd36C127256eED954270dDb41047AF6F;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0xE5a8B84E1E3e31F9865e21dC9a27d1e2A53ddCb6;\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000004dd619e0bd36c127256eed954270ddb41047af6f000000000000000000000000e5a8b84e1e3e31f9865e21dc9a27d1e2a53ddcb6" + }, + { + "name": "random-(address[4])", + "type": "(address[4])", + "value": [ + [ + "0x4cC16C0225227877A6E9B0331db2208Ab1564FF8", + "0xF1D75f95C81d77996883D4583b0AC62c07706B50", + "0xE311B9EaE0b076c9BbcafAcB95B5f1c7Ab8A582b", + "0xAe7CCfbDc459209d7999951baD5D18F18Fbfd8F7" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x4cC16C0225227877A6E9B0331db2208Ab1564FF8" + }, + { + "type": "address", + "value": "0xF1D75f95C81d77996883D4583b0AC62c07706B50" + }, + { + "type": "address", + "value": "0xE311B9EaE0b076c9BbcafAcB95B5f1c7Ab8A582b" + }, + { + "type": "address", + "value": "0xAe7CCfbDc459209d7999951baD5D18F18Fbfd8F7" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061017a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610108565b60405180910390f35b6100566100d2565b61005e6100d2565b6100666100ea565b734cc16c0225227877a6e9b0331db2208ab1564ff8815273f1d75f95c81d77996883d4583b0ac62c07706b50602082015273e311b9eae0b076c9bbcafacb95b5f1c7ab8a582b604082015273ae7ccfbdc459209d7999951bad5d18f18fbfd8f760608201528152919050565b60405180602001604052806100e56100ea565b905290565b60405180608001604052806004906020820280368337509192915050565b815160808201908260005b600481101561013b5782516001600160a01b0316825260209283019290910190600101610113565b5050509291505056fea2646970667358221220d1ef960dccbf4a4c1a6f4c381e7e83ad97a06a13832a425e55828e0f8168ab4864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5a8b99b2 {\n address[4] s_0;\n }\n\n function test () public pure returns (S_5a8b99b2 memory) {\n S_5a8b99b2 memory r;\n {\n address[4] memory r_0;\n {\n address r_0_0 = 0x4cC16C0225227877A6E9B0331db2208Ab1564FF8;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0xF1D75f95C81d77996883D4583b0AC62c07706B50;\n r_0[1] = r_0_1;\n }\n {\n address r_0_2 = 0xE311B9EaE0b076c9BbcafAcB95B5f1c7Ab8A582b;\n r_0[2] = r_0_2;\n }\n {\n address r_0_3 = 0xAe7CCfbDc459209d7999951baD5D18F18Fbfd8F7;\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000004cc16c0225227877a6e9b0331db2208ab1564ff8000000000000000000000000f1d75f95c81d77996883d4583b0ac62c07706b50000000000000000000000000e311b9eae0b076c9bbcafacb95b5f1c7ab8a582b000000000000000000000000ae7ccfbdc459209d7999951bad5d18f18fbfd8f7" + }, + { + "name": "random-(bool,address)", + "type": "(bool,address)", + "value": [false, "0x6A6cc3B7288e08E58d1d810440DFf7199e28d035"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x6A6cc3B7288e08E58d1d810440DFf7199e28d035" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060c08061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820181905282518084018452818152736a6cc3b7288e08e58d1d810440dff7199e28d0359083019081528351918252516001600160a01b03169181019190915281519081900390910190f3fea2646970667358221220b657ffa7f258ea1eb698ff62eec4888ea12b16986e792e1883ad865655c6d28164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e212a882 {\n bool s_0;\n address s_1;\n }\n\n function test () public pure returns (S_e212a882 memory) {\n S_e212a882 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x6A6cc3B7288e08E58d1d810440DFf7199e28d035;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a6cc3b7288e08e58d1d810440dff7199e28d035" + }, + { + "name": "random-(bool,bool)", + "type": "(bool,bool)", + "value": [true, false], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060a88061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201819052825180840184528083019182526001908190528351908152905115159181019190915281519081900390910190f3fea26469706673582212207e43c16418062f0a76dc2c086b1576cafcd0354a00676bae101f0e48af38e82d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_25e98821 {\n bool s_0;\n bool s_1;\n }\n\n function test () public pure returns (S_25e98821 memory) {\n S_25e98821 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,bytes21)", + "type": "(bool,bytes21)", + "value": [true, "0xd10b05bdad1415ee9d7a9877d3a0f44426daf9dd19"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xd10b05bdad1415ee9d7a9877d3a0f44426daf9dd19" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060ca8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252600080825260209182015281518083018352600180825274d10b05bdad1415ee9d7a9877d3a0f44426daf9dd1960581b918301918252835190815290516affffffffffffffffffffff19169181019190915281519081900390910190f3fea264697066735822122033adab8daa1bb2cae45e8856fd8172a665333f0df34cfad0c58cf32c781b539664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_26afe313 {\n bool s_0;\n bytes21 s_1;\n }\n\n function test () public pure returns (S_26afe313 memory) {\n S_26afe313 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes21 r_1 = bytes21(0xd10b05bdad1415ee9d7a9877d3a0f44426daf9dd19);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001d10b05bdad1415ee9d7a9877d3a0f44426daf9dd190000000000000000000000" + }, + { + "name": "random-(bool,bytes28)", + "type": "(bool,bytes28)", + "value": [true, "0x7974461eb2cfd6d9a2218eaf321b755f538aa8945d3e0111715d1ce7"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x7974461eb2cfd6d9a2218eaf321b755f538aa8945d3e0111715d1ce7" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060cb8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201528151808301835260018082527f7974461eb2cfd6d9a2218eaf321b755f538aa8945d3e0111715d1ce7000000009183019182528351908152905163ffffffff19169181019190915281519081900390910190f3fea2646970667358221220eafdcc0e591048e9bd16a3f1c395262abdf739a49c52293c5ac95d0a4033b2fd64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c8850314 {\n bool s_0;\n bytes28 s_1;\n }\n\n function test () public pure returns (S_c8850314 memory) {\n S_c8850314 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes28 r_1 = bytes28(0x7974461eb2cfd6d9a2218eaf321b755f538aa8945d3e0111715d1ce7);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000017974461eb2cfd6d9a2218eaf321b755f538aa8945d3e0111715d1ce700000000" + }, + { + "name": "random-(bool,bytes6)", + "type": "(bool,bytes6)", + "value": [false, "0xbdcb13bac407"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xbdcb13bac407" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060b68061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252600080825260209182018190528251808401845281815265bdcb13bac40760d01b9083019081528351918252516001600160d01b0319169181019190915281519081900390910190f3fea2646970667358221220683f0cb8156017e0fe07e95c9fdf029e4fc2aa8c1fa7860cdb7f682145435a0364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_402b8786 {\n bool s_0;\n bytes6 s_1;\n }\n\n function test () public pure returns (S_402b8786 memory) {\n S_402b8786 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n bytes6 r_1 = bytes6(0xbdcb13bac407);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000bdcb13bac4070000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,int120)", + "type": "(bool,int120)", + "value": [false, "-200527602527694080353893121749080320"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-200527602527694080353893121749080320" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060b68061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201819052825180840184528181526e269ec62d44a5e69ca9c7eae64ed8ff19908301908152835191825251600e0b9181019190915281519081900390910190f3fea2646970667358221220272f1e16608fa2e68219dd8181e24fded26d28b8766fb1f311480bb40e82242164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_77e98d28 {\n bool s_0;\n int120 s_1;\n }\n\n function test () public pure returns (S_77e98d28 memory) {\n S_77e98d28 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n int120 r_1 = -200527602527694080353893121749080320;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffd96139d2bb5a196356381519b12700" + }, + { + "name": "random-(bool,int160)", + "type": "(bool,int160)", + "value": [true, "632259294245089831601225058049299569208381193221"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "632259294245089831601225058049299569208381193221" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060bb8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820152815180830183526001808252736ebf7cbf9997e287902624c35691fad9fe98bc059183019182528351908152905160130b9181019190915281519081900390910190f3fea26469706673582212209dcbf0162ae3c5fd05bd029d4bd40fd945ab6b41d213e6b07d6f24e944c2a28b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5052fa0a {\n bool s_0;\n int160 s_1;\n }\n\n function test () public pure returns (S_5052fa0a memory) {\n S_5052fa0a memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n int160 r_1 = 632259294245089831601225058049299569208381193221;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000006ebf7cbf9997e287902624c35691fad9fe98bc05" + }, + { + "name": "random-(bool,int48)", + "type": "(bool,int48)", + "value": [true, "-74515521836893"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-74515521836893" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060ae8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201528151808301835260018082526543c57f35975c199183019182528351908152905160050b9181019190915281519081900390910190f3fea2646970667358221220b98d2321cdff5e49e240ef57376ca1c64c5b66ab8d5efbf5b26b21746b9b6fa864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_bdb1bbf0 {\n bool s_0;\n int48 s_1;\n }\n\n function test () public pure returns (S_bdb1bbf0 memory) {\n S_bdb1bbf0 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n int48 r_1 = -74515521836893;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffbc3a80ca68a3" + }, + { + "name": "random-(bool,int72)", + "type": "(bool,int72)", + "value": [false, "-1140501498991239166401"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-1140501498991239166401" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060b08061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820181905282518084018452818152683dd3a346b25556f9c01990830190815283519182525160080b9181019190915281519081900390910190f3fea2646970667358221220743e92489a594f4b6e88e2513bf6c68b5d59c7412550fdebff4605afbdee1c1a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6435281a {\n bool s_0;\n int72 s_1;\n }\n\n function test () public pure returns (S_6435281a memory) {\n S_6435281a memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n int72 r_1 = -1140501498991239166401;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffc22c5cb94daaa9063f" + }, + { + "name": "random-(bool,string)", + "type": "(bool,string)", + "value": [false, "Moo é🚀oMoM o o é oMo Mééé🚀M🚀🚀 🚀éoo é🚀oo 🚀oooéooéoM"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀oMoM o o é oMo Mééé🚀M🚀🚀 🚀éoo é🚀oo 🚀oooéooéoM" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610192806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100a0565b60405180910390f35b60408051808201909152600081526060602082015260408051808201909152600081526060602082015260008082526040805160808101909152605380825261010a6020830139602083015250919050565b60006020808352835115158184015280840151604080850152805180606086015260005b818110156100e0578281018401518682016080015283016100c4565b818111156100f2576000608083880101525b50601f01601f19169390930160800194935050505056fe4d6f6f20c3a9f09f9a806f4d6f4d206f206f2020c3a920206f4d6f204dc3a9c3a9c3a9f09f9a804df09f9a80f09f9a802020f09f9a80c3a96f6f20c3a9f09f9a806f6f20f09f9a806f6f6fc3a96f6fc3a96f4da2646970667358221220ccc9d2f8c12aab11c220e1ac6123a737d59786794ac20b761a56b7f1d29fc23364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0e00bb9b {\n bool s_0;\n string s_1;\n }\n\n function test () public pure returns (S_0e00bb9b memory) {\n S_0e00bb9b memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀oMoM o o é oMo Mééé🚀M🚀🚀 🚀éoo é🚀oo 🚀oooéooéoM\";\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000534d6f6f20c3a9f09f9a806f4d6f4d206f206f2020c3a920206f4d6f204dc3a9c3a9c3a9f09f9a804df09f9a80f09f9a802020f09f9a80c3a96f6f20c3a9f09f9a806f6f20f09f9a806f6f6fc3a96f6fc3a96f4d00000000000000000000000000" + }, + { + "name": "random-(bool,uint16)", + "type": "(bool,uint16)", + "value": [false, "55978"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "55978" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060a98061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252600080825260209182018190528251808401845281815261daaa90830190815283519182525161ffff169181019190915281519081900390910190f3fea264697066735822122072a1f81ef43361c1763024521e2d95361e3a457b45d153126023bc4cf9e0175964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_60827174 {\n bool s_0;\n uint16 s_1;\n }\n\n function test () public pure returns (S_60827174 memory) {\n S_60827174 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n uint16 r_1 = 55978;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000daaa" + }, + { + "name": "random-(bool,uint216)", + "type": "(bool,uint216)", + "value": [false, "87165202384040111766208478397873575359676544614498925030616085697"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "87165202384040111766208478397873575359676544614498925030616085697" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060c78061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201819052825180840184528181527ad3e309e290ea87b5277f1f3cb03b19c95f2633bf7efefecd4434c19083019081528351918252516001600160d81b03169181019190915281519081900390910190f3fea26469706673582212202c739ef0f89fab3a853df3c46a66cfb179a4311692e7feca70ea7d7dc564213c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7758628d {\n bool s_0;\n uint216 s_1;\n }\n\n function test () public pure returns (S_7758628d memory) {\n S_7758628d memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n uint216 r_1 = 87165202384040111766208478397873575359676544614498925030616085697;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000000000000000d3e309e290ea87b5277f1f3cb03b19c95f2633bf7efefecd4434c1" + }, + { + "name": "random-(bool)[]", + "type": "(bool)[]", + "value": [[false], [false], [true]], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101d4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610141565b60405180910390f35b6040805160038082526080820190925260609160009190816020015b60408051602081019091526000815281526020019060019003908161006a5750506040805160208101909152600080825282519293509091829184916100b2576100b2610188565b6020026020010181905250506100d660405180602001604052806000151581525090565b6000815281518190839060019081106100f1576100f1610188565b60200260200101819052505061011560405180602001604052806000151581525090565b60018152815181908390600290811061013057610130610188565b602090810291909101015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561017c5783515115158352928401929184019160010161015d565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220303b703f551cca033f2306f043d64d529e9f9760bb5a332969f21dfaad465fb264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1053bda {\n bool s_0;\n }\n\n function test () public pure returns (S_c1053bda[] memory) {\n S_c1053bda[] memory r = new S_c1053bda[](3);\n {\n S_c1053bda memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_c1053bda memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n r[1] = r_1;\n }\n {\n S_c1053bda memory r_2;\n {\n bool r_2_0 = true;\n r_2.s_0 = r_2_0;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bool)[4]", + "type": "(bool)[4]", + "value": [[false], [false], [false], [true]], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610144806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100da565b60405180910390f35b6100566100a6565b61005e6100a6565b60408051602080820183526000808352918452825180820184528281528482015282518082018452918252838301919091528151908101909152600181526060820152919050565b60405180608001604052806004905b6040805160208101909152600081528152602001906001900390816100b55790505090565b60808101818360005b60048110156101055781515115158352602092830192909101906001016100e3565b5050509291505056fea264697066735822122019ffe95336670cc7848d61c294aa7f39f9c24b2ec2aea77e2377eeef50630dfb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1053bda {\n bool s_0;\n }\n\n function test () public pure returns (S_c1053bda[4] memory) {\n S_c1053bda[4] memory r;\n {\n S_c1053bda memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_c1053bda memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n r[1] = r_1;\n }\n {\n S_c1053bda memory r_2;\n {\n bool r_2_0 = false;\n r_2.s_0 = r_2_0;\n }\n r[2] = r_2;\n }\n {\n S_c1053bda memory r_3;\n {\n bool r_3_0 = true;\n r_3.s_0 = r_3_0;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bool[])", + "type": "(bool[])", + "value": [[true, true, true]], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061011a565b60405180910390f35b6040805160208082018352606080835283519182018452815282516003808252608082019094529192909160009181602001602082028036833701905050905060006001905080826000815181106100a8576100a861016c565b6020026020010190151590811515815250505060006001905080826001815181106100d5576100d561016c565b6020026020010190151590811515815250505060006001905080826002815181106101025761010261016c565b91151560209283029190910190910152508152919050565b6020808252825182820182905280516040840181905260009291820190839060608601905b808310156101615783511515825292840192600192909201919084019061013f565b509695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220901be4cfdc4761324137bb00a86e72ed0cf907679b29bc724d16a87dfa36c02264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8761250c {\n bool[] s_0;\n }\n\n function test () public pure returns (S_8761250c memory) {\n S_8761250c memory r;\n {\n bool[] memory r_0 = new bool[](3);\n {\n bool r_0_0 = true;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0[1] = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bool[1])", + "type": "(bool[1])", + "value": [[false]], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906098565b60405180910390f35b604d6064565b60536064565b6059607a565b600081528152919050565b60405180602001604052806075607a565b905290565b60405180602001604052806001906020820280368337509192915050565b81516020828101918360005b600181101560c157825115158252918301919083019060010160a4565b505050509291505056fea26469706673582212206ab2d548fa9d7d84c103753c4da0969c11105ff32ec03a3449ce32bf3981151564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d2d22cc7 {\n bool[1] s_0;\n }\n\n function test () public pure returns (S_d2d22cc7 memory) {\n S_d2d22cc7 memory r;\n {\n bool[1] memory r_0;\n {\n bool r_0_0 = false;\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool[4])", + "type": "(bool[4])", + "value": [[true, false, true, false]], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610118806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060af565b60405180910390f35b604d607b565b6053607b565b60596091565b6001808252600060208301819052604083019190915260608201528152919050565b6040518060200160405280608c6091565b905290565b60405180608001604052806004906020820280368337509192915050565b815160808201908260005b600481101560d9578251151582526020928301929091019060010160ba565b5050509291505056fea2646970667358221220b16b44ec8efe972fc9c951cf752f901dcfd1ce511bb91107e83ffe8bb986348364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_4c932bca {\n bool[4] s_0;\n }\n\n function test () public pure returns (S_4c932bca memory) {\n S_4c932bca memory r;\n {\n bool[4] memory r_0;\n {\n bool r_0_0 = true;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0[1] = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0[2] = r_0_2;\n }\n {\n bool r_0_3 = false;\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes11,bytes10)", + "type": "(bytes11,bytes10)", + "value": ["0x81a07c335f1459acac732b", "0x23367496ee8b596a4776"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x81a07c335f1459acac732b" + }, + { + "type": "hexstring", + "value": "0x23367496ee8b596a4776" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060c88061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820152815180830183526a81a07c335f1459acac732b60a81b80825269119b3a4b7745acb523bb60b11b918301918252835190815290516001600160b01b0319169181019190915281519081900390910190f3fea264697066735822122008c5406962c34268e2fa28e3ac00adbdaf68e04ac448fd4578d0b9c306051ecf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_053c0310 {\n bytes11 s_0;\n bytes10 s_1;\n }\n\n function test () public pure returns (S_053c0310 memory) {\n S_053c0310 memory r;\n {\n bytes11 r_0 = bytes11(0x81a07c335f1459acac732b);\n r.s_0 = r_0;\n }\n {\n bytes10 r_1 = bytes10(0x23367496ee8b596a4776);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x81a07c335f1459acac732b00000000000000000000000000000000000000000023367496ee8b596a477600000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes11,bytes22)", + "type": "(bytes11,bytes22)", + "value": ["0xe43baebe6de636a2f1f758", "0xc71990f84820456303656d561deef26172af44ef4775"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xe43baebe6de636a2f1f758" + }, + { + "type": "hexstring", + "value": "0xc71990f84820456303656d561deef26172af44ef4775" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d78061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820152815180830183526a1c8775d7cdbcc6d45e3eeb60ab1b80825275c71990f84820456303656d561deef26172af44ef477560501b9183019182528351908152905169ffffffffffffffffffff19169181019190915281519081900390910190f3fea2646970667358221220d0db7026dc262526421edfc622d0e3a2de7e970b12fc68e1005d43220f47f9cb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_263b9e7f {\n bytes11 s_0;\n bytes22 s_1;\n }\n\n function test () public pure returns (S_263b9e7f memory) {\n S_263b9e7f memory r;\n {\n bytes11 r_0 = bytes11(0xe43baebe6de636a2f1f758);\n r.s_0 = r_0;\n }\n {\n bytes22 r_1 = bytes22(0xc71990f84820456303656d561deef26172af44ef4775);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0xe43baebe6de636a2f1f758000000000000000000000000000000000000000000c71990f84820456303656d561deef26172af44ef477500000000000000000000" + }, + { + "name": "random-(bytes11)[1]", + "type": "(bytes11)[1]", + "value": [["0x4acc576b33c69bec461d21"]], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x4acc576b33c69bec461d21" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061011a806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060a9565b60405180910390f35b604d6076565b60536076565b60408051602081019091526a4acc576b33c69bec461d2160a81b81528152919050565b60405180602001604052806001905b60408051602081019091526000815281526020019060019003908160855790505090565b602081810190828460005b600181101560da578151516001600160a81b0319168352918301919083019060010160b4565b505050509291505056fea26469706673582212203a663c5da91763fd9df1a367aeaef524841648537644717ff5897f1efb84a53c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1b4cf483 {\n bytes11 s_0;\n }\n\n function test () public pure returns (S_1b4cf483[1] memory) {\n S_1b4cf483[1] memory r;\n {\n S_1b4cf483 memory r_0;\n {\n bytes11 r_0_0 = bytes11(0x4acc576b33c69bec461d21);\n r_0.s_0 = r_0_0;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x4acc576b33c69bec461d21000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes13,address)", + "type": "(bytes13,address)", + "value": ["0x5862b76b3c90cb55940e9b6641", "0xf4eDBA6504A30b5618D22aD555D7bF086Eb00371"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x5862b76b3c90cb55940e9b6641" + }, + { + "type": "address", + "value": "0xf4eDBA6504A30b5618D22aD555D7bF086Eb00371" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d08061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820152815180830183526c5862b76b3c90cb55940e9b664160981b80825273f4edba6504a30b5618d22ad555d7bf086eb00371918301918252835190815290516001600160a01b03169181019190915281519081900390910190f3fea264697066735822122097617cf3ffbf1f833d0e6d51cf6e1fe945c7805e373e655d5324a1778cff275664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ad52bcb9 {\n bytes13 s_0;\n address s_1;\n }\n\n function test () public pure returns (S_ad52bcb9 memory) {\n S_ad52bcb9 memory r;\n {\n bytes13 r_0 = bytes13(0x5862b76b3c90cb55940e9b6641);\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xf4eDBA6504A30b5618D22aD555D7bF086Eb00371;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x5862b76b3c90cb55940e9b664100000000000000000000000000000000000000000000000000000000000000f4edba6504a30b5618d22ad555d7bf086eb00371" + }, + { + "name": "random-(bytes16,bytes8)", + "type": "(bytes16,bytes8)", + "value": ["0xc4b0d3d23ad8250f10e1aa9d1d7f8022", "0x3a969acdc576e584"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc4b0d3d23ad8250f10e1aa9d1d7f8022" + }, + { + "type": "hexstring", + "value": "0x3a969acdc576e584" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060cb8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820152815180830183526f625869e91d6c12878870d54e8ebfc01160811b808252670ea5a6b3715db96160c21b918301918252835190815290516001600160c01b0319169181019190915281519081900390910190f3fea26469706673582212201b19c17eef3c7b104983a813fd704c21efaa4d633810df6219f6e398a48922b664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f779c28d {\n bytes16 s_0;\n bytes8 s_1;\n }\n\n function test () public pure returns (S_f779c28d memory) {\n S_f779c28d memory r;\n {\n bytes16 r_0 = bytes16(0xc4b0d3d23ad8250f10e1aa9d1d7f8022);\n r.s_0 = r_0;\n }\n {\n bytes8 r_1 = bytes8(0x3a969acdc576e584);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0xc4b0d3d23ad8250f10e1aa9d1d7f8022000000000000000000000000000000003a969acdc576e584000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes16[1])", + "type": "(bytes16[1])", + "value": [["0x69bb67dd1fa5bb4a9855a7f50b32b9cd"]], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x69bb67dd1fa5bb4a9855a7f50b32b9cd" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610124806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060aa565b60405180910390f35b604d6076565b60536076565b6059608c565b6f69bb67dd1fa5bb4a9855a7f50b32b9cd60801b81528152919050565b60405180602001604052806087608c565b905290565b60405180602001604052806001906020820280368337509192915050565b81516020828101918360005b600181101560e45782516fffffffffffffffffffffffffffffffff19168252918301919083019060010160b6565b505050509291505056fea26469706673582212206eea35adf35d647f934d8d31e02e8185d50ead2158b13b68982d11b6b082077364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_23989784 {\n bytes16[1] s_0;\n }\n\n function test () public pure returns (S_23989784 memory) {\n S_23989784 memory r;\n {\n bytes16[1] memory r_0;\n {\n bytes16 r_0_0 = bytes16(0x69bb67dd1fa5bb4a9855a7f50b32b9cd);\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x69bb67dd1fa5bb4a9855a7f50b32b9cd00000000000000000000000000000000" + }, + { + "name": "random-(bytes18,bool)", + "type": "(bytes18,bool)", + "value": ["0x21d679e8e6ca3c669bec01f2fc6f76ada5f4", true], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x21d679e8e6ca3c669bec01f2fc6f76ada5f4" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060bb8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820152815180830183527108759e7a39b28f19a6fb007cbf1bddab697d60721b80825260019183019182528351908152905115159181019190915281519081900390910190f3fea26469706673582212204e1716e3a15d772dddb83671c7919751c92aba1cc571d09132f81f3ff1e32eb164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_897dc7d7 {\n bytes18 s_0;\n bool s_1;\n }\n\n function test () public pure returns (S_897dc7d7 memory) {\n S_897dc7d7 memory r;\n {\n bytes18 r_0 = bytes18(0x21d679e8e6ca3c669bec01f2fc6f76ada5f4);\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x21d679e8e6ca3c669bec01f2fc6f76ada5f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bytes18,int128)", + "type": "(bytes18,int128)", + "value": [ + "0x9b7403c28aed20a70ef18150ecb47b2b36f1", + "-9906609592797879413297084991507254536" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x9b7403c28aed20a70ef18150ecb47b2b36f1" + }, + { + "type": "number", + "value": "-9906609592797879413297084991507254536" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060cc8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252600080825260209182015281518083018352719b7403c28aed20a70ef18150ecb47b2b36f160701b8082526f0773f1902d3e3ffd023d2f533b97cd071991830191825283519081529051600f0b9181019190915281519081900390910190f3fea2646970667358221220317dfe751e35209b4b309bc9f8a5bfd55943ebc5bbe9c8018679d23e0054a46e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_506e5adc {\n bytes18 s_0;\n int128 s_1;\n }\n\n function test () public pure returns (S_506e5adc memory) {\n S_506e5adc memory r;\n {\n bytes18 r_0 = bytes18(0x9b7403c28aed20a70ef18150ecb47b2b36f1);\n r.s_0 = r_0;\n }\n {\n int128 r_1 = -9906609592797879413297084991507254536;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x9b7403c28aed20a70ef18150ecb47b2b36f10000000000000000000000000000fffffffffffffffffffffffffffffffff88c0e6fd2c1c002fdc2d0acc46832f8" + }, + { + "name": "random-(bytes18,uint144)", + "type": "(bytes18,uint144)", + "value": [ + "0x5bd597759ba21d3b0a959d312f32649c0884", + "6123384944193220257266146777339123214536772" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x5bd597759ba21d3b0a959d312f32649c0884" + }, + { + "type": "number", + "value": "6123384944193220257266146777339123214536772" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060de8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820152815180830183527116f565dd66e8874ec2a5674c4bcc9927022160721b80825271464b02d280cfa84caf9c1fabecbf6f7f50449183019182528351908152905171ffffffffffffffffffffffffffffffffffff169181019190915281519081900390910190f3fea26469706673582212201f16c117950b49c606fa0672b3d29806a5f4cabef4870be9696d7b01c149423264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c829e6cb {\n bytes18 s_0;\n uint144 s_1;\n }\n\n function test () public pure returns (S_c829e6cb memory) {\n S_c829e6cb memory r;\n {\n bytes18 r_0 = bytes18(0x5bd597759ba21d3b0a959d312f32649c0884);\n r.s_0 = r_0;\n }\n {\n uint144 r_1 = 6123384944193220257266146777339123214536772;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x5bd597759ba21d3b0a959d312f32649c088400000000000000000000000000000000000000000000000000000000464b02d280cfa84caf9c1fabecbf6f7f5044" + }, + { + "name": "random-(bytes19,address)", + "type": "(bytes19,address)", + "value": [ + "0xf3151fa9a097a8086b84d95cbf62097ba2b29d", + "0x5AC583595b0472ce2cBC320D3E5872625CC0634B" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf3151fa9a097a8086b84d95cbf62097ba2b29d" + }, + { + "type": "address", + "value": "0x5AC583595b0472ce2cBC320D3E5872625CC0634B" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d68061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201528151808301835272f3151fa9a097a8086b84d95cbf62097ba2b29d60681b808252735ac583595b0472ce2cbc320d3e5872625cc0634b918301918252835190815290516001600160a01b03169181019190915281519081900390910190f3fea26469706673582212205c0df11d9eb5db2e8f33946c5c40714b4d9bfceccc45986321218971428e778f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_284b0fd8 {\n bytes19 s_0;\n address s_1;\n }\n\n function test () public pure returns (S_284b0fd8 memory) {\n S_284b0fd8 memory r;\n {\n bytes19 r_0 = bytes19(0xf3151fa9a097a8086b84d95cbf62097ba2b29d);\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x5AC583595b0472ce2cBC320D3E5872625CC0634B;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0xf3151fa9a097a8086b84d95cbf62097ba2b29d000000000000000000000000000000000000000000000000005ac583595b0472ce2cbc320d3e5872625cc0634b" + }, + { + "name": "random-(bytes20,string)", + "type": "(bytes20,string)", + "value": [ + "0x3fba4a06135661c87cffa6d91a7e249942876541", + "Moo é🚀oé🚀M🚀 éoéooé oéé o ooo🚀 🚀éoo🚀M 🚀o🚀🚀M ooMééooMé" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x3fba4a06135661c87cffa6d91a7e249942876541" + }, + { + "type": "string", + "value": "Moo é🚀oé🚀M🚀 éoéooé oéé o ooo🚀 🚀éoo🚀M 🚀o🚀🚀M ooMééooMé" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101bf806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100b9565b60405180910390f35b604080518082019091526000815260606020820152604080518082019091526000815260606020820152733fba4a06135661c87cffa6d91a7e24994287654160601b81526040805160808101909152605a808252600091906101306020830139602083015250919050565b600060208083526bffffffffffffffffffffffff198451168184015280840151604080850152805180606086015260005b81811015610106578281018401518682016080015283016100ea565b81811115610118576000608083880101525b50601f01601f19169390930160800194935050505056fe4d6f6f20c3a9f09f9a806fc3a9f09f9a804df09f9a8020c3a96fc3a96f6fc3a9206fc3a9c3a9206f206f6f6ff09f9a8020f09f9a80c3a96f6ff09f9a804d20f09f9a806ff09f9a80f09f9a804d206f6f4dc3a9c3a96f6f4dc3a9a264697066735822122010b284cd233e3de5440029bad60e3ff3d990d1aefe7cf58278890e3ca7e6239364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d0250507 {\n bytes20 s_0;\n string s_1;\n }\n\n function test () public pure returns (S_d0250507 memory) {\n S_d0250507 memory r;\n {\n bytes20 r_0 = bytes20(0x3FBa4A06135661C87CffA6D91a7E249942876541);\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀oé🚀M🚀 éoéooé oéé o ooo🚀 🚀éoo🚀M 🚀o🚀🚀M ooMééooMé\";\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000203fba4a06135661c87cffa6d91a7e2499428765410000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a806fc3a9f09f9a804df09f9a8020c3a96fc3a96f6fc3a9206fc3a9c3a9206f206f6f6ff09f9a8020f09f9a80c3a96f6ff09f9a804d20f09f9a806ff09f9a80f09f9a804d206f6f4dc3a9c3a96f6f4dc3a9000000000000" + }, + { + "name": "random-(bytes22)[2]", + "type": "(bytes22)[2]", + "value": [ + ["0xf58de9012784dd32599021ed4498d2501fe8a4085614"], + ["0xfbc332c4abe7a324d44bdcaa3915d34852f7c820b29d"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf58de9012784dd32599021ed4498d2501fe8a4085614" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xfbc332c4abe7a324d44bdcaa3915d34852f7c820b29d" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061015d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e8565b60405180910390f35b6100566100b4565b61005e6100b4565b6040805160208082018352753d637a4049e1374c9664087b5126349407fa2902158560521b8252908352815180820190925275fbc332c4abe7a324d44bdcaa3915d34852f7c820b29d60501b8252820152919050565b60405180604001604052806002905b6040805160208101909152600081528152602001906001900390816100c35790505090565b60408101818360005b600281101561011e5781515169ffffffffffffffffffff19168352602092830192909101906001016100f1565b5050509291505056fea2646970667358221220e5377b64f00f02b46e611fc5ac39f5b624d17d3881d72d58c9b7e1e8efb49aaa64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_50006446 {\n bytes22 s_0;\n }\n\n function test () public pure returns (S_50006446[2] memory) {\n S_50006446[2] memory r;\n {\n S_50006446 memory r_0;\n {\n bytes22 r_0_0 = bytes22(0xf58de9012784dd32599021ed4498d2501fe8a4085614);\n r_0.s_0 = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_50006446 memory r_1;\n {\n bytes22 r_1_0 = bytes22(0xfbc332c4abe7a324d44bdcaa3915d34852f7c820b29d);\n r_1.s_0 = r_1_0;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0xf58de9012784dd32599021ed4498d2501fe8a408561400000000000000000000fbc332c4abe7a324d44bdcaa3915d34852f7c820b29d00000000000000000000" + }, + { + "name": "random-(bytes23,bool)", + "type": "(bytes23,bool)", + "value": ["0x751643cd0516b872bb689e7882a4ed125925d960acecd7", true], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x751643cd0516b872bb689e7882a4ed125925d960acecd7" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060c68061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820152815180830183527f751643cd0516b872bb689e7882a4ed125925d960acecd700000000000000000080825260019183019182528351908152905115159181019190915281519081900390910190f3fea2646970667358221220d5d266b7917921f22b214c09b7cb7522670e5a1783d499a1dc0d883b97ead05c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c53fe6be {\n bytes23 s_0;\n bool s_1;\n }\n\n function test () public pure returns (S_c53fe6be memory) {\n S_c53fe6be memory r;\n {\n bytes23 r_0 = bytes23(0x751643cd0516b872bb689e7882a4ed125925d960acecd7);\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x751643cd0516b872bb689e7882a4ed125925d960acecd70000000000000000000000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bytes27,bool)", + "type": "(bytes27,bool)", + "value": ["0xf39996b8563edc6a93d6fe473386aeb8af472fcb4f3976195fa640", false], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf39996b8563edc6a93d6fe473386aeb8af472fcb4f3976195fa640" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060c78061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201819052825180840184528083019182527ff39996b8563edc6a93d6fe473386aeb8af472fcb4f3976195fa6400000000000908190528351908152905115159181019190915281519081900390910190f3fea2646970667358221220195ea6c3c38987184f342473851bcf424ce4e01a92e305415c90f800185f2d6c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a641c2dc {\n bytes27 s_0;\n bool s_1;\n }\n\n function test () public pure returns (S_a641c2dc memory) {\n S_a641c2dc memory r;\n {\n bytes27 r_0 = bytes27(0xf39996b8563edc6a93d6fe473386aeb8af472fcb4f3976195fa640);\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0xf39996b8563edc6a93d6fe473386aeb8af472fcb4f3976195fa64000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes27[])", + "type": "(bytes27[])", + "value": [[]], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f48061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516020808201835260609182905282518082018452918252825160008152908101835281529051605f91906068565b60405180910390f35b6020808252825182820182905280516040840181905260009291820190839060608601905b8083101560b357835164ffffffffff19168252928401926001929092019190840190608d565b50969550505050505056fea2646970667358221220ffdd7f5a2d13a4fc3211efaf2779b42eafa99ef61696b0148eb1c4c553aec0ef64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0e795d26 {\n bytes27[] s_0;\n }\n\n function test () public pure returns (S_0e795d26 memory) {\n S_0e795d26 memory r;\n {\n bytes27[] memory r_0 = new bytes27[](0);\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes28,address)", + "type": "(bytes28,address)", + "value": [ + "0x5e56fee6cbbcc00228e34cdea75fece04be58a7911a7b2b2d4de2aff", + "0x00e04055f05167D69E38BA1607fF0bc7EbEf757E" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x5e56fee6cbbcc00228e34cdea75fece04be58a7911a7b2b2d4de2aff" + }, + { + "type": "address", + "value": "0x00e04055f05167D69E38BA1607fF0bc7EbEf757E" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060df8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820152815180830183527f5e56fee6cbbcc00228e34cdea75fece04be58a7911a7b2b2d4de2aff0000000080825272e04055f05167d69e38ba1607ff0bc7ebef757e918301918252835190815290516001600160a01b03169181019190915281519081900390910190f3fea2646970667358221220006de0055b4a70888d651c091451781b14cd745493e9346e632e30bb9fe1ea4964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_113ad7c9 {\n bytes28 s_0;\n address s_1;\n }\n\n function test () public pure returns (S_113ad7c9 memory) {\n S_113ad7c9 memory r;\n {\n bytes28 r_0 = bytes28(0x5e56fee6cbbcc00228e34cdea75fece04be58a7911a7b2b2d4de2aff);\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x00e04055f05167D69E38BA1607fF0bc7EbEf757E;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x5e56fee6cbbcc00228e34cdea75fece04be58a7911a7b2b2d4de2aff0000000000000000000000000000000000e04055f05167d69e38ba1607ff0bc7ebef757e" + }, + { + "name": "random-(bytes3,address)", + "type": "(bytes3,address)", + "value": ["0x51fbfb", "0x02ac991fea474572f7BC1B23Fe96A8db7E49Ab7F"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x51fbfb" + }, + { + "type": "address", + "value": "0x02ac991fea474572f7BC1B23Fe96A8db7E49Ab7F" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060c68061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820152815180830183526251fbfb60e81b8082527302ac991fea474572f7bc1b23fe96a8db7e49ab7f918301918252835190815290516001600160a01b03169181019190915281519081900390910190f3fea264697066735822122032c01969e1b03116af23a6676f61daf45f506d05c64f2bc5cb6151efaab72a9d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9e092c52 {\n bytes3 s_0;\n address s_1;\n }\n\n function test () public pure returns (S_9e092c52 memory) {\n S_9e092c52 memory r;\n {\n bytes3 r_0 = bytes3(0x51fbfb);\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x02ac991fea474572f7BC1B23Fe96A8db7E49Ab7F;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x51fbfb000000000000000000000000000000000000000000000000000000000000000000000000000000000002ac991fea474572f7bc1b23fe96a8db7e49ab7f" + }, + { + "name": "random-(bytes30[])", + "type": "(bytes30[])", + "value": [ + [ + "0x1ec9284335849ab092d4dbc3506b9f5bb67ce5599fbeafe6e7a2b88caf27", + "0x65a8801d2186311b21bc4617d485101a68871088a2cd2ef1d37c9e6e19c3" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x1ec9284335849ab092d4dbc3506b9f5bb67ce5599fbeafe6e7a2b88caf27" + }, + { + "type": "hexstring", + "value": "0x65a8801d2186311b21bc4617d485101a68871088a2cd2ef1d37c9e6e19c3" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101ce806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061012d565b60405180910390f35b6040805160208082018352606080835283518083018552818152845160028082529281018652939490936000939092919083019080368337505081519192507f1ec9284335849ab092d4dbc3506b9f5bb67ce5599fbeafe6e7a2b88caf2700009182915083906000906100c3576100c3610182565b61ffff19909216602092830291909101909101525080517f65a8801d2186311b21bc4617d485101a68871088a2cd2ef1d37c9e6e19c300009081908390600190811061011157610111610182565b61ffff1990921660209283029190910190910152508152919050565b6020808252825182820182905280516040840181905260009291820190839060608601905b8083101561017757835161ffff19168252928401926001929092019190840190610152565b509695505050505050565b634e487b7160e01b600052603260045260246000fdfea264697066735822122031c39d6841221d584addb74a3207e539e8f3a625fc5d6a6be96f554317a8f8f964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_180840c8 {\n bytes30[] s_0;\n }\n\n function test () public pure returns (S_180840c8 memory) {\n S_180840c8 memory r;\n {\n bytes30[] memory r_0 = new bytes30[](2);\n {\n bytes30 r_0_0 = bytes30(0x1ec9284335849ab092d4dbc3506b9f5bb67ce5599fbeafe6e7a2b88caf27);\n r_0[0] = r_0_0;\n }\n {\n bytes30 r_0_1 = bytes30(0x65a8801d2186311b21bc4617d485101a68871088a2cd2ef1d37c9e6e19c3);\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021ec9284335849ab092d4dbc3506b9f5bb67ce5599fbeafe6e7a2b88caf27000065a8801d2186311b21bc4617d485101a68871088a2cd2ef1d37c9e6e19c30000" + }, + { + "name": "random-(bytes4,address)", + "type": "(bytes4,address)", + "value": ["0xaf8e75d7", "0xb4d1fECB7dC89FC277D1Aff5B66d68208D7b2177"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xaf8e75d7" + }, + { + "type": "address", + "value": "0xb4d1fECB7dC89FC277D1Aff5B66d68208D7b2177" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060c78061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201528151808301835263af8e75d760e01b80825273b4d1fecb7dc89fc277d1aff5b66d68208d7b2177918301918252835190815290516001600160a01b03169181019190915281519081900390910190f3fea26469706673582212209c701f81f4172ed8ab4ca1d2a9884268d7aac73f689f7687818f80a33a2caa2e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_dc9b5706 {\n bytes4 s_0;\n address s_1;\n }\n\n function test () public pure returns (S_dc9b5706 memory) {\n S_dc9b5706 memory r;\n {\n bytes4 r_0 = bytes4(0xaf8e75d7);\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xb4d1fECB7dC89FC277D1Aff5B66d68208D7b2177;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0xaf8e75d700000000000000000000000000000000000000000000000000000000000000000000000000000000b4d1fecb7dc89fc277d1aff5b66d68208d7b2177" + }, + { + "name": "random-(bytes5)[1]", + "type": "(bytes5)[1]", + "value": [["0x382d85e020"]], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x382d85e020" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610114806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060a3565b60405180910390f35b604d6070565b60536070565b60408051602081019091526401c16c2f0160dd1b81528152919050565b60405180602001604052806001905b604080516020810190915260008152815260200190600190039081607f5790505090565b602081810190828460005b600181101560d4578151516001600160d81b0319168352918301919083019060010160ae565b505050509291505056fea264697066735822122049dbf4909059c8eb5e8fac6ef5ee8db06d6ec55566614ad72ce19c0892f024f764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_167f749a {\n bytes5 s_0;\n }\n\n function test () public pure returns (S_167f749a[1] memory) {\n S_167f749a[1] memory r;\n {\n S_167f749a memory r_0;\n {\n bytes5 r_0_0 = bytes5(0x382d85e020);\n r_0.s_0 = r_0_0;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x382d85e020000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes7,bytes19)", + "type": "(bytes7,bytes19)", + "value": ["0xefa2d1ba6cd34d", "0x76882969d2017d92e37aa083c14a9c80fcdae9"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xefa2d1ba6cd34d" + }, + { + "type": "hexstring", + "value": "0x76882969d2017d92e37aa083c14a9c80fcdae9" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d38061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201528151808301835266efa2d1ba6cd34d60c81b8082527276882969d2017d92e37aa083c14a9c80fcdae960681b918301918252835190815290516cffffffffffffffffffffffffff19169181019190915281519081900390910190f3fea2646970667358221220352d7140a4e0ef794146c8ac17d5f20569e2f5132cace6ba13567a80d9d3b09464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8357c12d {\n bytes7 s_0;\n bytes19 s_1;\n }\n\n function test () public pure returns (S_8357c12d memory) {\n S_8357c12d memory r;\n {\n bytes7 r_0 = bytes7(0xefa2d1ba6cd34d);\n r.s_0 = r_0;\n }\n {\n bytes19 r_1 = bytes19(0x76882969d2017d92e37aa083c14a9c80fcdae9);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0xefa2d1ba6cd34d0000000000000000000000000000000000000000000000000076882969d2017d92e37aa083c14a9c80fcdae900000000000000000000000000" + }, + { + "name": "random-(bytes7,string)", + "type": "(bytes7,string)", + "value": [ + "0x8c9e8940818414", + "Moo é🚀 M🚀 oooé 🚀 M o é🚀éooo🚀oéoMé🚀🚀oéM🚀🚀oéo 🚀oooé o🚀🚀M🚀ooM o" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8c9e8940818414" + }, + { + "type": "string", + "value": "Moo é🚀 M🚀 oooé 🚀 M o é🚀éooo🚀oéoMé🚀🚀oéM🚀🚀oéo 🚀oooé o🚀🚀M🚀ooM o" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ac565b60405180910390f35b604080518082019091526000815260606020820152604080518082019091526000815260606020820152662327a25020610560ca1b81526040805160a08101909152606e808252600091906101206020830139602083015250919050565b6000602080835266ffffffffffffff60c81b8451168184015280840151604080850152805180606086015260005b818110156100f6578281018401518682016080015283016100da565b81811115610108576000608083880101525b50601f01601f19169390930160800194935050505056fe4d6f6f20c3a9f09f9a80204df09f9a80206f6f6fc3a9202020f09f9a80204d206f20c3a9f09f9a80c3a96f6f6ff09f9a806fc3a96f4dc3a9f09f9a80f09f9a806fc3a94df09f9a80f09f9a806fc3a96f20f09f9a806f6f6fc3a9206ff09f9a80f09f9a804df09f9a806f6f4d206fa264697066735822122058e4e1d7812247c4bfd509e0159872cb9374324e376977884e9efb778d4d8faf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_76f7d9be {\n bytes7 s_0;\n string s_1;\n }\n\n function test () public pure returns (S_76f7d9be memory) {\n S_76f7d9be memory r;\n {\n bytes7 r_0 = bytes7(0x8c9e8940818414);\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀 M🚀 oooé 🚀 M o é🚀éooo🚀oéoMé🚀🚀oéM🚀🚀oéo 🚀oooé o🚀🚀M🚀ooM o\";\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000208c9e8940818414000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006e4d6f6f20c3a9f09f9a80204df09f9a80206f6f6fc3a9202020f09f9a80204d206f20c3a9f09f9a80c3a96f6f6ff09f9a806fc3a96f4dc3a9f09f9a80f09f9a806fc3a94df09f9a80f09f9a806fc3a96f20f09f9a806f6f6fc3a9206ff09f9a80f09f9a804df09f9a806f6f4d206f000000000000000000000000000000000000" + }, + { + "name": "random-(bytes7)[2]", + "type": "(bytes7)[2]", + "value": [["0x293ab54da0e44a"], ["0x5432e94139d0b0"]], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x293ab54da0e44a" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x5432e94139d0b0" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061012e806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060be565b60405180910390f35b604d608b565b6053608b565b604080516020808201835266149d5aa6d0722560c91b825290835281518082019092526605432e94139d0b60cc1b8252820152919050565b60405180604001604052806002905b604080516020810190915260008152815260200190600190039081609a5790505090565b60408101818360005b600281101560ef578151516001600160c81b03191683526020928301929091019060010160c7565b5050509291505056fea264697066735822122068307856ec9f601afe68fc21e10993687457b20ebe70d0b3dbd8585df5057ddd64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_16e6ff5c {\n bytes7 s_0;\n }\n\n function test () public pure returns (S_16e6ff5c[2] memory) {\n S_16e6ff5c[2] memory r;\n {\n S_16e6ff5c memory r_0;\n {\n bytes7 r_0_0 = bytes7(0x293ab54da0e44a);\n r_0.s_0 = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_16e6ff5c memory r_1;\n {\n bytes7 r_1_0 = bytes7(0x5432e94139d0b0);\n r_1.s_0 = r_1_0;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x293ab54da0e44a000000000000000000000000000000000000000000000000005432e94139d0b000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int,address)", + "type": "(int,address)", + "value": [ + "-34846116124737989606570417020060979443781572848779555066736632306773150921265", + "0xB6581557115a69a2CB39Cf6C86786a392626a1c2" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-34846116124737989606570417020060979443781572848779555066736632306773150921265" + }, + { + "type": "address", + "value": "0xB6581557115a69a2CB39Cf6C86786a392626a1c2" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060e38061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252600080825260209182015281518083019092527fb2f5cc156cf000e9b420dbac1285f7193a374a8840e155b2601824b45d840dcf825273b6581557115a69a2cb39cf6c86786a392626a1c29082015260408051825181526020928301516001600160a01b0316928101929092520160405180910390f3fea2646970667358221220e566c255a2c7828408b5d0a3de8d2730f0788557175e00b076eb0474f3a2dc6164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_90be0e5e {\n int256 s_0;\n address s_1;\n }\n\n function test () public pure returns (S_90be0e5e memory) {\n S_90be0e5e memory r;\n {\n int r_0 = -34846116124737989606570417020060979443781572848779555066736632306773150921265;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xB6581557115a69a2CB39Cf6C86786a392626a1c2;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0xb2f5cc156cf000e9b420dbac1285f7193a374a8840e155b2601824b45d840dcf000000000000000000000000b6581557115a69a2cb39cf6c86786a392626a1c2" + }, + { + "name": "random-(int120,string)", + "type": "(int120,string)", + "value": [ + "548451168830675719576564055181551657", + "Moo é🚀🚀é🚀é🚀M 🚀é🚀M🚀o M🚀oMo é 🚀🚀M oé🚀o o🚀MM🚀🚀 éé 🚀 oo🚀MMMMé" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "548451168830675719576564055181551657" + }, + { + "type": "string", + "value": "Moo é🚀🚀é🚀é🚀M 🚀é🚀M🚀o M🚀oMo é 🚀🚀M oé🚀o o🚀MM🚀🚀 éé 🚀 oo🚀MMMMé" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101c5806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100b1565b60405180910390f35b6040805180820190915260008152606060208201526040805180820190915260008152606060208201526e69a0baf7dcc8477c1d48c03316e82981526040805160a0810190915260748082526000919061011c6020830139602083015250919050565b600060208083528351600e0b8184015280840151604080850152805180606086015260005b818110156100f2578281018401518682016080015283016100d6565b81811115610104576000608083880101525b50601f01601f19169390930160800194935050505056fe4d6f6f20c3a9f09f9a80f09f9a80c3a9f09f9a80c3a9f09f9a804d20f09f9a80c3a9f09f9a804df09f9a806f204df09f9a806f4d6f2020c3a920f09f9a80f09f9a804d206fc3a9f09f9a806f206ff09f9a804d4df09f9a80f09f9a802020c3a9c3a920f09f9a80206f6ff09f9a804d4d4d4dc3a9a2646970667358221220dca7037f6ccc14c1061464df56ba47d0f441e50a3c17f4aba695ce93aa52b38764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e8e70c1f {\n int120 s_0;\n string s_1;\n }\n\n function test () public pure returns (S_e8e70c1f memory) {\n S_e8e70c1f memory r;\n {\n int120 r_0 = 548451168830675719576564055181551657;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀🚀é🚀é🚀M 🚀é🚀M🚀o M🚀oMo é 🚀🚀M oé🚀o o🚀MM🚀🚀 éé 🚀 oo🚀MMMMé\";\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000069a0baf7dcc8477c1d48c03316e829000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000744d6f6f20c3a9f09f9a80f09f9a80c3a9f09f9a80c3a9f09f9a804d20f09f9a80c3a9f09f9a804df09f9a806f204df09f9a806f4d6f2020c3a920f09f9a80f09f9a804d206fc3a9f09f9a806f206ff09f9a804d4df09f9a80f09f9a802020c3a9c3a920f09f9a80206f6ff09f9a804d4d4d4dc3a9000000000000000000000000" + }, + { + "name": "random-(int144,string)", + "type": "(int144,string)", + "value": [ + "-7808036541300412537704962664470427716078122", + "Moo é🚀éoMo 🚀ooo ooé Mooo🚀🚀oo MM🚀oéM🚀oéMoMo oo" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-7808036541300412537704962664470427716078122" + }, + { + "type": "string", + "value": "Moo é🚀éoMo 🚀ooo ooé Mooo🚀🚀oo MM🚀oéM🚀oéMoMo oo" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061019b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100b5565b60405180910390f35b6040805180820190915260008152606060208201526040805180820190915260008152606060208201527159a1c1d22d0fb47c89a1edb42cf5b68cca2919815260408051608081019091526046808252600091906101206020830139602083015250919050565b60006020808352835160110b8184015280840151604080850152805180606086015260005b818110156100f6578281018401518682016080015283016100da565b81811115610108576000608083880101525b50601f01601f19169390930160800194935050505056fe4d6f6f20c3a9f09f9a80c3a96f4d6f20f09f9a806f6f6f206f6fc3a920204d6f6f6ff09f9a80f09f9a806f6f20204d4df09f9a806fc3a94df09f9a806fc3a94d6f4d6f206f6fa26469706673582212201bec09d1c195d8392fcad57f1d23b86a40cf41bd6bd2731d15f57cb22ab235f264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fe2e0f55 {\n int144 s_0;\n string s_1;\n }\n\n function test () public pure returns (S_fe2e0f55 memory) {\n S_fe2e0f55 memory r;\n {\n int144 r_0 = -7808036541300412537704962664470427716078122;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀éoMo 🚀ooo ooé Mooo🚀🚀oo MM🚀oéM🚀oéMoMo oo\";\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020ffffffffffffffffffffffffffffa65e3e2dd2f04b83765e124bd30a497335d6000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a80c3a96f4d6f20f09f9a806f6f6f206f6fc3a920204d6f6f6ff09f9a80f09f9a806f6f20204d4df09f9a806fc3a94df09f9a806fc3a94d6f4d6f206f6f0000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int152,uint8)", + "type": "(int152,uint8)", + "value": ["805748428469249864158717424973018128977086139", "74"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "805748428469249864158717424973018128977086139" + }, + { + "type": "number", + "value": "74" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060ba8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201528151808301835272242189d08b304209cf5d95758642b5a371c6bb808252604a9183019182528351908152905160ff169181019190915281519081900390910190f3fea26469706673582212208371f78f0c844071d3fbc07ec1e5da8f1d54da817bee7e2b281ab70a3dc6ac1964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_4fa66d49 {\n int152 s_0;\n uint8 s_1;\n }\n\n function test () public pure returns (S_4fa66d49 memory) {\n S_4fa66d49 memory r;\n {\n int152 r_0 = 805748428469249864158717424973018128977086139;\n r.s_0 = r_0;\n }\n {\n uint8 r_1 = 74;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000242189d08b304209cf5d95758642b5a371c6bb000000000000000000000000000000000000000000000000000000000000004a" + }, + { + "name": "random-(int192,address)", + "type": "(int192,address)", + "value": [ + "2245966586688525421536421762113386067370257321490881704112", + "0x483852683d549a6f8BeD0583102a46567344af71" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "2245966586688525421536421762113386067370257321490881704112" + }, + { + "type": "address", + "value": "0x483852683d549a6f8BeD0583102a46567344af71" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d88061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252600080825260209182015281518083018352775b98fc3ba26f6af7fdd122255bf8b6e2676014dd357bf0b080825273483852683d549a6f8bed0583102a46567344af71918301918252835190815290516001600160a01b03169181019190915281519081900390910190f3fea2646970667358221220ba21882a31238e2be0ca0090be0fc18c3cd6e2c1aa0948b95ae391559e4747e064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_579e46e0 {\n int192 s_0;\n address s_1;\n }\n\n function test () public pure returns (S_579e46e0 memory) {\n S_579e46e0 memory r;\n {\n int192 r_0 = 2245966586688525421536421762113386067370257321490881704112;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x483852683d549a6f8BeD0583102a46567344af71;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000005b98fc3ba26f6af7fdd122255bf8b6e2676014dd357bf0b0000000000000000000000000483852683d549a6f8bed0583102a46567344af71" + }, + { + "name": "random-(int224,bytes10)", + "type": "(int224,bytes10)", + "value": [ + "2083178206401540424357287433867286510629310333856451324887090557773", + "0xe8ad4f55bec363af165d" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "2083178206401540424357287433867286510629310333856451324887090557773" + }, + { + "type": "hexstring", + "value": "0xe8ad4f55bec363af165d" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d68061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820152815180830183527b13c7ecfb01ae994befa8b44c11c2076c498e958e890509a0bfd3734d80825269e8ad4f55bec363af165d60b01b918301918252835190815290516001600160b01b0319169181019190915281519081900390910190f3fea264697066735822122056a9eaf5bff82bed6c672cfa525a60346dc0fd29f406cd86f5e7f73951f2283c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b88cbaaf {\n int224 s_0;\n bytes10 s_1;\n }\n\n function test () public pure returns (S_b88cbaaf memory) {\n S_b88cbaaf memory r;\n {\n int224 r_0 = 2083178206401540424357287433867286510629310333856451324887090557773;\n r.s_0 = r_0;\n }\n {\n bytes10 r_1 = bytes10(0xe8ad4f55bec363af165d);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000013c7ecfb01ae994befa8b44c11c2076c498e958e890509a0bfd3734de8ad4f55bec363af165d00000000000000000000000000000000000000000000" + }, + { + "name": "random-(int40,bytes16)", + "type": "(int40,bytes16)", + "value": ["333742210428", "0x7b92d08811cc1aa279005b32e2fa872e"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "333742210428" + }, + { + "type": "hexstring", + "value": "0x7b92d08811cc1aa279005b32e2fa872e" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060ce8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252600080825260209182015281518083018352644db495fd7c8082526f3dc9684408e60d513c802d99717d439760811b918301918252835190815290516fffffffffffffffffffffffffffffffff19169181019190915281519081900390910190f3fea264697066735822122005d1f6301379bcb5152331305bb30706bf71b3f5421de6652665ea4bf959d74d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_83478cde {\n int40 s_0;\n bytes16 s_1;\n }\n\n function test () public pure returns (S_83478cde memory) {\n S_83478cde memory r;\n {\n int40 r_0 = 333742210428;\n r.s_0 = r_0;\n }\n {\n bytes16 r_1 = bytes16(0x7b92d08811cc1aa279005b32e2fa872e);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000004db495fd7c7b92d08811cc1aa279005b32e2fa872e00000000000000000000000000000000" + }, + { + "name": "random-(int72,address)", + "type": "(int72,address)", + "value": ["2101540123944091996660", "0x9024914BE1F9520C7fDEf80c55D5C6b07C03f275"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "2101540123944091996660" + }, + { + "type": "address", + "value": "0x9024914BE1F9520C7fDEf80c55D5C6b07C03f275" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060c98061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820152815180830183526871ecba584a55fd51f4808252739024914be1f9520c7fdef80c55d5c6b07c03f275918301918252835190815290516001600160a01b03169181019190915281519081900390910190f3fea26469706673582212204b753e498402617f1fe8c9af9083e202daf6010bd272dab93408bdeffbca2dd964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_daf741f6 {\n int72 s_0;\n address s_1;\n }\n\n function test () public pure returns (S_daf741f6 memory) {\n S_daf741f6 memory r;\n {\n int72 r_0 = 2101540123944091996660;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x9024914BE1F9520C7fDEf80c55D5C6b07C03f275;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000071ecba584a55fd51f40000000000000000000000009024914be1f9520c7fdef80c55d5c6b07c03f275" + }, + { + "name": "random-(int80,uint152)", + "type": "(int80,uint152)", + "value": ["14535835307507290245493", "1196542907058947170858521440982141112934261130"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "14535835307507290245493" + }, + { + "type": "number", + "value": "1196542907058947170858521440982141112934261130" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d58061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252600080825260209182015281518083018352690313fd3cee0590fc89758082527235a7a391c4e5e0fcb11b1fe4a787fbad40e18a9183019182528351908152905172ffffffffffffffffffffffffffffffffffffff169181019190915281519081900390910190f3fea2646970667358221220c6a29b5d8a916061a2abd082b593896d5c097ae472ffedbac6b47a091bca4d6364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f78030fc {\n int80 s_0;\n uint152 s_1;\n }\n\n function test () public pure returns (S_f78030fc memory) {\n S_f78030fc memory r;\n {\n int80 r_0 = 14535835307507290245493;\n r.s_0 = r_0;\n }\n {\n uint152 r_1 = 1196542907058947170858521440982141112934261130;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000313fd3cee0590fc89750000000000000000000000000035a7a391c4e5e0fcb11b1fe4a787fbad40e18a" + }, + { + "name": "random-(string,address)", + "type": "(string,address)", + "value": [ + "Moo é🚀oo🚀🚀🚀oéoMé🚀oM🚀éMooMMM oM🚀o🚀o🚀oM éM MMo🚀Méooé ooM éo", + "0x4C77c7e0b5358e2fAaB54545C6d517E24c002744" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀🚀🚀oéoMé🚀oM🚀éMooMMM oM🚀o🚀o🚀oM éM MMo🚀Méooé ooM éo" + }, + { + "type": "address", + "value": "0x4C77c7e0b5358e2fAaB54545C6d517E24c002744" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101bb806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100b5565b60405180910390f35b60408051808201909152606081526000602082015260408051808201909152606081526000602082015260006040518060a001604052806061815260200161012560619139825250734c77c7e0b5358e2faab54545c6d517e24c0027446020820152919050565b600060208083528351604082850152805180606086015260005b818110156100eb578281018401518682016080015283016100cf565b818111156100fd576000608083880101525b5094909101516001600160a01b031660408401525050601f91909101601f1916016080019056fe4d6f6f20c3a9f09f9a806f6ff09f9a80f09f9a80f09f9a806fc3a96f4dc3a9f09f9a806f4df09f9a80c3a94d6f6f4d4d4d20206f4df09f9a806ff09f9a806ff09f9a806f4d20c3a94d204d4d6ff09f9a804dc3a96f6fc3a920206f6f4d20c3a96fa2646970667358221220164ee3cc81424d6dc969c5daebda00b16fe3827bb7ee4bcca1c8ada709b09af164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e7028728 {\n string s_0;\n address s_1;\n }\n\n function test () public pure returns (S_e7028728 memory) {\n S_e7028728 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oo🚀🚀🚀oéoMé🚀oM🚀éMooMMM oM🚀o🚀o🚀oM éM MMo🚀Méooé ooM éo\";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x4C77c7e0b5358e2fAaB54545C6d517E24c002744;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000004c77c7e0b5358e2faab54545c6d517e24c00274400000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a806f6ff09f9a80f09f9a80f09f9a806fc3a96f4dc3a9f09f9a806f4df09f9a80c3a94d6f6f4d4d4d20206f4df09f9a806ff09f9a806ff09f9a806f4d20c3a94d204d4d6ff09f9a804dc3a96f6fc3a920206f6f4d20c3a96f00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,bool)", + "type": "(string,bool)", + "value": ["Moo é🚀Mo🚀 é", false], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mo🚀 é" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610132806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252606080825260006020928301819052835180850185529182528183018181528451808601865260138152724d6f6f20c3a9f09f9a804d6ff09f9a8020c3a960681b948101949094529282529091529051608e91906097565b60405180910390f35b600060208083528351604082850152805180606086015260005b8181101560cb5782810184015186820160800152830160b1565b8181111560dc576000608083880101525b509490910151151560408401525050601f91909101601f1916016080019056fea2646970667358221220c227e052e8fa5c4d81dc992847c1784c0df94f8ff763362e6838ed6655bb6d3364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fc3be6c5 {\n string s_0;\n bool s_1;\n }\n\n function test () public pure returns (S_fc3be6c5 memory) {\n S_fc3be6c5 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀Mo🚀 é\";\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a804d6ff09f9a8020c3a900000000000000000000000000" + }, + { + "name": "random-(string,bytes15)", + "type": "(string,bytes15)", + "value": [ + "Moo é🚀oMéé🚀oM oéMo🚀🚀oM MMooééMooo🚀oo o🚀o🚀Méooo 🚀M", + "0x0c60289108aff415b95634be7046b6" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMéé🚀oM oéMo🚀🚀oM MMooééMooo🚀oo o🚀o🚀Méooo 🚀M" + }, + { + "type": "hexstring", + "value": "0x0c60289108aff415b95634be7046b6" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100b3565b60405180910390f35b604080518082019091526060815260006020820152604080518082019091526060815260006020820152600060405180608001604052806051815260200161012e605191398252506e063014488457fa0adcab1a5f38235b60891b6020820152919050565b600060208083528351604082850152805180606086015260005b818110156100e9578281018401518682016080015283016100cd565b818111156100fb576000608083880101525b50949091015170ffffffffffffffffffffffffffffffffff191660408401525050601f91909101601f1916016080019056fe4d6f6f20c3a9f09f9a806f4dc3a9c3a9f09f9a806f4d206fc3a94d6ff09f9a80f09f9a806f4d204d4d6f6fc3a9c3a94d6f6f6ff09f9a806f6f20206ff09f9a806ff09f9a804dc3a96f6f6f20f09f9a804da264697066735822122044f485729985f6db1315b1f88c4283b9cee17f3da94bdb0b59a77663f266c11b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e5e2a304 {\n string s_0;\n bytes15 s_1;\n }\n\n function test () public pure returns (S_e5e2a304 memory) {\n S_e5e2a304 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oMéé🚀oM oéMo🚀🚀oM MMooééMooo🚀oo o🚀o🚀Méooo 🚀M\";\n r.s_0 = r_0;\n }\n {\n bytes15 r_1 = bytes15(0x0c60289108aff415b95634be7046b6);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400c60289108aff415b95634be7046b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a806f4dc3a9c3a9f09f9a806f4d206fc3a94d6ff09f9a80f09f9a806f4d204d4d6f6fc3a9c3a94d6f6f6ff09f9a806f6f20206ff09f9a806ff09f9a804dc3a96f6f6f20f09f9a804d000000000000000000000000000000" + }, + { + "name": "random-(string,bytes32)", + "type": "(string,bytes32)", + "value": [ + "Moo é🚀Mo 🚀 éMoooéoéoM M o🚀MMo oM ", + "0x4d215599c554aa476c459a8f2205255c86c3eb6a49a1aa0250856e7583f6b8f2" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mo 🚀 éMoooéoéoM M o🚀MMo oM " + }, + { + "type": "hexstring", + "value": "0x4d215599c554aa476c459a8f2205255c86c3eb6a49a1aa0250856e7583f6b8f2" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061018d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100c1565b60405180910390f35b6040805180820190915260608152600060208201526040805180820190915260608152600060208201526000604051806060016040528060308152602001610128603091398252507f4d215599c554aa476c459a8f2205255c86c3eb6a49a1aa0250856e7583f6b8f26020820152919050565b600060208083528351604082850152805180606086015260005b818110156100f7578281018401518682016080015283016100db565b81811115610109576000608083880101525b50949091015160408401525050601f91909101601f1916016080019056fe4d6f6f20c3a9f09f9a804d6f2020f09f9a8020c3a94d6f6f6fc3a96fc3a96f4d204d206ff09f9a804d4d6f206f4d2020a26469706673582212205d419b1b91203810c40336e06e5fc390dac8a4f78295c392d536faec29dfbfff64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_66f5afe1 {\n string s_0;\n bytes32 s_1;\n }\n\n function test () public pure returns (S_66f5afe1 memory) {\n S_66f5afe1 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀Mo 🚀 éMoooéoéoM M o🚀MMo oM \";\n r.s_0 = r_0;\n }\n {\n bytes32 r_1 = bytes32(0x4d215599c554aa476c459a8f2205255c86c3eb6a49a1aa0250856e7583f6b8f2);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000404d215599c554aa476c459a8f2205255c86c3eb6a49a1aa0250856e7583f6b8f200000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a804d6f2020f09f9a8020c3a94d6f6f6fc3a96fc3a96f4d204d206ff09f9a804d4d6f206f4d202000000000000000000000000000000000" + }, + { + "name": "random-(string,int96)", + "type": "(string,int96)", + "value": ["Moo é🚀 é🚀o🚀🚀🚀MMo MoMé M🚀éMé🚀o o", "10946347544471782848169065338"], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é🚀o🚀🚀🚀MMo MoMé M🚀éMé🚀o o" + }, + { + "type": "number", + "value": "10946347544471782848169065338" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610185806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ad565b60405180910390f35b6040805180820190915260608152600060208201526040805180820190915260608152600060208201526000604051806060016040528060398152602001610117603991398252506b235e9b416cc52d76ad9d3b7a6020820152919050565b600060208083528351604082850152805180606086015260005b818110156100e3578281018401518682016080015283016100c7565b818111156100f5576000608083880101525b509490910151600b0b60408401525050601f91909101601f1916016080019056fe4d6f6f20c3a9f09f9a8020c3a9f09f9a806ff09f9a80f09f9a80f09f9a804d4d6f204d6f4dc3a9204df09f9a80c3a94dc3a9f09f9a806f206fa264697066735822122047dd161369ec42d2d246718a7d6bc52d834616a42192c0d839d3894431ae83de64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e20af393 {\n string s_0;\n int96 s_1;\n }\n\n function test () public pure returns (S_e20af393 memory) {\n S_e20af393 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 é🚀o🚀🚀🚀MMo MoMé M🚀éMé🚀o o\";\n r.s_0 = r_0;\n }\n {\n int96 r_1 = 10946347544471782848169065338;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000235e9b416cc52d76ad9d3b7a00000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a8020c3a9f09f9a806ff09f9a80f09f9a80f09f9a804d4d6f204d6f4dc3a9204df09f9a80c3a94dc3a9f09f9a806f206f00000000000000" + }, + { + "name": "random-(string,string)", + "type": "(string,string)", + "value": [ + "Moo é🚀 M M éoé🚀🚀 oé🚀oo M oM éé🚀", + "Moo é🚀é éMMM oooM🚀🚀o éM oooéMo🚀 o o éMo 🚀o🚀 oMMo🚀oMoé" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 M M éoé🚀🚀 oé🚀oo M oM éé🚀" + }, + { + "type": "string", + "value": "Moo é🚀é éMMM oooM🚀🚀o éM oooéMo🚀 o o éMo 🚀o🚀 oMMo🚀oMoé" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061020a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610108565b60405180910390f35b60408051808201909152606080825260208201526040805180820190915260608082526020820152600060405180606001604052806036815260200161019f60369139825250604080516080810190915260548082526000919061014b6020830139602083015250919050565b6000815180845260005b818110156100e1576020818501810151868301820152016100c5565b818111156100f3576000602083870101525b50601f01601f19169290920160200192915050565b60208152600082516040602084015261012460608401826100bb565b90506020840151601f1984830301604085015261014182826100bb565b9594505050505056fe4d6f6f20c3a9f09f9a80c3a92020c3a94d4d4d206f6f6f4df09f9a80f09f9a806f2020c3a94d206f6f6fc3a94d6ff09f9a80206f206f20c3a94d6f2020f09f9a806ff09f9a80206f4d4d6ff09f9a806f4d6fc3a94d6f6f20c3a9f09f9a80204d204d20c3a96fc3a9f09f9a80f09f9a80206fc3a9f09f9a806f6f204d20206f4d2020c3a9c3a9f09f9a80a26469706673582212204dcfd4b56034ed273df0ceba6261ca51ae8ed963180353f012b2de0676c61aa964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fb587d32 {\n string s_0;\n string s_1;\n }\n\n function test () public pure returns (S_fb587d32 memory) {\n S_fb587d32 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 M M éoé🚀🚀 oé🚀oo M oM éé🚀\";\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀é éMMM oooM🚀🚀o éM oooéMo🚀 o o éMo 🚀o🚀 oMMo🚀oMoé\";\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a80204d204d20c3a96fc3a9f09f9a80f09f9a80206fc3a9f09f9a806f6f204d20206f4d2020c3a9c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a80c3a92020c3a94d4d4d206f6f6f4df09f9a80f09f9a806f2020c3a94d206f6f6fc3a94d6ff09f9a80206f206f20c3a94d6f2020f09f9a806ff09f9a80206f4d4d6ff09f9a806f4d6fc3a9000000000000000000000000" + }, + { + "name": "random-(string)[]", + "type": "(string)[]", + "value": [ + ["Moo é🚀 🚀éMooo oMo🚀MMoooooo🚀o🚀 éooéo🚀🚀M🚀é🚀éé🚀 🚀🚀🚀🚀Mooooo🚀oéoo🚀"], + ["Moo é🚀🚀 é MéMo🚀oMo🚀M M 🚀éo🚀éo 🚀🚀MMMo🚀é🚀M Moo🚀"], + ["Moo é🚀oé🚀🚀é éo é 🚀🚀o"], + ["Moo é🚀oMé ooo ooéoéoé"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀éMooo oMo🚀MMoooooo🚀o🚀 éooéo🚀🚀M🚀é🚀éé🚀 🚀🚀🚀🚀Mooooo🚀oéoo🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀 é MéMo🚀oMo🚀M M 🚀éo🚀éo 🚀🚀MMMo🚀é🚀M Moo🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oé🚀🚀é éo é 🚀🚀o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMé ooo ooéoéoé" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103e0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101fe565b60405180910390f35b60408051600480825260a0820190925260609160009190816020015b60408051602081019091526060815281526020019060019003908161006a57505060408051602081019091526060815290915060006040518060a00160405280607781526020016102df607791398252508151819083906000906100d0576100d06102a0565b6020026020010181905250506100f26040518060200160405280606081525090565b6000604051806080016040528060558152602001610356605591398252508151819083906001908110610127576101276102a0565b6020026020010181905250506101496040518060200160405280606081525090565b60006040518060600160405280602881526020016102b760289139825250815181908390600290811061017e5761017e6102a0565b6020026020010181905250506101a06040518060200160405280606081525090565b60408051808201909152601e81527f4d6f6f20c3a9f09f9a806f4dc3a920206f6f6f206f6fc3a96fc3a96fc3a900006020820152815281518190839060039081106101ed576101ed6102a0565b602090810291909101015250919050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561029157603f198a85030186528251518885528051808a870152835b81811015610261578281018b01518782018b01528a01610246565b8181111561027157848a83890101525b5096890196601f01601f1916949094018701935091870191600101610226565b50919998505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806fc3a9f09f9a80f09f9a80c3a920c3a96f20c3a920f09f9a80f09f9a806f4d6f6f20c3a9f09f9a80202020f09f9a80c3a94d6f6f6f206f4d6ff09f9a804d4d6f6f6f6f6f6ff09f9a806ff09f9a8020c3a96f6fc3a96ff09f9a80f09f9a804df09f9a80c3a9f09f9a80c3a9c3a9f09f9a8020f09f9a80f09f9a80f09f9a80f09f9a804d6f6f6f6f6ff09f9a806fc3a96f6ff09f9a804d6f6f20c3a9f09f9a80f09f9a8020c3a9204dc3a94d6ff09f9a806f4d6ff09f9a804d20204d20f09f9a80c3a96ff09f9a80c3a96f20f09f9a80f09f9a804d4d4d6ff09f9a80c3a9f09f9a804d204d6f6ff09f9a80a2646970667358221220a4d805af25901e78bcfd8e075525506b901e1b1797e169ceeaebdd1c1120aa1564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n function test () public pure returns (S_97fc4627[] memory) {\n S_97fc4627[] memory r = new S_97fc4627[](4);\n {\n S_97fc4627 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀 🚀éMooo oMo🚀MMoooooo🚀o🚀 éooéo🚀🚀M🚀é🚀éé🚀 🚀🚀🚀🚀Mooooo🚀oéoo🚀\";\n r_0.s_0 = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_97fc4627 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀🚀 é MéMo🚀oMo🚀M M 🚀éo🚀éo 🚀🚀MMMo🚀é🚀M Moo🚀\";\n r_1.s_0 = r_1_0;\n }\n r[1] = r_1;\n }\n {\n S_97fc4627 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀oé🚀🚀é éo é 🚀🚀o\";\n r_2.s_0 = r_2_0;\n }\n r[2] = r_2;\n }\n {\n S_97fc4627 memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀oMé ooo ooéoéoé\";\n r_3.s_0 = r_3_0;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000774d6f6f20c3a9f09f9a80202020f09f9a80c3a94d6f6f6f206f4d6ff09f9a804d4d6f6f6f6f6f6ff09f9a806ff09f9a8020c3a96f6fc3a96ff09f9a80f09f9a804df09f9a80c3a9f09f9a80c3a9c3a9f09f9a8020f09f9a80f09f9a80f09f9a80f09f9a804d6f6f6f6f6ff09f9a806fc3a96f6ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a80f09f9a8020c3a9204dc3a94d6ff09f9a806f4d6ff09f9a804d20204d20f09f9a80c3a96ff09f9a80c3a96f20f09f9a80f09f9a804d4d4d6ff09f9a80c3a9f09f9a804d204d6f6ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000284d6f6f20c3a9f09f9a806fc3a9f09f9a80f09f9a80c3a920c3a96f20c3a920f09f9a80f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a806f4dc3a920206f6f6f206f6fc3a96fc3a96fc3a90000" + }, + { + "name": "random-(string)[1]", + "type": "(string)[1]", + "value": [["Moo é🚀 🚀Mé🚀 "]], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀Mé🚀 " + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101a0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100dc565b60405180910390f35b6100566100a8565b61005e6100a8565b6040805160208082018352606082528251808401909352601783527f4d6f6f20c3a9f09f9a8020f09f9a804dc3a9f09f9a8020000000000000000000908301529081528152919050565b60405180602001604052806001905b6040805160208101909152606081528152602001906001900390816100b75790505090565b602080825260009060408382018185018685805b600181101561015c57601f19808a86030186528351518886528051808a880152845b8181101561012d578281018b01518882018b01528a01610112565b8181111561013d57858a838a0101525b5096890196601f019091169490940186019350918601916001016100f0565b50919897505050505050505056fea2646970667358221220691bb3d996946ea2da00dc80f7eefaa8aedd9e7d3c4629e193ef14741bd2eb7b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n function test () public pure returns (S_97fc4627[1] memory) {\n S_97fc4627[1] memory r;\n {\n S_97fc4627 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀 🚀Mé🚀 \";\n r_0.s_0 = r_0_0;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a8020f09f9a804dc3a9f09f9a8020000000000000000000" + }, + { + "name": "random-(string)[2]", + "type": "(string)[2]", + "value": [ + ["Moo é🚀o🚀ooé🚀o🚀 🚀🚀ooéoMoéooé🚀M 🚀o é🚀 🚀M🚀🚀éM🚀oo🚀é🚀o MéM ooo"], + ["Moo é🚀 éMM🚀oo🚀MMoéMéoéoo oo é🚀éoéooo M oM "] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀ooé🚀o🚀 🚀🚀ooéoMoéooé🚀M 🚀o é🚀 🚀M🚀🚀éM🚀oo🚀é🚀o MéM ooo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 éMM🚀oo🚀MMoéMéoéoo oo é🚀éoéooo M oM " + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061026b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f8565b60405180910390f35b6100566100c4565b61005e6100c4565b60408051602081019091526060815260006040518060a00160405280607081526020016101c660709139825250815260408051602081019091526060815260006040518060600160405280603e8152602001610188603e91398252506020820152919050565b60405180604001604052806002905b6040805160208101909152606081528152602001906001900390816100d35790505090565b6020808252600090606083018382018584805b600281101561017a57601f198089870301855283515187875280518089890152845b81811015610149578281018a015189820160400152890161012d565b8181111561015a57856040838b0101525b50601f01909116959095016040019450928501929185019160010161010b565b509297965050505050505056fe4d6f6f20c3a9f09f9a8020c3a94d4df09f9a806f6ff09f9a804d4d6fc3a94dc3a96fc3a96f6f206f6f20c3a9f09f9a80c3a96fc3a96f6f6f204d206f4d204d6f6f20c3a9f09f9a806ff09f9a806f6fc3a9f09f9a806ff09f9a8020f09f9a80f09f9a806f6fc3a96f4d6fc3a96f6fc3a9f09f9a804d20f09f9a806f20c3a9f09f9a8020f09f9a804df09f9a80f09f9a80c3a94df09f9a806f6ff09f9a80c3a9f09f9a806f204dc3a94d20206f6f6fa2646970667358221220740d26e89a616c4dd30ec23260b1a77e0f1edb62aea6cb43bf498fe0fc43510364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n function test () public pure returns (S_97fc4627[2] memory) {\n S_97fc4627[2] memory r;\n {\n S_97fc4627 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀o🚀ooé🚀o🚀 🚀🚀ooéoMoéooé🚀M 🚀o é🚀 🚀M🚀🚀éM🚀oo🚀é🚀o MéM ooo\";\n r_0.s_0 = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_97fc4627 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀 éMM🚀oo🚀MMoéMéoéoo oo é🚀éoéooo M oM \";\n r_1.s_0 = r_1_0;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000704d6f6f20c3a9f09f9a806ff09f9a806f6fc3a9f09f9a806ff09f9a8020f09f9a80f09f9a806f6fc3a96f4d6fc3a96f6fc3a9f09f9a804d20f09f9a806f20c3a9f09f9a8020f09f9a804df09f9a80f09f9a80c3a94df09f9a806f6ff09f9a80c3a9f09f9a806f204dc3a94d20206f6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a8020c3a94d4df09f9a806f6ff09f9a804d4d6fc3a94dc3a96fc3a96f6f206f6f20c3a9f09f9a80c3a96fc3a96f6f6f204d206f4d200000" + }, + { + "name": "random-(string)[4]", + "type": "(string)[4]", + "value": [ + ["Moo é🚀"], + ["Moo é🚀oM🚀ooo 🚀M"], + ["Moo é🚀é🚀🚀🚀M oMo🚀"], + ["Moo é🚀oééooMM🚀 éoéM ooooooM 🚀oo🚀oooéoéééo 🚀o🚀🚀 oMoé o"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM🚀ooo 🚀M" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀🚀🚀M oMo🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oééooMM🚀 éoéM ooooooM 🚀oo🚀oooéoéééo 🚀o🚀🚀 oMoé o" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102a1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610166565b60405180910390f35b610056610132565b61005e610132565b6040805160208082018352606080835283518085018552600a8152689adede418753e13f3560b71b8184015283529184528251808201845282815283518085018552601981527f4d6f6f20c3a9f09f9a806f4df09f9a806f6f6f20f09f9a804d000000000000008184015281528482015282518082018452828152835192830190935260218083526000929161024b908301398252506040808301919091528051602081019091526060815260006040518060800160405280605581526020016101f6605591398252506060820152919050565b60405180608001604052806004905b6040805160208101909152606081528152602001906001900390816101415790505090565b602080825260009060a083018382018584805b60048110156101e857601f198089870301855283515187875280518089890152845b818110156101b7578281018a015189820160400152890161019b565b818111156101c857856040838b0101525b50601f019091169590950160400194509285019291850191600101610179565b509297965050505050505056fe4d6f6f20c3a9f09f9a806fc3a9c3a96f6f4d4df09f9a8020c3a96fc3a94d206f6f6f6f6f6f4d20f09f9a806f6ff09f9a806f6f6fc3a96fc3a9c3a9c3a96f20f09f9a806ff09f9a80f09f9a80206f4d6fc3a920206f4d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a80f09f9a804d206f4d6ff09f9a80a26469706673582212201d04a7153681e7eebf5fae84b3450ebc0063af98f311f80b756a5919682e46e364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n function test () public pure returns (S_97fc4627[4] memory) {\n S_97fc4627[4] memory r;\n {\n S_97fc4627 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀\";\n r_0.s_0 = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_97fc4627 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀oM🚀ooo 🚀M\";\n r_1.s_0 = r_1_0;\n }\n r[1] = r_1;\n }\n {\n S_97fc4627 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀é🚀🚀🚀M oMo🚀\";\n r_2.s_0 = r_2_0;\n }\n r[2] = r_2;\n }\n {\n S_97fc4627 memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀oééooMM🚀 éoéM ooooooM 🚀oo🚀oooéoéééo 🚀o🚀🚀 oMoé o\";\n r_3.s_0 = r_3_0;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000194d6f6f20c3a9f09f9a806f4df09f9a806f6f6f20f09f9a804d00000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a80f09f9a804d206f4d6ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a806fc3a9c3a96f6f4d4df09f9a8020c3a96fc3a94d206f6f6f6f6f6f4d20f09f9a806f6ff09f9a806f6f6fc3a96fc3a9c3a9c3a96f20f09f9a806ff09f9a80f09f9a80206f4d6fc3a920206f0000000000000000000000" + }, + { + "name": "random-(string[1])", + "type": "(string[1])", + "value": [["Moo é🚀M🚀"]], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀M🚀" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610199806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d3565b60405180910390f35b610056610094565b61005e610094565b6100666100ac565b60408051808201909152600f81526d9adede418753e13f35009be13f35608f1b602082015281528152919050565b60405180602001604052806100a76100ac565b905290565b60405180602001604052806001905b60608152602001906001900390816100bb5790505090565b602080825282518282018290526000919060608401906040850184805b600181101561015657878503603f1901835283518051808752835b81811015610126578281018901518882018a0152880161010b565b81811115610136578489838a0101525b50601f01601f1916959095018601945092850192918501916001016100f0565b509297965050505050505056fea264697066735822122089130d4d2f4f73a339b1196a72c332e8a1c3f03ba720311ef903d8907907cd2364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c6e6ec6b {\n string[1] s_0;\n }\n\n function test () public pure returns (S_c6e6ec6b memory) {\n S_c6e6ec6b memory r;\n {\n string[1] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀M🚀\";\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a804df09f9a800000000000000000000000000000000000" + }, + { + "name": "random-(string[2])", + "type": "(string[2])", + "value": [["Moo é🚀", "Moo é🚀é🚀 o🚀🚀Mooé oo oo🚀MéoooMM ééo🚀oo🚀oM🚀🚀o"]], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀é🚀 o🚀🚀Mooé oo oo🚀MéoooMM ééo🚀oo🚀oM🚀🚀o" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610203806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f1565b60405180910390f35b6100566100b2565b61005e6100b2565b6100666100ca565b604080518082018252600a8152689adede418753e13f3560b71b602080830191909152908352815160808101909252604c80835260009291610182908301396020830152508152919050565b60405180602001604052806100c56100ca565b905290565b60405180604001604052806002905b60608152602001906001900390816100d95790505090565b602080825282518282018290526000919060808401906040850184805b600281101561017457878503603f1901835283518051808752835b81811015610144578281018901518882018a01528801610129565b81811115610154578489838a0101525b50601f01601f19169590950186019450928501929185019160010161010e565b509297965050505050505056fe4d6f6f20c3a9f09f9a80c3a9f09f9a80206ff09f9a80f09f9a804d6f6fc3a9206f6f206f6ff09f9a804dc3a96f6f6f4d4d20c3a9c3a96ff09f9a806f6ff09f9a806f4df09f9a80f09f9a806fa2646970667358221220d3b52dc38cf08c8dd1ded37865211498ae5159503725678646af51071ff68be664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5f29438a {\n string[2] s_0;\n }\n\n function test () public pure returns (S_5f29438a memory) {\n S_5f29438a memory r;\n {\n string[2] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀\";\n r_0[0] = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀é🚀 o🚀🚀Mooé oo oo🚀MéoooMM ééo🚀oo🚀oM🚀🚀o\";\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a80c3a9f09f9a80206ff09f9a80f09f9a804d6f6fc3a9206f6f206f6ff09f9a804dc3a96f6f6f4d4d20c3a9c3a96ff09f9a806f6ff09f9a806f4df09f9a80f09f9a806f0000000000000000000000000000000000000000" + }, + { + "name": "random-(uint184,bytes14)", + "type": "(uint184,bytes14)", + "value": [ + "7227927294891486602978494781534359488368119611076682856", + "0xf6dfbe81452d24074125978a7c71" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "7227927294891486602978494781534359488368119611076682856" + }, + { + "type": "hexstring", + "value": "0xf6dfbe81452d24074125978a7c71" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060e08061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080518082018252600080825260209182015281518083018352764b768c8b52a6ddb851805f50e5ee67443ff0216414a4688082526df6dfbe81452d24074125978a7c7160901b9183019182528351908152905171ffffffffffffffffffffffffffffffffffff19169181019190915281519081900390910190f3fea26469706673582212205c719f94ee0719056258974725ce50282e5a0a58d59d9f43d99619be5fd56cc764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ee1caec9 {\n uint184 s_0;\n bytes14 s_1;\n }\n\n function test () public pure returns (S_ee1caec9 memory) {\n S_ee1caec9 memory r;\n {\n uint184 r_0 = 7227927294891486602978494781534359488368119611076682856;\n r.s_0 = r_0;\n }\n {\n bytes14 r_1 = bytes14(0xf6dfbe81452d24074125978a7c71);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000004b768c8b52a6ddb851805f50e5ee67443ff0216414a468f6dfbe81452d24074125978a7c71000000000000000000000000000000000000" + }, + { + "name": "random-(uint224,string)", + "type": "(uint224,string)", + "value": [ + "15616654165610835414476576888642467052788302249742079930808940347127", + "Moo é🚀 éoM MM Méé 🚀 o🚀 🚀oMoooooooMo🚀é MéMMooé" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "15616654165610835414476576888642467052788302249742079930808940347127" + }, + { + "type": "string", + "value": "Moo é🚀 éoM MM Méé 🚀 o🚀 🚀oMoooooooMo🚀é MéMMooé" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101a6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100be565b60405180910390f35b6040805180820190915260008152606060208201526040805180820190915260008152606060208201527b9449fbbf04cd0c02c2acdfd3387b996551ed0e6c56f2df9374f7bef78152604080516080810190915260438082526000919061012e6020830139602083015250919050565b6000602080835260018060e01b038451168184015280840151604080850152805180606086015260005b81811015610104578281018401518682016080015283016100e8565b81811115610116576000608083880101525b50601f01601f19169390930160800194935050505056fe4d6f6f20c3a9f09f9a8020c3a96f4d204d4d204dc3a9c3a920f09f9a80206ff09f9a8020f09f9a806f4d6f6f6f6f6f6f6f4d6ff09f9a80c3a9204dc3a94d4d6f6fc3a9a2646970667358221220b6c7e4b152074916bbddd18cbd74cdf21112fd83a4b371e726c92fd98cc9112e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_43a7be58 {\n uint224 s_0;\n string s_1;\n }\n\n function test () public pure returns (S_43a7be58 memory) {\n S_43a7be58 memory r;\n {\n uint224 r_0 = 15616654165610835414476576888642467052788302249742079930808940347127;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀 éoM MM Méé 🚀 o🚀 🚀oMoooooooMo🚀é MéMMooé\";\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000009449fbbf04cd0c02c2acdfd3387b996551ed0e6c56f2df9374f7bef7000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a8020c3a96f4d204d4d204dc3a9c3a920f09f9a80206ff09f9a8020f09f9a806f4d6f6f6f6f6f6f6f4d6ff09f9a80c3a9204dc3a94d4d6f6fc3a90000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(uint232,bytes19)", + "type": "(uint232,bytes19)", + "value": [ + "6554091464863580137380998971458939607393840038583278903769845798795216", + "0xa4b555da560653054caaf1660263feadd6ec60" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "6554091464863580137380998971458939607393840038583278903769845798795216" + }, + { + "type": "hexstring", + "value": "0xa4b555da560653054caaf1660263feadd6ec60" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060e68061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805180820182526000808252602091820152815180830183527cf31ad1cbd5a4368cea8962362162b330ed43a21418006c03ba1483f7d0808252720525aaaed2b032982a65578b30131ff56eb763606d1b918301918252835190815290516cffffffffffffffffffffffffff19169181019190915281519081900390910190f3fea26469706673582212203a8c8cd48b86b6809740f4a9e8b5c26080bd013cd206ecf4f29f92c3f506bbf464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_4db76c78 {\n uint232 s_0;\n bytes19 s_1;\n }\n\n function test () public pure returns (S_4db76c78 memory) {\n S_4db76c78 memory r;\n {\n uint232 r_0 = 6554091464863580137380998971458939607393840038583278903769845798795216;\n r.s_0 = r_0;\n }\n {\n bytes19 r_1 = bytes19(0xa4b555da560653054caaf1660263feadd6ec60);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000f31ad1cbd5a4368cea8962362162b330ed43a21418006c03ba1483f7d0a4b555da560653054caaf1660263feadd6ec6000000000000000000000000000" + }, + { + "name": "random-(uint248[2])", + "type": "(uint248[2])", + "value": [ + [ + "151743307254606505398371909570460132778081802136731480788726010552949934452", + "329016319362451830327509458344305160456798636889448968824634104102993326819" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "151743307254606505398371909570460132778081802136731480788726010552949934452" + }, + { + "type": "number", + "value": "329016319362451830327509458344305160456798636889448968824634104102993326819" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061015c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ea565b60405180910390f35b6100566100b4565b61005e6100b4565b6100666100cc565b7e55e2381600735ec7e1c95539b346e6aeaf43a5b2f6b245b6e6e44d7e94097481527eba37758df779d4debfa55e45d734842951fff22492d2090059c7c57068f2e360208201528152919050565b60405180602001604052806100c76100cc565b905290565b60405180604001604052806002906020820280368337509192915050565b815160408201908260005b600281101561011d5782516001600160f81b03168252602092830192909101906001016100f5565b5050509291505056fea26469706673582212204796514c50516c6120cfad1095a61fade270893508518f053e08a5d80052134b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_402bd1ec {\n uint248[2] s_0;\n }\n\n function test () public pure returns (S_402bd1ec memory) {\n S_402bd1ec memory r;\n {\n uint248[2] memory r_0;\n {\n uint248 r_0_0 = 151743307254606505398371909570460132778081802136731480788726010552949934452;\n r_0[0] = r_0_0;\n }\n {\n uint248 r_0_1 = 329016319362451830327509458344305160456798636889448968824634104102993326819;\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0055e2381600735ec7e1c95539b346e6aeaf43a5b2f6b245b6e6e44d7e94097400ba37758df779d4debfa55e45d734842951fff22492d2090059c7c57068f2e3" + }, + { + "name": "random-(uint40,string)", + "type": "(uint40,string)", + "value": ["25718273048", "Moo é🚀🚀oMM o🚀🚀 o"], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "25718273048" + }, + { + "type": "string", + "value": "Moo é🚀🚀oMM o🚀🚀 o" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061014b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805180820182526000815260606020918201819052825180840184528083019182526405fcedb418815283518085018552601d81527f4d6f6f20c3a9f09f9a80f09f9a806f4d4d206ff09f9a80f09f9a80206f00000093810193909352919052905161009e91906100a7565b60405180910390f35b6000602080835264ffffffffff8451168184015280840151604080850152805180606086015260005b818110156100ec578281018401518682016080015283016100d0565b818111156100fe576000608083880101525b50601f01601f19169390930160800194935050505056fea2646970667358221220c713502c887fbcc8c47e723d7669190677078f6c3c2c412b1a23181d3404053264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6a76658b {\n uint40 s_0;\n string s_1;\n }\n\n function test () public pure returns (S_6a76658b memory) {\n S_6a76658b memory r;\n {\n uint40 r_0 = 25718273048;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀🚀oMM o🚀🚀 o\";\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000005fcedb4180000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a80f09f9a806f4d4d206ff09f9a80f09f9a80206f000000" + }, + { + "name": "random-(uint80,uint248)", + "type": "(uint80,uint248)", + "value": [ + "1107732160644933719780219", + "189958227958129851478958403379869309092072382924730966704016867228167752369" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "1107732160644933719780219" + }, + { + "type": "number", + "value": "189958227958129851478958403379869309092072382924730966704016867228167752369" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d58061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051808201825260008082526020918201528151808301835269ea9247df920ba1256b7b8082527e6b83364670df274a8d4c6dd1e93665bd6127028e37730e0cbf5167f408cab1918301918252835190815290516001600160f81b03169181019190915281519081900390910190f3fea2646970667358221220abd27cc9318811f073cdb983ee28e72292a006d7f64a040448d73ec71ac9c97364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_52878336 {\n uint80 s_0;\n uint248 s_1;\n }\n\n function test () public pure returns (S_52878336 memory) {\n S_52878336 memory r;\n {\n uint80 r_0 = 1107732160644933719780219;\n r.s_0 = r_0;\n }\n {\n uint248 r_1 = 189958227958129851478958403379869309092072382924730966704016867228167752369;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000ea9247df920ba1256b7b006b83364670df274a8d4c6dd1e93665bd6127028e37730e0cbf5167f408cab1" + }, + { + "name": "random-(uint88,(string))", + "type": "(uint88,(string))", + "value": [ + "26855447427035377974680490", + ["Moo é🚀🚀éo oo🚀🚀M🚀oéé🚀éMéo M MoMo MoéMééMMoMMoéoooo 🚀 "] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "26855447427035377974680490" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀éo oo🚀🚀M🚀oéé🚀éMéo M MoMo MoéMééMMoMMoéoooo 🚀 " + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101e8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100dd565b60405180910390f35b6100566100a3565b61005e6100a3565b6a1636dcb8e0561814b09baa8152604080516020810190915260608152600060405180608001604052806057815260200161015c605791398252506020820152919050565b604051806040016040528060006affffffffffffffffffffff1681526020016100d86040518060200160405280606081525090565b905290565b600060208083526affffffffffffffffffffff845116818401528084015160408085015280519050816060850152805180608086015260005b818110156101325782810184015186820160a001528301610116565b8181111561014457600060a083880101525b50601f01601f19169390930160a00194935050505056fe4d6f6f20c3a9f09f9a80f09f9a80c3a96f206f6ff09f9a80f09f9a804df09f9a806fc3a9c3a9f09f9a80c3a94dc3a96f204d204d6f4d6f20204d6fc3a94dc3a9c3a94d4d6f4d4d6fc3a96f6f6f6f2020f09f9a80202020a264697066735822122006b7fcd935e7e7fecc704ef32d02c5bedef5667e2cc1247d07e3898601d7d93064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_3f587e71 {\n uint88 s_0;\n S_97fc4627 s_1;\n }\n\n function test () public pure returns (S_3f587e71 memory) {\n S_3f587e71 memory r;\n {\n uint88 r_0 = 26855447427035377974680490;\n r.s_0 = r_0;\n }\n {\n S_97fc4627 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀🚀éo oo🚀🚀M🚀oéé🚀éMéo M MoMo MoéMééMMoMMoéoooo 🚀 \";\n r_1.s_0 = r_1_0;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001636dcb8e0561814b09baa0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a80f09f9a80c3a96f206f6ff09f9a80f09f9a804df09f9a806fc3a9c3a9f09f9a80c3a94dc3a96f204d204d6f4d6f20204d6fc3a94dc3a9c3a94d4d6f4d4d6fc3a96f6f6f6f2020f09f9a80202020000000000000000000" + }, + { + "name": "random-address[]", + "type": "address[]", + "value": [ + "0x80e546aDaBfE36349909c701a66e6d6B19C6Fdb1", + "0xB4e0835BD24b34d0C845CEA3A782Cd1D03CfB307", + "0x0c7F98BEE4116317E3fa3f9dD12112ecb29e2Fcb", + "0xF4f21df9E49b88A4Dd513701A4F8E686CF36e009" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x80e546aDaBfE36349909c701a66e6d6B19C6Fdb1" + }, + { + "type": "address", + "value": "0xB4e0835BD24b34d0C845CEA3A782Cd1D03CfB307" + }, + { + "type": "address", + "value": "0x0c7F98BEE4116317E3fa3f9dD12112ecb29e2Fcb" + }, + { + "type": "address", + "value": "0xF4f21df9E49b88A4Dd513701A4F8E686CF36e009" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610243806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101aa565b60405180910390f35b60408051600480825260a08201909252606091600091906020820160808036833701905050905060007380e546adabfe36349909c701a66e6d6b19c6fdb1905080826000815181106100a2576100a26101f7565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073b4e0835bd24b34d0c845cea3a782cd1d03cfb307905080826001815181106100f0576100f06101f7565b60200260200101906001600160a01b031690816001600160a01b031681525050506000730c7f98bee4116317e3fa3f9dd12112ecb29e2fcb9050808260028151811061013e5761013e6101f7565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073f4f21df9e49b88a4dd513701a4f8e686cf36e0099050808260038151811061018c5761018c6101f7565b6001600160a01b039092166020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b818110156101eb5783516001600160a01b0316835292840192918401916001016101c6565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212207eaa5fea312a359ea400132775b658e5b3958f5cf8eeea13fd5d5c8ca327ad8964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address[] memory) {\n address[] memory r = new address[](4);\n {\n address r_0 = 0x80e546aDaBfE36349909c701a66e6d6B19C6Fdb1;\n r[0] = r_0;\n }\n {\n address r_1 = 0xB4e0835BD24b34d0C845CEA3A782Cd1D03CfB307;\n r[1] = r_1;\n }\n {\n address r_2 = 0x0c7F98BEE4116317E3fa3f9dD12112ecb29e2Fcb;\n r[2] = r_2;\n }\n {\n address r_3 = 0xF4f21df9E49b88A4Dd513701A4F8E686CF36e009;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000080e546adabfe36349909c701a66e6d6b19c6fdb1000000000000000000000000b4e0835bd24b34d0c845cea3a782cd1d03cfb3070000000000000000000000000c7f98bee4116317e3fa3f9dd12112ecb29e2fcb000000000000000000000000f4f21df9e49b88a4dd513701a4f8e686cf36e009" + }, + { + "name": "random-address[1]", + "type": "address[1]", + "value": ["0x6C23ED2EA8B4cDab8e0585A626248968A0F3a97d"], + "verbose": { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x6C23ED2EA8B4cDab8e0585A626248968A0F3a97d" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060fc8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190608d565b60405180910390f35b604d606f565b6053606f565b736c23ed2ea8b4cdab8e0585a626248968a0f3a97d8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560bc5781516001600160a01b0316835291830191908301906001016098565b505050509291505056fea26469706673582212200f2c758270b159d574560d28e9191fd304a6ff1c1c668f03724a6160eaf6d53064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address[1] memory) {\n address[1] memory r;\n {\n address r_0 = 0x6C23ED2EA8B4cDab8e0585A626248968A0F3a97d;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000006c23ed2ea8b4cdab8e0585a626248968a0f3a97d" + }, + { + "name": "random-address[2]", + "type": "address[2]", + "value": [ + "0xE8A675831d235e064a52f74344762aB16D844a2D", + "0xF1D5Ac3d0d9B437484615f725bfB599c713AA41E" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xE8A675831d235e064a52f74344762aB16D844a2D" + }, + { + "type": "address", + "value": "0xF1D5Ac3d0d9B437484615f725bfB599c713AA41E" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610115806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060a7565b60405180910390f35b604d6089565b60536089565b73e8a675831d235e064a52f74344762ab16d844a2d815273f1d5ac3d0d9b437484615f725bfb599c713aa41e6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560d65781516001600160a01b031683526020928301929091019060010160b0565b5050509291505056fea26469706673582212206501a2128ebf5c5092904d7dc830893cc7063842beb510a3810ac6040a05b21764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address[2] memory) {\n address[2] memory r;\n {\n address r_0 = 0xE8A675831d235e064a52f74344762aB16D844a2D;\n r[0] = r_0;\n }\n {\n address r_1 = 0xF1D5Ac3d0d9B437484615f725bfB599c713AA41E;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000e8a675831d235e064a52f74344762ab16d844a2d000000000000000000000000f1d5ac3d0d9b437484615f725bfb599c713aa41e" + }, + { + "name": "random-address[3]", + "type": "address[3]", + "value": [ + "0x5c1e1fb66117c6289A7fC0abBF5814916b435AeD", + "0xD05110F990B8a8C91643ad99F82f44075C7b2C31", + "0x76D9fd070B7854a45759a377d7c8F1e6684c1FF7" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x5c1e1fb66117c6289A7fC0abBF5814916b435AeD" + }, + { + "type": "address", + "value": "0xD05110F990B8a8C91643ad99F82f44075C7b2C31" + }, + { + "type": "address", + "value": "0x76D9fd070B7854a45759a377d7c8F1e6684c1FF7" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061012f806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060c1565b60405180910390f35b604d60a3565b605360a3565b735c1e1fb66117c6289a7fc0abbf5814916b435aed815273d05110f990b8a8c91643ad99f82f44075c7b2c3160208201527376d9fd070b7854a45759a377d7c8f1e6684c1ff76040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560f05781516001600160a01b031683526020928301929091019060010160ca565b5050509291505056fea2646970667358221220b87ae06ec99a6aaa1dba8184bf5a50f9371810e7861e255ebf44918cf1ad52b564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address[3] memory) {\n address[3] memory r;\n {\n address r_0 = 0x5c1e1fb66117c6289A7fC0abBF5814916b435AeD;\n r[0] = r_0;\n }\n {\n address r_1 = 0xD05110F990B8a8C91643ad99F82f44075C7b2C31;\n r[1] = r_1;\n }\n {\n address r_2 = 0x76D9fd070B7854a45759a377d7c8F1e6684c1FF7;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000005c1e1fb66117c6289a7fc0abbf5814916b435aed000000000000000000000000d05110f990b8a8c91643ad99f82f44075c7b2c3100000000000000000000000076d9fd070b7854a45759a377d7c8f1e6684c1ff7" + }, + { + "name": "random-address[4]", + "type": "address[4]", + "value": [ + "0x0E6271D301AeDc2d2EACe8d5c39530cB69fa33c0", + "0x874EEE756A5C2CD1AA40fB2B0aE05EEA3E40b743", + "0x65927909AF95849EA0e6482D4979Aa97B6de4018", + "0x4C5A964560e6aFe698397A9A11B3A85c45a3f2a6" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x0E6271D301AeDc2d2EACe8d5c39530cB69fa33c0" + }, + { + "type": "address", + "value": "0x874EEE756A5C2CD1AA40fB2B0aE05EEA3E40b743" + }, + { + "type": "address", + "value": "0x65927909AF95849EA0e6482D4979Aa97B6de4018" + }, + { + "type": "address", + "value": "0x4C5A964560e6aFe698397A9A11B3A85c45a3f2a6" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610156806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e6565b60405180910390f35b6100566100c8565b61005e6100c8565b730e6271d301aedc2d2eace8d5c39530cb69fa33c0815273874eee756a5c2cd1aa40fb2b0ae05eea3e40b74360208201527365927909af95849ea0e6482d4979aa97b6de40186040820152734c5a964560e6afe698397a9a11b3a85c45a3f2a66060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b60048110156101175781516001600160a01b03168352602092830192909101906001016100ef565b5050509291505056fea2646970667358221220343e4de5977ef03fec633737df1518219d49da49d8077088df2737a5edd0a04764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address[4] memory) {\n address[4] memory r;\n {\n address r_0 = 0x0E6271D301AeDc2d2EACe8d5c39530cB69fa33c0;\n r[0] = r_0;\n }\n {\n address r_1 = 0x874EEE756A5C2CD1AA40fB2B0aE05EEA3E40b743;\n r[1] = r_1;\n }\n {\n address r_2 = 0x65927909AF95849EA0e6482D4979Aa97B6de4018;\n r[2] = r_2;\n }\n {\n address r_3 = 0x4C5A964560e6aFe698397A9A11B3A85c45a3f2a6;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000e6271d301aedc2d2eace8d5c39530cb69fa33c0000000000000000000000000874eee756a5c2cd1aa40fb2b0ae05eea3e40b74300000000000000000000000065927909af95849ea0e6482d4979aa97b6de40180000000000000000000000004c5a964560e6afe698397a9a11b3a85c45a3f2a6" + }, + { + "name": "random-bool[]", + "type": "bool[]", + "value": [false, true], + "verbose": { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061015e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100cc565b60405180910390f35b604080516002808252606080830184529260009291906020830190803683370190505090506000808260008151811061008957610089610112565b6020026020010190151590811515815250505060006001905080826001815181106100b6576100b6610112565b9115156020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b818110156101065783511515835292840192918401916001016100e8565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212209d5b4f51d75c59962293f6299d2a25a2f9640ebc68a1b0e0b7f9fbb7f4deb58a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[] memory) {\n bool[] memory r = new bool[](2);\n {\n bool r_0 = false;\n r[0] = r_0;\n }\n {\n bool r_1 = true;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-bool[1]", + "type": "bool[1]", + "value": [true], + "verbose": { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060e28061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190607a565b60405180910390f35b604d605c565b6053605c565b60018152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560a25781511515835291830191908301906001016085565b505050509291505056fea264697066735822122011bf4dea5af3a53f24a2b2be5d145a9239b14546bf3970a6f83501642f5ab78964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[1] memory) {\n bool[1] memory r;\n {\n bool r_0 = true;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-bool[2]", + "type": "bool[2]", + "value": [false, false], + "verbose": { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060e78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906080565b60405180910390f35b604d6062565b60536062565b60008082526020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560a857815115158352602092830192909101906001016089565b5050509291505056fea26469706673582212206010a35fdbf5f41980ce90be5602d517135120a3540a9f8a1cb345e699c0a9d664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[2] memory) {\n bool[2] memory r;\n {\n bool r_0 = false;\n r[0] = r_0;\n }\n {\n bool r_1 = false;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bool[3]", + "type": "bool[3]", + "value": [true, false, false], + "verbose": { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060ef8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906088565b60405180910390f35b604d606a565b6053606a565b600181526000602082018190526040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560b057815115158352602092830192909101906001016091565b5050509291505056fea2646970667358221220cc89ded65f44eaf782dbf740d59b9e66c154b917482856936364128f94ec5dcb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[3] memory) {\n bool[3] memory r;\n {\n bool r_0 = true;\n r[0] = r_0;\n }\n {\n bool r_1 = false;\n r[1] = r_1;\n }\n {\n bool r_2 = false;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bool[4]", + "type": "bool[4]", + "value": [true, true, true, false], + "verbose": { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f58061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190608e565b60405180910390f35b604d6070565b60536070565b600180825260208201819052604082015260006060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560b657815115158352602092830192909101906001016097565b5050509291505056fea26469706673582212206086ecb4c4359b841e31a8cba520e7eeee939b3808b6b6f9905d5109e72be11564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[4] memory) {\n bool[4] memory r;\n {\n bool r_0 = true;\n r[0] = r_0;\n }\n {\n bool r_1 = true;\n r[1] = r_1;\n }\n {\n bool r_2 = true;\n r[2] = r_2;\n }\n {\n bool r_3 = false;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes1[]", + "type": "bytes1[]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060cf8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051600081526020810191829052604491604d565b60405180910390f35b6020808252825182820181905260009190848201906040850190845b81811015608d5783516001600160f81b031916835292840192918401916001016069565b5090969550505050505056fea2646970667358221220b7982169ad94b7eb3b0030e90fa64e512bc7ebb8d6545be4b212d930b7eb781864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes1[] memory) {\n bytes1[] memory r = new bytes1[](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes1[1]", + "type": "bytes1[1]", + "value": ["0xf4"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xf4" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060ed8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190607d565b60405180910390f35b604d605f565b6053605f565b603d60fa1b8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560ad5781516001600160f81b031916835291830191908301906001016088565b505050509291505056fea26469706673582212208067f4dcf7425bd1842bd77720d4d2c13ecbe01166d632ba656bf3acf9d6829e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes1[1] memory) {\n bytes1[1] memory r;\n {\n bytes1 r_0 = bytes1(0xf4);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0xf400000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes1[2]", + "type": "bytes1[2]", + "value": ["0xec", "0xd8"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xec" + }, + { + "type": "hexstring", + "value": "0xd8" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f68061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906087565b60405180910390f35b604d6069565b60536069565b603b60fa1b8152601b60fb1b6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560b75781516001600160f81b0319168352602092830192909101906001016090565b5050509291505056fea2646970667358221220bcdb07b837cb375f403e8f5fc83713d50ccb4e163aa34d8df750789b2eac924864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes1[2] memory) {\n bytes1[2] memory r;\n {\n bytes1 r_0 = bytes1(0xec);\n r[0] = r_0;\n }\n {\n bytes1 r_1 = bytes1(0xd8);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0xec00000000000000000000000000000000000000000000000000000000000000d800000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes1[4]", + "type": "bytes1[4]", + "value": ["0xe0", "0x79", "0xa1", "0x9e"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xe0" + }, + { + "type": "hexstring", + "value": "0x79" + }, + { + "type": "hexstring", + "value": "0xa1" + }, + { + "type": "hexstring", + "value": "0x9e" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061010a806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190609b565b60405180910390f35b604d607d565b6053607d565b600760fd1b8152607960f81b602082015260a160f81b6040820152604f60f91b6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560cb5781516001600160f81b03191683526020928301929091019060010160a4565b5050509291505056fea2646970667358221220d40fe2a47cf1ce454b5239ca380a8748a1875c8ec6fe54b25da561c5f07ee7b364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes1[4] memory) {\n bytes1[4] memory r;\n {\n bytes1 r_0 = bytes1(0xe0);\n r[0] = r_0;\n }\n {\n bytes1 r_1 = bytes1(0x79);\n r[1] = r_1;\n }\n {\n bytes1 r_2 = bytes1(0xa1);\n r[2] = r_2;\n }\n {\n bytes1 r_3 = bytes1(0x9e);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xe0000000000000000000000000000000000000000000000000000000000000007900000000000000000000000000000000000000000000000000000000000000a1000000000000000000000000000000000000000000000000000000000000009e00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes10[1]", + "type": "bytes10[1]", + "value": ["0x16e4242c5ace0794fe8c"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x16e4242c5ace0794fe8c" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f68061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906086565b60405180910390f35b604d6068565b60536068565b6905b9090b16b381e53fa360b21b8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560b65781516001600160b01b031916835291830191908301906001016091565b505050509291505056fea2646970667358221220055c1206b76ebb4db94f95412c18d5ef161b038243adb24ae3e0f62cc8bd01ca64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes10[1] memory) {\n bytes10[1] memory r;\n {\n bytes10 r_0 = bytes10(0x16e4242c5ace0794fe8c);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x16e4242c5ace0794fe8c00000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes10[3]", + "type": "bytes10[3]", + "value": ["0xfc62ca4b6d38ea298e54", "0xdce4371470ab37147a97", "0x9bb1c70575976af52192"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xfc62ca4b6d38ea298e54" + }, + { + "type": "hexstring", + "value": "0xdce4371470ab37147a97" + }, + { + "type": "hexstring", + "value": "0x9bb1c70575976af52192" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061011b806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060ac565b60405180910390f35b604d608e565b6053608e565b693f18b292db4e3a8a639560b21b815269dce4371470ab37147a9760b01b6020820152694dd8e382bacbb57a90c960b11b6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560dc5781516001600160b01b03191683526020928301929091019060010160b5565b5050509291505056fea2646970667358221220e4a5ef2decb51a3df5203e731beba5a9fca78d5fd4f2064f5ce80ab86345546364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes10[3] memory) {\n bytes10[3] memory r;\n {\n bytes10 r_0 = bytes10(0xfc62ca4b6d38ea298e54);\n r[0] = r_0;\n }\n {\n bytes10 r_1 = bytes10(0xdce4371470ab37147a97);\n r[1] = r_1;\n }\n {\n bytes10 r_2 = bytes10(0x9bb1c70575976af52192);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xfc62ca4b6d38ea298e5400000000000000000000000000000000000000000000dce4371470ab37147a97000000000000000000000000000000000000000000009bb1c70575976af5219200000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes10[4]", + "type": "bytes10[4]", + "value": [ + "0xe07d1dc2ac9c0f712d11", + "0xf1469e06e424b0e35d94", + "0x2b9d7edda4c3f7259a99", + "0x68c298b389927124ab00" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xe07d1dc2ac9c0f712d11" + }, + { + "type": "hexstring", + "value": "0xf1469e06e424b0e35d94" + }, + { + "type": "hexstring", + "value": "0x2b9d7edda4c3f7259a99" + }, + { + "type": "hexstring", + "value": "0x68c298b389927124ab00" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061012d806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060be565b60405180910390f35b604d60a0565b605360a0565b69e07d1dc2ac9c0f712d1160b01b8152693c51a781b9092c38d76560b21b6020820152692b9d7edda4c3f7259a9960b01b60408201526868c298b389927124ab60b81b6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560ee5781516001600160b01b03191683526020928301929091019060010160c7565b5050509291505056fea2646970667358221220a8ea697fa0a82b3aa9642b0e5b78c9a7f3b34803e055cea46978d49eaabfb5d764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes10[4] memory) {\n bytes10[4] memory r;\n {\n bytes10 r_0 = bytes10(0xe07d1dc2ac9c0f712d11);\n r[0] = r_0;\n }\n {\n bytes10 r_1 = bytes10(0xf1469e06e424b0e35d94);\n r[1] = r_1;\n }\n {\n bytes10 r_2 = bytes10(0x2b9d7edda4c3f7259a99);\n r[2] = r_2;\n }\n {\n bytes10 r_3 = bytes10(0x68c298b389927124ab00);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xe07d1dc2ac9c0f712d1100000000000000000000000000000000000000000000f1469e06e424b0e35d94000000000000000000000000000000000000000000002b9d7edda4c3f7259a990000000000000000000000000000000000000000000068c298b389927124ab0000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes11[]", + "type": "bytes11[]", + "value": [ + "0xaa71049e2d6bad21d578a9", + "0xd1f39e2daa9de9421504c0", + "0x1071120c34bebf6befbe63", + "0xaf9b4024250a276fb73582" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xaa71049e2d6bad21d578a9" + }, + { + "type": "hexstring", + "value": "0xd1f39e2daa9de9421504c0" + }, + { + "type": "hexstring", + "value": "0x1071120c34bebf6befbe63" + }, + { + "type": "hexstring", + "value": "0xaf9b4024250a276fb73582" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610216806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061017c565b60405180910390f35b60408051600480825260a082019092526060916000919060208201608080368337505081519192506aaa71049e2d6bad21d578a960a81b91829150839060009061009a5761009a6101ca565b6001600160a81b0319909216602092830291909101909101525080516a0347ce78b6aa77a508541360ae1b908190839060019081106100db576100db6101ca565b6001600160a81b0319909216602092830291909101909101525080516a1071120c34bebf6befbe6360a81b9081908390600290811061011c5761011c6101ca565b6001600160a81b0319909216602092830291909101909101525080516a57cda012128513b7db9ac160a91b9081908390600390811061015d5761015d6101ca565b6001600160a81b03199092166020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b818110156101be5783516001600160a81b03191683529284019291840191600101610198565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea264697066735822122017da9a1864c8e9818262ec6d792e7fee2a6e90071e62906b020db72a7fb849ec64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes11[] memory) {\n bytes11[] memory r = new bytes11[](4);\n {\n bytes11 r_0 = bytes11(0xaa71049e2d6bad21d578a9);\n r[0] = r_0;\n }\n {\n bytes11 r_1 = bytes11(0xd1f39e2daa9de9421504c0);\n r[1] = r_1;\n }\n {\n bytes11 r_2 = bytes11(0x1071120c34bebf6befbe63);\n r[2] = r_2;\n }\n {\n bytes11 r_3 = bytes11(0xaf9b4024250a276fb73582);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004aa71049e2d6bad21d578a9000000000000000000000000000000000000000000d1f39e2daa9de9421504c00000000000000000000000000000000000000000001071120c34bebf6befbe63000000000000000000000000000000000000000000af9b4024250a276fb73582000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes11[2]", + "type": "bytes11[2]", + "value": ["0xa58b6765b4d49e8ead8c14", "0x316dc64397e8dd0b922d3d"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xa58b6765b4d49e8ead8c14" + }, + { + "type": "hexstring", + "value": "0x316dc64397e8dd0b922d3d" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061010a806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190609b565b60405180910390f35b604d607d565b6053607d565b6a2962d9d96d3527a3ab630560aa1b81526a316dc64397e8dd0b922d3d60a81b6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560cb5781516001600160a81b03191683526020928301929091019060010160a4565b5050509291505056fea26469706673582212200df35318d58b7a8c1269cc812817d95452521a9c789fb933ececb623e05a381164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes11[2] memory) {\n bytes11[2] memory r;\n {\n bytes11 r_0 = bytes11(0xa58b6765b4d49e8ead8c14);\n r[0] = r_0;\n }\n {\n bytes11 r_1 = bytes11(0x316dc64397e8dd0b922d3d);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0xa58b6765b4d49e8ead8c14000000000000000000000000000000000000000000316dc64397e8dd0b922d3d000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes11[4]", + "type": "bytes11[4]", + "value": [ + "0x295f96a01727c7057cedcb", + "0xa65cfa7948af0ce2b21c70", + "0xb09c0a560f8181d92d7c66", + "0x3d8fe11d57996d0039a95b" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x295f96a01727c7057cedcb" + }, + { + "type": "hexstring", + "value": "0xa65cfa7948af0ce2b21c70" + }, + { + "type": "hexstring", + "value": "0xb09c0a560f8181d92d7c66" + }, + { + "type": "hexstring", + "value": "0x3d8fe11d57996d0039a95b" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610132806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060c3565b60405180910390f35b604d60a5565b605360a5565b6a295f96a01727c7057cedcb60a81b81526a0a65cfa7948af0ce2b21c760ac1b60208201526a584e052b07c0c0ec96be3360a91b60408201526a3d8fe11d57996d0039a95b60a81b6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560f35781516001600160a81b03191683526020928301929091019060010160cc565b5050509291505056fea2646970667358221220967dcc6cea05158fbbaeae1b7cb341c4aeaba3bec0e36be9512770b2a478c0c664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes11[4] memory) {\n bytes11[4] memory r;\n {\n bytes11 r_0 = bytes11(0x295f96a01727c7057cedcb);\n r[0] = r_0;\n }\n {\n bytes11 r_1 = bytes11(0xa65cfa7948af0ce2b21c70);\n r[1] = r_1;\n }\n {\n bytes11 r_2 = bytes11(0xb09c0a560f8181d92d7c66);\n r[2] = r_2;\n }\n {\n bytes11 r_3 = bytes11(0x3d8fe11d57996d0039a95b);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x295f96a01727c7057cedcb000000000000000000000000000000000000000000a65cfa7948af0ce2b21c70000000000000000000000000000000000000000000b09c0a560f8181d92d7c660000000000000000000000000000000000000000003d8fe11d57996d0039a95b000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes12[]", + "type": "bytes12[]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060cf8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051600081526020810191829052604491604d565b60405180910390f35b6020808252825182820181905260009190848201906040850190845b81811015608d5783516001600160a01b031916835292840192918401916001016069565b5090969550505050505056fea2646970667358221220d217b69a1da8d5d7d9e51976f3bebcf1578826817b30b6aee35fc8a5769a642e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes12[] memory) {\n bytes12[] memory r = new bytes12[](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes12[1]", + "type": "bytes12[1]", + "value": ["0x55651c2e839c35f07e47f1b5"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x55651c2e839c35f07e47f1b5" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f88061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906088565b60405180910390f35b604d606a565b6053606a565b6b55651c2e839c35f07e47f1b560a01b8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560b85781516001600160a01b031916835291830191908301906001016093565b505050509291505056fea2646970667358221220a65e3b53c3bebd7b20e0464a13ea1743ec654bc0430024232ac9076755cc7ea764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes12[1] memory) {\n bytes12[1] memory r;\n {\n bytes12 r_0 = bytes12(0x55651c2e839c35f07e47f1b5);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x55651c2e839c35f07e47f1b50000000000000000000000000000000000000000" + }, + { + "name": "random-bytes13[]", + "type": "bytes13[]", + "value": ["0x3014860fdc9d42c5f0af7af406", "0xcadf2d6eaef72f0cf2423af310"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3014860fdc9d42c5f0af7af406" + }, + { + "type": "hexstring", + "value": "0xcadf2d6eaef72f0cf2423af310" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610196806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100fc565b60405180910390f35b60408051600280825260608083018452926000929190602083019080368337505081519192506c180a4307ee4ea162f857bd7a0360991b91829150839060009061009a5761009a61014a565b6001600160981b0319909216602092830291909101909101525080516c0cadf2d6eaef72f0cf2423af31609c1b908190839060019081106100dd576100dd61014a565b6001600160981b03199092166020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561013e5783516001600160981b03191683529284019291840191600101610118565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220a1a995ec51f6d1c60aadef57adc781b52cb73155d1e2624e2555b2449c4bea4964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes13[] memory) {\n bytes13[] memory r = new bytes13[](2);\n {\n bytes13 r_0 = bytes13(0x3014860fdc9d42c5f0af7af406);\n r[0] = r_0;\n }\n {\n bytes13 r_1 = bytes13(0xcadf2d6eaef72f0cf2423af310);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000023014860fdc9d42c5f0af7af40600000000000000000000000000000000000000cadf2d6eaef72f0cf2423af31000000000000000000000000000000000000000" + }, + { + "name": "random-bytes13[2]", + "type": "bytes13[2]", + "value": ["0x025d295788e4a595c35f415272", "0xbc4a6675d9271d65f3c4f02d6b"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x025d295788e4a595c35f415272" + }, + { + "type": "hexstring", + "value": "0xbc4a6675d9271d65f3c4f02d6b" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061011a806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190609f565b60405180910390f35b604d6081565b60536081565b6c012e94abc47252cae1afa0a93960991b81526cbc4a6675d9271d65f3c4f02d6b60981b6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560db57815172ffffffffffffffffffffffffffffffffffffff191683526020928301929091019060010160a8565b5050509291505056fea2646970667358221220af9756f20542d19f69a163451f0c7ad8d047b6e7d523117e8ed9610859b2b4f964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes13[2] memory) {\n bytes13[2] memory r;\n {\n bytes13 r_0 = bytes13(0x025d295788e4a595c35f415272);\n r[0] = r_0;\n }\n {\n bytes13 r_1 = bytes13(0xbc4a6675d9271d65f3c4f02d6b);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x025d295788e4a595c35f41527200000000000000000000000000000000000000bc4a6675d9271d65f3c4f02d6b00000000000000000000000000000000000000" + }, + { + "name": "random-bytes13[3]", + "type": "bytes13[3]", + "value": [ + "0x8649f981fe32b301b4b66f7dec", + "0x698f952a37d77d14d4043d891a", + "0xee9eff7d53fc2e06d44ab21ca5" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8649f981fe32b301b4b66f7dec" + }, + { + "type": "hexstring", + "value": "0x698f952a37d77d14d4043d891a" + }, + { + "type": "hexstring", + "value": "0xee9eff7d53fc2e06d44ab21ca5" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610130806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060b5565b60405180910390f35b604d6097565b60536097565b6c21927e607f8cacc06d2d9bdf7b609a1b81526c34c7ca951bebbe8a6a021ec48d60991b60208201526cee9eff7d53fc2e06d44ab21ca560981b6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560f157815172ffffffffffffffffffffffffffffffffffffff191683526020928301929091019060010160be565b5050509291505056fea26469706673582212205efb02cc696e02eb0bb126cbd20f66202a55ee96d0445249dd1bbdf3cf0af69764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes13[3] memory) {\n bytes13[3] memory r;\n {\n bytes13 r_0 = bytes13(0x8649f981fe32b301b4b66f7dec);\n r[0] = r_0;\n }\n {\n bytes13 r_1 = bytes13(0x698f952a37d77d14d4043d891a);\n r[1] = r_1;\n }\n {\n bytes13 r_2 = bytes13(0xee9eff7d53fc2e06d44ab21ca5);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x8649f981fe32b301b4b66f7dec00000000000000000000000000000000000000698f952a37d77d14d4043d891a00000000000000000000000000000000000000ee9eff7d53fc2e06d44ab21ca500000000000000000000000000000000000000" + }, + { + "name": "random-bytes14[]", + "type": "bytes14[]", + "value": ["0xf577f4b17c08cbffef3f8d57aa9a", "0x5916f61d436a373e9689c85573bc"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xf577f4b17c08cbffef3f8d57aa9a" + }, + { + "type": "hexstring", + "value": "0x5916f61d436a373e9689c85573bc" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610198806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100fe565b60405180910390f35b60408051600280825260608083018452926000929190602083019080368337505081519192506d7abbfa58be0465fff79fc6abd54d60911b91829150839060009061009b5761009b61014c565b6001600160901b0319909216602092830291909101909101525080516d1645bd8750da8dcfa5a272155cef60921b908190839060019081106100df576100df61014c565b6001600160901b03199092166020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b818110156101405783516001600160901b0319168352928401929184019160010161011a565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220326a8edde76b46071f45a226ac89e4d9ead90877a4e4207a4871fbd4c35d713264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes14[] memory) {\n bytes14[] memory r = new bytes14[](2);\n {\n bytes14 r_0 = bytes14(0xf577f4b17c08cbffef3f8d57aa9a);\n r[0] = r_0;\n }\n {\n bytes14 r_1 = bytes14(0x5916f61d436a373e9689c85573bc);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002f577f4b17c08cbffef3f8d57aa9a0000000000000000000000000000000000005916f61d436a373e9689c85573bc000000000000000000000000000000000000" + }, + { + "name": "random-bytes14[2]", + "type": "bytes14[2]", + "value": ["0x7cc881f5f1fb879620cac2ee568d", "0x36155f66b2df9109808f4628d875"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x7cc881f5f1fb879620cac2ee568d" + }, + { + "type": "hexstring", + "value": "0x36155f66b2df9109808f4628d875" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061011b806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060a1565b60405180910390f35b604d6083565b60536083565b6d7cc881f5f1fb879620cac2ee568d60901b81526d36155f66b2df9109808f4628d87560901b6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560dc57815171ffffffffffffffffffffffffffffffffffff191683526020928301929091019060010160aa565b5050509291505056fea264697066735822122033d6073b75174ccaa3ea2a51f2ee9e4b748258e2606ca0d5951b7de375bcaae764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes14[2] memory) {\n bytes14[2] memory r;\n {\n bytes14 r_0 = bytes14(0x7cc881f5f1fb879620cac2ee568d);\n r[0] = r_0;\n }\n {\n bytes14 r_1 = bytes14(0x36155f66b2df9109808f4628d875);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x7cc881f5f1fb879620cac2ee568d00000000000000000000000000000000000036155f66b2df9109808f4628d875000000000000000000000000000000000000" + }, + { + "name": "random-bytes14[3]", + "type": "bytes14[3]", + "value": [ + "0x2eb812799141276c059388e29942", + "0xf9643797460cc00cf96a4d33e51e", + "0xcf46f8d269dfdb0f16f23be9a172" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2eb812799141276c059388e29942" + }, + { + "type": "hexstring", + "value": "0xf9643797460cc00cf96a4d33e51e" + }, + { + "type": "hexstring", + "value": "0xcf46f8d269dfdb0f16f23be9a172" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610132806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060b8565b60405180910390f35b604d609a565b6053609a565b6d175c093cc8a093b602c9c4714ca160911b81526d7cb21bcba30660067cb52699f28f60911b60208201526d67a37c6934efed878b791df4d0b960911b6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560f357815171ffffffffffffffffffffffffffffffffffff191683526020928301929091019060010160c1565b5050509291505056fea2646970667358221220c4ea4a1c5364ebb4e712970c0934456a37948a3af5d01ff9498c0317d12f65c164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes14[3] memory) {\n bytes14[3] memory r;\n {\n bytes14 r_0 = bytes14(0x2eb812799141276c059388e29942);\n r[0] = r_0;\n }\n {\n bytes14 r_1 = bytes14(0xf9643797460cc00cf96a4d33e51e);\n r[1] = r_1;\n }\n {\n bytes14 r_2 = bytes14(0xcf46f8d269dfdb0f16f23be9a172);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x2eb812799141276c059388e29942000000000000000000000000000000000000f9643797460cc00cf96a4d33e51e000000000000000000000000000000000000cf46f8d269dfdb0f16f23be9a172000000000000000000000000000000000000" + }, + { + "name": "random-bytes14[4]", + "type": "bytes14[4]", + "value": [ + "0x85f738a2efc20f687b62d50cc77e", + "0x0f1405b4dd7d681de9fe57159e2b", + "0x486ca678cb74f92901fe929210b6", + "0xaa6e7699ebc80f467d3c480b42fd" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x85f738a2efc20f687b62d50cc77e" + }, + { + "type": "hexstring", + "value": "0x0f1405b4dd7d681de9fe57159e2b" + }, + { + "type": "hexstring", + "value": "0x486ca678cb74f92901fe929210b6" + }, + { + "type": "hexstring", + "value": "0xaa6e7699ebc80f467d3c480b42fd" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610156806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100da565b60405180910390f35b6100566100bc565b61005e6100bc565b6d42fb9c5177e107b43db16a8663bf60911b81526d0f1405b4dd7d681de9fe57159e2b60901b60208201526d2436533c65ba7c9480ff4949085b60911b60408201526daa6e7699ebc80f467d3c480b42fd60901b6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561011757815171ffffffffffffffffffffffffffffffffffff19168352602092830192909101906001016100e3565b5050509291505056fea2646970667358221220a47bb492f74c1cbeaaf311a0775cbdc7bddebb4fb197ad1cf599090308f2d93064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes14[4] memory) {\n bytes14[4] memory r;\n {\n bytes14 r_0 = bytes14(0x85f738a2efc20f687b62d50cc77e);\n r[0] = r_0;\n }\n {\n bytes14 r_1 = bytes14(0x0f1405b4dd7d681de9fe57159e2b);\n r[1] = r_1;\n }\n {\n bytes14 r_2 = bytes14(0x486ca678cb74f92901fe929210b6);\n r[2] = r_2;\n }\n {\n bytes14 r_3 = bytes14(0xaa6e7699ebc80f467d3c480b42fd);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x85f738a2efc20f687b62d50cc77e0000000000000000000000000000000000000f1405b4dd7d681de9fe57159e2b000000000000000000000000000000000000486ca678cb74f92901fe929210b6000000000000000000000000000000000000aa6e7699ebc80f467d3c480b42fd000000000000000000000000000000000000" + }, + { + "name": "random-bytes15[]", + "type": "bytes15[]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060d98061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051600081526020810191829052604491604d565b60405180910390f35b6020808252825182820181905260009190848201906040850190845b81811015609757835170ffffffffffffffffffffffffffffffffff1916835292840192918401916001016069565b5090969550505050505056fea2646970667358221220c44b9e36ae95402ebcba99600f2702eebe285c3b4e9ed6d138cf95a0a1af90fc64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes15[] memory) {\n bytes15[] memory r = new bytes15[](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes15[3]", + "type": "bytes15[3]", + "value": [ + "0xf9460637d8a04b1f24fc9e91c5e54f", + "0x7f5ffd4f82e0d9e8f928b1069aff62", + "0x64cfa9c4a3df6f068b0f05474f342b" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xf9460637d8a04b1f24fc9e91c5e54f" + }, + { + "type": "hexstring", + "value": "0x7f5ffd4f82e0d9e8f928b1069aff62" + }, + { + "type": "hexstring", + "value": "0x64cfa9c4a3df6f068b0f05474f342b" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610134806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060bb565b60405180910390f35b604d609d565b6053609d565b6ef9460637d8a04b1f24fc9e91c5e54f60881b81526e3faffea7c1706cf47c9458834d7fb160891b60208201526e64cfa9c4a3df6f068b0f05474f342b60881b6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560f557815170ffffffffffffffffffffffffffffffffff191683526020928301929091019060010160c4565b5050509291505056fea264697066735822122079e2302255bf67fcdf7b6c89c4d6a83efab5242879bcb507751539174cbdbdd664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes15[3] memory) {\n bytes15[3] memory r;\n {\n bytes15 r_0 = bytes15(0xf9460637d8a04b1f24fc9e91c5e54f);\n r[0] = r_0;\n }\n {\n bytes15 r_1 = bytes15(0x7f5ffd4f82e0d9e8f928b1069aff62);\n r[1] = r_1;\n }\n {\n bytes15 r_2 = bytes15(0x64cfa9c4a3df6f068b0f05474f342b);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xf9460637d8a04b1f24fc9e91c5e54f00000000000000000000000000000000007f5ffd4f82e0d9e8f928b1069aff62000000000000000000000000000000000064cfa9c4a3df6f068b0f05474f342b0000000000000000000000000000000000" + }, + { + "name": "random-bytes16[]", + "type": "bytes16[]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060d88061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051600081526020810191829052604491604d565b60405180910390f35b6020808252825182820181905260009190848201906040850190845b8181101560965783516fffffffffffffffffffffffffffffffff1916835292840192918401916001016069565b5090969550505050505056fea26469706673582212204937103084abe6c8dbff84b003bae8efaa66b475e81c9694737b835279fea9b564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes16[] memory) {\n bytes16[] memory r = new bytes16[](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes16[1]", + "type": "bytes16[1]", + "value": ["0xc1ca7d91c3f78de791c426e905e635f6"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc1ca7d91c3f78de791c426e905e635f6" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610105806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190608c565b60405180910390f35b604d606e565b6053606e565b6f60e53ec8e1fbc6f3c8e2137482f31afb60811b8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560c55781516fffffffffffffffffffffffffffffffff1916835291830191908301906001016097565b505050509291505056fea26469706673582212207ab100a43fd7e1b4dab98cbfdf12d68e8e9566053cda98e7973a7a02473d12a264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes16[1] memory) {\n bytes16[1] memory r;\n {\n bytes16 r_0 = bytes16(0xc1ca7d91c3f78de791c426e905e635f6);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0xc1ca7d91c3f78de791c426e905e635f600000000000000000000000000000000" + }, + { + "name": "random-bytes16[3]", + "type": "bytes16[3]", + "value": [ + "0x8e1979d70054e446efdaaef0e20ba4dd", + "0x13a9d6a761bcd6cbec6346097871edb9", + "0x7efa8af954780d358649aca1b81ab345" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8e1979d70054e446efdaaef0e20ba4dd" + }, + { + "type": "hexstring", + "value": "0x13a9d6a761bcd6cbec6346097871edb9" + }, + { + "type": "hexstring", + "value": "0x7efa8af954780d358649aca1b81ab345" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610143806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100c9565b60405180910390f35b6100566100ab565b61005e6100ab565b6f8e1979d70054e446efdaaef0e20ba4dd60801b81526f13a9d6a761bcd6cbec6346097871edb960801b60208201526f7efa8af954780d358649aca1b81ab34560801b6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b60038110156101045781516fffffffffffffffffffffffffffffffff19168352602092830192909101906001016100d2565b5050509291505056fea26469706673582212207965be8f6dcabe4cfcadebabcab364cd7aa67dedb67255771168fe85f82a2e7164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes16[3] memory) {\n bytes16[3] memory r;\n {\n bytes16 r_0 = bytes16(0x8e1979d70054e446efdaaef0e20ba4dd);\n r[0] = r_0;\n }\n {\n bytes16 r_1 = bytes16(0x13a9d6a761bcd6cbec6346097871edb9);\n r[1] = r_1;\n }\n {\n bytes16 r_2 = bytes16(0x7efa8af954780d358649aca1b81ab345);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x8e1979d70054e446efdaaef0e20ba4dd0000000000000000000000000000000013a9d6a761bcd6cbec6346097871edb9000000000000000000000000000000007efa8af954780d358649aca1b81ab34500000000000000000000000000000000" + }, + { + "name": "random-bytes16[4]", + "type": "bytes16[4]", + "value": [ + "0x19b9b8e23cec1357bd62d14137436d4c", + "0xf6193ca5a13d2a44aa07c60d05cb058f", + "0x11528648484f38f63ceaef3d86fbe85e", + "0x742d81984e76defc5b3b6624fc5b27ce" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x19b9b8e23cec1357bd62d14137436d4c" + }, + { + "type": "hexstring", + "value": "0xf6193ca5a13d2a44aa07c60d05cb058f" + }, + { + "type": "hexstring", + "value": "0x11528648484f38f63ceaef3d86fbe85e" + }, + { + "type": "hexstring", + "value": "0x742d81984e76defc5b3b6624fc5b27ce" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061015c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e2565b60405180910390f35b6100566100c4565b61005e6100c4565b6f066e6e388f3b04d5ef58b4504dd0db5360821b81526ff6193ca5a13d2a44aa07c60d05cb058f60801b60208201526f08a9432424279c7b1e75779ec37df42f60811b60408201526f3a16c0cc273b6f7e2d9db3127e2d93e760811b6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561011d5781516fffffffffffffffffffffffffffffffff19168352602092830192909101906001016100eb565b5050509291505056fea2646970667358221220a3b54a029a39ddfdaa52fbbcc59294d4083b5ac4b82738dd36bb8782a699facf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes16[4] memory) {\n bytes16[4] memory r;\n {\n bytes16 r_0 = bytes16(0x19b9b8e23cec1357bd62d14137436d4c);\n r[0] = r_0;\n }\n {\n bytes16 r_1 = bytes16(0xf6193ca5a13d2a44aa07c60d05cb058f);\n r[1] = r_1;\n }\n {\n bytes16 r_2 = bytes16(0x11528648484f38f63ceaef3d86fbe85e);\n r[2] = r_2;\n }\n {\n bytes16 r_3 = bytes16(0x742d81984e76defc5b3b6624fc5b27ce);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x19b9b8e23cec1357bd62d14137436d4c00000000000000000000000000000000f6193ca5a13d2a44aa07c60d05cb058f0000000000000000000000000000000011528648484f38f63ceaef3d86fbe85e00000000000000000000000000000000742d81984e76defc5b3b6624fc5b27ce00000000000000000000000000000000" + }, + { + "name": "random-bytes17[]", + "type": "bytes17[]", + "value": [ + "0xdbc1b6519578cf476e53a3bb6ee205532a", + "0x0e8557db553e0144fb100a08eebd23f2f4", + "0x74a3152d3f22fd469948a72173a79fd87f" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xdbc1b6519578cf476e53a3bb6ee205532a" + }, + { + "type": "hexstring", + "value": "0x0e8557db553e0144fb100a08eebd23f2f4" + }, + { + "type": "hexstring", + "value": "0x74a3152d3f22fd469948a72173a79fd87f" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101e6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061014c565b60405180910390f35b604080516003808252608082019092526060916000919060208201848036833750508151919250706de0db28cabc67a3b729d1ddb77102a99560791b91829150839060009061009f5761009f61019a565b6001600160781b0319909216602092830291909101909101525080517003a155f6d54f80513ec402823baf48fcbd607a1b908190839060019081106100e6576100e661019a565b6001600160781b0319909216602092830291909101909101525080517074a3152d3f22fd469948a72173a79fd87f60781b9081908390600290811061012d5761012d61019a565b6001600160781b03199092166020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561018e5783516001600160781b03191683529284019291840191600101610168565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea264697066735822122069c04136c04d9d6b92cb06213f3c0a5c83fd8d42675dea13cc1e8969dab4d76164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes17[] memory) {\n bytes17[] memory r = new bytes17[](3);\n {\n bytes17 r_0 = bytes17(0xdbc1b6519578cf476e53a3bb6ee205532a);\n r[0] = r_0;\n }\n {\n bytes17 r_1 = bytes17(0x0e8557db553e0144fb100a08eebd23f2f4);\n r[1] = r_1;\n }\n {\n bytes17 r_2 = bytes17(0x74a3152d3f22fd469948a72173a79fd87f);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003dbc1b6519578cf476e53a3bb6ee205532a0000000000000000000000000000000e8557db553e0144fb100a08eebd23f2f400000000000000000000000000000074a3152d3f22fd469948a72173a79fd87f000000000000000000000000000000" + }, + { + "name": "random-bytes17[2]", + "type": "bytes17[2]", + "value": ["0x14ccd0a2d136002cb191ba95cacdfe2303", "0x0b1c8a5bd98fdf9d6fc5d1feb07d07b187"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x14ccd0a2d136002cb191ba95cacdfe2303" + }, + { + "type": "hexstring", + "value": "0x0b1c8a5bd98fdf9d6fc5d1feb07d07b187" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061011e806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060a7565b60405180910390f35b604d6089565b60536089565b7014ccd0a2d136002cb191ba95cacdfe230360781b8152700b1c8a5bd98fdf9d6fc5d1feb07d07b18760781b6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560df5781516effffffffffffffffffffffffffffff191683526020928301929091019060010160b0565b5050509291505056fea2646970667358221220e8ab40fc8c3fb3651a9ee90e0f7cc1a1b22960991c71da60a8cb58831955789f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes17[2] memory) {\n bytes17[2] memory r;\n {\n bytes17 r_0 = bytes17(0x14ccd0a2d136002cb191ba95cacdfe2303);\n r[0] = r_0;\n }\n {\n bytes17 r_1 = bytes17(0x0b1c8a5bd98fdf9d6fc5d1feb07d07b187);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x14ccd0a2d136002cb191ba95cacdfe23030000000000000000000000000000000b1c8a5bd98fdf9d6fc5d1feb07d07b187000000000000000000000000000000" + }, + { + "name": "random-bytes17[3]", + "type": "bytes17[3]", + "value": [ + "0x13aad17e690737d34fd3fdfaac2d5b6c17", + "0x424858b72dc8802d7976473ad0118bf4a1", + "0x10b7c98ccbd0ef4c80edcc4a42291244f1" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x13aad17e690737d34fd3fdfaac2d5b6c17" + }, + { + "type": "hexstring", + "value": "0x424858b72dc8802d7976473ad0118bf4a1" + }, + { + "type": "hexstring", + "value": "0x10b7c98ccbd0ef4c80edcc4a42291244f1" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610145806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100cc565b60405180910390f35b6100566100ae565b61005e6100ae565b7013aad17e690737d34fd3fdfaac2d5b6c1760781b815270424858b72dc8802d7976473ad0118bf4a160781b60208201527010b7c98ccbd0ef4c80edcc4a42291244f160781b6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b60038110156101065781516effffffffffffffffffffffffffffff19168352602092830192909101906001016100d5565b5050509291505056fea2646970667358221220f7dc4875f92bfdf09073e7119e1b01ca0850f7a120af9600d02db5eeda32fe4064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes17[3] memory) {\n bytes17[3] memory r;\n {\n bytes17 r_0 = bytes17(0x13aad17e690737d34fd3fdfaac2d5b6c17);\n r[0] = r_0;\n }\n {\n bytes17 r_1 = bytes17(0x424858b72dc8802d7976473ad0118bf4a1);\n r[1] = r_1;\n }\n {\n bytes17 r_2 = bytes17(0x10b7c98ccbd0ef4c80edcc4a42291244f1);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x13aad17e690737d34fd3fdfaac2d5b6c17000000000000000000000000000000424858b72dc8802d7976473ad0118bf4a100000000000000000000000000000010b7c98ccbd0ef4c80edcc4a42291244f1000000000000000000000000000000" + }, + { + "name": "random-bytes18[1]", + "type": "bytes18[1]", + "value": ["0xa1341cc1f8884332f185a6f3294e45b5f470"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xa1341cc1f8884332f185a6f3294e45b5f470" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610105806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190608e565b60405180910390f35b604d6070565b60536070565b710a1341cc1f8884332f185a6f3294e45b5f4760741b8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560c55781516dffffffffffffffffffffffffffff1916835291830191908301906001016099565b505050509291505056fea264697066735822122064969087ba46ae336b0f78bc9f3e66780338c9d9d60cedb46c1eac01cc4fdf3d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes18[1] memory) {\n bytes18[1] memory r;\n {\n bytes18 r_0 = bytes18(0xa1341cc1f8884332f185a6f3294e45b5f470);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0xa1341cc1f8884332f185a6f3294e45b5f4700000000000000000000000000000" + }, + { + "name": "random-bytes19[3]", + "type": "bytes19[3]", + "value": [ + "0xc4f5fbb3c98aa31d24bfbff26c56b298e7dec9", + "0x7df430a8e9c2d6bb148def168828a44a74b493", + "0xfa0bf3d696397a99c4578142330a531fb7f1a2" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc4f5fbb3c98aa31d24bfbff26c56b298e7dec9" + }, + { + "type": "hexstring", + "value": "0x7df430a8e9c2d6bb148def168828a44a74b493" + }, + { + "type": "hexstring", + "value": "0xfa0bf3d696397a99c4578142330a531fb7f1a2" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610149806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d2565b60405180910390f35b6100566100b4565b61005e6100b4565b72c4f5fbb3c98aa31d24bfbff26c56b298e7dec960681b8152727df430a8e9c2d6bb148def168828a44a74b49360681b6020820152727d05f9eb4b1cbd4ce22bc0a11985298fdbf8d160691b6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101561010a5781516cffffffffffffffffffffffffff19168352602092830192909101906001016100db565b5050509291505056fea264697066735822122024213cef98d118239ee399ba20ceb7aacc3d07c3709b4cbc07cf40e1947485bb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes19[3] memory) {\n bytes19[3] memory r;\n {\n bytes19 r_0 = bytes19(0xc4f5fbb3c98aa31d24bfbff26c56b298e7dec9);\n r[0] = r_0;\n }\n {\n bytes19 r_1 = bytes19(0x7df430a8e9c2d6bb148def168828a44a74b493);\n r[1] = r_1;\n }\n {\n bytes19 r_2 = bytes19(0xfa0bf3d696397a99c4578142330a531fb7f1a2);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xc4f5fbb3c98aa31d24bfbff26c56b298e7dec9000000000000000000000000007df430a8e9c2d6bb148def168828a44a74b49300000000000000000000000000fa0bf3d696397a99c4578142330a531fb7f1a200000000000000000000000000" + }, + { + "name": "random-bytes2[4]", + "type": "bytes2[4]", + "value": ["0x8539", "0xe459", "0x7c59", "0x6096"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8539" + }, + { + "type": "hexstring", + "value": "0xe459" + }, + { + "type": "hexstring", + "value": "0x7c59" + }, + { + "type": "hexstring", + "value": "0x6096" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061010e806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190609f565b60405180910390f35b604d6081565b60536081565b61853960f01b815261e45960f01b6020820152617c5960f01b604082015261304b60f11b6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560cf5781516001600160f01b03191683526020928301929091019060010160a8565b5050509291505056fea2646970667358221220670aa47106a4d13c6e7275d041a033598c7b96155c5c7bba8d744204490c3f2164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes2[4] memory) {\n bytes2[4] memory r;\n {\n bytes2 r_0 = bytes2(0x8539);\n r[0] = r_0;\n }\n {\n bytes2 r_1 = bytes2(0xe459);\n r[1] = r_1;\n }\n {\n bytes2 r_2 = bytes2(0x7c59);\n r[2] = r_2;\n }\n {\n bytes2 r_3 = bytes2(0x6096);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x8539000000000000000000000000000000000000000000000000000000000000e4590000000000000000000000000000000000000000000000000000000000007c590000000000000000000000000000000000000000000000000000000000006096000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes20[]", + "type": "bytes20[]", + "value": [ + "0x4d6b6cb8bd01e37151eb1d73b368f497feef8488", + "0xe454637fa14d1b7f5fa5bfdffa7f06c6ffbdb33f", + "0x7f296da916bcd5d852ccebaea015aab4d05e10e0", + "0x049f50e7785f77fb252e4b67b54643ef135e21f0" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x4d6b6cb8bd01e37151eb1d73b368f497feef8488" + }, + { + "type": "hexstring", + "value": "0xe454637fa14d1b7f5fa5bfdffa7f06c6ffbdb33f" + }, + { + "type": "hexstring", + "value": "0x7f296da916bcd5d852ccebaea015aab4d05e10e0" + }, + { + "type": "hexstring", + "value": "0x049f50e7785f77fb252e4b67b54643ef135e21f0" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610239806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061019f565b60405180910390f35b60408051600480825260a082019092526060916000919060208201608080368337505081519192507309ad6d9717a03c6e2a3d63ae766d1e92ffddf09160631b9182915083906000906100a3576100a36101ed565b6001600160601b03199092166020928302919091019091015250805173e454637fa14d1b7f5fa5bfdffa7f06c6ffbdb33f60601b908190839060019081106100ed576100ed6101ed565b6001600160601b0319909216602092830291909101909101525080517303f94b6d48b5e6aec296675d7500ad55a682f08760651b90819083906002908110610137576101376101ed565b6001600160601b0319909216602092830291909101909101525080517249f50e7785f77fb252e4b67b54643ef135e21f60641b90819083906003908110610180576101806101ed565b6001600160601b03199092166020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b818110156101e15783516001600160601b031916835292840192918401916001016101bb565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220e86797ad8068895d4858680bb075196b87fd6e473b234956c77b92253228337e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes20[] memory) {\n bytes20[] memory r = new bytes20[](4);\n {\n bytes20 r_0 = bytes20(0x4D6b6cb8Bd01E37151eb1d73B368f497FeEF8488);\n r[0] = r_0;\n }\n {\n bytes20 r_1 = bytes20(0xE454637FA14d1b7f5fA5BFdFfA7F06c6FfBdb33F);\n r[1] = r_1;\n }\n {\n bytes20 r_2 = bytes20(0x7F296da916BCD5d852CcebaEA015Aab4d05E10E0);\n r[2] = r_2;\n }\n {\n bytes20 r_3 = bytes20(0x049f50e7785f77fB252E4B67b54643eF135e21F0);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000044d6b6cb8bd01e37151eb1d73b368f497feef8488000000000000000000000000e454637fa14d1b7f5fa5bfdffa7f06c6ffbdb33f0000000000000000000000007f296da916bcd5d852ccebaea015aab4d05e10e0000000000000000000000000049f50e7785f77fb252e4b67b54643ef135e21f0000000000000000000000000" + }, + { + "name": "random-bytes20[3]", + "type": "bytes20[3]", + "value": [ + "0xbbdb6e5c3693eb873a13337c0cf01b1b11df1aa7", + "0xcff340c9f1b8cdf35b456e78ac478b982fadebfd", + "0x28b04b536b964cb2d5bc9a9b3ed311aeb0582b80" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xbbdb6e5c3693eb873a13337c0cf01b1b11df1aa7" + }, + { + "type": "hexstring", + "value": "0xcff340c9f1b8cdf35b456e78ac478b982fadebfd" + }, + { + "type": "hexstring", + "value": "0x28b04b536b964cb2d5bc9a9b3ed311aeb0582b80" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061014a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d4565b60405180910390f35b6100566100b6565b61005e6100b6565b73bbdb6e5c3693eb873a13337c0cf01b1b11df1aa760601b815273cff340c9f1b8cdf35b456e78ac478b982fadebfd60601b602082015272516096a6d72c9965ab7935367da6235d60b05760671b6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101561010b5781516bffffffffffffffffffffffff19168352602092830192909101906001016100dd565b5050509291505056fea2646970667358221220e98ee2db51eb2bb8028992827ce2d458c0ae4e3e6c831bf2f04fc9251119723f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes20[3] memory) {\n bytes20[3] memory r;\n {\n bytes20 r_0 = bytes20(0xbbdB6E5c3693Eb873A13337C0CF01B1B11df1Aa7);\n r[0] = r_0;\n }\n {\n bytes20 r_1 = bytes20(0xcfF340C9f1B8cDF35b456e78AC478B982FAdEbFD);\n r[1] = r_1;\n }\n {\n bytes20 r_2 = bytes20(0x28b04B536b964cb2d5bC9A9b3Ed311Aeb0582b80);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xbbdb6e5c3693eb873a13337c0cf01b1b11df1aa7000000000000000000000000cff340c9f1b8cdf35b456e78ac478b982fadebfd00000000000000000000000028b04b536b964cb2d5bc9a9b3ed311aeb0582b80000000000000000000000000" + }, + { + "name": "random-bytes20[4]", + "type": "bytes20[4]", + "value": [ + "0xd0e59a714ba95ea02bd7fbc1a88bf59b0bb2eb36", + "0xd4e1d23c41093f37603a1413cbe30c4a1ba70923", + "0x2f8f029cafbc86e62d9d0d9970ee096ebe5cbdee", + "0x208b46eb382f4a8ef8007f4353d962d2c9a5a293" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xd0e59a714ba95ea02bd7fbc1a88bf59b0bb2eb36" + }, + { + "type": "hexstring", + "value": "0xd4e1d23c41093f37603a1413cbe30c4a1ba70923" + }, + { + "type": "hexstring", + "value": "0x2f8f029cafbc86e62d9d0d9970ee096ebe5cbdee" + }, + { + "type": "hexstring", + "value": "0x208b46eb382f4a8ef8007f4353d962d2c9a5a293" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610168806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f2565b60405180910390f35b6100566100d4565b61005e6100d4565b736872cd38a5d4af5015ebfde0d445facd85d9759b60611b815273d4e1d23c41093f37603a1413cbe30c4a1ba7092360601b60208201527317c7814e57de437316ce86ccb87704b75f2e5ef760611b604082015273208b46eb382f4a8ef8007f4353d962d2c9a5a29360601b6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b60048110156101295781516bffffffffffffffffffffffff19168352602092830192909101906001016100fb565b5050509291505056fea26469706673582212202135cc60c75774ad565863650b772df5bb4e0e5f76562c76be34c7e0d6053bc364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes20[4] memory) {\n bytes20[4] memory r;\n {\n bytes20 r_0 = bytes20(0xd0e59a714bA95ea02bD7FbC1A88BF59b0bB2eB36);\n r[0] = r_0;\n }\n {\n bytes20 r_1 = bytes20(0xd4E1D23C41093F37603a1413cBe30c4a1bA70923);\n r[1] = r_1;\n }\n {\n bytes20 r_2 = bytes20(0x2F8f029cafBc86E62D9D0d9970EE096ebe5cBDEE);\n r[2] = r_2;\n }\n {\n bytes20 r_3 = bytes20(0x208b46eb382F4a8EF8007F4353d962D2C9A5a293);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xd0e59a714ba95ea02bd7fbc1a88bf59b0bb2eb36000000000000000000000000d4e1d23c41093f37603a1413cbe30c4a1ba709230000000000000000000000002f8f029cafbc86e62d9d0d9970ee096ebe5cbdee000000000000000000000000208b46eb382f4a8ef8007f4353d962d2c9a5a293000000000000000000000000" + }, + { + "name": "random-bytes21[2]", + "type": "bytes21[2]", + "value": [ + "0x1a6307844c9a427b633acac7d1caadbfa5a4533195", + "0x7f61fbb0bcf64b8c605675906769e69e93e1f6f135" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x1a6307844c9a427b633acac7d1caadbfa5a4533195" + }, + { + "type": "hexstring", + "value": "0x7f61fbb0bcf64b8c605675906769e69e93e1f6f135" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610122806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060af565b60405180910390f35b604d6091565b60536091565b741a6307844c9a427b633acac7d1caadbfa5a453319560581b8152747f61fbb0bcf64b8c605675906769e69e93e1f6f13560581b6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560e35781516affffffffffffffffffffff191683526020928301929091019060010160b8565b5050509291505056fea2646970667358221220703710cbe92f86707cd7a8fcc2e09ab68ab41c0ae096de0dea4ea9e808e554c964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes21[2] memory) {\n bytes21[2] memory r;\n {\n bytes21 r_0 = bytes21(0x1a6307844c9a427b633acac7d1caadbfa5a4533195);\n r[0] = r_0;\n }\n {\n bytes21 r_1 = bytes21(0x7f61fbb0bcf64b8c605675906769e69e93e1f6f135);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x1a6307844c9a427b633acac7d1caadbfa5a453319500000000000000000000007f61fbb0bcf64b8c605675906769e69e93e1f6f1350000000000000000000000" + }, + { + "name": "random-bytes22[]", + "type": "bytes22[]", + "value": [ + "0xad8f7003a7589b68e797eaa44003c751a60638c790af", + "0x1ed8334987dd34a7916821fcd50c77de17fd1f65333c" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xad8f7003a7589b68e797eaa44003c751a60638c790af" + }, + { + "type": "hexstring", + "value": "0x1ed8334987dd34a7916821fcd50c77de17fd1f65333c" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610114565b60405180910390f35b604080516002808252606080830184529260009291906020830190803683375050815191925075ad8f7003a7589b68e797eaa44003c751a60638c790af60501b9182915083906000906100a3576100a3610165565b69ffffffffffffffffffff19909216602092830291909101909101525080517507b60cd261f74d29e45a087f35431df785ff47d94ccf60521b908190839060019081106100f2576100f2610165565b69ffffffffffffffffffff199092166020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561015957835169ffffffffffffffffffff191683529284019291840191600101610130565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220057bb2347de60a7708a1d685b64bb94123ead0c7c7020c70a4f61cb264f6d6f564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes22[] memory) {\n bytes22[] memory r = new bytes22[](2);\n {\n bytes22 r_0 = bytes22(0xad8f7003a7589b68e797eaa44003c751a60638c790af);\n r[0] = r_0;\n }\n {\n bytes22 r_1 = bytes22(0x1ed8334987dd34a7916821fcd50c77de17fd1f65333c);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002ad8f7003a7589b68e797eaa44003c751a60638c790af000000000000000000001ed8334987dd34a7916821fcd50c77de17fd1f65333c00000000000000000000" + }, + { + "name": "random-bytes22[1]", + "type": "bytes22[1]", + "value": ["0x3848429eae753351930473c80965d3270264036313f1"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3848429eae753351930473c80965d3270264036313f1" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610105806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906092565b60405180910390f35b604d6074565b60536074565b753848429eae753351930473c80965d3270264036313f160501b8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560c557815169ffffffffffffffffffff191683529183019190830190600101609d565b505050509291505056fea2646970667358221220d4363a02597bf393175df5de7cb9dc8973b157551ea2c2b439a5fddfbf68840864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes22[1] memory) {\n bytes22[1] memory r;\n {\n bytes22 r_0 = bytes22(0x3848429eae753351930473c80965d3270264036313f1);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x3848429eae753351930473c80965d3270264036313f100000000000000000000" + }, + { + "name": "random-bytes22[2]", + "type": "bytes22[2]", + "value": [ + "0x31ec681d2ab94ec4dd929f677f8f83c5c2d28fd0fab2", + "0xc7091eaa7992ce22ec3d2c9e7c6bd2bc34fad591bb96" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x31ec681d2ab94ec4dd929f677f8f83c5c2d28fd0fab2" + }, + { + "type": "hexstring", + "value": "0xc7091eaa7992ce22ec3d2c9e7c6bd2bc34fad591bb96" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610123806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060b1565b60405180910390f35b604d6093565b60536093565b7518f6340e955ca7626ec94fb3bfc7c1e2e16947e87d5960511b81527563848f553cc96711761e964f3e35e95e1a7d6ac8ddcb60511b6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560e457815169ffffffffffffffffffff191683526020928301929091019060010160ba565b5050509291505056fea2646970667358221220bce9e73e91f473a7f3512790f261445901fdeeab4d66039df70725d6f6b6420764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes22[2] memory) {\n bytes22[2] memory r;\n {\n bytes22 r_0 = bytes22(0x31ec681d2ab94ec4dd929f677f8f83c5c2d28fd0fab2);\n r[0] = r_0;\n }\n {\n bytes22 r_1 = bytes22(0xc7091eaa7992ce22ec3d2c9e7c6bd2bc34fad591bb96);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x31ec681d2ab94ec4dd929f677f8f83c5c2d28fd0fab200000000000000000000c7091eaa7992ce22ec3d2c9e7c6bd2bc34fad591bb9600000000000000000000" + }, + { + "name": "random-bytes22[4]", + "type": "bytes22[4]", + "value": [ + "0xbdcb7f73310ba8c57fb00011195cdced33e2f95caf35", + "0xec2797222c90f5b1671ac44385d09d67c5da3e2032ec", + "0x1176650e45ebb8f26e0743c315d5ab2acdb4e720a694", + "0x0a507a61a0b23b53554fb8787e871cc028f46f4a83c1" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xbdcb7f73310ba8c57fb00011195cdced33e2f95caf35" + }, + { + "type": "hexstring", + "value": "0xec2797222c90f5b1671ac44385d09d67c5da3e2032ec" + }, + { + "type": "hexstring", + "value": "0x1176650e45ebb8f26e0743c315d5ab2acdb4e720a694" + }, + { + "type": "hexstring", + "value": "0x0a507a61a0b23b53554fb8787e871cc028f46f4a83c1" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061016e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100fa565b60405180910390f35b6100566100dc565b61005e6100dc565b75bdcb7f73310ba8c57fb00011195cdced33e2f95caf3560501b8152753b09e5c88b243d6c59c6b110e1742759f1768f880cbb60521b602082015275045d9943917aee3c9b81d0f0c5756acab36d39c829a560521b6040820152750a507a61a0b23b53554fb8787e871cc028f46f4a83c160501b6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561012f57815169ffffffffffffffffffff1916835260209283019290910190600101610103565b5050509291505056fea26469706673582212202d4a9ddd0036d9f43a78966c2c5263b24584f5109c006a7e75af3d1f763b1f7164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes22[4] memory) {\n bytes22[4] memory r;\n {\n bytes22 r_0 = bytes22(0xbdcb7f73310ba8c57fb00011195cdced33e2f95caf35);\n r[0] = r_0;\n }\n {\n bytes22 r_1 = bytes22(0xec2797222c90f5b1671ac44385d09d67c5da3e2032ec);\n r[1] = r_1;\n }\n {\n bytes22 r_2 = bytes22(0x1176650e45ebb8f26e0743c315d5ab2acdb4e720a694);\n r[2] = r_2;\n }\n {\n bytes22 r_3 = bytes22(0x0a507a61a0b23b53554fb8787e871cc028f46f4a83c1);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xbdcb7f73310ba8c57fb00011195cdced33e2f95caf3500000000000000000000ec2797222c90f5b1671ac44385d09d67c5da3e2032ec000000000000000000001176650e45ebb8f26e0743c315d5ab2acdb4e720a694000000000000000000000a507a61a0b23b53554fb8787e871cc028f46f4a83c100000000000000000000" + }, + { + "name": "random-bytes23[2]", + "type": "bytes23[2]", + "value": [ + "0x8201060db783330f8fb30e52d375b5553f9ebcc15a3af9", + "0xda12b8c0696f7360ff6cfdb260e7364b1a5bd1dbe7790a" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8201060db783330f8fb30e52d375b5553f9ebcc15a3af9" + }, + { + "type": "hexstring", + "value": "0xda12b8c0696f7360ff6cfdb260e7364b1a5bd1dbe7790a" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610130806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060bf565b60405180910390f35b604d60a1565b605360a1565b7f8201060db783330f8fb30e52d375b5553f9ebcc15a3af900000000000000000081527fda12b8c0696f7360ff6cfdb260e7364b1a5bd1dbe7790a0000000000000000006020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560f157815168ffffffffffffffffff191683526020928301929091019060010160c8565b5050509291505056fea26469706673582212200a598f092bc893beb08a7c3e5dc498c85b831684c88f3a7b205eb0efc21b2e2864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes23[2] memory) {\n bytes23[2] memory r;\n {\n bytes23 r_0 = bytes23(0x8201060db783330f8fb30e52d375b5553f9ebcc15a3af9);\n r[0] = r_0;\n }\n {\n bytes23 r_1 = bytes23(0xda12b8c0696f7360ff6cfdb260e7364b1a5bd1dbe7790a);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x8201060db783330f8fb30e52d375b5553f9ebcc15a3af9000000000000000000da12b8c0696f7360ff6cfdb260e7364b1a5bd1dbe7790a000000000000000000" + }, + { + "name": "random-bytes23[3]", + "type": "bytes23[3]", + "value": [ + "0xeb871c79c892e87925bcb5e748487122eb03d631756f94", + "0xd212c036804dc83cba75df1aee09d100c2a9f9032a3564", + "0x3b3a505b1bd18e3407eed6f5c3bd35c2cc380a17263c07" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xeb871c79c892e87925bcb5e748487122eb03d631756f94" + }, + { + "type": "hexstring", + "value": "0xd212c036804dc83cba75df1aee09d100c2a9f9032a3564" + }, + { + "type": "hexstring", + "value": "0x3b3a505b1bd18e3407eed6f5c3bd35c2cc380a17263c07" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610163806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f0565b60405180910390f35b6100566100d2565b61005e6100d2565b7feb871c79c892e87925bcb5e748487122eb03d631756f9400000000000000000081527fd212c036804dc83cba75df1aee09d100c2a9f9032a356400000000000000000060208201527f3b3a505b1bd18e3407eed6f5c3bd35c2cc380a17263c070000000000000000006040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101561012457815168ffffffffffffffffff19168352602092830192909101906001016100f9565b5050509291505056fea2646970667358221220c058a141f67c3da88f6a76e6d0577c3f22df519d69c0af35377b3f07e05a5c8b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes23[3] memory) {\n bytes23[3] memory r;\n {\n bytes23 r_0 = bytes23(0xeb871c79c892e87925bcb5e748487122eb03d631756f94);\n r[0] = r_0;\n }\n {\n bytes23 r_1 = bytes23(0xd212c036804dc83cba75df1aee09d100c2a9f9032a3564);\n r[1] = r_1;\n }\n {\n bytes23 r_2 = bytes23(0x3b3a505b1bd18e3407eed6f5c3bd35c2cc380a17263c07);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xeb871c79c892e87925bcb5e748487122eb03d631756f94000000000000000000d212c036804dc83cba75df1aee09d100c2a9f9032a35640000000000000000003b3a505b1bd18e3407eed6f5c3bd35c2cc380a17263c07000000000000000000" + }, + { + "name": "random-bytes23[4]", + "type": "bytes23[4]", + "value": [ + "0x552c1e9efc149713334beab5119821c4e8513445fb2014", + "0xf544bfc5c637ddeee2dd289007fcd088c151a6f1afa8a5", + "0x97f51cb21574ab8c5b5748ec7f15468dba01bf1c1aea23", + "0x14cd66a24e83a2b8ba0230344e283dfdb9ffb5bee2795c" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x552c1e9efc149713334beab5119821c4e8513445fb2014" + }, + { + "type": "hexstring", + "value": "0xf544bfc5c637ddeee2dd289007fcd088c151a6f1afa8a5" + }, + { + "type": "hexstring", + "value": "0x97f51cb21574ab8c5b5748ec7f15468dba01bf1c1aea23" + }, + { + "type": "hexstring", + "value": "0x14cd66a24e83a2b8ba0230344e283dfdb9ffb5bee2795c" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610189806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6100566100f8565b61005e6100f8565b7f552c1e9efc149713334beab5119821c4e8513445fb201400000000000000000081527ff544bfc5c637ddeee2dd289007fcd088c151a6f1afa8a500000000000000000060208201527f97f51cb21574ab8c5b5748ec7f15468dba01bf1c1aea2300000000000000000060408201527f14cd66a24e83a2b8ba0230344e283dfdb9ffb5bee2795c0000000000000000006060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561014a57815168ffffffffffffffffff191683526020928301929091019060010161011f565b5050509291505056fea26469706673582212200b5f2605758ff5c01d0e2efa881cda5e9bbfae165353264cd4e4254ac5184ef164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes23[4] memory) {\n bytes23[4] memory r;\n {\n bytes23 r_0 = bytes23(0x552c1e9efc149713334beab5119821c4e8513445fb2014);\n r[0] = r_0;\n }\n {\n bytes23 r_1 = bytes23(0xf544bfc5c637ddeee2dd289007fcd088c151a6f1afa8a5);\n r[1] = r_1;\n }\n {\n bytes23 r_2 = bytes23(0x97f51cb21574ab8c5b5748ec7f15468dba01bf1c1aea23);\n r[2] = r_2;\n }\n {\n bytes23 r_3 = bytes23(0x14cd66a24e83a2b8ba0230344e283dfdb9ffb5bee2795c);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x552c1e9efc149713334beab5119821c4e8513445fb2014000000000000000000f544bfc5c637ddeee2dd289007fcd088c151a6f1afa8a500000000000000000097f51cb21574ab8c5b5748ec7f15468dba01bf1c1aea2300000000000000000014cd66a24e83a2b8ba0230344e283dfdb9ffb5bee2795c000000000000000000" + }, + { + "name": "random-bytes24[1]", + "type": "bytes24[1]", + "value": ["0xcccb0d5262e9da79e5f448a674707179749757aba26c2d89"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xcccb0d5262e9da79e5f448a674707179749757aba26c2d89" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061010a806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906099565b60405180910390f35b604d607b565b6053607b565b7fcccb0d5262e9da79e5f448a674707179749757aba26c2d8900000000000000008152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560ca57815167ffffffffffffffff19168352918301919083019060010160a4565b505050509291505056fea2646970667358221220f60919e9523bdc1d5db826e4165126c81926022ebd7ff779dacb58b89bf3b41564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes24[1] memory) {\n bytes24[1] memory r;\n {\n bytes24 r_0 = bytes24(0xcccb0d5262e9da79e5f448a674707179749757aba26c2d89);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0xcccb0d5262e9da79e5f448a674707179749757aba26c2d890000000000000000" + }, + { + "name": "random-bytes24[2]", + "type": "bytes24[2]", + "value": [ + "0x9e79f08444008d2e8bca4e5ec85898a27daf94dd1085f21c", + "0x3af60ad43748642cf522720cdff5816cc9008127ed6221ca" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x9e79f08444008d2e8bca4e5ec85898a27daf94dd1085f21c" + }, + { + "type": "hexstring", + "value": "0x3af60ad43748642cf522720cdff5816cc9008127ed6221ca" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061012f806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060bf565b60405180910390f35b604d60a1565b605360a1565b7f9e79f08444008d2e8bca4e5ec85898a27daf94dd1085f21c000000000000000081527f3af60ad43748642cf522720cdff5816cc9008127ed6221ca00000000000000006020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560f057815167ffffffffffffffff191683526020928301929091019060010160c8565b5050509291505056fea264697066735822122072dcb8f6e27ad2d458776f3ec1966d3f576afd5288c225305f59ef357b4eb5e864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes24[2] memory) {\n bytes24[2] memory r;\n {\n bytes24 r_0 = bytes24(0x9e79f08444008d2e8bca4e5ec85898a27daf94dd1085f21c);\n r[0] = r_0;\n }\n {\n bytes24 r_1 = bytes24(0x3af60ad43748642cf522720cdff5816cc9008127ed6221ca);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x9e79f08444008d2e8bca4e5ec85898a27daf94dd1085f21c00000000000000003af60ad43748642cf522720cdff5816cc9008127ed6221ca0000000000000000" + }, + { + "name": "random-bytes24[3]", + "type": "bytes24[3]", + "value": [ + "0x7f9c7b4442af6efea86335bd032f9e70ed42660ef2bfe12e", + "0x5bad83b204492d0f1c31b115c620c224cf2989382d50e23d", + "0xbd8ed31b10fc2e9f55a639262c7fdf02139a029c66a7cbfa" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x7f9c7b4442af6efea86335bd032f9e70ed42660ef2bfe12e" + }, + { + "type": "hexstring", + "value": "0x5bad83b204492d0f1c31b115c620c224cf2989382d50e23d" + }, + { + "type": "hexstring", + "value": "0xbd8ed31b10fc2e9f55a639262c7fdf02139a029c66a7cbfa" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610162806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f0565b60405180910390f35b6100566100d2565b61005e6100d2565b7f7f9c7b4442af6efea86335bd032f9e70ed42660ef2bfe12e000000000000000081527f5bad83b204492d0f1c31b115c620c224cf2989382d50e23d000000000000000060208201527fbd8ed31b10fc2e9f55a639262c7fdf02139a029c66a7cbfa00000000000000006040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101561012357815167ffffffffffffffff19168352602092830192909101906001016100f9565b5050509291505056fea26469706673582212201c5decc127cdbc01245ee7c341a362de100bc3f2e23252c8ec24e2466e14717564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes24[3] memory) {\n bytes24[3] memory r;\n {\n bytes24 r_0 = bytes24(0x7f9c7b4442af6efea86335bd032f9e70ed42660ef2bfe12e);\n r[0] = r_0;\n }\n {\n bytes24 r_1 = bytes24(0x5bad83b204492d0f1c31b115c620c224cf2989382d50e23d);\n r[1] = r_1;\n }\n {\n bytes24 r_2 = bytes24(0xbd8ed31b10fc2e9f55a639262c7fdf02139a029c66a7cbfa);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x7f9c7b4442af6efea86335bd032f9e70ed42660ef2bfe12e00000000000000005bad83b204492d0f1c31b115c620c224cf2989382d50e23d0000000000000000bd8ed31b10fc2e9f55a639262c7fdf02139a029c66a7cbfa0000000000000000" + }, + { + "name": "random-bytes25[4]", + "type": "bytes25[4]", + "value": [ + "0x58787b9e89bdcb1ef006da94039802c5c2da6d7d45c5947f2b", + "0xdcae2d2ce8536d7713db936971c12b587cd55dee28d7e2ec64", + "0x6b49ca586e2737b408356ec1f1eaef74b3cd7509ddaa1f9de3", + "0x0678ada39c9100dbe2c13940ee3f9259ef6b63e2aa6ce72001" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x58787b9e89bdcb1ef006da94039802c5c2da6d7d45c5947f2b" + }, + { + "type": "hexstring", + "value": "0xdcae2d2ce8536d7713db936971c12b587cd55dee28d7e2ec64" + }, + { + "type": "hexstring", + "value": "0x6b49ca586e2737b408356ec1f1eaef74b3cd7509ddaa1f9de3" + }, + { + "type": "hexstring", + "value": "0x0678ada39c9100dbe2c13940ee3f9259ef6b63e2aa6ce72001" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610187806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6100566100f8565b61005e6100f8565b7f58787b9e89bdcb1ef006da94039802c5c2da6d7d45c5947f2b0000000000000081527fdcae2d2ce8536d7713db936971c12b587cd55dee28d7e2ec640000000000000060208201527f6b49ca586e2737b408356ec1f1eaef74b3cd7509ddaa1f9de30000000000000060408201527f0678ada39c9100dbe2c13940ee3f9259ef6b63e2aa6ce72001000000000000006060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561014857815166ffffffffffffff191683526020928301929091019060010161011f565b5050509291505056fea264697066735822122013b54bfc1b9af9a0e9eaecca5795502b0063a10b8f8b0e743bdf4406e1a3f90a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes25[4] memory) {\n bytes25[4] memory r;\n {\n bytes25 r_0 = bytes25(0x58787b9e89bdcb1ef006da94039802c5c2da6d7d45c5947f2b);\n r[0] = r_0;\n }\n {\n bytes25 r_1 = bytes25(0xdcae2d2ce8536d7713db936971c12b587cd55dee28d7e2ec64);\n r[1] = r_1;\n }\n {\n bytes25 r_2 = bytes25(0x6b49ca586e2737b408356ec1f1eaef74b3cd7509ddaa1f9de3);\n r[2] = r_2;\n }\n {\n bytes25 r_3 = bytes25(0x0678ada39c9100dbe2c13940ee3f9259ef6b63e2aa6ce72001);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x58787b9e89bdcb1ef006da94039802c5c2da6d7d45c5947f2b00000000000000dcae2d2ce8536d7713db936971c12b587cd55dee28d7e2ec64000000000000006b49ca586e2737b408356ec1f1eaef74b3cd7509ddaa1f9de3000000000000000678ada39c9100dbe2c13940ee3f9259ef6b63e2aa6ce7200100000000000000" + }, + { + "name": "random-bytes26[]", + "type": "bytes26[]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060ce8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051600081526020810191829052604491604d565b60405180910390f35b6020808252825182820181905260009190848201906040850190845b81811015608c57835165ffffffffffff1916835292840192918401916001016069565b5090969550505050505056fea264697066735822122093c20e81733a7f2eb1ff49c2d10070c240de7a91c6e316330e574a07ead6fb2464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes26[] memory) {\n bytes26[] memory r = new bytes26[](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes26[1]", + "type": "bytes26[1]", + "value": ["0x926cc3a45d9c45ce891f3a7292b1678fd4021c77ed4404417acf"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x926cc3a45d9c45ce891f3a7292b1678fd4021c77ed4404417acf" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610108806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906099565b60405180910390f35b604d607b565b6053607b565b7f926cc3a45d9c45ce891f3a7292b1678fd4021c77ed4404417acf0000000000008152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560c857815165ffffffffffff19168352918301919083019060010160a4565b505050509291505056fea2646970667358221220d7099b7b4c4abc985c2f72f8649f1ff46a1254835a9066a872b47297ceeb3ce664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes26[1] memory) {\n bytes26[1] memory r;\n {\n bytes26 r_0 = bytes26(0x926cc3a45d9c45ce891f3a7292b1678fd4021c77ed4404417acf);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x926cc3a45d9c45ce891f3a7292b1678fd4021c77ed4404417acf000000000000" + }, + { + "name": "random-bytes27[]", + "type": "bytes27[]", + "value": [ + "0x4a7c9a37ca4e03c0bd95fb2fe207e7bd650fab1c6cc1700bc7df01", + "0xe621d9b4269498f3978e52f32299e44b4ea51598d4a256c04da248" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x4a7c9a37ca4e03c0bd95fb2fe207e7bd650fab1c6cc1700bc7df01" + }, + { + "type": "hexstring", + "value": "0xe621d9b4269498f3978e52f32299e44b4ea51598d4a256c04da248" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610118565b60405180910390f35b60408051600280825260608083018452926000929190602083019080368337505081519192507f4a7c9a37ca4e03c0bd95fb2fe207e7bd650fab1c6cc1700bc7df0100000000009182915083906000906100aa576100aa610164565b64ffffffffff19909216602092830291909101909101525080517fe621d9b4269498f3978e52f32299e44b4ea51598d4a256c04da2480000000000908190839060019081106100fb576100fb610164565b64ffffffffff199092166020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561015857835164ffffffffff191683529284019291840191600101610134565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220c09a616294bb155b68ddbfda9478235573af9cf55ba472b8ab2c11073e1750ff64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes27[] memory) {\n bytes27[] memory r = new bytes27[](2);\n {\n bytes27 r_0 = bytes27(0x4a7c9a37ca4e03c0bd95fb2fe207e7bd650fab1c6cc1700bc7df01);\n r[0] = r_0;\n }\n {\n bytes27 r_1 = bytes27(0xe621d9b4269498f3978e52f32299e44b4ea51598d4a256c04da248);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000024a7c9a37ca4e03c0bd95fb2fe207e7bd650fab1c6cc1700bc7df010000000000e621d9b4269498f3978e52f32299e44b4ea51598d4a256c04da2480000000000" + }, + { + "name": "random-bytes27[4]", + "type": "bytes27[4]", + "value": [ + "0x1011be8273020bd5599e6fc3213e7dc1a5d8820f9ee636d93eb683", + "0x66d68de46efcfd41fd3032988edcb738cabea0de0c2c5676266603", + "0x9687268b9c4f37861bbe5085f29cf6c3e26ffd309af2734ce28128", + "0x5fffe4be18a0d41eb3bb3117951ccf549ea143120c2df9ca742d0a" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x1011be8273020bd5599e6fc3213e7dc1a5d8820f9ee636d93eb683" + }, + { + "type": "hexstring", + "value": "0x66d68de46efcfd41fd3032988edcb738cabea0de0c2c5676266603" + }, + { + "type": "hexstring", + "value": "0x9687268b9c4f37861bbe5085f29cf6c3e26ffd309af2734ce28128" + }, + { + "type": "hexstring", + "value": "0x5fffe4be18a0d41eb3bb3117951ccf549ea143120c2df9ca742d0a" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610185806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6100566100f8565b61005e6100f8565b7f1011be8273020bd5599e6fc3213e7dc1a5d8820f9ee636d93eb683000000000081527f66d68de46efcfd41fd3032988edcb738cabea0de0c2c5676266603000000000060208201527f9687268b9c4f37861bbe5085f29cf6c3e26ffd309af2734ce28128000000000060408201527f5fffe4be18a0d41eb3bb3117951ccf549ea143120c2df9ca742d0a00000000006060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561014657815164ffffffffff191683526020928301929091019060010161011f565b5050509291505056fea26469706673582212206e15ca7505491340ed50475d1bbe85407a3ae5ba35ade38d53feb568c37f1b7064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes27[4] memory) {\n bytes27[4] memory r;\n {\n bytes27 r_0 = bytes27(0x1011be8273020bd5599e6fc3213e7dc1a5d8820f9ee636d93eb683);\n r[0] = r_0;\n }\n {\n bytes27 r_1 = bytes27(0x66d68de46efcfd41fd3032988edcb738cabea0de0c2c5676266603);\n r[1] = r_1;\n }\n {\n bytes27 r_2 = bytes27(0x9687268b9c4f37861bbe5085f29cf6c3e26ffd309af2734ce28128);\n r[2] = r_2;\n }\n {\n bytes27 r_3 = bytes27(0x5fffe4be18a0d41eb3bb3117951ccf549ea143120c2df9ca742d0a);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x1011be8273020bd5599e6fc3213e7dc1a5d8820f9ee636d93eb683000000000066d68de46efcfd41fd3032988edcb738cabea0de0c2c567626660300000000009687268b9c4f37861bbe5085f29cf6c3e26ffd309af2734ce2812800000000005fffe4be18a0d41eb3bb3117951ccf549ea143120c2df9ca742d0a0000000000" + }, + { + "name": "random-bytes28[2]", + "type": "bytes28[2]", + "value": [ + "0x52c9f5f1408d40df90886dedad3dbd6454291e64dbbdaa1fd0946bcf", + "0xf72f5a3e4d3c47e0e3002fb18c1c4a7ec6adafa8924aed536904712f" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x52c9f5f1408d40df90886dedad3dbd6454291e64dbbdaa1fd0946bcf" + }, + { + "type": "hexstring", + "value": "0xf72f5a3e4d3c47e0e3002fb18c1c4a7ec6adafa8924aed536904712f" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061012b806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060bf565b60405180910390f35b604d60a1565b605360a1565b7f52c9f5f1408d40df90886dedad3dbd6454291e64dbbdaa1fd0946bcf0000000081527ff72f5a3e4d3c47e0e3002fb18c1c4a7ec6adafa8924aed536904712f000000006020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560ec57815163ffffffff191683526020928301929091019060010160c8565b5050509291505056fea2646970667358221220e5d5193f7baa162f1b9e5317c7245a1f174561d26a88c8df3fa72673277cf56864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes28[2] memory) {\n bytes28[2] memory r;\n {\n bytes28 r_0 = bytes28(0x52c9f5f1408d40df90886dedad3dbd6454291e64dbbdaa1fd0946bcf);\n r[0] = r_0;\n }\n {\n bytes28 r_1 = bytes28(0xf72f5a3e4d3c47e0e3002fb18c1c4a7ec6adafa8924aed536904712f);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x52c9f5f1408d40df90886dedad3dbd6454291e64dbbdaa1fd0946bcf00000000f72f5a3e4d3c47e0e3002fb18c1c4a7ec6adafa8924aed536904712f00000000" + }, + { + "name": "random-bytes28[4]", + "type": "bytes28[4]", + "value": [ + "0xa7adf746d1efe634e4bb15f75ef2f414bff0c2f4ef3291797fd73acc", + "0xa52ce328030bc96360bd727324f0a6ec4b18226c4d487e5b7e69ecd9", + "0x2fd6787d8c6cdfe23eecaf955890b4c6063530a035e410b61e152c46", + "0x6b6212fcc346454abf7f88cd7869021b4df18406204e866fb8d26b8c" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xa7adf746d1efe634e4bb15f75ef2f414bff0c2f4ef3291797fd73acc" + }, + { + "type": "hexstring", + "value": "0xa52ce328030bc96360bd727324f0a6ec4b18226c4d487e5b7e69ecd9" + }, + { + "type": "hexstring", + "value": "0x2fd6787d8c6cdfe23eecaf955890b4c6063530a035e410b61e152c46" + }, + { + "type": "hexstring", + "value": "0x6b6212fcc346454abf7f88cd7869021b4df18406204e866fb8d26b8c" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610184806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6100566100f8565b61005e6100f8565b7fa7adf746d1efe634e4bb15f75ef2f414bff0c2f4ef3291797fd73acc0000000081527fa52ce328030bc96360bd727324f0a6ec4b18226c4d487e5b7e69ecd90000000060208201527f2fd6787d8c6cdfe23eecaf955890b4c6063530a035e410b61e152c460000000060408201527f6b6212fcc346454abf7f88cd7869021b4df18406204e866fb8d26b8c000000006060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561014557815163ffffffff191683526020928301929091019060010161011f565b5050509291505056fea2646970667358221220623174316a2b0496013203c17c29000cb80885233bc63381d5274728d8b508bb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes28[4] memory) {\n bytes28[4] memory r;\n {\n bytes28 r_0 = bytes28(0xa7adf746d1efe634e4bb15f75ef2f414bff0c2f4ef3291797fd73acc);\n r[0] = r_0;\n }\n {\n bytes28 r_1 = bytes28(0xa52ce328030bc96360bd727324f0a6ec4b18226c4d487e5b7e69ecd9);\n r[1] = r_1;\n }\n {\n bytes28 r_2 = bytes28(0x2fd6787d8c6cdfe23eecaf955890b4c6063530a035e410b61e152c46);\n r[2] = r_2;\n }\n {\n bytes28 r_3 = bytes28(0x6b6212fcc346454abf7f88cd7869021b4df18406204e866fb8d26b8c);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xa7adf746d1efe634e4bb15f75ef2f414bff0c2f4ef3291797fd73acc00000000a52ce328030bc96360bd727324f0a6ec4b18226c4d487e5b7e69ecd9000000002fd6787d8c6cdfe23eecaf955890b4c6063530a035e410b61e152c46000000006b6212fcc346454abf7f88cd7869021b4df18406204e866fb8d26b8c00000000" + }, + { + "name": "random-bytes29[]", + "type": "bytes29[]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060cb8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051600081526020810191829052604491604d565b60405180910390f35b6020808252825182820181905260009190848201906040850190845b81811015608957835162ffffff1916835292840192918401916001016069565b5090969550505050505056fea264697066735822122009117a5ed8ccd913d35a024d1c42ebd05270f044d3ef144ed81b1478a1eef8dd64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes29[] memory) {\n bytes29[] memory r = new bytes29[](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes29[1]", + "type": "bytes29[1]", + "value": ["0x19f980af68a48902edea0d05f6d757457337f696c00b8aa7ecda8bb337"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x19f980af68a48902edea0d05f6d757457337f696c00b8aa7ecda8bb337" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610105806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906099565b60405180910390f35b604d607b565b6053607b565b7f19f980af68a48902edea0d05f6d757457337f696c00b8aa7ecda8bb3370000008152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560c557815162ffffff19168352918301919083019060010160a4565b505050509291505056fea2646970667358221220ff574e653baea57b36ec3ad3c2fcbe800bc923a331ab15988185316b04276b6664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes29[1] memory) {\n bytes29[1] memory r;\n {\n bytes29 r_0 = bytes29(0x19f980af68a48902edea0d05f6d757457337f696c00b8aa7ecda8bb337);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x19f980af68a48902edea0d05f6d757457337f696c00b8aa7ecda8bb337000000" + }, + { + "name": "random-bytes29[3]", + "type": "bytes29[3]", + "value": [ + "0xca61a603528e4eae598fff58fd4a89a366c460e8a673af41c5df2ba4e4", + "0x0e178446feb2b32728219df16003cc5ca131b3f21c7191b12107124335", + "0xc495780afc2593a389119ecf9b6f62f168aaa1fa186664ddbc9a34e7a3" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xca61a603528e4eae598fff58fd4a89a366c460e8a673af41c5df2ba4e4" + }, + { + "type": "hexstring", + "value": "0x0e178446feb2b32728219df16003cc5ca131b3f21c7191b12107124335" + }, + { + "type": "hexstring", + "value": "0xc495780afc2593a389119ecf9b6f62f168aaa1fa186664ddbc9a34e7a3" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061015d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f0565b60405180910390f35b6100566100d2565b61005e6100d2565b7fca61a603528e4eae598fff58fd4a89a366c460e8a673af41c5df2ba4e400000081527f0e178446feb2b32728219df16003cc5ca131b3f21c7191b1210712433500000060208201527fc495780afc2593a389119ecf9b6f62f168aaa1fa186664ddbc9a34e7a30000006040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101561011e57815162ffffff19168352602092830192909101906001016100f9565b5050509291505056fea264697066735822122081ef8d8f03da48906fc01abbee46732ff86265c5f5a78caae93412dee8702eb564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes29[3] memory) {\n bytes29[3] memory r;\n {\n bytes29 r_0 = bytes29(0xca61a603528e4eae598fff58fd4a89a366c460e8a673af41c5df2ba4e4);\n r[0] = r_0;\n }\n {\n bytes29 r_1 = bytes29(0x0e178446feb2b32728219df16003cc5ca131b3f21c7191b12107124335);\n r[1] = r_1;\n }\n {\n bytes29 r_2 = bytes29(0xc495780afc2593a389119ecf9b6f62f168aaa1fa186664ddbc9a34e7a3);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xca61a603528e4eae598fff58fd4a89a366c460e8a673af41c5df2ba4e40000000e178446feb2b32728219df16003cc5ca131b3f21c7191b12107124335000000c495780afc2593a389119ecf9b6f62f168aaa1fa186664ddbc9a34e7a3000000" + }, + { + "name": "random-bytes3[1]", + "type": "bytes3[1]", + "value": ["0xb8582c"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xb8582c" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060ef8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190607f565b60405180910390f35b604d6061565b60536061565b622e160b60ea1b8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560af5781516001600160e81b03191683529183019190830190600101608a565b505050509291505056fea26469706673582212205a775d4cc36988a5bbcdc180fbc95647d99f180a6741a50e870665f8d2bf483864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes3[1] memory) {\n bytes3[1] memory r;\n {\n bytes3 r_0 = bytes3(0xb8582c);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0xb8582c0000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes3[2]", + "type": "bytes3[2]", + "value": ["0x3a99c3", "0x1f9a9c"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3a99c3" + }, + { + "type": "hexstring", + "value": "0x1f9a9c" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060fa8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190608b565b60405180910390f35b604d606d565b6053606d565b623a99c360e81b81526207e6a760ea1b6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560bb5781516001600160e81b0319168352602092830192909101906001016094565b5050509291505056fea2646970667358221220d25959faf7f00602aef1f8b6c96ed5d5c884041af51e76a27b163b4b79801a6964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes3[2] memory) {\n bytes3[2] memory r;\n {\n bytes3 r_0 = bytes3(0x3a99c3);\n r[0] = r_0;\n }\n {\n bytes3 r_1 = bytes3(0x1f9a9c);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x3a99c300000000000000000000000000000000000000000000000000000000001f9a9c0000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes3[3]", + "type": "bytes3[3]", + "value": ["0x706c56", "0xe9ac9f", "0xa0b278"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x706c56" + }, + { + "type": "hexstring", + "value": "0xe9ac9f" + }, + { + "type": "hexstring", + "value": "0xa0b278" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610106806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906097565b60405180910390f35b604d6079565b60536079565b6238362b60e91b815262e9ac9f60e81b60208201526214164f60eb1b6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560c75781516001600160e81b03191683526020928301929091019060010160a0565b5050509291505056fea2646970667358221220feffb806aff5ac36471707e074109c8e00ec17f5dacb894651bb29cdc1a32f1c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes3[3] memory) {\n bytes3[3] memory r;\n {\n bytes3 r_0 = bytes3(0x706c56);\n r[0] = r_0;\n }\n {\n bytes3 r_1 = bytes3(0xe9ac9f);\n r[1] = r_1;\n }\n {\n bytes3 r_2 = bytes3(0xa0b278);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x706c560000000000000000000000000000000000000000000000000000000000e9ac9f0000000000000000000000000000000000000000000000000000000000a0b2780000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes30[3]", + "type": "bytes30[3]", + "value": [ + "0x8995dcc51d8c0b37fc11787c7028ed34559accf9791af16e7aeec9ab384e", + "0xae42caec92c2deb098809da2e29f0485c2614fa67e6bf1ac9d50cd1294b6", + "0x0f275ec4c206c47c3098d4cdda78a79f74514f8fcad3aef111afd13bb886" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8995dcc51d8c0b37fc11787c7028ed34559accf9791af16e7aeec9ab384e" + }, + { + "type": "hexstring", + "value": "0xae42caec92c2deb098809da2e29f0485c2614fa67e6bf1ac9d50cd1294b6" + }, + { + "type": "hexstring", + "value": "0x0f275ec4c206c47c3098d4cdda78a79f74514f8fcad3aef111afd13bb886" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061015c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f0565b60405180910390f35b6100566100d2565b61005e6100d2565b7f8995dcc51d8c0b37fc11787c7028ed34559accf9791af16e7aeec9ab384e000081527fae42caec92c2deb098809da2e29f0485c2614fa67e6bf1ac9d50cd1294b6000060208201527f0f275ec4c206c47c3098d4cdda78a79f74514f8fcad3aef111afd13bb88600006040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101561011d57815161ffff19168352602092830192909101906001016100f9565b5050509291505056fea2646970667358221220f582cd7c36c82453f1fd205ce65095124b2090894db32c79a1eafacf94cff72f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes30[3] memory) {\n bytes30[3] memory r;\n {\n bytes30 r_0 = bytes30(0x8995dcc51d8c0b37fc11787c7028ed34559accf9791af16e7aeec9ab384e);\n r[0] = r_0;\n }\n {\n bytes30 r_1 = bytes30(0xae42caec92c2deb098809da2e29f0485c2614fa67e6bf1ac9d50cd1294b6);\n r[1] = r_1;\n }\n {\n bytes30 r_2 = bytes30(0x0f275ec4c206c47c3098d4cdda78a79f74514f8fcad3aef111afd13bb886);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x8995dcc51d8c0b37fc11787c7028ed34559accf9791af16e7aeec9ab384e0000ae42caec92c2deb098809da2e29f0485c2614fa67e6bf1ac9d50cd1294b600000f275ec4c206c47c3098d4cdda78a79f74514f8fcad3aef111afd13bb8860000" + }, + { + "name": "random-bytes30[4]", + "type": "bytes30[4]", + "value": [ + "0x8a2492af4b1cfd6b6322c21ecaba15e76c656e3fc5d69ed353a0eb9ae49a", + "0x9c4ef0ed9f0b74bb9751c84f54254fadc15051904a3aaf01a63695b229c6", + "0xf717e0e79daf5a18eeea785f936e9d0b2f867e5adbf00c319da45f5db04d", + "0x42397d4b9439754f98bef9ea96a1f6b3d8517c9c272e7d7ba1dc6852c8ea" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8a2492af4b1cfd6b6322c21ecaba15e76c656e3fc5d69ed353a0eb9ae49a" + }, + { + "type": "hexstring", + "value": "0x9c4ef0ed9f0b74bb9751c84f54254fadc15051904a3aaf01a63695b229c6" + }, + { + "type": "hexstring", + "value": "0xf717e0e79daf5a18eeea785f936e9d0b2f867e5adbf00c319da45f5db04d" + }, + { + "type": "hexstring", + "value": "0x42397d4b9439754f98bef9ea96a1f6b3d8517c9c272e7d7ba1dc6852c8ea" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610182806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6100566100f8565b61005e6100f8565b7f8a2492af4b1cfd6b6322c21ecaba15e76c656e3fc5d69ed353a0eb9ae49a000081527f9c4ef0ed9f0b74bb9751c84f54254fadc15051904a3aaf01a63695b229c6000060208201527ff717e0e79daf5a18eeea785f936e9d0b2f867e5adbf00c319da45f5db04d000060408201527f42397d4b9439754f98bef9ea96a1f6b3d8517c9c272e7d7ba1dc6852c8ea00006060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561014357815161ffff191683526020928301929091019060010161011f565b5050509291505056fea264697066735822122060c8e190cfc13697ba675fafd472b9a2a58c678a5a8f729da7401093c01fddfa64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes30[4] memory) {\n bytes30[4] memory r;\n {\n bytes30 r_0 = bytes30(0x8a2492af4b1cfd6b6322c21ecaba15e76c656e3fc5d69ed353a0eb9ae49a);\n r[0] = r_0;\n }\n {\n bytes30 r_1 = bytes30(0x9c4ef0ed9f0b74bb9751c84f54254fadc15051904a3aaf01a63695b229c6);\n r[1] = r_1;\n }\n {\n bytes30 r_2 = bytes30(0xf717e0e79daf5a18eeea785f936e9d0b2f867e5adbf00c319da45f5db04d);\n r[2] = r_2;\n }\n {\n bytes30 r_3 = bytes30(0x42397d4b9439754f98bef9ea96a1f6b3d8517c9c272e7d7ba1dc6852c8ea);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x8a2492af4b1cfd6b6322c21ecaba15e76c656e3fc5d69ed353a0eb9ae49a00009c4ef0ed9f0b74bb9751c84f54254fadc15051904a3aaf01a63695b229c60000f717e0e79daf5a18eeea785f936e9d0b2f867e5adbf00c319da45f5db04d000042397d4b9439754f98bef9ea96a1f6b3d8517c9c272e7d7ba1dc6852c8ea0000" + }, + { + "name": "random-bytes31[]", + "type": "bytes31[]", + "value": [ + "0xb9cd340de138183f269b650f16a52d37baaa59cafd00438fab624d167fbf6d", + "0x9cb11d6a17d588c2363c50aeba4cef3870a9e51746c88f9e7acdeb02554f63" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xb9cd340de138183f269b650f16a52d37baaa59cafd00438fab624d167fbf6d" + }, + { + "type": "hexstring", + "value": "0x9cb11d6a17d588c2363c50aeba4cef3870a9e51746c88f9e7acdeb02554f63" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101a4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610110565b60405180910390f35b60408051600280825260608083018452926000929190602083019080368337505081519192507fb9cd340de138183f269b650f16a52d37baaa59cafd00438fab624d167fbf6d009182915083906000906100aa576100aa610158565b60ff19909216602092830291909101909101525080517f9cb11d6a17d588c2363c50aeba4cef3870a9e51746c88f9e7acdeb02554f6300908190839060019081106100f7576100f7610158565b60ff199092166020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561014c57835160ff19168352928401929184019160010161012c565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220027fb41fa11bd05c586225ce983200437176f1af66fec116ee2c785e5cdaf75664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes31[] memory) {\n bytes31[] memory r = new bytes31[](2);\n {\n bytes31 r_0 = bytes31(0xb9cd340de138183f269b650f16a52d37baaa59cafd00438fab624d167fbf6d);\n r[0] = r_0;\n }\n {\n bytes31 r_1 = bytes31(0x9cb11d6a17d588c2363c50aeba4cef3870a9e51746c88f9e7acdeb02554f63);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002b9cd340de138183f269b650f16a52d37baaa59cafd00438fab624d167fbf6d009cb11d6a17d588c2363c50aeba4cef3870a9e51746c88f9e7acdeb02554f6300" + }, + { + "name": "random-bytes31[2]", + "type": "bytes31[2]", + "value": [ + "0xfe8258512ead80b83ac47f51f1e04cc1c9c0028fc5e577c72049fe315b86fb", + "0x5628e33c149bc31247560394ea19e4fab691985855ead4617e434e7ff69a79" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xfe8258512ead80b83ac47f51f1e04cc1c9c0028fc5e577c72049fe315b86fb" + }, + { + "type": "hexstring", + "value": "0x5628e33c149bc31247560394ea19e4fab691985855ead4617e434e7ff69a79" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610128806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060bf565b60405180910390f35b604d60a1565b605360a1565b7ffe8258512ead80b83ac47f51f1e04cc1c9c0028fc5e577c72049fe315b86fb0081527f5628e33c149bc31247560394ea19e4fab691985855ead4617e434e7ff69a79006020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560e957815160ff191683526020928301929091019060010160c8565b5050509291505056fea26469706673582212206371e8a1711370357b76cfd8dcafc63ae886adeaa2e1a88c113eb7125d79795c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes31[2] memory) {\n bytes31[2] memory r;\n {\n bytes31 r_0 = bytes31(0xfe8258512ead80b83ac47f51f1e04cc1c9c0028fc5e577c72049fe315b86fb);\n r[0] = r_0;\n }\n {\n bytes31 r_1 = bytes31(0x5628e33c149bc31247560394ea19e4fab691985855ead4617e434e7ff69a79);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0xfe8258512ead80b83ac47f51f1e04cc1c9c0028fc5e577c72049fe315b86fb005628e33c149bc31247560394ea19e4fab691985855ead4617e434e7ff69a7900" + }, + { + "name": "random-bytes31[4]", + "type": "bytes31[4]", + "value": [ + "0x60b0632afb03a73a53e055b82fbcafb8c3f71c322ea374331e77919a8b10ef", + "0x89f496a946d175ee89be1f2e4b8b40c1205730a6d43b633036ebd968e385d7", + "0xd07f8b097df0689dbbd439db142296c4b5b9ce6e557694c594df159e52bd82", + "0x12302e711ab742131178245be4a6f7d61175cbbfcfc525b8f838ca99310c28" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x60b0632afb03a73a53e055b82fbcafb8c3f71c322ea374331e77919a8b10ef" + }, + { + "type": "hexstring", + "value": "0x89f496a946d175ee89be1f2e4b8b40c1205730a6d43b633036ebd968e385d7" + }, + { + "type": "hexstring", + "value": "0xd07f8b097df0689dbbd439db142296c4b5b9ce6e557694c594df159e52bd82" + }, + { + "type": "hexstring", + "value": "0x12302e711ab742131178245be4a6f7d61175cbbfcfc525b8f838ca99310c28" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610181806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6100566100f8565b61005e6100f8565b7f60b0632afb03a73a53e055b82fbcafb8c3f71c322ea374331e77919a8b10ef0081527f89f496a946d175ee89be1f2e4b8b40c1205730a6d43b633036ebd968e385d70060208201527fd07f8b097df0689dbbd439db142296c4b5b9ce6e557694c594df159e52bd820060408201527f12302e711ab742131178245be4a6f7d61175cbbfcfc525b8f838ca99310c28006060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561014257815160ff191683526020928301929091019060010161011f565b5050509291505056fea264697066735822122022ecc2f6099c1067f57b6608cedb6e41f34dc7269ff1785b8862237500aa0b1964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes31[4] memory) {\n bytes31[4] memory r;\n {\n bytes31 r_0 = bytes31(0x60b0632afb03a73a53e055b82fbcafb8c3f71c322ea374331e77919a8b10ef);\n r[0] = r_0;\n }\n {\n bytes31 r_1 = bytes31(0x89f496a946d175ee89be1f2e4b8b40c1205730a6d43b633036ebd968e385d7);\n r[1] = r_1;\n }\n {\n bytes31 r_2 = bytes31(0xd07f8b097df0689dbbd439db142296c4b5b9ce6e557694c594df159e52bd82);\n r[2] = r_2;\n }\n {\n bytes31 r_3 = bytes31(0x12302e711ab742131178245be4a6f7d61175cbbfcfc525b8f838ca99310c28);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x60b0632afb03a73a53e055b82fbcafb8c3f71c322ea374331e77919a8b10ef0089f496a946d175ee89be1f2e4b8b40c1205730a6d43b633036ebd968e385d700d07f8b097df0689dbbd439db142296c4b5b9ce6e557694c594df159e52bd820012302e711ab742131178245be4a6f7d61175cbbfcfc525b8f838ca99310c2800" + }, + { + "name": "random-bytes32[]", + "type": "bytes32[]", + "value": [ + "0x23276f0d208b5c4f6752e0d7d1cfe56d056faa1931d02ff7a4dd49565750b3a2", + "0x4c8873cc325b290b887c48ce230a3344057920e399db2e4a67b2489eed6e409e", + "0xf899dca46d3f4907c2148afda021cae7a6f2ddc6943a13f3d751c3b6a7cbc6a3", + "0x9516131b237a1d1b59fb7dc2a38c93f10e518d98e4d96b80c8594f81e4ccfda0" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x23276f0d208b5c4f6752e0d7d1cfe56d056faa1931d02ff7a4dd49565750b3a2" + }, + { + "type": "hexstring", + "value": "0x4c8873cc325b290b887c48ce230a3344057920e399db2e4a67b2489eed6e409e" + }, + { + "type": "hexstring", + "value": "0xf899dca46d3f4907c2148afda021cae7a6f2ddc6943a13f3d751c3b6a7cbc6a3" + }, + { + "type": "hexstring", + "value": "0x9516131b237a1d1b59fb7dc2a38c93f10e518d98e4d96b80c8594f81e4ccfda0" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061021c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061018c565b60405180910390f35b60408051600480825260a082019092526060916000919060208201608080368337505081519192507f23276f0d208b5c4f6752e0d7d1cfe56d056faa1931d02ff7a4dd49565750b3a29182915083906000906100ac576100ac6101d0565b60209081029190910101525080517f4c8873cc325b290b887c48ce230a3344057920e399db2e4a67b2489eed6e409e908190839060019081106100f1576100f16101d0565b60209081029190910101525080517ff899dca46d3f4907c2148afda021cae7a6f2ddc6943a13f3d751c3b6a7cbc6a390819083906002908110610136576101366101d0565b60209081029190910101525080517f9516131b237a1d1b59fb7dc2a38c93f10e518d98e4d96b80c8594f81e4ccfda09081908390600390811061017b5761017b6101d0565b602090810291909101015250919050565b6020808252825182820181905260009190848201906040850190845b818110156101c4578351835292840192918401916001016101a8565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212204af74c5488149efa098c671e7d864e7b476f2758e1c816b0e87161d2f403d01c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes32[] memory) {\n bytes32[] memory r = new bytes32[](4);\n {\n bytes32 r_0 = bytes32(0x23276f0d208b5c4f6752e0d7d1cfe56d056faa1931d02ff7a4dd49565750b3a2);\n r[0] = r_0;\n }\n {\n bytes32 r_1 = bytes32(0x4c8873cc325b290b887c48ce230a3344057920e399db2e4a67b2489eed6e409e);\n r[1] = r_1;\n }\n {\n bytes32 r_2 = bytes32(0xf899dca46d3f4907c2148afda021cae7a6f2ddc6943a13f3d751c3b6a7cbc6a3);\n r[2] = r_2;\n }\n {\n bytes32 r_3 = bytes32(0x9516131b237a1d1b59fb7dc2a38c93f10e518d98e4d96b80c8594f81e4ccfda0);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000423276f0d208b5c4f6752e0d7d1cfe56d056faa1931d02ff7a4dd49565750b3a24c8873cc325b290b887c48ce230a3344057920e399db2e4a67b2489eed6e409ef899dca46d3f4907c2148afda021cae7a6f2ddc6943a13f3d751c3b6a7cbc6a39516131b237a1d1b59fb7dc2a38c93f10e518d98e4d96b80c8594f81e4ccfda0" + }, + { + "name": "random-bytes32[1]", + "type": "bytes32[1]", + "value": ["0x441a03f893e34c89f797c6e825b8247a74b540d1cc5790095479166c3499adec"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x441a03f893e34c89f797c6e825b8247a74b540d1cc5790095479166c3499adec" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060ff8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906099565b60405180910390f35b604d607b565b6053607b565b7f441a03f893e34c89f797c6e825b8247a74b540d1cc5790095479166c3499adec8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560bf5781518352918301919083019060010160a4565b505050509291505056fea264697066735822122033b23f7b51cf284a9cd84557df2fcf7fd5183935bc9bd3bbe5c672ecf5903b5464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes32[1] memory) {\n bytes32[1] memory r;\n {\n bytes32 r_0 = bytes32(0x441a03f893e34c89f797c6e825b8247a74b540d1cc5790095479166c3499adec);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x441a03f893e34c89f797c6e825b8247a74b540d1cc5790095479166c3499adec" + }, + { + "name": "random-bytes32[2]", + "type": "bytes32[2]", + "value": [ + "0xa3f61daa628db80aeba911434d101ef132e82ca4df087338fceb09301c010ac9", + "0x9a19306ce1c7d4b9f066a2487a2f00fea10cea10d45ddfd1da9e9d4e719f22a2" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xa3f61daa628db80aeba911434d101ef132e82ca4df087338fceb09301c010ac9" + }, + { + "type": "hexstring", + "value": "0x9a19306ce1c7d4b9f066a2487a2f00fea10cea10d45ddfd1da9e9d4e719f22a2" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610124806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060bf565b60405180910390f35b604d60a1565b605360a1565b7fa3f61daa628db80aeba911434d101ef132e82ca4df087338fceb09301c010ac981527f9a19306ce1c7d4b9f066a2487a2f00fea10cea10d45ddfd1da9e9d4e719f22a26020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560e557815183526020928301929091019060010160c8565b5050509291505056fea26469706673582212201f69b56a454887f1840d7037f3417232a9a31040bad697f293a49b686f892ed864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes32[2] memory) {\n bytes32[2] memory r;\n {\n bytes32 r_0 = bytes32(0xa3f61daa628db80aeba911434d101ef132e82ca4df087338fceb09301c010ac9);\n r[0] = r_0;\n }\n {\n bytes32 r_1 = bytes32(0x9a19306ce1c7d4b9f066a2487a2f00fea10cea10d45ddfd1da9e9d4e719f22a2);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0xa3f61daa628db80aeba911434d101ef132e82ca4df087338fceb09301c010ac99a19306ce1c7d4b9f066a2487a2f00fea10cea10d45ddfd1da9e9d4e719f22a2" + }, + { + "name": "random-bytes32[4]", + "type": "bytes32[4]", + "value": [ + "0x6e5f343c04175c12df1e9a61d390c470482e461796e4140d225e764446dd1628", + "0x83e008776c9fd05ee36693ac1b468bc120f983ad2ae77a9c34ba287dcf1bd8f6", + "0x331ff6b1dbe2f3805ba133bf663247f196fece8f952a0d1de7a654769f52b494", + "0x5cfa64863f5f43be8cb8538f389213bd158aa3d669efc45a9b1dc40af4d8ee33" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x6e5f343c04175c12df1e9a61d390c470482e461796e4140d225e764446dd1628" + }, + { + "type": "hexstring", + "value": "0x83e008776c9fd05ee36693ac1b468bc120f983ad2ae77a9c34ba287dcf1bd8f6" + }, + { + "type": "hexstring", + "value": "0x331ff6b1dbe2f3805ba133bf663247f196fece8f952a0d1de7a654769f52b494" + }, + { + "type": "hexstring", + "value": "0x5cfa64863f5f43be8cb8538f389213bd158aa3d669efc45a9b1dc40af4d8ee33" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061017d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6100566100f8565b61005e6100f8565b7f6e5f343c04175c12df1e9a61d390c470482e461796e4140d225e764446dd162881527f83e008776c9fd05ee36693ac1b468bc120f983ad2ae77a9c34ba287dcf1bd8f660208201527f331ff6b1dbe2f3805ba133bf663247f196fece8f952a0d1de7a654769f52b49460408201527f5cfa64863f5f43be8cb8538f389213bd158aa3d669efc45a9b1dc40af4d8ee336060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561013e57815183526020928301929091019060010161011f565b5050509291505056fea2646970667358221220a9b38e7efd6180499612af6207adedf4e8be0ea4ed5a60cbf7b97bda2e53b90d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes32[4] memory) {\n bytes32[4] memory r;\n {\n bytes32 r_0 = bytes32(0x6e5f343c04175c12df1e9a61d390c470482e461796e4140d225e764446dd1628);\n r[0] = r_0;\n }\n {\n bytes32 r_1 = bytes32(0x83e008776c9fd05ee36693ac1b468bc120f983ad2ae77a9c34ba287dcf1bd8f6);\n r[1] = r_1;\n }\n {\n bytes32 r_2 = bytes32(0x331ff6b1dbe2f3805ba133bf663247f196fece8f952a0d1de7a654769f52b494);\n r[2] = r_2;\n }\n {\n bytes32 r_3 = bytes32(0x5cfa64863f5f43be8cb8538f389213bd158aa3d669efc45a9b1dc40af4d8ee33);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x6e5f343c04175c12df1e9a61d390c470482e461796e4140d225e764446dd162883e008776c9fd05ee36693ac1b468bc120f983ad2ae77a9c34ba287dcf1bd8f6331ff6b1dbe2f3805ba133bf663247f196fece8f952a0d1de7a654769f52b4945cfa64863f5f43be8cb8538f389213bd158aa3d669efc45a9b1dc40af4d8ee33" + }, + { + "name": "random-bytes4[2]", + "type": "bytes4[2]", + "value": ["0x3ec394ca", "0x8d6f99e7"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3ec394ca" + }, + { + "type": "hexstring", + "value": "0x8d6f99e7" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060fc8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190608d565b60405180910390f35b604d606f565b6053606f565b631f61ca6560e11b8152638d6f99e760e01b6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560bd5781516001600160e01b0319168352602092830192909101906001016096565b5050509291505056fea26469706673582212201c61f04256d485b509510c548e799532765eac2f647de139a3d78e220fe087be64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes4[2] memory) {\n bytes4[2] memory r;\n {\n bytes4 r_0 = bytes4(0x3ec394ca);\n r[0] = r_0;\n }\n {\n bytes4 r_1 = bytes4(0x8d6f99e7);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x3ec394ca000000000000000000000000000000000000000000000000000000008d6f99e700000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes4[4]", + "type": "bytes4[4]", + "value": ["0x4da36be5", "0x56f3b631", "0x521fae41", "0xf531a2cd"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x4da36be5" + }, + { + "type": "hexstring", + "value": "0x56f3b631" + }, + { + "type": "hexstring", + "value": "0x521fae41" + }, + { + "type": "hexstring", + "value": "0xf531a2cd" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610116806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060a7565b60405180910390f35b604d6089565b60536089565b634da36be560e01b81526356f3b63160e01b602082015263521fae4160e01b604082015263f531a2cd60e01b6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560d75781516001600160e01b03191683526020928301929091019060010160b0565b5050509291505056fea2646970667358221220b5157ec26d57d1f95d7f55cca63ae1fc4a8e237dc3849d98ec3bec706a877f5a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes4[4] memory) {\n bytes4[4] memory r;\n {\n bytes4 r_0 = bytes4(0x4da36be5);\n r[0] = r_0;\n }\n {\n bytes4 r_1 = bytes4(0x56f3b631);\n r[1] = r_1;\n }\n {\n bytes4 r_2 = bytes4(0x521fae41);\n r[2] = r_2;\n }\n {\n bytes4 r_3 = bytes4(0xf531a2cd);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x4da36be50000000000000000000000000000000000000000000000000000000056f3b63100000000000000000000000000000000000000000000000000000000521fae4100000000000000000000000000000000000000000000000000000000f531a2cd00000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes5[3]", + "type": "bytes5[3]", + "value": ["0x57488bb56a", "0x5cfee4f57a", "0x0f8ad162fd"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x57488bb56a" + }, + { + "type": "hexstring", + "value": "0x5cfee4f57a" + }, + { + "type": "hexstring", + "value": "0x0f8ad162fd" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061010c806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190609d565b60405180910390f35b604d607f565b6053607f565b642ba445dab560d91b8152642e7f727abd60d91b6020820152640f8ad162fd60d81b6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560cd5781516001600160d81b03191683526020928301929091019060010160a6565b5050509291505056fea2646970667358221220cd419492dc237170f250a857a183a462d6beddb33a96fce3b71479987c702bc964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes5[3] memory) {\n bytes5[3] memory r;\n {\n bytes5 r_0 = bytes5(0x57488bb56a);\n r[0] = r_0;\n }\n {\n bytes5 r_1 = bytes5(0x5cfee4f57a);\n r[1] = r_1;\n }\n {\n bytes5 r_2 = bytes5(0x0f8ad162fd);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x57488bb56a0000000000000000000000000000000000000000000000000000005cfee4f57a0000000000000000000000000000000000000000000000000000000f8ad162fd000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes6[]", + "type": "bytes6[]", + "value": ["0x7197b6cce7e5", "0xcbc9ad1b327b", "0x02d22903d0d9"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x7197b6cce7e5" + }, + { + "type": "hexstring", + "value": "0xcbc9ad1b327b" + }, + { + "type": "hexstring", + "value": "0x02d22903d0d9" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101c5806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061012b565b60405180910390f35b604080516003808252608082019092526060916000919060208201848036833750508151919250657197b6cce7e560d01b91829150839060009061009457610094610179565b6001600160d01b03199092166020928302919091019091015250805165cbc9ad1b327b60d01b908190839060019081106100d0576100d0610179565b6001600160d01b0319909216602092830291909101909101525080516502d22903d0d960d01b9081908390600290811061010c5761010c610179565b6001600160d01b03199092166020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561016d5783516001600160d01b03191683529284019291840191600101610147565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220ca309c0f11ddc39339b1042deb92be919b80e6f94746837c5c7878129fdda17564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes6[] memory) {\n bytes6[] memory r = new bytes6[](3);\n {\n bytes6 r_0 = bytes6(0x7197b6cce7e5);\n r[0] = r_0;\n }\n {\n bytes6 r_1 = bytes6(0xcbc9ad1b327b);\n r[1] = r_1;\n }\n {\n bytes6 r_2 = bytes6(0x02d22903d0d9);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000037197b6cce7e50000000000000000000000000000000000000000000000000000cbc9ad1b327b000000000000000000000000000000000000000000000000000002d22903d0d90000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes6[2]", + "type": "bytes6[2]", + "value": ["0x7274ede5329b", "0xdfc6308f61d2"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x7274ede5329b" + }, + { + "type": "hexstring", + "value": "0xdfc6308f61d2" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610100806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906091565b60405180910390f35b604d6073565b60536073565b657274ede5329b60d01b8152656fe31847b0e960d11b6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560c15781516001600160d01b031916835260209283019290910190600101609a565b5050509291505056fea26469706673582212209918f8667aa4b7ac9d1d71b19ba0508b18b2b464d0f63f31d1074090bbe53ef664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes6[2] memory) {\n bytes6[2] memory r;\n {\n bytes6 r_0 = bytes6(0x7274ede5329b);\n r[0] = r_0;\n }\n {\n bytes6 r_1 = bytes6(0xdfc6308f61d2);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x7274ede5329b0000000000000000000000000000000000000000000000000000dfc6308f61d20000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes7[]", + "type": "bytes7[]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060cf8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051600081526020810191829052604491604d565b60405180910390f35b6020808252825182820181905260009190848201906040850190845b81811015608d5783516001600160c81b031916835292840192918401916001016069565b5090969550505050505056fea2646970667358221220e928ad707514d3c2ad03406d6a4691ed023a6674dc9cbdffab538148fa406ad464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes7[] memory) {\n bytes7[] memory r = new bytes7[](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes7[1]", + "type": "bytes7[1]", + "value": ["0x9f0e628c453fbc"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x9f0e628c453fbc" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f38061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906083565b60405180910390f35b604d6065565b60536065565b6627c398a3114fef60ca1b8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560b35781516001600160c81b03191683529183019190830190600101608e565b505050509291505056fea26469706673582212206b3f537ba4c796ba5c44dfc7d3a942ce6b056db56e08678396924e678932d7a464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes7[1] memory) {\n bytes7[1] memory r;\n {\n bytes7 r_0 = bytes7(0x9f0e628c453fbc);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x9f0e628c453fbc00000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes7[2]", + "type": "bytes7[2]", + "value": ["0xd989692eb53cf3", "0xf6420dc6cf21ab"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xd989692eb53cf3" + }, + { + "type": "hexstring", + "value": "0xf6420dc6cf21ab" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610102806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906093565b60405180910390f35b604d6075565b60536075565b66d989692eb53cf360c81b815266f6420dc6cf21ab60c81b6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560c35781516001600160c81b031916835260209283019290910190600101609c565b5050509291505056fea2646970667358221220b298587be6b1c4cc276733e861c23a2857966c64024fc09fbc42d5f42c26c1f764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes7[2] memory) {\n bytes7[2] memory r;\n {\n bytes7 r_0 = bytes7(0xd989692eb53cf3);\n r[0] = r_0;\n }\n {\n bytes7 r_1 = bytes7(0xf6420dc6cf21ab);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0xd989692eb53cf300000000000000000000000000000000000000000000000000f6420dc6cf21ab00000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes7[3]", + "type": "bytes7[3]", + "value": ["0x666a6079467191", "0x067ffcebc2c14b", "0x91dc57ffc78208"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x666a6079467191" + }, + { + "type": "hexstring", + "value": "0x067ffcebc2c14b" + }, + { + "type": "hexstring", + "value": "0x91dc57ffc78208" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610112806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060a3565b60405180910390f35b604d6085565b60536085565b66666a607946719160c81b815266067ffcebc2c14b60c81b602082015266123b8afff8f04160cb1b6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560d35781516001600160c81b03191683526020928301929091019060010160ac565b5050509291505056fea2646970667358221220a2831c71e2abfd2f03131860fc10e87f4a4e73a98ef644daae27055c286ef89e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes7[3] memory) {\n bytes7[3] memory r;\n {\n bytes7 r_0 = bytes7(0x666a6079467191);\n r[0] = r_0;\n }\n {\n bytes7 r_1 = bytes7(0x067ffcebc2c14b);\n r[1] = r_1;\n }\n {\n bytes7 r_2 = bytes7(0x91dc57ffc78208);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x666a607946719100000000000000000000000000000000000000000000000000067ffcebc2c14b0000000000000000000000000000000000000000000000000091dc57ffc7820800000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes8[4]", + "type": "bytes8[4]", + "value": [ + "0x486e5adece6f656d", + "0xe39e5e7802489471", + "0x91633b477d608d30", + "0x7605b619d5b17a5a" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x486e5adece6f656d" + }, + { + "type": "hexstring", + "value": "0xe39e5e7802489471" + }, + { + "type": "hexstring", + "value": "0x91633b477d608d30" + }, + { + "type": "hexstring", + "value": "0x7605b619d5b17a5a" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610126806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060b7565b60405180910390f35b604d6099565b60536099565b67486e5adece6f656d60c01b815267e39e5e780248947160c01b602082015267091633b477d608d360c41b6040820152673b02db0cead8bd2d60c11b6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560e75781516001600160c01b03191683526020928301929091019060010160c0565b5050509291505056fea26469706673582212203b2d695afb612c69e3945ee81e38a80bbc31f8e445f413ae567a2685b939c0e164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes8[4] memory) {\n bytes8[4] memory r;\n {\n bytes8 r_0 = bytes8(0x486e5adece6f656d);\n r[0] = r_0;\n }\n {\n bytes8 r_1 = bytes8(0xe39e5e7802489471);\n r[1] = r_1;\n }\n {\n bytes8 r_2 = bytes8(0x91633b477d608d30);\n r[2] = r_2;\n }\n {\n bytes8 r_3 = bytes8(0x7605b619d5b17a5a);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x486e5adece6f656d000000000000000000000000000000000000000000000000e39e5e780248947100000000000000000000000000000000000000000000000091633b477d608d300000000000000000000000000000000000000000000000007605b619d5b17a5a000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes9[1]", + "type": "bytes9[1]", + "value": ["0xd182f9e84f4d89c32e"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xd182f9e84f4d89c32e" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f58061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906085565b60405180910390f35b604d6067565b60536067565b6868c17cf427a6c4e19760b91b8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560b55781516001600160b81b031916835291830191908301906001016090565b505050509291505056fea264697066735822122067fc08f9f508eae4073f626ad544a777d36af7156fc4d962068e4cfa1ce8db0164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes9[1] memory) {\n bytes9[1] memory r;\n {\n bytes9 r_0 = bytes9(0xd182f9e84f4d89c32e);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0xd182f9e84f4d89c32e0000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes9[3]", + "type": "bytes9[3]", + "value": ["0x8f6b37f2bae137fb84", "0xdd3b95290db4ece7f5", "0x9e2fc7acb87d7193ab"], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8f6b37f2bae137fb84" + }, + { + "type": "hexstring", + "value": "0xdd3b95290db4ece7f5" + }, + { + "type": "hexstring", + "value": "0x9e2fc7acb87d7193ab" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610118806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060a9565b60405180910390f35b604d608b565b6053608b565b6823dacdfcaeb84dfee160ba1b815268dd3b95290db4ece7f560b81b6020820152689e2fc7acb87d7193ab60b81b6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560d95781516001600160b81b03191683526020928301929091019060010160b2565b5050509291505056fea2646970667358221220aae38e140bd9fa1987e637481ed5320d7274c8979c422ab1ddc2b1ebc038c8c864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes9[3] memory) {\n bytes9[3] memory r;\n {\n bytes9 r_0 = bytes9(0x8f6b37f2bae137fb84);\n r[0] = r_0;\n }\n {\n bytes9 r_1 = bytes9(0xdd3b95290db4ece7f5);\n r[1] = r_1;\n }\n {\n bytes9 r_2 = bytes9(0x9e2fc7acb87d7193ab);\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x8f6b37f2bae137fb840000000000000000000000000000000000000000000000dd3b95290db4ece7f500000000000000000000000000000000000000000000009e2fc7acb87d7193ab0000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes9[4]", + "type": "bytes9[4]", + "value": [ + "0x81e65ea2ccf00975f3", + "0xfb8e49508a720fd7bd", + "0xdf0b13ed9e2f315a36", + "0x7c3a21d5b1b4a71099" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x81e65ea2ccf00975f3" + }, + { + "type": "hexstring", + "value": "0xfb8e49508a720fd7bd" + }, + { + "type": "hexstring", + "value": "0xdf0b13ed9e2f315a36" + }, + { + "type": "hexstring", + "value": "0x7c3a21d5b1b4a71099" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061012a806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060bb565b60405180910390f35b604d609d565b6053609d565b6881e65ea2ccf00975f360b81b815268fb8e49508a720fd7bd60b81b6020820152686f8589f6cf1798ad1b60b91b6040820152687c3a21d5b1b4a7109960b81b6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560eb5781516001600160b81b03191683526020928301929091019060010160c4565b5050509291505056fea2646970667358221220e4c694cc142b8a9fd19386596e52b938c263833f19a2338a209e79469715259664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes9[4] memory) {\n bytes9[4] memory r;\n {\n bytes9 r_0 = bytes9(0x81e65ea2ccf00975f3);\n r[0] = r_0;\n }\n {\n bytes9 r_1 = bytes9(0xfb8e49508a720fd7bd);\n r[1] = r_1;\n }\n {\n bytes9 r_2 = bytes9(0xdf0b13ed9e2f315a36);\n r[2] = r_2;\n }\n {\n bytes9 r_3 = bytes9(0x7c3a21d5b1b4a71099);\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x81e65ea2ccf00975f30000000000000000000000000000000000000000000000fb8e49508a720fd7bd0000000000000000000000000000000000000000000000df0b13ed9e2f315a3600000000000000000000000000000000000000000000007c3a21d5b1b4a710990000000000000000000000000000000000000000000000" + }, + { + "name": "random-int[3]", + "type": "int[3]", + "value": [ + "22144625395505013793541396894978047301879552760557550459710097639205924396256", + "49014605461735350270020130074585700878308928893996551478136032661948578830694", + "15439996497944648374711822534969745767433790445362253538804586678498669515301" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "22144625395505013793541396894978047301879552760557550459710097639205924396256" + }, + { + "type": "number", + "value": "49014605461735350270020130074585700878308928893996551478136032661948578830694" + }, + { + "type": "number", + "value": "15439996497944648374711822534969745767433790445362253538804586678498669515301" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610157806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f0565b60405180910390f35b6100566100d2565b61005e6100d2565b7f30f569ef377da0d933b91d3518fe5e9e8ba10a184b91e2ce3f660ada3f7e5ce081527f6c5d48988598a477e664f50ae5279d0e85357f1f31c63ed8129099d28596996660208201527f2222ba73c48707167f1032c7f300b25c2a487b0b60956ab060d400a175de52256040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b60038110156101185781518352602092830192909101906001016100f9565b5050509291505056fea26469706673582212209fe5ab03cafe560813eda95175b2ad46f5abdead33811be7e4dfa84eadc8b0ea64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int256[3] memory) {\n int256[3] memory r;\n {\n int r_0 = 22144625395505013793541396894978047301879552760557550459710097639205924396256;\n r[0] = r_0;\n }\n {\n int r_1 = 49014605461735350270020130074585700878308928893996551478136032661948578830694;\n r[1] = r_1;\n }\n {\n int r_2 = 15439996497944648374711822534969745767433790445362253538804586678498669515301;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x30f569ef377da0d933b91d3518fe5e9e8ba10a184b91e2ce3f660ada3f7e5ce06c5d48988598a477e664f50ae5279d0e85357f1f31c63ed8129099d2859699662222ba73c48707167f1032c7f300b25c2a487b0b60956ab060d400a175de5225" + }, + { + "name": "random-int[4]", + "type": "int[4]", + "value": [ + "22115410909759580085104079082225199329279726707485709440101928788077317511080", + "36575820230254794295788427167637331362124264730907246248141762607092728898208", + "-16891896991555597872494739292669827698535305080530618674883531362911444584683", + "-2212994672247913932937484210823721111071782082375936284734565203577609838330" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "22115410909759580085104079082225199329279726707485709440101928788077317511080" + }, + { + "type": "number", + "value": "36575820230254794295788427167637331362124264730907246248141762607092728898208" + }, + { + "type": "number", + "value": "-16891896991555597872494739292669827698535305080530618674883531362911444584683" + }, + { + "type": "number", + "value": "-2212994672247913932937484210823721111071782082375936284734565203577609838330" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061017d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6100566100f8565b61005e6100f8565b7f30e4e105b6effbcc13886528530150475aa587575dadd60cb613978ab694d7a881527f50dd2e3da51dbcad87507fd2b61d65507240e019f64ce9f41a2c28ec4c60a2a060208201527fdaa7866dd249a5be44e3a8bd8e30482b0b1bc25e4593f3ce29af9453d75b371560408201527ffb1b7d4980aa182a5794646a34a55a24f246919b21a859ba5d66d129509121066060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561013e57815183526020928301929091019060010161011f565b5050509291505056fea26469706673582212204d846467a1f7f1052aae87300612bb7c9916fd62869aacdbd563a5180dc136d164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int256[4] memory) {\n int256[4] memory r;\n {\n int r_0 = 22115410909759580085104079082225199329279726707485709440101928788077317511080;\n r[0] = r_0;\n }\n {\n int r_1 = 36575820230254794295788427167637331362124264730907246248141762607092728898208;\n r[1] = r_1;\n }\n {\n int r_2 = -16891896991555597872494739292669827698535305080530618674883531362911444584683;\n r[2] = r_2;\n }\n {\n int r_3 = -2212994672247913932937484210823721111071782082375936284734565203577609838330;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x30e4e105b6effbcc13886528530150475aa587575dadd60cb613978ab694d7a850dd2e3da51dbcad87507fd2b61d65507240e019f64ce9f41a2c28ec4c60a2a0daa7866dd249a5be44e3a8bd8e30482b0b1bc25e4593f3ce29af9453d75b3715fb1b7d4980aa182a5794646a34a55a24f246919b21a859ba5d66d12950912106" + }, + { + "name": "random-int104[3]", + "type": "int104[3]", + "value": [ + "-4392404333541126996754862375651", + "1276343317130725175336123244656", + "329507068878279521281566513055" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-4392404333541126996754862375651" + }, + { + "type": "number", + "value": "1276343317130725175336123244656" + }, + { + "type": "number", + "value": "329507068878279521281566513055" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610115806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060ad565b60405180910390f35b604d608f565b6053608f565b6c37709fb50b006fced9d5a702e21981526c101c167267863d0e570968207060208201526c0428b1dbec5baa7cbb2567179f6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560d6578151600c0b83526020928301929091019060010160b6565b5050509291505056fea2646970667358221220a34ad056e18f420e5b87b67041c8b37d42fa71e0ad760f21762825c14e4761af64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int104[3] memory) {\n int104[3] memory r;\n {\n int104 r_0 = -4392404333541126996754862375651;\n r[0] = r_0;\n }\n {\n int104 r_1 = 1276343317130725175336123244656;\n r[1] = r_1;\n }\n {\n int104 r_2 = 329507068878279521281566513055;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffc88f604af4ff9031262a58fd1d00000000000000000000000000000000000000101c167267863d0e5709682070000000000000000000000000000000000000000428b1dbec5baa7cbb2567179f" + }, + { + "name": "random-int104[4]", + "type": "int104[4]", + "value": [ + "-1022390973953137416083317423317", + "-3863429289288940909077071701129", + "1004267059749980467718562858009", + "-7207195653516959481360323208786" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-1022390973953137416083317423317" + }, + { + "type": "number", + "value": "-3863429289288940909077071701129" + }, + { + "type": "number", + "value": "1004267059749980467718562858009" + }, + { + "type": "number", + "value": "-7207195653516959481360323208786" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061012a806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060c2565b60405180910390f35b604d60a4565b605360a4565b6c0ce785fdfa7a65f435dff37cd41981526c30c369ce5a8f55ff9650eca4881960208201526c0cacf63ddcd3f39521d821441960408201526c5af7b483f58f0192b5f15c6651196060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560eb578151600c0b83526020928301929091019060010160cb565b5050509291505056fea2646970667358221220771f31e6758853d057f135776f32c7c3409a4406e754726298d13b141943caa964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int104[4] memory) {\n int104[4] memory r;\n {\n int104 r_0 = -1022390973953137416083317423317;\n r[0] = r_0;\n }\n {\n int104 r_1 = -3863429289288940909077071701129;\n r[1] = r_1;\n }\n {\n int104 r_2 = 1004267059749980467718562858009;\n r[2] = r_2;\n }\n {\n int104 r_3 = -7207195653516959481360323208786;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xfffffffffffffffffffffffffffffffffffffff3187a0205859a0bca200c832bffffffffffffffffffffffffffffffffffffffcf3c9631a570aa0069af135b77000000000000000000000000000000000000000cacf63ddcd3f39521d8214419ffffffffffffffffffffffffffffffffffffffa5084b7c0a70fe6d4a0ea399ae" + }, + { + "name": "random-int112[2]", + "type": "int112[2]", + "value": ["-991505693955903070478668572230749", "-1255325926135171633312161897854142"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-991505693955903070478668572230749" + }, + { + "type": "number", + "value": "-1255325926135171633312161897854142" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610105806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190609d565b60405180910390f35b604d607f565b6053607f565b6d30e28faf46b8e3bcce0af219845c1981526d3de470d488c08c350fa6260734bd196020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560c6578151600d0b83526020928301929091019060010160a6565b5050509291505056fea2646970667358221220ff3557c2319676541418c41d1b56f860c6e524f45ac8c45c79dc1304b286452b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int112[2] memory) {\n int112[2] memory r;\n {\n int112 r_0 = -991505693955903070478668572230749;\n r[0] = r_0;\n }\n {\n int112 r_1 = -1255325926135171633312161897854142;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffcf1d7050b9471c4331f50de67ba3ffffffffffffffffffffffffffffffffffffc21b8f2b773f73caf059d9f8cb42" + }, + { + "name": "random-int112[3]", + "type": "int112[3]", + "value": [ + "-515711449908318443167747691738998", + "-2280923904542902437331218990714964", + "1859805603342006369285760067480217" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-515711449908318443167747691738998" + }, + { + "type": "number", + "value": "-2280923904542902437331218990714964" + }, + { + "type": "number", + "value": "1859805603342006369285760067480217" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610119806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060b1565b60405180910390f35b604d6093565b60536093565b6d196d3191092869a1f3e1f7cb77751981526d70754ea08bf0b53c4d5d563950531960208201526d5bb20c0233b5e1ae054d0e86aa996040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560da578151600d0b83526020928301929091019060010160ba565b5050509291505056fea26469706673582212202ec37558b703118d2fd6355ac70f17229b25bb41f3fcac8e073908ec259fb4f164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int112[3] memory) {\n int112[3] memory r;\n {\n int112 r_0 = -515711449908318443167747691738998;\n r[0] = r_0;\n }\n {\n int112 r_1 = -2280923904542902437331218990714964;\n r[1] = r_1;\n }\n {\n int112 r_2 = 1859805603342006369285760067480217;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffe692ce6ef6d7965e0c1e0834888affffffffffffffffffffffffffffffffffff8f8ab15f740f4ac3b2a2a9c6afac0000000000000000000000000000000000005bb20c0233b5e1ae054d0e86aa99" + }, + { + "name": "random-int120[]", + "type": "int120[]", + "value": ["499139571212881801404201224564574837", "-109537623894795105211341028131233854"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "499139571212881801404201224564574837" + }, + { + "type": "number", + "value": "-109537623894795105211341028131233854" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610185806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f2565b60405180910390f35b6040805160028082526060808301845292600092919060208301908036833701905050905060006e60217b1a8953bfec781042b8770a759050808260008151811061009b5761009b610139565b6020026020010190600e0b9081600e0b815250505060006e15189f2faee657bb9af868b51e603d19905080826001815181106100d9576100d9610139565b600e9290920b6020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561012d578351600e0b8352928401929184019160010161010e565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220075428fd27a27e4eae74f9a065a2b786145f106f8bc7478430875219800e4dc564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int120[] memory) {\n int120[] memory r = new int120[](2);\n {\n int120 r_0 = 499139571212881801404201224564574837;\n r[0] = r_0;\n }\n {\n int120 r_1 = -109537623894795105211341028131233854;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000060217b1a8953bfec781042b8770a75ffffffffffffffffffffffffffffffffffeae760d05119a8446507974ae19fc2" + }, + { + "name": "random-int120[1]", + "type": "int120[1]", + "value": ["71379271352118334705321841238096803"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "71379271352118334705321841238096803" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f18061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906088565b60405180910390f35b604d606a565b6053606a565b6e0dbf4510d8a24f66bc46dd018a3ba38152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560b1578151600e0b835291830191908301906001016093565b505050509291505056fea264697066735822122013a008b4e0a37056d300d91d96aa635a1776690680fc6163935e1349abb3756564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int120[1] memory) {\n int120[1] memory r;\n {\n int120 r_0 = 71379271352118334705321841238096803;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000dbf4510d8a24f66bc46dd018a3ba3" + }, + { + "name": "random-int128[]", + "type": "int128[]", + "value": ["76013687021938279277652178695822512301"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "76013687021938279277652178695822512301" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610149806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100b6565b60405180910390f35b604080516001808252818301909252606091600091906020808301908036833701905050905060006f392fb41f40c5092edbe3c7adf82810ad9050808260008151811061009d5761009d6100fd565b600f9290920b6020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b818110156100f1578351600f0b835292840192918401916001016100d2565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212200f158d259934b30209a9f4708392adb106347c4bf4712042243faaa044cdd38b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int128[] memory) {\n int128[] memory r = new int128[](1);\n {\n int128 r_0 = 76013687021938279277652178695822512301;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000392fb41f40c5092edbe3c7adf82810ad" + }, + { + "name": "random-int128[3]", + "type": "int128[3]", + "value": [ + "-111052980438692015425520680371767947327", + "-36391923766136812611665103531350592661", + "-32019184073189540085954222397930863201" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-111052980438692015425520680371767947327" + }, + { + "type": "number", + "value": "-36391923766136812611665103531350592661" + }, + { + "type": "number", + "value": "-32019184073189540085954222397930863201" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610120806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060b8565b60405180910390f35b604d609a565b6053609a565b6f538c06aad25ca94ece86e8242d23303e1981526f1b60d45ecc58226fa988f5206c2e8c941960208201526f1816aba884c5124c7c3fcc294c17fa60196040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560e1578151600f0b83526020928301929091019060010160c1565b5050509291505056fea26469706673582212207c94283a92addadf1d436447e63bc06e8e056f34c1a66ed7896dc6ad8a246c7364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int128[3] memory) {\n int128[3] memory r;\n {\n int128 r_0 = -111052980438692015425520680371767947327;\n r[0] = r_0;\n }\n {\n int128 r_1 = -36391923766136812611665103531350592661;\n r[1] = r_1;\n }\n {\n int128 r_2 = -32019184073189540085954222397930863201;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffac73f9552da356b1317917dbd2dccfc1ffffffffffffffffffffffffffffffffe49f2ba133a7dd9056770adf93d1736bffffffffffffffffffffffffffffffffe7e954577b3aedb383c033d6b3e8059f" + }, + { + "name": "random-int136[]", + "type": "int136[]", + "value": ["-37786573113935191847829374617629955040575"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-37786573113935191847829374617629955040575" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061014b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100b8565b60405180910390f35b60408051600180825281830190925260609160009190602080830190803683370190505090506000706f0b7543fdbde6643ec8316b574145a53e199050808260008151811061009f5761009f6100ff565b60109290920b6020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b818110156100f357835160100b835292840192918401916001016100d4565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212201fa41c46cd08de184e2c359a592976ebada3110cd1537655406dab8c6dba3dba64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int136[] memory) {\n int136[] memory r = new int136[](1);\n {\n int136 r_0 = -37786573113935191847829374617629955040575;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffff90f48abc0242199bc137ce94a8beba5ac1" + }, + { + "name": "random-int144[2]", + "type": "int144[2]", + "value": [ + "10228831767922725328325434942903101800226588", + "-9289461418414449821042561395993229474314428" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "10228831767922725328325434942903101800226588" + }, + { + "type": "number", + "value": "-9289461418414449821042561395993229474314428" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061010c806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060a4565b60405180910390f35b604d6086565b60536086565b71756bd5bbcb4f6b1b0ea74334daa951129f1c8152716aa346074ba16521a58cacfa5e4695aab8bb196020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560cd57815160110b83526020928301929091019060010160ad565b5050509291505056fea2646970667358221220ed3872ec08f05f330021f3e1afca0df614b13bb750ac9a20cc92538fac17cc0c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int144[2] memory) {\n int144[2] memory r;\n {\n int144 r_0 = 10228831767922725328325434942903101800226588;\n r[0] = r_0;\n }\n {\n int144 r_1 = -9289461418414449821042561395993229474314428;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000756bd5bbcb4f6b1b0ea74334daa951129f1cffffffffffffffffffffffffffff955cb9f8b45e9ade5a735305a1b96a554744" + }, + { + "name": "random-int152[4]", + "type": "int152[4]", + "value": [ + "-532535090558519196908268272401827423517831540", + "-1362488549081163538267883054245149263116906399", + "1906213382878233652600892318812750557158077901", + "244300831221418700930972831079965374758759844" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-532535090558519196908268272401827423517831540" + }, + { + "type": "number", + "value": "-1362488549081163538267883054245149263116906399" + }, + { + "type": "number", + "value": "1906213382878233652600892318812750557158077901" + }, + { + "type": "number", + "value": "244300831221418700930972831079965374758759844" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061014e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e4565b60405180910390f35b6100566100c6565b61005e6100c6565b7217e133f9f65caf370f57c18346ee3cfd8a7173198152723d1899fb34035a42e9c9ba3d866cd025002f9e19602082015272557a41a857b0290b3b503a84d971e1762075cd6040820152720af46f9e14cd5fac53dc574d70256713efada46060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561010f57815160120b8352602092830192909101906001016100ed565b5050509291505056fea2646970667358221220c1abe9ec885ab5ab8215eb305b0bd3b05da11f27794769c129954fedfa1d972b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int152[4] memory) {\n int152[4] memory r;\n {\n int152 r_0 = -532535090558519196908268272401827423517831540;\n r[0] = r_0;\n }\n {\n int152 r_1 = -1362488549081163538267883054245149263116906399;\n r[1] = r_1;\n }\n {\n int152 r_2 = 1906213382878233652600892318812750557158077901;\n r[2] = r_2;\n }\n {\n int152 r_3 = 244300831221418700930972831079965374758759844;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffe81ecc0609a350c8f0a83e7cb911c302758e8cffffffffffffffffffffffffffc2e76604cbfca5bd163645c279932fdaffd06100000000000000000000000000557a41a857b0290b3b503a84d971e1762075cd000000000000000000000000000af46f9e14cd5fac53dc574d70256713efada4" + }, + { + "name": "random-int160[1]", + "type": "int160[1]", + "value": ["-369495913871310093011061926405701053430107904573"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-369495913871310093011061926405701053430107904573" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190608e565b60405180910390f35b604d6070565b60536070565b7340b8c51284e45048679c08be7c856db70b1a9a3c198152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560b757815160130b835291830191908301906001016099565b505050509291505056fea2646970667358221220ef07e7018ac142b5092b1cf48dad4cc2a0ec570ed81a9069533e77549394a62064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int160[1] memory) {\n int160[1] memory r;\n {\n int160 r_0 = -369495913871310093011061926405701053430107904573;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffbf473aed7b1bafb79863f741837a9248f4e565c3" + }, + { + "name": "random-int160[4]", + "type": "int160[4]", + "value": [ + "-595643760054306201255511195126915038349890371626", + "-635078449678107178911164267061727239219761697882", + "165975116388838444963924953270140526484484731738", + "628264277317637269731839202180811888575278321788" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-595643760054306201255511195126915038349890371626" + }, + { + "type": "number", + "value": "-635078449678107178911164267061727239219761697882" + }, + { + "type": "number", + "value": "165975116388838444963924953270140526484484731738" + }, + { + "type": "number", + "value": "628264277317637269731839202180811888575278321788" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610152806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e8565b60405180910390f35b6100566100ca565b61005e6100ca565b73685597079daf665dc829240c29e277eca72b4029198152736f3de710d060e4695948e52765d7e04cf054d459196020820152731d1294e53afa0ffb834a864e98eb4d3cf657335a6040820152736e0c5834069c683449f2ad8282737fdb4a39907c6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561011357815160130b8352602092830192909101906001016100f1565b5050509291505056fea2646970667358221220729e622b65b68d791a1f619884c31c3b59fdad78ac834af774fd797c26e7fc3a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int160[4] memory) {\n int160[4] memory r;\n {\n int160 r_0 = -595643760054306201255511195126915038349890371626;\n r[0] = r_0;\n }\n {\n int160 r_1 = -635078449678107178911164267061727239219761697882;\n r[1] = r_1;\n }\n {\n int160 r_2 = 165975116388838444963924953270140526484484731738;\n r[2] = r_2;\n }\n {\n int160 r_3 = 628264277317637269731839202180811888575278321788;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffff97aa68f8625099a237d6dbf3d61d881358d4bfd6ffffffffffffffffffffffff90c218ef2f9f1b96a6b71ad89a281fb30fab2ba60000000000000000000000001d1294e53afa0ffb834a864e98eb4d3cf657335a0000000000000000000000006e0c5834069c683449f2ad8282737fdb4a39907c" + }, + { + "name": "random-int176[3]", + "type": "int176[3]", + "value": [ + "-27072068939178901942223598355707164813761345429422083", + "-44851613884489251270184513472533272307604548137023684", + "6043042904751976500379190041169788286659779429570608" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-27072068939178901942223598355707164813761345429422083" + }, + { + "type": "number", + "value": "-44851613884489251270184513472533272307604548137023684" + }, + { + "type": "number", + "value": "6043042904751976500379190041169788286659779429570608" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610131806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060c9565b60405180910390f35b604d60ab565b605360ab565b75485b76142d9acadd5277954d9da5002bc224d933c0021981527577e0b8351516f92916ae05a364ce08fc34d70c6078c3196020820152751026d157c0bda356f43a1a92faa5327e1b43e4ba98306040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560f257815160150b83526020928301929091019060010160d2565b5050509291505056fea2646970667358221220ecec22c79630fe607da88f5d2d46207422547ecce7d987a013a825a76745c99b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int176[3] memory) {\n int176[3] memory r;\n {\n int176 r_0 = -27072068939178901942223598355707164813761345429422083;\n r[0] = r_0;\n }\n {\n int176 r_1 = -44851613884489251270184513472533272307604548137023684;\n r[1] = r_1;\n }\n {\n int176 r_2 = 6043042904751976500379190041169788286659779429570608;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffb7a489ebd2653522ad886ab2625affd43ddb26cc3ffdffffffffffffffffffff881f47caeae906d6e951fa5c9b31f703cb28f39f873c000000000000000000001026d157c0bda356f43a1a92faa5327e1b43e4ba9830" + }, + { + "name": "random-int184[]", + "type": "int184[]", + "value": [ + "4288908368240905706184088085997272968680665913128713874", + "-7224744918125311939051838438493611760563990947872037124", + "6289497421974135115545001492409769632399218313501892131" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "4288908368240905706184088085997272968680665913128713874" + }, + { + "type": "number", + "value": "-7224744918125311939051838438493611760563990947872037124" + }, + { + "type": "number", + "value": "6289497421974135115545001492409769632399218313501892131" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101db806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610148565b60405180910390f35b60408051600380825260808201909252606091600091906020820184803683370190505090506000762cc73e30c17781ad23825287d62c3ba39ac99b33e0fe92905080826000815181106100a4576100a461018f565b602002602001019060160b908160160b81525050506000764b6e0b12dd0a73ad4c4606148b3a2002426e322e32d90319905080826001815181106100ea576100ea61018f565b602002602001019060160b908160160b815250505060007641aa58c4d9312a170227975ebbe2644d489e703a9c5e239050808260028151811061012f5761012f61018f565b60169290920b6020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561018357835160160b83529284019291840191600101610164565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212207fe73207ba239c32dd39a833707616e6cbd25ce3988c9875afb848adf4b4860f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int184[] memory) {\n int184[] memory r = new int184[](3);\n {\n int184 r_0 = 4288908368240905706184088085997272968680665913128713874;\n r[0] = r_0;\n }\n {\n int184 r_1 = -7224744918125311939051838438493611760563990947872037124;\n r[1] = r_1;\n }\n {\n int184 r_2 = 6289497421974135115545001492409769632399218313501892131;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000002cc73e30c17781ad23825287d62c3ba39ac99b33e0fe92ffffffffffffffffffb491f4ed22f58c52b3b9f9eb74c5dffdbd91cdd1cd26fc00000000000000000041aa58c4d9312a170227975ebbe2644d489e703a9c5e23" + }, + { + "name": "random-int184[3]", + "type": "int184[3]", + "value": [ + "-1329367283968674148279988976824309169777592873932802198", + "-10829604536594459505086921907168525069291988896084773858", + "7037143502437275783398808310608205556502173056158645229" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-1329367283968674148279988976824309169777592873932802198" + }, + { + "type": "number", + "value": "-10829604536594459505086921907168525069291988896084773858" + }, + { + "type": "number", + "value": "7037143502437275783398808310608205556502173056158645229" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610134806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060cc565b60405180910390f35b604d60ae565b605360ae565b760de11601b1910c5f9e58304e8dbd928a68905046c7c895198152767110fc1dcbff15ca60efce7efdfe54325a36782991cbe1196020820152764978a0f9e65be8443bbed1e31ca8021367ddd4076bbbed6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560f557815160160b83526020928301929091019060010160d5565b5050509291505056fea2646970667358221220fb2a27f4dcaadf65a2fcdbbabe34c6e6fc2cb1f13ee6d53525a68c3f2ac0359b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int184[3] memory) {\n int184[3] memory r;\n {\n int184 r_0 = -1329367283968674148279988976824309169777592873932802198;\n r[0] = r_0;\n }\n {\n int184 r_1 = -10829604536594459505086921907168525069291988896084773858;\n r[1] = r_1;\n }\n {\n int184 r_2 = 7037143502437275783398808310608205556502173056158645229;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xfffffffffffffffffff21ee9fe4e6ef3a061a7cfb172426d75976fafb938376affffffffffffffffff8eef03e23400ea359f1031810201abcda5c987d66e341e0000000000000000004978a0f9e65be8443bbed1e31ca8021367ddd4076bbbed" + }, + { + "name": "random-int192[1]", + "type": "int192[1]", + "value": ["2139755522748263143499509785067228362564976441816238653731"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "2139755522748263143499509785067228362564976441816238653731" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060fa8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906091565b60405180910390f35b604d6073565b60536073565b775744170ca735fe8ce659da9805882b09e317fdb6834e01238152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560ba57815160170b83529183019190830190600101609c565b505050509291505056fea2646970667358221220cb982705624c64803b5050a58db1109965e0fc804d1c4141a6456a0cc573c24a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int192[1] memory) {\n int192[1] memory r;\n {\n int192 r_0 = 2139755522748263143499509785067228362564976441816238653731;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000005744170ca735fe8ce659da9805882b09e317fdb6834e0123" + }, + { + "name": "random-int192[3]", + "type": "int192[3]", + "value": [ + "1349893563972628379154175096768441987638528868230699849639", + "-294831557373083693818876973195304684204895676910348722128", + "-2457640737022538904291770024954844353798385341927146206132" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "1349893563972628379154175096768441987638528868230699849639" + }, + { + "type": "number", + "value": "-294831557373083693818876973195304684204895676910348722128" + }, + { + "type": "number", + "value": "-2457640737022538904291770024954844353798385341927146206132" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610144806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100da565b60405180910390f35b6100566100bc565b61005e6100bc565b77370d8be152998c28b7fca126a4bf6ea4d0aff75766f297a78152770c062f61c8acaf20dc3524edce02823a03e34100ea0adfcf19602082015277643af76e977973a2727b8557e293c77fc051f3ee0cf533b3196040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101561010557815160170b8352602092830192909101906001016100e3565b5050509291505056fea26469706673582212200390cc300bf38cfa47e5f3141a09511bc67606fea8a2763e8eb13d3da12afce364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int192[3] memory) {\n int192[3] memory r;\n {\n int192 r_0 = 1349893563972628379154175096768441987638528868230699849639;\n r[0] = r_0;\n }\n {\n int192 r_1 = -294831557373083693818876973195304684204895676910348722128;\n r[1] = r_1;\n }\n {\n int192 r_2 = -2457640737022538904291770024954844353798385341927146206132;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000370d8be152998c28b7fca126a4bf6ea4d0aff75766f297a7fffffffffffffffff3f9d09e375350df23cadb1231fd7dc5fc1cbeff15f52030ffffffffffffffff9bc5089168868c5d8d847aa81d6c38803fae0c11f30acc4c" + }, + { + "name": "random-int200[4]", + "type": "int200[4]", + "value": [ + "720519778899839719257571589218860210909623500682669327361422", + "-538868171941289105062938874616627994841956081072026003765132", + "295892697730746539477248715216096675394288797910623567144313", + "-292141090040255933516891208708719174858529460288785299591997" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "720519778899839719257571589218860210909623500682669327361422" + }, + { + "type": "number", + "value": "-538868171941289105062938874616627994841956081072026003765132" + }, + { + "type": "number", + "value": "295892697730746539477248715216096675394288797910623567144313" + }, + { + "type": "number", + "value": "-292141090040255933516891208708719174858529460288785299591997" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610166806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100fc565b60405180910390f35b6100566100de565b61005e6100de565b7872c9117df788443dfc7d563f196bd2a08f805dc13df6efa58e81527855d8be395b483cdfe047debcc7e8226cb6d6ef27c6ce3cf78b196020820152782f236fe877fdcd24adcccf3c529444bb2ee82dbc1b85fae5796040820152782e8a6f4bd3d49807ece249a7f74c045544cf56ebdb35c4d33c196060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561012757815160180b835260209283019290910190600101610105565b5050509291505056fea2646970667358221220a4fdcf2707e88c651c13397a8498deca3445bd10442fe590070d455720c288e464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int200[4] memory) {\n int200[4] memory r;\n {\n int200 r_0 = 720519778899839719257571589218860210909623500682669327361422;\n r[0] = r_0;\n }\n {\n int200 r_1 = -538868171941289105062938874616627994841956081072026003765132;\n r[1] = r_1;\n }\n {\n int200 r_2 = 295892697730746539477248715216096675394288797910623567144313;\n r[2] = r_2;\n }\n {\n int200 r_3 = -292141090040255933516891208708719174858529460288785299591997;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000072c9117df788443dfc7d563f196bd2a08f805dc13df6efa58effffffffffffffaa2741c6a4b7c3201fb821433817dd93492910d83931c30874000000000000002f236fe877fdcd24adcccf3c529444bb2ee82dbc1b85fae579ffffffffffffffd17590b42c2b67f8131db65808b3fbaabb30a91424ca3b2cc3" + }, + { + "name": "random-int208[]", + "type": "int208[]", + "value": [ + "-79117493776345339643394044646685661621667044493369933055218528", + "86286276878861317012860102046047436866239060145386197552584259" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-79117493776345339643394044646685661621667044493369933055218528" + }, + { + "type": "number", + "value": "86286276878861317012860102046047436866239060145386197552584259" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061019b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610108565b60405180910390f35b60408051600280825260608083018452926000929190602083019080368337019050509050600079313c24d9045ad09204f55d8bfa7dda5ec228a1ef8b3eb7ad535f19905080826000815181106100a7576100a761014f565b602002602001019060190b908160190b815250505060007935b2326cdf108faa1b64063adad9266f905c15ce0593892dd643905080826001815181106100ef576100ef61014f565b60199290920b6020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561014357835160190b83529284019291840191600101610124565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220b39d2de21701188d3a3e19a7e1d946bec8d6c05fc52b8b642803db3339dc00e464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int208[] memory) {\n int208[] memory r = new int208[](2);\n {\n int208 r_0 = -79117493776345339643394044646685661621667044493369933055218528;\n r[0] = r_0;\n }\n {\n int208 r_1 = 86286276878861317012860102046047436866239060145386197552584259;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002ffffffffffffcec3db26fba52f6dfb0aa274058225a13dd75e1074c14852aca000000000000035b2326cdf108faa1b64063adad9266f905c15ce0593892dd643" + }, + { + "name": "random-int208[3]", + "type": "int208[3]", + "value": [ + "-11173925404418682113032899089051422520091714612439825509533823", + "202565537407802568275133150254744755339063596153191453137442145", + "143631348028602688560257590284969222859622868780114362833859941" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-11173925404418682113032899089051422520091714612439825509533823" + }, + { + "type": "number", + "value": "202565537407802568275133150254744755339063596153191453137442145" + }, + { + "type": "number", + "value": "143631348028602688560257590284969222859622868780114362833859941" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610149806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100df565b60405180910390f35b6100566100c1565b61005e6100c1565b7906f41be8962206f8e950928676f93a23a42d985e2597fd94487e198152797e0e8d4a186f6c223e334af2b28f54dcd8f555ecc3a68c1215616020820152795961cb3b41d1cc29c480171deac8aa7de43a7584c4185bb475656040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101561010a57815160190b8352602092830192909101906001016100e8565b5050509291505056fea26469706673582212204f90c536fa8d4486816e3f40a1b795627d250e7bdecdf4d6653aff70362272f764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int208[3] memory) {\n int208[3] memory r;\n {\n int208 r_0 = -11173925404418682113032899089051422520091714612439825509533823;\n r[0] = r_0;\n }\n {\n int208 r_1 = 202565537407802568275133150254744755339063596153191453137442145;\n r[1] = r_1;\n }\n {\n int208 r_2 = 143631348028602688560257590284969222859622868780114362833859941;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xfffffffffffff90be41769ddf90716af6d798906c5dc5bd267a1da68026bb7810000000000007e0e8d4a186f6c223e334af2b28f54dcd8f555ecc3a68c1215610000000000005961cb3b41d1cc29c480171deac8aa7de43a7584c4185bb47565" + }, + { + "name": "random-int216[4]", + "type": "int216[4]", + "value": [ + "-24744684379905702942242365575982555093675157103044517078966399817", + "-4273212784758401169633837122243642328598696859017011675018459236", + "-22436338855518752095792060050846905709961870058688459768008514584", + "39536028154114218138765180149867498600107847851202444296864662884" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-24744684379905702942242365575982555093675157103044517078966399817" + }, + { + "type": "number", + "value": "-4273212784758401169633837122243642328598696859017011675018459236" + }, + { + "type": "number", + "value": "-22436338855518752095792060050846905709961870058688459768008514584" + }, + { + "type": "number", + "value": "39536028154114218138765180149867498600107847851202444296864662884" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061016f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610105565b60405180910390f35b6100566100e7565b61005e6100e7565b7a3c26a7a725758c51609085bbd86528bfb0c9ed22ce0e029296f3481981527a0a633a127b590d58c90c58647e8e4f770621745c4e0201040e78631960208201527a368a2afe9f1cd7940aa03a11f7331f4764c1c1928e4da993b39c171960408201527a601b54aa4187f9246c7b7b3292691baec2b47fd3b5d7d5813805646060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b6004811015610130578151601a0b83526020928301929091019060010161010e565b5050509291505056fea26469706673582212206ffa3932d3b553e877963321d6f9a5691d97ef6a727150baf1b8045610d17f7764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int216[4] memory) {\n int216[4] memory r;\n {\n int216 r_0 = -24744684379905702942242365575982555093675157103044517078966399817;\n r[0] = r_0;\n }\n {\n int216 r_1 = -4273212784758401169633837122243642328598696859017011675018459236;\n r[1] = r_1;\n }\n {\n int216 r_2 = -22436338855518752095792060050846905709961870058688459768008514584;\n r[2] = r_2;\n }\n {\n int216 r_3 = 39536028154114218138765180149867498600107847851202444296864662884;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffc3d95858da8a73ae9f6f7a44279ad7404f3612dd31f1fd6d690cb7fffffffffff59cc5ed84a6f2a736f3a79b8171b088f9de8ba3b1fdfefbf1879cffffffffffc975d50160e3286bf55fc5ee08cce0b89b3e3e6d71b2566c4c63e80000000000601b54aa4187f9246c7b7b3292691baec2b47fd3b5d7d581380564" + }, + { + "name": "random-int224[]", + "type": "int224[]", + "value": [ + "-4646884167045077322151355802979577120210033212523476949660672787066", + "1202581806054718845236498715366703848771722124595815172098057540247", + "1170974904438617327142284386516559213607710303808448288192352359325" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-4646884167045077322151355802979577120210033212523476949660672787066" + }, + { + "type": "number", + "value": "1202581806054718845236498715366703848771722124595815172098057540247" + }, + { + "type": "number", + "value": "1170974904438617327142284386516559213607710303808448288192352359325" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101ed806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061015a565b60405180910390f35b604080516003808252608082019092526060916000919060208201848036833701905050905060007fffffffffd3e00ce226aea5dda5d451d41e757adbad843d4942f138cc1d0efd86905080826000815181106100ad576100ad6101a1565b6020026020010190601b0b9081601b0b815250505060007b0b6b507ec52425aa4853e5b8a350c52686ccc5d6be723082f4739297905080826001815181106100f7576100f76101a1565b6020026020010190601b0b9081601b0b815250505060007b0b1e7b78d70bed8a8626dcd28404f23c6cdc30cd096fdb6b0f2a139d90508082600281518110610141576101416101a1565b601b9290920b6020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b81811015610195578351601b0b83529284019291840191600101610176565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea264697066735822122095269c6651c6392802d1063a8fe7eae0637881c5015524ee37c84acf5eb21a3564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int224[] memory) {\n int224[] memory r = new int224[](3);\n {\n int224 r_0 = -4646884167045077322151355802979577120210033212523476949660672787066;\n r[0] = r_0;\n }\n {\n int224 r_1 = 1202581806054718845236498715366703848771722124595815172098057540247;\n r[1] = r_1;\n }\n {\n int224 r_2 = 1170974904438617327142284386516559213607710303808448288192352359325;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003ffffffffd3e00ce226aea5dda5d451d41e757adbad843d4942f138cc1d0efd86000000000b6b507ec52425aa4853e5b8a350c52686ccc5d6be723082f4739297000000000b1e7b78d70bed8a8626dcd28404f23c6cdc30cd096fdb6b0f2a139d" + }, + { + "name": "random-int224[1]", + "type": "int224[1]", + "value": ["-8443147258886072225170655361265274860721436494410830432273140456794"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-8443147258886072225170655361265274860721436494410830432273140456794" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610102806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906099565b60405180910390f35b604d607b565b6053607b565b7fffffffffafd3d88fbca1f2d43d46a941de2d28e330ea4aebdbaaa8bf0a8962a68152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560c2578151601b0b8352918301919083019060010160a4565b505050509291505056fea2646970667358221220f0b1d472a8f69693a9ab95970ecb4b84954e0fa62e9e2d1e9a6d4378fa5485b964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int224[1] memory) {\n int224[1] memory r;\n {\n int224 r_0 = -8443147258886072225170655361265274860721436494410830432273140456794;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0xffffffffafd3d88fbca1f2d43d46a941de2d28e330ea4aebdbaaa8bf0a8962a6" + }, + { + "name": "random-int232[2]", + "type": "int232[2]", + "value": [ + "2263848757437764465319968920062372913004524776686340361337116967285702", + "1726159796659750211106030299953852041761008832478898480112078391937923" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "2263848757437764465319968920062372913004524776686340361337116967285702" + }, + { + "type": "number", + "value": "1726159796659750211106030299953852041761008832478898480112078391937923" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610121806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060b9565b60405180910390f35b604d609b565b6053609b565b7c53f8877c6e22b3eb27d924b057063d77380cfccd618ec092944e8fb3c681527c4006de06aa1194337440970f5f34616e1311c41d4384c454efd8750b836020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560e2578151601c0b83526020928301929091019060010160c2565b5050509291505056fea2646970667358221220fe356902b427060d683b3e6c0bec9b29167a1aa60fb46f2b114bcd4eb4901c6164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int232[2] memory) {\n int232[2] memory r;\n {\n int232 r_0 = 2263848757437764465319968920062372913004524776686340361337116967285702;\n r[0] = r_0;\n }\n {\n int232 r_1 = 1726159796659750211106030299953852041761008832478898480112078391937923;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000053f8877c6e22b3eb27d924b057063d77380cfccd618ec092944e8fb3c60000004006de06aa1194337440970f5f34616e1311c41d4384c454efd8750b83" + }, + { + "name": "random-int24[]", + "type": "int24[]", + "value": ["-2307965", "851567", "6002622"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-2307965" + }, + { + "type": "number", + "value": "851567" + }, + { + "type": "number", + "value": "6002622" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610198806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610105565b60405180910390f35b604080516003808252608082019092526060916000919060208201848036833701905050905060006223377c19905080826000815181106100915761009161014c565b602002602001019060020b908160020b81525050506000620cfe6f905080826001815181106100c2576100c261014c565b600292830b60209182029290920101528251625b97be92508291849181106100ec576100ec61014c565b60029290920b6020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561014057835160020b83529284019291840191600101610121565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212202cea4033ea8285a8d1e6382de2d2c2983bc00e38d19f3273d7399f09ea8d38d064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int24[] memory) {\n int24[] memory r = new int24[](3);\n {\n int24 r_0 = -2307965;\n r[0] = r_0;\n }\n {\n int24 r_1 = 851567;\n r[1] = r_1;\n }\n {\n int24 r_2 = 6002622;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdcc88300000000000000000000000000000000000000000000000000000000000cfe6f00000000000000000000000000000000000000000000000000000000005b97be" + }, + { + "name": "random-int24[2]", + "type": "int24[2]", + "value": ["7429085", "6026595"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "7429085" + }, + { + "type": "number", + "value": "6026595" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f18061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906085565b60405180910390f35b604d6067565b60536067565b62715bdd8152625bf5636020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b6002808210609b575060b2565b8251900b835260209283019290910190600101608e565b5050509291505056fea2646970667358221220b13a473b2d0cc39fce876f88ab4fec4a6300d6265a80e9ead525008715c60c0a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int24[2] memory) {\n int24[2] memory r;\n {\n int24 r_0 = 7429085;\n r[0] = r_0;\n }\n {\n int24 r_1 = 6026595;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000715bdd00000000000000000000000000000000000000000000000000000000005bf563" + }, + { + "name": "random-int240[2]", + "type": "int240[2]", + "value": [ + "-270437982907758555467529299404598553160434501423679947469811946758659277", + "655732589664657948579112012130039700646894431774473111175461197237315203" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-270437982907758555467529299404598553160434501423679947469811946758659277" + }, + { + "type": "number", + "value": "655732589664657948579112012130039700646894431774473111175461197237315203" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610125806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060bd565b60405180910390f35b604d609f565b6053609f565b7fffffd8d0e5cff11b589042af9c6b730f289513672a360bb4d5cef858c9eb233381527d5f02793a6f76349c36c91f495818855b0962b2331e010caf1d0c452de6836020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560e6578151601d0b83526020928301929091019060010160c6565b5050509291505056fea2646970667358221220e0b0dd82a857dd3890b21166d79114d2e1cfb5a0c24ec0e3f3175f68494ca8ba64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int240[2] memory) {\n int240[2] memory r;\n {\n int240 r_0 = -270437982907758555467529299404598553160434501423679947469811946758659277;\n r[0] = r_0;\n }\n {\n int240 r_1 = 655732589664657948579112012130039700646894431774473111175461197237315203;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0xffffd8d0e5cff11b589042af9c6b730f289513672a360bb4d5cef858c9eb233300005f02793a6f76349c36c91f495818855b0962b2331e010caf1d0c452de683" + }, + { + "name": "random-int240[4]", + "type": "int240[4]", + "value": [ + "-129189325327896820951133505629214283490994949277259836556640700887549688", + "-163522052724441299424116084952720606811228795554191532101191712531943319", + "-615576860888665678139129760559061082924397068841021645216050905182226192", + "-97446877132253911795992491061362223424568260044266864359174536521939775" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-129189325327896820951133505629214283490994949277259836556640700887549688" + }, + { + "type": "number", + "value": "-163522052724441299424116084952720606811228795554191532101191712531943319" + }, + { + "type": "number", + "value": "-615576860888665678139129760559061082924397068841021645216050905182226192" + }, + { + "type": "number", + "value": "-97446877132253911795992491061362223424568260044266864359174536521939775" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610180806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6100566100f8565b61005e6100f8565b7fffffed481a0262cadf875d8e6a66ac5ee06afff81a26969b1d04d714b8a2b90881527fffffe84ea1453adbd18d9385c076ba7e05f0850188525e37cf50f6219921f06960208201527fffffa6cefc36f733fceb5ab8caa83e1e8b2e1bec18757c979c229a27e42238f060408201527ffffff1e17e939a9cd5e456a207f2d33d616b612022fab0bce47893c9ea7e84c16060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b6004811015610141578151601d0b83526020928301929091019060010161011f565b5050509291505056fea264697066735822122043ea2edba0d1f1bdee22a37f0782648b9aa9415eed8bfd333e842e541795f4f664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int240[4] memory) {\n int240[4] memory r;\n {\n int240 r_0 = -129189325327896820951133505629214283490994949277259836556640700887549688;\n r[0] = r_0;\n }\n {\n int240 r_1 = -163522052724441299424116084952720606811228795554191532101191712531943319;\n r[1] = r_1;\n }\n {\n int240 r_2 = -615576860888665678139129760559061082924397068841021645216050905182226192;\n r[2] = r_2;\n }\n {\n int240 r_3 = -97446877132253911795992491061362223424568260044266864359174536521939775;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xffffed481a0262cadf875d8e6a66ac5ee06afff81a26969b1d04d714b8a2b908ffffe84ea1453adbd18d9385c076ba7e05f0850188525e37cf50f6219921f069ffffa6cefc36f733fceb5ab8caa83e1e8b2e1bec18757c979c229a27e42238f0fffff1e17e939a9cd5e456a207f2d33d616b612022fab0bce47893c9ea7e84c1" + }, + { + "name": "random-int248[]", + "type": "int248[]", + "value": ["-170488689200170080261608908191931263666735666409014400976183043737082004013"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-170488689200170080261608908191931263666735666409014400976183043737082004013" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610159806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100c6565b60405180910390f35b604080516001808252818301909252606091600091906020808301908036833701905050905060007fff9f81bf0dd0622d0599c95c45658075798a3ca95077ed270ff8fc08e39dfdd3905080826000815181106100ad576100ad61010d565b601e9290920b6020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b81811015610101578351601e0b835292840192918401916001016100e2565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea264697066735822122091027ad529dff7c887815aeb820002663fac85d43c39d3f23cbab7f26e8b654564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int248[] memory) {\n int248[] memory r = new int248[](1);\n {\n int248 r_0 = -170488689200170080261608908191931263666735666409014400976183043737082004013;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001ff9f81bf0dd0622d0599c95c45658075798a3ca95077ed270ff8fc08e39dfdd3" + }, + { + "name": "random-int248[4]", + "type": "int248[4]", + "value": [ + "31599971433904439480073453206409416918382765408336384283088439939207598655", + "-14765017428032932107591833299037473076947806441353432294231177736034258211", + "112817284373308101023546719817306564838934617697486919775248894602818313595", + "6734752053980451004228156967171569830009282554201010035620721985229254192" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "31599971433904439480073453206409416918382765408336384283088439939207598655" + }, + { + "type": "number", + "value": "-14765017428032932107591833299037473076947806441353432294231177736034258211" + }, + { + "type": "number", + "value": "112817284373308101023546719817306564838934617697486919775248894602818313595" + }, + { + "type": "number", + "value": "6734752053980451004228156967171569830009282554201010035620721985229254192" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061017d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610113565b60405180910390f35b6100566100f5565b61005e6100f5565b7e11e28c1583c44c2f70e2636d3ae943dfb88ce8c1cebe93b4d2f35243f9123f81527ffff7a4af10beaa811a99a4d8c80b48af42eef26733575c7a802d6f7ed7daf2dd60208201527e3fda31a6a8ce22a01fbc570200965e71966ce05ab2cb79972554e8119b5d7b60408201527e03cfcdd66124b482593e1c8e1025f96f8678fc9d5c69ffa16259cbe7c96e306060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561013e578151601e0b83526020928301929091019060010161011c565b5050509291505056fea2646970667358221220fb5ac9d6121a48c9197ff7e43a72d8406a13ebdaea3817813e2040e3329a8a6864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int248[4] memory) {\n int248[4] memory r;\n {\n int248 r_0 = 31599971433904439480073453206409416918382765408336384283088439939207598655;\n r[0] = r_0;\n }\n {\n int248 r_1 = -14765017428032932107591833299037473076947806441353432294231177736034258211;\n r[1] = r_1;\n }\n {\n int248 r_2 = 112817284373308101023546719817306564838934617697486919775248894602818313595;\n r[2] = r_2;\n }\n {\n int248 r_3 = 6734752053980451004228156967171569830009282554201010035620721985229254192;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0011e28c1583c44c2f70e2636d3ae943dfb88ce8c1cebe93b4d2f35243f9123ffff7a4af10beaa811a99a4d8c80b48af42eef26733575c7a802d6f7ed7daf2dd003fda31a6a8ce22a01fbc570200965e71966ce05ab2cb79972554e8119b5d7b0003cfcdd66124b482593e1c8e1025f96f8678fc9d5c69ffa16259cbe7c96e30" + }, + { + "name": "random-int256[4]", + "type": "int256[4]", + "value": [ + "18142005720347300466318991783864290359219306951999883839373602187793595219620", + "-37759052212053298606873329612916691863223003097775646815771067903333805797002", + "-13706962064111408111480990125180045713035902488810837883202337435027373159175", + "39448379620082481635352445141039342460386335014399205638170121739007352742574" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "18142005720347300466318991783864290359219306951999883839373602187793595219620" + }, + { + "type": "number", + "value": "-37759052212053298606873329612916691863223003097775646815771067903333805797002" + }, + { + "type": "number", + "value": "-13706962064111408111480990125180045713035902488810837883202337435027373159175" + }, + { + "type": "number", + "value": "39448379620082481635352445141039342460386335014399205638170121739007352742574" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061017d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6100566100f8565b61005e6100f8565b7f281c02e8098503d51c6c60f1cc16916531f47f84d77da37dac12ae828365bea481527fac852240e8c43a747557a6849e089aed7880595084e2cbc05447a6ef55e4d17660208201527fe1b222680baba9b7d2f06b0c00873afff06f1e81063f3892a6315644f6de0cf960408201527f5736fddb36f1826b2fc2a2a8d47c9edd793be22ec403c6d1fa1541a670b9a2ae6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561013e57815183526020928301929091019060010161011f565b5050509291505056fea26469706673582212206550ef48f0c9c84bf5f146fc41baacea674f06642ed187147b7f42336049bd8764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int256[4] memory) {\n int256[4] memory r;\n {\n int256 r_0 = 18142005720347300466318991783864290359219306951999883839373602187793595219620;\n r[0] = r_0;\n }\n {\n int256 r_1 = -37759052212053298606873329612916691863223003097775646815771067903333805797002;\n r[1] = r_1;\n }\n {\n int256 r_2 = -13706962064111408111480990125180045713035902488810837883202337435027373159175;\n r[2] = r_2;\n }\n {\n int256 r_3 = 39448379620082481635352445141039342460386335014399205638170121739007352742574;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x281c02e8098503d51c6c60f1cc16916531f47f84d77da37dac12ae828365bea4ac852240e8c43a747557a6849e089aed7880595084e2cbc05447a6ef55e4d176e1b222680baba9b7d2f06b0c00873afff06f1e81063f3892a6315644f6de0cf95736fddb36f1826b2fc2a2a8d47c9edd793be22ec403c6d1fa1541a670b9a2ae" + }, + { + "name": "random-int32[]", + "type": "int32[]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060c88061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051600081526020810191829052604491604d565b60405180910390f35b6020808252825182820181905260009190848201906040850190845b81811015608657835160030b835292840192918401916001016069565b5090969550505050505056fea264697066735822122059396e035551662d9b52b1b7c5ff7d3c852c2a8738d57821f4d39f1960c4f58364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int32[] memory) {\n int32[] memory r = new int32[](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-int32[1]", + "type": "int32[1]", + "value": ["-495262818"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-495262818" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060e78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190607e565b60405180910390f35b604d6060565b60536060565b631d851c61198152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560a757815160030b835291830191908301906001016089565b505050509291505056fea264697066735822122053affa9315019c776228964ccf2f564806a4c91cf38bdeca8498b28ff5b910a064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int32[1] memory) {\n int32[1] memory r;\n {\n int32 r_0 = -495262818;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffe27ae39e" + }, + { + "name": "random-int40[]", + "type": "int40[]", + "value": ["463955905010"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "463955905010" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610132806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060a1565b60405180910390f35b60408051600180825281830190925260609160009190602080830190803683370190505090506000646c05ed49f290508082600081518110608857608860e6565b60049290920b6020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b8181101560da57835160040b8352928401929184019160010160bd565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212203d761265aacbd7bf426c9f2c0ae1be4b9f8c367fa144caf2c296fcb7aed2e9d364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int40[] memory) {\n int40[] memory r = new int40[](1);\n {\n int40 r_0 = 463955905010;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000006c05ed49f2" + }, + { + "name": "random-int40[3]", + "type": "int40[3]", + "value": ["78085376632", "-455043985292", "228565965259"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "78085376632" + }, + { + "type": "number", + "value": "-455043985292" + }, + { + "type": "number", + "value": "228565965259" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060fd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906095565b60405180910390f35b604d6077565b60536077565b64122e404a7881526469f2bc2f8b19602082015264353797d9cb6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560be57815160040b835260209283019290910190600101609e565b5050509291505056fea2646970667358221220f835639663fe624e687bb994e6dd8870b169fa8fcc104ffdb14c9d52da323b9764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int40[3] memory) {\n int40[3] memory r;\n {\n int40 r_0 = 78085376632;\n r[0] = r_0;\n }\n {\n int40 r_1 = -455043985292;\n r[1] = r_1;\n }\n {\n int40 r_2 = 228565965259;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000122e404a78ffffffffffffffffffffffffffffffffffffffffffffffffffffff960d43d074000000000000000000000000000000000000000000000000000000353797d9cb" + }, + { + "name": "random-int48[4]", + "type": "int48[4]", + "value": ["-67185771323167", "-37195460361073", "1954070775484", "-83219580491911"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-67185771323167" + }, + { + "type": "number", + "value": "-37195460361073" + }, + { + "type": "number", + "value": "1954070775484" + }, + { + "type": "number", + "value": "-83219580491911" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061010e806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060a6565b60405180910390f35b604d6088565b60536088565b653d1ae8089f1e1981526521d43e33bb701960208201526501c6f7b1c6bc6040820152654bb011889886196060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560cf57815160050b83526020928301929091019060010160af565b5050509291505056fea2646970667358221220ebee00adeb4cd2b92bda90b7705958e95a8f0864ec523261db0a8629a74854b964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int48[4] memory) {\n int48[4] memory r;\n {\n int48 r_0 = -67185771323167;\n r[0] = r_0;\n }\n {\n int48 r_1 = -37195460361073;\n r[1] = r_1;\n }\n {\n int48 r_2 = 1954070775484;\n r[2] = r_2;\n }\n {\n int48 r_3 = -83219580491911;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffc2e517f760e1ffffffffffffffffffffffffffffffffffffffffffffffffffffde2bc1cc448f000000000000000000000000000000000000000000000000000001c6f7b1c6bcffffffffffffffffffffffffffffffffffffffffffffffffffffb44fee776779" + }, + { + "name": "random-int56[]", + "type": "int56[]", + "value": ["-27438023170741394", "-35806554143254307"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-27438023170741394" + }, + { + "type": "number", + "value": "-35806554143254307" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610176806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e3565b60405180910390f35b60408051600280825260608083018452926000929190602083019080368337019050509050600066617abc986e549119905080826000815181106100945761009461012a565b602002602001019060060b908160060b81525050506000667f35df0c56e72219905080826001815181106100ca576100ca61012a565b60069290920b6020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561011e57835160060b835292840192918401916001016100ff565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220e38e6a07c071bf9f283b7474acc3b4acc96eaaaa88c8b725fe73965c88d883e264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int56[] memory) {\n int56[] memory r = new int56[](2);\n {\n int56 r_0 = -27438023170741394;\n r[0] = r_0;\n }\n {\n int56 r_1 = -35806554143254307;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffffffffffffffffffffffffffffffffffff9e85436791ab6effffffffffffffffffffffffffffffffffffffffffffffffff80ca20f3a918dd" + }, + { + "name": "random-int56[4]", + "type": "int56[4]", + "value": [ + "24730519983532447", + "-17157036331964271", + "877876979834657", + "-9881776583619671" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "24730519983532447" + }, + { + "type": "number", + "value": "-17157036331964271" + }, + { + "type": "number", + "value": "877876979834657" + }, + { + "type": "number", + "value": "-9881776583619671" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610111806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060a9565b60405180910390f35b604d608b565b6053608b565b6657dc46e2baa99f8152663cf43bcff7176e19602082015266031e6ca98a1f21604082015266231b6c67043456196060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560d257815160060b83526020928301929091019060010160b2565b5050509291505056fea26469706673582212209201e2e4bdeb2dd4fd262604c4143ce8ecb1a27f826f7747ccefd71ee8bc218164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int56[4] memory) {\n int56[4] memory r;\n {\n int56 r_0 = 24730519983532447;\n r[0] = r_0;\n }\n {\n int56 r_1 = -17157036331964271;\n r[1] = r_1;\n }\n {\n int56 r_2 = 877876979834657;\n r[2] = r_2;\n }\n {\n int56 r_3 = -9881776583619671;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000057dc46e2baa99fffffffffffffffffffffffffffffffffffffffffffffffffffc30bc43008e89100000000000000000000000000000000000000000000000000031e6ca98a1f21ffffffffffffffffffffffffffffffffffffffffffffffffffdce49398fbcba9" + }, + { + "name": "random-int64[]", + "type": "int64[]", + "value": ["-3221430171614563757", "-1984920999378744122", "7913367232410699086"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-3221430171614563757" + }, + { + "type": "number", + "value": "-1984920999378744122" + }, + { + "type": "number", + "value": "7913367232410699086" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101af806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061011c565b60405180910390f35b60408051600380825260808201909252606091600091906020820184803683370190505090506000672cb4d1ac57cfcdac199050808260008151811061009657610096610163565b602002602001019060070b908160070b81525050506000671b8bdb21e32ef33919905080826001815181106100cd576100cd610163565b602002602001019060070b908160070b81525050506000676dd1ed92310e454e9050808260028151811061010357610103610163565b60079290920b6020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561015757835160070b83529284019291840191600101610138565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea264697066735822122025a067332a34153882f53da5316a4e4f4839eaba7bdc5e6d88d7885aa27de0c564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int64[] memory) {\n int64[] memory r = new int64[](3);\n {\n int64 r_0 = -3221430171614563757;\n r[0] = r_0;\n }\n {\n int64 r_1 = -1984920999378744122;\n r[1] = r_1;\n }\n {\n int64 r_2 = 7913367232410699086;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffd34b2e53a8303253ffffffffffffffffffffffffffffffffffffffffffffffffe47424de1cd10cc60000000000000000000000000000000000000000000000006dd1ed92310e454e" + }, + { + "name": "random-int64[2]", + "type": "int64[2]", + "value": ["-5059615664941592411", "-4471030492347937020"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-5059615664941592411" + }, + { + "type": "number", + "value": "-4471030492347937020" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f98061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906091565b60405180910390f35b604d6073565b60536073565b6746375da3e8d86f5a198152673e0c4a8b5456b0fb196020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560ba57815160070b835260209283019290910190600101609a565b5050509291505056fea26469706673582212202a51fbf3297266087b5b3d9f315d2afb254eb6cce962166182436274bd85883664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int64[2] memory) {\n int64[2] memory r;\n {\n int64 r_0 = -5059615664941592411;\n r[0] = r_0;\n }\n {\n int64 r_1 = -4471030492347937020;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffffffffb9c8a25c172790a5ffffffffffffffffffffffffffffffffffffffffffffffffc1f3b574aba94f04" + }, + { + "name": "random-int72[3]", + "type": "int72[3]", + "value": ["411922600202259082403", "2080509760170706122809", "99266288620767362469"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "411922600202259082403" + }, + { + "type": "number", + "value": "2080509760170706122809" + }, + { + "type": "number", + "value": "99266288620767362469" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610108806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060a0565b60405180910390f35b604d6082565b60536082565b681654930e6caae72ca381526870c8df7bdcb414b839602082015268056198b390b43d3da56040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560c957815160080b83526020928301929091019060010160a9565b5050509291505056fea26469706673582212204ffce7340b277cf7b77de343d10e1a6ca5eda67d6253d2df9dd4ab8bb87da20264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int72[3] memory) {\n int72[3] memory r;\n {\n int72 r_0 = 411922600202259082403;\n r[0] = r_0;\n }\n {\n int72 r_1 = 2080509760170706122809;\n r[1] = r_1;\n }\n {\n int72 r_2 = 99266288620767362469;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000001654930e6caae72ca3000000000000000000000000000000000000000000000070c8df7bdcb414b8390000000000000000000000000000000000000000000000056198b390b43d3da5" + }, + { + "name": "random-int8[1]", + "type": "int8[1]", + "value": ["66"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "66" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060e48061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190607a565b60405180910390f35b604d605c565b6053605c565b60428152919050565b60405180602001604052806001906020820280368337509192915050565b60208181019082846000805b600181101560a3578251820b845292840192918401916001016086565b50505050509291505056fea26469706673582212209876cf8992be7b5aa2d77183453ea612c4978a83c0e2e1d48e346a8662aa4f9164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int8[1] memory) {\n int8[1] memory r;\n {\n int8 r_0 = 66;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000042" + }, + { + "name": "random-int80[4]", + "type": "int80[4]", + "value": [ + "293011020915502950586659", + "350017490047869560396500", + "483295739441890662577983", + "-128657358869524827143070" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "293011020915502950586659" + }, + { + "type": "number", + "value": "350017490047869560396500" + }, + { + "type": "number", + "value": "483295739441890662577983" + }, + { + "type": "number", + "value": "-128657358869524827143070" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061011c806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060b4565b60405180910390f35b604d6096565b60536096565b693e0c28c60bba021719238152694a1e7c74b66560799ad4602082015269665783b86bd44518773f6040820152691b3e8786bbee5bacfb9d196060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560dd57815160090b83526020928301929091019060010160bd565b5050509291505056fea2646970667358221220f9017832280f9c4b8f05fd80f6403c4c80221b0c7f984f871b1912da661b079164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int80[4] memory) {\n int80[4] memory r;\n {\n int80 r_0 = 293011020915502950586659;\n r[0] = r_0;\n }\n {\n int80 r_1 = 350017490047869560396500;\n r[1] = r_1;\n }\n {\n int80 r_2 = 483295739441890662577983;\n r[2] = r_2;\n }\n {\n int80 r_3 = -128657358869524827143070;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000003e0c28c60bba02171923000000000000000000000000000000000000000000004a1e7c74b66560799ad400000000000000000000000000000000000000000000665783b86bd44518773fffffffffffffffffffffffffffffffffffffffffffffe4c178794411a4530462" + }, + { + "name": "random-int88[1]", + "type": "int88[1]", + "value": ["80935607150792488495448058"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "80935607150792488495448058" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060ed8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906084565b60405180910390f35b604d6066565b60536066565b6a42f2c80e22a4e4780d7ffa8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560ad578151600a0b83529183019190830190600101608f565b505050509291505056fea2646970667358221220c53630489bddef58324053e0a9ad295f08809e7475313b38a41eb34d3ef555f564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int88[1] memory) {\n int88[1] memory r;\n {\n int88 r_0 = 80935607150792488495448058;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000042f2c80e22a4e4780d7ffa" + }, + { + "name": "random-int88[2]", + "type": "int88[2]", + "value": ["15409046335202403086285715", "-94354443271879631098513336"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "15409046335202403086285715" + }, + { + "type": "number", + "value": "-94354443271879631098513336" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060fe8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906096565b60405180910390f35b604d6078565b60536078565b6a0cbefe135c58247468bb9381526a4e0c549e739cd7229687b7196020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560bf578151600a0b835260209283019290910190600101609f565b5050509291505056fea264697066735822122038eef306fd5e50dff3ea34a5fdd32c4623a76a63719270836552621cb6e91b5f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int88[2] memory) {\n int88[2] memory r;\n {\n int88 r_0 = 15409046335202403086285715;\n r[0] = r_0;\n }\n {\n int88 r_1 = -94354443271879631098513336;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000cbefe135c58247468bb93ffffffffffffffffffffffffffffffffffffffffffb1f3ab618c6328dd697848" + }, + { + "name": "random-int96[3]", + "type": "int96[3]", + "value": [ + "-6774744630693563321956799035", + "-27502617405254661756077350367", + "38377749546209837871066691038" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "-6774744630693563321956799035" + }, + { + "type": "number", + "value": "-27502617405254661756077350367" + }, + { + "type": "number", + "value": "38377749546209837871066691038" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610113806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060ab565b60405180910390f35b604d608d565b6053608d565b6b15e3effa54e54539d191923a1981526b58dda1c4fda0fa0823b21dde1960208201526b7c015493a7bf68827bc2b5de6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560d4578151600b0b83526020928301929091019060010160b4565b5050509291505056fea2646970667358221220e0fd6b76c2e96cdcbecc562426aae163d22da4a4edf717ad9b2b19ebec389d7e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int96[3] memory) {\n int96[3] memory r;\n {\n int96 r_0 = -6774744630693563321956799035;\n r[0] = r_0;\n }\n {\n int96 r_1 = -27502617405254661756077350367;\n r[1] = r_1;\n }\n {\n int96 r_2 = 38377749546209837871066691038;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffea1c1005ab1abac62e6e6dc5ffffffffffffffffffffffffffffffffffffffffa7225e3b025f05f7dc4de22100000000000000000000000000000000000000007c015493a7bf68827bc2b5de" + }, + { + "name": "random-string[]", + "type": "string[]", + "value": ["Moo é🚀M"], + "verbose": { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀M" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100cd565b60405180910390f35b60408051600180825281830190925260609160009190816020015b606081526020019060019003908161006957905050905060006040518060400160405280600b81526020016a4d6f6f20c3a9f09f9a804d60a81b815250905080826000815181106100bc576100bc610168565b602090810291909101015250919050565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b8381101561015a57888603603f1901855282518051808852835b8181101561012a578281018a01518982018b0152890161010f565b8181111561013a57848a838b0101525b50601f01601f1916969096018701955093860193918601916001016100f5565b509398975050505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205c2b3e379a6db24b5339eb96a01fea43ae5d8b89ccfe37ba50224d43fe50ba5964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[] memory) {\n string[] memory r = new string[](1);\n {\n string memory r_0 = unicode\"Moo é🚀M\";\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a804d000000000000000000000000000000000000000000" + }, + { + "name": "random-string[1]", + "type": "string[1]", + "value": ["Moo é🚀MMéoo oooéoooo oé MMéooMo 🚀🚀🚀ooo"], + "verbose": { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MMéoo oooéoooo oé MMéooMo 🚀🚀🚀ooo" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061019b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100a8565b60405180910390f35b610056610081565b61005e610081565b600060405180606001604052806037815260200161012f60379139825250919050565b60405180602001604052806001905b60608152602001906001900390816100905790505090565b6020808252600090604083018382018584805b600181101561012157601f198089870301855283518051808852845b818110156100f2578281018a01518982018b015289016100d7565b8181111561010257858a838b0101525b50601f01909116959095018601945092850192918501916001016100bb565b509297965050505050505056fe4d6f6f20c3a9f09f9a804d4dc3a96f6f206f6f6fc3a96f6f6f6f206fc3a9204d4dc3a96f6f4d6f20f09f9a80f09f9a80f09f9a806f6f6fa2646970667358221220ff3d4523a39d312b7eab0a57df776c2daf8781b84f01f37289ccd94ddd51578264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[1] memory) {\n string[1] memory r;\n {\n string memory r_0 = unicode\"Moo é🚀MMéoo oooéoooo oé MMéooMo 🚀🚀🚀ooo\";\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a804d4dc3a96f6f206f6f6fc3a96f6f6f6f206fc3a9204d4dc3a96f6f4d6f20f09f9a80f09f9a80f09f9a806f6f6f000000000000000000" + }, + { + "name": "random-string[2]", + "type": "string[2]", + "value": ["Moo é🚀 é🚀o ooéé🚀ooéoéoé M oo o🚀🚀MoMo", "Moo é🚀"], + "verbose": { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é🚀o ooéé🚀ooéoéoé M oo o🚀🚀MoMo" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101c7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100cf565b60405180910390f35b6100566100a8565b61005e6100a8565b60006040518060600160405280603c8152602001610156603c913982525060408051808201909152600a8152689adede418753e13f3560b71b602080830191909152820152919050565b60405180604001604052806002905b60608152602001906001900390816100b75790505090565b6020808252600090606083018382018584805b600281101561014857601f198089870301855283518051808852845b81811015610119578281018a01518982018b015289016100fe565b8181111561012957858a838b0101525b50601f01909116959095018601945092850192918501916001016100e2565b509297965050505050505056fe4d6f6f20c3a9f09f9a8020c3a9f09f9a806f206f6fc3a9c3a9f09f9a806f6fc3a96fc3a96fc3a9204d206f6f2020206ff09f9a80f09f9a804d6f4d6fa2646970667358221220179e8ce1c9f90faa49799ff25768ae76c78b48e8dc1a08c6060e8d239b86d51164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[2] memory) {\n string[2] memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 é🚀o ooéé🚀ooéoéoé M oo o🚀🚀MoMo\";\n r[0] = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a8020c3a9f09f9a806f206f6fc3a9c3a9f09f9a806f6fc3a96fc3a96fc3a9204d206f6f2020206ff09f9a80f09f9a804d6f4d6f00000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-string[3]", + "type": "string[3]", + "value": [ + "Moo é🚀 🚀oéo éMoo 🚀oééo🚀M oo🚀oéMoo🚀 🚀oo é ééMoéoMMoo🚀oooooooé ", + "Moo é🚀é🚀MMoM🚀oo🚀 o🚀🚀MM ooooM🚀 oMééM éé🚀🚀oMé 🚀 é ééo🚀 🚀o", + "Moo é🚀é 🚀oooo🚀🚀Mo" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀oéo éMoo 🚀oééo🚀M oo🚀oéMoo🚀 🚀oo é ééMoéoMMoo🚀oooooooé " + }, + { + "type": "string", + "value": "Moo é🚀é🚀MMoM🚀oo🚀 o🚀🚀MM ooooM🚀 oMééM éé🚀🚀oMé 🚀 é ééo🚀 🚀o" + }, + { + "type": "string", + "value": "Moo é🚀é 🚀oooo🚀🚀Mo" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061028a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610106565b60405180910390f35b6100566100df565b61005e6100df565b60006040518060a001604052806062815260200161018d606291398252506040805160a081019091526066808252600091906101ef6020830139602083810191909152604080518082018252601f81527f4d6f6f20c3a9f09f9a80c3a920f09f9a806f6f6f6ff09f9a80f09f9a804d6f009281019290925283015250919050565b60405180606001604052806003905b60608152602001906001900390816100ee5790505090565b6020808252600090608083018382018584805b600381101561017f57601f198089870301855283518051808852845b81811015610150578281018a01518982018b01528901610135565b8181111561016057858a838b0101525b50601f0190911695909501860194509285019291850191600101610119565b509297965050505050505056fe4d6f6f20c3a9f09f9a8020f09f9a806fc3a96f2020c3a94d6f6f20f09f9a806fc3a9c3a96ff09f9a804d206f6ff09f9a806fc3a94d6f6ff09f9a8020f09f9a806f6f20c3a920c3a9c3a94d6fc3a96f4d4d6f6ff09f9a806f6f6f6f6f6f6fc3a920204d6f6f20c3a9f09f9a80c3a9f09f9a804d4d6f4df09f9a806f6ff09f9a80206ff09f9a80f09f9a804d4d206f6f6f6f4df09f9a80206f4dc3a9c3a94d20c3a9c3a9f09f9a80f09f9a806f4dc3a920f09f9a8020c3a92020c3a9c3a96ff09f9a8020f09f9a806fa264697066735822122016e0396f5190c2379cedbd7826000c15abf9ded03401f4e13d5f7a82d0e72cdd64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[3] memory) {\n string[3] memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 🚀oéo éMoo 🚀oééo🚀M oo🚀oéMoo🚀 🚀oo é ééMoéoMMoo🚀oooooooé \";\n r[0] = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀é🚀MMoM🚀oo🚀 o🚀🚀MM ooooM🚀 oMééM éé🚀🚀oMé 🚀 é ééo🚀 🚀o\";\n r[1] = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀é 🚀oooo🚀🚀Mo\";\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000624d6f6f20c3a9f09f9a8020f09f9a806fc3a96f2020c3a94d6f6f20f09f9a806fc3a9c3a96ff09f9a804d206f6ff09f9a806fc3a94d6f6ff09f9a8020f09f9a806f6f20c3a920c3a9c3a94d6fc3a96f4d4d6f6ff09f9a806f6f6f6f6f6f6fc3a9202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000664d6f6f20c3a9f09f9a80c3a9f09f9a804d4d6f4df09f9a806f6ff09f9a80206ff09f9a80f09f9a804d4d206f6f6f6f4df09f9a80206f4dc3a9c3a94d20c3a9c3a9f09f9a80f09f9a806f4dc3a920f09f9a8020c3a92020c3a9c3a96ff09f9a8020f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a80c3a920f09f9a806f6f6f6ff09f9a80f09f9a804d6f00" + }, + { + "name": "random-string[4]", + "type": "string[4]", + "value": [ + "Moo é🚀oMM🚀🚀 🚀🚀 oééé🚀MéMoéoM🚀Moo🚀é MM 🚀Mé🚀🚀 o ooo", + "Moo é🚀🚀o🚀ooéé oéééM oMoo🚀éoo🚀ooo ooéééo🚀éMoo🚀o o oo 🚀oooM", + "Moo é🚀 Moé ooéo 🚀 M🚀🚀oo Méoo🚀o é🚀🚀oo", + "Moo é🚀o🚀🚀o🚀éooMoéMoMo🚀ééo Mé" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMM🚀🚀 🚀🚀 oééé🚀MéMoéoM🚀Moo🚀é MM 🚀Mé🚀🚀 o ooo" + }, + { + "type": "string", + "value": "Moo é🚀🚀o🚀ooéé oéééM oMoo🚀éoo🚀ooo ooéééo🚀éMoo🚀o o oo 🚀oooM" + }, + { + "type": "string", + "value": "Moo é🚀 Moé ooéo 🚀 M🚀🚀oo Méoo🚀o é🚀🚀oo" + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀o🚀éooMoéMoMo🚀ééo Mé" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102fc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610117565b60405180910390f35b6100566100f0565b61005e6100f0565b60006040518060800160405280605981526020016101e0605991398252506040805160808101909152605d8082526000919061026a6020830139905080826001602002018190525050600060405180608001604052806042815260200161019e604291396040808401919091528051606081019091526031808252600092506102396020830139606083015250919050565b60405180608001604052806004905b60608152602001906001900390816100ff5790505090565b602080825260009060a083018382018584805b600481101561019057601f198089870301855283518051808852845b81811015610161578281018a01518982018b01528901610146565b8181111561017157858a838b0101525b50601f019091169590950186019450928501929185019160010161012a565b509297965050505050505056fe4d6f6f20c3a9f09f9a8020204d6fc3a9206f6fc3a96f2020f09f9a80204df09f9a80f09f9a806f6f20204dc3a96f6ff09f9a806f2020c3a9f09f9a80f09f9a806f6f4d6f6f20c3a9f09f9a806f4d4df09f9a80f09f9a8020f09f9a80f09f9a80206fc3a9c3a9c3a9f09f9a804dc3a94d6fc3a96f4df09f9a804d6f6ff09f9a80c3a9204d4d20f09f9a804dc3a9f09f9a80f09f9a80206f206f6f6f4d6f6f20c3a9f09f9a806ff09f9a80f09f9a806ff09f9a80c3a96f6f4d6fc3a94d6f4d6ff09f9a80c3a9c3a96f204dc3a94d6f6f20c3a9f09f9a80f09f9a806ff09f9a806f6fc3a9c3a9206fc3a9c3a9c3a94d206f4d6f6ff09f9a80c3a96f6ff09f9a806f6f6f206f6fc3a9c3a9c3a96ff09f9a80c3a94d6f6ff09f9a806f206f20206f6f20f09f9a806f6f6f4da2646970667358221220716d9552fd364f235a8b88beb5031073c4f2c72f874db27c3b3cb61d41c7a3d964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[4] memory) {\n string[4] memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oMM🚀🚀 🚀🚀 oééé🚀MéMoéoM🚀Moo🚀é MM 🚀Mé🚀🚀 o ooo\";\n r[0] = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀🚀o🚀ooéé oéééM oMoo🚀éoo🚀ooo ooéééo🚀éMoo🚀o o oo 🚀oooM\";\n r[1] = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀 Moé ooéo 🚀 M🚀🚀oo Méoo🚀o é🚀🚀oo\";\n r[2] = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀o🚀🚀o🚀éooMoéMoMo🚀ééo Mé\";\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a806f4d4df09f9a80f09f9a8020f09f9a80f09f9a80206fc3a9c3a9c3a9f09f9a804dc3a94d6fc3a96f4df09f9a804d6f6ff09f9a80c3a9204d4d20f09f9a804dc3a9f09f9a80f09f9a80206f206f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a80f09f9a806ff09f9a806f6fc3a9c3a9206fc3a9c3a9c3a94d206f4d6f6ff09f9a80c3a96f6ff09f9a806f6f6f206f6fc3a9c3a9c3a96ff09f9a80c3a94d6f6ff09f9a806f206f20206f6f20f09f9a806f6f6f4d00000000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a8020204d6fc3a9206f6fc3a96f2020f09f9a80204df09f9a80f09f9a806f6f20204dc3a96f6ff09f9a806f2020c3a9f09f9a80f09f9a806f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a806ff09f9a80f09f9a806ff09f9a80c3a96f6f4d6fc3a94d6f4d6ff09f9a80c3a9c3a96f204dc3a9000000000000000000000000000000" + }, + { + "name": "random-uint[1]", + "type": "uint[1]", + "value": ["85278062354955196856548681280337422497994696305453898151610776625952312643983"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "85278062354955196856548681280337422497994696305453898151610776625952312643983" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060ff8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906099565b60405180910390f35b604d607b565b6053607b565b7fbc89ac3e0e9b0049e9167d01dbbf804b84d9b623efcb896443ebb8371199d18f8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560bf5781518352918301919083019060010160a4565b505050509291505056fea264697066735822122096af353cc1dc9ea102610f3be39f1fcecd0ab1caabd348c2bfbbacf9d100442864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint256[1] memory) {\n uint256[1] memory r;\n {\n uint r_0 = 85278062354955196856548681280337422497994696305453898151610776625952312643983;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0xbc89ac3e0e9b0049e9167d01dbbf804b84d9b623efcb896443ebb8371199d18f" + }, + { + "name": "random-uint[3]", + "type": "uint[3]", + "value": [ + "98393364321761373208654249527454193797295952995917213712613395288490053419721", + "88612540650132332205727238878279683016376639335773567842391964296007635009636", + "23797238281057386515491841886811405147248814370120343448918167108993365246578" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "98393364321761373208654249527454193797295952995917213712613395288490053419721" + }, + { + "type": "number", + "value": "88612540650132332205727238878279683016376639335773567842391964296007635009636" + }, + { + "type": "number", + "value": "23797238281057386515491841886811405147248814370120343448918167108993365246578" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610157806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f0565b60405180910390f35b6100566100d2565b61005e6100d2565b7fd988abb14a829fdffda99e33c76c9d4a31bf94f38873556310327dc54de342c981527fc3e8ebb01339c0fde4afffb8991b5aa7b87d88ec845fd365e903d886e465806460208201527f349cc27203c4d50a320f0a6595e7770f6ceaf5d935daf97eb6684f8a4be702726040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b60038110156101185781518352602092830192909101906001016100f9565b5050509291505056fea2646970667358221220d00e84d3ba8caa45b4c8d8a87bf4734b5a213bc5868aa2427f18be4af03a469564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint256[3] memory) {\n uint256[3] memory r;\n {\n uint r_0 = 98393364321761373208654249527454193797295952995917213712613395288490053419721;\n r[0] = r_0;\n }\n {\n uint r_1 = 88612540650132332205727238878279683016376639335773567842391964296007635009636;\n r[1] = r_1;\n }\n {\n uint r_2 = 23797238281057386515491841886811405147248814370120343448918167108993365246578;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xd988abb14a829fdffda99e33c76c9d4a31bf94f38873556310327dc54de342c9c3e8ebb01339c0fde4afffb8991b5aa7b87d88ec845fd365e903d886e4658064349cc27203c4d50a320f0a6595e7770f6ceaf5d935daf97eb6684f8a4be70272" + }, + { + "name": "random-uint[4]", + "type": "uint[4]", + "value": [ + "57346974314348497832025048164229507860228206721417190654129115307041630375507", + "112358820360125404352722645092096125963662188685916991422224750821458080442606", + "81815546683028214628834496441602347529868608271479026934697953374598712865169", + "7547477982752107987132137646075851025286130866229091054848335142869507848848" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "57346974314348497832025048164229507860228206721417190654129115307041630375507" + }, + { + "type": "number", + "value": "112358820360125404352722645092096125963662188685916991422224750821458080442606" + }, + { + "type": "number", + "value": "81815546683028214628834496441602347529868608271479026934697953374598712865169" + }, + { + "type": "number", + "value": "7547477982752107987132137646075851025286130866229091054848335142869507848848" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061017d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6100566100f8565b61005e6100f8565b7f7ec93cba803e455dfc382491706703757850dc422249a51d91c1e1c8749ece5381527ff868d6b3a339e5ee1725982e9a27ae908de81c043adecddd1d7b6d586ce028ee60208201527fb4e1f559c9115b94732521e47f4a736e6ab3990cf3e29a4ca889b1c4a32d319160408201527f10afb89d8eda67dbb6c5cef3df7e44591a128e1ce9b3420c25561455ba053a906060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561013e57815183526020928301929091019060010161011f565b5050509291505056fea2646970667358221220f45359371426400181aac57d638f50c891984c01be5e26739a0661067518547664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint256[4] memory) {\n uint256[4] memory r;\n {\n uint r_0 = 57346974314348497832025048164229507860228206721417190654129115307041630375507;\n r[0] = r_0;\n }\n {\n uint r_1 = 112358820360125404352722645092096125963662188685916991422224750821458080442606;\n r[1] = r_1;\n }\n {\n uint r_2 = 81815546683028214628834496441602347529868608271479026934697953374598712865169;\n r[2] = r_2;\n }\n {\n uint r_3 = 7547477982752107987132137646075851025286130866229091054848335142869507848848;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x7ec93cba803e455dfc382491706703757850dc422249a51d91c1e1c8749ece53f868d6b3a339e5ee1725982e9a27ae908de81c043adecddd1d7b6d586ce028eeb4e1f559c9115b94732521e47f4a736e6ab3990cf3e29a4ca889b1c4a32d319110afb89d8eda67dbb6c5cef3df7e44591a128e1ce9b3420c25561455ba053a90" + }, + { + "name": "random-uint104[2]", + "type": "uint104[2]", + "value": ["17975298040185105258323422246807", "1324837334398316441929784338109"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "17975298040185105258323422246807" + }, + { + "type": "number", + "value": "1324837334398316441929784338109" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061010d806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906099565b60405180910390f35b604d607b565b6053607b565b6ce2e1520b3027f3e3c53380779781526c10b8c7c1ff3a5c3da8280da6bd6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560ce5781516cffffffffffffffffffffffffff1683526020928301929091019060010160a2565b5050509291505056fea26469706673582212207d0b6754f73fbc639f2278b0fe40d4cd35f0b8d63c832c2259ed41633e6911ad64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint104[2] memory) {\n uint104[2] memory r;\n {\n uint104 r_0 = 17975298040185105258323422246807;\n r[0] = r_0;\n }\n {\n uint104 r_1 = 1324837334398316441929784338109;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000e2e1520b3027f3e3c5338077970000000000000000000000000000000000000010b8c7c1ff3a5c3da8280da6bd" + }, + { + "name": "random-uint112[]", + "type": "uint112[]", + "value": ["1734002917639325815251826435653609"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "1734002917639325815251826435653609" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610152806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100b9565b60405180910390f35b604080516001808252818301909252606091600091906020808301908036833701905050905060006d557e319b94e603699e8ab5837fe99050808260008151811061009b5761009b610106565b6001600160701b039092166020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b818110156100fa5783516001600160701b0316835292840192918401916001016100d5565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220e20d6e692cd9cca9e02cb702aa44c85b4c040b385bd184075357d72f66b2bd0f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint112[] memory) {\n uint112[] memory r = new uint112[](1);\n {\n uint112 r_0 = 1734002917639325815251826435653609;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000557e319b94e603699e8ab5837fe9" + }, + { + "name": "random-uint120[2]", + "type": "uint120[2]", + "value": ["900520415123204281892415007713605193", "762361272231216916684115282506300537"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "900520415123204281892415007713605193" + }, + { + "type": "number", + "value": "762361272231216916684115282506300537" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610113806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190609d565b60405180910390f35b604d607f565b6053607f565b6ead6f1598f61e6f39652f7b3e43364981526e92d3500d96ec6a4346773b5f043c796020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560d45781516effffffffffffffffffffffffffffff1683526020928301929091019060010160a6565b5050509291505056fea2646970667358221220edf27b439638ed0bf548c8f1562754b9e26352ae161219c2d2bc715ad49c441a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint120[2] memory) {\n uint120[2] memory r;\n {\n uint120 r_0 = 900520415123204281892415007713605193;\n r[0] = r_0;\n }\n {\n uint120 r_1 = 762361272231216916684115282506300537;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000ad6f1598f61e6f39652f7b3e433649000000000000000000000000000000000092d3500d96ec6a4346773b5f043c79" + }, + { + "name": "random-uint120[4]", + "type": "uint120[4]", + "value": [ + "1219281052564635083648712379502713405", + "93457656159301502433307418491713503", + "102719599917863107132050331138439500", + "685684355155884124688297312759859114" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "1219281052564635083648712379502713405" + }, + { + "type": "number", + "value": "93457656159301502433307418491713503" + }, + { + "type": "number", + "value": "102719599917863107132050331138439500" + }, + { + "type": "number", + "value": "685684355155884124688297312759859114" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061014a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d2565b60405180910390f35b6100566100b4565b61005e6100b4565b6eead3327a3eb7164521252b6df45a3d81526e11ffd175b59f0aab7fae35e4f577df60208201526e13c877a00d428b2db4e6ce5926b94c60408201526e840ed94c33df3c10f6110762d847aa6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561010b5781516effffffffffffffffffffffffffffff168352602092830192909101906001016100db565b5050509291505056fea2646970667358221220309bad2e4bcd265a07ddd90270d75f13e5f45d4141b839438b922ea14da427a264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint120[4] memory) {\n uint120[4] memory r;\n {\n uint120 r_0 = 1219281052564635083648712379502713405;\n r[0] = r_0;\n }\n {\n uint120 r_1 = 93457656159301502433307418491713503;\n r[1] = r_1;\n }\n {\n uint120 r_2 = 102719599917863107132050331138439500;\n r[2] = r_2;\n }\n {\n uint120 r_3 = 685684355155884124688297312759859114;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000ead3327a3eb7164521252b6df45a3d000000000000000000000000000000000011ffd175b59f0aab7fae35e4f577df000000000000000000000000000000000013c877a00d428b2db4e6ce5926b94c0000000000000000000000000000000000840ed94c33df3c10f6110762d847aa" + }, + { + "name": "random-uint128[]", + "type": "uint128[]", + "value": [ + "45666880403296733618174986307167854458", + "156110214377450824710234782852359668709", + "260076474189991163105982748342494105931", + "334513186501035354422550055226448553846" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "45666880403296733618174986307167854458" + }, + { + "type": "number", + "value": "156110214377450824710234782852359668709" + }, + { + "type": "number", + "value": "260076474189991163105982748342494105931" + }, + { + "type": "number", + "value": "334513186501035354422550055226448553846" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610233806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061019a565b60405180910390f35b60408051600480825260a08201909252606091600091906020820160808036833701905050905060006f225b1f09d128d8fd9ef7c0126ed41f7a9050808260008151811061009e5761009e6101e7565b60200260200101906001600160801b031690816001600160801b0316815250505060006f7571bbd072dc3db6681e2a2d9e9843e5905080826001815181106100e8576100e86101e7565b60200260200101906001600160801b031690816001600160801b0316815250505060006fc3a8e82db3049517076710e190db114b90508082600281518110610132576101326101e7565b60200260200101906001600160801b031690816001600160801b0316815250505060006ffba8e571c8ff9ce3b25875dfbe6827769050808260038151811061017c5761017c6101e7565b6001600160801b039092166020928302919091019091015250919050565b6020808252825182820181905260009190848201906040850190845b818110156101db5783516001600160801b0316835292840192918401916001016101b6565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220ce93974bde6d050095b3dc900e3c8f76755a2392e8d6cde8aea1edb9c56f279064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint128[] memory) {\n uint128[] memory r = new uint128[](4);\n {\n uint128 r_0 = 45666880403296733618174986307167854458;\n r[0] = r_0;\n }\n {\n uint128 r_1 = 156110214377450824710234782852359668709;\n r[1] = r_1;\n }\n {\n uint128 r_2 = 260076474189991163105982748342494105931;\n r[2] = r_2;\n }\n {\n uint128 r_3 = 334513186501035354422550055226448553846;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000225b1f09d128d8fd9ef7c0126ed41f7a000000000000000000000000000000007571bbd072dc3db6681e2a2d9e9843e500000000000000000000000000000000c3a8e82db3049517076710e190db114b00000000000000000000000000000000fba8e571c8ff9ce3b25875dfbe682776" + }, + { + "name": "random-uint152[4]", + "type": "uint152[4]", + "value": [ + "4220552356137429413566824177900599517854480051", + "5312239766907215008829542419366626735577463991", + "3653815666181609723642551470502014290202870459", + "3071496476582390265034125017396569260408755355" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "4220552356137429413566824177900599517854480051" + }, + { + "type": "number", + "value": "5312239766907215008829542419366626735577463991" + }, + { + "type": "number", + "value": "3653815666181609723642551470502014290202870459" + }, + { + "type": "number", + "value": "3071496476582390265034125017396569260408755355" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061015e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e2565b60405180910390f35b6100566100c4565b61005e6100c4565b72bd4190a145eaec4830bc25897fc16437beb6b3815272ee3585972d20a6272756665e6f24fe7fad7cb7602082015272a3d7bf2fb5092f01f0f07d54800b7305ae42bb60408201527289bb0ce458fdcac531da6c7ab3b9250344d49b6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561011f57815172ffffffffffffffffffffffffffffffffffffff168352602092830192909101906001016100eb565b5050509291505056fea2646970667358221220a1eab2e9439457db93839f9d6cb694967146ba2b0174c7fa3898c4e2e5fe9bc864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint152[4] memory) {\n uint152[4] memory r;\n {\n uint152 r_0 = 4220552356137429413566824177900599517854480051;\n r[0] = r_0;\n }\n {\n uint152 r_1 = 5312239766907215008829542419366626735577463991;\n r[1] = r_1;\n }\n {\n uint152 r_2 = 3653815666181609723642551470502014290202870459;\n r[2] = r_2;\n }\n {\n uint152 r_3 = 3071496476582390265034125017396569260408755355;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000bd4190a145eaec4830bc25897fc16437beb6b300000000000000000000000000ee3585972d20a6272756665e6f24fe7fad7cb700000000000000000000000000a3d7bf2fb5092f01f0f07d54800b7305ae42bb0000000000000000000000000089bb0ce458fdcac531da6c7ab3b9250344d49b" + }, + { + "name": "random-uint16[1]", + "type": "uint16[1]", + "value": ["18606"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "18606" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060e58061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190607b565b60405180910390f35b604d605d565b6053605d565b6148ae8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560a557815161ffff16835291830191908301906001016086565b505050509291505056fea2646970667358221220d2f7208be658ffe80f9fe8a83b4a0c84b54eeb4ff84ccd45e60815678f5f501764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint16[1] memory) {\n uint16[1] memory r;\n {\n uint16 r_0 = 18606;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000048ae" + }, + { + "name": "random-uint16[2]", + "type": "uint16[2]", + "value": ["22538", "44929"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "22538" + }, + { + "type": "number", + "value": "44929" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060ec8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906083565b60405180910390f35b604d6065565b60536065565b61580a815261af816020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560ad57815161ffff16835260209283019290910190600101608c565b5050509291505056fea26469706673582212203a827bf6d1ac0b77c6e92ba29af92c0b572a6ddb0b954013ee4e1af8a630222464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint16[2] memory) {\n uint16[2] memory r;\n {\n uint16 r_0 = 22538;\n r[0] = r_0;\n }\n {\n uint16 r_1 = 44929;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000580a000000000000000000000000000000000000000000000000000000000000af81" + }, + { + "name": "random-uint16[4]", + "type": "uint16[4]", + "value": ["60274", "3135", "35849", "28479"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "60274" + }, + { + "type": "number", + "value": "3135" + }, + { + "type": "number", + "value": "35849" + }, + { + "type": "number", + "value": "28479" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060fc8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906093565b60405180910390f35b604d6075565b60536075565b61eb728152610c3f6020820152618c096040820152616f3f6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560bd57815161ffff16835260209283019290910190600101609c565b5050509291505056fea264697066735822122079b9a559c580f224b84fb4e99062e7c7a7cdecb7134e07be5109a307d03cc39e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint16[4] memory) {\n uint16[4] memory r;\n {\n uint16 r_0 = 60274;\n r[0] = r_0;\n }\n {\n uint16 r_1 = 3135;\n r[1] = r_1;\n }\n {\n uint16 r_2 = 35849;\n r[2] = r_2;\n }\n {\n uint16 r_3 = 28479;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000eb720000000000000000000000000000000000000000000000000000000000000c3f0000000000000000000000000000000000000000000000000000000000008c090000000000000000000000000000000000000000000000000000000000006f3f" + }, + { + "name": "random-uint160[1]", + "type": "uint160[1]", + "value": ["900699532436376032247258387010855706147272699485"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "900699532436376032247258387010855706147272699485" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060fc8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190608d565b60405180910390f35b604d606f565b6053606f565b739dc4c38e6b07e7184220eb646ec954d13c16ae5d8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560bc5781516001600160a01b0316835291830191908301906001016098565b505050509291505056fea26469706673582212204f8ba9b16869940de9167be2f84b33c1f05a7739aeca21573683b3fb41ce6e6f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint160[1] memory) {\n uint160[1] memory r;\n {\n uint160 r_0 = 900699532436376032247258387010855706147272699485;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000009dc4c38e6b07e7184220eb646ec954d13c16ae5d" + }, + { + "name": "random-uint184[3]", + "type": "uint184[3]", + "value": [ + "413642680314259650780405274104799871794204752393583554", + "5487591858019660576937234907840755518967346196025008603", + "3378321539640535906629656316987399506039065831656761684" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "413642680314259650780405274104799871794204752393583554" + }, + { + "type": "number", + "value": "5487591858019660576937234907840755518967346196025008603" + }, + { + "type": "number", + "value": "3378321539640535906629656316987399506039065831656761684" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610145806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d5565b60405180910390f35b6100566100b7565b61005e6100b7565b76045191ce9683ac21bc14f75f462381a75fe0bd03f4bbc2815276394b0ab76f7f8c93b44d47d607443b8210678c7b1d61db602082015276234575662fccac79108878df5a202d57490ff9acc9a9546040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b60038110156101065781516001600160b81b03168352602092830192909101906001016100de565b5050509291505056fea2646970667358221220bb16a28bdb46cc0166943d99cfe6b67b8d3b1de564ae30bf816b63a3fe3bd81064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint184[3] memory) {\n uint184[3] memory r;\n {\n uint184 r_0 = 413642680314259650780405274104799871794204752393583554;\n r[0] = r_0;\n }\n {\n uint184 r_1 = 5487591858019660576937234907840755518967346196025008603;\n r[1] = r_1;\n }\n {\n uint184 r_2 = 3378321539640535906629656316987399506039065831656761684;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000045191ce9683ac21bc14f75f462381a75fe0bd03f4bbc2000000000000000000394b0ab76f7f8c93b44d47d607443b8210678c7b1d61db000000000000000000234575662fccac79108878df5a202d57490ff9acc9a954" + }, + { + "name": "random-uint192[1]", + "type": "uint192[1]", + "value": ["2498568177355823093363623225498144745700498743289031567873"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "2498568177355823093363623225498144745700498743289031567873" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610100806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906091565b60405180910390f35b604d6073565b60536073565b7765e644d9a6724e78bdad2dfcb5df8b4ad6446501b5e62a018152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560c05781516001600160c01b031683529183019190830190600101609c565b505050509291505056fea26469706673582212206486d21eda1b693af4d770671502aaf8791701f330e2d3b46d160f12cb2783d664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint192[1] memory) {\n uint192[1] memory r;\n {\n uint192 r_0 = 2498568177355823093363623225498144745700498743289031567873;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000065e644d9a6724e78bdad2dfcb5df8b4ad6446501b5e62a01" + }, + { + "name": "random-uint208[4]", + "type": "uint208[4]", + "value": [ + "41203718104304195744329694122119311413477902644741402359646386", + "276938912565807513525244330610353216445242763101225651064745332", + "125208482440264421015103569648955929192834657823415577470889819", + "110318807980708436193008130039081969915467909257228631416340172" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "41203718104304195744329694122119311413477902644741402359646386" + }, + { + "type": "number", + "value": "276938912565807513525244330610353216445242763101225651064745332" + }, + { + "type": "number", + "value": "125208482440264421015103569648955929192834657823415577470889819" + }, + { + "type": "number", + "value": "110318807980708436193008130039081969915467909257228631416340172" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061016e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100fe565b60405180910390f35b6100566100e0565b61005e6100e0565b7919a4218959c56a89f4768691805602b54878bcb75b75a31a48b2815279ac56ea05a532ccc0dd496cbff6182831cc1d1267899cb52b2d746020820152794deadcafd6897fae300d9fcaac6e1babe4272f5f3b462a90ef5b60408201527944a6ccd0fe46582b0bd72d1d0a0371a411bccfa5779728957ecc6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561012f5781516001600160d01b0316835260209283019290910190600101610107565b5050509291505056fea2646970667358221220b59ec4a88fc08359268157195c0d030ed2cfc89bfadcd53897511c22d27fa18864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint208[4] memory) {\n uint208[4] memory r;\n {\n uint208 r_0 = 41203718104304195744329694122119311413477902644741402359646386;\n r[0] = r_0;\n }\n {\n uint208 r_1 = 276938912565807513525244330610353216445242763101225651064745332;\n r[1] = r_1;\n }\n {\n uint208 r_2 = 125208482440264421015103569648955929192834657823415577470889819;\n r[2] = r_2;\n }\n {\n uint208 r_3 = 110318807980708436193008130039081969915467909257228631416340172;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000019a4218959c56a89f4768691805602b54878bcb75b75a31a48b2000000000000ac56ea05a532ccc0dd496cbff6182831cc1d1267899cb52b2d740000000000004deadcafd6897fae300d9fcaac6e1babe4272f5f3b462a90ef5b00000000000044a6ccd0fe46582b0bd72d1d0a0371a411bccfa5779728957ecc" + }, + { + "name": "random-uint216[2]", + "type": "uint216[2]", + "value": [ + "29822184318992408335079376645256154420789021837382915413095905583", + "96219170852115341359817153601070875733346207849309015102555742146" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "29822184318992408335079376645256154420789021837382915413095905583" + }, + { + "type": "number", + "value": "96219170852115341359817153601070875733346207849309015102555742146" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610123806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060b5565b60405180910390f35b604d6097565b60536097565b7a487e640fa383c46e54ce9c8c67c1160b2e71b543b6aeaffaae792f81527ae9e556472d79807a27b9f90005620d8fc462926e78a36b0214dfc26020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560e45781516001600160d81b031683526020928301929091019060010160be565b5050509291505056fea2646970667358221220785ba4f393f109c26c467c9bc3be4bdc88413a75ecda1675c8b5fe1f78860aa864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint216[2] memory) {\n uint216[2] memory r;\n {\n uint216 r_0 = 29822184318992408335079376645256154420789021837382915413095905583;\n r[0] = r_0;\n }\n {\n uint216 r_1 = 96219170852115341359817153601070875733346207849309015102555742146;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000487e640fa383c46e54ce9c8c67c1160b2e71b543b6aeaffaae792f0000000000e9e556472d79807a27b9f90005620d8fc462926e78a36b0214dfc2" + }, + { + "name": "random-uint216[3]", + "type": "uint216[3]", + "value": [ + "88190322406694430710395712534741453653707001601680073897198362232", + "48758932413002196192074694062914005811392162031452500736112894255", + "6976406859807583033475209359539552360665380622390650462911140403" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "88190322406694430710395712534741453653707001601680073897198362232" + }, + { + "type": "number", + "value": "48758932413002196192074694062914005811392162031452500736112894255" + }, + { + "type": "number", + "value": "6976406859807583033475209359539552360665380622390650462911140403" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610151806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e1565b60405180910390f35b6100566100c3565b61005e6100c3565b7ad660f8ed3769e7e9f966ad95433c4e0f7b957247c23399baea1e7881527a7686c2150f0ac6c30ae47836d3638a195d4281b1be5af68af8a12f60208201527a10f56dbbd49ad1d5445ba01b98fa93b9dcb12ab30f6cc35ca112336040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b60038110156101125781516001600160d81b03168352602092830192909101906001016100ea565b5050509291505056fea26469706673582212202479cef286080d6d0200c1771fb126fc2cab4f05ba2bc098723af6e6f61f208d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint216[3] memory) {\n uint216[3] memory r;\n {\n uint216 r_0 = 88190322406694430710395712534741453653707001601680073897198362232;\n r[0] = r_0;\n }\n {\n uint216 r_1 = 48758932413002196192074694062914005811392162031452500736112894255;\n r[1] = r_1;\n }\n {\n uint216 r_2 = 6976406859807583033475209359539552360665380622390650462911140403;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000d660f8ed3769e7e9f966ad95433c4e0f7b957247c23399baea1e7800000000007686c2150f0ac6c30ae47836d3638a195d4281b1be5af68af8a12f000000000010f56dbbd49ad1d5445ba01b98fa93b9dcb12ab30f6cc35ca11233" + }, + { + "name": "random-uint224[2]", + "type": "uint224[2]", + "value": [ + "21119040740797690320603773700257272911270273883663008584865809003937", + "14256245386038606091911503154178306494254127673938390365780898636799" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "21119040740797690320603773700257272911270273883663008584865809003937" + }, + { + "type": "number", + "value": "14256245386038606091911503154178306494254127673938390365780898636799" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610125806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060b7565b60405180910390f35b604d6099565b60536099565b7bc8898b5181100f8b9e51b6e1c91838557f8fb603de04be985bd975a181527b875f0348c301b4d0a0f40e43b2260f7a134e52ddbedeef7a2cf663ff6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560e65781516001600160e01b031683526020928301929091019060010160c0565b5050509291505056fea2646970667358221220cbe9ec93d9b03e043660bc25d9cd907d2da2697bb402c887f0edfbb92ae2700464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint224[2] memory) {\n uint224[2] memory r;\n {\n uint224 r_0 = 21119040740797690320603773700257272911270273883663008584865809003937;\n r[0] = r_0;\n }\n {\n uint224 r_1 = 14256245386038606091911503154178306494254127673938390365780898636799;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000c8898b5181100f8b9e51b6e1c91838557f8fb603de04be985bd975a100000000875f0348c301b4d0a0f40e43b2260f7a134e52ddbedeef7a2cf663ff" + }, + { + "name": "random-uint232[3]", + "type": "uint232[3]", + "value": [ + "4668521558413805909965103393359813388021067639593867520712648039639941", + "2662205064857164902199626993470803474734409443133080569861430854129464", + "4797992062173071897403983553172470522978930586099076246241474442331573" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "4668521558413805909965103393359813388021067639593867520712648039639941" + }, + { + "type": "number", + "value": "2662205064857164902199626993470803474734409443133080569861430854129464" + }, + { + "type": "number", + "value": "4797992062173071897403983553172470522978930586099076246241474442331573" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610157806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e7565b60405180910390f35b6100566100c9565b61005e6100c9565b7cad2a43424da683de8b0bedf1096121e49ddc7184aaf997a6f26fc0ab8581527c62bf260723fabfd95ce5abfc5c403c330b9cd7e36c373786c078a1973860208201527cb1f7a89e989040da05f83fda1d8567bd7cf081a1a38e73ce0da0aa85b56040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b60038110156101185781516001600160e81b03168352602092830192909101906001016100f0565b5050509291505056fea26469706673582212200b311a9245227e76656a5413ffdf2d0cbefddefc327b7604e79c1702784ee30b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint232[3] memory) {\n uint232[3] memory r;\n {\n uint232 r_0 = 4668521558413805909965103393359813388021067639593867520712648039639941;\n r[0] = r_0;\n }\n {\n uint232 r_1 = 2662205064857164902199626993470803474734409443133080569861430854129464;\n r[1] = r_1;\n }\n {\n uint232 r_2 = 4797992062173071897403983553172470522978930586099076246241474442331573;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000ad2a43424da683de8b0bedf1096121e49ddc7184aaf997a6f26fc0ab8500000062bf260723fabfd95ce5abfc5c403c330b9cd7e36c373786c078a19738000000b1f7a89e989040da05f83fda1d8567bd7cf081a1a38e73ce0da0aa85b5" + }, + { + "name": "random-uint24[3]", + "type": "uint24[3]", + "value": ["8344979", "15757226", "8562700"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "8344979" + }, + { + "type": "number", + "value": "15757226" + }, + { + "type": "number", + "value": "8562700" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f88061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190608e565b60405180910390f35b604d6070565b60536070565b627f5593815262f06faa60208201526282a80c6040820152919050565b60405180606001604052806003906020820280368337509192915050565b60608101818360005b600381101560b957815162ffffff168352602092830192909101906001016097565b5050509291505056fea264697066735822122065de2703c1404bc2d2d609061a84efa0ede14b8ed1cde1e42e38f01386617f0964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint24[3] memory) {\n uint24[3] memory r;\n {\n uint24 r_0 = 8344979;\n r[0] = r_0;\n }\n {\n uint24 r_1 = 15757226;\n r[1] = r_1;\n }\n {\n uint24 r_2 = 8562700;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000007f55930000000000000000000000000000000000000000000000000000000000f06faa000000000000000000000000000000000000000000000000000000000082a80c" + }, + { + "name": "random-uint240[4]", + "type": "uint240[4]", + "value": [ + "514480607040960154401291872114618892073461297862846287960651314444366115", + "228516001026518288265775552216178745973401538511909912750428580089666972", + "175119565726077620885175450281984305191145113918028584240024980687480247", + "1177203938550527796094917503713397469270711462754137725396254756156296217" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "514480607040960154401291872114618892073461297862846287960651314444366115" + }, + { + "type": "number", + "value": "228516001026518288265775552216178745973401538511909912750428580089666972" + }, + { + "type": "number", + "value": "175119565726077620885175450281984305191145113918028584240024980687480247" + }, + { + "type": "number", + "value": "1177203938550527796094917503713397469270711462754137725396254756156296217" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061017e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061010e565b60405180910390f35b6100566100f0565b61005e6100f0565b7d4a8b257541eabd5368d74203434ab2e1a2f0e89e9fd0d490cad2c253f12381527d211c212b32602505d6769dc6081f3ae4263d7e4766709713a04152eb9d9c60208201527d195f8bb33094355f189f2cb7766f023456a1dde4b89bd63a3022f2b8e5b760408201527daa90ebbfc3d3061dd66beeae4516f1da8a90c396272ff07bee09c1154c196060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561013f5781516001600160f01b0316835260209283019290910190600101610117565b5050509291505056fea2646970667358221220bb1f24204c7d013ea8ab4e4853e537b40f6ca0e13f37bfd9824f0621f074e90164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint240[4] memory) {\n uint240[4] memory r;\n {\n uint240 r_0 = 514480607040960154401291872114618892073461297862846287960651314444366115;\n r[0] = r_0;\n }\n {\n uint240 r_1 = 228516001026518288265775552216178745973401538511909912750428580089666972;\n r[1] = r_1;\n }\n {\n uint240 r_2 = 175119565726077620885175450281984305191145113918028584240024980687480247;\n r[2] = r_2;\n }\n {\n uint240 r_3 = 1177203938550527796094917503713397469270711462754137725396254756156296217;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00004a8b257541eabd5368d74203434ab2e1a2f0e89e9fd0d490cad2c253f1230000211c212b32602505d6769dc6081f3ae4263d7e4766709713a04152eb9d9c0000195f8bb33094355f189f2cb7766f023456a1dde4b89bd63a3022f2b8e5b70000aa90ebbfc3d3061dd66beeae4516f1da8a90c396272ff07bee09c1154c19" + }, + { + "name": "random-uint248[1]", + "type": "uint248[1]", + "value": ["59195936022490386012235769690349421751651891981772023621352212804491791917"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "59195936022490386012235769690349421751651891981772023621352212804491791917" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610107806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906098565b60405180910390f35b604d607a565b6053607a565b7e2180f34cc674d674705cc0b863d20457546aff19dfbb4f037c096b5307ce2d8152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560c75781516001600160f81b03168352918301919083019060010160a3565b505050509291505056fea2646970667358221220cf87a0c732929fafe6ba23b7dc1fb95487095e81f5f0c405e9911357ea902bab64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint248[1] memory) {\n uint248[1] memory r;\n {\n uint248 r_0 = 59195936022490386012235769690349421751651891981772023621352212804491791917;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x002180f34cc674d674705cc0b863d20457546aff19dfbb4f037c096b5307ce2d" + }, + { + "name": "random-uint256[]", + "type": "uint256[]", + "value": [ + "27017644089504856034854420775185329891797080391428430505235708978474084515908", + "27999462578369863326988120298556742218084853514083731877111140639222839153269", + "93876929988080399497146931895479910204051791862694130515536990526996679768735" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "27017644089504856034854420775185329891797080391428430505235708978474084515908" + }, + { + "type": "number", + "value": "27999462578369863326988120298556742218084853514083731877111140639222839153269" + }, + { + "type": "number", + "value": "93876929988080399497146931895479910204051791862694130515536990526996679768735" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101da806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061014a565b60405180910390f35b604080516003808252608082019092526060916000919060208201848036833701905050905060007f3bbb71d456b85d76654bf41bd876b117af1ea6658145f2ff5c01a79955a0c044905080826000815181106100ad576100ad61018e565b6020026020010181815250505060007f3de7225c1dc7016ca6271340a2d6c8984c76a45dc4be325ec0b62692784c9275905080826001815181106100f3576100f361018e565b6020026020010181815250505060007fcf8c759d31c45d5f65415212faef8722f499afd750cc5b0edef9bee5b8c83a9f905080826002815181106101395761013961018e565b602090810291909101015250919050565b6020808252825182820181905260009190848201906040850190845b8181101561018257835183529284019291840191600101610166565b50909695505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212202844bfffe3603604054e312ffff6989d888527ef36de65b03a58be6f9e5cdba064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint256[] memory) {\n uint256[] memory r = new uint256[](3);\n {\n uint256 r_0 = 27017644089504856034854420775185329891797080391428430505235708978474084515908;\n r[0] = r_0;\n }\n {\n uint256 r_1 = 27999462578369863326988120298556742218084853514083731877111140639222839153269;\n r[1] = r_1;\n }\n {\n uint256 r_2 = 93876929988080399497146931895479910204051791862694130515536990526996679768735;\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000033bbb71d456b85d76654bf41bd876b117af1ea6658145f2ff5c01a79955a0c0443de7225c1dc7016ca6271340a2d6c8984c76a45dc4be325ec0b62692784c9275cf8c759d31c45d5f65415212faef8722f499afd750cc5b0edef9bee5b8c83a9f" + }, + { + "name": "random-uint256[4]", + "type": "uint256[4]", + "value": [ + "115533388616945167771676624227617874006047519974371728286849719448165158675980", + "39721604166577722091873079185350248360161250236324286497757331971646722744096", + "71939548414177730162830766342328229346753234847972979868076219585837008931888", + "40875488139423872168645088190646581834960526004867082913005499332228236954332" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "115533388616945167771676624227617874006047519974371728286849719448165158675980" + }, + { + "type": "number", + "value": "39721604166577722091873079185350248360161250236324286497757331971646722744096" + }, + { + "type": "number", + "value": "71939548414177730162830766342328229346753234847972979868076219585837008931888" + }, + { + "type": "number", + "value": "40875488139423872168645088190646581834960526004867082913005499332228236954332" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061017d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6100566100f8565b61005e6100f8565b7fff6d94a4ad6595f646fc1b54c067c5f341be96e69a976a929668aca3c7fae60c81527f57d1a198e5fe52bda5af7276573fd1443133fb550d045eaa7078cc2ddbbd1f2060208201527f9f0c576a8e31085f769ef35b163ccc3a35bcf8bfe99c040d75e244a19fcfcc3060408201527f5a5eb4d830e68903170b92e3b0ab88557961183c3fcc91e11eeb81cda08bcadc6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101561013e57815183526020928301929091019060010161011f565b5050509291505056fea2646970667358221220e26be59b5f6e379185ef7d64f11be6974340f64a9d6178230ba5743f8f5da10b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint256[4] memory) {\n uint256[4] memory r;\n {\n uint256 r_0 = 115533388616945167771676624227617874006047519974371728286849719448165158675980;\n r[0] = r_0;\n }\n {\n uint256 r_1 = 39721604166577722091873079185350248360161250236324286497757331971646722744096;\n r[1] = r_1;\n }\n {\n uint256 r_2 = 71939548414177730162830766342328229346753234847972979868076219585837008931888;\n r[2] = r_2;\n }\n {\n uint256 r_3 = 40875488139423872168645088190646581834960526004867082913005499332228236954332;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xff6d94a4ad6595f646fc1b54c067c5f341be96e69a976a929668aca3c7fae60c57d1a198e5fe52bda5af7276573fd1443133fb550d045eaa7078cc2ddbbd1f209f0c576a8e31085f769ef35b163ccc3a35bcf8bfe99c040d75e244a19fcfcc305a5eb4d830e68903170b92e3b0ab88557961183c3fcc91e11eeb81cda08bcadc" + }, + { + "name": "random-uint32[4]", + "type": "uint32[4]", + "value": ["3239031139", "3136279911", "3664140535", "1100954494"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "3239031139" + }, + { + "type": "number", + "value": "3136279911" + }, + { + "type": "number", + "value": "3664140535" + }, + { + "type": "number", + "value": "1100954494" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610106806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190609b565b60405180910390f35b604d607d565b6053607d565b63c10fb163815263baefd567602082015263da6658f7604082015263419f3b7e6060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560c757815163ffffffff1683526020928301929091019060010160a4565b5050509291505056fea2646970667358221220778bbb7779503c5d2201128b7f9fa8b4122d347d92347ab787ca5f841536fb1b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint32[4] memory) {\n uint32[4] memory r;\n {\n uint32 r_0 = 3239031139;\n r[0] = r_0;\n }\n {\n uint32 r_1 = 3136279911;\n r[1] = r_1;\n }\n {\n uint32 r_2 = 3664140535;\n r[2] = r_2;\n }\n {\n uint32 r_3 = 1100954494;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000c10fb16300000000000000000000000000000000000000000000000000000000baefd56700000000000000000000000000000000000000000000000000000000da6658f700000000000000000000000000000000000000000000000000000000419f3b7e" + }, + { + "name": "random-uint40[1]", + "type": "uint40[1]", + "value": ["222335918422"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "222335918422" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060eb8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190607e565b60405180910390f35b604d6060565b60536060565b6433c440e1568152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560ab57815164ffffffffff16835291830191908301906001016089565b505050509291505056fea2646970667358221220605ea4fc3663603bc86e8d37a5462926a0c487dc62ae186937f018f459be6bce64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint40[1] memory) {\n uint40[1] memory r;\n {\n uint40 r_0 = 222335918422;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000033c440e156" + }, + { + "name": "random-uint72[2]", + "type": "uint72[2]", + "value": ["1955314549752961860144", "801276164215355966511"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "1955314549752961860144" + }, + { + "type": "number", + "value": "801276164215355966511" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e91906091565b60405180910390f35b604d6073565b60536073565b6869ff70bf4cc22682308152682b6ff0ca02c3db842f6020820152919050565b60405180604001604052806002906020820280368337509192915050565b60408101818360005b600281101560c257815168ffffffffffffffffff16835260209283019290910190600101609a565b5050509291505056fea2646970667358221220a9c3a12d8fe5619e2b732317513a6552b222faeeb475aa5fb977fac3d3965efa64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint72[2] memory) {\n uint72[2] memory r;\n {\n uint72 r_0 = 1955314549752961860144;\n r[0] = r_0;\n }\n {\n uint72 r_1 = 801276164215355966511;\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000069ff70bf4cc226823000000000000000000000000000000000000000000000002b6ff0ca02c3db842f" + }, + { + "name": "random-uint72[4]", + "type": "uint72[4]", + "value": [ + "4174641489652064450480", + "3220499808493533651786", + "4593240620151749612599", + "2159259748486513394081" + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "4174641489652064450480" + }, + { + "type": "number", + "value": "3220499808493533651786" + }, + { + "type": "number", + "value": "4593240620151749612599" + }, + { + "type": "number", + "value": "2159259748486513394081" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061011f806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e919060af565b60405180910390f35b604d6091565b60536091565b68e24ec9eca3d6dbf7b0815268ae9569b8e2b69be34a602082015268f90004c7ff07fa1437604082015268750dbfa50001ef81a16060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560e057815168ffffffffffffffffff1683526020928301929091019060010160b8565b5050509291505056fea26469706673582212206cb32bb5e6e4398105049272dc04acdc76a585b1e088148da855a0027dce62e864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint72[4] memory) {\n uint72[4] memory r;\n {\n uint72 r_0 = 4174641489652064450480;\n r[0] = r_0;\n }\n {\n uint72 r_1 = 3220499808493533651786;\n r[1] = r_1;\n }\n {\n uint72 r_2 = 4593240620151749612599;\n r[2] = r_2;\n }\n {\n uint72 r_3 = 2159259748486513394081;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000e24ec9eca3d6dbf7b00000000000000000000000000000000000000000000000ae9569b8e2b69be34a0000000000000000000000000000000000000000000000f90004c7ff07fa14370000000000000000000000000000000000000000000000750dbfa50001ef81a1" + }, + { + "name": "random-uint8[1]", + "type": "uint8[1]", + "value": ["70"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "70" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060e38061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190607a565b60405180910390f35b604d605c565b6053605c565b60468152919050565b60405180602001604052806001906020820280368337509192915050565b602081810190828460005b600181101560a357815160ff16835291830191908301906001016085565b505050509291505056fea264697066735822122017b056ce618038fb7e4bb8fa49841d7d6f310a8c8838f315b70bd78c4961882664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint8[1] memory) {\n uint8[1] memory r;\n {\n uint8 r_0 = 70;\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000046" + }, + { + "name": "random-uint8[4]", + "type": "uint8[4]", + "value": ["228", "127", "183", "39"], + "verbose": { + "type": "array", + "value": [ + { + "type": "number", + "value": "228" + }, + { + "type": "number", + "value": "127" + }, + { + "type": "number", + "value": "183" + }, + { + "type": "number", + "value": "39" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5060f78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60336047565b604051603e9190608f565b60405180910390f35b604d6071565b60536071565b60e48152607f602082015260b7604082015260276060820152919050565b60405180608001604052806004906020820280368337509192915050565b60808101818360005b600481101560b857815160ff168352602092830192909101906001016098565b5050509291505056fea26469706673582212204efb8340c8e04e725b475ceec1a08a0012ff5c86fbb3a5d92e629d1cfdb230f264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint8[4] memory) {\n uint8[4] memory r;\n {\n uint8 r_0 = 228;\n r[0] = r_0;\n }\n {\n uint8 r_1 = 127;\n r[1] = r_1;\n }\n {\n uint8 r_2 = 183;\n r[2] = r_2;\n }\n {\n uint8 r_3 = 39;\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000e4000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000b70000000000000000000000000000000000000000000000000000000000000027" + }, + { + "name": "random-((address,uint232,address))", + "type": "((address,uint232,address))", + "value": [ + [ + "0xd63a6204EfFCC524557B379Ebb728e6bd0Fcc72E", + "1202711231340597912750196706673581213733141612527951494039245154014462", + "0xbB74e998065C2C7364e41Ce2C0e863918023283B" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xd63a6204EfFCC524557B379Ebb728e6bd0Fcc72E" + }, + { + "type": "number", + "value": "1202711231340597912750196706673581213733141612527951494039245154014462" + }, + { + "type": "address", + "value": "0xbB74e998065C2C7364e41Ce2C0e863918023283B" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061014f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6100dc6040805160808101825260006020820181815292820181905260608201529081526040805160808101825260006020820181815292820181905260608201529081526040805160608101825273d63a6204effcc524557b379ebb728e6bd0fcc72e81527c2c9c6d0cbfaf90fe97a1b952ea65a7dc291b5fd49a0054cc477c5dd4fe602082015273bb74e998065c2c7364e41ce2c0e863918023283b918101919091528152919050565b60408051915180516001600160a01b0390811684526020808301516001600160e81b03169085015290820151169082015260600160405180910390f3fea2646970667358221220fee4c796d564d674a1247098013138f4dc4b7578ab1eb88927d21b48a6a13eff64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_88bbf941 {\n address s_0;\n uint232 s_1;\n address s_2;\n }\n\n struct S_b9b4e408 {\n S_88bbf941 s_0;\n }\n\n function test () public pure returns (S_b9b4e408 memory) {\n S_b9b4e408 memory r;\n {\n S_88bbf941 memory r_0;\n {\n address r_0_0 = 0xd63a6204EfFCC524557B379Ebb728e6bd0Fcc72E;\n r_0.s_0 = r_0_0;\n }\n {\n uint232 r_0_1 = 1202711231340597912750196706673581213733141612527951494039245154014462;\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0xbB74e998065C2C7364e41Ce2C0e863918023283B;\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000d63a6204effcc524557b379ebb728e6bd0fcc72e0000002c9c6d0cbfaf90fe97a1b952ea65a7dc291b5fd49a0054cc477c5dd4fe000000000000000000000000bb74e998065c2c7364e41ce2c0e863918023283b" + }, + { + "name": "random-((address[4]),bytes31)", + "type": "((address[4]),bytes31)", + "value": [ + [ + [ + "0xAA0D21d578C29252ABf5189Bc8Ab92Dfbb8Ef9cE", + "0x90F169f622E80bf5e00C23A68FC3C68D454f6676", + "0x01B24a6383d81d78Dca10E16732f37E83BA9D7c9", + "0xf73C6F617C7bD92d752D0D579419c16DB0515268" + ] + ], + "0xaf61bac5d09bb10c4ff33db52d3ffd9a46c3f2964bfd4c659a57cebf93ff13" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xAA0D21d578C29252ABf5189Bc8Ab92Dfbb8Ef9cE" + }, + { + "type": "address", + "value": "0x90F169f622E80bf5e00C23A68FC3C68D454f6676" + }, + { + "type": "address", + "value": "0x01B24a6383d81d78Dca10E16732f37E83BA9D7c9" + }, + { + "type": "address", + "value": "0xf73C6F617C7bD92d752D0D579419c16DB0515268" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xaf61bac5d09bb10c4ff33db52d3ffd9a46c3f2964bfd4c659a57cebf93ff13" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101de806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061015d565b60405180910390f35b610056610107565b61005e610107565b610066610127565b61006e61013f565b73aa0d21d578c29252abf5189bc8ab92dfbb8ef9ce81527390f169f622e80bf5e00c23a68fc3c68d454f66766020808301919091527301b24a6383d81d78dca10e16732f37e83ba9d7c9604083015273f73c6f617c7bd92d752d0d579419c16db051526860608301529082529082527faf61bac5d09bb10c4ff33db52d3ffd9a46c3f2964bfd4c659a57cebf93ff130090820152919050565b604051806040016040528061011a610127565b8152600060209091015290565b604051806020016040528061013a61013f565b905290565b60405180608001604052806004906020820280368337509192915050565b81515160a08201908260005b60048110156101915782516001600160a01b0316825260209283019290910190600101610169565b50505060ff1960208401511660808301529291505056fea2646970667358221220303702ef67f08e2f49ebc995aace7eaf79e895a0af97906ddd5e9e836b6761ac64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5a8b99b2 {\n address[4] s_0;\n }\n\n struct S_48cf2aa9 {\n S_5a8b99b2 s_0;\n bytes31 s_1;\n }\n\n function test () public pure returns (S_48cf2aa9 memory) {\n S_48cf2aa9 memory r;\n {\n S_5a8b99b2 memory r_0;\n {\n address[4] memory r_0_0;\n {\n address r_0_0_0 = 0xAA0D21d578C29252ABf5189Bc8Ab92Dfbb8Ef9cE;\n r_0_0[0] = r_0_0_0;\n }\n {\n address r_0_0_1 = 0x90F169f622E80bf5e00C23A68FC3C68D454f6676;\n r_0_0[1] = r_0_0_1;\n }\n {\n address r_0_0_2 = 0x01B24a6383d81d78Dca10E16732f37E83BA9D7c9;\n r_0_0[2] = r_0_0_2;\n }\n {\n address r_0_0_3 = 0xf73C6F617C7bD92d752D0D579419c16DB0515268;\n r_0_0[3] = r_0_0_3;\n }\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n bytes31 r_1 = bytes31(0xaf61bac5d09bb10c4ff33db52d3ffd9a46c3f2964bfd4c659a57cebf93ff13);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000aa0d21d578c29252abf5189bc8ab92dfbb8ef9ce00000000000000000000000090f169f622e80bf5e00c23a68fc3c68d454f667600000000000000000000000001b24a6383d81d78dca10e16732f37e83ba9d7c9000000000000000000000000f73c6f617c7bd92d752d0d579419c16db0515268af61bac5d09bb10c4ff33db52d3ffd9a46c3f2964bfd4c659a57cebf93ff1300" + }, + { + "name": "random-((bool,bytes2),address)", + "type": "((bool,bytes2),address)", + "value": [[true, "0xa697"], "0x7325CF8De3A9D6DDd2319D73c691953eeA8fCe54"], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xa697" + } + ] + }, + { + "type": "address", + "value": "0x7325CF8De3A9D6DDd2319D73c691953eeA8fCe54" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101098061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160808082018352600082840181815260608085018390529084526020938401829052845192830185528285018281528382018390528352828401918252845180860186526001815261a69760f01b81860190815293819052737325cf8de3a9d6ddd2319d73c691953eea8fce548352855190511515815292516001600160f01b03191693830193909352516001600160a01b0316818401529151918290030190f3fea2646970667358221220aa0754a88f1ca5e54bee1cf4425346253b5b0902aee9c4a061473608ffcd93a164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2e66dfdd {\n bool s_0;\n bytes2 s_1;\n }\n\n struct S_1747f04b {\n S_2e66dfdd s_0;\n address s_1;\n }\n\n function test () public pure returns (S_1747f04b memory) {\n S_1747f04b memory r;\n {\n S_2e66dfdd memory r_0;\n {\n bool r_0_0 = true;\n r_0.s_0 = r_0_0;\n }\n {\n bytes2 r_0_1 = bytes2(0xa697);\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x7325CF8De3A9D6DDd2319D73c691953eeA8fCe54;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001a6970000000000000000000000000000000000000000000000000000000000000000000000000000000000007325cf8de3a9d6ddd2319d73c691953eea8fce54" + }, + { + "name": "random-((bool,uint64,bool))", + "type": "((bool,uint64,bool))", + "value": [[false, "10122368125911376255", false]], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "10122368125911376255" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060ef8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160808082018352600060208084018281528486018390526060808601849052945284519283018552828101828152838601839052838501839052835284518085018652828152808601928352678c79e02e0eaf217f818301908152938190528551905115158152925167ffffffffffffffff1690830152511515818401529151918290030190f3fea26469706673582212204b16dde0e5d37eb141d309c0abbc967bbc8e6bd47d70092feaa00b479fa13dc664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_62b59dd3 {\n bool s_0;\n uint64 s_1;\n bool s_2;\n }\n\n struct S_27bcb218 {\n S_62b59dd3 s_0;\n }\n\n function test () public pure returns (S_27bcb218 memory) {\n S_27bcb218 memory r;\n {\n S_62b59dd3 memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n {\n uint64 r_0_1 = 10122368125911376255;\n r_0.s_1 = r_0_1;\n }\n {\n bool r_0_2 = false;\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c79e02e0eaf217f0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((bytes18,bool,bytes27))", + "type": "((bytes18,bool,bytes27))", + "value": [ + [ + "0x9ff6bfcc5e829b3b8cccc4f189712f198499", + false, + "0x8e3e1895f53a15420ba68ae7cce7af58364560798d36e7dfee7b3d" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x9ff6bfcc5e829b3b8cccc4f189712f198499" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x8e3e1895f53a15420ba68ae7cce7af58364560798d36e7dfee7b3d" + } + ] + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061012a8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160808082018352600060208084018281528486018390526060808601849052945284519283018552828101828152838601839052838501839052835284518085018652808201928352719ff6bfcc5e829b3b8cccc4f189712f19849960701b81527f8e3e1895f53a15420ba68ae7cce7af58364560798d36e7dfee7b3d000000000081870190815293819052855190516dffffffffffffffffffffffffffff191681529151151590820152905164ffffffffff1916818401529151918290030190f3fea264697066735822122012f4ca235c20c00e3eeed61bba4bd1a9f8e71d60775eba7d9ef76cd67b91610764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_59761edf {\n bytes18 s_0;\n bool s_1;\n bytes27 s_2;\n }\n\n struct S_040a1ce6 {\n S_59761edf s_0;\n }\n\n function test () public pure returns (S_040a1ce6 memory) {\n S_040a1ce6 memory r;\n {\n S_59761edf memory r_0;\n {\n bytes18 r_0_0 = bytes18(0x9ff6bfcc5e829b3b8cccc4f189712f198499);\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n {\n bytes27 r_0_2 = bytes27(0x8e3e1895f53a15420ba68ae7cce7af58364560798d36e7dfee7b3d);\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x9ff6bfcc5e829b3b8cccc4f189712f198499000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e3e1895f53a15420ba68ae7cce7af58364560798d36e7dfee7b3d0000000000" + }, + { + "name": "random-((int16[3]),uint56)", + "type": "((int16[3]),uint56)", + "value": [[["2658", "28450", "-10"]], "3910011693527520"], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "2658" + }, + { + "type": "number", + "value": "28450" + }, + { + "type": "number", + "value": "-10" + } + ] + } + ] + }, + { + "type": "number", + "value": "3910011693527520" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610174806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f4565b60405180910390f35b61005661009e565b61005e61009e565b6100666100be565b61006e6100d6565b610a628152616f226020808301919091526009196040830152908252908252660de4228a0f71e090820152919050565b60405180604001604052806100b16100be565b8152600060209091015290565b60405180602001604052806100d16100d6565b905290565b60405180606001604052806003906020820280368337509192915050565b81515160808201908260005b6003811015610122578251600190810b83526020938401939092019101610100565b50505066ffffffffffffff60208401511660608301529291505056fea264697066735822122046458b9df03cc43e806574c4dce0c7f4d037501641e2ad17b5dcf0b4051f172464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7946e555 {\n int16[3] s_0;\n }\n\n struct S_f3b2ca69 {\n S_7946e555 s_0;\n uint56 s_1;\n }\n\n function test () public pure returns (S_f3b2ca69 memory) {\n S_f3b2ca69 memory r;\n {\n S_7946e555 memory r_0;\n {\n int16[3] memory r_0_0;\n {\n int16 r_0_0_0 = 2658;\n r_0_0[0] = r_0_0_0;\n }\n {\n int16 r_0_0_1 = 28450;\n r_0_0[1] = r_0_0_1;\n }\n {\n int16 r_0_0_2 = -10;\n r_0_0[2] = r_0_0_2;\n }\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n uint56 r_1 = 3910011693527520;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000a620000000000000000000000000000000000000000000000000000000000006f22fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000000000000000000000000000000000000000000000000000de4228a0f71e0" + }, + { + "name": "random-((int72,int240),uint184)", + "type": "((int72,int240),uint184)", + "value": [ + [ + "2054931406418876879227", + "-522078630691396206035634848587365494504838641454358570106575967345500506" + ], + "3644028748840914670531209831611415350926741455808483988" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2054931406418876879227" + }, + { + "type": "number", + "value": "-522078630691396206035634848587365494504838641454358570106575967345500506" + } + ] + }, + { + "type": "number", + "value": "3644028748840914670531209831611415350926741455808483988" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101298061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516080808201835260008284018181526060808501839052908452602093840182905284519283018552828501828152838201839052835282840191825284518086018652686f65e6eaa50f04d17b81527fffffb45b06fe6042fc81134e6f72a72da0fb7768caf6297ef2fbef36f65f1ea68186019081529381905276260ba1a63699aae840497f4d05e7475c45238d032fd29483528551905160080b81529251601d0b93830193909352516001600160b81b0316818401529151918290030190f3fea2646970667358221220f55f60720566e41664d942a426515aa715798bd5342f1c40aa1f93d19daa9b3964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_aaf4d0e8 {\n int72 s_0;\n int240 s_1;\n }\n\n struct S_ac33bc48 {\n S_aaf4d0e8 s_0;\n uint184 s_1;\n }\n\n function test () public pure returns (S_ac33bc48 memory) {\n S_ac33bc48 memory r;\n {\n S_aaf4d0e8 memory r_0;\n {\n int72 r_0_0 = 2054931406418876879227;\n r_0.s_0 = r_0_0;\n }\n {\n int240 r_0_1 = -522078630691396206035634848587365494504838641454358570106575967345500506;\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n uint184 r_1 = 3644028748840914670531209831611415350926741455808483988;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000006f65e6eaa50f04d17bffffb45b06fe6042fc81134e6f72a72da0fb7768caf6297ef2fbef36f65f1ea6000000000000000000260ba1a63699aae840497f4d05e7475c45238d032fd294" + }, + { + "name": "random-((string,bytes24),int200)", + "type": "((string,bytes24),int200)", + "value": [ + [ + "Moo é🚀o M éo🚀 🚀🚀ééooooMé MéMo🚀 éMMé MooooéooMo🚀o🚀Méé o", + "0xfa7fcea83029ce3568855d7b238df6bd8a726a599c055f3e" + ], + "677259901820909917913219958219065613738756769035096129228202" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o M éo🚀 🚀🚀ééooooMé MéMo🚀 éMMé MooooéooMo🚀o🚀Méé o" + }, + { + "type": "hexstring", + "value": "0xfa7fcea83029ce3568855d7b238df6bd8a726a599c055f3e" + } + ] + }, + { + "type": "number", + "value": "677259901820909917913219958219065613738756769035096129228202" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610236806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610119565b60405180910390f35b60408051608081018252606091810182815260009282018390528152602081019190915260408051608081018252606091810182815260009282018390528152602081019190915260408051808201909152606081526000602082015260006040518060800160405280605681526020016101ab605691398252507ffa7fcea83029ce3568855d7b238df6bd8a726a599c055f3e0000000000000000602080830191909152908252786be4cb4d25be2e5b138d7738170d60f0c6577088c8b6274daa90820152919050565b60006020808352835160408285015280516040606086015280518060a087015260005b818110156101585782810185015187820160c00152840161013c565b8181111561016a57600060c083890101525b508284015167ffffffffffffffff191660808701529286015192610193604087018560180b9052565b601f01601f19169490940160c0019594505050505056fe4d6f6f20c3a9f09f9a806f204d20c3a96ff09f9a8020f09f9a80f09f9a80c3a9c3a96f6f6f6f4dc3a9204dc3a94d6ff09f9a8020c3a94d4dc3a9204d6f6f6f6fc3a96f6f4d6ff09f9a806ff09f9a804dc3a9c3a9206fa26469706673582212204aa4def073f9e3b99335410a3774ede939b3625ed16c8daa21e5c9f6e5da8fda64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_af191bbc {\n string s_0;\n bytes24 s_1;\n }\n\n struct S_3f6e9b4f {\n S_af191bbc s_0;\n int200 s_1;\n }\n\n function test () public pure returns (S_3f6e9b4f memory) {\n S_3f6e9b4f memory r;\n {\n S_af191bbc memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀o M éo🚀 🚀🚀ééooooMé MéMo🚀 éMMé MooooéooMo🚀o🚀Méé o\";\n r_0.s_0 = r_0_0;\n }\n {\n bytes24 r_0_1 = bytes24(0xfa7fcea83029ce3568855d7b238df6bd8a726a599c055f3e);\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n int200 r_1 = 677259901820909917913219958219065613738756769035096129228202;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000006be4cb4d25be2e5b138d7738170d60f0c6577088c8b6274daa0000000000000000000000000000000000000000000000000000000000000040fa7fcea83029ce3568855d7b238df6bd8a726a599c055f3e000000000000000000000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a806f204d20c3a96ff09f9a8020f09f9a80f09f9a80c3a9c3a96f6f6f6f4dc3a9204dc3a94d6ff09f9a8020c3a94d4dc3a9204d6f6f6f6fc3a96f6f4d6ff09f9a806ff09f9a804dc3a9c3a9206f00000000000000000000" + }, + { + "name": "random-((string),bool,string)", + "type": "((string),bool,string)", + "value": [ + ["Moo é🚀🚀🚀🚀éoéoMooMM oéo🚀oooo 🚀éoo🚀🚀o Méo🚀MoooM éo"], + true, + "Moo é🚀🚀 M Mo oé🚀éé🚀oéMéM🚀oéMooMé o🚀🚀é🚀MM oMo" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀🚀éoéoMooMM oéo🚀oooo 🚀éoo🚀🚀o Méo🚀MoooM éo" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀🚀 M Mo oé🚀éé🚀oéMéM🚀oéMooMé o🚀🚀é🚀MM oMo" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061026c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061013e565b60405180910390f35b604080516080810182526060808201818152825260006020830152918101919091526040805160808101825260608082018181528252600060208301529181019190915260408051602081019091526060815260006040518060800160405280605281526020016101e560529139825250815260016020808301919091526040805160808101909152604d80825260009261019890830139604083015250919050565b6000815180845260005b81811015610117576020818501810151868301820152016100fb565b81811115610129576000602083870101525b50601f01601f19169290920160200192915050565b602081526000825160606020840152805190506020608084015261016560a08401826100f1565b90506020840151151560408401526040840151601f1984830301606085015261018e82826100f1565b9594505050505056fe4d6f6f20c3a9f09f9a80f09f9a80204d204d6f206fc3a9f09f9a80c3a9c3a9f09f9a806fc3a94dc3a94df09f9a806fc3a94d6f6f4dc3a9206ff09f9a80f09f9a80c3a9f09f9a804d4d206f4d6f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a80c3a96fc3a96f4d6f6f4d4d206fc3a96ff09f9a806f6f6f6f20f09f9a80c3a96f6ff09f9a80f09f9a806f204dc3a96ff09f9a804d6f6f6f4d20c3a96fa2646970667358221220e7db1ea62f22526fee582b45ea978cd09e39cf9e2d4559e8565ceb6d70c7c55e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_5b99133f {\n S_97fc4627 s_0;\n bool s_1;\n string s_2;\n }\n\n function test () public pure returns (S_5b99133f memory) {\n S_5b99133f memory r;\n {\n S_97fc4627 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀🚀🚀🚀éoéoMooMM oéo🚀oooo 🚀éoo🚀🚀o Méo🚀MoooM éo\";\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀🚀 M Mo oé🚀éé🚀oéMéM🚀oéMooMé o🚀🚀é🚀MM oMo\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a80c3a96fc3a96f4d6f6f4d4d206fc3a96ff09f9a806f6f6f6f20f09f9a80c3a96f6ff09f9a80f09f9a806f204dc3a96ff09f9a804d6f6f6f4d20c3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a80f09f9a80204d204d6f206fc3a9f09f9a80c3a9c3a9f09f9a806fc3a94dc3a94df09f9a806fc3a94d6f6f4dc3a9206ff09f9a80f09f9a80c3a9f09f9a804d4d206f4d6f00000000000000000000000000000000000000" + }, + { + "name": "random-((string),int240[])", + "type": "((string),int240[])", + "value": [ + ["Moo é🚀"], + ["252523408532637469981311281040757655089179641198058228381679871412938339"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "252523408532637469981311281040757655089179641198058228381679871412938339" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610232806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610160565b60405180910390f35b6040805160608082018352818301818152825260208083018290528351808301855280850183815281528082018390528451808301865292835284518086018652600a8152689adede418753e13f3560b71b81840152835291825283516001808252818601909552929391926000929091828101908036833701905050905060007d24969d22139e0b183d02a4844ee59bc5daf76908b72dbe8fb2a7d4cc266390508082600081518110610104576101046101e6565b601d9290920b60209283029190910182015283019190915250919050565b600081518084526020808501945080840160005b83811015610155578151601d0b87529582019590820190600101610136565b509495945050505050565b60006020808352835160408285015280519050816060850152805180608086015260005b818110156101a05782810184015186820160a001528301610184565b818111156101b257600060a083880101525b5091850151601f92909201601f19168401848103608001604086015290506101dd60a0820183610122565b95945050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220f0f6c37670c501d11faaf48d4e5f40d651b6addd59e3ff768cdeb1f80bc86f0564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_1506b7e8 {\n S_97fc4627 s_0;\n int240[] s_1;\n }\n\n function test () public pure returns (S_1506b7e8 memory) {\n S_1506b7e8 memory r;\n {\n S_97fc4627 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀\";\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n int240[] memory r_1 = new int240[](1);\n {\n int240 r_1_0 = 252523408532637469981311281040757655089179641198058228381679871412938339;\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000024969d22139e0b183d02a4844ee59bc5daf76908b72dbe8fb2a7d4cc2663" + }, + { + "name": "random-((uint152,bytes19,uint200))", + "type": "((uint152,bytes19,uint200))", + "value": [ + [ + "2830297792035068877125201956485875577552225635", + "0x76ab6ec6162b4f55ad50465f87ebc4b7535e1c", + "55376187233103788975733087636124019124977976343850725730404" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2830297792035068877125201956485875577552225635" + }, + { + "type": "hexstring", + "value": "0x76ab6ec6162b4f55ad50465f87ebc4b7535e1c" + }, + { + "type": "number", + "value": "55376187233103788975733087636124019124977976343850725730404" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610164806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6100d960408051608081018252600060208201818152928201819052606082015290815260408051608081018252600060208201818152928201819052606082015290815260408051606081018252727eea39aa095777375d69cf513dd5c9bf19c5638152721daadbb1858ad3d56b541197e1faf12dd4d787606a1b60208201527808d26a5f041efc2c1336ca579427e74727ee1e82d92e48e864918101919091528152919050565b604080519151805172ffffffffffffffffffffffffffffffffffffff1683526020808201516cffffffffffffffffffffffffff1916908401528101516001600160c81b03169082015260600160405180910390f3fea2646970667358221220352498a1028c8501fd09516e410b94f04bb2516b9f5b8d9a24a4c9764bbec01864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_456f96ed {\n uint152 s_0;\n bytes19 s_1;\n uint200 s_2;\n }\n\n struct S_0cdce7a2 {\n S_456f96ed s_0;\n }\n\n function test () public pure returns (S_0cdce7a2 memory) {\n S_0cdce7a2 memory r;\n {\n S_456f96ed memory r_0;\n {\n uint152 r_0_0 = 2830297792035068877125201956485875577552225635;\n r_0.s_0 = r_0_0;\n }\n {\n bytes19 r_0_1 = bytes19(0x76ab6ec6162b4f55ad50465f87ebc4b7535e1c);\n r_0.s_1 = r_0_1;\n }\n {\n uint200 r_0_2 = 55376187233103788975733087636124019124977976343850725730404;\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000007eea39aa095777375d69cf513dd5c9bf19c56376ab6ec6162b4f55ad50465f87ebc4b7535e1c000000000000000000000000000000000000000008d26a5f041efc2c1336ca579427e74727ee1e82d92e48e864" + }, + { + "name": "random-(address,(string[1]))", + "type": "(address,(string[1]))", + "value": [ + "0x4070009fa816BA62361f2991A6230F796B409D29", + [["Moo é🚀🚀M MéMoooMMM M🚀🚀 MoMoéM oMMoéMo🚀oé🚀Méé o oo 🚀oé🚀M o 🚀o"]] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x4070009fa816BA62361f2991A6230F796B409D29" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀M MéMoooMMM M🚀🚀 MoMoéM oMMoéMo🚀oé🚀Méé o oo 🚀oé🚀M o 🚀o" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061024c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061010d565b60405180910390f35b6100566100af565b61005e6100af565b734070009fa816ba62361f2991a6230f796b409d29815261007d6100d7565b6100856100e6565b60006040518060a00160405280606181526020016101b66061913982525081526020820152919050565b604051806040016040528060006001600160a01b031681526020016100d26100d7565b905290565b60405180602001604052806100d25b60405180602001604052806001905b60608152602001906001900390816100f55790505090565b602080825282516001600160a01b0316828201528281015160408084015251606083018290526000919060a084016080850184805b60018110156101a857878403607f1901835284518051808652835b81811015610178578281018901518782018a0152880161015d565b8181111561018857848983890101525b5095870195601f01601f1916949094018601935091850191600101610142565b509197965050505050505056fe4d6f6f20c3a9f09f9a80f09f9a804d2020204dc3a94d6f6f6f4d4d4d204df09f9a80f09f9a80204d6f4d6fc3a94d206f4d4d6fc3a94d6ff09f9a806fc3a9f09f9a804dc3a9c3a9206f206f6f20f09f9a806fc3a9f09f9a804d206f20f09f9a806fa2646970667358221220096969914ecca7431c82ba1032f382e6d35c568363126f40908bf23dc5c17e6464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c6e6ec6b {\n string[1] s_0;\n }\n\n struct S_349b91a2 {\n address s_0;\n S_c6e6ec6b s_1;\n }\n\n function test () public pure returns (S_349b91a2 memory) {\n S_349b91a2 memory r;\n {\n address r_0 = 0x4070009fa816BA62361f2991A6230F796B409D29;\n r.s_0 = r_0;\n }\n {\n S_c6e6ec6b memory r_1;\n {\n string[1] memory r_1_0;\n {\n string memory r_1_0_0 = unicode\"Moo é🚀🚀M MéMoooMMM M🚀🚀 MoMoéM oMMoéMo🚀oé🚀Méé o oo 🚀oé🚀M o 🚀o\";\n r_1_0[0] = r_1_0_0;\n }\n r_1.s_0 = r_1_0;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000004070009fa816ba62361f2991a6230f796b409d2900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a80f09f9a804d2020204dc3a94d6f6f6f4d4d4d204df09f9a80f09f9a80204d6f4d6fc3a94d206f4d4d6fc3a94d6ff09f9a806fc3a9f09f9a804dc3a9c3a9206f206f6f20f09f9a806fc3a9f09f9a804d206f20f09f9a806f00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,address,bool)", + "type": "(address,address,bool)", + "value": [ + "0xf0Cb095158D274ac266Cb70A4381459A835F3Be2", + "0xFE3D7d09aEf2b962F62f9C87306d9Db4a7972E9C", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xf0Cb095158D274ac266Cb70A4381459A835F3Be2" + }, + { + "type": "address", + "value": "0xFE3D7d09aEf2b962F62f9C87306d9Db4a7972E9C" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060eb8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835260208084018290529284018190528351808301855280850191825273f0cb095158d274ac266cb70a4381459a835f3be280825273fe3d7d09aef2b962f62f9c87306d9db4a7972e9c918501918252855190815290516001600160a01b0316938101939093525115158284015291519081900390910190f3fea26469706673582212200c0ef59b78abd21ab307a4d4fb7845f25f817315d136d25764889ded1d5fae8364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e4bf9460 {\n address s_0;\n address s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_e4bf9460 memory) {\n S_e4bf9460 memory r;\n {\n address r_0 = 0xf0Cb095158D274ac266Cb70A4381459A835F3Be2;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xFE3D7d09aEf2b962F62f9C87306d9Db4a7972E9C;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000f0cb095158d274ac266cb70a4381459a835f3be2000000000000000000000000fe3d7d09aef2b962f62f9c87306d9db4a7972e9c0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,address,int256)", + "type": "(address,address,int256)", + "value": [ + "0x78Da65274297C7d93eaF41369c337bAc6Be41313", + "0x5475847eAbdc367e05fd2BC2DEF5967888463Ed8", + "36557931138438184980754714998928843767588762984944280455972475201632878571796" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x78Da65274297C7d93eaF41369c337bAc6Be41313" + }, + { + "type": "address", + "value": "0x5475847eAbdc367e05fd2BC2DEF5967888463Ed8" + }, + { + "type": "number", + "value": "36557931138438184980754714998928843767588762984944280455972475201632878571796" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101078061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051606080820183526000808352602080840182905292840152825180820184527378da65274297c7d93eaf41369c337bac6be41313808252735475847eabdc367e05fd2bc2def5967888463ed88285019081527f50d30e4659dc86a0e94c19cc96cea13453399a03edda8bc514919915e279b1149286019283528551918252516001600160a01b031693810193909352518284015291519081900390910190f3fea2646970667358221220c2102f852b580a58b22b6c1461f5a235d5d0c842c7715589f5d9b77ada33e7ef64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a3741ccb {\n address s_0;\n address s_1;\n int256 s_2;\n }\n\n function test () public pure returns (S_a3741ccb memory) {\n S_a3741ccb memory r;\n {\n address r_0 = 0x78Da65274297C7d93eaF41369c337bAc6Be41313;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x5475847eAbdc367e05fd2BC2DEF5967888463Ed8;\n r.s_1 = r_1;\n }\n {\n int256 r_2 = 36557931138438184980754714998928843767588762984944280455972475201632878571796;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000078da65274297c7d93eaf41369c337bac6be413130000000000000000000000005475847eabdc367e05fd2bc2def5967888463ed850d30e4659dc86a0e94c19cc96cea13453399a03edda8bc514919915e279b114" + }, + { + "name": "random-(address,bool,string)", + "type": "(address,bool,string)", + "value": ["0x236A91d37982Ad555ee719B069B40bF4B02638CE", true, "Moo é🚀oo"], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x236A91d37982Ad555ee719B069B40bF4B02638CE" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀oo" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610164806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b604080516060808201835260008083526020808401919091529183018190528251808201845280840191825273236a91d37982ad555ee719b069b40bf4b02638ce815260018184015283518085018552600c81526b4d6f6f20c3a9f09f9a806f6f60a01b9381019390935291905290516100aa91906100b3565b60405180910390f35b6000602080835260018060a01b038451168184015280840151151560408401526040840151606080850152805180608086015260005b818110156101055782810184015186820160a0015283016100e9565b8181111561011757600060a083880101525b50601f01601f19169390930160a00194935050505056fea2646970667358221220730b2a417587782862055be1282144d606d212c0dc28a3b889e36b0a0b233d3e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5062cedd {\n address s_0;\n bool s_1;\n string s_2;\n }\n\n function test () public pure returns (S_5062cedd memory) {\n S_5062cedd memory r;\n {\n address r_0 = 0x236A91d37982Ad555ee719B069B40bF4B02638CE;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀oo\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000236a91d37982ad555ee719b069b40bf4b02638ce00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a806f6f0000000000000000000000000000000000000000" + }, + { + "name": "random-(address,bool)[1]", + "type": "(address,bool)[1]", + "value": [["0x761bc6d829BdBc0E78e7210b35C5146247E2D197", false]], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x761bc6d829BdBc0E78e7210b35C5146247E2D197" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610145806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100c6565b60405180910390f35b61005661008d565b61005e61008d565b604080518082019091526000602082015273761bc6d829bdbc0e78e7210b35c5146247e2d19781528152919050565b60405180602001604052806001905b604080518082019091526000808252602082015281526020019060019003908161009c5790505090565b604081810190828460005b600181101561010557815180516001600160a01b0316845260209081015115158185015292840192909101906001016100d1565b505050509291505056fea264697066735822122099945ff5fbe1a10f138b733c3c2a644d0be225fba0d70f988f4a7cb1c8b9cc4a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5cde0d08 {\n address s_0;\n bool s_1;\n }\n\n function test () public pure returns (S_5cde0d08[1] memory) {\n S_5cde0d08[1] memory r;\n {\n S_5cde0d08 memory r_0;\n {\n address r_0_0 = 0x761bc6d829BdBc0E78e7210b35C5146247E2D197;\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000761bc6d829bdbc0e78e7210b35c5146247e2d1970000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,bytes24[1])", + "type": "(address,bytes24[1])", + "value": [ + "0xf8d8b25bbF74Dd0CB27872Ec8F8188773763c748", + ["0x225326c8af88067cd9867b7b86de0d5be650a45de9f6735b"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xf8d8b25bbF74Dd0CB27872Ec8F8188773763c748" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x225326c8af88067cd9867b7b86de0d5be650a45de9f6735b" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610177806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f0565b60405180910390f35b6100566100aa565b61005e6100aa565b73f8d8b25bbf74dd0cb27872ec8f8188773763c748815261007d6100d2565b7f225326c8af88067cd9867b7b86de0d5be650a45de9f6735b000000000000000081526020820152919050565b604051806040016040528060006001600160a01b031681526020016100cd6100d2565b905290565b60405180602001604052806001906020820280368337509192915050565b81516001600160a01b0316815260208083015160408301919081840160005b600181101561013757825167ffffffffffffffff19168252918301919083019060010161010f565b505050509291505056fea2646970667358221220143c187cc426f668c0c1c26d9da0e0de75c78a5b1d0795ad6a37d0bfa185e7c964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_74677b20 {\n address s_0;\n bytes24[1] s_1;\n }\n\n function test () public pure returns (S_74677b20 memory) {\n S_74677b20 memory r;\n {\n address r_0 = 0xf8d8b25bbF74Dd0CB27872Ec8F8188773763c748;\n r.s_0 = r_0;\n }\n {\n bytes24[1] memory r_1;\n {\n bytes24 r_1_0 = bytes24(0x225326c8af88067cd9867b7b86de0d5be650a45de9f6735b);\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000f8d8b25bbf74dd0cb27872ec8f8188773763c748225326c8af88067cd9867b7b86de0d5be650a45de9f6735b0000000000000000" + }, + { + "name": "random-(address,int104,address)", + "type": "(address,int104,address)", + "value": [ + "0xAd5D3f55Fc995FdD5Cb598a1747F91d3E0F2C864", + "-5862027941565951016183945613344", + "0xcEc975C313B13506cdD1d244dF9ad26879D21Dcf" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xAd5D3f55Fc995FdD5Cb598a1747F91d3E0F2C864" + }, + { + "type": "number", + "value": "-5862027941565951016183945613344" + }, + { + "type": "address", + "value": "0xcEc975C313B13506cdD1d244dF9ad26879D21Dcf" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060f88061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516060808201835260008083526020808401829052928401528251808201845273ad5d3f55fc995fdd5cb598a1747f91d3e0f2c8648082526c49fd3bdd0ed3a1baba688dd01f1982850190815273cec975c313b13506cdd1d244df9ad26879d21dcf928601928352855191825251600c0b93810193909352516001600160a01b03168284015291519081900390910190f3fea2646970667358221220c06429c58a13b7b2f8730e829cbabbf3da3bcdc2f8f43d063782ddeb0784f77b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2f0618eb {\n address s_0;\n int104 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_2f0618eb memory) {\n S_2f0618eb memory r;\n {\n address r_0 = 0xAd5D3f55Fc995FdD5Cb598a1747F91d3E0F2C864;\n r.s_0 = r_0;\n }\n {\n int104 r_1 = -5862027941565951016183945613344;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xcEc975C313B13506cdD1d244dF9ad26879D21Dcf;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000ad5d3f55fc995fdd5cb598a1747f91d3e0f2c864ffffffffffffffffffffffffffffffffffffffb602c422f12c5e454597722fe0000000000000000000000000cec975c313b13506cdd1d244df9ad26879d21dcf" + }, + { + "name": "random-(address,int40,bytes27)", + "type": "(address,int40,bytes27)", + "value": [ + "0x323c5C00DCCb874F0FE6FCfEB0c8DFd2d3C59e93", + "315340144067", + "0x78889985bd598da9b8b120a4eef75818b349415a594f95fc2f9c40" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x323c5C00DCCb874F0FE6FCfEB0c8DFd2d3C59e93" + }, + { + "type": "number", + "value": "315340144067" + }, + { + "type": "hexstring", + "value": "0x78889985bd598da9b8b120a4eef75818b349415a594f95fc2f9c40" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060fa8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516060808201835260008083526020808401829052928401528251808201845273323c5c00dccb874f0fe6fcfeb0c8dfd2d3c59e9380825264496bbcbdc38285019081527f78889985bd598da9b8b120a4eef75818b349415a594f95fc2f9c40000000000092860192835285519182525160040b938101939093525164ffffffffff19168284015291519081900390910190f3fea26469706673582212209696fe5bea65449bd03a06bfa5d9ac6e17935cd90edb0dd24b7a9ce474e7fc4664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a13eaa97 {\n address s_0;\n int40 s_1;\n bytes27 s_2;\n }\n\n function test () public pure returns (S_a13eaa97 memory) {\n S_a13eaa97 memory r;\n {\n address r_0 = 0x323c5C00DCCb874F0FE6FCfEB0c8DFd2d3C59e93;\n r.s_0 = r_0;\n }\n {\n int40 r_1 = 315340144067;\n r.s_1 = r_1;\n }\n {\n bytes27 r_2 = bytes27(0x78889985bd598da9b8b120a4eef75818b349415a594f95fc2f9c40);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000323c5c00dccb874f0fe6fcfeb0c8dfd2d3c59e93000000000000000000000000000000000000000000000000000000496bbcbdc378889985bd598da9b8b120a4eef75818b349415a594f95fc2f9c400000000000" + }, + { + "name": "random-(address,int56,int72)", + "type": "(address,int56,int72)", + "value": [ + "0xa26cF64Dd8e063D776e57222022529265531e8Fd", + "31713823763577785", + "1095271230009679497321" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xa26cF64Dd8e063D776e57222022529265531e8Fd" + }, + { + "type": "number", + "value": "31713823763577785" + }, + { + "type": "number", + "value": "1095271230009679497321" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060e08061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516060808201835260008083526020808401829052928401528251808201845273a26cf64dd8e063d776e57222022529265531e8fd8082526670ab8dffe5bbb9828501908152683b5ff114b2b81b486992860192835285519182525160060b938101939093525160080b8284015291519081900390910190f3fea264697066735822122099ff434ec3c9ba36049a1de1b20870ae985c0d736cdaf6b720787a014fff4d0664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7f8d0a6a {\n address s_0;\n int56 s_1;\n int72 s_2;\n }\n\n function test () public pure returns (S_7f8d0a6a memory) {\n S_7f8d0a6a memory r;\n {\n address r_0 = 0xa26cF64Dd8e063D776e57222022529265531e8Fd;\n r.s_0 = r_0;\n }\n {\n int56 r_1 = 31713823763577785;\n r.s_1 = r_1;\n }\n {\n int72 r_2 = 1095271230009679497321;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000a26cf64dd8e063d776e57222022529265531e8fd0000000000000000000000000000000000000000000000000070ab8dffe5bbb900000000000000000000000000000000000000000000003b5ff114b2b81b4869" + }, + { + "name": "random-(address,string,address)", + "type": "(address,string,address)", + "value": [ + "0xF5aFCB071AB75192d1949d168240e4B16fEA7C8c", + "Moo é🚀", + "0x0FDAae7DC7eE1D7BB9C4e86b02BDda2Fb3B70C63" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xF5aFCB071AB75192d1949d168240e4B16fEA7C8c" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "address", + "value": "0x0FDAae7DC7eE1D7BB9C4e86b02BDda2Fb3B70C63" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101a8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ec565b60405180910390f35b6100566100b9565b61005e6100b9565b73f5afcb071ab75192d1949d168240e4b16fea7c8c8152604080518082018252600a8152689adede418753e13f3560b71b602080830191909152830152730fdaae7dc7ee1d7bb9c4e86b02bdda2fb3b70c6390820152919050565b604051806060016040528060006001600160a01b031681526020016060815260200160006001600160a01b031681525090565b6000602080835260018060a01b03845116818401528084015160606040850152805180608086015260005b818110156101335782810184015186820160a001528301610117565b8181111561014557600060a083880101525b5060408601516001600160a01b03811660608701529250601f01601f19169390930160a00194935050505056fea26469706673582212203a64965ca2e0a987e56607100104d64e5ab2ae802e6b5aac6eddec5a197c53ac64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e32ad9fa {\n address s_0;\n string s_1;\n address s_2;\n }\n\n function test () public pure returns (S_e32ad9fa memory) {\n S_e32ad9fa memory r;\n {\n address r_0 = 0xF5aFCB071AB75192d1949d168240e4B16fEA7C8c;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x0FDAae7DC7eE1D7BB9C4e86b02BDda2Fb3B70C63;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f5afcb071ab75192d1949d168240e4b16fea7c8c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000fdaae7dc7ee1d7bb9c4e86b02bdda2fb3b70c63000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,string,int152)", + "type": "(address,string,int152)", + "value": [ + "0xB0D35c7e10E1d2B5BC1f5fA0Dd493817A50717dD", + "Moo é🚀ooé oééooé o🚀🚀Mo🚀MoéoM é é🚀M o🚀 o ééoé éMoo🚀 é ", + "-830794207441649821359002726163742903245621954" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xB0D35c7e10E1d2B5BC1f5fA0Dd493817A50717dD" + }, + { + "type": "string", + "value": "Moo é🚀ooé oééooé o🚀🚀Mo🚀MoéoM é é🚀M o🚀 o ééoé éMoo🚀 é " + }, + { + "type": "number", + "value": "-830794207441649821359002726163742903245621954" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061021c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610106565b60405180910390f35b61007e604051806060016040528060006001600160a01b0316815260200160608152602001600060120b81525090565b6100ae604051806060016040528060006001600160a01b0316815260200160608152602001600060120b81525090565b73b0d35c7e10e1d2b5bc1f5fa0dd493817a50717dd81526040805160808101909152605a8082526000919061018d60208301396020830152507225410cbe6d888f0c37855bca35f6ed104a4ac1196040820152919050565b6000602080835260018060a01b03845116818401528084015160606040850152805180608086015260005b8181101561014d5782810184015186820160a001528301610131565b8181111561015f57600060a083880101525b5060408601519250610176606086018460120b9052565b601f01601f19169390930160a00194935050505056fe4d6f6f20c3a9f09f9a806f6fc3a9206fc3a9c3a96f6fc3a9206ff09f9a80f09f9a804d6ff09f9a804d6fc3a96f4d20c3a920c3a9f09f9a804d206ff09f9a80206f2020c3a9c3a96fc3a9202020c3a94d6f6ff09f9a8020c3a920a2646970667358221220e04a16e590d98746e753b40f90afcfd11636bf3a2f7a492064cfb57ef369ea1b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_52385a12 {\n address s_0;\n string s_1;\n int152 s_2;\n }\n\n function test () public pure returns (S_52385a12 memory) {\n S_52385a12 memory r;\n {\n address r_0 = 0xB0D35c7e10E1d2B5BC1f5fA0Dd493817A50717dD;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀ooé oééooé o🚀🚀Mo🚀MoéoM é é🚀M o🚀 o ééoé éMoo🚀 é \";\n r.s_1 = r_1;\n }\n {\n int152 r_2 = -830794207441649821359002726163742903245621954;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b0d35c7e10e1d2b5bc1f5fa0dd493817a50717dd0000000000000000000000000000000000000000000000000000000000000060ffffffffffffffffffffffffffdabef341927770f3c87aa435ca0912efb5b53e000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a806f6fc3a9206fc3a9c3a96f6fc3a9206ff09f9a80f09f9a804d6ff09f9a804d6fc3a96f4d20c3a920c3a9f09f9a804d206ff09f9a80206f2020c3a9c3a96fc3a9202020c3a94d6f6ff09f9a8020c3a920000000000000" + }, + { + "name": "random-(address,uint120)[2]", + "type": "(address,uint120)[2]", + "value": [ + ["0xE7961bBA0739D6f465039ac43D8338a61A974273", "17665720063500248284157095644479476"], + ["0x5B4bD46B87092b03c83c52f02dfCdcFD1159503b", "158265577808074869218355672702350318"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xE7961bBA0739D6f465039ac43D8338a61A974273" + }, + { + "type": "number", + "value": "17665720063500248284157095644479476" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5B4bD46B87092b03c83c52f02dfCdcFD1159503b" + }, + { + "type": "number", + "value": "158265577808074869218355672702350318" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061019b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061010e565b60405180910390f35b6100566100d5565b61005e6100d5565b60408051808201825273e7961bba0739d6f465039ac43d8338a61a97427381526e0366fcbc175102a06c16d1d2abbff46020808301919091529083528151808301909252735b4bd46b87092b03c83c52f02dfcdcfd1159503b82526e1e7b186e7d579c9b287b50b2d173ee82820152820152919050565b60405180604001604052806002905b60408051808201909152600080825260208201528152602001906001900390816100e45790505090565b60808101818360005b600281101561015c57815180516001600160a01b031684526020908101516effffffffffffffffffffffffffffff168185015260409093019290910190600101610117565b5050509291505056fea264697066735822122060634425ea54b022792922c3978f12834e8b95f3cb4804ae4ed0c63ebac77c5c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_aef3efbe {\n address s_0;\n uint120 s_1;\n }\n\n function test () public pure returns (S_aef3efbe[2] memory) {\n S_aef3efbe[2] memory r;\n {\n S_aef3efbe memory r_0;\n {\n address r_0_0 = 0xE7961bBA0739D6f465039ac43D8338a61A974273;\n r_0.s_0 = r_0_0;\n }\n {\n uint120 r_0_1 = 17665720063500248284157095644479476;\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_aef3efbe memory r_1;\n {\n address r_1_0 = 0x5B4bD46B87092b03c83c52f02dfCdcFD1159503b;\n r_1.s_0 = r_1_0;\n }\n {\n uint120 r_1_1 = 158265577808074869218355672702350318;\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000e7961bba0739d6f465039ac43d8338a61a97427300000000000000000000000000000000000366fcbc175102a06c16d1d2abbff40000000000000000000000005b4bd46b87092b03c83c52f02dfcdcfd1159503b00000000000000000000000000000000001e7b186e7d579c9b287b50b2d173ee" + }, + { + "name": "random-(address,uint128,int120)", + "type": "(address,uint128,int120)", + "value": [ + "0x39A96859D728145c3dEC52128858A6c9924d43b7", + "151907670483604861882525997696023917033", + "-521790228120126876734199000823764934" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x39A96859D728145c3dEC52128858A6c9924d43b7" + }, + { + "type": "number", + "value": "151907670483604861882525997696023917033" + }, + { + "type": "number", + "value": "-521790228120126876734199000823764934" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060ff8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051606080820183526000808352602080840182905292840152825180820184527339a96859d728145c3dec52128858a6c9924d43b78082526f72485a6729d3c05d1dcc1f15aad5f1e98285019081526e647e3e964897314d5fda1be37c17c5199286019283528551918252516fffffffffffffffffffffffffffffffff169381019390935251600e0b8284015291519081900390910190f3fea26469706673582212200e814d1583cb4de2017a02551fae7d93f9268572d1910fa77e2da718a6c496b764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_865f3a60 {\n address s_0;\n uint128 s_1;\n int120 s_2;\n }\n\n function test () public pure returns (S_865f3a60 memory) {\n S_865f3a60 memory r;\n {\n address r_0 = 0x39A96859D728145c3dEC52128858A6c9924d43b7;\n r.s_0 = r_0;\n }\n {\n uint128 r_1 = 151907670483604861882525997696023917033;\n r.s_1 = r_1;\n }\n {\n int120 r_2 = -521790228120126876734199000823764934;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000039a96859d728145c3dec52128858a6c9924d43b70000000000000000000000000000000072485a6729d3c05d1dcc1f15aad5f1e9ffffffffffffffffffffffffffffffffff9b81c169b768ceb2a025e41c83e83a" + }, + { + "name": "random-(address,uint208,bool)", + "type": "(address,uint208,bool)", + "value": [ + "0xA70A36231cB9a07EbB3F4805B96BC8203a0b37fE", + "323429390427051529404789257349692114340230698951127655774662688", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xA70A36231cB9a07EbB3F4805B96BC8203a0b37fE" + }, + { + "type": "number", + "value": "323429390427051529404789257349692114340230698951127655774662688" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060f18061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835260208084018290529284018190528351808301855280850191825273a70a36231cb9a07ebb3f4805b96bc8203a0b37fe80825279c945464a4c0dceee7e84ece51771d0c45e46a056934cd8e7b020918501918252855190815290516001600160d01b0316938101939093525115158284015291519081900390910190f3fea2646970667358221220494e4d7f714e690c30e188c23cc7b994050a53ef2acf686ab02a71da7004e8f364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7cbef44c {\n address s_0;\n uint208 s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_7cbef44c memory) {\n S_7cbef44c memory r;\n {\n address r_0 = 0xA70A36231cB9a07EbB3F4805B96BC8203a0b37fE;\n r.s_0 = r_0;\n }\n {\n uint208 r_1 = 323429390427051529404789257349692114340230698951127655774662688;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000a70a36231cb9a07ebb3f4805b96bc8203a0b37fe000000000000c945464a4c0dceee7e84ece51771d0c45e46a056934cd8e7b0200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,uint80,bytes18)", + "type": "(address,uint80,bytes18)", + "value": [ + "0x5b002a52b2ee99768BF418C197AC602b59E6aA36", + "535876505027722892420985", + "0x05d4e3d8652c7eb55a0c62dc29135cc092b6" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5b002a52b2ee99768BF418C197AC602b59E6aA36" + }, + { + "type": "number", + "value": "535876505027722892420985" + }, + { + "type": "hexstring", + "value": "0x05d4e3d8652c7eb55a0c62dc29135cc092b6" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101068061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835260208084018290529284015282518082018452735b002a52b2ee99768bf418c197ac602b59e6aa36808252697179ec6d8f4ed34a27798285019081527102ea71ec32963f5aad06316e1489ae60495b60711b92860192835285519182525169ffffffffffffffffffff1693810193909352516dffffffffffffffffffffffffffff19168284015291519081900390910190f3fea26469706673582212200fc48f1608cee25b599a85e519b06524cd6dccae6860edb7f802205a0a7612f964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_28e62eb8 {\n address s_0;\n uint80 s_1;\n bytes18 s_2;\n }\n\n function test () public pure returns (S_28e62eb8 memory) {\n S_28e62eb8 memory r;\n {\n address r_0 = 0x5b002a52b2ee99768BF418C197AC602b59E6aA36;\n r.s_0 = r_0;\n }\n {\n uint80 r_1 = 535876505027722892420985;\n r.s_1 = r_1;\n }\n {\n bytes18 r_2 = bytes18(0x05d4e3d8652c7eb55a0c62dc29135cc092b6);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000005b002a52b2ee99768bf418c197ac602b59e6aa36000000000000000000000000000000000000000000007179ec6d8f4ed34a277905d4e3d8652c7eb55a0c62dc29135cc092b60000000000000000000000000000" + }, + { + "name": "random-(address[][])", + "type": "(address[][])", + "value": [ + [ + [ + "0x931F2278a5FAE3c6Bd08Ad0Ac5c5C46eb8234690", + "0x4dB039a62e7B4A306058b0C55669fb12745ed411", + "0x24b8c1B4c8149f992D50a59b18F6FDa9BCF80AAA", + "0x742b6a953dEdF2B9F7AF193adE638e58889044c5" + ], + [ + "0x6B3d919A128C7b6eda8087D80E2De2F623cA148e", + "0x24190097432922db868806812dDD3DFeae5eA426", + "0x7b09e01b84E145b719D90fd01c0A2146Da4979ad", + "0x11c0255C4EC400C74796F2043D7A8ef437C92211" + ], + [ + "0x24cfFEd82A753aaE1a37829073850768Aa51EFe0", + "0xC8c621dEee396747ffa21EdBF466AcE416EC08aE", + "0x5e7b307F152940AFe7AA81bCd28CC6e0DeC955fd", + "0x59fdB9324D8A3007EA88AC609F1C5B22009945E2" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x931F2278a5FAE3c6Bd08Ad0Ac5c5C46eb8234690" + }, + { + "type": "address", + "value": "0x4dB039a62e7B4A306058b0C55669fb12745ed411" + }, + { + "type": "address", + "value": "0x24b8c1B4c8149f992D50a59b18F6FDa9BCF80AAA" + }, + { + "type": "address", + "value": "0x742b6a953dEdF2B9F7AF193adE638e58889044c5" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x6B3d919A128C7b6eda8087D80E2De2F623cA148e" + }, + { + "type": "address", + "value": "0x24190097432922db868806812dDD3DFeae5eA426" + }, + { + "type": "address", + "value": "0x7b09e01b84E145b719D90fd01c0A2146Da4979ad" + }, + { + "type": "address", + "value": "0x11c0255C4EC400C74796F2043D7A8ef437C92211" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x24cfFEd82A753aaE1a37829073850768Aa51EFe0" + }, + { + "type": "address", + "value": "0xC8c621dEee396747ffa21EdBF466AcE416EC08aE" + }, + { + "type": "address", + "value": "0x5e7b307F152940AFe7AA81bCd28CC6e0DeC955fd" + }, + { + "type": "address", + "value": "0x59fdB9324D8A3007EA88AC609F1C5B22009945E2" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506105fe806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610515565b60405180910390f35b60408051602080820183526060808352835191820184528152825160038082526080820190945291929091600091816020015b606081526020019060019003908161008157505060408051600480825260a082019092529192506000919060208201608080368337019050509050600073931f2278a5fae3c6bd08ad0ac5c5c46eb8234690905080826000815181106100e9576100e96105b2565b60200260200101906001600160a01b031690816001600160a01b031681525050506000734db039a62e7b4a306058b0c55669fb12745ed41190508082600181518110610137576101376105b2565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007324b8c1b4c8149f992d50a59b18f6fda9bcf80aaa90508082600281518110610185576101856105b2565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073742b6a953dedf2b9f7af193ade638e58889044c5905080826003815181106101d3576101d36105b2565b60200260200101906001600160a01b031690816001600160a01b031681525050508082600081518110610208576102086105b2565b60209081029190910101525060408051600480825260a082019092526000918160200160208202803683370190505090506000736b3d919a128c7b6eda8087d80e2de2f623ca148e90508082600081518110610266576102666105b2565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007324190097432922db868806812ddd3dfeae5ea426905080826001815181106102b4576102b46105b2565b60200260200101906001600160a01b031690816001600160a01b031681525050506000737b09e01b84e145b719d90fd01c0a2146da4979ad90508082600281518110610302576103026105b2565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007311c0255c4ec400c74796f2043d7a8ef437c9221190508082600381518110610350576103506105b2565b60200260200101906001600160a01b031690816001600160a01b031681525050508082600181518110610385576103856105b2565b60209081029190910101525060408051600480825260a0820190925260009181602001602082028036833701905050905060007324cffed82a753aae1a37829073850768aa51efe0905080826000815181106103e3576103e36105b2565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073c8c621deee396747ffa21edbf466ace416ec08ae90508082600181518110610431576104316105b2565b60200260200101906001600160a01b031690816001600160a01b031681525050506000735e7b307f152940afe7aa81bcd28cc6e0dec955fd9050808260028151811061047f5761047f6105b2565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007359fdb9324d8a3007ea88ac609f1c5b22009945e2905080826003815181106104cd576104cd6105b2565b60200260200101906001600160a01b031690816001600160a01b031681525050508082600281518110610502576105026105b2565b6020908102919091010152508152919050565b60006020808352604083018451828386015281815180845260608701915060608160051b880101935084830192506000805b828110156105a457888603605f19018452845180518088529088019088880190845b8181101561058e5783516001600160a01b03168352928a0192918a0191600101610569565b5090975050509386019392860192600101610547565b509398975050505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220add21478bb59d0b9ae0ddc5146903af3976b3fcccd5f91d394e2c679fe16d73464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fe23aea4 {\n address[][] s_0;\n }\n\n function test () public pure returns (S_fe23aea4 memory) {\n S_fe23aea4 memory r;\n {\n address[][] memory r_0 = new address[][](3);\n {\n address[] memory r_0_0 = new address[](4);\n {\n address r_0_0_0 = 0x931F2278a5FAE3c6Bd08Ad0Ac5c5C46eb8234690;\n r_0_0[0] = r_0_0_0;\n }\n {\n address r_0_0_1 = 0x4dB039a62e7B4A306058b0C55669fb12745ed411;\n r_0_0[1] = r_0_0_1;\n }\n {\n address r_0_0_2 = 0x24b8c1B4c8149f992D50a59b18F6FDa9BCF80AAA;\n r_0_0[2] = r_0_0_2;\n }\n {\n address r_0_0_3 = 0x742b6a953dEdF2B9F7AF193adE638e58889044c5;\n r_0_0[3] = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n address[] memory r_0_1 = new address[](4);\n {\n address r_0_1_0 = 0x6B3d919A128C7b6eda8087D80E2De2F623cA148e;\n r_0_1[0] = r_0_1_0;\n }\n {\n address r_0_1_1 = 0x24190097432922db868806812dDD3DFeae5eA426;\n r_0_1[1] = r_0_1_1;\n }\n {\n address r_0_1_2 = 0x7b09e01b84E145b719D90fd01c0A2146Da4979ad;\n r_0_1[2] = r_0_1_2;\n }\n {\n address r_0_1_3 = 0x11c0255C4EC400C74796F2043D7A8ef437C92211;\n r_0_1[3] = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n {\n address[] memory r_0_2 = new address[](4);\n {\n address r_0_2_0 = 0x24cfFEd82A753aaE1a37829073850768Aa51EFe0;\n r_0_2[0] = r_0_2_0;\n }\n {\n address r_0_2_1 = 0xC8c621dEee396747ffa21EdBF466AcE416EC08aE;\n r_0_2[1] = r_0_2_1;\n }\n {\n address r_0_2_2 = 0x5e7b307F152940AFe7AA81bCd28CC6e0DeC955fd;\n r_0_2[2] = r_0_2_2;\n }\n {\n address r_0_2_3 = 0x59fdB9324D8A3007EA88AC609F1C5B22009945E2;\n r_0_2[3] = r_0_2_3;\n }\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000931f2278a5fae3c6bd08ad0ac5c5c46eb82346900000000000000000000000004db039a62e7b4a306058b0c55669fb12745ed41100000000000000000000000024b8c1b4c8149f992d50a59b18f6fda9bcf80aaa000000000000000000000000742b6a953dedf2b9f7af193ade638e58889044c500000000000000000000000000000000000000000000000000000000000000040000000000000000000000006b3d919a128c7b6eda8087d80e2de2f623ca148e00000000000000000000000024190097432922db868806812ddd3dfeae5ea4260000000000000000000000007b09e01b84e145b719d90fd01c0a2146da4979ad00000000000000000000000011c0255c4ec400c74796f2043d7a8ef437c92211000000000000000000000000000000000000000000000000000000000000000400000000000000000000000024cffed82a753aae1a37829073850768aa51efe0000000000000000000000000c8c621deee396747ffa21edbf466ace416ec08ae0000000000000000000000005e7b307f152940afe7aa81bcd28cc6e0dec955fd00000000000000000000000059fdb9324d8a3007ea88ac609f1c5b22009945e2" + }, + { + "name": "random-(address[1],bytes19)", + "type": "(address[1],bytes19)", + "value": [ + ["0x9eA5619ECb0206cBa28deB8976e02B1427CAE07C"], + "0x8118989d2543b655adc67966de32a8ca789ad0" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x9eA5619ECb0206cBa28deB8976e02B1427CAE07C" + } + ] + }, + { + "type": "hexstring", + "value": "0x8118989d2543b655adc67966de32a8ca789ad0" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610168806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100de565b60405180910390f35b6100566100a0565b61005e6100a0565b6100666100c0565b739ea5619ecb0206cba28deb8976e02b1427cae07c815281527208118989d2543b655adc67966de32a8ca789ad606c1b6020820152919050565b60405180604001604052806100b36100c0565b8152600060209091015290565b60405180602001604052806001906020820280368337509192915050565b815160408201908260005b60018110156101115782516001600160a01b03168252602092830192909101906001016100e9565b5050506020928301516cffffffffffffffffffffffffff191691909201529056fea26469706673582212202ecdf6f0609d449a12338fbb5c4729fb62cacd4412a257625ea66660d51acbe564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9bde3cfe {\n address[1] s_0;\n bytes19 s_1;\n }\n\n function test () public pure returns (S_9bde3cfe memory) {\n S_9bde3cfe memory r;\n {\n address[1] memory r_0;\n {\n address r_0_0 = 0x9eA5619ECb0206cBa28deB8976e02B1427CAE07C;\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n bytes19 r_1 = bytes19(0x8118989d2543b655adc67966de32a8ca789ad0);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000009ea5619ecb0206cba28deb8976e02b1427cae07c8118989d2543b655adc67966de32a8ca789ad000000000000000000000000000" + }, + { + "name": "random-(address[1],bytes25)", + "type": "(address[1],bytes25)", + "value": [ + ["0xca4717F973650512FeEe7906E047F7f92008c696"], + "0xc60f7e89d678940958eb7555a63dba195322f24e5af5cc0ce2" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xca4717F973650512FeEe7906E047F7f92008c696" + } + ] + }, + { + "type": "hexstring", + "value": "0xc60f7e89d678940958eb7555a63dba195322f24e5af5cc0ce2" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061016c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e8565b60405180910390f35b6100566100aa565b61005e6100aa565b6100666100ca565b73ca4717f973650512feee7906e047f7f92008c696815281527fc60f7e89d678940958eb7555a63dba195322f24e5af5cc0ce2000000000000006020820152919050565b60405180604001604052806100bd6100ca565b8152600060209091015290565b60405180602001604052806001906020820280368337509192915050565b815160408201908260005b600181101561011b5782516001600160a01b03168252602092830192909101906001016100f3565b50505060209283015166ffffffffffffff191691909201529056fea2646970667358221220d40a82955a630bcb18781b26f49641c5e5e09aff42307336dad53b31526f0a8f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ece5cb32 {\n address[1] s_0;\n bytes25 s_1;\n }\n\n function test () public pure returns (S_ece5cb32 memory) {\n S_ece5cb32 memory r;\n {\n address[1] memory r_0;\n {\n address r_0_0 = 0xca4717F973650512FeEe7906E047F7f92008c696;\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n bytes25 r_1 = bytes25(0xc60f7e89d678940958eb7555a63dba195322f24e5af5cc0ce2);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000ca4717f973650512feee7906e047f7f92008c696c60f7e89d678940958eb7555a63dba195322f24e5af5cc0ce200000000000000" + }, + { + "name": "random-(address[3])[]", + "type": "(address[3])[]", + "value": [ + [ + [ + "0x3B398C64AC2b592B8EdDB028feB2714c1a0647B6", + "0x6E73301053BD226d0AAc6B231794741A9f106e77", + "0x505d3c0174CcDd1F14997dBc4fd6ab20C2CC3DE1" + ] + ], + [ + [ + "0xA27e9628FB59b1c84edaf42F149e954b85c6aF6d", + "0x37F1F9d8977470549e4A894bA83A44201587550B", + "0xEacc29Dfc289Fee59a835a420780c0e85f7cce63" + ] + ], + [ + [ + "0x5e779DC925d07e0db594C126E720bB6F0010F5e5", + "0xe0E0A89d8F11e8c104a28DF7Ab1B2065915a0239", + "0x02b9e2F6Def1a9cB3Bb5064BCd1247C86fE43630" + ] + ], + [ + [ + "0x8308B6bbB2c2AD178AC547C0e8E644F9b49E0829", + "0xC4f5d2a5ace8C6e899105DE4Ad340E0405FC1918", + "0x7FE090E8E6f2ff82204B83d081A69E1f759aac62" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x3B398C64AC2b592B8EdDB028feB2714c1a0647B6" + }, + { + "type": "address", + "value": "0x6E73301053BD226d0AAc6B231794741A9f106e77" + }, + { + "type": "address", + "value": "0x505d3c0174CcDd1F14997dBc4fd6ab20C2CC3DE1" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xA27e9628FB59b1c84edaf42F149e954b85c6aF6d" + }, + { + "type": "address", + "value": "0x37F1F9d8977470549e4A894bA83A44201587550B" + }, + { + "type": "address", + "value": "0xEacc29Dfc289Fee59a835a420780c0e85f7cce63" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x5e779DC925d07e0db594C126E720bB6F0010F5e5" + }, + { + "type": "address", + "value": "0xe0E0A89d8F11e8c104a28DF7Ab1B2065915a0239" + }, + { + "type": "address", + "value": "0x02b9e2F6Def1a9cB3Bb5064BCd1247C86fE43630" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x8308B6bbB2c2AD178AC547C0e8E644F9b49E0829" + }, + { + "type": "address", + "value": "0xC4f5d2a5ace8C6e899105DE4Ad340E0405FC1918" + }, + { + "type": "address", + "value": "0x7FE090E8E6f2ff82204B83d081A69E1f759aac62" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610380806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102c0565b60405180910390f35b60408051600480825260a0820190925260609160009190816020015b61007261028a565b81526020019060019003908161006a57905050905061008f61028a565b6100976102a2565b733b398c64ac2b592b8eddb028feb2714c1a0647b68152736e73301053bd226d0aac6b231794741a9f106e77602082015273505d3c0174ccdd1f14997dbc4fd6ab20c2cc3de1604082015281528151819083906000906100f9576100f9610334565b60200260200101819052505061010d61028a565b6101156102a2565b73a27e9628fb59b1c84edaf42f149e954b85c6af6d81527337f1f9d8977470549e4a894ba83a44201587550b602082015273eacc29dfc289fee59a835a420780c0e85f7cce6360408201528152815181908390600190811061017957610179610334565b60200260200101819052505061018d61028a565b6101956102a2565b735e779dc925d07e0db594c126e720bb6f0010f5e5815273e0e0a89d8f11e8c104a28df7ab1b2065915a023960208201527302b9e2f6def1a9cb3bb5064bcd1247c86fe436306040820152815281518190839060029081106101f9576101f9610334565b60200260200101819052505061020d61028a565b6102156102a2565b738308b6bbb2c2ad178ac547c0e8e644f9b49e0829815273c4f5d2a5ace8c6e899105de4ad340e0405fc19186020820152737fe090e8e6f2ff82204b83d081a69e1f759aac6260408201528152815181908390600390811061027957610279610334565b602090810291909101015250919050565b604051806020016040528061029d6102a2565b905290565b60405180606001604052806003906020820280368337509192915050565b602080825282518282018190526000919084820190604085019084805b828110156103275784515184835b60038110156103115782516001600160a01b0316825291880191908801906001016102eb565b50505093850193606093909301926001016102dd565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212207ed558389fff719684fc747872194d4d00b47baf3e9c21865b618d247caf8d8a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_4b82385b {\n address[3] s_0;\n }\n\n function test () public pure returns (S_4b82385b[] memory) {\n S_4b82385b[] memory r = new S_4b82385b[](4);\n {\n S_4b82385b memory r_0;\n {\n address[3] memory r_0_0;\n {\n address r_0_0_0 = 0x3B398C64AC2b592B8EdDB028feB2714c1a0647B6;\n r_0_0[0] = r_0_0_0;\n }\n {\n address r_0_0_1 = 0x6E73301053BD226d0AAc6B231794741A9f106e77;\n r_0_0[1] = r_0_0_1;\n }\n {\n address r_0_0_2 = 0x505d3c0174CcDd1F14997dBc4fd6ab20C2CC3DE1;\n r_0_0[2] = r_0_0_2;\n }\n r_0.s_0 = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_4b82385b memory r_1;\n {\n address[3] memory r_1_0;\n {\n address r_1_0_0 = 0xA27e9628FB59b1c84edaf42F149e954b85c6aF6d;\n r_1_0[0] = r_1_0_0;\n }\n {\n address r_1_0_1 = 0x37F1F9d8977470549e4A894bA83A44201587550B;\n r_1_0[1] = r_1_0_1;\n }\n {\n address r_1_0_2 = 0xEacc29Dfc289Fee59a835a420780c0e85f7cce63;\n r_1_0[2] = r_1_0_2;\n }\n r_1.s_0 = r_1_0;\n }\n r[1] = r_1;\n }\n {\n S_4b82385b memory r_2;\n {\n address[3] memory r_2_0;\n {\n address r_2_0_0 = 0x5e779DC925d07e0db594C126E720bB6F0010F5e5;\n r_2_0[0] = r_2_0_0;\n }\n {\n address r_2_0_1 = 0xe0E0A89d8F11e8c104a28DF7Ab1B2065915a0239;\n r_2_0[1] = r_2_0_1;\n }\n {\n address r_2_0_2 = 0x02b9e2F6Def1a9cB3Bb5064BCd1247C86fE43630;\n r_2_0[2] = r_2_0_2;\n }\n r_2.s_0 = r_2_0;\n }\n r[2] = r_2;\n }\n {\n S_4b82385b memory r_3;\n {\n address[3] memory r_3_0;\n {\n address r_3_0_0 = 0x8308B6bbB2c2AD178AC547C0e8E644F9b49E0829;\n r_3_0[0] = r_3_0_0;\n }\n {\n address r_3_0_1 = 0xC4f5d2a5ace8C6e899105DE4Ad340E0405FC1918;\n r_3_0[1] = r_3_0_1;\n }\n {\n address r_3_0_2 = 0x7FE090E8E6f2ff82204B83d081A69E1f759aac62;\n r_3_0[2] = r_3_0_2;\n }\n r_3.s_0 = r_3_0;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000040000000000000000000000003b398c64ac2b592b8eddb028feb2714c1a0647b60000000000000000000000006e73301053bd226d0aac6b231794741a9f106e77000000000000000000000000505d3c0174ccdd1f14997dbc4fd6ab20c2cc3de1000000000000000000000000a27e9628fb59b1c84edaf42f149e954b85c6af6d00000000000000000000000037f1f9d8977470549e4a894ba83a44201587550b000000000000000000000000eacc29dfc289fee59a835a420780c0e85f7cce630000000000000000000000005e779dc925d07e0db594c126e720bb6f0010f5e5000000000000000000000000e0e0a89d8f11e8c104a28df7ab1b2065915a023900000000000000000000000002b9e2f6def1a9cb3bb5064bcd1247c86fe436300000000000000000000000008308b6bbb2c2ad178ac547c0e8e644f9b49e0829000000000000000000000000c4f5d2a5ace8c6e899105de4ad340e0405fc19180000000000000000000000007fe090e8e6f2ff82204b83d081a69e1f759aac62" + }, + { + "name": "random-(bool,(bytes26),address)", + "type": "(bool,(bytes26),address)", + "value": [ + true, + ["0x8443e752c9bc6f845ba362c5844fa248edd0f9c64880b7dc75bf"], + "0x01994E0aDD9AA9B0a414A8A35415fAB74b23003b" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8443e752c9bc6f845ba362c5844fa248edd0f9c64880b7dc75bf" + } + ] + }, + { + "type": "address", + "value": "0x01994E0aDD9AA9B0a414A8A35415fAB74b23003b" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101278061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835283516020808201865282825280850191909152928401819052835180830185528181528451808501865282815281850190815281860192835260018252855180860187527f8443e752c9bc6f845ba362c5844fa248edd0f9c64880b7dc75bf000000000000815281527301994e0add9aa9b0a414a8a35415fab74b23003b83528551915115158252515165ffffffffffff191693810193909352516001600160a01b03168284015291519081900390910190f3fea2646970667358221220b9584745d47f251e595bf1f287450b55108e24fff761f315f9b93c8c864f355064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_da4d5856 {\n bytes26 s_0;\n }\n\n struct S_5ee5da55 {\n bool s_0;\n S_da4d5856 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_5ee5da55 memory) {\n S_5ee5da55 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n S_da4d5856 memory r_1;\n {\n bytes26 r_1_0 = bytes26(0x8443e752c9bc6f845ba362c5844fa248edd0f9c64880b7dc75bf);\n r_1.s_0 = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x01994E0aDD9AA9B0a414A8A35415fAB74b23003b;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000018443e752c9bc6f845ba362c5844fa248edd0f9c64880b7dc75bf00000000000000000000000000000000000001994e0add9aa9b0a414a8a35415fab74b23003b" + }, + { + "name": "random-(bool,address,address)", + "type": "(bool,address,address)", + "value": [ + true, + "0x671E243fc99fd38E07bC985Dda9f52E9E8DF6c8A", + "0x1e2b411A19D57b59A0e57CD6D7A35E293E9B985A" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x671E243fc99fd38E07bC985Dda9f52E9E8DF6c8A" + }, + { + "type": "address", + "value": "0x1e2b411A19D57b59A0e57CD6D7A35E293E9B985A" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060ee8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835260208084018290529284015282518082018452600180825273671e243fc99fd38e07bc985dda9f52e9e8df6c8a828501908152731e2b411a19d57b59a0e57cd6d7a35e293e9b985a9286019283528551918252516001600160a01b039081169482019490945290519092168284015291519081900390910190f3fea2646970667358221220c7015b3c4fcc747ce0f545d00d08a95b7551dc2ae937bba09313dcc422dbccf764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2f7d42be {\n bool s_0;\n address s_1;\n address s_2;\n }\n\n function test () public pure returns (S_2f7d42be memory) {\n S_2f7d42be memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x671E243fc99fd38E07bC985Dda9f52E9E8DF6c8A;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x1e2b411A19D57b59A0e57CD6D7A35E293E9B985A;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000671e243fc99fd38e07bc985dda9f52e9e8df6c8a0000000000000000000000001e2b411a19d57b59a0e57cd6d7a35e293e9b985a" + }, + { + "name": "random-(bool,address,bytes31)", + "type": "(bool,address,bytes31)", + "value": [ + false, + "0xF7F5Baed1b55dEA8d098E0bb795797FAAA65c666", + "0x837329d9b01474f0fc2c72a5eed325ab32d690f78ef8ffe172de93b46f1057" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xF7F5Baed1b55dEA8d098E0bb795797FAAA65c666" + }, + { + "type": "hexstring", + "value": "0x837329d9b01474f0fc2c72a5eed325ab32d690f78ef8ffe172de93b46f1057" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060f98061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835260208084018290529284018190528351808301855281815273f7f5baed1b55dea8d098e0bb795797faaa65c6668185019081527f837329d9b01474f0fc2c72a5eed325ab32d690f78ef8ffe172de93b46f1057009186019182528551928352516001600160a01b031693820193909352915160ff19168284015291519081900390910190f3fea2646970667358221220723598d9ead6adf173102f453b9d23dec2d83e778a93cfc293f6ae0a9f3ab1f064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2e2817ec {\n bool s_0;\n address s_1;\n bytes31 s_2;\n }\n\n function test () public pure returns (S_2e2817ec memory) {\n S_2e2817ec memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xF7F5Baed1b55dEA8d098E0bb795797FAAA65c666;\n r.s_1 = r_1;\n }\n {\n bytes31 r_2 = bytes31(0x837329d9b01474f0fc2c72a5eed325ab32d690f78ef8ffe172de93b46f1057);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f7f5baed1b55dea8d098e0bb795797faaa65c666837329d9b01474f0fc2c72a5eed325ab32d690f78ef8ffe172de93b46f105700" + }, + { + "name": "random-(bool,address,uint8)", + "type": "(bool,address,uint8)", + "value": [false, "0xc56AFe083901bbd755e411269b20692Cb982BecB", "48"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xc56AFe083901bbd755e411269b20692Cb982BecB" + }, + { + "type": "number", + "value": "48" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d98061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835260208084018290529284018190528351808301855281815273c56afe083901bbd755e411269b20692cb982becb81850190815260309186019182528551928352516001600160a01b031693820193909352915160ff168284015291519081900390910190f3fea26469706673582212202fec8ece8cf00521b4ad00815c7c417c7bdfbd4f447321393e97633517b45b4864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_18dadf90 {\n bool s_0;\n address s_1;\n uint8 s_2;\n }\n\n function test () public pure returns (S_18dadf90 memory) {\n S_18dadf90 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xc56AFe083901bbd755e411269b20692Cb982BecB;\n r.s_1 = r_1;\n }\n {\n uint8 r_2 = 48;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c56afe083901bbd755e411269b20692cb982becb0000000000000000000000000000000000000000000000000000000000000030" + }, + { + "name": "random-(bool,bool,uint)", + "type": "(bool,bool,uint)", + "value": [ + false, + true, + "50499667844437398422199853677723133816377433368031916697126193746507944460442" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "50499667844437398422199853677723133816377433368031916697126193746507944460442" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060db8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835260208084018290529284018190528351808301855281815260018185019081527f6fa5cc91c3391800bfb563d79e22fabaf3cff1f5d21cbebdabc5706dd758809a91860191825285519283525115159382019390935291518284015291519081900390910190f3fea2646970667358221220d3b92fb6db1284cc6411fe803cf14a8e6bfd2fcb1d0c20ecc0a553bd4480064b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_957a43a1 {\n bool s_0;\n bool s_1;\n uint256 s_2;\n }\n\n function test () public pure returns (S_957a43a1 memory) {\n S_957a43a1 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n uint r_2 = 50499667844437398422199853677723133816377433368031916697126193746507944460442;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016fa5cc91c3391800bfb563d79e22fabaf3cff1f5d21cbebdabc5706dd758809a" + }, + { + "name": "random-(bool,bool,uint112)", + "type": "(bool,bool,uint112)", + "value": [false, true, "2114098669735720975344836902082920"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "2114098669735720975344836902082920" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d98061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835260208084018290529284018190528351808301855281815260018185019081526d683bad38a1292e682c0a2caf596891860191825285519283525115159382019390935291516dffffffffffffffffffffffffffff168284015291519081900390910190f3fea2646970667358221220577489bf9a16f9f8cec59f2077bd4bdfcea97a1bf1ee650b28075f797b55d9e664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1110cba8 {\n bool s_0;\n bool s_1;\n uint112 s_2;\n }\n\n function test () public pure returns (S_1110cba8 memory) {\n S_1110cba8 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n uint112 r_2 = 2114098669735720975344836902082920;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000683bad38a1292e682c0a2caf5968" + }, + { + "name": "random-(bool,bytes10,bool)", + "type": "(bool,bytes10,bool)", + "value": [false, "0xd332bf606db1fd4a1bd5", true], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xd332bf606db1fd4a1bd5" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d28061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835260208084018290529284018190528351808301855281815269d332bf606db1fd4a1bd560b01b81850190815260019186019182528551928352516001600160b01b03191693820193909352915115158284015291519081900390910190f3fea264697066735822122093401baab4338ca46a13c38807e620c7dd47335dcff32dab8fabbddb9248012464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fd852488 {\n bool s_0;\n bytes10 s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_fd852488 memory) {\n S_fd852488 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n bytes10 r_1 = bytes10(0xd332bf606db1fd4a1bd5);\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000d332bf606db1fd4a1bd5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bool,bytes15,address)", + "type": "(bool,bytes15,address)", + "value": [ + true, + "0x170b1a90e9fc9d33f254fc70804119", + "0x2e3Cd58B45E2A5355B547c6f141C3DB6D35bD4F2" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x170b1a90e9fc9d33f254fc70804119" + }, + { + "type": "address", + "value": "0x2e3Cd58B45E2A5355B547c6f141C3DB6D35bD4F2" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060fa8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516060808201835260008083526020808401829052928401528251808201845260018082526e170b1a90e9fc9d33f254fc7080411960881b828501908152732e3cd58b45e2a5355b547c6f141c3db6d35bd4f292860192835285519182525170ffffffffffffffffffffffffffffffffff191693810193909352516001600160a01b03168284015291519081900390910190f3fea2646970667358221220e6ee90fa89c0a2de89982356833ba4a2a185ae34d5c54ddaecf849e55dafb3f964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_de1f0cff {\n bool s_0;\n bytes15 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_de1f0cff memory) {\n S_de1f0cff memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes15 r_1 = bytes15(0x170b1a90e9fc9d33f254fc70804119);\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x2e3Cd58B45E2A5355B547c6f141C3DB6D35bD4F2;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001170b1a90e9fc9d33f254fc7080411900000000000000000000000000000000000000000000000000000000002e3cd58b45e2a5355b547c6f141c3db6d35bd4f2" + }, + { + "name": "random-(bool,bytes18,bool)", + "type": "(bool,bytes18,bool)", + "value": [true, "0x5f1fd35369d0177b580ac1186b39d98cde2d", false], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x5f1fd35369d0177b580ac1186b39d98cde2d" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060e18061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516060808201835260008083526020808401829052928401819052835180830185528085019182526001808252715f1fd35369d0177b580ac1186b39d98cde2d60701b918501918252855190815290516dffffffffffffffffffffffffffff1916938101939093525115158284015291519081900390910190f3fea26469706673582212209049fa1f36b4476108b3d21eecabf7f7e918e4456aad8663613383e484bbad1a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7daeb62a {\n bool s_0;\n bytes18 s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_7daeb62a memory) {\n S_7daeb62a memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes18 r_1 = bytes18(0x5f1fd35369d0177b580ac1186b39d98cde2d);\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000015f1fd35369d0177b580ac1186b39d98cde2d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,bytes9,int112)", + "type": "(bool,bytes9,int112)", + "value": [true, "0x6aceec34e5498ba68e", "-1923769806661307105190482162636950"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x6aceec34e5498ba68e" + }, + { + "type": "number", + "value": "-1923769806661307105190482162636950" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060df8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051606080820183526000808352602080840182905292840152825180820184526001808252683567761a72a4c5d34760b91b8285019081526d5ed9637f15ca66701145c91a5895199286019283528551918252516001600160b81b0319169381019390935251600d0b8284015291519081900390910190f3fea2646970667358221220637d33c4b0a6164219b290a8915c0d8a3e5f9ae638b52e752d29c3bdba13dc3b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_dcbf9cb3 {\n bool s_0;\n bytes9 s_1;\n int112 s_2;\n }\n\n function test () public pure returns (S_dcbf9cb3 memory) {\n S_dcbf9cb3 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes9 r_1 = bytes9(0x6aceec34e5498ba68e);\n r.s_1 = r_1;\n }\n {\n int112 r_2 = -1923769806661307105190482162636950;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000016aceec34e5498ba68e0000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffa1269c80ea35998feeba36e5a76a" + }, + { + "name": "random-(bool,bytes9)[]", + "type": "(bool,bytes9)[]", + "value": [[false, "0xd8a093360a76603275"]], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xd8a093360a76603275" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061017f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d8565b60405180910390f35b60408051600180825281830190925260609160009190816020015b604080518082019091526000808252602082015281526020019060019003908161006957505060408051808201909152600080825268d8a093360a7660327560b81b602083015282519293509091829184916100c7576100c7610133565b602090810291909101015250919050565b602080825282518282018190526000919060409081850190868401855b828110156101265781518051151585528601516001600160b81b0319168685015292840192908501906001016100f5565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220fcd4cd0a68c42363f15333345223d6ccde4499e5e56251d138523a2f3b3325a664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9a4fafba {\n bool s_0;\n bytes9 s_1;\n }\n\n function test () public pure returns (S_9a4fafba[] memory) {\n S_9a4fafba[] memory r = new S_9a4fafba[](1);\n {\n S_9a4fafba memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n {\n bytes9 r_0_1 = bytes9(0xd8a093360a76603275);\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000d8a093360a766032750000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,int232,bool)", + "type": "(bool,int232,bool)", + "value": [ + false, + "-2792001618025617186015248288663817140213907793933948319855094362710130", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-2792001618025617186015248288663817140213907793933948319855094362710130" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060dd8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516060808201835260008083526020808401829052928401819052835180830185528181528085018281527fffffff98705c07857790940cb5748bac977682f3dba9415df2f9b93f54795f8e91850191825285519283529051601c0b93820193909352915115158284015291519081900390910190f3fea2646970667358221220aef4a20b819a4c41fa4d5049550a2ae10abc8aad4c089425233d0ba14e6ca9a764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1282999 {\n bool s_0;\n int232 s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_c1282999 memory) {\n S_c1282999 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n int232 r_1 = -2792001618025617186015248288663817140213907793933948319855094362710130;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000ffffff98705c07857790940cb5748bac977682f3dba9415df2f9b93f54795f8e0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,string,(string))", + "type": "(bool,string,(string))", + "value": [true, "Moo é🚀ééo", ["Moo é🚀 é🚀oMM oo"]], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀ééo" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é🚀oMM oo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101ec806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061015e565b60405180910390f35b6100566100db565b61005e6100db565b60018152604080518082018252600f81526e4d6f6f20c3a9f09f9a80c3a9c3a96f60881b60208083019190915280840191909152815190810190915260608152604080518082018252601781527f4d6f6f20c3a9f09f9a8020c3a9f09f9a806f4d4d206f6f00000000000000000060208201528252820152919050565b60405180606001604052806000151581526020016060815260200161010c6040518060200160405280606081525090565b905290565b6000815180845260005b818110156101375760208185018101518683018201520161011b565b81811115610149576000602083870101525b50601f01601f19169290920160200192915050565b6020815281511515602082015260006020830151606060408401526101866080840182610111565b6040850151848203601f19016060860152516020808352919250906101ad90830182610111565b9594505050505056fea264697066735822122075e4a0329f559793f1366769d44b9cb1c829aaddcdce389e6e81608c852aed5e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_0cbff75b {\n bool s_0;\n string s_1;\n S_97fc4627 s_2;\n }\n\n function test () public pure returns (S_0cbff75b memory) {\n S_0cbff75b memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀ééo\";\n r.s_1 = r_1;\n }\n {\n S_97fc4627 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀 é🚀oMM oo\";\n r_2.s_0 = r_2_0;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a80c3a9c3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a8020c3a9f09f9a806f4d4d206f6f000000000000000000" + }, + { + "name": "random-(bool,string,string)", + "type": "(bool,string,string)", + "value": [true, "Moo é🚀🚀é🚀oo🚀ooMéoéoéo oo éMM🚀ééoMoM ", "Moo é🚀o🚀"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀🚀é🚀oo🚀ooMéoéoéo oo éMM🚀ééoMoM " + }, + { + "type": "string", + "value": "Moo é🚀o🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101fe806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061013f565b60405180910390f35b610074604051806060016040528060001515815260200160608152602001606081525090565b61009a604051806060016040528060001515815260200160608152602001606081525090565b600181526040805160608101909152603b8082526000919061018e6020830139602080840191909152604080518082018252600f81526d9adede418753e13f3500dfe13f35608f1b9281019290925283015250919050565b6000815180845260005b81811015610118576020818501810151868301820152016100fc565b8181111561012a576000602083870101525b50601f01601f19169290920160200192915050565b60208152815115156020820152600060208301516060604084015261016760808401826100f2565b90506040840151601f1984830301606085015261018482826100f2565b9594505050505056fe4d6f6f20c3a9f09f9a80f09f9a80c3a9f09f9a806f6ff09f9a806f6f4dc3a96fc3a96fc3a96f206f6f20c3a94d4df09f9a80c3a9c3a96f4d6f4d20a26469706673582212202de5c6e74efb386624495b0dcbdf309436a727138af826d4a2af4b3ed5acee9864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_21333ac5 {\n bool s_0;\n string s_1;\n string s_2;\n }\n\n function test () public pure returns (S_21333ac5 memory) {\n S_21333ac5 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀🚀é🚀oo🚀ooMéoéoéo oo éMM🚀ééoMoM \";\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀o🚀\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000003b4d6f6f20c3a9f09f9a80f09f9a80c3a9f09f9a806f6ff09f9a806f6f4dc3a96fc3a96fc3a96f206f6f20c3a94d4df09f9a80c3a9c3a96f4d6f4d200000000000000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a806ff09f9a800000000000000000000000000000000000" + }, + { + "name": "random-(bool,string)[2]", + "type": "(bool,string)[2]", + "value": [ + [true, "Moo é🚀"], + [false, "Moo é🚀MMo🚀M oé🚀ooM🚀 éoo"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀MMo🚀M oé🚀ooM🚀 éoo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061020d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610112565b60405180910390f35b6100566100d8565b61005e6100d8565b604080518082018252606060208083018281526001845284518086018652600a8152689adede418753e13f3560b71b818401529052918452825180840190935260008352908201526000808252604080516060810190915260268082526101b2602083013960208301525080826001602002015250919050565b60405180604001604052806002905b6040805180820190915260008152606060208201528152602001906001900390816100e75790505090565b602080825260009060608382018185018685805b60028110156101a357601f198985038101865283518051151586528801516040898701819052815190870181905284905b80821015610174578282018b01518883018b0152908a0190610157565b8082111561018457858a828a0101525b978a0197601f0190921695909501870194505091860191600101610126565b50919897505050505050505056fe4d6f6f20c3a9f09f9a804d4d6ff09f9a804d206fc3a9f09f9a806f6f4df09f9a8020c3a96f6fa264697066735822122043c3a1cbd055ba953271b93efde4bdd2fcf878e22617c97a5d3609df70a04a2b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0e00bb9b {\n bool s_0;\n string s_1;\n }\n\n function test () public pure returns (S_0e00bb9b[2] memory) {\n S_0e00bb9b[2] memory r;\n {\n S_0e00bb9b memory r_0;\n {\n bool r_0_0 = true;\n r_0.s_0 = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀\";\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_0e00bb9b memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀MMo🚀M oé🚀ooM🚀 éoo\";\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a804d4d6ff09f9a804d206fc3a9f09f9a806f6f4df09f9a8020c3a96f6f0000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,uint,bool)", + "type": "(bool,uint,bool)", + "value": [ + true, + "69708608678490440857365536453926203506414074660423404690542697148509018727465", + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "69708608678490440857365536453926203506414074660423404690542697148509018727465" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060d98061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516060808201835260008083526020808401829052928401528251808201845260018082527f9a1daca0a943f280de0f0f7f66cba0a62daa713329b53767e8e2b1e4f0b9242982850190815291850181815285519182529151938101939093525115158284015291519081900390910190f3fea26469706673582212205006ad04fa62e59e9a14697bf4dc608ba647fd817d245812a3b84a3b6210fe3164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_406249f4 {\n bool s_0;\n uint256 s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_406249f4 memory) {\n S_406249f4 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n uint r_1 = 69708608678490440857365536453926203506414074660423404690542697148509018727465;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000019a1daca0a943f280de0f0f7f66cba0a62daa713329b53767e8e2b1e4f0b924290000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bool,uint128,string)", + "type": "(bool,uint128,string)", + "value": [true, "191136244099948621809807683049257216549", "Moo é🚀"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "191136244099948621809807683049257216549" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610167806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160608082018352600080835260208084019190915291830181905282518082018452808401918252600181526f8fcb8068a8e085d73b98a3382b38aa258184015283518085018552600a8152689adede418753e13f3560b71b9381019390935291905290516100a391906100ac565b60405180910390f35b6000602080835283511515818401526fffffffffffffffffffffffffffffffff818501511660408401526040840151606080850152805180608086015260005b818110156101085782810184015186820160a0015283016100ec565b8181111561011a57600060a083880101525b50601f01601f19169390930160a00194935050505056fea264697066735822122079544a193a09c56140afeaf9e09f371909dbcee05109845d8da43e886d4b016764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_260ba4e5 {\n bool s_0;\n uint128 s_1;\n string s_2;\n }\n\n function test () public pure returns (S_260ba4e5 memory) {\n S_260ba4e5 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n uint128 r_1 = 191136244099948621809807683049257216549;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000008fcb8068a8e085d73b98a3382b38aa250000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool)[2][2]", + "type": "(bool)[2][2]", + "value": [ + [[true], [true]], + [[true], [false]] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061011f565b60405180910390f35b6100566100be565b61005e6100be565b6100666100eb565b60408051602080820183526001808352918452825180820190935290825282015281526100916100eb565b60408051602080820183526001825290835281518082019092526000825282810191909152820152919050565b60405180604001604052806002905b6100d56100eb565b8152602001906001900390816100cd5790505090565b60405180604001604052806002905b6040805160208101909152600081528152602001906001900390816100fa5790505090565b6080810181836000805b60028082106101385750610178565b835185845b8381101561015e57825151151582526020928301929091019060010161013d565b505050604094909401935060209290920191600101610129565b505050509291505056fea2646970667358221220f6155eb6df6b799bb75690ef49ed5fb1fa25fb2157c6310f3ad9919e158888d164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1053bda {\n bool s_0;\n }\n\n function test () public pure returns (S_c1053bda[2][2] memory) {\n S_c1053bda[2][2] memory r;\n {\n S_c1053bda[2] memory r_0;\n {\n S_c1053bda memory r_0_0;\n {\n bool r_0_0_0 = true;\n r_0_0.s_0 = r_0_0_0;\n }\n r_0[0] = r_0_0;\n }\n {\n S_c1053bda memory r_0_1;\n {\n bool r_0_1_0 = true;\n r_0_1.s_0 = r_0_1_0;\n }\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_c1053bda[2] memory r_1;\n {\n S_c1053bda memory r_1_0;\n {\n bool r_1_0_0 = true;\n r_1_0.s_0 = r_1_0_0;\n }\n r_1[0] = r_1_0;\n }\n {\n S_c1053bda memory r_1_1;\n {\n bool r_1_1_0 = false;\n r_1_1.s_0 = r_1_1_0;\n }\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool[],string)", + "type": "(bool[],string)", + "value": [[false, true], "Moo é🚀"], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610206806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6040805180820182526060808252602080830182905283518085018552828152908101829052835160028082529281019094529192600091816020016020820280368337019050509050600080826000815181106100ae576100ae6101ba565b6020026020010190151590811515815250505060006001905080826001815181106100db576100db6101ba565b9115156020928302919091018201529183525060408051808201909152600a8152689adede418753e13f3560b71b8183015290820152919050565b6020808252825160408383015280516060840181905260009291820190839060808601905b8083101561015d5783511515825292840192600192909201919084019061013b565b50838701519250601f19915081868203016040870152825180825260005b8181101561019657848101860151838201870152850161017b565b818111156101a75760008683850101525b50601f0190911601909101949350505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212207c87c7f11801ff6b31225c116c00b819ecd6831824abe8e75daad2258066677664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a263437a {\n bool[] s_0;\n string s_1;\n }\n\n function test () public pure returns (S_a263437a memory) {\n S_a263437a memory r;\n {\n bool[] memory r_0 = new bool[](2);\n {\n bool r_0_0 = false;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes10,uint160)[2]", + "type": "(bytes10,uint160)[2]", + "value": [ + ["0x63ce740bdc2864f1f306", "511310885699765645080179168431600971451155251076"], + ["0x9a7178deb88ed30b3744", "182514125013595480133632058057784051988677056645"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x63ce740bdc2864f1f306" + }, + { + "type": "number", + "value": "511310885699765645080179168431600971451155251076" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x9a7178deb88ed30b3744" + }, + { + "type": "number", + "value": "182514125013595480133632058057784051988677056645" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610190806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061010a565b60405180910390f35b6100566100d1565b61005e6100d1565b6040805180820182526931e73a05ee143278f98360b11b815273598ff91c2291cbb0a813669b2ff56120079e7f84602080830191909152908352815180830190925269269c5e37ae23b4c2cdd160b21b8252731ff837673f33e540b65dede59988a205e40cd88582820152820152919050565b60405180604001604052806002905b60408051808201909152600080825260208201528152602001906001900390816100e05790505090565b60808101818360005b600281101561015157815180516001600160b01b03191684526020908101516001600160a01b03168185015260409093019290910190600101610113565b5050509291505056fea2646970667358221220a92d5ad02114785fc176a17578a33af56bcebcd815b80a1b7a23d1a1cc846f3a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_318b435b {\n bytes10 s_0;\n uint160 s_1;\n }\n\n function test () public pure returns (S_318b435b[2] memory) {\n S_318b435b[2] memory r;\n {\n S_318b435b memory r_0;\n {\n bytes10 r_0_0 = bytes10(0x63ce740bdc2864f1f306);\n r_0.s_0 = r_0_0;\n }\n {\n uint160 r_0_1 = 511310885699765645080179168431600971451155251076;\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_318b435b memory r_1;\n {\n bytes10 r_1_0 = bytes10(0x9a7178deb88ed30b3744);\n r_1.s_0 = r_1_0;\n }\n {\n uint160 r_1_1 = 182514125013595480133632058057784051988677056645;\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x63ce740bdc2864f1f30600000000000000000000000000000000000000000000000000000000000000000000598ff91c2291cbb0a813669b2ff56120079e7f849a7178deb88ed30b3744000000000000000000000000000000000000000000000000000000000000000000001ff837673f33e540b65dede59988a205e40cd885" + }, + { + "name": "random-(bytes11,bytes31,bytes24)", + "type": "(bytes11,bytes31,bytes24)", + "value": [ + "0x16a6304c9e91f8936223cd", + "0x3989f87842061c347bfcd1e97f6f7e4b21023a1de8dced8d5184ca9bb2d484", + "0x12f004f347b35cc2812d268f1ade624950eec5fb4d21af4c" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x16a6304c9e91f8936223cd" + }, + { + "type": "hexstring", + "value": "0x3989f87842061c347bfcd1e97f6f7e4b21023a1de8dced8d5184ca9bb2d484" + }, + { + "type": "hexstring", + "value": "0x12f004f347b35cc2812d268f1ade624950eec5fb4d21af4c" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101138061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051606080820183526000808352602080840182905292840152825180820184526a16a6304c9e91f8936223cd60a81b8082527f3989f87842061c347bfcd1e97f6f7e4b21023a1de8dced8d5184ca9bb2d484008285019081527f12f004f347b35cc2812d268f1ade624950eec5fb4d21af4c000000000000000092860192835285519182525160ff1916938101939093525167ffffffffffffffff19168284015291519081900390910190f3fea2646970667358221220a79caac12a26a48136034f56eee6cb5b6be046b297d85f45270d4e2ab9effa7c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e71e8de8 {\n bytes11 s_0;\n bytes31 s_1;\n bytes24 s_2;\n }\n\n function test () public pure returns (S_e71e8de8 memory) {\n S_e71e8de8 memory r;\n {\n bytes11 r_0 = bytes11(0x16a6304c9e91f8936223cd);\n r.s_0 = r_0;\n }\n {\n bytes31 r_1 = bytes31(0x3989f87842061c347bfcd1e97f6f7e4b21023a1de8dced8d5184ca9bb2d484);\n r.s_1 = r_1;\n }\n {\n bytes24 r_2 = bytes24(0x12f004f347b35cc2812d268f1ade624950eec5fb4d21af4c);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x16a6304c9e91f8936223cd0000000000000000000000000000000000000000003989f87842061c347bfcd1e97f6f7e4b21023a1de8dced8d5184ca9bb2d4840012f004f347b35cc2812d268f1ade624950eec5fb4d21af4c0000000000000000" + }, + { + "name": "random-(bytes11)[4][4]", + "type": "(bytes11)[4][4]", + "value": [ + [ + ["0xd82ba18d0921c9bf820c4e"], + ["0x92f687e011a303634cd717"], + ["0xe4c89be14e3a94e17335a0"], + ["0x3d077f1e62cce6d3e5a4f1"] + ], + [ + ["0xa585496b4c556fbe1fec64"], + ["0xab7bbf8b6500bbce29bd90"], + ["0x363f172cdbf393b88f9334"], + ["0x81ce7039af8f017c395545"] + ], + [ + ["0x0c33b87755a79bbc24adc0"], + ["0x5ac92684ead884e2174a36"], + ["0x66ce6858bb72dd5705cde8"], + ["0xc7427f09ca29060b50165d"] + ], + [ + ["0xcae1afc258cd3aaa04b5e1"], + ["0x569d53415a7b37fe577479"], + ["0x8d5cd54e22653485ad93c2"], + ["0xeb43c4b4fafc606ce413eb"] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd82ba18d0921c9bf820c4e" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x92f687e011a303634cd717" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xe4c89be14e3a94e17335a0" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x3d077f1e62cce6d3e5a4f1" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa585496b4c556fbe1fec64" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xab7bbf8b6500bbce29bd90" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x363f172cdbf393b88f9334" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x81ce7039af8f017c395545" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x0c33b87755a79bbc24adc0" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x5ac92684ead884e2174a36" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x66ce6858bb72dd5705cde8" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc7427f09ca29060b50165d" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xcae1afc258cd3aaa04b5e1" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x569d53415a7b37fe577479" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8d5cd54e22653485ad93c2" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xeb43c4b4fafc606ce413eb" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061036a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102c8565b60405180910390f35b610056610267565b61005e610267565b610066610294565b60408051602080820183526a6c15d0c68490e4dfc1062760a91b8252908352815180820183526a92f687e011a303634cd71760a81b815283820152815180820183526a072644df0a71d4a70b99ad60ad1b81528383015281519081019091526a3d077f1e62cce6d3e5a4f160a81b8152606082015281526100e5610294565b60408051602080820183526a2961525ad3155bef87fb1960aa1b8252908352815180820183526a0ab7bbf8b6500bbce29bd960ac1b815283820152815180820183526a0d8fc5cb36fce4ee23e4cd60aa1b81528383015281518082019092526a81ce7039af8f017c39554560a81b82526060830191909152820152610168610294565b60408051602080820183526930cee1dd569e6ef092b760ae1b8252908352815180820183526a2d649342756c42710ba51b60a91b815283820152815180820183526a0cd9cd0b176e5baae0b9bd60ab1b815283830152815190810182526ac7427f09ca29060b50165d60a81b815260608301528201526101e6610294565b60408051602080820183526acae1afc258cd3aaa04b5e160a81b8252908352815180820183526a569d53415a7b37fe57747960a81b815283820152815180820183526a46ae6aa711329a42d6c9e160a91b81528383015281519081019091526aeb43c4b4fafc606ce413eb60a81b8152606080830191909152820152919050565b60405180608001604052806004905b61027e610294565b8152602001906001900390816102765790505090565b60405180608001604052806004905b6040805160208101909152600081528152602001906001900390816102a35790505090565b610200810181836000805b60048082106102e2575061032a565b835185845b83811015610310578251516001600160a81b0319168252602092830192909101906001016102e7565b5050506080949094019350602092909201916001016102d3565b505050509291505056fea264697066735822122076a60a459b5e17b1ddcd6810bcac7837818c241653fe5f4a8b6a27bf2569e6f164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1b4cf483 {\n bytes11 s_0;\n }\n\n function test () public pure returns (S_1b4cf483[4][4] memory) {\n S_1b4cf483[4][4] memory r;\n {\n S_1b4cf483[4] memory r_0;\n {\n S_1b4cf483 memory r_0_0;\n {\n bytes11 r_0_0_0 = bytes11(0xd82ba18d0921c9bf820c4e);\n r_0_0.s_0 = r_0_0_0;\n }\n r_0[0] = r_0_0;\n }\n {\n S_1b4cf483 memory r_0_1;\n {\n bytes11 r_0_1_0 = bytes11(0x92f687e011a303634cd717);\n r_0_1.s_0 = r_0_1_0;\n }\n r_0[1] = r_0_1;\n }\n {\n S_1b4cf483 memory r_0_2;\n {\n bytes11 r_0_2_0 = bytes11(0xe4c89be14e3a94e17335a0);\n r_0_2.s_0 = r_0_2_0;\n }\n r_0[2] = r_0_2;\n }\n {\n S_1b4cf483 memory r_0_3;\n {\n bytes11 r_0_3_0 = bytes11(0x3d077f1e62cce6d3e5a4f1);\n r_0_3.s_0 = r_0_3_0;\n }\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_1b4cf483[4] memory r_1;\n {\n S_1b4cf483 memory r_1_0;\n {\n bytes11 r_1_0_0 = bytes11(0xa585496b4c556fbe1fec64);\n r_1_0.s_0 = r_1_0_0;\n }\n r_1[0] = r_1_0;\n }\n {\n S_1b4cf483 memory r_1_1;\n {\n bytes11 r_1_1_0 = bytes11(0xab7bbf8b6500bbce29bd90);\n r_1_1.s_0 = r_1_1_0;\n }\n r_1[1] = r_1_1;\n }\n {\n S_1b4cf483 memory r_1_2;\n {\n bytes11 r_1_2_0 = bytes11(0x363f172cdbf393b88f9334);\n r_1_2.s_0 = r_1_2_0;\n }\n r_1[2] = r_1_2;\n }\n {\n S_1b4cf483 memory r_1_3;\n {\n bytes11 r_1_3_0 = bytes11(0x81ce7039af8f017c395545);\n r_1_3.s_0 = r_1_3_0;\n }\n r_1[3] = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_1b4cf483[4] memory r_2;\n {\n S_1b4cf483 memory r_2_0;\n {\n bytes11 r_2_0_0 = bytes11(0x0c33b87755a79bbc24adc0);\n r_2_0.s_0 = r_2_0_0;\n }\n r_2[0] = r_2_0;\n }\n {\n S_1b4cf483 memory r_2_1;\n {\n bytes11 r_2_1_0 = bytes11(0x5ac92684ead884e2174a36);\n r_2_1.s_0 = r_2_1_0;\n }\n r_2[1] = r_2_1;\n }\n {\n S_1b4cf483 memory r_2_2;\n {\n bytes11 r_2_2_0 = bytes11(0x66ce6858bb72dd5705cde8);\n r_2_2.s_0 = r_2_2_0;\n }\n r_2[2] = r_2_2;\n }\n {\n S_1b4cf483 memory r_2_3;\n {\n bytes11 r_2_3_0 = bytes11(0xc7427f09ca29060b50165d);\n r_2_3.s_0 = r_2_3_0;\n }\n r_2[3] = r_2_3;\n }\n r[2] = r_2;\n }\n {\n S_1b4cf483[4] memory r_3;\n {\n S_1b4cf483 memory r_3_0;\n {\n bytes11 r_3_0_0 = bytes11(0xcae1afc258cd3aaa04b5e1);\n r_3_0.s_0 = r_3_0_0;\n }\n r_3[0] = r_3_0;\n }\n {\n S_1b4cf483 memory r_3_1;\n {\n bytes11 r_3_1_0 = bytes11(0x569d53415a7b37fe577479);\n r_3_1.s_0 = r_3_1_0;\n }\n r_3[1] = r_3_1;\n }\n {\n S_1b4cf483 memory r_3_2;\n {\n bytes11 r_3_2_0 = bytes11(0x8d5cd54e22653485ad93c2);\n r_3_2.s_0 = r_3_2_0;\n }\n r_3[2] = r_3_2;\n }\n {\n S_1b4cf483 memory r_3_3;\n {\n bytes11 r_3_3_0 = bytes11(0xeb43c4b4fafc606ce413eb);\n r_3_3.s_0 = r_3_3_0;\n }\n r_3[3] = r_3_3;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xd82ba18d0921c9bf820c4e00000000000000000000000000000000000000000092f687e011a303634cd717000000000000000000000000000000000000000000e4c89be14e3a94e17335a00000000000000000000000000000000000000000003d077f1e62cce6d3e5a4f1000000000000000000000000000000000000000000a585496b4c556fbe1fec64000000000000000000000000000000000000000000ab7bbf8b6500bbce29bd90000000000000000000000000000000000000000000363f172cdbf393b88f933400000000000000000000000000000000000000000081ce7039af8f017c3955450000000000000000000000000000000000000000000c33b87755a79bbc24adc00000000000000000000000000000000000000000005ac92684ead884e2174a3600000000000000000000000000000000000000000066ce6858bb72dd5705cde8000000000000000000000000000000000000000000c7427f09ca29060b50165d000000000000000000000000000000000000000000cae1afc258cd3aaa04b5e1000000000000000000000000000000000000000000569d53415a7b37fe5774790000000000000000000000000000000000000000008d5cd54e22653485ad93c2000000000000000000000000000000000000000000eb43c4b4fafc606ce413eb000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes12,bytes30)[2]", + "type": "(bytes12,bytes30)[2]", + "value": [ + [ + "0x5fe291869131b4de1190f005", + "0xc4ec3911258d07e48e741d5ae667cf5f95b7d7e2ec67a4368af58538eb3e" + ], + [ + "0x850975b96c99a51e000cafcf", + "0xfb89920b3cfc5532ea252d781e7a5b46cd0565fd063888c3558d1d15c9e9" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x5fe291869131b4de1190f005" + }, + { + "type": "hexstring", + "value": "0xc4ec3911258d07e48e741d5ae667cf5f95b7d7e2ec67a4368af58538eb3e" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x850975b96c99a51e000cafcf" + }, + { + "type": "hexstring", + "value": "0xfb89920b3cfc5532ea252d781e7a5b46cd0565fd063888c3558d1d15c9e9" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101a8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610126565b60405180910390f35b6100566100ed565b61005e6100ed565b6040805180820182526b5fe291869131b4de1190f00560a01b81527fc4ec3911258d07e48e741d5ae667cf5f95b7d7e2ec67a4368af58538eb3e000060208083019190915290835281518083019092526b850975b96c99a51e000cafcf60a01b82527ffb89920b3cfc5532ea252d781e7a5b46cd0565fd063888c3558d1d15c9e9000082820152820152919050565b60405180604001604052806002905b60408051808201909152600080825260208201528152602001906001900390816100fc5790505090565b60808101818360005b600281101561016957815180516001600160a01b031916845260209081015161ffff1916818501526040909301929091019060010161012f565b5050509291505056fea2646970667358221220c83bf411bf6a6c26dfcb0851a90ecc346362d7796067c530a15a63fc8b56273f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_59f7f149 {\n bytes12 s_0;\n bytes30 s_1;\n }\n\n function test () public pure returns (S_59f7f149[2] memory) {\n S_59f7f149[2] memory r;\n {\n S_59f7f149 memory r_0;\n {\n bytes12 r_0_0 = bytes12(0x5fe291869131b4de1190f005);\n r_0.s_0 = r_0_0;\n }\n {\n bytes30 r_0_1 = bytes30(0xc4ec3911258d07e48e741d5ae667cf5f95b7d7e2ec67a4368af58538eb3e);\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_59f7f149 memory r_1;\n {\n bytes12 r_1_0 = bytes12(0x850975b96c99a51e000cafcf);\n r_1.s_0 = r_1_0;\n }\n {\n bytes30 r_1_1 = bytes30(0xfb89920b3cfc5532ea252d781e7a5b46cd0565fd063888c3558d1d15c9e9);\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x5fe291869131b4de1190f0050000000000000000000000000000000000000000c4ec3911258d07e48e741d5ae667cf5f95b7d7e2ec67a4368af58538eb3e0000850975b96c99a51e000cafcf0000000000000000000000000000000000000000fb89920b3cfc5532ea252d781e7a5b46cd0565fd063888c3558d1d15c9e90000" + }, + { + "name": "random-(bytes13,address,bool)", + "type": "(bytes13,address,bool)", + "value": [ + "0x267db4da7b7ae48ceb82728ff1", + "0x07bE4DaE07F3138d1c2E3b3602169cA127C417B8", + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x267db4da7b7ae48ceb82728ff1" + }, + { + "type": "address", + "value": "0x07bE4DaE07F3138d1c2E3b3602169cA127C417B8" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060e68061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051606080820183526000808352602080840182905292840152825180820184526c267db4da7b7ae48ceb82728ff160981b8082527307be4dae07f3138d1c2e3b3602169ca127c417b882850190815260019286019283528551918252516001600160a01b0316938101939093525115158284015291519081900390910190f3fea26469706673582212200299cd3069920f593845eefade6f9f36f8d85239b96ab45b85a39d49bc95eeef64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97d80f27 {\n bytes13 s_0;\n address s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_97d80f27 memory) {\n S_97d80f27 memory r;\n {\n bytes13 r_0 = bytes13(0x267db4da7b7ae48ceb82728ff1);\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x07bE4DaE07F3138d1c2E3b3602169cA127C417B8;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x267db4da7b7ae48ceb82728ff10000000000000000000000000000000000000000000000000000000000000007be4dae07f3138d1c2e3b3602169ca127c417b80000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bytes14,address,bytes12)", + "type": "(bytes14,address,bytes12)", + "value": [ + "0xc54064ba7f318a129e849189b491", + "0x41c916645e5D9a84b941f2925011811044db3B06", + "0xc12dd98930415608a496efac" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc54064ba7f318a129e849189b491" + }, + { + "type": "address", + "value": "0x41c916645e5D9a84b941f2925011811044db3B06" + }, + { + "type": "hexstring", + "value": "0xc12dd98930415608a496efac" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060fd8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051606080820183526000808352602080840182905292840152825180820184526dc54064ba7f318a129e849189b49160901b8082527341c916645e5d9a84b941f2925011811044db3b068285019081526b304b76624c1055822925bbeb60a21b9286019283528551918252516001600160a01b031693810193909352516001600160a01b0319168284015291519081900390910190f3fea264697066735822122096fd0ce41da9c02d2e042b62ad56d0e392ac7bc21296fe2a5c54814c9c07d45c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_03ad034c {\n bytes14 s_0;\n address s_1;\n bytes12 s_2;\n }\n\n function test () public pure returns (S_03ad034c memory) {\n S_03ad034c memory r;\n {\n bytes14 r_0 = bytes14(0xc54064ba7f318a129e849189b491);\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x41c916645e5D9a84b941f2925011811044db3B06;\n r.s_1 = r_1;\n }\n {\n bytes12 r_2 = bytes12(0xc12dd98930415608a496efac);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0xc54064ba7f318a129e849189b49100000000000000000000000000000000000000000000000000000000000041c916645e5d9a84b941f2925011811044db3b06c12dd98930415608a496efac0000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes17,uint8,bytes2)", + "type": "(bytes17,uint8,bytes2)", + "value": ["0x53ab6360118790fdafdb4b7748ca42489f", "64", "0xff6e"], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x53ab6360118790fdafdb4b7748ca42489f" + }, + { + "type": "number", + "value": "64" + }, + { + "type": "hexstring", + "value": "0xff6e" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060de8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051606080820183526000808352602080840182905292840152825180820184527053ab6360118790fdafdb4b7748ca42489f60781b8082528184018581526001604960f11b031992860192835285519182525160ff1693810193909352516001600160f01b0319168284015291519081900390910190f3fea264697066735822122094bb5aa6c772b167aab8207c9fc43de0bcd75f36551fda2b5c88d9a5a71dbdb664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_86dac446 {\n bytes17 s_0;\n uint8 s_1;\n bytes2 s_2;\n }\n\n function test () public pure returns (S_86dac446 memory) {\n S_86dac446 memory r;\n {\n bytes17 r_0 = bytes17(0x53ab6360118790fdafdb4b7748ca42489f);\n r.s_0 = r_0;\n }\n {\n uint8 r_1 = 64;\n r.s_1 = r_1;\n }\n {\n bytes2 r_2 = bytes2(0xff6e);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x53ab6360118790fdafdb4b7748ca42489f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040ff6e000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes19,string,bool)", + "type": "(bytes19,string,bool)", + "value": [ + "0x8443f58143913d844f417be8166c25249d9ea4", + "Moo é🚀MMoM 🚀🚀o 🚀ooé🚀 MééoéoM🚀éMoéooo oo", + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8443f58143913d844f417be8166c25249d9ea4" + }, + { + "type": "string", + "value": "Moo é🚀MMoM 🚀🚀o 🚀ooé🚀 MééoéoM🚀éMoéooo oo" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101c6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100c8565b60405180910390f35b6040805160608082018352600080835260208084018390528385018290528451808401865280820193909352828501829052722110fd6050e44f6113d05efa059b09492767a9606a1b8352845160808101909552604180865293949293919291906101509083013960208301525060016040820152919050565b600060208083526cffffffffffffffffffffffffff19845116818401528084015160606040850152805180608086015260005b818110156101175782810184015186820160a0015283016100fb565b8181111561012957600060a083880101525b50604086015180151560608701529250601f01601f19169390930160a00194935050505056fe4d6f6f20c3a9f09f9a804d4d6f4d20f09f9a80f09f9a806f2020f09f9a806f6fc3a9f09f9a80204dc3a9c3a96fc3a96f4df09f9a80c3a94d6fc3a96f6f6f206f6fa264697066735822122094dfe8300db8e30b5d6d0b855ad7554ca01bae296753af823adbb5c3e0a58c3d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b44bf2cd {\n bytes19 s_0;\n string s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_b44bf2cd memory) {\n S_b44bf2cd memory r;\n {\n bytes19 r_0 = bytes19(0x8443f58143913d844f417be8166c25249d9ea4);\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀MMoM 🚀🚀o 🚀ooé🚀 MééoéoM🚀éMoéooo oo\";\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000208443f58143913d844f417be8166c25249d9ea4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a804d4d6f4d20f09f9a80f09f9a806f2020f09f9a806f6fc3a9f09f9a80204dc3a9c3a96fc3a96f4df09f9a80c3a94d6fc3a96f6f6f206f6f00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes20,bytes18)[2]", + "type": "(bytes20,bytes18)[2]", + "value": [ + [ + "0xaf8012b0dd6ed166836cab6f6bedbedda0f2cfde", + "0x089ddcd3325fe46a705c4dcf81a1f07e5da4" + ], + ["0x7336d79dad762c4e2c9b617ff7cce18ca34d009d", "0x9cdeadbc2bb540d1890f975f1448785640e8"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xaf8012b0dd6ed166836cab6f6bedbedda0f2cfde" + }, + { + "type": "hexstring", + "value": "0x089ddcd3325fe46a705c4dcf81a1f07e5da4" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x7336d79dad762c4e2c9b617ff7cce18ca34d009d" + }, + { + "type": "hexstring", + "value": "0x9cdeadbc2bb540d1890f975f1448785640e8" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610120565b60405180910390f35b6100566100e7565b61005e6100e7565b6040805180820182527357c009586eb768b341b655b7b5f6df6ed07967ef60611b81527102277734cc97f91a9c171373e0687c1f976960721b6020808301919091529083528151808301909252737336d79dad762c4e2c9b617ff7cce18ca34d009d60601b825271139bd5b78576a81a3121f2ebe2890f0ac81d60731b82820152820152919050565b60405180604001604052806002905b60408051808201909152600080825260208201528152602001906001900390816100f65790505090565b60808101818360005b600281101561017457815180516bffffffffffffffffffffffff191684526020908101516dffffffffffffffffffffffffffff19168185015260409093019290910190600101610129565b5050509291505056fea26469706673582212206750d46261195bf1f5e16bf03619685d0b0da4b91fd70660c3dbf0b0e8f1624364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9c3c339b {\n bytes20 s_0;\n bytes18 s_1;\n }\n\n function test () public pure returns (S_9c3c339b[2] memory) {\n S_9c3c339b[2] memory r;\n {\n S_9c3c339b memory r_0;\n {\n bytes20 r_0_0 = bytes20(0xaF8012b0Dd6eD166836CAb6f6bEDbedDa0F2cfde);\n r_0.s_0 = r_0_0;\n }\n {\n bytes18 r_0_1 = bytes18(0x089ddcd3325fe46a705c4dcf81a1f07e5da4);\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_9c3c339b memory r_1;\n {\n bytes20 r_1_0 = bytes20(0x7336d79dAd762C4e2c9B617Ff7CcE18ca34D009D);\n r_1.s_0 = r_1_0;\n }\n {\n bytes18 r_1_1 = bytes18(0x9cdeadbc2bb540d1890f975f1448785640e8);\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0xaf8012b0dd6ed166836cab6f6bedbedda0f2cfde000000000000000000000000089ddcd3325fe46a705c4dcf81a1f07e5da400000000000000000000000000007336d79dad762c4e2c9b617ff7cce18ca34d009d0000000000000000000000009cdeadbc2bb540d1890f975f1448785640e80000000000000000000000000000" + }, + { + "name": "random-(bytes21,address,int32)", + "type": "(bytes21,address,int32)", + "value": [ + "0x9e2fa6bd2f4a9d6b2532bc78a53c76e439b2ab3713", + "0x0D912E342037D133d87da1f4b14922895a5d5879", + "-934573082" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x9e2fa6bd2f4a9d6b2532bc78a53c76e439b2ab3713" + }, + { + "type": "address", + "value": "0x0D912E342037D133d87da1f4b14922895a5d5879" + }, + { + "type": "number", + "value": "-934573082" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060f38061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835260208084018290529284015282518082018452749e2fa6bd2f4a9d6b2532bc78a53c76e439b2ab371360581b808252730d912e342037d133d87da1f4b14922895a5d58798285019081526337b47419199286019283528551918252516001600160a01b0316938101939093525160030b8284015291519081900390910190f3fea26469706673582212204161743440854f2f2cfe10105120173a7f9ed54fc028745eaad179917404e93464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_25f698f3 {\n bytes21 s_0;\n address s_1;\n int32 s_2;\n }\n\n function test () public pure returns (S_25f698f3 memory) {\n S_25f698f3 memory r;\n {\n bytes21 r_0 = bytes21(0x9e2fa6bd2f4a9d6b2532bc78a53c76e439b2ab3713);\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x0D912E342037D133d87da1f4b14922895a5d5879;\n r.s_1 = r_1;\n }\n {\n int32 r_2 = -934573082;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x9e2fa6bd2f4a9d6b2532bc78a53c76e439b2ab371300000000000000000000000000000000000000000000000d912e342037d133d87da1f4b14922895a5d5879ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84b8be6" + }, + { + "name": "random-(bytes22[3],bool)", + "type": "(bytes22[3],bool)", + "value": [ + [ + "0x9817e336e3c9114596028d68453083d49b1c780b1f0c", + "0xd23c4a6b28e8878f7957e95deb0832880fca929c7402", + "0xfe012d8a744ecdfa94d7eb4412a62262643ebe8678be" + ], + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x9817e336e3c9114596028d68453083d49b1c780b1f0c" + }, + { + "type": "hexstring", + "value": "0xd23c4a6b28e8878f7957e95deb0832880fca929c7402" + }, + { + "type": "hexstring", + "value": "0xfe012d8a744ecdfa94d7eb4412a62262643ebe8678be" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610192806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610110565b60405180910390f35b6100566100d2565b61005e6100d2565b6100666100f2565b752605f8cdb8f244516580a35a114c20f526c71e02c7c360521b815275691e2535947443c7bcabf4aef584194407e5494e3a0160511b602080830191909152757f0096c53a2766fd4a6bf5a209531131321f5f433c5f60511b6040830152908252600090820152919050565b60405180604001604052806100e56100f2565b8152600060209091015290565b60405180606001604052806003906020820280368337509192915050565b815160808201908260005b600381101561014757825169ffffffffffffffffffff191682526020928301929091019060010161011b565b5050506020830151151560608301529291505056fea2646970667358221220a6c9ce28426b03d4e7e46a778aaceaa983c0e8b87f3a2b178df36aef279fa76764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8ad2c038 {\n bytes22[3] s_0;\n bool s_1;\n }\n\n function test () public pure returns (S_8ad2c038 memory) {\n S_8ad2c038 memory r;\n {\n bytes22[3] memory r_0;\n {\n bytes22 r_0_0 = bytes22(0x9817e336e3c9114596028d68453083d49b1c780b1f0c);\n r_0[0] = r_0_0;\n }\n {\n bytes22 r_0_1 = bytes22(0xd23c4a6b28e8878f7957e95deb0832880fca929c7402);\n r_0[1] = r_0_1;\n }\n {\n bytes22 r_0_2 = bytes22(0xfe012d8a744ecdfa94d7eb4412a62262643ebe8678be);\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x9817e336e3c9114596028d68453083d49b1c780b1f0c00000000000000000000d23c4a6b28e8878f7957e95deb0832880fca929c740200000000000000000000fe012d8a744ecdfa94d7eb4412a62262643ebe8678be000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes22[4],bytes12)", + "type": "(bytes22[4],bytes12)", + "value": [ + [ + "0x629aab8d299e7ab346414d8cf7de2110a4d6e017e008", + "0x533cb78c5dc69b72e4793c1ad0b44dfd344aa11fbbb1", + "0x37dd6168cc48144a62542e53f7e599cd9c6d5907c052", + "0xbb0e5444fee621709284cb9a1d0e120c4d080b6d9676" + ], + "0x43ab7354a6334a31c46681d5" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x629aab8d299e7ab346414d8cf7de2110a4d6e017e008" + }, + { + "type": "hexstring", + "value": "0x533cb78c5dc69b72e4793c1ad0b44dfd344aa11fbbb1" + }, + { + "type": "hexstring", + "value": "0x37dd6168cc48144a62542e53f7e599cd9c6d5907c052" + }, + { + "type": "hexstring", + "value": "0xbb0e5444fee621709284cb9a1d0e120c4d080b6d9676" + } + ] + }, + { + "type": "hexstring", + "value": "0x43ab7354a6334a31c46681d5" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101c8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061013d565b60405180910390f35b6100566100ff565b61005e6100ff565b61006661011f565b750c535571a533cf5668c829b19efbc422149adc02fc0160531b815275533cb78c5dc69b72e4793c1ad0b44dfd344aa11fbbb160501b602080830191909152751beeb0b466240a25312a1729fbf2cce6ce36ac83e02960511b6040830152755d872a227f7310b8494265cd0e870906268405b6cb3b60511b60608301529082526b43ab7354a6334a31c46681d560a01b90820152919050565b604051806040016040528061011261011f565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b815160a08201908260005b600481101561017457825169ffffffffffffffffffff1916825260209283019290910190600101610148565b505050602092909201516001600160a01b031916608091909101529056fea2646970667358221220ce3eaac54db9c420032b59935fb7cc057435567904cc5686cabed2a4388167df64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fb4f500e {\n bytes22[4] s_0;\n bytes12 s_1;\n }\n\n function test () public pure returns (S_fb4f500e memory) {\n S_fb4f500e memory r;\n {\n bytes22[4] memory r_0;\n {\n bytes22 r_0_0 = bytes22(0x629aab8d299e7ab346414d8cf7de2110a4d6e017e008);\n r_0[0] = r_0_0;\n }\n {\n bytes22 r_0_1 = bytes22(0x533cb78c5dc69b72e4793c1ad0b44dfd344aa11fbbb1);\n r_0[1] = r_0_1;\n }\n {\n bytes22 r_0_2 = bytes22(0x37dd6168cc48144a62542e53f7e599cd9c6d5907c052);\n r_0[2] = r_0_2;\n }\n {\n bytes22 r_0_3 = bytes22(0xbb0e5444fee621709284cb9a1d0e120c4d080b6d9676);\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n bytes12 r_1 = bytes12(0x43ab7354a6334a31c46681d5);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x629aab8d299e7ab346414d8cf7de2110a4d6e017e00800000000000000000000533cb78c5dc69b72e4793c1ad0b44dfd344aa11fbbb10000000000000000000037dd6168cc48144a62542e53f7e599cd9c6d5907c05200000000000000000000bb0e5444fee621709284cb9a1d0e120c4d080b6d96760000000000000000000043ab7354a6334a31c46681d50000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes24,int216,bytes1)", + "type": "(bytes24,int216,bytes1)", + "value": [ + "0xb88ee50c8ae5d5e4c68206a6653e76262afb71a8d88fdd0c", + "-21728527175090028658729961033124805230496319242339630440533481814", + "0x47" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xb88ee50c8ae5d5e4c68206a6653e76262afb71a8d88fdd0c" + }, + { + "type": "number", + "value": "-21728527175090028658729961033124805230496319242339630440533481814" + }, + { + "type": "hexstring", + "value": "0x47" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101038061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051606080820183526000808352602080840182905292840152825180820184527fb88ee50c8ae5d5e4c68206a6653e76262afb71a8d88fdd0c00000000000000008082527a34d1b2169dd3e530b6329c4710d200c9bc607c07da149e58d0595519828501908152604760f81b928601928352855191825251601a0b93810193909352516001600160f81b0319168284015291519081900390910190f3fea26469706673582212201ab47129f3eab3867568c8a514d6cb8da9e7498fc0b423578d0b41abd0e97b3364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6967692c {\n bytes24 s_0;\n int216 s_1;\n bytes1 s_2;\n }\n\n function test () public pure returns (S_6967692c memory) {\n S_6967692c memory r;\n {\n bytes24 r_0 = bytes24(0xb88ee50c8ae5d5e4c68206a6653e76262afb71a8d88fdd0c);\n r.s_0 = r_0;\n }\n {\n int216 r_1 = -21728527175090028658729961033124805230496319242339630440533481814;\n r.s_1 = r_1;\n }\n {\n bytes1 r_2 = bytes1(0x47);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0xb88ee50c8ae5d5e4c68206a6653e76262afb71a8d88fdd0c0000000000000000ffffffffffcb2e4de9622c1acf49cd63b8ef2dff36439f83f825eb61a72fa6aa4700000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes24,int56,address)", + "type": "(bytes24,int56,address)", + "value": [ + "0x50a5ecfe65a82eaac1141300923eb1b2a8240bcb11b6c969", + "-3899273644096060", + "0xa431E5C16A70fEb9Acf2ee180795834ccEe8C090" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x50a5ecfe65a82eaac1141300923eb1b2a8240bcb11b6c969" + }, + { + "type": "number", + "value": "-3899273644096060" + }, + { + "type": "address", + "value": "0xa431E5C16A70fEb9Acf2ee180795834ccEe8C090" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060fe8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051606080820183526000808352602080840182905292840152825180820184527f50a5ecfe65a82eaac1141300923eb1b2a8240bcb11b6c9690000000000000000808252660dda5e64703a3b1982850190815273a431e5c16a70feb9acf2ee180795834ccee8c09092860192835285519182525160060b93810193909352516001600160a01b03168284015291519081900390910190f3fea2646970667358221220c2cf0a63a65b200943762c8cec8e989ad671ec25d37a2c4502dc9574b461a66364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_eb86c502 {\n bytes24 s_0;\n int56 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_eb86c502 memory) {\n S_eb86c502 memory r;\n {\n bytes24 r_0 = bytes24(0x50a5ecfe65a82eaac1141300923eb1b2a8240bcb11b6c969);\n r.s_0 = r_0;\n }\n {\n int56 r_1 = -3899273644096060;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xa431E5C16A70fEb9Acf2ee180795834ccEe8C090;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x50a5ecfe65a82eaac1141300923eb1b2a8240bcb11b6c9690000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffff225a19b8fc5c4000000000000000000000000a431e5c16a70feb9acf2ee180795834ccee8c090" + }, + { + "name": "random-(bytes25,bytes20,bytes24)", + "type": "(bytes25,bytes20,bytes24)", + "value": [ + "0x15921a8f7cb3d8901cf43c63dd0e6a08998a50f9b2c9c271a7", + "0x1979743b744c8fb7a7986c44da00f07caac4cc9f", + "0x81985697e632307de12e3df8aa9f158813b6e1adc6bd7aec" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x15921a8f7cb3d8901cf43c63dd0e6a08998a50f9b2c9c271a7" + }, + { + "type": "hexstring", + "value": "0x1979743b744c8fb7a7986c44da00f07caac4cc9f" + }, + { + "type": "hexstring", + "value": "0x81985697e632307de12e3df8aa9f158813b6e1adc6bd7aec" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101278061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051606080820183526000808352602080840182905292840152825180820184527f15921a8f7cb3d8901cf43c63dd0e6a08998a50f9b2c9c271a700000000000000808252731979743b744c8fb7a7986c44da00f07caac4cc9f60601b8285019081527f81985697e632307de12e3df8aa9f158813b6e1adc6bd7aec00000000000000009286019283528551918252516bffffffffffffffffffffffff1916938101939093525167ffffffffffffffff19168284015291519081900390910190f3fea2646970667358221220c6b2c5b14cfbcbfe6c9a02a612d2669c4197b5bcdaea019daf2e4b4fb590a06064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_55f44d3e {\n bytes25 s_0;\n bytes20 s_1;\n bytes24 s_2;\n }\n\n function test () public pure returns (S_55f44d3e memory) {\n S_55f44d3e memory r;\n {\n bytes25 r_0 = bytes25(0x15921a8f7cb3d8901cf43c63dd0e6a08998a50f9b2c9c271a7);\n r.s_0 = r_0;\n }\n {\n bytes20 r_1 = bytes20(0x1979743B744c8FB7a7986c44Da00f07caaC4cc9f);\n r.s_1 = r_1;\n }\n {\n bytes24 r_2 = bytes24(0x81985697e632307de12e3df8aa9f158813b6e1adc6bd7aec);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x15921a8f7cb3d8901cf43c63dd0e6a08998a50f9b2c9c271a7000000000000001979743b744c8fb7a7986c44da00f07caac4cc9f00000000000000000000000081985697e632307de12e3df8aa9f158813b6e1adc6bd7aec0000000000000000" + }, + { + "name": "random-(bytes26,uint[2])", + "type": "(bytes26,uint[2])", + "value": [ + "0xa1e1d6c55f7eb30e18e32031e7ad1837dfa1b704909e486ec586", + [ + "3381454261040671250240097331609987267782800533360147441361472604434919432433", + "107032672466797636394218298275894145354182532628458639820435046562831394218514" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa1e1d6c55f7eb30e18e32031e7ad1837dfa1b704909e486ec586" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3381454261040671250240097331609987267782800533360147441361472604434919432433" + }, + { + "type": "number", + "value": "107032672466797636394218298275894145354182532628458639820435046562831394218514" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610197806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061011b565b60405180910390f35b6100566100de565b61005e6100de565b7fa1e1d6c55f7eb30e18e32031e7ad1837dfa1b704909e486ec58600000000000081526100896100fd565b7f0779d5d56ee65b70bb2d5220f699e7df2bc67b11bb8fb56f8f95a4df4749a0f181527feca2588662324e7bd3825af7081743d81620cb99cd982d18f0f8d9a177692212602080830191909152820152919050565b6040805180820190915260008152602081016100f86100fd565b905290565b60405180604001604052806002906020820280368337509192915050565b815165ffffffffffff1916815260208083015160608301919081840160005b60028110156101575782518252918301919083019060010161013a565b505050509291505056fea2646970667358221220efd03f6654bec0af3f8690641563d8320fed593f914c78c33c0bbaee80940ed564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5fab7f9e {\n bytes26 s_0;\n uint256[2] s_1;\n }\n\n function test () public pure returns (S_5fab7f9e memory) {\n S_5fab7f9e memory r;\n {\n bytes26 r_0 = bytes26(0xa1e1d6c55f7eb30e18e32031e7ad1837dfa1b704909e486ec586);\n r.s_0 = r_0;\n }\n {\n uint256[2] memory r_1;\n {\n uint r_1_0 = 3381454261040671250240097331609987267782800533360147441361472604434919432433;\n r_1[0] = r_1_0;\n }\n {\n uint r_1_1 = 107032672466797636394218298275894145354182532628458639820435046562831394218514;\n r_1[1] = r_1_1;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0xa1e1d6c55f7eb30e18e32031e7ad1837dfa1b704909e486ec5860000000000000779d5d56ee65b70bb2d5220f699e7df2bc67b11bb8fb56f8f95a4df4749a0f1eca2588662324e7bd3825af7081743d81620cb99cd982d18f0f8d9a177692212" + }, + { + "name": "random-(bytes27[2],int8)", + "type": "(bytes27[2],int8)", + "value": [ + [ + "0x14e4be810c61a5b320e0afa1331df35736cb5b5dba71c23d04adfb", + "0x87d4bb78aa7b8a5b480d6f41bd014a46919d7bce5d1fa15b92cf80" + ], + "7" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x14e4be810c61a5b320e0afa1331df35736cb5b5dba71c23d04adfb" + }, + { + "type": "hexstring", + "value": "0x87d4bb78aa7b8a5b480d6f41bd014a46919d7bce5d1fa15b92cf80" + } + ] + }, + { + "type": "number", + "value": "7" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061017d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ff565b60405180910390f35b6100566100c1565b61005e6100c1565b6100666100e1565b7f14e4be810c61a5b320e0afa1331df35736cb5b5dba71c23d04adfb000000000081527f87d4bb78aa7b8a5b480d6f41bd014a46919d7bce5d1fa15b92cf800000000000602080830191909152908252600790820152919050565b60405180604001604052806100d46100e1565b8152600060209091015290565b60405180604001604052806002906020820280368337509192915050565b815160608201908260005b600281101561013157825164ffffffffff191682526020928301929091019060010161010a565b505050602083015160000b60408301529291505056fea2646970667358221220db55ab20ffdeb1c1d7440bcfca844da67488c48688a533eabc1c0fc53defb52764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_89a56a03 {\n bytes27[2] s_0;\n int8 s_1;\n }\n\n function test () public pure returns (S_89a56a03 memory) {\n S_89a56a03 memory r;\n {\n bytes27[2] memory r_0;\n {\n bytes27 r_0_0 = bytes27(0x14e4be810c61a5b320e0afa1331df35736cb5b5dba71c23d04adfb);\n r_0[0] = r_0_0;\n }\n {\n bytes27 r_0_1 = bytes27(0x87d4bb78aa7b8a5b480d6f41bd014a46919d7bce5d1fa15b92cf80);\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n int8 r_1 = 7;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x14e4be810c61a5b320e0afa1331df35736cb5b5dba71c23d04adfb000000000087d4bb78aa7b8a5b480d6f41bd014a46919d7bce5d1fa15b92cf8000000000000000000000000000000000000000000000000000000000000000000000000007" + }, + { + "name": "random-(bytes28,address,bytes8)", + "type": "(bytes28,address,bytes8)", + "value": [ + "0xc1dd2b2a00de05803030740e4d7ccfb787525d04ada0027b42ec9e4e", + "0x4Ce6B14A2E22635ac25B6820e0eE74e1F81bC4fe", + "0x10dff2d98f20e2ad" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc1dd2b2a00de05803030740e4d7ccfb787525d04ada0027b42ec9e4e" + }, + { + "type": "address", + "value": "0x4Ce6B14A2E22635ac25B6820e0eE74e1F81bC4fe" + }, + { + "type": "hexstring", + "value": "0x10dff2d98f20e2ad" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101088061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051606080820183526000808352602080840182905292840152825180820184527fc1dd2b2a00de05803030740e4d7ccfb787525d04ada0027b42ec9e4e00000000808252734ce6b14a2e22635ac25b6820e0ee74e1f81bc4fe8285019081526710dff2d98f20e2ad60c01b9286019283528551918252516001600160a01b031693810193909352516001600160c01b0319168284015291519081900390910190f3fea2646970667358221220525d0b926e15a840acefea52d03bc22d22ce684f76df755033c5aa7ae28e000164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0dd58050 {\n bytes28 s_0;\n address s_1;\n bytes8 s_2;\n }\n\n function test () public pure returns (S_0dd58050 memory) {\n S_0dd58050 memory r;\n {\n bytes28 r_0 = bytes28(0xc1dd2b2a00de05803030740e4d7ccfb787525d04ada0027b42ec9e4e);\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x4Ce6B14A2E22635ac25B6820e0eE74e1F81bC4fe;\n r.s_1 = r_1;\n }\n {\n bytes8 r_2 = bytes8(0x10dff2d98f20e2ad);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0xc1dd2b2a00de05803030740e4d7ccfb787525d04ada0027b42ec9e4e000000000000000000000000000000004ce6b14a2e22635ac25b6820e0ee74e1f81bc4fe10dff2d98f20e2ad000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes3,bool)[3]", + "type": "(bytes3,bool)[3]", + "value": [ + ["0xd7ab06", false], + ["0xb44d88", false], + ["0xd7eed7", true] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd7ab06" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xb44d88" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd7eed7" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610172806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f3565b60405180910390f35b6100566100ba565b61005e6100ba565b60408051808201825260006020808301829052626bd58360e91b83529184528251808401845280830191909152621689b160eb1b8152838201528151808301835262d7eed760e81b815260019181019190915290820152919050565b60405180606001604052806003905b60408051808201909152600080825260208201528152602001906001900390816100c95790505090565b60c08101818360005b600381101561013357815180516001600160e81b0319168452602090810151151581850152604090930192909101906001016100fc565b5050509291505056fea2646970667358221220b5ac6255a32de15742ba162189722c87b2e7681cde6524f116af8dce8325d1a464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2c415720 {\n bytes3 s_0;\n bool s_1;\n }\n\n function test () public pure returns (S_2c415720[3] memory) {\n S_2c415720[3] memory r;\n {\n S_2c415720 memory r_0;\n {\n bytes3 r_0_0 = bytes3(0xd7ab06);\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_2c415720 memory r_1;\n {\n bytes3 r_1_0 = bytes3(0xb44d88);\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n {\n S_2c415720 memory r_2;\n {\n bytes3 r_2_0 = bytes3(0xd7eed7);\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2.s_1 = r_2_1;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xd7ab0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b44d8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d7eed700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bytes3[1],address)", + "type": "(bytes3[1],address)", + "value": [["0xd7d24c"], "0xd2Aa812E2D729F44Ee8807EBaf199a4e5b567F81"], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xd7d24c" + } + ] + }, + { + "type": "address", + "value": "0xd2Aa812E2D729F44Ee8807EBaf199a4e5b567F81" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610152806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ce565b60405180910390f35b610056610090565b61005e610090565b6100666100b0565b6235f49360ea1b8152815273d2aa812e2d729f44ee8807ebaf199a4e5b567f816020820152919050565b60405180604001604052806100a36100b0565b8152600060209091015290565b60405180602001604052806001906020820280368337509192915050565b815160408201908260005b60018110156101025782516001600160e81b0319168252602092830192909101906001016100d9565b5050506020928301516001600160a01b031691909201529056fea26469706673582212204f3f47c86720e6f40f75f6072bb2ab8bfe7a651116d20d09f34bb5de4fc027a364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_12d82b5e {\n bytes3[1] s_0;\n address s_1;\n }\n\n function test () public pure returns (S_12d82b5e memory) {\n S_12d82b5e memory r;\n {\n bytes3[1] memory r_0;\n {\n bytes3 r_0_0 = bytes3(0xd7d24c);\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xd2Aa812E2D729F44Ee8807EBaf199a4e5b567F81;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0xd7d24c0000000000000000000000000000000000000000000000000000000000000000000000000000000000d2aa812e2d729f44ee8807ebaf199a4e5b567f81" + }, + { + "name": "random-(bytes31,string,bytes27)", + "type": "(bytes31,string,bytes27)", + "value": [ + "0xf0102294aa7504efff4acc900cd276f94b4c8f0596fa0c1f42c29477816ac1", + "Moo é🚀 é", + "0x93e0773a190d4c7237f49615b9e16605e92b192ee29e802420ffe9" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf0102294aa7504efff4acc900cd276f94b4c8f0596fa0c1f42c29477816ac1" + }, + { + "type": "string", + "value": "Moo é🚀 é" + }, + { + "type": "hexstring", + "value": "0x93e0773a190d4c7237f49615b9e16605e92b192ee29e802420ffe9" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061019b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b604080516060808201835260008083526020808401839052928401819052835180830185528084019283528085019182527ff0102294aa7504efff4acc900cd276f94b4c8f0596fa0c1f42c29477816ac100815284518086018652600e81526d4d6f6f20c3a9f09f9a802020c3a960901b94810194909452929091527f93e0773a190d4c7237f49615b9e16605e92b192ee29e802420ffe90000000000905290516100db91906100e4565b60405180910390f35b6000602080835260ff19845116818401528084015160606040850152805180608086015260005b818110156101275782810184015186820160a00152830161010b565b8181111561013957600060a083880101525b50604086015164ffffffffff19811660608701529250601f01601f19169390930160a00194935050505056fea2646970667358221220c269b21ec15ceb006f28d3da3d9a021ddde63bf2746a3b0ecd507d88d95f462664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c559aeab {\n bytes31 s_0;\n string s_1;\n bytes27 s_2;\n }\n\n function test () public pure returns (S_c559aeab memory) {\n S_c559aeab memory r;\n {\n bytes31 r_0 = bytes31(0xf0102294aa7504efff4acc900cd276f94b4c8f0596fa0c1f42c29477816ac1);\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀 é\";\n r.s_1 = r_1;\n }\n {\n bytes27 r_2 = bytes27(0x93e0773a190d4c7237f49615b9e16605e92b192ee29e802420ffe9);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020f0102294aa7504efff4acc900cd276f94b4c8f0596fa0c1f42c29477816ac100000000000000000000000000000000000000000000000000000000000000006093e0773a190d4c7237f49615b9e16605e92b192ee29e802420ffe90000000000000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a802020c3a9000000000000000000000000000000000000" + }, + { + "name": "random-(bytes8[3][1])", + "type": "(bytes8[3][1])", + "value": [[["0xdfc864118c83f8e7", "0xb9a2181b1360df25", "0xab2c30308ba91d1b"]]], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xdfc864118c83f8e7" + }, + { + "type": "hexstring", + "value": "0xb9a2181b1360df25" + }, + { + "type": "hexstring", + "value": "0xab2c30308ba91d1b" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101ab806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061010a565b60405180910390f35b6100566100a7565b61005e6100a7565b6100666100bf565b61006e6100ec565b67dfc864118c83f8e760c01b815267b9a2181b1360df2560c01b602082015267ab2c30308ba91d1b60c01b604082015281528152919050565b60405180602001604052806100ba6100bf565b905290565b60405180602001604052806001905b6100d66100ec565b8152602001906001900390816100ce5790505090565b60405180606001604052806003906020820280368337509192915050565b8151606082810191836000805b6001808210610126575061016a565b845184845b60038110156101535782516001600160c01b031916825260209283019290910190830161012b565b505050602094909401935091840191600101610117565b50505050509291505056fea2646970667358221220676862ea7fbd67ce2d5862be6954b9c8c3638c86979cb9f4bf3f8e03619ca12264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ddb818a7 {\n bytes8[3][1] s_0;\n }\n\n function test () public pure returns (S_ddb818a7 memory) {\n S_ddb818a7 memory r;\n {\n bytes8[3][1] memory r_0;\n {\n bytes8[3] memory r_0_0;\n {\n bytes8 r_0_0_0 = bytes8(0xdfc864118c83f8e7);\n r_0_0[0] = r_0_0_0;\n }\n {\n bytes8 r_0_0_1 = bytes8(0xb9a2181b1360df25);\n r_0_0[1] = r_0_0_1;\n }\n {\n bytes8 r_0_0_2 = bytes8(0xab2c30308ba91d1b);\n r_0_0[2] = r_0_0_2;\n }\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0xdfc864118c83f8e7000000000000000000000000000000000000000000000000b9a2181b1360df25000000000000000000000000000000000000000000000000ab2c30308ba91d1b000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes9[3],bool)", + "type": "(bytes9[3],bool)", + "value": [["0x92ec5cc62c18e77737", "0xc8ea37858cad5316fa", "0x1bd9369acfc6ad0d05"], false], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x92ec5cc62c18e77737" + }, + { + "type": "hexstring", + "value": "0xc8ea37858cad5316fa" + }, + { + "type": "hexstring", + "value": "0x1bd9369acfc6ad0d05" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610168806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e9565b60405180910390f35b6100566100ab565b61005e6100ab565b6100666100cb565b6892ec5cc62c18e7773760b81b81526864751bc2c656a98b7d60b91b602080830191909152681bd9369acfc6ad0d0560b81b6040830152908252600090820152919050565b60405180604001604052806100be6100cb565b8152600060209091015290565b60405180606001604052806003906020820280368337509192915050565b815160808201908260005b600381101561011d5782516001600160b81b0319168252602092830192909101906001016100f4565b5050506020830151151560608301529291505056fea2646970667358221220367946dac26edcf6a837d97ce2378c2a320da894644571877f67ae3ce0f7b9bf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5959da7a {\n bytes9[3] s_0;\n bool s_1;\n }\n\n function test () public pure returns (S_5959da7a memory) {\n S_5959da7a memory r;\n {\n bytes9[3] memory r_0;\n {\n bytes9 r_0_0 = bytes9(0x92ec5cc62c18e77737);\n r_0[0] = r_0_0;\n }\n {\n bytes9 r_0_1 = bytes9(0xc8ea37858cad5316fa);\n r_0[1] = r_0_1;\n }\n {\n bytes9 r_0_2 = bytes9(0x1bd9369acfc6ad0d05);\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x92ec5cc62c18e777370000000000000000000000000000000000000000000000c8ea37858cad5316fa00000000000000000000000000000000000000000000001bd9369acfc6ad0d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int128,address,string)", + "type": "(int128,address,string)", + "value": [ + "137492000947346872274566097977901265657", + "0xC227Cff1416b9AE87174E0Ce1afbdB9F05375Cf9", + "Moo é🚀 oo oooéoééoooooééMoM o oo🚀🚀o ééooéo o " + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "137492000947346872274566097977901265657" + }, + { + "type": "address", + "value": "0xC227Cff1416b9AE87174E0Ce1afbdB9F05375Cf9" + }, + { + "type": "string", + "value": "Moo é🚀 oo oooéoééoooooééMoM o oo🚀🚀o ééooéo o " + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100c7565b60405180910390f35b604080516060808201835260008083526020808401829052838501839052845180840186528086018490526f676fff053f5fd8e0e63516a5dce732f9815273c227cff1416b9ae87174e0ce1afbdb9f05375cf9818301528551938401865285845293949192919061014490830139604083015250919050565b600060208083528351600f0b8184015260018060a01b03818501511660408401526040840151606080850152805180608086015260005b8181101561011a5782810184015186820160a0015283016100fe565b8181111561012c57600060a083880101525b50601f01601f19169390930160a00194935050505056fe4d6f6f20c3a9f09f9a8020206f6f206f6f6fc3a96fc3a9c3a96f6f6f6f6fc3a9c3a94d6f4d206f206f6ff09f9a80f09f9a806f20c3a9c3a96f6fc3a96f206f20a26469706673582212208cba58380c57b8450fa1d83953b39103b6be8e23346d85aaea670ee50e5856da64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_273ceed5 {\n int128 s_0;\n address s_1;\n string s_2;\n }\n\n function test () public pure returns (S_273ceed5 memory) {\n S_273ceed5 memory r;\n {\n int128 r_0 = 137492000947346872274566097977901265657;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xC227Cff1416b9AE87174E0Ce1afbdB9F05375Cf9;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀 oo oooéoééoooooééMoM o oo🚀🚀o ééooéo o \";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000676fff053f5fd8e0e63516a5dce732f9000000000000000000000000c227cff1416b9ae87174e0ce1afbdb9f05375cf9000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000404d6f6f20c3a9f09f9a8020206f6f206f6f6fc3a96fc3a9c3a96f6f6f6f6fc3a9c3a94d6f4d206f206f6ff09f9a80f09f9a806f20c3a9c3a96f6fc3a96f206f20" + }, + { + "name": "random-(int136,address,bytes16)", + "type": "(int136,address,bytes16)", + "value": [ + "42268464344099993146060504224956208939822", + "0xd461858f94240Adc4D9811Dc86700A2Cd40E2285", + "0x21a0374031bdd28b0aad29a87440e86a" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "42268464344099993146060504224956208939822" + }, + { + "type": "address", + "value": "0xd461858f94240Adc4D9811Dc86700A2Cd40E2285" + }, + { + "type": "hexstring", + "value": "0x21a0374031bdd28b0aad29a87440e86a" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061010a8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835260208084018290529284015282518082018452707c37421e4c9ed979f284d932d28568832e80825273d461858f94240adc4d9811dc86700a2cd40e22858285019081526f10d01ba018dee945855694d43a20743560811b9286019283528551918252516001600160a01b031693810193909352516fffffffffffffffffffffffffffffffff19168284015291519081900390910190f3fea2646970667358221220b72b57899537a7e268867c26efa9eba24f0130c62c5edab1e51363a533c1a51064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c6a0532a {\n int136 s_0;\n address s_1;\n bytes16 s_2;\n }\n\n function test () public pure returns (S_c6a0532a memory) {\n S_c6a0532a memory r;\n {\n int136 r_0 = 42268464344099993146060504224956208939822;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xd461858f94240Adc4D9811Dc86700A2Cd40E2285;\n r.s_1 = r_1;\n }\n {\n bytes16 r_2 = bytes16(0x21a0374031bdd28b0aad29a87440e86a);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000007c37421e4c9ed979f284d932d28568832e000000000000000000000000d461858f94240adc4d9811dc86700a2cd40e228521a0374031bdd28b0aad29a87440e86a00000000000000000000000000000000" + }, + { + "name": "random-(int144,uint136,string)", + "type": "(int144,uint136,string)", + "value": [ + "3001655819494298894465914335526795829869475", + "15766196183739325452686206951725169198000", + "Moo é🚀oooéo é MéM o🚀 M🚀éM oMMéoéo🚀ooMo o🚀 éo" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "3001655819494298894465914335526795829869475" + }, + { + "type": "number", + "value": "15766196183739325452686206951725169198000" + }, + { + "type": "string", + "value": "Moo é🚀oooéo é MéM o🚀 M🚀éM oMMéoéo🚀ooMo o🚀 éo" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101cf806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100cd565b60405180910390f35b604080516060808201835260008083526020808401829052838501839052845180840186528086019390935271227512da8d030cdca786fad63de0a7b87ba38352702e552aef1658be7e54b461c741ddd543b0838201528451608081019095526045808652939492939192919061015590830139604083015250919050565b60006020808352835160110b8184015270ffffffffffffffffffffffffffffffffff818501511660408401526040840151606080850152805180608086015260005b8181101561012b5782810184015186820160a00152830161010f565b8181111561013d57600060a083880101525b50601f01601f19169390930160a00194935050505056fe4d6f6f20c3a9f09f9a806f6f6fc3a96f2020c3a9204dc3a94d206ff09f9a80204df09f9a80c3a94d20206f4d4dc3a96fc3a96ff09f9a806f6f4d6f206ff09f9a8020c3a96fa2646970667358221220b97b91413eae57a05de43206b5e075678fa508b928f7fd13d0723586d853100964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_89883ddc {\n int144 s_0;\n uint136 s_1;\n string s_2;\n }\n\n function test () public pure returns (S_89883ddc memory) {\n S_89883ddc memory r;\n {\n int144 r_0 = 3001655819494298894465914335526795829869475;\n r.s_0 = r_0;\n }\n {\n uint136 r_1 = 15766196183739325452686206951725169198000;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀oooéo é MéM o🚀 M🚀éM oMMéoéo🚀ooMo o🚀 éo\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000227512da8d030cdca786fad63de0a7b87ba30000000000000000000000000000002e552aef1658be7e54b461c741ddd543b0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a806f6f6fc3a96f2020c3a9204dc3a94d206ff09f9a80204df09f9a80c3a94d20206f4d4dc3a96fc3a96ff09f9a806f6f4d6f206ff09f9a8020c3a96f000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int200,string,(address))", + "type": "(int200,string,(address))", + "value": [ + "-150915452392088506841901255199558091642573915955461155753319", + "Moo é🚀ooooM🚀M🚀o🚀oM o🚀🚀éMoooé🚀🚀🚀o🚀oé éooM🚀éo oéMo ééé oooMo M ", + ["0xfb79Fbb05e6fbA6700DdaCC71C2467807f82525B"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-150915452392088506841901255199558091642573915955461155753319" + }, + { + "type": "string", + "value": "Moo é🚀ooooM🚀M🚀o🚀oM o🚀🚀éMoooé🚀🚀🚀o🚀oé éooM🚀éo oéMo ééé oooMo M " + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xfb79Fbb05e6fbA6700DdaCC71C2467807f82525B" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061022a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610109565b60405180910390f35b6100566100c9565b61005e6100c9565b78180aced75c75d54c8923fc1eea3d8dddf446797e1137588d661981526040805160a0810190915260698082526000919061018c602083013960208381019190915260408051918201815273fb79fbb05e6fba6700ddacc71c2467807f82525b825283015250919050565b6040518060600160405280600060180b815260200160608152602001610104604051806020016040528060006001600160a01b031681525090565b905290565b60006020808352835160180b818401528084015160606040850152805180608086015260005b8181101561014b5782810184015186820160a00152830161012f565b8181111561015d57600060a083880101525b50604086015180516001600160a01b031660608701529250601f01601f19169390930160a00194935050505056fe4d6f6f20c3a9f09f9a806f6f6f6f4df09f9a804df09f9a806ff09f9a806f4d206ff09f9a80f09f9a80c3a94d6f6f6fc3a9f09f9a80f09f9a80f09f9a806ff09f9a806fc3a920c3a96f6f4df09f9a80c3a96f206fc3a94d6f20c3a9c3a9c3a920206f6f6f4d6f204d20a2646970667358221220aa0f77d215566830ba704446f8fb183a2a356dfd4121ffe04a1dcab7fdedecbf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_77829ea8 {\n int200 s_0;\n string s_1;\n S_421683f8 s_2;\n }\n\n function test () public pure returns (S_77829ea8 memory) {\n S_77829ea8 memory r;\n {\n int200 r_0 = -150915452392088506841901255199558091642573915955461155753319;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀ooooM🚀M🚀o🚀oM o🚀🚀éMoooé🚀🚀🚀o🚀oé éooM🚀éo oéMo ééé oooMo M \";\n r.s_1 = r_1;\n }\n {\n S_421683f8 memory r_2;\n {\n address r_2_0 = 0xfb79Fbb05e6fbA6700DdaCC71C2467807f82525B;\n r_2.s_0 = r_2_0;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020ffffffffffffffe7f53128a38a2ab376dc03e115c272220bb98681eec8a772990000000000000000000000000000000000000000000000000000000000000060000000000000000000000000fb79fbb05e6fba6700ddacc71c2467807f82525b00000000000000000000000000000000000000000000000000000000000000694d6f6f20c3a9f09f9a806f6f6f6f4df09f9a804df09f9a806ff09f9a806f4d206ff09f9a80f09f9a80c3a94d6f6f6fc3a9f09f9a80f09f9a80f09f9a806ff09f9a806fc3a920c3a96f6f4df09f9a80c3a96f206fc3a94d6f20c3a9c3a9c3a920206f6f6f4d6f204d200000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int208,int8[4])", + "type": "(int208,int8[4])", + "value": [ + "-177127991800222061415097344109375247770132103408970392127634213", + ["29", "18", "47", "-13"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-177127991800222061415097344109375247770132103408970392127634213" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "29" + }, + { + "type": "number", + "value": "18" + }, + { + "type": "number", + "value": "47" + }, + { + "type": "number", + "value": "-13" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610164806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ea565b60405180910390f35b6100566100aa565b61005e6100aa565b796e3a1dfa1522219fd75e53df2dc3f8ac88aaa07ab39ea0277b241981526100846100cc565b601d81526012602080830191909152602f6040830152600c196060830152820152919050565b6040518060400160405280600060190b81526020016100c76100cc565b905290565b60405180608001604052806004906020820280368337509192915050565b815160190b815260208083015160a0830191908184016000805b6004811015610123578351820b83529284019291840191600101610104565b50505050509291505056fea2646970667358221220b1f36bb892f4c89c77a8ea1e1b6aa054e07249f1cd3141df581a5bf3021cfe3564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f500dc86 {\n int208 s_0;\n int8[4] s_1;\n }\n\n function test () public pure returns (S_f500dc86 memory) {\n S_f500dc86 memory r;\n {\n int208 r_0 = -177127991800222061415097344109375247770132103408970392127634213;\n r.s_0 = r_0;\n }\n {\n int8[4] memory r_1;\n {\n int8 r_1_0 = 29;\n r_1[0] = r_1_0;\n }\n {\n int8 r_1_1 = 18;\n r_1[1] = r_1_1;\n }\n {\n int8 r_1_2 = 47;\n r_1[2] = r_1_2;\n }\n {\n int8 r_1_3 = -13;\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffff91c5e205eaddde6028a1ac20d23c075377555f854c615fd884db000000000000000000000000000000000000000000000000000000000000001d0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3" + }, + { + "name": "random-(int72,address,bool)", + "type": "(int72,address,bool)", + "value": ["-882374201143280438557", "0x3305744246f16c4d1B39F0ec4a7c1f0491826475", true], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-882374201143280438557" + }, + { + "type": "address", + "value": "0x3305744246f16c4d1B39F0ec4a7c1f0491826475" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060e08061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835260208084018290529284015282518082018452682fd566e4ebc24e8d1c19808252733305744246f16c4d1b39f0ec4a7c1f049182647582850190815260019286019283528551918252516001600160a01b0316938101939093525115158284015291519081900390910190f3fea2646970667358221220076e77928983ab7e5bfc82f99ab98611c3c2e0cd2155a9ac2792bafa3916f5cd64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_3c8d1b82 {\n int72 s_0;\n address s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_3c8d1b82 memory) {\n S_3c8d1b82 memory r;\n {\n int72 r_0 = -882374201143280438557;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x3305744246f16c4d1B39F0ec4a7c1f0491826475;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffffffd02a991b143db172e30000000000000000000000003305744246f16c4d1b39f0ec4a7c1f04918264750000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(string,(address[1]))", + "type": "(string,(address[1]))", + "value": [ + "Moo é🚀🚀 🚀🚀 🚀 é o M é🚀Mo é🚀🚀 oééo", + [["0xf7815C339Ad09cB55cFdC61Fa3848dD12e0A687b"]] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀 🚀🚀 🚀 é o M é🚀Mo é🚀🚀 oééo" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xf7815C339Ad09cB55cFdC61Fa3848dD12e0A687b" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610208806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100fb565b60405180910390f35b6100566100af565b61005e6100af565b6000604051806060016040528060408152602001610193604091398252506100846100ce565b61008c6100dd565b73f7815c339ad09cb55cfdc61fa3848dd12e0a687b815281526020820152919050565b6040518060400160405280606081526020016100c96100ce565b905290565b60405180602001604052806100c95b60405180602001604052806001906020820280368337509192915050565b600060208083528351604082850152805180606086015260005b8181101561013157828101840151868201608001528301610115565b81811115610143576000608083880101525b50858301515191506000604086015b600182101561017a5783516001600160a01b0316815292840192600191909101908401610152565b5050601f01601f19169390930160800194935050505056fe4d6f6f20c3a9f09f9a80f09f9a8020f09f9a80f09f9a802020f09f9a8020c3a9206f20204d20c3a9f09f9a804d6f20c3a9f09f9a80f09f9a80206fc3a9c3a96fa26469706673582212203cefe73fc23fa85c5bcc2ed801a535840a46fd57414e662d73256a6e3d09bc5464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_32c4464b {\n address[1] s_0;\n }\n\n struct S_abd5d0e0 {\n string s_0;\n S_32c4464b s_1;\n }\n\n function test () public pure returns (S_abd5d0e0 memory) {\n S_abd5d0e0 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀🚀 🚀🚀 🚀 é o M é🚀Mo é🚀🚀 oééo\";\n r.s_0 = r_0;\n }\n {\n S_32c4464b memory r_1;\n {\n address[1] memory r_1_0;\n {\n address r_1_0_0 = 0xf7815C339Ad09cB55cFdC61Fa3848dD12e0A687b;\n r_1_0[0] = r_1_0_0;\n }\n r_1.s_0 = r_1_0;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000f7815c339ad09cb55cfdc61fa3848dd12e0a687b00000000000000000000000000000000000000000000000000000000000000404d6f6f20c3a9f09f9a80f09f9a8020f09f9a80f09f9a802020f09f9a8020c3a9206f20204d20c3a9f09f9a804d6f20c3a9f09f9a80f09f9a80206fc3a9c3a96f" + }, + { + "name": "random-(string,(string,string))", + "type": "(string,(string,string))", + "value": [ + "Moo é🚀🚀o", + ["Moo é🚀🚀éé🚀M🚀MoMoéooéoo", "Moo é🚀éoé🚀🚀oMo🚀oMoM🚀éMo🚀Moé🚀o"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀o" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀éé🚀M🚀MoMoéooéoo" + }, + { + "type": "string", + "value": "Moo é🚀éoé🚀🚀oMo🚀oMoM🚀éMo🚀Moé🚀o" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610266806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061016b565b60405180910390f35b6100566100ea565b61005e6100ea565b604080518082018252600f81526e4d6f6f20c3a9f09f9a80f09f9a806f60881b602080830191909152908352815180830190925260608083529082015260006040518060600160405280602781526020016101d36027913982525060408051606081019091526037808252600091906101fa602083013960208084019190915283019190915250919050565b604051806040016040528060608152602001610119604051806040016040528060608152602001606081525090565b905290565b6000815180845260005b8181101561014457602081850181015186830182015201610128565b81811115610156576000602083870101525b50601f01601f19169290920160200192915050565b602081526000825160406020840152610187606084018261011e565b90506020840151601f198483030160408501528051604083526101ad604084018261011e565b90506020820151915082810360208401526101c8818361011e565b969550505050505056fe4d6f6f20c3a9f09f9a80f09f9a80c3a9c3a9f09f9a804df09f9a804d6f4d6fc3a96f6fc3a96f6f4d6f6f20c3a9f09f9a80c3a96fc3a9f09f9a80f09f9a806f4d6ff09f9a806f4d6f4df09f9a80c3a94d6ff09f9a804d6fc3a9f09f9a806fa2646970667358221220e361545d709e9020dc90c75a908e5717339f26cabbcb7b47aa658f3d308f9fac64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fb587d32 {\n string s_0;\n string s_1;\n }\n\n struct S_9164e5c7 {\n string s_0;\n S_fb587d32 s_1;\n }\n\n function test () public pure returns (S_9164e5c7 memory) {\n S_9164e5c7 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀🚀o\";\n r.s_0 = r_0;\n }\n {\n S_fb587d32 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀🚀éé🚀M🚀MoMoéooéoo\";\n r_1.s_0 = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀éoé🚀🚀oMo🚀oMoM🚀éMo🚀Moé🚀o\";\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a80f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a80f09f9a80c3a9c3a9f09f9a804df09f9a804d6f4d6fc3a96f6fc3a96f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a80c3a96fc3a9f09f9a80f09f9a806f4d6ff09f9a806f4d6f4df09f9a80c3a94d6ff09f9a804d6fc3a9f09f9a806f000000000000000000" + }, + { + "name": "random-(string,address,bool)", + "type": "(string,address,bool)", + "value": [ + "Moo é🚀 é éMoMoéo🚀oM🚀o🚀éo oM", + "0x8eE6e8eFa3dC3D2a9D02974D6B40D0A662e540cB", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é éMoMoéo🚀oM🚀o🚀éo oM" + }, + { + "type": "address", + "value": "0x8eE6e8eFa3dC3D2a9D02974D6B40D0A662e540cB" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100cc565b60405180910390f35b6040805160608082018352815260006020820181905291810191909152604080516060808201835281526000602082018190529181019190915260006040518060600160405280602d815260200161014f602d9139825250738ee6e8efa3dc3d2a9d02974d6b40d0a662e540cb602082015260006040820152919050565b600060208083528351606082850152805180608086015260005b818110156101025782810184015186820160a0015283016100e6565b8181111561011457600060a083880101525b50918501516001600160a01b038116604086015291604086015180151560608701529250601f01601f19169390930160a00194935050505056fe4d6f6f20c3a9f09f9a8020c3a920c3a94d6f4d6fc3a96ff09f9a806f4df09f9a806ff09f9a80c3a96f20206f4da2646970667358221220b4f4366df16875900531c7cdfeb9fe3718688657d537d37fd294114168f8744364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d2385fb3 {\n string s_0;\n address s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_d2385fb3 memory) {\n S_d2385fb3 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 é éMoMoéo🚀oM🚀o🚀éo oM\";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x8eE6e8eFa3dC3D2a9D02974D6B40D0A662e540cB;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000008ee6e8efa3dc3d2a9d02974d6b40d0a662e540cb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a8020c3a920c3a94d6f4d6fc3a96ff09f9a806f4df09f9a806ff09f9a80c3a96f20206f4d00000000000000000000000000000000000000" + }, + { + "name": "random-(string,address,bytes30)", + "type": "(string,address,bytes30)", + "value": [ + "Moo é🚀oo 🚀Mééé🚀ooéo🚀oé é ooéoo🚀 oo MM🚀 🚀éoo Mé🚀", + "0x1dd8f9AB6Bc6295324dd62937274C2A365eE13fF", + "0xcc84ee342dc1a5c6aaeb55efe55c9618e7a54788b36b08331fd3ef6ac8a5" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo 🚀Mééé🚀ooéo🚀oé é ooéoo🚀 oo MM🚀 🚀éoo Mé🚀" + }, + { + "type": "address", + "value": "0x1dd8f9AB6Bc6295324dd62937274C2A365eE13fF" + }, + { + "type": "hexstring", + "value": "0xcc84ee342dc1a5c6aaeb55efe55c9618e7a54788b36b08331fd3ef6ac8a5" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101fb806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100eb565b60405180910390f35b60408051606080820183528152600060208201819052918101919091526040805160608082018352815260006020820181905291810191909152600060405180608001604052806055815260200161017160559139825250731dd8f9ab6bc6295324dd62937274c2a365ee13ff60208201527fcc84ee342dc1a5c6aaeb55efe55c9618e7a54788b36b08331fd3ef6ac8a500006040820152919050565b600060208083528351606082850152805180608086015260005b818110156101215782810184015186820160a001528301610105565b8181111561013357600060a083880101525b50918501516001600160a01b038116604086015291604086015161ffff19811660608701529250601f01601f19169390930160a00194935050505056fe4d6f6f20c3a9f09f9a806f6f20f09f9a804dc3a9c3a9c3a9f09f9a806f6fc3a96ff09f9a806fc3a920c3a920206f6fc3a96f6ff09f9a80206f6f204d4df09f9a8020202020f09f9a80c3a96f6f204dc3a9f09f9a80a2646970667358221220f6db917654a8ac1950241facb59716bbb77f665081435a9c34267af9d6667d7a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e3431749 {\n string s_0;\n address s_1;\n bytes30 s_2;\n }\n\n function test () public pure returns (S_e3431749 memory) {\n S_e3431749 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oo 🚀Mééé🚀ooéo🚀oé é ooéoo🚀 oo MM🚀 🚀éoo Mé🚀\";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x1dd8f9AB6Bc6295324dd62937274C2A365eE13fF;\n r.s_1 = r_1;\n }\n {\n bytes30 r_2 = bytes30(0xcc84ee342dc1a5c6aaeb55efe55c9618e7a54788b36b08331fd3ef6ac8a5);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000001dd8f9ab6bc6295324dd62937274c2a365ee13ffcc84ee342dc1a5c6aaeb55efe55c9618e7a54788b36b08331fd3ef6ac8a5000000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a806f6f20f09f9a804dc3a9c3a9c3a9f09f9a806f6fc3a96ff09f9a806fc3a920c3a920206f6fc3a96f6ff09f9a80206f6f204d4df09f9a8020202020f09f9a80c3a96f6f204dc3a9f09f9a800000000000000000000000" + }, + { + "name": "random-(string,address,string)", + "type": "(string,address,string)", + "value": [ + "Moo é🚀éé🚀M MM🚀 oé🚀MéMoéoooéoooooM 🚀🚀oo🚀o M", + "0x183EAa445b04Be08880FED2508b84aa22Ac046aa", + "Moo é🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éé🚀M MM🚀 oé🚀MéMoéoooéoooooM 🚀🚀oo🚀o M" + }, + { + "type": "address", + "value": "0x183EAa445b04Be08880FED2508b84aa22Ac046aa" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061020c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610138565b60405180910390f35b604080516060808201835280825260006020830152918101919091526040805160608082018352808252600060208301529181019190915260006040518060800160405280604681526020016101916046913982525073183eaa445b04be08880fed2508b84aa22ac046aa602080830191909152604080518082018252600a8152689adede418753e13f3560b71b92810192909252820152919050565b6000815180845260005b81811015610111576020818501810151868301820152016100f5565b81811115610123576000602083870101525b50601f01601f19169290920160200192915050565b60208152600082516060602084015261015460808401826100eb565b60208501516001600160a01b0316604085810191909152850151848203601f1901606086015290915061018782826100eb565b9594505050505056fe4d6f6f20c3a9f09f9a80c3a9c3a9f09f9a804d204d4df09f9a80206fc3a9f09f9a804dc3a94d6fc3a96f6f6fc3a96f6f6f6f6f4d20f09f9a80f09f9a806f6ff09f9a806f204da26469706673582212206c14a7288ddfca37236b93d158aa9bb7f545490d4ca3c4376cadb0c901a3217c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7d8f2a5d {\n string s_0;\n address s_1;\n string s_2;\n }\n\n function test () public pure returns (S_7d8f2a5d memory) {\n S_7d8f2a5d memory r;\n {\n string memory r_0 = unicode\"Moo é🚀éé🚀M MM🚀 oé🚀MéMoéoooéoooooM 🚀🚀oo🚀o M\";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x183EAa445b04Be08880FED2508b84aa22Ac046aa;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000183eaa445b04be08880fed2508b84aa22ac046aa00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a80c3a9c3a9f09f9a804d204d4df09f9a80206fc3a9f09f9a804dc3a94d6fc3a96f6f6fc3a96f6f6f6f6f4d20f09f9a80f09f9a806f6ff09f9a806f204d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,address)[4]", + "type": "(string,address)[4]", + "value": [ + [ + "Moo é🚀 o🚀 Moo oMoooéo🚀 oM🚀é🚀éoé🚀 M ooo🚀🚀oéoM", + "0xAf839fa1F02dFAf94bDC774B3b7be25745E898a7" + ], + [ + "Moo é🚀o🚀🚀MM 🚀é🚀 éo🚀M oo🚀 M🚀MoM oo🚀oéé oéMooMé🚀🚀oéo oo o🚀Mé é🚀🚀o", + "0x66c8A1C555C46cd8cACFF1BF051D47982C8d1b6B" + ], + [ + "Moo é🚀oM oo🚀MMo🚀🚀é🚀o🚀é🚀éoMoMoooéo oMoMéMooééM 🚀Moo🚀🚀o", + "0x7423F8e574849D1Ba7f71Fc1E83cc78367A519CE" + ], + ["Moo é🚀", "0x87694369ef69e5Ce5AD639b5E25520Ae3CC26e3F"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 o🚀 Moo oMoooéo🚀 oM🚀é🚀éoé🚀 M ooo🚀🚀oéoM" + }, + { + "type": "address", + "value": "0xAf839fa1F02dFAf94bDC774B3b7be25745E898a7" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀🚀MM 🚀é🚀 éo🚀M oo🚀 M🚀MoM oo🚀oéé oéMooMé🚀🚀oéo oo o🚀Mé é🚀🚀o" + }, + { + "type": "address", + "value": "0x66c8A1C555C46cd8cACFF1BF051D47982C8d1b6B" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM oo🚀MMo🚀🚀é🚀o🚀é🚀éoMoMoooéo oMoMéMooééM 🚀Moo🚀🚀o" + }, + { + "type": "address", + "value": "0x7423F8e574849D1Ba7f71Fc1E83cc78367A519CE" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "address", + "value": "0x87694369ef69e5Ce5AD639b5E25520Ae3CC26e3F" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610405806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061020e565b60405180910390f35b6100566101d4565b61005e6101d4565b60408051808201909152606081526000602082015260006040518060800160405280604c8152602001610384604c913982525073af839fa1f02dfaf94bdc774b3b7be25745e898a76020820152808260006020020152506100d060408051808201909152606081526000602082015290565b60006040518060a0016040528060738152602001610311607391398252507366c8a1c555c46cd8cacff1bf051d47982c8d1b6b60208201528082600160200201525061012d60408051808201909152606081526000602082015290565b60006040518060800160405280605e81526020016102b3605e9139825250737423f8e574849d1ba7f71fc1e83cc78367a519ce60208201528082600260200201525061018a60408051808201909152606081526000602082015290565b60408051808201909152600a8152689adede418753e13f3560b71b6020808301919091529082527387694369ef69e5ce5ad639b5e25520ae3cc26e3f908201526060820152919050565b60405180608001604052806004905b6040805180820190915260608152600060208201528152602001906001900390816101e35790505090565b602080825260009060a083018382018584805b60048110156102a557601f1980898703018552835160408151818952805180838b01528692505b80831015610266578183018b01518a840160600152918a0191610248565b8083111561027757866060828c0101525b928a01516001600160a01b0316898b01525050601f0116909401606001939285019291850191600101610221565b509297965050505050505056fe4d6f6f20c3a9f09f9a806f4d202020206f6ff09f9a804d4d6ff09f9a80f09f9a80c3a9f09f9a806ff09f9a80c3a9f09f9a80c3a96f4d6f4d6f6f6fc3a96f206f4d6f4dc3a94d6f6fc3a9c3a94d20f09f9a804d6f6ff09f9a80f09f9a806f4d6f6f20c3a9f09f9a806ff09f9a80f09f9a804d4d20f09f9a80c3a9f09f9a8020c3a96ff09f9a804d206f6ff09f9a80204df09f9a804d6f4d206f6ff09f9a806fc3a9c3a9206fc3a94d6f6f4dc3a9f09f9a80f09f9a806fc3a96f206f6f206ff09f9a804dc3a920c3a9f09f9a80f09f9a806f4d6f6f20c3a9f09f9a8020206ff09f9a80204d6f6f206f4d6f6f6fc3a96ff09f9a8020206f4df09f9a80c3a9f09f9a80c3a96fc3a9f09f9a80204d206f6f6ff09f9a80f09f9a806fc3a96f4da2646970667358221220bd98b1594e57673450cfafd8c6e8174f8b362b0cf7647e027132f14b1edc86d064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e7028728 {\n string s_0;\n address s_1;\n }\n\n function test () public pure returns (S_e7028728[4] memory) {\n S_e7028728[4] memory r;\n {\n S_e7028728 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀 o🚀 Moo oMoooéo🚀 oM🚀é🚀éoé🚀 M ooo🚀🚀oéoM\";\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0xAf839fa1F02dFAf94bDC774B3b7be25745E898a7;\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_e7028728 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀o🚀🚀MM 🚀é🚀 éo🚀M oo🚀 M🚀MoM oo🚀oéé oéMooMé🚀🚀oéo oo o🚀Mé é🚀🚀o\";\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0x66c8A1C555C46cd8cACFF1BF051D47982C8d1b6B;\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n {\n S_e7028728 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀oM oo🚀MMo🚀🚀é🚀o🚀é🚀éoMoMoooéo oMoMéMooééM 🚀Moo🚀🚀o\";\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0x7423F8e574849D1Ba7f71Fc1E83cc78367A519CE;\n r_2.s_1 = r_2_1;\n }\n r[2] = r_2;\n }\n {\n S_e7028728 memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀\";\n r_3.s_0 = r_3_0;\n }\n {\n address r_3_1 = 0x87694369ef69e5Ce5AD639b5E25520Ae3CC26e3F;\n r_3.s_1 = r_3_1;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000af839fa1f02dfaf94bdc774b3b7be25745e898a7000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a8020206ff09f9a80204d6f6f206f4d6f6f6fc3a96ff09f9a8020206f4df09f9a80c3a9f09f9a80c3a96fc3a9f09f9a80204d206f6f6ff09f9a80f09f9a806fc3a96f4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000066c8a1c555c46cd8cacff1bf051d47982c8d1b6b00000000000000000000000000000000000000000000000000000000000000734d6f6f20c3a9f09f9a806ff09f9a80f09f9a804d4d20f09f9a80c3a9f09f9a8020c3a96ff09f9a804d206f6ff09f9a80204df09f9a804d6f4d206f6ff09f9a806fc3a9c3a9206fc3a94d6f6f4dc3a9f09f9a80f09f9a806fc3a96f206f6f206ff09f9a804dc3a920c3a9f09f9a80f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000007423f8e574849d1ba7f71fc1e83cc78367a519ce000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a806f4d202020206f6ff09f9a804d4d6ff09f9a80f09f9a80c3a9f09f9a806ff09f9a80c3a9f09f9a80c3a96f4d6f4d6f6f6fc3a96f206f4d6f4dc3a94d6f6fc3a9c3a94d20f09f9a804d6f6ff09f9a80f09f9a806f0000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000087694369ef69e5ce5ad639b5e25520ae3cc26e3f000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,bool,(bool))", + "type": "(string,bool,(bool))", + "value": ["Moo é🚀ooM ooo 🚀oéoéoMoéo🚀 o🚀o🚀o MoMM oMMéoMé Mo éooé MM", true, [true]], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooM ooo 🚀oéoéoMoéo🚀 o🚀o🚀o MoMM oMMéoMé Mo éooé MM" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101e6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e3565b60405180910390f35b61007a604080516060808201835281526000602080830182905283519081018452908152909182015290565b6100a6604080516060808201835281526000602080830182905283519081018452908152909182015290565b6000604051806080016040528060518152602001610160605191398252506001602080830182905260408051918201815291815290820152919050565b600060208083528351606082850152805180608086015260005b818110156101195782810184015186820160a0015283016100fd565b8181111561012b57600060a083880101525b509185015180151560408601529160408601518051151560608701529250601f01601f19169390930160a00194935050505056fe4d6f6f20c3a9f09f9a806f6f4d20206f6f6f2020f09f9a806fc3a96fc3a96f4d6fc3a96ff09f9a80206ff09f9a806ff09f9a806f204d6f4d4d206f4d4dc3a96f4dc3a9204d6f20c3a96f6fc3a920204d4da26469706673582212204cbf96b3f0d8574914e5aa4045623812d3def2e4ec7ff22639404e09234d3f8e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_e8f86d64 {\n string s_0;\n bool s_1;\n S_c1053bda s_2;\n }\n\n function test () public pure returns (S_e8f86d64 memory) {\n S_e8f86d64 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀ooM ooo 🚀oéoéoMoéo🚀 o🚀o🚀o MoMM oMMéoMé Mo éooé MM\";\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n S_c1053bda memory r_2;\n {\n bool r_2_0 = true;\n r_2.s_0 = r_2_0;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a806f6f4d20206f6f6f2020f09f9a806fc3a96fc3a96f4d6fc3a96ff09f9a80206ff09f9a806ff09f9a806f204d6f4d4d206f4d4dc3a96f4dc3a9204d6f20c3a96f6fc3a920204d4d000000000000000000000000000000" + }, + { + "name": "random-(string,bool,address)", + "type": "(string,bool,address)", + "value": ["Moo é🚀", true, "0x585A507863445bA39a12dFAE9FBe2EdEd8ac13aE"], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x585A507863445bA39a12dFAE9FBe2EdEd8ac13aE" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610170806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160608082018352808252600060208084018290529284018190528351808301855291825281830181815282850191825284518086018652600a8152689adede418753e13f3560b71b94810194909452928252600190925273585a507863445ba39a12dfae9fbe2eded8ac13ae90915290516100af91906100b8565b60405180910390f35b600060208083528351606082850152805180608086015260005b818110156100ee5782810184015186820160a0015283016100d2565b8181111561010057600060a083880101525b509185015180151560408601529160408601516001600160a01b03811660608701529250601f01601f19169390930160a00194935050505056fea26469706673582212202b93c1651fc71bd53ee768090c04d69f1de99374a3ea79484cc5d8054e1c13df64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7cfcd410 {\n string s_0;\n bool s_1;\n address s_2;\n }\n\n function test () public pure returns (S_7cfcd410 memory) {\n S_7cfcd410 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀\";\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x585A507863445bA39a12dFAE9FBe2EdEd8ac13aE;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000585a507863445ba39a12dfae9fbe2eded8ac13ae000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,bool,int232)", + "type": "(string,bool,int232)", + "value": [ + "Moo é🚀MMoéo o🚀 é🚀 MoMMé🚀é ooooéo ", + false, + "1542782299456912651875209265505829262370574430741737237295861786155365" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MMoéo o🚀 é🚀 MoMMé🚀é ooooéo " + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "1542782299456912651875209265505829262370574430741737237295861786155365" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101c1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d5565b60405180910390f35b60408051606080820183528152600060208201819052918101919091526040805160608082018352815260006020820181905291810191909152600060405180606001604052806034815260200161015860349139825250600060208201527c39399805fe502fa06feb8254bd99af63034b4150fd487a2a17a67319656040820152919050565b600060208083528351606082850152805180608086015260005b8181101561010b5782810184015186820160a0015283016100ef565b8181111561011d57600060a083880101525b5091850151801515604086015291604086015192506101416060860184601c0b9052565b601f01601f19169390930160a00194935050505056fe4d6f6f20c3a9f09f9a804d4d6fc3a96f206ff09f9a8020c3a9f09f9a80204d6f4d4dc3a9f09f9a80c3a9206f6f6f6fc3a96f2020a2646970667358221220799141d615dc431b337bf309718a3b51f6d3757efe4bc08e64659d50a428f73d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f611d70a {\n string s_0;\n bool s_1;\n int232 s_2;\n }\n\n function test () public pure returns (S_f611d70a memory) {\n S_f611d70a memory r;\n {\n string memory r_0 = unicode\"Moo é🚀MMoéo o🚀 é🚀 MoMMé🚀é ooooéo \";\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n int232 r_2 = 1542782299456912651875209265505829262370574430741737237295861786155365;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000039399805fe502fa06feb8254bd99af63034b4150fd487a2a17a673196500000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a804d4d6fc3a96f206ff09f9a8020c3a9f09f9a80204d6f4d4dc3a9f09f9a80c3a9206f6f6f6fc3a96f2020000000000000000000000000" + }, + { + "name": "random-(string,bool,uint)", + "type": "(string,bool,uint)", + "value": [ + "Moo é🚀", + false, + "103075987005760934046283649838662785784144281163748979098933822903802426382469" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "103075987005760934046283649838662785784144281163748979098933822903802426382469" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061019c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f0565b60405180910390f35b610074604051806060016040528060608152602001600015158152602001600081525090565b61009a604051806060016040528060608152602001600015158152602001600081525090565b604080518082018252600a8152689adede418753e13f3560b71b6020808301919091529083526000908301527fe3e2f0f1e64279197c31840963aeeec70e59240e29d4b3205898fefb97a5588590820152919050565b600060208083528351606082850152805180608086015260005b818110156101265782810184015186820160a00152830161010a565b8181111561013857600060a083880101525b5091850151801515604086015291604095909501516060850152505050601f91909101601f19160160a0019056fea26469706673582212207008d6f548746fd3d55719582f832994270ecf24185fb181ee52f2851018ae1764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1678058e {\n string s_0;\n bool s_1;\n uint256 s_2;\n }\n\n function test () public pure returns (S_1678058e memory) {\n S_1678058e memory r;\n {\n string memory r_0 = unicode\"Moo é🚀\";\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n uint r_2 = 103075987005760934046283649838662785784144281163748979098933822903802426382469;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000e3e2f0f1e64279197c31840963aeeec70e59240e29d4b3205898fefb97a55885000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,bool)[3]", + "type": "(string,bool)[3]", + "value": [ + ["Moo é🚀 🚀 oé🚀éMéé🚀éé🚀 oo🚀 M", false], + ["Moo é🚀", true], + ["Moo é🚀éMoMMMMoo🚀MoMM Moéo o o🚀o Mé🚀", false] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀 oé🚀éMéé🚀éé🚀 oo🚀 M" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éMoMMMMoo🚀MoMM Moéo o o🚀o Mé🚀" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061028c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610152565b60405180910390f35b610056610118565b61005e610118565b60408051808201909152606081526000602082015260006040518060600160405280603481526020016101f06034913982525060006020808301829052918352604080518082018252606080825281850184815283518085018552600a8152689adede418753e13f3560b71b81880152835260019052858501919091528151808301835281815280850184905282519182019092526033808252919390919061022490830139825250600060208201526040820152919050565b60405180606001604052806003905b6040805180820190915260608152600060208201528152602001906001900390816101275790505090565b6020808252600090608083018382018584805b60038110156101e257601f1980898703018552835160408151818952805180838b01528692505b808310156101aa578183018b01518a840160600152918a019161018c565b808311156101bb57866060828c0101525b928a01511515898b01525050601f0116909401606001939285019291850191600101610165565b509297965050505050505056fe4d6f6f20c3a9f09f9a802020f09f9a80206fc3a9f09f9a80c3a94dc3a9c3a9f09f9a80c3a9c3a9f09f9a80206f6ff09f9a80204d4d6f6f20c3a9f09f9a80c3a94d6f4d4d4d4d6f6ff09f9a804d6f4d4d204d6fc3a96f206f206ff09f9a806f204dc3a9f09f9a80a264697066735822122088bcefcca7204456e8b9ad7d6354ebd7a92304ca3df39cdb9df98f5b8ebc929664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fc3be6c5 {\n string s_0;\n bool s_1;\n }\n\n function test () public pure returns (S_fc3be6c5[3] memory) {\n S_fc3be6c5[3] memory r;\n {\n S_fc3be6c5 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀 🚀 oé🚀éMéé🚀éé🚀 oo🚀 M\";\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_fc3be6c5 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀\";\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n {\n S_fc3be6c5 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀éMoMMMMoo🚀MoMM Moéo o o🚀o Mé🚀\";\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = false;\n r_2.s_1 = r_2_1;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a802020f09f9a80206fc3a9f09f9a80c3a94dc3a9c3a9f09f9a80c3a9c3a9f09f9a80206f6ff09f9a80204d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a80c3a94d6f4d4d4d4d6f6ff09f9a804d6f4d4d204d6fc3a96f206f206ff09f9a806f204dc3a9f09f9a8000000000000000000000000000" + }, + { + "name": "random-(string,bytes29,bool)", + "type": "(string,bytes29,bool)", + "value": ["Moo é🚀", "0x7ed1ab54e61a59de9271cf657d72cc1fed2256d52d003f3ca02ad8e407", false], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "hexstring", + "value": "0x7ed1ab54e61a59de9271cf657d72cc1fed2256d52d003f3ca02ad8e407" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610176806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160608082018352808252600060208084018290529284018190528351808301855291825281830181815282850182815285518087018752600a8152689adede418753e13f3560b71b958101959095529383527f7ed1ab54e61a59de9271cf657d72cc1fed2256d52d003f3ca02ad8e407000000905290915290516100b891906100c1565b60405180910390f35b600060208083528351606082850152805180608086015260005b818110156100f75782810184015186820160a0015283016100db565b8181111561010957600060a083880101525b509185015162ffffff198116604086015291604086015180151560608701529250601f01601f19169390930160a00194935050505056fea26469706673582212200087d82b3045b510853e72630d1b0be2bba4b607f2c7409adfaef05039de29b464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_35b1e60d {\n string s_0;\n bytes29 s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_35b1e60d memory) {\n S_35b1e60d memory r;\n {\n string memory r_0 = unicode\"Moo é🚀\";\n r.s_0 = r_0;\n }\n {\n bytes29 r_1 = bytes29(0x7ed1ab54e61a59de9271cf657d72cc1fed2256d52d003f3ca02ad8e407);\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000607ed1ab54e61a59de9271cf657d72cc1fed2256d52d003f3ca02ad8e4070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,int56[3])", + "type": "(string,int56[3])", + "value": [ + "Moo é🚀 é🚀Mo oo🚀🚀ooéééoooéo 🚀Mo🚀🚀o🚀", + ["-1948300037630142", "13003491236077599", "-21484888451169022"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é🚀Mo oo🚀🚀ooéééoooéo 🚀Mo🚀🚀o🚀" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-1948300037630142" + }, + { + "type": "number", + "value": "13003491236077599" + }, + { + "type": "number", + "value": "-21484888451169022" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101f8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f3565b60405180910390f35b6100566100b6565b61005e6100b6565b6000604051806080016040528060418152602001610182604191398252506100846100d5565b6606ebf7f3a8a8bd198152662e329b3bf7601f602080830191909152664c5464682bbafd196040830152820152919050565b6040518060400160405280606081526020016100d06100d5565b905290565b60405180606001604052806003906020820280368337509192915050565b60006020808352835160808285015280518060a086015260005b818110156101295782810184015186820160c00152830161010d565b8181111561013b57600060c083880101525b508286015191506040850160005b600381101561016957835160060b82529284019290840190600101610149565b5050601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a8020c3a9f09f9a804d6f206f6ff09f9a80f09f9a806f6fc3a9c3a9c3a96f6f6fc3a96f2020f09f9a804d6ff09f9a80f09f9a806ff09f9a80a2646970667358221220f446782dbd49c8b810e5daa87bae9e7af60e4090094a95b0df61e92ec0f17b8064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_12125573 {\n string s_0;\n int56[3] s_1;\n }\n\n function test () public pure returns (S_12125573 memory) {\n S_12125573 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 é🚀Mo oo🚀🚀ooéééoooéo 🚀Mo🚀🚀o🚀\";\n r.s_0 = r_0;\n }\n {\n int56[3] memory r_1;\n {\n int56 r_1_0 = -1948300037630142;\n r_1[0] = r_1_0;\n }\n {\n int56 r_1_1 = 13003491236077599;\n r_1[1] = r_1_1;\n }\n {\n int56 r_1_2 = -21484888451169022;\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080fffffffffffffffffffffffffffffffffffffffffffffffffff914080c575742000000000000000000000000000000000000000000000000002e329b3bf7601fffffffffffffffffffffffffffffffffffffffffffffffffffb3ab9b97d4450200000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a8020c3a9f09f9a804d6f206f6ff09f9a80f09f9a806f6fc3a9c3a9c3a96f6f6fc3a96f2020f09f9a804d6ff09f9a80f09f9a806ff09f9a8000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,int72,address)", + "type": "(string,int72,address)", + "value": [ + "Moo é🚀oM🚀Mo🚀é", + "2189178306521172816063", + "0x587E7db9247BCA8103E633c28fbf61851ca7566b" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM🚀Mo🚀é" + }, + { + "type": "number", + "value": "2189178306521172816063" + }, + { + "type": "address", + "value": "0x587E7db9247BCA8103E633c28fbf61851ca7566b" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610193806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160608082018352808252600060208084018290529284018190528351808301855291825281830181815282850191825284518086018652601881527f4d6f6f20c3a9f09f9a806f4df09f9a804d6ff09f9a80c3a90000000000000000948101949094529282526876acf3b70469b830bf90925273587e7db9247bca8103e633c28fbf61851ca7566b90915290516100cb91906100d4565b60405180910390f35b600060208083528351606082850152805180608086015260005b8181101561010a5782810184015186820160a0015283016100ee565b8181111561011c57600060a083880101525b509185015191610131604086018460080b9052565b60408601516001600160a01b03811660608701529250601f01601f19169390930160a00194935050505056fea26469706673582212208af87f5f227d877dd83e4ab78f55344de4ce8e0174ae43a406ec45af4467bce764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ff4aa1fc {\n string s_0;\n int72 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_ff4aa1fc memory) {\n S_ff4aa1fc memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oM🚀Mo🚀é\";\n r.s_0 = r_0;\n }\n {\n int72 r_1 = 2189178306521172816063;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x587E7db9247BCA8103E633c28fbf61851ca7566b;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000076acf3b70469b830bf000000000000000000000000587e7db9247bca8103e633c28fbf61851ca7566b00000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a806f4df09f9a804d6ff09f9a80c3a90000000000000000" + }, + { + "name": "random-(string,string,bytes14)", + "type": "(string,string,bytes14)", + "value": [ + "Moo é🚀o🚀o🚀Mo éoo ooMooéoo oéM🚀o éo🚀 Méo 🚀🚀🚀🚀Méo🚀 ", + "Moo é🚀oéMéoo oo🚀🚀Mo 🚀oooéo é🚀éM🚀oM ", + "0xdb26e6948c15e677bd22714f806b" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀o🚀Mo éoo ooMooéoo oéM🚀o éo🚀 Méo 🚀🚀🚀🚀Méo🚀 " + }, + { + "type": "string", + "value": "Moo é🚀oéMéoo oo🚀🚀Mo 🚀oooéo é🚀éM🚀oM " + }, + { + "type": "hexstring", + "value": "0xdb26e6948c15e677bd22714f806b" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061025c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061012f565b60405180910390f35b60408051606080820183528082526020820152600091810191909152604080516060808201835280825260208201526000918101919091526000604051806080016040528060578152602001610195605791398252506040805160608101909152603b808252600091906101ec60208301396020830152506ddb26e6948c15e677bd22714f806b60901b6040820152919050565b6000815180845260005b81811015610108576020818501810151868301820152016100ec565b8181111561011a576000602083870101525b50601f01601f19169290920160200192915050565b60208152600082516060602084015261014b60808401826100e2565b90506020840151601f1984830301604085015261016882826100e2565b91505071ffffffffffffffffffffffffffffffffffff196040850151166060840152809150509291505056fe4d6f6f20c3a9f09f9a806ff09f9a806ff09f9a804d6f20c3a96f6f206f6f4d6f6fc3a96f6f20206fc3a94df09f9a806f20c3a96ff09f9a80204dc3a96f20f09f9a80f09f9a80f09f9a80f09f9a804dc3a96ff09f9a80204d6f6f20c3a9f09f9a806fc3a94dc3a96f6f206f6ff09f9a80f09f9a804d6f20f09f9a806f6f6fc3a96f20c3a9f09f9a80c3a94df09f9a806f4d20a26469706673582212207141a62be6e0b431b0a890db3303bf65968b503dc3ee9d8652a169638daeb40b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_025cdb28 {\n string s_0;\n string s_1;\n bytes14 s_2;\n }\n\n function test () public pure returns (S_025cdb28 memory) {\n S_025cdb28 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀o🚀o🚀Mo éoo ooMooéoo oéM🚀o éo🚀 Méo 🚀🚀🚀🚀Méo🚀 \";\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀oéMéoo oo🚀🚀Mo 🚀oooéo é🚀éM🚀oM \";\n r.s_1 = r_1;\n }\n {\n bytes14 r_2 = bytes14(0xdb26e6948c15e677bd22714f806b);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0db26e6948c15e677bd22714f806b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a806ff09f9a806ff09f9a804d6f20c3a96f6f206f6f4d6f6fc3a96f6f20206fc3a94df09f9a806f20c3a96ff09f9a80204dc3a96f20f09f9a80f09f9a80f09f9a80f09f9a804dc3a96ff09f9a8020000000000000000000000000000000000000000000000000000000000000000000000000000000003b4d6f6f20c3a9f09f9a806fc3a94dc3a96f6f206f6ff09f9a80f09f9a804d6f20f09f9a806f6f6fc3a96f20c3a9f09f9a80c3a94df09f9a806f4d200000000000" + }, + { + "name": "random-(string,string,bytes18)", + "type": "(string,string,bytes18)", + "value": [ + "Moo é🚀o éééo o🚀Moééé 🚀 o🚀Mo oo oMooM M éM🚀éMMoooMM o🚀o éooo", + "Moo é🚀oo M 🚀éé éoé 🚀🚀 MM o🚀MMMéM🚀é🚀🚀 oéé 🚀MMo o o", + "0x4a41806a46ff5278fd8700956eb95ca194a1" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o éééo o🚀Moééé 🚀 o🚀Mo oo oMooM M éM🚀éMMoooMM o🚀o éooo" + }, + { + "type": "string", + "value": "Moo é🚀oo M 🚀éé éoé 🚀🚀 MM o🚀MMMéM🚀é🚀🚀 oéé 🚀MMo o o" + }, + { + "type": "hexstring", + "value": "0x4a41806a46ff5278fd8700956eb95ca194a1" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610278806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610133565b60405180910390f35b604080516060808201835280825260208201526000918101919091526040805160608082018352808252602082015260009181019190915260006040518060800160405280605781526020016101ec6057913982525060408051608081019091526057808252600091906101956020830139602083015250714a41806a46ff5278fd8700956eb95ca194a160701b6040820152919050565b6000815180845260005b8181101561010c576020818501810151868301820152016100f0565b8181111561011e576000602083870101525b50601f01601f19169290920160200192915050565b60208152600082516060602084015261014f60808401826100e6565b90506020840151601f1984830301604085015261016c82826100e6565b9150506dffffffffffffffffffffffffffff196040850151166060840152809150509291505056fe4d6f6f20c3a9f09f9a806f6f204d20f09f9a80c3a9c3a920c3a96fc3a920f09f9a80f09f9a80204d4d206ff09f9a804d4d4dc3a94df09f9a80c3a9f09f9a80f09f9a80206fc3a9c3a920f09f9a804d4d6f2020206f206f4d6f6f20c3a9f09f9a806f20c3a9c3a9c3a96f206ff09f9a804d6fc3a9c3a9c3a920f09f9a80206ff09f9a804d6f206f6f206f4d6f6f4d204d20c3a94df09f9a80c3a94d4d6f6f6f4d4d206ff09f9a806f20c3a96f6f6fa2646970667358221220e1c8f2aca34a5bc22adfc90f72c016f8a278ec0fd0adcc19671aed24ca158d4c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2324a664 {\n string s_0;\n string s_1;\n bytes18 s_2;\n }\n\n function test () public pure returns (S_2324a664 memory) {\n S_2324a664 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀o éééo o🚀Moééé 🚀 o🚀Mo oo oMooM M éM🚀éMMoooMM o🚀o éooo\";\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀oo M 🚀éé éoé 🚀🚀 MM o🚀MMMéM🚀é🚀🚀 oéé 🚀MMo o o\";\n r.s_1 = r_1;\n }\n {\n bytes18 r_2 = bytes18(0x4a41806a46ff5278fd8700956eb95ca194a1);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e04a41806a46ff5278fd8700956eb95ca194a1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a806f20c3a9c3a9c3a96f206ff09f9a804d6fc3a9c3a9c3a920f09f9a80206ff09f9a804d6f206f6f206f4d6f6f4d204d20c3a94df09f9a80c3a94d4d6f6f6f4d4d206ff09f9a806f20c3a96f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a806f6f204d20f09f9a80c3a9c3a920c3a96fc3a920f09f9a80f09f9a80204d4d206ff09f9a804d4d4dc3a94df09f9a80c3a9f09f9a80f09f9a80206fc3a9c3a920f09f9a804d4d6f2020206f206f000000000000000000" + }, + { + "name": "random-(string,string[2])", + "type": "(string,string[2])", + "value": [ + "Moo é🚀 éMoéM🚀🚀🚀Méoo", + [ + "Moo é🚀MM o o🚀MM oMMMooooééo🚀ééMoMé🚀M Méo o 🚀éoo 🚀MééoéoMéé", + "Moo é🚀M éééMMééoooM🚀 oM MéooMo 🚀o ooMo éooéoooo🚀ooo oMo" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 éMoéM🚀🚀🚀Méoo" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MM o o🚀MM oMMMooooééo🚀ééMoMé🚀M Méo o 🚀éoo 🚀MééoéoMéé" + }, + { + "type": "string", + "value": "Moo é🚀M éééMMééoooM🚀 oM MéooMo 🚀o ooMo éooéoooo🚀ooo oMo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102d7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610166565b60405180910390f35b6100566100d3565b61005e6100d3565b60006040518060600160405280602381526020016101d7602391398252506100846100f2565b60006040518060800160405280605c81526020016101fa605c91398252506040805160808101909152604c80825260009190610256602083013960208084019190915283019190915250919050565b6040518060400160405280606081526020016100ed6100f2565b905290565b60405180604001604052806002905b60608152602001906001900390816101015790505090565b6000815180845260005b8181101561013f57602081850181015186830182015201610123565b81811115610151576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835283516040828501526101826060850182610119565b905081850151601f19858303016040860152818290506040830160005b60028110156101ca5784820383526101b8828551610119565b9386019392860192915060010161019f565b5097965050505050505056fe4d6f6f20c3a9f09f9a8020c3a94d6fc3a94df09f9a80f09f9a80f09f9a804dc3a96f6f4d6f6f20c3a9f09f9a804d4d206f206ff09f9a804d4d206f4d4d4d6f6f6f6fc3a9c3a96ff09f9a80c3a9c3a94d6f4dc3a9f09f9a804d20204dc3a96f20206f20f09f9a80c3a96f6f2020f09f9a804dc3a9c3a96fc3a96f4dc3a9c3a94d6f6f20c3a9f09f9a804d20c3a9c3a9c3a94d4dc3a9c3a96f6f6f4df09f9a80206f4d204dc3a96f6f4d6f20f09f9a806f206f6f4d6f20c3a96f6fc3a96f6f6f6ff09f9a806f6f6f206f4d6fa2646970667358221220feb99cc3a3eaf7646fcc13a945ca96b22f48cfcd3e2d01e6a3b5a5f4b4840b4264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0f073387 {\n string s_0;\n string[2] s_1;\n }\n\n function test () public pure returns (S_0f073387 memory) {\n S_0f073387 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 éMoéM🚀🚀🚀Méoo\";\n r.s_0 = r_0;\n }\n {\n string[2] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀MM o o🚀MM oMMMooooééo🚀ééMoMé🚀M Méo o 🚀éoo 🚀MééoéoMéé\";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀M éééMMééoooM🚀 oM MéooMo 🚀o ooMo éooéoooo🚀ooo oMo\";\n r_1[1] = r_1_1;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a8020c3a94d6fc3a94df09f9a80f09f9a80f09f9a804dc3a96f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a804d4d206f206ff09f9a804d4d206f4d4d4d6f6f6f6fc3a9c3a96ff09f9a80c3a9c3a94d6f4dc3a9f09f9a804d20204dc3a96f20206f20f09f9a80c3a96f6f2020f09f9a804dc3a9c3a96fc3a96f4dc3a9c3a900000000000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a804d20c3a9c3a9c3a94d4dc3a9c3a96f6f6f4df09f9a80206f4d204dc3a96f6f4d6f20f09f9a806f206f6f4d6f20c3a96f6fc3a96f6f6f6ff09f9a806f6f6f206f4d6f0000000000000000000000000000000000000000" + }, + { + "name": "random-(string,uint104,address)", + "type": "(string,uint104,address)", + "value": [ + "Moo é🚀 o é🚀 Mo 🚀o🚀o", + "9238346067840920805230365047847", + "0x64Cd9E2abc2D703383258deDfF42D9088b84Fb91" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 o é🚀 Mo 🚀o🚀o" + }, + { + "type": "number", + "value": "9238346067840920805230365047847" + }, + { + "type": "address", + "value": "0x64Cd9E2abc2D703383258deDfF42D9088b84Fb91" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101bf806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d8565b60405180910390f35b604080516060808201835281526000602082018190529181019190915260408051606080820183528152600060208201819052918101919091526000604051806060016040528060228152602001610168602291398252506c749ab4c2664d5be2c8853afc2760208201527364cd9e2abc2d703383258dedff42d9088b84fb916040820152919050565b600060208083528351606082850152805180608086015260005b8181101561010e5782810184015186820160a0015283016100f2565b8181111561012057600060a083880101525b50918501516cffffffffffffffffffffffffff811660408601529160408601516001600160a01b03811660608701529250601f01601f19169390930160a00194935050505056fe4d6f6f20c3a9f09f9a80206f20c3a9f09f9a8020204d6f20f09f9a806ff09f9a806fa2646970667358221220c60cad0a85eb113eba4d9cd607ff52f6bf2907f13f6e78e637cb759b28c8a67f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ca08a75a {\n string s_0;\n uint104 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_ca08a75a memory) {\n S_ca08a75a memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 o é🚀 Mo 🚀o🚀o\";\n r.s_0 = r_0;\n }\n {\n uint104 r_1 = 9238346067840920805230365047847;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x64Cd9E2abc2D703383258deDfF42D9088b84Fb91;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000749ab4c2664d5be2c8853afc2700000000000000000000000064cd9e2abc2d703383258dedff42d9088b84fb9100000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a80206f20c3a9f09f9a8020204d6f20f09f9a806ff09f9a806f000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,uint128,string)", + "type": "(string,uint128,string)", + "value": ["Moo é🚀o oéoM", "158810186134410791652917158332853204087", "Moo é🚀"], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o oéoM" + }, + { + "type": "number", + "value": "158810186134410791652917158332853204087" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b604080516060808201835280825260006020808401829052928401829052835180830185528281528084019182528085019283528451808601865260118152704d6f6f20c3a9f09f9a806f206fc3a96f4d60781b8186015281526f7779bab313b242c934f610c1f591347790915283518085018552600a8152689adede418753e13f3560b71b9381019390935291905290516100cc9190610122565b60405180910390f35b6000815180845260005b818110156100fb576020818501810151868301820152016100df565b8181111561010d576000602083870101525b50601f01601f19169290920160200192915050565b60208152600082516060602084015261013e60808401826100d5565b90506fffffffffffffffffffffffffffffffff60208501511660408401526040840151601f1984830301606085015261017782826100d5565b9594505050505056fea2646970667358221220050d7f5af70818e999c2e2999e48b56083412951217e2c15a56315bafdd7ba0164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f9330b38 {\n string s_0;\n uint128 s_1;\n string s_2;\n }\n\n function test () public pure returns (S_f9330b38 memory) {\n S_f9330b38 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀o oéoM\";\n r.s_0 = r_0;\n }\n {\n uint128 r_1 = 158810186134410791652917158332853204087;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000007779bab313b242c934f610c1f591347700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a806f206fc3a96f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,uint176,bool)", + "type": "(string,uint176,bool)", + "value": [ + "Moo é🚀éMoéoé🚀 MMo oo🚀oM éooMoé ooéMo ooo o🚀oo ", + "84405130244436888951858077702886380653395139190870820", + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éMoéoé🚀 MMo oo🚀oM éooMoé ooéMo ooo o🚀oo " + }, + { + "type": "number", + "value": "84405130244436888951858077702886380653395139190870820" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101c7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ce565b60405180910390f35b6040805160608082018352815260006020820181905291810191909152604080516060808201835281526000602082018190529181019190915260006040518060800160405280604181526020016101516041913982525075e198556c90b76a4e4f25b1728f20d3b9ad998da05324602082015260016040820152919050565b600060208083528351606082850152805180608086015260005b818110156101045782810184015186820160a0015283016100e8565b8181111561011657600060a083880101525b50918501516001600160b01b038116604086015291604086015180151560608701529250601f01601f19169390930160a00194935050505056fe4d6f6f20c3a9f09f9a80c3a94d6fc3a96fc3a9f09f9a80204d4d6f206f6ff09f9a806f4d20c3a96f6f4d6fc3a9206f6fc3a94d6f206f6f6f206ff09f9a806f6f20a264697066735822122037a1b279ebb3b76cf4c8f427a5f59f6e7741955bc9a503f0c27db63362c565ac64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a0eb0c66 {\n string s_0;\n uint176 s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_a0eb0c66 memory) {\n S_a0eb0c66 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀éMoéoé🚀 MMo oo🚀oM éooMoé ooéMo ooo o🚀oo \";\n r.s_0 = r_0;\n }\n {\n uint176 r_1 = 84405130244436888951858077702886380653395139190870820;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000e198556c90b76a4e4f25b1728f20d3b9ad998da05324000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a80c3a94d6fc3a96fc3a9f09f9a80204d4d6f206f6ff09f9a806f4d20c3a96f6f4d6fc3a9206f6fc3a94d6f206f6f6f206ff09f9a806f6f2000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string[][4])", + "type": "(string[][4])", + "value": [ + [ + [ + "Moo é🚀MMoMoéé🚀oo é o🚀o éoM M", + "Moo é🚀M🚀o", + "Moo é🚀🚀é🚀🚀 é🚀o🚀o🚀o oéM🚀o 🚀 é🚀éo🚀🚀o oMooé", + "Moo é🚀🚀🚀 🚀🚀M " + ], + [], + ["Moo é🚀ooo ooéo🚀oééMé🚀🚀ééMéM", "Moo é🚀 M 🚀Mé🚀éooMMooo 🚀éooo🚀🚀🚀 MoMéoM"], + [] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MMoMoéé🚀oo é o🚀o éoM M" + }, + { + "type": "string", + "value": "Moo é🚀M🚀o" + }, + { + "type": "string", + "value": "Moo é🚀🚀é🚀🚀 é🚀o🚀o🚀o oéM🚀o 🚀 é🚀éo🚀🚀o oMooé" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀 🚀🚀M " + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooo ooéo🚀oééMé🚀🚀ééMéM" + }, + { + "type": "string", + "value": "Moo é🚀 M 🚀Mé🚀éooMMooo 🚀éooo🚀🚀🚀 MoMéoM" + } + ] + }, + { + "type": "array", + "value": [] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061052e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610324565b60405180910390f35b6100566102e5565b61005e6102e5565b6100666102fd565b60408051600480825260a08201909252600091816020015b606081526020019060019003908161007e57905050905060006040518060600160405280602a815260200161047b602a9139905080826000815181106100c6576100c66103f6565b60200260200101819052505060006040518060400160405280601081526020016f4d6f6f20c3a9f09f9a804df09f9a806f60801b81525090508082600181518110610113576101136103f6565b60200260200101819052505060006040518060800160405280605481526020016104a56054913990508082600281518110610150576101506103f6565b60200260200101819052505060006040518060400160405280601d81526020017f4d6f6f20c3a9f09f9a80f09f9a80f09f9a8020f09f9a80f09f9a804d20000000815250905080826003815181106101aa576101aa6103f6565b60209081029190910181019190915291835250604080516000808252928101909152816101e7565b60608152602001906001900390816101d25790505b5060208301525060408051600280825260608201909252600091816020015b606081526020019060019003908161020657905050905060006040518060600160405280602f815260200161044c602f91399050808260008151811061024e5761024e6103f6565b60200260200101819052505060006040518060600160405280603f815260200161040d603f91399050808260018151811061028b5761028b6103f6565b602090810291909101015250808260026020020152506000806040519080825280602002602001820160405280156102d757816020015b60608152602001906001900390816102c25790505b506060830152508152919050565b60405180602001604052806102f86102fd565b905290565b60405180608001604052806004905b606081526020019060019003908161030c5790505090565b602080825282518282018290526000919060c084019060408501845b60048110156103ea57868403603f19018252825180518086529086019086860190600581901b8701880160005b828110156103d457601f19808a84030185528551805180855260005b818110156103a4578281018e01518682018f01528d01610389565b818111156103b55760008e83880101525b50968c0196958c0195601f01909116929092018a01915060010161036d565b5096505050928501925090840190600101610340565b50919695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80204d20f09f9a804dc3a9f09f9a80c3a96f6f4d4d6f6f6f20f09f9a80c3a96f6f6ff09f9a80f09f9a80f09f9a80204d6f4dc3a96f4d4d6f6f20c3a9f09f9a806f6f6f206f6fc3a96ff09f9a806fc3a9c3a94dc3a9f09f9a80f09f9a80c3a9c3a94dc3a94d4d6f6f20c3a9f09f9a804d4d6f4d6fc3a9c3a9f09f9a806f6f20c3a9206ff09f9a806f20c3a96f4d204d4d6f6f20c3a9f09f9a80f09f9a80c3a9f09f9a80f09f9a8020c3a9f09f9a806ff09f9a806ff09f9a806f20206fc3a94df09f9a806f20f09f9a8020c3a9f09f9a80c3a96ff09f9a80f09f9a806f206f4d6f6fc3a9a26469706673582212208a3533e02bba569eefb2453b6241043d220fc7e61d5a9299b5784718e078099f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_38ce9ce6 {\n string[][4] s_0;\n }\n\n function test () public pure returns (S_38ce9ce6 memory) {\n S_38ce9ce6 memory r;\n {\n string[][4] memory r_0;\n {\n string[] memory r_0_0 = new string[](4);\n {\n string memory r_0_0_0 = unicode\"Moo é🚀MMoMoéé🚀oo é o🚀o éoM M\";\n r_0_0[0] = r_0_0_0;\n }\n {\n string memory r_0_0_1 = unicode\"Moo é🚀M🚀o\";\n r_0_0[1] = r_0_0_1;\n }\n {\n string memory r_0_0_2 = unicode\"Moo é🚀🚀é🚀🚀 é🚀o🚀o🚀o oéM🚀o 🚀 é🚀éo🚀🚀o oMooé\";\n r_0_0[2] = r_0_0_2;\n }\n {\n string memory r_0_0_3 = unicode\"Moo é🚀🚀🚀 🚀🚀M \";\n r_0_0[3] = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n string[] memory r_0_1 = new string[](0);\n r_0[1] = r_0_1;\n }\n {\n string[] memory r_0_2 = new string[](2);\n {\n string memory r_0_2_0 = unicode\"Moo é🚀ooo ooéo🚀oééMé🚀🚀ééMéM\";\n r_0_2[0] = r_0_2_0;\n }\n {\n string memory r_0_2_1 = unicode\"Moo é🚀 M 🚀Mé🚀éooMMooo 🚀éooo🚀🚀🚀 MoMéoM\";\n r_0_2[1] = r_0_2_1;\n }\n r_0[2] = r_0_2;\n }\n {\n string[] memory r_0_3 = new string[](0);\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a804d4d6f4d6fc3a9c3a9f09f9a806f6f20c3a9206ff09f9a806f20c3a96f4d204d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a804df09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a80f09f9a80c3a9f09f9a80f09f9a8020c3a9f09f9a806ff09f9a806ff09f9a806f20206fc3a94df09f9a806f20f09f9a8020c3a9f09f9a80c3a96ff09f9a80f09f9a806f206f4d6f6fc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a80f09f9a80f09f9a8020f09f9a80f09f9a804d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a806f6f6f206f6fc3a96ff09f9a806fc3a9c3a94dc3a9f09f9a80f09f9a80c3a9c3a94dc3a94d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a80204d20f09f9a804dc3a9f09f9a80c3a96f6f4d4d6f6f6f20f09f9a80c3a96f6f6ff09f9a80f09f9a80f09f9a80204d6f4dc3a96f4d000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string[2][])", + "type": "(string[2][])", + "value": [ + [ + [ + "Moo é🚀éM🚀oéoé🚀M éoooMoo🚀🚀oo🚀ooéoMo🚀🚀ééMo🚀éoéo M🚀ooMoo o", + "Moo é🚀o🚀🚀Mo é oo🚀Mo Mo ooo🚀o" + ], + [ + "Moo é🚀MéooMooéMoo MéMoM M éoMM ", + "Moo é🚀🚀 MM🚀o o🚀éMMoéM🚀🚀🚀Mo 🚀éooo 🚀🚀 o🚀 éMM🚀🚀oo M" + ], + [ + "Moo é🚀oooo🚀oMoéo🚀M🚀é", + "Moo é🚀é🚀🚀é MoM🚀🚀éMM éé ooM🚀éo🚀o🚀o🚀oéé oMé🚀o🚀oooMoo oMoéoM🚀 ooM" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éM🚀oéoé🚀M éoooMoo🚀🚀oo🚀ooéoMo🚀🚀ééMo🚀éoéo M🚀ooMoo o" + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀Mo é oo🚀Mo Mo ooo🚀o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MéooMooéMoo MéMoM M éoMM " + }, + { + "type": "string", + "value": "Moo é🚀🚀 MM🚀o o🚀éMMoéM🚀🚀🚀Mo 🚀éooo 🚀🚀 o🚀 éMM🚀🚀oo M" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oooo🚀oMoéo🚀M🚀é" + }, + { + "type": "string", + "value": "Moo é🚀é🚀🚀é MoM🚀🚀éMM éé ooM🚀éo🚀o🚀o🚀oéé oMé🚀o🚀oooMoo oMoéoM🚀 ooM" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104cd806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061020b565b60405180910390f35b60408051602080820183526060808352835191820184528152825160038082526080820190945291929091600091816020015b6100896101e4565b8152602001906001900390816100815790505090506100a66101e4565b60006040518060800160405280605f81526020016103ed605f91398252506040805160608101909152602d808252600091906103c060208301396020830152508151819083906000906100fb576100fb6102de565b60200260200101819052505061010f6101e4565b600060405180606001604052806029815260200161046f602991398252506040805160808101909152605d8082526000919061036360208301396020830152508151819083906001908110610166576101666102de565b60200260200101819052505061017a6101e4565b600060405180606001604052806023815260200161044c602391398252506040805160a08101909152606e808252600091906102f5602083013960208301525081518190839060029081106101d1576101d16102de565b6020908102919091010152508152919050565b60405180604001604052806002905b60608152602001906001900390816101f35790505090565b6000602080835260408084018551838487015281815180845260608801915060608160051b8901019350858301925060005b818110156102d057888503605f1901835283518587810160005b60028110156102bb5788820383528351805180845260005b8181101561028a578281018e01518582018f01528d0161026f565b8181111561029b5760008e83870101525b50948c0194938c0193601f01601f1916929092018b019150600101610257565b5096505050928601929186019160010161023d565b509298975050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a80c3a9204d6f4df09f9a80f09f9a80c3a94d4d2020c3a9c3a9206f6f4df09f9a80c3a96ff09f9a806ff09f9a806ff09f9a806fc3a9c3a9206f4dc3a9f09f9a806ff09f9a806f6f6f4d6f6f206f4d6fc3a96f4df09f9a80206f6f4d4d6f6f20c3a9f09f9a80f09f9a80204d4df09f9a806f20206ff09f9a80c3a94d4d6fc3a94df09f9a80f09f9a80f09f9a804d6f20f09f9a80c3a96f6f6f20f09f9a80f09f9a80206ff09f9a8020c3a94d4df09f9a80f09f9a806f6f204d4d6f6f20c3a9f09f9a806ff09f9a80f09f9a804d6f20c3a9206f6ff09f9a804d6f204d6f206f6f6ff09f9a806f4d6f6f20c3a9f09f9a80c3a94df09f9a806fc3a96fc3a9f09f9a804d20c3a96f6f6f4d6f6ff09f9a80f09f9a806f6ff09f9a806f6fc3a96f4d6ff09f9a80f09f9a80c3a9c3a94d6ff09f9a80c3a96fc3a96f204df09f9a806f6f4d6f6f206f4d6f6f20c3a9f09f9a806f6f6f6ff09f9a806f4d6fc3a96ff09f9a804df09f9a80c3a94d6f6f20c3a9f09f9a804dc3a96f6f4d6f6fc3a94d6f6f20204dc3a94d6f4d20204d20c3a96f4d4d20a2646970667358221220b47f6f267fc8e840783e7a98e35caacbb48200cd05b483962a985f4681497f1064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c02107cd {\n string[2][] s_0;\n }\n\n function test () public pure returns (S_c02107cd memory) {\n S_c02107cd memory r;\n {\n string[2][] memory r_0 = new string[2][](3);\n {\n string[2] memory r_0_0;\n {\n string memory r_0_0_0 = unicode\"Moo é🚀éM🚀oéoé🚀M éoooMoo🚀🚀oo🚀ooéoMo🚀🚀ééMo🚀éoéo M🚀ooMoo o\";\n r_0_0[0] = r_0_0_0;\n }\n {\n string memory r_0_0_1 = unicode\"Moo é🚀o🚀🚀Mo é oo🚀Mo Mo ooo🚀o\";\n r_0_0[1] = r_0_0_1;\n }\n r_0[0] = r_0_0;\n }\n {\n string[2] memory r_0_1;\n {\n string memory r_0_1_0 = unicode\"Moo é🚀MéooMooéMoo MéMoM M éoMM \";\n r_0_1[0] = r_0_1_0;\n }\n {\n string memory r_0_1_1 = unicode\"Moo é🚀🚀 MM🚀o o🚀éMMoéM🚀🚀🚀Mo 🚀éooo 🚀🚀 o🚀 éMM🚀🚀oo M\";\n r_0_1[1] = r_0_1_1;\n }\n r_0[1] = r_0_1;\n }\n {\n string[2] memory r_0_2;\n {\n string memory r_0_2_0 = unicode\"Moo é🚀oooo🚀oMoéo🚀M🚀é\";\n r_0_2[0] = r_0_2_0;\n }\n {\n string memory r_0_2_1 = unicode\"Moo é🚀é🚀🚀é MoM🚀🚀éMM éé ooM🚀éo🚀o🚀o🚀oéé oMé🚀o🚀oooMoo oMoéoM🚀 ooM\";\n r_0_2[1] = r_0_2_1;\n }\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000005f4d6f6f20c3a9f09f9a80c3a94df09f9a806fc3a96fc3a9f09f9a804d20c3a96f6f6f4d6f6ff09f9a80f09f9a806f6ff09f9a806f6fc3a96f4d6ff09f9a80f09f9a80c3a9c3a94d6ff09f9a80c3a96fc3a96f204df09f9a806f6f4d6f6f206f00000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a806ff09f9a80f09f9a804d6f20c3a9206f6ff09f9a804d6f204d6f206f6f6ff09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000294d6f6f20c3a9f09f9a804dc3a96f6f4d6f6fc3a94d6f6f20204dc3a94d6f4d20204d20c3a96f4d4d200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a80f09f9a80204d4df09f9a806f20206ff09f9a80c3a94d4d6fc3a94df09f9a80f09f9a80f09f9a804d6f20f09f9a80c3a96f6f6f20f09f9a80f09f9a80206ff09f9a8020c3a94d4df09f9a80f09f9a806f6f204d000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a806f6f6f6ff09f9a806f4d6fc3a96ff09f9a804df09f9a80c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006e4d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a80c3a9204d6f4df09f9a80f09f9a80c3a94d4d2020c3a9c3a9206f6f4df09f9a80c3a96ff09f9a806ff09f9a806ff09f9a806fc3a9c3a9206f4dc3a9f09f9a806ff09f9a806f6f6f4d6f6f206f4d6fc3a96f4df09f9a80206f6f4d000000000000000000000000000000000000" + }, + { + "name": "random-(string[4],bytes3)", + "type": "(string[4],bytes3)", + "value": [ + [ + "Moo é🚀", + "Moo é🚀Méo Mo oo oéMM🚀Mé🚀🚀o", + "Moo é🚀", + "Moo é🚀🚀o éo🚀M🚀oo éoééM🚀 MM Mo🚀é 🚀MM🚀o" + ], + "0x2843ff" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀Méo Mo oo oéMM🚀Mé🚀🚀o" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀o éo🚀M🚀oo éoééM🚀 MM Mo🚀é 🚀MM🚀o" + } + ] + }, + { + "type": "hexstring", + "value": "0x2843ff" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610294806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061014b565b60405180910390f35b610056610104565b61005e610104565b610066610124565b604080518082018252600a8152689adede418753e13f3560b71b602080830191909152908352815160608101909252602b808352600092916101ee90830139602083810191909152604080518082018252600a8152689adede418753e13f3560b71b81840152818501528051608081019091526046808252600093509091610219908301396060830152508152622843ff60e81b6020820152919050565b6040518060400160405280610117610124565b8152600060209091015290565b60405180608001604052806004905b60608152602001906001900390816101335790505090565b602080825282516040838301526000919060e08401906060850184805b60048110156101ce57878503605f1901835283518051808752835b8181101561019e578281018901518882018a01528801610183565b818111156101ae578489838a0101525b50601f01601f191695909501860194509285019291850191600101610168565b505050509301516001600160e81b03191660409290920191909152509056fe4d6f6f20c3a9f09f9a804dc3a96f20204d6f206f6f206fc3a94d4df09f9a804dc3a9f09f9a80f09f9a806f4d6f6f20c3a9f09f9a80f09f9a806f20c3a96ff09f9a804df09f9a806f6f20c3a96fc3a9c3a94df09f9a802020204d4d20204d6ff09f9a80c3a920f09f9a804d4df09f9a806fa2646970667358221220351ca812ad8f0e80d11a8d77a5ac7a02b3a7ba17cb7256d0e55349a548ea6aa064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8c9de1fc {\n string[4] s_0;\n bytes3 s_1;\n }\n\n function test () public pure returns (S_8c9de1fc memory) {\n S_8c9de1fc memory r;\n {\n string[4] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀\";\n r_0[0] = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀Méo Mo oo oéMM🚀Mé🚀🚀o\";\n r_0[1] = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀\";\n r_0[2] = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀🚀o éo🚀M🚀oo éoééM🚀 MM Mo🚀é 🚀MM🚀o\";\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n bytes3 r_1 = bytes3(0x2843ff);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000402843ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a804dc3a96f20204d6f206f6f206fc3a94d4df09f9a804dc3a9f09f9a80f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a80f09f9a806f20c3a96ff09f9a804df09f9a806f6f20c3a96fc3a9c3a94df09f9a802020204d4d20204d6ff09f9a80c3a920f09f9a804d4df09f9a806f0000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(uint,string,string)", + "type": "(uint,string,string)", + "value": [ + "54524587287431397708840248605861744681409739267612620386551855565891580234006", + "Moo é🚀Mé 🚀o🚀🚀éo o o🚀 oé🚀ooé éMéo MMo🚀🚀🚀éoo", + "Moo é🚀ooé🚀éoM🚀MooMoo🚀 oééoo🚀🚀o🚀M🚀éoé Méooé M éo🚀 o🚀🚀 🚀🚀M ooo" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "54524587287431397708840248605861744681409739267612620386551855565891580234006" + }, + { + "type": "string", + "value": "Moo é🚀Mé 🚀o🚀🚀éo o o🚀 oé🚀ooé éMéo MMo🚀🚀🚀éoo" + }, + { + "type": "string", + "value": "Moo é🚀ooé🚀éoM🚀MooMoo🚀 oééoo🚀🚀o🚀M🚀éoé Méooé M éo🚀 o🚀🚀 🚀🚀M ooo" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610293806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610154565b60405180910390f35b61007260405180606001604052806000815260200160608152602001606081525090565b61009660405180606001604052806000815260200160608152602001606081525090565b7f788bd2a14d65f96bc408a1c39b8240e44f3b913879f203ce6a7da3077b10891681526040805160808101909152604e80825260009190610210602083013990508082602001819052505060006040518060a00160405280606f81526020016101a1606f9139604083015250919050565b6000815180845260005b8181101561012d57602081850181015186830182015201610111565b8181111561013f576000602083870101525b50601f01601f19169290920160200192915050565b6020815281516020820152600060208301516060604084015261017a6080840182610107565b90506040840151601f198483030160608501526101978282610107565b9594505050505056fe4d6f6f20c3a9f09f9a806f6fc3a9f09f9a80c3a96f4df09f9a804d6f6f4d6f6ff09f9a80206fc3a9c3a96f6ff09f9a80f09f9a806ff09f9a804df09f9a80c3a96fc3a9204dc3a96f6fc3a9204d20c3a96ff09f9a8020206ff09f9a80f09f9a8020f09f9a80f09f9a804d20206f6f6f4d6f6f20c3a9f09f9a804dc3a920f09f9a806ff09f9a80f09f9a80c3a96f206f206ff09f9a80206fc3a9f09f9a806f6fc3a92020c3a94dc3a96f204d4d6ff09f9a80f09f9a80f09f9a80c3a96f6fa2646970667358221220228801565ab97bbc8eeb54d8c4e47fc2655f599cb97a8138d4c05b8b9d7ff31664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_16fe4aa2 {\n uint256 s_0;\n string s_1;\n string s_2;\n }\n\n function test () public pure returns (S_16fe4aa2 memory) {\n S_16fe4aa2 memory r;\n {\n uint r_0 = 54524587287431397708840248605861744681409739267612620386551855565891580234006;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀Mé 🚀o🚀🚀éo o o🚀 oé🚀ooé éMéo MMo🚀🚀🚀éoo\";\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀ooé🚀éoM🚀MooMoo🚀 oééoo🚀🚀o🚀M🚀éoé Méooé M éo🚀 o🚀🚀 🚀🚀M ooo\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020788bd2a14d65f96bc408a1c39b8240e44f3b913879f203ce6a7da3077b108916000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a804dc3a920f09f9a806ff09f9a80f09f9a80c3a96f206f206ff09f9a80206fc3a9f09f9a806f6fc3a92020c3a94dc3a96f204d4d6ff09f9a80f09f9a80f09f9a80c3a96f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f4d6f6f20c3a9f09f9a806f6fc3a9f09f9a80c3a96f4df09f9a804d6f6f4d6f6ff09f9a80206fc3a9c3a96f6ff09f9a80f09f9a806ff09f9a804df09f9a80c3a96fc3a9204dc3a96f6fc3a9204d20c3a96ff09f9a8020206ff09f9a80f09f9a8020f09f9a80f09f9a804d20206f6f6f0000000000000000000000000000000000" + }, + { + "name": "random-(uint112[3],string)", + "type": "(uint112[3],string)", + "value": [ + [ + "4830819422813516713667798302443816", + "5139560717576589715993819474146862", + "4477849769754517697082455873796077" + ], + "Moo é🚀éo Moéooéé🚀é🚀é MMMo🚀 MM 🚀oM 🚀 🚀oMé🚀M oM M🚀o🚀oMo🚀oo" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "4830819422813516713667798302443816" + }, + { + "type": "number", + "value": "5139560717576589715993819474146862" + }, + { + "type": "number", + "value": "4477849769754517697082455873796077" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éo Moéooéé🚀é🚀é MMMo🚀 MM 🚀oM 🚀 🚀oMé🚀M oM M🚀o🚀oMo🚀oo" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061023f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061010c565b60405180910390f35b6100566100ce565b61005e6100ce565b6100666100ee565b6dee2d83694bc3456570cb5b23c92881526dfd6660569e54d54b814d0d35b62e6020808301919091526ddcc668f3774a3212ebd6eab7b7ed604080840191909152918352815160a081019092526061808352600092916101a990830139602083015250919050565b60405180604001604052806100e16100ee565b8152602001606081525090565b60405180606001604052806003906020820280368337509192915050565b6020808252825160009190828483015b600382101561014b5782516dffffffffffffffffffffffffffff1681529183019160019190910190830161011c565b5050508084015160808085015280518060a086015260005b8181101561017f5782810184015186820160c001528301610163565b8181111561019157600060c083880101525b50601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a80c3a96f204d6fc3a96f6fc3a9c3a9f09f9a80c3a9f09f9a80c3a9204d4d4d6ff09f9a80204d4d20f09f9a806f4d20f09f9a8020f09f9a806f4dc3a9f09f9a804d206f4d204df09f9a806ff09f9a806f4d6ff09f9a806f6fa2646970667358221220005eb118b971ad590afa12392bc36f45de9acc6bc5eb9c383de4ca88a2b7104564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b8d2bf17 {\n uint112[3] s_0;\n string s_1;\n }\n\n function test () public pure returns (S_b8d2bf17 memory) {\n S_b8d2bf17 memory r;\n {\n uint112[3] memory r_0;\n {\n uint112 r_0_0 = 4830819422813516713667798302443816;\n r_0[0] = r_0_0;\n }\n {\n uint112 r_0_1 = 5139560717576589715993819474146862;\n r_0[1] = r_0_1;\n }\n {\n uint112 r_0_2 = 4477849769754517697082455873796077;\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀éo Moéooéé🚀é🚀é MMMo🚀 MM 🚀oM 🚀 🚀oMé🚀M oM M🚀o🚀oMo🚀oo\";\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000ee2d83694bc3456570cb5b23c928000000000000000000000000000000000000fd6660569e54d54b814d0d35b62e000000000000000000000000000000000000dcc668f3774a3212ebd6eab7b7ed000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a80c3a96f204d6fc3a96f6fc3a9c3a9f09f9a80c3a9f09f9a80c3a9204d4d4d6ff09f9a80204d4d20f09f9a806f4d20f09f9a8020f09f9a806f4dc3a9f09f9a804d206f4d204df09f9a806ff09f9a806f4d6ff09f9a806f6f00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(uint144,bytes18[4])", + "type": "(uint144,bytes18[4])", + "value": [ + "11834389873081563033314147946862770610627112", + [ + "0xe60b7482e31383236eed8742748f36666e79", + "0xf7ea63f8ecba4e28ff765164d2ab099b1a0e", + "0x3e454f9aea23eb11dd3dc22c48e16ac2dd05", + "0x1caaff77e3023f4170fe8c393602f65eef29" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "11834389873081563033314147946862770610627112" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xe60b7482e31383236eed8742748f36666e79" + }, + { + "type": "hexstring", + "value": "0xf7ea63f8ecba4e28ff765164d2ab099b1a0e" + }, + { + "type": "hexstring", + "value": "0x3e454f9aea23eb11dd3dc22c48e16ac2dd05" + }, + { + "type": "hexstring", + "value": "0x1caaff77e3023f4170fe8c393602f65eef29" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610136565b60405180910390f35b6100566100f0565b61005e6100f0565b7187da25670317f2fed86d268675a4bcf5e228815261007b610118565b71e60b7482e31383236eed8742748f36666e7960701b8152717bf531fc765d27147fbb28b2695584cd8d0760711b602080830191909152713e454f9aea23eb11dd3dc22c48e16ac2dd0560701b6040830152711caaff77e3023f4170fe8c393602f65eef2960701b6060830152820152919050565b604051806040016040528060006001600160901b03168152602001610113610118565b905290565b60405180608001604052806004906020820280368337509192915050565b81516001600160901b0316815260208083015160a08301919081840160005b60048110156101835782516dffffffffffffffffffffffffffff191682529183019190830190600101610155565b505050509291505056fea2646970667358221220e48205a1a33a7cfd30367f7655bdf626cf70b39931ceb3c59eeeacf9bb14083e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f8445361 {\n uint144 s_0;\n bytes18[4] s_1;\n }\n\n function test () public pure returns (S_f8445361 memory) {\n S_f8445361 memory r;\n {\n uint144 r_0 = 11834389873081563033314147946862770610627112;\n r.s_0 = r_0;\n }\n {\n bytes18[4] memory r_1;\n {\n bytes18 r_1_0 = bytes18(0xe60b7482e31383236eed8742748f36666e79);\n r_1[0] = r_1_0;\n }\n {\n bytes18 r_1_1 = bytes18(0xf7ea63f8ecba4e28ff765164d2ab099b1a0e);\n r_1[1] = r_1_1;\n }\n {\n bytes18 r_1_2 = bytes18(0x3e454f9aea23eb11dd3dc22c48e16ac2dd05);\n r_1[2] = r_1_2;\n }\n {\n bytes18 r_1_3 = bytes18(0x1caaff77e3023f4170fe8c393602f65eef29);\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000087da25670317f2fed86d268675a4bcf5e228e60b7482e31383236eed8742748f36666e790000000000000000000000000000f7ea63f8ecba4e28ff765164d2ab099b1a0e00000000000000000000000000003e454f9aea23eb11dd3dc22c48e16ac2dd0500000000000000000000000000001caaff77e3023f4170fe8c393602f65eef290000000000000000000000000000" + }, + { + "name": "random-(uint192,(string,bytes6))", + "type": "(uint192,(string,bytes6))", + "value": [ + "531024955072740163537488200975830992725163050550575040565", + [ + "Moo é🚀éoMo o é MMé🚀 éoM🚀o🚀M🚀oé 🚀éM🚀🚀 é 🚀 ééoMoéoéMéMéooMo", + "0x729a97ba5090" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "531024955072740163537488200975830992725163050550575040565" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoMo o é MMé🚀 éoM🚀o🚀M🚀oé 🚀éM🚀🚀 é 🚀 ééoMoéoéMéMéooMo" + }, + { + "type": "hexstring", + "value": "0x729a97ba5090" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610231806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061010e565b60405180910390f35b6100566100c7565b61005e6100c7565b7715a828c295b2bea094b70a05e96ae19c876417adf3a90835815260408051808201909152606081526000602082015260006040518060a001604052806063815260200161019960639139825250650729a97ba50960d41b602080830191909152820152919050565b604051806040016040528060006001600160c01b0316815260200161010960405180604001604052806060815260200160006001600160d01b03191681525090565b905290565b6000602080835260018060c01b03845116818401528084015160408085015280516040606086015280518060a087015260005b8181101561015d5782810185015187820160c001528401610141565b8181111561016f57600060c083890101525b5091909201516001600160d01b0319166080850152601f01601f191690920160c001939250505056fe4d6f6f20c3a9f09f9a80c3a96f4d6f206f20c3a9204d4dc3a9f09f9a802020c3a96f4df09f9a806ff09f9a804df09f9a806fc3a920f09f9a80c3a94df09f9a80f09f9a8020c3a920f09f9a8020c3a9c3a96f4d6fc3a96fc3a94dc3a94dc3a96f6f4d6fa26469706673582212209eb10303732655cea5594084cb37c148d4f400f0b9756553cdc2fb99121ef57a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_55549d31 {\n string s_0;\n bytes6 s_1;\n }\n\n struct S_a39e6a82 {\n uint192 s_0;\n S_55549d31 s_1;\n }\n\n function test () public pure returns (S_a39e6a82 memory) {\n S_a39e6a82 memory r;\n {\n uint192 r_0 = 531024955072740163537488200975830992725163050550575040565;\n r.s_0 = r_0;\n }\n {\n S_55549d31 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀éoMo o é MMé🚀 éoM🚀o🚀M🚀oé 🚀éM🚀🚀 é 🚀 ééoMoéoéMéMéooMo\";\n r_1.s_0 = r_1_0;\n }\n {\n bytes6 r_1_1 = bytes6(0x729a97ba5090);\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000015a828c295b2bea094b70a05e96ae19c876417adf3a9083500000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040729a97ba5090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a80c3a96f4d6f206f20c3a9204d4dc3a9f09f9a802020c3a96f4df09f9a806ff09f9a804df09f9a806fc3a920f09f9a80c3a94df09f9a80f09f9a8020c3a920f09f9a8020c3a9c3a96f4d6fc3a96fc3a94dc3a94dc3a96f6f4d6f0000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(uint216,string,bool)", + "type": "(uint216,string,bool)", + "value": [ + "32349080647745312507834488797901044360626179225197228709666423227", + "Moo é🚀 M", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "32349080647745312507834488797901044360626179225197228709666423227" + }, + { + "type": "string", + "value": "Moo é🚀 M" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b5806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610100565b60405180910390f35b61007d604051806060016040528060006001600160d81b03168152602001606081526020016000151581525090565b6100ac604051806060016040528060006001600160d81b03168152602001606081526020016000151581525090565b7a4ea2e1df0a340e85f025a3329ec5784f3a535ab6ec49b725f101bb8152604080518082018252600e81526d4d6f6f20c3a9f09f9a802020204d60901b602080830191909152830152600090820152919050565b6000602080835260018060d81b03845116818401528084015160606040850152805180608086015260005b818110156101475782810184015186820160a00152830161012b565b8181111561015957600060a083880101525b50604086015180151560608701529250601f01601f19169390930160a00194935050505056fea264697066735822122061bc567b8a63c725300668d80dc2de970c19e626289a25392c6e72f07796077964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2a7f241d {\n uint216 s_0;\n string s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_2a7f241d memory) {\n S_2a7f241d memory r;\n {\n uint216 r_0 = 32349080647745312507834488797901044360626179225197228709666423227;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀 M\";\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000004ea2e1df0a340e85f025a3329ec5784f3a535ab6ec49b725f101bb00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a802020204d000000000000000000000000000000000000" + }, + { + "name": "random-(uint32,bytes30)[2]", + "type": "(uint32,bytes30)[2]", + "value": [ + ["883552914", "0xa6b9768f8ad295e48156e73a3de3a25e4d3b75b74bc51222e09362313597"], + ["1734695265", "0x8f440e21bc24bda793b117ed1b39cee429d28839dd6277248eedac80cb37"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "883552914" + }, + { + "type": "hexstring", + "value": "0xa6b9768f8ad295e48156e73a3de3a25e4d3b75b74bc51222e09362313597" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1734695265" + }, + { + "type": "hexstring", + "value": "0x8f440e21bc24bda793b117ed1b39cee429d28839dd6277248eedac80cb37" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061018e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610110565b60405180910390f35b6100566100d7565b61005e6100d7565b6040805180820182526334a9f29281527fa6b9768f8ad295e48156e73a3de3a25e4d3b75b74bc51222e0936231359700006020808301919091529083528151808301909252636765596182527f8f440e21bc24bda793b117ed1b39cee429d28839dd6277248eedac80cb37000082820152820152919050565b60405180604001604052806002905b60408051808201909152600080825260208201528152602001906001900390816100e65790505090565b60808101818360005b600281101561014f578151805163ffffffff16845260209081015161ffff19168185015260409093019290910190600101610119565b5050509291505056fea2646970667358221220195b80dc73160a5b14cc7c8ac6611b43bb6560ff586c4d52806e5bf92890cb6664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5f067a5b {\n uint32 s_0;\n bytes30 s_1;\n }\n\n function test () public pure returns (S_5f067a5b[2] memory) {\n S_5f067a5b[2] memory r;\n {\n S_5f067a5b memory r_0;\n {\n uint32 r_0_0 = 883552914;\n r_0.s_0 = r_0_0;\n }\n {\n bytes30 r_0_1 = bytes30(0xa6b9768f8ad295e48156e73a3de3a25e4d3b75b74bc51222e09362313597);\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_5f067a5b memory r_1;\n {\n uint32 r_1_0 = 1734695265;\n r_1.s_0 = r_1_0;\n }\n {\n bytes30 r_1_1 = bytes30(0x8f440e21bc24bda793b117ed1b39cee429d28839dd6277248eedac80cb37);\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000034a9f292a6b9768f8ad295e48156e73a3de3a25e4d3b75b74bc51222e09362313597000000000000000000000000000000000000000000000000000000000000676559618f440e21bc24bda793b117ed1b39cee429d28839dd6277248eedac80cb370000" + }, + { + "name": "random-(uint48,uint208,bool)", + "type": "(uint48,uint208,bool)", + "value": [ + "99283844081567", + "137543164278448981744152306726089870510475221155527627636178102", + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "99283844081567" + }, + { + "type": "number", + "value": "137543164278448981744152306726089870510475221155527627636178102" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060e28061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160608082018352600080835260208084018290529284015282518082018452655a4c5242279f808252795597e3e70dda184557ab58319b05d48a1d694617e518a8377cb682850190815260019286019283528551918252516001600160d01b0316938101939093525115158284015291519081900390910190f3fea2646970667358221220aaa45225fb9d75232f4a9b4ccc0def06d70f08db5cbf45d40f4c8e4ddab7d57a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5716b1bb {\n uint48 s_0;\n uint208 s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_5716b1bb memory) {\n S_5716b1bb memory r;\n {\n uint48 r_0 = 99283844081567;\n r.s_0 = r_0;\n }\n {\n uint208 r_1 = 137543164278448981744152306726089870510475221155527627636178102;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000005a4c5242279f0000000000005597e3e70dda184557ab58319b05d48a1d694617e518a8377cb60000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-address[][1]", + "type": "address[][1]", + "value": [ + [ + "0x779A135265588b65f21d5e55fA87385336d595b7", + "0xc18A68245BCB1590E503E2Bc8D74E1781755B303" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x779A135265588b65f21d5e55fA87385336d595b7" + }, + { + "type": "address", + "value": "0xc18A68245BCB1590E503E2Bc8D74E1781755B303" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610212806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610142565b60405180910390f35b61005661011b565b61005e61011b565b604080516002808252606082018352600092602083019080368337019050509050600073779a135265588b65f21d5e55fa87385336d595b7905080826000815181106100ac576100ac6101c6565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073c18a68245bcb1590e503e2bc8d74e1781755b303905080826001815181106100fa576100fa6101c6565b6001600160a01b039290921660209283029190910190910152508152919050565b60405180602001604052806001905b606081526020019060019003908161012a5790505090565b6020808252600090604083018382018584805b600180821061016457506101b9565b888603601f19018552835180518088529088019088880190855b818110156101a25783516001600160a01b03168352928a0192918a0191840161017e565b509097505050938601935091850191600101610155565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfea264697066735822122074178fc4a07942cc3f417f2b8f229bd6567f1cb97c0c222bd11125ac4922462a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address[][1] memory) {\n address[][1] memory r;\n {\n address[] memory r_0 = new address[](2);\n {\n address r_0_0 = 0x779A135265588b65f21d5e55fA87385336d595b7;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0xc18A68245BCB1590E503E2Bc8D74E1781755B303;\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000779a135265588b65f21d5e55fa87385336d595b7000000000000000000000000c18a68245bcb1590e503e2bc8d74e1781755b303" + }, + { + "name": "random-address[2][2]", + "type": "address[2][2]", + "value": [ + [ + "0x2C6804bF3505f3CA55624a8C90e0486D44bcCB0e", + "0xB7a5dBe59423ED573d4EDD675B5b024828e2Fa2c" + ], + [ + "0x9AD50273ef2AEde0C3327b0F5018E14E6AdC1024", + "0xe49d8d8199096f21B88B3799B18ed25FbBC199C8" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x2C6804bF3505f3CA55624a8C90e0486D44bcCB0e" + }, + { + "type": "address", + "value": "0xB7a5dBe59423ED573d4EDD675B5b024828e2Fa2c" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x9AD50273ef2AEde0C3327b0F5018E14E6AdC1024" + }, + { + "type": "address", + "value": "0xe49d8d8199096f21B88B3799B18ed25FbBC199C8" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101c8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610129565b60405180910390f35b6100566100de565b61005e6100de565b61006661010b565b732c6804bf3505f3ca55624a8c90e0486d44bccb0e815273b7a5dbe59423ed573d4edd675b5b024828e2fa2c602082015281526100a161010b565b739ad50273ef2aede0c3327b0f5018e14e6adc1024815273e49d8d8199096f21b88b3799b18ed25fbbc199c8602080830191909152820152919050565b60405180604001604052806002905b6100f561010b565b8152602001906001900390816100ed5790505090565b60405180604001604052806002906020820280368337509192915050565b6080810181836000805b60028082106101425750610188565b835185845b8381101561016e5782516001600160a01b0316825260209283019290910190600101610147565b505050604094909401935060209290920191600101610133565b505050509291505056fea26469706673582212202edb1d00188541a6ed14e8eb4cc6de550e66928c480b8b5932b132bf8a3fdaa864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address[2][2] memory) {\n address[2][2] memory r;\n {\n address[2] memory r_0;\n {\n address r_0_0 = 0x2C6804bF3505f3CA55624a8C90e0486D44bcCB0e;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0xB7a5dBe59423ED573d4EDD675B5b024828e2Fa2c;\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n address[2] memory r_1;\n {\n address r_1_0 = 0x9AD50273ef2AEde0C3327b0F5018E14E6AdC1024;\n r_1[0] = r_1_0;\n }\n {\n address r_1_1 = 0xe49d8d8199096f21B88B3799B18ed25FbBC199C8;\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000002c6804bf3505f3ca55624a8c90e0486d44bccb0e000000000000000000000000b7a5dbe59423ed573d4edd675b5b024828e2fa2c0000000000000000000000009ad50273ef2aede0c3327b0f5018e14e6adc1024000000000000000000000000e49d8d8199096f21b88b3799b18ed25fbbc199c8" + }, + { + "name": "random-address[2][3]", + "type": "address[2][3]", + "value": [ + [ + "0x8e07799674416e70b155be8dDed563637eAb5423", + "0xe6524158D4322290001879f6cB4FCc91b41c8bBF" + ], + [ + "0x92391E4F59491EB139002C820c3d7d787F7AD9ac", + "0xafF669ABF1e6A68c88422fEE35FFc3B885d5E0Ce" + ], + [ + "0x7A91d9C5925F9F452E35b1C606801D84D23FD762", + "0x44bf9e29538CA08BdBBF5E8f89363CFC22992C90" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x8e07799674416e70b155be8dDed563637eAb5423" + }, + { + "type": "address", + "value": "0xe6524158D4322290001879f6cB4FCc91b41c8bBF" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x92391E4F59491EB139002C820c3d7d787F7AD9ac" + }, + { + "type": "address", + "value": "0xafF669ABF1e6A68c88422fEE35FFc3B885d5E0Ce" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x7A91d9C5925F9F452E35b1C606801D84D23FD762" + }, + { + "type": "address", + "value": "0x44bf9e29538CA08BdBBF5E8f89363CFC22992C90" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610200806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610167565b60405180910390f35b61005661011c565b61005e61011c565b610066610149565b738e07799674416e70b155be8dded563637eab5423815273e6524158d4322290001879f6cb4fcc91b41c8bbf602082015281526100a1610149565b7392391e4f59491eb139002c820c3d7d787f7ad9ac815273aff669abf1e6a68c88422fee35ffc3b885d5e0ce6020808301919091528201526100e1610149565b737a91d9c5925f9f452e35b1c606801d84d23fd76281527344bf9e29538ca08bdbbf5e8f89363cfc22992c9060208201526040820152919050565b60405180606001604052806003905b610133610149565b81526020019060019003908161012b5790505090565b60405180604001604052806002906020820280368337509192915050565b60c0810181836000805b60038110156101c057825184835b60028110156101a75782516001600160a01b031682526020928301929091019060010161017f565b5050506040939093019260209290920191600101610171565b505050509291505056fea264697066735822122033b9b1dadd11f838c6dc1fabfed85e4608026ff0358f6d8ed3ac3a017d63147d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address[2][3] memory) {\n address[2][3] memory r;\n {\n address[2] memory r_0;\n {\n address r_0_0 = 0x8e07799674416e70b155be8dDed563637eAb5423;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0xe6524158D4322290001879f6cB4FCc91b41c8bBF;\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n address[2] memory r_1;\n {\n address r_1_0 = 0x92391E4F59491EB139002C820c3d7d787F7AD9ac;\n r_1[0] = r_1_0;\n }\n {\n address r_1_1 = 0xafF669ABF1e6A68c88422fEE35FFc3B885d5E0Ce;\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n {\n address[2] memory r_2;\n {\n address r_2_0 = 0x7A91d9C5925F9F452E35b1C606801D84D23FD762;\n r_2[0] = r_2_0;\n }\n {\n address r_2_1 = 0x44bf9e29538CA08BdBBF5E8f89363CFC22992C90;\n r_2[1] = r_2_1;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000008e07799674416e70b155be8dded563637eab5423000000000000000000000000e6524158d4322290001879f6cb4fcc91b41c8bbf00000000000000000000000092391e4f59491eb139002c820c3d7d787f7ad9ac000000000000000000000000aff669abf1e6a68c88422fee35ffc3b885d5e0ce0000000000000000000000007a91d9c5925f9f452e35b1c606801d84d23fd76200000000000000000000000044bf9e29538ca08bdbbf5e8f89363cfc22992c90" + }, + { + "name": "random-address[3][]", + "type": "address[3][]", + "value": [ + [ + "0xABf8098F2510F4B92E6965FaE6f6a4ce970540A4", + "0x80D34a4CEC5c1A027CAeE9dA928BecB2cA526B80", + "0x095A306dC19B34Bdb791285cE91aeAD6838FB9fE" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xABf8098F2510F4B92E6965FaE6f6a4ce970540A4" + }, + { + "type": "address", + "value": "0x80D34a4CEC5c1A027CAeE9dA928BecB2cA526B80" + }, + { + "type": "address", + "value": "0x095A306dC19B34Bdb791285cE91aeAD6838FB9fE" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101dc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061011d565b60405180910390f35b60408051600180825281830190925260609160009190816020015b6100716100ff565b81526020019060019003908161006957905050905061008e6100ff565b73abf8098f2510f4b92e6965fae6f6a4ce970540a481527380d34a4cec5c1a027caee9da928becb2ca526b80602082015273095a306dc19b34bdb791285ce91aead6838fb9fe60408201528151819083906000906100ee576100ee610190565b602090810291909101015250919050565b60405180606001604052806003906020820280368337509192915050565b602080825282518282018190526000919084820190604085019084805b8281101561018357845184835b600381101561016d5782516001600160a01b031682529188019190880190600101610147565b505050938501936060939093019260010161013a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212207c74cb79d90e3743d582886cd53e600ba305a020edfc64285c01bea61f31444d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address[3][] memory) {\n address[3][] memory r = new address[3][](1);\n {\n address[3] memory r_0;\n {\n address r_0_0 = 0xABf8098F2510F4B92E6965FaE6f6a4ce970540A4;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0x80D34a4CEC5c1A027CAeE9dA928BecB2cA526B80;\n r_0[1] = r_0_1;\n }\n {\n address r_0_2 = 0x095A306dC19B34Bdb791285cE91aeAD6838FB9fE;\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000abf8098f2510f4b92e6965fae6f6a4ce970540a400000000000000000000000080d34a4cec5c1a027caee9da928becb2ca526b80000000000000000000000000095a306dc19b34bdb791285ce91aead6838fb9fe" + }, + { + "name": "random-address[3][1]", + "type": "address[3][1]", + "value": [ + [ + "0xD1e11e38CBa3DC19Dd7720a98c65630294E6D418", + "0x599A0eA9c76054Ec166B0bd84C153Df8BD51c28A", + "0xDEC7D2cae182A857df8110D9aEb22c772df52C4D" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xD1e11e38CBa3DC19Dd7720a98c65630294E6D418" + }, + { + "type": "address", + "value": "0x599A0eA9c76054Ec166B0bd84C153Df8BD51c28A" + }, + { + "type": "address", + "value": "0xDEC7D2cae182A857df8110D9aEb22c772df52C4D" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101a2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610103565b60405180910390f35b6100566100b8565b61005e6100b8565b6100666100e5565b73d1e11e38cba3dc19dd7720a98c65630294e6d418815273599a0ea9c76054ec166b0bd84c153df8bd51c28a602082015273dec7d2cae182a857df8110d9aeb22c772df52c4d60408201528152919050565b60405180602001604052806001905b6100cf6100e5565b8152602001906001900390816100c75790505090565b60405180606001604052806003906020820280368337509192915050565b60608181019082846000805b600180821061011e5750610161565b835185845b600381101561014a5782516001600160a01b03168252602092830192909101908301610123565b50505093850193506020929092019160010161010f565b50505050509291505056fea264697066735822122033cbf9ce623b4112b7291295496a16626b76980c70962d3ae25256fbe480cc8864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address[3][1] memory) {\n address[3][1] memory r;\n {\n address[3] memory r_0;\n {\n address r_0_0 = 0xD1e11e38CBa3DC19Dd7720a98c65630294E6D418;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0x599A0eA9c76054Ec166B0bd84C153Df8BD51c28A;\n r_0[1] = r_0_1;\n }\n {\n address r_0_2 = 0xDEC7D2cae182A857df8110D9aEb22c772df52C4D;\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000d1e11e38cba3dc19dd7720a98c65630294e6d418000000000000000000000000599a0ea9c76054ec166b0bd84c153df8bd51c28a000000000000000000000000dec7d2cae182a857df8110d9aeb22c772df52c4d" + }, + { + "name": "random-address[3][3]", + "type": "address[3][3]", + "value": [ + [ + "0xF06bAd48eCd0C0B5e166e7c9F88459BC33b14542", + "0x63463250468bC9B9F41d68296f8f6495Ce3EFd79", + "0xAcF3c8F0d9248145a9191Cb0B7630Ba675C4968c" + ], + [ + "0xc58518F12C125E4DC01DC57c976eB742F7C907B8", + "0xBac16Eb3b767784361A504c803F68E800a01d30D", + "0xb0c9AF47Eec201109990ee497034DBAE2181c924" + ], + [ + "0x481bEC660E0D7b50Add48F90560C9769022e2979", + "0x969B8dece3f2929c0bf73152B3c47B70765c92E5", + "0xF5DdAd63d5ffCc4E02d53ebC82637B76383f7409" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xF06bAd48eCd0C0B5e166e7c9F88459BC33b14542" + }, + { + "type": "address", + "value": "0x63463250468bC9B9F41d68296f8f6495Ce3EFd79" + }, + { + "type": "address", + "value": "0xAcF3c8F0d9248145a9191Cb0B7630Ba675C4968c" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xc58518F12C125E4DC01DC57c976eB742F7C907B8" + }, + { + "type": "address", + "value": "0xBac16Eb3b767784361A504c803F68E800a01d30D" + }, + { + "type": "address", + "value": "0xb0c9AF47Eec201109990ee497034DBAE2181c924" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x481bEC660E0D7b50Add48F90560C9769022e2979" + }, + { + "type": "address", + "value": "0x969B8dece3f2929c0bf73152B3c47B70765c92E5" + }, + { + "type": "address", + "value": "0xF5DdAd63d5ffCc4E02d53ebC82637B76383f7409" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610257806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101b7565b60405180910390f35b61005661016c565b61005e61016c565b610066610199565b73f06bad48ecd0c0b5e166e7c9f88459bc33b1454281527363463250468bc9b9f41d68296f8f6495ce3efd79602082015273acf3c8f0d9248145a9191cb0b7630ba675c4968c604082015281526100bb610199565b73c58518f12c125e4dc01dc57c976eb742f7c907b8815273bac16eb3b767784361a504c803f68e800a01d30d60208083019190915273b0c9af47eec201109990ee497034dbae2181c9246040830152820152610115610199565b73481bec660e0d7b50add48f90560c9769022e2979815273969b8dece3f2929c0bf73152b3c47b70765c92e5602082015273f5ddad63d5ffcc4e02d53ebc82637b76383f7409604080830191909152820152919050565b60405180606001604052806003905b610183610199565b81526020019060019003908161017b5790505090565b60405180606001604052806003906020820280368337509192915050565b610120810181836000805b60038082106101d15750610217565b835185845b838110156101fd5782516001600160a01b03168252602092830192909101906001016101d6565b5050506060949094019350602092909201916001016101c2565b505050509291505056fea26469706673582212209eef429c8856563be1af3809b986494b19614897b487579798eb4ba70b66498864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address[3][3] memory) {\n address[3][3] memory r;\n {\n address[3] memory r_0;\n {\n address r_0_0 = 0xF06bAd48eCd0C0B5e166e7c9F88459BC33b14542;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0x63463250468bC9B9F41d68296f8f6495Ce3EFd79;\n r_0[1] = r_0_1;\n }\n {\n address r_0_2 = 0xAcF3c8F0d9248145a9191Cb0B7630Ba675C4968c;\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n {\n address[3] memory r_1;\n {\n address r_1_0 = 0xc58518F12C125E4DC01DC57c976eB742F7C907B8;\n r_1[0] = r_1_0;\n }\n {\n address r_1_1 = 0xBac16Eb3b767784361A504c803F68E800a01d30D;\n r_1[1] = r_1_1;\n }\n {\n address r_1_2 = 0xb0c9AF47Eec201109990ee497034DBAE2181c924;\n r_1[2] = r_1_2;\n }\n r[1] = r_1;\n }\n {\n address[3] memory r_2;\n {\n address r_2_0 = 0x481bEC660E0D7b50Add48F90560C9769022e2979;\n r_2[0] = r_2_0;\n }\n {\n address r_2_1 = 0x969B8dece3f2929c0bf73152B3c47B70765c92E5;\n r_2[1] = r_2_1;\n }\n {\n address r_2_2 = 0xF5DdAd63d5ffCc4E02d53ebC82637B76383f7409;\n r_2[2] = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000f06bad48ecd0c0b5e166e7c9f88459bc33b1454200000000000000000000000063463250468bc9b9f41d68296f8f6495ce3efd79000000000000000000000000acf3c8f0d9248145a9191cb0b7630ba675c4968c000000000000000000000000c58518f12c125e4dc01dc57c976eb742f7c907b8000000000000000000000000bac16eb3b767784361a504c803f68e800a01d30d000000000000000000000000b0c9af47eec201109990ee497034dbae2181c924000000000000000000000000481bec660e0d7b50add48f90560c9769022e2979000000000000000000000000969b8dece3f2929c0bf73152b3c47b70765c92e5000000000000000000000000f5ddad63d5ffcc4e02d53ebc82637b76383f7409" + }, + { + "name": "random-address[4][]", + "type": "address[4][]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610151806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100a8565b60405180910390f35b604080516000808252602082019092526060919081610083565b61007061008a565b8152602001906001900390816100685790505b5092915050565b60405180608001604052806004906020820280368337509192915050565b602080825282518282018190526000919084820190604085019084805b8281101561010e57845184835b60048110156100f85782516001600160a01b0316825291880191908801906001016100d2565b50505093850193608093909301926001016100c5565b509197965050505050505056fea264697066735822122000a189d0f03fbfaa4820e11eb5fae5a6514cacee2ba85ef919a6eddb910dd07f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address[4][] memory) {\n address[4][] memory r = new address[4][](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bool[][1]", + "type": "bool[][1]", + "value": [[]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061014e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061009b565b60405180910390f35b610056610074565b61005e610074565b6040805160008152602081019091528152919050565b60405180602001604052806001905b60608152602001906001900390816100835790505090565b6020808252600090604083018382018584805b60018082106100bd575061010b565b888603601f19018552835180518088529088019088880190855b818110156100f457835115158352928a0192918a019184016100d7565b5090975050509386019350918501916001016100ae565b509297965050505050505056fea2646970667358221220361800f20a1274a4706cbe40bafa29c70629899a73c20c1281211d75d6d58a5264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[][1] memory) {\n bool[][1] memory r;\n {\n bool[] memory r_0 = new bool[](0);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bool[][2]", + "type": "bool[][2]", + "value": [[true, true, false], [false]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610243806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610180565b60405180910390f35b610056610159565b61005e610159565b6040805160038082526080820190925260009160208201606080368337019050509050600060019050808260008151811061009b5761009b6101f7565b6020026020010190151590811515815250505060006001905080826001815181106100c8576100c86101f7565b60200260200101901515908115158152505050600080826002815181106100f1576100f16101f7565b911515602092830291909101909101525081526040805160018082528183019092526000918160200160208202803683370190505090506000808260008151811061013e5761013e6101f7565b91151560209283029190910182015283019190915250919050565b60405180604001604052806002905b60608152602001906001900390816101685790505090565b6020808252600090606083018382018584805b60028110156101ea57878503601f19018452825180518087529087019087870190845b818110156101d45783511515835292890192918901916001016101b6565b5090965050509285019291850191600101610193565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220873cc614ce920f3a4ea3cd267697ff0518885ac05da7505ba9e4f556cf0e6fd164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[][2] memory) {\n bool[][2] memory r;\n {\n bool[] memory r_0 = new bool[](3);\n {\n bool r_0_0 = true;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0[1] = r_0_1;\n }\n {\n bool r_0_2 = false;\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n {\n bool[] memory r_1 = new bool[](1);\n {\n bool r_1_0 = false;\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bool[2][1]", + "type": "bool[2][1]", + "value": [[false, true]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061015b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100c3565b60405180910390f35b610056610078565b61005e610078565b6100666100a5565b60008152600160208201528152919050565b60405180602001604052806001905b61008f6100a5565b8152602001906001900390816100875790505090565b60405180604001604052806002906020820280368337509192915050565b60408181019082846000805b60018082106100de575061011a565b835185845b6002811015610103578251151582526020928301929091019083016100e3565b5050509385019350602092909201916001016100cf565b50505050509291505056fea264697066735822122090db370187a0f245e27491a79f9744950b19621c8f5bb3b59de39ae8b80444c964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[2][1] memory) {\n bool[2][1] memory r;\n {\n bool[2] memory r_0;\n {\n bool r_0_0 = false;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-bool[2][2]", + "type": "bool[2][2]", + "value": [ + [true, true], + [true, false] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610174806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100dc565b60405180910390f35b610056610091565b61005e610091565b6100666100be565b60018082526020820152815261007a6100be565b600181526000602080830191909152820152919050565b60405180604001604052806002905b6100a86100be565b8152602001906001900390816100a05790505090565b60405180604001604052806002906020820280368337509192915050565b6080810181836000805b60028082106100f55750610134565b835185845b8381101561011a57825115158252602092830192909101906001016100fa565b5050506040949094019350602092909201916001016100e6565b505050509291505056fea264697066735822122027f0e2add9a7e78db9636783192a004422ffb40e60daa60cca8b1d04bd345a4364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[2][2] memory) {\n bool[2][2] memory r;\n {\n bool[2] memory r_0;\n {\n bool r_0_0 = true;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n bool[2] memory r_1;\n {\n bool r_1_0 = true;\n r_1[0] = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bool[2][3]", + "type": "bool[2][3]", + "value": [ + [false, true], + [false, true], + [true, false] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610187806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f5565b60405180910390f35b6100566100aa565b61005e6100aa565b6100666100d7565b6000815260016020820152815261007b6100d7565b6000815260016020808301919091528201526100956100d7565b60018152600060208201526040820152919050565b60405180606001604052806003905b6100c16100d7565b8152602001906001900390816100b95790505090565b60405180604001604052806002906020820280368337509192915050565b60c0810181836000805b600381101561014757825184835b600281101561012e578251151582526020928301929091019060010161010d565b50505060409390930192602092909201916001016100ff565b505050509291505056fea26469706673582212203f44857bba7f0bfecece380eebfb4ee976698a272c756f1ae0a04412ffe3154764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[2][3] memory) {\n bool[2][3] memory r;\n {\n bool[2] memory r_0;\n {\n bool r_0_0 = false;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n bool[2] memory r_1;\n {\n bool r_1_0 = false;\n r_1[0] = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n {\n bool[2] memory r_2;\n {\n bool r_2_0 = true;\n r_2[0] = r_2_0;\n }\n {\n bool r_2_1 = false;\n r_2[1] = r_2_1;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bool[3][1]", + "type": "bool[3][1]", + "value": [[true, true, false]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610161806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100c9565b60405180910390f35b61005661007e565b61005e61007e565b6100666100ab565b60018082526020820152600060408201528152919050565b60405180602001604052806001905b6100956100ab565b81526020019060019003908161008d5790505090565b60405180606001604052806003906020820280368337509192915050565b60608181019082846000805b60018082106100e45750610120565b835185845b6003811015610109578251151582526020928301929091019083016100e9565b5050509385019350602092909201916001016100d5565b50505050509291505056fea26469706673582212204de38c9e7946516112dbac3709b5690b05aac1305761446bb3448d6aaaa21b0264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[3][1] memory) {\n bool[3][1] memory r;\n {\n bool[3] memory r_0;\n {\n bool r_0_0 = true;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0[1] = r_0_1;\n }\n {\n bool r_0_2 = false;\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bool[3][2]", + "type": "bool[3][2]", + "value": [ + [false, false, true], + [false, false, false] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061017b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e9565b60405180910390f35b61005661009e565b61005e61009e565b6100666100cb565b600080825260208201526001604082015281526100816100cb565b600080825260208083018290526040830191909152820152919050565b60405180604001604052806002905b6100b56100cb565b8152602001906001900390816100ad5790505090565b60405180606001604052806003906020820280368337509192915050565b60c0810181836000805b600281101561013b57825184835b60038110156101225782511515825260209283019290910190600101610101565b50505060609390930192602092909201916001016100f3565b505050509291505056fea2646970667358221220a8383a899b56e53f1f16c431f0b18587122ce11b57e86d740e65779fbe17db2164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[3][2] memory) {\n bool[3][2] memory r;\n {\n bool[3] memory r_0;\n {\n bool r_0_0 = false;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0[1] = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n {\n bool[3] memory r_1;\n {\n bool r_1_0 = false;\n r_1[0] = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1[1] = r_1_1;\n }\n {\n bool r_1_2 = false;\n r_1[2] = r_1_2;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bool[3][3]", + "type": "bool[3][3]", + "value": [ + [true, false, false], + [true, false, true], + [true, false, false] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101a7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061010e565b60405180910390f35b6100566100c3565b61005e6100c3565b6100666100f0565b60018152600060208201819052604082015281526100826100f0565b6001808252600060208084019190915260408301919091528201526100a56100f0565b60018152600060208201819052604080830191909152820152919050565b60405180606001604052806003905b6100da6100f0565b8152602001906001900390816100d25790505090565b60405180606001604052806003906020820280368337509192915050565b610120810181836000805b60038082106101285750610167565b835185845b8381101561014d578251151582526020928301929091019060010161012d565b505050606094909401935060209290920191600101610119565b505050509291505056fea26469706673582212207213bdeaa047f4d97a357d61817cf735f6226b06a2f4ce9acf9b9fab08956aef64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[3][3] memory) {\n bool[3][3] memory r;\n {\n bool[3] memory r_0;\n {\n bool r_0_0 = true;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0[1] = r_0_1;\n }\n {\n bool r_0_2 = false;\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n {\n bool[3] memory r_1;\n {\n bool r_1_0 = true;\n r_1[0] = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1[1] = r_1_1;\n }\n {\n bool r_1_2 = true;\n r_1[2] = r_1_2;\n }\n r[1] = r_1;\n }\n {\n bool[3] memory r_2;\n {\n bool r_2_0 = true;\n r_2[0] = r_2_0;\n }\n {\n bool r_2_1 = false;\n r_2[1] = r_2_1;\n }\n {\n bool r_2_2 = false;\n r_2[2] = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bool[4][2]", + "type": "bool[4][2]", + "value": [ + [false, true, true, true], + [false, false, true, true] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061018b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f8565b60405180910390f35b6100566100ad565b61005e6100ad565b6100666100da565b6000815260016020820181905260408201819052606082015281526100896100da565b60008082526020808301919091526001604083018190526060830152820152919050565b60405180604001604052806002905b6100c46100da565b8152602001906001900390816100bc5790505090565b60405180608001604052806004906020820280368337509192915050565b610100810181836000805b600281101561014b57825184835b60048110156101325782511515825260209283019290910190600101610111565b5050506080939093019260209290920191600101610103565b505050509291505056fea264697066735822122037a627be5503cd0b2c9012bdfebb401e21dc27289f639389acb34df20acf8f2d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[4][2] memory) {\n bool[4][2] memory r;\n {\n bool[4] memory r_0;\n {\n bool r_0_0 = false;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0[1] = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0[2] = r_0_2;\n }\n {\n bool r_0_3 = true;\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n {\n bool[4] memory r_1;\n {\n bool r_1_0 = false;\n r_1[0] = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1[1] = r_1_1;\n }\n {\n bool r_1_2 = true;\n r_1[2] = r_1_2;\n }\n {\n bool r_1_3 = true;\n r_1[3] = r_1_3;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-bool[4][3]", + "type": "bool[4][3]", + "value": [ + [true, false, true, false], + [true, false, false, true], + [true, false, true, true] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610124565b60405180910390f35b6100566100d9565b61005e6100d9565b610066610106565b600180825260006020830181905260408301919091526060820152815261008b610106565b600180825260006020808401829052604084019190915260608301919091528201526100b5610106565b60018082526000602083015260408083018290526060830191909152820152919050565b60405180606001604052806003905b6100f0610106565b8152602001906001900390816100e85790505090565b60405180608001604052806004906020820280368337509192915050565b610180810181836000805b600381101561017757825184835b600481101561015e578251151582526020928301929091019060010161013d565b505050608093909301926020929092019160010161012f565b505050509291505056fea2646970667358221220b5c8ff29b7103f1e4011da17779085c3bfb6ec4b92006df1fb10780b87ef752664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[4][3] memory) {\n bool[4][3] memory r;\n {\n bool[4] memory r_0;\n {\n bool r_0_0 = true;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0[1] = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0[2] = r_0_2;\n }\n {\n bool r_0_3 = false;\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n {\n bool[4] memory r_1;\n {\n bool r_1_0 = true;\n r_1[0] = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1[1] = r_1_1;\n }\n {\n bool r_1_2 = false;\n r_1[2] = r_1_2;\n }\n {\n bool r_1_3 = true;\n r_1[3] = r_1_3;\n }\n r[1] = r_1;\n }\n {\n bool[4] memory r_2;\n {\n bool r_2_0 = true;\n r_2[0] = r_2_0;\n }\n {\n bool r_2_1 = false;\n r_2[1] = r_2_1;\n }\n {\n bool r_2_2 = true;\n r_2[2] = r_2_2;\n }\n {\n bool r_2_3 = true;\n r_2[3] = r_2_3;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-bytes11[2][2]", + "type": "bytes11[2][2]", + "value": [ + ["0x33ee0e72f9a76dbf443d12", "0xcb5bc4b9a9260d5f60ee32"], + ["0x50205e571ecbf8c2a77a2b", "0xb27b9bee240f0d39a46fa4"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x33ee0e72f9a76dbf443d12" + }, + { + "type": "hexstring", + "value": "0xcb5bc4b9a9260d5f60ee32" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x50205e571ecbf8c2a77a2b" + }, + { + "type": "hexstring", + "value": "0xb27b9bee240f0d39a46fa4" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610111565b60405180910390f35b6100566100c6565b61005e6100c6565b6100666100f3565b6a19f707397cd3b6dfa21e8960a91b81526a65ade25cd49306afb0771960a91b602082015281526100956100f3565b6a50205e571ecbf8c2a77a2b60a81b81526a2c9ee6fb8903c34e691be960aa1b602080830191909152820152919050565b60405180604001604052806002905b6100dd6100f3565b8152602001906001900390816100d55790505090565b60405180604001604052806002906020820280368337509192915050565b6080810181836000805b600280821061012a5750610171565b835185845b838110156101575782516001600160a81b03191682526020928301929091019060010161012f565b50505060409490940193506020929092019160010161011b565b505050509291505056fea264697066735822122054b85748ed17ea29319dae48849ca921d9cff7fb45da351b562999635246a90064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes11[2][2] memory) {\n bytes11[2][2] memory r;\n {\n bytes11[2] memory r_0;\n {\n bytes11 r_0_0 = bytes11(0x33ee0e72f9a76dbf443d12);\n r_0[0] = r_0_0;\n }\n {\n bytes11 r_0_1 = bytes11(0xcb5bc4b9a9260d5f60ee32);\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n bytes11[2] memory r_1;\n {\n bytes11 r_1_0 = bytes11(0x50205e571ecbf8c2a77a2b);\n r_1[0] = r_1_0;\n }\n {\n bytes11 r_1_1 = bytes11(0xb27b9bee240f0d39a46fa4);\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x33ee0e72f9a76dbf443d12000000000000000000000000000000000000000000cb5bc4b9a9260d5f60ee3200000000000000000000000000000000000000000050205e571ecbf8c2a77a2b000000000000000000000000000000000000000000b27b9bee240f0d39a46fa4000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes13[][4]", + "type": "bytes13[][4]", + "value": [ + ["0x34c827870868a5a9fa4b2dacdc", "0x51a57467381fa24e1af76fdf91"], + ["0x1d4780b24f29fcc0546c0a8ba0"], + ["0x542eb799b83422f59e83c833a4"], + ["0xf8d0fb00b6a80b95c82339f0c9", "0x138beee9ec2d7d396e0f1664d2"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x34c827870868a5a9fa4b2dacdc" + }, + { + "type": "hexstring", + "value": "0x51a57467381fa24e1af76fdf91" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x1d4780b24f29fcc0546c0a8ba0" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x542eb799b83422f59e83c833a4" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xf8d0fb00b6a80b95c82339f0c9" + }, + { + "type": "hexstring", + "value": "0x138beee9ec2d7d396e0f1664d2" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061037f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102b4565b60405180910390f35b61005661028d565b61005e61028d565b604080516002808252606082018352600092602083019080368337505081519192506c0d3209e1c21a296a7e92cb6b37609a1b9182915083906000906100a6576100a6610333565b6001600160981b0319909216602092830291909101909101525080516c51a57467381fa24e1af76fdf9160981b908190839060019081106100e9576100e9610333565b6001600160981b03199290921660209283029190910190910152508152604080516001808252818301909252600091816020016020820280368337505081519192506bea3c0592794fe602a360545d609d1b91829150839060009061015057610150610333565b6001600160981b03199290921660209283029190910182015283019190915250604080516001808252818301909252600091816020016020820280368337505081519192506c150bade66e0d08bd67a0f20ce9609a1b9182915083906000906101bb576101bb610333565b6001600160981b031992909216602092830291909101820152604084810193909352825160028082526060820185526000949193509183019080368337505081519192506cf8d0fb00b6a80b95c82339f0c960981b91829150839060009061022557610225610333565b6001600160981b0319909216602092830291909101909101525080516c09c5f774f616be9cb7078b326960991b9081908390600190811061026857610268610333565b6001600160981b03199290921660209283029190910190910152506060820152919050565b60405180608001604052806004905b606081526020019060019003908161029c5790505090565b602080825260009060a083018382018584805b600481101561032657878503601f19018452825180518087529087019087870190845b818110156103105783516001600160981b031916835292890192918901916001016102ea565b50909650505092850192918501916001016102c7565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212201ad22a8006513f699001adab125d9a4abf945538fa0d36f2f55070c9a60b86ed64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes13[][4] memory) {\n bytes13[][4] memory r;\n {\n bytes13[] memory r_0 = new bytes13[](2);\n {\n bytes13 r_0_0 = bytes13(0x34c827870868a5a9fa4b2dacdc);\n r_0[0] = r_0_0;\n }\n {\n bytes13 r_0_1 = bytes13(0x51a57467381fa24e1af76fdf91);\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n bytes13[] memory r_1 = new bytes13[](1);\n {\n bytes13 r_1_0 = bytes13(0x1d4780b24f29fcc0546c0a8ba0);\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n {\n bytes13[] memory r_2 = new bytes13[](1);\n {\n bytes13 r_2_0 = bytes13(0x542eb799b83422f59e83c833a4);\n r_2[0] = r_2_0;\n }\n r[2] = r_2;\n }\n {\n bytes13[] memory r_3 = new bytes13[](2);\n {\n bytes13 r_3_0 = bytes13(0xf8d0fb00b6a80b95c82339f0c9);\n r_3[0] = r_3_0;\n }\n {\n bytes13 r_3_1 = bytes13(0x138beee9ec2d7d396e0f1664d2);\n r_3[1] = r_3_1;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000234c827870868a5a9fa4b2dacdc0000000000000000000000000000000000000051a57467381fa24e1af76fdf910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011d4780b24f29fcc0546c0a8ba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001542eb799b83422f59e83c833a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f8d0fb00b6a80b95c82339f0c900000000000000000000000000000000000000138beee9ec2d7d396e0f1664d200000000000000000000000000000000000000" + }, + { + "name": "random-bytes14[][4]", + "type": "bytes14[][4]", + "value": [ + [ + "0xabf8849895100528c857ea0ac642", + "0x5f72d5a145f2752029352e80e652", + "0x5f0918e8a17c2b21c264e336e8a2", + "0xb4e44d8f760e3c53335416ea4aee" + ], + ["0x9f6d1ab961b9e57bc9f8c164472c", "0xf424cecddc839674901cfb441d98"], + [], + ["0x64ce708d2801f4ba25508b1d6696", "0x6ce38d3648ae9d067261792e653c"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xabf8849895100528c857ea0ac642" + }, + { + "type": "hexstring", + "value": "0x5f72d5a145f2752029352e80e652" + }, + { + "type": "hexstring", + "value": "0x5f0918e8a17c2b21c264e336e8a2" + }, + { + "type": "hexstring", + "value": "0xb4e44d8f760e3c53335416ea4aee" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x9f6d1ab961b9e57bc9f8c164472c" + }, + { + "type": "hexstring", + "value": "0xf424cecddc839674901cfb441d98" + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x64ce708d2801f4ba25508b1d6696" + }, + { + "type": "hexstring", + "value": "0x6ce38d3648ae9d067261792e653c" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103fb806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610330565b60405180910390f35b610056610309565b61005e610309565b60408051600480825260a0820190925260009160208201608080368337505081519192506d55fc424c4a880294642bf505632160911b9182915083906000906100a9576100a96103af565b6001600160901b0319909216602092830291909101909101525080516d2fb96ad0a2f93a90149a9740732960911b908190839060019081106100ed576100ed6103af565b6001600160901b0319909216602092830291909101909101525080516d2f848c7450be1590e132719b745160911b90819083906002908110610131576101316103af565b6001600160901b0319909216602092830291909101909101525080516d5a7226c7bb071e2999aa0b75257760911b90819083906003908110610175576101756103af565b6001600160901b0319929092166020928302919091019091015250815260408051600280825260608201909252600091816020016020820280368337505081519192506d27db46ae586e795ef27e305911cb60921b9182915083906000906101df576101df6103af565b6001600160901b0319909216602092830291909101909101525080516d1e8499d9bb9072ce92039f6883b360931b90819083906001908110610223576102236103af565b6001600160901b031992909216602092830291909101820152838101929092525060408051600080825281840183528285019190915281516002808252606082018452919390929083019080368337505081519192506d326738469400fa5d12a8458eb34b60911b9182915083906000906102a0576102a06103af565b6001600160901b0319909216602092830291909101909101525080516d1b38e34d922ba7419c985e4b994f60921b908190839060019081106102e4576102e46103af565b6001600160901b03199290921660209283029190910190910152506060820152919050565b60405180608001604052806004905b60608152602001906001900390816103185790505090565b602080825260009060a083018382018584805b60048110156103a257878503601f19018452825180518087529087019087870190845b8181101561038c5783516001600160901b03191683529289019291890191600101610366565b5090965050509285019291850191600101610343565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220be855ffc2dd36613f4a4189f59704146064770ced18c9be0573fd9fae53b689564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes14[][4] memory) {\n bytes14[][4] memory r;\n {\n bytes14[] memory r_0 = new bytes14[](4);\n {\n bytes14 r_0_0 = bytes14(0xabf8849895100528c857ea0ac642);\n r_0[0] = r_0_0;\n }\n {\n bytes14 r_0_1 = bytes14(0x5f72d5a145f2752029352e80e652);\n r_0[1] = r_0_1;\n }\n {\n bytes14 r_0_2 = bytes14(0x5f0918e8a17c2b21c264e336e8a2);\n r_0[2] = r_0_2;\n }\n {\n bytes14 r_0_3 = bytes14(0xb4e44d8f760e3c53335416ea4aee);\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n {\n bytes14[] memory r_1 = new bytes14[](2);\n {\n bytes14 r_1_0 = bytes14(0x9f6d1ab961b9e57bc9f8c164472c);\n r_1[0] = r_1_0;\n }\n {\n bytes14 r_1_1 = bytes14(0xf424cecddc839674901cfb441d98);\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n {\n bytes14[] memory r_2 = new bytes14[](0);\n r[2] = r_2;\n }\n {\n bytes14[] memory r_3 = new bytes14[](2);\n {\n bytes14 r_3_0 = bytes14(0x64ce708d2801f4ba25508b1d6696);\n r_3[0] = r_3_0;\n }\n {\n bytes14 r_3_1 = bytes14(0x6ce38d3648ae9d067261792e653c);\n r_3[1] = r_3_1;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000004abf8849895100528c857ea0ac6420000000000000000000000000000000000005f72d5a145f2752029352e80e6520000000000000000000000000000000000005f0918e8a17c2b21c264e336e8a2000000000000000000000000000000000000b4e44d8f760e3c53335416ea4aee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029f6d1ab961b9e57bc9f8c164472c000000000000000000000000000000000000f424cecddc839674901cfb441d980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000264ce708d2801f4ba25508b1d66960000000000000000000000000000000000006ce38d3648ae9d067261792e653c000000000000000000000000000000000000" + }, + { + "name": "random-bytes18[1][3]", + "type": "bytes18[1][3]", + "value": [ + ["0x434c5127c15a8325790c7de417800741705f"], + ["0xdcc771c775a7bcee3cfb0f0b1964b673f976"], + ["0xd7e8e45be6d81369b603b9e32fe2ff10d462"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x434c5127c15a8325790c7de417800741705f" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xdcc771c775a7bcee3cfb0f0b1964b673f976" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xd7e8e45be6d81369b603b9e32fe2ff10d462" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061011a565b60405180910390f35b6100566100cf565b61005e6100cf565b6100666100fc565b71434c5127c15a8325790c7de417800741705f60701b815281526100886100fc565b716e63b8e3bad3de771e7d87858cb25b39fcbb60711b815260208201526100ad6100fc565b716bf4722df36c09b4db01dcf197f17f886a3160711b81526040820152919050565b60405180606001604052806003905b6100e66100fc565b8152602001906001900390816100de5790505090565b60405180602001604052806001906020820280368337509192915050565b6060810181836000805b600381101561017857825184835b60018110156101625782516dffffffffffffffffffffffffffff1916825260209283019290910190600101610132565b5050506020938401939290920191600101610124565b505050509291505056fea26469706673582212207497d5cd3c13fdc3e17995a6fef8437e3be608c93d1ae10598397a245e58da3a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes18[1][3] memory) {\n bytes18[1][3] memory r;\n {\n bytes18[1] memory r_0;\n {\n bytes18 r_0_0 = bytes18(0x434c5127c15a8325790c7de417800741705f);\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n bytes18[1] memory r_1;\n {\n bytes18 r_1_0 = bytes18(0xdcc771c775a7bcee3cfb0f0b1964b673f976);\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n {\n bytes18[1] memory r_2;\n {\n bytes18 r_2_0 = bytes18(0xd7e8e45be6d81369b603b9e32fe2ff10d462);\n r_2[0] = r_2_0;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x434c5127c15a8325790c7de417800741705f0000000000000000000000000000dcc771c775a7bcee3cfb0f0b1964b673f9760000000000000000000000000000d7e8e45be6d81369b603b9e32fe2ff10d4620000000000000000000000000000" + }, + { + "name": "random-bytes19[4][2]", + "type": "bytes19[4][2]", + "value": [ + [ + "0x5fa3f21ff804feef13bd1ce0d5ead9b0163f94", + "0xb9fc3285a22d333152fcbf3d003bb3cbddd303", + "0x4ce8f9e99c90d6505b84e60bad59564e07e32a", + "0x02b6d81bba9771a128ecb6f9fa560a4378ecd7" + ], + [ + "0x3a99a4e676dc7acceb07548ace0f59b8929ac1", + "0xf2b72b8070b3ce9d9233446c0001884feba479", + "0xdeb2d8d0bbfdb101d5df05d7202031687ff0c3", + "0x915a33c88b9f108425be46c7eec2ba0252be63" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x5fa3f21ff804feef13bd1ce0d5ead9b0163f94" + }, + { + "type": "hexstring", + "value": "0xb9fc3285a22d333152fcbf3d003bb3cbddd303" + }, + { + "type": "hexstring", + "value": "0x4ce8f9e99c90d6505b84e60bad59564e07e32a" + }, + { + "type": "hexstring", + "value": "0x02b6d81bba9771a128ecb6f9fa560a4378ecd7" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3a99a4e676dc7acceb07548ace0f59b8929ac1" + }, + { + "type": "hexstring", + "value": "0xf2b72b8070b3ce9d9233446c0001884feba479" + }, + { + "type": "hexstring", + "value": "0xdeb2d8d0bbfdb101d5df05d7202031687ff0c3" + }, + { + "type": "hexstring", + "value": "0x915a33c88b9f108425be46c7eec2ba0252be63" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610242806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101a1565b60405180910390f35b610056610156565b61005e610156565b610066610183565b7217e8fc87fe013fbbc4ef4738357ab66c058fe5606a1b815272b9fc3285a22d333152fcbf3d003bb3cbddd30360681b60208201527226747cf4ce486b282dc27305d6acab2703f19560691b60408201527202b6d81bba9771a128ecb6f9fa560a4378ecd760681b606082015281526100dd610183565b723a99a4e676dc7acceb07548ace0f59b8929ac160681b815272f2b72b8070b3ce9d9233446c0001884feba47960681b60208083019190915272deb2d8d0bbfdb101d5df05d7202031687ff0c360681b604083015272915a33c88b9f108425be46c7eec2ba0252be6360681b6060830152820152919050565b60405180604001604052806002905b61016d610183565b8152602001906001900390816101655790505090565b60405180608001604052806004906020820280368337509192915050565b610100810181836000805b600281101561020257825184835b60048110156101e95782516cffffffffffffffffffffffffff19168252602092830192909101906001016101ba565b50505060809390930192602092909201916001016101ac565b505050509291505056fea264697066735822122031adfc3355f9fb28d2f456e1ea19639eb22c7219de29373244a030c7cf2dcfbf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes19[4][2] memory) {\n bytes19[4][2] memory r;\n {\n bytes19[4] memory r_0;\n {\n bytes19 r_0_0 = bytes19(0x5fa3f21ff804feef13bd1ce0d5ead9b0163f94);\n r_0[0] = r_0_0;\n }\n {\n bytes19 r_0_1 = bytes19(0xb9fc3285a22d333152fcbf3d003bb3cbddd303);\n r_0[1] = r_0_1;\n }\n {\n bytes19 r_0_2 = bytes19(0x4ce8f9e99c90d6505b84e60bad59564e07e32a);\n r_0[2] = r_0_2;\n }\n {\n bytes19 r_0_3 = bytes19(0x02b6d81bba9771a128ecb6f9fa560a4378ecd7);\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n {\n bytes19[4] memory r_1;\n {\n bytes19 r_1_0 = bytes19(0x3a99a4e676dc7acceb07548ace0f59b8929ac1);\n r_1[0] = r_1_0;\n }\n {\n bytes19 r_1_1 = bytes19(0xf2b72b8070b3ce9d9233446c0001884feba479);\n r_1[1] = r_1_1;\n }\n {\n bytes19 r_1_2 = bytes19(0xdeb2d8d0bbfdb101d5df05d7202031687ff0c3);\n r_1[2] = r_1_2;\n }\n {\n bytes19 r_1_3 = bytes19(0x915a33c88b9f108425be46c7eec2ba0252be63);\n r_1[3] = r_1_3;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x5fa3f21ff804feef13bd1ce0d5ead9b0163f9400000000000000000000000000b9fc3285a22d333152fcbf3d003bb3cbddd303000000000000000000000000004ce8f9e99c90d6505b84e60bad59564e07e32a0000000000000000000000000002b6d81bba9771a128ecb6f9fa560a4378ecd7000000000000000000000000003a99a4e676dc7acceb07548ace0f59b8929ac100000000000000000000000000f2b72b8070b3ce9d9233446c0001884feba47900000000000000000000000000deb2d8d0bbfdb101d5df05d7202031687ff0c300000000000000000000000000915a33c88b9f108425be46c7eec2ba0252be6300000000000000000000000000" + }, + { + "name": "random-bytes26[1][4]", + "type": "bytes26[1][4]", + "value": [ + ["0x0d98f236094fff84fac215284310bf8a3b383f1f70559614f27a"], + ["0x64e2ae0d8c38e5191be6ce6f7517fd6639688c40ba52993542ba"], + ["0x4faaa4e14d301ca1f7c6eec15b9380426154315b75bc21130160"], + ["0x5ade5e3e77920b9b9fb23c9ba9d3b295d0cb8a463e72fcc1e410"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x0d98f236094fff84fac215284310bf8a3b383f1f70559614f27a" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x64e2ae0d8c38e5191be6ce6f7517fd6639688c40ba52993542ba" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x4faaa4e14d301ca1f7c6eec15b9380426154315b75bc21130160" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x5ade5e3e77920b9b9fb23c9ba9d3b295d0cb8a463e72fcc1e410" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610201806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061016b565b60405180910390f35b610056610120565b61005e610120565b61006661014d565b7f0d98f236094fff84fac215284310bf8a3b383f1f70559614f27a0000000000008152815261009361014d565b7f64e2ae0d8c38e5191be6ce6f7517fd6639688c40ba52993542ba000000000000815260208201526100c361014d565b7f4faaa4e14d301ca1f7c6eec15b9380426154315b75bc21130160000000000000815260408201526100f361014d565b7f5ade5e3e77920b9b9fb23c9ba9d3b295d0cb8a463e72fcc1e41000000000000081526060820152919050565b60405180608001604052806004905b61013761014d565b81526020019060019003908161012f5790505090565b60405180602001604052806001906020820280368337509192915050565b6080810181836000805b60048110156101c157825184835b60018110156101ab57825165ffffffffffff1916825260209283019290910190600101610183565b5050506020938401939290920191600101610175565b505050509291505056fea2646970667358221220dd6009a07430a4f54ba5aeb367b08bd70c3b8d28fef92031ad07e4169db7504e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes26[1][4] memory) {\n bytes26[1][4] memory r;\n {\n bytes26[1] memory r_0;\n {\n bytes26 r_0_0 = bytes26(0x0d98f236094fff84fac215284310bf8a3b383f1f70559614f27a);\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n bytes26[1] memory r_1;\n {\n bytes26 r_1_0 = bytes26(0x64e2ae0d8c38e5191be6ce6f7517fd6639688c40ba52993542ba);\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n {\n bytes26[1] memory r_2;\n {\n bytes26 r_2_0 = bytes26(0x4faaa4e14d301ca1f7c6eec15b9380426154315b75bc21130160);\n r_2[0] = r_2_0;\n }\n r[2] = r_2;\n }\n {\n bytes26[1] memory r_3;\n {\n bytes26 r_3_0 = bytes26(0x5ade5e3e77920b9b9fb23c9ba9d3b295d0cb8a463e72fcc1e410);\n r_3[0] = r_3_0;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0d98f236094fff84fac215284310bf8a3b383f1f70559614f27a00000000000064e2ae0d8c38e5191be6ce6f7517fd6639688c40ba52993542ba0000000000004faaa4e14d301ca1f7c6eec15b9380426154315b75bc211301600000000000005ade5e3e77920b9b9fb23c9ba9d3b295d0cb8a463e72fcc1e410000000000000" + }, + { + "name": "random-bytes28[1][1]", + "type": "bytes28[1][1]", + "value": [["0xc3c310d776ba107f599009a340dc8d25dbb47b6d4bb7bc2a29ca0ceb"]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc3c310d776ba107f599009a340dc8d25dbb47b6d4bb7bc2a29ca0ceb" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610172806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100db565b60405180910390f35b610056610090565b61005e610090565b6100666100bd565b7fc3c310d776ba107f599009a340dc8d25dbb47b6d4bb7bc2a29ca0ceb0000000081528152919050565b60405180602001604052806001905b6100a76100bd565b81526020019060019003908161009f5790505090565b60405180602001604052806001906020820280368337509192915050565b60208181019082846000805b60018082106100f65750610131565b835185845b8381101561011d57825163ffffffff19168252918801919088019083016100fb565b5050509385019350918401916001016100e7565b50505050509291505056fea264697066735822122025807afbdf4e2d4468130c5e98d82342956a14e38e2222e8c31ed07660cf6ab664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes28[1][1] memory) {\n bytes28[1][1] memory r;\n {\n bytes28[1] memory r_0;\n {\n bytes28 r_0_0 = bytes28(0xc3c310d776ba107f599009a340dc8d25dbb47b6d4bb7bc2a29ca0ceb);\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0xc3c310d776ba107f599009a340dc8d25dbb47b6d4bb7bc2a29ca0ceb00000000" + }, + { + "name": "random-bytes3[1][2]", + "type": "bytes3[1][2]", + "value": [["0xcd6b21"], ["0x8af7cd"]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xcd6b21" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8af7cd" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061016e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d7565b60405180910390f35b61005661008c565b61005e61008c565b6100666100b9565b62cd6b2160e81b815281526100796100b9565b628af7cd60e81b81526020820152919050565b60405180604001604052806002905b6100a36100b9565b81526020019060019003908161009b5790505090565b60405180602001604052806001906020820280368337509192915050565b6040810181836000805b600281101561012e57825184835b60018110156101185782516001600160e81b0319168252602092830192909101906001016100ef565b50505060209384019392909201916001016100e1565b505050509291505056fea26469706673582212206cb036cc7ce7222589f4ecd7253deab60c2c46818a0e726d68ff63434e60e04964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes3[1][2] memory) {\n bytes3[1][2] memory r;\n {\n bytes3[1] memory r_0;\n {\n bytes3 r_0_0 = bytes3(0xcd6b21);\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n bytes3[1] memory r_1;\n {\n bytes3 r_1_0 = bytes3(0x8af7cd);\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0xcd6b2100000000000000000000000000000000000000000000000000000000008af7cd0000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-bytes30[2][3]", + "type": "bytes30[2][3]", + "value": [ + [ + "0xf3031d7c8c3cf7122e0251eebd8e755697df0125e7aff48a906c26b3c591", + "0x4cd622326ad2855067607f3cb75b20fa8ec040efe530a28acc9923e74613" + ], + [ + "0x9205311301e22591301b9144ad8c8c3f6a33ff9cb8938bf1a9c2433fd071", + "0xc9813b60aad9dbbf03fcb58aceb4654c6686b96d82b4b63932458b3bc8e3" + ], + [ + "0x2a0409e74acfd516bb447eda432a3d353e9f71e92026fd7d9d5ab90a9380", + "0x62317f5c52a0862e4c61004797106a827b2e25a46a91b8f40eb66003b80c" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xf3031d7c8c3cf7122e0251eebd8e755697df0125e7aff48a906c26b3c591" + }, + { + "type": "hexstring", + "value": "0x4cd622326ad2855067607f3cb75b20fa8ec040efe530a28acc9923e74613" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x9205311301e22591301b9144ad8c8c3f6a33ff9cb8938bf1a9c2433fd071" + }, + { + "type": "hexstring", + "value": "0xc9813b60aad9dbbf03fcb58aceb4654c6686b96d82b4b63932458b3bc8e3" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2a0409e74acfd516bb447eda432a3d353e9f71e92026fd7d9d5ab90a9380" + }, + { + "type": "hexstring", + "value": "0x62317f5c52a0862e4c61004797106a827b2e25a46a91b8f40eb66003b80c" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610244806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101af565b60405180910390f35b610056610164565b61005e610164565b610066610191565b7ff3031d7c8c3cf7122e0251eebd8e755697df0125e7aff48a906c26b3c591000081527f4cd622326ad2855067607f3cb75b20fa8ec040efe530a28acc9923e746130000602082015281526100b9610191565b7f9205311301e22591301b9144ad8c8c3f6a33ff9cb8938bf1a9c2433fd071000081527fc9813b60aad9dbbf03fcb58aceb4654c6686b96d82b4b63932458b3bc8e30000602080830191909152820152610111610191565b7f2a0409e74acfd516bb447eda432a3d353e9f71e92026fd7d9d5ab90a9380000081527f62317f5c52a0862e4c61004797106a827b2e25a46a91b8f40eb66003b80c000060208201526040820152919050565b60405180606001604052806003905b61017b610191565b8152602001906001900390816101735790505090565b60405180604001604052806002906020820280368337509192915050565b60c0810181836000805b600381101561020457825184835b60028110156101eb57825161ffff19168252602092830192909101906001016101c7565b50505060409390930192602092909201916001016101b9565b505050509291505056fea2646970667358221220544ff88f4dc1840051166b47d264830ca2fc458f0396953b2ee6b3cad30c6ec264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes30[2][3] memory) {\n bytes30[2][3] memory r;\n {\n bytes30[2] memory r_0;\n {\n bytes30 r_0_0 = bytes30(0xf3031d7c8c3cf7122e0251eebd8e755697df0125e7aff48a906c26b3c591);\n r_0[0] = r_0_0;\n }\n {\n bytes30 r_0_1 = bytes30(0x4cd622326ad2855067607f3cb75b20fa8ec040efe530a28acc9923e74613);\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n bytes30[2] memory r_1;\n {\n bytes30 r_1_0 = bytes30(0x9205311301e22591301b9144ad8c8c3f6a33ff9cb8938bf1a9c2433fd071);\n r_1[0] = r_1_0;\n }\n {\n bytes30 r_1_1 = bytes30(0xc9813b60aad9dbbf03fcb58aceb4654c6686b96d82b4b63932458b3bc8e3);\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n {\n bytes30[2] memory r_2;\n {\n bytes30 r_2_0 = bytes30(0x2a0409e74acfd516bb447eda432a3d353e9f71e92026fd7d9d5ab90a9380);\n r_2[0] = r_2_0;\n }\n {\n bytes30 r_2_1 = bytes30(0x62317f5c52a0862e4c61004797106a827b2e25a46a91b8f40eb66003b80c);\n r_2[1] = r_2_1;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xf3031d7c8c3cf7122e0251eebd8e755697df0125e7aff48a906c26b3c59100004cd622326ad2855067607f3cb75b20fa8ec040efe530a28acc9923e7461300009205311301e22591301b9144ad8c8c3f6a33ff9cb8938bf1a9c2433fd0710000c9813b60aad9dbbf03fcb58aceb4654c6686b96d82b4b63932458b3bc8e300002a0409e74acfd516bb447eda432a3d353e9f71e92026fd7d9d5ab90a9380000062317f5c52a0862e4c61004797106a827b2e25a46a91b8f40eb66003b80c0000" + }, + { + "name": "random-bytes4[4][]", + "type": "bytes4[4][]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610152806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100a8565b60405180910390f35b604080516000808252602082019092526060919081610083565b61007061008a565b8152602001906001900390816100685790505b5092915050565b60405180608001604052806004906020820280368337509192915050565b602080825282518282018190526000919084820190604085019084805b8281101561010f57845184835b60048110156100f95782516001600160e01b031916825291880191908801906001016100d2565b50505093850193608093909301926001016100c5565b509197965050505050505056fea264697066735822122005f92c6cd8cd69cb18686c753a29733f6b4581977564a7f40967115c5b90136564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes4[4][] memory) {\n bytes4[4][] memory r = new bytes4[4][](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-int104[][2]", + "type": "int104[][2]", + "value": [["6312439677431055620753293958615", "-1863125265444003133615067259953"], []], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "6312439677431055620753293958615" + }, + { + "type": "number", + "value": "-1863125265444003133615067259953" + } + ] + }, + { + "type": "array", + "value": [] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101f9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610135565b60405180910390f35b61005661010e565b61005e61010e565b60408051600280825260608201835260009260208301908036833701905050905060006c4fac97b815b8ed08bbafb5ddd7905080826000815181106100a5576100a56101ad565b6020026020010190600c0b9081600c0b815250505060006c178415192c59dc2eaf5702643019905080826001815181106100e1576100e16101ad565b600c9290920b60209283029190910182015291835250604080516000815280830190915290820152919050565b60405180604001604052806002905b606081526020019060019003908161011d5790505090565b6020808252600090606083018382018584805b60028110156101a057878503601f19018452825180518087529087019087870190845b8181101561018a578351600c0b8352928901929189019160010161016b565b5090965050509285019291850191600101610148565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220ad6c1499286403fab9e9118e4a70c378fdcce9f70395f5d930491c73ac2a3bd164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int104[][2] memory) {\n int104[][2] memory r;\n {\n int104[] memory r_0 = new int104[](2);\n {\n int104 r_0_0 = 6312439677431055620753293958615;\n r_0[0] = r_0_0;\n }\n {\n int104 r_0_1 = -1863125265444003133615067259953;\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n int104[] memory r_1 = new int104[](0);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000004fac97b815b8ed08bbafb5ddd7ffffffffffffffffffffffffffffffffffffffe87beae6d3a623d150a8fd9bcf0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-int136[1][1]", + "type": "int136[1][1]", + "value": [["13948834579662572067286299201345441153140"]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "13948834579662572067286299201345441153140" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061015f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100cc565b60405180910390f35b610056610081565b61005e610081565b6100666100ae565b7028fdefd214a6fcabbe0cc82d1e88eec07481528152919050565b60405180602001604052806001905b6100986100ae565b8152602001906001900390816100905790505090565b60405180602001604052806001906020820280368337509192915050565b60208181019082846000805b60018082106100e7575061011e565b835185845b8381101561010a57825160100b8252918801919088019083016100ec565b5050509385019350918401916001016100d8565b50505050509291505056fea26469706673582212204ae03fc3baa9877bb7c4d8b3e48d18be190690c68270ca8a4b80bfd5ec0c6c3664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int136[1][1] memory) {\n int136[1][1] memory r;\n {\n int136[1] memory r_0;\n {\n int136 r_0_0 = 13948834579662572067286299201345441153140;\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000028fdefd214a6fcabbe0cc82d1e88eec074" + }, + { + "name": "random-int16[][2]", + "type": "int16[][2]", + "value": [ + ["-18023", "7224", "28456", "-26543"], + ["-15499", "-14058"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-18023" + }, + { + "type": "number", + "value": "7224" + }, + { + "type": "number", + "value": "28456" + }, + { + "type": "number", + "value": "-26543" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-15499" + }, + { + "type": "number", + "value": "-14058" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102b1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101ed565b60405180910390f35b6100566101c6565b61005e6101c6565b60408051600480825260a08201909252600091602082016080803683370190505090506000614666199050808260008151811061009d5761009d610265565b600192830b60209182029290920101528251611c3892508291849181106100c6576100c6610265565b602002602001019060010b908160010b81525050506000616f28905080826002815181106100f6576100f6610265565b602002602001019060010b908160010b815250505060006167ae199050808260038151811061012757610127610265565b60019290920b60209283029190910190910152508152604080516002808252606082019092526000918160200160208202803683370190505090506000613c8a199050808260008151811061017e5761017e610265565b600192830b602091820292909201015282516136e91992508291849181106101a8576101a8610265565b60019290920b60209283029190910182015283019190915250919050565b60405180604001604052806002905b60608152602001906001900390816101d55790505090565b6020808252600090606083018382018584805b600281101561025857878503601f19018452825180518087529087019087870190845b81811015610242578351600190810b8452938a0193928a019201610223565b5090965050509285019291850191600101610200565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212202e67657790a4adb500947548001bcb1d2d930b7d7f49363cf07c2e56b27297bf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int16[][2] memory) {\n int16[][2] memory r;\n {\n int16[] memory r_0 = new int16[](4);\n {\n int16 r_0_0 = -18023;\n r_0[0] = r_0_0;\n }\n {\n int16 r_0_1 = 7224;\n r_0[1] = r_0_1;\n }\n {\n int16 r_0_2 = 28456;\n r_0[2] = r_0_2;\n }\n {\n int16 r_0_3 = -26543;\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n {\n int16[] memory r_1 = new int16[](2);\n {\n int16 r_1_0 = -15499;\n r_1[0] = r_1_0;\n }\n {\n int16 r_1_1 = -14058;\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000004ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb9990000000000000000000000000000000000000000000000000000000000001c380000000000000000000000000000000000000000000000000000000000006f28ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98510000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc375ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc916" + }, + { + "name": "random-int184[][1]", + "type": "int184[][1]", + "value": [[]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061014f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061009b565b60405180910390f35b610056610074565b61005e610074565b6040805160008152602081019091528152919050565b60405180602001604052806001905b60608152602001906001900390816100835790505090565b6020808252600090604083018382018584805b60018082106100bd575061010c565b888603601f19018552835180518088529088019088880190855b818110156100f557835160160b8352928a0192918a019184016100d7565b5090975050509386019350918501916001016100ae565b509297965050505050505056fea26469706673582212200440d2c2fdea92ef6993a54977ca005a95ff1f130e60aff909eb3596f285059964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int184[][1] memory) {\n int184[][1] memory r;\n {\n int184[] memory r_0 = new int184[](0);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-int208[4][3]", + "type": "int208[4][3]", + "value": [ + [ + "89645778189831305326454189994460637476232346368198830990511729", + "112456855655064332650827278726277751546550941141819498247086855", + "170520710873603090817584122999003828225637152763647956621158335", + "30259421376934014477569035370178607331800689302762506556044612" + ], + [ + "136016345579925436369387871521057273999307805961784131351129348", + "8205919103596605330564747763014675876767930866494164289831037", + "48869862638635824592303290028831357725104475739744046174198468", + "-189119769093724714659230870148475475818243793407835175071479154" + ], + [ + "-195455657718888049754983367396852852591939061398237566584873914", + "-4405172832263127224862702460005307568890517384694160031560499", + "-191879126345070670341374123583341721844087364254035996740126337", + "-133648747518270316672465298230164208104068721005971295512621573" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "89645778189831305326454189994460637476232346368198830990511729" + }, + { + "type": "number", + "value": "112456855655064332650827278726277751546550941141819498247086855" + }, + { + "type": "number", + "value": "170520710873603090817584122999003828225637152763647956621158335" + }, + { + "type": "number", + "value": "30259421376934014477569035370178607331800689302762506556044612" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "136016345579925436369387871521057273999307805961784131351129348" + }, + { + "type": "number", + "value": "8205919103596605330564747763014675876767930866494164289831037" + }, + { + "type": "number", + "value": "48869862638635824592303290028831357725104475739744046174198468" + }, + { + "type": "number", + "value": "-189119769093724714659230870148475475818243793407835175071479154" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-195455657718888049754983367396852852591939061398237566584873914" + }, + { + "type": "number", + "value": "-4405172832263127224862702460005307568890517384694160031560499" + }, + { + "type": "number", + "value": "-191879126345070670341374123583341721844087364254035996740126337" + }, + { + "type": "number", + "value": "-133648747518270316672465298230164208104068721005971295512621573" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102e6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610252565b60405180910390f35b610056610207565b61005e610207565b610066610234565b7937c9657b2288a3754abfc2305400d015283c0dd771f8720f4e7181527945fb692442c9b4b3f77ae3ca67382447c7be621336c0df91e3076020820152796a1d843a7acd0664ad16d83c2d4129a4ca69a96bdb093c5b67bf60408201527912d49a9c041421045c5af84c0141593035548661037041b87544606082015281526100ed610234565b7954a4a76c0dbab3c603e24a288565ec6971684713a47ea21ead04815279051b4740f1f6e2510cb69c58e97a829dde64e4c0395e3d19c07d602080830191909152791e696b14d79951b63fdab75d5a216042ec6bd521f50aad785ac460408301527975b08476ce7dfb84881a98933cd8437e4fc44074185dd1af757119606083015282015261017a610234565b7979a1e1fa92e73ac4a69393d78fca2c7821c6f2bb9c5b3b35e3b91981527902bdc8d657ee05a521624915f93771c1896d0919d4b8990d33321960208201527977681bc0ba6d35039274e498dce457edc42124dba18ac06b86801960408083019190915279532b794eeadad52c8695cc43df828b6fd1116820dd990f04f204196060830152820152919050565b60405180606001604052806003905b61021e610234565b8152602001906001900390816102165790505090565b60405180608001604052806004906020820280368337509192915050565b610180810181836000805b60038110156102a657825184835b600481101561028d57825160190b82526020928301929091019060010161026b565b505050608093909301926020929092019160010161025d565b505050509291505056fea2646970667358221220f257c2e4d6d6cb9eeb1d2f3cdaab64f794f879c929aa6c7f92d81f4e57b1b69e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int208[4][3] memory) {\n int208[4][3] memory r;\n {\n int208[4] memory r_0;\n {\n int208 r_0_0 = 89645778189831305326454189994460637476232346368198830990511729;\n r_0[0] = r_0_0;\n }\n {\n int208 r_0_1 = 112456855655064332650827278726277751546550941141819498247086855;\n r_0[1] = r_0_1;\n }\n {\n int208 r_0_2 = 170520710873603090817584122999003828225637152763647956621158335;\n r_0[2] = r_0_2;\n }\n {\n int208 r_0_3 = 30259421376934014477569035370178607331800689302762506556044612;\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n {\n int208[4] memory r_1;\n {\n int208 r_1_0 = 136016345579925436369387871521057273999307805961784131351129348;\n r_1[0] = r_1_0;\n }\n {\n int208 r_1_1 = 8205919103596605330564747763014675876767930866494164289831037;\n r_1[1] = r_1_1;\n }\n {\n int208 r_1_2 = 48869862638635824592303290028831357725104475739744046174198468;\n r_1[2] = r_1_2;\n }\n {\n int208 r_1_3 = -189119769093724714659230870148475475818243793407835175071479154;\n r_1[3] = r_1_3;\n }\n r[1] = r_1;\n }\n {\n int208[4] memory r_2;\n {\n int208 r_2_0 = -195455657718888049754983367396852852591939061398237566584873914;\n r_2[0] = r_2_0;\n }\n {\n int208 r_2_1 = -4405172832263127224862702460005307568890517384694160031560499;\n r_2[1] = r_2_1;\n }\n {\n int208 r_2_2 = -191879126345070670341374123583341721844087364254035996740126337;\n r_2[2] = r_2_2;\n }\n {\n int208 r_2_3 = -133648747518270316672465298230164208104068721005971295512621573;\n r_2[3] = r_2_3;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000037c9657b2288a3754abfc2305400d015283c0dd771f8720f4e7100000000000045fb692442c9b4b3f77ae3ca67382447c7be621336c0df91e3070000000000006a1d843a7acd0664ad16d83c2d4129a4ca69a96bdb093c5b67bf00000000000012d49a9c041421045c5af84c0141593035548661037041b8754400000000000054a4a76c0dbab3c603e24a288565ec6971684713a47ea21ead04000000000000051b4740f1f6e2510cb69c58e97a829dde64e4c0395e3d19c07d0000000000001e696b14d79951b63fdab75d5a216042ec6bd521f50aad785ac4ffffffffffff8a4f7b893182047b77e5676cc327bc81b03bbf8be7a22e508a8effffffffffff865e1e056d18c53b596c6c287035d387de390d4463a4c4ca1c46fffffffffffffd423729a811fa5ade9db6ea06c88e3e7692f6e62b4766f2cccdffffffffffff8897e43f4592cafc6d8b1b67231ba8123bdedb245e753f94797fffffffffffffacd486b115252ad3796a33bc207d74902eee97df2266f0fb0dfb" + }, + { + "name": "random-int224[][]", + "type": "int224[][]", + "value": [ + [ + "-2021071922088372645694553497502142329203132375019555858113421611389", + "9793254133698662902315416576085593519681491660660082694332402790482", + "-6324941830189574217422621231615357620295306290942984455661243469525", + "12427029182391355710338453869147901857274723675102633446826107824274" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-2021071922088372645694553497502142329203132375019555858113421611389" + }, + { + "type": "number", + "value": "9793254133698662902315416576085593519681491660660082694332402790482" + }, + { + "type": "number", + "value": "-6324941830189574217422621231615357620295306290942984455661243469525" + }, + { + "type": "number", + "value": "12427029182391355710338453869147901857274723675102633446826107824274" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102d2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101f9565b60405180910390f35b60408051600180825281830190925260609160009190816020015b606081526020019060019003908161006957505060408051600480825260a08201909252919250600091906020820160808036833701905050905060007fffffffffeccf0bdae9109a0f3bb564dd4b169b2404cf5fa7f4395d83e7306e83905080826000815181106100dd576100dd610286565b6020026020010190601b0b9081601b0b815250505060007b5cfe150267ee3f5f46829e17b32f136184cebfbaf5ed0986d91e70529050808260018151811061012757610127610286565b6020026020010190601b0b9081601b0b815250505060007fffffffffc3f0eb0931b52152aa50e49bc020ff5f665d9fc3706f7c23d13df12b9050808260028151811061017557610175610286565b6020026020010190601b0b9081601b0b815250505060007b76006f3efcca2eefcd5f2fae15215d40f62a4b0d9db4ff3732f96892905080826003815181106101bf576101bf610286565b6020026020010190601b0b9081601b0b815250505080826000815181106101e8576101e8610286565b602090810291909101015250919050565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b8381101561027857888603603f19018552825180518088529088019088880190845b81811015610262578351601b0b8352928a0192918a0191600101610243565b5090975050509386019391860191600101610221565b509398975050505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205ab79077747489d91dcde3bf91c820c87ea589cf87ed339f144535fe9df38c3364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int224[][] memory) {\n int224[][] memory r = new int224[][](1);\n {\n int224[] memory r_0 = new int224[](4);\n {\n int224 r_0_0 = -2021071922088372645694553497502142329203132375019555858113421611389;\n r_0[0] = r_0_0;\n }\n {\n int224 r_0_1 = 9793254133698662902315416576085593519681491660660082694332402790482;\n r_0[1] = r_0_1;\n }\n {\n int224 r_0_2 = -6324941830189574217422621231615357620295306290942984455661243469525;\n r_0[2] = r_0_2;\n }\n {\n int224 r_0_3 = 12427029182391355710338453869147901857274723675102633446826107824274;\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004ffffffffeccf0bdae9109a0f3bb564dd4b169b2404cf5fa7f4395d83e7306e83000000005cfe150267ee3f5f46829e17b32f136184cebfbaf5ed0986d91e7052ffffffffc3f0eb0931b52152aa50e49bc020ff5f665d9fc3706f7c23d13df12b0000000076006f3efcca2eefcd5f2fae15215d40f62a4b0d9db4ff3732f96892" + }, + { + "name": "random-int32[2][]", + "type": "int32[2][]", + "value": [ + ["1802170830", "1540451188"], + ["-1430551813", "-818428989"], + ["-1704335870", "-2037145084"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1802170830" + }, + { + "type": "number", + "value": "1540451188" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-1430551813" + }, + { + "type": "number", + "value": "-818428989" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-1704335870" + }, + { + "type": "number", + "value": "-2037145084" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610218806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610160565b60405180910390f35b6040805160038082526080820190925260609160009190816020015b610072610142565b81526020019060019003908161006a57905050905061008f610142565b636b6af1ce8152635bd16b7460208201528151819083906000906100b5576100b56101cc565b6020026020010181905250506100c9610142565b6355447d041981526330c83c3c19602082015281518190839060019081106100f3576100f36101cc565b602002602001018190525050610107610142565b63659619fd19815263796c5dfb1960208201528151819083906002908110610131576101316101cc565b602090810291909101015250919050565b60405180604001604052806002906020820280368337509192915050565b60208082528251828201819052600091906040908185019086840185805b838110156101be57825185835b60028110156101ab57825160030b8252918901919089019060010161018b565b505050938501939186019160010161017e565b509298975050505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220dca6f82ca64d4e639f2af59e92ef1948f0c601ce30c982225310f25d24b93a2164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int32[2][] memory) {\n int32[2][] memory r = new int32[2][](3);\n {\n int32[2] memory r_0;\n {\n int32 r_0_0 = 1802170830;\n r_0[0] = r_0_0;\n }\n {\n int32 r_0_1 = 1540451188;\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n int32[2] memory r_1;\n {\n int32 r_1_0 = -1430551813;\n r_1[0] = r_1_0;\n }\n {\n int32 r_1_1 = -818428989;\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n {\n int32[2] memory r_2;\n {\n int32 r_2_0 = -1704335870;\n r_2[0] = r_2_0;\n }\n {\n int32 r_2_1 = -2037145084;\n r_2[1] = r_2_1;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006b6af1ce000000000000000000000000000000000000000000000000000000005bd16b74ffffffffffffffffffffffffffffffffffffffffffffffffffffffffaabb82fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf37c3c3ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9a69e602ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8693a204" + }, + { + "name": "random-int40[1][4]", + "type": "int40[1][4]", + "value": [["-529012798257"], ["95523777601"], ["241123609125"], ["-510988807696"]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-529012798257" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "95523777601" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "241123609125" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-510988807696" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610197806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610101565b60405180910390f35b6100566100b6565b61005e6100b6565b6100666100e3565b647b2b9eb33019815281526100796100e3565b64163da92c418152602082015261008e6100e3565b643824164a25815260408201526100a36100e3565b6476f94e6e0f1981526060820152919050565b60405180608001604052806004905b6100cd6100e3565b8152602001906001900390816100c55790505090565b60405180602001604052806001906020820280368337509192915050565b6080810181836000805b600480821061011a5750610157565b835185845b6001811015610140578251840b82526020928301929091019060010161011f565b50505060209485019493909301925060010161010b565b505050509291505056fea2646970667358221220d1f6deda2bf1a925c3cbe236a0856f49c2c1eac4547ad950f1eff58890f3af4164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int40[1][4] memory) {\n int40[1][4] memory r;\n {\n int40[1] memory r_0;\n {\n int40 r_0_0 = -529012798257;\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n int40[1] memory r_1;\n {\n int40 r_1_0 = 95523777601;\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n {\n int40[1] memory r_2;\n {\n int40 r_2_0 = 241123609125;\n r_2[0] = r_2_0;\n }\n r[2] = r_2;\n }\n {\n int40[1] memory r_3;\n {\n int40 r_3_0 = -510988807696;\n r_3[0] = r_3_0;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffff84d4614ccf000000000000000000000000000000000000000000000000000000163da92c410000000000000000000000000000000000000000000000000000003824164a25ffffffffffffffffffffffffffffffffffffffffffffffffffffff8906b191f0" + }, + { + "name": "random-int72[2][2]", + "type": "int72[2][2]", + "value": [ + ["407611649518330326246", "306760877051977775583"], + ["-1591763529649730714983", "1513295958455295034492"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "407611649518330326246" + }, + { + "type": "number", + "value": "306760877051977775583" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-1591763529649730714983" + }, + { + "type": "number", + "value": "1513295958455295034492" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610197806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100fe565b60405180910390f35b6100566100b3565b61005e6100b3565b6100666100e0565b681618bf7b9e2b1a2ce681526810a1299063d669b9df6020820152815261008b6100e0565b68564a2810b11a297d6619815268520933406df226447c602080830191909152820152919050565b60405180604001604052806002905b6100ca6100e0565b8152602001906001900390816100c25790505090565b60405180604001604052806002906020820280368337509192915050565b6080810181836000805b60028082106101175750610157565b835185845b8381101561013d57825160080b82526020928301929091019060010161011c565b505050604094909401935060209290920191600101610108565b505050509291505056fea2646970667358221220281896f610f0bd48811165316c165d9164ffcc371f4bd8526772776eb4bb12ad64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (int72[2][2] memory) {\n int72[2][2] memory r;\n {\n int72[2] memory r_0;\n {\n int72 r_0_0 = 407611649518330326246;\n r_0[0] = r_0_0;\n }\n {\n int72 r_0_1 = 306760877051977775583;\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n int72[2] memory r_1;\n {\n int72 r_1_0 = -1591763529649730714983;\n r_1[0] = r_1_0;\n }\n {\n int72 r_1_1 = 1513295958455295034492;\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000001618bf7b9e2b1a2ce6000000000000000000000000000000000000000000000010a1299063d669b9dfffffffffffffffffffffffffffffffffffffffffffffffa9b5d7ef4ee5d682990000000000000000000000000000000000000000000000520933406df226447c" + }, + { + "name": "random-string[][3]", + "type": "string[][3]", + "value": [ + ["Moo é🚀ooéoo🚀é 🚀🚀M oM🚀ooéoMéMoMM🚀o🚀o Mé🚀MoééMoM o oMoéo é", "Moo é🚀"], + [ + "Moo é🚀🚀MéMMMMo MoooM 🚀 éMoé🚀ééMo🚀 éo ooo MMéé🚀éééo Moooéo", + "Moo é🚀MMoé ééé🚀 MooM 🚀oo🚀🚀ooooooooo o", + "Moo é🚀M ooMoMéoo🚀oéoMMo éo🚀 ooMo ooéM🚀 ooééo o éo🚀🚀o éé ", + "Moo é🚀🚀o🚀🚀o 🚀 oéoo éo oéo 🚀o🚀oo 🚀éoM🚀é o🚀éé🚀oM" + ], + ["Moo é🚀ooM o🚀o🚀 Moo"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooéoo🚀é 🚀🚀M oM🚀ooéoMéMoMM🚀o🚀o Mé🚀MoééMoM o oMoéo é" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀MéMMMMo MoooM 🚀 éMoé🚀ééMo🚀 éo ooo MMéé🚀éééo Moooéo" + }, + { + "type": "string", + "value": "Moo é🚀MMoé ééé🚀 MooM 🚀oo🚀🚀ooooooooo o" + }, + { + "type": "string", + "value": "Moo é🚀M ooMoMéoo🚀oéoMMo éo🚀 ooMo ooéM🚀 ooééo o éo🚀🚀o éé " + }, + { + "type": "string", + "value": "Moo é🚀🚀o🚀🚀o 🚀 oéoo éo oéo 🚀o🚀oo 🚀éoM🚀é o🚀éé🚀oM" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooM o🚀o🚀 Moo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506105a8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102f8565b60405180910390f35b6100566102d1565b61005e6102d1565b60408051600280825260608201909252600091816020015b606081526020019060019003908161007657905050905060006040518060800160405280605a815260200161046a605a9139905080826000815181106100be576100be6103be565b60200260200101819052505060006040518060400160405280600a8152602001689adede418753e13f3560b71b81525090508082600181518110610104576101046103be565b602090810291909101015250815260408051600480825260a08201909252600091816020015b606081526020019060019003908161012a57905050905060006040518060800160405280605a8152602001610410605a913990508082600081518110610172576101726103be565b60200260200101819052505060006040518060600160405280603b81526020016103d5603b9139905080826001815181106101af576101af6103be565b602002602001018190525050600060405180608001604052806056815260200161051d60569139905080826002815181106101ec576101ec6103be565b60200260200101819052505060006040518060800160405280605981526020016104c46059913990508082600381518110610229576102296103be565b60209081029190910181019190915283019190915250604080516001808252818301909252600091816020015b606081526020019060019003908161025657905050905060006040518060400160405280601c81526020017f4d6f6f20c3a9f09f9a806f6f4d206ff09f9a806ff09f9a80204d6f6f00000000815250905080826000815181106102bb576102bb6103be565b6020908102919091010152506040820152919050565b60405180606001604052806003905b60608152602001906001900390816102e05790505090565b60208082526000906080830183820185845b60038110156103b257601f1987850381018452825180518087529087019087870190600581901b8801890160005b8281101561039b57858a83030184528451805180845260005b8181101561036c578281018e01518582018f01528d01610351565b8181111561037d5760008e83870101525b50958c0195948c0194601f018716929092018b019150600101610338565b50975050509386019350509084019060010161030a565b50919695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d4d6fc3a92020c3a9c3a9c3a9f09f9a80204d6f6f4d20f09f9a806f6ff09f9a80f09f9a806f6f6f6f6f6f6f6f6f20206f4d6f6f20c3a9f09f9a80f09f9a804dc3a94d4d4d4d6f20204d6f6f6f4d2020f09f9a8020c3a94d6fc3a9f09f9a80c3a9c3a94d6ff09f9a8020c3a96f206f6f6f204d4dc3a9c3a9f09f9a80c3a9c3a9c3a96f204d6f6f6fc3a96f4d6f6f20c3a9f09f9a806f6fc3a96f6ff09f9a80c3a920f09f9a80f09f9a804d206f4df09f9a806f6fc3a96f4dc3a94d6f4d4df09f9a806ff09f9a806f204dc3a9f09f9a804d6fc3a9c3a94d6f4d206f206f4d6fc3a96f20c3a94d6f6f20c3a9f09f9a80f09f9a806ff09f9a80f09f9a806f20f09f9a80206fc3a96f6f20c3a96f206fc3a96f20f09f9a806ff09f9a806f6f202020f09f9a80c3a96f4df09f9a80c3a9206ff09f9a80c3a9c3a9f09f9a806f4d4d6f6f20c3a9f09f9a804d206f6f4d6f4dc3a96f6ff09f9a806fc3a96f4d4d6f20c3a96ff09f9a80206f6f4d6f206f6fc3a94df09f9a80206f6fc3a9c3a96f2020206f20c3a96ff09f9a80f09f9a806f20c3a9c3a920a2646970667358221220e57c93b085652377c155bf62704eb67a7376471b67fd24614cd0dd46f1039ad864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[][3] memory) {\n string[][3] memory r;\n {\n string[] memory r_0 = new string[](2);\n {\n string memory r_0_0 = unicode\"Moo é🚀ooéoo🚀é 🚀🚀M oM🚀ooéoMéMoMM🚀o🚀o Mé🚀MoééMoM o oMoéo é\";\n r_0[0] = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀\";\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n string[] memory r_1 = new string[](4);\n {\n string memory r_1_0 = unicode\"Moo é🚀🚀MéMMMMo MoooM 🚀 éMoé🚀ééMo🚀 éo ooo MMéé🚀éééo Moooéo\";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀MMoé ééé🚀 MooM 🚀oo🚀🚀ooooooooo o\";\n r_1[1] = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀M ooMoMéoo🚀oéoMMo éo🚀 ooMo ooéM🚀 ooééo o éo🚀🚀o éé \";\n r_1[2] = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀🚀o🚀🚀o 🚀 oéoo éo oéo 🚀o🚀oo 🚀éoM🚀é o🚀éé🚀oM\";\n r_1[3] = r_1_3;\n }\n r[1] = r_1;\n }\n {\n string[] memory r_2 = new string[](1);\n {\n string memory r_2_0 = unicode\"Moo é🚀ooM o🚀o🚀 Moo\";\n r_2[0] = r_2_0;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a806f6fc3a96f6ff09f9a80c3a920f09f9a80f09f9a804d206f4df09f9a806f6fc3a96f4dc3a94d6f4d4df09f9a806ff09f9a806f204dc3a9f09f9a804d6fc3a9c3a94d6f4d206f206f4d6fc3a96f20c3a9000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a80f09f9a804dc3a94d4d4d4d6f20204d6f6f6f4d2020f09f9a8020c3a94d6fc3a9f09f9a80c3a9c3a94d6ff09f9a8020c3a96f206f6f6f204d4dc3a9c3a9f09f9a80c3a9c3a9c3a96f204d6f6f6fc3a96f000000000000000000000000000000000000000000000000000000000000000000000000003b4d6f6f20c3a9f09f9a804d4d6fc3a92020c3a9c3a9c3a9f09f9a80204d6f6f4d20f09f9a806f6ff09f9a80f09f9a806f6f6f6f6f6f6f6f6f20206f000000000000000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a804d206f6f4d6f4dc3a96f6ff09f9a806fc3a96f4d4d6f20c3a96ff09f9a80206f6f4d6f206f6fc3a94df09f9a80206f6fc3a9c3a96f2020206f20c3a96ff09f9a80f09f9a806f20c3a9c3a9200000000000000000000000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a80f09f9a806ff09f9a80f09f9a806f20f09f9a80206fc3a96f6f20c3a96f206fc3a96f20f09f9a806ff09f9a806f6f202020f09f9a80c3a96f4df09f9a80c3a9206ff09f9a80c3a9c3a9f09f9a806f4d0000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a806f6f4d206ff09f9a806ff09f9a80204d6f6f00000000" + }, + { + "name": "random-string[1][1]", + "type": "string[1][1]", + "value": [["Moo é🚀 éé🚀 ééooéoo ooo oo🚀Mé🚀MMoooMéoMo🚀🚀 oM🚀🚀o🚀M🚀éééoo é🚀o"]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 éé🚀 ééooéoo ooo oo🚀Mé🚀MMoooMéoMo🚀🚀 oM🚀🚀o🚀M🚀éééoo é🚀o" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610234806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100df565b60405180910390f35b61005661008b565b61005e61008b565b6100666100b8565b60006040518060a0016040528060688152602001610197606891398252508152919050565b60405180602001604052806001905b6100a26100b8565b81526020019060019003908161009a5790505090565b60405180602001604052806001905b60608152602001906001900390816100c75790505090565b60208082526000906040830183820185845b6001808210610100575061018a565b601f198886038101855283518688810160005b858110156101735789820383528351805180845260005b81811015610145578281018e01518582018f01528d0161012a565b818111156101565760008e83870101525b50948c0194938c0193601f018616929092018b0191508501610113565b5097505050938601935050908401906001016100f1565b5091969550505050505056fe4d6f6f20c3a9f09f9a8020c3a9c3a9f09f9a8020c3a9c3a96f6fc3a96f6f206f6f6f206f6ff09f9a804dc3a9f09f9a804d4d6f6f6f4dc3a96f4d6ff09f9a80f09f9a80206f4df09f9a80f09f9a806ff09f9a804df09f9a80c3a9c3a9c3a96f6f20c3a9f09f9a806fa264697066735822122035ae7ce4a89e0cf9aa2b8ee6830d09bcedc48cd8445b07bbf01762540114e13564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[1][1] memory) {\n string[1][1] memory r;\n {\n string[1] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀 éé🚀 ééooéoo ooo oo🚀Mé🚀MMoooMéoMo🚀🚀 oM🚀🚀o🚀M🚀éééoo é🚀o\";\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000684d6f6f20c3a9f09f9a8020c3a9c3a9f09f9a8020c3a9c3a96f6fc3a96f6f206f6f6f206f6ff09f9a804dc3a9f09f9a804d4d6f6f6f4dc3a96f4d6ff09f9a80f09f9a80206f4df09f9a80f09f9a806ff09f9a804df09f9a80c3a9c3a9c3a96f6f20c3a9f09f9a806f000000000000000000000000000000000000000000000000" + }, + { + "name": "random-string[1][2]", + "type": "string[1][2]", + "value": [ + ["Moo é🚀"], + ["Moo é🚀🚀🚀🚀🚀é MMoé🚀oéoé oMo é🚀 o🚀Moéo🚀ooM🚀oMMoéo🚀 éM🚀oooo🚀oéoo🚀"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀🚀🚀é MMoé🚀oéoé oMo é🚀 o🚀Moéo🚀ooM🚀oMMoéo🚀 éM🚀oooo🚀oéoo🚀" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610267806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061010e565b60405180910390f35b6100566100ba565b61005e6100ba565b6100666100e7565b60408051808201909152600a8152689adede418753e13f3560b71b6020820152815281526100926100e7565b60006040518060a00160405280607181526020016101c1607191398252506020820152919050565b60405180604001604052806002905b6100d16100e7565b8152602001906001900390816100c95790505090565b60405180602001604052806001905b60608152602001906001900390816100f65790505090565b60208082526000906060830183820185845b60028110156101b457601f198785038101845282518587810160005b600181101561019e5788820383528351805180845260005b8181101561016f578281018d01518582018e01528c01610154565b818111156101805760008d83870101525b50948b0194938b0193601f018616929092018a01915060010161013c565b5096505050928501925090840190600101610120565b5091969550505050505056fe4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a80f09f9a80c3a9204d4d6fc3a9f09f9a806fc3a96fc3a9206f4d6f20c3a9f09f9a80206ff09f9a804d6fc3a96ff09f9a806f6f4df09f9a806f4d4d6fc3a96ff09f9a8020c3a94df09f9a806f6f6f6ff09f9a806fc3a96f6ff09f9a80a2646970667358221220f4b14140976706700433810eb254a7f758f969d8e454e6d389bf1f20660411f064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[1][2] memory) {\n string[1][2] memory r;\n {\n string[1] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀\";\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n string[1] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀🚀🚀🚀🚀é MMoé🚀oéoé oMo é🚀 o🚀Moéo🚀ooM🚀oMMoéo🚀 éM🚀oooo🚀oéoo🚀\";\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000714d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a80f09f9a80c3a9204d4d6fc3a9f09f9a806fc3a96fc3a9206f4d6f20c3a9f09f9a80206ff09f9a804d6fc3a96ff09f9a806f6f4df09f9a806f4d4d6fc3a96ff09f9a8020c3a94df09f9a806f6f6f6ff09f9a806fc3a96f6ff09f9a80000000000000000000000000000000" + }, + { + "name": "random-string[1][3]", + "type": "string[1][3]", + "value": [ + ["Moo é🚀MéoMoéoo oé MM o éoo🚀éooé 🚀o🚀 Mé🚀oM oo 🚀o🚀M "], + ["Moo é🚀o🚀ééé🚀 🚀oo🚀🚀M éo🚀🚀MoM🚀éé🚀ooM🚀"], + ["Moo é🚀é o🚀oo 🚀o éo🚀éo🚀Moé éM oooo🚀Moéoé🚀MéoM🚀 Moéoo o Mo🚀"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MéoMoéoo oé MM o éoo🚀éooé 🚀o🚀 Mé🚀oM oo 🚀o🚀M " + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀ééé🚀 🚀oo🚀🚀M éo🚀🚀MoM🚀éé🚀ooM🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é o🚀oo 🚀o éo🚀éo🚀Moé éM oooo🚀Moéoé🚀MéoM🚀 Moéoo o Mo🚀" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610317806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610135565b60405180910390f35b6100566100e1565b61005e6100e1565b61006661010e565b60006040518060800160405280604f8152602001610233604f9139825250815261008e61010e565b60006040518060800160405280604b81526020016101e8604b913982525060208201526100b961010e565b6000604051806080016040528060608152602001610282606091398252506040820152919050565b60405180606001604052806003905b6100f861010e565b8152602001906001900390816100f05790505090565b60405180602001604052806001905b606081526020019060019003908161011d5790505090565b60208082526000906080830183820185845b60038110156101db57601f198785038101845282518587810160005b60018110156101c55788820383528351805180845260005b81811015610196578281018d01518582018e01528c0161017b565b818111156101a75760008d83870101525b50948b0194938b0193601f018616929092018a019150600101610163565b5096505050928501925090840190600101610147565b5091969550505050505056fe4d6f6f20c3a9f09f9a806ff09f9a80c3a9c3a9c3a9f09f9a8020f09f9a806f6ff09f9a80f09f9a804d20c3a96ff09f9a80f09f9a804d6f4df09f9a80c3a9c3a9f09f9a806f6f4df09f9a804d6f6f20c3a9f09f9a804dc3a96f4d6fc3a96f6f206fc3a9204d4d206f20c3a96f6ff09f9a80c3a96f6fc3a920f09f9a806ff09f9a80204dc3a9f09f9a806f4d206f6f20f09f9a806ff09f9a804d204d6f6f20c3a9f09f9a80c3a9206ff09f9a806f6f20f09f9a806f20c3a96ff09f9a80c3a96ff09f9a804d6fc3a92020c3a94d206f6f6f6ff09f9a804d6fc3a96fc3a9f09f9a804dc3a96f4df09f9a80204d6fc3a96f6f20206f204d6ff09f9a80a264697066735822122097087d96df126723232b8073d1dc4266a7b64a82b12e590372618b6fe4fa92dd64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[1][3] memory) {\n string[1][3] memory r;\n {\n string[1] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀MéoMoéoo oé MM o éoo🚀éooé 🚀o🚀 Mé🚀oM oo 🚀o🚀M \";\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n string[1] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀o🚀ééé🚀 🚀oo🚀🚀M éo🚀🚀MoM🚀éé🚀ooM🚀\";\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n {\n string[1] memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀é o🚀oo 🚀o éo🚀éo🚀Moé éM oooo🚀Moéoé🚀MéoM🚀 Moéoo o Mo🚀\";\n r_2[0] = r_2_0;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a804dc3a96f4d6fc3a96f6f206fc3a9204d4d206f20c3a96f6ff09f9a80c3a96f6fc3a920f09f9a806ff09f9a80204dc3a9f09f9a806f4d206f6f20f09f9a806ff09f9a804d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a806ff09f9a80c3a9c3a9c3a9f09f9a8020f09f9a806f6ff09f9a80f09f9a804d20c3a96ff09f9a80f09f9a804d6f4df09f9a80c3a9c3a9f09f9a806f6f4df09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a80c3a9206ff09f9a806f6f20f09f9a806f20c3a96ff09f9a80c3a96ff09f9a804d6fc3a92020c3a94d206f6f6f6ff09f9a804d6fc3a96fc3a9f09f9a804dc3a96f4df09f9a80204d6fc3a96f6f20206f204d6ff09f9a80" + }, + { + "name": "random-string[1][4]", + "type": "string[1][4]", + "value": [ + ["Moo é🚀éoo oééé🚀MMo ooéo🚀 oM é🚀🚀MoMéoéMoo Moo o éo ééo oé🚀M "], + ["Moo é🚀oo🚀 Mo Mé o🚀M 🚀🚀 éééo M🚀M M 🚀MoéoéoM🚀 é🚀🚀 é M 🚀éo"], + ["Moo é🚀"], + ["Moo é🚀 oéM 🚀MooéééoMooo M Mé oooM oo"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoo oééé🚀MMo ooéo🚀 oM é🚀🚀MoMéoéMoo Moo o éo ééo oé🚀M " + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀 Mo Mé o🚀M 🚀🚀 éééo M🚀M M 🚀MoéoéoM🚀 é🚀🚀 é M 🚀éo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oéM 🚀MooéééoMooo M Mé oooM oo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061033b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610161565b60405180910390f35b61005661010d565b61005e61010d565b61006661013a565b60006040518060800160405280605d81526020016102a9605d9139825250815261008e61013a565b60006040518060a00160405280606481526020016102456064913982525060208201526100b961013a565b604080518082018252600a8152689adede418753e13f3560b71b602082015282528201526100e561013a565b6000604051806060016040528060318152602001610214603191398252506060820152919050565b60405180608001604052806004905b61012461013a565b81526020019060019003908161011c5790505090565b60405180602001604052806001905b60608152602001906001900390816101495790505090565b602080825260009060a0830183820185845b600481101561020757601f198785038101845282518587810160005b60018110156101f15788820383528351805180845260005b818110156101c2578281018d01518582018e01528c016101a7565b818111156101d35760008d83870101525b50948b0194938b0193601f018616929092018a01915060010161018f565b5096505050928501925090840190600101610173565b5091969550505050505056fe4d6f6f20c3a9f09f9a80206fc3a94d20f09f9a804d6f6fc3a9c3a9c3a96f4d6f6f6f204d204dc3a9206f6f6f4d20206f6f4d6f6f20c3a9f09f9a806f6ff09f9a80204d6f204dc3a9206ff09f9a804d20f09f9a80f09f9a8020c3a9c3a9c3a96f204df09f9a804d204d2020f09f9a804d6fc3a96fc3a96f4df09f9a8020c3a9f09f9a80f09f9a8020c3a920204d20f09f9a80c3a96f4d6f6f20c3a9f09f9a80c3a96f6f206fc3a9c3a9c3a9f09f9a804d4d6f206f6fc3a96ff09f9a80206f4d20c3a9f09f9a80f09f9a804d6f4dc3a96fc3a94d6f6f204d6f6f206f20c3a96f20202020c3a9c3a96f206fc3a9f09f9a804d20a2646970667358221220a16cff9cfebcf99f442ae4bbd45e01b1df26210ee3a0b8b3f451fb867e20ff1564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[1][4] memory) {\n string[1][4] memory r;\n {\n string[1] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀éoo oééé🚀MMo ooéo🚀 oM é🚀🚀MoMéoéMoo Moo o éo ééo oé🚀M \";\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n string[1] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀oo🚀 Mo Mé o🚀M 🚀🚀 éééo M🚀M M 🚀MoéoéoM🚀 é🚀🚀 é M 🚀éo\";\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n {\n string[1] memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀\";\n r_2[0] = r_2_0;\n }\n r[2] = r_2;\n }\n {\n string[1] memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀 oéM 🚀MooéééoMooo M Mé oooM oo\";\n r_3[0] = r_3_0;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a80c3a96f6f206fc3a9c3a9c3a9f09f9a804d4d6f206f6fc3a96ff09f9a80206f4d20c3a9f09f9a80f09f9a804d6f4dc3a96fc3a94d6f6f204d6f6f206f20c3a96f20202020c3a9c3a96f206fc3a9f09f9a804d20000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000644d6f6f20c3a9f09f9a806f6ff09f9a80204d6f204dc3a9206ff09f9a804d20f09f9a80f09f9a8020c3a9c3a9c3a96f204df09f9a804d204d2020f09f9a804d6fc3a96fc3a96f4df09f9a8020c3a9f09f9a80f09f9a8020c3a920204d20f09f9a80c3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a80206fc3a94d20f09f9a804d6f6fc3a9c3a9c3a96f4d6f6f6f204d204dc3a9206f6f6f4d20206f6f000000000000000000000000000000" + }, + { + "name": "random-string[2][]", + "type": "string[2][]", + "value": [["Moo é🚀oéo ooooMM o🚀oo🚀 ooM🚀éM", "Moo é🚀éMoo🚀 é"]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéo ooooMM o🚀oo🚀 ooM🚀éM" + }, + { + "type": "string", + "value": "Moo é🚀éMoo🚀 é" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061026d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061012d565b60405180910390f35b60408051600180825281830190925260609160009190816020015b610071610106565b81526020019060019003908161006957905050905061008e610106565b60006040518060600160405280602c815260200161020c602c91398252506040805180820190915260168152754d6f6f20c3a9f09f9a80c3a94d6f6ff09f9a8020c3a960501b6020808301919091528201528151819083906000906100f5576100f56101f5565b602090810291909101015250919050565b60405180604001604052806002905b60608152602001906001900390816101155790505090565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156101e757888303603f1901855281518387810160005b60028110156101d25786820383528351805180845260005b818110156101a1578281018e01518582018f01528d01610186565b818111156101b25760008e83870101525b50948c0194938c0193601f01601f1916929092018b01915060010161016e565b50968901969450505090860190600101610154565b509098975050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806fc3a96f206f6f6f6f4d4d206ff09f9a806f6ff09f9a80206f6f4df09f9a80c3a94da2646970667358221220c745d927e4ef90f08518715484c79bffc0ba880815c1b6446d6b01f907deb3be64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[2][] memory) {\n string[2][] memory r = new string[2][](1);\n {\n string[2] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀oéo ooooMM o🚀oo🚀 ooM🚀éM\";\n r_0[0] = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀éMoo🚀 é\";\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002c4d6f6f20c3a9f09f9a806fc3a96f206f6f6f6f4d4d206ff09f9a806f6ff09f9a80206f6f4df09f9a80c3a94d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a80c3a94d6f6ff09f9a8020c3a900000000000000000000" + }, + { + "name": "random-string[2][3]", + "type": "string[2][3]", + "value": [ + ["Moo é🚀🚀o o oo🚀Mooooé é🚀éo o🚀M🚀o ooMéoM 🚀", "Moo é🚀M🚀o ooooéé🚀o"], + ["Moo é🚀", "Moo é🚀"], + ["Moo é🚀MMéoé 🚀oéé o🚀o 🚀M oo ", "Moo é🚀🚀 éoooooo o Mo🚀🚀o🚀🚀ooooo"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀o o oo🚀Mooooé é🚀éo o🚀M🚀o ooMéoM 🚀" + }, + { + "type": "string", + "value": "Moo é🚀M🚀o ooooéé🚀o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MMéoé 🚀oéé o🚀o 🚀M oo " + }, + { + "type": "string", + "value": "Moo é🚀🚀 éoooooo o Mo🚀🚀o🚀🚀ooooo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610338806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101ae565b60405180910390f35b61005661015a565b61005e61015a565b610066610187565b60006040518060800160405280604281526020016102c16042913982525060408051808201909152601e81527f4d6f6f20c3a9f09f9a804df09f9a806f206f6f6f6fc3a9c3a9f09f9a806f000060208083019190915282015281526100c9610187565b604080518082018252600a808252689adede418753e13f3560b71b602080840182905292855283518085019094529083528282015282810191909152820152610110610187565b60006040518060600160405280602d8152602001610262602d9139825250604080516060810190915260328082526000919061028f60208301396020830152506040820152919050565b60405180606001604052806003905b610171610187565b8152602001906001900390816101695790505090565b60405180604001604052806002905b60608152602001906001900390816101965790505090565b60208082526000906080830183820185845b600381101561025557601f19878503810184528251856040810160005b600281101561023f5788820383528351805180845260005b81811015610210578281018d01518582018e01528c016101f5565b818111156102215760008d83870101525b50948b0194938b0193601f018616929092018a0191506001016101dd565b50965050509285019250908401906001016101c0565b5091969550505050505056fe4d6f6f20c3a9f09f9a804d4dc3a96fc3a920f09f9a806fc3a9c3a9206ff09f9a806f20f09f9a804d206f6f20204d6f6f20c3a9f09f9a80f09f9a8020c3a96f6f6f6f6f6f206f204d6ff09f9a80f09f9a806ff09f9a80f09f9a806f6f6f6f6f4d6f6f20c3a9f09f9a80f09f9a806f206f206f6ff09f9a804d6f6f6f6fc3a920c3a9f09f9a80c3a96f206ff09f9a804df09f9a806f206f6f4dc3a96f4d20f09f9a80a26469706673582212206a47b6731d1383e56f041cfdff529001dd87488b861111703fe6fc9608eba61964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[2][3] memory) {\n string[2][3] memory r;\n {\n string[2] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀🚀o o oo🚀Mooooé é🚀éo o🚀M🚀o ooMéoM 🚀\";\n r_0[0] = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀M🚀o ooooéé🚀o\";\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n string[2] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀\";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀\";\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n {\n string[2] memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀MMéoé 🚀oéé o🚀o 🚀M oo \";\n r_2[0] = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀🚀 éoooooo o Mo🚀🚀o🚀🚀ooooo\";\n r_2[1] = r_2_1;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a80f09f9a806f206f206f6ff09f9a804d6f6f6f6fc3a920c3a9f09f9a80c3a96f206ff09f9a804df09f9a806f206f6f4dc3a96f4d20f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a804df09f9a806f206f6f6f6fc3a9c3a9f09f9a806f000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a804d4dc3a96fc3a920f09f9a806fc3a9c3a9206ff09f9a806f20f09f9a804d206f6f20200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a80f09f9a8020c3a96f6f6f6f6f6f206f204d6ff09f9a80f09f9a806ff09f9a80f09f9a806f6f6f6f6f0000000000000000000000000000" + }, + { + "name": "random-string[3][]", + "type": "string[3][]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101af806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100b1565b60405180910390f35b604080516000808252602082019092526060919081610083565b61007061008a565b8152602001906001900390816100685790505b5092915050565b60405180606001604052806003905b60608152602001906001900390816100995790505090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561016c57878503603f190184528151856060810160005b60038110156101575788820383528351805180845260005b81811015610126578281018d01518582018e01528c0161010b565b818111156101375760008d83870101525b50948b0194938b0193601f01601f1916929092018a0191506001016100f3565b509650505092850192908501906001016100d8565b509297965050505050505056fea26469706673582212202990c55b0454b2fd8c3dbbb2c53864292fb42554ad4845ec1e100d6d84ac4da164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[3][] memory) {\n string[3][] memory r = new string[3][](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-string[3][1]", + "type": "string[3][1]", + "value": [ + [ + "Moo é🚀M oMM🚀 🚀🚀oéoMMMé 🚀o MMM Mé 🚀🚀oooMéoooo o🚀oéoo éM", + "Moo é🚀", + "Moo é🚀o🚀 o oé é🚀é🚀 é🚀🚀🚀o éoMMoMM oM🚀éooéé🚀oo" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀M oMM🚀 🚀🚀oéoMMMé 🚀o MMM Mé 🚀🚀oooMéoooo o🚀oéoo éM" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀o🚀 o oé é🚀é🚀 é🚀🚀🚀o éoMMoMM oM🚀éooéé🚀oo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102c2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061012d565b60405180910390f35b6100566100d9565b61005e6100d9565b610066610106565b60006040518060800160405280605581526020016101e76055913982525060408051808201909152600a8152689adede418753e13f3560b71b602082015280826001602002018190525050600060405180608001604052806051815260200161023c605191396040830152508152919050565b60405180602001604052806001905b6100f0610106565b8152602001906001900390816100e85790505090565b60405180606001604052806003905b60608152602001906001900390816101155790505090565b60208082526000906040830183820185845b600180821061014e57506101da565b601f19888603810185528351866060810160005b60038110156101c35789820383528351805180845260005b81811015610195578281018e01518582018f01528d0161017a565b818111156101a65760008e83870101525b50948c0194938c0193601f018616929092018b0191508501610162565b50975050509386019350509084019060010161013f565b5091969550505050505056fe4d6f6f20c3a9f09f9a804d206f4d4df09f9a8020f09f9a80f09f9a806fc3a96f4d4d4dc3a920f09f9a806f204d4d4d204dc3a920f09f9a80f09f9a806f6f6f4dc3a96f6f6f6f206ff09f9a806fc3a96f6f20c3a94d4d6f6f20c3a9f09f9a806ff09f9a80206f206fc3a92020c3a9f09f9a80c3a9f09f9a8020c3a9f09f9a80f09f9a80f09f9a806f20c3a96f4d4d6f4d4d206f4df09f9a80c3a96f6fc3a9c3a9f09f9a806f6fa2646970667358221220d0afc62b8a5a6d02aa7240f7fd6524ad6902477b445f815fb656d707c310e75064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[3][1] memory) {\n string[3][1] memory r;\n {\n string[3] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀M oMM🚀 🚀🚀oéoMMMé 🚀o MMM Mé 🚀🚀oooMéoooo o🚀oéoo éM\";\n r_0[0] = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀\";\n r_0[1] = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀o🚀 o oé é🚀é🚀 é🚀🚀🚀o éoMMoMM oM🚀éooéé🚀oo\";\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a804d206f4d4df09f9a8020f09f9a80f09f9a806fc3a96f4d4d4dc3a920f09f9a806f204d4d4d204dc3a920f09f9a80f09f9a806f6f6f4dc3a96f6f6f6f206ff09f9a806fc3a96f6f20c3a94d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a806ff09f9a80206f206fc3a92020c3a9f09f9a80c3a9f09f9a8020c3a9f09f9a80f09f9a80f09f9a806f20c3a96f4d4d6f4d4d206f4df09f9a80c3a96f6fc3a9c3a9f09f9a806f6f000000000000000000000000000000" + }, + { + "name": "random-string[3][3]", + "type": "string[3][3]", + "value": [ + [ + "Moo é🚀o🚀ooo 🚀éoé🚀 M🚀ééo oM🚀ooo é🚀🚀oééo", + "Moo é🚀ooéMo🚀o 🚀é o 🚀oééé🚀oéooo é", + "Moo é🚀oé oé " + ], + [ + "Moo é🚀o oééMM🚀oMéMoMMé🚀ooéMéooo🚀éMéoM éooM Mo Moo🚀 🚀", + "Moo é🚀oooMooo 🚀oé🚀MooM 🚀 ", + "Moo é🚀" + ], + [ + "Moo é🚀oo oé🚀 oMo oooo ééo éo", + "Moo é🚀ooéo🚀 M éoéoMMMooéé M🚀🚀Mo🚀é oooééo🚀oo🚀🚀oo🚀M ééé🚀o🚀oMoéM", + "Moo é🚀 oMoo🚀🚀éo ooo M" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀ooo 🚀éoé🚀 M🚀ééo oM🚀ooo é🚀🚀oééo" + }, + { + "type": "string", + "value": "Moo é🚀ooéMo🚀o 🚀é o 🚀oééé🚀oéooo é" + }, + { + "type": "string", + "value": "Moo é🚀oé oé " + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o oééMM🚀oMéMoMMé🚀ooéMéooo🚀éMéoM éooM Mo Moo🚀 🚀" + }, + { + "type": "string", + "value": "Moo é🚀oooMooo 🚀oé🚀MooM 🚀 " + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo oé🚀 oMo oooo ééo éo" + }, + { + "type": "string", + "value": "Moo é🚀ooéo🚀 M éoéoMMMooéé M🚀🚀Mo🚀é oooééo🚀oo🚀🚀oo🚀M ééé🚀o🚀oMoéM" + }, + { + "type": "string", + "value": "Moo é🚀 oMoo🚀🚀éo ooo M" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104ab806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610234565b60405180910390f35b6100566101e0565b61005e6101e0565b61006661020d565b60006040518060800160405280604681526020016104306046913982525060408051606081019091526037808252600091906102ee60208301396020838101919091526040805180820182526013815272026b7b79061d4f84fcd4037e1d4901037e1d49606d1b928101929092528301525081526100e261020d565b60006040518060800160405280605181526020016103df6051913982525060408051606081019091526027808252600091906103b86020830139602083810191909152604080518082018252600a8152689adede418753e13f3560b71b81840152908401528301919091525061015661020d565b6000604051806060016040528060278152602001610325602791398252506040805160a08101909152606c8082526000919061034c60208301396020838101919091526040805180820182528281527f4d6f6f20c3a9f09f9a80206f4d6f6ff09f9a80f09f9a80c3a96f206f6f6f204d928101929092528084019190915283019190915250919050565b60405180606001604052806003905b6101f761020d565b8152602001906001900390816101ef5790505090565b60405180606001604052806003905b606081526020019060019003908161021c5790505090565b60208082526000906080830183820185845b600380821061025557506102e1565b601f19888603810185528351866060810160005b858110156102ca5789820383528351805180845260005b8181101561029b578281018e01518582018f01528d01610280565b818111156102ac5760008e83870101525b50948c0194938c0193601f018616929092018b019150600101610269565b509750505093860193505090840190600101610246565b5091969550505050505056fe4d6f6f20c3a9f09f9a806f6fc3a94d6ff09f9a806f20f09f9a80c3a9206f20f09f9a806fc3a9c3a9c3a9f09f9a806fc3a96f6f6f20c3a94d6f6f20c3a9f09f9a806f6f206fc3a9f09f9a80206f4d6f206f6f6f6f20c3a9c3a96f20c3a96f4d6f6f20c3a9f09f9a806f6fc3a96ff09f9a80204d20c3a96fc3a96f4d4d4d6f6fc3a9c3a9204df09f9a80f09f9a804d6ff09f9a80c3a9206f6f6fc3a9c3a96ff09f9a806f6ff09f9a80f09f9a806f6ff09f9a804d2020c3a9c3a9c3a9f09f9a806ff09f9a806f4d6fc3a94d4d6f6f20c3a9f09f9a806f6f6f4d6f6f6f20f09f9a806fc3a9f09f9a804d6f6f4d20f09f9a80204d6f6f20c3a9f09f9a806f20206fc3a9c3a94d4df09f9a806f4dc3a94d6f4d4dc3a9f09f9a806f6fc3a94dc3a96f6f6ff09f9a80c3a94dc3a96f4d20c3a96f6f4d204d6f204d6f6ff09f9a8020f09f9a804d6f6f20c3a9f09f9a806ff09f9a806f6f6f20f09f9a80c3a96fc3a9f09f9a80204df09f9a80c3a9c3a96f206f4df09f9a806f6f6f20c3a9f09f9a80f09f9a806fc3a9c3a96fa264697066735822122065e8b4940d495d3481c1cca7476ef5d21158f7a20c83df49762a715e3ac1ad7664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[3][3] memory) {\n string[3][3] memory r;\n {\n string[3] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀o🚀ooo 🚀éoé🚀 M🚀ééo oM🚀ooo é🚀🚀oééo\";\n r_0[0] = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀ooéMo🚀o 🚀é o 🚀oééé🚀oéooo é\";\n r_0[1] = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀oé oé \";\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n {\n string[3] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀o oééMM🚀oMéMoMMé🚀ooéMéooo🚀éMéoM éooM Mo Moo🚀 🚀\";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀oooMooo 🚀oé🚀MooM 🚀 \";\n r_1[1] = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀\";\n r_1[2] = r_1_2;\n }\n r[1] = r_1;\n }\n {\n string[3] memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀oo oé🚀 oMo oooo ééo éo\";\n r_2[0] = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀ooéo🚀 M éoéoMMMooéé M🚀🚀Mo🚀é oooééo🚀oo🚀🚀oo🚀M ééé🚀o🚀oMoéM\";\n r_2[1] = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀 oMoo🚀🚀éo ooo M\";\n r_2[2] = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a806ff09f9a806f6f6f20f09f9a80c3a96fc3a9f09f9a80204df09f9a80c3a9c3a96f206f4df09f9a806f6f6f20c3a9f09f9a80f09f9a806fc3a9c3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a806f6fc3a94d6ff09f9a806f20f09f9a80c3a9206f20f09f9a806fc3a9c3a9c3a9f09f9a806fc3a96f6f6f20c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a806fc3a920206fc3a92000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a806f20206fc3a9c3a94d4df09f9a806f4dc3a94d6f4d4dc3a9f09f9a806f6fc3a94dc3a96f6f6ff09f9a80c3a94dc3a96f4d20c3a96f6f4d204d6f204d6f6ff09f9a8020f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a806f6f6f4d6f6f6f20f09f9a806fc3a9f09f9a804d6f6f4d20f09f9a802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a806f6f206fc3a9f09f9a80206f4d6f206f6f6f6f20c3a9c3a96f20c3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c4d6f6f20c3a9f09f9a806f6fc3a96ff09f9a80204d20c3a96fc3a96f4d4d4d6f6fc3a9c3a9204df09f9a80f09f9a804d6ff09f9a80c3a9206f6f6fc3a9c3a96ff09f9a806f6ff09f9a80f09f9a806f6ff09f9a804d2020c3a9c3a9c3a9f09f9a806ff09f9a806f4d6fc3a94d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000204d6f6f20c3a9f09f9a80206f4d6f6ff09f9a80f09f9a80c3a96f206f6f6f204d" + }, + { + "name": "random-string[4][1]", + "type": "string[4][1]", + "value": [ + [ + "Moo é🚀 o🚀 🚀oé🚀M🚀oooé Mo 🚀o oo M éoooé", + "Moo é🚀ooooooééoMooMéM🚀🚀 éoo Mé🚀éMoo🚀M🚀🚀o🚀Méo", + "Moo é🚀o🚀🚀 o 🚀o🚀ooMooM🚀🚀oééé🚀 o ééM🚀", + "Moo é🚀oo🚀🚀Moéo🚀" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 o🚀 🚀oé🚀M🚀oooé Mo 🚀o oo M éoooé" + }, + { + "type": "string", + "value": "Moo é🚀ooooooééoMooMéM🚀🚀 éoo Mé🚀éMoo🚀M🚀🚀o🚀Méo" + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀 o 🚀o🚀ooMooM🚀🚀oééé🚀 o ééM🚀" + }, + { + "type": "string", + "value": "Moo é🚀oo🚀🚀Moéo🚀" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610322806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610166565b60405180910390f35b610056610112565b61005e610112565b61006661013f565b60006040518060600160405280603c81526020016102b1603c91398252506040805160808101909152604c8082526000919061026560208301399050808260016020020181905250506000604051806080016040528060458152602001610220604591396040838101919091528051808201909152601d81527f4d6f6f20c3a9f09f9a806f6ff09f9a80f09f9a804d6fc3a96ff09f9a8000000060208201526060830152508152919050565b60405180602001604052806001905b61012961013f565b8152602001906001900390816101215790505090565b60405180608001604052806004905b606081526020019060019003908161014e5790505090565b60208082526000906040830183820185845b60018082106101875750610213565b601f19888603810185528351866080810160005b60048110156101fc5789820383528351805180845260005b818110156101ce578281018e01518582018f01528d016101b3565b818111156101df5760008e83870101525b50948c0194938c0193601f018616929092018b019150850161019b565b509750505093860193505090840190600101610178565b5091969550505050505056fe4d6f6f20c3a9f09f9a806ff09f9a80f09f9a8020206f20f09f9a806ff09f9a806f6f4d6f6f4df09f9a80f09f9a806fc3a9c3a9c3a9f09f9a80206f20c3a9c3a94df09f9a804d6f6f20c3a9f09f9a806f6f6f6f6f6fc3a9c3a96f4d6f6f4dc3a94df09f9a80f09f9a8020c3a96f6f204dc3a9f09f9a80c3a94d6f6ff09f9a804df09f9a80f09f9a806ff09f9a804dc3a96f4d6f6f20c3a9f09f9a80206ff09f9a8020f09f9a806fc3a9f09f9a804df09f9a806f6f6fc3a9204d6f20f09f9a806f206f6f204d20c3a96f6f6fc3a9a2646970667358221220e849c9742e9e53fc2470459125d7a76534e8acbd990317e6b761a688413b1d9f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[4][1] memory) {\n string[4][1] memory r;\n {\n string[4] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀 o🚀 🚀oé🚀M🚀oooé Mo 🚀o oo M éoooé\";\n r_0[0] = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀ooooooééoMooMéM🚀🚀 éoo Mé🚀éMoo🚀M🚀🚀o🚀Méo\";\n r_0[1] = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀o🚀🚀 o 🚀o🚀ooMooM🚀🚀oééé🚀 o ééM🚀\";\n r_0[2] = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀oo🚀🚀Moéo🚀\";\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a80206ff09f9a8020f09f9a806fc3a9f09f9a804df09f9a806f6f6fc3a9204d6f20f09f9a806f206f6f204d20c3a96f6f6fc3a900000000000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a806f6f6f6f6f6fc3a9c3a96f4d6f6f4dc3a94df09f9a80f09f9a8020c3a96f6f204dc3a9f09f9a80c3a94d6f6ff09f9a804df09f9a80f09f9a806ff09f9a804dc3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a806ff09f9a80f09f9a8020206f20f09f9a806ff09f9a806f6f4d6f6f4df09f9a80f09f9a806fc3a9c3a9c3a9f09f9a80206f20c3a9c3a94df09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a806f6ff09f9a80f09f9a804d6fc3a96ff09f9a80000000" + }, + { + "name": "random-uint[3][1]", + "type": "uint[3][1]", + "value": [ + [ + "40798607819321612597785029106880900573382461284920520503481689025581630761060", + "65228396324704908783622570033989090741607829272185385760219019355724449719779", + "26247818038887731535716684597345320081431200659065462250501004684156921748879" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "40798607819321612597785029106880900573382461284920520503481689025581630761060" + }, + { + "type": "number", + "value": "65228396324704908783622570033989090741607829272185385760219019355724449719779" + }, + { + "type": "number", + "value": "26247818038887731535716684597345320081431200659065462250501004684156921748879" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101bd806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610127565b60405180910390f35b6100566100dc565b61005e6100dc565b610066610109565b7f5a333196a10dc7603a7b6d86aa392b5019203fcf0ebcdd71517925456186286481527f9035f6c87881433e887bc25934819ab2d679249e6f767f3cffbd3823aebe25e360208201527f3a07bd111ea2726d4c4b6e4c4abb6e8bd30dd812b465a46831dca59b7a589d8f60408201528152919050565b60405180602001604052806001905b6100f3610109565b8152602001906001900390816100eb5790505090565b60405180606001604052806003906020820280368337509192915050565b60608181019082846000805b6001808210610142575061017c565b835185845b60038110156101655782518252602092830192909101908301610147565b505050938501935060209290920191600101610133565b50505050509291505056fea264697066735822122014b841c1b802ad0e8aabfd1a0ef1f94b2f28e98936c6985bdc1c5c8680dae34b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint256[3][1] memory) {\n uint256[3][1] memory r;\n {\n uint256[3] memory r_0;\n {\n uint r_0_0 = 40798607819321612597785029106880900573382461284920520503481689025581630761060;\n r_0[0] = r_0_0;\n }\n {\n uint r_0_1 = 65228396324704908783622570033989090741607829272185385760219019355724449719779;\n r_0[1] = r_0_1;\n }\n {\n uint r_0_2 = 26247818038887731535716684597345320081431200659065462250501004684156921748879;\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x5a333196a10dc7603a7b6d86aa392b5019203fcf0ebcdd7151792545618628649035f6c87881433e887bc25934819ab2d679249e6f767f3cffbd3823aebe25e33a07bd111ea2726d4c4b6e4c4abb6e8bd30dd812b465a46831dca59b7a589d8f" + }, + { + "name": "random-uint128[][2]", + "type": "uint128[][2]", + "value": [ + [ + "77437962519124088402852799267646195815", + "286178840942263408423685796873182422486", + "104915009451835628669973945002930912617", + "155180540277567947348667431072616532716" + ], + [] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "77437962519124088402852799267646195815" + }, + { + "type": "number", + "value": "286178840942263408423685796873182422486" + }, + { + "type": "number", + "value": "104915009451835628669973945002930912617" + }, + { + "type": "number", + "value": "155180540277567947348667431072616532716" + } + ] + }, + { + "type": "array", + "value": [] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102ac806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101e2565b60405180910390f35b6100566101bb565b61005e6101bb565b60408051600480825260a082019092526000916020820160808036833701905050905060006f3a420253618376255f1ceb469acbc867905080826000815181106100aa576100aa610260565b60200260200101906001600160801b031690816001600160801b0316815250505060006fd74c0a385540ebfe48855887e258a5d6905080826001815181106100f4576100f4610260565b60200260200101906001600160801b031690816001600160801b0316815250505060006f4eede5553d381565b045998f964abd699050808260028151811061013e5761013e610260565b60200260200101906001600160801b031690816001600160801b0316815250505060006f74beaf579de4701c78cf3041f02dcaec9050808260038151811061018857610188610260565b6001600160801b039290921660209283029190910182015291835250604080516000815280830190915290820152919050565b60405180604001604052806002905b60608152602001906001900390816101ca5790505090565b6020808252600090606083018382018584805b600281101561025357878503601f19018452825180518087529087019087870190845b8181101561023d5783516001600160801b031683529289019291890191600101610218565b50909650505092850192918501916001016101f5565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220db6ed5892345ade9b0080a9a402a3690c303dd2c6572c8b0008f36ac8068f1c964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint128[][2] memory) {\n uint128[][2] memory r;\n {\n uint128[] memory r_0 = new uint128[](4);\n {\n uint128 r_0_0 = 77437962519124088402852799267646195815;\n r_0[0] = r_0_0;\n }\n {\n uint128 r_0_1 = 286178840942263408423685796873182422486;\n r_0[1] = r_0_1;\n }\n {\n uint128 r_0_2 = 104915009451835628669973945002930912617;\n r_0[2] = r_0_2;\n }\n {\n uint128 r_0_3 = 155180540277567947348667431072616532716;\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n {\n uint128[] memory r_1 = new uint128[](0);\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000003a420253618376255f1ceb469acbc86700000000000000000000000000000000d74c0a385540ebfe48855887e258a5d6000000000000000000000000000000004eede5553d381565b045998f964abd690000000000000000000000000000000074beaf579de4701c78cf3041f02dcaec0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-uint136[][3]", + "type": "uint136[][3]", + "value": [ + [ + "49657662364276864131745549676383780452517", + "33345589938175453843163279892721137675286", + "67999992352966917743280671935215134060436", + "81700705071511681112677625053117267207327" + ], + [ + "7762328707046870334531886547073890507061", + "74463726486030047054802905051271765724689", + "85946187445295441928629131971214764243280" + ], + [ + "22601915035848424676862067806609405590049", + "1081482639665916920507080097976953765158", + "38752211489554588119231270147590651547987" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "49657662364276864131745549676383780452517" + }, + { + "type": "number", + "value": "33345589938175453843163279892721137675286" + }, + { + "type": "number", + "value": "67999992352966917743280671935215134060436" + }, + { + "type": "number", + "value": "81700705071511681112677625053117267207327" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "7762328707046870334531886547073890507061" + }, + { + "type": "number", + "value": "74463726486030047054802905051271765724689" + }, + { + "type": "number", + "value": "85946187445295441928629131971214764243280" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "22601915035848424676862067806609405590049" + }, + { + "type": "number", + "value": "1081482639665916920507080097976953765158" + }, + { + "type": "number", + "value": "38752211489554588119231270147590651547987" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104a6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906103dc565b60405180910390f35b6100566103b5565b61005e6103b5565b60408051600480825260a082019092526000916020820160808036833701905050905060007091ee45e43d7c2cf7807142d3fdca8bb8a5905080826000815181106100ab576100ab61045a565b60200260200101906001600160881b031690816001600160881b0316815250505060007061fe6f047c1fc024e317d5ef6b152cec16905080826001815181106100f6576100f661045a565b60200260200101906001600160881b031690816001600160881b03168152505050600070c7d58226295574b2666da19819fee42f94905080826002815181106101415761014161045a565b60200260200101906001600160881b031690816001600160881b03168152505050600070f018c76ffe85971be6873bf0a0ceea649f9050808260038151811061018c5761018c61045a565b6001600160881b0392909216602092830291909101909101525081526040805160038082526080820190925260009181602001602082028036833701905050905060007016cfba21276cb5832fd253550c1713d935905080826000815181106101f7576101f761045a565b60200260200101906001600160881b031690816001600160881b03168152505050600070dad4480f9e64554b4443e098aac1248e11905080826001815181106102425761024261045a565b60200260200101906001600160881b031690816001600160881b03168152505050600070fc92b999c63f9461dc4f250d791e4d79509050808260028151811061028d5761028d61045a565b6001600160881b03929092166020928302919091018201528301919091525060408051600380825260808201909252600091816020016020820280368337019050509050600070426bca7f2e864a6223d1a5efd5ec433a21905080826000815181106102fb576102fb61045a565b60200260200101906001600160881b031690816001600160881b03168152505050600070032d9dfae1b8fe76a642bf3528959a7d26905080826001815181106103465761034661045a565b60200260200101906001600160881b031690816001600160881b0316815250505060007071e1ec73af7541395c765f2e320d529153905080826002815181106103915761039161045a565b6001600160881b039290921660209283029190910190910152506040820152919050565b60405180606001604052806003905b60608152602001906001900390816103c45790505090565b6020808252600090608083018382018584805b600381101561044d57878503601f19018452825180518087529087019087870190845b818110156104375783516001600160881b031683529289019291890191600101610412565b50909650505092850192918501916001016103ef565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212203e692246550928df19c19193601f746a27cdf261bb256acc825f40f5c147e79b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint136[][3] memory) {\n uint136[][3] memory r;\n {\n uint136[] memory r_0 = new uint136[](4);\n {\n uint136 r_0_0 = 49657662364276864131745549676383780452517;\n r_0[0] = r_0_0;\n }\n {\n uint136 r_0_1 = 33345589938175453843163279892721137675286;\n r_0[1] = r_0_1;\n }\n {\n uint136 r_0_2 = 67999992352966917743280671935215134060436;\n r_0[2] = r_0_2;\n }\n {\n uint136 r_0_3 = 81700705071511681112677625053117267207327;\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n {\n uint136[] memory r_1 = new uint136[](3);\n {\n uint136 r_1_0 = 7762328707046870334531886547073890507061;\n r_1[0] = r_1_0;\n }\n {\n uint136 r_1_1 = 74463726486030047054802905051271765724689;\n r_1[1] = r_1_1;\n }\n {\n uint136 r_1_2 = 85946187445295441928629131971214764243280;\n r_1[2] = r_1_2;\n }\n r[1] = r_1;\n }\n {\n uint136[] memory r_2 = new uint136[](3);\n {\n uint136 r_2_0 = 22601915035848424676862067806609405590049;\n r_2[0] = r_2_0;\n }\n {\n uint136 r_2_1 = 1081482639665916920507080097976953765158;\n r_2[1] = r_2_1;\n }\n {\n uint136 r_2_2 = 38752211489554588119231270147590651547987;\n r_2[2] = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000091ee45e43d7c2cf7807142d3fdca8bb8a500000000000000000000000000000061fe6f047c1fc024e317d5ef6b152cec16000000000000000000000000000000c7d58226295574b2666da19819fee42f94000000000000000000000000000000f018c76ffe85971be6873bf0a0ceea649f000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000016cfba21276cb5832fd253550c1713d935000000000000000000000000000000dad4480f9e64554b4443e098aac1248e11000000000000000000000000000000fc92b999c63f9461dc4f250d791e4d79500000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000426bca7f2e864a6223d1a5efd5ec433a21000000000000000000000000000000032d9dfae1b8fe76a642bf3528959a7d2600000000000000000000000000000071e1ec73af7541395c765f2e320d529153" + }, + { + "name": "random-uint184[3][1]", + "type": "uint184[3][1]", + "value": [ + [ + "4537583828221827318658656949053772817642064580053173265", + "10975405633998423542684456241833481536730287993030433321", + "19959544559516647472095718948881518630353648040802357521" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "4537583828221827318658656949053772817642064580053173265" + }, + { + "type": "number", + "value": "10975405633998423542684456241833481536730287993030433321" + }, + { + "type": "number", + "value": "19959544559516647472095718948881518630353648040802357521" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101ab806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061010c565b60405180910390f35b6100566100c1565b61005e6100c1565b6100666100ee565b762f5fe4d8476f95a529a4861e88676d8aadfeb45e9204118152767296ad4688722a53e0bb73ff1088103a2f45e6854fda29602082015276d0632a947bf32ef9df6d9ed5bf6e67c5cba78b1061911160408201528152919050565b60405180602001604052806001905b6100d86100ee565b8152602001906001900390816100d05790505090565b60405180606001604052806003906020820280368337509192915050565b60608181019082846000805b6001808210610127575061016a565b835185845b60038110156101535782516001600160b81b0316825260209283019290910190830161012c565b505050938501935060209290920191600101610118565b50505050509291505056fea2646970667358221220c172b9454a820d5b57e23c4025d35225e2c5f1ef2085ad7b5b71499424fabf0c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint184[3][1] memory) {\n uint184[3][1] memory r;\n {\n uint184[3] memory r_0;\n {\n uint184 r_0_0 = 4537583828221827318658656949053772817642064580053173265;\n r_0[0] = r_0_0;\n }\n {\n uint184 r_0_1 = 10975405633998423542684456241833481536730287993030433321;\n r_0[1] = r_0_1;\n }\n {\n uint184 r_0_2 = 19959544559516647472095718948881518630353648040802357521;\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000002f5fe4d8476f95a529a4861e88676d8aadfeb45e9204110000000000000000007296ad4688722a53e0bb73ff1088103a2f45e6854fda29000000000000000000d0632a947bf32ef9df6d9ed5bf6e67c5cba78b10619111" + }, + { + "name": "random-uint224[4][]", + "type": "uint224[4][]", + "value": [ + [ + "22685699683398016449077420485869959077089328827375086917456685442145", + "9734869638025398545244187324850335938392974827386648501400863533863", + "5312027844237176709233991998486903991313508146408639102532826484331", + "10560531085942708147557413039615984726907209418617787424379203918052" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "22685699683398016449077420485869959077089328827375086917456685442145" + }, + { + "type": "number", + "value": "9734869638025398545244187324850335938392974827386648501400863533863" + }, + { + "type": "number", + "value": "5312027844237176709233991998486903991313508146408639102532826484331" + }, + { + "type": "number", + "value": "10560531085942708147557413039615984726907209418617787424379203918052" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610216806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610157565b60405180910390f35b60408051600180825281830190925260609160009190816020015b610071610139565b81526020019060019003908161006957905050905061008e610139565b7bd769e192666fa9fd5374b2a2533ab519564cb73b286c8bb5f4e0246181527b5c70283fa0707fe96ac8b2bc82a8b8e38cb44d3700b45e9174786b2760208201527b3270d30b0955789e2e12978270554984fe51dabf9660d100b6ccce6b60408201527b64473aa1071ed267da6c8a36fb34e6c192b4f9a198991ddce43298e46060820152815181908390600090610128576101286101ca565b602090810291909101015250919050565b60405180608001604052806004906020820280368337509192915050565b602080825282518282018190526000919084820190604085019084805b828110156101bd57845184835b60048110156101a75782516001600160e01b031682529188019190880190600101610181565b5050509385019360809390930192600101610174565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212206dff7cd2afe0be550cf9621e5646a72219686630f443033a25e2203ffeba8eb264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint224[4][] memory) {\n uint224[4][] memory r = new uint224[4][](1);\n {\n uint224[4] memory r_0;\n {\n uint224 r_0_0 = 22685699683398016449077420485869959077089328827375086917456685442145;\n r_0[0] = r_0_0;\n }\n {\n uint224 r_0_1 = 9734869638025398545244187324850335938392974827386648501400863533863;\n r_0[1] = r_0_1;\n }\n {\n uint224 r_0_2 = 5312027844237176709233991998486903991313508146408639102532826484331;\n r_0[2] = r_0_2;\n }\n {\n uint224 r_0_3 = 10560531085942708147557413039615984726907209418617787424379203918052;\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000d769e192666fa9fd5374b2a2533ab519564cb73b286c8bb5f4e02461000000005c70283fa0707fe96ac8b2bc82a8b8e38cb44d3700b45e9174786b27000000003270d30b0955789e2e12978270554984fe51dabf9660d100b6ccce6b0000000064473aa1071ed267da6c8a36fb34e6c192b4f9a198991ddce43298e4" + }, + { + "name": "random-uint24[][]", + "type": "uint24[][]", + "value": [[]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610191806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100b6565b60405180910390f35b60408051600180825281830190925260609160009190816020015b6060815260200190600190039081610069575050604080516000808252602082019092529192505080826000815181106100a5576100a5610145565b602090810291909101015250919050565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b8381101561013757888603603f19018552825180518088529088019088880190845b8181101561012157835162ffffff168352928a0192918a0191600101610100565b50909750505093860193918601916001016100de565b509398975050505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212207aa65dc693375fe67019bc36197cc7c28af35ce2e343689679e3dca9240feb8a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint24[][] memory) {\n uint24[][] memory r = new uint24[][](1);\n {\n uint24[] memory r_0 = new uint24[](0);\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-uint24[2][1]", + "type": "uint24[2][1]", + "value": [["16173355", "8576254"]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "16173355" + }, + { + "type": "number", + "value": "8576254" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610162806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100c7565b60405180910390f35b61005661007c565b61005e61007c565b6100666100a9565b62f6c92b81526282dcfe60208201528152919050565b60405180602001604052806001905b6100936100a9565b81526020019060019003908161008b5790505090565b60405180604001604052806002906020820280368337509192915050565b60408181019082846000805b60018082106100e25750610121565b835185845b600281101561010a57825162ffffff1682526020928301929091019083016100e7565b5050509385019350602092909201916001016100d3565b50505050509291505056fea26469706673582212206de12f268455ebb5842244f801c7590153449c0bf9ee62d39fd8f59f7172fa2e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint24[2][1] memory) {\n uint24[2][1] memory r;\n {\n uint24[2] memory r_0;\n {\n uint24 r_0_0 = 16173355;\n r_0[0] = r_0_0;\n }\n {\n uint24 r_0_1 = 8576254;\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000f6c92b000000000000000000000000000000000000000000000000000000000082dcfe" + }, + { + "name": "random-((bool),string,address,string)", + "type": "((bool),string,address,string)", + "value": [ + [true], + "Moo é🚀", + "0xe23b5f13D3b44f1f7b3e9509E0E6A6E86a82bad5", + "Moo é🚀éoo🚀🚀Moé🚀M🚀 oM🚀M M" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "address", + "value": "0xe23b5f13D3b44f1f7b3e9509E0E6A6E86a82bad5" + }, + { + "type": "string", + "value": "Moo é🚀éoo🚀🚀Moé🚀M🚀 oM🚀M M" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610224806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061015c565b60405180910390f35b6040805160a081018252600060808201818152825260606020830181905292820152818101919091526040805160a0810182526000608082018181528252606060208301819052928201528181019190915260408051602080820183526001825290835281518083018352600a8152689adede418753e13f3560b71b818301528382015273e23b5f13d3b44f1f7b3e9509e0e6a6e86a82bad583830152815160608101909252602d808352600092916101c290830139606083015250919050565b6000815180845260005b8181101561013557602081850181015186830182015201610119565b81811115610147576000602083870101525b50601f01601f19169290920160200192915050565b6020815281515115156020820152600060208301516080604084015261018560a084018261010f565b60408501516001600160a01b0316606085810191909152850151848203601f190160808601529091506101b8828261010f565b9594505050505056fe4d6f6f20c3a9f09f9a80c3a96f6ff09f9a80f09f9a804d6fc3a9f09f9a804df09f9a80206f4df09f9a804d204da26469706673582212205bc41d41a56aefefacda1ffc80f0ee16ca7cbc5629991e16a85fac8cc4b046b664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_fd0486c8 {\n S_c1053bda s_0;\n string s_1;\n address s_2;\n string s_3;\n }\n\n function test () public pure returns (S_fd0486c8 memory) {\n S_fd0486c8 memory r;\n {\n S_c1053bda memory r_0;\n {\n bool r_0_0 = true;\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xe23b5f13D3b44f1f7b3e9509E0E6A6E86a82bad5;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀éoo🚀🚀Moé🚀M🚀 oM🚀M M\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000e23b5f13d3b44f1f7b3e9509e0e6a6e86a82bad500000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a80c3a96f6ff09f9a80f09f9a804d6fc3a9f09f9a804df09f9a80206f4df09f9a804d204d00000000000000000000000000000000000000" + }, + { + "name": "random-((bytes12,string,bool,bool))", + "type": "((bytes12,string,bool,bool))", + "value": [ + [ + "0x9907cb97b5c306dc697b7932", + "Moo é🚀ooé MMo🚀oMoM🚀oo🚀o ooo oMMooM🚀oo", + false, + false + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x9907cb97b5c306dc697b7932" + }, + { + "type": "string", + "value": "Moo é🚀ooé MMo🚀oMoM🚀oo🚀o ooo oMMooM🚀oo" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061020d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610107565b60405180910390f35b6040805160a081018252600060208201818152606093830184905292820181905260808201529081526040805160a08101825260006020820181815260609383018490529282018190526080820152908152604080516080810182526060602080830182905260008385018190528284018190526b4c83e5cbdae1836e34bdbc9960a11b845284519283019094526037808352929392906101a19083013960208301525060006040820181905260608201528152919050565b60006020808352835181828501526bffffffffffffffffffffffff60a01b8151166040850152818101516080606086015280518060c087015260005b8181101561015f5782810185015187820160e001528401610143565b8181111561017157600060e083890101525b50604083015115156080870152606090920151151560a086015250601f01601f191690920160e001939250505056fe4d6f6f20c3a9f09f9a806f6fc3a9204d4d6ff09f9a806f4d6f4df09f9a806f6ff09f9a806f206f6f6f20206f4d4d6f6f4df09f9a806f6fa2646970667358221220c940d4960d3f625e8c44268197fe77b7caa7ef7733ac4ae00958496e6caba9e564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1427f51b {\n bytes12 s_0;\n string s_1;\n bool s_2;\n bool s_3;\n }\n\n struct S_bc4376ed {\n S_1427f51b s_0;\n }\n\n function test () public pure returns (S_bc4376ed memory) {\n S_bc4376ed memory r;\n {\n S_1427f51b memory r_0;\n {\n bytes12 r_0_0 = bytes12(0x9907cb97b5c306dc697b7932);\n r_0.s_0 = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀ooé MMo🚀oMoM🚀oo🚀o ooo oMMooM🚀oo\";\n r_0.s_1 = r_0_1;\n }\n {\n bool r_0_2 = false;\n r_0.s_2 = r_0_2;\n }\n {\n bool r_0_3 = false;\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000209907cb97b5c306dc697b7932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a806f6fc3a9204d4d6ff09f9a806f4d6f4df09f9a806f6ff09f9a806f206f6f6f20206f4d4d6f6f4df09f9a806f6f000000000000000000" + }, + { + "name": "random-((bytes14,bytes16[2],string))", + "type": "((bytes14,bytes16[2],string))", + "value": [ + [ + "0x578272075d4767d5b5a6e2b04f63", + ["0xe4ed6e57589e3b0ed22977972da8d26f", "0x077f02d8568cdd880840f3a336b7e879"], + "Moo é🚀oooMoéé é éoM 🚀é é oo🚀oMooM🚀M🚀oMé M🚀" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x578272075d4767d5b5a6e2b04f63" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xe4ed6e57589e3b0ed22977972da8d26f" + }, + { + "type": "hexstring", + "value": "0x077f02d8568cdd880840f3a336b7e879" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oooMoéé é éoM 🚀é é oo🚀oMooM🚀M🚀oMé M🚀" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610280806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610141565b60405180910390f35b6100566100e3565b61005e6100e3565b6100666100fb565b6d578272075d4767d5b5a6e2b04f6360901b8152610082610123565b6fe4ed6e57589e3b0ed22977972da8d26f60801b81526f077f02d8568cdd880840f3a336b7e87960801b6020808301919091528281019190915260408051608081019091526045808252600092610206908301396040830152508152919050565b60405180602001604052806100f66100fb565b905290565b60408051606081019091526000815260208101610116610123565b8152602001606081525090565b60405180604001604052806002906020820280368337509192915050565b600060208083528351818285015271ffffffffffffffffffffffffffffffffffff198151166040850152818101516060850160005b60028110156101a65782516fffffffffffffffffffffffffffffffff191682529184019190840190600101610176565b50505060400151608060a0850152805160c0850181905260005b818110156101dc5782810184015186820160e0015283016101c0565b818111156101ee57600060e083880101525b50601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a806f6f6f4d6fc3a9c3a920c3a920c3a96f4d20f09f9a80c3a92020c3a9206f6ff09f9a806f4d6f6f4df09f9a804df09f9a806f4dc3a9204df09f9a80a2646970667358221220e0967c6126c05543b45ccf0c5f27ff282d49e12f9ef7b342ad9345d06a8c518f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_bb8c8d36 {\n bytes14 s_0;\n bytes16[2] s_1;\n string s_2;\n }\n\n struct S_5e7567af {\n S_bb8c8d36 s_0;\n }\n\n function test () public pure returns (S_5e7567af memory) {\n S_5e7567af memory r;\n {\n S_bb8c8d36 memory r_0;\n {\n bytes14 r_0_0 = bytes14(0x578272075d4767d5b5a6e2b04f63);\n r_0.s_0 = r_0_0;\n }\n {\n bytes16[2] memory r_0_1;\n {\n bytes16 r_0_1_0 = bytes16(0xe4ed6e57589e3b0ed22977972da8d26f);\n r_0_1[0] = r_0_1_0;\n }\n {\n bytes16 r_0_1_1 = bytes16(0x077f02d8568cdd880840f3a336b7e879);\n r_0_1[1] = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀oooMoéé é éoM 🚀é é oo🚀oMooM🚀M🚀oMé M🚀\";\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020578272075d4767d5b5a6e2b04f63000000000000000000000000000000000000e4ed6e57589e3b0ed22977972da8d26f00000000000000000000000000000000077f02d8568cdd880840f3a336b7e87900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a806f6f6f4d6fc3a9c3a920c3a920c3a96f4d20f09f9a80c3a92020c3a9206f6ff09f9a806f4d6f6f4df09f9a804df09f9a806f4dc3a9204df09f9a80000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((bytes23,bool,string),address)", + "type": "((bytes23,bool,string),address)", + "value": [ + [ + "0xb2a231d207a187b5956c62d93c0157b002510512ff3943", + true, + "Moo é🚀o ooo🚀🚀o🚀oMo 🚀MoM🚀o🚀oé o🚀 ooM🚀éo🚀ooéMM🚀🚀oM" + ], + "0x22018C3791E9E850221D343B4692a97ED9037b6e" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xb2a231d207a187b5956c62d93c0157b002510512ff3943" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀o ooo🚀🚀o🚀oMo 🚀MoM🚀o🚀oé o🚀 ooM🚀éo🚀ooéMM🚀🚀oM" + } + ] + }, + { + "type": "address", + "value": "0x22018C3791E9E850221D343B4692a97ED9037b6e" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610249806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610120565b60405180910390f35b6040805160a081018252600091810182815260608083018490526080830152815260208101919091526040805160a081018252600091810182815260608083018490526080830152815260208101919091526040805160608082018352818301527fb2a231d207a187b5956c62d93c0157b002510512ff3943000000000000000000815260016020808301919091528251608081019093526058808452919260009290916101bc9083013960408301525081527322018c3791e9e850221d343b4692a97ed9037b6e6020820152919050565b60006020808352835160408285015268ffffffffffffffffff198151166060850152818101511515608085015260408101519050606060a085015280518060c086015260005b818110156101825782810184015186820160e001528301610166565b8181111561019457600060e083880101525b5091909401516001600160a01b03166040840152601f01601f191690910160e0019291505056fe4d6f6f20c3a9f09f9a806f206f6f6ff09f9a80f09f9a806ff09f9a806f4d6f20f09f9a804d6f4df09f9a806ff09f9a806fc3a9206ff09f9a80206f6f4df09f9a80c3a96ff09f9a806f6fc3a94d4df09f9a80f09f9a806f4da26469706673582212203a0f6685a8f3614f84d874eddf33195287127ca22fb4cce78b08edc8d24b6a3964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_752a6d84 {\n bytes23 s_0;\n bool s_1;\n string s_2;\n }\n\n struct S_73aa98d8 {\n S_752a6d84 s_0;\n address s_1;\n }\n\n function test () public pure returns (S_73aa98d8 memory) {\n S_73aa98d8 memory r;\n {\n S_752a6d84 memory r_0;\n {\n bytes23 r_0_0 = bytes23(0xb2a231d207a187b5956c62d93c0157b002510512ff3943);\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀o ooo🚀🚀o🚀oMo 🚀MoM🚀o🚀oé o🚀 ooM🚀éo🚀ooéMM🚀🚀oM\";\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x22018C3791E9E850221D343B4692a97ED9037b6e;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000022018c3791e9e850221d343b4692a97ed9037b6eb2a231d207a187b5956c62d93c0157b002510512ff39430000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a806f206f6f6ff09f9a80f09f9a806ff09f9a806f4d6f20f09f9a804d6f4df09f9a806ff09f9a806fc3a9206ff09f9a80206f6f4df09f9a80c3a96ff09f9a806f6fc3a94d4df09f9a80f09f9a806f4d0000000000000000" + }, + { + "name": "random-((string,bool,string,bytes32))", + "type": "((string,bool,string,bytes32))", + "value": [ + [ + "Moo é🚀o🚀M MéoéééM MM ", + true, + "Moo é🚀é🚀o oMo o🚀MMooéoé🚀o 🚀🚀Mé ", + "0xbbfd5f5e2da8f7d077822402c19c4be3f55e03dd80168760cb3c84cd1c931903" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀M MéoéééM MM " + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀é🚀o oMo o🚀MMooéoé🚀o 🚀🚀Mé " + }, + { + "type": "hexstring", + "value": "0xbbfd5f5e2da8f7d077822402c19c4be3f55e03dd80168760cb3c84cd1c931903" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610270806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061017d565b60405180910390f35b6040805160a0808201835260606020808401828152600085870181905283860184905260808087018290529186528651948501875284830184815285880182905285850185905285830182905285528651918201875283825281830181905281870184905281840181905286519384019096526021808452949593949093929161021a908301398252506001602080830191909152604080516060810190915260378082526000926101e3908301396040830152507fbbfd5f5e2da8f7d077822402c19c4be3f55e03dd80168760cb3c84cd1c93190360608201528152919050565b6000815180845260005b818110156101565760208185018101518683018201520161013a565b81811115610168576000602083870101525b50601f01601f19169290920160200192915050565b60208152600082516020808401528051608060408501526101a160c0850182610130565b90506020820151151560608501526040820151603f198583030160808601526101ca8282610130565b915050606082015160a085015280925050509291505056fe4d6f6f20c3a9f09f9a80c3a9f09f9a806f206f4d6f20206ff09f9a804d4d6f6fc3a96fc3a9f09f9a806f20f09f9a80f09f9a804dc3a9204d6f6f20c3a9f09f9a806ff09f9a804d204dc3a96fc3a9c3a9c3a94d20204d4d20a26469706673582212201e100affc880383c9b7b360c19b392d71023fbfa2218127bdc96590dfc228a2864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2f803c24 {\n string s_0;\n bool s_1;\n string s_2;\n bytes32 s_3;\n }\n\n struct S_6d445483 {\n S_2f803c24 s_0;\n }\n\n function test () public pure returns (S_6d445483 memory) {\n S_6d445483 memory r;\n {\n S_2f803c24 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀o🚀M MéoéééM MM \";\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀é🚀o oMo o🚀MMooéoé🚀o 🚀🚀Mé \";\n r_0.s_2 = r_0_2;\n }\n {\n bytes32 r_0_3 = bytes32(0xbbfd5f5e2da8f7d077822402c19c4be3f55e03dd80168760cb3c84cd1c931903);\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e0bbfd5f5e2da8f7d077822402c19c4be3f55e03dd80168760cb3c84cd1c93190300000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a806ff09f9a804d204dc3a96fc3a9c3a9c3a94d20204d4d200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a80c3a9f09f9a806f206f4d6f20206ff09f9a804d4d6f6fc3a96fc3a9f09f9a806f20f09f9a80f09f9a804dc3a920000000000000000000" + }, + { + "name": "random-((string,bytes22),bool)[]", + "type": "((string,bytes22),bool)[]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101ae806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100a6565b60405180910390f35b60408051600080825260208201909252606091908161009f565b6040805160808101825260609181018281526000928201839052815260208101919091528152602001906001900390816100685790505b5092915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561016957603f198a8503018652825180518886528051898a8801528051806080890152855b81811015610113578281018d015189820160a001528c016100f7565b81811115610124578660a0838b0101525b508b83015169ffffffffffffffffffff19166060890152928b0151801515888d015292988b0198601f01601f19169690960160a00195505050918701916001016100ce565b5091999850505050505050505056fea264697066735822122027cd79cc2c32df8ff56978ecb60b79873d3f92d15032466642f8199ef1171e2064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d32d9d87 {\n string s_0;\n bytes22 s_1;\n }\n\n struct S_e5c182a3 {\n S_d32d9d87 s_0;\n bool s_1;\n }\n\n function test () public pure returns (S_e5c182a3[] memory) {\n S_e5c182a3[] memory r = new S_e5c182a3[](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((uint,uint56,string)[1])", + "type": "((uint,uint56,string)[1])", + "value": [ + [ + [ + "113935195093937024167708208857267947740012715172719660231999025721166867011022", + "34890390939203934", + "Moo é🚀 éo oooé🚀🚀éoooMéo 🚀" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "113935195093937024167708208857267947740012715172719660231999025721166867011022" + }, + { + "type": "number", + "value": "34890390939203934" + }, + { + "type": "string", + "value": "Moo é🚀 éo oooé🚀🚀éoooMéo 🚀" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610246806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061012d565b60405180910390f35b6100566100d4565b61005e6100d4565b6100666100ec565b60408051606080820183528183018190527ffbe5090038d6a5fce412eaa3e395dfbc4ee708f5b3ea7206884f8ea59bed15ce8252667bf4a02e01795e6020808401919091528351918201909352602a8082529192600092906101e79083013960408301525081528152919050565b60405180602001604052806100e76100ec565b905290565b60405180602001604052806001905b604080516060808201835260008083526020830152918101919091528152602001906001900390816100fb5790505090565b602080825282518282018290526000919060409060609082860182870186805b60018110156101d757898303603f190184528451805184528881015166ffffffffffffff16898501528701518784018790528051878501819052835b818110156101a5578281018b0151868201608001528a01610189565b818111156101b65784608083880101525b509589019594890194601f01601f191693909301608001925060010161014d565b5090999850505050505050505056fe4d6f6f20c3a9f09f9a8020c3a96f206f6f6fc3a9f09f9a80f09f9a80c3a96f6f6f4dc3a96f20f09f9a80a26469706673582212206f71d9fdee2bdb0d6e974cebbef8f14101b9df9ff62b71fe70feeb7f3f758a4664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_42eba8ba {\n uint256 s_0;\n uint56 s_1;\n string s_2;\n }\n\n struct S_43c1f29e {\n S_42eba8ba[1] s_0;\n }\n\n function test () public pure returns (S_43c1f29e memory) {\n S_43c1f29e memory r;\n {\n S_42eba8ba[1] memory r_0;\n {\n S_42eba8ba memory r_0_0;\n {\n uint r_0_0_0 = 113935195093937024167708208857267947740012715172719660231999025721166867011022;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n uint56 r_0_0_1 = 34890390939203934;\n r_0_0.s_1 = r_0_0_1;\n }\n {\n string memory r_0_0_2 = unicode\"Moo é🚀 éo oooé🚀🚀éoooMéo 🚀\";\n r_0_0.s_2 = r_0_0_2;\n }\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fbe5090038d6a5fce412eaa3e395dfbc4ee708f5b3ea7206884f8ea59bed15ce000000000000000000000000000000000000000000000000007bf4a02e01795e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a8020c3a96f206f6f6fc3a9f09f9a80f09f9a80c3a96f6f6f4dc3a96f20f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,address,address,address)", + "type": "(address,address,address,address)", + "value": [ + "0x5BF7e2ddf1E0F068b436384b15d65eD7E9294250", + "0x3d735DdCFa030f10e97aDC399e6806eD58f3Ac3e", + "0x7B5B30215c9ECdD6Ef83eDe30a99c1811b0dD019", + "0x61ace60036fD45482339d58D0817DB186140F93e" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5BF7e2ddf1E0F068b436384b15d65eD7E9294250" + }, + { + "type": "address", + "value": "0x3d735DdCFa030f10e97aDC399e6806eD58f3Ac3e" + }, + { + "type": "address", + "value": "0x7B5B30215c9ECdD6Ef83eDe30a99c1811b0dD019" + }, + { + "type": "address", + "value": "0x61ace60036fD45482339d58D0817DB186140F93e" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101308061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051608080820183526000808352602080840182905283850182905260609384019190915283518083018552735bf7e2ddf1e0f068b436384b15d65ed7e9294250808252733d735ddcfa030f10e97adc399e6806ed58f3ac3e828401908152737b5b30215c9ecdd6ef83ede30a99c1811b0dd0198388019081527361ace60036fd45482339d58d0817db186140f93e938701938452875192835290516001600160a01b0390811694830194909452518316958101959095525116918301919091520160405180910390f3fea26469706673582212202e1a35191ff60cadf07d6c9be48bbf169c326de0858978003e519683bdefa74764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6849b1ab {\n address s_0;\n address s_1;\n address s_2;\n address s_3;\n }\n\n function test () public pure returns (S_6849b1ab memory) {\n S_6849b1ab memory r;\n {\n address r_0 = 0x5BF7e2ddf1E0F068b436384b15d65eD7E9294250;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x3d735DdCFa030f10e97aDC399e6806eD58f3Ac3e;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x7B5B30215c9ECdD6Ef83eDe30a99c1811b0dD019;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x61ace60036fD45482339d58D0817DB186140F93e;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000005bf7e2ddf1e0f068b436384b15d65ed7e92942500000000000000000000000003d735ddcfa030f10e97adc399e6806ed58f3ac3e0000000000000000000000007b5b30215c9ecdd6ef83ede30a99c1811b0dd01900000000000000000000000061ace60036fd45482339d58d0817db186140f93e" + }, + { + "name": "random-(address,address,string,bool)", + "type": "(address,address,string,bool)", + "value": [ + "0xD88FDE87db4Dd684Fda27E163Bf82b7B2015380d", + "0xDe67e9ec49bC924C30f0465a9207FDE01F12A854", + "Moo é🚀MM 🚀o🚀oM🚀oMooééooéMéo🚀é oMéo🚀o ooéMoéé o🚀o", + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xD88FDE87db4Dd684Fda27E163Bf82b7B2015380d" + }, + { + "type": "address", + "value": "0xDe67e9ec49bC924C30f0465a9207FDE01F12A854" + }, + { + "type": "string", + "value": "Moo é🚀MM 🚀o🚀oM🚀oMooééooéMéo🚀é oMéo🚀o ooéMoéé o🚀o" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101f9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e4565b60405180910390f35b60408051608080820183526000808352602080840182905260608486018190528085018390528551808501875280870182905290810183905273d88fde87db4dd684fda27e163bf82b7b2015380d815273de67e9ec49bc924c30f0465a9207fde01f12a8548183015285519384019095526052808452939493919291906101729083013960408301525060016060820152919050565b6000602080835260018060a01b03808551168285015280828601511660408501525060408401516080606085015280518060a086015260005b818110156101395782810184015186820160c00152830161011d565b8181111561014b57600060c083880101525b50606086015180151560808701529250601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a804d4d20f09f9a806ff09f9a806f4df09f9a806f4d6f6fc3a9c3a96f6fc3a94dc3a96ff09f9a80c3a92020206f4dc3a96ff09f9a806f20206f6fc3a94d6fc3a9c3a9206ff09f9a806fa26469706673582212202e2e92327d4e76fd26b8b9eb547d57772ed05dfd0aadf3db16f6a5458ff3996d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_00e15ec9 {\n address s_0;\n address s_1;\n string s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_00e15ec9 memory) {\n S_00e15ec9 memory r;\n {\n address r_0 = 0xD88FDE87db4Dd684Fda27E163Bf82b7B2015380d;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xDe67e9ec49bC924C30f0465a9207FDE01F12A854;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀MM 🚀o🚀oM🚀oMooééooéMéo🚀é oMéo🚀o ooéMoéé o🚀o\";\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000d88fde87db4dd684fda27e163bf82b7b2015380d000000000000000000000000de67e9ec49bc924c30f0465a9207fde01f12a8540000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a804d4d20f09f9a806ff09f9a806f4df09f9a806f4d6f6fc3a9c3a96f6fc3a94dc3a96ff09f9a80c3a92020206f4dc3a96ff09f9a806f20206f6fc3a94d6fc3a9c3a9206ff09f9a806f0000000000000000000000000000" + }, + { + "name": "random-(address,address,uint8,address)", + "type": "(address,address,uint8,address)", + "value": [ + "0x50Dae505678ab9f71CD3cd5f4c811d841D24a562", + "0x5a52a76fFe0E746c1dAA27D31750C6C88115c8b6", + "83", + "0x76d876aF753376FEa7cbc3803068bC337C1c8fa4" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x50Dae505678ab9f71CD3cd5f4c811d841D24a562" + }, + { + "type": "address", + "value": "0x5a52a76fFe0E746c1dAA27D31750C6C88115c8b6" + }, + { + "type": "number", + "value": "83" + }, + { + "type": "address", + "value": "0x76d876aF753376FEa7cbc3803068bC337C1c8fa4" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061011e8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516080808201835260008083526020808401829052838501829052606093840191909152835180830185527350dae505678ab9f71cd3cd5f4c811d841d24a562808252735a52a76ffe0e746c1daa27d31750c6c88115c8b682840190815260538388019081527376d876af753376fea7cbc3803068bc337c1c8fa4938701938452875192835290516001600160a01b03908116948301949094525160ff16958101959095525116918301919091520160405180910390f3fea26469706673582212206daad3cd91642ddd55618c1c902e882b1a885a84bae368f7fba2821c40b7acd664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_77681ad4 {\n address s_0;\n address s_1;\n uint8 s_2;\n address s_3;\n }\n\n function test () public pure returns (S_77681ad4 memory) {\n S_77681ad4 memory r;\n {\n address r_0 = 0x50Dae505678ab9f71CD3cd5f4c811d841D24a562;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x5a52a76fFe0E746c1dAA27D31750C6C88115c8b6;\n r.s_1 = r_1;\n }\n {\n uint8 r_2 = 83;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x76d876aF753376FEa7cbc3803068bC337C1c8fa4;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000050dae505678ab9f71cd3cd5f4c811d841d24a5620000000000000000000000005a52a76ffe0e746c1daa27d31750c6c88115c8b6000000000000000000000000000000000000000000000000000000000000005300000000000000000000000076d876af753376fea7cbc3803068bc337c1c8fa4" + }, + { + "name": "random-(address,bool,bytes24,bytes12)", + "type": "(address,bool,bytes24,bytes12)", + "value": [ + "0x7342b48c91e91A52B8345Ec90429d7208c092722", + false, + "0x834d70b8c71e208294163a520fd72bd2201404dbd62378d2", + "0xe4c3262bb33c99f3844280f6" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x7342b48c91e91A52B8345Ec90429d7208c092722" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x834d70b8c71e208294163a520fd72bd2201404dbd62378d2" + }, + { + "type": "hexstring", + "value": "0xe4c3262bb33c99f3844280f6" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061012b8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516080808201835260008083526020808401829052838501829052606093840182905284518084018652808201928352737342b48c91e91a52b8345ec90429d7208c0927228082527f834d70b8c71e208294163a520fd72bd2201404dbd62378d200000000000000008288019081526b72619315d99e4cf9c221407b60a11b92870192835287519182529351151592810192909252915167ffffffffffffffff191694810194909452516001600160a01b031916918301919091520160405180910390f3fea2646970667358221220b258d7c5cfaa8bf810902fed9003b57e87750e9ab6868c39e4c40e4173d16ede64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6e661d27 {\n address s_0;\n bool s_1;\n bytes24 s_2;\n bytes12 s_3;\n }\n\n function test () public pure returns (S_6e661d27 memory) {\n S_6e661d27 memory r;\n {\n address r_0 = 0x7342b48c91e91A52B8345Ec90429d7208c092722;\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n bytes24 r_2 = bytes24(0x834d70b8c71e208294163a520fd72bd2201404dbd62378d2);\n r.s_2 = r_2;\n }\n {\n bytes12 r_3 = bytes12(0xe4c3262bb33c99f3844280f6);\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000007342b48c91e91a52b8345ec90429d7208c0927220000000000000000000000000000000000000000000000000000000000000000834d70b8c71e208294163a520fd72bd2201404dbd62378d20000000000000000e4c3262bb33c99f3844280f60000000000000000000000000000000000000000" + }, + { + "name": "random-(address,bytes26,int200,int224)", + "type": "(address,bytes26,int200,int224)", + "value": [ + "0x953c96b0ab3582656049b4C3bA6Aa7A6e0626270", + "0xa7c1779fb8d04eaf3ea58d6ff7cf9c5288182e707598308ae046", + "624463661573559747678990746753958956225672355830250817356884", + "11991986327335951820696168084718317485997327090472874869450830134490" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x953c96b0ab3582656049b4C3bA6Aa7A6e0626270" + }, + { + "type": "hexstring", + "value": "0xa7c1779fb8d04eaf3ea58d6ff7cf9c5288182e707598308ae046" + }, + { + "type": "number", + "value": "624463661573559747678990746753958956225672355830250817356884" + }, + { + "type": "number", + "value": "11991986327335951820696168084718317485997327090472874869450830134490" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061014d8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160808082018352600080835260208084018290528385018290526060938401919091528351808301855273953c96b0ab3582656049b4c3ba6aa7a6e06262708082527fa7c1779fb8d04eaf3ea58d6ff7cf9c5288182e707598308ae04600000000000082840190815278637b98d5638631c19f15da19bbfd23662df97aa396116e84548388019081527b71dee769a6240144c14712e5c5c48c6e99a50de437c0e5b7ad323cda9387019384528751928352905165ffffffffffff191693820193909352915160180b8286015251601b0b9281019290925291519081900390910190f3fea264697066735822122042ed9e1279339e8e22b96e0da8adad84367d2ba1d5c3ace63d069e0282aa539d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_209f5f1c {\n address s_0;\n bytes26 s_1;\n int200 s_2;\n int224 s_3;\n }\n\n function test () public pure returns (S_209f5f1c memory) {\n S_209f5f1c memory r;\n {\n address r_0 = 0x953c96b0ab3582656049b4C3bA6Aa7A6e0626270;\n r.s_0 = r_0;\n }\n {\n bytes26 r_1 = bytes26(0xa7c1779fb8d04eaf3ea58d6ff7cf9c5288182e707598308ae046);\n r.s_1 = r_1;\n }\n {\n int200 r_2 = 624463661573559747678990746753958956225672355830250817356884;\n r.s_2 = r_2;\n }\n {\n int224 r_3 = 11991986327335951820696168084718317485997327090472874869450830134490;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000953c96b0ab3582656049b4c3ba6aa7a6e0626270a7c1779fb8d04eaf3ea58d6ff7cf9c5288182e707598308ae04600000000000000000000000000637b98d5638631c19f15da19bbfd23662df97aa396116e84540000000071dee769a6240144c14712e5c5c48c6e99a50de437c0e5b7ad323cda" + }, + { + "name": "random-(address,int56,int80,address)", + "type": "(address,int56,int80,address)", + "value": [ + "0xfaA1E9E1D3b87074a65cC8cfA00f0734EEbCEb2E", + "20696504722380892", + "336331999982851649811274", + "0xE9732D2Edd6ed271AE2d699e6796f20a142C9a9a" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xfaA1E9E1D3b87074a65cC8cfA00f0734EEbCEb2E" + }, + { + "type": "number", + "value": "20696504722380892" + }, + { + "type": "number", + "value": "336331999982851649811274" + }, + { + "type": "address", + "value": "0xE9732D2Edd6ed271AE2d699e6796f20a142C9a9a" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061011a8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160808082018352600080835260208084018290528385018290526060938401919091528351808301855273faa1e9e1d3b87074a65cc8cfa00f0734eebceb2e8082526649875c8411d85c8284019081526947389820f5189e5db34a83880190815273e9732d2edd6ed271ae2d699e6796f20a142c9a9a9387019384528751928352905160060b93820193909352915160090b82860152516001600160a01b03169281019290925291519081900390910190f3fea264697066735822122057064e9b81ddf41e7c21b52251aef9f543908c084dfa3bdbc066cffe9995f2e764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_42d68be1 {\n address s_0;\n int56 s_1;\n int80 s_2;\n address s_3;\n }\n\n function test () public pure returns (S_42d68be1 memory) {\n S_42d68be1 memory r;\n {\n address r_0 = 0xfaA1E9E1D3b87074a65cC8cfA00f0734EEbCEb2E;\n r.s_0 = r_0;\n }\n {\n int56 r_1 = 20696504722380892;\n r.s_1 = r_1;\n }\n {\n int80 r_2 = 336331999982851649811274;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xE9732D2Edd6ed271AE2d699e6796f20a142C9a9a;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000faa1e9e1d3b87074a65cc8cfa00f0734eebceb2e0000000000000000000000000000000000000000000000000049875c8411d85c0000000000000000000000000000000000000000000047389820f5189e5db34a000000000000000000000000e9732d2edd6ed271ae2d699e6796f20a142c9a9a" + }, + { + "name": "random-(address,string,bool,address)", + "type": "(address,string,bool,address)", + "value": [ + "0x2dFdcA1F2E3e134B457Cfdb6a0E05e70b42DB8e5", + "Moo é🚀MoM M🚀M🚀oMMooooMo éooMoooo éooo🚀oo 🚀MoM", + true, + "0xc88771Aa50693440c6A08c1401647580224697C8" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x2dFdcA1F2E3e134B457Cfdb6a0E05e70b42DB8e5" + }, + { + "type": "string", + "value": "Moo é🚀MoM M🚀M🚀oMMooooMo éooMoooo éooo🚀oo 🚀MoM" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xc88771Aa50693440c6A08c1401647580224697C8" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101f7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ed565b60405180910390f35b604080516080808201835260008083526060602080850182905284860183905281850183905285519384018652838101829052838601839052838201839052732dfdca1f2e3e134b457cfdb6a0e05e70b42db8e584528551918201909552603f808252939492939192909190610183908301396020830152506001604082015273c88771aa50693440c6a08c1401647580224697c86060820152919050565b6000602080835260018060a01b0384511681840152808401516080604085015280518060a086015260005b818110156101345782810184015186820160c001528301610118565b8181111561014657600060c083880101525b5060408601518015156060870152925060608601516001600160a01b03811660808701529250601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a804d6f4d204df09f9a804df09f9a806f4d4d6f6f6f6f4d6f20c3a96f6f4d6f6f6f6f20c3a96f6f6ff09f9a806f6f20f09f9a804d6f4da26469706673582212200dace405b70c710793e4b32e053274f68842f6470080b3376cd559e76909a4f464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8586db75 {\n address s_0;\n string s_1;\n bool s_2;\n address s_3;\n }\n\n function test () public pure returns (S_8586db75 memory) {\n S_8586db75 memory r;\n {\n address r_0 = 0x2dFdcA1F2E3e134B457Cfdb6a0E05e70b42DB8e5;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀MoM M🚀M🚀oMMooooMo éooMoooo éooo🚀oo 🚀MoM\";\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xc88771Aa50693440c6A08c1401647580224697C8;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000002dfdca1f2e3e134b457cfdb6a0e05e70b42db8e500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c88771aa50693440c6a08c1401647580224697c8000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a804d6f4d204df09f9a804df09f9a806f4d4d6f6f6f6f4d6f20c3a96f6f4d6f6f6f6f20c3a96f6f6ff09f9a806f6f20f09f9a804d6f4d00" + }, + { + "name": "random-(address,string,string,string)", + "type": "(address,string,string,string)", + "value": [ + "0x35c27789D4f30765974aC6abe64aCb597F01897F", + "Moo é🚀ooo🚀 éMéo", + "Moo é🚀ééoooooooo🚀o o🚀o🚀oéM éé oéo ", + "Moo é🚀ééMMooo🚀🚀 🚀M🚀M oéMé 🚀o🚀🚀 oooo🚀éoM" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x35c27789D4f30765974aC6abe64aCb597F01897F" + }, + { + "type": "string", + "value": "Moo é🚀ooo🚀 éMéo" + }, + { + "type": "string", + "value": "Moo é🚀ééoooooooo🚀o o🚀o🚀oéM éé oéo " + }, + { + "type": "string", + "value": "Moo é🚀ééMMooo🚀🚀 🚀M🚀M oéMé 🚀o🚀🚀 oooo🚀éoM" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102c6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061019f565b60405180910390f35b610082604051806080016040528060006001600160a01b031681526020016060815260200160608152602001606081525090565b6100b6604051806080016040528060006001600160a01b031681526020016060815260200160608152602001606081525090565b7335c27789d4f30765974ac6abe64acb597f01897f8152604080518082018252601881527f4d6f6f20c3a9f09f9a806f6f6ff09f9a8020c3a94dc3a96f00000000000000006020808301919091528084019190915281516060810190925260368083526000929161025b908301396040808401919091528051608081019091526048808252600092506102136020830139606083015250919050565b6000815180845260005b818110156101785760208185018101518683018201520161015c565b8181111561018a576000602083870101525b50601f01601f19169290920160200192915050565b602080825282516001600160a01b031682820152820151608060408301526000906101cd60a0840182610152565b90506040840151601f19808584030160608601526101eb8383610152565b92506060860151915080858403016080860152506102098282610152565b9594505050505056fe4d6f6f20c3a9f09f9a80c3a9c3a94d4d6f6f6ff09f9a80f09f9a8020f09f9a804df09f9a804d206fc3a94dc3a920f09f9a806ff09f9a80f09f9a80206f6f6f6ff09f9a80c3a96f4d4d6f6f20c3a9f09f9a80c3a9c3a96f6f6f6f6f6f6f6ff09f9a806f206ff09f9a806ff09f9a806fc3a94d20c3a9c3a920206fc3a96f20a26469706673582212202f9e028c49d68df6046200458f567ff4b3aec7f249e94fc347c241a2927c4c0364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fe1f5ff5 {\n address s_0;\n string s_1;\n string s_2;\n string s_3;\n }\n\n function test () public pure returns (S_fe1f5ff5 memory) {\n S_fe1f5ff5 memory r;\n {\n address r_0 = 0x35c27789D4f30765974aC6abe64aCb597F01897F;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀ooo🚀 éMéo\";\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀ééoooooooo🚀o o🚀o🚀oéM éé oéo \";\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀ééMMooo🚀🚀 🚀M🚀M oéMé 🚀o🚀🚀 oooo🚀éoM\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000035c27789d4f30765974ac6abe64acb597f01897f000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a806f6f6ff09f9a8020c3a94dc3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a80c3a9c3a96f6f6f6f6f6f6f6ff09f9a806f206ff09f9a806ff09f9a806fc3a94d20c3a9c3a920206fc3a96f200000000000000000000000000000000000000000000000000000000000000000000000000000000000484d6f6f20c3a9f09f9a80c3a9c3a94d4d6f6f6ff09f9a80f09f9a8020f09f9a804df09f9a804d206fc3a94dc3a920f09f9a806ff09f9a80f09f9a80206f6f6f6ff09f9a80c3a96f4d000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,string,uint136,int32)", + "type": "(address,string,uint136,int32)", + "value": [ + "0xDd69c1924DF5E0CBB3C1F0Ac90AC989294FbD279", + "Moo é🚀oo éM é🚀o é🚀🚀oMMoéM 🚀🚀 MéMo🚀M🚀 é o🚀o", + "65740796100367119962059936296432917707467", + "515926523" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xDd69c1924DF5E0CBB3C1F0Ac90AC989294FbD279" + }, + { + "type": "string", + "value": "Moo é🚀oo éM é🚀o é🚀🚀oMMoéM 🚀🚀 MéMo🚀M🚀 é o🚀o" + }, + { + "type": "number", + "value": "65740796100367119962059936296432917707467" + }, + { + "type": "number", + "value": "515926523" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610214806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ec565b60405180910390f35b60408051608080820183526000808352606060208085018290528486018390528185018390528551808501875280820183905280870184905291820183905273dd69c1924df5e0cbb3c1f0ac90ac989294fbd27982528551938401909552604c80845293949093919291906101939083013960208301525070c131e0c71af8175393e6e75ebab8d27acb6040820152631ec069fb6060820152919050565b6000602080835260018060a01b0384511681840152808401516080604085015280518060a086015260005b818110156101335782810184015186820160c001528301610117565b8181111561014557600060c083880101525b50604086015170ffffffffffffffffffffffffffffffffff8116606087015292506060860151925061017c608086018460030b9052565b601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a806f6f20c3a94d20c3a9f09f9a806f20c3a9f09f9a80f09f9a806f4d4d6fc3a94d20f09f9a80f09f9a80204dc3a94d6ff09f9a804df09f9a8020c3a9206ff09f9a806fa26469706673582212208dac2b12f9ed87302d02a2cdfd09d58e4f40c9cbc70a85dca332afbd3eb093fe64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d5025c0f {\n address s_0;\n string s_1;\n uint136 s_2;\n int32 s_3;\n }\n\n function test () public pure returns (S_d5025c0f memory) {\n S_d5025c0f memory r;\n {\n address r_0 = 0xDd69c1924DF5E0CBB3C1F0Ac90AC989294FbD279;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀oo éM é🚀o é🚀🚀oMMoéM 🚀🚀 MéMo🚀M🚀 é o🚀o\";\n r.s_1 = r_1;\n }\n {\n uint136 r_2 = 65740796100367119962059936296432917707467;\n r.s_2 = r_2;\n }\n {\n int32 r_3 = 515926523;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000dd69c1924df5e0cbb3c1f0ac90ac989294fbd2790000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000c131e0c71af8175393e6e75ebab8d27acb000000000000000000000000000000000000000000000000000000001ec069fb000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a806f6f20c3a94d20c3a9f09f9a806f20c3a9f09f9a80f09f9a806f4d4d6fc3a94d20f09f9a80f09f9a80204dc3a94d6ff09f9a804df09f9a8020c3a9206ff09f9a806f0000000000000000000000000000000000000000" + }, + { + "name": "random-(address,string[3],bytes14)", + "type": "(address,string[3],bytes14)", + "value": [ + "0x5f35DdC6Bb6194332834E8f2f633810C79192842", + [ + "Moo é🚀🚀🚀oé🚀oMoo 🚀Méo🚀🚀 é🚀 🚀oé 🚀ooMM", + "Moo é🚀oMooé oM", + "Moo é🚀 MMooo🚀 oooMéo🚀oo🚀🚀M éM é🚀é🚀oéooMMoMoMoé🚀o é" + ], + "0xe66ffb1810db91000731db6461c9" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5f35DdC6Bb6194332834E8f2f633810C79192842" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀oé🚀oMoo 🚀Méo🚀🚀 é🚀 🚀oé 🚀ooMM" + }, + { + "type": "string", + "value": "Moo é🚀oMooé oM" + }, + { + "type": "string", + "value": "Moo é🚀 MMooo🚀 oooMéo🚀oo🚀🚀M éM é🚀é🚀oéooMMoMoMoé🚀o é" + } + ] + }, + { + "type": "hexstring", + "value": "0xe66ffb1810db91000731db6461c9" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610302806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610171565b60405180910390f35b61005661011a565b61005e61011a565b735f35ddc6bb6194332834e8f2f633810c79192842815261007d61014a565b6000604051806080016040528060468152602001610235604691398252506040805180820190915260138152724d6f6f20c3a9f09f9a806f4d6f6fc3a9206f4d60681b602082015280826001602002018190525050600060405180608001604052806052815260200161027b605291396040808401919091526020840192909252506de66ffb1810db91000731db6461c960901b90820152919050565b604051806060016040528060006001600160a01b0316815260200161013d61014a565b8152600060209091015290565b60405180606001604052806003905b60608152602001906001900390816101595790505090565b602080825282516001600160a01b03168282015282810151606060408401526000919060e08401906080850184805b600381101561020657878503607f1901835283518051808752835b818110156101d6578281018901518882018a015288016101bb565b818111156101e6578489838a0101525b50601f01601f1916959095018601945092850192918501916001016101a0565b50505050604085015171ffffffffffffffffffffffffffffffffffff1981166060860152915094935050505056fe4d6f6f20c3a9f09f9a80f09f9a80f09f9a806fc3a9f09f9a806f4d6f6f20f09f9a804dc3a96ff09f9a80f09f9a8020c3a9f09f9a8020f09f9a806fc3a920f09f9a806f6f4d4d4d6f6f20c3a9f09f9a80204d4d6f6f6ff09f9a80206f6f6f4dc3a96ff09f9a806f6ff09f9a80f09f9a804d20c3a94d20c3a9f09f9a80c3a9f09f9a806fc3a96f6f4d4d6f4d6f4d6fc3a9f09f9a806f20c3a9a26469706673582212200356f926955d5f190bedd9d250f56aab0e60a0a118ebfaf96513bc370300d31164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_429cd3b1 {\n address s_0;\n string[3] s_1;\n bytes14 s_2;\n }\n\n function test () public pure returns (S_429cd3b1 memory) {\n S_429cd3b1 memory r;\n {\n address r_0 = 0x5f35DdC6Bb6194332834E8f2f633810C79192842;\n r.s_0 = r_0;\n }\n {\n string[3] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀🚀🚀oé🚀oMoo 🚀Méo🚀🚀 é🚀 🚀oé 🚀ooMM\";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀oMooé oM\";\n r_1[1] = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀 MMooo🚀 oooMéo🚀oo🚀🚀M éM é🚀é🚀oéooMMoMoMoé🚀o é\";\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n bytes14 r_2 = bytes14(0xe66ffb1810db91000731db6461c9);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000005f35ddc6bb6194332834e8f2f633810c791928420000000000000000000000000000000000000000000000000000000000000060e66ffb1810db91000731db6461c9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a80f09f9a80f09f9a806fc3a9f09f9a806f4d6f6f20f09f9a804dc3a96ff09f9a80f09f9a8020c3a9f09f9a8020f09f9a806fc3a920f09f9a806f6f4d4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a806f4d6f6fc3a9206f4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a80204d4d6f6f6ff09f9a80206f6f6f4dc3a96ff09f9a806f6ff09f9a80f09f9a804d20c3a94d20c3a9f09f9a80c3a9f09f9a806fc3a96f6f4d4d6f4d6f4d6fc3a9f09f9a806f20c3a90000000000000000000000000000" + }, + { + "name": "random-(address,uint232[1][2])", + "type": "(address,uint232[1][2])", + "value": [ + "0x965Ccd820E24062D2c8c1523b7FfD79D5C1da7cD", + [ + ["3771100022616029169101429379120294340480380192291573535795030591472775"], + ["239542713703516699379656664902710920092229383466179118996635807634391"] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x965Ccd820E24062D2c8c1523b7FfD79D5C1da7cD" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3771100022616029169101429379120294340480380192291573535795030591472775" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "239542713703516699379656664902710920092229383466179118996635807634391" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101fb806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610153565b60405180910390f35b6100566100e0565b61005e6100e0565b73965ccd820e24062d2c8c1523b7ffd79d5c1da7cd815261007d610108565b610085610135565b7c8be0bc598219b33ec02747672a7c4d1558a6a1c4ff554cf048b1870487815281526100af610135565b7c08e29814b52dce40440a0f164fc6f2beecb978fa68250f1c1afff3d3d78152602082810191909152820152919050565b604051806040016040528060006001600160a01b03168152602001610103610108565b905290565b60405180604001604052806002905b61011f610135565b8152602001906001900390816101175790505090565b60405180602001604052806001906020820280368337509192915050565b81516001600160a01b031681526020808301516060830191908184016000805b60028110156101ba57835183835b60018110156101a75782516001600160e81b031682529187019190870190600101610181565b5050509284019291840191600101610173565b50505050509291505056fea2646970667358221220347bff9c6cbbb45cc60af9ba7c7fd75fd32308174976bc5e1c3496999b82cc7764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_040cda5c {\n address s_0;\n uint232[1][2] s_1;\n }\n\n function test () public pure returns (S_040cda5c memory) {\n S_040cda5c memory r;\n {\n address r_0 = 0x965Ccd820E24062D2c8c1523b7FfD79D5C1da7cD;\n r.s_0 = r_0;\n }\n {\n uint232[1][2] memory r_1;\n {\n uint232[1] memory r_1_0;\n {\n uint232 r_1_0_0 = 3771100022616029169101429379120294340480380192291573535795030591472775;\n r_1_0[0] = r_1_0_0;\n }\n r_1[0] = r_1_0;\n }\n {\n uint232[1] memory r_1_1;\n {\n uint232 r_1_1_0 = 239542713703516699379656664902710920092229383466179118996635807634391;\n r_1_1[0] = r_1_1_0;\n }\n r_1[1] = r_1_1;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000965ccd820e24062d2c8c1523b7ffd79d5c1da7cd0000008be0bc598219b33ec02747672a7c4d1558a6a1c4ff554cf048b187048700000008e29814b52dce40440a0f164fc6f2beecb978fa68250f1c1afff3d3d7" + }, + { + "name": "random-(address[],uint136)[3]", + "type": "(address[],uint136)[3]", + "value": [ + [ + [ + "0xeb10144F461478859Df085935C77865d334CF12e", + "0xF3170479dFE48cD5F5B24CE92D846B1Fbc8E2688", + "0x75dEb44f7919968a32cb5250aF2c48Cf4303288c" + ], + "20177843111760875391405552584010571048823" + ], + [ + ["0x68008F48FF2AE49FA53bc6FCFcC4ABb6d592a9E9"], + "38896563217589420844275421732036694903839" + ], + [ + [ + "0xa7748A3AF6CcEAa3D99E8587c94C05dE7f307f7c", + "0x08Cf53209E49d2Bc8dc6207f784988026c304fb7", + "0xBd390E17168B9A21B2490446DbA78efF261D51B1", + "0x85c86F2977f3d37C7B9F3E5f65829563c5335fe0" + ], + "45977561792698692593831752620466052013985" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xeb10144F461478859Df085935C77865d334CF12e" + }, + { + "type": "address", + "value": "0xF3170479dFE48cD5F5B24CE92D846B1Fbc8E2688" + }, + { + "type": "address", + "value": "0x75dEb44f7919968a32cb5250aF2c48Cf4303288c" + } + ] + }, + { + "type": "number", + "value": "20177843111760875391405552584010571048823" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x68008F48FF2AE49FA53bc6FCFcC4ABb6d592a9E9" + } + ] + }, + { + "type": "number", + "value": "38896563217589420844275421732036694903839" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xa7748A3AF6CcEAa3D99E8587c94C05dE7f307f7c" + }, + { + "type": "address", + "value": "0x08Cf53209E49d2Bc8dc6207f784988026c304fb7" + }, + { + "type": "address", + "value": "0xBd390E17168B9A21B2490446DbA78efF261D51B1" + }, + { + "type": "address", + "value": "0x85c86F2977f3d37C7B9F3E5f65829563c5335fe0" + } + ] + }, + { + "type": "number", + "value": "45977561792698692593831752620466052013985" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104f2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906103fe565b60405180910390f35b6100566103c4565b61005e6103c4565b60408051808201909152606081526000602082015260408051600380825260808201909252600091816020016020820280368337019050509050600073eb10144f461478859df085935c77865d334cf12e905080826000815181106100c5576100c56104a6565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073f3170479dfe48cd5f5b24ce92d846b1fbc8e268890508082600181518110610113576101136104a6565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007375deb44f7919968a32cb5250af2c48cf4303288c90508082600281518110610161576101616104a6565b6001600160a01b039290921660209283029190910182015291835250703b4c1f39e8d1e2f6c47ea5733f7d39e77782820152908252604080518082018252606081526000818401819052825160018082528185019094529193909290828101908036833701905050905060007368008f48ff2ae49fa53bc6fcfcc4abb6d592a9e9905080826000815181106101f8576101f86104a6565b6001600160a01b039092166020928302919091018201529183525070724e85955d05be3724d13729f081860c1f908201528082600160200201525061024e60408051808201909152606081526000602082015290565b60408051600480825260a0820190925260009160208201608080368337019050509050600073a7748a3af6cceaa3d99e8587c94c05de7f307f7c9050808260008151811061029e5761029e6104a6565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007308cf53209e49d2bc8dc6207f784988026c304fb7905080826001815181106102ec576102ec6104a6565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073bd390e17168b9a21b2490446dba78eff261d51b19050808260028151811061033a5761033a6104a6565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007385c86f2977f3d37c7b9f3e5f65829563c5335fe090508082600381518110610388576103886104a6565b6001600160a01b03929092166020928302919091018201529183525070871dac4d7a4af1c40dfa70d7705bf41fa1908201526040820152919050565b60405180606001604052806003905b6040805180820190915260608152600060208201528152602001906001900390816103d35790505090565b6020808252600090608083018382018584805b600381101561049957878503601f190184528251805160408088528151908801819052606088019189019085905b808210156104685782516001600160a01b03168452928a0192918a01916001919091019061043f565b5050509087015170ffffffffffffffffffffffffffffffffff16958701959095529285019291850191600101610411565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220e6f29394e82bb4e0d3f46e4b26817b713aca8204cf01d2a39aa5efeb94737cea64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c7eae0bb {\n address[] s_0;\n uint136 s_1;\n }\n\n function test () public pure returns (S_c7eae0bb[3] memory) {\n S_c7eae0bb[3] memory r;\n {\n S_c7eae0bb memory r_0;\n {\n address[] memory r_0_0 = new address[](3);\n {\n address r_0_0_0 = 0xeb10144F461478859Df085935C77865d334CF12e;\n r_0_0[0] = r_0_0_0;\n }\n {\n address r_0_0_1 = 0xF3170479dFE48cD5F5B24CE92D846B1Fbc8E2688;\n r_0_0[1] = r_0_0_1;\n }\n {\n address r_0_0_2 = 0x75dEb44f7919968a32cb5250aF2c48Cf4303288c;\n r_0_0[2] = r_0_0_2;\n }\n r_0.s_0 = r_0_0;\n }\n {\n uint136 r_0_1 = 20177843111760875391405552584010571048823;\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_c7eae0bb memory r_1;\n {\n address[] memory r_1_0 = new address[](1);\n {\n address r_1_0_0 = 0x68008F48FF2AE49FA53bc6FCFcC4ABb6d592a9E9;\n r_1_0[0] = r_1_0_0;\n }\n r_1.s_0 = r_1_0;\n }\n {\n uint136 r_1_1 = 38896563217589420844275421732036694903839;\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n {\n S_c7eae0bb memory r_2;\n {\n address[] memory r_2_0 = new address[](4);\n {\n address r_2_0_0 = 0xa7748A3AF6CcEAa3D99E8587c94C05dE7f307f7c;\n r_2_0[0] = r_2_0_0;\n }\n {\n address r_2_0_1 = 0x08Cf53209E49d2Bc8dc6207f784988026c304fb7;\n r_2_0[1] = r_2_0_1;\n }\n {\n address r_2_0_2 = 0xBd390E17168B9A21B2490446DbA78efF261D51B1;\n r_2_0[2] = r_2_0_2;\n }\n {\n address r_2_0_3 = 0x85c86F2977f3d37C7B9F3E5f65829563c5335fe0;\n r_2_0[3] = r_2_0_3;\n }\n r_2.s_0 = r_2_0;\n }\n {\n uint136 r_2_1 = 45977561792698692593831752620466052013985;\n r_2.s_1 = r_2_1;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000003b4c1f39e8d1e2f6c47ea5733f7d39e7770000000000000000000000000000000000000000000000000000000000000003000000000000000000000000eb10144f461478859df085935c77865d334cf12e000000000000000000000000f3170479dfe48cd5f5b24ce92d846b1fbc8e268800000000000000000000000075deb44f7919968a32cb5250af2c48cf4303288c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000724e85955d05be3724d13729f081860c1f000000000000000000000000000000000000000000000000000000000000000100000000000000000000000068008f48ff2ae49fa53bc6fcfcc4abb6d592a9e90000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000871dac4d7a4af1c40dfa70d7705bf41fa10000000000000000000000000000000000000000000000000000000000000004000000000000000000000000a7748a3af6cceaa3d99e8587c94c05de7f307f7c00000000000000000000000008cf53209e49d2bc8dc6207f784988026c304fb7000000000000000000000000bd390e17168b9a21b2490446dba78eff261d51b100000000000000000000000085c86f2977f3d37c7b9f3e5f65829563c5335fe0" + }, + { + "name": "random-(address[1],address,string)", + "type": "(address[1],address,string)", + "value": [ + ["0x8D8039B745c787920e981744be685Cc6e626dCB0"], + "0xA9bF8DA33f02FB6de26Cd54c0e11F0440975aC39", + "Moo é🚀🚀M🚀oMoo🚀Moé éM 🚀 🚀 M é é 🚀oéé🚀o🚀ooooM 🚀é🚀o" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x8D8039B745c787920e981744be685Cc6e626dCB0" + } + ] + }, + { + "type": "address", + "value": "0xA9bF8DA33f02FB6de26Cd54c0e11F0440975aC39" + }, + { + "type": "string", + "value": "Moo é🚀🚀M🚀oMoo🚀Moé éM 🚀 🚀 M é é 🚀oéé🚀o🚀ooooM 🚀é🚀o" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061023d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610107565b60405180910390f35b6100566100c2565b61005e6100c2565b6100666100e9565b738d8039b745c787920e981744be685cc6e626dcb08152815273a9bf8da33f02fb6de26cd54c0e11f0440975ac39602082810191909152604080516080810190915260598082526000926101af90830139604083015250919050565b60405180606001604052806100d56100e9565b815260006020820152606060409091015290565b60405180602001604052806001906020820280368337509192915050565b6020808252825160009190828483015b600182101561013f5782516001600160a01b0316815291830191600191909101908301610117565b50505060018060a01b03818501511660408401526040840151606080850152805180608086015260005b818110156101855782810184015186820160a001528301610169565b8181111561019757600060a083880101525b50601f01601f19169390930160a00194935050505056fe4d6f6f20c3a9f09f9a80f09f9a804df09f9a806f4d6f6ff09f9a804d6fc3a920c3a94d20f09f9a8020f09f9a80204d20c3a920c3a920f09f9a806fc3a9c3a9f09f9a806ff09f9a806f6f6f6f4d20f09f9a80c3a9f09f9a806fa26469706673582212204a0ba6e8071238741aa9816d2875bdd15f373b68b60b7f8ed5e60cce2c73132264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5848ad4a {\n address[1] s_0;\n address s_1;\n string s_2;\n }\n\n function test () public pure returns (S_5848ad4a memory) {\n S_5848ad4a memory r;\n {\n address[1] memory r_0;\n {\n address r_0_0 = 0x8D8039B745c787920e981744be685Cc6e626dCB0;\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xA9bF8DA33f02FB6de26Cd54c0e11F0440975aC39;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀🚀M🚀oMoo🚀Moé éM 🚀 🚀 M é é 🚀oéé🚀o🚀ooooM 🚀é🚀o\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000008d8039b745c787920e981744be685cc6e626dcb0000000000000000000000000a9bf8da33f02fb6de26cd54c0e11f0440975ac39000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a80f09f9a804df09f9a806f4d6f6ff09f9a804d6fc3a920c3a94d20f09f9a8020f09f9a80204d20c3a920c3a920f09f9a806fc3a9c3a9f09f9a806ff09f9a806f6f6f6f4d20f09f9a80c3a9f09f9a806f00000000000000" + }, + { + "name": "random-(address[2],bytes16,string)", + "type": "(address[2],bytes16,string)", + "value": [ + [ + "0xfC156A78dE052Def9d71cb8F8990Fef41593e23b", + "0x7e3D393E619dC323Ed2Ca6EC5Da80f970161996f" + ], + "0xca181cb5e55c6e23425454ea179ceaa6", + "Moo é🚀éo🚀o oMéoo🚀o🚀Mé🚀oMMo 🚀oooéoo é" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xfC156A78dE052Def9d71cb8F8990Fef41593e23b" + }, + { + "type": "address", + "value": "0x7e3D393E619dC323Ed2Ca6EC5Da80f970161996f" + } + ] + }, + { + "type": "hexstring", + "value": "0xca181cb5e55c6e23425454ea179ceaa6" + }, + { + "type": "string", + "value": "Moo é🚀éo🚀o oMéoo🚀o🚀Mé🚀oMMo 🚀oooéoo é" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610246806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610120565b60405180910390f35b6100566100db565b61005e6100db565b610066610102565b73fc156a78de052def9d71cb8f8990fef41593e23b8152737e3d393e619dc323ed2ca6ec5da80f970161996f6020808301919091529082526f650c0e5af2ae3711a12a2a750bce755360811b828201526040805160608101909152603e8082526000926101d390830139604083015250919050565b60405180606001604052806100ee610102565b815260006020820152606060409091015290565b60405180604001604052806002906020820280368337509192915050565b6020808252825160009190828483015b60028210156101585782516001600160a01b0316815291830191600191909101908301610130565b5050506fffffffffffffffffffffffffffffffff1981850151166060840152604084015160808085015280518060a086015260005b818110156101a95782810184015186820160c00152830161018d565b818111156101bb57600060c083880101525b50601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a80c3a96ff09f9a806f2020206f4dc3a96f6ff09f9a806ff09f9a804dc3a9f09f9a806f4d4d6f20f09f9a806f6f6fc3a96f6f20c3a9a264697066735822122083f9d66ead16bca2e12fae35b6fe8e76891e3dfb88c7deca14f9caa81d82a15d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f3e9bc3f {\n address[2] s_0;\n bytes16 s_1;\n string s_2;\n }\n\n function test () public pure returns (S_f3e9bc3f memory) {\n S_f3e9bc3f memory r;\n {\n address[2] memory r_0;\n {\n address r_0_0 = 0xfC156A78dE052Def9d71cb8F8990Fef41593e23b;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0x7e3D393E619dC323Ed2Ca6EC5Da80f970161996f;\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n bytes16 r_1 = bytes16(0xca181cb5e55c6e23425454ea179ceaa6);\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀éo🚀o oMéoo🚀o🚀Mé🚀oMMo 🚀oooéoo é\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000fc156a78de052def9d71cb8f8990fef41593e23b0000000000000000000000007e3d393e619dc323ed2ca6ec5da80f970161996fca181cb5e55c6e23425454ea179ceaa6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a80c3a96ff09f9a806f2020206f4dc3a96f6ff09f9a806ff09f9a804dc3a9f09f9a806f4d4d6f20f09f9a806f6f6fc3a96f6f20c3a90000" + }, + { + "name": "random-(bool,(bytes1,address,string))", + "type": "(bool,(bytes1,address,string))", + "value": [ + false, + [ + "0x72", + "0x66FD68437fe6E2a07262814A38709087a6062513", + "Moo é🚀é🚀M🚀 ooM é MééM🚀ooMMooé🚀é 🚀ooMé oooéoooéoooMM🚀" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x72" + }, + { + "type": "address", + "value": "0x66FD68437fe6E2a07262814A38709087a6062513" + }, + { + "type": "string", + "value": "Moo é🚀é🚀M🚀 ooM é MééM🚀ooMMooé🚀é 🚀ooMé oooéoooéoooMM🚀" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061022e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061010e565b60405180910390f35b6100566100d3565b61005e6100d3565b600081526100846040805160608082018352600080835260208301529181019190915290565b603960f91b81527366fd68437fe6e2a07262814a38709087a6062513602080830191909152604080516080810190915260558082526000926101a4908301396040830152506020820152919050565b60405180604001604052806000151581526020016101096040805160608082018352600080835260208301529181019190915290565b905290565b6000602080835283511515818401528084015160408085015260ff60f81b815116606085015260018060a01b038282015116608085015260408101519050606060a085015280518060c086015260005b8181101561017a5782810184015186820160e00152830161015e565b8181111561018c57600060e083880101525b50601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a80c3a9f09f9a804df09f9a80206f6f4d2020c3a9204dc3a9c3a94df09f9a806f6f4d4d6f6fc3a9f09f9a80c3a92020f09f9a806f6f4dc3a9206f6f6fc3a96f6f6fc3a96f6f6f4d4df09f9a80a2646970667358221220bae35cbf4d2b3267be8063501fae5d3c2fe7848e626fbd6adeb94cffe68c16c764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b6f336d7 {\n bytes1 s_0;\n address s_1;\n string s_2;\n }\n\n struct S_172b0ac2 {\n bool s_0;\n S_b6f336d7 s_1;\n }\n\n function test () public pure returns (S_172b0ac2 memory) {\n S_172b0ac2 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n S_b6f336d7 memory r_1;\n {\n bytes1 r_1_0 = bytes1(0x72);\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0x66FD68437fe6E2a07262814A38709087a6062513;\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀é🚀M🚀 ooM é MééM🚀ooMMooé🚀é 🚀ooMé oooéoooéoooMM🚀\";\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040720000000000000000000000000000000000000000000000000000000000000000000000000000000000000066fd68437fe6e2a07262814a38709087a6062513000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a80c3a9f09f9a804df09f9a80206f6f4d2020c3a9204dc3a9c3a94df09f9a806f6f4d4d6f6fc3a9f09f9a80c3a92020f09f9a806f6f4dc3a9206f6f6fc3a96f6f6fc3a96f6f6f4d4df09f9a800000000000000000000000" + }, + { + "name": "random-(bool,(bytes29,bytes20),uint48)", + "type": "(bool,(bytes29,bytes20),uint48)", + "value": [ + false, + [ + "0xaa090ad98b5ad139303c3020ec2c57c549b84f296bf71eea193b546962", + "0xb45baff81c8b6cf46fd70ad3cef4db416adaad4b" + ], + "252600522296992" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xaa090ad98b5ad139303c3020ec2c57c549b84f296bf71eea193b546962" + }, + { + "type": "hexstring", + "value": "0xb45baff81c8b6cf46fd70ad3cef4db416adaad4b" + } + ] + }, + { + "type": "number", + "value": "252600522296992" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101548061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b60408051606080820183526000808352835180850185528181526020808201839052808501919091529284018190528351808301855281815284518086018652828152808501839052818501908152818601838152928252855180870187527faa090ad98b5ad139303c3020ec2c57c549b84f296bf71eea193b546962000000815273b45baff81c8b6cf46fd70ad3cef4db416adaad4b60601b81870152815265e5bd2466cea08352855191511515825251805162ffffff191682860152909301516bffffffffffffffffffffffff1916838501525165ffffffffffff169082015290519081900360800190f3fea26469706673582212200d0fb45e5cd320dc272f9f079b48e0dde762a090613d29963458baa05ab3757b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f628b69f {\n bytes29 s_0;\n bytes20 s_1;\n }\n\n struct S_223b25e1 {\n bool s_0;\n S_f628b69f s_1;\n uint48 s_2;\n }\n\n function test () public pure returns (S_223b25e1 memory) {\n S_223b25e1 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n S_f628b69f memory r_1;\n {\n bytes29 r_1_0 = bytes29(0xaa090ad98b5ad139303c3020ec2c57c549b84f296bf71eea193b546962);\n r_1.s_0 = r_1_0;\n }\n {\n bytes20 r_1_1 = bytes20(0xb45BaFF81c8b6cf46Fd70AD3CEF4Db416AdAad4b);\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n uint48 r_2 = 252600522296992;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000aa090ad98b5ad139303c3020ec2c57c549b84f296bf71eea193b546962000000b45baff81c8b6cf46fd70ad3cef4db416adaad4b0000000000000000000000000000000000000000000000000000000000000000000000000000e5bd2466cea0" + }, + { + "name": "random-(bool,address,address,bytes21)", + "type": "(bool,address,address,bytes21)", + "value": [ + false, + "0x5462482dEd9aa77B5fe59919813fD0Fa581DF975", + "0x9fdf9DC79d90b4403EEf9ac8c904557fa47d2663", + "0x43fc720efd4d6bd8a93bf55bb09fd37e98561bb5e3" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x5462482dEd9aa77B5fe59919813fD0Fa581DF975" + }, + { + "type": "address", + "value": "0x9fdf9DC79d90b4403EEf9ac8c904557fa47d2663" + }, + { + "type": "hexstring", + "value": "0x43fc720efd4d6bd8a93bf55bb09fd37e98561bb5e3" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061012b8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516080808201835260008083526020808401829052838501829052606093840182905284518084018652828152735462482ded9aa77b5fe59919813fd0fa581df975818301908152739fdf9dc79d90b4403eef9ac8c904557fa47d26638288019081527443fc720efd4d6bd8a93bf55bb09fd37e98561bb5e360581b928701928352875194855290516001600160a01b03908116938501939093525190911682860152516affffffffffffffffffffff19169281019290925291519081900390910190f3fea26469706673582212203cdcf175d11c03233fa958f7773d10355f0c8c9706f19e657a1c4c6a6b5613ee64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0972ca3d {\n bool s_0;\n address s_1;\n address s_2;\n bytes21 s_3;\n }\n\n function test () public pure returns (S_0972ca3d memory) {\n S_0972ca3d memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x5462482dEd9aa77B5fe59919813fD0Fa581DF975;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x9fdf9DC79d90b4403EEf9ac8c904557fa47d2663;\n r.s_2 = r_2;\n }\n {\n bytes21 r_3 = bytes21(0x43fc720efd4d6bd8a93bf55bb09fd37e98561bb5e3);\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000005462482ded9aa77b5fe59919813fd0fa581df9750000000000000000000000009fdf9dc79d90b4403eef9ac8c904557fa47d266343fc720efd4d6bd8a93bf55bb09fd37e98561bb5e30000000000000000000000" + }, + { + "name": "random-(bool,address,bool,address)", + "type": "(bool,address,bool,address)", + "value": [ + true, + "0xec3bc7fA0fC74fFaB3c6b61454805Fb801C67Dd4", + true, + "0xea9e271dc738f6655932AAa2a8f9C9b3cedD6279" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xec3bc7fA0fC74fFaB3c6b61454805Fb801C67Dd4" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xea9e271dc738f6655932AAa2a8f9C9b3cedD6279" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101088061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051608080820183526000808352602080840182905283850182905260609384019190915283518083018552600180825273ec3bc7fa0fc74ffab3c6b61454805fb801c67dd482840190815282870182815273ea9e271dc738f6655932aaa2a8f9c9b3cedd6279938701938452875192835290516001600160a01b0390811694830194909452511515958101959095525116918301919091520160405180910390f3fea2646970667358221220921da0a7717980733d069b6017c6189a3dc575a3bbb7912af867a806ec4779fe64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e430a33f {\n bool s_0;\n address s_1;\n bool s_2;\n address s_3;\n }\n\n function test () public pure returns (S_e430a33f memory) {\n S_e430a33f memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xec3bc7fA0fC74fFaB3c6b61454805Fb801C67Dd4;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xea9e271dc738f6655932AAa2a8f9C9b3cedD6279;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ec3bc7fa0fc74ffab3c6b61454805fb801c67dd40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ea9e271dc738f6655932aaa2a8f9c9b3cedd6279" + }, + { + "name": "random-(bool,address,bool[])", + "type": "(bool,address,bool[])", + "value": [true, "0xD29F22AE454903B4844ad5aa029768Ed2E649C0e", [false, true, true]], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xD29F22AE454903B4844ad5aa029768Ed2E649C0e" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610201806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610144565b60405180910390f35b604080516060808201835260008083526020808401829052838501839052845180840186528086018490526001815273d29f22ae454903b4844ad5aa029768ed2e649c0e818301528551600380825260808201909752949590949293909183019080368337019050509050600080826000815181106100cf576100cf6101b5565b6020026020010190151590811515815250505060006001905080826001815181106100fc576100fc6101b5565b602002602001019015159081151581525050506000600190508082600281518110610129576101296101b5565b91151560209283029190910190910152506040820152919050565b60208082528251151582820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b808310156101aa57835115158252928401926001929092019190840190610188565b509695505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212200c89345a46f1494190b2653f259ef5dcfbbc349847b23444ccca099743be242464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ced390fb {\n bool s_0;\n address s_1;\n bool[] s_2;\n }\n\n function test () public pure returns (S_ced390fb memory) {\n S_ced390fb memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xD29F22AE454903B4844ad5aa029768Ed2E649C0e;\n r.s_1 = r_1;\n }\n {\n bool[] memory r_2 = new bool[](3);\n {\n bool r_2_0 = false;\n r_2[0] = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2[1] = r_2_1;\n }\n {\n bool r_2_2 = true;\n r_2[2] = r_2_2;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d29f22ae454903b4844ad5aa029768ed2e649c0e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bool,address,bytes2,uint64)", + "type": "(bool,address,bytes2,uint64)", + "value": [ + true, + "0xCD48695d5c634acE01eCa1233E4610aF670C9654", + "0x6d4b", + "6369165484800289978" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xCD48695d5c634acE01eCa1233E4610aF670C9654" + }, + { + "type": "hexstring", + "value": "0x6d4b" + }, + { + "type": "number", + "value": "6369165484800289978" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101118061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051608080820183526000808352602080840182905283850182905260609384019190915283518083018552600180825273cd48695d5c634ace01eca1233e4610af670c9654828401908152616d4b60f01b838801908152675863d2435d332cba938701938452875192835290516001600160a01b03169382019390935291516001600160f01b031916828601525167ffffffffffffffff169281019290925291519081900390910190f3fea2646970667358221220c5b6109b78273c8766be6f8596bf5ef04d331e8c8ea62e5b48fc32a867bbf89164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_485c7500 {\n bool s_0;\n address s_1;\n bytes2 s_2;\n uint64 s_3;\n }\n\n function test () public pure returns (S_485c7500 memory) {\n S_485c7500 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xCD48695d5c634acE01eCa1233E4610aF670C9654;\n r.s_1 = r_1;\n }\n {\n bytes2 r_2 = bytes2(0x6d4b);\n r.s_2 = r_2;\n }\n {\n uint64 r_3 = 6369165484800289978;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000cd48695d5c634ace01eca1233e4610af670c96546d4b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005863d2435d332cba" + }, + { + "name": "random-(bool,address,bytes9)[3]", + "type": "(bool,address,bytes9)[3]", + "value": [ + [false, "0xF9E60257d34e9B415AA3a8BAe91730bf1Dc66066", "0x1a0b17f67268a69810"], + [true, "0x17eB96049f846741f2f870ea6e88dE7CBc31CDB4", "0x25066586ac9e86f05d"], + [false, "0xfe2C6b71a49b035C330E8112EF33088B52BF547d", "0x0890f99e6e755152eb"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xF9E60257d34e9B415AA3a8BAe91730bf1Dc66066" + }, + { + "type": "hexstring", + "value": "0x1a0b17f67268a69810" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x17eB96049f846741f2f870ea6e88dE7CBc31CDB4" + }, + { + "type": "hexstring", + "value": "0x25066586ac9e86f05d" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xfe2C6b71a49b035C330E8112EF33088B52BF547d" + }, + { + "type": "hexstring", + "value": "0x0890f99e6e755152eb" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101ed806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610157565b60405180910390f35b610056610118565b61005e610118565b6040805160608082018352600080835273f9e60257d34e9b415aa3a8bae91730bf1dc660666020808501919091526801a0b17f67268a698160bc1b8486015292855283518083018552600181527317eb96049f846741f2f870ea6e88de7cbc31cdb4818501526825066586ac9e86f05d60b81b818601528584015283519182018452815273fe2c6b71a49b035c330e8112ef33088b52bf547d91810191909152680890f99e6e755152eb60b81b8183015290820152919050565b60405180606001604052806003905b60408051606081018252600080825260208083018290529282015282526000199092019101816101275790505090565b6101208101818360005b60038110156101ae5781518051151584526020808201516001600160a01b0316818601526040918201516001600160b81b0319169185019190915260609093019290910190600101610161565b5050509291505056fea26469706673582212203357b78fa50c4ea0dbfd5ad9ed00e23b8487cfe81ba2f4979d4b775bfa69186f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1b15932c {\n bool s_0;\n address s_1;\n bytes9 s_2;\n }\n\n function test () public pure returns (S_1b15932c[3] memory) {\n S_1b15932c[3] memory r;\n {\n S_1b15932c memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0xF9E60257d34e9B415AA3a8BAe91730bf1Dc66066;\n r_0.s_1 = r_0_1;\n }\n {\n bytes9 r_0_2 = bytes9(0x1a0b17f67268a69810);\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_1b15932c memory r_1;\n {\n bool r_1_0 = true;\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0x17eB96049f846741f2f870ea6e88dE7CBc31CDB4;\n r_1.s_1 = r_1_1;\n }\n {\n bytes9 r_1_2 = bytes9(0x25066586ac9e86f05d);\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_1b15932c memory r_2;\n {\n bool r_2_0 = false;\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0xfe2C6b71a49b035C330E8112EF33088B52BF547d;\n r_2.s_1 = r_2_1;\n }\n {\n bytes9 r_2_2 = bytes9(0x0890f99e6e755152eb);\n r_2.s_2 = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f9e60257d34e9b415aa3a8bae91730bf1dc660661a0b17f67268a698100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000017eb96049f846741f2f870ea6e88de7cbc31cdb425066586ac9e86f05d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fe2c6b71a49b035c330e8112ef33088b52bf547d0890f99e6e755152eb0000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,address,string)[3]", + "type": "(bool,address,string)[3]", + "value": [ + [ + false, + "0x3ff1AB54931E2C62e348dfD4C21e92310eFDFCFc", + "Moo é🚀oo🚀oM MééMooMoo🚀 MééooMo éMMéoé🚀oM" + ], + [ + true, + "0xA3b978f4Ba46782f418199C188D697462cADeE5f", + "Moo é🚀é🚀 🚀 M o M🚀o🚀ooMMooéé ooo éoo" + ], + [ + false, + "0x8F04da46cd8C340Cc71CB6C6b2dff5873b70aB4B", + "Moo é🚀🚀🚀éMo é 🚀 MMo🚀 o éM🚀éoéoooéMo MM🚀éM o🚀🚀Mooo" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x3ff1AB54931E2C62e348dfD4C21e92310eFDFCFc" + }, + { + "type": "string", + "value": "Moo é🚀oo🚀oM MééMooMoo🚀 MééooMo éMMéoé🚀oM" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xA3b978f4Ba46782f418199C188D697462cADeE5f" + }, + { + "type": "string", + "value": "Moo é🚀é🚀 🚀 M o M🚀o🚀ooMMooéé ooo éoo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x8F04da46cd8C340Cc71CB6C6b2dff5873b70aB4B" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀éMo é 🚀 MMo🚀 o éM🚀éoéoooéMo MM🚀éM o🚀🚀Mooo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061037a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101c7565b60405180910390f35b610056610186565b61005e610186565b60408051606080820183526000808352828401829052733ff1ab54931e2c62e348dfd4c21e92310efdfcfc6020808501919091528451928301909452603c808352929390929061027c90830139604083810191909152918352508051606080820183528183018190526001825273a3b978f4ba46782f418199c188d697462cadee5f602080840191909152835191820190935260398082529192600092906102b890830139604083015250808260016020020152506101356040805160608082018352600080835260208301529181019190915290565b6000808252738f04da46cd8c340cc71cb6c6b2dff5873b70ab4b6020808401919091526040805160808101909152605480825290916102f19083013960408301525080826002602002015250919050565b60405180606001604052806003905b604080516060808201835260008083526020830152918101919091528152602001906001900390816101955790505090565b602080825260009060808382018185018685805b600381101561026d57601f19898503810186528351805115158652888101516001600160a01b031689870152604090810151606091870182905280519187018290529084905b8082101561023e578282018b01518883018b0152908a0190610221565b8082111561024e57858a828a0101525b978a0197601f01909216959095018701945050918601916001016101db565b50919897505050505050505056fe4d6f6f20c3a9f09f9a806f6ff09f9a806f4d204dc3a9c3a94d6f6f4d6f6ff09f9a80204dc3a9c3a96f6f4d6f20c3a94d4dc3a96fc3a9f09f9a806f4d4d6f6f20c3a9f09f9a80c3a9f09f9a8020f09f9a80204d206f2020204df09f9a806ff09f9a806f6f4d4d6f6fc3a9c3a9206f6f6f20c3a96f6f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a94d6f20c3a920f09f9a80204d4d6ff09f9a80206f20c3a94df09f9a80c3a96fc3a96f6f6fc3a94d6f204d4df09f9a80c3a94d206ff09f9a80f09f9a804d6f6f6fa2646970667358221220517c094f24959cdbb2a7e5d2d2d58673abd3e2834b07d7626cbbce1bc4e82cbd64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_bacf6b24 {\n bool s_0;\n address s_1;\n string s_2;\n }\n\n function test () public pure returns (S_bacf6b24[3] memory) {\n S_bacf6b24[3] memory r;\n {\n S_bacf6b24 memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0x3ff1AB54931E2C62e348dfD4C21e92310eFDFCFc;\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀oo🚀oM MééMooMoo🚀 MééooMo éMMéoé🚀oM\";\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_bacf6b24 memory r_1;\n {\n bool r_1_0 = true;\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0xA3b978f4Ba46782f418199C188D697462cADeE5f;\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀é🚀 🚀 M o M🚀o🚀ooMMooéé ooo éoo\";\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_bacf6b24 memory r_2;\n {\n bool r_2_0 = false;\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0x8F04da46cd8C340Cc71CB6C6b2dff5873b70aB4B;\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀🚀🚀éMo é 🚀 MMo🚀 o éM🚀éoéoooéMo MM🚀éM o🚀🚀Mooo\";\n r_2.s_2 = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ff1ab54931e2c62e348dfd4c21e92310efdfcfc0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a806f6ff09f9a806f4d204dc3a9c3a94d6f6f4d6f6ff09f9a80204dc3a9c3a96f6f4d6f20c3a94d4dc3a96fc3a9f09f9a806f4d000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a3b978f4ba46782f418199c188d697462cadee5f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a80c3a9f09f9a8020f09f9a80204d206f2020204df09f9a806ff09f9a806f6f4d4d6f6fc3a9c3a9206f6f6f20c3a96f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f04da46cd8c340cc71cb6c6b2dff5873b70ab4b000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a94d6f20c3a920f09f9a80204d4d6ff09f9a80206f20c3a94df09f9a80c3a96fc3a96f6f6fc3a94d6f204d4df09f9a80c3a94d206ff09f9a80f09f9a804d6f6f6f000000000000000000000000" + }, + { + "name": "random-(bool,bool,bytes15,bool)", + "type": "(bool,bool,bytes15,bool)", + "value": [false, true, "0x62d4eec5efbab350363994b902a26c", false], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x62d4eec5efbab350363994b902a26c" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060f88061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051608080820183526000808352602080840182905283850182905260609384018290528451808401865282815280850183815260018284019081526e18b53bb17beeacd40d8e652e40a89b608a1b9288019283528751948552511515928401929092525170ffffffffffffffffffffffffffffffffff1916828601525115159281019290925291519081900390910190f3fea2646970667358221220d462c40bf615bcdf318545d61499a582cc32aea77f28b9a219cffd788a6fe0a364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_4b507b4e {\n bool s_0;\n bool s_1;\n bytes15 s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_4b507b4e memory) {\n S_4b507b4e memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n bytes15 r_2 = bytes15(0x62d4eec5efbab350363994b902a26c);\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162d4eec5efbab350363994b902a26c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,bool,int104[3])", + "type": "(bool,bool,int104[3])", + "value": [ + true, + true, + [ + "5518274814891216922217645970378", + "-355324295323054119925943105214", + "-4525577951850840940589507681966" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "5518274814891216922217645970378" + }, + { + "type": "number", + "value": "-355324295323054119925943105214" + }, + { + "type": "number", + "value": "-4525577951850840940589507681966" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610179806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f6565b60405180910390f35b6100566100b4565b61005e6100b4565b600180825260208201526100706100d8565b6c45a681f10ddae88f340a7993ca81526c047c1d5e464e8b3aae6aa7f6bd1960208201526c391eee57a5758561bb32381ead19604080830191909152820152919050565b60408051606081018252600080825260208201529081016100d36100d8565b905290565b60405180606001604052806003906020820280368337509192915050565b81511515815260208083015115158183015260408084015160a084019291840160005b6003811015610139578251600c0b82529183019190830190600101610119565b505050509291505056fea264697066735822122088b69861f3e5c952d9019508078efdd22d9962498526f824c8ac2ab408d3e17d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_564f7ea7 {\n bool s_0;\n bool s_1;\n int104[3] s_2;\n }\n\n function test () public pure returns (S_564f7ea7 memory) {\n S_564f7ea7 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n int104[3] memory r_2;\n {\n int104 r_2_0 = 5518274814891216922217645970378;\n r_2[0] = r_2_0;\n }\n {\n int104 r_2_1 = -355324295323054119925943105214;\n r_2[1] = r_2_1;\n }\n {\n int104 r_2_2 = -4525577951850840940589507681966;\n r_2[2] = r_2_2;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000045a681f10ddae88f340a7993cafffffffffffffffffffffffffffffffffffffffb83e2a1b9b174c55195580942ffffffffffffffffffffffffffffffffffffffc6e111a85a8a7a9e44cdc7e152" + }, + { + "name": "random-(bool,bool[1],bytes13)", + "type": "(bool,bool[1],bytes13)", + "value": [true, [true], "0xaef6ffbd7d705b1f57154635dd"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0xaef6ffbd7d705b1f57154635dd" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061016a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d5565b60405180910390f35b61005661008e565b61005e61008e565b6001815261006a6100b7565b6001815260208201526caef6ffbd7d705b1f57154635dd60981b6040820152919050565b60405180606001604052806000151581526020016100aa6100b7565b8152600060209091015290565b60405180602001604052806001906020820280368337509192915050565b81511515815260208083015160608301919081840160005b600181101561010c5782511515825291830191908301906001016100ed565b5050505060409283015172ffffffffffffffffffffffffffffffffffffff191691909201529056fea2646970667358221220b0cf8180785f7652375130d06f272c2c051a54f9744a62691d6bd9ddbc606a1464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_bbff13cb {\n bool s_0;\n bool[1] s_1;\n bytes13 s_2;\n }\n\n function test () public pure returns (S_bbff13cb memory) {\n S_bbff13cb memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bool[1] memory r_1;\n {\n bool r_1_0 = true;\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n bytes13 r_2 = bytes13(0xaef6ffbd7d705b1f57154635dd);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001aef6ffbd7d705b1f57154635dd00000000000000000000000000000000000000" + }, + { + "name": "random-(bool,bytes13,string,bytes25)", + "type": "(bool,bytes13,string,bytes25)", + "value": [ + true, + "0xc93c695a4286f8eb4d151b663e", + "Moo é🚀Moo🚀ooooM", + "0xaf423a6449df997e4b8f8a5663be9ce2335aa1b8a8626b7bb1" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xc93c695a4286f8eb4d151b663e" + }, + { + "type": "string", + "value": "Moo é🚀Moo🚀ooooM" + }, + { + "type": "hexstring", + "value": "0xaf423a6449df997e4b8f8a5663be9ce2335aa1b8a8626b7bb1" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101bd806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b604080516080808201835260008083526020808401829052606084860181905293840182905284519283018552828501848152938301918252600183526c649e34ad21437c75a68a8db31f60991b83820152845180860190955260168552754d6f6f20c3a9f09f9a804d6f6ff09f9a806f6f6f6f4d60501b90850152929091527faf423a6449df997e4b8f8a5663be9ce2335aa1b8a8626b7bb1000000000000009091526040516100e191906100ea565b60405180910390f35b6000602080835283511515818401526cffffffffffffffffffffffffff60981b8185015116604084015260408401516080606085015280518060a086015260005b818110156101475782810184015186820160c00152830161012b565b8181111561015957600060c083880101525b50606086015166ffffffffffffff19811660808701529250601f01601f19169390930160c00194935050505056fea2646970667358221220b4bc28e214ab12b4d0ccb8bb381db6dde57af494a07bb68974878c110ac83a3264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_34af8850 {\n bool s_0;\n bytes13 s_1;\n string s_2;\n bytes25 s_3;\n }\n\n function test () public pure returns (S_34af8850 memory) {\n S_34af8850 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes13 r_1 = bytes13(0xc93c695a4286f8eb4d151b663e);\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀Moo🚀ooooM\";\n r.s_2 = r_2;\n }\n {\n bytes25 r_3 = bytes25(0xaf423a6449df997e4b8f8a5663be9ce2335aa1b8a8626b7bb1);\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001c93c695a4286f8eb4d151b663e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080af423a6449df997e4b8f8a5663be9ce2335aa1b8a8626b7bb10000000000000000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a804d6f6ff09f9a806f6f6f6f4d00000000000000000000" + }, + { + "name": "random-(bool,bytes2,string[1])", + "type": "(bool,bytes2,string[1])", + "value": [ + true, + "0x88f6", + ["Moo é🚀 🚀Moo🚀oé🚀🚀éM o oMM 🚀🚀🚀 ooé🚀🚀🚀Mo o🚀Mo🚀éMo🚀🚀oéoM 🚀oM"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x88f6" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀Moo🚀oé🚀🚀éM o oMM 🚀🚀🚀 ooé🚀🚀🚀Mo o🚀Mo🚀éMo🚀🚀oéoM 🚀oM" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610240806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e8565b60405180910390f35b61005661009d565b61005e61009d565b6001815261447b60f11b60208201526100756100c1565b60006040518060a0016040528060728152602001610199607291398252506040820152919050565b60408051606081018252600080825260208201529081016100bc6100c1565b905290565b60405180602001604052806001905b60608152602001906001900390816100d05790505090565b60208082528251151582820152828101516001600160f01b0319166040808401919091528301516060808401526000919060a08401906080850184805b600181101561018b57878503607f1901835283518051808752835b8181101561015b578281018901518882018a01528801610140565b8181111561016b578489838a0101525b50601f01601f191695909501860194509285019291850191600101610125565b509297965050505050505056fe4d6f6f20c3a9f09f9a8020f09f9a804d6f6ff09f9a806fc3a9f09f9a80f09f9a80c3a94d206f206f4d4d20202020f09f9a80f09f9a80f09f9a80206f6fc3a9f09f9a80f09f9a80f09f9a804d6f206ff09f9a804d6ff09f9a80c3a94d6ff09f9a80f09f9a806fc3a96f4d2020f09f9a806f4da26469706673582212209ac7c8d0dad242bb11cf98f15c7542c14963a482cc9a8a42e2f74bad1b56780b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1b88010c {\n bool s_0;\n bytes2 s_1;\n string[1] s_2;\n }\n\n function test () public pure returns (S_1b88010c memory) {\n S_1b88010c memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes2 r_1 = bytes2(0x88f6);\n r.s_1 = r_1;\n }\n {\n string[1] memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀 🚀Moo🚀oé🚀🚀éM o oMM 🚀🚀🚀 ooé🚀🚀🚀Mo o🚀Mo🚀éMo🚀🚀oéoM 🚀oM\";\n r_2[0] = r_2_0;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000188f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000724d6f6f20c3a9f09f9a8020f09f9a804d6f6ff09f9a806fc3a9f09f9a80f09f9a80c3a94d206f206f4d4d20202020f09f9a80f09f9a80f09f9a80206f6fc3a9f09f9a80f09f9a80f09f9a804d6f206ff09f9a804d6ff09f9a80c3a94d6ff09f9a80f09f9a806fc3a96f4d2020f09f9a806f4d0000000000000000000000000000" + }, + { + "name": "random-(bool,bytes5,address,address)", + "type": "(bool,bytes5,address,address)", + "value": [ + true, + "0xf135be1b59", + "0x5e9881D485692b5c06C6196363d89F79532cc55f", + "0x43ea67Fe9580b4Ecda71Dc3ce17bfB31A34012C1" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xf135be1b59" + }, + { + "type": "address", + "value": "0x5e9881D485692b5c06C6196363d89F79532cc55f" + }, + { + "type": "address", + "value": "0x43ea67Fe9580b4Ecda71Dc3ce17bfB31A34012C1" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061011a8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b60408051608080820183526000808352602080840182905283850182905260609384019190915283518083018552600180825264f135be1b5960d81b828401908152735e9881d485692b5c06c6196363d89f79532cc55f8388019081527343ea67fe9580b4ecda71dc3ce17bfb31a34012c1938701938452875192835290516001600160d81b0319169382019390935291516001600160a01b03908116838701529051169281019290925291519081900390910190f3fea264697066735822122031c635ec5d8006aeb9a975878ceae49081832867dad5e4d9d7720f6a2d839ee064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d02b0925 {\n bool s_0;\n bytes5 s_1;\n address s_2;\n address s_3;\n }\n\n function test () public pure returns (S_d02b0925 memory) {\n S_d02b0925 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes5 r_1 = bytes5(0xf135be1b59);\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x5e9881D485692b5c06C6196363d89F79532cc55f;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x43ea67Fe9580b4Ecda71Dc3ce17bfB31A34012C1;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001f135be1b590000000000000000000000000000000000000000000000000000000000000000000000000000005e9881d485692b5c06c6196363d89f79532cc55f00000000000000000000000043ea67fe9580b4ecda71dc3ce17bfb31a34012c1" + }, + { + "name": "random-(bool,bytes6,bytes31,string)", + "type": "(bool,bytes6,bytes31,string)", + "value": [ + true, + "0x665c5be9c075", + "0x4cbd0773ee164c2d04920d53bc57bc70762939bd289e0e5231d22ada2c53d4", + "Moo é🚀oo MoéM M MMoéM o oé🚀🚀é M🚀oo🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x665c5be9c075" + }, + { + "type": "hexstring", + "value": "0x4cbd0773ee164c2d04920d53bc57bc70762939bd289e0e5231d22ada2c53d4" + }, + { + "type": "string", + "value": "Moo é🚀oo MoéM M MMoéM o oé🚀🚀é M🚀oo🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101da806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100df565b60405180910390f35b6040805160808082018352600080835260208084018290528385018290526060808501819052855193840186528381018190526001845265665c5be9c07560d01b848301527f4cbd0773ee164c2d04920d53bc57bc70762939bd289e0e5231d22ada2c53d4008487015285519081019095526039808652939492939192919061016c90830139606083015250919050565b60006020808352835115158184015265ffffffffffff60d01b8185015116604084015260ff196040850151166060840152606084015160808085015280518060a086015260005b818110156101425782810184015186820160c001528301610126565b8181111561015457600060c083880101525b50601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a806f6f20204d6fc3a94d204d204d4d6fc3a94d206f206fc3a9f09f9a80f09f9a80c3a920204df09f9a806f6ff09f9a80a264697066735822122008d694fcc699b73240b0839758625a9f6a9b523400ac018a745d5dd8e0e28c2064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b06595dd {\n bool s_0;\n bytes6 s_1;\n bytes31 s_2;\n string s_3;\n }\n\n function test () public pure returns (S_b06595dd memory) {\n S_b06595dd memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes6 r_1 = bytes6(0x665c5be9c075);\n r.s_1 = r_1;\n }\n {\n bytes31 r_2 = bytes31(0x4cbd0773ee164c2d04920d53bc57bc70762939bd289e0e5231d22ada2c53d4);\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀oo MoéM M MMoéM o oé🚀🚀é M🚀oo🚀\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001665c5be9c07500000000000000000000000000000000000000000000000000004cbd0773ee164c2d04920d53bc57bc70762939bd289e0e5231d22ada2c53d400000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a806f6f20204d6fc3a94d204d204d4d6fc3a94d206f206fc3a9f09f9a80f09f9a80c3a920204df09f9a806f6ff09f9a8000000000000000" + }, + { + "name": "random-(bool,int72[3][3])", + "type": "(bool,int72[3][3])", + "value": [ + false, + [ + ["-469523500842795952569", "1715605563778212810349", "1282964569406326277452"], + ["-2120292836351887402143", "991018991968929137160", "-2167241917488128487456"], + ["-839886152467685653407", "446823552623442692806", "-386855643523408721586"] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-469523500842795952569" + }, + { + "type": "number", + "value": "1715605563778212810349" + }, + { + "type": "number", + "value": "1282964569406326277452" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-2120292836351887402143" + }, + { + "type": "number", + "value": "991018991968929137160" + }, + { + "type": "number", + "value": "-2167241917488128487456" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-839886152467685653407" + }, + { + "type": "number", + "value": "446823552623442692806" + }, + { + "type": "number", + "value": "-386855643523408721586" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610235806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610190565b60405180910390f35b610056610124565b61005e610124565b6000815261006a610145565b610072610172565b681973f2905fd8ac69b8198152685d00cf5a96a423ce6d602082015268458cb5c66ffc11854c604082015281526100a7610172565b6872f0f95cde7fb1e49e1981526835b926ba8d55b7420860208083019190915268757c86016a6856701f1960408301528201526100e2610172565b682d87c305c305f93b9e198152681838ec25bd065c8ac66020808301919091526814f8b35622afebf6b119604080840191909152830191909152820152919050565b6040518060400160405280600015158152602001610140610145565b905290565b60405180606001604052806003905b61015c610172565b8152602001906001900390816101545790505090565b60405180606001604052806003906020820280368337509192915050565b815115158152602080830151610140830191908184016000805b60038082106101b957506101f4565b845184845b838110156101dd57825160080b825291880191908801906001016101be565b5050509385019350606092909201916001016101aa565b50505050509291505056fea2646970667358221220d547ec7e9a3ca2c1f2a0933c59653ae5ae1cce1d4ff51c83a2ee34409a4277b264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6d27caff {\n bool s_0;\n int72[3][3] s_1;\n }\n\n function test () public pure returns (S_6d27caff memory) {\n S_6d27caff memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n int72[3][3] memory r_1;\n {\n int72[3] memory r_1_0;\n {\n int72 r_1_0_0 = -469523500842795952569;\n r_1_0[0] = r_1_0_0;\n }\n {\n int72 r_1_0_1 = 1715605563778212810349;\n r_1_0[1] = r_1_0_1;\n }\n {\n int72 r_1_0_2 = 1282964569406326277452;\n r_1_0[2] = r_1_0_2;\n }\n r_1[0] = r_1_0;\n }\n {\n int72[3] memory r_1_1;\n {\n int72 r_1_1_0 = -2120292836351887402143;\n r_1_1[0] = r_1_1_0;\n }\n {\n int72 r_1_1_1 = 991018991968929137160;\n r_1_1[1] = r_1_1_1;\n }\n {\n int72 r_1_1_2 = -2167241917488128487456;\n r_1_1[2] = r_1_1_2;\n }\n r_1[1] = r_1_1;\n }\n {\n int72[3] memory r_1_2;\n {\n int72 r_1_2_0 = -839886152467685653407;\n r_1_2[0] = r_1_2_0;\n }\n {\n int72 r_1_2_1 = 446823552623442692806;\n r_1_2[1] = r_1_2_1;\n }\n {\n int72 r_1_2_2 = -386855643523408721586;\n r_1_2[2] = r_1_2_2;\n }\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffe68c0d6fa02753964700000000000000000000000000000000000000000000005d00cf5a96a423ce6d0000000000000000000000000000000000000000000000458cb5c66ffc11854cffffffffffffffffffffffffffffffffffffffffffffff8d0f06a321804e1b61000000000000000000000000000000000000000000000035b926ba8d55b74208ffffffffffffffffffffffffffffffffffffffffffffff8a8379fe9597a98fe0ffffffffffffffffffffffffffffffffffffffffffffffd2783cfa3cfa06c46100000000000000000000000000000000000000000000001838ec25bd065c8ac6ffffffffffffffffffffffffffffffffffffffffffffffeb074ca9dd5014094e" + }, + { + "name": "random-(bool,int80,address,(string))", + "type": "(bool,int80,address,(string))", + "value": [ + false, + "573446689183696551567915", + "0x3EdFA9e023Fb38c5815D2170A3478b954dd1E4A3", + ["Moo é🚀o é"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "573446689183696551567915" + }, + { + "type": "address", + "value": "0x3EdFA9e023Fb38c5815D2170A3478b954dd1E4A3" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o é" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101e1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610119565b60405180910390f35b6100566100d0565b61005e6100d0565b6000815269796e9b78b9cc964a622b602080830191909152733edfa9e023fb38c5815d2170a3478b954dd1e4a3604080840191909152805191820190526060815260408051808201909152600e81526d4d6f6f20c3a9f09f9a806f20c3a960901b602082015281526060820152919050565b6040518060800160405280600015158152602001600060090b815260200160006001600160a01b031681526020016101146040518060200160405280606081525090565b905290565b6000602080835283511515818401528084015160090b604084015260018060a01b0360408501511660608401526060840151608080850152805190508160a085015280518060c086015260005b818110156101825782810184015186820160e001528301610166565b8181111561019457600060e083880101525b50601f01601f19169390930160e00194935050505056fea2646970667358221220c8e8a8c9c2d240a403d1120e021f45b28a5491cf3a7c2cbacf49cee1e5fa2ae664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_030b0ee7 {\n bool s_0;\n int80 s_1;\n address s_2;\n S_97fc4627 s_3;\n }\n\n function test () public pure returns (S_030b0ee7 memory) {\n S_030b0ee7 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n int80 r_1 = 573446689183696551567915;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x3EdFA9e023Fb38c5815D2170A3478b954dd1E4A3;\n r.s_2 = r_2;\n }\n {\n S_97fc4627 memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀o é\";\n r_3.s_0 = r_3_0;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000796e9b78b9cc964a622b0000000000000000000000003edfa9e023fb38c5815d2170a3478b954dd1e4a300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a806f20c3a9000000000000000000000000000000000000" + }, + { + "name": "random-(bool,int80,uint128,bool)", + "type": "(bool,int80,uint128,bool)", + "value": [ + false, + "72467660412412256622728", + "206015650166593866837049100988678532182", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "72467660412412256622728" + }, + { + "type": "number", + "value": "206015650166593866837049100988678532182" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5060fe8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b604080516080808201835260008083526020808401829052838501829052606093840182905284518084018652828152808501838152690f587ad06af7fe3c98888284019081526f9afd2bc47b595f6adeefe5011081ec5692880192835287519485525160090b92840192909252516fffffffffffffffffffffffffffffffff16828601525115159281019290925291519081900390910190f3fea2646970667358221220fc530b8808a16daf282d4a75ad3fcc8f9cf899c9476752d4fdabd2967e09e11664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_909efdf8 {\n bool s_0;\n int80 s_1;\n uint128 s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_909efdf8 memory) {\n S_909efdf8 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n int80 r_1 = 72467660412412256622728;\n r.s_1 = r_1;\n }\n {\n uint128 r_2 = 206015650166593866837049100988678532182;\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f587ad06af7fe3c9888000000000000000000000000000000009afd2bc47b595f6adeefe5011081ec560000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,string,string)[3]", + "type": "(bool,string,string)[3]", + "value": [ + [false, "Moo é🚀M oo", "Moo é🚀M é oM M o🚀🚀M🚀MoM🚀é é🚀 oé🚀🚀éé🚀éoo🚀Mo🚀M o"], + [ + true, + "Moo é🚀oéoooéo🚀 🚀oo MMooM o ooM🚀 éMo🚀🚀oo🚀M🚀M🚀🚀 🚀éM🚀o", + "Moo é🚀ooo ooooé oMo🚀M o" + ], + [ + true, + "Moo é🚀o🚀🚀 Méooé 🚀 o🚀oMoMM M 🚀oooo🚀oM o🚀 ooo", + "Moo é🚀M🚀é🚀éoéo éooééo M🚀M o 🚀oo🚀🚀🚀🚀éooMoéo" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀M oo" + }, + { + "type": "string", + "value": "Moo é🚀M é oM M o🚀🚀M🚀MoM🚀é é🚀 oé🚀🚀éé🚀éoo🚀Mo🚀M o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀oéoooéo🚀 🚀oo MMooM o ooM🚀 éMo🚀🚀oo🚀M🚀M🚀🚀 🚀éM🚀o" + }, + { + "type": "string", + "value": "Moo é🚀ooo ooooé oMo🚀M o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀 Méooé 🚀 o🚀oMoMM M 🚀oooo🚀oM o🚀 ooo" + }, + { + "type": "string", + "value": "Moo é🚀M🚀é🚀éoéo éooééo M🚀M o 🚀oo🚀🚀🚀🚀éooMoéo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610465806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610262565b60405180910390f35b6100566101ca565b61005e6101ca565b610084604051806060016040528060001515815260200160608152602001606081525090565b6000808252604080518082018252600e81526d4d6f6f20c3a9f09f9a804d206f6f60901b602080830191909152808501919091528151608081019092526059808352906102e39083013960408381019190915291835250805160608082018352600082526020820181905291810191909152600181526040805160808101909152605c8082526000919061038660208301396020838101919091526040805180820182528281527f4d6f6f20c3a9f09f9a806f6f6f206f6f6f6fc3a920206f4d6ff09f9a804d206f8184015281850152848201939093528251606080820185528183018190528185015260018152835160808101909452604a8085529093600093509161033c9083013990508082602001819052505060006040518060800160405280604e81526020016103e2604e913960408301525080826002602002015250919050565b60405180606001604052806003905b6101ff604051806060016040528060001515815260200160608152602001606081525090565b8152602001906001900390816101d95790505090565b6000815180845260005b8181101561023b5760208185018101518683018201520161021f565b8181111561024d576000602083870101525b50601f01601f19169290920160200192915050565b60208082526000906080830183820185845b60038110156102d657601f19878503018352815160608151151586528682015181888801526102a582880182610215565b915050604080830151925086820381880152506102c28183610215565b955050509184019190840190600101610274565b5091969550505050505056fe4d6f6f20c3a9f09f9a804d20c3a9206f4d20204d20206ff09f9a80f09f9a804df09f9a804d6f4df09f9a80c3a920c3a9f09f9a80206fc3a9f09f9a80f09f9a80c3a9c3a9f09f9a80c3a96f6ff09f9a804d6ff09f9a804d206f4d6f6f20c3a9f09f9a806ff09f9a80f09f9a80204dc3a96f6fc3a920f09f9a8020206ff09f9a806f4d6f4d4d204d2020f09f9a806f6f6f6ff09f9a806f4d2020206ff09f9a80206f6f6f4d6f6f20c3a9f09f9a806fc3a96f6f6fc3a96ff09f9a8020f09f9a806f6f204d4d6f6f4d206f206f6f4df09f9a8020c3a94d6ff09f9a80f09f9a806f6ff09f9a804df09f9a804df09f9a80f09f9a8020f09f9a80c3a94df09f9a806f4d6f6f20c3a9f09f9a804df09f9a80c3a9f09f9a80c3a96fc3a96f20c3a96f6fc3a9c3a96f204df09f9a804d206f20f09f9a806f6ff09f9a80f09f9a80f09f9a80f09f9a80c3a96f6f4d6fc3a96fa26469706673582212200df76f36d6476ec735549593ab66e559dd50918056736d268d00603dc777c17364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_21333ac5 {\n bool s_0;\n string s_1;\n string s_2;\n }\n\n function test () public pure returns (S_21333ac5[3] memory) {\n S_21333ac5[3] memory r;\n {\n S_21333ac5 memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀M oo\";\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀M é oM M o🚀🚀M🚀MoM🚀é é🚀 oé🚀🚀éé🚀éoo🚀Mo🚀M o\";\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_21333ac5 memory r_1;\n {\n bool r_1_0 = true;\n r_1.s_0 = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀oéoooéo🚀 🚀oo MMooM o ooM🚀 éMo🚀🚀oo🚀M🚀M🚀🚀 🚀éM🚀o\";\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀ooo ooooé oMo🚀M o\";\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_21333ac5 memory r_2;\n {\n bool r_2_0 = true;\n r_2.s_0 = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀o🚀🚀 Méooé 🚀 o🚀oMoMM M 🚀oooo🚀oM o🚀 ooo\";\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀M🚀é🚀éoéo éooééo M🚀M o 🚀oo🚀🚀🚀🚀éooMoéo\";\n r_2.s_2 = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a804d206f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a804d20c3a9206f4d20204d20206ff09f9a80f09f9a804df09f9a804d6f4df09f9a80c3a920c3a9f09f9a80206fc3a9f09f9a80f09f9a80c3a9c3a9f09f9a80c3a96f6ff09f9a804d6ff09f9a804d206f000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a806fc3a96f6f6fc3a96ff09f9a8020f09f9a806f6f204d4d6f6f4d206f206f6f4df09f9a8020c3a94d6ff09f9a80f09f9a806f6ff09f9a804df09f9a804df09f9a80f09f9a8020f09f9a80c3a94df09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000204d6f6f20c3a9f09f9a806f6f6f206f6f6f6fc3a920206f4d6ff09f9a804d206f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a806ff09f9a80f09f9a80204dc3a96f6fc3a920f09f9a8020206ff09f9a806f4d6f4d4d204d2020f09f9a806f6f6f6ff09f9a806f4d2020206ff09f9a80206f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a804df09f9a80c3a9f09f9a80c3a96fc3a96f20c3a96f6fc3a9c3a96f204df09f9a804d206f20f09f9a806f6ff09f9a80f09f9a80f09f9a80f09f9a80c3a96f6f4d6fc3a96f000000000000000000000000000000000000" + }, + { + "name": "random-(bool,string,string)[4]", + "type": "(bool,string,string)[4]", + "value": [ + [ + false, + "Moo é🚀Mé oM 🚀M Moéé", + "Moo é🚀é é🚀M🚀 o oMéMo M é🚀ooooM🚀oo ooo🚀🚀 ééo🚀oo🚀🚀éoMé🚀Moé ooM" + ], + [ + true, + "Moo é🚀M🚀 🚀🚀 🚀éé🚀oMMooo oMMooéo🚀é 🚀éoMoo🚀MoéM oo🚀 o", + "Moo é🚀oé o🚀oéoM🚀🚀Moo M oMoooé ooo 🚀 éM🚀 MMéoéo Mo🚀oo🚀M🚀ooo" + ], + [true, "Moo é🚀", "Moo é🚀oéo é🚀M🚀ooéoMooéoé🚀éoo🚀Moo"], + [true, "Moo é🚀MéooooMéooo MéooMo ooooMéoooM o🚀oé MMooo🚀MooM", "Moo é🚀M "] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀Mé oM 🚀M Moéé" + }, + { + "type": "string", + "value": "Moo é🚀é é🚀M🚀 o oMéMo M é🚀ooooM🚀oo ooo🚀🚀 ééo🚀oo🚀🚀éoMé🚀Moé ooM" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀M🚀 🚀🚀 🚀éé🚀oMMooo oMMooéo🚀é 🚀éoMoo🚀MoéM oo🚀 o" + }, + { + "type": "string", + "value": "Moo é🚀oé o🚀oéoM🚀🚀Moo M oMoooé ooo 🚀 éM🚀 MMéoéo Mo🚀oo🚀M🚀ooo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀oéo é🚀M🚀ooéoMooéoé🚀éoo🚀Moo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀MéooooMéooo MéooMo ooooMéoooM o🚀oé MMooo🚀MooM" + }, + { + "type": "string", + "value": "Moo é🚀M " + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610537806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102ec565b60405180910390f35b610056610254565b61005e610254565b610084604051806060016040528060001515815260200160608152602001606081525090565b6000808252604080518082018252601d81527f4d6f6f20c3a9f09f9a804dc3a9206f4d20f09f9a804d204d6fc3a9c3a900000060208083019190915280850191909152815160a0810190925260688083529061040d9083013960408381019190915291835250805160608082018352600082526020820181905291810191909152600181526040805160808101909152605780825260009190610475602083013990508082602001819052505060006040518060800160405280605e815260200161036d605e913960408301525080826001602002018190525050610185604051806060016040528060001515815260200160608152602001606081525090565b60018152604080518082018252600a8152689adede418753e13f3560b71b602080830191909152808401919091528151606081019092526036808352600092916104cc9083013960408381019190915283810192909252508051606080820183526000825260208201819052918101919091526001815260408051608081019091526042808252600091906103cb6020830139602083810191909152604080518082018252600d81526c026b7b79061d4f84fcd4026901609d1b92810192909252830152506060820152919050565b60405180608001604052806004905b610289604051806060016040528060001515815260200160608152602001606081525090565b8152602001906001900390816102635790505090565b6000815180845260005b818110156102c5576020818501810151868301820152016102a9565b818111156102d7576000602083870101525b50601f01601f19169290920160200192915050565b602080825260009060a0830183820185845b600481101561036057601f198785030183528151606081511515865286820151818888015261032f8288018261029f565b9150506040808301519250868203818801525061034c818361029f565b9550505091840191908401906001016102fe565b5091969550505050505056fe4d6f6f20c3a9f09f9a806fc3a9206ff09f9a806fc3a96f4df09f9a80f09f9a804d6f6f204d20206f4d6f6f6fc3a9206f6f6f20f09f9a8020c3a94df09f9a80204d4dc3a96fc3a96f20204d6ff09f9a806f6ff09f9a804df09f9a806f6f6f4d6f6f20c3a9f09f9a804dc3a96f6f6f6f4dc3a96f6f6f204dc3a96f6f4d6f206f6f6f6f4dc3a96f6f6f4d206ff09f9a806fc3a9204d4d6f6f6ff09f9a804d6f6f4d4d6f6f20c3a9f09f9a80c3a920c3a9f09f9a804df09f9a80206f206f4dc3a94d6f204d20c3a9f09f9a806f6f6f6f4df09f9a806f6f20206f6f6ff09f9a80f09f9a8020c3a9c3a96ff09f9a806f6ff09f9a80f09f9a80c3a96f4dc3a9f09f9a804d6fc3a9206f6f4d4d6f6f20c3a9f09f9a804df09f9a8020f09f9a80f09f9a8020f09f9a80c3a9c3a9f09f9a806f4d4d6f6f6f206f4d4d6f6fc3a96ff09f9a80c3a920f09f9a80c3a96f4d6f6ff09f9a804d6fc3a94d206f6ff09f9a80206f4d6f6f20c3a9f09f9a806fc3a96f20c3a9f09f9a804df09f9a806f6fc3a96f4d6f6fc3a96fc3a9f09f9a80c3a96f6ff09f9a804d6f6fa264697066735822122022508cff67ff2096dcbf9999526ca7fdb7781cfd51db0db76f421aec9a850c0764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_21333ac5 {\n bool s_0;\n string s_1;\n string s_2;\n }\n\n function test () public pure returns (S_21333ac5[4] memory) {\n S_21333ac5[4] memory r;\n {\n S_21333ac5 memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀Mé oM 🚀M Moéé\";\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀é é🚀M🚀 o oMéMo M é🚀ooooM🚀oo ooo🚀🚀 ééo🚀oo🚀🚀éoMé🚀Moé ooM\";\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_21333ac5 memory r_1;\n {\n bool r_1_0 = true;\n r_1.s_0 = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀M🚀 🚀🚀 🚀éé🚀oMMooo oMMooéo🚀é 🚀éoMoo🚀MoéM oo🚀 o\";\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀oé o🚀oéoM🚀🚀Moo M oMoooé ooo 🚀 éM🚀 MMéoéo Mo🚀oo🚀M🚀ooo\";\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_21333ac5 memory r_2;\n {\n bool r_2_0 = true;\n r_2.s_0 = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀\";\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀oéo é🚀M🚀ooéoMooéoé🚀éoo🚀Moo\";\n r_2.s_2 = r_2_2;\n }\n r[2] = r_2;\n }\n {\n S_21333ac5 memory r_3;\n {\n bool r_3_0 = true;\n r_3.s_0 = r_3_0;\n }\n {\n string memory r_3_1 = unicode\"Moo é🚀MéooooMéooo MéooMo ooooMéoooM o🚀oé MMooo🚀MooM\";\n r_3.s_1 = r_3_1;\n }\n {\n string memory r_3_2 = unicode\"Moo é🚀M \";\n r_3.s_2 = r_3_2;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000004200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a804dc3a9206f4d20f09f9a804d204d6fc3a9c3a900000000000000000000000000000000000000000000000000000000000000000000684d6f6f20c3a9f09f9a80c3a920c3a9f09f9a804df09f9a80206f206f4dc3a94d6f204d20c3a9f09f9a806f6f6f6f4df09f9a806f6f20206f6f6ff09f9a80f09f9a8020c3a9c3a96ff09f9a806f6ff09f9a80f09f9a80c3a96f4dc3a9f09f9a804d6fc3a9206f6f4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a804df09f9a8020f09f9a80f09f9a8020f09f9a80c3a9c3a9f09f9a806f4d4d6f6f6f206f4d4d6f6fc3a96ff09f9a80c3a920f09f9a80c3a96f4d6f6ff09f9a804d6fc3a94d206f6ff09f9a80206f000000000000000000000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a806fc3a9206ff09f9a806fc3a96f4df09f9a80f09f9a804d6f6f204d20206f4d6f6f6fc3a9206f6f6f20f09f9a8020c3a94df09f9a80204d4dc3a96fc3a96f20204d6ff09f9a806f6ff09f9a804df09f9a806f6f6f00000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a806fc3a96f20c3a9f09f9a804df09f9a806f6fc3a96f4d6f6fc3a96fc3a9f09f9a80c3a96f6ff09f9a804d6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a804dc3a96f6f6f6f4dc3a96f6f6f204dc3a96f6f4d6f206f6f6f6f4dc3a96f6f6f4d206ff09f9a806fc3a9204d4d6f6f6ff09f9a804d6f6f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a804d202000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,uint104,int112)[2]", + "type": "(bool,uint104,int112)[2]", + "value": [ + [true, "10897960937677632658009027914659", "-2394508061600650218386443379130333"], + [false, "9623630749379145276203501536534", "1726005888073175465935752551617735"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "10897960937677632658009027914659" + }, + { + "type": "number", + "value": "-2394508061600650218386443379130333" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "9623630749379145276203501536534" + }, + { + "type": "number", + "value": "1726005888073175465935752551617735" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101a9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610115565b60405180910390f35b6100566100d6565b61005e6100d6565b6040805160608082018352600182526c898d3601069cdaf51c1f7e2ba36020808401919091526d760ef0d52871f3c5374f3547bfdc198385015291845282519081018352600081526c7977a0c73bc234ca143132c516818301526d551941cfc439765c332793fa54c792810192909252820152919050565b60405180604001604052806002905b60408051606081018252600080825260208083018290529282015282526000199092019101816100e55790505090565b60c08101818360005b600281101561016a5781518051151584526020808201516cffffffffffffffffffffffffff1681860152604091820151600d0b918501919091526060909301929091019060010161011e565b5050509291505056fea26469706673582212205c66438fbf1a2529a7b88d0a6f3f895e21bc80a24bad72b24f6f8b830874f7f564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c5e42c1b {\n bool s_0;\n uint104 s_1;\n int112 s_2;\n }\n\n function test () public pure returns (S_c5e42c1b[2] memory) {\n S_c5e42c1b[2] memory r;\n {\n S_c5e42c1b memory r_0;\n {\n bool r_0_0 = true;\n r_0.s_0 = r_0_0;\n }\n {\n uint104 r_0_1 = 10897960937677632658009027914659;\n r_0.s_1 = r_0_1;\n }\n {\n int112 r_0_2 = -2394508061600650218386443379130333;\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_c5e42c1b memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n {\n uint104 r_1_1 = 9623630749379145276203501536534;\n r_1.s_1 = r_1_1;\n }\n {\n int112 r_1_2 = 1726005888073175465935752551617735;\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000898d3601069cdaf51c1f7e2ba3ffffffffffffffffffffffffffffffffffff89f10f2ad78e0c3ac8b0cab840230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007977a0c73bc234ca143132c516000000000000000000000000000000000000551941cfc439765c332793fa54c7" + }, + { + "name": "random-(bool[1],bool,bytes15)", + "type": "(bool[1],bool,bytes15)", + "value": [[false], false, "0xa3f5c43f26d42fadef5511241e072c"], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xa3f5c43f26d42fadef5511241e072c" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061016a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d5565b60405180910390f35b610056610090565b61005e610090565b6100666100b7565b600080825290825260208201526e28fd710fc9b50beb7bd544490781cb608a1b6040820152919050565b60405180606001604052806100a36100b7565b815260006020820181905260409091015290565b60405180602001604052806001906020820280368337509192915050565b815160608201908260005b600181101561010157825115158252602092830192909101906001016100e0565b50505060208301511515602083015270ffffffffffffffffffffffffffffffffff1960408401511660408301529291505056fea26469706673582212206c162cda0cdda7511fdc608ed81dfe9e7cce7cb9e0dc782cd4e0df810489da8464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a7bf94ae {\n bool[1] s_0;\n bool s_1;\n bytes15 s_2;\n }\n\n function test () public pure returns (S_a7bf94ae memory) {\n S_a7bf94ae memory r;\n {\n bool[1] memory r_0;\n {\n bool r_0_0 = false;\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n bytes15 r_2 = bytes15(0xa3f5c43f26d42fadef5511241e072c);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3f5c43f26d42fadef5511241e072c0000000000000000000000000000000000" + }, + { + "name": "random-(bytes1,int88,address)[]", + "type": "(bytes1,int88,address)[]", + "value": [ + ["0x81", "96689029473848888990791760", "0xe1877eE5EFda11f1ce8707D7C1190082AeF59851"], + ["0x80", "-25733286607684787728061739", "0x96037Ac61419eC955148dC2758bD1480D0E118f7"], + ["0xa5", "-53286608326278477675683081", "0x8B15f5751b99F08Fe39b70f91930Ff155b5aaA5c"], + ["0xee", "106315638705562431437430078", "0xc75e8C3C59D6FA8D4785584f8Ea8EA2859f4672f"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x81" + }, + { + "type": "number", + "value": "96689029473848888990791760" + }, + { + "type": "address", + "value": "0xe1877eE5EFda11f1ce8707D7C1190082AeF59851" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x80" + }, + { + "type": "number", + "value": "-25733286607684787728061739" + }, + { + "type": "address", + "value": "0x96037Ac61419eC955148dC2758bD1480D0E118f7" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa5" + }, + { + "type": "number", + "value": "-53286608326278477675683081" + }, + { + "type": "address", + "value": "0x8B15f5751b99F08Fe39b70f91930Ff155b5aaA5c" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xee" + }, + { + "type": "number", + "value": "106315638705562431437430078" + }, + { + "type": "address", + "value": "0xc75e8C3C59D6FA8D4785584f8Ea8EA2859f4672f" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610323806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610268565b60405180910390f35b60408051600480825260a0820190925260609160009190816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161006a57505060408051606081018252608160f81b81526a4ffab2ca61b01054767850602082015273e1877ee5efda11f1ce8707d7c1190082aef5985191810191909152815191925090819083906000906100ed576100ed6102d7565b60200260200101819052505061011c604080516060810182526000808252602082018190529181019190915290565b600160ff1b81526a15493c43239d906ec8952a1960208201527396037ac61419ec955148dc2758bd1480d0e118f760408201528151819083906001908110610166576101666102d7565b602002602001018190525050610195604080516060810182526000808252602082018190529181019190915290565b60a560f81b81526a2c13e0d359a77a90f6dd08196020820152738b15f5751b99f08fe39b70f91930ff155b5aaa5c604082015281518190839060029081106101df576101df6102d7565b60200260200101819052505061020e604080516060810182526000808252602082018190529181019190915290565b607760f91b81526a57f136529ba9e3d0c85d3e602082015273c75e8c3c59d6fa8d4785584f8ea8ea2859f4672f60408201528151819083906003908110610257576102576102d7565b602090810291909101015250919050565b602080825282518282018190526000919060409081850190868401855b828110156102ca57815180516001600160f81b031916855286810151600a0b878601528501516001600160a01b03168585015260609093019290850190600101610285565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212206a16ff614d76671fd070bf9e163f5fb60fd6843cd5acd3bbdc77e681eec0d8ec64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_64212798 {\n bytes1 s_0;\n int88 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_64212798[] memory) {\n S_64212798[] memory r = new S_64212798[](4);\n {\n S_64212798 memory r_0;\n {\n bytes1 r_0_0 = bytes1(0x81);\n r_0.s_0 = r_0_0;\n }\n {\n int88 r_0_1 = 96689029473848888990791760;\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0xe1877eE5EFda11f1ce8707D7C1190082AeF59851;\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_64212798 memory r_1;\n {\n bytes1 r_1_0 = bytes1(0x80);\n r_1.s_0 = r_1_0;\n }\n {\n int88 r_1_1 = -25733286607684787728061739;\n r_1.s_1 = r_1_1;\n }\n {\n address r_1_2 = 0x96037Ac61419eC955148dC2758bD1480D0E118f7;\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_64212798 memory r_2;\n {\n bytes1 r_2_0 = bytes1(0xa5);\n r_2.s_0 = r_2_0;\n }\n {\n int88 r_2_1 = -53286608326278477675683081;\n r_2.s_1 = r_2_1;\n }\n {\n address r_2_2 = 0x8B15f5751b99F08Fe39b70f91930Ff155b5aaA5c;\n r_2.s_2 = r_2_2;\n }\n r[2] = r_2;\n }\n {\n S_64212798 memory r_3;\n {\n bytes1 r_3_0 = bytes1(0xee);\n r_3.s_0 = r_3_0;\n }\n {\n int88 r_3_1 = 106315638705562431437430078;\n r_3.s_1 = r_3_1;\n }\n {\n address r_3_2 = 0xc75e8C3C59D6FA8D4785584f8Ea8EA2859f4672f;\n r_3.s_2 = r_3_2;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000481000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ffab2ca61b01054767850000000000000000000000000e1877ee5efda11f1ce8707d7c1190082aef598518000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffeab6c3bcdc626f91376ad500000000000000000000000096037ac61419ec955148dc2758bd1480d0e118f7a500000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffd3ec1f2ca658856f0922f70000000000000000000000008b15f5751b99f08fe39b70f91930ff155b5aaa5cee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057f136529ba9e3d0c85d3e000000000000000000000000c75e8c3c59d6fa8d4785584f8ea8ea2859f4672f" + }, + { + "name": "random-(bytes15,(bool[]))[4]", + "type": "(bytes15,(bool[]))[4]", + "value": [ + ["0x76ea9a2118b8e8b44b100354613c78", [[false]]], + ["0x521d2b5a20aef001aa1722cf09bb92", [[false]]], + ["0x5268bbd08e2c9c5e2e1a653eacc992", [[false, true, true]]], + ["0x96abde6d77951c8512311a136bb948", [[false]]] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x76ea9a2118b8e8b44b100354613c78" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x521d2b5a20aef001aa1722cf09bb92" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x5268bbd08e2c9c5e2e1a653eacc992" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x96abde6d77951c8512311a136bb948" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610477806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061037f565b60405180910390f35b610056610334565b61005e610334565b610084604080518082018252600081528151602081810190935260608152909182015290565b6e0edd534423171d168962006a8c278f608b1b8152604080516020808201835260608252825160018082528185019094529192600092918281019080368337019050509050600080826000815181106100df576100df61042b565b911515602092830291909101820152918352508281019190915290825260408051808201825260008152815180840190925260608252918201526e290e95ad10577800d50b916784ddc960891b8152604080516020808201835260608252825160018082528185019094529192600092918281019080368337019050509050600080826000815181106101745761017461042b565b91151560209283029190910182015291835250820152808260016020020152506101ba604080518082018252600081528151602081810190935260608152909182015290565b6e29345de847164e2f170d329f5664c960891b815260408051602081018252606081528151600380825260808201909352909160009190816020016020820280368337019050509050600080826000815181106102195761021961042b565b6020026020010190151590811515815250505060006001905080826001815181106102465761024661042b565b6020026020010190151590811515815250505060006001905080826002815181106102735761027361042b565b91151560209283029190910182015291835250820152808260026020020152506102b9604080518082018252600081528151602081810190935260608152909182015290565b6e12d57bcdaef2a390a24623426d7729608b1b8152604080516020808201835260608252825160018082528185019094529192600092918281019080368337019050509050600080826000815181106103145761031461042b565b911515602092830291909101820152918352508201526060820152919050565b60405180608001604052806004905b610369604080518082018252600081528151602081810190935260608152909182015290565b8152602001906001900390816103435790505090565b602080825260009060a083018382018584805b600481101561041e57878503601f190184528251805170ffffffffffffffffffffffffffffffffff191686528601516040878701819052905190860187905280516060870181905290870190608087019084905b80821015610408578351151583529289019291890191600191909101906103e6565b5090965050509285019291850191600101610392565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220384bb9d92a4741326fd07869f2c46789419c74d6894edd83627960319b8abd5464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8761250c {\n bool[] s_0;\n }\n\n struct S_c73abf28 {\n bytes15 s_0;\n S_8761250c s_1;\n }\n\n function test () public pure returns (S_c73abf28[4] memory) {\n S_c73abf28[4] memory r;\n {\n S_c73abf28 memory r_0;\n {\n bytes15 r_0_0 = bytes15(0x76ea9a2118b8e8b44b100354613c78);\n r_0.s_0 = r_0_0;\n }\n {\n S_8761250c memory r_0_1;\n {\n bool[] memory r_0_1_0 = new bool[](1);\n {\n bool r_0_1_0_0 = false;\n r_0_1_0[0] = r_0_1_0_0;\n }\n r_0_1.s_0 = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_c73abf28 memory r_1;\n {\n bytes15 r_1_0 = bytes15(0x521d2b5a20aef001aa1722cf09bb92);\n r_1.s_0 = r_1_0;\n }\n {\n S_8761250c memory r_1_1;\n {\n bool[] memory r_1_1_0 = new bool[](1);\n {\n bool r_1_1_0_0 = false;\n r_1_1_0[0] = r_1_1_0_0;\n }\n r_1_1.s_0 = r_1_1_0;\n }\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n {\n S_c73abf28 memory r_2;\n {\n bytes15 r_2_0 = bytes15(0x5268bbd08e2c9c5e2e1a653eacc992);\n r_2.s_0 = r_2_0;\n }\n {\n S_8761250c memory r_2_1;\n {\n bool[] memory r_2_1_0 = new bool[](3);\n {\n bool r_2_1_0_0 = false;\n r_2_1_0[0] = r_2_1_0_0;\n }\n {\n bool r_2_1_0_1 = true;\n r_2_1_0[1] = r_2_1_0_1;\n }\n {\n bool r_2_1_0_2 = true;\n r_2_1_0[2] = r_2_1_0_2;\n }\n r_2_1.s_0 = r_2_1_0;\n }\n r_2.s_1 = r_2_1;\n }\n r[2] = r_2;\n }\n {\n S_c73abf28 memory r_3;\n {\n bytes15 r_3_0 = bytes15(0x96abde6d77951c8512311a136bb948);\n r_3.s_0 = r_3_0;\n }\n {\n S_8761250c memory r_3_1;\n {\n bool[] memory r_3_1_0 = new bool[](1);\n {\n bool r_3_1_0_0 = false;\n r_3_1_0[0] = r_3_1_0_0;\n }\n r_3_1.s_0 = r_3_1_0;\n }\n r_3.s_1 = r_3_1;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002a076ea9a2118b8e8b44b100354613c7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000521d2b5a20aef001aa1722cf09bb92000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000005268bbd08e2c9c5e2e1a653eacc992000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000196abde6d77951c8512311a136bb94800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes17,address,bytes16,bool)", + "type": "(bytes17,address,bytes16,bool)", + "value": [ + "0x48170a5c48afa3be449a40727fd5643079", + "0x94b6B060130928C8b377C14a7b94653145796F35", + "0xa9aa5ae79bf0bd24ef68dd3ef2bf9da2", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x48170a5c48afa3be449a40727fd5643079" + }, + { + "type": "address", + "value": "0x94b6B060130928C8b377C14a7b94653145796F35" + }, + { + "type": "hexstring", + "value": "0xa9aa5ae79bf0bd24ef68dd3ef2bf9da2" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101288061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160808082018352600080835260208084018290528385018290526060938401829052845180840186528085019283527048170a5c48afa3be449a40727fd564307960781b8082527394b6b060130928c8b377c14a7b94653145796f358284019081526f54d52d73cdf85e9277b46e9f795fced160811b9288019283528751918252516001600160a01b031692810192909252516fffffffffffffffffffffffffffffffff191694810194909452511515918301919091520160405180910390f3fea2646970667358221220ae3394d61938fe762200f97a62b8f244c755b22c48a8b6425d07f398805346a264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e7470650 {\n bytes17 s_0;\n address s_1;\n bytes16 s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_e7470650 memory) {\n S_e7470650 memory r;\n {\n bytes17 r_0 = bytes17(0x48170a5c48afa3be449a40727fd5643079);\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x94b6B060130928C8b377C14a7b94653145796F35;\n r.s_1 = r_1;\n }\n {\n bytes16 r_2 = bytes16(0xa9aa5ae79bf0bd24ef68dd3ef2bf9da2);\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x48170a5c48afa3be449a40727fd564307900000000000000000000000000000000000000000000000000000094b6b060130928c8b377c14a7b94653145796f35a9aa5ae79bf0bd24ef68dd3ef2bf9da2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes17,address,uint240,int192)", + "type": "(bytes17,address,uint240,int192)", + "value": [ + "0xa051f98fa586568b0cb29ae0670495a38d", + "0x3b00623d7d2B42B61d4064EECd30251F12dea20f", + "1526330976129365742050149646219554567058825406442603186021962681683462418", + "8785641400664625891243227832234213859652494747302520167" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa051f98fa586568b0cb29ae0670495a38d" + }, + { + "type": "address", + "value": "0x3b00623d7d2B42B61d4064EECd30251F12dea20f" + }, + { + "type": "number", + "value": "1526330976129365742050149646219554567058825406442603186021962681683462418" + }, + { + "type": "number", + "value": "8785641400664625891243227832234213859652494747302520167" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101478061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160808082018352600080835260208084018290528385018290526060938401919091528351808301855270a051f98fa586568b0cb29ae0670495a38d60781b808252733b00623d7d2b42b61d4064eecd30251f12dea20f8284019081527ddd26c32fb09344433b2a6781a3456ccaa0fd74b2d9ebcc2eeb087b96c912838801908152765bb9f3c95b8418e219548facea3a4c36c66684d0726567938701938452875192835290516001600160a01b03169382019390935291516001600160f01b0316828601525160170b9281019290925291519081900390910190f3fea264697066735822122005122ac6860fa083da4cb4b3d393758113e3061845eca8d1d910262aed66c74064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6b15d853 {\n bytes17 s_0;\n address s_1;\n uint240 s_2;\n int192 s_3;\n }\n\n function test () public pure returns (S_6b15d853 memory) {\n S_6b15d853 memory r;\n {\n bytes17 r_0 = bytes17(0xa051f98fa586568b0cb29ae0670495a38d);\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x3b00623d7d2B42B61d4064EECd30251F12dea20f;\n r.s_1 = r_1;\n }\n {\n uint240 r_2 = 1526330976129365742050149646219554567058825406442603186021962681683462418;\n r.s_2 = r_2;\n }\n {\n int192 r_3 = 8785641400664625891243227832234213859652494747302520167;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0xa051f98fa586568b0cb29ae0670495a38d0000000000000000000000000000000000000000000000000000003b00623d7d2b42b61d4064eecd30251f12dea20f0000dd26c32fb09344433b2a6781a3456ccaa0fd74b2d9ebcc2eeb087b96c9120000000000000000005bb9f3c95b8418e219548facea3a4c36c66684d0726567" + }, + { + "name": "random-(bytes23,string[3],string)", + "type": "(bytes23,string[3],string)", + "value": [ + "0xefc795069c358388b3f891b191fae431455542adeab927", + ["Moo é🚀", "Moo é🚀oo oo MooM🚀é🚀🚀éo🚀", "Moo é🚀🚀o🚀ooooéoo"], + "Moo é🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xefc795069c358388b3f891b191fae431455542adeab927" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀oo oo MooM🚀é🚀🚀éo🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀o🚀ooooéoo" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101d6565b60405180910390f35b61005661013a565b61005e61013a565b7fefc795069c358388b3f891b191fae431455542adeab9270000000000000000008152610089610162565b604080518082018252600a8152689adede418753e13f3560b71b60208083019190915290835281516060810190925260298083526000929161026090830139602083810191909152604080518082018252601b81527f4d6f6f20c3a9f09f9a80f09f9a806ff09f9a806f6f6f6fc3a96f6f000000000081840152818501528482019390935282518084018452600a8152689adede418753e13f3560b71b918101919091529183019190915250919050565b60408051606081019091526000815260208101610155610162565b8152602001606081525090565b60405180606001604052806003905b60608152602001906001900390816101715790505090565b6000815180845260005b818110156101af57602081850181015186830182015201610193565b818111156101c1576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825168ffffffffffffffffff19168282015282810151606060408401526000919060e084019060808501845b600381101561023657607f19878503018252610224848451610189565b93509184019190840190600101610207565b5050506040850151848203601f1901606086015291506102568183610189565b9594505050505056fe4d6f6f20c3a9f09f9a806f6f206f6f204d6f6f4df09f9a80c3a9f09f9a80f09f9a80c3a96ff09f9a80a264697066735822122052f70258880499b9ef5423112182c4c90ac96fb781e42ead1c47e12c4fcca51064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a9504516 {\n bytes23 s_0;\n string[3] s_1;\n string s_2;\n }\n\n function test () public pure returns (S_a9504516 memory) {\n S_a9504516 memory r;\n {\n bytes23 r_0 = bytes23(0xefc795069c358388b3f891b191fae431455542adeab927);\n r.s_0 = r_0;\n }\n {\n string[3] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀\";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀oo oo MooM🚀é🚀🚀éo🚀\";\n r_1[1] = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀🚀o🚀ooooéoo\";\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020efc795069c358388b3f891b191fae431455542adeab927000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000294d6f6f20c3a9f09f9a806f6f206f6f204d6f6f4df09f9a80c3a9f09f9a80f09f9a80c3a96ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a80f09f9a806ff09f9a806f6f6f6fc3a96f6f0000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes24,int208,(string[]))", + "type": "(bytes24,int208,(string[]))", + "value": [ + "0x941a294625d2855ea66bd84f9b2f578d5e73285e3954cb34", + "189590163137027577438410203932861773866553110770191896897778427", + [[]] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x941a294625d2855ea66bd84f9b2f578d5e73285e3954cb34" + }, + { + "type": "number", + "value": "189590163137027577438410203932861773866553110770191896897778427" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610232806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061012c565b60405180910390f35b6100566100ea565b61005e6100ea565b7f941a294625d2855ea66bd84f9b2f578d5e73285e3954cb34000000000000000081527975fb749dc54503e832d83acd021f6c31ce24701c9ac75611f2fb60208083019190915260408051808301825260608152815160008082529381019092529190816100dc565b60608152602001906001900390816100c75790505b508252506040820152919050565b6040518060600160405280600067ffffffffffffffff19168152602001600060190b81526020016101276040518060200160405280606081525090565b905290565b6000602080835267ffffffffffffffff19845116818401528084015160190b6040840152604084015160608085015260a084018151915082608086015280825180835260c08701915060c08160051b880101925084840193506000805b828110156101ee5788850360bf1901845285518051808752835b818110156101be578281018a01518882018b015289016101a3565b818111156101ce57848a838a0101525b5096880196601f01601f1916959095018701945092860192600101610189565b50929897505050505050505056fea2646970667358221220a5ac951527f9ce57bad0ebd7a0b09a6e09578091eeaca4314d9bbdfd27f82c0164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a227fd7a {\n string[] s_0;\n }\n\n struct S_dc91c717 {\n bytes24 s_0;\n int208 s_1;\n S_a227fd7a s_2;\n }\n\n function test () public pure returns (S_dc91c717 memory) {\n S_dc91c717 memory r;\n {\n bytes24 r_0 = bytes24(0x941a294625d2855ea66bd84f9b2f578d5e73285e3954cb34);\n r.s_0 = r_0;\n }\n {\n int208 r_1 = 189590163137027577438410203932861773866553110770191896897778427;\n r.s_1 = r_1;\n }\n {\n S_a227fd7a memory r_2;\n {\n string[] memory r_2_0 = new string[](0);\n r_2.s_0 = r_2_0;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020941a294625d2855ea66bd84f9b2f578d5e73285e3954cb34000000000000000000000000000075fb749dc54503e832d83acd021f6c31ce24701c9ac75611f2fb000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes26,bytes19,bytes23,int64)", + "type": "(bytes26,bytes19,bytes23,int64)", + "value": [ + "0xe5022f13188479f0ba20b29547ed8d49e58a3317ab76847b81b9", + "0x5ba0fb1406861674b130dcbe81ea33d03aa125", + "0x0b7926b050b02dd2fa36aaa3860b3f487bad7c77a17377", + "-3571675893422183882" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xe5022f13188479f0ba20b29547ed8d49e58a3317ab76847b81b9" + }, + { + "type": "hexstring", + "value": "0x5ba0fb1406861674b130dcbe81ea33d03aa125" + }, + { + "type": "hexstring", + "value": "0x0b7926b050b02dd2fa36aaa3860b3f487bad7c77a17377" + }, + { + "type": "number", + "value": "-3571675893422183882" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101538061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b604080516080808201835260008083526020808401829052838501829052606093840191909152835180830185527fe5022f13188479f0ba20b29547ed8d49e58a3317ab76847b81b9000000000000808252725ba0fb1406861674b130dcbe81ea33d03aa12560681b8284019081527f0b7926b050b02dd2fa36aaa3860b3f487bad7c77a17377000000000000000000838801908152673191244d304155c919938701938452875192835290516cffffffffffffffffffffffffff191693820193909352915168ffffffffffffffffff1916828601525160070b9281019290925291519081900390910190f3fea2646970667358221220a91f96c0907a5af2f7c882c88ac77f7010b5b6b6b828ed7ce69e6b79f57f056264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fd79e408 {\n bytes26 s_0;\n bytes19 s_1;\n bytes23 s_2;\n int64 s_3;\n }\n\n function test () public pure returns (S_fd79e408 memory) {\n S_fd79e408 memory r;\n {\n bytes26 r_0 = bytes26(0xe5022f13188479f0ba20b29547ed8d49e58a3317ab76847b81b9);\n r.s_0 = r_0;\n }\n {\n bytes19 r_1 = bytes19(0x5ba0fb1406861674b130dcbe81ea33d03aa125);\n r.s_1 = r_1;\n }\n {\n bytes23 r_2 = bytes23(0x0b7926b050b02dd2fa36aaa3860b3f487bad7c77a17377);\n r.s_2 = r_2;\n }\n {\n int64 r_3 = -3571675893422183882;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0xe5022f13188479f0ba20b29547ed8d49e58a3317ab76847b81b90000000000005ba0fb1406861674b130dcbe81ea33d03aa125000000000000000000000000000b7926b050b02dd2fa36aaa3860b3f487bad7c77a17377000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffce6edbb2cfbeaa36" + }, + { + "name": "random-(bytes28,bool,address,string)", + "type": "(bytes28,bool,address,string)", + "value": [ + "0xfcf07f14411a636c05c481490f9394431ea04ca54b0f34fd1adf89ca", + false, + "0x86Ed67ef76CBa7a30319320b4baeE4F6733b2097", + "Moo é🚀MMééM🚀éoéMé🚀 éoM 🚀 🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xfcf07f14411a636c05c481490f9394431ea04ca54b0f34fd1adf89ca" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x86Ed67ef76CBa7a30319320b4baeE4F6733b2097" + }, + { + "type": "string", + "value": "Moo é🚀MMééM🚀éoéMé🚀 éoM 🚀 🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101dc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ea565b60405180910390f35b6040805160808082018352600080835260208084018290528385018290526060808501819052855193840186528382018390528381018190527ffcf07f14411a636c05c481490f9394431ea04ca54b0f34fd1adf89ca0000000084527386ed67ef76cba7a30319320b4baee4f6733b20978487015285519081019095526030808652939492939192919061017790830139606083015250919050565b6000602080835263ffffffff1984511681840152808401511515604084015260018060a01b036040850151166060840152606084015160808085015280518060a086015260005b8181101561014d5782810184015186820160c001528301610131565b8181111561015f57600060c083880101525b50601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a804d4dc3a9c3a94df09f9a80c3a96fc3a94dc3a9f09f9a8020c3a96f4d20f09f9a8020f09f9a80a26469706673582212201bffe3b3569d4e0a78f134d85a4f6880f648720ed71b4f5f3109a5b605c659b364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a247a084 {\n bytes28 s_0;\n bool s_1;\n address s_2;\n string s_3;\n }\n\n function test () public pure returns (S_a247a084 memory) {\n S_a247a084 memory r;\n {\n bytes28 r_0 = bytes28(0xfcf07f14411a636c05c481490f9394431ea04ca54b0f34fd1adf89ca);\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x86Ed67ef76CBa7a30319320b4baeE4F6733b2097;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀MMééM🚀éoéMé🚀 éoM 🚀 🚀\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020fcf07f14411a636c05c481490f9394431ea04ca54b0f34fd1adf89ca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086ed67ef76cba7a30319320b4baee4f6733b2097000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a804d4dc3a9c3a94df09f9a80c3a96fc3a94dc3a9f09f9a8020c3a96f4d20f09f9a8020f09f9a8000000000000000000000000000000000" + }, + { + "name": "random-(bytes30[3],uint,string)", + "type": "(bytes30[3],uint,string)", + "value": [ + [ + "0xdeb38c4bab61d739d15c33ddda717d67d46ed52f4c8a5912fb59ee49df4c", + "0x521a95d0b40b3a0e12d13dff3e8b44754d1a918cfae799a1b2a988f80404", + "0xd04ce716fc95c983259d0b332867f316ec69e982b79663f2bd2d406ea92f" + ], + "83601943991791190751260659311319968790514293046447761627002213038811672800677", + "Moo é🚀M🚀M o 🚀ooM M🚀o 🚀🚀 " + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xdeb38c4bab61d739d15c33ddda717d67d46ed52f4c8a5912fb59ee49df4c" + }, + { + "type": "hexstring", + "value": "0x521a95d0b40b3a0e12d13dff3e8b44754d1a918cfae799a1b2a988f80404" + }, + { + "type": "hexstring", + "value": "0xd04ce716fc95c983259d0b332867f316ec69e982b79663f2bd2d406ea92f" + } + ] + }, + { + "type": "number", + "value": "83601943991791190751260659311319968790514293046447761627002213038811672800677" + }, + { + "type": "string", + "value": "Moo é🚀M🚀M o 🚀ooM M🚀o 🚀🚀 " + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061026a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061016e565b60405180910390f35b610056610129565b61005e610129565b610066610150565b7fdeb38c4bab61d739d15c33ddda717d67d46ed52f4c8a5912fb59ee49df4c000081527f521a95d0b40b3a0e12d13dff3e8b44754d1a918cfae799a1b2a988f8040400006020808301919091527fd04ce716fc95c983259d0b332867f316ec69e982b79663f2bd2d406ea92f00006040808401919091529183527fb8d50600a345065743b6879a4777b1e982868cd0fbf0aff0fc92bf1966c8eda583820152815160608101909252602b8083526000929161020a90830139604083015250919050565b604051806060016040528061013c610150565b815260200160008152602001606081525090565b60405180606001604052806003906020820280368337509192915050565b6020808252825160009190828483015b60038210156101a257825161ffff191681529183019160019190910190830161017e565b505050808401516080840152604084015160a08085015280518060c086015260005b818110156101e05782810184015186820160e0015283016101c4565b818111156101f257600060e083880101525b50601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a804df09f9a804d206f20f09f9a806f6f4d204df09f9a806f20f09f9a80f09f9a8020a264697066735822122002d36cfd2755e01f84943075ac1da94910d411e90d9f170ce0e01030f1f4131d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_04bdee04 {\n bytes30[3] s_0;\n uint256 s_1;\n string s_2;\n }\n\n function test () public pure returns (S_04bdee04 memory) {\n S_04bdee04 memory r;\n {\n bytes30[3] memory r_0;\n {\n bytes30 r_0_0 = bytes30(0xdeb38c4bab61d739d15c33ddda717d67d46ed52f4c8a5912fb59ee49df4c);\n r_0[0] = r_0_0;\n }\n {\n bytes30 r_0_1 = bytes30(0x521a95d0b40b3a0e12d13dff3e8b44754d1a918cfae799a1b2a988f80404);\n r_0[1] = r_0_1;\n }\n {\n bytes30 r_0_2 = bytes30(0xd04ce716fc95c983259d0b332867f316ec69e982b79663f2bd2d406ea92f);\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n uint r_1 = 83601943991791190751260659311319968790514293046447761627002213038811672800677;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀M🚀M o 🚀ooM M🚀o 🚀🚀 \";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020deb38c4bab61d739d15c33ddda717d67d46ed52f4c8a5912fb59ee49df4c0000521a95d0b40b3a0e12d13dff3e8b44754d1a918cfae799a1b2a988f804040000d04ce716fc95c983259d0b332867f316ec69e982b79663f2bd2d406ea92f0000b8d50600a345065743b6879a4777b1e982868cd0fbf0aff0fc92bf1966c8eda500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a804df09f9a804d206f20f09f9a806f6f4d204df09f9a806f20f09f9a80f09f9a8020000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes31,bool,uint,bytes13)", + "type": "(bytes31,bool,uint,bytes13)", + "value": [ + "0x288264cc05468a8b41f4848f7fa61d731f9c25fbf2fa2a393517ccb7c8a289", + false, + "57203922513981131758827462774664008207019062522719308608141831734603472906100", + "0x8770c075d46c8c35b009589a78" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x288264cc05468a8b41f4848f7fa61d731f9c25fbf2fa2a393517ccb7c8a289" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "57203922513981131758827462774664008207019062522719308608141831734603472906100" + }, + { + "type": "hexstring", + "value": "0x8770c075d46c8c35b009589a78" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061013c8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160808082018352600080835260208084018290528385018290526060938401829052845180840186528082019283527f288264cc05468a8b41f4848f7fa61d731f9c25fbf2fa2a393517ccb7c8a289008082527f7e7845d452b3b7405b7c6922751281ac877d8243761f63a1221605d2cd7b27748288019081526c10ee180eba8d9186b6012b134f609b1b928701928352875191825293511515928101929092529151948101949094525172ffffffffffffffffffffffffffffffffffffff1916918301919091520160405180910390f3fea2646970667358221220a270b8d9d28ad2c22b815d2897578f3fd42f9ab74d273ee6f626f549330b26e564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fee85aa2 {\n bytes31 s_0;\n bool s_1;\n uint256 s_2;\n bytes13 s_3;\n }\n\n function test () public pure returns (S_fee85aa2 memory) {\n S_fee85aa2 memory r;\n {\n bytes31 r_0 = bytes31(0x288264cc05468a8b41f4848f7fa61d731f9c25fbf2fa2a393517ccb7c8a289);\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n uint r_2 = 57203922513981131758827462774664008207019062522719308608141831734603472906100;\n r.s_2 = r_2;\n }\n {\n bytes13 r_3 = bytes13(0x8770c075d46c8c35b009589a78);\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x288264cc05468a8b41f4848f7fa61d731f9c25fbf2fa2a393517ccb7c8a2890000000000000000000000000000000000000000000000000000000000000000007e7845d452b3b7405b7c6922751281ac877d8243761f63a1221605d2cd7b27748770c075d46c8c35b009589a7800000000000000000000000000000000000000" + }, + { + "name": "random-(bytes32,(int256,bytes2[3]))", + "type": "(bytes32,(int256,bytes2[3]))", + "value": [ + "0xb5746450e46f484b2eaf074ddd79ec985cba539b9cb7c02b55134d71d8cc09ca", + [ + "-15687383081411469631591922402288513550348473779628729592897985303496168551130", + ["0x081c", "0xbba1", "0x57cc"] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xb5746450e46f484b2eaf074ddd79ec985cba539b9cb7c02b55134d71d8cc09ca" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-15687383081411469631591922402288513550348473779628729592897985303496168551130" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x081c" + }, + { + "type": "hexstring", + "value": "0xbba1" + }, + { + "type": "hexstring", + "value": "0x57cc" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101bf806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610138565b60405180910390f35b6100566100e5565b61005e6100e5565b7fb5746450e46f484b2eaf074ddd79ec985cba539b9cb7c02b55134d71d8cc09ca8152610089610104565b7fdd51417ddcc572fdc0ce46402098075e954b5fb202f0d55d52a4327d1a884d2681526100b461011a565b61020760f21b815261bba160f01b6020808301919091526115f360f21b604083015282810191909152820152919050565b6040805180820190915260008152602081016100ff610104565b905290565b6040518060400160405280600081526020016100ff5b60405180606001604052806003906020820280368337509192915050565b8151815260208083015180518284015281015160a0830191906040840160005b600381101561017f5782516001600160f01b03191682529183019190830190600101610158565b505050509291505056fea2646970667358221220ee833a4da485089d74f914872b1823e78111662b8f6ecc48b2e84168233ae15564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_31a5480e {\n int256 s_0;\n bytes2[3] s_1;\n }\n\n struct S_edaca47e {\n bytes32 s_0;\n S_31a5480e s_1;\n }\n\n function test () public pure returns (S_edaca47e memory) {\n S_edaca47e memory r;\n {\n bytes32 r_0 = bytes32(0xb5746450e46f484b2eaf074ddd79ec985cba539b9cb7c02b55134d71d8cc09ca);\n r.s_0 = r_0;\n }\n {\n S_31a5480e memory r_1;\n {\n int256 r_1_0 = -15687383081411469631591922402288513550348473779628729592897985303496168551130;\n r_1.s_0 = r_1_0;\n }\n {\n bytes2[3] memory r_1_1;\n {\n bytes2 r_1_1_0 = bytes2(0x081c);\n r_1_1[0] = r_1_1_0;\n }\n {\n bytes2 r_1_1_1 = bytes2(0xbba1);\n r_1_1[1] = r_1_1_1;\n }\n {\n bytes2 r_1_1_2 = bytes2(0x57cc);\n r_1_1[2] = r_1_1_2;\n }\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0xb5746450e46f484b2eaf074ddd79ec985cba539b9cb7c02b55134d71d8cc09cadd51417ddcc572fdc0ce46402098075e954b5fb202f0d55d52a4327d1a884d26081c000000000000000000000000000000000000000000000000000000000000bba100000000000000000000000000000000000000000000000000000000000057cc000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes6,uint48,uint,string)", + "type": "(bytes6,uint48,uint,string)", + "value": [ + "0xd3ebc83cc476", + "157409837898332", + "36033858113444933665224356829417971217918914769406914675501427076034298707041", + "Moo é🚀M MM🚀éo🚀ooM M éMé🚀oM MooooMMM " + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd3ebc83cc476" + }, + { + "type": "number", + "value": "157409837898332" + }, + { + "type": "number", + "value": "36033858113444933665224356829417971217918914769406914675501427076034298707041" + }, + { + "type": "string", + "value": "Moo é🚀M MM🚀éo🚀ooM M éMé🚀oM MooooMMM " + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101dc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e4565b60405180910390f35b6040805160808082018352600080835260208084018290528385018290526060808501819052855193840186528381018190526569f5e41e623b60d11b8452658f29d578da5c848301527f4faa70e179500ff05381133a5849a66fe3510f2779f764e7811ae6f38d08fc618487015285519081019095526034808652939492939192919061017390830139606083015250919050565b6000602080835265ffffffffffff60d01b8451168184015265ffffffffffff8185015116604084015260408401516060840152606084015160808085015280518060a086015260005b818110156101495782810184015186820160c00152830161012d565b8181111561015b57600060c083880101525b50601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a804d204d4df09f9a80c3a96ff09f9a806f6f4d204d20c3a94dc3a9f09f9a806f4d204d6f6f6f6f4d4d4d20a2646970667358221220ae9b2a07d3ca5c6adf16f5605da422a94fd1e34a18169681ca0cb55e26d0b26964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1d8b30cb {\n bytes6 s_0;\n uint48 s_1;\n uint256 s_2;\n string s_3;\n }\n\n function test () public pure returns (S_1d8b30cb memory) {\n S_1d8b30cb memory r;\n {\n bytes6 r_0 = bytes6(0xd3ebc83cc476);\n r.s_0 = r_0;\n }\n {\n uint48 r_1 = 157409837898332;\n r.s_1 = r_1;\n }\n {\n uint r_2 = 36033858113444933665224356829417971217918914769406914675501427076034298707041;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀M MM🚀éo🚀ooM M éMé🚀oM MooooMMM \";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020d3ebc83cc476000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f29d578da5c4faa70e179500ff05381133a5849a66fe3510f2779f764e7811ae6f38d08fc61000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a804d204d4df09f9a80c3a96ff09f9a806f6f4d204d20c3a94dc3a9f09f9a806f4d204d6f6f6f6f4d4d4d20000000000000000000000000" + }, + { + "name": "random-(bytes9[2][1],bytes1)", + "type": "(bytes9[2][1],bytes1)", + "value": [[["0x2a8077e99bfca2808f", "0x0bd28b334b59433abb"]], "0xa3"], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2a8077e99bfca2808f" + }, + { + "type": "hexstring", + "value": "0x0bd28b334b59433abb" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xa3" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101c9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610112565b60405180910390f35b6100566100a7565b61005e6100a7565b6100666100c7565b61006e6100f4565b682a8077e99bfca2808f60b81b8152680bd28b334b59433abb60b81b60208083019190915290825290825260a360f81b90820152919050565b60405180604001604052806100ba6100c7565b8152600060209091015290565b60405180602001604052806001905b6100de6100f4565b8152602001906001900390816100d65790505090565b60405180604001604052806002906020820280368337509192915050565b81516060820190826000805b600180821061012d5750610174565b845184845b600281101561015a5782516001600160b81b0319168252602092830192909101908301610132565b50505060209490940193506040929092019160010161011e565b50505050602092909201516001600160f81b031916604091909101529056fea264697066735822122024544473b89650119f7611757b94323759fe750e94dd34f4e6f38cfdc2ced3b864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e8e2e5c2 {\n bytes9[2][1] s_0;\n bytes1 s_1;\n }\n\n function test () public pure returns (S_e8e2e5c2 memory) {\n S_e8e2e5c2 memory r;\n {\n bytes9[2][1] memory r_0;\n {\n bytes9[2] memory r_0_0;\n {\n bytes9 r_0_0_0 = bytes9(0x2a8077e99bfca2808f);\n r_0_0[0] = r_0_0_0;\n }\n {\n bytes9 r_0_0_1 = bytes9(0x0bd28b334b59433abb);\n r_0_0[1] = r_0_0_1;\n }\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n bytes1 r_1 = bytes1(0xa3);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x2a8077e99bfca2808f00000000000000000000000000000000000000000000000bd28b334b59433abb0000000000000000000000000000000000000000000000a300000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int,address,string,address)", + "type": "(int,address,string,address)", + "value": [ + "41910819814797536145085873155562024502954757412223679464763840141505256678917", + "0xc22f9518F8A86c859C8520784AC19705763e9630", + "Moo é🚀Mé éoé🚀é🚀o🚀éé 🚀é🚀éMM🚀🚀o🚀ééMMéo🚀oMMM🚀MM🚀M ooooé🚀🚀oM M ", + "0x81acAd216BDDDF64C139906ac17860db0F966Fa8" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "41910819814797536145085873155562024502954757412223679464763840141505256678917" + }, + { + "type": "address", + "value": "0xc22f9518F8A86c859C8520784AC19705763e9630" + }, + { + "type": "string", + "value": "Moo é🚀Mé éoé🚀é🚀o🚀éé 🚀é🚀éMM🚀🚀o🚀ééMMéo🚀oMMM🚀MM🚀M ooooé🚀🚀oM M " + }, + { + "type": "address", + "value": "0x81acAd216BDDDF64C139906ac17860db0F966Fa8" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610251806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610118565b60405180910390f35b6100566100de565b61005e6100de565b7f5ca8aef25fbdfd4d35564b722e6f2cfcf8bcbcc33da1a80156c0a1dbf5eee605815273c22f9518f8a86c859c8520784ac19705763e96306020808301919091526040805160a0810190915260738082526000926101a9908301396040830152507381acad216bdddf64c139906ac17860db0f966fa86060820152919050565b60405180608001604052806000815260200160006001600160a01b031681526020016060815260200160006001600160a01b031681525090565b6000602080835283518184015260018060a01b038185015116604084015260408401516080606085015280518060a086015260005b818110156101695782810184015186820160c00152830161014d565b8181111561017b57600060c083880101525b5060608601516001600160a01b03811660808701529250601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a804dc3a920c3a96fc3a9f09f9a80c3a9f09f9a806ff09f9a80c3a9c3a92020f09f9a80c3a9f09f9a80c3a94d4df09f9a80f09f9a806ff09f9a80c3a9c3a94d4dc3a96ff09f9a806f4d4d4df09f9a804d4df09f9a804d206f6f6f6fc3a9f09f9a80f09f9a806f4d204d20a2646970667358221220e8cd6112cab27ac63a4e1aea099d6a0f85237c2f4ae1275cf711d838ee8c6c4e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d509b83a {\n int256 s_0;\n address s_1;\n string s_2;\n address s_3;\n }\n\n function test () public pure returns (S_d509b83a memory) {\n S_d509b83a memory r;\n {\n int r_0 = 41910819814797536145085873155562024502954757412223679464763840141505256678917;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xc22f9518F8A86c859C8520784AC19705763e9630;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀Mé éoé🚀é🚀o🚀éé 🚀é🚀éMM🚀🚀o🚀ééMMéo🚀oMMM🚀MM🚀M ooooé🚀🚀oM M \";\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x81acAd216BDDDF64C139906ac17860db0F966Fa8;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000205ca8aef25fbdfd4d35564b722e6f2cfcf8bcbcc33da1a80156c0a1dbf5eee605000000000000000000000000c22f9518f8a86c859c8520784ac19705763e9630000000000000000000000000000000000000000000000000000000000000008000000000000000000000000081acad216bdddf64c139906ac17860db0f966fa800000000000000000000000000000000000000000000000000000000000000734d6f6f20c3a9f09f9a804dc3a920c3a96fc3a9f09f9a80c3a9f09f9a806ff09f9a80c3a9c3a92020f09f9a80c3a9f09f9a80c3a94d4df09f9a80f09f9a806ff09f9a80c3a9c3a94d4dc3a96ff09f9a806f4d4d4df09f9a804d4df09f9a804d206f6f6f6fc3a9f09f9a80f09f9a806f4d204d2000000000000000000000000000" + }, + { + "name": "random-(int128,address,bool)[2]", + "type": "(int128,address,bool)[2]", + "value": [ + [ + "-22672470265645353246491092127508054218", + "0x72011c367Faa9eb0877f90CF60d1982DCe96A13F", + false + ], + [ + "-82645767164493496893668748387570290862", + "0x425a6ED918FE231ba581B968909507A7310096f7", + true + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-22672470265645353246491092127508054218" + }, + { + "type": "address", + "value": "0x72011c367Faa9eb0877f90CF60d1982DCe96A13F" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-82645767164493496893668748387570290862" + }, + { + "type": "address", + "value": "0x425a6ED918FE231ba581B968909507A7310096f7" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610128565b60405180910390f35b6100566100e9565b61005e6100e9565b60408051606080820183526000828401526f110e8f16ad7ad452c573679f45d3c0c91982527372011c367faa9eb0877f90cf60d1982dce96a13f602080840191909152918452825190810183526f3e2cfeeb2b48a1c31d70cff7301210ad19815273425a6ed918fe231ba581b968909507a7310096f781830152600192810192909252820152919050565b60405180604001604052806002905b60408051606081018252600080825260208083018290529282015282526000199092019101816100f85790505090565b60c08101818360005b60028110156101775781518051600f0b84526020808201516001600160a01b03168186015260409182015115159185019190915260609093019290910190600101610131565b5050509291505056fea2646970667358221220c74fee7e0842aea1cbdebbc3267de74b292afea4e6438ffbe4b764606a996eac64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0693d211 {\n int128 s_0;\n address s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_0693d211[2] memory) {\n S_0693d211[2] memory r;\n {\n S_0693d211 memory r_0;\n {\n int128 r_0_0 = -22672470265645353246491092127508054218;\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0x72011c367Faa9eb0877f90CF60d1982DCe96A13F;\n r_0.s_1 = r_0_1;\n }\n {\n bool r_0_2 = false;\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_0693d211 memory r_1;\n {\n int128 r_1_0 = -82645767164493496893668748387570290862;\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0x425a6ED918FE231ba581B968909507A7310096f7;\n r_1.s_1 = r_1_1;\n }\n {\n bool r_1_2 = true;\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffeef170e952852bad3a8c9860ba2c3f3600000000000000000000000072011c367faa9eb0877f90cf60d1982dce96a13f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffc1d30114d4b75e3ce28f3008cfedef52000000000000000000000000425a6ed918fe231ba581b968909507a7310096f70000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(int208,bytes12[1])[3]", + "type": "(int208,bytes12[1])[3]", + "value": [ + [ + "-36056231912988420069812482979287557783213465046737177957155324", + ["0x541f116bbc55130da9481062"] + ], + [ + "41553426542515715495297105468111876715437216871026223910431282", + ["0x104cfabce2e6deb837aab4f6"] + ], + [ + "-138827850512374257407466752487119055712365798839439503619853113", + ["0x1e8fbc5f8ab0c09109fdc649"] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-36056231912988420069812482979287557783213465046737177957155324" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x541f116bbc55130da9481062" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "41553426542515715495297105468111876715437216871026223910431282" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x104cfabce2e6deb837aab4f6" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-138827850512374257407466752487119055712365798839439503619853113" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x1e8fbc5f8ab0c09109fdc649" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610252806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101ac565b60405180910390f35b61005661013f565b61005e61013f565b61006661016c565b79167016d1ebef7acaa0e124bdf377eb1af2f6eec5fb7c78b4c1fb19815261008c61018e565b6b2a0f88b5de2a8986d4a4083160a11b8152602082015281526100ad61016c565b7919dbd7bfce3e8ea3b4acff39d96e8ebf7590b53e631ae8bb2a3281526100d261018e565b6b08267d5e71736f5c1bd55a7b60a11b81526020828101919091528201526100f861016c565b7956648d752b6dbc7541de517ab278f09b77b5650daad183890b3819815261011e61018e565b6b1e8fbc5f8ab0c09109fdc64960a01b815260208201526040820152919050565b60405180606001604052806003905b61015661016c565b81526020019060019003908161014e5790505090565b6040518060400160405280600060190b815260200161018961018e565b905290565b60405180602001604052806001906020820280368337509192915050565b60c0810181836000805b6003811015610212578251805160190b855260209081015190808601845b60018110156101fb5783516001600160a01b031916825292820192908201906001016101d4565b5050604095909501949390930192506001016101b6565b505050509291505056fea2646970667358221220233f587f416921d41da4988084165b89ba5958b60120b53e22d0d437ee61890264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_914529ac {\n int208 s_0;\n bytes12[1] s_1;\n }\n\n function test () public pure returns (S_914529ac[3] memory) {\n S_914529ac[3] memory r;\n {\n S_914529ac memory r_0;\n {\n int208 r_0_0 = -36056231912988420069812482979287557783213465046737177957155324;\n r_0.s_0 = r_0_0;\n }\n {\n bytes12[1] memory r_0_1;\n {\n bytes12 r_0_1_0 = bytes12(0x541f116bbc55130da9481062);\n r_0_1[0] = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_914529ac memory r_1;\n {\n int208 r_1_0 = 41553426542515715495297105468111876715437216871026223910431282;\n r_1.s_0 = r_1_0;\n }\n {\n bytes12[1] memory r_1_1;\n {\n bytes12 r_1_1_0 = bytes12(0x104cfabce2e6deb837aab4f6);\n r_1_1[0] = r_1_1_0;\n }\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n {\n S_914529ac memory r_2;\n {\n int208 r_2_0 = -138827850512374257407466752487119055712365798839439503619853113;\n r_2.s_0 = r_2_0;\n }\n {\n bytes12[1] memory r_2_1;\n {\n bytes12 r_2_1_0 = bytes12(0x1e8fbc5f8ab0c09109fdc649);\n r_2_1[0] = r_2_1_0;\n }\n r_2.s_1 = r_2_1;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffe98fe92e141085355f1edb420c8814e50d09113a0483874b3e04541f116bbc55130da9481062000000000000000000000000000000000000000000000000000019dbd7bfce3e8ea3b4acff39d96e8ebf7590b53e631ae8bb2a32104cfabce2e6deb837aab4f60000000000000000000000000000000000000000ffffffffffffa99b728ad492438abe21ae854d870f64884a9af2552e7c76f4c71e8fbc5f8ab0c09109fdc6490000000000000000000000000000000000000000" + }, + { + "name": "random-(int224[2],int40,string)", + "type": "(int224[2],int40,string)", + "value": [ + [ + "-7117479749327792916839336837770841824643675495525447908936339284219", + "-10500952945950702529649778460192218216385080742665898396592850210940" + ], + "-437476089440", + "Moo é🚀oo🚀M" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-7117479749327792916839336837770841824643675495525447908936339284219" + }, + { + "type": "number", + "value": "-10500952945950702529649778460192218216385080742665898396592850210940" + } + ] + }, + { + "type": "number", + "value": "-437476089440" + }, + { + "type": "string", + "value": "Moo é🚀oo🚀M" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610209806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610137565b60405180910390f35b6100566100f2565b61005e6100f2565b610066610119565b7fffffffffbc6a5d7a5ea3bc39ad6af81bd9b5472b9ccf1189f41ed92813521f0581527fffffffff9c4998f04328fabcb2a781533c2b567b12a77c3ab2f890d8b939ef846020808301919091529082526465db9b5e5f198282015260408051808201825260118152704d6f6f20c3a9f09f9a806f6ff09f9a804d60781b92810192909252820152919050565b6040518060600160405280610105610119565b815260006020820152606060409091015290565b60405180604001604052806002906020820280368337509192915050565b6020808252825160009190828483015b6002821015610169578251601b0b815291830191600191909101908301610147565b5050508084015160040b6060840152604084015160808085015280518060a086015260005b818110156101aa5782810184015186820160c00152830161018e565b818111156101bc57600060c083880101525b50601f01601f19169390930160c00194935050505056fea26469706673582212209e824d6aab6dd0d291d164b7f59f3907dafd169b4305ef6bd61c9e5ee7e01ae864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_38c45f8e {\n int224[2] s_0;\n int40 s_1;\n string s_2;\n }\n\n function test () public pure returns (S_38c45f8e memory) {\n S_38c45f8e memory r;\n {\n int224[2] memory r_0;\n {\n int224 r_0_0 = -7117479749327792916839336837770841824643675495525447908936339284219;\n r_0[0] = r_0_0;\n }\n {\n int224 r_0_1 = -10500952945950702529649778460192218216385080742665898396592850210940;\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n int40 r_1 = -437476089440;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀oo🚀M\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020ffffffffbc6a5d7a5ea3bc39ad6af81bd9b5472b9ccf1189f41ed92813521f05ffffffff9c4998f04328fabcb2a781533c2b567b12a77c3ab2f890d8b939ef84ffffffffffffffffffffffffffffffffffffffffffffffffffffff9a2464a1a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a806f6ff09f9a804d000000000000000000000000000000" + }, + { + "name": "random-(int24,bool,(int88,int48))", + "type": "(int24,bool,(int88,int48))", + "value": ["-5079534", true, ["-84456644257282242815579388", "-123100485513621"]], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-5079534" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-84456644257282242815579388" + }, + { + "type": "number", + "value": "-123100485513621" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610150806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b610038610073565b60408051825160020b8152602080840151151581830152928201518051600a0b828401529092015160050b6060830152519081900360800190f35b6100a660408051606081018252600080825260208083018290528351808501855282815290810191909152909182015290565b6100d960408051606081018252600080825260208083018290528351808501855282815290810191909152909182015290565b624d81ed19815260016020808301919091526040805180820182526a45dc63dbf66f34aa99d4fb198152656ff590b5f194199281019290925282015291905056fea2646970667358221220797d55ce23a0168dd6e7595fc519f40781f388d2846be287bd804cb41254120364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_356b8fdf {\n int88 s_0;\n int48 s_1;\n }\n\n struct S_f7e408c0 {\n int24 s_0;\n bool s_1;\n S_356b8fdf s_2;\n }\n\n function test () public pure returns (S_f7e408c0 memory) {\n S_f7e408c0 memory r;\n {\n int24 r_0 = -5079534;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n S_356b8fdf memory r_2;\n {\n int88 r_2_0 = -84456644257282242815579388;\n r_2.s_0 = r_2_0;\n }\n {\n int48 r_2_1 = -123100485513621;\n r_2.s_1 = r_2_1;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb27e120000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffba239c240990cb55662b04ffffffffffffffffffffffffffffffffffffffffffffffffffff900a6f4a0e6b" + }, + { + "name": "random-(int32,address,address,string)", + "type": "(int32,address,address,string)", + "value": [ + "-879384961", + "0x5d5558122207EE895801ecB38a8795cC09fca9C0", + "0x0EBB115Fcd4dB4129aC538Dc9bA9D3cC5fFF7dAA", + "Moo é🚀🚀🚀o o 🚀ooooé🚀MoM🚀o MéoMM oM🚀é🚀Méo éoo oo🚀 🚀o🚀oéoo o" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-879384961" + }, + { + "type": "address", + "value": "0x5d5558122207EE895801ecB38a8795cC09fca9C0" + }, + { + "type": "address", + "value": "0x0EBB115Fcd4dB4129aC538Dc9bA9D3cC5fFF7dAA" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀o o 🚀ooooé🚀MoM🚀o MéoMM oM🚀é🚀Méo éoo oo🚀 🚀o🚀oéoo o" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610206806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e1565b60405180910390f35b6040805160808082018352600080835260208084018290528385018290526060808501819052855193840186528381015263346a5980198352735d5558122207ee895801ecb38a8795cc09fca9c083820152730ebb115fcd4db4129ac538dc9ba9d3cc5fff7daa83860152845160a081019095526063808652939492939192919061016e90830139606083015250919050565b60006020808352835160030b818401528084015160018060a01b0380821660408601528060408701511660608601525050606084015160808085015280518060a086015260005b818110156101445782810184015186820160c001528301610128565b8181111561015657600060c083880101525b50601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a80f09f9a80f09f9a806f206f20f09f9a806f6f6f6fc3a9f09f9a804d6f4df09f9a806f204dc3a96f4d4d20206f4df09f9a80c3a9f09f9a804dc3a96f20c3a96f6f206f6ff09f9a802020f09f9a806ff09f9a806fc3a96f6f206fa26469706673582212201436492fea99220165efed27bddb8019f2375206dacd5d88b9a600a4e704670e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f1e25c19 {\n int32 s_0;\n address s_1;\n address s_2;\n string s_3;\n }\n\n function test () public pure returns (S_f1e25c19 memory) {\n S_f1e25c19 memory r;\n {\n int32 r_0 = -879384961;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x5d5558122207EE895801ecB38a8795cC09fca9C0;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x0EBB115Fcd4dB4129aC538Dc9bA9D3cC5fFF7dAA;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀🚀🚀o o 🚀ooooé🚀MoM🚀o MéoMM oM🚀é🚀Méo éoo oo🚀 🚀o🚀oéoo o\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcb95a67f0000000000000000000000005d5558122207ee895801ecb38a8795cc09fca9c00000000000000000000000000ebb115fcd4db4129ac538dc9ba9d3cc5fff7daa000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a80f09f9a80f09f9a806f206f20f09f9a806f6f6f6fc3a9f09f9a804d6f4df09f9a806f204dc3a96f4d4d20206f4df09f9a80c3a9f09f9a804dc3a96f20c3a96f6f206f6ff09f9a802020f09f9a806ff09f9a806fc3a96f6f206f0000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int64,uint80,bytes5)[4]", + "type": "(int64,uint80,bytes5)[4]", + "value": [ + ["623945691870500941", "1016981996060928282315954", "0xba3de42b74"], + ["-1917124013388900514", "881528603561834415395716", "0x0732b05f1e"], + ["7842083194505920497", "167373721420772599886624", "0x50b621eea6"], + ["-1336875585270647599", "118152120589030764040838", "0x651b50d65b"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "623945691870500941" + }, + { + "type": "number", + "value": "1016981996060928282315954" + }, + { + "type": "hexstring", + "value": "0xba3de42b74" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-1917124013388900514" + }, + { + "type": "number", + "value": "881528603561834415395716" + }, + { + "type": "hexstring", + "value": "0x0732b05f1e" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "7842083194505920497" + }, + { + "type": "number", + "value": "167373721420772599886624" + }, + { + "type": "hexstring", + "value": "0x50b621eea6" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-1336875585270647599" + }, + { + "type": "number", + "value": "118152120589030764040838" + }, + { + "type": "hexstring", + "value": "0x651b50d65b" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610214806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061017a565b60405180910390f35b61005661013b565b61005e61013b565b60408051606080820183526708a8b34d0b13984d825269d75ab4587fdf0a1dccb2602080840191909152642e8f790add60da1b8385015291845282518082018452671a9afe22006aa8a119815269baabc2e820c6c730138481840152640399582f8f60d91b818501528483015282518082018452676cd4ad1dc395fff1815269237158fd9035f37b73208184015264285b10f75360d91b81850152848401528251808201845267128d894300f30b2e1981526919050a0efef5a79fd2869281019290925264651b50d65b60d81b9282019290925290820152919050565b60405180608001604052806004905b604080516060810182526000808252602080830182905292820152825260001990920191018161014a5790505090565b6101808101818360005b60048110156101d5578151805160070b845260208082015169ffffffffffffffffffff16818601526040918201516001600160d81b0319169185019190915260609093019290910190600101610184565b5050509291505056fea2646970667358221220c52fc7e29006f50617a4a31b63f68512618f113eea6d1a4418b8367c3793d78b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2e7a760d {\n int64 s_0;\n uint80 s_1;\n bytes5 s_2;\n }\n\n function test () public pure returns (S_2e7a760d[4] memory) {\n S_2e7a760d[4] memory r;\n {\n S_2e7a760d memory r_0;\n {\n int64 r_0_0 = 623945691870500941;\n r_0.s_0 = r_0_0;\n }\n {\n uint80 r_0_1 = 1016981996060928282315954;\n r_0.s_1 = r_0_1;\n }\n {\n bytes5 r_0_2 = bytes5(0xba3de42b74);\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_2e7a760d memory r_1;\n {\n int64 r_1_0 = -1917124013388900514;\n r_1.s_0 = r_1_0;\n }\n {\n uint80 r_1_1 = 881528603561834415395716;\n r_1.s_1 = r_1_1;\n }\n {\n bytes5 r_1_2 = bytes5(0x0732b05f1e);\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_2e7a760d memory r_2;\n {\n int64 r_2_0 = 7842083194505920497;\n r_2.s_0 = r_2_0;\n }\n {\n uint80 r_2_1 = 167373721420772599886624;\n r_2.s_1 = r_2_1;\n }\n {\n bytes5 r_2_2 = bytes5(0x50b621eea6);\n r_2.s_2 = r_2_2;\n }\n r[2] = r_2;\n }\n {\n S_2e7a760d memory r_3;\n {\n int64 r_3_0 = -1336875585270647599;\n r_3.s_0 = r_3_0;\n }\n {\n uint80 r_3_1 = 118152120589030764040838;\n r_3.s_1 = r_3_1;\n }\n {\n bytes5 r_3_2 = bytes5(0x651b50d65b);\n r_3.s_2 = r_3_2;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000008a8b34d0b13984d00000000000000000000000000000000000000000000d75ab4587fdf0a1dccb2ba3de42b74000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffe56501ddff95575e00000000000000000000000000000000000000000000baabc2e820c6c73013840732b05f1e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006cd4ad1dc395fff100000000000000000000000000000000000000000000237158fd9035f37b732050b621eea6000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffed7276bcff0cf4d10000000000000000000000000000000000000000000019050a0efef5a79fd286651b50d65b000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int88,bool,bool[2])", + "type": "(int88,bool,bool[2])", + "value": ["-96536943813754405125647274", false, [true, false]], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-96536943813754405125647274" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610156806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d3565b60405180910390f35b610056610091565b61005e610091565b6a4fda7e35dcb87e04486ba91981526000602082015261007c6100b5565b60018152600060208201526040820152919050565b60408051606081018252600080825260208201529081016100b06100b5565b905290565b60405180604001604052806002906020820280368337509192915050565b8151600a0b8152602080830151151581830152604080840151608084019291840160005b60028110156101165782511515825291830191908301906001016100f7565b505050509291505056fea2646970667358221220af0507e3919dde64e4c580aa1ccf6700096bd473719ecdd99b6fd6c7a92d891364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_43f37188 {\n int88 s_0;\n bool s_1;\n bool[2] s_2;\n }\n\n function test () public pure returns (S_43f37188 memory) {\n S_43f37188 memory r;\n {\n int88 r_0 = -96536943813754405125647274;\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n bool[2] memory r_2;\n {\n bool r_2_0 = true;\n r_2[0] = r_2_0;\n }\n {\n bool r_2_1 = false;\n r_2[1] = r_2_1;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffffffffffffffffffffb02581ca234781fbb79456000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int96,string,address,address)", + "type": "(int96,string,address,address)", + "value": [ + "39481779427109732141276805595", + "Moo é🚀 ", + "0xbCaBCf574FaC64c67A97862AafC0493fF26903C3", + "0xf4A1509a7Db9566Ab1C9da56D05538131d25E316" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "39481779427109732141276805595" + }, + { + "type": "string", + "value": "Moo é🚀 " + }, + { + "type": "address", + "value": "0xbCaBCf574FaC64c67A97862AafC0493fF26903C3" + }, + { + "type": "address", + "value": "0xf4A1509a7Db9566Ab1C9da56D05538131d25E316" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160808082018352600080835260606020808501829052848601839052938101829052845192830185528284018181528386018381529184019283526b7f928fff6c5cf35492eb39db84528551808701909652600b86526a026b7b79061d4f84fcd40160ad1b948601949094529390925273bcabcf574fac64c67a97862aafc0493ff26903c390925273f4a1509a7db9566ab1c9da56d05538131d25e31690526040516100e091906100e9565b60405180910390f35b600060208083528351600b0b81840152808401516080604085015280518060a086015260005b8181101561012b5782810184015186820160c00152830161010f565b8181111561013d57600060c083880101525b5060408601516001600160a01b0381166060870152925060608601516001600160a01b03811660808701529250601f01601f19169390930160c00194935050505056fea2646970667358221220080c7ff897b5b342b2a2218c41f4bba3a557090e55bea9441b4fc8e368d9374064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d6c71d32 {\n int96 s_0;\n string s_1;\n address s_2;\n address s_3;\n }\n\n function test () public pure returns (S_d6c71d32 memory) {\n S_d6c71d32 memory r;\n {\n int96 r_0 = 39481779427109732141276805595;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀 \";\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xbCaBCf574FaC64c67A97862AafC0493fF26903C3;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xf4A1509a7Db9566Ab1C9da56D05538131d25E316;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000007f928fff6c5cf35492eb39db0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000bcabcf574fac64c67a97862aafc0493ff26903c3000000000000000000000000f4a1509a7db9566ab1c9da56d05538131d25e316000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a8020000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,(uint240,bytes3,bytes29))", + "type": "(string,(uint240,bytes3,bytes29))", + "value": [ + "Moo é🚀o🚀Mo", + [ + "780805663838851314059130267912089829649296864778330838147100161122649790", + "0xc711d1", + "0x90cb1ba3e1de64e2fd2e6d759be2a63acdbec6437b22f28f2424004b81" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀Mo" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "780805663838851314059130267912089829649296864778330838147100161122649790" + }, + { + "type": "hexstring", + "value": "0xc711d1" + }, + { + "type": "hexstring", + "value": "0x90cb1ba3e1de64e2fd2e6d759be2a63acdbec6437b22f28f2424004b81" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101f6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061012a565b60405180910390f35b6100566100f0565b61005e6100f0565b60408051808201825260118152704d6f6f20c3a9f09f9a806ff09f9a804d6f60781b60208083019190915290835281516060810183527d7121b113c6f7df55f22f0302cea481549d4910984f540899703667b646be815262c711d160e81b818301527f90cb1ba3e1de64e2fd2e6d759be2a63acdbec6437b22f28f2424004b8100000092810192909252820152919050565b604051806040016040528060608152602001610125604080516060810182526000808252602082018190529181019190915290565b905290565b60006020808352835160808285015280518060a086015260005b818110156101605782810184015186820160c001528301610144565b8181111561017257600060c083880101525b509482015180516001600160f01b0316604086810191909152928101516001600160e81b0319166060860152919091015162ffffff19166080840152505060c0601f909201601f191601019056fea2646970667358221220ee1d69d17db75213035ded369b1fe6cd8d37a00b51c32f22b2395c3ce7c82cec64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6d306272 {\n uint240 s_0;\n bytes3 s_1;\n bytes29 s_2;\n }\n\n struct S_711a7ea3 {\n string s_0;\n S_6d306272 s_1;\n }\n\n function test () public pure returns (S_711a7ea3 memory) {\n S_711a7ea3 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀o🚀Mo\";\n r.s_0 = r_0;\n }\n {\n S_6d306272 memory r_1;\n {\n uint240 r_1_0 = 780805663838851314059130267912089829649296864778330838147100161122649790;\n r_1.s_0 = r_1_0;\n }\n {\n bytes3 r_1_1 = bytes3(0xc711d1);\n r_1.s_1 = r_1_1;\n }\n {\n bytes29 r_1_2 = bytes29(0x90cb1ba3e1de64e2fd2e6d759be2a63acdbec6437b22f28f2424004b81);\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000007121b113c6f7df55f22f0302cea481549d4910984f540899703667b646bec711d1000000000000000000000000000000000000000000000000000000000090cb1ba3e1de64e2fd2e6d759be2a63acdbec6437b22f28f2424004b8100000000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a806ff09f9a804d6f000000000000000000000000000000" + }, + { + "name": "random-(string,address,bool,address)", + "type": "(string,address,bool,address)", + "value": [ + "Moo é🚀ééMo oo o MéMoo éo é 🚀🚀ooé o oo🚀éMMooéo", + "0x815113d2B12f7e13c6b4f093250F52b68ce4ed84", + true, + "0xfae06EEb59f15259cA6b81172D1342C99CCEbB3D" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ééMo oo o MéMoo éo é 🚀🚀ooé o oo🚀éMMooéo" + }, + { + "type": "address", + "value": "0x815113d2B12f7e13c6b4f093250F52b68ce4ed84" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xfae06EEb59f15259cA6b81172D1342C99CCEbB3D" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610206806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100f4565b60405180910390f35b604080516080810182526060808252600060208301819052928201839052810191909152604080516080810182526060808252600060208301819052928201839052810191909152600060405180608001604052806044815260200161018d6044913982525073815113d2b12f7e13c6b4f093250f52b68ce4ed8460208201526001604082015273fae06eeb59f15259ca6b81172d1342c99ccebb3d6060820152919050565b60006020808352835160808285015280518060a086015260005b8181101561012a5782810184015186820160c00152830161010e565b8181111561013c57600060c083880101525b50918501516001600160a01b03811660408601529160408601518015156060870152925060608601516001600160a01b03811660808701529250601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a80c3a9c3a94d6f20206f6f206f204dc3a94d6f6f20c3a96f2020c3a920f09f9a80f09f9a806f6fc3a9206f206f6ff09f9a80c3a94d4d6f6fc3a96fa2646970667358221220f696debba79adb5088f149e87133e20da1538672ff3e6631d012200e351ba63264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_264fcfa1 {\n string s_0;\n address s_1;\n bool s_2;\n address s_3;\n }\n\n function test () public pure returns (S_264fcfa1 memory) {\n S_264fcfa1 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀ééMo oo o MéMoo éo é 🚀🚀ooé o oo🚀éMMooéo\";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x815113d2B12f7e13c6b4f093250F52b68ce4ed84;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xfae06EEb59f15259cA6b81172D1342C99CCEbB3D;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000815113d2b12f7e13c6b4f093250f52b68ce4ed840000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fae06eeb59f15259ca6b81172d1342c99ccebb3d00000000000000000000000000000000000000000000000000000000000000444d6f6f20c3a9f09f9a80c3a9c3a94d6f20206f6f206f204dc3a94d6f6f20c3a96f2020c3a920f09f9a80f09f9a806f6fc3a9206f206f6ff09f9a80c3a94d4d6f6fc3a96f00000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,address,bool,bytes31)", + "type": "(string,address,bool,bytes31)", + "value": [ + "Moo é🚀Moooo éoM 🚀é🚀oé MMo ooooooo 🚀o🚀", + "0x45Caa5A74DF4993d44734bB1a9dfbF7069604b94", + false, + "0x4f7be3e0a262647edd18862267ce16d3954d3133ee4d98607464c47b146add" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Moooo éoM 🚀é🚀oé MMo ooooooo 🚀o🚀" + }, + { + "type": "address", + "value": "0x45Caa5A74DF4993d44734bB1a9dfbF7069604b94" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x4f7be3e0a262647edd18862267ce16d3954d3133ee4d98607464c47b146add" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610201806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610100565b60405180910390f35b6040805160808101825260608082526000602083018190529282018390528101919091526040805160808101825260608082526000602083018190529282018390528101919091526000604051806060016040528060388152602001610194603891398252507345caa5a74df4993d44734bb1a9dfbf7069604b946020820152600060408201527f4f7be3e0a262647edd18862267ce16d3954d3133ee4d98607464c47b146add006060820152919050565b60006020808352835160808285015280518060a086015260005b818110156101365782810184015186820160c00152830161011a565b8181111561014857600060c083880101525b50918501516001600160a01b038116604086015291604086015180151560608701529250606086015160ff19811660808701529250601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a804d6f6f6f6f20c3a96f4d20f09f9a80c3a9f09f9a806fc3a9204d4d6f206f6f6f6f6f6f6f20f09f9a806ff09f9a80a2646970667358221220f7a187b78cf3985428a78af72a667775ed15ee92cf979e7a704713fa6807319764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_553b9736 {\n string s_0;\n address s_1;\n bool s_2;\n bytes31 s_3;\n }\n\n function test () public pure returns (S_553b9736 memory) {\n S_553b9736 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀Moooo éoM 🚀é🚀oé MMo ooooooo 🚀o🚀\";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x45Caa5A74DF4993d44734bB1a9dfbF7069604b94;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n bytes31 r_3 = bytes31(0x4f7be3e0a262647edd18862267ce16d3954d3133ee4d98607464c47b146add);\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000045caa5a74df4993d44734bb1a9dfbf7069604b9400000000000000000000000000000000000000000000000000000000000000004f7be3e0a262647edd18862267ce16d3954d3133ee4d98607464c47b146add0000000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a804d6f6f6f6f20c3a96f4d20f09f9a80c3a9f09f9a806fc3a9204d4d6f206f6f6f6f6f6f6f20f09f9a806ff09f9a800000000000000000" + }, + { + "name": "random-(string,address,bool,uint80)", + "type": "(string,address,bool,uint80)", + "value": [ + "Moo é🚀MoéM é", + "0x79a3D48D6F1BB514b7ebFB803e9342ee60B7a9D4", + false, + "128055676924077911187697" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MoéM é" + }, + { + "type": "address", + "value": "0x79a3D48D6F1BB514b7ebFB803e9342ee60B7a9D4" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "128055676924077911187697" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101aa806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160808082018352606080835260006020808501829052848601829052938201819052845192830185528183528284018181528386018281529284018281528651808801885260128152714d6f6f20c3a9f09f9a804d6fc3a94d20c3a960701b968101969096529484527379a3d48d6f1bb514b7ebfb803e9342ee60b7a9d490529052691b1de9830e650a4a20f190915290516100d091906100d9565b60405180910390f35b60006020808352835160808285015280518060a086015260005b8181101561010f5782810184015186820160c0015283016100f3565b8181111561012157600060c083880101525b50918501516001600160a01b038116604086015291604086015180151560608701529250606086015169ffffffffffffffffffff811660808701529250601f01601f19169390930160c00194935050505056fea2646970667358221220eb9eaffe3a8dd8358b79f8e485677e81b8837b134fc56f8102283c1c4c45979d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_daf24bb2 {\n string s_0;\n address s_1;\n bool s_2;\n uint80 s_3;\n }\n\n function test () public pure returns (S_daf24bb2 memory) {\n S_daf24bb2 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀MoéM é\";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x79a3D48D6F1BB514b7ebFB803e9342ee60B7a9D4;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n uint80 r_3 = 128055676924077911187697;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000079a3d48d6f1bb514b7ebfb803e9342ee60b7a9d40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b1de9830e650a4a20f100000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a804d6fc3a94d20c3a90000000000000000000000000000" + }, + { + "name": "random-(string,address,int,(bool))", + "type": "(string,address,int,(bool))", + "value": [ + "Moo é🚀 ooo oo🚀o🚀oé🚀🚀ooé🚀oM éM", + "0x0eD3F884279B454526cd3477361b7457cA186310", + "17078730012065088075576366009633964332361127036836211699359595261810398926122", + [false] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 ooo oo🚀o🚀oé🚀🚀ooé🚀oM éM" + }, + { + "type": "address", + "value": "0x0eD3F884279B454526cd3477361b7457cA186310" + }, + { + "type": "number", + "value": "17078730012065088075576366009633964332361127036836211699359595261810398926122" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061021b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061011f565b60405180910390f35b6100566100d9565b61005e6100d9565b60006040518060600160405280603381526020016101b360339139825250730ed3f884279b454526cd3477361b7457ca1863106020808301919091527f25c237f8111ae869c19b54f2f80cf8354d417fb9e1d025f4dbe875e5644b152a60408084019190915280519182019052600081526060820152919050565b60405180608001604052806060815260200160006001600160a01b031681526020016000815260200161011a60405180602001604052806000151581525090565b905290565b60006020808352835160808285015280518060a086015260005b818110156101555782810184015186820160c001528301610139565b8181111561016757600060c083880101525b50918501516001600160a01b038116604086015291604086015160608601526060860151925061019c60808601845115159052565b601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a80206f6f6f206f6ff09f9a806ff09f9a806fc3a9f09f9a80f09f9a806f6fc3a9f09f9a806f4d20c3a94da264697066735822122087a39f7eb735b4bd9c3cedaae33b3081d325c791330331df39f1ed62c1880ff864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_af777dd8 {\n string s_0;\n address s_1;\n int256 s_2;\n S_c1053bda s_3;\n }\n\n function test () public pure returns (S_af777dd8 memory) {\n S_af777dd8 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 ooo oo🚀o🚀oé🚀🚀ooé🚀oM éM\";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x0eD3F884279B454526cd3477361b7457cA186310;\n r.s_1 = r_1;\n }\n {\n int r_2 = 17078730012065088075576366009633964332361127036836211699359595261810398926122;\n r.s_2 = r_2;\n }\n {\n S_c1053bda memory r_3;\n {\n bool r_3_0 = false;\n r_3.s_0 = r_3_0;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000ed3f884279b454526cd3477361b7457ca18631025c237f8111ae869c19b54f2f80cf8354d417fb9e1d025f4dbe875e5644b152a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a80206f6f6f206f6ff09f9a806ff09f9a806fc3a9f09f9a80f09f9a806f6fc3a9f09f9a806f4d20c3a94d00000000000000000000000000" + }, + { + "name": "random-(string,bool,address,bool)", + "type": "(string,bool,address,bool)", + "value": ["Moo é🚀 éoéoM ", false, "0x05d55F069dCB9D98AAF6C73b6f0893b017dC0C62", false], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 éoéoM " + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x05d55F069dCB9D98AAF6C73b6f0893b017dC0C62" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610198806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b604080516080808201835260608083526000602080850182905284860182905293820181905284519283018552818352828401818152838601828152928401828152865180880188526013815272026b7b79061d4f84fcd401061d4b7e1d4b7a69606d1b968101969096529484528190527305d55f069dcb9d98aaf6c73b6f0893b017dc0c6290915290915290516100c891906100d1565b60405180910390f35b60006020808352835160808285015280518060a086015260005b818110156101075782810184015186820160c0015283016100eb565b8181111561011957600060c083880101525b509185015180151560408601529160408601516001600160a01b03811660608701529250606086015180151560808701529250601f01601f19169390930160c00194935050505056fea264697066735822122061c2bce15cdcca794f11b58c7abb43b2e89ae75de597d7b6baeb3ac7bd85006864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1f6b4b96 {\n string s_0;\n bool s_1;\n address s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_1f6b4b96 memory) {\n S_1f6b4b96 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 éoéoM \";\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x05d55F069dCB9D98AAF6C73b6f0893b017dC0C62;\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d55f069dcb9d98aaf6c73b6f0893b017dc0c62000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a8020c3a96fc3a96f4d2000000000000000000000000000" + }, + { + "name": "random-(string,bool,string)[4]", + "type": "(string,bool,string)[4]", + "value": [ + ["Moo é🚀oMoM éo🚀o o 🚀🚀oé ", false, "Moo é🚀 oM🚀🚀o🚀🚀 oo "], + ["Moo é🚀🚀🚀éoM🚀Mo oo oMoo oMMoM🚀 oM", true, "Moo é🚀"], + ["Moo é🚀 oo", false, "Moo é🚀é🚀🚀🚀MM ééé oéoMéMMé🚀🚀 o🚀oé éMM"], + ["Moo é🚀Mé🚀MoéMM🚀M🚀oMooM o", true, "Moo é🚀Mo"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMoM éo🚀o o 🚀🚀oé " + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀 oM🚀🚀o🚀🚀 oo " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀éoM🚀Mo oo oMoo oMMoM🚀 oM" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oo" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀é🚀🚀🚀MM ééé oéoMéMMé🚀🚀 o🚀oé éMM" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mé🚀MoéMM🚀M🚀oMooM o" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀Mo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610441806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102a4565b60405180910390f35b610056610216565b61005e610216565b60408051606080820183528082526000602083015291810191909152600060405180606001604052806027815260200161036960279139825250600060208083018290526040805160608101909152602380825290916103c2908301396040838101919091529183525080516060808201835280825260006020830152918101919091526000604051806060016040528060328152602001610390603291398252506001602080830191909152604080518082018252600a8152689adede418753e13f3560b71b81840152818401528382019290925281516060808201845280825260008284018181528386019290925284518086018652600d81526c4d6f6f20c3a9f09f9a80206f6f60981b81860152835290819052835160808101909452604480855291939092909190610325908301396040838101919091528381019290925250805160608082018352808252600060208301529181019190915260006040518060600160405280602781526020016103e5602791398252506001602080830191909152604080518082018252600c81526b4d6f6f20c3a9f09f9a804d6f60a01b928101929092528201526060820152919050565b60405180608001604052806004905b604080516060808201835280825260006020830152918101919091528152602001906001900390816102255790505090565b6000815180845260005b8181101561027d57602081850181015186830182015201610261565b8181111561028f576000602083870101525b50601f01601f19169290920160200192915050565b602080825260009060a0830183820185845b600481101561031857601f198785030183528151606081518187526102dd82880182610257565b91505086820151151587870152604080830151925086820381880152506103048183610257565b9550505091840191908401906001016102b6565b5091969550505050505056fe4d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a80f09f9a804d4d20c3a9c3a9c3a9206fc3a96f4dc3a94d4dc3a9f09f9a80f09f9a8020206ff09f9a806fc3a920c3a94d4d4d6f6f20c3a9f09f9a806f4d6f4d20c3a96ff09f9a806f206f20f09f9a80f09f9a806fc3a920204d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a96f4df09f9a804d6f206f6f20206f4d6f6f206f4d4d6f4df09f9a80206f4d4d6f6f20c3a9f09f9a8020206f4df09f9a80f09f9a806ff09f9a80f09f9a80206f6f204d6f6f20c3a9f09f9a804dc3a9f09f9a804d6fc3a94d4df09f9a804df09f9a806f4d6f6f4d206fa26469706673582212200851663ab044a133caa3c06b48441903564c312ab83c018219c406d8f7ff691664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_4351c0df {\n string s_0;\n bool s_1;\n string s_2;\n }\n\n function test () public pure returns (S_4351c0df[4] memory) {\n S_4351c0df[4] memory r;\n {\n S_4351c0df memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀oMoM éo🚀o o 🚀🚀oé \";\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀 oM🚀🚀o🚀🚀 oo \";\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_4351c0df memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀🚀🚀éoM🚀Mo oo oMoo oMMoM🚀 oM\";\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀\";\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_4351c0df memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀 oo\";\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = false;\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀é🚀🚀🚀MM ééé oéoMéMMé🚀🚀 o🚀oé éMM\";\n r_2.s_2 = r_2_2;\n }\n r[2] = r_2;\n }\n {\n S_4351c0df memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀Mé🚀MoéMM🚀M🚀oMooM o\";\n r_3.s_0 = r_3_0;\n }\n {\n bool r_3_1 = true;\n r_3.s_1 = r_3_1;\n }\n {\n string memory r_3_2 = unicode\"Moo é🚀Mo\";\n r_3.s_2 = r_3_2;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a806f4d6f4d20c3a96ff09f9a806f206f20f09f9a80f09f9a806fc3a920200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a8020206f4df09f9a80f09f9a806ff09f9a80f09f9a80206f6f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a96f4df09f9a804d6f206f6f20206f4d6f6f206f4d4d6f4df09f9a80206f4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a80206f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a80f09f9a804d4d20c3a9c3a9c3a9206fc3a96f4dc3a94d4dc3a9f09f9a80f09f9a8020206ff09f9a806fc3a920c3a94d4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a804dc3a9f09f9a804d6fc3a94d4df09f9a804df09f9a806f4d6f6f4d206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a804d6f0000000000000000000000000000000000000000" + }, + { + "name": "random-(string,bool,uint224,bytes19)", + "type": "(string,bool,uint224,bytes19)", + "value": [ + "Moo é🚀éoéMoo🚀oo🚀ooéé", + true, + "7929352425546039302414623540843426162738876888310655861848363013696", + "0x674466ebad4210bfd90b6c82e975b8a5d30cf6" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoéMoo🚀oo🚀ooéé" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "7929352425546039302414623540843426162738876888310655861848363013696" + }, + { + "type": "hexstring", + "value": "0x674466ebad4210bfd90b6c82e975b8a5d30cf6" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101f5806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100fe565b60405180910390f35b604080516080810182526060808252600060208301819052928201839052810191909152604080516080810182526060808252600060208301819052928201839052810191909152600060405180606001604052806022815260200161019e60229139825250600160208201527b4b4b3020f730d0191e228321354a5a4c87f9eade71cef0117780964060408201527233a23375d6a1085fec85b64174badc52e9867b60691b6060820152919050565b60006020808352835160808285015280518060a086015260005b818110156101345782810184015186820160c001528301610118565b8181111561014657600060c083880101525b509185015180151560408601529160408601516001600160e01b0381166060870152925060608601516cffffffffffffffffffffffffff19811660808701529250601f01601f19169390930160c00194935050505056fe4d6f6f20c3a9f09f9a80c3a96fc3a94d6f6ff09f9a806f6ff09f9a806f6fc3a9c3a9a26469706673582212203764c3923d2963c4a4431775a5b587751fe46bffc6505cde959df0d6c572326564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c66d90ca {\n string s_0;\n bool s_1;\n uint224 s_2;\n bytes19 s_3;\n }\n\n function test () public pure returns (S_c66d90ca memory) {\n S_c66d90ca memory r;\n {\n string memory r_0 = unicode\"Moo é🚀éoéMoo🚀oo🚀ooéé\";\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n uint224 r_2 = 7929352425546039302414623540843426162738876888310655861848363013696;\n r.s_2 = r_2;\n }\n {\n bytes19 r_3 = bytes19(0x674466ebad4210bfd90b6c82e975b8a5d30cf6);\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000004b4b3020f730d0191e228321354a5a4c87f9eade71cef01177809640674466ebad4210bfd90b6c82e975b8a5d30cf60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a80c3a96fc3a94d6f6ff09f9a806f6ff09f9a806f6fc3a9c3a9000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,bool[],bool)", + "type": "(string,bool[],bool)", + "value": [ + "Moo é🚀M éooo🚀Mé🚀Mo Méé éo 🚀o o🚀ooo ooMoo🚀ooé🚀MMoMéoéM o oMo🚀o", + [true, false, false, true], + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M éooo🚀Mé🚀Mo Méé éo 🚀o o🚀ooo ooMoo🚀ooé🚀MMoMéoéM o oMo🚀o" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102fa806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101bf565b60405180910390f35b604080516060808201835280825260208201526000918101919091526040805160608082018352808252602082015260009181019190915260006040518060800160405280605e8152602001610267605e913982525060408051600480825260a082019092526000916020820160808036833701905050905060006001905080826000815181106100e1576100e1610250565b602002602001019015159081151581525050506000808260018151811061010a5761010a610250565b602002602001019015159081151581525050506000808260028151811061013357610133610250565b60200260200101901515908115158152505050600060019050808260038151811061016057610160610250565b9115156020928302919091018201528301919091525060006040820152919050565b600081518084526020808501945080840160005b838110156101b4578151151587529582019590820190600101610196565b509495945050505050565b600060208083528351606082850152805180608086015260005b818110156101f55782810184015186820160a0015283016101d9565b8181111561020757600060a083880101525b5091850151601f92909201601f191684018481036080016040860152905061023260a0820183610182565b9150506040840151610248606085018215159052565b509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d20c3a96f6f6ff09f9a804dc3a9f09f9a804d6f204dc3a9c3a920c3a96f20f09f9a806f206ff09f9a806f6f6f206f6f4d6f6ff09f9a806f6fc3a9f09f9a804d4d6f4dc3a96fc3a94d206f206f4d6ff09f9a806fa2646970667358221220ddd2879786fc7c4be7073225a4448e6195ee54f7182b8662f3b2437b30f9575664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_77790179 {\n string s_0;\n bool[] s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_77790179 memory) {\n S_77790179 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀M éooo🚀Mé🚀Mo Méé éo 🚀o o🚀ooo ooMoo🚀ooé🚀MMoMéoéM o oMo🚀o\";\n r.s_0 = r_0;\n }\n {\n bool[] memory r_1 = new bool[](4);\n {\n bool r_1_0 = true;\n r_1[0] = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1[1] = r_1_1;\n }\n {\n bool r_1_2 = false;\n r_1[2] = r_1_2;\n }\n {\n bool r_1_3 = true;\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a804d20c3a96f6f6ff09f9a804dc3a9f09f9a804d6f204dc3a9c3a920c3a96f20f09f9a806f206ff09f9a806f6f6f206f6f4d6f6ff09f9a806f6fc3a9f09f9a804d4d6f4dc3a96fc3a94d206f206f4d6ff09f9a806f000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(string,bytes31,bool,uint256)", + "type": "(string,bytes31,bool,uint256)", + "value": [ + "Moo é🚀", + "0x26624d8559730c3973de75356d707ee94067a09f8d5845d25a81d422e04c54", + true, + "28432250438509216880414774208555470162261860695005405011511823559452788089260" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "hexstring", + "value": "0x26624d8559730c3973de75356d707ee94067a09f8d5845d25a81d422e04c54" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "28432250438509216880414774208555470162261860695005405011511823559452788089260" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b60408051608080820183526060808352600060208085018290528486018290529382018190528451928301855281835282840181815283860182815292840191825285518087018752600a8152689adede418753e13f3560b71b958101959095529383527f26624d8559730c3973de75356d707ee94067a09f8d5845d25a81d422e04c5400909352600190527f3edc155e0b45e43e46e547396aa3c214f64f616e8f3a7c32c0f4d90d295561ac90915290516100ec91906100f5565b60405180910390f35b60006020808352835160808285015280518060a086015260005b8181101561012b5782810184015186820160c00152830161010f565b8181111561013d57600060c083880101525b509185015160ff198116604086015291604086015180151560608701529250606095909501516080850152505050601f91909101601f19160160c0019056fea2646970667358221220ec4722983f43ffff654cf77f8f8f9d824984870215c0a101507274c41040cf9764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_197d5182 {\n string s_0;\n bytes31 s_1;\n bool s_2;\n uint256 s_3;\n }\n\n function test () public pure returns (S_197d5182 memory) {\n S_197d5182 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀\";\n r.s_0 = r_0;\n }\n {\n bytes31 r_1 = bytes31(0x26624d8559730c3973de75356d707ee94067a09f8d5845d25a81d422e04c54);\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n uint256 r_3 = 28432250438509216880414774208555470162261860695005405011511823559452788089260;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008026624d8559730c3973de75356d707ee94067a09f8d5845d25a81d422e04c540000000000000000000000000000000000000000000000000000000000000000013edc155e0b45e43e46e547396aa3c214f64f616e8f3a7c32c0f4d90d295561ac000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,string,bytes23,bool)", + "type": "(string,string,bytes23,bool)", + "value": [ + "Moo é🚀oooMMéooM oo🚀éo🚀oMo🚀oéoo 🚀éoooo ", + "Moo é🚀 éM M o é🚀 oM🚀🚀ooMo 🚀MéMéM é🚀éo🚀 Méo🚀🚀ooM 🚀 o", + "0x3be07bc3327e08fe9e4a7ea15f12d6c7e3a7540eee94a9", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oooMMéooM oo🚀éo🚀oMo🚀oéoo 🚀éoooo " + }, + { + "type": "string", + "value": "Moo é🚀 éM M o é🚀 oM🚀🚀ooMo 🚀MéMéM é🚀éo🚀 Méo🚀🚀ooM 🚀 o" + }, + { + "type": "hexstring", + "value": "0x3be07bc3327e08fe9e4a7ea15f12d6c7e3a7540eee94a9" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610286806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610155565b60405180910390f35b60408051608081018252606080825260208201819052600092820183905281019190915260408051608081018252606080825260208201819052600092820183905281019190915260006040518060600160405280603a81526020016101be603a913982525060408051608081019091526059808252600091906101f860208301396020830152507f3be07bc3327e08fe9e4a7ea15f12d6c7e3a7540eee94a9000000000000000000604082015260006060820152919050565b6000815180845260005b8181101561012e57602081850181015186830182015201610112565b81811115610140576000602083870101525b50601f01601f19169290920160200192915050565b60208152600082516080602084015261017160a0840182610108565b90506020840151601f1984830301604085015261018e8282610108565b91505068ffffffffffffffffff196040850151166060840152606084015115156080840152809150509291505056fe4d6f6f20c3a9f09f9a806f6f6f4d4dc3a96f6f4d206f6ff09f9a80c3a96ff09f9a806f4d6ff09f9a806fc3a96f6f20f09f9a80c3a96f6f6f6f204d6f6f20c3a9f09f9a8020c3a94d204d206f20c3a9f09f9a80206f4df09f9a80f09f9a806f6f4d6f20f09f9a804dc3a94dc3a94d20c3a9f09f9a80c3a96ff09f9a80204dc3a96ff09f9a80f09f9a806f6f4d20f09f9a80206fa2646970667358221220eb31af286bac89e0ec8defb0ef18f9ab01bf9919b33716ce486bc6539d2e2ec364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b05116ba {\n string s_0;\n string s_1;\n bytes23 s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_b05116ba memory) {\n S_b05116ba memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oooMMéooM oo🚀éo🚀oMo🚀oéoo 🚀éoooo \";\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀 éM M o é🚀 oM🚀🚀ooMo 🚀MéMéM é🚀éo🚀 Méo🚀🚀ooM 🚀 o\";\n r.s_1 = r_1;\n }\n {\n bytes23 r_2 = bytes23(0x3be07bc3327e08fe9e4a7ea15f12d6c7e3a7540eee94a9);\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e03be07bc3327e08fe9e4a7ea15f12d6c7e3a7540eee94a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a4d6f6f20c3a9f09f9a806f6f6f4d4dc3a96f6f4d206f6ff09f9a80c3a96ff09f9a806f4d6ff09f9a806fc3a96f6f20f09f9a80c3a96f6f6f6f2000000000000000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a8020c3a94d204d206f20c3a9f09f9a80206f4df09f9a80f09f9a806f6f4d6f20f09f9a804dc3a94dc3a94d20c3a9f09f9a80c3a96ff09f9a80204dc3a96ff09f9a80f09f9a806f6f4d20f09f9a80206f00000000000000" + }, + { + "name": "random-(string,string,uint72,(int144))", + "type": "(string,string,uint72,(int144))", + "value": [ + "Moo é🚀 é ooéoooééoMoo🚀é oé 🚀ooMo🚀 o ", + "Moo é🚀", + "4696861604126051610964", + ["8405176063811492303893542841225740592083144"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é ooéoooééoMoo🚀é oé 🚀ooMo🚀 o " + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "number", + "value": "4696861604126051610964" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "8405176063811492303893542841225740592083144" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610248806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610171565b60405180910390f35b6100566100db565b61005e6100db565b60006040518060600160405280603881526020016101db60389139825250604080518082018252600a8152689adede418753e13f3560b71b6020808301919091528084019190915268fe9e0c77e9d0b1315482840152815190810190915271607c97aaea05090805be968f104eccbff0c881526060820152919050565b60405180608001604052806060815260200160608152602001600068ffffffffffffffffff16815260200161011f6040518060200160405280600060110b81525090565b905290565b6000815180845260005b8181101561014a5760208185018101518683018201520161012e565b8181111561015c576000602083870101525b50601f01601f19169290920160200192915050565b60208152600082516080602084015261018d60a0840182610124565b90506020840151601f198483030160408501526101aa8282610124565b91505068ffffffffffffffffff604085015116606084015260608401515160110b6080840152809150509291505056fe4d6f6f20c3a9f09f9a8020c3a920206f6fc3a96f6f6fc3a9c3a96f4d6f6ff09f9a80c3a9206fc3a920f09f9a806f6f4d6ff09f9a80206f20a26469706673582212203b6205f7551fe79c0d3715911e9f8c0eb03219e4c216cc3cd840c44a4e04639164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f21f5033 {\n int144 s_0;\n }\n\n struct S_9a2e45f0 {\n string s_0;\n string s_1;\n uint72 s_2;\n S_f21f5033 s_3;\n }\n\n function test () public pure returns (S_9a2e45f0 memory) {\n S_9a2e45f0 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 é ooéoooééoMoo🚀é oé 🚀ooMo🚀 o \";\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r.s_1 = r_1;\n }\n {\n uint72 r_2 = 4696861604126051610964;\n r.s_2 = r_2;\n }\n {\n S_f21f5033 memory r_3;\n {\n int144 r_3_0 = 8405176063811492303893542841225740592083144;\n r_3.s_0 = r_3_0;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000fe9e0c77e9d0b131540000000000000000000000000000607c97aaea05090805be968f104eccbff0c800000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a8020c3a920206f6fc3a96f6f6fc3a9c3a96f4d6f6ff09f9a80c3a9206fc3a920f09f9a806f6f4d6ff09f9a80206f200000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,uint48,int32)[4]", + "type": "(string,uint48,int32)[4]", + "value": [ + [ + "Moo é🚀o é🚀 ooé MéMoM🚀🚀oMMoMM🚀M é MMéooMé MoéMMM🚀M🚀oéMé o🚀o", + "192913503420933", + "-59377446" + ], + ["Moo é🚀é ééoo", "74822720784228", "-1102617257"], + ["Moo é🚀MMMééoo🚀Mo ", "42392804403717", "282475144"], + ["Moo é🚀🚀o🚀oo MéMo🚀M o🚀MMéooé 🚀oMo🚀🚀", "129126784630786", "-255185507"] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o é🚀 ooé MéMoM🚀🚀oMMoMM🚀M é MMéooMé MoéMMM🚀M🚀oéMé o🚀o" + }, + { + "type": "number", + "value": "192913503420933" + }, + { + "type": "number", + "value": "-59377446" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é ééoo" + }, + { + "type": "number", + "value": "74822720784228" + }, + { + "type": "number", + "value": "-1102617257" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MMMééoo🚀Mo " + }, + { + "type": "number", + "value": "42392804403717" + }, + { + "type": "number", + "value": "282475144" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀o🚀oo MéMo🚀M o🚀MMéooé 🚀oMo🚀🚀" + }, + { + "type": "number", + "value": "129126784630786" + }, + { + "type": "number", + "value": "-255185507" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610392806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610206565b60405180910390f35b6100566101c7565b61005e6101c7565b604080516060808201835281526000602082018190529181019190915260006040518060800160405280605f81526020016102fe605f913982525065af742cd8020560208083019190915263038a07251960408084019190915291835281516060808201845280825260008284018181528386018281528651808801885260148152734d6f6f20c3a9f09f9a80c3a92020c3a9c3a96f6f60601b81880152855265440d05b187649091526341b89aa8199052858401929092528351808201855281815280840183815281860184815286518088018852601a81527f4d6f6f20c3a9f09f9a804d4d4dc3a9c3a96f6ff09f9a804d6f2000000000000081880152835265268e580c2a059091526310d63a88905285850152835180820185528181528084018390528085018390528451918201909452603e80825291929091906102c090830139825250657570ac2100026020820152630f35d2621960408201526060820152919050565b60405180608001604052806004905b60408051606080820183528152600060208083018290529282015282526000199092019101816101d65790505090565b602080825260009060a083018382018584805b60048110156102b257601f1980898703018552835160608151818952805180838b01528692505b8083101561025e578183018b01518a840160800152918a0191610240565b8083111561026f57866080828c0101525b8a84015165ffffffffffff168a8c0152604093840151600381900b858c0152939250601f0190931697909701608001965050509285019291850191600101610219565b509297965050505050505056fe4d6f6f20c3a9f09f9a80f09f9a806ff09f9a806f6f204dc3a94d6ff09f9a804d206ff09f9a804d4dc3a96f6fc3a920f09f9a806f4d6ff09f9a80f09f9a804d6f6f20c3a9f09f9a806f20c3a9f09f9a80206f6fc3a92020204dc3a94d6f4df09f9a80f09f9a806f4d4d6f4d4df09f9a804d2020c3a9204d4dc3a96f6f4dc3a9204d6fc3a94d4d4df09f9a804df09f9a806fc3a94dc3a9206ff09f9a806fa2646970667358221220c911866e70f0e2c1142150f3132fd97ead5a2048206c09b09f599a249652b8d164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ca7996fc {\n string s_0;\n uint48 s_1;\n int32 s_2;\n }\n\n function test () public pure returns (S_ca7996fc[4] memory) {\n S_ca7996fc[4] memory r;\n {\n S_ca7996fc memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀o é🚀 ooé MéMoM🚀🚀oMMoMM🚀M é MMéooMé MoéMMM🚀M🚀oéMé o🚀o\";\n r_0.s_0 = r_0_0;\n }\n {\n uint48 r_0_1 = 192913503420933;\n r_0.s_1 = r_0_1;\n }\n {\n int32 r_0_2 = -59377446;\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_ca7996fc memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀é ééoo\";\n r_1.s_0 = r_1_0;\n }\n {\n uint48 r_1_1 = 74822720784228;\n r_1.s_1 = r_1_1;\n }\n {\n int32 r_1_2 = -1102617257;\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_ca7996fc memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀MMMééoo🚀Mo \";\n r_2.s_0 = r_2_0;\n }\n {\n uint48 r_2_1 = 42392804403717;\n r_2.s_1 = r_2_1;\n }\n {\n int32 r_2_2 = 282475144;\n r_2.s_2 = r_2_2;\n }\n r[2] = r_2;\n }\n {\n S_ca7996fc memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀🚀o🚀oo MéMo🚀M o🚀MMéooé 🚀oMo🚀🚀\";\n r_3.s_0 = r_3_0;\n }\n {\n uint48 r_3_1 = 129126784630786;\n r_3.s_1 = r_3_1;\n }\n {\n int32 r_3_2 = -255185507;\n r_3.s_2 = r_3_2;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000af742cd80205fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc75f8da000000000000000000000000000000000000000000000000000000000000005f4d6f6f20c3a9f09f9a806f20c3a9f09f9a80206f6fc3a92020204dc3a94d6f4df09f9a80f09f9a806f4d4d6f4d4df09f9a804d2020c3a9204d4dc3a96f6f4dc3a9204d6fc3a94d4d4df09f9a804df09f9a806fc3a94dc3a9206ff09f9a806f0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000440d05b18764ffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe47655700000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a80c3a92020c3a9c3a96f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000268e580c2a050000000000000000000000000000000000000000000000000000000010d63a88000000000000000000000000000000000000000000000000000000000000001a4d6f6f20c3a9f09f9a804d4d4dc3a9c3a96f6ff09f9a804d6f20000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000007570ac210002fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0ca2d9d000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a80f09f9a806ff09f9a806f6f204dc3a94d6ff09f9a804d206ff09f9a804d4dc3a96f6fc3a920f09f9a806f4d6ff09f9a80f09f9a800000" + }, + { + "name": "random-(string[3][4][1])", + "type": "(string[3][4][1])", + "value": [ + [ + [ + [ + "Moo é🚀 🚀MM oo🚀oo oMéooo 🚀 Mooé🚀M 🚀éo🚀🚀é🚀o o 🚀", + "Moo é🚀Mo🚀🚀éoMoé🚀ooMooMMoo", + "Moo é🚀oo🚀éoo é🚀M🚀 o 🚀 ooMo oéoMMMMoMoMo 🚀o oo🚀oo" + ], + [ + "Moo é🚀oMé🚀éoM éé🚀Méo🚀 MéM oo oéé🚀 ooM Mé", + "Moo é🚀 Moo🚀oéo🚀éooé🚀🚀Mo🚀éooMé🚀oéo🚀o o 🚀Mo 🚀é🚀oéoo", + "Moo é🚀" + ], + [ + "Moo é🚀 oo o🚀oo🚀M🚀oM é🚀oooo🚀oo é", + "Moo é🚀o éM🚀🚀 oooM🚀 ooMo oMoooé é🚀é🚀éMéoooo é éMé éooé🚀ooM", + "Moo é🚀🚀🚀🚀M🚀oé" + ], + [ + "Moo é🚀oo o ooooo", + "Moo é🚀", + "Moo é🚀oMoM M éoéMooéM🚀🚀oMMéMo🚀oM🚀 🚀é🚀🚀oo 🚀 🚀MM🚀Méo o" + ] + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀MM oo🚀oo oMéooo 🚀 Mooé🚀M 🚀éo🚀🚀é🚀o o 🚀" + }, + { + "type": "string", + "value": "Moo é🚀Mo🚀🚀éoMoé🚀ooMooMMoo" + }, + { + "type": "string", + "value": "Moo é🚀oo🚀éoo é🚀M🚀 o 🚀 ooMo oéoMMMMoMoMo 🚀o oo🚀oo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMé🚀éoM éé🚀Méo🚀 MéM oo oéé🚀 ooM Mé" + }, + { + "type": "string", + "value": "Moo é🚀 Moo🚀oéo🚀éooé🚀🚀Mo🚀éooMé🚀oéo🚀o o 🚀Mo 🚀é🚀oéoo" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oo o🚀oo🚀M🚀oM é🚀oooo🚀oo é" + }, + { + "type": "string", + "value": "Moo é🚀o éM🚀🚀 oooM🚀 ooMo oMoooé é🚀é🚀éMéoooo é éMé éooé🚀ooM" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀🚀M🚀oé" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo o ooooo" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀oMoM M éoéMooéM🚀🚀oMMéMo🚀oM🚀 🚀é🚀🚀oo 🚀 🚀MM🚀Méo o" + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061067b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610303565b60405180910390f35b61005661026a565b61005e61026a565b610066610282565b61006e6102af565b6100766102dc565b60006040518060800160405280605381526020016105146053913982525060408051606081019091526028808252600091906105c2602083013990508082600160200201819052505060006040518060800160405280604981526020016104526049913960408301525081526100ea6102dc565b60006040518060800160405280604381526020016104d1604391398252506040805160808101909152605b808252600091906103f76020830139602083810191909152604080518082018252600a8152689adede418753e13f3560b71b81840152908401528301919091525061015e6102dc565b600060405180606001604052806036815260200161049b603691398252506040805160808101909152605b808252600091906105676020830139602083810191909152604080518082018252601e81527f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a804df09f9a806fc3a900009281019290925280840191909152830191909152506101ec6102dc565b60408051808201825260148152734d6f6f20c3a9f09f9a806f6f206f206f6f6f6f6f60601b60208083019190915290835281518083018352600a8152689adede418753e13f3560b71b8183015283820152815160808101909252605c808352600092916105ea90830139604083015250606082015281528152919050565b604051806020016040528061027d610282565b905290565b60405180602001604052806001905b6102996102af565b8152602001906001900390816102915790505090565b60405180608001604052806004905b6102c66102dc565b8152602001906001900390816102be5790505090565b60405180606001604052806003905b60608152602001906001900390816102eb5790505090565b6020815260008251602080840152604083016060840160005b60018110156103ec57858203603f190183528351826080810160005b60048110156103d45785820383528351826060810160005b60038110156103bc5785820383528351805180845260005b8181101561038457602081840181015186830182015201610368565b81811115610396576000602083870101525b5060209586019594850194601f91909101601f1916939093019092019150600101610350565b50602096870196959095019493505050600101610338565b5060209687019695909501949350505060010161031c565b509594505050505056fe4d6f6f20c3a9f09f9a80204d6f6ff09f9a806fc3a96ff09f9a80c3a96f6fc3a9f09f9a80f09f9a804d6ff09f9a80c3a96f6f4dc3a9f09f9a806fc3a96ff09f9a806f206f20f09f9a804d6f20f09f9a80c3a9f09f9a806fc3a96f6f4d6f6f20c3a9f09f9a806f6ff09f9a80c3a96f6f20c3a9f09f9a804df09f9a80206f20f09f9a80206f6f4d6f206fc3a96f4d4d4d4d6f4d6f4d6f20f09f9a806f206f6ff09f9a806f6f4d6f6f20c3a9f09f9a80206f6f2020206ff09f9a806f6ff09f9a804df09f9a806f4d20c3a9f09f9a806f6f6f6ff09f9a806f6f20c3a94d6f6f20c3a9f09f9a806f4dc3a9f09f9a80c3a96f4d2020c3a9c3a9f09f9a804dc3a96ff09f9a80204dc3a94d20206f6f206fc3a9c3a9f09f9a80206f6f4d204dc3a94d6f6f20c3a9f09f9a8020f09f9a804d4d206f6ff09f9a806f6f206f4dc3a96f6f6f202020f09f9a8020204d6f6fc3a9f09f9a804d20f09f9a80c3a96ff09f9a80f09f9a80c3a9f09f9a806f206f20f09f9a804d6f6f20c3a9f09f9a806f2020c3a94df09f9a80f09f9a80206f6f6f4df09f9a80206f6f4d6f206f4d6f6f6fc3a920c3a9f09f9a80c3a9f09f9a80c3a94dc3a96f6f6f6f20c3a920c3a94dc3a920c3a96f6fc3a9f09f9a806f6f4d4d6f6f20c3a9f09f9a804d6ff09f9a80f09f9a80c3a96f4d6fc3a9f09f9a806f6f4d6f6f4d4d6f6f4d6f6f20c3a9f09f9a806f4d6f4d204d20c3a96fc3a94d6f6fc3a94df09f9a80f09f9a806f4d4dc3a94d6ff09f9a806f4df09f9a8020f09f9a80c3a9f09f9a80f09f9a806f6f20f09f9a8020f09f9a804d4df09f9a804dc3a96f206fa2646970667358221220fdcb776b044694abe47c9e302577425ce51983fe6df837cefec6acb6b591f20564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_3a92734c {\n string[3][4][1] s_0;\n }\n\n function test () public pure returns (S_3a92734c memory) {\n S_3a92734c memory r;\n {\n string[3][4][1] memory r_0;\n {\n string[3][4] memory r_0_0;\n {\n string[3] memory r_0_0_0;\n {\n string memory r_0_0_0_0 = unicode\"Moo é🚀 🚀MM oo🚀oo oMéooo 🚀 Mooé🚀M 🚀éo🚀🚀é🚀o o 🚀\";\n r_0_0_0[0] = r_0_0_0_0;\n }\n {\n string memory r_0_0_0_1 = unicode\"Moo é🚀Mo🚀🚀éoMoé🚀ooMooMMoo\";\n r_0_0_0[1] = r_0_0_0_1;\n }\n {\n string memory r_0_0_0_2 = unicode\"Moo é🚀oo🚀éoo é🚀M🚀 o 🚀 ooMo oéoMMMMoMoMo 🚀o oo🚀oo\";\n r_0_0_0[2] = r_0_0_0_2;\n }\n r_0_0[0] = r_0_0_0;\n }\n {\n string[3] memory r_0_0_1;\n {\n string memory r_0_0_1_0 = unicode\"Moo é🚀oMé🚀éoM éé🚀Méo🚀 MéM oo oéé🚀 ooM Mé\";\n r_0_0_1[0] = r_0_0_1_0;\n }\n {\n string memory r_0_0_1_1 = unicode\"Moo é🚀 Moo🚀oéo🚀éooé🚀🚀Mo🚀éooMé🚀oéo🚀o o 🚀Mo 🚀é🚀oéoo\";\n r_0_0_1[1] = r_0_0_1_1;\n }\n {\n string memory r_0_0_1_2 = unicode\"Moo é🚀\";\n r_0_0_1[2] = r_0_0_1_2;\n }\n r_0_0[1] = r_0_0_1;\n }\n {\n string[3] memory r_0_0_2;\n {\n string memory r_0_0_2_0 = unicode\"Moo é🚀 oo o🚀oo🚀M🚀oM é🚀oooo🚀oo é\";\n r_0_0_2[0] = r_0_0_2_0;\n }\n {\n string memory r_0_0_2_1 = unicode\"Moo é🚀o éM🚀🚀 oooM🚀 ooMo oMoooé é🚀é🚀éMéoooo é éMé éooé🚀ooM\";\n r_0_0_2[1] = r_0_0_2_1;\n }\n {\n string memory r_0_0_2_2 = unicode\"Moo é🚀🚀🚀🚀M🚀oé\";\n r_0_0_2[2] = r_0_0_2_2;\n }\n r_0_0[2] = r_0_0_2;\n }\n {\n string[3] memory r_0_0_3;\n {\n string memory r_0_0_3_0 = unicode\"Moo é🚀oo o ooooo\";\n r_0_0_3[0] = r_0_0_3_0;\n }\n {\n string memory r_0_0_3_1 = unicode\"Moo é🚀\";\n r_0_0_3[1] = r_0_0_3_1;\n }\n {\n string memory r_0_0_3_2 = unicode\"Moo é🚀oMoM M éoéMooéM🚀🚀oMMéMo🚀oM🚀 🚀é🚀🚀oo 🚀 🚀MM🚀Méo o\";\n r_0_0_3[2] = r_0_0_3_2;\n }\n r_0_0[3] = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000003e00000000000000000000000000000000000000000000000000000000000000560000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000534d6f6f20c3a9f09f9a8020f09f9a804d4d206f6ff09f9a806f6f206f4dc3a96f6f6f202020f09f9a8020204d6f6fc3a9f09f9a804d20f09f9a80c3a96ff09f9a80f09f9a80c3a9f09f9a806f206f20f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000284d6f6f20c3a9f09f9a804d6ff09f9a80f09f9a80c3a96f4d6fc3a9f09f9a806f6f4d6f6f4d4d6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000494d6f6f20c3a9f09f9a806f6ff09f9a80c3a96f6f20c3a9f09f9a804df09f9a80206f20f09f9a80206f6f4d6f206fc3a96f4d4d4d4d6f4d6f4d6f20f09f9a806f206f6ff09f9a806f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a806f4dc3a9f09f9a80c3a96f4d2020c3a9c3a9f09f9a804dc3a96ff09f9a80204dc3a94d20206f6f206fc3a9c3a9f09f9a80206f6f4d204dc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a80204d6f6ff09f9a806fc3a96ff09f9a80c3a96f6fc3a9f09f9a80f09f9a804d6ff09f9a80c3a96f6f4dc3a9f09f9a806fc3a96ff09f9a806f206f20f09f9a804d6f20f09f9a80c3a9f09f9a806fc3a96f6f0000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a80206f6f2020206ff09f9a806f6ff09f9a804df09f9a806f4d20c3a9f09f9a806f6f6f6ff09f9a806f6f20c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a806f2020c3a94df09f9a80f09f9a80206f6f6f4df09f9a80206f6f4d6f206f4d6f6f6fc3a920c3a9f09f9a80c3a9f09f9a80c3a94dc3a96f6f6f6f20c3a920c3a94dc3a920c3a96f6fc3a9f09f9a806f6f4d0000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a804df09f9a806fc3a90000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a806f6f206f206f6f6f6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a806f4d6f4d204d20c3a96fc3a94d6f6fc3a94df09f9a80f09f9a806f4d4dc3a94d6ff09f9a806f4df09f9a8020f09f9a80c3a9f09f9a80f09f9a806f6f20f09f9a8020f09f9a804d4df09f9a804dc3a96f206f00000000" + }, + { + "name": "random-(uint,address[4],(bytes4))", + "type": "(uint,address[4],(bytes4))", + "value": [ + "70901747271732806004964044089535025384446225808902146118841308291816282569448", + [ + "0x321972D66cD706deDbFfe7c94B9C6cd1253FB6B6", + "0x941De6Bf1B33f04e4f72Bc5a85109EAC6CB66e8a", + "0xEbfB8884dc54991129d0096599C86a95cCeb9031", + "0x413012752d7C6050D508Ec0b9c50fB75A74f42Dd" + ], + ["0x6ed5e7b6"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "70901747271732806004964044089535025384446225808902146118841308291816282569448" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x321972D66cD706deDbFfe7c94B9C6cd1253FB6B6" + }, + { + "type": "address", + "value": "0x941De6Bf1B33f04e4f72Bc5a85109EAC6CB66e8a" + }, + { + "type": "address", + "value": "0xEbfB8884dc54991129d0096599C86a95cCeb9031" + }, + { + "type": "address", + "value": "0x413012752d7C6050D508Ec0b9c50fB75A74f42Dd" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x6ed5e7b6" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101f9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610167565b60405180910390f35b610056610117565b61005e610117565b7f9cc0f782bf7a955f2179e686dfa7511a8d308dd7fe8f36669be7ba4ecbf2bae88152610089610149565b73321972d66cd706dedbffe7c94b9c6cd1253fb6b6815273941de6bf1b33f04e4f72bc5a85109eac6cb66e8a60208083019190915273ebfb8884dc54991129d0096599c86a95cceb903160408084019190915273413012752d7c6050d508ec0b9c50fb75a74f42dd6060840152838201929092528151908101825263376af3db60e11b815290820152919050565b604051806060016040528060008152602001610131610149565b81526040805160208181019092526000815291015290565b60405180608001604052806004906020820280368337509192915050565b8151815260208083015160c08301919081840160005b60048110156101a35782516001600160a01b03168252918301919083019060010161017d565b5050505060409290920151516001600160e01b03191660a091909101529056fea2646970667358221220bcfda59a9a5660c5eecaf4942d1b77960e9b495df686267245ce392d91e4bfbf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_55eba628 {\n bytes4 s_0;\n }\n\n struct S_f3b90052 {\n uint256 s_0;\n address[4] s_1;\n S_55eba628 s_2;\n }\n\n function test () public pure returns (S_f3b90052 memory) {\n S_f3b90052 memory r;\n {\n uint r_0 = 70901747271732806004964044089535025384446225808902146118841308291816282569448;\n r.s_0 = r_0;\n }\n {\n address[4] memory r_1;\n {\n address r_1_0 = 0x321972D66cD706deDbFfe7c94B9C6cd1253FB6B6;\n r_1[0] = r_1_0;\n }\n {\n address r_1_1 = 0x941De6Bf1B33f04e4f72Bc5a85109EAC6CB66e8a;\n r_1[1] = r_1_1;\n }\n {\n address r_1_2 = 0xEbfB8884dc54991129d0096599C86a95cCeb9031;\n r_1[2] = r_1_2;\n }\n {\n address r_1_3 = 0x413012752d7C6050D508Ec0b9c50fB75A74f42Dd;\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n S_55eba628 memory r_2;\n {\n bytes4 r_2_0 = bytes4(0x6ed5e7b6);\n r_2.s_0 = r_2_0;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x9cc0f782bf7a955f2179e686dfa7511a8d308dd7fe8f36669be7ba4ecbf2bae8000000000000000000000000321972d66cd706dedbffe7c94b9c6cd1253fb6b6000000000000000000000000941de6bf1b33f04e4f72bc5a85109eac6cb66e8a000000000000000000000000ebfb8884dc54991129d0096599c86a95cceb9031000000000000000000000000413012752d7c6050d508ec0b9c50fb75a74f42dd6ed5e7b600000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(uint,bool,string,string)", + "type": "(uint,bool,string,string)", + "value": [ + "82765636726136641807061904958593716459615058397976371654824866368703923600900", + false, + "Moo é🚀 🚀🚀 oMé🚀🚀MMMM oM é🚀MoMo🚀éo ééo🚀Mo🚀é ", + "Moo é🚀ééoMé oo é🚀é🚀oooM oMooM🚀ééo 🚀éo o o é 🚀oooMooé 🚀é ooM " + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "82765636726136641807061904958593716459615058397976371654824866368703923600900" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀 🚀🚀 oMé🚀🚀MMMM oM é🚀MoMo🚀éo ééo🚀Mo🚀é " + }, + { + "type": "string", + "value": "Moo é🚀ééoMé oo é🚀é🚀oooM oMooM🚀ééo 🚀éo o o é 🚀oooMooé 🚀é ooM " + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102a3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610169565b60405180910390f35b61007b60405180608001604052806000815260200160001515815260200160608152602001606081525090565b6100a860405180608001604052806000815260200160001515815260200160608152602001606081525090565b7fb6fbb0b819f9c8e2c402c35247efb07952615bfe522a1fd16d04f78e9381be048152600060208083018290526040805160808101909152604c8082529091610222908301396040808401919091528051608081019091526060808252600092506101c26020830139606083015250919050565b6000815180845260005b8181101561014257602081850181015186830182015201610126565b81811115610154576000602083870101525b50601f01601f19169290920160200192915050565b6020815281516020820152602082015115156040820152600060408301516080606084015261019b60a084018261011c565b90506060840151601f198483030160808501526101b8828261011c565b9594505050505056fe4d6f6f20c3a9f09f9a80c3a9c3a96f4dc3a920206f6f20c3a9f09f9a80c3a9f09f9a806f6f6f4d206f4d6f6f4df09f9a80c3a9c3a96f20f09f9a80c3a96f206f2020206f20c3a920f09f9a806f6f6f4d6f6fc3a920f09f9a80c3a9206f6f4d204d6f6f20c3a9f09f9a8020f09f9a80f09f9a80206f4dc3a9f09f9a80f09f9a804d4d4d4d206f4d20c3a9f09f9a804d6f4d6ff09f9a80c3a96f20c3a9c3a96ff09f9a804d6ff09f9a80c3a920a26469706673582212207ae24371f59d593a91cb4a03c9c4fea468dc223ed83edb25f1916d85ca01425864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c00b13ee {\n uint256 s_0;\n bool s_1;\n string s_2;\n string s_3;\n }\n\n function test () public pure returns (S_c00b13ee memory) {\n S_c00b13ee memory r;\n {\n uint r_0 = 82765636726136641807061904958593716459615058397976371654824866368703923600900;\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀 🚀🚀 oMé🚀🚀MMMM oM é🚀MoMo🚀éo ééo🚀Mo🚀é \";\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀ééoMé oo é🚀é🚀oooM oMooM🚀ééo 🚀éo o o é 🚀oooMooé 🚀é ooM \";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020b6fbb0b819f9c8e2c402c35247efb07952615bfe522a1fd16d04f78e9381be04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a8020f09f9a80f09f9a80206f4dc3a9f09f9a80f09f9a804d4d4d4d206f4d20c3a9f09f9a804d6f4d6ff09f9a80c3a96f20c3a9c3a96ff09f9a804d6ff09f9a80c3a920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a80c3a9c3a96f4dc3a920206f6f20c3a9f09f9a80c3a9f09f9a806f6f6f4d206f4d6f6f4df09f9a80c3a9c3a96f20f09f9a80c3a96f206f2020206f20c3a920f09f9a806f6f6f4d6f6fc3a920f09f9a80c3a9206f6f4d20" + }, + { + "name": "random-(uint112,string[2])[2]", + "type": "(uint112,string[2])[2]", + "value": [ + [ + "2274159182948135245562043898993072", + ["Moo é🚀oé oo🚀M oé🚀🚀oo🚀oooé o🚀🚀é 🚀", "Moo é🚀ooooM🚀ooé🚀🚀🚀M éooMooM 🚀o"] + ], + [ + "3266559399751888075774399994023452", + [ + "Moo é🚀ooM MMoo o 🚀oM🚀oM 🚀oooéMéMo o Mé🚀oM🚀MooM", + "Moo é🚀o Mé 🚀éo MMoM🚀oo🚀 Mo o🚀 M ooMoo🚀oMMo🚀é éM" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2274159182948135245562043898993072" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oé oo🚀M oé🚀🚀oo🚀oooé o🚀🚀é 🚀" + }, + { + "type": "string", + "value": "Moo é🚀ooooM🚀ooé🚀🚀🚀M éooMooM 🚀o" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3266559399751888075774399994023452" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooM MMoo o 🚀oM🚀oM 🚀oooéMéMo o Mé🚀oM🚀MooM" + }, + { + "type": "string", + "value": "Moo é🚀o Mé 🚀éo MMoM🚀oo🚀 Mo o🚀 M ooMoo🚀oMMo🚀é éM" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103c6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101bb565b60405180910390f35b61005661013f565b61005e61013f565b61006661016c565b6d701feca1fe7f65eef46b792719b0815261007f610194565b60006040518060600160405280603d8152602001610354603d913982525060408051606081019091526033808252600091906102dc60208301396020808401919091528301919091525081526100d361016c565b6da10dc6ad3a451e886cf013f64e1c81526100ec610194565b600060405180608001604052806045815260200161030f604591398252506040805160808101909152604a8082526000919061029260208301396020808401919091528381019290925250820152919050565b60405180604001604052806002905b61015661016c565b81526020019060019003908161014e5790505090565b604051806040016040528060006001600160701b0316815260200161018f610194565b905290565b60405180604001604052806002905b60608152602001906001900390816101a35790505090565b60208082526000906060830183820185845b60028082106101dc5750610285565b601f1988860381018552835180516001600160701b03168752870151604088880181905287016080880160005b8581101561026e57898203603f190183528351805180845260005b8181101561023f578281018e01518582018f01528d01610224565b818111156102505760008e83870101525b50948c0194938c0193601f018616929092018b019150600101610209565b5097505050938601935050908401906001016101cd565b5091969550505050505056fe4d6f6f20c3a9f09f9a806f204dc3a920f09f9a80c3a96f204d4d6f4df09f9a806f6ff09f9a8020204d6f206ff09f9a80204d206f6f4d6f6ff09f9a806f4d4d6ff09f9a80c3a920c3a94d4d6f6f20c3a9f09f9a806f6f6f6f4df09f9a806f6fc3a9f09f9a80f09f9a80f09f9a804d20c3a96f6f4d6f6f4d20f09f9a806f4d6f6f20c3a9f09f9a806f6f4d20204d4d6f6f206f20f09f9a806f4df09f9a806f4d20f09f9a806f6f6fc3a94dc3a94d6f206f204dc3a9f09f9a806f4df09f9a804d6f6f4d4d6f6f20c3a9f09f9a806fc3a9206f6ff09f9a804d206fc3a9f09f9a80f09f9a806f6ff09f9a806f6f6fc3a9206ff09f9a80f09f9a80c3a920f09f9a80a264697066735822122079a2b69411a3ecab0b931d90641ce672bbc42f4d8c9fd5470b7ff84dbe5bebca64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_dacd6a38 {\n uint112 s_0;\n string[2] s_1;\n }\n\n function test () public pure returns (S_dacd6a38[2] memory) {\n S_dacd6a38[2] memory r;\n {\n S_dacd6a38 memory r_0;\n {\n uint112 r_0_0 = 2274159182948135245562043898993072;\n r_0.s_0 = r_0_0;\n }\n {\n string[2] memory r_0_1;\n {\n string memory r_0_1_0 = unicode\"Moo é🚀oé oo🚀M oé🚀🚀oo🚀oooé o🚀🚀é 🚀\";\n r_0_1[0] = r_0_1_0;\n }\n {\n string memory r_0_1_1 = unicode\"Moo é🚀ooooM🚀ooé🚀🚀🚀M éooMooM 🚀o\";\n r_0_1[1] = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_dacd6a38 memory r_1;\n {\n uint112 r_1_0 = 3266559399751888075774399994023452;\n r_1.s_0 = r_1_0;\n }\n {\n string[2] memory r_1_1;\n {\n string memory r_1_1_0 = unicode\"Moo é🚀ooM MMoo o 🚀oM🚀oM 🚀oooéMéMo o Mé🚀oM🚀MooM\";\n r_1_1[0] = r_1_1_0;\n }\n {\n string memory r_1_1_1 = unicode\"Moo é🚀o Mé 🚀éo MMoM🚀oo🚀 Mo o🚀 M ooMoo🚀oMMo🚀é éM\";\n r_1_1[1] = r_1_1_1;\n }\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000701feca1fe7f65eef46b792719b00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a806fc3a9206f6ff09f9a804d206fc3a9f09f9a80f09f9a806f6ff09f9a806f6f6fc3a9206ff09f9a80f09f9a80c3a920f09f9a8000000000000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a806f6f6f6f4df09f9a806f6fc3a9f09f9a80f09f9a80f09f9a804d20c3a96f6f4d6f6f4d20f09f9a806f00000000000000000000000000000000000000000000000000000000000000a10dc6ad3a451e886cf013f64e1c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a806f6f4d20204d4d6f6f206f20f09f9a806f4df09f9a806f4d20f09f9a806f6f6fc3a94dc3a94d6f206f204dc3a9f09f9a806f4df09f9a804d6f6f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a806f204dc3a920f09f9a80c3a96f204d4d6f4df09f9a806f6ff09f9a8020204d6f206ff09f9a80204d206f6f4d6f6ff09f9a806f4d4d6ff09f9a80c3a920c3a94d00000000000000000000000000000000000000000000" + }, + { + "name": "random-(uint152,address,bytes17[3])", + "type": "(uint152,address,bytes17[3])", + "value": [ + "662786193711640578941712036003693834543457663", + "0xb9CfFD914eADFe791e8A3Ebb1F3e39d723e47aA7", + [ + "0x49abff1a77db39bd5a7b259715949dd47d", + "0x9e073d1260042693534dcf129d83c259b5", + "0x70830ee911f56fb0168356f2a8778cd38c" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "662786193711640578941712036003693834543457663" + }, + { + "type": "address", + "value": "0xb9CfFD914eADFe791e8A3Ebb1F3e39d723e47aA7" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x49abff1a77db39bd5a7b259715949dd47d" + }, + { + "type": "hexstring", + "value": "0x9e073d1260042693534dcf129d83c259b5" + }, + { + "type": "hexstring", + "value": "0x70830ee911f56fb0168356f2a8778cd38c" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101db806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061012f565b60405180910390f35b6100566100ed565b61005e6100ed565b721db86990f7919ab5ea4264246ba88f33e2657f815273b9cffd914eadfe791e8a3ebb1f3e39d723e47aa76020820152610096610111565b7049abff1a77db39bd5a7b259715949dd47d60781b8152709e073d1260042693534dcf129d83c259b560781b6020820152701c20c3ba447d5bec05a0d5bcaa1de334e3607a1b604080830191909152820152919050565b604080516060810182526000808252602082015290810161010c610111565b905290565b60405180606001604052806003906020820280368337509192915050565b815172ffffffffffffffffffffffffffffffffffffff1681526020808301516001600160a01b03168183015260408084015160a084019291840160005b600381101561019b5782516effffffffffffffffffffffffffffff19168252918301919083019060010161016c565b505050509291505056fea2646970667358221220c0e2823a659aaff17aee8b26090ab9e14b77bdaff176f7fcf54da03d89e038d964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c510d85e {\n uint152 s_0;\n address s_1;\n bytes17[3] s_2;\n }\n\n function test () public pure returns (S_c510d85e memory) {\n S_c510d85e memory r;\n {\n uint152 r_0 = 662786193711640578941712036003693834543457663;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xb9CfFD914eADFe791e8A3Ebb1F3e39d723e47aA7;\n r.s_1 = r_1;\n }\n {\n bytes17[3] memory r_2;\n {\n bytes17 r_2_0 = bytes17(0x49abff1a77db39bd5a7b259715949dd47d);\n r_2[0] = r_2_0;\n }\n {\n bytes17 r_2_1 = bytes17(0x9e073d1260042693534dcf129d83c259b5);\n r_2[1] = r_2_1;\n }\n {\n bytes17 r_2_2 = bytes17(0x70830ee911f56fb0168356f2a8778cd38c);\n r_2[2] = r_2_2;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000001db86990f7919ab5ea4264246ba88f33e2657f000000000000000000000000b9cffd914eadfe791e8a3ebb1f3e39d723e47aa749abff1a77db39bd5a7b259715949dd47d0000000000000000000000000000009e073d1260042693534dcf129d83c259b500000000000000000000000000000070830ee911f56fb0168356f2a8778cd38c000000000000000000000000000000" + }, + { + "name": "random-(uint24[4],int,bytes19)", + "type": "(uint24[4],int,bytes19)", + "value": [ + ["13171223", "14434465", "15206170", "4652296"], + "15166889042131756821988097345128430929143788953795988450111149389163066964753", + "0x79372e1962760e38d22888c8988c43c43bf0b5" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "13171223" + }, + { + "type": "number", + "value": "14434465" + }, + { + "type": "number", + "value": "15206170" + }, + { + "type": "number", + "value": "4652296" + } + ] + }, + { + "type": "number", + "value": "15166889042131756821988097345128430929143788953795988450111149389163066964753" + }, + { + "type": "hexstring", + "value": "0x79372e1962760e38d22888c8988c43c43bf0b5" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101ad806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061011c565b60405180910390f35b6100566100d7565b61005e6100d7565b6100666100fe565b62c8fa17815262dc40a160208083019190915262e8071a6040808401919091526246fd0860608401529183527f218827ad37fbea01d71e1a2a42ccafbe8070d5142d7b7e4299e32cdbfb823b11908301527279372e1962760e38d22888c8988c43c43bf0b560681b90820152919050565b60405180606001604052806100ea6100fe565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b815160c08201908260005b600481101561014b57825162ffffff16825260209283019290910190600101610127565b505050602083015160808301526040909201516cffffffffffffffffffffffffff191660a0909101529056fea2646970667358221220f8c75ad514b2f62850086863538177073e31904c845cc63992661a232a36db4a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e2a1d61a {\n uint24[4] s_0;\n int256 s_1;\n bytes19 s_2;\n }\n\n function test () public pure returns (S_e2a1d61a memory) {\n S_e2a1d61a memory r;\n {\n uint24[4] memory r_0;\n {\n uint24 r_0_0 = 13171223;\n r_0[0] = r_0_0;\n }\n {\n uint24 r_0_1 = 14434465;\n r_0[1] = r_0_1;\n }\n {\n uint24 r_0_2 = 15206170;\n r_0[2] = r_0_2;\n }\n {\n uint24 r_0_3 = 4652296;\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n int r_1 = 15166889042131756821988097345128430929143788953795988450111149389163066964753;\n r.s_1 = r_1;\n }\n {\n bytes19 r_2 = bytes19(0x79372e1962760e38d22888c8988c43c43bf0b5);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000c8fa170000000000000000000000000000000000000000000000000000000000dc40a10000000000000000000000000000000000000000000000000000000000e8071a000000000000000000000000000000000000000000000000000000000046fd08218827ad37fbea01d71e1a2a42ccafbe8070d5142d7b7e4299e32cdbfb823b1179372e1962760e38d22888c8988c43c43bf0b500000000000000000000000000" + }, + { + "name": "random-(uint40,bytes21,address)[2]", + "type": "(uint40,bytes21,address)[2]", + "value": [ + [ + "641351479612", + "0x16ed29a2d8dacf3b4a1fe9eac32558b57b388b8502", + "0x4C11Fef206e37b945c09903D48e12b15F4686A6E" + ], + [ + "834482119382", + "0xd9a657f4bbcfbba9b2ebcc6c1b6d15c1c000f24bf1", + "0x51C92fCEC680b466e8F725517067ECbA2BfeBd21" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "641351479612" + }, + { + "type": "hexstring", + "value": "0x16ed29a2d8dacf3b4a1fe9eac32558b57b388b8502" + }, + { + "type": "address", + "value": "0x4C11Fef206e37b945c09903D48e12b15F4686A6E" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "834482119382" + }, + { + "type": "hexstring", + "value": "0xd9a657f4bbcfbba9b2ebcc6c1b6d15c1c000f24bf1" + }, + { + "type": "address", + "value": "0x51C92fCEC680b466e8F725517067ECbA2BfeBd21" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101dc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061013e565b60405180910390f35b6100566100ff565b61005e6100ff565b604080516060808201835264955386f13c8252740b7694d16c6d679da50ff4f56192ac5abd9c45c28160591b602080840191909152734c11fef206e37b945c09903d48e12b15f4686a6e838501529184528251908101835264c24b02a2d6815274d9a657f4bbcfbba9b2ebcc6c1b6d15c1c000f24bf160581b818301527351c92fcec680b466e8f725517067ecba2bfebd2192810192909252820152919050565b60405180604001604052806002905b604080516060810182526000808252602080830182905292820152825260001990920191018161010e5790505090565b60c08101818360005b600281101561019d578151805164ffffffffff1684526020808201516affffffffffffffffffffff1916818601526040918201516001600160a01b03169185019190915260609093019290910190600101610147565b5050509291505056fea2646970667358221220e537acd35fc609c33715a4d00cedc3e636c05ce09de521ab8463ed5cfc71288264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_59d52c88 {\n uint40 s_0;\n bytes21 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_59d52c88[2] memory) {\n S_59d52c88[2] memory r;\n {\n S_59d52c88 memory r_0;\n {\n uint40 r_0_0 = 641351479612;\n r_0.s_0 = r_0_0;\n }\n {\n bytes21 r_0_1 = bytes21(0x16ed29a2d8dacf3b4a1fe9eac32558b57b388b8502);\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0x4C11Fef206e37b945c09903D48e12b15F4686A6E;\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_59d52c88 memory r_1;\n {\n uint40 r_1_0 = 834482119382;\n r_1.s_0 = r_1_0;\n }\n {\n bytes21 r_1_1 = bytes21(0xd9a657f4bbcfbba9b2ebcc6c1b6d15c1c000f24bf1);\n r_1.s_1 = r_1_1;\n }\n {\n address r_1_2 = 0x51C92fCEC680b466e8F725517067ECbA2BfeBd21;\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000955386f13c16ed29a2d8dacf3b4a1fe9eac32558b57b388b850200000000000000000000000000000000000000000000004c11fef206e37b945c09903d48e12b15f4686a6e000000000000000000000000000000000000000000000000000000c24b02a2d6d9a657f4bbcfbba9b2ebcc6c1b6d15c1c000f24bf1000000000000000000000000000000000000000000000051c92fcec680b466e8f725517067ecba2bfebd21" + }, + { + "name": "random-(uint48[][4],address)", + "type": "(uint48[][4],address)", + "value": [ + [ + ["77144456209300", "172262673469812", "193780840630978", "211208342991811"], + ["70430406203333", "204691879085032", "119089813958200", "160957922738151"], + ["272193273813983", "223924750254416", "142308756067516"], + ["127578642663335"] + ], + "0x0A7d46a5339e41f83B6CA5A38A3921Ba0422d53e" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "77144456209300" + }, + { + "type": "number", + "value": "172262673469812" + }, + { + "type": "number", + "value": "193780840630978" + }, + { + "type": "number", + "value": "211208342991811" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "70430406203333" + }, + { + "type": "number", + "value": "204691879085032" + }, + { + "type": "number", + "value": "119089813958200" + }, + { + "type": "number", + "value": "160957922738151" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "272193273813983" + }, + { + "type": "number", + "value": "223924750254416" + }, + { + "type": "number", + "value": "142308756067516" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "127578642663335" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x0A7d46a5339e41f83B6CA5A38A3921Ba0422d53e" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610528806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610444565b60405180910390f35b6100566103fd565b61005e6103fd565b61006661041d565b60408051600480825260a0820190925260009160208201608080368337019050509050600065462997e8a394905080826000815181106100a8576100a86104dc565b602002602001019065ffffffffffff16908165ffffffffffff1681525050506000659cac0775d174905080826001815181106100e6576100e66104dc565b602002602001019065ffffffffffff16908165ffffffffffff168152505050600065b03e1e2b8ac290508082600281518110610124576101246104dc565b602002602001019065ffffffffffff16908165ffffffffffff168152505050600065c017c641f3c390508082600381518110610162576101626104dc565b65ffffffffffff929092166020928302919091019091015250815260408051600480825260a08201909252600091816020016020820280368337019050509050600065400e5b57d7c5905080826000815181106101c1576101c16104dc565b602002602001019065ffffffffffff16908165ffffffffffff168152505050600065ba2a8abdc3e8905080826001815181106101ff576101ff6104dc565b602002602001019065ffffffffffff16908165ffffffffffff1681525050506000656c4fc20eae389050808260028151811061023d5761023d6104dc565b602002602001019065ffffffffffff16908165ffffffffffff1681525050506000659263efceffe79050808260038151811061027b5761027b6104dc565b65ffffffffffff929092166020928302919091018201528301919091525060408051600380825260808201909252600091816020016020820280368337019050509050600065f78eef655bdf905080826000815181106102dd576102dd6104dc565b602002602001019065ffffffffffff16908165ffffffffffff168152505050600065cba88b3201509050808260018151811061031b5761031b6104dc565b602002602001019065ffffffffffff16908165ffffffffffff168152505050600065816dd6da94bc90508082600281518110610359576103596104dc565b65ffffffffffff92909216602092830291909101909101525060408083019190915280516001808252818301909252600091816020016020820280368337019050509050600065740837ad47a7905080826000815181106103bc576103bc6104dc565b65ffffffffffff92909216602092830291909101820152606084019290925250908252730a7d46a5339e41f83b6ca5a38a3921ba0422d53e90820152919050565b604051806040016040528061041061041d565b8152600060209091015290565b60405180608001604052806004905b606081526020019060019003908161042c5790505090565b602080825282516040838301526000919060e08401906060850184805b60048110156104be57878503605f19018352835180518087529087019087870190845b818110156104a857835165ffffffffffff1683529289019291890191600101610484565b5090965050509285019291850191600101610461565b505050509301516001600160a01b0316604092909201919091525090565b634e487b7160e01b600052603260045260246000fdfea264697066735822122092bb33246eb44bce6864df7eaba031cb98442d29e3d7701f67849cee33b02ec364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e0d0551b {\n uint48[][4] s_0;\n address s_1;\n }\n\n function test () public pure returns (S_e0d0551b memory) {\n S_e0d0551b memory r;\n {\n uint48[][4] memory r_0;\n {\n uint48[] memory r_0_0 = new uint48[](4);\n {\n uint48 r_0_0_0 = 77144456209300;\n r_0_0[0] = r_0_0_0;\n }\n {\n uint48 r_0_0_1 = 172262673469812;\n r_0_0[1] = r_0_0_1;\n }\n {\n uint48 r_0_0_2 = 193780840630978;\n r_0_0[2] = r_0_0_2;\n }\n {\n uint48 r_0_0_3 = 211208342991811;\n r_0_0[3] = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n uint48[] memory r_0_1 = new uint48[](4);\n {\n uint48 r_0_1_0 = 70430406203333;\n r_0_1[0] = r_0_1_0;\n }\n {\n uint48 r_0_1_1 = 204691879085032;\n r_0_1[1] = r_0_1_1;\n }\n {\n uint48 r_0_1_2 = 119089813958200;\n r_0_1[2] = r_0_1_2;\n }\n {\n uint48 r_0_1_3 = 160957922738151;\n r_0_1[3] = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n {\n uint48[] memory r_0_2 = new uint48[](3);\n {\n uint48 r_0_2_0 = 272193273813983;\n r_0_2[0] = r_0_2_0;\n }\n {\n uint48 r_0_2_1 = 223924750254416;\n r_0_2[1] = r_0_2_1;\n }\n {\n uint48 r_0_2_2 = 142308756067516;\n r_0_2[2] = r_0_2_2;\n }\n r_0[2] = r_0_2;\n }\n {\n uint48[] memory r_0_3 = new uint48[](1);\n {\n uint48 r_0_3_0 = 127578642663335;\n r_0_3[0] = r_0_3_0;\n }\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x0A7d46a5339e41f83B6CA5A38A3921Ba0422d53e;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000a7d46a5339e41f83b6ca5a38a3921ba0422d53e0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000462997e8a39400000000000000000000000000000000000000000000000000009cac0775d1740000000000000000000000000000000000000000000000000000b03e1e2b8ac20000000000000000000000000000000000000000000000000000c017c641f3c300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000400e5b57d7c50000000000000000000000000000000000000000000000000000ba2a8abdc3e800000000000000000000000000000000000000000000000000006c4fc20eae3800000000000000000000000000000000000000000000000000009263efceffe700000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000f78eef655bdf0000000000000000000000000000000000000000000000000000cba88b3201500000000000000000000000000000000000000000000000000000816dd6da94bc00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000740837ad47a7" + }, + { + "name": "random-(uint8,string,bytes5,string)", + "type": "(uint8,string,bytes5,string)", + "value": [ + "38", + "Moo é🚀 oMé🚀🚀o", + "0xd399f28745", + "Moo é🚀M ééooMo ooéMééMé🚀🚀 Moooo o🚀éo🚀o" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "38" + }, + { + "type": "string", + "value": "Moo é🚀 oMé🚀🚀o" + }, + { + "type": "hexstring", + "value": "0xd399f28745" + }, + { + "type": "string", + "value": "Moo é🚀M ééooMo ooéMééMé🚀🚀 Moooo o🚀éo🚀o" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061021b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610144565b60405180910390f35b6040805160808082018352600080835260606020808501829052848601839052818501829052855193840186528381018281528487018481528584018490526026865287518089018952601881527f4d6f6f20c3a9f09f9a80206f4dc3a9f09f9a80f09f9a806f00000000000000008185015290915264d399f2874560d81b90528551918201909552603e8082529394929391929091906101a890830139606083015250919050565b6000815180845260005b8181101561011d57602081850181015186830182015201610101565b8181111561012f576000602083870101525b50601f01601f19169290920160200192915050565b6020815260ff8251166020820152600060208301516080604084015261016d60a08401826100f7565b905064ffffffffff60d81b60408501511660608401526060840151601f1984830301608085015261019e82826100f7565b9594505050505056fe4d6f6f20c3a9f09f9a804d2020c3a9c3a96f6f4d6f206f6fc3a94dc3a9c3a94dc3a9f09f9a80f09f9a80204d6f6f6f6f206ff09f9a80c3a96ff09f9a806fa2646970667358221220687df2caf6596b4c7c7d2b37ef2d39b3c55fe6b62f6b1dea8f0493db3631ff4764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1295d13a {\n uint8 s_0;\n string s_1;\n bytes5 s_2;\n string s_3;\n }\n\n function test () public pure returns (S_1295d13a memory) {\n S_1295d13a memory r;\n {\n uint8 r_0 = 38;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀 oMé🚀🚀o\";\n r.s_1 = r_1;\n }\n {\n bytes5 r_2 = bytes5(0xd399f28745);\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀M ééooMo ooéMééMé🚀🚀 Moooo o🚀éo🚀o\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000080d399f2874500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a80206f4dc3a9f09f9a80f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a804d2020c3a9c3a96f6f4d6f206f6fc3a94dc3a9c3a94dc3a9f09f9a80f09f9a80204d6f6f6f6f206ff09f9a80c3a96ff09f9a806f0000" + }, + { + "name": "random-address[2][3][3]", + "type": "address[2][3][3]", + "value": [ + [ + [ + "0x60925B68aB1EAd15bA8C6c4dcf4439F71CAC7733", + "0x72846D2d842B26A40BC58E4387ad6CaC3C0c37f7" + ], + [ + "0x912587a1488DAa86e7e93292956685FDBf9185b0", + "0x41dB8896198b352ecd4EC580A925A744068b1D6a" + ], + [ + "0xE9c8940C5B77123673084100950b9FeA05FBcF78", + "0xFE2B12cD95653bC48b7652272C954F82Cb5825E4" + ] + ], + [ + [ + "0x1ce1f2bCCbC3C5d1Ea68280944bE4a4a2E366d55", + "0x8A53624f62bC639ab18FdbE66F7b0d7C846B1baf" + ], + [ + "0xA5E9E5f220C1E158782E4423e27632ac367f3696", + "0xb195155718CbFcf95C68A4E907C7Aa579e2cC46d" + ], + [ + "0x63B4B005346c678e3354E4baAeCba3EEd451c521", + "0xDB25d2c599c7E83d466f3520Ef4b519fb9963726" + ] + ], + [ + [ + "0xe8e711b71a0547C294d40D5e99626Ad30E636AD4", + "0x71e0e3e3703D69c73BCFFf29f57620B5CA76A747" + ], + [ + "0x2eec47C0274AC09dB5B83bf1ee972eC9d305E21b", + "0x580C42df7f0eeb56455e4EC12550f3A43945C24B" + ], + [ + "0x3207A168cB3631D179E7d3Ae928F1eC3AfE7Fa11", + "0x5fdEc3Eb829407AaFc0E81436a851b69360fD4ac" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x60925B68aB1EAd15bA8C6c4dcf4439F71CAC7733" + }, + { + "type": "address", + "value": "0x72846D2d842B26A40BC58E4387ad6CaC3C0c37f7" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x912587a1488DAa86e7e93292956685FDBf9185b0" + }, + { + "type": "address", + "value": "0x41dB8896198b352ecd4EC580A925A744068b1D6a" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xE9c8940C5B77123673084100950b9FeA05FBcF78" + }, + { + "type": "address", + "value": "0xFE2B12cD95653bC48b7652272C954F82Cb5825E4" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x1ce1f2bCCbC3C5d1Ea68280944bE4a4a2E366d55" + }, + { + "type": "address", + "value": "0x8A53624f62bC639ab18FdbE66F7b0d7C846B1baf" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xA5E9E5f220C1E158782E4423e27632ac367f3696" + }, + { + "type": "address", + "value": "0xb195155718CbFcf95C68A4E907C7Aa579e2cC46d" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x63B4B005346c678e3354E4baAeCba3EEd451c521" + }, + { + "type": "address", + "value": "0xDB25d2c599c7E83d466f3520Ef4b519fb9963726" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xe8e711b71a0547C294d40D5e99626Ad30E636AD4" + }, + { + "type": "address", + "value": "0x71e0e3e3703D69c73BCFFf29f57620B5CA76A747" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x2eec47C0274AC09dB5B83bf1ee972eC9d305E21b" + }, + { + "type": "address", + "value": "0x580C42df7f0eeb56455e4EC12550f3A43945C24B" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x3207A168cB3631D179E7d3Ae928F1eC3AfE7Fa11" + }, + { + "type": "address", + "value": "0x5fdEc3Eb829407AaFc0E81436a851b69360fD4ac" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103f8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610331565b60405180910390f35b6100566102b9565b61005e6102b9565b6100666102e6565b61006e610313565b7360925b68ab1ead15ba8c6c4dcf4439f71cac773381527372846d2d842b26a40bc58e4387ad6cac3c0c37f7602082015281526100a9610313565b73912587a1488daa86e7e93292956685fdbf9185b081527341db8896198b352ecd4ec580a925a744068b1d6a6020808301919091528201526100e9610313565b73e9c8940c5b77123673084100950b9fea05fbcf78815273fe2b12cd95653bc48b7652272c954f82cb5825e46020820152604082015281526101296102e6565b610131610313565b731ce1f2bccbc3c5d1ea68280944be4a4a2e366d558152738a53624f62bc639ab18fdbe66f7b0d7c846b1baf6020820152815261016c610313565b73a5e9e5f220c1e158782e4423e27632ac367f3696815273b195155718cbfcf95c68a4e907c7aa579e2cc46d6020808301919091528201526101ac610313565b7363b4b005346c678e3354e4baaecba3eed451c521815273db25d2c599c7e83d466f3520ef4b519fb996372660208083019190915260408301919091528201526101f46102e6565b6101fc610313565b73e8e711b71a0547c294d40d5e99626ad30e636ad481527371e0e3e3703d69c73bcfff29f57620b5ca76a74760208201528152610237610313565b732eec47c0274ac09db5b83bf1ee972ec9d305e21b815273580c42df7f0eeb56455e4ec12550f3a43945c24b602080830191909152820152610277610313565b733207a168cb3631d179e7d3ae928f1ec3afe7fa118152735fdec3eb829407aafc0e81436a851b69360fd4ac6020820152604080830191909152820152919050565b60405180606001604052806003905b6102d06102e6565b8152602001906001900390816102c85790505090565b60405180606001604052806003905b6102fd610313565b8152602001906001900390816102f55790505090565b60405180604001604052806002906020820280368337509192915050565b6102408101818360005b600380821061034a57506103b9565b82518460005b8381101561039f5782518260005b60028110156103865782516001600160a01b031682526020928301929091019060010161035e565b5050506020929092019160409190910190600101610350565b50505060c09390930192506020919091019060010161033b565b5050509291505056fea2646970667358221220d42d834ec64b6f7879b2f73db0c85e2dd2d8e34c9a6bc4d82ca2d7d2e2fede8e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (address[2][3][3] memory) {\n address[2][3][3] memory r;\n {\n address[2][3] memory r_0;\n {\n address[2] memory r_0_0;\n {\n address r_0_0_0 = 0x60925B68aB1EAd15bA8C6c4dcf4439F71CAC7733;\n r_0_0[0] = r_0_0_0;\n }\n {\n address r_0_0_1 = 0x72846D2d842B26A40BC58E4387ad6CaC3C0c37f7;\n r_0_0[1] = r_0_0_1;\n }\n r_0[0] = r_0_0;\n }\n {\n address[2] memory r_0_1;\n {\n address r_0_1_0 = 0x912587a1488DAa86e7e93292956685FDBf9185b0;\n r_0_1[0] = r_0_1_0;\n }\n {\n address r_0_1_1 = 0x41dB8896198b352ecd4EC580A925A744068b1D6a;\n r_0_1[1] = r_0_1_1;\n }\n r_0[1] = r_0_1;\n }\n {\n address[2] memory r_0_2;\n {\n address r_0_2_0 = 0xE9c8940C5B77123673084100950b9FeA05FBcF78;\n r_0_2[0] = r_0_2_0;\n }\n {\n address r_0_2_1 = 0xFE2B12cD95653bC48b7652272C954F82Cb5825E4;\n r_0_2[1] = r_0_2_1;\n }\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n {\n address[2][3] memory r_1;\n {\n address[2] memory r_1_0;\n {\n address r_1_0_0 = 0x1ce1f2bCCbC3C5d1Ea68280944bE4a4a2E366d55;\n r_1_0[0] = r_1_0_0;\n }\n {\n address r_1_0_1 = 0x8A53624f62bC639ab18FdbE66F7b0d7C846B1baf;\n r_1_0[1] = r_1_0_1;\n }\n r_1[0] = r_1_0;\n }\n {\n address[2] memory r_1_1;\n {\n address r_1_1_0 = 0xA5E9E5f220C1E158782E4423e27632ac367f3696;\n r_1_1[0] = r_1_1_0;\n }\n {\n address r_1_1_1 = 0xb195155718CbFcf95C68A4E907C7Aa579e2cC46d;\n r_1_1[1] = r_1_1_1;\n }\n r_1[1] = r_1_1;\n }\n {\n address[2] memory r_1_2;\n {\n address r_1_2_0 = 0x63B4B005346c678e3354E4baAeCba3EEd451c521;\n r_1_2[0] = r_1_2_0;\n }\n {\n address r_1_2_1 = 0xDB25d2c599c7E83d466f3520Ef4b519fb9963726;\n r_1_2[1] = r_1_2_1;\n }\n r_1[2] = r_1_2;\n }\n r[1] = r_1;\n }\n {\n address[2][3] memory r_2;\n {\n address[2] memory r_2_0;\n {\n address r_2_0_0 = 0xe8e711b71a0547C294d40D5e99626Ad30E636AD4;\n r_2_0[0] = r_2_0_0;\n }\n {\n address r_2_0_1 = 0x71e0e3e3703D69c73BCFFf29f57620B5CA76A747;\n r_2_0[1] = r_2_0_1;\n }\n r_2[0] = r_2_0;\n }\n {\n address[2] memory r_2_1;\n {\n address r_2_1_0 = 0x2eec47C0274AC09dB5B83bf1ee972eC9d305E21b;\n r_2_1[0] = r_2_1_0;\n }\n {\n address r_2_1_1 = 0x580C42df7f0eeb56455e4EC12550f3A43945C24B;\n r_2_1[1] = r_2_1_1;\n }\n r_2[1] = r_2_1;\n }\n {\n address[2] memory r_2_2;\n {\n address r_2_2_0 = 0x3207A168cB3631D179E7d3Ae928F1eC3AfE7Fa11;\n r_2_2[0] = r_2_2_0;\n }\n {\n address r_2_2_1 = 0x5fdEc3Eb829407AaFc0E81436a851b69360fD4ac;\n r_2_2[1] = r_2_2_1;\n }\n r_2[2] = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000060925b68ab1ead15ba8c6c4dcf4439f71cac773300000000000000000000000072846d2d842b26a40bc58e4387ad6cac3c0c37f7000000000000000000000000912587a1488daa86e7e93292956685fdbf9185b000000000000000000000000041db8896198b352ecd4ec580a925a744068b1d6a000000000000000000000000e9c8940c5b77123673084100950b9fea05fbcf78000000000000000000000000fe2b12cd95653bc48b7652272c954f82cb5825e40000000000000000000000001ce1f2bccbc3c5d1ea68280944be4a4a2e366d550000000000000000000000008a53624f62bc639ab18fdbe66f7b0d7c846b1baf000000000000000000000000a5e9e5f220c1e158782e4423e27632ac367f3696000000000000000000000000b195155718cbfcf95c68a4e907c7aa579e2cc46d00000000000000000000000063b4b005346c678e3354e4baaecba3eed451c521000000000000000000000000db25d2c599c7e83d466f3520ef4b519fb9963726000000000000000000000000e8e711b71a0547c294d40d5e99626ad30e636ad400000000000000000000000071e0e3e3703d69c73bcfff29f57620b5ca76a7470000000000000000000000002eec47c0274ac09db5b83bf1ee972ec9d305e21b000000000000000000000000580c42df7f0eeb56455e4ec12550f3a43945c24b0000000000000000000000003207a168cb3631d179e7d3ae928f1ec3afe7fa110000000000000000000000005fdec3eb829407aafc0e81436a851b69360fd4ac" + }, + { + "name": "random-bool[][1][3]", + "type": "bool[][1][3]", + "value": [[[false, false, false]], [[]], [[true, true, true, true]]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610353806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610260565b60405180910390f35b61005661020c565b61005e61020c565b610066610239565b60408051600380825260808201909252600091602082016060803683370190505090506000808260008151811061009f5761009f610307565b60200260200101901515908115158152505050600080826001815181106100c8576100c8610307565b60200260200101901515908115158152505050600080826002815181106100f1576100f1610307565b91151560209283029190910190910152508152815261010e610239565b60408051600081526020808201909252825282015261012b610239565b60408051600480825260a0820190925260009160208201608080368337019050509050600060019050808260008151811061016857610168610307565b60200260200101901515908115158152505050600060019050808260018151811061019557610195610307565b6020026020010190151590811515815250505060006001905080826002815181106101c2576101c2610307565b6020026020010190151590811515815250505060006001905080826003815181106101ef576101ef610307565b911515602092830291909101909101525081526040820152919050565b60405180606001604052806003905b610223610239565b81526020019060019003908161021b5790505090565b60405180602001604052806001905b60608152602001906001900390816102485790505090565b60208082526000906080830183820185845b60038110156102fb57868403601f1901835281518486810160005b600180821061029c57506102e6565b888303845284518051808552908b01908b85019060005b818110156102d057835115158352928d0192918d019184016102b3565b5050958b0195948b01949350505060010161028d565b50955050509184019190840190600101610272565b50919695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220e98af15ce47247f69cafa228a319ea43f6eb2ad20ed4f4599cde42072ff0795c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[][1][3] memory) {\n bool[][1][3] memory r;\n {\n bool[][1] memory r_0;\n {\n bool[] memory r_0_0 = new bool[](3);\n {\n bool r_0_0_0 = false;\n r_0_0[0] = r_0_0_0;\n }\n {\n bool r_0_0_1 = false;\n r_0_0[1] = r_0_0_1;\n }\n {\n bool r_0_0_2 = false;\n r_0_0[2] = r_0_0_2;\n }\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n bool[][1] memory r_1;\n {\n bool[] memory r_1_0 = new bool[](0);\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n {\n bool[][1] memory r_2;\n {\n bool[] memory r_2_0 = new bool[](4);\n {\n bool r_2_0_0 = true;\n r_2_0[0] = r_2_0_0;\n }\n {\n bool r_2_0_1 = true;\n r_2_0[1] = r_2_0_1;\n }\n {\n bool r_2_0_2 = true;\n r_2_0[2] = r_2_0_2;\n }\n {\n bool r_2_0_3 = true;\n r_2_0[3] = r_2_0_3;\n }\n r_2[0] = r_2_0;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-bool[3][3][3]", + "type": "bool[3][3][3]", + "value": [ + [ + [true, true, true], + [true, true, false], + [false, true, true] + ], + [ + [false, true, false], + [true, true, false], + [true, false, false] + ], + [ + [false, false, true], + [false, false, false], + [false, true, true] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102d8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610218565b60405180910390f35b6100566101a0565b61005e6101a0565b6100666101cd565b61006e6101fa565b600180825260208201819052604082015281526100896101fa565b6001808252602080830191909152600060408301528201526100a96101fa565b6000815260016020820181905260408083019190915282015281526100cc6101cd565b6100d46101fa565b600080825260016020830152604082015281526100ef6101fa565b60018082526020808301919091526000604083015282015261010f6101fa565b6001815260006020808301829052604080840192909252908301919091528201526101386101cd565b6101406101fa565b6000808252602082015260016040820152815261015b6101fa565b60008082526020808301829052604083019190915282015261017b6101fa565b6000815260016020820181905260408083019190915282810191909152820152919050565b60405180606001604052806003905b6101b76101cd565b8152602001906001900390816101af5790505090565b60405180606001604052806003905b6101e46101fa565b8152602001906001900390816101dc5790505090565b60405180606001604052806003906020820280368337509192915050565b6103608101818360005b60038082106102315750610299565b82518460005b8381101561027e5782518260005b868110156102655782511515825260209283019290910190600101610245565b5050506020929092019160609190910190600101610237565b50505061012093909301925060209190910190600101610222565b5050509291505056fea2646970667358221220b89d7d9c8f8cb3071ebc8ebd0a3d224ebff492da8ac164cef6b6ebc20d495e9d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[3][3][3] memory) {\n bool[3][3][3] memory r;\n {\n bool[3][3] memory r_0;\n {\n bool[3] memory r_0_0;\n {\n bool r_0_0_0 = true;\n r_0_0[0] = r_0_0_0;\n }\n {\n bool r_0_0_1 = true;\n r_0_0[1] = r_0_0_1;\n }\n {\n bool r_0_0_2 = true;\n r_0_0[2] = r_0_0_2;\n }\n r_0[0] = r_0_0;\n }\n {\n bool[3] memory r_0_1;\n {\n bool r_0_1_0 = true;\n r_0_1[0] = r_0_1_0;\n }\n {\n bool r_0_1_1 = true;\n r_0_1[1] = r_0_1_1;\n }\n {\n bool r_0_1_2 = false;\n r_0_1[2] = r_0_1_2;\n }\n r_0[1] = r_0_1;\n }\n {\n bool[3] memory r_0_2;\n {\n bool r_0_2_0 = false;\n r_0_2[0] = r_0_2_0;\n }\n {\n bool r_0_2_1 = true;\n r_0_2[1] = r_0_2_1;\n }\n {\n bool r_0_2_2 = true;\n r_0_2[2] = r_0_2_2;\n }\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n {\n bool[3][3] memory r_1;\n {\n bool[3] memory r_1_0;\n {\n bool r_1_0_0 = false;\n r_1_0[0] = r_1_0_0;\n }\n {\n bool r_1_0_1 = true;\n r_1_0[1] = r_1_0_1;\n }\n {\n bool r_1_0_2 = false;\n r_1_0[2] = r_1_0_2;\n }\n r_1[0] = r_1_0;\n }\n {\n bool[3] memory r_1_1;\n {\n bool r_1_1_0 = true;\n r_1_1[0] = r_1_1_0;\n }\n {\n bool r_1_1_1 = true;\n r_1_1[1] = r_1_1_1;\n }\n {\n bool r_1_1_2 = false;\n r_1_1[2] = r_1_1_2;\n }\n r_1[1] = r_1_1;\n }\n {\n bool[3] memory r_1_2;\n {\n bool r_1_2_0 = true;\n r_1_2[0] = r_1_2_0;\n }\n {\n bool r_1_2_1 = false;\n r_1_2[1] = r_1_2_1;\n }\n {\n bool r_1_2_2 = false;\n r_1_2[2] = r_1_2_2;\n }\n r_1[2] = r_1_2;\n }\n r[1] = r_1;\n }\n {\n bool[3][3] memory r_2;\n {\n bool[3] memory r_2_0;\n {\n bool r_2_0_0 = false;\n r_2_0[0] = r_2_0_0;\n }\n {\n bool r_2_0_1 = false;\n r_2_0[1] = r_2_0_1;\n }\n {\n bool r_2_0_2 = true;\n r_2_0[2] = r_2_0_2;\n }\n r_2[0] = r_2_0;\n }\n {\n bool[3] memory r_2_1;\n {\n bool r_2_1_0 = false;\n r_2_1[0] = r_2_1_0;\n }\n {\n bool r_2_1_1 = false;\n r_2_1[1] = r_2_1_1;\n }\n {\n bool r_2_1_2 = false;\n r_2_1[2] = r_2_1_2;\n }\n r_2[1] = r_2_1;\n }\n {\n bool[3] memory r_2_2;\n {\n bool r_2_2_0 = false;\n r_2_2[0] = r_2_2_0;\n }\n {\n bool r_2_2_1 = true;\n r_2_2[1] = r_2_2_1;\n }\n {\n bool r_2_2_2 = true;\n r_2_2[2] = r_2_2_2;\n }\n r_2[2] = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-bool[4][2][4]", + "type": "bool[4][2][4]", + "value": [ + [ + [true, true, false, true], + [false, true, true, false] + ], + [ + [true, true, false, true], + [false, false, false, true] + ], + [ + [false, false, true, true], + [true, false, true, false] + ], + [ + [true, true, true, true], + [false, true, false, true] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610301806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610240565b60405180910390f35b6100566101c8565b61005e6101c8565b6100666101f5565b61006e610222565b6001808252602082018190526000604083015260608201528152610090610222565b6000808252600160208084018290526040840191909152606083019190915282015281526100bc6101f5565b6100c4610222565b60018082526020820181905260006040830152606082015281526100e6610222565b60008082526020808301829052604083019190915260016060830152828101919091528201526101146101f5565b61011c610222565b600080825260208201526001604082018190526060820152815261013e610222565b600180825260006020808401829052604080850193909352606084019190915283019190915282015261016f6101f5565b610177610222565b6001808252602082018190526040820181905260608201528152610199610222565b600080825260016020808401829052604084019290925260608084019190915290830191909152820152919050565b60405180608001604052806004905b6101df6101f5565b8152602001906001900390816101d75790505090565b60405180604001604052806002905b61020c610222565b8152602001906001900390816102045790505090565b60405180608001604052806004906020820280368337509192915050565b6104008101818360005b600480821061025957506102c2565b82518460005b60028110156102a75782518260005b8681101561028e578251151582526020928301929091019060010161026e565b505050602092909201916080919091019060010161025f565b5050506101009390930192506020919091019060010161024a565b5050509291505056fea2646970667358221220edf6e7528674ff2d12a4f88ceaf0380824a4accf46429e66b6f9e39030c1ed7064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bool[4][2][4] memory) {\n bool[4][2][4] memory r;\n {\n bool[4][2] memory r_0;\n {\n bool[4] memory r_0_0;\n {\n bool r_0_0_0 = true;\n r_0_0[0] = r_0_0_0;\n }\n {\n bool r_0_0_1 = true;\n r_0_0[1] = r_0_0_1;\n }\n {\n bool r_0_0_2 = false;\n r_0_0[2] = r_0_0_2;\n }\n {\n bool r_0_0_3 = true;\n r_0_0[3] = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n bool[4] memory r_0_1;\n {\n bool r_0_1_0 = false;\n r_0_1[0] = r_0_1_0;\n }\n {\n bool r_0_1_1 = true;\n r_0_1[1] = r_0_1_1;\n }\n {\n bool r_0_1_2 = true;\n r_0_1[2] = r_0_1_2;\n }\n {\n bool r_0_1_3 = false;\n r_0_1[3] = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n bool[4][2] memory r_1;\n {\n bool[4] memory r_1_0;\n {\n bool r_1_0_0 = true;\n r_1_0[0] = r_1_0_0;\n }\n {\n bool r_1_0_1 = true;\n r_1_0[1] = r_1_0_1;\n }\n {\n bool r_1_0_2 = false;\n r_1_0[2] = r_1_0_2;\n }\n {\n bool r_1_0_3 = true;\n r_1_0[3] = r_1_0_3;\n }\n r_1[0] = r_1_0;\n }\n {\n bool[4] memory r_1_1;\n {\n bool r_1_1_0 = false;\n r_1_1[0] = r_1_1_0;\n }\n {\n bool r_1_1_1 = false;\n r_1_1[1] = r_1_1_1;\n }\n {\n bool r_1_1_2 = false;\n r_1_1[2] = r_1_1_2;\n }\n {\n bool r_1_1_3 = true;\n r_1_1[3] = r_1_1_3;\n }\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n {\n bool[4][2] memory r_2;\n {\n bool[4] memory r_2_0;\n {\n bool r_2_0_0 = false;\n r_2_0[0] = r_2_0_0;\n }\n {\n bool r_2_0_1 = false;\n r_2_0[1] = r_2_0_1;\n }\n {\n bool r_2_0_2 = true;\n r_2_0[2] = r_2_0_2;\n }\n {\n bool r_2_0_3 = true;\n r_2_0[3] = r_2_0_3;\n }\n r_2[0] = r_2_0;\n }\n {\n bool[4] memory r_2_1;\n {\n bool r_2_1_0 = true;\n r_2_1[0] = r_2_1_0;\n }\n {\n bool r_2_1_1 = false;\n r_2_1[1] = r_2_1_1;\n }\n {\n bool r_2_1_2 = true;\n r_2_1[2] = r_2_1_2;\n }\n {\n bool r_2_1_3 = false;\n r_2_1[3] = r_2_1_3;\n }\n r_2[1] = r_2_1;\n }\n r[2] = r_2;\n }\n {\n bool[4][2] memory r_3;\n {\n bool[4] memory r_3_0;\n {\n bool r_3_0_0 = true;\n r_3_0[0] = r_3_0_0;\n }\n {\n bool r_3_0_1 = true;\n r_3_0[1] = r_3_0_1;\n }\n {\n bool r_3_0_2 = true;\n r_3_0[2] = r_3_0_2;\n }\n {\n bool r_3_0_3 = true;\n r_3_0[3] = r_3_0_3;\n }\n r_3[0] = r_3_0;\n }\n {\n bool[4] memory r_3_1;\n {\n bool r_3_1_0 = false;\n r_3_1[0] = r_3_1_0;\n }\n {\n bool r_3_1_1 = true;\n r_3_1[1] = r_3_1_1;\n }\n {\n bool r_3_1_2 = false;\n r_3_1[2] = r_3_1_2;\n }\n {\n bool r_3_1_3 = true;\n r_3_1[3] = r_3_1_3;\n }\n r_3[1] = r_3_1;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-bytes22[1][3][4]", + "type": "bytes22[1][3][4]", + "value": [ + [ + ["0x0194511bfcd6e802414114278764ac87a419d611e2cd"], + ["0x472e75635680ed2f6cdf9bd9b9c24aab1b678e46cd9b"], + ["0x7cdb84a243fd9eb490f95484e225c16a5c16e2a12c38"] + ], + [ + ["0x0321f059b6eb9528890a08f744deaf8229c673f25ff5"], + ["0x176d8c2606abac4d77e99a8aa8d47ec40c5eb2904f61"], + ["0xfc0c0270d2dadcc417aa607f4b56c021124bbffdac0a"] + ], + [ + ["0x8cc60121f2c99e257b8d0315f7963ec99c5d1c313c5f"], + ["0x7ad1b87750582e1e0f4305efbef2756d903fa927580b"], + ["0x779fff1447186e2414fd1c50cd37a281d69413ca3104"] + ], + [ + ["0x35333c45702f6488881d77f9a8e3f5baba37758750ec"], + ["0x5480d85fe7011c13de2dda52f84602ad13ca423d204f"], + ["0x91ed8faba7058d81a5cb909b097d256c1da2d9142811"] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x0194511bfcd6e802414114278764ac87a419d611e2cd" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x472e75635680ed2f6cdf9bd9b9c24aab1b678e46cd9b" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x7cdb84a243fd9eb490f95484e225c16a5c16e2a12c38" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x0321f059b6eb9528890a08f744deaf8229c673f25ff5" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x176d8c2606abac4d77e99a8aa8d47ec40c5eb2904f61" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xfc0c0270d2dadcc417aa607f4b56c021124bbffdac0a" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8cc60121f2c99e257b8d0315f7963ec99c5d1c313c5f" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x7ad1b87750582e1e0f4305efbef2756d903fa927580b" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x779fff1447186e2414fd1c50cd37a281d69413ca3104" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x35333c45702f6488881d77f9a8e3f5baba37758750ec" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x5480d85fe7011c13de2dda52f84602ad13ca423d204f" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x91ed8faba7058d81a5cb909b097d256c1da2d9142811" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103b0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102ee565b60405180910390f35b610056610276565b61005e610276565b6100666102a3565b61006e6102d0565b750194511bfcd6e802414114278764ac87a419d611e2cd60501b815281526100946102d0565b75472e75635680ed2f6cdf9bd9b9c24aab1b678e46cd9b60501b815260208201526100bd6102d0565b750f9b7094487fb3d6921f2a909c44b82d4b82dc54258760531b8152604082015281526100e86102a3565b6100f06102d0565b750321f059b6eb9528890a08f744deaf8229c673f25ff560501b815281526101166102d0565b75176d8c2606abac4d77e99a8aa8d47ec40c5eb2904f6160501b8152602082015261013f6102d0565b757e060138696d6e620bd5303fa5ab60108925dffed60560511b81526040820152602082015261016d6102a3565b6101756102d0565b758cc60121f2c99e257b8d0315f7963ec99c5d1c313c5f60501b8152815261019b6102d0565b757ad1b87750582e1e0f4305efbef2756d903fa927580b60501b815260208201526101c46102d0565b751de7ffc511c61b89053f4714334de8a075a504f28c4160521b81526040808301919091528201526101f46102a3565b6101fc6102d0565b750d4ccf115c0bd92222075dfe6a38fd6eae8ddd61d43b60521b815281526102226102d0565b755480d85fe7011c13de2dda52f84602ad13ca423d204f60501b8152602082015261024b6102d0565b7591ed8faba7058d81a5cb909b097d256c1da2d914281160501b815260408201526060820152919050565b60405180608001604052806004905b61028d6102a3565b8152602001906001900390816102855790505090565b60405180606001604052806003905b6102ba6102d0565b8152602001906001900390816102b25790505090565b60405180602001604052806001906020820280368337509192915050565b6101808101818360005b60048110156103715781518360005b60038110156103585782518260005b600181101561034257825169ffffffffffffffffffff1916825260209283019290910190600101610316565b5050506020928301929190910190600101610307565b50505060609290920191602091909101906001016102f8565b5050509291505056fea2646970667358221220ef83943d5d90c30f1babf097be7ee70437c3b32366607627f1e50bb3a0d8b3bb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (bytes22[1][3][4] memory) {\n bytes22[1][3][4] memory r;\n {\n bytes22[1][3] memory r_0;\n {\n bytes22[1] memory r_0_0;\n {\n bytes22 r_0_0_0 = bytes22(0x0194511bfcd6e802414114278764ac87a419d611e2cd);\n r_0_0[0] = r_0_0_0;\n }\n r_0[0] = r_0_0;\n }\n {\n bytes22[1] memory r_0_1;\n {\n bytes22 r_0_1_0 = bytes22(0x472e75635680ed2f6cdf9bd9b9c24aab1b678e46cd9b);\n r_0_1[0] = r_0_1_0;\n }\n r_0[1] = r_0_1;\n }\n {\n bytes22[1] memory r_0_2;\n {\n bytes22 r_0_2_0 = bytes22(0x7cdb84a243fd9eb490f95484e225c16a5c16e2a12c38);\n r_0_2[0] = r_0_2_0;\n }\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n {\n bytes22[1][3] memory r_1;\n {\n bytes22[1] memory r_1_0;\n {\n bytes22 r_1_0_0 = bytes22(0x0321f059b6eb9528890a08f744deaf8229c673f25ff5);\n r_1_0[0] = r_1_0_0;\n }\n r_1[0] = r_1_0;\n }\n {\n bytes22[1] memory r_1_1;\n {\n bytes22 r_1_1_0 = bytes22(0x176d8c2606abac4d77e99a8aa8d47ec40c5eb2904f61);\n r_1_1[0] = r_1_1_0;\n }\n r_1[1] = r_1_1;\n }\n {\n bytes22[1] memory r_1_2;\n {\n bytes22 r_1_2_0 = bytes22(0xfc0c0270d2dadcc417aa607f4b56c021124bbffdac0a);\n r_1_2[0] = r_1_2_0;\n }\n r_1[2] = r_1_2;\n }\n r[1] = r_1;\n }\n {\n bytes22[1][3] memory r_2;\n {\n bytes22[1] memory r_2_0;\n {\n bytes22 r_2_0_0 = bytes22(0x8cc60121f2c99e257b8d0315f7963ec99c5d1c313c5f);\n r_2_0[0] = r_2_0_0;\n }\n r_2[0] = r_2_0;\n }\n {\n bytes22[1] memory r_2_1;\n {\n bytes22 r_2_1_0 = bytes22(0x7ad1b87750582e1e0f4305efbef2756d903fa927580b);\n r_2_1[0] = r_2_1_0;\n }\n r_2[1] = r_2_1;\n }\n {\n bytes22[1] memory r_2_2;\n {\n bytes22 r_2_2_0 = bytes22(0x779fff1447186e2414fd1c50cd37a281d69413ca3104);\n r_2_2[0] = r_2_2_0;\n }\n r_2[2] = r_2_2;\n }\n r[2] = r_2;\n }\n {\n bytes22[1][3] memory r_3;\n {\n bytes22[1] memory r_3_0;\n {\n bytes22 r_3_0_0 = bytes22(0x35333c45702f6488881d77f9a8e3f5baba37758750ec);\n r_3_0[0] = r_3_0_0;\n }\n r_3[0] = r_3_0;\n }\n {\n bytes22[1] memory r_3_1;\n {\n bytes22 r_3_1_0 = bytes22(0x5480d85fe7011c13de2dda52f84602ad13ca423d204f);\n r_3_1[0] = r_3_1_0;\n }\n r_3[1] = r_3_1;\n }\n {\n bytes22[1] memory r_3_2;\n {\n bytes22 r_3_2_0 = bytes22(0x91ed8faba7058d81a5cb909b097d256c1da2d9142811);\n r_3_2[0] = r_3_2_0;\n }\n r_3[2] = r_3_2;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0194511bfcd6e802414114278764ac87a419d611e2cd00000000000000000000472e75635680ed2f6cdf9bd9b9c24aab1b678e46cd9b000000000000000000007cdb84a243fd9eb490f95484e225c16a5c16e2a12c38000000000000000000000321f059b6eb9528890a08f744deaf8229c673f25ff500000000000000000000176d8c2606abac4d77e99a8aa8d47ec40c5eb2904f6100000000000000000000fc0c0270d2dadcc417aa607f4b56c021124bbffdac0a000000000000000000008cc60121f2c99e257b8d0315f7963ec99c5d1c313c5f000000000000000000007ad1b87750582e1e0f4305efbef2756d903fa927580b00000000000000000000779fff1447186e2414fd1c50cd37a281d69413ca31040000000000000000000035333c45702f6488881d77f9a8e3f5baba37758750ec000000000000000000005480d85fe7011c13de2dda52f84602ad13ca423d204f0000000000000000000091ed8faba7058d81a5cb909b097d256c1da2d914281100000000000000000000" + }, + { + "name": "random-string[1][2][1]", + "type": "string[1][2][1]", + "value": [[["Moo é🚀🚀oo 🚀M🚀oooo o"], ["Moo é🚀🚀éMM MooooMéooo🚀ééo"]]], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oo 🚀M🚀oooo o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀éMM MooooMéooo🚀ééo" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102a4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610159565b60405180910390f35b6100566100d8565b61005e6100d8565b610066610105565b61006e610132565b6040805180820190915260208082527f4d6f6f20c3a9f09f9a80f09f9a806f6f20f09f9a804df09f9a806f6f6f6f206f90820152815281526100ae610132565b60006040518060600160405280602781526020016102486027913982525060208201528152919050565b60405180602001604052806001905b6100ef610105565b8152602001906001900390816100e75790505090565b60405180604001604052806002905b61011c610132565b8152602001906001900390816101145790505090565b60405180602001604052806001905b60608152602001906001900390816101415790505090565b60208152600060208201604083018460005b600181101561023c57601f19868403810185528251846040810160005b60028110156102225787820383528351826020810160005b600181101561020a5785820383528351805180845260005b818110156101d4576020818401810151868301820152016101b8565b818111156101e6576000602083870101525b5060209586019594850194601f919091018b169390930190920191506001016101a0565b50602096870196959095019493505050600101610188565b50602097880197909650949094019350505060010161016b565b50909594505050505056fe4d6f6f20c3a9f09f9a80f09f9a80c3a94d4d204d6f6f6f6f4dc3a96f6f6ff09f9a80c3a9c3a96fa2646970667358221220b4c2a96a2d578e2570ff6680bb746e5306815a3881db6bcfa418390f6494c4fd64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[1][2][1] memory) {\n string[1][2][1] memory r;\n {\n string[1][2] memory r_0;\n {\n string[1] memory r_0_0;\n {\n string memory r_0_0_0 = unicode\"Moo é🚀🚀oo 🚀M🚀oooo o\";\n r_0_0[0] = r_0_0_0;\n }\n r_0[0] = r_0_0;\n }\n {\n string[1] memory r_0_1;\n {\n string memory r_0_1_0 = unicode\"Moo é🚀🚀éMM MooooMéooo🚀ééo\";\n r_0_1[0] = r_0_1_0;\n }\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000204d6f6f20c3a9f09f9a80f09f9a806f6f20f09f9a804df09f9a806f6f6f6f206f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a80f09f9a80c3a94d4d204d6f6f6f6f4dc3a96f6f6ff09f9a80c3a9c3a96f00000000000000000000000000000000000000000000000000" + }, + { + "name": "random-string[2][3][2]", + "type": "string[2][3][2]", + "value": [ + [ + ["Moo é🚀🚀🚀🚀oooé 🚀éo🚀🚀éoo🚀MM🚀 é 🚀 é🚀🚀oM🚀🚀o🚀🚀 ", "Moo é🚀"], + ["Moo é🚀é éM M", "Moo é🚀o o 🚀MMo oéM 🚀 🚀"], + ["Moo é🚀 oéo🚀ooM🚀🚀o🚀o🚀o oéoéoo oéééo M", "Moo é🚀oéo 🚀o🚀 🚀 Mo éo🚀éooMMo"] + ], + [ + [ + "Moo é🚀", + "Moo é🚀M MMo M🚀ooo éo🚀MéMo🚀oMM oo éééoo oMMo é🚀oo🚀🚀éo é M 🚀o" + ], + [ + "Moo é🚀 🚀M🚀éMo🚀 éooéo MM o M🚀 ooM🚀 🚀oéoo 🚀M 🚀", + "Moo é🚀 o éo 🚀🚀éo o" + ], + [ + "Moo é🚀Méoéo MM🚀é éooééMMoo🚀éMoMooo MMéo o éMo oo é🚀", + "Moo é🚀🚀éoo o🚀M🚀🚀M🚀éo 🚀oo 🚀M oéo é🚀M🚀M🚀🚀Mo" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀🚀oooé 🚀éo🚀🚀éoo🚀MM🚀 é 🚀 é🚀🚀oM🚀🚀o🚀🚀 " + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é éM M" + }, + { + "type": "string", + "value": "Moo é🚀o o 🚀MMo oéM 🚀 🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oéo🚀ooM🚀🚀o🚀o🚀o oéoéoo oéééo M" + }, + { + "type": "string", + "value": "Moo é🚀oéo 🚀o🚀 🚀 Mo éo🚀éooMMo" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀M MMo M🚀ooo éo🚀MéMo🚀oMM oo éééoo oMMo é🚀oo🚀🚀éo é M 🚀o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀M🚀éMo🚀 éooéo MM o M🚀 ooM🚀 🚀oéoo 🚀M 🚀" + }, + { + "type": "string", + "value": "Moo é🚀 o éo 🚀🚀éo o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀Méoéo MM🚀é éooééMMoo🚀éMoMooo MMéo o éMo oo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀éoo o🚀M🚀🚀M🚀éo 🚀oo 🚀M oéo é🚀M🚀M🚀🚀Mo" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610663806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610302565b60405180910390f35b610056610281565b61005e610281565b6100666102ae565b61006e6102db565b60006040518060a001604052806061815260200161052d6061913982525060408051808201909152600a8152689adede418753e13f3560b71b60208083019190915282015281526100bd6102db565b60408051808201825260148152734d6f6f20c3a9f09f9a80c3a920c3a94d2020204d60601b60208083019190915290835281516060810190925260258083526000929161043c908301396020808401919091528301919091525061011f6102db565b60006040518060600160405280603d81526020016104f0603d91398252506040805160608101909152602f8082526000919061046160208301396020830152506040820152815261016e6102ae565b6101766102db565b604080518082018252600a8152689adede418753e13f3560b71b6020808301919091529083528151608081019092526060808352600092916104909083013960208301525081526101c56102db565b60006040518060800160405280604e815260200161058e604e913982525060408051808201909152601e81527f4d6f6f20c3a9f09f9a80206f20c3a96f20f09f9a80f09f9a80c3a96f206f00006020808301919091528083019190915282015261022d6102db565b60006040518060800160405280604b81526020016103f1604b913982525060408051608081019091526052808252600091906105dc6020830139602080840191909152604084019290925250820152919050565b60405180604001604052806002905b6102986102ae565b8152602001906001900390816102905790505090565b60405180606001604052806003905b6102c56102db565b8152602001906001900390816102bd5790505090565b60405180604001604052806002905b60608152602001906001900390816102ea5790505090565b60208152600060208201606083018460005b60028110156103e557601f19868403810185528251846060810160005b60038110156103cb5787820383528351826040810160005b60028110156103b35785820383528351805180845260005b8181101561037d57602081840181015186830182015201610361565b8181111561038f576000602083870101525b5060209586019594850194601f919091018b16939093019092019150600101610349565b50602096870196959095019493505050600101610331565b506020978801979096509490940193505050600101610314565b50909594505050505056fe4d6f6f20c3a9f09f9a804dc3a96fc3a96f204d4df09f9a80c3a920c3a96f6fc3a9c3a94d4d6f6ff09f9a80c3a94d6f4d6f6f6f20204d4dc3a96f206f20c3a94d6f206f6f20c3a9f09f9a804d6f6f20c3a9f09f9a806f206f20f09f9a804d4d6f206fc3a94d20f09f9a802020f09f9a804d6f6f20c3a9f09f9a806fc3a96f20f09f9a806ff09f9a8020f09f9a80204d6f20c3a96ff09f9a80c3a96f6f4d4d6f4d6f6f20c3a9f09f9a804d204d4d6f204df09f9a806f6f6f20c3a96ff09f9a804dc3a94d6ff09f9a806f4d4d206f6f20c3a9c3a9c3a96f6f20206f4d4d6f2020c3a9f09f9a806f6ff09f9a80f09f9a80c3a96f20c3a92020204d20f09f9a806f4d6f6f20c3a9f09f9a80206fc3a96ff09f9a806f6f4df09f9a80f09f9a806ff09f9a806ff09f9a806f206fc3a96fc3a96f6f206fc3a9c3a9c3a96f204d4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a806f6f6fc3a920f09f9a80c3a96ff09f9a80f09f9a80c3a96f6ff09f9a804d4df09f9a802020c3a920f09f9a8020c3a9f09f9a80f09f9a806f4df09f9a80f09f9a806ff09f9a80f09f9a80204d6f6f20c3a9f09f9a8020f09f9a804df09f9a80c3a94d6ff09f9a8020c3a96f6fc3a96f204d4d206f2020204df09f9a80206f6f4df09f9a8020f09f9a806fc3a96f6f20f09f9a804d20f09f9a804d6f6f20c3a9f09f9a80f09f9a80c3a96f6f206ff09f9a804df09f9a80f09f9a804df09f9a80c3a96f20f09f9a806f6f20f09f9a804d206fc3a96f20c3a9f09f9a804df09f9a804df09f9a80f09f9a804d6fa26469706673582212200d9f74e06d5338d0346f7958650f6fe6f972587d1c784a34cce47c3121d9726d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[2][3][2] memory) {\n string[2][3][2] memory r;\n {\n string[2][3] memory r_0;\n {\n string[2] memory r_0_0;\n {\n string memory r_0_0_0 = unicode\"Moo é🚀🚀🚀🚀oooé 🚀éo🚀🚀éoo🚀MM🚀 é 🚀 é🚀🚀oM🚀🚀o🚀🚀 \";\n r_0_0[0] = r_0_0_0;\n }\n {\n string memory r_0_0_1 = unicode\"Moo é🚀\";\n r_0_0[1] = r_0_0_1;\n }\n r_0[0] = r_0_0;\n }\n {\n string[2] memory r_0_1;\n {\n string memory r_0_1_0 = unicode\"Moo é🚀é éM M\";\n r_0_1[0] = r_0_1_0;\n }\n {\n string memory r_0_1_1 = unicode\"Moo é🚀o o 🚀MMo oéM 🚀 🚀\";\n r_0_1[1] = r_0_1_1;\n }\n r_0[1] = r_0_1;\n }\n {\n string[2] memory r_0_2;\n {\n string memory r_0_2_0 = unicode\"Moo é🚀 oéo🚀ooM🚀🚀o🚀o🚀o oéoéoo oéééo M\";\n r_0_2[0] = r_0_2_0;\n }\n {\n string memory r_0_2_1 = unicode\"Moo é🚀oéo 🚀o🚀 🚀 Mo éo🚀éooMMo\";\n r_0_2[1] = r_0_2_1;\n }\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n {\n string[2][3] memory r_1;\n {\n string[2] memory r_1_0;\n {\n string memory r_1_0_0 = unicode\"Moo é🚀\";\n r_1_0[0] = r_1_0_0;\n }\n {\n string memory r_1_0_1 = unicode\"Moo é🚀M MMo M🚀ooo éo🚀MéMo🚀oMM oo éééoo oMMo é🚀oo🚀🚀éo é M 🚀o\";\n r_1_0[1] = r_1_0_1;\n }\n r_1[0] = r_1_0;\n }\n {\n string[2] memory r_1_1;\n {\n string memory r_1_1_0 = unicode\"Moo é🚀 🚀M🚀éMo🚀 éooéo MM o M🚀 ooM🚀 🚀oéoo 🚀M 🚀\";\n r_1_1[0] = r_1_1_0;\n }\n {\n string memory r_1_1_1 = unicode\"Moo é🚀 o éo 🚀🚀éo o\";\n r_1_1[1] = r_1_1_1;\n }\n r_1[1] = r_1_1;\n }\n {\n string[2] memory r_1_2;\n {\n string memory r_1_2_0 = unicode\"Moo é🚀Méoéo MM🚀é éooééMMoo🚀éMoMooo MMéo o éMo oo é🚀\";\n r_1_2[0] = r_1_2_0;\n }\n {\n string memory r_1_2_1 = unicode\"Moo é🚀🚀éoo o🚀M🚀🚀M🚀éo 🚀oo 🚀M oéo é🚀M🚀M🚀🚀Mo\";\n r_1_2[1] = r_1_2_1;\n }\n r_1[2] = r_1_2;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a806f6f6fc3a920f09f9a80c3a96ff09f9a80f09f9a80c3a96f6ff09f9a804d4df09f9a802020c3a920f09f9a8020c3a9f09f9a80f09f9a806f4df09f9a80f09f9a806ff09f9a80f09f9a802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a80c3a920c3a94d2020204d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a806f206f20f09f9a804d4d6f206fc3a94d20f09f9a802020f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a80206fc3a96ff09f9a806f6f4df09f9a80f09f9a806ff09f9a806ff09f9a806f206fc3a96fc3a96f6f206fc3a9c3a9c3a96f204d000000000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a806fc3a96f20f09f9a806ff09f9a8020f09f9a80204d6f20c3a96ff09f9a80c3a96f6f4d4d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a804d204d4d6f204df09f9a806f6f6f20c3a96ff09f9a804dc3a94d6ff09f9a806f4d4d206f6f20c3a9c3a9c3a96f6f20206f4d4d6f2020c3a9f09f9a806f6ff09f9a80f09f9a80c3a96f20c3a92020204d20f09f9a806f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a8020f09f9a804df09f9a80c3a94d6ff09f9a8020c3a96f6fc3a96f204d4d206f2020204df09f9a80206f6f4df09f9a8020f09f9a806fc3a96f6f20f09f9a804d20f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a80206f20c3a96f20f09f9a80f09f9a80c3a96f206f0000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a804dc3a96fc3a96f204d4df09f9a80c3a920c3a96f6fc3a9c3a94d4d6f6ff09f9a80c3a94d6f4d6f6f6f20204d4dc3a96f206f20c3a94d6f206f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a80f09f9a80c3a96f6f206ff09f9a804df09f9a80f09f9a804df09f9a80c3a96f20f09f9a806f6f20f09f9a804d206fc3a96f20c3a9f09f9a804df09f9a804df09f9a80f09f9a804d6f0000000000000000000000000000" + }, + { + "name": "random-string[3][1][3]", + "type": "string[3][1][3]", + "value": [ + [ + [ + "Moo é🚀éMé", + "Moo é🚀🚀éMooéoo🚀oo oo🚀oo🚀🚀ooo ééooo oooooéo🚀 M é 🚀 🚀éM oMéo oéo", + "Moo é🚀oMooooé🚀ééé🚀 éoéooo🚀🚀Méoo" + ] + ], + [ + [ + "Moo é🚀 oooé🚀 🚀éoMo", + "Moo é🚀 ooéo ooé🚀Mé éo🚀Méé🚀Mo é🚀éo🚀🚀M🚀 ", + "Moo é🚀🚀🚀🚀 🚀MMo" + ] + ], + [ + [ + "Moo é🚀🚀 M ooo🚀🚀🚀", + "Moo é🚀o oMé🚀oéo🚀 o 🚀oéMoMMM o🚀ééo 🚀🚀oé🚀ooMoo 🚀o éoo oo🚀oo", + "Moo é🚀🚀o🚀ooo🚀 oéMéé🚀Moé🚀Mé 🚀éooooooo🚀MoM🚀oo M🚀MoM🚀ooééMé" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éMé" + }, + { + "type": "string", + "value": "Moo é🚀🚀éMooéoo🚀oo oo🚀oo🚀🚀ooo ééooo oooooéo🚀 M é 🚀 🚀éM oMéo oéo" + }, + { + "type": "string", + "value": "Moo é🚀oMooooé🚀ééé🚀 éoéooo🚀🚀Méoo" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oooé🚀 🚀éoMo" + }, + { + "type": "string", + "value": "Moo é🚀 ooéo ooé🚀Mé éo🚀Méé🚀Mo é🚀éo🚀🚀M🚀 " + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀🚀 🚀MMo" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀 M ooo🚀🚀🚀" + }, + { + "type": "string", + "value": "Moo é🚀o oMé🚀oéo🚀 o 🚀oéMoMMM o🚀ééo 🚀🚀oé🚀ooMoo 🚀o éoo oo🚀oo" + }, + { + "type": "string", + "value": "Moo é🚀🚀o🚀ooo🚀 oéMéé🚀Moé🚀Mé 🚀éooooooo🚀MoM🚀oo M🚀MoM🚀ooééMé" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610585806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061029a565b60405180910390f35b610056610219565b61005e610219565b610066610246565b61006e610273565b604080518082018252600f81526e4d6f6f20c3a9f09f9a80c3a94dc3a960881b602080830191909152908352815160a081019092526064808352600092916104ec9083013990508082600160200201819052505060006040518060600160405280603681526020016104b660369139604083015250815281526100ef610246565b6100f7610273565b604080518082018252601f81527f4d6f6f20c3a9f09f9a8020206f6f6fc3a9f09f9a8020f09f9a80c3a96f4d6f0060208083019190915290835281516080810190925260478083526000929161038990830139602083810191909152604080518082018252601e81527f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a8020f09f9a804d4d6f0000818401529084015291835250820152610198610246565b6101a0610273565b6000604051806060016040528060218152602001610433602191398252506040805160a08101909152606280825260009190610454602083013990508082600160200201819052505060006040518060a00160405280606381526020016103d06063913960408084019190915291835250820152919050565b60405180606001604052806003905b610230610246565b8152602001906001900390816102285790505090565b60405180602001604052806001905b61025d610273565b8152602001906001900390816102555790505090565b60405180606001604052806003905b60608152602001906001900390816102825790505090565b60208152600060208201608083018460005b600381101561037d57601f19868403810185528251846020810160005b60018110156103635787820383528351826060810160005b600381101561034b5785820383528351805180845260005b81811015610315576020818401810151868301820152016102f9565b81811115610327576000602083870101525b5060209586019594850194601f919091018b169390930190920191506001016102e1565b506020968701969590950194935050506001016102c9565b5060209788019790965094909401935050506001016102ac565b50909594505050505056fe4d6f6f20c3a9f09f9a80206f6fc3a96f206f6fc3a9f09f9a804dc3a920c3a96ff09f9a804dc3a9c3a9f09f9a804d6f20c3a9f09f9a80c3a96ff09f9a80f09f9a804df09f9a80204d6f6f20c3a9f09f9a80f09f9a806ff09f9a806f6f6ff09f9a80206fc3a94dc3a9c3a9f09f9a804d6fc3a9f09f9a804dc3a920f09f9a80c3a96f6f6f6f6f6f6ff09f9a804d6f4df09f9a806f6f204df09f9a804d6f4df09f9a806f6fc3a9c3a94dc3a94d6f6f20c3a9f09f9a80f09f9a8020204d206f6f6ff09f9a80f09f9a80f09f9a804d6f6f20c3a9f09f9a806f206f4dc3a9f09f9a806fc3a96ff09f9a80206f2020f09f9a806fc3a94d6f4d4d4d20206ff09f9a80c3a9c3a96f20f09f9a80f09f9a806fc3a9f09f9a806f6f4d6f6f2020f09f9a806f20c3a96f6f206f6ff09f9a806f6f4d6f6f20c3a9f09f9a806f4d6f6f6f6fc3a9f09f9a80c3a9c3a9c3a9f09f9a8020c3a96fc3a96f6f6ff09f9a80f09f9a804dc3a96f6f4d6f6f20c3a9f09f9a80f09f9a80c3a94d6f6fc3a96f6ff09f9a806f6f206f6ff09f9a806f6ff09f9a80f09f9a806f6f6f20c3a9c3a96f6f6f206f6f6f6f6fc3a96ff09f9a80204d20c3a92020f09f9a8020f09f9a80c3a94d206f4dc3a96f206fc3a96fa26469706673582212202b7c264738c45812be2335f53c0e97f27a41890978b0b07ce8b2dcaef8aad0f364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[3][1][3] memory) {\n string[3][1][3] memory r;\n {\n string[3][1] memory r_0;\n {\n string[3] memory r_0_0;\n {\n string memory r_0_0_0 = unicode\"Moo é🚀éMé\";\n r_0_0[0] = r_0_0_0;\n }\n {\n string memory r_0_0_1 = unicode\"Moo é🚀🚀éMooéoo🚀oo oo🚀oo🚀🚀ooo ééooo oooooéo🚀 M é 🚀 🚀éM oMéo oéo\";\n r_0_0[1] = r_0_0_1;\n }\n {\n string memory r_0_0_2 = unicode\"Moo é🚀oMooooé🚀ééé🚀 éoéooo🚀🚀Méoo\";\n r_0_0[2] = r_0_0_2;\n }\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n string[3][1] memory r_1;\n {\n string[3] memory r_1_0;\n {\n string memory r_1_0_0 = unicode\"Moo é🚀 oooé🚀 🚀éoMo\";\n r_1_0[0] = r_1_0_0;\n }\n {\n string memory r_1_0_1 = unicode\"Moo é🚀 ooéo ooé🚀Mé éo🚀Méé🚀Mo é🚀éo🚀🚀M🚀 \";\n r_1_0[1] = r_1_0_1;\n }\n {\n string memory r_1_0_2 = unicode\"Moo é🚀🚀🚀🚀 🚀MMo\";\n r_1_0[2] = r_1_0_2;\n }\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n {\n string[3][1] memory r_2;\n {\n string[3] memory r_2_0;\n {\n string memory r_2_0_0 = unicode\"Moo é🚀🚀 M ooo🚀🚀🚀\";\n r_2_0[0] = r_2_0_0;\n }\n {\n string memory r_2_0_1 = unicode\"Moo é🚀o oMé🚀oéo🚀 o 🚀oéMoMMM o🚀ééo 🚀🚀oé🚀ooMoo 🚀o éoo oo🚀oo\";\n r_2_0[1] = r_2_0_1;\n }\n {\n string memory r_2_0_2 = unicode\"Moo é🚀🚀o🚀ooo🚀 oéMéé🚀Moé🚀Mé 🚀éooooooo🚀MoM🚀oo M🚀MoM🚀ooééMé\";\n r_2_0[2] = r_2_0_2;\n }\n r_2[0] = r_2_0;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a80c3a94dc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000644d6f6f20c3a9f09f9a80f09f9a80c3a94d6f6fc3a96f6ff09f9a806f6f206f6ff09f9a806f6ff09f9a80f09f9a806f6f6f20c3a9c3a96f6f6f206f6f6f6f6fc3a96ff09f9a80204d20c3a92020f09f9a8020f09f9a80c3a94d206f4dc3a96f206fc3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a806f4d6f6f6f6fc3a9f09f9a80c3a9c3a9c3a9f09f9a8020c3a96fc3a96f6f6ff09f9a80f09f9a804dc3a96f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a8020206f6f6fc3a9f09f9a8020f09f9a80c3a96f4d6f0000000000000000000000000000000000000000000000000000000000000000474d6f6f20c3a9f09f9a80206f6fc3a96f206f6fc3a9f09f9a804dc3a920c3a96ff09f9a804dc3a9c3a9f09f9a804d6f20c3a9f09f9a80c3a96ff09f9a80f09f9a804df09f9a802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a8020f09f9a804d4d6f00000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a80f09f9a8020204d206f6f6ff09f9a80f09f9a80f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000624d6f6f20c3a9f09f9a806f206f4dc3a9f09f9a806fc3a96ff09f9a80206f2020f09f9a806fc3a94d6f4d4d4d20206ff09f9a80c3a9c3a96f20f09f9a80f09f9a806fc3a9f09f9a806f6f4d6f6f2020f09f9a806f20c3a96f6f206f6ff09f9a806f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a80f09f9a806ff09f9a806f6f6ff09f9a80206fc3a94dc3a9c3a9f09f9a804d6fc3a9f09f9a804dc3a920f09f9a80c3a96f6f6f6f6f6f6ff09f9a804d6f4df09f9a806f6f204df09f9a804d6f4df09f9a806f6fc3a9c3a94dc3a90000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-uint224[4][2][4]", + "type": "uint224[4][2][4]", + "value": [ + [ + [ + "5377312229897299535696019687406810013089099852755101091439757512680", + "18522154909321097802266265825651276784275675883595845086883647763201", + "12058336054582840951854927147905955754680706266328100852050408791167", + "23492719061496978739874177622027830482434981716258735142190425449108" + ], + [ + "18100020790030960321943247471394873994813620236636109335184896631979", + "21824938749583676118372319218823614342478491472211175165918743048202", + "22263036018111224546721594290232683579455602948987127356518146553606", + "22748992211465257697293035229826553915199734377443768278419154845886" + ] + ], + [ + [ + "7699845118881503057089946499173846883147144502989620147954556375852", + "20996916564276708400223345095243135952560777839306806884079602847925", + "18672325135799566643543625431188225864251177670867301843181122494338", + "4597340655837690870496971444234799551034223756552663123816041029295" + ], + [ + "23424611392081652253715277056274401163915218070898536397892050161984", + "14688467483563487675198993503650977286455923158568175148106565463920", + "25515162019250128132129320767301212867465966381098310490380431486860", + "1981116308711297786698759699724981991358908177770746810709204758438" + ] + ], + [ + [ + "8431240698375154038746226471669553079687803153725091016735712244229", + "14807580739603437631275120211038598377234576873017803300522139955994", + "20287171984628217456391595383909573027215910476496027836621977765248", + "18456290289566333218977479554682641592587387572332634609417484783849" + ], + [ + "13199947442456902507593853457678304855624344602361705770173200864003", + "1912217439790950948673357742266587791371015676267458417204650703372", + "8382247615196011385403079875120550216847127523271986497990853980509", + "24644874696145894687502700113744172909047145240716223168074391969402" + ] + ], + [ + [ + "6177907570234652601963152692732332635096935948899691362753344033436", + "12003237932543587871581407782194865071462824748929246326788191912141", + "19325179210680829176796249552510997673751060010608090145268937468622", + "15652708773599942269317775762725936466995535660810910010541606852765" + ], + [ + "22170160908098190116629798064727534141123441505854067365011736564557", + "24574506323149670154821092697287988781024901629311344135814833285539", + "15017046925822393734822924405937889839644459921287373118988637626850", + "14081164759054961644233462463074115214259962948364490039368988236136" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "5377312229897299535696019687406810013089099852755101091439757512680" + }, + { + "type": "number", + "value": "18522154909321097802266265825651276784275675883595845086883647763201" + }, + { + "type": "number", + "value": "12058336054582840951854927147905955754680706266328100852050408791167" + }, + { + "type": "number", + "value": "23492719061496978739874177622027830482434981716258735142190425449108" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "18100020790030960321943247471394873994813620236636109335184896631979" + }, + { + "type": "number", + "value": "21824938749583676118372319218823614342478491472211175165918743048202" + }, + { + "type": "number", + "value": "22263036018111224546721594290232683579455602948987127356518146553606" + }, + { + "type": "number", + "value": "22748992211465257697293035229826553915199734377443768278419154845886" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "7699845118881503057089946499173846883147144502989620147954556375852" + }, + { + "type": "number", + "value": "20996916564276708400223345095243135952560777839306806884079602847925" + }, + { + "type": "number", + "value": "18672325135799566643543625431188225864251177670867301843181122494338" + }, + { + "type": "number", + "value": "4597340655837690870496971444234799551034223756552663123816041029295" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "23424611392081652253715277056274401163915218070898536397892050161984" + }, + { + "type": "number", + "value": "14688467483563487675198993503650977286455923158568175148106565463920" + }, + { + "type": "number", + "value": "25515162019250128132129320767301212867465966381098310490380431486860" + }, + { + "type": "number", + "value": "1981116308711297786698759699724981991358908177770746810709204758438" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "8431240698375154038746226471669553079687803153725091016735712244229" + }, + { + "type": "number", + "value": "14807580739603437631275120211038598377234576873017803300522139955994" + }, + { + "type": "number", + "value": "20287171984628217456391595383909573027215910476496027836621977765248" + }, + { + "type": "number", + "value": "18456290289566333218977479554682641592587387572332634609417484783849" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "13199947442456902507593853457678304855624344602361705770173200864003" + }, + { + "type": "number", + "value": "1912217439790950948673357742266587791371015676267458417204650703372" + }, + { + "type": "number", + "value": "8382247615196011385403079875120550216847127523271986497990853980509" + }, + { + "type": "number", + "value": "24644874696145894687502700113744172909047145240716223168074391969402" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "6177907570234652601963152692732332635096935948899691362753344033436" + }, + { + "type": "number", + "value": "12003237932543587871581407782194865071462824748929246326788191912141" + }, + { + "type": "number", + "value": "19325179210680829176796249552510997673751060010608090145268937468622" + }, + { + "type": "number", + "value": "15652708773599942269317775762725936466995535660810910010541606852765" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "22170160908098190116629798064727534141123441505854067365011736564557" + }, + { + "type": "number", + "value": "24574506323149670154821092697287988781024901629311344135814833285539" + }, + { + "type": "number", + "value": "15017046925822393734822924405937889839644459921287373118988637626850" + }, + { + "type": "number", + "value": "14081164759054961644233462463074115214259962948364490039368988236136" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061066e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906105a6565b60405180910390f35b61005661052e565b61005e61052e565b61006661055b565b61006e610588565b7b330f859db55321e61a8ab9cc126693afe5040aae5fc798fbc0004fe881527bafe0dd4c4736064ddbd80949d2f29c9c4971e42011a6bf70ba76b30160208201527b728030f306fb6126cec6a46eb48ae6a5e35e0cdee6f76c9c5bdc5c7f60408201527bdf13a2f6bce08af605fb7a6801de0c7458ff180b96bd8b6a7efe2294606082015281526100fd610588565b7babdeb697315855aaf48f81ad855652a44fa3012318b5a637c52724ab81527bcf3d7cba4ad3fd0d1ec604b4e2ff2d3a7109b2304cf79b3984db300a6020808301919091527bd3667153c53534d0690e472f9a2a99548f13e815f2fff8809100b70660408301527bd803bc9bd99c9c334af9457ea7f0bc00e2d2bba4bf57b6170ffec0be6060830152820152815261019361055b565b61019b610588565b7b491d49619616903d191d33b60dafc64ae7f249abadf96f522e98932c81527bc760ad41ba2b412d3ae577596a37167bc1d6dcda54b68493788d50b560208201527bb14de875967682706228751a8cfc2d38fbdc5fd8298cc6b87c1a1f8260408201527b2ba7841d274e527058402ecec918d35db74899d33230fc6b185a1eaf6060820152815261022a610588565b7bde6e137503bf44c3ddfe45f190631cf28d661ef09070c3539473114081527b8b79afc17fec97a73b9a2a4e8e00d810334512601ecadd02828aaf706020808301919091527bf247ec4e68fe95fbb8273ef93b1bcd543b981f0bc70bd0db36336f8c60408301527b12cfd3b4a45db899cacd0290d2982e9cc9e58b251dd33271c0036fa66060830152828101919091528201526102c561055b565b6102cd610588565b7b500f35f7bd3d6dbd51b4864ae6edb056b1387c46a072004e9f92720581527b8c9b3c1df86521f83947e1770ce35802807f3f0e4aa69cce7b4db31a60208201527bc0a3621ed8ae6704630d38886831a872235ab28442f98380c5fb458060408201527baf40c1a4fb67f63d8a0a76e98b1012e8d5f769abca57f342027c50e96060820152815261035c610588565b7b7d574b75cb8f8e66d4e15682a763f47cb48ba618c9c158c1daf8130381527b122857d590d425986aafa5905d81bb896a53d8057b8a566eacedfa0c6020808301919091527b4f981d7f49ad9db2db277b9ed5c8caca4caa10df4563e5a6a738f15d6040808401919091527bea045f2cee27567a9277c9245b10ce8702316f965a3ff86b52075e7a6060840152908301919091528201526103fb61055b565b610403610588565b7b3aa9a951c9568a12e9372d8a1ab078f87f0365f3b59cf7e6dfadd29c81527b71fa414dc5f9ac7a172ef84b80c2d2e249ced473ef91e5ac3a3b80cd60208201527bb780e88c2c0c80ae6f8efc73010bae2eb417f49fd919de0fd0f32ace60408201527b94a1a095741240f467523f8bcb830a51eb8f7a1f6e0107f3683e589d60608201528152610492610588565b7bd284ad011e9ef4118d31668bc96fd0252921de7dcc125cb2ad11134d81527be95950d4592a74ed4f72c7f381adddaccff4b5893537e2da443ca9a36020808301919091527b8e986b3ea993cc0bee8d482027d0f694f475b13e276737cdea6ee1e260408301527b85b56a57b2878884383e28bb9a2a123e3c9f3ac4119f5e695730196860608084019190915290830191909152820152919050565b60405180608001604052806004905b61054561055b565b81526020019060019003908161053d5790505090565b60405180604001604052806002905b610572610588565b81526020019060019003908161056a5790505090565b60405180608001604052806004906020820280368337509192915050565b6104008101818360005b60048082106105bf575061062f565b82518460005b60028110156106145782518260005b868110156105fb5782516001600160e01b03168252602092830192909101906001016105d4565b50505060209290920191608091909101906001016105c5565b505050610100939093019250602091909101906001016105b0565b5050509291505056fea2646970667358221220b2b637a48625ed8b3a3bb60b7a2f7679a02f4f054c1de8f1df676b522156225364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (uint224[4][2][4] memory) {\n uint224[4][2][4] memory r;\n {\n uint224[4][2] memory r_0;\n {\n uint224[4] memory r_0_0;\n {\n uint224 r_0_0_0 = 5377312229897299535696019687406810013089099852755101091439757512680;\n r_0_0[0] = r_0_0_0;\n }\n {\n uint224 r_0_0_1 = 18522154909321097802266265825651276784275675883595845086883647763201;\n r_0_0[1] = r_0_0_1;\n }\n {\n uint224 r_0_0_2 = 12058336054582840951854927147905955754680706266328100852050408791167;\n r_0_0[2] = r_0_0_2;\n }\n {\n uint224 r_0_0_3 = 23492719061496978739874177622027830482434981716258735142190425449108;\n r_0_0[3] = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n uint224[4] memory r_0_1;\n {\n uint224 r_0_1_0 = 18100020790030960321943247471394873994813620236636109335184896631979;\n r_0_1[0] = r_0_1_0;\n }\n {\n uint224 r_0_1_1 = 21824938749583676118372319218823614342478491472211175165918743048202;\n r_0_1[1] = r_0_1_1;\n }\n {\n uint224 r_0_1_2 = 22263036018111224546721594290232683579455602948987127356518146553606;\n r_0_1[2] = r_0_1_2;\n }\n {\n uint224 r_0_1_3 = 22748992211465257697293035229826553915199734377443768278419154845886;\n r_0_1[3] = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n {\n uint224[4][2] memory r_1;\n {\n uint224[4] memory r_1_0;\n {\n uint224 r_1_0_0 = 7699845118881503057089946499173846883147144502989620147954556375852;\n r_1_0[0] = r_1_0_0;\n }\n {\n uint224 r_1_0_1 = 20996916564276708400223345095243135952560777839306806884079602847925;\n r_1_0[1] = r_1_0_1;\n }\n {\n uint224 r_1_0_2 = 18672325135799566643543625431188225864251177670867301843181122494338;\n r_1_0[2] = r_1_0_2;\n }\n {\n uint224 r_1_0_3 = 4597340655837690870496971444234799551034223756552663123816041029295;\n r_1_0[3] = r_1_0_3;\n }\n r_1[0] = r_1_0;\n }\n {\n uint224[4] memory r_1_1;\n {\n uint224 r_1_1_0 = 23424611392081652253715277056274401163915218070898536397892050161984;\n r_1_1[0] = r_1_1_0;\n }\n {\n uint224 r_1_1_1 = 14688467483563487675198993503650977286455923158568175148106565463920;\n r_1_1[1] = r_1_1_1;\n }\n {\n uint224 r_1_1_2 = 25515162019250128132129320767301212867465966381098310490380431486860;\n r_1_1[2] = r_1_1_2;\n }\n {\n uint224 r_1_1_3 = 1981116308711297786698759699724981991358908177770746810709204758438;\n r_1_1[3] = r_1_1_3;\n }\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n {\n uint224[4][2] memory r_2;\n {\n uint224[4] memory r_2_0;\n {\n uint224 r_2_0_0 = 8431240698375154038746226471669553079687803153725091016735712244229;\n r_2_0[0] = r_2_0_0;\n }\n {\n uint224 r_2_0_1 = 14807580739603437631275120211038598377234576873017803300522139955994;\n r_2_0[1] = r_2_0_1;\n }\n {\n uint224 r_2_0_2 = 20287171984628217456391595383909573027215910476496027836621977765248;\n r_2_0[2] = r_2_0_2;\n }\n {\n uint224 r_2_0_3 = 18456290289566333218977479554682641592587387572332634609417484783849;\n r_2_0[3] = r_2_0_3;\n }\n r_2[0] = r_2_0;\n }\n {\n uint224[4] memory r_2_1;\n {\n uint224 r_2_1_0 = 13199947442456902507593853457678304855624344602361705770173200864003;\n r_2_1[0] = r_2_1_0;\n }\n {\n uint224 r_2_1_1 = 1912217439790950948673357742266587791371015676267458417204650703372;\n r_2_1[1] = r_2_1_1;\n }\n {\n uint224 r_2_1_2 = 8382247615196011385403079875120550216847127523271986497990853980509;\n r_2_1[2] = r_2_1_2;\n }\n {\n uint224 r_2_1_3 = 24644874696145894687502700113744172909047145240716223168074391969402;\n r_2_1[3] = r_2_1_3;\n }\n r_2[1] = r_2_1;\n }\n r[2] = r_2;\n }\n {\n uint224[4][2] memory r_3;\n {\n uint224[4] memory r_3_0;\n {\n uint224 r_3_0_0 = 6177907570234652601963152692732332635096935948899691362753344033436;\n r_3_0[0] = r_3_0_0;\n }\n {\n uint224 r_3_0_1 = 12003237932543587871581407782194865071462824748929246326788191912141;\n r_3_0[1] = r_3_0_1;\n }\n {\n uint224 r_3_0_2 = 19325179210680829176796249552510997673751060010608090145268937468622;\n r_3_0[2] = r_3_0_2;\n }\n {\n uint224 r_3_0_3 = 15652708773599942269317775762725936466995535660810910010541606852765;\n r_3_0[3] = r_3_0_3;\n }\n r_3[0] = r_3_0;\n }\n {\n uint224[4] memory r_3_1;\n {\n uint224 r_3_1_0 = 22170160908098190116629798064727534141123441505854067365011736564557;\n r_3_1[0] = r_3_1_0;\n }\n {\n uint224 r_3_1_1 = 24574506323149670154821092697287988781024901629311344135814833285539;\n r_3_1[1] = r_3_1_1;\n }\n {\n uint224 r_3_1_2 = 15017046925822393734822924405937889839644459921287373118988637626850;\n r_3_1[2] = r_3_1_2;\n }\n {\n uint224 r_3_1_3 = 14081164759054961644233462463074115214259962948364490039368988236136;\n r_3_1[3] = r_3_1_3;\n }\n r_3[1] = r_3_1;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000330f859db55321e61a8ab9cc126693afe5040aae5fc798fbc0004fe800000000afe0dd4c4736064ddbd80949d2f29c9c4971e42011a6bf70ba76b30100000000728030f306fb6126cec6a46eb48ae6a5e35e0cdee6f76c9c5bdc5c7f00000000df13a2f6bce08af605fb7a6801de0c7458ff180b96bd8b6a7efe229400000000abdeb697315855aaf48f81ad855652a44fa3012318b5a637c52724ab00000000cf3d7cba4ad3fd0d1ec604b4e2ff2d3a7109b2304cf79b3984db300a00000000d3667153c53534d0690e472f9a2a99548f13e815f2fff8809100b70600000000d803bc9bd99c9c334af9457ea7f0bc00e2d2bba4bf57b6170ffec0be00000000491d49619616903d191d33b60dafc64ae7f249abadf96f522e98932c00000000c760ad41ba2b412d3ae577596a37167bc1d6dcda54b68493788d50b500000000b14de875967682706228751a8cfc2d38fbdc5fd8298cc6b87c1a1f82000000002ba7841d274e527058402ecec918d35db74899d33230fc6b185a1eaf00000000de6e137503bf44c3ddfe45f190631cf28d661ef09070c35394731140000000008b79afc17fec97a73b9a2a4e8e00d810334512601ecadd02828aaf7000000000f247ec4e68fe95fbb8273ef93b1bcd543b981f0bc70bd0db36336f8c0000000012cfd3b4a45db899cacd0290d2982e9cc9e58b251dd33271c0036fa600000000500f35f7bd3d6dbd51b4864ae6edb056b1387c46a072004e9f927205000000008c9b3c1df86521f83947e1770ce35802807f3f0e4aa69cce7b4db31a00000000c0a3621ed8ae6704630d38886831a872235ab28442f98380c5fb458000000000af40c1a4fb67f63d8a0a76e98b1012e8d5f769abca57f342027c50e9000000007d574b75cb8f8e66d4e15682a763f47cb48ba618c9c158c1daf8130300000000122857d590d425986aafa5905d81bb896a53d8057b8a566eacedfa0c000000004f981d7f49ad9db2db277b9ed5c8caca4caa10df4563e5a6a738f15d00000000ea045f2cee27567a9277c9245b10ce8702316f965a3ff86b52075e7a000000003aa9a951c9568a12e9372d8a1ab078f87f0365f3b59cf7e6dfadd29c0000000071fa414dc5f9ac7a172ef84b80c2d2e249ced473ef91e5ac3a3b80cd00000000b780e88c2c0c80ae6f8efc73010bae2eb417f49fd919de0fd0f32ace0000000094a1a095741240f467523f8bcb830a51eb8f7a1f6e0107f3683e589d00000000d284ad011e9ef4118d31668bc96fd0252921de7dcc125cb2ad11134d00000000e95950d4592a74ed4f72c7f381adddaccff4b5893537e2da443ca9a3000000008e986b3ea993cc0bee8d482027d0f694f475b13e276737cdea6ee1e20000000085b56a57b2878884383e28bb9a2a123e3c9f3ac4119f5e6957301968" + }, + { + "name": "random-(((bool,bytes7),(uint144,uint232,int)))", + "type": "(((bool,bytes7),(uint144,uint232,int)))", + "value": [ + [ + [false, "0x1d3eed889a8712"], + [ + "14329902020018249662978933810479027112502716", + "3376477939983014499890580101026150584705047245656021126340470999085253", + "1433964434526466021610187632551076552415698336378822750633328280106652253120" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x1d3eed889a8712" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "14329902020018249662978933810479027112502716" + }, + { + "type": "number", + "value": "3376477939983014499890580101026150584705047245656021126340470999085253" + }, + { + "type": "number", + "value": "1433964434526466021610187632551076552415698336378822750633328280106652253120" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610201806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861009d565b60408051915180518051151584526020908101516001600160c81b0319168185015290810151805171ffffffffffffffffffffffffffffffffffff1684840152908101516001600160e81b031660608401520151608082015260a00160405180910390f35b6100a5610185565b6100ad610185565b6100f06040805160808101825260009181018281526060820192909252908190815260408051606081018252600080825260208281018290529282015291015290565b60408051808201825260008152660e9f76c44d438960c91b602080830191909152908352815160608101835271a47fcc140c800872a8522532b6eb99a5e5bc81527c7d3d933496691d8814f3a7ccc67b8a712447a8b99a7dff1da850dbf0c5818301527f032b9859010e6316e5c2936a55a94ba7bdf43f8b46fcb919345a6d892cd9bbc0928101929092528201528152919050565b6040805160a0810182526000606080830182815260808401839052602080850191825285519283018652838352820183905281850192909252928201929092529081529056fea26469706673582212205bac87024fbbf536e5b6730eb61e42275ed9263b03b7347eead91a969741348064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6a62bb34 {\n bool s_0;\n bytes7 s_1;\n }\n\n struct S_3589c251 {\n uint144 s_0;\n uint232 s_1;\n int256 s_2;\n }\n\n struct S_26786339 {\n S_6a62bb34 s_0;\n S_3589c251 s_1;\n }\n\n struct S_7f7eed4d {\n S_26786339 s_0;\n }\n\n function test () public pure returns (S_7f7eed4d memory) {\n S_7f7eed4d memory r;\n {\n S_26786339 memory r_0;\n {\n S_6a62bb34 memory r_0_0;\n {\n bool r_0_0_0 = false;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n bytes7 r_0_0_1 = bytes7(0x1d3eed889a8712);\n r_0_0.s_1 = r_0_0_1;\n }\n r_0.s_0 = r_0_0;\n }\n {\n S_3589c251 memory r_0_1;\n {\n uint144 r_0_1_0 = 14329902020018249662978933810479027112502716;\n r_0_1.s_0 = r_0_1_0;\n }\n {\n uint232 r_0_1_1 = 3376477939983014499890580101026150584705047245656021126340470999085253;\n r_0_1.s_1 = r_0_1_1;\n }\n {\n int r_0_1_2 = 1433964434526466021610187632551076552415698336378822750633328280106652253120;\n r_0_1.s_2 = r_0_1_2;\n }\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000001d3eed889a8712000000000000000000000000000000000000000000000000000000000000000000000000000000a47fcc140c800872a8522532b6eb99a5e5bc0000007d3d933496691d8814f3a7ccc67b8a712447a8b99a7dff1da850dbf0c5032b9859010e6316e5c2936a55a94ba7bdf43f8b46fcb919345a6d892cd9bbc0" + }, + { + "name": "random-((bool,string,address,address)[4])", + "type": "((bool,string,address,address)[4])", + "value": [ + [ + [ + true, + "Moo é🚀o 🚀M🚀éMooM🚀 M🚀 é oo 🚀o MM🚀ooéooooMMééMo M", + "0x60F07A7c935BfAeDb233547b1191ddd5740EF1B6", + "0xb9f6c1e67f16872a61B6874578ed955A60d18Cb1" + ], + [ + false, + "Moo é🚀 🚀Mo🚀MoMé🚀 é o🚀o🚀🚀 éM🚀éoM🚀Mééo🚀 ooo ooo🚀 oé éé", + "0x737eAF3a4E226642c88F46E50007f7F21c5944bE", + "0x584CC690836b89EeCD0ce94b3a1Ff8b61F49c519" + ], + [ + false, + "Moo é🚀éooMooé🚀🚀M 🚀", + "0x74A5278b39A53B65C20fD40a188fa61EBdEfdDC7", + "0x63354E8F83ec2613B1bFB4532F80a888087B0339" + ], + [ + false, + "Moo é🚀🚀 ooM🚀 o🚀o 🚀 Moééoo é🚀🚀 ooéo🚀🚀éoo🚀🚀 Méoo🚀", + "0x5B4D64DC721ac8EDDa04A2f6c0D31C935822ac5c", + "0x994fE0Ee1cBd66827971190CFf475dE91C2D6982" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀o 🚀M🚀éMooM🚀 M🚀 é oo 🚀o MM🚀ooéooooMMééMo M" + }, + { + "type": "address", + "value": "0x60F07A7c935BfAeDb233547b1191ddd5740EF1B6" + }, + { + "type": "address", + "value": "0xb9f6c1e67f16872a61B6874578ed955A60d18Cb1" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀 🚀Mo🚀MoMé🚀 é o🚀o🚀🚀 éM🚀éoM🚀Mééo🚀 ooo ooo🚀 oé éé" + }, + { + "type": "address", + "value": "0x737eAF3a4E226642c88F46E50007f7F21c5944bE" + }, + { + "type": "address", + "value": "0x584CC690836b89EeCD0ce94b3a1Ff8b61F49c519" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀éooMooé🚀🚀M 🚀" + }, + { + "type": "address", + "value": "0x74A5278b39A53B65C20fD40a188fa61EBdEfdDC7" + }, + { + "type": "address", + "value": "0x63354E8F83ec2613B1bFB4532F80a888087B0339" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀🚀 ooM🚀 o🚀o 🚀 Moééoo é🚀🚀 ooéo🚀🚀éoo🚀🚀 Méoo🚀" + }, + { + "type": "address", + "value": "0x5B4D64DC721ac8EDDa04A2f6c0D31C935822ac5c" + }, + { + "type": "address", + "value": "0x994fE0Ee1cBd66827971190CFf475dE91C2D6982" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610528806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102f0565b60405180910390f35b610056610292565b61005e610292565b6100666102aa565b6040805160808082018352606060208084018290526000848601819052918401829052600184528451928301909452604a808352929390929061044b908301396020830152507360f07a7c935bfaedb233547b1191ddd5740ef1b6604082015273b9f6c1e67f16872a61b6874578ed955a60d18cb16060820152808260006020020152506101156040805160808101825260008082526060602083018190529282018190529181019190915290565b6000808252604080516080810190915260608082526103ca602083013960208301525073737eaf3a4e226642c88f46e50007f7f21c5944be604082015273584cc690836b89eecd0ce94b3a1ff8b61f49c5196060820152808260016020020152506101a16040805160808101825260008082526060602083018190529282018190529181019190915290565b60008082526040805160608101909152602180825261042a60208301396020830152507374a5278b39a53b65c20fd40a188fa61ebdefddc760408201527363354e8f83ec2613b1bfb4532f80a888087b033960608201528082600260200201525061022d6040805160808101825260008082526060602083018190529282018190529181019190915290565b60008082526040805160808101909152605e8082526104956020830139602083015250735b4d64dc721ac8edda04a2f6c0d31c935822ac5c604082015273994fe0ee1cbd66827971190cff475de91c2d69826060808301919091528201528152919050565b60405180602001604052806102a56102aa565b905290565b60405180608001604052806004905b6040805160808101825260008082526060602080840182905293830182905282015282526000199092019101816102b95790505090565b602080825282518282018290526000919060409060c085019082860185805b60048110156103bb57603f198986030183528351608081511515875288820151818a890152805180838a01528592505b8083101561035d578183018b015189840160a00152918a019161033f565b8083111561036e578560a0828b0101525b838a01516001600160a01b0381168a8c015292506060938401516001600160a01b0381168a860152939250601f01601f19169790970160a00196505050928601929186019160010161030f565b50929897505050505050505056fe4d6f6f20c3a9f09f9a8020f09f9a804d6ff09f9a804d6f4dc3a9f09f9a8020c3a9206ff09f9a806ff09f9a80f09f9a8020c3a94df09f9a80c3a96f4df09f9a804dc3a9c3a96ff09f9a80206f6f6f20206f6f6ff09f9a80206fc3a920c3a9c3a94d6f6f20c3a9f09f9a80c3a96f6f4d6f6fc3a9f09f9a80f09f9a804d20f09f9a804d6f6f20c3a9f09f9a806f20f09f9a804df09f9a80c3a94d6f6f4df09f9a80204df09f9a8020c3a9206f6f20f09f9a806f204d4df09f9a806f6fc3a96f6f6f6f4d4dc3a9c3a94d6f204d4d6f6f20c3a9f09f9a80f09f9a8020206f6f4df09f9a80206ff09f9a806f20f09f9a80204d6fc3a9c3a96f6f20c3a9f09f9a80f09f9a802020206f6fc3a96ff09f9a80f09f9a80c3a96f6ff09f9a80f09f9a8020204dc3a96f6ff09f9a80a264697066735822122053b2cb39bc660c835518e17f0f34b869a964c191e3a940cbdf508deaf3b652ee64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8aabdcec {\n bool s_0;\n string s_1;\n address s_2;\n address s_3;\n }\n\n struct S_29dcffb0 {\n S_8aabdcec[4] s_0;\n }\n\n function test () public pure returns (S_29dcffb0 memory) {\n S_29dcffb0 memory r;\n {\n S_8aabdcec[4] memory r_0;\n {\n S_8aabdcec memory r_0_0;\n {\n bool r_0_0_0 = true;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n string memory r_0_0_1 = unicode\"Moo é🚀o 🚀M🚀éMooM🚀 M🚀 é oo 🚀o MM🚀ooéooooMMééMo M\";\n r_0_0.s_1 = r_0_0_1;\n }\n {\n address r_0_0_2 = 0x60F07A7c935BfAeDb233547b1191ddd5740EF1B6;\n r_0_0.s_2 = r_0_0_2;\n }\n {\n address r_0_0_3 = 0xb9f6c1e67f16872a61B6874578ed955A60d18Cb1;\n r_0_0.s_3 = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n S_8aabdcec memory r_0_1;\n {\n bool r_0_1_0 = false;\n r_0_1.s_0 = r_0_1_0;\n }\n {\n string memory r_0_1_1 = unicode\"Moo é🚀 🚀Mo🚀MoMé🚀 é o🚀o🚀🚀 éM🚀éoM🚀Mééo🚀 ooo ooo🚀 oé éé\";\n r_0_1.s_1 = r_0_1_1;\n }\n {\n address r_0_1_2 = 0x737eAF3a4E226642c88F46E50007f7F21c5944bE;\n r_0_1.s_2 = r_0_1_2;\n }\n {\n address r_0_1_3 = 0x584CC690836b89EeCD0ce94b3a1Ff8b61F49c519;\n r_0_1.s_3 = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n {\n S_8aabdcec memory r_0_2;\n {\n bool r_0_2_0 = false;\n r_0_2.s_0 = r_0_2_0;\n }\n {\n string memory r_0_2_1 = unicode\"Moo é🚀éooMooé🚀🚀M 🚀\";\n r_0_2.s_1 = r_0_2_1;\n }\n {\n address r_0_2_2 = 0x74A5278b39A53B65C20fD40a188fa61EBdEfdDC7;\n r_0_2.s_2 = r_0_2_2;\n }\n {\n address r_0_2_3 = 0x63354E8F83ec2613B1bFB4532F80a888087B0339;\n r_0_2.s_3 = r_0_2_3;\n }\n r_0[2] = r_0_2;\n }\n {\n S_8aabdcec memory r_0_3;\n {\n bool r_0_3_0 = false;\n r_0_3.s_0 = r_0_3_0;\n }\n {\n string memory r_0_3_1 = unicode\"Moo é🚀🚀 ooM🚀 o🚀o 🚀 Moééoo é🚀🚀 ooéo🚀🚀éoo🚀🚀 Méoo🚀\";\n r_0_3.s_1 = r_0_3_1;\n }\n {\n address r_0_3_2 = 0x5B4D64DC721ac8EDDa04A2f6c0D31C935822ac5c;\n r_0_3.s_2 = r_0_3_2;\n }\n {\n address r_0_3_3 = 0x994fE0Ee1cBd66827971190CFf475dE91C2D6982;\n r_0_3.s_3 = r_0_3_3;\n }\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000060f07a7c935bfaedb233547b1191ddd5740ef1b6000000000000000000000000b9f6c1e67f16872a61b6874578ed955a60d18cb1000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a806f20f09f9a804df09f9a80c3a94d6f6f4df09f9a80204df09f9a8020c3a9206f6f20f09f9a806f204d4df09f9a806f6fc3a96f6f6f6f4d4dc3a9c3a94d6f204d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000737eaf3a4e226642c88f46e50007f7f21c5944be000000000000000000000000584cc690836b89eecd0ce94b3a1ff8b61f49c51900000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a8020f09f9a804d6ff09f9a804d6f4dc3a9f09f9a8020c3a9206ff09f9a806ff09f9a80f09f9a8020c3a94df09f9a80c3a96f4df09f9a804dc3a9c3a96ff09f9a80206f6f6f20206f6f6ff09f9a80206fc3a920c3a9c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000074a5278b39a53b65c20fd40a188fa61ebdefddc700000000000000000000000063354e8f83ec2613b1bfb4532f80a888087b033900000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a80c3a96f6f4d6f6fc3a9f09f9a80f09f9a804d20f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000005b4d64dc721ac8edda04a2f6c0d31c935822ac5c000000000000000000000000994fe0ee1cbd66827971190cff475de91c2d6982000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a80f09f9a8020206f6f4df09f9a80206ff09f9a806f20f09f9a80204d6fc3a9c3a96f6f20c3a9f09f9a80f09f9a802020206f6fc3a96ff09f9a80f09f9a80c3a96f6ff09f9a80f09f9a8020204dc3a96f6ff09f9a800000" + }, + { + "name": "random-((bytes13,uint256),address,address,bool)", + "type": "((bytes13,uint256),address,address,bool)", + "value": [ + [ + "0xcd7f6a22cd0f7d9424ad45e337", + "63966365856958473304615365903717226686911980329353332296759373167177430721807" + ], + "0x91A7eDfD382f73D2B522008e8b0c2A6f14713660", + "0x24F667C505AdD4A3457fdA01047e287f93Be6790", + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xcd7f6a22cd0f7d9424ad45e337" + }, + { + "type": "number", + "value": "63966365856958473304615365903717226686911980329353332296759373167177430721807" + } + ] + }, + { + "type": "address", + "value": "0x91A7eDfD382f73D2B522008e8b0c2A6f14713660" + }, + { + "type": "address", + "value": "0x24F667C505AdD4A3457fdA01047e287f93Be6790" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061018b8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160c080820183526000608080840182815260a0808601849052908552602080860184905285870184905260609586018490528651948501875284830184815285830185905285528481018481528588018581528688019586528851808a018a526ccd7f6a22cd0f7d9424ad45e33760981b81527f8d6bae18bcce44298d06333a0bbbe5b7fa5fc1af6b92e1c9fe92766dc313e50f818501908152978190527391a7edfd382f73d2b522008e8b0c2a6f1471366083527324f667c505add4a3457fda01047e287f93be67908252600187528951905172ffffffffffffffffffffffffffffffffffffff19168152965192870192909252516001600160a01b03908116868901529051169484019490945290511515908201529151918290030190f3fea2646970667358221220bb940bfc8a9dcb6eb6c1b77037b663f575723ae4e05faa41f0de20dcb588317d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_029d0978 {\n bytes13 s_0;\n uint256 s_1;\n }\n\n struct S_ec5d31c3 {\n S_029d0978 s_0;\n address s_1;\n address s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_ec5d31c3 memory) {\n S_ec5d31c3 memory r;\n {\n S_029d0978 memory r_0;\n {\n bytes13 r_0_0 = bytes13(0xcd7f6a22cd0f7d9424ad45e337);\n r_0.s_0 = r_0_0;\n }\n {\n uint256 r_0_1 = 63966365856958473304615365903717226686911980329353332296759373167177430721807;\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x91A7eDfD382f73D2B522008e8b0c2A6f14713660;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x24F667C505AdD4A3457fdA01047e287f93Be6790;\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0xcd7f6a22cd0f7d9424ad45e337000000000000000000000000000000000000008d6bae18bcce44298d06333a0bbbe5b7fa5fc1af6b92e1c9fe92766dc313e50f00000000000000000000000091a7edfd382f73d2b522008e8b0c2a6f1471366000000000000000000000000024f667c505add4a3457fda01047e287f93be67900000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-((bytes22,bool,int232,string,bytes6))", + "type": "((bytes22,bool,int232,string,bytes6))", + "value": [ + [ + "0x2a1b4ab0e1caca5feebc4901cfdcd262607b4f303d7c", + true, + "1988457561416589407512412632101673342788148023163537185187473900067525", + "Moo é🚀M Mo🚀🚀 é éo MéM oooo ooo🚀o M🚀 o o éM🚀oM éoéoM", + "0x8a4a9af37a1a" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x2a1b4ab0e1caca5feebc4901cfdcd262607b4f303d7c" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "1988457561416589407512412632101673342788148023163537185187473900067525" + }, + { + "type": "string", + "value": "Moo é🚀M Mo🚀🚀 é éo MéM oooo ooo🚀o M🚀 o o éM🚀oM éoéoM" + }, + { + "type": "hexstring", + "value": "0x8a4a9af37a1a" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610276806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610143565b60405180910390f35b6040805160c0810182526000602082018181529282018190526060808301829052608083015260a08201529081526040805160c0810182526000602082018181529282018190526060808301829052608083015260a08201529081526040805160a08101825260608082015260006080808301829052750a86d2ac3872b297fbaf124073f73498981ed3cc0f5f60521b835260016020808501919091527c49c18892684b022aa825927bff94a09e349760a97a0239f966364e5ac5848601528451918201909452604d8082529293919290916101f4908301396060830152506545254d79bd0d60d11b60808201528152919050565b600060208083528351818285015269ffffffffffffffffffff19815116604085015281810151151560608501526040810151601c0b6080850152606081015160a08086015280518060e087015260005b818110156101b05782810185015187820161010001528401610193565b818111156101c357600061010083890101525b5060808301516001600160d01b0319811660c08801529350601f01601f191694909401610100019594505050505056fe4d6f6f20c3a9f09f9a804d204d6ff09f9a80f09f9a8020c3a920c3a96f204dc3a94d206f6f6f6f206f6f6ff09f9a806f204df09f9a80206f20206f20c3a94df09f9a806f4d20c3a96fc3a96f4da2646970667358221220e39a00ae162dd41a089f080f98cf1d229afa63d1bbb3f1e55409f81b8e10f77d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a465fe84 {\n bytes22 s_0;\n bool s_1;\n int232 s_2;\n string s_3;\n bytes6 s_4;\n }\n\n struct S_e754ebcc {\n S_a465fe84 s_0;\n }\n\n function test () public pure returns (S_e754ebcc memory) {\n S_e754ebcc memory r;\n {\n S_a465fe84 memory r_0;\n {\n bytes22 r_0_0 = bytes22(0x2a1b4ab0e1caca5feebc4901cfdcd262607b4f303d7c);\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0.s_1 = r_0_1;\n }\n {\n int232 r_0_2 = 1988457561416589407512412632101673342788148023163537185187473900067525;\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀M Mo🚀🚀 é éo MéM oooo ooo🚀o M🚀 o o éM🚀oM éoéoM\";\n r_0.s_3 = r_0_3;\n }\n {\n bytes6 r_0_4 = bytes6(0x8a4a9af37a1a);\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000202a1b4ab0e1caca5feebc4901cfdcd262607b4f303d7c00000000000000000000000000000000000000000000000000000000000000000000000000000000000100000049c18892684b022aa825927bff94a09e349760a97a0239f966364e5ac500000000000000000000000000000000000000000000000000000000000000a08a4a9af37a1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a804d204d6ff09f9a80f09f9a8020c3a920c3a96f204dc3a94d206f6f6f6f206f6f6ff09f9a806f204df09f9a80206f20206f20c3a94df09f9a806f4d20c3a96fc3a96f4d00000000000000000000000000000000000000" + }, + { + "name": "random-((bytes27,int144,address),bytes6[3])", + "type": "((bytes27,int144,address),bytes6[3])", + "value": [ + [ + "0xf68b6af1b8146b6e6f89af88b735855732a44863c26b7b56a39ffe", + "1945763548707736174787647123820377399685137", + "0x7877A855f7995df54967728EB15bdf865dB34a84" + ], + ["0x3abf27d40bf7", "0xf0e99e41567a", "0x81d4e1fa9357"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf68b6af1b8146b6e6f89af88b735855732a44863c26b7b56a39ffe" + }, + { + "type": "number", + "value": "1945763548707736174787647123820377399685137" + }, + { + "type": "address", + "value": "0x7877A855f7995df54967728EB15bdf865dB34a84" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3abf27d40bf7" + }, + { + "type": "hexstring", + "value": "0xf0e99e41567a" + }, + { + "type": "hexstring", + "value": "0x81d4e1fa9357" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101fa806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610152565b60405180910390f35b6100566100ff565b61005e6100ff565b604080516060810182527ff68b6af1b8146b6e6f89af88b735855732a44863c26b7b56a39ffe0000000000815271165615cc50ba20fd63030bcc0c76cc78f0116020820152737877a855f7995df54967728eb15bdf865db34a849181019190915281526100c9610134565b653abf27d40bf760d01b8152657874cf20ab3d60d11b6020808301919091526581d4e1fa935760d01b6040830152820152919050565b6040805160a08101825260009181018281526060820183905260808201929092529081526020810161012f610134565b905290565b60405180606001604052806003906020820280368337509192915050565b8151805164ffffffffff1916825260208082015160110b818401526040918201516001600160a01b0316918301919091528083015160c08301916060840160005b60038110156101ba5783516001600160d01b03191682529282019290820190600101610193565b505050509291505056fea2646970667358221220ccd8747db854bec0924273ae14ab71b8b77e961d3d78187cd296d49d16d61ede64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d157d0b1 {\n bytes27 s_0;\n int144 s_1;\n address s_2;\n }\n\n struct S_66e2cfc5 {\n S_d157d0b1 s_0;\n bytes6[3] s_1;\n }\n\n function test () public pure returns (S_66e2cfc5 memory) {\n S_66e2cfc5 memory r;\n {\n S_d157d0b1 memory r_0;\n {\n bytes27 r_0_0 = bytes27(0xf68b6af1b8146b6e6f89af88b735855732a44863c26b7b56a39ffe);\n r_0.s_0 = r_0_0;\n }\n {\n int144 r_0_1 = 1945763548707736174787647123820377399685137;\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0x7877A855f7995df54967728EB15bdf865dB34a84;\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n bytes6[3] memory r_1;\n {\n bytes6 r_1_0 = bytes6(0x3abf27d40bf7);\n r_1[0] = r_1_0;\n }\n {\n bytes6 r_1_1 = bytes6(0xf0e99e41567a);\n r_1[1] = r_1_1;\n }\n {\n bytes6 r_1_2 = bytes6(0x81d4e1fa9357);\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0xf68b6af1b8146b6e6f89af88b735855732a44863c26b7b56a39ffe00000000000000000000000000000000000000165615cc50ba20fd63030bcc0c76cc78f0110000000000000000000000007877a855f7995df54967728eb15bdf865db34a843abf27d40bf70000000000000000000000000000000000000000000000000000f0e99e41567a000000000000000000000000000000000000000000000000000081d4e1fa93570000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((bytes5,int48),(address,string,string))", + "type": "((bytes5,int48),(address,string,string))", + "value": [ + ["0xa83a386bf6", "-85828944472100"], + ["0xA7b147b8100dE466950561886161ed8FeFcfaCA7", "Moo é🚀oM🚀 oéo", "Moo é🚀🚀éoéMMM"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa83a386bf6" + }, + { + "type": "number", + "value": "-85828944472100" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xA7b147b8100dE466950561886161ed8FeFcfaCA7" + }, + { + "type": "string", + "value": "Moo é🚀oM🚀 oéo" + }, + { + "type": "string", + "value": "Moo é🚀🚀éoéMMM" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061025d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b60408051608080820183526000828401818152606080850183905290845284518082018652828152602080820183905281870183905294850152845192830185528285018281528382018390528352845180820186529182528184018190528185018190528284019182528451808601865264541d1c35fb60d91b8152654e0f9bbf2823198186015283528451808201865280850182815281870192835273a7b147b8100de466950561886161ed8fefcfaca782528651808801885260158152744d6f6f20c3a9f09f9a806f4df09f9a80206fc3a96f60581b818801529052855180870190965260168652754d6f6f20c3a9f09f9a80f09f9a80c3a96fc3a94d4d4d60501b9486019490945293909352915260405161014f91906101a5565b60405180910390f35b6000815180845260005b8181101561017e57602081850181015186830182015201610162565b81811115610190576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825180516001600160d81b0319168383015281015160050b604083015282810151606080840181905281516001600160a01b031660808501529181015160a08401929092526000916101ff60e0850182610158565b905060408201519150607f198482030160c085015261021e8183610158565b9594505050505056fea2646970667358221220c8e78b101f32598112db6390fe0c5794526272519ed99f4308aa2383b5a8b85c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2193087f {\n bytes5 s_0;\n int48 s_1;\n }\n\n struct S_23fa3048 {\n address s_0;\n string s_1;\n string s_2;\n }\n\n struct S_f5018d24 {\n S_2193087f s_0;\n S_23fa3048 s_1;\n }\n\n function test () public pure returns (S_f5018d24 memory) {\n S_f5018d24 memory r;\n {\n S_2193087f memory r_0;\n {\n bytes5 r_0_0 = bytes5(0xa83a386bf6);\n r_0.s_0 = r_0_0;\n }\n {\n int48 r_0_1 = -85828944472100;\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n S_23fa3048 memory r_1;\n {\n address r_1_0 = 0xA7b147b8100dE466950561886161ed8FeFcfaCA7;\n r_1.s_0 = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀oM🚀 oéo\";\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀🚀éoéMMM\";\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020a83a386bf6000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffb1f06440d7dc0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000a7b147b8100de466950561886161ed8fefcfaca7000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a806f4df09f9a80206fc3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a80f09f9a80c3a96fc3a94d4d4d00000000000000000000" + }, + { + "name": "random-((string,bool,uint),string,int24)", + "type": "((string,bool,uint),string,int24)", + "value": [ + [ + "Moo é🚀ééoé🚀oM🚀🚀M🚀éoéooooo Mo o Mo🚀Mo🚀M🚀🚀MéoM o🚀é é ", + false, + "19269444228524706621421412646797229491107099261458939473323542595229312890144" + ], + "Moo é🚀o o o🚀🚀Mééé🚀M🚀oMMo Mé🚀🚀oM éo oM oéoMoo🚀Mo oooMé🚀 éM ", + "-3562045" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ééoé🚀oM🚀🚀M🚀éoéooooo Mo o Mo🚀Mo🚀M🚀🚀MéoM o🚀é é " + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "19269444228524706621421412646797229491107099261458939473323542595229312890144" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o o o🚀🚀Mééé🚀M🚀oMMo Mé🚀🚀oM éo oM oéoMoo🚀Mo oooMé🚀 éM " + }, + { + "type": "number", + "value": "-3562045" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061031c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101b8565b60405180910390f35b6100886040805160c08101909152606080820190815260006080830181905260a08301528190815260606020820152600060409091015290565b6100c26040805160c08101909152606080820190815260006080830181905260a08301528190815260606020820152600060409091015290565b6100e8604051806060016040528060608152602001600015158152602001600081525090565b60006040518060800160405280605a815260200161022d605a9139825250600060208083018290527f2a9a1e728718b50ebd05dc549a47b95157c3a11e83bf523c478f9b36dfd035206040808501919091529284528251608081019093526060808452919291906102879083013960208301525062365a3c196040820152919050565b6000815180845260005b8181101561019157602081850181015186830182015201610175565b818111156101a3576000602083870101525b50601f01601f19169290920160200192915050565b6020815260008251606060208401528051606060808501526101dd60e085018261016b565b90506020820151151560a0850152604082015160c085015260208501519150601f19848203016040850152610212818361016b565b915050604084015160020b6060840152809150509291505056fe4d6f6f20c3a9f09f9a80c3a9c3a96fc3a9f09f9a806f4df09f9a80f09f9a804df09f9a80c3a96fc3a96f6f6f6f6f204d6f206f204d6ff09f9a804d6ff09f9a804df09f9a80f09f9a804dc3a96f4d206ff09f9a80c3a920c3a9204d6f6f20c3a9f09f9a806f206f206ff09f9a80f09f9a804dc3a9c3a9c3a9f09f9a804df09f9a806f4d4d6f204dc3a9f09f9a80f09f9a806f4d202020c3a96f206f4d206fc3a96f4d6f6ff09f9a804d6f206f6f6f4dc3a9f09f9a8020c3a94d20a26469706673582212200e527da2ffababfcc6addd24911dddfaa104a98aa20c33617dd7ff30b6fa671e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1678058e {\n string s_0;\n bool s_1;\n uint256 s_2;\n }\n\n struct S_b0b571e8 {\n S_1678058e s_0;\n string s_1;\n int24 s_2;\n }\n\n function test () public pure returns (S_b0b571e8 memory) {\n S_b0b571e8 memory r;\n {\n S_1678058e memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀ééoé🚀oM🚀🚀M🚀éoéooooo Mo o Mo🚀Mo🚀M🚀🚀MéoM o🚀é é \";\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n {\n uint r_0_2 = 19269444228524706621421412646797229491107099261458939473323542595229312890144;\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀o o o🚀🚀Mééé🚀M🚀oMMo Mé🚀🚀oM éo oM oéoMoo🚀Mo oooMé🚀 éM \";\n r.s_1 = r_1;\n }\n {\n int24 r_2 = -3562045;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a5c3000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000002a9a1e728718b50ebd05dc549a47b95157c3a11e83bf523c478f9b36dfd03520000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a80c3a9c3a96fc3a9f09f9a806f4df09f9a80f09f9a804df09f9a80c3a96fc3a96f6f6f6f6f204d6f206f204d6ff09f9a804d6ff09f9a804df09f9a80f09f9a804dc3a96f4d206ff09f9a80c3a920c3a92000000000000000000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a806f206f206ff09f9a80f09f9a804dc3a9c3a9c3a9f09f9a804df09f9a806f4d4d6f204dc3a9f09f9a80f09f9a806f4d202020c3a96f206f4d206fc3a96f4d6f6ff09f9a804d6f206f6f6f4dc3a9f09f9a8020c3a94d20" + }, + { + "name": "random-((string),((bytes26),address),string[])", + "type": "((string),((bytes26),address),string[])", + "value": [ + ["Moo é🚀éooo🚀🚀🚀 🚀oM🚀🚀oo🚀éoéM Mo🚀o🚀éo🚀éo MéMM o🚀o oéMo🚀éoM"], + [ + ["0x22fdfff55c37d7c1368f741a6cf21c0c3e162859c80c62ea50a0"], + "0x9b420c708F63aF89F49dA4E4E0f52290e2dd0892" + ], + [ + "Moo é🚀oM éMo🚀 🚀🚀o🚀Mo🚀é🚀o🚀oooMoMo oooé🚀éo", + "Moo é🚀🚀oooM o🚀🚀🚀oéoo🚀o🚀o oéooMMo ééM 🚀é M🚀oé o🚀o éé 🚀 o🚀oMMMM", + "Moo é🚀é🚀M🚀ooMé🚀ooM o", + "Moo é🚀éo🚀 o é🚀oo oooo o ooM" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éooo🚀🚀🚀 🚀oM🚀🚀oo🚀éoéM Mo🚀o🚀éo🚀éo MéMM o🚀o oéMo🚀éoM" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x22fdfff55c37d7c1368f741a6cf21c0c3e162859c80c62ea50a0" + } + ] + }, + { + "type": "address", + "value": "0x9b420c708F63aF89F49dA4E4E0f52290e2dd0892" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM éMo🚀 🚀🚀o🚀Mo🚀é🚀o🚀oooMoMo oooé🚀éo" + }, + { + "type": "string", + "value": "Moo é🚀🚀oooM o🚀🚀🚀oéoo🚀o🚀o oéooMMo ééM 🚀é M🚀oé o🚀o éé 🚀 o🚀oMMMM" + }, + { + "type": "string", + "value": "Moo é🚀é🚀M🚀ooMé🚀ooM o" + }, + { + "type": "string", + "value": "Moo é🚀éo🚀 o é🚀oo oooo o ooM" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061051c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102b2565b60405180910390f35b61005661021d565b61005e61021d565b60408051602081019091526060815260006040518060a001604052806068815260200161047f60689139825250815260408051606081018252600081830181815282526020808301828152845180830186527f22fdfff55c37d7c1368f741a6cf21c0c3e162859c80c62ea50a000000000000081528452739b420c708f63af89f49da4e4e0f52290e2dd08929052808501929092528251600480825260a082019094529092909182015b6060815260200190600190039081610108579050509050600060405180608001604052806048815260200161038160489139905080826000815181106101505761015061036a565b60200260200101819052505060006040518060a00160405280606b8152602001610414606b91399050808260018151811061018d5761018d61036a565b60200260200101819052505060006040518060600160405280602481526020016103c960249139905080826002815181106101ca576101ca61036a565b60200260200101819052505060006040518060600160405280602781526020016103ed60279139905080826003815181106102075761020761036a565b6020908102919091010152506040820152919050565b604080516080810190915260608082019081528152602081016102586040805160608101825260009181018281528152602081019190915290565b8152602001606081525090565b6000815180845260005b8181101561028b5760208185018101518683018201520161026f565b8181111561029d576000602083870101525b50601f01601f19169290920160200192915050565b600060208083528351608082850152805190508160a08501526102d860c0850182610265565b8583015180515165ffffffffffff1916604087810191909152908401516001600160a01b03166060870152860151858203601f19908101608088015281518084529293509084019184840190600581901b8501860160005b8281101561035c578487830301845261034a828751610265565b95880195938801939150600101610330565b509998505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f4d20c3a94d6ff09f9a8020f09f9a80f09f9a806ff09f9a804d6ff09f9a80c3a9f09f9a806ff09f9a806f6f6f4d6f4d6f206f6f6fc3a9f09f9a80c3a96f4d6f6f20c3a9f09f9a80c3a9f09f9a804df09f9a806f6f4dc3a9f09f9a806f6f4d20206f4d6f6f20c3a9f09f9a80c3a96ff09f9a80206f20c3a9f09f9a806f6f206f6f6f6f206f206f6f4d4d6f6f20c3a9f09f9a80f09f9a806f6f6f4d206ff09f9a80f09f9a80f09f9a806fc3a96f6ff09f9a806ff09f9a806f206fc3a96f6f4d4d6f20c3a9c3a94d20f09f9a80c3a920204df09f9a806fc3a9206ff09f9a806f20c3a9c3a920f09f9a80206ff09f9a806f4d4d4d4d4d6f6f20c3a9f09f9a80c3a96f6f6ff09f9a80f09f9a80f09f9a8020f09f9a806f4df09f9a80f09f9a806f6ff09f9a80c3a96fc3a94d204d6ff09f9a806ff09f9a80c3a96ff09f9a80c3a96f204dc3a94d4d20206ff09f9a806f206fc3a94d6ff09f9a80c3a96f4da2646970667358221220b1c10580c01c347dad94361768b86127b893a180f301521dab7fed7a6124acbe64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_da4d5856 {\n bytes26 s_0;\n }\n\n struct S_664f6fdc {\n S_da4d5856 s_0;\n address s_1;\n }\n\n struct S_7c0ce60f {\n S_97fc4627 s_0;\n S_664f6fdc s_1;\n string[] s_2;\n }\n\n function test () public pure returns (S_7c0ce60f memory) {\n S_7c0ce60f memory r;\n {\n S_97fc4627 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀éooo🚀🚀🚀 🚀oM🚀🚀oo🚀éoéM Mo🚀o🚀éo🚀éo MéMM o🚀o oéMo🚀éoM\";\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n S_664f6fdc memory r_1;\n {\n S_da4d5856 memory r_1_0;\n {\n bytes26 r_1_0_0 = bytes26(0x22fdfff55c37d7c1368f741a6cf21c0c3e162859c80c62ea50a0);\n r_1_0.s_0 = r_1_0_0;\n }\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0x9b420c708F63aF89F49dA4E4E0f52290e2dd0892;\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n string[] memory r_2 = new string[](4);\n {\n string memory r_2_0 = unicode\"Moo é🚀oM éMo🚀 🚀🚀o🚀Mo🚀é🚀o🚀oooMoMo oooé🚀éo\";\n r_2[0] = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀🚀oooM o🚀🚀🚀oéoo🚀o🚀o oéooMMo ééM 🚀é M🚀oé o🚀o éé 🚀 o🚀oMMMM\";\n r_2[1] = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀é🚀M🚀ooMé🚀ooM o\";\n r_2[2] = r_2_2;\n }\n {\n string memory r_2_3 = unicode\"Moo é🚀éo🚀 o é🚀oo oooo o ooM\";\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008022fdfff55c37d7c1368f741a6cf21c0c3e162859c80c62ea50a00000000000000000000000000000000000009b420c708f63af89f49da4e4e0f52290e2dd08920000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000684d6f6f20c3a9f09f9a80c3a96f6f6ff09f9a80f09f9a80f09f9a8020f09f9a806f4df09f9a80f09f9a806f6ff09f9a80c3a96fc3a94d204d6ff09f9a806ff09f9a80c3a96ff09f9a80c3a96f204dc3a94d4d20206ff09f9a806f206fc3a94d6ff09f9a80c3a96f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000484d6f6f20c3a9f09f9a806f4d20c3a94d6ff09f9a8020f09f9a80f09f9a806ff09f9a804d6ff09f9a80c3a9f09f9a806ff09f9a806f6f6f4d6f4d6f206f6f6fc3a9f09f9a80c3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006b4d6f6f20c3a9f09f9a80f09f9a806f6f6f4d206ff09f9a80f09f9a80f09f9a806fc3a96f6ff09f9a806ff09f9a806f206fc3a96f6f4d4d6f20c3a9c3a94d20f09f9a80c3a920204df09f9a806fc3a9206ff09f9a806f20c3a9c3a920f09f9a80206ff09f9a806f4d4d4d4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000244d6f6f20c3a9f09f9a80c3a9f09f9a804df09f9a806f6f4dc3a9f09f9a806f6f4d20206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a80c3a96ff09f9a80206f20c3a9f09f9a806f6f206f6f6f6f206f206f6f4d00000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((string),bool,address,bytes6,bytes31)", + "type": "((string),bool,address,bytes6,bytes31)", + "value": [ + ["Moo é🚀oo 🚀"], + false, + "0xA9B6C55EAf8835472FF0Ea4117BADabBEE3C672c", + "0x126fbd8ec381", + "0x49ba65e5e31fb5a8365077f63812ab658c0cb16eb2024a8b9d194217a77b4f" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo 🚀" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xA9B6C55EAf8835472FF0Ea4117BADabBEE3C672c" + }, + { + "type": "hexstring", + "value": "0x126fbd8ec381" + }, + { + "type": "hexstring", + "value": "0x49ba65e5e31fb5a8365077f63812ab658c0cb16eb2024a8b9d194217a77b4f" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061020e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160c08082018352606060a0808401828152845260006020808601829052858701829052838601829052608095860182905286519485018752918401838152845283820181815284870182815285850183815296860183815288518086018a529586528851808a018a52601181526f9adede418753e13f3500dede41e13f35607f1b958101959095529385529385525273a9b6c55eaf8835472ff0ea4117badabbee3c672c90915265126fbd8ec38160d01b9092527f49ba65e5e31fb5a8365077f63812ab658c0cb16eb2024a8b9d194217a77b4f0090915290516101189190610121565b60405180910390f35b60006020808352835160a082850152805190508160c085015280518060e086015260005b818110156101625782810184015186820161010001528301610145565b8181111561017557600061010083880101525b509185015180151560408601529160408601516001600160a01b0381166060870152925060608601516001600160d01b0319811660808701529250608086015160ff19811660a08701529250601f01601f1916939093016101000194935050505056fea264697066735822122099df388cdcfe01a8a911a4e352664d04f8e2e06340b7b1946a534b2f2c17890f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_0f10658f {\n S_97fc4627 s_0;\n bool s_1;\n address s_2;\n bytes6 s_3;\n bytes31 s_4;\n }\n\n function test () public pure returns (S_0f10658f memory) {\n S_0f10658f memory r;\n {\n S_97fc4627 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀oo 🚀\";\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xA9B6C55EAf8835472FF0Ea4117BADabBEE3C672c;\n r.s_2 = r_2;\n }\n {\n bytes6 r_3 = bytes6(0x126fbd8ec381);\n r.s_3 = r_3;\n }\n {\n bytes31 r_4 = bytes31(0x49ba65e5e31fb5a8365077f63812ab658c0cb16eb2024a8b9d194217a77b4f);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9b6c55eaf8835472ff0ea4117badabbee3c672c126fbd8ec381000000000000000000000000000000000000000000000000000049ba65e5e31fb5a8365077f63812ab658c0cb16eb2024a8b9d194217a77b4f00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a806f6f20f09f9a80000000000000000000000000000000" + }, + { + "name": "random-((uint56,string,address,bool),bool)", + "type": "((uint56,string,address,bool),bool)", + "value": [ + [ + "36772389621677102", + "Moo é🚀oo oo M oMéMéM🚀M🚀🚀oéoé", + "0xca1D9620BBF873aDceDE14f13FCCf2987aDcCdf9", + true + ], + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "36772389621677102" + }, + { + "type": "string", + "value": "Moo é🚀oo oo M oMéMéM🚀M🚀🚀oéoé" + }, + { + "type": "address", + "value": "0xca1D9620BBF873aDceDE14f13FCCf2987aDcCdf9" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610232806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061012b565b60405180910390f35b6040805160c08101825260009181018281526060808301526080820183905260a08201839052815260208101919091526040805160c08101825260009181018281526060808301526080820183905260a0820183905281526020810191909152604080516080810182526060602080830182905260008385018190528284018190526682a44b24f13c2e84528451928301909452602d808352929392906101d09083013960208084019190915273ca1d9620bbf873adcede14f13fccf2987adccdf960408401526001606084015291835250600090820152919050565b60006020808352835160408285015266ffffffffffffff81511660608501528181015160808086015280518060e087015260005b8181101561017c578281018501518782016101000152840161015f565b8181111561018f57600061010083890101525b506040838101516001600160a01b031660a0880152606090930151151560c087015295909201511515908401525050610100601f909201601f191601019056fe4d6f6f20c3a9f09f9a806f6f206f6f204d206f4dc3a94dc3a94df09f9a804df09f9a80f09f9a806fc3a96fc3a9a2646970667358221220f8f5e077574610b9705d1201e5823df24142b03abc1871985a378249c601a12d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9fc2c4c0 {\n uint56 s_0;\n string s_1;\n address s_2;\n bool s_3;\n }\n\n struct S_d37ec537 {\n S_9fc2c4c0 s_0;\n bool s_1;\n }\n\n function test () public pure returns (S_d37ec537 memory) {\n S_d37ec537 memory r;\n {\n S_9fc2c4c0 memory r_0;\n {\n uint56 r_0_0 = 36772389621677102;\n r_0.s_0 = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀oo oo M oMéMéM🚀M🚀🚀oéoé\";\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0xca1D9620BBF873aDceDE14f13FCCf2987aDcCdf9;\n r_0.s_2 = r_0_2;\n }\n {\n bool r_0_3 = true;\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082a44b24f13c2e0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000ca1d9620bbf873adcede14f13fccf2987adccdf90000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a806f6f206f6f204d206f4dc3a94dc3a94df09f9a804df09f9a80f09f9a806fc3a96fc3a900000000000000000000000000000000000000" + }, + { + "name": "random-(address,(bytes32,bytes17),bytes18,address)", + "type": "(address,(bytes32,bytes17),bytes18,address)", + "value": [ + "0x4aC2d0e11a359F65fC76527B5b57ea3587573F73", + [ + "0x8d18c4b2c5f5329e8dd6f6831d1c704a984cbf339843587c9bb2e24115d62964", + "0xf0c651b7db4ed1b79b285cce5fee5e8b25" + ], + "0x1e239d93e28c11e162a3b524a6a84f48103d", + "0xaF5a54BCf61404D7Da7432520E270020f00CF36D" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x4aC2d0e11a359F65fC76527B5b57ea3587573F73" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8d18c4b2c5f5329e8dd6f6831d1c704a984cbf339843587c9bb2e24115d62964" + }, + { + "type": "hexstring", + "value": "0xf0c651b7db4ed1b79b285cce5fee5e8b25" + } + ] + }, + { + "type": "hexstring", + "value": "0x1e239d93e28c11e162a3b524a6a84f48103d" + }, + { + "type": "address", + "value": "0xaF5a54BCf61404D7Da7432520E270020f00CF36D" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101b48061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b604080516080808201835260008083528351808501855281815260208082018390528085019190915283850182905260609384018290528451808401865282815285518087018752838152808301849052818301908152818701848152828701948552734ac2d0e11a359f65fc76527b5b57ea3587573f738352875180890189527f8d18c4b2c5f5329e8dd6f6831d1c704a984cbf339843587c9bb2e24115d62964815270f0c651b7db4ed1b79b285cce5fee5e8b2560781b818601528252711e239d93e28c11e162a3b524a6a84f48103d60701b815273af5a54bcf61404d7da7432520e270020f00cf36d8552875192516001600160a01b0390811684529151805184860152909301516effffffffffffffffffffffffffffff19168288015291516dffffffffffffffffffffffffffff1916948101949094529051169082015290519081900360a00190f3fea2646970667358221220f1b986ca03849ed0cff88bc7c26981ac8d7b15cf5bc8eb4edbf932e99be087d564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e8187cd6 {\n bytes32 s_0;\n bytes17 s_1;\n }\n\n struct S_1547bb5e {\n address s_0;\n S_e8187cd6 s_1;\n bytes18 s_2;\n address s_3;\n }\n\n function test () public pure returns (S_1547bb5e memory) {\n S_1547bb5e memory r;\n {\n address r_0 = 0x4aC2d0e11a359F65fC76527B5b57ea3587573F73;\n r.s_0 = r_0;\n }\n {\n S_e8187cd6 memory r_1;\n {\n bytes32 r_1_0 = bytes32(0x8d18c4b2c5f5329e8dd6f6831d1c704a984cbf339843587c9bb2e24115d62964);\n r_1.s_0 = r_1_0;\n }\n {\n bytes17 r_1_1 = bytes17(0xf0c651b7db4ed1b79b285cce5fee5e8b25);\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n bytes18 r_2 = bytes18(0x1e239d93e28c11e162a3b524a6a84f48103d);\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xaF5a54BCf61404D7Da7432520E270020f00CF36D;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000004ac2d0e11a359f65fc76527b5b57ea3587573f738d18c4b2c5f5329e8dd6f6831d1c704a984cbf339843587c9bb2e24115d62964f0c651b7db4ed1b79b285cce5fee5e8b250000000000000000000000000000001e239d93e28c11e162a3b524a6a84f48103d0000000000000000000000000000000000000000000000000000af5a54bcf61404d7da7432520e270020f00cf36d" + }, + { + "name": "random-(address,(string,bool,bytes28),address)", + "type": "(address,(string,bool,bytes28),address)", + "value": [ + "0xF183C15d17b89eF02462E73a587cBB20AbffFF3B", + ["Moo é🚀oM é", false, "0x33f72a6e8cb48cf6c90c10e38142c4f192fbb368907dcc990b93554c"], + "0x57ACA9FaD3793cCD1053dD65017936445986A491" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xF183C15d17b89eF02462E73a587cBB20AbffFF3B" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM é" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x33f72a6e8cb48cf6c90c10e38142c4f192fbb368907dcc990b93554c" + } + ] + }, + { + "type": "address", + "value": "0x57ACA9FaD3793cCD1053dD65017936445986A491" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610242806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610164565b60405180910390f35b610089604080516060808201835260008083528351808301855291825260208281018290529382015290918201908152600060209091015290565b6100c4604080516060808201835260008083528351808301855291825260208281018290529382015290918201908152600060209091015290565b73f183c15d17b89ef02462e73a587cbb20abffff3b8152604080516060808201835281526000602080830182815283850183815285518087018752600f81526e4d6f6f20c3a9f09f9a806f4d20c3a960881b8185015285529290527f33f72a6e8cb48cf6c90c10e38142c4f192fbb368907dcc990b93554c000000009091528301527357aca9fad3793ccd1053dd65017936445986a49190820152919050565b6000602080835260018060a01b0384511681840152808401516060604085015280516060608086015280518060e087015260005b818110156101b55782810185015187820161010001528401610198565b818111156101c857600061010083890101525b5092820151151560a08601525060409081015163ffffffff191660c085015293909301516001600160a01b0316606083015250610100601f909201601f191601019056fea2646970667358221220fd7eb7b08724545b41d72013bfd7823da7a6583115a5d66b1606bf9fe471d28c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_bc210580 {\n string s_0;\n bool s_1;\n bytes28 s_2;\n }\n\n struct S_8fb2d1d1 {\n address s_0;\n S_bc210580 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_8fb2d1d1 memory) {\n S_8fb2d1d1 memory r;\n {\n address r_0 = 0xF183C15d17b89eF02462E73a587cBB20AbffFF3B;\n r.s_0 = r_0;\n }\n {\n S_bc210580 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀oM é\";\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1.s_1 = r_1_1;\n }\n {\n bytes28 r_1_2 = bytes28(0x33f72a6e8cb48cf6c90c10e38142c4f192fbb368907dcc990b93554c);\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x57ACA9FaD3793cCD1053dD65017936445986A491;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f183c15d17b89ef02462e73a587cbb20abffff3b000000000000000000000000000000000000000000000000000000000000006000000000000000000000000057aca9fad3793ccd1053dd65017936445986a4910000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000033f72a6e8cb48cf6c90c10e38142c4f192fbb368907dcc990b93554c00000000000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a806f4d20c3a90000000000000000000000000000000000" + }, + { + "name": "random-(address,address,address,int40,uint)", + "type": "(address,address,address,int40,uint)", + "value": [ + "0x685E81B6e56f7fcA8C8Cb81398E96bC58DF917c0", + "0x08ee1D70Da9cbbb0a69249503C3Cf25cC20c3cCf", + "0x98857FFF3613B4F38826b7932d8CbA5afeFdc028", + "428693571068", + "110783680411565232822093917905364456864025309747620875461499404612573358527420" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x685E81B6e56f7fcA8C8Cb81398E96bC58DF917c0" + }, + { + "type": "address", + "value": "0x08ee1D70Da9cbbb0a69249503C3Cf25cC20c3cCf" + }, + { + "type": "address", + "value": "0x98857FFF3613B4F38826b7932d8CbA5afeFdc028" + }, + { + "type": "number", + "value": "428693571068" + }, + { + "type": "number", + "value": "110783680411565232822093917905364456864025309747620875461499404612573358527420" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061015f8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160a080820183526000808352602080840182905283850182905260608085018390526080948501929092528451808401865273685e81b6e56f7fca8c8cb81398e96bc58df917c08082527308ee1d70da9cbbb0a69249503c3cf25cc20c3ccf8284019081527398857fff3613b4f38826b7932d8cba5afefdc0288389019081526463d020c5fc8487019081527ff4ed574fc89ed5e6960b61a84802bb56d5c3c3a92f2754805c02c060fbbd13bc948901948552895193845291516001600160a01b03908116958401959095525190931681880152915160040b9282019290925290519281019290925291519081900390910190f3fea2646970667358221220fe65c6fac13edb1989599ee8ec77cc95acad74b815398a63827a48defd5528ac64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_4207f710 {\n address s_0;\n address s_1;\n address s_2;\n int40 s_3;\n uint256 s_4;\n }\n\n function test () public pure returns (S_4207f710 memory) {\n S_4207f710 memory r;\n {\n address r_0 = 0x685E81B6e56f7fcA8C8Cb81398E96bC58DF917c0;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x08ee1D70Da9cbbb0a69249503C3Cf25cC20c3cCf;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x98857FFF3613B4F38826b7932d8CbA5afeFdc028;\n r.s_2 = r_2;\n }\n {\n int40 r_3 = 428693571068;\n r.s_3 = r_3;\n }\n {\n uint r_4 = 110783680411565232822093917905364456864025309747620875461499404612573358527420;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000685e81b6e56f7fca8c8cb81398e96bc58df917c000000000000000000000000008ee1d70da9cbbb0a69249503c3cf25cc20c3ccf00000000000000000000000098857fff3613b4f38826b7932d8cba5afefdc02800000000000000000000000000000000000000000000000000000063d020c5fcf4ed574fc89ed5e6960b61a84802bb56d5c3c3a92f2754805c02c060fbbd13bc" + }, + { + "name": "random-(address,address,bool,address,bool)", + "type": "(address,address,bool,address,bool)", + "value": [ + "0xa48E0653d823eAc047e9B02b30aba5CDBdbF95E7", + "0xd545769773C849AB606c6B2644AeFAa0889DFA46", + false, + "0x1Aa34c925CAc87B9Daf1F133Ca74a7031682dA29", + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xa48E0653d823eAc047e9B02b30aba5CDBdbF95E7" + }, + { + "type": "address", + "value": "0xd545769773C849AB606c6B2644AeFAa0889DFA46" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x1Aa34c925CAc87B9Daf1F133Ca74a7031682dA29" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101388061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160a0808201835260008083526020808401829052838501829052606080850183905260809485018390528551808501875280870193845273a48e0653d823eac047e9b02b30aba5cdbdbf95e780825273d545769773c849ab606c6b2644aefaa0889dfa46828501908152731aa34c925cac87b9daf1f133ca74a7031682da298385019081526001938901938452895192835290516001600160a01b03908116958301959095529451151597810197909752925190911690850152511515918301919091520160405180910390f3fea264697066735822122077e0a50d0d0d1767ecd7e0ef38b3e89f034dfd24ec3e0cb881f55029201afcc164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5e39c92c {\n address s_0;\n address s_1;\n bool s_2;\n address s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_5e39c92c memory) {\n S_5e39c92c memory r;\n {\n address r_0 = 0xa48E0653d823eAc047e9B02b30aba5CDBdbF95E7;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xd545769773C849AB606c6B2644AeFAa0889DFA46;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x1Aa34c925CAc87B9Daf1F133Ca74a7031682dA29;\n r.s_3 = r_3;\n }\n {\n bool r_4 = true;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000a48e0653d823eac047e9b02b30aba5cdbdbf95e7000000000000000000000000d545769773c849ab606c6b2644aefaa0889dfa4600000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aa34c925cac87b9daf1f133ca74a7031682da290000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(address,address,bytes13,bytes7,string)", + "type": "(address,address,bytes13,bytes7,string)", + "value": [ + "0x40FfcE9Acee5a2a2E59a3f7C6cB8B4FA22767FA0", + "0xa2766A84edF30e2504419bb75b1671Dd6E3AfB1C", + "0x3b01bf1573c9346431647bc10e", + "0xab7a21b8c05030", + "Moo é🚀 🚀éoéé🚀o🚀é🚀éo🚀🚀ooéé oéé" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x40FfcE9Acee5a2a2E59a3f7C6cB8B4FA22767FA0" + }, + { + "type": "address", + "value": "0xa2766A84edF30e2504419bb75b1671Dd6E3AfB1C" + }, + { + "type": "hexstring", + "value": "0x3b01bf1573c9346431647bc10e" + }, + { + "type": "hexstring", + "value": "0xab7a21b8c05030" + }, + { + "type": "string", + "value": "Moo é🚀 🚀éoéé🚀o🚀é🚀éo🚀🚀ooéé oéé" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610224806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610103565b60405180910390f35b6040805160a0808201835260008083526020808401829052838501829052606080850183905260808086018290528651948501875284018190527340ffce9acee5a2a2e59a3f7c6cb8b4fa22767fa0845273a2766a84edf30e2504419bb75b1671dd6e3afb1c848301526c1d80df8ab9e49a3218b23de08760991b84870152660ab7a21b8c050360cc1b848201528551908101909552603c80865293949293919291906101b390830139608083015250919050565b6000602080835260018060a01b0380855116828501528082860151166040850152506cffffffffffffffffffffffffff60981b604085015116606084015266ffffffffffffff60c81b6060850151166080840152608084015160a08085015280518060c086015260005b818110156101895782810184015186820160e00152830161016d565b8181111561019b57600060e083880101525b50601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a8020f09f9a80c3a96fc3a9c3a9f09f9a806ff09f9a80c3a9f09f9a80c3a96ff09f9a80f09f9a806f6fc3a9c3a9206fc3a9c3a9a26469706673582212200688e393c0f21e1ac0071147a7e94901029e7e1f6dff1cacba0e54d1035b0bab64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6559cb5f {\n address s_0;\n address s_1;\n bytes13 s_2;\n bytes7 s_3;\n string s_4;\n }\n\n function test () public pure returns (S_6559cb5f memory) {\n S_6559cb5f memory r;\n {\n address r_0 = 0x40FfcE9Acee5a2a2E59a3f7C6cB8B4FA22767FA0;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xa2766A84edF30e2504419bb75b1671Dd6E3AfB1C;\n r.s_1 = r_1;\n }\n {\n bytes13 r_2 = bytes13(0x3b01bf1573c9346431647bc10e);\n r.s_2 = r_2;\n }\n {\n bytes7 r_3 = bytes7(0xab7a21b8c05030);\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀 🚀éoéé🚀o🚀é🚀éo🚀🚀ooéé oéé\";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000040ffce9acee5a2a2e59a3f7c6cb8b4fa22767fa0000000000000000000000000a2766a84edf30e2504419bb75b1671dd6e3afb1c3b01bf1573c9346431647bc10e00000000000000000000000000000000000000ab7a21b8c050300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a8020f09f9a80c3a96fc3a9c3a9f09f9a806ff09f9a80c3a9f09f9a80c3a96ff09f9a80f09f9a806f6fc3a9c3a9206fc3a9c3a900000000" + }, + { + "name": "random-(address,bytes13,bool,bytes20,(string))", + "type": "(address,bytes13,bool,bytes20,(string))", + "value": [ + "0x61B8eaCa035C5A6725f48aBf054a7f47398386F9", + "0x7417329d9cb9d6d0eb5577bcb8", + false, + "0x26c66ab81b5a664a0643b020b01513371c863121", + ["Moo é🚀oéM"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x61B8eaCa035C5A6725f48aBf054a7f47398386F9" + }, + { + "type": "hexstring", + "value": "0x7417329d9cb9d6d0eb5577bcb8" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x26c66ab81b5a664a0643b020b01513371c863121" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéM" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610251806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061015e565b60405180910390f35b61008a6040805160a081018252600080825260208083018290528284018290526060808401929092528351908101909352825290608082015290565b6100c66040805160a081018252600080825260208083018290528284018290526060808401929092528351908101909352825290608082015290565b7361b8eaca035c5a6725f48abf054a7f47398386f981526c0e82e653b3973ada1d6aaef797609b1b60208083019190915260006040808401919091527326c66ab81b5a664a0643b020b01513371c86312160601b6060808501919091528151928301909152815260408051808201909152600e81526d4d6f6f20c3a9f09f9a806fc3a94d60901b602082015281526080820152919050565b6000602080835260018060a01b03845116818401526cffffffffffffffffffffffffff60981b818501511660408401526040840151151560608401526bffffffffffffffffffffffff196060850151166080840152608084015160a080850152805190508160c085015280518060e086015260005b818110156101f057828101840151868201610100015283016101d3565b8181111561020357600061010083880101525b50601f01601f1916939093016101000194935050505056fea26469706673582212207d67331c16e8b802dfe044e63138f67aca56de514d7f5ad762740596e551c3e764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_c77c8e2d {\n address s_0;\n bytes13 s_1;\n bool s_2;\n bytes20 s_3;\n S_97fc4627 s_4;\n }\n\n function test () public pure returns (S_c77c8e2d memory) {\n S_c77c8e2d memory r;\n {\n address r_0 = 0x61B8eaCa035C5A6725f48aBf054a7f47398386F9;\n r.s_0 = r_0;\n }\n {\n bytes13 r_1 = bytes13(0x7417329d9cb9d6d0eb5577bcb8);\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n bytes20 r_3 = bytes20(0x26c66ab81b5A664A0643B020B01513371c863121);\n r.s_3 = r_3;\n }\n {\n S_97fc4627 memory r_4;\n {\n string memory r_4_0 = unicode\"Moo é🚀oéM\";\n r_4.s_0 = r_4_0;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000061b8eaca035c5a6725f48abf054a7f47398386f97417329d9cb9d6d0eb5577bcb800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026c66ab81b5a664a0643b020b01513371c86312100000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a806fc3a94d000000000000000000000000000000000000" + }, + { + "name": "random-(address,bytes20,bool,bytes30,bool)", + "type": "(address,bytes20,bool,bytes30,bool)", + "value": [ + "0x5f6C0F689D7047da5c9b0626C43eB64eE6Fe2F6F", + "0xebf0bb85ff3b3e5c74adbaf37809d0e7a4027a9e", + true, + "0x202601e5b5d7da38afdf683752ccd1114ee278dd6ba5ff62d2413498ad1a", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5f6C0F689D7047da5c9b0626C43eB64eE6Fe2F6F" + }, + { + "type": "hexstring", + "value": "0xebf0bb85ff3b3e5c74adbaf37809d0e7a4027a9e" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x202601e5b5d7da38afdf683752ccd1114ee278dd6ba5ff62d2413498ad1a" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061014c8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160a08082018352600080835260208084018290528385018290526060808501839052608094850183905285518085018752808601938452735f6c0f689d7047da5c9b0626c43eb64ee6fe2f6f8082527375f85dc2ff9d9f2e3a56dd79bc04e873d2013d4f60611b8285019081526001838a019081527f202601e5b5d7da38afdf683752ccd1114ee278dd6ba5ff62d2413498ad1a0000938501938452895192835290516bffffffffffffffffffffffff19169482019490945292511515838801525161ffff191690820152905115159281019290925291519081900390910190f3fea2646970667358221220cbbaf13639df23c2ae9951650ec28648b4838a7cda837b9014d4bb59e3d672e364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_889288ce {\n address s_0;\n bytes20 s_1;\n bool s_2;\n bytes30 s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_889288ce memory) {\n S_889288ce memory r;\n {\n address r_0 = 0x5f6C0F689D7047da5c9b0626C43eB64eE6Fe2F6F;\n r.s_0 = r_0;\n }\n {\n bytes20 r_1 = bytes20(0xEbF0bB85fF3B3e5C74aDbAF37809d0e7A4027a9e);\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n bytes30 r_3 = bytes30(0x202601e5b5d7da38afdf683752ccd1114ee278dd6ba5ff62d2413498ad1a);\n r.s_3 = r_3;\n }\n {\n bool r_4 = false;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000005f6c0f689d7047da5c9b0626c43eb64ee6fe2f6febf0bb85ff3b3e5c74adbaf37809d0e7a4027a9e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001202601e5b5d7da38afdf683752ccd1114ee278dd6ba5ff62d2413498ad1a00000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,bytes27,bytes19[3],string)", + "type": "(address,bytes27,bytes19[3],string)", + "value": [ + "0x4Ea3B93aBb480636A32D10854876bb0b3433729F", + "0x27de6f34643300365d7df882afab25568b962d6abea4630c23e499", + [ + "0x782414c0857556293c346eaae21fd8637f7ee4", + "0xf72cebce2bb820054164002363b5763f52133d", + "0x5be7724b68540da165eca677aff36ecf387048" + ], + "Moo é🚀🚀éMéo🚀 🚀 éM🚀MéoMMoooM🚀🚀Moéoo🚀o🚀🚀o🚀oé🚀ééMoéo oMéo🚀oM" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x4Ea3B93aBb480636A32D10854876bb0b3433729F" + }, + { + "type": "hexstring", + "value": "0x27de6f34643300365d7df882afab25568b962d6abea4630c23e499" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x782414c0857556293c346eaae21fd8637f7ee4" + }, + { + "type": "hexstring", + "value": "0xf72cebce2bb820054164002363b5763f52133d" + }, + { + "type": "hexstring", + "value": "0x5be7724b68540da165eca677aff36ecf387048" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀éMéo🚀 🚀 éM🚀MéoMMoooM🚀🚀Moéoo🚀o🚀🚀o🚀oé🚀ééMoéo oMéo🚀oM" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102d2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610171565b60405180910390f35b610056610127565b61005e610127565b734ea3b93abb480636a32d10854876bb0b3433729f81527f27de6f34643300365d7df882afab25568b962d6abea4630c23e499000000000060208201526100a3610153565b721e090530215d558a4f0d1baab887f618dfdfb9606a1b815272f72cebce2bb820054164002363b5763f52133d60681b602080830191909152720b7cee496d0a81b42cbd94cef5fe6dd9e70e09606b1b60408084019190915283810192909252815160a08101909252606b8083526000929161023290830139606083015250919050565b6040805160808101825260008082526020820152908101610146610153565b8152602001606081525090565b60405180606001604052806003906020820280368337509192915050565b6000602080835260018060a01b038451168184015264ffffffffff198185015116604084015260408401516060840160005b60038110156101d05782516cffffffffffffffffffffffffff1916825291830191908301906001016101a3565b505050606084015160c08085015280518060e086015260005b8181101561020657828101840151868201610100015283016101e9565b8181111561021957600061010083880101525b50601f01601f1916939093016101000194935050505056fe4d6f6f20c3a9f09f9a80f09f9a80c3a94dc3a96ff09f9a8020f09f9a8020c3a94df09f9a804dc3a96f4d4d6f6f6f4df09f9a80f09f9a804d6fc3a96f6ff09f9a806ff09f9a80f09f9a806ff09f9a806fc3a9f09f9a80c3a9c3a94d6fc3a96f206f4dc3a96ff09f9a806f4da26469706673582212206360a5d46c4a468a1314ccbd75e895136d2a6688d57189e92dfdb0fe249e375864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_14a133b9 {\n address s_0;\n bytes27 s_1;\n bytes19[3] s_2;\n string s_3;\n }\n\n function test () public pure returns (S_14a133b9 memory) {\n S_14a133b9 memory r;\n {\n address r_0 = 0x4Ea3B93aBb480636A32D10854876bb0b3433729F;\n r.s_0 = r_0;\n }\n {\n bytes27 r_1 = bytes27(0x27de6f34643300365d7df882afab25568b962d6abea4630c23e499);\n r.s_1 = r_1;\n }\n {\n bytes19[3] memory r_2;\n {\n bytes19 r_2_0 = bytes19(0x782414c0857556293c346eaae21fd8637f7ee4);\n r_2[0] = r_2_0;\n }\n {\n bytes19 r_2_1 = bytes19(0xf72cebce2bb820054164002363b5763f52133d);\n r_2[1] = r_2_1;\n }\n {\n bytes19 r_2_2 = bytes19(0x5be7724b68540da165eca677aff36ecf387048);\n r_2[2] = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀🚀éMéo🚀 🚀 éM🚀MéoMMoooM🚀🚀Moéoo🚀o🚀🚀o🚀oé🚀ééMoéo oMéo🚀oM\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000004ea3b93abb480636a32d10854876bb0b3433729f27de6f34643300365d7df882afab25568b962d6abea4630c23e4990000000000782414c0857556293c346eaae21fd8637f7ee400000000000000000000000000f72cebce2bb820054164002363b5763f52133d000000000000000000000000005be7724b68540da165eca677aff36ecf3870480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006b4d6f6f20c3a9f09f9a80f09f9a80c3a94dc3a96ff09f9a8020f09f9a8020c3a94df09f9a804dc3a96f4d4d6f6f6f4df09f9a80f09f9a804d6fc3a96f6ff09f9a806ff09f9a80f09f9a806ff09f9a806fc3a9f09f9a80c3a9c3a94d6fc3a96f206f4dc3a96ff09f9a806f4d000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,bytes3[][2][1])", + "type": "(address,bytes3[][2][1])", + "value": [ + "0x9a775acF611205d18ab63DEb5D726bc982c37284", + [[["0x6c197b"], ["0x9dda2d", "0x8649b8", "0xdaebb0"]]] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x9a775acF611205d18ab63DEb5D726bc982c37284" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x6c197b" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x9dda2d" + }, + { + "type": "hexstring", + "value": "0x8649b8" + }, + { + "type": "hexstring", + "value": "0xdaebb0" + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610355806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061023d565b60405180910390f35b6100566101c1565b61005e6101c1565b739a775acf611205d18ab63deb5d726bc982c37284815261007d6101e9565b610085610216565b6040805160018082528183019092526000916020808301908036833750508151919250626c197b60e81b9182915083906000906100c4576100c4610309565b6001600160e81b031992909216602092830291909101909101525081526040805160038082526080820190925260009181602001602082028036833750508151919250629dda2d60e81b91829150839060009061012357610123610309565b6001600160e81b0319909216602092830291909101909101525080516210c93760eb1b9081908390600190811061015c5761015c610309565b6001600160e81b031990921660209283029190910190910152508051620daebb60ec1b9081908390600290811061019557610195610309565b6001600160e81b0319929092166020928302919091018201528381019290925250908252820152919050565b604051806040016040528060006001600160a01b031681526020016101e46101e9565b905290565b60405180602001604052806001905b610200610216565b8152602001906001900390816101f85790505090565b60405180604001604052806002905b60608152602001906001900390816102255790505090565b602080825282516001600160a01b03168282015282810151604080840181905260009291608085019160608601855b600180821061027b57506102fc565b888603605f1901835284518685810160005b60028110156102e657898203835283518051808452908c01908c84019060005b818110156102d25783516001600160e81b0319168352928e0192918e019188016102ad565b5050948c0194938c0193925050840161028d565b509750505093860193509085019060010161026c565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212208be376f5158e1540ec861170617ea97c32d4a736128e06fe9146ac9aa56bd33064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8a7217ad {\n address s_0;\n bytes3[][2][1] s_1;\n }\n\n function test () public pure returns (S_8a7217ad memory) {\n S_8a7217ad memory r;\n {\n address r_0 = 0x9a775acF611205d18ab63DEb5D726bc982c37284;\n r.s_0 = r_0;\n }\n {\n bytes3[][2][1] memory r_1;\n {\n bytes3[][2] memory r_1_0;\n {\n bytes3[] memory r_1_0_0 = new bytes3[](1);\n {\n bytes3 r_1_0_0_0 = bytes3(0x6c197b);\n r_1_0_0[0] = r_1_0_0_0;\n }\n r_1_0[0] = r_1_0_0;\n }\n {\n bytes3[] memory r_1_0_1 = new bytes3[](3);\n {\n bytes3 r_1_0_1_0 = bytes3(0x9dda2d);\n r_1_0_1[0] = r_1_0_1_0;\n }\n {\n bytes3 r_1_0_1_1 = bytes3(0x8649b8);\n r_1_0_1[1] = r_1_0_1_1;\n }\n {\n bytes3 r_1_0_1_2 = bytes3(0xdaebb0);\n r_1_0_1[2] = r_1_0_1_2;\n }\n r_1_0[1] = r_1_0_1;\n }\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000009a775acf611205d18ab63deb5d726bc982c37284000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000016c197b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039dda2d00000000000000000000000000000000000000000000000000000000008649b80000000000000000000000000000000000000000000000000000000000daebb00000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,int88,string,uint160,address)", + "type": "(address,int88,string,uint160,address)", + "value": [ + "0x02575374096c10b1206BCADa8BcDB3F302daa5D2", + "86167916717732110344282820", + "Moo é🚀oooo ooé🚀🚀éM🚀 éooMéoo M Mé oooé🚀oo MoééMM🚀é oMM o oMoéM", + "757926264491365734317093947616404597483600402469", + "0xCc82551545e93Ce162BD1F6a4778895e26B2dEDD" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x02575374096c10b1206BCADa8BcDB3F302daa5D2" + }, + { + "type": "number", + "value": "86167916717732110344282820" + }, + { + "type": "string", + "value": "Moo é🚀oooo ooé🚀🚀éM🚀 éooMéoo M Mé oooé🚀oo MoééMM🚀é oMM o oMoéM" + }, + { + "type": "number", + "value": "757926264491365734317093947616404597483600402469" + }, + { + "type": "address", + "value": "0xCc82551545e93Ce162BD1F6a4778895e26B2dEDD" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610252806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610117565b60405180910390f35b6040805160a080820183526000808352602080840182905260608486018190528085018390526080808601849052865194850187528487018290529084018390528381018390527302575374096c10b1206bcada8bcdb3f302daa5d284526a4746c4200cd4487b2662c4848301528551908101909552605c80865293949293919291906101c1908301396040830152507384c296d19fa4245f18e37e5d2fb82eda1e84d825606082015273cc82551545e93ce162bd1f6a4778895e26b2dedd6080820152919050565b6000602080835260018060a01b038451168184015280840151600a0b6040840152604084015160a0606085015280518060c086015260005b8181101561016b5782810184015186820160e00152830161014f565b8181111561017d57600060e083880101525b5060608601516001600160a01b0381166080870152925060808601516001600160a01b03811660a08701529250601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a806f6f6f6f206f6fc3a9f09f9a80f09f9a80c3a94df09f9a80202020c3a96f6f4dc3a96f6f204d204dc3a9206f6f6fc3a9f09f9a806f6f204d6fc3a9c3a94d4df09f9a80c3a9206f4d4d206f206f4d6fc3a94da26469706673582212206d8e186ec07b988a5a74350cf5514479fadc7f712658e16554db37f418d7bc4164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_34f59bb6 {\n address s_0;\n int88 s_1;\n string s_2;\n uint160 s_3;\n address s_4;\n }\n\n function test () public pure returns (S_34f59bb6 memory) {\n S_34f59bb6 memory r;\n {\n address r_0 = 0x02575374096c10b1206BCADa8BcDB3F302daa5D2;\n r.s_0 = r_0;\n }\n {\n int88 r_1 = 86167916717732110344282820;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀oooo ooé🚀🚀éM🚀 éooMéoo M Mé oooé🚀oo MoééMM🚀é oMM o oMoéM\";\n r.s_2 = r_2;\n }\n {\n uint160 r_3 = 757926264491365734317093947616404597483600402469;\n r.s_3 = r_3;\n }\n {\n address r_4 = 0xCc82551545e93Ce162BD1F6a4778895e26B2dEDD;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000002575374096c10b1206bcada8bcdb3f302daa5d20000000000000000000000000000000000000000004746c4200cd4487b2662c400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000084c296d19fa4245f18e37e5d2fb82eda1e84d825000000000000000000000000cc82551545e93ce162bd1f6a4778895e26b2dedd000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a806f6f6f6f206f6fc3a9f09f9a80f09f9a80c3a94df09f9a80202020c3a96f6f4dc3a96f6f204d204dc3a9206f6f6fc3a9f09f9a806f6f204d6fc3a9c3a94d4df09f9a80c3a9206f4d4d206f206f4d6fc3a94d00000000" + }, + { + "name": "random-(address,string,bytes8,bytes15,bytes21)", + "type": "(address,string,bytes8,bytes15,bytes21)", + "value": [ + "0xCe0cd96ac58BCb4D54fFC4915BA72Fb033d8FaA9", + "Moo é🚀o 🚀oé🚀o 🚀 oM o éo🚀ooéo🚀oéoMo", + "0xc71b0cb7bf220a07", + "0xb5eb2550864e455f6a046df7091ba6", + "0xe2d9c5825b23e85e2ab898ce494a3356bc6768b5a2" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xCe0cd96ac58BCb4D54fFC4915BA72Fb033d8FaA9" + }, + { + "type": "string", + "value": "Moo é🚀o 🚀oé🚀o 🚀 oM o éo🚀ooéo🚀oéoMo" + }, + { + "type": "hexstring", + "value": "0xc71b0cb7bf220a07" + }, + { + "type": "hexstring", + "value": "0xb5eb2550864e455f6a046df7091ba6" + }, + { + "type": "hexstring", + "value": "0xe2d9c5825b23e85e2ab898ce494a3356bc6768b5a2" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610252806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610120565b60405180910390f35b6040805160a08082018352600080835260606020808501829052848601839052818501839052608080860184905286519485018752848201839052848701849052848301849052840183905273ce0cd96ac58bcb4d54ffc4915ba72fb033d8faa98452855191820190955260398082529394929391929091906101e49083013960208301525067c71b0cb7bf220a0760c01b60408201526e5af592a8432722afb50236fb848dd360891b606082015274716ce2c12d91f42f155c4c6724a519ab5e33b45ad160591b6080820152919050565b6000602080835260018060a01b03845116818401528084015160a0604085015280518060c086015260005b818110156101675782810184015186820160e00152830161014b565b8181111561017957600060e083880101525b5060408601516001600160c01b0319811660608701529250606086015170ffffffffffffffffffffffffffffffffff1981166080870152925060808601516affffffffffffffffffffff19811660a08701529250601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a806f20f09f9a806fc3a9f09f9a806f20f09f9a80206f4d206f20c3a96ff09f9a806f6fc3a96ff09f9a806fc3a96f4d6fa2646970667358221220a3b0abf1e116756bff9885ed70ea6f6b217cf4155c38efbe82121a2d6328f58764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_71cd0e9f {\n address s_0;\n string s_1;\n bytes8 s_2;\n bytes15 s_3;\n bytes21 s_4;\n }\n\n function test () public pure returns (S_71cd0e9f memory) {\n S_71cd0e9f memory r;\n {\n address r_0 = 0xCe0cd96ac58BCb4D54fFC4915BA72Fb033d8FaA9;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀o 🚀oé🚀o 🚀 oM o éo🚀ooéo🚀oéoMo\";\n r.s_1 = r_1;\n }\n {\n bytes8 r_2 = bytes8(0xc71b0cb7bf220a07);\n r.s_2 = r_2;\n }\n {\n bytes15 r_3 = bytes15(0xb5eb2550864e455f6a046df7091ba6);\n r.s_3 = r_3;\n }\n {\n bytes21 r_4 = bytes21(0xe2d9c5825b23e85e2ab898ce494a3356bc6768b5a2);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000ce0cd96ac58bcb4d54ffc4915ba72fb033d8faa900000000000000000000000000000000000000000000000000000000000000a0c71b0cb7bf220a07000000000000000000000000000000000000000000000000b5eb2550864e455f6a046df7091ba60000000000000000000000000000000000e2d9c5825b23e85e2ab898ce494a3356bc6768b5a2000000000000000000000000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a806f20f09f9a806fc3a9f09f9a806f20f09f9a80206f4d206f20c3a96ff09f9a806f6fc3a96ff09f9a806fc3a96f4d6f00000000000000" + }, + { + "name": "random-(address,string,string,string,uint32)", + "type": "(address,string,string,string,uint32)", + "value": [ + "0xcfE690f5C70039a976b06E9951D18B51129a6910", + "Moo é🚀🚀 o🚀ooo🚀o🚀🚀🚀ooé ", + "Moo é🚀M🚀é", + "Moo é🚀🚀 M🚀🚀🚀Moéo 🚀éé é 🚀é", + "1505442432" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xcfE690f5C70039a976b06E9951D18B51129a6910" + }, + { + "type": "string", + "value": "Moo é🚀🚀 o🚀ooo🚀o🚀🚀🚀ooé " + }, + { + "type": "string", + "value": "Moo é🚀M🚀é" + }, + { + "type": "string", + "value": "Moo é🚀🚀 M🚀🚀🚀Moéo 🚀éé é 🚀é" + }, + { + "type": "number", + "value": "1505442432" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061029f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061017f565b60405180910390f35b6100566100f4565b61005e6100f4565b73cfe690f5c70039a976b06e9951d18b51129a691081526040805160608101909152602d8082526000919061023d602083013960208084019190915260408051808201825260118152704d6f6f20c3a9f09f9a804df09f9a80c3a960781b81840152818501528051606081019091526036808252600093509091610207908301396060830152506359bb3a806080820152919050565b6040518060a0016040528060006001600160a01b03168152602001606081526020016060815260200160608152602001600063ffffffff1681525090565b6000815180845260005b818110156101585760208185018101518683018201520161013c565b8181111561016a576000602083870101525b50601f01601f19169290920160200192915050565b602080825282516001600160a01b03168282015282015160a060408301526000906101ad60c0840182610132565b90506040840151601f19808584030160608601526101cb8383610132565b92506060860151915080858403016080860152506101e98282610132565b91505063ffffffff60808501511660a0840152809150509291505056fe4d6f6f20c3a9f09f9a80f09f9a80204df09f9a80f09f9a80f09f9a804d6fc3a96f20f09f9a80c3a9c3a9202020c3a920f09f9a80c3a94d6f6f20c3a9f09f9a80f09f9a80206ff09f9a806f6f6ff09f9a806ff09f9a80f09f9a80f09f9a806f6fc3a920a26469706673582212204b4b8a7fcceab4d06370e5449801682820740776ee5942e42792521d2e4e58e864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_53253d21 {\n address s_0;\n string s_1;\n string s_2;\n string s_3;\n uint32 s_4;\n }\n\n function test () public pure returns (S_53253d21 memory) {\n S_53253d21 memory r;\n {\n address r_0 = 0xcfE690f5C70039a976b06E9951D18B51129a6910;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀🚀 o🚀ooo🚀o🚀🚀🚀ooé \";\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀M🚀é\";\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀🚀 M🚀🚀🚀Moéo 🚀éé é 🚀é\";\n r.s_3 = r_3;\n }\n {\n uint32 r_4 = 1505442432;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000cfe690f5c70039a976b06e9951d18b51129a691000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000059bb3a80000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a80f09f9a80206ff09f9a806f6f6ff09f9a806ff09f9a80f09f9a80f09f9a806f6fc3a9200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a804df09f9a80c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a80f09f9a80204df09f9a80f09f9a80f09f9a804d6fc3a96f20f09f9a80c3a9c3a9202020c3a920f09f9a80c3a900000000000000000000" + }, + { + "name": "random-(address[2],string,(string,bytes25))", + "type": "(address[2],string,(string,bytes25))", + "value": [ + [ + "0x4141351963d1d3969819e0E79421F493cA9Af7fD", + "0xa5638b239251976b2C56Fd69DdDb19216F3534a3" + ], + "Moo é🚀", + [ + "Moo é🚀M 🚀M🚀 o🚀éo é🚀o oooM🚀M o🚀🚀ooéoéoéé🚀é🚀oéooooMo🚀ooM🚀o🚀 o🚀é ", + "0x56092049828096aaa663cf8d3299c0bb4fc4d86218a8e22e7b" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x4141351963d1d3969819e0E79421F493cA9Af7fD" + }, + { + "type": "address", + "value": "0xa5638b239251976b2C56Fd69DdDb19216F3534a3" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M 🚀M🚀 o🚀éo é🚀o oooM🚀M o🚀🚀ooéoéoéé🚀é🚀oéooooMo🚀ooM🚀o🚀 o🚀é " + }, + { + "type": "hexstring", + "value": "0x56092049828096aaa663cf8d3299c0bb4fc4d86218a8e22e7b" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610317806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101d7565b60405180910390f35b610056610121565b61005e610121565b61006661016c565b734141351963d1d3969819e0e79421f493ca9af7fd815273a5638b239251976b2c56fd69dddb19216f3534a3602080830191909152908252604080518082018252600a8152689adede418753e13f3560b71b818401528383015280518082018252606081526000818401819052825160a08101909352607380845291939092919061026f908301398252507f56092049828096aaa663cf8d3299c0bb4fc4d86218a8e22e7b0000000000000060208201526040820152919050565b604051806060016040528061013461016c565b815260200160608152602001610167604051806040016040528060608152602001600066ffffffffffffff191681525090565b905290565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b818110156101b057602081850181015186830182015201610194565b818111156101c2576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825160009190828483015b600282101561020f5782516001600160a01b03168152918301916001919091019083016101e7565b505050808401516080606085015261022a60a085018261018a565b90506040850151601f19858303016080860152805160408352610250604084018261018a565b9184015166ffffffffffffff1916929093019190915294935050505056fe4d6f6f20c3a9f09f9a804d2020f09f9a804df09f9a80206ff09f9a80c3a96f20c3a9f09f9a806f206f6f6f4df09f9a804d206ff09f9a80f09f9a806f6fc3a96fc3a96fc3a9c3a9f09f9a80c3a9f09f9a806fc3a96f6f6f6f4d6ff09f9a806f6f4df09f9a806ff09f9a80206ff09f9a80c3a920a2646970667358221220c966bad689da974136b25dc032035dae6359e16ff9176732e1a79b4133b9809564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_62cfa513 {\n string s_0;\n bytes25 s_1;\n }\n\n struct S_a6b651b7 {\n address[2] s_0;\n string s_1;\n S_62cfa513 s_2;\n }\n\n function test () public pure returns (S_a6b651b7 memory) {\n S_a6b651b7 memory r;\n {\n address[2] memory r_0;\n {\n address r_0_0 = 0x4141351963d1d3969819e0E79421F493cA9Af7fD;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0xa5638b239251976b2C56Fd69DdDb19216F3534a3;\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r.s_1 = r_1;\n }\n {\n S_62cfa513 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀M 🚀M🚀 o🚀éo é🚀o oooM🚀M o🚀🚀ooéoéoéé🚀é🚀oéooooMo🚀ooM🚀o🚀 o🚀é \";\n r_2.s_0 = r_2_0;\n }\n {\n bytes25 r_2_1 = bytes25(0x56092049828096aaa663cf8d3299c0bb4fc4d86218a8e22e7b);\n r_2.s_1 = r_2_1;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000004141351963d1d3969819e0e79421f493ca9af7fd000000000000000000000000a5638b239251976b2c56fd69dddb19216f3534a3000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004056092049828096aaa663cf8d3299c0bb4fc4d86218a8e22e7b0000000000000000000000000000000000000000000000000000000000000000000000000000734d6f6f20c3a9f09f9a804d2020f09f9a804df09f9a80206ff09f9a80c3a96f20c3a9f09f9a806f206f6f6f4df09f9a804d206ff09f9a80f09f9a806f6fc3a96fc3a96fc3a9c3a9f09f9a80c3a9f09f9a806fc3a96f6f6f6f4d6ff09f9a806f6f4df09f9a806ff09f9a80206ff09f9a80c3a92000000000000000000000000000" + }, + { + "name": "random-(address[4],bool[],int160)", + "type": "(address[4],bool[],int160)", + "value": [ + [ + "0xC471a0DE712033BC0dB66aa63D0d5Ce7Fe30CE9E", + "0xe333C319F59FF51eb2f4a4dad459202338B4FCd9", + "0xFfE0c4C295d3037fF70dcb0fCA69630e2727ffAE", + "0x07b42A13d43019Ed3De9f6f7A83A685246309561" + ], + [], + "-556715979670544194538409389648652506062203683011" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xC471a0DE712033BC0dB66aa63D0d5Ce7Fe30CE9E" + }, + { + "type": "address", + "value": "0xe333C319F59FF51eb2f4a4dad459202338B4FCd9" + }, + { + "type": "address", + "value": "0xFfE0c4C295d3037fF70dcb0fCA69630e2727ffAE" + }, + { + "type": "address", + "value": "0x07b42A13d43019Ed3De9f6f7A83A685246309561" + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "number", + "value": "-556715979670544194538409389648652506062203683011" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061021f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610149565b60405180910390f35b610056610104565b61005e610104565b61006661012b565b73c471a0de712033bc0db66aa63d0d5ce7fe30ce9e815273e333c319f59ff51eb2f4a4dad459202338b4fcd960208083019190915273ffe0c4c295d3037ff70dcb0fca69630e2727ffae6040808401919091527307b42a13d43019ed3de9f6f7a83a68524630956160608401529183528151600081528082018352908301527361840206c9bdabaea24005b90f99bb03bab080c21990820152919050565b604051806060016040528061011761012b565b815260606020820152600060409091015290565b60405180608001604052806004906020820280368337509192915050565b602080825282516000919060e08401838584015b60048210156101855783516001600160a01b031681529284019260019190910190840161015d565b50508583015160c060a0870152805191829052830191506000906101008601905b808310156101c8578351151582529284019260019290920191908401906101a6565b50604087015193506101df60c087018560130b9052565b969550505050505056fea2646970667358221220228e8890fb275a2fba0183368a75f224d8298ca60695657f00f9af5de9dc86c564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_82c082c0 {\n address[4] s_0;\n bool[] s_1;\n int160 s_2;\n }\n\n function test () public pure returns (S_82c082c0 memory) {\n S_82c082c0 memory r;\n {\n address[4] memory r_0;\n {\n address r_0_0 = 0xC471a0DE712033BC0dB66aa63D0d5Ce7Fe30CE9E;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0xe333C319F59FF51eb2f4a4dad459202338B4FCd9;\n r_0[1] = r_0_1;\n }\n {\n address r_0_2 = 0xFfE0c4C295d3037fF70dcb0fCA69630e2727ffAE;\n r_0[2] = r_0_2;\n }\n {\n address r_0_3 = 0x07b42A13d43019Ed3De9f6f7A83A685246309561;\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n bool[] memory r_1 = new bool[](0);\n r.s_1 = r_1;\n }\n {\n int160 r_2 = -556715979670544194538409389648652506062203683011;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000c471a0de712033bc0db66aa63d0d5ce7fe30ce9e000000000000000000000000e333c319f59ff51eb2f4a4dad459202338b4fcd9000000000000000000000000ffe0c4c295d3037ff70dcb0fca69630e2727ffae00000000000000000000000007b42a13d43019ed3de9f6f7a83a68524630956100000000000000000000000000000000000000000000000000000000000000c0ffffffffffffffffffffffff9e7bfdf9364254515dbffa46f06644fc454f7f3d0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,address,address,(bytes28,address))", + "type": "(bool,address,address,(bytes28,address))", + "value": [ + false, + "0xAa7DE6493DdEE0f461d10659F6Af58Cb2B97c7a4", + "0xd248723779521F1972b83b5A2b2eDb03a52983c3", + [ + "0xc88cda4f1dae64d84ec7010a438b33a8732d12d904a57fe902a34496", + "0xEf2787Ba77368F5f38b3418c95db39a86Ab03220" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xAa7DE6493DdEE0f461d10659F6Af58Cb2B97c7a4" + }, + { + "type": "address", + "value": "0xd248723779521F1972b83b5A2b2eDb03a52983c3" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc88cda4f1dae64d84ec7010a438b33a8732d12d904a57fe902a34496" + }, + { + "type": "address", + "value": "0xEf2787Ba77368F5f38b3418c95db39a86Ab03220" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101cc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b610038610097565b60405161008e91908151151581526020808301516001600160a01b0390811682840152604080850151821690840152606093840151805163ffffffff191694840194909452920151909116608082015260a00190565b60405180910390f35b6100ce6040805160808101825260008082526020808301829052828401829052835180850190945281845283015290606082015290565b6101056040805160808101825260008082526020808301829052828401829052835180850190945281845283015290606082015290565b6000815273aa7de6493ddee0f461d10659f6af58cb2b97c7a460208083019190915273d248723779521f1972b83b5a2b2edb03a52983c360408084019190915280518082019091527fc88cda4f1dae64d84ec7010a438b33a8732d12d904a57fe902a3449600000000815273ef2787ba77368f5f38b3418c95db39a86ab0322091810191909152606082015291905056fea2646970667358221220bf4a8e975fabe0162383e5984022d874db6fd6a8dada2b2ffa5fd2c36c2172b464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_113ad7c9 {\n bytes28 s_0;\n address s_1;\n }\n\n struct S_e41f8d72 {\n bool s_0;\n address s_1;\n address s_2;\n S_113ad7c9 s_3;\n }\n\n function test () public pure returns (S_e41f8d72 memory) {\n S_e41f8d72 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xAa7DE6493DdEE0f461d10659F6Af58Cb2B97c7a4;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xd248723779521F1972b83b5A2b2eDb03a52983c3;\n r.s_2 = r_2;\n }\n {\n S_113ad7c9 memory r_3;\n {\n bytes28 r_3_0 = bytes28(0xc88cda4f1dae64d84ec7010a438b33a8732d12d904a57fe902a34496);\n r_3.s_0 = r_3_0;\n }\n {\n address r_3_1 = 0xEf2787Ba77368F5f38b3418c95db39a86Ab03220;\n r_3.s_1 = r_3_1;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa7de6493ddee0f461d10659f6af58cb2b97c7a4000000000000000000000000d248723779521f1972b83b5a2b2edb03a52983c3c88cda4f1dae64d84ec7010a438b33a8732d12d904a57fe902a3449600000000000000000000000000000000ef2787ba77368f5f38b3418c95db39a86ab03220" + }, + { + "name": "random-(bool,address,int256,uint168,string)", + "type": "(bool,address,int256,uint168,string)", + "value": [ + true, + "0xe21e938265fa8C67E1cAf4AaB1F01b17Be03AE60", + "-49834626886411599797080129241252412221548574922567402409412494555958278883952", + "89967997321685748167516957060621049600170884080273", + "Moo é🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xe21e938265fa8C67E1cAf4AaB1F01b17Be03AE60" + }, + { + "type": "number", + "value": "-49834626886411599797080129241252412221548574922567402409412494555958278883952" + }, + { + "type": "number", + "value": "89967997321685748167516957060621049600170884080273" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101ff806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610132565b60405180910390f35b6100566100ef565b61005e6100ef565b6001815273e21e938265fa8c67e1caf4aab1f01b17be03ae606020808301919091527f91d299ca5b6a7b82123d990d583d1aa984ad1ad41a2cbc9662dbe4d4acabf590604080840191909152743d8f00870c1739b6e5f72d0109f2064fb32e6c229160608401528051808201909152600a8152689adede418753e13f3560b71b918101919091526080820152919050565b6040518060a0016040528060001515815260200160006001600160a01b031681526020016000815260200160006001600160a81b03168152602001606081525090565b60006020808352835115158184015260018060a01b03818501511660408401526040840151606084015260018060a81b036060850151166080840152608084015160a08085015280518060c086015260005b818110156101a05782810184015186820160e001528301610184565b818111156101b257600060e083880101525b50601f01601f19169390930160e00194935050505056fea2646970667358221220ad6bfb565ecf3e3399bdd0eece609c61302a20681261572781ef35c63d7bf5f864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7f1e9daf {\n bool s_0;\n address s_1;\n int256 s_2;\n uint168 s_3;\n string s_4;\n }\n\n function test () public pure returns (S_7f1e9daf memory) {\n S_7f1e9daf memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xe21e938265fa8C67E1cAf4AaB1F01b17Be03AE60;\n r.s_1 = r_1;\n }\n {\n int256 r_2 = -49834626886411599797080129241252412221548574922567402409412494555958278883952;\n r.s_2 = r_2;\n }\n {\n uint168 r_3 = 89967997321685748167516957060621049600170884080273;\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀\";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e21e938265fa8c67e1caf4aab1f01b17be03ae6091d299ca5b6a7b82123d990d583d1aa984ad1ad41a2cbc9662dbe4d4acabf59000000000000000000000003d8f00870c1739b6e5f72d0109f2064fb32e6c229100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,bool,int48,address,bool)", + "type": "(bool,bool,int48,address,bool)", + "value": [ + true, + false, + "112172682523107", + "0xa6F94EB3d41d71E384Fb91eE04532715C029f3c8", + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "112172682523107" + }, + { + "type": "address", + "value": "0xa6F94EB3d41d71E384Fb91eE04532715C029f3c8" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061010f8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160a0808201835260008083526020808401829052838501829052606080850183905260809485018390528551808501875280830193845260018082526566053ce531e382890190815273a6f94eb3d41d71e384fb91ee04532715c029f3c883850190815292880182815289519283529551151594820194909452925160050b83880152516001600160a01b031690820152905115159281019290925291519081900390910190f3fea2646970667358221220b5f1e60f622959ba6494e88dd8f50eb00ad9e1f51a19827b6239425451c9ee3564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_063b63e5 {\n bool s_0;\n bool s_1;\n int48 s_2;\n address s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_063b63e5 memory) {\n S_063b63e5 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n int48 r_2 = 112172682523107;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xa6F94EB3d41d71E384Fb91eE04532715C029f3c8;\n r.s_3 = r_3;\n }\n {\n bool r_4 = true;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066053ce531e3000000000000000000000000a6f94eb3d41d71e384fb91ee04532715c029f3c80000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bool,bytes22,string,bool,uint24)", + "type": "(bool,bytes22,string,bool,uint24)", + "value": [ + true, + "0x3fb675255eb3d1b5092c064d9422e33621bdcf221d62", + "Moo é🚀oM oéo ooo ooo é éMo🚀Mooo éo🚀Mo ooo oM éoMoM oo", + true, + "15192590" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x3fb675255eb3d1b5092c064d9422e33621bdcf221d62" + }, + { + "type": "string", + "value": "Moo é🚀oM oéo ooo ooo é éMo🚀Mooo éo🚀Mo ooo oM éoMoM oo" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "15192590" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061020b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100ee565b60405180910390f35b6040805160a0808201835260008083526020808401829052606084860181905280850183905260808086018490528651948501875284870182905290840183905283810183905260018452751fdb3a92af59e8da84960326ca11719b10dee7910eb160511b84830152855190810190955260458086529394929391929190610191908301396040830152506001606082015262e7d20e6080820152919050565b60006020808352835115158184015269ffffffffffffffffffff1981850151166040840152604084015160a0606085015280518060c086015260005b818110156101465782810184015186820160e00152830161012a565b8181111561015857600060e083880101525b50606086015180151560808701529250608086015162ffffff811660a08701529250601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a806f4d206fc3a96f206f6f6f20206f6f6f20c3a920c3a94d6ff09f9a804d6f6f6f20c3a96ff09f9a804d6f206f6f6f206f4d20c3a96f4d6f4d206f6fa26469706673582212208f3e557175f1da1d792978742f9c5725980a5052fda66f2676e0b902a5511ddb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ec8e4ea5 {\n bool s_0;\n bytes22 s_1;\n string s_2;\n bool s_3;\n uint24 s_4;\n }\n\n function test () public pure returns (S_ec8e4ea5 memory) {\n S_ec8e4ea5 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes22 r_1 = bytes22(0x3fb675255eb3d1b5092c064d9422e33621bdcf221d62);\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀oM oéo ooo ooo é éMo🚀Mooo éo🚀Mo ooo oM éoMoM oo\";\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n {\n uint24 r_4 = 15192590;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000013fb675255eb3d1b5092c064d9422e33621bdcf221d620000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000e7d20e00000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a806f4d206fc3a96f206f6f6f20206f6f6f20c3a920c3a94d6ff09f9a804d6f6f6f20c3a96ff09f9a804d6f206f6f6f206f4d20c3a96f4d6f4d206f6f000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,bytes7,bool,address,string)", + "type": "(bool,bytes7,bool,address,string)", + "value": [ + false, + "0x26fd047dd778ea", + true, + "0x62196AE41bD201Aa1bf06222D8Cf487c4bee9fD4", + "Moo é🚀oo Mo éooéoéMM 🚀oo oo🚀éooMééé o ooooMo" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x26fd047dd778ea" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x62196AE41bD201Aa1bf06222D8Cf487c4bee9fD4" + }, + { + "type": "string", + "value": "Moo é🚀oo Mo éooéoéMM 🚀oo oo🚀éooMééé o ooooMo" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101f9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100e4565b60405180910390f35b6040805160a0808201835260008083526020808401829052838501829052606080850183905260808086018290528651948501875283855284810182905266137e823eebbc7560c91b858401526001858801527362196ae41bd201aa1bf06222d8cf487c4bee9fd49185019190915285519081019095526042808652939492939192919061018290830139608083015250919050565b60006020808352835115158184015266ffffffffffffff60c81b8185015116604084015260408401511515606084015260018060a01b036060850151166080840152608084015160a08085015280518060c086015260005b818110156101585782810184015186820160e00152830161013c565b8181111561016a57600060e083880101525b50601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a806f6f204d6f2020c3a96f6fc3a96fc3a94d4d2020f09f9a806f6f20206f6ff09f9a80c3a96f6f4dc3a9c3a9c3a92020206f206f6f6f6f4d6fa2646970667358221220e65d9c18c6a43fa5b39e1f26ba3649770cee2b15b38361e885395fefcb99671e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_163a6aa1 {\n bool s_0;\n bytes7 s_1;\n bool s_2;\n address s_3;\n string s_4;\n }\n\n function test () public pure returns (S_163a6aa1 memory) {\n S_163a6aa1 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n bytes7 r_1 = bytes7(0x26fd047dd778ea);\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x62196AE41bD201Aa1bf06222D8Cf487c4bee9fD4;\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀oo Mo éooéoéMM 🚀oo oo🚀éooMééé o ooooMo\";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000026fd047dd778ea00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000062196ae41bd201aa1bf06222d8cf487c4bee9fd400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a806f6f204d6f2020c3a96f6fc3a96fc3a94d4d2020f09f9a806f6f20206f6ff09f9a80c3a96f6f4dc3a9c3a9c3a92020206f206f6f6f6f4d6f000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,int64,bytes11,string[])", + "type": "(bool,int64,bytes11,string[])", + "value": [ + false, + "5258602195772154302", + "0x38799cd468b2ff2a95235f", + [ + "Moo é🚀🚀 o ééM éMMoé oMéoo Mo🚀oé🚀éo oMo", + "Moo é🚀🚀éoMMoM🚀éé🚀oo MMM🚀é é🚀MMo 🚀ooM oMooMoé 🚀o 🚀M oéMM🚀M", + "Moo é🚀oé🚀 🚀oMMMMooo ooé🚀 oéMooéooooM 🚀🚀🚀éM🚀M", + "Moo é🚀🚀 M" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "5258602195772154302" + }, + { + "type": "hexstring", + "value": "0x38799cd468b2ff2a95235f" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀 o ééM éMMoé oMéoo Mo🚀oé🚀éo oMo" + }, + { + "type": "string", + "value": "Moo é🚀🚀éoMMoM🚀éé🚀oo MMM🚀é é🚀MMo 🚀ooM oMooMoé 🚀o 🚀M oéMM🚀M" + }, + { + "type": "string", + "value": "Moo é🚀oé🚀 🚀oMMMMooo ooé🚀 oéMooéooooM 🚀🚀🚀éM🚀M" + }, + { + "type": "string", + "value": "Moo é🚀🚀 M" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103e9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101e1565b60405180910390f35b604080516080808201835260008083526020808401829052838501829052606080850181905285519384018652828452838101526748fa4ed5f616a1be838201526a38799cd468b2ff2a95235f60a81b838601528451600480825260a082019096529394929391929082015b60608152602001906001900390816100ba57905050905060006040518060600160405280603b81526020016102cf603b913990508082600081518110610102576101026102b8565b602002602001018190525050600060405180608001604052806060815260200161030a606091399050808260018151811061013f5761013f6102b8565b60200260200101819052505060006040518060800160405280604a815260200161036a604a91399050808260028151811061017c5761017c6102b8565b6020026020010181905250506000604051806040016040528060128152602001714d6f6f20c3a9f09f9a80f09f9a802020204d60701b815250905080826003815181106101cb576101cb6102b8565b6020908102919091010152506060820152919050565b6000602080835260a0830184511515828501528185015160070b60408501526affffffffffffffffffffff60a81b6040860151166060850152606085015160808086015281815180845260c08701915060c08160051b880101935084830192506000805b828110156102aa5788860360bf1901845284518051808852835b8181101561027a578281018a01518982018b0152890161025f565b8181111561028a57848a838b0101525b50601f01601f191696909601870195509386019392860192600101610245565b509398975050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a80206f20c3a9c3a94d20c3a94d4d6fc3a9206f4dc3a96f6f204d6ff09f9a806fc3a9f09f9a80c3a96f20206f4d6f4d6f6f20c3a9f09f9a80f09f9a80c3a96f4d4d6f4df09f9a80c3a9c3a9f09f9a806f6f204d4d4df09f9a80c3a920c3a9f09f9a804d4d6f2020f09f9a806f6f4d206f4d6f6f4d6fc3a920f09f9a806f20f09f9a804d206fc3a94d4df09f9a804d4d6f6f20c3a9f09f9a806fc3a9f09f9a8020f09f9a806f4d4d4d4d6f6f6f206f6fc3a9f09f9a80206fc3a94d6f6fc3a96f6f6f6f4d20f09f9a80f09f9a80f09f9a80c3a94df09f9a804da2646970667358221220f6d53a30ddcf02e93a022524d06c0a1390b1922f78070945102db656b9f1632e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fa6fa055 {\n bool s_0;\n int64 s_1;\n bytes11 s_2;\n string[] s_3;\n }\n\n function test () public pure returns (S_fa6fa055 memory) {\n S_fa6fa055 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n int64 r_1 = 5258602195772154302;\n r.s_1 = r_1;\n }\n {\n bytes11 r_2 = bytes11(0x38799cd468b2ff2a95235f);\n r.s_2 = r_2;\n }\n {\n string[] memory r_3 = new string[](4);\n {\n string memory r_3_0 = unicode\"Moo é🚀🚀 o ééM éMMoé oMéoo Mo🚀oé🚀éo oMo\";\n r_3[0] = r_3_0;\n }\n {\n string memory r_3_1 = unicode\"Moo é🚀🚀éoMMoM🚀éé🚀oo MMM🚀é é🚀MMo 🚀ooM oMooMoé 🚀o 🚀M oéMM🚀M\";\n r_3[1] = r_3_1;\n }\n {\n string memory r_3_2 = unicode\"Moo é🚀oé🚀 🚀oMMMMooo ooé🚀 oéMooéooooM 🚀🚀🚀éM🚀M\";\n r_3[2] = r_3_2;\n }\n {\n string memory r_3_3 = unicode\"Moo é🚀🚀 M\";\n r_3[3] = r_3_3;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048fa4ed5f616a1be38799cd468b2ff2a95235f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000003b4d6f6f20c3a9f09f9a80f09f9a80206f20c3a9c3a94d20c3a94d4d6fc3a9206f4dc3a96f6f204d6ff09f9a806fc3a9f09f9a80c3a96f20206f4d6f000000000000000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a80f09f9a80c3a96f4d4d6f4df09f9a80c3a9c3a9f09f9a806f6f204d4d4df09f9a80c3a920c3a9f09f9a804d4d6f2020f09f9a806f6f4d206f4d6f6f4d6fc3a920f09f9a806f20f09f9a804d206fc3a94d4df09f9a804d000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a806fc3a9f09f9a8020f09f9a806f4d4d4d4d6f6f6f206f6fc3a9f09f9a80206fc3a94d6f6fc3a96f6f6f6f4d20f09f9a80f09f9a80f09f9a80c3a94df09f9a804d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a80f09f9a802020204d0000000000000000000000000000" + }, + { + "name": "random-(bool,string,int184,bytes32)[3]", + "type": "(bool,string,int184,bytes32)[3]", + "value": [ + [ + false, + "Moo é🚀 🚀 oM🚀 Mooo🚀oé éoMoo oo🚀o🚀o🚀M o o oéééé 🚀 M🚀🚀 ", + "-2355682185243814109792181213924941005316724947667662063", + "0x4a3236efb45f41736f8dd4bc6bd7c30d6417ddbbf675e89f9831b23151de902e" + ], + [ + false, + "Moo é🚀🚀🚀é🚀 🚀 oooo M🚀é🚀M🚀 éo ééo🚀🚀🚀", + "-3098723652200480385907393898084487824909372289653215355", + "0x351f2ebd24f0d17275417454488c04aef285ecdcc5fb993ec17d6d15e1cf0b0e" + ], + [ + true, + "Moo é🚀🚀M ooé o 🚀ooMo🚀éMoooMo 🚀ooéM M", + "9131177550595859543017832849951613072107026565031370986", + "0x06e8a179183b58ef92b536c2cc9711b8f2db8535f1c67f3243a2b99c04b71835" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀 🚀 oM🚀 Mooo🚀oé éoMoo oo🚀o🚀o🚀M o o oéééé 🚀 M🚀🚀 " + }, + { + "type": "number", + "value": "-2355682185243814109792181213924941005316724947667662063" + }, + { + "type": "hexstring", + "value": "0x4a3236efb45f41736f8dd4bc6bd7c30d6417ddbbf675e89f9831b23151de902e" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀é🚀 🚀 oooo M🚀é🚀M🚀 éo ééo🚀🚀🚀" + }, + { + "type": "number", + "value": "-3098723652200480385907393898084487824909372289653215355" + }, + { + "type": "hexstring", + "value": "0x351f2ebd24f0d17275417454488c04aef285ecdcc5fb993ec17d6d15e1cf0b0e" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀🚀M ooé o 🚀ooMo🚀éMoooMo 🚀ooéM M" + }, + { + "type": "number", + "value": "9131177550595859543017832849951613072107026565031370986" + }, + { + "type": "hexstring", + "value": "0x06e8a179183b58ef92b536c2cc9711b8f2db8535f1c67f3243a2b99c04b71835" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610446806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610276565b60405180910390f35b610056610230565b61005e610230565b6040805160808101825260008082526060602083018190529282018190529181019190915260008082526040805160808101909152605b8082526103b660208301396020830152507618982f2893d2d43aff032cd5e7e9048587983c685034ee1960408201527f4a3236efb45f41736f8dd4bc6bd7c30d6417ddbbf675e89f9831b23151de902e60608201528082600060200201525061011f6040805160808101825260008082526060602083018190529282018190529181019190915290565b60008082526040805160808101909152604b80825261036b602083013960208301525076205a28c2e641b6c6e4d4d6e9f5dc1a61a946adb59d107a1960408201527f351f2ebd24f0d17275417454488c04aef285ecdcc5fb993ec17d6d15e1cf0b0e6060820152808260016020020152506101bb6040805160808101825260008082526060602083018190529282018190529181019190915290565b6001815260408051606081019091526037808252600091906103346020830139602083015250765f557d36e4123525d4ada6db41e1294156dd95ae79a0ea6040808301919091527f06e8a179183b58ef92b536c2cc9711b8f2db8535f1c67f3243a2b99c04b718356060830152820152919050565b60405180606001604052806003905b60408051608081018252600080825260606020808401829052938301829052820152825260001990920191018161023f5790505090565b602080825260009060808382018185018685805b600381101561032557601f19808a8603018652835180511515865288810151888a8801528051808a890152855b818110156102d3578281018c015189820160a001528b016102b7565b818111156102e4578660a0838b0101525b5060409150818301516102fb838a018260160b9052565b50606092830151928801929092525095880195601f011690930160a001929186019160010161028a565b50919897505050505050505056fe4d6f6f20c3a9f09f9a80f09f9a804d206f6fc3a9206f20f09f9a806f6f4d6ff09f9a80c3a94d6f6f6f4d6f20f09f9a806f6fc3a94d204d4d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a9f09f9a8020f09f9a80206f6f6f6f204df09f9a80c3a9f09f9a804df09f9a8020c3a96f202020c3a9c3a96ff09f9a80f09f9a80f09f9a804d6f6f20c3a9f09f9a8020f09f9a80206f4df09f9a80204d6f6f6ff09f9a806fc3a920c3a96f4d6f6f20206f6ff09f9a806ff09f9a806ff09f9a804d206f206f206fc3a9c3a9c3a9c3a920f09f9a8020204df09f9a80f09f9a8020a26469706673582212200963025a971ce9bfb93154a983af691ddf73c6d7412e5b8f2bc503bf6f02285f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8f3fa6af {\n bool s_0;\n string s_1;\n int184 s_2;\n bytes32 s_3;\n }\n\n function test () public pure returns (S_8f3fa6af[3] memory) {\n S_8f3fa6af[3] memory r;\n {\n S_8f3fa6af memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀 🚀 oM🚀 Mooo🚀oé éoMoo oo🚀o🚀o🚀M o o oéééé 🚀 M🚀🚀 \";\n r_0.s_1 = r_0_1;\n }\n {\n int184 r_0_2 = -2355682185243814109792181213924941005316724947667662063;\n r_0.s_2 = r_0_2;\n }\n {\n bytes32 r_0_3 = bytes32(0x4a3236efb45f41736f8dd4bc6bd7c30d6417ddbbf675e89f9831b23151de902e);\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_8f3fa6af memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀🚀🚀é🚀 🚀 oooo M🚀é🚀M🚀 éo ééo🚀🚀🚀\";\n r_1.s_1 = r_1_1;\n }\n {\n int184 r_1_2 = -3098723652200480385907393898084487824909372289653215355;\n r_1.s_2 = r_1_2;\n }\n {\n bytes32 r_1_3 = bytes32(0x351f2ebd24f0d17275417454488c04aef285ecdcc5fb993ec17d6d15e1cf0b0e);\n r_1.s_3 = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_8f3fa6af memory r_2;\n {\n bool r_2_0 = true;\n r_2.s_0 = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀🚀M ooé o 🚀ooMo🚀éMoooMo 🚀ooéM M\";\n r_2.s_1 = r_2_1;\n }\n {\n int184 r_2_2 = 9131177550595859543017832849951613072107026565031370986;\n r_2.s_2 = r_2_2;\n }\n {\n bytes32 r_2_3 = bytes32(0x06e8a179183b58ef92b536c2cc9711b8f2db8535f1c67f3243a2b99c04b71835);\n r_2.s_3 = r_2_3;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffe767d0d76c2d2bc500fcd32a1816fb7a7867c397afcb114a3236efb45f41736f8dd4bc6bd7c30d6417ddbbf675e89f9831b23151de902e000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a8020f09f9a80206f4df09f9a80204d6f6f6ff09f9a806fc3a920c3a96f4d6f6f20206f6ff09f9a806ff09f9a806ff09f9a804d206f206f206fc3a9c3a9c3a9c3a920f09f9a8020204df09f9a80f09f9a8020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffdfa5d73d19be49391b2b29160a23e59e56b9524a62ef85351f2ebd24f0d17275417454488c04aef285ecdcc5fb993ec17d6d15e1cf0b0e000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a9f09f9a8020f09f9a80206f6f6f6f204df09f9a80c3a9f09f9a804df09f9a8020c3a96f202020c3a9c3a96ff09f9a80f09f9a80f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000005f557d36e4123525d4ada6db41e1294156dd95ae79a0ea06e8a179183b58ef92b536c2cc9711b8f2db8535f1c67f3243a2b99c04b7183500000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a80f09f9a804d206f6fc3a9206f20f09f9a806f6f4d6ff09f9a80c3a94d6f6f6f4d6f20f09f9a806f6fc3a94d204d000000000000000000" + }, + { + "name": "random-(bool,string,string,bool,address)", + "type": "(bool,string,string,bool,address)", + "value": [ + false, + "Moo é🚀éoooo 🚀éM 🚀 oéMMoooooé ooo o", + "Moo é🚀Mé🚀é🚀🚀M🚀oMo🚀o 🚀ooo🚀🚀oMé🚀🚀o🚀oo🚀é🚀 o M o🚀 ooé", + false, + "0xaB92CDD84623dD2FffAc6c438aB27D4008013F72" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀éoooo 🚀éM 🚀 oéMMoooooé ooo o" + }, + { + "type": "string", + "value": "Moo é🚀Mé🚀é🚀🚀M🚀oMo🚀o 🚀ooo🚀🚀oMé🚀🚀o🚀oo🚀é🚀 o M o🚀 ooé" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xaB92CDD84623dD2FffAc6c438aB27D4008013F72" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610297806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610157565b60405180910390f35b6100566100ce565b61005e6100ce565b6000808252604080516060810190915260308082526101cb602083013990508082602001819052505060006040518060a00160405280606781526020016101fb606791396040830152506000606082015273ab92cdd84623dd2fffac6c438ab27d4008013f726080820152919050565b6040518060a00160405280600015158152602001606081526020016060815260200160001515815260200160006001600160a01b031681525090565b6000815180845260005b8181101561013057602081850181015186830182015201610114565b81811115610142576000602083870101525b50601f01601f19169290920160200192915050565b602081528151151560208201526000602083015160a0604084015261017f60c084018261010a565b90506040840151601f1984830301606085015261019c828261010a565b60608601511515608086810191909152909501516001600160a01b031660a09094019390935250919291505056fe4d6f6f20c3a9f09f9a80c3a96f6f6f6f20f09f9a80c3a94d20f09f9a80206fc3a94d4d6f6f6f6f6fc3a9206f6f6f206f4d6f6f20c3a9f09f9a804dc3a9f09f9a80c3a9f09f9a80f09f9a804df09f9a806f4d6ff09f9a806f202020f09f9a806f6f6ff09f9a80f09f9a806f4dc3a9f09f9a80f09f9a806ff09f9a806f6ff09f9a80c3a9f09f9a80206f204d206ff09f9a8020206f6fc3a9a2646970667358221220d4d76dd4779a59a7441fb9bb913db03cd81f471f794c50fe50c37b26106da52464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b95b9387 {\n bool s_0;\n string s_1;\n string s_2;\n bool s_3;\n address s_4;\n }\n\n function test () public pure returns (S_b95b9387 memory) {\n S_b95b9387 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀éoooo 🚀éM 🚀 oéMMoooooé ooo o\";\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀Mé🚀é🚀🚀M🚀oMo🚀o 🚀ooo🚀🚀oMé🚀🚀o🚀oo🚀é🚀 o M o🚀 ooé\";\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n {\n address r_4 = 0xaB92CDD84623dD2FffAc6c438aB27D4008013F72;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab92cdd84623dd2fffac6c438ab27d4008013f7200000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a80c3a96f6f6f6f20f09f9a80c3a94d20f09f9a80206fc3a94d4d6f6f6f6f6fc3a9206f6f6f206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000674d6f6f20c3a9f09f9a804dc3a9f09f9a80c3a9f09f9a80f09f9a804df09f9a806f4d6ff09f9a806f202020f09f9a806f6f6ff09f9a80f09f9a806f4dc3a9f09f9a80f09f9a806ff09f9a806f6ff09f9a80c3a9f09f9a80206f204d206ff09f9a8020206f6fc3a900000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,string,uint192,uint96)[1]", + "type": "(bool,string,uint192,uint96)[1]", + "value": [ + [ + true, + "Moo é🚀oMMéo🚀ééMoM o🚀🚀oo 🚀o🚀oMM 🚀🚀 o", + "1719973027737116584387978042466882100443247099785247934393", + "7540142511990656111241834812" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀oMMéo🚀ééMoM o🚀🚀oo 🚀o🚀oMM 🚀🚀 o" + }, + { + "type": "number", + "value": "1719973027737116584387978042466882100443247099785247934393" + }, + { + "type": "number", + "value": "7540142511990656111241834812" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061026b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610121565b60405180910390f35b6100566100db565b61005e6100db565b6040805160808082018352606060208084018290526000848601819052918401829052600184528451928301909452604180835292939092906101f5908301396020830152507746255b35fa0414347a1689a8bff8708fd641f1852e5347b960408201526b185d0f489e165fc2967fb13c60608201528152919050565b60405180602001604052806001905b6040805160808101825260008082526060602080840182905293830182905282015282526000199092019101816100ea5790505090565b602080825260009060408382018185018685805b60018110156101e657601f19808a86030186528351608081511515875289820151818b890152805180838a01528692505b80831015610184578183018c015189840160a00152918b0191610166565b80831115610195578660a0828b0101525b838b01516001600160c01b0381168a8d015292506060938401516bffffffffffffffffffffffff81168a860152939250988b0198601f019093169690960160a0019550505091860191600101610135565b50919897505050505050505056fe4d6f6f20c3a9f09f9a806f4d4dc3a96ff09f9a80c3a9c3a94d6f4d20206ff09f9a80f09f9a806f6f20f09f9a806ff09f9a806f4d4d2020f09f9a80f09f9a80206fa26469706673582212206bc656726c10c54cf7a6144d9fd489c394d4bc4204c340b9cfa322abe4e3ceb364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_dca8d1f7 {\n bool s_0;\n string s_1;\n uint192 s_2;\n uint96 s_3;\n }\n\n function test () public pure returns (S_dca8d1f7[1] memory) {\n S_dca8d1f7[1] memory r;\n {\n S_dca8d1f7 memory r_0;\n {\n bool r_0_0 = true;\n r_0.s_0 = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀oMMéo🚀ééMoM o🚀🚀oo 🚀o🚀oMM 🚀🚀 o\";\n r_0.s_1 = r_0_1;\n }\n {\n uint192 r_0_2 = 1719973027737116584387978042466882100443247099785247934393;\n r_0.s_2 = r_0_2;\n }\n {\n uint96 r_0_3 = 7540142511990656111241834812;\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000046255b35fa0414347a1689a8bff8708fd641f1852e5347b90000000000000000000000000000000000000000185d0f489e165fc2967fb13c00000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a806f4d4dc3a96ff09f9a80c3a9c3a94d6f4d20206ff09f9a80f09f9a806f6f20f09f9a806ff09f9a806f4d4d2020f09f9a80f09f9a80206f00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,string[1],string,bytes8)", + "type": "(bool,string[1],string,bytes8)", + "value": [true, ["Moo é🚀"], "Moo é🚀🚀🚀", "0x8862131c5b41a1ed"], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀" + }, + { + "type": "hexstring", + "value": "0x8862131c5b41a1ed" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061024d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061017b565b60405180910390f35b6100566100d7565b61005e6100d7565b6001815261006a610107565b604080518082018252600a8152689adede418753e13f3560b71b602080830191909152908352838101929092528051808201825260128152709adede418753e13f3501e13f3501e13f3560771b92810192909252820152678862131c5b41a1ed60c01b6060820152919050565b60405180608001604052806000151581526020016100f3610107565b815260606020820152600060409091015290565b60405180602001604052806001905b60608152602001906001900390816101165790505090565b6000815180845260005b8181101561015457602081850181015186830182015201610138565b81811115610166576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825115158282015282810151608060408401526000919060c084019060a08501845b60018110156101d157609f198785030182526101bf84845161012e565b935091840191908401906001016101a2565b5050506040850151848203601f1901606086015291506101f1818361012e565b915050606084015161020f60808501826001600160c01b0319169052565b50939250505056fea2646970667358221220b47966eaea7816f3813fa5da2a1ae60a72fd1cfaa049e4fca14ab00a06eaf6ea64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_18dd3ea4 {\n bool s_0;\n string[1] s_1;\n string s_2;\n bytes8 s_3;\n }\n\n function test () public pure returns (S_18dd3ea4 memory) {\n S_18dd3ea4 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n string[1] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀\";\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀🚀🚀\";\n r.s_2 = r_2;\n }\n {\n bytes8 r_3 = bytes8(0x8862131c5b41a1ed);\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e08862131c5b41a1ed0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a80f09f9a80f09f9a800000000000000000000000000000" + }, + { + "name": "random-(bytes10,string,bytes4,(address,bool))", + "type": "(bytes10,string,bytes4,(address,bool))", + "value": [ + "0xc2e94ee6bd3bd036ec2a", + "Moo é🚀é🚀 Mo ééoMM MéMMo🚀🚀o🚀o 🚀", + "0xf216d829", + ["0x59F8DdDf8DE4ce294Ba243327C1bB5C1Bd7B7069", true] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc2e94ee6bd3bd036ec2a" + }, + { + "type": "string", + "value": "Moo é🚀é🚀 Mo ééoMM MéMMo🚀🚀o🚀o 🚀" + }, + { + "type": "hexstring", + "value": "0xf216d829" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x59F8DdDf8DE4ce294Ba243327C1bB5C1Bd7B7069" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610242806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610126565b60405180910390f35b60408051608080820183526000808352606060208085018290528486018390528551808701875283815280820184905282860152855193840186528284528381018290528386018390528551808701875283815280820184905284830152696174a7735e9de81b761560b11b8452855191820190955260358082529394929391929091906101d89083013960208381019190915263f216d82960e01b60408085019190915280518082019091527359f8dddf8de4ce294ba243327c1bb5c1bd7b70698152600191810191909152606083015250919050565b6000602080835269ffffffffffffffffffff60b01b845116818401528084015160a0604085015280518060c086015260005b818110156101745782810184015186820160e001528301610158565b8181111561018657600060e083880101525b5060408601516001600160e01b0319811660608701529250606086015180516001600160a01b031660808701526020810151151560a08701529250601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a80c3a9f09f9a80204d6f20c3a9c3a96f4d4d204dc3a94d4d6ff09f9a80f09f9a806ff09f9a806f20f09f9a80a26469706673582212207bad7d5dc19cbfb91db2e5eff2fd23a5552265df196dd96c230552bb1dfe3b7e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5cde0d08 {\n address s_0;\n bool s_1;\n }\n\n struct S_661b564c {\n bytes10 s_0;\n string s_1;\n bytes4 s_2;\n S_5cde0d08 s_3;\n }\n\n function test () public pure returns (S_661b564c memory) {\n S_661b564c memory r;\n {\n bytes10 r_0 = bytes10(0xc2e94ee6bd3bd036ec2a);\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀é🚀 Mo ééoMM MéMMo🚀🚀o🚀o 🚀\";\n r.s_1 = r_1;\n }\n {\n bytes4 r_2 = bytes4(0xf216d829);\n r.s_2 = r_2;\n }\n {\n S_5cde0d08 memory r_3;\n {\n address r_3_0 = 0x59F8DdDf8DE4ce294Ba243327C1bB5C1Bd7B7069;\n r_3.s_0 = r_3_0;\n }\n {\n bool r_3_1 = true;\n r_3.s_1 = r_3_1;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020c2e94ee6bd3bd036ec2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0f216d8290000000000000000000000000000000000000000000000000000000000000000000000000000000059f8dddf8de4ce294ba243327c1bb5c1bd7b7069000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000354d6f6f20c3a9f09f9a80c3a9f09f9a80204d6f20c3a9c3a96f4d4d204dc3a94d4d6ff09f9a80f09f9a806ff09f9a806f20f09f9a800000000000000000000000" + }, + { + "name": "random-(bytes11,bool,uint64,address,string)", + "type": "(bytes11,bool,uint64,address,string)", + "value": [ + "0xfa49df2809e552253c8019", + true, + "2479766837754982936", + "0x5D6c71b6886f275Cb5d4CC318e79d50da26Df991", + "Moo é🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xfa49df2809e552253c8019" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "2479766837754982936" + }, + { + "type": "address", + "value": "0x5D6c71b6886f275Cb5d4CC318e79d50da26Df991" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101c4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160a08082018352600080835260208084018290528385018290526060808501929092526080938401829052845192830185529282018181526afa49df2809e552253c801960a81b8352600183850152672269e6ccf22df21883860152735d6c71b6886f275cb5d4cc318e79d50da26df991918301919091528351808501909452600a8452689adede418753e13f3560b71b928401929092529190526040516100dc91906100e5565b60405180910390f35b600060208083526affffffffffffffffffffff60a81b84511681840152808401511515604084015267ffffffffffffffff604085015116606084015260018060a01b036060850151166080840152608084015160a08085015280518060c086015260005b818110156101655782810184015186820160e001528301610149565b8181111561017757600060e083880101525b50601f01601f19169390930160e00194935050505056fea26469706673582212205c02472652e5995a1d881f4945c5b7f57aff88921853bf3e35b201886c03088564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8e0b036e {\n bytes11 s_0;\n bool s_1;\n uint64 s_2;\n address s_3;\n string s_4;\n }\n\n function test () public pure returns (S_8e0b036e memory) {\n S_8e0b036e memory r;\n {\n bytes11 r_0 = bytes11(0xfa49df2809e552253c8019);\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n uint64 r_2 = 2479766837754982936;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x5D6c71b6886f275Cb5d4CC318e79d50da26Df991;\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀\";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020fa49df2809e552253c801900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000002269e6ccf22df2180000000000000000000000005d6c71b6886f275cb5d4cc318e79d50da26df99100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes13,int240,bool,address,bool)", + "type": "(bytes13,int240,bool,address,bool)", + "value": [ + "0x57adf218c76e026d9c63b7d834", + "324019450905474564599584975213104957372211815403909120373334937106086146", + true, + "0xd048A80C056229D1cf53431e3571dB4f6814A767", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x57adf218c76e026d9c63b7d834" + }, + { + "type": "number", + "value": "324019450905474564599584975213104957372211815403909120373334937106086146" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xd048A80C056229D1cf53431e3571dB4f6814A767" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061013b8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160a080820183526000808352602080840182905283850182905260608085018390526080948501839052855180850187528086019384526c15eb7c8631db809b6718edf60d609a1b8082527d2ef28ca5a2e506dffeb7d3065f146e5541eb594e4117b5761b59747379028285019081526001838a0190815273d048a80c056229d1cf53431e3571db4f6814a76793850193845289519283529051601d0b948201949094529251151583880152516001600160a01b031690820152905115159281019290925291519081900390910190f3fea26469706673582212209dc661f0389c84e7da110530b86364e6a573cde8673743cfa3dbcafd801d0ecf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_48ead1e5 {\n bytes13 s_0;\n int240 s_1;\n bool s_2;\n address s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_48ead1e5 memory) {\n S_48ead1e5 memory r;\n {\n bytes13 r_0 = bytes13(0x57adf218c76e026d9c63b7d834);\n r.s_0 = r_0;\n }\n {\n int240 r_1 = 324019450905474564599584975213104957372211815403909120373334937106086146;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xd048A80C056229D1cf53431e3571dB4f6814A767;\n r.s_3 = r_3;\n }\n {\n bool r_4 = false;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x57adf218c76e026d9c63b7d8340000000000000000000000000000000000000000002ef28ca5a2e506dffeb7d3065f146e5541eb594e4117b5761b59747379020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d048a80c056229d1cf53431e3571db4f6814a7670000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes13[2])[2][1][4]", + "type": "(bytes13[2])[2][1][4]", + "value": [ + [ + [ + [["0x4ca5b00e7c01eda53d7422d26a", "0xc170b44a2f7aaf88f44c1f84b4"]], + [["0x96cb6fb0cfce79bdbe072bb2ef", "0x928b22537a3cbdc481c2edb826"]] + ] + ], + [ + [ + [["0x03e37db0c7f37cde3e8eeb0a46", "0x49f47e755d4a7d0d6c87b7d07f"]], + [["0x7d11b8207d367187b18f60fc60", "0xd10e849f27c3ab6ea71e0d7250"]] + ] + ], + [ + [ + [["0x3c4f5f56f619229c4e7cffcba7", "0xc481efa7b09dec83cac3653ab3"]], + [["0xbea7bdb090b79643480d12edb8", "0x5afe4ab0dd76c49c12b52fbf39"]] + ] + ], + [ + [ + [["0xaccde71d949dedac047e9dc015", "0xf9f00338306e6dc47ced7fea6d"]], + [["0xf6866955ed2fef1a6e12247f10", "0x43cb596eddca6ad993f86228cd"]] + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x4ca5b00e7c01eda53d7422d26a" + }, + { + "type": "hexstring", + "value": "0xc170b44a2f7aaf88f44c1f84b4" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x96cb6fb0cfce79bdbe072bb2ef" + }, + { + "type": "hexstring", + "value": "0x928b22537a3cbdc481c2edb826" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x03e37db0c7f37cde3e8eeb0a46" + }, + { + "type": "hexstring", + "value": "0x49f47e755d4a7d0d6c87b7d07f" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x7d11b8207d367187b18f60fc60" + }, + { + "type": "hexstring", + "value": "0xd10e849f27c3ab6ea71e0d7250" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3c4f5f56f619229c4e7cffcba7" + }, + { + "type": "hexstring", + "value": "0xc481efa7b09dec83cac3653ab3" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xbea7bdb090b79643480d12edb8" + }, + { + "type": "hexstring", + "value": "0x5afe4ab0dd76c49c12b52fbf39" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xaccde71d949dedac047e9dc015" + }, + { + "type": "hexstring", + "value": "0xf9f00338306e6dc47ced7fea6d" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xf6866955ed2fef1a6e12247f10" + }, + { + "type": "hexstring", + "value": "0x43cb596eddca6ad993f86228cd" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061047e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061037c565b60405180910390f35b6100566102bf565b61005e6102bf565b6100666102ec565b61006e610319565b610076610346565b61007e61035e565b6c2652d8073e00f6d29eba11693560991b81526c305c2d128bdeabe23d1307e12d609a1b6020820152815281526100b3610346565b6100bb61035e565b6c96cb6fb0cfce79bdbe072bb2ef60981b81526c49459129bd1e5ee240e176dc1360991b602080830191909152908252820152815281526100fa6102ec565b610102610319565b61010a610346565b61011261035e565b6c01f1bed863f9be6f1f4775852360991b81526c49f47e755d4a7d0d6c87b7d07f60981b602082015281528152610147610346565b61014f61035e565b6c03e88dc103e9b38c3d8c7b07e3609d1b81526c0d10e849f27c3ab6ea71e0d725609c1b602080830191909152908252828101919091529082528201526101946102ec565b61019c610319565b6101a4610346565b6101ac61035e565b6c3c4f5f56f619229c4e7cffcba760981b81526cc481efa7b09dec83cac3653ab360981b6020820152815281526101e1610346565b6101e961035e565b6c17d4f7b61216f2c86901a25db7609b1b81526c5afe4ab0dd76c49c12b52fbf3960981b6020808301919091529082528201528152604082015261022b6102ec565b610233610319565b61023b610346565b61024361035e565b6caccde71d949dedac047e9dc01560981b81526cf9f00338306e6dc47ced7fea6d60981b602082015281528152610278610346565b61028061035e565b6c0f6866955ed2fef1a6e12247f1609c1b81526c43cb596eddca6ad993f86228cd60981b60208083019190915290825282015281526060820152919050565b60405180608001604052806004905b6102d66102ec565b8152602001906001900390816102ce5790505090565b60405180602001604052806001905b610303610319565b8152602001906001900390816102fb5790505090565b60405180604001604052806002905b610330610346565b8152602001906001900390816103285790505090565b604051806020016040528061035961035e565b905290565b60405180604001604052806002906020820280368337509192915050565b6102008101818360005b600481101561043f5781518360005b60018082106103a45750610426565b83518360005b60028082106103b9575061040c565b8351518360005b838110156103f357825172ffffffffffffffffffffffffffffffffffffff191682526020928301929091019087016103c0565b50505060209390930192506040919091019083016103aa565b505050602093909301925060809190910190600101610395565b5050506080929092019160209190910190600101610386565b5050509291505056fea264697066735822122029c8da50c4ae1a505fbcbbf9e6ec0f84bd809d0e8bbac60eeb04ef3d257b58db64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_4bd3a9e6 {\n bytes13[2] s_0;\n }\n\n function test () public pure returns (S_4bd3a9e6[2][1][4] memory) {\n S_4bd3a9e6[2][1][4] memory r;\n {\n S_4bd3a9e6[2][1] memory r_0;\n {\n S_4bd3a9e6[2] memory r_0_0;\n {\n S_4bd3a9e6 memory r_0_0_0;\n {\n bytes13[2] memory r_0_0_0_0;\n {\n bytes13 r_0_0_0_0_0 = bytes13(0x4ca5b00e7c01eda53d7422d26a);\n r_0_0_0_0[0] = r_0_0_0_0_0;\n }\n {\n bytes13 r_0_0_0_0_1 = bytes13(0xc170b44a2f7aaf88f44c1f84b4);\n r_0_0_0_0[1] = r_0_0_0_0_1;\n }\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n r_0_0[0] = r_0_0_0;\n }\n {\n S_4bd3a9e6 memory r_0_0_1;\n {\n bytes13[2] memory r_0_0_1_0;\n {\n bytes13 r_0_0_1_0_0 = bytes13(0x96cb6fb0cfce79bdbe072bb2ef);\n r_0_0_1_0[0] = r_0_0_1_0_0;\n }\n {\n bytes13 r_0_0_1_0_1 = bytes13(0x928b22537a3cbdc481c2edb826);\n r_0_0_1_0[1] = r_0_0_1_0_1;\n }\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n r_0_0[1] = r_0_0_1;\n }\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_4bd3a9e6[2][1] memory r_1;\n {\n S_4bd3a9e6[2] memory r_1_0;\n {\n S_4bd3a9e6 memory r_1_0_0;\n {\n bytes13[2] memory r_1_0_0_0;\n {\n bytes13 r_1_0_0_0_0 = bytes13(0x03e37db0c7f37cde3e8eeb0a46);\n r_1_0_0_0[0] = r_1_0_0_0_0;\n }\n {\n bytes13 r_1_0_0_0_1 = bytes13(0x49f47e755d4a7d0d6c87b7d07f);\n r_1_0_0_0[1] = r_1_0_0_0_1;\n }\n r_1_0_0.s_0 = r_1_0_0_0;\n }\n r_1_0[0] = r_1_0_0;\n }\n {\n S_4bd3a9e6 memory r_1_0_1;\n {\n bytes13[2] memory r_1_0_1_0;\n {\n bytes13 r_1_0_1_0_0 = bytes13(0x7d11b8207d367187b18f60fc60);\n r_1_0_1_0[0] = r_1_0_1_0_0;\n }\n {\n bytes13 r_1_0_1_0_1 = bytes13(0xd10e849f27c3ab6ea71e0d7250);\n r_1_0_1_0[1] = r_1_0_1_0_1;\n }\n r_1_0_1.s_0 = r_1_0_1_0;\n }\n r_1_0[1] = r_1_0_1;\n }\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n {\n S_4bd3a9e6[2][1] memory r_2;\n {\n S_4bd3a9e6[2] memory r_2_0;\n {\n S_4bd3a9e6 memory r_2_0_0;\n {\n bytes13[2] memory r_2_0_0_0;\n {\n bytes13 r_2_0_0_0_0 = bytes13(0x3c4f5f56f619229c4e7cffcba7);\n r_2_0_0_0[0] = r_2_0_0_0_0;\n }\n {\n bytes13 r_2_0_0_0_1 = bytes13(0xc481efa7b09dec83cac3653ab3);\n r_2_0_0_0[1] = r_2_0_0_0_1;\n }\n r_2_0_0.s_0 = r_2_0_0_0;\n }\n r_2_0[0] = r_2_0_0;\n }\n {\n S_4bd3a9e6 memory r_2_0_1;\n {\n bytes13[2] memory r_2_0_1_0;\n {\n bytes13 r_2_0_1_0_0 = bytes13(0xbea7bdb090b79643480d12edb8);\n r_2_0_1_0[0] = r_2_0_1_0_0;\n }\n {\n bytes13 r_2_0_1_0_1 = bytes13(0x5afe4ab0dd76c49c12b52fbf39);\n r_2_0_1_0[1] = r_2_0_1_0_1;\n }\n r_2_0_1.s_0 = r_2_0_1_0;\n }\n r_2_0[1] = r_2_0_1;\n }\n r_2[0] = r_2_0;\n }\n r[2] = r_2;\n }\n {\n S_4bd3a9e6[2][1] memory r_3;\n {\n S_4bd3a9e6[2] memory r_3_0;\n {\n S_4bd3a9e6 memory r_3_0_0;\n {\n bytes13[2] memory r_3_0_0_0;\n {\n bytes13 r_3_0_0_0_0 = bytes13(0xaccde71d949dedac047e9dc015);\n r_3_0_0_0[0] = r_3_0_0_0_0;\n }\n {\n bytes13 r_3_0_0_0_1 = bytes13(0xf9f00338306e6dc47ced7fea6d);\n r_3_0_0_0[1] = r_3_0_0_0_1;\n }\n r_3_0_0.s_0 = r_3_0_0_0;\n }\n r_3_0[0] = r_3_0_0;\n }\n {\n S_4bd3a9e6 memory r_3_0_1;\n {\n bytes13[2] memory r_3_0_1_0;\n {\n bytes13 r_3_0_1_0_0 = bytes13(0xf6866955ed2fef1a6e12247f10);\n r_3_0_1_0[0] = r_3_0_1_0_0;\n }\n {\n bytes13 r_3_0_1_0_1 = bytes13(0x43cb596eddca6ad993f86228cd);\n r_3_0_1_0[1] = r_3_0_1_0_1;\n }\n r_3_0_1.s_0 = r_3_0_1_0;\n }\n r_3_0[1] = r_3_0_1;\n }\n r_3[0] = r_3_0;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x4ca5b00e7c01eda53d7422d26a00000000000000000000000000000000000000c170b44a2f7aaf88f44c1f84b40000000000000000000000000000000000000096cb6fb0cfce79bdbe072bb2ef00000000000000000000000000000000000000928b22537a3cbdc481c2edb8260000000000000000000000000000000000000003e37db0c7f37cde3e8eeb0a460000000000000000000000000000000000000049f47e755d4a7d0d6c87b7d07f000000000000000000000000000000000000007d11b8207d367187b18f60fc6000000000000000000000000000000000000000d10e849f27c3ab6ea71e0d7250000000000000000000000000000000000000003c4f5f56f619229c4e7cffcba700000000000000000000000000000000000000c481efa7b09dec83cac3653ab300000000000000000000000000000000000000bea7bdb090b79643480d12edb8000000000000000000000000000000000000005afe4ab0dd76c49c12b52fbf3900000000000000000000000000000000000000accde71d949dedac047e9dc01500000000000000000000000000000000000000f9f00338306e6dc47ced7fea6d00000000000000000000000000000000000000f6866955ed2fef1a6e12247f100000000000000000000000000000000000000043cb596eddca6ad993f86228cd00000000000000000000000000000000000000" + }, + { + "name": "random-(bytes14,address,bool,bytes32)[4]", + "type": "(bytes14,address,bool,bytes32)[4]", + "value": [ + [ + "0xc599c9cae1569a7e05fc31603fef", + "0x82b3ac567c90740Fb1A7f3B2eF9FF6d5adAF4476", + false, + "0x92ec84952b4bd4a60f22f2d0a9bcd8d6f9237577e750d688fa7509dd13f7b6ac" + ], + [ + "0x28d113f46abef3a0489073c77d64", + "0x1EdAA122777632B4c21F60004b4c0DD5725f15C8", + false, + "0x06f9a40462c552a8bcc7272128d25dc68eb12fbf8aa74c10636c562ade99fe89" + ], + [ + "0xbbe74c501889f481faefa4d2d3f8", + "0x3905C24Fd36d9c7D230784E4fE987D8c7fD60a31", + true, + "0xe4438bfe53724608a325d0b04e767dae44e2d7187c7627da340570b0700b4caa" + ], + [ + "0x224da45e646486c182232f51ddad", + "0x99f17A7C4868A9acE4188fE5f6e63BfE6AaAdfeA", + false, + "0x42529bd61fe0b698ffbc414e49bc941b7c4fb1e2e2622ec549b6a7c436aab007" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc599c9cae1569a7e05fc31603fef" + }, + { + "type": "address", + "value": "0x82b3ac567c90740Fb1A7f3B2eF9FF6d5adAF4476" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x92ec84952b4bd4a60f22f2d0a9bcd8d6f9237577e750d688fa7509dd13f7b6ac" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x28d113f46abef3a0489073c77d64" + }, + { + "type": "address", + "value": "0x1EdAA122777632B4c21F60004b4c0DD5725f15C8" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x06f9a40462c552a8bcc7272128d25dc68eb12fbf8aa74c10636c562ade99fe89" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xbbe74c501889f481faefa4d2d3f8" + }, + { + "type": "address", + "value": "0x3905C24Fd36d9c7D230784E4fE987D8c7fD60a31" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xe4438bfe53724608a325d0b04e767dae44e2d7187c7627da340570b0700b4caa" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x224da45e646486c182232f51ddad" + }, + { + "type": "address", + "value": "0x99f17A7C4868A9acE4188fE5f6e63BfE6AaAdfeA" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x42529bd61fe0b698ffbc414e49bc941b7c4fb1e2e2622ec549b6a7c436aab007" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102ef806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610244565b60405180910390f35b6100566101fe565b61005e6101fe565b604080516080808201835260008284018190526dc599c9cae1569a7e05fc31603fef60901b83527382b3ac567c90740fb1a7f3b2ef9ff6d5adaf44766020808501919091527f92ec84952b4bd4a60f22f2d0a9bcd8d6f9237577e750d688fa7509dd13f7b6ac606080860191909152938652845180840186528086018390526d0a3444fd1aafbce812241cf1df5960921b8152731edaa122777632b4c21f60004b4c0dd5725f15c8818301527f06f9a40462c552a8bcc7272128d25dc68eb12fbf8aa74c10636c562ade99fe898186015286820152845180840186526d177ce98a03113e903f5df49a5a7f60931b8152733905c24fd36d9c7d230784e4fe987d8c7fd60a31818301526001818701527fe4438bfe53724608a325d0b04e767dae44e2d7187c7627da340570b0700b4caa818601528686015284519283018552938201526d224da45e646486c182232f51ddad60901b81527399f17a7c4868a9ace4188fe5f6e63bfe6aaadfea928101929092527f42529bd61fe0b698ffbc414e49bc941b7c4fb1e2e2622ec549b6a7c436aab00782820152820152919050565b60405180608001604052806004905b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018161020d5790505090565b6102008101818360005b60048110156102b0578151805171ffffffffffffffffffffffffffffffffffff191684526020808201516001600160a01b031681860152604080830151151590860152606091820151918501919091526080909301929091019060010161024e565b5050509291505056fea2646970667358221220d1bb1cef4269db95d1ba074be06876956d9a5ea019fb2110ef7129ee724ecde164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_bbae13a7 {\n bytes14 s_0;\n address s_1;\n bool s_2;\n bytes32 s_3;\n }\n\n function test () public pure returns (S_bbae13a7[4] memory) {\n S_bbae13a7[4] memory r;\n {\n S_bbae13a7 memory r_0;\n {\n bytes14 r_0_0 = bytes14(0xc599c9cae1569a7e05fc31603fef);\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0x82b3ac567c90740Fb1A7f3B2eF9FF6d5adAF4476;\n r_0.s_1 = r_0_1;\n }\n {\n bool r_0_2 = false;\n r_0.s_2 = r_0_2;\n }\n {\n bytes32 r_0_3 = bytes32(0x92ec84952b4bd4a60f22f2d0a9bcd8d6f9237577e750d688fa7509dd13f7b6ac);\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_bbae13a7 memory r_1;\n {\n bytes14 r_1_0 = bytes14(0x28d113f46abef3a0489073c77d64);\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0x1EdAA122777632B4c21F60004b4c0DD5725f15C8;\n r_1.s_1 = r_1_1;\n }\n {\n bool r_1_2 = false;\n r_1.s_2 = r_1_2;\n }\n {\n bytes32 r_1_3 = bytes32(0x06f9a40462c552a8bcc7272128d25dc68eb12fbf8aa74c10636c562ade99fe89);\n r_1.s_3 = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_bbae13a7 memory r_2;\n {\n bytes14 r_2_0 = bytes14(0xbbe74c501889f481faefa4d2d3f8);\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0x3905C24Fd36d9c7D230784E4fE987D8c7fD60a31;\n r_2.s_1 = r_2_1;\n }\n {\n bool r_2_2 = true;\n r_2.s_2 = r_2_2;\n }\n {\n bytes32 r_2_3 = bytes32(0xe4438bfe53724608a325d0b04e767dae44e2d7187c7627da340570b0700b4caa);\n r_2.s_3 = r_2_3;\n }\n r[2] = r_2;\n }\n {\n S_bbae13a7 memory r_3;\n {\n bytes14 r_3_0 = bytes14(0x224da45e646486c182232f51ddad);\n r_3.s_0 = r_3_0;\n }\n {\n address r_3_1 = 0x99f17A7C4868A9acE4188fE5f6e63BfE6AaAdfeA;\n r_3.s_1 = r_3_1;\n }\n {\n bool r_3_2 = false;\n r_3.s_2 = r_3_2;\n }\n {\n bytes32 r_3_3 = bytes32(0x42529bd61fe0b698ffbc414e49bc941b7c4fb1e2e2622ec549b6a7c436aab007);\n r_3.s_3 = r_3_3;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xc599c9cae1569a7e05fc31603fef00000000000000000000000000000000000000000000000000000000000082b3ac567c90740fb1a7f3b2ef9ff6d5adaf4476000000000000000000000000000000000000000000000000000000000000000092ec84952b4bd4a60f22f2d0a9bcd8d6f9237577e750d688fa7509dd13f7b6ac28d113f46abef3a0489073c77d640000000000000000000000000000000000000000000000000000000000001edaa122777632b4c21f60004b4c0dd5725f15c8000000000000000000000000000000000000000000000000000000000000000006f9a40462c552a8bcc7272128d25dc68eb12fbf8aa74c10636c562ade99fe89bbe74c501889f481faefa4d2d3f80000000000000000000000000000000000000000000000000000000000003905c24fd36d9c7d230784e4fe987d8c7fd60a310000000000000000000000000000000000000000000000000000000000000001e4438bfe53724608a325d0b04e767dae44e2d7187c7627da340570b0700b4caa224da45e646486c182232f51ddad00000000000000000000000000000000000000000000000000000000000099f17a7c4868a9ace4188fe5f6e63bfe6aaadfea000000000000000000000000000000000000000000000000000000000000000042529bd61fe0b698ffbc414e49bc941b7c4fb1e2e2622ec549b6a7c436aab007" + }, + { + "name": "random-(bytes21[3],string,address,bool)", + "type": "(bytes21[3],string,address,bool)", + "value": [ + [ + "0x1140e217f2bcc3e363bdb905087f2a46afb742da9b", + "0x70a00b1e0d18f6121ebe01fb40f4b13dfbca59f4ae", + "0x606e4f32192bac1e71de22db31502fddc3a9c798af" + ], + "Moo é🚀🚀ooMéooMé 🚀Méo éM 🚀🚀oééo oMo🚀 oo 🚀🚀MéoooMoo MM ", + "0xbf1055e9E535723f3fe3F631B12f0484894942eb", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x1140e217f2bcc3e363bdb905087f2a46afb742da9b" + }, + { + "type": "hexstring", + "value": "0x70a00b1e0d18f6121ebe01fb40f4b13dfbca59f4ae" + }, + { + "type": "hexstring", + "value": "0x606e4f32192bac1e71de22db31502fddc3a9c798af" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀ooMéooMé 🚀Méo éM 🚀🚀oééo oMo🚀 oo 🚀🚀MéoooMoo MM " + }, + { + "type": "address", + "value": "0xbf1055e9E535723f3fe3F631B12f0484894942eb" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061029e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610158565b60405180910390f35b61005661010d565b61005e61010d565b61006661013a565b741140e217f2bcc3e363bdb905087f2a46afb742da9b60581b8152743850058f068c7b090f5f00fda07a589efde52cfa5760591b60208083019190915274606e4f32192bac1e71de22db31502fddc3a9c798af60581b6040808401919091529183528151608081019092526055808352600092916102149083013960208301525073bf1055e9e535723f3fe3f631b12f0484894942eb604082015260006060820152919050565b604051806080016040528061012061013a565b815260606020820181905260006040830181905291015290565b60405180606001604052806003906020820280368337509192915050565b6020808252825160009190828483015b60038210156101955782516affffffffffffffffffffff1916815291830191600191909101908301610168565b5050508084015160c0608085015280518060e086015260005b818110156101cb57828101840151868201610100015283016101ae565b818111156101de57600061010083880101525b5060408601516001600160a01b031660a0860152606090950151151560c0850152505050601f909101601f191601610100019056fe4d6f6f20c3a9f09f9a80f09f9a806f6f4dc3a96f6f4dc3a920f09f9a804dc3a96f20c3a94d20f09f9a80f09f9a806fc3a9c3a96f206f4d6ff09f9a80206f6f20f09f9a80f09f9a804dc3a96f6f6f4d6f6f204d4d20a26469706673582212205d83e63703ecea782b8780b774102c3f05a2a8f4cebedc0202350c280496ebf564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f0eb260a {\n bytes21[3] s_0;\n string s_1;\n address s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_f0eb260a memory) {\n S_f0eb260a memory r;\n {\n bytes21[3] memory r_0;\n {\n bytes21 r_0_0 = bytes21(0x1140e217f2bcc3e363bdb905087f2a46afb742da9b);\n r_0[0] = r_0_0;\n }\n {\n bytes21 r_0_1 = bytes21(0x70a00b1e0d18f6121ebe01fb40f4b13dfbca59f4ae);\n r_0[1] = r_0_1;\n }\n {\n bytes21 r_0_2 = bytes21(0x606e4f32192bac1e71de22db31502fddc3a9c798af);\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀🚀ooMéooMé 🚀Méo éM 🚀🚀oééo oMo🚀 oo 🚀🚀MéoooMoo MM \";\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xbf1055e9E535723f3fe3F631B12f0484894942eb;\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000201140e217f2bcc3e363bdb905087f2a46afb742da9b000000000000000000000070a00b1e0d18f6121ebe01fb40f4b13dfbca59f4ae0000000000000000000000606e4f32192bac1e71de22db31502fddc3a9c798af000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000bf1055e9e535723f3fe3f631b12f0484894942eb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a80f09f9a806f6f4dc3a96f6f4dc3a920f09f9a804dc3a96f20c3a94d20f09f9a80f09f9a806fc3a9c3a96f206f4d6ff09f9a80206f6f20f09f9a80f09f9a804dc3a96f6f6f4d6f6f204d4d200000000000000000000000" + }, + { + "name": "random-(bytes23,string,string,string,string)", + "type": "(bytes23,string,string,string,string)", + "value": [ + "0x37c09fb5d774a5415957ffd3b0aabf243fa4a6fa567cfd", + "Moo é🚀éM", + "Moo é🚀", + "Moo é🚀o 🚀 🚀ooooM MM🚀oéooM🚀oMo🚀Méé 🚀ooéMé éoéo", + "Moo é🚀oM🚀🚀o oéoééMo 🚀 oo éM🚀🚀éo Mo🚀🚀oo" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x37c09fb5d774a5415957ffd3b0aabf243fa4a6fa567cfd" + }, + { + "type": "string", + "value": "Moo é🚀éM" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀o 🚀 🚀ooooM MM🚀oéooM🚀oMo🚀Méé 🚀ooéMé éoéo" + }, + { + "type": "string", + "value": "Moo é🚀oM🚀🚀o oéoééMo 🚀 oo éM🚀🚀éo Mo🚀🚀oo" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610326806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101ce565b60405180910390f35b61008c6040518060a00160405280600068ffffffffffffffffff19168152602001606081526020016060815260200160608152602001606081525090565b6100ca6040518060a00160405280600068ffffffffffffffffff19168152602001606081526020016060815260200160608152602001606081525090565b7f37c09fb5d774a5415957ffd3b0aabf243fa4a6fa567cfd0000000000000000008152604080518082018252600d81526c4d6f6f20c3a9f09f9a80c3a94d60981b6020808301919091528084019190915281518083018352600a8152689adede418753e13f3560b71b8183015282840152815160808101909252604a808352600092916102639083013960608301525060408051608081019091526044808252600091906102ad6020830139608083015250919050565b6000815180845260005b818110156101a75760208185018101518683018201520161018b565b818111156101b9576000602083870101525b50601f01601f19169290920160200192915050565b6020815268ffffffffffffffffff1982511660208201526000602083015160a0604084015261020060c0840182610181565b90506040840151601f198085840301606086015261021e8383610181565b9250606086015191508085840301608086015261023b8383610181565b925060808601519150808584030160a0860152506102598282610181565b9594505050505056fe4d6f6f20c3a9f09f9a806f20f09f9a8020f09f9a806f6f6f6f4d204d4df09f9a806fc3a96f6f4df09f9a806f4d6ff09f9a804dc3a9c3a920f09f9a806f6fc3a94dc3a920c3a96fc3a96f4d6f6f20c3a9f09f9a806f4df09f9a80f09f9a806f206fc3a96fc3a9c3a94d6f20f09f9a80206f6f20c3a94df09f9a80f09f9a80c3a96f204d6ff09f9a80f09f9a806f6fa26469706673582212205e372c62f792d01365b7760e402001b8cdec69603c1a5b1b77bc49513cc19b5b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7af988e9 {\n bytes23 s_0;\n string s_1;\n string s_2;\n string s_3;\n string s_4;\n }\n\n function test () public pure returns (S_7af988e9 memory) {\n S_7af988e9 memory r;\n {\n bytes23 r_0 = bytes23(0x37c09fb5d774a5415957ffd3b0aabf243fa4a6fa567cfd);\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀éM\";\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀\";\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀o 🚀 🚀ooooM MM🚀oéooM🚀oMo🚀Méé 🚀ooéMé éoéo\";\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀oM🚀🚀o oéoééMo 🚀 oo éM🚀🚀éo Mo🚀🚀oo\";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002037c09fb5d774a5415957ffd3b0aabf243fa4a6fa567cfd00000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a80c3a94d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a806f20f09f9a8020f09f9a806f6f6f6f4d204d4df09f9a806fc3a96f6f4df09f9a806f4d6ff09f9a804dc3a9c3a920f09f9a806f6fc3a94dc3a920c3a96fc3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444d6f6f20c3a9f09f9a806f4df09f9a80f09f9a806f206fc3a96fc3a9c3a94d6f20f09f9a80206f6f20c3a94df09f9a80f09f9a80c3a96f204d6ff09f9a80f09f9a806f6f00000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes28,(bytes10)[4],string,address)", + "type": "(bytes28,(bytes10)[4],string,address)", + "value": [ + "0x0f320fb4415aa668de724dcc5ea21ed90c7987faebb2f9cc932c2935", + [ + ["0x4fbccb84955a376728f8"], + ["0xf158032c7d0059e19300"], + ["0xc91921780ab90a820577"], + ["0x4aad0e55106915f85676"] + ], + "Moo é🚀oé🚀éoéMoéMMM ooé 🚀oMéoM🚀Mo🚀🚀oooo🚀🚀é oMoMo", + "0xdC6E99d224df3F04cCD425E172838B722E098692" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x0f320fb4415aa668de724dcc5ea21ed90c7987faebb2f9cc932c2935" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x4fbccb84955a376728f8" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf158032c7d0059e19300" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc91921780ab90a820577" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x4aad0e55106915f85676" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oé🚀éoéMoéMMM ooé 🚀oMéoM🚀Mo🚀🚀oooo🚀🚀é oMoMo" + }, + { + "type": "address", + "value": "0xdC6E99d224df3F04cCD425E172838B722E098692" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102e4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061019f565b60405180910390f35b61005661013c565b61005e61013c565b7f0f320fb4415aa668de724dcc5ea21ed90c7987faebb2f9cc932c293500000000815261008961016b565b60408051602080820183526909f7997092ab46ece51f60b31b82529083528151808201835268f158032c7d0059e19360b81b8152838201528151808201835269c91921780ab90a82057760b01b81528383015281518082018352692556872a88348afc2b3b60b11b8152606084015283810192909252805160808101909152604f8082526000926102609083013960408301525073dc6e99d224df3f04ccd425e172838b722e0986926060820152919050565b6040805160808101909152600081526020810161015761016b565b815260606020820152600060409091015290565b60405180608001604052806004905b60408051602081019091526000815281526020019060019003908161017a5790505090565b6000602080835263ffffffff1984511681840152808401516040840160005b60048110156101e6578251516001600160b01b031916825291830191908301906001016101be565b505050604084015160e060c085015280518061010086015260005b8181101561021e5782810184015186820161012001528301610201565b8181111561023157600061012083880101525b5060608601516001600160a01b03811660e08701529250601f01601f1916939093016101200194935050505056fe4d6f6f20c3a9f09f9a806fc3a9f09f9a80c3a96fc3a94d6fc3a94d4d4d206f6fc3a920f09f9a806f4dc3a96f4df09f9a804d6ff09f9a80f09f9a806f6f6f6ff09f9a80f09f9a80c3a9206f4d6f4d6fa2646970667358221220718bee6e4a998fd8c133cdadf08439fb9d6be5c5d34de629813e45a207e765a164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6ebf9ebb {\n bytes10 s_0;\n }\n\n struct S_223b0547 {\n bytes28 s_0;\n S_6ebf9ebb[4] s_1;\n string s_2;\n address s_3;\n }\n\n function test () public pure returns (S_223b0547 memory) {\n S_223b0547 memory r;\n {\n bytes28 r_0 = bytes28(0x0f320fb4415aa668de724dcc5ea21ed90c7987faebb2f9cc932c2935);\n r.s_0 = r_0;\n }\n {\n S_6ebf9ebb[4] memory r_1;\n {\n S_6ebf9ebb memory r_1_0;\n {\n bytes10 r_1_0_0 = bytes10(0x4fbccb84955a376728f8);\n r_1_0.s_0 = r_1_0_0;\n }\n r_1[0] = r_1_0;\n }\n {\n S_6ebf9ebb memory r_1_1;\n {\n bytes10 r_1_1_0 = bytes10(0xf158032c7d0059e19300);\n r_1_1.s_0 = r_1_1_0;\n }\n r_1[1] = r_1_1;\n }\n {\n S_6ebf9ebb memory r_1_2;\n {\n bytes10 r_1_2_0 = bytes10(0xc91921780ab90a820577);\n r_1_2.s_0 = r_1_2_0;\n }\n r_1[2] = r_1_2;\n }\n {\n S_6ebf9ebb memory r_1_3;\n {\n bytes10 r_1_3_0 = bytes10(0x4aad0e55106915f85676);\n r_1_3.s_0 = r_1_3_0;\n }\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀oé🚀éoéMoéMMM ooé 🚀oMéoM🚀Mo🚀🚀oooo🚀🚀é oMoMo\";\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xdC6E99d224df3F04cCD425E172838B722E098692;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200f320fb4415aa668de724dcc5ea21ed90c7987faebb2f9cc932c2935000000004fbccb84955a376728f800000000000000000000000000000000000000000000f158032c7d0059e1930000000000000000000000000000000000000000000000c91921780ab90a820577000000000000000000000000000000000000000000004aad0e55106915f856760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000dc6e99d224df3f04ccd425e172838b722e098692000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a806fc3a9f09f9a80c3a96fc3a94d6fc3a94d4d4d206f6fc3a920f09f9a806f4dc3a96f4df09f9a804d6ff09f9a80f09f9a806f6f6f6ff09f9a80f09f9a80c3a9206f4d6f4d6f0000000000000000000000000000000000" + }, + { + "name": "random-(bytes29,string,uint24,int32,address)", + "type": "(bytes29,string,uint24,int32,address)", + "value": [ + "0x3b35b83cab60e32863926252577aafcd498de218571e51cb28b56c3b02", + "Moo é🚀oM🚀MéMMoo🚀ééM🚀 o🚀ooo🚀oMo🚀o éoo o🚀oéMéo M ", + "12413609", + "691121706", + "0x163AC8c9B73BEc3B423Ce1cA3A6bDCc85e804CFd" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x3b35b83cab60e32863926252577aafcd498de218571e51cb28b56c3b02" + }, + { + "type": "string", + "value": "Moo é🚀oM🚀MéMMoo🚀ééM🚀 o🚀ooo🚀oMo🚀o éoo o🚀oéMéo M " + }, + { + "type": "number", + "value": "12413609" + }, + { + "type": "number", + "value": "691121706" + }, + { + "type": "address", + "value": "0x163AC8c9B73BEc3B423Ce1cA3A6bDCc85e804CFd" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061024f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061011d565b60405180910390f35b6040805160a081018252600080825260606020830181905292820181905291810182905260808101919091526040805160a081018252600080825260606020830181905292820181905291810182905260808101919091527f3b35b83cab60e32863926252577aafcd498de218571e51cb28b56c3b02000000815260408051608081019091526050808252600091906101ca602083013960208301525062bd6aa96040820152632931ae2a606082015273163ac8c9b73bec3b423ce1ca3a6bdcc85e804cfd6080820152919050565b6000602080835262ffffff19845116818401528084015160a0604085015280518060c086015260005b818110156101625782810184015186820160e001528301610146565b8181111561017457600060e083880101525b50604086015162ffffff8116606087015292506060860151925061019d608086018460030b9052565b60808601516001600160a01b03811660a08701529250601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a806f4df09f9a804dc3a94d4d6f6ff09f9a80c3a9c3a94df09f9a80206ff09f9a806f6f6ff09f9a806f4d6ff09f9a806f20c3a96f6f206ff09f9a806fc3a94dc3a96f2020204d20a26469706673582212209fdd97238f78f044a63eb5eb613addd87ccc5fecbddf392802471f76a82e096164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e2840c1c {\n bytes29 s_0;\n string s_1;\n uint24 s_2;\n int32 s_3;\n address s_4;\n }\n\n function test () public pure returns (S_e2840c1c memory) {\n S_e2840c1c memory r;\n {\n bytes29 r_0 = bytes29(0x3b35b83cab60e32863926252577aafcd498de218571e51cb28b56c3b02);\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀oM🚀MéMMoo🚀ééM🚀 o🚀ooo🚀oMo🚀o éoo o🚀oéMéo M \";\n r.s_1 = r_1;\n }\n {\n uint24 r_2 = 12413609;\n r.s_2 = r_2;\n }\n {\n int32 r_3 = 691121706;\n r.s_3 = r_3;\n }\n {\n address r_4 = 0x163AC8c9B73BEc3B423Ce1cA3A6bDCc85e804CFd;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000203b35b83cab60e32863926252577aafcd498de218571e51cb28b56c3b0200000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000bd6aa9000000000000000000000000000000000000000000000000000000002931ae2a000000000000000000000000163ac8c9b73bec3b423ce1ca3a6bdcc85e804cfd00000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a806f4df09f9a804dc3a94d4d6f6ff09f9a80c3a9c3a94df09f9a80206ff09f9a806f6f6ff09f9a806f4d6ff09f9a806f20c3a96f6f206ff09f9a806fc3a94dc3a96f2020204d2000000000000000000000000000000000" + }, + { + "name": "random-(bytes3,address,int144,string,int96)", + "type": "(bytes3,address,int144,string,int96)", + "value": [ + "0x8b5992", + "0xB18D8abd93C209f547A6f7aaD6E9c50D2C77223D", + "3552864244224561287885398794880727325626096", + "Moo é🚀o🚀é🚀MMo 🚀éo M é", + "-12602500443315503724777103930" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8b5992" + }, + { + "type": "address", + "value": "0xB18D8abd93C209f547A6f7aaD6E9c50D2C77223D" + }, + { + "type": "number", + "value": "3552864244224561287885398794880727325626096" + }, + { + "type": "string", + "value": "Moo é🚀o🚀é🚀MMo 🚀éo M é" + }, + { + "type": "number", + "value": "-12602500443315503724777103930" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610201806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610101565b60405180910390f35b6040805160a0808201835260008083526020808401829052838501829052606080850181905260808086018490528651948501875284820182905284018390526245acc960e91b845273b18d8abd93c209f547a6f7aad6e9c50d2c77223d848301527128c8edfba125a773a96d713e808822a44ef0848701528551908101909552602580865293949293919291906101a7908301396060830152506b28b88b45f8385df84532e239196080820152919050565b6000602080835262ffffff60e81b8451168184015260018060a01b0381850151166040840152604084015160110b6060840152606084015160a0608085015280518060c086015260005b818110156101675782810184015186820160e00152830161014b565b8181111561017957600060e083880101525b506080860151925061019060a0860184600b0b9052565b601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a806ff09f9a80c3a9f09f9a804d4d6f20f09f9a80c3a96f204d20c3a9a26469706673582212208999a8ef46784b1c2a9abca2780ffff528c95f60fbeab7bc55a226bca4a2b36e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_db30f816 {\n bytes3 s_0;\n address s_1;\n int144 s_2;\n string s_3;\n int96 s_4;\n }\n\n function test () public pure returns (S_db30f816 memory) {\n S_db30f816 memory r;\n {\n bytes3 r_0 = bytes3(0x8b5992);\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xB18D8abd93C209f547A6f7aaD6E9c50D2C77223D;\n r.s_1 = r_1;\n }\n {\n int144 r_2 = 3552864244224561287885398794880727325626096;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀o🚀é🚀MMo 🚀éo M é\";\n r.s_3 = r_3;\n }\n {\n int96 r_4 = -12602500443315503724777103930;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000208b59920000000000000000000000000000000000000000000000000000000000000000000000000000000000b18d8abd93c209f547a6f7aad6e9c50d2c77223d000000000000000000000000000028c8edfba125a773a96d713e808822a44ef000000000000000000000000000000000000000000000000000000000000000a0ffffffffffffffffffffffffffffffffffffffffd74774ba07c7a207bacd1dc600000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a806ff09f9a80c3a9f09f9a804d4d6f20f09f9a80c3a96f204d20c3a9000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes5,string)[3][3][1]", + "type": "(bytes5,string)[3][3][1]", + "value": [ + [ + [ + ["0x6cb63ac549", "Moo é🚀éooM🚀🚀ooo o🚀oo é"], + [ + "0xf3c843d437", + "Moo é🚀 🚀ooé é 🚀oMMoé M🚀🚀éoé🚀o é o🚀oo é éMoé MoMoo🚀 oé" + ], + ["0x708210442b", "Moo é🚀éM o Mé ooé🚀🚀MéM 🚀éMo"] + ], + [ + ["0x8fd491cc26", "Moo é🚀o🚀o é oooo🚀oooMo éoo Mo🚀oo🚀o🚀"], + ["0xf0fa6d03b1", "Moo é🚀o M M 🚀M oMo🚀ooéMéoM Mo ooo🚀é "], + ["0x541bbce16f", "Moo é🚀M o🚀"] + ], + [ + ["0x7cc8ac97b4", "Moo é🚀ooééooMéoooo🚀MMoM🚀🚀🚀 MMé"], + ["0x8c174f34dc", "Moo é🚀o Mé🚀oo 🚀Mo"], + ["0xb2c4a284f5", "Moo é🚀ooééoooM 🚀oM oooé oMoé oééééo🚀éooo🚀🚀🚀Moo🚀é🚀"] + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x6cb63ac549" + }, + { + "type": "string", + "value": "Moo é🚀éooM🚀🚀ooo o🚀oo é" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf3c843d437" + }, + { + "type": "string", + "value": "Moo é🚀 🚀ooé é 🚀oMMoé M🚀🚀éoé🚀o é o🚀oo é éMoé MoMoo🚀 oé" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x708210442b" + }, + { + "type": "string", + "value": "Moo é🚀éM o Mé ooé🚀🚀MéM 🚀éMo" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8fd491cc26" + }, + { + "type": "string", + "value": "Moo é🚀o🚀o é oooo🚀oooMo éoo Mo🚀oo🚀o🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf0fa6d03b1" + }, + { + "type": "string", + "value": "Moo é🚀o M M 🚀M oMo🚀ooéMéoM Mo ooo🚀é " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x541bbce16f" + }, + { + "type": "string", + "value": "Moo é🚀M o🚀" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x7cc8ac97b4" + }, + { + "type": "string", + "value": "Moo é🚀ooééooMéoooo🚀MMoM🚀🚀🚀 MMé" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8c174f34dc" + }, + { + "type": "string", + "value": "Moo é🚀o Mé🚀oo 🚀Mo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xb2c4a284f5" + }, + { + "type": "string", + "value": "Moo é🚀ooééoooM 🚀oM oooé oMoé oééééo🚀éooo🚀🚀🚀Moo🚀é🚀" + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506106f4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610410565b60405180910390f35b61005661037c565b61005e61037c565b6100666103a9565b61006e6103d6565b604080518082019091526000815260606020820152646cb63ac54960d81b815260408051606081019091526025808252600091906105dd6020830139602083015250808260006020020152506100d560408051808201909152600081526060602082015290565b64f3c843d43760d81b81526040805160808101909152605b8082526000919061058260208301396020830152508082600160200201525061012760408051808201909152600081526060602082015290565b64708210442b60d81b81526040805160608101909152602d808252600091906105556020830139602083015250604082015281526101636103d6565b6040805180820190915260008152606060208201526447ea48e61360d91b8152604080516060810190915260388082526000919061051d6020830139602083015250808260006020020152506101ca60408051808201909152600081526060602082015290565b64f0fa6d03b160d81b8152604080516060810190915260368082526000919061068960208301396020830152508082600160200201525061021c60408051808201909152600081526060602082015290565b64541bbce16f60d81b8152604080518082018252601181526f9adede418753e13f35009a40dfe13f35607f1b602080830191909152808401919091529083019190915282015261026a6103d6565b604080518082019091526000815260606020820152641f322b25ed60da1b815260408051606081019091526032808252600091906106026020830139602083015250808260006020020152506102d160408051808201909152600081526060602082015290565b642305d3cd3760da1b815260408051808201909152601c81527f4d6f6f20c3a9f09f9a806f204dc3a9f09f9a806f6f20f09f9a804d6f000000006020808301919091528201528082600160200201525061033c60408051808201909152600081526060602082015290565b64b2c4a284f560d81b8152604080516080810190915260558082526000919061063460208301396020830152506040808301919091528201528152919050565b60405180602001604052806001905b6103936103a9565b81526020019060019003908161038b5790505090565b60405180606001604052806003905b6103c06103d6565b8152602001906001900390816103b85790505090565b60405180606001604052806003905b6040805180820190915260008152606060208201528152602001906001900390816103e55790505090565b60208152600060208201604083018460005b600181101561051157601f19868403810185528251846060810160005b60038110156104f75787820383528351826060810160005b60038110156104df578582038352835164ffffffffff60d81b81511683526020810151905060406020840152805180604085015260005b818110156104ab576020818401810151606087840101520161048e565b818111156104bd576000606083870101525b506020958601959490940193601f018a16929092016060019150600101610457565b5060209687019695909501949350505060010161043f565b506020978801979096509490940193505050600101610422565b50909594505050505056fe4d6f6f20c3a9f09f9a806ff09f9a806f20c3a9206f6f6f6ff09f9a806f6f6f4d6f20c3a96f6f204d6ff09f9a806f6ff09f9a806ff09f9a804d6f6f20c3a9f09f9a80c3a94d206f204dc3a9206f6fc3a9f09f9a80f09f9a804dc3a94d20f09f9a80c3a94d6f4d6f6f20c3a9f09f9a8020f09f9a806f6fc3a920c3a92020f09f9a806f4d4d6fc3a9204df09f9a80f09f9a80c3a96fc3a9f09f9a806f2020c3a920206ff09f9a806f6f20c3a920c3a94d6fc3a9204d6f4d6f6ff09f9a80206fc3a94d6f6f20c3a9f09f9a80c3a96f6f4df09f9a80f09f9a806f6f6f206ff09f9a806f6f20c3a94d6f6f20c3a9f09f9a806f6fc3a9c3a96f6f4dc3a96f6f6f6ff09f9a804d4d6f4df09f9a80f09f9a80f09f9a80204d4dc3a94d6f6f20c3a9f09f9a806f6fc3a9c3a96f6f6f4d20f09f9a806f4d206f6f6fc3a9206f4d6fc3a920206fc3a9c3a9c3a9c3a96ff09f9a80c3a96f6f6ff09f9a80f09f9a80f09f9a804d6f6ff09f9a80c3a9f09f9a804d6f6f20c3a9f09f9a806f20204d204d20f09f9a804d20206f4d6ff09f9a806f6fc3a94dc3a96f4d204d6f206f6f6ff09f9a80c3a920a2646970667358221220beff344f2acba149067baf89c795ad0eab2eef63b478bdee544cc62201eef51c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b8c9ff5d {\n bytes5 s_0;\n string s_1;\n }\n\n function test () public pure returns (S_b8c9ff5d[3][3][1] memory) {\n S_b8c9ff5d[3][3][1] memory r;\n {\n S_b8c9ff5d[3][3] memory r_0;\n {\n S_b8c9ff5d[3] memory r_0_0;\n {\n S_b8c9ff5d memory r_0_0_0;\n {\n bytes5 r_0_0_0_0 = bytes5(0x6cb63ac549);\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n string memory r_0_0_0_1 = unicode\"Moo é🚀éooM🚀🚀ooo o🚀oo é\";\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n r_0_0[0] = r_0_0_0;\n }\n {\n S_b8c9ff5d memory r_0_0_1;\n {\n bytes5 r_0_0_1_0 = bytes5(0xf3c843d437);\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n {\n string memory r_0_0_1_1 = unicode\"Moo é🚀 🚀ooé é 🚀oMMoé M🚀🚀éoé🚀o é o🚀oo é éMoé MoMoo🚀 oé\";\n r_0_0_1.s_1 = r_0_0_1_1;\n }\n r_0_0[1] = r_0_0_1;\n }\n {\n S_b8c9ff5d memory r_0_0_2;\n {\n bytes5 r_0_0_2_0 = bytes5(0x708210442b);\n r_0_0_2.s_0 = r_0_0_2_0;\n }\n {\n string memory r_0_0_2_1 = unicode\"Moo é🚀éM o Mé ooé🚀🚀MéM 🚀éMo\";\n r_0_0_2.s_1 = r_0_0_2_1;\n }\n r_0_0[2] = r_0_0_2;\n }\n r_0[0] = r_0_0;\n }\n {\n S_b8c9ff5d[3] memory r_0_1;\n {\n S_b8c9ff5d memory r_0_1_0;\n {\n bytes5 r_0_1_0_0 = bytes5(0x8fd491cc26);\n r_0_1_0.s_0 = r_0_1_0_0;\n }\n {\n string memory r_0_1_0_1 = unicode\"Moo é🚀o🚀o é oooo🚀oooMo éoo Mo🚀oo🚀o🚀\";\n r_0_1_0.s_1 = r_0_1_0_1;\n }\n r_0_1[0] = r_0_1_0;\n }\n {\n S_b8c9ff5d memory r_0_1_1;\n {\n bytes5 r_0_1_1_0 = bytes5(0xf0fa6d03b1);\n r_0_1_1.s_0 = r_0_1_1_0;\n }\n {\n string memory r_0_1_1_1 = unicode\"Moo é🚀o M M 🚀M oMo🚀ooéMéoM Mo ooo🚀é \";\n r_0_1_1.s_1 = r_0_1_1_1;\n }\n r_0_1[1] = r_0_1_1;\n }\n {\n S_b8c9ff5d memory r_0_1_2;\n {\n bytes5 r_0_1_2_0 = bytes5(0x541bbce16f);\n r_0_1_2.s_0 = r_0_1_2_0;\n }\n {\n string memory r_0_1_2_1 = unicode\"Moo é🚀M o🚀\";\n r_0_1_2.s_1 = r_0_1_2_1;\n }\n r_0_1[2] = r_0_1_2;\n }\n r_0[1] = r_0_1;\n }\n {\n S_b8c9ff5d[3] memory r_0_2;\n {\n S_b8c9ff5d memory r_0_2_0;\n {\n bytes5 r_0_2_0_0 = bytes5(0x7cc8ac97b4);\n r_0_2_0.s_0 = r_0_2_0_0;\n }\n {\n string memory r_0_2_0_1 = unicode\"Moo é🚀ooééooMéoooo🚀MMoM🚀🚀🚀 MMé\";\n r_0_2_0.s_1 = r_0_2_0_1;\n }\n r_0_2[0] = r_0_2_0;\n }\n {\n S_b8c9ff5d memory r_0_2_1;\n {\n bytes5 r_0_2_1_0 = bytes5(0x8c174f34dc);\n r_0_2_1.s_0 = r_0_2_1_0;\n }\n {\n string memory r_0_2_1_1 = unicode\"Moo é🚀o Mé🚀oo 🚀Mo\";\n r_0_2_1.s_1 = r_0_2_1_1;\n }\n r_0_2[1] = r_0_2_1;\n }\n {\n S_b8c9ff5d memory r_0_2_2;\n {\n bytes5 r_0_2_2_0 = bytes5(0xb2c4a284f5);\n r_0_2_2.s_0 = r_0_2_2_0;\n }\n {\n string memory r_0_2_2_1 = unicode\"Moo é🚀ooééoooM 🚀oM oooé oMoé oééééo🚀éooo🚀🚀🚀Moo🚀é🚀\";\n r_0_2_2.s_1 = r_0_2_2_1;\n }\n r_0_2[2] = r_0_2_2;\n }\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000004e00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001c06cb63ac549000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a80c3a96f6f4df09f9a80f09f9a806f6f6f206ff09f9a806f6f20c3a9000000000000000000000000000000000000000000000000000000f3c843d4370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a8020f09f9a806f6fc3a920c3a92020f09f9a806f4d4d6fc3a9204df09f9a80f09f9a80c3a96fc3a9f09f9a806f2020c3a920206ff09f9a806f6f20c3a920c3a94d6fc3a9204d6f4d6f6ff09f9a80206fc3a90000000000708210442b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a80c3a94d206f204dc3a9206f6fc3a9f09f9a80f09f9a804dc3a94d20f09f9a80c3a94d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a08fd491cc26000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a806ff09f9a806f20c3a9206f6f6f6ff09f9a806f6f6f4d6f20c3a96f6f204d6ff09f9a806f6ff09f9a806ff09f9a800000000000000000f0fa6d03b1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a806f20204d204d20f09f9a804d20206f4d6ff09f9a806f6fc3a94dc3a96f4d204d6f206f6f6ff09f9a80c3a92000000000000000000000541bbce16f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a804d206ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001807cc8ac97b4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a806f6fc3a9c3a96f6f4dc3a96f6f6f6ff09f9a804d4d6f4df09f9a80f09f9a80f09f9a80204d4dc3a900000000000000000000000000008c174f34dc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a806f204dc3a9f09f9a806f6f20f09f9a804d6f00000000b2c4a284f5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a806f6fc3a9c3a96f6f6f4d20f09f9a806f4d206f6f6fc3a9206f4d6fc3a920206fc3a9c3a9c3a9c3a96ff09f9a80c3a96f6f6ff09f9a80f09f9a80f09f9a804d6f6ff09f9a80c3a9f09f9a800000000000000000000000" + }, + { + "name": "random-(bytes5,uint,bool,bytes22)[1]", + "type": "(bytes5,uint,bool,bytes22)[1]", + "value": [ + [ + "0x0be9281224", + "14013096960165215618075624220897168527255282550546504599819184245622546960435", + false, + "0x7a0cd267c9a78c3aa048471655faf5efffbd835a39a5" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x0be9281224" + }, + { + "type": "number", + "value": "14013096960165215618075624220897168527255282550546504599819184245622546960435" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x7a0cd267c9a78c3aa048471655faf5efffbd835a39a5" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061010e565b60405180910390f35b6100566100c8565b61005e6100c8565b604080516080810182526000918101919091526402fa4a048960da1b81527f1efb21be592645f2886259fd779227b90cf5deb663c8ea6a74c3d39c98a110336020820152757a0cd267c9a78c3aa048471655faf5efffbd835a39a560501b60608201528152919050565b60405180602001604052806001905b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816100d75790505090565b608081810190828460005b600181101561017257815180516001600160d81b03191684526020808201518186015260408083015115159086015260609182015169ffffffffffffffffffff1916918501919091529284019290910190600101610119565b505050509291505056fea2646970667358221220f7b9349bf31ef7bae3c9803ea006db232d60380312ef8861d601acf1dd64571564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_55475cac {\n bytes5 s_0;\n uint256 s_1;\n bool s_2;\n bytes22 s_3;\n }\n\n function test () public pure returns (S_55475cac[1] memory) {\n S_55475cac[1] memory r;\n {\n S_55475cac memory r_0;\n {\n bytes5 r_0_0 = bytes5(0x0be9281224);\n r_0.s_0 = r_0_0;\n }\n {\n uint r_0_1 = 14013096960165215618075624220897168527255282550546504599819184245622546960435;\n r_0.s_1 = r_0_1;\n }\n {\n bool r_0_2 = false;\n r_0.s_2 = r_0_2;\n }\n {\n bytes22 r_0_3 = bytes22(0x7a0cd267c9a78c3aa048471655faf5efffbd835a39a5);\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0be92812240000000000000000000000000000000000000000000000000000001efb21be592645f2886259fd779227b90cf5deb663c8ea6a74c3d39c98a1103300000000000000000000000000000000000000000000000000000000000000007a0cd267c9a78c3aa048471655faf5efffbd835a39a500000000000000000000" + }, + { + "name": "random-(bytes7,bool[],string,bool)", + "type": "(bytes7,bool[],string,bool)", + "value": ["0x10f10e906628f6", [], "Moo é🚀oM🚀 🚀Méo MMoééo🚀🚀Mo", true], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x10f10e906628f6" + }, + { + "type": "array", + "value": [] + }, + { + "type": "string", + "value": "Moo é🚀oM🚀 🚀Méo MMoééo🚀🚀Mo" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610228806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061012d565b60405180910390f35b6100566100ac565b61005e6100ac565b660878874833147b60c91b81526040805160008082526020808301845280850192909252825160608101909352602d8084529092916101c69083013960408301525060016060820152919050565b604051806080016040528060006001600160c81b031916815260200160608152602001606081526020016000151581525090565b6000815180845260005b81811015610106576020818501810151868301820152016100ea565b81811115610118576000602083870101525b50601f01601f19169290920160200192915050565b602080825282516001600160c81b031916828201528281015160806040840152805160a0840181905260009291820190839060c08601905b8083101561018757835115158252928401926001929092019190840190610165565b506040870151868203601f1901606088015293506101a581856100e0565b935050505060608401516101bd608085018215159052565b50939250505056fe4d6f6f20c3a9f09f9a806f4df09f9a802020f09f9a804dc3a96f204d4d6fc3a9c3a96ff09f9a80f09f9a804d6fa26469706673582212200bc3d1ddc312a6d485e4df0d832427ac877143298a481d8b295fb1b91462046064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_776878f7 {\n bytes7 s_0;\n bool[] s_1;\n string s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_776878f7 memory) {\n S_776878f7 memory r;\n {\n bytes7 r_0 = bytes7(0x10f10e906628f6);\n r.s_0 = r_0;\n }\n {\n bool[] memory r_1 = new bool[](0);\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀oM🚀 🚀Méo MMoééo🚀🚀Mo\";\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002010f10e906628f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a806f4df09f9a802020f09f9a804dc3a96f204d4d6fc3a9c3a96ff09f9a80f09f9a804d6f00000000000000000000000000000000000000" + }, + { + "name": "random-(bytes9,bytes21,bytes31[4],int184)", + "type": "(bytes9,bytes21,bytes31[4],int184)", + "value": [ + "0x678995ceed7ec2f47a", + "0x123d43e78ac77406f5a9de267d30a5c55ff9041942", + [ + "0x55ebadeef1e9ce62c1092e40f040e50d3d17e13f8a47ff58349420e8e1839d", + "0xabacdca88f36f027a21c0b93cde950824801445736c0d9c283de9309622420", + "0xbc57cf0c1cd0450b541a1512109b4978e44654ef517fe017e0ec9c0af7dd13", + "0x29bbca53bcca1467114987cb3ecff7e84c8844b8286ecf6aae10d39928b4c8" + ], + "-2169982982432316923621529215027541619168876614860676698" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x678995ceed7ec2f47a" + }, + { + "type": "hexstring", + "value": "0x123d43e78ac77406f5a9de267d30a5c55ff9041942" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x55ebadeef1e9ce62c1092e40f040e50d3d17e13f8a47ff58349420e8e1839d" + }, + { + "type": "hexstring", + "value": "0xabacdca88f36f027a21c0b93cde950824801445736c0d9c283de9309622420" + }, + { + "type": "hexstring", + "value": "0xbc57cf0c1cd0450b541a1512109b4978e44654ef517fe017e0ec9c0af7dd13" + }, + { + "type": "hexstring", + "value": "0x29bbca53bcca1467114987cb3ecff7e84c8844b8286ecf6aae10d39928b4c8" + } + ] + }, + { + "type": "number", + "value": "-2169982982432316923621529215027541619168876614860676698" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610248806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101a3565b60405180910390f35b610056610159565b61005e610159565b6833c4cae776bf617a3d60b91b815274091ea1f3c563ba037ad4ef133e9852e2affc820ca160591b6020820152610093610185565b7f55ebadeef1e9ce62c1092e40f040e50d3d17e13f8a47ff58349420e8e1839d0081527fabacdca88f36f027a21c0b93cde950824801445736c0d9c283de93096224200060208201527fbc57cf0c1cd0450b541a1512109b4978e44654ef517fe017e0ec9c0af7dd13006040808301919091527f29bbca53bcca1467114987cb3ecff7e84c8844b8286ecf6aae10d39928b4c800606080840191909152908301919091527616a7da9b9c96ab400dfad0c37308adceb8852739901e591990820152919050565b6040805160808101825260008082526020820152908101610178610185565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b81516001600160b81b03191681526020808301516affffffffffffffffffffff19168183015260408084015160e084019291840160005b60048110156101fb57825160ff1916825291830191908301906001016101da565b50505050606083015160160b60c08301529291505056fea264697066735822122027beb406d12fb49287db2116d4009e85a4130fa6e7d7106ca68f98db3399204e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d0a22222 {\n bytes9 s_0;\n bytes21 s_1;\n bytes31[4] s_2;\n int184 s_3;\n }\n\n function test () public pure returns (S_d0a22222 memory) {\n S_d0a22222 memory r;\n {\n bytes9 r_0 = bytes9(0x678995ceed7ec2f47a);\n r.s_0 = r_0;\n }\n {\n bytes21 r_1 = bytes21(0x123d43e78ac77406f5a9de267d30a5c55ff9041942);\n r.s_1 = r_1;\n }\n {\n bytes31[4] memory r_2;\n {\n bytes31 r_2_0 = bytes31(0x55ebadeef1e9ce62c1092e40f040e50d3d17e13f8a47ff58349420e8e1839d);\n r_2[0] = r_2_0;\n }\n {\n bytes31 r_2_1 = bytes31(0xabacdca88f36f027a21c0b93cde950824801445736c0d9c283de9309622420);\n r_2[1] = r_2_1;\n }\n {\n bytes31 r_2_2 = bytes31(0xbc57cf0c1cd0450b541a1512109b4978e44654ef517fe017e0ec9c0af7dd13);\n r_2[2] = r_2_2;\n }\n {\n bytes31 r_2_3 = bytes31(0x29bbca53bcca1467114987cb3ecff7e84c8844b8286ecf6aae10d39928b4c8);\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n int184 r_3 = -2169982982432316923621529215027541619168876614860676698;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x678995ceed7ec2f47a0000000000000000000000000000000000000000000000123d43e78ac77406f5a9de267d30a5c55ff9041942000000000000000000000055ebadeef1e9ce62c1092e40f040e50d3d17e13f8a47ff58349420e8e1839d00abacdca88f36f027a21c0b93cde950824801445736c0d9c283de930962242000bc57cf0c1cd0450b541a1512109b4978e44654ef517fe017e0ec9c0af7dd130029bbca53bcca1467114987cb3ecff7e84c8844b8286ecf6aae10d39928b4c800ffffffffffffffffffe9582564636954bff2052f3c8cf75231477ad8c66fe1a6" + }, + { + "name": "random-(int192,string,string,address,bool)", + "type": "(int192,string,string,address,bool)", + "value": [ + "2413698920002083308521352010093782778699311555874054536396", + "Moo é🚀é", + "Moo é🚀oMéM🚀", + "0x82035DFda4B814f1c7D7d42Aa7D6f791AA9bFBE3", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "2413698920002083308521352010093782778699311555874054536396" + }, + { + "type": "string", + "value": "Moo é🚀é" + }, + { + "type": "string", + "value": "Moo é🚀oMéM🚀" + }, + { + "type": "address", + "value": "0x82035DFda4B814f1c7D7d42Aa7D6f791AA9bFBE3" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610229806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610182565b60405180910390f35b6100566100f8565b61005e6100f8565b776270314b4eac714c475c28ba3d026a3d9cd7d8c3e700fccc8152604080518082018252600c81526b4d6f6f20c3a9f09f9a80c3a960a01b602080830191909152808401919091528151808301835260138152719adede418753e13f3500de9b87529be13f35606f1b91810191909152908201527382035dfda4b814f1c7d7d42aa7d6f791aa9bfbe3606082015260006080820152919050565b6040518060a00160405280600060170b8152602001606081526020016060815260200160006001600160a01b031681526020016000151581525090565b6000815180845260005b8181101561015b5760208185018101518683018201520161013f565b8181111561016d576000602083870101525b50601f01601f19169290920160200192915050565b60208152815160170b60208201526000602083015160a060408401526101ab60c0840182610135565b90506040840151601f198483030160608501526101c88282610135565b91505060018060a01b0360608501511660808401526080840151151560a0840152809150509291505056fea26469706673582212208db060cdd5241dacc7dc16df2570c78d3b1822b6767bac479eaca1528922211b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d4fefa72 {\n int192 s_0;\n string s_1;\n string s_2;\n address s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_d4fefa72 memory) {\n S_d4fefa72 memory r;\n {\n int192 r_0 = 2413698920002083308521352010093782778699311555874054536396;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀é\";\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀oMéM🚀\";\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x82035DFda4B814f1c7D7d42Aa7D6f791AA9bFBE3;\n r.s_3 = r_3;\n }\n {\n bool r_4 = false;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000006270314b4eac714c475c28ba3d026a3d9cd7d8c3e700fccc00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000082035dfda4b814f1c7d7d42aa7d6f791aa9bfbe30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a806f4dc3a94df09f9a8000000000000000000000000000" + }, + { + "name": "random-(int200,int80,bytes6,bool,bytes32)", + "type": "(int200,int80,bytes6,bool,bytes32)", + "value": [ + "-9653272937910036029450260313048581350739564711395453278676", + "-88811839108312516779887", + "0x4f15d6a147be", + true, + "0x437a02d421d8a0d4a93733402b605aef99749796b88aa94eb168423f49d32cb7" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-9653272937910036029450260313048581350739564711395453278676" + }, + { + "type": "number", + "value": "-88811839108312516779887" + }, + { + "type": "hexstring", + "value": "0x4f15d6a147be" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x437a02d421d8a0d4a93733402b605aef99749796b88aa94eb168423f49d32cb7" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061014c8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160a0808201835260008083526020808401829052838501829052606080850183905260809485019290925284518084018652780189b0df3ece34c223eda223a879ee4c52c9d1f212680799d3198082526912ce7fdba3b8506fdf6e1982840190815265278aeb50a3df60d11b83890190815260018487019081527f437a02d421d8a0d4a93733402b605aef99749796b88aa94eb168423f49d32cb79489019485528951938452915160090b9483019490945292516001600160d01b03191696810196909652905115159185019190915251918301919091520160405180910390f3fea2646970667358221220b348a774efdbf79486ae23e839cde99a2b3a50486b545dc3bbf6597174901c0364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ef5a24b9 {\n int200 s_0;\n int80 s_1;\n bytes6 s_2;\n bool s_3;\n bytes32 s_4;\n }\n\n function test () public pure returns (S_ef5a24b9 memory) {\n S_ef5a24b9 memory r;\n {\n int200 r_0 = -9653272937910036029450260313048581350739564711395453278676;\n r.s_0 = r_0;\n }\n {\n int80 r_1 = -88811839108312516779887;\n r.s_1 = r_1;\n }\n {\n bytes6 r_2 = bytes6(0x4f15d6a147be);\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n {\n bytes32 r_4 = bytes32(0x437a02d421d8a0d4a93733402b605aef99749796b88aa94eb168423f49d32cb7);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0xfffffffffffffffe764f20c131cb3ddc125ddc578611b3ad362e0ded97f8662cffffffffffffffffffffffffffffffffffffffffffffed3180245c47af9020914f15d6a147be00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001437a02d421d8a0d4a93733402b605aef99749796b88aa94eb168423f49d32cb7" + }, + { + "name": "random-(int224,bytes30,int208,string,(int112))", + "type": "(int224,bytes30,int208,string,(int112))", + "value": [ + "-9105719795106554047930746092665238712519127951244098609066012870448", + "0xb6ceccb496e64de88c59fec7f2524df003bd0c6fd2617a7871ba00849bdf", + "42175208086979716352911835331551109579647877915138719547545250", + "Moo é🚀ééMéMo🚀éééo🚀MM oo oM oM🚀 ", + ["-1303109308777311781220975718562221"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-9105719795106554047930746092665238712519127951244098609066012870448" + }, + { + "type": "hexstring", + "value": "0xb6ceccb496e64de88c59fec7f2524df003bd0c6fd2617a7871ba00849bdf" + }, + { + "type": "number", + "value": "42175208086979716352911835331551109579647877915138719547545250" + }, + { + "type": "string", + "value": "Moo é🚀ééMéMo🚀éééo🚀MM oo oM oM🚀 " + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-1303109308777311781220975718562221" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610276806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610176565b60405180910390f35b6100876040805160a081018252600080825260208083018290528284018290526060808401528351908101909352825290608082015290565b6100c06040805160a081018252600080825260208083018290528284018290526060808401528351908101909352825290608082015290565b7fffffffffa98938a8f00dbfee4f5dbb9150b82e8b2370feede9e5138ee9fb78d081527fb6ceccb496e64de88c59fec7f2524df003bd0c6fd2617a7871ba00849bdf0000602080830191909152791a3ee5f607aca34f638dcf20f1e9124cf84845a2d18addca56a2604080840191909152805160608101909152603280825260009261020f9083013960608301525060408051602081019091526d403f8d44420a45b1f147e6e5f9ac1981526080820152919050565b600060208083528351601b0b8184015261ffff1981850151166040840152604084015160190b6060840152606084015160a0608085015280518060c086015260005b818110156101d45782810184015186820160e0015283016101b8565b818111156101e657600060e083880101525b5060808601518051600d0b60a08701529250601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a80c3a9c3a94dc3a94d6ff09f9a80c3a9c3a9c3a96ff09f9a804d4d206f6f206f4d206f4df09f9a8020a26469706673582212200847792b9dc1c8dfe7e0c3e900e2a58dbdcb737d472ed1fcf9f1c69dfaaae0a264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_cc4fa54a {\n int112 s_0;\n }\n\n struct S_eb3731b4 {\n int224 s_0;\n bytes30 s_1;\n int208 s_2;\n string s_3;\n S_cc4fa54a s_4;\n }\n\n function test () public pure returns (S_eb3731b4 memory) {\n S_eb3731b4 memory r;\n {\n int224 r_0 = -9105719795106554047930746092665238712519127951244098609066012870448;\n r.s_0 = r_0;\n }\n {\n bytes30 r_1 = bytes30(0xb6ceccb496e64de88c59fec7f2524df003bd0c6fd2617a7871ba00849bdf);\n r.s_1 = r_1;\n }\n {\n int208 r_2 = 42175208086979716352911835331551109579647877915138719547545250;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀ééMéMo🚀éééo🚀MM oo oM oM🚀 \";\n r.s_3 = r_3;\n }\n {\n S_cc4fa54a memory r_4;\n {\n int112 r_4_0 = -1303109308777311781220975718562221;\n r_4.s_0 = r_4_0;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020ffffffffa98938a8f00dbfee4f5dbb9150b82e8b2370feede9e5138ee9fb78d0b6ceccb496e64de88c59fec7f2524df003bd0c6fd2617a7871ba00849bdf00000000000000001a3ee5f607aca34f638dcf20f1e9124cf84845a2d18addca56a200000000000000000000000000000000000000000000000000000000000000a0ffffffffffffffffffffffffffffffffffffbfc072bbbdf5ba4e0eb8191a065300000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a80c3a9c3a94dc3a94d6ff09f9a80c3a9c3a9c3a96ff09f9a804d4d206f6f206f4d206f4df09f9a80200000000000000000000000000000" + }, + { + "name": "random-(string,((string),int256,uint232),bool)", + "type": "(string,((string),int256,uint232),bool)", + "value": [ + "Moo é🚀oé🚀o🚀éMo🚀M Méo🚀🚀Méooo🚀oMMé oooé M🚀MoééMé o🚀ooo🚀oMMooé🚀o", + [ + ["Moo é🚀oéMMoo éooooo o 🚀"], + "42563491640957900618994432655253760561004150816914814309927647005008245526532", + "5651519194610496945831788810263422329528309064093968274676720551146022" + ], + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oé🚀o🚀éMo🚀M Méo🚀🚀Méooo🚀oMMé oooé M🚀MoééMé o🚀ooo🚀oMMooé🚀o" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéMMoo éooooo o 🚀" + } + ] + }, + { + "type": "number", + "value": "42563491640957900618994432655253760561004150816914814309927647005008245526532" + }, + { + "type": "number", + "value": "5651519194610496945831788810263422329528309064093968274676720551146022" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061030a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101c8565b60405180910390f35b610056610132565b61005e610132565b60006040518060a001604052806069815260200161024b6069913982525060408051608081018252606080820190815281526000602082018190529181019190915260408051602081019091526060815260006040518060600160405280602181526020016102b46021913982525081527f5e1a1521e4cbf13b61725fbd18aba7faf97e16a2778f915427bf26539c9b90046020808301919091527cd1a062251e609db8346a37be4498748f9e5383b0c8aaf88302bec5322660408084019190915290830191909152600090820152919050565b60405180606001604052806060815260200161016e60408051608081018252606080820190815281526000602082018190529181019190915290565b8152600060209091015290565b6000815180845260005b818110156101a157602081850181015186830182015201610185565b818111156101b3576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835283516060828501526101e4608085018261017b565b905081850151601f1985830301604086015280516060835280519050836060840152610213608084018261017b565b8285015194840194909452506040908101516001600160e81b0316918101919091529390930151151560609290920191909152509056fe4d6f6f20c3a9f09f9a806fc3a9f09f9a806ff09f9a80c3a94d6ff09f9a804d204dc3a96ff09f9a80f09f9a804dc3a96f6f6ff09f9a806f4d4dc3a9206f6f6fc3a9204df09f9a804d6fc3a9c3a94dc3a9206ff09f9a806f6f6ff09f9a806f4d4d6f6fc3a9f09f9a806f4d6f6f20c3a9f09f9a806fc3a94d4d6f6f20c3a96f6f6f6f6f206f2020f09f9a80a2646970667358221220a44eeb63d6b79077f590c8d31e915c6068fda55a8a31699c80929e064a907d4f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_9dc6dc3a {\n S_97fc4627 s_0;\n int256 s_1;\n uint232 s_2;\n }\n\n struct S_ea3e45bc {\n string s_0;\n S_9dc6dc3a s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_ea3e45bc memory) {\n S_ea3e45bc memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oé🚀o🚀éMo🚀M Méo🚀🚀Méooo🚀oMMé oooé M🚀MoééMé o🚀ooo🚀oMMooé🚀o\";\n r.s_0 = r_0;\n }\n {\n S_9dc6dc3a memory r_1;\n {\n S_97fc4627 memory r_1_0;\n {\n string memory r_1_0_0 = unicode\"Moo é🚀oéMMoo éooooo o 🚀\";\n r_1_0.s_0 = r_1_0_0;\n }\n r_1.s_0 = r_1_0;\n }\n {\n int256 r_1_1 = 42563491640957900618994432655253760561004150816914814309927647005008245526532;\n r_1.s_1 = r_1_1;\n }\n {\n uint232 r_1_2 = 5651519194610496945831788810263422329528309064093968274676720551146022;\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000694d6f6f20c3a9f09f9a806fc3a9f09f9a806ff09f9a80c3a94d6ff09f9a804d204dc3a96ff09f9a80f09f9a804dc3a96f6f6ff09f9a806f4d4dc3a9206f6f6fc3a9204df09f9a804d6fc3a9c3a94dc3a9206ff09f9a806f6f6ff09f9a806f4d4d6f6fc3a9f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000605e1a1521e4cbf13b61725fbd18aba7faf97e16a2778f915427bf26539c9b9004000000d1a062251e609db8346a37be4498748f9e5383b0c8aaf88302bec53226000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a806fc3a94d4d6f6f20c3a96f6f6f6f6f206f2020f09f9a8000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,(bool,(string,bool[3])))", + "type": "(string,(bool,(string,bool[3])))", + "value": [ + "Moo é🚀MéM oé🚀🚀o M🚀o🚀oM🚀é🚀éo Moéé🚀oMMéooM🚀 oooMo", + [ + false, + ["Moo é🚀oM🚀 🚀Mo o🚀Mo 🚀oooo o🚀éo Moéé éM🚀o o🚀🚀 o", [false, true, false]] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MéM oé🚀🚀o M🚀o🚀oM🚀é🚀éo Moéé🚀oMMéooM🚀 oooMo" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM🚀 🚀Mo o🚀Mo 🚀oooo o🚀éo Moéé éM🚀o o🚀🚀 o" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610305806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061019c565b60405180910390f35b6100566100e4565b61005e6100e4565b600060405180608001604052806052815260200161027e60529139825250610084610103565b6000815261009061011b565b600060405180608001604052806050815260200161022e605091398252506100b6610131565b6000808252600160208084019190915260408301919091528281019190915282810191909152820152919050565b6040518060400160405280606081526020016100fe610103565b905290565b60405180604001604052806000151581526020016100fe5b6040518060400160405280606081526020016100fe5b60405180606001604052806003906020820280368337509192915050565b6000815180845260005b8181101561017557602081850181015186830182015201610159565b81811115610187576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835283516040828501526101b8606085018261014f565b905081850151601f198583030160408601528051151582528281015190506040838301528051608060408401526101f260c084018261014f565b905083820151915060608301925060005b6003811015610222578251151584529284019291840191600101610203565b50969550505050505056fe4d6f6f20c3a9f09f9a806f4df09f9a8020f09f9a804d6f20206ff09f9a804d6f20f09f9a806f6f6f6f206ff09f9a80c3a96f20204d6fc3a9c3a920c3a94df09f9a806f206ff09f9a80f09f9a8020206f4d6f6f20c3a9f09f9a804dc3a94d206fc3a9f09f9a80f09f9a806f204df09f9a806ff09f9a806f4df09f9a80c3a9f09f9a80c3a96f204d6fc3a9c3a9f09f9a806f4d4dc3a96f6f4df09f9a80206f6f6f4d6fa264697066735822122044f3c9d878ec34d46e8beac9afb16649dc9152f944a9b97996d855d83466960964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_62d24032 {\n string s_0;\n bool[3] s_1;\n }\n\n struct S_92e5878a {\n bool s_0;\n S_62d24032 s_1;\n }\n\n struct S_2e688b03 {\n string s_0;\n S_92e5878a s_1;\n }\n\n function test () public pure returns (S_2e688b03 memory) {\n S_2e688b03 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀MéM oé🚀🚀o M🚀o🚀oM🚀é🚀éo Moéé🚀oMMéooM🚀 oooMo\";\n r.s_0 = r_0;\n }\n {\n S_92e5878a memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n {\n S_62d24032 memory r_1_1;\n {\n string memory r_1_1_0 = unicode\"Moo é🚀oM🚀 🚀Mo o🚀Mo 🚀oooo o🚀éo Moéé éM🚀o o🚀🚀 o\";\n r_1_1.s_0 = r_1_1_0;\n }\n {\n bool[3] memory r_1_1_1;\n {\n bool r_1_1_1_0 = false;\n r_1_1_1[0] = r_1_1_1_0;\n }\n {\n bool r_1_1_1_1 = true;\n r_1_1_1[1] = r_1_1_1_1;\n }\n {\n bool r_1_1_1_2 = false;\n r_1_1_1[2] = r_1_1_1_2;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a804dc3a94d206fc3a9f09f9a80f09f9a806f204df09f9a806ff09f9a806f4df09f9a80c3a9f09f9a80c3a96f204d6fc3a9c3a9f09f9a806f4d4dc3a96f6f4df09f9a80206f6f6f4d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a806f4df09f9a8020f09f9a804d6f20206ff09f9a804d6f20f09f9a806f6f6f6f206ff09f9a80c3a96f20204d6fc3a9c3a920c3a94df09f9a806f206ff09f9a80f09f9a8020206f00000000000000000000000000000000" + }, + { + "name": "random-(string,address,bytes23,bytes28)[2]", + "type": "(string,address,bytes23,bytes28)[2]", + "value": [ + [ + "Moo é🚀é", + "0x612f850a1FE02793d0bea2C51c84A78149306609", + "0x937ccefbc49af20fe5889446f8d1be193886c7ed916c99", + "0xcb73a4a53ac2cfda321828a4756674205818d922ffd33deab333dc82" + ], + [ + "Moo é🚀 Moo🚀 o", + "0x5f45C5199059b1B57f3FA7C07758A1A9cFBf776B", + "0x0197eac79e2b40772173435a709e68e766e0950a7cb7b7", + "0x3293c15bb7ab5af5c342e5721dc8ef7f21801d0ef021d147a1261adf" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é" + }, + { + "type": "address", + "value": "0x612f850a1FE02793d0bea2C51c84A78149306609" + }, + { + "type": "hexstring", + "value": "0x937ccefbc49af20fe5889446f8d1be193886c7ed916c99" + }, + { + "type": "hexstring", + "value": "0xcb73a4a53ac2cfda321828a4756674205818d922ffd33deab333dc82" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 Moo🚀 o" + }, + { + "type": "address", + "value": "0x5f45C5199059b1B57f3FA7C07758A1A9cFBf776B" + }, + { + "type": "hexstring", + "value": "0x0197eac79e2b40772173435a709e68e766e0950a7cb7b7" + }, + { + "type": "hexstring", + "value": "0x3293c15bb7ab5af5c342e5721dc8ef7f21801d0ef021d147a1261adf" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102fd806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101fc565b60405180910390f35b6100566101b5565b61005e6101b5565b60408051608080820183526060808352600060208085018281528587018381528487018481528851808a018a52600c81526b4d6f6f20c3a9f09f9a80c3a960a01b81860152885273612f850a1fe02793d0bea2c51c84a781493066099092527f937ccefbc49af20fe5889446f8d1be193886c7ed916c9900000000000000000090527fcb73a4a53ac2cfda321828a4756674205818d922ffd33deab333dc8200000000905293865284519283018552818352828401818152838601828152928401918252855180870190965260158652744d6f6f20c3a9f09f9a80204d6f6ff09f9a8020206f60581b86860152948352735f45c5199059b1b57f3fa7c07758a1a9cfbf776b9094527f0197eac79e2b40772173435a709e68e766e0950a7cb7b700000000000000000090527f3293c15bb7ab5af5c342e5721dc8ef7f21801d0ef021d147a1261adf00000000909252820152919050565b60405180604001604052806002905b604080516080810182526060808252600060208084018290529383018190529082015282526000199092019101816101c45790505090565b602080825260009060608382018185018685805b60028110156102b957601f19808a8603018652835160808151818852805180838a01528692505b80831015610255578183018c015189840160a00152918b0191610237565b80831115610266578660a0828b0101525b8b8401516001600160a01b0316898d015260408085015168ffffffffffffffffff1916908a0152928a015163ffffffff19168a890152505095880195601f011690930160a0019291860191600101610210565b50919897505050505050505056fea2646970667358221220c9813e07aebbe3dc4567c08f91e527c3cd991d7a12b9a5089c2771aa19751c3164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_22b40d82 {\n string s_0;\n address s_1;\n bytes23 s_2;\n bytes28 s_3;\n }\n\n function test () public pure returns (S_22b40d82[2] memory) {\n S_22b40d82[2] memory r;\n {\n S_22b40d82 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀é\";\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0x612f850a1FE02793d0bea2C51c84A78149306609;\n r_0.s_1 = r_0_1;\n }\n {\n bytes23 r_0_2 = bytes23(0x937ccefbc49af20fe5889446f8d1be193886c7ed916c99);\n r_0.s_2 = r_0_2;\n }\n {\n bytes28 r_0_3 = bytes28(0xcb73a4a53ac2cfda321828a4756674205818d922ffd33deab333dc82);\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_22b40d82 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀 Moo🚀 o\";\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0x5f45C5199059b1B57f3FA7C07758A1A9cFBf776B;\n r_1.s_1 = r_1_1;\n }\n {\n bytes23 r_1_2 = bytes23(0x0197eac79e2b40772173435a709e68e766e0950a7cb7b7);\n r_1.s_2 = r_1_2;\n }\n {\n bytes28 r_1_3 = bytes28(0x3293c15bb7ab5af5c342e5721dc8ef7f21801d0ef021d147a1261adf);\n r_1.s_3 = r_1_3;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000612f850a1fe02793d0bea2c51c84a78149306609937ccefbc49af20fe5889446f8d1be193886c7ed916c99000000000000000000cb73a4a53ac2cfda321828a4756674205818d922ffd33deab333dc8200000000000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000005f45c5199059b1b57f3fa7c07758a1a9cfbf776b0197eac79e2b40772173435a709e68e766e0950a7cb7b70000000000000000003293c15bb7ab5af5c342e5721dc8ef7f21801d0ef021d147a1261adf0000000000000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a80204d6f6ff09f9a8020206f0000000000000000000000" + }, + { + "name": "random-(string,address[2][],string)", + "type": "(string,address[2][],string)", + "value": [ + "Moo é🚀éMoéé🚀🚀oMoo🚀o🚀MéMM oooo éM", + [ + [ + "0x934F194527b753B76C621eef23d5A54559B0dC20", + "0x619A52601bB11452cC7208504FB5B4cd930a78D6" + ] + ], + "Moo é🚀o🚀o🚀🚀o🚀o" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éMoéé🚀🚀oMoo🚀o🚀MéMM oooo éM" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x934F194527b753B76C621eef23d5A54559B0dC20" + }, + { + "type": "address", + "value": "0x619A52601bB11452cC7208504FB5B4cd930a78D6" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀o🚀🚀o🚀o" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061032d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101f5565b60405180910390f35b61007260405180606001604052806060815260200160608152602001606081525090565b61009660405180606001604052806060815260200160608152602001606081525090565b60006040518060600160405280603781526020016102c160379139825250604080516001808252818301909252600091816020015b6100d361018a565b8152602001906001900390816100cb5790505090506100f061018a565b73934f194527b753b76c621eef23d5a54559b0dc20815273619a52601bb11452cc7208504fb5b4cd930a78d66020820152815181908390600090610136576101366102aa565b6020908102919091018101919091528381019290925250604080518082018252601e81527f4d6f6f20c3a9f09f9a806ff09f9a806ff09f9a80f09f9a806ff09f9a806f000092810192909252820152919050565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b818110156101ce576020818501810151868301820152016101b2565b818111156101e0576000602083870101525b50601f01601f19169290920160200192915050565b60006020808352835160608285015261021160808501826101a8565b905081850151601f1960408187850301818801528383518086528686019150868501955060009450845b8181101561028157865183875b600281101561026e5782516001600160a01b03168252918a0191908a0190600101610248565b505050958701959183019160010161023b565b50508189015195508288820301606089015261029d81876101a8565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80c3a94d6fc3a9c3a9f09f9a80f09f9a806f4d6f6ff09f9a806ff09f9a804dc3a94d4d20206f6f6f6f2020c3a94da2646970667358221220422d9adf5618e03cda6a508bde42d0f6366fae38f862f04824dee89d9331463f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_828bfc90 {\n string s_0;\n address[2][] s_1;\n string s_2;\n }\n\n function test () public pure returns (S_828bfc90 memory) {\n S_828bfc90 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀éMoéé🚀🚀oMoo🚀o🚀MéMM oooo éM\";\n r.s_0 = r_0;\n }\n {\n address[2][] memory r_1 = new address[2][](1);\n {\n address[2] memory r_1_0;\n {\n address r_1_0_0 = 0x934F194527b753B76C621eef23d5A54559B0dC20;\n r_1_0[0] = r_1_0_0;\n }\n {\n address r_1_0_1 = 0x619A52601bB11452cC7208504FB5B4cd930a78D6;\n r_1_0[1] = r_1_0_1;\n }\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀o🚀o🚀🚀o🚀o\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a80c3a94d6fc3a9c3a9f09f9a80f09f9a806f4d6f6ff09f9a806ff09f9a804dc3a94d4d20206f6f6f6f2020c3a94d0000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000934f194527b753b76c621eef23d5a54559b0dc20000000000000000000000000619a52601bb11452cc7208504fb5b4cd930a78d6000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a806ff09f9a806ff09f9a80f09f9a806ff09f9a806f0000" + }, + { + "name": "random-(string,bool,address,bool[3])", + "type": "(string,bool,address,bool[3])", + "value": [ + "Moo é🚀🚀🚀oM 🚀MM oé oMoM🚀M 🚀oM🚀ooéo🚀o o🚀o", + false, + "0x61f066C4a5ce9671cf67CBe9CA2F20C767a36d1A", + [true, false, true] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀oM 🚀MM oé oMoM🚀M 🚀oM🚀ooéo🚀o o🚀o" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x61f066C4a5ce9671cf67CBe9CA2F20C767a36d1A" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610255806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610141565b60405180910390f35b6100566100c0565b61005e6100c0565b60006040518060800160405280604581526020016101db60459139825250600060208201527361f066c4a5ce9671cf67cbe9ca2f20c767a36d1a60408201526100a56100f8565b60018082526000602083015260408201526060820152919050565b60405180608001604052806060815260200160001515815260200160006001600160a01b031681526020016100f36100f8565b905290565b60405180606001604052806003906020820280368337509192915050565b8060005b600381101561013b578151151584526020938401939091019060010161011a565b50505050565b60006020808352835160c08285015280518060e086015260005b81811015610178578281018401518682016101000152830161015b565b8181111561018b57600061010083880101525b509185015180151560408601529160408601516001600160a01b03811660608701529250606086015192506101c36080860184610116565b601f01601f1916939093016101000194935050505056fe4d6f6f20c3a9f09f9a80f09f9a80f09f9a806f4d20f09f9a804d4d206fc3a9206f4d6f4df09f9a804d20f09f9a806f4df09f9a806f6fc3a96ff09f9a806f206ff09f9a806fa264697066735822122051e7bd17eb400c7615b8c786cbbf6c83aae37049b28f7771144cf65d8979bddf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c53a1a5f {\n string s_0;\n bool s_1;\n address s_2;\n bool[3] s_3;\n }\n\n function test () public pure returns (S_c53a1a5f memory) {\n S_c53a1a5f memory r;\n {\n string memory r_0 = unicode\"Moo é🚀🚀🚀oM 🚀MM oé oMoM🚀M 🚀oM🚀ooéo🚀o o🚀o\";\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x61f066C4a5ce9671cf67CBe9CA2F20C767a36d1A;\n r.s_2 = r_2;\n }\n {\n bool[3] memory r_3;\n {\n bool r_3_0 = true;\n r_3[0] = r_3_0;\n }\n {\n bool r_3_1 = false;\n r_3[1] = r_3_1;\n }\n {\n bool r_3_2 = true;\n r_3[2] = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061f066c4a5ce9671cf67cbe9ca2f20c767a36d1a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a80f09f9a80f09f9a806f4d20f09f9a804d4d206fc3a9206f4d6f4df09f9a804d20f09f9a806f4df09f9a806f6fc3a96ff09f9a806f206ff09f9a806f000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,bytes10,string,uint160,address)", + "type": "(string,bytes10,string,uint160,address)", + "value": [ + "Moo é🚀 oéoooooé🚀M éo o", + "0x67032beae5cbde0fbe2a", + "Moo é🚀🚀o🚀o🚀o o o🚀oéM oMéoo 🚀é", + "1297638588894416710400113612346076169953945741751", + "0x7DbE1fbc8fb28B993dEA30f1d23fD0287d1e9129" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oéoooooé🚀M éo o" + }, + { + "type": "hexstring", + "value": "0x67032beae5cbde0fbe2a" + }, + { + "type": "string", + "value": "Moo é🚀🚀o🚀o🚀o o o🚀oéM oMéoo 🚀é" + }, + { + "type": "number", + "value": "1297638588894416710400113612346076169953945741751" + }, + { + "type": "address", + "value": "0x7DbE1fbc8fb28B993dEA30f1d23fD0287d1e9129" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061028c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061017f565b60405180910390f35b6040805160a0810182526060808252600060208301819052928201819052810182905260808101919091526040805160a08101825260608082526000602083018190529282018190528101829052608081019190915260006040518060600160405280602181526020016102366021913982525069338195f572e5ef07df1560b11b602080830191909152604080516060810190915260338082526000926102039083013960408301525073e34c2074a2cf84aeab5fcb0ef9c493dfec2669b76060820152737dbe1fbc8fb28b993dea30f1d23fd0287d1e91296080820152919050565b6000815180845260005b818110156101585760208185018101518683018201520161013c565b8181111561016a576000602083870101525b50601f01601f19169290920160200192915050565b602081526000825160a0602084015261019b60c0840182610132565b905069ffffffffffffffffffff60b01b60208501511660408401526040840151601f198483030160608501526101d18282610132565b60608601516001600160a01b039081166080878101919091529096015190951660a09094019390935250919291505056fe4d6f6f20c3a9f09f9a80f09f9a806ff09f9a806ff09f9a806f206f206ff09f9a806fc3a94d206f4dc3a96f6f20f09f9a80c3a94d6f6f20c3a9f09f9a80206fc3a96f6f6f6f6fc3a9f09f9a804d20c3a96f20206fa2646970667358221220fe147e8ddb134bfb3be726827c2d18ae2744e613ab11082736306ab221486f1464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_32541f76 {\n string s_0;\n bytes10 s_1;\n string s_2;\n uint160 s_3;\n address s_4;\n }\n\n function test () public pure returns (S_32541f76 memory) {\n S_32541f76 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 oéoooooé🚀M éo o\";\n r.s_0 = r_0;\n }\n {\n bytes10 r_1 = bytes10(0x67032beae5cbde0fbe2a);\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀🚀o🚀o🚀o o o🚀oéM oMéoo 🚀é\";\n r.s_2 = r_2;\n }\n {\n uint160 r_3 = 1297638588894416710400113612346076169953945741751;\n r.s_3 = r_3;\n }\n {\n address r_4 = 0x7DbE1fbc8fb28B993dEA30f1d23fD0287d1e9129;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a067032beae5cbde0fbe2a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000e34c2074a2cf84aeab5fcb0ef9c493dfec2669b70000000000000000000000007dbe1fbc8fb28b993dea30f1d23fd0287d1e912900000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a80206fc3a96f6f6f6f6fc3a9f09f9a804d20c3a96f20206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a80f09f9a806ff09f9a806ff09f9a806f206f206ff09f9a806fc3a94d206f4dc3a96f6f20f09f9a80c3a900000000000000000000000000" + }, + { + "name": "random-(string,bytes31,int48,bool,bytes19)", + "type": "(string,bytes31,int48,bool,bytes19)", + "value": [ + "Moo é🚀éé éoooéM🚀Moo 🚀 oé🚀 🚀 éé oo🚀Mo oo éM🚀éoooMMMé🚀Mo", + "0x12c3f580db9e81d094a4305d8963be7dfe3c4a667e5dd86b8ef998c64f6fce", + "104016499172932", + true, + "0x9f047e9cb759f55cffcb8d6b1a28797b334011" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éé éoooéM🚀Moo 🚀 oé🚀 🚀 éé oo🚀Mo oo éM🚀éoooMMMé🚀Mo" + }, + { + "type": "hexstring", + "value": "0x12c3f580db9e81d094a4305d8963be7dfe3c4a667e5dd86b8ef998c64f6fce" + }, + { + "type": "number", + "value": "104016499172932" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x9f047e9cb759f55cffcb8d6b1a28797b334011" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061025d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061011c565b60405180910390f35b6040805160a0810182526060808252600060208301819052928201839052810182905260808101919091526040805160a08101825260608082526000602083018190529282018390528101829052608081019190915260006040518060800160405280605b81526020016101cd605b91398252507f12c3f580db9e81d094a4305d8963be7dfe3c4a667e5dd86b8ef998c64f6fce006020820152655e9a3a7be644604082015260016060820152729f047e9cb759f55cffcb8d6b1a28797b33401160681b6080820152919050565b60006020808352835160a08285015280518060c086015260005b818110156101525782810184015186820160e001528301610136565b8181111561016457600060e083880101525b509185015160ff1981166040860152916040860151925061018a606086018460050b9052565b60608601518015156080870152925060808601516cffffffffffffffffffffffffff19811660a08701529250601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a80c3a9c3a920c3a96f6f6fc3a94df09f9a804d6f6f20f09f9a8020206fc3a9f09f9a8020f09f9a8020c3a9c3a9206f6ff09f9a804d6f206f6f2020c3a94df09f9a80c3a96f6f6f4d4d4dc3a9f09f9a804d6fa26469706673582212207397253f81bc1573a57bb69d97e47c52422f93a665d5e5715bbe5c32295dddb964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_53e60024 {\n string s_0;\n bytes31 s_1;\n int48 s_2;\n bool s_3;\n bytes19 s_4;\n }\n\n function test () public pure returns (S_53e60024 memory) {\n S_53e60024 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀éé éoooéM🚀Moo 🚀 oé🚀 🚀 éé oo🚀Mo oo éM🚀éoooMMMé🚀Mo\";\n r.s_0 = r_0;\n }\n {\n bytes31 r_1 = bytes31(0x12c3f580db9e81d094a4305d8963be7dfe3c4a667e5dd86b8ef998c64f6fce);\n r.s_1 = r_1;\n }\n {\n int48 r_2 = 104016499172932;\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n {\n bytes19 r_4 = bytes19(0x9f047e9cb759f55cffcb8d6b1a28797b334011);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a012c3f580db9e81d094a4305d8963be7dfe3c4a667e5dd86b8ef998c64f6fce0000000000000000000000000000000000000000000000000000005e9a3a7be64400000000000000000000000000000000000000000000000000000000000000019f047e9cb759f55cffcb8d6b1a28797b33401100000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a80c3a9c3a920c3a96f6f6fc3a94df09f9a804d6f6f20f09f9a8020206fc3a9f09f9a8020f09f9a8020c3a9c3a9206f6ff09f9a804d6f206f6f2020c3a94df09f9a80c3a96f6f6f4d4d4dc3a9f09f9a804d6f0000000000" + }, + { + "name": "random-(string,bytes4,address,bytes5,address)", + "type": "(string,bytes4,address,bytes5,address)", + "value": [ + "Moo é🚀oé🚀 MooéoMoMMéoo🚀MMé🚀é🚀M oooMM🚀ooo", + "0x9efddfb7", + "0x231E52Adf011822aA10f00e58af1343a90C23080", + "0xc1a304724a", + "0xcf1B584C93DCed27f8Da20d478528742B3Bf6193" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oé🚀 MooéoMoMMéoo🚀MMé🚀é🚀M oooMM🚀ooo" + }, + { + "type": "hexstring", + "value": "0x9efddfb7" + }, + { + "type": "address", + "value": "0x231E52Adf011822aA10f00e58af1343a90C23080" + }, + { + "type": "hexstring", + "value": "0xc1a304724a" + }, + { + "type": "address", + "value": "0xcf1B584C93DCed27f8Da20d478528742B3Bf6193" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610244806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610116565b60405180910390f35b6040805160a0810182526060808252600060208301819052928201839052810182905260808101919091526040805160a08101825260608082526000602083018190529282018390528101829052608081019190915260006040518060800160405280604181526020016101ce60419139825250639efddfb760e01b602082015273231e52adf011822aa10f00e58af1343a90c2308060408201526460d182392560d91b606082015273cf1b584c93dced27f8da20d478528742b3bf61936080820152919050565b60006020808352835160a08285015280518060c086015260005b8181101561014c5782810184015186820160e001528301610130565b8181111561015e57600060e083880101525b50918501516001600160e01b0319811660408601529160408601516001600160a01b0381166060870152925060608601516001600160d81b031981166080870152925060808601516001600160a01b03811660a08701529250601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a806fc3a9f09f9a80204d6f6fc3a96f4d6f4d4dc3a96f6ff09f9a804d4dc3a9f09f9a80c3a9f09f9a804d20206f6f6f4d4df09f9a806f6f6fa26469706673582212201ba1e583af57c4d6615efdf83a8eca24fc3d4bc1f9cf09bb5daa0e479c7f613764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_088b9103 {\n string s_0;\n bytes4 s_1;\n address s_2;\n bytes5 s_3;\n address s_4;\n }\n\n function test () public pure returns (S_088b9103 memory) {\n S_088b9103 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oé🚀 MooéoMoMMéoo🚀MMé🚀é🚀M oooMM🚀ooo\";\n r.s_0 = r_0;\n }\n {\n bytes4 r_1 = bytes4(0x9efddfb7);\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x231E52Adf011822aA10f00e58af1343a90C23080;\n r.s_2 = r_2;\n }\n {\n bytes5 r_3 = bytes5(0xc1a304724a);\n r.s_3 = r_3;\n }\n {\n address r_4 = 0xcf1B584C93DCed27f8Da20d478528742B3Bf6193;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a09efddfb700000000000000000000000000000000000000000000000000000000000000000000000000000000231e52adf011822aa10f00e58af1343a90c23080c1a304724a000000000000000000000000000000000000000000000000000000000000000000000000000000cf1b584c93dced27f8da20d478528742b3bf619300000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a806fc3a9f09f9a80204d6f6fc3a96f4d6f4d4dc3a96f6ff09f9a804d4dc3a9f09f9a80c3a9f09f9a804d20206f6f6f4d4df09f9a806f6f6f00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,int112[][3],bytes27)", + "type": "(string,int112[][3],bytes27)", + "value": [ + "Moo é🚀", + [ + ["1560412903628584639421470229008497", "1000513340414760566480202528881242"], + [], + ["1705541380558832286780651953568760", "2495361629224451954021772841755002"] + ], + "0x1cf1280f23d9a374c650ef82a4538aba937e1e40472f6673d95c40" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1560412903628584639421470229008497" + }, + { + "type": "number", + "value": "1000513340414760566480202528881242" + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1705541380558832286780651953568760" + }, + { + "type": "number", + "value": "2495361629224451954021772841755002" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x1cf1280f23d9a374c650ef82a4538aba937e1e40472f6673d95c40" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103a6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102c3565b60405180910390f35b610056610205565b61005e610205565b60408051808201909152600a8152689adede418753e13f3560b71b6020820152815261008861022c565b60408051600280825260608201835260009260208301908036833701905050905060006d4cef2e05758a46cbc95abe621071905080826000815181106100d0576100d061035a565b6020026020010190600d0b9081600d0b815250505060006d315440f5cab09f5c76c5dfa67a5a9050808260018151811061010c5761010c61035a565b600d9290920b602092830291909101820152918352506040805160008082528184018352848401919091528151600280825260608201845291939092908301908036833701905050905060006d5416f56be7ba9f41253c91e5bbf89050808260008151811061017d5761017d61035a565b6020026020010190600d0b9081600d0b815250505060006d7b07e44900d1ee5461279c64a17a905080826001815181106101b9576101b961035a565b600d9290920b6020928302919091018201526040808501939093528401929092527f1cf1280f23d9a374c650ef82a4538aba937e1e40472f6673d95c4000000000009083015250919050565b60405180606001604052806060815260200161021f61022c565b8152600060209091015290565b60405180606001604052806003905b606081526020019060019003908161023b5790505090565b60008260608101836000805b60038110156102b7578484038852825180518086526020918201918087019190855b828110156102a0578451600d0b84529381019392810192600101610281565b509a8b019a9196505093909301925060010161025f565b50919695505050505050565b600060208083528351606082850152805180608086015260005b818110156102f95782810184015186820160a0015283016102dd565b8181111561030b57600060a083880101525b5091850151601f92909201601f191684018481036080016040860152905061033660a0820183610253565b9150506040840151610352606085018264ffffffffff19169052565b509392505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220ecdacfee8f61ae041e3d9d919c0a973b27ed659bd668cc4662d70ac6211c1a8864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_850e6d50 {\n string s_0;\n int112[][3] s_1;\n bytes27 s_2;\n }\n\n function test () public pure returns (S_850e6d50 memory) {\n S_850e6d50 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀\";\n r.s_0 = r_0;\n }\n {\n int112[][3] memory r_1;\n {\n int112[] memory r_1_0 = new int112[](2);\n {\n int112 r_1_0_0 = 1560412903628584639421470229008497;\n r_1_0[0] = r_1_0_0;\n }\n {\n int112 r_1_0_1 = 1000513340414760566480202528881242;\n r_1_0[1] = r_1_0_1;\n }\n r_1[0] = r_1_0;\n }\n {\n int112[] memory r_1_1 = new int112[](0);\n r_1[1] = r_1_1;\n }\n {\n int112[] memory r_1_2 = new int112[](2);\n {\n int112 r_1_2_0 = 1705541380558832286780651953568760;\n r_1_2[0] = r_1_2_0;\n }\n {\n int112 r_1_2_1 = 2495361629224451954021772841755002;\n r_1_2[1] = r_1_2_1;\n }\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n bytes27 r_2 = bytes27(0x1cf1280f23d9a374c650ef82a4538aba937e1e40472f6673d95c40);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a01cf1280f23d9a374c650ef82a4538aba937e1e40472f6673d95c400000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004cef2e05758a46cbc95abe621071000000000000000000000000000000000000315440f5cab09f5c76c5dfa67a5a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000005416f56be7ba9f41253c91e5bbf80000000000000000000000000000000000007b07e44900d1ee5461279c64a17a" + }, + { + "name": "random-(string,int200,bool,bool,address)", + "type": "(string,int200,bool,bool,address)", + "value": [ + "Moo é🚀oo🚀Méé🚀o é MéM", + "723146089874690040200915350927046693277321411220483104326486", + false, + true, + "0xEbF8939C0Aa5936072D88983Fda7eBF12E9Df692" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀Méé🚀o é MéM" + }, + { + "type": "number", + "value": "723146089874690040200915350927046693277321411220483104326486" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xEbF8939C0Aa5936072D88983Fda7eBF12E9Df692" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061020d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061010e565b60405180910390f35b6040805160a0810182526060808252600060208301819052928201839052810182905260808101919091526040805160a08101825260608082526000602083018190529282018390528101829052608081019190915260006040518060600160405280602281526020016101b6602291398252507873342d75421b699e4a9bfa2b2fe0f81f0ccba4d088d05043566020820152600060408201526001606082015273ebf8939c0aa5936072d88983fda7ebf12e9df6926080820152919050565b60006020808352835160a08285015280518060c086015260005b818110156101445782810184015186820160e001528301610128565b8181111561015657600060e083880101525b50918501519161016b604086018460180b9052565b60408601518015156060870152925060608601518015156080870152925060808601516001600160a01b03811660a08701529250601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a806f6ff09f9a804dc3a9c3a9f09f9a806f20c3a9204dc3a94da26469706673582212200e41d6c9c01f4208fad46719c3933ad0c2bcbb18cc3075fbe937aab41156edc764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_40a4f307 {\n string s_0;\n int200 s_1;\n bool s_2;\n bool s_3;\n address s_4;\n }\n\n function test () public pure returns (S_40a4f307 memory) {\n S_40a4f307 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oo🚀Méé🚀o é MéM\";\n r.s_0 = r_0;\n }\n {\n int200 r_1 = 723146089874690040200915350927046693277321411220483104326486;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n {\n address r_4 = 0xEbF8939C0Aa5936072D88983Fda7eBF12E9Df692;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000073342d75421b699e4a9bfa2b2fe0f81f0ccba4d088d050435600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ebf8939c0aa5936072d88983fda7ebf12e9df69200000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a806f6ff09f9a804dc3a9c3a9f09f9a806f20c3a9204dc3a94d000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,string,address,bool,uint)", + "type": "(string,string,address,bool,uint)", + "value": [ + "Moo é🚀🚀ééééoMoMM Moo 🚀🚀oooM M🚀🚀🚀oooo", + "Moo é🚀 é🚀oooé 🚀é🚀o éééMo éoM🚀 🚀🚀", + "0x303576c4BC3345b5A57A97aDD2a67Cd5b032079e", + false, + "57815014282739456352787702428941965328209798623339436184711548903201589580538" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀ééééoMoMM Moo 🚀🚀oooM M🚀🚀🚀oooo" + }, + { + "type": "string", + "value": "Moo é🚀 é🚀oooé 🚀é🚀o éééMo éoM🚀 🚀🚀" + }, + { + "type": "address", + "value": "0x303576c4BC3345b5A57A97aDD2a67Cd5b032079e" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "57815014282739456352787702428941965328209798623339436184711548903201589580538" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610290806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610171565b60405180910390f35b6100566100ea565b61005e6100ea565b60006040518060600160405280603e81526020016101e0603e91398252506040805160608101909152603d8082526000919061021e602083013960208301525073303576c4bc3345b5a57a97add2a67cd5b032079e6040820152600060608201527f7fd22371cbd2a7706fdd7ddb98c99cb5f61748899d22268bf5144b66d08e52fa6080820152919050565b6040518060a00160405280606081526020016060815260200160006001600160a01b03168152602001600015158152602001600081525090565b6000815180845260005b8181101561014a5760208185018101518683018201520161012e565b8181111561015c576000602083870101525b50601f01601f19169290920160200192915050565b602081526000825160a0602084015261018d60c0840182610124565b90506020840151601f198483030160408501526101aa8282610124565b91505060018060a01b036040850151166060840152606084015115156080840152608084015160a0840152809150509291505056fe4d6f6f20c3a9f09f9a80f09f9a80c3a9c3a9c3a9c3a96f4d6f4d4d204d6f6f20f09f9a80f09f9a806f6f6f4d204df09f9a80f09f9a80f09f9a806f6f6f6f4d6f6f20c3a9f09f9a8020c3a9f09f9a806f6f6fc3a920f09f9a80c3a9f09f9a806f20c3a9c3a9c3a94d6f20c3a96f4df09f9a8020f09f9a80f09f9a80a264697066735822122019783c06f5420f63f37e5b5c7444be8e2232472b977c539e509fb061e0ba2f5364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_26ebd101 {\n string s_0;\n string s_1;\n address s_2;\n bool s_3;\n uint256 s_4;\n }\n\n function test () public pure returns (S_26ebd101 memory) {\n S_26ebd101 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀🚀ééééoMoMM Moo 🚀🚀oooM M🚀🚀🚀oooo\";\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀 é🚀oooé 🚀é🚀o éééMo éoM🚀 🚀🚀\";\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x303576c4BC3345b5A57A97aDD2a67Cd5b032079e;\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n {\n uint r_4 = 57815014282739456352787702428941965328209798623339436184711548903201589580538;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000303576c4bc3345b5a57a97add2a67cd5b032079e00000000000000000000000000000000000000000000000000000000000000007fd22371cbd2a7706fdd7ddb98c99cb5f61748899d22268bf5144b66d08e52fa000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a80f09f9a80c3a9c3a9c3a9c3a96f4d6f4d4d204d6f6f20f09f9a80f09f9a806f6f6f4d204df09f9a80f09f9a80f09f9a806f6f6f6f0000000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a8020c3a9f09f9a806f6f6fc3a920f09f9a80c3a9f09f9a806f20c3a9c3a9c3a94d6f20c3a96f4df09f9a8020f09f9a80f09f9a80000000" + }, + { + "name": "random-(string,string[],address,uint88)", + "type": "(string,string[],address,uint88)", + "value": [ + "Moo é🚀 oé M o🚀éo🚀 é é🚀M🚀MoooMM🚀 ", + [], + "0xf9FA809d3203c530Cda074596d595963ac14dab2", + "201747260491567223322108355" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oé M o🚀éo🚀 é é🚀M🚀MoooMM🚀 " + }, + { + "type": "array", + "value": [] + }, + { + "type": "address", + "value": "0xf9FA809d3203c530Cda074596d595963ac14dab2" + }, + { + "type": "number", + "value": "201747260491567223322108355" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610289806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610169565b60405180910390f35b6100566100de565b61005e6100de565b600060405180606001604052806037815260200161021d6037913982525060408051600080825260208201909252816100a7565b60608152602001906001900390816100925790505b5060208301525073f9fa809d3203c530cda074596d595963ac14dab260408201526aa6e1a4e7e8eb3308c6e1c36060820152919050565b6040518060800160405280606081526020016060815260200160006001600160a01b0316815260200160006affffffffffffffffffffff1681525090565b6000815180845260005b8181101561014257602081850181015186830182015201610126565b81811115610154576000602083870101525b50601f01601f19169290920160200192915050565b60006020808352835160808285015261018560a085018261011c565b82860151601f198683038101604088015281518084529293509084019183850190600581901b8501860160005b828110156101de57848783030184526101cc82875161011c565b958801959388019391506001016101b2565b5060408a01516001600160a01b03811660608b0152965060608a01516affffffffffffffffffffff811660808b01529650999850505050505050505056fe4d6f6f20c3a9f09f9a80206fc3a9204d206ff09f9a80c3a96ff09f9a8020c3a920c3a9f09f9a804df09f9a804d6f6f6f4d4df09f9a8020a2646970667358221220b1a952c5d893b9c91eaed6392000cf16894d53373911b6583247f6c0f94f49d764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a0ae3c2e {\n string s_0;\n string[] s_1;\n address s_2;\n uint88 s_3;\n }\n\n function test () public pure returns (S_a0ae3c2e memory) {\n S_a0ae3c2e memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 oé M o🚀éo🚀 é é🚀M🚀MoooMM🚀 \";\n r.s_0 = r_0;\n }\n {\n string[] memory r_1 = new string[](0);\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xf9FA809d3203c530Cda074596d595963ac14dab2;\n r.s_2 = r_2;\n }\n {\n uint88 r_3 = 201747260491567223322108355;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000f9fa809d3203c530cda074596d595963ac14dab2000000000000000000000000000000000000000000a6e1a4e7e8eb3308c6e1c300000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a80206fc3a9204d206ff09f9a80c3a96ff09f9a8020c3a920c3a9f09f9a804df09f9a804d6f6f6f4d4df09f9a80200000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,string[4],int88,bytes26)", + "type": "(string,string[4],int88,bytes26)", + "value": [ + "Moo é🚀ooM🚀 o🚀éé🚀éoooééMMMoM🚀", + [ + "Moo é🚀 oéMooMoéo🚀🚀🚀oM", + "Moo é🚀oéé🚀oé🚀éMé o", + "Moo é🚀 MMéoéoo🚀é", + "Moo é🚀 M🚀oooo ooMooo" + ], + "72847462964428875083598220", + "0xa64509771e3654956f6615589e9d88ceb0ab6b9e7075d96e09be" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooM🚀 o🚀éé🚀éoooééMMMoM🚀" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oéMooMoéo🚀🚀🚀oM" + }, + { + "type": "string", + "value": "Moo é🚀oéé🚀oé🚀éMé o" + }, + { + "type": "string", + "value": "Moo é🚀 MMéoéoo🚀é" + }, + { + "type": "string", + "value": "Moo é🚀 M🚀oooo ooMooo" + } + ] + }, + { + "type": "number", + "value": "72847462964428875083598220" + }, + { + "type": "hexstring", + "value": "0xa64509771e3654956f6615589e9d88ceb0ab6b9e7075d96e09be" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610363806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061021d565b60405180910390f35b61005661017b565b61005e61017b565b60006040518060600160405280603181526020016102fd603191398252506100846101a9565b60006040518060600160405280602481526020016102b86024913982525060408051606081019091526021808252600091906102dc6020830139602083810191909152604080518082018252601a81527f4d6f6f20c3a9f09f9a80204d4dc3a96fc3a96f6ff09f9a80c3a9000000000000818401528185015280518082018252601c81527f4d6f6f20c3a9f09f9a8020204df09f9a806f6f6f6f206f6f4d6f6f6f0000000081840152606080860191909152918501939093526a3c420ce15ba3acb054c98c92840192909252507fa64509771e3654956f6615589e9d88ceb0ab6b9e7075d96e09be00000000000090820152919050565b6040518060800160405280606081526020016101956101a9565b815260006020820181905260409091015290565b60405180608001604052806004905b60608152602001906001900390816101b85790505090565b6000815180845260005b818110156101f6576020818501810151868301820152016101da565b81811115610208576000602083870101525b50601f01601f19169290920160200192915050565b60006020808352835160808285015261023960a08501826101d0565b85830151858203601f19016040870152909150816080810160005b600481101561027f57848203835261026d8285516101d0565b93860193928601929150600101610254565b50604088015194506102966060880186600a0b9052565b606088015165ffffffffffff1981166080890152945097965050505050505056fe4d6f6f20c3a9f09f9a80206fc3a94d6f6f4d6fc3a96ff09f9a80f09f9a80f09f9a806f4d4d6f6f20c3a9f09f9a806fc3a9c3a9f09f9a806fc3a9f09f9a80c3a94dc3a9206f4d6f6f20c3a9f09f9a806f6f4df09f9a80206ff09f9a80c3a9c3a9f09f9a80c3a96f6f6fc3a9c3a94d4d4d6f4df09f9a80a2646970667358221220da17020b2a9db92a3cbef2a52b4cb240a081d443831057c343f41aaa51f9f67664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_cb50affe {\n string s_0;\n string[4] s_1;\n int88 s_2;\n bytes26 s_3;\n }\n\n function test () public pure returns (S_cb50affe memory) {\n S_cb50affe memory r;\n {\n string memory r_0 = unicode\"Moo é🚀ooM🚀 o🚀éé🚀éoooééMMMoM🚀\";\n r.s_0 = r_0;\n }\n {\n string[4] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀 oéMooMoéo🚀🚀🚀oM\";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀oéé🚀oé🚀éMé o\";\n r_1[1] = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀 MMéoéoo🚀é\";\n r_1[2] = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀 M🚀oooo ooMooo\";\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n int88 r_2 = 72847462964428875083598220;\n r.s_2 = r_2;\n }\n {\n bytes26 r_3 = bytes26(0xa64509771e3654956f6615589e9d88ceb0ab6b9e7075d96e09be);\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000003c420ce15ba3acb054c98ca64509771e3654956f6615589e9d88ceb0ab6b9e7075d96e09be00000000000000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a806f6f4df09f9a80206ff09f9a80c3a9c3a9f09f9a80c3a96f6f6fc3a9c3a94d4d4d6f4df09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000244d6f6f20c3a9f09f9a80206fc3a94d6f6f4d6fc3a96ff09f9a80f09f9a80f09f9a806f4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a806fc3a9c3a9f09f9a806fc3a9f09f9a80c3a94dc3a9206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a4d6f6f20c3a9f09f9a80204d4dc3a96fc3a96f6ff09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a8020204df09f9a806f6f6f6f206f6f4d6f6f6f00000000" + }, + { + "name": "random-(string[2],bytes22,int128,bool)", + "type": "(string[2],bytes22,int128,bool)", + "value": [ + ["Moo é🚀MMéMoM🚀o🚀🚀o 🚀ééoooo é o🚀", "Moo é🚀o o🚀o "], + "0xb8f849843138be154746e6f3ce5b3ec548bbb7b5c6f4", + "-113137895541668566508653735889209596260", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MMéMoM🚀o🚀🚀o 🚀ééoooo é o🚀" + }, + { + "type": "string", + "value": "Moo é🚀o o🚀o " + } + ] + }, + { + "type": "hexstring", + "value": "0xb8f849843138be154746e6f3ce5b3ec548bbb7b5c6f4" + }, + { + "type": "number", + "value": "-113137895541668566508653735889209596260" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061028d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610153565b60405180910390f35b6100566100fe565b61005e6100fe565b61006661012c565b6000604051806060016040528060388152602001610220603891398252506040805180820182526013815272026b7b79061d4f84fcd40379037f84fcd40379606d1b60208083019190915280840191909152918352752e3e12610c4e2f8551d1b9bcf396cfb1522eeded71bd60521b918301919091526f551d90eb119ddd18a0c7ba7461731963199082015260006060820152919050565b604051806080016040528061011161012c565b81526000602082018190526040820181905260609091015290565b60405180604001604052806002905b606081526020019060019003908161013b5790505090565b602080825282516080838301526000919060e084019060a0850184805b60028110156101d657878503609f1901835283518051808752835b818110156101a6578281018901518882018a0152880161018b565b818111156101b6578489838a0101525b50601f01601f191695909501860194509285019291850191600101610170565b505050509084015169ffffffffffffffffffff198116604085015290604085015191506102086060850183600f0b9052565b60608501518015156080860152915094935050505056fe4d6f6f20c3a9f09f9a804d4dc3a94d6f4df09f9a806ff09f9a80f09f9a806f2020f09f9a80c3a9c3a96f6f6f6f20c3a92020206ff09f9a80a2646970667358221220a700576bea0ebe9a5bb20ccb750fd0dea357819d7a20dcc61ff9b1bf4171105f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_50577ead {\n string[2] s_0;\n bytes22 s_1;\n int128 s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_50577ead memory) {\n S_50577ead memory r;\n {\n string[2] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀MMéMoM🚀o🚀🚀o 🚀ééoooo é o🚀\";\n r_0[0] = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀o o🚀o \";\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n bytes22 r_1 = bytes22(0xb8f849843138be154746e6f3ce5b3ec548bbb7b5c6f4);\n r.s_1 = r_1;\n }\n {\n int128 r_2 = -113137895541668566508653735889209596260;\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080b8f849843138be154746e6f3ce5b3ec548bbb7b5c6f400000000000000000000ffffffffffffffffffffffffffffffffaae26f14ee6222e75f38458b9e8ce69c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a804d4dc3a94d6f4df09f9a806ff09f9a80f09f9a806f2020f09f9a80c3a9c3a96f6f6f6f20c3a92020206ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a806f206ff09f9a806f2000000000000000000000000000" + }, + { + "name": "random-(string[3],bool,bool,bytes8)", + "type": "(string[3],bool,bool,bytes8)", + "value": [ + [ + "Moo é🚀oo o🚀ééM Mé🚀ooooMooo🚀oo 🚀M", + "Moo é🚀éooo🚀Mo éo🚀ooéMoMM M é oéééo oMéé🚀oooéooé 🚀Moo🚀", + "Moo é🚀o🚀🚀MMééo Mo🚀éé🚀 o éMooéooo ooMéoMMé é éo🚀oo" + ], + true, + true, + "0x5688af0f830f47cc" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo o🚀ééM Mé🚀ooooMooo🚀oo 🚀M" + }, + { + "type": "string", + "value": "Moo é🚀éooo🚀Mo éo🚀ooéMoMM M é oéééo oMéé🚀oooéooé 🚀Moo🚀" + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀MMééo Mo🚀éé🚀 o éMooéooo ooMéoMMé é éo🚀oo" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x5688af0f830f47cc" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061031a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061014f565b60405180910390f35b6100566100fa565b61005e6100fa565b610066610128565b60006040518060600160405280603381526020016102b2603391398252506040805160808101909152605480825260009190610210602083013990508082600160200201819052505060006040518060800160405280604e8152602001610264604e913960408084019190915291835250600160208301819052908201526715a22bc3e0c3d1f360c21b6060820152919050565b604051806080016040528061010d610128565b81526000602082018190526040820181905260609091015290565b60405180606001604052806003905b60608152602001906001900390816101375790505090565b602080825282516080838301526000919061010084019060a0850184805b60038110156101d357878503609f1901835283518051808752835b818110156101a3578281018901518882018a01528801610188565b818111156101b3578489838a0101525b50601f01601f19169590950186019450928501929185019160010161016d565b505050509084015115156040848101919091528401511515606080850191909152909301516001600160c01b031916608090920191909152509056fe4d6f6f20c3a9f09f9a80c3a96f6f6ff09f9a804d6f20c3a96ff09f9a806f6fc3a94d6f4d4d204d20c3a920206fc3a9c3a9c3a96f206f4dc3a9c3a9f09f9a806f6f6fc3a96f6fc3a920f09f9a804d6f6ff09f9a804d6f6f20c3a9f09f9a806ff09f9a80f09f9a804d4dc3a9c3a96f204d6ff09f9a80c3a9c3a9f09f9a80206f20c3a94d6f6fc3a96f6f6f206f6f4dc3a96f4d4dc3a920c3a920c3a96ff09f9a806f6f4d6f6f20c3a9f09f9a806f6f206ff09f9a80c3a9c3a94d204dc3a9f09f9a806f6f6f6f4d6f6f6ff09f9a806f6f20f09f9a804da2646970667358221220bda90a5de2c48cf7c750d9df5500cd3afce63ef9e9b18940a8aaa24d3d7747b164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fe73d664 {\n string[3] s_0;\n bool s_1;\n bool s_2;\n bytes8 s_3;\n }\n\n function test () public pure returns (S_fe73d664 memory) {\n S_fe73d664 memory r;\n {\n string[3] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀oo o🚀ééM Mé🚀ooooMooo🚀oo 🚀M\";\n r_0[0] = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀éooo🚀Mo éo🚀ooéMoMM M é oéééo oMéé🚀oooéooé 🚀Moo🚀\";\n r_0[1] = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀o🚀🚀MMééo Mo🚀éé🚀 o éMooéooo ooMéoMMé é éo🚀oo\";\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n bytes8 r_3 = bytes8(0x5688af0f830f47cc);\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000015688af0f830f47cc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a806f6f206ff09f9a80c3a9c3a94d204dc3a9f09f9a806f6f6f6f4d6f6f6ff09f9a806f6f20f09f9a804d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a80c3a96f6f6ff09f9a804d6f20c3a96ff09f9a806f6fc3a94d6f4d4d204d20c3a920206fc3a9c3a9c3a96f206f4dc3a9c3a9f09f9a806f6f6fc3a96f6fc3a920f09f9a804d6f6ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a806ff09f9a80f09f9a804d4dc3a9c3a96f204d6ff09f9a80c3a9c3a9f09f9a80206f20c3a94d6f6fc3a96f6f6f206f6f4dc3a96f4d4dc3a920c3a920c3a96ff09f9a806f6f000000000000000000000000000000000000" + }, + { + "name": "random-(uint,address,bool,address,int8)", + "type": "(uint,address,bool,address,int8)", + "value": [ + "21616205022737158653482810610059754300000889367205823343318616388595957097225", + "0xB5A7cBf67D371892A7BCdE9d4704138ECD14c0b8", + true, + "0x955a074380517B2832177417fdB144a5bcf5C7f8", + "95" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "21616205022737158653482810610059754300000889367205823343318616388595957097225" + }, + { + "type": "address", + "value": "0xB5A7cBf67D371892A7BCdE9d4704138ECD14c0b8" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x955a074380517B2832177417fdB144a5bcf5C7f8" + }, + { + "type": "number", + "value": "95" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101458061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160a080820183526000808352602080840182905283850182905260608085018390526080948501839052855180850187527f2fca56a63fa248a298e0a0e855ee9861b2301ad19dbceea4caba20b2df37e30980825273b5a7cbf67d371892a7bcde9d4704138ecd14c0b88285019081526001838a0190815273955a074380517b2832177417fdb144a5bcf5c7f8848601908152605f948a019485528a5193845291516001600160a01b03908116968401969096525115159882019890985296519092169086015251900b918301919091520160405180910390f3fea2646970667358221220e95642e551ebcf6958b5e5e3f51a2e63801c531245900e4a20c3b7fec67b0fe664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_54215f4e {\n uint256 s_0;\n address s_1;\n bool s_2;\n address s_3;\n int8 s_4;\n }\n\n function test () public pure returns (S_54215f4e memory) {\n S_54215f4e memory r;\n {\n uint r_0 = 21616205022737158653482810610059754300000889367205823343318616388595957097225;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xB5A7cBf67D371892A7BCdE9d4704138ECD14c0b8;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x955a074380517B2832177417fdB144a5bcf5C7f8;\n r.s_3 = r_3;\n }\n {\n int8 r_4 = 95;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x2fca56a63fa248a298e0a0e855ee9861b2301ad19dbceea4caba20b2df37e309000000000000000000000000b5a7cbf67d371892a7bcde9d4704138ecd14c0b80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000955a074380517b2832177417fdb144a5bcf5c7f8000000000000000000000000000000000000000000000000000000000000005f" + }, + { + "name": "random-(uint160[4],bool,bool)[3]", + "type": "(uint160[4],bool,bool)[3]", + "value": [ + [ + [ + "206812964373285716497200397865405157459298588425", + "398349588486513236206520564278341406936514505025", + "163392546508137641015941477323577944979880605638", + "377275273388274737486963631508708874290879224017" + ], + false, + true + ], + [ + [ + "1291443452519084660447859227986601659518541638460", + "112058630412344602580297230270401630924721837233", + "1310776432618434588878573426769822304643500563551", + "896249742481810554251029260932183625446607230611" + ], + true, + true + ], + [ + [ + "1170111064559699268427173911742174379072918272273", + "90922911130247568793550702700741138240793013800", + "1297149906220221980314137464340054443783182741895", + "526481228670254156918116039121105910508933210228" + ], + true, + true + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "206812964373285716497200397865405157459298588425" + }, + { + "type": "number", + "value": "398349588486513236206520564278341406936514505025" + }, + { + "type": "number", + "value": "163392546508137641015941477323577944979880605638" + }, + { + "type": "number", + "value": "377275273388274737486963631508708874290879224017" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1291443452519084660447859227986601659518541638460" + }, + { + "type": "number", + "value": "112058630412344602580297230270401630924721837233" + }, + { + "type": "number", + "value": "1310776432618434588878573426769822304643500563551" + }, + { + "type": "number", + "value": "896249742481810554251029260932183625446607230611" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1170111064559699268427173911742174379072918272273" + }, + { + "type": "number", + "value": "90922911130247568793550702700741138240793013800" + }, + { + "type": "number", + "value": "1297149906220221980314137464340054443783182741895" + }, + { + "type": "number", + "value": "526481228670254156918116039121105910508933210228" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610337806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610284565b60405180910390f35b610056610212565b61005e610212565b61006661023f565b61006e610266565b732439d0663e7827ac73b26759b3147af40e9b970981527345c69d034bb2df58b76920c68a639be1bde52941602080830191909152731c9ec672778aa330d0d4a3d05ed7edf051ccf7c66040808401919091527342159bbd6e9feab1c8168c57a0ece0fca41358d1606084015291835260009083015260019082015281526100f461023f565b6100fc610266565b73e23653c71b460f00a79645406d75b6e568702b3c81527313a0e1fd86c7aa6952f880ca95784f2b2f1354b160208083019190915273e5993f8155bc1cf5487f59091b9a8909c3a55c5f604080840191909152739cfd3a790882c918cfc01465c71736a7a44f1693606084015291835260018382018190529183019190915282015261018661023f565b61018e610266565b73ccf598458fbb1865472d444305808c57f5c639118152730fed1fd4fc1c542bc165e936ebe05e5a621cee2860208083019190915273e33636a7542e0835ad9f607204918291a0a5f187604080840191909152735c383c1b4a269e7ab94858eea49797bae395e0746060840152918352600190830181905282820152820152919050565b60405180606001604052806003905b61022961023f565b8152602001906001900390816102215790505090565b6040518060600160405280610252610266565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b610240810181836000805b60038110156102f7578251805185845b60048110156102c75782516001600160a01b031682526020928301929091019060010161029f565b50505060208181015115156080870152604090910151151560a086015260c090940193929092019160010161028f565b505050509291505056fea2646970667358221220aa80c18e8647f973a0df348d085c816edc0137244ca7c784990a3f0768db0a0d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_30d0eb74 {\n uint160[4] s_0;\n bool s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_30d0eb74[3] memory) {\n S_30d0eb74[3] memory r;\n {\n S_30d0eb74 memory r_0;\n {\n uint160[4] memory r_0_0;\n {\n uint160 r_0_0_0 = 206812964373285716497200397865405157459298588425;\n r_0_0[0] = r_0_0_0;\n }\n {\n uint160 r_0_0_1 = 398349588486513236206520564278341406936514505025;\n r_0_0[1] = r_0_0_1;\n }\n {\n uint160 r_0_0_2 = 163392546508137641015941477323577944979880605638;\n r_0_0[2] = r_0_0_2;\n }\n {\n uint160 r_0_0_3 = 377275273388274737486963631508708874290879224017;\n r_0_0[3] = r_0_0_3;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_30d0eb74 memory r_1;\n {\n uint160[4] memory r_1_0;\n {\n uint160 r_1_0_0 = 1291443452519084660447859227986601659518541638460;\n r_1_0[0] = r_1_0_0;\n }\n {\n uint160 r_1_0_1 = 112058630412344602580297230270401630924721837233;\n r_1_0[1] = r_1_0_1;\n }\n {\n uint160 r_1_0_2 = 1310776432618434588878573426769822304643500563551;\n r_1_0[2] = r_1_0_2;\n }\n {\n uint160 r_1_0_3 = 896249742481810554251029260932183625446607230611;\n r_1_0[3] = r_1_0_3;\n }\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1.s_1 = r_1_1;\n }\n {\n bool r_1_2 = true;\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_30d0eb74 memory r_2;\n {\n uint160[4] memory r_2_0;\n {\n uint160 r_2_0_0 = 1170111064559699268427173911742174379072918272273;\n r_2_0[0] = r_2_0_0;\n }\n {\n uint160 r_2_0_1 = 90922911130247568793550702700741138240793013800;\n r_2_0[1] = r_2_0_1;\n }\n {\n uint160 r_2_0_2 = 1297149906220221980314137464340054443783182741895;\n r_2_0[2] = r_2_0_2;\n }\n {\n uint160 r_2_0_3 = 526481228670254156918116039121105910508933210228;\n r_2_0[3] = r_2_0_3;\n }\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2.s_1 = r_2_1;\n }\n {\n bool r_2_2 = true;\n r_2.s_2 = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000002439d0663e7827ac73b26759b3147af40e9b970900000000000000000000000045c69d034bb2df58b76920c68a639be1bde529410000000000000000000000001c9ec672778aa330d0d4a3d05ed7edf051ccf7c600000000000000000000000042159bbd6e9feab1c8168c57a0ece0fca41358d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e23653c71b460f00a79645406d75b6e568702b3c00000000000000000000000013a0e1fd86c7aa6952f880ca95784f2b2f1354b1000000000000000000000000e5993f8155bc1cf5487f59091b9a8909c3a55c5f0000000000000000000000009cfd3a790882c918cfc01465c71736a7a44f169300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ccf598458fbb1865472d444305808c57f5c639110000000000000000000000000fed1fd4fc1c542bc165e936ebe05e5a621cee28000000000000000000000000e33636a7542e0835ad9f607204918291a0a5f1870000000000000000000000005c383c1b4a269e7ab94858eea49797bae395e07400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(uint200,address,string,bytes28,bool)", + "type": "(uint200,address,string,bytes28,bool)", + "value": [ + "1466685239523560880552795936968613163966722432732832348591912", + "0x30D346fA2e2f579959f7EFDC209D1e69D597BD36", + "Moo é🚀éoéééooM M🚀o🚀M🚀 🚀MMMM🚀🚀oé🚀 o🚀 ééoooM", + "0x81fbce4e01f533c53672a5243480939e094c136e04ed963c91f3348c", + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "1466685239523560880552795936968613163966722432732832348591912" + }, + { + "type": "address", + "value": "0x30D346fA2e2f579959f7EFDC209D1e69D597BD36" + }, + { + "type": "string", + "value": "Moo é🚀éoéééooM M🚀o🚀M🚀 🚀MMMM🚀🚀oé🚀 o🚀 ééoooM" + }, + { + "type": "hexstring", + "value": "0x81fbce4e01f533c53672a5243480939e094c136e04ed963c91f3348c" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061024d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061011e565b60405180910390f35b6040805160a0808201835260008083526020808401829052606084860181905280850183905260808086018490528651948501875284870182905290840183905283810183905278e9a80c6502fe4b6e2afcb01fa38aafb9760e8ca1b31591572884527330d346fa2e2f579959f7efdc209d1e69d597bd36848301528551908101909552604d80865293949293919291906101cb908301396040830152507f81fbce4e01f533c53672a5243480939e094c136e04ed963c91f3348c00000000606082015260016080820152919050565b602080825282516001600160c81b031682820152828101516001600160a01b031660408084019190915283015160a06060840152805160c084018190526000929190835b8181101561017e5782810184015186820160e001528301610162565b8181111561019057600060e083880101525b50606086015163ffffffff19811660808701529250608086015180151560a08701529250601f01601f19169390930160e00194935050505056fe4d6f6f20c3a9f09f9a80c3a96fc3a9c3a9c3a96f6f4d204df09f9a806ff09f9a804df09f9a8020f09f9a804d4d4d4df09f9a80f09f9a806fc3a9f09f9a80206ff09f9a8020c3a9c3a96f6f6f4da2646970667358221220deb611e9ad0e3830476e3008e949b8bcb4e0c422b626f920a8bb1ad38703941f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_3e342fcf {\n uint200 s_0;\n address s_1;\n string s_2;\n bytes28 s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_3e342fcf memory) {\n S_3e342fcf memory r;\n {\n uint200 r_0 = 1466685239523560880552795936968613163966722432732832348591912;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x30D346fA2e2f579959f7EFDC209D1e69D597BD36;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀éoéééooM M🚀o🚀M🚀 🚀MMMM🚀🚀oé🚀 o🚀 ééoooM\";\n r.s_2 = r_2;\n }\n {\n bytes28 r_3 = bytes28(0x81fbce4e01f533c53672a5243480939e094c136e04ed963c91f3348c);\n r.s_3 = r_3;\n }\n {\n bool r_4 = true;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000e9a80c6502fe4b6e2afcb01fa38aafb9760e8ca1b31591572800000000000000000000000030d346fa2e2f579959f7efdc209d1e69d597bd3600000000000000000000000000000000000000000000000000000000000000a081fbce4e01f533c53672a5243480939e094c136e04ed963c91f3348c000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a80c3a96fc3a9c3a9c3a96f6f4d204df09f9a806ff09f9a804df09f9a8020f09f9a804d4d4d4df09f9a80f09f9a806fc3a9f09f9a80206ff09f9a8020c3a9c3a96f6f6f4d00000000000000000000000000000000000000" + }, + { + "name": "random-(uint216,(bool,string,string[]))", + "type": "(uint216,(bool,string,string[]))", + "value": [ + "37269259211678110413027565335925473115767764488750329966908393013", + [ + false, + "Moo é🚀o 🚀🚀éo o éoooM é🚀Mo🚀o MéMoo Mé oo🚀 éoééM🚀 Mo 🚀ooo", + [ + "Moo é🚀 é", + "Moo é🚀é🚀 é é Moooo", + "Moo é🚀 Mo🚀Méo🚀éoé 🚀 oMMoéooéoéMé oM oMMéo🚀🚀o", + "Moo é🚀é🚀M MooéooééMo🚀oo🚀oo🚀🚀 oé🚀Moé oMooMooMé🚀é🚀🚀🚀o🚀 oéo " + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "37269259211678110413027565335925473115767764488750329966908393013" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀o 🚀🚀éo o éoooM é🚀Mo🚀o MéMoo Mé oo🚀 éoééM🚀 Mo 🚀ooo" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é" + }, + { + "type": "string", + "value": "Moo é🚀é🚀 é é Moooo" + }, + { + "type": "string", + "value": "Moo é🚀 Mo🚀Méo🚀éoé 🚀 oMMoéooéoéMé oM oMMéo🚀🚀o" + }, + { + "type": "string", + "value": "Moo é🚀é🚀M MooéooééMo🚀oo🚀oo🚀🚀 oé🚀Moé oMooMooMé🚀é🚀🚀🚀o🚀 oéo " + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104ad806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102b0565b60405180910390f35b61005661021d565b61005e61021d565b7a5a98b789d4bbbca09aa361253ea1066d99145c352df0d07907c635815260408051606080820183526000825260208201819052918101919091526000808252604080516080810190915260588082526103b7602083013960208301525060408051600480825260a08201909252600091816020015b60608152602001906001900390816100d457905050905060006040518060400160405280600d81526020016c4d6f6f20c3a9f09f9a8020c3a960981b8152509050808260008151811061012957610129610359565b60200260200101819052505060006040518060400160405280601c81526020017f4d6f6f20c3a9f09f9a80c3a9f09f9a8020c3a920c3a9204d6f6f6f6f000000008152509050808260018151811061018357610183610359565b602002602001018190525050600060405180608001604052806047815260200161037060479139905080826002815181106101c0576101c0610359565b60200260200101819052505060006040518060a001604052806069815260200161040f60699139905080826003815181106101fd576101fd610359565b602090810291909101810191909152604084019290925250820152919050565b604051806040016040528060006001600160d81b0316815260200161025e604051806060016040528060001515815260200160608152602001606081525090565b905290565b6000815180845260005b818110156102895760208185018101518683018201520161026d565b8181111561029b576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835260018060d81b03845116818401528084015160408085015280511515606085015281810151606060808601526102f060c0860182610263565b60409290920151858303605f190160a0870152805180845290840192915083820190600581901b8301850160005b8281101561034c57601f1985830301845261033a828751610263565b9587019593870193915060010161031e565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80204d6ff09f9a804dc3a96ff09f9a80c3a96fc3a920f09f9a80206f4d4d6fc3a96f6fc3a96fc3a94dc3a9206f4d206f4d4dc3a96ff09f9a80f09f9a806f4d6f6f20c3a9f09f9a806f20f09f9a80f09f9a80c3a96f206f20c3a96f6f6f4d20c3a9f09f9a804d6ff09f9a806f204dc3a94d6f6f204dc3a9206f6ff09f9a8020c3a96fc3a9c3a94df09f9a80204d6f20f09f9a806f6f6f4d6f6f20c3a9f09f9a80c3a9f09f9a804d204d6f6fc3a96f6fc3a9c3a94d6ff09f9a806f6ff09f9a806f6ff09f9a80f09f9a8020206fc3a9f09f9a804d6fc3a920206f4d6f6f4d6f6f4dc3a9f09f9a80c3a9f09f9a80f09f9a80f09f9a806ff09f9a80206fc3a96f20a26469706673582212201883f6cea7da0eac5f2fa3dda1a067fdeda6f34c28e07ad1043dd86282b25bd564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_447cf756 {\n bool s_0;\n string s_1;\n string[] s_2;\n }\n\n struct S_4b3ee88e {\n uint216 s_0;\n S_447cf756 s_1;\n }\n\n function test () public pure returns (S_4b3ee88e memory) {\n S_4b3ee88e memory r;\n {\n uint216 r_0 = 37269259211678110413027565335925473115767764488750329966908393013;\n r.s_0 = r_0;\n }\n {\n S_447cf756 memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀o 🚀🚀éo o éoooM é🚀Mo🚀o MéMoo Mé oo🚀 éoééM🚀 Mo 🚀ooo\";\n r_1.s_1 = r_1_1;\n }\n {\n string[] memory r_1_2 = new string[](4);\n {\n string memory r_1_2_0 = unicode\"Moo é🚀 é\";\n r_1_2[0] = r_1_2_0;\n }\n {\n string memory r_1_2_1 = unicode\"Moo é🚀é🚀 é é Moooo\";\n r_1_2[1] = r_1_2_1;\n }\n {\n string memory r_1_2_2 = unicode\"Moo é🚀 Mo🚀Méo🚀éoé 🚀 oMMoéooéoéMé oM oMMéo🚀🚀o\";\n r_1_2[2] = r_1_2_2;\n }\n {\n string memory r_1_2_3 = unicode\"Moo é🚀é🚀M MooéooééMo🚀oo🚀oo🚀🚀 oé🚀Moé oMooMooMé🚀é🚀🚀🚀o🚀 oéo \";\n r_1_2[3] = r_1_2_3;\n }\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000005a98b789d4bbbca09aa361253ea1066d99145c352df0d07907c63500000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a806f20f09f9a80f09f9a80c3a96f206f20c3a96f6f6f4d20c3a9f09f9a804d6ff09f9a806f204dc3a94d6f6f204dc3a9206f6ff09f9a8020c3a96fc3a9c3a94df09f9a80204d6f20f09f9a806f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a8020c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80c3a9f09f9a8020c3a920c3a9204d6f6f6f6f0000000000000000000000000000000000000000000000000000000000000000000000474d6f6f20c3a9f09f9a80204d6ff09f9a804dc3a96ff09f9a80c3a96fc3a920f09f9a80206f4d4d6fc3a96f6fc3a96fc3a94dc3a9206f4d206f4d4dc3a96ff09f9a80f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000694d6f6f20c3a9f09f9a80c3a9f09f9a804d204d6f6fc3a96f6fc3a9c3a94d6ff09f9a806f6ff09f9a806f6ff09f9a80f09f9a8020206fc3a9f09f9a804d6fc3a920206f4d6f6f4d6f6f4dc3a9f09f9a80c3a9f09f9a80f09f9a80f09f9a806ff09f9a80206fc3a96f200000000000000000000000000000000000000000000000" + }, + { + "name": "random-(uint48,bool,int8,int232,bytes8)", + "type": "(uint48,bool,int8,int232,bytes8)", + "value": [ + "8849554832167", + true, + "79", + "-1799200249094320311329176611620416148326036524086530161272121320254483", + "0x0ce77c85b8edc798" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "8849554832167" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "79" + }, + { + "type": "number", + "value": "-1799200249094320311329176611620416148326036524086530161272121320254483" + }, + { + "type": "hexstring", + "value": "0x0ce77c85b8edc798" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b5061012b8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160a0808201835260008083526020808401829052838501829052606080850183905260809485018390528551808501875265080c72927b278082526001828501908152604f838a019081527fffffffbd4392783208d56cf11327c05fb9c3b52812f0882d72f12e672dc053ed84860190815267019cef90b71db8f360c31b948a019485528a519384529151151595830195909552935190940b848801529151601c0b90830152516001600160c01b0319169281019290925291519081900390910190f3fea2646970667358221220ba0c21a84851a1fab90d5b49eb2178620afb9098d472ef181b47538d38394f7b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2a9a220f {\n uint48 s_0;\n bool s_1;\n int8 s_2;\n int232 s_3;\n bytes8 s_4;\n }\n\n function test () public pure returns (S_2a9a220f memory) {\n S_2a9a220f memory r;\n {\n uint48 r_0 = 8849554832167;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n int8 r_2 = 79;\n r.s_2 = r_2;\n }\n {\n int232 r_3 = -1799200249094320311329176611620416148326036524086530161272121320254483;\n r.s_3 = r_3;\n }\n {\n bytes8 r_4 = bytes8(0x0ce77c85b8edc798);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000080c72927b270000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004fffffffbd4392783208d56cf11327c05fb9c3b52812f0882d72f12e672dc053ed0ce77c85b8edc798000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(uint8,bool,bool,bytes30,bytes4)", + "type": "(uint8,bool,bool,bytes30,bytes4)", + "value": [ + "199", + true, + true, + "0x73ca0947c80591b6315ca332083686f248e8c7ef7a6722fd25889f23bf32", + "0x636d9291" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "199" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x73ca0947c80591b6315ca332083686f248e8c7ef7a6722fd25889f23bf32" + }, + { + "type": "hexstring", + "value": "0x636d9291" + } + ] + }, + "bytecode": "0x6080604052348015600f57600080fd5b506101258061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f8a8fd6d14602d575b600080fd5b6040805160a080820183526000808352602080840182905283850182905260608085018390526080948501929092528451808401865260c780825260018284018181528389019182527f73ca0947c80591b6315ca332083686f248e8c7ef7a6722fd25889f23bf32000084870190815263636d929160e01b9489019485528951938452905115159483019490945251151596810196909652905161ffff191691850191909152516001600160e01b031916918301919091520160405180910390f3fea26469706673582212206ae8c271479ec76395110cf604fff453efd228e867214bc93ea834259163f0e164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5cd358b1 {\n uint8 s_0;\n bool s_1;\n bool s_2;\n bytes30 s_3;\n bytes4 s_4;\n }\n\n function test () public pure returns (S_5cd358b1 memory) {\n S_5cd358b1 memory r;\n {\n uint8 r_0 = 199;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n bytes30 r_3 = bytes30(0x73ca0947c80591b6315ca332083686f248e8c7ef7a6722fd25889f23bf32);\n r.s_3 = r_3;\n }\n {\n bytes4 r_4 = bytes4(0x636d9291);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000c70000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000173ca0947c80591b6315ca332083686f248e8c7ef7a6722fd25889f23bf320000636d929100000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(uint88,bytes31,string[],string)", + "type": "(uint88,bytes31,string[],string)", + "value": [ + "131677411147996863364762453", + "0x0694b0fa39b82736d691dff7f1b82b8e11a9f47aebf74741322b546e3a1fd6", + ["Moo é🚀", "Moo é🚀ooééMéMo ééé o🚀o Moé🚀éM🚀 o M🚀MMo"], + "Moo é🚀o🚀éMo🚀éMoé o MéoM🚀 o éM🚀🚀ooo Mé🚀M éMM o🚀 é oéooMMéoéM" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "131677411147996863364762453" + }, + { + "type": "hexstring", + "value": "0x0694b0fa39b82736d691dff7f1b82b8e11a9f47aebf74741322b546e3a1fd6" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀ooééMéMo ééé o🚀o Moé🚀éM🚀 o M🚀MMo" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀éMo🚀éMoé o MéoM🚀 o éM🚀🚀ooo Mé🚀M éMM o🚀 é oéooMMéoéM" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610384806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101e9565b60405180910390f35b6040805160808082018352600080835260208084018290526060848601819052808501819052855193840186528386018190528381018190526a6cebc6c2fe86a9d2668b5584527f0694b0fa39b82736d691dff7f1b82b8e11a9f47aebf74741322b546e3a1fd6008483015285516002808252918101909652939492939192919082015b60608152602001906001900390816100d257905050905060006040518060400160405280600a8152602001689adede418753e13f3560b71b8152509050808260008151811061012357610123610297565b602002602001018190525050600060405180606001604052806040815260200161030f604091399050808260018151811061016057610160610297565b6020026020010181905250508082604001819052505060006040518060a00160405280606181526020016102ae60619139606083015250919050565b6000815180845260005b818110156101c2576020818501810151868301820152016101a6565b818111156101d4576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835260a083016affffffffffffffffffffff8551168285015260ff198286015116604085015260408501516080606086015281815180845260c08701915060c08160051b8801019350848301925060005b8181101561026d5760bf1988860301835261025b85855161019c565b9450928501929185019160010161023f565b505050506060850151848203601f19016080860152915061028e818361019c565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806ff09f9a80c3a94d6ff09f9a80c3a94d6fc3a9206f204dc3a96f4df09f9a80206f20c3a94df09f9a80f09f9a806f6f6f20204dc3a9f09f9a804d20c3a94d4d206ff09f9a8020c3a920206fc3a96f6f4d4dc3a96fc3a94d4d6f6f20c3a9f09f9a806f6fc3a9c3a94dc3a94d6f20c3a9c3a9c3a9206ff09f9a806f20204d6fc3a9f09f9a80c3a94df09f9a80206f20204df09f9a804d4d6fa2646970667358221220da7f3d697e6afed7d0f914db82378397d6705c87d5792c318f6680924addd80c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_780531b5 {\n uint88 s_0;\n bytes31 s_1;\n string[] s_2;\n string s_3;\n }\n\n function test () public pure returns (S_780531b5 memory) {\n S_780531b5 memory r;\n {\n uint88 r_0 = 131677411147996863364762453;\n r.s_0 = r_0;\n }\n {\n bytes31 r_1 = bytes31(0x0694b0fa39b82736d691dff7f1b82b8e11a9f47aebf74741322b546e3a1fd6);\n r.s_1 = r_1;\n }\n {\n string[] memory r_2 = new string[](2);\n {\n string memory r_2_0 = unicode\"Moo é🚀\";\n r_2[0] = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀ooééMéMo ééé o🚀o Moé🚀éM🚀 o M🚀MMo\";\n r_2[1] = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀o🚀éMo🚀éMoé o MéoM🚀 o éM🚀🚀ooo Mé🚀M éMM o🚀 é oéooMMéoéM\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000006cebc6c2fe86a9d2668b550694b0fa39b82736d691dff7f1b82b8e11a9f47aebf74741322b546e3a1fd60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000404d6f6f20c3a9f09f9a806f6fc3a9c3a94dc3a94d6f20c3a9c3a9c3a9206ff09f9a806f20204d6fc3a9f09f9a80c3a94df09f9a80206f20204df09f9a804d4d6f00000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a806ff09f9a80c3a94d6ff09f9a80c3a94d6fc3a9206f204dc3a96f4df09f9a80206f20c3a94df09f9a80f09f9a806f6f6f20204dc3a9f09f9a804d20c3a94d4d206ff09f9a8020c3a920206fc3a96f6f4d4dc3a96fc3a94d00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((address,int,bytes21,string),bytes19,bytes29)", + "type": "((address,int,bytes21,string),bytes19,bytes29)", + "value": [ + [ + "0xf6273fc839400957A3875987319aeBd2640a517c", + "-35223253742223832305464814722052968728048465483048442976122005220664358439309", + "0x1a65cd983b46d2b011a76f389d1c6e88078d4bc0ce", + "Moo é🚀oéo ooo o oMoé🚀éMo🚀Moé🚀MMéo oééoo ooo" + ], + "0x2033ae3e9ca7481113a392c3a6a10d56c9502a", + "0x860cdd3813dd9379ea6e6bf9ac0068f7a0b68b3a69fecf03bf5b3f3e01" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xf6273fc839400957A3875987319aeBd2640a517c" + }, + { + "type": "number", + "value": "-35223253742223832305464814722052968728048465483048442976122005220664358439309" + }, + { + "type": "hexstring", + "value": "0x1a65cd983b46d2b011a76f389d1c6e88078d4bc0ce" + }, + { + "type": "string", + "value": "Moo é🚀oéo ooo o oMoé🚀éMo🚀Moé🚀MMéo oééoo ooo" + } + ] + }, + { + "type": "hexstring", + "value": "0x2033ae3e9ca7481113a392c3a6a10d56c9502a" + }, + { + "type": "hexstring", + "value": "0x860cdd3813dd9379ea6e6bf9ac0068f7a0b68b3a69fecf03bf5b3f3e01" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102cb806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610187565b60405180910390f35b6040805160e0808201835260006060808401828152608080860184905260a080870185905260c080880185905292875260208088018690528789018690528851968701895286850186815287840187905291870186905292860184905285528482018490528487018490528651908101875280830183905273f6273fc839400957a3875987319aebd2640a517c81527fb2205849b8a051e005a16bb9c75864f622d338f26a97f8524daa550299c4767381830152740d32e6cc1da3695808d3b79c4e8e374403c6a5e06760591b818801528651928301909652603f8083529495939490610257908301396060830152508152721019d71f4e53a40889d1c961d35086ab64a81560691b60208201527f860cdd3813dd9379ea6e6bf9ac0068f7a0b68b3a69fecf03bf5b3f3e010000006040820152919050565b60006020808352835160608285015260018060a01b0381511660808501528181015160a08501526affffffffffffffffffffff1960408201511660c085015260608101519050608060e085015280518061010086015260005b818110156101fd57828101840151868201610120015283016101e0565b8181111561021057600061012083880101525b50918501516cffffffffffffffffffffffffff198116604086015291604086015162ffffff19811660608701529250601f01601f1916939093016101200194935050505056fe4d6f6f20c3a9f09f9a806fc3a96f206f6f6f206f206f4d6fc3a9f09f9a80c3a94d6ff09f9a804d6fc3a9f09f9a804d4dc3a96f206fc3a9c3a96f6f206f6f6fa26469706673582212205337104c32214f39b55c03bc74804b019b1c1f0c6c1c009c34db71ab72a47bff64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2877f29b {\n address s_0;\n int256 s_1;\n bytes21 s_2;\n string s_3;\n }\n\n struct S_9de16c4f {\n S_2877f29b s_0;\n bytes19 s_1;\n bytes29 s_2;\n }\n\n function test () public pure returns (S_9de16c4f memory) {\n S_9de16c4f memory r;\n {\n S_2877f29b memory r_0;\n {\n address r_0_0 = 0xf6273fc839400957A3875987319aeBd2640a517c;\n r_0.s_0 = r_0_0;\n }\n {\n int r_0_1 = -35223253742223832305464814722052968728048465483048442976122005220664358439309;\n r_0.s_1 = r_0_1;\n }\n {\n bytes21 r_0_2 = bytes21(0x1a65cd983b46d2b011a76f389d1c6e88078d4bc0ce);\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀oéo ooo o oMoé🚀éMo🚀Moé🚀MMéo oééoo ooo\";\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n bytes19 r_1 = bytes19(0x2033ae3e9ca7481113a392c3a6a10d56c9502a);\n r.s_1 = r_1;\n }\n {\n bytes29 r_2 = bytes29(0x860cdd3813dd9379ea6e6bf9ac0068f7a0b68b3a69fecf03bf5b3f3e01);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000602033ae3e9ca7481113a392c3a6a10d56c9502a00000000000000000000000000860cdd3813dd9379ea6e6bf9ac0068f7a0b68b3a69fecf03bf5b3f3e01000000000000000000000000000000f6273fc839400957a3875987319aebd2640a517cb2205849b8a051e005a16bb9c75864f622d338f26a97f8524daa550299c476731a65cd983b46d2b011a76f389d1c6e88078d4bc0ce00000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a806fc3a96f206f6f6f206f206f4d6fc3a9f09f9a80c3a94d6ff09f9a804d6fc3a9f09f9a804d4dc3a96f206fc3a9c3a96f6f206f6f6f00" + }, + { + "name": "random-((address),address,(string,int64),bool[3])", + "type": "((address),address,(string,int64),bool[3])", + "value": [ + ["0x89d73011D9A24859e8D2B555C8eC19C6F30CD487"], + "0xDFcb020660AfDc9402549A2860BBC63763238a34", + ["Moo é🚀🚀o 🚀🚀 🚀 Mo", "-4698641931345814331"], + [false, false, true] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x89d73011D9A24859e8D2B555C8eC19C6F30CD487" + } + ] + }, + { + "type": "address", + "value": "0xDFcb020660AfDc9402549A2860BBC63763238a34" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀o 🚀🚀 🚀 Mo" + }, + { + "type": "number", + "value": "-4698641931345814331" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610295806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610191565b60405180910390f35b610056610104565b61005e610104565b60408051602080820183527389d73011d9a24859e8d2b555c8ec19c6f30cd487825290835273dfcb020660afdc9402549a2860bbc63763238a348382015281518083018352606080825260008284018190528451918201909452602180825291939290919061023f90830139825250674134edf12c9f633a19602082015260408201526100e9610148565b60008082526020820152600160408201526060820152919050565b6040805160a081018252600060808201818152825260208083018290528351808501855260608082529181019290925292820152908101610143610148565b905290565b60405180606001604052806003906020820280368337509192915050565b8060005b600381101561018b578151151584526020938401939091019060010161016a565b50505050565b6000602080835260018060a01b03808551511682850152808286015116604085015250604084015160c060608501528051604060e086015280518061012087015260005b818110156101f257828101850151878201610140015284016101d5565b8181111561020557600061014083890101525b509282015160070b6101008601526060860151926102266080870185610166565b601f01601f191694909401610140019594505050505056fe4d6f6f20c3a9f09f9a80f09f9a806f20f09f9a80f09f9a802020f09f9a80204d6fa2646970667358221220edd72f6d0bddc5e26ec0c576d0587720dc6d5758937e25f80bc8b4789797228f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_4d9b5297 {\n string s_0;\n int64 s_1;\n }\n\n struct S_7843ab3b {\n S_421683f8 s_0;\n address s_1;\n S_4d9b5297 s_2;\n bool[3] s_3;\n }\n\n function test () public pure returns (S_7843ab3b memory) {\n S_7843ab3b memory r;\n {\n S_421683f8 memory r_0;\n {\n address r_0_0 = 0x89d73011D9A24859e8D2B555C8eC19C6F30CD487;\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xDFcb020660AfDc9402549A2860BBC63763238a34;\n r.s_1 = r_1;\n }\n {\n S_4d9b5297 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀🚀o 🚀🚀 🚀 Mo\";\n r_2.s_0 = r_2_0;\n }\n {\n int64 r_2_1 = -4698641931345814331;\n r_2.s_1 = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n bool[3] memory r_3;\n {\n bool r_3_0 = false;\n r_3[0] = r_3_0;\n }\n {\n bool r_3_1 = false;\n r_3[1] = r_3_1;\n }\n {\n bool r_3_2 = true;\n r_3[2] = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000089d73011d9a24859e8d2b555c8ec19c6f30cd487000000000000000000000000dfcb020660afdc9402549a2860bbc63763238a3400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040ffffffffffffffffffffffffffffffffffffffffffffffffbecb120ed3609cc500000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a80f09f9a806f20f09f9a80f09f9a802020f09f9a80204d6f00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((address),address,bool,string[],string)", + "type": "((address),address,bool,string[],string)", + "value": [ + ["0xBc381872B1127623B94277197C82a69CfA8a79FD"], + "0xb79b5adDc7bBd3d5c6f3A163Ec8FFF8FD4A31bC7", + false, + [], + "Moo é🚀oo o oé" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xBc381872B1127623B94277197C82a69CfA8a79FD" + } + ] + }, + { + "type": "address", + "value": "0xb79b5adDc7bBd3d5c6f3A163Ec8FFF8FD4A31bC7" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [] + }, + { + "type": "string", + "value": "Moo é🚀oo o oé" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061028d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101a1565b60405180910390f35b6040805160c081018252600060a0820181815282526020820181905291810191909152606080820181905260808201526040805160c081018252600060a082018181528252602082018190529181019190915260608082018190526080820152604080516020808201835273bc381872b1127623b94277197c82a69cfa8a79fd825290835273b79b5addc7bbd3d5c6f3a163ec8fff8fd4a31bc783820152600083830181905282518181529182019092528161011a565b60608152602001906001900390816101055790505b506060830152506040805180820190915260128152714d6f6f20c3a9f09f9a806f6f206f206fc3a960701b60208201526080820152919050565b6000815180845260005b8181101561017a5760208185018101518683018201520161015e565b8181111561018c576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835260c0830160018060a01b03808651511683860152808387015116604086015250604085015115156060850152606085015160a0608086015281815180845260e08701915060e08160051b8801019350848301925060005b8181101561022d5760df1988860301835261021b858551610154565b945092850192918501916001016101ff565b505050506080850151848203601f190160a0860152915061024e8183610154565b9594505050505056fea264697066735822122093c0adfc234d44cd5efb5fd9440720a0dc95cb50edce9cbd8fb33ac69f43566d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_97a42852 {\n S_421683f8 s_0;\n address s_1;\n bool s_2;\n string[] s_3;\n string s_4;\n }\n\n function test () public pure returns (S_97a42852 memory) {\n S_97a42852 memory r;\n {\n S_421683f8 memory r_0;\n {\n address r_0_0 = 0xBc381872B1127623B94277197C82a69CfA8a79FD;\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xb79b5adDc7bBd3d5c6f3A163Ec8FFF8FD4A31bC7;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n string[] memory r_3 = new string[](0);\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀oo o oé\";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000bc381872b1127623b94277197c82a69cfa8a79fd000000000000000000000000b79b5addc7bbd3d5c6f3a163ec8fff8fd4a31bc7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a806f6f206f206fc3a90000000000000000000000000000" + }, + { + "name": "random-((address),string,bool[4],bool,bool)", + "type": "((address),string,bool[4],bool,bool)", + "value": [ + ["0x9518f66BcbA474113a9fe57AFC1d0232Ad9062d3"], + "Moo é🚀oéo", + [false, false, true, false], + false, + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x9518f66BcbA474113a9fe57AFC1d0232Ad9062d3" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oéo" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610249806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061016a565b60405180910390f35b6100566100e6565b61005e6100e6565b6040805160208082018352739518f66bcba474113a9fe57afc1d0232ad9062d382529083528151808301909252600e82526d4d6f6f20c3a9f09f9a806fc3a96f60901b828201528201526100b0610121565b60008082526020820181905260016040808401919091526060808401839052908401929092529082018190526080820152919050565b6040805160c081018252600060a0820190815281526060602082015290810161010d610121565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b8060005b60048110156101645781511515845260209384019390910190600101610143565b50505050565b6000602080835260018060a01b0384515116818401528084015161010080604086015281518061012087015260005b818110156101b65783810185015187820161014001528401610199565b818111156101c957600061014083890101525b50604087015193506101de606087018561013f565b606087015180151560e088015293506080870151801515878401529350601f01601f191694909401610140019594505050505056fea2646970667358221220a238a58cb21799bca521947cba6fa766b3b9bd9b8c6f6f41699564578af8069f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_79a76c03 {\n S_421683f8 s_0;\n string s_1;\n bool[4] s_2;\n bool s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_79a76c03 memory) {\n S_79a76c03 memory r;\n {\n S_421683f8 memory r_0;\n {\n address r_0_0 = 0x9518f66BcbA474113a9fe57AFC1d0232Ad9062d3;\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀oéo\";\n r.s_1 = r_1;\n }\n {\n bool[4] memory r_2;\n {\n bool r_2_0 = false;\n r_2[0] = r_2_0;\n }\n {\n bool r_2_1 = false;\n r_2[1] = r_2_1;\n }\n {\n bool r_2_2 = true;\n r_2[2] = r_2_2;\n }\n {\n bool r_2_3 = false;\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n {\n bool r_4 = false;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000009518f66bcba474113a9fe57afc1d0232ad9062d30000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a806fc3a96f000000000000000000000000000000000000" + }, + { + "name": "random-((bool[]),address,address,address,address)", + "type": "((bool[]),address,address,address,address)", + "value": [ + [[false, false, false]], + "0xe1Fa257633F04205D4334372E98918F2a04c14fa", + "0xe8d4E929CB4944f971a9e7A42767873A076b5423", + "0x2EfF2A80A1ec1D410E62fA12230758C4Cb8f01D0", + "0xaC9128bf9AfcFf3aF995B16379583D7606d8a3C5" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "address", + "value": "0xe1Fa257633F04205D4334372E98918F2a04c14fa" + }, + { + "type": "address", + "value": "0xe8d4E929CB4944f971a9e7A42767873A076b5423" + }, + { + "type": "address", + "value": "0x2EfF2A80A1ec1D410E62fA12230758C4Cb8f01D0" + }, + { + "type": "address", + "value": "0xaC9128bf9AfcFf3aF995B16379583D7606d8a3C5" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102cb806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101ce565b60405180910390f35b6040805160c081018252606060a082018181528252600060208301819052928201839052810182905260808101919091526040805160c081018252606060a0820181815282526000602083018190529282018390528101829052608081019190915260408051602081018252606081528151600380825260808201909352909160009190816020016020820280368337019050509050600080826000815181106100fa576100fa61027f565b60200260200101901515908115158152505050600080826001815181106101235761012361027f565b602002602001019015159081151581525050506000808260028151811061014c5761014c61027f565b9115156020928302919091018201529183525090825273e1fa257633f04205d4334372e98918f2a04c14fa9082015273e8d4e929cb4944f971a9e7a42767873a076b54236040820152732eff2a80a1ec1d410e62fa12230758c4cb8f01d0606082015273ac9128bf9afcff3af995b16379583d7606d8a3c56080820152919050565b6020808252825160a0838301525160c08301829052805160e084018190526000929182019083906101008601905b8083101561021e578351151582529284019260019290920191908401906101fc565b50928601516001600160a01b03811660408701529260408701516001600160a01b0381166060880152935060608701516001600160a01b0381166080880152935060808701516001600160a01b03811660a088015293509695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220c7246989554419d90e660533d2f6bbe93476053849ac4912c22c0cbdc154558c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8761250c {\n bool[] s_0;\n }\n\n struct S_24340374 {\n S_8761250c s_0;\n address s_1;\n address s_2;\n address s_3;\n address s_4;\n }\n\n function test () public pure returns (S_24340374 memory) {\n S_24340374 memory r;\n {\n S_8761250c memory r_0;\n {\n bool[] memory r_0_0 = new bool[](3);\n {\n bool r_0_0_0 = false;\n r_0_0[0] = r_0_0_0;\n }\n {\n bool r_0_0_1 = false;\n r_0_0[1] = r_0_0_1;\n }\n {\n bool r_0_0_2 = false;\n r_0_0[2] = r_0_0_2;\n }\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xe1Fa257633F04205D4334372E98918F2a04c14fa;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xe8d4E929CB4944f971a9e7A42767873A076b5423;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x2EfF2A80A1ec1D410E62fA12230758C4Cb8f01D0;\n r.s_3 = r_3;\n }\n {\n address r_4 = 0xaC9128bf9AfcFf3aF995B16379583D7606d8a3C5;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000e1fa257633f04205d4334372e98918f2a04c14fa000000000000000000000000e8d4e929cb4944f971a9e7a42767873a076b54230000000000000000000000002eff2a80a1ec1d410e62fa12230758c4cb8f01d0000000000000000000000000ac9128bf9afcff3af995b16379583d7606d8a3c500000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((bytes31[4],(address,string)),address)[3]", + "type": "((bytes31[4],(address,string)),address)[3]", + "value": [ + [ + [ + [ + "0xc5724535642e5edd37e57fcc202a5bf598687af0acbd75db6f446c82540a46", + "0x547c52feb2b42bd158163b61d6dca239669d6444c6b611fad19869a02979a7", + "0x442b3a8d2ae57a4c7e67a12f1e81d087d6a5c7507bf97f4b1410e0e16f564e", + "0x64bde36071b2afbc2071cf62126ae2090a6fda8a084f18cacd3dd81356c447" + ], + [ + "0x90E7d1F34513a709083fdD65b6cbB30aE5866BD4", + "Moo é🚀Moo🚀oMo🚀o ooé éMoo🚀🚀éMMéééMo🚀🚀MoMMéMMoMo🚀 ooM éM " + ] + ], + "0xfD6b8B8d60Bad4b8f08710E32a2Eceb94BC0cc49" + ], + [ + [ + [ + "0xdb0f2e8e5dabd877e920215097559cc99e588a51c6a7e0ad370d8bf35dd700", + "0x51318eb23baa59d556e145e90833c07fdf88269a988d154aa0407aed6cd231", + "0x15384ba4e63e004f8425b12053d8402b892567d7d099267cf05b5638580ae0", + "0xaab084bababcb468a8a3701e40eed01fac34be9b0f48633f82123d0af1b9ae" + ], + [ + "0xa95F82C1C6B30e0de596332Ce605B42A15731B1A", + "Moo é🚀 é🚀🚀ooo o oé 🚀oééMooo oé 🚀oMo🚀o🚀ooéoéoooé" + ] + ], + "0x0f88A409BB44017FB06740a462e136C82cBa6585" + ], + [ + [ + [ + "0xb04c8ba09dbfabebc6588fde7c8bc4403838f0c27215700f39d869fea2dc26", + "0xa394a0aa4e6c6c90f487f2e02f47756a9b13914a4f22f9fe47b5182c5225e4", + "0xa2994bdae24b95c2b3ceb436e4a0898c96b316e9bc5b26266bd8929ef2aa51", + "0xd8a668d70dd91d4956a8174ce0ec1fd6d7c82b0f232ffc0cc9e06d9ff0abbe" + ], + ["0x4Ea544DE1A39DECc8Fd81443769BD36458C3561F", "Moo é🚀M éM🚀é 🚀🚀ooé"] + ], + "0x3282720C21218CE753EEf9477ccd7DcC8794c819" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc5724535642e5edd37e57fcc202a5bf598687af0acbd75db6f446c82540a46" + }, + { + "type": "hexstring", + "value": "0x547c52feb2b42bd158163b61d6dca239669d6444c6b611fad19869a02979a7" + }, + { + "type": "hexstring", + "value": "0x442b3a8d2ae57a4c7e67a12f1e81d087d6a5c7507bf97f4b1410e0e16f564e" + }, + { + "type": "hexstring", + "value": "0x64bde36071b2afbc2071cf62126ae2090a6fda8a084f18cacd3dd81356c447" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x90E7d1F34513a709083fdD65b6cbB30aE5866BD4" + }, + { + "type": "string", + "value": "Moo é🚀Moo🚀oMo🚀o ooé éMoo🚀🚀éMMéééMo🚀🚀MoMMéMMoMo🚀 ooM éM " + } + ] + } + ] + }, + { + "type": "address", + "value": "0xfD6b8B8d60Bad4b8f08710E32a2Eceb94BC0cc49" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xdb0f2e8e5dabd877e920215097559cc99e588a51c6a7e0ad370d8bf35dd700" + }, + { + "type": "hexstring", + "value": "0x51318eb23baa59d556e145e90833c07fdf88269a988d154aa0407aed6cd231" + }, + { + "type": "hexstring", + "value": "0x15384ba4e63e004f8425b12053d8402b892567d7d099267cf05b5638580ae0" + }, + { + "type": "hexstring", + "value": "0xaab084bababcb468a8a3701e40eed01fac34be9b0f48633f82123d0af1b9ae" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xa95F82C1C6B30e0de596332Ce605B42A15731B1A" + }, + { + "type": "string", + "value": "Moo é🚀 é🚀🚀ooo o oé 🚀oééMooo oé 🚀oMo🚀o🚀ooéoéoooé" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x0f88A409BB44017FB06740a462e136C82cBa6585" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xb04c8ba09dbfabebc6588fde7c8bc4403838f0c27215700f39d869fea2dc26" + }, + { + "type": "hexstring", + "value": "0xa394a0aa4e6c6c90f487f2e02f47756a9b13914a4f22f9fe47b5182c5225e4" + }, + { + "type": "hexstring", + "value": "0xa2994bdae24b95c2b3ceb436e4a0898c96b316e9bc5b26266bd8929ef2aa51" + }, + { + "type": "hexstring", + "value": "0xd8a668d70dd91d4956a8174ce0ec1fd6d7c82b0f232ffc0cc9e06d9ff0abbe" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x4Ea544DE1A39DECc8Fd81443769BD36458C3561F" + }, + { + "type": "string", + "value": "Moo é🚀M éM🚀é 🚀🚀ooé" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x3282720C21218CE753EEf9477ccd7DcC8794c819" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061068a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610485565b60405180910390f35b6100566103e2565b61005e6103e2565b61006661040f565b61006e61042f565b610076610467565b7fc5724535642e5edd37e57fcc202a5bf598687af0acbd75db6f446c82540a460081527f547c52feb2b42bd158163b61d6dca239669d6444c6b611fad19869a02979a7006020808301919091527f442b3a8d2ae57a4c7e67a12f1e81d087d6a5c7507bf97f4b1410e0e16f564e006040808401919091527f64bde36071b2afbc2071cf62126ae2090a6fda8a084f18cacd3dd81356c4470060608085019190915292845280518082018252808301939093527390e7d1f34513a709083fdd65b6cbb30ae5866bd48352805160808101909152605980825260009261058990830139602083810191909152838101929092525090825273fd6b8b8d60bad4b8f08710e32a2eceb94bc0cc4990820152815261018e61040f565b61019661042f565b61019e610467565b7fdb0f2e8e5dabd877e920215097559cc99e588a51c6a7e0ad370d8bf35dd7000081527f51318eb23baa59d556e145e90833c07fdf88269a988d154aa0407aed6cd231006020808301919091527f15384ba4e63e004f8425b12053d8402b892567d7d099267cf05b5638580ae0006040808401919091527faab084bababcb468a8a3701e40eed01fac34be9b0f48633f82123d0af1b9ae00606080850191909152928452805180820182528083019390935273a95f82c1c6b30e0de596332ce605b42a15731b1a8352805160808101909152604f8082526000926105e2908301396020838101919091528381019290925250908252730f88a409bb44017fb06740a462e136c82cba6585828201528201526102b761040f565b6102bf61042f565b6102c7610467565b7fb04c8ba09dbfabebc6588fde7c8bc4403838f0c27215700f39d869fea2dc260081527fa394a0aa4e6c6c90f487f2e02f47756a9b13914a4f22f9fe47b5182c5225e4006020808301919091527fa2994bdae24b95c2b3ceb436e4a0898c96b316e9bc5b26266bd8929ef2aa51006040808401919091527fd8a668d70dd91d4956a8174ce0ec1fd6d7c82b0f232ffc0cc9e06d9ff0abbe0060608085019190915292845280518082018252808301849052734ea544de1a39decc8fd81443769bd36458c3561f8152815193840190915260248084529092600092909190610631908301396020838101919091528381019290925250908252733282720c21218ce753eef9477ccd7dcc8794c819908201526040820152919050565b60405180606001604052806003905b6103f961040f565b8152602001906001900390816103f15790505090565b604051806040016040528061042261042f565b8152600060209091015290565b6040518060400160405280610442610467565b815260200161046260408051808201909152600081526060602082015290565b905290565b60405180608001604052806004906020820280368337509192915050565b60208082526000906080830183820185845b600381101561057c57601f1987850381018452825180516040808852815190916000838a015b60048210156104e057835160ff19168152928b0192600191909101908b016104bd565b505089015160a060c08a015280516001600160a01b031660e08a015289015161010089019290925250805161012088018190529060005b82811015610534578181018a015189820161014001528901610517565b82811115610547576000610140848b0101525b5050908701516001600160a01b0381168789015290601f01909116949094016101400193509184019190840190600101610497565b5091969550505050505056fe4d6f6f20c3a9f09f9a804d6f6ff09f9a806f4d6ff09f9a806f206f6fc3a92020c3a94d6f6ff09f9a80f09f9a80c3a94d4dc3a9c3a9c3a94d6ff09f9a80f09f9a804d6f4d4dc3a94d4d6f4d6ff09f9a80206f6f4d20c3a94d204d6f6f20c3a9f09f9a8020c3a9f09f9a80f09f9a806f6f6f206f206fc3a92020f09f9a806fc3a9c3a94d6f6f6f206fc3a92020f09f9a806f4d6ff09f9a806ff09f9a806f6fc3a96fc3a96f6f6fc3a94d6f6f20c3a9f09f9a804d20c3a94df09f9a80c3a9202020f09f9a80f09f9a806f6fc3a9a2646970667358221220fd7edbefb320faaacdf48a94a18cf3c8ad3a9bf8af73f130ba445792ffb7c4c464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8090aaf4 {\n address s_0;\n string s_1;\n }\n\n struct S_2e300464 {\n bytes31[4] s_0;\n S_8090aaf4 s_1;\n }\n\n struct S_ad201063 {\n S_2e300464 s_0;\n address s_1;\n }\n\n function test () public pure returns (S_ad201063[3] memory) {\n S_ad201063[3] memory r;\n {\n S_ad201063 memory r_0;\n {\n S_2e300464 memory r_0_0;\n {\n bytes31[4] memory r_0_0_0;\n {\n bytes31 r_0_0_0_0 = bytes31(0xc5724535642e5edd37e57fcc202a5bf598687af0acbd75db6f446c82540a46);\n r_0_0_0[0] = r_0_0_0_0;\n }\n {\n bytes31 r_0_0_0_1 = bytes31(0x547c52feb2b42bd158163b61d6dca239669d6444c6b611fad19869a02979a7);\n r_0_0_0[1] = r_0_0_0_1;\n }\n {\n bytes31 r_0_0_0_2 = bytes31(0x442b3a8d2ae57a4c7e67a12f1e81d087d6a5c7507bf97f4b1410e0e16f564e);\n r_0_0_0[2] = r_0_0_0_2;\n }\n {\n bytes31 r_0_0_0_3 = bytes31(0x64bde36071b2afbc2071cf62126ae2090a6fda8a084f18cacd3dd81356c447);\n r_0_0_0[3] = r_0_0_0_3;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n S_8090aaf4 memory r_0_0_1;\n {\n address r_0_0_1_0 = 0x90E7d1F34513a709083fdD65b6cbB30aE5866BD4;\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n {\n string memory r_0_0_1_1 = unicode\"Moo é🚀Moo🚀oMo🚀o ooé éMoo🚀🚀éMMéééMo🚀🚀MoMMéMMoMo🚀 ooM éM \";\n r_0_0_1.s_1 = r_0_0_1_1;\n }\n r_0_0.s_1 = r_0_0_1;\n }\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0xfD6b8B8d60Bad4b8f08710E32a2Eceb94BC0cc49;\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_ad201063 memory r_1;\n {\n S_2e300464 memory r_1_0;\n {\n bytes31[4] memory r_1_0_0;\n {\n bytes31 r_1_0_0_0 = bytes31(0xdb0f2e8e5dabd877e920215097559cc99e588a51c6a7e0ad370d8bf35dd700);\n r_1_0_0[0] = r_1_0_0_0;\n }\n {\n bytes31 r_1_0_0_1 = bytes31(0x51318eb23baa59d556e145e90833c07fdf88269a988d154aa0407aed6cd231);\n r_1_0_0[1] = r_1_0_0_1;\n }\n {\n bytes31 r_1_0_0_2 = bytes31(0x15384ba4e63e004f8425b12053d8402b892567d7d099267cf05b5638580ae0);\n r_1_0_0[2] = r_1_0_0_2;\n }\n {\n bytes31 r_1_0_0_3 = bytes31(0xaab084bababcb468a8a3701e40eed01fac34be9b0f48633f82123d0af1b9ae);\n r_1_0_0[3] = r_1_0_0_3;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n S_8090aaf4 memory r_1_0_1;\n {\n address r_1_0_1_0 = 0xa95F82C1C6B30e0de596332Ce605B42A15731B1A;\n r_1_0_1.s_0 = r_1_0_1_0;\n }\n {\n string memory r_1_0_1_1 = unicode\"Moo é🚀 é🚀🚀ooo o oé 🚀oééMooo oé 🚀oMo🚀o🚀ooéoéoooé\";\n r_1_0_1.s_1 = r_1_0_1_1;\n }\n r_1_0.s_1 = r_1_0_1;\n }\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0x0f88A409BB44017FB06740a462e136C82cBa6585;\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n {\n S_ad201063 memory r_2;\n {\n S_2e300464 memory r_2_0;\n {\n bytes31[4] memory r_2_0_0;\n {\n bytes31 r_2_0_0_0 = bytes31(0xb04c8ba09dbfabebc6588fde7c8bc4403838f0c27215700f39d869fea2dc26);\n r_2_0_0[0] = r_2_0_0_0;\n }\n {\n bytes31 r_2_0_0_1 = bytes31(0xa394a0aa4e6c6c90f487f2e02f47756a9b13914a4f22f9fe47b5182c5225e4);\n r_2_0_0[1] = r_2_0_0_1;\n }\n {\n bytes31 r_2_0_0_2 = bytes31(0xa2994bdae24b95c2b3ceb436e4a0898c96b316e9bc5b26266bd8929ef2aa51);\n r_2_0_0[2] = r_2_0_0_2;\n }\n {\n bytes31 r_2_0_0_3 = bytes31(0xd8a668d70dd91d4956a8174ce0ec1fd6d7c82b0f232ffc0cc9e06d9ff0abbe);\n r_2_0_0[3] = r_2_0_0_3;\n }\n r_2_0.s_0 = r_2_0_0;\n }\n {\n S_8090aaf4 memory r_2_0_1;\n {\n address r_2_0_1_0 = 0x4Ea544DE1A39DECc8Fd81443769BD36458C3561F;\n r_2_0_1.s_0 = r_2_0_1_0;\n }\n {\n string memory r_2_0_1_1 = unicode\"Moo é🚀M éM🚀é 🚀🚀ooé\";\n r_2_0_1.s_1 = r_2_0_1_1;\n }\n r_2_0.s_1 = r_2_0_1;\n }\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0x3282720C21218CE753EEf9477ccd7DcC8794c819;\n r_2.s_1 = r_2_1;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000fd6b8b8d60bad4b8f08710e32a2eceb94bc0cc49c5724535642e5edd37e57fcc202a5bf598687af0acbd75db6f446c82540a4600547c52feb2b42bd158163b61d6dca239669d6444c6b611fad19869a02979a700442b3a8d2ae57a4c7e67a12f1e81d087d6a5c7507bf97f4b1410e0e16f564e0064bde36071b2afbc2071cf62126ae2090a6fda8a084f18cacd3dd81356c4470000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000090e7d1f34513a709083fdd65b6cbb30ae5866bd4000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a804d6f6ff09f9a806f4d6ff09f9a806f206f6fc3a92020c3a94d6f6ff09f9a80f09f9a80c3a94d4dc3a9c3a9c3a94d6ff09f9a80f09f9a804d6f4d4dc3a94d4d6f4d6ff09f9a80206f6f4d20c3a94d200000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000f88a409bb44017fb06740a462e136c82cba6585db0f2e8e5dabd877e920215097559cc99e588a51c6a7e0ad370d8bf35dd7000051318eb23baa59d556e145e90833c07fdf88269a988d154aa0407aed6cd2310015384ba4e63e004f8425b12053d8402b892567d7d099267cf05b5638580ae000aab084bababcb468a8a3701e40eed01fac34be9b0f48633f82123d0af1b9ae0000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a95f82c1c6b30e0de596332ce605b42a15731b1a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a8020c3a9f09f9a80f09f9a806f6f6f206f206fc3a92020f09f9a806fc3a9c3a94d6f6f6f206fc3a92020f09f9a806f4d6ff09f9a806ff09f9a806f6fc3a96fc3a96f6f6fc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000003282720c21218ce753eef9477ccd7dcc8794c819b04c8ba09dbfabebc6588fde7c8bc4403838f0c27215700f39d869fea2dc2600a394a0aa4e6c6c90f487f2e02f47756a9b13914a4f22f9fe47b5182c5225e400a2994bdae24b95c2b3ceb436e4a0898c96b316e9bc5b26266bd8929ef2aa5100d8a668d70dd91d4956a8174ce0ec1fd6d7c82b0f232ffc0cc9e06d9ff0abbe0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000004ea544de1a39decc8fd81443769bd36458c3561f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000244d6f6f20c3a9f09f9a804d20c3a94df09f9a80c3a9202020f09f9a80f09f9a806f6fc3a900000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((bytes32[4]),int240[4],(string))[2]", + "type": "((bytes32[4]),int240[4],(string))[2]", + "value": [ + [ + [ + [ + "0x9ac2b6d86f20c15c8ca1cbce586835ae758b2703bb5dc34594b08f4b9db39eb8", + "0x3d54a16ba8a98c9831f350ab16f0c828b8f353a0c2140eb60160dfec25233d04", + "0xe8669ef5623806006f63ebb4670d15b472bb0f5632f601a517ae18d2f5c602d5", + "0x1e64c1b8813267d14fa86ea35d017c881d490158c6c7cf224a43f07492b752de" + ] + ], + [ + "-281909976163766708859202487132284609161308462834805457759979390766339656", + "-395145398305942146338370900741320284849483999562078432368100861496791911", + "-785755335697109452521999558714205505537855012394636042278468700812390349", + "53070155706930836091305514122417589843560648171762433437532646370880959" + ], + ["Moo é🚀Méoo🚀oooMMéé🚀ooMMoéo🚀oMoooooMéo 🚀🚀M🚀oooo 🚀o"] + ], + [ + [ + [ + "0x7ccc3e3367aa3c63061ef26104ecd4f205eb0a9da338ff73f8b57a07150b7d11", + "0xa6447d74666a038ec1c1ba7889ac8d577c643347bd625f275b37bfe22a321bca", + "0xbee27ec3817e8aade127e77b969d253e4f826ed60ef3186d35675301ddbced18", + "0x722c537cb99843b57558458f1f07bafbccd1310df25e299a0a647a664a60bef6" + ] + ], + [ + "-571550444893376431884562817466751841619370600102424702940542359514232652", + "-58941531389304820070237731826916295200168556058259193969167452426457795", + "876325188552444323007920294448988090305874812581576581415479501632772458", + "-837621591890448105357355194955435804160870202256030384074597914728125312" + ], + ["Moo é🚀🚀MoéooMo🚀 o🚀o🚀🚀Mo🚀oMMMoMé🚀 Mooé 🚀Mo oéé"] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x9ac2b6d86f20c15c8ca1cbce586835ae758b2703bb5dc34594b08f4b9db39eb8" + }, + { + "type": "hexstring", + "value": "0x3d54a16ba8a98c9831f350ab16f0c828b8f353a0c2140eb60160dfec25233d04" + }, + { + "type": "hexstring", + "value": "0xe8669ef5623806006f63ebb4670d15b472bb0f5632f601a517ae18d2f5c602d5" + }, + { + "type": "hexstring", + "value": "0x1e64c1b8813267d14fa86ea35d017c881d490158c6c7cf224a43f07492b752de" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-281909976163766708859202487132284609161308462834805457759979390766339656" + }, + { + "type": "number", + "value": "-395145398305942146338370900741320284849483999562078432368100861496791911" + }, + { + "type": "number", + "value": "-785755335697109452521999558714205505537855012394636042278468700812390349" + }, + { + "type": "number", + "value": "53070155706930836091305514122417589843560648171762433437532646370880959" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Méoo🚀oooMMéé🚀ooMMoéo🚀oMoooooMéo 🚀🚀M🚀oooo 🚀o" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x7ccc3e3367aa3c63061ef26104ecd4f205eb0a9da338ff73f8b57a07150b7d11" + }, + { + "type": "hexstring", + "value": "0xa6447d74666a038ec1c1ba7889ac8d577c643347bd625f275b37bfe22a321bca" + }, + { + "type": "hexstring", + "value": "0xbee27ec3817e8aade127e77b969d253e4f826ed60ef3186d35675301ddbced18" + }, + { + "type": "hexstring", + "value": "0x722c537cb99843b57558458f1f07bafbccd1310df25e299a0a647a664a60bef6" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-571550444893376431884562817466751841619370600102424702940542359514232652" + }, + { + "type": "number", + "value": "-58941531389304820070237731826916295200168556058259193969167452426457795" + }, + { + "type": "number", + "value": "876325188552444323007920294448988090305874812581576581415479501632772458" + }, + { + "type": "number", + "value": "-837621591890448105357355194955435804160870202256030384074597914728125312" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀MoéooMo🚀 o🚀o🚀🚀Mo🚀oMMMoMé🚀 Mooé 🚀Mo oéé" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506105fc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061046e565b60405180910390f35b61005661037c565b61005e61037c565b6100666103a9565b61006e6103e9565b6100766103f8565b7f9ac2b6d86f20c15c8ca1cbce586835ae758b2703bb5dc34594b08f4b9db39eb881527f3d54a16ba8a98c9831f350ab16f0c828b8f353a0c2140eb60160dfec25233d0460208201527fe8669ef5623806006f63ebb4670d15b472bb0f5632f601a517ae18d2f5c602d560408201527f1e64c1b8813267d14fa86ea35d017c881d490158c6c7cf224a43f07492b752de6060820152815281526101176103f8565b7fffffd72760b91f241528fa65c465942554807c01bcd282aa8d8b969a381d29b881527fffffc6bf3e19d88f416cd8dedcdb3088f8eecc2fb1b5d1bc2300d689a577ec996020808301919091527fffff8e26b6fa719907b940cf57f0856c295557a6b580b3f21dbc5028311b50336040808401919091527d07b07b424045205f8bd0a94c3e3abf14f5ef67888247863130063ff6adbf6060808501919091528483019390935280518083018252928352805160808101909152604f80825260009261052890830139825250604082015281526101f16103a9565b6101f96103e9565b6102016103f8565b7f7ccc3e3367aa3c63061ef26104ecd4f205eb0a9da338ff73f8b57a07150b7d1181527fa6447d74666a038ec1c1ba7889ac8d577c643347bd625f275b37bfe22a321bca60208201527fbee27ec3817e8aade127e77b969d253e4f826ed60ef3186d35675301ddbced1860408201527f722c537cb99843b57558458f1f07bafbccd1310df25e299a0a647a664a60bef66060820152815281526102a26103f8565b7fffffad300407c804c254885da428a3e1fa8a88d54a4ce4a9b3b28d1ae9ba48b481527ffffff775bcb21661e55af06b50a1c4f8cac723684db31b9fba58bd9c75fc2d3d6020808301919091527d7ef8b531f9a402fe233b000100f690458976e643fa69be3bca1e5d3b196a6040808401919091527fffff86a2e36dcbefe75fcce4fd7361e50254737b114f6e988c07ab26c2e52c80606080850191909152848301939093528051808301825292835280516080810190915260508082526000926105779083013982525060408201526020820152919050565b60405180604001604052806002905b6103936103a9565b81526020019060019003908161038b5790505090565b60405180606001604052806103bc6103e9565b81526020016103c96103f8565b81526020016103e46040518060200160405280606081525090565b905290565b60405180602001604052806103e45b60405180608001604052806004906020820280368337509192915050565b6000602082518185528051808387015260005b8181101561044557828101840151878201604001528301610429565b81811115610457576000604083890101525b50601f01601f191694909401604001949350505050565b60208082526000906060830183820185845b600281101561051b57868403601f190183528151805151610120908660005b60048110156104bc5782518252918901919089019060010161049f565b505050868201516080870160005b60048110156104ea578251601d0b825291890191908901906001016104ca565b505050604082015191508061010087015261050781870183610416565b955050509184019190840190600101610480565b5091969550505050505056fe4d6f6f20c3a9f09f9a804dc3a96f6ff09f9a806f6f6f4d4dc3a9c3a9f09f9a806f6f4d4d6fc3a96ff09f9a806f4d6f6f6f6f6f4dc3a96f20f09f9a80f09f9a804df09f9a806f6f6f6f20f09f9a806f4d6f6f20c3a9f09f9a80f09f9a804d6fc3a96f6f4d6ff09f9a8020206ff09f9a806ff09f9a80f09f9a804d6ff09f9a806f4d4d4d6f4dc3a9f09f9a80204d6f6fc3a92020f09f9a804d6f206fc3a9c3a9a2646970667358221220e08ec84e4e5b2572886a46de7ec829c768b2f53c52555a5f0c6415fa6aa91b9064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f29fc04d {\n bytes32[4] s_0;\n }\n\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_16f661a3 {\n S_f29fc04d s_0;\n int240[4] s_1;\n S_97fc4627 s_2;\n }\n\n function test () public pure returns (S_16f661a3[2] memory) {\n S_16f661a3[2] memory r;\n {\n S_16f661a3 memory r_0;\n {\n S_f29fc04d memory r_0_0;\n {\n bytes32[4] memory r_0_0_0;\n {\n bytes32 r_0_0_0_0 = bytes32(0x9ac2b6d86f20c15c8ca1cbce586835ae758b2703bb5dc34594b08f4b9db39eb8);\n r_0_0_0[0] = r_0_0_0_0;\n }\n {\n bytes32 r_0_0_0_1 = bytes32(0x3d54a16ba8a98c9831f350ab16f0c828b8f353a0c2140eb60160dfec25233d04);\n r_0_0_0[1] = r_0_0_0_1;\n }\n {\n bytes32 r_0_0_0_2 = bytes32(0xe8669ef5623806006f63ebb4670d15b472bb0f5632f601a517ae18d2f5c602d5);\n r_0_0_0[2] = r_0_0_0_2;\n }\n {\n bytes32 r_0_0_0_3 = bytes32(0x1e64c1b8813267d14fa86ea35d017c881d490158c6c7cf224a43f07492b752de);\n r_0_0_0[3] = r_0_0_0_3;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n r_0.s_0 = r_0_0;\n }\n {\n int240[4] memory r_0_1;\n {\n int240 r_0_1_0 = -281909976163766708859202487132284609161308462834805457759979390766339656;\n r_0_1[0] = r_0_1_0;\n }\n {\n int240 r_0_1_1 = -395145398305942146338370900741320284849483999562078432368100861496791911;\n r_0_1[1] = r_0_1_1;\n }\n {\n int240 r_0_1_2 = -785755335697109452521999558714205505537855012394636042278468700812390349;\n r_0_1[2] = r_0_1_2;\n }\n {\n int240 r_0_1_3 = 53070155706930836091305514122417589843560648171762433437532646370880959;\n r_0_1[3] = r_0_1_3;\n }\n r_0.s_1 = r_0_1;\n }\n {\n S_97fc4627 memory r_0_2;\n {\n string memory r_0_2_0 = unicode\"Moo é🚀Méoo🚀oooMMéé🚀ooMMoéo🚀oMoooooMéo 🚀🚀M🚀oooo 🚀o\";\n r_0_2.s_0 = r_0_2_0;\n }\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_16f661a3 memory r_1;\n {\n S_f29fc04d memory r_1_0;\n {\n bytes32[4] memory r_1_0_0;\n {\n bytes32 r_1_0_0_0 = bytes32(0x7ccc3e3367aa3c63061ef26104ecd4f205eb0a9da338ff73f8b57a07150b7d11);\n r_1_0_0[0] = r_1_0_0_0;\n }\n {\n bytes32 r_1_0_0_1 = bytes32(0xa6447d74666a038ec1c1ba7889ac8d577c643347bd625f275b37bfe22a321bca);\n r_1_0_0[1] = r_1_0_0_1;\n }\n {\n bytes32 r_1_0_0_2 = bytes32(0xbee27ec3817e8aade127e77b969d253e4f826ed60ef3186d35675301ddbced18);\n r_1_0_0[2] = r_1_0_0_2;\n }\n {\n bytes32 r_1_0_0_3 = bytes32(0x722c537cb99843b57558458f1f07bafbccd1310df25e299a0a647a664a60bef6);\n r_1_0_0[3] = r_1_0_0_3;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n r_1.s_0 = r_1_0;\n }\n {\n int240[4] memory r_1_1;\n {\n int240 r_1_1_0 = -571550444893376431884562817466751841619370600102424702940542359514232652;\n r_1_1[0] = r_1_1_0;\n }\n {\n int240 r_1_1_1 = -58941531389304820070237731826916295200168556058259193969167452426457795;\n r_1_1[1] = r_1_1_1;\n }\n {\n int240 r_1_1_2 = 876325188552444323007920294448988090305874812581576581415479501632772458;\n r_1_1[2] = r_1_1_2;\n }\n {\n int240 r_1_1_3 = -837621591890448105357355194955435804160870202256030384074597914728125312;\n r_1_1[3] = r_1_1_3;\n }\n r_1.s_1 = r_1_1;\n }\n {\n S_97fc4627 memory r_1_2;\n {\n string memory r_1_2_0 = unicode\"Moo é🚀🚀MoéooMo🚀 o🚀o🚀🚀Mo🚀oMMMoMé🚀 Mooé 🚀Mo oéé\";\n r_1_2.s_0 = r_1_2_0;\n }\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002009ac2b6d86f20c15c8ca1cbce586835ae758b2703bb5dc34594b08f4b9db39eb83d54a16ba8a98c9831f350ab16f0c828b8f353a0c2140eb60160dfec25233d04e8669ef5623806006f63ebb4670d15b472bb0f5632f601a517ae18d2f5c602d51e64c1b8813267d14fa86ea35d017c881d490158c6c7cf224a43f07492b752deffffd72760b91f241528fa65c465942554807c01bcd282aa8d8b969a381d29b8ffffc6bf3e19d88f416cd8dedcdb3088f8eecc2fb1b5d1bc2300d689a577ec99ffff8e26b6fa719907b940cf57f0856c295557a6b580b3f21dbc5028311b5033000007b07b424045205f8bd0a94c3e3abf14f5ef67888247863130063ff6adbf00000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a804dc3a96f6ff09f9a806f6f6f4d4dc3a9c3a9f09f9a806f6f4d4d6fc3a96ff09f9a806f4d6f6f6f6f6f4dc3a96f20f09f9a80f09f9a804df09f9a806f6f6f6f20f09f9a806f00000000000000000000000000000000007ccc3e3367aa3c63061ef26104ecd4f205eb0a9da338ff73f8b57a07150b7d11a6447d74666a038ec1c1ba7889ac8d577c643347bd625f275b37bfe22a321bcabee27ec3817e8aade127e77b969d253e4f826ed60ef3186d35675301ddbced18722c537cb99843b57558458f1f07bafbccd1310df25e299a0a647a664a60bef6ffffad300407c804c254885da428a3e1fa8a88d54a4ce4a9b3b28d1ae9ba48b4fffff775bcb21661e55af06b50a1c4f8cac723684db31b9fba58bd9c75fc2d3d00007ef8b531f9a402fe233b000100f690458976e643fa69be3bca1e5d3b196affff86a2e36dcbefe75fcce4fd7361e50254737b114f6e988c07ab26c2e52c800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a80f09f9a804d6fc3a96f6f4d6ff09f9a8020206ff09f9a806ff09f9a80f09f9a804d6ff09f9a806f4d4d4d6f4dc3a9f09f9a80204d6f6fc3a92020f09f9a804d6f206fc3a9c3a900000000000000000000000000000000" + }, + { + "name": "random-((int24),string,address[],address,uint160)", + "type": "((int24),string,address[],address,uint160)", + "value": [ + ["991869"], + "Moo é🚀", + ["0x1eB38693da7e6a28160EC83ef79B5336c8884E3E"], + "0xB0989137F3949F5A66063c18E3f82264A8D99490", + "118018019656086403137185267421563123995430489065" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "991869" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x1eB38693da7e6a28160EC83ef79B5336c8884E3E" + } + ] + }, + { + "type": "address", + "value": "0xB0989137F3949F5A66063c18E3f82264A8D99490" + }, + { + "type": "number", + "value": "118018019656086403137185267421563123995430489065" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102c8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101c1565b60405180910390f35b6040805160c08082018352600060a0808401828152845260606020808601829052858701829052818601849052608080870185905287519586018852928501848152855284810182815285880183905291850184905291840183905285518083018752620f227d8152845285518087018752600a8152689adede418753e13f3560b71b818401529052845160018082528187019096529394929391929082810190803683370190505090506000731eb38693da7e6a28160ec83ef79b5336c8884e3e905080826000815181106101265761012661027c565b6001600160a01b039092166020928302919091019091015250604082015273b0989137f3949f5a66063c18e3f82264a8d9949060608201527314ac1c6c809dd1c5511d4d13bb57f30c09760be96080820152919050565b600081518084526020808501945080840160005b838110156101b65781516001600160a01b031687529582019590820190600101610191565b509495945050505050565b6000602080835283515160020b818401528084015160a0604085015280518060c086015260005b818110156102045782810184015186820160e0015283016101e8565b8181111561021657600060e083880101525b50601f19601f820116850192505050604084015160c084830301606085015261024260e083018261017d565b915050606084015161025f60808501826001600160a01b03169052565b5060808401516001600160a01b03811660a0850152509392505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220337d6a23c4f04e20468c4385f7d76037460bb2ac1463f46dfd064d08cbcd09cf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a9554343 {\n int24 s_0;\n }\n\n struct S_aa5c2a4c {\n S_a9554343 s_0;\n string s_1;\n address[] s_2;\n address s_3;\n uint160 s_4;\n }\n\n function test () public pure returns (S_aa5c2a4c memory) {\n S_aa5c2a4c memory r;\n {\n S_a9554343 memory r_0;\n {\n int24 r_0_0 = 991869;\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r.s_1 = r_1;\n }\n {\n address[] memory r_2 = new address[](1);\n {\n address r_2_0 = 0x1eB38693da7e6a28160EC83ef79B5336c8884E3E;\n r_2[0] = r_2_0;\n }\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xB0989137F3949F5A66063c18E3f82264A8D99490;\n r.s_3 = r_3;\n }\n {\n uint160 r_4 = 118018019656086403137185267421563123995430489065;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000f227d00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000b0989137f3949f5a66063c18e3f82264a8d9949000000000000000000000000014ac1c6c809dd1c5511d4d13bb57f30c09760be9000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001eb38693da7e6a28160ec83ef79b5336c8884e3e" + }, + { + "name": "random-((int8[2])[1],(bytes25,bool),(uint216))", + "type": "((int8[2])[1],(bytes25,bool),(uint216))", + "value": [ + [[["72", "-116"]]], + ["0x8c7428e13fa280113e587b4227937a87202ef854d2c26f85c2", false], + ["50838420224133995782255399772884630604177307096988440383069238966"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "72" + }, + { + "type": "number", + "value": "-116" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8c7428e13fa280113e587b4227937a87202ef854d2c26f85c2" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "50838420224133995782255399772884630604177307096988440383069238966" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061027b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101aa565b60405180910390f35b6100566100f2565b61005e6100f2565b610066610150565b61006e61017d565b61007661018c565b604881526073196020808301919091529082529082529082526040805180820182526000818401527f8c7428e13fa280113e587b4227937a87202ef854d2c26f85c200000000000000815283830152805191820181527a7b94d39a773eb719ee6557342e6faa9a4ed522c02903b48ade36b68252820152919050565b6040518060600160405280610105610150565b81526020016101336040518060400160405280600066ffffffffffffff191681526020016000151581525090565b81526040805160208181019092526000815291015290565b905290565b60405180602001604052806001905b61016761017d565b81526020019060019003908161015f5790505090565b604051806020016040528061014b5b60405180604001604052806002906020820280368337509192915050565b815160a0820190826000805b60018082106101c55750610205565b84515184845b60028110156101eb578251860b82526020928301929091019083016101cb565b5050506020949094019350604092909201916001016101b6565b50505050602083810151805166ffffffffffffff19166040858101919091529101511515606084015290920151516001600160d81b03166080909101529056fea2646970667358221220d440431b8256f1ca075a6f762cf1b845020772df68d3e6a24991d1f7059a5b0564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_914a119e {\n int8[2] s_0;\n }\n\n struct S_52d13a1b {\n bytes25 s_0;\n bool s_1;\n }\n\n struct S_070be4eb {\n uint216 s_0;\n }\n\n struct S_6827f2a1 {\n S_914a119e[1] s_0;\n S_52d13a1b s_1;\n S_070be4eb s_2;\n }\n\n function test () public pure returns (S_6827f2a1 memory) {\n S_6827f2a1 memory r;\n {\n S_914a119e[1] memory r_0;\n {\n S_914a119e memory r_0_0;\n {\n int8[2] memory r_0_0_0;\n {\n int8 r_0_0_0_0 = 72;\n r_0_0_0[0] = r_0_0_0_0;\n }\n {\n int8 r_0_0_0_1 = -116;\n r_0_0_0[1] = r_0_0_0_1;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n S_52d13a1b memory r_1;\n {\n bytes25 r_1_0 = bytes25(0x8c7428e13fa280113e587b4227937a87202ef854d2c26f85c2);\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n S_070be4eb memory r_2;\n {\n uint216 r_2_0 = 50838420224133995782255399772884630604177307096988440383069238966;\n r_2.s_0 = r_2_0;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000048ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c8c7428e13fa280113e587b4227937a87202ef854d2c26f85c200000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b94d39a773eb719ee6557342e6faa9a4ed522c02903b48ade36b6" + }, + { + "name": "random-((uint112,bytes5,address,bytes9),int56)[]", + "type": "((uint112,bytes5,address,bytes9),int56)[]", + "value": [ + [ + [ + "4965796163749278931873180730292320", + "0xee65edc601", + "0xC0e30286bdbc62513E9BFeDf4683b6b01135EdA2", + "0xece0e6c435d17dbf2c" + ], + "6970112118955912" + ], + [ + [ + "3804464594975687933892110938278774", + "0xea7541e6c7", + "0xE0F3Cc94c03B7b1ec11072DCa6919B3a5150bcf0", + "0x065fbd6daace72a6dc" + ], + "26182627013438015" + ], + [ + [ + "565649644050795689706842579344120", + "0xa548844972", + "0x79f32f87F9AC317A07fab24484bFE9B91f93A5C6", + "0x2ea6a0dd310feab35d" + ], + "-7884678680126271" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "4965796163749278931873180730292320" + }, + { + "type": "hexstring", + "value": "0xee65edc601" + }, + { + "type": "address", + "value": "0xC0e30286bdbc62513E9BFeDf4683b6b01135EdA2" + }, + { + "type": "hexstring", + "value": "0xece0e6c435d17dbf2c" + } + ] + }, + { + "type": "number", + "value": "6970112118955912" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3804464594975687933892110938278774" + }, + { + "type": "hexstring", + "value": "0xea7541e6c7" + }, + { + "type": "address", + "value": "0xE0F3Cc94c03B7b1ec11072DCa6919B3a5150bcf0" + }, + { + "type": "hexstring", + "value": "0x065fbd6daace72a6dc" + } + ] + }, + { + "type": "number", + "value": "26182627013438015" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "565649644050795689706842579344120" + }, + { + "type": "hexstring", + "value": "0xa548844972" + }, + { + "type": "address", + "value": "0x79f32f87F9AC317A07fab24484bFE9B91f93A5C6" + }, + { + "type": "hexstring", + "value": "0x2ea6a0dd310feab35d" + } + ] + }, + { + "type": "number", + "value": "-7884678680126271" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610365806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061027b565b60405180910390f35b6040805160038082526080820190925260609160009190816020015b610072610247565b81526020019060019003908161006a57905050905061008f610247565b604080516080810182526df4d528c88b2998cbf996bcdc7860815264ee65edc60160d81b60208083019190915273c0e30286bdbc62513e9bfedf4683b6b01135eda292820192909252683b3839b10d745f6fcb60ba1b606082015282526618c347b0e51f889082015281518190839060009061010d5761010d610319565b602002602001018190525050610121610247565b604080516080810182526dbb93181a1bb9475c2d3975c00b76815264ea7541e6c760d81b60208083019190915273e0f3cc94c03b7b1ec11072dca6919b3a5150bcf092820192909252680197ef5b6ab39ca9b760ba1b60608201528252665d04f5e66c2a3f9082015281518190839060019081106101a1576101a1610319565b6020026020010181905250506101b5610247565b604080516080810182526d1be380930e6c3faf5b76d1e51af881526452a44224b960d91b6020808301919091527379f32f87f9ac317a07fab24484bfe9b91f93a5c692820192909252682ea6a0dd310feab35d60b81b60608201528252661c0312cfe5a33e1990820152815181908390600290811061023657610236610319565b602090810291909101015250919050565b6040805160c0810182526000918101828152606082018390526080820183905260a082018390528152602081019190915290565b602080825282518282018190526000919060409081850190868401855b8281101561030c578151805180516dffffffffffffffffffffffffffff168652878101516001600160d81b03191688870152868101516001600160a01b0316878701526060908101516001600160b81b0319169086015286015160060b608085015260a09093019290850190600101610298565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212207775d0efc271782c1ad5f313b2a37a85c1304996e42290c92cf94fa035cfdea864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7453cb0f {\n uint112 s_0;\n bytes5 s_1;\n address s_2;\n bytes9 s_3;\n }\n\n struct S_efdb98a3 {\n S_7453cb0f s_0;\n int56 s_1;\n }\n\n function test () public pure returns (S_efdb98a3[] memory) {\n S_efdb98a3[] memory r = new S_efdb98a3[](3);\n {\n S_efdb98a3 memory r_0;\n {\n S_7453cb0f memory r_0_0;\n {\n uint112 r_0_0_0 = 4965796163749278931873180730292320;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n bytes5 r_0_0_1 = bytes5(0xee65edc601);\n r_0_0.s_1 = r_0_0_1;\n }\n {\n address r_0_0_2 = 0xC0e30286bdbc62513E9BFeDf4683b6b01135EdA2;\n r_0_0.s_2 = r_0_0_2;\n }\n {\n bytes9 r_0_0_3 = bytes9(0xece0e6c435d17dbf2c);\n r_0_0.s_3 = r_0_0_3;\n }\n r_0.s_0 = r_0_0;\n }\n {\n int56 r_0_1 = 6970112118955912;\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_efdb98a3 memory r_1;\n {\n S_7453cb0f memory r_1_0;\n {\n uint112 r_1_0_0 = 3804464594975687933892110938278774;\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bytes5 r_1_0_1 = bytes5(0xea7541e6c7);\n r_1_0.s_1 = r_1_0_1;\n }\n {\n address r_1_0_2 = 0xE0F3Cc94c03B7b1ec11072DCa6919B3a5150bcf0;\n r_1_0.s_2 = r_1_0_2;\n }\n {\n bytes9 r_1_0_3 = bytes9(0x065fbd6daace72a6dc);\n r_1_0.s_3 = r_1_0_3;\n }\n r_1.s_0 = r_1_0;\n }\n {\n int56 r_1_1 = 26182627013438015;\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n {\n S_efdb98a3 memory r_2;\n {\n S_7453cb0f memory r_2_0;\n {\n uint112 r_2_0_0 = 565649644050795689706842579344120;\n r_2_0.s_0 = r_2_0_0;\n }\n {\n bytes5 r_2_0_1 = bytes5(0xa548844972);\n r_2_0.s_1 = r_2_0_1;\n }\n {\n address r_2_0_2 = 0x79f32f87F9AC317A07fab24484bFE9B91f93A5C6;\n r_2_0.s_2 = r_2_0_2;\n }\n {\n bytes9 r_2_0_3 = bytes9(0x2ea6a0dd310feab35d);\n r_2_0.s_3 = r_2_0_3;\n }\n r_2.s_0 = r_2_0;\n }\n {\n int56 r_2_1 = -7884678680126271;\n r_2.s_1 = r_2_1;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000f4d528c88b2998cbf996bcdc7860ee65edc601000000000000000000000000000000000000000000000000000000000000000000000000000000c0e30286bdbc62513e9bfedf4683b6b01135eda2ece0e6c435d17dbf2c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018c347b0e51f88000000000000000000000000000000000000bb93181a1bb9475c2d3975c00b76ea7541e6c7000000000000000000000000000000000000000000000000000000000000000000000000000000e0f3cc94c03b7b1ec11072dca6919b3a5150bcf0065fbd6daace72a6dc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d04f5e66c2a3f0000000000000000000000000000000000001be380930e6c3faf5b76d1e51af8a54884497200000000000000000000000000000000000000000000000000000000000000000000000000000079f32f87f9ac317a07fab24484bfe9b91f93a5c62ea6a0dd310feab35d0000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffe3fced301a5cc1" + }, + { + "name": "random-((uint200,address,bool[2],address)[2])", + "type": "((uint200,address,bool[2],address)[2])", + "value": [ + [ + [ + "1209406051087574454227062794089338874105378076242325758594115", + "0xdAeBEb700302Eb8Db56d8DF96D93817ac2c5894a", + [true, false], + "0xdbcD5Ebc9Af7ab78cC9F0AD761b207d66eB7c3BF" + ], + [ + "444111603586967893650681662777468816848669010732145499766126", + "0xE316D8187821C8c2E8fcD93d7C6C7eB5c5E1b4CB", + [false, false], + "0x66066Dd4F9879Fb71195711A3595b53a56e6122E" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1209406051087574454227062794089338874105378076242325758594115" + }, + { + "type": "address", + "value": "0xdAeBEb700302Eb8Db56d8DF96D93817ac2c5894a" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0xdbcD5Ebc9Af7ab78cC9F0AD761b207d66eB7c3BF" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "444111603586967893650681662777468816848669010732145499766126" + }, + { + "type": "address", + "value": "0xE316D8187821C8c2E8fcD93d7C6C7eB5c5E1b4CB" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x66066Dd4F9879Fb71195711A3595b53a56e6122E" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102b8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101e7565b60405180910390f35b610056610158565b61005e610158565b610066610170565b61006e61019d565b78c0ab645584d1eafc08651e6d85d5907d509d4941f17af8cc43815273daebeb700302eb8db56d8df96d93817ac2c5894a60208201526100ac6101c9565b6001815260006020820152604082015273dbcd5ebc9af7ab78cc9f0ad761b207d66eb7c3bf606082015281526100e061019d565b7846c0457d68e240f60242cf9e49fb47c0ba4a06d6f3ca84fd6e815273e316d8187821c8c2e8fcd93d7c6c7eb5c5e1b4cb602082015261011e6101c9565b600080825260208083019190915260408301919091527366066dd4f9879fb71195711a3595b53a56e6122e60608301528201528152919050565b604051806020016040528061016b610170565b905290565b60405180604001604052806002905b61018761019d565b81526020019060019003908161017f5790505090565b60408051608081018252600080825260208201529081016101bc6101c9565b8152600060209091015290565b60405180604001604052806002906020820280368337509192915050565b8151610140820190826000805b60028082106102035750610278565b845180516001600160c81b031685526020808201516001600160a01b03908116828801526040808401519088019190875b86811015610252578151151584529284019290840190600101610234565b50506060939093015190921660808701529590950194505060a0909201916001016101f4565b505050509291505056fea26469706673582212201454446f27c8454b7244ba310c123e9a90ba6c07b6efaf7cd1802fc0a0c250ec64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_22a03147 {\n uint200 s_0;\n address s_1;\n bool[2] s_2;\n address s_3;\n }\n\n struct S_feef6487 {\n S_22a03147[2] s_0;\n }\n\n function test () public pure returns (S_feef6487 memory) {\n S_feef6487 memory r;\n {\n S_22a03147[2] memory r_0;\n {\n S_22a03147 memory r_0_0;\n {\n uint200 r_0_0_0 = 1209406051087574454227062794089338874105378076242325758594115;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n address r_0_0_1 = 0xdAeBEb700302Eb8Db56d8DF96D93817ac2c5894a;\n r_0_0.s_1 = r_0_0_1;\n }\n {\n bool[2] memory r_0_0_2;\n {\n bool r_0_0_2_0 = true;\n r_0_0_2[0] = r_0_0_2_0;\n }\n {\n bool r_0_0_2_1 = false;\n r_0_0_2[1] = r_0_0_2_1;\n }\n r_0_0.s_2 = r_0_0_2;\n }\n {\n address r_0_0_3 = 0xdbcD5Ebc9Af7ab78cC9F0AD761b207d66eB7c3BF;\n r_0_0.s_3 = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n S_22a03147 memory r_0_1;\n {\n uint200 r_0_1_0 = 444111603586967893650681662777468816848669010732145499766126;\n r_0_1.s_0 = r_0_1_0;\n }\n {\n address r_0_1_1 = 0xE316D8187821C8c2E8fcD93d7C6C7eB5c5E1b4CB;\n r_0_1.s_1 = r_0_1_1;\n }\n {\n bool[2] memory r_0_1_2;\n {\n bool r_0_1_2_0 = false;\n r_0_1_2[0] = r_0_1_2_0;\n }\n {\n bool r_0_1_2_1 = false;\n r_0_1_2[1] = r_0_1_2_1;\n }\n r_0_1.s_2 = r_0_1_2;\n }\n {\n address r_0_1_3 = 0x66066Dd4F9879Fb71195711A3595b53a56e6122E;\n r_0_1.s_3 = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000c0ab645584d1eafc08651e6d85d5907d509d4941f17af8cc43000000000000000000000000daebeb700302eb8db56d8df96d93817ac2c5894a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dbcd5ebc9af7ab78cc9f0ad761b207d66eb7c3bf0000000000000046c0457d68e240f60242cf9e49fb47c0ba4a06d6f3ca84fd6e000000000000000000000000e316d8187821c8c2e8fcd93d7c6c7eb5c5e1b4cb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066066dd4f9879fb71195711a3595b53a56e6122e" + }, + { + "name": "random-(address,((int[3],bool,string)),uint128)", + "type": "(address,((int[3],bool,string)),uint128)", + "value": [ + "0x5113E69A11210F1dBb54002e5f79De21485790Fd", + [ + [ + [ + "22664799257111789916953217217491518762589386491485502500465085277068089218936", + "-51924640377571728319306502403187620276723407628377476433469039038653288854189", + "-4898515888530216088669972360134461490243207641876914192971758755630160086204" + ], + true, + "Moo é🚀Moooé🚀oo oéMMoo oo Méé🚀 🚀 🚀o 🚀oooo🚀éo Mo🚀éooo" + ] + ], + "45124770665426269749264866103920223458" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5113E69A11210F1dBb54002e5f79De21485790Fd" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "22664799257111789916953217217491518762589386491485502500465085277068089218936" + }, + { + "type": "number", + "value": "-51924640377571728319306502403187620276723407628377476433469039038653288854189" + }, + { + "type": "number", + "value": "-4898515888530216088669972360134461490243207641876914192971758755630160086204" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀Moooé🚀oo oéMMoo oo Méé🚀 🚀 🚀o 🚀oooo🚀éo Mo🚀éooo" + } + ] + } + ] + }, + { + "type": "number", + "value": "45124770665426269749264866103920223458" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061034c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101e2565b60405180910390f35b610056610155565b61005e610155565b735113e69a11210f1dbb54002e5f79de21485790fd815261007d610185565b61008561019d565b61008d6101c4565b7f321bd26015f38c58f192d214ef5f63b2366113677b6f54751e88455e8215d77881527f8d33b1ed648d914e07e2f1c860542ca683be83b9d7efcd3bfb40dc79ff614d536020808301919091527ff52b89cb5ec7d3fca7ee83a8b9ade2788097163862ea3327982b5d506eaefb446040808401919091529183526001838201528151608081019092526052808352600092916102c5908301396040808401919091529183525060208301919091526f21f2b6f6f5d632307b73edbe34e8e4e290820152919050565b604051806060016040528060006001600160a01b03168152602001610178610185565b8152600060209091015290565b604051806020016040528061019861019d565b905290565b60405180606001604052806101b06101c4565b815260006020820152606060409091015290565b60405180606001604052806003906020820280368337509192915050565b602080825282516001600160a01b03168282015282810151606060408401525160808301829052805160009291908360a086015b6003821015610235578251815291840191600191909101908401610216565b5050508082015115156101008501526040015160a06101208501528051610140850181905260005b8181101561027a578281018401518682016101600152830161025d565b8181111561028d57600061016083880101525b5060408601516fffffffffffffffffffffffffffffffff811660608701529250601f01601f1916939093016101600194935050505056fe4d6f6f20c3a9f09f9a804d6f6f6fc3a9f09f9a806f6f206fc3a94d4d6f6f206f6f204dc3a9c3a9f09f9a8020f09f9a8020f09f9a806f20f09f9a806f6f6f6ff09f9a80c3a96f204d6ff09f9a80c3a96f6f6fa2646970667358221220d44d7b6c2d68b2831c8d0b4a4e0f3ed01343cd6610e6d1f0f769de863e80d21264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_df5ded0e {\n int256[3] s_0;\n bool s_1;\n string s_2;\n }\n\n struct S_90bdaaef {\n S_df5ded0e s_0;\n }\n\n struct S_577f4cb9 {\n address s_0;\n S_90bdaaef s_1;\n uint128 s_2;\n }\n\n function test () public pure returns (S_577f4cb9 memory) {\n S_577f4cb9 memory r;\n {\n address r_0 = 0x5113E69A11210F1dBb54002e5f79De21485790Fd;\n r.s_0 = r_0;\n }\n {\n S_90bdaaef memory r_1;\n {\n S_df5ded0e memory r_1_0;\n {\n int256[3] memory r_1_0_0;\n {\n int r_1_0_0_0 = 22664799257111789916953217217491518762589386491485502500465085277068089218936;\n r_1_0_0[0] = r_1_0_0_0;\n }\n {\n int r_1_0_0_1 = -51924640377571728319306502403187620276723407628377476433469039038653288854189;\n r_1_0_0[1] = r_1_0_0_1;\n }\n {\n int r_1_0_0_2 = -4898515888530216088669972360134461490243207641876914192971758755630160086204;\n r_1_0_0[2] = r_1_0_0_2;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bool r_1_0_1 = true;\n r_1_0.s_1 = r_1_0_1;\n }\n {\n string memory r_1_0_2 = unicode\"Moo é🚀Moooé🚀oo oéMMoo oo Méé🚀 🚀 🚀o 🚀oooo🚀éo Mo🚀éooo\";\n r_1_0.s_2 = r_1_0_2;\n }\n r_1.s_0 = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n uint128 r_2 = 45124770665426269749264866103920223458;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000005113e69a11210f1dbb54002e5f79de21485790fd00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000021f2b6f6f5d632307b73edbe34e8e4e20000000000000000000000000000000000000000000000000000000000000020321bd26015f38c58f192d214ef5f63b2366113677b6f54751e88455e8215d7788d33b1ed648d914e07e2f1c860542ca683be83b9d7efcd3bfb40dc79ff614d53f52b89cb5ec7d3fca7ee83a8b9ade2788097163862ea3327982b5d506eaefb44000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a804d6f6f6fc3a9f09f9a806f6f206fc3a94d4d6f6f206f6f204dc3a9c3a9f09f9a8020f09f9a8020f09f9a806f20f09f9a806f6f6f6ff09f9a80c3a96f204d6ff09f9a80c3a96f6f6f0000000000000000000000000000" + }, + { + "name": "random-(address,(string,bool),bytes22,bytes22,bytes6)", + "type": "(address,(string,bool),bytes22,bytes22,bytes6)", + "value": [ + "0xc830900DAcf108F36b2EB6AEb8d5bF01178b2C0C", + ["Moo é🚀ooMM ", true], + "0x5d5aab3188aaf77ff149310d0567f8e2dfb96cbb9b2c", + "0x1888d280c08e687c73c9a7b355fb5b094c032db42b40", + "0xb8c3db5b307c" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xc830900DAcf108F36b2EB6AEb8d5bF01178b2C0C" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooMM " + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x5d5aab3188aaf77ff149310d0567f8e2dfb96cbb9b2c" + }, + { + "type": "hexstring", + "value": "0x1888d280c08e687c73c9a7b355fb5b094c032db42b40" + }, + { + "type": "hexstring", + "value": "0xb8c3db5b307c" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061025b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610163565b60405180910390f35b61005661010e565b61005e61010e565b73c830900dacf108f36b2eb6aeb8d5bf01178b2c0c815260408051808201825260608082526000602080840191825284518086018652600f81526e026b7b79061d4f84fcd4037b7a6a69608d1b8183015284526001909152840191909152751756aacc622abddffc524c434159fe38b7ee5b2ee6cb60521b918301919091527462234a030239a1f1cf269ecd57ed6c25300cb6d0ad60561b90820152652e30f6d6cc1f60d21b6080820152919050565b6040518060a0016040528060006001600160a01b031681526020016101486040518060400160405280606081526020016000151581525090565b81526000602082018190526040820181905260609091015290565b6000602080835260018060a01b03845116818401528084015160a060408501528051604060c086015280518061010087015260005b818110156101b55782810185015187820161012001528401610198565b818111156101c857600061012083890101525b509190920151151560e0850152604085015169ffffffffffffffffffff1990811660608087019190915286015116608080860191909152909401516001600160d01b03191660a08401525050610120601f909201601f191601019056fea2646970667358221220ed53a1f0f217535d8d0e495da826dd7b666ff860eb4f9d5f43c6d250ccf7ca3264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fc3be6c5 {\n string s_0;\n bool s_1;\n }\n\n struct S_26437d07 {\n address s_0;\n S_fc3be6c5 s_1;\n bytes22 s_2;\n bytes22 s_3;\n bytes6 s_4;\n }\n\n function test () public pure returns (S_26437d07 memory) {\n S_26437d07 memory r;\n {\n address r_0 = 0xc830900DAcf108F36b2EB6AEb8d5bF01178b2C0C;\n r.s_0 = r_0;\n }\n {\n S_fc3be6c5 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀ooMM \";\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n bytes22 r_2 = bytes22(0x5d5aab3188aaf77ff149310d0567f8e2dfb96cbb9b2c);\n r.s_2 = r_2;\n }\n {\n bytes22 r_3 = bytes22(0x1888d280c08e687c73c9a7b355fb5b094c032db42b40);\n r.s_3 = r_3;\n }\n {\n bytes6 r_4 = bytes6(0xb8c3db5b307c);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000c830900dacf108f36b2eb6aeb8d5bf01178b2c0c00000000000000000000000000000000000000000000000000000000000000a05d5aab3188aaf77ff149310d0567f8e2dfb96cbb9b2c000000000000000000001888d280c08e687c73c9a7b355fb5b094c032db42b4000000000000000000000b8c3db5b307c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a806f6f4d4d200000000000000000000000000000000000" + }, + { + "name": "random-(address,(uint176,int48,(uint48,bytes5)))[4]", + "type": "(address,(uint176,int48,(uint48,bytes5)))[4]", + "value": [ + [ + "0xe0Bd623b20911c49096b371E4bf1cdD065fB2Ca4", + [ + "83240504328455634059546708750128774569641395365583097", + "-97549210974822", + ["69851054414404", "0x0d0c2e8198"] + ] + ], + [ + "0x741a427e1234A9D6020aBc427666006A08B2709D", + [ + "64368112317555200644832536047584758947207423627926263", + "-25384490548395", + ["24735034647537", "0xb483abc066"] + ] + ], + [ + "0xe4A3Cb2601E1B3a6a80B33985ceABAa178d7dE36", + [ + "57613918711577183607313220231925471035485093950861479", + "-28772604903964", + ["113657273428368", "0x129ab7a27d"] + ] + ], + [ + "0xB083F5a350874A5d25e5EAe316f71d6ecD7eA943", + [ + "84630558749950124539239311808119333250115749565445824", + "-78903680646121", + ["157496488686722", "0x75c335e98e"] + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xe0Bd623b20911c49096b371E4bf1cdD065fB2Ca4" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "83240504328455634059546708750128774569641395365583097" + }, + { + "type": "number", + "value": "-97549210974822" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "69851054414404" + }, + { + "type": "hexstring", + "value": "0x0d0c2e8198" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x741a427e1234A9D6020aBc427666006A08B2709D" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "64368112317555200644832536047584758947207423627926263" + }, + { + "type": "number", + "value": "-25384490548395" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "24735034647537" + }, + { + "type": "hexstring", + "value": "0xb483abc066" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xe4A3Cb2601E1B3a6a80B33985ceABAa178d7dE36" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "57613918711577183607313220231925471035485093950861479" + }, + { + "type": "number", + "value": "-28772604903964" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "113657273428368" + }, + { + "type": "hexstring", + "value": "0x129ab7a27d" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xB083F5a350874A5d25e5EAe316f71d6ecD7eA943" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "84630558749950124539239311808119333250115749565445824" + }, + { + "type": "number", + "value": "-78903680646121" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "157496488686722" + }, + { + "type": "hexstring", + "value": "0x75c335e98e" + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103ed806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610332565b60405180910390f35b6100566102ac565b61005e6102ac565b6100666102d9565b73e0bd623b20911c49096b371e4bf1cdd065fb2ca48152610085610301565b75de7b76dc52a46c1d529a063ac465897d4899f27798f981526558b872117a651960208201526100c5604080518082019091526000808252602082015290565b653f8777491a4481526401a185d03360db1b602080830191909152604083019190915282015281526100f56102d9565b73741a427e1234a9d6020abc427666006a08b2709d8152610114610301565b75ac0a731e257f98dbc52fa00e38b461b50915ec0c9af78152651716498abcaa196020820152610154604080518082019091526000808252602082015290565b65167f12f423f18152645a41d5e03360d91b6020808301919091526040830191909152828101919091528201526101896102d9565b73e4a3cb2601e1b3a6a80b33985ceabaa178d7de3681526101a8610301565b7599fd0afa0e7ba951ab283ef2705acef39fd18bdf30a78152651a2b24e5021b1960208201526101e8604080518082019091526000808252602082015290565b65675ee568a990815264129ab7a27d60d81b60208083019190915260408381019290925283019190915282015261021d6102d9565b73b083f5a350874a5d25e5eae316f71d6ecd7ea943815261023c610301565b75e23294005c3636ace10dee8f49fc218c481fef0836c081526547c331db3be819602082015261027c604080518082019091526000808252602082015290565b658f3e0242f4828152643ae19af4c760d91b60208083019190915260408301919091528201526060820152919050565b60405180608001604052806004905b6102c36102d9565b8152602001906001900390816102bb5790505090565b604051806040016040528060006001600160a01b031681526020016102fc610301565b905290565b60408051606081018252600080825260208201529081016102fc604080518082019091526000808252602082015290565b6102808101818360005b60048110156103ae57815180516001600160a01b0316845260209081015180516001600160b01b0316828601528082015160050b6040808701919091520151805165ffffffffffff1660608601528101516001600160d81b031916608085015260a0909301929091019060010161033c565b5050509291505056fea2646970667358221220aee0e6295977e39dd950a5e4b06f9240568b714c375bb52e618b4450a6539bcd64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_851cf15f {\n uint48 s_0;\n bytes5 s_1;\n }\n\n struct S_9e1c8372 {\n uint176 s_0;\n int48 s_1;\n S_851cf15f s_2;\n }\n\n struct S_a3ba2ff4 {\n address s_0;\n S_9e1c8372 s_1;\n }\n\n function test () public pure returns (S_a3ba2ff4[4] memory) {\n S_a3ba2ff4[4] memory r;\n {\n S_a3ba2ff4 memory r_0;\n {\n address r_0_0 = 0xe0Bd623b20911c49096b371E4bf1cdD065fB2Ca4;\n r_0.s_0 = r_0_0;\n }\n {\n S_9e1c8372 memory r_0_1;\n {\n uint176 r_0_1_0 = 83240504328455634059546708750128774569641395365583097;\n r_0_1.s_0 = r_0_1_0;\n }\n {\n int48 r_0_1_1 = -97549210974822;\n r_0_1.s_1 = r_0_1_1;\n }\n {\n S_851cf15f memory r_0_1_2;\n {\n uint48 r_0_1_2_0 = 69851054414404;\n r_0_1_2.s_0 = r_0_1_2_0;\n }\n {\n bytes5 r_0_1_2_1 = bytes5(0x0d0c2e8198);\n r_0_1_2.s_1 = r_0_1_2_1;\n }\n r_0_1.s_2 = r_0_1_2;\n }\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_a3ba2ff4 memory r_1;\n {\n address r_1_0 = 0x741a427e1234A9D6020aBc427666006A08B2709D;\n r_1.s_0 = r_1_0;\n }\n {\n S_9e1c8372 memory r_1_1;\n {\n uint176 r_1_1_0 = 64368112317555200644832536047584758947207423627926263;\n r_1_1.s_0 = r_1_1_0;\n }\n {\n int48 r_1_1_1 = -25384490548395;\n r_1_1.s_1 = r_1_1_1;\n }\n {\n S_851cf15f memory r_1_1_2;\n {\n uint48 r_1_1_2_0 = 24735034647537;\n r_1_1_2.s_0 = r_1_1_2_0;\n }\n {\n bytes5 r_1_1_2_1 = bytes5(0xb483abc066);\n r_1_1_2.s_1 = r_1_1_2_1;\n }\n r_1_1.s_2 = r_1_1_2;\n }\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n {\n S_a3ba2ff4 memory r_2;\n {\n address r_2_0 = 0xe4A3Cb2601E1B3a6a80B33985ceABAa178d7dE36;\n r_2.s_0 = r_2_0;\n }\n {\n S_9e1c8372 memory r_2_1;\n {\n uint176 r_2_1_0 = 57613918711577183607313220231925471035485093950861479;\n r_2_1.s_0 = r_2_1_0;\n }\n {\n int48 r_2_1_1 = -28772604903964;\n r_2_1.s_1 = r_2_1_1;\n }\n {\n S_851cf15f memory r_2_1_2;\n {\n uint48 r_2_1_2_0 = 113657273428368;\n r_2_1_2.s_0 = r_2_1_2_0;\n }\n {\n bytes5 r_2_1_2_1 = bytes5(0x129ab7a27d);\n r_2_1_2.s_1 = r_2_1_2_1;\n }\n r_2_1.s_2 = r_2_1_2;\n }\n r_2.s_1 = r_2_1;\n }\n r[2] = r_2;\n }\n {\n S_a3ba2ff4 memory r_3;\n {\n address r_3_0 = 0xB083F5a350874A5d25e5EAe316f71d6ecD7eA943;\n r_3.s_0 = r_3_0;\n }\n {\n S_9e1c8372 memory r_3_1;\n {\n uint176 r_3_1_0 = 84630558749950124539239311808119333250115749565445824;\n r_3_1.s_0 = r_3_1_0;\n }\n {\n int48 r_3_1_1 = -78903680646121;\n r_3_1.s_1 = r_3_1_1;\n }\n {\n S_851cf15f memory r_3_1_2;\n {\n uint48 r_3_1_2_0 = 157496488686722;\n r_3_1_2.s_0 = r_3_1_2_0;\n }\n {\n bytes5 r_3_1_2_1 = bytes5(0x75c335e98e);\n r_3_1_2.s_1 = r_3_1_2_1;\n }\n r_3_1.s_2 = r_3_1_2;\n }\n r_3.s_1 = r_3_1;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000e0bd623b20911c49096b371e4bf1cdd065fb2ca400000000000000000000de7b76dc52a46c1d529a063ac465897d4899f27798f9ffffffffffffffffffffffffffffffffffffffffffffffffffffa7478dee859a00000000000000000000000000000000000000000000000000003f8777491a440d0c2e8198000000000000000000000000000000000000000000000000000000000000000000000000000000741a427e1234a9d6020abc427666006a08b2709d00000000000000000000ac0a731e257f98dbc52fa00e38b461b50915ec0c9af7ffffffffffffffffffffffffffffffffffffffffffffffffffffe8e9b67543550000000000000000000000000000000000000000000000000000167f12f423f1b483abc066000000000000000000000000000000000000000000000000000000000000000000000000000000e4a3cb2601e1b3a6a80b33985ceabaa178d7de360000000000000000000099fd0afa0e7ba951ab283ef2705acef39fd18bdf30a7ffffffffffffffffffffffffffffffffffffffffffffffffffffe5d4db1afde40000000000000000000000000000000000000000000000000000675ee568a990129ab7a27d000000000000000000000000000000000000000000000000000000000000000000000000000000b083f5a350874a5d25e5eae316f71d6ecd7ea94300000000000000000000e23294005c3636ace10dee8f49fc218c481fef0836c0ffffffffffffffffffffffffffffffffffffffffffffffffffffb83cce24c41700000000000000000000000000000000000000000000000000008f3e0242f48275c335e98e000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,address,(string))[][3][3]", + "type": "(address,address,(string))[][3][3]", + "value": [ + [ + [ + [ + "0xdbAA9F6C2C943AF353620bF5e93DDD477Db1af22", + "0xA1A551566239178188B85703f3f5A1D295ae2e5e", + ["Moo é🚀MoéMoo o 🚀MooooMéoMéé M"] + ], + [ + "0x38A8A89E4e4ccEBD4917cECc82d83ca9aC482ABC", + "0xB3742eb0Ca9AF5Dd64c3152a5eF7B9DF60Fd0057", + ["Moo é🚀M🚀oMoéooé🚀MéoM MMo🚀Moééoé🚀éoMéoo🚀o oé é"] + ], + [ + "0x5a0cE98635b82ADc0FAF6e5DfBaD7bF7F0b8aeC8", + "0x093c67F526eab597D6517D9a133815F8eee251F8", + ["Moo é🚀éoo🚀o 🚀oooo🚀🚀 🚀 oé MMMooo ooMé"] + ] + ], + [ + [ + "0xA0489d70929FD1B9C6865B92C136635541C8cb69", + "0x81845041EbC9CbC4238FbAac0c86d30A6987dA6b", + ["Moo é🚀"] + ], + [ + "0xdCE6d2dF2cA31B9D529C28d9A451dfCec49bc6e0", + "0x8B5B3B89aD2532c8bdFDF96B9136b73D2c6FcFA8", + ["Moo é🚀é o oo é éooM oMMMo"] + ], + [ + "0x6244FCC2146522AbE14697aCd6da22EB1cbd3323", + "0x25892d288a5713a77f5cf4d283CaC5c9D3c797f4", + ["Moo é🚀 M🚀éé🚀🚀oéM🚀o🚀🚀🚀oo🚀oM🚀é🚀🚀🚀o oM"] + ], + [ + "0x9Ccda018D23888b2523A7237472D696f7C2F79A2", + "0xbbE58fB119987540EED61aC24499A93BAfA702a0", + ["Moo é🚀🚀ooééoéoM"] + ] + ], + [ + [ + "0x8BDFc210B432625378795889631E708aF5Ff9391", + "0xd7b08636de609E1044AF41C0D708cb38F0C787b0", + ["Moo é🚀M"] + ], + [ + "0x64C8C3dE86C7F9be2B7ACB71d846e67a303A9351", + "0x0aa51f27c1cff9E2322f4ce4fe96D7C8Cd57FafF", + ["Moo é🚀é🚀é🚀🚀éo🚀ooéooMéééé"] + ] + ] + ], + [ + [ + [ + "0x79518aF4820BC786291E6dB5D75827f85Ca2c91c", + "0xF4d04949F8BF39acBA095a882ACA02f4Eb44f719", + ["Moo é🚀éM éooo🚀🚀oéo🚀éMéM"] + ], + [ + "0x9580C20e335d0eb256e1Bda4df96745599ad21a6", + "0x935b4c4E584406c0aea7f6fe68b921FcdB723366", + ["Moo é🚀oM oMMééoéo🚀oMooMoé "] + ], + [ + "0xbf47a79dd5A60D0fE0BDE146462A93d67B27a553", + "0x0Da8c0FC2f289F956fb95659fC15d72f2E375Ce9", + ["Moo é🚀éo éo🚀Mo o🚀éMo🚀🚀🚀🚀 🚀é🚀MéMooo Mé🚀ooooMooMoooM"] + ], + [ + "0x2E4Af8e44dAd5f174E99BeB699e6F20AbD2b6bbD", + "0x68Db52f3787498511816a19eE85681002D8a5f32", + ["Moo é🚀Moo oM🚀ooooMMo"] + ] + ], + [ + [ + "0x429D188580cAe8099DBA7ff250e53705602741Bd", + "0x3304B482E2cB937e5942271C937A8c1980630ddD", + ["Moo é🚀"] + ], + [ + "0x253263e258cBD887D4d7d1C3Dc513370fdEfB8FF", + "0xeb840cd586aDcAC7136893aad2581d08D4a49a23", + ["Moo é🚀oo🚀🚀é"] + ], + [ + "0xeBCdDBB7BfcF7B9f127C9E1087f03fdC815dcb3d", + "0x41DF40F186250fD92127738aCde6FA24F2327bc8", + ["Moo é🚀éoé🚀oMoo🚀o oMé"] + ] + ], + [] + ], + [ + [ + [ + "0xdf475488B83Aa6AD42aEe5158E5169eb0844D99e", + "0x17241029996d81228a586f5A12D304046C851F88", + ["Moo é🚀"] + ], + [ + "0x6867105052fF2D087403F7F74cAb7DFa26FDc7Cd", + "0x1e69d214091A41f2aFC131909f8DbfAa02D3E78a", + ["Moo é🚀ééé🚀MéM éo🚀éoé M🚀M🚀 MM 🚀éoMMoo MoooéMoMéooooo🚀oM"] + ], + [ + "0x22C9537E69Ec250c54eD6cf06F567e18B4B5a9bE", + "0xCdadad2c1ec46E74FE776554d2f6BB1e075c573C", + ["Moo é🚀M"] + ] + ], + [], + [ + [ + "0xD0544c2E6Ed87E644ce486595a4C88629416bA8a", + "0x226A20ffd0792E62Ca75D38838B5D88d693d8e9C", + ["Moo é🚀 oéMé oM Méoo o 🚀ooo M o oM🚀MoMoMooé 🚀oooM🚀éM🚀"] + ], + [ + "0xBF1623AA8481F73634001eC7082C15243313555E", + "0x143d1848cC31400210EBe65D9e6674bcfcA67Af1", + ["Moo é🚀oMMooMM🚀é 🚀é 🚀🚀é éo oo 🚀 oé"] + ], + [ + "0xD87579255E77B97b7c382444E196d721b2BD6CB1", + "0xeabef4f324C748e84e0AC9Fec0f82045547b8f03", + ["Moo é🚀MMMM M Mo🚀 M🚀oo🚀M o🚀 🚀🚀Mé oéoééM"] + ] + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xdbAA9F6C2C943AF353620bF5e93DDD477Db1af22" + }, + { + "type": "address", + "value": "0xA1A551566239178188B85703f3f5A1D295ae2e5e" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MoéMoo o 🚀MooooMéoMéé M" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x38A8A89E4e4ccEBD4917cECc82d83ca9aC482ABC" + }, + { + "type": "address", + "value": "0xB3742eb0Ca9AF5Dd64c3152a5eF7B9DF60Fd0057" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M🚀oMoéooé🚀MéoM MMo🚀Moééoé🚀éoMéoo🚀o oé é" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5a0cE98635b82ADc0FAF6e5DfBaD7bF7F0b8aeC8" + }, + { + "type": "address", + "value": "0x093c67F526eab597D6517D9a133815F8eee251F8" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoo🚀o 🚀oooo🚀🚀 🚀 oé MMMooo ooMé" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xA0489d70929FD1B9C6865B92C136635541C8cb69" + }, + { + "type": "address", + "value": "0x81845041EbC9CbC4238FbAac0c86d30A6987dA6b" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xdCE6d2dF2cA31B9D529C28d9A451dfCec49bc6e0" + }, + { + "type": "address", + "value": "0x8B5B3B89aD2532c8bdFDF96B9136b73D2c6FcFA8" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é o oo é éooM oMMMo" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6244FCC2146522AbE14697aCd6da22EB1cbd3323" + }, + { + "type": "address", + "value": "0x25892d288a5713a77f5cf4d283CaC5c9D3c797f4" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 M🚀éé🚀🚀oéM🚀o🚀🚀🚀oo🚀oM🚀é🚀🚀🚀o oM" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x9Ccda018D23888b2523A7237472D696f7C2F79A2" + }, + { + "type": "address", + "value": "0xbbE58fB119987540EED61aC24499A93BAfA702a0" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀ooééoéoM" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x8BDFc210B432625378795889631E708aF5Ff9391" + }, + { + "type": "address", + "value": "0xd7b08636de609E1044AF41C0D708cb38F0C787b0" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x64C8C3dE86C7F9be2B7ACB71d846e67a303A9351" + }, + { + "type": "address", + "value": "0x0aa51f27c1cff9E2322f4ce4fe96D7C8Cd57FafF" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀é🚀🚀éo🚀ooéooMéééé" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x79518aF4820BC786291E6dB5D75827f85Ca2c91c" + }, + { + "type": "address", + "value": "0xF4d04949F8BF39acBA095a882ACA02f4Eb44f719" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éM éooo🚀🚀oéo🚀éMéM" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x9580C20e335d0eb256e1Bda4df96745599ad21a6" + }, + { + "type": "address", + "value": "0x935b4c4E584406c0aea7f6fe68b921FcdB723366" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM oMMééoéo🚀oMooMoé " + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xbf47a79dd5A60D0fE0BDE146462A93d67B27a553" + }, + { + "type": "address", + "value": "0x0Da8c0FC2f289F956fb95659fC15d72f2E375Ce9" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éo éo🚀Mo o🚀éMo🚀🚀🚀🚀 🚀é🚀MéMooo Mé🚀ooooMooMoooM" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x2E4Af8e44dAd5f174E99BeB699e6F20AbD2b6bbD" + }, + { + "type": "address", + "value": "0x68Db52f3787498511816a19eE85681002D8a5f32" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Moo oM🚀ooooMMo" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x429D188580cAe8099DBA7ff250e53705602741Bd" + }, + { + "type": "address", + "value": "0x3304B482E2cB937e5942271C937A8c1980630ddD" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x253263e258cBD887D4d7d1C3Dc513370fdEfB8FF" + }, + { + "type": "address", + "value": "0xeb840cd586aDcAC7136893aad2581d08D4a49a23" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀🚀é" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xeBCdDBB7BfcF7B9f127C9E1087f03fdC815dcb3d" + }, + { + "type": "address", + "value": "0x41DF40F186250fD92127738aCde6FA24F2327bc8" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoé🚀oMoo🚀o oMé" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xdf475488B83Aa6AD42aEe5158E5169eb0844D99e" + }, + { + "type": "address", + "value": "0x17241029996d81228a586f5A12D304046C851F88" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6867105052fF2D087403F7F74cAb7DFa26FDc7Cd" + }, + { + "type": "address", + "value": "0x1e69d214091A41f2aFC131909f8DbfAa02D3E78a" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ééé🚀MéM éo🚀éoé M🚀M🚀 MM 🚀éoMMoo MoooéMoMéooooo🚀oM" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x22C9537E69Ec250c54eD6cf06F567e18B4B5a9bE" + }, + { + "type": "address", + "value": "0xCdadad2c1ec46E74FE776554d2f6BB1e075c573C" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xD0544c2E6Ed87E644ce486595a4C88629416bA8a" + }, + { + "type": "address", + "value": "0x226A20ffd0792E62Ca75D38838B5D88d693d8e9C" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oéMé oM Méoo o 🚀ooo M o oM🚀MoMoMooé 🚀oooM🚀éM🚀" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xBF1623AA8481F73634001eC7082C15243313555E" + }, + { + "type": "address", + "value": "0x143d1848cC31400210EBe65D9e6674bcfcA67Af1" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMMooMM🚀é 🚀é 🚀🚀é éo oo 🚀 oé" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xD87579255E77B97b7c382444E196d721b2BD6CB1" + }, + { + "type": "address", + "value": "0xeabef4f324C748e84e0AC9Fec0f82045547b8f03" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MMMM M Mo🚀 M🚀oo🚀M o🚀 🚀🚀Mé oéoééM" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061147f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610fc1565b60405180910390f35b610056610f27565b61005e610f27565b610066610f54565b60408051600380825260808201909252600091816020015b610086610f7b565b81526020019060019003908161007e5790505090506100a3610f7b565b73dbaa9f6c2c943af353620bf5e93ddd477db1af22815273a1a551566239178188b85703f3f5a1d295ae2e5e60208083019190915260408051918201905260608152600060405180606001604052806029815260200161120460299139825250604082015281518190839060009061011d5761011d6110fa565b602002602001018190525050610131610f7b565b7338a8a89e4e4ccebd4917cecc82d83ca9ac482abc815273b3742eb0ca9af5dd64c3152a5ef7b9df60fd00576020808301919091526040805191820190526060815260006040518060800160405280604a8152602001611400604a9139825250604082015281518190839060019081106101ad576101ad6110fa565b6020026020010181905250506101c1610f7b565b735a0ce98635b82adc0faf6e5dfbad7bf7f0b8aec8815273093c67f526eab597d6517d9a133815f8eee251f86020808301919091526040805191820190526060815260006040518060600160405280603c815260200161134a603c91398252506040820152815181908390600290811061023d5761023d6110fa565b602090810291909101015250815260408051600480825260a08201909252600091816020015b61026b610f7b565b815260200190600190039081610263579050509050610288610f7b565b73a0489d70929fd1b9c6865b92c136635541c8cb6981527381845041ebc9cbc4238fbaac0c86d30a6987da6b60208083019190915260408051918201905260608152604080518082018252600a8152689adede418753e13f3560b71b60208201528252820152815181908390600090610303576103036110fa565b602002602001018190525050610317610f7b565b73dce6d2df2ca31b9d529c28d9a451dfcec49bc6e08152738b5b3b89ad2532c8bdfdf96b9136b73d2c6fcfa86020808301919091526040805191820190526060815260006040518060600160405280602381526020016113dd6023913982525060408201528151819083906001908110610393576103936110fa565b6020026020010181905250506103a7610f7b565b736244fcc2146522abe14697acd6da22eb1cbd332381527325892d288a5713a77f5cf4d283cac5c9d3c797f46020808301919091526040805191820190526060815260006040518060800160405280604f8152602001611111604f913982525060408201528151819083906002908110610423576104236110fa565b602002602001018190525050610437610f7b565b739ccda018d23888b2523a7237472d696f7c2f79a2815273bbe58fb119987540eed61ac24499a93bafa702a060208083019190915260408051918201905260608152604080518082018252601981527f4d6f6f20c3a9f09f9a80f09f9a806f6fc3a9c3a96fc3a96f4d000000000000006020820152825282015281518190839060039081106104c8576104c86110fa565b6020908102919091018101919091528301919091525060408051600280825260608201909252600091816020015b6104fe610f7b565b8152602001906001900390816104f657905050905061051b610f7b565b738bdfc210b432625378795889631e708af5ff9391815273d7b08636de609e1044af41c0d708cb38f0c787b060208083019190915260408051918201905260608152604080518082018252600b81526a4d6f6f20c3a9f09f9a804d60a81b60208201528252820152815181908390600090610598576105986110fa565b6020026020010181905250506105ac610f7b565b7364c8c3de86c7f9be2b7acb71d846e67a303a93518152730aa51f27c1cff9e2322f4ce4fe96d7c8cd57faff60208083019190915260408051918201905260608152600060405180606001604052806030815260200161124e6030913982525060408201528151819083906001908110610628576106286110fa565b60209081029190910101525060408201528152610643610f54565b60408051600480825260a08201909252600091816020015b610663610f7b565b81526020019060019003908161065b579050509050610680610f7b565b7379518af4820bc786291e6db5d75827f85ca2c91c815273f4d04949f8bf39acba095a882aca02f4eb44f7196020808301919091526040805191820190526060815260006040518060600160405280602981526020016111b66029913982525060408201528151819083906000906106fa576106fa6110fa565b60200260200101819052505061070e610f7b565b739580c20e335d0eb256e1bda4df96745599ad21a6815273935b4c4e584406c0aea7f6fe68b921fcdb7233666020808301919091526040805191820190526060815260006040518060600160405280602581526020016111df602591398252506040820152815181908390600190811061078a5761078a6110fa565b60200260200101819052505061079e610f7b565b73bf47a79dd5a60d0fe0bde146462a93d67b27a5538152730da8c0fc2f289f956fb95659fc15d72f2e375ce9602080830191909152604080519182019052606081526000604051806080016040528060578152602001611386605791398252506040820152815181908390600290811061081a5761081a6110fa565b60200260200101819052505061082e610f7b565b732e4af8e44dad5f174e99beb699e6f20abd2b6bbd81527368db52f3787498511816a19ee85681002d8a5f3260208083019190915260408051918201905260608152604080518082018252601b81527f4d6f6f20c3a9f09f9a804d6f6f206f4df09f9a806f6f6f6f4d4d6f00000000006020820152825282015281518190839060039081106108bf576108bf6110fa565b602090810291909101015250815260408051600380825260808201909252600091816020015b6108ed610f7b565b8152602001906001900390816108e557905050905061090a610f7b565b73429d188580cae8099dba7ff250e53705602741bd8152733304b482e2cb937e5942271c937a8c1980630ddd60208083019190915260408051918201905260608152604080518082018252600a8152689adede418753e13f3560b71b60208201528252820152815181908390600090610985576109856110fa565b602002602001018190525050610999610f7b565b73253263e258cbd887d4d7d1c3dc513370fdefb8ff815273eb840cd586adcac7136893aad2581d08d4a49a236020808301919091526040805191820190526060815260408051808201825260168152754d6f6f20c3a9f09f9a806f6ff09f9a80f09f9a80c3a960501b602082015282528201528151819083906001908110610a2357610a236110fa565b602002602001018190525050610a37610f7b565b73ebcddbb7bfcf7b9f127c9e1087f03fdc815dcb3d81527341df40f186250fd92127738acde6fa24f2327bc860208083019190915260408051918201905260608152600060405180606001604052806021815260200161122d6021913982525060408201528151819083906002908110610ab357610ab36110fa565b602090810291909101810191909152838101929092525060408051600080825292810190915281610afa565b610ae7610f7b565b815260200190600190039081610adf5790505b506040830152506020820152610b0e610f54565b60408051600380825260808201909252600091816020015b610b2e610f7b565b815260200190600190039081610b26579050509050610b4b610f7b565b73df475488b83aa6ad42aee5158e5169eb0844d99e81527317241029996d81228a586f5a12d304046c851f8860208083019190915260408051918201905260608152604080518082018252600a8152689adede418753e13f3560b71b60208201528252820152815181908390600090610bc657610bc66110fa565b602002602001018190525050610bda610f7b565b736867105052ff2d087403f7f74cab7dfa26fdc7cd8152731e69d214091a41f2afc131909f8dbfaa02d3e78a6020808301919091526040805191820190526060815260006040518060800160405280605681526020016111606056913982525060408201528151819083906001908110610c5657610c566110fa565b602002602001018190525050610c6a610f7b565b7322c9537e69ec250c54ed6cf06f567e18b4b5a9be815273cdadad2c1ec46e74fe776554d2f6bb1e075c573c60208083019190915260408051918201905260608152604080518082018252600b81526a4d6f6f20c3a9f09f9a804d60a81b602082015282528201528151819083906002908110610ce957610ce96110fa565b6020908102919091018101919091529183525060408051600080825292810190915281610d2c565b610d19610f7b565b815260200190600190039081610d115790505b5060208301525060408051600380825260808201909252600091816020015b610d53610f7b565b815260200190600190039081610d4b579050509050610d70610f7b565b73d0544c2e6ed87e644ce486595a4c88629416ba8a815273226a20ffd0792e62ca75d38838b5d88d693d8e9c6020808301919091526040805191820190526060815260006040518060800160405280605181526020016112f9605191398252506040820152815181908390600090610dea57610dea6110fa565b602002602001018190525050610dfe610f7b565b73bf1623aa8481f73634001ec7082c15243313555e815273143d1848cc31400210ebe65d9e6674bcfca67af16020808301919091526040805191820190526060815260006040518060600160405280603981526020016112c06039913982525060408201528151819083906001908110610e7a57610e7a6110fa565b602002602001018190525050610e8e610f7b565b73d87579255e77b97b7c382444e196d721b2bd6cb1815273eabef4f324c748e84e0ac9fec0f82045547b8f0360208083019190915260408051918201905260608152600060405180608001604052806042815260200161127e6042913982525060408201528151819083906002908110610f0a57610f0a6110fa565b602090810291909101015250604080830191909152820152919050565b60405180606001604052806003905b610f3e610f54565b815260200190600190039081610f365790505090565b60405180606001604052806003905b6060815260200190600190039081610f635790505090565b604051806060016040528060006001600160a01b0316815260200160006001600160a01b03168152602001610fbc6040518060200160405280606081525090565b905290565b60208152600060208201608083018460005b60038110156110ef57601f19868403810185528251846060810160005b60038110156110d5578782038352835180518084526020918201918085019190600582901b86010160005b828110156110b8578682038a018452845180516001600160a01b039081168452602080830151909116818501526040918201516060928501839052519184015280516080840181905260005b8181101561108457602081840181015160a0878401015201611067565b8181111561109657600060a083870101525b506020968701969590950194601f018b169290920160a001915060010161101b565b506020978801979690960195945050506001919091019050610ff0565b506020978801979096509490940193505050600101610fd3565b509095945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80204df09f9a80c3a9c3a9f09f9a80f09f9a806fc3a94df09f9a806ff09f9a80f09f9a80f09f9a806f6ff09f9a806f4df09f9a80c3a9f09f9a80f09f9a80f09f9a806f206f4d4d6f6f20c3a9f09f9a80c3a9c3a9c3a9f09f9a804dc3a94d20c3a96ff09f9a80c3a96fc3a9204df09f9a804df09f9a80204d4d20f09f9a80c3a96f4d4d6f6f204d6f6f6fc3a94d6f4dc3a96f6f6f6f6ff09f9a806f4d4d6f6f20c3a9f09f9a80c3a94d20c3a96f6f6ff09f9a80f09f9a806fc3a96ff09f9a80c3a94dc3a94d4d6f6f20c3a9f09f9a806f4d206f4d4dc3a9c3a96fc3a96ff09f9a806f4d6f6f4d6fc3a9204d6f6f20c3a9f09f9a804d6fc3a94d6f6f206f2020f09f9a804d6f6f6f6f4dc3a96f4dc3a9c3a9204d4d6f6f20c3a9f09f9a80c3a96fc3a9f09f9a806f4d6f6ff09f9a806f206f4dc3a94d6f6f20c3a9f09f9a80c3a9f09f9a80c3a9f09f9a80f09f9a80c3a96ff09f9a806f6fc3a96f6f4dc3a9c3a9c3a9c3a94d6f6f20c3a9f09f9a804d4d4d4d204d204d6ff09f9a80204df09f9a806f6ff09f9a804d206ff09f9a802020f09f9a80f09f9a804dc3a920206fc3a96fc3a9c3a94d4d6f6f20c3a9f09f9a806f4d4d6f6f4d4df09f9a80c3a920f09f9a80c3a920f09f9a80f09f9a80c3a920c3a96f206f6f20f09f9a80206fc3a94d6f6f20c3a9f09f9a80206fc3a94dc3a9206f4d20204dc3a96f6f206f2020f09f9a806f6f6f2020204d20206f206f4df09f9a804d6f4d6f4d6f6fc3a920f09f9a806f6f6f4df09f9a80c3a94df09f9a804d6f6f20c3a9f09f9a80c3a96f6ff09f9a806f2020f09f9a806f6f6f6ff09f9a80f09f9a802020f09f9a80206fc3a9204d4d4d6f6f6f206f6f4dc3a94d6f6f20c3a9f09f9a80c3a96f20c3a96ff09f9a804d6f206ff09f9a80c3a94d6ff09f9a80f09f9a80f09f9a80f09f9a8020f09f9a80c3a9f09f9a804dc3a94d6f6f6f204dc3a9f09f9a806f6f6f6f4d6f6f4d6f6f6f4d4d6f6f20c3a9f09f9a80c3a9206f206f6f2020c3a9202020c3a96f6f4d206f4d4d4d6f4d6f6f20c3a9f09f9a804df09f9a806f4d6fc3a96f6fc3a9f09f9a804dc3a96f4d204d4d6ff09f9a804d6fc3a9c3a96fc3a9f09f9a80c3a96f4dc3a96f6ff09f9a806f206fc3a920c3a9a26469706673582212202aac1623e3345d1194773891dd3e0d3b05719977b49aac9e3297fcb6d2fc297864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_3da469b1 {\n address s_0;\n address s_1;\n S_97fc4627 s_2;\n }\n\n function test () public pure returns (S_3da469b1[][3][3] memory) {\n S_3da469b1[][3][3] memory r;\n {\n S_3da469b1[][3] memory r_0;\n {\n S_3da469b1[] memory r_0_0 = new S_3da469b1[](3);\n {\n S_3da469b1 memory r_0_0_0;\n {\n address r_0_0_0_0 = 0xdbAA9F6C2C943AF353620bF5e93DDD477Db1af22;\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n address r_0_0_0_1 = 0xA1A551566239178188B85703f3f5A1D295ae2e5e;\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n S_97fc4627 memory r_0_0_0_2;\n {\n string memory r_0_0_0_2_0 = unicode\"Moo é🚀MoéMoo o 🚀MooooMéoMéé M\";\n r_0_0_0_2.s_0 = r_0_0_0_2_0;\n }\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n r_0_0[0] = r_0_0_0;\n }\n {\n S_3da469b1 memory r_0_0_1;\n {\n address r_0_0_1_0 = 0x38A8A89E4e4ccEBD4917cECc82d83ca9aC482ABC;\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n {\n address r_0_0_1_1 = 0xB3742eb0Ca9AF5Dd64c3152a5eF7B9DF60Fd0057;\n r_0_0_1.s_1 = r_0_0_1_1;\n }\n {\n S_97fc4627 memory r_0_0_1_2;\n {\n string memory r_0_0_1_2_0 = unicode\"Moo é🚀M🚀oMoéooé🚀MéoM MMo🚀Moééoé🚀éoMéoo🚀o oé é\";\n r_0_0_1_2.s_0 = r_0_0_1_2_0;\n }\n r_0_0_1.s_2 = r_0_0_1_2;\n }\n r_0_0[1] = r_0_0_1;\n }\n {\n S_3da469b1 memory r_0_0_2;\n {\n address r_0_0_2_0 = 0x5a0cE98635b82ADc0FAF6e5DfBaD7bF7F0b8aeC8;\n r_0_0_2.s_0 = r_0_0_2_0;\n }\n {\n address r_0_0_2_1 = 0x093c67F526eab597D6517D9a133815F8eee251F8;\n r_0_0_2.s_1 = r_0_0_2_1;\n }\n {\n S_97fc4627 memory r_0_0_2_2;\n {\n string memory r_0_0_2_2_0 = unicode\"Moo é🚀éoo🚀o 🚀oooo🚀🚀 🚀 oé MMMooo ooMé\";\n r_0_0_2_2.s_0 = r_0_0_2_2_0;\n }\n r_0_0_2.s_2 = r_0_0_2_2;\n }\n r_0_0[2] = r_0_0_2;\n }\n r_0[0] = r_0_0;\n }\n {\n S_3da469b1[] memory r_0_1 = new S_3da469b1[](4);\n {\n S_3da469b1 memory r_0_1_0;\n {\n address r_0_1_0_0 = 0xA0489d70929FD1B9C6865B92C136635541C8cb69;\n r_0_1_0.s_0 = r_0_1_0_0;\n }\n {\n address r_0_1_0_1 = 0x81845041EbC9CbC4238FbAac0c86d30A6987dA6b;\n r_0_1_0.s_1 = r_0_1_0_1;\n }\n {\n S_97fc4627 memory r_0_1_0_2;\n {\n string memory r_0_1_0_2_0 = unicode\"Moo é🚀\";\n r_0_1_0_2.s_0 = r_0_1_0_2_0;\n }\n r_0_1_0.s_2 = r_0_1_0_2;\n }\n r_0_1[0] = r_0_1_0;\n }\n {\n S_3da469b1 memory r_0_1_1;\n {\n address r_0_1_1_0 = 0xdCE6d2dF2cA31B9D529C28d9A451dfCec49bc6e0;\n r_0_1_1.s_0 = r_0_1_1_0;\n }\n {\n address r_0_1_1_1 = 0x8B5B3B89aD2532c8bdFDF96B9136b73D2c6FcFA8;\n r_0_1_1.s_1 = r_0_1_1_1;\n }\n {\n S_97fc4627 memory r_0_1_1_2;\n {\n string memory r_0_1_1_2_0 = unicode\"Moo é🚀é o oo é éooM oMMMo\";\n r_0_1_1_2.s_0 = r_0_1_1_2_0;\n }\n r_0_1_1.s_2 = r_0_1_1_2;\n }\n r_0_1[1] = r_0_1_1;\n }\n {\n S_3da469b1 memory r_0_1_2;\n {\n address r_0_1_2_0 = 0x6244FCC2146522AbE14697aCd6da22EB1cbd3323;\n r_0_1_2.s_0 = r_0_1_2_0;\n }\n {\n address r_0_1_2_1 = 0x25892d288a5713a77f5cf4d283CaC5c9D3c797f4;\n r_0_1_2.s_1 = r_0_1_2_1;\n }\n {\n S_97fc4627 memory r_0_1_2_2;\n {\n string memory r_0_1_2_2_0 = unicode\"Moo é🚀 M🚀éé🚀🚀oéM🚀o🚀🚀🚀oo🚀oM🚀é🚀🚀🚀o oM\";\n r_0_1_2_2.s_0 = r_0_1_2_2_0;\n }\n r_0_1_2.s_2 = r_0_1_2_2;\n }\n r_0_1[2] = r_0_1_2;\n }\n {\n S_3da469b1 memory r_0_1_3;\n {\n address r_0_1_3_0 = 0x9Ccda018D23888b2523A7237472D696f7C2F79A2;\n r_0_1_3.s_0 = r_0_1_3_0;\n }\n {\n address r_0_1_3_1 = 0xbbE58fB119987540EED61aC24499A93BAfA702a0;\n r_0_1_3.s_1 = r_0_1_3_1;\n }\n {\n S_97fc4627 memory r_0_1_3_2;\n {\n string memory r_0_1_3_2_0 = unicode\"Moo é🚀🚀ooééoéoM\";\n r_0_1_3_2.s_0 = r_0_1_3_2_0;\n }\n r_0_1_3.s_2 = r_0_1_3_2;\n }\n r_0_1[3] = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n {\n S_3da469b1[] memory r_0_2 = new S_3da469b1[](2);\n {\n S_3da469b1 memory r_0_2_0;\n {\n address r_0_2_0_0 = 0x8BDFc210B432625378795889631E708aF5Ff9391;\n r_0_2_0.s_0 = r_0_2_0_0;\n }\n {\n address r_0_2_0_1 = 0xd7b08636de609E1044AF41C0D708cb38F0C787b0;\n r_0_2_0.s_1 = r_0_2_0_1;\n }\n {\n S_97fc4627 memory r_0_2_0_2;\n {\n string memory r_0_2_0_2_0 = unicode\"Moo é🚀M\";\n r_0_2_0_2.s_0 = r_0_2_0_2_0;\n }\n r_0_2_0.s_2 = r_0_2_0_2;\n }\n r_0_2[0] = r_0_2_0;\n }\n {\n S_3da469b1 memory r_0_2_1;\n {\n address r_0_2_1_0 = 0x64C8C3dE86C7F9be2B7ACB71d846e67a303A9351;\n r_0_2_1.s_0 = r_0_2_1_0;\n }\n {\n address r_0_2_1_1 = 0x0aa51f27c1cff9E2322f4ce4fe96D7C8Cd57FafF;\n r_0_2_1.s_1 = r_0_2_1_1;\n }\n {\n S_97fc4627 memory r_0_2_1_2;\n {\n string memory r_0_2_1_2_0 = unicode\"Moo é🚀é🚀é🚀🚀éo🚀ooéooMéééé\";\n r_0_2_1_2.s_0 = r_0_2_1_2_0;\n }\n r_0_2_1.s_2 = r_0_2_1_2;\n }\n r_0_2[1] = r_0_2_1;\n }\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_3da469b1[][3] memory r_1;\n {\n S_3da469b1[] memory r_1_0 = new S_3da469b1[](4);\n {\n S_3da469b1 memory r_1_0_0;\n {\n address r_1_0_0_0 = 0x79518aF4820BC786291E6dB5D75827f85Ca2c91c;\n r_1_0_0.s_0 = r_1_0_0_0;\n }\n {\n address r_1_0_0_1 = 0xF4d04949F8BF39acBA095a882ACA02f4Eb44f719;\n r_1_0_0.s_1 = r_1_0_0_1;\n }\n {\n S_97fc4627 memory r_1_0_0_2;\n {\n string memory r_1_0_0_2_0 = unicode\"Moo é🚀éM éooo🚀🚀oéo🚀éMéM\";\n r_1_0_0_2.s_0 = r_1_0_0_2_0;\n }\n r_1_0_0.s_2 = r_1_0_0_2;\n }\n r_1_0[0] = r_1_0_0;\n }\n {\n S_3da469b1 memory r_1_0_1;\n {\n address r_1_0_1_0 = 0x9580C20e335d0eb256e1Bda4df96745599ad21a6;\n r_1_0_1.s_0 = r_1_0_1_0;\n }\n {\n address r_1_0_1_1 = 0x935b4c4E584406c0aea7f6fe68b921FcdB723366;\n r_1_0_1.s_1 = r_1_0_1_1;\n }\n {\n S_97fc4627 memory r_1_0_1_2;\n {\n string memory r_1_0_1_2_0 = unicode\"Moo é🚀oM oMMééoéo🚀oMooMoé \";\n r_1_0_1_2.s_0 = r_1_0_1_2_0;\n }\n r_1_0_1.s_2 = r_1_0_1_2;\n }\n r_1_0[1] = r_1_0_1;\n }\n {\n S_3da469b1 memory r_1_0_2;\n {\n address r_1_0_2_0 = 0xbf47a79dd5A60D0fE0BDE146462A93d67B27a553;\n r_1_0_2.s_0 = r_1_0_2_0;\n }\n {\n address r_1_0_2_1 = 0x0Da8c0FC2f289F956fb95659fC15d72f2E375Ce9;\n r_1_0_2.s_1 = r_1_0_2_1;\n }\n {\n S_97fc4627 memory r_1_0_2_2;\n {\n string memory r_1_0_2_2_0 = unicode\"Moo é🚀éo éo🚀Mo o🚀éMo🚀🚀🚀🚀 🚀é🚀MéMooo Mé🚀ooooMooMoooM\";\n r_1_0_2_2.s_0 = r_1_0_2_2_0;\n }\n r_1_0_2.s_2 = r_1_0_2_2;\n }\n r_1_0[2] = r_1_0_2;\n }\n {\n S_3da469b1 memory r_1_0_3;\n {\n address r_1_0_3_0 = 0x2E4Af8e44dAd5f174E99BeB699e6F20AbD2b6bbD;\n r_1_0_3.s_0 = r_1_0_3_0;\n }\n {\n address r_1_0_3_1 = 0x68Db52f3787498511816a19eE85681002D8a5f32;\n r_1_0_3.s_1 = r_1_0_3_1;\n }\n {\n S_97fc4627 memory r_1_0_3_2;\n {\n string memory r_1_0_3_2_0 = unicode\"Moo é🚀Moo oM🚀ooooMMo\";\n r_1_0_3_2.s_0 = r_1_0_3_2_0;\n }\n r_1_0_3.s_2 = r_1_0_3_2;\n }\n r_1_0[3] = r_1_0_3;\n }\n r_1[0] = r_1_0;\n }\n {\n S_3da469b1[] memory r_1_1 = new S_3da469b1[](3);\n {\n S_3da469b1 memory r_1_1_0;\n {\n address r_1_1_0_0 = 0x429D188580cAe8099DBA7ff250e53705602741Bd;\n r_1_1_0.s_0 = r_1_1_0_0;\n }\n {\n address r_1_1_0_1 = 0x3304B482E2cB937e5942271C937A8c1980630ddD;\n r_1_1_0.s_1 = r_1_1_0_1;\n }\n {\n S_97fc4627 memory r_1_1_0_2;\n {\n string memory r_1_1_0_2_0 = unicode\"Moo é🚀\";\n r_1_1_0_2.s_0 = r_1_1_0_2_0;\n }\n r_1_1_0.s_2 = r_1_1_0_2;\n }\n r_1_1[0] = r_1_1_0;\n }\n {\n S_3da469b1 memory r_1_1_1;\n {\n address r_1_1_1_0 = 0x253263e258cBD887D4d7d1C3Dc513370fdEfB8FF;\n r_1_1_1.s_0 = r_1_1_1_0;\n }\n {\n address r_1_1_1_1 = 0xeb840cd586aDcAC7136893aad2581d08D4a49a23;\n r_1_1_1.s_1 = r_1_1_1_1;\n }\n {\n S_97fc4627 memory r_1_1_1_2;\n {\n string memory r_1_1_1_2_0 = unicode\"Moo é🚀oo🚀🚀é\";\n r_1_1_1_2.s_0 = r_1_1_1_2_0;\n }\n r_1_1_1.s_2 = r_1_1_1_2;\n }\n r_1_1[1] = r_1_1_1;\n }\n {\n S_3da469b1 memory r_1_1_2;\n {\n address r_1_1_2_0 = 0xeBCdDBB7BfcF7B9f127C9E1087f03fdC815dcb3d;\n r_1_1_2.s_0 = r_1_1_2_0;\n }\n {\n address r_1_1_2_1 = 0x41DF40F186250fD92127738aCde6FA24F2327bc8;\n r_1_1_2.s_1 = r_1_1_2_1;\n }\n {\n S_97fc4627 memory r_1_1_2_2;\n {\n string memory r_1_1_2_2_0 = unicode\"Moo é🚀éoé🚀oMoo🚀o oMé\";\n r_1_1_2_2.s_0 = r_1_1_2_2_0;\n }\n r_1_1_2.s_2 = r_1_1_2_2;\n }\n r_1_1[2] = r_1_1_2;\n }\n r_1[1] = r_1_1;\n }\n {\n S_3da469b1[] memory r_1_2 = new S_3da469b1[](0);\n r_1[2] = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_3da469b1[][3] memory r_2;\n {\n S_3da469b1[] memory r_2_0 = new S_3da469b1[](3);\n {\n S_3da469b1 memory r_2_0_0;\n {\n address r_2_0_0_0 = 0xdf475488B83Aa6AD42aEe5158E5169eb0844D99e;\n r_2_0_0.s_0 = r_2_0_0_0;\n }\n {\n address r_2_0_0_1 = 0x17241029996d81228a586f5A12D304046C851F88;\n r_2_0_0.s_1 = r_2_0_0_1;\n }\n {\n S_97fc4627 memory r_2_0_0_2;\n {\n string memory r_2_0_0_2_0 = unicode\"Moo é🚀\";\n r_2_0_0_2.s_0 = r_2_0_0_2_0;\n }\n r_2_0_0.s_2 = r_2_0_0_2;\n }\n r_2_0[0] = r_2_0_0;\n }\n {\n S_3da469b1 memory r_2_0_1;\n {\n address r_2_0_1_0 = 0x6867105052fF2D087403F7F74cAb7DFa26FDc7Cd;\n r_2_0_1.s_0 = r_2_0_1_0;\n }\n {\n address r_2_0_1_1 = 0x1e69d214091A41f2aFC131909f8DbfAa02D3E78a;\n r_2_0_1.s_1 = r_2_0_1_1;\n }\n {\n S_97fc4627 memory r_2_0_1_2;\n {\n string memory r_2_0_1_2_0 = unicode\"Moo é🚀ééé🚀MéM éo🚀éoé M🚀M🚀 MM 🚀éoMMoo MoooéMoMéooooo🚀oM\";\n r_2_0_1_2.s_0 = r_2_0_1_2_0;\n }\n r_2_0_1.s_2 = r_2_0_1_2;\n }\n r_2_0[1] = r_2_0_1;\n }\n {\n S_3da469b1 memory r_2_0_2;\n {\n address r_2_0_2_0 = 0x22C9537E69Ec250c54eD6cf06F567e18B4B5a9bE;\n r_2_0_2.s_0 = r_2_0_2_0;\n }\n {\n address r_2_0_2_1 = 0xCdadad2c1ec46E74FE776554d2f6BB1e075c573C;\n r_2_0_2.s_1 = r_2_0_2_1;\n }\n {\n S_97fc4627 memory r_2_0_2_2;\n {\n string memory r_2_0_2_2_0 = unicode\"Moo é🚀M\";\n r_2_0_2_2.s_0 = r_2_0_2_2_0;\n }\n r_2_0_2.s_2 = r_2_0_2_2;\n }\n r_2_0[2] = r_2_0_2;\n }\n r_2[0] = r_2_0;\n }\n {\n S_3da469b1[] memory r_2_1 = new S_3da469b1[](0);\n r_2[1] = r_2_1;\n }\n {\n S_3da469b1[] memory r_2_2 = new S_3da469b1[](3);\n {\n S_3da469b1 memory r_2_2_0;\n {\n address r_2_2_0_0 = 0xD0544c2E6Ed87E644ce486595a4C88629416bA8a;\n r_2_2_0.s_0 = r_2_2_0_0;\n }\n {\n address r_2_2_0_1 = 0x226A20ffd0792E62Ca75D38838B5D88d693d8e9C;\n r_2_2_0.s_1 = r_2_2_0_1;\n }\n {\n S_97fc4627 memory r_2_2_0_2;\n {\n string memory r_2_2_0_2_0 = unicode\"Moo é🚀 oéMé oM Méoo o 🚀ooo M o oM🚀MoMoMooé 🚀oooM🚀éM🚀\";\n r_2_2_0_2.s_0 = r_2_2_0_2_0;\n }\n r_2_2_0.s_2 = r_2_2_0_2;\n }\n r_2_2[0] = r_2_2_0;\n }\n {\n S_3da469b1 memory r_2_2_1;\n {\n address r_2_2_1_0 = 0xBF1623AA8481F73634001eC7082C15243313555E;\n r_2_2_1.s_0 = r_2_2_1_0;\n }\n {\n address r_2_2_1_1 = 0x143d1848cC31400210EBe65D9e6674bcfcA67Af1;\n r_2_2_1.s_1 = r_2_2_1_1;\n }\n {\n S_97fc4627 memory r_2_2_1_2;\n {\n string memory r_2_2_1_2_0 = unicode\"Moo é🚀oMMooMM🚀é 🚀é 🚀🚀é éo oo 🚀 oé\";\n r_2_2_1_2.s_0 = r_2_2_1_2_0;\n }\n r_2_2_1.s_2 = r_2_2_1_2;\n }\n r_2_2[1] = r_2_2_1;\n }\n {\n S_3da469b1 memory r_2_2_2;\n {\n address r_2_2_2_0 = 0xD87579255E77B97b7c382444E196d721b2BD6CB1;\n r_2_2_2.s_0 = r_2_2_2_0;\n }\n {\n address r_2_2_2_1 = 0xeabef4f324C748e84e0AC9Fec0f82045547b8f03;\n r_2_2_2.s_1 = r_2_2_2_1;\n }\n {\n S_97fc4627 memory r_2_2_2_2;\n {\n string memory r_2_2_2_2_0 = unicode\"Moo é🚀MMMM M Mo🚀 M🚀oo🚀M o🚀 🚀🚀Mé oéoééM\";\n r_2_2_2_2.s_0 = r_2_2_2_2_0;\n }\n r_2_2_2.s_2 = r_2_2_2_2;\n }\n r_2_2[2] = r_2_2_2;\n }\n r_2[2] = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001180000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000007a00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000240000000000000000000000000dbaa9f6c2c943af353620bf5e93ddd477db1af22000000000000000000000000a1a551566239178188b85703f3f5a1d295ae2e5e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000294d6f6f20c3a9f09f9a804d6fc3a94d6f6f206f2020f09f9a804d6f6f6f6f4dc3a96f4dc3a9c3a9204d000000000000000000000000000000000000000000000000000000000000000000000038a8a89e4e4ccebd4917cecc82d83ca9ac482abc000000000000000000000000b3742eb0ca9af5dd64c3152a5ef7b9df60fd005700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a804df09f9a806f4d6fc3a96f6fc3a9f09f9a804dc3a96f4d204d4d6ff09f9a804d6fc3a9c3a96fc3a9f09f9a80c3a96f4dc3a96f6ff09f9a806f206fc3a920c3a9000000000000000000000000000000000000000000000000000000000000000000005a0ce98635b82adc0faf6e5dfbad7bf7f0b8aec8000000000000000000000000093c67f526eab597d6517d9a133815f8eee251f800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a80c3a96f6ff09f9a806f2020f09f9a806f6f6f6ff09f9a80f09f9a802020f09f9a80206fc3a9204d4d4d6f6f6f206f6f4dc3a90000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000a0489d70929fd1b9c6865b92c136635541c8cb6900000000000000000000000081845041ebc9cbc4238fbaac0c86d30a6987da6b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000dce6d2df2ca31b9d529c28d9a451dfcec49bc6e00000000000000000000000008b5b3b89ad2532c8bdfdf96b9136b73d2c6fcfa80000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a80c3a9206f206f6f2020c3a9202020c3a96f6f4d206f4d4d4d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000006244fcc2146522abe14697acd6da22eb1cbd332300000000000000000000000025892d288a5713a77f5cf4d283cac5c9d3c797f400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a80204df09f9a80c3a9c3a9f09f9a80f09f9a806fc3a94df09f9a806ff09f9a80f09f9a80f09f9a806f6ff09f9a806f4df09f9a80c3a9f09f9a80f09f9a80f09f9a806f206f4d00000000000000000000000000000000000000000000000000000000009ccda018d23888b2523a7237472d696f7c2f79a2000000000000000000000000bbe58fb119987540eed61ac24499a93bafa702a00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000194d6f6f20c3a9f09f9a80f09f9a806f6fc3a9c3a96fc3a96f4d000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001000000000000000000000000008bdfc210b432625378795889631e708af5ff9391000000000000000000000000d7b08636de609e1044af41c0d708cb38f0c787b000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a804d00000000000000000000000000000000000000000000000000000000000000000064c8c3de86c7f9be2b7acb71d846e67a303a93510000000000000000000000000aa51f27c1cff9e2322f4ce4fe96d7c8cd57faff0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a80c3a9f09f9a80c3a9f09f9a80f09f9a80c3a96ff09f9a806f6fc3a96f6f4dc3a9c3a9c3a9c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000007600000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000034000000000000000000000000079518af4820bc786291e6db5d75827f85ca2c91c000000000000000000000000f4d04949f8bf39acba095a882aca02f4eb44f7190000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000294d6f6f20c3a9f09f9a80c3a94d20c3a96f6f6ff09f9a80f09f9a806fc3a96ff09f9a80c3a94dc3a94d00000000000000000000000000000000000000000000000000000000000000000000009580c20e335d0eb256e1bda4df96745599ad21a6000000000000000000000000935b4c4e584406c0aea7f6fe68b921fcdb7233660000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a806f4d206f4d4dc3a9c3a96fc3a96ff09f9a806f4d6f6f4d6fc3a920000000000000000000000000000000000000000000000000000000000000000000000000000000bf47a79dd5a60d0fe0bde146462a93d67b27a5530000000000000000000000000da8c0fc2f289f956fb95659fc15d72f2e375ce90000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a80c3a96f20c3a96ff09f9a804d6f206ff09f9a80c3a94d6ff09f9a80f09f9a80f09f9a80f09f9a8020f09f9a80c3a9f09f9a804dc3a94d6f6f6f204dc3a9f09f9a806f6f6f6f4d6f6f4d6f6f6f4d0000000000000000000000000000000000000000002e4af8e44dad5f174e99beb699e6f20abd2b6bbd00000000000000000000000068db52f3787498511816a19ee85681002d8a5f3200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a804d6f6f206f4df09f9a806f6f6f6f4d4d6f000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000429d188580cae8099dba7ff250e53705602741bd0000000000000000000000003304b482e2cb937e5942271c937a8c1980630ddd00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000253263e258cbd887d4d7d1c3dc513370fdefb8ff000000000000000000000000eb840cd586adcac7136893aad2581d08d4a49a230000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a806f6ff09f9a80f09f9a80c3a900000000000000000000000000000000000000000000ebcddbb7bfcf7b9f127c9e1087f03fdc815dcb3d00000000000000000000000041df40f186250fd92127738acde6fa24f2327bc80000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a80c3a96fc3a9f09f9a806f4d6f6ff09f9a806f206f4dc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000220000000000000000000000000df475488b83aa6ad42aee5158e5169eb0844d99e00000000000000000000000017241029996d81228a586f5a12d304046c851f8800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000006867105052ff2d087403f7f74cab7dfa26fdc7cd0000000000000000000000001e69d214091a41f2afc131909f8dbfaa02d3e78a0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a80c3a9c3a9c3a9f09f9a804dc3a94d20c3a96ff09f9a80c3a96fc3a9204df09f9a804df09f9a80204d4d20f09f9a80c3a96f4d4d6f6f204d6f6f6fc3a94d6f4dc3a96f6f6f6f6ff09f9a806f4d0000000000000000000000000000000000000000000022c9537e69ec250c54ed6cf06f567e18b4b5a9be000000000000000000000000cdadad2c1ec46e74fe776554d2f6bb1e075c573c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a804d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000240000000000000000000000000d0544c2e6ed87e644ce486595a4c88629416ba8a000000000000000000000000226a20ffd0792e62ca75d38838b5d88d693d8e9c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a80206fc3a94dc3a9206f4d20204dc3a96f6f206f2020f09f9a806f6f6f2020204d20206f206f4df09f9a804d6f4d6f4d6f6fc3a920f09f9a806f6f6f4df09f9a80c3a94df09f9a80000000000000000000000000000000000000000000000000000000bf1623aa8481f73634001ec7082c15243313555e000000000000000000000000143d1848cc31400210ebe65d9e6674bcfca67af10000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a806f4d4d6f6f4d4df09f9a80c3a920f09f9a80c3a920f09f9a80f09f9a80c3a920c3a96f206f6f20f09f9a80206fc3a900000000000000000000000000000000000000d87579255e77b97b7c382444e196d721b2bd6cb1000000000000000000000000eabef4f324c748e84e0ac9fec0f82045547b8f030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a804d4d4d4d204d204d6ff09f9a80204df09f9a806f6ff09f9a804d206ff09f9a802020f09f9a80f09f9a804dc3a920206fc3a96fc3a9c3a94d000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,address[3],string,bool[3])", + "type": "(address,address[3],string,bool[3])", + "value": [ + "0xadCD7BF69bD0B891FD3C613d7A9aBa2cb1b77165", + [ + "0x0B8A6667525BAE6443d188d1b52c5F96C61D9fdc", + "0x8c00Ca88A08685959256C0Af9319cE3A972BB05B", + "0x4200F03403a1F43e4f39da7f2256138d1451CE2E" + ], + "Moo é🚀Mooo o éM🚀MM éooMoM🚀🚀M", + [true, false, true] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xadCD7BF69bD0B891FD3C613d7A9aBa2cb1b77165" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x0B8A6667525BAE6443d188d1b52c5F96C61D9fdc" + }, + { + "type": "address", + "value": "0x8c00Ca88A08685959256C0Af9319cE3A972BB05B" + }, + { + "type": "address", + "value": "0x4200F03403a1F43e4f39da7f2256138d1451CE2E" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Mooo o éM🚀MM éooMoM🚀🚀M" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102bb806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061019e565b60405180910390f35b610056610119565b61005e610119565b73adcd7bf69bd0b891fd3c613d7a9aba2cb1b77165815261007d610155565b730b8a6667525bae6443d188d1b52c5f96c61d9fdc8152738c00ca88a08685959256c0af9319ce3a972bb05b602080830191909152734200f03403a1f43e4f39da7f2256138d1451ce2e60408084019190915283820192909252815160608101909252602e80835260009291610258908301396040830152506100fe610155565b60018082526000602083015260408201526060820152919050565b604051806080016040528060006001600160a01b0316815260200161013c610155565b815260200160608152602001610150610155565b905290565b60405180606001604052806003906020820280368337509192915050565b8060005b60038110156101985781511515845260209384019390910190600101610177565b50505050565b6000602080835260018060a01b038085511682850152818501516040850160005b60038110156101de5782518416825291840191908401906001016101bf565b50505050604084015161010060a085015280518061012086015260005b8181101561021857828101840151868201610140015283016101fb565b8181111561022b57600061014083880101525b506060860151925061024060c0860184610173565b601f01601f1916939093016101400194935050505056fe4d6f6f20c3a9f09f9a804d6f6f6f206f20c3a94df09f9a804d4d20202020c3a96f6f4d6f4df09f9a80f09f9a804da2646970667358221220b8d33d18a32b7f377f0e836f07257cf6972923d917ef861af05cae3d4a782e8164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0902dc4a {\n address s_0;\n address[3] s_1;\n string s_2;\n bool[3] s_3;\n }\n\n function test () public pure returns (S_0902dc4a memory) {\n S_0902dc4a memory r;\n {\n address r_0 = 0xadCD7BF69bD0B891FD3C613d7A9aBa2cb1b77165;\n r.s_0 = r_0;\n }\n {\n address[3] memory r_1;\n {\n address r_1_0 = 0x0B8A6667525BAE6443d188d1b52c5F96C61D9fdc;\n r_1[0] = r_1_0;\n }\n {\n address r_1_1 = 0x8c00Ca88A08685959256C0Af9319cE3A972BB05B;\n r_1[1] = r_1_1;\n }\n {\n address r_1_2 = 0x4200F03403a1F43e4f39da7f2256138d1451CE2E;\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀Mooo o éM🚀MM éooMoM🚀🚀M\";\n r.s_2 = r_2;\n }\n {\n bool[3] memory r_3;\n {\n bool r_3_0 = true;\n r_3[0] = r_3_0;\n }\n {\n bool r_3_1 = false;\n r_3[1] = r_3_1;\n }\n {\n bool r_3_2 = true;\n r_3[2] = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000adcd7bf69bd0b891fd3c613d7a9aba2cb1b771650000000000000000000000000b8a6667525bae6443d188d1b52c5f96c61d9fdc0000000000000000000000008c00ca88a08685959256c0af9319ce3a972bb05b0000000000000000000000004200f03403a1f43e4f39da7f2256138d1451ce2e0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a804d6f6f6f206f20c3a94df09f9a804d4d20202020c3a96f6f4d6f4df09f9a80f09f9a804d000000000000000000000000000000000000" + }, + { + "name": "random-(address,bool,(address,bytes31[4],bytes31))", + "type": "(address,bool,(address,bytes31[4],bytes31))", + "value": [ + "0xe09ABCf299D88b8Fd16D88534aF1d0e34d8f9d58", + false, + [ + "0xEd5d52C085FdBFAAc442c428ee67E6Bb1A93b39d", + [ + "0x528513a40ac0253eda682e7cdcb9ba64baedfee29a1559660393a73fc7b700", + "0x5d574ca37bb0882fbf1388d6eb0df851703a78da3b382ee11d73b0231523d0", + "0xd64db072563b6678db7c66849c2c0fb0d1070b45f12055722e00cebe201926", + "0x3963b12a12d2cecd3b4618861580809ed5289326cecbfc42d53536204a6f30" + ], + "0x8b8e62474df6de7e022798978b48d40834b99ef356f4ab421b12b30fe7979b" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xe09ABCf299D88b8Fd16D88534aF1d0e34d8f9d58" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xEd5d52C085FdBFAAc442c428ee67E6Bb1A93b39d" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x528513a40ac0253eda682e7cdcb9ba64baedfee29a1559660393a73fc7b700" + }, + { + "type": "hexstring", + "value": "0x5d574ca37bb0882fbf1388d6eb0df851703a78da3b382ee11d73b0231523d0" + }, + { + "type": "hexstring", + "value": "0xd64db072563b6678db7c66849c2c0fb0d1070b45f12055722e00cebe201926" + }, + { + "type": "hexstring", + "value": "0x3963b12a12d2cecd3b4618861580809ed5289326cecbfc42d53536204a6f30" + } + ] + }, + { + "type": "hexstring", + "value": "0x8b8e62474df6de7e022798978b48d40834b99ef356f4ab421b12b30fe7979b" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610294806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101e6565b60405180910390f35b610056610174565b61005e610174565b73e09abcf299d88b8fd16d88534af1d0e34d8f9d58815260006020820152610084610198565b73ed5d52c085fdbfaac442c428ee67e6bb1a93b39d81526100a36101c8565b7f528513a40ac0253eda682e7cdcb9ba64baedfee29a1559660393a73fc7b7000081527f5d574ca37bb0882fbf1388d6eb0df851703a78da3b382ee11d73b0231523d0006020808301919091527fd64db072563b6678db7c66849c2c0fb0d1070b45f12055722e00cebe201926006040808401919091527f3963b12a12d2cecd3b4618861580809ed5289326cecbfc42d53536204a6f30006060840152908301919091527f8b8e62474df6de7e022798978b48d40834b99ef356f4ab421b12b30fe7979b0082820152820152919050565b6040805160608101825260008082526020820152908101610193610198565b905290565b604051806060016040528060006001600160a01b031681526020016101bb6101c8565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b81516001600160a01b039081168252602080840151151581840152604080850151805190931690840152818101516101008401929091906060850160005b600481101561024557845160ff191682529383019390830190600101610224565b505060ff1960408201511660e08601525050509291505056fea26469706673582212202f379a34f1797c35b8dcd9e66b29857f681308e740dee73dbde444539a741a2364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1cf3f50 {\n address s_0;\n bytes31[4] s_1;\n bytes31 s_2;\n }\n\n struct S_f62c5c04 {\n address s_0;\n bool s_1;\n S_c1cf3f50 s_2;\n }\n\n function test () public pure returns (S_f62c5c04 memory) {\n S_f62c5c04 memory r;\n {\n address r_0 = 0xe09ABCf299D88b8Fd16D88534aF1d0e34d8f9d58;\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n S_c1cf3f50 memory r_2;\n {\n address r_2_0 = 0xEd5d52C085FdBFAAc442c428ee67E6Bb1A93b39d;\n r_2.s_0 = r_2_0;\n }\n {\n bytes31[4] memory r_2_1;\n {\n bytes31 r_2_1_0 = bytes31(0x528513a40ac0253eda682e7cdcb9ba64baedfee29a1559660393a73fc7b700);\n r_2_1[0] = r_2_1_0;\n }\n {\n bytes31 r_2_1_1 = bytes31(0x5d574ca37bb0882fbf1388d6eb0df851703a78da3b382ee11d73b0231523d0);\n r_2_1[1] = r_2_1_1;\n }\n {\n bytes31 r_2_1_2 = bytes31(0xd64db072563b6678db7c66849c2c0fb0d1070b45f12055722e00cebe201926);\n r_2_1[2] = r_2_1_2;\n }\n {\n bytes31 r_2_1_3 = bytes31(0x3963b12a12d2cecd3b4618861580809ed5289326cecbfc42d53536204a6f30);\n r_2_1[3] = r_2_1_3;\n }\n r_2.s_1 = r_2_1;\n }\n {\n bytes31 r_2_2 = bytes31(0x8b8e62474df6de7e022798978b48d40834b99ef356f4ab421b12b30fe7979b);\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000e09abcf299d88b8fd16d88534af1d0e34d8f9d580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ed5d52c085fdbfaac442c428ee67e6bb1a93b39d528513a40ac0253eda682e7cdcb9ba64baedfee29a1559660393a73fc7b700005d574ca37bb0882fbf1388d6eb0df851703a78da3b382ee11d73b0231523d000d64db072563b6678db7c66849c2c0fb0d1070b45f12055722e00cebe201926003963b12a12d2cecd3b4618861580809ed5289326cecbfc42d53536204a6f30008b8e62474df6de7e022798978b48d40834b99ef356f4ab421b12b30fe7979b00" + }, + { + "name": "random-(address,bool,(string,address,address),uint160)", + "type": "(address,bool,(string,address,address),uint160)", + "value": [ + "0x26B12E324938361661B9bF9B362ab0A8248364f9", + true, + [ + "Moo é🚀🚀oMéé🚀Mé🚀 oééo", + "0x5cDD1B0a13028C678ae8232013e725a6d8Fa497a", + "0xDAC7DAf2Ce846097850770028864aC698857A19F" + ], + "131487646449837487408419117757168611056023111258" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x26B12E324938361661B9bF9B362ab0A8248364f9" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oMéé🚀Mé🚀 oééo" + }, + { + "type": "address", + "value": "0x5cDD1B0a13028C678ae8232013e725a6d8Fa497a" + }, + { + "type": "address", + "value": "0xDAC7DAf2Ce846097850770028864aC698857A19F" + } + ] + }, + { + "type": "number", + "value": "131487646449837487408419117757168611056023111258" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061026f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061015e565b60405180910390f35b610056610117565b61005e610117565b7326b12e324938361661b9bf9b362ab0a8248364f981526001602082015261009f604080516060808201835281526000602082018190529181019190915290565b600060405180606001604052806026815260200161021460269139825250735cdd1b0a13028c678ae8232013e725a6d8fa497a602082015273dac7daf2ce846097850770028864ac698857a19f6040808301919091528201527317081c2803026778d181e19208f79beb704a065a6060820152919050565b6040805160808101825260008082526020820152908101610151604080516060808201835281526000602082018190529181019190915290565b8152600060209091015290565b6000602080835260018060a01b038451168184015280840151151560408401526040840151608060608501528051606060a086015280518061010087015260005b818110156101bc578281018501518782016101200152840161019f565b818111156101cf57600061012083890101525b50928201516001600160a01b0390811660c0870152604090920151821660e08601525060609490940151909316608083015250610120601f909201601f191601019056fe4d6f6f20c3a9f09f9a80f09f9a806f4dc3a9c3a9f09f9a804dc3a9f09f9a80206fc3a9c3a96fa264697066735822122083f14d3d75e45f2d55f4ce2c114b99ef6285c242b5047397fb60d9fc9a2d899664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6ab35683 {\n string s_0;\n address s_1;\n address s_2;\n }\n\n struct S_887133a9 {\n address s_0;\n bool s_1;\n S_6ab35683 s_2;\n uint160 s_3;\n }\n\n function test () public pure returns (S_887133a9 memory) {\n S_887133a9 memory r;\n {\n address r_0 = 0x26B12E324938361661B9bF9B362ab0A8248364f9;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n S_6ab35683 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀🚀oMéé🚀Mé🚀 oééo\";\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0x5cDD1B0a13028C678ae8232013e725a6d8Fa497a;\n r_2.s_1 = r_2_1;\n }\n {\n address r_2_2 = 0xDAC7DAf2Ce846097850770028864aC698857A19F;\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n uint160 r_3 = 131487646449837487408419117757168611056023111258;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000026b12e324938361661b9bf9b362ab0a8248364f90000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000017081c2803026778d181e19208f79beb704a065a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000005cdd1b0a13028c678ae8232013e725a6d8fa497a000000000000000000000000dac7daf2ce846097850770028864ac698857a19f00000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a80f09f9a806f4dc3a9c3a9f09f9a804dc3a9f09f9a80206fc3a9c3a96f0000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,bool[3],address[],string)", + "type": "(address,bool[3],address[],string)", + "value": [ + "0xDA746E55dfd02B3b2be841542541d021EE56a1c1", + [false, true, true], + [ + "0x6972F4a2036292e64a038531e965987817C69BF5", + "0x8b16CCd05A825BAab14F23670955c62a0bC58CC2" + ], + "Moo é🚀🚀 oo🚀 🚀 🚀🚀oMMéoo🚀M 🚀 éo oM 🚀MMoo é oooé é" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xDA746E55dfd02B3b2be841542541d021EE56a1c1" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x6972F4a2036292e64a038531e965987817C69BF5" + }, + { + "type": "address", + "value": "0x8b16CCd05A825BAab14F23670955c62a0bC58CC2" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀 oo🚀 🚀 🚀🚀oMMéoo🚀M 🚀 éo oM 🚀MMoo é oooé é" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610390806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061026f565b60405180910390f35b610056610189565b61005e610189565b73da746e55dfd02b3b2be841542541d021ee56a1c1815261007d6101c0565b600080825260016020808401829052604080850192909252840192909252815160028082526060820190935290918160200160208202803683370190505090506000736972f4a2036292e64a038531e965987817c69bf5905080826000815181106100ea576100ea6102f3565b60200260200101906001600160a01b031690816001600160a01b031681525050506000738b16ccd05a825baab14f23670955c62a0bc58cc290508082600181518110610138576101386102f3565b60200260200101906001600160a01b031690816001600160a01b0316815250505080826040018190525050600060405180608001604052806051815260200161030a60519139606083015250919050565b604051806080016040528060006001600160a01b031681526020016101ac6101c0565b815260200160608152602001606081525090565b60405180606001604052806003906020820280368337509192915050565b600081518084526020808501945080840160005b838110156102175781516001600160a01b0316875295820195908201906001016101f2565b509495945050505050565b6000815180845260005b818110156102485760208185018101518683018201520161022c565b8181111561025a576000602083870101525b50601f01601f19169290920160200192915050565b602080825282516001600160a01b031682820152828101516000919060408401835b60038110156102b0578251151582529183019190830190600101610291565b50505050604083015160c060a08401526102cd60e08401826101de565b90506060840151601f198483030160c08501526102ea8282610222565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a80206f6ff09f9a8020f09f9a8020f09f9a80f09f9a806f4d4dc3a96f6ff09f9a804d20f09f9a802020c3a96f206f4d20f09f9a804d4d6f6f20c3a9206f6f6fc3a920c3a9a26469706673582212203e6c40360f23879ba790c6aa25733e85c573d39bf9aeadf76b16e3541156bf0664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f50800b0 {\n address s_0;\n bool[3] s_1;\n address[] s_2;\n string s_3;\n }\n\n function test () public pure returns (S_f50800b0 memory) {\n S_f50800b0 memory r;\n {\n address r_0 = 0xDA746E55dfd02B3b2be841542541d021EE56a1c1;\n r.s_0 = r_0;\n }\n {\n bool[3] memory r_1;\n {\n bool r_1_0 = false;\n r_1[0] = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1[1] = r_1_1;\n }\n {\n bool r_1_2 = true;\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n address[] memory r_2 = new address[](2);\n {\n address r_2_0 = 0x6972F4a2036292e64a038531e965987817C69BF5;\n r_2[0] = r_2_0;\n }\n {\n address r_2_1 = 0x8b16CCd05A825BAab14F23670955c62a0bC58CC2;\n r_2[1] = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀🚀 oo🚀 🚀 🚀🚀oMMéoo🚀M 🚀 éo oM 🚀MMoo é oooé é\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000da746e55dfd02b3b2be841542541d021ee56a1c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000020000000000000000000000006972f4a2036292e64a038531e965987817c69bf50000000000000000000000008b16ccd05a825baab14f23670955c62a0bc58cc200000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a80f09f9a80206f6ff09f9a8020f09f9a8020f09f9a80f09f9a806f4d4dc3a96f6ff09f9a804d20f09f9a802020c3a96f206f4d20f09f9a804d4d6f6f20c3a9206f6f6fc3a920c3a9000000000000000000000000000000" + }, + { + "name": "random-(address,bytes10,string,address,uint8)[3]", + "type": "(address,bytes10,string,address,uint8)[3]", + "value": [ + [ + "0x123bF02F083e3b4991e933904a477c105EdDEA35", + "0x6be3e5bf82d74299a823", + "Moo é🚀 Mo oM🚀🚀é🚀o 🚀 éééM🚀🚀M🚀 oMoéo Méo🚀éM oo🚀éoMM", + "0xA6994b017cCFe0982702f14367fCEC0D6d449dab", + "162" + ], + [ + "0xBe8961f236cf50E28f3448AAF7e7ca14E2f8D5F8", + "0xdd12652e950645f95b18", + "Moo é🚀oo o 🚀🚀MéM éooéMM🚀🚀 éoé🚀é🚀Mo é🚀 🚀oé", + "0x16aA3b09ed0b0087Bd9B89C01b7fb92189a0cd70", + "89" + ], + [ + "0x120aAa3D2E6afE7Ff7e2ad2Aef52AcFc8aEeFC54", + "0xf0ff07378c64f9a02177", + "Moo é🚀éMéM", + "0x66d43912F418E9fD045f21B6DCC5F567db532820", + "248" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x123bF02F083e3b4991e933904a477c105EdDEA35" + }, + { + "type": "hexstring", + "value": "0x6be3e5bf82d74299a823" + }, + { + "type": "string", + "value": "Moo é🚀 Mo oM🚀🚀é🚀o 🚀 éééM🚀🚀M🚀 oMoéo Méo🚀éM oo🚀éoMM" + }, + { + "type": "address", + "value": "0xA6994b017cCFe0982702f14367fCEC0D6d449dab" + }, + { + "type": "number", + "value": "162" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xBe8961f236cf50E28f3448AAF7e7ca14E2f8D5F8" + }, + { + "type": "hexstring", + "value": "0xdd12652e950645f95b18" + }, + { + "type": "string", + "value": "Moo é🚀oo o 🚀🚀MéM éooéMM🚀🚀 éoé🚀é🚀Mo é🚀 🚀oé" + }, + { + "type": "address", + "value": "0x16aA3b09ed0b0087Bd9B89C01b7fb92189a0cd70" + }, + { + "type": "number", + "value": "89" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x120aAa3D2E6afE7Ff7e2ad2Aef52AcFc8aEeFC54" + }, + { + "type": "hexstring", + "value": "0xf0ff07378c64f9a02177" + }, + { + "type": "string", + "value": "Moo é🚀éMéM" + }, + { + "type": "address", + "value": "0x66d43912F418E9fD045f21B6DCC5F567db532820" + }, + { + "type": "number", + "value": "248" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610404806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061023d565b60405180910390f35b6100566101e1565b61005e6101e1565b61006661020e565b73123bf02f083e3b4991e933904a477c105eddea358152696be3e5bf82d74299a82360b01b602080830191909152604080516080810190915260598082526000926103289083013960408301525073a6994b017ccfe0982702f14367fcec0d6d449dab606082015260a2608082015281526100df61020e565b73be8961f236cf50e28f3448aaf7e7ca14e2f8d5f88152691ba24ca5d2a0c8bf2b6360b31b6020808301919091526040805160808101909152604e808252600092610381908301396040830152507316aa3b09ed0b0087bd9b89c01b7fb92189a0cd70606082015260596080820152602082015261015b61020e565b73120aaa3d2e6afe7ff7e2ad2aef52acfc8aeefc54815269f0ff07378c64f9a0217760b01b602080830191909152604080518082018252601081526f4d6f6f20c3a9f09f9a80c3a94dc3a94d60801b92810192909252808301919091527366d43912f418e9fd045f21b6dcc5f567db532820606083015260f86080830152820152919050565b60405180606001604052806003905b6101f861020e565b8152602001906001900390816101f05790505090565b6040805160a0810182526000808252602082018190526060928201839052918101829052608081019190915290565b602080825260009060808382018185018685805b600381101561031957601f1989850381018652835180516001600160a01b03168652888101516001600160b01b0319168987015260408082015160a091880182905280519188018290528591905b818310156102bd578083018c015189840160c00152918b019161029f565b50808211156102cf578560c0828a0101525b60609150818301516102eb838a01826001600160a01b03169052565b509189015160ff8116888b015291978a0197601f019092169590950160c00194505091860191600101610251565b50919897505050505050505056fe4d6f6f20c3a9f09f9a80204d6f206f4df09f9a80f09f9a80c3a9f09f9a806f20f09f9a8020c3a9c3a9c3a94df09f9a80f09f9a804df09f9a80206f4d6fc3a96f204dc3a96ff09f9a80c3a94d20206f6ff09f9a80c3a96f4d4d4d6f6f20c3a9f09f9a806f6f206f20f09f9a80f09f9a804dc3a94d20c3a96f6fc3a94d4df09f9a80f09f9a8020c3a96fc3a9f09f9a80c3a9f09f9a804d6f20c3a9f09f9a802020f09f9a806fc3a9a26469706673582212206d628c98e4a098a5f7aa50ff570bc2520dc260090b70067472c21721237ad25064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c962273a {\n address s_0;\n bytes10 s_1;\n string s_2;\n address s_3;\n uint8 s_4;\n }\n\n function test () public pure returns (S_c962273a[3] memory) {\n S_c962273a[3] memory r;\n {\n S_c962273a memory r_0;\n {\n address r_0_0 = 0x123bF02F083e3b4991e933904a477c105EdDEA35;\n r_0.s_0 = r_0_0;\n }\n {\n bytes10 r_0_1 = bytes10(0x6be3e5bf82d74299a823);\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀 Mo oM🚀🚀é🚀o 🚀 éééM🚀🚀M🚀 oMoéo Méo🚀éM oo🚀éoMM\";\n r_0.s_2 = r_0_2;\n }\n {\n address r_0_3 = 0xA6994b017cCFe0982702f14367fCEC0D6d449dab;\n r_0.s_3 = r_0_3;\n }\n {\n uint8 r_0_4 = 162;\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_c962273a memory r_1;\n {\n address r_1_0 = 0xBe8961f236cf50E28f3448AAF7e7ca14E2f8D5F8;\n r_1.s_0 = r_1_0;\n }\n {\n bytes10 r_1_1 = bytes10(0xdd12652e950645f95b18);\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀oo o 🚀🚀MéM éooéMM🚀🚀 éoé🚀é🚀Mo é🚀 🚀oé\";\n r_1.s_2 = r_1_2;\n }\n {\n address r_1_3 = 0x16aA3b09ed0b0087Bd9B89C01b7fb92189a0cd70;\n r_1.s_3 = r_1_3;\n }\n {\n uint8 r_1_4 = 89;\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n {\n S_c962273a memory r_2;\n {\n address r_2_0 = 0x120aAa3D2E6afE7Ff7e2ad2Aef52AcFc8aEeFC54;\n r_2.s_0 = r_2_0;\n }\n {\n bytes10 r_2_1 = bytes10(0xf0ff07378c64f9a02177);\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀éMéM\";\n r_2.s_2 = r_2_2;\n }\n {\n address r_2_3 = 0x66d43912F418E9fD045f21B6DCC5F567db532820;\n r_2.s_3 = r_2_3;\n }\n {\n uint8 r_2_4 = 248;\n r_2.s_4 = r_2_4;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000123bf02f083e3b4991e933904a477c105eddea356be3e5bf82d74299a8230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a6994b017ccfe0982702f14367fcec0d6d449dab00000000000000000000000000000000000000000000000000000000000000a200000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a80204d6f206f4df09f9a80f09f9a80c3a9f09f9a806f20f09f9a8020c3a9c3a9c3a94df09f9a80f09f9a804df09f9a80206f4d6fc3a96f204dc3a96ff09f9a80c3a94d20206f6ff09f9a80c3a96f4d4d00000000000000000000000000000000000000be8961f236cf50e28f3448aaf7e7ca14e2f8d5f8dd12652e950645f95b180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000016aa3b09ed0b0087bd9b89c01b7fb92189a0cd700000000000000000000000000000000000000000000000000000000000000059000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a806f6f206f20f09f9a80f09f9a804dc3a94d20c3a96f6fc3a94d4df09f9a80f09f9a8020c3a96fc3a9f09f9a80c3a9f09f9a804d6f20c3a9f09f9a802020f09f9a806fc3a9000000000000000000000000000000000000000000000000000000000000120aaa3d2e6afe7ff7e2ad2aef52acfc8aeefc54f0ff07378c64f9a021770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000066d43912f418e9fd045f21b6dcc5f567db53282000000000000000000000000000000000000000000000000000000000000000f800000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a80c3a94dc3a94d00000000000000000000000000000000" + }, + { + "name": "random-(address,bytes25,bool,int120,address[])", + "type": "(address,bytes25,bool,int120,address[])", + "value": [ + "0x51ab601ec8EF720bC0d05ec5A71D2478B394f734", + "0x53a350b47187f5f5196f2864cf69115987b43956656a4d0412", + false, + "554735788168077247863183101157179703", + [] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x51ab601ec8EF720bC0d05ec5A71D2478B394f734" + }, + { + "type": "hexstring", + "value": "0x53a350b47187f5f5196f2864cf69115987b43956656a4d0412" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "554735788168077247863183101157179703" + }, + { + "type": "array", + "value": [] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101b0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6040805160a080820183526000808352602080840182905283850182905260608085018390526080948501819052855193840186528386018390529383018481527351ab601ec8ef720bc0d05ec5a71d2478b394f73484527f53a350b47187f5f5196f2864cf69115987b43956656a4d041200000000000000848301526e6ad6960425f4ece71b7eed083401379484019490945284519182528101845290915290516100dc91906100e5565b60405180910390f35b6000602080835260c0830160018060a01b03808651168386015266ffffffffffffff19838701511660408601526040860151151560608601526060860151600e0b6080860152608086015160a08087015282815180855260e0880191508583019450600092505b8083101561016e5784518416825293850193600192909201919085019061014c565b5097965050505050505056fea2646970667358221220b6b51ab5756775fd13270940dc99f699e7eef0b01cd0041de918335a1af3130764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_283fe536 {\n address s_0;\n bytes25 s_1;\n bool s_2;\n int120 s_3;\n address[] s_4;\n }\n\n function test () public pure returns (S_283fe536 memory) {\n S_283fe536 memory r;\n {\n address r_0 = 0x51ab601ec8EF720bC0d05ec5A71D2478B394f734;\n r.s_0 = r_0;\n }\n {\n bytes25 r_1 = bytes25(0x53a350b47187f5f5196f2864cf69115987b43956656a4d0412);\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n int120 r_3 = 554735788168077247863183101157179703;\n r.s_3 = r_3;\n }\n {\n address[] memory r_4 = new address[](0);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000051ab601ec8ef720bc0d05ec5a71d2478b394f73453a350b47187f5f5196f2864cf69115987b43956656a4d041200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ad6960425f4ece71b7eed0834013700000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,string,(bytes18[1]),uint72,uint32)", + "type": "(address,string,(bytes18[1]),uint72,uint32)", + "value": [ + "0x14B5C1E204d805977C68967ee1877533F91C41d3", + "Moo é🚀🚀 o Méo🚀éo", + [["0xa374aa49e08ee1f256ab15efa58d173f9aed"]], + "3418394330413995656611", + "3136413634" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x14B5C1E204d805977C68967ee1877533F91C41d3" + }, + { + "type": "string", + "value": "Moo é🚀🚀 o Méo🚀éo" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xa374aa49e08ee1f256ab15efa58d173f9aed" + } + ] + } + ] + }, + { + "type": "number", + "value": "3418394330413995656611" + }, + { + "type": "number", + "value": "3136413634" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610289806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101a4565b60405180910390f35b6100566100fd565b61005e6100fd565b7314b5c1e204d805977c68967ee1877533f91c41d3815260408051808201909152601c81527f4d6f6f20c3a9f09f9a80f09f9a80206f204dc3a96ff09f9a80c3a96f000000006020808301919091528201526100b8610131565b6100c0610149565b71a374aa49e08ee1f256ab15efa58d173f9aed60701b81528152604082015268b94fc04c15078005a3606082015263baf1dfc26080820152919050565b6040805160a081018252600081526060602082015290810161011d610131565b815260006020820181905260409091015290565b6040518060200160405280610144610149565b905290565b60405180602001604052806001906020820280368337509192915050565b80518260005b600181101561019d5782516dffffffffffffffffffffffffffff191682526020928301929091019060010161016d565b5050505050565b6000602080835260018060a01b03845116818401528084015160a0604085015280518060c086015260005b818110156101eb5782810184015186820160e0015283016101cf565b818111156101fd57600060e083880101525b50604086015192506102126060860184610167565b606086015168ffffffffffffffffff811660808701529250608086015163ffffffff811660a08701529250601f01601f19169390930160e00194935050505056fea26469706673582212206e0bd4fad7049c5c32f2fa4e602ed8beaa080813e9d97ff685ef62a13124183464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d17fe8e2 {\n bytes18[1] s_0;\n }\n\n struct S_8838ae24 {\n address s_0;\n string s_1;\n S_d17fe8e2 s_2;\n uint72 s_3;\n uint32 s_4;\n }\n\n function test () public pure returns (S_8838ae24 memory) {\n S_8838ae24 memory r;\n {\n address r_0 = 0x14B5C1E204d805977C68967ee1877533F91C41d3;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀🚀 o Méo🚀éo\";\n r.s_1 = r_1;\n }\n {\n S_d17fe8e2 memory r_2;\n {\n bytes18[1] memory r_2_0;\n {\n bytes18 r_2_0_0 = bytes18(0xa374aa49e08ee1f256ab15efa58d173f9aed);\n r_2_0[0] = r_2_0_0;\n }\n r_2.s_0 = r_2_0;\n }\n r.s_2 = r_2;\n }\n {\n uint72 r_3 = 3418394330413995656611;\n r.s_3 = r_3;\n }\n {\n uint32 r_4 = 3136413634;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000014b5c1e204d805977c68967ee1877533f91c41d300000000000000000000000000000000000000000000000000000000000000a0a374aa49e08ee1f256ab15efa58d173f9aed00000000000000000000000000000000000000000000000000000000000000000000000000b94fc04c15078005a300000000000000000000000000000000000000000000000000000000baf1dfc2000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80f09f9a80206f204dc3a96ff09f9a80c3a96f00000000" + }, + { + "name": "random-(address,string[3],bytes16,address,address)", + "type": "(address,string[3],bytes16,address,address)", + "value": [ + "0xF2be99A82Dc13eeca37B9eA2a53459DeB5848607", + [ + "Moo é🚀oéé🚀Mo é o🚀oéo🚀éMoéo🚀ooo ééMoé éoéooéo oo🚀o🚀MoéM🚀o oéoo ", + "Moo é🚀oéo🚀🚀é🚀Mééé🚀MMoooMMMo M éMo oMMo éoo o🚀oé🚀ééMoo🚀éM", + "Moo é🚀M 🚀🚀Mé🚀 M éMoM o oo🚀MoMo éoé" + ], + "0xcb854db99c35fc524ae81db52f5f40d4", + "0xE5cBEcD983F60dCF8B94B5681eb7A786898CFBc0", + "0xe5Eafd03972a640BB67b028194b47C2eff4642f4" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xF2be99A82Dc13eeca37B9eA2a53459DeB5848607" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéé🚀Mo é o🚀oéo🚀éMoéo🚀ooo ééMoé éoéooéo oo🚀o🚀MoéM🚀o oéoo " + }, + { + "type": "string", + "value": "Moo é🚀oéo🚀🚀é🚀Mééé🚀MMoooMMMo M éMo oMMo éoo o🚀oé🚀ééMoo🚀éM" + }, + { + "type": "string", + "value": "Moo é🚀M 🚀🚀Mé🚀 M éMoM o oo🚀MoMo éoé" + } + ] + }, + { + "type": "hexstring", + "value": "0xcb854db99c35fc524ae81db52f5f40d4" + }, + { + "type": "address", + "value": "0xE5cBEcD983F60dCF8B94B5681eb7A786898CFBc0" + }, + { + "type": "address", + "value": "0xe5Eafd03972a640BB67b028194b47C2eff4642f4" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103c7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101a9565b60405180910390f35b610056610144565b61005e610144565b73f2be99a82dc13eeca37b9ea2a53459deb5848607815261007d610182565b60006040518060a0016040528060668152602001610298606691398252506040805160808101909152605d80825260009190610335602083013990508082600160200201819052505060006040518060600160405280603781526020016102fe603791396040808401919091526020840192909252506f32e1536e670d7f1492ba076d4bd7d03560821b9082015273e5cbecd983f60dcf8b94b5681eb7a786898cfbc0606082015273e5eafd03972a640bb67b028194b47c2eff4642f46080820152919050565b6040518060a0016040528060006001600160a01b03168152602001610167610182565b81526000602082018190526040820181905260609091015290565b60405180606001604052806003905b60608152602001906001900390816101915790505090565b602080825282516001600160a01b0316828201528281015160a060408401526000919061012084019060c0850184805b600381101561023f5787850360bf1901835283518051808752835b8181101561020f578281018901518882018a015288016101f4565b8181111561021f578489838a0101525b50601f01601f1916959095018601945092850192918501916001016101d9565b5050505060408501516fffffffffffffffffffffffffffffffff1981166060860152915060608501516001600160a01b0381166080860152915060808501516001600160a01b03811660a0860152915094935050505056fe4d6f6f20c3a9f09f9a806fc3a9c3a9f09f9a804d6f20c3a9206ff09f9a806fc3a96ff09f9a80c3a94d6fc3a96ff09f9a806f6f6f20c3a9c3a94d6fc3a920c3a96fc3a96f6fc3a96f20206f6ff09f9a806ff09f9a804d6fc3a94df09f9a806f206fc3a96f6f204d6f6f20c3a9f09f9a804d20f09f9a80f09f9a804dc3a9f09f9a8020204d20c3a94d6f4d206f206f6ff09f9a804d6f4d6f20c3a96fc3a94d6f6f20c3a9f09f9a806fc3a96ff09f9a80f09f9a80c3a9f09f9a804dc3a9c3a9c3a9f09f9a804d4d6f6f6f4d4d4d6f204d2020c3a94d6f206f4d4d6f20c3a96f6f206ff09f9a806fc3a9f09f9a80c3a9c3a94d6f6ff09f9a80c3a94da2646970667358221220f905beab0e4b88a853005ae695f96fbfa0c0eedfb4352aeafefd83a297c2e5a364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_abc7652a {\n address s_0;\n string[3] s_1;\n bytes16 s_2;\n address s_3;\n address s_4;\n }\n\n function test () public pure returns (S_abc7652a memory) {\n S_abc7652a memory r;\n {\n address r_0 = 0xF2be99A82Dc13eeca37B9eA2a53459DeB5848607;\n r.s_0 = r_0;\n }\n {\n string[3] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀oéé🚀Mo é o🚀oéo🚀éMoéo🚀ooo ééMoé éoéooéo oo🚀o🚀MoéM🚀o oéoo \";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀oéo🚀🚀é🚀Mééé🚀MMoooMMMo M éMo oMMo éoo o🚀oé🚀ééMoo🚀éM\";\n r_1[1] = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀M 🚀🚀Mé🚀 M éMoM o oo🚀MoMo éoé\";\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n bytes16 r_2 = bytes16(0xcb854db99c35fc524ae81db52f5f40d4);\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xE5cBEcD983F60dCF8B94B5681eb7A786898CFBc0;\n r.s_3 = r_3;\n }\n {\n address r_4 = 0xe5Eafd03972a640BB67b028194b47C2eff4642f4;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f2be99a82dc13eeca37b9ea2a53459deb584860700000000000000000000000000000000000000000000000000000000000000a0cb854db99c35fc524ae81db52f5f40d400000000000000000000000000000000000000000000000000000000e5cbecd983f60dcf8b94b5681eb7a786898cfbc0000000000000000000000000e5eafd03972a640bb67b028194b47c2eff4642f400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000664d6f6f20c3a9f09f9a806fc3a9c3a9f09f9a804d6f20c3a9206ff09f9a806fc3a96ff09f9a80c3a94d6fc3a96ff09f9a806f6f6f20c3a9c3a94d6fc3a920c3a96fc3a96f6fc3a96f20206f6ff09f9a806ff09f9a804d6fc3a94df09f9a806f206fc3a96f6f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a806fc3a96ff09f9a80f09f9a80c3a9f09f9a804dc3a9c3a9c3a9f09f9a804d4d6f6f6f4d4d4d6f204d2020c3a94d6f206f4d4d6f20c3a96f6f206ff09f9a806fc3a9f09f9a80c3a9c3a94d6f6ff09f9a80c3a94d00000000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a804d20f09f9a80f09f9a804dc3a9f09f9a8020204d20c3a94d6f4d206f206f6ff09f9a804d6f4d6f20c3a96fc3a9000000000000000000" + }, + { + "name": "random-(address[1],address,bool,bool[4])", + "type": "(address[1],address,bool,bool[4])", + "value": [ + ["0x9177C2062362938D582f771Bd7700043f44730A4"], + "0x72541242b3B98bd01f486676E6a02941E4015d90", + true, + [false, true, false, false] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x9177C2062362938D582f771Bd7700043f44730A4" + } + ] + }, + { + "type": "address", + "value": "0x72541242b3B98bd01f486676E6a02941E4015d90" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101fb806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061013b565b60405180910390f35b6100566100cc565b61005e6100cc565b6100666100ff565b739177c2062362938d582f771bd7700043f44730a4815281527372541242b3b98bd01f486676e6a02941e4015d906020820152600160408201526100a861011d565b60008082526001602083015260408201819052606080830191909152820152919050565b60405180608001604052806100df6100ff565b815260006020820181905260408201526060016100fa61011d565b905290565b60405180602001604052806001906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b815160e08201908260005b600181101561016e5782516001600160a01b0316825260209283019290910190600101610146565b5050506020838101516001600160a01b03168382015260408085015115159084015260608085015190840160005b60048110156101bb57825115158252918301919083019060010161019c565b505050509291505056fea2646970667358221220595670405264d1b11fd866d80cb36ba3b06f8aff91544abea23977272479216f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6694875e {\n address[1] s_0;\n address s_1;\n bool s_2;\n bool[4] s_3;\n }\n\n function test () public pure returns (S_6694875e memory) {\n S_6694875e memory r;\n {\n address[1] memory r_0;\n {\n address r_0_0 = 0x9177C2062362938D582f771Bd7700043f44730A4;\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x72541242b3B98bd01f486676E6a02941E4015d90;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n bool[4] memory r_3;\n {\n bool r_3_0 = false;\n r_3[0] = r_3_0;\n }\n {\n bool r_3_1 = true;\n r_3[1] = r_3_1;\n }\n {\n bool r_3_2 = false;\n r_3[2] = r_3_2;\n }\n {\n bool r_3_3 = false;\n r_3[3] = r_3_3;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000009177c2062362938d582f771bd7700043f44730a400000000000000000000000072541242b3b98bd01f486676e6a02941e4015d9000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address[2],bytes22,bool,bytes14)[1]", + "type": "(address[2],bytes22,bool,bytes14)[1]", + "value": [ + [ + [ + "0x2cACb0d0aBC704BAbD4BE23767DBD42A25EDdEfC", + "0x9D91c60b77Ba8d7066344dfACa5feAA3f418FEdd" + ], + "0x9aeb442c4729ca0d8fe60262e53bbfb5796b05922402", + false, + "0x4a56a8f29f9b129b2f4329706e08" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x2cACb0d0aBC704BAbD4BE23767DBD42A25EDdEfC" + }, + { + "type": "address", + "value": "0x9D91c60b77Ba8d7066344dfACa5feAA3f418FEdd" + } + ] + }, + { + "type": "hexstring", + "value": "0x9aeb442c4729ca0d8fe60262e53bbfb5796b05922402" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x4a56a8f29f9b129b2f4329706e08" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610249806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610162565b60405180910390f35b6100566100e9565b61005e6100e9565b610066610116565b61006e610144565b732cacb0d0abc704babd4be23767dbd42a25eddefc8152739d91c60b77ba8d7066344dfaca5feaa3f418fedd602080830191909152908252754d75a2162394e506c7f30131729ddfdabcb582c9120160511b90820152600060408201526d094ad51e53f3625365e8652e0dc160931b60608201528152919050565b60405180602001604052806001905b610100610116565b8152602001906001900390816100f85790505090565b6040518060800160405280610129610144565b81526000602082018190526040820181905260609091015290565b60405180604001604052806002906020820280368337509192915050565b60a08181019082846000805b600180821061017d5750610208565b8351805186855b60028110156101ab5782516001600160a01b03168252602092830192909101908401610184565b50505060208181015169ffffffffffffffffffff191660408881019190915282015115156060808901919091529091015171ffffffffffffffffffffffffffffffffffff191660808701529486019493909301925060010161016e565b50505050509291505056fea2646970667358221220a8db60922c8954097ff57c14637c3ed6b86dc2a7e3cd7b078d3bcab73be2642a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8351ec4e {\n address[2] s_0;\n bytes22 s_1;\n bool s_2;\n bytes14 s_3;\n }\n\n function test () public pure returns (S_8351ec4e[1] memory) {\n S_8351ec4e[1] memory r;\n {\n S_8351ec4e memory r_0;\n {\n address[2] memory r_0_0;\n {\n address r_0_0_0 = 0x2cACb0d0aBC704BAbD4BE23767DBD42A25EDdEfC;\n r_0_0[0] = r_0_0_0;\n }\n {\n address r_0_0_1 = 0x9D91c60b77Ba8d7066344dfACa5feAA3f418FEdd;\n r_0_0[1] = r_0_0_1;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bytes22 r_0_1 = bytes22(0x9aeb442c4729ca0d8fe60262e53bbfb5796b05922402);\n r_0.s_1 = r_0_1;\n }\n {\n bool r_0_2 = false;\n r_0.s_2 = r_0_2;\n }\n {\n bytes14 r_0_3 = bytes14(0x4a56a8f29f9b129b2f4329706e08);\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000002cacb0d0abc704babd4be23767dbd42a25eddefc0000000000000000000000009d91c60b77ba8d7066344dfaca5feaa3f418fedd9aeb442c4729ca0d8fe60262e53bbfb5796b059224020000000000000000000000000000000000000000000000000000000000000000000000000000000000004a56a8f29f9b129b2f4329706e08000000000000000000000000000000000000" + }, + { + "name": "random-(bool,((bool,bytes31,address)),bool,(address))", + "type": "(bool,((bool,bytes31,address)),bool,(address))", + "value": [ + true, + [ + [ + false, + "0xfb0088422156546acd2894f1ad3688c07ec97233b081b58655890902aface6", + "0xd7aEaa4784bdA90a2e476CB726d1125A880af884" + ] + ], + true, + ["0xD19f4C2A7Afa063D3FED02D1aFB0A9fACA87Bc51"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xfb0088422156546acd2894f1ad3688c07ec97233b081b58655890902aface6" + }, + { + "type": "address", + "value": "0xd7aEaa4784bdA90a2e476CB726d1125A880af884" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xD19f4C2A7Afa063D3FED02D1aFB0A9fACA87Bc51" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101e5806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b610038610097565b604080518251151581526020808401515180511515828401529081015160ff1916828401528201516001600160a01b0390811660608084019190915292840151151560808301529190920151511660a082015260c00160405180910390f35b61009f610156565b6100a7610156565b600181526040805160808101825260006020820181815292820181905260608201529081526040805160608082018352600082527ffb0088422156546acd2894f1ad3688c07ec97233b081b58655890902aface60060208084019190915273d7aeaa4784bda90a2e476cb726d1125a880af8848385015291845284820193909352600184830152815190810190915273d19f4c2a7afa063d3fed02d1afb0a9faca87bc51815290820152919050565b604051806080016040528060001515815260200161019160408051608081018252600060208201818152928201819052606082015290815290565b8152600060208083018290526040805191820181529181529101529056fea264697066735822122062274087603249d43e4bfbf5b43ee58610167a2a97bb3539163fbec35390c42b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5be0f37a {\n bool s_0;\n bytes31 s_1;\n address s_2;\n }\n\n struct S_9805bf1d {\n S_5be0f37a s_0;\n }\n\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_75455d87 {\n bool s_0;\n S_9805bf1d s_1;\n bool s_2;\n S_421683f8 s_3;\n }\n\n function test () public pure returns (S_75455d87 memory) {\n S_75455d87 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n S_9805bf1d memory r_1;\n {\n S_5be0f37a memory r_1_0;\n {\n bool r_1_0_0 = false;\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bytes31 r_1_0_1 = bytes31(0xfb0088422156546acd2894f1ad3688c07ec97233b081b58655890902aface6);\n r_1_0.s_1 = r_1_0_1;\n }\n {\n address r_1_0_2 = 0xd7aEaa4784bdA90a2e476CB726d1125A880af884;\n r_1_0.s_2 = r_1_0_2;\n }\n r_1.s_0 = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n S_421683f8 memory r_3;\n {\n address r_3_0 = 0xD19f4C2A7Afa063D3FED02D1aFB0A9fACA87Bc51;\n r_3.s_0 = r_3_0;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000fb0088422156546acd2894f1ad3688c07ec97233b081b58655890902aface600000000000000000000000000d7aeaa4784bda90a2e476cb726d1125a880af8840000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d19f4c2a7afa063d3fed02d1afb0a9faca87bc51" + }, + { + "name": "random-(bool,bool,bool,address,bytes9[1])", + "type": "(bool,bool,bool,address,bytes9[1])", + "value": [ + false, + true, + true, + "0xB4C5f4dd8E888A6679cbDF02a9d97894c8783412", + ["0xea8c9b0d4213f75c60"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xB4C5f4dd8E888A6679cbDF02a9d97894c8783412" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xea8c9b0d4213f75c60" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101a7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100fe565b60405180910390f35b6100566100ab565b61005e6100ab565b60008152600160208201819052604082015273b4c5f4dd8e888a6679cbdf02a9d97894c878341260608201526100926100e0565b68075464d86a109fbae360bd1b81526080820152919050565b6040805160a0810182526000808252602082018190529181018290526060810191909152608081016100db6100e0565b905290565b60405180602001604052806001906020820280368337509192915050565b8151151581526020808301511515818301526040808401511515908301526060808401516001600160a01b03169083015260808084015160a084019291840160005b60018110156101675782516001600160b81b03191682529183019190830190600101610140565b505050509291505056fea2646970667358221220f6e1b695a0da886bc3376d6ac40baa39075ab25de4ae6597dc24317017bdee3164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0f559a61 {\n bool s_0;\n bool s_1;\n bool s_2;\n address s_3;\n bytes9[1] s_4;\n }\n\n function test () public pure returns (S_0f559a61 memory) {\n S_0f559a61 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xB4C5f4dd8E888A6679cbDF02a9d97894c8783412;\n r.s_3 = r_3;\n }\n {\n bytes9[1] memory r_4;\n {\n bytes9 r_4_0 = bytes9(0xea8c9b0d4213f75c60);\n r_4[0] = r_4_0;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b4c5f4dd8e888a6679cbdf02a9d97894c8783412ea8c9b0d4213f75c600000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,bool,bool,address,string[])", + "type": "(bool,bool,bool,address,string[])", + "value": [ + false, + true, + false, + "0x0C831994a7B4A5065086B945fAbA214D2C5A4CCC", + [ + "Moo é🚀oMoo🚀🚀", + "Moo é🚀ooM 🚀Mé🚀Moo🚀éo🚀éooM 🚀 é🚀🚀oo oM🚀M 🚀éo M oé🚀oM", + "Moo é🚀🚀o MéMooo oMéMo🚀oM🚀éooooooéMo o🚀oo🚀ooé éMo🚀éé éoo" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x0C831994a7B4A5065086B945fAbA214D2C5A4CCC" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMoo🚀🚀" + }, + { + "type": "string", + "value": "Moo é🚀ooM 🚀Mé🚀Moo🚀éo🚀éooM 🚀 é🚀🚀oo oM🚀M 🚀éo M oé🚀oM" + }, + { + "type": "string", + "value": "Moo é🚀🚀o MéMooo oMéMo🚀oM🚀éooooooéMo o🚀oo🚀ooé éMo🚀éé éoo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061038f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101b9565b60405180910390f35b6040805160a08082018352600080835260208084018290528385018290526060808501839052608080860182905286519485018752838552848701849052848101829052600185840152730c831994a7b4a5065086b945faba214d2c5a4ccc9185019190915285516003808252918101909652939492939192919082015b60608152602001906001900390816100cc5790505090506000604051806040016040528060168152602001749adede418753e13f3500de9adedfe13f3501e13f3560571b8152509050808260008151811061012957610129610293565b60200260200101819052505060006040518060800160405280605a81526020016102aa605a91399050808260018151811061016657610166610293565b602002602001018190525050600060405180608001604052806056815260200161030460569139905080826002815181106101a3576101a3610293565b6020908102919091010152506080820152919050565b6000602080835260c083018451151582850152818501511515604085015260408501511515606085015260018060a01b036060860151166080850152608085015160a08086015281815180845260e08701915060e08160051b880101935084830192506000805b828110156102855788860360df1901845284518051808852835b81811015610255578281018a01518982018b0152890161023a565b8181111561026557848a838b0101525b50601f01601f191696909601870195509386019392860192600101610220565b509398975050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f6f4d20f09f9a804dc3a9f09f9a804d6f6ff09f9a80c3a96ff09f9a80c3a96f6f4d20f09f9a8020c3a9f09f9a80f09f9a806f6f206f4df09f9a804d20f09f9a80c3a96f204d206fc3a9f09f9a806f4d4d6f6f20c3a9f09f9a80f09f9a806f204dc3a94d6f6f6f206f4dc3a94d6ff09f9a806f4df09f9a80c3a96f6f6f6f6f6fc3a94d6f206ff09f9a806f6ff09f9a806f6fc3a920c3a94d6ff09f9a80c3a9c3a920c3a96f6fa264697066735822122060cd6bd34a090a37cb5ff4e7d04484ccb19d1f093e6402a71e2b8e1aeee7ab1e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fda5ac99 {\n bool s_0;\n bool s_1;\n bool s_2;\n address s_3;\n string[] s_4;\n }\n\n function test () public pure returns (S_fda5ac99 memory) {\n S_fda5ac99 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x0C831994a7B4A5065086B945fAbA214D2C5A4CCC;\n r.s_3 = r_3;\n }\n {\n string[] memory r_4 = new string[](3);\n {\n string memory r_4_0 = unicode\"Moo é🚀oMoo🚀🚀\";\n r_4[0] = r_4_0;\n }\n {\n string memory r_4_1 = unicode\"Moo é🚀ooM 🚀Mé🚀Moo🚀éo🚀éooM 🚀 é🚀🚀oo oM🚀M 🚀éo M oé🚀oM\";\n r_4[1] = r_4_1;\n }\n {\n string memory r_4_2 = unicode\"Moo é🚀🚀o MéMooo oMéMo🚀oM🚀éooooooéMo o🚀oo🚀ooé éMo🚀éé éoo\";\n r_4[2] = r_4_2;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c831994a7b4a5065086b945faba214d2c5a4ccc00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a806f4d6f6ff09f9a80f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a806f6f4d20f09f9a804dc3a9f09f9a804d6f6ff09f9a80c3a96ff09f9a80c3a96f6f4d20f09f9a8020c3a9f09f9a80f09f9a806f6f206f4df09f9a804d20f09f9a80c3a96f204d206fc3a9f09f9a806f4d00000000000000000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a80f09f9a806f204dc3a94d6f6f6f206f4dc3a94d6ff09f9a806f4df09f9a80c3a96f6f6f6f6f6fc3a94d6f206ff09f9a806f6ff09f9a806f6fc3a920c3a94d6ff09f9a80c3a9c3a920c3a96f6f00000000000000000000" + }, + { + "name": "random-(bool,bytes24[2],int176)[][4]", + "type": "(bool,bytes24[2],int176)[][4]", + "value": [ + [ + [ + true, + [ + "0xcb2f68d7b3d52135ac064a85b4bf46693751bb6ad1267182", + "0x8e0676044cea40e320e8cd6080972b3fed28a993f7e7f87a" + ], + "-9865452280504764652800544928124101089015979194227003" + ] + ], + [ + [ + true, + [ + "0xeb450aa7b99f2a6247748da24463ca8272c16d2ce45ac45e", + "0xdfdb0b1be1721941b3092ecb899b4ca28ce8bc4e7c05c499" + ], + "-29855009726676176929625385345253613021382390800198272" + ], + [ + false, + [ + "0x74ec5f34feae9eb7cb1c86a4205f25640e4b886b4d83bb89", + "0x513a7a86137a3d7ee166d6b15dda0c7a2420c76dc139edc9" + ], + "34650508649841102270779040959112881453213828873364610" + ] + ], + [ + [ + false, + [ + "0x723ffd54b6e377392464d19111974fb15a0dec1d507a2786", + "0xa24107d19367ee5697e6d082a3af48aa4c74f0e0163abebe" + ], + "12236012848273680385843419046900326468378622299055529" + ], + [ + false, + [ + "0x85ae906a078f5a48f9863b49ec4fd48db7e1c3add776bf8e", + "0x37236b308bbac2db36151eafee51e31c9aa61708bf018f2c" + ], + "-41211735914777533413909190634215671520705863955096157" + ] + ], + [ + [ + false, + [ + "0xaa03e0bf28e8bfb40ff8ec6e4c78983dd9fdb1af9837b5ad", + "0x2930f954cd3b788c428e87c0b5997f240031225224234844" + ], + "11918635024901288990883208339238295071056052744838973" + ], + [ + true, + [ + "0xc44e098c8cd76e73fd08f8937e05433699246fd5f1c83033", + "0x585b370abe95bc254978f4527d754ae97f6f68fbc5e3bea4" + ], + "41051515297019793287511706885186809903110478197652068" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xcb2f68d7b3d52135ac064a85b4bf46693751bb6ad1267182" + }, + { + "type": "hexstring", + "value": "0x8e0676044cea40e320e8cd6080972b3fed28a993f7e7f87a" + } + ] + }, + { + "type": "number", + "value": "-9865452280504764652800544928124101089015979194227003" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xeb450aa7b99f2a6247748da24463ca8272c16d2ce45ac45e" + }, + { + "type": "hexstring", + "value": "0xdfdb0b1be1721941b3092ecb899b4ca28ce8bc4e7c05c499" + } + ] + }, + { + "type": "number", + "value": "-29855009726676176929625385345253613021382390800198272" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x74ec5f34feae9eb7cb1c86a4205f25640e4b886b4d83bb89" + }, + { + "type": "hexstring", + "value": "0x513a7a86137a3d7ee166d6b15dda0c7a2420c76dc139edc9" + } + ] + }, + { + "type": "number", + "value": "34650508649841102270779040959112881453213828873364610" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x723ffd54b6e377392464d19111974fb15a0dec1d507a2786" + }, + { + "type": "hexstring", + "value": "0xa24107d19367ee5697e6d082a3af48aa4c74f0e0163abebe" + } + ] + }, + { + "type": "number", + "value": "12236012848273680385843419046900326468378622299055529" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x85ae906a078f5a48f9863b49ec4fd48db7e1c3add776bf8e" + }, + { + "type": "hexstring", + "value": "0x37236b308bbac2db36151eafee51e31c9aa61708bf018f2c" + } + ] + }, + { + "type": "number", + "value": "-41211735914777533413909190634215671520705863955096157" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xaa03e0bf28e8bfb40ff8ec6e4c78983dd9fdb1af9837b5ad" + }, + { + "type": "hexstring", + "value": "0x2930f954cd3b788c428e87c0b5997f240031225224234844" + } + ] + }, + { + "type": "number", + "value": "11918635024901288990883208339238295071056052744838973" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc44e098c8cd76e73fd08f8937e05433699246fd5f1c83033" + }, + { + "type": "hexstring", + "value": "0x585b370abe95bc254978f4527d754ae97f6f68fbc5e3bea4" + } + ] + }, + { + "type": "number", + "value": "41051515297019793287511706885186809903110478197652068" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610733806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061062c565b60405180910390f35b6100566105be565b61005e6105be565b604080516001808252818301909252600091816020015b61007d6105e5565b81526020019060019003908161007557905050905061009a6105e5565b600181526100a661060e565b7fcb2f68d7b3d52135ac064a85b4bf46693751bb6ad1267182000000000000000081527f8e0676044cea40e320e8cd6080972b3fed28a993f7e7f87a0000000000000000602080830191909152820152751a5e37642d6482aae99dc8c5de412f95185d3b28993a196040820152815181908390600090610128576101286106e7565b602090810291909101015250815260408051600280825260608201909252600091816020015b6101566105e5565b81526020019060019003908161014e5790505090506101736105e5565b6001815261017f61060e565b7feb450aa7b99f2a6247748da24463ca8272c16d2ce45ac45e000000000000000081527fdfdb0b1be1721941b3092ecb899b4ca28ce8bc4e7c05c4990000000000000000602080830191909152820152754fcba069095ebac1f89d2564e282e8326cefc7ac2a7f196040820152815181908390600090610201576102016106e7565b6020026020010181905250506102156105e5565b6000815261022161060e565b7f74ec5f34feae9eb7cb1c86a4205f25640e4b886b4d83bb89000000000000000081527f513a7a86137a3d7ee166d6b15dda0c7a2420c76dc139edc90000000000000000602080830191909152820152755c9cd711e41d8fb21c468931daa50adbad57116ea482604082015281518190839060019081106102a4576102a46106e7565b6020908102919091018101919091528301919091525060408051600280825260608201909252600091816020015b6102da6105e5565b8152602001906001900390816102d25790505090506102f76105e5565b6000815261030361060e565b7f723ffd54b6e377392464d19111974fb15a0dec1d507a2786000000000000000081527fa24107d19367ee5697e6d082a3af48aa4c74f0e0163abebe00000000000000006020808301919091528201527520b43840709898ff8c74311adaf5550e2c17545da5a96040820152815181908390600090610384576103846106e7565b6020026020010181905250506103986105e5565b600081526103a461060e565b7f85ae906a078f5a48f9863b49ec4fd48db7e1c3add776bf8e000000000000000081527f37236b308bbac2db36151eafee51e31c9aa61708bf018f2c0000000000000000602080830191909152820152756e2636c7fc366b4d518805ec0402ffbb35b756fda25c1960408201528151819083906001908110610428576104286106e7565b6020908102919091010152506040808301919091528051600280825260608201909252600091816020015b61045b6105e5565b8152602001906001900390816104535790505090506104786105e5565b6000815261048461060e565b7faa03e0bf28e8bfb40ff8ec6e4c78983dd9fdb1af9837b5ad000000000000000081527f2930f954cd3b788c428e87c0b5997f2400312252242348440000000000000000602080830191909152820152751fdb0f9ea1ba4c4b4978f90f1cf1e1d96a64cefb5f3d6040820152815181908390600090610505576105056106e7565b6020026020010181905250506105196105e5565b6001815261052561060e565b7fc44e098c8cd76e73fd08f8937e05433699246fd5f1c83033000000000000000081527f585b370abe95bc254978f4527d754ae97f6f68fbc5e3bea40000000000000000602080830191909152820152756db8962b0165b7b7d6cf28a4ac45f39bb602ce2b7a64604082015281518190839060019081106105a8576105a86106e7565b6020908102919091010152506060820152919050565b60405180608001604052806004905b60608152602001906001900390816105cd5790505090565b604051806060016040528060001515815260200161060161060e565b8152600060209091015290565b60405180604001604052806002906020820280368337509192915050565b602080825260009060a0830183820185845b60048110156106db57868403601f1901835281518051808652908601908686019060005b818110156106c5578351805115158452898101518a850160005b60028110156106a457825167ffffffffffffffff19168252918c0191908c019060010161067c565b5050506040015160150b606084015292880192608090920191600101610662565b509095505050918401919084019060010161063e565b50919695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220b789469bd57ac708e690b81cef2181f34a85ba1821235f64fc209071fafe719a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_aac2623d {\n bool s_0;\n bytes24[2] s_1;\n int176 s_2;\n }\n\n function test () public pure returns (S_aac2623d[][4] memory) {\n S_aac2623d[][4] memory r;\n {\n S_aac2623d[] memory r_0 = new S_aac2623d[](1);\n {\n S_aac2623d memory r_0_0;\n {\n bool r_0_0_0 = true;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n bytes24[2] memory r_0_0_1;\n {\n bytes24 r_0_0_1_0 = bytes24(0xcb2f68d7b3d52135ac064a85b4bf46693751bb6ad1267182);\n r_0_0_1[0] = r_0_0_1_0;\n }\n {\n bytes24 r_0_0_1_1 = bytes24(0x8e0676044cea40e320e8cd6080972b3fed28a993f7e7f87a);\n r_0_0_1[1] = r_0_0_1_1;\n }\n r_0_0.s_1 = r_0_0_1;\n }\n {\n int176 r_0_0_2 = -9865452280504764652800544928124101089015979194227003;\n r_0_0.s_2 = r_0_0_2;\n }\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_aac2623d[] memory r_1 = new S_aac2623d[](2);\n {\n S_aac2623d memory r_1_0;\n {\n bool r_1_0_0 = true;\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bytes24[2] memory r_1_0_1;\n {\n bytes24 r_1_0_1_0 = bytes24(0xeb450aa7b99f2a6247748da24463ca8272c16d2ce45ac45e);\n r_1_0_1[0] = r_1_0_1_0;\n }\n {\n bytes24 r_1_0_1_1 = bytes24(0xdfdb0b1be1721941b3092ecb899b4ca28ce8bc4e7c05c499);\n r_1_0_1[1] = r_1_0_1_1;\n }\n r_1_0.s_1 = r_1_0_1;\n }\n {\n int176 r_1_0_2 = -29855009726676176929625385345253613021382390800198272;\n r_1_0.s_2 = r_1_0_2;\n }\n r_1[0] = r_1_0;\n }\n {\n S_aac2623d memory r_1_1;\n {\n bool r_1_1_0 = false;\n r_1_1.s_0 = r_1_1_0;\n }\n {\n bytes24[2] memory r_1_1_1;\n {\n bytes24 r_1_1_1_0 = bytes24(0x74ec5f34feae9eb7cb1c86a4205f25640e4b886b4d83bb89);\n r_1_1_1[0] = r_1_1_1_0;\n }\n {\n bytes24 r_1_1_1_1 = bytes24(0x513a7a86137a3d7ee166d6b15dda0c7a2420c76dc139edc9);\n r_1_1_1[1] = r_1_1_1_1;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n {\n int176 r_1_1_2 = 34650508649841102270779040959112881453213828873364610;\n r_1_1.s_2 = r_1_1_2;\n }\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n {\n S_aac2623d[] memory r_2 = new S_aac2623d[](2);\n {\n S_aac2623d memory r_2_0;\n {\n bool r_2_0_0 = false;\n r_2_0.s_0 = r_2_0_0;\n }\n {\n bytes24[2] memory r_2_0_1;\n {\n bytes24 r_2_0_1_0 = bytes24(0x723ffd54b6e377392464d19111974fb15a0dec1d507a2786);\n r_2_0_1[0] = r_2_0_1_0;\n }\n {\n bytes24 r_2_0_1_1 = bytes24(0xa24107d19367ee5697e6d082a3af48aa4c74f0e0163abebe);\n r_2_0_1[1] = r_2_0_1_1;\n }\n r_2_0.s_1 = r_2_0_1;\n }\n {\n int176 r_2_0_2 = 12236012848273680385843419046900326468378622299055529;\n r_2_0.s_2 = r_2_0_2;\n }\n r_2[0] = r_2_0;\n }\n {\n S_aac2623d memory r_2_1;\n {\n bool r_2_1_0 = false;\n r_2_1.s_0 = r_2_1_0;\n }\n {\n bytes24[2] memory r_2_1_1;\n {\n bytes24 r_2_1_1_0 = bytes24(0x85ae906a078f5a48f9863b49ec4fd48db7e1c3add776bf8e);\n r_2_1_1[0] = r_2_1_1_0;\n }\n {\n bytes24 r_2_1_1_1 = bytes24(0x37236b308bbac2db36151eafee51e31c9aa61708bf018f2c);\n r_2_1_1[1] = r_2_1_1_1;\n }\n r_2_1.s_1 = r_2_1_1;\n }\n {\n int176 r_2_1_2 = -41211735914777533413909190634215671520705863955096157;\n r_2_1.s_2 = r_2_1_2;\n }\n r_2[1] = r_2_1;\n }\n r[2] = r_2;\n }\n {\n S_aac2623d[] memory r_3 = new S_aac2623d[](2);\n {\n S_aac2623d memory r_3_0;\n {\n bool r_3_0_0 = false;\n r_3_0.s_0 = r_3_0_0;\n }\n {\n bytes24[2] memory r_3_0_1;\n {\n bytes24 r_3_0_1_0 = bytes24(0xaa03e0bf28e8bfb40ff8ec6e4c78983dd9fdb1af9837b5ad);\n r_3_0_1[0] = r_3_0_1_0;\n }\n {\n bytes24 r_3_0_1_1 = bytes24(0x2930f954cd3b788c428e87c0b5997f240031225224234844);\n r_3_0_1[1] = r_3_0_1_1;\n }\n r_3_0.s_1 = r_3_0_1;\n }\n {\n int176 r_3_0_2 = 11918635024901288990883208339238295071056052744838973;\n r_3_0.s_2 = r_3_0_2;\n }\n r_3[0] = r_3_0;\n }\n {\n S_aac2623d memory r_3_1;\n {\n bool r_3_1_0 = true;\n r_3_1.s_0 = r_3_1_0;\n }\n {\n bytes24[2] memory r_3_1_1;\n {\n bytes24 r_3_1_1_0 = bytes24(0xc44e098c8cd76e73fd08f8937e05433699246fd5f1c83033);\n r_3_1_1[0] = r_3_1_1_0;\n }\n {\n bytes24 r_3_1_1_1 = bytes24(0x585b370abe95bc254978f4527d754ae97f6f68fbc5e3bea4);\n r_3_1_1[1] = r_3_1_1_1;\n }\n r_3_1.s_1 = r_3_1_1;\n }\n {\n int176 r_3_1_2 = 41051515297019793287511706885186809903110478197652068;\n r_3_1.s_2 = r_3_1_2;\n }\n r_3[1] = r_3_1;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001cb2f68d7b3d52135ac064a85b4bf46693751bb6ad126718200000000000000008e0676044cea40e320e8cd6080972b3fed28a993f7e7f87a0000000000000000ffffffffffffffffffffe5a1c89bd29b7d551662373a21bed06ae7a2c4d766c500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001eb450aa7b99f2a6247748da24463ca8272c16d2ce45ac45e0000000000000000dfdb0b1be1721941b3092ecb899b4ca28ce8bc4e7c05c4990000000000000000ffffffffffffffffffffb0345f96f6a1453e0762da9b1d7d17cd93103853d580000000000000000000000000000000000000000000000000000000000000000074ec5f34feae9eb7cb1c86a4205f25640e4b886b4d83bb890000000000000000513a7a86137a3d7ee166d6b15dda0c7a2420c76dc139edc90000000000000000000000000000000000005c9cd711e41d8fb21c468931daa50adbad57116ea48200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000723ffd54b6e377392464d19111974fb15a0dec1d507a27860000000000000000a24107d19367ee5697e6d082a3af48aa4c74f0e0163abebe00000000000000000000000000000000000020b43840709898ff8c74311adaf5550e2c17545da5a9000000000000000000000000000000000000000000000000000000000000000085ae906a078f5a48f9863b49ec4fd48db7e1c3add776bf8e000000000000000037236b308bbac2db36151eafee51e31c9aa61708bf018f2c0000000000000000ffffffffffffffffffff91d9c93803c994b2ae77fa13fbfd0044ca48a9025da300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000aa03e0bf28e8bfb40ff8ec6e4c78983dd9fdb1af9837b5ad00000000000000002930f954cd3b788c428e87c0b5997f2400312252242348440000000000000000000000000000000000001fdb0f9ea1ba4c4b4978f90f1cf1e1d96a64cefb5f3d0000000000000000000000000000000000000000000000000000000000000001c44e098c8cd76e73fd08f8937e05433699246fd5f1c830330000000000000000585b370abe95bc254978f4527d754ae97f6f68fbc5e3bea40000000000000000000000000000000000006db8962b0165b7b7d6cf28a4ac45f39bb602ce2b7a64" + }, + { + "name": "random-(bool,bytes4,(string,string,string),bool)", + "type": "(bool,bytes4,(string,string,string),bool)", + "value": [ + true, + "0xc3ab529b", + [ + "Moo é🚀 oéo é M🚀oMoMM 🚀🚀🚀🚀", + "Moo é🚀 🚀M🚀é🚀🚀🚀oéMoé M o🚀MM MoMoMéM🚀o Mo🚀", + "Moo é🚀 MMMé é🚀 éMé🚀🚀oMo🚀o🚀é🚀 é" + ], + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xc3ab529b" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oéo é M🚀oMoMM 🚀🚀🚀🚀" + }, + { + "type": "string", + "value": "Moo é🚀 🚀M🚀é🚀🚀🚀oéMoé M o🚀MM MoMoMéM🚀o Mo🚀" + }, + { + "type": "string", + "value": "Moo é🚀 MMMé é🚀 éMé🚀🚀oMo🚀o🚀é🚀 é" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610336806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101ae565b60405180910390f35b61005661010b565b61005e61010b565b6001815263c3ab529b60e01b60208083019190915260408051606080820183528082529281018390529081019190915260006040518060600160405280602e81526020016102d3602e91398252506040805160808101909152604a8082526000919061024f602083013990508082602001819052505060006040518060600160405280603a8152602001610299603a91396040808401919091528301919091525060016060820152919050565b604051806080016040528060001515815260200160006001600160e01b031916815260200161015460405180606001604052806060815260200160608152602001606081525090565b8152600060209091015290565b6000815180845260005b818110156101875760208185018101518683018201520161016b565b81811115610199576000602083870101525b50601f01601f19169290920160200192915050565b6020815281511515602082015263ffffffff60e01b602083015116604082015260006040830151608060608401528051606060a08501526101f3610100850182610161565b90506020820151609f19808684030160c08701526102118383610161565b925060408401519350808684030160e087015250506102308183610161565b9150506060840151610246608085018215159052565b50939250505056fe4d6f6f20c3a9f09f9a802020f09f9a804df09f9a80c3a9f09f9a80f09f9a80f09f9a806fc3a94d6fc3a9204d206ff09f9a804d4d204d6f4d6f4dc3a94df09f9a806f20204d6ff09f9a804d6f6f20c3a9f09f9a80204d4d4dc3a920c3a9f09f9a8020c3a94dc3a9f09f9a80f09f9a806f4d6ff09f9a806ff09f9a80c3a9f09f9a8020c3a94d6f6f20c3a9f09f9a80206fc3a96f20c3a9204df09f9a806f4d6f4d4d20f09f9a80f09f9a80f09f9a80f09f9a80a2646970667358221220860eb130b7eb60d1fd1ff9ac05067183e284b04288354a43482d3a08237a303264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_061dfc07 {\n string s_0;\n string s_1;\n string s_2;\n }\n\n struct S_e4688901 {\n bool s_0;\n bytes4 s_1;\n S_061dfc07 s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_e4688901 memory) {\n S_e4688901 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes4 r_1 = bytes4(0xc3ab529b);\n r.s_1 = r_1;\n }\n {\n S_061dfc07 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀 oéo é M🚀oMoMM 🚀🚀🚀🚀\";\n r_2.s_0 = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀 🚀M🚀é🚀🚀🚀oéMoé M o🚀MM MoMoMéM🚀o Mo🚀\";\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀 MMMé é🚀 éMé🚀🚀oMo🚀o🚀é🚀 é\";\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001c3ab529b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a80206fc3a96f20c3a9204df09f9a806f4d6f4d4d20f09f9a80f09f9a80f09f9a80f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a802020f09f9a804df09f9a80c3a9f09f9a80f09f9a80f09f9a806fc3a94d6fc3a9204d206ff09f9a804d4d204d6f4d6f4dc3a94df09f9a806f20204d6ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a4d6f6f20c3a9f09f9a80204d4d4dc3a920c3a9f09f9a8020c3a94dc3a9f09f9a80f09f9a806f4d6ff09f9a806ff09f9a80c3a9f09f9a8020c3a9000000000000" + }, + { + "name": "random-(bool,bytes9,address,int56[],bytes28)", + "type": "(bool,bytes9,address,int56[],bytes28)", + "value": [ + true, + "0x5601d6740342a415a2", + "0x7474570F2060D68822F7021137403103a8DF9317", + ["1742993338197715", "-2092308588082830", "-22483177894051763", "35628518805901438"], + "0xe7d47de91c484eabde89fed6cc08c24c7325be97a6e3c6dbe8eb3845" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x5601d6740342a415a2" + }, + { + "type": "address", + "value": "0x7474570F2060D68822F7021137403103a8DF9317" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1742993338197715" + }, + { + "type": "number", + "value": "-2092308588082830" + }, + { + "type": "number", + "value": "-22483177894051763" + }, + { + "type": "number", + "value": "35628518805901438" + } + ] + }, + { + "type": "hexstring", + "value": "0xe7d47de91c484eabde89fed6cc08c24c7325be97a6e3c6dbe8eb3845" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102d0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101e7565b60405180910390f35b6040805160a080820183526000808352602080840182905283850182905260608085018190526080808601849052865180860188528083019290925281810184905260018252682b00eb3a01a1520ad160b91b82840152737474570f2060d68822f7021137403103a8df93178288015286516004808252958101909752949590949293909290918301908036833701905050905060006606313e42c4e6d39050808260008151811061010257610102610284565b602002602001019060060b908160060b8152505050600066076ef18e27368d199050808260018151811061013857610138610284565b602002602001019060060b908160060b81525050506000664fe054c7cbffb2199050808260028151811061016e5761016e610284565b602002602001019060060b908160060b81525050506000667e93f2f74c907e905080826003815181106101a3576101a3610284565b60069290920b602092830291909101909101525060608201527fe7d47de91c484eabde89fed6cc08c24c7325be97a6e3c6dbe8eb3845000000006080820152919050565b60208082528251151582820152828101516001600160b81b0319166040808401919091528301516001600160a01b031660608084019190915283015160a06080840152805160c0840181905260009291820190839060e08601905b8083101561026557835160060b8252928401926001929092019190840190610242565b50608087015163ffffffff19811660a088015293509695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220a33f39142cd7d7e3dcf31f1aac2d6babc00a2a8f328d764c8d4575b6f2f1658c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0e514402 {\n bool s_0;\n bytes9 s_1;\n address s_2;\n int56[] s_3;\n bytes28 s_4;\n }\n\n function test () public pure returns (S_0e514402 memory) {\n S_0e514402 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes9 r_1 = bytes9(0x5601d6740342a415a2);\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x7474570F2060D68822F7021137403103a8DF9317;\n r.s_2 = r_2;\n }\n {\n int56[] memory r_3 = new int56[](4);\n {\n int56 r_3_0 = 1742993338197715;\n r_3[0] = r_3_0;\n }\n {\n int56 r_3_1 = -2092308588082830;\n r_3[1] = r_3_1;\n }\n {\n int56 r_3_2 = -22483177894051763;\n r_3[2] = r_3_2;\n }\n {\n int56 r_3_3 = 35628518805901438;\n r_3[3] = r_3_3;\n }\n r.s_3 = r_3;\n }\n {\n bytes28 r_4 = bytes28(0xe7d47de91c484eabde89fed6cc08c24c7325be97a6e3c6dbe8eb3845);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000015601d6740342a415a200000000000000000000000000000000000000000000000000000000000000000000007474570f2060d68822f7021137403103a8df931700000000000000000000000000000000000000000000000000000000000000a0e7d47de91c484eabde89fed6cc08c24c7325be97a6e3c6dbe8eb38450000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000006313e42c4e6d3fffffffffffffffffffffffffffffffffffffffffffffffffff8910e71d8c972ffffffffffffffffffffffffffffffffffffffffffffffffffb01fab3834004d000000000000000000000000000000000000000000000000007e93f2f74c907e" + }, + { + "name": "random-(bool,int80,(bytes26,address),bool,string)", + "type": "(bool,int80,(bytes26,address),bool,string)", + "value": [ + false, + "-415239039735077208175627", + [ + "0x06e91a53c790c5434389e5ad32a82f171e44106c98c7b885c1bf", + "0x6729797956cB7856408Cf6AA29FA2FCDe64432dC" + ], + false, + "Moo é🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-415239039735077208175627" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x06e91a53c790c5434389e5ad32a82f171e44106c98c7b885c1bf" + }, + { + "type": "address", + "value": "0x6729797956cB7856408Cf6AA29FA2FCDe64432dC" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061024a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610168565b60405180910390f35b6100926040805160a0810182526000808252602080830182905283518085018552828152908101919091529091820190815260006020820152606060409091015290565b6100d66040805160a0810182526000808252602080830182905283518085018552828152908101919091529091820190815260006020820152606060409091015290565b60008082526957ee27487054c5d9b40a196020808401919091526040805180820182527f06e91a53c790c5434389e5ad32a82f171e44106c98c7b885c1bf0000000000008152736729797956cb7856408cf6aa29fa2fcde64432dc818401528185015260608401929092528151808301909252600a8252689adede418753e13f3560b71b908201526080820152919050565b6000602080835283511515818401528084015160090b6040840152604084015165ffffffffffff19815116606085015260018060a01b0382820151166080850152506060840151151560a0840152608084015160c08085015280518060e086015260005b818110156101e957828101840151868201610100015283016101cc565b818111156101fc57600061010083880101525b50601f01601f1916939093016101000194935050505056fea26469706673582212205d949e720c21b1bad8afcdba87062b7f0af8683f3ba465c23e6c8fd90b40ecc064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ec804f62 {\n bytes26 s_0;\n address s_1;\n }\n\n struct S_73bf646a {\n bool s_0;\n int80 s_1;\n S_ec804f62 s_2;\n bool s_3;\n string s_4;\n }\n\n function test () public pure returns (S_73bf646a memory) {\n S_73bf646a memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n int80 r_1 = -415239039735077208175627;\n r.s_1 = r_1;\n }\n {\n S_ec804f62 memory r_2;\n {\n bytes26 r_2_0 = bytes26(0x06e91a53c790c5434389e5ad32a82f171e44106c98c7b885c1bf);\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0x6729797956cB7856408Cf6AA29FA2FCDe64432dC;\n r_2.s_1 = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀\";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffa811d8b78fab3a264bf506e91a53c790c5434389e5ad32a82f171e44106c98c7b885c1bf0000000000000000000000000000000000006729797956cb7856408cf6aa29fa2fcde64432dc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,string,address[4],bytes24,uint176)", + "type": "(bool,string,address[4],bytes24,uint176)", + "value": [ + false, + "Moo é🚀🚀MMoéé🚀MoooéMo🚀o oéoo oooo ooooMéo 🚀🚀o🚀 oM🚀🚀MM🚀éMMMMo", + [ + "0x44Bd425198544D2112F48d2323538e5b939Edaaf", + "0x2Be2c20ed3f4D548a584FAAC30705f3874085b30", + "0xfEE2684608669BAe92aA3FE1B283bBE919a40164", + "0xD1d565fd5caDCF154ef5637E8f08AF8fe1E2a7FF" + ], + "0xa24a151575d9d6b999b2885f28d9b32c9fe220cda517b5c1", + "8844453503664198782346908698199641115809402992742304" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀🚀MMoéé🚀MoooéMo🚀o oéoo oooo ooooMéo 🚀🚀o🚀 oM🚀🚀MM🚀éMMMMo" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x44Bd425198544D2112F48d2323538e5b939Edaaf" + }, + { + "type": "address", + "value": "0x2Be2c20ed3f4D548a584FAAC30705f3874085b30" + }, + { + "type": "address", + "value": "0xfEE2684608669BAe92aA3FE1B283bBE919a40164" + }, + { + "type": "address", + "value": "0xD1d565fd5caDCF154ef5637E8f08AF8fe1E2a7FF" + } + ] + }, + { + "type": "hexstring", + "value": "0xa24a151575d9d6b999b2885f28d9b32c9fe220cda517b5c1" + }, + { + "type": "number", + "value": "8844453503664198782346908698199641115809402992742304" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610310806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101c7565b60405180910390f35b610056610143565b61005e610143565b60008082526040805160a08101909152606180825261027a6020830139602083015250610089610177565b7344bd425198544d2112f48d2323538e5b939edaaf8152732be2c20ed3f4d548a584faac30705f3874085b30602082015273fee2684608669bae92aa3fe1b283bbe919a4016460408083019190915273d1d565fd5cadcf154ef5637e8f08af8fe1e2a7ff606080840191909152908301919091527fa24a151575d9d6b999b2885f28d9b32c9fe220cda517b5c10000000000000000908201527517a39ee39969224d4cafe462a955cd5fba2660cc4fa06080820152919050565b6040805160a0810182526000815260606020820152908101610163610177565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b8060005b60048110156101c15781516001600160a01b0316845260209384019390910190600101610199565b50505050565b6000602080835283511515818401528084015161010080604086015281518061012087015260005b8181101561020c57838101850151878201610140015284016101ef565b8181111561021f57600061014083890101525b50604087015193506102346060870185610195565b606087015167ffffffffffffffff19811660e0880152935060808701516001600160b01b038116878401529350601f01601f191694909401610140019594505050505056fe4d6f6f20c3a9f09f9a80f09f9a804d4d6fc3a9c3a9f09f9a804d6f6f6fc3a94d6ff09f9a806f206fc3a96f6f206f6f6f6f206f6f6f6f4dc3a96f20f09f9a80f09f9a806ff09f9a8020206f4df09f9a80f09f9a804d4df09f9a80c3a94d4d4d4d6fa2646970667358221220a13e0441609a087b4aa17a8eadf27bf4a0388d6a36d3c352f96c194a1700186664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2662b487 {\n bool s_0;\n string s_1;\n address[4] s_2;\n bytes24 s_3;\n uint176 s_4;\n }\n\n function test () public pure returns (S_2662b487 memory) {\n S_2662b487 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀🚀MMoéé🚀MoooéMo🚀o oéoo oooo ooooMéo 🚀🚀o🚀 oM🚀🚀MM🚀éMMMMo\";\n r.s_1 = r_1;\n }\n {\n address[4] memory r_2;\n {\n address r_2_0 = 0x44Bd425198544D2112F48d2323538e5b939Edaaf;\n r_2[0] = r_2_0;\n }\n {\n address r_2_1 = 0x2Be2c20ed3f4D548a584FAAC30705f3874085b30;\n r_2[1] = r_2_1;\n }\n {\n address r_2_2 = 0xfEE2684608669BAe92aA3FE1B283bBE919a40164;\n r_2[2] = r_2_2;\n }\n {\n address r_2_3 = 0xD1d565fd5caDCF154ef5637E8f08AF8fe1E2a7FF;\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n bytes24 r_3 = bytes24(0xa24a151575d9d6b999b2885f28d9b32c9fe220cda517b5c1);\n r.s_3 = r_3;\n }\n {\n uint176 r_4 = 8844453503664198782346908698199641115809402992742304;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000044bd425198544d2112f48d2323538e5b939edaaf0000000000000000000000002be2c20ed3f4d548a584faac30705f3874085b30000000000000000000000000fee2684608669bae92aa3fe1b283bbe919a40164000000000000000000000000d1d565fd5cadcf154ef5637e8f08af8fe1e2a7ffa24a151575d9d6b999b2885f28d9b32c9fe220cda517b5c100000000000000000000000000000000000017a39ee39969224d4cafe462a955cd5fba2660cc4fa000000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a80f09f9a804d4d6fc3a9c3a9f09f9a804d6f6f6fc3a94d6ff09f9a806f206fc3a96f6f206f6f6f6f206f6f6f6f4dc3a96f20f09f9a80f09f9a806ff09f9a8020206f4df09f9a80f09f9a804d4df09f9a80c3a94d4d4d4d6f00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,string[2],bytes19,int200,bytes29)", + "type": "(bool,string[2],bytes19,int200,bytes29)", + "value": [ + false, + [ + "Moo é🚀o é🚀oMo oé MoooMéooMéooMM🚀🚀é🚀🚀 M🚀🚀 MoM🚀🚀éo", + "Moo é🚀oMooé🚀ooooo Mo🚀Mo" + ], + "0x333016949051dfe7f5a9e53c02069c3e22c656", + "-132596317850777545747191866718901378758592590205884799857089", + "0x4d1720ee613ab3812195e3ea4d0d58469a2ba8d74b3f6a5f57f6e46284" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o é🚀oMo oé MoooMéooMéooMM🚀🚀é🚀🚀 M🚀🚀 MoM🚀🚀éo" + }, + { + "type": "string", + "value": "Moo é🚀oMooé🚀ooooo Mo🚀Mo" + } + ] + }, + { + "type": "hexstring", + "value": "0x333016949051dfe7f5a9e53c02069c3e22c656" + }, + { + "type": "number", + "value": "-132596317850777545747191866718901378758592590205884799857089" + }, + { + "type": "hexstring", + "value": "0x4d1720ee613ab3812195e3ea4d0d58469a2ba8d74b3f6a5f57f6e46284" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061030a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610179565b60405180910390f35b61005661011b565b61005e61011b565b6000815261006a610152565b600060405180608001604052806055815260200161028060559139825250604080516060810190915260258082526000919061025b6020830139602080840191909152830191909152507219980b4a4828eff3fad4f29e01034e1f11632b60691b604082015278151fb2270a2b7ceaa017a2dfa0cc019fc7916620f412d731c01960608201527f4d1720ee613ab3812195e3ea4d0d58469a2ba8d74b3f6a5f57f6e462840000006080820152919050565b6040518060a00160405280600015158152602001610137610152565b81526000602082018190526040820181905260609091015290565b60405180604001604052806002905b60608152602001906001900390816101615790505090565b602080825282511515828201528281015160a060408401526000919061010084019060c0850184805b60028110156102085787850360bf1901835283518051808752835b818110156101d8578281018901518882018a015288016101bd565b818111156101e8578489838a0101525b50601f01601f1916959095018601945092850192918501916001016101a2565b5050505060408501516cffffffffffffffffffffffffff198116606086015291506060850151915061023f608085018360180b9052565b608085015162ffffff19811660a0860152915094935050505056fe4d6f6f20c3a9f09f9a806f4d6f6fc3a9f09f9a806f6f6f6f6f202020204d6ff09f9a804d6f4d6f6f20c3a9f09f9a806f20c3a9f09f9a806f4d6f206fc3a9204d6f6f6f4dc3a96f6f4dc3a96f6f4d4df09f9a80f09f9a80c3a9f09f9a80f09f9a80204df09f9a80f09f9a80204d6f4df09f9a80f09f9a80c3a96fa2646970667358221220ad6b9e91eebd089fdf364af6323b788a56a72c33557b9fd7996a190c4970c9ea64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c53c1960 {\n bool s_0;\n string[2] s_1;\n bytes19 s_2;\n int200 s_3;\n bytes29 s_4;\n }\n\n function test () public pure returns (S_c53c1960 memory) {\n S_c53c1960 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n string[2] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀o é🚀oMo oé MoooMéooMéooMM🚀🚀é🚀🚀 M🚀🚀 MoM🚀🚀éo\";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀oMooé🚀ooooo Mo🚀Mo\";\n r_1[1] = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n bytes19 r_2 = bytes19(0x333016949051dfe7f5a9e53c02069c3e22c656);\n r.s_2 = r_2;\n }\n {\n int200 r_3 = -132596317850777545747191866718901378758592590205884799857089;\n r.s_3 = r_3;\n }\n {\n bytes29 r_4 = bytes29(0x4d1720ee613ab3812195e3ea4d0d58469a2ba8d74b3f6a5f57f6e46284);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0333016949051dfe7f5a9e53c02069c3e22c65600000000000000000000000000ffffffffffffffeae04dd8f5d483155fe85d205f33fe60386e99df0bed28ce3f4d1720ee613ab3812195e3ea4d0d58469a2ba8d74b3f6a5f57f6e46284000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a806f20c3a9f09f9a806f4d6f206fc3a9204d6f6f6f4dc3a96f6f4dc3a96f6f4d4df09f9a80f09f9a80c3a9f09f9a80f09f9a80204df09f9a80f09f9a80204d6f4df09f9a80f09f9a80c3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a806f4d6f6fc3a9f09f9a806f6f6f6f6f202020204d6ff09f9a804d6f000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,string[4],bool,string,bool)", + "type": "(bool,string[4],bool,string,bool)", + "value": [ + true, + [ + "Moo é🚀 🚀M🚀🚀oMéooMoM oMoMo🚀Mo MMo🚀oo oééoooéé éo🚀 oé🚀🚀 oM o🚀éoo", + "Moo é🚀MoM🚀é🚀ooo 🚀é é🚀ooéoéMM🚀oo🚀oé ooé🚀🚀 🚀o M", + "Moo é🚀 oMé🚀", + "Moo é🚀" + ], + false, + "Moo é🚀 ééMéMéoMéo", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀M🚀🚀oMéooMoM oMoMo🚀Mo MMo🚀oo oééoooéé éo🚀 oé🚀🚀 oM o🚀éoo" + }, + { + "type": "string", + "value": "Moo é🚀MoM🚀é🚀ooo 🚀é é🚀ooéoéMM🚀oo🚀oé ooé🚀🚀 🚀o M" + }, + { + "type": "string", + "value": "Moo é🚀 oMé🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀 ééMéMéoMéo" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061038f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101fd565b60405180910390f35b610056610152565b61005e610152565b6001815261006a610189565b60006040518060a00160405280606581526020016102f56065913982525060408051608081019091526053808252600091906102a2602083013960208381019190915260408051808201825260138152719adede418753e13f350040de9b8753e13f35606f1b818401528185015280518082018252600a8152689adede418753e13f3560b71b818401526060808601919091528583019490945260008582018190528151808301909252601a82527f4d6f6f20c3a9f09f9a8020c3a9c3a94dc3a94dc3a96f4dc3a96f0000000000009282019290925292840192909252506080820152919050565b6040518060a0016040528060001515815260200161016e610189565b81526000602082018190526060604083018190529091015290565b60405180608001604052806004905b60608152602001906001900390816101985790505090565b6000815180845260005b818110156101d6576020818501810151868301820152016101ba565b818111156101e8576000602083870101525b50601f01601f19169290920160200192915050565b602080825282511515828201528281015160a060408401526000919061014084019060c08501845b60048110156102545760bf198785030182526102428484516101b0565b93509184019190840190600101610225565b5050506040850151801515606086015291506060850151848203601f19016080860152915061028381836101b0565b915050608084015161029960a085018215159052565b50939250505056fe4d6f6f20c3a9f09f9a804d6f4df09f9a80c3a9f09f9a806f6f6f20f09f9a80c3a920c3a9f09f9a806f6fc3a96fc3a94d4df09f9a806f6ff09f9a806fc3a9206f6fc3a9f09f9a80f09f9a8020f09f9a806f204d4d6f6f20c3a9f09f9a8020f09f9a804df09f9a80f09f9a806f4dc3a96f6f4d6f4d206f4d6f4d6ff09f9a804d6f204d4d6ff09f9a806f6f206fc3a9c3a96f6f6fc3a9c3a920c3a96ff09f9a80206fc3a9f09f9a80f09f9a80206f4d206ff09f9a80c3a96f6fa26469706673582212200f14df95a5aa5e46f9e7b6acd2ed4dd9dee899ba0df3287d865cbcf3b83ed96a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9515431b {\n bool s_0;\n string[4] s_1;\n bool s_2;\n string s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_9515431b memory) {\n S_9515431b memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n string[4] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀 🚀M🚀🚀oMéooMoM oMoMo🚀Mo MMo🚀oo oééoooéé éo🚀 oé🚀🚀 oM o🚀éoo\";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀MoM🚀é🚀ooo 🚀é é🚀ooéoéMM🚀oo🚀oé ooé🚀🚀 🚀o M\";\n r_1[1] = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀 oMé🚀\";\n r_1[2] = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀\";\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀 ééMéMéoMéo\";\n r.s_3 = r_3;\n }\n {\n bool r_4 = false;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000654d6f6f20c3a9f09f9a8020f09f9a804df09f9a80f09f9a806f4dc3a96f6f4d6f4d206f4d6f4d6ff09f9a804d6f204d4d6ff09f9a806f6f206fc3a9c3a96f6f6fc3a9c3a920c3a96ff09f9a80206fc3a9f09f9a80f09f9a80206f4d206ff09f9a80c3a96f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000534d6f6f20c3a9f09f9a804d6f4df09f9a80c3a9f09f9a806f6f6f20f09f9a80c3a920c3a9f09f9a806f6fc3a96fc3a94d4df09f9a806f6ff09f9a806fc3a9206f6fc3a9f09f9a80f09f9a8020f09f9a806f204d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a80206f4dc3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a4d6f6f20c3a9f09f9a8020c3a9c3a94dc3a94dc3a96f4dc3a96f000000000000" + }, + { + "name": "random-(bool,string[4],int,string,bytes29)", + "type": "(bool,string[4],int,string,bytes29)", + "value": [ + true, + [ + "Moo é🚀o", + "Moo é🚀 é o ééé🚀éoéé oM🚀 ooooMoo éM 🚀oooooéooo", + "Moo é🚀", + "Moo é🚀ééMéoo🚀M🚀ooé🚀 ooM o éMéé MM🚀éoo o éo o oé oo" + ], + "-21273328644031080403563083679710067087022572976239358669718250663738340536767", + "Moo é🚀ooé🚀 ééoo🚀ooé 🚀oMMooo🚀🚀é 🚀 M ", + "0x5724403ac0c3c5b871aadb10e30e1220f50c624eaad5d73ff058310872" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o" + }, + { + "type": "string", + "value": "Moo é🚀 é o ééé🚀éoéé oM🚀 ooooMoo éM 🚀oooooéooo" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀ééMéoo🚀M🚀ooé🚀 ooM o éMéé MM🚀éoo o éo o oé oo" + } + ] + }, + { + "type": "number", + "value": "-21273328644031080403563083679710067087022572976239358669718250663738340536767" + }, + { + "type": "string", + "value": "Moo é🚀ooé🚀 ééoo🚀ooé 🚀oMMooo🚀🚀é 🚀 M " + }, + { + "type": "hexstring", + "value": "0x5724403ac0c3c5b871aadb10e30e1220f50c624eaad5d73ff058310872" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103ce806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610223565b60405180910390f35b610056610178565b61005e610178565b6001815261006a6101af565b604080518082018252600b81526a4d6f6f20c3a9f09f9a806f60a81b60208083019190915290835281516080810190925260468083526000929161035390830139602083810191909152604080518082018252600a8152689adede418753e13f3560b71b8184015281850152805160808101909152604d8082526000935090916102c7908301396060808401919091526020848101939093527fd0f7b9017aca5a1fc2bff3ba5fd8a505fc928fb11b39f82e232fab3a758c0e4160408086019190915280519182019052603f80825260009391925090610314908301396060830152507f5724403ac0c3c5b871aadb10e30e1220f50c624eaad5d73ff0583108720000006080820152919050565b6040518060a001604052806000151581526020016101946101af565b81526000602082018190526060604083018190529091015290565b60405180608001604052806004905b60608152602001906001900390816101be5790505090565b6000815180845260005b818110156101fc576020818501810151868301820152016101e0565b8181111561020e576000602083870101525b50601f01601f19169290920160200192915050565b602080825282511515828201528281015160a060408401526000919061014084019060c08501845b600481101561027a5760bf198785030182526102688484516101d6565b9350918401919084019060010161024b565b5050506040850151606085015260608501519150601f198482030160808501526102a481836101d6565b91505060808401516102be60a085018262ffffff19169052565b50939250505056fe4d6f6f20c3a9f09f9a80c3a9c3a94dc3a96f6ff09f9a804df09f9a806f6fc3a9f09f9a8020206f6f4d206f20c3a94dc3a9c3a9204d4df09f9a80c3a96f6f206f20c3a96f206f206fc3a9206f6f4d6f6f20c3a9f09f9a806f6fc3a9f09f9a802020c3a9c3a96f6ff09f9a806f6fc3a920f09f9a806f4d4d6f6f6ff09f9a80f09f9a80c3a920f09f9a80204d204d6f6f20c3a9f09f9a8020c3a9206f202020c3a9c3a9c3a9f09f9a80c3a96fc3a9c3a9206f4df09f9a80206f6f6f6f4d6f6f20c3a94d2020f09f9a806f6f6f6f6fc3a96f6f6fa26469706673582212201ed4a74c67c4d007891193a13a2e302648cef8cc50f08941d52148816b5e871364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9ded59ba {\n bool s_0;\n string[4] s_1;\n int256 s_2;\n string s_3;\n bytes29 s_4;\n }\n\n function test () public pure returns (S_9ded59ba memory) {\n S_9ded59ba memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n string[4] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀o\";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀 é o ééé🚀éoéé oM🚀 ooooMoo éM 🚀oooooéooo\";\n r_1[1] = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀\";\n r_1[2] = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀ééMéoo🚀M🚀ooé🚀 ooM o éMéé MM🚀éoo o éo o oé oo\";\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n int r_2 = -21273328644031080403563083679710067087022572976239358669718250663738340536767;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀ooé🚀 ééoo🚀ooé 🚀oMMooo🚀🚀é 🚀 M \";\n r.s_3 = r_3;\n }\n {\n bytes29 r_4 = bytes29(0x5724403ac0c3c5b871aadb10e30e1220f50c624eaad5d73ff058310872);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0d0f7b9017aca5a1fc2bff3ba5fd8a505fc928fb11b39f82e232fab3a758c0e4100000000000000000000000000000000000000000000000000000000000002a05724403ac0c3c5b871aadb10e30e1220f50c624eaad5d73ff058310872000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a8020c3a9206f202020c3a9c3a9c3a9f09f9a80c3a96fc3a9c3a9206f4df09f9a80206f6f6f6f4d6f6f20c3a94d2020f09f9a806f6f6f6f6fc3a96f6f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a80c3a9c3a94dc3a96f6ff09f9a804df09f9a806f6fc3a9f09f9a8020206f6f4d206f20c3a94dc3a9c3a9204d4df09f9a80c3a96f6f206f20c3a96f206f206fc3a9206f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a806f6fc3a9f09f9a802020c3a9c3a96f6ff09f9a806f6fc3a920f09f9a806f4d4d6f6f6ff09f9a80f09f9a80c3a920f09f9a80204d2000" + }, + { + "name": "random-(bool[1],bytes31,address,bytes31,address)", + "type": "(bool[1],bytes31,address,bytes31,address)", + "value": [ + [true], + "0x894da1f962b9060de99a657b3951c33e111ad86dbc6f8bb00807d77435ee7d", + "0xAB7899Aa467683B3314cA965c6168d1F4dB183d9", + "0x30d9b89de2f131742e3be7c9aa6544641c08f652530ee9f3429b85f179b512", + "0x148e25208FB2Cf4b676D8A42e0d901f2a6b7C4c5" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x894da1f962b9060de99a657b3951c33e111ad86dbc6f8bb00807d77435ee7d" + }, + { + "type": "address", + "value": "0xAB7899Aa467683B3314cA965c6168d1F4dB183d9" + }, + { + "type": "hexstring", + "value": "0x30d9b89de2f131742e3be7c9aa6544641c08f652530ee9f3429b85f179b512" + }, + { + "type": "address", + "value": "0x148e25208FB2Cf4b676D8A42e0d901f2a6b7C4c5" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610202806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610144565b60405180910390f35b6100566100f1565b61005e6100f1565b610066610126565b6001815281527f894da1f962b9060de99a657b3951c33e111ad86dbc6f8bb00807d77435ee7d00602082015273ab7899aa467683b3314ca965c6168d1f4db183d960408201527f30d9b89de2f131742e3be7c9aa6544641c08f652530ee9f3429b85f179b51200606082015273148e25208fb2cf4b676d8a42e0d901f2a6b7c4c56080820152919050565b6040518060a00160405280610104610126565b8152600060208201819052604082018190526060820181905260809091015290565b60405180602001604052806001906020820280368337509192915050565b815160a08201908260005b6001811015610170578251151582526020928301929091019060010161014f565b50505060208381015160ff1916908301526040808401516001600160a01b031690830152606080840151906101aa9084018260ff19169052565b5060808301516101c560808401826001600160a01b03169052565b509291505056fea2646970667358221220147838b917a1a6d95c2e5d4186320e7fc518533db70a07bfd2ea1154f08af0fa64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_99cfac41 {\n bool[1] s_0;\n bytes31 s_1;\n address s_2;\n bytes31 s_3;\n address s_4;\n }\n\n function test () public pure returns (S_99cfac41 memory) {\n S_99cfac41 memory r;\n {\n bool[1] memory r_0;\n {\n bool r_0_0 = true;\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n bytes31 r_1 = bytes31(0x894da1f962b9060de99a657b3951c33e111ad86dbc6f8bb00807d77435ee7d);\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xAB7899Aa467683B3314cA965c6168d1F4dB183d9;\n r.s_2 = r_2;\n }\n {\n bytes31 r_3 = bytes31(0x30d9b89de2f131742e3be7c9aa6544641c08f652530ee9f3429b85f179b512);\n r.s_3 = r_3;\n }\n {\n address r_4 = 0x148e25208FB2Cf4b676D8A42e0d901f2a6b7C4c5;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001894da1f962b9060de99a657b3951c33e111ad86dbc6f8bb00807d77435ee7d00000000000000000000000000ab7899aa467683b3314ca965c6168d1f4db183d930d9b89de2f131742e3be7c9aa6544641c08f652530ee9f3429b85f179b51200000000000000000000000000148e25208fb2cf4b676d8a42e0d901f2a6b7c4c5" + }, + { + "name": "random-(bytes1,string,bool,address)[1][3]", + "type": "(bytes1,string,bool,address)[1][3]", + "value": [ + [ + [ + "0xa2", + "Moo é🚀ooo ooo🚀 🚀o🚀oo🚀🚀🚀 éMéM éo éMo ", + false, + "0xE34E59Baeb093D18aceB1d48747675aAb4bEDDB1" + ] + ], + [["0x95", "Moo é🚀oéMé o ", false, "0x455eC9Dc650A303A234678027FFa533d8cbD7F90"]], + [["0x5e", "Moo é🚀 🚀o", true, "0xF3d51263108dFa096aA27A62bE659a94B6e56049"]] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa2" + }, + { + "type": "string", + "value": "Moo é🚀ooo ooo🚀 🚀o🚀oo🚀🚀🚀 éMéM éo éMo " + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xE34E59Baeb093D18aceB1d48747675aAb4bEDDB1" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x95" + }, + { + "type": "string", + "value": "Moo é🚀oéMé o " + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x455eC9Dc650A303A234678027FFa533d8cbD7F90" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x5e" + }, + { + "type": "string", + "value": "Moo é🚀 🚀o" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xF3d51263108dFa096aA27A62bE659a94B6e56049" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103b4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610243565b60405180910390f35b6100566101d0565b61005e6101d0565b6100666101fd565b6040805160808082018352606060208084018290526000848601819052918401829052605160f91b845284519283019094526041808352929390929061033e908301396020830152506000604082015273e34e59baeb093d18aceb1d48747675aab4beddb16060820152815281526100dc6101fd565b60408051608081018252606060208083018281526000848601818152938501818152609560f81b865286518088019097526013875272026b7b79061d4f84fcd4037e1d4a6e1d490379606d1b878501529590915290915273455ec9dc650a303a234678027ffa533d8cbd7f9090925282528201526101586101fd565b60408051608081018252606060208083018281526000848601818152938501908152602f60f91b855285518087018752601081526f4d6f6f20c3a9f09f9a8020f09f9a806f60801b93810193909352919052600190915273f3d51263108dfa096aa27a62be659a94b6e5604990528252820152919050565b60405180606001604052806003905b6101e76101fd565b8152602001906001900390816101df5790505090565b60405180602001604052806001905b60408051608081018252600080825260606020808401829052938301829052820152825260001990920191018161020c5790505090565b6020808252600090608083820181850186855b600381101561033057601f198884038101855282518488810160005b600181101561031a578782038352835160ff60f81b81511683528b8101518b8d8501528051808d86015260005b818110156102bb578281018f015186820160a001528e0161029f565b818111156102cd57600060a083880101525b5060409150818301516102e38387018215159052565b506060928301516001600160a01b03811686850152929150958d0195948d0194601f0187169390930160a001925050600101610272565b5096890196955050509186019150600101610256565b509097965050505050505056fe4d6f6f20c3a9f09f9a806f6f6f20206f6f6ff09f9a8020f09f9a806ff09f9a806f6ff09f9a80f09f9a80f09f9a8020c3a94dc3a94d2020c3a96f2020c3a94d6f20a26469706673582212207d33273def74ef277a2524a6c7899ccc8dfd89a0f623a3d6e7d2067464d0891c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_95893ba8 {\n bytes1 s_0;\n string s_1;\n bool s_2;\n address s_3;\n }\n\n function test () public pure returns (S_95893ba8[1][3] memory) {\n S_95893ba8[1][3] memory r;\n {\n S_95893ba8[1] memory r_0;\n {\n S_95893ba8 memory r_0_0;\n {\n bytes1 r_0_0_0 = bytes1(0xa2);\n r_0_0.s_0 = r_0_0_0;\n }\n {\n string memory r_0_0_1 = unicode\"Moo é🚀ooo ooo🚀 🚀o🚀oo🚀🚀🚀 éMéM éo éMo \";\n r_0_0.s_1 = r_0_0_1;\n }\n {\n bool r_0_0_2 = false;\n r_0_0.s_2 = r_0_0_2;\n }\n {\n address r_0_0_3 = 0xE34E59Baeb093D18aceB1d48747675aAb4bEDDB1;\n r_0_0.s_3 = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_95893ba8[1] memory r_1;\n {\n S_95893ba8 memory r_1_0;\n {\n bytes1 r_1_0_0 = bytes1(0x95);\n r_1_0.s_0 = r_1_0_0;\n }\n {\n string memory r_1_0_1 = unicode\"Moo é🚀oéMé o \";\n r_1_0.s_1 = r_1_0_1;\n }\n {\n bool r_1_0_2 = false;\n r_1_0.s_2 = r_1_0_2;\n }\n {\n address r_1_0_3 = 0x455eC9Dc650A303A234678027FFa533d8cbD7F90;\n r_1_0.s_3 = r_1_0_3;\n }\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n {\n S_95893ba8[1] memory r_2;\n {\n S_95893ba8 memory r_2_0;\n {\n bytes1 r_2_0_0 = bytes1(0x5e);\n r_2_0.s_0 = r_2_0_0;\n }\n {\n string memory r_2_0_1 = unicode\"Moo é🚀 🚀o\";\n r_2_0.s_1 = r_2_0_1;\n }\n {\n bool r_2_0_2 = true;\n r_2_0.s_2 = r_2_0_2;\n }\n {\n address r_2_0_3 = 0xF3d51263108dFa096aA27A62bE659a94B6e56049;\n r_2_0.s_3 = r_2_0_3;\n }\n r_2[0] = r_2_0;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000020a20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e34e59baeb093d18aceb1d48747675aab4beddb100000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a806f6f6f20206f6f6ff09f9a8020f09f9a806ff09f9a806f6ff09f9a80f09f9a80f09f9a8020c3a94dc3a94d2020c3a96f2020c3a94d6f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020950000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000455ec9dc650a303a234678027ffa533d8cbd7f9000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a806fc3a94dc3a9206f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f3d51263108dfa096aa27a62be659a94b6e5604900000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a8020f09f9a806f00000000000000000000000000000000" + }, + { + "name": "random-(bytes15,string[],address,bytes20,address)", + "type": "(bytes15,string[],address,bytes20,address)", + "value": [ + "0x4b44bb06994737da68e44f52bd6302", + ["Moo é🚀🚀M🚀o o🚀Mo🚀MoMéMéoM éooéoooMo éMé🚀 MoooMo🚀o "], + "0x1ffB4Db2566e7A080180a0341548b6A12E447189", + "0x881c08fc45e365800b11cb388635db75a511c065", + "0x978DEBC743020A19f0B5027D50f379b1e81E3C29" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x4b44bb06994737da68e44f52bd6302" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀M🚀o o🚀Mo🚀MoMéMéoM éooéoooMo éMé🚀 MoooMo🚀o " + } + ] + }, + { + "type": "address", + "value": "0x1ffB4Db2566e7A080180a0341548b6A12E447189" + }, + { + "type": "hexstring", + "value": "0x881c08fc45e365800b11cb388635db75a511c065" + }, + { + "type": "address", + "value": "0x978DEBC743020A19f0B5027D50f379b1e81E3C29" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610325806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061017b565b60405180910390f35b6040805160a080820183526000808352606060208085018290528486018390528185018390526080808601849052865194850187528482018390528487018490529184018390529083018290526e25a25d834ca39bed347227a95eb18160891b8352845160018082528187019096529394929391929082015b60608152602001906001900390816100c757905050905060006040518060800160405280604e81526020016102a2604e91399050808260008151811061010f5761010f61028b565b60209081029190910181019190915283019190915250731ffb4db2566e7a080180a0341548b6a12e447189604082015273881c08fc45e365800b11cb388635db75a511c06560601b606082015273978debc743020a19f0b5027d50f379b1e81e3c296080820152919050565b6000602080835260c0830170ffffffffffffffffffffffffffffffffff19855116828501528185015160a0604086015281815180845260e08701915060e08160051b880101935084830192506000805b828110156102305788860360df1901845284518051808852835b81811015610200578281018a01518982018b015289016101e5565b8181111561021057848a838b0101525b50601f01601f1916969096018701955093860193928601926001016101cb565b50505050506040850151915061025160608501836001600160a01b03169052565b60608501516bffffffffffffffffffffffff1981166080860152915060808501516001600160a01b03811660a08601529150949350505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a804df09f9a806f206ff09f9a804d6ff09f9a804d6f4dc3a94dc3a96f4d2020c3a96f6fc3a96f6f6f4d6f20c3a94dc3a9f09f9a80204d6f6f6f4d6ff09f9a806f20a2646970667358221220a588e7d12f8098ca6e2ed7422ab3c56838dd3ce626600b1dc6d37011a947af3064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_99e0a53c {\n bytes15 s_0;\n string[] s_1;\n address s_2;\n bytes20 s_3;\n address s_4;\n }\n\n function test () public pure returns (S_99e0a53c memory) {\n S_99e0a53c memory r;\n {\n bytes15 r_0 = bytes15(0x4b44bb06994737da68e44f52bd6302);\n r.s_0 = r_0;\n }\n {\n string[] memory r_1 = new string[](1);\n {\n string memory r_1_0 = unicode\"Moo é🚀🚀M🚀o o🚀Mo🚀MoMéMéoM éooéoooMo éMé🚀 MoooMo🚀o \";\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x1ffB4Db2566e7A080180a0341548b6A12E447189;\n r.s_2 = r_2;\n }\n {\n bytes20 r_3 = bytes20(0x881C08FC45E365800B11CB388635Db75A511c065);\n r.s_3 = r_3;\n }\n {\n address r_4 = 0x978DEBC743020A19f0B5027D50f379b1e81E3C29;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000204b44bb06994737da68e44f52bd6302000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000001ffb4db2566e7a080180a0341548b6a12e447189881c08fc45e365800b11cb388635db75a511c065000000000000000000000000000000000000000000000000978debc743020a19f0b5027d50f379b1e81e3c2900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a80f09f9a804df09f9a806f206ff09f9a804d6ff09f9a804d6f4dc3a94dc3a96f4d2020c3a96f6fc3a96f6f6f4d6f20c3a94dc3a9f09f9a80204d6f6f6f4d6ff09f9a806f20000000000000000000000000000000000000" + }, + { + "name": "random-(bytes16[4],bytes4,address[4],string)", + "type": "(bytes16[4],bytes4,address[4],string)", + "value": [ + [ + "0x4fe8ffe8f2da862a1e9bf0d621850774", + "0x66d51bdba3481fec6e8a47270c422b6b", + "0xd39891de9aa490eb8ef8b0645a8178fc", + "0xa484be8b889c4aa9fb8fbe9d629d8af2" + ], + "0x7b404c99", + [ + "0xBDA98a32290087af68918152bbB0F14Ae9dc840d", + "0x509F28473448e40FAFE18c36681608E9285DeC93", + "0x537F1AE19B41F2750CB74fB55234FaCf6Db39de8", + "0x8B69c74130fbAA447c0c684cB785dbAA748BD0f8" + ], + "Moo é🚀o🚀éMooéooo🚀oééooéoMo🚀 o🚀 oooooo🚀 éMMo🚀🚀🚀MM é oM" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x4fe8ffe8f2da862a1e9bf0d621850774" + }, + { + "type": "hexstring", + "value": "0x66d51bdba3481fec6e8a47270c422b6b" + }, + { + "type": "hexstring", + "value": "0xd39891de9aa490eb8ef8b0645a8178fc" + }, + { + "type": "hexstring", + "value": "0xa484be8b889c4aa9fb8fbe9d629d8af2" + } + ] + }, + { + "type": "hexstring", + "value": "0x7b404c99" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xBDA98a32290087af68918152bbB0F14Ae9dc840d" + }, + { + "type": "address", + "value": "0x509F28473448e40FAFE18c36681608E9285DeC93" + }, + { + "type": "address", + "value": "0x537F1AE19B41F2750CB74fB55234FaCf6Db39de8" + }, + { + "type": "address", + "value": "0x8B69c74130fbAA447c0c684cB785dbAA748BD0f8" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀éMooéooo🚀oééooéoMo🚀 o🚀 oooooo🚀 éMMo🚀🚀🚀MM é oM" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610357806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610219565b60405180910390f35b61005661017a565b61005e61017a565b6100666101ae565b6f13fa3ffa3cb6a18a87a6fc35886141dd60821b81526f66d51bdba3481fec6e8a47270c422b6b60801b6020808301919091526f34e62477a6a9243ae3be2c1916a05e3f60821b60408301526f52425f45c44e2554fdc7df4eb14ec57960811b6060830152908252637b404c9960e01b908201526100e26101ae565b73bda98a32290087af68918152bbb0f14ae9dc840d815273509f28473448e40fafe18c36681608e9285dec9360208083019190915273537f1ae19b41f2750cb74fb55234facf6db39de8604080840191909152738b69c74130fbaa447c0c684cb785dbaa748bd0f86060840152838101929092528151608081019092526058808352600092916102ca90830139606083015250919050565b604051806080016040528061018d6101ae565b8152600060208201526040016101a16101ae565b8152602001606081525090565b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b818110156101f2576020818501810151868301820152016101d6565b81811115610204576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825160009190828483015b600482101561025b5782516fffffffffffffffffffffffffffffffff1916815291830191600191909101908301610229565b505050838101516001600160e01b03191660a0840152604084015160c0840160005b60048110156102a35782516001600160a01b03168252918301919083019060010161027d565b505050506060830151610140838101526102c16101608401826101cc565b94935050505056fe4d6f6f20c3a9f09f9a806ff09f9a80c3a94d6f6fc3a96f6f6ff09f9a806fc3a9c3a96f6fc3a96f4d6ff09f9a80206ff09f9a80206f6f6f6f6f6ff09f9a8020c3a94d4d6ff09f9a80f09f9a80f09f9a804d4d20c3a9206f4da2646970667358221220e76cdf28cb895beef547f77a121bba9abc08a59a6b1aed2f58a2bdc950f555cd64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e908b3b4 {\n bytes16[4] s_0;\n bytes4 s_1;\n address[4] s_2;\n string s_3;\n }\n\n function test () public pure returns (S_e908b3b4 memory) {\n S_e908b3b4 memory r;\n {\n bytes16[4] memory r_0;\n {\n bytes16 r_0_0 = bytes16(0x4fe8ffe8f2da862a1e9bf0d621850774);\n r_0[0] = r_0_0;\n }\n {\n bytes16 r_0_1 = bytes16(0x66d51bdba3481fec6e8a47270c422b6b);\n r_0[1] = r_0_1;\n }\n {\n bytes16 r_0_2 = bytes16(0xd39891de9aa490eb8ef8b0645a8178fc);\n r_0[2] = r_0_2;\n }\n {\n bytes16 r_0_3 = bytes16(0xa484be8b889c4aa9fb8fbe9d629d8af2);\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n bytes4 r_1 = bytes4(0x7b404c99);\n r.s_1 = r_1;\n }\n {\n address[4] memory r_2;\n {\n address r_2_0 = 0xBDA98a32290087af68918152bbB0F14Ae9dc840d;\n r_2[0] = r_2_0;\n }\n {\n address r_2_1 = 0x509F28473448e40FAFE18c36681608E9285DeC93;\n r_2[1] = r_2_1;\n }\n {\n address r_2_2 = 0x537F1AE19B41F2750CB74fB55234FaCf6Db39de8;\n r_2[2] = r_2_2;\n }\n {\n address r_2_3 = 0x8B69c74130fbAA447c0c684cB785dbAA748BD0f8;\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀o🚀éMooéooo🚀oééooéoMo🚀 o🚀 oooooo🚀 éMMo🚀🚀🚀MM é oM\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000204fe8ffe8f2da862a1e9bf0d6218507740000000000000000000000000000000066d51bdba3481fec6e8a47270c422b6b00000000000000000000000000000000d39891de9aa490eb8ef8b0645a8178fc00000000000000000000000000000000a484be8b889c4aa9fb8fbe9d629d8af2000000000000000000000000000000007b404c9900000000000000000000000000000000000000000000000000000000000000000000000000000000bda98a32290087af68918152bbb0f14ae9dc840d000000000000000000000000509f28473448e40fafe18c36681608e9285dec93000000000000000000000000537f1ae19b41f2750cb74fb55234facf6db39de80000000000000000000000008b69c74130fbaa447c0c684cb785dbaa748bd0f8000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a806ff09f9a80c3a94d6f6fc3a96f6f6ff09f9a806fc3a9c3a96f6fc3a96f4d6ff09f9a80206ff09f9a80206f6f6f6f6f6ff09f9a8020c3a94d4d6ff09f9a80f09f9a80f09f9a804d4d20c3a9206f4d0000000000000000" + }, + { + "name": "random-(bytes18,address[1],string,uint,string)", + "type": "(bytes18,address[1],string,uint,string)", + "value": [ + "0xdfa6037dedca92fd15f7fe0d6809cdd2c946", + ["0xf2Bba0c16080482086ec493e8cEE8f95f3B670f7"], + "Moo é🚀🚀éoM🚀o🚀éo ", + "29824036562092813953969284122698523368152000906635943331899744199813115955815", + "Moo é🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xdfa6037dedca92fd15f7fe0d6809cdd2c946" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xf2Bba0c16080482086ec493e8cEE8f95f3B670f7" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀éoM🚀o🚀éo " + }, + { + "type": "number", + "value": "29824036562092813953969284122698523368152000906635943331899744199813115955815" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610297806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101c5565b60405180910390f35b610056610124565b61005e610124565b716fd301bef6e5497e8afbff06b404e6e964a360711b815261007e61015a565b73f2bba0c16080482086ec493e8cee8f95f3b670f78152602082810191909152604080518082018252601f81527f4d6f6f20c3a9f09f9a80f09f9a80c3a96f4df09f9a806ff09f9a80c3a96f200081840152818401527f41efce768b5e963569efe5db2f353f918be10bfaf4d1460d06b8007332bc4a6760608401528051808201909152600a8152689adede418753e13f3560b71b918101919091526080820152919050565b6040805160a08101909152600081526020810161013f61015a565b81526020016060815260200160008152602001606081525090565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b8181101561019e57602081850181015186830182015201610182565b818111156101b0576000602083870101525b50601f01601f19169290920160200192915050565b600060208083526dffffffffffffffffffffffffffff1984511681840152808401516040840160005b60018110156102145782516001600160a01b0316825291830191908301906001016101ee565b50505050604083015160a0606084015261023160c0840182610178565b9050606084015160808401526080840151601f198483030160a08501526102588282610178565b9594505050505056fea26469706673582212207526900014d53ab8533e37e70bbe8ca5fb273848d5b32ab096f5054da41a386a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f4345195 {\n bytes18 s_0;\n address[1] s_1;\n string s_2;\n uint256 s_3;\n string s_4;\n }\n\n function test () public pure returns (S_f4345195 memory) {\n S_f4345195 memory r;\n {\n bytes18 r_0 = bytes18(0xdfa6037dedca92fd15f7fe0d6809cdd2c946);\n r.s_0 = r_0;\n }\n {\n address[1] memory r_1;\n {\n address r_1_0 = 0xf2Bba0c16080482086ec493e8cEE8f95f3B670f7;\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀🚀éoM🚀o🚀éo \";\n r.s_2 = r_2;\n }\n {\n uint r_3 = 29824036562092813953969284122698523368152000906635943331899744199813115955815;\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀\";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020dfa6037dedca92fd15f7fe0d6809cdd2c9460000000000000000000000000000000000000000000000000000f2bba0c16080482086ec493e8cee8f95f3b670f700000000000000000000000000000000000000000000000000000000000000a041efce768b5e963569efe5db2f353f918be10bfaf4d1460d06b8007332bc4a6700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a80f09f9a80c3a96f4df09f9a806ff09f9a80c3a96f2000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes21,string[],address,bytes18)[3]", + "type": "(bytes21,string[],address,bytes18)[3]", + "value": [ + [ + "0x0696c84070907f4c36cab93d788f16777594cba9ed", + ["Moo é🚀 Moo🚀éMo🚀MooMé 🚀 éoooéoo", "Moo é🚀🚀éM"], + "0xB07B6d5F9493b9B80c28cc6F5CD6b8E8534eBDFc", + "0x8d6516c692d00049cca103dfdc3817a053ee" + ], + [ + "0x57520ebca95d52669d8208242611ca48fe7ee12661", + [ + "Moo é🚀Mooo 🚀 🚀🚀éé🚀o éoéoM o Mo", + "Moo é🚀 éoMM o🚀🚀oo 🚀ooMééMéoooMé🚀o MooMoM", + "Moo é🚀 M🚀ooM🚀oMéooooM🚀 ooM🚀M o🚀 ooéo🚀MooMo🚀oMoééo éM", + "Moo é🚀" + ], + "0x76D841994DB7b3Af9eA985E0c0Cc5e37Dc8c7B4F", + "0xe53683d04f54d715d6ddc623b2a07b559cbb" + ], + [ + "0x315499a73af0719f1fbb71611bdb3be59f75fb5687", + [ + "Moo é🚀M Moo🚀oéMMoéoMooM 🚀🚀é", + "Moo é🚀o Mé oéooééM 🚀éoéM oM🚀ooé🚀éo🚀oé🚀oo " + ], + "0x09D001f1497eCa3e6410D9Afb8870E1D1147CCD9", + "0x5bf7c5c335280961c9919bcf6c5298cf9963" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x0696c84070907f4c36cab93d788f16777594cba9ed" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 Moo🚀éMo🚀MooMé 🚀 éoooéoo" + }, + { + "type": "string", + "value": "Moo é🚀🚀éM" + } + ] + }, + { + "type": "address", + "value": "0xB07B6d5F9493b9B80c28cc6F5CD6b8E8534eBDFc" + }, + { + "type": "hexstring", + "value": "0x8d6516c692d00049cca103dfdc3817a053ee" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x57520ebca95d52669d8208242611ca48fe7ee12661" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mooo 🚀 🚀🚀éé🚀o éoéoM o Mo" + }, + { + "type": "string", + "value": "Moo é🚀 éoMM o🚀🚀oo 🚀ooMééMéoooMé🚀o MooMoM" + }, + { + "type": "string", + "value": "Moo é🚀 M🚀ooM🚀oMéooooM🚀 ooM🚀M o🚀 ooéo🚀MooMo🚀oMoééo éM" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "address", + "value": "0x76D841994DB7b3Af9eA985E0c0Cc5e37Dc8c7B4F" + }, + { + "type": "hexstring", + "value": "0xe53683d04f54d715d6ddc623b2a07b559cbb" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x315499a73af0719f1fbb71611bdb3be59f75fb5687" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀M Moo🚀oéMMoéoMooM 🚀🚀é" + }, + { + "type": "string", + "value": "Moo é🚀o Mé oéooééM 🚀éoéM oM🚀ooé🚀éo🚀oé🚀oo " + } + ] + }, + { + "type": "address", + "value": "0x09D001f1497eCa3e6410D9Afb8870E1D1147CCD9" + }, + { + "type": "hexstring", + "value": "0x5bf7c5c335280961c9919bcf6c5298cf9963" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506107a3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906104c9565b60405180910390f35b610056610483565b61005e610483565b60408051608081018252606060208083018290526000838501819052828401819052740696c84070907f4c36cab93d788f16777594cba9ed60581b8452845160028082529381019095529293919082015b60608152602001906001900390816100af57905050905060006040518060600160405280602f81526020016106a7602f9139905080826000815181106100f7576100f76105f1565b6020026020010181905250506000604051806040016040528060118152602001704d6f6f20c3a9f09f9a80f09f9a80c3a94d60781b81525090508082600181518110610145576101456105f1565b602090810291909101810191909152838101929092525073b07b6d5f9493b9b80c28cc6f5cd6b8e8534ebdfc6040808401919091527146b28b6349680024e65081efee1c0bd029f760711b60608085019190915292845280516080810182526000808252928101849052908101829052918201527457520ebca95d52669d8208242611ca48fe7ee1266160581b815260408051600480825260a08201909252600091816020015b60608152602001906001900390816101ec57905050905060006040518060600160405280603481526020016106086034913990508082600081518110610234576102346105f1565b60200260200101819052505060006040518060600160405280603f815260200161063c603f913990508082600181518110610271576102716105f1565b602002602001018190525050600060405180608001604052806052815260200161071c60529139905080826002815181106102ae576102ae6105f1565b60200260200101819052505060006040518060400160405280600a8152602001689adede418753e13f3560b71b815250905080826003815181106102f4576102f46105f1565b602090810291909101810191909152830191909152507376d841994db7b3af9ea985e0c0cc5e37dc8c7b4f604082015271e53683d04f54d715d6ddc623b2a07b559cbb60701b6060820152808260016020020152506103746040805160808101825260008082526060602083018190529282018190529181019190915290565b74315499a73af0719f1fbb71611bdb3be59f75fb568760581b815260408051600280825260608201909252600091816020015b60608152602001906001900390816103a757905050905060006040518060600160405280602c815260200161067b602c9139905080826000815181106103ef576103ef6105f1565b60200260200101819052505060006040518060800160405280604681526020016106d6604691399050808260018151811061042c5761042c6105f1565b602090810291909101810191909152830191909152507309d001f1497eca3e6410d9afb8870e1d1147ccd9604080830191909152715bf7c5c335280961c9919bcf6c5298cf996360701b6060830152820152919050565b60405180606001604052806003905b6040805160808101825260008082526060602080840182905293830182905282015282526000199092019101816104925790505090565b60208082526000906080830183820185845b60038110156105e557601f1987850381018452825180516affffffffffffffffffffff19168652868101516080888801819052815190880181905260a0600582901b89018101928a01919089019060005b81811015610594578a8503609f190183528351805180875260005b81811015610565578e81840101518f828a0101528e81019050610547565b818111156105765760008f838a0101525b50601f018816959095018c019450928b0192918b019160010161052c565b5050505060409250828201516105b4848901826001600160a01b03169052565b506060918201516dffffffffffffffffffffffffffff191696909101959095525091840191908401906001016104db565b50919695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d6f6f6f20f09f9a80202020f09f9a80f09f9a80c3a9c3a9f09f9a806f20c3a96fc3a96f4d206f204d6f4d6f6f20c3a9f09f9a802020c3a96f4d4d206ff09f9a80f09f9a806f6f20f09f9a806f6f4dc3a9c3a94dc3a96f6f6f4dc3a9f09f9a806f20204d6f6f4d6f4d4d6f6f20c3a9f09f9a804d20204d6f6ff09f9a806fc3a94d4d6fc3a96f4d6f6f4d20f09f9a80f09f9a80c3a94d6f6f20c3a9f09f9a80204d6f6ff09f9a80c3a94d6ff09f9a804d6f6f4dc3a920f09f9a8020c3a96f6f6fc3a96f6f4d6f6f20c3a9f09f9a806f204dc3a9206fc3a96f6fc3a9c3a94d20f09f9a80c3a96fc3a94d206f4df09f9a806f6fc3a9f09f9a80c3a96ff09f9a806fc3a9f09f9a806f6f20204d6f6f20c3a9f09f9a80204df09f9a806f6f4df09f9a806f4dc3a96f6f6f6f4df09f9a80206f6f4df09f9a804d206ff09f9a80206f6fc3a96ff09f9a804d6f6f4d6ff09f9a806f4d6fc3a9c3a96f20c3a94da264697066735822122052d70bb6360443a7d2cee66d45e79eb5634342e02716341c6f373d051a9847e164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a7e0d24a {\n bytes21 s_0;\n string[] s_1;\n address s_2;\n bytes18 s_3;\n }\n\n function test () public pure returns (S_a7e0d24a[3] memory) {\n S_a7e0d24a[3] memory r;\n {\n S_a7e0d24a memory r_0;\n {\n bytes21 r_0_0 = bytes21(0x0696c84070907f4c36cab93d788f16777594cba9ed);\n r_0.s_0 = r_0_0;\n }\n {\n string[] memory r_0_1 = new string[](2);\n {\n string memory r_0_1_0 = unicode\"Moo é🚀 Moo🚀éMo🚀MooMé 🚀 éoooéoo\";\n r_0_1[0] = r_0_1_0;\n }\n {\n string memory r_0_1_1 = unicode\"Moo é🚀🚀éM\";\n r_0_1[1] = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0xB07B6d5F9493b9B80c28cc6F5CD6b8E8534eBDFc;\n r_0.s_2 = r_0_2;\n }\n {\n bytes18 r_0_3 = bytes18(0x8d6516c692d00049cca103dfdc3817a053ee);\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_a7e0d24a memory r_1;\n {\n bytes21 r_1_0 = bytes21(0x57520ebca95d52669d8208242611ca48fe7ee12661);\n r_1.s_0 = r_1_0;\n }\n {\n string[] memory r_1_1 = new string[](4);\n {\n string memory r_1_1_0 = unicode\"Moo é🚀Mooo 🚀 🚀🚀éé🚀o éoéoM o Mo\";\n r_1_1[0] = r_1_1_0;\n }\n {\n string memory r_1_1_1 = unicode\"Moo é🚀 éoMM o🚀🚀oo 🚀ooMééMéoooMé🚀o MooMoM\";\n r_1_1[1] = r_1_1_1;\n }\n {\n string memory r_1_1_2 = unicode\"Moo é🚀 M🚀ooM🚀oMéooooM🚀 ooM🚀M o🚀 ooéo🚀MooMo🚀oMoééo éM\";\n r_1_1[2] = r_1_1_2;\n }\n {\n string memory r_1_1_3 = unicode\"Moo é🚀\";\n r_1_1[3] = r_1_1_3;\n }\n r_1.s_1 = r_1_1;\n }\n {\n address r_1_2 = 0x76D841994DB7b3Af9eA985E0c0Cc5e37Dc8c7B4F;\n r_1.s_2 = r_1_2;\n }\n {\n bytes18 r_1_3 = bytes18(0xe53683d04f54d715d6ddc623b2a07b559cbb);\n r_1.s_3 = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_a7e0d24a memory r_2;\n {\n bytes21 r_2_0 = bytes21(0x315499a73af0719f1fbb71611bdb3be59f75fb5687);\n r_2.s_0 = r_2_0;\n }\n {\n string[] memory r_2_1 = new string[](2);\n {\n string memory r_2_1_0 = unicode\"Moo é🚀M Moo🚀oéMMoéoMooM 🚀🚀é\";\n r_2_1[0] = r_2_1_0;\n }\n {\n string memory r_2_1_1 = unicode\"Moo é🚀o Mé oéooééM 🚀éoéM oM🚀ooé🚀éo🚀oé🚀oo \";\n r_2_1[1] = r_2_1_1;\n }\n r_2.s_1 = r_2_1;\n }\n {\n address r_2_2 = 0x09D001f1497eCa3e6410D9Afb8870E1D1147CCD9;\n r_2.s_2 = r_2_2;\n }\n {\n bytes18 r_2_3 = bytes18(0x5bf7c5c335280961c9919bcf6c5298cf9963);\n r_2.s_3 = r_2_3;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000004800696c84070907f4c36cab93d788f16777594cba9ed00000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000b07b6d5f9493b9b80c28cc6f5cd6b8e8534ebdfc8d6516c692d00049cca103dfdc3817a053ee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a80204d6f6ff09f9a80c3a94d6ff09f9a804d6f6f4dc3a920f09f9a8020c3a96f6f6fc3a96f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a80f09f9a80c3a94d00000000000000000000000000000057520ebca95d52669d8208242611ca48fe7ee126610000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000076d841994db7b3af9ea985e0c0cc5e37dc8c7b4fe53683d04f54d715d6ddc623b2a07b559cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a804d6f6f6f20f09f9a80202020f09f9a80f09f9a80c3a9c3a9f09f9a806f20c3a96fc3a96f4d206f204d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a802020c3a96f4d4d206ff09f9a80f09f9a806f6f20f09f9a806f6f4dc3a9c3a94dc3a96f6f6f4dc3a9f09f9a806f20204d6f6f4d6f4d0000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a80204df09f9a806f6f4df09f9a806f4dc3a96f6f6f6f4df09f9a80206f6f4df09f9a804d206ff09f9a80206f6fc3a96ff09f9a804d6f6f4d6ff09f9a806f4d6fc3a9c3a96f20c3a94d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000315499a73af0719f1fbb71611bdb3be59f75fb56870000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000009d001f1497eca3e6410d9afb8870e1d1147ccd95bf7c5c335280961c9919bcf6c5298cf996300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002c4d6f6f20c3a9f09f9a804d20204d6f6ff09f9a806fc3a94d4d6fc3a96f4d6f6f4d20f09f9a80f09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a806f204dc3a9206fc3a96f6fc3a9c3a94d20f09f9a80c3a96fc3a94d206f4df09f9a806f6fc3a9f09f9a80c3a96ff09f9a806fc3a9f09f9a806f6f20200000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes23[],string,int96,string,bytes9)", + "type": "(bytes23[],string,int96,string,bytes9)", + "value": [ + [ + "0x43affa1d5108d37775c0a9e3f37e7768a4647a22d718f1", + "0x5a08aa465b435726b0ad8004918469c9457e60df1da59e", + "0x7526a1fcc889ca6a0a09694986ada763d1df79dc8e14e9", + "0x8792abf7c2d65829287352b0727c1044f4f304ba48d2c6" + ], + "Moo é🚀 o oéM é🚀ooé🚀MMo ", + "-25648947920418256133829501371", + "Moo é🚀Mo🚀 🚀🚀ééo ooo", + "0x251c295d2bc017e5f1" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x43affa1d5108d37775c0a9e3f37e7768a4647a22d718f1" + }, + { + "type": "hexstring", + "value": "0x5a08aa465b435726b0ad8004918469c9457e60df1da59e" + }, + { + "type": "hexstring", + "value": "0x7526a1fcc889ca6a0a09694986ada763d1df79dc8e14e9" + }, + { + "type": "hexstring", + "value": "0x8792abf7c2d65829287352b0727c1044f4f304ba48d2c6" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 o oéM é🚀ooé🚀MMo " + }, + { + "type": "number", + "value": "-25648947920418256133829501371" + }, + { + "type": "string", + "value": "Moo é🚀Mo🚀 🚀🚀ééo ooo" + }, + { + "type": "hexstring", + "value": "0x251c295d2bc017e5f1" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610437806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102da565b60405180910390f35b6040805160a08101825260608082526020820181905260009282018390528082015260808101919091526040805160a081018252606080825260208201819052600092820183905280820152608081019190915260408051600480825260a08201909252600091816020016020820280368337505081519192507f43affa1d5108d37775c0a9e3f37e7768a4647a22d718f10000000000000000009182915083906000906100fe576100fe6103a4565b68ffffffffffffffffff19909216602092830291909101909101525080517f5a08aa465b435726b0ad8004918469c9457e60df1da59e00000000000000000090819083906001908110610153576101536103a4565b68ffffffffffffffffff19909216602092830291909101909101525080517f7526a1fcc889ca6a0a09694986ada763d1df79dc8e14e9000000000000000000908190839060029081106101a8576101a86103a4565b68ffffffffffffffffff19909216602092830291909101909101525080517f8792abf7c2d65829287352b0727c1044f4f304ba48d2c6000000000000000000908190839060039081106101fd576101fd6103a4565b68ffffffffffffffffff1990921660209283029190910182015291835250604080516060810190915260258082526000926103bb908301396020808401919091526b52e04ffcdd3f99c7234921ba1960408085019190915280516060810190915260228082526000935090916103e09083013960608301525068251c295d2bc017e5f160b81b6080820152919050565b6000815180845260005b818110156102b357602081850181015186830182015201610297565b818111156102c5576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825160a083830152805160c0840181905260009291820190839060e08601905b8083101561032b57835168ffffffffffffffffff191682529284019260019290920191908401906102ff565b50838701519350601f1992508286820301604087015261034b818561028d565b9350505060408501516103636060860182600b0b9052565b5060608501518185840301608086015261037d838261028d565b92505050608084015161039c60a08501826001600160b81b0319169052565b509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80206f206fc3a94d2020c3a9f09f9a806f6fc3a9f09f9a804d4d6f204d6f6f20c3a9f09f9a804d6ff09f9a8020f09f9a80f09f9a80c3a9c3a96f206f6f6fa2646970667358221220d194e72c76fe6a59792ca0cac42c897c44a5532d41a2c879b0172055d163e1b364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_18ca8a5a {\n bytes23[] s_0;\n string s_1;\n int96 s_2;\n string s_3;\n bytes9 s_4;\n }\n\n function test () public pure returns (S_18ca8a5a memory) {\n S_18ca8a5a memory r;\n {\n bytes23[] memory r_0 = new bytes23[](4);\n {\n bytes23 r_0_0 = bytes23(0x43affa1d5108d37775c0a9e3f37e7768a4647a22d718f1);\n r_0[0] = r_0_0;\n }\n {\n bytes23 r_0_1 = bytes23(0x5a08aa465b435726b0ad8004918469c9457e60df1da59e);\n r_0[1] = r_0_1;\n }\n {\n bytes23 r_0_2 = bytes23(0x7526a1fcc889ca6a0a09694986ada763d1df79dc8e14e9);\n r_0[2] = r_0_2;\n }\n {\n bytes23 r_0_3 = bytes23(0x8792abf7c2d65829287352b0727c1044f4f304ba48d2c6);\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀 o oéM é🚀ooé🚀MMo \";\n r.s_1 = r_1;\n }\n {\n int96 r_2 = -25648947920418256133829501371;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀Mo🚀 🚀🚀ééo ooo\";\n r.s_3 = r_3;\n }\n {\n bytes9 r_4 = bytes9(0x251c295d2bc017e5f1);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140ffffffffffffffffffffffffffffffffffffffffad1fb00322c06638dcb6de4500000000000000000000000000000000000000000000000000000000000001a0251c295d2bc017e5f10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000443affa1d5108d37775c0a9e3f37e7768a4647a22d718f10000000000000000005a08aa465b435726b0ad8004918469c9457e60df1da59e0000000000000000007526a1fcc889ca6a0a09694986ada763d1df79dc8e14e90000000000000000008792abf7c2d65829287352b0727c1044f4f304ba48d2c600000000000000000000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a80206f206fc3a94d2020c3a9f09f9a806f6fc3a9f09f9a804d4d6f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a804d6ff09f9a8020f09f9a80f09f9a80c3a9c3a96f206f6f6f000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes25,bool,address,bool[][2])", + "type": "(bytes25,bool,address,bool[][2])", + "value": [ + "0x2aa99d8598dac6b568683570464f47006fa62bca88a3c4cf03", + false, + "0x953289966DaE43Cae8abDB6BAbb8c62F9567c8fE", + [[true, true, true], []] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x2aa99d8598dac6b568683570464f47006fa62bca88a3c4cf03" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x953289966DaE43Cae8abDB6BAbb8c62F9567c8fE" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102c7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101c5565b60405180910390f35b610056610170565b61005e610170565b7f2aa99d8598dac6b568683570464f47006fa62bca88a3c4cf030000000000000081526000602082015273953289966dae43cae8abdb6babb8c62f9567c8fe60408201526100aa61019e565b604080516003808252608082019092526000916020820160608036833701905050905060006001905080826000815181106100e7576100e761027b565b6020026020010190151590811515815250505060006001905080826001815181106101145761011461027b565b6020026020010190151590811515815250505060006001905080826002815181106101415761014161027b565b911515602092830291909101820152918352506040805160008152808301909152908201526060820152919050565b60408051608081018252600080825260208201819052918101919091526060810161019961019e565b905290565b60405180604001604052806002905b60608152602001906001900390816101ad5790505090565b6020808252825166ffffffffffffff1916828201528281015115156040808401919091528301516001600160a01b03166060808401919091528301516080808401526000919060e084019060a0850184805b600281101561026e57878503609f19018352835180518087529087019087870190845b8181101561025857835115158352928901929189019160010161023a565b5090965050509285019291850191600101610217565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfea264697066735822122012c198d96ccfbb2e314e7fa936e6cbd895d94e9d1896354492e36523a8df927f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_3b705bd7 {\n bytes25 s_0;\n bool s_1;\n address s_2;\n bool[][2] s_3;\n }\n\n function test () public pure returns (S_3b705bd7 memory) {\n S_3b705bd7 memory r;\n {\n bytes25 r_0 = bytes25(0x2aa99d8598dac6b568683570464f47006fa62bca88a3c4cf03);\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x953289966DaE43Cae8abDB6BAbb8c62F9567c8fE;\n r.s_2 = r_2;\n }\n {\n bool[][2] memory r_3;\n {\n bool[] memory r_3_0 = new bool[](3);\n {\n bool r_3_0_0 = true;\n r_3_0[0] = r_3_0_0;\n }\n {\n bool r_3_0_1 = true;\n r_3_0[1] = r_3_0_1;\n }\n {\n bool r_3_0_2 = true;\n r_3_0[2] = r_3_0_2;\n }\n r_3[0] = r_3_0;\n }\n {\n bool[] memory r_3_1 = new bool[](0);\n r_3[1] = r_3_1;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000202aa99d8598dac6b568683570464f47006fa62bca88a3c4cf03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000953289966dae43cae8abdb6babb8c62f9567c8fe0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes28[4],bytes9,bool,bool)[]", + "type": "(bytes28[4],bytes9,bool,bool)[]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101a9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906100d6565b60405180910390f35b604080516000808252602082019092526060919081610083565b61007061008a565b8152602001906001900390816100685790505b5092915050565b604051806080016040528061009d6100b8565b81526000602082018190526040820181905260609091015290565b60405180608001604052806004906020820280368337509192915050565b60208082528251828201819052600091906040908185019086840185805b83811015610165578251805186845b600481101561012757825163ffffffff19168252918a0191908a0190600101610103565b505050808801516001600160b81b031916608087015286810151151560a087015260600151151560c086015260e090940193918601916001016100f4565b50929897505050505050505056fea2646970667358221220af9dbec05b04e98031388c0363b91fb55f0e80bf1cd0cc612f6f769d3ae4921364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_356103e3 {\n bytes28[4] s_0;\n bytes9 s_1;\n bool s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_356103e3[] memory) {\n S_356103e3[] memory r = new S_356103e3[](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes32,(bytes16,bytes10),bool,string)[4]", + "type": "(bytes32,(bytes16,bytes10),bool,string)[4]", + "value": [ + [ + "0x4c309b1257999edb4c3b2add54e6e15938ab322b148a6bd1c9dbd7f845d9f3fc", + ["0x12e44cdf2bc7304a74069b452e95869f", "0x79fd757d30cd4175945b"], + true, + "Moo é🚀🚀o🚀🚀 o M" + ], + [ + "0xfcf0f2a80285793dd502c0d06511966e6a2003d6ee2c8839bb4749e2f69362dd", + ["0x4146961945f690d7cbccdf1a1e6d6b12", "0xa3637a7b3ffd414dabd4"], + true, + "Moo é🚀" + ], + [ + "0xce7b8f6cfb77936d02f4482fc39d60364a040cbe3fc0dd20e6a91c185eecc817", + ["0xcb923a9cf1131d773012366daef8626a", "0x1cb2a16aea6bf9f6a5e4"], + false, + "Moo é🚀oMé oo 🚀🚀M o M" + ], + [ + "0x11a579263a53eaac3c0319e1d919c0da741869ee43582e3af46bfc7f8014d6fe", + ["0xbb24b9641ecbf71f1d8cef0391c91937", "0x99be2b961e88ae83650a"], + true, + "Moo é🚀 Mo🚀🚀🚀MéM🚀🚀🚀oM🚀o🚀 MoéM o" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x4c309b1257999edb4c3b2add54e6e15938ab322b148a6bd1c9dbd7f845d9f3fc" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x12e44cdf2bc7304a74069b452e95869f" + }, + { + "type": "hexstring", + "value": "0x79fd757d30cd4175945b" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀🚀o🚀🚀 o M" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xfcf0f2a80285793dd502c0d06511966e6a2003d6ee2c8839bb4749e2f69362dd" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x4146961945f690d7cbccdf1a1e6d6b12" + }, + { + "type": "hexstring", + "value": "0xa3637a7b3ffd414dabd4" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xce7b8f6cfb77936d02f4482fc39d60364a040cbe3fc0dd20e6a91c185eecc817" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xcb923a9cf1131d773012366daef8626a" + }, + { + "type": "hexstring", + "value": "0x1cb2a16aea6bf9f6a5e4" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀oMé oo 🚀🚀M o M" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x11a579263a53eaac3c0319e1d919c0da741869ee43582e3af46bfc7f8014d6fe" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xbb24b9641ecbf71f1d8cef0391c91937" + }, + { + "type": "hexstring", + "value": "0x99be2b961e88ae83650a" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀 Mo🚀🚀🚀MéM🚀🚀🚀oM🚀o🚀 MoéM o" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061049c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061034d565b60405180910390f35b6100566102df565b61005e6102df565b61006661030c565b7f4c309b1257999edb4c3b2add54e6e15938ab322b148a6bd1c9dbd7f845d9f3fc81526040805180820182526f12e44cdf2bc7304a74069b452e95869f60801b81526979fd757d30cd4175945b60b01b602080830191909152808401919091526001828401528151808301909252601b82527f4d6f6f20c3a9f09f9a80f09f9a806ff09f9a80f09f9a80206f204d0000000000908201526060820152815261010c61030c565b7ffcf0f2a80285793dd502c0d06511966e6a2003d6ee2c8839bb4749e2f69362dd81526040805180820182526f20a34b0ca2fb486be5e66f8d0f36b58960811b81526928d8de9ecfff50536af560b21b602080830191909152808401919091526001828401528151808301909252600a8252689adede418753e13f3560b71b8282015260608301919091528201526101a261030c565b7fce7b8f6cfb77936d02f4482fc39d60364a040cbe3fc0dd20e6a91c185eecc81781526040805180820182526f65c91d4e78898ebb98091b36d77c313560811b815269072ca85aba9afe7da97960b21b6020808301919091528084019190915260008284015281518083018352601f81527f4d6f6f20c3a9f09f9a806f4dc3a9206f6f20f09f9a80f09f9a804d206f204d0091810191909152606083015282015261024b61030c565b7f11a579263a53eaac3c0319e1d919c0da741869ee43582e3af46bfc7f8014d6fe81526040805180820182526fbb24b9641ecbf71f1d8cef0391c9193760801b8152694cdf15cb0f445741b28560b11b60208083019190915280840191909152600182840152815160608101909252603d8083526000929161042a9083013960608301525080826003602002015250919050565b60405180608001604052806004905b6102f661030c565b8152602001906001900390816102ee5790505090565b60408051608081019091526000815260208101610339604080518082019091526000808252602082015290565b815260006020820152606060409091015290565b602080825260009060a08382018185018685805b600481101561041b57601f19898503810186528351805186528881015180516fffffffffffffffffffffffffffffffff19168a8801528901516001600160b01b03191660408088019190915281015115156060808801919091520151608086018890528051888701819052845b818110156103ea578281018b015188820160c001528a016103ce565b818111156103fb578560c0838a0101525b5096890196601f019091169490940160c001935091860191600101610361565b50919897505050505050505056fe4d6f6f20c3a9f09f9a8020204d6ff09f9a80f09f9a80f09f9a804dc3a94df09f9a80f09f9a80f09f9a806f4df09f9a806ff09f9a80204d6fc3a94d206fa26469706673582212207dd0a0ff3a9d1f0ae5178fc64310a94379fd80a10e2b0cb3f9b6a39d1d9b1baf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_03b955f2 {\n bytes16 s_0;\n bytes10 s_1;\n }\n\n struct S_ab215509 {\n bytes32 s_0;\n S_03b955f2 s_1;\n bool s_2;\n string s_3;\n }\n\n function test () public pure returns (S_ab215509[4] memory) {\n S_ab215509[4] memory r;\n {\n S_ab215509 memory r_0;\n {\n bytes32 r_0_0 = bytes32(0x4c309b1257999edb4c3b2add54e6e15938ab322b148a6bd1c9dbd7f845d9f3fc);\n r_0.s_0 = r_0_0;\n }\n {\n S_03b955f2 memory r_0_1;\n {\n bytes16 r_0_1_0 = bytes16(0x12e44cdf2bc7304a74069b452e95869f);\n r_0_1.s_0 = r_0_1_0;\n }\n {\n bytes10 r_0_1_1 = bytes10(0x79fd757d30cd4175945b);\n r_0_1.s_1 = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀🚀o🚀🚀 o M\";\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_ab215509 memory r_1;\n {\n bytes32 r_1_0 = bytes32(0xfcf0f2a80285793dd502c0d06511966e6a2003d6ee2c8839bb4749e2f69362dd);\n r_1.s_0 = r_1_0;\n }\n {\n S_03b955f2 memory r_1_1;\n {\n bytes16 r_1_1_0 = bytes16(0x4146961945f690d7cbccdf1a1e6d6b12);\n r_1_1.s_0 = r_1_1_0;\n }\n {\n bytes10 r_1_1_1 = bytes10(0xa3637a7b3ffd414dabd4);\n r_1_1.s_1 = r_1_1_1;\n }\n r_1.s_1 = r_1_1;\n }\n {\n bool r_1_2 = true;\n r_1.s_2 = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀\";\n r_1.s_3 = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_ab215509 memory r_2;\n {\n bytes32 r_2_0 = bytes32(0xce7b8f6cfb77936d02f4482fc39d60364a040cbe3fc0dd20e6a91c185eecc817);\n r_2.s_0 = r_2_0;\n }\n {\n S_03b955f2 memory r_2_1;\n {\n bytes16 r_2_1_0 = bytes16(0xcb923a9cf1131d773012366daef8626a);\n r_2_1.s_0 = r_2_1_0;\n }\n {\n bytes10 r_2_1_1 = bytes10(0x1cb2a16aea6bf9f6a5e4);\n r_2_1.s_1 = r_2_1_1;\n }\n r_2.s_1 = r_2_1;\n }\n {\n bool r_2_2 = false;\n r_2.s_2 = r_2_2;\n }\n {\n string memory r_2_3 = unicode\"Moo é🚀oMé oo 🚀🚀M o M\";\n r_2.s_3 = r_2_3;\n }\n r[2] = r_2;\n }\n {\n S_ab215509 memory r_3;\n {\n bytes32 r_3_0 = bytes32(0x11a579263a53eaac3c0319e1d919c0da741869ee43582e3af46bfc7f8014d6fe);\n r_3.s_0 = r_3_0;\n }\n {\n S_03b955f2 memory r_3_1;\n {\n bytes16 r_3_1_0 = bytes16(0xbb24b9641ecbf71f1d8cef0391c91937);\n r_3_1.s_0 = r_3_1_0;\n }\n {\n bytes10 r_3_1_1 = bytes10(0x99be2b961e88ae83650a);\n r_3_1.s_1 = r_3_1_1;\n }\n r_3.s_1 = r_3_1;\n }\n {\n bool r_3_2 = true;\n r_3.s_2 = r_3_2;\n }\n {\n string memory r_3_3 = unicode\"Moo é🚀 Mo🚀🚀🚀MéM🚀🚀🚀oM🚀o🚀 MoéM o\";\n r_3.s_3 = r_3_3;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000003204c309b1257999edb4c3b2add54e6e15938ab322b148a6bd1c9dbd7f845d9f3fc12e44cdf2bc7304a74069b452e95869f0000000000000000000000000000000079fd757d30cd4175945b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a80f09f9a806ff09f9a80f09f9a80206f204d0000000000fcf0f2a80285793dd502c0d06511966e6a2003d6ee2c8839bb4749e2f69362dd4146961945f690d7cbccdf1a1e6d6b1200000000000000000000000000000000a3637a7b3ffd414dabd400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000ce7b8f6cfb77936d02f4482fc39d60364a040cbe3fc0dd20e6a91c185eecc817cb923a9cf1131d773012366daef8626a000000000000000000000000000000001cb2a16aea6bf9f6a5e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a806f4dc3a9206f6f20f09f9a80f09f9a804d206f204d0011a579263a53eaac3c0319e1d919c0da741869ee43582e3af46bfc7f8014d6febb24b9641ecbf71f1d8cef0391c919370000000000000000000000000000000099be2b961e88ae83650a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a8020204d6ff09f9a80f09f9a80f09f9a804dc3a94df09f9a80f09f9a80f09f9a806f4df09f9a806ff09f9a80204d6fc3a94d206f000000" + }, + { + "name": "random-(bytes32,address,bool,string)[1][2]", + "type": "(bytes32,address,bool,string)[1][2]", + "value": [ + [ + [ + "0x03247f80a2fb8d5ef767924749fd777ca5d1c805f6d28bd35393c4239ab10a50", + "0x172Eb83128843DfF3A2fb9b49899ACee07fe281d", + false, + "Moo é🚀éoé M🚀é🚀🚀o oMé🚀🚀🚀 M MéMoMM🚀oo 🚀o M o🚀" + ] + ], + [ + [ + "0x104c7a3a3937fb91de554c68fc992213218d90d447a8c6ec66f5b0879a35896d", + "0x3073a2d668F041Bd8c91c0D235109e98C8996232", + true, + "Moo é🚀M M o🚀éoéooMMo🚀 ooé" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x03247f80a2fb8d5ef767924749fd777ca5d1c805f6d28bd35393c4239ab10a50" + }, + { + "type": "address", + "value": "0x172Eb83128843DfF3A2fb9b49899ACee07fe281d" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀éoé M🚀é🚀🚀o oMé🚀🚀🚀 M MéMoMM🚀oo 🚀o M o🚀" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x104c7a3a3937fb91de554c68fc992213218d90d447a8c6ec66f5b0879a35896d" + }, + { + "type": "address", + "value": "0x3073a2d668F041Bd8c91c0D235109e98C8996232" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀M M o🚀éoéooMMo🚀 ooé" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610377806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101e2565b60405180910390f35b610056610170565b61005e610170565b61006661019d565b604080516080808201835260008284018190526060808401527f03247f80a2fb8d5ef767924749fd777ca5d1c805f6d28bd35393c4239ab10a50835273172eb83128843dff3a2fb9b49899acee07fe281d6020808501919091528451928301909452605080835292939092906102cc90830139606083015250815281526100eb61019d565b6040805160808101825260608082018190527f104c7a3a3937fb91de554c68fc992213218d90d447a8c6ec66f5b0879a35896d8252733073a2d668f041bd8c91c0d235109e98c89962326020808401919091526001838501528351918201909352602680825291926000929061031c9083013960608301525081526020820152919050565b60405180604001604052806002905b61018761019d565b81526020019060019003908161017f5790505090565b60405180602001604052806001905b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816101ac5790505090565b6020808252600090606083820181850186855b60028110156102be57601f198884038101855282518488810160005b60018110156102a85787820383528351805183528b8101516001600160a01b03168c8401526040808201511515908401528a015160808b840181905281519084018190526000905b80821015610277578282018e015185830160a00152908d0190610259565b8082111561028957600060a082870101525b958d0195948d0194601f0187169390930160a001925050600101610211565b50968901969550505091860191506001016101f5565b509097965050505050505056fe4d6f6f20c3a9f09f9a80c3a96fc3a9204df09f9a80c3a9f09f9a80f09f9a806f206f4dc3a9f09f9a80f09f9a80f09f9a8020204d204dc3a94d6f4d4df09f9a806f6f20f09f9a806f204d206ff09f9a804d6f6f20c3a9f09f9a804d204d206ff09f9a80c3a96fc3a96f6f4d4d6ff09f9a80206f6fc3a9a2646970667358221220aede36fb30f7edd42a54f6e7f842d67babf2522604370afb9f4eb85b905c4ead64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c2175048 {\n bytes32 s_0;\n address s_1;\n bool s_2;\n string s_3;\n }\n\n function test () public pure returns (S_c2175048[1][2] memory) {\n S_c2175048[1][2] memory r;\n {\n S_c2175048[1] memory r_0;\n {\n S_c2175048 memory r_0_0;\n {\n bytes32 r_0_0_0 = bytes32(0x03247f80a2fb8d5ef767924749fd777ca5d1c805f6d28bd35393c4239ab10a50);\n r_0_0.s_0 = r_0_0_0;\n }\n {\n address r_0_0_1 = 0x172Eb83128843DfF3A2fb9b49899ACee07fe281d;\n r_0_0.s_1 = r_0_0_1;\n }\n {\n bool r_0_0_2 = false;\n r_0_0.s_2 = r_0_0_2;\n }\n {\n string memory r_0_0_3 = unicode\"Moo é🚀éoé M🚀é🚀🚀o oMé🚀🚀🚀 M MéMoMM🚀oo 🚀o M o🚀\";\n r_0_0.s_3 = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_c2175048[1] memory r_1;\n {\n S_c2175048 memory r_1_0;\n {\n bytes32 r_1_0_0 = bytes32(0x104c7a3a3937fb91de554c68fc992213218d90d447a8c6ec66f5b0879a35896d);\n r_1_0.s_0 = r_1_0_0;\n }\n {\n address r_1_0_1 = 0x3073a2d668F041Bd8c91c0D235109e98C8996232;\n r_1_0.s_1 = r_1_0_1;\n }\n {\n bool r_1_0_2 = true;\n r_1_0.s_2 = r_1_0_2;\n }\n {\n string memory r_1_0_3 = unicode\"Moo é🚀M M o🚀éoéooMMo🚀 ooé\";\n r_1_0.s_3 = r_1_0_3;\n }\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000002003247f80a2fb8d5ef767924749fd777ca5d1c805f6d28bd35393c4239ab10a50000000000000000000000000172eb83128843dff3a2fb9b49899acee07fe281d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a80c3a96fc3a9204df09f9a80c3a9f09f9a80f09f9a806f206f4dc3a9f09f9a80f09f9a80f09f9a8020204d204dc3a94d6f4d4df09f9a806f6f20f09f9a806f204d206ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020104c7a3a3937fb91de554c68fc992213218d90d447a8c6ec66f5b0879a35896d0000000000000000000000003073a2d668f041bd8c91c0d235109e98c89962320000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a804d204d206ff09f9a80c3a96fc3a96f6f4d4d6ff09f9a80206f6fc3a90000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes32[],(string,bool),bool,address)", + "type": "(bytes32[],(string,bool),bool,address)", + "value": [ + [], + ["Moo é🚀 oM o 🚀 🚀ooo éMoo🚀🚀oéM🚀Méoé", false], + true, + "0xc5daaCe1cF7e54aa9317A242B23c7d8D3c66FE9D" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oM o 🚀 🚀ooo éMoo🚀🚀oéM🚀Méoé" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xc5daaCe1cF7e54aa9317A242B23c7d8D3c66FE9D" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610283806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061017f565b60405180910390f35b6100566100d8565b61005e6100d8565b6040805160008082526020820190925282525060408051808201909152606081526000602082015260006040518060600160405280603881526020016102166038913982525060006020808301919091528201526001604082015273c5daace1cf7e54aa9317a242b23c7d8d3c66fe9d6060820152919050565b6040518060800160405280606081526020016101096040518060400160405280606081526020016000151581525090565b815260006020820181905260409091015290565b6000815160408452805180604086015260005b8181101561014d5760208184018101516060888401015201610130565b8181111561015f576000606083880101525b506020938401511515938501939093525050601f01601f19160160600190565b60208082528251608083830152805160a0840181905260009291820190839060c08601905b808310156101c457835182529284019260019290920191908401906101a4565b5092860151858403601f19016040870152926101e0818561011d565b935050505060408401516101f8606085018215159052565b5060608401516001600160a01b038116608085015250939250505056fe4d6f6f20c3a9f09f9a80206f4d206f20f09f9a8020f09f9a806f6f6f20c3a94d6f6ff09f9a80f09f9a806fc3a94df09f9a804dc3a96fc3a9a2646970667358221220947b3c88ef99916f1ef9a42ad5c862966255b41be3216ab3e76c9111ee6d93e264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fc3be6c5 {\n string s_0;\n bool s_1;\n }\n\n struct S_918316a5 {\n bytes32[] s_0;\n S_fc3be6c5 s_1;\n bool s_2;\n address s_3;\n }\n\n function test () public pure returns (S_918316a5 memory) {\n S_918316a5 memory r;\n {\n bytes32[] memory r_0 = new bytes32[](0);\n r.s_0 = r_0;\n }\n {\n S_fc3be6c5 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀 oM o 🚀 🚀ooo éMoo🚀🚀oéM🚀Méoé\";\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xc5daaCe1cF7e54aa9317A242B23c7d8D3c66FE9D;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c5daace1cf7e54aa9317a242b23c7d8d3c66fe9d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a80206f4d206f20f09f9a8020f09f9a806f6f6f20c3a94d6f6ff09f9a80f09f9a806fc3a94df09f9a804dc3a96fc3a90000000000000000" + }, + { + "name": "random-(bytes5,int40,address,bool,address[4])", + "type": "(bytes5,int40,address,bool,address[4])", + "value": [ + "0xfc759af65e", + "259170818151", + "0x3355b650eE38c9E6fdD4DC7f5a61220A34E05590", + false, + [ + "0xCC6BeA011d74662A83b0e7c59C739e273e054335", + "0x2ABeCfAC541c820be3aE3096E8FBB6Fd65D5bFD1", + "0x2d5e6056e043711e7C767AFBaF82F56421C6B4b3", + "0x311Aa2393001e116D976d5781661c2ACf2245bfa" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xfc759af65e" + }, + { + "type": "number", + "value": "259170818151" + }, + { + "type": "address", + "value": "0x3355b650eE38c9E6fdD4DC7f5a61220A34E05590" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xCC6BeA011d74662A83b0e7c59C739e273e054335" + }, + { + "type": "address", + "value": "0x2ABeCfAC541c820be3aE3096E8FBB6Fd65D5bFD1" + }, + { + "type": "address", + "value": "0x2d5e6056e043711e7C767AFBaF82F56421C6B4b3" + }, + { + "type": "address", + "value": "0x311Aa2393001e116D976d5781661c2ACf2245bfa" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610216806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061015f565b60405180910390f35b61005661010c565b61005e61010c565b647e3acd7b2f60d91b8152643c57c8d8676020820152733355b650ee38c9e6fdd4dc7f5a61220a34e0559060408201526000606082015261009d610141565b73cc6bea011d74662a83b0e7c59c739e273e0543358152732abecfac541c820be3ae3096e8fbb6fd65d5bfd16020820152732d5e6056e043711e7c767afbaf82f56421c6b4b3604082015273311aa2393001e116d976d5781661c2acf2245bfa60608201526080820152919050565b6040805160a08101825260008082526020820181905291810182905260608101919091526080810161013c610141565b905290565b60405180608001604052806004906020820280368337509192915050565b81516001600160d81b0319168152602080830151600490810b828401526040808501516001600160a01b03908116918501919091526060808601511515908501526080808601516101008601949390929091860160005b838110156101d45784518316825293850193908501906001016101b6565b5050505050509291505056fea26469706673582212202634a2862d4d52d95aef190537f90d041e9bb97760c0836dd028d9c7fe364d9f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e2c8e2cd {\n bytes5 s_0;\n int40 s_1;\n address s_2;\n bool s_3;\n address[4] s_4;\n }\n\n function test () public pure returns (S_e2c8e2cd memory) {\n S_e2c8e2cd memory r;\n {\n bytes5 r_0 = bytes5(0xfc759af65e);\n r.s_0 = r_0;\n }\n {\n int40 r_1 = 259170818151;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x3355b650eE38c9E6fdD4DC7f5a61220A34E05590;\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n {\n address[4] memory r_4;\n {\n address r_4_0 = 0xCC6BeA011d74662A83b0e7c59C739e273e054335;\n r_4[0] = r_4_0;\n }\n {\n address r_4_1 = 0x2ABeCfAC541c820be3aE3096E8FBB6Fd65D5bFD1;\n r_4[1] = r_4_1;\n }\n {\n address r_4_2 = 0x2d5e6056e043711e7C767AFBaF82F56421C6B4b3;\n r_4[2] = r_4_2;\n }\n {\n address r_4_3 = 0x311Aa2393001e116D976d5781661c2ACf2245bfa;\n r_4[3] = r_4_3;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0xfc759af65e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c57c8d8670000000000000000000000003355b650ee38c9e6fdd4dc7f5a61220a34e055900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc6bea011d74662a83b0e7c59c739e273e0543350000000000000000000000002abecfac541c820be3ae3096e8fbb6fd65d5bfd10000000000000000000000002d5e6056e043711e7c767afbaf82f56421c6b4b3000000000000000000000000311aa2393001e116d976d5781661c2acf2245bfa" + }, + { + "name": "random-(bytes9,(bytes3,address),int112,bytes20,uint104)", + "type": "(bytes9,(bytes3,address),int112,bytes20,uint104)", + "value": [ + "0xace36907e7b3d61eb0", + ["0xef1da0", "0x2b8D094D368208D2A7Bd540D5A0a7DAA85055397"], + "1129402433323912905501035610239601", + "0xc57a542f4f312d886a764b7727c020e5d23118b3", + "13438671187944251579857083283305" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xace36907e7b3d61eb0" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xef1da0" + }, + { + "type": "address", + "value": "0x2b8D094D368208D2A7Bd540D5A0a7DAA85055397" + } + ] + }, + { + "type": "number", + "value": "1129402433323912905501035610239601" + }, + { + "type": "hexstring", + "value": "0xc57a542f4f312d886a764b7727c020e5d23118b3" + }, + { + "type": "number", + "value": "13438671187944251579857083283305" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101d6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6100386100be565b6040805182516001600160b81b031916815260208084015180516001600160e81b0319168284015201516001600160a01b03168183015290820151600d0b6060808301919091528201516bffffffffffffffffffffffff1916608080830191909152909101516cffffffffffffffffffffffffff1660a082015260c00160405180910390f35b6100c6610158565b6100ce610158565b680ace36907e7b3d61eb60bc1b8152604080518082018252620778ed60ed1b8152732b8d094d368208d2a7bd540d5a0a7daa850553976020808301919091528301526d37af10149da2127158b70c6bf2719082015273c57a542f4f312d886a764b7727c020e5d23118b360601b60608201526ca99eb043e0602810821cb7b7696080820152919050565b6040805160a081019091526000815260208101610185604080518082019091526000808252602082015290565b8152600060208201819052604082018190526060909101529056fea2646970667358221220c1847ca4a9c5b614944e0c22fc5c5e51d94f1b13f32d8250235916318234025164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9e092c52 {\n bytes3 s_0;\n address s_1;\n }\n\n struct S_08328e5a {\n bytes9 s_0;\n S_9e092c52 s_1;\n int112 s_2;\n bytes20 s_3;\n uint104 s_4;\n }\n\n function test () public pure returns (S_08328e5a memory) {\n S_08328e5a memory r;\n {\n bytes9 r_0 = bytes9(0xace36907e7b3d61eb0);\n r.s_0 = r_0;\n }\n {\n S_9e092c52 memory r_1;\n {\n bytes3 r_1_0 = bytes3(0xef1da0);\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0x2b8D094D368208D2A7Bd540D5A0a7DAA85055397;\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n int112 r_2 = 1129402433323912905501035610239601;\n r.s_2 = r_2;\n }\n {\n bytes20 r_3 = bytes20(0xC57a542f4F312D886A764b7727c020E5d23118b3);\n r.s_3 = r_3;\n }\n {\n uint104 r_4 = 13438671187944251579857083283305;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0xace36907e7b3d61eb00000000000000000000000000000000000000000000000ef1da000000000000000000000000000000000000000000000000000000000000000000000000000000000002b8d094d368208d2a7bd540d5a0a7daa8505539700000000000000000000000000000000000037af10149da2127158b70c6bf271c57a542f4f312d886a764b7727c020e5d23118b300000000000000000000000000000000000000000000000000000000000000a99eb043e0602810821cb7b769" + }, + { + "name": "random-(int120,string,(address,string),bool[3])", + "type": "(int120,string,(address,string),bool[3])", + "value": [ + "-221161317840218054621014541690336966", + "Moo é🚀 éMé é🚀 Méo🚀éMéo éM éééoéo Mo", + [ + "0xa7b3bC2D6CDF7F7294e046142a0489C7dD45D038", + "Moo é🚀oé🚀🚀ééoooé o🚀🚀 ééooéoMo oé éoMéoo MM éMééooo🚀M🚀 o" + ], + [false, true, false] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-221161317840218054621014541690336966" + }, + { + "type": "string", + "value": "Moo é🚀 éMé é🚀 Méo🚀éMéo éM éééoéo Mo" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xa7b3bC2D6CDF7F7294e046142a0489C7dD45D038" + }, + { + "type": "string", + "value": "Moo é🚀oé🚀🚀ééoooé o🚀🚀 ééooéoMo oé éoMéoo MM éMééooo🚀M🚀 o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610314806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101ad565b60405180910390f35b610056610105565b61005e610105565b6e2a9818473c1b3e35f73cec2925f6c51981526040805160608101909152603d808252600091906102a2602083013960208381019190915260408051808201825260608184015273a7b3bc2d6cdf7f7294e046142a0489c7dd45d0388152815160808101909252605b8083529093506000926102479083013960208301525060408201526100ea610142565b60008082526001602083015260408201526060820152919050565b60408051608081018252600080825260606020808401829052845180860186529283528201529091820190815260200161013d610142565b905290565b60405180606001604052806003906020820280368337509192915050565b6000815180845260005b818110156101865760208185018101518683018201520161016a565b81811115610198576000602083870101525b50601f01601f19169290920160200192915050565b600060208083528351600e0b818401528084015160c060408501526101d560e0850182610160565b604086810151868303601f1901606088015280516001600160a01b0316835284015184830182905291925061020c90830182610160565b91505060608501516080850160005b600381101561023a57825115158252918401919084019060010161021b565b5091969550505050505056fe4d6f6f20c3a9f09f9a806fc3a9f09f9a80f09f9a80c3a9c3a96f6f6fc3a920206ff09f9a80f09f9a8020c3a9c3a96f6fc3a96f4d6f206fc3a920c3a96f4dc3a96f6f204d4d20c3a94dc3a9c3a96f6f6ff09f9a804df09f9a80206f4d6f6f20c3a9f09f9a802020c3a94dc3a920c3a9f09f9a802020204dc3a96ff09f9a80c3a94dc3a96f20c3a94d2020c3a9c3a9c3a96fc3a96f20204d6fa2646970667358221220a885dde2e70062ff75a1cb95f5c6f16b53ea7845f2023dbe62a15df9a28c2e6164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8090aaf4 {\n address s_0;\n string s_1;\n }\n\n struct S_d5868a2d {\n int120 s_0;\n string s_1;\n S_8090aaf4 s_2;\n bool[3] s_3;\n }\n\n function test () public pure returns (S_d5868a2d memory) {\n S_d5868a2d memory r;\n {\n int120 r_0 = -221161317840218054621014541690336966;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀 éMé é🚀 Méo🚀éMéo éM éééoéo Mo\";\n r.s_1 = r_1;\n }\n {\n S_8090aaf4 memory r_2;\n {\n address r_2_0 = 0xa7b3bC2D6CDF7F7294e046142a0489C7dD45D038;\n r_2.s_0 = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀oé🚀🚀ééoooé o🚀🚀 ééooéoMo oé éoMéoo MM éMééooo🚀M🚀 o\";\n r_2.s_1 = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n bool[3] memory r_3;\n {\n bool r_3_0 = false;\n r_3[0] = r_3_0;\n }\n {\n bool r_3_1 = true;\n r_3[1] = r_3_1;\n }\n {\n bool r_3_2 = false;\n r_3[2] = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020ffffffffffffffffffffffffffffffffffd567e7b8c3e4c1ca08c313d6da093a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a802020c3a94dc3a920c3a9f09f9a802020204dc3a96ff09f9a80c3a94dc3a96f20c3a94d2020c3a9c3a9c3a96fc3a96f20204d6f000000000000000000000000000000a7b3bc2d6cdf7f7294e046142a0489c7dd45d0380000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a806fc3a9f09f9a80f09f9a80c3a9c3a96f6f6fc3a920206ff09f9a80f09f9a8020c3a9c3a96f6fc3a96f4d6f206fc3a920c3a96f4dc3a96f6f204d4d20c3a94dc3a9c3a96f6f6ff09f9a804df09f9a80206f0000000000" + }, + { + "name": "random-(int120,string,bool,bytes19[1],string)", + "type": "(int120,string,bool,bytes19[1],string)", + "value": [ + "301907582496543327254000170713017144", + "Moo é🚀Mo Mo🚀MMoM ooé🚀o🚀 oé🚀é oooMMoéoo oooo", + false, + ["0x691a067ae781193d74fd9b6f720e2bc59068db"], + "Moo é🚀oMoooMMéo🚀o" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "301907582496543327254000170713017144" + }, + { + "type": "string", + "value": "Moo é🚀Mo Mo🚀MMoM ooé🚀o🚀 oé🚀é oooMMoéoo oooo" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x691a067ae781193d74fd9b6f720e2bc59068db" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oMoooMMéo🚀o" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102ad806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061019c565b60405180910390f35b6100566100fd565b61005e6100fd565b6e3a25316bcfe4fa64a6e88f6258eb38815260408051608081019091526043808252600091906102356020830139602083015250600060408201526100a1610131565b72691a067ae781193d74fd9b6f720e2bc59068db60681b8152606082015260408051808201909152601981527f4d6f6f20c3a9f09f9a806f4d6f6f6f4d4dc3a96ff09f9a806f0000000000000060208201526080820152919050565b6040805160a081018252600080825260606020830181905292820152908101610124610131565b8152602001606081525090565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b8181101561017557602081850181015186830182015201610159565b81811115610187576000602083870101525b50601f01601f19169290920160200192915050565b600060208083528351600e0b818401528084015160a060408501526101c460c085018261014f565b905060408501511515606085015260608501516080850160005b600181101561020b5782516cffffffffffffffffffffffffff1916825291840191908401906001016101de565b5050506080850151848203601f190160a0860152915061022b818361014f565b9594505050505056fe4d6f6f20c3a9f09f9a804d6f20204d6ff09f9a804d4d6f4d206f6fc3a9f09f9a806ff09f9a80202020206fc3a9f09f9a80c3a9206f6f6f4d4d6fc3a96f6f206f6f6f6fa2646970667358221220d5a6cbd43137c7f34cd597ff36dca751d96290eeae7d8dcb3fe586c736407f2864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b6e9282b {\n int120 s_0;\n string s_1;\n bool s_2;\n bytes19[1] s_3;\n string s_4;\n }\n\n function test () public pure returns (S_b6e9282b memory) {\n S_b6e9282b memory r;\n {\n int120 r_0 = 301907582496543327254000170713017144;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀Mo Mo🚀MMoM ooé🚀o🚀 oé🚀é oooMMoéoo oooo\";\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n bytes19[1] memory r_3;\n {\n bytes19 r_3_0 = bytes19(0x691a067ae781193d74fd9b6f720e2bc59068db);\n r_3[0] = r_3_0;\n }\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀oMoooMMéo🚀o\";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000003a25316bcfe4fa64a6e88f6258eb3800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000691a067ae781193d74fd9b6f720e2bc59068db00000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a804d6f20204d6ff09f9a804d4d6f4d206f6fc3a9f09f9a806ff09f9a80202020206fc3a9f09f9a80c3a9206f6f6f4d4d6fc3a96f6f206f6f6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000194d6f6f20c3a9f09f9a806f4d6f6f6f4d4dc3a96ff09f9a806f00000000000000" + }, + { + "name": "random-(int152,(address[4],address,bytes25),bytes13)", + "type": "(int152,(address[4],address,bytes25),bytes13)", + "value": [ + "-2453718198802164681212404348048429447601769848", + [ + [ + "0xeC5EfD609373C7b2b6B4A1DB6c0eb729f0d7142A", + "0x5dC740b078892aA169e85B1fA242881Fc0F63F28", + "0x95Ee34947c3E28934112498cE83B7C5de11b6007", + "0x62F7177452c0F08ae8445c3fBBaDbA8410a5f289" + ], + "0xf733aAB4D81C8370dD25E967B43FDb233e4c9E64", + "0x0a4ecb313ca3f0651e1ea8c53ba131cc94a9044208c980de4d" + ], + "0x7d6d513b2230ad5ae226aa3b25" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-2453718198802164681212404348048429447601769848" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xeC5EfD609373C7b2b6B4A1DB6c0eb729f0d7142A" + }, + { + "type": "address", + "value": "0x5dC740b078892aA169e85B1fA242881Fc0F63F28" + }, + { + "type": "address", + "value": "0x95Ee34947c3E28934112498cE83B7C5de11b6007" + }, + { + "type": "address", + "value": "0x62F7177452c0F08ae8445c3fBBaDbA8410a5f289" + } + ] + }, + { + "type": "address", + "value": "0xf733aAB4D81C8370dD25E967B43FDb233e4c9E64" + }, + { + "type": "hexstring", + "value": "0x0a4ecb313ca3f0651e1ea8c53ba131cc94a9044208c980de4d" + } + ] + }, + { + "type": "hexstring", + "value": "0x7d6d513b2230ad5ae226aa3b25" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061028b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101c2565b60405180910390f35b610056610153565b61005e610153565b726e074db3f819a3c47b489b1b847261d168cd7719815261007d61017d565b6100856101a4565b73ec5efd609373c7b2b6b4a1db6c0eb729f0d7142a8152735dc740b078892aa169e85b1fa242881fc0f63f286020808301919091527395ee34947c3e28934112498ce83b7c5de11b60076040808401919091527362f7177452c0f08ae8445c3fbbadba8410a5f289606084015291835273f733aab4d81c8370dd25e967b43fdb233e4c9e64838201527f0a4ecb313ca3f0651e1ea8c53ba131cc94a9044208c980de4d00000000000000838301528301919091526c7d6d513b2230ad5ae226aa3b2560981b90820152919050565b6040518060600160405280600060120b815260200161017061017d565b8152600060209091015290565b60405180606001604052806101906101a4565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b815160120b81526020808301518051610100840192919060008386015b60048210156102075782516001600160a01b03168152918401916001919091019084016101df565b505050908101516001600160a01b031660a084015260409081015166ffffffffffffff191660c0840152929092015172ffffffffffffffffffffffffffffffffffffff191660e0909101529056fea264697066735822122056ad3414c2aa95257a7f4345478e4f4c8e984e475b186950769421e90fdd0ba464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_73245b55 {\n address[4] s_0;\n address s_1;\n bytes25 s_2;\n }\n\n struct S_5862373d {\n int152 s_0;\n S_73245b55 s_1;\n bytes13 s_2;\n }\n\n function test () public pure returns (S_5862373d memory) {\n S_5862373d memory r;\n {\n int152 r_0 = -2453718198802164681212404348048429447601769848;\n r.s_0 = r_0;\n }\n {\n S_73245b55 memory r_1;\n {\n address[4] memory r_1_0;\n {\n address r_1_0_0 = 0xeC5EfD609373C7b2b6B4A1DB6c0eb729f0d7142A;\n r_1_0[0] = r_1_0_0;\n }\n {\n address r_1_0_1 = 0x5dC740b078892aA169e85B1fA242881Fc0F63F28;\n r_1_0[1] = r_1_0_1;\n }\n {\n address r_1_0_2 = 0x95Ee34947c3E28934112498cE83B7C5de11b6007;\n r_1_0[2] = r_1_0_2;\n }\n {\n address r_1_0_3 = 0x62F7177452c0F08ae8445c3fBBaDbA8410a5f289;\n r_1_0[3] = r_1_0_3;\n }\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0xf733aAB4D81C8370dD25E967B43FDb233e4c9E64;\n r_1.s_1 = r_1_1;\n }\n {\n bytes25 r_1_2 = bytes25(0x0a4ecb313ca3f0651e1ea8c53ba131cc94a9044208c980de4d);\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n bytes13 r_2 = bytes13(0x7d6d513b2230ad5ae226aa3b25);\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffffff91f8b24c07e65c3b84b764e47b8d9e2e973288000000000000000000000000ec5efd609373c7b2b6b4a1db6c0eb729f0d7142a0000000000000000000000005dc740b078892aa169e85b1fa242881fc0f63f2800000000000000000000000095ee34947c3e28934112498ce83b7c5de11b600700000000000000000000000062f7177452c0f08ae8445c3fbbadba8410a5f289000000000000000000000000f733aab4d81c8370dd25e967b43fdb233e4c9e640a4ecb313ca3f0651e1ea8c53ba131cc94a9044208c980de4d000000000000007d6d513b2230ad5ae226aa3b2500000000000000000000000000000000000000" + }, + { + "name": "random-(int256,address,address,int208,address)[4]", + "type": "(int256,address,address,int208,address)[4]", + "value": [ + [ + "-32517337656861816393800761574512885268816930430638612856723644878525268467450", + "0xcC74d324D75899ba94EBa0b3A9bA8C655B4dDFa8", + "0x92C533A97CaCadE70A0adC46559EE211B3D4Ea1F", + "-131145666202846258964901962026087889493320136493395794380140003", + "0x19430153F8c5cFfA56db1F3F0218c3c33e6E3397" + ], + [ + "-46699757622488021205975198484910198029894832052518122093531789591286511414501", + "0xE5D312433036e6884ed37D8C5dF76B7435906854", + "0x9828445dAdF90DE64AeB6087C4C5bDb9F07d638a", + "-137584836080352268424643397488685832332683003511842838251046732", + "0x6e8750E0A6c998D0c3Bd82E8549db58e07618eeF" + ], + [ + "-17000759915377003076552682825593605949755896572721321804408406665756599942650", + "0x165ED956ce900cd0c15A38bFBd847FD190eD9708", + "0x37b14201aC803e843Cc2F9E3a58fF03F42AeD0b9", + "193111218971785108166666253788379054575766460286164621001214525", + "0xa1b7E53bE7d8384Ca30597a39961F615C944EDD8" + ], + [ + "44926586942917090353474311838159048951723704322588463648163234588600766632586", + "0x73846A0C89A2833d86B3d5389c72c8dBa0db4ea6", + "0xC97F3349f09472bbF273fD8804B3eB9D97379ed4", + "127572433814151555192161874095507738894005666829516338641641131", + "0xEd0a46aeC3Aa6b2fc0f190c3415FfE6c6210360b" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-32517337656861816393800761574512885268816930430638612856723644878525268467450" + }, + { + "type": "address", + "value": "0xcC74d324D75899ba94EBa0b3A9bA8C655B4dDFa8" + }, + { + "type": "address", + "value": "0x92C533A97CaCadE70A0adC46559EE211B3D4Ea1F" + }, + { + "type": "number", + "value": "-131145666202846258964901962026087889493320136493395794380140003" + }, + { + "type": "address", + "value": "0x19430153F8c5cFfA56db1F3F0218c3c33e6E3397" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-46699757622488021205975198484910198029894832052518122093531789591286511414501" + }, + { + "type": "address", + "value": "0xE5D312433036e6884ed37D8C5dF76B7435906854" + }, + { + "type": "address", + "value": "0x9828445dAdF90DE64AeB6087C4C5bDb9F07d638a" + }, + { + "type": "number", + "value": "-137584836080352268424643397488685832332683003511842838251046732" + }, + { + "type": "address", + "value": "0x6e8750E0A6c998D0c3Bd82E8549db58e07618eeF" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-17000759915377003076552682825593605949755896572721321804408406665756599942650" + }, + { + "type": "address", + "value": "0x165ED956ce900cd0c15A38bFBd847FD190eD9708" + }, + { + "type": "address", + "value": "0x37b14201aC803e843Cc2F9E3a58fF03F42AeD0b9" + }, + { + "type": "number", + "value": "193111218971785108166666253788379054575766460286164621001214525" + }, + { + "type": "address", + "value": "0xa1b7E53bE7d8384Ca30597a39961F615C944EDD8" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "44926586942917090353474311838159048951723704322588463648163234588600766632586" + }, + { + "type": "address", + "value": "0x73846A0C89A2833d86B3d5389c72c8dBa0db4ea6" + }, + { + "type": "address", + "value": "0xC97F3349f09472bbF273fD8804B3eB9D97379ed4" + }, + { + "type": "number", + "value": "127572433814151555192161874095507738894005666829516338641641131" + }, + { + "type": "address", + "value": "0xEd0a46aeC3Aa6b2fc0f190c3415FfE6c6210360b" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103e1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061033b565b60405180910390f35b6100566102e0565b61005e6102e0565b61006661030d565b7fb81bd6cf9785bdb4452210711fc289af145da15dbb86523af72d44b927ac6106815273cc74d324d75899ba94eba0b3a9ba8c655b4ddfa860208201527392c533a97cacade70a0adc46559ee211b3d4ea1f604082015279519cb5c29c7f8cc8d5194646262d16803c59019839040bd32de21960608201527319430153f8c5cffa56db1f3f0218c3c33e6e33976080820152815261010261030d565b7f98c0dfb5e91a39a0db5e6a28aa113392a2bea98f350df528e0d300714b32531b815273e5d312433036e6884ed37d8c5df76b7435906854602080830191909152739828445dadf90de64aeb6087c4c5bdb9f07d638a604083015279559e8768f7628eb902213a086452350405555ae6f1a971d4074b196060830152736e8750e0a6c998d0c3bd82e8549db58e07618eef60808301528201526101a361030d565b7fda69e92f8e23d9ec21816604b25204b62eccb68587353dc2fdeab74ce4ab8206815273165ed956ce900cd0c15a38bfbd847fd190ed970860208201527337b14201ac803e843cc2f9e3a58ff03f42aed0b960408083019190915279782c645ff6ac79fd786b086cb4e94a5a46c8620649101f7fca3d606083015273a1b7e53be7d8384ca30597a39961f615c944edd8608083015282015261024361030d565b7f63538c0e2e3ca1cc8cd5eca6fba2571308bdc2b6dde215b8940f17d591b9128a81527373846a0c89a2833d86b3d5389c72c8dba0db4ea6602082015273c97f3349f09472bbf273fd8804b3eb9d97379ed46040820152794f637613c7095e8127d3c591ba4eedd55734234f5d25ad661eab60608083019190915273ed0a46aec3aa6b2fc0f190c3415ffe6c6210360b6080830152820152919050565b60405180608001604052806004905b6102f761030d565b8152602001906001900390816102ef5790505090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b6102808101818360005b60048110156103a2578151805184526020808201516001600160a01b039081168287015260408084015182169087015260608084015160190b90870152608092830151169185019190915260a09093019290910190600101610345565b5050509291505056fea26469706673582212206e63a0104cb5cd23df8b40327f66b4543e970f8921454d1ec9b9d2fd3e90a5ba64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6fefab69 {\n int256 s_0;\n address s_1;\n address s_2;\n int208 s_3;\n address s_4;\n }\n\n function test () public pure returns (S_6fefab69[4] memory) {\n S_6fefab69[4] memory r;\n {\n S_6fefab69 memory r_0;\n {\n int256 r_0_0 = -32517337656861816393800761574512885268816930430638612856723644878525268467450;\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0xcC74d324D75899ba94EBa0b3A9bA8C655B4dDFa8;\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0x92C533A97CaCadE70A0adC46559EE211B3D4Ea1F;\n r_0.s_2 = r_0_2;\n }\n {\n int208 r_0_3 = -131145666202846258964901962026087889493320136493395794380140003;\n r_0.s_3 = r_0_3;\n }\n {\n address r_0_4 = 0x19430153F8c5cFfA56db1F3F0218c3c33e6E3397;\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_6fefab69 memory r_1;\n {\n int256 r_1_0 = -46699757622488021205975198484910198029894832052518122093531789591286511414501;\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0xE5D312433036e6884ed37D8C5dF76B7435906854;\n r_1.s_1 = r_1_1;\n }\n {\n address r_1_2 = 0x9828445dAdF90DE64AeB6087C4C5bDb9F07d638a;\n r_1.s_2 = r_1_2;\n }\n {\n int208 r_1_3 = -137584836080352268424643397488685832332683003511842838251046732;\n r_1.s_3 = r_1_3;\n }\n {\n address r_1_4 = 0x6e8750E0A6c998D0c3Bd82E8549db58e07618eeF;\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n {\n S_6fefab69 memory r_2;\n {\n int256 r_2_0 = -17000759915377003076552682825593605949755896572721321804408406665756599942650;\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0x165ED956ce900cd0c15A38bFBd847FD190eD9708;\n r_2.s_1 = r_2_1;\n }\n {\n address r_2_2 = 0x37b14201aC803e843Cc2F9E3a58fF03F42AeD0b9;\n r_2.s_2 = r_2_2;\n }\n {\n int208 r_2_3 = 193111218971785108166666253788379054575766460286164621001214525;\n r_2.s_3 = r_2_3;\n }\n {\n address r_2_4 = 0xa1b7E53bE7d8384Ca30597a39961F615C944EDD8;\n r_2.s_4 = r_2_4;\n }\n r[2] = r_2;\n }\n {\n S_6fefab69 memory r_3;\n {\n int256 r_3_0 = 44926586942917090353474311838159048951723704322588463648163234588600766632586;\n r_3.s_0 = r_3_0;\n }\n {\n address r_3_1 = 0x73846A0C89A2833d86B3d5389c72c8dBa0db4ea6;\n r_3.s_1 = r_3_1;\n }\n {\n address r_3_2 = 0xC97F3349f09472bbF273fD8804B3eB9D97379ed4;\n r_3.s_2 = r_3_2;\n }\n {\n int208 r_3_3 = 127572433814151555192161874095507738894005666829516338641641131;\n r_3.s_3 = r_3_3;\n }\n {\n address r_3_4 = 0xEd0a46aeC3Aa6b2fc0f190c3415FfE6c6210360b;\n r_3.s_4 = r_3_4;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0xb81bd6cf9785bdb4452210711fc289af145da15dbb86523af72d44b927ac6106000000000000000000000000cc74d324d75899ba94eba0b3a9ba8c655b4ddfa800000000000000000000000092c533a97cacade70a0adc46559ee211b3d4ea1fffffffffffffae634a3d638073372ae6b9b9d9d2e97fc3a6fe67c6fbf42cd21d00000000000000000000000019430153f8c5cffa56db1f3f0218c3c33e6e339798c0dfb5e91a39a0db5e6a28aa113392a2bea98f350df528e0d300714b32531b000000000000000000000000e5d312433036e6884ed37d8c5df76b74359068540000000000000000000000009828445dadf90de64aeb6087c4c5bdb9f07d638affffffffffffaa617897089d7146fddec5f79badcafbfaaaa5190e568e2bf8b40000000000000000000000006e8750e0a6c998d0c3bd82e8549db58e07618eefda69e92f8e23d9ec21816604b25204b62eccb68587353dc2fdeab74ce4ab8206000000000000000000000000165ed956ce900cd0c15a38bfbd847fd190ed970800000000000000000000000037b14201ac803e843cc2f9e3a58ff03f42aed0b9000000000000782c645ff6ac79fd786b086cb4e94a5a46c8620649101f7fca3d000000000000000000000000a1b7e53be7d8384ca30597a39961f615c944edd863538c0e2e3ca1cc8cd5eca6fba2571308bdc2b6dde215b8940f17d591b9128a00000000000000000000000073846a0c89a2833d86b3d5389c72c8dba0db4ea6000000000000000000000000c97f3349f09472bbf273fd8804b3eb9d97379ed40000000000004f637613c7095e8127d3c591ba4eedd55734234f5d25ad661eab000000000000000000000000ed0a46aec3aa6b2fc0f190c3415ffe6c6210360b" + }, + { + "name": "random-(int40,string[],address,bytes12[])", + "type": "(int40,string[],address,bytes12[])", + "value": [ + "-17288832820", + [ + "Moo é🚀oM", + "Moo é🚀Mo oM🚀o éé o Méo🚀M MééMMoéo M ooMMooM oooMo", + "Moo é🚀🚀oMo M🚀🚀ooo🚀éMMoM🚀oo M ooMo🚀oo é🚀ooooéooMéoM🚀MoMM", + "Moo é🚀 é🚀 o🚀 ooo🚀M🚀é 🚀🚀ééé🚀éoooooéoéo" + ], + "0x5AAD216dDF653994b1F4F9243b4ad0f63638678e", + ["0x2988be9c736331c9a61f4e3e", "0x55b6e7e2e82ccac9acfddc6d"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-17288832820" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM" + }, + { + "type": "string", + "value": "Moo é🚀Mo oM🚀o éé o Méo🚀M MééMMoéo M ooMMooM oooMo" + }, + { + "type": "string", + "value": "Moo é🚀🚀oMo M🚀🚀ooo🚀éMMoM🚀oo M ooMo🚀oo é🚀ooooéooMéoM🚀MoMM" + }, + { + "type": "string", + "value": "Moo é🚀 é🚀 o🚀 ooo🚀M🚀é 🚀🚀ééé🚀éoooooéoéo" + } + ] + }, + { + "type": "address", + "value": "0x5AAD216dDF653994b1F4F9243b4ad0f63638678e" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2988be9c736331c9a61f4e3e" + }, + { + "type": "hexstring", + "value": "0x55b6e7e2e82ccac9acfddc6d" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610500806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102e8565b60405180910390f35b604080516080810182526000808252606060208301819052928201528181019190915260408051608081018252600080825260606020830181905292820152818101919091526404067ea73319815260408051600480825260a08201909252600091816020015b60608152602001906001900390816100b557905050905060006040518060400160405280600c81526020016b4d6f6f20c3a9f09f9a806f4d60a01b81525090508082600081518110610109576101096103d3565b60200260200101819052505060006040518060800160405280604481526020016103ea6044913990508082600181518110610146576101466103d3565b602002602001018190525050600060405180608001604052806057815260200161042e6057913990508082600281518110610183576101836103d3565b602002602001018190525050600060405180608001604052806046815260200161048560469139905080826003815181106101c0576101c06103d3565b60209081029190910181019190915283019190915250735aad216ddf653994b1f4f9243b4ad0f63638678e6040808301919091528051600280825260608201909252600091816020016020820280368337505081519192506b14c45f4e39b198e4d30fa71f60a11b91829150839060009061023d5761023d6103d3565b6001600160a01b0319909216602092830291909101909101525080516b55b6e7e2e82ccac9acfddc6d60a01b9081908390600190811061027f5761027f6103d3565b6001600160a01b031990921660209283029190910190910152506060820152919050565b600081518084526020808501945080840160005b838110156102dd5781516001600160a01b031916875295820195908201906001016102b7565b509495945050505050565b6000602080835260a08301845160040b82850152818501516080604086015281815180845260c08701915060c08160051b880101935084830192506000805b8281101561038c5788860360bf1901845284518051808852835b8181101561035c578281018a01518982018b01528901610341565b8181111561036c57848a838b0101525b50601f01601f191696909601870195509386019392860192600101610327565b5050505050604085015191506103ad60608501836001600160a01b03169052565b6060850151848203601f1901608086015291506103ca81836102a3565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d6f206f4df09f9a806f2020c3a9c3a9206f204dc3a96ff09f9a804d204dc3a9c3a94d4d6fc3a96f2020204d206f6f4d4d6f6f4d206f6f6f4d6f4d6f6f20c3a9f09f9a80f09f9a806f4d6f204df09f9a80f09f9a806f6f6ff09f9a80c3a94d4d6f4df09f9a806f6f204d206f6f4d6ff09f9a806f6f20c3a9f09f9a806f6f6f6fc3a96f6f4dc3a96f4df09f9a804d6f4d4d4d6f6f20c3a9f09f9a8020c3a9f09f9a80206ff09f9a80206f6f6ff09f9a804df09f9a80c3a920f09f9a80f09f9a80c3a9c3a9c3a9f09f9a80c3a96f6f6f6f6fc3a96fc3a96fa2646970667358221220783ed052ecfb45dd51fe820eb8090d98761326b6edbb89adad2bf42eaf2644eb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_179eecec {\n int40 s_0;\n string[] s_1;\n address s_2;\n bytes12[] s_3;\n }\n\n function test () public pure returns (S_179eecec memory) {\n S_179eecec memory r;\n {\n int40 r_0 = -17288832820;\n r.s_0 = r_0;\n }\n {\n string[] memory r_1 = new string[](4);\n {\n string memory r_1_0 = unicode\"Moo é🚀oM\";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀Mo oM🚀o éé o Méo🚀M MééMMoéo M ooMMooM oooMo\";\n r_1[1] = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀🚀oMo M🚀🚀ooo🚀éMMoM🚀oo M ooMo🚀oo é🚀ooooéooMéoM🚀MoMM\";\n r_1[2] = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀 é🚀 o🚀 ooo🚀M🚀é 🚀🚀ééé🚀éoooooéoéo\";\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x5AAD216dDF653994b1F4F9243b4ad0f63638678e;\n r.s_2 = r_2;\n }\n {\n bytes12[] memory r_3 = new bytes12[](2);\n {\n bytes12 r_3_0 = bytes12(0x2988be9c736331c9a61f4e3e);\n r_3[0] = r_3_0;\n }\n {\n bytes12 r_3_1 = bytes12(0x55b6e7e2e82ccac9acfddc6d);\n r_3[1] = r_3_1;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf98158cc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000005aad216ddf653994b1f4f9243b4ad0f63638678e00000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a806f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444d6f6f20c3a9f09f9a804d6f206f4df09f9a806f2020c3a9c3a9206f204dc3a96ff09f9a804d204dc3a9c3a94d4d6fc3a96f2020204d206f6f4d4d6f6f4d206f6f6f4d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a80f09f9a806f4d6f204df09f9a80f09f9a806f6f6ff09f9a80c3a94d4d6f4df09f9a806f6f204d206f6f4d6ff09f9a806f6f20c3a9f09f9a806f6f6f6fc3a96f6f4dc3a96f4df09f9a804d6f4d4d00000000000000000000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a8020c3a9f09f9a80206ff09f9a80206f6f6ff09f9a804df09f9a80c3a920f09f9a80f09f9a80c3a9c3a9c3a9f09f9a80c3a96f6f6f6f6fc3a96fc3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022988be9c736331c9a61f4e3e000000000000000000000000000000000000000055b6e7e2e82ccac9acfddc6d0000000000000000000000000000000000000000" + }, + { + "name": "random-(string,((address,bool),(address),string),bool)", + "type": "(string,((address,bool),(address),string),bool)", + "value": [ + "Moo é🚀o🚀oo Moo MMoo🚀éo", + [ + ["0x6B57e3f3aDb3a4F3Db591D88E95Fc4ac61808Edd", false], + ["0xAf662e7592b54A677C7b9D615Ecb264c71a413F4"], + "Moo é🚀 M M 🚀MoMo oMMMM🚀o🚀o🚀é🚀éo o ééoo🚀🚀🚀Moéé🚀MéooM o" + ], + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀oo Moo MMoo🚀éo" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6B57e3f3aDb3a4F3Db591D88E95Fc4ac61808Edd" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xAf662e7592b54A677C7b9D615Ecb264c71a413F4" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 M M 🚀MoMo oMMMM🚀o🚀o🚀é🚀éo o ééoo🚀🚀🚀Moéé🚀MéooM o" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061030a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101cd565b60405180910390f35b610056610130565b61005e610130565b60006040518060600160405280602281526020016102b3602291398252506040805160a0810182526000606080830182815260808085018490529084528451602080820187528482528086019182528587019390935285518087018752808401859052736b57e3f3adb3a4f3db591d88e95fc4ac61808edd815285528551808401875273af662e7592b54a677c7b9d615ecb264c71a413f4815290528451908101909452605b808552929391929061025890830139604080840191909152602084019290925250600090820152919050565b6040805160608082018352808252825160a0810184526000818301818152608083018290528252845160208181018752918152828201529381019190915290918201908152600060209091015290565b6000815180845260005b818110156101a65760208185018101518683018201520161018a565b818111156101b8576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835283516060828501526101e96080850182610180565b905081850151601f19858303016040860152805160018060a01b0380825116845284820151151585850152808584015151166040850152505060408101519250506080606082015261023e6080820183610180565b915050604084015115156060840152809150509291505056fe4d6f6f20c3a9f09f9a80204d204d20f09f9a804d6f4d6f206f4d4d4d4df09f9a806ff09f9a806ff09f9a80c3a9f09f9a80c3a96f206f20c3a9c3a96f6ff09f9a80f09f9a80f09f9a804d6fc3a9c3a9f09f9a804dc3a96f6f4d206f4d6f6f20c3a9f09f9a806ff09f9a806f6f20204d6f6f204d4d6f6ff09f9a80c3a96fa2646970667358221220e7e275da331f8d5a24d537780f2f05b2cab10f1a31dbc6e242b62b8dc9c2e88664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5cde0d08 {\n address s_0;\n bool s_1;\n }\n\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_faeb6e62 {\n S_5cde0d08 s_0;\n S_421683f8 s_1;\n string s_2;\n }\n\n struct S_6cf69093 {\n string s_0;\n S_faeb6e62 s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_6cf69093 memory) {\n S_6cf69093 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀o🚀oo Moo MMoo🚀éo\";\n r.s_0 = r_0;\n }\n {\n S_faeb6e62 memory r_1;\n {\n S_5cde0d08 memory r_1_0;\n {\n address r_1_0_0 = 0x6B57e3f3aDb3a4F3Db591D88E95Fc4ac61808Edd;\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bool r_1_0_1 = false;\n r_1_0.s_1 = r_1_0_1;\n }\n r_1.s_0 = r_1_0;\n }\n {\n S_421683f8 memory r_1_1;\n {\n address r_1_1_0 = 0xAf662e7592b54A677C7b9D615Ecb264c71a413F4;\n r_1_1.s_0 = r_1_1_0;\n }\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀 M M 🚀MoMo oMMMM🚀o🚀o🚀é🚀éo o ééoo🚀🚀🚀Moéé🚀MéooM o\";\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a806ff09f9a806f6f20204d6f6f204d4d6f6ff09f9a80c3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000006b57e3f3adb3a4f3db591d88e95fc4ac61808edd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af662e7592b54a677c7b9d615ecb264c71a413f40000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a80204d204d20f09f9a804d6f4d6f206f4d4d4d4df09f9a806ff09f9a806ff09f9a80c3a9f09f9a80c3a96f206f20c3a9c3a96f6ff09f9a80f09f9a80f09f9a804d6fc3a9c3a9f09f9a804dc3a96f6f4d206f0000000000" + }, + { + "name": "random-(string,(bytes16,bytes22,uint80,address,bool))", + "type": "(string,(bytes16,bytes22,uint80,address,bool))", + "value": [ + "Moo é🚀 ", + [ + "0xfd406d940be78b2fc5f67460682a778f", + "0xc09b8429013106808eb96c9b335a14ac5e3bc260142d", + "342056864759034795286724", + "0x4C7A2194B858c798c8C5733D7D90B79DACC408da", + false + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 " + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xfd406d940be78b2fc5f67460682a778f" + }, + { + "type": "hexstring", + "value": "0xc09b8429013106808eb96c9b335a14ac5e3bc260142d" + }, + { + "type": "number", + "value": "342056864759034795286724" + }, + { + "type": "address", + "value": "0x4C7A2194B858c798c8C5733D7D90B79DACC408da" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061024c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610145565b60405180910390f35b6100566100fd565b61005e6100fd565b604080518082018252600b81526a026b7b79061d4f84fcd40160ad1b602080830191909152908352815160a081018352600060808201526ffd406d940be78b2fc5f67460682a778f60801b815275c09b8429013106808eb96c9b335a14ac5e3bc260142d60501b8183015269486ef0965b66b4e860c492810192909252734c7a2194b858c798c8c5733d7d90b79dacc408da6060830152820152919050565b6040518060400160405280606081526020016101406040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b905290565b60006020808352835160c08285015280518060e086015260005b8181101561017c578281018401518682016101000152830161015f565b8181111561018f57600061010083880101525b509482015180516fffffffffffffffffffffffffffffffff19166040868101919091529281015169ffffffffffffffffffff19166060808701919091529281015169ffffffffffffffffffff16608080870191909152928101516001600160a01b031660a08601529190910151151560c08401525050610100601f909201601f191601019056fea264697066735822122051ca673939a11fdfc05f7a2b1677f2969cc816f7024b88716e36e417efe8b71164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_94300fc9 {\n bytes16 s_0;\n bytes22 s_1;\n uint80 s_2;\n address s_3;\n bool s_4;\n }\n\n struct S_77c6ae44 {\n string s_0;\n S_94300fc9 s_1;\n }\n\n function test () public pure returns (S_77c6ae44 memory) {\n S_77c6ae44 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 \";\n r.s_0 = r_0;\n }\n {\n S_94300fc9 memory r_1;\n {\n bytes16 r_1_0 = bytes16(0xfd406d940be78b2fc5f67460682a778f);\n r_1.s_0 = r_1_0;\n }\n {\n bytes22 r_1_1 = bytes22(0xc09b8429013106808eb96c9b335a14ac5e3bc260142d);\n r_1.s_1 = r_1_1;\n }\n {\n uint80 r_1_2 = 342056864759034795286724;\n r_1.s_2 = r_1_2;\n }\n {\n address r_1_3 = 0x4C7A2194B858c798c8C5733D7D90B79DACC408da;\n r_1.s_3 = r_1_3;\n }\n {\n bool r_1_4 = false;\n r_1.s_4 = r_1_4;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0fd406d940be78b2fc5f67460682a778f00000000000000000000000000000000c09b8429013106808eb96c9b335a14ac5e3bc260142d0000000000000000000000000000000000000000000000000000000000000000486ef0965b66b4e860c40000000000000000000000004c7a2194b858c798c8c5733d7d90b79dacc408da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a8020000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,(bytes25[2],bytes24,bool)[3])", + "type": "(string,(bytes25[2],bytes24,bool)[3])", + "value": [ + "Moo é🚀M Mo ", + [ + [ + [ + "0xfeb3f764cc7e352e4d47e4cfa819a33b1549ca0cf09c1f1873", + "0x8650b96ec3a9487d809f79d5028dd0cd7450463057301dd983" + ], + "0xa980b03b6e2fc0038d8ddc624334584e02d07f0ca2d30123", + true + ], + [ + [ + "0xee2941455d89a6a89d2cb1e6a61237ae6b4b28645141b32f38", + "0x01b3d076560ae6a7a8f2237332eecfd7a0479443ed43581bea" + ], + "0xdd0acdd3466ad0176b5b9e1a75e4162faefdd7b8387fe8aa", + true + ], + [ + [ + "0xa6800740a06b967c15a91b9a97adfeadef360993e9d02032e9", + "0xd4c95720a1f3f38a1f75b765ae2ae1e4964002f0bc81ee1c2c" + ], + "0x2ed6071425ef33dcd730f319f53c2244fefe54759928db89", + true + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M Mo " + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xfeb3f764cc7e352e4d47e4cfa819a33b1549ca0cf09c1f1873" + }, + { + "type": "hexstring", + "value": "0x8650b96ec3a9487d809f79d5028dd0cd7450463057301dd983" + } + ] + }, + { + "type": "hexstring", + "value": "0xa980b03b6e2fc0038d8ddc624334584e02d07f0ca2d30123" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xee2941455d89a6a89d2cb1e6a61237ae6b4b28645141b32f38" + }, + { + "type": "hexstring", + "value": "0x01b3d076560ae6a7a8f2237332eecfd7a0479443ed43581bea" + } + ] + }, + { + "type": "hexstring", + "value": "0xdd0acdd3466ad0176b5b9e1a75e4162faefdd7b8387fe8aa" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xa6800740a06b967c15a91b9a97adfeadef360993e9d02032e9" + }, + { + "type": "hexstring", + "value": "0xd4c95720a1f3f38a1f75b765ae2ae1e4964002f0bc81ee1c2c" + } + ] + }, + { + "type": "hexstring", + "value": "0x2ed6071425ef33dcd730f319f53c2244fefe54759928db89" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103ef806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102da565b60405180910390f35b610056610249565b61005e610249565b60408051808201909152600f81526e026b7b79061d4f84fcd40269026b79608d1b6020820152815261008e610268565b610096610295565b61009e6102bc565b7ffeb3f764cc7e352e4d47e4cfa819a33b1549ca0cf09c1f18730000000000000081527f8650b96ec3a9487d809f79d5028dd0cd7450463057301dd983000000000000006020808301919091529082527fa980b03b6e2fc0038d8ddc624334584e02d07f0ca2d30123000000000000000090820152600160408201528152610124610295565b61012c6102bc565b7fee2941455d89a6a89d2cb1e6a61237ae6b4b28645141b32f380000000000000081527f01b3d076560ae6a7a8f2237332eecfd7a0479443ed43581bea000000000000006020808301919091529082527fdd0acdd3466ad0176b5b9e1a75e4162faefdd7b8387fe8aa000000000000000082820152600160408301528201526101b3610295565b6101bb6102bc565b7fa6800740a06b967c15a91b9a97adfeadef360993e9d02032e90000000000000081527fd4c95720a1f3f38a1f75b765ae2ae1e4964002f0bc81ee1c2c000000000000006020808301919091529082527f2ed6071425ef33dcd730f319f53c2244fefe54759928db890000000000000000828201526001604080840191909152830191909152820152919050565b604051806040016040528060608152602001610263610268565b905290565b60405180606001604052806003905b61027f610295565b8152602001906001900390816102775790505090565b60405180606001604052806102a86102bc565b815260006020820181905260409091015290565b60405180604001604052806002906020820280368337509192915050565b6000602080835283516101a0828501528051806101c086015260005b81811015610313578281018401518682016101e0015283016102f6565b818111156103265760006101e083880101525b50828601519150604080860160005b600381101561039f57845180518360005b600281101561036d57825166ffffffffffffff191682529189019190890190600101610346565b5050508087015167ffffffffffffffff1916838501528301511515606083015293850193608090910190600101610335565b505050601f01601f1916939093016101e00194935050505056fea264697066735822122001371a93d80ab9e588a13e8a2cd58cf2b6c09fb0a344170b8428c537574395b964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_27aa8e61 {\n bytes25[2] s_0;\n bytes24 s_1;\n bool s_2;\n }\n\n struct S_a83614a4 {\n string s_0;\n S_27aa8e61[3] s_1;\n }\n\n function test () public pure returns (S_a83614a4 memory) {\n S_a83614a4 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀M Mo \";\n r.s_0 = r_0;\n }\n {\n S_27aa8e61[3] memory r_1;\n {\n S_27aa8e61 memory r_1_0;\n {\n bytes25[2] memory r_1_0_0;\n {\n bytes25 r_1_0_0_0 = bytes25(0xfeb3f764cc7e352e4d47e4cfa819a33b1549ca0cf09c1f1873);\n r_1_0_0[0] = r_1_0_0_0;\n }\n {\n bytes25 r_1_0_0_1 = bytes25(0x8650b96ec3a9487d809f79d5028dd0cd7450463057301dd983);\n r_1_0_0[1] = r_1_0_0_1;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bytes24 r_1_0_1 = bytes24(0xa980b03b6e2fc0038d8ddc624334584e02d07f0ca2d30123);\n r_1_0.s_1 = r_1_0_1;\n }\n {\n bool r_1_0_2 = true;\n r_1_0.s_2 = r_1_0_2;\n }\n r_1[0] = r_1_0;\n }\n {\n S_27aa8e61 memory r_1_1;\n {\n bytes25[2] memory r_1_1_0;\n {\n bytes25 r_1_1_0_0 = bytes25(0xee2941455d89a6a89d2cb1e6a61237ae6b4b28645141b32f38);\n r_1_1_0[0] = r_1_1_0_0;\n }\n {\n bytes25 r_1_1_0_1 = bytes25(0x01b3d076560ae6a7a8f2237332eecfd7a0479443ed43581bea);\n r_1_1_0[1] = r_1_1_0_1;\n }\n r_1_1.s_0 = r_1_1_0;\n }\n {\n bytes24 r_1_1_1 = bytes24(0xdd0acdd3466ad0176b5b9e1a75e4162faefdd7b8387fe8aa);\n r_1_1.s_1 = r_1_1_1;\n }\n {\n bool r_1_1_2 = true;\n r_1_1.s_2 = r_1_1_2;\n }\n r_1[1] = r_1_1;\n }\n {\n S_27aa8e61 memory r_1_2;\n {\n bytes25[2] memory r_1_2_0;\n {\n bytes25 r_1_2_0_0 = bytes25(0xa6800740a06b967c15a91b9a97adfeadef360993e9d02032e9);\n r_1_2_0[0] = r_1_2_0_0;\n }\n {\n bytes25 r_1_2_0_1 = bytes25(0xd4c95720a1f3f38a1f75b765ae2ae1e4964002f0bc81ee1c2c);\n r_1_2_0[1] = r_1_2_0_1;\n }\n r_1_2.s_0 = r_1_2_0;\n }\n {\n bytes24 r_1_2_1 = bytes24(0x2ed6071425ef33dcd730f319f53c2244fefe54759928db89);\n r_1_2.s_1 = r_1_2_1;\n }\n {\n bool r_1_2_2 = true;\n r_1_2.s_2 = r_1_2_2;\n }\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001a0feb3f764cc7e352e4d47e4cfa819a33b1549ca0cf09c1f1873000000000000008650b96ec3a9487d809f79d5028dd0cd7450463057301dd98300000000000000a980b03b6e2fc0038d8ddc624334584e02d07f0ca2d3012300000000000000000000000000000000000000000000000000000000000000000000000000000001ee2941455d89a6a89d2cb1e6a61237ae6b4b28645141b32f380000000000000001b3d076560ae6a7a8f2237332eecfd7a0479443ed43581bea00000000000000dd0acdd3466ad0176b5b9e1a75e4162faefdd7b8387fe8aa00000000000000000000000000000000000000000000000000000000000000000000000000000001a6800740a06b967c15a91b9a97adfeadef360993e9d02032e900000000000000d4c95720a1f3f38a1f75b765ae2ae1e4964002f0bc81ee1c2c000000000000002ed6071425ef33dcd730f319f53c2244fefe54759928db8900000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a804d204d6f200000000000000000000000000000000000" + }, + { + "name": "random-(string,address,(bool,address,bool[4]))", + "type": "(string,address,(bool,address,bool[4]))", + "value": [ + "Moo é🚀éééé oMééé éM 🚀 o oéoo o 🚀oéooéé🚀o🚀🚀é🚀oé ooé oo", + "0xa7b033CB0DEbEABf20B28ff93DF770dB383287ab", + [false, "0xADA6F53eA4b305e62BfaF938BCd673ccB91A6AA6", [false, false, false, false]] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éééé oMééé éM 🚀 o oéoo o 🚀oéooéé🚀o🚀🚀é🚀oé ooé oo" + }, + { + "type": "address", + "value": "0xa7b033CB0DEbEABf20B28ff93DF770dB383287ab" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xADA6F53eA4b305e62BfaF938BCd673ccB91A6AA6" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102b4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610198565b60405180910390f35b6100566100ef565b61005e6100ef565b60006040518060800160405280605a8152602001610225605a913982525073a7b033cb0debeabf20b28ff93df770db383287ab602082015261009e610113565b6000815273ada6f53ea4b305e62bfaf938bcd673ccb91a6aa660208201526100c461012e565b6000808252602082018190526040808301829052606083019190915282810191909152820152919050565b604080516060808201835281526000602082015290810161010e610113565b905290565b604080516060810182526000808252602082015290810161010e5b60405180608001604052806004906020820280368337509192915050565b8051151582526020808201516001600160a01b03168184015260408083015190840160005b6004811015610190578251151582529183019190830190600101610171565b505050505050565b6000602080835283516101008285015280518061012086015260005b818110156101d157828101840151868201610140015283016101b4565b818111156101e457600061014083880101525b50918501516001600160a01b0381166040860152916040860151925061020d606086018461014c565b601f01601f1916939093016101400194935050505056fe4d6f6f20c3a9f09f9a80c3a9c3a9c3a9c3a9206f4dc3a9c3a9c3a920c3a94d20f09f9a80206f206fc3a96f6f206f20f09f9a806fc3a96f6fc3a9c3a9f09f9a806ff09f9a80f09f9a80c3a9f09f9a806fc3a9206f6fc3a9206f6fa26469706673582212202adb29d745971bcac90b9e8c71743fc66e26e165d4b7de65399fb6479342c3ab64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_af33f5a3 {\n bool s_0;\n address s_1;\n bool[4] s_2;\n }\n\n struct S_4c83e0af {\n string s_0;\n address s_1;\n S_af33f5a3 s_2;\n }\n\n function test () public pure returns (S_4c83e0af memory) {\n S_4c83e0af memory r;\n {\n string memory r_0 = unicode\"Moo é🚀éééé oMééé éM 🚀 o oéoo o 🚀oéooéé🚀o🚀🚀é🚀oé ooé oo\";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xa7b033CB0DEbEABf20B28ff93DF770dB383287ab;\n r.s_1 = r_1;\n }\n {\n S_af33f5a3 memory r_2;\n {\n bool r_2_0 = false;\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0xADA6F53eA4b305e62BfaF938BCd673ccB91A6AA6;\n r_2.s_1 = r_2_1;\n }\n {\n bool[4] memory r_2_2;\n {\n bool r_2_2_0 = false;\n r_2_2[0] = r_2_2_0;\n }\n {\n bool r_2_2_1 = false;\n r_2_2[1] = r_2_2_1;\n }\n {\n bool r_2_2_2 = false;\n r_2_2[2] = r_2_2_2;\n }\n {\n bool r_2_2_3 = false;\n r_2_2[3] = r_2_2_3;\n }\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000100000000000000000000000000a7b033cb0debeabf20b28ff93df770db383287ab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ada6f53ea4b305e62bfaf938bcd673ccb91a6aa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a80c3a9c3a9c3a9c3a9206f4dc3a9c3a9c3a920c3a94d20f09f9a80206f206fc3a96f6f206f20f09f9a806fc3a96f6fc3a9c3a9f09f9a806ff09f9a80f09f9a80c3a9f09f9a806fc3a9206f6fc3a9206f6f000000000000" + }, + { + "name": "random-(string,address,string[4],string,int208)", + "type": "(string,address,string[4],string,int208)", + "value": [ + "Moo é🚀o oM🚀é🚀 MMM🚀o🚀 oooooooo Moo🚀 ", + "0xAE90C3b662Cc7C8671114d150fA85dbEF7eD78Be", + [ + "Moo é🚀o oo", + "Moo é🚀oé ooo 🚀éoMoooo🚀🚀ooMé o🚀o🚀🚀oM éé o oéM🚀🚀éé oéoo", + "Moo é🚀", + "Moo é🚀Mé🚀oo🚀oé🚀🚀" + ], + "Moo é🚀Mé 🚀", + "-63829397614053949785470187103285593819945053143372368551782310" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o oM🚀é🚀 MMM🚀o🚀 oooooooo Moo🚀 " + }, + { + "type": "address", + "value": "0xAE90C3b662Cc7C8671114d150fA85dbEF7eD78Be" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o oo" + }, + { + "type": "string", + "value": "Moo é🚀oé ooo 🚀éoMoooo🚀🚀ooMé o🚀o🚀🚀oM éé o oéM🚀🚀éé oéoo" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀Mé🚀oo🚀oé🚀🚀" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Mé 🚀" + }, + { + "type": "number", + "value": "-63829397614053949785470187103285593819945053143372368551782310" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103da806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610236565b60405180910390f35b61005661018e565b61005e61018e565b60006040518060600160405280603981526020016102ef6039913982525073ae90c3b662cc7c8671114d150fa85dbef7ed78be602082015261009e6101c2565b604080518082018252600f81526e4d6f6f20c3a9f09f9a806f20206f6f60881b602080830191909152908352815160808101909252605b8083526000929161034a90830139602083810191909152604080518082018252600a8152689adede418753e13f3560b71b8184015281850152805160608101909152602280825260009350909161032890830139606080840191909152604084810193909352825180840190935260128352709adede418753e13f35009b875241e13f3560771b6020840152830191909152507927b89c15814950d3d198e498f4e4319b4bf4f27712d40976a7a5196080820152919050565b6040805160a08101825260608152600060208201529081016101ae6101c2565b815260606020820152600060409091015290565b60405180608001604052806004905b60608152602001906001900390816101d15790505090565b6000815180845260005b8181101561020f576020818501810151868301820152016101f3565b81811115610221576000602083870101525b50601f01601f19169290920160200192915050565b60006020808352835160a08285015261025260c08501826101e9565b828601516001600160a01b0316604086810191909152860151601f198683038101606088015291925090826080810160005b60048110156102af57858203835261029d8286516101e9565b94870194928701929150600101610284565b5060608901519550828882030160808901526102cb81876101e9565b9550505050505060808401516102e660a085018260190b9052565b50939250505056fe4d6f6f20c3a9f09f9a806f206f4df09f9a80c3a9f09f9a80204d4d4df09f9a806ff09f9a80206f6f6f6f6f6f6f6f20204d6f6ff09f9a8020204d6f6f20c3a9f09f9a804dc3a9f09f9a806f6ff09f9a806fc3a9f09f9a80f09f9a804d6f6f20c3a9f09f9a806fc3a9206f6f6f2020f09f9a80c3a96f4d6f6f6f6ff09f9a80f09f9a806f6f4dc3a9206ff09f9a806ff09f9a80f09f9a806f4d20c3a9c3a9206f206fc3a94df09f9a80f09f9a80c3a9c3a9206fc3a96f6fa26469706673582212203b055b0d7ed02ac36b37be66d434391669cd4cb686f1c91dee8b0c7ee88321ca64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_68b0bec0 {\n string s_0;\n address s_1;\n string[4] s_2;\n string s_3;\n int208 s_4;\n }\n\n function test () public pure returns (S_68b0bec0 memory) {\n S_68b0bec0 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀o oM🚀é🚀 MMM🚀o🚀 oooooooo Moo🚀 \";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xAE90C3b662Cc7C8671114d150fA85dbEF7eD78Be;\n r.s_1 = r_1;\n }\n {\n string[4] memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀o oo\";\n r_2[0] = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀oé ooo 🚀éoMoooo🚀🚀ooMé o🚀o🚀🚀oM éé o oéM🚀🚀éé oéoo\";\n r_2[1] = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀\";\n r_2[2] = r_2_2;\n }\n {\n string memory r_2_3 = unicode\"Moo é🚀Mé🚀oo🚀oé🚀🚀\";\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀Mé 🚀\";\n r.s_3 = r_3;\n }\n {\n int208 r_4 = -63829397614053949785470187103285593819945053143372368551782310;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000ae90c3b662cc7c8671114d150fa85dbef7ed78be000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002e0ffffffffffffd84763ea7eb6af2c2e671b670b1bce64b40b0d88ed2bf689585a00000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a806f206f4df09f9a80c3a9f09f9a80204d4d4df09f9a806ff09f9a80206f6f6f6f6f6f6f6f20204d6f6ff09f9a80202000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a806f20206f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a806fc3a9206f6f6f2020f09f9a80c3a96f4d6f6f6f6ff09f9a80f09f9a806f6f4dc3a9206ff09f9a806ff09f9a80f09f9a806f4d20c3a9c3a9206f206fc3a94df09f9a80f09f9a80c3a9c3a9206fc3a96f6f0000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a804dc3a9f09f9a806f6ff09f9a806fc3a9f09f9a80f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a804dc3a920f09f9a800000000000000000000000000000" + }, + { + "name": "random-(string,bool,bool,bytes24[4],address)", + "type": "(string,bool,bool,bytes24[4],address)", + "value": [ + "Moo é🚀 M 🚀éooo🚀oooo🚀Mooé🚀🚀 🚀ooééM🚀é é oooMo", + false, + false, + [ + "0xbe5ba7ba74cc98d9ada0622f17ba28f863840689758649ed", + "0xc24308ebef004895ef49fec372564a79c9983e9e4cfb443f", + "0xbe0dcf0efcd31b71dd611171c72a2e0aaafe789fbf1be6e1", + "0xf1c1575224aae5563008b36b52828fd75cb04a933d4c9de8" + ], + "0x42AC6FEfE16913F18b98202E19e6873A685a34c6" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 M 🚀éooo🚀oooo🚀Mooé🚀🚀 🚀ooééM🚀é é oooMo" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xbe5ba7ba74cc98d9ada0622f17ba28f863840689758649ed" + }, + { + "type": "hexstring", + "value": "0xc24308ebef004895ef49fec372564a79c9983e9e4cfb443f" + }, + { + "type": "hexstring", + "value": "0xbe0dcf0efcd31b71dd611171c72a2e0aaafe789fbf1be6e1" + }, + { + "type": "hexstring", + "value": "0xf1c1575224aae5563008b36b52828fd75cb04a933d4c9de8" + } + ] + }, + { + "type": "address", + "value": "0x42AC6FEfE16913F18b98202E19e6873A685a34c6" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610305806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101d8565b60405180910390f35b61005661014d565b61005e61014d565b60006040518060800160405280604c8152602001610284604c91398252506000602082018190526040820152610092610186565b7fbe5ba7ba74cc98d9ada0622f17ba28f863840689758649ed000000000000000081527fc24308ebef004895ef49fec372564a79c9983e9e4cfb443f000000000000000060208201527fbe0dcf0efcd31b71dd611171c72a2e0aaafe789fbf1be6e1000000000000000060408201527ff1c1575224aae5563008b36b52828fd75cb04a933d4c9de800000000000000006060808301919091528201527342ac6fefe16913f18b98202e19e6873a685a34c66080820152919050565b6040518060a0016040528060608152602001600015158152602001600015158152602001610179610186565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b8060005b60048110156101d257815167ffffffffffffffff19168452602093840193909101906001016101a8565b50505050565b600060208083528351610100808386015281518061012087015260005b8181101561021257838101850151878201610140015284016101f5565b8181111561022557600061014083890101525b50928601518015156040870152926040870151801515606088015293506060870151935061025660808701856101a4565b60808701516001600160a01b038116878401529350601f01601f191694909401610140019594505050505056fe4d6f6f20c3a9f09f9a80204d2020f09f9a80c3a96f6f6ff09f9a806f6f6f6ff09f9a804d6f6fc3a9f09f9a80f09f9a8020f09f9a806f6fc3a9c3a94df09f9a80c3a920c3a920206f6f6f4d6fa26469706673582212200d2edac36422c5314355df4c30d8f3634846c9eb4ec5cde7df849f48994186ab64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_828f618d {\n string s_0;\n bool s_1;\n bool s_2;\n bytes24[4] s_3;\n address s_4;\n }\n\n function test () public pure returns (S_828f618d memory) {\n S_828f618d memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 M 🚀éooo🚀oooo🚀Mooé🚀🚀 🚀ooééM🚀é é oooMo\";\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n bytes24[4] memory r_3;\n {\n bytes24 r_3_0 = bytes24(0xbe5ba7ba74cc98d9ada0622f17ba28f863840689758649ed);\n r_3[0] = r_3_0;\n }\n {\n bytes24 r_3_1 = bytes24(0xc24308ebef004895ef49fec372564a79c9983e9e4cfb443f);\n r_3[1] = r_3_1;\n }\n {\n bytes24 r_3_2 = bytes24(0xbe0dcf0efcd31b71dd611171c72a2e0aaafe789fbf1be6e1);\n r_3[2] = r_3_2;\n }\n {\n bytes24 r_3_3 = bytes24(0xf1c1575224aae5563008b36b52828fd75cb04a933d4c9de8);\n r_3[3] = r_3_3;\n }\n r.s_3 = r_3;\n }\n {\n address r_4 = 0x42AC6FEfE16913F18b98202E19e6873A685a34c6;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be5ba7ba74cc98d9ada0622f17ba28f863840689758649ed0000000000000000c24308ebef004895ef49fec372564a79c9983e9e4cfb443f0000000000000000be0dcf0efcd31b71dd611171c72a2e0aaafe789fbf1be6e10000000000000000f1c1575224aae5563008b36b52828fd75cb04a933d4c9de8000000000000000000000000000000000000000042ac6fefe16913f18b98202e19e6873a685a34c6000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a80204d2020f09f9a80c3a96f6f6ff09f9a806f6f6f6ff09f9a804d6f6fc3a9f09f9a80f09f9a8020f09f9a806f6fc3a9c3a94df09f9a80c3a920c3a920206f6f6f4d6f0000000000000000000000000000000000000000" + }, + { + "name": "random-(string,bytes17,bool,(bool),bool[])", + "type": "(string,bytes17,bool,(bool),bool[])", + "value": [ + "Moo é🚀Mo🚀ooM éo🚀 MéoéooéoM 🚀o oo oo🚀🚀o 🚀oMMMoé o", + "0xae7a27473dcb8d286a0629d1dd231e367b", + false, + [false], + [true, false, true, true] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mo🚀ooM éo🚀 MéoéooéoM 🚀o oo oo🚀🚀o 🚀oMMMoé o" + }, + { + "type": "hexstring", + "value": "0xae7a27473dcb8d286a0629d1dd231e367b" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061036b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610216565b60405180910390f35b6040805160a0808201835260608083526000602080850182905284860182905285518082018752828152838601526080808601849052865194850187528385528482018390528487018390528651808301885283815285850152848101939093528551928301909552604b8083529394929390926102eb9083013982525070ae7a27473dcb8d286a0629d1dd231e367b60781b602080830191909152600060408084018290528051808401825282815260608501528051600480825260a0820190925291928201608080368337019050509050600060019050808260008151811061013b5761013b6102d4565b6020026020010190151590811515815250505060008082600181518110610164576101646102d4565b602002602001019015159081151581525050506000600190508082600281518110610191576101916102d4565b6020026020010190151590811515815250505060006001905080826003815181106101be576101be6102d4565b91151560209283029190910190910152506080820152919050565b600081518084526020808501945080840160005b8381101561020b5781511515875295820195908201906001016101ed565b509495945050505050565b60006020808352835160a08285015280518060c086015260005b8181101561024c5782810184015186820160e001528301610230565b8181111561025e57600060e083880101525b509185015191601f01601f19168401905061028d60408501836effffffffffffffffffffffffffffff19169052565b604085015180151560608601529150606085015180511515608086015291506080850151915060c08482030160a08501526102cb60e08201836101d9565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d6ff09f9a806f6f4d20c3a96ff09f9a80204dc3a96fc3a96f6fc3a96f4d20f09f9a806f206f6f206f6ff09f9a80f09f9a806f20f09f9a806f4d4d4d6fc3a9206fa26469706673582212200263f8be44d74687cabebfb9507dda7cb32753e13b991ab2e07a9c4db7cf956164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_d000155a {\n string s_0;\n bytes17 s_1;\n bool s_2;\n S_c1053bda s_3;\n bool[] s_4;\n }\n\n function test () public pure returns (S_d000155a memory) {\n S_d000155a memory r;\n {\n string memory r_0 = unicode\"Moo é🚀Mo🚀ooM éo🚀 MéoéooéoM 🚀o oo oo🚀🚀o 🚀oMMMoé o\";\n r.s_0 = r_0;\n }\n {\n bytes17 r_1 = bytes17(0xae7a27473dcb8d286a0629d1dd231e367b);\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n S_c1053bda memory r_3;\n {\n bool r_3_0 = false;\n r_3.s_0 = r_3_0;\n }\n r.s_3 = r_3;\n }\n {\n bool[] memory r_4 = new bool[](4);\n {\n bool r_4_0 = true;\n r_4[0] = r_4_0;\n }\n {\n bool r_4_1 = false;\n r_4[1] = r_4_1;\n }\n {\n bool r_4_2 = true;\n r_4[2] = r_4_2;\n }\n {\n bool r_4_3 = true;\n r_4[3] = r_4_3;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0ae7a27473dcb8d286a0629d1dd231e367b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a804d6ff09f9a806f6f4d20c3a96ff09f9a80204dc3a96fc3a96f6fc3a96f4d20f09f9a806f206f6f206f6ff09f9a80f09f9a806f20f09f9a806f4d4d4d6fc3a9206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(string,bytes18[],string,string)[4]", + "type": "(string,bytes18[],string,string)[4]", + "value": [ + [ + "Moo é🚀oé", + [ + "0x15fe30d1b9a1020e03cd959511a66f54c66b", + "0xdc1022bf02b7456abca1f1ed7bd18c25601c" + ], + "Moo é🚀oo é Mé🚀🚀ooM", + "Moo é🚀" + ], + [ + "Moo é🚀", + ["0x21f92d6e725a72d7db2c53100efc9f6f5124"], + "Moo é🚀Mo🚀🚀é🚀🚀o🚀o oé M🚀 ", + "Moo é🚀ooé oMM oéMo🚀🚀🚀éé🚀oé🚀 o🚀 M🚀Mo 🚀🚀Mé 🚀🚀MM MM" + ], + [ + "Moo é🚀 éo🚀🚀éo MMMMéoé🚀", + [ + "0x94d0b9975931c8caca01c73de3973276ed9b", + "0x20fe1be40bdc062ca5a9797ae0692a4b8b73", + "0xe00d49e8ad8a2a265a6aad654ffad97d9f1b", + "0x593505b7cdd9b72924a5c9fe920dcd8e1b99" + ], + "Moo é🚀🚀M", + "Moo é🚀ooé🚀🚀o🚀é🚀éoM " + ], + [ + "Moo é🚀🚀éé éoééM🚀Méé", + ["0x0ec41a274ebb8eea6cbe45447da4cccaf5dd"], + "Moo é🚀o", + "Moo é🚀" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oé" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x15fe30d1b9a1020e03cd959511a66f54c66b" + }, + { + "type": "hexstring", + "value": "0xdc1022bf02b7456abca1f1ed7bd18c25601c" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oo é Mé🚀🚀ooM" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x21f92d6e725a72d7db2c53100efc9f6f5124" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Mo🚀🚀é🚀🚀o🚀o oé M🚀 " + }, + { + "type": "string", + "value": "Moo é🚀ooé oMM oéMo🚀🚀🚀éé🚀oé🚀 o🚀 M🚀Mo 🚀🚀Mé 🚀🚀MM MM" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 éo🚀🚀éo MMMMéoé🚀" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x94d0b9975931c8caca01c73de3973276ed9b" + }, + { + "type": "hexstring", + "value": "0x20fe1be40bdc062ca5a9797ae0692a4b8b73" + }, + { + "type": "hexstring", + "value": "0xe00d49e8ad8a2a265a6aad654ffad97d9f1b" + }, + { + "type": "hexstring", + "value": "0x593505b7cdd9b72924a5c9fe920dcd8e1b99" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀M" + }, + { + "type": "string", + "value": "Moo é🚀ooé🚀🚀o🚀é🚀éoM " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀éé éoééM🚀Méé" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x0ec41a274ebb8eea6cbe45447da4cccaf5dd" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061086e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610649565b60405180910390f35b6100566105ac565b61005e6105ac565b6100896040518060800160405280606081526020016060815260200160608152602001606081525090565b604080518082018252600d81526c4d6f6f20c3a9f09f9a806fc3a960981b602082015282528051600280825260608201909252600091816020016020820280368337505081519192507115fe30d1b9a1020e03cd959511a66f54c66b60701b9182915083906000906100fd576100fd610725565b6001600160701b03199092166020928302919091019091015250805171370408afc0add15aaf287c7b5ef46309580760721b9081908390600190811061014557610145610725565b6001600160701b0319929092166020928302919091018201528381019290925250604080518082018252601f81527f4d6f6f20c3a9f09f9a806f6f20c3a920204dc3a9f09f9a80f09f9a806f6f4d00818401528184015280518082018252600a8152689adede418753e13f3560b71b818401526060808501919091529284528051608081018252838152918201839052810182905280820191909152604080518082018252600a8152689adede418753e13f3560b71b60208201528252805160018082528183019092526000918160200160208202803683375050815191925071087e4b5b9c969cb5f6cb14c403bf27dbd44960721b91829150839060009061025057610250610725565b6001600160701b031990921660209283029190910182015283810192909252506040805160608101909152602f80825260009261073c90830139604080840191909152805160808101909152605c808252600092506107dd6020830139606083015250808260016020020152506102e86040518060800160405280606081526020016060815260200160608152602001606081525090565b600060405180606001604052806028815260200161076b6028913982525060408051600480825260a0820190925260009160208201608080368337505081519192507194d0b9975931c8caca01c73de3973276ed9b60701b91829150839060009061035557610355610725565b6001600160701b0319909216602092830291909101909101525080517120fe1be40bdc062ca5a9797ae0692a4b8b7360701b9081908390600190811061039d5761039d610725565b6001600160701b03199092166020928302919091019091015250805171e00d49e8ad8a2a265a6aad654ffad97d9f1b60701b908190839060029081106103e5576103e5610725565b6001600160701b03199092166020928302919091019091015250805171593505b7cdd9b72924a5c9fe920dcd8e1b9960701b9081908390600390811061042d5761042d610725565b6001600160701b03199092166020928302919091018201528381019290925250604080518082018252600f81526e4d6f6f20c3a9f09f9a80f09f9a804d60881b8184015281840152805160608101909152602680825260009261079390830139606083015250808260026020020152506104c86040518060800160405280606081526020016060815260200160608152602001606081525090565b60006040518060600160405280602481526020016107b9602491398252506040805160018082528183019092526000916020808301908036833750508151919250710ec41a274ebb8eea6cbe45447da4cccaf5dd60701b91829150839060009061053457610534610725565b6001600160701b03199092166020928302919091018201528381019290925250604080518082018252600b81526a4d6f6f20c3a9f09f9a806f60a81b81840152818401528051808201909152600a8152689adede418753e13f3560b71b91810191909152606082015280826003602002015250919050565b60405180608001604052806004905b6105e66040518060800160405280606081526020016060815260200160608152602001606081525090565b8152602001906001900390816105bb5790505090565b6000815180845260005b8181101561062257602081850181015186830182015201610606565b81811115610634576000602083870101525b50601f01601f19169290920160200192915050565b602080825260009060a083018382018584805b600481101561071857601f19888603018452825160808151818852610683828901826105fc565b838a01518982038a8c01528051808352908b019350869250908a01905b808310156106ca5783516001600160701b0319168252928a019260019290920191908a01906106a0565b5060409250828401519150888103838a01526106e681836105fc565b925050506060808301519250878203818901525061070481836105fc565b96505050928501929185019160010161065c565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d6ff09f9a80f09f9a80c3a9f09f9a80f09f9a806ff09f9a806f206fc3a9204df09f9a80204d6f6f20c3a9f09f9a8020c3a96ff09f9a80f09f9a80c3a96f20204d4d4d4dc3a96fc3a9f09f9a804d6f6f20c3a9f09f9a806f6fc3a9f09f9a80f09f9a806ff09f9a80c3a9f09f9a80c3a96f4d204d6f6f20c3a9f09f9a80f09f9a80c3a9c3a920c3a96fc3a9c3a94df09f9a804dc3a9c3a94d6f6f20c3a9f09f9a806f6fc3a920206f4d4d206fc3a94d6ff09f9a80f09f9a80f09f9a80c3a9c3a9f09f9a806fc3a9f09f9a80206ff09f9a80204df09f9a804d6f20f09f9a80f09f9a804dc3a920f09f9a80f09f9a804d4d204d4da2646970667358221220ad8dcdd22e61d717cba5a414bb04e288db60078914e0196f4c8f5d875c05613464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6085c217 {\n string s_0;\n bytes18[] s_1;\n string s_2;\n string s_3;\n }\n\n function test () public pure returns (S_6085c217[4] memory) {\n S_6085c217[4] memory r;\n {\n S_6085c217 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀oé\";\n r_0.s_0 = r_0_0;\n }\n {\n bytes18[] memory r_0_1 = new bytes18[](2);\n {\n bytes18 r_0_1_0 = bytes18(0x15fe30d1b9a1020e03cd959511a66f54c66b);\n r_0_1[0] = r_0_1_0;\n }\n {\n bytes18 r_0_1_1 = bytes18(0xdc1022bf02b7456abca1f1ed7bd18c25601c);\n r_0_1[1] = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀oo é Mé🚀🚀ooM\";\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀\";\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_6085c217 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀\";\n r_1.s_0 = r_1_0;\n }\n {\n bytes18[] memory r_1_1 = new bytes18[](1);\n {\n bytes18 r_1_1_0 = bytes18(0x21f92d6e725a72d7db2c53100efc9f6f5124);\n r_1_1[0] = r_1_1_0;\n }\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀Mo🚀🚀é🚀🚀o🚀o oé M🚀 \";\n r_1.s_2 = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀ooé oMM oéMo🚀🚀🚀éé🚀oé🚀 o🚀 M🚀Mo 🚀🚀Mé 🚀🚀MM MM\";\n r_1.s_3 = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_6085c217 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀 éo🚀🚀éo MMMMéoé🚀\";\n r_2.s_0 = r_2_0;\n }\n {\n bytes18[] memory r_2_1 = new bytes18[](4);\n {\n bytes18 r_2_1_0 = bytes18(0x94d0b9975931c8caca01c73de3973276ed9b);\n r_2_1[0] = r_2_1_0;\n }\n {\n bytes18 r_2_1_1 = bytes18(0x20fe1be40bdc062ca5a9797ae0692a4b8b73);\n r_2_1[1] = r_2_1_1;\n }\n {\n bytes18 r_2_1_2 = bytes18(0xe00d49e8ad8a2a265a6aad654ffad97d9f1b);\n r_2_1[2] = r_2_1_2;\n }\n {\n bytes18 r_2_1_3 = bytes18(0x593505b7cdd9b72924a5c9fe920dcd8e1b99);\n r_2_1[3] = r_2_1_3;\n }\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀🚀M\";\n r_2.s_2 = r_2_2;\n }\n {\n string memory r_2_3 = unicode\"Moo é🚀ooé🚀🚀o🚀é🚀éoM \";\n r_2.s_3 = r_2_3;\n }\n r[2] = r_2;\n }\n {\n S_6085c217 memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀🚀éé éoééM🚀Méé\";\n r_3.s_0 = r_3_0;\n }\n {\n bytes18[] memory r_3_1 = new bytes18[](1);\n {\n bytes18 r_3_1_0 = bytes18(0x0ec41a274ebb8eea6cbe45447da4cccaf5dd);\n r_3_1[0] = r_3_1_0;\n }\n r_3.s_1 = r_3_1;\n }\n {\n string memory r_3_2 = unicode\"Moo é🚀o\";\n r_3.s_2 = r_3_2;\n }\n {\n string memory r_3_3 = unicode\"Moo é🚀\";\n r_3.s_3 = r_3_3;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000620000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a806fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215fe30d1b9a1020e03cd959511a66f54c66b0000000000000000000000000000dc1022bf02b7456abca1f1ed7bd18c25601c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a806f6f20c3a920204dc3a9f09f9a80f09f9a806f6f4d00000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f92d6e725a72d7db2c53100efc9f6f51240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a804d6ff09f9a80f09f9a80c3a9f09f9a80f09f9a806ff09f9a806f206fc3a9204df09f9a80200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a806f6fc3a920206f4d4d206fc3a94d6ff09f9a80f09f9a80f09f9a80c3a9c3a9f09f9a806fc3a9f09f9a80206ff09f9a80204df09f9a804d6f20f09f9a80f09f9a804dc3a920f09f9a80f09f9a804d4d204d4d00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000284d6f6f20c3a9f09f9a8020c3a96ff09f9a80f09f9a80c3a96f20204d4d4d4dc3a96fc3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000494d0b9975931c8caca01c73de3973276ed9b000000000000000000000000000020fe1be40bdc062ca5a9797ae0692a4b8b730000000000000000000000000000e00d49e8ad8a2a265a6aad654ffad97d9f1b0000000000000000000000000000593505b7cdd9b72924a5c9fe920dcd8e1b990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a80f09f9a804d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a806f6fc3a9f09f9a80f09f9a806ff09f9a80c3a9f09f9a80c3a96f4d200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000244d6f6f20c3a9f09f9a80f09f9a80c3a9c3a920c3a96fc3a9c3a94df09f9a804dc3a9c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ec41a274ebb8eea6cbe45447da4cccaf5dd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,string,int176,(string,uint64[4]))", + "type": "(string,string,int176,(string,uint64[4]))", + "value": [ + "Moo é🚀 oMooooéMoo🚀o🚀M o o🚀ooMo é🚀oooMoooooo🚀MMéMM", + "Moo é🚀Mo ooM o🚀ééo", + "12804057464827390402885656044500277138666410156826592", + [ + "Moo é🚀Mé🚀", + [ + "4471822217809271963", + "7061015261016167838", + "17270278726617973122", + "10676365809616942584" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oMooooéMoo🚀o🚀M o o🚀ooMo é🚀oooMoooooo🚀MMéMM" + }, + { + "type": "string", + "value": "Moo é🚀Mo ooM o🚀ééo" + }, + { + "type": "number", + "value": "12804057464827390402885656044500277138666410156826592" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mé🚀" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "4471822217809271963" + }, + { + "type": "number", + "value": "7061015261016167838" + }, + { + "type": "number", + "value": "17270278726617973122" + }, + { + "type": "number", + "value": "10676365809616942584" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610331806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610207565b60405180910390f35b610056610156565b61005e610156565b60006040518060800160405280604781526020016102b560479139825250604080518082018252601b81527f4d6f6f20c3a9f09f9a804d6f206f6f4d206ff09f9a80c3a9c3a96f0000000000602080830191909152830152752238e44200bb5818539b70b385dc89e2a285e3611fe0908201526100d9610186565b60408051808201909152601181526f9adede418753e13f35009b8753e13f35607f1b6020820152815261010a61019c565b673e0f1a9d47389c9b81526761fdc3f8127b159e60208083019190915267efac5b00000cc182604083015267942a12235657f5f860608084019190915290830191909152820152919050565b60405180608001604052806060815260200160608152602001600060150b8152602001610181610186565b905290565b6040518060400160405280606081526020016101815b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b818110156101e0576020818501810151868301820152016101c4565b818111156101f2576000602083870101525b50601f01601f19169290920160200192915050565b60006020808352835160808285015261022360a08501826101ba565b905081850151601f198086840301604087015261024083836101ba565b9250604087015160150b6060870152606087015191508086840301608087015250805160a0835261027460a08401826101ba565b918401519284019291905060005b60048110156102a957825167ffffffffffffffff1684529284019291840191600101610282565b50969550505050505056fe4d6f6f20c3a9f09f9a80206f4d6f6f6f6fc3a94d6f6ff09f9a806ff09f9a804d206f206ff09f9a806f6f4d6f20c3a9f09f9a806f6f6f4d6f6f6f6f6f6ff09f9a804d4dc3a94d4da26469706673582212208b3bb9f0093f6c14dfcf46f0840320d5cdc84b84398112f7cddac31815811bbb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f2d6062a {\n string s_0;\n uint64[4] s_1;\n }\n\n struct S_3def3fea {\n string s_0;\n string s_1;\n int176 s_2;\n S_f2d6062a s_3;\n }\n\n function test () public pure returns (S_3def3fea memory) {\n S_3def3fea memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 oMooooéMoo🚀o🚀M o o🚀ooMo é🚀oooMoooooo🚀MMéMM\";\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀Mo ooM o🚀ééo\";\n r.s_1 = r_1;\n }\n {\n int176 r_2 = 12804057464827390402885656044500277138666410156826592;\n r.s_2 = r_2;\n }\n {\n S_f2d6062a memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀Mé🚀\";\n r_3.s_0 = r_3_0;\n }\n {\n uint64[4] memory r_3_1;\n {\n uint64 r_3_1_0 = 4471822217809271963;\n r_3_1[0] = r_3_1_0;\n }\n {\n uint64 r_3_1_1 = 7061015261016167838;\n r_3_1[1] = r_3_1_1;\n }\n {\n uint64 r_3_1_2 = 17270278726617973122;\n r_3_1[2] = r_3_1_2;\n }\n {\n uint64 r_3_1_3 = 10676365809616942584;\n r_3_1[3] = r_3_1_3;\n }\n r_3.s_1 = r_3_1;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000002238e44200bb5818539b70b385dc89e2a285e3611fe0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000474d6f6f20c3a9f09f9a80206f4d6f6f6f6fc3a94d6f6ff09f9a806ff09f9a804d206f206ff09f9a806f6f4d6f20c3a9f09f9a806f6f6f4d6f6f6f6f6f6ff09f9a804d4dc3a94d4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a804d6f206f6f4d206ff09f9a80c3a9c3a96f000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000003e0f1a9d47389c9b00000000000000000000000000000000000000000000000061fdc3f8127b159e000000000000000000000000000000000000000000000000efac5b00000cc182000000000000000000000000000000000000000000000000942a12235657f5f800000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a804dc3a9f09f9a80000000000000000000000000000000" + }, + { + "name": "random-(string,string,string,(bool,string,int112))", + "type": "(string,string,string,(bool,string,int112))", + "value": [ + "Moo é🚀🚀🚀🚀 M🚀oo🚀éé MoéoM🚀 MM🚀🚀 oMooooééM 🚀Moo Mooo MM🚀Mo🚀ooo", + "Moo é🚀ooé 🚀ooé o o M🚀ooMé🚀🚀éoé 🚀Mo 🚀ooMM🚀éo 🚀 🚀M ", + "Moo é🚀é", + [true, "Moo é🚀M 🚀", "1005502233197482535991544256738171"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀🚀 M🚀oo🚀éé MoéoM🚀 MM🚀🚀 oMooooééM 🚀Moo Mooo MM🚀Mo🚀ooo" + }, + { + "type": "string", + "value": "Moo é🚀ooé 🚀ooé o o M🚀ooMé🚀🚀éoé 🚀Mo 🚀ooMM🚀éo 🚀 🚀M " + }, + { + "type": "string", + "value": "Moo é🚀é" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀M 🚀" + }, + { + "type": "number", + "value": "1005502233197482535991544256738171" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610357806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101c2565b60405180910390f35b610056610127565b61005e610127565b60006040518060a00160405280606581526020016102666065913982525060408051608081019091526057808252600091906102cb6020830139602083810191909152604080518082018252600c81526b4d6f6f20c3a9f09f9a80c3a960a01b81840152818501528051606080820183528184018181526000838501908152600184528451808601909552601185526f9adede418753e13f35009a4041e13f35607f1b95850195909552929092526d319338f12e02d7d8ed517271337b90925283015250919050565b60405180608001604052806060815260200160608152602001606081526020016101706040518060600160405280600015158152602001606081526020016000600d0b81525090565b905290565b6000815180845260005b8181101561019b5760208185018101518683018201520161017f565b818111156101ad576000602083870101525b50601f01601f19169290920160200192915050565b6020815260008251608060208401526101de60a0840182610175565b90506020840151601f19808584030160408601526101fc8383610175565b925060408601519150808584030160608601526102198383610175565b925060608601519150808584030160808601525080511515825260208101516060602084015261024c6060840182610175565b604092830151600d0b939092019290925294935050505056fe4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a80204df09f9a806f6ff09f9a80c3a9c3a9204d6fc3a96f4df09f9a80204d4df09f9a80f09f9a80206f4d6f6f6f6fc3a9c3a94d20f09f9a804d6f6f204d6f6f6f204d4df09f9a804d6ff09f9a806f6f6f4d6f6f20c3a9f09f9a806f6fc3a920f09f9a806f6fc3a920206f206f204df09f9a806f6f4dc3a9f09f9a80f09f9a80c3a96fc3a920f09f9a804d6f20f09f9a806f6f4d4df09f9a80c3a96f20f09f9a8020f09f9a804d20a2646970667358221220915843d0b09274c0d3ace71619aabf2f34f36b43858b47e62b634f5db0fa8a2c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_36431df6 {\n bool s_0;\n string s_1;\n int112 s_2;\n }\n\n struct S_d99218ea {\n string s_0;\n string s_1;\n string s_2;\n S_36431df6 s_3;\n }\n\n function test () public pure returns (S_d99218ea memory) {\n S_d99218ea memory r;\n {\n string memory r_0 = unicode\"Moo é🚀🚀🚀🚀 M🚀oo🚀éé MoéoM🚀 MM🚀🚀 oMooooééM 🚀Moo Mooo MM🚀Mo🚀ooo\";\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀ooé 🚀ooé o o M🚀ooMé🚀🚀éoé 🚀Mo 🚀ooMM🚀éo 🚀 🚀M \";\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀é\";\n r.s_2 = r_2;\n }\n {\n S_36431df6 memory r_3;\n {\n bool r_3_0 = true;\n r_3.s_0 = r_3_0;\n }\n {\n string memory r_3_1 = unicode\"Moo é🚀M 🚀\";\n r_3.s_1 = r_3_1;\n }\n {\n int112 r_3_2 = 1005502233197482535991544256738171;\n r_3.s_2 = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000654d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a80204df09f9a806f6ff09f9a80c3a9c3a9204d6fc3a96f4df09f9a80204d4df09f9a80f09f9a80206f4d6f6f6f6fc3a9c3a94d20f09f9a804d6f6f204d6f6f6f204d4df09f9a804d6ff09f9a806f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a806f6fc3a920f09f9a806f6fc3a920206f206f204df09f9a806f6f4dc3a9f09f9a80f09f9a80c3a96fc3a920f09f9a804d6f20f09f9a806f6f4d4df09f9a80c3a96f20f09f9a8020f09f9a804d20000000000000000000000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000319338f12e02d7d8ed517271337b00000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a804d2020f09f9a80000000000000000000000000000000" + }, + { + "name": "random-(string,uint56,string,address,address)[4]", + "type": "(string,uint56,string,address,address)[4]", + "value": [ + [ + "Moo é🚀M🚀ooM🚀 o 🚀ooMoMoM o🚀ééM 🚀🚀oMéM🚀éMMMooooé", + "35350920110089378", + "Moo é🚀ooM🚀oo🚀o🚀🚀oo🚀", + "0xF46a080e171ff7a65a25cCb3b17988bA0f4b632c", + "0x2C2e8fFeB760a9aA7AfC4993Fe5c7f1919adF06c" + ], + [ + "Moo é🚀oooéMo🚀🚀M 🚀oééooo🚀ooo 🚀éoééoé🚀 éooé🚀🚀é🚀Mo🚀MM🚀o🚀 ", + "33650598553652006", + "Moo é🚀MMéo🚀oM éMMéo 🚀o é 🚀é éoM o🚀éoééo🚀oé🚀Moooéo🚀o ooMMoo🚀oé", + "0x1d5Cd1675730F51D1eb23FD179596FA9Bb256754", + "0x85FcB663763daeBA1165F118b12568a104E285C6" + ], + [ + "Moo é🚀oo 🚀 o MMé🚀o🚀🚀é MMo o éo ooo ooMMé ooMé M oéMMo", + "34344355971860491", + "Moo é🚀🚀M🚀M 🚀M🚀 Moo", + "0x9DCE394EB829f7b88EFf6d8B680edF39d22576CC", + "0x777cF65415Fd5cd7746E8F9cBc75f27a21a844C7" + ], + [ + "Moo é🚀oo🚀 ", + "62540166557427811", + "Moo é🚀M🚀🚀o🚀MMo🚀o o🚀 oooééM Mo🚀o ", + "0x220E975FDAF41E3290AD885CC67091EE09FC3084", + "0x933639b38B2455316428F9FcC82D2F84fe1300CA" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M🚀ooM🚀 o 🚀ooMoMoM o🚀ééM 🚀🚀oMéM🚀éMMMooooé" + }, + { + "type": "number", + "value": "35350920110089378" + }, + { + "type": "string", + "value": "Moo é🚀ooM🚀oo🚀o🚀🚀oo🚀" + }, + { + "type": "address", + "value": "0xF46a080e171ff7a65a25cCb3b17988bA0f4b632c" + }, + { + "type": "address", + "value": "0x2C2e8fFeB760a9aA7AfC4993Fe5c7f1919adF06c" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oooéMo🚀🚀M 🚀oééooo🚀ooo 🚀éoééoé🚀 éooé🚀🚀é🚀Mo🚀MM🚀o🚀 " + }, + { + "type": "number", + "value": "33650598553652006" + }, + { + "type": "string", + "value": "Moo é🚀MMéo🚀oM éMMéo 🚀o é 🚀é éoM o🚀éoééo🚀oé🚀Moooéo🚀o ooMMoo🚀oé" + }, + { + "type": "address", + "value": "0x1d5Cd1675730F51D1eb23FD179596FA9Bb256754" + }, + { + "type": "address", + "value": "0x85FcB663763daeBA1165F118b12568a104E285C6" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo 🚀 o MMé🚀o🚀🚀é MMo o éo ooo ooMMé ooMé M oéMMo" + }, + { + "type": "number", + "value": "34344355971860491" + }, + { + "type": "string", + "value": "Moo é🚀🚀M🚀M 🚀M🚀 Moo" + }, + { + "type": "address", + "value": "0x9DCE394EB829f7b88EFf6d8B680edF39d22576CC" + }, + { + "type": "address", + "value": "0x777cF65415Fd5cd7746E8F9cBc75f27a21a844C7" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀 " + }, + { + "type": "number", + "value": "62540166557427811" + }, + { + "type": "string", + "value": "Moo é🚀M🚀🚀o🚀MMo🚀o o🚀 oooééM Mo🚀o " + }, + { + "type": "address", + "value": "0x220E975FDAF41E3290AD885CC67091EE09FC3084" + }, + { + "type": "address", + "value": "0x933639b38B2455316428F9FcC82D2F84fe1300CA" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610622806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610359565b60405180910390f35b6100566102b1565b61005e6102b1565b6100666102de565b60006040518060800160405280604d81526020016104ef604d9139825250667d97797ba524a2602080830191909152604080516060810190915260268082526000926105a59083013960408301525073f46a080e171ff7a65a25ccb3b17988ba0f4b632c6060820152732c2e8ffeb760a9aa7afc4993fe5c7f1919adf06c608082015281526100f36102de565b60006040518060a001604052806069815260200161053c6069913982525066778d0a85450b266020808301919091526040805160a08101909152606580825260009261045090830139604083015250731d5cd1675730f51d1eb23fd179596fa9bb25675460608201527385fcb663763daeba1165f118b12568a104e285c6608082015260208201526101836102de565b60006040518060800160405280604d8152602001610403604d9139825250667a040281be080b602080830191909152604080516060810190915260228082526000926105cb90830139604083015250739dce394eb829f7b88eff6d8b680edf39d22576cc606082015273777cf65415fd5cd7746e8f9cbc75f27a21a844c76080820152808260026020020152506102186102de565b6040805180820182526011815270026b7b79061d4f84fcd4037b7f84fcd401607d1b60208083019190915290835266de2ff33bd9686383820152815160608101909252603a808352600092916104b59083013960408301525073220e975fdaf41e3290ad885cc67091ee09fc308460608083019190915273933639b38b2455316428f9fcc82d2f84fe1300ca6080830152820152919050565b60405180608001604052806004905b6102c86102de565b8152602001906001900390816102c05790505090565b6040805160a08101825260608082526000602083018190529282018190528101829052608081019190915290565b6000815180845260005b8181101561033257602081850181015186830182015201610316565b81811115610344576000602083870101525b50601f01601f19169290920160200192915050565b602080825260009060a083820181850186855b60048110156103f557878303601f19018452815180518685526103918786018261030c565b905066ffffffffffffff888301511688860152604080830151868303828801526103bb838261030c565b6060858101516001600160a01b03908116918a0191909152608095860151169490970193909352505050928501929085019060010161036c565b509097965050505050505056fe4d6f6f20c3a9f09f9a806f6f20f09f9a80206f204d4dc3a9f09f9a806ff09f9a80f09f9a80c3a9204d4d6f206f20c3a96f206f6f6f206f6f4d4dc3a9206f6f4dc3a92020204d206fc3a94d4d6f4d6f6f20c3a9f09f9a804d4dc3a96ff09f9a806f4d20c3a94d4dc3a96f20f09f9a806f20c3a920f09f9a80c3a920c3a96f4d206ff09f9a80c3a96fc3a9c3a96ff09f9a806fc3a9f09f9a804d6f6f6fc3a96ff09f9a806f206f6f4d4d6f6ff09f9a806fc3a94d6f6f20c3a9f09f9a804df09f9a80f09f9a806ff09f9a804d4d6ff09f9a806f206ff09f9a8020206f6f6fc3a9c3a94d204d6ff09f9a806f20204d6f6f20c3a9f09f9a804df09f9a806f6f4df09f9a80206f2020f09f9a806f6f4d6f4d6f4d206ff09f9a80c3a9c3a94d20f09f9a80f09f9a806f4dc3a94df09f9a80c3a94d4d4d6f6f6f6fc3a94d6f6f20c3a9f09f9a806f6f6fc3a94d6ff09f9a80f09f9a804d20f09f9a806fc3a9c3a96f6f6ff09f9a806f6f6f2020f09f9a80c3a96fc3a9c3a96fc3a9f09f9a8020c3a96f6fc3a9f09f9a80f09f9a80c3a9f09f9a804d6ff09f9a804d4df09f9a806ff09f9a80204d6f6f20c3a9f09f9a806f6f4df09f9a806f6ff09f9a806ff09f9a80f09f9a806f6ff09f9a804d6f6f20c3a9f09f9a80f09f9a804df09f9a804d20f09f9a804df09f9a80204d6f6fa26469706673582212209e8001a3e3a7b19fc7a064f76ac84c1b9706a72d7f0b6966b60459acb0777cf964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c6cdf0e3 {\n string s_0;\n uint56 s_1;\n string s_2;\n address s_3;\n address s_4;\n }\n\n function test () public pure returns (S_c6cdf0e3[4] memory) {\n S_c6cdf0e3[4] memory r;\n {\n S_c6cdf0e3 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀M🚀ooM🚀 o 🚀ooMoMoM o🚀ééM 🚀🚀oMéM🚀éMMMooooé\";\n r_0.s_0 = r_0_0;\n }\n {\n uint56 r_0_1 = 35350920110089378;\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀ooM🚀oo🚀o🚀🚀oo🚀\";\n r_0.s_2 = r_0_2;\n }\n {\n address r_0_3 = 0xF46a080e171ff7a65a25cCb3b17988bA0f4b632c;\n r_0.s_3 = r_0_3;\n }\n {\n address r_0_4 = 0x2C2e8fFeB760a9aA7AfC4993Fe5c7f1919adF06c;\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_c6cdf0e3 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀oooéMo🚀🚀M 🚀oééooo🚀ooo 🚀éoééoé🚀 éooé🚀🚀é🚀Mo🚀MM🚀o🚀 \";\n r_1.s_0 = r_1_0;\n }\n {\n uint56 r_1_1 = 33650598553652006;\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀MMéo🚀oM éMMéo 🚀o é 🚀é éoM o🚀éoééo🚀oé🚀Moooéo🚀o ooMMoo🚀oé\";\n r_1.s_2 = r_1_2;\n }\n {\n address r_1_3 = 0x1d5Cd1675730F51D1eb23FD179596FA9Bb256754;\n r_1.s_3 = r_1_3;\n }\n {\n address r_1_4 = 0x85FcB663763daeBA1165F118b12568a104E285C6;\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n {\n S_c6cdf0e3 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀oo 🚀 o MMé🚀o🚀🚀é MMo o éo ooo ooMMé ooMé M oéMMo\";\n r_2.s_0 = r_2_0;\n }\n {\n uint56 r_2_1 = 34344355971860491;\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀🚀M🚀M 🚀M🚀 Moo\";\n r_2.s_2 = r_2_2;\n }\n {\n address r_2_3 = 0x9DCE394EB829f7b88EFf6d8B680edF39d22576CC;\n r_2.s_3 = r_2_3;\n }\n {\n address r_2_4 = 0x777cF65415Fd5cd7746E8F9cBc75f27a21a844C7;\n r_2.s_4 = r_2_4;\n }\n r[2] = r_2;\n }\n {\n S_c6cdf0e3 memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀oo🚀 \";\n r_3.s_0 = r_3_0;\n }\n {\n uint56 r_3_1 = 62540166557427811;\n r_3.s_1 = r_3_1;\n }\n {\n string memory r_3_2 = unicode\"Moo é🚀M🚀🚀o🚀MMo🚀o o🚀 oooééM Mo🚀o \";\n r_3.s_2 = r_3_2;\n }\n {\n address r_3_3 = 0x220E975FDAF41E3290AD885CC67091EE09FC3084;\n r_3.s_3 = r_3_3;\n }\n {\n address r_3_4 = 0x933639b38B2455316428F9FcC82D2F84fe1300CA;\n r_3.s_4 = r_3_4;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000007d97797ba524a20000000000000000000000000000000000000000000000000000000000000120000000000000000000000000f46a080e171ff7a65a25ccb3b17988ba0f4b632c0000000000000000000000002c2e8ffeb760a9aa7afc4993fe5c7f1919adf06c000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a804df09f9a806f6f4df09f9a80206f2020f09f9a806f6f4d6f4d6f4d206ff09f9a80c3a9c3a94d20f09f9a80f09f9a806f4dc3a94df09f9a80c3a94d4d4d6f6f6f6fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a806f6f4df09f9a806f6ff09f9a806ff09f9a80f09f9a806f6ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000778d0a85450b2600000000000000000000000000000000000000000000000000000000000001400000000000000000000000001d5cd1675730f51d1eb23fd179596fa9bb25675400000000000000000000000085fcb663763daeba1165f118b12568a104e285c600000000000000000000000000000000000000000000000000000000000000694d6f6f20c3a9f09f9a806f6f6fc3a94d6ff09f9a80f09f9a804d20f09f9a806fc3a9c3a96f6f6ff09f9a806f6f6f2020f09f9a80c3a96fc3a9c3a96fc3a9f09f9a8020c3a96f6fc3a9f09f9a80f09f9a80c3a9f09f9a804d6ff09f9a804d4df09f9a806ff09f9a8020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000654d6f6f20c3a9f09f9a804d4dc3a96ff09f9a806f4d20c3a94d4dc3a96f20f09f9a806f20c3a920f09f9a80c3a920c3a96f4d206ff09f9a80c3a96fc3a9c3a96ff09f9a806fc3a9f09f9a804d6f6f6fc3a96ff09f9a806f206f6f4d4d6f6ff09f9a806fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000007a040281be080b00000000000000000000000000000000000000000000000000000000000001200000000000000000000000009dce394eb829f7b88eff6d8b680edf39d22576cc000000000000000000000000777cf65415fd5cd7746e8f9cbc75f27a21a844c7000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a806f6f20f09f9a80206f204d4dc3a9f09f9a806ff09f9a80f09f9a80c3a9204d4d6f206f20c3a96f206f6f6f206f6f4d4dc3a9206f6f4dc3a92020204d206fc3a94d4d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a80f09f9a804df09f9a804d20f09f9a804df09f9a80204d6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000de2ff33bd9686300000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000220e975fdaf41e3290ad885cc67091ee09fc3084000000000000000000000000933639b38b2455316428f9fcc82d2f84fe1300ca00000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a806f6ff09f9a8020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a4d6f6f20c3a9f09f9a804df09f9a80f09f9a806ff09f9a804d4d6ff09f9a806f206ff09f9a8020206f6f6fc3a9c3a94d204d6ff09f9a806f2020000000000000" + }, + { + "name": "random-(uint184,bool,bool,address,uint104)[4]", + "type": "(uint184,bool,bool,address,uint104)[4]", + "value": [ + [ + "6987626028759386340270908306836047561416160772131084063", + false, + true, + "0xAF8D4965358c4b9189C37Bea0c11E81b15D65c34", + "10672171883696499352255625958418" + ], + [ + "4901816944695010386177939943611454378197482723584749422", + true, + false, + "0xe286f3d9e46EBf4dD9163e147cC0B973aa593d35", + "8695537810809525549716831999006" + ], + [ + "49841039802128389572932406069482510139342321857361532", + false, + false, + "0x2d441b17435F37f2957925974e844C44C82f668E", + "2427240455026751495184707377873" + ], + [ + "20759088698129552889899815245114862344753020557600868205", + false, + true, + "0x790C20c6ECd0491fd81706010107A9A9Dbd20528", + "8184944503852385063899215925470" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "6987626028759386340270908306836047561416160772131084063" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xAF8D4965358c4b9189C37Bea0c11E81b15D65c34" + }, + { + "type": "number", + "value": "10672171883696499352255625958418" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "4901816944695010386177939943611454378197482723584749422" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xe286f3d9e46EBf4dD9163e147cC0B973aa593d35" + }, + { + "type": "number", + "value": "8695537810809525549716831999006" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "49841039802128389572932406069482510139342321857361532" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x2d441b17435F37f2957925974e844C44C82f668E" + }, + { + "type": "number", + "value": "2427240455026751495184707377873" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "20759088698129552889899815245114862344753020557600868205" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x790C20c6ECd0491fd81706010107A9A9Dbd20528" + }, + { + "type": "number", + "value": "8184944503852385063899215925470" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610302806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610248565b60405180910390f35b6100566101ed565b61005e6101ed565b61006661021a565b7648f447beec0d805d9b82dcc23329fef268518035d7571f8152600060208201526001604082015273af8d4965358c4b9189c37bea0c11e81b15d65c3460608201526c86b3a5ad101f85f5eb1b201412608082015281526100c561021a565b76332d6741a0145b0e276e8ac3d8a8199850d67038f3af6e815260016020808301919091526000604083015273e286f3d9e46ebf4dd9163e147cc0b973aa593d3560608301526c6dc0cc4af67a0bc59fc9d8141e608083015282015261012961021a565b7585369f911f54c2c59923d487738d97ddfeac73f4767c8152600060208201819052604080830191909152732d441b17435f37f2957925974e844c44c82f668e60608301526c1ea2d63f143c442203a56e5ad1608083015282015261018c61021a565b76d8bc28e12f176ac22b7840723fbc831ee8096d237dc76d8152600060208201526001604082015273790c20c6ecd0491fd81706010107a9a9dbd205286060808301919091526c674efb688d8093ca9f75c790de6080830152820152919050565b60405180608001604052806004905b61020461021a565b8152602001906001900390816101fc5790505090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b6102808101818360005b60048110156102c357815180516001600160b81b031684526020808201511515818601526040808301511515908601526060808301516001600160a01b0316908601526080918201516cffffffffffffffffffffffffff169185019190915260a09093019290910190600101610252565b5050509291505056fea26469706673582212203613ae5a7826c6a8fde77c5c6400ecbccd434c142059e087cac38029ba123df064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e47282f6 {\n uint184 s_0;\n bool s_1;\n bool s_2;\n address s_3;\n uint104 s_4;\n }\n\n function test () public pure returns (S_e47282f6[4] memory) {\n S_e47282f6[4] memory r;\n {\n S_e47282f6 memory r_0;\n {\n uint184 r_0_0 = 6987626028759386340270908306836047561416160772131084063;\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0.s_2 = r_0_2;\n }\n {\n address r_0_3 = 0xAF8D4965358c4b9189C37Bea0c11E81b15D65c34;\n r_0.s_3 = r_0_3;\n }\n {\n uint104 r_0_4 = 10672171883696499352255625958418;\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_e47282f6 memory r_1;\n {\n uint184 r_1_0 = 4901816944695010386177939943611454378197482723584749422;\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1.s_1 = r_1_1;\n }\n {\n bool r_1_2 = false;\n r_1.s_2 = r_1_2;\n }\n {\n address r_1_3 = 0xe286f3d9e46EBf4dD9163e147cC0B973aa593d35;\n r_1.s_3 = r_1_3;\n }\n {\n uint104 r_1_4 = 8695537810809525549716831999006;\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n {\n S_e47282f6 memory r_2;\n {\n uint184 r_2_0 = 49841039802128389572932406069482510139342321857361532;\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = false;\n r_2.s_1 = r_2_1;\n }\n {\n bool r_2_2 = false;\n r_2.s_2 = r_2_2;\n }\n {\n address r_2_3 = 0x2d441b17435F37f2957925974e844C44C82f668E;\n r_2.s_3 = r_2_3;\n }\n {\n uint104 r_2_4 = 2427240455026751495184707377873;\n r_2.s_4 = r_2_4;\n }\n r[2] = r_2;\n }\n {\n S_e47282f6 memory r_3;\n {\n uint184 r_3_0 = 20759088698129552889899815245114862344753020557600868205;\n r_3.s_0 = r_3_0;\n }\n {\n bool r_3_1 = false;\n r_3.s_1 = r_3_1;\n }\n {\n bool r_3_2 = true;\n r_3.s_2 = r_3_2;\n }\n {\n address r_3_3 = 0x790C20c6ECd0491fd81706010107A9A9Dbd20528;\n r_3.s_3 = r_3_3;\n }\n {\n uint104 r_3_4 = 8184944503852385063899215925470;\n r_3.s_4 = r_3_4;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000048f447beec0d805d9b82dcc23329fef268518035d7571f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000af8d4965358c4b9189c37bea0c11e81b15d65c340000000000000000000000000000000000000086b3a5ad101f85f5eb1b201412000000000000000000332d6741a0145b0e276e8ac3d8a8199850d67038f3af6e00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e286f3d9e46ebf4dd9163e147cc0b973aa593d35000000000000000000000000000000000000006dc0cc4af67a0bc59fc9d8141e0000000000000000000085369f911f54c2c59923d487738d97ddfeac73f4767c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d441b17435f37f2957925974e844c44c82f668e000000000000000000000000000000000000001ea2d63f143c442203a56e5ad1000000000000000000d8bc28e12f176ac22b7840723fbc831ee8096d237dc76d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000790c20c6ecd0491fd81706010107a9a9dbd2052800000000000000000000000000000000000000674efb688d8093ca9f75c790de" + }, + { + "name": "random-(uint56[],(bytes20,string,string[1]))", + "type": "(uint56[],(bytes20,string,string[1]))", + "value": [ + ["50757210905930403", "26426860011498859", "58033877176069121"], + [ + "0x1a151de90f531bfccc63b46a50ebbb6dbb7e1c74", + "Moo é🚀 o🚀oé éMo 🚀oooé 🚀 Mo🚀MoooM oM é Moo🚀é", + ["Moo é🚀Mo🚀🚀🚀é🚀oooo MMM é🚀Mo🚀🚀ooééMo🚀éo éo🚀é🚀oMM"] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "50757210905930403" + }, + { + "type": "number", + "value": "26426860011498859" + }, + { + "type": "number", + "value": "58033877176069121" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x1a151de90f531bfccc63b46a50ebbb6dbb7e1c74" + }, + { + "type": "string", + "value": "Moo é🚀 o🚀oé éMo 🚀oooé 🚀 Mo🚀MoooM oM é Moo🚀é" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mo🚀🚀🚀é🚀oooo MMM é🚀Mo🚀🚀ooééMo🚀éo éo🚀é🚀oMM" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061042b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610265565b60405180910390f35b6100566101b7565b61005e6101b7565b6040805160038082526080820190925260009160208201606080368337019050509050600066b4536a15d66aa3905080826000815181106100a1576100a1610343565b602002602001019066ffffffffffffff16908166ffffffffffffff1681525050506000665de316d383ad6b905080826001815181106100e2576100e2610343565b602002602001019066ffffffffffffff16908166ffffffffffffff168152505050600066ce2d80fa04ac019050808260028151811061012357610123610343565b66ffffffffffffff909216602092830291909101909101525081526101466101d6565b730685477a43d4c6ff3318ed1a943aeedb6edf871d60621b8152604080516080810190915260458082526000919061035a602083013960208301525061018a6101f1565b600060405180608001604052806057815260200161039f6057913982525060408201526020820152919050565b6040518060400160405280606081526020016101d16101d6565b905290565b60408051606080820183526000825260208201529081016101d15b60405180602001604052806001905b60608152602001906001900390816102005790505090565b6000815180845260005b8181101561023e57602081850181015186830182015201610222565b81811115610250576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825160408383015280516060840181905260009291820190839060808601905b808310156102b357835166ffffffffffffff16825292840192600192909201919084019061028a565b50838701519250601f198682030160408701526bffffffffffffffffffffffff1983511681528383015191506060848201526102f26060820183610218565b604093840151828203929094019190915290508083810160005b6001811015610337578382038352610325828651610218565b9486019492860192915060010161030c565b50979650505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80206ff09f9a806fc3a92020c3a94d6f20f09f9a806f6f6fc3a920f09f9a8020204d6ff09f9a804d6f6f6f4d206f4d20c3a9204d6f6ff09f9a80c3a94d6f6f20c3a9f09f9a804d6ff09f9a80f09f9a80f09f9a80c3a9f09f9a806f6f6f6f204d4d4d20c3a9f09f9a804d6ff09f9a80f09f9a806f6fc3a9c3a94d6ff09f9a80c3a96f20c3a96ff09f9a80c3a9f09f9a806f4d4da26469706673582212202fec8cf8695dab0cc2801cd9bba6b82089d0b3d8d9f9c45ee8168a94428e943c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7e02d5ab {\n bytes20 s_0;\n string s_1;\n string[1] s_2;\n }\n\n struct S_10b90920 {\n uint56[] s_0;\n S_7e02d5ab s_1;\n }\n\n function test () public pure returns (S_10b90920 memory) {\n S_10b90920 memory r;\n {\n uint56[] memory r_0 = new uint56[](3);\n {\n uint56 r_0_0 = 50757210905930403;\n r_0[0] = r_0_0;\n }\n {\n uint56 r_0_1 = 26426860011498859;\n r_0[1] = r_0_1;\n }\n {\n uint56 r_0_2 = 58033877176069121;\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n S_7e02d5ab memory r_1;\n {\n bytes20 r_1_0 = bytes20(0x1a151dE90f531Bfccc63B46A50ebBB6DBB7E1c74);\n r_1.s_0 = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀 o🚀oé éMo 🚀oooé 🚀 Mo🚀MoooM oM é Moo🚀é\";\n r_1.s_1 = r_1_1;\n }\n {\n string[1] memory r_1_2;\n {\n string memory r_1_2_0 = unicode\"Moo é🚀Mo🚀🚀🚀é🚀oooo MMM é🚀Mo🚀🚀ooééMo🚀éo éo🚀é🚀oMM\";\n r_1_2[0] = r_1_2_0;\n }\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000b4536a15d66aa3000000000000000000000000000000000000000000000000005de316d383ad6b00000000000000000000000000000000000000000000000000ce2d80fa04ac011a151de90f531bfccc63b46a50ebbb6dbb7e1c74000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a80206ff09f9a806fc3a92020c3a94d6f20f09f9a806f6f6fc3a920f09f9a8020204d6ff09f9a804d6f6f6f4d206f4d20c3a9204d6f6ff09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a804d6ff09f9a80f09f9a80f09f9a80c3a9f09f9a806f6f6f6f204d4d4d20c3a9f09f9a804d6ff09f9a80f09f9a806f6fc3a9c3a94d6ff09f9a80c3a96f20c3a96ff09f9a80c3a9f09f9a806f4d4d000000000000000000" + }, + { + "name": "random-string[2][3][4][1][4]", + "type": "string[2][3][4][1][4]", + "value": [ + [ + [ + [ + ["Moo é🚀🚀éM🚀o o oo oo 🚀o 🚀Moo🚀o o", "Moo é🚀"], + ["Moo é🚀🚀ooé oMo é MéMM ", "Moo é🚀"], + ["Moo é🚀Mo M o", "Moo é🚀"] + ], + [ + [ + "Moo é🚀o 🚀oM éoM éoMé MéMoéoéM🚀éM oo oooéMoo🚀 o🚀M 🚀ooéo M ", + "Moo é🚀o 🚀éé🚀 Moo 🚀ooM🚀Mooé🚀éMoMo o🚀 oéoMoo🚀🚀🚀🚀🚀🚀éo Mé🚀 oé M M" + ], + ["Moo é🚀🚀🚀o", "Moo é🚀"], + [ + "Moo é🚀o oMéo🚀Mé oMMéé 🚀 ooMM é🚀o🚀", + "Moo é🚀é🚀 Mo oM Mé ééé🚀o é oé oo" + ] + ], + [ + ["Moo é🚀MééMéM o🚀é MMMMéééMéoo", "Moo é🚀 oo🚀é"], + [ + "Moo é🚀é🚀o🚀oM oM🚀MM 🚀oooMééo🚀 ooé🚀oé🚀oo 🚀 oM", + "Moo é🚀 oo 🚀oM🚀M🚀 o 🚀oM🚀🚀é éMMo🚀oo M oMoé🚀oéo🚀🚀o🚀 ooo" + ], + ["Moo é🚀oo", "Moo é🚀o🚀 oo🚀Méooé oo oM "] + ], + [ + ["Moo é🚀ooMMéoMéo ooMMMoé", "Moo é🚀"], + [ + "Moo é🚀oooMMo🚀oo o 🚀oMM🚀o oooM🚀🚀oo🚀🚀MéoMMM 🚀 M oo🚀oo🚀oé🚀éo🚀 o", + "Moo é🚀MMMMMM🚀oéo oéé 🚀🚀é oo🚀éoo" + ], + ["Moo é🚀éoMoo🚀M o", "Moo é🚀 é🚀ooéé🚀ééoooo🚀 M é M 🚀oéoMoooéooooMMoMM"] + ] + ] + ], + [ + [ + [ + ["Moo é🚀", "Moo é🚀 Mo oéo🚀 M🚀oMMMéo"], + [ + "Moo é🚀🚀ooMooé🚀🚀o oo éoé ooMo🚀🚀🚀ooo🚀Méo🚀éMoé 🚀oooo MM", + "Moo é🚀ééoéoéoooM Mo Moéoéo🚀MéMé" + ], + ["Moo é🚀🚀éo🚀M🚀o ooéM🚀M", "Moo é🚀éooMo é ooo é "] + ], + [ + [ + "Moo é🚀Moooooo🚀oéoMMé M🚀🚀éoo 🚀Mééoo🚀o 🚀M oo", + "Moo é🚀o o🚀oMooo🚀oo🚀🚀MoM oMMo🚀oooM " + ], + ["Moo é🚀MéM ooooéooé ", "Moo é🚀"], + [ + "Moo é🚀 éo 🚀 🚀oo🚀éMoo🚀 oéé🚀M éMé oéoMéMoo🚀 🚀🚀oéoo ", + "Moo é🚀M🚀 éé" + ] + ], + [ + ["Moo é🚀Mo🚀oooMéé🚀", "Moo é🚀"], + [ + "Moo é🚀é🚀🚀🚀 🚀ooMMoé🚀 oMé éoééé🚀🚀Mo🚀 🚀oM", + "Moo é🚀éM🚀🚀éo M o 🚀 " + ], + ["Moo é🚀 ooo oo é🚀 🚀Mo 🚀é", "Moo é🚀o oooéoMo 🚀 M"] + ], + [ + ["Moo é🚀o🚀o 🚀o ooM 🚀oMoéooo oMoo🚀", "Moo é🚀🚀 🚀oé🚀MMM "], + [ + "Moo é🚀MoMé🚀o ooo oMé 🚀🚀é 🚀Mo MMMM🚀o🚀", + "Moo é🚀o🚀 é 🚀é🚀oMéoooM 🚀🚀🚀 oMoM o🚀é 🚀o M🚀éo🚀" + ], + ["Moo é🚀🚀M oé🚀oo🚀o", "Moo é🚀"] + ] + ] + ], + [ + [ + [ + ["Moo é🚀", "Moo é🚀o🚀🚀 é 🚀éo🚀🚀oéo MM🚀o🚀o éoooo🚀o ééé"], + ["Moo é🚀oo éooooooMo🚀o oo🚀M o ", "Moo é🚀"], + ["Moo é🚀 🚀Mo", "Moo é🚀oooMo🚀o🚀MM 🚀"] + ], + [ + [ + "Moo é🚀 🚀o M🚀 o ééM🚀oéooo🚀oM🚀M🚀MooMéoo🚀oMéooooo éM🚀", + "Moo é🚀éM🚀é 🚀🚀éoMMo éoéo 🚀MMéoo🚀 o🚀éé🚀M M🚀oéo🚀oM" + ], + ["Moo é🚀", "Moo é🚀 M🚀🚀é Méoo🚀 🚀Moo🚀éé🚀oé🚀"], + [ + "Moo é🚀🚀ooMo🚀oooéooMM🚀éM🚀éoooé o🚀Mo o🚀MM🚀é ééo 🚀oooMoo", + "Moo é🚀é🚀MMo 🚀oo o🚀éooMoé " + ] + ], + [ + ["Moo é🚀éoMoMoMééoé🚀🚀🚀🚀oéoéé🚀🚀é 🚀 Mo oMoMM", "Moo é🚀🚀 🚀"], + [ + "Moo é🚀ééMé🚀o🚀oéM🚀🚀oé M o oéé é🚀o🚀oé oooo🚀é ooo", + "Moo é🚀🚀o 🚀🚀🚀Moo é 🚀🚀o 🚀🚀é MMoMéoo 🚀oé o Moo" + ], + [ + "Moo é🚀🚀🚀éMoM oM 🚀o oMoéo M é oM🚀MM oMMooMoo", + "Moo é🚀 🚀oooMo🚀oéMMéoéooéo🚀éooé oooM MM🚀ééMé oo ooMM🚀éoo" + ] + ], + [ + ["Moo é🚀", "Moo é🚀"], + [ + "Moo é🚀ééoM oM🚀oMéoM🚀🚀MoMéooM🚀ooo oé 🚀🚀 oMMo", + "Moo é🚀 M🚀M🚀 🚀o🚀Méoo ééMoéééM oMMo" + ], + [ + "Moo é🚀M ooé Mo 🚀oéM🚀🚀MMMéo🚀 ooéo🚀🚀 o🚀ooo", + "Moo é🚀oéooééoM 🚀ooo🚀ooéé" + ] + ] + ] + ], + [ + [ + [ + [ + "Moo é🚀o 🚀MoéMMoé🚀", + "Moo é🚀ooo🚀🚀éoéMéoMéM Mo éMoM éM é 🚀 MM 🚀🚀M oé é" + ], + ["Moo é🚀🚀oo🚀oo", "Moo é🚀MMM"], + ["Moo é🚀oMé", "Moo é🚀Mo oMM o🚀🚀M🚀 éo o🚀 oé MoMéo🚀 oé o🚀é"] + ], + [ + ["Moo é🚀🚀MM🚀éMé", "Moo é🚀MM Mo🚀"], + ["Moo é🚀", "Moo é🚀MoM"], + [ + "Moo é🚀oo é oMoéoo🚀é🚀🚀ooéooé é MMM🚀🚀M 🚀🚀🚀🚀🚀 é MMM🚀 oM🚀🚀o Mo", + "Moo é🚀oMMooé é🚀🚀éo🚀o M éMo🚀🚀MooMoo🚀🚀oMo " + ] + ], + [ + [ + "Moo é🚀", + "Moo é🚀 ooM ooM🚀é M oéMé🚀éoéM🚀ooMoo MéMoMMMoé🚀🚀éM🚀 oM🚀oM ééM" + ], + [ + "Moo é🚀oo🚀M🚀o éé oéMMé🚀Moo🚀oéo🚀oo🚀🚀oMoo 🚀🚀 éé éo o o🚀", + "Moo é🚀 ééMéMMoo🚀ooMM🚀🚀ooéMé MoéoM éMoéoéo" + ], + ["Moo é🚀", "Moo é🚀M o🚀MM o🚀 Mo🚀é🚀oMo🚀Mo ooMoé🚀🚀oo🚀🚀 o oM oM 🚀"] + ], + [ + [ + "Moo é🚀", + "Moo é🚀o Moo oo é🚀ééo🚀oooooo éo oéoé éé🚀🚀 MoééMé oéo🚀MéM" + ], + [ + "Moo é🚀éoo🚀o🚀o éMo 🚀ooMo🚀🚀", + "Moo é🚀MéMoo🚀o🚀Méo M🚀 o🚀oM🚀o🚀 M 🚀 ooMoo MoM 🚀oéoéé" + ], + ["Moo é🚀 éooMMo ooMoé oéoo", "Moo é🚀oo é Moooé"] + ] + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀éM🚀o o oo oo 🚀o 🚀Moo🚀o o" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀ooé oMo é MéMM " + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mo M o" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o 🚀oM éoM éoMé MéMoéoéM🚀éM oo oooéMoo🚀 o🚀M 🚀ooéo M " + }, + { + "type": "string", + "value": "Moo é🚀o 🚀éé🚀 Moo 🚀ooM🚀Mooé🚀éMoMo o🚀 oéoMoo🚀🚀🚀🚀🚀🚀éo Mé🚀 oé M M" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀o" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o oMéo🚀Mé oMMéé 🚀 ooMM é🚀o🚀" + }, + { + "type": "string", + "value": "Moo é🚀é🚀 Mo oM Mé ééé🚀o é oé oo" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MééMéM o🚀é MMMMéééMéoo" + }, + { + "type": "string", + "value": "Moo é🚀 oo🚀é" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀o🚀oM oM🚀MM 🚀oooMééo🚀 ooé🚀oé🚀oo 🚀 oM" + }, + { + "type": "string", + "value": "Moo é🚀 oo 🚀oM🚀M🚀 o 🚀oM🚀🚀é éMMo🚀oo M oMoé🚀oéo🚀🚀o🚀 ooo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo" + }, + { + "type": "string", + "value": "Moo é🚀o🚀 oo🚀Méooé oo oM " + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooMMéoMéo ooMMMoé" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oooMMo🚀oo o 🚀oMM🚀o oooM🚀🚀oo🚀🚀MéoMMM 🚀 M oo🚀oo🚀oé🚀éo🚀 o" + }, + { + "type": "string", + "value": "Moo é🚀MMMMMM🚀oéo oéé 🚀🚀é oo🚀éoo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoMoo🚀M o" + }, + { + "type": "string", + "value": "Moo é🚀 é🚀ooéé🚀ééoooo🚀 M é M 🚀oéoMoooéooooMMoMM" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀 Mo oéo🚀 M🚀oMMMéo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀ooMooé🚀🚀o oo éoé ooMo🚀🚀🚀ooo🚀Méo🚀éMoé 🚀oooo MM" + }, + { + "type": "string", + "value": "Moo é🚀ééoéoéoooM Mo Moéoéo🚀MéMé" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀éo🚀M🚀o ooéM🚀M" + }, + { + "type": "string", + "value": "Moo é🚀éooMo é ooo é " + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀Moooooo🚀oéoMMé M🚀🚀éoo 🚀Mééoo🚀o 🚀M oo" + }, + { + "type": "string", + "value": "Moo é🚀o o🚀oMooo🚀oo🚀🚀MoM oMMo🚀oooM " + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MéM ooooéooé " + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 éo 🚀 🚀oo🚀éMoo🚀 oéé🚀M éMé oéoMéMoo🚀 🚀🚀oéoo " + }, + { + "type": "string", + "value": "Moo é🚀M🚀 éé" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mo🚀oooMéé🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀🚀🚀 🚀ooMMoé🚀 oMé éoééé🚀🚀Mo🚀 🚀oM" + }, + { + "type": "string", + "value": "Moo é🚀éM🚀🚀éo M o 🚀 " + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 ooo oo é🚀 🚀Mo 🚀é" + }, + { + "type": "string", + "value": "Moo é🚀o oooéoMo 🚀 M" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀o 🚀o ooM 🚀oMoéooo oMoo🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀 🚀oé🚀MMM " + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MoMé🚀o ooo oMé 🚀🚀é 🚀Mo MMMM🚀o🚀" + }, + { + "type": "string", + "value": "Moo é🚀o🚀 é 🚀é🚀oMéoooM 🚀🚀🚀 oMoM o🚀é 🚀o M🚀éo🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀M oé🚀oo🚀o" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀 é 🚀éo🚀🚀oéo MM🚀o🚀o éoooo🚀o ééé" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo éooooooMo🚀o oo🚀M o " + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀Mo" + }, + { + "type": "string", + "value": "Moo é🚀oooMo🚀o🚀MM 🚀" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀o M🚀 o ééM🚀oéooo🚀oM🚀M🚀MooMéoo🚀oMéooooo éM🚀" + }, + { + "type": "string", + "value": "Moo é🚀éM🚀é 🚀🚀éoMMo éoéo 🚀MMéoo🚀 o🚀éé🚀M M🚀oéo🚀oM" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀 M🚀🚀é Méoo🚀 🚀Moo🚀éé🚀oé🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀ooMo🚀oooéooMM🚀éM🚀éoooé o🚀Mo o🚀MM🚀é ééo 🚀oooMoo" + }, + { + "type": "string", + "value": "Moo é🚀é🚀MMo 🚀oo o🚀éooMoé " + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoMoMoMééoé🚀🚀🚀🚀oéoéé🚀🚀é 🚀 Mo oMoMM" + }, + { + "type": "string", + "value": "Moo é🚀🚀 🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ééMé🚀o🚀oéM🚀🚀oé M o oéé é🚀o🚀oé oooo🚀é ooo" + }, + { + "type": "string", + "value": "Moo é🚀🚀o 🚀🚀🚀Moo é 🚀🚀o 🚀🚀é MMoMéoo 🚀oé o Moo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀éMoM oM 🚀o oMoéo M é oM🚀MM oMMooMoo" + }, + { + "type": "string", + "value": "Moo é🚀 🚀oooMo🚀oéMMéoéooéo🚀éooé oooM MM🚀ééMé oo ooMM🚀éoo" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ééoM oM🚀oMéoM🚀🚀MoMéooM🚀ooo oé 🚀🚀 oMMo" + }, + { + "type": "string", + "value": "Moo é🚀 M🚀M🚀 🚀o🚀Méoo ééMoéééM oMMo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀M ooé Mo 🚀oéM🚀🚀MMMéo🚀 ooéo🚀🚀 o🚀ooo" + }, + { + "type": "string", + "value": "Moo é🚀oéooééoM 🚀ooo🚀ooéé" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o 🚀MoéMMoé🚀" + }, + { + "type": "string", + "value": "Moo é🚀ooo🚀🚀éoéMéoMéM Mo éMoM éM é 🚀 MM 🚀🚀M oé é" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oo🚀oo" + }, + { + "type": "string", + "value": "Moo é🚀MMM" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMé" + }, + { + "type": "string", + "value": "Moo é🚀Mo oMM o🚀🚀M🚀 éo o🚀 oé MoMéo🚀 oé o🚀é" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀MM🚀éMé" + }, + { + "type": "string", + "value": "Moo é🚀MM Mo🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀MoM" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo é oMoéoo🚀é🚀🚀ooéooé é MMM🚀🚀M 🚀🚀🚀🚀🚀 é MMM🚀 oM🚀🚀o Mo" + }, + { + "type": "string", + "value": "Moo é🚀oMMooé é🚀🚀éo🚀o M éMo🚀🚀MooMoo🚀🚀oMo " + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀 ooM ooM🚀é M oéMé🚀éoéM🚀ooMoo MéMoMMMoé🚀🚀éM🚀 oM🚀oM ééM" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀M🚀o éé oéMMé🚀Moo🚀oéo🚀oo🚀🚀oMoo 🚀🚀 éé éo o o🚀" + }, + { + "type": "string", + "value": "Moo é🚀 ééMéMMoo🚀ooMM🚀🚀ooéMé MoéoM éMoéoéo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀M o🚀MM o🚀 Mo🚀é🚀oMo🚀Mo ooMoé🚀🚀oo🚀🚀 o oM oM 🚀" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀o Moo oo é🚀ééo🚀oooooo éo oéoé éé🚀🚀 MoééMé oéo🚀MéM" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoo🚀o🚀o éMo 🚀ooMo🚀🚀" + }, + { + "type": "string", + "value": "Moo é🚀MéMoo🚀o🚀Méo M🚀 o🚀oM🚀o🚀 M 🚀 ooMoo MoM 🚀oéoéé" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 éooMMo ooMoé oéoo" + }, + { + "type": "string", + "value": "Moo é🚀oo é Moooé" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061227f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906112e8565b60405180910390f35b61005661120d565b61005e61120d565b61006661123a565b61006e611267565b610076611294565b61007e6112c1565b60006040518060600160405280603381526020016122176033913982525060408051808201909152600a8152689adede418753e13f3560b71b60208083019190915282015281526100cd6112c1565b6000604051806060016040528060228152602001611e4c6022913982525060408051808201909152600a8152689adede418753e13f3560b71b602080830191909152808301919091528201526101216112c1565b604080518082018252601081526f4d6f6f20c3a9f09f9a804d6f204d206f60801b60208083019190915290835281518083018352600a8152689adede418753e13f3560b71b8183015290830152820152815261017b611294565b6101836112c1565b6000604051806080016040528060558152602001612040605591398252506040805160a08101909152607180825260009190611805602083013960208301525081526101cd6112c1565b60408051808201825260138152724d6f6f20c3a9f09f9a80f09f9a80f09f9a806f60681b6020808301919091529083528151808301909252600a8252689adede418753e13f3560b71b828201528281019190915282015261022c6112c1565b6000604051806060016040528060368152602001611da0603691398252506040805160608101909152603080825260009190611c0e6020830139602080840191909152604084019290925250820152610283611294565b61028b6112c1565b60006040518060600160405280602b8152602001611dd6602b91398252506040805180820190915260138152724d6f6f20c3a9f09f9a80206f6ff09f9a80c3a960681b60208083019190915282015281526102e46112c1565b60006040518060800160405280604c81526020016120cc604c91398252506040805160808101909152605e808252600091906115da6020830139602080840191909152830191909152506103366112c1565b604080518082018252600c81526b4d6f6f20c3a9f09f9a806f6f60a01b602080830191909152908352815160608101909252602480835260009291611d7c90830139602083015250604080830191909152820152610392611294565b61039a6112c1565b604080518082018252601e81527f4d6f6f20c3a9f09f9a806f6f4d4dc3a96f4dc3a96f206f6f4d4d4d6fc3a900006020808301919091529083528151808301909252600a8252689adede418753e13f3560b71b8282015282015281526103fe6112c1565b60006040518060a0016040528060698152602001611f766069913982525060408051606081019091526034808252600091906121e36020830139602080840191909152830191909152506104506112c1565b604080518082018252601781527f4d6f6f20c3a9f09f9a80c3a96f4d6f6ff09f9a804d206f000000000000000000602080830191909152908352815160808101909252604680835260009291611b829083013960208301525060408201526060820152815281526104bf61123a565b6104c7611267565b6104cf611294565b6104d76112c1565b604080518082018252600a8152689adede418753e13f3560b71b60208083019190915290835281516060810190925260238083526000929161148b9083013960208301525081526105266112c1565b60006040518060800160405280605e81526020016116c2605e91398252506040805160608101909152602e808252600091906118c36020830139602080840191909152830191909152506105786112c1565b600060405180606001604052806026815260200161216660269139825250604080518082018252601c81527f4d6f6f20c3a9f09f9a80c3a96f6f4d6f20c3a9206f6f6f2020c3a9200000000060208083019190915283015282015281526105dd611294565b6105e56112c1565b6000604051806080016040528060458152602001611e6e60459139825250604080516060810190915260358082526000919061177f6020830139602083015250815261062f6112c1565b604080518082018252601a81527f4d6f6f20c3a9f09f9a804dc3a94d206f6f6f6fc3a96f6fc3a9200000000000006020808301919091529083528151808301909252600a8252689adede418753e13f3560b71b82820152828101919091528201526106986112c1565b600060405180608001604052806057815260200161218c6057913982525060408051808201825260148152734d6f6f20c3a9f09f9a804df09f9a8020c3a9c3a960601b60208083019190915280840191909152908301919091528201526106fd611294565b6107056112c1565b604080518082018252601c81527f4d6f6f20c3a9f09f9a804d6ff09f9a806f6f6f4dc3a9c3a9f09f9a80000000006020808301919091529083528151808301909252600a8252689adede418753e13f3560b71b8282015282015281526107696112c1565b60006040518060800160405280604d8152602001611876604d91398252506040805160608101909152602380825260009190611ad76020830139602080840191909152830191909152506107bb6112c1565b6000604051806060016040528060268152602001611a0960269139825250604080518082018252601c81527f4d6f6f20c3a9f09f9a806f206f6f6fc3a96f4d6f20f09f9a8020204d0000000060208083019190915283015282810191909152820152610825611294565b61082d6112c1565b6000604051806060016040528060318152602001611afa6031913982525060408051808201909152601e81527f4d6f6f20c3a9f09f9a80f09f9a8020f09f9a806fc3a9f09f9a804d4d4d20000060208083019190915282015281526108906112c1565b60006040518060600160405280603e8152602001611945603e91398252506040805160808101909152605580825260009190611c976020830139602080840191909152830191909152506108e26112c1565b604080518082018252601e81527f4d6f6f20c3a9f09f9a80f09f9a804d206fc3a9f09f9a806f6ff09f9a806f000060208083019190915290835281518083018352600a8152689adede418753e13f3560b71b818301528382015290830191909152606083019190915290825282015261095961123a565b610961611267565b610969611294565b6109716112c1565b604080518082018252600a8152689adede418753e13f3560b71b602080830191909152908352815160808101909252604b80835260009291611e019083013960208301525081526109c06112c1565b600060405180606001604052806027815260200161213f6027913982525060408051808201909152600a8152689adede418753e13f3560b71b60208083019190915280830191909152820152610a146112c1565b60408051808201825260118152704d6f6f20c3a9f09f9a8020f09f9a804d6f60781b60208083019190915290835281518083018352601f81527f4d6f6f20c3a9f09f9a806f6f6f4d6ff09f9a806ff09f9a804d4d20f09f9a800081830152908301528201528152610a83611294565b610a8b6112c1565b6000604051806080016040528060548152602001611437605491398252506040805160808101909152605780825260009190611f1f60208301396020830152508152610ad56112c1565b604080518082018252600a8152689adede418753e13f3560b71b602080830191909152908352815160608101909252603c808352600092916114ae9083013960208084019190915283019190915250610b2c6112c1565b6000604051806080016040528060598152602001611c3e605991398252506040805160608101909152602c808252600091906115186020830139602080840191909152604084019290925250820152610b83611294565b610b8b6112c1565b60006040518060800160405280604a8152602001611cec604a91398252506040805180820190915260138152719adede418753e13f3501e13f350041e13f35606f1b6020808301919091528201528152610be36112c1565b60006040518060800160405280605181526020016117b4605191398252506040805160808101909152605080825260009190611544602083013960208084019190915283019190915250610c356112c1565b60006040518060600160405280603f8152602001611638603f913982525060408051608081019091526054808252600091906118f16020830139602083015250604080830191909152820152610c89611294565b610c916112c1565b604080518082018252600a808252689adede418753e13f3560b71b60208084018290529285528351808501909452908352828201528201528152610cd36112c1565b6000604051806080016040528060468152602001611d36604691398252506040805160608101909152603780825260009190612095602083013960208084019190915283019190915250610d256112c1565b600060405180608001604052806046815260200161159460469139825250604080516060810190915260278082526000919061211860208301396020830152506040808301919091526060830191909152908252820152610d8461123a565b610d8c611267565b610d94611294565b610d9c6112c1565b604080518082018252601e81527f4d6f6f20c3a9f09f9a806f2020f09f9a804d6fc3a94d4d6fc3a9f09f9a800000602080830191909152908352815160808101909252604b80835260009291611677908301396020830152508152610dff6112c1565b60408051808201825260168152754d6f6f20c3a9f09f9a80f09f9a806f6ff09f9a806f6f60501b6020808301919091529083528151808301909252600d82526c4d6f6f20c3a9f09f9a804d4d4d60981b8282015282810191909152820152610e656112c1565b604080518082018252600e81526d4d6f6f20c3a9f09f9a806f4dc3a960901b6020808301919091529083528151608081019092526045808352600092916119c49083013960208301525060408201528152610ebe611294565b610ec66112c1565b604080518082018252601981527f4d6f6f20c3a9f09f9a80f09f9a804d4df09f9a80c3a94dc3a900000000000000602080830191909152908352815180830190925260148252729adede418753e13f35009a9a40409adfe13f3560671b828201528201528152610f346112c1565b604080518082018252600a8152689adede418753e13f3560b71b6020808301919091529083528151808301909252600d82526c4d6f6f20c3a9f09f9a804d6f4d60981b8282015282810191909152820152610f8d6112c1565b60006040518060a00160405280606c8152602001611eb3606c91398252506040805160808101909152604680825260009190611bc86020830139602080840191909152604084019290925250820152610fe4611294565b610fec6112c1565b604080518082018252600a8152689adede418753e13f3560b71b602080830191909152908352815160808101909252605f8083526000929161172090830139602083015250815261103b6112c1565b60006040518060a0016040528060618152602001611fdf60619139825250604080516080810190915260418082526000919061198360208301396020808401919091528301919091525061108d6112c1565b604080518082018252600a8152689adede418753e13f3560b71b602080830191909152908352815160808101909252605580835260009291611a82908301396020830152506040808301919091528201526110e6611294565b6110ee6112c1565b604080518082018252600a8152689adede418753e13f3560b71b602080830191909152908352815160808101909252605780835260009291611b2b90830139602083015250815261113d6112c1565b60006040518060600160405280602e81526020016114ea602e91398252506040805160808101909152605380825260009190611a2f60208301396020808401919091528301919091525061118f6112c1565b604080518082018252601f81527f4d6f6f20c3a9f09f9a8020c3a96f6f4d4d6f206f6f4d6fc3a9206fc3a96f6f006020808301919091529083528151808301835260168152754d6f6f20c3a9f09f9a806f6f20c3a9204d6f6f6fc3a960501b8183015290830152820152606082810191909152908252820152919050565b60405180608001604052806004905b61122461123a565b81526020019060019003908161121c5790505090565b60405180602001604052806001905b611251611267565b8152602001906001900390816112495790505090565b60405180608001604052806004905b61127e611294565b8152602001906001900390816112765790505090565b60405180606001604052806003905b6112ab6112c1565b8152602001906001900390816112a35790505090565b60405180604001604052806002905b60608152602001906001900390816112d05790505090565b6020815260006020820160a083018460005b600481101561142b57858303601f190184528151836020810160005b60018110156114125786820383528351826080810160005b60048110156113fa5785820383528351826060810160005b60038110156113e25785820383528351826040810160005b60028110156113ca5785820383528351805180845260005b8181101561139257602081840181015186830182015201611376565b818111156113a4576000602083870101525b5060209586019594850194601f91909101601f191693909301909201915060010161135e565b50602096870196959095019493505050600101611346565b5060209687019695909501949350505060010161132e565b50602096870196959095019493505050600101611316565b50602096870196909550939093019250506001016112fa565b50909594505050505056fe4d6f6f20c3a9f09f9a8020f09f9a806f204df09f9a80206f20c3a9c3a94df09f9a806fc3a96f6f6ff09f9a806f4df09f9a804df09f9a804d6f6f4dc3a96f6ff09f9a806f4dc3a96f6f6f6f6f20c3a94df09f9a804d6f6f20c3a9f09f9a80204d6f206fc3a96ff09f9a80204df09f9a806f4d4d4dc3a96f4d6f6f20c3a9f09f9a80204df09f9a80f09f9a80c3a9204dc3a96f6ff09f9a802020f09f9a804d6f6ff09f9a80c3a9c3a9f09f9a806fc3a9f09f9a804d6f6f20c3a9f09f9a80c3a96f6ff09f9a806ff09f9a806f20c3a94d6f20f09f9a806f6f4d6ff09f9a80f09f9a804d6f6f20c3a9f09f9a80c3a9f09f9a804d4d6f2020f09f9a806f6f206ff09f9a80c3a96f6f4d6fc3a92020204d6f6f20c3a9f09f9a80f09f9a806f20f09f9a80f09f9a80f09f9a804d6f6f20c3a920f09f9a80f09f9a806f20f09f9a80f09f9a80c3a9204d4d6f4dc3a96f6f2020f09f9a806fc3a9206f20204d6f6f4d6f6f20c3a9f09f9a804d206f6fc3a9204d6f20f09f9a806fc3a94df09f9a80f09f9a804d4d4dc3a96ff09f9a80206f6fc3a96ff09f9a80f09f9a8020206ff09f9a806f6f6f4d6f6f20c3a9f09f9a80206f6f20f09f9a806f4df09f9a804df09f9a80206f2020f09f9a806f4df09f9a80f09f9a80c3a920c3a94d4d6ff09f9a806f6f204d206f4d6fc3a9f09f9a806fc3a96ff09f9a80f09f9a806ff09f9a80206f6f6f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a94d6f4d206f4d20f09f9a806f206f4d6fc3a96f204d2020c3a9206f4df09f9a804d4d206f4d4d6f6f4d6f6f4d6f6f20c3a9f09f9a806f6f6ff09f9a80f09f9a80c3a96fc3a94dc3a96f4dc3a94d204d6f20c3a94d6f4d20c3a94d20c3a920f09f9a80204d4d20f09f9a80f09f9a804d206fc3a920c3a94d6f6f20c3a9f09f9a80f09f9a806f6f4d6f6fc3a9f09f9a80f09f9a806f2020206f6f20c3a96fc3a9206f6f4d6ff09f9a80f09f9a80f09f9a806f6f6ff09f9a804dc3a96ff09f9a80c3a94d6fc3a920f09f9a806f6f6f6f202020204d4d4d6f6f20c3a9f09f9a80206f6f4d206f6f4df09f9a80c3a9204d20206fc3a94dc3a9f09f9a80c3a96fc3a94df09f9a806f6f4d6f6f204dc3a94d6f4d4d4d6fc3a9f09f9a80f09f9a80c3a94df09f9a80206f4df09f9a806f4d20c3a9c3a94d4d6f6f20c3a9f09f9a806f206ff09f9a806f4d6f6f6ff09f9a806f6ff09f9a80f09f9a804d6f4d206f4d4d6ff09f9a806f6f6f4d204d6f6f20c3a9f09f9a80c3a9c3a94dc3a9f09f9a806ff09f9a806fc3a94df09f9a80f09f9a806fc3a9204d206f206fc3a9c3a920c3a9f09f9a806ff09f9a806fc3a9206f6f6f6ff09f9a80c3a9206f6f6f4d6f6f20c3a9f09f9a806f20f09f9a80c3a9c3a9f09f9a80204d6f6f20f09f9a806f6f4df09f9a804d6f6fc3a9f09f9a80c3a94d6f4d6f206ff09f9a80206fc3a96f4d6f6ff09f9a80f09f9a80f09f9a80f09f9a80f09f9a80f09f9a80c3a96f204dc3a9f09f9a80206fc3a9204d20204d4d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a80f09f9a802020f09f9a806f6f4d4d6fc3a9f09f9a80206f4dc3a920c3a96fc3a9c3a9c3a9f09f9a80f09f9a804d6ff09f9a8020f09f9a806f4d4d6f6f20c3a9f09f9a80c3a9c3a96fc3a96fc3a96f6f6f4d204d6f204d6fc3a96fc3a96ff09f9a804dc3a94dc3a94d6f6f20c3a9f09f9a8020f09f9a806f6f6f4d6ff09f9a806fc3a94d4dc3a96fc3a96f6fc3a96ff09f9a80c3a96f6fc3a9206f6f6f4d204d4df09f9a80c3a9c3a94dc3a9206f6f206f6f4d4df09f9a80c3a96f6f4d6f6f20c3a9f09f9a804d6f4dc3a9f09f9a806f20206f6f6f206f4dc3a920f09f9a80f09f9a80c3a920f09f9a804d6f204d4d4d4df09f9a806ff09f9a804d6f6f20c3a9f09f9a8020c3a9c3a94dc3a94d4d6f6ff09f9a806f6f4d4df09f9a80f09f9a806f6fc3a94dc3a920204d6fc3a96f4d2020c3a94d6fc3a96fc3a96f4d6f6f20c3a9f09f9a804d6f206f4d4d206ff09f9a80f09f9a804df09f9a8020c3a96f206ff09f9a80206fc3a9204d6f4dc3a96ff09f9a8020206fc3a9206ff09f9a80c3a94d6f6f20c3a9f09f9a80206f6f6f206f6f20c3a9f09f9a8020f09f9a804d6f20f09f9a80c3a94d6f6f20c3a9f09f9a804dc3a94d6f6ff09f9a806ff09f9a804dc3a96f204df09f9a8020206ff09f9a806f4df09f9a806ff09f9a80204d20f09f9a80206f6f4d6f6f204d6f4d20f09f9a806fc3a96fc3a9c3a94d6f6f20c3a9f09f9a804d206ff09f9a804d4d206ff09f9a80204d6ff09f9a80c3a9f09f9a806f4d6ff09f9a804d6f206f6f4d6fc3a9f09f9a80f09f9a806f6ff09f9a80f09f9a80206f206f4d206f4d20f09f9a804d6f6f20c3a9f09f9a80c3a94df09f9a80f09f9a80c3a96f204d20206f20f09f9a80204d6f6f20c3a9f09f9a806ff09f9a806f20f09f9a806f206f6f4d2020f09f9a806f4d6fc3a96f6f6f206f4d6f6ff09f9a804d6f6f20c3a9f09f9a806f204d6f6f206f6f20c3a9f09f9a80c3a9c3a96ff09f9a806f6f6f6f6f6f20c3a96f206fc3a96fc3a920c3a9c3a9f09f9a80f09f9a80204d6fc3a9c3a94dc3a9206fc3a96ff09f9a804dc3a94d4d6f6f20c3a9f09f9a8020c3a9f09f9a806f6fc3a9c3a9f09f9a80c3a9c3a96f6f6f6ff09f9a80204d20c3a9204d20f09f9a806fc3a96f4d6f6f6fc3a96f6f6f6f4d4d6f4d4d4d6f6f20c3a9f09f9a806f4d4d6f6fc3a920c3a9f09f9a80f09f9a80c3a96ff09f9a806f204d2020c3a94d6ff09f9a80f09f9a804d6f6f4d6f6ff09f9a80f09f9a806f4d6f204d6f6f20c3a9f09f9a80c3a9f09f9a80204d6f206f4d204dc3a920c3a9c3a9c3a9f09f9a806f20c3a9206fc3a9206f6f4d6f6f20c3a9f09f9a80f09f9a806f6f4d6ff09f9a806f6f6fc3a96f6f4d4df09f9a80c3a94df09f9a80c3a96f6f6fc3a9206ff09f9a804d6f206ff09f9a804d4df09f9a80c3a92020c3a9c3a96f20f09f9a806f6f6f4d6f6f4d6f6f20c3a9f09f9a806ff09f9a8020c3a920f09f9a80c3a9f09f9a806f4dc3a96f6f6f4d20f09f9a80f09f9a80f09f9a80206f4d6f4d206ff09f9a80c3a92020f09f9a806f2020204df09f9a80c3a96ff09f9a804d6f6f20c3a9f09f9a80c3a96f4d6f4d6f4dc3a9c3a96fc3a9f09f9a80f09f9a80f09f9a80f09f9a806fc3a96fc3a9c3a9f09f9a80f09f9a80c3a92020f09f9a80204d6f206f4d6f4d4d4d6f6f20c3a9f09f9a80c3a9c3a96f4d206f4df09f9a806f4dc3a96f4df09f9a80f09f9a804d6f4dc3a96f6f4df09f9a806f6f6f206fc3a920f09f9a80f09f9a80206f4d4d6f4d6f6f20c3a9f09f9a806ff09f9a80206f6ff09f9a804dc3a96f6fc3a9206f6f206f4d204d6f6f20c3a9f09f9a806f206f4dc3a96ff09f9a804dc3a9206f4d4dc3a9c3a920f09f9a80206f6f4d4d20c3a9f09f9a806ff09f9a804d6f6f20c3a9f09f9a804dc3a9c3a94dc3a94d206ff09f9a80c3a9204d4d4d4dc3a9c3a9c3a94dc3a96f6f4d6f6f20c3a9f09f9a806ff09f9a80f09f9a802020c3a920f09f9a80c3a96ff09f9a80f09f9a806fc3a96f204d4df09f9a806ff09f9a806f20c3a96f6f6f6ff09f9a806f20c3a9c3a9c3a94d6f6f20c3a9f09f9a80f09f9a806f6fc3a9206f4d6f20c3a9204dc3a94d4d2020204d6f6f20c3a9f09f9a804d6f6f6f6f6f6ff09f9a806fc3a96f4d4dc3a9204df09f9a80f09f9a80c3a96f6f20f09f9a804dc3a9c3a96f6ff09f9a806f20f09f9a804d206f6f4d6f6f20c3a9f09f9a806f6f20c3a9206f4d6fc3a96f6ff09f9a80c3a9f09f9a80f09f9a806f6fc3a96f6fc3a920c3a9204d4d4df09f9a80f09f9a804d20f09f9a80f09f9a80f09f9a80f09f9a80f09f9a8020c3a9204d4d4df09f9a80206f4df09f9a80f09f9a806f204d6f4d6f6f20c3a9f09f9a80c3a94df09f9a80c3a920f09f9a80f09f9a80c3a96f4d4d6f20c3a96fc3a96f20f09f9a804d4dc3a96f6ff09f9a80206ff09f9a80c3a9c3a9f09f9a804d204df09f9a806fc3a96ff09f9a806f4d4d6f6f20c3a9f09f9a806f6f6f4d4d6ff09f9a806f6f206f20f09f9a806f4d4df09f9a806f206f6f6f4df09f9a80f09f9a806f6ff09f9a80f09f9a804dc3a96f4d4d4d202020f09f9a80204d206f6ff09f9a806f6ff09f9a806fc3a9f09f9a80c3a96ff09f9a80206f4d6f6f20c3a9f09f9a806f6ff09f9a804df09f9a806f202020c3a9c3a9206fc3a94d4dc3a9f09f9a804d6f6ff09f9a806fc3a96ff09f9a806f6ff09f9a80f09f9a806f4d6f6f20f09f9a80f09f9a8020c3a9c3a92020c3a96f206f206ff09f9a804d6f6f20c3a9f09f9a806f20f09f9a806f4d20c3a96f4d20c3a96f4dc3a9204dc3a94d6fc3a96fc3a94df09f9a80c3a94d206f6f206f6f6fc3a94d6f6ff09f9a80206ff09f9a804d20f09f9a806f6fc3a96f204d204d6f6f20c3a9f09f9a80204df09f9a804df09f9a8020f09f9a806ff09f9a804dc3a96f6f20c3a9c3a94d6fc3a9c3a9c3a94d206f4d4d6f4d6f6f20c3a9f09f9a80c3a9f09f9a806ff09f9a806f4d206f4df09f9a804d4d20f09f9a806f6f6f4dc3a9c3a96ff09f9a80206f6fc3a9f09f9a806fc3a9f09f9a806f6f20f09f9a80206f4d4d6f6f20c3a9f09f9a806fc3a96f6fc3a9c3a96f4d20f09f9a806f6f6ff09f9a806f6fc3a9c3a94d6f6f20c3a9f09f9a806f6f20c3a96f6f6f6f6f6f4d6ff09f9a806f206f6ff09f9a804d206f204d6f6f20c3a9f09f9a80f09f9a80c3a96ff09f9a804df09f9a806f206f6fc3a94df09f9a804d4d6f6f20c3a9f09f9a8020c3a96f20f09f9a802020f09f9a806f6ff09f9a80c3a94d6f6ff09f9a80206fc3a9c3a9f09f9a804d20c3a94dc3a9206fc3a96f4dc3a94d6f6ff09f9a8020f09f9a80f09f9a806fc3a96f6f204d6f6f20c3a9f09f9a804d4d4d4d4d4df09f9a806fc3a96f206fc3a9c3a920f09f9a80f09f9a80c3a9206f6ff09f9a80c3a96f6f4d6f6f20c3a9f09f9a80f09f9a80c3a94df09f9a806f206f206f6f206f6f20f09f9a806f20f09f9a804d6f6ff09f9a806f206fa2646970667358221220468dbbc4bcaec17e6344b9d2b644d332bdb2e74a3868640b7fb6fbb1eadd897064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n function test () public pure returns (string[2][3][4][1][4] memory) {\n string[2][3][4][1][4] memory r;\n {\n string[2][3][4][1] memory r_0;\n {\n string[2][3][4] memory r_0_0;\n {\n string[2][3] memory r_0_0_0;\n {\n string[2] memory r_0_0_0_0;\n {\n string memory r_0_0_0_0_0 = unicode\"Moo é🚀🚀éM🚀o o oo oo 🚀o 🚀Moo🚀o o\";\n r_0_0_0_0[0] = r_0_0_0_0_0;\n }\n {\n string memory r_0_0_0_0_1 = unicode\"Moo é🚀\";\n r_0_0_0_0[1] = r_0_0_0_0_1;\n }\n r_0_0_0[0] = r_0_0_0_0;\n }\n {\n string[2] memory r_0_0_0_1;\n {\n string memory r_0_0_0_1_0 = unicode\"Moo é🚀🚀ooé oMo é MéMM \";\n r_0_0_0_1[0] = r_0_0_0_1_0;\n }\n {\n string memory r_0_0_0_1_1 = unicode\"Moo é🚀\";\n r_0_0_0_1[1] = r_0_0_0_1_1;\n }\n r_0_0_0[1] = r_0_0_0_1;\n }\n {\n string[2] memory r_0_0_0_2;\n {\n string memory r_0_0_0_2_0 = unicode\"Moo é🚀Mo M o\";\n r_0_0_0_2[0] = r_0_0_0_2_0;\n }\n {\n string memory r_0_0_0_2_1 = unicode\"Moo é🚀\";\n r_0_0_0_2[1] = r_0_0_0_2_1;\n }\n r_0_0_0[2] = r_0_0_0_2;\n }\n r_0_0[0] = r_0_0_0;\n }\n {\n string[2][3] memory r_0_0_1;\n {\n string[2] memory r_0_0_1_0;\n {\n string memory r_0_0_1_0_0 = unicode\"Moo é🚀o 🚀oM éoM éoMé MéMoéoéM🚀éM oo oooéMoo🚀 o🚀M 🚀ooéo M \";\n r_0_0_1_0[0] = r_0_0_1_0_0;\n }\n {\n string memory r_0_0_1_0_1 = unicode\"Moo é🚀o 🚀éé🚀 Moo 🚀ooM🚀Mooé🚀éMoMo o🚀 oéoMoo🚀🚀🚀🚀🚀🚀éo Mé🚀 oé M M\";\n r_0_0_1_0[1] = r_0_0_1_0_1;\n }\n r_0_0_1[0] = r_0_0_1_0;\n }\n {\n string[2] memory r_0_0_1_1;\n {\n string memory r_0_0_1_1_0 = unicode\"Moo é🚀🚀🚀o\";\n r_0_0_1_1[0] = r_0_0_1_1_0;\n }\n {\n string memory r_0_0_1_1_1 = unicode\"Moo é🚀\";\n r_0_0_1_1[1] = r_0_0_1_1_1;\n }\n r_0_0_1[1] = r_0_0_1_1;\n }\n {\n string[2] memory r_0_0_1_2;\n {\n string memory r_0_0_1_2_0 = unicode\"Moo é🚀o oMéo🚀Mé oMMéé 🚀 ooMM é🚀o🚀\";\n r_0_0_1_2[0] = r_0_0_1_2_0;\n }\n {\n string memory r_0_0_1_2_1 = unicode\"Moo é🚀é🚀 Mo oM Mé ééé🚀o é oé oo\";\n r_0_0_1_2[1] = r_0_0_1_2_1;\n }\n r_0_0_1[2] = r_0_0_1_2;\n }\n r_0_0[1] = r_0_0_1;\n }\n {\n string[2][3] memory r_0_0_2;\n {\n string[2] memory r_0_0_2_0;\n {\n string memory r_0_0_2_0_0 = unicode\"Moo é🚀MééMéM o🚀é MMMMéééMéoo\";\n r_0_0_2_0[0] = r_0_0_2_0_0;\n }\n {\n string memory r_0_0_2_0_1 = unicode\"Moo é🚀 oo🚀é\";\n r_0_0_2_0[1] = r_0_0_2_0_1;\n }\n r_0_0_2[0] = r_0_0_2_0;\n }\n {\n string[2] memory r_0_0_2_1;\n {\n string memory r_0_0_2_1_0 = unicode\"Moo é🚀é🚀o🚀oM oM🚀MM 🚀oooMééo🚀 ooé🚀oé🚀oo 🚀 oM\";\n r_0_0_2_1[0] = r_0_0_2_1_0;\n }\n {\n string memory r_0_0_2_1_1 = unicode\"Moo é🚀 oo 🚀oM🚀M🚀 o 🚀oM🚀🚀é éMMo🚀oo M oMoé🚀oéo🚀🚀o🚀 ooo\";\n r_0_0_2_1[1] = r_0_0_2_1_1;\n }\n r_0_0_2[1] = r_0_0_2_1;\n }\n {\n string[2] memory r_0_0_2_2;\n {\n string memory r_0_0_2_2_0 = unicode\"Moo é🚀oo\";\n r_0_0_2_2[0] = r_0_0_2_2_0;\n }\n {\n string memory r_0_0_2_2_1 = unicode\"Moo é🚀o🚀 oo🚀Méooé oo oM \";\n r_0_0_2_2[1] = r_0_0_2_2_1;\n }\n r_0_0_2[2] = r_0_0_2_2;\n }\n r_0_0[2] = r_0_0_2;\n }\n {\n string[2][3] memory r_0_0_3;\n {\n string[2] memory r_0_0_3_0;\n {\n string memory r_0_0_3_0_0 = unicode\"Moo é🚀ooMMéoMéo ooMMMoé\";\n r_0_0_3_0[0] = r_0_0_3_0_0;\n }\n {\n string memory r_0_0_3_0_1 = unicode\"Moo é🚀\";\n r_0_0_3_0[1] = r_0_0_3_0_1;\n }\n r_0_0_3[0] = r_0_0_3_0;\n }\n {\n string[2] memory r_0_0_3_1;\n {\n string memory r_0_0_3_1_0 = unicode\"Moo é🚀oooMMo🚀oo o 🚀oMM🚀o oooM🚀🚀oo🚀🚀MéoMMM 🚀 M oo🚀oo🚀oé🚀éo🚀 o\";\n r_0_0_3_1[0] = r_0_0_3_1_0;\n }\n {\n string memory r_0_0_3_1_1 = unicode\"Moo é🚀MMMMMM🚀oéo oéé 🚀🚀é oo🚀éoo\";\n r_0_0_3_1[1] = r_0_0_3_1_1;\n }\n r_0_0_3[1] = r_0_0_3_1;\n }\n {\n string[2] memory r_0_0_3_2;\n {\n string memory r_0_0_3_2_0 = unicode\"Moo é🚀éoMoo🚀M o\";\n r_0_0_3_2[0] = r_0_0_3_2_0;\n }\n {\n string memory r_0_0_3_2_1 = unicode\"Moo é🚀 é🚀ooéé🚀ééoooo🚀 M é M 🚀oéoMoooéooooMMoMM\";\n r_0_0_3_2[1] = r_0_0_3_2_1;\n }\n r_0_0_3[2] = r_0_0_3_2;\n }\n r_0_0[3] = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n string[2][3][4][1] memory r_1;\n {\n string[2][3][4] memory r_1_0;\n {\n string[2][3] memory r_1_0_0;\n {\n string[2] memory r_1_0_0_0;\n {\n string memory r_1_0_0_0_0 = unicode\"Moo é🚀\";\n r_1_0_0_0[0] = r_1_0_0_0_0;\n }\n {\n string memory r_1_0_0_0_1 = unicode\"Moo é🚀 Mo oéo🚀 M🚀oMMMéo\";\n r_1_0_0_0[1] = r_1_0_0_0_1;\n }\n r_1_0_0[0] = r_1_0_0_0;\n }\n {\n string[2] memory r_1_0_0_1;\n {\n string memory r_1_0_0_1_0 = unicode\"Moo é🚀🚀ooMooé🚀🚀o oo éoé ooMo🚀🚀🚀ooo🚀Méo🚀éMoé 🚀oooo MM\";\n r_1_0_0_1[0] = r_1_0_0_1_0;\n }\n {\n string memory r_1_0_0_1_1 = unicode\"Moo é🚀ééoéoéoooM Mo Moéoéo🚀MéMé\";\n r_1_0_0_1[1] = r_1_0_0_1_1;\n }\n r_1_0_0[1] = r_1_0_0_1;\n }\n {\n string[2] memory r_1_0_0_2;\n {\n string memory r_1_0_0_2_0 = unicode\"Moo é🚀🚀éo🚀M🚀o ooéM🚀M\";\n r_1_0_0_2[0] = r_1_0_0_2_0;\n }\n {\n string memory r_1_0_0_2_1 = unicode\"Moo é🚀éooMo é ooo é \";\n r_1_0_0_2[1] = r_1_0_0_2_1;\n }\n r_1_0_0[2] = r_1_0_0_2;\n }\n r_1_0[0] = r_1_0_0;\n }\n {\n string[2][3] memory r_1_0_1;\n {\n string[2] memory r_1_0_1_0;\n {\n string memory r_1_0_1_0_0 = unicode\"Moo é🚀Moooooo🚀oéoMMé M🚀🚀éoo 🚀Mééoo🚀o 🚀M oo\";\n r_1_0_1_0[0] = r_1_0_1_0_0;\n }\n {\n string memory r_1_0_1_0_1 = unicode\"Moo é🚀o o🚀oMooo🚀oo🚀🚀MoM oMMo🚀oooM \";\n r_1_0_1_0[1] = r_1_0_1_0_1;\n }\n r_1_0_1[0] = r_1_0_1_0;\n }\n {\n string[2] memory r_1_0_1_1;\n {\n string memory r_1_0_1_1_0 = unicode\"Moo é🚀MéM ooooéooé \";\n r_1_0_1_1[0] = r_1_0_1_1_0;\n }\n {\n string memory r_1_0_1_1_1 = unicode\"Moo é🚀\";\n r_1_0_1_1[1] = r_1_0_1_1_1;\n }\n r_1_0_1[1] = r_1_0_1_1;\n }\n {\n string[2] memory r_1_0_1_2;\n {\n string memory r_1_0_1_2_0 = unicode\"Moo é🚀 éo 🚀 🚀oo🚀éMoo🚀 oéé🚀M éMé oéoMéMoo🚀 🚀🚀oéoo \";\n r_1_0_1_2[0] = r_1_0_1_2_0;\n }\n {\n string memory r_1_0_1_2_1 = unicode\"Moo é🚀M🚀 éé\";\n r_1_0_1_2[1] = r_1_0_1_2_1;\n }\n r_1_0_1[2] = r_1_0_1_2;\n }\n r_1_0[1] = r_1_0_1;\n }\n {\n string[2][3] memory r_1_0_2;\n {\n string[2] memory r_1_0_2_0;\n {\n string memory r_1_0_2_0_0 = unicode\"Moo é🚀Mo🚀oooMéé🚀\";\n r_1_0_2_0[0] = r_1_0_2_0_0;\n }\n {\n string memory r_1_0_2_0_1 = unicode\"Moo é🚀\";\n r_1_0_2_0[1] = r_1_0_2_0_1;\n }\n r_1_0_2[0] = r_1_0_2_0;\n }\n {\n string[2] memory r_1_0_2_1;\n {\n string memory r_1_0_2_1_0 = unicode\"Moo é🚀é🚀🚀🚀 🚀ooMMoé🚀 oMé éoééé🚀🚀Mo🚀 🚀oM\";\n r_1_0_2_1[0] = r_1_0_2_1_0;\n }\n {\n string memory r_1_0_2_1_1 = unicode\"Moo é🚀éM🚀🚀éo M o 🚀 \";\n r_1_0_2_1[1] = r_1_0_2_1_1;\n }\n r_1_0_2[1] = r_1_0_2_1;\n }\n {\n string[2] memory r_1_0_2_2;\n {\n string memory r_1_0_2_2_0 = unicode\"Moo é🚀 ooo oo é🚀 🚀Mo 🚀é\";\n r_1_0_2_2[0] = r_1_0_2_2_0;\n }\n {\n string memory r_1_0_2_2_1 = unicode\"Moo é🚀o oooéoMo 🚀 M\";\n r_1_0_2_2[1] = r_1_0_2_2_1;\n }\n r_1_0_2[2] = r_1_0_2_2;\n }\n r_1_0[2] = r_1_0_2;\n }\n {\n string[2][3] memory r_1_0_3;\n {\n string[2] memory r_1_0_3_0;\n {\n string memory r_1_0_3_0_0 = unicode\"Moo é🚀o🚀o 🚀o ooM 🚀oMoéooo oMoo🚀\";\n r_1_0_3_0[0] = r_1_0_3_0_0;\n }\n {\n string memory r_1_0_3_0_1 = unicode\"Moo é🚀🚀 🚀oé🚀MMM \";\n r_1_0_3_0[1] = r_1_0_3_0_1;\n }\n r_1_0_3[0] = r_1_0_3_0;\n }\n {\n string[2] memory r_1_0_3_1;\n {\n string memory r_1_0_3_1_0 = unicode\"Moo é🚀MoMé🚀o ooo oMé 🚀🚀é 🚀Mo MMMM🚀o🚀\";\n r_1_0_3_1[0] = r_1_0_3_1_0;\n }\n {\n string memory r_1_0_3_1_1 = unicode\"Moo é🚀o🚀 é 🚀é🚀oMéoooM 🚀🚀🚀 oMoM o🚀é 🚀o M🚀éo🚀\";\n r_1_0_3_1[1] = r_1_0_3_1_1;\n }\n r_1_0_3[1] = r_1_0_3_1;\n }\n {\n string[2] memory r_1_0_3_2;\n {\n string memory r_1_0_3_2_0 = unicode\"Moo é🚀🚀M oé🚀oo🚀o\";\n r_1_0_3_2[0] = r_1_0_3_2_0;\n }\n {\n string memory r_1_0_3_2_1 = unicode\"Moo é🚀\";\n r_1_0_3_2[1] = r_1_0_3_2_1;\n }\n r_1_0_3[2] = r_1_0_3_2;\n }\n r_1_0[3] = r_1_0_3;\n }\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n {\n string[2][3][4][1] memory r_2;\n {\n string[2][3][4] memory r_2_0;\n {\n string[2][3] memory r_2_0_0;\n {\n string[2] memory r_2_0_0_0;\n {\n string memory r_2_0_0_0_0 = unicode\"Moo é🚀\";\n r_2_0_0_0[0] = r_2_0_0_0_0;\n }\n {\n string memory r_2_0_0_0_1 = unicode\"Moo é🚀o🚀🚀 é 🚀éo🚀🚀oéo MM🚀o🚀o éoooo🚀o ééé\";\n r_2_0_0_0[1] = r_2_0_0_0_1;\n }\n r_2_0_0[0] = r_2_0_0_0;\n }\n {\n string[2] memory r_2_0_0_1;\n {\n string memory r_2_0_0_1_0 = unicode\"Moo é🚀oo éooooooMo🚀o oo🚀M o \";\n r_2_0_0_1[0] = r_2_0_0_1_0;\n }\n {\n string memory r_2_0_0_1_1 = unicode\"Moo é🚀\";\n r_2_0_0_1[1] = r_2_0_0_1_1;\n }\n r_2_0_0[1] = r_2_0_0_1;\n }\n {\n string[2] memory r_2_0_0_2;\n {\n string memory r_2_0_0_2_0 = unicode\"Moo é🚀 🚀Mo\";\n r_2_0_0_2[0] = r_2_0_0_2_0;\n }\n {\n string memory r_2_0_0_2_1 = unicode\"Moo é🚀oooMo🚀o🚀MM 🚀\";\n r_2_0_0_2[1] = r_2_0_0_2_1;\n }\n r_2_0_0[2] = r_2_0_0_2;\n }\n r_2_0[0] = r_2_0_0;\n }\n {\n string[2][3] memory r_2_0_1;\n {\n string[2] memory r_2_0_1_0;\n {\n string memory r_2_0_1_0_0 = unicode\"Moo é🚀 🚀o M🚀 o ééM🚀oéooo🚀oM🚀M🚀MooMéoo🚀oMéooooo éM🚀\";\n r_2_0_1_0[0] = r_2_0_1_0_0;\n }\n {\n string memory r_2_0_1_0_1 = unicode\"Moo é🚀éM🚀é 🚀🚀éoMMo éoéo 🚀MMéoo🚀 o🚀éé🚀M M🚀oéo🚀oM\";\n r_2_0_1_0[1] = r_2_0_1_0_1;\n }\n r_2_0_1[0] = r_2_0_1_0;\n }\n {\n string[2] memory r_2_0_1_1;\n {\n string memory r_2_0_1_1_0 = unicode\"Moo é🚀\";\n r_2_0_1_1[0] = r_2_0_1_1_0;\n }\n {\n string memory r_2_0_1_1_1 = unicode\"Moo é🚀 M🚀🚀é Méoo🚀 🚀Moo🚀éé🚀oé🚀\";\n r_2_0_1_1[1] = r_2_0_1_1_1;\n }\n r_2_0_1[1] = r_2_0_1_1;\n }\n {\n string[2] memory r_2_0_1_2;\n {\n string memory r_2_0_1_2_0 = unicode\"Moo é🚀🚀ooMo🚀oooéooMM🚀éM🚀éoooé o🚀Mo o🚀MM🚀é ééo 🚀oooMoo\";\n r_2_0_1_2[0] = r_2_0_1_2_0;\n }\n {\n string memory r_2_0_1_2_1 = unicode\"Moo é🚀é🚀MMo 🚀oo o🚀éooMoé \";\n r_2_0_1_2[1] = r_2_0_1_2_1;\n }\n r_2_0_1[2] = r_2_0_1_2;\n }\n r_2_0[1] = r_2_0_1;\n }\n {\n string[2][3] memory r_2_0_2;\n {\n string[2] memory r_2_0_2_0;\n {\n string memory r_2_0_2_0_0 = unicode\"Moo é🚀éoMoMoMééoé🚀🚀🚀🚀oéoéé🚀🚀é 🚀 Mo oMoMM\";\n r_2_0_2_0[0] = r_2_0_2_0_0;\n }\n {\n string memory r_2_0_2_0_1 = unicode\"Moo é🚀🚀 🚀\";\n r_2_0_2_0[1] = r_2_0_2_0_1;\n }\n r_2_0_2[0] = r_2_0_2_0;\n }\n {\n string[2] memory r_2_0_2_1;\n {\n string memory r_2_0_2_1_0 = unicode\"Moo é🚀ééMé🚀o🚀oéM🚀🚀oé M o oéé é🚀o🚀oé oooo🚀é ooo\";\n r_2_0_2_1[0] = r_2_0_2_1_0;\n }\n {\n string memory r_2_0_2_1_1 = unicode\"Moo é🚀🚀o 🚀🚀🚀Moo é 🚀🚀o 🚀🚀é MMoMéoo 🚀oé o Moo\";\n r_2_0_2_1[1] = r_2_0_2_1_1;\n }\n r_2_0_2[1] = r_2_0_2_1;\n }\n {\n string[2] memory r_2_0_2_2;\n {\n string memory r_2_0_2_2_0 = unicode\"Moo é🚀🚀🚀éMoM oM 🚀o oMoéo M é oM🚀MM oMMooMoo\";\n r_2_0_2_2[0] = r_2_0_2_2_0;\n }\n {\n string memory r_2_0_2_2_1 = unicode\"Moo é🚀 🚀oooMo🚀oéMMéoéooéo🚀éooé oooM MM🚀ééMé oo ooMM🚀éoo\";\n r_2_0_2_2[1] = r_2_0_2_2_1;\n }\n r_2_0_2[2] = r_2_0_2_2;\n }\n r_2_0[2] = r_2_0_2;\n }\n {\n string[2][3] memory r_2_0_3;\n {\n string[2] memory r_2_0_3_0;\n {\n string memory r_2_0_3_0_0 = unicode\"Moo é🚀\";\n r_2_0_3_0[0] = r_2_0_3_0_0;\n }\n {\n string memory r_2_0_3_0_1 = unicode\"Moo é🚀\";\n r_2_0_3_0[1] = r_2_0_3_0_1;\n }\n r_2_0_3[0] = r_2_0_3_0;\n }\n {\n string[2] memory r_2_0_3_1;\n {\n string memory r_2_0_3_1_0 = unicode\"Moo é🚀ééoM oM🚀oMéoM🚀🚀MoMéooM🚀ooo oé 🚀🚀 oMMo\";\n r_2_0_3_1[0] = r_2_0_3_1_0;\n }\n {\n string memory r_2_0_3_1_1 = unicode\"Moo é🚀 M🚀M🚀 🚀o🚀Méoo ééMoéééM oMMo\";\n r_2_0_3_1[1] = r_2_0_3_1_1;\n }\n r_2_0_3[1] = r_2_0_3_1;\n }\n {\n string[2] memory r_2_0_3_2;\n {\n string memory r_2_0_3_2_0 = unicode\"Moo é🚀M ooé Mo 🚀oéM🚀🚀MMMéo🚀 ooéo🚀🚀 o🚀ooo\";\n r_2_0_3_2[0] = r_2_0_3_2_0;\n }\n {\n string memory r_2_0_3_2_1 = unicode\"Moo é🚀oéooééoM 🚀ooo🚀ooéé\";\n r_2_0_3_2[1] = r_2_0_3_2_1;\n }\n r_2_0_3[2] = r_2_0_3_2;\n }\n r_2_0[3] = r_2_0_3;\n }\n r_2[0] = r_2_0;\n }\n r[2] = r_2;\n }\n {\n string[2][3][4][1] memory r_3;\n {\n string[2][3][4] memory r_3_0;\n {\n string[2][3] memory r_3_0_0;\n {\n string[2] memory r_3_0_0_0;\n {\n string memory r_3_0_0_0_0 = unicode\"Moo é🚀o 🚀MoéMMoé🚀\";\n r_3_0_0_0[0] = r_3_0_0_0_0;\n }\n {\n string memory r_3_0_0_0_1 = unicode\"Moo é🚀ooo🚀🚀éoéMéoMéM Mo éMoM éM é 🚀 MM 🚀🚀M oé é\";\n r_3_0_0_0[1] = r_3_0_0_0_1;\n }\n r_3_0_0[0] = r_3_0_0_0;\n }\n {\n string[2] memory r_3_0_0_1;\n {\n string memory r_3_0_0_1_0 = unicode\"Moo é🚀🚀oo🚀oo\";\n r_3_0_0_1[0] = r_3_0_0_1_0;\n }\n {\n string memory r_3_0_0_1_1 = unicode\"Moo é🚀MMM\";\n r_3_0_0_1[1] = r_3_0_0_1_1;\n }\n r_3_0_0[1] = r_3_0_0_1;\n }\n {\n string[2] memory r_3_0_0_2;\n {\n string memory r_3_0_0_2_0 = unicode\"Moo é🚀oMé\";\n r_3_0_0_2[0] = r_3_0_0_2_0;\n }\n {\n string memory r_3_0_0_2_1 = unicode\"Moo é🚀Mo oMM o🚀🚀M🚀 éo o🚀 oé MoMéo🚀 oé o🚀é\";\n r_3_0_0_2[1] = r_3_0_0_2_1;\n }\n r_3_0_0[2] = r_3_0_0_2;\n }\n r_3_0[0] = r_3_0_0;\n }\n {\n string[2][3] memory r_3_0_1;\n {\n string[2] memory r_3_0_1_0;\n {\n string memory r_3_0_1_0_0 = unicode\"Moo é🚀🚀MM🚀éMé\";\n r_3_0_1_0[0] = r_3_0_1_0_0;\n }\n {\n string memory r_3_0_1_0_1 = unicode\"Moo é🚀MM Mo🚀\";\n r_3_0_1_0[1] = r_3_0_1_0_1;\n }\n r_3_0_1[0] = r_3_0_1_0;\n }\n {\n string[2] memory r_3_0_1_1;\n {\n string memory r_3_0_1_1_0 = unicode\"Moo é🚀\";\n r_3_0_1_1[0] = r_3_0_1_1_0;\n }\n {\n string memory r_3_0_1_1_1 = unicode\"Moo é🚀MoM\";\n r_3_0_1_1[1] = r_3_0_1_1_1;\n }\n r_3_0_1[1] = r_3_0_1_1;\n }\n {\n string[2] memory r_3_0_1_2;\n {\n string memory r_3_0_1_2_0 = unicode\"Moo é🚀oo é oMoéoo🚀é🚀🚀ooéooé é MMM🚀🚀M 🚀🚀🚀🚀🚀 é MMM🚀 oM🚀🚀o Mo\";\n r_3_0_1_2[0] = r_3_0_1_2_0;\n }\n {\n string memory r_3_0_1_2_1 = unicode\"Moo é🚀oMMooé é🚀🚀éo🚀o M éMo🚀🚀MooMoo🚀🚀oMo \";\n r_3_0_1_2[1] = r_3_0_1_2_1;\n }\n r_3_0_1[2] = r_3_0_1_2;\n }\n r_3_0[1] = r_3_0_1;\n }\n {\n string[2][3] memory r_3_0_2;\n {\n string[2] memory r_3_0_2_0;\n {\n string memory r_3_0_2_0_0 = unicode\"Moo é🚀\";\n r_3_0_2_0[0] = r_3_0_2_0_0;\n }\n {\n string memory r_3_0_2_0_1 = unicode\"Moo é🚀 ooM ooM🚀é M oéMé🚀éoéM🚀ooMoo MéMoMMMoé🚀🚀éM🚀 oM🚀oM ééM\";\n r_3_0_2_0[1] = r_3_0_2_0_1;\n }\n r_3_0_2[0] = r_3_0_2_0;\n }\n {\n string[2] memory r_3_0_2_1;\n {\n string memory r_3_0_2_1_0 = unicode\"Moo é🚀oo🚀M🚀o éé oéMMé🚀Moo🚀oéo🚀oo🚀🚀oMoo 🚀🚀 éé éo o o🚀\";\n r_3_0_2_1[0] = r_3_0_2_1_0;\n }\n {\n string memory r_3_0_2_1_1 = unicode\"Moo é🚀 ééMéMMoo🚀ooMM🚀🚀ooéMé MoéoM éMoéoéo\";\n r_3_0_2_1[1] = r_3_0_2_1_1;\n }\n r_3_0_2[1] = r_3_0_2_1;\n }\n {\n string[2] memory r_3_0_2_2;\n {\n string memory r_3_0_2_2_0 = unicode\"Moo é🚀\";\n r_3_0_2_2[0] = r_3_0_2_2_0;\n }\n {\n string memory r_3_0_2_2_1 = unicode\"Moo é🚀M o🚀MM o🚀 Mo🚀é🚀oMo🚀Mo ooMoé🚀🚀oo🚀🚀 o oM oM 🚀\";\n r_3_0_2_2[1] = r_3_0_2_2_1;\n }\n r_3_0_2[2] = r_3_0_2_2;\n }\n r_3_0[2] = r_3_0_2;\n }\n {\n string[2][3] memory r_3_0_3;\n {\n string[2] memory r_3_0_3_0;\n {\n string memory r_3_0_3_0_0 = unicode\"Moo é🚀\";\n r_3_0_3_0[0] = r_3_0_3_0_0;\n }\n {\n string memory r_3_0_3_0_1 = unicode\"Moo é🚀o Moo oo é🚀ééo🚀oooooo éo oéoé éé🚀🚀 MoééMé oéo🚀MéM\";\n r_3_0_3_0[1] = r_3_0_3_0_1;\n }\n r_3_0_3[0] = r_3_0_3_0;\n }\n {\n string[2] memory r_3_0_3_1;\n {\n string memory r_3_0_3_1_0 = unicode\"Moo é🚀éoo🚀o🚀o éMo 🚀ooMo🚀🚀\";\n r_3_0_3_1[0] = r_3_0_3_1_0;\n }\n {\n string memory r_3_0_3_1_1 = unicode\"Moo é🚀MéMoo🚀o🚀Méo M🚀 o🚀oM🚀o🚀 M 🚀 ooMoo MoM 🚀oéoéé\";\n r_3_0_3_1[1] = r_3_0_3_1_1;\n }\n r_3_0_3[1] = r_3_0_3_1;\n }\n {\n string[2] memory r_3_0_3_2;\n {\n string memory r_3_0_3_2_0 = unicode\"Moo é🚀 éooMMo ooMoé oéoo\";\n r_3_0_3_2[0] = r_3_0_3_2_0;\n }\n {\n string memory r_3_0_3_2_1 = unicode\"Moo é🚀oo é Moooé\";\n r_3_0_3_2[1] = r_3_0_3_2_1;\n }\n r_3_0_3[2] = r_3_0_3_2;\n }\n r_3_0[3] = r_3_0_3;\n }\n r_3[0] = r_3_0;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000e400000000000000000000000000000000000000000000000000000000000001ba00000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000006e00000000000000000000000000000000000000000000000000000000000000a40000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a80f09f9a80c3a94df09f9a806f206f206f6f206f6f20f09f9a806f20f09f9a804d6f6ff09f9a806f206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a80f09f9a806f6fc3a9206f4d6f20c3a9204dc3a94d4d202020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a804d6f204d206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a806f20f09f9a806f4d20c3a96f4d20c3a96f4dc3a9204dc3a94d6fc3a96fc3a94df09f9a80c3a94d206f6f206f6f6fc3a94d6f6ff09f9a80206ff09f9a804d20f09f9a806f6fc3a96f204d20000000000000000000000000000000000000000000000000000000000000000000000000000000000000714d6f6f20c3a9f09f9a806f20f09f9a80c3a9c3a9f09f9a80204d6f6f20f09f9a806f6f4df09f9a804d6f6fc3a9f09f9a80c3a94d6f4d6f206ff09f9a80206fc3a96f4d6f6ff09f9a80f09f9a80f09f9a80f09f9a80f09f9a80f09f9a80c3a96f204dc3a9f09f9a80206fc3a9204d20204d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a80f09f9a80f09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a806f206f4dc3a96ff09f9a804dc3a9206f4d4dc3a9c3a920f09f9a80206f6f4d4d20c3a9f09f9a806ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a80c3a9f09f9a80204d6f206f4d204dc3a920c3a9c3a9c3a9f09f9a806f20c3a9206fc3a9206f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a804dc3a9c3a94dc3a94d206ff09f9a80c3a9204d4d4d4dc3a9c3a9c3a94dc3a96f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a80206f6ff09f9a80c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a80c3a9f09f9a806ff09f9a806f4d206f4df09f9a804d4d20f09f9a806f6f6f4dc3a9c3a96ff09f9a80206f6fc3a9f09f9a806fc3a9f09f9a806f6f20f09f9a80206f4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a80206f6f20f09f9a806f4df09f9a804df09f9a80206f2020f09f9a806f4df09f9a80f09f9a80c3a920c3a94d4d6ff09f9a806f6f204d206f4d6fc3a9f09f9a806fc3a96ff09f9a80f09f9a806ff09f9a80206f6f6f000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a806f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000244d6f6f20c3a9f09f9a806ff09f9a80206f6ff09f9a804dc3a96f6fc3a9206f6f206f4d200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a806f6f4d4dc3a96f4dc3a96f206f6f4d4d4d6fc3a90000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000694d6f6f20c3a9f09f9a806f6f6f4d4d6ff09f9a806f6f206f20f09f9a806f4d4df09f9a806f206f6f6f4df09f9a80f09f9a806f6ff09f9a80f09f9a804dc3a96f4d4d4d202020f09f9a80204d206f6ff09f9a806f6ff09f9a806fc3a9f09f9a80c3a96ff09f9a80206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a804d4d4d4d4d4df09f9a806fc3a96f206fc3a9c3a920f09f9a80f09f9a80c3a9206f6ff09f9a80c3a96f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a80c3a96f4d6f6ff09f9a804d206f00000000000000000000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a8020c3a9f09f9a806f6fc3a9c3a9f09f9a80c3a9c3a96f6f6f6ff09f9a80204d20c3a9204d20f09f9a806fc3a96f4d6f6f6fc3a96f6f6f6f4d4d6f4d4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000a2000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a80204d6f206fc3a96ff09f9a80204df09f9a806f4d4d4dc3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a80f09f9a806f6f4d6f6fc3a9f09f9a80f09f9a806f2020206f6f20c3a96fc3a9206f6f4d6ff09f9a80f09f9a80f09f9a806f6f6ff09f9a804dc3a96ff09f9a80c3a94d6fc3a920f09f9a806f6f6f6f202020204d4d0000000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a80c3a9c3a96fc3a96fc3a96f6f6f4d204d6f204d6fc3a96fc3a96ff09f9a804dc3a94dc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a80f09f9a80c3a96ff09f9a804df09f9a806f206f6fc3a94df09f9a804d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80c3a96f6f4d6f20c3a9206f6f6f2020c3a92000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a804d6f6f6f6f6f6ff09f9a806fc3a96f4d4dc3a9204df09f9a80f09f9a80c3a96f6f20f09f9a804dc3a9c3a96f6ff09f9a806f20f09f9a804d206f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000354d6f6f20c3a9f09f9a806f206ff09f9a806f4d6f6f6ff09f9a806f6ff09f9a80f09f9a804d6f4d206f4d4d6ff09f9a806f6f6f4d20000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001a4d6f6f20c3a9f09f9a804dc3a94d206f6f6f6fc3a96f6fc3a920000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a8020c3a96f20f09f9a802020f09f9a806f6ff09f9a80c3a94d6f6ff09f9a80206fc3a9c3a9f09f9a804d20c3a94dc3a9206fc3a96f4dc3a94d6f6ff09f9a8020f09f9a80f09f9a806fc3a96f6f2000000000000000000000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a804df09f9a8020c3a9c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a804d6ff09f9a806f6f6f4dc3a9c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a80f09f9a802020f09f9a806f6f4d4d6fc3a9f09f9a80206f4dc3a920c3a96fc3a9c3a9c3a9f09f9a80f09f9a804d6ff09f9a8020f09f9a806f4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a80c3a94df09f9a80f09f9a80c3a96f204d20206f20f09f9a80200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a80206f6f6f206f6f20c3a9f09f9a8020f09f9a804d6f20f09f9a80c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a806f206f6f6fc3a96f4d6f20f09f9a8020204d00000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a806ff09f9a806f20f09f9a806f206f6f4d2020f09f9a806f4d6fc3a96f6f6f206f4d6f6ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a80f09f9a8020f09f9a806fc3a9f09f9a804d4d4d200000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a804d6f4dc3a9f09f9a806f20206f6f6f206f4dc3a920f09f9a80f09f9a80c3a920f09f9a804d6f204d4d4d4df09f9a806ff09f9a80000000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a806ff09f9a8020c3a920f09f9a80c3a9f09f9a806f4dc3a96f6f6f4d20f09f9a80f09f9a80f09f9a80206f4d6f4d206ff09f9a80c3a92020f09f9a806f2020204df09f9a80c3a96ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a80f09f9a804d206fc3a9f09f9a806f6ff09f9a806f0000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000007200000000000000000000000000000000000000000000000000000000000000ae000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a806ff09f9a80f09f9a802020c3a920f09f9a80c3a96ff09f9a80f09f9a806fc3a96f204d4df09f9a806ff09f9a806f20c3a96f6f6f6ff09f9a806f20c3a9c3a9c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a806f6f20c3a96f6f6f6f6f6f4d6ff09f9a806f206f6ff09f9a804d206f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a8020f09f9a804d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a806f6f6f4d6ff09f9a806ff09f9a804d4d20f09f9a8000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a8020f09f9a806f204df09f9a80206f20c3a9c3a94df09f9a806fc3a96f6f6ff09f9a806f4df09f9a804df09f9a804d6f6f4dc3a96f6ff09f9a806f4dc3a96f6f6f6f6f20c3a94df09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a80c3a94df09f9a80c3a920f09f9a80f09f9a80c3a96f4d4d6f20c3a96fc3a96f20f09f9a804d4dc3a96f6ff09f9a80206ff09f9a80c3a9c3a9f09f9a804d204df09f9a806fc3a96ff09f9a806f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a80204df09f9a80f09f9a80c3a9204dc3a96f6ff09f9a802020f09f9a804d6f6ff09f9a80c3a9c3a9f09f9a806fc3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a80f09f9a806f6f4d6ff09f9a806f6f6fc3a96f6f4d4df09f9a80c3a94df09f9a80c3a96f6f6fc3a9206ff09f9a804d6f206ff09f9a804d4df09f9a80c3a92020c3a9c3a96f20f09f9a806f6f6f4d6f6f00000000000000000000000000000000000000000000000000000000000000000000000000002c4d6f6f20c3a9f09f9a80c3a9f09f9a804d4d6f2020f09f9a806f6f206ff09f9a80c3a96f6f4d6fc3a920202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a80c3a96f4d6f4d6f4dc3a9c3a96fc3a9f09f9a80f09f9a80f09f9a80f09f9a806fc3a96fc3a9c3a9f09f9a80f09f9a80c3a92020f09f9a80204d6f206f4d6f4d4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a80f09f9a8020f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a80c3a9c3a94dc3a9f09f9a806ff09f9a806fc3a94df09f9a80f09f9a806fc3a9204d206f206fc3a9c3a920c3a9f09f9a806ff09f9a806fc3a9206f6f6f6ff09f9a80c3a9206f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a80f09f9a806f20f09f9a80f09f9a80f09f9a804d6f6f20c3a920f09f9a80f09f9a806f20f09f9a80f09f9a80c3a9204d4d6f4dc3a96f6f2020f09f9a806fc3a9206f20204d6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a94d6f4d206f4d20f09f9a806f206f4d6fc3a96f204d2020c3a9206f4df09f9a804d4d206f4d4d6f6f4d6f6f0000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a8020f09f9a806f6f6f4d6ff09f9a806fc3a94d4dc3a96fc3a96f6fc3a96ff09f9a80c3a96f6fc3a9206f6f6f4d204d4df09f9a80c3a9c3a94dc3a9206f6f206f6f4d4df09f9a80c3a96f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a80c3a9c3a96f4d206f4df09f9a806f4dc3a96f4df09f9a80f09f9a804d6f4dc3a96f6f4df09f9a806f6f6f206fc3a920f09f9a80f09f9a80206f4d4d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a80204df09f9a804df09f9a8020f09f9a806ff09f9a804dc3a96f6f20c3a9c3a94d6fc3a9c3a9c3a94d206f4d4d6f000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a804d206f6fc3a9204d6f20f09f9a806fc3a94df09f9a80f09f9a804d4d4dc3a96ff09f9a80206f6fc3a96ff09f9a80f09f9a8020206ff09f9a806f6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a806fc3a96f6fc3a9c3a96f4d20f09f9a806f6f6ff09f9a806f6fc3a9c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000006e00000000000000000000000000000000000000000000000000000000000000aa000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a806f2020f09f9a804d6fc3a94d4d6fc3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a806f6f6ff09f9a80f09f9a80c3a96fc3a94dc3a96f4dc3a94d204d6f20c3a94d6f4d20c3a94d20c3a920f09f9a80204d4d20f09f9a80f09f9a804d206fc3a920c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a80f09f9a806f6ff09f9a806f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a804d4d4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a806f4dc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a804d6f206f4d4d206ff09f9a80f09f9a804df09f9a8020c3a96f206ff09f9a80206fc3a9204d6f4dc3a96ff09f9a8020206fc3a9206ff09f9a80c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000194d6f6f20c3a9f09f9a80f09f9a804d4df09f9a80c3a94dc3a90000000000000000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a804d4d20204d6ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a804d6f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006c4d6f6f20c3a9f09f9a806f6f20c3a9206f4d6fc3a96f6ff09f9a80c3a9f09f9a80f09f9a806f6fc3a96f6fc3a920c3a9204d4d4df09f9a80f09f9a804d20f09f9a80f09f9a80f09f9a80f09f9a80f09f9a8020c3a9204d4d4df09f9a80206f4df09f9a80f09f9a806f204d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a806f4d4d6f6fc3a920c3a9f09f9a80f09f9a80c3a96ff09f9a806f204d2020c3a94d6ff09f9a80f09f9a804d6f6f4d6f6ff09f9a80f09f9a806f4d6f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f4d6f6f20c3a9f09f9a80206f6f4d206f6f4df09f9a80c3a9204d20206fc3a94dc3a9f09f9a80c3a96fc3a94df09f9a806f6f4d6f6f204dc3a94d6f4d4d4d6fc3a9f09f9a80f09f9a80c3a94df09f9a80206f4df09f9a806f4d20c3a9c3a94d00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a806f6ff09f9a804df09f9a806f202020c3a9c3a9206fc3a94d4dc3a9f09f9a804d6f6ff09f9a806fc3a96ff09f9a806f6ff09f9a80f09f9a806f4d6f6f20f09f9a80f09f9a8020c3a9c3a92020c3a96f206f206ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a8020c3a9c3a94dc3a94d4d6f6ff09f9a806f6f4d4df09f9a80f09f9a806f6fc3a94dc3a920204d6fc3a96f4d2020c3a94d6fc3a96fc3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a804d206ff09f9a804d4d206ff09f9a80204d6ff09f9a80c3a9f09f9a806f4d6ff09f9a804d6f206f6f4d6fc3a9f09f9a80f09f9a806f6ff09f9a80f09f9a80206f206f4d206f4d20f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a806f204d6f6f206f6f20c3a9f09f9a80c3a9c3a96ff09f9a806f6f6f6f6f6f20c3a96f206fc3a96fc3a920c3a9c3a9f09f9a80f09f9a80204d6fc3a9c3a94dc3a9206fc3a96ff09f9a804dc3a94d000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a80c3a96f6ff09f9a806ff09f9a806f20c3a94d6f20f09f9a806f6f4d6ff09f9a80f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000534d6f6f20c3a9f09f9a804dc3a94d6f6ff09f9a806ff09f9a804dc3a96f204df09f9a8020206ff09f9a806f4df09f9a806ff09f9a80204d20f09f9a80206f6f4d6f6f204d6f4d20f09f9a806fc3a96fc3a9c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a8020c3a96f6f4d4d6f206f6f4d6fc3a9206fc3a96f6f0000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a806f6f20c3a9204d6f6f6fc3a900000000000000000000" + }, + { + "name": "random-((((string,bool),address)),address,string,bytes7,string)", + "type": "((((string,bool),address)),address,string,bytes7,string)", + "value": [ + [[["Moo é🚀🚀🚀oMoo🚀o🚀Mé", false], "0xeCfC0A08F0701AB744dc0A4A2dD6AcD8FBA1dcA3"]], + "0x45Cf214be71915DCfDAeABA8a3EbCF5f2e21ef40", + "Moo é🚀🚀 🚀oéMo🚀ooé🚀ooo MMo🚀 o🚀é", + "0x7ed2d99971bdc9", + "Moo é🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀oMoo🚀o🚀Mé" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0xeCfC0A08F0701AB744dc0A4A2dD6AcD8FBA1dcA3" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x45Cf214be71915DCfDAeABA8a3EbCF5f2e21ef40" + }, + { + "type": "string", + "value": "Moo é🚀🚀 🚀oéMo🚀ooé🚀ooo MMo🚀 o🚀é" + }, + { + "type": "hexstring", + "value": "0x7ed2d99971bdc9" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103a2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061023b565b60405180910390f35b610056610184565b61005e610184565b6040805160a08101825260608082019081526000608083018190526020830191825292820192909252908152604080516080810182526060918101828152600092820183905281526020810191909152604080518082019091526060815260006020820152600060405180606001604052806022815260200161034b602291398252506000602080830182905291835273ecfc0a08f0701ab744dc0a4a2dd6acd8fba1dca3838301529183529183527345cf214be71915dcfdaeaba8a3ebcf5f2e21ef408383015260408051606081019091526037808252919290919061031490830139604080840191909152667ed2d99971bdc960c81b60608401528051808201909152600a8152689adede418753e13f3560b71b6020820152608083015250919050565b604080516101408101909152606061010082019081526000610120830181905260c0830191825260e083015260a082019081528190815260200160006001600160a01b031681526020016060815260200160006001600160c81b0319168152602001606081525090565b6000815180845260005b81811015610214576020818501810151868301820152016101f8565b81811115610226576000602083870101525b50601f01601f19169290920160200192915050565b60006020808352835160a082850152805190508160c08501528051604060e0860152805160406101208701526102756101608701826101ee565b828501511515610140880152838501516001600160a01b0316610100880152938701519390506102b060408701856001600160a01b03169052565b60408701519350601f199250828682030160608701526102d081856101ee565b9350505060608501516102ef60808601826001600160c81b0319169052565b506080850151818584030160a086015261030983826101ee565b969550505050505056fe4d6f6f20c3a9f09f9a80f09f9a8020f09f9a806fc3a94d6ff09f9a806f6fc3a9f09f9a806f6f6f204d4d6ff09f9a80206ff09f9a80c3a94d6f6f20c3a9f09f9a80f09f9a80f09f9a806f4d6f6ff09f9a806ff09f9a804dc3a9a264697066735822122051a86c4f52d32788e3c7a57d9b04fbaeb797e671f20a383ba358080227136d0764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fc3be6c5 {\n string s_0;\n bool s_1;\n }\n\n struct S_9657af3a {\n S_fc3be6c5 s_0;\n address s_1;\n }\n\n struct S_153d89ab {\n S_9657af3a s_0;\n }\n\n struct S_d8a3f6e6 {\n S_153d89ab s_0;\n address s_1;\n string s_2;\n bytes7 s_3;\n string s_4;\n }\n\n function test () public pure returns (S_d8a3f6e6 memory) {\n S_d8a3f6e6 memory r;\n {\n S_153d89ab memory r_0;\n {\n S_9657af3a memory r_0_0;\n {\n S_fc3be6c5 memory r_0_0_0;\n {\n string memory r_0_0_0_0 = unicode\"Moo é🚀🚀🚀oMoo🚀o🚀Mé\";\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n bool r_0_0_0_1 = false;\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n address r_0_0_1 = 0xeCfC0A08F0701AB744dc0A4A2dD6AcD8FBA1dcA3;\n r_0_0.s_1 = r_0_0_1;\n }\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x45Cf214be71915DCfDAeABA8a3EbCF5f2e21ef40;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀🚀 🚀oéMo🚀ooé🚀ooo MMo🚀 o🚀é\";\n r.s_2 = r_2;\n }\n {\n bytes7 r_3 = bytes7(0x7ed2d99971bdc9);\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀\";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000045cf214be71915dcfdaeaba8a3ebcf5f2e21ef4000000000000000000000000000000000000000000000000000000000000001a07ed2d99971bdc900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000ecfc0a08f0701ab744dc0a4a2dd6acd8fba1dca30000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a80f09f9a80f09f9a806f4d6f6ff09f9a806ff09f9a804dc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a80f09f9a8020f09f9a806fc3a94d6ff09f9a806f6fc3a9f09f9a806f6f6f204d4d6ff09f9a80206ff09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-((address,address[1],address)[],bytes13,string)", + "type": "((address,address[1],address)[],bytes13,string)", + "value": [ + [ + [ + "0x15524882cB4b5acE09882DC326E71dE360f21FA3", + ["0x6bfC34Ed4bcEF55613c98F43dA902bd1550624B6"], + "0xbc36F5A3570fc4bAe08f1Ce55Ce432AC7FAaDB2f" + ] + ], + "0x45fb717b12c68cce2634378755", + "Moo é🚀o🚀 🚀🚀o M🚀🚀M🚀é🚀M Mo🚀Mo M🚀MMoo oo 🚀MM🚀ooMMé🚀🚀o ooéMo🚀M" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x15524882cB4b5acE09882DC326E71dE360f21FA3" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x6bfC34Ed4bcEF55613c98F43dA902bd1550624B6" + } + ] + }, + { + "type": "address", + "value": "0xbc36F5A3570fc4bAe08f1Ce55Ce432AC7FAaDB2f" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x45fb717b12c68cce2634378755" + }, + { + "type": "string", + "value": "Moo é🚀o🚀 🚀🚀o M🚀🚀M🚀é🚀M Mo🚀Mo M🚀MMoo oo 🚀MM🚀ooMMé🚀🚀o ooéMo🚀M" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061039d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610212565b60405180910390f35b604080516060808201835280825260006020808401829052838501839052845180840186528381529081018290528085019290925283516001808252818601909552929391929091816020015b6100a3610177565b81526020019060019003908161009b5790505090506100c0610177565b7315524882cb4b5ace09882dc326e71de360f21fa381526100df6101a7565b736bfc34ed4bcef55613c98f43da902bd1550624b68152602082015273bc36f5a3570fc4bae08f1ce55ce432ac7faadb2f604082015281518190839060009061012a5761012a6102e4565b602090810291909101810191909152918352506c45fb717b12c68cce263437875560981b828201526040805160a08101909152606d8082526000926102fb90830139604083015250919050565b604051806060016040528060006001600160a01b0316815260200161019a6101a7565b8152600060209091015290565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b818110156101eb576020818501810151868301820152016101cf565b818111156101fd576000602083870101525b50601f01601f19169290920160200192915050565b60208082528251606083830181905281516080850181905260009392830191849160a0870190835b8181101561029957855180516001600160a01b03908116855288820151898601885b600181101561027b57825184168252918b0191908b019060010161025c565b5050506040918201511690840152948601949183019160010161023a565b50509387015172ffffffffffffffffffffffffffffffffffffff1981166040880152936040880151878203601f19018389015294506102d881866101c5565b98975050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806ff09f9a802020f09f9a80f09f9a806f204df09f9a80f09f9a804df09f9a80c3a9f09f9a804d204d6ff09f9a804d6f20204df09f9a804d4d6f6f206f6f20f09f9a804d4df09f9a806f6f4d4dc3a9f09f9a80f09f9a806f206f6fc3a94d6ff09f9a804da26469706673582212207fa93cea87cd36c7b71dbd4320ec598b590895cf2f0c8e2a8c7d92020eb0998964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2d4dca73 {\n address s_0;\n address[1] s_1;\n address s_2;\n }\n\n struct S_12c00745 {\n S_2d4dca73[] s_0;\n bytes13 s_1;\n string s_2;\n }\n\n function test () public pure returns (S_12c00745 memory) {\n S_12c00745 memory r;\n {\n S_2d4dca73[] memory r_0 = new S_2d4dca73[](1);\n {\n S_2d4dca73 memory r_0_0;\n {\n address r_0_0_0 = 0x15524882cB4b5acE09882DC326E71dE360f21FA3;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n address[1] memory r_0_0_1;\n {\n address r_0_0_1_0 = 0x6bfC34Ed4bcEF55613c98F43dA902bd1550624B6;\n r_0_0_1[0] = r_0_0_1_0;\n }\n r_0_0.s_1 = r_0_0_1;\n }\n {\n address r_0_0_2 = 0xbc36F5A3570fc4bAe08f1Ce55Ce432AC7FAaDB2f;\n r_0_0.s_2 = r_0_0_2;\n }\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n bytes13 r_1 = bytes13(0x45fb717b12c68cce2634378755);\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀o🚀 🚀🚀o M🚀🚀M🚀é🚀M Mo🚀Mo M🚀MMoo oo 🚀MM🚀ooMMé🚀🚀o ooéMo🚀M\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006045fb717b12c68cce26343787550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000015524882cb4b5ace09882dc326e71de360f21fa30000000000000000000000006bfc34ed4bcef55613c98f43da902bd1550624b6000000000000000000000000bc36f5a3570fc4bae08f1ce55ce432ac7faadb2f000000000000000000000000000000000000000000000000000000000000006d4d6f6f20c3a9f09f9a806ff09f9a802020f09f9a80f09f9a806f204df09f9a80f09f9a804df09f9a80c3a9f09f9a804d204d6ff09f9a804d6f20204df09f9a804d4d6f6f206f6f20f09f9a804d4df09f9a806f6f4d4dc3a9f09f9a80f09f9a806f206f6fc3a94d6ff09f9a804d00000000000000000000000000000000000000" + }, + { + "name": "random-((address,bytes28),bool[],(bytes22,int176,bytes7))", + "type": "((address,bytes28),bool[],(bytes22,int176,bytes7))", + "value": [ + [ + "0x114aCEDb2235409eE32dB88d147abc7472e679D6", + "0xf84ee0c22d372a59d1602c7b43898dd33234c47cf1c31d30880dff1e" + ], + [], + [ + "0xf1a5f8d336427a994c1424e62521a912f7e858824292", + "7142312980450937411831582157167165965679612098733190", + "0x9c65873ef9f65a" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x114aCEDb2235409eE32dB88d147abc7472e679D6" + }, + { + "type": "hexstring", + "value": "0xf84ee0c22d372a59d1602c7b43898dd33234c47cf1c31d30880dff1e" + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf1a5f8d336427a994c1424e62521a912f7e858824292" + }, + { + "type": "number", + "value": "7142312980450937411831582157167165965679612098733190" + }, + { + "type": "hexstring", + "value": "0x9c65873ef9f65a" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610278806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610190565b60405180910390f35b6100946040805160a08101825260006060808301828152608084018390528352602080840182905284519182018552828252810182905280840191909152909182015290565b6100da6040805160a08101825260006060808301828152608084018390528352602080840182905284519182018552828252810182905280840191909152909182015290565b60408051808201825273114acedb2235409ee32db88d147abc7472e679d681527ff84ee0c22d372a59d1602c7b43898dd33234c47cf1c31d30880dff1e0000000060208083019190915290835281516000815280820183528382015281516060810183527578d2fc699b213d4ca60a12731290d4897bf42c41214960511b8152751316f806c26bee2868ce7c0253e33b42a193b0cf648691810191909152664e32c39f7cfb2d60c91b8183015290820152919050565b6020808252825180516001600160a01b03168383015281015163ffffffff191660408301528281015160c06060840152805160e084018190526000929182019083906101008601905b808310156101fb578351151582529284019260019290920191908401906101d9565b50604087810151805169ffffffffffffffffffff19166080890152602081015160150b60a0890152908101516001600160c81b03191660c08801529350969550505050505056fea2646970667358221220e8687eaa5c16208631f008f5ec78a9ecee795d2d18ca2a4624c2d062fa4a218864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2c654bc9 {\n address s_0;\n bytes28 s_1;\n }\n\n struct S_afd34ce8 {\n bytes22 s_0;\n int176 s_1;\n bytes7 s_2;\n }\n\n struct S_f0cdf32f {\n S_2c654bc9 s_0;\n bool[] s_1;\n S_afd34ce8 s_2;\n }\n\n function test () public pure returns (S_f0cdf32f memory) {\n S_f0cdf32f memory r;\n {\n S_2c654bc9 memory r_0;\n {\n address r_0_0 = 0x114aCEDb2235409eE32dB88d147abc7472e679D6;\n r_0.s_0 = r_0_0;\n }\n {\n bytes28 r_0_1 = bytes28(0xf84ee0c22d372a59d1602c7b43898dd33234c47cf1c31d30880dff1e);\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n bool[] memory r_1 = new bool[](0);\n r.s_1 = r_1;\n }\n {\n S_afd34ce8 memory r_2;\n {\n bytes22 r_2_0 = bytes22(0xf1a5f8d336427a994c1424e62521a912f7e858824292);\n r_2.s_0 = r_2_0;\n }\n {\n int176 r_2_1 = 7142312980450937411831582157167165965679612098733190;\n r_2.s_1 = r_2_1;\n }\n {\n bytes7 r_2_2 = bytes7(0x9c65873ef9f65a);\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000114acedb2235409ee32db88d147abc7472e679d6f84ee0c22d372a59d1602c7b43898dd33234c47cf1c31d30880dff1e0000000000000000000000000000000000000000000000000000000000000000000000c0f1a5f8d336427a994c1424e62521a912f7e85882429200000000000000000000000000000000000000001316f806c26bee2868ce7c0253e33b42a193b0cf64869c65873ef9f65a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((address,string),(int96,string,uint160,address),string)", + "type": "((address,string),(int96,string,uint160,address),string)", + "value": [ + ["0x8C1FF68E10EE3edE62094F3B7Ccd7F78c3ea2635", "Moo é🚀"], + [ + "18060538210133632160111209310", + "Moo é🚀 oM oMM 🚀🚀🚀ooé🚀éoMéoooM🚀é M Méo🚀o🚀🚀MMo é", + "580093291611518032644706393272175986486152184299", + "0xd79291EB719cCA45c6E87f3f51428a5C40ddca6e" + ], + "Moo é🚀 🚀M🚀é o🚀o" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x8C1FF68E10EE3edE62094F3B7Ccd7F78c3ea2635" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "18060538210133632160111209310" + }, + { + "type": "string", + "value": "Moo é🚀 oM oMM 🚀🚀🚀ooé🚀éoMéoooM🚀é M Méo🚀o🚀🚀MMo é" + }, + { + "type": "number", + "value": "580093291611518032644706393272175986486152184299" + }, + { + "type": "address", + "value": "0xd79291EB719cCA45c6E87f3f51428a5C40ddca6e" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 🚀M🚀é o🚀o" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610349806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610215565b60405180910390f35b610056610178565b61005e610178565b60408051808201825260606020808301828152738c1ff68e10ee3ede62094f3b7ccd7f78c3ea2635845284518086018652600a8152689adede418753e13f3560b71b818401529052918452825160808101845260008082529281018290529283018290528201526b3a5b53ba2f28deed12472b5e815260408051608081019091526050808252600091906102c4602083013960208084019190915273659c4868191df39579b81423d0c71d2d183ec1eb60408085019190915273d79291eb719cca45c6e87f3f51428a5c40ddca6e60608501528482019390935282518084018452601e81527f4d6f6f20c3a9f09f9a8020f09f9a804df09f9a80c3a920206ff09f9a806f0000918101919091529183019190915250919050565b6040805160a0810190915260006060808301918252608083015281908152604080516080810182526000808252606060208381018290529383018290528201529101908152602001606081525090565b6000815180845260005b818110156101ee576020818501810151868301820152016101d2565b81811115610200576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825160608383015280516001600160a01b03908116608085015290820151604060a08501526000929161025060c08601836101c8565b915082860151601f19808785030160408801528151600b0b84528482015160808686015261028160808601826101c8565b95505082604083015116604085015282606083015116606085015260408801519350808786030160608801525050506102ba82826101c8565b9594505050505056fe4d6f6f20c3a9f09f9a80206f4d206f4d4d20f09f9a80f09f9a80f09f9a806f6fc3a9f09f9a80c3a96f4dc3a96f6f6f4df09f9a80c3a9204d204dc3a96ff09f9a806ff09f9a80f09f9a804d4d6f20c3a9a2646970667358221220e004579305287e43d39f76d6d3794097f9f0892ff052d9482f7b3c14add8c1a664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8090aaf4 {\n address s_0;\n string s_1;\n }\n\n struct S_524227cf {\n int96 s_0;\n string s_1;\n uint160 s_2;\n address s_3;\n }\n\n struct S_1b84a80f {\n S_8090aaf4 s_0;\n S_524227cf s_1;\n string s_2;\n }\n\n function test () public pure returns (S_1b84a80f memory) {\n S_1b84a80f memory r;\n {\n S_8090aaf4 memory r_0;\n {\n address r_0_0 = 0x8C1FF68E10EE3edE62094F3B7Ccd7F78c3ea2635;\n r_0.s_0 = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀\";\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n S_524227cf memory r_1;\n {\n int96 r_1_0 = 18060538210133632160111209310;\n r_1.s_0 = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀 oM oMM 🚀🚀🚀ooé🚀éoMéoooM🚀é M Méo🚀o🚀🚀MMo é\";\n r_1.s_1 = r_1_1;\n }\n {\n uint160 r_1_2 = 580093291611518032644706393272175986486152184299;\n r_1.s_2 = r_1_2;\n }\n {\n address r_1_3 = 0xd79291EB719cCA45c6E87f3f51428a5C40ddca6e;\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀 🚀M🚀é o🚀o\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000008c1ff68e10ee3ede62094f3b7ccd7f78c3ea26350000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000003a5b53ba2f28deed12472b5e0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000659c4868191df39579b81423d0c71d2d183ec1eb000000000000000000000000d79291eb719cca45c6e87f3f51428a5c40ddca6e00000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a80206f4d206f4d4d20f09f9a80f09f9a80f09f9a806f6fc3a9f09f9a80c3a96f4dc3a96f6f6f4df09f9a80c3a9204d204dc3a96ff09f9a806ff09f9a80f09f9a804d4d6f20c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a8020f09f9a804df09f9a80c3a920206ff09f9a806f0000" + }, + { + "name": "random-((bool,address),bytes17,uint168,bytes24[4])[3]", + "type": "((bool,address),bytes17,uint168,bytes24[4])[3]", + "value": [ + [ + [false, "0xee877EF9aDC39858146B5167165EB083bfCB26CE"], + "0x8a5c6c9a401db02d409aaf2c9465e24968", + "155019803731989543868359731982383477516399735206099", + [ + "0xf205764d64bb8cbe466efc7e77b3e79ed20b44c61d720955", + "0x71a5609de3e386655a7d237a83b6bf42ed59773d70337b5c", + "0x4df9a749eb8c767095aa39f80cdeb04b5a5331d69c378722", + "0x950076df2becc4c3537d5a77fcf24e57f9776386e65f1680" + ] + ], + [ + [false, "0xa6b647E86d0535bfB76D45f4BC71aEA07c2A8a46"], + "0x1640b886be54d3ee12c7bb8178453d56c6", + "322705214000919892095951181632479234372390665864455", + [ + "0xc31dd0c6a1c9440a4d777aa3866821d101bf1d00a706af45", + "0x51d7dbfa359dfa803ec837ee330fe81f52005a0591aaa859", + "0xed682bad03a7d879bc1cbd06196f828183502fabf27affdb", + "0xbb1a60e12cb5bcd906b0b45ad7584c270a33f440272bb5a4" + ] + ], + [ + [true, "0x76aF2F33F750058FE6d27F10f9e1bc514BcC6A8F"], + "0xf88664dccb4db406918141b54d76b21ebd", + "97298934101129615644257411678119072237071744867988", + [ + "0x990af3ea8c3ceddce6bcd5725d596b1e66861331e4bf76b7", + "0x7cb1a2912e89a423402b8830319fbe956a41911666de2c93", + "0x4533eed6f3cd3292788661f4c4432f4b19ab4f376949cbe6", + "0x81a2b5e86924196ac9baa97ccaf33f4d2cbc7c016233ff31" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xee877EF9aDC39858146B5167165EB083bfCB26CE" + } + ] + }, + { + "type": "hexstring", + "value": "0x8a5c6c9a401db02d409aaf2c9465e24968" + }, + { + "type": "number", + "value": "155019803731989543868359731982383477516399735206099" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xf205764d64bb8cbe466efc7e77b3e79ed20b44c61d720955" + }, + { + "type": "hexstring", + "value": "0x71a5609de3e386655a7d237a83b6bf42ed59773d70337b5c" + }, + { + "type": "hexstring", + "value": "0x4df9a749eb8c767095aa39f80cdeb04b5a5331d69c378722" + }, + { + "type": "hexstring", + "value": "0x950076df2becc4c3537d5a77fcf24e57f9776386e65f1680" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xa6b647E86d0535bfB76D45f4BC71aEA07c2A8a46" + } + ] + }, + { + "type": "hexstring", + "value": "0x1640b886be54d3ee12c7bb8178453d56c6" + }, + { + "type": "number", + "value": "322705214000919892095951181632479234372390665864455" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc31dd0c6a1c9440a4d777aa3866821d101bf1d00a706af45" + }, + { + "type": "hexstring", + "value": "0x51d7dbfa359dfa803ec837ee330fe81f52005a0591aaa859" + }, + { + "type": "hexstring", + "value": "0xed682bad03a7d879bc1cbd06196f828183502fabf27affdb" + }, + { + "type": "hexstring", + "value": "0xbb1a60e12cb5bcd906b0b45ad7584c270a33f440272bb5a4" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x76aF2F33F750058FE6d27F10f9e1bc514BcC6A8F" + } + ] + }, + { + "type": "hexstring", + "value": "0xf88664dccb4db406918141b54d76b21ebd" + }, + { + "type": "number", + "value": "97298934101129615644257411678119072237071744867988" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x990af3ea8c3ceddce6bcd5725d596b1e66861331e4bf76b7" + }, + { + "type": "hexstring", + "value": "0x7cb1a2912e89a423402b8830319fbe956a41911666de2c93" + }, + { + "type": "hexstring", + "value": "0x4533eed6f3cd3292788661f4c4432f4b19ab4f376949cbe6" + }, + { + "type": "hexstring", + "value": "0x81a2b5e86924196ac9baa97ccaf33f4d2cbc7c016233ff31" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610517806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610426565b60405180910390f35b6100566103a0565b61005e6103a0565b6100666103cd565b6040805180820182526000815273ee877ef9adc39858146b5167165eb083bfcb26ce60208083019190915290835270114b8d934803b605a81355e5928cbc492d607b1b90830152746a11a069c1556beabe9087ca4bced6bb292ffff0d3908201526100cf610408565b7ff205764d64bb8cbe466efc7e77b3e79ed20b44c61d720955000000000000000081527f71a5609de3e386655a7d237a83b6bf42ed59773d70337b5c000000000000000060208201527f4df9a749eb8c767095aa39f80cdeb04b5a5331d69c378722000000000000000060408201527f950076df2becc4c3537d5a77fcf24e57f9776386e65f1680000000000000000060608083019190915282015281526101756103cd565b6040805180820182526000815273a6b647e86d0535bfb76d45f4bc71aea07c2a8a46602080830191909152908352700b205c435f2a69f70963ddc0bc229eab6360791b9083015274dccdca4411725d4196f98f63425b358490cee84507908201526101de610408565b7fc31dd0c6a1c9440a4d777aa3866821d101bf1d00a706af45000000000000000081527f51d7dbfa359dfa803ec837ee330fe81f52005a0591aaa85900000000000000006020808301919091527fed682bad03a7d879bc1cbd06196f828183502fabf27affdb000000000000000060408301527fbb1a60e12cb5bcd906b0b45ad7584c270a33f440272bb5a4000000000000000060608084019190915283019190915282015261028c6103cd565b604080518082018252600181527376af2f33f750058fe6d27f10f9e1bc514bcc6a8f60208083019190915290835270f88664dccb4db406918141b54d76b21ebd60781b908301527442931b1a1a450cac9c22e518358b8f1f4fb7339e94908201526102f5610408565b7f990af3ea8c3ceddce6bcd5725d596b1e66861331e4bf76b7000000000000000081527f7cb1a2912e89a423402b8830319fbe956a41911666de2c93000000000000000060208201527f4533eed6f3cd3292788661f4c4432f4b19ab4f376949cbe600000000000000006040808301919091527f81a2b5e86924196ac9baa97ccaf33f4d2cbc7c016233ff310000000000000000606080840191909152830191909152820152919050565b60405180606001604052806003905b6103b76103cd565b8152602001906001900390816103af5790505090565b6040805160c08101825260006080820181815260a083018290528252602082018190529181019190915260608101610403610408565b905290565b60405180608001604052806004906020820280368337509192915050565b610300810181836000805b60038110156104d757825180518051151586526020908101516001600160a01b031681870152808201516effffffffffffffffffffffffffffff19166040808801919091528201516001600160a81b031660608088019190915290910151906080860190845b60048110156104bf57835167ffffffffffffffff191683529281019291810191600101610497565b50610100969096019594909401935050600101610431565b505050509291505056fea26469706673582212207c53a15871a7cb7ae536dee771f63ac7eaee411968e267a3d5b369c62c71b8fa64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e212a882 {\n bool s_0;\n address s_1;\n }\n\n struct S_d8e0d878 {\n S_e212a882 s_0;\n bytes17 s_1;\n uint168 s_2;\n bytes24[4] s_3;\n }\n\n function test () public pure returns (S_d8e0d878[3] memory) {\n S_d8e0d878[3] memory r;\n {\n S_d8e0d878 memory r_0;\n {\n S_e212a882 memory r_0_0;\n {\n bool r_0_0_0 = false;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n address r_0_0_1 = 0xee877EF9aDC39858146B5167165EB083bfCB26CE;\n r_0_0.s_1 = r_0_0_1;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bytes17 r_0_1 = bytes17(0x8a5c6c9a401db02d409aaf2c9465e24968);\n r_0.s_1 = r_0_1;\n }\n {\n uint168 r_0_2 = 155019803731989543868359731982383477516399735206099;\n r_0.s_2 = r_0_2;\n }\n {\n bytes24[4] memory r_0_3;\n {\n bytes24 r_0_3_0 = bytes24(0xf205764d64bb8cbe466efc7e77b3e79ed20b44c61d720955);\n r_0_3[0] = r_0_3_0;\n }\n {\n bytes24 r_0_3_1 = bytes24(0x71a5609de3e386655a7d237a83b6bf42ed59773d70337b5c);\n r_0_3[1] = r_0_3_1;\n }\n {\n bytes24 r_0_3_2 = bytes24(0x4df9a749eb8c767095aa39f80cdeb04b5a5331d69c378722);\n r_0_3[2] = r_0_3_2;\n }\n {\n bytes24 r_0_3_3 = bytes24(0x950076df2becc4c3537d5a77fcf24e57f9776386e65f1680);\n r_0_3[3] = r_0_3_3;\n }\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_d8e0d878 memory r_1;\n {\n S_e212a882 memory r_1_0;\n {\n bool r_1_0_0 = false;\n r_1_0.s_0 = r_1_0_0;\n }\n {\n address r_1_0_1 = 0xa6b647E86d0535bfB76D45f4BC71aEA07c2A8a46;\n r_1_0.s_1 = r_1_0_1;\n }\n r_1.s_0 = r_1_0;\n }\n {\n bytes17 r_1_1 = bytes17(0x1640b886be54d3ee12c7bb8178453d56c6);\n r_1.s_1 = r_1_1;\n }\n {\n uint168 r_1_2 = 322705214000919892095951181632479234372390665864455;\n r_1.s_2 = r_1_2;\n }\n {\n bytes24[4] memory r_1_3;\n {\n bytes24 r_1_3_0 = bytes24(0xc31dd0c6a1c9440a4d777aa3866821d101bf1d00a706af45);\n r_1_3[0] = r_1_3_0;\n }\n {\n bytes24 r_1_3_1 = bytes24(0x51d7dbfa359dfa803ec837ee330fe81f52005a0591aaa859);\n r_1_3[1] = r_1_3_1;\n }\n {\n bytes24 r_1_3_2 = bytes24(0xed682bad03a7d879bc1cbd06196f828183502fabf27affdb);\n r_1_3[2] = r_1_3_2;\n }\n {\n bytes24 r_1_3_3 = bytes24(0xbb1a60e12cb5bcd906b0b45ad7584c270a33f440272bb5a4);\n r_1_3[3] = r_1_3_3;\n }\n r_1.s_3 = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_d8e0d878 memory r_2;\n {\n S_e212a882 memory r_2_0;\n {\n bool r_2_0_0 = true;\n r_2_0.s_0 = r_2_0_0;\n }\n {\n address r_2_0_1 = 0x76aF2F33F750058FE6d27F10f9e1bc514BcC6A8F;\n r_2_0.s_1 = r_2_0_1;\n }\n r_2.s_0 = r_2_0;\n }\n {\n bytes17 r_2_1 = bytes17(0xf88664dccb4db406918141b54d76b21ebd);\n r_2.s_1 = r_2_1;\n }\n {\n uint168 r_2_2 = 97298934101129615644257411678119072237071744867988;\n r_2.s_2 = r_2_2;\n }\n {\n bytes24[4] memory r_2_3;\n {\n bytes24 r_2_3_0 = bytes24(0x990af3ea8c3ceddce6bcd5725d596b1e66861331e4bf76b7);\n r_2_3[0] = r_2_3_0;\n }\n {\n bytes24 r_2_3_1 = bytes24(0x7cb1a2912e89a423402b8830319fbe956a41911666de2c93);\n r_2_3[1] = r_2_3_1;\n }\n {\n bytes24 r_2_3_2 = bytes24(0x4533eed6f3cd3292788661f4c4432f4b19ab4f376949cbe6);\n r_2_3[2] = r_2_3_2;\n }\n {\n bytes24 r_2_3_3 = bytes24(0x81a2b5e86924196ac9baa97ccaf33f4d2cbc7c016233ff31);\n r_2_3[3] = r_2_3_3;\n }\n r_2.s_3 = r_2_3;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ee877ef9adc39858146b5167165eb083bfcb26ce8a5c6c9a401db02d409aaf2c9465e2496800000000000000000000000000000000000000000000000000006a11a069c1556beabe9087ca4bced6bb292ffff0d3f205764d64bb8cbe466efc7e77b3e79ed20b44c61d720955000000000000000071a5609de3e386655a7d237a83b6bf42ed59773d70337b5c00000000000000004df9a749eb8c767095aa39f80cdeb04b5a5331d69c3787220000000000000000950076df2becc4c3537d5a77fcf24e57f9776386e65f168000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6b647e86d0535bfb76d45f4bc71aea07c2a8a461640b886be54d3ee12c7bb8178453d56c60000000000000000000000000000000000000000000000000000dccdca4411725d4196f98f63425b358490cee84507c31dd0c6a1c9440a4d777aa3866821d101bf1d00a706af45000000000000000051d7dbfa359dfa803ec837ee330fe81f52005a0591aaa8590000000000000000ed682bad03a7d879bc1cbd06196f828183502fabf27affdb0000000000000000bb1a60e12cb5bcd906b0b45ad7584c270a33f440272bb5a40000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000076af2f33f750058fe6d27f10f9e1bc514bcc6a8ff88664dccb4db406918141b54d76b21ebd000000000000000000000000000000000000000000000000000042931b1a1a450cac9c22e518358b8f1f4fb7339e94990af3ea8c3ceddce6bcd5725d596b1e66861331e4bf76b700000000000000007cb1a2912e89a423402b8830319fbe956a41911666de2c9300000000000000004533eed6f3cd3292788661f4c4432f4b19ab4f376949cbe6000000000000000081a2b5e86924196ac9baa97ccaf33f4d2cbc7c016233ff310000000000000000" + }, + { + "name": "random-((bytes11[2],bytes20,bool,bool,address),string)", + "type": "((bytes11[2],bytes20,bool,bool,address),string)", + "value": [ + [ + ["0x8e12c5663640f58105e42a", "0xd0182cd4f660bd199b69e8"], + "0xc490ab7f05adc32ebe0824da389085129154afef", + true, + true, + "0x3C813ABDF77bC9c3067982bC8F21ede44F9Feb9c" + ], + "Moo é🚀oooé🚀o🚀ooéo " + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8e12c5663640f58105e42a" + }, + { + "type": "hexstring", + "value": "0xd0182cd4f660bd199b69e8" + } + ] + }, + { + "type": "hexstring", + "value": "0xc490ab7f05adc32ebe0824da389085129154afef" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x3C813ABDF77bC9c3067982bC8F21ede44F9Feb9c" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oooé🚀o🚀ooéo " + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102b8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101de565b60405180910390f35b61005661011e565b61005e61011e565b61006661013e565b61006e610173565b6a470962b31b207ac082f21560a91b81526a1a03059a9ecc17a3336d3d60ab1b60208083019190915290825273c490ab7f05adc32ebe0824da389085129154afef60601b82820152600160408084018290526060840191909152733c813abdf77bc9c3067982bc8f21ede44f9feb9c60808401529183528151808301909252601e82527f4d6f6f20c3a9f09f9a806f6f6fc3a9f09f9a806ff09f9a806f6fc3a96f20000082820152820152919050565b604051806040016040528061013161013e565b8152602001606081525090565b6040518060a00160405280610151610173565b8152600060208201819052604082018190526060820181905260809091015290565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b818110156101b75760208185018101518683018201520161019b565b818111156101c9576000602083870101525b50601f01601f19169290920160200192915050565b60208082528251805160009291838584015b60028210156102195783516001600160a81b0319168152928401926001919091019084016101f0565b5050808301516bffffffffffffffffffffffff19166060868101919091526040820151151560808088019190915290820151151560a087015201516001600160a01b031660c08501525083015160e08084015261027a610100840182610191565b94935050505056fea26469706673582212207161030ea2744ccab2023be9a76be973c199005e6db87976bd95989570ba1a9b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_974c8eb5 {\n bytes11[2] s_0;\n bytes20 s_1;\n bool s_2;\n bool s_3;\n address s_4;\n }\n\n struct S_5861cf8b {\n S_974c8eb5 s_0;\n string s_1;\n }\n\n function test () public pure returns (S_5861cf8b memory) {\n S_5861cf8b memory r;\n {\n S_974c8eb5 memory r_0;\n {\n bytes11[2] memory r_0_0;\n {\n bytes11 r_0_0_0 = bytes11(0x8e12c5663640f58105e42a);\n r_0_0[0] = r_0_0_0;\n }\n {\n bytes11 r_0_0_1 = bytes11(0xd0182cd4f660bd199b69e8);\n r_0_0[1] = r_0_0_1;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bytes20 r_0_1 = bytes20(0xC490ab7f05ADc32eBe0824dA389085129154afef);\n r_0.s_1 = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0.s_2 = r_0_2;\n }\n {\n bool r_0_3 = true;\n r_0.s_3 = r_0_3;\n }\n {\n address r_0_4 = 0x3C813ABDF77bC9c3067982bC8F21ede44F9Feb9c;\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀oooé🚀o🚀ooéo \";\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000208e12c5663640f58105e42a000000000000000000000000000000000000000000d0182cd4f660bd199b69e8000000000000000000000000000000000000000000c490ab7f05adc32ebe0824da389085129154afef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000003c813abdf77bc9c3067982bc8f21ede44f9feb9c00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a806f6f6fc3a9f09f9a806ff09f9a806f6fc3a96f200000" + }, + { + "name": "random-((bytes24),(address,bool,string),(address),bool,bool)", + "type": "((bytes24),(address,bool,string),(address),bool,bool)", + "value": [ + ["0x439504d88a6198d686681baa13855ef0114d1689faab75a8"], + [ + "0x88901DC4E78763ea8a6BBF1C451DA6c000803e0c", + false, + "Moo é🚀é🚀🚀o🚀M o éo🚀Moéé🚀o Mo🚀 🚀🚀o éMM🚀oMM🚀o" + ], + ["0xDea75c12f4a6b74A2Dfa30a22597b988B7943550"], + false, + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x439504d88a6198d686681baa13855ef0114d1689faab75a8" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x88901DC4E78763ea8a6BBF1C451DA6c000803e0c" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀é🚀🚀o🚀M o éo🚀Moéé🚀o Mo🚀 🚀🚀o éMM🚀oMM🚀o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xDea75c12f4a6b74A2Dfa30a22597b988B7943550" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102d9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610179565b60405180910390f35b610056610124565b61005e610124565b60408051602080820183527f439504d88a6198d686681baa13855ef0114d1689faab75a8000000000000000082529083528151606080820184526000828401819052828501919091527388901dc4e78763ea8a6bbf1c451da6c000803e0c8252835160808101909452605180855291939092909190610253908301396040838101919091526020848101939093528051928301815273dea75c12f4a6b74a2dfa30a22597b988b79435508352830191909152506000606082015260016080820152919050565b6040805160c081018252600060a0820181815282528251606080820185528282526020808301849052828601829052808501929092528451918201855282825293830152918101829052608081019190915290565b602080825282515167ffffffffffffffff1916828201528281015160a060408085019190915281516001600160a01b031660c085015281830151151560e085015201516060610100840152805161012084018190526000929190835b818110156101f257828101840151868201610140015283016101d5565b8181111561020557600061014083880101525b50604086015180516001600160a01b031660608701529250606086015180151560808701529250608086015180151560a08701529250601f01601f1916939093016101400194935050505056fe4d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a806ff09f9a804d206f20c3a96ff09f9a804d6fc3a9c3a9f09f9a806f204d6ff09f9a8020f09f9a80f09f9a806f20c3a94d4df09f9a806f4d4df09f9a806fa2646970667358221220f57e7ff126efdcd2175fbe0dbd2f4ad3d5502280775ebb6bd7041eda06dd490e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fce5fa1a {\n bytes24 s_0;\n }\n\n struct S_5062cedd {\n address s_0;\n bool s_1;\n string s_2;\n }\n\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_4185bf82 {\n S_fce5fa1a s_0;\n S_5062cedd s_1;\n S_421683f8 s_2;\n bool s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_4185bf82 memory) {\n S_4185bf82 memory r;\n {\n S_fce5fa1a memory r_0;\n {\n bytes24 r_0_0 = bytes24(0x439504d88a6198d686681baa13855ef0114d1689faab75a8);\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n S_5062cedd memory r_1;\n {\n address r_1_0 = 0x88901DC4E78763ea8a6BBF1C451DA6c000803e0c;\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀é🚀🚀o🚀M o éo🚀Moéé🚀o Mo🚀 🚀🚀o éMM🚀oMM🚀o\";\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n S_421683f8 memory r_2;\n {\n address r_2_0 = 0xDea75c12f4a6b74A2Dfa30a22597b988B7943550;\n r_2.s_0 = r_2_0;\n }\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n {\n bool r_4 = true;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020439504d88a6198d686681baa13855ef0114d1689faab75a8000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000dea75c12f4a6b74a2dfa30a22597b988b79435500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000088901dc4e78763ea8a6bbf1c451da6c000803e0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a806ff09f9a804d206f20c3a96ff09f9a804d6fc3a9c3a9f09f9a806f204d6ff09f9a8020f09f9a80f09f9a806f20c3a94d4df09f9a806f4d4df09f9a806f000000000000000000000000000000" + }, + { + "name": "random-((int168,address)[2],(bytes14,int176),bool,bytes29)", + "type": "((int168,address)[2],(bytes14,int176),bool,bytes29)", + "value": [ + [ + [ + "-40306235290679555254373358764110803070746151831627", + "0x7a1F8900845BfEcfA95a54F592AfB348729d2d8E" + ], + [ + "53598139176210223688429018735947430304533342212195", + "0x6D9F73728E175de54d5eef0cE2d72c15129CC473" + ] + ], + [ + "0x9e4602d9450c741f1b5b7e1f5d73", + "-7846810676312797034915239255265163595578824470856274" + ], + true, + "0x53cdc829518354d5641e3e6fc6b07a9927d1a2a1ddacb919c0b58aeef6" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-40306235290679555254373358764110803070746151831627" + }, + { + "type": "address", + "value": "0x7a1F8900845BfEcfA95a54F592AfB348729d2d8E" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "53598139176210223688429018735947430304533342212195" + }, + { + "type": "address", + "value": "0x6D9F73728E175de54d5eef0cE2d72c15129CC473" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x9e4602d9450c741f1b5b7e1f5d73" + }, + { + "type": "number", + "value": "-7846810676312797034915239255265163595578824470856274" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x53cdc829518354d5641e3e6fc6b07a9927d1a2a1ddacb919c0b58aeef6" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102ba806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101f1565b60405180910390f35b610056610157565b61005e610157565b6100666101b8565b604080518082018252741b94221985c4f3e5de7ce2ad7671b676e3ba5b484a198152737a1f8900845bfecfa95a54f592afb348729d2d8e602080830191909152908352815180830183527424ac5faf0c8dfc56b265e188f0563f0687f56650638152736d9f73728e175de54d5eef0ce2d72c15129cc4738183015283820152918352805180820182526d9e4602d9450c741f1b5b7e1f5d7360901b81527514f9017804a043ee9847869450f84f615ff6cba082511981840152918301919091526001908201527f53cdc829518354d5641e3e6fc6b07a9927d1a2a1ddacb919c0b58aeef60000006060820152919050565b604051806080016040528061016a6101b8565b81526020016101a46040518060400160405280600071ffffffffffffffffffffffffffffffffffff19168152602001600060150b81525090565b815260006020820181905260409091015290565b60405180604001604052806002905b60408051808201909152600080825260208201528152602001906001900390816101c75790505090565b81516101008201908260005b6002811015610234578251805160140b83526020908101516001600160a01b031681840152909201916040909101906001016101fd565b505050602083810151805171ffffffffffffffffffffffffffffffffffff19166080850152015160150b60a08301526040830151151560c083015260609092015162ffffff191660e0909101529056fea2646970667358221220606e20c0cf85ee7d0efba1491cfac04fce278d5ac0ae84a768db146cc1d8cc2a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_4984f0cb {\n int168 s_0;\n address s_1;\n }\n\n struct S_3c929952 {\n bytes14 s_0;\n int176 s_1;\n }\n\n struct S_34c78424 {\n S_4984f0cb[2] s_0;\n S_3c929952 s_1;\n bool s_2;\n bytes29 s_3;\n }\n\n function test () public pure returns (S_34c78424 memory) {\n S_34c78424 memory r;\n {\n S_4984f0cb[2] memory r_0;\n {\n S_4984f0cb memory r_0_0;\n {\n int168 r_0_0_0 = -40306235290679555254373358764110803070746151831627;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n address r_0_0_1 = 0x7a1F8900845BfEcfA95a54F592AfB348729d2d8E;\n r_0_0.s_1 = r_0_0_1;\n }\n r_0[0] = r_0_0;\n }\n {\n S_4984f0cb memory r_0_1;\n {\n int168 r_0_1_0 = 53598139176210223688429018735947430304533342212195;\n r_0_1.s_0 = r_0_1_0;\n }\n {\n address r_0_1_1 = 0x6D9F73728E175de54d5eef0cE2d72c15129CC473;\n r_0_1.s_1 = r_0_1_1;\n }\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n S_3c929952 memory r_1;\n {\n bytes14 r_1_0 = bytes14(0x9e4602d9450c741f1b5b7e1f5d73);\n r_1.s_0 = r_1_0;\n }\n {\n int176 r_1_1 = -7846810676312797034915239255265163595578824470856274;\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n bytes29 r_3 = bytes29(0x53cdc829518354d5641e3e6fc6b07a9927d1a2a1ddacb919c0b58aeef6);\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0xffffffffffffffffffffffe46bdde67a3b0c1a21831d52898e49891c45a4b7b50000000000000000000000007a1f8900845bfecfa95a54f592afb348729d2d8e000000000000000000000024ac5faf0c8dfc56b265e188f0563f0687f56650630000000000000000000000006d9f73728e175de54d5eef0ce2d72c15129cc4739e4602d9450c741f1b5b7e1f5d73000000000000000000000000000000000000ffffffffffffffffffffeb06fe87fb5fbc1167b8796baf07b09ea009345f7dae000000000000000000000000000000000000000000000000000000000000000153cdc829518354d5641e3e6fc6b07a9927d1a2a1ddacb919c0b58aeef6000000" + }, + { + "name": "random-((string,bytes9[1][3],bytes4),address)[]", + "type": "((string,bytes9[1][3],bytes4),address)[]", + "value": [ + [ + [ + "Moo é🚀éMoooo🚀o", + [["0x1bd869a457a934d5f9"], ["0x1d6daa4cfeae7974c0"], ["0xe09d9fd42b98a12a50"]], + "0xc5384ba8" + ], + "0xb072f7Fa593ba88747320e4E8f8b9A4FE48e5dEC" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éMoooo🚀o" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x1bd869a457a934d5f9" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x1d6daa4cfeae7974c0" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xe09d9fd42b98a12a50" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xc5384ba8" + } + ] + }, + { + "type": "address", + "value": "0xb072f7Fa593ba88747320e4E8f8b9A4FE48e5dEC" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061038d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610252565b60405180910390f35b60408051600180825281830190925260609160009190816020015b610071610178565b81526020019060019003908161006957905050905061008e610178565b610096610198565b6040805180820190915260168152754d6f6f20c3a9f09f9a80c3a94d6f6f6f6ff09f9a806f60501b602082015281526100cd6101ae565b6100d56101db565b681bd869a457a934d5f960b81b815281526100ee6101db565b6775b6a933fab9e5d360be1b815260208201526101096101db565b680e09d9fd42b98a12a560bc1b81526040808301919091526020838101929092526318a7097560e31b9083015290825273b072f7fa593ba88747320e4e8f8b9a4fe48e5dec9082015281518190839060009061016757610167610341565b602090810291909101015250919050565b604051806040016040528061018b610198565b8152600060209091015290565b60405180606001604052806060815260200161018b5b60405180606001604052806003905b6101c56101db565b8152602001906001900390816101bd5790505090565b60405180602001604052806001906020820280368337509192915050565b806000805b600381101561024b57825185835b60018110156102355782516001600160b81b03191682526020928301929091019060010161020c565b50505060209485019492909201916001016101fe565b5050505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561033257603f198a850301865282518051888652805160a08a88015280518060e0890152855b818110156102c1578281018d015189820161010001528c016102a4565b818111156102d35786610100838b0101525b508b83015191506102e760608901836101f9565b918a01516001600160e01b0319811660c089015291928b01516001600160a01b038116888d015292988b0198601f01601f19169690960161010001955050509187019160010161027a565b50919998505050505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212203d937073bef25c0ceb21f356023af0a1fea70531a33507528a7ba05826b8349b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b013855e {\n string s_0;\n bytes9[1][3] s_1;\n bytes4 s_2;\n }\n\n struct S_26305f92 {\n S_b013855e s_0;\n address s_1;\n }\n\n function test () public pure returns (S_26305f92[] memory) {\n S_26305f92[] memory r = new S_26305f92[](1);\n {\n S_26305f92 memory r_0;\n {\n S_b013855e memory r_0_0;\n {\n string memory r_0_0_0 = unicode\"Moo é🚀éMoooo🚀o\";\n r_0_0.s_0 = r_0_0_0;\n }\n {\n bytes9[1][3] memory r_0_0_1;\n {\n bytes9[1] memory r_0_0_1_0;\n {\n bytes9 r_0_0_1_0_0 = bytes9(0x1bd869a457a934d5f9);\n r_0_0_1_0[0] = r_0_0_1_0_0;\n }\n r_0_0_1[0] = r_0_0_1_0;\n }\n {\n bytes9[1] memory r_0_0_1_1;\n {\n bytes9 r_0_0_1_1_0 = bytes9(0x1d6daa4cfeae7974c0);\n r_0_0_1_1[0] = r_0_0_1_1_0;\n }\n r_0_0_1[1] = r_0_0_1_1;\n }\n {\n bytes9[1] memory r_0_0_1_2;\n {\n bytes9 r_0_0_1_2_0 = bytes9(0xe09d9fd42b98a12a50);\n r_0_0_1_2[0] = r_0_0_1_2_0;\n }\n r_0_0_1[2] = r_0_0_1_2;\n }\n r_0_0.s_1 = r_0_0_1;\n }\n {\n bytes4 r_0_0_2 = bytes4(0xc5384ba8);\n r_0_0.s_2 = r_0_0_2;\n }\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0xb072f7Fa593ba88747320e4E8f8b9A4FE48e5dEC;\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000b072f7fa593ba88747320e4e8f8b9a4fe48e5dec00000000000000000000000000000000000000000000000000000000000000a01bd869a457a934d5f900000000000000000000000000000000000000000000001d6daa4cfeae7974c00000000000000000000000000000000000000000000000e09d9fd42b98a12a500000000000000000000000000000000000000000000000c5384ba80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a80c3a94d6f6f6f6ff09f9a806f00000000000000000000" + }, + { + "name": "random-((uint56,(int184),bytes5),string,string[4],address)", + "type": "((uint56,(int184),bytes5),string,string[4],address)", + "value": [ + [ + "16151844343436938", + ["4364755589461348538764249853165449333310642892354549925"], + "0xa637c1874f" + ], + "Moo é🚀", + [ + "Moo é🚀 éM🚀oééoo🚀é🚀 🚀 oMo oéoo éM ooé 🚀oMoé🚀 🚀oéoMéM oMéMoo", + "Moo é🚀🚀é éoéoo oM🚀MoMMééé 🚀🚀 oéo 🚀éooo o🚀MééoMoooMoMéo o é🚀oo", + "Moo é🚀oéoo🚀ooM", + "Moo é🚀" + ], + "0x3C456C2d7087b83e7573B16f4F44b21df6260654" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "16151844343436938" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "4364755589461348538764249853165449333310642892354549925" + } + ] + }, + { + "type": "hexstring", + "value": "0xa637c1874f" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 éM🚀oééoo🚀é🚀 🚀 oMo oéoo éM ooé 🚀oMoé🚀 🚀oéoMéM oMéMoo" + }, + { + "type": "string", + "value": "Moo é🚀🚀é éoéoo oM🚀MoMMééé 🚀🚀 oéo 🚀éooo o🚀MééoMoooMoMéo o é🚀oo" + }, + { + "type": "string", + "value": "Moo é🚀oéoo🚀ooM" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "address", + "value": "0x3C456C2d7087b83e7573B16f4F44b21df6260654" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610424806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610270565b60405180910390f35b6100566101ac565b61005e6101ac565b60408051606081018252600080825282516020808201855282825280840191825283850192835266396204508ed68a845284518082018652762d91f6f7154a8ade3d433e5507f8cfa36e1c36d37ef8a5815290915264a637c1874f60d81b9091529083528151808301909252600a8252689adede418753e13f3560b71b828201528201526100ea6101fc565b600060405180608001604052806060815260200161038f606091398252506040805160a0810190915260638082526000919061032c602083013960208381019190915260408051808201825260168152754d6f6f20c3a9f09f9a806fc3a96f6ff09f9a806f6f4d60501b81840152818501528051808201909152600a8152689adede418753e13f3560b71b918101919091529050808260036020020152506040820152733c456c2d7087b83e7573b16f4f44b21df62606546060820152919050565b6040805160e08101825260006080820181815283516020810190945281845260a083019390935260c08201529081908152602001606081526020016101ef6101fc565b8152600060209091015290565b60405180608001604052806004905b606081526020019060019003908161020b5790505090565b6000815180845260005b818110156102495760208185018101518683018201520161022d565b8181111561025b576000602083870101525b50601f01601f19169290920160200192915050565b60006020808352835166ffffffffffffff81511682850152818101515160160b604085015264ffffffffff60d81b6040820151166060850152508084015160c060808501526102c260e0850182610223565b6040860151858203601f190160a0870152909150816080810160005b60048110156103095784820383526102f7828551610223565b938601939286019291506001016102de565b5060608801516001600160a01b03811660c0890152945097965050505050505056fe4d6f6f20c3a9f09f9a80f09f9a80c3a92020c3a96fc3a96f6f206f4df09f9a804d6f4d4dc3a9c3a9c3a920f09f9a80f09f9a80206fc3a96f20f09f9a80c3a96f6f6f206ff09f9a804dc3a9c3a96f4d6f6f6f4d6f4dc3a96f206f20c3a9f09f9a806f6f4d6f6f20c3a9f09f9a8020c3a94df09f9a806fc3a9c3a96f6ff09f9a80c3a9f09f9a8020f09f9a8020206f4d6f20206fc3a96f6f20c3a94d206f6fc3a920f09f9a806f4d6fc3a9f09f9a8020f09f9a806fc3a96f4dc3a94d206f4dc3a94d6f6fa26469706673582212201112110ea7f164c4edfc3703c348b3e41646188240d79ad2659e47cc9d2e28fb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_46877d46 {\n int184 s_0;\n }\n\n struct S_9751e6c2 {\n uint56 s_0;\n S_46877d46 s_1;\n bytes5 s_2;\n }\n\n struct S_5716c56f {\n S_9751e6c2 s_0;\n string s_1;\n string[4] s_2;\n address s_3;\n }\n\n function test () public pure returns (S_5716c56f memory) {\n S_5716c56f memory r;\n {\n S_9751e6c2 memory r_0;\n {\n uint56 r_0_0 = 16151844343436938;\n r_0.s_0 = r_0_0;\n }\n {\n S_46877d46 memory r_0_1;\n {\n int184 r_0_1_0 = 4364755589461348538764249853165449333310642892354549925;\n r_0_1.s_0 = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n {\n bytes5 r_0_2 = bytes5(0xa637c1874f);\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r.s_1 = r_1;\n }\n {\n string[4] memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀 éM🚀oééoo🚀é🚀 🚀 oMo oéoo éM ooé 🚀oMoé🚀 🚀oéoMéM oMéMoo\";\n r_2[0] = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀🚀é éoéoo oM🚀MoMMééé 🚀🚀 oéo 🚀éooo o🚀MééoMoooMoMéo o é🚀oo\";\n r_2[1] = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀oéoo🚀ooM\";\n r_2[2] = r_2_2;\n }\n {\n string memory r_2_3 = unicode\"Moo é🚀\";\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x3C456C2d7087b83e7573B16f4F44b21df6260654;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000396204508ed68a0000000000000000002d91f6f7154a8ade3d433e5507f8cfa36e1c36d37ef8a5a637c1874f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000003c456c2d7087b83e7573b16f4f44b21df6260654000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a8020c3a94df09f9a806fc3a9c3a96f6ff09f9a80c3a9f09f9a8020f09f9a8020206f4d6f20206fc3a96f6f20c3a94d206f6fc3a920f09f9a806f4d6fc3a9f09f9a8020f09f9a806fc3a96f4dc3a94d206f4dc3a94d6f6f00000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a80f09f9a80c3a92020c3a96fc3a96f6f206f4df09f9a804d6f4d4dc3a9c3a9c3a920f09f9a80f09f9a80206fc3a96f20f09f9a80c3a96f6f6f206ff09f9a804dc3a9c3a96f4d6f6f6f4d6f4dc3a96f206f20c3a9f09f9a806f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a806fc3a96f6ff09f9a806f6f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,(address),(int[],bool),bytes25,string)", + "type": "(address,(address),(int[],bool),bytes25,string)", + "value": [ + "0x63a53Bcc877841D7A558F58B01e50352365D1c8d", + ["0x68497e04529FbE62A9Af9F2BD52986Cd51f48a08"], + [[], true], + "0x0327f14a7225e6df175961d592e483dfb2bd000276dd2d5732", + "Moo é🚀oéoo🚀 " + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x63a53Bcc877841D7A558F58B01e50352365D1c8d" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x68497e04529FbE62A9Af9F2BD52986Cd51f48a08" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x0327f14a7225e6df175961d592e483dfb2bd000276dd2d5732" + }, + { + "type": "string", + "value": "Moo é🚀oéoo🚀 " + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102b0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101bb565b60405180910390f35b610056610121565b61005e610121565b7363a53bcc877841d7a558f58b01e50352365d1c8d815260408051602080820183527368497e04529fbe62a9af9f2bd52986cd51f48a0882528084019190915281518083018352606080825260008284018181528551918252818501865290835260019052838501919091527f0327f14a7225e6df175961d592e483dfb2bd000276dd2d5732000000000000009084015281518083019092526014825273026b7b79061d4f84fcd4037e1d4b7b7f84fcd40160651b908201526080820152919050565b6040805160a0810182526000808252825160208082018552828252808401919091528351808501855260608152908101919091529091820190815260006020820152606060409091015290565b6000815180845260005b8181101561019457602081850181015186830182015201610178565b818111156101a6576000602083870101525b50601f01601f19169290920160200192915050565b602080825282516001600160a01b03908116838301528382015151166040808401919091528084015160a06060850152805160c0850192909252815161010085018190526000939283019084906101208701905b8083101561022f578351825292850192600192909201919085019061020f565b5093830151151560e0870152606087015166ffffffffffffff1981166080880152936080880151878203601f190160a0890152945061026e818661016e565b9897505050505050505056fea26469706673582212200f99b6981bac4fb633c8690ffb5214a2fa28b6b5b655c5d2aeacc459201ffadb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_d39327fa {\n int256[] s_0;\n bool s_1;\n }\n\n struct S_dff460c3 {\n address s_0;\n S_421683f8 s_1;\n S_d39327fa s_2;\n bytes25 s_3;\n string s_4;\n }\n\n function test () public pure returns (S_dff460c3 memory) {\n S_dff460c3 memory r;\n {\n address r_0 = 0x63a53Bcc877841D7A558F58B01e50352365D1c8d;\n r.s_0 = r_0;\n }\n {\n S_421683f8 memory r_1;\n {\n address r_1_0 = 0x68497e04529FbE62A9Af9F2BD52986Cd51f48a08;\n r_1.s_0 = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n S_d39327fa memory r_2;\n {\n int256[] memory r_2_0 = new int256[](0);\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2.s_1 = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n bytes25 r_3 = bytes25(0x0327f14a7225e6df175961d592e483dfb2bd000276dd2d5732);\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀oéoo🚀 \";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000063a53bcc877841d7a558f58b01e50352365d1c8d00000000000000000000000068497e04529fbe62a9af9f2bd52986cd51f48a0800000000000000000000000000000000000000000000000000000000000000a00327f14a7225e6df175961d592e483dfb2bd000276dd2d573200000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a806fc3a96f6ff09f9a8020000000000000000000000000" + }, + { + "name": "random-(address,(bool,bool,uint24,uint64),string[1])", + "type": "(address,(bool,bool,uint24,uint64),string[1])", + "value": [ + "0xc7D95CD2aB3E9606B369c6f907EA5831d0959F3a", + [false, true, "14652657", "2059790946621060573"], + ["Moo é🚀ooMo🚀 oo🚀oéoo MMo"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xc7D95CD2aB3E9606B369c6f907EA5831d0959F3a" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "14652657" + }, + { + "type": "number", + "value": "2059790946621060573" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooMo🚀 oo🚀oéoo MMo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610280806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610146565b60405180910390f35b6100566100db565b61005e6100db565b73c7d95cd2ab3e9606b369c6f907ea5831d0959f3a81526040805160808101825260008152600160208083019190915262df94f192820192909252671c95d8f3e4e9f5dd6060820152908201526100b361011f565b6000604051806060016040528060228152602001610229602291398252506040820152919050565b6040805160608082018352600080835283516080810185528181526020818101839052948101829052918201529091820190815260200161011a61011f565b905290565b60405180602001604052806001905b606081526020019060019003908161012e5790505090565b602080825282516001600160a01b03168282015282810151805115156040808501919091528183015115156060808601919091528183015162ffffff1660808601529091015167ffffffffffffffff1660a084015283015160c0808401526000919061010084019060e0850184805b600181101561021b5787850360df1901835283518051808752835b818110156101eb578281018901518882018a015288016101d0565b818111156101fb578489838a0101525b50601f01601f1916959095018601945092850192918501916001016101b5565b509297965050505050505056fe4d6f6f20c3a9f09f9a806f6f4d6ff09f9a80206f6ff09f9a806fc3a96f6f204d4d6fa2646970667358221220fa73c3a8b021c7675c10a25dd970bd8f21cf1163a594c7bf79bf783cd5dd3dd564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c79c899f {\n bool s_0;\n bool s_1;\n uint24 s_2;\n uint64 s_3;\n }\n\n struct S_f4eff544 {\n address s_0;\n S_c79c899f s_1;\n string[1] s_2;\n }\n\n function test () public pure returns (S_f4eff544 memory) {\n S_f4eff544 memory r;\n {\n address r_0 = 0xc7D95CD2aB3E9606B369c6f907EA5831d0959F3a;\n r.s_0 = r_0;\n }\n {\n S_c79c899f memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1.s_1 = r_1_1;\n }\n {\n uint24 r_1_2 = 14652657;\n r_1.s_2 = r_1_2;\n }\n {\n uint64 r_1_3 = 2059790946621060573;\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n string[1] memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀ooMo🚀 oo🚀oéoo MMo\";\n r_2[0] = r_2_0;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000c7d95cd2ab3e9606b369c6f907ea5831d0959f3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000df94f10000000000000000000000000000000000000000000000001c95d8f3e4e9f5dd00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a806f6f4d6ff09f9a80206f6ff09f9a806fc3a96f6f204d4d6f000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,address,bool,bytes17,bytes20[][3])", + "type": "(address,address,bool,bytes17,bytes20[][3])", + "value": [ + "0x49F0b631621836Ff9195E76cfc08Dcc278977697", + "0xd413F02F7Ed9C92e20De40b7666eAdE827914402", + false, + "0xa2c60751ca08ae3d3f855ad02b124cbc09", + [ + [ + "0xe8c548bcda9cae9035edaf52b6e0d321b417b768", + "0x4c0e3bed50fa00c8a60934fbb91e4b23b1b54f8a", + "0xa0c27acf2298b4aaa38c33ceda7cba970e6886b7" + ], + ["0x50a23e5f63c36bd24ef7f12bd566d3d3e9677f0d"], + [ + "0x2cf011b3044b094e5fab8e5c32e3e3ff0387eeab", + "0x6b61dfb8ec85e7991cf0d9b2ec678369e1cc90a1" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x49F0b631621836Ff9195E76cfc08Dcc278977697" + }, + { + "type": "address", + "value": "0xd413F02F7Ed9C92e20De40b7666eAdE827914402" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xa2c60751ca08ae3d3f855ad02b124cbc09" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xe8c548bcda9cae9035edaf52b6e0d321b417b768" + }, + { + "type": "hexstring", + "value": "0x4c0e3bed50fa00c8a60934fbb91e4b23b1b54f8a" + }, + { + "type": "hexstring", + "value": "0xa0c27acf2298b4aaa38c33ceda7cba970e6886b7" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x50a23e5f63c36bd24ef7f12bd566d3d3e9677f0d" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2cf011b3044b094e5fab8e5c32e3e3ff0387eeab" + }, + { + "type": "hexstring", + "value": "0x6b61dfb8ec85e7991cf0d9b2ec678369e1cc90a1" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061046f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061034f565b60405180910390f35b6100566102f3565b61005e6102f3565b7349f0b631621836ff9195e76cfc08dcc278977697815273d413f02f7ed9c92e20de40b7666eade82791440260208201526000604082015270a2c60751ca08ae3d3f855ad02b124cbc0960781b60608201526100b8610328565b604080516003808252608082019092526000916020820160608036833750508151919250731d18a9179b5395d206bdb5ea56dc1a643682f6ed60631b91829150839060009061010957610109610423565b6001600160601b0319909216602092830291909101909101525080517326071df6a87d006453049a7ddc8f2591d8daa7c560611b9081908390600190811061015357610153610423565b6001600160601b03199092166020928302919091019091015250805173a0c27acf2298b4aaa38c33ceda7cba970e6886b760601b9081908390600290811061019d5761019d610423565b6001600160601b03199290921660209283029190910190910152508152604080516001808252818301909252600091816020016020820280368337505081519192507350a23e5f63c36bd24ef7f12bd566d3d3e9677f0d60601b91829150839060009061020c5761020c610423565b6001600160601b031992909216602092830291909101820152830191909152506040805160028082526060820190925260009181602001602082028036833750508151919250732cf011b3044b094e5fab8e5c32e3e3ff0387eeab60601b91829150839060009061027f5761027f610423565b6001600160601b031990921660209283029190910190910152508051736b61dfb8ec85e7991cf0d9b2ec678369e1cc90a160601b908190839060019081106102c9576102c9610423565b6001600160601b031992909216602092830291909101909101525060408201526080820152919050565b6040805160a081018252600080825260208201819052918101829052606081019190915260808101610323610328565b905290565b60405180606001604052806003905b60608152602001906001900390816103375790505090565b6000602080835260c0830160018060a01b0380865116838601528083870151166040860152506040850151151560608501526effffffffffffffffffffffffffffff196060860151166080850152608085015160a08086015281829050610120860192506000805b60038110156104165787850360bf19018352835180518087529087019087870190845b818110156104005783516001600160601b031916835292890192918901916001016103da565b50909650505092850192918501916001016103b7565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220fbd3e4c32b7d6d9d2de3cbdfcb967a4cf83d66a3f209b2887b1b4bbd1103676c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_614ee634 {\n address s_0;\n address s_1;\n bool s_2;\n bytes17 s_3;\n bytes20[][3] s_4;\n }\n\n function test () public pure returns (S_614ee634 memory) {\n S_614ee634 memory r;\n {\n address r_0 = 0x49F0b631621836Ff9195E76cfc08Dcc278977697;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xd413F02F7Ed9C92e20De40b7666eAdE827914402;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n bytes17 r_3 = bytes17(0xa2c60751ca08ae3d3f855ad02b124cbc09);\n r.s_3 = r_3;\n }\n {\n bytes20[][3] memory r_4;\n {\n bytes20[] memory r_4_0 = new bytes20[](3);\n {\n bytes20 r_4_0_0 = bytes20(0xe8c548bCDA9CaE9035eDAf52B6E0D321b417B768);\n r_4_0[0] = r_4_0_0;\n }\n {\n bytes20 r_4_0_1 = bytes20(0x4C0E3Bed50fA00C8a60934fBB91e4b23b1b54F8a);\n r_4_0[1] = r_4_0_1;\n }\n {\n bytes20 r_4_0_2 = bytes20(0xA0C27AcF2298b4aAa38c33ceDa7Cba970e6886b7);\n r_4_0[2] = r_4_0_2;\n }\n r_4[0] = r_4_0;\n }\n {\n bytes20[] memory r_4_1 = new bytes20[](1);\n {\n bytes20 r_4_1_0 = bytes20(0x50A23E5F63c36bd24Ef7f12bd566d3D3e9677f0D);\n r_4_1[0] = r_4_1_0;\n }\n r_4[1] = r_4_1;\n }\n {\n bytes20[] memory r_4_2 = new bytes20[](2);\n {\n bytes20 r_4_2_0 = bytes20(0x2Cf011b3044b094E5fab8e5C32e3E3fF0387EeaB);\n r_4_2[0] = r_4_2_0;\n }\n {\n bytes20 r_4_2_1 = bytes20(0x6b61dFB8EC85e7991CF0d9b2ec678369E1Cc90a1);\n r_4_2[1] = r_4_2_1;\n }\n r_4[2] = r_4_2;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000049f0b631621836ff9195e76cfc08dcc278977697000000000000000000000000d413f02f7ed9c92e20de40b7666eade8279144020000000000000000000000000000000000000000000000000000000000000000a2c60751ca08ae3d3f855ad02b124cbc0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000003e8c548bcda9cae9035edaf52b6e0d321b417b7680000000000000000000000004c0e3bed50fa00c8a60934fbb91e4b23b1b54f8a000000000000000000000000a0c27acf2298b4aaa38c33ceda7cba970e6886b7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000150a23e5f63c36bd24ef7f12bd566d3d3e9677f0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000022cf011b3044b094e5fab8e5c32e3e3ff0387eeab0000000000000000000000006b61dfb8ec85e7991cf0d9b2ec678369e1cc90a1000000000000000000000000" + }, + { + "name": "random-(address,int144,(int64,bool,bytes20,address,bytes10))", + "type": "(address,int144,(int64,bool,bytes20,address,bytes10))", + "value": [ + "0xC4283Eea246fbb41D2195d0084C0dC1933b92945", + "-275142182847016368334327504854516287165810", + [ + "-8298704982421087129", + false, + "0x1d6110c7b79748c9e9813c76aa9cb1ab47feffd5", + "0x2149b2AF810c0E0f51df267b906f82BeF4BEEf26", + "0x6417b07511a2a6f11191" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xC4283Eea246fbb41D2195d0084C0dC1933b92945" + }, + { + "type": "number", + "value": "-275142182847016368334327504854516287165810" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-8298704982421087129" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x1d6110c7b79748c9e9813c76aa9cb1ab47feffd5" + }, + { + "type": "address", + "value": "0x2149b2AF810c0E0f51df267b906f82BeF4BEEf26" + }, + { + "type": "hexstring", + "value": "0x6417b07511a2a6f11191" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610215806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6100386100b8565b6040805182516001600160a01b03908116825260208085015160110b8184015293830151805160070b83850152938401511515606080840191909152928401516bffffffffffffffffffffffff1916608080840191909152928401511660a08201529101516001600160b01b03191660c082015260e00160405180910390f35b6100c0610192565b6100c8610192565b73c4283eea246fbb41d2195d0084c0dc1933b92945815271032891f8e412eb6f925d489e5510f00855711960208201526101296040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b67732aec368cf9239819815260006020820152731d6110c7b79748c9e9813c76aa9cb1ab47feffd560601b604080830191909152732149b2af810c0e0f51df267b906f82bef4beef266060830152696417b07511a2a6f1119160b01b6080830152820152919050565b60408051606081018252600080825260208201529081016101da6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b90529056fea2646970667358221220a093e683190ced2fe1209b913b402263cf2149482ccbc41b2f58327d7b550b2964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6fa10cfb {\n int64 s_0;\n bool s_1;\n bytes20 s_2;\n address s_3;\n bytes10 s_4;\n }\n\n struct S_984fe987 {\n address s_0;\n int144 s_1;\n S_6fa10cfb s_2;\n }\n\n function test () public pure returns (S_984fe987 memory) {\n S_984fe987 memory r;\n {\n address r_0 = 0xC4283Eea246fbb41D2195d0084C0dC1933b92945;\n r.s_0 = r_0;\n }\n {\n int144 r_1 = -275142182847016368334327504854516287165810;\n r.s_1 = r_1;\n }\n {\n S_6fa10cfb memory r_2;\n {\n int64 r_2_0 = -8298704982421087129;\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = false;\n r_2.s_1 = r_2_1;\n }\n {\n bytes20 r_2_2 = bytes20(0x1D6110C7B79748C9E9813C76aA9CB1ab47feffd5);\n r_2.s_2 = r_2_2;\n }\n {\n address r_2_3 = 0x2149b2AF810c0E0f51df267b906f82BeF4BEEf26;\n r_2.s_3 = r_2_3;\n }\n {\n bytes10 r_2_4 = bytes10(0x6417b07511a2a6f11191);\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000c4283eea246fbb41d2195d0084c0dc1933b92945fffffffffffffffffffffffffffffcd76e071bed14906da2b761aaef0ff7aa8effffffffffffffffffffffffffffffffffffffffffffffff8cd513c97306dc6700000000000000000000000000000000000000000000000000000000000000001d6110c7b79748c9e9813c76aa9cb1ab47feffd50000000000000000000000000000000000000000000000002149b2af810c0e0f51df267b906f82bef4beef266417b07511a2a6f1119100000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,(bool,bool,string,(address)),bool[])", + "type": "(bool,(bool,bool,string,(address)),bool[])", + "value": [ + true, + [ + false, + false, + "Moo é🚀oMoM oéééM 🚀M o MM o M🚀oéoM🚀o🚀Mo🚀 MoMéooo oMoo Mé🚀o🚀é", + ["0xE47ba5407cF8b9097e6403554a5D18C9085F43e0"] + ], + [false, true] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀oMoM oéééM 🚀M o MM o M🚀oéoM🚀o🚀Mo🚀 MoMéooo oMoo Mé🚀o🚀é" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xE47ba5407cF8b9097e6403554a5D18C9085F43e0" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061036d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101f9565b60405180910390f35b61005661014b565b61005e61014b565b6001815261006a610174565b600080825260208083018290526040805160808101909152605c80825290916102dc9083013960408381019190915280516020808201835273e47ba5407cf8b9097e6403554a5d18c9085f43e082526060808601929092528501939093528051600280825293810190915260009290915081602001602082028036833701905050905060008082600081518110610103576101036102c5565b602002602001019015159081151581525050506000600190508082600181518110610130576101306102c5565b91151560209283029190910190910152506040820152919050565b6040518060600160405280600015158152602001610167610174565b8152602001606081525090565b6040518060800160405280600015158152602001600015158152602001606081526020016101b7604051806020016040528060006001600160a01b031681525090565b905290565b600081518084526020808501945080840160005b838110156101ee5781511515875295820195908201906001016101d0565b509495945050505050565b600060208083528351151581840152808401516060604085015261010081511515608086015282820151151560a08601526040820151608060c08701528051808388015260005b8181101561025d5782810186015188820161012001528501610240565b81811115610270576000610120838a0101525b50601f19601f8201168701945050506060820151915061029c60e0860183516001600160a01b03169052565b6040860151915080858403016060860152506102bc6101208301826101bc565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f4d6f4d206fc3a9c3a9c3a94d20f09f9a804d206f204d4d206f20204df09f9a806fc3a96f4df09f9a806ff09f9a804d6ff09f9a80204d6f4dc3a96f6f6f206f4d6f6f204dc3a9f09f9a806ff09f9a80c3a9a26469706673582212207decb06962d58dfbfeb17679bec21c578b4c09be89dbc4f0ac7ed4f1aaf6433664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_2813e380 {\n bool s_0;\n bool s_1;\n string s_2;\n S_421683f8 s_3;\n }\n\n struct S_3302dd52 {\n bool s_0;\n S_2813e380 s_1;\n bool[] s_2;\n }\n\n function test () public pure returns (S_3302dd52 memory) {\n S_3302dd52 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n S_2813e380 memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀oMoM oéééM 🚀M o MM o M🚀oéoM🚀o🚀Mo🚀 MoMéooo oMoo Mé🚀o🚀é\";\n r_1.s_2 = r_1_2;\n }\n {\n S_421683f8 memory r_1_3;\n {\n address r_1_3_0 = 0xE47ba5407cF8b9097e6403554a5D18C9085F43e0;\n r_1_3.s_0 = r_1_3_0;\n }\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n bool[] memory r_2 = new bool[](2);\n {\n bool r_2_0 = false;\n r_2[0] = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2[1] = r_2_1;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000e47ba5407cf8b9097e6403554a5d18c9085f43e0000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a806f4d6f4d206fc3a9c3a9c3a94d20f09f9a804d206f204d4d206f20204df09f9a806fc3a96f4df09f9a806ff09f9a804d6ff09f9a80204d6f4dc3a96f6f6f206f4d6f6f204dc3a9f09f9a806ff09f9a80c3a900000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bool,(bytes23,bool,bool[1],uint64,address))", + "type": "(bool,(bytes23,bool,bool[1],uint64,address))", + "value": [ + false, + [ + "0x9225af5e794886f4a274f51418e3ac6bf9beec49d13b8b", + true, + [false], + "16197001691930113412", + "0x609c771f8f09f7f8e8A4D1393B554533D46F0Ab7" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x9225af5e794886f4a274f51418e3ac6bf9beec49d13b8b" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "number", + "value": "16197001691930113412" + }, + { + "type": "address", + "value": "0x609c771f8f09f7f8e8A4D1393B554533D46F0Ab7" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610211806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610149565b60405180910390f35b6100566100d7565b61005e6100d7565b6000815261006a6100f8565b7f9225af5e794886f4a274f51418e3ac6bf9beec49d13b8b00000000000000000081526001602082015261009c61012b565b60008152604082015267e0c74f3931e53584606082015273609c771f8f09f7f8e8a4d1393b554533d46f0ab760808201526020820152919050565b60405180604001604052806000151581526020016100f36100f8565b905290565b6040805160a0810182526000808252602082015290810161011761012b565b815260006020820181905260409091015290565b60405180602001604052806001906020820280368337509192915050565b600060c08201905082511515825260208084015168ffffffffffffffffff1981511682850152818101511515604085015260408101516060850160005b60018110156101a5578251151582529184019190840190600101610186565b505050606081015167ffffffffffffffff811660808601529150608001516001600160a01b03811660a08501529050509291505056fea26469706673582212205e8ca376af22bde1991bb79ca77c88d6f0a765b91e43ea3ae388f7812255287864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6fd7b65a {\n bytes23 s_0;\n bool s_1;\n bool[1] s_2;\n uint64 s_3;\n address s_4;\n }\n\n struct S_fd9eb70f {\n bool s_0;\n S_6fd7b65a s_1;\n }\n\n function test () public pure returns (S_fd9eb70f memory) {\n S_fd9eb70f memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n S_6fd7b65a memory r_1;\n {\n bytes23 r_1_0 = bytes23(0x9225af5e794886f4a274f51418e3ac6bf9beec49d13b8b);\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1.s_1 = r_1_1;\n }\n {\n bool[1] memory r_1_2;\n {\n bool r_1_2_0 = false;\n r_1_2[0] = r_1_2_0;\n }\n r_1.s_2 = r_1_2;\n }\n {\n uint64 r_1_3 = 16197001691930113412;\n r_1.s_3 = r_1_3;\n }\n {\n address r_1_4 = 0x609c771f8f09f7f8e8A4D1393B554533D46F0Ab7;\n r_1.s_4 = r_1_4;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000009225af5e794886f4a274f51418e3ac6bf9beec49d13b8b00000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0c74f3931e53584000000000000000000000000609c771f8f09f7f8e8a4d1393b554533d46f0ab7" + }, + { + "name": "random-(bool,bool,bool[1],string,bool)[]", + "type": "(bool,bool,bool[1],string,bool)[]", + "value": [ + [false, true, [false], "Moo é🚀o MoooMMé oM🚀o é🚀MM🚀o MMo🚀MMMo🚀 M🚀o🚀oé ", true] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o MoooMMé oM🚀o é🚀MM🚀o MMo🚀MMMo🚀 M🚀o🚀oé " + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102f9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610199565b60405180910390f35b60408051600180825281830190925260609160009190816020015b6100716100fb565b81526020019060019003908161006957905050905061008e6100fb565b60008152600160208201526100a161012e565b6000808252604080840192909252815160808101909252604980835290919061027b6020830139606083015250600160808201528151819083906000906100ea576100ea610264565b602090810291909101015250919050565b6040805160a0810182526000808252602082015290810161011a61012e565b815260606020820152600060409091015290565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b8181101561017257602081850181015186830182015201610156565b81811115610184576000602083870101525b50601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561025557603f198a8503018652825160a08151151586528982015115158a87015288820151898701855b600181101561020e57825115158252918c0191908c01906001016101ef565b50505060608083015182828901526102288389018261014c565b9250505060808083015192506102418188018415159052565b5096890196945050918701916001016101c1565b50919998505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f204d6f6f6f4d4dc3a9206f4df09f9a806f20c3a9f09f9a804d4df09f9a806f204d4d6ff09f9a804d4d4d6ff09f9a80204df09f9a806ff09f9a806fc3a920a2646970667358221220d3c61fa39a65c9a85176364e7f851797b8ba642bdcd3d9fd9c83e883f5c8989c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_baa6a1e5 {\n bool s_0;\n bool s_1;\n bool[1] s_2;\n string s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_baa6a1e5[] memory) {\n S_baa6a1e5[] memory r = new S_baa6a1e5[](1);\n {\n S_baa6a1e5 memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0.s_1 = r_0_1;\n }\n {\n bool[1] memory r_0_2;\n {\n bool r_0_2_0 = false;\n r_0_2[0] = r_0_2_0;\n }\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀o MoooMMé oM🚀o é🚀MM🚀o MMo🚀MMMo🚀 M🚀o🚀oé \";\n r_0.s_3 = r_0_3;\n }\n {\n bool r_0_4 = true;\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000494d6f6f20c3a9f09f9a806f204d6f6f6f4d4dc3a9206f4df09f9a806f20c3a9f09f9a804d4df09f9a806f204d4d6ff09f9a804d4d4d6ff09f9a80204df09f9a806ff09f9a806fc3a9200000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,bool[1],bytes27,bytes6,uint224)[2]", + "type": "(bool,bool[1],bytes27,bytes6,uint224)[2]", + "value": [ + [ + true, + [false], + "0xe4e0f5aeba830cd0728fb2434526b68b7708ce9bc382ae52da5bb3", + "0x9394b48615f4", + "8605156320040708254228406838259977889959586445641519193995606308711" + ], + [ + false, + [false], + "0xa053c7f40b35788ec5074922e67a0d6eb80ce9c456f8a561efe133", + "0xa6f48653ddaf", + "14720916725764379239621359321805408247212348029973214612087968303453" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0xe4e0f5aeba830cd0728fb2434526b68b7708ce9bc382ae52da5bb3" + }, + { + "type": "hexstring", + "value": "0x9394b48615f4" + }, + { + "type": "number", + "value": "8605156320040708254228406838259977889959586445641519193995606308711" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0xa053c7f40b35788ec5074922e67a0d6eb80ce9c456f8a561efe133" + }, + { + "type": "hexstring", + "value": "0xa6f48653ddaf" + }, + { + "type": "number", + "value": "14720916725764379239621359321805408247212348029973214612087968303453" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102ae806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101d6565b60405180910390f35b610056610154565b61005e610154565b610066610181565b600181526100726101b8565b6000815260208201527fe4e0f5aeba830cd0728fb2434526b68b7708ce9bc382ae52da5bb3000000000060408201526524e52d21857d60d21b60608201527b51b5f9ecbfabccbb7cda94513af5bf3bddef4f9dc59c60e82d253767608082015281526100dc610181565b600081526100e86101b8565b600081526020828101919091527fa053c7f40b35788ec5074922e67a0d6eb80ce9c456f8a561efe1330000000000604083015265a6f48653ddaf60d01b60608301527b8bc890f806e73909393a5fe7446d1a6b6a369654283d7706bf0f095d6080830152820152919050565b60405180604001604052806002905b61016b610181565b8152602001906001900390816101635790505090565b6040518060a0016040528060001515815260200161019d6101b8565b81526000602082018190526040820181905260609091015290565b60405180602001604052806001906020820280368337509192915050565b610140810181836000805b600281101561026e578251805115158552602080820151818701855b600181101561021c5782511515825291830191908301906001016101fd565b50505060408281015164ffffffffff1916908701526060808301516001600160d01b031916908701526080918201516001600160e01b03169186019190915260a09094019392909201916001016101e1565b505050509291505056fea2646970667358221220274134f2d87db8a13f92139330e56f82571205b44a02ecc9ba7b2794cb38ca3b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_804cd5c9 {\n bool s_0;\n bool[1] s_1;\n bytes27 s_2;\n bytes6 s_3;\n uint224 s_4;\n }\n\n function test () public pure returns (S_804cd5c9[2] memory) {\n S_804cd5c9[2] memory r;\n {\n S_804cd5c9 memory r_0;\n {\n bool r_0_0 = true;\n r_0.s_0 = r_0_0;\n }\n {\n bool[1] memory r_0_1;\n {\n bool r_0_1_0 = false;\n r_0_1[0] = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n {\n bytes27 r_0_2 = bytes27(0xe4e0f5aeba830cd0728fb2434526b68b7708ce9bc382ae52da5bb3);\n r_0.s_2 = r_0_2;\n }\n {\n bytes6 r_0_3 = bytes6(0x9394b48615f4);\n r_0.s_3 = r_0_3;\n }\n {\n uint224 r_0_4 = 8605156320040708254228406838259977889959586445641519193995606308711;\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_804cd5c9 memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n {\n bool[1] memory r_1_1;\n {\n bool r_1_1_0 = false;\n r_1_1[0] = r_1_1_0;\n }\n r_1.s_1 = r_1_1;\n }\n {\n bytes27 r_1_2 = bytes27(0xa053c7f40b35788ec5074922e67a0d6eb80ce9c456f8a561efe133);\n r_1.s_2 = r_1_2;\n }\n {\n bytes6 r_1_3 = bytes6(0xa6f48653ddaf);\n r_1.s_3 = r_1_3;\n }\n {\n uint224 r_1_4 = 14720916725764379239621359321805408247212348029973214612087968303453;\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000e4e0f5aeba830cd0728fb2434526b68b7708ce9bc382ae52da5bb300000000009394b48615f400000000000000000000000000000000000000000000000000000000000051b5f9ecbfabccbb7cda94513af5bf3bddef4f9dc59c60e82d25376700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a053c7f40b35788ec5074922e67a0d6eb80ce9c456f8a561efe1330000000000a6f48653ddaf0000000000000000000000000000000000000000000000000000000000008bc890f806e73909393a5fe7446d1a6b6a369654283d7706bf0f095d" + }, + { + "name": "random-(bool,bytes7,bytes3,string,bool[][])", + "type": "(bool,bytes7,bytes3,string,bool[][])", + "value": [ + false, + "0x08e42a9d080e75", + "0x922926", + "Moo é🚀oMoé 🚀éo oééMoé éM o oéo o ", + [[false], [false, false, false, false], [false, false]] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x08e42a9d080e75" + }, + { + "type": "hexstring", + "value": "0x922926" + }, + { + "type": "string", + "value": "Moo é🚀oMoé 🚀éo oééMoé éM o oéo o " + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061049f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610373565b60405180910390f35b6040805160a0808201835260008083526020808401829052838501829052606080850181905260808086018290528651948501875283855284820182905284018190526608e42a9d080e7560c81b848301526249149360e91b8487015285519081019095526030808652939492939192919061043a9083013960608301525060408051600380825260808201909252600091816020015b60608152602001906001900390816100e557505060408051600180825281830190925291925060009190602080830190803683370190505090506000808260008151811061013557610135610423565b60200260200101901515908115158152505050808260008151811061015c5761015c610423565b60209081029190910101525060408051600480825260a08201909252600091816020016020820280368337019050509050600080826000815181106101a3576101a3610423565b60200260200101901515908115158152505050600080826001815181106101cc576101cc610423565b60200260200101901515908115158152505050600080826002815181106101f5576101f5610423565b602002602001019015159081151581525050506000808260038151811061021e5761021e610423565b60200260200101901515908115158152505050808260018151811061024557610245610423565b602090810291909101015250604080516002808252606082019092526000918160200160208202803683370190505090506000808260008151811061028c5761028c610423565b60200260200101901515908115158152505050600080826001815181106102b5576102b5610423565b6020026020010190151590811515815250505080826002815181106102dc576102dc610423565b6020908102919091010152506080820152919050565b600082825180855260208086019550808260051b8401018186016000805b8581101561036557868403601f19018a52825180518086529086019086860190845b81811015610350578351151583529288019291880191600101610332565b50509a86019a94505091840191600101610310565b509198975050505050505050565b60006020808352835115158184015266ffffffffffffff60c81b8185015116604084015262ffffff60e81b6040850151166060840152606084015160a0608085015280518060c086015260005b818110156103dc5782810184015186820160e0015283016103c0565b818111156103ee57600060e083880101525b50601f19601f820116850192505050608084015160c08483030160a085015261041a60e08301826102f2565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f4d6fc3a920f09f9a80c3a96f206fc3a9c3a94d6fc3a920c3a94d206f206fc3a96f20206f20a264697066735822122030c805220f7a4fb6b537ed7cd73178e95d9fd1960f33f9398f3ed1da8fe9337064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a347a3da {\n bool s_0;\n bytes7 s_1;\n bytes3 s_2;\n string s_3;\n bool[][] s_4;\n }\n\n function test () public pure returns (S_a347a3da memory) {\n S_a347a3da memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n bytes7 r_1 = bytes7(0x08e42a9d080e75);\n r.s_1 = r_1;\n }\n {\n bytes3 r_2 = bytes3(0x922926);\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀oMoé 🚀éo oééMoé éM o oéo o \";\n r.s_3 = r_3;\n }\n {\n bool[][] memory r_4 = new bool[][](3);\n {\n bool[] memory r_4_0 = new bool[](1);\n {\n bool r_4_0_0 = false;\n r_4_0[0] = r_4_0_0;\n }\n r_4[0] = r_4_0;\n }\n {\n bool[] memory r_4_1 = new bool[](4);\n {\n bool r_4_1_0 = false;\n r_4_1[0] = r_4_1_0;\n }\n {\n bool r_4_1_1 = false;\n r_4_1[1] = r_4_1_1;\n }\n {\n bool r_4_1_2 = false;\n r_4_1[2] = r_4_1_2;\n }\n {\n bool r_4_1_3 = false;\n r_4_1[3] = r_4_1_3;\n }\n r_4[1] = r_4_1;\n }\n {\n bool[] memory r_4_2 = new bool[](2);\n {\n bool r_4_2_0 = false;\n r_4_2[0] = r_4_2_0;\n }\n {\n bool r_4_2_1 = false;\n r_4_2[1] = r_4_2_1;\n }\n r_4[2] = r_4_2;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000008e42a9d080e7500000000000000000000000000000000000000000000000000922926000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a806f4d6fc3a920f09f9a80c3a96f206fc3a9c3a94d6fc3a920c3a94d206f206fc3a96f20206f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,string,address[1],(string,(string),string))", + "type": "(bool,string,address[1],(string,(string),string))", + "value": [ + false, + "Moo é🚀🚀 ooéoM🚀oo🚀oooo é🚀", + ["0xDd1aE127751b13502e4De4463730FC550f6f895A"], + [ + "Moo é🚀🚀ooo oé éo🚀ooéoMééoMooéooéoooMo", + ["Moo é🚀"], + "Moo é🚀o🚀éo🚀🚀ooooM M🚀oé🚀 MoM MéM ooMM oMo🚀" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀🚀 ooéoM🚀oo🚀oooo é🚀" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xDd1aE127751b13502e4De4463730FC550f6f895A" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀ooo oé éo🚀ooéoMééoMooéooéoooMo" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀éo🚀🚀ooooM M🚀oé🚀 MoM MéM ooMM oMo🚀" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103a6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610252565b60405180910390f35b610056610128565b61005e610128565b60008082526040805160608101909152602b808252610346602083013960208301525061008961015a565b73dd1ae127751b13502e4de4463730fc550f6f895a815260408201526100ad610178565b60006040518060600160405280603681526020016102ce6036913982525060408051602080820183526060825282518084018452600a8152689adede418753e13f3560b71b81830152825280840191909152815160808101909252604280835260009291610304908301396040830152506060820152919050565b60408051608081018252600081526060602082015290810161014861015a565b8152602001610155610178565b905290565b60405180602001604052806001906020820280368337509192915050565b6040518060600160405280606081526020016101a06040518060200160405280606081525090565b8152602001606081525090565b6000815180845260005b818110156101d3576020818501810151868301820152016101b7565b818111156101e5576000602083870101525b50601f01601f19169290920160200192915050565b600081516060845261020f60608501826101ad565b602084810151868303878301525181835291925061022f908301826101ad565b9150506040830151848203604086015261024982826101ad565b95945050505050565b600060208083528351151581840152808401516080604085015261027960a08501826101ad565b905060408501516060850160005b60018110156102ad5782516001600160a01b031682529184019190840190600101610287565b5050506060850151848203601f19016080860152915061024981836101fa56fe4d6f6f20c3a9f09f9a80f09f9a806f6f6f206fc3a920c3a96ff09f9a806f6fc3a96f4dc3a9c3a96f4d6f6fc3a96f6fc3a96f6f6f4d6f4d6f6f20c3a9f09f9a806ff09f9a80c3a96ff09f9a80f09f9a806f6f6f6f4d204df09f9a806fc3a9f09f9a80204d6f4d204dc3a94d206f6f4d4d206f4d6ff09f9a804d6f6f20c3a9f09f9a80f09f9a8020206f6fc3a96f4df09f9a806f6ff09f9a806f6f6f6f20c3a9f09f9a80a2646970667358221220716929179cbf8a773232e4ae9270329efaef7c015d5c3a34b37915afb78ec0bb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_3310a6ff {\n string s_0;\n S_97fc4627 s_1;\n string s_2;\n }\n\n struct S_8dc150ef {\n bool s_0;\n string s_1;\n address[1] s_2;\n S_3310a6ff s_3;\n }\n\n function test () public pure returns (S_8dc150ef memory) {\n S_8dc150ef memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀🚀 ooéoM🚀oo🚀oooo é🚀\";\n r.s_1 = r_1;\n }\n {\n address[1] memory r_2;\n {\n address r_2_0 = 0xDd1aE127751b13502e4De4463730FC550f6f895A;\n r_2[0] = r_2_0;\n }\n r.s_2 = r_2;\n }\n {\n S_3310a6ff memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀🚀ooo oé éo🚀ooéoMééoMooéooéoooMo\";\n r_3.s_0 = r_3_0;\n }\n {\n S_97fc4627 memory r_3_1;\n {\n string memory r_3_1_0 = unicode\"Moo é🚀\";\n r_3_1.s_0 = r_3_1_0;\n }\n r_3.s_1 = r_3_1;\n }\n {\n string memory r_3_2 = unicode\"Moo é🚀o🚀éo🚀🚀ooooM M🚀oé🚀 MoM MéM ooMM oMo🚀\";\n r_3.s_2 = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000dd1ae127751b13502e4de4463730fc550f6f895a00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a80f09f9a8020206f6fc3a96f4df09f9a806f6ff09f9a806f6f6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a80f09f9a806f6f6f206fc3a920c3a96ff09f9a806f6fc3a96f4dc3a9c3a96f4d6f6fc3a96f6fc3a96f6f6f4d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a806ff09f9a80c3a96ff09f9a80f09f9a806f6f6f6f4d204df09f9a806fc3a9f09f9a80204d6f4d204dc3a94d206f6f4d4d206f4d6ff09f9a80000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool[3],uint72,bool,(int224,uint184),address)", + "type": "(bool[3],uint72,bool,(int224,uint184),address)", + "value": [ + [true, false, true], + "4535964348441548969180", + true, + [ + "-6418820650046693556843976800617405097575301875889565642671844506808", + "24438828902981147049337716815967054393051721840592518229" + ], + "0xB67FdCefD1f7a3DBC7107f3a58c2d55a54a8E736" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "number", + "value": "4535964348441548969180" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-6418820650046693556843976800617405097575301875889565642671844506808" + }, + { + "type": "number", + "value": "24438828902981147049337716815967054393051721840592518229" + } + ] + }, + { + "type": "address", + "value": "0xB67FdCefD1f7a3DBC7107f3a58c2d55a54a8E736" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061024f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610188565b60405180910390f35b610056610101565b61005e610101565b61006661016a565b60018082526000602080840191909152604080840183905292845268f5e5269656a6b654dc848201528383019190915281518083019092527fffffffffc30cb61a570e964ab2dd7ed64a4c15429c879349196e0f74c6c3c348825276ff273d4c749f3692c42cc16ff9ed393d8a0ead1ce97c5590820152606082015273b67fdcefd1f7a3dbc7107f3a58c2d55a54a8e7366080820152919050565b6040518060a0016040528061011461016a565b8152602001600068ffffffffffffffffff16815260200160001515815260200161015d60405180604001604052806000601b0b815260200160006001600160b81b031681525090565b8152600060209091015290565b60405180606001604052806003906020820280368337509192915050565b81516101008201908260005b60038110156101b55782511515825260209283019290910190600101610194565b505050602083015168ffffffffffffffffff166060830152604083015180151560808401525060608301518051601b0b60a084015260208101516001600160b81b031660c08401525060808301516001600160a01b03811660e0840152509291505056fea2646970667358221220014ab270cc45da15ebae710faa6ce5fee56256bef5bccb497e464610a6de90a264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_bc6be5a1 {\n int224 s_0;\n uint184 s_1;\n }\n\n struct S_e4f69676 {\n bool[3] s_0;\n uint72 s_1;\n bool s_2;\n S_bc6be5a1 s_3;\n address s_4;\n }\n\n function test () public pure returns (S_e4f69676 memory) {\n S_e4f69676 memory r;\n {\n bool[3] memory r_0;\n {\n bool r_0_0 = true;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0[1] = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n uint72 r_1 = 4535964348441548969180;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n S_bc6be5a1 memory r_3;\n {\n int224 r_3_0 = -6418820650046693556843976800617405097575301875889565642671844506808;\n r_3.s_0 = r_3_0;\n }\n {\n uint184 r_3_1 = 24438828902981147049337716815967054393051721840592518229;\n r_3.s_1 = r_3_1;\n }\n r.s_3 = r_3;\n }\n {\n address r_4 = 0xB67FdCefD1f7a3DBC7107f3a58c2d55a54a8E736;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000f5e5269656a6b654dc0000000000000000000000000000000000000000000000000000000000000001ffffffffc30cb61a570e964ab2dd7ed64a4c15429c879349196e0f74c6c3c348000000000000000000ff273d4c749f3692c42cc16ff9ed393d8a0ead1ce97c55000000000000000000000000b67fdcefd1f7a3dbc7107f3a58c2d55a54a8e736" + }, + { + "name": "random-(bool[4],((string),uint128,string,bytes17[3]))", + "type": "(bool[4],((string),uint128,string,bytes17[3]))", + "value": [ + [true, true, true, false], + [ + ["Moo é🚀o🚀oo🚀o éoéo oooMo é🚀Mo oMé🚀oMooo 🚀 éo"], + "132696753919735664446618760930288562956", + "Moo é🚀 oo🚀é🚀éoMéoMéooo🚀oooo ", + [ + "0x6dc48cb068f0f771d9a2a49418d7216581", + "0x58b803f65e241c49d627ee038d2165316e", + "0x59527bfb5496208e04ed9d24daa29131db" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀oo🚀o éoéo oooMo é🚀Mo oMé🚀oMooo 🚀 éo" + } + ] + }, + { + "type": "number", + "value": "132696753919735664446618760930288562956" + }, + { + "type": "string", + "value": "Moo é🚀 oo🚀é🚀éoMéoMéooo🚀oooo " + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x6dc48cb068f0f771d9a2a49418d7216581" + }, + { + "type": "hexstring", + "value": "0x58b803f65e241c49d627ee038d2165316e" + }, + { + "type": "hexstring", + "value": "0x59527bfb5496208e04ed9d24daa29131db" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103b8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061022f565b60405180910390f35b610056610158565b61005e610158565b61006661017d565b600180825260208201819052604082015260006060820152815261008861019b565b60408051602081019091526060815260006040518060800160405280604381526020016103406043913982525081526f63d47716ac1552b544075c5d10f5730c6020808301919091526040805160608101909152602d808252600092610313908301396040830152506100f96101c4565b706dc48cb068f0f771d9a2a49418d721658160781b8152702c5c01fb2f120e24eb13f701c690b298b760791b6020808301919091527059527bfb5496208e04ed9d24daa29131db60781b60408301526060830191909152820152919050565b604051806040016040528061016b61017d565b815260200161017861019b565b905290565b60405180608001604052806004906020820280368337509192915050565b6040805160a0810182526060608082018181528252600060208301529181018290529081016101785b60405180606001604052806003906020820280368337509192915050565b6000815180845260005b81811015610208576020818501810151868301820152016101ec565b8181111561021a576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825160009190828483015b6004821015610260578251151581529183019160019190910190830161023f565b5050508381015160a084810152805160c08086015251610180850183905261028c6101a08601826101e2565b90506fffffffffffffffffffffffffffffffff838301511660e0860152604082015160bf19868303016101008701526102c582826101e2565b91505060608201519150610120850160005b60038110156103065783516effffffffffffffffffffffffffffff1916825292840192908401906001016102d7565b5090969550505050505056fe4d6f6f20c3a9f09f9a80206f6ff09f9a80c3a9f09f9a80c3a96f4dc3a96f4dc3a96f6f6ff09f9a806f6f6f6f204d6f6f20c3a9f09f9a806ff09f9a806f6ff09f9a806f20c3a96fc3a96f206f6f6f4d6f20c3a9f09f9a804d6f206f4dc3a9f09f9a806f4d6f6f6f20f09f9a8020c3a96fa264697066735822122060b42ffe09eb9667e1d780d49211afd6f6e798d5043f098f278c903edb8febc364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_73eb10c5 {\n S_97fc4627 s_0;\n uint128 s_1;\n string s_2;\n bytes17[3] s_3;\n }\n\n struct S_8d75cce2 {\n bool[4] s_0;\n S_73eb10c5 s_1;\n }\n\n function test () public pure returns (S_8d75cce2 memory) {\n S_8d75cce2 memory r;\n {\n bool[4] memory r_0;\n {\n bool r_0_0 = true;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0[1] = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0[2] = r_0_2;\n }\n {\n bool r_0_3 = false;\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n S_73eb10c5 memory r_1;\n {\n S_97fc4627 memory r_1_0;\n {\n string memory r_1_0_0 = unicode\"Moo é🚀o🚀oo🚀o éoéo oooMo é🚀Mo oMé🚀oMooo 🚀 éo\";\n r_1_0.s_0 = r_1_0_0;\n }\n r_1.s_0 = r_1_0;\n }\n {\n uint128 r_1_1 = 132696753919735664446618760930288562956;\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀 oo🚀é🚀éoMéoMéooo🚀oooo \";\n r_1.s_2 = r_1_2;\n }\n {\n bytes17[3] memory r_1_3;\n {\n bytes17 r_1_3_0 = bytes17(0x6dc48cb068f0f771d9a2a49418d7216581);\n r_1_3[0] = r_1_3_0;\n }\n {\n bytes17 r_1_3_1 = bytes17(0x58b803f65e241c49d627ee038d2165316e);\n r_1_3[1] = r_1_3_1;\n }\n {\n bytes17 r_1_3_2 = bytes17(0x59527bfb5496208e04ed9d24daa29131db);\n r_1_3[2] = r_1_3_2;\n }\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000063d47716ac1552b544075c5d10f5730c00000000000000000000000000000000000000000000000000000000000001606dc48cb068f0f771d9a2a49418d721658100000000000000000000000000000058b803f65e241c49d627ee038d2165316e00000000000000000000000000000059527bfb5496208e04ed9d24daa29131db000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a806ff09f9a806f6ff09f9a806f20c3a96fc3a96f206f6f6f4d6f20c3a9f09f9a804d6f206f4dc3a9f09f9a806f4d6f6f6f20f09f9a8020c3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a80206f6ff09f9a80c3a9f09f9a80c3a96f4dc3a96f4dc3a96f6f6ff09f9a806f6f6f6f2000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes1[1],bool,int,bytes32,bytes28)[4]", + "type": "(bytes1[1],bool,int,bytes32,bytes28)[4]", + "value": [ + [ + ["0x53"], + false, + "45951035850761741965938828097863677845433677283782871747441761503185887793087", + "0xfb5d1c7a9c81eabbf42191832ba31e25d8584440e8a13f8ce5494a8f2255956c", + "0x6324bc19045215def69183cc0c332a10709151d4e80bf13130c683fc" + ], + [ + ["0x9c"], + true, + "16346745290562006938829453866745602442043982381133115153767474438870192303222", + "0x1174b364fab3e249dc5087fb6024e2166923f536d076963634182b1a93449614", + "0x1dae7064361a0b547254011252182950dfb831fbd8fb14c97e7de80e" + ], + [ + ["0xe9"], + true, + "15842128826463895113386789355409754023168105186916834079232232404897208207349", + "0x4af2b78fb9044a44c27ba7a42e614e81f76a42584408ffdbfcc73658b6dcbdff", + "0x4d03e9852b670b46e3f8e99d437838a4edec4d2137b1b5e482a3f5a6" + ], + [ + ["0x11"], + false, + "-25028951373181890396189930937898868506744737527323695993236592248656798334265", + "0x9b17ae824b8d94e2c6891c58031f88df91046b580d88538e9b00c343012d383e", + "0x6dece94707ebe38a5dad62fb473370a58962c1f9e3ebf8d55148048e" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x53" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "45951035850761741965938828097863677845433677283782871747441761503185887793087" + }, + { + "type": "hexstring", + "value": "0xfb5d1c7a9c81eabbf42191832ba31e25d8584440e8a13f8ce5494a8f2255956c" + }, + { + "type": "hexstring", + "value": "0x6324bc19045215def69183cc0c332a10709151d4e80bf13130c683fc" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x9c" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "16346745290562006938829453866745602442043982381133115153767474438870192303222" + }, + { + "type": "hexstring", + "value": "0x1174b364fab3e249dc5087fb6024e2166923f536d076963634182b1a93449614" + }, + { + "type": "hexstring", + "value": "0x1dae7064361a0b547254011252182950dfb831fbd8fb14c97e7de80e" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xe9" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "15842128826463895113386789355409754023168105186916834079232232404897208207349" + }, + { + "type": "hexstring", + "value": "0x4af2b78fb9044a44c27ba7a42e614e81f76a42584408ffdbfcc73658b6dcbdff" + }, + { + "type": "hexstring", + "value": "0x4d03e9852b670b46e3f8e99d437838a4edec4d2137b1b5e482a3f5a6" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x11" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-25028951373181890396189930937898868506744737527323695993236592248656798334265" + }, + { + "type": "hexstring", + "value": "0x9b17ae824b8d94e2c6891c58031f88df91046b580d88538e9b00c343012d383e" + }, + { + "type": "hexstring", + "value": "0x6dece94707ebe38a5dad62fb473370a58962c1f9e3ebf8d55148048e" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610410806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610342565b60405180910390f35b6100566102c2565b61005e6102c2565b6100666102ef565b61006e610324565b605360f81b81528152600060208201527f65975d5814bed094729298644b9b029cc97e551501ad96385c1ecf7b194f8fbf60408201527ffb5d1c7a9c81eabbf42191832ba31e25d8584440e8a13f8ce5494a8f2255956c60608201527f6324bc19045215def69183cc0c332a10709151d4e80bf13130c683fc00000000608082015281526100fa6102ef565b610102610324565b602760fa1b8152815260016020828101919091527f2423ee11c13623b9646194c4da1ef58cdeea10e66675df3cbacea03932af2c7660408301527f1174b364fab3e249dc5087fb6024e2166923f536d076963634182b1a9344961460608301527f1dae7064361a0b547254011252182950dfb831fbd8fb14c97e7de80e0000000060808301528201526101936102ef565b61019b610324565b60e960f81b81528152600160208201527f230653c0d4bdf9e779510cb142f07ada4c7fd02fb133b48a4d9ad946562807f56040808301919091527f4af2b78fb9044a44c27ba7a42e614e81f76a42584408ffdbfcc73658b6dcbdff60608301527f4d03e9852b670b46e3f8e99d437838a4edec4d2137b1b5e482a3f5a600000000608083015282015261022c6102ef565b610234610324565b601160f81b81528152600060208201527fc8aa1d94369fa567b639a644ce79a91a6640d78e0b23a195cc2cdc5c9f0542c760408201527f9b17ae824b8d94e2c6891c58031f88df91046b580d88538e9b00c343012d383e6060808301919091527f6dece94707ebe38a5dad62fb473370a58962c1f9e3ebf8d55148048e000000006080830152820152919050565b60405180608001604052806004905b6102d96102ef565b8152602001906001900390816102d15790505090565b6040518060a00160405280610302610324565b8152600060208201819052604082018190526060820181905260809091015290565b60405180602001604052806001906020820280368337509192915050565b610280810181836000805b60048110156103d0578251805185845b60018110156103865782516001600160f81b03191682526020928301929091019060010161035d565b505050602081810151151586820152604080830151908701526060808301519087015260809182015163ffffffff19169186019190915260a090940193929092019160010161034d565b505050509291505056fea264697066735822122093038474b6a36699ea8b81670d0b3e81fada94f9fb2b073514e8722c174a22c664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5327395f {\n bytes1[1] s_0;\n bool s_1;\n int256 s_2;\n bytes32 s_3;\n bytes28 s_4;\n }\n\n function test () public pure returns (S_5327395f[4] memory) {\n S_5327395f[4] memory r;\n {\n S_5327395f memory r_0;\n {\n bytes1[1] memory r_0_0;\n {\n bytes1 r_0_0_0 = bytes1(0x53);\n r_0_0[0] = r_0_0_0;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n {\n int r_0_2 = 45951035850761741965938828097863677845433677283782871747441761503185887793087;\n r_0.s_2 = r_0_2;\n }\n {\n bytes32 r_0_3 = bytes32(0xfb5d1c7a9c81eabbf42191832ba31e25d8584440e8a13f8ce5494a8f2255956c);\n r_0.s_3 = r_0_3;\n }\n {\n bytes28 r_0_4 = bytes28(0x6324bc19045215def69183cc0c332a10709151d4e80bf13130c683fc);\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_5327395f memory r_1;\n {\n bytes1[1] memory r_1_0;\n {\n bytes1 r_1_0_0 = bytes1(0x9c);\n r_1_0[0] = r_1_0_0;\n }\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1.s_1 = r_1_1;\n }\n {\n int r_1_2 = 16346745290562006938829453866745602442043982381133115153767474438870192303222;\n r_1.s_2 = r_1_2;\n }\n {\n bytes32 r_1_3 = bytes32(0x1174b364fab3e249dc5087fb6024e2166923f536d076963634182b1a93449614);\n r_1.s_3 = r_1_3;\n }\n {\n bytes28 r_1_4 = bytes28(0x1dae7064361a0b547254011252182950dfb831fbd8fb14c97e7de80e);\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n {\n S_5327395f memory r_2;\n {\n bytes1[1] memory r_2_0;\n {\n bytes1 r_2_0_0 = bytes1(0xe9);\n r_2_0[0] = r_2_0_0;\n }\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2.s_1 = r_2_1;\n }\n {\n int r_2_2 = 15842128826463895113386789355409754023168105186916834079232232404897208207349;\n r_2.s_2 = r_2_2;\n }\n {\n bytes32 r_2_3 = bytes32(0x4af2b78fb9044a44c27ba7a42e614e81f76a42584408ffdbfcc73658b6dcbdff);\n r_2.s_3 = r_2_3;\n }\n {\n bytes28 r_2_4 = bytes28(0x4d03e9852b670b46e3f8e99d437838a4edec4d2137b1b5e482a3f5a6);\n r_2.s_4 = r_2_4;\n }\n r[2] = r_2;\n }\n {\n S_5327395f memory r_3;\n {\n bytes1[1] memory r_3_0;\n {\n bytes1 r_3_0_0 = bytes1(0x11);\n r_3_0[0] = r_3_0_0;\n }\n r_3.s_0 = r_3_0;\n }\n {\n bool r_3_1 = false;\n r_3.s_1 = r_3_1;\n }\n {\n int r_3_2 = -25028951373181890396189930937898868506744737527323695993236592248656798334265;\n r_3.s_2 = r_3_2;\n }\n {\n bytes32 r_3_3 = bytes32(0x9b17ae824b8d94e2c6891c58031f88df91046b580d88538e9b00c343012d383e);\n r_3.s_3 = r_3_3;\n }\n {\n bytes28 r_3_4 = bytes28(0x6dece94707ebe38a5dad62fb473370a58962c1f9e3ebf8d55148048e);\n r_3.s_4 = r_3_4;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x5300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065975d5814bed094729298644b9b029cc97e551501ad96385c1ecf7b194f8fbffb5d1c7a9c81eabbf42191832ba31e25d8584440e8a13f8ce5494a8f2255956c6324bc19045215def69183cc0c332a10709151d4e80bf13130c683fc000000009c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012423ee11c13623b9646194c4da1ef58cdeea10e66675df3cbacea03932af2c761174b364fab3e249dc5087fb6024e2166923f536d076963634182b1a934496141dae7064361a0b547254011252182950dfb831fbd8fb14c97e7de80e00000000e9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001230653c0d4bdf9e779510cb142f07ada4c7fd02fb133b48a4d9ad946562807f54af2b78fb9044a44c27ba7a42e614e81f76a42584408ffdbfcc73658b6dcbdff4d03e9852b670b46e3f8e99d437838a4edec4d2137b1b5e482a3f5a60000000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8aa1d94369fa567b639a644ce79a91a6640d78e0b23a195cc2cdc5c9f0542c79b17ae824b8d94e2c6891c58031f88df91046b580d88538e9b00c343012d383e6dece94707ebe38a5dad62fb473370a58962c1f9e3ebf8d55148048e00000000" + }, + { + "name": "random-(bytes12[4],bool,address[4],uint144,bytes13)", + "type": "(bytes12[4],bool,address[4],uint144,bytes13)", + "value": [ + [ + "0x7bc1bf64310bc9d9432f20ce", + "0x54bdc4ad8a36bf7759670e4f", + "0x8bd7c6ec8f8abcbe5c8aefdd", + "0xe0989126437ec60ceeccdcf8" + ], + false, + [ + "0x1AC6eb8A246a9E4fCA2061E4307E8698e99B0F1c", + "0x710D6593B0ab0C9A8054f46E81fcbF4A00DaaFa7", + "0x4E917A3E226ed7ffdF2a88f909e75dFD15395D20", + "0xEe37f6D2E1A26030FD36A67B6840522c4943D7A6" + ], + "8416196836672454983981591962733681215185208", + "0xdfaabaf6fc9199a17c4b589789" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x7bc1bf64310bc9d9432f20ce" + }, + { + "type": "hexstring", + "value": "0x54bdc4ad8a36bf7759670e4f" + }, + { + "type": "hexstring", + "value": "0x8bd7c6ec8f8abcbe5c8aefdd" + }, + { + "type": "hexstring", + "value": "0xe0989126437ec60ceeccdcf8" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x1AC6eb8A246a9E4fCA2061E4307E8698e99B0F1c" + }, + { + "type": "address", + "value": "0x710D6593B0ab0C9A8054f46E81fcbF4A00DaaFa7" + }, + { + "type": "address", + "value": "0x4E917A3E226ed7ffdF2a88f909e75dFD15395D20" + }, + { + "type": "address", + "value": "0xEe37f6D2E1A26030FD36A67B6840522c4943D7A6" + } + ] + }, + { + "type": "number", + "value": "8416196836672454983981591962733681215185208" + }, + { + "type": "hexstring", + "value": "0xdfaabaf6fc9199a17c4b589789" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102cf806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101fd565b60405180910390f35b610056610172565b61005e610172565b6100666101ad565b6b3de0dfb21885e4eca197906760a11b81526b54bdc4ad8a36bf7759670e4f60a01b6020808301919091526b8bd7c6ec8f8abcbe5c8aefdd60a01b60408301526b1c131224c86fd8c19dd99b9f60a31b60608301529082526000908201526100cc6101ad565b731ac6eb8a246a9e4fca2061e4307e8698e99b0f1c815273710d6593b0ab0c9a8054f46e81fcbf4a00daafa76020820152734e917a3e226ed7ffdf2a88f909e75dfd15395d2060408083019190915273ee37f6d2e1a26030fd36a67b6840522c4943d7a66060808401919091529083019190915271609cfac68f7a61d509941b909d74dc1ea138908201526cdfaabaf6fc9199a17c4b58978960981b6080820152919050565b6040518060a001604052806101856101ad565b8152600060208201526040016101996101ad565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b8060005b60048110156101f75781516001600160a01b03168452602093840193909101906001016101cf565b50505050565b81516101608201908260005b60048110156102325782516001600160a01b031916825260209283019290910190600101610209565b505050602083015115156080830152604083015161025360a08401826101cb565b50606083015171ffffffffffffffffffffffffffffffffffff1661012083015260809092015172ffffffffffffffffffffffffffffffffffffff1916610140909101529056fea2646970667358221220d7c9ca3855363aabf80ff905589eb40cfca7986195eb412b71ac4f4166489e9b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5519549a {\n bytes12[4] s_0;\n bool s_1;\n address[4] s_2;\n uint144 s_3;\n bytes13 s_4;\n }\n\n function test () public pure returns (S_5519549a memory) {\n S_5519549a memory r;\n {\n bytes12[4] memory r_0;\n {\n bytes12 r_0_0 = bytes12(0x7bc1bf64310bc9d9432f20ce);\n r_0[0] = r_0_0;\n }\n {\n bytes12 r_0_1 = bytes12(0x54bdc4ad8a36bf7759670e4f);\n r_0[1] = r_0_1;\n }\n {\n bytes12 r_0_2 = bytes12(0x8bd7c6ec8f8abcbe5c8aefdd);\n r_0[2] = r_0_2;\n }\n {\n bytes12 r_0_3 = bytes12(0xe0989126437ec60ceeccdcf8);\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n address[4] memory r_2;\n {\n address r_2_0 = 0x1AC6eb8A246a9E4fCA2061E4307E8698e99B0F1c;\n r_2[0] = r_2_0;\n }\n {\n address r_2_1 = 0x710D6593B0ab0C9A8054f46E81fcbF4A00DaaFa7;\n r_2[1] = r_2_1;\n }\n {\n address r_2_2 = 0x4E917A3E226ed7ffdF2a88f909e75dFD15395D20;\n r_2[2] = r_2_2;\n }\n {\n address r_2_3 = 0xEe37f6D2E1A26030FD36A67B6840522c4943D7A6;\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n uint144 r_3 = 8416196836672454983981591962733681215185208;\n r.s_3 = r_3;\n }\n {\n bytes13 r_4 = bytes13(0xdfaabaf6fc9199a17c4b589789);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x7bc1bf64310bc9d9432f20ce000000000000000000000000000000000000000054bdc4ad8a36bf7759670e4f00000000000000000000000000000000000000008bd7c6ec8f8abcbe5c8aefdd0000000000000000000000000000000000000000e0989126437ec60ceeccdcf8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac6eb8a246a9e4fca2061e4307e8698e99b0f1c000000000000000000000000710d6593b0ab0c9a8054f46e81fcbf4a00daafa70000000000000000000000004e917a3e226ed7ffdf2a88f909e75dfd15395d20000000000000000000000000ee37f6d2e1a26030fd36a67b6840522c4943d7a60000000000000000000000000000609cfac68f7a61d509941b909d74dc1ea138dfaabaf6fc9199a17c4b58978900000000000000000000000000000000000000" + }, + { + "name": "random-(bytes16,address[3],int24,bool,(address,uint128))", + "type": "(bytes16,address[3],int24,bool,(address,uint128))", + "value": [ + "0x985c3b4bed66c68d724558ca9d0c5a41", + [ + "0x3825D99556dFDC66E5195Af4585dA92870988a71", + "0xC74d25a2880d1a29D96e7A44E67E52a43f52903A", + "0x3F16de2fA11bD2e9da9aD4c4365f2072f967d0Fa" + ], + "-7265032", + true, + ["0xcB7017382824d46cFA576e8Abe3D567eA0C046F0", "42647682971370966884211330932430589296"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x985c3b4bed66c68d724558ca9d0c5a41" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x3825D99556dFDC66E5195Af4585dA92870988a71" + }, + { + "type": "address", + "value": "0xC74d25a2880d1a29D96e7A44E67E52a43f52903A" + }, + { + "type": "address", + "value": "0x3F16de2fA11bD2e9da9aD4c4365f2072f967d0Fa" + } + ] + }, + { + "type": "number", + "value": "-7265032" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xcB7017382824d46cFA576e8Abe3D567eA0C046F0" + }, + { + "type": "number", + "value": "42647682971370966884211330932430589296" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061026f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061018f565b60405180910390f35b610056610124565b61005e610124565b6f985c3b4bed66c68d724558ca9d0c5a4160801b815261007c610171565b733825d99556dfdc66e5195af4585da92870988a71815273c74d25a2880d1a29d96e7a44e67e52a43f52903a602080830191909152733f16de2fa11bd2e9da9ad4c4365f2072f967d0fa60408084019190915283820192909252626edb07198383015260016060840152815180830190925273cb7017382824d46cfa576e8abe3d567ea0c046f082526f2015a51cb5c1f6bcd13d00cc44a3cd70908201526080820152919050565b6040805160a08101909152600081526020810161013f610171565b8152600060208201819052604082015260600161016c604080518082019091526000808252602082015290565b905290565b60405180606001604052806003906020820280368337509192915050565b81516fffffffffffffffffffffffffffffffff191681526020808301516101008301919081840160005b60038110156101df5782516001600160a01b0316825291830191908301906001016101b9565b5050505060408301516101f7608084018260020b9052565b506060830151151560a083015260809092015180516001600160a01b031660c0830152602001516fffffffffffffffffffffffffffffffff1660e0909101529056fea2646970667358221220bf24baa7fda7f4c4d3270af9f7d36cc2a4adbdca03b2d9b39fef9b87caf1d9fe64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f76eed88 {\n address s_0;\n uint128 s_1;\n }\n\n struct S_c59e4e80 {\n bytes16 s_0;\n address[3] s_1;\n int24 s_2;\n bool s_3;\n S_f76eed88 s_4;\n }\n\n function test () public pure returns (S_c59e4e80 memory) {\n S_c59e4e80 memory r;\n {\n bytes16 r_0 = bytes16(0x985c3b4bed66c68d724558ca9d0c5a41);\n r.s_0 = r_0;\n }\n {\n address[3] memory r_1;\n {\n address r_1_0 = 0x3825D99556dFDC66E5195Af4585dA92870988a71;\n r_1[0] = r_1_0;\n }\n {\n address r_1_1 = 0xC74d25a2880d1a29D96e7A44E67E52a43f52903A;\n r_1[1] = r_1_1;\n }\n {\n address r_1_2 = 0x3F16de2fA11bD2e9da9aD4c4365f2072f967d0Fa;\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n int24 r_2 = -7265032;\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n {\n S_f76eed88 memory r_4;\n {\n address r_4_0 = 0xcB7017382824d46cFA576e8Abe3D567eA0C046F0;\n r_4.s_0 = r_4_0;\n }\n {\n uint128 r_4_1 = 42647682971370966884211330932430589296;\n r_4.s_1 = r_4_1;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x985c3b4bed66c68d724558ca9d0c5a41000000000000000000000000000000000000000000000000000000003825d99556dfdc66e5195af4585da92870988a71000000000000000000000000c74d25a2880d1a29d96e7a44e67e52a43f52903a0000000000000000000000003f16de2fa11bd2e9da9ad4c4365f2072f967d0faffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9124f80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000cb7017382824d46cfa576e8abe3d567ea0c046f0000000000000000000000000000000002015a51cb5c1f6bcd13d00cc44a3cd70" + }, + { + "name": "random-(bytes26,address[3],string,int192)[2][]", + "type": "(bytes26,address[3],string,int192)[2][]", + "value": [ + [ + [ + "0x69e4238d005717fb39a83c584a253c85708aa091593b0472c33d", + [ + "0xb1b5D23075adB417e0774021F4115865196A33eA", + "0x615B8d88F8A5E3ea8D3C0f1f7f877cF69C6B6c2D", + "0x2FDC6501Ffd5E285c3E70386Af0C59a9fbFAACa5" + ], + "Moo é🚀o M éoMéM oMMoM o🚀éééoooMé🚀🚀éMéM🚀 Mé", + "-1021907047724614775470328826193003201333357222658790453133" + ], + [ + "0x8427160f1fcac9cf085ed9a3f2ba2e2d00a29d0eecd3b5b05250", + [ + "0xD0B8Ef0f7e3E94275FF59Db6aF5F2206a673fce9", + "0x955F332634e0Ee8040F61391e2810471f27E3942", + "0xF0fA70aC82D3ce9553f080DEdfC006942A16ECb3" + ], + "Moo é🚀 o🚀oMo🚀Moé🚀🚀MM MooMé🚀🚀🚀🚀oéoé", + "-1274066705594859911105920028043902126077249796309245150864" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x69e4238d005717fb39a83c584a253c85708aa091593b0472c33d" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xb1b5D23075adB417e0774021F4115865196A33eA" + }, + { + "type": "address", + "value": "0x615B8d88F8A5E3ea8D3C0f1f7f877cF69C6B6c2D" + }, + { + "type": "address", + "value": "0x2FDC6501Ffd5E285c3E70386Af0C59a9fbFAACa5" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o M éoMéM oMMoM o🚀éééoooMé🚀🚀éMéM🚀 Mé" + }, + { + "type": "number", + "value": "-1021907047724614775470328826193003201333357222658790453133" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8427160f1fcac9cf085ed9a3f2ba2e2d00a29d0eecd3b5b05250" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xD0B8Ef0f7e3E94275FF59Db6aF5F2206a673fce9" + }, + { + "type": "address", + "value": "0x955F332634e0Ee8040F61391e2810471f27E3942" + }, + { + "type": "address", + "value": "0xF0fA70aC82D3ce9553f080DEdfC006942A16ECb3" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 o🚀oMo🚀Moé🚀🚀MM MooMé🚀🚀🚀🚀oéoé" + }, + { + "type": "number", + "value": "-1274066705594859911105920028043902126077249796309245150864" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104e1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610318565b60405180910390f35b60408051600180825281830190925260609160009190816020015b610071610251565b81526020019060019003908161006957905050905061008e610251565b61009661027e565b7f69e4238d005717fb39a83c584a253c85708aa091593b0472c33d00000000000081526100c16102ad565b73b1b5d23075adb417e0774021f4115865196a33ea815273615b8d88f8a5e3ea8d3c0f1f7f877cf69c6b6c2d602080830191909152732fdc6501ffd5e285c3e70386af0c59a9fbfaaca560408084019190915283820192909252815160808101909252604380835260009291610427908301396040830152507729ad35181a66ba3c5a460378bed5e552e088d06066a0ef8c196060820152815261016361027e565b7f8427160f1fcac9cf085ed9a3f2ba2e2d00a29d0eecd3b5b05250000000000000815261018e6102ad565b73d0b8ef0f7e3e94275ff59db6af5f2206a673fce9815273955f332634e0ee8040f61391e2810471f27e394260208083019190915273f0fa70ac82d3ce9553f080dedfc006942a16ecb36040808401919091528382019290925281516080810190925260428083526000929161046a908301396040830152507733f5e0876dae97ad30ab764a008d24c7b81213f7a096c68f196060820152602082015281518190839060009061024057610240610410565b602090810291909101015250919050565b60405180604001604052806002905b61026861027e565b8152602001906001900390816102605790505090565b604080516080810190915260008152602081016102996102ad565b815260606020820152600060409091015290565b60405180606001604052806003906020820280368337509192915050565b6000815180845260005b818110156102f1576020818501810151868301820152016102d5565b81811115610303576000602083870101525b50601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561040257888303603f1901855281518387810160005b60028110156103ed578682038352835160c065ffffffffffff1982511684528c8201518d850160005b60038110156103a85782516001600160a01b03168252918f0191908f0190600101610382565b5050508b8201518160808601526103c1828601826102cb565b915050606082015191506103da60a085018360170b9052565b948c0194938c0193925050600101610359565b5096890196945050509086019060010161033f565b509098975050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f204d20c3a96f4dc3a94d206f4d4d6f4d206ff09f9a80c3a9c3a9c3a96f6f6f4dc3a9f09f9a80f09f9a80c3a94dc3a94df09f9a80204dc3a94d6f6f20c3a9f09f9a80206ff09f9a806f4d6ff09f9a804d6fc3a9f09f9a80f09f9a804d4d204d6f6f4dc3a9f09f9a80f09f9a80f09f9a80f09f9a806fc3a96fc3a9a2646970667358221220341ca73aedf1ba506ebec7d75163cc881713e7f2fe467d50c6729728c7e6093664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7c504d38 {\n bytes26 s_0;\n address[3] s_1;\n string s_2;\n int192 s_3;\n }\n\n function test () public pure returns (S_7c504d38[2][] memory) {\n S_7c504d38[2][] memory r = new S_7c504d38[2][](1);\n {\n S_7c504d38[2] memory r_0;\n {\n S_7c504d38 memory r_0_0;\n {\n bytes26 r_0_0_0 = bytes26(0x69e4238d005717fb39a83c584a253c85708aa091593b0472c33d);\n r_0_0.s_0 = r_0_0_0;\n }\n {\n address[3] memory r_0_0_1;\n {\n address r_0_0_1_0 = 0xb1b5D23075adB417e0774021F4115865196A33eA;\n r_0_0_1[0] = r_0_0_1_0;\n }\n {\n address r_0_0_1_1 = 0x615B8d88F8A5E3ea8D3C0f1f7f877cF69C6B6c2D;\n r_0_0_1[1] = r_0_0_1_1;\n }\n {\n address r_0_0_1_2 = 0x2FDC6501Ffd5E285c3E70386Af0C59a9fbFAACa5;\n r_0_0_1[2] = r_0_0_1_2;\n }\n r_0_0.s_1 = r_0_0_1;\n }\n {\n string memory r_0_0_2 = unicode\"Moo é🚀o M éoMéM oMMoM o🚀éééoooMé🚀🚀éMéM🚀 Mé\";\n r_0_0.s_2 = r_0_0_2;\n }\n {\n int192 r_0_0_3 = -1021907047724614775470328826193003201333357222658790453133;\n r_0_0.s_3 = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n S_7c504d38 memory r_0_1;\n {\n bytes26 r_0_1_0 = bytes26(0x8427160f1fcac9cf085ed9a3f2ba2e2d00a29d0eecd3b5b05250);\n r_0_1.s_0 = r_0_1_0;\n }\n {\n address[3] memory r_0_1_1;\n {\n address r_0_1_1_0 = 0xD0B8Ef0f7e3E94275FF59Db6aF5F2206a673fce9;\n r_0_1_1[0] = r_0_1_1_0;\n }\n {\n address r_0_1_1_1 = 0x955F332634e0Ee8040F61391e2810471f27E3942;\n r_0_1_1[1] = r_0_1_1_1;\n }\n {\n address r_0_1_1_2 = 0xF0fA70aC82D3ce9553f080DEdfC006942A16ECb3;\n r_0_1_1[2] = r_0_1_1_2;\n }\n r_0_1.s_1 = r_0_1_1;\n }\n {\n string memory r_0_1_2 = unicode\"Moo é🚀 o🚀oMo🚀Moé🚀🚀MM MooMé🚀🚀🚀🚀oéoé\";\n r_0_1.s_2 = r_0_1_2;\n }\n {\n int192 r_0_1_3 = -1274066705594859911105920028043902126077249796309245150864;\n r_0_1.s_3 = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000018069e4238d005717fb39a83c584a253c85708aa091593b0472c33d000000000000000000000000000000000000b1b5d23075adb417e0774021f4115865196a33ea000000000000000000000000615b8d88f8a5e3ea8d3c0f1f7f877cf69c6b6c2d0000000000000000000000002fdc6501ffd5e285c3e70386af0c59a9fbfaaca500000000000000000000000000000000000000000000000000000000000000c0ffffffffffffffffd652cae7e59945c3a5b9fc87412a1aad1f772f9f995f107300000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a806f204d20c3a96f4dc3a94d206f4d4d6f4d206ff09f9a80c3a9c3a9c3a96f6f6f4dc3a9f09f9a80f09f9a80c3a94dc3a94df09f9a80204dc3a900000000000000000000000000000000000000000000000000000000008427160f1fcac9cf085ed9a3f2ba2e2d00a29d0eecd3b5b05250000000000000000000000000000000000000d0b8ef0f7e3e94275ff59db6af5f2206a673fce9000000000000000000000000955f332634e0ee8040f61391e2810471f27e3942000000000000000000000000f0fa70ac82d3ce9553f080dedfc006942a16ecb300000000000000000000000000000000000000000000000000000000000000c0ffffffffffffffffcc0a1f7892516852cf5489b5ff72db3847edec085f69397000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a80206ff09f9a806f4d6ff09f9a804d6fc3a9f09f9a80f09f9a804d4d204d6f6f4dc3a9f09f9a80f09f9a80f09f9a80f09f9a806fc3a96fc3a9000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes32,uint80,(bool,bytes3,int128),uint8,bytes13)", + "type": "(bytes32,uint80,(bool,bytes3,int128),uint8,bytes13)", + "value": [ + "0xf4db03d4d6b9342bc3c16d8366d808906b19f86def6f1d94bca8ca4fcf0e6a4c", + "1124397358595071752727641", + [true, "0x86cac5", "-113034173788378755860950846655611737109"], + "211", + "0x0ff65cfd9d5b4e3e92a99a4e62" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf4db03d4d6b9342bc3c16d8366d808906b19f86def6f1d94bca8ca4fcf0e6a4c" + }, + { + "type": "number", + "value": "1124397358595071752727641" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x86cac5" + }, + { + "type": "number", + "value": "-113034173788378755860950846655611737109" + } + ] + }, + { + "type": "number", + "value": "211" + }, + { + "type": "hexstring", + "value": "0x0ff65cfd9d5b4e3e92a99a4e62" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101f8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6100386100be565b604080518251815260208084015169ffffffffffffffffffff1681830152838301518051151583850152908101516001600160e81b031916606080840191909152920151600f0b6080808301919091529183015160ff1660a082015291015172ffffffffffffffffffffffffffffffffffffff191660c082015260e00160405180910390f35b6100c6610174565b6100ce610174565b7ff4db03d4d6b9342bc3c16d8366d808906b19f86def6f1d94bca8ca4fcf0e6a4c815269ee19b3f449b16a9aec596020820152610124604080516060810182526000808252602082018190529181019190915290565b600181526286cac560e81b60208201526f5509970a7d608629961cbf1fd76b14141960408083019190915282015260d360608201526c07fb2e7eceada71f4954cd273160991b6080820152919050565b6040805160a081018252600080825260208201529081016101ae604080516060810182526000808252602082018190529181019190915290565b81526000602082018190526040909101529056fea2646970667358221220349df7b877a1b5f84a325862ad2cdeed528351e405bf097705aa209985e2c90064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9241f058 {\n bool s_0;\n bytes3 s_1;\n int128 s_2;\n }\n\n struct S_9c106a0e {\n bytes32 s_0;\n uint80 s_1;\n S_9241f058 s_2;\n uint8 s_3;\n bytes13 s_4;\n }\n\n function test () public pure returns (S_9c106a0e memory) {\n S_9c106a0e memory r;\n {\n bytes32 r_0 = bytes32(0xf4db03d4d6b9342bc3c16d8366d808906b19f86def6f1d94bca8ca4fcf0e6a4c);\n r.s_0 = r_0;\n }\n {\n uint80 r_1 = 1124397358595071752727641;\n r.s_1 = r_1;\n }\n {\n S_9241f058 memory r_2;\n {\n bool r_2_0 = true;\n r_2.s_0 = r_2_0;\n }\n {\n bytes3 r_2_1 = bytes3(0x86cac5);\n r_2.s_1 = r_2_1;\n }\n {\n int128 r_2_2 = -113034173788378755860950846655611737109;\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n uint8 r_3 = 211;\n r.s_3 = r_3;\n }\n {\n bytes13 r_4 = bytes13(0x0ff65cfd9d5b4e3e92a99a4e62);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0xf4db03d4d6b9342bc3c16d8366d808906b19f86def6f1d94bca8ca4fcf0e6a4c00000000000000000000000000000000000000000000ee19b3f449b16a9aec59000000000000000000000000000000000000000000000000000000000000000186cac50000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffaaf668f5829f79d669e340e02894ebeb00000000000000000000000000000000000000000000000000000000000000d30ff65cfd9d5b4e3e92a99a4e6200000000000000000000000000000000000000" + }, + { + "name": "random-(bytes6,(string,(string,bool,address,bool,string)))", + "type": "(bytes6,(string,(string,bool,address,bool,string)))", + "value": [ + "0x1f6c4c36a38f", + [ + "Moo é🚀ooooéoéM 🚀oéM oooé", + ["Moo é🚀é", true, "0x9D6017ff643243d10C35a1004F02bA89D8ff44E2", false, "Moo é🚀🚀"] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x1f6c4c36a38f" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooooéoéM 🚀oéM oooé" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x9D6017ff643243d10C35a1004F02bA89D8ff44E2" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀🚀" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610319806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610213565b60405180910390f35b610056610156565b61005e610156565b651f6c4c36a38f60d01b8152610072610175565b60006040518060600160405280602381526020016102c1602391398252506100cf6040518060a001604052806060815260200160001515815260200160006001600160a01b03168152602001600015158152602001606081525090565b604080518082018252600c81526b4d6f6f20c3a9f09f9a80c3a960a01b602080830191909152908352600183820152739d6017ff643243d10c35a1004f02ba89d8ff44e283830152600060608401528151808301909252600e82526c9adede418753e13f3501e13f3560971b82820152608083019190915282810191909152820152919050565b604080518082019091526000815260208101610170610175565b905290565b6040518060400160405280606081526020016101706040518060a001604052806060815260200160001515815260200160006001600160a01b03168152602001600015158152602001606081525090565b6000815180845260005b818110156101ec576020818501810151868301820152016101d0565b818111156101fe576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835265ffffffffffff60d01b845116818401528084015160408085015280516040606086015261024b60a08601826101c6565b9050828201519150605f19858203016080860152815160a0825261027260a08301826101c6565b90508383015115158483015260018060a01b0360408401511660408301526060830151151560608301526080830151935081810360808301526102b581856101c6565b97965050505050505056fe4d6f6f20c3a9f09f9a806f6f6f6fc3a96fc3a94d20f09f9a806fc3a94d206f6f6fc3a9a264697066735822122004649d352da844e6a07c88c606b528d7b114b5ea3938f64383eefd66feaf182464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_abaa67d9 {\n string s_0;\n bool s_1;\n address s_2;\n bool s_3;\n string s_4;\n }\n\n struct S_eafb422d {\n string s_0;\n S_abaa67d9 s_1;\n }\n\n struct S_a023d82d {\n bytes6 s_0;\n S_eafb422d s_1;\n }\n\n function test () public pure returns (S_a023d82d memory) {\n S_a023d82d memory r;\n {\n bytes6 r_0 = bytes6(0x1f6c4c36a38f);\n r.s_0 = r_0;\n }\n {\n S_eafb422d memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀ooooéoéM 🚀oéM oooé\";\n r_1.s_0 = r_1_0;\n }\n {\n S_abaa67d9 memory r_1_1;\n {\n string memory r_1_1_0 = unicode\"Moo é🚀é\";\n r_1_1.s_0 = r_1_1_0;\n }\n {\n bool r_1_1_1 = true;\n r_1_1.s_1 = r_1_1_1;\n }\n {\n address r_1_1_2 = 0x9D6017ff643243d10C35a1004F02bA89D8ff44E2;\n r_1_1.s_2 = r_1_1_2;\n }\n {\n bool r_1_1_3 = false;\n r_1_1.s_3 = r_1_1_3;\n }\n {\n string memory r_1_1_4 = unicode\"Moo é🚀🚀\";\n r_1_1.s_4 = r_1_1_4;\n }\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000201f6c4c36a38f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a806f6f6f6fc3a96fc3a94d20f09f9a806fc3a94d206f6f6fc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009d6017ff643243d10c35a1004f02ba89d8ff44e2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a80c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a80f09f9a80000000000000000000000000000000000000" + }, + { + "name": "random-(bytes6,uint184,bytes18[4],uint144,int24)[1]", + "type": "(bytes6,uint184,bytes18[4],uint144,int24)[1]", + "value": [ + [ + "0x938a82c9a5ab", + "17270088492792718346187344585004383680559687214840759410", + [ + "0x4b5cd33c28523068278264224eaaec2bbda0", + "0x9726774e21f63aef5b311526d12860cadc26", + "0xb4b0c223a72fc24078562d9ddcd01ffe955f", + "0x43b6b21929e943d41aa59857c61f24f11d36" + ], + "7573823839277259259465427662952716633404520", + "5721690" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x938a82c9a5ab" + }, + { + "type": "number", + "value": "17270088492792718346187344585004383680559687214840759410" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x4b5cd33c28523068278264224eaaec2bbda0" + }, + { + "type": "hexstring", + "value": "0x9726774e21f63aef5b311526d12860cadc26" + }, + { + "type": "hexstring", + "value": "0xb4b0c223a72fc24078562d9ddcd01ffe955f" + }, + { + "type": "hexstring", + "value": "0x43b6b21929e943d41aa59857c61f24f11d36" + } + ] + }, + { + "type": "number", + "value": "7573823839277259259465427662952716633404520" + }, + { + "type": "number", + "value": "5721690" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102ae806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101b4565b60405180910390f35b610056610136565b61005e610136565b610066610163565b65938a82c9a5ab60d01b815276b44ee21076883d6a61eb0e0fd4f1e1e4cc9963d8e944726020820152610097610196565b71025ae699e1429183413c1321127557615ded60751b8152714b933ba710fb1d77ad988a93689430656e1360711b602082015271b4b0c223a72fc24078562d9ddcd01ffe955f60701b6040808301919091527121db590c94f4a1ea0d52cc2be30f92788e9b60711b606080840191909152908301919091527156f177c48ecbcde3a5ff5b9ebd43293c74689082015262574e5a60808201528152919050565b60405180602001604052806001905b61014d610163565b8152602001906001900390816101455790505090565b6040805160a08101825260008082526020820152908101610182610196565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b6101008181019082846000805b60018082106101d0575061026d565b835180516001600160d01b03191686526020808201516001600160b81b03168188015260408083015190880190865b600481101561022c5781516dffffffffffffffffffffffffffff19168352918301919083019085016101ff565b505050606082015171ffffffffffffffffffffffffffffffffffff1660c088015260809091015160020b60e0870152948601949390930192506001016101c1565b50505050509291505056fea2646970667358221220ef4c35704b249e6d5b4a04d70edbfa541207c951d26068b9ee3c00476fb392b964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a506a038 {\n bytes6 s_0;\n uint184 s_1;\n bytes18[4] s_2;\n uint144 s_3;\n int24 s_4;\n }\n\n function test () public pure returns (S_a506a038[1] memory) {\n S_a506a038[1] memory r;\n {\n S_a506a038 memory r_0;\n {\n bytes6 r_0_0 = bytes6(0x938a82c9a5ab);\n r_0.s_0 = r_0_0;\n }\n {\n uint184 r_0_1 = 17270088492792718346187344585004383680559687214840759410;\n r_0.s_1 = r_0_1;\n }\n {\n bytes18[4] memory r_0_2;\n {\n bytes18 r_0_2_0 = bytes18(0x4b5cd33c28523068278264224eaaec2bbda0);\n r_0_2[0] = r_0_2_0;\n }\n {\n bytes18 r_0_2_1 = bytes18(0x9726774e21f63aef5b311526d12860cadc26);\n r_0_2[1] = r_0_2_1;\n }\n {\n bytes18 r_0_2_2 = bytes18(0xb4b0c223a72fc24078562d9ddcd01ffe955f);\n r_0_2[2] = r_0_2_2;\n }\n {\n bytes18 r_0_2_3 = bytes18(0x43b6b21929e943d41aa59857c61f24f11d36);\n r_0_2[3] = r_0_2_3;\n }\n r_0.s_2 = r_0_2;\n }\n {\n uint144 r_0_3 = 7573823839277259259465427662952716633404520;\n r_0.s_3 = r_0_3;\n }\n {\n int24 r_0_4 = 5721690;\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x938a82c9a5ab0000000000000000000000000000000000000000000000000000000000000000000000b44ee21076883d6a61eb0e0fd4f1e1e4cc9963d8e944724b5cd33c28523068278264224eaaec2bbda000000000000000000000000000009726774e21f63aef5b311526d12860cadc260000000000000000000000000000b4b0c223a72fc24078562d9ddcd01ffe955f000000000000000000000000000043b6b21929e943d41aa59857c61f24f11d360000000000000000000000000000000000000000000000000000000056f177c48ecbcde3a5ff5b9ebd43293c74680000000000000000000000000000000000000000000000000000000000574e5a" + }, + { + "name": "random-(int104,uint56[1],string,uint104[3])[3]", + "type": "(int104,uint56[1],string,uint104[3])[3]", + "value": [ + [ + "2589279836675230486275273568934", + ["34377812200731039"], + "Moo é🚀ooM🚀oo", + [ + "9813029604587526615587255616662", + "16968318955088392511890701372805", + "15402542126476461375238041356262" + ] + ], + [ + "-731180393699636484657456037431", + ["3612662620177843"], + "Moo é🚀oM éMM🚀é🚀oo", + [ + "6874896636793593592351130254953", + "542772171424139799892428682802", + "7215407990770200009178488422981" + ] + ], + [ + "-8656102279325418887790468142175", + ["66805701959560511"], + "Moo é🚀MM🚀 o 🚀🚀éM🚀o o🚀 🚀o 🚀M🚀éMMéooooéoM🚀Moo🚀 Mo M", + [ + "10289730038753838620338516719340", + "15162214780193569294131489094472", + "16367028307179440842434718879293" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2589279836675230486275273568934" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "34377812200731039" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooM🚀oo" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "9813029604587526615587255616662" + }, + { + "type": "number", + "value": "16968318955088392511890701372805" + }, + { + "type": "number", + "value": "15402542126476461375238041356262" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-731180393699636484657456037431" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3612662620177843" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oM éMM🚀é🚀oo" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "6874896636793593592351130254953" + }, + { + "type": "number", + "value": "542772171424139799892428682802" + }, + { + "type": "number", + "value": "7215407990770200009178488422981" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-8656102279325418887790468142175" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "66805701959560511" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀MM🚀 o 🚀🚀éM🚀o o🚀 🚀o 🚀M🚀éMMéooooéoM🚀Moo🚀 Mo M" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "10289730038753838620338516719340" + }, + { + "type": "number", + "value": "15162214780193569294131489094472" + }, + { + "type": "number", + "value": "16367028307179440842434718879293" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104b6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061033a565b60405180910390f35b610056610263565b61005e610263565b610066610290565b6c20ae6a14d4cf524ed9f174b2a6815261007e6102c6565b667a22702461319f815260208281019190915260408051808201825260138152724d6f6f20c3a9f09f9a806f6f4df09f9a806f6f60681b928101929092528201526100c76102e4565b6c7bdb9bd6ddeb18ac747c5a049681526cd62b98779eb0a2de826e9f4d8560208201526cc2684c3b2643978f3d624dc7e660408201526060820152815261010c610290565b6c093a923ef665ca25b8f6533e361981526101256102c6565b660cd5b2902b45b38152602082810191909152604080518082018252601d81527f4d6f6f20c3a9f09f9a806f4d20c3a94d4df09f9a80c3a9f09f9a806f6f000000928101929092528201526101786102e4565b6c56c5fd36153ebf2a50d8c5fe6981526c06d9ca9e0322e7d588965976326020808301919091526c5b123d9a041db02133bc26c245604083015260608301919091528201526101c5610290565b6c6d415ffc59113a3705a7ee145e1981526101de6102c6565b66ed576e96452d3f815260208281019190915260408051608081019091526058808252600092610429908301396040830152506102196102e4565b6c81dfe9324b503300151d98f6ec81526cbf5fc21c0ae278243bb8033b4860208201526cce94b88034c8ee73b60c224e3d6040808301919091526060830191909152820152919050565b60405180606001604052806003905b61027a610290565b8152602001906001900390816102725790505090565b60405180608001604052806000600c0b81526020016102ad6102c6565b8152602001606081526020016102c16102e4565b905290565b60405180602001604052806001906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b8060005b60038110156103345781516cffffffffffffffffffffffffff16845260209384019390910190600101610306565b50505050565b60208082526000906080830183820185845b600381101561041c57601f1980888603018452825160c08151600c0b87528782015188880160005b600181101561039a57825166ffffffffffffff168252918a0191908a0190600101610374565b50505060408083015182828a01528051915081838a0152600092505b818310156103d4578083018a015189840160e00152918901916103b6565b50808211156103e757600060e0828a0101525b6060928301519291506103fc88830184610302565b601f019092169590950160e001945050918401919084019060010161034c565b5091969550505050505056fe4d6f6f20c3a9f09f9a804d4df09f9a80206f20f09f9a80f09f9a80c3a94df09f9a806f206ff09f9a8020f09f9a806f20f09f9a804df09f9a80c3a94d4dc3a96f6f6f6fc3a96f4df09f9a804d6f6ff09f9a8020204d6f204da2646970667358221220c637aca75f04dbded7f882c14c6215ef62216c8092647468953b872285b37d9564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c8af67bc {\n int104 s_0;\n uint56[1] s_1;\n string s_2;\n uint104[3] s_3;\n }\n\n function test () public pure returns (S_c8af67bc[3] memory) {\n S_c8af67bc[3] memory r;\n {\n S_c8af67bc memory r_0;\n {\n int104 r_0_0 = 2589279836675230486275273568934;\n r_0.s_0 = r_0_0;\n }\n {\n uint56[1] memory r_0_1;\n {\n uint56 r_0_1_0 = 34377812200731039;\n r_0_1[0] = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀ooM🚀oo\";\n r_0.s_2 = r_0_2;\n }\n {\n uint104[3] memory r_0_3;\n {\n uint104 r_0_3_0 = 9813029604587526615587255616662;\n r_0_3[0] = r_0_3_0;\n }\n {\n uint104 r_0_3_1 = 16968318955088392511890701372805;\n r_0_3[1] = r_0_3_1;\n }\n {\n uint104 r_0_3_2 = 15402542126476461375238041356262;\n r_0_3[2] = r_0_3_2;\n }\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_c8af67bc memory r_1;\n {\n int104 r_1_0 = -731180393699636484657456037431;\n r_1.s_0 = r_1_0;\n }\n {\n uint56[1] memory r_1_1;\n {\n uint56 r_1_1_0 = 3612662620177843;\n r_1_1[0] = r_1_1_0;\n }\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀oM éMM🚀é🚀oo\";\n r_1.s_2 = r_1_2;\n }\n {\n uint104[3] memory r_1_3;\n {\n uint104 r_1_3_0 = 6874896636793593592351130254953;\n r_1_3[0] = r_1_3_0;\n }\n {\n uint104 r_1_3_1 = 542772171424139799892428682802;\n r_1_3[1] = r_1_3_1;\n }\n {\n uint104 r_1_3_2 = 7215407990770200009178488422981;\n r_1_3[2] = r_1_3_2;\n }\n r_1.s_3 = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_c8af67bc memory r_2;\n {\n int104 r_2_0 = -8656102279325418887790468142175;\n r_2.s_0 = r_2_0;\n }\n {\n uint56[1] memory r_2_1;\n {\n uint56 r_2_1_0 = 66805701959560511;\n r_2_1[0] = r_2_1_0;\n }\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀MM🚀 o 🚀🚀éM🚀o o🚀 🚀o 🚀M🚀éMMéooooéoM🚀Moo🚀 Mo M\";\n r_2.s_2 = r_2_2;\n }\n {\n uint104[3] memory r_2_3;\n {\n uint104 r_2_3_0 = 10289730038753838620338516719340;\n r_2_3[0] = r_2_3_0;\n }\n {\n uint104 r_2_3_1 = 15162214780193569294131489094472;\n r_2_3[1] = r_2_3_1;\n }\n {\n uint104 r_2_3_2 = 16367028307179440842434718879293;\n r_2_3[2] = r_2_3_2;\n }\n r_2.s_3 = r_2_3;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000020ae6a14d4cf524ed9f174b2a6000000000000000000000000000000000000000000000000007a22702461319f00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000007bdb9bd6ddeb18ac747c5a049600000000000000000000000000000000000000d62b98779eb0a2de826e9f4d8500000000000000000000000000000000000000c2684c3b2643978f3d624dc7e600000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a806f6f4df09f9a806f6f00000000000000000000000000fffffffffffffffffffffffffffffffffffffff6c56dc1099a35da4709acc1c9000000000000000000000000000000000000000000000000000cd5b2902b45b300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000056c5fd36153ebf2a50d8c5fe690000000000000000000000000000000000000006d9ca9e0322e7d58896597632000000000000000000000000000000000000005b123d9a041db02133bc26c245000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a806f4d20c3a94d4df09f9a80c3a9f09f9a806f6f000000ffffffffffffffffffffffffffffffffffffff92bea003a6eec5c8fa5811eba100000000000000000000000000000000000000000000000000ed576e96452d3f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000081dfe9324b503300151d98f6ec00000000000000000000000000000000000000bf5fc21c0ae278243bb8033b4800000000000000000000000000000000000000ce94b88034c8ee73b60c224e3d00000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a804d4df09f9a80206f20f09f9a80f09f9a80c3a94df09f9a806f206ff09f9a8020f09f9a806f20f09f9a804df09f9a80c3a94d4dc3a96f6f6f6fc3a96f4df09f9a804d6f6ff09f9a8020204d6f204d0000000000000000" + }, + { + "name": "random-(int232,(bytes6,bool),bool[2],bytes31,string)", + "type": "(int232,(bytes6,bool),bool[2],bytes31,string)", + "value": [ + "-388718591577181893126499119793698939294536183866792025030470513107803", + ["0x2586bad4be18", false], + [true, true], + "0xb87ca8954c25ffcfc1fade9152e65ff0af8496d634765614388c640ff10e1a", + "Moo é🚀🚀oooMMMoMééé🚀 ooM🚀éo🚀 oé " + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-388718591577181893126499119793698939294536183866792025030470513107803" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x2586bad4be18" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0xb87ca8954c25ffcfc1fade9152e65ff0af8496d634765614388c640ff10e1a" + }, + { + "type": "string", + "value": "Moo é🚀🚀oooMMMoMééé🚀 ooM🚀éo🚀 oé " + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102bb806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101c1565b60405180910390f35b610056610111565b61005e610111565b7ffffffff194e5729528c231154cdb935d0ab8ad11bbd89c391deb598b22e15ca581526040805180820190915260006020808301919091526504b0d75a97c360d31b82528201526100ad610156565b60018082526020808301919091526040838101929092527fb87ca8954c25ffcfc1fade9152e65ff0af8496d634765614388c640ff10e1a00606080850191909152825190810190925260348083526000929161025290830139608083015250919050565b6040805160a08101825260008082528251808401845281815260208082019290925290820152908101610142610156565b815260006020820152606060409091015290565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b8181101561019a5760208185018101518683018201520161017e565b818111156101ac576000602083870101525b50601f01601f19169290920160200192915050565b600060208083528351601c0b818401528084015165ffffffffffff60d01b815116604085015281810151151560608501525060408401516080840160005b600281101561021e5782511515825291830191908301906001016101ff565b50505050606083015160ff191660c0830152608083015160e080840152610249610100840182610174565b94935050505056fe4d6f6f20c3a9f09f9a80f09f9a806f6f6f4d4d4d6f4dc3a9c3a9c3a9f09f9a80206f6f4df09f9a80c3a96ff09f9a80206fc3a920a26469706673582212200002f1fc246bcea79aa4d574b88fb08dd8ba7fed868536f6cafe22254942c57b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2a1fc9de {\n bytes6 s_0;\n bool s_1;\n }\n\n struct S_6ee9aa29 {\n int232 s_0;\n S_2a1fc9de s_1;\n bool[2] s_2;\n bytes31 s_3;\n string s_4;\n }\n\n function test () public pure returns (S_6ee9aa29 memory) {\n S_6ee9aa29 memory r;\n {\n int232 r_0 = -388718591577181893126499119793698939294536183866792025030470513107803;\n r.s_0 = r_0;\n }\n {\n S_2a1fc9de memory r_1;\n {\n bytes6 r_1_0 = bytes6(0x2586bad4be18);\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n bool[2] memory r_2;\n {\n bool r_2_0 = true;\n r_2[0] = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2[1] = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n bytes31 r_3 = bytes31(0xb87ca8954c25ffcfc1fade9152e65ff0af8496d634765614388c640ff10e1a);\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀🚀oooMMMoMééé🚀 ooM🚀éo🚀 oé \";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020fffffff194e5729528c231154cdb935d0ab8ad11bbd89c391deb598b22e15ca52586bad4be180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001b87ca8954c25ffcfc1fade9152e65ff0af8496d634765614388c640ff10e1a0000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a80f09f9a806f6f6f4d4d4d6f4dc3a9c3a9c3a9f09f9a80206f6f4df09f9a80c3a96ff09f9a80206fc3a920000000000000000000000000" + }, + { + "name": "random-(int40[2][3],int136,string,bool,address)", + "type": "(int40[2][3],int136,string,bool,address)", + "value": [ + [ + ["313244336375", "-442147183760"], + ["302311189667", "-372650219225"], + ["-7137976940", "-177200813992"] + ], + "-43061664135280586696080821243599194567339", + "Moo é🚀éoM MM 🚀oooé🚀éM🚀éM 🚀Moé", + false, + "0x532De0a9F45F1A48A64f182328abD18E3c88f7B4" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "313244336375" + }, + { + "type": "number", + "value": "-442147183760" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "302311189667" + }, + { + "type": "number", + "value": "-372650219225" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-7137976940" + }, + { + "type": "number", + "value": "-177200813992" + } + ] + } + ] + }, + { + "type": "number", + "value": "-43061664135280586696080821243599194567339" + }, + { + "type": "string", + "value": "Moo é🚀éoM MM 🚀oooé🚀éM🚀éM 🚀Moé" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x532De0a9F45F1A48A64f182328abD18E3c88f7B4" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610322806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101fc565b60405180910390f35b61005661012f565b61005e61012f565b610066610164565b61006e610191565b6448eed140f781526466f2069c8f196020820152815261008c610191565b64466326aca381526456c3af16d8196020808301919091528201526100af610191565b6401a974e26b198152642941fdd7a719602080830191909152604080840192909252918352707e8bfed7614a3a7ce12d949025684e32aa198383015280516060810190915260338082526000926102ba908301396040830152506000606082015273532de0a9f45f1a48a64f182328abd18e3c88f7b46080820152919050565b6040518060a00160405280610142610164565b8152600060208201819052606060408301819052820181905260809091015290565b60405180606001604052806003905b61017b610191565b8152602001906001900390816101735790505090565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b818110156101d5576020818501810151868301820152016101b9565b818111156101e7576000602083870101525b50601f01601f19169290920160200192915050565b602080825282516000919082848301815b600381101561025157835182845b600281101561023b57825160040b8252918701919087019060010161021b565b505050928401926040919091019060010161020d565b5050505083015161026760e084018260100b9052565b506040830151610140806101008501526102856101608501836101af565b9150606085015161029b61012086018215159052565b5060808501516001600160a01b03811685830152509094935050505056fe4d6f6f20c3a9f09f9a80c3a96f4d204d4d2020f09f9a806f6f6fc3a9f09f9a80c3a94df09f9a80c3a94d20f09f9a804d6fc3a9a26469706673582212201f98d60e216e2958c5f8e29e91f38c2cc41fb7b6dbbebea439150161d160146564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_cc298b8a {\n int40[2][3] s_0;\n int136 s_1;\n string s_2;\n bool s_3;\n address s_4;\n }\n\n function test () public pure returns (S_cc298b8a memory) {\n S_cc298b8a memory r;\n {\n int40[2][3] memory r_0;\n {\n int40[2] memory r_0_0;\n {\n int40 r_0_0_0 = 313244336375;\n r_0_0[0] = r_0_0_0;\n }\n {\n int40 r_0_0_1 = -442147183760;\n r_0_0[1] = r_0_0_1;\n }\n r_0[0] = r_0_0;\n }\n {\n int40[2] memory r_0_1;\n {\n int40 r_0_1_0 = 302311189667;\n r_0_1[0] = r_0_1_0;\n }\n {\n int40 r_0_1_1 = -372650219225;\n r_0_1[1] = r_0_1_1;\n }\n r_0[1] = r_0_1;\n }\n {\n int40[2] memory r_0_2;\n {\n int40 r_0_2_0 = -7137976940;\n r_0_2[0] = r_0_2_0;\n }\n {\n int40 r_0_2_1 = -177200813992;\n r_0_2[1] = r_0_2_1;\n }\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n int136 r_1 = -43061664135280586696080821243599194567339;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀éoM MM 🚀oooé🚀éM🚀éM 🚀Moé\";\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n {\n address r_4 = 0x532De0a9F45F1A48A64f182328abD18E3c88f7B4;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000048eed140f7ffffffffffffffffffffffffffffffffffffffffffffffffffffff990df96370000000000000000000000000000000000000000000000000000000466326aca3ffffffffffffffffffffffffffffffffffffffffffffffffffffffa93c50e927fffffffffffffffffffffffffffffffffffffffffffffffffffffffe568b1d94ffffffffffffffffffffffffffffffffffffffffffffffffffffffd6be022858ffffffffffffffffffffffffffffff817401289eb5c5831ed26b6fda97b1cd5500000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000532de0a9f45f1a48a64f182328abd18e3c88f7b400000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a80c3a96f4d204d4d2020f09f9a806f6f6fc3a9f09f9a80c3a94df09f9a80c3a94d20f09f9a804d6fc3a900000000000000000000000000" + }, + { + "name": "random-(string,bytes13,string,(bytes24,bool,string),address)", + "type": "(string,bytes13,string,(bytes24,bool,string),address)", + "value": [ + "Moo é🚀", + "0x2623f67ec3491d5812ddc5b89e", + "Moo é🚀ééoM o o🚀 o🚀oMoM M", + [ + "0xa9574fb5c55aea146b6747b898ef78c091c9aec2909082b3", + true, + "Moo é🚀o ooéé🚀ooéM 🚀oo" + ], + "0xFD0dE298fe537647Be121A319E440356E69Bb349" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "hexstring", + "value": "0x2623f67ec3491d5812ddc5b89e" + }, + { + "type": "string", + "value": "Moo é🚀ééoM o o🚀 o🚀oMoM M" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa9574fb5c55aea146b6747b898ef78c091c9aec2909082b3" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀o ooéé🚀ooéM 🚀oo" + } + ] + }, + { + "type": "address", + "value": "0xFD0dE298fe537647Be121A319E440356E69Bb349" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610342806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610200565b60405180910390f35b61005661013f565b61005e61013f565b604080518082018252600a8152689adede418753e13f3560b71b6020808301919091529083526c1311fb3f61a48eac096ee2dc4f60991b838201528151606081019092526024808352600092916102e9908301396040838101919091528051606080820183528183018190527fa9574fb5c55aea146b6747b898ef78c091c9aec2909082b3000000000000000082526001602080840191909152835191820190935260238082529193506000929091906102c690830139604083015250606082015273fd0de298fe537647be121a319e440356e69bb3496080820152919050565b6040518060a0016040528060608152602001600072ffffffffffffffffffffffffffffffffffffff19168152602001606081526020016101a66040518060600160405280600067ffffffffffffffff19168152602001600015158152602001606081525090565b8152600060209091015290565b6000815180845260005b818110156101d9576020818501810151868301820152016101bd565b818111156101eb576000602083870101525b50601f01601f19169290920160200192915050565b602081526000825160a0602084015261021c60c08401826101b3565b90506cffffffffffffffffffffffffff60981b60208501511660408401526040840151601f198085840301606086015261025683836101b3565b925060608601519150808584030160808601525067ffffffffffffffff19815116825260208101511515602083015260408101519050606060408301526102a060608301826101b3565b91505060808401516102bd60a08501826001600160a01b03169052565b50939250505056fe4d6f6f20c3a9f09f9a806f206f6fc3a9c3a9f09f9a806f6fc3a94d2020f09f9a806f6f4d6f6f20c3a9f09f9a80c3a9c3a96f4d206f206ff09f9a80206ff09f9a806f4d6f4d204da26469706673582212209dcbc73f2def962de8984879cdda87c90606872411443b7842e3e56cf8e60f0264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fb2af206 {\n bytes24 s_0;\n bool s_1;\n string s_2;\n }\n\n struct S_e8110b30 {\n string s_0;\n bytes13 s_1;\n string s_2;\n S_fb2af206 s_3;\n address s_4;\n }\n\n function test () public pure returns (S_e8110b30 memory) {\n S_e8110b30 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀\";\n r.s_0 = r_0;\n }\n {\n bytes13 r_1 = bytes13(0x2623f67ec3491d5812ddc5b89e);\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀ééoM o o🚀 o🚀oMoM M\";\n r.s_2 = r_2;\n }\n {\n S_fb2af206 memory r_3;\n {\n bytes24 r_3_0 = bytes24(0xa9574fb5c55aea146b6747b898ef78c091c9aec2909082b3);\n r_3.s_0 = r_3_0;\n }\n {\n bool r_3_1 = true;\n r_3.s_1 = r_3_1;\n }\n {\n string memory r_3_2 = unicode\"Moo é🚀o ooéé🚀ooéM 🚀oo\";\n r_3.s_2 = r_3_2;\n }\n r.s_3 = r_3;\n }\n {\n address r_4 = 0xFD0dE298fe537647Be121A319E440356E69Bb349;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a02623f67ec3491d5812ddc5b89e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000fd0de298fe537647be121a319e440356e69bb349000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000244d6f6f20c3a9f09f9a80c3a9c3a96f4d206f206ff09f9a80206ff09f9a806f4d6f4d204d00000000000000000000000000000000000000000000000000000000a9574fb5c55aea146b6747b898ef78c091c9aec2909082b300000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a806f206f6fc3a9c3a9f09f9a806f6fc3a94d2020f09f9a806f6f0000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,int112,bytes19,bytes1,bool[4])[]", + "type": "(string,int112,bytes19,bytes1,bool[4])[]", + "value": [ + [ + "Moo é🚀Moo🚀 oo🚀 🚀M🚀M🚀🚀oé 🚀ééoMé🚀MéoM 🚀🚀éé🚀 é🚀oMoMo éM", + "-529008550519665022624762648309803", + "0x6ce3eac6ce9558c109fca997372a20214dd5a3", + "0x02", + [true, true, true, true] + ], + [ + "Moo é🚀éoo🚀é oo oéooo é", + "-2064952730313589115723510712138432", + "0x845064f01d6271d9e83d0f092ba7bd01a965e2", + "0x4b", + [false, false, true, true] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Moo🚀 oo🚀 🚀M🚀M🚀🚀oé 🚀ééoMé🚀MéoM 🚀🚀éé🚀 é🚀oMoMo éM" + }, + { + "type": "number", + "value": "-529008550519665022624762648309803" + }, + { + "type": "hexstring", + "value": "0x6ce3eac6ce9558c109fca997372a20214dd5a3" + }, + { + "type": "hexstring", + "value": "0x02" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoo🚀é oo oéooo é" + }, + { + "type": "number", + "value": "-2064952730313589115723510712138432" + }, + { + "type": "hexstring", + "value": "0x845064f01d6271d9e83d0f092ba7bd01a965e2" + }, + { + "type": "hexstring", + "value": "0x4b" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610439806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061025a565b60405180910390f35b604080516002808252606082810190935260009190816020015b6100706101dc565b81526020019060019003908161006857905050905061008d6101dc565b60006040518060a001604052806066815260200161037d606691398252506d1a1506d0dd596d5a2f6b9bebb02a196020820152726ce3eac6ce9558c109fca997372a20214dd5a360681b6040820152600160f91b60608201526100ee610211565b600180825260208201819052604082018190526060820152608082015281518190839060009061012057610120610366565b6020026020010181905250506101346101dc565b60006040518060600160405280602181526020016103e3602191398252506d65cf5e205a955d0464f0a8dc7abf19602082015272422832780eb138ecf41e878495d3de80d4b2f160691b6040820152604b60f81b6060820152610195610211565b6000808252602082015260016040820181905260608201819052608083019190915282518291849181106101cb576101cb610366565b602090810291909101015250919050565b6040805160a08101825260608082526000602083018190529282018390528101919091526080810161020c610211565b905290565b60405180608001604052806004906020820280368337509192915050565b8060005b60048110156102545781511515845260209384019390910190600101610233565b50505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561035757603f198a850301865282516101008151818752805180838901528592505b808310156102c7578183018c01518884016101200152918b01916102a8565b808311156102d95785610120828a0101525b8b84015192506102ed8c890184600d0b9052565b8a8401516cffffffffffffffffffffffffff1916888c01526060808501516001600160f81b03198116828b015290935091506080938401519392506103348884018561022f565b988b0198601f01601f191696909601610120019550505091870191600101610282565b50919998505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d6f6ff09f9a80206f6ff09f9a8020f09f9a804df09f9a804df09f9a80f09f9a806fc3a920f09f9a80c3a9c3a96f4dc3a9f09f9a804dc3a96f4d20f09f9a80f09f9a80c3a9c3a9f09f9a802020c3a9f09f9a806f4d6f4d6f20c3a94d4d6f6f20c3a9f09f9a80c3a96f6ff09f9a80c3a9206f6f206fc3a96f6f6f20c3a9a2646970667358221220ef38c6dd6d6a6c65e316af558d9b337852e10b86a0876f2f247bbffdd0dcaaae64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0fcf2e63 {\n string s_0;\n int112 s_1;\n bytes19 s_2;\n bytes1 s_3;\n bool[4] s_4;\n }\n\n function test () public pure returns (S_0fcf2e63[] memory) {\n S_0fcf2e63[] memory r = new S_0fcf2e63[](2);\n {\n S_0fcf2e63 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀Moo🚀 oo🚀 🚀M🚀M🚀🚀oé 🚀ééoMé🚀MéoM 🚀🚀éé🚀 é🚀oMoMo éM\";\n r_0.s_0 = r_0_0;\n }\n {\n int112 r_0_1 = -529008550519665022624762648309803;\n r_0.s_1 = r_0_1;\n }\n {\n bytes19 r_0_2 = bytes19(0x6ce3eac6ce9558c109fca997372a20214dd5a3);\n r_0.s_2 = r_0_2;\n }\n {\n bytes1 r_0_3 = bytes1(0x02);\n r_0.s_3 = r_0_3;\n }\n {\n bool[4] memory r_0_4;\n {\n bool r_0_4_0 = true;\n r_0_4[0] = r_0_4_0;\n }\n {\n bool r_0_4_1 = true;\n r_0_4[1] = r_0_4_1;\n }\n {\n bool r_0_4_2 = true;\n r_0_4[2] = r_0_4_2;\n }\n {\n bool r_0_4_3 = true;\n r_0_4[3] = r_0_4_3;\n }\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_0fcf2e63 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀éoo🚀é oo oéooo é\";\n r_1.s_0 = r_1_0;\n }\n {\n int112 r_1_1 = -2064952730313589115723510712138432;\n r_1.s_1 = r_1_1;\n }\n {\n bytes19 r_1_2 = bytes19(0x845064f01d6271d9e83d0f092ba7bd01a965e2);\n r_1.s_2 = r_1_2;\n }\n {\n bytes1 r_1_3 = bytes1(0x4b);\n r_1.s_3 = r_1_3;\n }\n {\n bool[4] memory r_1_4;\n {\n bool r_1_4_0 = false;\n r_1_4[0] = r_1_4_0;\n }\n {\n bool r_1_4_1 = false;\n r_1_4[1] = r_1_4_1;\n }\n {\n bool r_1_4_2 = true;\n r_1_4[2] = r_1_4_2;\n }\n {\n bool r_1_4_3 = true;\n r_1_4[3] = r_1_4_3;\n }\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000100ffffffffffffffffffffffffffffffffffffe5eaf92f22a692a5d09464144fd56ce3eac6ce9558c109fca997372a20214dd5a3000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000664d6f6f20c3a9f09f9a804d6f6ff09f9a80206f6ff09f9a8020f09f9a804df09f9a804df09f9a80f09f9a806fc3a920f09f9a80c3a9c3a96f4dc3a9f09f9a804dc3a96f4d20f09f9a80f09f9a80c3a9c3a9f09f9a802020c3a9f09f9a806f4d6f4d6f20c3a94d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100ffffffffffffffffffffffffffffffffffff9a30a1dfa56aa2fb9b0f57238540845064f01d6271d9e83d0f092ba7bd01a965e2000000000000000000000000004b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a80c3a96f6ff09f9a80c3a9206f6f206fc3a96f6f6f20c3a900000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,string,uint96,bytes30[2],((string,int256)))", + "type": "(string,string,uint96,bytes30[2],((string,int256)))", + "value": [ + "Moo é🚀oM🚀ooé🚀 oo MoM🚀ooo o M o🚀🚀oéM🚀🚀ooooMoooéé MM🚀oé🚀M MMo", + "Moo é🚀", + "9912946544265705875702982721", + [ + "0x035a9eb2fe19f4f2aed068308447f529273972ff4ea36570329b76bd3607", + "0x73e40bafe6e1d5cee98cafe1d27624153d2d5643f892f87499afad3061f5" + ], + [ + [ + "Moo é🚀🚀ooooo🚀 MéMM🚀éM🚀é🚀é", + "38287460701774510094563660343528723795651984025351312338329046862811635586873" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM🚀ooé🚀 oo MoM🚀ooo o M o🚀🚀oéM🚀🚀ooooMoooéé MM🚀oé🚀M MMo" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "number", + "value": "9912946544265705875702982721" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x035a9eb2fe19f4f2aed068308447f529273972ff4ea36570329b76bd3607" + }, + { + "type": "hexstring", + "value": "0x73e40bafe6e1d5cee98cafe1d27624153d2d5643f892f87499afad3061f5" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀ooooo🚀 MéMM🚀éM🚀é🚀é" + }, + { + "type": "number", + "value": "38287460701774510094563660343528723795651984025351312338329046862811635586873" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103f8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610286565b60405180910390f35b610056610176565b61005e610176565b60006040518060a001604052806061815260200161033260619139825250604080518082018252600a8152689adede418753e13f3560b71b6020808301919091528301526b2007cc14f386edbc27c2a841908201526100bb6101be565b7f035a9eb2fe19f4f2aed068308447f529273972ff4ea36570329b76bd3607000081527f73e40bafe6e1d5cee98cafe1d27624153d2d5643f892f87499afad3061f50000602082015260608201526101116101dc565b6040805180820190915260608152600060208201526000604051806060016040528060308152602001610393603091398252507f54a5ef4f4ad0dca8ec91f4fb7aa9fcf5afffd377a8b1732e7804823b377b1739602082015281526080820152919050565b6040518060a00160405280606081526020016060815260200160006bffffffffffffffffffffffff1681526020016101ac6101be565b81526020016101b96101dc565b905290565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806101b9604051806040016040528060608152602001600081525090565b6000815180845260005b8181101561022a5760208185018101518683018201520161020e565b8181111561023c576000602083870101525b50601f01601f19169290920160200192915050565b600081516020845280516040602086015261026f6060860182610204565b905060208201516040860152809250505092915050565b60006020808352835160c0828501526102a260e0850182610204565b905081850151601f19808684030160408701526102bf8383610204565b92506bffffffffffffffffffffffff6040880151166060870152606087015191506080860160005b600281101561030957835161ffff1916825292850192908501906001016102e7565b505060808701519350808684030160c087015250506103288183610251565b9594505050505056fe4d6f6f20c3a9f09f9a806f4df09f9a806f6fc3a9f09f9a80206f6f204d6f4df09f9a806f6f6f206f204d20206ff09f9a80f09f9a806fc3a94df09f9a80f09f9a806f6f6f6f4d6f6f6fc3a9c3a920204d4df09f9a806fc3a9f09f9a804d204d4d6f4d6f6f20c3a9f09f9a80f09f9a806f6f6f6f6ff09f9a80204dc3a94d4df09f9a80c3a94df09f9a80c3a9f09f9a80c3a9a26469706673582212200953ab1fc34d65e1c9349c416c6c65af4877b4da376747edb1594b95ab771f9164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9b2d018b {\n string s_0;\n int256 s_1;\n }\n\n struct S_6e5cb10c {\n S_9b2d018b s_0;\n }\n\n struct S_76cbb50b {\n string s_0;\n string s_1;\n uint96 s_2;\n bytes30[2] s_3;\n S_6e5cb10c s_4;\n }\n\n function test () public pure returns (S_76cbb50b memory) {\n S_76cbb50b memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oM🚀ooé🚀 oo MoM🚀ooo o M o🚀🚀oéM🚀🚀ooooMoooéé MM🚀oé🚀M MMo\";\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r.s_1 = r_1;\n }\n {\n uint96 r_2 = 9912946544265705875702982721;\n r.s_2 = r_2;\n }\n {\n bytes30[2] memory r_3;\n {\n bytes30 r_3_0 = bytes30(0x035a9eb2fe19f4f2aed068308447f529273972ff4ea36570329b76bd3607);\n r_3[0] = r_3_0;\n }\n {\n bytes30 r_3_1 = bytes30(0x73e40bafe6e1d5cee98cafe1d27624153d2d5643f892f87499afad3061f5);\n r_3[1] = r_3_1;\n }\n r.s_3 = r_3;\n }\n {\n S_6e5cb10c memory r_4;\n {\n S_9b2d018b memory r_4_0;\n {\n string memory r_4_0_0 = unicode\"Moo é🚀🚀ooooo🚀 MéMM🚀éM🚀é🚀é\";\n r_4_0.s_0 = r_4_0_0;\n }\n {\n int256 r_4_0_1 = 38287460701774510094563660343528723795651984025351312338329046862811635586873;\n r_4_0.s_1 = r_4_0_1;\n }\n r_4.s_0 = r_4_0;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000002007cc14f386edbc27c2a841035a9eb2fe19f4f2aed068308447f529273972ff4ea36570329b76bd3607000073e40bafe6e1d5cee98cafe1d27624153d2d5643f892f87499afad3061f5000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a806f4df09f9a806f6fc3a9f09f9a80206f6f204d6f4df09f9a806f6f6f206f204d20206ff09f9a80f09f9a806fc3a94df09f9a80f09f9a806f6f6f6f4d6f6f6fc3a9c3a920204d4df09f9a806fc3a9f09f9a804d204d4d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004054a5ef4f4ad0dca8ec91f4fb7aa9fcf5afffd377a8b1732e7804823b377b173900000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a80f09f9a806f6f6f6f6ff09f9a80204dc3a94d4df09f9a80c3a94df09f9a80c3a9f09f9a80c3a900000000000000000000000000000000" + }, + { + "name": "random-(string,uint200,bytes29,(bool[4],int32[3]))", + "type": "(string,uint200,bytes29,(bool[4],int32[3]))", + "value": [ + "Moo é🚀o 🚀M ooé🚀🚀éoooMooéMé🚀oo🚀 oo éééMéé🚀éoéM é", + "210401685285126508950366606020216005780808848621337723208274", + "0xc78d03b2e3644dfedb5920f2e65f6dc7033d750aa615228887dbd4af22", + [ + [false, true, true, true], + ["-722924620", "1766681642", "-165743615"] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o 🚀M ooé🚀🚀éoooMooéMé🚀oo🚀 oo éééMéé🚀éoéM é" + }, + { + "type": "number", + "value": "210401685285126508950366606020216005780808848621337723208274" + }, + { + "type": "hexstring", + "value": "0xc78d03b2e3644dfedb5920f2e65f6dc7033d750aa615228887dbd4af22" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-722924620" + }, + { + "type": "number", + "value": "1766681642" + }, + { + "type": "number", + "value": "-165743615" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610345806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061021e565b60405180910390f35b610056610122565b61005e610122565b60006040518060800160405280605281526020016102be60529139825250782184d8175fbf279f15c60a2aee1742200b044fea67cfef025260208201527fc78d03b2e3644dfedb5920f2e65f6dc7033d750aa615228887dbd4af2200000060408201526100c961015e565b6100d161017e565b6000815260016020820181905260408201819052606082015281526100f461019c565b632b16f44b19815263694d6c2a6020808301919091526309e10bfe1960408301528201526060820152919050565b60405180608001604052806060815260200160006001600160c81b03168152602001600062ffffff1916815260200161015961015e565b905290565b604051806040016040528061017161017e565b815260200161015961019c565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b80518260005b60048110156101e157825115158252602092830192909101906001016101c0565b5050506020808201516080840160005b60038082106102005750610216565b8351900b825291830191908301906001016101f1565b505050505050565b6000602080835283516101408285015280518061016086015260005b81811015610257578281018401518682016101800152830161023a565b8181111561026a57600061018083880101525b50918501516001600160c81b038116604086015291604086015162ffffff19811660608701529250606086015192506102a660808601846101ba565b601f01601f1916939093016101800194935050505056fe4d6f6f20c3a9f09f9a806f2020f09f9a804d206f6fc3a9f09f9a80f09f9a80c3a96f6f6f4d6f6fc3a94dc3a9f09f9a806f6ff09f9a80206f6f20c3a9c3a9c3a94dc3a9c3a9f09f9a80c3a96fc3a94d20c3a9a2646970667358221220011eaacf61f09824fa885ae93c11bbe7266c3b23607288f9d5f225844d53c09c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0a28a628 {\n bool[4] s_0;\n int32[3] s_1;\n }\n\n struct S_71df7a37 {\n string s_0;\n uint200 s_1;\n bytes29 s_2;\n S_0a28a628 s_3;\n }\n\n function test () public pure returns (S_71df7a37 memory) {\n S_71df7a37 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀o 🚀M ooé🚀🚀éoooMooéMé🚀oo🚀 oo éééMéé🚀éoéM é\";\n r.s_0 = r_0;\n }\n {\n uint200 r_1 = 210401685285126508950366606020216005780808848621337723208274;\n r.s_1 = r_1;\n }\n {\n bytes29 r_2 = bytes29(0xc78d03b2e3644dfedb5920f2e65f6dc7033d750aa615228887dbd4af22);\n r.s_2 = r_2;\n }\n {\n S_0a28a628 memory r_3;\n {\n bool[4] memory r_3_0;\n {\n bool r_3_0_0 = false;\n r_3_0[0] = r_3_0_0;\n }\n {\n bool r_3_0_1 = true;\n r_3_0[1] = r_3_0_1;\n }\n {\n bool r_3_0_2 = true;\n r_3_0[2] = r_3_0_2;\n }\n {\n bool r_3_0_3 = true;\n r_3_0[3] = r_3_0_3;\n }\n r_3.s_0 = r_3_0;\n }\n {\n int32[3] memory r_3_1;\n {\n int32 r_3_1_0 = -722924620;\n r_3_1[0] = r_3_1_0;\n }\n {\n int32 r_3_1_1 = 1766681642;\n r_3_1[1] = r_3_1_1;\n }\n {\n int32 r_3_1_2 = -165743615;\n r_3_1[2] = r_3_1_2;\n }\n r_3.s_1 = r_3_1;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000140000000000000002184d8175fbf279f15c60a2aee1742200b044fea67cfef0252c78d03b2e3644dfedb5920f2e65f6dc7033d750aa615228887dbd4af220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4e90bb400000000000000000000000000000000000000000000000000000000694d6c2afffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ef40100000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a806f2020f09f9a804d206f6fc3a9f09f9a80f09f9a80c3a96f6f6f4d6f6fc3a94dc3a9f09f9a806f6ff09f9a80206f6f20c3a9c3a9c3a94dc3a9c3a9f09f9a80c3a96fc3a94d20c3a90000000000000000000000000000" + }, + { + "name": "random-(string[2],address[2],string,string)[]", + "type": "(string[2],address[2],string,string)[]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061029d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610182565b60405180910390f35b604080516000808252602082019092526060919081610083565b61007061008a565b8152602001906001900390816100685790505b5092915050565b604051806080016040528061009d6100be565b81526020016100aa6100e5565b815260200160608152602001606081525090565b60405180604001604052806002905b60608152602001906001900390816100cd5790505090565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b818110156101295760208185018101518683018201520161010d565b8181111561013b576000602083870101525b50601f01601f19169290920160200192915050565b8060005b600281101561017c5781516001600160a01b0316845260209384019390910190600101610154565b50505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561025857898403603f190186528251805160a080875286019060e0870190855b60028110156101fd57609f198984030184526101eb838351610103565b938d01939250908c01906001016101ce565b50508a83015191506102118b880183610150565b89830151915060608782038189015261022a8284610103565b930151878403608089015292915061024490508183610103565b978a019795505050918701916001016101aa565b5091999850505050505050505056fea2646970667358221220f926a24a4995a2a923fb1734524302b9e03e7636030c2972fd6735de5ba2500664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_382a40a6 {\n string[2] s_0;\n address[2] s_1;\n string s_2;\n string s_3;\n }\n\n function test () public pure returns (S_382a40a6[] memory) {\n S_382a40a6[] memory r = new S_382a40a6[](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(uint104,address[3],address[1],uint208,address)", + "type": "(uint104,address[3],address[1],uint208,address)", + "value": [ + "10149042650981933076777309965975", + [ + "0x9bd09eCDF161EDDd7077559DD354d8Eb7153524A", + "0x37804F3B4194b34859167d18cE91A3364e6a9252", + "0x1AB13436304bA1F211BcF67aa26C0E6DB9e5827f" + ], + ["0xffbD90aEDE83E28D747e37AE6c070E834364fC38"], + "35062305038665610026834406591896702568625265675902613988727584", + "0x2e76f54B21c8692C77237202012656c88722E48d" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "10149042650981933076777309965975" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x9bd09eCDF161EDDd7077559DD354d8Eb7153524A" + }, + { + "type": "address", + "value": "0x37804F3B4194b34859167d18cE91A3364e6a9252" + }, + { + "type": "address", + "value": "0x1AB13436304bA1F211BcF67aa26C0E6DB9e5827f" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xffbD90aEDE83E28D747e37AE6c070E834364fC38" + } + ] + }, + { + "type": "number", + "value": "35062305038665610026834406591896702568625265675902613988727584" + }, + { + "type": "address", + "value": "0x2e76f54B21c8692C77237202012656c88722E48d" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102a6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101e3565b60405180910390f35b61005661012b565b61005e61012b565b6c801953511e21fbd8d04a2e0e978152610076610175565b739bd09ecdf161eddd7077559dd354d8eb7153524a81527337804f3b4194b34859167d18ce91a3364e6a9252602080830191909152731ab13436304ba1f211bcf67aa26c0e6db9e5827f60408301528201526100d0610193565b73ffbd90aede83e28d747e37ae6c070e834364fc38815260408201527915d1bf5929d54de5350007ec5db913882671c1d5587cdcb25b206060820152732e76f54b21c8692c77237202012656c88722e48d6080820152919050565b6040518060a0016040528060006cffffffffffffffffffffffffff168152602001610154610175565b8152602001610161610193565b815260006020820181905260409091015290565b60405180606001604052806003906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b8060005b60018110156101dd5781516001600160a01b03168452602093840193909101906001016101b5565b50505050565b81516cffffffffffffffffffffffffff16815260208083015160e08301919081840160005b600381101561022e5782516001600160a01b031682529183019190830190600101610208565b50505050604083015161024460808401826101b1565b5060608301516001600160d01b031660a08301526080909201516001600160a01b031660c0909101529056fea2646970667358221220f684d27447bc4d53f67308712c84d6071f222112f28d54685b11027afc09598664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1c1ed6e2 {\n uint104 s_0;\n address[3] s_1;\n address[1] s_2;\n uint208 s_3;\n address s_4;\n }\n\n function test () public pure returns (S_1c1ed6e2 memory) {\n S_1c1ed6e2 memory r;\n {\n uint104 r_0 = 10149042650981933076777309965975;\n r.s_0 = r_0;\n }\n {\n address[3] memory r_1;\n {\n address r_1_0 = 0x9bd09eCDF161EDDd7077559DD354d8Eb7153524A;\n r_1[0] = r_1_0;\n }\n {\n address r_1_1 = 0x37804F3B4194b34859167d18cE91A3364e6a9252;\n r_1[1] = r_1_1;\n }\n {\n address r_1_2 = 0x1AB13436304bA1F211BcF67aa26C0E6DB9e5827f;\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n address[1] memory r_2;\n {\n address r_2_0 = 0xffbD90aEDE83E28D747e37AE6c070E834364fC38;\n r_2[0] = r_2_0;\n }\n r.s_2 = r_2;\n }\n {\n uint208 r_3 = 35062305038665610026834406591896702568625265675902613988727584;\n r.s_3 = r_3;\n }\n {\n address r_4 = 0x2e76f54B21c8692C77237202012656c88722E48d;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000801953511e21fbd8d04a2e0e970000000000000000000000009bd09ecdf161eddd7077559dd354d8eb7153524a00000000000000000000000037804f3b4194b34859167d18ce91a3364e6a92520000000000000000000000001ab13436304ba1f211bcf67aa26c0e6db9e5827f000000000000000000000000ffbd90aede83e28d747e37ae6c070e834364fc3800000000000015d1bf5929d54de5350007ec5db913882671c1d5587cdcb25b200000000000000000000000002e76f54b21c8692c77237202012656c88722e48d" + }, + { + "name": "random-(uint112,bytes20,((string[3])[]),address,string)", + "type": "(uint112,bytes20,((string[3])[]),address,string)", + "value": [ + "150545402797194471280812696349010", + "0xd1296ce4aaae6f47b69fbce7537c21b69dc134d3", + [ + [ + [ + [ + "Moo é🚀ooo🚀oé", + "Moo é🚀oM🚀M ooé oéo🚀MoMMé🚀🚀M🚀 MéMéoé🚀🚀éoMMM🚀 Mé ", + "Moo é🚀oM o🚀🚀M🚀ooMMé oéoo🚀o o" + ] + ], + [["Moo é🚀🚀M", "Moo é🚀oo 🚀o", "Moo é🚀oM o"]], + [ + [ + "Moo é🚀é🚀", + "Moo é🚀🚀🚀🚀 🚀o oééooo 🚀éoéé o oM 🚀o é", + "Moo é🚀 o 🚀 o🚀 ooéMoéo🚀oooo🚀éé🚀 oo " + ] + ] + ] + ], + "0x4a9A1F53de057578C1A32c3252358372F4c1A05C", + "Moo é🚀ooooéMooéoéé ooo MMo 🚀o🚀oooé" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "150545402797194471280812696349010" + }, + { + "type": "hexstring", + "value": "0xd1296ce4aaae6f47b69fbce7537c21b69dc134d3" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooo🚀oé" + }, + { + "type": "string", + "value": "Moo é🚀oM🚀M ooé oéo🚀MoMMé🚀🚀M🚀 MéMéoé🚀🚀éoMMM🚀 Mé " + }, + { + "type": "string", + "value": "Moo é🚀oM o🚀🚀M🚀ooMMé oéoo🚀o o" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀M" + }, + { + "type": "string", + "value": "Moo é🚀oo 🚀o" + }, + { + "type": "string", + "value": "Moo é🚀oM o" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀🚀 🚀o oééooo 🚀éoéé o oM 🚀o é" + }, + { + "type": "string", + "value": "Moo é🚀 o 🚀 o🚀 ooéMoéo🚀oooo🚀éé🚀 oo " + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0x4a9A1F53de057578C1A32c3252358372F4c1A05C" + }, + { + "type": "string", + "value": "Moo é🚀ooooéMooéoéé ooo MMo 🚀o🚀oooé" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610698806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061040c565b60405180910390f35b6040805160a08101825260008082526020808301829052835190810184526060808252938301528282015260808101919091526040805160a08101825260008082526020808301829052835190810184526060808252938301528282015260808101919091526d076c266e80b92dd8fea422212952815273d1296ce4aaae6f47b69fbce7537c21b69dc134d360601b602080830191909152604080519182018152606082528051600380825260808201909252600091816020015b610111610380565b81526020019060019003908161010957905050905061012e610380565b610136610398565b60408051808201825260148152734d6f6f20c3a9f09f9a806f6f6ff09f9a806fc3a960601b6020808301919091529083528151608081019092526054808352600092916105639083013990508082600160200201819052505060006040518060600160405280602e8152602001610535602e913960408301525081528151819083906000906101c7576101c761051e565b6020026020010181905250506101db610380565b6101e3610398565b604080518082018252600f81526e4d6f6f20c3a9f09f9a80f09f9a804d60881b6020808301919091529083528151808301835260128152714d6f6f20c3a9f09f9a806f6f20f09f9a806f60701b818301528382015281518083018352600e81526d4d6f6f20c3a9f09f9a806f4d206f60901b9181019190915290820152815281518190839060019081106102795761027961051e565b60200260200101819052505061028d610380565b610295610398565b604080518082018252601081526e9adede418753e13f35018753e13f3560871b6020808301919091529083528151608081019092526042808352600092916105e890830139905080826001602002018190525050600060405180606001604052806039815260200161062a60399139604083015250815281518190839060029081106103235761032361051e565b60209081029190910181019190915291835250604080840192909252734a9a1f53de057578c1a32c3252358372f4c1a05c60608085019190915282519081019092526031808352600092916105b790830139608083015250919050565b6040518060200160405280610393610398565b905290565b60405180606001604052806003905b60608152602001906001900390816103a75790505090565b6000815180845260005b818110156103e5576020818501810151868301820152016103c9565b818111156103f7576000602083870101525b50601f01601f19169290920160200192915050565b602080825282516dffffffffffffffffffffffffffff1682820152828101516bffffffffffffffffffffffff191660408084019190915283015160a060608401525160c08301829052805160e0840181905260009291820190610100600582901b86018101919086019085805b828110156104dd5788850360ff1901845285515187865260808601888701845b60038110156104c857601f198984030182526104b68385516103bf565b938b01939250908a0190600101610499565b50509688019695505092860192600101610479565b5050505060608601516001600160a01b038116608087015292506080860151858203601f190160a0870152925061051481846103bf565b9695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f4d206ff09f9a80f09f9a804df09f9a806f6f4d4dc3a9206fc3a96f6ff09f9a806f206f4d6f6f20c3a9f09f9a806f4df09f9a804d206f6fc3a920206fc3a96ff09f9a804d6f4d4dc3a9f09f9a80f09f9a804df09f9a80204dc3a94dc3a96fc3a9f09f9a80f09f9a80c3a96f4d4d4df09f9a80204dc3a9204d6f6f20c3a9f09f9a806f6f6f6fc3a94d6f6fc3a96fc3a9c3a9206f6f6f204d4d6f20f09f9a806ff09f9a806f6f6fc3a94d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a802020f09f9a806f2020206fc3a9c3a96f6f6f20f09f9a80c3a96fc3a9c3a9206f206f4d20f09f9a806f20c3a94d6f6f20c3a9f09f9a80206f20f09f9a80206ff09f9a80206f6fc3a94d6fc3a96ff09f9a806f6f6f6ff09f9a80c3a9c3a9f09f9a80206f6f20a264697066735822122015020706c628110d36357ebbec1e71ca3d8738b8f68d0f167517322340aa9cc964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e9182f36 {\n string[3] s_0;\n }\n\n struct S_668321bc {\n S_e9182f36[] s_0;\n }\n\n struct S_499e6899 {\n uint112 s_0;\n bytes20 s_1;\n S_668321bc s_2;\n address s_3;\n string s_4;\n }\n\n function test () public pure returns (S_499e6899 memory) {\n S_499e6899 memory r;\n {\n uint112 r_0 = 150545402797194471280812696349010;\n r.s_0 = r_0;\n }\n {\n bytes20 r_1 = bytes20(0xd1296CE4aAAE6F47b69fBce7537c21b69dc134D3);\n r.s_1 = r_1;\n }\n {\n S_668321bc memory r_2;\n {\n S_e9182f36[] memory r_2_0 = new S_e9182f36[](3);\n {\n S_e9182f36 memory r_2_0_0;\n {\n string[3] memory r_2_0_0_0;\n {\n string memory r_2_0_0_0_0 = unicode\"Moo é🚀ooo🚀oé\";\n r_2_0_0_0[0] = r_2_0_0_0_0;\n }\n {\n string memory r_2_0_0_0_1 = unicode\"Moo é🚀oM🚀M ooé oéo🚀MoMMé🚀🚀M🚀 MéMéoé🚀🚀éoMMM🚀 Mé \";\n r_2_0_0_0[1] = r_2_0_0_0_1;\n }\n {\n string memory r_2_0_0_0_2 = unicode\"Moo é🚀oM o🚀🚀M🚀ooMMé oéoo🚀o o\";\n r_2_0_0_0[2] = r_2_0_0_0_2;\n }\n r_2_0_0.s_0 = r_2_0_0_0;\n }\n r_2_0[0] = r_2_0_0;\n }\n {\n S_e9182f36 memory r_2_0_1;\n {\n string[3] memory r_2_0_1_0;\n {\n string memory r_2_0_1_0_0 = unicode\"Moo é🚀🚀M\";\n r_2_0_1_0[0] = r_2_0_1_0_0;\n }\n {\n string memory r_2_0_1_0_1 = unicode\"Moo é🚀oo 🚀o\";\n r_2_0_1_0[1] = r_2_0_1_0_1;\n }\n {\n string memory r_2_0_1_0_2 = unicode\"Moo é🚀oM o\";\n r_2_0_1_0[2] = r_2_0_1_0_2;\n }\n r_2_0_1.s_0 = r_2_0_1_0;\n }\n r_2_0[1] = r_2_0_1;\n }\n {\n S_e9182f36 memory r_2_0_2;\n {\n string[3] memory r_2_0_2_0;\n {\n string memory r_2_0_2_0_0 = unicode\"Moo é🚀é🚀\";\n r_2_0_2_0[0] = r_2_0_2_0_0;\n }\n {\n string memory r_2_0_2_0_1 = unicode\"Moo é🚀🚀🚀🚀 🚀o oééooo 🚀éoéé o oM 🚀o é\";\n r_2_0_2_0[1] = r_2_0_2_0_1;\n }\n {\n string memory r_2_0_2_0_2 = unicode\"Moo é🚀 o 🚀 o🚀 ooéMoéo🚀oooo🚀éé🚀 oo \";\n r_2_0_2_0[2] = r_2_0_2_0_2;\n }\n r_2_0_2.s_0 = r_2_0_2_0;\n }\n r_2_0[2] = r_2_0_2;\n }\n r_2.s_0 = r_2_0;\n }\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x4a9A1F53de057578C1A32c3252358372F4c1A05C;\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀ooooéMooéoéé ooo MMo 🚀o🚀oooé\";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000076c266e80b92dd8fea422212952d1296ce4aaae6f47b69fbce7537c21b69dc134d300000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000004a9a1f53de057578c1a32c3252358372f4c1a05c00000000000000000000000000000000000000000000000000000000000005c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a806f6f6ff09f9a806fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a806f4df09f9a804d206f6fc3a920206fc3a96ff09f9a804d6f4d4dc3a9f09f9a80f09f9a804df09f9a80204dc3a94dc3a96fc3a9f09f9a80f09f9a80c3a96f4d4d4df09f9a80204dc3a920000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a806f4d206ff09f9a80f09f9a804df09f9a806f6f4d4dc3a9206fc3a96f6ff09f9a806f206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a80f09f9a804d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a806f6f20f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a806f4d206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a80c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a802020f09f9a806f2020206fc3a9c3a96f6f6f20f09f9a80c3a96fc3a9c3a9206f206f4d20f09f9a806f20c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a80206f20f09f9a80206ff09f9a80206f6fc3a94d6fc3a96ff09f9a806f6f6f6ff09f9a80c3a9c3a9f09f9a80206f6f200000000000000000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a806f6f6f6fc3a94d6f6fc3a96fc3a9c3a9206f6f6f204d4d6f20f09f9a806ff09f9a806f6f6fc3a9000000000000000000000000000000" + }, + { + "name": "random-(uint24,uint208,address,(int112,bytes15,bool),string)", + "type": "(uint24,uint208,address,(int112,bytes15,bool),string)", + "value": [ + "12524572", + "139333957479695069850148263573300471095519134905621125637770007", + "0x229CA9f98282C77F37459FF9aBbC72222bAe8623", + ["-1783647021687525461437659481437058", "0xd12df13559bc4c09bee6338c1f3558", false], + "Moo é🚀o🚀ooééMMM o oM🚀🚀o🚀 🚀M🚀oo🚀🚀ooéMo M o🚀 éo 🚀🚀é🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "12524572" + }, + { + "type": "number", + "value": "139333957479695069850148263573300471095519134905621125637770007" + }, + { + "type": "address", + "value": "0x229CA9f98282C77F37459FF9aBbC72222bAe8623" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-1783647021687525461437659481437058" + }, + { + "type": "hexstring", + "value": "0xd12df13559bc4c09bee6338c1f3558" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀ooééMMM o oM🚀🚀o🚀 🚀M🚀oo🚀🚀ooéMo M o🚀 éo 🚀🚀é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102c4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061019d565b60405180910390f35b610056610107565b61005e610107565b62bf1c1c81527956b52e1875372b9094b27860112487049fdbd51b7b6022728b1760208083019190915273229ca9f98282c77f37459ff9abbc72222bae862360408084019190915280516060808201835260008284018190526d57f0ca5bfa55bcc7537a47d4f3811983526e1a25be26ab37898137dcc67183e6ab608b1b8386015281860192909252825160808101909352808352909261022f90830139608083015250919050565b6040805160a08101825260008082526020808301829052828401829052835160608181018652838252918101839052938401919091529091908201908152602001606081525090565b6000815180845260005b818110156101765760208185018101518683018201520161015a565b81811115610188576000602083870101525b50601f01601f19169290920160200192915050565b6020815262ffffff825116602082015260018060d01b03602083015116604082015260018060a01b036040830151166060820152600060608301518051600d0b608084015270ffffffffffffffffffffffffffffffffff1960208201511660a08401526040810151151560c084015250608083015160e080840152610226610100840182610150565b94935050505056fe4d6f6f20c3a9f09f9a806ff09f9a806f6fc3a9c3a94d4d4d206f206f4df09f9a80f09f9a806ff09f9a8020f09f9a804df09f9a806f6ff09f9a80f09f9a806f6fc3a94d6f204d206ff09f9a8020c3a96f2020f09f9a80f09f9a80c3a9f09f9a80a26469706673582212204219bf6b68e15baf1993043ecb21431b0ee4f711712687ccd4198807856dffb164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_25e1da51 {\n int112 s_0;\n bytes15 s_1;\n bool s_2;\n }\n\n struct S_7f71dfb5 {\n uint24 s_0;\n uint208 s_1;\n address s_2;\n S_25e1da51 s_3;\n string s_4;\n }\n\n function test () public pure returns (S_7f71dfb5 memory) {\n S_7f71dfb5 memory r;\n {\n uint24 r_0 = 12524572;\n r.s_0 = r_0;\n }\n {\n uint208 r_1 = 139333957479695069850148263573300471095519134905621125637770007;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x229CA9f98282C77F37459FF9aBbC72222bAe8623;\n r.s_2 = r_2;\n }\n {\n S_25e1da51 memory r_3;\n {\n int112 r_3_0 = -1783647021687525461437659481437058;\n r_3.s_0 = r_3_0;\n }\n {\n bytes15 r_3_1 = bytes15(0xd12df13559bc4c09bee6338c1f3558);\n r_3.s_1 = r_3_1;\n }\n {\n bool r_3_2 = false;\n r_3.s_2 = r_3_2;\n }\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀o🚀ooééMMM o oM🚀🚀o🚀 🚀M🚀oo🚀🚀ooéMo M o🚀 éo 🚀🚀é🚀\";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000bf1c1c00000000000056b52e1875372b9094b27860112487049fdbd51b7b6022728b17000000000000000000000000229ca9f98282c77f37459ff9abbc72222bae8623ffffffffffffffffffffffffffffffffffffa80f35a405aa4338ac85b82b0c7ed12df13559bc4c09bee6338c1f35580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a806ff09f9a806f6fc3a9c3a94d4d4d206f206f4df09f9a80f09f9a806ff09f9a8020f09f9a804df09f9a806f6ff09f9a80f09f9a806f6fc3a94d6f204d206ff09f9a8020c3a96f2020f09f9a80f09f9a80c3a9f09f9a80" + }, + { + "name": "random-(uint88,string[1],bool,uint216[1],bytes11)", + "type": "(uint88,string[1],bool,uint216[1],bytes11)", + "value": [ + "14755847060875931202127844", + ["Moo é🚀 MéoM éMoMé oMM ééo🚀oMoMoéoMo oooé 🚀éoo o"], + false, + ["65624637158559784116817983435501774681522401771321123865494291079"], + "0x08ce54fb69632ee76ba38b" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "14755847060875931202127844" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 MéoM éMoMé oMM ééo🚀oMoMoéoMo oooé 🚀éoo o" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "65624637158559784116817983435501774681522401771321123865494291079" + } + ] + }, + { + "type": "hexstring", + "value": "0x08ce54fb69632ee76ba38b" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102f9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101a1565b60405180910390f35b6100566100e2565b61005e6100e2565b6a0c34ac126f764b726887e4815261007461012a565b6000604051806080016040528060438152602001610281604391398252506020820152600060408201526100a6610151565b7a9f864fdce273923cab06b7a3efed593a7e7c405e3d5b86187c0287815260608201526a08ce54fb69632ee76ba38b60a81b6080820152919050565b6040518060a0016040528060006affffffffffffffffffffff16815260200161010961012a565b81526000602082015260400161011d610151565b8152600060209091015290565b60405180602001604052806001905b60608152602001906001900390816101395790505090565b60405180602001604052806001906020820280368337509192915050565b8060005b600181101561019b5781516001600160d81b0316845260209384019390910190600101610173565b50505050565b602080825282516affffffffffffffffffffff16828201528281015160a060408401526000919060e084019060c0850184805b600181101561023a5787850360bf1901835283518051808752835b8181101561020a578281018901518882018a015288016101ef565b8181111561021a578489838a0101525b50601f01601f1916959095018601945092850192918501916001016101d4565b5050505060408501518015156060860152915060608501519150610261608085018361016f565b60808501516001600160a81b0319811660a0860152915094935050505056fe4d6f6f20c3a9f09f9a80204dc3a96f4d202020c3a94d6f4dc3a9206f4d4d20c3a9c3a96ff09f9a806f4d6f4d6fc3a96f4d6f206f6f6fc3a920f09f9a80c3a96f6f206fa2646970667358221220d97c51922a6a7b54272f3c9e8191a0e1a7247345f296a6fe7cd0b7a2261debb764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_266d5c62 {\n uint88 s_0;\n string[1] s_1;\n bool s_2;\n uint216[1] s_3;\n bytes11 s_4;\n }\n\n function test () public pure returns (S_266d5c62 memory) {\n S_266d5c62 memory r;\n {\n uint88 r_0 = 14755847060875931202127844;\n r.s_0 = r_0;\n }\n {\n string[1] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀 MéoM éMoMé oMM ééo🚀oMoMoéoMo oooé 🚀éoo o\";\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n uint216[1] memory r_3;\n {\n uint216 r_3_0 = 65624637158559784116817983435501774681522401771321123865494291079;\n r_3[0] = r_3_0;\n }\n r.s_3 = r_3;\n }\n {\n bytes11 r_4 = bytes11(0x08ce54fb69632ee76ba38b);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000c34ac126f764b726887e400000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000009f864fdce273923cab06b7a3efed593a7e7c405e3d5b86187c028708ce54fb69632ee76ba38b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a80204dc3a96f4d202020c3a94d6f4dc3a9206f4d4d20c3a9c3a96ff09f9a806f4d6f4d6fc3a96f4d6f206f6f6fc3a920f09f9a80c3a96f6f206f0000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((address,bytes18[],(bool,string,string,address)),bytes31)", + "type": "((address,bytes18[],(bool,string,string,address)),bytes31)", + "value": [ + [ + "0x05a777D1F9E8ad5Fb66fdac4d3CcEAC717333A66", + [], + [ + true, + "Moo é🚀🚀 🚀 oM éoM🚀o🚀éMéoM 🚀éoMMooéoooM🚀 é🚀oM é🚀o🚀Moé🚀 o", + "Moo é🚀🚀", + "0xE1f5b4eA4A9C11ffda74116826f1D596454f082C" + ] + ], + "0x7c87f0f563b7a2b05a26438b26cc7e544d40530d92ae66bb4133bf7dff3537" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x05a777D1F9E8ad5Fb66fdac4d3CcEAC717333A66" + }, + { + "type": "array", + "value": [] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀🚀 🚀 oM éoM🚀o🚀éMéoM 🚀éoMMooéoooM🚀 é🚀oM é🚀o🚀Moé🚀 o" + }, + { + "type": "string", + "value": "Moo é🚀🚀" + }, + { + "type": "address", + "value": "0xE1f5b4eA4A9C11ffda74116826f1D596454f082C" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x7c87f0f563b7a2b05a26438b26cc7e544d40530d92ae66bb4133bf7dff3537" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103bc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061026f565b60405180910390f35b61005661017f565b61005e61017f565b61009c604080516060808201835260008083526020808401839052845160808101865282815290810183905280850183905291820152909182015290565b7305a777d1f9e8ad5fb66fdac4d3cceac717333a668152604080516000808252602080830184528085019290925282516080810184526060818401819052818501819052810182905260018152835160a0810190945260638085529093919261032490830139602080840191909152604080518082018252600e81526c9adede418753e13f3501e13f3560971b818401528185015273e1f5b4ea4a9c11ffda74116826f1d596454f082c6060850152840192909252509082527f7c87f0f563b7a2b05a26438b26cc7e544d40530d92ae66bb4133bf7dff35370090820152919050565b6040805160a0810182526000818301818152606080840181905284516080808201875284825260208083018490529682018390529181018490529084015282529181019190915290565b6000815180845260005b818110156101ef576020818501810151868301820152016101d3565b81811115610201576000602083870101525b50601f01601f19169290920160200192915050565b805115158252600060208201516080602085015261023760808501826101c9565b90506040830151848203604086015261025082826101c9565b6060948501516001600160a01b03169590940194909452509092915050565b60006020808352835160408285015260c0840160018060a01b038251166060860152828201516060608087015281815180845260e0880191508583019350600092505b808310156102e35783516dffffffffffffffffffffffffffff191682529285019260019290920191908501906102b2565b5060408401519350605f198782030160a08801526103018185610216565b9488015160ff198116604089015294935061031b92505050565b94935050505056fe4d6f6f20c3a9f09f9a80f09f9a802020f09f9a80206f4d2020c3a96f4df09f9a806ff09f9a80c3a94dc3a96f4d20f09f9a80c3a96f4d4d6f6fc3a96f6f6f4df09f9a8020c3a9f09f9a806f4d2020c3a9f09f9a806ff09f9a804d6fc3a9f09f9a80206fa26469706673582212204b14f270c22ca44b14bfca03588fa89d9878fdd45904331d1a2f8ccce1b8d26d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e779621a {\n bool s_0;\n string s_1;\n string s_2;\n address s_3;\n }\n\n struct S_7c7b7561 {\n address s_0;\n bytes18[] s_1;\n S_e779621a s_2;\n }\n\n struct S_76d6c287 {\n S_7c7b7561 s_0;\n bytes31 s_1;\n }\n\n function test () public pure returns (S_76d6c287 memory) {\n S_76d6c287 memory r;\n {\n S_7c7b7561 memory r_0;\n {\n address r_0_0 = 0x05a777D1F9E8ad5Fb66fdac4d3CcEAC717333A66;\n r_0.s_0 = r_0_0;\n }\n {\n bytes18[] memory r_0_1 = new bytes18[](0);\n r_0.s_1 = r_0_1;\n }\n {\n S_e779621a memory r_0_2;\n {\n bool r_0_2_0 = true;\n r_0_2.s_0 = r_0_2_0;\n }\n {\n string memory r_0_2_1 = unicode\"Moo é🚀🚀 🚀 oM éoM🚀o🚀éMéoM 🚀éoMMooéoooM🚀 é🚀oM é🚀o🚀Moé🚀 o\";\n r_0_2.s_1 = r_0_2_1;\n }\n {\n string memory r_0_2_2 = unicode\"Moo é🚀🚀\";\n r_0_2.s_2 = r_0_2_2;\n }\n {\n address r_0_2_3 = 0xE1f5b4eA4A9C11ffda74116826f1D596454f082C;\n r_0_2.s_3 = r_0_2_3;\n }\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n bytes31 r_1 = bytes31(0x7c87f0f563b7a2b05a26438b26cc7e544d40530d92ae66bb4133bf7dff3537);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000407c87f0f563b7a2b05a26438b26cc7e544d40530d92ae66bb4133bf7dff35370000000000000000000000000005a777d1f9e8ad5fb66fdac4d3cceac717333a66000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000e1f5b4ea4a9c11ffda74116826f1d596454f082c00000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a80f09f9a802020f09f9a80206f4d2020c3a96f4df09f9a806ff09f9a80c3a94dc3a96f4d20f09f9a80c3a96f4d4d6f6fc3a96f6f6f4df09f9a8020c3a9f09f9a806f4d2020c3a9f09f9a806ff09f9a804d6fc3a9f09f9a80206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a80f09f9a80000000000000000000000000000000000000" + }, + { + "name": "random-((bool,int216,address[]),string,uint144,string[3])", + "type": "((bool,int216,address[]),string,uint144,string[3])", + "value": [ + [ + true, + "42204045905085308419103050240057281769683195809522584554469202494", + ["0x407882b3e1e33B4069612cc2D683490E8b466cb0"] + ], + "Moo é🚀", + "17883702168831998796434501326742622877380170", + ["Moo é🚀o Mo🚀🚀🚀", "Moo é🚀", "Moo é🚀🚀é🚀 oéééé MM🚀o🚀oMMé"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "42204045905085308419103050240057281769683195809522584554469202494" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x407882b3e1e33B4069612cc2D683490E8b466cb0" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "number", + "value": "17883702168831998796434501326742622877380170" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o Mo🚀🚀🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀é🚀 oéééé MM🚀o🚀oMMé" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061041d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102c5565b60405180910390f35b6100566101cb565b61005e6101cb565b60408051606080820183528183015260018082527a6697a46a334f0d1915a0347c36ddb6b6f47b4c1bf853a270221a3e602083015282518181528084019093529091600091816020016020820280368337019050509050600073407882b3e1e33b4069612cc2d683490e8b466cb0905080826000815181106100e2576100e26103a2565b6001600160a01b039092166020928302919091018201526040808501939093529284525080518082018252600a8152689adede418753e13f3560b71b818401529183019190915271cd4b7a28587c85ce23cf64e3d15fff89ee4a9082015261014861020c565b604080518082018252601b81527f4d6f6f20c3a9f09f9a806f20204d6ff09f9a80f09f9a80f09f9a80000000000060208083019190915290835281518083018352600a8152689adede418753e13f3560b71b8183015283820152815160608101909252602f808352600092916103b9908301396040830152506060820152919050565b6040805160e08101825260006080820181815260a08301829052606060c08401819052908352602083018190529282015290810161020761020c565b905290565b60405180606001604052806003905b606081526020019060019003908161021b5790505090565b6000815180845260005b818110156102595760208185018101518683018201520161023d565b8181111561026b576000602083870101525b50601f01601f19169290920160200192915050565b600082606081018360005b60038110156102ba5783830387526102a4838351610233565b602097880197909350919091019060010161028b565b509095945050505050565b602080825282516080838301528051151560a084015280820151601a0b60c084015260400151606060e0840152805161010084018190526000929182019083906101208601905b808310156103355783516001600160a01b0316825292840192600192909201919084019061030c565b50838701519350601f199250828682030160408701526103558185610233565b93505050604085015161037e606086018271ffffffffffffffffffffffffffffffffffff169052565b506060850151818584030160808601526103988382610280565b9695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a80c3a9f09f9a80206fc3a9c3a9c3a9c3a9204d4df09f9a806ff09f9a806f4d4dc3a9a26469706673582212204d3af652c852c384c4c43cb6dd37b21f084b5beb51061b3c99f3e616a7b4c80164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_20ec47d2 {\n bool s_0;\n int216 s_1;\n address[] s_2;\n }\n\n struct S_bd85d441 {\n S_20ec47d2 s_0;\n string s_1;\n uint144 s_2;\n string[3] s_3;\n }\n\n function test () public pure returns (S_bd85d441 memory) {\n S_bd85d441 memory r;\n {\n S_20ec47d2 memory r_0;\n {\n bool r_0_0 = true;\n r_0.s_0 = r_0_0;\n }\n {\n int216 r_0_1 = 42204045905085308419103050240057281769683195809522584554469202494;\n r_0.s_1 = r_0_1;\n }\n {\n address[] memory r_0_2 = new address[](1);\n {\n address r_0_2_0 = 0x407882b3e1e33B4069612cc2D683490E8b466cb0;\n r_0_2[0] = r_0_2_0;\n }\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r.s_1 = r_1;\n }\n {\n uint144 r_2 = 17883702168831998796434501326742622877380170;\n r.s_2 = r_2;\n }\n {\n string[3] memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀o Mo🚀🚀🚀\";\n r_3[0] = r_3_0;\n }\n {\n string memory r_3_1 = unicode\"Moo é🚀\";\n r_3[1] = r_3_1;\n }\n {\n string memory r_3_2 = unicode\"Moo é🚀🚀é🚀 oéééé MM🚀o🚀oMMé\";\n r_3[2] = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000cd4b7a28587c85ce23cf64e3d15fff89ee4a0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000100000000006697a46a334f0d1915a0347c36ddb6b6f47b4c1bf853a270221a3e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000407882b3e1e33b4069612cc2d683490e8b466cb0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a806f20204d6ff09f9a80f09f9a80f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a80f09f9a80c3a9f09f9a80206fc3a9c3a9c3a9c3a9204d4df09f9a806ff09f9a806f4d4dc3a90000000000000000000000000000000000" + }, + { + "name": "random-((bytes25[3][3],int128,address,bool,bool),int152)", + "type": "((bytes25[3][3],int128,address,bool,bool),int152)", + "value": [ + [ + [ + [ + "0xb2b2617b858f242cf685e68f8435b420d6e72a2193dc0a5118", + "0x9cc64a0b9d35c828bd62627ff8fce6635cae4c8678bef6c498", + "0xb6250cd949eb0df2d27f78b358aab3b9c34f0560e6df9bbe7c" + ], + [ + "0xd6707490e08a16f052258e60cca2b1bbc2f1f5c9a6e27ce842", + "0xd58df897f39ed3e54a6c5ec8e9ec1339e765496a834afa8a2c", + "0x38632d965f4adffaf0904de20b11ba6e25d0a7e23f388ef8a9" + ], + [ + "0x8d0612ef4e32ceac436fdb0dd1bd5571e6af614ba28d1bf31b", + "0xa92f9e426fb15eb1107ef696c754bced563a7e4361b199cb87", + "0xc2004816c24d362db4bffa3376144ad02c162b6a6e3afe407b" + ] + ], + "-58364042150315514239455006206289389368", + "0xF7508c412844DF82CF1Fcfa353Ad1272855f0bA2", + true, + false + ], + "1095237326575093977667050319572383273325964782" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xb2b2617b858f242cf685e68f8435b420d6e72a2193dc0a5118" + }, + { + "type": "hexstring", + "value": "0x9cc64a0b9d35c828bd62627ff8fce6635cae4c8678bef6c498" + }, + { + "type": "hexstring", + "value": "0xb6250cd949eb0df2d27f78b358aab3b9c34f0560e6df9bbe7c" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xd6707490e08a16f052258e60cca2b1bbc2f1f5c9a6e27ce842" + }, + { + "type": "hexstring", + "value": "0xd58df897f39ed3e54a6c5ec8e9ec1339e765496a834afa8a2c" + }, + { + "type": "hexstring", + "value": "0x38632d965f4adffaf0904de20b11ba6e25d0a7e23f388ef8a9" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8d0612ef4e32ceac436fdb0dd1bd5571e6af614ba28d1bf31b" + }, + { + "type": "hexstring", + "value": "0xa92f9e426fb15eb1107ef696c754bced563a7e4361b199cb87" + }, + { + "type": "hexstring", + "value": "0xc2004816c24d362db4bffa3376144ad02c162b6a6e3afe407b" + } + ] + } + ] + }, + { + "type": "number", + "value": "-58364042150315514239455006206289389368" + }, + { + "type": "address", + "value": "0xF7508c412844DF82CF1Fcfa353Ad1272855f0bA2" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "number", + "value": "1095237326575093977667050319572383273325964782" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103e2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102eb565b60405180910390f35b61005661024b565b61005e61024b565b61006661026b565b61006e6102a0565b6100766102cd565b7fb2b2617b858f242cf685e68f8435b420d6e72a2193dc0a51180000000000000081527f9cc64a0b9d35c828bd62627ff8fce6635cae4c8678bef6c4980000000000000060208201527fb6250cd949eb0df2d27f78b358aab3b9c34f0560e6df9bbe7c00000000000000604082015281526100ef6102cd565b7fd6707490e08a16f052258e60cca2b1bbc2f1f5c9a6e27ce8420000000000000081527fd58df897f39ed3e54a6c5ec8e9ec1339e765496a834afa8a2c000000000000006020808301919091527f38632d965f4adffaf0904de20b11ba6e25d0a7e23f388ef8a900000000000000604083015282015261016d6102cd565b7f8d0612ef4e32ceac436fdb0dd1bd5571e6af614ba28d1bf31b0000000000000081527fa92f9e426fb15eb1107ef696c754bced563a7e4361b199cb87000000000000006020808301919091527fc2004816c24d362db4bffa3376144ad02c162b6a6e3afe407b00000000000000604080840191909152838101929092529183526f2be88171f808b6adb6e9cb19af162737198383015273f7508c412844df82cf1fcfa353ad1272855f0ba290830152600160608301526000608083015290825272311cb539ba28d9088858d1c1c43e1425d42dee90820152919050565b604051806040016040528061025e61026b565b8152600060209091015290565b6040518060a0016040528061027e6102a0565b8152600060208201819052604082018190526060820181905260809091015290565b60405180606001604052806003905b6102b76102cd565b8152602001906001900390816102af5790505090565b60405180606001604052806003906020820280368337509192915050565b815180516101c083019190836000805b600380821061030a5750610351565b845184845b8381101561033757825166ffffffffffffff191682526020928301929091019060010161030f565b5050506020949094019350606092909201916001016102fb565b50505050602081015161036a610120850182600f0b9052565b5060408101516001600160a01b0316610140840152606081015115156101608401526080015115156101808301526020929092015160120b6101a0909101529056fea2646970667358221220e722ec003b06dd3782ab52cd501ba5e84b47f03237c00b16beab3fe0207b048e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_158113f7 {\n bytes25[3][3] s_0;\n int128 s_1;\n address s_2;\n bool s_3;\n bool s_4;\n }\n\n struct S_b70b5b32 {\n S_158113f7 s_0;\n int152 s_1;\n }\n\n function test () public pure returns (S_b70b5b32 memory) {\n S_b70b5b32 memory r;\n {\n S_158113f7 memory r_0;\n {\n bytes25[3][3] memory r_0_0;\n {\n bytes25[3] memory r_0_0_0;\n {\n bytes25 r_0_0_0_0 = bytes25(0xb2b2617b858f242cf685e68f8435b420d6e72a2193dc0a5118);\n r_0_0_0[0] = r_0_0_0_0;\n }\n {\n bytes25 r_0_0_0_1 = bytes25(0x9cc64a0b9d35c828bd62627ff8fce6635cae4c8678bef6c498);\n r_0_0_0[1] = r_0_0_0_1;\n }\n {\n bytes25 r_0_0_0_2 = bytes25(0xb6250cd949eb0df2d27f78b358aab3b9c34f0560e6df9bbe7c);\n r_0_0_0[2] = r_0_0_0_2;\n }\n r_0_0[0] = r_0_0_0;\n }\n {\n bytes25[3] memory r_0_0_1;\n {\n bytes25 r_0_0_1_0 = bytes25(0xd6707490e08a16f052258e60cca2b1bbc2f1f5c9a6e27ce842);\n r_0_0_1[0] = r_0_0_1_0;\n }\n {\n bytes25 r_0_0_1_1 = bytes25(0xd58df897f39ed3e54a6c5ec8e9ec1339e765496a834afa8a2c);\n r_0_0_1[1] = r_0_0_1_1;\n }\n {\n bytes25 r_0_0_1_2 = bytes25(0x38632d965f4adffaf0904de20b11ba6e25d0a7e23f388ef8a9);\n r_0_0_1[2] = r_0_0_1_2;\n }\n r_0_0[1] = r_0_0_1;\n }\n {\n bytes25[3] memory r_0_0_2;\n {\n bytes25 r_0_0_2_0 = bytes25(0x8d0612ef4e32ceac436fdb0dd1bd5571e6af614ba28d1bf31b);\n r_0_0_2[0] = r_0_0_2_0;\n }\n {\n bytes25 r_0_0_2_1 = bytes25(0xa92f9e426fb15eb1107ef696c754bced563a7e4361b199cb87);\n r_0_0_2[1] = r_0_0_2_1;\n }\n {\n bytes25 r_0_0_2_2 = bytes25(0xc2004816c24d362db4bffa3376144ad02c162b6a6e3afe407b);\n r_0_0_2[2] = r_0_0_2_2;\n }\n r_0_0[2] = r_0_0_2;\n }\n r_0.s_0 = r_0_0;\n }\n {\n int128 r_0_1 = -58364042150315514239455006206289389368;\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0xF7508c412844DF82CF1Fcfa353Ad1272855f0bA2;\n r_0.s_2 = r_0_2;\n }\n {\n bool r_0_3 = true;\n r_0.s_3 = r_0_3;\n }\n {\n bool r_0_4 = false;\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n int152 r_1 = 1095237326575093977667050319572383273325964782;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0xb2b2617b858f242cf685e68f8435b420d6e72a2193dc0a5118000000000000009cc64a0b9d35c828bd62627ff8fce6635cae4c8678bef6c49800000000000000b6250cd949eb0df2d27f78b358aab3b9c34f0560e6df9bbe7c00000000000000d6707490e08a16f052258e60cca2b1bbc2f1f5c9a6e27ce84200000000000000d58df897f39ed3e54a6c5ec8e9ec1339e765496a834afa8a2c0000000000000038632d965f4adffaf0904de20b11ba6e25d0a7e23f388ef8a9000000000000008d0612ef4e32ceac436fdb0dd1bd5571e6af614ba28d1bf31b00000000000000a92f9e426fb15eb1107ef696c754bced563a7e4361b199cb8700000000000000c2004816c24d362db4bffa3376144ad02c162b6a6e3afe407b00000000000000ffffffffffffffffffffffffffffffffd4177e8e07f74952491634e650e9d8c8000000000000000000000000f7508c412844df82cf1fcfa353ad1272855f0ba20000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311cb539ba28d9088858d1c1c43e1425d42dee" + }, + { + "name": "random-((bytes3),(int88,uint128,string[1],bool[][3]))", + "type": "((bytes3),(int88,uint128,string[1],bool[][3]))", + "value": [ + ["0x571282"], + [ + "138520999858898201197970597", + "286422112591566059720456561011869362493", + ["Moo é🚀éoo🚀🚀M oéooo🚀oM é é🚀Moo🚀éoéoo o🚀 o ooo🚀ooo 🚀é🚀🚀Mé"], + [[true, false], [false, false], [false]] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x571282" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "138520999858898201197970597" + }, + { + "type": "number", + "value": "286422112591566059720456561011869362493" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoo🚀🚀M oéooo🚀oM é é🚀Moo🚀éoéoo o🚀 o ooo🚀ooo 🚀é🚀🚀Mé" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104ce806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610328565b60405180910390f35b610056610226565b61005e610226565b6040805160208101909152622b894160e91b8152815261007c61024c565b6a7294f672f7d4743adc84a581526fd77ae4703a8fdfd091c3ec88e8e4293d60208201526100a8610278565b60006040518060a00160405280606581526020016104346065913982525060408201526100d361029f565b604080516002808252606082018352600092602083019080368337019050509050600060019050808260008151811061010e5761010e61041d565b60200260200101901515908115158152505050600080826001815181106101375761013761041d565b9115156020928302919091019091015250815260408051600280825260608201909252600091816020016020820280368337019050509050600080826000815181106101855761018561041d565b60200260200101901515908115158152505050600080826001815181106101ae576101ae61041d565b91151560209283029190910182015283019190915250604080516001808252818301909252600091816020016020820280368337019050509050600080826000815181106101fe576101fe61041d565b9115156020928302919091018201526040840192909252506060830191909152820152919050565b6040805160608101825260009181019182529081526020810161024761024c565b905290565b604080516080810182526000808252602082015290810161026b610278565b815260200161024761029f565b60405180602001604052806001905b60608152602001906001900390816102875790505090565b604080516060808201909252908152600260208201610287565b60008260608101836000805b600381101561031c578484038852825180518086526020918201918087019190855b828110156103055784511515845293810193928101926001016102e7565b509a8b019a919650509390930192506001016102c5565b50919695505050505050565b6000602080835262ffffff60e81b84515116818401528084015160408085015260e084018151600a0b60608601526fffffffffffffffffffffffffffffffff838301511660808601526040820151608060a087015281829050610100870192506000805b60018110156103f25788850360df1901835283518051808752835b818110156103c2578281018a01518882018b015289016103a7565b818111156103d257848a838a0101525b50601f01601f19169590950187019450928601929186019160010161038c565b505050506060820151858203605f190160c0870152925061041381846102b9565b9695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80c3a96f6ff09f9a80f09f9a804d206fc3a96f6f6ff09f9a806f4d20c3a920202020c3a9f09f9a804d6f6ff09f9a80c3a96fc3a96f6f20206ff09f9a80206f206f6f6ff09f9a806f6f6f20f09f9a80c3a9f09f9a80f09f9a804dc3a9a2646970667358221220a427262e28f19498772fbe1d873297fbdd3d1740dea0c0ad4022544e70ea9a6064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f9135bc5 {\n bytes3 s_0;\n }\n\n struct S_1e16b9ff {\n int88 s_0;\n uint128 s_1;\n string[1] s_2;\n bool[][3] s_3;\n }\n\n struct S_4974cb00 {\n S_f9135bc5 s_0;\n S_1e16b9ff s_1;\n }\n\n function test () public pure returns (S_4974cb00 memory) {\n S_4974cb00 memory r;\n {\n S_f9135bc5 memory r_0;\n {\n bytes3 r_0_0 = bytes3(0x571282);\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n S_1e16b9ff memory r_1;\n {\n int88 r_1_0 = 138520999858898201197970597;\n r_1.s_0 = r_1_0;\n }\n {\n uint128 r_1_1 = 286422112591566059720456561011869362493;\n r_1.s_1 = r_1_1;\n }\n {\n string[1] memory r_1_2;\n {\n string memory r_1_2_0 = unicode\"Moo é🚀éoo🚀🚀M oéooo🚀oM é é🚀Moo🚀éoéoo o🚀 o ooo🚀ooo 🚀é🚀🚀Mé\";\n r_1_2[0] = r_1_2_0;\n }\n r_1.s_2 = r_1_2;\n }\n {\n bool[][3] memory r_1_3;\n {\n bool[] memory r_1_3_0 = new bool[](2);\n {\n bool r_1_3_0_0 = true;\n r_1_3_0[0] = r_1_3_0_0;\n }\n {\n bool r_1_3_0_1 = false;\n r_1_3_0[1] = r_1_3_0_1;\n }\n r_1_3[0] = r_1_3_0;\n }\n {\n bool[] memory r_1_3_1 = new bool[](2);\n {\n bool r_1_3_1_0 = false;\n r_1_3_1[0] = r_1_3_1_0;\n }\n {\n bool r_1_3_1_1 = false;\n r_1_3_1[1] = r_1_3_1_1;\n }\n r_1_3[1] = r_1_3_1;\n }\n {\n bool[] memory r_1_3_2 = new bool[](1);\n {\n bool r_1_3_2_0 = false;\n r_1_3_2[0] = r_1_3_2_0;\n }\n r_1_3[2] = r_1_3_2;\n }\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020571282000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000007294f672f7d4743adc84a500000000000000000000000000000000d77ae4703a8fdfd091c3ec88e8e4293d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000654d6f6f20c3a9f09f9a80c3a96f6ff09f9a80f09f9a804d206fc3a96f6f6ff09f9a806f4d20c3a920202020c3a9f09f9a804d6f6ff09f9a80c3a96fc3a96f6f20206ff09f9a80206f206f6f6ff09f9a806f6f6f20f09f9a80c3a9f09f9a80f09f9a804dc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((bytes4,string,address,(address,bytes27)[1],bytes5),uint72)", + "type": "((bytes4,string,address,(address,bytes27)[1],bytes5),uint72)", + "value": [ + [ + "0xa749dd80", + "Moo é🚀Mo M🚀🚀éo oo M", + "0x3Fa70Add2C72F221102B63D85754411f844492a1", + [ + [ + "0x8156C57C609b0D568E86A93d033661952A14Aa3f", + "0x5a92e9561f8bee7fb9e41464923d8290a1c9d05b229577da711df7" + ] + ], + "0xb778ff69d6" + ], + "4115082777522003183056" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa749dd80" + }, + { + "type": "string", + "value": "Moo é🚀Mo M🚀🚀éo oo M" + }, + { + "type": "address", + "value": "0x3Fa70Add2C72F221102B63D85754411f844492a1" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x8156C57C609b0D568E86A93d033661952A14Aa3f" + }, + { + "type": "hexstring", + "value": "0x5a92e9561f8bee7fb9e41464923d8290a1c9d05b229577da711df7" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xb778ff69d6" + } + ] + }, + { + "type": "number", + "value": "4115082777522003183056" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610317806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610207565b60405180910390f35b610056610145565b61005e610145565b610066610165565b63014e93bb60e71b8152604080518082018252601e81527f4d6f6f20c3a9f09f9a804d6f204df09f9a80f09f9a80c3a96f206f6f204d0000602080830191909152830152733fa70add2c72f221102b63d85754411f844492a1908201526100cb610188565b60408051808201909152738156c57c609b0d568e86a93d033661952a14aa3f81527f5a92e9561f8bee7fb9e41464923d8290a1c9d05b229577da711df700000000006020808301919091529082526060830191909152645bbc7fb4eb60d91b608083015290825268df143edf8366cf05d090820152919050565b6040518060400160405280610158610165565b8152600060209091015290565b6040805160a0810182526000808252606060208301819052928201529081016101585b60405180602001604052806001905b60408051808201909152600080825260208201528152602001906001900390816101975790505090565b8060005b600181101561020157815180516001600160a01b0316855260209081015164ffffffffff191681860152604090940193909101906001016101c5565b50505050565b60006020808352835160408285015263ffffffff60e01b81511660608501528181015160c0608086015280518061012087015260005b8181101561025a578281018501518782016101400152840161023d565b8181111561026d57600061014083890101525b5060408301516001600160a01b031660a08701526060830151915061029560c08701836101c1565b608083015192506102b36101008701846001600160d81b0319169052565b9286015168ffffffffffffffffff8116604087015292601f01601f191694909401610140019594505050505056fea2646970667358221220ba4772d11550b7c7d92b1310be821c57bf30568f54adf5d6568b34509193ccc564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9c631d09 {\n address s_0;\n bytes27 s_1;\n }\n\n struct S_5c343c8c {\n bytes4 s_0;\n string s_1;\n address s_2;\n S_9c631d09[1] s_3;\n bytes5 s_4;\n }\n\n struct S_123aa41e {\n S_5c343c8c s_0;\n uint72 s_1;\n }\n\n function test () public pure returns (S_123aa41e memory) {\n S_123aa41e memory r;\n {\n S_5c343c8c memory r_0;\n {\n bytes4 r_0_0 = bytes4(0xa749dd80);\n r_0.s_0 = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀Mo M🚀🚀éo oo M\";\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0x3Fa70Add2C72F221102B63D85754411f844492a1;\n r_0.s_2 = r_0_2;\n }\n {\n S_9c631d09[1] memory r_0_3;\n {\n S_9c631d09 memory r_0_3_0;\n {\n address r_0_3_0_0 = 0x8156C57C609b0D568E86A93d033661952A14Aa3f;\n r_0_3_0.s_0 = r_0_3_0_0;\n }\n {\n bytes27 r_0_3_0_1 = bytes27(0x5a92e9561f8bee7fb9e41464923d8290a1c9d05b229577da711df7);\n r_0_3_0.s_1 = r_0_3_0_1;\n }\n r_0_3[0] = r_0_3_0;\n }\n r_0.s_3 = r_0_3;\n }\n {\n bytes5 r_0_4 = bytes5(0xb778ff69d6);\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n uint72 r_1 = 4115082777522003183056;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000df143edf8366cf05d0a749dd800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000003fa70add2c72f221102b63d85754411f844492a10000000000000000000000008156c57c609b0d568e86a93d033661952a14aa3f5a92e9561f8bee7fb9e41464923d8290a1c9d05b229577da711df70000000000b778ff69d6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a804d6f204df09f9a80f09f9a80c3a96f206f6f204d0000" + }, + { + "name": "random-((string,address,uint232,bytes13,(bytes11[2],address)),bytes11)", + "type": "((string,address,uint232,bytes13,(bytes11[2],address)),bytes11)", + "value": [ + [ + "Moo é🚀 Mé o🚀🚀éoMé🚀", + "0x8d22979c57D4e80eF0802835236030ea80240d95", + "2838412900522199062529706644270819314209494485025480226848652156286937", + "0xb879bec8eff3c289d3886ee508", + [ + ["0xe096dc94be5a910bc78491", "0x47ca26206dbd21c8610735"], + "0x06De5c24744896b2C311431968dBf925b85288bf" + ] + ], + "0x4c12b082be579d59b4276a" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 Mé o🚀🚀éoMé🚀" + }, + { + "type": "address", + "value": "0x8d22979c57D4e80eF0802835236030ea80240d95" + }, + { + "type": "number", + "value": "2838412900522199062529706644270819314209494485025480226848652156286937" + }, + { + "type": "hexstring", + "value": "0xb879bec8eff3c289d3886ee508" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xe096dc94be5a910bc78491" + }, + { + "type": "hexstring", + "value": "0x47ca26206dbd21c8610735" + } + ] + }, + { + "type": "address", + "value": "0x06De5c24744896b2C311431968dBf925b85288bf" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x4c12b082be579d59b4276a" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610351806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610219565b60405180910390f35b61005661014f565b61005e61014f565b61006661016f565b60006040518060600160405280602381526020016102f960239139825250738d22979c57d4e80ef0802835236030ea80240d9560208201527c6948578c7b977b514d404053e0ced4da3bb5ccdfe2b39efc3e3fad37d960408201526c170f37d91dfe78513a710ddca1609b1b60608201526100df6101a4565b6100e76101b3565b6ae096dc94be5a910bc7849160a81b81526a47ca26206dbd21c861073560a81b6020808301919091529082527306de5c24744896b2c311431968dbf925b85288bf8282015260808301919091529082526a260958415f2bceacda13b560a91b90820152919050565b604051806040016040528061016261016f565b8152600060209091015290565b6040805160a08101825260608082526000602083018190529282018390528101919091526080810161019f6101a4565b905290565b60405180604001604052806101625b60405180604001604052806002906020820280368337509192915050565b80518260005b60028110156102005782516001600160a81b0319168252602092830192909101906001016101d7565b505050602001516001600160a01b031660409190910152565b600060208083528351604082850152805160e0606086015280518061014087015260005b8181101561025a578281018501518782016101600152840161023d565b8181111561026d57600061016083890101525b50838301516001600160a01b031660808781019190915260408401516001600160e81b031660a0880152606084015172ffffffffffffffffffffffffffffffffffffff19811660c08901529301519291506102cb60e08701846101d1565b928601516001600160a81b03198116604087015292601f01601f191694909401610160019594505050505056fe4d6f6f20c3a9f09f9a8020204dc3a9206ff09f9a80f09f9a80c3a96f4dc3a9f09f9a80a26469706673582212208ac9a6ce4a42469256a1e8835a849c2f51544e0f90c17dd54a94777a8131f7ce64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d6618894 {\n bytes11[2] s_0;\n address s_1;\n }\n\n struct S_bf4d6bbf {\n string s_0;\n address s_1;\n uint232 s_2;\n bytes13 s_3;\n S_d6618894 s_4;\n }\n\n struct S_30995e7e {\n S_bf4d6bbf s_0;\n bytes11 s_1;\n }\n\n function test () public pure returns (S_30995e7e memory) {\n S_30995e7e memory r;\n {\n S_bf4d6bbf memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀 Mé o🚀🚀éoMé🚀\";\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0x8d22979c57D4e80eF0802835236030ea80240d95;\n r_0.s_1 = r_0_1;\n }\n {\n uint232 r_0_2 = 2838412900522199062529706644270819314209494485025480226848652156286937;\n r_0.s_2 = r_0_2;\n }\n {\n bytes13 r_0_3 = bytes13(0xb879bec8eff3c289d3886ee508);\n r_0.s_3 = r_0_3;\n }\n {\n S_d6618894 memory r_0_4;\n {\n bytes11[2] memory r_0_4_0;\n {\n bytes11 r_0_4_0_0 = bytes11(0xe096dc94be5a910bc78491);\n r_0_4_0[0] = r_0_4_0_0;\n }\n {\n bytes11 r_0_4_0_1 = bytes11(0x47ca26206dbd21c8610735);\n r_0_4_0[1] = r_0_4_0_1;\n }\n r_0_4.s_0 = r_0_4_0;\n }\n {\n address r_0_4_1 = 0x06De5c24744896b2C311431968dBf925b85288bf;\n r_0_4.s_1 = r_0_4_1;\n }\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n bytes11 r_1 = bytes11(0x4c12b082be579d59b4276a);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000404c12b082be579d59b4276a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000008d22979c57d4e80ef0802835236030ea80240d950000006948578c7b977b514d404053e0ced4da3bb5ccdfe2b39efc3e3fad37d9b879bec8eff3c289d3886ee50800000000000000000000000000000000000000e096dc94be5a910bc7849100000000000000000000000000000000000000000047ca26206dbd21c861073500000000000000000000000000000000000000000000000000000000000000000006de5c24744896b2c311431968dbf925b85288bf00000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a8020204dc3a9206ff09f9a80f09f9a80c3a96f4dc3a9f09f9a800000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((string,uint,address,address),bytes27,(string,int48),address)", + "type": "((string,uint,address,address),bytes27,(string,int48),address)", + "value": [ + [ + "Moo é🚀éo é M 🚀 🚀oé🚀🚀🚀M oMM🚀éMo éooooé 🚀éo🚀ééooMo 🚀o", + "66768853966608907939440017916308411990285636279724856577728652067134078908906", + "0xb406250e2FC6f17d7039ba448F2A6A0846d69C04", + "0x2afcB9F6f6D1698b79c87d509790Ba8A99E257de" + ], + "0xe7b1c09a84913a27a7613fcdd57d826382b56a2d673523b17a9db0", + ["Moo é🚀 o🚀 oooo🚀o oMoMMééé", "-16932806685125"], + "0x78838654D6beb1569E8116E9ec15F889A700bB31" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éo é M 🚀 🚀oé🚀🚀🚀M oMM🚀éMo éooooé 🚀éo🚀ééooMo 🚀o" + }, + { + "type": "number", + "value": "66768853966608907939440017916308411990285636279724856577728652067134078908906" + }, + { + "type": "address", + "value": "0xb406250e2FC6f17d7039ba448F2A6A0846d69C04" + }, + { + "type": "address", + "value": "0x2afcB9F6f6D1698b79c87d509790Ba8A99E257de" + } + ] + }, + { + "type": "hexstring", + "value": "0xe7b1c09a84913a27a7613fcdd57d826382b56a2d673523b17a9db0" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 o🚀 oooo🚀o oMoMMééé" + }, + { + "type": "number", + "value": "-16932806685125" + } + ] + }, + { + "type": "address", + "value": "0x78838654D6beb1569E8116E9ec15F889A700bB31" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103cf806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610263565b60405180910390f35b610056610172565b61005e610172565b6100666101b0565b60006040518060800160405280605e815260200161033c605e91398252507f939dd50612ad80b0229a9698f7a067613292c883720b994cb924573f8b7af9ea60208083019190915273b406250e2fc6f17d7039ba448f2a6a0846d69c04604080840191909152732afcb9f6f6d1698b79c87d509790ba8a99e257de6060808501919091529284527fe7b1c09a84913a27a7613fcdd57d826382b56a2d673523b17a9db00000000000848301528051808201909152918252600090820152600060405180606001604052806026815260200161031660269139825250650f6679ed71c419602082015260408201527378838654d6beb1569e8116e9ec15f889a700bb316060820152919050565b60405180608001604052806101856101b0565b8152600060208083018290526040805180820182526060808252928101849052908401529091015290565b6040518060800160405280606081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b6000815180845260005b81811015610210576020818501810151868301820152016101f4565b81811115610222576000602083870101525b50601f01601f19169290920160200192915050565b600081516040845261024c60408501826101ea565b60209384015160050b949093019390935250919050565b6020815260008251608060208401528051608060a08501526102896101208501826101ea565b60208381015160c08701526040808501516001600160a01b0390811660e0890152606090950151909416610100870152860151929091506102d39085018364ffffffffff19169052565b6040850151848203601f1901606086015291506102f08183610237565b915050606084015161030d60808501826001600160a01b03169052565b50939250505056fe4d6f6f20c3a9f09f9a80206ff09f9a80206f6f6f6ff09f9a806f206f4d6f4d4dc3a9c3a9c3a94d6f6f20c3a9f09f9a80c3a96f20c3a92020204d2020f09f9a8020f09f9a806fc3a9f09f9a80f09f9a80f09f9a804d206f4d4df09f9a80c3a94d6f20c3a96f6f6f6fc3a920f09f9a80c3a96ff09f9a80c3a9c3a96f6f4d6f20f09f9a806fa264697066735822122033322ea1a1c3488fa6ea824a13891cdbb3eae6ec3e583d176ac0ac005a352dad64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6f52caaa {\n string s_0;\n uint256 s_1;\n address s_2;\n address s_3;\n }\n\n struct S_cf620c3e {\n string s_0;\n int48 s_1;\n }\n\n struct S_11b43133 {\n S_6f52caaa s_0;\n bytes27 s_1;\n S_cf620c3e s_2;\n address s_3;\n }\n\n function test () public pure returns (S_11b43133 memory) {\n S_11b43133 memory r;\n {\n S_6f52caaa memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀éo é M 🚀 🚀oé🚀🚀🚀M oMM🚀éMo éooooé 🚀éo🚀ééooMo 🚀o\";\n r_0.s_0 = r_0_0;\n }\n {\n uint r_0_1 = 66768853966608907939440017916308411990285636279724856577728652067134078908906;\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0xb406250e2FC6f17d7039ba448F2A6A0846d69C04;\n r_0.s_2 = r_0_2;\n }\n {\n address r_0_3 = 0x2afcB9F6f6D1698b79c87d509790Ba8A99E257de;\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n bytes27 r_1 = bytes27(0xe7b1c09a84913a27a7613fcdd57d826382b56a2d673523b17a9db0);\n r.s_1 = r_1;\n }\n {\n S_cf620c3e memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀 o🚀 oooo🚀o oMoMMééé\";\n r_2.s_0 = r_2_0;\n }\n {\n int48 r_2_1 = -16932806685125;\n r_2.s_1 = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x78838654D6beb1569E8116E9ec15F889A700bB31;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080e7b1c09a84913a27a7613fcdd57d826382b56a2d673523b17a9db00000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000078838654d6beb1569e8116e9ec15f889a700bb310000000000000000000000000000000000000000000000000000000000000080939dd50612ad80b0229a9698f7a067613292c883720b994cb924573f8b7af9ea000000000000000000000000b406250e2fc6f17d7039ba448f2a6a0846d69c040000000000000000000000002afcb9f6f6d1698b79c87d509790ba8a99e257de000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a80c3a96f20c3a92020204d2020f09f9a8020f09f9a806fc3a9f09f9a80f09f9a80f09f9a804d206f4d4df09f9a80c3a94d6f20c3a96f6f6f6fc3a920f09f9a80c3a96ff09f9a80c3a9c3a96f6f4d6f20f09f9a806f00000000000000000000000000000000000000000000000000000000000000000040fffffffffffffffffffffffffffffffffffffffffffffffffffff09986128e3b00000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a80206ff09f9a80206f6f6f6ff09f9a806f206f4d6f4d4dc3a9c3a9c3a90000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((uint144,bool,bytes20),string,int,int16)[1][1]", + "type": "((uint144,bool,bytes20),string,int,int16)[1][1]", + "value": [ + [ + [ + [ + "9067031755659053629863433810711894300579225", + true, + "0x40aa6de8ac26d649a170a275baea07a619d16a67" + ], + "Moo é🚀🚀oééé o oMMéoo 🚀", + "28567295210658483976346150023327666654338466931537304496409687859866850055607", + "-17301" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "9067031755659053629863433810711894300579225" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x40aa6de8ac26d649a170a275baea07a619d16a67" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀oééé o oMMéoo 🚀" + }, + { + "type": "number", + "value": "28567295210658483976346150023327666654338466931537304496409687859866850055607" + }, + { + "type": "number", + "value": "-17301" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610341806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101be565b60405180910390f35b610056610137565b61005e610137565b610066610164565b6040805160e08101825260006080820181815260a0830182905260c08301829052825260606020808401829052838501839052818401839052845180830186527168159c8c7e4dc68eb5677214f97d257c559981526001818301527340aa6de8ac26d649a170a275baea07a619d16a6760601b818701528452845191820190945260248082529293919290916102e8908301396020830152507f3f28841f09ed54d68b78c0498add0a099b4a78a053e3a3ce658d2c79e79c55b7604082015261439419606082015281528152919050565b60405180602001604052806001905b61014e610164565b8152602001906001900390816101465790505090565b60405180602001604052806001905b6040805160e08101825260006080820181815260a0830182905260c0830182905282526060602080840182905293830182905282015282526000199092019101816101735790505090565b6020808252600090604083820181850186855b60018082106101e057506102da565b601f198985038101865283518589810160005b858110156102c35788820383528351805171ffffffffffffffffffffffffffffffffffff81511684528d81015115158e8501526bffffffffffffffffffffffff198d820151168d850152508c81015160c0606085015280518060c086015260005b81811015610273578f818401015160e082880101528f81019050610254565b8181111561028557600060e083880101525b508d8301516080860152606083015192506102a560a086018460010b9052565b958e0195948e0194601f0187169390930160e00192505085016101f3565b50978a0197965050509287019250506001016101d1565b509097965050505050505056fe4d6f6f20c3a9f09f9a80f09f9a806fc3a9c3a9c3a9206f206f4d4dc3a96f6f20f09f9a80a2646970667358221220271698aa28d08e89e77d3227004956f1ed61e185e3d674cac6526cbece7e691964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_85819eb0 {\n uint144 s_0;\n bool s_1;\n bytes20 s_2;\n }\n\n struct S_f43f3659 {\n S_85819eb0 s_0;\n string s_1;\n int256 s_2;\n int16 s_3;\n }\n\n function test () public pure returns (S_f43f3659[1][1] memory) {\n S_f43f3659[1][1] memory r;\n {\n S_f43f3659[1] memory r_0;\n {\n S_f43f3659 memory r_0_0;\n {\n S_85819eb0 memory r_0_0_0;\n {\n uint144 r_0_0_0_0 = 9067031755659053629863433810711894300579225;\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n bool r_0_0_0_1 = true;\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n bytes20 r_0_0_0_2 = bytes20(0x40aa6De8aC26D649A170A275BaEA07A619d16A67);\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n string memory r_0_0_1 = unicode\"Moo é🚀🚀oééé o oMMéoo 🚀\";\n r_0_0.s_1 = r_0_0_1;\n }\n {\n int r_0_0_2 = 28567295210658483976346150023327666654338466931537304496409687859866850055607;\n r_0_0.s_2 = r_0_0_2;\n }\n {\n int16 r_0_0_3 = -17301;\n r_0_0.s_3 = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000068159c8c7e4dc68eb5677214f97d257c5599000000000000000000000000000000000000000000000000000000000000000140aa6de8ac26d649a170a275baea07a619d16a6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000c03f28841f09ed54d68b78c0498add0a099b4a78a053e3a3ce658d2c79e79c55b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc6b00000000000000000000000000000000000000000000000000000000000000244d6f6f20c3a9f09f9a80f09f9a806fc3a9c3a9c3a9206f206f4d4dc3a96f6f20f09f9a8000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((uint88,(address,bytes9),string),bool,address,bytes31,address)", + "type": "((uint88,(address,bytes9),string),bool,address,bytes31,address)", + "value": [ + [ + "194094331012047082963149864", + ["0xE8a4Fd8f48821a64deB241dcF147F78D9d9E3B3D", "0xe41b93499f9154ec0a"], + "Moo é🚀" + ], + true, + "0xB64C741ecB6dAfFcD30e6Fb5Ac0D41e4555c332B", + "0x1ff17aa091d42e8fb3f2a866c114a033a7a0d1ae3982ff754ed099fc8e0be5", + "0x1AFf2C5cDbA799c293F1e11B039D4D0a05f9ef44" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "194094331012047082963149864" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xE8a4Fd8f48821a64deB241dcF147F78D9d9E3B3D" + }, + { + "type": "hexstring", + "value": "0xe41b93499f9154ec0a" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xB64C741ecB6dAfFcD30e6Fb5Ac0D41e4555c332B" + }, + { + "type": "hexstring", + "value": "0x1ff17aa091d42e8fb3f2a866c114a033a7a0d1ae3982ff754ed099fc8e0be5" + }, + { + "type": "address", + "value": "0x1AFf2C5cDbA799c293F1e11B039D4D0a05f9ef44" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102e3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101b6565b60405180910390f35b61005661013b565b61005e61013b565b610066610170565b6aa08d12c47c21c743a52428815260408051808201825273e8a4fd8f48821a64deb241dcf147f78d9d9e3b3d815268720dc9a4cfc8aa760560b91b6020808301919091528084019190915281518083018352600a8152689adede418753e13f3560b71b818301528284015291835260019183019190915273b64c741ecb6daffcd30e6fb5ac0d41e4555c332b908201527f1ff17aa091d42e8fb3f2a866c114a033a7a0d1ae3982ff754ed099fc8e0be5006060820152731aff2c5cdba799c293f1e11b039d4d0a05f9ef446080820152919050565b6040518060a0016040528061014e610170565b8152600060208201819052604082018190526060820181905260809091015290565b604051806060016040528060006affffffffffffffffffffff1681526020016101a9604080518082019091526000808252602082015290565b8152602001606081525090565b6020808252825160a08383015280516affffffffffffffffffffff1660c08401528082015180516001600160a01b031660e08501528201516001600160b81b031916610100840152604001516080610120840152805161014084018190526000929190835b81811015610238578281018401518682016101600152830161021b565b8181111561024b57600061016083880101525b509185015180151560408601529160408601516001600160a01b03811660608701529250606086015160ff1981166080870152925060808601516001600160a01b03811660a08701529250601f01601f1916939093016101600194935050505056fea2646970667358221220e11d8d5511bc4c1386d6e797c347fda0512852c0dc82ab5697bf5529a9fb5c1d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_001e72ea {\n address s_0;\n bytes9 s_1;\n }\n\n struct S_c146c6d7 {\n uint88 s_0;\n S_001e72ea s_1;\n string s_2;\n }\n\n struct S_8ff10bdd {\n S_c146c6d7 s_0;\n bool s_1;\n address s_2;\n bytes31 s_3;\n address s_4;\n }\n\n function test () public pure returns (S_8ff10bdd memory) {\n S_8ff10bdd memory r;\n {\n S_c146c6d7 memory r_0;\n {\n uint88 r_0_0 = 194094331012047082963149864;\n r_0.s_0 = r_0_0;\n }\n {\n S_001e72ea memory r_0_1;\n {\n address r_0_1_0 = 0xE8a4Fd8f48821a64deB241dcF147F78D9d9E3B3D;\n r_0_1.s_0 = r_0_1_0;\n }\n {\n bytes9 r_0_1_1 = bytes9(0xe41b93499f9154ec0a);\n r_0_1.s_1 = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀\";\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xB64C741ecB6dAfFcD30e6Fb5Ac0D41e4555c332B;\n r.s_2 = r_2;\n }\n {\n bytes31 r_3 = bytes31(0x1ff17aa091d42e8fb3f2a866c114a033a7a0d1ae3982ff754ed099fc8e0be5);\n r.s_3 = r_3;\n }\n {\n address r_4 = 0x1AFf2C5cDbA799c293F1e11B039D4D0a05f9ef44;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b64c741ecb6daffcd30e6fb5ac0d41e4555c332b1ff17aa091d42e8fb3f2a866c114a033a7a0d1ae3982ff754ed099fc8e0be5000000000000000000000000001aff2c5cdba799c293f1e11b039d4d0a05f9ef44000000000000000000000000000000000000000000a08d12c47c21c743a52428000000000000000000000000e8a4fd8f48821a64deb241dcf147f78d9d9e3b3de41b93499f9154ec0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,(((uint24),bytes9,bool),string[1])[4],bool)", + "type": "(address,(((uint24),bytes9,bool),string[1])[4],bool)", + "value": [ + "0x66bA5a206957cf524c500F1135b1e78f48bd04e7", + [ + [ + [["13339457"], "0x67b983826b98c2a99d", false], + ["Moo é🚀é ééo🚀🚀 🚀o M🚀🚀🚀éM🚀éééM 🚀🚀o🚀o🚀MMé éoMooMoMM🚀 oo o"] + ], + [ + [["13131039"], "0x0fb45b08971f7387ec", false], + ["Moo é🚀oMoMMéé oM🚀oéMo éoM oé M ééé🚀Mooéé🚀ooooooM"] + ], + [ + [["15844835"], "0xf654473c9801e41980", false], + ["Moo é🚀 🚀éMooM 🚀MM🚀oMo🚀M MoééMoéMMéMMM o🚀 éoo"] + ], + [ + [["5994685"], "0x3e56bea3ba21d5b9e0", false], + ["Moo é🚀oééo🚀 é🚀 oé🚀oooMM🚀 Mé🚀o oM🚀🚀éMoMoMo éo🚀🚀M é🚀oo Mo oo o🚀 "] + ] + ], + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x66bA5a206957cf524c500F1135b1e78f48bd04e7" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "13339457" + } + ] + }, + { + "type": "hexstring", + "value": "0x67b983826b98c2a99d" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é ééo🚀🚀 🚀o M🚀🚀🚀éM🚀éééM 🚀🚀o🚀o🚀MMé éoMooMoMM🚀 oo o" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "13131039" + } + ] + }, + { + "type": "hexstring", + "value": "0x0fb45b08971f7387ec" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMoMMéé oM🚀oéMo éoM oé M ééé🚀Mooéé🚀ooooooM" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "15844835" + } + ] + }, + { + "type": "hexstring", + "value": "0xf654473c9801e41980" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀éMooM 🚀MM🚀oMo🚀M MoééMoéMMéMMM o🚀 éoo" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "5994685" + } + ] + }, + { + "type": "hexstring", + "value": "0x3e56bea3ba21d5b9e0" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oééo🚀 é🚀 oé🚀oooMM🚀 Mé🚀o oM🚀🚀éMoMoMo éo🚀🚀M é🚀oo Mo oo o🚀 " + } + ] + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061060f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061034f565b60405180910390f35b610056610292565b61005e610292565b7366ba5a206957cf524c500f1135b1e78f48bd04e7815261007d6102c2565b6100856102ef565b6040805160808101825260006060820181815282526020808301828152838501838152855192830190955262cb8b4182529083526867b983826b98c2a99d60b81b905290915281526100d5610328565b60006040518060a001604052806067815260200161057360679139825250602082015281526101026102ef565b6040805160808101825260006060820181815282526020808301828152838501838152855192830190955262c85d1f82529083526803ed16c225c7dce1fb60ba1b90529091528152610152610328565b60006040518060800160405280604c8152602001610475604c91398252506020828101919091528201526101846102ef565b6040805160808101825260006060820181815282526020808301828152838501838152855192830190955262f1c5e382529083526801eca88e793003c83360bf1b905290915281526101d4610328565b600060405180608001604052806046815260200161052d60469139825250602082015260408201526102046102ef565b60408051608081018252600060608201818152825260208083018281528385018381528551928301909552625b78bd82529083526801f2b5f51dd10eadcf60bd1b90529091528152610254610328565b60006040518060a00160405280606c81526020016104c1606c9139825250602082810191909152606083019190915282015260016040820152919050565b604051806060016040528060006001600160a01b031681526020016102b56102c2565b8152600060209091015290565b60405180608001604052806004905b6102d96102ef565b8152602001906001900390816102d15790505090565b6040805160c081018252600060a0820181815292820192835260608201819052608082015290815260208101610323610328565b905290565b60405180602001604052806001905b60608152602001906001900390816103375790505090565b602080825282516001600160a01b0316828201528281015160606040808501919091526000929160809161010086019190838701865b600481101561045557607f19898603810183528451805180515162ffffff168852898101516001600160b81b0319168a8901528501511515858801528801516060870188905260a0870188880160005b600181101561043e57848a84030182528351805180855260005b8181101561040d578e81840101518f82880101528e810190506103ef565b8181111561041e5760008f83880101525b50948d0194601f01601f1916939093018c019250908b01906001016103d5565b509097505050938701935090860190600101610385565b50508701518015156060880152935061046b9050565b9594505050505056fe4d6f6f20c3a9f09f9a806f4d6f4d4dc3a9c3a9206f4df09f9a806fc3a94d6f2020c3a96f4d206fc3a920204d20202020c3a9c3a9c3a9f09f9a804d6f6fc3a9c3a9f09f9a806f6f6f6f6f6f4d4d6f6f20c3a9f09f9a806fc3a9c3a96ff09f9a8020c3a9f09f9a8020206fc3a9f09f9a806f6f6f4d4df09f9a80204dc3a9f09f9a806f206f4df09f9a80f09f9a80c3a94d6f4d6f4d6f20c3a96ff09f9a80f09f9a804d20c3a9f09f9a806f6f204d6f206f6f206ff09f9a80204d6f6f20c3a9f09f9a8020f09f9a80c3a94d6f6f4d20f09f9a804d4df09f9a806f4d6ff09f9a804d204d6fc3a9c3a94d6fc3a94d4dc3a94d4d4d206ff09f9a802020c3a96f6f4d6f6f20c3a9f09f9a80c3a920c3a9c3a96ff09f9a80f09f9a8020f09f9a806f204df09f9a80f09f9a80f09f9a80c3a94df09f9a80c3a9c3a9c3a94d20f09f9a80f09f9a806ff09f9a806ff09f9a804d4dc3a920c3a96f4d6f6f4d6f4d4df09f9a80206f6f206fa264697066735822122062d429ecb7cd1b7a5609a99cd696f1db39dfba2e48bdfa69481da0d4d59dded964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5f492329 {\n uint24 s_0;\n }\n\n struct S_91d79ad1 {\n S_5f492329 s_0;\n bytes9 s_1;\n bool s_2;\n }\n\n struct S_7a2cbdac {\n S_91d79ad1 s_0;\n string[1] s_1;\n }\n\n struct S_68c90567 {\n address s_0;\n S_7a2cbdac[4] s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_68c90567 memory) {\n S_68c90567 memory r;\n {\n address r_0 = 0x66bA5a206957cf524c500F1135b1e78f48bd04e7;\n r.s_0 = r_0;\n }\n {\n S_7a2cbdac[4] memory r_1;\n {\n S_7a2cbdac memory r_1_0;\n {\n S_91d79ad1 memory r_1_0_0;\n {\n S_5f492329 memory r_1_0_0_0;\n {\n uint24 r_1_0_0_0_0 = 13339457;\n r_1_0_0_0.s_0 = r_1_0_0_0_0;\n }\n r_1_0_0.s_0 = r_1_0_0_0;\n }\n {\n bytes9 r_1_0_0_1 = bytes9(0x67b983826b98c2a99d);\n r_1_0_0.s_1 = r_1_0_0_1;\n }\n {\n bool r_1_0_0_2 = false;\n r_1_0_0.s_2 = r_1_0_0_2;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n string[1] memory r_1_0_1;\n {\n string memory r_1_0_1_0 = unicode\"Moo é🚀é ééo🚀🚀 🚀o M🚀🚀🚀éM🚀éééM 🚀🚀o🚀o🚀MMé éoMooMoMM🚀 oo o\";\n r_1_0_1[0] = r_1_0_1_0;\n }\n r_1_0.s_1 = r_1_0_1;\n }\n r_1[0] = r_1_0;\n }\n {\n S_7a2cbdac memory r_1_1;\n {\n S_91d79ad1 memory r_1_1_0;\n {\n S_5f492329 memory r_1_1_0_0;\n {\n uint24 r_1_1_0_0_0 = 13131039;\n r_1_1_0_0.s_0 = r_1_1_0_0_0;\n }\n r_1_1_0.s_0 = r_1_1_0_0;\n }\n {\n bytes9 r_1_1_0_1 = bytes9(0x0fb45b08971f7387ec);\n r_1_1_0.s_1 = r_1_1_0_1;\n }\n {\n bool r_1_1_0_2 = false;\n r_1_1_0.s_2 = r_1_1_0_2;\n }\n r_1_1.s_0 = r_1_1_0;\n }\n {\n string[1] memory r_1_1_1;\n {\n string memory r_1_1_1_0 = unicode\"Moo é🚀oMoMMéé oM🚀oéMo éoM oé M ééé🚀Mooéé🚀ooooooM\";\n r_1_1_1[0] = r_1_1_1_0;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n r_1[1] = r_1_1;\n }\n {\n S_7a2cbdac memory r_1_2;\n {\n S_91d79ad1 memory r_1_2_0;\n {\n S_5f492329 memory r_1_2_0_0;\n {\n uint24 r_1_2_0_0_0 = 15844835;\n r_1_2_0_0.s_0 = r_1_2_0_0_0;\n }\n r_1_2_0.s_0 = r_1_2_0_0;\n }\n {\n bytes9 r_1_2_0_1 = bytes9(0xf654473c9801e41980);\n r_1_2_0.s_1 = r_1_2_0_1;\n }\n {\n bool r_1_2_0_2 = false;\n r_1_2_0.s_2 = r_1_2_0_2;\n }\n r_1_2.s_0 = r_1_2_0;\n }\n {\n string[1] memory r_1_2_1;\n {\n string memory r_1_2_1_0 = unicode\"Moo é🚀 🚀éMooM 🚀MM🚀oMo🚀M MoééMoéMMéMMM o🚀 éoo\";\n r_1_2_1[0] = r_1_2_1_0;\n }\n r_1_2.s_1 = r_1_2_1;\n }\n r_1[2] = r_1_2;\n }\n {\n S_7a2cbdac memory r_1_3;\n {\n S_91d79ad1 memory r_1_3_0;\n {\n S_5f492329 memory r_1_3_0_0;\n {\n uint24 r_1_3_0_0_0 = 5994685;\n r_1_3_0_0.s_0 = r_1_3_0_0_0;\n }\n r_1_3_0.s_0 = r_1_3_0_0;\n }\n {\n bytes9 r_1_3_0_1 = bytes9(0x3e56bea3ba21d5b9e0);\n r_1_3_0.s_1 = r_1_3_0_1;\n }\n {\n bool r_1_3_0_2 = false;\n r_1_3_0.s_2 = r_1_3_0_2;\n }\n r_1_3.s_0 = r_1_3_0;\n }\n {\n string[1] memory r_1_3_1;\n {\n string memory r_1_3_1_0 = unicode\"Moo é🚀oééo🚀 é🚀 oé🚀oooMM🚀 Mé🚀o oM🚀🚀éMoMoMo éo🚀🚀M é🚀oo Mo oo o🚀 \";\n r_1_3_1[0] = r_1_3_1_0;\n }\n r_1_3.s_1 = r_1_3_1;\n }\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000066ba5a206957cf524c500f1135b1e78f48bd04e700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000cb8b4167b983826b98c2a99d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000674d6f6f20c3a9f09f9a80c3a920c3a9c3a96ff09f9a80f09f9a8020f09f9a806f204df09f9a80f09f9a80f09f9a80c3a94df09f9a80c3a9c3a9c3a94d20f09f9a80f09f9a806ff09f9a806ff09f9a804d4dc3a920c3a96f4d6f6f4d6f4d4df09f9a80206f6f206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c85d1f0fb45b08971f7387ec0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a806f4d6f4d4dc3a9c3a9206f4df09f9a806fc3a94d6f2020c3a96f4d206fc3a920204d20202020c3a9c3a9c3a9f09f9a804d6f6fc3a9c3a9f09f9a806f6f6f6f6f6f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c5e3f654473c9801e41980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a8020f09f9a80c3a94d6f6f4d20f09f9a804d4df09f9a806f4d6ff09f9a804d204d6fc3a9c3a94d6fc3a94d4dc3a94d4d4d206ff09f9a802020c3a96f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b78bd3e56bea3ba21d5b9e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006c4d6f6f20c3a9f09f9a806fc3a9c3a96ff09f9a8020c3a9f09f9a8020206fc3a9f09f9a806f6f6f4d4df09f9a80204dc3a9f09f9a806f206f4df09f9a80f09f9a80c3a94d6f4d6f4d6f20c3a96ff09f9a80f09f9a804d20c3a9f09f9a806f6f204d6f206f6f206ff09f9a80200000000000000000000000000000000000000000" + }, + { + "name": "random-(address,(int216,uint200,uint96,uint200),bytes29,string[3])", + "type": "(address,(int216,uint200,uint96,uint200),bytes29,string[3])", + "value": [ + "0x678df334Ba8da0FD78688dcf7f8c3fBe23860677", + [ + "46290399045905366554812474880761640464388286707512864326073909930", + "1080570127304895424951836995658967530290187129649985549116866", + "66272978557032210643106346708", + "615014293309735869342754942219306179503794230942824001229351" + ], + "0x8350ed9a0e52228929fcc0bc778925beff10a9496328719a6727da5f50", + [ + "Moo é🚀oo é o 🚀o🚀🚀oéMo🚀o🚀MéoM 🚀é éMooM", + "Moo é🚀🚀MM🚀 éo o🚀oo M oé", + "Moo é🚀o🚀éé oMMMoo éo" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x678df334Ba8da0FD78688dcf7f8c3fBe23860677" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "46290399045905366554812474880761640464388286707512864326073909930" + }, + { + "type": "number", + "value": "1080570127304895424951836995658967530290187129649985549116866" + }, + { + "type": "number", + "value": "66272978557032210643106346708" + }, + { + "type": "number", + "value": "615014293309735869342754942219306179503794230942824001229351" + } + ] + }, + { + "type": "hexstring", + "value": "0x8350ed9a0e52228929fcc0bc778925beff10a9496328719a6727da5f50" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo é o 🚀o🚀🚀oéMo🚀o🚀MéoM 🚀é éMooM" + }, + { + "type": "string", + "value": "Moo é🚀🚀MM🚀 éo o🚀oo M oé" + }, + { + "type": "string", + "value": "Moo é🚀o🚀éé oMMMoo éo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103c7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610299565b60405180910390f35b6100566101a5565b61005e6101a5565b73678df334ba8da0fd78688dcf7f8c3fbe238606778152604080516080810182527a708696073f7d4e96131cec14cc38c68dc1134f6d70957fa98702aa815278ac250e870a54c15ae2d7351ff8b431c4ae0350b719371625c26020808301919091526bd623b9166e549e67582b36d4828401527861fa38d35c4d2fb89ae84a011daf0df023766c0b89978cd22760608301528301527f8350ed9a0e52228929fcc0bc778925beff10a9496328719a6727da5f50000000908201526101206101f0565b600060405180606001604052806040815260200161032a60409139825250604080516060810190915260288082526000919061036a60208301396020838101919091526040805180820182528281527f4d6f6f20c3a9f09f9a806ff09f9a80c3a9c3a920206f4d4d4d6f6f2020c3a96f92810192909252830152506060820152919050565b60408051608080820183526000808352835191820184528082526020828101829052938201819052606082015290918201908152600060208201526040016101eb6101f0565b905290565b60405180606001604052806003905b60608152602001906001900390816101ff5790505090565b60008260608101836000805b600381101561028d57848403885282518051808652835b818110156102565760208184018101518883018201520161023a565b818111156102675784602083890101525b506020998a0199601f91909101601f191695909501850194939093019250600101610223565b50919695505050505050565b602080825282516001600160a01b031682820152828101518051601a0b604080850191909152918101516001600160c81b03908116606080860191909152838301516bffffffffffffffffffffffff166080860152918201511660a08401529083015162ffffff191660c083015282015160e080830152600090610321610100840182610217565b94935050505056fe4d6f6f20c3a9f09f9a806f6f20c3a9206f20f09f9a806ff09f9a80f09f9a806fc3a94d6ff09f9a806ff09f9a804dc3a96f4d20f09f9a80c3a920c3a94d6f6f4d4d6f6f20c3a9f09f9a80f09f9a804d4df09f9a80202020c3a96f206ff09f9a806f6f204d206fc3a9a2646970667358221220194296423836e83bd21062c0f91c289d1045a99c87a49d2feb6763580f66701264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e3a4b216 {\n int216 s_0;\n uint200 s_1;\n uint96 s_2;\n uint200 s_3;\n }\n\n struct S_f79c2ea7 {\n address s_0;\n S_e3a4b216 s_1;\n bytes29 s_2;\n string[3] s_3;\n }\n\n function test () public pure returns (S_f79c2ea7 memory) {\n S_f79c2ea7 memory r;\n {\n address r_0 = 0x678df334Ba8da0FD78688dcf7f8c3fBe23860677;\n r.s_0 = r_0;\n }\n {\n S_e3a4b216 memory r_1;\n {\n int216 r_1_0 = 46290399045905366554812474880761640464388286707512864326073909930;\n r_1.s_0 = r_1_0;\n }\n {\n uint200 r_1_1 = 1080570127304895424951836995658967530290187129649985549116866;\n r_1.s_1 = r_1_1;\n }\n {\n uint96 r_1_2 = 66272978557032210643106346708;\n r_1.s_2 = r_1_2;\n }\n {\n uint200 r_1_3 = 615014293309735869342754942219306179503794230942824001229351;\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n bytes29 r_2 = bytes29(0x8350ed9a0e52228929fcc0bc778925beff10a9496328719a6727da5f50);\n r.s_2 = r_2;\n }\n {\n string[3] memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀oo é o 🚀o🚀🚀oéMo🚀o🚀MéoM 🚀é éMooM\";\n r_3[0] = r_3_0;\n }\n {\n string memory r_3_1 = unicode\"Moo é🚀🚀MM🚀 éo o🚀oo M oé\";\n r_3[1] = r_3_1;\n }\n {\n string memory r_3_2 = unicode\"Moo é🚀o🚀éé oMMMoo éo\";\n r_3[2] = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000678df334ba8da0fd78688dcf7f8c3fbe238606770000000000708696073f7d4e96131cec14cc38c68dc1134f6d70957fa98702aa00000000000000ac250e870a54c15ae2d7351ff8b431c4ae0350b719371625c20000000000000000000000000000000000000000d623b9166e549e67582b36d40000000000000061fa38d35c4d2fb89ae84a011daf0df023766c0b89978cd2278350ed9a0e52228929fcc0bc778925beff10a9496328719a6727da5f5000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000404d6f6f20c3a9f09f9a806f6f20c3a9206f20f09f9a806ff09f9a80f09f9a806fc3a94d6ff09f9a806ff09f9a804dc3a96f4d20f09f9a80c3a920c3a94d6f6f4d00000000000000000000000000000000000000000000000000000000000000284d6f6f20c3a9f09f9a80f09f9a804d4df09f9a80202020c3a96f206ff09f9a806f6f204d206fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000204d6f6f20c3a9f09f9a806ff09f9a80c3a9c3a920206f4d4d4d6f6f2020c3a96f" + }, + { + "name": "random-(address,address,bool[1],address,address[4])[3]", + "type": "(address,address,bool[1],address,address[4])[3]", + "value": [ + [ + "0x7ADcB8f70108492f1bf0a57984d266b9925a3DDa", + "0x8f0dDb76a929b33dd474988932cAa87d18a7a843", + [false], + "0x11904dEf965341dF82c34Af362439f18dAfC7e1E", + [ + "0x71C820ca0D4ee70dB5486A1d8271F97521501f23", + "0x3fCb4aA745472633921eA4a52bdfd28De73848f1", + "0x8Bb622E3114709d0E184558CF92B71f70a2f3b5b", + "0x41466EB5a2101Eac5C8796b80C6A2eE11c94BE87" + ] + ], + [ + "0xBFD64142737151eBdd34d9B500d591B93e98053E", + "0x8EED4Ec330B95eff212d5A6cAbf5bbfC78C9505b", + [true], + "0x8FceA37b332DFb49c312e09421C29370cF627Dde", + [ + "0x27ce5F5D2035F5d0d2edf35c5572B79F2E9D24B5", + "0x2A5cc186c0819F380770F6b413E0eF050696196A", + "0x52660Fb2E6c0fd0c5645926de8488935B305C52C", + "0x45Cb277888a15B24Fa4712a3E247650A126FbE1d" + ] + ], + [ + "0xdd998a25e81b2Fd8f5779D895E0D62aC206AB3CF", + "0x466360bD8D745E59FA4F834A0Ae027E55762968d", + [true], + "0xeAb861a90e2513bA57E5ef3d20e396C694b2Ec57", + [ + "0x5b7918F7B4962B1100245e073585dCC44A0CD66F", + "0x34bb9A405401DEDF14548029411b72ee6Ab4e8A4", + "0x7b6d866a8D19dD9e2a5386A6E2367C7D58ef4D17", + "0x8e76BF0cE5C99Fd803cDb5407096D45980644AE4" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x7ADcB8f70108492f1bf0a57984d266b9925a3DDa" + }, + { + "type": "address", + "value": "0x8f0dDb76a929b33dd474988932cAa87d18a7a843" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x11904dEf965341dF82c34Af362439f18dAfC7e1E" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x71C820ca0D4ee70dB5486A1d8271F97521501f23" + }, + { + "type": "address", + "value": "0x3fCb4aA745472633921eA4a52bdfd28De73848f1" + }, + { + "type": "address", + "value": "0x8Bb622E3114709d0E184558CF92B71f70a2f3b5b" + }, + { + "type": "address", + "value": "0x41466EB5a2101Eac5C8796b80C6A2eE11c94BE87" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xBFD64142737151eBdd34d9B500d591B93e98053E" + }, + { + "type": "address", + "value": "0x8EED4Ec330B95eff212d5A6cAbf5bbfC78C9505b" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0x8FceA37b332DFb49c312e09421C29370cF627Dde" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x27ce5F5D2035F5d0d2edf35c5572B79F2E9D24B5" + }, + { + "type": "address", + "value": "0x2A5cc186c0819F380770F6b413E0eF050696196A" + }, + { + "type": "address", + "value": "0x52660Fb2E6c0fd0c5645926de8488935B305C52C" + }, + { + "type": "address", + "value": "0x45Cb277888a15B24Fa4712a3E247650A126FbE1d" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xdd998a25e81b2Fd8f5779D895E0D62aC206AB3CF" + }, + { + "type": "address", + "value": "0x466360bD8D745E59FA4F834A0Ae027E55762968d" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0xeAb861a90e2513bA57E5ef3d20e396C694b2Ec57" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x5b7918F7B4962B1100245e073585dCC44A0CD66F" + }, + { + "type": "address", + "value": "0x34bb9A405401DEDF14548029411b72ee6Ab4e8A4" + }, + { + "type": "address", + "value": "0x7b6d866a8D19dD9e2a5386A6E2367C7D58ef4D17" + }, + { + "type": "address", + "value": "0x8e76BF0cE5C99Fd803cDb5407096D45980644AE4" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104b7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906103ce565b60405180910390f35b6100566102fb565b61005e6102fb565b610066610328565b737adcb8f70108492f1bf0a57984d266b9925a3dda8152738f0ddb76a929b33dd474988932caa87d18a7a843602082015261009f610360565b6000815260408201527311904def965341df82c34af362439f18dafc7e1e60608201526100ca61037e565b7371c820ca0d4ee70db5486a1d8271f97521501f238152733fcb4aa745472633921ea4a52bdfd28de73848f16020820152738bb622e3114709d0e184558cf92b71f70a2f3b5b60408201527341466eb5a2101eac5c8796b80c6a2ee11c94be8760608201526080820152815261013e610328565b73bfd64142737151ebdd34d9b500d591b93e98053e8152738eed4ec330b95eff212d5a6cabf5bbfc78c9505b6020820152610177610360565b600181526040820152738fcea37b332dfb49c312e09421c29370cf627dde60608201526101a261037e565b7327ce5f5d2035f5d0d2edf35c5572b79f2e9d24b58152732a5cc186c0819f380770f6b413e0ef050696196a6020808301919091527352660fb2e6c0fd0c5645926de8488935b305c52c60408301527345cb277888a15b24fa4712a3e247650a126fbe1d6060830152608083019190915282015261021e610328565b73dd998a25e81b2fd8f5779d895e0d62ac206ab3cf815273466360bd8d745e59fa4f834a0ae027e55762968d6020820152610257610360565b60018152604082015273eab861a90e2513ba57e5ef3d20e396c694b2ec57606082015261028261037e565b735b7918f7b4962b1100245e073585dcc44a0cd66f81527334bb9a405401dedf14548029411b72ee6ab4e8a46020820152737b6d866a8d19dd9e2a5386a6e2367c7d58ef4d17604080830191909152738e76bf0ce5c99fd803cdb5407096d45980644ae460608301526080830191909152820152919050565b60405180606001604052806003905b610312610328565b81526020019060019003908161030a5790505090565b6040805160a08101825260008082526020820152908101610347610360565b81526000602082015260400161035b61037e565b905290565b60405180602001604052806001906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b8060005b60048110156103c85781516001600160a01b03168452602093840193909101906001016103a0565b50505050565b610300810181836000805b600381101561047757825180516001600160a01b039081168652602080830151909116818701526040808301519087019190855b600181101561042c57815115158452928201929082019060010161040d565b5050606091508183015161044a838901826001600160a01b03169052565b506080928301519291506104608783018461039c565b6101009690960195949094019350506001016103d9565b505050509291505056fea26469706673582212207b030266c8e91a115445b83312fb9734218da39b89534377b10c03e23fc5b04164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7ad34f60 {\n address s_0;\n address s_1;\n bool[1] s_2;\n address s_3;\n address[4] s_4;\n }\n\n function test () public pure returns (S_7ad34f60[3] memory) {\n S_7ad34f60[3] memory r;\n {\n S_7ad34f60 memory r_0;\n {\n address r_0_0 = 0x7ADcB8f70108492f1bf0a57984d266b9925a3DDa;\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0x8f0dDb76a929b33dd474988932cAa87d18a7a843;\n r_0.s_1 = r_0_1;\n }\n {\n bool[1] memory r_0_2;\n {\n bool r_0_2_0 = false;\n r_0_2[0] = r_0_2_0;\n }\n r_0.s_2 = r_0_2;\n }\n {\n address r_0_3 = 0x11904dEf965341dF82c34Af362439f18dAfC7e1E;\n r_0.s_3 = r_0_3;\n }\n {\n address[4] memory r_0_4;\n {\n address r_0_4_0 = 0x71C820ca0D4ee70dB5486A1d8271F97521501f23;\n r_0_4[0] = r_0_4_0;\n }\n {\n address r_0_4_1 = 0x3fCb4aA745472633921eA4a52bdfd28De73848f1;\n r_0_4[1] = r_0_4_1;\n }\n {\n address r_0_4_2 = 0x8Bb622E3114709d0E184558CF92B71f70a2f3b5b;\n r_0_4[2] = r_0_4_2;\n }\n {\n address r_0_4_3 = 0x41466EB5a2101Eac5C8796b80C6A2eE11c94BE87;\n r_0_4[3] = r_0_4_3;\n }\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_7ad34f60 memory r_1;\n {\n address r_1_0 = 0xBFD64142737151eBdd34d9B500d591B93e98053E;\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0x8EED4Ec330B95eff212d5A6cAbf5bbfC78C9505b;\n r_1.s_1 = r_1_1;\n }\n {\n bool[1] memory r_1_2;\n {\n bool r_1_2_0 = true;\n r_1_2[0] = r_1_2_0;\n }\n r_1.s_2 = r_1_2;\n }\n {\n address r_1_3 = 0x8FceA37b332DFb49c312e09421C29370cF627Dde;\n r_1.s_3 = r_1_3;\n }\n {\n address[4] memory r_1_4;\n {\n address r_1_4_0 = 0x27ce5F5D2035F5d0d2edf35c5572B79F2E9D24B5;\n r_1_4[0] = r_1_4_0;\n }\n {\n address r_1_4_1 = 0x2A5cc186c0819F380770F6b413E0eF050696196A;\n r_1_4[1] = r_1_4_1;\n }\n {\n address r_1_4_2 = 0x52660Fb2E6c0fd0c5645926de8488935B305C52C;\n r_1_4[2] = r_1_4_2;\n }\n {\n address r_1_4_3 = 0x45Cb277888a15B24Fa4712a3E247650A126FbE1d;\n r_1_4[3] = r_1_4_3;\n }\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n {\n S_7ad34f60 memory r_2;\n {\n address r_2_0 = 0xdd998a25e81b2Fd8f5779D895E0D62aC206AB3CF;\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0x466360bD8D745E59FA4F834A0Ae027E55762968d;\n r_2.s_1 = r_2_1;\n }\n {\n bool[1] memory r_2_2;\n {\n bool r_2_2_0 = true;\n r_2_2[0] = r_2_2_0;\n }\n r_2.s_2 = r_2_2;\n }\n {\n address r_2_3 = 0xeAb861a90e2513bA57E5ef3d20e396C694b2Ec57;\n r_2.s_3 = r_2_3;\n }\n {\n address[4] memory r_2_4;\n {\n address r_2_4_0 = 0x5b7918F7B4962B1100245e073585dCC44A0CD66F;\n r_2_4[0] = r_2_4_0;\n }\n {\n address r_2_4_1 = 0x34bb9A405401DEDF14548029411b72ee6Ab4e8A4;\n r_2_4[1] = r_2_4_1;\n }\n {\n address r_2_4_2 = 0x7b6d866a8D19dD9e2a5386A6E2367C7D58ef4D17;\n r_2_4[2] = r_2_4_2;\n }\n {\n address r_2_4_3 = 0x8e76BF0cE5C99Fd803cDb5407096D45980644AE4;\n r_2_4[3] = r_2_4_3;\n }\n r_2.s_4 = r_2_4;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000007adcb8f70108492f1bf0a57984d266b9925a3dda0000000000000000000000008f0ddb76a929b33dd474988932caa87d18a7a843000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011904def965341df82c34af362439f18dafc7e1e00000000000000000000000071c820ca0d4ee70db5486a1d8271f97521501f230000000000000000000000003fcb4aa745472633921ea4a52bdfd28de73848f10000000000000000000000008bb622e3114709d0e184558cf92b71f70a2f3b5b00000000000000000000000041466eb5a2101eac5c8796b80c6a2ee11c94be87000000000000000000000000bfd64142737151ebdd34d9b500d591b93e98053e0000000000000000000000008eed4ec330b95eff212d5a6cabf5bbfc78c9505b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000008fcea37b332dfb49c312e09421c29370cf627dde00000000000000000000000027ce5f5d2035f5d0d2edf35c5572b79f2e9d24b50000000000000000000000002a5cc186c0819f380770f6b413e0ef050696196a00000000000000000000000052660fb2e6c0fd0c5645926de8488935b305c52c00000000000000000000000045cb277888a15b24fa4712a3e247650a126fbe1d000000000000000000000000dd998a25e81b2fd8f5779d895e0d62ac206ab3cf000000000000000000000000466360bd8d745e59fa4f834a0ae027e55762968d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000eab861a90e2513ba57e5ef3d20e396c694b2ec570000000000000000000000005b7918f7b4962b1100245e073585dcc44a0cd66f00000000000000000000000034bb9a405401dedf14548029411b72ee6ab4e8a40000000000000000000000007b6d866a8d19dd9e2a5386a6e2367c7d58ef4d170000000000000000000000008e76bf0ce5c99fd803cdb5407096d45980644ae4" + }, + { + "name": "random-(address,bytes13[4],(int224,int48,string,address)[3])", + "type": "(address,bytes13[4],(int224,int48,string,address)[3])", + "value": [ + "0x0Ab7f4c6136b548CB879794bBA7705EE97eCa4b0", + [ + "0x413852dafbc99e9b3ff5e2f676", + "0xe3207d8450f7053eb7ae18f37b", + "0xc86e1d81f0c9fda8ba09e492a4", + "0x2805819342c571073243efb1c5" + ], + [ + [ + "-9126611069876381136405307087252671529711504088487379034355811254555", + "22648470963180", + "Moo é🚀Moé🚀🚀M", + "0x668B02c4aBebe4EaA8c40E248F2973198A86de60" + ], + [ + "-6847962842297952587977242037022751437766005526662635720830195357826", + "56716923755462", + "Moo é🚀oM🚀 ééMoo 🚀MoéoMMéM🚀 ooo🚀éMM🚀é🚀oooo ", + "0x2C388C7e57AbE7F0632Cc4E262D704FA2F288d34" + ], + [ + "9396533063052311062202573379054850815756278619986607236313145615487", + "-131765720050511", + "Moo é🚀 o🚀oé 🚀", + "0x355Bde9CDF9d696498e0ccec29d1d82f7926991E" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x0Ab7f4c6136b548CB879794bBA7705EE97eCa4b0" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x413852dafbc99e9b3ff5e2f676" + }, + { + "type": "hexstring", + "value": "0xe3207d8450f7053eb7ae18f37b" + }, + { + "type": "hexstring", + "value": "0xc86e1d81f0c9fda8ba09e492a4" + }, + { + "type": "hexstring", + "value": "0x2805819342c571073243efb1c5" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-9126611069876381136405307087252671529711504088487379034355811254555" + }, + { + "type": "number", + "value": "22648470963180" + }, + { + "type": "string", + "value": "Moo é🚀Moé🚀🚀M" + }, + { + "type": "address", + "value": "0x668B02c4aBebe4EaA8c40E248F2973198A86de60" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-6847962842297952587977242037022751437766005526662635720830195357826" + }, + { + "type": "number", + "value": "56716923755462" + }, + { + "type": "string", + "value": "Moo é🚀oM🚀 ééMoo 🚀MoéoMMéM🚀 ooo🚀éMM🚀é🚀oooo " + }, + { + "type": "address", + "value": "0x2C388C7e57AbE7F0632Cc4E262D704FA2F288d34" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "9396533063052311062202573379054850815756278619986607236313145615487" + }, + { + "type": "number", + "value": "-131765720050511" + }, + { + "type": "string", + "value": "Moo é🚀 o🚀oé 🚀" + }, + { + "type": "address", + "value": "0x355Bde9CDF9d696498e0ccec29d1d82f7926991E" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104fc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610358565b60405180910390f35b6100566102be565b61005e6102be565b730ab7f4c6136b548cb879794bba7705ee97eca4b0815261007d6102f3565b6c209c296d7de4cf4d9ffaf17b3b60991b81526ce3207d8450f7053eb7ae18f37b60981b6020808301919091526c321b87607c327f6a2e827924a9609a1b60408301526c2805819342c571073243efb1c560981b60608301528201526100e1610311565b6040805160808082018352606082840181815260008285018181527fffffffffa9566ffcda515ea1a66ac6083119dc7a448297515184b7f971f77ee58652651499421103ec60208088019190915287518089018952601781527f4d6f6f20c3a9f09f9a804d6fc3a9f09f9a80f09f9a804d0000000000000000008183015290935273668b02c4abebe4eaa8c40e248f2973198a86de609052938652845180840186528086018390529182018490527fffffffffbef98642d1e878a89a9d05f520991af1688bf6a287a5b82c0d8ba77e82526533957017dbc68282015284519283019094526048808352909361047f90830139604083015250732c388c7e57abe7f0632cc4e262d704fa2f288d346060820152808260016020020152506102286040805160808101825260008082526020820181905260609282018390529181019190915290565b7b5939b4e18b31c55406a9d344a7be443c825e244aafb956595dcb247f81526577d718efeb4e19602080830191909152604080518082018252601881527f4d6f6f20c3a9f09f9a80206ff09f9a806fc3a920f09f9a8000000000000000009281019290925282015273355bde9cdf9d696498e0ccec29d1d82f7926991e6060820152808260026020020152506040820152919050565b604051806060016040528060006001600160a01b031681526020016102e16102f3565b81526020016102ee610311565b905290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003905b604080516080810182526000808252602080830182905260609383018490529282015282526000199092019101816103205790505090565b602080825282516001600160a01b031682820152828101516000919060e08401906040808601855b60048110156103b357835172ffffffffffffffffffffffffffffffffffffff191682529285019290850190600101610380565b50508681015160c08781015261014087019390925060005b60038110156104715760df19888603018252835160808151601b0b87528782015160050b88880152848201518186890152805180838a0152600092505b80831015610426578183018a015189840160a0015291890191610408565b8083111561043857600060a0828b0101525b6060938401516001600160a01b0381168a860152939250601f01601f19169790970160a0019650505092850192908501906001016103cb565b509297965050505050505056fe4d6f6f20c3a9f09f9a806f4df09f9a8020c3a9c3a94d6f6f20f09f9a804d6fc3a96f4d4dc3a94df09f9a80206f6f6ff09f9a80c3a94d4df09f9a80c3a9f09f9a806f6f6f6f202020a264697066735822122023afbc090a2bb33131268414e3e42648ec9f24b8d90b1f382ade6279833e963864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_769da6ae {\n int224 s_0;\n int48 s_1;\n string s_2;\n address s_3;\n }\n\n struct S_574855bd {\n address s_0;\n bytes13[4] s_1;\n S_769da6ae[3] s_2;\n }\n\n function test () public pure returns (S_574855bd memory) {\n S_574855bd memory r;\n {\n address r_0 = 0x0Ab7f4c6136b548CB879794bBA7705EE97eCa4b0;\n r.s_0 = r_0;\n }\n {\n bytes13[4] memory r_1;\n {\n bytes13 r_1_0 = bytes13(0x413852dafbc99e9b3ff5e2f676);\n r_1[0] = r_1_0;\n }\n {\n bytes13 r_1_1 = bytes13(0xe3207d8450f7053eb7ae18f37b);\n r_1[1] = r_1_1;\n }\n {\n bytes13 r_1_2 = bytes13(0xc86e1d81f0c9fda8ba09e492a4);\n r_1[2] = r_1_2;\n }\n {\n bytes13 r_1_3 = bytes13(0x2805819342c571073243efb1c5);\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n S_769da6ae[3] memory r_2;\n {\n S_769da6ae memory r_2_0;\n {\n int224 r_2_0_0 = -9126611069876381136405307087252671529711504088487379034355811254555;\n r_2_0.s_0 = r_2_0_0;\n }\n {\n int48 r_2_0_1 = 22648470963180;\n r_2_0.s_1 = r_2_0_1;\n }\n {\n string memory r_2_0_2 = unicode\"Moo é🚀Moé🚀🚀M\";\n r_2_0.s_2 = r_2_0_2;\n }\n {\n address r_2_0_3 = 0x668B02c4aBebe4EaA8c40E248F2973198A86de60;\n r_2_0.s_3 = r_2_0_3;\n }\n r_2[0] = r_2_0;\n }\n {\n S_769da6ae memory r_2_1;\n {\n int224 r_2_1_0 = -6847962842297952587977242037022751437766005526662635720830195357826;\n r_2_1.s_0 = r_2_1_0;\n }\n {\n int48 r_2_1_1 = 56716923755462;\n r_2_1.s_1 = r_2_1_1;\n }\n {\n string memory r_2_1_2 = unicode\"Moo é🚀oM🚀 ééMoo 🚀MoéoMMéM🚀 ooo🚀éMM🚀é🚀oooo \";\n r_2_1.s_2 = r_2_1_2;\n }\n {\n address r_2_1_3 = 0x2C388C7e57AbE7F0632Cc4E262D704FA2F288d34;\n r_2_1.s_3 = r_2_1_3;\n }\n r_2[1] = r_2_1;\n }\n {\n S_769da6ae memory r_2_2;\n {\n int224 r_2_2_0 = 9396533063052311062202573379054850815756278619986607236313145615487;\n r_2_2.s_0 = r_2_2_0;\n }\n {\n int48 r_2_2_1 = -131765720050511;\n r_2_2.s_1 = r_2_2_1;\n }\n {\n string memory r_2_2_2 = unicode\"Moo é🚀 o🚀oé 🚀\";\n r_2_2.s_2 = r_2_2_2;\n }\n {\n address r_2_2_3 = 0x355Bde9CDF9d696498e0ccec29d1d82f7926991E;\n r_2_2.s_3 = r_2_2_3;\n }\n r_2[2] = r_2_2;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000ab7f4c6136b548cb879794bba7705ee97eca4b0413852dafbc99e9b3ff5e2f67600000000000000000000000000000000000000e3207d8450f7053eb7ae18f37b00000000000000000000000000000000000000c86e1d81f0c9fda8ba09e492a4000000000000000000000000000000000000002805819342c571073243efb1c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000220ffffffffa9566ffcda515ea1a66ac6083119dc7a448297515184b7f971f77ee500000000000000000000000000000000000000000000000000001499421103ec0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000668b02c4abebe4eaa8c40e248f2973198a86de6000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a804d6fc3a9f09f9a80f09f9a804d000000000000000000ffffffffbef98642d1e878a89a9d05f520991af1688bf6a287a5b82c0d8ba77e000000000000000000000000000000000000000000000000000033957017dbc600000000000000000000000000000000000000000000000000000000000000800000000000000000000000002c388c7e57abe7f0632cc4e262d704fa2f288d3400000000000000000000000000000000000000000000000000000000000000484d6f6f20c3a9f09f9a806f4df09f9a8020c3a9c3a94d6f6f20f09f9a804d6fc3a96f4d4dc3a94df09f9a80206f6f6ff09f9a80c3a94d4df09f9a80c3a9f09f9a806f6f6f6f202020000000000000000000000000000000000000000000000000000000005939b4e18b31c55406a9d344a7be443c825e244aafb956595dcb247fffffffffffffffffffffffffffffffffffffffffffffffffffff8828e71014b10000000000000000000000000000000000000000000000000000000000000080000000000000000000000000355bde9cdf9d696498e0ccec29d1d82f7926991e00000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a80206ff09f9a806fc3a920f09f9a800000000000000000" + }, + { + "name": "random-(address,bytes30[1],(bool,bytes27,address,bytes12,bytes25))", + "type": "(address,bytes30[1],(bool,bytes27,address,bytes12,bytes25))", + "value": [ + "0xc7e079395B0597Aa1eB58508F341Ceeff3d7F429", + ["0x2e6506e38535aa293c97441f5d01c682a15c2ab2a91de0a3587bf5d8624f"], + [ + true, + "0x8c9fcacc88d97217c627e8658b5fb0517555c4296b4078e42ab7d7", + "0x8DC0a8751C03E3Cf909321d05AC89E6e788Fc56D", + "0xaab60fd703c5b4b49bd9a4d5", + "0x2bc4c71191380556f8f6524e7004ad53556fc97ea8b4a7c150" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xc7e079395B0597Aa1eB58508F341Ceeff3d7F429" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2e6506e38535aa293c97441f5d01c682a15c2ab2a91de0a3587bf5d8624f" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x8c9fcacc88d97217c627e8658b5fb0517555c4296b4078e42ab7d7" + }, + { + "type": "address", + "value": "0x8DC0a8751C03E3Cf909321d05AC89E6e788Fc56D" + }, + { + "type": "hexstring", + "value": "0xaab60fd703c5b4b49bd9a4d5" + }, + { + "type": "hexstring", + "value": "0x2bc4c71191380556f8f6524e7004ad53556fc97ea8b4a7c150" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061028d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101ad565b60405180910390f35b61005661013b565b61005e61013b565b73c7e079395b0597aa1eb58508f341ceeff3d7f429815261007d61018f565b7f2e6506e38535aa293c97441f5d01c682a15c2ab2a91de0a3587bf5d8624f000081526020828101919091526040805160a081018252600181527f8c9fcacc88d97217c627e8658b5fb0517555c4296b4078e42ab7d7000000000092810192909252738dc0a8751c03e3cf909321d05ac89e6e788fc56d828201526baab60fd703c5b4b49bd9a4d560a01b60608301527f2bc4c71191380556f8f6524e7004ad53556fc97ea8b4a7c150000000000000006080830152820152919050565b604051806060016040528060006001600160a01b0316815260200161015e61018f565b81526040805160a0810182526000808252602082810182905292820181905260608201819052608082015291015290565b60405180602001604052806001906020820280368337509192915050565b81516001600160a01b03908116825260208084015160e0840192919081850160005b60018110156101f157825161ffff1916825291830191908301906001016101cf565b505050604085015180511515604086015264ffffffffff19828201511660608601528260408201511660808601526bffffffffffffffffffffffff60a01b60608201511660a086015266ffffffffffffff1960808201511660c08601525050509291505056fea264697066735822122025cbab7d1ae7d0abc58aeaf6b0187bf0887d663136c597d5702b43281f569ed564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f0c922af {\n bool s_0;\n bytes27 s_1;\n address s_2;\n bytes12 s_3;\n bytes25 s_4;\n }\n\n struct S_f19bba17 {\n address s_0;\n bytes30[1] s_1;\n S_f0c922af s_2;\n }\n\n function test () public pure returns (S_f19bba17 memory) {\n S_f19bba17 memory r;\n {\n address r_0 = 0xc7e079395B0597Aa1eB58508F341Ceeff3d7F429;\n r.s_0 = r_0;\n }\n {\n bytes30[1] memory r_1;\n {\n bytes30 r_1_0 = bytes30(0x2e6506e38535aa293c97441f5d01c682a15c2ab2a91de0a3587bf5d8624f);\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n S_f0c922af memory r_2;\n {\n bool r_2_0 = true;\n r_2.s_0 = r_2_0;\n }\n {\n bytes27 r_2_1 = bytes27(0x8c9fcacc88d97217c627e8658b5fb0517555c4296b4078e42ab7d7);\n r_2.s_1 = r_2_1;\n }\n {\n address r_2_2 = 0x8DC0a8751C03E3Cf909321d05AC89E6e788Fc56D;\n r_2.s_2 = r_2_2;\n }\n {\n bytes12 r_2_3 = bytes12(0xaab60fd703c5b4b49bd9a4d5);\n r_2.s_3 = r_2_3;\n }\n {\n bytes25 r_2_4 = bytes25(0x2bc4c71191380556f8f6524e7004ad53556fc97ea8b4a7c150);\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000c7e079395b0597aa1eb58508f341ceeff3d7f4292e6506e38535aa293c97441f5d01c682a15c2ab2a91de0a3587bf5d8624f000000000000000000000000000000000000000000000000000000000000000000018c9fcacc88d97217c627e8658b5fb0517555c4296b4078e42ab7d700000000000000000000000000000000008dc0a8751c03e3cf909321d05ac89e6e788fc56daab60fd703c5b4b49bd9a4d500000000000000000000000000000000000000002bc4c71191380556f8f6524e7004ad53556fc97ea8b4a7c15000000000000000" + }, + { + "name": "random-(address[4],bytes2[3][],string[1],address)", + "type": "(address[4],bytes2[3][],string[1],address)", + "value": [ + [ + "0x429F85938ca127e4EcC8f1a34Dc526fa09C6B733", + "0x4237fdeb5C7C35DC55d9c1Bc2fEfE92DD971F2C3", + "0xd9f5eb7E674A820b7385650277FAf4fE937a5113", + "0xFf0f32FA02FA4568Df239E024d91a8396AeEdBde" + ], + [ + ["0x343e", "0xfd19", "0x6815"], + ["0xd90f", "0x2ec3", "0x04b5"], + ["0x7b98", "0x7204", "0xd31a"] + ], + ["Moo é🚀Mé🚀🚀MMM🚀🚀M🚀éMoo o🚀 ooo🚀M o🚀🚀éééM🚀🚀ooéoo🚀éMéo🚀🚀🚀o 🚀 Mé"], + "0x788820d6fb04A8329163eFFb01b103D5cDa887A1" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x429F85938ca127e4EcC8f1a34Dc526fa09C6B733" + }, + { + "type": "address", + "value": "0x4237fdeb5C7C35DC55d9c1Bc2fEfE92DD971F2C3" + }, + { + "type": "address", + "value": "0xd9f5eb7E674A820b7385650277FAf4fE937a5113" + }, + { + "type": "address", + "value": "0xFf0f32FA02FA4568Df239E024d91a8396AeEdBde" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x343e" + }, + { + "type": "hexstring", + "value": "0xfd19" + }, + { + "type": "hexstring", + "value": "0x6815" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xd90f" + }, + { + "type": "hexstring", + "value": "0x2ec3" + }, + { + "type": "hexstring", + "value": "0x04b5" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x7b98" + }, + { + "type": "hexstring", + "value": "0x7204" + }, + { + "type": "hexstring", + "value": "0xd31a" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mé🚀🚀MMM🚀🚀M🚀éMoo o🚀 ooo🚀M o🚀🚀éééM🚀🚀ooéoo🚀éMéo🚀🚀🚀o 🚀 Mé" + } + ] + }, + { + "type": "address", + "value": "0x788820d6fb04A8329163eFFb01b103D5cDa887A1" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610509806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906103b0565b60405180910390f35b610056610232565b61005e610232565b610066610266565b73429f85938ca127e4ecc8f1a34dc526fa09c6b7338152734237fdeb5c7c35dc55d9c1bc2fefe92dd971f2c3602082015273d9f5eb7e674a820b7385650277faf4fe937a511360408083019190915273ff0f32fa02fa4568df239e024d91a8396aeedbde60608301529082528051600380825260808201909252600091816020015b6100f0610284565b8152602001906001900390816100e857905050905061010d610284565b611a1f60f11b815261fd1960f01b602082015261681560f01b604082015281518190839060009061014057610140610445565b602002602001018190525050610154610284565b61d90f60f01b8152612ec360f01b60208201526104b560f01b6040820152815181908390600190811061018957610189610445565b60200260200101819052505061019d610284565b610f7360f31b8152611c8160f21b602082015261698d60f11b604082015281518190839060029081106101d2576101d2610445565b602002602001018190525050808260200181905250506101f06102a2565b60006040518060a001604052806078815260200161045c60789139825250604082015273788820d6fb04a8329163effb01b103d5cda887a16060820152919050565b6040518060800160405280610245610266565b8152602001606081526020016102596102a2565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180602001604052806001905b60608152602001906001900390816102b15790505090565b60008151808452602080850194508084016000805b8481101561032857825188835b60038110156103125782516001600160f01b031916825291860191908601906001016102eb565b50505060609790970196918301916001016102de565b50959695505050505050565b6000826020808201846000805b60018110156103a357858403895282518051808652835b81811015610373578281018801518782018901528701610358565b8181111561038357848883890101525b5099860199601f01601f1916949094018501935091840191600101610341565b5091979650505050505050565b6020808252825160009190828483015b60048210156103e85782516001600160a01b03168152918301916001919091019083016103c0565b50505083015160e060a08401526104036101008401826102c9565b90506040840151601f198483030160c08501526104208282610334565b915050606084015161043d60e08501826001600160a01b03169052565b509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804dc3a9f09f9a80f09f9a804d4d4df09f9a80f09f9a804df09f9a80c3a94d6f6f206ff09f9a80206f6f6ff09f9a804d206ff09f9a80f09f9a80c3a9c3a9c3a94df09f9a80f09f9a806f6fc3a96f6ff09f9a80c3a94dc3a96ff09f9a80f09f9a80f09f9a806f20f09f9a80204dc3a9a2646970667358221220eb4f363d5b28537b9202dad420c8efc7b15e74f6135cd3c113962d89c1b3545e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d24730a1 {\n address[4] s_0;\n bytes2[3][] s_1;\n string[1] s_2;\n address s_3;\n }\n\n function test () public pure returns (S_d24730a1 memory) {\n S_d24730a1 memory r;\n {\n address[4] memory r_0;\n {\n address r_0_0 = 0x429F85938ca127e4EcC8f1a34Dc526fa09C6B733;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0x4237fdeb5C7C35DC55d9c1Bc2fEfE92DD971F2C3;\n r_0[1] = r_0_1;\n }\n {\n address r_0_2 = 0xd9f5eb7E674A820b7385650277FAf4fE937a5113;\n r_0[2] = r_0_2;\n }\n {\n address r_0_3 = 0xFf0f32FA02FA4568Df239E024d91a8396AeEdBde;\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n bytes2[3][] memory r_1 = new bytes2[3][](3);\n {\n bytes2[3] memory r_1_0;\n {\n bytes2 r_1_0_0 = bytes2(0x343e);\n r_1_0[0] = r_1_0_0;\n }\n {\n bytes2 r_1_0_1 = bytes2(0xfd19);\n r_1_0[1] = r_1_0_1;\n }\n {\n bytes2 r_1_0_2 = bytes2(0x6815);\n r_1_0[2] = r_1_0_2;\n }\n r_1[0] = r_1_0;\n }\n {\n bytes2[3] memory r_1_1;\n {\n bytes2 r_1_1_0 = bytes2(0xd90f);\n r_1_1[0] = r_1_1_0;\n }\n {\n bytes2 r_1_1_1 = bytes2(0x2ec3);\n r_1_1[1] = r_1_1_1;\n }\n {\n bytes2 r_1_1_2 = bytes2(0x04b5);\n r_1_1[2] = r_1_1_2;\n }\n r_1[1] = r_1_1;\n }\n {\n bytes2[3] memory r_1_2;\n {\n bytes2 r_1_2_0 = bytes2(0x7b98);\n r_1_2[0] = r_1_2_0;\n }\n {\n bytes2 r_1_2_1 = bytes2(0x7204);\n r_1_2[1] = r_1_2_1;\n }\n {\n bytes2 r_1_2_2 = bytes2(0xd31a);\n r_1_2[2] = r_1_2_2;\n }\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n string[1] memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀Mé🚀🚀MMM🚀🚀M🚀éMoo o🚀 ooo🚀M o🚀🚀éééM🚀🚀ooéoo🚀éMéo🚀🚀🚀o 🚀 Mé\";\n r_2[0] = r_2_0;\n }\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x788820d6fb04A8329163eFFb01b103D5cDa887A1;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000429f85938ca127e4ecc8f1a34dc526fa09c6b7330000000000000000000000004237fdeb5c7c35dc55d9c1bc2fefe92dd971f2c3000000000000000000000000d9f5eb7e674a820b7385650277faf4fe937a5113000000000000000000000000ff0f32fa02fa4568df239e024d91a8396aeedbde00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000788820d6fb04a8329163effb01b103d5cda887a10000000000000000000000000000000000000000000000000000000000000003343e000000000000000000000000000000000000000000000000000000000000fd190000000000000000000000000000000000000000000000000000000000006815000000000000000000000000000000000000000000000000000000000000d90f0000000000000000000000000000000000000000000000000000000000002ec300000000000000000000000000000000000000000000000000000000000004b50000000000000000000000000000000000000000000000000000000000007b980000000000000000000000000000000000000000000000000000000000007204000000000000000000000000000000000000000000000000000000000000d31a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000784d6f6f20c3a9f09f9a804dc3a9f09f9a80f09f9a804d4d4df09f9a80f09f9a804df09f9a80c3a94d6f6f206ff09f9a80206f6f6ff09f9a804d206ff09f9a80f09f9a80c3a9c3a9c3a94df09f9a80f09f9a806f6fc3a96f6ff09f9a80c3a94dc3a96ff09f9a80f09f9a80f09f9a806f20f09f9a80204dc3a90000000000000000" + }, + { + "name": "random-(bool,address,int88,uint48,(bytes31,bytes19,address[2]))", + "type": "(bool,address,int88,uint48,(bytes31,bytes19,address[2]))", + "value": [ + true, + "0xeDE8ba7fcDC88130acb0ca58a5AeFBE76f3A7Cd2", + "-31190037530491657538974414", + "121518225299482", + [ + "0xf34e1b5a19e8a2211ea407c8bbbce2a4b8101acaee87329f4e7d93c5eb81d5", + "0xe1fdb9ac537983c0317cfbb9defc1a2180b8ce", + [ + "0xB0F0AD8eb7638e8c47d6e16de32B64A509d8788F", + "0x9986954cba6fAa32Ba6eCC1678aDEA5e4AA681cd" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xeDE8ba7fcDC88130acb0ca58a5AeFBE76f3A7Cd2" + }, + { + "type": "number", + "value": "-31190037530491657538974414" + }, + { + "type": "number", + "value": "121518225299482" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf34e1b5a19e8a2211ea407c8bbbce2a4b8101acaee87329f4e7d93c5eb81d5" + }, + { + "type": "hexstring", + "value": "0xe1fdb9ac537983c0317cfbb9defc1a2180b8ce" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xB0F0AD8eb7638e8c47d6e16de32B64A509d8788F" + }, + { + "type": "address", + "value": "0x9986954cba6fAa32Ba6eCC1678aDEA5e4AA681cd" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061026d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610197565b60405180910390f35b610056610129565b61005e610129565b6001815273ede8ba7fcdc88130acb0ca58a5aefbe76f3a7cd260208201526a19ccbf5290e0f2ff1f32cd196040820152656e852aa7181a60608201526100a261015e565b7ff34e1b5a19e8a2211ea407c8bbbce2a4b8101acaee87329f4e7d93c5eb81d50081527270fedcd629bcc1e018be7ddcef7e0d10c05c6760691b60208201526100e9610179565b73b0f0ad8eb7638e8c47d6e16de32b64a509d8788f8152739986954cba6faa32ba6ecc1678adea5e4aa681cd602082015260408201526080820152919050565b6040805160a08101825260008082526020820181905291810182905260608101919091526080810161015961015e565b905290565b60408051606081018252600080825260208201529081016101595b60405180604001604052806002906020820280368337509192915050565b8151151581526020808301516001600160a01b0390811682840152604080850151600a0b8185015260608086015165ffffffffffff1690850152608080860151805160ff191691860191909152808401516cffffffffffffffffffffffffff191660a086015201516101008401929160c0850160005b600281101561022c57835183168252928401929084019060010161020d565b50505050509291505056fea26469706673582212207a55f33f2ac64f2b54e7297afdee24ba22ba7c30c99c7af201adc1925423795064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1ab75875 {\n bytes31 s_0;\n bytes19 s_1;\n address[2] s_2;\n }\n\n struct S_6d1cd1af {\n bool s_0;\n address s_1;\n int88 s_2;\n uint48 s_3;\n S_1ab75875 s_4;\n }\n\n function test () public pure returns (S_6d1cd1af memory) {\n S_6d1cd1af memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xeDE8ba7fcDC88130acb0ca58a5AeFBE76f3A7Cd2;\n r.s_1 = r_1;\n }\n {\n int88 r_2 = -31190037530491657538974414;\n r.s_2 = r_2;\n }\n {\n uint48 r_3 = 121518225299482;\n r.s_3 = r_3;\n }\n {\n S_1ab75875 memory r_4;\n {\n bytes31 r_4_0 = bytes31(0xf34e1b5a19e8a2211ea407c8bbbce2a4b8101acaee87329f4e7d93c5eb81d5);\n r_4.s_0 = r_4_0;\n }\n {\n bytes19 r_4_1 = bytes19(0xe1fdb9ac537983c0317cfbb9defc1a2180b8ce);\n r_4.s_1 = r_4_1;\n }\n {\n address[2] memory r_4_2;\n {\n address r_4_2_0 = 0xB0F0AD8eb7638e8c47d6e16de32B64A509d8788F;\n r_4_2[0] = r_4_2_0;\n }\n {\n address r_4_2_1 = 0x9986954cba6fAa32Ba6eCC1678aDEA5e4AA681cd;\n r_4_2[1] = r_4_2_1;\n }\n r_4.s_2 = r_4_2;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ede8ba7fcdc88130acb0ca58a5aefbe76f3a7cd2ffffffffffffffffffffffffffffffffffffffffffe63340ad6f1f0d00e0cd3200000000000000000000000000000000000000000000000000006e852aa7181af34e1b5a19e8a2211ea407c8bbbce2a4b8101acaee87329f4e7d93c5eb81d500e1fdb9ac537983c0317cfbb9defc1a2180b8ce00000000000000000000000000000000000000000000000000b0f0ad8eb7638e8c47d6e16de32b64a509d8788f0000000000000000000000009986954cba6faa32ba6ecc1678adea5e4aa681cd" + }, + { + "name": "random-(bool,bool,address,(int232),(string,bool,address,string))", + "type": "(bool,bool,address,(int232),(string,bool,address,string))", + "value": [ + false, + false, + "0x06f59f18B7fEa5Fd52E4B2E5f03f77221c105aD7", + ["-2191239826171463835999864260595782095282645182998350600573926518541796"], + [ + "Moo é🚀 éMMoéMéoooo ééé🚀🚀éo éoMo🚀M é é Moé M🚀oMéoMé o", + true, + "0x183F69d4Bf76d7445edbD86d4CeCa9852a281DF5", + "Moo é🚀🚀oo éoo🚀éé🚀ooMM🚀 🚀oéé ééoéoé M" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x06f59f18B7fEa5Fd52E4B2E5f03f77221c105aD7" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-2191239826171463835999864260595782095282645182998350600573926518541796" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 éMMoéMéoooo ééé🚀🚀éo éoMo🚀M é é Moé M🚀oMéoMé o" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x183F69d4Bf76d7445edbD86d4CeCa9852a281DF5" + }, + { + "type": "string", + "value": "Moo é🚀🚀oo éoo🚀éé🚀ooMM🚀 🚀oéé ééoéoé M" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610361806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101f5565b60405180910390f35b610056610152565b61005e610152565b600080825260208083018290527306f59f18b7fea5fd52e4b2e5f03f77221c105ad7604080850191909152805191820190529081527fffffffaeb8ef0c6d7efae679bfa1c338508bbacda261fdc0b27ef4abe408321c815260608083019190915260408051608081018252828152600060208201819052918101919091528082019190915260006040518060800160405280605181526020016102db60519139825250600160208083019190915273183f69d4bf76d7445edbd86d4ceca9852a281df5604080840191909152805160808101909152604180825260009261029a908301396060830152506080820152919050565b6040805160a0810182526000808252602080830182905282840182905283519081019093528252906060820190815260408051608081018252606080825260006020838101829052938301528082015291015290565b6000815180845260005b818110156101ce576020818501810151868301820152016101b2565b818111156101e0576000602083870101525b50601f01601f19169290920160200192915050565b602081528151151560208201526020820151151560408201526000604083015160018060a01b038082166060850152606085015151601c0b60808501526080850151915060a0808501528151608060c08601526102566101408601826101a8565b6020840151151560e08701526040840151831661010087015260609093015185840360bf190161012087015292905061028f81846101a8565b969550505050505056fe4d6f6f20c3a9f09f9a80f09f9a806f6f2020c3a96f6ff09f9a80c3a9c3a9f09f9a806f6f4d4df09f9a8020f09f9a806fc3a9c3a920c3a9c3a96fc3a96fc3a9204d4d6f6f20c3a9f09f9a8020c3a94d4d6fc3a94dc3a96f6f6f6f20c3a9c3a9c3a9f09f9a80f09f9a80c3a96f20c3a96f4d6ff09f9a804d20c3a920c3a9204d6fc3a9204df09f9a806f4dc3a96f4dc3a9206fa2646970667358221220873b0a72acba5c8e2137d20e83c63376e534742f757329d98a66ce5a013835b064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f2e9ab46 {\n int232 s_0;\n }\n\n struct S_a98a43f0 {\n string s_0;\n bool s_1;\n address s_2;\n string s_3;\n }\n\n struct S_5736ac91 {\n bool s_0;\n bool s_1;\n address s_2;\n S_f2e9ab46 s_3;\n S_a98a43f0 s_4;\n }\n\n function test () public pure returns (S_5736ac91 memory) {\n S_5736ac91 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x06f59f18B7fEa5Fd52E4B2E5f03f77221c105aD7;\n r.s_2 = r_2;\n }\n {\n S_f2e9ab46 memory r_3;\n {\n int232 r_3_0 = -2191239826171463835999864260595782095282645182998350600573926518541796;\n r_3.s_0 = r_3_0;\n }\n r.s_3 = r_3;\n }\n {\n S_a98a43f0 memory r_4;\n {\n string memory r_4_0 = unicode\"Moo é🚀 éMMoéMéoooo ééé🚀🚀éo éoMo🚀M é é Moé M🚀oMéoMé o\";\n r_4.s_0 = r_4_0;\n }\n {\n bool r_4_1 = true;\n r_4.s_1 = r_4_1;\n }\n {\n address r_4_2 = 0x183F69d4Bf76d7445edbD86d4CeCa9852a281DF5;\n r_4.s_2 = r_4_2;\n }\n {\n string memory r_4_3 = unicode\"Moo é🚀🚀oo éoo🚀éé🚀ooMM🚀 🚀oéé ééoéoé M\";\n r_4.s_3 = r_4_3;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f59f18b7fea5fd52e4b2e5f03f77221c105ad7ffffffaeb8ef0c6d7efae679bfa1c338508bbacda261fdc0b27ef4abe408321c00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000183f69d4bf76d7445edbd86d4ceca9852a281df5000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a8020c3a94d4d6fc3a94dc3a96f6f6f6f20c3a9c3a9c3a9f09f9a80f09f9a80c3a96f20c3a96f4d6ff09f9a804d20c3a920c3a9204d6fc3a9204df09f9a806f4dc3a96f4dc3a9206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a80f09f9a806f6f2020c3a96f6ff09f9a80c3a9c3a9f09f9a806f6f4d4df09f9a8020f09f9a806fc3a9c3a920c3a9c3a96fc3a96fc3a9204d00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,bool[4],bytes9,bool)[2][3][]", + "type": "(bool,bool[4],bytes9,bool)[2][3][]", + "value": [ + [ + [ + [false, [true, false, true, false], "0x96ad8ddaa9a0e39367", false], + [true, [true, false, true, true], "0x1133fe51ca1ec1dbee", true] + ], + [ + [true, [true, false, false, true], "0xb6869372b52f0ff435", false], + [false, [true, false, false, false], "0x8ec0cdce6a313bd580", true] + ], + [ + [false, [false, false, false, false], "0x3003c73ff9ae620622", false], + [true, [true, true, true, false], "0xe86f0d491f0b0122b2", true] + ] + ], + [ + [ + [false, [false, true, true, true], "0x21cbbb42532a4c86e5", false], + [false, [true, true, true, false], "0xff89c052b39a4884cd", true] + ], + [ + [true, [false, false, false, true], "0xa9c8b16e41efe4b497", false], + [false, [true, false, true, false], "0x2c803d726547d4d821", false] + ], + [ + [false, [true, true, false, true], "0x56f06cf467fb3f0898", false], + [false, [false, true, true, true], "0xe6a02c2290461fb337", false] + ] + ], + [ + [ + [false, [false, false, false, false], "0x8543d39ae5f81cfa96", false], + [true, [false, true, true, false], "0x24847046fded161afb", true] + ], + [ + [true, [true, true, false, false], "0x0e6fd069560e3f6047", true], + [false, [false, false, false, true], "0xb24d5885d6c01dc32c", false] + ], + [ + [false, [true, true, false, true], "0x7608da01a146ca8419", true], + [true, [false, true, true, true], "0x2ade9bed32ddfcf160", false] + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x96ad8ddaa9a0e39367" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x1133fe51ca1ec1dbee" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0xb6869372b52f0ff435" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x8ec0cdce6a313bd580" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x3003c73ff9ae620622" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0xe86f0d491f0b0122b2" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x21cbbb42532a4c86e5" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0xff89c052b39a4884cd" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0xa9c8b16e41efe4b497" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x2c803d726547d4d821" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x56f06cf467fb3f0898" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0xe6a02c2290461fb337" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x8543d39ae5f81cfa96" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x24847046fded161afb" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x0e6fd069560e3f6047" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0xb24d5885d6c01dc32c" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x7608da01a146ca8419" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x2ade9bed32ddfcf160" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610947806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610819565b60405180910390f35b6040805160038082526080820190925260609160009190816020015b610072610771565b81526020019060019003908161006a57905050905061008f610771565b61009761079e565b61009f6107cb565b600081526100ab6107fb565b6001808252600060208084018290526040808501939093526060808501839052908501939093526896ad8ddaa9a0e3936760b81b918401919091529082015281526100f46107cb565b600181526101006107fb565b600180825260006020808401919091526040808401839052606080850184905285830194909452680899ff28e50f60edf760b91b9085015291830152820152815261014961079e565b6101516107cb565b6001815261015d6107fb565b60018082526000602080840182905260408085018390526060808601949094529085019390935268b6869372b52f0ff43560b81b9284019290925282015281526101a56107cb565b600081526101b16107fb565b60018082526000602080840182905260408085018390526060808601939093528582019490945268011d819b9cd46277ab60bf1b938501939093528301528281019190915282015261020161079e565b6102096107cb565b600081526102156107fb565b600080825260208083018290526040808401839052606080850184905291850193909352681801e39ffcd731031160b91b9284019290925290820152815261025b6107cb565b600181526102676107fb565b600180825260208083018290526040808401839052600060608086018290528684019590955268743786a48f8580915960b91b8683015293850192909252840192909252908301919091528251829184916102c4576102c46108fb565b6020026020010181905250506102d8610771565b6102e061079e565b6102e86107cb565b600081526102f46107fb565b6000808252600160208084018290526040808501839052606080860193909352908501939093526821cbbb42532a4c86e560b81b9284019290925290820152815261033d6107cb565b600081526103496107fb565b600180825260208083018290526040808401839052600060608086019190915285830194909452600167763fad4c65b77b3360b81b03199085015291830152820152815261039561079e565b61039d6107cb565b600181526103a96107fb565b60008082526020808301829052604080840183905260016060808601919091529185019390935268a9c8b16e41efe4b49760b81b928401929092529082015281526103f26107cb565b600081526103fe6107fb565b600180825260006020808401829052604080850193909352606080850183905285820194909452682c803d726547d4d82160b81b92850192909252918301919091528281019190915282015261045261079e565b61045a6107cb565b600081526104666107fb565b600180825260208083018290526000604080850182905260608086019490945291850193909352680ade0d9e8cff67e11360bb1b9084015282015281526104ab6107cb565b600081526104b76107fb565b600080825260016020808401829052604080850183905260608086018490528683019590955268e6a02c2290461fb33760b81b8682015293850192909252908401929092528301919091528251829184918110610516576105166108fb565b60200260200101819052505061052a610771565b61053261079e565b61053a6107cb565b600081526105466107fb565b6000808252602080830182905260408084018390526060808501849052918501939093526842a1e9cd72fc0e7d4b60b91b9284019290925290820152815261058c6107cb565b600181526105986107fb565b6000808252600160208084018290526040808501839052606080860194909452858201949094526824847046fded161afb60b81b938501939093529083015282015281526105e461079e565b6105ec6107cb565b600181526105f86107fb565b600180825260208083018290526000604080850182905260608086019290925291850193909352680e6fd069560e3f604760b81b9084015290820152815261063e6107cb565b6000815261064a6107fb565b600080825260208083018290526040808401839052600160608086019190915285830194909452682c93562175b00770cb60ba1b90850152918301528281019190915282015261069861079e565b6106a06107cb565b600081526106ac6107fb565b600180825260208083018290526000604080850191909152606080850184905291850193909352687608da01a146ca841960b81b928401929092529082015281526106f56107cb565b600181526107016107fb565b600080825260016020808401829052604080850183905260608086019390935285820194909452680156f4df6996efe78b60bd1b85850152908401919091528301919091528201528151819083906002908110610760576107606108fb565b602090810291909101015250919050565b60405180606001604052806003905b61078861079e565b8152602001906001900390816107805790505090565b60405180604001604052806002905b6107b56107cb565b8152602001906001900390816107ad5790505090565b60405180608001604052806000151581526020016107e76107fb565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b602080825282518282018190526000919060409081850190868401855b828110156108ee5781518460005b60038110156108d75782518260005b60028110156108c05782518051151583528c8101518d840160005b600481101561088d57825115158252918f0191908f019060010161086e565b505050808c01516001600160b81b03191660a084015260600151151560c0830152918b019160e090910190600101610853565b505050918801916101c09190910190600101610844565b505050610540939093019290850190600101610836565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205dbf65779448669f7e245f4d63648ef8b88a8fee70126bfd28791ae8a3b52bd364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8a3363e1 {\n bool s_0;\n bool[4] s_1;\n bytes9 s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_8a3363e1[2][3][] memory) {\n S_8a3363e1[2][3][] memory r = new S_8a3363e1[2][3][](3);\n {\n S_8a3363e1[2][3] memory r_0;\n {\n S_8a3363e1[2] memory r_0_0;\n {\n S_8a3363e1 memory r_0_0_0;\n {\n bool r_0_0_0_0 = false;\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n bool[4] memory r_0_0_0_1;\n {\n bool r_0_0_0_1_0 = true;\n r_0_0_0_1[0] = r_0_0_0_1_0;\n }\n {\n bool r_0_0_0_1_1 = false;\n r_0_0_0_1[1] = r_0_0_0_1_1;\n }\n {\n bool r_0_0_0_1_2 = true;\n r_0_0_0_1[2] = r_0_0_0_1_2;\n }\n {\n bool r_0_0_0_1_3 = false;\n r_0_0_0_1[3] = r_0_0_0_1_3;\n }\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n bytes9 r_0_0_0_2 = bytes9(0x96ad8ddaa9a0e39367);\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n {\n bool r_0_0_0_3 = false;\n r_0_0_0.s_3 = r_0_0_0_3;\n }\n r_0_0[0] = r_0_0_0;\n }\n {\n S_8a3363e1 memory r_0_0_1;\n {\n bool r_0_0_1_0 = true;\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n {\n bool[4] memory r_0_0_1_1;\n {\n bool r_0_0_1_1_0 = true;\n r_0_0_1_1[0] = r_0_0_1_1_0;\n }\n {\n bool r_0_0_1_1_1 = false;\n r_0_0_1_1[1] = r_0_0_1_1_1;\n }\n {\n bool r_0_0_1_1_2 = true;\n r_0_0_1_1[2] = r_0_0_1_1_2;\n }\n {\n bool r_0_0_1_1_3 = true;\n r_0_0_1_1[3] = r_0_0_1_1_3;\n }\n r_0_0_1.s_1 = r_0_0_1_1;\n }\n {\n bytes9 r_0_0_1_2 = bytes9(0x1133fe51ca1ec1dbee);\n r_0_0_1.s_2 = r_0_0_1_2;\n }\n {\n bool r_0_0_1_3 = true;\n r_0_0_1.s_3 = r_0_0_1_3;\n }\n r_0_0[1] = r_0_0_1;\n }\n r_0[0] = r_0_0;\n }\n {\n S_8a3363e1[2] memory r_0_1;\n {\n S_8a3363e1 memory r_0_1_0;\n {\n bool r_0_1_0_0 = true;\n r_0_1_0.s_0 = r_0_1_0_0;\n }\n {\n bool[4] memory r_0_1_0_1;\n {\n bool r_0_1_0_1_0 = true;\n r_0_1_0_1[0] = r_0_1_0_1_0;\n }\n {\n bool r_0_1_0_1_1 = false;\n r_0_1_0_1[1] = r_0_1_0_1_1;\n }\n {\n bool r_0_1_0_1_2 = false;\n r_0_1_0_1[2] = r_0_1_0_1_2;\n }\n {\n bool r_0_1_0_1_3 = true;\n r_0_1_0_1[3] = r_0_1_0_1_3;\n }\n r_0_1_0.s_1 = r_0_1_0_1;\n }\n {\n bytes9 r_0_1_0_2 = bytes9(0xb6869372b52f0ff435);\n r_0_1_0.s_2 = r_0_1_0_2;\n }\n {\n bool r_0_1_0_3 = false;\n r_0_1_0.s_3 = r_0_1_0_3;\n }\n r_0_1[0] = r_0_1_0;\n }\n {\n S_8a3363e1 memory r_0_1_1;\n {\n bool r_0_1_1_0 = false;\n r_0_1_1.s_0 = r_0_1_1_0;\n }\n {\n bool[4] memory r_0_1_1_1;\n {\n bool r_0_1_1_1_0 = true;\n r_0_1_1_1[0] = r_0_1_1_1_0;\n }\n {\n bool r_0_1_1_1_1 = false;\n r_0_1_1_1[1] = r_0_1_1_1_1;\n }\n {\n bool r_0_1_1_1_2 = false;\n r_0_1_1_1[2] = r_0_1_1_1_2;\n }\n {\n bool r_0_1_1_1_3 = false;\n r_0_1_1_1[3] = r_0_1_1_1_3;\n }\n r_0_1_1.s_1 = r_0_1_1_1;\n }\n {\n bytes9 r_0_1_1_2 = bytes9(0x8ec0cdce6a313bd580);\n r_0_1_1.s_2 = r_0_1_1_2;\n }\n {\n bool r_0_1_1_3 = true;\n r_0_1_1.s_3 = r_0_1_1_3;\n }\n r_0_1[1] = r_0_1_1;\n }\n r_0[1] = r_0_1;\n }\n {\n S_8a3363e1[2] memory r_0_2;\n {\n S_8a3363e1 memory r_0_2_0;\n {\n bool r_0_2_0_0 = false;\n r_0_2_0.s_0 = r_0_2_0_0;\n }\n {\n bool[4] memory r_0_2_0_1;\n {\n bool r_0_2_0_1_0 = false;\n r_0_2_0_1[0] = r_0_2_0_1_0;\n }\n {\n bool r_0_2_0_1_1 = false;\n r_0_2_0_1[1] = r_0_2_0_1_1;\n }\n {\n bool r_0_2_0_1_2 = false;\n r_0_2_0_1[2] = r_0_2_0_1_2;\n }\n {\n bool r_0_2_0_1_3 = false;\n r_0_2_0_1[3] = r_0_2_0_1_3;\n }\n r_0_2_0.s_1 = r_0_2_0_1;\n }\n {\n bytes9 r_0_2_0_2 = bytes9(0x3003c73ff9ae620622);\n r_0_2_0.s_2 = r_0_2_0_2;\n }\n {\n bool r_0_2_0_3 = false;\n r_0_2_0.s_3 = r_0_2_0_3;\n }\n r_0_2[0] = r_0_2_0;\n }\n {\n S_8a3363e1 memory r_0_2_1;\n {\n bool r_0_2_1_0 = true;\n r_0_2_1.s_0 = r_0_2_1_0;\n }\n {\n bool[4] memory r_0_2_1_1;\n {\n bool r_0_2_1_1_0 = true;\n r_0_2_1_1[0] = r_0_2_1_1_0;\n }\n {\n bool r_0_2_1_1_1 = true;\n r_0_2_1_1[1] = r_0_2_1_1_1;\n }\n {\n bool r_0_2_1_1_2 = true;\n r_0_2_1_1[2] = r_0_2_1_1_2;\n }\n {\n bool r_0_2_1_1_3 = false;\n r_0_2_1_1[3] = r_0_2_1_1_3;\n }\n r_0_2_1.s_1 = r_0_2_1_1;\n }\n {\n bytes9 r_0_2_1_2 = bytes9(0xe86f0d491f0b0122b2);\n r_0_2_1.s_2 = r_0_2_1_2;\n }\n {\n bool r_0_2_1_3 = true;\n r_0_2_1.s_3 = r_0_2_1_3;\n }\n r_0_2[1] = r_0_2_1;\n }\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_8a3363e1[2][3] memory r_1;\n {\n S_8a3363e1[2] memory r_1_0;\n {\n S_8a3363e1 memory r_1_0_0;\n {\n bool r_1_0_0_0 = false;\n r_1_0_0.s_0 = r_1_0_0_0;\n }\n {\n bool[4] memory r_1_0_0_1;\n {\n bool r_1_0_0_1_0 = false;\n r_1_0_0_1[0] = r_1_0_0_1_0;\n }\n {\n bool r_1_0_0_1_1 = true;\n r_1_0_0_1[1] = r_1_0_0_1_1;\n }\n {\n bool r_1_0_0_1_2 = true;\n r_1_0_0_1[2] = r_1_0_0_1_2;\n }\n {\n bool r_1_0_0_1_3 = true;\n r_1_0_0_1[3] = r_1_0_0_1_3;\n }\n r_1_0_0.s_1 = r_1_0_0_1;\n }\n {\n bytes9 r_1_0_0_2 = bytes9(0x21cbbb42532a4c86e5);\n r_1_0_0.s_2 = r_1_0_0_2;\n }\n {\n bool r_1_0_0_3 = false;\n r_1_0_0.s_3 = r_1_0_0_3;\n }\n r_1_0[0] = r_1_0_0;\n }\n {\n S_8a3363e1 memory r_1_0_1;\n {\n bool r_1_0_1_0 = false;\n r_1_0_1.s_0 = r_1_0_1_0;\n }\n {\n bool[4] memory r_1_0_1_1;\n {\n bool r_1_0_1_1_0 = true;\n r_1_0_1_1[0] = r_1_0_1_1_0;\n }\n {\n bool r_1_0_1_1_1 = true;\n r_1_0_1_1[1] = r_1_0_1_1_1;\n }\n {\n bool r_1_0_1_1_2 = true;\n r_1_0_1_1[2] = r_1_0_1_1_2;\n }\n {\n bool r_1_0_1_1_3 = false;\n r_1_0_1_1[3] = r_1_0_1_1_3;\n }\n r_1_0_1.s_1 = r_1_0_1_1;\n }\n {\n bytes9 r_1_0_1_2 = bytes9(0xff89c052b39a4884cd);\n r_1_0_1.s_2 = r_1_0_1_2;\n }\n {\n bool r_1_0_1_3 = true;\n r_1_0_1.s_3 = r_1_0_1_3;\n }\n r_1_0[1] = r_1_0_1;\n }\n r_1[0] = r_1_0;\n }\n {\n S_8a3363e1[2] memory r_1_1;\n {\n S_8a3363e1 memory r_1_1_0;\n {\n bool r_1_1_0_0 = true;\n r_1_1_0.s_0 = r_1_1_0_0;\n }\n {\n bool[4] memory r_1_1_0_1;\n {\n bool r_1_1_0_1_0 = false;\n r_1_1_0_1[0] = r_1_1_0_1_0;\n }\n {\n bool r_1_1_0_1_1 = false;\n r_1_1_0_1[1] = r_1_1_0_1_1;\n }\n {\n bool r_1_1_0_1_2 = false;\n r_1_1_0_1[2] = r_1_1_0_1_2;\n }\n {\n bool r_1_1_0_1_3 = true;\n r_1_1_0_1[3] = r_1_1_0_1_3;\n }\n r_1_1_0.s_1 = r_1_1_0_1;\n }\n {\n bytes9 r_1_1_0_2 = bytes9(0xa9c8b16e41efe4b497);\n r_1_1_0.s_2 = r_1_1_0_2;\n }\n {\n bool r_1_1_0_3 = false;\n r_1_1_0.s_3 = r_1_1_0_3;\n }\n r_1_1[0] = r_1_1_0;\n }\n {\n S_8a3363e1 memory r_1_1_1;\n {\n bool r_1_1_1_0 = false;\n r_1_1_1.s_0 = r_1_1_1_0;\n }\n {\n bool[4] memory r_1_1_1_1;\n {\n bool r_1_1_1_1_0 = true;\n r_1_1_1_1[0] = r_1_1_1_1_0;\n }\n {\n bool r_1_1_1_1_1 = false;\n r_1_1_1_1[1] = r_1_1_1_1_1;\n }\n {\n bool r_1_1_1_1_2 = true;\n r_1_1_1_1[2] = r_1_1_1_1_2;\n }\n {\n bool r_1_1_1_1_3 = false;\n r_1_1_1_1[3] = r_1_1_1_1_3;\n }\n r_1_1_1.s_1 = r_1_1_1_1;\n }\n {\n bytes9 r_1_1_1_2 = bytes9(0x2c803d726547d4d821);\n r_1_1_1.s_2 = r_1_1_1_2;\n }\n {\n bool r_1_1_1_3 = false;\n r_1_1_1.s_3 = r_1_1_1_3;\n }\n r_1_1[1] = r_1_1_1;\n }\n r_1[1] = r_1_1;\n }\n {\n S_8a3363e1[2] memory r_1_2;\n {\n S_8a3363e1 memory r_1_2_0;\n {\n bool r_1_2_0_0 = false;\n r_1_2_0.s_0 = r_1_2_0_0;\n }\n {\n bool[4] memory r_1_2_0_1;\n {\n bool r_1_2_0_1_0 = true;\n r_1_2_0_1[0] = r_1_2_0_1_0;\n }\n {\n bool r_1_2_0_1_1 = true;\n r_1_2_0_1[1] = r_1_2_0_1_1;\n }\n {\n bool r_1_2_0_1_2 = false;\n r_1_2_0_1[2] = r_1_2_0_1_2;\n }\n {\n bool r_1_2_0_1_3 = true;\n r_1_2_0_1[3] = r_1_2_0_1_3;\n }\n r_1_2_0.s_1 = r_1_2_0_1;\n }\n {\n bytes9 r_1_2_0_2 = bytes9(0x56f06cf467fb3f0898);\n r_1_2_0.s_2 = r_1_2_0_2;\n }\n {\n bool r_1_2_0_3 = false;\n r_1_2_0.s_3 = r_1_2_0_3;\n }\n r_1_2[0] = r_1_2_0;\n }\n {\n S_8a3363e1 memory r_1_2_1;\n {\n bool r_1_2_1_0 = false;\n r_1_2_1.s_0 = r_1_2_1_0;\n }\n {\n bool[4] memory r_1_2_1_1;\n {\n bool r_1_2_1_1_0 = false;\n r_1_2_1_1[0] = r_1_2_1_1_0;\n }\n {\n bool r_1_2_1_1_1 = true;\n r_1_2_1_1[1] = r_1_2_1_1_1;\n }\n {\n bool r_1_2_1_1_2 = true;\n r_1_2_1_1[2] = r_1_2_1_1_2;\n }\n {\n bool r_1_2_1_1_3 = true;\n r_1_2_1_1[3] = r_1_2_1_1_3;\n }\n r_1_2_1.s_1 = r_1_2_1_1;\n }\n {\n bytes9 r_1_2_1_2 = bytes9(0xe6a02c2290461fb337);\n r_1_2_1.s_2 = r_1_2_1_2;\n }\n {\n bool r_1_2_1_3 = false;\n r_1_2_1.s_3 = r_1_2_1_3;\n }\n r_1_2[1] = r_1_2_1;\n }\n r_1[2] = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_8a3363e1[2][3] memory r_2;\n {\n S_8a3363e1[2] memory r_2_0;\n {\n S_8a3363e1 memory r_2_0_0;\n {\n bool r_2_0_0_0 = false;\n r_2_0_0.s_0 = r_2_0_0_0;\n }\n {\n bool[4] memory r_2_0_0_1;\n {\n bool r_2_0_0_1_0 = false;\n r_2_0_0_1[0] = r_2_0_0_1_0;\n }\n {\n bool r_2_0_0_1_1 = false;\n r_2_0_0_1[1] = r_2_0_0_1_1;\n }\n {\n bool r_2_0_0_1_2 = false;\n r_2_0_0_1[2] = r_2_0_0_1_2;\n }\n {\n bool r_2_0_0_1_3 = false;\n r_2_0_0_1[3] = r_2_0_0_1_3;\n }\n r_2_0_0.s_1 = r_2_0_0_1;\n }\n {\n bytes9 r_2_0_0_2 = bytes9(0x8543d39ae5f81cfa96);\n r_2_0_0.s_2 = r_2_0_0_2;\n }\n {\n bool r_2_0_0_3 = false;\n r_2_0_0.s_3 = r_2_0_0_3;\n }\n r_2_0[0] = r_2_0_0;\n }\n {\n S_8a3363e1 memory r_2_0_1;\n {\n bool r_2_0_1_0 = true;\n r_2_0_1.s_0 = r_2_0_1_0;\n }\n {\n bool[4] memory r_2_0_1_1;\n {\n bool r_2_0_1_1_0 = false;\n r_2_0_1_1[0] = r_2_0_1_1_0;\n }\n {\n bool r_2_0_1_1_1 = true;\n r_2_0_1_1[1] = r_2_0_1_1_1;\n }\n {\n bool r_2_0_1_1_2 = true;\n r_2_0_1_1[2] = r_2_0_1_1_2;\n }\n {\n bool r_2_0_1_1_3 = false;\n r_2_0_1_1[3] = r_2_0_1_1_3;\n }\n r_2_0_1.s_1 = r_2_0_1_1;\n }\n {\n bytes9 r_2_0_1_2 = bytes9(0x24847046fded161afb);\n r_2_0_1.s_2 = r_2_0_1_2;\n }\n {\n bool r_2_0_1_3 = true;\n r_2_0_1.s_3 = r_2_0_1_3;\n }\n r_2_0[1] = r_2_0_1;\n }\n r_2[0] = r_2_0;\n }\n {\n S_8a3363e1[2] memory r_2_1;\n {\n S_8a3363e1 memory r_2_1_0;\n {\n bool r_2_1_0_0 = true;\n r_2_1_0.s_0 = r_2_1_0_0;\n }\n {\n bool[4] memory r_2_1_0_1;\n {\n bool r_2_1_0_1_0 = true;\n r_2_1_0_1[0] = r_2_1_0_1_0;\n }\n {\n bool r_2_1_0_1_1 = true;\n r_2_1_0_1[1] = r_2_1_0_1_1;\n }\n {\n bool r_2_1_0_1_2 = false;\n r_2_1_0_1[2] = r_2_1_0_1_2;\n }\n {\n bool r_2_1_0_1_3 = false;\n r_2_1_0_1[3] = r_2_1_0_1_3;\n }\n r_2_1_0.s_1 = r_2_1_0_1;\n }\n {\n bytes9 r_2_1_0_2 = bytes9(0x0e6fd069560e3f6047);\n r_2_1_0.s_2 = r_2_1_0_2;\n }\n {\n bool r_2_1_0_3 = true;\n r_2_1_0.s_3 = r_2_1_0_3;\n }\n r_2_1[0] = r_2_1_0;\n }\n {\n S_8a3363e1 memory r_2_1_1;\n {\n bool r_2_1_1_0 = false;\n r_2_1_1.s_0 = r_2_1_1_0;\n }\n {\n bool[4] memory r_2_1_1_1;\n {\n bool r_2_1_1_1_0 = false;\n r_2_1_1_1[0] = r_2_1_1_1_0;\n }\n {\n bool r_2_1_1_1_1 = false;\n r_2_1_1_1[1] = r_2_1_1_1_1;\n }\n {\n bool r_2_1_1_1_2 = false;\n r_2_1_1_1[2] = r_2_1_1_1_2;\n }\n {\n bool r_2_1_1_1_3 = true;\n r_2_1_1_1[3] = r_2_1_1_1_3;\n }\n r_2_1_1.s_1 = r_2_1_1_1;\n }\n {\n bytes9 r_2_1_1_2 = bytes9(0xb24d5885d6c01dc32c);\n r_2_1_1.s_2 = r_2_1_1_2;\n }\n {\n bool r_2_1_1_3 = false;\n r_2_1_1.s_3 = r_2_1_1_3;\n }\n r_2_1[1] = r_2_1_1;\n }\n r_2[1] = r_2_1;\n }\n {\n S_8a3363e1[2] memory r_2_2;\n {\n S_8a3363e1 memory r_2_2_0;\n {\n bool r_2_2_0_0 = false;\n r_2_2_0.s_0 = r_2_2_0_0;\n }\n {\n bool[4] memory r_2_2_0_1;\n {\n bool r_2_2_0_1_0 = true;\n r_2_2_0_1[0] = r_2_2_0_1_0;\n }\n {\n bool r_2_2_0_1_1 = true;\n r_2_2_0_1[1] = r_2_2_0_1_1;\n }\n {\n bool r_2_2_0_1_2 = false;\n r_2_2_0_1[2] = r_2_2_0_1_2;\n }\n {\n bool r_2_2_0_1_3 = true;\n r_2_2_0_1[3] = r_2_2_0_1_3;\n }\n r_2_2_0.s_1 = r_2_2_0_1;\n }\n {\n bytes9 r_2_2_0_2 = bytes9(0x7608da01a146ca8419);\n r_2_2_0.s_2 = r_2_2_0_2;\n }\n {\n bool r_2_2_0_3 = true;\n r_2_2_0.s_3 = r_2_2_0_3;\n }\n r_2_2[0] = r_2_2_0;\n }\n {\n S_8a3363e1 memory r_2_2_1;\n {\n bool r_2_2_1_0 = true;\n r_2_2_1.s_0 = r_2_2_1_0;\n }\n {\n bool[4] memory r_2_2_1_1;\n {\n bool r_2_2_1_1_0 = false;\n r_2_2_1_1[0] = r_2_2_1_1_0;\n }\n {\n bool r_2_2_1_1_1 = true;\n r_2_2_1_1[1] = r_2_2_1_1_1;\n }\n {\n bool r_2_2_1_1_2 = true;\n r_2_2_1_1[2] = r_2_2_1_1_2;\n }\n {\n bool r_2_2_1_1_3 = true;\n r_2_2_1_1[3] = r_2_2_1_1_3;\n }\n r_2_2_1.s_1 = r_2_2_1_1;\n }\n {\n bytes9 r_2_2_1_2 = bytes9(0x2ade9bed32ddfcf160);\n r_2_2_1.s_2 = r_2_2_1_2;\n }\n {\n bool r_2_2_1_3 = false;\n r_2_2_1.s_3 = r_2_2_1_3;\n }\n r_2_2[1] = r_2_2_1;\n }\n r_2[2] = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000096ad8ddaa9a0e3936700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011133fe51ca1ec1dbee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b6869372b52f0ff43500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ec0cdce6a313bd58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003003c73ff9ae6206220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000e86f0d491f0b0122b2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000121cbbb42532a4c86e50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ff89c052b39a4884cd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a9c8b16e41efe4b49700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002c803d726547d4d821000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000156f06cf467fb3f08980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001e6a02c2290461fb33700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008543d39ae5f81cfa96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000024847046fded161afb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e6fd069560e3f60470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b24d5885d6c01dc32c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017608da01a146ca841900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012ade9bed32ddfcf16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,bytes3,int136,bool,(bool,bool,uint136,uint))", + "type": "(bool,bytes3,int136,bool,(bool,bool,uint136,uint))", + "value": [ + true, + "0x339e63", + "12374745748996048229977306144222629440027", + false, + [ + false, + true, + "67295978687557300844875719912787490823192", + "10736773593506676465983813895005541221188707826064891186456915474231039337997" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x339e63" + }, + { + "type": "number", + "value": "12374745748996048229977306144222629440027" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "67295978687557300844875719912787490823192" + }, + { + "type": "number", + "value": "10736773593506676465983813895005541221188707826064891186456915474231039337997" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506101e3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b6100386100ba565b604080518251151581526020808401516001600160e81b031916818301528383015160100b82840152606080850151151581840152608094850151805115159584019590955290840151151560a08301529183015170ffffffffffffffffffffffffffffffffff1660c082015291015160e08201526101000160405180910390f35b6100c2610161565b6100ca610161565b600180825262339e6360e81b60208084019190915270245db956d6ed1e6ddc87ce3ba031a1aa1b604080850191909152600060608086018290528251608080820185529281529384019490945270c5c3de0c9334b7850b97186307fdf2dc18918301919091527f17bccc6a84070beb491faae19d812e50f75ac858f821b085de9aedb63b7fa60d9282019290925290820152919050565b6040805160a0810182526000808252602080830182905282840182905260608084018390528451608081810187528482529281018490529485018390528401919091529091908201529056fea2646970667358221220cb2fd958b4c956956b446acb56c0c4f4087cd2c48eea26150065f4d613f9f93c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d85d73d4 {\n bool s_0;\n bool s_1;\n uint136 s_2;\n uint256 s_3;\n }\n\n struct S_281ee545 {\n bool s_0;\n bytes3 s_1;\n int136 s_2;\n bool s_3;\n S_d85d73d4 s_4;\n }\n\n function test () public pure returns (S_281ee545 memory) {\n S_281ee545 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes3 r_1 = bytes3(0x339e63);\n r.s_1 = r_1;\n }\n {\n int136 r_2 = 12374745748996048229977306144222629440027;\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n {\n S_d85d73d4 memory r_4;\n {\n bool r_4_0 = false;\n r_4.s_0 = r_4_0;\n }\n {\n bool r_4_1 = true;\n r_4.s_1 = r_4_1;\n }\n {\n uint136 r_4_2 = 67295978687557300844875719912787490823192;\n r_4.s_2 = r_4_2;\n }\n {\n uint r_4_3 = 10736773593506676465983813895005541221188707826064891186456915474231039337997;\n r_4.s_3 = r_4_3;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001339e630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000245db956d6ed1e6ddc87ce3ba031a1aa1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000c5c3de0c9334b7850b97186307fdf2dc1817bccc6a84070beb491faae19d812e50f75ac858f821b085de9aedb63b7fa60d" + }, + { + "name": "random-(bool[1],bytes19,bytes21,(address,bool,bytes8),bytes22)", + "type": "(bool[1],bytes19,bytes21,(address,bool,bytes8),bytes22)", + "value": [ + [true], + "0x032d82af63c2d077790354598cd194d920dadc", + "0xf9996b63587cb52c1c1c757ca7e8e302bb125a1f76", + ["0xf3a6D46e00d2c478C7277AcA05B03C06ae3649e4", true, "0x5b94c2c532f0f188"], + "0x9c0ee7d477f6df2fe3cbc09169bb6fe55edef1607e89" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x032d82af63c2d077790354598cd194d920dadc" + }, + { + "type": "hexstring", + "value": "0xf9996b63587cb52c1c1c757ca7e8e302bb125a1f76" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xf3a6D46e00d2c478C7277AcA05B03C06ae3649e4" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x5b94c2c532f0f188" + } + ] + }, + { + "type": "hexstring", + "value": "0x9c0ee7d477f6df2fe3cbc09169bb6fe55edef1607e89" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061027a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610181565b60405180910390f35b61005661010d565b61005e61010d565b610066610163565b600180825290825271cb60abd8f0b41dde40d516633465364836b7606a1b602080840191909152747cccb5b1ac3e5a960e0e3abe53f471815d892d0fbb60591b60408085019190915280516060808201835273f3a6d46e00d2c478c7277aca05b03c06ae3649e4825292810193909352670b729858a65e1e3160c31b90830152820152759c0ee7d477f6df2fe3cbc09169bb6fe55edef1607e8960501b6080820152919050565b6040518060a00160405280610120610163565b81526000602082018190526040820152606001610156604080516060810182526000808252602082018190529181019190915290565b8152600060209091015290565b60405180602001604052806001906020820280368337509192915050565b815160e08201908260005b60018110156101ad578251151582526020928301929091019060010161018c565b5050506cffffffffffffffffffffffffff19602084015116602083015260408301516101e960408401826affffffffffffffffffffff19169052565b506060830151610225606084018280516001600160a01b031682526020808201511515908301526040908101516001600160c01b031916910152565b506080929092015169ffffffffffffffffffff191660c091909101529056fea264697066735822122033d227157d32543749b9173f29f830fcd74805977461befd0ad42d7e7c7e0d7864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f30aa879 {\n address s_0;\n bool s_1;\n bytes8 s_2;\n }\n\n struct S_89433ce8 {\n bool[1] s_0;\n bytes19 s_1;\n bytes21 s_2;\n S_f30aa879 s_3;\n bytes22 s_4;\n }\n\n function test () public pure returns (S_89433ce8 memory) {\n S_89433ce8 memory r;\n {\n bool[1] memory r_0;\n {\n bool r_0_0 = true;\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n bytes19 r_1 = bytes19(0x032d82af63c2d077790354598cd194d920dadc);\n r.s_1 = r_1;\n }\n {\n bytes21 r_2 = bytes21(0xf9996b63587cb52c1c1c757ca7e8e302bb125a1f76);\n r.s_2 = r_2;\n }\n {\n S_f30aa879 memory r_3;\n {\n address r_3_0 = 0xf3a6D46e00d2c478C7277AcA05B03C06ae3649e4;\n r_3.s_0 = r_3_0;\n }\n {\n bool r_3_1 = true;\n r_3.s_1 = r_3_1;\n }\n {\n bytes8 r_3_2 = bytes8(0x5b94c2c532f0f188);\n r_3.s_2 = r_3_2;\n }\n r.s_3 = r_3;\n }\n {\n bytes22 r_4 = bytes22(0x9c0ee7d477f6df2fe3cbc09169bb6fe55edef1607e89);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000001032d82af63c2d077790354598cd194d920dadc00000000000000000000000000f9996b63587cb52c1c1c757ca7e8e302bb125a1f760000000000000000000000000000000000000000000000f3a6d46e00d2c478c7277aca05b03c06ae3649e400000000000000000000000000000000000000000000000000000000000000015b94c2c532f0f1880000000000000000000000000000000000000000000000009c0ee7d477f6df2fe3cbc09169bb6fe55edef1607e8900000000000000000000" + }, + { + "name": "random-(bool[2],bool,int248[4],address)[3][]", + "type": "(bool[2],bool,int248[4],address)[3][]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061023e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610127565b60405180910390f35b604080516000808252602082019092526060919081610083565b61007061008a565b8152602001906001900390816100685790505b5092915050565b60405180606001604052806003905b6100a16100b7565b8152602001906001900390816100995790505090565b60405180608001604052806100ca6100eb565b8152600060208201526040016100de610109565b8152600060209091015290565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b602080825282518282018190526000919060409081850190868401855b828110156101fb5781518460005b60038110156101e457825180518360005b600281101561018257825115158252918c0191908c0190600101610163565b5050508981015115158984015288810151606080850160005b60048110156101bb578351601e0b8252928d0192908d019060010161019b565b505091909101516001600160a01b031660e0840152509188019161010090910190600101610152565b505050610300939093019290850190600101610144565b509197965050505050505056fea264697066735822122033728e4496db6f27ee51257cc5449e39892cfda77c7d3096a2d410301044903264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0d7596de {\n bool[2] s_0;\n bool s_1;\n int248[4] s_2;\n address s_3;\n }\n\n function test () public pure returns (S_0d7596de[3][] memory) {\n S_0d7596de[3][] memory r = new S_0d7596de[3][](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool[4],string,(int216,string,bool,uint160),string)", + "type": "(bool[4],string,(int216,string,bool,uint160),string)", + "value": [ + [false, false, true, true], + "Moo é🚀", + [ + "-47110147712483538455214712437420425960422641744322046966066497571", + "Moo é🚀 MoMMoééMoéMo🚀M oéo 🚀Moooo é éo🚀é 🚀 Mooo", + false, + "207378436866086318699213319981775126356624066991" + ], + "Moo é🚀éooéoM🚀🚀éé 🚀 é 🚀Mo🚀oo🚀o ééMé o oMéoé🚀🚀o " + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-47110147712483538455214712437420425960422641744322046966066497571" + }, + { + "type": "string", + "value": "Moo é🚀 MoMMoééMoéMo🚀M oéo 🚀Moooo é éo🚀é 🚀 Mooo" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "207378436866086318699213319981775126356624066991" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éooéoM🚀🚀éé 🚀 é 🚀Mo🚀oo🚀o ééMé o oMéoé🚀🚀o " + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103c9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610260565b60405180910390f35b610056610152565b61005e610152565b6100666101a9565b600080825260208083018290526001604080850182905260608086019290925293855283518085018552600a8152689adede418753e13f3560b71b81840152858301528351608080820186528184018390528186018590529181018490527a7284b7867a24941baa930fb65fbe945b0731d3c996574cf4a2c8221981528451918201909452604b80825290916102f290830139602080840191909152600060408085018290527324532bb48bcd5a3e994141b645e1a9cd4f32c9af6060860152858101949094528351608081019094526057808552909392509061033d90830139606083015250919050565b60405180608001604052806101656101a9565b81526020016060815260200161019c6040805160808101825260008082526060602083018190529282018190529181019190915290565b8152602001606081525090565b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b818110156101ed576020818501810151868301820152016101d1565b818111156101ff576000602083870101525b50601f01601f19169290920160200192915050565b8051601a0b8252600060208201516080602085015261023660808501826101c7565b6040848101511515908601526060938401516001600160a01b031693909401929092525090919050565b6020808252825160009190828483015b60048210156102915782511515815291830191600191909101908301610270565b50505083015160e060a08401526102ac6101008401826101c7565b90506040840151601f19808584030160c08601526102ca8383610214565b925060608601519150808584030160e0860152506102e882826101c7565b9594505050505056fe4d6f6f20c3a9f09f9a802020204d6f4d4d6fc3a9c3a94d6fc3a94d6ff09f9a804d206fc3a96f20202020f09f9a804d6f6f6f6f20c3a92020c3a96ff09f9a80c3a920f09f9a80204d6f6f6f4d6f6f20c3a9f09f9a80c3a96f6fc3a96f4df09f9a80f09f9a80c3a9c3a92020f09f9a8020c3a920f09f9a804d6ff09f9a806f6ff09f9a806f20c3a9c3a94dc3a9206f206f4dc3a96fc3a9f09f9a80f09f9a806f202020a26469706673582212200d7a0260391c7ed4a00d9ada2ecd7f72461bc0ae40767a3e62f3748ef3fdd4ef64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d0637027 {\n int216 s_0;\n string s_1;\n bool s_2;\n uint160 s_3;\n }\n\n struct S_d45ff205 {\n bool[4] s_0;\n string s_1;\n S_d0637027 s_2;\n string s_3;\n }\n\n function test () public pure returns (S_d45ff205 memory) {\n S_d45ff205 memory r;\n {\n bool[4] memory r_0;\n {\n bool r_0_0 = false;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0[1] = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0[2] = r_0_2;\n }\n {\n bool r_0_3 = true;\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r.s_1 = r_1;\n }\n {\n S_d0637027 memory r_2;\n {\n int216 r_2_0 = -47110147712483538455214712437420425960422641744322046966066497571;\n r_2.s_0 = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀 MoMMoééMoéMo🚀M oéo 🚀Moooo é éo🚀é 🚀 Mooo\";\n r_2.s_1 = r_2_1;\n }\n {\n bool r_2_2 = false;\n r_2.s_2 = r_2_2;\n }\n {\n uint160 r_2_3 = 207378436866086318699213319981775126356624066991;\n r_2.s_3 = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀éooéoM🚀🚀éé 🚀 é 🚀Mo🚀oo🚀o ééMé o oMéoé🚀🚀o \";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000ffffffffff8d7b487985db6be4556cf049a0416ba4f8ce2c3669a8b30b5d37dd0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024532bb48bcd5a3e994141b645e1a9cd4f32c9af000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a802020204d6f4d4d6fc3a9c3a94d6fc3a94d6ff09f9a804d206fc3a96f20202020f09f9a804d6f6f6f6f20c3a92020c3a96ff09f9a80c3a920f09f9a80204d6f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a80c3a96f6fc3a96f4df09f9a80f09f9a80c3a9c3a92020f09f9a8020c3a920f09f9a804d6ff09f9a806f6ff09f9a806f20c3a9c3a94dc3a9206f206f4dc3a96fc3a9f09f9a80f09f9a806f202020000000000000000000" + }, + { + "name": "random-(bytes17[2][],bytes9,bool,int56[2][1])", + "type": "(bytes17[2][],bytes9,bool,int56[2][1])", + "value": [ + [ + ["0xf15a23b16ae0eeab08a6e5403786a76444", "0xa14c9f3614241a4dba94de2eff3a681d9d"], + ["0x0b3c1640dc361500a3d4bc41ba5460fb58", "0xa1a91cced57f52a9913f6077b496a3b589"] + ], + "0x0b1cead6bf4b50c513", + false, + [["-29465293627874190", "6017574275827652"]] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xf15a23b16ae0eeab08a6e5403786a76444" + }, + { + "type": "hexstring", + "value": "0xa14c9f3614241a4dba94de2eff3a681d9d" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x0b3c1640dc361500a3d4bc41ba5460fb58" + }, + { + "type": "hexstring", + "value": "0xa1a91cced57f52a9913f6077b496a3b589" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x0b1cead6bf4b50c513" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-29465293627874190" + }, + { + "type": "number", + "value": "6017574275827652" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610383806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061027b565b60405180910390f35b61005661019c565b61005e61019c565b60408051600280825260608201909252600091816020015b61007e6101d5565b81526020019060019003908161007657905050905061009b6101d5565b703c5688ec5ab83baac229b9500de1a9d911607a1b815270a14c9f3614241a4dba94de2eff3a681d9d60781b60208201528151819083906000906100e1576100e1610337565b6020026020010181905250506100f56101d5565b70016782c81b86c2a0147a9788374a8c1f6b607b1b815270a1a91cced57f52a9913f6077b496a3b58960781b6020820152815181908390600190811061013d5761013d610337565b60209081029190910181019190915291835250680b1cead6bf4b50c51360b81b90820152600060408201526101706101f3565b6101786101d5565b6668ae8747e45b8d198152661560f3b11ec7c4602082015281526060820152919050565b60405180608001604052806060815260200160006001600160b81b03191681526020016000151581526020016101d06101f3565b905290565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806001905b61020a6101d5565b8152602001906001900390816102025790505090565b806000805b60018082106102345750610274565b835186845b600281101561025a57825160060b8252602092830192909101908301610239565b505050604095909501945060209290920191600101610225565b5050505050565b6020808252825160a083830152805160c0840181905260009291820190839060e0860190825b818110156102f357845183855b60028110156102dd5782516effffffffffffffffffffffffffffff1916825291880191908801906001016102ae565b50505093850193604092909201916001016102a1565b5050928601516001600160b81b031981166040870152926040870151801515606088015293506060870151935061032d6080870185610220565b9695505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212206bef9d0db46c08c1797a89f78cebeb41316e2145ea811dc2b12ff9d776a8ae5f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6a87dc33 {\n bytes17[2][] s_0;\n bytes9 s_1;\n bool s_2;\n int56[2][1] s_3;\n }\n\n function test () public pure returns (S_6a87dc33 memory) {\n S_6a87dc33 memory r;\n {\n bytes17[2][] memory r_0 = new bytes17[2][](2);\n {\n bytes17[2] memory r_0_0;\n {\n bytes17 r_0_0_0 = bytes17(0xf15a23b16ae0eeab08a6e5403786a76444);\n r_0_0[0] = r_0_0_0;\n }\n {\n bytes17 r_0_0_1 = bytes17(0xa14c9f3614241a4dba94de2eff3a681d9d);\n r_0_0[1] = r_0_0_1;\n }\n r_0[0] = r_0_0;\n }\n {\n bytes17[2] memory r_0_1;\n {\n bytes17 r_0_1_0 = bytes17(0x0b3c1640dc361500a3d4bc41ba5460fb58);\n r_0_1[0] = r_0_1_0;\n }\n {\n bytes17 r_0_1_1 = bytes17(0xa1a91cced57f52a9913f6077b496a3b589);\n r_0_1[1] = r_0_1_1;\n }\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n bytes9 r_1 = bytes9(0x0b1cead6bf4b50c513);\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n int56[2][1] memory r_3;\n {\n int56[2] memory r_3_0;\n {\n int56 r_3_0_0 = -29465293627874190;\n r_3_0[0] = r_3_0_0;\n }\n {\n int56 r_3_0_1 = 6017574275827652;\n r_3_0[1] = r_3_0_1;\n }\n r_3[0] = r_3_0;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00b1cead6bf4b50c51300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff975178b81ba472000000000000000000000000000000000000000000000000001560f3b11ec7c40000000000000000000000000000000000000000000000000000000000000002f15a23b16ae0eeab08a6e5403786a76444000000000000000000000000000000a14c9f3614241a4dba94de2eff3a681d9d0000000000000000000000000000000b3c1640dc361500a3d4bc41ba5460fb58000000000000000000000000000000a1a91cced57f52a9913f6077b496a3b589000000000000000000000000000000" + }, + { + "name": "random-(bytes27,(bool,bytes14,bool[1]),bytes13,bool[3])", + "type": "(bytes27,(bool,bytes14,bool[1]),bytes13,bool[3])", + "value": [ + "0x7cbd065b5c832e2dfdd940b647b5ff69e6922967ca943c2ff5a9ea", + [true, "0x84f337e28229b6ce08ca206fa93f", [false]], + "0x65ec67bda87234d25aed7c91fc", + [false, true, true] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x7cbd065b5c832e2dfdd940b647b5ff69e6922967ca943c2ff5a9ea" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x84f337e28229b6ce08ca206fa93f" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x65ec67bda87234d25aed7c91fc" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061028e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101b0565b60405180910390f35b6100566100fa565b61005e6100fa565b7f7cbd065b5c832e2dfdd940b647b5ff69e6922967ca943c2ff5a9ea0000000000815261008961012e565b600181526d84f337e28229b6ce08ca206fa93f60901b60208201526100ac610149565b6000815260408281019190915260208301919091526c197b19ef6a1c8d3496bb5f247f609a1b908201526100de610167565b6000815260016020820181905260408201526060820152919050565b6040805160808101909152600081526020810161011561012e565b815260006020820152604001610129610167565b905290565b60408051606081018252600080825260208201529081016101295b60405180602001604052806001906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b8060005b60038110156101aa5781511515845260209384019390910190600101610189565b50505050565b815164ffffffffff1916815260208083015180511515828401528082015171ffffffffffffffffffffffffffffffffffff19166040808501919091520151610100830191906060840160005b600181101561021b5782511515825291830191908301906001016101fc565b50505050604083015172ffffffffffffffffffffffffffffffffffffff19166080830152606083015161025160a0840182610185565b509291505056fea264697066735822122043202246f371c3dcf35e00a642fdc9b5b1fc1501edbabd2b1f6e2103257932e664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c9242aab {\n bool s_0;\n bytes14 s_1;\n bool[1] s_2;\n }\n\n struct S_31affa19 {\n bytes27 s_0;\n S_c9242aab s_1;\n bytes13 s_2;\n bool[3] s_3;\n }\n\n function test () public pure returns (S_31affa19 memory) {\n S_31affa19 memory r;\n {\n bytes27 r_0 = bytes27(0x7cbd065b5c832e2dfdd940b647b5ff69e6922967ca943c2ff5a9ea);\n r.s_0 = r_0;\n }\n {\n S_c9242aab memory r_1;\n {\n bool r_1_0 = true;\n r_1.s_0 = r_1_0;\n }\n {\n bytes14 r_1_1 = bytes14(0x84f337e28229b6ce08ca206fa93f);\n r_1.s_1 = r_1_1;\n }\n {\n bool[1] memory r_1_2;\n {\n bool r_1_2_0 = false;\n r_1_2[0] = r_1_2_0;\n }\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n bytes13 r_2 = bytes13(0x65ec67bda87234d25aed7c91fc);\n r.s_2 = r_2;\n }\n {\n bool[3] memory r_3;\n {\n bool r_3_0 = false;\n r_3[0] = r_3_0;\n }\n {\n bool r_3_1 = true;\n r_3[1] = r_3_1;\n }\n {\n bool r_3_2 = true;\n r_3[2] = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x7cbd065b5c832e2dfdd940b647b5ff69e6922967ca943c2ff5a9ea0000000000000000000000000000000000000000000000000000000000000000000000000184f337e28229b6ce08ca206fa93f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065ec67bda87234d25aed7c91fc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(int16,address[3][2],address,int,bool)[3]", + "type": "(int16,address[3][2],address,int,bool)[3]", + "value": [ + [ + "24826", + [ + [ + "0xF7BDB6D8D06E3b70174Eef2d133053d0B952aDa3", + "0x15b294147c755e776bB9C663b69cd5de85108A96", + "0x93C14F53b90d606a5D4C8824Eea1B0Bc6aD28211" + ], + [ + "0x05Bc6b2b7BcB71DF5303807F1734b6F5E16F516d", + "0xDAFd72D478E89515A5A6a0b8F20C2Dff8b152a5E", + "0x39219e181e2e3a86d4Db08D0538c673446ee82Be" + ] + ], + "0x133EED9b33b34DC7fD88B0e3BC9F70a138AB272e", + "17312802487066422789384657957268660823471000355805738865025483367106340816921", + true + ], + [ + "5885", + [ + [ + "0x658fC5d68617B260205c9F1F2Ab4739A29793DdE", + "0xC91C328a1E53708230EAB6EDaf4297E530a142b1", + "0x61c2D54C9E4490A260A3F5df27D4CE50d46457a0" + ], + [ + "0xB693F389BA79a9181727a1892d3A3Acc724e0DfB", + "0xB50c3b5F9E53eca2b7bFD62bab11FAEeE1471570", + "0x546A4d62a5bC839b146805E57972412878d50448" + ] + ], + "0x597B09CdacC31098B1608d59568761B2F727699E", + "55770194155942698025815999335542802608364125773158823757034984929260061030658", + true + ], + [ + "-13850", + [ + [ + "0xF3bB1E3625f815CCa668290C5551d2Ca69dDB799", + "0x93b8Aa5eD10a75a76b6612E81626BFF81497cc51", + "0x5bd3038D0f4e65B92398d5Bea735c836B2159D09" + ], + [ + "0x1d9E4Fd513dD5fe332Cb5Ddd1F0C331f152Ccc2E", + "0x6e0c9825893B783aCca30D9f40a889632D9d2158", + "0xa05947cEd92eAdd1c6d8eF5bEf08c514e3BFdA54" + ] + ], + "0xd0D41C6c082359C86DFFAB45cE0804CAB5c8C4C8", + "32118151576892511276758968248724335403813420771703519179618247057235501408466", + true + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "24826" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xF7BDB6D8D06E3b70174Eef2d133053d0B952aDa3" + }, + { + "type": "address", + "value": "0x15b294147c755e776bB9C663b69cd5de85108A96" + }, + { + "type": "address", + "value": "0x93C14F53b90d606a5D4C8824Eea1B0Bc6aD28211" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x05Bc6b2b7BcB71DF5303807F1734b6F5E16F516d" + }, + { + "type": "address", + "value": "0xDAFd72D478E89515A5A6a0b8F20C2Dff8b152a5E" + }, + { + "type": "address", + "value": "0x39219e181e2e3a86d4Db08D0538c673446ee82Be" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x133EED9b33b34DC7fD88B0e3BC9F70a138AB272e" + }, + { + "type": "number", + "value": "17312802487066422789384657957268660823471000355805738865025483367106340816921" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "5885" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x658fC5d68617B260205c9F1F2Ab4739A29793DdE" + }, + { + "type": "address", + "value": "0xC91C328a1E53708230EAB6EDaf4297E530a142b1" + }, + { + "type": "address", + "value": "0x61c2D54C9E4490A260A3F5df27D4CE50d46457a0" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xB693F389BA79a9181727a1892d3A3Acc724e0DfB" + }, + { + "type": "address", + "value": "0xB50c3b5F9E53eca2b7bFD62bab11FAEeE1471570" + }, + { + "type": "address", + "value": "0x546A4d62a5bC839b146805E57972412878d50448" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x597B09CdacC31098B1608d59568761B2F727699E" + }, + { + "type": "number", + "value": "55770194155942698025815999335542802608364125773158823757034984929260061030658" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-13850" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xF3bB1E3625f815CCa668290C5551d2Ca69dDB799" + }, + { + "type": "address", + "value": "0x93b8Aa5eD10a75a76b6612E81626BFF81497cc51" + }, + { + "type": "address", + "value": "0x5bd3038D0f4e65B92398d5Bea735c836B2159D09" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x1d9E4Fd513dD5fe332Cb5Ddd1F0C331f152Ccc2E" + }, + { + "type": "address", + "value": "0x6e0c9825893B783aCca30D9f40a889632D9d2158" + }, + { + "type": "address", + "value": "0xa05947cEd92eAdd1c6d8eF5bEf08c514e3BFdA54" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xd0D41C6c082359C86DFFAB45cE0804CAB5c8C4C8" + }, + { + "type": "number", + "value": "32118151576892511276758968248724335403813420771703519179618247057235501408466" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610563806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610465565b60405180910390f35b6100566103b5565b61005e6103b5565b6100666103e2565b6160fa815261007361041a565b61007b610447565b73f7bdb6d8d06e3b70174eef2d133053d0b952ada381527315b294147c755e776bb9c663b69cd5de85108a9660208201527393c14f53b90d606a5d4c8824eea1b0bc6ad28211604082015281526100d0610447565b7305bc6b2b7bcb71df5303807f1734b6f5e16f516d815273dafd72d478e89515a5a6a0b8f20c2dff8b152a5e6020808301919091527339219e181e2e3a86d4db08d0538c673446ee82be6040808401919091528382019290925283019190915273133eed9b33b34dc7fd88b0e3bc9f70a138ab272e908201527f2646b2eeb4e5e005a9ee93fee03302ba9459c136bb781fb6ee5e41497af1881960608201526001608082015281526101806103e2565b6116fd815261018d61041a565b610195610447565b73658fc5d68617b260205c9f1f2ab4739a29793dde815273c91c328a1e53708230eab6edaf4297e530a142b160208201527361c2d54c9e4490a260a3f5df27d4ce50d46457a0604082015281526101ea610447565b73b693f389ba79a9181727a1892d3a3acc724e0dfb815273b50c3b5f9e53eca2b7bfd62bab11faeee147157060208083019190915273546a4d62a5bc839b146805e57972412878d50448604080840191909152838201929092528381019290925273597b09cdacc31098b1608d59568761b2f727699e908301527f7b4ccfafe1ee5d0912f4fbd1e684d934aa63b5a82fbaa62a4b27ba66243b790260608301526001608083015282015261029c6103e2565b6136191981526102aa61041a565b6102b2610447565b73f3bb1e3625f815cca668290c5551d2ca69ddb79981527393b8aa5ed10a75a76b6612e81626bff81497cc516020820152735bd3038d0f4e65b92398d5bea735c836b2159d0960408201528152610307610447565b731d9e4fd513dd5fe332cb5ddd1f0c331f152ccc2e8152736e0c9825893b783acca30d9f40a889632d9d215860208083019190915273a05947ced92eadd1c6d8ef5bef08c514e3bfda546040808401919091528382019290925283019190915273d0d41c6c082359c86dffab45ce0804cab5c8c4c8828201527f47023ac5c6f6f9c62e0eccd0a248a786fbc4053ba426342c0693f785298860d2606083015260016080830152820152919050565b60405180606001604052806003905b6103cc6103e2565b8152602001906001900390816103c45790505090565b6040518060a00160405280600060010b81526020016103ff61041a565b81526000602082018190526040820181905260609091015290565b60405180604001604052806002905b610431610447565b8152602001906001900390816104295790505090565b60405180606001604052806003906020820280368337509192915050565b6103c08101818360005b600380821061047e5750610524565b82518051600181810b8752602091508183015182880160005b60028110156104df5782518260005b898110156104ca5782516001600160a01b03168252918701919087019086016104a6565b50505091840191606091909101908301610497565b5050505060408201516001600160a01b031660e0870152606082015161010087015260809091015115156101208601526101409094019392909201915060010161046f565b5050509291505056fea26469706673582212208ef644a64dc2752057999497cd8ef55ddccc7e676b557e471f0284d880cd182464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_bf804ccc {\n int16 s_0;\n address[3][2] s_1;\n address s_2;\n int256 s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_bf804ccc[3] memory) {\n S_bf804ccc[3] memory r;\n {\n S_bf804ccc memory r_0;\n {\n int16 r_0_0 = 24826;\n r_0.s_0 = r_0_0;\n }\n {\n address[3][2] memory r_0_1;\n {\n address[3] memory r_0_1_0;\n {\n address r_0_1_0_0 = 0xF7BDB6D8D06E3b70174Eef2d133053d0B952aDa3;\n r_0_1_0[0] = r_0_1_0_0;\n }\n {\n address r_0_1_0_1 = 0x15b294147c755e776bB9C663b69cd5de85108A96;\n r_0_1_0[1] = r_0_1_0_1;\n }\n {\n address r_0_1_0_2 = 0x93C14F53b90d606a5D4C8824Eea1B0Bc6aD28211;\n r_0_1_0[2] = r_0_1_0_2;\n }\n r_0_1[0] = r_0_1_0;\n }\n {\n address[3] memory r_0_1_1;\n {\n address r_0_1_1_0 = 0x05Bc6b2b7BcB71DF5303807F1734b6F5E16F516d;\n r_0_1_1[0] = r_0_1_1_0;\n }\n {\n address r_0_1_1_1 = 0xDAFd72D478E89515A5A6a0b8F20C2Dff8b152a5E;\n r_0_1_1[1] = r_0_1_1_1;\n }\n {\n address r_0_1_1_2 = 0x39219e181e2e3a86d4Db08D0538c673446ee82Be;\n r_0_1_1[2] = r_0_1_1_2;\n }\n r_0_1[1] = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0x133EED9b33b34DC7fD88B0e3BC9F70a138AB272e;\n r_0.s_2 = r_0_2;\n }\n {\n int r_0_3 = 17312802487066422789384657957268660823471000355805738865025483367106340816921;\n r_0.s_3 = r_0_3;\n }\n {\n bool r_0_4 = true;\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_bf804ccc memory r_1;\n {\n int16 r_1_0 = 5885;\n r_1.s_0 = r_1_0;\n }\n {\n address[3][2] memory r_1_1;\n {\n address[3] memory r_1_1_0;\n {\n address r_1_1_0_0 = 0x658fC5d68617B260205c9F1F2Ab4739A29793DdE;\n r_1_1_0[0] = r_1_1_0_0;\n }\n {\n address r_1_1_0_1 = 0xC91C328a1E53708230EAB6EDaf4297E530a142b1;\n r_1_1_0[1] = r_1_1_0_1;\n }\n {\n address r_1_1_0_2 = 0x61c2D54C9E4490A260A3F5df27D4CE50d46457a0;\n r_1_1_0[2] = r_1_1_0_2;\n }\n r_1_1[0] = r_1_1_0;\n }\n {\n address[3] memory r_1_1_1;\n {\n address r_1_1_1_0 = 0xB693F389BA79a9181727a1892d3A3Acc724e0DfB;\n r_1_1_1[0] = r_1_1_1_0;\n }\n {\n address r_1_1_1_1 = 0xB50c3b5F9E53eca2b7bFD62bab11FAEeE1471570;\n r_1_1_1[1] = r_1_1_1_1;\n }\n {\n address r_1_1_1_2 = 0x546A4d62a5bC839b146805E57972412878d50448;\n r_1_1_1[2] = r_1_1_1_2;\n }\n r_1_1[1] = r_1_1_1;\n }\n r_1.s_1 = r_1_1;\n }\n {\n address r_1_2 = 0x597B09CdacC31098B1608d59568761B2F727699E;\n r_1.s_2 = r_1_2;\n }\n {\n int r_1_3 = 55770194155942698025815999335542802608364125773158823757034984929260061030658;\n r_1.s_3 = r_1_3;\n }\n {\n bool r_1_4 = true;\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n {\n S_bf804ccc memory r_2;\n {\n int16 r_2_0 = -13850;\n r_2.s_0 = r_2_0;\n }\n {\n address[3][2] memory r_2_1;\n {\n address[3] memory r_2_1_0;\n {\n address r_2_1_0_0 = 0xF3bB1E3625f815CCa668290C5551d2Ca69dDB799;\n r_2_1_0[0] = r_2_1_0_0;\n }\n {\n address r_2_1_0_1 = 0x93b8Aa5eD10a75a76b6612E81626BFF81497cc51;\n r_2_1_0[1] = r_2_1_0_1;\n }\n {\n address r_2_1_0_2 = 0x5bd3038D0f4e65B92398d5Bea735c836B2159D09;\n r_2_1_0[2] = r_2_1_0_2;\n }\n r_2_1[0] = r_2_1_0;\n }\n {\n address[3] memory r_2_1_1;\n {\n address r_2_1_1_0 = 0x1d9E4Fd513dD5fe332Cb5Ddd1F0C331f152Ccc2E;\n r_2_1_1[0] = r_2_1_1_0;\n }\n {\n address r_2_1_1_1 = 0x6e0c9825893B783aCca30D9f40a889632D9d2158;\n r_2_1_1[1] = r_2_1_1_1;\n }\n {\n address r_2_1_1_2 = 0xa05947cEd92eAdd1c6d8eF5bEf08c514e3BFdA54;\n r_2_1_1[2] = r_2_1_1_2;\n }\n r_2_1[1] = r_2_1_1;\n }\n r_2.s_1 = r_2_1;\n }\n {\n address r_2_2 = 0xd0D41C6c082359C86DFFAB45cE0804CAB5c8C4C8;\n r_2.s_2 = r_2_2;\n }\n {\n int r_2_3 = 32118151576892511276758968248724335403813420771703519179618247057235501408466;\n r_2.s_3 = r_2_3;\n }\n {\n bool r_2_4 = true;\n r_2.s_4 = r_2_4;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000060fa000000000000000000000000f7bdb6d8d06e3b70174eef2d133053d0b952ada300000000000000000000000015b294147c755e776bb9c663b69cd5de85108a9600000000000000000000000093c14f53b90d606a5d4c8824eea1b0bc6ad2821100000000000000000000000005bc6b2b7bcb71df5303807f1734b6f5e16f516d000000000000000000000000dafd72d478e89515a5a6a0b8f20c2dff8b152a5e00000000000000000000000039219e181e2e3a86d4db08d0538c673446ee82be000000000000000000000000133eed9b33b34dc7fd88b0e3bc9f70a138ab272e2646b2eeb4e5e005a9ee93fee03302ba9459c136bb781fb6ee5e41497af18819000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000016fd000000000000000000000000658fc5d68617b260205c9f1f2ab4739a29793dde000000000000000000000000c91c328a1e53708230eab6edaf4297e530a142b100000000000000000000000061c2d54c9e4490a260a3f5df27d4ce50d46457a0000000000000000000000000b693f389ba79a9181727a1892d3a3acc724e0dfb000000000000000000000000b50c3b5f9e53eca2b7bfd62bab11faeee1471570000000000000000000000000546a4d62a5bc839b146805e57972412878d50448000000000000000000000000597b09cdacc31098b1608d59568761b2f727699e7b4ccfafe1ee5d0912f4fbd1e684d934aa63b5a82fbaa62a4b27ba66243b79020000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9e6000000000000000000000000f3bb1e3625f815cca668290c5551d2ca69ddb79900000000000000000000000093b8aa5ed10a75a76b6612e81626bff81497cc510000000000000000000000005bd3038d0f4e65b92398d5bea735c836b2159d090000000000000000000000001d9e4fd513dd5fe332cb5ddd1f0c331f152ccc2e0000000000000000000000006e0c9825893b783acca30d9f40a889632d9d2158000000000000000000000000a05947ced92eadd1c6d8ef5bef08c514e3bfda54000000000000000000000000d0d41c6c082359c86dffab45ce0804cab5c8c4c847023ac5c6f6f9c62e0eccd0a248a786fbc4053ba426342c0693f785298860d20000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(int248[2],(uint112,address[3],address,string),address)", + "type": "(int248[2],(uint112,address[3],address,string),address)", + "value": [ + [ + "-109595436330552087481982157014484607307988036114875605199073492951239166046", + "-136501913633045434865938279333778612990941016146748986722019983651688599506" + ], + [ + "5056451206752722485552853939679128", + [ + "0x547B77d272454295e738CEA8f2Ca0fc97829E882", + "0x5af7744d704F1C8750D181d7b0137e14e711423E", + "0x0786585b82c2521D8e5852f7eA450B0C3E9540FF" + ], + "0x5F46A1FD96F313FBC4956a478B1674d8C701Ff5a", + "Moo é🚀ooé🚀oé" + ], + "0xD9E3524015D4feCCab8b5A73B67bdaF4a8Cf40f5" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-109595436330552087481982157014484607307988036114875605199073492951239166046" + }, + { + "type": "number", + "value": "-136501913633045434865938279333778612990941016146748986722019983651688599506" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "5056451206752722485552853939679128" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x547B77d272454295e738CEA8f2Ca0fc97829E882" + }, + { + "type": "address", + "value": "0x5af7744d704F1C8750D181d7b0137e14e711423E" + }, + { + "type": "address", + "value": "0x0786585b82c2521D8e5852f7eA450B0C3E9540FF" + } + ] + }, + { + "type": "address", + "value": "0x5F46A1FD96F313FBC4956a478B1674d8C701Ff5a" + }, + { + "type": "string", + "value": "Moo é🚀ooé🚀oé" + } + ] + }, + { + "type": "address", + "value": "0xD9E3524015D4feCCab8b5A73B67bdaF4a8Cf40f5" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610391806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610283565b60405180910390f35b610056610196565b61005e610196565b6100666101c3565b7fffc1f89f55b277a237a9b80e21ba27ca32953b9ba926cdcfd2742fb90208f7a281527fffb2be1e9fabeb9e9d2fc2422946d9023c746b25eecbbbae86e810db3b81302e602082015281526100b96101e1565b6df94d63068bd49d04689fd6c86f9881526100d2610218565b73547b77d272454295e738cea8f2ca0fc97829e8828152735af7744d704f1c8750d181d7b0137e14e711423e602080830191909152730786585b82c2521d8e5852f7ea450b0c3e9540ff60408084019190915283820192909252735f46a1fd96f313fbc4956a478b1674d8c701ff5a838301528151808301835260158152744d6f6f20c3a9f09f9a806f6fc3a9f09f9a806fc3a960581b81830152606084015283019190915273d9e3524015d4feccab8b5a73b67bdaf4a8cf40f590820152919050565b60405180606001604052806101a96101c3565b81526020016101b66101e1565b8152600060209091015290565b60405180604001604052806002906020820280368337509192915050565b604051806080016040528060006001600160701b03168152602001610204610218565b815260006020820152606060409091015290565b60405180606001604052806003906020820280368337509192915050565b6000815180845260005b8181101561025c57602081850181015186830182015201610240565b8181111561026e576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825160009190828483015b60028210156102b5578251601e0b815291830191600191909101908301610293565b50505080840151608060608501526001600160701b0381511660a08501528181015160c0850160005b60038110156103045782516001600160a01b0316825291840191908401906001016102de565b50505060408101516001600160a01b03166101208501526060015160c06101408501529050610337610160840182610236565b9050604084015161035360808501826001600160a01b03169052565b50939250505056fea2646970667358221220f8f007749f466231b72d3cc556ae62ffbeadedb8e87a75c1cace8417c36b6d3f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b18c50ab {\n uint112 s_0;\n address[3] s_1;\n address s_2;\n string s_3;\n }\n\n struct S_74ccb9ae {\n int248[2] s_0;\n S_b18c50ab s_1;\n address s_2;\n }\n\n function test () public pure returns (S_74ccb9ae memory) {\n S_74ccb9ae memory r;\n {\n int248[2] memory r_0;\n {\n int248 r_0_0 = -109595436330552087481982157014484607307988036114875605199073492951239166046;\n r_0[0] = r_0_0;\n }\n {\n int248 r_0_1 = -136501913633045434865938279333778612990941016146748986722019983651688599506;\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n S_b18c50ab memory r_1;\n {\n uint112 r_1_0 = 5056451206752722485552853939679128;\n r_1.s_0 = r_1_0;\n }\n {\n address[3] memory r_1_1;\n {\n address r_1_1_0 = 0x547B77d272454295e738CEA8f2Ca0fc97829E882;\n r_1_1[0] = r_1_1_0;\n }\n {\n address r_1_1_1 = 0x5af7744d704F1C8750D181d7b0137e14e711423E;\n r_1_1[1] = r_1_1_1;\n }\n {\n address r_1_1_2 = 0x0786585b82c2521D8e5852f7eA450B0C3E9540FF;\n r_1_1[2] = r_1_1_2;\n }\n r_1.s_1 = r_1_1;\n }\n {\n address r_1_2 = 0x5F46A1FD96F313FBC4956a478B1674d8C701Ff5a;\n r_1.s_2 = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀ooé🚀oé\";\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xD9E3524015D4feCCab8b5A73B67bdaF4a8Cf40f5;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020ffc1f89f55b277a237a9b80e21ba27ca32953b9ba926cdcfd2742fb90208f7a2ffb2be1e9fabeb9e9d2fc2422946d9023c746b25eecbbbae86e810db3b81302e0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000d9e3524015d4feccab8b5a73b67bdaf4a8cf40f5000000000000000000000000000000000000f94d63068bd49d04689fd6c86f98000000000000000000000000547b77d272454295e738cea8f2ca0fc97829e8820000000000000000000000005af7744d704f1c8750d181d7b0137e14e711423e0000000000000000000000000786585b82c2521d8e5852f7ea450b0c3e9540ff0000000000000000000000005f46a1fd96f313fbc4956a478b1674d8c701ff5a00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a806f6fc3a9f09f9a806fc3a90000000000000000000000" + }, + { + "name": "random-(string,address,address,(string[],address,int240),bytes24)", + "type": "(string,address,address,(string[],address,int240),bytes24)", + "value": [ + "Moo é🚀MM🚀é o🚀oooMéoMM é Mo MoMM o🚀🚀o🚀é🚀MoM🚀oooooé éM o", + "0x6225af9Df605b4D3A3273D0C075C5dC2254b1D69", + "0xFabCfFb9Cb191CB7253e55c547f8627A7925083E", + [ + [ + "Moo é🚀🚀oé 🚀éooooé 🚀 🚀 Moo oMM🚀M🚀oéMM🚀 oM 🚀M 🚀🚀ooooooo🚀", + "Moo é🚀Mééooo Mééo " + ], + "0x3d07A89179EF2774f76E64135079903457B7a799", + "464996287794987070514589851137391336834764148366790480853506462626212904" + ], + "0x43771aeee34beaff5727081888ad2e7367f88c14eec961fc" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MM🚀é o🚀oooMéoMM é Mo MoMM o🚀🚀o🚀é🚀MoM🚀oooooé éM o" + }, + { + "type": "address", + "value": "0x6225af9Df605b4D3A3273D0C075C5dC2254b1D69" + }, + { + "type": "address", + "value": "0xFabCfFb9Cb191CB7253e55c547f8627A7925083E" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oé 🚀éooooé 🚀 🚀 Moo oMM🚀M🚀oéMM🚀 oM 🚀M 🚀🚀ooooooo🚀" + }, + { + "type": "string", + "value": "Moo é🚀Mééooo Mééo " + } + ] + }, + { + "type": "address", + "value": "0x3d07A89179EF2774f76E64135079903457B7a799" + }, + { + "type": "number", + "value": "464996287794987070514589851137391336834764148366790480853506462626212904" + } + ] + }, + { + "type": "hexstring", + "value": "0x43771aeee34beaff5727081888ad2e7367f88c14eec961fc" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061048d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061029d565b60405180910390f35b61005661020a565b61005e61020a565b60006040518060800160405280605581526020016103a260559139825250736225af9df605b4d3a3273d0c075c5dc2254b1d6960208083019190915273fabcffb9cb191cb7253e55c547f8627a7925083e60408084019190915280516060808201835280825260009382018490528183018490528251600280825291810190935290929190816020015b60608152602001906001900390816100e857905050905060006040518060a00160405280606181526020016103f760619139905080826000815181106101305761013061038b565b60200260200101819052505060006040518060400160405280601b81526020017f4d6f6f20c3a9f09f9a804dc3a9c3a96f6f6f204dc3a9c3a96f202000000000008152509050808260018151811061018a5761018a61038b565b60209081029190910181019190915291835250733d07a89179ef2774f76e64135079903457b7a799908201527d435fabc095b12caf67e311027aa01ac411f8c004f4ea493a982f3995ec28604082015260608201527f43771aeee34beaff5727081888ad2e7367f88c14eec961fc00000000000000006080820152919050565b6040805160a08101825260608082526000602080840182905283850182905284518084018652838152908101829052938401529091908201908152600060209091015290565b6000815180845260005b818110156102765760208185018101518683018201520161025a565b81811115610288576000602083870101525b50601f01601f19169290920160200192915050565b60006020808352835160a0828501526102b960c0850182610250565b90508185015160018060a01b03808216604087015280604088015116606087015260608701519150601f198684030160808701526060830182516060855281815180845260808701915060808160051b8801019350878301925060005b8181101561034457607f19888603018352610332858551610250565b94509288019291880191600101610316565b5050505081858401511685850152604083015194506103686040850186601d0b9052565b608088015167ffffffffffffffff19811660a08901529450979650505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d4df09f9a80c3a9206ff09f9a806f6f6f4dc3a96f4d4d20c3a9204d6f204d6f4d4d206ff09f9a80f09f9a806ff09f9a80c3a9f09f9a804d6f4df09f9a806f6f6f6f6fc3a920c3a94d206f4d6f6f20c3a9f09f9a80f09f9a806fc3a92020f09f9a80c3a96f6f6f6fc3a920f09f9a8020f09f9a80204d6f6f206f4d4df09f9a804df09f9a806fc3a94d4df09f9a8020206f4d20f09f9a804d20f09f9a80f09f9a806f6f6f6f6f6f6ff09f9a80a2646970667358221220451e151ef93522022bb51358ef00d99ff8abc23ba56812ad87a0b64d6ec4cc2164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5ac933ff {\n string[] s_0;\n address s_1;\n int240 s_2;\n }\n\n struct S_e4c302d1 {\n string s_0;\n address s_1;\n address s_2;\n S_5ac933ff s_3;\n bytes24 s_4;\n }\n\n function test () public pure returns (S_e4c302d1 memory) {\n S_e4c302d1 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀MM🚀é o🚀oooMéoMM é Mo MoMM o🚀🚀o🚀é🚀MoM🚀oooooé éM o\";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x6225af9Df605b4D3A3273D0C075C5dC2254b1D69;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xFabCfFb9Cb191CB7253e55c547f8627A7925083E;\n r.s_2 = r_2;\n }\n {\n S_5ac933ff memory r_3;\n {\n string[] memory r_3_0 = new string[](2);\n {\n string memory r_3_0_0 = unicode\"Moo é🚀🚀oé 🚀éooooé 🚀 🚀 Moo oMM🚀M🚀oéMM🚀 oM 🚀M 🚀🚀ooooooo🚀\";\n r_3_0[0] = r_3_0_0;\n }\n {\n string memory r_3_0_1 = unicode\"Moo é🚀Mééooo Mééo \";\n r_3_0[1] = r_3_0_1;\n }\n r_3.s_0 = r_3_0;\n }\n {\n address r_3_1 = 0x3d07A89179EF2774f76E64135079903457B7a799;\n r_3.s_1 = r_3_1;\n }\n {\n int240 r_3_2 = 464996287794987070514589851137391336834764148366790480853506462626212904;\n r_3.s_2 = r_3_2;\n }\n r.s_3 = r_3;\n }\n {\n bytes24 r_4 = bytes24(0x43771aeee34beaff5727081888ad2e7367f88c14eec961fc);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000006225af9df605b4d3a3273d0c075c5dc2254b1d69000000000000000000000000fabcffb9cb191cb7253e55c547f8627a7925083e000000000000000000000000000000000000000000000000000000000000012043771aeee34beaff5727081888ad2e7367f88c14eec961fc000000000000000000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a804d4df09f9a80c3a9206ff09f9a806f6f6f4dc3a96f4d4d20c3a9204d6f204d6f4d4d206ff09f9a80f09f9a806ff09f9a80c3a9f09f9a804d6f4df09f9a806f6f6f6f6fc3a920c3a94d206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000003d07a89179ef2774f76e64135079903457b7a7990000435fabc095b12caf67e311027aa01ac411f8c004f4ea493a982f3995ec280000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a80f09f9a806fc3a92020f09f9a80c3a96f6f6f6fc3a920f09f9a8020f09f9a80204d6f6f206f4d4df09f9a804df09f9a806fc3a94d4df09f9a8020206f4d20f09f9a804d20f09f9a80f09f9a806f6f6f6f6f6f6ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a804dc3a9c3a96f6f6f204dc3a9c3a96f20200000000000" + }, + { + "name": "random-(string,address,bool[][2][],bytes15,address)", + "type": "(string,address,bool[][2][],bytes15,address)", + "value": [ + "Moo é🚀🚀🚀🚀o🚀éoM", + "0xA17BD900692d0467B0A11AF7caD0f1A69B0b4a6A", + [ + [ + [false, false], + [false, true, false, true] + ], + [[false, false, false, true], [true]], + [[false, false, true], [true]], + [[true], []] + ], + "0x6f45fa0694913a4c23f39e3bfba1a8", + "0xA59E0dFa5d01679bb8d1511c0E0FBF6dDFDA671e" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀🚀o🚀éoM" + }, + { + "type": "address", + "value": "0xA17BD900692d0467B0A11AF7caD0f1A69B0b4a6A" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [] + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x6f45fa0694913a4c23f39e3bfba1a8" + }, + { + "type": "address", + "value": "0xA59E0dFa5d01679bb8d1511c0E0FBF6dDFDA671e" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506107ae806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610690565b60405180910390f35b6040805160a0808201835260608083526000602080850182905284860183905282850182905260808086018390528651808601885284815280830184815281890186905294810184905290810183905286518088018852601f81527f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a806ff09f9a80c3a96f4d0081840152815273a17bd900692d0467b0a11af7cad0f1a69b0b4a6a909352855160048082529481019096529394919390929082015b6101076105bf565b8152602001906001900390816100ff5790505090506101246105bf565b6040805160028082526060820183526000926020830190803683370190505090506000808260008151811061015b5761015b610762565b602002602001019015159081151581525050506000808260018151811061018457610184610762565b9115156020928302919091019091015250815260408051600480825260a08201909252600091816020016020820280368337019050509050600080826000815181106101d2576101d2610762565b6020026020010190151590811515815250505060006001905080826001815181106101ff576101ff610762565b602002602001019015159081151581525050506000808260028151811061022857610228610762565b60200260200101901515908115158152505050600060019050808260038151811061025557610255610762565b9115156020928302919091018201528301919091525081518190839060009061028057610280610762565b6020026020010181905250506102946105bf565b60408051600480825260a0820190925260009160208201608080368337019050509050600080826000815181106102cd576102cd610762565b60200260200101901515908115158152505050600080826001815181106102f6576102f6610762565b602002602001019015159081151581525050506000808260028151811061031f5761031f610762565b60200260200101901515908115158152505050600060019050808260038151811061034c5761034c610762565b91151560209283029190910190910152508152604080516001808252818301909252600091816020016020820280368337019050509050600060019050808260008151811061039d5761039d610762565b9115156020928302919091018201528301919091525081518190839060019081106103ca576103ca610762565b6020026020010181905250506103de6105bf565b60408051600380825260808201909252600091602082016060803683370190505090506000808260008151811061041757610417610762565b602002602001019015159081151581525050506000808260018151811061044057610440610762565b60200260200101901515908115158152505050600060019050808260028151811061046d5761046d610762565b9115156020928302919091019091015250815260408051600180825281830190925260009181602001602082028036833701905050905060006001905080826000815181106104be576104be610762565b9115156020928302919091018201528301919091525081518190839060029081106104eb576104eb610762565b6020026020010181905250506104ff6105bf565b60408051600180825281830190925260009160208083019080368337019050509050600060019050808260008151811061053b5761053b610762565b91151560209283029190910182015291835250604080516000815280830190915290820152815181908390600390811061057757610577610762565b60209081029190910101525060408201526e0de8bf40d2922749847e73c77f7435608b1b606082015273a59e0dfa5d01679bb8d1511c0e0fbf6ddfda671e6080820152919050565b60405180604001604052806002905b60608152602001906001900390816105ce5790505090565b600081518084526020808501808196508360051b8101915082860160005b858110156106835782840389528151846040810160005b600281101561066e57878203835283518051808452908a01908a84019060005b8181101561065957835115158352928c0192918c019160010161063b565b5050948a0194938a019392505060010161061b565b509a87019a9550505090840190600101610604565b5091979650505050505050565b60006020808352835160a08285015280518060c086015260005b818110156106c65782810184015186820160e0015283016106aa565b818111156106d857600060e083880101525b509185015191601f01601f1916840190506106fe60408501836001600160a01b03169052565b6040850151915060c084820301606085015261071d60e08201836105e6565b9150506060840151610745608085018270ffffffffffffffffffffffffffffffffff19169052565b5060808401516001600160a01b03811660a0850152509392505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220035a8044a8646a2960ef5a4b6026c2af496b924b4d47c83e5a751c9416d39e2964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d07ed103 {\n string s_0;\n address s_1;\n bool[][2][] s_2;\n bytes15 s_3;\n address s_4;\n }\n\n function test () public pure returns (S_d07ed103 memory) {\n S_d07ed103 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀🚀🚀🚀o🚀éoM\";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xA17BD900692d0467B0A11AF7caD0f1A69B0b4a6A;\n r.s_1 = r_1;\n }\n {\n bool[][2][] memory r_2 = new bool[][2][](4);\n {\n bool[][2] memory r_2_0;\n {\n bool[] memory r_2_0_0 = new bool[](2);\n {\n bool r_2_0_0_0 = false;\n r_2_0_0[0] = r_2_0_0_0;\n }\n {\n bool r_2_0_0_1 = false;\n r_2_0_0[1] = r_2_0_0_1;\n }\n r_2_0[0] = r_2_0_0;\n }\n {\n bool[] memory r_2_0_1 = new bool[](4);\n {\n bool r_2_0_1_0 = false;\n r_2_0_1[0] = r_2_0_1_0;\n }\n {\n bool r_2_0_1_1 = true;\n r_2_0_1[1] = r_2_0_1_1;\n }\n {\n bool r_2_0_1_2 = false;\n r_2_0_1[2] = r_2_0_1_2;\n }\n {\n bool r_2_0_1_3 = true;\n r_2_0_1[3] = r_2_0_1_3;\n }\n r_2_0[1] = r_2_0_1;\n }\n r_2[0] = r_2_0;\n }\n {\n bool[][2] memory r_2_1;\n {\n bool[] memory r_2_1_0 = new bool[](4);\n {\n bool r_2_1_0_0 = false;\n r_2_1_0[0] = r_2_1_0_0;\n }\n {\n bool r_2_1_0_1 = false;\n r_2_1_0[1] = r_2_1_0_1;\n }\n {\n bool r_2_1_0_2 = false;\n r_2_1_0[2] = r_2_1_0_2;\n }\n {\n bool r_2_1_0_3 = true;\n r_2_1_0[3] = r_2_1_0_3;\n }\n r_2_1[0] = r_2_1_0;\n }\n {\n bool[] memory r_2_1_1 = new bool[](1);\n {\n bool r_2_1_1_0 = true;\n r_2_1_1[0] = r_2_1_1_0;\n }\n r_2_1[1] = r_2_1_1;\n }\n r_2[1] = r_2_1;\n }\n {\n bool[][2] memory r_2_2;\n {\n bool[] memory r_2_2_0 = new bool[](3);\n {\n bool r_2_2_0_0 = false;\n r_2_2_0[0] = r_2_2_0_0;\n }\n {\n bool r_2_2_0_1 = false;\n r_2_2_0[1] = r_2_2_0_1;\n }\n {\n bool r_2_2_0_2 = true;\n r_2_2_0[2] = r_2_2_0_2;\n }\n r_2_2[0] = r_2_2_0;\n }\n {\n bool[] memory r_2_2_1 = new bool[](1);\n {\n bool r_2_2_1_0 = true;\n r_2_2_1[0] = r_2_2_1_0;\n }\n r_2_2[1] = r_2_2_1;\n }\n r_2[2] = r_2_2;\n }\n {\n bool[][2] memory r_2_3;\n {\n bool[] memory r_2_3_0 = new bool[](1);\n {\n bool r_2_3_0_0 = true;\n r_2_3_0[0] = r_2_3_0_0;\n }\n r_2_3[0] = r_2_3_0;\n }\n {\n bool[] memory r_2_3_1 = new bool[](0);\n r_2_3[1] = r_2_3_1;\n }\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n bytes15 r_3 = bytes15(0x6f45fa0694913a4c23f39e3bfba1a8);\n r.s_3 = r_3;\n }\n {\n address r_4 = 0xA59E0dFa5d01679bb8d1511c0E0FBF6dDFDA671e;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a17bd900692d0467b0a11af7cad0f1a69b0b4a6a00000000000000000000000000000000000000000000000000000000000000e06f45fa0694913a4c23f39e3bfba1a80000000000000000000000000000000000000000000000000000000000a59e0dfa5d01679bb8d1511c0e0fbf6ddfda671e000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a806ff09f9a80c3a96f4d000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(uint240,uint120,address[3],(bytes14,int72[3]),bytes21)", + "type": "(uint240,uint120,address[3],(bytes14,int72[3]),bytes21)", + "value": [ + "1355980741517577913160860340569676467320416167718293726967956658967097287", + "1327204401565703450677530794506335106", + [ + "0x0407C90864A2699Ae60A3925F70551Bf8dd750DB", + "0x6077d56e8e38A12477B4F3ba2f389E67797df3CA", + "0x8Dafb85DC0f2ecafd5E3BF7354a370Ec0185C00A" + ], + [ + "0xbd38b670ee4550b3c92abe96a74b", + ["-259218121275710665361", "1915863743377424143431", "1793280211035028619732"] + ], + "0x76ffdb455d968e835bfe6bcc9d019b3d0874d90942" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "1355980741517577913160860340569676467320416167718293726967956658967097287" + }, + { + "type": "number", + "value": "1327204401565703450677530794506335106" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x0407C90864A2699Ae60A3925F70551Bf8dd750DB" + }, + { + "type": "address", + "value": "0x6077d56e8e38A12477B4F3ba2f389E67797df3CA" + }, + { + "type": "address", + "value": "0x8Dafb85DC0f2ecafd5E3BF7354a370Ec0185C00A" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xbd38b670ee4550b3c92abe96a74b" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-259218121275710665361" + }, + { + "type": "number", + "value": "1915863743377424143431" + }, + { + "type": "number", + "value": "1793280211035028619732" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x76ffdb455d968e835bfe6bcc9d019b3d0874d90942" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102fc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061022f565b60405180910390f35b61005661016c565b61005e61016c565b7dc4781efe36efcc264621019707128c5cbf78bbf6acfefab38ff5586d2fc781526eff9c3aa66e316f2fb414324f183382602082015261009c6101a5565b730407c90864a2699ae60a3925f70551bf8dd750db8152736077d56e8e38a12477b4f3ba2f389e67797df3ca6020820152738dafb85dc0f2ecafd5e3bf7354a370ec0185c00a6040808301919091528201526100f66101c3565b6dbd38b670ee4550b3c92abe96a74b60901b81526101126101a5565b680e0d5fc3e75edc72901981526867dbf353ebad825447602080830191909152686136c322bb086a81d460408301528201526060820152743b7feda2aecb4741adff35e64e80cd9e843a6c84a160591b6080820152919050565b6040805160a0810182526000808252602082015290810161018b6101a5565b81526020016101986101c3565b8152600060209091015290565b60405180606001604052806003906020820280368337509192915050565b6040805180820190915260008152602081016101dd6101a5565b905290565b805171ffffffffffffffffffffffffffffffffffff1916825260208082015181840160005b600381101561022757825160080b82529183019190830190600101610207565b505050505050565b81516001600160f01b031681526020808301516effffffffffffffffffffffffffffff168183015260408084015161014084019291840160005b600381101561028f5782516001600160a01b031682529183019190830190600101610269565b5050505060608301516102a560a08401826101e2565b50608092909201516affffffffffffffffffffff191661012091909101529056fea264697066735822122084d9a383612887a29a162009791dae408e80be6508b93f5d8cbfab0c17b1a15964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_abf4b11b {\n bytes14 s_0;\n int72[3] s_1;\n }\n\n struct S_e9ff81ba {\n uint240 s_0;\n uint120 s_1;\n address[3] s_2;\n S_abf4b11b s_3;\n bytes21 s_4;\n }\n\n function test () public pure returns (S_e9ff81ba memory) {\n S_e9ff81ba memory r;\n {\n uint240 r_0 = 1355980741517577913160860340569676467320416167718293726967956658967097287;\n r.s_0 = r_0;\n }\n {\n uint120 r_1 = 1327204401565703450677530794506335106;\n r.s_1 = r_1;\n }\n {\n address[3] memory r_2;\n {\n address r_2_0 = 0x0407C90864A2699Ae60A3925F70551Bf8dd750DB;\n r_2[0] = r_2_0;\n }\n {\n address r_2_1 = 0x6077d56e8e38A12477B4F3ba2f389E67797df3CA;\n r_2[1] = r_2_1;\n }\n {\n address r_2_2 = 0x8Dafb85DC0f2ecafd5E3BF7354a370Ec0185C00A;\n r_2[2] = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n S_abf4b11b memory r_3;\n {\n bytes14 r_3_0 = bytes14(0xbd38b670ee4550b3c92abe96a74b);\n r_3.s_0 = r_3_0;\n }\n {\n int72[3] memory r_3_1;\n {\n int72 r_3_1_0 = -259218121275710665361;\n r_3_1[0] = r_3_1_0;\n }\n {\n int72 r_3_1_1 = 1915863743377424143431;\n r_3_1[1] = r_3_1_1;\n }\n {\n int72 r_3_1_2 = 1793280211035028619732;\n r_3_1[2] = r_3_1_2;\n }\n r_3.s_1 = r_3_1;\n }\n r.s_3 = r_3;\n }\n {\n bytes21 r_4 = bytes21(0x76ffdb455d968e835bfe6bcc9d019b3d0874d90942);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000c4781efe36efcc264621019707128c5cbf78bbf6acfefab38ff5586d2fc70000000000000000000000000000000000ff9c3aa66e316f2fb414324f1833820000000000000000000000000407c90864a2699ae60a3925f70551bf8dd750db0000000000000000000000006077d56e8e38a12477b4f3ba2f389e67797df3ca0000000000000000000000008dafb85dc0f2ecafd5e3bf7354a370ec0185c00abd38b670ee4550b3c92abe96a74b000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffff1f2a03c18a1238d6f000000000000000000000000000000000000000000000067dbf353ebad82544700000000000000000000000000000000000000000000006136c322bb086a81d476ffdb455d968e835bfe6bcc9d019b3d0874d909420000000000000000000000" + }, + { + "name": "random-(uint72,(int248,bytes9[2]),int176,uint184,bytes1)[2]", + "type": "(uint72,(int248,bytes9[2]),int176,uint184,bytes1)[2]", + "value": [ + [ + "2816335769437180712383", + [ + "52094913547565067777325627634400376523592317841688775895957437119649116619", + ["0x5e41141a184dfb961b", "0xec806782fbad12806e"] + ], + "11955372035418426354226866904903826664524600328100482", + "22528477265115730073868643292085680617795237242350052656", + "0x3f" + ], + [ + "4193187163687710794086", + [ + "112572797729910889076200937451147553572631734845060601698868476772844671422", + ["0x0a40c3318edb618649", "0xbf1550820e3a712b8f"] + ], + "-47067547447713796655653659145651355894319770533425747", + "6503994272034294090049957618003510939015959322475909839", + "0xed" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2816335769437180712383" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "52094913547565067777325627634400376523592317841688775895957437119649116619" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x5e41141a184dfb961b" + }, + { + "type": "hexstring", + "value": "0xec806782fbad12806e" + } + ] + } + ] + }, + { + "type": "number", + "value": "11955372035418426354226866904903826664524600328100482" + }, + { + "type": "number", + "value": "22528477265115730073868643292085680617795237242350052656" + }, + { + "type": "hexstring", + "value": "0x3f" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "4193187163687710794086" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "112572797729910889076200937451147553572631734845060601698868476772844671422" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x0a40c3318edb618649" + }, + { + "type": "hexstring", + "value": "0xbf1550820e3a712b8f" + } + ] + } + ] + }, + { + "type": "number", + "value": "-47067547447713796655653659145651355894319770533425747" + }, + { + "type": "number", + "value": "6503994272034294090049957618003510939015959322475909839" + }, + { + "type": "hexstring", + "value": "0xed" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610387806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061028a565b60405180910390f35b6100566101dd565b61005e6101dd565b61006661020a565b6898ac829cb77996d5bf815261007a61024a565b7e1d7c13bccce74750776b395690a3ed12a2835e6a6fa5bf33a2fab0187171cb81526100a461026c565b685e41141a184dfb961b60b81b815268764033c17dd689403760b91b60208083019190915282810191909152820152751ff4328f2840c8695ebf9ae540c867b54da2a2189a82604082015276eb3551aa65dcff91096cb755a2f1b46f7cceda9c73a5306060820152603f60f81b6080820152815261012061020a565b68e3502964ea8dbea166815261013461024a565b7e3fb6c5232c90c05a57576aefa9ee4caa81876063a846da22e778a9155d91be815261015e61026c565b680a40c3318edb61864960b81b815268bf1550820e3a712b8f60b81b6020808301919091528281019190915282810191909152757dccec3ea812dc98d26578eead779026fd22b7ccf2521960408301527643e7a5782c214860912f1a695e6a57318c5e20049452cf606083015260ed60f81b6080830152820152919050565b60405180604001604052806002905b6101f461020a565b8152602001906001900390816101ec5790505090565b6040518060a00160405280600068ffffffffffffffffff16815260200161022f61024a565b81526000602082018190526040820181905260609091015290565b60405180604001604052806000601e0b815260200161026761026c565b905290565b60405180604001604052806002906020820280368337509192915050565b6101c0810181836000805b60028082106102a45750610347565b8351805168ffffffffffffffffff1686526020808201518051601e0b828901528101516040808901875b868110156102f45783516001600160b81b031916825292840192908401906001016102ce565b505083015193506080905061030d8882018560150b9052565b60608301516001600160b81b031660a0890152909101516001600160f81b03191660c087015260e090950194939093019250600101610295565b505050509291505056fea26469706673582212200368b5edab192dce7b5b60089a66f0d0223565c180d59963aa42d4f6f450a23164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fc5cfa8f {\n int248 s_0;\n bytes9[2] s_1;\n }\n\n struct S_476e651b {\n uint72 s_0;\n S_fc5cfa8f s_1;\n int176 s_2;\n uint184 s_3;\n bytes1 s_4;\n }\n\n function test () public pure returns (S_476e651b[2] memory) {\n S_476e651b[2] memory r;\n {\n S_476e651b memory r_0;\n {\n uint72 r_0_0 = 2816335769437180712383;\n r_0.s_0 = r_0_0;\n }\n {\n S_fc5cfa8f memory r_0_1;\n {\n int248 r_0_1_0 = 52094913547565067777325627634400376523592317841688775895957437119649116619;\n r_0_1.s_0 = r_0_1_0;\n }\n {\n bytes9[2] memory r_0_1_1;\n {\n bytes9 r_0_1_1_0 = bytes9(0x5e41141a184dfb961b);\n r_0_1_1[0] = r_0_1_1_0;\n }\n {\n bytes9 r_0_1_1_1 = bytes9(0xec806782fbad12806e);\n r_0_1_1[1] = r_0_1_1_1;\n }\n r_0_1.s_1 = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n {\n int176 r_0_2 = 11955372035418426354226866904903826664524600328100482;\n r_0.s_2 = r_0_2;\n }\n {\n uint184 r_0_3 = 22528477265115730073868643292085680617795237242350052656;\n r_0.s_3 = r_0_3;\n }\n {\n bytes1 r_0_4 = bytes1(0x3f);\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_476e651b memory r_1;\n {\n uint72 r_1_0 = 4193187163687710794086;\n r_1.s_0 = r_1_0;\n }\n {\n S_fc5cfa8f memory r_1_1;\n {\n int248 r_1_1_0 = 112572797729910889076200937451147553572631734845060601698868476772844671422;\n r_1_1.s_0 = r_1_1_0;\n }\n {\n bytes9[2] memory r_1_1_1;\n {\n bytes9 r_1_1_1_0 = bytes9(0x0a40c3318edb618649);\n r_1_1_1[0] = r_1_1_1_0;\n }\n {\n bytes9 r_1_1_1_1 = bytes9(0xbf1550820e3a712b8f);\n r_1_1_1[1] = r_1_1_1_1;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n r_1.s_1 = r_1_1;\n }\n {\n int176 r_1_2 = -47067547447713796655653659145651355894319770533425747;\n r_1.s_2 = r_1_2;\n }\n {\n uint184 r_1_3 = 6503994272034294090049957618003510939015959322475909839;\n r_1.s_3 = r_1_3;\n }\n {\n bytes1 r_1_4 = bytes1(0xed);\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000098ac829cb77996d5bf001d7c13bccce74750776b395690a3ed12a2835e6a6fa5bf33a2fab0187171cb5e41141a184dfb961b0000000000000000000000000000000000000000000000ec806782fbad12806e0000000000000000000000000000000000000000000000000000000000000000001ff4328f2840c8695ebf9ae540c867b54da2a2189a82000000000000000000eb3551aa65dcff91096cb755a2f1b46f7cceda9c73a5303f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3502964ea8dbea166003fb6c5232c90c05a57576aefa9ee4caa81876063a846da22e778a9155d91be0a40c3318edb6186490000000000000000000000000000000000000000000000bf1550820e3a712b8f0000000000000000000000000000000000000000000000ffffffffffffffffffff823313c157ed23672d9a871152886fd902dd48330dad00000000000000000043e7a5782c214860912f1a695e6a57318c5e20049452cfed00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((address,bool,bytes9,bytes16[3],bytes22[]),(address))[3]", + "type": "((address,bool,bytes9,bytes16[3],bytes22[]),(address))[3]", + "value": [ + [ + [ + "0x7BC37ff0D2123a7Ecc8eb0027B2Ce1128d33BB94", + false, + "0xc27d09d26a0ef64751", + [ + "0xf57c4078b23b2877082c6bae8c472ff5", + "0xce1d910182d88d60b88378792137a920", + "0x49f184dc4d7c7b0abd01a17f2d46f65d" + ], + [ + "0xb0ce90808d72886642bafd4332058a69085410a9944e", + "0xcfa5c590ad55984218096a974e315ad208ea52e14a0e" + ] + ], + ["0xa2DE2476137808b7191608eC4eB89324F4d5274d"] + ], + [ + [ + "0x91C3C8AC61820558b022A8D649db08DCF6e59C79", + true, + "0xaf71c49c9f1e30eb89", + [ + "0x04cf71be406565d2d8516090f185a82d", + "0x9775dbc7f9212dfb7eef490b58024bc1", + "0x22537899b960344bf736720776822cc8" + ], + [ + "0xeac5d381eb658ade3441fc91f474658ecdca81b0da00", + "0x191571ca71753578150d91fecee9a8f06ea4edd5a761", + "0x94e2fb200be982c087588ca1a8da7a8a2f024cdaa428" + ] + ], + ["0x6239acFa786F15DDec501D273aB6cf2358DB16C5"] + ], + [ + [ + "0x0207846b1da979F46aaeF3cF4fA0e3c5db04FE13", + true, + "0xa5c36855624a4932cf", + [ + "0x731e1e2ceee6fd8b1056daf47d9f8f4c", + "0xb0438cbf54701460d78d9e8a070dd80a", + "0x31da97809e4251fa20ed97ed64dad2fe" + ], + [ + "0xba0d6f6229e4e5a01c5948348726724df1032b9e1ada", + "0x1b26a3bf01fd9381954ce976903f06f125f5d01adb0f", + "0x77634ca7fcf2281938f24d3ff850efd825582fb4b8cf" + ] + ], + ["0x323597F04386BeF8171F67BF8d35bAa5d6e763A7"] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x7BC37ff0D2123a7Ecc8eb0027B2Ce1128d33BB94" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xc27d09d26a0ef64751" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xf57c4078b23b2877082c6bae8c472ff5" + }, + { + "type": "hexstring", + "value": "0xce1d910182d88d60b88378792137a920" + }, + { + "type": "hexstring", + "value": "0x49f184dc4d7c7b0abd01a17f2d46f65d" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xb0ce90808d72886642bafd4332058a69085410a9944e" + }, + { + "type": "hexstring", + "value": "0xcfa5c590ad55984218096a974e315ad208ea52e14a0e" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xa2DE2476137808b7191608eC4eB89324F4d5274d" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x91C3C8AC61820558b022A8D649db08DCF6e59C79" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xaf71c49c9f1e30eb89" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x04cf71be406565d2d8516090f185a82d" + }, + { + "type": "hexstring", + "value": "0x9775dbc7f9212dfb7eef490b58024bc1" + }, + { + "type": "hexstring", + "value": "0x22537899b960344bf736720776822cc8" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xeac5d381eb658ade3441fc91f474658ecdca81b0da00" + }, + { + "type": "hexstring", + "value": "0x191571ca71753578150d91fecee9a8f06ea4edd5a761" + }, + { + "type": "hexstring", + "value": "0x94e2fb200be982c087588ca1a8da7a8a2f024cdaa428" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6239acFa786F15DDec501D273aB6cf2358DB16C5" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x0207846b1da979F46aaeF3cF4fA0e3c5db04FE13" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xa5c36855624a4932cf" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x731e1e2ceee6fd8b1056daf47d9f8f4c" + }, + { + "type": "hexstring", + "value": "0xb0438cbf54701460d78d9e8a070dd80a" + }, + { + "type": "hexstring", + "value": "0x31da97809e4251fa20ed97ed64dad2fe" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xba0d6f6229e4e5a01c5948348726724df1032b9e1ada" + }, + { + "type": "hexstring", + "value": "0x1b26a3bf01fd9381954ce976903f06f125f5d01adb0f" + }, + { + "type": "hexstring", + "value": "0x77634ca7fcf2281938f24d3ff850efd825582fb4b8cf" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x323597F04386BeF8171F67BF8d35bAa5d6e763A7" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506107c1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610684565b60405180910390f35b610056610593565b61005e610593565b6100666105c0565b61006e6105eb565b737bc37ff0d2123a7ecc8eb0027b2ce1128d33bb9481526000602082015268c27d09d26a0ef6475160b81b60408201526100a6610621565b6ff57c4078b23b2877082c6bae8c472ff560801b81526f0670ec880c16c46b05c41bc3c909bd4960851b60208201526f49f184dc4d7c7b0abd01a17f2d46f65d60801b6040808301919091526060838101929092528051600280825292810190915260009181602001602082028036833750508151919250755867484046b94433215d7ea19902c534842a0854ca2760511b91829150839060009061014d5761014d610775565b6001600160501b0319909216602092830291909101909101525080517567d2e2c856aacc210c04b54ba718ad6904752970a50760511b9081908390600190811061019957610199610775565b6001600160501b0319929092166020928302919091018201526080840192909252509082526040805180830190915273a2de2476137808b7191608ec4eb89324f4d5274d81529082015281526101ed6105c0565b6101f56105eb565b7391c3c8ac61820558b022a8d649db08dcf6e59c7981526001602082015268af71c49c9f1e30eb8960b81b604082015261022d610621565b6f04cf71be406565d2d8516090f185a82d60801b81526f9775dbc7f9212dfb7eef490b58024bc160801b60208201526f044a6f13372c06897ee6ce40eed0459960831b6040808301919091526060830191909152805160038082526080820190925260009181602001602082028036833750508151919250747562e9c0f5b2c56f1a20fe48fa3a32c766e540d86d60591b9182915083906000906102d3576102d3610775565b6001600160501b03199092166020928302919091019091015250805175191571ca71753578150d91fecee9a8f06ea4edd5a76160501b9081908390600190811061031f5761031f610775565b6001600160501b03199092166020928302919091019091015250805175129c5f64017d305810eb1194351b4f5145e0499b548560531b9081908390600290811061036b5761036b610775565b6001600160501b03199290921660209283029190910182015260808401929092525090825260408051808301909152736239acfa786f15ddec501d273ab6cf2358db16c58152828201528201526103c06105c0565b6103c86105eb565b730207846b1da979f46aaef3cf4fa0e3c5db04fe1381526001602082015268a5c36855624a4932cf60b81b6040820152610400610621565b6f1cc7878b3bb9bf62c415b6bd1f67e3d360821b81526f5821c65faa380a306bc6cf450386ec0560811b60208201526f18ed4bc04f2128fd1076cbf6b26d697f60811b6040808301919091526060830191909152805160038082526080820190925260009181602001602082028036833750508151919250755d06b7b114f272d00e2ca41a43933926f88195cf0d6d60511b9182915083906000906104a7576104a7610775565b6001600160501b031990921660209283029190910190910152508051751b26a3bf01fd9381954ce976903f06f125f5d01adb0f60501b908190839060019081106104f3576104f3610775565b6001600160501b0319909216602092830291909101909101525080517577634ca7fcf2281938f24d3ff850efd825582fb4b8cf60501b9081908390600290811061053f5761053f610775565b6001600160501b03199290921660209283029190910182015260808401929092525090825260408051808301825273323597f04386bef8171f67bf8d35baa5d6e763a7815291830191909152820152919050565b60405180606001604052806003905b6105aa6105c0565b8152602001906001900390816105a25790505090565b60405180604001604052806105d36105eb565b81526040805160208181019092526000815291015290565b6040805160a0810182526000808252602082018190529181019190915260608101610614610621565b8152602001606081525090565b60405180606001604052806003906020820280368337509192915050565b600081518084526020808501945080840160005b838110156106795781516001600160501b03191687529582019590820190600101610653565b509495945050505050565b602080825260009060808382018185018685805b60038082106106a75750610767565b898503601f1901865283518051604080885281516001600160a01b0316818901528a82015115156060808a0191909152908201516001600160b81b0319168a8901528101519060a08801865b858110156107225783516fffffffffffffffffffffffffffffffff19168252928c0192908c01906001016106f3565b505089015160e06101008901529250610741905061012087018361063f565b90890151516001600160a01b031695890195909552509386019391860191600101610698565b509198975050505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220feb3f8da92482851c32ddafa8bff778dd63bc9d0541e1210a0c26311d2874c4a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_772f1b9b {\n address s_0;\n bool s_1;\n bytes9 s_2;\n bytes16[3] s_3;\n bytes22[] s_4;\n }\n\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_dfd27276 {\n S_772f1b9b s_0;\n S_421683f8 s_1;\n }\n\n function test () public pure returns (S_dfd27276[3] memory) {\n S_dfd27276[3] memory r;\n {\n S_dfd27276 memory r_0;\n {\n S_772f1b9b memory r_0_0;\n {\n address r_0_0_0 = 0x7BC37ff0D2123a7Ecc8eb0027B2Ce1128d33BB94;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n bool r_0_0_1 = false;\n r_0_0.s_1 = r_0_0_1;\n }\n {\n bytes9 r_0_0_2 = bytes9(0xc27d09d26a0ef64751);\n r_0_0.s_2 = r_0_0_2;\n }\n {\n bytes16[3] memory r_0_0_3;\n {\n bytes16 r_0_0_3_0 = bytes16(0xf57c4078b23b2877082c6bae8c472ff5);\n r_0_0_3[0] = r_0_0_3_0;\n }\n {\n bytes16 r_0_0_3_1 = bytes16(0xce1d910182d88d60b88378792137a920);\n r_0_0_3[1] = r_0_0_3_1;\n }\n {\n bytes16 r_0_0_3_2 = bytes16(0x49f184dc4d7c7b0abd01a17f2d46f65d);\n r_0_0_3[2] = r_0_0_3_2;\n }\n r_0_0.s_3 = r_0_0_3;\n }\n {\n bytes22[] memory r_0_0_4 = new bytes22[](2);\n {\n bytes22 r_0_0_4_0 = bytes22(0xb0ce90808d72886642bafd4332058a69085410a9944e);\n r_0_0_4[0] = r_0_0_4_0;\n }\n {\n bytes22 r_0_0_4_1 = bytes22(0xcfa5c590ad55984218096a974e315ad208ea52e14a0e);\n r_0_0_4[1] = r_0_0_4_1;\n }\n r_0_0.s_4 = r_0_0_4;\n }\n r_0.s_0 = r_0_0;\n }\n {\n S_421683f8 memory r_0_1;\n {\n address r_0_1_0 = 0xa2DE2476137808b7191608eC4eB89324F4d5274d;\n r_0_1.s_0 = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_dfd27276 memory r_1;\n {\n S_772f1b9b memory r_1_0;\n {\n address r_1_0_0 = 0x91C3C8AC61820558b022A8D649db08DCF6e59C79;\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bool r_1_0_1 = true;\n r_1_0.s_1 = r_1_0_1;\n }\n {\n bytes9 r_1_0_2 = bytes9(0xaf71c49c9f1e30eb89);\n r_1_0.s_2 = r_1_0_2;\n }\n {\n bytes16[3] memory r_1_0_3;\n {\n bytes16 r_1_0_3_0 = bytes16(0x04cf71be406565d2d8516090f185a82d);\n r_1_0_3[0] = r_1_0_3_0;\n }\n {\n bytes16 r_1_0_3_1 = bytes16(0x9775dbc7f9212dfb7eef490b58024bc1);\n r_1_0_3[1] = r_1_0_3_1;\n }\n {\n bytes16 r_1_0_3_2 = bytes16(0x22537899b960344bf736720776822cc8);\n r_1_0_3[2] = r_1_0_3_2;\n }\n r_1_0.s_3 = r_1_0_3;\n }\n {\n bytes22[] memory r_1_0_4 = new bytes22[](3);\n {\n bytes22 r_1_0_4_0 = bytes22(0xeac5d381eb658ade3441fc91f474658ecdca81b0da00);\n r_1_0_4[0] = r_1_0_4_0;\n }\n {\n bytes22 r_1_0_4_1 = bytes22(0x191571ca71753578150d91fecee9a8f06ea4edd5a761);\n r_1_0_4[1] = r_1_0_4_1;\n }\n {\n bytes22 r_1_0_4_2 = bytes22(0x94e2fb200be982c087588ca1a8da7a8a2f024cdaa428);\n r_1_0_4[2] = r_1_0_4_2;\n }\n r_1_0.s_4 = r_1_0_4;\n }\n r_1.s_0 = r_1_0;\n }\n {\n S_421683f8 memory r_1_1;\n {\n address r_1_1_0 = 0x6239acFa786F15DDec501D273aB6cf2358DB16C5;\n r_1_1.s_0 = r_1_1_0;\n }\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n {\n S_dfd27276 memory r_2;\n {\n S_772f1b9b memory r_2_0;\n {\n address r_2_0_0 = 0x0207846b1da979F46aaeF3cF4fA0e3c5db04FE13;\n r_2_0.s_0 = r_2_0_0;\n }\n {\n bool r_2_0_1 = true;\n r_2_0.s_1 = r_2_0_1;\n }\n {\n bytes9 r_2_0_2 = bytes9(0xa5c36855624a4932cf);\n r_2_0.s_2 = r_2_0_2;\n }\n {\n bytes16[3] memory r_2_0_3;\n {\n bytes16 r_2_0_3_0 = bytes16(0x731e1e2ceee6fd8b1056daf47d9f8f4c);\n r_2_0_3[0] = r_2_0_3_0;\n }\n {\n bytes16 r_2_0_3_1 = bytes16(0xb0438cbf54701460d78d9e8a070dd80a);\n r_2_0_3[1] = r_2_0_3_1;\n }\n {\n bytes16 r_2_0_3_2 = bytes16(0x31da97809e4251fa20ed97ed64dad2fe);\n r_2_0_3[2] = r_2_0_3_2;\n }\n r_2_0.s_3 = r_2_0_3;\n }\n {\n bytes22[] memory r_2_0_4 = new bytes22[](3);\n {\n bytes22 r_2_0_4_0 = bytes22(0xba0d6f6229e4e5a01c5948348726724df1032b9e1ada);\n r_2_0_4[0] = r_2_0_4_0;\n }\n {\n bytes22 r_2_0_4_1 = bytes22(0x1b26a3bf01fd9381954ce976903f06f125f5d01adb0f);\n r_2_0_4[1] = r_2_0_4_1;\n }\n {\n bytes22 r_2_0_4_2 = bytes22(0x77634ca7fcf2281938f24d3ff850efd825582fb4b8cf);\n r_2_0_4[2] = r_2_0_4_2;\n }\n r_2_0.s_4 = r_2_0_4;\n }\n r_2.s_0 = r_2_0;\n }\n {\n S_421683f8 memory r_2_1;\n {\n address r_2_1_0 = 0x323597F04386BeF8171F67BF8d35bAa5d6e763A7;\n r_2_1.s_0 = r_2_1_0;\n }\n r_2.s_1 = r_2_1;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a2de2476137808b7191608ec4eb89324f4d5274d0000000000000000000000007bc37ff0d2123a7ecc8eb0027b2ce1128d33bb940000000000000000000000000000000000000000000000000000000000000000c27d09d26a0ef647510000000000000000000000000000000000000000000000f57c4078b23b2877082c6bae8c472ff500000000000000000000000000000000ce1d910182d88d60b88378792137a9200000000000000000000000000000000049f184dc4d7c7b0abd01a17f2d46f65d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000002b0ce90808d72886642bafd4332058a69085410a9944e00000000000000000000cfa5c590ad55984218096a974e315ad208ea52e14a0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000006239acfa786f15ddec501d273ab6cf2358db16c500000000000000000000000091c3c8ac61820558b022a8d649db08dcf6e59c790000000000000000000000000000000000000000000000000000000000000001af71c49c9f1e30eb89000000000000000000000000000000000000000000000004cf71be406565d2d8516090f185a82d000000000000000000000000000000009775dbc7f9212dfb7eef490b58024bc10000000000000000000000000000000022537899b960344bf736720776822cc80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000003eac5d381eb658ade3441fc91f474658ecdca81b0da0000000000000000000000191571ca71753578150d91fecee9a8f06ea4edd5a7610000000000000000000094e2fb200be982c087588ca1a8da7a8a2f024cdaa428000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000323597f04386bef8171f67bf8d35baa5d6e763a70000000000000000000000000207846b1da979f46aaef3cf4fa0e3c5db04fe130000000000000000000000000000000000000000000000000000000000000001a5c36855624a4932cf0000000000000000000000000000000000000000000000731e1e2ceee6fd8b1056daf47d9f8f4c00000000000000000000000000000000b0438cbf54701460d78d9e8a070dd80a0000000000000000000000000000000031da97809e4251fa20ed97ed64dad2fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000003ba0d6f6229e4e5a01c5948348726724df1032b9e1ada000000000000000000001b26a3bf01fd9381954ce976903f06f125f5d01adb0f0000000000000000000077634ca7fcf2281938f24d3ff850efd825582fb4b8cf00000000000000000000" + }, + { + "name": "random-((bytes10,(address),bytes22,bool),(bytes5,int96,string,string[4]))", + "type": "((bytes10,(address),bytes22,bool),(bytes5,int96,string,string[4]))", + "value": [ + [ + "0x3d085b626aeb0604a121", + ["0x5378237c845f71BCD71998D74A8E5C74EB435D27"], + "0x4eed7da01940f0553aef95df2c92080d6c9380e02b8f", + false + ], + [ + "0xd2ec968b40", + "-38323611183370714572395854187", + "Moo é🚀MéoMo o🚀🚀🚀oooM éM oMoMMMoo 🚀oéMMoooo o🚀oMMMM ooéMo 🚀 ééM", + [ + "Moo é🚀", + "Moo é🚀oMMoo🚀é ooéé 🚀ééo", + "Moo é🚀🚀oooM🚀 M🚀🚀Méoooéo 🚀o", + "Moo é🚀oM éééo oéo🚀Moo🚀Mé🚀M MMéoMé🚀Mooé🚀🚀é éMoé" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x3d085b626aeb0604a121" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5378237c845f71BCD71998D74A8E5C74EB435D27" + } + ] + }, + { + "type": "hexstring", + "value": "0x4eed7da01940f0553aef95df2c92080d6c9380e02b8f" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd2ec968b40" + }, + { + "type": "number", + "value": "-38323611183370714572395854187" + }, + { + "type": "string", + "value": "Moo é🚀MéoMo o🚀🚀🚀oooM éM oMoMMMoo 🚀oéMMoooo o🚀oMMMM ooéMo 🚀 ééM" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀oMMoo🚀é ooéé 🚀ééo" + }, + { + "type": "string", + "value": "Moo é🚀🚀oooM🚀 M🚀🚀Méoooéo 🚀o" + }, + { + "type": "string", + "value": "Moo é🚀oM éééo oéo🚀Moo🚀Mé🚀M MMéoMé🚀Mooé🚀🚀é éMoé" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104d3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102b2565b60405180910390f35b6100566101d6565b61005e6101d6565b60408051608081018252600080825282516020808201855282825280840191825283850183815260608501848152693d085b626aeb0604a12160b01b86528651928301909652735378237c845f71bcd71998d74a8e5c74eb435d2782529152754eed7da01940f0553aef95df2c92080d6c9380e02b8f60501b905290915281526100e661021b565b64034bb25a2d60de1b81526b7bd48c552000fd7c1413396a196020808301919091526040805160808101909152605a80825260009261039f9083013960408301525061013061023e565b604080518082018252600a8152689adede418753e13f3560b71b6020808301919091529083528151606081019092526026808352600092916103f99083013990508082600160200201819052505060006040518060600160405280602f815260200161041f602f913960408084019190915280516080810190915260508082526000925061044e6020830139606080840191909152830191909152506020820152919050565b6040805160c08101825260008183018181528351602080820190955282815260608401526080830182905260a0830191909152815290810161021661021b565b905290565b604080516080810182526000808252602082015260609181018290529081016102165b60405180608001604052806004905b606081526020019060019003908161024d5790505090565b6000815180845260005b8181101561028b5760208185018101518683018201520161026f565b8181111561029d576000602083870101525b50601f01601f19169290920160200192915050565b60006020808352835169ffffffffffffffffffff60b01b8151168285015260018060a01b03828201515116604085015269ffffffffffffffffffff196040820151166060850152606081015115156080850152508084015160a08085015264ffffffffff60d81b81511660c085015281810151600b0b60e085015260408101516080610100860152610348610140860182610265565b6060929092015185830360bf1901610120870152919050806080810160005b6004811015610392578382038352610380828651610265565b94860194928601929150600101610367565b5097965050505050505056fe4d6f6f20c3a9f09f9a804dc3a96f4d6f206ff09f9a80f09f9a80f09f9a806f6f6f4d20c3a94d206f4d6f4d4d4d6f6f20f09f9a806fc3a94d4d6f6f6f6f206ff09f9a806f4d4d4d4d206f6fc3a94d6f20f09f9a8020c3a9c3a94d4d6f6f20c3a9f09f9a806f4d4d6f6ff09f9a80c3a9206f6fc3a9c3a920f09f9a80c3a9c3a96f4d6f6f20c3a9f09f9a80f09f9a806f6f6f4df09f9a80204df09f9a80f09f9a804dc3a96f6f6fc3a96f20f09f9a806f4d6f6f20c3a9f09f9a806f4d2020c3a9c3a9c3a96f206fc3a96ff09f9a804d6f6ff09f9a804dc3a9f09f9a804d204d4dc3a96f4dc3a9f09f9a804d6f6fc3a9f09f9a80f09f9a80c3a920c3a94d6fc3a9a26469706673582212205857037291f317121ee49ee58441d76a82df9d49278204ded393807af29c9ce264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_5ab00cf2 {\n bytes10 s_0;\n S_421683f8 s_1;\n bytes22 s_2;\n bool s_3;\n }\n\n struct S_4b130a11 {\n bytes5 s_0;\n int96 s_1;\n string s_2;\n string[4] s_3;\n }\n\n struct S_ec656b34 {\n S_5ab00cf2 s_0;\n S_4b130a11 s_1;\n }\n\n function test () public pure returns (S_ec656b34 memory) {\n S_ec656b34 memory r;\n {\n S_5ab00cf2 memory r_0;\n {\n bytes10 r_0_0 = bytes10(0x3d085b626aeb0604a121);\n r_0.s_0 = r_0_0;\n }\n {\n S_421683f8 memory r_0_1;\n {\n address r_0_1_0 = 0x5378237c845f71BCD71998D74A8E5C74EB435D27;\n r_0_1.s_0 = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n {\n bytes22 r_0_2 = bytes22(0x4eed7da01940f0553aef95df2c92080d6c9380e02b8f);\n r_0.s_2 = r_0_2;\n }\n {\n bool r_0_3 = false;\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n S_4b130a11 memory r_1;\n {\n bytes5 r_1_0 = bytes5(0xd2ec968b40);\n r_1.s_0 = r_1_0;\n }\n {\n int96 r_1_1 = -38323611183370714572395854187;\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀MéoMo o🚀🚀🚀oooM éM oMoMMMoo 🚀oéMMoooo o🚀oMMMM ooéMo 🚀 ééM\";\n r_1.s_2 = r_1_2;\n }\n {\n string[4] memory r_1_3;\n {\n string memory r_1_3_0 = unicode\"Moo é🚀\";\n r_1_3[0] = r_1_3_0;\n }\n {\n string memory r_1_3_1 = unicode\"Moo é🚀oMMoo🚀é ooéé 🚀ééo\";\n r_1_3[1] = r_1_3_1;\n }\n {\n string memory r_1_3_2 = unicode\"Moo é🚀🚀oooM🚀 M🚀🚀Méoooéo 🚀o\";\n r_1_3[2] = r_1_3_2;\n }\n {\n string memory r_1_3_3 = unicode\"Moo é🚀oM éééo oéo🚀Moo🚀Mé🚀M MMéoMé🚀Mooé🚀🚀é éMoé\";\n r_1_3[3] = r_1_3_3;\n }\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000203d085b626aeb0604a121000000000000000000000000000000000000000000000000000000000000000000005378237c845f71bcd71998d74a8e5c74eb435d274eed7da01940f0553aef95df2c92080d6c9380e02b8f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0d2ec968b40000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff842b73aadfff0283ebecc69500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a804dc3a96f4d6f206ff09f9a80f09f9a80f09f9a806f6f6f4d20c3a94d206f4d6f4d4d4d6f6f20f09f9a806fc3a94d4d6f6f6f6f206ff09f9a806f4d4d4d4d206f6fc3a94d6f20f09f9a8020c3a9c3a94d000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a806f4d4d6f6ff09f9a80c3a9206f6fc3a9c3a920f09f9a80c3a9c3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a80f09f9a806f6f6f4df09f9a80204df09f9a80f09f9a804dc3a96f6f6fc3a96f20f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a806f4d2020c3a9c3a9c3a96f206fc3a96ff09f9a804d6f6ff09f9a804dc3a9f09f9a804d204d4dc3a96f4dc3a9f09f9a804d6f6fc3a9f09f9a80f09f9a80c3a920c3a94d6fc3a900000000000000000000000000000000" + }, + { + "name": "random-((bytes20[][],(string),(bytes12,bool,bool,int232),string))", + "type": "((bytes20[][],(string),(bytes12,bool,bool,int232),string))", + "value": [ + [ + [ + [ + "0x2b751b3cffd436f96b6655a92f2b64d4f7fa3827", + "0xd8b406369a9049d7b8360ab68d7f031ce029b5e3", + "0x70c0b2f043d863509314bb5e8baf2d60a2239c8c", + "0x7ffa80ebb975aa2d20201068ba62ee578de660c0" + ], + ["0x2442891fdad5e05da17922e97dff61427e58fe4c"] + ], + ["Moo é🚀M 🚀oo oo"], + [ + "0x35bc7c7302722fbd0d264df5", + false, + true, + "-1230495026499905292590638413903629821495046673257734864151832135122449" + ], + "Moo é🚀M M🚀 oMééM🚀 oMo🚀 🚀MéMM🚀 🚀🚀o🚀éé M🚀ooooo🚀🚀M o🚀 o M oM" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2b751b3cffd436f96b6655a92f2b64d4f7fa3827" + }, + { + "type": "hexstring", + "value": "0xd8b406369a9049d7b8360ab68d7f031ce029b5e3" + }, + { + "type": "hexstring", + "value": "0x70c0b2f043d863509314bb5e8baf2d60a2239c8c" + }, + { + "type": "hexstring", + "value": "0x7ffa80ebb975aa2d20201068ba62ee578de660c0" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2442891fdad5e05da17922e97dff61427e58fe4c" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M 🚀oo oo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x35bc7c7302722fbd0d264df5" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-1230495026499905292590638413903629821495046673257734864151832135122449" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M M🚀 oMééM🚀 oMo🚀 🚀MéMM🚀 🚀🚀o🚀éé M🚀ooooo🚀🚀M o🚀 o M oM" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610611806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610439565b60405180910390f35b61005661035b565b61005e61035b565b610066610373565b60408051600280825260608201909252600091816020015b606081526020019060019003908161007e57505060408051600480825260a08201909252919250600091906020820160808036833750508151919250732b751b3cffd436f96b6655a92f2b64d4f7fa382760601b9182915083906000906100e7576100e761055d565b6001600160601b03199092166020928302919091019091015250805173d8b406369a9049d7b8360ab68d7f031ce029b5e360601b908190839060019081106101315761013161055d565b6001600160601b031990921660209283029190910190910152508051731c302cbc10f618d424c52ed7a2ebcb582888e72360621b9081908390600290811061017b5761017b61055d565b6001600160601b0319909216602092830291909101909101525080517301ffea03aee5d6a8b4808041a2e98bb95e37998360661b908190839060039081106101c5576101c561055d565b60200260200101906001600160601b03191690816001600160601b031916815250505080826000815181106101fc576101fc61055d565b60209081029190910101525060408051600180825281830190925260009181602001602082028036833750508151919250730910a247f6b57817685e48ba5f7fd8509f963f9360621b91829150839060009061025a5761025a61055d565b60200260200101906001600160601b03191690816001600160601b031916815250505080826001815181106102915761029161055d565b6020908102919091018101919091529183525060408051808301825260608082528251808401845260158152744d6f6f20c3a9f09f9a804d20f09f9a806f6f206f6f60581b81860152825284840191909152815160808101835260008185018190526b35bc7c7302722fbd0d264df560a01b82526001828501527fffffffd25bc049136dc83f94a4f1e60b5daf4457628ee814532e5544953d41ef9282019290925282850152815160a0810190925260688083529092610574908301396060830152508152919050565b604051806020016040528061036e610373565b905290565b60405180608001604052806060815260200161039b6040518060200160405280606081525090565b8152604080516080810182526000808252602082810182905292820181905260608201529101908152602001606081525090565b6000815180845260005b818110156103f5576020818501810151868301820152016103d9565b81811115610407576000602083870101525b50601f01601f19169290920160200192915050565b600081516020845261043160208501826103cf565b949350505050565b60006020808352835181828501526101208401815160e0604087015281815180845261014093508388019150838160051b890101935085830192506000805b828110156104d75789860361013f19018452845180518088529089019089880190845b818110156104c15783516001600160601b0319168352928b0192918b019160010161049b565b5090975050509387019392870192600101610478565b5050505050828201519250603f19808683030160608701526104f9828561041c565b60408481015180516001600160a01b03191660808a01526020810151151560a08a015290810151151560c0890152606090810151601c0b60e089015290930151868403909101610100870152919250610554905082826103cf565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d20204df09f9a80206f4dc3a9c3a94df09f9a80206f4d6ff09f9a802020f09f9a804dc3a94d4df09f9a8020f09f9a80f09f9a806ff09f9a80c3a9c3a9204df09f9a806f6f6f6f6ff09f9a80f09f9a804d206ff09f9a80206f204d206f4da2646970667358221220859b435fe9f257db2c5e8192600fb5584f323c7921221e7e871cd9159df9c98d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_4cb03c13 {\n bytes12 s_0;\n bool s_1;\n bool s_2;\n int232 s_3;\n }\n\n struct S_04001719 {\n bytes20[][] s_0;\n S_97fc4627 s_1;\n S_4cb03c13 s_2;\n string s_3;\n }\n\n struct S_c72a3c2f {\n S_04001719 s_0;\n }\n\n function test () public pure returns (S_c72a3c2f memory) {\n S_c72a3c2f memory r;\n {\n S_04001719 memory r_0;\n {\n bytes20[][] memory r_0_0 = new bytes20[][](2);\n {\n bytes20[] memory r_0_0_0 = new bytes20[](4);\n {\n bytes20 r_0_0_0_0 = bytes20(0x2B751b3cFfD436f96B6655A92F2B64D4f7FA3827);\n r_0_0_0[0] = r_0_0_0_0;\n }\n {\n bytes20 r_0_0_0_1 = bytes20(0xd8B406369A9049d7B8360ab68d7f031Ce029B5e3);\n r_0_0_0[1] = r_0_0_0_1;\n }\n {\n bytes20 r_0_0_0_2 = bytes20(0x70C0b2F043D863509314BB5e8bAF2D60a2239C8c);\n r_0_0_0[2] = r_0_0_0_2;\n }\n {\n bytes20 r_0_0_0_3 = bytes20(0x7FFA80eBb975aA2d20201068BA62EE578DE660C0);\n r_0_0_0[3] = r_0_0_0_3;\n }\n r_0_0[0] = r_0_0_0;\n }\n {\n bytes20[] memory r_0_0_1 = new bytes20[](1);\n {\n bytes20 r_0_0_1_0 = bytes20(0x2442891fdAD5E05da17922E97DfF61427E58fE4c);\n r_0_0_1[0] = r_0_0_1_0;\n }\n r_0_0[1] = r_0_0_1;\n }\n r_0.s_0 = r_0_0;\n }\n {\n S_97fc4627 memory r_0_1;\n {\n string memory r_0_1_0 = unicode\"Moo é🚀M 🚀oo oo\";\n r_0_1.s_0 = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n {\n S_4cb03c13 memory r_0_2;\n {\n bytes12 r_0_2_0 = bytes12(0x35bc7c7302722fbd0d264df5);\n r_0_2.s_0 = r_0_2_0;\n }\n {\n bool r_0_2_1 = false;\n r_0_2.s_1 = r_0_2_1;\n }\n {\n bool r_0_2_2 = true;\n r_0_2.s_2 = r_0_2_2;\n }\n {\n int232 r_0_2_3 = -1230495026499905292590638413903629821495046673257734864151832135122449;\n r_0_2.s_3 = r_0_2_3;\n }\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀M M🚀 oMééM🚀 oMo🚀 🚀MéMM🚀 🚀🚀o🚀éé M🚀ooooo🚀🚀M o🚀 o M oM\";\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000022035bc7c7302722fbd0d264df5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffd25bc049136dc83f94a4f1e60b5daf4457628ee814532e5544953d41ef00000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000042b751b3cffd436f96b6655a92f2b64d4f7fa3827000000000000000000000000d8b406369a9049d7b8360ab68d7f031ce029b5e300000000000000000000000070c0b2f043d863509314bb5e8baf2d60a2239c8c0000000000000000000000007ffa80ebb975aa2d20201068ba62ee578de660c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012442891fdad5e05da17922e97dff61427e58fe4c000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a804d20f09f9a806f6f206f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000684d6f6f20c3a9f09f9a804d20204df09f9a80206f4dc3a9c3a94df09f9a80206f4d6ff09f9a802020f09f9a804dc3a94d4df09f9a8020f09f9a80f09f9a806ff09f9a80c3a9c3a9204df09f9a806f6f6f6f6ff09f9a80f09f9a804d206ff09f9a80206f204d206f4d000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((bytes6,bool)[1],address,string,(bytes20,bytes15,bool[3]))", + "type": "((bytes6,bool)[1],address,string,(bytes20,bytes15,bool[3]))", + "value": [ + [["0xc21b144974d5", true]], + "0x701eEb11438443EECb8484f36e516a667938A647", + "Moo é🚀 🚀 é oo Mo Mé o MM🚀oéo", + [ + "0xde71067c990c4d5ebd3374da97ee6a51c77def90", + "0x705c59baa8643e6cd3bc2a4ce2d943", + [true, true, true] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc21b144974d5" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "address", + "value": "0x701eEb11438443EECb8484f36e516a667938A647" + }, + { + "type": "string", + "value": "Moo é🚀 🚀 é oo Mo Mé o MM🚀oéo" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xde71067c990c4d5ebd3374da97ee6a51c77def90" + }, + { + "type": "hexstring", + "value": "0x705c59baa8643e6cd3bc2a4ce2d943" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061036f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061027d565b60405180910390f35b610056610127565b61005e610127565b61006661015a565b60408051808201825265c21b144974d560d01b8152600160208083019190915290835291835273701eeb11438443eecb8484f36e516a667938a64783830152805160608101909152602c80825260009261030e908301396040830152506100cb610193565b730de71067c990c4d5ebd3374da97ee6a51c77def960641b81526e705c59baa8643e6cd3bc2a4ce2d94360881b60208201526101056101ae565b6001808252602082018190526040808301919091528201526060820152919050565b604051806080016040528061013a61015a565b81526000602082015260606040820181905201610155610193565b905290565b60405180602001604052806001905b60408051808201909152600080825260208201528152602001906001900390816101695790505090565b60408051606081018252600080825260208201529081016101555b60405180606001604052806003906020820280368337509192915050565b6000815180845260005b818110156101f2576020818501810151868301820152016101d6565b81811115610204576000602083870101525b50601f01601f19169290920160200192915050565b80516bffffffffffffffffffffffff1916825260208082015170ffffffffffffffffffffffffffffffffff19168184015260408083015190840160005b6003811015610275578251151582529183019190830190600101610256565b505050505050565b6020808252825160009190828483015b60018210156102c257825180516001600160d01b0319168252840151151584820152918301916001919091019060400161028d565b5050508301516001600160a01b03166060830152604083015161012060808401526102f16101408401826101cc565b9050606084015161030560a0850182610219565b50939250505056fe4d6f6f20c3a9f09f9a8020f09f9a802020c3a92020206f6f204d6f204dc3a9206f204d4df09f9a806fc3a96fa264697066735822122062755393f2564684a74a37e8342f4e5266cd2e81fc592cc1a36ae6a772117eb064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2a1fc9de {\n bytes6 s_0;\n bool s_1;\n }\n\n struct S_f0122cfc {\n bytes20 s_0;\n bytes15 s_1;\n bool[3] s_2;\n }\n\n struct S_9090bfc6 {\n S_2a1fc9de[1] s_0;\n address s_1;\n string s_2;\n S_f0122cfc s_3;\n }\n\n function test () public pure returns (S_9090bfc6 memory) {\n S_9090bfc6 memory r;\n {\n S_2a1fc9de[1] memory r_0;\n {\n S_2a1fc9de memory r_0_0;\n {\n bytes6 r_0_0_0 = bytes6(0xc21b144974d5);\n r_0_0.s_0 = r_0_0_0;\n }\n {\n bool r_0_0_1 = true;\n r_0_0.s_1 = r_0_0_1;\n }\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x701eEb11438443EECb8484f36e516a667938A647;\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀 🚀 é oo Mo Mé o MM🚀oéo\";\n r.s_2 = r_2;\n }\n {\n S_f0122cfc memory r_3;\n {\n bytes20 r_3_0 = bytes20(0xDE71067c990c4d5EbD3374Da97eE6a51c77DeF90);\n r_3.s_0 = r_3_0;\n }\n {\n bytes15 r_3_1 = bytes15(0x705c59baa8643e6cd3bc2a4ce2d943);\n r_3.s_1 = r_3_1;\n }\n {\n bool[3] memory r_3_2;\n {\n bool r_3_2_0 = true;\n r_3_2[0] = r_3_2_0;\n }\n {\n bool r_3_2_1 = true;\n r_3_2[1] = r_3_2_1;\n }\n {\n bool r_3_2_2 = true;\n r_3_2[2] = r_3_2_2;\n }\n r_3.s_2 = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020c21b144974d500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000701eeb11438443eecb8484f36e516a667938a6470000000000000000000000000000000000000000000000000000000000000120de71067c990c4d5ebd3374da97ee6a51c77def90000000000000000000000000705c59baa8643e6cd3bc2a4ce2d9430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002c4d6f6f20c3a9f09f9a8020f09f9a802020c3a92020206f6f204d6f204dc3a9206f204d4df09f9a806fc3a96f0000000000000000000000000000000000000000" + }, + { + "name": "random-((string,string,bool,address)[2],string,bool,bool,address)", + "type": "((string,string,bool,address)[2],string,bool,bool,address)", + "value": [ + [ + [ + "Moo é🚀é🚀ééooM oo 🚀 o🚀MMo ", + "Moo é🚀", + false, + "0x7917e63C2C317b1dcA2e463E767C0E9ad5833Ce6" + ], + [ + "Moo é🚀🚀oéo", + "Moo é🚀M 🚀 🚀MMo o🚀oéMoMé", + true, + "0x0Bc5d14c3D77dFc315230932Abd0602d77BAA3F3" + ] + ], + "Moo é🚀o o 🚀Moooo", + false, + false, + "0xFF5B6E6121A40dbCD3f2D442877e60d4DF7D6221" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀ééooM oo 🚀 o🚀MMo " + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x7917e63C2C317b1dcA2e463E767C0E9ad5833Ce6" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oéo" + }, + { + "type": "string", + "value": "Moo é🚀M 🚀 🚀MMo o🚀oéMoMé" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x0Bc5d14c3D77dFc315230932Abd0602d77BAA3F3" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o o 🚀Moooo" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xFF5B6E6121A40dbCD3f2D442877e60d4DF7D6221" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610417806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102a2565b60405180910390f35b6100566101bf565b61005e6101bf565b6100666101f5565b61006e610222565b60006040518060600160405280602981526020016103b960299139825250604080518082018252600a8152689adede418753e13f3560b71b602080830191909152830152600090820152737917e63c2c317b1dca2e463e767c0e9ad5833ce6606082015281526100dc610222565b60408051808201825260128152714d6f6f20c3a9f09f9a80f09f9a806fc3a96f60701b602080830191909152908352815160608101909252602680835260009291610393908301396020838101919091526001604080850191909152730bc5d14c3d77dfc315230932abd0602d77baa3f36060808601919091528583019490945293855283518085018552601781527f4d6f6f20c3a9f09f9a806f206f20f09f9a804d6f6f6f6f000000000000000000818301529085015250600091830182905282015273ff5b6e6121a40dbcd3f2d442877e60d4df7d62216080820152919050565b6040518060a001604052806101d26101f5565b815260606020820181905260006040830181905290820181905260809091015290565b60405180604001604052806002905b61020c610222565b8152602001906001900390816102045790505090565b6040518060800160405280606081526020016060815260200160001515815260200160006001600160a01b031681525090565b6000815180845260005b8181101561027b5760208185018101518683018201520161025f565b8181111561028d576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825160a0838301526000919061010084019060c08501845b60028110156103335760bf198785030182528251608081518187526102e682880182610255565b91505086820151868203888801526102fe8282610255565b6040848101511515908901526060938401516001600160a01b03169390970192909252505091840191908401906001016102bf565b50505090840151838203601f19016040850152906103518183610255565b9150506040840151610367606085018215159052565b50606084015180151560808501525060808401516001600160a01b03811660a085015250939250505056fe4d6f6f20c3a9f09f9a804d20f09f9a8020f09f9a804d4d6f206ff09f9a806fc3a94d6f4dc3a94d6f6f20c3a9f09f9a80c3a9f09f9a80c3a9c3a96f6f4d206f6f20f09f9a80206ff09f9a804d4d6f20a26469706673582212205897497a4540516c22f51017daf14873d4d1ce72a4652ee5b7c4937426a01b5964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ef299eca {\n string s_0;\n string s_1;\n bool s_2;\n address s_3;\n }\n\n struct S_558d29da {\n S_ef299eca[2] s_0;\n string s_1;\n bool s_2;\n bool s_3;\n address s_4;\n }\n\n function test () public pure returns (S_558d29da memory) {\n S_558d29da memory r;\n {\n S_ef299eca[2] memory r_0;\n {\n S_ef299eca memory r_0_0;\n {\n string memory r_0_0_0 = unicode\"Moo é🚀é🚀ééooM oo 🚀 o🚀MMo \";\n r_0_0.s_0 = r_0_0_0;\n }\n {\n string memory r_0_0_1 = unicode\"Moo é🚀\";\n r_0_0.s_1 = r_0_0_1;\n }\n {\n bool r_0_0_2 = false;\n r_0_0.s_2 = r_0_0_2;\n }\n {\n address r_0_0_3 = 0x7917e63C2C317b1dcA2e463E767C0E9ad5833Ce6;\n r_0_0.s_3 = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n S_ef299eca memory r_0_1;\n {\n string memory r_0_1_0 = unicode\"Moo é🚀🚀oéo\";\n r_0_1.s_0 = r_0_1_0;\n }\n {\n string memory r_0_1_1 = unicode\"Moo é🚀M 🚀 🚀MMo o🚀oéMoMé\";\n r_0_1.s_1 = r_0_1_1;\n }\n {\n bool r_0_1_2 = true;\n r_0_1.s_2 = r_0_1_2;\n }\n {\n address r_0_1_3 = 0x0Bc5d14c3D77dFc315230932Abd0602d77BAA3F3;\n r_0_1.s_3 = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀o o 🚀Moooo\";\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n {\n address r_4 = 0xFF5B6E6121A40dbCD3f2D442877e60d4DF7D6221;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff5b6e6121a40dbcd3f2d442877e60d4df7d622100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007917e63c2c317b1dca2e463e767c0e9ad5833ce600000000000000000000000000000000000000000000000000000000000000294d6f6f20c3a9f09f9a80c3a9f09f9a80c3a9c3a96f6f4d206f6f20f09f9a80206ff09f9a804d4d6f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000bc5d14c3d77dfc315230932abd0602d77baa3f300000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a80f09f9a806fc3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a804d20f09f9a8020f09f9a804d4d6f206ff09f9a806fc3a94d6f4dc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a806f206f20f09f9a804d6f6f6f6f000000000000000000" + }, + { + "name": "random-((uint200[2],bytes20,uint16),int176[2],bool,uint160,bool)", + "type": "((uint200[2],bytes20,uint16),int176[2],bool,uint160,bool)", + "value": [ + [ + [ + "253878955058213251608442499459315762991619067030695132612212", + "955496208067671215683343587904721043899117763595340713939529" + ], + "0x5d11e0f945d66e39b5e9394e235eff341bace71f", + "10948" + ], + [ + "-12089694410970776102697867858883943687635022755859588", + "-29824163311969341174979510466405237543379240151306587" + ], + true, + "90824256095498148182557652342801113584775544654", + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "253878955058213251608442499459315762991619067030695132612212" + }, + { + "type": "number", + "value": "955496208067671215683343587904721043899117763595340713939529" + } + ] + }, + { + "type": "hexstring", + "value": "0x5d11e0f945d66e39b5e9394e235eff341bace71f" + }, + { + "type": "number", + "value": "10948" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-12089694410970776102697867858883943687635022755859588" + }, + { + "type": "number", + "value": "-29824163311969341174979510466405237543379240151306587" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "90824256095498148182557652342801113584775544654" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102d1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101f5565b60405180910390f35b610056610149565b61005e610149565b610066610184565b61006e6101ab565b782871fbf7b6f4ef50cf71aac327331dc4cc790824cfe2994674815278983825e18cd8b1fd5b5c7d7aa07bd6936f09b5d0666af9d249602080830191909152908252735d11e0f945d66e39b5e9394e235eff341bace71f60601b90820152612ac4604082015281526100de6101ab565b7520501ac6cabfd3355a3593a2d89b651356a4ffb70c83198152754fb68547f675364e104aea1823132098e739683e515a19602080830191909152820152600160408201819052730fe8b353e50d7b46a7c56f8113cd20a971613f4e60608301526080820152919050565b6040518060a0016040528061015c610184565b81526020016101696101ab565b81526000602082018190526040820181905260609091015290565b60405180606001604052806101976101ab565b815260006020820181905260409091015290565b60405180604001604052806002906020820280368337509192915050565b8060005b60028110156101ef57815160150b8452602093840193909101906001016101cd565b50505050565b81518051610120830191908360005b600281101561022c5782516001600160c81b0316825260209283019290910190600101610204565b5050506bffffffffffffffffffffffff19602082015116604084015261ffff604082015116606084015250602083015161026960808401826101c9565b506040830151151560c083015260608301516001600160a01b031660e08301526080909201511515610100909101529056fea26469706673582212203116e4aa076e1cdb73d9a2642784beee8d77100bd5f7fcd691801118c5dc120964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b1d7e5c3 {\n uint200[2] s_0;\n bytes20 s_1;\n uint16 s_2;\n }\n\n struct S_8df4de6d {\n S_b1d7e5c3 s_0;\n int176[2] s_1;\n bool s_2;\n uint160 s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_8df4de6d memory) {\n S_8df4de6d memory r;\n {\n S_b1d7e5c3 memory r_0;\n {\n uint200[2] memory r_0_0;\n {\n uint200 r_0_0_0 = 253878955058213251608442499459315762991619067030695132612212;\n r_0_0[0] = r_0_0_0;\n }\n {\n uint200 r_0_0_1 = 955496208067671215683343587904721043899117763595340713939529;\n r_0_0[1] = r_0_0_1;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bytes20 r_0_1 = bytes20(0x5D11E0F945d66E39B5e9394E235EFF341bAcE71f);\n r_0.s_1 = r_0_1;\n }\n {\n uint16 r_0_2 = 10948;\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n int176[2] memory r_1;\n {\n int176 r_1_0 = -12089694410970776102697867858883943687635022755859588;\n r_1[0] = r_1_0;\n }\n {\n int176 r_1_1 = -29824163311969341174979510466405237543379240151306587;\n r_1[1] = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n uint160 r_3 = 90824256095498148182557652342801113584775544654;\n r.s_3 = r_3;\n }\n {\n bool r_4 = true;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000002871fbf7b6f4ef50cf71aac327331dc4cc790824cfe299467400000000000000983825e18cd8b1fd5b5c7d7aa07bd6936f09b5d0666af9d2495d11e0f945d66e39b5e9394e235eff341bace71f0000000000000000000000000000000000000000000000000000000000000000000000000000000000002ac4ffffffffffffffffffffdfafe53935402ccaa5ca6c5d27649aeca95b0048f37cffffffffffffffffffffb0497ab8098ac9b1efb515e7dcecdf6718c697c1aea500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000fe8b353e50d7b46a7c56f8113cd20a971613f4e0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-((uint248,bool,bytes6[4],bool,address),address,uint96,int224)", + "type": "((uint248,bool,bytes6[4],bool,address),address,uint96,int224)", + "value": [ + [ + "99602940391286750557904513903661447258084559118647769796622685540395054819", + false, + ["0xd1461a2388eb", "0x51a867adbfad", "0x5e85f4858f14", "0x96893bb7bc7c"], + true, + "0x66c1E06D32b2657a6b9A6B8332966a3FBB63281E" + ], + "0xfFc57910e425632F55063AD0b47535E85612C07a", + "43545786764963067146990346372", + "-7487339056905709324895045442282257461691714737378107329306905464035" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "99602940391286750557904513903661447258084559118647769796622685540395054819" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xd1461a2388eb" + }, + { + "type": "hexstring", + "value": "0x51a867adbfad" + }, + { + "type": "hexstring", + "value": "0x5e85f4858f14" + }, + { + "type": "hexstring", + "value": "0x96893bb7bc7c" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x66c1E06D32b2657a6b9A6B8332966a3FBB63281E" + } + ] + }, + { + "type": "address", + "value": "0xfFc57910e425632F55063AD0b47535E85612C07a" + }, + { + "type": "number", + "value": "43545786764963067146990346372" + }, + { + "type": "number", + "value": "-7487339056905709324895045442282257461691714737378107329306905464035" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101dc565b60405180910390f35b61005661015d565b61005e61015d565b61006661018b565b7e385f8e64298f01584a84043380042463dc1a66e96d924b875d253ffa94f6e38152600060208201526100976101be565b65d1461a2388eb60d01b81526551a867adbfad60d01b6020808301919091526517a17d2163c560d21b6040808401919091526525a24eedef1f60d21b606080850191909152848201939093526001848401527366c1e06d32b2657a6b9a6b8332966a3fbb63281e608085015292845273ffc57910e425632f55063ad0b47535e85612c07a908401526b8cb43b06a87e1a4385e56084918301919091527fffffffffb8e7497740f54e41b5a497966f21cb5bcd2445fc4e2e18fccda1331d90820152919050565b604051806080016040528061017061018b565b81526000602082018190526040820181905260609091015290565b6040805160a081018252600080825260208201529081016101aa6101be565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b815180516001600160f81b031682526020808201511515818401526040808301516101608501939291850160005b60048110156102315782516001600160d01b0319168252918301919083019060010161020a565b505050606082810151151560c08601526080909201516001600160a01b0390811660e0860152908501511661010084015260408401516bffffffffffffffffffffffff166101208401529290920151601b0b610140909101529056fea26469706673582212202b8d945f16cc82b32a8228753f1df5f5de626ddbbe24c8f29c36338fabe1e24864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f6081e44 {\n uint248 s_0;\n bool s_1;\n bytes6[4] s_2;\n bool s_3;\n address s_4;\n }\n\n struct S_dc2d6193 {\n S_f6081e44 s_0;\n address s_1;\n uint96 s_2;\n int224 s_3;\n }\n\n function test () public pure returns (S_dc2d6193 memory) {\n S_dc2d6193 memory r;\n {\n S_f6081e44 memory r_0;\n {\n uint248 r_0_0 = 99602940391286750557904513903661447258084559118647769796622685540395054819;\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n {\n bytes6[4] memory r_0_2;\n {\n bytes6 r_0_2_0 = bytes6(0xd1461a2388eb);\n r_0_2[0] = r_0_2_0;\n }\n {\n bytes6 r_0_2_1 = bytes6(0x51a867adbfad);\n r_0_2[1] = r_0_2_1;\n }\n {\n bytes6 r_0_2_2 = bytes6(0x5e85f4858f14);\n r_0_2[2] = r_0_2_2;\n }\n {\n bytes6 r_0_2_3 = bytes6(0x96893bb7bc7c);\n r_0_2[3] = r_0_2_3;\n }\n r_0.s_2 = r_0_2;\n }\n {\n bool r_0_3 = true;\n r_0.s_3 = r_0_3;\n }\n {\n address r_0_4 = 0x66c1E06D32b2657a6b9A6B8332966a3FBB63281E;\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xfFc57910e425632F55063AD0b47535E85612C07a;\n r.s_1 = r_1;\n }\n {\n uint96 r_2 = 43545786764963067146990346372;\n r.s_2 = r_2;\n }\n {\n int224 r_3 = -7487339056905709324895045442282257461691714737378107329306905464035;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00385f8e64298f01584a84043380042463dc1a66e96d924b875d253ffa94f6e30000000000000000000000000000000000000000000000000000000000000000d1461a2388eb000000000000000000000000000000000000000000000000000051a867adbfad00000000000000000000000000000000000000000000000000005e85f4858f14000000000000000000000000000000000000000000000000000096893bb7bc7c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000066c1e06d32b2657a6b9a6b8332966a3fbb63281e000000000000000000000000ffc57910e425632f55063ad0b47535e85612c07a00000000000000000000000000000000000000008cb43b06a87e1a4385e56084ffffffffb8e7497740f54e41b5a497966f21cb5bcd2445fc4e2e18fccda1331d" + }, + { + "name": "random-(address,(bool,((address,address),bool,uint16)),string,address)[]", + "type": "(address,(bool,((address,address),bool,uint16)),string,address)[]", + "value": [ + [ + "0x9dad9C027718d9759edd7e1e98Fd55C5c8A8a655", + [ + true, + [ + [ + "0xe5e3D05962E5BC2AB7dfe7EE01C5F752a2b4F7b6", + "0x154EBbd2D37c1d31c89Bff237DcB59Ba8fc02a0B" + ], + true, + "48540" + ] + ], + "Moo é🚀 o", + "0xC22127ca9aeC166F785758943Eb269d56439c725" + ], + [ + "0xafD52Be94282658987BCE2bcff25eAD1010D8415", + [ + true, + [ + [ + "0x133FC77665E472e4f9B6998dbc18A9Fb90B0530A", + "0x24a915C14b46E1fA7B9E77B57B06556b01690566" + ], + true, + "58926" + ] + ], + "Moo é🚀 éoo 🚀o🚀M oo ooooo🚀oMMo ooéMo🚀oo🚀MMooéo🚀 éMMéo🚀M", + "0xCbEcb2468751D6d45e8e1BF16D9dBbBd25E564BA" + ], + [ + "0xC4b48e4c2483178862981E5E422dFe05242075B9", + [ + true, + [ + [ + "0xd263A09C7Ac0eF62774084133FdA8E8De534Af3D", + "0x144c5c2956Ae5AF5597CcfFe31DB5327e7B079cD" + ], + false, + "41816" + ] + ], + "Moo é🚀oo ooooMoéo🚀é🚀éé🚀M 🚀o🚀🚀 oMoo🚀", + "0x52dBf1130234d265C1eC88CC0d1dAf91BC3b32CC" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x9dad9C027718d9759edd7e1e98Fd55C5c8A8a655" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xe5e3D05962E5BC2AB7dfe7EE01C5F752a2b4F7b6" + }, + { + "type": "address", + "value": "0x154EBbd2D37c1d31c89Bff237DcB59Ba8fc02a0B" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "48540" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 o" + }, + { + "type": "address", + "value": "0xC22127ca9aeC166F785758943Eb269d56439c725" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xafD52Be94282658987BCE2bcff25eAD1010D8415" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x133FC77665E472e4f9B6998dbc18A9Fb90B0530A" + }, + { + "type": "address", + "value": "0x24a915C14b46E1fA7B9E77B57B06556b01690566" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "58926" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 éoo 🚀o🚀M oo ooooo🚀oMMo ooéMo🚀oo🚀MMooéo🚀 éMMéo🚀M" + }, + { + "type": "address", + "value": "0xCbEcb2468751D6d45e8e1BF16D9dBbBd25E564BA" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xC4b48e4c2483178862981E5E422dFe05242075B9" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xd263A09C7Ac0eF62774084133FdA8E8De534Af3D" + }, + { + "type": "address", + "value": "0x144c5c2956Ae5AF5597CcfFe31DB5327e7B079cD" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "41816" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oo ooooMoéo🚀é🚀éé🚀M 🚀o🚀🚀 oMoo🚀" + }, + { + "type": "address", + "value": "0x52dBf1130234d265C1eC88CC0d1dAf91BC3b32CC" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610624806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061045e565b60405180910390f35b6040805160038082526080820190925260609160009190816020015b610072610391565b81526020019060019003908161006a57905050905061008f610391565b739dad9c027718d9759edd7e1e98fd55c5c8a8a65581526100ae6103c8565b60018082526040805160a0810182526000606080830182815260808401839052835260208084018381528486018481528651808801885273e5e3d05962e5bc2ab7dfe7ee01c5f752a2b4f7b6815273154ebbd2d37c1d31c89bff237dcb59ba8fc02a0b81850152865296905261bd9c909552848601929092528584019490945281518083018352600c81526b4d6f6f20c3a9f09f9a80206f60a01b938101939093529084019190915273c22127ca9aec166f785758943eb269d56439c7259083015282518291849161018257610182610544565b602002602001018190525050610196610391565b73afd52be94282658987bce2bcff25ead1010d841581526101b56103c8565b60018082526040805160a081018252600060608201818152608080840183905290835260208084018381528486018481528651808801885273133fc77665e472e4f9b6998dbc18a9fb90b0530a81527324a915c14b46e1fa7b9e77b57b06556b0169056681850152865296905261e62e909552848601929092528584019490945281519081019091526054808252909161055b9083013960408301525073cbecb2468751d6d45e8e1bf16d9dbbbd25e564ba6060820152815181908390600190811061028357610283610544565b602002602001018190525050610297610391565b73c4b48e4c2483178862981e5e422dfe05242075b981526102b66103c8565b600181526040805160a0810182526000606080830182815260808401839052835260208084018381528486018481528651808801885273d263a09c7ac0ef62774084133fda8e8de534af3d815273144c5c2956ae5af5597ccffe31db5327e7b079cd8185015286529084905261a35890528086019390935285830194909452825193840183528284529291906105af908301396040830152507352dbf1130234d265c1ec88cc0d1daf91bc3b32cc6060820152815181908390600290811061038057610380610544565b602090810291909101015250919050565b604051806080016040528060006001600160a01b031681526020016103b46103c8565b815260606020820152600060409091015290565b604051806040016040528060001515815260200161040c6040805160a081018252600060608201818152608083018290528252602082018190529181019190915290565b905290565b6000815180845260005b818110156104375760208185018101518683018201520161041b565b81811115610449576000602083870101525b50601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561053657888303603f19018552815180516001600160a01b03908116855288820151805115158a8701528901518051805183168a8801528a0151918216606080880191909152818b0151151560808801528982015161ffff1660a08801528984015161010060c0890181905293909291610505858a0185610411565b9501516001600160a01b03811660e08a015294935061052392505050565b9588019593505090860190600101610485565b509098975050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a8020c3a96f6f20f09f9a806ff09f9a804d206f6f206f6f6f6f6ff09f9a806f4d4d6f206f6fc3a94d6ff09f9a806f6ff09f9a804d4d6f6fc3a96ff09f9a8020c3a94d4dc3a96ff09f9a804d4d6f6f20c3a9f09f9a806f6f206f6f6f6f4d6fc3a96ff09f9a80c3a9f09f9a80c3a9c3a9f09f9a804d20f09f9a806ff09f9a80f09f9a80206f4d6f6ff09f9a80a2646970667358221220a7e5810084bc4fcc863687b5e8a2ffe9679c92f25e214dbb4aa0d8345d26916a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_3b625bf6 {\n address s_0;\n address s_1;\n }\n\n struct S_9e869568 {\n S_3b625bf6 s_0;\n bool s_1;\n uint16 s_2;\n }\n\n struct S_fb839f57 {\n bool s_0;\n S_9e869568 s_1;\n }\n\n struct S_d57c4fe5 {\n address s_0;\n S_fb839f57 s_1;\n string s_2;\n address s_3;\n }\n\n function test () public pure returns (S_d57c4fe5[] memory) {\n S_d57c4fe5[] memory r = new S_d57c4fe5[](3);\n {\n S_d57c4fe5 memory r_0;\n {\n address r_0_0 = 0x9dad9C027718d9759edd7e1e98Fd55C5c8A8a655;\n r_0.s_0 = r_0_0;\n }\n {\n S_fb839f57 memory r_0_1;\n {\n bool r_0_1_0 = true;\n r_0_1.s_0 = r_0_1_0;\n }\n {\n S_9e869568 memory r_0_1_1;\n {\n S_3b625bf6 memory r_0_1_1_0;\n {\n address r_0_1_1_0_0 = 0xe5e3D05962E5BC2AB7dfe7EE01C5F752a2b4F7b6;\n r_0_1_1_0.s_0 = r_0_1_1_0_0;\n }\n {\n address r_0_1_1_0_1 = 0x154EBbd2D37c1d31c89Bff237DcB59Ba8fc02a0B;\n r_0_1_1_0.s_1 = r_0_1_1_0_1;\n }\n r_0_1_1.s_0 = r_0_1_1_0;\n }\n {\n bool r_0_1_1_1 = true;\n r_0_1_1.s_1 = r_0_1_1_1;\n }\n {\n uint16 r_0_1_1_2 = 48540;\n r_0_1_1.s_2 = r_0_1_1_2;\n }\n r_0_1.s_1 = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀 o\";\n r_0.s_2 = r_0_2;\n }\n {\n address r_0_3 = 0xC22127ca9aeC166F785758943Eb269d56439c725;\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_d57c4fe5 memory r_1;\n {\n address r_1_0 = 0xafD52Be94282658987BCE2bcff25eAD1010D8415;\n r_1.s_0 = r_1_0;\n }\n {\n S_fb839f57 memory r_1_1;\n {\n bool r_1_1_0 = true;\n r_1_1.s_0 = r_1_1_0;\n }\n {\n S_9e869568 memory r_1_1_1;\n {\n S_3b625bf6 memory r_1_1_1_0;\n {\n address r_1_1_1_0_0 = 0x133FC77665E472e4f9B6998dbc18A9Fb90B0530A;\n r_1_1_1_0.s_0 = r_1_1_1_0_0;\n }\n {\n address r_1_1_1_0_1 = 0x24a915C14b46E1fA7B9E77B57B06556b01690566;\n r_1_1_1_0.s_1 = r_1_1_1_0_1;\n }\n r_1_1_1.s_0 = r_1_1_1_0;\n }\n {\n bool r_1_1_1_1 = true;\n r_1_1_1.s_1 = r_1_1_1_1;\n }\n {\n uint16 r_1_1_1_2 = 58926;\n r_1_1_1.s_2 = r_1_1_1_2;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀 éoo 🚀o🚀M oo ooooo🚀oMMo ooéMo🚀oo🚀MMooéo🚀 éMMéo🚀M\";\n r_1.s_2 = r_1_2;\n }\n {\n address r_1_3 = 0xCbEcb2468751D6d45e8e1BF16D9dBbBd25E564BA;\n r_1.s_3 = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_d57c4fe5 memory r_2;\n {\n address r_2_0 = 0xC4b48e4c2483178862981E5E422dFe05242075B9;\n r_2.s_0 = r_2_0;\n }\n {\n S_fb839f57 memory r_2_1;\n {\n bool r_2_1_0 = true;\n r_2_1.s_0 = r_2_1_0;\n }\n {\n S_9e869568 memory r_2_1_1;\n {\n S_3b625bf6 memory r_2_1_1_0;\n {\n address r_2_1_1_0_0 = 0xd263A09C7Ac0eF62774084133FdA8E8De534Af3D;\n r_2_1_1_0.s_0 = r_2_1_1_0_0;\n }\n {\n address r_2_1_1_0_1 = 0x144c5c2956Ae5AF5597CcfFe31DB5327e7B079cD;\n r_2_1_1_0.s_1 = r_2_1_1_0_1;\n }\n r_2_1_1.s_0 = r_2_1_1_0;\n }\n {\n bool r_2_1_1_1 = false;\n r_2_1_1.s_1 = r_2_1_1_1;\n }\n {\n uint16 r_2_1_1_2 = 41816;\n r_2_1_1.s_2 = r_2_1_1_2;\n }\n r_2_1.s_1 = r_2_1_1;\n }\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀oo ooooMoéo🚀é🚀éé🚀M 🚀o🚀🚀 oMoo🚀\";\n r_2.s_2 = r_2_2;\n }\n {\n address r_2_3 = 0x52dBf1130234d265C1eC88CC0d1dAf91BC3b32CC;\n r_2.s_3 = r_2_3;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000003200000000000000000000000009dad9c027718d9759edd7e1e98fd55c5c8a8a6550000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e5e3d05962e5bc2ab7dfe7ee01c5f752a2b4f7b6000000000000000000000000154ebbd2d37c1d31c89bff237dcb59ba8fc02a0b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000bd9c0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000c22127ca9aec166f785758943eb269d56439c725000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a80206f0000000000000000000000000000000000000000000000000000000000000000afd52be94282658987bce2bcff25ead1010d84150000000000000000000000000000000000000000000000000000000000000001000000000000000000000000133fc77665e472e4f9b6998dbc18a9fb90b0530a00000000000000000000000024a915c14b46e1fa7b9e77b57b06556b016905660000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000e62e0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000cbecb2468751d6d45e8e1bf16d9dbbbd25e564ba00000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a8020c3a96f6f20f09f9a806ff09f9a804d206f6f206f6f6f6f6ff09f9a806f4d4d6f206f6fc3a94d6ff09f9a806f6ff09f9a804d4d6f6fc3a96ff09f9a8020c3a94d4dc3a96ff09f9a804d000000000000000000000000000000000000000000000000c4b48e4c2483178862981e5e422dfe05242075b90000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d263a09c7ac0ef62774084133fda8e8de534af3d000000000000000000000000144c5c2956ae5af5597ccffe31db5327e7b079cd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a358000000000000000000000000000000000000000000000000000000000000010000000000000000000000000052dbf1130234d265c1ec88cc0d1daf91bc3b32cc00000000000000000000000000000000000000000000000000000000000000404d6f6f20c3a9f09f9a806f6f206f6f6f6f4d6fc3a96ff09f9a80c3a9f09f9a80c3a9c3a9f09f9a804d20f09f9a806ff09f9a80f09f9a80206f4d6f6ff09f9a80" + }, + { + "name": "random-(address,(uint136,int112,string),(bytes5,uint256,int120),address,bool)", + "type": "(address,(uint136,int112,string),(bytes5,uint256,int120),address,bool)", + "value": [ + "0x22e5F3cfe77619b8eD55839672BF47CeE02bEF29", + [ + "6843086358873741979853087704205261977670", + "1358718478852931231120119085615776", + "Moo é🚀 oéMo o oM🚀🚀oMooMo é M o o oo🚀Mé🚀é " + ], + [ + "0x190caeb527", + "37474951617961320889277165096939669819235052587430698714357622185654945595872", + "456312468100962624098114849940908139" + ], + "0x6499946868BFd16a05BE3115e2668CE9fEA1E2ae", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x22e5F3cfe77619b8eD55839672BF47CeE02bEF29" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "6843086358873741979853087704205261977670" + }, + { + "type": "number", + "value": "1358718478852931231120119085615776" + }, + { + "type": "string", + "value": "Moo é🚀 oéMo o oM🚀🚀oMooMo é M o o oo🚀Mé🚀é " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x190caeb527" + }, + { + "type": "number", + "value": "37474951617961320889277165096939669819235052587430698714357622185654945595872" + }, + { + "type": "number", + "value": "456312468100962624098114849940908139" + } + ] + }, + { + "type": "address", + "value": "0x6499946868BFd16a05BE3115e2668CE9fEA1E2ae" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610355806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101ec565b60405180910390f35b61005661016d565b61005e61016d565b7322e5f3cfe77619b8ed55839672bf47cee02bef298152604080516060808201835281830181905270141c2a7e391131a8dcabb67df95b06b84682526d42fd702f9feb65d43f8d91b74aa06020808401919091528351918201909352603e8082529192600092906102e29083013960408301525060208201526100fa604080516060810182526000808252602082018190529181019190915290565b64190caeb52760d81b81527f52da122a616c29214afab6c4f7be7dc1dd5f0de136bb37491f268485461441e060208201526e57e1f110ff5691f1d785df46eb286b604080830191909152820152736499946868bfd16a05be3115e2668ce9fea1e2ae606082015260006080820152919050565b6040518060a0016040528060006001600160a01b031681526020016101b8604051806060016040528060006001600160881b031681526020016000600d0b8152602001606081525090565b8152604080516060810182526000808252602082810182905292820152910190815260006020820181905260409091015290565b6000602080835260018060a01b03845116818401528084015160e060408501526001600160881b0381511661010085015281810151600d0b61012085015260408101519050606061014085015280518061016086015260005b818110156102625782810184015186820161018001528301610245565b8181111561027557600061018083880101525b5060408681015180516001600160d81b03191660608801526020810151608088015290810151600e0b60a0870152925060608601516001600160a01b03811660c08701529250608086015180151560e08701529250601f01601f1916939093016101800194935050505056fe4d6f6f20c3a9f09f9a80206fc3a94d6f206f20206f4df09f9a80f09f9a806f4d6f6f4d6f20c3a9204d206f206f206f6ff09f9a804dc3a9f09f9a80c3a920a2646970667358221220553d7d5f33b7b70138c5ef064d2f1a7efcee3721464f0ebd2d813234a0d1822564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_4c8d97ce {\n uint136 s_0;\n int112 s_1;\n string s_2;\n }\n\n struct S_e088f480 {\n bytes5 s_0;\n uint256 s_1;\n int120 s_2;\n }\n\n struct S_3a9f78e7 {\n address s_0;\n S_4c8d97ce s_1;\n S_e088f480 s_2;\n address s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_3a9f78e7 memory) {\n S_3a9f78e7 memory r;\n {\n address r_0 = 0x22e5F3cfe77619b8eD55839672BF47CeE02bEF29;\n r.s_0 = r_0;\n }\n {\n S_4c8d97ce memory r_1;\n {\n uint136 r_1_0 = 6843086358873741979853087704205261977670;\n r_1.s_0 = r_1_0;\n }\n {\n int112 r_1_1 = 1358718478852931231120119085615776;\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀 oéMo o oM🚀🚀oMooMo é M o o oo🚀Mé🚀é \";\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n S_e088f480 memory r_2;\n {\n bytes5 r_2_0 = bytes5(0x190caeb527);\n r_2.s_0 = r_2_0;\n }\n {\n uint256 r_2_1 = 37474951617961320889277165096939669819235052587430698714357622185654945595872;\n r_2.s_1 = r_2_1;\n }\n {\n int120 r_2_2 = 456312468100962624098114849940908139;\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x6499946868BFd16a05BE3115e2668CE9fEA1E2ae;\n r.s_3 = r_3;\n }\n {\n bool r_4 = false;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000022e5f3cfe77619b8ed55839672bf47cee02bef2900000000000000000000000000000000000000000000000000000000000000e0190caeb52700000000000000000000000000000000000000000000000000000052da122a616c29214afab6c4f7be7dc1dd5f0de136bb37491f268485461441e0000000000000000000000000000000000057e1f110ff5691f1d785df46eb286b0000000000000000000000006499946868bfd16a05be3115e2668ce9fea1e2ae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141c2a7e391131a8dcabb67df95b06b84600000000000000000000000000000000000042fd702f9feb65d43f8d91b74aa00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a80206fc3a94d6f206f20206f4df09f9a80f09f9a806f4d6f6f4d6f20c3a9204d206f206f206f6ff09f9a804dc3a9f09f9a80c3a9200000" + }, + { + "name": "random-(address,address,(string,address,bytes26,bool,uint8[4][3]))", + "type": "(address,address,(string,address,bytes26,bool,uint8[4][3]))", + "value": [ + "0x82BECf40d84f7bF9d952C588D4FDCd4d766398b4", + "0xbEF85a4D884E29378978f6112ca7f80d2521Ed2e", + [ + "Moo é🚀M é🚀oéoMMMM 🚀éooooéoéoo🚀 Mo éM🚀 MM", + "0x80D5b853522885910d95D4031730C785ba7904A9", + "0xfdae75f0e7f1d7d181cf04c41f0686cbc1f812c139de03d197b4", + true, + [ + ["147", "104", "29", "175"], + ["170", "254", "18", "228"], + ["181", "94", "189", "91"] + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x82BECf40d84f7bF9d952C588D4FDCd4d766398b4" + }, + { + "type": "address", + "value": "0xbEF85a4D884E29378978f6112ca7f80d2521Ed2e" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M é🚀oéoMMMM 🚀éooooéoéoo🚀 Mo éM🚀 MM" + }, + { + "type": "address", + "value": "0x80D5b853522885910d95D4031730C785ba7904A9" + }, + { + "type": "hexstring", + "value": "0xfdae75f0e7f1d7d181cf04c41f0686cbc1f812c139de03d197b4" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "147" + }, + { + "type": "number", + "value": "104" + }, + { + "type": "number", + "value": "29" + }, + { + "type": "number", + "value": "175" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "170" + }, + { + "type": "number", + "value": "254" + }, + { + "type": "number", + "value": "18" + }, + { + "type": "number", + "value": "228" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "181" + }, + { + "type": "number", + "value": "94" + }, + { + "type": "number", + "value": "189" + }, + { + "type": "number", + "value": "91" + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103c1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061027b565b60405180910390f35b61005661018b565b61005e61018b565b7382becf40d84f7bf9d952c588d4fdcd4d766398b4815273bef85a4d884e29378978f6112ca7f80d2521ed2e60208201526100976101af565b60006040518060600160405280603f815260200161034d603f91398252507380d5b853522885910d95d4031730c785ba7904a960208201527ffdae75f0e7f1d7d181cf04c41f0686cbc1f812c139de03d197b40000000000006040820152600160608201526101046101db565b61010c610208565b6093815260686020820152601d604082015260af6060820152815261012f610208565b60aa815260fe6020808301919091526012604083015260e46060830152820152610157610208565b60b58152605e602082015260bd604080830191909152605b6060830152828101919091526080830191909152820152919050565b60408051606081018252600080825260208201529081016101aa6101af565b905290565b6040805160a0810182526060808252600060208301819052928201839052810191909152608081016101aa5b60405180606001604052806003905b6101f2610208565b8152602001906001900390816101ea5790505090565b60405180608001604052806004906020820280368337509192915050565b806000805b600381101561027457825185835b600481101561025b57825160ff16825260209283019290910190600101610239565b505050608094909401936020929092019160010161022b565b5050505050565b6000602080835260018060a01b03808551168285015280828601511660408501525060408401516060808501528051610200608086015280518061028087015260005b818110156102db578281018501518782016102a0015284016102be565b818111156102ee5760006102a083890101525b50928201516001600160a01b031660a0860152604082015165ffffffffffff191660c08601526060820151151560e0860152608082015192610334610100870185610226565b601f01601f1916949094016102a0019594505050505056fe4d6f6f20c3a9f09f9a804d2020c3a9f09f9a806fc3a96f4d4d4d4d20f09f9a80c3a96f6f6f6fc3a96fc3a96f6ff09f9a80204d6f20c3a94df09f9a80204d4da2646970667358221220e9f6e4f00b04090ee5a6c16adbdba526f566033c35921fb64997ea7ece5a234d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_bdf3e8c9 {\n string s_0;\n address s_1;\n bytes26 s_2;\n bool s_3;\n uint8[4][3] s_4;\n }\n\n struct S_035c0409 {\n address s_0;\n address s_1;\n S_bdf3e8c9 s_2;\n }\n\n function test () public pure returns (S_035c0409 memory) {\n S_035c0409 memory r;\n {\n address r_0 = 0x82BECf40d84f7bF9d952C588D4FDCd4d766398b4;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xbEF85a4D884E29378978f6112ca7f80d2521Ed2e;\n r.s_1 = r_1;\n }\n {\n S_bdf3e8c9 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀M é🚀oéoMMMM 🚀éooooéoéoo🚀 Mo éM🚀 MM\";\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0x80D5b853522885910d95D4031730C785ba7904A9;\n r_2.s_1 = r_2_1;\n }\n {\n bytes26 r_2_2 = bytes26(0xfdae75f0e7f1d7d181cf04c41f0686cbc1f812c139de03d197b4);\n r_2.s_2 = r_2_2;\n }\n {\n bool r_2_3 = true;\n r_2.s_3 = r_2_3;\n }\n {\n uint8[4][3] memory r_2_4;\n {\n uint8[4] memory r_2_4_0;\n {\n uint8 r_2_4_0_0 = 147;\n r_2_4_0[0] = r_2_4_0_0;\n }\n {\n uint8 r_2_4_0_1 = 104;\n r_2_4_0[1] = r_2_4_0_1;\n }\n {\n uint8 r_2_4_0_2 = 29;\n r_2_4_0[2] = r_2_4_0_2;\n }\n {\n uint8 r_2_4_0_3 = 175;\n r_2_4_0[3] = r_2_4_0_3;\n }\n r_2_4[0] = r_2_4_0;\n }\n {\n uint8[4] memory r_2_4_1;\n {\n uint8 r_2_4_1_0 = 170;\n r_2_4_1[0] = r_2_4_1_0;\n }\n {\n uint8 r_2_4_1_1 = 254;\n r_2_4_1[1] = r_2_4_1_1;\n }\n {\n uint8 r_2_4_1_2 = 18;\n r_2_4_1[2] = r_2_4_1_2;\n }\n {\n uint8 r_2_4_1_3 = 228;\n r_2_4_1[3] = r_2_4_1_3;\n }\n r_2_4[1] = r_2_4_1;\n }\n {\n uint8[4] memory r_2_4_2;\n {\n uint8 r_2_4_2_0 = 181;\n r_2_4_2[0] = r_2_4_2_0;\n }\n {\n uint8 r_2_4_2_1 = 94;\n r_2_4_2[1] = r_2_4_2_1;\n }\n {\n uint8 r_2_4_2_2 = 189;\n r_2_4_2[2] = r_2_4_2_2;\n }\n {\n uint8 r_2_4_2_3 = 91;\n r_2_4_2[3] = r_2_4_2_3;\n }\n r_2_4[2] = r_2_4_2;\n }\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000082becf40d84f7bf9d952c588d4fdcd4d766398b4000000000000000000000000bef85a4d884e29378978f6112ca7f80d2521ed2e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000020000000000000000000000000080d5b853522885910d95d4031730c785ba7904a9fdae75f0e7f1d7d181cf04c41f0686cbc1f812c139de03d197b4000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000930000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000001d00000000000000000000000000000000000000000000000000000000000000af00000000000000000000000000000000000000000000000000000000000000aa00000000000000000000000000000000000000000000000000000000000000fe000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000e400000000000000000000000000000000000000000000000000000000000000b5000000000000000000000000000000000000000000000000000000000000005e00000000000000000000000000000000000000000000000000000000000000bd000000000000000000000000000000000000000000000000000000000000005b000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a804d2020c3a9f09f9a806fc3a96f4d4d4d4d20f09f9a80c3a96f6f6f6fc3a96fc3a96f6ff09f9a80204d6f20c3a94df09f9a80204d4d00" + }, + { + "name": "random-(address,address,bytes25,(uint72,address,int216,address)[2],address)", + "type": "(address,address,bytes25,(uint72,address,int216,address)[2],address)", + "value": [ + "0xDfB03e76a127760Fa32bF6dE7381b538535ec874", + "0x6b94a6a48AA481B830A9075F5B92281263481D8D", + "0x3b205fcae1de15c8a4da4739ffb7b7b516fc9809a7a2ff6ecc", + [ + [ + "3692717907909319521814", + "0x13ea4b4c99c714105E367c01c142e07c805951FC", + "10669334262183701124233687440340846381739856249053860273281701505", + "0x3C17c4AbB1635083F9DfFCF6d9F51019C030889F" + ], + [ + "1703011203831543143230", + "0x64Bfbd2E981F15b2d5BE7545B8E95901217970E7", + "24809658015167646081161513227366217590539939179414939113365314645", + "0x7ac379e98D482e32b9429765aF5eA7A4aA9f2842" + ] + ], + "0x904E47E55497b39A98F09E45D9a30abF99E0E204" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xDfB03e76a127760Fa32bF6dE7381b538535ec874" + }, + { + "type": "address", + "value": "0x6b94a6a48AA481B830A9075F5B92281263481D8D" + }, + { + "type": "hexstring", + "value": "0x3b205fcae1de15c8a4da4739ffb7b7b516fc9809a7a2ff6ecc" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3692717907909319521814" + }, + { + "type": "address", + "value": "0x13ea4b4c99c714105E367c01c142e07c805951FC" + }, + { + "type": "number", + "value": "10669334262183701124233687440340846381739856249053860273281701505" + }, + { + "type": "address", + "value": "0x3C17c4AbB1635083F9DfFCF6d9F51019C030889F" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1703011203831543143230" + }, + { + "type": "address", + "value": "0x64Bfbd2E981F15b2d5BE7545B8E95901217970E7" + }, + { + "type": "number", + "value": "24809658015167646081161513227366217590539939179414939113365314645" + }, + { + "type": "address", + "value": "0x7ac379e98D482e32b9429765aF5eA7A4aA9f2842" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x904E47E55497b39A98F09E45D9a30abF99E0E204" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061032f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610241565b60405180910390f35b6100566101c5565b61005e6101c5565b73dfb03e76a127760fa32bf6de7381b538535ec8748152736b94a6a48aa481b830a9075f5b92281263481d8d60208201527f3b205fcae1de15c8a4da4739ffb7b7b516fc9809a7a2ff6ecc0000000000000060408201526100bd6101fb565b604080516080808201835268c82ec16c62b29ef61682527313ea4b4c99c714105e367c01c142e07c805951fc6020808401919091527a19ef8b02d28e266adf1e3beacdacfed7458a1089853704daba168183850152733c17c4abb1635083f9dffcf6d9f51019c030889f60608085019190915292855283518083018552685c520732f1d97c9b3e81527364bfbd2e981f15b2d5be7545b8e95901217970e7818301527a3c4f168cd96c1256644515c95e35c83cbb7ee0375c8b8f625a1c5594810194909452737ac379e98d482e32b9429765af5ea7a4aa9f28428484015284019290925283019190915273904e47e55497b39a98f09e45d9a30abf99e0e20490820152919050565b6040805160a08101825260008082526020820181905291810191909152606081016101ee6101fb565b8152600060209091015290565b60405180604001604052806002905b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018161020a5790505090565b81516001600160a01b03908116825260208084015182168184015260408085015166ffffffffffffff1916818501526060808601516101808601949392919081870160005b60028110156102d0578251805168ffffffffffffffffff1683528681015188168784015285810151601a0b8684015284015187168483015291850191608090910190600101610286565b5050505050505060808301516102f26101608401826001600160a01b03169052565b509291505056fea2646970667358221220da0534d2acf5193faaf2f88c6953d0914cb8dca5878e823c180c114c3db44dc364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_749d20f8 {\n uint72 s_0;\n address s_1;\n int216 s_2;\n address s_3;\n }\n\n struct S_b001601a {\n address s_0;\n address s_1;\n bytes25 s_2;\n S_749d20f8[2] s_3;\n address s_4;\n }\n\n function test () public pure returns (S_b001601a memory) {\n S_b001601a memory r;\n {\n address r_0 = 0xDfB03e76a127760Fa32bF6dE7381b538535ec874;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x6b94a6a48AA481B830A9075F5B92281263481D8D;\n r.s_1 = r_1;\n }\n {\n bytes25 r_2 = bytes25(0x3b205fcae1de15c8a4da4739ffb7b7b516fc9809a7a2ff6ecc);\n r.s_2 = r_2;\n }\n {\n S_749d20f8[2] memory r_3;\n {\n S_749d20f8 memory r_3_0;\n {\n uint72 r_3_0_0 = 3692717907909319521814;\n r_3_0.s_0 = r_3_0_0;\n }\n {\n address r_3_0_1 = 0x13ea4b4c99c714105E367c01c142e07c805951FC;\n r_3_0.s_1 = r_3_0_1;\n }\n {\n int216 r_3_0_2 = 10669334262183701124233687440340846381739856249053860273281701505;\n r_3_0.s_2 = r_3_0_2;\n }\n {\n address r_3_0_3 = 0x3C17c4AbB1635083F9DfFCF6d9F51019C030889F;\n r_3_0.s_3 = r_3_0_3;\n }\n r_3[0] = r_3_0;\n }\n {\n S_749d20f8 memory r_3_1;\n {\n uint72 r_3_1_0 = 1703011203831543143230;\n r_3_1.s_0 = r_3_1_0;\n }\n {\n address r_3_1_1 = 0x64Bfbd2E981F15b2d5BE7545B8E95901217970E7;\n r_3_1.s_1 = r_3_1_1;\n }\n {\n int216 r_3_1_2 = 24809658015167646081161513227366217590539939179414939113365314645;\n r_3_1.s_2 = r_3_1_2;\n }\n {\n address r_3_1_3 = 0x7ac379e98D482e32b9429765aF5eA7A4aA9f2842;\n r_3_1.s_3 = r_3_1_3;\n }\n r_3[1] = r_3_1;\n }\n r.s_3 = r_3;\n }\n {\n address r_4 = 0x904E47E55497b39A98F09E45D9a30abF99E0E204;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000dfb03e76a127760fa32bf6de7381b538535ec8740000000000000000000000006b94a6a48aa481b830a9075f5b92281263481d8d3b205fcae1de15c8a4da4739ffb7b7b516fc9809a7a2ff6ecc000000000000000000000000000000000000000000000000000000000000c82ec16c62b29ef61600000000000000000000000013ea4b4c99c714105e367c01c142e07c805951fc000000000019ef8b02d28e266adf1e3beacdacfed7458a1089853704daba16810000000000000000000000003c17c4abb1635083f9dffcf6d9f51019c030889f00000000000000000000000000000000000000000000005c520732f1d97c9b3e00000000000000000000000064bfbd2e981f15b2d5be7545b8e95901217970e700000000003c4f168cd96c1256644515c95e35c83cbb7ee0375c8b8f625a1c550000000000000000000000007ac379e98d482e32b9429765af5ea7a4aa9f2842000000000000000000000000904e47e55497b39a98f09e45d9a30abf99e0e204" + }, + { + "name": "random-(address,bool,(int120,(string[]),int96[4],bool,string))", + "type": "(address,bool,(int120,(string[]),int96[4],bool,string))", + "value": [ + "0x4a02671298D4Bd64bA890f35DAD7B66ACEa69BB6", + false, + [ + "-342740983664008083600573359238865747", + [ + [ + "Moo é🚀ooo o🚀MM o🚀 🚀M M MooM🚀🚀🚀🚀oo o🚀oMé o🚀🚀ooMé🚀ooo o oMo🚀o ", + "Moo é🚀Mo🚀éoMoooéooéMoMMo M o 🚀Moooo🚀 M MMééoMo🚀MéoMoMMo ", + "Moo é🚀o ooo ooM é🚀oMMM🚀oMo", + "Moo é🚀 é oMMMoooéo éoo é🚀 🚀 éMo🚀ooMé" + ] + ], + [ + "-35393757136970844383315485102", + "32839747911182099092588091051", + "-21527227785575933408595745655", + "34774979357630408063090019509" + ], + false, + "Moo é🚀o oo🚀🚀🚀M 🚀🚀o🚀M oé oMMééMéooMoMM o🚀oM" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x4a02671298D4Bd64bA890f35DAD7B66ACEa69BB6" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-342740983664008083600573359238865747" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooo o🚀MM o🚀 🚀M M MooM🚀🚀🚀🚀oo o🚀oMé o🚀🚀ooMé🚀ooo o oMo🚀o " + }, + { + "type": "string", + "value": "Moo é🚀Mo🚀éoMoooéooéMoMMo M o 🚀Moooo🚀 M MMééoMo🚀MéoMoMMo " + }, + { + "type": "string", + "value": "Moo é🚀o ooo ooM é🚀oMMM🚀oMo" + }, + { + "type": "string", + "value": "Moo é🚀 é oMMMoooéo éoo é🚀 🚀 éMo🚀ooMé" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-35393757136970844383315485102" + }, + { + "type": "number", + "value": "32839747911182099092588091051" + }, + { + "type": "number", + "value": "-21527227785575933408595745655" + }, + { + "type": "number", + "value": "34774979357630408063090019509" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀o oo🚀🚀🚀M 🚀🚀o🚀M oé oMMééMéooMoMM o🚀oM" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506105ff806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061036b565b60405180910390f35b610056610264565b61005e610264565b734a02671298d4bd64ba890f35dad7b66acea69bb6815260006020820152610084610288565b6e42026f66ee38b17ccd9f6d756ae35219815260408051602081018252606081528151600480825260a08201909352909160009190816020015b60608152602001906001900390816100be57905050905060006040518060a0016040528060688152602001610562606891399050808260008151811061010657610106610457565b60200260200101819052505060006040518060800160405280604f815260200161046e604f91399050808260018151811061014357610143610457565b60200260200101819052505060006040518060600160405280602581526020016104bd602591399050808260028151811061018057610180610457565b602002602001018190525050600060405180606001604052806038815260200161052a60389139905080826003815181106101bd576101bd610457565b602090810291909101810191909152918352508201526101db6102d4565b6b725d079b04332c7ec4f3e1ad1981526b6a1c671d7580d241e05e56ab6020808301919091526b458ee7cca2b5d5e862251b76196040808401919091526b705d305062529b917a59ccb5606080850191909152848201939093526000928401839052805160808101909152604880825290916104e2908301396080830152506040820152919050565b6040805160608101825260008082526020820152908101610283610288565b905290565b6040518060a001604052806000600e0b81526020016102b36040518060200160405280606081525090565b81526020016102c06102d4565b815260006020820152606060409091015290565b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b81811015610318576020818501810151868301820152016102fc565b8181111561032a576000602083870101525b50601f01601f19169290920160200192915050565b8060005b6004811015610365578151600b0b845260209384019390910190600101610343565b50505050565b602080825282516001600160a01b0316828201528281015115156040808401919091528301516060808401528051600e0b60808401528082015161010060a085015251610180840183905280516101a0850181905260009392918301906101c0600582901b870181019190870190865b8181101561040a576101bf198985030183526103f88486516102f2565b948701949350918601916001016103db565b5050506040830151935061042160c087018561033f565b606083015115156101408701526080830151607f1987830301610160880152935061044c81856102f2565b979650505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d6ff09f9a80c3a96f4d6f6f6fc3a96f6fc3a94d6f4d4d6f204d206f2020f09f9a804d6f6f6f6ff09f9a80204d204d4dc3a9c3a96f4d6ff09f9a804dc3a96f4d6f4d4d6f204d6f6f20c3a9f09f9a806f206f6f6f206f6f4d20c3a9f09f9a806f4d4d4df09f9a806f4d6f4d6f6f20c3a9f09f9a806f206f6ff09f9a80f09f9a80f09f9a804d2020f09f9a80f09f9a806ff09f9a804d206fc3a9206f4d4dc3a9c3a94dc3a96f6f4d6f4d4d206ff09f9a806f4d4d6f6f20c3a9f09f9a8020c3a9206f4d4d4d6f6f6fc3a96f20c3a96f6f20c3a9f09f9a802020f09f9a8020c3a94d6ff09f9a806f6f4dc3a94d6f6f20c3a9f09f9a806f6f6f206ff09f9a804d4d20206ff09f9a8020f09f9a804d204d204d6f6f4df09f9a80f09f9a80f09f9a80f09f9a806f6f20206ff09f9a806f4dc3a9206ff09f9a80f09f9a806f6f4dc3a9f09f9a806f6f6f206f206f4d6ff09f9a806f20a2646970667358221220b0b34c1479b933b90a731476c8fc751b9ff1ee0242b3cb0e3c6477905eb625b764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a227fd7a {\n string[] s_0;\n }\n\n struct S_e3505db6 {\n int120 s_0;\n S_a227fd7a s_1;\n int96[4] s_2;\n bool s_3;\n string s_4;\n }\n\n struct S_ea61bba6 {\n address s_0;\n bool s_1;\n S_e3505db6 s_2;\n }\n\n function test () public pure returns (S_ea61bba6 memory) {\n S_ea61bba6 memory r;\n {\n address r_0 = 0x4a02671298D4Bd64bA890f35DAD7B66ACEa69BB6;\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n S_e3505db6 memory r_2;\n {\n int120 r_2_0 = -342740983664008083600573359238865747;\n r_2.s_0 = r_2_0;\n }\n {\n S_a227fd7a memory r_2_1;\n {\n string[] memory r_2_1_0 = new string[](4);\n {\n string memory r_2_1_0_0 = unicode\"Moo é🚀ooo o🚀MM o🚀 🚀M M MooM🚀🚀🚀🚀oo o🚀oMé o🚀🚀ooMé🚀ooo o oMo🚀o \";\n r_2_1_0[0] = r_2_1_0_0;\n }\n {\n string memory r_2_1_0_1 = unicode\"Moo é🚀Mo🚀éoMoooéooéMoMMo M o 🚀Moooo🚀 M MMééoMo🚀MéoMoMMo \";\n r_2_1_0[1] = r_2_1_0_1;\n }\n {\n string memory r_2_1_0_2 = unicode\"Moo é🚀o ooo ooM é🚀oMMM🚀oMo\";\n r_2_1_0[2] = r_2_1_0_2;\n }\n {\n string memory r_2_1_0_3 = unicode\"Moo é🚀 é oMMMoooéo éoo é🚀 🚀 éMo🚀ooMé\";\n r_2_1_0[3] = r_2_1_0_3;\n }\n r_2_1.s_0 = r_2_1_0;\n }\n r_2.s_1 = r_2_1;\n }\n {\n int96[4] memory r_2_2;\n {\n int96 r_2_2_0 = -35393757136970844383315485102;\n r_2_2[0] = r_2_2_0;\n }\n {\n int96 r_2_2_1 = 32839747911182099092588091051;\n r_2_2[1] = r_2_2_1;\n }\n {\n int96 r_2_2_2 = -21527227785575933408595745655;\n r_2_2[2] = r_2_2_2;\n }\n {\n int96 r_2_2_3 = 34774979357630408063090019509;\n r_2_2[3] = r_2_2_3;\n }\n r_2.s_2 = r_2_2;\n }\n {\n bool r_2_3 = false;\n r_2.s_3 = r_2_3;\n }\n {\n string memory r_2_4 = unicode\"Moo é🚀o oo🚀🚀🚀M 🚀🚀o🚀M oé oMMééMéooMoMM o🚀oM\";\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000004a02671298d4bd64ba890f35dad7b66acea69bb600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060ffffffffffffffffffffffffffffffffffbdfd909911c74e833260928a951cad0000000000000000000000000000000000000000000000000000000000000100ffffffffffffffffffffffffffffffffffffffff8da2f864fbccd3813b0c1e5200000000000000000000000000000000000000006a1c671d7580d241e05e56abffffffffffffffffffffffffffffffffffffffffba7118335d4a2a179ddae4890000000000000000000000000000000000000000705d305062529b917a59ccb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000684d6f6f20c3a9f09f9a806f6f6f206ff09f9a804d4d20206ff09f9a8020f09f9a804d204d204d6f6f4df09f9a80f09f9a80f09f9a80f09f9a806f6f20206ff09f9a806f4dc3a9206ff09f9a80f09f9a806f6f4dc3a9f09f9a806f6f6f206f206f4d6ff09f9a806f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a804d6ff09f9a80c3a96f4d6f6f6fc3a96f6fc3a94d6f4d4d6f204d206f2020f09f9a804d6f6f6f6ff09f9a80204d204d4dc3a9c3a96f4d6ff09f9a804dc3a96f4d6f4d4d6f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a806f206f6f6f206f6f4d20c3a9f09f9a806f4d4d4df09f9a806f4d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a8020c3a9206f4d4d4d6f6f6fc3a96f20c3a96f6f20c3a9f09f9a802020f09f9a8020c3a94d6ff09f9a806f6f4dc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000484d6f6f20c3a9f09f9a806f206f6ff09f9a80f09f9a80f09f9a804d2020f09f9a80f09f9a806ff09f9a804d206fc3a9206f4d4dc3a9c3a94dc3a96f6f4d6f4d4d206ff09f9a806f4d000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,uint256[],address,(uint224[3][1],bool)[])", + "type": "(bool,uint256[],address,(uint224[3][1],bool)[])", + "value": [ + false, + [], + "0x7401E64eAcf2E89592f883BfDc29A07007655041", + [ + [ + [ + [ + "3665792924886486706395148864108103151715164442541023350299227423068", + "1438304417306487162635914423297439381530222489498886127364350061494", + "12255773174587558902021710215000274305151450508310768616354548800122" + ] + ], + false + ], + [ + [ + [ + "7277201430181717106404435747192108841822452929345930680254618780182", + "1243330844000495586956486211452132989160591235893043583972494226105", + "12573446197010984063385595380850908472488399026082223500810707151614" + ] + ], + false + ], + [ + [ + [ + "25861718082459565365078137080766635254659018946056216371384956302258", + "20299967070612523552149757330951295432386331384727574354202934870662", + "14854739284931674878547989318627917930882858402958036947429170250061" + ] + ], + true + ], + [ + [ + [ + "16506184985993955909713661827778470551924320576671290986571772963307", + "20258812640594799922528026732885190784399270915075222077547368418445", + "4892045323356677764744713343335843887511078449125656665735866635586" + ] + ], + true + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [] + }, + { + "type": "address", + "value": "0x7401E64eAcf2E89592f883BfDc29A07007655041" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3665792924886486706395148864108103151715164442541023350299227423068" + }, + { + "type": "number", + "value": "1438304417306487162635914423297439381530222489498886127364350061494" + }, + { + "type": "number", + "value": "12255773174587558902021710215000274305151450508310768616354548800122" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "7277201430181717106404435747192108841822452929345930680254618780182" + }, + { + "type": "number", + "value": "1243330844000495586956486211452132989160591235893043583972494226105" + }, + { + "type": "number", + "value": "12573446197010984063385595380850908472488399026082223500810707151614" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "25861718082459565365078137080766635254659018946056216371384956302258" + }, + { + "type": "number", + "value": "20299967070612523552149757330951295432386331384727574354202934870662" + }, + { + "type": "number", + "value": "14854739284931674878547989318627917930882858402958036947429170250061" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "16506184985993955909713661827778470551924320576671290986571772963307" + }, + { + "type": "number", + "value": "20258812640594799922528026732885190784399270915075222077547368418445" + }, + { + "type": "number", + "value": "4892045323356677764744713343335843887511078449125656665735866635586" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061058e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906104b3565b60405180910390f35b60408051608080820183526000808352606060208085018290528486018390528185018290528551938401865282845283810182815284870184815285840193909352865184815280830188529052737401e64eacf2e89592f883bfdc29a070076550419091528451600480825260a082019096529394929391929082015b6100d56103a9565b8152602001906001900390816100cd5790505090506100f26103a9565b6100fa6103c9565b6101026103f6565b7b22cf0c89a6feac9272d00962f773ba34d78cfea50e82398d2d6d815c81527b0da853094bb3418c26728e40a28cc3f2ba5d2eaac43f4797a7feabb66020808301919091527b7460225ee934412a47765afde6ae244c4a7974ce74769e9f2007da7a6040830152908252908252600090820181905282518291849161018957610189610542565b60200260200101819052505061019d6103a9565b6101a56103c9565b6101ad6103f6565b7b4519e591691004a83b152b51c6594a6c80afe9243c317951a469c21681527b0bce5eaf0b3ae5849248b50c0a8dd28fa5b8a89be9257a3f921f32b96020808301919091527b77645ac726d7baaeef1db4574ae8f3f8216c895a28fcb368067e2afe6040830152908252908252600090820152815181908390600190811061023757610237610542565b60200260200101819052505061024b6103a9565b6102536103c9565b61025b6103f6565b7bf5925aac83f29e1e5eeb8f10d9afa1ac015d3c6a4edff4b6270133b281527bc0c27c85a5114f9d6c79a9c5fa5238348c52fbec4fad7570092b82866020808301919091527b8d0ddef3ae3c95a9c77b21f75e3393b9ba9c58b32951a1c52086814d604083015290825290825260019082015281518190839060029081106102e5576102e5610542565b6020026020010181905250506102f96103a9565b6103016103c9565b6103096103f6565b7b9cbc50227bfa7004d528d66b47d4b9cae61f249015460f61d40ba9eb81527bc05e720eb01d2cf6c10f25f6bf50d4974d37cf23a0de2be471a80c8d6020808301919091527b2e73e7475a70fc5a1bd21ae84b82edfe31dbbf2b0f5a89c20af455426040830152908252908252600190820152815181908390600390811061039357610393610542565b6020908102919091010152506060820152919050565b60405180604001604052806103bc6103c9565b8152600060209091015290565b60405180602001604052806001905b6103e06103f6565b8152602001906001900390816103d85790505090565b60405180606001604052806003906020820280368337509192915050565b600081518084526020808501945080840160005b838110156104a857815180518860005b60018082106104475750610489565b83518360005b60038110156104725782516001600160e01b03168252918a0191908a0190830161044d565b505050928701925060609190910190600101610438565b5050508301511515606088015260809096019590820190600101610428565b509495945050505050565b602080825282511515828201528281015160806040840152805160a0840181905260009291820190839060c08601905b8083101561050357835182529284019260019290920191908401906104e3565b5060408701516001600160a01b038116606088015293506060870151868203601f1901608088015293506105378185610414565b979650505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220524f08b5e516c0c60f23c5ad6b738e49c343fe7d984919fb4cdc67c0a3e3808b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0ce7a73b {\n uint224[3][1] s_0;\n bool s_1;\n }\n\n struct S_aeea6376 {\n bool s_0;\n uint256[] s_1;\n address s_2;\n S_0ce7a73b[] s_3;\n }\n\n function test () public pure returns (S_aeea6376 memory) {\n S_aeea6376 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n uint256[] memory r_1 = new uint256[](0);\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x7401E64eAcf2E89592f883BfDc29A07007655041;\n r.s_2 = r_2;\n }\n {\n S_0ce7a73b[] memory r_3 = new S_0ce7a73b[](4);\n {\n S_0ce7a73b memory r_3_0;\n {\n uint224[3][1] memory r_3_0_0;\n {\n uint224[3] memory r_3_0_0_0;\n {\n uint224 r_3_0_0_0_0 = 3665792924886486706395148864108103151715164442541023350299227423068;\n r_3_0_0_0[0] = r_3_0_0_0_0;\n }\n {\n uint224 r_3_0_0_0_1 = 1438304417306487162635914423297439381530222489498886127364350061494;\n r_3_0_0_0[1] = r_3_0_0_0_1;\n }\n {\n uint224 r_3_0_0_0_2 = 12255773174587558902021710215000274305151450508310768616354548800122;\n r_3_0_0_0[2] = r_3_0_0_0_2;\n }\n r_3_0_0[0] = r_3_0_0_0;\n }\n r_3_0.s_0 = r_3_0_0;\n }\n {\n bool r_3_0_1 = false;\n r_3_0.s_1 = r_3_0_1;\n }\n r_3[0] = r_3_0;\n }\n {\n S_0ce7a73b memory r_3_1;\n {\n uint224[3][1] memory r_3_1_0;\n {\n uint224[3] memory r_3_1_0_0;\n {\n uint224 r_3_1_0_0_0 = 7277201430181717106404435747192108841822452929345930680254618780182;\n r_3_1_0_0[0] = r_3_1_0_0_0;\n }\n {\n uint224 r_3_1_0_0_1 = 1243330844000495586956486211452132989160591235893043583972494226105;\n r_3_1_0_0[1] = r_3_1_0_0_1;\n }\n {\n uint224 r_3_1_0_0_2 = 12573446197010984063385595380850908472488399026082223500810707151614;\n r_3_1_0_0[2] = r_3_1_0_0_2;\n }\n r_3_1_0[0] = r_3_1_0_0;\n }\n r_3_1.s_0 = r_3_1_0;\n }\n {\n bool r_3_1_1 = false;\n r_3_1.s_1 = r_3_1_1;\n }\n r_3[1] = r_3_1;\n }\n {\n S_0ce7a73b memory r_3_2;\n {\n uint224[3][1] memory r_3_2_0;\n {\n uint224[3] memory r_3_2_0_0;\n {\n uint224 r_3_2_0_0_0 = 25861718082459565365078137080766635254659018946056216371384956302258;\n r_3_2_0_0[0] = r_3_2_0_0_0;\n }\n {\n uint224 r_3_2_0_0_1 = 20299967070612523552149757330951295432386331384727574354202934870662;\n r_3_2_0_0[1] = r_3_2_0_0_1;\n }\n {\n uint224 r_3_2_0_0_2 = 14854739284931674878547989318627917930882858402958036947429170250061;\n r_3_2_0_0[2] = r_3_2_0_0_2;\n }\n r_3_2_0[0] = r_3_2_0_0;\n }\n r_3_2.s_0 = r_3_2_0;\n }\n {\n bool r_3_2_1 = true;\n r_3_2.s_1 = r_3_2_1;\n }\n r_3[2] = r_3_2;\n }\n {\n S_0ce7a73b memory r_3_3;\n {\n uint224[3][1] memory r_3_3_0;\n {\n uint224[3] memory r_3_3_0_0;\n {\n uint224 r_3_3_0_0_0 = 16506184985993955909713661827778470551924320576671290986571772963307;\n r_3_3_0_0[0] = r_3_3_0_0_0;\n }\n {\n uint224 r_3_3_0_0_1 = 20258812640594799922528026732885190784399270915075222077547368418445;\n r_3_3_0_0[1] = r_3_3_0_0_1;\n }\n {\n uint224 r_3_3_0_0_2 = 4892045323356677764744713343335843887511078449125656665735866635586;\n r_3_3_0_0[2] = r_3_3_0_0_2;\n }\n r_3_3_0[0] = r_3_3_0_0;\n }\n r_3_3.s_0 = r_3_3_0;\n }\n {\n bool r_3_3_1 = true;\n r_3_3.s_1 = r_3_3_1;\n }\n r_3[3] = r_3_3;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000007401e64eacf2e89592f883bfdc29a0700765504100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000022cf0c89a6feac9272d00962f773ba34d78cfea50e82398d2d6d815c000000000da853094bb3418c26728e40a28cc3f2ba5d2eaac43f4797a7feabb6000000007460225ee934412a47765afde6ae244c4a7974ce74769e9f2007da7a0000000000000000000000000000000000000000000000000000000000000000000000004519e591691004a83b152b51c6594a6c80afe9243c317951a469c216000000000bce5eaf0b3ae5849248b50c0a8dd28fa5b8a89be9257a3f921f32b90000000077645ac726d7baaeef1db4574ae8f3f8216c895a28fcb368067e2afe000000000000000000000000000000000000000000000000000000000000000000000000f5925aac83f29e1e5eeb8f10d9afa1ac015d3c6a4edff4b6270133b200000000c0c27c85a5114f9d6c79a9c5fa5238348c52fbec4fad7570092b8286000000008d0ddef3ae3c95a9c77b21f75e3393b9ba9c58b32951a1c52086814d0000000000000000000000000000000000000000000000000000000000000001000000009cbc50227bfa7004d528d66b47d4b9cae61f249015460f61d40ba9eb00000000c05e720eb01d2cf6c10f25f6bf50d4974d37cf23a0de2be471a80c8d000000002e73e7475a70fc5a1bd21ae84b82edfe31dbbf2b0f5a89c20af455420000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bool[],(uint232,bytes25,(bytes1,address,bool,bytes17,bytes31)))", + "type": "(bool[],(uint232,bytes25,(bytes1,address,bool,bytes17,bytes31)))", + "value": [ + [true, true], + [ + "5408742522785646425148029581182813623326896630270817566656441118176318", + "0xc4da06f301fba722c6e9abe4726d30ea4866cbfb4e64edd86b", + [ + "0x79", + "0x46dFE3D2d90209e4b99c4718acc6c2a19c2401Ee", + true, + "0x2c3b90c302aa3f286344677a27f59ff416", + "0xf1ec232c481b20aa3bd262def1fc4d623498ff451ba7f5db2ad4bdb64828b5" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "5408742522785646425148029581182813623326896630270817566656441118176318" + }, + { + "type": "hexstring", + "value": "0xc4da06f301fba722c6e9abe4726d30ea4866cbfb4e64edd86b" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x79" + }, + { + "type": "address", + "value": "0x46dFE3D2d90209e4b99c4718acc6c2a19c2401Ee" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x2c3b90c302aa3f286344677a27f59ff416" + }, + { + "type": "hexstring", + "value": "0xf1ec232c481b20aa3bd262def1fc4d623498ff451ba7f5db2ad4bdb64828b5" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061036f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061023d565b60405180910390f35b6100566101d6565b61005e6101d6565b604080516002808252606082018352600092602083019080368337019050509050600060019050808260008151811061009957610099610323565b6020026020010190151590811515815250505060006001905080826001815181106100c6576100c6610323565b911515602092830291909101909101525081526100e16101f5565b7cc89f14bf54cb6ff35e8c46c30472d799dded20c6fa8db8697ba36d343e81527fc4da06f301fba722c6e9abe4726d30ea4866cbfb4e64edd86b0000000000000060208201526101586040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b607960f81b81527346dfe3d2d90209e4b99c4718acc6c2a19c2401ee602080830191909152600160408084019190915270161dc86181551f9431a233bd13facffa0b60791b60608401527ff1ec232c481b20aa3bd262def1fc4d623498ff451ba7f5db2ad4bdb64828b5006080840152830191909152820152919050565b6040518060400160405280606081526020016101f06101f5565b905290565b60408051606081018252600080825260208201529081016101f06040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60208082528251610100838301819052815161012085018190526000939283019184916101408701905b8084101561028957845115158252938501936001939093019290850190610267565b509684015180516001600160e81b03166040888101919091528186015166ffffffffffffff19166060808a01919091529181015180516001600160f81b0319166080808b0191909152968101516001600160a01b031660a08a015290810151151560c0890152908101516effffffffffffffffffffffffffffff191660e0880152939093015160ff19169290940191909152509192915050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212201a6f07ffb86a3718bb8716f17d8603217b2f1fa95d37143f5ca9c3b1d5b8903e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_36a5bb9e {\n bytes1 s_0;\n address s_1;\n bool s_2;\n bytes17 s_3;\n bytes31 s_4;\n }\n\n struct S_82e02bee {\n uint232 s_0;\n bytes25 s_1;\n S_36a5bb9e s_2;\n }\n\n struct S_4e2c7ac7 {\n bool[] s_0;\n S_82e02bee s_1;\n }\n\n function test () public pure returns (S_4e2c7ac7 memory) {\n S_4e2c7ac7 memory r;\n {\n bool[] memory r_0 = new bool[](2);\n {\n bool r_0_0 = true;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n S_82e02bee memory r_1;\n {\n uint232 r_1_0 = 5408742522785646425148029581182813623326896630270817566656441118176318;\n r_1.s_0 = r_1_0;\n }\n {\n bytes25 r_1_1 = bytes25(0xc4da06f301fba722c6e9abe4726d30ea4866cbfb4e64edd86b);\n r_1.s_1 = r_1_1;\n }\n {\n S_36a5bb9e memory r_1_2;\n {\n bytes1 r_1_2_0 = bytes1(0x79);\n r_1_2.s_0 = r_1_2_0;\n }\n {\n address r_1_2_1 = 0x46dFE3D2d90209e4b99c4718acc6c2a19c2401Ee;\n r_1_2.s_1 = r_1_2_1;\n }\n {\n bool r_1_2_2 = true;\n r_1_2.s_2 = r_1_2_2;\n }\n {\n bytes17 r_1_2_3 = bytes17(0x2c3b90c302aa3f286344677a27f59ff416);\n r_1_2.s_3 = r_1_2_3;\n }\n {\n bytes31 r_1_2_4 = bytes31(0xf1ec232c481b20aa3bd262def1fc4d623498ff451ba7f5db2ad4bdb64828b5);\n r_1_2.s_4 = r_1_2_4;\n }\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000100000000c89f14bf54cb6ff35e8c46c30472d799dded20c6fa8db8697ba36d343ec4da06f301fba722c6e9abe4726d30ea4866cbfb4e64edd86b00000000000000790000000000000000000000000000000000000000000000000000000000000000000000000000000000000046dfe3d2d90209e4b99c4718acc6c2a19c2401ee00000000000000000000000000000000000000000000000000000000000000012c3b90c302aa3f286344677a27f59ff416000000000000000000000000000000f1ec232c481b20aa3bd262def1fc4d623498ff451ba7f5db2ad4bdb64828b500000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bytes27,(int144[1]),string,string,(string,string[4][3]))", + "type": "(bytes27,(int144[1]),string,string,(string,string[4][3]))", + "value": [ + "0xffc0f85e56f23c72c4afe36ea3f937f572519d278322ca8823f727", + [["-4949272209416967456395171097689467361093336"]], + "Moo é🚀M🚀o🚀🚀oéo🚀o🚀MéoM M🚀o éMooo éoooééo oMM M🚀éMo oo🚀", + "Moo é🚀oMo🚀o 🚀M🚀 MéoMo oéé oo🚀ééo🚀é🚀oMo🚀🚀M ooMo", + [ + "Moo é🚀 ééo oo🚀oM ooMéMoéMo Mo🚀🚀oMoo oMMé ", + [ + [ + "Moo é🚀", + "Moo é🚀 é oMo é🚀éo🚀oéMéé 🚀🚀oo oé 🚀oM M🚀M🚀é 🚀éé ", + "Moo é🚀🚀éooM o🚀o🚀é", + "Moo é🚀 M🚀ooéo🚀🚀éo 🚀🚀🚀Mo ooMoéMMooM🚀ooé 🚀é🚀o" + ], + [ + "Moo é🚀oé🚀Méo 🚀🚀o ooooMoo", + "Moo é🚀oMo🚀🚀o 🚀", + "Moo é🚀Moooo🚀 M Mo ooMMo 🚀o", + "Moo é🚀" + ], + [ + "Moo é🚀🚀MoooMoé éMM 🚀M o o🚀éooooé o oooé", + "Moo é🚀oooMMMéoo ooéo o oo", + "Moo é🚀🚀🚀é oo🚀M 🚀 éMéééo🚀o", + "Moo é🚀o o🚀oMooooé🚀 🚀oé oMoMMé oéo oo " + ] + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xffc0f85e56f23c72c4afe36ea3f937f572519d278322ca8823f727" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-4949272209416967456395171097689467361093336" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M🚀o🚀🚀oéo🚀o🚀MéoM M🚀o éMooo éoooééo oMM M🚀éMo oo🚀" + }, + { + "type": "string", + "value": "Moo é🚀oMo🚀o 🚀M🚀 MéoMo oéé oo🚀ééo🚀é🚀oMo🚀🚀M ooMo" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 ééo oo🚀oM ooMéMoéMo Mo🚀🚀oMoo oMMé " + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀 é oMo é🚀éo🚀oéMéé 🚀🚀oo oé 🚀oM M🚀M🚀é 🚀éé " + }, + { + "type": "string", + "value": "Moo é🚀🚀éooM o🚀o🚀é" + }, + { + "type": "string", + "value": "Moo é🚀 M🚀ooéo🚀🚀éo 🚀🚀🚀Mo ooMoéMMooM🚀ooé 🚀é🚀o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oé🚀Méo 🚀🚀o ooooMoo" + }, + { + "type": "string", + "value": "Moo é🚀oMo🚀🚀o 🚀" + }, + { + "type": "string", + "value": "Moo é🚀Moooo🚀 M Mo ooMMo 🚀o" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀MoooMoé éMM 🚀M o o🚀éooooé o oooé" + }, + { + "type": "string", + "value": "Moo é🚀oooMMMéoo ooéo o oo" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀é oo🚀M 🚀 éMéééo🚀o" + }, + { + "type": "string", + "value": "Moo é🚀o o🚀oMooooé🚀 🚀oé oMoMMé oéo oo " + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610849806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906104f3565b60405180910390f35b610056610340565b61005e610340565b7fffc0f85e56f23c72c4afe36ea3f937f572519d278322ca8823f7270000000000815261008961037b565b61009161038a565b7138d09a931a9ddb5e0b69ffddd1060106e6d719815281526020828101919091526040805160808101909152605b8082526000926107b99083013960408084019190915280516080810190915260508082526000925061066e60208301396060830152506100fd6103a8565b60006040518060600160405280603c81526020016106be603c91398252506101236103be565b61012b6103eb565b604080518082018252600a8152689adede418753e13f3560b71b60208083019190915290835281516080810190925260588083526000929161072b908301396020838101919091526040805180820182528281527f4d6f6f20c3a9f09f9a80f09f9a80c3a96f6f4d206ff09f9a806ff09f9a80c3a98184015281850152805160808101909152604f8082526000935090916105fa9083013960608301525081526101d36103eb565b600060405180606001604052806027815260200161059a6027913982525060408051808201909152601c81527f4d6f6f20c3a9f09f9a806f4d6ff09f9a80f09f9a806f2020f09f9a80000000006020820152808260016020020181905250506000604051806060016040528060258152602001610649602591396040808401919091528051808201909152600a8152689adede418753e13f3560b71b6020820152905080826003602002015250808260016020020152506102926103eb565b60006040518060600160405280603981526020016105c16039913982525060408051808201825260208082527f4d6f6f20c3a9f09f9a806f6f6f4d4d4dc3a96f6f20206f6fc3a96f206f206f6f81830152808401919091528151606081019092526031808352600092916106fa908301396040808401919091528051606081019091526036808252600092506107836020830139606083015250604082015260208201526080820152919050565b6040805160a08101909152600081526020810161035b61037b565b815260200160608152602001606081526020016103766103a8565b905290565b60405180602001604052806103765b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280606081526020016103765b60405180606001604052806003905b6103d56103eb565b8152602001906001900390816103cd5790505090565b60405180608001604052806004905b60608152602001906001900390816103fa5790505090565b6000815180845260005b818110156104385760208185018101518683018201520161041c565b8181111561044a576000602083870101525b50601f01601f19169290920160200192915050565b60008151604084526104746040850182610412565b602084810151868303878301529192509082606081016000805b60038110156104e557868303845284518360808101845b60048110156104d05786820383526104be828551610412565b938a0193928a019291506001016104a5565b5096880196958801959450505060010161048e565b509098975050505050505050565b6020808252825164ffffffffff19168282015282810151516000919082604085015b600182101561053757825160110b815291830191600191909101908301610515565b50505050604083015160a0606084015261055460c0840182610412565b90506060840151601f19808584030160808601526105728383610412565b925060808601519150808584030160a086015250610590828261045f565b9594505050505056fe4d6f6f20c3a9f09f9a806fc3a9f09f9a804dc3a96f20f09f9a80f09f9a806f206f6f6f6f4d6f6f4d6f6f20c3a9f09f9a80f09f9a804d6f6f6f4d6fc3a920c3a94d4d20f09f9a804d206f206ff09f9a80c3a96f6f6f6fc3a9206f206f6f6fc3a94d6f6f20c3a9f09f9a80204df09f9a806f6fc3a96ff09f9a80f09f9a80c3a96f20f09f9a80f09f9a80f09f9a804d6f206f6f4d6fc3a94d4d6f6f4df09f9a806f6fc3a920f09f9a80c3a9f09f9a806f4d6f6f20c3a9f09f9a804d6f6f6f6ff09f9a8020204d204d6f206f6f4d4d6f20f09f9a806f4d6f6f20c3a9f09f9a806f4d6ff09f9a806f20f09f9a804df09f9a80204dc3a96f4d6f206fc3a9c3a9206f6ff09f9a80c3a9c3a96ff09f9a80c3a9f09f9a806f4d6ff09f9a80f09f9a804d206f6f4d6f4d6f6f20c3a9f09f9a8020c3a9c3a96f20206f6ff09f9a806f4d206f6f4dc3a94d6fc3a94d6f204d6ff09f9a80f09f9a806f4d6f6f206f4d4dc3a9204d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a9206f6ff09f9a804d20f09f9a8020c3a94dc3a9c3a9c3a96ff09f9a806f4d6f6f20c3a9f09f9a802020c3a9206f4d6f2020c3a9f09f9a80c3a96ff09f9a806fc3a94dc3a9c3a920f09f9a80f09f9a806f6f206fc3a92020f09f9a806f4d204df09f9a804df09f9a80c3a920f09f9a80c3a9c3a920204d6f6f20c3a9f09f9a806f206ff09f9a806f4d6f6f6f6fc3a9f09f9a8020f09f9a806fc3a9206f4d6f4d4dc3a9206fc3a96f206f6f204d6f6f20c3a9f09f9a804df09f9a806ff09f9a80f09f9a806fc3a96ff09f9a806ff09f9a804dc3a96f4d204df09f9a806f20c3a94d6f6f6f20c3a96f6f6fc3a9c3a96f206f4d4d2020204df09f9a80c3a94d6f20206f6ff09f9a80a26469706673582212200cc00ab0be3a34e5e8616c6866b36f8dd30dc89eb1d0778ff5b491131f61150964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f7cfb985 {\n int144[1] s_0;\n }\n\n struct S_90151b34 {\n string s_0;\n string[4][3] s_1;\n }\n\n struct S_7584be9d {\n bytes27 s_0;\n S_f7cfb985 s_1;\n string s_2;\n string s_3;\n S_90151b34 s_4;\n }\n\n function test () public pure returns (S_7584be9d memory) {\n S_7584be9d memory r;\n {\n bytes27 r_0 = bytes27(0xffc0f85e56f23c72c4afe36ea3f937f572519d278322ca8823f727);\n r.s_0 = r_0;\n }\n {\n S_f7cfb985 memory r_1;\n {\n int144[1] memory r_1_0;\n {\n int144 r_1_0_0 = -4949272209416967456395171097689467361093336;\n r_1_0[0] = r_1_0_0;\n }\n r_1.s_0 = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀M🚀o🚀🚀oéo🚀o🚀MéoM M🚀o éMooo éoooééo oMM M🚀éMo oo🚀\";\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀oMo🚀o 🚀M🚀 MéoMo oéé oo🚀ééo🚀é🚀oMo🚀🚀M ooMo\";\n r.s_3 = r_3;\n }\n {\n S_90151b34 memory r_4;\n {\n string memory r_4_0 = unicode\"Moo é🚀 ééo oo🚀oM ooMéMoéMo Mo🚀🚀oMoo oMMé \";\n r_4.s_0 = r_4_0;\n }\n {\n string[4][3] memory r_4_1;\n {\n string[4] memory r_4_1_0;\n {\n string memory r_4_1_0_0 = unicode\"Moo é🚀\";\n r_4_1_0[0] = r_4_1_0_0;\n }\n {\n string memory r_4_1_0_1 = unicode\"Moo é🚀 é oMo é🚀éo🚀oéMéé 🚀🚀oo oé 🚀oM M🚀M🚀é 🚀éé \";\n r_4_1_0[1] = r_4_1_0_1;\n }\n {\n string memory r_4_1_0_2 = unicode\"Moo é🚀🚀éooM o🚀o🚀é\";\n r_4_1_0[2] = r_4_1_0_2;\n }\n {\n string memory r_4_1_0_3 = unicode\"Moo é🚀 M🚀ooéo🚀🚀éo 🚀🚀🚀Mo ooMoéMMooM🚀ooé 🚀é🚀o\";\n r_4_1_0[3] = r_4_1_0_3;\n }\n r_4_1[0] = r_4_1_0;\n }\n {\n string[4] memory r_4_1_1;\n {\n string memory r_4_1_1_0 = unicode\"Moo é🚀oé🚀Méo 🚀🚀o ooooMoo\";\n r_4_1_1[0] = r_4_1_1_0;\n }\n {\n string memory r_4_1_1_1 = unicode\"Moo é🚀oMo🚀🚀o 🚀\";\n r_4_1_1[1] = r_4_1_1_1;\n }\n {\n string memory r_4_1_1_2 = unicode\"Moo é🚀Moooo🚀 M Mo ooMMo 🚀o\";\n r_4_1_1[2] = r_4_1_1_2;\n }\n {\n string memory r_4_1_1_3 = unicode\"Moo é🚀\";\n r_4_1_1[3] = r_4_1_1_3;\n }\n r_4_1[1] = r_4_1_1;\n }\n {\n string[4] memory r_4_1_2;\n {\n string memory r_4_1_2_0 = unicode\"Moo é🚀🚀MoooMoé éMM 🚀M o o🚀éooooé o oooé\";\n r_4_1_2[0] = r_4_1_2_0;\n }\n {\n string memory r_4_1_2_1 = unicode\"Moo é🚀oooMMMéoo ooéo o oo\";\n r_4_1_2[1] = r_4_1_2_1;\n }\n {\n string memory r_4_1_2_2 = unicode\"Moo é🚀🚀🚀é oo🚀M 🚀 éMéééo🚀o\";\n r_4_1_2[2] = r_4_1_2_2;\n }\n {\n string memory r_4_1_2_3 = unicode\"Moo é🚀o o🚀oMooooé🚀 🚀oé oMoMMé oéo oo \";\n r_4_1_2[3] = r_4_1_2_3;\n }\n r_4_1[2] = r_4_1_2;\n }\n r_4.s_1 = r_4_1;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020ffc0f85e56f23c72c4afe36ea3f937f572519d278322ca8823f7270000000000ffffffffffffffffffffffffffffc72f656ce56224a1f49600222ef9fef9192800000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a804df09f9a806ff09f9a80f09f9a806fc3a96ff09f9a806ff09f9a804dc3a96f4d204df09f9a806f20c3a94d6f6f6f20c3a96f6f6fc3a9c3a96f206f4d4d2020204df09f9a80c3a94d6f20206f6ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a806f4d6ff09f9a806f20f09f9a804df09f9a80204dc3a96f4d6f206fc3a9c3a9206f6ff09f9a80c3a9c3a96ff09f9a80c3a9f09f9a806f4d6ff09f9a80f09f9a804d206f6f4d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a8020c3a9c3a96f20206f6ff09f9a806f4d206f6f4dc3a94d6fc3a94d6f204d6ff09f9a80f09f9a806f4d6f6f206f4d4dc3a92000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a802020c3a9206f4d6f2020c3a9f09f9a80c3a96ff09f9a806fc3a94dc3a9c3a920f09f9a80f09f9a806f6f206fc3a92020f09f9a806f4d204df09f9a804df09f9a80c3a920f09f9a80c3a9c3a92020000000000000000000000000000000000000000000000000000000000000000000000000000000204d6f6f20c3a9f09f9a80f09f9a80c3a96f6f4d206ff09f9a806ff09f9a80c3a9000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a80204df09f9a806f6fc3a96ff09f9a80f09f9a80c3a96f20f09f9a80f09f9a80f09f9a804d6f206f6f4d6fc3a94d4d6f6f4df09f9a806f6fc3a920f09f9a80c3a9f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a806fc3a9f09f9a804dc3a96f20f09f9a80f09f9a806f206f6f6f6f4d6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a806f4d6ff09f9a80f09f9a806f2020f09f9a800000000000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a804d6f6f6f6ff09f9a8020204d204d6f206f6f4d4d6f20f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a80f09f9a804d6f6f6f4d6fc3a920c3a94d4d20f09f9a804d206f206ff09f9a80c3a96f6f6f6fc3a9206f206f6f6fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000204d6f6f20c3a9f09f9a806f6f6f4d4d4dc3a96f6f20206f6fc3a96f206f206f6f00000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a9206f6ff09f9a804d20f09f9a8020c3a94dc3a9c3a9c3a96ff09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a806f206ff09f9a806f4d6f6f6f6fc3a9f09f9a8020f09f9a806fc3a9206f4d6f4d4dc3a9206fc3a96f206f6f2000000000000000000000" + }, + { + "name": "random-(int168[2],bytes25,(bytes14,bytes9[1][4],int32),address)", + "type": "(int168[2],bytes25,(bytes14,bytes9[1][4],int32),address)", + "value": [ + [ + "122789717904430100999888653513187995910898682291032", + "108211756095258806527231799689414910649894850737403" + ], + "0xace62f296950dad94885a5579cd99a2da66c33676cb8ed218d", + [ + "0x52b5e456dea0b94849c1a1981e91", + [ + ["0x103accbe336a16299e"], + ["0x239a3e769335990049"], + ["0x968aaefefe90b83dd1"], + ["0xaec0dfbcfe3c00af6a"] + ], + "-828411452" + ], + "0x4e31EC2DCe4BA9cDb81b1215BAb51F19Df5Cd618" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "122789717904430100999888653513187995910898682291032" + }, + { + "type": "number", + "value": "108211756095258806527231799689414910649894850737403" + } + ] + }, + { + "type": "hexstring", + "value": "0xace62f296950dad94885a5579cd99a2da66c33676cb8ed218d" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x52b5e456dea0b94849c1a1981e91" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x103accbe336a16299e" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x239a3e769335990049" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x968aaefefe90b83dd1" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xaec0dfbcfe3c00af6a" + } + ] + } + ] + }, + { + "type": "number", + "value": "-828411452" + } + ] + }, + { + "type": "address", + "value": "0x4e31EC2DCe4BA9cDb81b1215BAb51F19Df5Cd618" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061036f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610249565b60405180910390f35b610056610195565b61005e610195565b6100666101c9565b74540421615b4cb84b0118a4e00c4881bdbe2191e3588152744a0a9ef6e457045c3adc2fc7c0d223be4aa0ab34fb6020808301919091529082527face62f296950dad94885a5579cd99a2da66c33676cb8ed218d00000000000000908201526100cd6101e7565b6d52b5e456dea0b94849c1a1981e9160901b81526100e96101fe565b6100f161022b565b68081d665f19b50b14cf60b91b8152815261010a61022b565b68239a3e76933599004960b81b8152602082015261012661022b565b68968aaefefe90b83dd160b81b8152604082015261014261022b565b6857606fde7f1e0057b560b91b815260608083019190915260208301919091526331608e3b19604080840191909152830191909152734e31ec2dce4ba9cdb81b1215bab51f19df5cd61890820152919050565b60405180608001604052806101a86101c9565b8152600060208201526040016101bc6101e7565b8152600060209091015290565b60405180604001604052806002906020820280368337509192915050565b604080516060810190915260008152602081016101bc5b60405180608001604052806004905b61021561022b565b81526020019060019003908161020d5790505090565b60405180602001604052806001906020820280368337509192915050565b81516101408201908260005b600281101561027757825160140b825260209283019290910190600101610255565b505050602066ffffffffffffff1981850151166040840152604084015171ffffffffffffffffffffffffffffffffffff198151166060850152818101516080850160005b60048110156103045782518260005b60018110156102f15782516001600160b81b031916825291870191908701906001016102ca565b50505091840191908401906001016102bb565b50505060400151905061031d61010084018260030b9052565b50606092909201516001600160a01b031661012091909101529056fea2646970667358221220973048377a8e9faf7663895401306612b7bcf544c5550f95c9a9f4f8759b835a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fbdd8160 {\n bytes14 s_0;\n bytes9[1][4] s_1;\n int32 s_2;\n }\n\n struct S_e55ee111 {\n int168[2] s_0;\n bytes25 s_1;\n S_fbdd8160 s_2;\n address s_3;\n }\n\n function test () public pure returns (S_e55ee111 memory) {\n S_e55ee111 memory r;\n {\n int168[2] memory r_0;\n {\n int168 r_0_0 = 122789717904430100999888653513187995910898682291032;\n r_0[0] = r_0_0;\n }\n {\n int168 r_0_1 = 108211756095258806527231799689414910649894850737403;\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n bytes25 r_1 = bytes25(0xace62f296950dad94885a5579cd99a2da66c33676cb8ed218d);\n r.s_1 = r_1;\n }\n {\n S_fbdd8160 memory r_2;\n {\n bytes14 r_2_0 = bytes14(0x52b5e456dea0b94849c1a1981e91);\n r_2.s_0 = r_2_0;\n }\n {\n bytes9[1][4] memory r_2_1;\n {\n bytes9[1] memory r_2_1_0;\n {\n bytes9 r_2_1_0_0 = bytes9(0x103accbe336a16299e);\n r_2_1_0[0] = r_2_1_0_0;\n }\n r_2_1[0] = r_2_1_0;\n }\n {\n bytes9[1] memory r_2_1_1;\n {\n bytes9 r_2_1_1_0 = bytes9(0x239a3e769335990049);\n r_2_1_1[0] = r_2_1_1_0;\n }\n r_2_1[1] = r_2_1_1;\n }\n {\n bytes9[1] memory r_2_1_2;\n {\n bytes9 r_2_1_2_0 = bytes9(0x968aaefefe90b83dd1);\n r_2_1_2[0] = r_2_1_2_0;\n }\n r_2_1[2] = r_2_1_2;\n }\n {\n bytes9[1] memory r_2_1_3;\n {\n bytes9 r_2_1_3_0 = bytes9(0xaec0dfbcfe3c00af6a);\n r_2_1_3[0] = r_2_1_3_0;\n }\n r_2_1[3] = r_2_1_3;\n }\n r_2.s_1 = r_2_1;\n }\n {\n int32 r_2_2 = -828411452;\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x4e31EC2DCe4BA9cDb81b1215BAb51F19Df5Cd618;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000540421615b4cb84b0118a4e00c4881bdbe2191e35800000000000000000000004a0a9ef6e457045c3adc2fc7c0d223be4aa0ab34fbace62f296950dad94885a5579cd99a2da66c33676cb8ed218d0000000000000052b5e456dea0b94849c1a1981e91000000000000000000000000000000000000103accbe336a16299e0000000000000000000000000000000000000000000000239a3e7693359900490000000000000000000000000000000000000000000000968aaefefe90b83dd10000000000000000000000000000000000000000000000aec0dfbcfe3c00af6a0000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffce9f71c40000000000000000000000004e31ec2dce4ba9cdb81b1215bab51f19df5cd618" + }, + { + "name": "random-(int32,bytes28,(string,(bytes15,address),bytes6,address),string)[3]", + "type": "(int32,bytes28,(string,(bytes15,address),bytes6,address),string)[3]", + "value": [ + [ + "-2010042003", + "0xc87fc24ad5a7f97424d40650b9780ddb600e49ff7f78585edd113cf3", + [ + "Moo é🚀é ooéMo", + [ + "0xc7227df689098afdc9e67887d5a52a", + "0x82310000c35B66Ea991db17802bE3691ca091B79" + ], + "0x11f9604788e5", + "0x4DB2f5675125acA5F77FBB060760a3ea86D037Cb" + ], + "Moo é🚀 Moéé🚀 🚀M🚀M🚀oooM🚀éoooooé🚀o🚀éoMéé🚀M o" + ], + [ + "-1478746324", + "0xaa860beee206d250bb5f5cb99682f780d8d8a9676d1bc4acc31b7839", + [ + "Moo é🚀oé🚀ooéMo🚀o Mo🚀Mooo🚀 Mo o🚀 éoooooMMé oéMé🚀MéMéo", + [ + "0x71a59a84c1aef905a6bb4c2047538a", + "0x9d0a33c5A3c3D8B29F61cDdF13D6dD2A1C3EC721" + ], + "0x39c0620b1d63", + "0xBF457B37d1d458E0bB431797A439c26E2A2173F1" + ], + "Moo é🚀" + ], + [ + "801126499", + "0x1b4d9d1d75298d9fbac6e3649679a10c795208b2c7f1172710965bb9", + [ + "Moo é🚀oo🚀🚀M🚀🚀Mo Moo ooo🚀éo🚀é é🚀éMéooM ", + [ + "0x63cd10a65630a1c903d378ed55b355", + "0x58ED2526c933295508D1482518B4dd23053B056f" + ], + "0x4ffdbc59d4d7", + "0xC1a5A315B347B7dF840Ad7A1e8e416D43a285278" + ], + "Moo é🚀ooo oéoéé🚀ééoM 🚀 ooMM🚀🚀oMé🚀🚀o🚀M 🚀éoooéoooM oéoéé o🚀 é" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-2010042003" + }, + { + "type": "hexstring", + "value": "0xc87fc24ad5a7f97424d40650b9780ddb600e49ff7f78585edd113cf3" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é ooéMo" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc7227df689098afdc9e67887d5a52a" + }, + { + "type": "address", + "value": "0x82310000c35B66Ea991db17802bE3691ca091B79" + } + ] + }, + { + "type": "hexstring", + "value": "0x11f9604788e5" + }, + { + "type": "address", + "value": "0x4DB2f5675125acA5F77FBB060760a3ea86D037Cb" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 Moéé🚀 🚀M🚀M🚀oooM🚀éoooooé🚀o🚀éoMéé🚀M o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-1478746324" + }, + { + "type": "hexstring", + "value": "0xaa860beee206d250bb5f5cb99682f780d8d8a9676d1bc4acc31b7839" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oé🚀ooéMo🚀o Mo🚀Mooo🚀 Mo o🚀 éoooooMMé oéMé🚀MéMéo" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x71a59a84c1aef905a6bb4c2047538a" + }, + { + "type": "address", + "value": "0x9d0a33c5A3c3D8B29F61cDdF13D6dD2A1C3EC721" + } + ] + }, + { + "type": "hexstring", + "value": "0x39c0620b1d63" + }, + { + "type": "address", + "value": "0xBF457B37d1d458E0bB431797A439c26E2A2173F1" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "801126499" + }, + { + "type": "hexstring", + "value": "0x1b4d9d1d75298d9fbac6e3649679a10c795208b2c7f1172710965bb9" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀🚀M🚀🚀Mo Moo ooo🚀éo🚀é é🚀éMéooM " + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x63cd10a65630a1c903d378ed55b355" + }, + { + "type": "address", + "value": "0x58ED2526c933295508D1482518B4dd23053B056f" + } + ] + }, + { + "type": "hexstring", + "value": "0x4ffdbc59d4d7" + }, + { + "type": "address", + "value": "0xC1a5A315B347B7dF840Ad7A1e8e416D43a285278" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooo oéoéé🚀ééoM 🚀 ooMM🚀🚀oMé🚀🚀o🚀M 🚀éoooéoooM oéoéé o🚀 é" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506106bc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610442565b60405180910390f35b61005661035c565b61005e61035c565b610066610389565b6377cece921981527fc87fc24ad5a7f97424d40650b9780ddb600e49ff7f78585edd113cf300000000602082015261009c6103b5565b6040805180820190915260138152724d6f6f20c3a9f09f9a80c3a9206f6fc3a94d6f60681b602082015281526100e2604080518082019091526000808252602082015290565b6e63913efb4484c57ee4f33c43ead29560891b81527382310000c35b66ea991db17802be3691ca091b79602080830191909152828101919091526511f9604788e560d01b604080840191909152734db2f5675125aca5f77fbb060760a3ea86d037cb60608401528381019290925281516080810190925260508083526000929161057f908301396060830152508152610179610389565b635823e0d31981527faa860beee206d250bb5f5cb99682f780d8d8a9676d1bc4acc31b78390000000060208201526101af6103b5565b6000604051806080016040528060528152602001610635605291398252506040805180820182526e38d2cd4260d77c82d35da61023a9c560891b8152739d0a33c5a3c3d8b29f61cddf13d6dd2a1c3ec721602080830191909152808401919091526539c0620b1d6360d01b8284015273bf457b37d1d458e0bb431797a439c26e2a2173f1606080850191909152848301939093528151808301909252600a8252689adede418753e13f3560b71b828201529183015282015261026f610389565b632fc0386381527f1b4d9d1d75298d9fbac6e3649679a10c795208b2c7f1172710965bb90000000060208201526102a46103b5565b600060405180608001604052806044815260200161053b604491398252506040805180820182526e63cd10a65630a1c903d378ed55b35560881b81527358ed2526c933295508d1482518b4dd23053b056f60208083019190915280840191909152654ffdbc59d4d760d01b8284015273c1a5a315b347b7df840ad7a1e8e416d43a285278606084015283820192909252805160a0810190915260668082526000926105cf908301396060830152506040820152919050565b60405180606001604052806003905b610373610389565b81526020019060019003908161036b5790505090565b60408051608081018252600080825260208201529081016103a86103b5565b8152602001606081525090565b6040518060800160405280606081526020016103e1604080518082019091526000808252602082015290565b815260006020820181905260409091015290565b6000815180845260005b8181101561041b576020818501810151868301820152016103ff565b8181111561042d576000602083870101525b50601f01601f19169290920160200192915050565b6020808252600090608083820181850186855b6003808210610464575061052d565b601f1989850301855282518051820b855263ffffffff1988820151168886015260409150818101518783870152805160a0808a8901526104a86101208901836103f5565b838c0151805170ffffffffffffffffffffffffffffffffff1916928a0192909252908b01516001600160a01b0390811660c08a0152948301516001600160d01b03191660e0890152606080840151909516610100890152928401518784038589015292905061051781846103f5565b978a019796505050928701925050600101610455565b509097965050505050505056fe4d6f6f20c3a9f09f9a806f6ff09f9a80f09f9a804df09f9a80f09f9a804d6f204d6f6f206f6f6ff09f9a80c3a96ff09f9a80c3a920c3a9f09f9a80c3a94dc3a96f6f4d204d6f6f20c3a9f09f9a8020204d6fc3a9c3a9f09f9a80202020f09f9a804df09f9a804df09f9a806f6f6f4df09f9a80c3a96f6f6f6f6fc3a9f09f9a806ff09f9a80c3a96f4dc3a9c3a9f09f9a804d206f4d6f6f20c3a9f09f9a806f6f6f206fc3a96fc3a9c3a9f09f9a80c3a9c3a96f4d20f09f9a80206f6f4d4df09f9a80f09f9a806f4dc3a9f09f9a80f09f9a806ff09f9a804d20f09f9a80c3a96f6f6fc3a96f6f6f4d206fc3a96fc3a9c3a9206ff09f9a8020c3a94d6f6f20c3a9f09f9a806fc3a9f09f9a806f6fc3a94d6ff09f9a806f204d6ff09f9a804d6f6f6ff09f9a80204d6f206ff09f9a8020c3a96f6f6f6f6f4d4dc3a9206fc3a94dc3a9f09f9a804dc3a94dc3a96fa2646970667358221220c9e3778f32742b5f96a46b87f839733715e990643c9dc3a3bb4a3b815970146b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_12087693 {\n bytes15 s_0;\n address s_1;\n }\n\n struct S_0dd26f89 {\n string s_0;\n S_12087693 s_1;\n bytes6 s_2;\n address s_3;\n }\n\n struct S_0efb18b9 {\n int32 s_0;\n bytes28 s_1;\n S_0dd26f89 s_2;\n string s_3;\n }\n\n function test () public pure returns (S_0efb18b9[3] memory) {\n S_0efb18b9[3] memory r;\n {\n S_0efb18b9 memory r_0;\n {\n int32 r_0_0 = -2010042003;\n r_0.s_0 = r_0_0;\n }\n {\n bytes28 r_0_1 = bytes28(0xc87fc24ad5a7f97424d40650b9780ddb600e49ff7f78585edd113cf3);\n r_0.s_1 = r_0_1;\n }\n {\n S_0dd26f89 memory r_0_2;\n {\n string memory r_0_2_0 = unicode\"Moo é🚀é ooéMo\";\n r_0_2.s_0 = r_0_2_0;\n }\n {\n S_12087693 memory r_0_2_1;\n {\n bytes15 r_0_2_1_0 = bytes15(0xc7227df689098afdc9e67887d5a52a);\n r_0_2_1.s_0 = r_0_2_1_0;\n }\n {\n address r_0_2_1_1 = 0x82310000c35B66Ea991db17802bE3691ca091B79;\n r_0_2_1.s_1 = r_0_2_1_1;\n }\n r_0_2.s_1 = r_0_2_1;\n }\n {\n bytes6 r_0_2_2 = bytes6(0x11f9604788e5);\n r_0_2.s_2 = r_0_2_2;\n }\n {\n address r_0_2_3 = 0x4DB2f5675125acA5F77FBB060760a3ea86D037Cb;\n r_0_2.s_3 = r_0_2_3;\n }\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀 Moéé🚀 🚀M🚀M🚀oooM🚀éoooooé🚀o🚀éoMéé🚀M o\";\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_0efb18b9 memory r_1;\n {\n int32 r_1_0 = -1478746324;\n r_1.s_0 = r_1_0;\n }\n {\n bytes28 r_1_1 = bytes28(0xaa860beee206d250bb5f5cb99682f780d8d8a9676d1bc4acc31b7839);\n r_1.s_1 = r_1_1;\n }\n {\n S_0dd26f89 memory r_1_2;\n {\n string memory r_1_2_0 = unicode\"Moo é🚀oé🚀ooéMo🚀o Mo🚀Mooo🚀 Mo o🚀 éoooooMMé oéMé🚀MéMéo\";\n r_1_2.s_0 = r_1_2_0;\n }\n {\n S_12087693 memory r_1_2_1;\n {\n bytes15 r_1_2_1_0 = bytes15(0x71a59a84c1aef905a6bb4c2047538a);\n r_1_2_1.s_0 = r_1_2_1_0;\n }\n {\n address r_1_2_1_1 = 0x9d0a33c5A3c3D8B29F61cDdF13D6dD2A1C3EC721;\n r_1_2_1.s_1 = r_1_2_1_1;\n }\n r_1_2.s_1 = r_1_2_1;\n }\n {\n bytes6 r_1_2_2 = bytes6(0x39c0620b1d63);\n r_1_2.s_2 = r_1_2_2;\n }\n {\n address r_1_2_3 = 0xBF457B37d1d458E0bB431797A439c26E2A2173F1;\n r_1_2.s_3 = r_1_2_3;\n }\n r_1.s_2 = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀\";\n r_1.s_3 = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_0efb18b9 memory r_2;\n {\n int32 r_2_0 = 801126499;\n r_2.s_0 = r_2_0;\n }\n {\n bytes28 r_2_1 = bytes28(0x1b4d9d1d75298d9fbac6e3649679a10c795208b2c7f1172710965bb9);\n r_2.s_1 = r_2_1;\n }\n {\n S_0dd26f89 memory r_2_2;\n {\n string memory r_2_2_0 = unicode\"Moo é🚀oo🚀🚀M🚀🚀Mo Moo ooo🚀éo🚀é é🚀éMéooM \";\n r_2_2.s_0 = r_2_2_0;\n }\n {\n S_12087693 memory r_2_2_1;\n {\n bytes15 r_2_2_1_0 = bytes15(0x63cd10a65630a1c903d378ed55b355);\n r_2_2_1.s_0 = r_2_2_1_0;\n }\n {\n address r_2_2_1_1 = 0x58ED2526c933295508D1482518B4dd23053B056f;\n r_2_2_1.s_1 = r_2_2_1_1;\n }\n r_2_2.s_1 = r_2_2_1;\n }\n {\n bytes6 r_2_2_2 = bytes6(0x4ffdbc59d4d7);\n r_2_2.s_2 = r_2_2_2;\n }\n {\n address r_2_2_3 = 0xC1a5A315B347B7dF840Ad7A1e8e416D43a285278;\n r_2_2.s_3 = r_2_2_3;\n }\n r_2.s_2 = r_2_2;\n }\n {\n string memory r_2_3 = unicode\"Moo é🚀ooo oéoéé🚀ééoM 🚀 ooMM🚀🚀oMé🚀🚀o🚀M 🚀éoooéoooM oéoéé o🚀 é\";\n r_2.s_3 = r_2_3;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000420ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8831316dc87fc24ad5a7f97424d40650b9780ddb600e49ff7f78585edd113cf3000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000a0c7227df689098afdc9e67887d5a52a000000000000000000000000000000000000000000000000000000000082310000c35b66ea991db17802be3691ca091b7911f9604788e500000000000000000000000000000000000000000000000000000000000000000000000000004db2f5675125aca5f77fbb060760a3ea86d037cb00000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a80c3a9206f6fc3a94d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a8020204d6fc3a9c3a9f09f9a80202020f09f9a804df09f9a804df09f9a806f6f6f4df09f9a80c3a96f6f6f6f6fc3a9f09f9a806ff09f9a80c3a96f4dc3a9c3a9f09f9a804d206f00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffa7dc1f2caa860beee206d250bb5f5cb99682f780d8d8a9676d1bc4acc31b783900000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000a071a59a84c1aef905a6bb4c2047538a00000000000000000000000000000000000000000000000000000000009d0a33c5a3c3d8b29f61cddf13d6dd2a1c3ec72139c0620b1d630000000000000000000000000000000000000000000000000000000000000000000000000000bf457b37d1d458e0bb431797a439c26e2a2173f100000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a806fc3a9f09f9a806f6fc3a94d6ff09f9a806f204d6ff09f9a804d6f6f6ff09f9a80204d6f206ff09f9a8020c3a96f6f6f6f6f4d4dc3a9206fc3a94dc3a9f09f9a804dc3a94dc3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fc038631b4d9d1d75298d9fbac6e3649679a10c795208b2c7f1172710965bb900000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000a063cd10a65630a1c903d378ed55b355000000000000000000000000000000000000000000000000000000000058ed2526c933295508d1482518b4dd23053b056f4ffdbc59d4d70000000000000000000000000000000000000000000000000000000000000000000000000000c1a5a315b347b7df840ad7a1e8e416d43a28527800000000000000000000000000000000000000000000000000000000000000444d6f6f20c3a9f09f9a806f6ff09f9a80f09f9a804df09f9a80f09f9a804d6f204d6f6f206f6f6ff09f9a80c3a96ff09f9a80c3a920c3a9f09f9a80c3a94dc3a96f6f4d200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000664d6f6f20c3a9f09f9a806f6f6f206fc3a96fc3a9c3a9f09f9a80c3a9c3a96f4d20f09f9a80206f6f4d4df09f9a80f09f9a806f4dc3a9f09f9a80f09f9a806ff09f9a804d20f09f9a80c3a96f6f6fc3a96f6f6f4d206fc3a96fc3a9c3a9206ff09f9a8020c3a90000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,address,bool,string,(uint104,bytes22,bool,int168)[2])", + "type": "(string,address,bool,string,(uint104,bytes22,bool,int168)[2])", + "value": [ + "Moo é🚀ooMoé Moo 🚀M ", + "0x71F8A49a217BF58D623750e9c129A63cfDb755E2", + false, + "Moo é🚀MM ooMMMooéé🚀éo🚀éoo 🚀é o ooéoMoMMéo", + [ + [ + "8436208439823765038737094695416", + "0x06bd9a60819c5ef4b2f9588a444f926e11829abd5c96", + false, + "-50165394041472913698663122351856971591263904890556" + ], + [ + "4353803811991138534791371279189", + "0xb7c860617d0b9b0a8406081fd1a715f2d2d2ac3a5182", + true, + "46794375638780681212702982372449992806074039544368" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooMoé Moo 🚀M " + }, + { + "type": "address", + "value": "0x71F8A49a217BF58D623750e9c129A63cfDb755E2" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀MM ooMMMooéé🚀éo🚀éoo 🚀é o ooéoMoMMéo" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "8436208439823765038737094695416" + }, + { + "type": "hexstring", + "value": "0x06bd9a60819c5ef4b2f9588a444f926e11829abd5c96" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-50165394041472913698663122351856971591263904890556" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "4353803811991138534791371279189" + }, + { + "type": "hexstring", + "value": "0xb7c860617d0b9b0a8406081fd1a715f2d2d2ac3a5182" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "46794375638780681212702982372449992806074039544368" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103c9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610282565b60405180910390f35b6100566101b0565b61005e6101b0565b604080518082018252601b81527f4d6f6f20c3a9f09f9a806f6f4d6fc3a9204d6f6f20f09f9a804d2000000000006020808301919091529083527371f8a49a217bf58d623750e9c129a63cfdb755e2838201526000838301819052825160608101909352603d808452909291610357908301396060830152506100df6101ef565b60408051608080820183526000828401526c6a7adc109bdfaaa8ad6acd59f8825275035ecd3040ce2f7a597cac452227c93708c14d5eae4b60511b602080840191909152742253161178504a26b9c69a88d2ee5842775dac7ebb19606080850191909152928552835180830185526c36f3e61aa8d2ba48fad0b3cb558152755be43030be85cd854203040fe8d38af96969561d28c160511b818301526001948101949094527420049c60061b5e28102ca521c33e6382601ade2a309284019290925290830191909152820152919050565b6040518060a001604052806060815260200160006001600160a01b03168152602001600015158152602001606081526020016101ea6101ef565b905290565b60405180604001604052806002905b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816101fe5790505090565b6000815180845260005b8181101561025b5760208185018101518683018201520161023f565b8181111561026d576000602083870101525b50601f01601f19169290920160200192915050565b600060208083528351610180828501526102a06101a0850182610235565b905081850151604060018060a01b038216818701528087015191506060821515818801528088015192506080601f1988860301818901526102e18585610235565b945080890151935060a0880160005b600281101561034757855180516cffffffffffffffffffffffffff1683528881015169ffffffffffffffffffff1916898401528581015115158684015284015160140b8483015294870194908201906001016102f0565b5094999850505050505050505056fe4d6f6f20c3a9f09f9a804d4d206f6f4d4d4d6f6fc3a9c3a9f09f9a80c3a96ff09f9a80c3a96f6f20f09f9a80c3a9206f206f6fc3a96f4d6f4d4dc3a96fa2646970667358221220c98429d8bb7a9daf230e7e2f3a6bc542e97071b5124497db956ffd2ed84a8cb764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_de46c5a9 {\n uint104 s_0;\n bytes22 s_1;\n bool s_2;\n int168 s_3;\n }\n\n struct S_20526d53 {\n string s_0;\n address s_1;\n bool s_2;\n string s_3;\n S_de46c5a9[2] s_4;\n }\n\n function test () public pure returns (S_20526d53 memory) {\n S_20526d53 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀ooMoé Moo 🚀M \";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x71F8A49a217BF58D623750e9c129A63cfDb755E2;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀MM ooMMMooéé🚀éo🚀éoo 🚀é o ooéoMoMMéo\";\n r.s_3 = r_3;\n }\n {\n S_de46c5a9[2] memory r_4;\n {\n S_de46c5a9 memory r_4_0;\n {\n uint104 r_4_0_0 = 8436208439823765038737094695416;\n r_4_0.s_0 = r_4_0_0;\n }\n {\n bytes22 r_4_0_1 = bytes22(0x06bd9a60819c5ef4b2f9588a444f926e11829abd5c96);\n r_4_0.s_1 = r_4_0_1;\n }\n {\n bool r_4_0_2 = false;\n r_4_0.s_2 = r_4_0_2;\n }\n {\n int168 r_4_0_3 = -50165394041472913698663122351856971591263904890556;\n r_4_0.s_3 = r_4_0_3;\n }\n r_4[0] = r_4_0;\n }\n {\n S_de46c5a9 memory r_4_1;\n {\n uint104 r_4_1_0 = 4353803811991138534791371279189;\n r_4_1.s_0 = r_4_1_0;\n }\n {\n bytes22 r_4_1_1 = bytes22(0xb7c860617d0b9b0a8406081fd1a715f2d2d2ac3a5182);\n r_4_1.s_1 = r_4_1_1;\n }\n {\n bool r_4_1_2 = true;\n r_4_1.s_2 = r_4_1_2;\n }\n {\n int168 r_4_1_3 = 46794375638780681212702982372449992806074039544368;\n r_4_1.s_3 = r_4_1_3;\n }\n r_4[1] = r_4_1;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000071f8a49a217bf58d623750e9c129a63cfdb755e2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000006a7adc109bdfaaa8ad6acd59f806bd9a60819c5ef4b2f9588a444f926e11829abd5c96000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffddace9ee87afb5d9463965772d11a7bd88a25381440000000000000000000000000000000000000036f3e61aa8d2ba48fad0b3cb55b7c860617d0b9b0a8406081fd1a715f2d2d2ac3a5182000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000020049c60061b5e28102ca521c33e6382601ade2a30000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a806f6f4d6fc3a9204d6f6f20f09f9a804d200000000000000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a804d4d206f6f4d4d4d6f6fc3a9c3a9f09f9a80c3a96ff09f9a80c3a96f6f20f09f9a80c3a9206f206f6fc3a96f4d6f4d4dc3a96f000000" + }, + { + "name": "random-(string,uint72,address[4],(bool,(address,address,bool),address))", + "type": "(string,uint72,address[4],(bool,(address,address,bool),address))", + "value": [ + "Moo é🚀", + "2344458320461069735765", + [ + "0x6679FEfe2bd14bA70A35eD5Dd1CF706F8654f144", + "0x0eC09a3A94Ac61999e75A1035DC9bE7A697051AB", + "0xf28778D7bDdCDf5969a961DfC8bCdB280708fBb2", + "0xF032703D6ca4e2064FA9E59B2425DEA8b5C5DC29" + ], + [ + true, + [ + "0x5bAc54E4696E1e1CE7a6A4954734B4362e3Dd18E", + "0x17A417A8CDE045c578f5517139Dca1C666f0A1d9", + false + ], + "0xd49699B13f2C697975De9D799dd8B53c536d5540" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "number", + "value": "2344458320461069735765" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x6679FEfe2bd14bA70A35eD5Dd1CF706F8654f144" + }, + { + "type": "address", + "value": "0x0eC09a3A94Ac61999e75A1035DC9bE7A697051AB" + }, + { + "type": "address", + "value": "0xf28778D7bDdCDf5969a961DfC8bCdB280708fBb2" + }, + { + "type": "address", + "value": "0xF032703D6ca4e2064FA9E59B2425DEA8b5C5DC29" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5bAc54E4696E1e1CE7a6A4954734B4362e3Dd18E" + }, + { + "type": "address", + "value": "0x17A417A8CDE045c578f5517139Dca1C666f0A1d9" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0xd49699B13f2C697975De9D799dd8B53c536d5540" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061037c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061026b565b60405180910390f35b6100566101b6565b61005e6101b6565b60408051808201909152600a8152689adede418753e13f3560b71b602080830191909152908252687f17e524fc9efad7559082015261009b61021b565b736679fefe2bd14ba70a35ed5dd1cf706f8654f1448152730ec09a3a94ac61999e75a1035dc9be7a697051ab602082015273f28778d7bddcdf5969a961dfc8bcdb280708fbb260408083019190915273f032703d6ca4e2064fa9e59b2425dea8b5c5dc296060830152820152610142604080516060808201835260008083528351918201845280825260208281018290529382015290918201908152600060209091015290565b600181526040805160608082018352600082840152735bac54e4696e1e1ce7a6a4954734b4362e3dd18e82527317a417a8cde045c578f5517139dca1c666f0a1d960208084019190915284019190915273d49699b13f2c697975de9d799dd8b53c536d554091830191909152820152919050565b6040805160808101825260608152600060208201529081016101d661021b565b8152602001610216604080516060808201835260008083528351918201845280825260208281018290529382015290918201908152600060209091015290565b905290565b60405180608001604052806004906020820280368337509192915050565b8060005b60048110156102655781516001600160a01b031684526020938401939091019060010161023d565b50505050565b6000602080835283516101608285015280518061018086015260005b818110156102a4578281018401518682016101a001528301610287565b818111156102b75760006101a083880101525b509185015168ffffffffffffffffff8116604086015291604086015192506102e26060860184610239565b60608601518051151560e087015260208082015180516001600160a01b039081166101008a01529181015182166101208901526040908101511515610140890152820151166101608701529250601f01601f1916939093016101a00194935050505056fea2646970667358221220d1e3ce6c42ed959d3e6d2d5770d04d79d9a6533a665895e24240532a4d088f3c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e4bf9460 {\n address s_0;\n address s_1;\n bool s_2;\n }\n\n struct S_e2377e7b {\n bool s_0;\n S_e4bf9460 s_1;\n address s_2;\n }\n\n struct S_ccc24524 {\n string s_0;\n uint72 s_1;\n address[4] s_2;\n S_e2377e7b s_3;\n }\n\n function test () public pure returns (S_ccc24524 memory) {\n S_ccc24524 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀\";\n r.s_0 = r_0;\n }\n {\n uint72 r_1 = 2344458320461069735765;\n r.s_1 = r_1;\n }\n {\n address[4] memory r_2;\n {\n address r_2_0 = 0x6679FEfe2bd14bA70A35eD5Dd1CF706F8654f144;\n r_2[0] = r_2_0;\n }\n {\n address r_2_1 = 0x0eC09a3A94Ac61999e75A1035DC9bE7A697051AB;\n r_2[1] = r_2_1;\n }\n {\n address r_2_2 = 0xf28778D7bDdCDf5969a961DfC8bCdB280708fBb2;\n r_2[2] = r_2_2;\n }\n {\n address r_2_3 = 0xF032703D6ca4e2064FA9E59B2425DEA8b5C5DC29;\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n S_e2377e7b memory r_3;\n {\n bool r_3_0 = true;\n r_3.s_0 = r_3_0;\n }\n {\n S_e4bf9460 memory r_3_1;\n {\n address r_3_1_0 = 0x5bAc54E4696E1e1CE7a6A4954734B4362e3Dd18E;\n r_3_1.s_0 = r_3_1_0;\n }\n {\n address r_3_1_1 = 0x17A417A8CDE045c578f5517139Dca1C666f0A1d9;\n r_3_1.s_1 = r_3_1_1;\n }\n {\n bool r_3_1_2 = false;\n r_3_1.s_2 = r_3_1_2;\n }\n r_3.s_1 = r_3_1;\n }\n {\n address r_3_2 = 0xd49699B13f2C697975De9D799dd8B53c536d5540;\n r_3.s_2 = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000007f17e524fc9efad7550000000000000000000000006679fefe2bd14ba70a35ed5dd1cf706f8654f1440000000000000000000000000ec09a3a94ac61999e75a1035dc9be7a697051ab000000000000000000000000f28778d7bddcdf5969a961dfc8bcdb280708fbb2000000000000000000000000f032703d6ca4e2064fa9e59b2425dea8b5c5dc2900000000000000000000000000000000000000000000000000000000000000010000000000000000000000005bac54e4696e1e1ce7a6a4954734b4362e3dd18e00000000000000000000000017a417a8cde045c578f5517139dca1c666f0a1d90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d49699b13f2c697975de9d799dd8b53c536d5540000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string[],string,address,address,(address[2]))[3][4]", + "type": "(string[],string,address,address,(address[2]))[3][4]", + "value": [ + [ + [ + ["Moo é🚀 é🚀oéo🚀"], + "Moo é🚀oo Moooé🚀é 🚀oMoo🚀o🚀é oé", + "0xE62deBc583a0244862B2FD16d993Ffdb0BCe95B4", + "0xA99f5C0B57Ca15bD1Abce702F38c69696C10fc27", + [ + [ + "0xDAFe6C73555CB714a9dAcdcF5fceB9907ce03624", + "0x65F4002d3065280c4EE77d6b7B96B650e8036c6f" + ] + ] + ], + [ + [], + "Moo é🚀🚀o 🚀oéMoééo 🚀", + "0x6028379d641C906e74F82004af18e274206263d3", + "0x465dE44ae1b4943eB8a37243a402A05a2F38a92f", + [ + [ + "0x2D2984b6B6b34579D72Dc75F879ce95B246e5B38", + "0x81b77B2E40c3DF01e033B7362f0466603ceC836A" + ] + ] + ], + [ + [ + "Moo é🚀🚀🚀🚀oooéoooo🚀M oéo🚀éoo", + "Moo é🚀🚀M éé é🚀 🚀éM Méoooooé éoé🚀🚀🚀 é🚀éooM🚀", + "Moo é🚀MMoé🚀oéMMMooM oMo 🚀Méé Mo🚀 🚀M éoéoMooéoo ", + "Moo é🚀ooé M🚀ooo🚀o Moooo🚀M éo oé MéMMo oo" + ], + "Moo é🚀Moo🚀 MMé🚀🚀🚀", + "0xf46415895AcD4d5c129b8e030e01506A6E84C9a8", + "0x33AD16b10c7F9dD6061968Cb2ED987c97D921Bd7", + [ + [ + "0x824a7164A0e1Fcf345d031B7cD033591f3B16431", + "0x508B0a49A0826c995176F953Af8e78F5bdD87fE7" + ] + ] + ] + ], + [ + [ + [ + "Moo é🚀o🚀", + "Moo é🚀 🚀M 🚀 é MMéoMoéé oé 🚀🚀 MMéé🚀ééooMMoo é é🚀🚀🚀o🚀 🚀🚀Mo🚀 🚀🚀Mé", + "Moo é🚀 ooM🚀MoMo🚀🚀 éé MM🚀🚀é 🚀🚀o🚀o🚀éé🚀M 🚀Moé oM🚀🚀ééMéééé", + "Moo é🚀oo🚀oMoooéoM éMoo o🚀 oM🚀oé🚀🚀oéoMo MooMM o MM🚀M" + ], + "Moo é🚀", + "0x1B84514dfEb9A987B7Bff11e5dF24725D55D8287", + "0x41702e39f74B667c255E128856f8f6CD64d1A97D", + [ + [ + "0x42e76C831BC4646644721503E29baEF52Ddc3FD8", + "0x8deEA3cd686180C3040C18f0303A2d007804a516" + ] + ] + ], + [ + ["Moo é🚀🚀oooéoM🚀oo", "Moo é🚀Mo 🚀oo🚀ééM éMoo🚀 🚀🚀éMéééo o M"], + "Moo é🚀oo", + "0x9535f2B8EdF91A774CB6BD67FFeC790C4D3Be621", + "0xA9f1E0C1C3eE52B0d527B3E146b4F72D2cC23f77", + [ + [ + "0x518564fE0810BbEc78C2314C247510c35b0DC9DA", + "0xcB2Dc21ed1241A5DAa92Fdd6972296a20363C702" + ] + ] + ], + [ + [], + "Moo é🚀o 🚀M🚀éo🚀🚀 🚀MMoooo éé🚀o🚀ooMééM", + "0x1b5ad49aCEdb3887C11A86AF30FB46EEB2E4890F", + "0x742fcF4b0430Ed1ce02c3cb32076712bbCC94309", + [ + [ + "0xe63C67c20097b06E5173bc1702b3bA8e0400450c", + "0x29612B7Fe5aaac235344698a529efD1f5B4023fB" + ] + ] + ] + ], + [ + [ + [ + "Moo é🚀ooo🚀o o o🚀o éM🚀éé ooéé 🚀oo é🚀 o 🚀é🚀oéMo🚀é oo ", + "Moo é🚀M 🚀oé" + ], + "Moo é🚀ooo 🚀Moo oMMooMMooMM🚀éoéooo🚀o", + "0x2fDb690Cfb9F28A5B716BA66F81Fb956E8cDB034", + "0x6d99fAB91ba476a31695110f2E5da2f8555219D5", + [ + [ + "0x8f3fef2d0FFe6352A6237647B3d81E63F9ba9406", + "0x05A3c9BbDc7Df3c32Fa5c662Af3d5aA1b5D08A31" + ] + ] + ], + [ + ["Moo é🚀🚀oMooo🚀oMé🚀o🚀MMM ooMo o 🚀oooooo oMoM🚀M🚀oéooooé ooooooo"], + "Moo é🚀oooooo oooéoM🚀é🚀o oo🚀🚀oéé oo🚀o", + "0x935eD275d8746877542Ee2B1d164c52952B8B8d9", + "0xb8a3c597355457624aE75db015EfAd777484a9ce", + [ + [ + "0x26E7541F0E5185D4804549a27273580231C06Ae2", + "0xa837156d2A80a843BCedc26C0F8d8dA4b4A72663" + ] + ] + ], + [ + ["Moo é🚀ooooo 🚀🚀Mo🚀Mo 🚀M éoééo🚀🚀oMéM 🚀oo"], + "Moo é🚀", + "0xf39e45B79F0EF15b830f59378C1e2eeEEE04f9CF", + "0x1b0BFF129a203e4cE00E1F2db29e67c5D3B28b9a", + [ + [ + "0xE61e2dDDFD646b44B89e2CDf5fd6c66bEe0A441A", + "0x110b806e6fe5DC2669bFB20bBEC23DD5C52b3795" + ] + ] + ] + ], + [ + [ + [], + "Moo é🚀 Moé ooo🚀Mo🚀 🚀o🚀ooMoéé🚀o🚀M oéoM🚀🚀🚀o o🚀o", + "0x2D0ced94DE035F6b19f3D25d9eE9431b7a6edf54", + "0x3F52479F887B40cBAEDf26Dad1c3765995DA22B0", + [ + [ + "0x77C9011d0856C66d7ccD5F0fC9837f78cB8B721f", + "0x718bB8b4818538a098eE32829Fe0b71258FF914E" + ] + ] + ], + [ + [ + "Moo é🚀🚀🚀Mo🚀🚀oMoM o🚀Mo oo", + "Moo é🚀🚀🚀M🚀é🚀oo🚀M🚀é", + "Moo é🚀oé🚀🚀 éoMMoM éo oééoMo éMMoo Moéoé M🚀ooM oéé", + "Moo é🚀oéM🚀o🚀 🚀 Méé oooooMo🚀 oééo🚀🚀oééMoéo éoé🚀oMo" + ], + "Moo é🚀oé🚀é é", + "0x50720aE2b088EDB8a48f88346C2c6C454BBC5631", + "0x27d8DF4050ae871ab855be3CDfb04C6cb5ACa049", + [ + [ + "0xeA7601631A31e83FeD017e8108d7bBEa1Df32399", + "0x462F096FEB2Dc5a9485f05C9C0620B2bDBDfCC53" + ] + ] + ], + [ + [ + "Moo é🚀MMM🚀ooooo🚀o🚀🚀ooMoéoooM ooé 🚀éoo o oééoM", + "Moo é🚀 🚀oé oéMMMo🚀MM MM MMo🚀Mo", + "Moo é🚀M oM🚀MMéo🚀 o🚀é", + "Moo é🚀 o🚀 éoo🚀ooMééo🚀MéoM🚀🚀🚀🚀 ooo🚀 ooMo🚀o éé🚀éo🚀 🚀 " + ], + "Moo é🚀éoo🚀oMoéé", + "0x401dB8a431d9066dDF407BE513Ba2DD0A53526c3", + "0x07b13ae026A0a9A1d9039bd8aCDc9A7EB83e2cb8", + [ + [ + "0x4068F4f99B4630D16226C7ACcF400c0d26BCfA1d", + "0x1913E411f8E3AD5d18dCC64c7C337174617BCF79" + ] + ] + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é🚀oéo🚀" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oo Moooé🚀é 🚀oMoo🚀o🚀é oé" + }, + { + "type": "address", + "value": "0xE62deBc583a0244862B2FD16d993Ffdb0BCe95B4" + }, + { + "type": "address", + "value": "0xA99f5C0B57Ca15bD1Abce702F38c69696C10fc27" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xDAFe6C73555CB714a9dAcdcF5fceB9907ce03624" + }, + { + "type": "address", + "value": "0x65F4002d3065280c4EE77d6b7B96B650e8036c6f" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "string", + "value": "Moo é🚀🚀o 🚀oéMoééo 🚀" + }, + { + "type": "address", + "value": "0x6028379d641C906e74F82004af18e274206263d3" + }, + { + "type": "address", + "value": "0x465dE44ae1b4943eB8a37243a402A05a2F38a92f" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x2D2984b6B6b34579D72Dc75F879ce95B246e5B38" + }, + { + "type": "address", + "value": "0x81b77B2E40c3DF01e033B7362f0466603ceC836A" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀🚀oooéoooo🚀M oéo🚀éoo" + }, + { + "type": "string", + "value": "Moo é🚀🚀M éé é🚀 🚀éM Méoooooé éoé🚀🚀🚀 é🚀éooM🚀" + }, + { + "type": "string", + "value": "Moo é🚀MMoé🚀oéMMMooM oMo 🚀Méé Mo🚀 🚀M éoéoMooéoo " + }, + { + "type": "string", + "value": "Moo é🚀ooé M🚀ooo🚀o Moooo🚀M éo oé MéMMo oo" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Moo🚀 MMé🚀🚀🚀" + }, + { + "type": "address", + "value": "0xf46415895AcD4d5c129b8e030e01506A6E84C9a8" + }, + { + "type": "address", + "value": "0x33AD16b10c7F9dD6061968Cb2ED987c97D921Bd7" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x824a7164A0e1Fcf345d031B7cD033591f3B16431" + }, + { + "type": "address", + "value": "0x508B0a49A0826c995176F953Af8e78F5bdD87fE7" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀" + }, + { + "type": "string", + "value": "Moo é🚀 🚀M 🚀 é MMéoMoéé oé 🚀🚀 MMéé🚀ééooMMoo é é🚀🚀🚀o🚀 🚀🚀Mo🚀 🚀🚀Mé" + }, + { + "type": "string", + "value": "Moo é🚀 ooM🚀MoMo🚀🚀 éé MM🚀🚀é 🚀🚀o🚀o🚀éé🚀M 🚀Moé oM🚀🚀ééMéééé" + }, + { + "type": "string", + "value": "Moo é🚀oo🚀oMoooéoM éMoo o🚀 oM🚀oé🚀🚀oéoMo MooMM o MM🚀M" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "address", + "value": "0x1B84514dfEb9A987B7Bff11e5dF24725D55D8287" + }, + { + "type": "address", + "value": "0x41702e39f74B667c255E128856f8f6CD64d1A97D" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x42e76C831BC4646644721503E29baEF52Ddc3FD8" + }, + { + "type": "address", + "value": "0x8deEA3cd686180C3040C18f0303A2d007804a516" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oooéoM🚀oo" + }, + { + "type": "string", + "value": "Moo é🚀Mo 🚀oo🚀ééM éMoo🚀 🚀🚀éMéééo o M" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oo" + }, + { + "type": "address", + "value": "0x9535f2B8EdF91A774CB6BD67FFeC790C4D3Be621" + }, + { + "type": "address", + "value": "0xA9f1E0C1C3eE52B0d527B3E146b4F72D2cC23f77" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x518564fE0810BbEc78C2314C247510c35b0DC9DA" + }, + { + "type": "address", + "value": "0xcB2Dc21ed1241A5DAa92Fdd6972296a20363C702" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "string", + "value": "Moo é🚀o 🚀M🚀éo🚀🚀 🚀MMoooo éé🚀o🚀ooMééM" + }, + { + "type": "address", + "value": "0x1b5ad49aCEdb3887C11A86AF30FB46EEB2E4890F" + }, + { + "type": "address", + "value": "0x742fcF4b0430Ed1ce02c3cb32076712bbCC94309" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xe63C67c20097b06E5173bc1702b3bA8e0400450c" + }, + { + "type": "address", + "value": "0x29612B7Fe5aaac235344698a529efD1f5B4023fB" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooo🚀o o o🚀o éM🚀éé ooéé 🚀oo é🚀 o 🚀é🚀oéMo🚀é oo " + }, + { + "type": "string", + "value": "Moo é🚀M 🚀oé" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooo 🚀Moo oMMooMMooMM🚀éoéooo🚀o" + }, + { + "type": "address", + "value": "0x2fDb690Cfb9F28A5B716BA66F81Fb956E8cDB034" + }, + { + "type": "address", + "value": "0x6d99fAB91ba476a31695110f2E5da2f8555219D5" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x8f3fef2d0FFe6352A6237647B3d81E63F9ba9406" + }, + { + "type": "address", + "value": "0x05A3c9BbDc7Df3c32Fa5c662Af3d5aA1b5D08A31" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oMooo🚀oMé🚀o🚀MMM ooMo o 🚀oooooo oMoM🚀M🚀oéooooé ooooooo" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oooooo oooéoM🚀é🚀o oo🚀🚀oéé oo🚀o" + }, + { + "type": "address", + "value": "0x935eD275d8746877542Ee2B1d164c52952B8B8d9" + }, + { + "type": "address", + "value": "0xb8a3c597355457624aE75db015EfAd777484a9ce" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x26E7541F0E5185D4804549a27273580231C06Ae2" + }, + { + "type": "address", + "value": "0xa837156d2A80a843BCedc26C0F8d8dA4b4A72663" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooooo 🚀🚀Mo🚀Mo 🚀M éoééo🚀🚀oMéM 🚀oo" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "address", + "value": "0xf39e45B79F0EF15b830f59378C1e2eeEEE04f9CF" + }, + { + "type": "address", + "value": "0x1b0BFF129a203e4cE00E1F2db29e67c5D3B28b9a" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xE61e2dDDFD646b44B89e2CDf5fd6c66bEe0A441A" + }, + { + "type": "address", + "value": "0x110b806e6fe5DC2669bFB20bBEC23DD5C52b3795" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "string", + "value": "Moo é🚀 Moé ooo🚀Mo🚀 🚀o🚀ooMoéé🚀o🚀M oéoM🚀🚀🚀o o🚀o" + }, + { + "type": "address", + "value": "0x2D0ced94DE035F6b19f3D25d9eE9431b7a6edf54" + }, + { + "type": "address", + "value": "0x3F52479F887B40cBAEDf26Dad1c3765995DA22B0" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x77C9011d0856C66d7ccD5F0fC9837f78cB8B721f" + }, + { + "type": "address", + "value": "0x718bB8b4818538a098eE32829Fe0b71258FF914E" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀Mo🚀🚀oMoM o🚀Mo oo" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀M🚀é🚀oo🚀M🚀é" + }, + { + "type": "string", + "value": "Moo é🚀oé🚀🚀 éoMMoM éo oééoMo éMMoo Moéoé M🚀ooM oéé" + }, + { + "type": "string", + "value": "Moo é🚀oéM🚀o🚀 🚀 Méé oooooMo🚀 oééo🚀🚀oééMoéo éoé🚀oMo" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oé🚀é é" + }, + { + "type": "address", + "value": "0x50720aE2b088EDB8a48f88346C2c6C454BBC5631" + }, + { + "type": "address", + "value": "0x27d8DF4050ae871ab855be3CDfb04C6cb5ACa049" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xeA7601631A31e83FeD017e8108d7bBEa1Df32399" + }, + { + "type": "address", + "value": "0x462F096FEB2Dc5a9485f05C9C0620B2bDBDfCC53" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MMM🚀ooooo🚀o🚀🚀ooMoéoooM ooé 🚀éoo o oééoM" + }, + { + "type": "string", + "value": "Moo é🚀 🚀oé oéMMMo🚀MM MM MMo🚀Mo" + }, + { + "type": "string", + "value": "Moo é🚀M oM🚀MMéo🚀 o🚀é" + }, + { + "type": "string", + "value": "Moo é🚀 o🚀 éoo🚀ooMééo🚀MéoM🚀🚀🚀🚀 ooo🚀 ooMo🚀o éé🚀éo🚀 🚀 " + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éoo🚀oMoéé" + }, + { + "type": "address", + "value": "0x401dB8a431d9066dDF407BE513Ba2DD0A53526c3" + }, + { + "type": "address", + "value": "0x07b13ae026A0a9A1d9039bd8aCDc9A7EB83e2cb8" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x4068F4f99B4630D16226C7ACcF400c0d26BCfA1d" + }, + { + "type": "address", + "value": "0x1913E411f8E3AD5d18dCC64c7C337174617BCF79" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50611acd806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061127b565b60405180910390f35b61005661112c565b61005e61112c565b610066611159565b61006e611186565b604080516001808252818301909252600091816020015b606081526020019060019003908161008557905050905060006040518060400160405280601981526020017f4d6f6f20c3a9f09f9a8020c3a9f09f9a806fc3a96ff09f9a8000000000000000815250905080826000815181106100ea576100ea6113a7565b6020026020010181905250508082600001819052505060006040518060600160405280603281526020016114926032913960208301525073e62debc583a0244862b2fd16d993ffdb0bce95b4604082015273a99f5c0b57ca15bd1abce702f38c69696c10fc27606082015261015d6111cc565b6101656111db565b73dafe6c73555cb714a9dacdcf5fceb9907ce0362481527365f4002d3065280c4ee77d6b7b96b650e8036c6f60208201528152608082015281526101a7611186565b60408051600080825260208201909252816101d2565b60608152602001906001900390816101bd5790505b5082525060408051606081019091526023808252600091906119e56020830139602083015250736028379d641c906e74f82004af18e274206263d3604082015273465de44ae1b4943eb8a37243a402a05a2f38a92f60608201526102346111cc565b61023c6111db565b732d2984b6b6b34579d72dc75f879ce95b246e5b3881527381b77b2e40c3df01e033b7362f0466603cec836a6020808301919091529082526080830191909152820152610287611186565b60408051600480825260a08201909252600091816020015b606081526020019060019003908161029f579050509050600060405180606001604052806031815260200161195f60319139905080826000815181106102e7576102e76113a7565b60200260200101819052505060006040518060800160405280605181526020016117f36051913990508082600181518110610324576103246113a7565b60200260200101819052505060006040518060800160405280604881526020016118446048913990508082600281518110610361576103616113a7565b60200260200101819052505060006040518060600160405280603e815260200161158f603e91399050808260038151811061039e5761039e6113a7565b602002602001018190525050808260000181905250506000604051806060016040528060228152602001611a086022913960208301525073f46415895acd4d5c129b8e030e01506a6e84c9a860408201527333ad16b10c7f9dd6061968cb2ed987c97d921bd760608201526104116111cc565b6104196111db565b73824a7164a0e1fcf345d031b7cd033591f3b16431815273508b0a49a0826c995176f953af8e78f5bdd87fe760208201528152608082015260408201528152610460611159565b610468611186565b60408051600480825260a08201909252600091816020015b606081526020019060019003908161048057905050905060006040518060400160405280600f81526020016d9adede418753e13f3500dfe13f35608f1b815250905080826000815181106104d6576104d66113a7565b60200260200101819052505060006040518060a00160405280607981526020016116596079913990508082600181518110610513576105136113a7565b60200260200101819052505060006040518060a00160405280606e8152602001611a2a606e913990508082600281518110610550576105506113a7565b60200260200101819052505060006040518060800160405280604e815260200161175c604e91399050808260038151811061058d5761058d6113a7565b60209081029190910181019190915291835250604080518082018252600a8152689adede418753e13f3560b71b8184015291830191909152731b84514dfeb9a987b7bff11e5df24725d55d8287908201527341702e39f74b667c255e128856f8f6cd64d1a97d60608201526106006111cc565b6106086111db565b7342e76c831bc4646644721503e29baef52ddc3fd88152738deea3cd686180c3040c18f0303a2d007804a516602082015281526080820152815261064a611186565b60408051600280825260608201909252600091816020015b606081526020019060019003908161066257905050905060006040518060400160405280601b81526020017f4d6f6f20c3a9f09f9a80f09f9a806f6f6fc3a96f4df09f9a806f6f0000000000815250905080826000815181106106c7576106c76113a7565b60200260200101819052505060006040518060600160405280603d8152602001611402603d913990508082600181518110610704576107046113a7565b60209081029190910181019190915291835250604080518082018252600c81526b4d6f6f20c3a9f09f9a806f6f60a01b8184015291830191909152739535f2b8edf91a774cb6bd67ffec790c4d3be6219082015273a9f1e0c1c3ee52b0d527b3e146b4f72d2cc23f77606082015261077a6111cc565b6107826111db565b73518564fe0810bbec78c2314c247510c35b0dc9da815273cb2dc21ed1241a5daa92fdd6972296a20363c70260208083019190915290825260808301919091528201526107cd611186565b60408051600080825260208201909252816107f8565b60608152602001906001900390816107e35790505b50825250604080516080810190915260418082526000919061191e6020830139602083015250731b5ad49acedb3887c11a86af30fb46eeb2e4890f604082015273742fcf4b0430ed1ce02c3cb32076712bbcc94309606082015261085a6111cc565b6108626111db565b73e63c67c20097b06e5173bc1702b3ba8e0400450c81527329612b7fe5aaac235344698a529efd1f5b4023fb602080830191909152908252608083019190915260408301919091528201526108b5611159565b6108bd611186565b60408051600280825260608201909252600091816020015b60608152602001906001900390816108d55790505090506000604051806080016040528060588152602001611704605891399050808260008151811061091d5761091d6113a7565b6020026020010181905250506000604051806040016040528060148152602001734d6f6f20c3a9f09f9a804d2020f09f9a806fc3a960601b8152509050808260018151811061096e5761096e6113a7565b6020026020010181905250508082600001819052505060006040518060600160405280603281526020016116d260329139602083015250732fdb690cfb9f28a5b716ba66f81fb956e8cdb0346040820152736d99fab91ba476a31695110f2e5da2f8555219d560608201526109e16111cc565b6109e96111db565b738f3fef2d0ffe6352a6237647b3d81e63f9ba940681527305a3c9bbdc7df3c32fa5c662af3d5aa1b5d08a316020820152815260808201528152610a2b611186565b604080516001808252818301909252600091816020015b6060815260200190600190039081610a4257905050905060006040518060800160405280605981526020016115096059913990508082600081518110610a8a57610a8a6113a7565b6020026020010181905250508082600001819052505060006040518060600160405280603c81526020016118e2603c913960208301525073935ed275d8746877542ee2b1d164c52952b8b8d9604082015273b8a3c597355457624ae75db015efad777484a9ce6060820152610afd6111cc565b610b056111db565b7326e7541f0e5185d4804549a27273580231c06ae2815273a837156d2a80a843bcedc26c0f8d8da4b4a726636020808301919091529082526080830191909152820152610b50611186565b604080516001808252818301909252600091816020015b6060815260200190600190039081610b6757905050905060006040518060800160405280604481526020016113be6044913990508082600081518110610baf57610baf6113a7565b60209081029190910181019190915291835250604080518082018252600a8152689adede418753e13f3560b71b818401529183019190915273f39e45b79f0ef15b830f59378c1e2eeeee04f9cf90820152731b0bff129a203e4ce00e1f2db29e67c5d3b28b9a6060820152610c226111cc565b610c2a6111db565b73e61e2dddfd646b44b89e2cdf5fd6c66bee0a441a815273110b806e6fe5dc2669bfb20bbec23dd5c52b3795602082015281526080820152604080830191909152820152610c76611159565b610c7e611186565b6040805160008082526020820190925281610ca9565b6060815260200190600190039081610c945790505b50825250604080516080810190915260538082526000919061143f6020830139602083015250732d0ced94de035f6b19f3d25d9ee9431b7a6edf546040820152733f52479f887b40cbaedf26dad1c3765995da22b06060820152610d0b6111cc565b610d136111db565b7377c9011d0856c66d7ccd5f0fc9837f78cb8b721f815273718bb8b4818538a098ee32829fe0b71258ff914e6020820152815260808201528152610d55611186565b60408051600480825260a08201909252600091816020015b6060815260200190600190039081610d6d57905050905060006040518060600160405280602b81526020016119ba602b913990508082600081518110610db557610db56113a7565b60200260200101819052505060006040518060600160405280602a8152602001611990602a913990508082600181518110610df257610df26113a7565b60200260200101819052505060006040518060800160405280604981526020016117aa6049913990508082600281518110610e2f57610e2f6113a7565b602002602001018190525050600060405180608001604052806056815260200161188c6056913990508082600381518110610e6c57610e6c6113a7565b6020908102919091018101919091529183525060408051808201825260168152754d6f6f20c3a9f09f9a806fc3a9f09f9a80c3a920c3a960501b81840152918301919091527350720ae2b088edb8a48f88346c2c6c454bbc5631908201527327d8df4050ae871ab855be3cdfb04c6cb5aca0496060820152610eec6111cc565b610ef46111db565b73ea7601631a31e83fed017e8108d7bbea1df32399815273462f096feb2dc5a9485f05c9c0620b2bdbdfcc536020808301919091529082526080830191909152820152610f3f611186565b60408051600480825260a08201909252600091816020015b6060815260200190600190039081610f5757905050905060006040518060800160405280604581526020016114c46045913990508082600081518110610f9f57610f9f6113a7565b60200260200101819052505060006040518060600160405280602d8152602001611562602d913990508082600181518110610fdc57610fdc6113a7565b60200260200101819052505060006040518060600160405280602481526020016115cd6024913990508082600281518110611019576110196113a7565b60200260200101819052505060006040518060a00160405280606881526020016115f16068913990508082600381518110611056576110566113a7565b60209081029190910181019190915291835250604080518082018252601981527f4d6f6f20c3a9f09f9a80c3a96f6ff09f9a806f4d6fc3a9c3a900000000000000818401529183019190915273401db8a431d9066ddf407be513ba2dd0a53526c3908201527307b13ae026a0a9a1d9039bd8acdc9a7eb83e2cb860608201526110dd6111cc565b6110e56111db565b734068f4f99b4630d16226c7accf400c0d26bcfa1d8152731913e411f8e3ad5d18dcc64c7c337174617bcf7960208201528152608082015260408201526060820152919050565b60405180608001604052806004905b611143611159565b81526020019060019003908161113b5790505090565b60405180606001604052806003905b611170611186565b8152602001906001900390816111685790505090565b6040518060a00160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b031681526020016111c76111cc565b905290565b60405180602001604052806111c75b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b8181101561121f57602081850181015186830182015201611203565b81811115611231576000602083870101525b50601f01601f19169290920160200192915050565b80518260005b60028110156112745782516001600160a01b031682526020928301929091019060010161124c565b5050505050565b602080825260009060a0830183820185845b600481101561139b57868403601f19018352815184606080820160005b60038110156113855788820384528451805160c0808552815190850181905260e080860192600583901b870190910191908e019060005b818110156113145760df198885030185526112fd8484516111f9565b93508f830192508f850194506001810190506112e1565b5050508c83015191508481038d86015261132e81836111f9565b91505060408083015161134b828701826001600160a01b03169052565b5050848201516001600160a01b0316848601526080918201519161137181860184611246565b50958b0195948b01949250506001016112aa565b509650505092850192509084019060010161128d565b50919695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f6f6f6f6f20f09f9a80f09f9a804d6ff09f9a804d6f2020f09f9a804d20c3a96fc3a9c3a96ff09f9a80f09f9a806f4dc3a94d20f09f9a806f6f4d6f6f20c3a9f09f9a804d6f20f09f9a806f6ff09f9a80c3a9c3a94d20c3a94d6f6ff09f9a8020f09f9a80f09f9a80c3a94dc3a9c3a9c3a96f206f204d4d6f6f20c3a9f09f9a80204d6fc3a9206f6f6ff09f9a804d6ff09f9a8020f09f9a806ff09f9a806f6f4d6fc3a9c3a9f09f9a806ff09f9a804d206fc3a96f4df09f9a80f09f9a80f09f9a806f206ff09f9a806f4d6f6f20c3a9f09f9a806f6f204d6f6f6fc3a9f09f9a80c3a92020f09f9a806f4d6f6ff09f9a806ff09f9a80c3a9206fc3a94d6f6f20c3a9f09f9a804d4d4df09f9a806f6f6f6f6ff09f9a806ff09f9a80f09f9a806f6f4d6fc3a96f6f6f4d206f6fc3a920f09f9a80c3a96f6f206f206fc3a9c3a96f4d4d6f6f20c3a9f09f9a80f09f9a806f4d6f6f6ff09f9a806f4dc3a9f09f9a806ff09f9a804d4d4d206f6f4d6f206f2020f09f9a806f6f6f6f6f6f206f4d6f4df09f9a804df09f9a806fc3a96f6f6f6fc3a9206f6f6f6f6f6f6f4d6f6f20c3a9f09f9a8020f09f9a806fc3a9206fc3a94d4d4d6ff09f9a804d4d204d4d204d4d6ff09f9a804d6f4d6f6f20c3a9f09f9a806f6fc3a9204df09f9a806f6f6ff09f9a806f204d6f6f6f6ff09f9a804d20c3a96f20202020206fc3a920204dc3a94d4d6f206f6f4d6f6f20c3a9f09f9a804d20206f4df09f9a804d4dc3a96ff09f9a80206ff09f9a80c3a94d6f6f20c3a9f09f9a802020206ff09f9a80202020c3a96f6ff09f9a806f6f4dc3a9c3a96ff09f9a804dc3a96f4df09f9a80f09f9a80f09f9a80f09f9a8020206f6f6ff09f9a80206f6f4d6ff09f9a806f20c3a9c3a9f09f9a80c3a96ff09f9a8020f09f9a8020204d6f6f20c3a9f09f9a8020f09f9a804d20f09f9a8020c3a9204d4dc3a96f4d6fc3a9c3a9206fc3a920f09f9a80f09f9a80204d4dc3a9c3a9f09f9a80c3a9c3a96f6f4d4d6f6f20c3a920c3a9f09f9a80f09f9a80f09f9a806ff09f9a802020f09f9a80f09f9a804d6ff09f9a8020f09f9a80f09f9a804dc3a94d6f6f20c3a9f09f9a806f6f6f20f09f9a804d6f6f206f4d4d6f6f4d4d6f6f4d4df09f9a80c3a96fc3a96f6f6ff09f9a806f4d6f6f20c3a9f09f9a806f6f6ff09f9a806f206f206ff09f9a806f20c3a94df09f9a80c3a9c3a9206f6fc3a9c3a920f09f9a806f6f20c3a9f09f9a80206f20f09f9a80c3a9f09f9a806fc3a94d6ff09f9a80c3a9206f6f204d6f6f20c3a9f09f9a806f6ff09f9a806f4d6f6f6fc3a96f4d20c3a94d6f6f206ff09f9a80206f4df09f9a806fc3a9f09f9a80f09f9a806fc3a96f4d6f204d6f6f4d4d206f20204d4df09f9a804d4d6f6f20c3a9f09f9a806fc3a9f09f9a80f09f9a8020c3a96f4d4d6f4d20c3a96f206fc3a9c3a96f4d6f20c3a94d4d6f6f204d6fc3a96fc3a920204df09f9a806f6f4d206fc3a9c3a94d6f6f20c3a9f09f9a80f09f9a804d20c3a9c3a920c3a9f09f9a8020f09f9a80c3a94d20204dc3a96f6f6f6f6fc3a920c3a96fc3a9f09f9a80f09f9a80f09f9a8020c3a9f09f9a80c3a96f6f4df09f9a804d6f6f20c3a9f09f9a804d4d6fc3a9f09f9a806fc3a94d4d4d6f6f4d206f4d6f2020f09f9a804dc3a9c3a9204d6ff09f9a8020f09f9a804d2020c3a96fc3a96f4d6f6fc3a96f6f204d6f6f20c3a9f09f9a806fc3a94df09f9a806ff09f9a8020f09f9a80204dc3a9c3a920206f6f6f6f6f4d6ff09f9a80206fc3a9c3a96ff09f9a80f09f9a806fc3a9c3a94d6fc3a96f2020c3a96fc3a9f09f9a806f4d6f4d6f6f20c3a9f09f9a806f6f6f6f6f6f206f6f6fc3a96f4df09f9a80c3a9f09f9a806f206f6ff09f9a80f09f9a806fc3a9c3a920206f6ff09f9a806f4d6f6f20c3a9f09f9a806f20f09f9a804df09f9a80c3a96ff09f9a80f09f9a8020f09f9a804d4d6f6f6f6f20c3a9c3a9f09f9a806ff09f9a806f6f4dc3a9c3a94d4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a806f6f6fc3a96f6f6f6ff09f9a804d206fc3a96ff09f9a80c3a96f6f4d6f6f20c3a9f09f9a80f09f9a80f09f9a804df09f9a80c3a9f09f9a806f6ff09f9a804df09f9a80c3a94d6f6f20c3a9f09f9a80f09f9a80f09f9a804d6ff09f9a80f09f9a806f4d6f4d206ff09f9a804d6f206f6f4d6f6f20c3a9f09f9a80f09f9a806f20f09f9a806fc3a94d6fc3a9c3a96f20f09f9a804d6f6f20c3a9f09f9a804d6f6ff09f9a80204d4dc3a9f09f9a80f09f9a80f09f9a804d6f6f20c3a9f09f9a80206f6f4df09f9a804d6f4d6ff09f9a80f09f9a8020c3a9c3a9204d4df09f9a80f09f9a80c3a92020f09f9a80f09f9a806ff09f9a806ff09f9a80c3a9c3a9f09f9a804d20f09f9a804d6fc3a9206f4df09f9a80f09f9a80c3a9c3a94dc3a9c3a9c3a9c3a9a2646970667358221220110ffe06a816dfc74cf0f26abd031426a358a5eaa2c4e5e2f2c47452a1a3610264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6acf71d8 {\n address[2] s_0;\n }\n\n struct S_3d1884dd {\n string[] s_0;\n string s_1;\n address s_2;\n address s_3;\n S_6acf71d8 s_4;\n }\n\n function test () public pure returns (S_3d1884dd[3][4] memory) {\n S_3d1884dd[3][4] memory r;\n {\n S_3d1884dd[3] memory r_0;\n {\n S_3d1884dd memory r_0_0;\n {\n string[] memory r_0_0_0 = new string[](1);\n {\n string memory r_0_0_0_0 = unicode\"Moo é🚀 é🚀oéo🚀\";\n r_0_0_0[0] = r_0_0_0_0;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n string memory r_0_0_1 = unicode\"Moo é🚀oo Moooé🚀é 🚀oMoo🚀o🚀é oé\";\n r_0_0.s_1 = r_0_0_1;\n }\n {\n address r_0_0_2 = 0xE62deBc583a0244862B2FD16d993Ffdb0BCe95B4;\n r_0_0.s_2 = r_0_0_2;\n }\n {\n address r_0_0_3 = 0xA99f5C0B57Ca15bD1Abce702F38c69696C10fc27;\n r_0_0.s_3 = r_0_0_3;\n }\n {\n S_6acf71d8 memory r_0_0_4;\n {\n address[2] memory r_0_0_4_0;\n {\n address r_0_0_4_0_0 = 0xDAFe6C73555CB714a9dAcdcF5fceB9907ce03624;\n r_0_0_4_0[0] = r_0_0_4_0_0;\n }\n {\n address r_0_0_4_0_1 = 0x65F4002d3065280c4EE77d6b7B96B650e8036c6f;\n r_0_0_4_0[1] = r_0_0_4_0_1;\n }\n r_0_0_4.s_0 = r_0_0_4_0;\n }\n r_0_0.s_4 = r_0_0_4;\n }\n r_0[0] = r_0_0;\n }\n {\n S_3d1884dd memory r_0_1;\n {\n string[] memory r_0_1_0 = new string[](0);\n r_0_1.s_0 = r_0_1_0;\n }\n {\n string memory r_0_1_1 = unicode\"Moo é🚀🚀o 🚀oéMoééo 🚀\";\n r_0_1.s_1 = r_0_1_1;\n }\n {\n address r_0_1_2 = 0x6028379d641C906e74F82004af18e274206263d3;\n r_0_1.s_2 = r_0_1_2;\n }\n {\n address r_0_1_3 = 0x465dE44ae1b4943eB8a37243a402A05a2F38a92f;\n r_0_1.s_3 = r_0_1_3;\n }\n {\n S_6acf71d8 memory r_0_1_4;\n {\n address[2] memory r_0_1_4_0;\n {\n address r_0_1_4_0_0 = 0x2D2984b6B6b34579D72Dc75F879ce95B246e5B38;\n r_0_1_4_0[0] = r_0_1_4_0_0;\n }\n {\n address r_0_1_4_0_1 = 0x81b77B2E40c3DF01e033B7362f0466603ceC836A;\n r_0_1_4_0[1] = r_0_1_4_0_1;\n }\n r_0_1_4.s_0 = r_0_1_4_0;\n }\n r_0_1.s_4 = r_0_1_4;\n }\n r_0[1] = r_0_1;\n }\n {\n S_3d1884dd memory r_0_2;\n {\n string[] memory r_0_2_0 = new string[](4);\n {\n string memory r_0_2_0_0 = unicode\"Moo é🚀🚀🚀🚀oooéoooo🚀M oéo🚀éoo\";\n r_0_2_0[0] = r_0_2_0_0;\n }\n {\n string memory r_0_2_0_1 = unicode\"Moo é🚀🚀M éé é🚀 🚀éM Méoooooé éoé🚀🚀🚀 é🚀éooM🚀\";\n r_0_2_0[1] = r_0_2_0_1;\n }\n {\n string memory r_0_2_0_2 = unicode\"Moo é🚀MMoé🚀oéMMMooM oMo 🚀Méé Mo🚀 🚀M éoéoMooéoo \";\n r_0_2_0[2] = r_0_2_0_2;\n }\n {\n string memory r_0_2_0_3 = unicode\"Moo é🚀ooé M🚀ooo🚀o Moooo🚀M éo oé MéMMo oo\";\n r_0_2_0[3] = r_0_2_0_3;\n }\n r_0_2.s_0 = r_0_2_0;\n }\n {\n string memory r_0_2_1 = unicode\"Moo é🚀Moo🚀 MMé🚀🚀🚀\";\n r_0_2.s_1 = r_0_2_1;\n }\n {\n address r_0_2_2 = 0xf46415895AcD4d5c129b8e030e01506A6E84C9a8;\n r_0_2.s_2 = r_0_2_2;\n }\n {\n address r_0_2_3 = 0x33AD16b10c7F9dD6061968Cb2ED987c97D921Bd7;\n r_0_2.s_3 = r_0_2_3;\n }\n {\n S_6acf71d8 memory r_0_2_4;\n {\n address[2] memory r_0_2_4_0;\n {\n address r_0_2_4_0_0 = 0x824a7164A0e1Fcf345d031B7cD033591f3B16431;\n r_0_2_4_0[0] = r_0_2_4_0_0;\n }\n {\n address r_0_2_4_0_1 = 0x508B0a49A0826c995176F953Af8e78F5bdD87fE7;\n r_0_2_4_0[1] = r_0_2_4_0_1;\n }\n r_0_2_4.s_0 = r_0_2_4_0;\n }\n r_0_2.s_4 = r_0_2_4;\n }\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_3d1884dd[3] memory r_1;\n {\n S_3d1884dd memory r_1_0;\n {\n string[] memory r_1_0_0 = new string[](4);\n {\n string memory r_1_0_0_0 = unicode\"Moo é🚀o🚀\";\n r_1_0_0[0] = r_1_0_0_0;\n }\n {\n string memory r_1_0_0_1 = unicode\"Moo é🚀 🚀M 🚀 é MMéoMoéé oé 🚀🚀 MMéé🚀ééooMMoo é é🚀🚀🚀o🚀 🚀🚀Mo🚀 🚀🚀Mé\";\n r_1_0_0[1] = r_1_0_0_1;\n }\n {\n string memory r_1_0_0_2 = unicode\"Moo é🚀 ooM🚀MoMo🚀🚀 éé MM🚀🚀é 🚀🚀o🚀o🚀éé🚀M 🚀Moé oM🚀🚀ééMéééé\";\n r_1_0_0[2] = r_1_0_0_2;\n }\n {\n string memory r_1_0_0_3 = unicode\"Moo é🚀oo🚀oMoooéoM éMoo o🚀 oM🚀oé🚀🚀oéoMo MooMM o MM🚀M\";\n r_1_0_0[3] = r_1_0_0_3;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n string memory r_1_0_1 = unicode\"Moo é🚀\";\n r_1_0.s_1 = r_1_0_1;\n }\n {\n address r_1_0_2 = 0x1B84514dfEb9A987B7Bff11e5dF24725D55D8287;\n r_1_0.s_2 = r_1_0_2;\n }\n {\n address r_1_0_3 = 0x41702e39f74B667c255E128856f8f6CD64d1A97D;\n r_1_0.s_3 = r_1_0_3;\n }\n {\n S_6acf71d8 memory r_1_0_4;\n {\n address[2] memory r_1_0_4_0;\n {\n address r_1_0_4_0_0 = 0x42e76C831BC4646644721503E29baEF52Ddc3FD8;\n r_1_0_4_0[0] = r_1_0_4_0_0;\n }\n {\n address r_1_0_4_0_1 = 0x8deEA3cd686180C3040C18f0303A2d007804a516;\n r_1_0_4_0[1] = r_1_0_4_0_1;\n }\n r_1_0_4.s_0 = r_1_0_4_0;\n }\n r_1_0.s_4 = r_1_0_4;\n }\n r_1[0] = r_1_0;\n }\n {\n S_3d1884dd memory r_1_1;\n {\n string[] memory r_1_1_0 = new string[](2);\n {\n string memory r_1_1_0_0 = unicode\"Moo é🚀🚀oooéoM🚀oo\";\n r_1_1_0[0] = r_1_1_0_0;\n }\n {\n string memory r_1_1_0_1 = unicode\"Moo é🚀Mo 🚀oo🚀ééM éMoo🚀 🚀🚀éMéééo o M\";\n r_1_1_0[1] = r_1_1_0_1;\n }\n r_1_1.s_0 = r_1_1_0;\n }\n {\n string memory r_1_1_1 = unicode\"Moo é🚀oo\";\n r_1_1.s_1 = r_1_1_1;\n }\n {\n address r_1_1_2 = 0x9535f2B8EdF91A774CB6BD67FFeC790C4D3Be621;\n r_1_1.s_2 = r_1_1_2;\n }\n {\n address r_1_1_3 = 0xA9f1E0C1C3eE52B0d527B3E146b4F72D2cC23f77;\n r_1_1.s_3 = r_1_1_3;\n }\n {\n S_6acf71d8 memory r_1_1_4;\n {\n address[2] memory r_1_1_4_0;\n {\n address r_1_1_4_0_0 = 0x518564fE0810BbEc78C2314C247510c35b0DC9DA;\n r_1_1_4_0[0] = r_1_1_4_0_0;\n }\n {\n address r_1_1_4_0_1 = 0xcB2Dc21ed1241A5DAa92Fdd6972296a20363C702;\n r_1_1_4_0[1] = r_1_1_4_0_1;\n }\n r_1_1_4.s_0 = r_1_1_4_0;\n }\n r_1_1.s_4 = r_1_1_4;\n }\n r_1[1] = r_1_1;\n }\n {\n S_3d1884dd memory r_1_2;\n {\n string[] memory r_1_2_0 = new string[](0);\n r_1_2.s_0 = r_1_2_0;\n }\n {\n string memory r_1_2_1 = unicode\"Moo é🚀o 🚀M🚀éo🚀🚀 🚀MMoooo éé🚀o🚀ooMééM\";\n r_1_2.s_1 = r_1_2_1;\n }\n {\n address r_1_2_2 = 0x1b5ad49aCEdb3887C11A86AF30FB46EEB2E4890F;\n r_1_2.s_2 = r_1_2_2;\n }\n {\n address r_1_2_3 = 0x742fcF4b0430Ed1ce02c3cb32076712bbCC94309;\n r_1_2.s_3 = r_1_2_3;\n }\n {\n S_6acf71d8 memory r_1_2_4;\n {\n address[2] memory r_1_2_4_0;\n {\n address r_1_2_4_0_0 = 0xe63C67c20097b06E5173bc1702b3bA8e0400450c;\n r_1_2_4_0[0] = r_1_2_4_0_0;\n }\n {\n address r_1_2_4_0_1 = 0x29612B7Fe5aaac235344698a529efD1f5B4023fB;\n r_1_2_4_0[1] = r_1_2_4_0_1;\n }\n r_1_2_4.s_0 = r_1_2_4_0;\n }\n r_1_2.s_4 = r_1_2_4;\n }\n r_1[2] = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_3d1884dd[3] memory r_2;\n {\n S_3d1884dd memory r_2_0;\n {\n string[] memory r_2_0_0 = new string[](2);\n {\n string memory r_2_0_0_0 = unicode\"Moo é🚀ooo🚀o o o🚀o éM🚀éé ooéé 🚀oo é🚀 o 🚀é🚀oéMo🚀é oo \";\n r_2_0_0[0] = r_2_0_0_0;\n }\n {\n string memory r_2_0_0_1 = unicode\"Moo é🚀M 🚀oé\";\n r_2_0_0[1] = r_2_0_0_1;\n }\n r_2_0.s_0 = r_2_0_0;\n }\n {\n string memory r_2_0_1 = unicode\"Moo é🚀ooo 🚀Moo oMMooMMooMM🚀éoéooo🚀o\";\n r_2_0.s_1 = r_2_0_1;\n }\n {\n address r_2_0_2 = 0x2fDb690Cfb9F28A5B716BA66F81Fb956E8cDB034;\n r_2_0.s_2 = r_2_0_2;\n }\n {\n address r_2_0_3 = 0x6d99fAB91ba476a31695110f2E5da2f8555219D5;\n r_2_0.s_3 = r_2_0_3;\n }\n {\n S_6acf71d8 memory r_2_0_4;\n {\n address[2] memory r_2_0_4_0;\n {\n address r_2_0_4_0_0 = 0x8f3fef2d0FFe6352A6237647B3d81E63F9ba9406;\n r_2_0_4_0[0] = r_2_0_4_0_0;\n }\n {\n address r_2_0_4_0_1 = 0x05A3c9BbDc7Df3c32Fa5c662Af3d5aA1b5D08A31;\n r_2_0_4_0[1] = r_2_0_4_0_1;\n }\n r_2_0_4.s_0 = r_2_0_4_0;\n }\n r_2_0.s_4 = r_2_0_4;\n }\n r_2[0] = r_2_0;\n }\n {\n S_3d1884dd memory r_2_1;\n {\n string[] memory r_2_1_0 = new string[](1);\n {\n string memory r_2_1_0_0 = unicode\"Moo é🚀🚀oMooo🚀oMé🚀o🚀MMM ooMo o 🚀oooooo oMoM🚀M🚀oéooooé ooooooo\";\n r_2_1_0[0] = r_2_1_0_0;\n }\n r_2_1.s_0 = r_2_1_0;\n }\n {\n string memory r_2_1_1 = unicode\"Moo é🚀oooooo oooéoM🚀é🚀o oo🚀🚀oéé oo🚀o\";\n r_2_1.s_1 = r_2_1_1;\n }\n {\n address r_2_1_2 = 0x935eD275d8746877542Ee2B1d164c52952B8B8d9;\n r_2_1.s_2 = r_2_1_2;\n }\n {\n address r_2_1_3 = 0xb8a3c597355457624aE75db015EfAd777484a9ce;\n r_2_1.s_3 = r_2_1_3;\n }\n {\n S_6acf71d8 memory r_2_1_4;\n {\n address[2] memory r_2_1_4_0;\n {\n address r_2_1_4_0_0 = 0x26E7541F0E5185D4804549a27273580231C06Ae2;\n r_2_1_4_0[0] = r_2_1_4_0_0;\n }\n {\n address r_2_1_4_0_1 = 0xa837156d2A80a843BCedc26C0F8d8dA4b4A72663;\n r_2_1_4_0[1] = r_2_1_4_0_1;\n }\n r_2_1_4.s_0 = r_2_1_4_0;\n }\n r_2_1.s_4 = r_2_1_4;\n }\n r_2[1] = r_2_1;\n }\n {\n S_3d1884dd memory r_2_2;\n {\n string[] memory r_2_2_0 = new string[](1);\n {\n string memory r_2_2_0_0 = unicode\"Moo é🚀ooooo 🚀🚀Mo🚀Mo 🚀M éoééo🚀🚀oMéM 🚀oo\";\n r_2_2_0[0] = r_2_2_0_0;\n }\n r_2_2.s_0 = r_2_2_0;\n }\n {\n string memory r_2_2_1 = unicode\"Moo é🚀\";\n r_2_2.s_1 = r_2_2_1;\n }\n {\n address r_2_2_2 = 0xf39e45B79F0EF15b830f59378C1e2eeEEE04f9CF;\n r_2_2.s_2 = r_2_2_2;\n }\n {\n address r_2_2_3 = 0x1b0BFF129a203e4cE00E1F2db29e67c5D3B28b9a;\n r_2_2.s_3 = r_2_2_3;\n }\n {\n S_6acf71d8 memory r_2_2_4;\n {\n address[2] memory r_2_2_4_0;\n {\n address r_2_2_4_0_0 = 0xE61e2dDDFD646b44B89e2CDf5fd6c66bEe0A441A;\n r_2_2_4_0[0] = r_2_2_4_0_0;\n }\n {\n address r_2_2_4_0_1 = 0x110b806e6fe5DC2669bFB20bBEC23DD5C52b3795;\n r_2_2_4_0[1] = r_2_2_4_0_1;\n }\n r_2_2_4.s_0 = r_2_2_4_0;\n }\n r_2_2.s_4 = r_2_2_4;\n }\n r_2[2] = r_2_2;\n }\n r[2] = r_2;\n }\n {\n S_3d1884dd[3] memory r_3;\n {\n S_3d1884dd memory r_3_0;\n {\n string[] memory r_3_0_0 = new string[](0);\n r_3_0.s_0 = r_3_0_0;\n }\n {\n string memory r_3_0_1 = unicode\"Moo é🚀 Moé ooo🚀Mo🚀 🚀o🚀ooMoéé🚀o🚀M oéoM🚀🚀🚀o o🚀o\";\n r_3_0.s_1 = r_3_0_1;\n }\n {\n address r_3_0_2 = 0x2D0ced94DE035F6b19f3D25d9eE9431b7a6edf54;\n r_3_0.s_2 = r_3_0_2;\n }\n {\n address r_3_0_3 = 0x3F52479F887B40cBAEDf26Dad1c3765995DA22B0;\n r_3_0.s_3 = r_3_0_3;\n }\n {\n S_6acf71d8 memory r_3_0_4;\n {\n address[2] memory r_3_0_4_0;\n {\n address r_3_0_4_0_0 = 0x77C9011d0856C66d7ccD5F0fC9837f78cB8B721f;\n r_3_0_4_0[0] = r_3_0_4_0_0;\n }\n {\n address r_3_0_4_0_1 = 0x718bB8b4818538a098eE32829Fe0b71258FF914E;\n r_3_0_4_0[1] = r_3_0_4_0_1;\n }\n r_3_0_4.s_0 = r_3_0_4_0;\n }\n r_3_0.s_4 = r_3_0_4;\n }\n r_3[0] = r_3_0;\n }\n {\n S_3d1884dd memory r_3_1;\n {\n string[] memory r_3_1_0 = new string[](4);\n {\n string memory r_3_1_0_0 = unicode\"Moo é🚀🚀🚀Mo🚀🚀oMoM o🚀Mo oo\";\n r_3_1_0[0] = r_3_1_0_0;\n }\n {\n string memory r_3_1_0_1 = unicode\"Moo é🚀🚀🚀M🚀é🚀oo🚀M🚀é\";\n r_3_1_0[1] = r_3_1_0_1;\n }\n {\n string memory r_3_1_0_2 = unicode\"Moo é🚀oé🚀🚀 éoMMoM éo oééoMo éMMoo Moéoé M🚀ooM oéé\";\n r_3_1_0[2] = r_3_1_0_2;\n }\n {\n string memory r_3_1_0_3 = unicode\"Moo é🚀oéM🚀o🚀 🚀 Méé oooooMo🚀 oééo🚀🚀oééMoéo éoé🚀oMo\";\n r_3_1_0[3] = r_3_1_0_3;\n }\n r_3_1.s_0 = r_3_1_0;\n }\n {\n string memory r_3_1_1 = unicode\"Moo é🚀oé🚀é é\";\n r_3_1.s_1 = r_3_1_1;\n }\n {\n address r_3_1_2 = 0x50720aE2b088EDB8a48f88346C2c6C454BBC5631;\n r_3_1.s_2 = r_3_1_2;\n }\n {\n address r_3_1_3 = 0x27d8DF4050ae871ab855be3CDfb04C6cb5ACa049;\n r_3_1.s_3 = r_3_1_3;\n }\n {\n S_6acf71d8 memory r_3_1_4;\n {\n address[2] memory r_3_1_4_0;\n {\n address r_3_1_4_0_0 = 0xeA7601631A31e83FeD017e8108d7bBEa1Df32399;\n r_3_1_4_0[0] = r_3_1_4_0_0;\n }\n {\n address r_3_1_4_0_1 = 0x462F096FEB2Dc5a9485f05C9C0620B2bDBDfCC53;\n r_3_1_4_0[1] = r_3_1_4_0_1;\n }\n r_3_1_4.s_0 = r_3_1_4_0;\n }\n r_3_1.s_4 = r_3_1_4;\n }\n r_3[1] = r_3_1;\n }\n {\n S_3d1884dd memory r_3_2;\n {\n string[] memory r_3_2_0 = new string[](4);\n {\n string memory r_3_2_0_0 = unicode\"Moo é🚀MMM🚀ooooo🚀o🚀🚀ooMoéoooM ooé 🚀éoo o oééoM\";\n r_3_2_0[0] = r_3_2_0_0;\n }\n {\n string memory r_3_2_0_1 = unicode\"Moo é🚀 🚀oé oéMMMo🚀MM MM MMo🚀Mo\";\n r_3_2_0[1] = r_3_2_0_1;\n }\n {\n string memory r_3_2_0_2 = unicode\"Moo é🚀M oM🚀MMéo🚀 o🚀é\";\n r_3_2_0[2] = r_3_2_0_2;\n }\n {\n string memory r_3_2_0_3 = unicode\"Moo é🚀 o🚀 éoo🚀ooMééo🚀MéoM🚀🚀🚀🚀 ooo🚀 ooMo🚀o éé🚀éo🚀 🚀 \";\n r_3_2_0[3] = r_3_2_0_3;\n }\n r_3_2.s_0 = r_3_2_0;\n }\n {\n string memory r_3_2_1 = unicode\"Moo é🚀éoo🚀oMoéé\";\n r_3_2.s_1 = r_3_2_1;\n }\n {\n address r_3_2_2 = 0x401dB8a431d9066dDF407BE513Ba2DD0A53526c3;\n r_3_2.s_2 = r_3_2_2;\n }\n {\n address r_3_2_3 = 0x07b13ae026A0a9A1d9039bd8aCDc9A7EB83e2cb8;\n r_3_2.s_3 = r_3_2_3;\n }\n {\n S_6acf71d8 memory r_3_2_4;\n {\n address[2] memory r_3_2_4_0;\n {\n address r_3_2_4_0_0 = 0x4068F4f99B4630D16226C7ACcF400c0d26BCfA1d;\n r_3_2_4_0[0] = r_3_2_4_0_0;\n }\n {\n address r_3_2_4_0_1 = 0x1913E411f8E3AD5d18dCC64c7C337174617BCF79;\n r_3_2_4_0[1] = r_3_2_4_0_1;\n }\n r_3_2_4.s_0 = r_3_2_4_0;\n }\n r_3_2.s_4 = r_3_2_4;\n }\n r_3[2] = r_3_2;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000007400000000000000000000000000000000000000000000000000000000000000ea000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000e62debc583a0244862b2fd16d993ffdb0bce95b4000000000000000000000000a99f5c0b57ca15bd1abce702f38c69696c10fc27000000000000000000000000dafe6c73555cb714a9dacdcf5fceb9907ce0362400000000000000000000000065f4002d3065280c4ee77d6b7b96b650e8036c6f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000194d6f6f20c3a9f09f9a8020c3a9f09f9a806fc3a96ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a806f6f204d6f6f6fc3a9f09f9a80c3a92020f09f9a806f4d6f6ff09f9a806ff09f9a80c3a9206fc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000006028379d641c906e74f82004af18e274206263d3000000000000000000000000465de44ae1b4943eb8a37243a402a05a2f38a92f0000000000000000000000002d2984b6b6b34579d72dc75f879ce95b246e5b3800000000000000000000000081b77b2e40c3df01e033b7362f0466603cec836a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a80f09f9a806f20f09f9a806fc3a94d6fc3a9c3a96f20f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000f46415895acd4d5c129b8e030e01506a6e84c9a800000000000000000000000033ad16b10c7f9dd6061968cb2ed987c97d921bd7000000000000000000000000824a7164a0e1fcf345d031b7cd033591f3b16431000000000000000000000000508b0a49a0826c995176f953af8e78f5bdd87fe70000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a806f6f6fc3a96f6f6f6ff09f9a804d206fc3a96ff09f9a80c3a96f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a80f09f9a804d20c3a9c3a920c3a9f09f9a8020f09f9a80c3a94d20204dc3a96f6f6f6f6fc3a920c3a96fc3a9f09f9a80f09f9a80f09f9a8020c3a9f09f9a80c3a96f6f4df09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000484d6f6f20c3a9f09f9a804d4d6fc3a9f09f9a806fc3a94d4d4d6f6f4d206f4d6f2020f09f9a804dc3a9c3a9204d6ff09f9a8020f09f9a804d2020c3a96fc3a96f4d6f6fc3a96f6f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a806f6fc3a9204df09f9a806f6f6ff09f9a806f204d6f6f6f6ff09f9a804d20c3a96f20202020206fc3a920204dc3a94d4d6f206f6f000000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a804d6f6ff09f9a80204d4dc3a9f09f9a80f09f9a80f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000003600000000000000000000000001b84514dfeb9a987b7bff11e5df24725d55d828700000000000000000000000041702e39f74b667c255e128856f8f6cd64d1a97d00000000000000000000000042e76c831bc4646644721503e29baef52ddc3fd80000000000000000000000008deea3cd686180c3040c18f0303a2d007804a5160000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a806ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000794d6f6f20c3a9f09f9a8020f09f9a804d20f09f9a8020c3a9204d4dc3a96f4d6fc3a9c3a9206fc3a920f09f9a80f09f9a80204d4dc3a9c3a9f09f9a80c3a9c3a96f6f4d4d6f6f20c3a920c3a9f09f9a80f09f9a80f09f9a806ff09f9a802020f09f9a80f09f9a804d6ff09f9a8020f09f9a80f09f9a804dc3a900000000000000000000000000000000000000000000000000000000000000000000000000006e4d6f6f20c3a9f09f9a80206f6f4df09f9a804d6f4d6ff09f9a80f09f9a8020c3a9c3a9204d4df09f9a80f09f9a80c3a92020f09f9a80f09f9a806ff09f9a806ff09f9a80c3a9c3a9f09f9a804d20f09f9a804d6fc3a9206f4df09f9a80f09f9a80c3a9c3a94dc3a9c3a9c3a9c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a806f6ff09f9a806f4d6f6f6fc3a96f4d20c3a94d6f6f206ff09f9a80206f4df09f9a806fc3a9f09f9a80f09f9a806fc3a96f4d6f204d6f6f4d4d206f20204d4df09f9a804d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000009535f2b8edf91a774cb6bd67ffec790c4d3be621000000000000000000000000a9f1e0c1c3ee52b0d527b3e146b4f72d2cc23f77000000000000000000000000518564fe0810bbec78c2314c247510c35b0dc9da000000000000000000000000cb2dc21ed1241a5daa92fdd6972296a20363c702000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a80f09f9a806f6f6fc3a96f4df09f9a806f6f0000000000000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a804d6f20f09f9a806f6ff09f9a80c3a9c3a94d20c3a94d6f6ff09f9a8020f09f9a80f09f9a80c3a94dc3a9c3a9c3a96f206f204d000000000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a806f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000001b5ad49acedb3887c11a86af30fb46eeb2e4890f000000000000000000000000742fcf4b0430ed1ce02c3cb32076712bbcc94309000000000000000000000000e63c67c20097b06e5173bc1702b3ba8e0400450c00000000000000000000000029612b7fe5aaac235344698a529efd1f5b4023fb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a806f20f09f9a804df09f9a80c3a96ff09f9a80f09f9a8020f09f9a804d4d6f6f6f6f20c3a9c3a9f09f9a806ff09f9a806f6f4dc3a9c3a94d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000002fdb690cfb9f28a5b716ba66f81fb956e8cdb0340000000000000000000000006d99fab91ba476a31695110f2e5da2f8555219d50000000000000000000000008f3fef2d0ffe6352a6237647b3d81e63f9ba940600000000000000000000000005a3c9bbdc7df3c32fa5c662af3d5aa1b5d08a310000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a806f6f6ff09f9a806f206f206ff09f9a806f20c3a94df09f9a80c3a9c3a9206f6fc3a9c3a920f09f9a806f6f20c3a9f09f9a80206f20f09f9a80c3a9f09f9a806fc3a94d6ff09f9a80c3a9206f6f20000000000000000000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a804d2020f09f9a806fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a806f6f6f20f09f9a804d6f6f206f4d4d6f6f4d4d6f6f4d4df09f9a80c3a96fc3a96f6f6ff09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000935ed275d8746877542ee2b1d164c52952b8b8d9000000000000000000000000b8a3c597355457624ae75db015efad777484a9ce00000000000000000000000026e7541f0e5185d4804549a27273580231c06ae2000000000000000000000000a837156d2a80a843bcedc26c0f8d8da4b4a726630000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a80f09f9a806f4d6f6f6ff09f9a806f4dc3a9f09f9a806ff09f9a804d4d4d206f6f4d6f206f2020f09f9a806f6f6f6f6f6f206f4d6f4df09f9a804df09f9a806fc3a96f6f6f6fc3a9206f6f6f6f6f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a806f6f6f6f6f6f206f6f6fc3a96f4df09f9a80c3a9f09f9a806f206f6ff09f9a80f09f9a806fc3a9c3a920206f6ff09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000f39e45b79f0ef15b830f59378c1e2eeeee04f9cf0000000000000000000000001b0bff129a203e4ce00e1f2db29e67c5d3b28b9a000000000000000000000000e61e2dddfd646b44b89e2cdf5fd6c66bee0a441a000000000000000000000000110b806e6fe5dc2669bfb20bbec23dd5c52b37950000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000444d6f6f20c3a9f09f9a806f6f6f6f6f20f09f9a80f09f9a804d6ff09f9a804d6f2020f09f9a804d20c3a96fc3a9c3a96ff09f9a80f09f9a806f4dc3a94d20f09f9a806f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000002d0ced94de035f6b19f3d25d9ee9431b7a6edf540000000000000000000000003f52479f887b40cbaedf26dad1c3765995da22b000000000000000000000000077c9011d0856c66d7ccd5f0fc9837f78cb8b721f000000000000000000000000718bb8b4818538a098ee32829fe0b71258ff914e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000534d6f6f20c3a9f09f9a80204d6fc3a9206f6f6ff09f9a804d6ff09f9a8020f09f9a806ff09f9a806f6f4d6fc3a9c3a9f09f9a806ff09f9a804d206fc3a96f4df09f9a80f09f9a80f09f9a806f206ff09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000050720ae2b088edb8a48f88346c2c6c454bbc563100000000000000000000000027d8df4050ae871ab855be3cdfb04c6cb5aca049000000000000000000000000ea7601631a31e83fed017e8108d7bbea1df32399000000000000000000000000462f096feb2dc5a9485f05c9c0620b2bdbdfcc530000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a80f09f9a80f09f9a804d6ff09f9a80f09f9a806f4d6f4d206ff09f9a804d6f206f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a80f09f9a80f09f9a804df09f9a80c3a9f09f9a806f6ff09f9a804df09f9a80c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000494d6f6f20c3a9f09f9a806fc3a9f09f9a80f09f9a8020c3a96f4d4d6f4d20c3a96f206fc3a9c3a96f4d6f20c3a94d4d6f6f204d6fc3a96fc3a920204df09f9a806f6f4d206fc3a9c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a806fc3a94df09f9a806ff09f9a8020f09f9a80204dc3a9c3a920206f6f6f6f6f4d6ff09f9a80206fc3a9c3a96ff09f9a80f09f9a806fc3a9c3a94d6fc3a96f2020c3a96fc3a9f09f9a806f4d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a806fc3a9f09f9a80c3a920c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000340000000000000000000000000401db8a431d9066ddf407be513ba2dd0a53526c300000000000000000000000007b13ae026a0a9a1d9039bd8acdc9a7eb83e2cb80000000000000000000000004068f4f99b4630d16226c7accf400c0d26bcfa1d0000000000000000000000001913e411f8e3ad5d18dcc64c7c337174617bcf79000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a804d4d4df09f9a806f6f6f6f6ff09f9a806ff09f9a80f09f9a806f6f4d6fc3a96f6f6f4d206f6fc3a920f09f9a80c3a96f6f206f206fc3a9c3a96f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a8020f09f9a806fc3a9206fc3a94d4d4d6ff09f9a804d4d204d4d204d4d6ff09f9a804d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000244d6f6f20c3a9f09f9a804d20206f4df09f9a804d4dc3a96ff09f9a80206ff09f9a80c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000684d6f6f20c3a9f09f9a802020206ff09f9a80202020c3a96f6ff09f9a806f6f4dc3a9c3a96ff09f9a804dc3a96f4df09f9a80f09f9a80f09f9a80f09f9a8020206f6f6ff09f9a80206f6f4d6ff09f9a806f20c3a9c3a9f09f9a80c3a96ff09f9a8020f09f9a80202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000194d6f6f20c3a9f09f9a80c3a96f6ff09f9a806f4d6fc3a9c3a900000000000000" + }, + { + "name": "random-(uint152,bool[4],bool,bytes32[][3],bytes20)[1]", + "type": "(uint152,bool[4],bool,bytes32[][3],bytes20)[1]", + "value": [ + [ + "1093619153911926145854287132013361905377813783", + [true, true, true, false], + true, + [ + [ + "0xcfa74f599b54fb302aaa7bf77bfa2887b555e4350a884076d02495ccc4bdd550", + "0xfa11d4b54769add1733d2d7c6fcecc136486b8b8f27a35bfb883caf7ab17082d", + "0xe3503d98f956c3996cc989a8495f556eef5010a438d276a95b2b58d782b94495" + ], + [], + [ + "0x5e83efeff5dbe9f0b25cdc1e32f4110f0e15e1238b4f39c47660454b0154ef45", + "0x663b20bdc0f487333ed924771cb9b5796fcffa48f6a7109f6eb312809c63d4f9", + "0xe22d5359d98c55de6d4ae43bb733fd15a8d580803e95c4ecf6174f7cfcbc9abf", + "0xcf13029937220f507006877ffab6f11ca6d7fdd4da19721b99c74470e6ef8a25" + ] + ], + "0xa0736dd9205435e519a9ec46d396590eb559d989" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1093619153911926145854287132013361905377813783" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xcfa74f599b54fb302aaa7bf77bfa2887b555e4350a884076d02495ccc4bdd550" + }, + { + "type": "hexstring", + "value": "0xfa11d4b54769add1733d2d7c6fcecc136486b8b8f27a35bfb883caf7ab17082d" + }, + { + "type": "hexstring", + "value": "0xe3503d98f956c3996cc989a8495f556eef5010a438d276a95b2b58d782b94495" + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x5e83efeff5dbe9f0b25cdc1e32f4110f0e15e1238b4f39c47660454b0154ef45" + }, + { + "type": "hexstring", + "value": "0x663b20bdc0f487333ed924771cb9b5796fcffa48f6a7109f6eb312809c63d4f9" + }, + { + "type": "hexstring", + "value": "0xe22d5359d98c55de6d4ae43bb733fd15a8d580803e95c4ecf6174f7cfcbc9abf" + }, + { + "type": "hexstring", + "value": "0xcf13029937220f507006877ffab6f11ca6d7fdd4da19721b99c74470e6ef8a25" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xa0736dd9205435e519a9ec46d396590eb559d989" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610566806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610447565b60405180910390f35b610056610324565b61005e610324565b610066610351565b72310a21d7eb70f17e5d4cdcf4abfb3bea8125178152610084610395565b6001808252602080830182905260408084018390526000606085015290840192909252908201526100b36103b3565b6040805160038082526080820190925260009160208201606080368337505081519192507fcfa74f599b54fb302aaa7bf77bfa2887b555e4350a884076d02495ccc4bdd55091829150839060009061010d5761010d61051a565b60209081029190910101525080517ffa11d4b54769add1733d2d7c6fcecc136486b8b8f27a35bfb883caf7ab17082d908190839060019081106101525761015261051a565b60209081029190910101525080517fe3503d98f956c3996cc989a8495f556eef5010a438d276a95b2b58d782b94495908190839060029081106101975761019761051a565b6020908102919091018101919091529183525060408051600080825292810190915260208301525060408051600480825260a08201909252600091816020016020820280368337505081519192507f5e83efeff5dbe9f0b25cdc1e32f4110f0e15e1238b4f39c47660454b0154ef4591829150839060009061021b5761021b61051a565b60209081029190910101525080517f663b20bdc0f487333ed924771cb9b5796fcffa48f6a7109f6eb312809c63d4f9908190839060019081106102605761026061051a565b60209081029190910101525080517fe22d5359d98c55de6d4ae43bb733fd15a8d580803e95c4ecf6174f7cfcbc9abf908190839060029081106102a5576102a561051a565b60209081029190910101525080517fcf13029937220f507006877ffab6f11ca6d7fdd4da19721b99c74470e6ef8a25908190839060039081106102ea576102ea61051a565b6020908102919091010152506040820152606082015273a0736dd9205435e519a9ec46d396590eb559d98960601b60808201528152919050565b60405180602001604052806001905b61033b610351565b8152602001906001900390816103335790505090565b6040518060a0016040528060006001600160981b03168152602001610374610395565b8152600060208201526040016103886103b3565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003905b60608152602001906001900390816103c25790505090565b60008260608101836000805b600381101561043b578484038852825180518086526020918201918087019190855b8281101561042457845184529381019392810192600101610408565b509a8b019a919650509390930192506001016103e6565b50919695505050505050565b602080825260009060408382018185018685805b600180821061046a575061050c565b601f198a860301865283516101006001600160981b038251168752898201518a8801865b60048110156104ac57825115158252918c0191908c0190850161048e565b50505088820151151560a0880152606082015160c0880182905292506104d4818801846103da565b925050608081015190506104f960e08701826bffffffffffffffffffffffff19169052565b509487019493509186019160010161045b565b509198975050505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220ad02844f9b26fe9eb5be3645da83b751c6cfb6abdb59e59f1217b7423f099cb364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a82b8aae {\n uint152 s_0;\n bool[4] s_1;\n bool s_2;\n bytes32[][3] s_3;\n bytes20 s_4;\n }\n\n function test () public pure returns (S_a82b8aae[1] memory) {\n S_a82b8aae[1] memory r;\n {\n S_a82b8aae memory r_0;\n {\n uint152 r_0_0 = 1093619153911926145854287132013361905377813783;\n r_0.s_0 = r_0_0;\n }\n {\n bool[4] memory r_0_1;\n {\n bool r_0_1_0 = true;\n r_0_1[0] = r_0_1_0;\n }\n {\n bool r_0_1_1 = true;\n r_0_1[1] = r_0_1_1;\n }\n {\n bool r_0_1_2 = true;\n r_0_1[2] = r_0_1_2;\n }\n {\n bool r_0_1_3 = false;\n r_0_1[3] = r_0_1_3;\n }\n r_0.s_1 = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0.s_2 = r_0_2;\n }\n {\n bytes32[][3] memory r_0_3;\n {\n bytes32[] memory r_0_3_0 = new bytes32[](3);\n {\n bytes32 r_0_3_0_0 = bytes32(0xcfa74f599b54fb302aaa7bf77bfa2887b555e4350a884076d02495ccc4bdd550);\n r_0_3_0[0] = r_0_3_0_0;\n }\n {\n bytes32 r_0_3_0_1 = bytes32(0xfa11d4b54769add1733d2d7c6fcecc136486b8b8f27a35bfb883caf7ab17082d);\n r_0_3_0[1] = r_0_3_0_1;\n }\n {\n bytes32 r_0_3_0_2 = bytes32(0xe3503d98f956c3996cc989a8495f556eef5010a438d276a95b2b58d782b94495);\n r_0_3_0[2] = r_0_3_0_2;\n }\n r_0_3[0] = r_0_3_0;\n }\n {\n bytes32[] memory r_0_3_1 = new bytes32[](0);\n r_0_3[1] = r_0_3_1;\n }\n {\n bytes32[] memory r_0_3_2 = new bytes32[](4);\n {\n bytes32 r_0_3_2_0 = bytes32(0x5e83efeff5dbe9f0b25cdc1e32f4110f0e15e1238b4f39c47660454b0154ef45);\n r_0_3_2[0] = r_0_3_2_0;\n }\n {\n bytes32 r_0_3_2_1 = bytes32(0x663b20bdc0f487333ed924771cb9b5796fcffa48f6a7109f6eb312809c63d4f9);\n r_0_3_2[1] = r_0_3_2_1;\n }\n {\n bytes32 r_0_3_2_2 = bytes32(0xe22d5359d98c55de6d4ae43bb733fd15a8d580803e95c4ecf6174f7cfcbc9abf);\n r_0_3_2[2] = r_0_3_2_2;\n }\n {\n bytes32 r_0_3_2_3 = bytes32(0xcf13029937220f507006877ffab6f11ca6d7fdd4da19721b99c74470e6ef8a25);\n r_0_3_2[3] = r_0_3_2_3;\n }\n r_0_3[2] = r_0_3_2;\n }\n r_0.s_3 = r_0_3;\n }\n {\n bytes20 r_0_4 = bytes20(0xA0736Dd9205435e519A9ec46D396590eB559D989);\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000310a21d7eb70f17e5d4cdcf4abfb3bea812517000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100a0736dd9205435e519a9ec46d396590eb559d989000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000003cfa74f599b54fb302aaa7bf77bfa2887b555e4350a884076d02495ccc4bdd550fa11d4b54769add1733d2d7c6fcecc136486b8b8f27a35bfb883caf7ab17082de3503d98f956c3996cc989a8495f556eef5010a438d276a95b2b58d782b94495000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045e83efeff5dbe9f0b25cdc1e32f4110f0e15e1238b4f39c47660454b0154ef45663b20bdc0f487333ed924771cb9b5796fcffa48f6a7109f6eb312809c63d4f9e22d5359d98c55de6d4ae43bb733fd15a8d580803e95c4ecf6174f7cfcbc9abfcf13029937220f507006877ffab6f11ca6d7fdd4da19721b99c74470e6ef8a25" + }, + { + "name": "random-(((((int56),int192,int32)[4],address[4],string)[3]),address)[3]", + "type": "(((((int56),int192,int32)[4],address[4],string)[3]),address)[3]", + "value": [ + [ + [ + [ + [ + [ + [ + ["7565822975552719"], + "763808304684542502743182157709469281986476775316847314703", + "1883526535" + ], + [ + ["8280795569131885"], + "-2665064345076665770326926671043864946622895657988282527307", + "-2042932697" + ], + [ + ["19352089222962830"], + "850615461475663698356080201323667724892949021745361826597", + "-1545249528" + ], + [ + ["12448077416526128"], + "-252607150705595700226146231900854080808595658563209139079", + "-1492674580" + ] + ], + [ + "0xB13A2c96dB0B93B955736a032f78BC412cdff52A", + "0x23b49e40372Be1d29ea88Db074527f8AFcc1b4fa", + "0xe3CD0cA3A4344fce4E2773103EE5D6D963c2D2d6", + "0xa1428dDbC8BD4F29b6f9882585d801f1cF884C53" + ], + "Moo é🚀oMM🚀🚀oéoM o🚀oéMoo Moo🚀" + ], + [ + [ + [ + ["-4468568507435821"], + "-1063239882420995536677203650191128740106442279556938630330", + "-500087289" + ], + [ + ["-34883194371107692"], + "-2803665010141791364163953170835773196016133814523576430245", + "846929197" + ], + [ + ["10147585125523121"], + "-2779873030155308681934832870419621999395479809057500296328", + "-463278235" + ], + [ + ["-22733041165857004"], + "-721633697823436758504882013696035510607681731679239504665", + "1970122849" + ] + ], + [ + "0x40849bc2AcCbfF11f2BcbD827C224f999a77B4E6", + "0x1E9eC57BDBfFBec27E75DD4A376B5Ab18a752184", + "0xc695c6fA9aAdBB699a426F53f9616280E29BaFED", + "0x54e0Ed0F941631bF7cB7C6B42a1FD3D88D83c654" + ], + "Moo é🚀Méo Mooé 🚀M é é🚀M🚀🚀éoo éMo🚀" + ], + [ + [ + [ + ["-3017345592797417"], + "1309381901980577314433186117547559999207784395044465716197", + "-878637779" + ], + [ + ["16314306657384783"], + "-2893895698359147333866280511750672968936865158819263987106", + "825621486" + ], + [ + ["-5789266336627722"], + "-2679104681157297884460582032883900289772146566387992778241", + "-1385283026" + ], + [ + ["8677736844171223"], + "-1204134636963125630076575729438158955138439547368426494302", + "-9255642" + ] + ], + [ + "0x93FCcB581eCf7c2Af093de25A74b78007bEAC25e", + "0xa462f7b3d8C02bB7454D33275aAA14BB64D341B2", + "0x3B42c465bbCcb784A1dc63c1cc0fCc36b9244202", + "0x5690753C2b4557388BC5de653Aca38c117cEde22" + ], + "Moo é🚀🚀🚀🚀o oM éoMo🚀o" + ] + ] + ], + "0xB3cC0929CE011AeEFD5e7481d2aFFe926C4B41D8" + ], + [ + [ + [ + [ + [ + [ + ["23281314006002050"], + "-1078944298310412639080150777540911711151375967182380349499", + "-769700546" + ], + [ + ["-22873401954895450"], + "1413850709218422494740038325216188258674967605031666790007", + "-1146070675" + ], + [ + ["-32821962766197214"], + "-80190196916209351729112901151440529724710765512577322423", + "1545730715" + ], + [ + ["-22810689955484040"], + "850918814148863368705439716078229528524342835350179656225", + "98926954" + ] + ], + [ + "0x122590A3351629e39d472453c302D553a6bb5AbE", + "0x30ecbe5C93BbFDdbaf0F295da08311D483Dcb510", + "0x0b350fcdC8FDe2db4D5624A50d305027CA3729dc", + "0x8aA066D11Bc9B752143C797e225c641622a5DD91" + ], + "Moo é🚀oo🚀ooMMoo🚀M éMo🚀🚀o" + ], + [ + [ + [ + ["-32042862929788282"], + "2603899819898477210657560142622102185118010245535397350333", + "-1995661980" + ], + [ + ["-10056556792085241"], + "-2492291202495877727687805730532535552432619415155093360040", + "1208568177" + ], + [ + ["-19399278290947438"], + "1063135826917562614376931844938258621170403285787272215248", + "855890345" + ], + [ + ["-19463370243233104"], + "1030799798091876611016639600343341243648831311172911166875", + "465874764" + ] + ], + [ + "0x8d7FE0ac167bE6ecdcA434Cbd2644Fd7EA0E7a87", + "0xeBE7c70E9307351C7069D57365d5eB90B355f4D3", + "0x1266B35909d0e3639AAC2657b98Cc56C8881De35", + "0xC34E6833B223ebe20674a848603cb59407AA5431" + ], + "Moo é🚀🚀MéMoéé🚀 éoéooé🚀🚀 éM🚀M🚀ooéM M" + ], + [ + [ + [ + ["-11753802284653141"], + "-199763565511122050349974315878941624335627271595391776545", + "597954525" + ], + [ + ["22602833334264112"], + "2828316515682751905828670341251447074361823374232374159551", + "1640403838" + ], + [ + ["-13942300933792374"], + "2839930250798414661531499206888100308389799626153707389633", + "996445074" + ], + [ + ["32547961484778419"], + "1629999289311468287529557947852515268838601340840037611061", + "919153637" + ] + ], + [ + "0x42Cd74066F3b72b338E8e4E3766D68f48C47DC33", + "0x016D450BF5243681f0927bABDe6B90b080E0646D", + "0xE20d1773FCCa7234872F818eC4598d102D1F4C02", + "0xa38ca6CBd94e5361d242fc7ffA95Cb7b81B9Ec1C" + ], + "Moo é🚀o🚀é M 🚀o🚀o🚀 éoMo 🚀🚀oo🚀🚀oooooo🚀🚀" + ] + ] + ], + "0x0C97B35bb0B2b696d9652e6DBb1b9D35A89d2c71" + ], + [ + [ + [ + [ + [ + [ + ["-21591543933069159"], + "2252824927820877503145152899891141242204973190486289706538", + "-1455958590" + ], + [ + ["34603657943548194"], + "-1511089918744345713837258884959740637875986695554303103089", + "1564688144" + ], + [ + ["-19594904696482284"], + "2349786227666435407315732870680591711519093690361464538392", + "-684545224" + ], + [ + ["4959687490109630"], + "199356796803910550091059421704216859561049087143703225408", + "-73746415" + ] + ], + [ + "0xBd553Bf894d988f6d5Df075540eEC34D21B4e95A", + "0xCAa2D5f42854dA84f7BCf393d171fD5703ecE403", + "0x11773114d9f49bdc6C9909200304175a32749eEb", + "0x9846E60C0911D711c976dDe22165c6a51909F0d3" + ], + "Moo é🚀o oéM🚀o🚀oM🚀🚀 🚀MMo🚀éMo🚀oé éo o " + ], + [ + [ + [ + ["5908220507039595"], + "-508585400579408089109053672852126487494521641570469894593", + "1227762368" + ], + [ + ["6004956187265209"], + "73775672659601078168916585951707376031920718672347027433", + "1473789968" + ], + [ + ["16016490746387454"], + "2132373353892504150694462614830992417579078860518779567875", + "-1128997231" + ], + [ + ["-35739625347395923"], + "1159849174197563990556592321955819442812601903770361434551", + "-1189140657" + ] + ], + [ + "0xdF320C85B875f3D5F9226eF71d738342706720c6", + "0xEb94f430a0345E22C83B513ABefc17F42d9195D7", + "0x9f24Ab538fd2A937B84bb160319710Ce0FC3316F", + "0xFC5592b162388BcC0a4488A3000d173b56dA1AC2" + ], + "Moo é🚀é🚀o é MooooMMoo🚀🚀 MM" + ], + [ + [ + [ + ["-6565989801617046"], + "1534604465317063736108220184621113982013914343520136754289", + "-1366928012" + ], + [ + ["29465648336070225"], + "1482113964397174789241619419160118886863804230347317648606", + "1627878877" + ], + [ + ["27179369318718028"], + "635946567756576973439750041740985017279531138213852644524", + "-2099439419" + ], + [ + ["25553371565296073"], + "-1555305043261312817301316874614419357925233059329136266856", + "-1572159740" + ] + ], + [ + "0xe1e6d064a788276c0Ac027F562d11a47620A0CAE", + "0x88C04d6Be1e7FbF518849f339901e8e6895bfb52", + "0xFcDD91852C53002eb9626025Fcc574385df32d5C", + "0x68e935c26d60cDaa61585F0f27d1342b577A77B3" + ], + "Moo é🚀 🚀oMoooéo🚀o MM🚀oooooo 🚀o oo" + ] + ] + ], + "0xA6Ae09F3752170c0Bf3cB021E93e4E83Ac7534d4" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "7565822975552719" + } + ] + }, + { + "type": "number", + "value": "763808304684542502743182157709469281986476775316847314703" + }, + { + "type": "number", + "value": "1883526535" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "8280795569131885" + } + ] + }, + { + "type": "number", + "value": "-2665064345076665770326926671043864946622895657988282527307" + }, + { + "type": "number", + "value": "-2042932697" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "19352089222962830" + } + ] + }, + { + "type": "number", + "value": "850615461475663698356080201323667724892949021745361826597" + }, + { + "type": "number", + "value": "-1545249528" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "12448077416526128" + } + ] + }, + { + "type": "number", + "value": "-252607150705595700226146231900854080808595658563209139079" + }, + { + "type": "number", + "value": "-1492674580" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xB13A2c96dB0B93B955736a032f78BC412cdff52A" + }, + { + "type": "address", + "value": "0x23b49e40372Be1d29ea88Db074527f8AFcc1b4fa" + }, + { + "type": "address", + "value": "0xe3CD0cA3A4344fce4E2773103EE5D6D963c2D2d6" + }, + { + "type": "address", + "value": "0xa1428dDbC8BD4F29b6f9882585d801f1cF884C53" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oMM🚀🚀oéoM o🚀oéMoo Moo🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-4468568507435821" + } + ] + }, + { + "type": "number", + "value": "-1063239882420995536677203650191128740106442279556938630330" + }, + { + "type": "number", + "value": "-500087289" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-34883194371107692" + } + ] + }, + { + "type": "number", + "value": "-2803665010141791364163953170835773196016133814523576430245" + }, + { + "type": "number", + "value": "846929197" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "10147585125523121" + } + ] + }, + { + "type": "number", + "value": "-2779873030155308681934832870419621999395479809057500296328" + }, + { + "type": "number", + "value": "-463278235" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-22733041165857004" + } + ] + }, + { + "type": "number", + "value": "-721633697823436758504882013696035510607681731679239504665" + }, + { + "type": "number", + "value": "1970122849" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x40849bc2AcCbfF11f2BcbD827C224f999a77B4E6" + }, + { + "type": "address", + "value": "0x1E9eC57BDBfFBec27E75DD4A376B5Ab18a752184" + }, + { + "type": "address", + "value": "0xc695c6fA9aAdBB699a426F53f9616280E29BaFED" + }, + { + "type": "address", + "value": "0x54e0Ed0F941631bF7cB7C6B42a1FD3D88D83c654" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Méo Mooé 🚀M é é🚀M🚀🚀éoo éMo🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-3017345592797417" + } + ] + }, + { + "type": "number", + "value": "1309381901980577314433186117547559999207784395044465716197" + }, + { + "type": "number", + "value": "-878637779" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "16314306657384783" + } + ] + }, + { + "type": "number", + "value": "-2893895698359147333866280511750672968936865158819263987106" + }, + { + "type": "number", + "value": "825621486" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-5789266336627722" + } + ] + }, + { + "type": "number", + "value": "-2679104681157297884460582032883900289772146566387992778241" + }, + { + "type": "number", + "value": "-1385283026" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "8677736844171223" + } + ] + }, + { + "type": "number", + "value": "-1204134636963125630076575729438158955138439547368426494302" + }, + { + "type": "number", + "value": "-9255642" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x93FCcB581eCf7c2Af093de25A74b78007bEAC25e" + }, + { + "type": "address", + "value": "0xa462f7b3d8C02bB7454D33275aAA14BB64D341B2" + }, + { + "type": "address", + "value": "0x3B42c465bbCcb784A1dc63c1cc0fCc36b9244202" + }, + { + "type": "address", + "value": "0x5690753C2b4557388BC5de653Aca38c117cEde22" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀🚀o oM éoMo🚀o" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0xB3cC0929CE011AeEFD5e7481d2aFFe926C4B41D8" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "23281314006002050" + } + ] + }, + { + "type": "number", + "value": "-1078944298310412639080150777540911711151375967182380349499" + }, + { + "type": "number", + "value": "-769700546" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-22873401954895450" + } + ] + }, + { + "type": "number", + "value": "1413850709218422494740038325216188258674967605031666790007" + }, + { + "type": "number", + "value": "-1146070675" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-32821962766197214" + } + ] + }, + { + "type": "number", + "value": "-80190196916209351729112901151440529724710765512577322423" + }, + { + "type": "number", + "value": "1545730715" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-22810689955484040" + } + ] + }, + { + "type": "number", + "value": "850918814148863368705439716078229528524342835350179656225" + }, + { + "type": "number", + "value": "98926954" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x122590A3351629e39d472453c302D553a6bb5AbE" + }, + { + "type": "address", + "value": "0x30ecbe5C93BbFDdbaf0F295da08311D483Dcb510" + }, + { + "type": "address", + "value": "0x0b350fcdC8FDe2db4D5624A50d305027CA3729dc" + }, + { + "type": "address", + "value": "0x8aA066D11Bc9B752143C797e225c641622a5DD91" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oo🚀ooMMoo🚀M éMo🚀🚀o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-32042862929788282" + } + ] + }, + { + "type": "number", + "value": "2603899819898477210657560142622102185118010245535397350333" + }, + { + "type": "number", + "value": "-1995661980" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-10056556792085241" + } + ] + }, + { + "type": "number", + "value": "-2492291202495877727687805730532535552432619415155093360040" + }, + { + "type": "number", + "value": "1208568177" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-19399278290947438" + } + ] + }, + { + "type": "number", + "value": "1063135826917562614376931844938258621170403285787272215248" + }, + { + "type": "number", + "value": "855890345" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-19463370243233104" + } + ] + }, + { + "type": "number", + "value": "1030799798091876611016639600343341243648831311172911166875" + }, + { + "type": "number", + "value": "465874764" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x8d7FE0ac167bE6ecdcA434Cbd2644Fd7EA0E7a87" + }, + { + "type": "address", + "value": "0xeBE7c70E9307351C7069D57365d5eB90B355f4D3" + }, + { + "type": "address", + "value": "0x1266B35909d0e3639AAC2657b98Cc56C8881De35" + }, + { + "type": "address", + "value": "0xC34E6833B223ebe20674a848603cb59407AA5431" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀MéMoéé🚀 éoéooé🚀🚀 éM🚀M🚀ooéM M" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-11753802284653141" + } + ] + }, + { + "type": "number", + "value": "-199763565511122050349974315878941624335627271595391776545" + }, + { + "type": "number", + "value": "597954525" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "22602833334264112" + } + ] + }, + { + "type": "number", + "value": "2828316515682751905828670341251447074361823374232374159551" + }, + { + "type": "number", + "value": "1640403838" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-13942300933792374" + } + ] + }, + { + "type": "number", + "value": "2839930250798414661531499206888100308389799626153707389633" + }, + { + "type": "number", + "value": "996445074" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "32547961484778419" + } + ] + }, + { + "type": "number", + "value": "1629999289311468287529557947852515268838601340840037611061" + }, + { + "type": "number", + "value": "919153637" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x42Cd74066F3b72b338E8e4E3766D68f48C47DC33" + }, + { + "type": "address", + "value": "0x016D450BF5243681f0927bABDe6B90b080E0646D" + }, + { + "type": "address", + "value": "0xE20d1773FCCa7234872F818eC4598d102D1F4C02" + }, + { + "type": "address", + "value": "0xa38ca6CBd94e5361d242fc7ffA95Cb7b81B9Ec1C" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀é M 🚀o🚀o🚀 éoMo 🚀🚀oo🚀🚀oooooo🚀🚀" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0x0C97B35bb0B2b696d9652e6DBb1b9D35A89d2c71" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-21591543933069159" + } + ] + }, + { + "type": "number", + "value": "2252824927820877503145152899891141242204973190486289706538" + }, + { + "type": "number", + "value": "-1455958590" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "34603657943548194" + } + ] + }, + { + "type": "number", + "value": "-1511089918744345713837258884959740637875986695554303103089" + }, + { + "type": "number", + "value": "1564688144" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-19594904696482284" + } + ] + }, + { + "type": "number", + "value": "2349786227666435407315732870680591711519093690361464538392" + }, + { + "type": "number", + "value": "-684545224" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "4959687490109630" + } + ] + }, + { + "type": "number", + "value": "199356796803910550091059421704216859561049087143703225408" + }, + { + "type": "number", + "value": "-73746415" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xBd553Bf894d988f6d5Df075540eEC34D21B4e95A" + }, + { + "type": "address", + "value": "0xCAa2D5f42854dA84f7BCf393d171fD5703ecE403" + }, + { + "type": "address", + "value": "0x11773114d9f49bdc6C9909200304175a32749eEb" + }, + { + "type": "address", + "value": "0x9846E60C0911D711c976dDe22165c6a51909F0d3" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o oéM🚀o🚀oM🚀🚀 🚀MMo🚀éMo🚀oé éo o " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "5908220507039595" + } + ] + }, + { + "type": "number", + "value": "-508585400579408089109053672852126487494521641570469894593" + }, + { + "type": "number", + "value": "1227762368" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "6004956187265209" + } + ] + }, + { + "type": "number", + "value": "73775672659601078168916585951707376031920718672347027433" + }, + { + "type": "number", + "value": "1473789968" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "16016490746387454" + } + ] + }, + { + "type": "number", + "value": "2132373353892504150694462614830992417579078860518779567875" + }, + { + "type": "number", + "value": "-1128997231" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-35739625347395923" + } + ] + }, + { + "type": "number", + "value": "1159849174197563990556592321955819442812601903770361434551" + }, + { + "type": "number", + "value": "-1189140657" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xdF320C85B875f3D5F9226eF71d738342706720c6" + }, + { + "type": "address", + "value": "0xEb94f430a0345E22C83B513ABefc17F42d9195D7" + }, + { + "type": "address", + "value": "0x9f24Ab538fd2A937B84bb160319710Ce0FC3316F" + }, + { + "type": "address", + "value": "0xFC5592b162388BcC0a4488A3000d173b56dA1AC2" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀é🚀o é MooooMMoo🚀🚀 MM" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-6565989801617046" + } + ] + }, + { + "type": "number", + "value": "1534604465317063736108220184621113982013914343520136754289" + }, + { + "type": "number", + "value": "-1366928012" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "29465648336070225" + } + ] + }, + { + "type": "number", + "value": "1482113964397174789241619419160118886863804230347317648606" + }, + { + "type": "number", + "value": "1627878877" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "27179369318718028" + } + ] + }, + { + "type": "number", + "value": "635946567756576973439750041740985017279531138213852644524" + }, + { + "type": "number", + "value": "-2099439419" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "25553371565296073" + } + ] + }, + { + "type": "number", + "value": "-1555305043261312817301316874614419357925233059329136266856" + }, + { + "type": "number", + "value": "-1572159740" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xe1e6d064a788276c0Ac027F562d11a47620A0CAE" + }, + { + "type": "address", + "value": "0x88C04d6Be1e7FbF518849f339901e8e6895bfb52" + }, + { + "type": "address", + "value": "0xFcDD91852C53002eb9626025Fcc574385df32d5C" + }, + { + "type": "address", + "value": "0x68e935c26d60cDaa61585F0f27d1342b577A77B3" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 🚀oMoooéo🚀o MM🚀oooooo 🚀o oo" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0xA6Ae09F3752170c0Bf3cB021E93e4E83Ac7534d4" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506116df806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906113b3565b60405180910390f35b610056611204565b61005e611204565b610066611231565b61006e611251565b610076611269565b61007e611296565b6100866112c3565b61008e6112f0565b6040805160208082018352661ae1136ee42ccf8252908352771f2687e1cd1fb97755fb9431472cd495e130feffb823c70f9083015263704455879082015281526100d66112f0565b6040805160208082018352661d6b56f65b116d8252908352776cb091ee805831f9de28dbc0e006d3b6d6c6a4a7600a2e4a19838201526379c4add819918301919091528201526101246112f0565b60408051602080820183526644c09f63cbde8e82529083527722b0d6fcbf19615fef79240f9e53507f7f8d0b1c2059b32590830152635c1aa2f7198282015282015261016e6112f0565b6040805160208082018352662c3975e08c71308252908352770a4d577a5927011c9f4e64a3501878454b06b8370720138619908301526358f868131990820152606082015281526101bd611316565b73b13a2c96db0b93b955736a032f78bc412cdff52a81527323b49e40372be1d29ea88db074527f8afcc1b4fa60208083019190915273e3cd0ca3a4344fce4e2773103ee5d6d963c2d2d660408084019190915273a1428ddbc8bd4f29b6f9882585d801f1cf884c53606080850191909152848301939093528051928301905260318083526000929161156590830139604083015250815261025c611296565b6102646112c3565b61026c6112f0565b6040805160208082018352660fe023ae8a4b2c198252908352772b5cbe093dae1564120cddd285e038cb7379188ad8a684b91990830152631dceb9f8199082015281526102b76112f0565b6040805160208082018352667bee14991eeb6b198252908352777257a0e5e51d47008e2df4e35ab2f3c4c4c5b57aed4faea4198382015263327b1d2d918301919091528201526103056112f0565b604080516020808201835266240d2cc6bc1eb1825290835277715f3a8895d384bb64005f9af08002614835afbb7efdf4871990830152631b9d109a19828201528201526103506112f0565b60408051602080820183526650c3949b5af0eb198252908352771d6e3514c6a0ac2ba2c0ba89b8817a8d5a86c172190f8318199083015263756db061908201526060820152815261039f611316565b7340849bc2accbff11f2bcbd827c224f999a77b4e68152731e9ec57bdbffbec27e75dd4a376b5ab18a75218460208083019190915273c695c6fa9aadbb699a426f53f9616280e29bafed6040808401919091527354e0ed0f941631bf7cb7c6b42a1fd3d88d83c6546060808501919091528483019390935280519283019052603b808352600092916115d7908301396040830152506020820152610441611296565b6104496112c3565b6104516112f0565b6040805160208082018352660ab842843928e819825290835277356695bd5982eaa4088c6d9d62e558f54bc47af8b830abe59083015263345ef2d21990820152815261049b6112f0565b60408051602080820183526639f5c68511f94f8252908352777605ae4c195bc021c1a46fff7359b8c2b1aabec6a326bda11983820152633135fbee918301919091528201526104e86112f0565b60408051602080820183526614914e9b813c09198252908352776d43287249e4ce76c435ba04527cff49d18179c1cc8256001990830152635291bdd119828201528201526105346112f0565b6040805160208082018352661ed45b0e0d17d7825290835277311bc0905a17f843f4c50c1a79d4b60532a07e22fdccd95d1990830152628d3ad9199082015260608201528152610582611316565b7393fccb581ecf7c2af093de25a74b78007beac25e815273a462f7b3d8c02bb7454d33275aaa14bb64d341b2602080830191909152733b42c465bbccb784a1dc63c1cc0fcc36b9244202604080840191909152735690753c2b4557388bc5de653aca38c117cede22606080850191909152848301939093528051928301905260258083526000929161161290830139604083810191909152830191909152508152815273b3cc0929ce011aeefd5e7481d2affe926c4b41d860208201528152610649611231565b610651611251565b610659611269565b610661611296565b6106696112c3565b6106716112f0565b60408051602080820183526652b63b533b69828252908352772c00b43ea34cc0f241505158757cff82d9a79d1faa58383a1990830152632de0b2c1199082015281526106bb6112f0565b60408051602080820183526651433ce65386591982529083527739a94a47eb8a869501d5c17cf74d2f3246a3d314a1e92e778382015263444fa69219918301919091528201526107096112f0565b604080516020808201835266749b66b782a1dd19825290835277034539874612d7d3e6b63075bed20714abb42bab07350db61990830152635c21fa9b828201528201526107546112f0565b604080516020808201835266510a339fe0d1871982529083527722b401c7117cb17603738332f9f6b03bc866ca45bf97b221908301526305e5816a90820152606082015281526107a2611316565b73122590a3351629e39d472453c302d553a6bb5abe81527330ecbe5c93bbfddbaf0f295da08311d483dcb510602080830191909152730b350fcdc8fde2db4d5624a50d305027ca3729dc604080840191909152738aa066d11bc9b752143c797e225c641622a5dd916060808501919091528483019390935280519283019052602980835260009291611681908301396040830152508152610841611296565b6108496112c3565b6108516112f0565b60408051602080820183526671d6d066843d79198252908352776a31fb8c17ecec73973884144394208bbf59ca98f99c8bbd908301526376f3629b1990820152815261089b6112f0565b60408051602080820183526623ba6297417af81982529083527765a4bbf92a7734770d2e524c7382322debb609a9d8954da719838201526348094971918301919091528201526108e96112f0565b60408051602080820183526644eb8a736e4d6d198252908352772b5ba7eb9388cce4cc91482a48cf177c286a3962f1dafad090830152633303d9a9828201528201526109336112f0565b6040805160208082018352664525d5057ad54f198252908352772a0a0d52d18f4d63d64e6a4c931761dd31feec4bcb2ef59b90830152631bc4af4c9082015260608201528152610981611316565b738d7fe0ac167be6ecdca434cbd2644fd7ea0e7a87815273ebe7c70e9307351c7069d57365d5eb90b355f4d3602080830191909152731266b35909d0e3639aac2657b98cc56c8881de3560408084019190915273c34e6833b223ebe20674a848603cb59407aa5431606084015283820192909252815160808101909252604180835260009291611596908301396040830152506020820152610a21611296565b610a296112c3565b610a316112f0565b60408051602080820183526629c20559efda54198252908352770825a1021d59215808e56dfb2a54a39777a7270d3be0f72019908301526323a40fdd908201528152610a7b6112f0565b604080516020808201835266504d283bce61308252908352777359009274583e9cf3ca997969cadb8dee582f20bb2328bf838201526361c6937e91830191909152820152610ac76112f0565b604080516020808201835266318872e682a2751982529083527773d2415a7c2d2770cdc2121801fbd019080f0e92644b42c190830152633b648b9282820152820152610b116112f0565b60408051602080820183526673a232d2769bb38252908352774279fc93f45684e77c1a2a338601ddd9007e74259b387635908301526336c92be59082015260608201528152610b5e611316565b7342cd74066f3b72b338e8e4e3766d68f48c47dc33815273016d450bf5243681f0927babde6b90b080e0646d60208083019190915273e20d1773fcca7234872f818ec4598d102d1f4c0260408084019190915273a38ca6cbd94e5361d242fc7ffa95cb7b81b9ec1c606084015283820192909252815160808101909252604a80835260009291611637908301396040838101919091528301919091525081528152730c97b35bb0b2b696d9652e6dbb1b9d35a89d2c71602082810191909152820152610c28611231565b610c30611251565b610c38611269565b610c40611296565b610c486112c3565b610c506112f0565b6040805160208082018352664cb56512486766198252908352775be096f71082000df1395bbfd90bdfe274a7b3c90e066e2a908301526356c82a3d19908201528152610c9a6112f0565b6040805160208082018352667aefd7f3a781228252908352773da083cf0025419ba890b6ab9c817ed81f539da0929d90701983820152635d433f1091830191909152820152610ce76112f0565b604080516020808201835266459d7645d769eb198252908352775fd4e9b4a01296e65de0b60a0e237b5caf3060e54314c518908301526328cd54c71982820152820152610d326112f0565b604080516020808201835266119ecf3b0b80be825290835277082161cfabc11a3ef1e348579d9c4ef1aecb625a307c24409083015263046547ee199082015260608201528152610d80611316565b73bd553bf894d988f6d5df075540eec34d21b4e95a815273caa2d5f42854da84f7bcf393d171fd5703ece4036020808301919091527311773114d9f49bdc6c9909200304175a32749eeb604080840191909152739846e60c0911d711c976dde22165c6a51909f0d36060840152838201929092528151608081019092526042808352600092916114c3908301396040830152508152610e1d611296565b610e256112c3565b610e2d6112f0565b60408051602080820183526614fd7ec893a76b82529083527714bde11c593e499bcf2d028f839696e555ec74497f4759c0199083015263492e2ac0908201528152610e766112f0565b604080516020808201835266155579d06f08b982529083527703024103ac4dbd82a754091961a8b8c36b510b3b166c57e9838201526357d8401091830191909152820152610ec26112f0565b60408051602080820183526638e6e9d97c9bfe82529083527756f7043fc01739614f6b740c8dcfcdeb094181662274bf039083015263434b216e1982820152820152610f0c6112f0565b6040805160208082018352667ef8fff93cb152198252908352772f4d63f11b6e846a5545f6968257b9b228ca4ccd61cc91b7908301526346e0d8b0199082015260608201528152610f5b611316565b73df320c85b875f3d5f9226ef71d738342706720c6815273eb94f430a0345e22c83b513abefc17f42d9195d7602080830191909152739f24ab538fd2a937b84bb160319710ce0fc3316f60408084019190915273fc5592b162388bcc0a4488a3000d173b56da1ac26060808501919091528483019390935280519283019052602a80835260009291611505908301396040830152506020820152610ffd611296565b6110056112c3565b61100d6112f0565b6040805160208082018352661753bba1b96695198252908352773e9604a8aa59de86b88e2312da880e48a5af0f12a342747190830152635179aa8b199082015281526110576112f0565b60408051602080820183526668aed9de25e6518252908352773c71fde67f04159590801e7e1c0640862f37176d27511cde8382015263610775dd918301919091528201526110a36112f0565b604080516020808201835266608f7e0d761a4c82529083527719ef978b36bdbecb0d06aa25ca33073966a2ac72c2ee84ac90830152637d22e73a19828201528201526110ed6112f0565b6040805160208082018352665ac8a7f2f689c98252908352773f6e246edcd7110a2fe4a89dc4de7dfcb81e2bb659360e671990830152635db540fb19908201526060820152815261113c611316565b73e1e6d064a788276c0ac027f562d11a47620a0cae81527388c04d6be1e7fbf518849f339901e8e6895bfb5260208083019190915273fcdd91852c53002eb9626025fcc574385df32d5c6040808401919091527368e935c26d60cdaa61585f0f27d1342b577a77b3606080850191909152848301939093528051928301905260368083526000929161152f90830139604083810191909152838101929092525090825290825273a6ae09f3752170c0bf3cb021e93e4e83ac7534d46020830152820152919050565b60405180606001604052806003905b61121b611231565b8152602001906001900390816112135790505090565b6040518060400160405280611244611251565b8152600060209091015290565b6040518060200160405280611264611269565b905290565b60405180606001604052806003905b611280611296565b8152602001906001900390816112785790505090565b60405180606001604052806112a96112c3565b81526020016112b6611316565b8152602001606081525090565b60405180608001604052806004905b6112da6112f0565b8152602001906001900390816112d25790505090565b604080516080810182526000606082018181528252602082018190529181019190915290565b60405180608001604052806004906020820280368337509192915050565b8060005b60048110156113605781516001600160a01b0316845260209384019390910190600101611338565b50505050565b6000815180845260005b8181101561138c57602081850181015186830182015201611370565b8181111561139e576000602083870101525b50601f01601f19169290920160200192915050565b60208082526000906080830183820185845b60038110156114b657868403601f19018352815180516040808752905190860187905260c086016060870160005b600381101561148e57888303605f19018252835180518460005b600481101561144a57825180515160060b83528e81015160170b8f84015260409081015160030b90830152918d019160609091019060010161140d565b5050508a81015161145f610180860182611334565b5060400151610220610200850181905261147b90850182611366565b948b0194935050908901906001016113f3565b5050918701516001600160a01b031695870195909552935091840191908401906001016113c5565b5091969550505050505056fe4d6f6f20c3a9f09f9a806f20206fc3a94df09f9a806ff09f9a806f4df09f9a80f09f9a8020f09f9a804d4d6ff09f9a80c3a94d6ff09f9a806fc3a920c3a96f206f204d6f6f20c3a9f09f9a80c3a9f09f9a806f20c3a920204d6f6f6f6f4d4d6f6ff09f9a80f09f9a80204d4d4d6f6f20c3a9f09f9a802020f09f9a806f4d6f6f6fc3a96ff09f9a806f204d4df09f9a806f6f6f6f6f6f20f09f9a806f202020206f6f4d6f6f20c3a9f09f9a806f4d4df09f9a80f09f9a806fc3a96f4d20206ff09f9a806fc3a94d6f6f2020204d6f6ff09f9a804d6f6f20c3a9f09f9a80f09f9a804dc3a94d6fc3a9c3a9f09f9a8020c3a96fc3a96f6fc3a9f09f9a80f09f9a8020c3a94df09f9a804df09f9a806f6fc3a94d204d4d6f6f20c3a9f09f9a804dc3a96f204d6f6fc3a92020f09f9a804d20c3a920c3a9f09f9a804df09f9a80f09f9a80c3a96f6f20c3a94d6ff09f9a804d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a806f206f4d20c3a96f4d6ff09f9a806f4d6f6f20c3a9f09f9a806ff09f9a80c3a9204d20f09f9a806ff09f9a806ff09f9a802020c3a96f4d6f20f09f9a80f09f9a806f6ff09f9a80f09f9a806f6f6f6f6f6ff09f9a80f09f9a804d6f6f20c3a9f09f9a806f6ff09f9a806f6f4d4d6f6ff09f9a804d20c3a94d6ff09f9a80f09f9a806fa2646970667358221220eca76113442f5097d5c320e91ad763c5e168d4a3a1d3804eff1d92929207b7e964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_14df74d1 {\n int56 s_0;\n }\n\n struct S_e72c145f {\n S_14df74d1 s_0;\n int192 s_1;\n int32 s_2;\n }\n\n struct S_6ae83230 {\n S_e72c145f[4] s_0;\n address[4] s_1;\n string s_2;\n }\n\n struct S_cc61e3dd {\n S_6ae83230[3] s_0;\n }\n\n struct S_d3eb2c12 {\n S_cc61e3dd s_0;\n address s_1;\n }\n\n function test () public pure returns (S_d3eb2c12[3] memory) {\n S_d3eb2c12[3] memory r;\n {\n S_d3eb2c12 memory r_0;\n {\n S_cc61e3dd memory r_0_0;\n {\n S_6ae83230[3] memory r_0_0_0;\n {\n S_6ae83230 memory r_0_0_0_0;\n {\n S_e72c145f[4] memory r_0_0_0_0_0;\n {\n S_e72c145f memory r_0_0_0_0_0_0;\n {\n S_14df74d1 memory r_0_0_0_0_0_0_0;\n {\n int56 r_0_0_0_0_0_0_0_0 = 7565822975552719;\n r_0_0_0_0_0_0_0.s_0 = r_0_0_0_0_0_0_0_0;\n }\n r_0_0_0_0_0_0.s_0 = r_0_0_0_0_0_0_0;\n }\n {\n int192 r_0_0_0_0_0_0_1 = 763808304684542502743182157709469281986476775316847314703;\n r_0_0_0_0_0_0.s_1 = r_0_0_0_0_0_0_1;\n }\n {\n int32 r_0_0_0_0_0_0_2 = 1883526535;\n r_0_0_0_0_0_0.s_2 = r_0_0_0_0_0_0_2;\n }\n r_0_0_0_0_0[0] = r_0_0_0_0_0_0;\n }\n {\n S_e72c145f memory r_0_0_0_0_0_1;\n {\n S_14df74d1 memory r_0_0_0_0_0_1_0;\n {\n int56 r_0_0_0_0_0_1_0_0 = 8280795569131885;\n r_0_0_0_0_0_1_0.s_0 = r_0_0_0_0_0_1_0_0;\n }\n r_0_0_0_0_0_1.s_0 = r_0_0_0_0_0_1_0;\n }\n {\n int192 r_0_0_0_0_0_1_1 = -2665064345076665770326926671043864946622895657988282527307;\n r_0_0_0_0_0_1.s_1 = r_0_0_0_0_0_1_1;\n }\n {\n int32 r_0_0_0_0_0_1_2 = -2042932697;\n r_0_0_0_0_0_1.s_2 = r_0_0_0_0_0_1_2;\n }\n r_0_0_0_0_0[1] = r_0_0_0_0_0_1;\n }\n {\n S_e72c145f memory r_0_0_0_0_0_2;\n {\n S_14df74d1 memory r_0_0_0_0_0_2_0;\n {\n int56 r_0_0_0_0_0_2_0_0 = 19352089222962830;\n r_0_0_0_0_0_2_0.s_0 = r_0_0_0_0_0_2_0_0;\n }\n r_0_0_0_0_0_2.s_0 = r_0_0_0_0_0_2_0;\n }\n {\n int192 r_0_0_0_0_0_2_1 = 850615461475663698356080201323667724892949021745361826597;\n r_0_0_0_0_0_2.s_1 = r_0_0_0_0_0_2_1;\n }\n {\n int32 r_0_0_0_0_0_2_2 = -1545249528;\n r_0_0_0_0_0_2.s_2 = r_0_0_0_0_0_2_2;\n }\n r_0_0_0_0_0[2] = r_0_0_0_0_0_2;\n }\n {\n S_e72c145f memory r_0_0_0_0_0_3;\n {\n S_14df74d1 memory r_0_0_0_0_0_3_0;\n {\n int56 r_0_0_0_0_0_3_0_0 = 12448077416526128;\n r_0_0_0_0_0_3_0.s_0 = r_0_0_0_0_0_3_0_0;\n }\n r_0_0_0_0_0_3.s_0 = r_0_0_0_0_0_3_0;\n }\n {\n int192 r_0_0_0_0_0_3_1 = -252607150705595700226146231900854080808595658563209139079;\n r_0_0_0_0_0_3.s_1 = r_0_0_0_0_0_3_1;\n }\n {\n int32 r_0_0_0_0_0_3_2 = -1492674580;\n r_0_0_0_0_0_3.s_2 = r_0_0_0_0_0_3_2;\n }\n r_0_0_0_0_0[3] = r_0_0_0_0_0_3;\n }\n r_0_0_0_0.s_0 = r_0_0_0_0_0;\n }\n {\n address[4] memory r_0_0_0_0_1;\n {\n address r_0_0_0_0_1_0 = 0xB13A2c96dB0B93B955736a032f78BC412cdff52A;\n r_0_0_0_0_1[0] = r_0_0_0_0_1_0;\n }\n {\n address r_0_0_0_0_1_1 = 0x23b49e40372Be1d29ea88Db074527f8AFcc1b4fa;\n r_0_0_0_0_1[1] = r_0_0_0_0_1_1;\n }\n {\n address r_0_0_0_0_1_2 = 0xe3CD0cA3A4344fce4E2773103EE5D6D963c2D2d6;\n r_0_0_0_0_1[2] = r_0_0_0_0_1_2;\n }\n {\n address r_0_0_0_0_1_3 = 0xa1428dDbC8BD4F29b6f9882585d801f1cF884C53;\n r_0_0_0_0_1[3] = r_0_0_0_0_1_3;\n }\n r_0_0_0_0.s_1 = r_0_0_0_0_1;\n }\n {\n string memory r_0_0_0_0_2 = unicode\"Moo é🚀oMM🚀🚀oéoM o🚀oéMoo Moo🚀\";\n r_0_0_0_0.s_2 = r_0_0_0_0_2;\n }\n r_0_0_0[0] = r_0_0_0_0;\n }\n {\n S_6ae83230 memory r_0_0_0_1;\n {\n S_e72c145f[4] memory r_0_0_0_1_0;\n {\n S_e72c145f memory r_0_0_0_1_0_0;\n {\n S_14df74d1 memory r_0_0_0_1_0_0_0;\n {\n int56 r_0_0_0_1_0_0_0_0 = -4468568507435821;\n r_0_0_0_1_0_0_0.s_0 = r_0_0_0_1_0_0_0_0;\n }\n r_0_0_0_1_0_0.s_0 = r_0_0_0_1_0_0_0;\n }\n {\n int192 r_0_0_0_1_0_0_1 = -1063239882420995536677203650191128740106442279556938630330;\n r_0_0_0_1_0_0.s_1 = r_0_0_0_1_0_0_1;\n }\n {\n int32 r_0_0_0_1_0_0_2 = -500087289;\n r_0_0_0_1_0_0.s_2 = r_0_0_0_1_0_0_2;\n }\n r_0_0_0_1_0[0] = r_0_0_0_1_0_0;\n }\n {\n S_e72c145f memory r_0_0_0_1_0_1;\n {\n S_14df74d1 memory r_0_0_0_1_0_1_0;\n {\n int56 r_0_0_0_1_0_1_0_0 = -34883194371107692;\n r_0_0_0_1_0_1_0.s_0 = r_0_0_0_1_0_1_0_0;\n }\n r_0_0_0_1_0_1.s_0 = r_0_0_0_1_0_1_0;\n }\n {\n int192 r_0_0_0_1_0_1_1 = -2803665010141791364163953170835773196016133814523576430245;\n r_0_0_0_1_0_1.s_1 = r_0_0_0_1_0_1_1;\n }\n {\n int32 r_0_0_0_1_0_1_2 = 846929197;\n r_0_0_0_1_0_1.s_2 = r_0_0_0_1_0_1_2;\n }\n r_0_0_0_1_0[1] = r_0_0_0_1_0_1;\n }\n {\n S_e72c145f memory r_0_0_0_1_0_2;\n {\n S_14df74d1 memory r_0_0_0_1_0_2_0;\n {\n int56 r_0_0_0_1_0_2_0_0 = 10147585125523121;\n r_0_0_0_1_0_2_0.s_0 = r_0_0_0_1_0_2_0_0;\n }\n r_0_0_0_1_0_2.s_0 = r_0_0_0_1_0_2_0;\n }\n {\n int192 r_0_0_0_1_0_2_1 = -2779873030155308681934832870419621999395479809057500296328;\n r_0_0_0_1_0_2.s_1 = r_0_0_0_1_0_2_1;\n }\n {\n int32 r_0_0_0_1_0_2_2 = -463278235;\n r_0_0_0_1_0_2.s_2 = r_0_0_0_1_0_2_2;\n }\n r_0_0_0_1_0[2] = r_0_0_0_1_0_2;\n }\n {\n S_e72c145f memory r_0_0_0_1_0_3;\n {\n S_14df74d1 memory r_0_0_0_1_0_3_0;\n {\n int56 r_0_0_0_1_0_3_0_0 = -22733041165857004;\n r_0_0_0_1_0_3_0.s_0 = r_0_0_0_1_0_3_0_0;\n }\n r_0_0_0_1_0_3.s_0 = r_0_0_0_1_0_3_0;\n }\n {\n int192 r_0_0_0_1_0_3_1 = -721633697823436758504882013696035510607681731679239504665;\n r_0_0_0_1_0_3.s_1 = r_0_0_0_1_0_3_1;\n }\n {\n int32 r_0_0_0_1_0_3_2 = 1970122849;\n r_0_0_0_1_0_3.s_2 = r_0_0_0_1_0_3_2;\n }\n r_0_0_0_1_0[3] = r_0_0_0_1_0_3;\n }\n r_0_0_0_1.s_0 = r_0_0_0_1_0;\n }\n {\n address[4] memory r_0_0_0_1_1;\n {\n address r_0_0_0_1_1_0 = 0x40849bc2AcCbfF11f2BcbD827C224f999a77B4E6;\n r_0_0_0_1_1[0] = r_0_0_0_1_1_0;\n }\n {\n address r_0_0_0_1_1_1 = 0x1E9eC57BDBfFBec27E75DD4A376B5Ab18a752184;\n r_0_0_0_1_1[1] = r_0_0_0_1_1_1;\n }\n {\n address r_0_0_0_1_1_2 = 0xc695c6fA9aAdBB699a426F53f9616280E29BaFED;\n r_0_0_0_1_1[2] = r_0_0_0_1_1_2;\n }\n {\n address r_0_0_0_1_1_3 = 0x54e0Ed0F941631bF7cB7C6B42a1FD3D88D83c654;\n r_0_0_0_1_1[3] = r_0_0_0_1_1_3;\n }\n r_0_0_0_1.s_1 = r_0_0_0_1_1;\n }\n {\n string memory r_0_0_0_1_2 = unicode\"Moo é🚀Méo Mooé 🚀M é é🚀M🚀🚀éoo éMo🚀\";\n r_0_0_0_1.s_2 = r_0_0_0_1_2;\n }\n r_0_0_0[1] = r_0_0_0_1;\n }\n {\n S_6ae83230 memory r_0_0_0_2;\n {\n S_e72c145f[4] memory r_0_0_0_2_0;\n {\n S_e72c145f memory r_0_0_0_2_0_0;\n {\n S_14df74d1 memory r_0_0_0_2_0_0_0;\n {\n int56 r_0_0_0_2_0_0_0_0 = -3017345592797417;\n r_0_0_0_2_0_0_0.s_0 = r_0_0_0_2_0_0_0_0;\n }\n r_0_0_0_2_0_0.s_0 = r_0_0_0_2_0_0_0;\n }\n {\n int192 r_0_0_0_2_0_0_1 = 1309381901980577314433186117547559999207784395044465716197;\n r_0_0_0_2_0_0.s_1 = r_0_0_0_2_0_0_1;\n }\n {\n int32 r_0_0_0_2_0_0_2 = -878637779;\n r_0_0_0_2_0_0.s_2 = r_0_0_0_2_0_0_2;\n }\n r_0_0_0_2_0[0] = r_0_0_0_2_0_0;\n }\n {\n S_e72c145f memory r_0_0_0_2_0_1;\n {\n S_14df74d1 memory r_0_0_0_2_0_1_0;\n {\n int56 r_0_0_0_2_0_1_0_0 = 16314306657384783;\n r_0_0_0_2_0_1_0.s_0 = r_0_0_0_2_0_1_0_0;\n }\n r_0_0_0_2_0_1.s_0 = r_0_0_0_2_0_1_0;\n }\n {\n int192 r_0_0_0_2_0_1_1 = -2893895698359147333866280511750672968936865158819263987106;\n r_0_0_0_2_0_1.s_1 = r_0_0_0_2_0_1_1;\n }\n {\n int32 r_0_0_0_2_0_1_2 = 825621486;\n r_0_0_0_2_0_1.s_2 = r_0_0_0_2_0_1_2;\n }\n r_0_0_0_2_0[1] = r_0_0_0_2_0_1;\n }\n {\n S_e72c145f memory r_0_0_0_2_0_2;\n {\n S_14df74d1 memory r_0_0_0_2_0_2_0;\n {\n int56 r_0_0_0_2_0_2_0_0 = -5789266336627722;\n r_0_0_0_2_0_2_0.s_0 = r_0_0_0_2_0_2_0_0;\n }\n r_0_0_0_2_0_2.s_0 = r_0_0_0_2_0_2_0;\n }\n {\n int192 r_0_0_0_2_0_2_1 = -2679104681157297884460582032883900289772146566387992778241;\n r_0_0_0_2_0_2.s_1 = r_0_0_0_2_0_2_1;\n }\n {\n int32 r_0_0_0_2_0_2_2 = -1385283026;\n r_0_0_0_2_0_2.s_2 = r_0_0_0_2_0_2_2;\n }\n r_0_0_0_2_0[2] = r_0_0_0_2_0_2;\n }\n {\n S_e72c145f memory r_0_0_0_2_0_3;\n {\n S_14df74d1 memory r_0_0_0_2_0_3_0;\n {\n int56 r_0_0_0_2_0_3_0_0 = 8677736844171223;\n r_0_0_0_2_0_3_0.s_0 = r_0_0_0_2_0_3_0_0;\n }\n r_0_0_0_2_0_3.s_0 = r_0_0_0_2_0_3_0;\n }\n {\n int192 r_0_0_0_2_0_3_1 = -1204134636963125630076575729438158955138439547368426494302;\n r_0_0_0_2_0_3.s_1 = r_0_0_0_2_0_3_1;\n }\n {\n int32 r_0_0_0_2_0_3_2 = -9255642;\n r_0_0_0_2_0_3.s_2 = r_0_0_0_2_0_3_2;\n }\n r_0_0_0_2_0[3] = r_0_0_0_2_0_3;\n }\n r_0_0_0_2.s_0 = r_0_0_0_2_0;\n }\n {\n address[4] memory r_0_0_0_2_1;\n {\n address r_0_0_0_2_1_0 = 0x93FCcB581eCf7c2Af093de25A74b78007bEAC25e;\n r_0_0_0_2_1[0] = r_0_0_0_2_1_0;\n }\n {\n address r_0_0_0_2_1_1 = 0xa462f7b3d8C02bB7454D33275aAA14BB64D341B2;\n r_0_0_0_2_1[1] = r_0_0_0_2_1_1;\n }\n {\n address r_0_0_0_2_1_2 = 0x3B42c465bbCcb784A1dc63c1cc0fCc36b9244202;\n r_0_0_0_2_1[2] = r_0_0_0_2_1_2;\n }\n {\n address r_0_0_0_2_1_3 = 0x5690753C2b4557388BC5de653Aca38c117cEde22;\n r_0_0_0_2_1[3] = r_0_0_0_2_1_3;\n }\n r_0_0_0_2.s_1 = r_0_0_0_2_1;\n }\n {\n string memory r_0_0_0_2_2 = unicode\"Moo é🚀🚀🚀🚀o oM éoMo🚀o\";\n r_0_0_0_2.s_2 = r_0_0_0_2_2;\n }\n r_0_0_0[2] = r_0_0_0_2;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0xB3cC0929CE011AeEFD5e7481d2aFFe926C4B41D8;\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_d3eb2c12 memory r_1;\n {\n S_cc61e3dd memory r_1_0;\n {\n S_6ae83230[3] memory r_1_0_0;\n {\n S_6ae83230 memory r_1_0_0_0;\n {\n S_e72c145f[4] memory r_1_0_0_0_0;\n {\n S_e72c145f memory r_1_0_0_0_0_0;\n {\n S_14df74d1 memory r_1_0_0_0_0_0_0;\n {\n int56 r_1_0_0_0_0_0_0_0 = 23281314006002050;\n r_1_0_0_0_0_0_0.s_0 = r_1_0_0_0_0_0_0_0;\n }\n r_1_0_0_0_0_0.s_0 = r_1_0_0_0_0_0_0;\n }\n {\n int192 r_1_0_0_0_0_0_1 = -1078944298310412639080150777540911711151375967182380349499;\n r_1_0_0_0_0_0.s_1 = r_1_0_0_0_0_0_1;\n }\n {\n int32 r_1_0_0_0_0_0_2 = -769700546;\n r_1_0_0_0_0_0.s_2 = r_1_0_0_0_0_0_2;\n }\n r_1_0_0_0_0[0] = r_1_0_0_0_0_0;\n }\n {\n S_e72c145f memory r_1_0_0_0_0_1;\n {\n S_14df74d1 memory r_1_0_0_0_0_1_0;\n {\n int56 r_1_0_0_0_0_1_0_0 = -22873401954895450;\n r_1_0_0_0_0_1_0.s_0 = r_1_0_0_0_0_1_0_0;\n }\n r_1_0_0_0_0_1.s_0 = r_1_0_0_0_0_1_0;\n }\n {\n int192 r_1_0_0_0_0_1_1 = 1413850709218422494740038325216188258674967605031666790007;\n r_1_0_0_0_0_1.s_1 = r_1_0_0_0_0_1_1;\n }\n {\n int32 r_1_0_0_0_0_1_2 = -1146070675;\n r_1_0_0_0_0_1.s_2 = r_1_0_0_0_0_1_2;\n }\n r_1_0_0_0_0[1] = r_1_0_0_0_0_1;\n }\n {\n S_e72c145f memory r_1_0_0_0_0_2;\n {\n S_14df74d1 memory r_1_0_0_0_0_2_0;\n {\n int56 r_1_0_0_0_0_2_0_0 = -32821962766197214;\n r_1_0_0_0_0_2_0.s_0 = r_1_0_0_0_0_2_0_0;\n }\n r_1_0_0_0_0_2.s_0 = r_1_0_0_0_0_2_0;\n }\n {\n int192 r_1_0_0_0_0_2_1 = -80190196916209351729112901151440529724710765512577322423;\n r_1_0_0_0_0_2.s_1 = r_1_0_0_0_0_2_1;\n }\n {\n int32 r_1_0_0_0_0_2_2 = 1545730715;\n r_1_0_0_0_0_2.s_2 = r_1_0_0_0_0_2_2;\n }\n r_1_0_0_0_0[2] = r_1_0_0_0_0_2;\n }\n {\n S_e72c145f memory r_1_0_0_0_0_3;\n {\n S_14df74d1 memory r_1_0_0_0_0_3_0;\n {\n int56 r_1_0_0_0_0_3_0_0 = -22810689955484040;\n r_1_0_0_0_0_3_0.s_0 = r_1_0_0_0_0_3_0_0;\n }\n r_1_0_0_0_0_3.s_0 = r_1_0_0_0_0_3_0;\n }\n {\n int192 r_1_0_0_0_0_3_1 = 850918814148863368705439716078229528524342835350179656225;\n r_1_0_0_0_0_3.s_1 = r_1_0_0_0_0_3_1;\n }\n {\n int32 r_1_0_0_0_0_3_2 = 98926954;\n r_1_0_0_0_0_3.s_2 = r_1_0_0_0_0_3_2;\n }\n r_1_0_0_0_0[3] = r_1_0_0_0_0_3;\n }\n r_1_0_0_0.s_0 = r_1_0_0_0_0;\n }\n {\n address[4] memory r_1_0_0_0_1;\n {\n address r_1_0_0_0_1_0 = 0x122590A3351629e39d472453c302D553a6bb5AbE;\n r_1_0_0_0_1[0] = r_1_0_0_0_1_0;\n }\n {\n address r_1_0_0_0_1_1 = 0x30ecbe5C93BbFDdbaf0F295da08311D483Dcb510;\n r_1_0_0_0_1[1] = r_1_0_0_0_1_1;\n }\n {\n address r_1_0_0_0_1_2 = 0x0b350fcdC8FDe2db4D5624A50d305027CA3729dc;\n r_1_0_0_0_1[2] = r_1_0_0_0_1_2;\n }\n {\n address r_1_0_0_0_1_3 = 0x8aA066D11Bc9B752143C797e225c641622a5DD91;\n r_1_0_0_0_1[3] = r_1_0_0_0_1_3;\n }\n r_1_0_0_0.s_1 = r_1_0_0_0_1;\n }\n {\n string memory r_1_0_0_0_2 = unicode\"Moo é🚀oo🚀ooMMoo🚀M éMo🚀🚀o\";\n r_1_0_0_0.s_2 = r_1_0_0_0_2;\n }\n r_1_0_0[0] = r_1_0_0_0;\n }\n {\n S_6ae83230 memory r_1_0_0_1;\n {\n S_e72c145f[4] memory r_1_0_0_1_0;\n {\n S_e72c145f memory r_1_0_0_1_0_0;\n {\n S_14df74d1 memory r_1_0_0_1_0_0_0;\n {\n int56 r_1_0_0_1_0_0_0_0 = -32042862929788282;\n r_1_0_0_1_0_0_0.s_0 = r_1_0_0_1_0_0_0_0;\n }\n r_1_0_0_1_0_0.s_0 = r_1_0_0_1_0_0_0;\n }\n {\n int192 r_1_0_0_1_0_0_1 = 2603899819898477210657560142622102185118010245535397350333;\n r_1_0_0_1_0_0.s_1 = r_1_0_0_1_0_0_1;\n }\n {\n int32 r_1_0_0_1_0_0_2 = -1995661980;\n r_1_0_0_1_0_0.s_2 = r_1_0_0_1_0_0_2;\n }\n r_1_0_0_1_0[0] = r_1_0_0_1_0_0;\n }\n {\n S_e72c145f memory r_1_0_0_1_0_1;\n {\n S_14df74d1 memory r_1_0_0_1_0_1_0;\n {\n int56 r_1_0_0_1_0_1_0_0 = -10056556792085241;\n r_1_0_0_1_0_1_0.s_0 = r_1_0_0_1_0_1_0_0;\n }\n r_1_0_0_1_0_1.s_0 = r_1_0_0_1_0_1_0;\n }\n {\n int192 r_1_0_0_1_0_1_1 = -2492291202495877727687805730532535552432619415155093360040;\n r_1_0_0_1_0_1.s_1 = r_1_0_0_1_0_1_1;\n }\n {\n int32 r_1_0_0_1_0_1_2 = 1208568177;\n r_1_0_0_1_0_1.s_2 = r_1_0_0_1_0_1_2;\n }\n r_1_0_0_1_0[1] = r_1_0_0_1_0_1;\n }\n {\n S_e72c145f memory r_1_0_0_1_0_2;\n {\n S_14df74d1 memory r_1_0_0_1_0_2_0;\n {\n int56 r_1_0_0_1_0_2_0_0 = -19399278290947438;\n r_1_0_0_1_0_2_0.s_0 = r_1_0_0_1_0_2_0_0;\n }\n r_1_0_0_1_0_2.s_0 = r_1_0_0_1_0_2_0;\n }\n {\n int192 r_1_0_0_1_0_2_1 = 1063135826917562614376931844938258621170403285787272215248;\n r_1_0_0_1_0_2.s_1 = r_1_0_0_1_0_2_1;\n }\n {\n int32 r_1_0_0_1_0_2_2 = 855890345;\n r_1_0_0_1_0_2.s_2 = r_1_0_0_1_0_2_2;\n }\n r_1_0_0_1_0[2] = r_1_0_0_1_0_2;\n }\n {\n S_e72c145f memory r_1_0_0_1_0_3;\n {\n S_14df74d1 memory r_1_0_0_1_0_3_0;\n {\n int56 r_1_0_0_1_0_3_0_0 = -19463370243233104;\n r_1_0_0_1_0_3_0.s_0 = r_1_0_0_1_0_3_0_0;\n }\n r_1_0_0_1_0_3.s_0 = r_1_0_0_1_0_3_0;\n }\n {\n int192 r_1_0_0_1_0_3_1 = 1030799798091876611016639600343341243648831311172911166875;\n r_1_0_0_1_0_3.s_1 = r_1_0_0_1_0_3_1;\n }\n {\n int32 r_1_0_0_1_0_3_2 = 465874764;\n r_1_0_0_1_0_3.s_2 = r_1_0_0_1_0_3_2;\n }\n r_1_0_0_1_0[3] = r_1_0_0_1_0_3;\n }\n r_1_0_0_1.s_0 = r_1_0_0_1_0;\n }\n {\n address[4] memory r_1_0_0_1_1;\n {\n address r_1_0_0_1_1_0 = 0x8d7FE0ac167bE6ecdcA434Cbd2644Fd7EA0E7a87;\n r_1_0_0_1_1[0] = r_1_0_0_1_1_0;\n }\n {\n address r_1_0_0_1_1_1 = 0xeBE7c70E9307351C7069D57365d5eB90B355f4D3;\n r_1_0_0_1_1[1] = r_1_0_0_1_1_1;\n }\n {\n address r_1_0_0_1_1_2 = 0x1266B35909d0e3639AAC2657b98Cc56C8881De35;\n r_1_0_0_1_1[2] = r_1_0_0_1_1_2;\n }\n {\n address r_1_0_0_1_1_3 = 0xC34E6833B223ebe20674a848603cb59407AA5431;\n r_1_0_0_1_1[3] = r_1_0_0_1_1_3;\n }\n r_1_0_0_1.s_1 = r_1_0_0_1_1;\n }\n {\n string memory r_1_0_0_1_2 = unicode\"Moo é🚀🚀MéMoéé🚀 éoéooé🚀🚀 éM🚀M🚀ooéM M\";\n r_1_0_0_1.s_2 = r_1_0_0_1_2;\n }\n r_1_0_0[1] = r_1_0_0_1;\n }\n {\n S_6ae83230 memory r_1_0_0_2;\n {\n S_e72c145f[4] memory r_1_0_0_2_0;\n {\n S_e72c145f memory r_1_0_0_2_0_0;\n {\n S_14df74d1 memory r_1_0_0_2_0_0_0;\n {\n int56 r_1_0_0_2_0_0_0_0 = -11753802284653141;\n r_1_0_0_2_0_0_0.s_0 = r_1_0_0_2_0_0_0_0;\n }\n r_1_0_0_2_0_0.s_0 = r_1_0_0_2_0_0_0;\n }\n {\n int192 r_1_0_0_2_0_0_1 = -199763565511122050349974315878941624335627271595391776545;\n r_1_0_0_2_0_0.s_1 = r_1_0_0_2_0_0_1;\n }\n {\n int32 r_1_0_0_2_0_0_2 = 597954525;\n r_1_0_0_2_0_0.s_2 = r_1_0_0_2_0_0_2;\n }\n r_1_0_0_2_0[0] = r_1_0_0_2_0_0;\n }\n {\n S_e72c145f memory r_1_0_0_2_0_1;\n {\n S_14df74d1 memory r_1_0_0_2_0_1_0;\n {\n int56 r_1_0_0_2_0_1_0_0 = 22602833334264112;\n r_1_0_0_2_0_1_0.s_0 = r_1_0_0_2_0_1_0_0;\n }\n r_1_0_0_2_0_1.s_0 = r_1_0_0_2_0_1_0;\n }\n {\n int192 r_1_0_0_2_0_1_1 = 2828316515682751905828670341251447074361823374232374159551;\n r_1_0_0_2_0_1.s_1 = r_1_0_0_2_0_1_1;\n }\n {\n int32 r_1_0_0_2_0_1_2 = 1640403838;\n r_1_0_0_2_0_1.s_2 = r_1_0_0_2_0_1_2;\n }\n r_1_0_0_2_0[1] = r_1_0_0_2_0_1;\n }\n {\n S_e72c145f memory r_1_0_0_2_0_2;\n {\n S_14df74d1 memory r_1_0_0_2_0_2_0;\n {\n int56 r_1_0_0_2_0_2_0_0 = -13942300933792374;\n r_1_0_0_2_0_2_0.s_0 = r_1_0_0_2_0_2_0_0;\n }\n r_1_0_0_2_0_2.s_0 = r_1_0_0_2_0_2_0;\n }\n {\n int192 r_1_0_0_2_0_2_1 = 2839930250798414661531499206888100308389799626153707389633;\n r_1_0_0_2_0_2.s_1 = r_1_0_0_2_0_2_1;\n }\n {\n int32 r_1_0_0_2_0_2_2 = 996445074;\n r_1_0_0_2_0_2.s_2 = r_1_0_0_2_0_2_2;\n }\n r_1_0_0_2_0[2] = r_1_0_0_2_0_2;\n }\n {\n S_e72c145f memory r_1_0_0_2_0_3;\n {\n S_14df74d1 memory r_1_0_0_2_0_3_0;\n {\n int56 r_1_0_0_2_0_3_0_0 = 32547961484778419;\n r_1_0_0_2_0_3_0.s_0 = r_1_0_0_2_0_3_0_0;\n }\n r_1_0_0_2_0_3.s_0 = r_1_0_0_2_0_3_0;\n }\n {\n int192 r_1_0_0_2_0_3_1 = 1629999289311468287529557947852515268838601340840037611061;\n r_1_0_0_2_0_3.s_1 = r_1_0_0_2_0_3_1;\n }\n {\n int32 r_1_0_0_2_0_3_2 = 919153637;\n r_1_0_0_2_0_3.s_2 = r_1_0_0_2_0_3_2;\n }\n r_1_0_0_2_0[3] = r_1_0_0_2_0_3;\n }\n r_1_0_0_2.s_0 = r_1_0_0_2_0;\n }\n {\n address[4] memory r_1_0_0_2_1;\n {\n address r_1_0_0_2_1_0 = 0x42Cd74066F3b72b338E8e4E3766D68f48C47DC33;\n r_1_0_0_2_1[0] = r_1_0_0_2_1_0;\n }\n {\n address r_1_0_0_2_1_1 = 0x016D450BF5243681f0927bABDe6B90b080E0646D;\n r_1_0_0_2_1[1] = r_1_0_0_2_1_1;\n }\n {\n address r_1_0_0_2_1_2 = 0xE20d1773FCCa7234872F818eC4598d102D1F4C02;\n r_1_0_0_2_1[2] = r_1_0_0_2_1_2;\n }\n {\n address r_1_0_0_2_1_3 = 0xa38ca6CBd94e5361d242fc7ffA95Cb7b81B9Ec1C;\n r_1_0_0_2_1[3] = r_1_0_0_2_1_3;\n }\n r_1_0_0_2.s_1 = r_1_0_0_2_1;\n }\n {\n string memory r_1_0_0_2_2 = unicode\"Moo é🚀o🚀é M 🚀o🚀o🚀 éoMo 🚀🚀oo🚀🚀oooooo🚀🚀\";\n r_1_0_0_2.s_2 = r_1_0_0_2_2;\n }\n r_1_0_0[2] = r_1_0_0_2;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0x0C97B35bb0B2b696d9652e6DBb1b9D35A89d2c71;\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n {\n S_d3eb2c12 memory r_2;\n {\n S_cc61e3dd memory r_2_0;\n {\n S_6ae83230[3] memory r_2_0_0;\n {\n S_6ae83230 memory r_2_0_0_0;\n {\n S_e72c145f[4] memory r_2_0_0_0_0;\n {\n S_e72c145f memory r_2_0_0_0_0_0;\n {\n S_14df74d1 memory r_2_0_0_0_0_0_0;\n {\n int56 r_2_0_0_0_0_0_0_0 = -21591543933069159;\n r_2_0_0_0_0_0_0.s_0 = r_2_0_0_0_0_0_0_0;\n }\n r_2_0_0_0_0_0.s_0 = r_2_0_0_0_0_0_0;\n }\n {\n int192 r_2_0_0_0_0_0_1 = 2252824927820877503145152899891141242204973190486289706538;\n r_2_0_0_0_0_0.s_1 = r_2_0_0_0_0_0_1;\n }\n {\n int32 r_2_0_0_0_0_0_2 = -1455958590;\n r_2_0_0_0_0_0.s_2 = r_2_0_0_0_0_0_2;\n }\n r_2_0_0_0_0[0] = r_2_0_0_0_0_0;\n }\n {\n S_e72c145f memory r_2_0_0_0_0_1;\n {\n S_14df74d1 memory r_2_0_0_0_0_1_0;\n {\n int56 r_2_0_0_0_0_1_0_0 = 34603657943548194;\n r_2_0_0_0_0_1_0.s_0 = r_2_0_0_0_0_1_0_0;\n }\n r_2_0_0_0_0_1.s_0 = r_2_0_0_0_0_1_0;\n }\n {\n int192 r_2_0_0_0_0_1_1 = -1511089918744345713837258884959740637875986695554303103089;\n r_2_0_0_0_0_1.s_1 = r_2_0_0_0_0_1_1;\n }\n {\n int32 r_2_0_0_0_0_1_2 = 1564688144;\n r_2_0_0_0_0_1.s_2 = r_2_0_0_0_0_1_2;\n }\n r_2_0_0_0_0[1] = r_2_0_0_0_0_1;\n }\n {\n S_e72c145f memory r_2_0_0_0_0_2;\n {\n S_14df74d1 memory r_2_0_0_0_0_2_0;\n {\n int56 r_2_0_0_0_0_2_0_0 = -19594904696482284;\n r_2_0_0_0_0_2_0.s_0 = r_2_0_0_0_0_2_0_0;\n }\n r_2_0_0_0_0_2.s_0 = r_2_0_0_0_0_2_0;\n }\n {\n int192 r_2_0_0_0_0_2_1 = 2349786227666435407315732870680591711519093690361464538392;\n r_2_0_0_0_0_2.s_1 = r_2_0_0_0_0_2_1;\n }\n {\n int32 r_2_0_0_0_0_2_2 = -684545224;\n r_2_0_0_0_0_2.s_2 = r_2_0_0_0_0_2_2;\n }\n r_2_0_0_0_0[2] = r_2_0_0_0_0_2;\n }\n {\n S_e72c145f memory r_2_0_0_0_0_3;\n {\n S_14df74d1 memory r_2_0_0_0_0_3_0;\n {\n int56 r_2_0_0_0_0_3_0_0 = 4959687490109630;\n r_2_0_0_0_0_3_0.s_0 = r_2_0_0_0_0_3_0_0;\n }\n r_2_0_0_0_0_3.s_0 = r_2_0_0_0_0_3_0;\n }\n {\n int192 r_2_0_0_0_0_3_1 = 199356796803910550091059421704216859561049087143703225408;\n r_2_0_0_0_0_3.s_1 = r_2_0_0_0_0_3_1;\n }\n {\n int32 r_2_0_0_0_0_3_2 = -73746415;\n r_2_0_0_0_0_3.s_2 = r_2_0_0_0_0_3_2;\n }\n r_2_0_0_0_0[3] = r_2_0_0_0_0_3;\n }\n r_2_0_0_0.s_0 = r_2_0_0_0_0;\n }\n {\n address[4] memory r_2_0_0_0_1;\n {\n address r_2_0_0_0_1_0 = 0xBd553Bf894d988f6d5Df075540eEC34D21B4e95A;\n r_2_0_0_0_1[0] = r_2_0_0_0_1_0;\n }\n {\n address r_2_0_0_0_1_1 = 0xCAa2D5f42854dA84f7BCf393d171fD5703ecE403;\n r_2_0_0_0_1[1] = r_2_0_0_0_1_1;\n }\n {\n address r_2_0_0_0_1_2 = 0x11773114d9f49bdc6C9909200304175a32749eEb;\n r_2_0_0_0_1[2] = r_2_0_0_0_1_2;\n }\n {\n address r_2_0_0_0_1_3 = 0x9846E60C0911D711c976dDe22165c6a51909F0d3;\n r_2_0_0_0_1[3] = r_2_0_0_0_1_3;\n }\n r_2_0_0_0.s_1 = r_2_0_0_0_1;\n }\n {\n string memory r_2_0_0_0_2 = unicode\"Moo é🚀o oéM🚀o🚀oM🚀🚀 🚀MMo🚀éMo🚀oé éo o \";\n r_2_0_0_0.s_2 = r_2_0_0_0_2;\n }\n r_2_0_0[0] = r_2_0_0_0;\n }\n {\n S_6ae83230 memory r_2_0_0_1;\n {\n S_e72c145f[4] memory r_2_0_0_1_0;\n {\n S_e72c145f memory r_2_0_0_1_0_0;\n {\n S_14df74d1 memory r_2_0_0_1_0_0_0;\n {\n int56 r_2_0_0_1_0_0_0_0 = 5908220507039595;\n r_2_0_0_1_0_0_0.s_0 = r_2_0_0_1_0_0_0_0;\n }\n r_2_0_0_1_0_0.s_0 = r_2_0_0_1_0_0_0;\n }\n {\n int192 r_2_0_0_1_0_0_1 = -508585400579408089109053672852126487494521641570469894593;\n r_2_0_0_1_0_0.s_1 = r_2_0_0_1_0_0_1;\n }\n {\n int32 r_2_0_0_1_0_0_2 = 1227762368;\n r_2_0_0_1_0_0.s_2 = r_2_0_0_1_0_0_2;\n }\n r_2_0_0_1_0[0] = r_2_0_0_1_0_0;\n }\n {\n S_e72c145f memory r_2_0_0_1_0_1;\n {\n S_14df74d1 memory r_2_0_0_1_0_1_0;\n {\n int56 r_2_0_0_1_0_1_0_0 = 6004956187265209;\n r_2_0_0_1_0_1_0.s_0 = r_2_0_0_1_0_1_0_0;\n }\n r_2_0_0_1_0_1.s_0 = r_2_0_0_1_0_1_0;\n }\n {\n int192 r_2_0_0_1_0_1_1 = 73775672659601078168916585951707376031920718672347027433;\n r_2_0_0_1_0_1.s_1 = r_2_0_0_1_0_1_1;\n }\n {\n int32 r_2_0_0_1_0_1_2 = 1473789968;\n r_2_0_0_1_0_1.s_2 = r_2_0_0_1_0_1_2;\n }\n r_2_0_0_1_0[1] = r_2_0_0_1_0_1;\n }\n {\n S_e72c145f memory r_2_0_0_1_0_2;\n {\n S_14df74d1 memory r_2_0_0_1_0_2_0;\n {\n int56 r_2_0_0_1_0_2_0_0 = 16016490746387454;\n r_2_0_0_1_0_2_0.s_0 = r_2_0_0_1_0_2_0_0;\n }\n r_2_0_0_1_0_2.s_0 = r_2_0_0_1_0_2_0;\n }\n {\n int192 r_2_0_0_1_0_2_1 = 2132373353892504150694462614830992417579078860518779567875;\n r_2_0_0_1_0_2.s_1 = r_2_0_0_1_0_2_1;\n }\n {\n int32 r_2_0_0_1_0_2_2 = -1128997231;\n r_2_0_0_1_0_2.s_2 = r_2_0_0_1_0_2_2;\n }\n r_2_0_0_1_0[2] = r_2_0_0_1_0_2;\n }\n {\n S_e72c145f memory r_2_0_0_1_0_3;\n {\n S_14df74d1 memory r_2_0_0_1_0_3_0;\n {\n int56 r_2_0_0_1_0_3_0_0 = -35739625347395923;\n r_2_0_0_1_0_3_0.s_0 = r_2_0_0_1_0_3_0_0;\n }\n r_2_0_0_1_0_3.s_0 = r_2_0_0_1_0_3_0;\n }\n {\n int192 r_2_0_0_1_0_3_1 = 1159849174197563990556592321955819442812601903770361434551;\n r_2_0_0_1_0_3.s_1 = r_2_0_0_1_0_3_1;\n }\n {\n int32 r_2_0_0_1_0_3_2 = -1189140657;\n r_2_0_0_1_0_3.s_2 = r_2_0_0_1_0_3_2;\n }\n r_2_0_0_1_0[3] = r_2_0_0_1_0_3;\n }\n r_2_0_0_1.s_0 = r_2_0_0_1_0;\n }\n {\n address[4] memory r_2_0_0_1_1;\n {\n address r_2_0_0_1_1_0 = 0xdF320C85B875f3D5F9226eF71d738342706720c6;\n r_2_0_0_1_1[0] = r_2_0_0_1_1_0;\n }\n {\n address r_2_0_0_1_1_1 = 0xEb94f430a0345E22C83B513ABefc17F42d9195D7;\n r_2_0_0_1_1[1] = r_2_0_0_1_1_1;\n }\n {\n address r_2_0_0_1_1_2 = 0x9f24Ab538fd2A937B84bb160319710Ce0FC3316F;\n r_2_0_0_1_1[2] = r_2_0_0_1_1_2;\n }\n {\n address r_2_0_0_1_1_3 = 0xFC5592b162388BcC0a4488A3000d173b56dA1AC2;\n r_2_0_0_1_1[3] = r_2_0_0_1_1_3;\n }\n r_2_0_0_1.s_1 = r_2_0_0_1_1;\n }\n {\n string memory r_2_0_0_1_2 = unicode\"Moo é🚀é🚀o é MooooMMoo🚀🚀 MM\";\n r_2_0_0_1.s_2 = r_2_0_0_1_2;\n }\n r_2_0_0[1] = r_2_0_0_1;\n }\n {\n S_6ae83230 memory r_2_0_0_2;\n {\n S_e72c145f[4] memory r_2_0_0_2_0;\n {\n S_e72c145f memory r_2_0_0_2_0_0;\n {\n S_14df74d1 memory r_2_0_0_2_0_0_0;\n {\n int56 r_2_0_0_2_0_0_0_0 = -6565989801617046;\n r_2_0_0_2_0_0_0.s_0 = r_2_0_0_2_0_0_0_0;\n }\n r_2_0_0_2_0_0.s_0 = r_2_0_0_2_0_0_0;\n }\n {\n int192 r_2_0_0_2_0_0_1 = 1534604465317063736108220184621113982013914343520136754289;\n r_2_0_0_2_0_0.s_1 = r_2_0_0_2_0_0_1;\n }\n {\n int32 r_2_0_0_2_0_0_2 = -1366928012;\n r_2_0_0_2_0_0.s_2 = r_2_0_0_2_0_0_2;\n }\n r_2_0_0_2_0[0] = r_2_0_0_2_0_0;\n }\n {\n S_e72c145f memory r_2_0_0_2_0_1;\n {\n S_14df74d1 memory r_2_0_0_2_0_1_0;\n {\n int56 r_2_0_0_2_0_1_0_0 = 29465648336070225;\n r_2_0_0_2_0_1_0.s_0 = r_2_0_0_2_0_1_0_0;\n }\n r_2_0_0_2_0_1.s_0 = r_2_0_0_2_0_1_0;\n }\n {\n int192 r_2_0_0_2_0_1_1 = 1482113964397174789241619419160118886863804230347317648606;\n r_2_0_0_2_0_1.s_1 = r_2_0_0_2_0_1_1;\n }\n {\n int32 r_2_0_0_2_0_1_2 = 1627878877;\n r_2_0_0_2_0_1.s_2 = r_2_0_0_2_0_1_2;\n }\n r_2_0_0_2_0[1] = r_2_0_0_2_0_1;\n }\n {\n S_e72c145f memory r_2_0_0_2_0_2;\n {\n S_14df74d1 memory r_2_0_0_2_0_2_0;\n {\n int56 r_2_0_0_2_0_2_0_0 = 27179369318718028;\n r_2_0_0_2_0_2_0.s_0 = r_2_0_0_2_0_2_0_0;\n }\n r_2_0_0_2_0_2.s_0 = r_2_0_0_2_0_2_0;\n }\n {\n int192 r_2_0_0_2_0_2_1 = 635946567756576973439750041740985017279531138213852644524;\n r_2_0_0_2_0_2.s_1 = r_2_0_0_2_0_2_1;\n }\n {\n int32 r_2_0_0_2_0_2_2 = -2099439419;\n r_2_0_0_2_0_2.s_2 = r_2_0_0_2_0_2_2;\n }\n r_2_0_0_2_0[2] = r_2_0_0_2_0_2;\n }\n {\n S_e72c145f memory r_2_0_0_2_0_3;\n {\n S_14df74d1 memory r_2_0_0_2_0_3_0;\n {\n int56 r_2_0_0_2_0_3_0_0 = 25553371565296073;\n r_2_0_0_2_0_3_0.s_0 = r_2_0_0_2_0_3_0_0;\n }\n r_2_0_0_2_0_3.s_0 = r_2_0_0_2_0_3_0;\n }\n {\n int192 r_2_0_0_2_0_3_1 = -1555305043261312817301316874614419357925233059329136266856;\n r_2_0_0_2_0_3.s_1 = r_2_0_0_2_0_3_1;\n }\n {\n int32 r_2_0_0_2_0_3_2 = -1572159740;\n r_2_0_0_2_0_3.s_2 = r_2_0_0_2_0_3_2;\n }\n r_2_0_0_2_0[3] = r_2_0_0_2_0_3;\n }\n r_2_0_0_2.s_0 = r_2_0_0_2_0;\n }\n {\n address[4] memory r_2_0_0_2_1;\n {\n address r_2_0_0_2_1_0 = 0xe1e6d064a788276c0Ac027F562d11a47620A0CAE;\n r_2_0_0_2_1[0] = r_2_0_0_2_1_0;\n }\n {\n address r_2_0_0_2_1_1 = 0x88C04d6Be1e7FbF518849f339901e8e6895bfb52;\n r_2_0_0_2_1[1] = r_2_0_0_2_1_1;\n }\n {\n address r_2_0_0_2_1_2 = 0xFcDD91852C53002eb9626025Fcc574385df32d5C;\n r_2_0_0_2_1[2] = r_2_0_0_2_1_2;\n }\n {\n address r_2_0_0_2_1_3 = 0x68e935c26d60cDaa61585F0f27d1342b577A77B3;\n r_2_0_0_2_1[3] = r_2_0_0_2_1_3;\n }\n r_2_0_0_2.s_1 = r_2_0_0_2_1;\n }\n {\n string memory r_2_0_0_2_2 = unicode\"Moo é🚀 🚀oMoooéo🚀o MM🚀oooooo 🚀o oo\";\n r_2_0_0_2.s_2 = r_2_0_0_2_2;\n }\n r_2_0_0[2] = r_2_0_0_2;\n }\n r_2_0.s_0 = r_2_0_0;\n }\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0xA6Ae09F3752170c0Bf3cB021E93e4E83Ac7534d4;\n r_2.s_1 = r_2_1;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000008a000000000000000000000000000000000000000000000000000000000000011200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000b3cc0929ce011aeefd5e7481d2affe926c4b41d80000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000560000000000000000000000000000000000000000000000000001ae1136ee42ccf00000000000000001f2687e1cd1fb97755fb9431472cd495e130feffb823c70f0000000000000000000000000000000000000000000000000000000070445587000000000000000000000000000000000000000000000000001d6b56f65b116dffffffffffffffff934f6e117fa7ce0621d7243f1ff92c4929395b589ff5d1b5ffffffffffffffffffffffffffffffffffffffffffffffffffffffff863b52270000000000000000000000000000000000000000000000000044c09f63cbde8e000000000000000022b0d6fcbf19615fef79240f9e53507f7f8d0b1c2059b325ffffffffffffffffffffffffffffffffffffffffffffffffffffffffa3e55d08000000000000000000000000000000000000000000000000002c3975e08c7130fffffffffffffffff5b2a885a6d8fee360b19b5cafe787bab4f947c8f8dfec79ffffffffffffffffffffffffffffffffffffffffffffffffffffffffa70797ec000000000000000000000000b13a2c96db0b93b955736a032f78bc412cdff52a00000000000000000000000023b49e40372be1d29ea88db074527f8afcc1b4fa000000000000000000000000e3cd0ca3a4344fce4e2773103ee5d6d963c2d2d6000000000000000000000000a1428ddbc8bd4f29b6f9882585d801f1cf884c53000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a806f4d4df09f9a80f09f9a806fc3a96f4d20206ff09f9a806fc3a94d6f6f2020204d6f6ff09f9a80000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffff01fdc5175b4d3ffffffffffffffffd4a341f6c251ea9bedf3222d7a1fc7348c86e77527597b46ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2314607ffffffffffffffffffffffffffffffffffffffffffffffffff8411eb66e11494ffffffffffffffff8da85f1a1ae2b8ff71d20b1ca54d0c3b3b3a4a8512b0515b00000000000000000000000000000000000000000000000000000000327b1d2d00000000000000000000000000000000000000000000000000240d2cc6bc1eb1ffffffffffffffff8ea0c5776a2c7b449bffa0650f7ffd9eb7ca504481020b78ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe462ef65ffffffffffffffffffffffffffffffffffffffffffffffffffaf3c6b64a50f14ffffffffffffffffe291caeb395f53d45d3f4576477e8572a5793e8de6f07ce700000000000000000000000000000000000000000000000000000000756db06100000000000000000000000040849bc2accbff11f2bcbd827c224f999a77b4e60000000000000000000000001e9ec57bdbffbec27e75dd4a376b5ab18a752184000000000000000000000000c695c6fa9aadbb699a426f53f9616280e29bafed00000000000000000000000054e0ed0f941631bf7cb7c6b42a1fd3d88d83c6540000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000003b4d6f6f20c3a9f09f9a804dc3a96f204d6f6fc3a92020f09f9a804d20c3a920c3a9f09f9a804df09f9a80f09f9a80c3a96f6f20c3a94d6ff09f9a800000000000fffffffffffffffffffffffffffffffffffffffffffffffffff547bd7bc6d7170000000000000000356695bd5982eaa4088c6d9d62e558f54bc47af8b830abe5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcba10d2d0000000000000000000000000000000000000000000000000039f5c68511f94fffffffffffffffff89fa51b3e6a43fde3e5b90008ca6473d4e5541395cd9425e000000000000000000000000000000000000000000000000000000003135fbeeffffffffffffffffffffffffffffffffffffffffffffffffffeb6eb1647ec3f6ffffffffffffffff92bcd78db61b31893bca45fbad8300b62e7e863e337da9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffad6e422e000000000000000000000000000000000000000000000000001ed45b0e0d17d7ffffffffffffffffcee43f6fa5e807bc0b3af3e5862b49facd5f81dd023326a2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff72c52600000000000000000000000093fccb581ecf7c2af093de25a74b78007beac25e000000000000000000000000a462f7b3d8c02bb7454d33275aaa14bb64d341b20000000000000000000000003b42c465bbccb784a1dc63c1cc0fcc36b92442020000000000000000000000005690753c2b4557388bc5de653aca38c117cede22000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a806f206f4d20c3a96f4d6ff09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000c97b35bb0b2b696d9652e6dbb1b9d35a89d2c710000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000000052b63b533b6982ffffffffffffffffd3ff4bc15cb33f0dbeafaea78a83007d265862e055a7c7c5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffd21f4d3effffffffffffffffffffffffffffffffffffffffffffffffffaebcc319ac79a6000000000000000039a94a47eb8a869501d5c17cf74d2f3246a3d314a1e92e77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffbbb0596dffffffffffffffffffffffffffffffffffffffffffffffffff8b6499487d5e22fffffffffffffffffcbac678b9ed282c1949cf8a412df8eb544bd454f8caf249000000000000000000000000000000000000000000000000000000005c21fa9bffffffffffffffffffffffffffffffffffffffffffffffffffaef5cc601f2e78000000000000000022b401c7117cb17603738332f9f6b03bc866ca45bf97b2210000000000000000000000000000000000000000000000000000000005e5816a000000000000000000000000122590a3351629e39d472453c302d553a6bb5abe00000000000000000000000030ecbe5c93bbfddbaf0f295da08311d483dcb5100000000000000000000000000b350fcdc8fde2db4d5624a50d305027ca3729dc0000000000000000000000008aa066d11bc9b752143c797e225c641622a5dd91000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000294d6f6f20c3a9f09f9a806f6ff09f9a806f6f4d4d6f6ff09f9a804d20c3a94d6ff09f9a80f09f9a806f0000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff8e292f997bc28600000000000000006a31fb8c17ecec73973884144394208bbf59ca98f99c8bbdffffffffffffffffffffffffffffffffffffffffffffffffffffffff890c9d64ffffffffffffffffffffffffffffffffffffffffffffffffffdc459d68be8507ffffffffffffffff9a5b4406d588cb88f2d1adb38c7dcdd21449f656276ab2580000000000000000000000000000000000000000000000000000000048094971ffffffffffffffffffffffffffffffffffffffffffffffffffbb14758c91b29200000000000000002b5ba7eb9388cce4cc91482a48cf177c286a3962f1dafad0000000000000000000000000000000000000000000000000000000003303d9a9ffffffffffffffffffffffffffffffffffffffffffffffffffbada2afa852ab000000000000000002a0a0d52d18f4d63d64e6a4c931761dd31feec4bcb2ef59b000000000000000000000000000000000000000000000000000000001bc4af4c0000000000000000000000008d7fe0ac167be6ecdca434cbd2644fd7ea0e7a87000000000000000000000000ebe7c70e9307351c7069d57365d5eb90b355f4d30000000000000000000000001266b35909d0e3639aac2657b98cc56c8881de35000000000000000000000000c34e6833b223ebe20674a848603cb59407aa5431000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a80f09f9a804dc3a94d6fc3a9c3a9f09f9a8020c3a96fc3a96f6fc3a9f09f9a80f09f9a8020c3a94df09f9a804df09f9a806f6fc3a94d204d00000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffd63dfaa61025abfffffffffffffffff7da5efde2a6dea7f71a9204d5ab5c688858d8f2c41f08df0000000000000000000000000000000000000000000000000000000023a40fdd00000000000000000000000000000000000000000000000000504d283bce613000000000000000007359009274583e9cf3ca997969cadb8dee582f20bb2328bf0000000000000000000000000000000000000000000000000000000061c6937effffffffffffffffffffffffffffffffffffffffffffffffffce778d197d5d8a000000000000000073d2415a7c2d2770cdc2121801fbd019080f0e92644b42c1000000000000000000000000000000000000000000000000000000003b648b920000000000000000000000000000000000000000000000000073a232d2769bb300000000000000004279fc93f45684e77c1a2a338601ddd9007e74259b3876350000000000000000000000000000000000000000000000000000000036c92be500000000000000000000000042cd74066f3b72b338e8e4e3766d68f48c47dc33000000000000000000000000016d450bf5243681f0927babde6b90b080e0646d000000000000000000000000e20d1773fcca7234872f818ec4598d102d1f4c02000000000000000000000000a38ca6cbd94e5361d242fc7ffa95cb7b81b9ec1c0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a806ff09f9a80c3a9204d20f09f9a806ff09f9a806ff09f9a802020c3a96f4d6f20f09f9a80f09f9a806f6ff09f9a80f09f9a806f6f6f6f6f6ff09f9a80f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a6ae09f3752170c0bf3cb021e93e4e83ac7534d40000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000580ffffffffffffffffffffffffffffffffffffffffffffffffffb34a9aedb7989900000000000000005be096f71082000df1395bbfd90bdfe274a7b3c90e066e2affffffffffffffffffffffffffffffffffffffffffffffffffffffffa937d5c2000000000000000000000000000000000000000000000000007aefd7f3a78122ffffffffffffffffc25f7c30ffdabe64576f4954637e8127e0ac625f6d626f8f000000000000000000000000000000000000000000000000000000005d433f10ffffffffffffffffffffffffffffffffffffffffffffffffffba6289ba28961400000000000000005fd4e9b4a01296e65de0b60a0e237b5caf3060e54314c518ffffffffffffffffffffffffffffffffffffffffffffffffffffffffd732ab3800000000000000000000000000000000000000000000000000119ecf3b0b80be0000000000000000082161cfabc11a3ef1e348579d9c4ef1aecb625a307c2440fffffffffffffffffffffffffffffffffffffffffffffffffffffffffb9ab811000000000000000000000000bd553bf894d988f6d5df075540eec34d21b4e95a000000000000000000000000caa2d5f42854da84f7bcf393d171fd5703ece40300000000000000000000000011773114d9f49bdc6c9909200304175a32749eeb0000000000000000000000009846e60c0911d711c976dde22165c6a51909f0d3000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a806f20206fc3a94df09f9a806ff09f9a806f4df09f9a80f09f9a8020f09f9a804d4d6ff09f9a80c3a94d6ff09f9a806fc3a920c3a96f206f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014fd7ec893a76bffffffffffffffffeb421ee3a6c1b66430d2fd707c69691aaa138bb680b8a63f00000000000000000000000000000000000000000000000000000000492e2ac000000000000000000000000000000000000000000000000000155579d06f08b9000000000000000003024103ac4dbd82a754091961a8b8c36b510b3b166c57e90000000000000000000000000000000000000000000000000000000057d840100000000000000000000000000000000000000000000000000038e6e9d97c9bfe000000000000000056f7043fc01739614f6b740c8dcfcdeb094181662274bf03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffbcb4de91ffffffffffffffffffffffffffffffffffffffffffffffffff81070006c34ead00000000000000002f4d63f11b6e846a5545f6968257b9b228ca4ccd61cc91b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffb91f274f000000000000000000000000df320c85b875f3d5f9226ef71d738342706720c6000000000000000000000000eb94f430a0345e22c83b513abefc17f42d9195d70000000000000000000000009f24ab538fd2a937b84bb160319710ce0fc3316f000000000000000000000000fc5592b162388bcc0a4488a3000d173b56da1ac20000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a80c3a9f09f9a806f20c3a920204d6f6f6f6f4d4d6f6ff09f9a80f09f9a80204d4d00000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffe8ac445e46996a00000000000000003e9604a8aa59de86b88e2312da880e48a5af0f12a3427471ffffffffffffffffffffffffffffffffffffffffffffffffffffffffae8655740000000000000000000000000000000000000000000000000068aed9de25e65100000000000000003c71fde67f04159590801e7e1c0640862f37176d27511cde00000000000000000000000000000000000000000000000000000000610775dd00000000000000000000000000000000000000000000000000608f7e0d761a4c000000000000000019ef978b36bdbecb0d06aa25ca33073966a2ac72c2ee84acffffffffffffffffffffffffffffffffffffffffffffffffffffffff82dd18c5000000000000000000000000000000000000000000000000005ac8a7f2f689c9ffffffffffffffffc091db912328eef5d01b57623b21820347e1d449a6c9f198ffffffffffffffffffffffffffffffffffffffffffffffffffffffffa24abf04000000000000000000000000e1e6d064a788276c0ac027f562d11a47620a0cae00000000000000000000000088c04d6be1e7fbf518849f339901e8e6895bfb52000000000000000000000000fcdd91852c53002eb9626025fcc574385df32d5c00000000000000000000000068e935c26d60cdaa61585f0f27d1342b577a77b3000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a802020f09f9a806f4d6f6f6fc3a96ff09f9a806f204d4df09f9a806f6f6f6f6f6f20f09f9a806f202020206f6f00000000000000000000" + }, + { + "name": "random-((((string,address,string)),bool,(address,string,string),bytes11),string,string)", + "type": "((((string,address,string)),bool,(address,string,string),bytes11),string,string)", + "value": [ + [ + [ + [ + "Moo é🚀oéM🚀ééo o🚀 🚀oooé éMo éé🚀 🚀oo🚀ooé🚀oo🚀o🚀o M MoM🚀éM ", + "0xEE583BB596ec9b27e3fF0D41743987CCF12d44a1", + "Moo é🚀 MMooMéooooo é 🚀éé éM🚀o🚀🚀MMMooééo" + ] + ], + true, + [ + "0x9711eBe28A09B85979b4223be5Fbf757eC947a3f", + "Moo é🚀🚀ooMoo🚀M🚀ooé MoéoéooMoo o o🚀M 🚀é", + "Moo é🚀o🚀M🚀ooéooMéoMoéoéMéoé🚀 éM Mo" + ], + "0x9204316f201d5dacbfee6b" + ], + "Moo é🚀", + "Moo é🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéM🚀ééo o🚀 🚀oooé éMo éé🚀 🚀oo🚀ooé🚀oo🚀o🚀o M MoM🚀éM " + }, + { + "type": "address", + "value": "0xEE583BB596ec9b27e3fF0D41743987CCF12d44a1" + }, + { + "type": "string", + "value": "Moo é🚀 MMooMéooooo é 🚀éé éM🚀o🚀🚀MMMooééo" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x9711eBe28A09B85979b4223be5Fbf757eC947a3f" + }, + { + "type": "string", + "value": "Moo é🚀🚀ooMoo🚀M🚀ooé MoéoéooMoo o o🚀M 🚀é" + }, + { + "type": "string", + "value": "Moo é🚀o🚀M🚀ooéooMéoMoéoéMéoé🚀 éM Mo" + } + ] + }, + { + "type": "hexstring", + "value": "0x9204316f201d5dacbfee6b" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061055b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061030c565b60405180910390f35b6100566101f1565b61005e6101f1565b610066610218565b60408051608081018252606060208201818152600093830193909352808201529081526040805160608082018352808252600060208301529181019190915260006040518060a001604052806063815260200161048d6063913982525073ee583bb596ec9b27e3ff0d41743987ccf12d44a16020808301919091526040805160608101909152603f808252600092610411908301396040808401919091529183525090825260016020808401919091528151606080820184526000825291810182905291820152739711ebe28a09b85979b4223be5fbf757ec947a3f81526040805160608101909152603d80825260009190610450602083013990508082602001819052505060006040518060600160405280603681526020016104f06036913960408084019190915283810192909252506a9204316f201d5dacbfee6b60a81b606083015290825280518082018252600a808252689adede418753e13f3560b71b602080840182905280860193909352835180850185529182529181019190915290820152919050565b6040518060600160405280610204610218565b815260200160608152602001606081525090565b6040805161010081018252606060a08201818152600060c0840181905260e084018390526080840191825290835260208084018290528451808401865291825281018290528084019190915290918201908152600060209091015290565b6000815180845260005b8181101561029c57602081850181015186830182015201610280565b818111156102ae576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b03815116825260006020820151606060208501526102ea6060850182610276565b9050604083015184820360408601526103038282610276565b95945050505050565b6000602080835283516060828501528051608080860152805190508261010086015280516060610120870152610346610180870182610276565b828501516001600160a01b031661014088015260409092015186830361011f190161016088015291905061037a8183610276565b9150508282015161038f60a087018215159052565b506040820151858203607f190160c08701526103ab82826102c3565b915050606082015191506103cb60e08601836001600160a81b0319169052565b828601519250601f199150818582030160408601526103ea8184610276565b9250506040850151818584030160608601526104068382610276565b969550505050505056fe4d6f6f20c3a9f09f9a80204d4d6f6f4dc3a96f6f6f6f6f20c3a92020f09f9a80c3a9c3a920c3a94df09f9a806ff09f9a80f09f9a804d4d4d6f6fc3a9c3a96f4d6f6f20c3a9f09f9a80f09f9a806f6f4d6f6ff09f9a804df09f9a806f6fc3a9204d6fc3a96fc3a96f6f4d6f6f206f206ff09f9a804d20f09f9a80c3a94d6f6f20c3a9f09f9a806fc3a94df09f9a80c3a9c3a96f206ff09f9a8020f09f9a806f6f6fc3a920c3a94d6f20c3a9c3a9f09f9a8020f09f9a806f6ff09f9a806f6fc3a9f09f9a806f6ff09f9a806ff09f9a806f204d20204d6f4df09f9a80c3a94d204d6f6f20c3a9f09f9a806ff09f9a804df09f9a806f6fc3a96f6f4dc3a96f4d6fc3a96fc3a94dc3a96fc3a9f09f9a8020c3a94d204d6fa2646970667358221220feb74013327db758f1b6304bbe3f9872c2d678463129ad0cc093ef531fc0ef2c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7d8f2a5d {\n string s_0;\n address s_1;\n string s_2;\n }\n\n struct S_a67aa342 {\n S_7d8f2a5d s_0;\n }\n\n struct S_23fa3048 {\n address s_0;\n string s_1;\n string s_2;\n }\n\n struct S_dad3b2b7 {\n S_a67aa342 s_0;\n bool s_1;\n S_23fa3048 s_2;\n bytes11 s_3;\n }\n\n struct S_8917bd4d {\n S_dad3b2b7 s_0;\n string s_1;\n string s_2;\n }\n\n function test () public pure returns (S_8917bd4d memory) {\n S_8917bd4d memory r;\n {\n S_dad3b2b7 memory r_0;\n {\n S_a67aa342 memory r_0_0;\n {\n S_7d8f2a5d memory r_0_0_0;\n {\n string memory r_0_0_0_0 = unicode\"Moo é🚀oéM🚀ééo o🚀 🚀oooé éMo éé🚀 🚀oo🚀ooé🚀oo🚀o🚀o M MoM🚀éM \";\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n address r_0_0_0_1 = 0xEE583BB596ec9b27e3fF0D41743987CCF12d44a1;\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n string memory r_0_0_0_2 = unicode\"Moo é🚀 MMooMéooooo é 🚀éé éM🚀o🚀🚀MMMooééo\";\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0.s_1 = r_0_1;\n }\n {\n S_23fa3048 memory r_0_2;\n {\n address r_0_2_0 = 0x9711eBe28A09B85979b4223be5Fbf757eC947a3f;\n r_0_2.s_0 = r_0_2_0;\n }\n {\n string memory r_0_2_1 = unicode\"Moo é🚀🚀ooMoo🚀M🚀ooé MoéoéooMoo o o🚀M 🚀é\";\n r_0_2.s_1 = r_0_2_1;\n }\n {\n string memory r_0_2_2 = unicode\"Moo é🚀o🚀M🚀ooéooMéoMoéoéMéoé🚀 éM Mo\";\n r_0_2.s_2 = r_0_2_2;\n }\n r_0.s_2 = r_0_2;\n }\n {\n bytes11 r_0_3 = bytes11(0x9204316f201d5dacbfee6b);\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002009204316f201d5dacbfee6b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000ee583bb596ec9b27e3ff0d41743987ccf12d44a1000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a806fc3a94df09f9a80c3a9c3a96f206ff09f9a8020f09f9a806f6f6fc3a920c3a94d6f20c3a9c3a9f09f9a8020f09f9a806f6ff09f9a806f6fc3a9f09f9a806f6ff09f9a806ff09f9a806f204d20204d6f4df09f9a80c3a94d200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a80204d4d6f6f4dc3a96f6f6f6f6f20c3a92020f09f9a80c3a9c3a920c3a94df09f9a806ff09f9a80f09f9a804d4d4d6f6fc3a9c3a96f000000000000000000000000009711ebe28a09b85979b4223be5fbf757ec947a3f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a80f09f9a806f6f4d6f6ff09f9a804df09f9a806f6fc3a9204d6fc3a96fc3a96f6f4d6f6f206f206ff09f9a804d20f09f9a80c3a900000000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a806ff09f9a804df09f9a806f6fc3a96f6f4dc3a96f4d6fc3a96fc3a94dc3a96fc3a9f09f9a8020c3a94d204d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(((address),int80,string,string),bool[2],address,bool[1])[4]", + "type": "(((address),int80,string,string),bool[2],address,bool[1])[4]", + "value": [ + [ + [ + ["0xc2D4f502845879A8e2618290D8A1a585D0654252"], + "-296010844397397586676821", + "Moo é🚀oé🚀Mooo o M🚀oé 🚀é🚀éMéooé🚀é 🚀ééMo oMoé o🚀🚀oMM éé é", + "Moo é🚀ooooMMooMoMMMMoé Mooo 🚀🚀 MooM🚀oo oo" + ], + [true, true], + "0x7552098B7D5a0C5D6B7E8cbDE9C47AC2e779eE83", + [false] + ], + [ + [ + ["0xd9E116Da28Fb8d7334fA715AF709E8E2b454A926"], + "-223969864464425064121600", + "Moo é🚀ooMéoo 🚀éMMMMoéMo ééééo🚀éoo🚀o🚀oéo MéMéoMMéo Mooé🚀🚀ooé", + "Moo é🚀 🚀é oo🚀🚀oéo 🚀oM🚀 oM 🚀MéoMo🚀 M" + ], + [true, true], + "0xA6971E7ecda37552Dc59c1e04A4ea58336D877c4", + [true] + ], + [ + [ + ["0xa0055a5303af828211F35e1Ae8FCae22d7944420"], + "221705289274371194579465", + "Moo é🚀oM o🚀éMoM🚀éé🚀🚀oMoéMoMo🚀M o ooMooéoM🚀é🚀🚀🚀 o🚀 ", + "Moo é🚀oéo Mooooé🚀M M🚀oMé🚀o" + ], + [true, true], + "0xDb77f5Fa1DA1B61c4792AFEf0eD83198d87260bA", + [false] + ], + [ + [ + ["0x9F6b818A6d6D8ce39A56A1a0ea08F85C6315f5cC"], + "-124507085275057999228527", + "Moo é🚀 🚀oé🚀M🚀é MoMM oo 🚀o🚀oMoMéo🚀 🚀Moooé ooM", + "Moo é🚀" + ], + [true, false], + "0xE7B52F14B256Cf6f228cEe47b7B73791A0F1d992", + [true] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xc2D4f502845879A8e2618290D8A1a585D0654252" + } + ] + }, + { + "type": "number", + "value": "-296010844397397586676821" + }, + { + "type": "string", + "value": "Moo é🚀oé🚀Mooo o M🚀oé 🚀é🚀éMéooé🚀é 🚀ééMo oMoé o🚀🚀oMM éé é" + }, + { + "type": "string", + "value": "Moo é🚀ooooMMooMoMMMMoé Mooo 🚀🚀 MooM🚀oo oo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0x7552098B7D5a0C5D6B7E8cbDE9C47AC2e779eE83" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xd9E116Da28Fb8d7334fA715AF709E8E2b454A926" + } + ] + }, + { + "type": "number", + "value": "-223969864464425064121600" + }, + { + "type": "string", + "value": "Moo é🚀ooMéoo 🚀éMMMMoéMo ééééo🚀éoo🚀o🚀oéo MéMéoMMéo Mooé🚀🚀ooé" + }, + { + "type": "string", + "value": "Moo é🚀 🚀é oo🚀🚀oéo 🚀oM🚀 oM 🚀MéoMo🚀 M" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0xA6971E7ecda37552Dc59c1e04A4ea58336D877c4" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xa0055a5303af828211F35e1Ae8FCae22d7944420" + } + ] + }, + { + "type": "number", + "value": "221705289274371194579465" + }, + { + "type": "string", + "value": "Moo é🚀oM o🚀éMoM🚀éé🚀🚀oMoéMoMo🚀M o ooMooéoM🚀é🚀🚀🚀 o🚀 " + }, + { + "type": "string", + "value": "Moo é🚀oéo Mooooé🚀M M🚀oMé🚀o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0xDb77f5Fa1DA1B61c4792AFEf0eD83198d87260bA" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x9F6b818A6d6D8ce39A56A1a0ea08F85C6315f5cC" + } + ] + }, + { + "type": "number", + "value": "-124507085275057999228527" + }, + { + "type": "string", + "value": "Moo é🚀 🚀oé🚀M🚀é MoMM oo 🚀o🚀oMoMéo🚀 🚀Moooé ooM" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0xE7B52F14B256Cf6f228cEe47b7B73791A0F1d992" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061083f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610519565b60405180910390f35b6100566103ae565b61005e6103ae565b6100666103db565b61006e610414565b604080516020808201835273c2d4f502845879a8e2618290d8a1a585d06542528252908352693eaec7aff6c387530c541983820152815160a0810190925260628083526000929161064790830139604080840191909152805160608101909152603a8082526000925061078f602083013960608301525081526100ef610440565b6001808252602080830191909152820152737552098b7d5a0c5d6b7e8cbde9c47ac2e779ee83604082015261012261045e565b60008152606082015281526101356103db565b61013d610414565b604080516020808201835273d9e116da28fb8d7334fa715af709e8e2b454a9268252908352692f6d6e411f3207ccc4ff1983820152815160808101909252606080835260009291610705908301396040808401919091528051608081019091526041808252600092506107c9602083013960608301525081526101be610440565b600180825260208083019190915282015273a6971e7ecda37552dc59c1e04a4ea58336d877c460408201526101f161045e565b60018152606082015260208201526102076103db565b61020f610414565b604080516020808201835273a0055a5303af828211f35e1ae8fcae22d79444208252908352692ef2aaf5de1334316a0983820152815160808101909252605c808352600092916106a990830139604080840191909152805160608101909152602a808252600092506107656020830139606083015250815261028f610440565b600180825260208083019190915282015273db77f5fa1da1b61c4792afef0ed83198d87260ba60408201526102c261045e565b60008152606082015260408201526102d86103db565b6102e0610414565b6040805160208082018352739f6b818a6d6d8ce39a56a1a0ea08f85c6315f5cc8252908352691a5d8ae8f6dafccaae6e1983820152815160808101909252604b808352600092916105fc908301396040808401919091528051808201909152600a8152689adede418753e13f3560b71b60208201526060830152508152610365610440565b60018152600060208083019190915282015273e7b52f14b256cf6f228cee47b7b73791a0f1d992604082015261039961045e565b60018152606082810191909152820152919050565b60405180608001604052806004905b6103c56103db565b8152602001906001900390816103bd5790505090565b60405180608001604052806103ee610414565b81526020016103fb610440565b81526000602082015260400161040f61045e565b905290565b6040805160a0810182526000608082018181528252602082015260609181018290528181019190915290565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b818110156104a257602081850181015186830182015201610486565b818111156104b4576000602083870101525b50601f01601f19169290920160200192915050565b8060005b60028110156104ee57815115158452602093840193909101906001016104cd565b50505050565b8060005b60018110156104ee57815115158452602093840193909101906001016104f8565b602080825260009060a083820181850186855b60048110156105ee57878303601f19018452815180518685528051516001600160a01b0316878601528781015160090b60c0860152604080820151608060e0880181905261057e61012089018361047c565b606094850151898203609f19016101008b01529490925061059f838661047c565b94508b86015192506105b38c8a01846104c9565b928501516001600160a01b03811689850152929490940151936105d8888201866104f4565b505050948701949350509085019060010161052c565b509097965050505050505056fe4d6f6f20c3a9f09f9a80202020f09f9a806fc3a9f09f9a804df09f9a80c3a9204d6f4d4d206f6f20f09f9a806ff09f9a806f4d6f4dc3a96ff09f9a8020f09f9a804d6f6f6fc3a9206f6f4d4d6f6f20c3a9f09f9a806fc3a9f09f9a804d6f6f6f206f204df09f9a806fc3a920f09f9a80c3a9f09f9a80c3a94dc3a96f6fc3a9f09f9a80c3a9202020f09f9a80c3a9c3a94d6f206f4d6fc3a9206ff09f9a80f09f9a806f4d4d20c3a9c3a920c3a94d6f6f20c3a9f09f9a806f4d206ff09f9a80c3a94d6f4df09f9a80c3a9c3a9f09f9a80f09f9a806f4d6fc3a94d6f4d6ff09f9a804d206f206f6f4d6f6fc3a96f4df09f9a80c3a9f09f9a80f09f9a80f09f9a802020206ff09f9a80204d6f6f20c3a9f09f9a806f6f4dc3a96f6f2020f09f9a80c3a94d4d4d4d6fc3a94d6f20c3a9c3a9c3a9c3a96ff09f9a80c3a96f6ff09f9a806ff09f9a806fc3a96f204dc3a94dc3a96f4d4dc3a96f204d6f6fc3a9f09f9a80f09f9a806f6fc3a94d6f6f20c3a9f09f9a806fc3a96f204d6f6f6f6fc3a9f09f9a804d204df09f9a806f4dc3a9f09f9a806f4d6f6f20c3a9f09f9a806f6f6f6f4d4d6f6f4d6f4d4d4d4d6fc3a9202020204d6f6f6f20f09f9a80f09f9a80204d6f6f4df09f9a806f6f206f6f4d6f6f20c3a9f09f9a802020f09f9a80c3a9206f6ff09f9a80f09f9a806fc3a96f2020f09f9a806f4df09f9a80206f4d20f09f9a804dc3a96f4d6ff09f9a80204da2646970667358221220874ea070417bd0db694561f12cd544535c3050bfd35afd4833a301975feef32c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_d38a6c27 {\n S_421683f8 s_0;\n int80 s_1;\n string s_2;\n string s_3;\n }\n\n struct S_3c101cb1 {\n S_d38a6c27 s_0;\n bool[2] s_1;\n address s_2;\n bool[1] s_3;\n }\n\n function test () public pure returns (S_3c101cb1[4] memory) {\n S_3c101cb1[4] memory r;\n {\n S_3c101cb1 memory r_0;\n {\n S_d38a6c27 memory r_0_0;\n {\n S_421683f8 memory r_0_0_0;\n {\n address r_0_0_0_0 = 0xc2D4f502845879A8e2618290D8A1a585D0654252;\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n int80 r_0_0_1 = -296010844397397586676821;\n r_0_0.s_1 = r_0_0_1;\n }\n {\n string memory r_0_0_2 = unicode\"Moo é🚀oé🚀Mooo o M🚀oé 🚀é🚀éMéooé🚀é 🚀ééMo oMoé o🚀🚀oMM éé é\";\n r_0_0.s_2 = r_0_0_2;\n }\n {\n string memory r_0_0_3 = unicode\"Moo é🚀ooooMMooMoMMMMoé Mooo 🚀🚀 MooM🚀oo oo\";\n r_0_0.s_3 = r_0_0_3;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bool[2] memory r_0_1;\n {\n bool r_0_1_0 = true;\n r_0_1[0] = r_0_1_0;\n }\n {\n bool r_0_1_1 = true;\n r_0_1[1] = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0x7552098B7D5a0C5D6B7E8cbDE9C47AC2e779eE83;\n r_0.s_2 = r_0_2;\n }\n {\n bool[1] memory r_0_3;\n {\n bool r_0_3_0 = false;\n r_0_3[0] = r_0_3_0;\n }\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_3c101cb1 memory r_1;\n {\n S_d38a6c27 memory r_1_0;\n {\n S_421683f8 memory r_1_0_0;\n {\n address r_1_0_0_0 = 0xd9E116Da28Fb8d7334fA715AF709E8E2b454A926;\n r_1_0_0.s_0 = r_1_0_0_0;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n int80 r_1_0_1 = -223969864464425064121600;\n r_1_0.s_1 = r_1_0_1;\n }\n {\n string memory r_1_0_2 = unicode\"Moo é🚀ooMéoo 🚀éMMMMoéMo ééééo🚀éoo🚀o🚀oéo MéMéoMMéo Mooé🚀🚀ooé\";\n r_1_0.s_2 = r_1_0_2;\n }\n {\n string memory r_1_0_3 = unicode\"Moo é🚀 🚀é oo🚀🚀oéo 🚀oM🚀 oM 🚀MéoMo🚀 M\";\n r_1_0.s_3 = r_1_0_3;\n }\n r_1.s_0 = r_1_0;\n }\n {\n bool[2] memory r_1_1;\n {\n bool r_1_1_0 = true;\n r_1_1[0] = r_1_1_0;\n }\n {\n bool r_1_1_1 = true;\n r_1_1[1] = r_1_1_1;\n }\n r_1.s_1 = r_1_1;\n }\n {\n address r_1_2 = 0xA6971E7ecda37552Dc59c1e04A4ea58336D877c4;\n r_1.s_2 = r_1_2;\n }\n {\n bool[1] memory r_1_3;\n {\n bool r_1_3_0 = true;\n r_1_3[0] = r_1_3_0;\n }\n r_1.s_3 = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_3c101cb1 memory r_2;\n {\n S_d38a6c27 memory r_2_0;\n {\n S_421683f8 memory r_2_0_0;\n {\n address r_2_0_0_0 = 0xa0055a5303af828211F35e1Ae8FCae22d7944420;\n r_2_0_0.s_0 = r_2_0_0_0;\n }\n r_2_0.s_0 = r_2_0_0;\n }\n {\n int80 r_2_0_1 = 221705289274371194579465;\n r_2_0.s_1 = r_2_0_1;\n }\n {\n string memory r_2_0_2 = unicode\"Moo é🚀oM o🚀éMoM🚀éé🚀🚀oMoéMoMo🚀M o ooMooéoM🚀é🚀🚀🚀 o🚀 \";\n r_2_0.s_2 = r_2_0_2;\n }\n {\n string memory r_2_0_3 = unicode\"Moo é🚀oéo Mooooé🚀M M🚀oMé🚀o\";\n r_2_0.s_3 = r_2_0_3;\n }\n r_2.s_0 = r_2_0;\n }\n {\n bool[2] memory r_2_1;\n {\n bool r_2_1_0 = true;\n r_2_1[0] = r_2_1_0;\n }\n {\n bool r_2_1_1 = true;\n r_2_1[1] = r_2_1_1;\n }\n r_2.s_1 = r_2_1;\n }\n {\n address r_2_2 = 0xDb77f5Fa1DA1B61c4792AFEf0eD83198d87260bA;\n r_2.s_2 = r_2_2;\n }\n {\n bool[1] memory r_2_3;\n {\n bool r_2_3_0 = false;\n r_2_3[0] = r_2_3_0;\n }\n r_2.s_3 = r_2_3;\n }\n r[2] = r_2;\n }\n {\n S_3c101cb1 memory r_3;\n {\n S_d38a6c27 memory r_3_0;\n {\n S_421683f8 memory r_3_0_0;\n {\n address r_3_0_0_0 = 0x9F6b818A6d6D8ce39A56A1a0ea08F85C6315f5cC;\n r_3_0_0.s_0 = r_3_0_0_0;\n }\n r_3_0.s_0 = r_3_0_0;\n }\n {\n int80 r_3_0_1 = -124507085275057999228527;\n r_3_0.s_1 = r_3_0_1;\n }\n {\n string memory r_3_0_2 = unicode\"Moo é🚀 🚀oé🚀M🚀é MoMM oo 🚀o🚀oMoMéo🚀 🚀Moooé ooM\";\n r_3_0.s_2 = r_3_0_2;\n }\n {\n string memory r_3_0_3 = unicode\"Moo é🚀\";\n r_3_0.s_3 = r_3_0_3;\n }\n r_3.s_0 = r_3_0;\n }\n {\n bool[2] memory r_3_1;\n {\n bool r_3_1_0 = true;\n r_3_1[0] = r_3_1_0;\n }\n {\n bool r_3_1_1 = false;\n r_3_1[1] = r_3_1_1;\n }\n r_3.s_1 = r_3_1;\n }\n {\n address r_3_2 = 0xE7B52F14B256Cf6f228cEe47b7B73791A0F1d992;\n r_3.s_2 = r_3_2;\n }\n {\n bool[1] memory r_3_3;\n {\n bool r_3_3_0 = true;\n r_3_3[0] = r_3_3_0;\n }\n r_3.s_3 = r_3_3;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000007552098b7d5a0c5d6b7e8cbde9c47ac2e779ee830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2d4f502845879a8e2618290d8a1a585d0654252ffffffffffffffffffffffffffffffffffffffffffffc1513850093c78acf3ab0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000624d6f6f20c3a9f09f9a806fc3a9f09f9a804d6f6f6f206f204df09f9a806fc3a920f09f9a80c3a9f09f9a80c3a94dc3a96f6fc3a9f09f9a80c3a9202020f09f9a80c3a9c3a94d6f206f4d6fc3a9206ff09f9a80f09f9a806f4d4d20c3a9c3a920c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a4d6f6f20c3a9f09f9a806f6f6f6f4d4d6f6f4d6f4d4d4d4d6fc3a9202020204d6f6f6f20f09f9a80f09f9a80204d6f6f4df09f9a806f6f206f6f00000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a6971e7ecda37552dc59c1e04a4ea58336d877c40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d9e116da28fb8d7334fa715af709e8e2b454a926ffffffffffffffffffffffffffffffffffffffffffffd09291bee0cdf8333b000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a806f6f4dc3a96f6f2020f09f9a80c3a94d4d4d4d6fc3a94d6f20c3a9c3a9c3a9c3a96ff09f9a80c3a96f6ff09f9a806ff09f9a806fc3a96f204dc3a94dc3a96f4d4dc3a96f204d6f6fc3a9f09f9a80f09f9a806f6fc3a900000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a802020f09f9a80c3a9206f6ff09f9a80f09f9a806fc3a96f2020f09f9a806f4df09f9a80206f4d20f09f9a804dc3a96f4d6ff09f9a80204d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000db77f5fa1da1b61c4792afef0ed83198d87260ba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0055a5303af828211f35e1ae8fcae22d7944420000000000000000000000000000000000000000000002ef2aaf5de1334316a0900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a806f4d206ff09f9a80c3a94d6f4df09f9a80c3a9c3a9f09f9a80f09f9a806f4d6fc3a94d6f4d6ff09f9a804d206f206f6f4d6f6fc3a96f4df09f9a80c3a9f09f9a80f09f9a80f09f9a802020206ff09f9a802000000000000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a806fc3a96f204d6f6f6f6fc3a9f09f9a804d204df09f9a806f4dc3a9f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7b52f14b256cf6f228cee47b7b73791a0f1d99200000000000000000000000000000000000000000000000000000000000000010000000000000000000000009f6b818a6d6d8ce39a56a1a0ea08f85c6315f5ccffffffffffffffffffffffffffffffffffffffffffffe5a2751709250335519100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a80202020f09f9a806fc3a9f09f9a804df09f9a80c3a9204d6f4d4d206f6f20f09f9a806ff09f9a806f4d6f4dc3a96ff09f9a8020f09f9a804d6f6f6fc3a9206f6f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(((bool,address,bool,bytes7[2])[],int216,string,bool),address)", + "type": "(((bool,address,bool,bytes7[2])[],int216,string,bool),address)", + "value": [ + [ + [], + "-48321108601483997989180977617598168557333391446037653031792943861", + "Moo é🚀éo🚀MooéoM🚀é éMo🚀🚀oéééo", + false + ], + "0x4F5E41c5Fd19E00EE1c42cF316395CA99ab02bD7" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "number", + "value": "-48321108601483997989180977617598168557333391446037653031792943861" + }, + { + "type": "string", + "value": "Moo é🚀éo🚀MooéoM🚀é éMo🚀🚀oéééo" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x4F5E41c5Fd19E00EE1c42cF316395CA99ab02bD7" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061037d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610206565b60405180910390f35b6040805160c0808201835260608284018181526000828501819052608080860184905260a080870183905292865260208087018390528751958601885285880185815286860184905286830186905293860183905292855284830182905286519081018752838152808301829052808701849052928301819052855181815291820190955292939192909190816100fb565b6100e861016d565b8152602001906001900390816100e05790505b508252507a75764cb99972e118d146885cf1140fcac2b92a0431c8357c5422f4196020808301919091526040805160608101909152603380825260009261031590830139604083015250600060608201528152734f5e41c5fd19e00ee1c42cf316395ca99ab02bd76020820152919050565b60408051608081018252600080825260208201819052918101919091526060810161019661019b565b905290565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b818110156101df576020818501810151868301820152016101c3565b818111156101f1576000602083870101525b50601f01601f19169290920160200192915050565b60006020808352606084516040808487015260e0860182516080858901528181518084526101008a019150878301935060009250825b818110156102ac578451805115158452898101516001600160a01b03168a85015286810151151587850152880151888401855b60028110156102965782516001600160c81b0319168252918b0191908b019060010161026f565b5050509388019360a0929092019160010161023c565b50508685015192506102c360808a0184601a0b9052565b84840151898203605f190160a08b015292506102df81846101b9565b9585015180151560c08b01529592506102f6915050565b938701516001600160a01b038116828801529397965050505050505056fe4d6f6f20c3a9f09f9a80c3a96ff09f9a804d6f6fc3a96f4df09f9a80c3a920c3a94d6ff09f9a80f09f9a806fc3a9c3a9c3a96fa2646970667358221220d7d952a0542aac496df0e0865951b03b5e747e77a30cf1a97b5588e1023b832564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f68cad07 {\n bool s_0;\n address s_1;\n bool s_2;\n bytes7[2] s_3;\n }\n\n struct S_d1f480eb {\n S_f68cad07[] s_0;\n int216 s_1;\n string s_2;\n bool s_3;\n }\n\n struct S_4eec83b2 {\n S_d1f480eb s_0;\n address s_1;\n }\n\n function test () public pure returns (S_4eec83b2 memory) {\n S_4eec83b2 memory r;\n {\n S_d1f480eb memory r_0;\n {\n S_f68cad07[] memory r_0_0 = new S_f68cad07[](0);\n r_0.s_0 = r_0_0;\n }\n {\n int216 r_0_1 = -48321108601483997989180977617598168557333391446037653031792943861;\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀éo🚀MooéoM🚀é éMo🚀🚀oéééo\";\n r_0.s_2 = r_0_2;\n }\n {\n bool r_0_3 = false;\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x4F5E41c5Fd19E00EE1c42cF316395CA99ab02bD7;\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000004f5e41c5fd19e00ee1c42cf316395ca99ab02bd70000000000000000000000000000000000000000000000000000000000000080ffffffffff8a89b346668d1ee72eb977a30eebf0353d46d5fbce37ca83abdd0b00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a80c3a96ff09f9a804d6f6fc3a96f4df09f9a80c3a920c3a94d6ff09f9a80f09f9a806fc3a9c3a9c3a96f00000000000000000000000000" + }, + { + "name": "random-(((bytes19,bytes32,bytes1,((bytes12,bool)[])),address[3],string),bytes14)", + "type": "(((bytes19,bytes32,bytes1,((bytes12,bool)[])),address[3],string),bytes14)", + "value": [ + [ + [ + "0x86e1695072c5dc797d4aa618761baf945b27db", + "0x72658bcea19a0cd744c1f42afc890b3766bf6a1925ad9b14798966a96344ea8b", + "0xe7", + [ + [ + ["0x2626fbe6d5d4c61b91055f7e", false], + ["0x267b90155d848b0b6a9f8062", false] + ] + ] + ], + [ + "0x52bC509DF762931DBCD26766ae297431468559e7", + "0x0487fDF03314686a35A161bC6aF909e6A41b6C2E", + "0x9A04483adEe5e9caac862b26596B7d760edD7eAD" + ], + "Moo é🚀éoMé é 🚀éoMoo é🚀 🚀oéMé Mo" + ], + "0x85527179797ec047062cfc520571" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x86e1695072c5dc797d4aa618761baf945b27db" + }, + { + "type": "hexstring", + "value": "0x72658bcea19a0cd744c1f42afc890b3766bf6a1925ad9b14798966a96344ea8b" + }, + { + "type": "hexstring", + "value": "0xe7" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x2626fbe6d5d4c61b91055f7e" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x267b90155d848b0b6a9f8062" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x52bC509DF762931DBCD26766ae297431468559e7" + }, + { + "type": "address", + "value": "0x0487fDF03314686a35A161bC6aF909e6A41b6C2E" + }, + { + "type": "address", + "value": "0x9A04483adEe5e9caac862b26596B7d760edD7eAD" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éoMé é 🚀éoMoo é🚀 🚀oéMé Mo" + } + ] + }, + { + "type": "hexstring", + "value": "0x85527179797ec047062cfc520571" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610509806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061036f565b60405180910390f35b610056610263565b61005e610263565b610066610283565b6040805160808101825260008082526020808301828152838501838152855180840187526060808252808701919091527286e1695072c5dc797d4aa618761baf945b27db60681b86527f72658bcea19a0cd744c1f42afc890b3766bf6a1925ad9b14798966a96344ea8b90925260e760f81b9052845180830186528181528551600280825292810190965293949182015b60408051808201909152600080825260208201528152602001906001900390816100f7575050604080518082019091526000602082018190526b13137df36aea630dc882afbf60a11b8252825192935090918291849161015957610159610487565b60200260200101819052505061017f604080518082019091526000808252602082015290565b6b133dc80aaec24585b54fc03160a11b81526000602082015281518190839060019081106101af576101af610487565b6020908102919091010152508152606082015281526101cc6102d2565b7352bc509df762931dbcd26766ae297431468559e78152730487fdf03314686a35a161bc6af909e6a41b6c2e602080830191909152739a04483adee5e9caac862b26596b7d760edd7ead6040808401919091528382019290925281516060810190925260368083526000929161049e9083013960408301525081526d85527179797ec047062cfc52057160901b6020820152919050565b6040518060400160405280610276610283565b8152600060209091015290565b6040805160e081018252600060608083018281526080840183905260a08401929092528351602080820190955290815260c083015281529081016102c56102d2565b8152602001606081525090565b60405180606001604052806003906020820280368337509192915050565b8060005b600381101561031c5781516001600160a01b03168452602093840193909101906001016102f4565b50505050565b6000815180845260005b818110156103485760208185018101518683018201520161032c565b8181111561035a576000602083870101525b50601f01601f19169290920160200192915050565b602080825282516040838301819052815160a060608087019190915281516cffffffffffffffffffffffffff191661010087015281850151610120870152818301516001600160f81b0319166101408701520151608061016086015251610180850184905280516101a0860181905260009493929184019085906101c08801905b8083101561042557835180516001600160a01b03191683528701511515878301529286019260019290920191908401906103f0565b5085850151925061043960808901846102f0565b93830151878503605f190160e0890152936104548186610322565b9589015171ffffffffffffffffffffffffffffffffffff1981168986015295945061047e92505050565b50949350505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80c3a96f4dc3a920c3a92020f09f9a80c3a96f4d6f6f2020c3a9f09f9a802020f09f9a806fc3a94dc3a9204d6fa26469706673582212209ec2511af97e4eaacd0a8bba7cdd3f8e183c4377b361740568a37a5cd9f1b4d564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_30cb1468 {\n bytes12 s_0;\n bool s_1;\n }\n\n struct S_20dd8eb0 {\n S_30cb1468[] s_0;\n }\n\n struct S_65d3be59 {\n bytes19 s_0;\n bytes32 s_1;\n bytes1 s_2;\n S_20dd8eb0 s_3;\n }\n\n struct S_ea513300 {\n S_65d3be59 s_0;\n address[3] s_1;\n string s_2;\n }\n\n struct S_477a2649 {\n S_ea513300 s_0;\n bytes14 s_1;\n }\n\n function test () public pure returns (S_477a2649 memory) {\n S_477a2649 memory r;\n {\n S_ea513300 memory r_0;\n {\n S_65d3be59 memory r_0_0;\n {\n bytes19 r_0_0_0 = bytes19(0x86e1695072c5dc797d4aa618761baf945b27db);\n r_0_0.s_0 = r_0_0_0;\n }\n {\n bytes32 r_0_0_1 = bytes32(0x72658bcea19a0cd744c1f42afc890b3766bf6a1925ad9b14798966a96344ea8b);\n r_0_0.s_1 = r_0_0_1;\n }\n {\n bytes1 r_0_0_2 = bytes1(0xe7);\n r_0_0.s_2 = r_0_0_2;\n }\n {\n S_20dd8eb0 memory r_0_0_3;\n {\n S_30cb1468[] memory r_0_0_3_0 = new S_30cb1468[](2);\n {\n S_30cb1468 memory r_0_0_3_0_0;\n {\n bytes12 r_0_0_3_0_0_0 = bytes12(0x2626fbe6d5d4c61b91055f7e);\n r_0_0_3_0_0.s_0 = r_0_0_3_0_0_0;\n }\n {\n bool r_0_0_3_0_0_1 = false;\n r_0_0_3_0_0.s_1 = r_0_0_3_0_0_1;\n }\n r_0_0_3_0[0] = r_0_0_3_0_0;\n }\n {\n S_30cb1468 memory r_0_0_3_0_1;\n {\n bytes12 r_0_0_3_0_1_0 = bytes12(0x267b90155d848b0b6a9f8062);\n r_0_0_3_0_1.s_0 = r_0_0_3_0_1_0;\n }\n {\n bool r_0_0_3_0_1_1 = false;\n r_0_0_3_0_1.s_1 = r_0_0_3_0_1_1;\n }\n r_0_0_3_0[1] = r_0_0_3_0_1;\n }\n r_0_0_3.s_0 = r_0_0_3_0;\n }\n r_0_0.s_3 = r_0_0_3;\n }\n r_0.s_0 = r_0_0;\n }\n {\n address[3] memory r_0_1;\n {\n address r_0_1_0 = 0x52bC509DF762931DBCD26766ae297431468559e7;\n r_0_1[0] = r_0_1_0;\n }\n {\n address r_0_1_1 = 0x0487fDF03314686a35A161bC6aF909e6A41b6C2E;\n r_0_1[1] = r_0_1_1;\n }\n {\n address r_0_1_2 = 0x9A04483adEe5e9caac862b26596B7d760edD7eAD;\n r_0_1[2] = r_0_1_2;\n }\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀éoMé é 🚀éoMoo é🚀 🚀oéMé Mo\";\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n bytes14 r_1 = bytes14(0x85527179797ec047062cfc520571);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004085527179797ec047062cfc52057100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000052bc509df762931dbcd26766ae297431468559e70000000000000000000000000487fdf03314686a35a161bc6af909e6a41b6c2e0000000000000000000000009a04483adee5e9caac862b26596b7d760edd7ead00000000000000000000000000000000000000000000000000000000000001e086e1695072c5dc797d4aa618761baf945b27db0000000000000000000000000072658bcea19a0cd744c1f42afc890b3766bf6a1925ad9b14798966a96344ea8be7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000022626fbe6d5d4c61b91055f7e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000267b90155d848b0b6a9f80620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a80c3a96f4dc3a920c3a92020f09f9a80c3a96f4d6f6f2020c3a9f09f9a802020f09f9a806fc3a94dc3a9204d6f00000000000000000000" + }, + { + "name": "random-(((string,(bool)),(address[][],bytes3),(address[2],bool[3])))", + "type": "(((string,(bool)),(address[][],bytes3),(address[2],bool[3])))", + "value": [ + [ + ["Moo é🚀o éMoé🚀é🚀 Mo é🚀o🚀é🚀ééé 🚀MMo MoMé🚀Méo 🚀 oooMoMéMM🚀Mé", [true]], + [ + [ + [ + "0x79B92764CB72b54Ddda4D199E506b3955B242Fce", + "0xf501F099388156547AFbAfCD9D9B3b84F19248aD", + "0x182966ba9867125FeB3A773b160161192f90e21e", + "0x2e2d821aAb3C7161FB57a7A71369fA3CA0B945A6" + ] + ], + "0xbf40ad" + ], + [ + [ + "0xFD356cc838946A8E04a2cB446175D00E55668385", + "0xD4C5499253011F8DE78EA0E3FA23b5562073CD47" + ], + [false, false, false] + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o éMoé🚀é🚀 Mo é🚀o🚀é🚀ééé 🚀MMo MoMé🚀Méo 🚀 oooMoMéMM🚀Mé" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x79B92764CB72b54Ddda4D199E506b3955B242Fce" + }, + { + "type": "address", + "value": "0xf501F099388156547AFbAfCD9D9B3b84F19248aD" + }, + { + "type": "address", + "value": "0x182966ba9867125FeB3A773b160161192f90e21e" + }, + { + "type": "address", + "value": "0x2e2d821aAb3C7161FB57a7A71369fA3CA0B945A6" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xbf40ad" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xFD356cc838946A8E04a2cB446175D00E55668385" + }, + { + "type": "address", + "value": "0xD4C5499253011F8DE78EA0E3FA23b5562073CD47" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061064d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906104df565b60405180910390f35b6100566102e5565b61005e6102e5565b6100666102fd565b61006e610349565b60006040518060a00160405280606781526020016105b1606791398252506040805160208082018352600180835281850192909252928452815180830183526060815260009381018490528251828152808401909352929190816020015b60608152602001906001900390816100cc57505060408051600480825260a08201909252919250600091906020820160808036833701905050905060007379b92764cb72b54ddda4d199e506b3955b242fce905080826000815181106101345761013461059a565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073f501f099388156547afbafcd9d9b3b84f19248ad905080826001815181106101825761018261059a565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073182966ba9867125feb3a773b160161192f90e21e905080826002815181106101d0576101d061059a565b60200260200101906001600160a01b031690816001600160a01b031681525050506000732e2d821aab3c7161fb57a7a71369fa3ca0b945a69050808260038151811061021e5761021e61059a565b60200260200101906001600160a01b031690816001600160a01b0316815250505080826000815181106102535761025361059a565b6020908102919091018101919091529183525062bf40ad60e81b8282015282015261027c610373565b610284610393565b73fd356cc838946a8e04a2cb446175d00e55668385815273d4c5499253011f8de78ea0e3fa23b5562073cd47602082015281526102bf6103b1565b600080825260208083018290526040808401929092528301919091528201528152919050565b60405180602001604052806102f86102fd565b905290565b6040518060600160405280610310610349565b815260200161033c60405180604001604052806060815260200160006001600160e81b03191681525090565b81526020016102f8610373565b6040518060400160405280606081526020016102f860405180602001604052806000151581525090565b6040518060400160405280610386610393565b81526020016102f86103b1565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60006040830182516040855281815180845260608701915060608160051b8801019350602080840193506000805b8381101561045a57898703605f19018552855180518089529084019084890190845b818110156104445783516001600160a01b03168352928601929186019160010161041f565b50909850505094820194938201936001016103fd565b5050958601516001600160e81b0319169690950195909552509392505050565b80518260005b60028110156104a85782516001600160a01b0316825260209283019290910190600101610480565b5050506020808201516040840160005b60038110156104d75782511515825291830191908301906001016104b8565b505050505050565b6000602080835283518182850152805160e060408601528051604061012087015280518061016088015260005b81811015610529578281018601518882016101800152850161050c565b8181111561053c576000610180838a0101525b50601f19601f82011687019150508382015191506101408251151581880152848401519450808783030160608801525061057a6101808201856103cf565b9350505060408101519050610592608085018261047a565b509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f2020c3a94d6fc3a9f09f9a80c3a9f09f9a8020204d6f20c3a9f09f9a806ff09f9a80c3a9f09f9a80c3a9c3a9c3a92020f09f9a804d4d6f204d6f4dc3a9f09f9a804dc3a96f20f09f9a80206f6f6f4d6f4dc3a94d4df09f9a804dc3a9a264697066735822122097c97cd48792dc63706cb2d99aefddab91b3e33046840c12e9a018c2b2556cf764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_c2221a7d {\n string s_0;\n S_c1053bda s_1;\n }\n\n struct S_c63fbfa7 {\n address[][] s_0;\n bytes3 s_1;\n }\n\n struct S_8a5a76c7 {\n address[2] s_0;\n bool[3] s_1;\n }\n\n struct S_a28cbaeb {\n S_c2221a7d s_0;\n S_c63fbfa7 s_1;\n S_8a5a76c7 s_2;\n }\n\n struct S_7ee64aa7 {\n S_a28cbaeb s_0;\n }\n\n function test () public pure returns (S_7ee64aa7 memory) {\n S_7ee64aa7 memory r;\n {\n S_a28cbaeb memory r_0;\n {\n S_c2221a7d memory r_0_0;\n {\n string memory r_0_0_0 = unicode\"Moo é🚀o éMoé🚀é🚀 Mo é🚀o🚀é🚀ééé 🚀MMo MoMé🚀Méo 🚀 oooMoMéMM🚀Mé\";\n r_0_0.s_0 = r_0_0_0;\n }\n {\n S_c1053bda memory r_0_0_1;\n {\n bool r_0_0_1_0 = true;\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n r_0_0.s_1 = r_0_0_1;\n }\n r_0.s_0 = r_0_0;\n }\n {\n S_c63fbfa7 memory r_0_1;\n {\n address[][] memory r_0_1_0 = new address[][](1);\n {\n address[] memory r_0_1_0_0 = new address[](4);\n {\n address r_0_1_0_0_0 = 0x79B92764CB72b54Ddda4D199E506b3955B242Fce;\n r_0_1_0_0[0] = r_0_1_0_0_0;\n }\n {\n address r_0_1_0_0_1 = 0xf501F099388156547AFbAfCD9D9B3b84F19248aD;\n r_0_1_0_0[1] = r_0_1_0_0_1;\n }\n {\n address r_0_1_0_0_2 = 0x182966ba9867125FeB3A773b160161192f90e21e;\n r_0_1_0_0[2] = r_0_1_0_0_2;\n }\n {\n address r_0_1_0_0_3 = 0x2e2d821aAb3C7161FB57a7A71369fA3CA0B945A6;\n r_0_1_0_0[3] = r_0_1_0_0_3;\n }\n r_0_1_0[0] = r_0_1_0_0;\n }\n r_0_1.s_0 = r_0_1_0;\n }\n {\n bytes3 r_0_1_1 = bytes3(0xbf40ad);\n r_0_1.s_1 = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n {\n S_8a5a76c7 memory r_0_2;\n {\n address[2] memory r_0_2_0;\n {\n address r_0_2_0_0 = 0xFD356cc838946A8E04a2cB446175D00E55668385;\n r_0_2_0[0] = r_0_2_0_0;\n }\n {\n address r_0_2_0_1 = 0xD4C5499253011F8DE78EA0E3FA23b5562073CD47;\n r_0_2_0[1] = r_0_2_0_1;\n }\n r_0_2.s_0 = r_0_2_0;\n }\n {\n bool[3] memory r_0_2_1;\n {\n bool r_0_2_1_0 = false;\n r_0_2_1[0] = r_0_2_1_0;\n }\n {\n bool r_0_2_1_1 = false;\n r_0_2_1[1] = r_0_2_1_1;\n }\n {\n bool r_0_2_1_2 = false;\n r_0_2_1[2] = r_0_2_1_2;\n }\n r_0_2.s_1 = r_0_2_1;\n }\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000fd356cc838946a8e04a2cb446175d00e55668385000000000000000000000000d4c5499253011f8de78ea0e3fa23b5562073cd470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000674d6f6f20c3a9f09f9a806f2020c3a94d6fc3a9f09f9a80c3a9f09f9a8020204d6f20c3a9f09f9a806ff09f9a80c3a9f09f9a80c3a9c3a9c3a92020f09f9a804d4d6f204d6f4dc3a9f09f9a804dc3a96f20f09f9a80206f6f6f4d6f4dc3a94d4df09f9a804dc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040bf40ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000079b92764cb72b54ddda4d199e506b3955b242fce000000000000000000000000f501f099388156547afbafcd9d9b3b84f19248ad000000000000000000000000182966ba9867125feb3a773b160161192f90e21e0000000000000000000000002e2d821aab3c7161fb57a7a71369fa3ca0b945a6" + }, + { + "name": "random-(((string,bool),bool,int168[4],int,address),uint,address,bool)", + "type": "(((string,bool),bool,int168[4],int,address),uint,address,bool)", + "value": [ + [ + ["Moo é🚀ooMo éoéoo", true], + false, + [ + "182257502343397621923595023831835421913863027332004", + "-76995432715985414350716043561799595459229357178486", + "175451877806717610530680168920262202171712963183215", + "-41981231158043515535365891121055403694297967257191" + ], + "-15487201295145940105906972926240790548122866833319351483224515400109771122892", + "0x17743d2De6c86a8F005A59b3AF981307DF77Afdf" + ], + "9158823066430658632153917190139912814177223176236030835117573177487489192792", + "0xB032f9CC39B7a99B9d5CF53848523741f45106a6", + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooMo éoéoo" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "182257502343397621923595023831835421913863027332004" + }, + { + "type": "number", + "value": "-76995432715985414350716043561799595459229357178486" + }, + { + "type": "number", + "value": "175451877806717610530680168920262202171712963183215" + }, + { + "type": "number", + "value": "-41981231158043515535365891121055403694297967257191" + } + ] + }, + { + "type": "number", + "value": "-15487201295145940105906972926240790548122866833319351483224515400109771122892" + }, + { + "type": "address", + "value": "0x17743d2De6c86a8F005A59b3AF981307DF77Afdf" + } + ] + }, + { + "type": "number", + "value": "9158823066430658632153917190139912814177223176236030835117573177487489192792" + }, + { + "type": "address", + "value": "0xB032f9CC39B7a99B9d5CF53848523741f45106a6" + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103b6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610287565b60405180910390f35b6100566101ca565b61005e6101ca565b6100666101f8565b6040805180820182526060815260006020808301828152845180860190955260168552754d6f6f20c3a9f09f9a806f6f4d6f20c3a96fc3a96f6f60501b858301529383526001909352908352908201526100be61023d565b747cb4a50f871bfd0403dde0e660599254c45f1a93a481527434aeb29cabe55ee7485e6d2fb5d7955b1a5ccbfe751960208083019190915274780c8e4d4765a6cdf9c4c3fdb9d0a82265d625826f604080840191909152741cb98783171ca416a41b0efbd16289ff324f4c666619606080850191909152848201939093527fddc28e00fdb90b61a4ecff0d28196541624981ba90b6e5ca6e7ac06c1d851734848401527317743d2de6c86a8f005a59b3af981307df77afdf60808501529284527f143fb5cc82b845e7ef1b4d4723986b3ab6206cd8a70dbd5c79cee234b99f53589084015273b032f9cc39b7a99b9d5cf53848523741f45106a691830191909152600190820152919050565b60405180608001604052806101dd6101f8565b81526000602082018190526040820181905260609091015290565b6040805160e08101909152606060a08201908152600060c0830152819081526000602082015260400161022961023d565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b8060005b600481101561028157815160140b84526020938401939091019060010161025f565b50505050565b600060208083528351608082850152805161010060a0860152805160406101a08701528051806101e088015260005b818110156102d357828101860151888201610200015285016102b6565b818111156102e6576000610200838a0101525b509184015115156101c087015282840151151560c087015260408301519161031160e088018461025b565b60608401516101608801526080909301516001600160a01b038116610180880152928488015160408801526040880151945061035860608801866001600160a01b03169052565b606088015180151560808901529450601f01601f19169590950161020001969550505050505056fea26469706673582212205330401fadbc5beb3b4c206b6dd0ab616f42b1fb0ef8031d2808582155ecfa2364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fc3be6c5 {\n string s_0;\n bool s_1;\n }\n\n struct S_9bcbd1e0 {\n S_fc3be6c5 s_0;\n bool s_1;\n int168[4] s_2;\n int256 s_3;\n address s_4;\n }\n\n struct S_1b67d9ac {\n S_9bcbd1e0 s_0;\n uint256 s_1;\n address s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_1b67d9ac memory) {\n S_1b67d9ac memory r;\n {\n S_9bcbd1e0 memory r_0;\n {\n S_fc3be6c5 memory r_0_0;\n {\n string memory r_0_0_0 = unicode\"Moo é🚀ooMo éoéoo\";\n r_0_0.s_0 = r_0_0_0;\n }\n {\n bool r_0_0_1 = true;\n r_0_0.s_1 = r_0_0_1;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n {\n int168[4] memory r_0_2;\n {\n int168 r_0_2_0 = 182257502343397621923595023831835421913863027332004;\n r_0_2[0] = r_0_2_0;\n }\n {\n int168 r_0_2_1 = -76995432715985414350716043561799595459229357178486;\n r_0_2[1] = r_0_2_1;\n }\n {\n int168 r_0_2_2 = 175451877806717610530680168920262202171712963183215;\n r_0_2[2] = r_0_2_2;\n }\n {\n int168 r_0_2_3 = -41981231158043515535365891121055403694297967257191;\n r_0_2[3] = r_0_2_3;\n }\n r_0.s_2 = r_0_2;\n }\n {\n int r_0_3 = -15487201295145940105906972926240790548122866833319351483224515400109771122892;\n r_0.s_3 = r_0_3;\n }\n {\n address r_0_4 = 0x17743d2De6c86a8F005A59b3AF981307DF77Afdf;\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n uint r_1 = 9158823066430658632153917190139912814177223176236030835117573177487489192792;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xB032f9CC39B7a99B9d5CF53848523741f45106a6;\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080143fb5cc82b845e7ef1b4d4723986b3ab6206cd8a70dbd5c79cee234b99f5358000000000000000000000000b032f9cc39b7a99b9d5cf53848523741f45106a600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000007cb4a50f871bfd0403dde0e660599254c45f1a93a4ffffffffffffffffffffffcb514d63541aa118b7a192d04a286aa4e5a334018a0000000000000000000000780c8e4d4765a6cdf9c4c3fdb9d0a82265d625826fffffffffffffffffffffffe346787ce8e35be95be4f1042e9d7600cdb0b39999ddc28e00fdb90b61a4ecff0d28196541624981ba90b6e5ca6e7ac06c1d85173400000000000000000000000017743d2de6c86a8f005a59b3af981307df77afdf0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a806f6f4d6f20c3a96fc3a96f6f00000000000000000000" + }, + { + "name": "random-((address,address,(bool,bool,bytes11)),int256,address,uint16[4],bool)", + "type": "((address,address,(bool,bool,bytes11)),int256,address,uint16[4],bool)", + "value": [ + [ + "0xBc66563b3ED20DFcDf1161c42770721ccfCb5691", + "0x8d01a6AF4608942AA4e5e21e68ED20cd7aFAEc8f", + [false, true, "0x753b8a11f600410bb3d46d"] + ], + "26463908802460872902983009206546295973605625904713653240739139297623366536688", + "0x6378e6DD593ecCd051Bcc26ED0446aCE29d3AcF0", + ["14739", "16801", "3091", "56816"], + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xBc66563b3ED20DFcDf1161c42770721ccfCb5691" + }, + { + "type": "address", + "value": "0x8d01a6AF4608942AA4e5e21e68ED20cd7aFAEc8f" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x753b8a11f600410bb3d46d" + } + ] + } + ] + }, + { + "type": "number", + "value": "26463908802460872902983009206546295973605625904713653240739139297623366536688" + }, + { + "type": "address", + "value": "0x6378e6DD593ecCd051Bcc26ED0446aCE29d3AcF0" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "14739" + }, + { + "type": "number", + "value": "16801" + }, + { + "type": "number", + "value": "3091" + }, + { + "type": "number", + "value": "56816" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102e1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610221565b60405180910390f35b61005661016d565b61005e61016d565b61009460408051606080820183526000808352602080840182905284519283018552818352820181905281840152909182015290565b73bc66563b3ed20dfcdf1161c42770721ccfcb56918152738d01a6af4608942aa4e5e21e68ed20cd7afaec8f60208083019190915260408051606081018252600081526001818401526a753b8a11f600410bb3d46d60a81b81830152818401529183527f3a820aa5036054499239778dd28169c6717d6edb4a181cecbee428420f7d8df090830152736378e6dd593eccd051bcc26ed0446ace29d3acf09082015261013d6101d6565b61399381526141a16020820152610c13604082015261ddf060608083019190915282015260016080820152919050565b6040518060a001604052806101ae60408051606080820183526000808352602080840182905284519283018552818352820181905281840152909182015290565b815260006020820181905260408201526060016101c96101d6565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b8060005b600481101561021b57815161ffff168452602093840193909101906001016101f8565b50505050565b815180516001600160a01b039081168352602080830151821681850152604092830151805115158486015280820151151560608601528301516001600160a81b031916608085015284015160a08401529083015190811660c083015261018082019050606083015161029660e08401826101f4565b5060809290920151151561016091909101529056fea26469706673582212206a0ec0b40f202036510329b16b9f2bc94986da7aac66f37b484335c76994f8e664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0592d0d8 {\n bool s_0;\n bool s_1;\n bytes11 s_2;\n }\n\n struct S_4816f63f {\n address s_0;\n address s_1;\n S_0592d0d8 s_2;\n }\n\n struct S_49409f2e {\n S_4816f63f s_0;\n int256 s_1;\n address s_2;\n uint16[4] s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_49409f2e memory) {\n S_49409f2e memory r;\n {\n S_4816f63f memory r_0;\n {\n address r_0_0 = 0xBc66563b3ED20DFcDf1161c42770721ccfCb5691;\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0x8d01a6AF4608942AA4e5e21e68ED20cd7aFAEc8f;\n r_0.s_1 = r_0_1;\n }\n {\n S_0592d0d8 memory r_0_2;\n {\n bool r_0_2_0 = false;\n r_0_2.s_0 = r_0_2_0;\n }\n {\n bool r_0_2_1 = true;\n r_0_2.s_1 = r_0_2_1;\n }\n {\n bytes11 r_0_2_2 = bytes11(0x753b8a11f600410bb3d46d);\n r_0_2.s_2 = r_0_2_2;\n }\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n int256 r_1 = 26463908802460872902983009206546295973605625904713653240739139297623366536688;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x6378e6DD593ecCd051Bcc26ED0446aCE29d3AcF0;\n r.s_2 = r_2;\n }\n {\n uint16[4] memory r_3;\n {\n uint16 r_3_0 = 14739;\n r_3[0] = r_3_0;\n }\n {\n uint16 r_3_1 = 16801;\n r_3[1] = r_3_1;\n }\n {\n uint16 r_3_2 = 3091;\n r_3[2] = r_3_2;\n }\n {\n uint16 r_3_3 = 56816;\n r_3[3] = r_3_3;\n }\n r.s_3 = r_3;\n }\n {\n bool r_4 = true;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000bc66563b3ed20dfcdf1161c42770721ccfcb56910000000000000000000000008d01a6af4608942aa4e5e21e68ed20cd7afaec8f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001753b8a11f600410bb3d46d0000000000000000000000000000000000000000003a820aa5036054499239778dd28169c6717d6edb4a181cecbee428420f7d8df00000000000000000000000006378e6dd593eccd051bcc26ed0446ace29d3acf0000000000000000000000000000000000000000000000000000000000000399300000000000000000000000000000000000000000000000000000000000041a10000000000000000000000000000000000000000000000000000000000000c13000000000000000000000000000000000000000000000000000000000000ddf00000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-((bool,bytes14,((string[1],address,bool,address,string),address,address)))", + "type": "((bool,bytes14,((string[1],address,bool,address,string),address,address)))", + "value": [ + [ + true, + "0x77c739bd977d62c995b9f11cf737", + [ + [ + ["Moo é🚀 é"], + "0xb36B30853b1f5A530edEeA9056D03aeFF92c5B26", + true, + "0xd08E42d80dc65b94172b3ac7E5000e6E9B52CaA3", + "Moo é🚀o" + ], + "0xaA99207Af9ce0f57400Ae817e8969d6a1935548f", + "0x1352361a93e03ae1fCa369236898db50d892e504" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x77c739bd977d62c995b9f11cf737" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é" + } + ] + }, + { + "type": "address", + "value": "0xb36B30853b1f5A530edEeA9056D03aeFF92c5B26" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xd08E42d80dc65b94172b3ac7E5000e6E9B52CaA3" + }, + { + "type": "string", + "value": "Moo é🚀o" + } + ] + }, + { + "type": "address", + "value": "0xaA99207Af9ce0f57400Ae817e8969d6a1935548f" + }, + { + "type": "address", + "value": "0x1352361a93e03ae1fCa369236898db50d892e504" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103c0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610266565b60405180910390f35b610056610161565b61005e610161565b610066610179565b600181526d77c739bd977d62c995b9f11cf73760901b6020820152610089610194565b6100916101bb565b6100996101f2565b604080518082018252600d81526c4d6f6f20c3a9f09f9a8020c3a960981b60208083019190915290835291835273b36b30853b1f5a530edeea9056d03aeff92c5b268383015260018382015273d08e42d80dc65b94172b3ac7e5000e6e9b52caa3606084015280518082018252600b81526a4d6f6f20c3a9f09f9a806f60a81b81840152608084015291835273aa99207af9ce0f57400ae817e8969d6a1935548f90830152731352361a93e03ae1fca369236898db50d892e504828201528201528152919050565b6040518060200160405280610174610179565b905290565b60408051606081018252600080825260208201529081016101745b60405180606001604052806101a76101bb565b815260006020820181905260409091015290565b6040518060a001604052806101ce6101f2565b81526000602082018190526040820181905260608083019190915260809091015290565b60405180602001604052806001905b60608152602001906001900390816102015790505090565b6000815180845260005b8181101561023f57602081850181015186830182015201610223565b81811115610251576000602083870101525b50601f01601f19169290920160200192915050565b600060208083528351818285015280511515604085015271ffffffffffffffffffffffffffffffffffff198282015116606085015260408101519050606060808501528051606060a08601526101a08501815160a0610100880152818290506101c08801925060005b60018110156102ff5761019f198985030182526102ed848451610219565b935091860191908601906001016102cf565b505050838201516001600160a01b039081166101208801526040830151151561014088015260608301511661016087015260809091015185820360ff19016101808701529061034e8183610219565b938301516001600160a01b03811660c088015293915061036b9050565b60408201516001600160a01b03811660e087015292509594505050505056fea2646970667358221220190a7b9b55edf2b0cc0e2d5c9ab832df49904f19700bdb0c5d4811e8f509cb0764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e199017c {\n string[1] s_0;\n address s_1;\n bool s_2;\n address s_3;\n string s_4;\n }\n\n struct S_311e312b {\n S_e199017c s_0;\n address s_1;\n address s_2;\n }\n\n struct S_7841b607 {\n bool s_0;\n bytes14 s_1;\n S_311e312b s_2;\n }\n\n struct S_f5a87cc4 {\n S_7841b607 s_0;\n }\n\n function test () public pure returns (S_f5a87cc4 memory) {\n S_f5a87cc4 memory r;\n {\n S_7841b607 memory r_0;\n {\n bool r_0_0 = true;\n r_0.s_0 = r_0_0;\n }\n {\n bytes14 r_0_1 = bytes14(0x77c739bd977d62c995b9f11cf737);\n r_0.s_1 = r_0_1;\n }\n {\n S_311e312b memory r_0_2;\n {\n S_e199017c memory r_0_2_0;\n {\n string[1] memory r_0_2_0_0;\n {\n string memory r_0_2_0_0_0 = unicode\"Moo é🚀 é\";\n r_0_2_0_0[0] = r_0_2_0_0_0;\n }\n r_0_2_0.s_0 = r_0_2_0_0;\n }\n {\n address r_0_2_0_1 = 0xb36B30853b1f5A530edEeA9056D03aeFF92c5B26;\n r_0_2_0.s_1 = r_0_2_0_1;\n }\n {\n bool r_0_2_0_2 = true;\n r_0_2_0.s_2 = r_0_2_0_2;\n }\n {\n address r_0_2_0_3 = 0xd08E42d80dc65b94172b3ac7E5000e6E9B52CaA3;\n r_0_2_0.s_3 = r_0_2_0_3;\n }\n {\n string memory r_0_2_0_4 = unicode\"Moo é🚀o\";\n r_0_2_0.s_4 = r_0_2_0_4;\n }\n r_0_2.s_0 = r_0_2_0;\n }\n {\n address r_0_2_1 = 0xaA99207Af9ce0f57400Ae817e8969d6a1935548f;\n r_0_2.s_1 = r_0_2_1;\n }\n {\n address r_0_2_2 = 0x1352361a93e03ae1fCa369236898db50d892e504;\n r_0_2.s_2 = r_0_2_2;\n }\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000177c739bd977d62c995b9f11cf73700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060000000000000000000000000aa99207af9ce0f57400ae817e8969d6a1935548f0000000000000000000000001352361a93e03ae1fca369236898db50d892e50400000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b36b30853b1f5a530edeea9056d03aeff92c5b260000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d08e42d80dc65b94172b3ac7e5000e6e9b52caa300000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a8020c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a806f000000000000000000000000000000000000000000" + }, + { + "name": "random-((bool,bytes16),int80,(int56),(string,address,bool,bytes8,int168),address)", + "type": "((bool,bytes16),int80,(int56),(string,address,bool,bytes8,int168),address)", + "value": [ + [false, "0x547d940576b6684e7577ce48a1b680a7"], + "195275467286069587507060", + ["-31858278206719536"], + [ + "Moo é🚀éoooo🚀🚀ooééMMoMoooéM éMoé🚀oooooooéMo 🚀MoooMéoooéMo🚀M🚀 ", + "0x5ff8345CDa8c3D653E180E91442821F27A305b1f", + false, + "0x948ea2fab7caa578", + "147519962802338650405257059499066995236534275095098" + ], + "0x4b5e519B396158cDC09Af33f981503ba8e5BCE08" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x547d940576b6684e7577ce48a1b680a7" + } + ] + }, + { + "type": "number", + "value": "195275467286069587507060" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-31858278206719536" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoooo🚀🚀ooééMMoMoooéM éMoé🚀oooooooéMo 🚀MoooMéoooéMo🚀M🚀 " + }, + { + "type": "address", + "value": "0x5ff8345CDa8c3D653E180E91442821F27A305b1f" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x948ea2fab7caa578" + }, + { + "type": "number", + "value": "147519962802338650405257059499066995236534275095098" + } + ] + }, + { + "type": "address", + "value": "0x4b5e519B396158cDC09Af33f981503ba8e5BCE08" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610373806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101d4565b60405180910390f35b61005661016d565b61005e61016d565b60408051808201825260008082526f547d940576b6684e7577ce48a1b680a760801b602080840191909152918452692959e77fc2e9be8c7774848301528251808301845266712eef6baac62f19815284840152825160a0810184526060808252928101829052928301819052908201819052608082015260006040518060800160405280605b81526020016102e3605b9139825250735ff8345cda8c3d653e180e91442821f27a305b1f602082015260006040820152671291d45f56f954af60c31b6060808301919091527464efefea25285dde462b71ed6ed8654861399d3a3a60808084019190915290830191909152734b5e519b396158cdc09af33f981503ba8e5bce0890820152919050565b6040805160e081018252600060a080830182815260c084018390528352602080840183905284518082018652838152848601528451918201855260608083529082018390529381018290528084018290526080818101839052938301529181019190915290565b60006020808352835180511515828501526fffffffffffffffffffffffffffffffff1982820151166040850152508084015160090b606084015260408401515160060b6080840152606084015160c060a0850152805160a060e086015280518061018087015260005b8181101561025a578281018501518782016101a00152840161023d565b8181111561026d5760006101a083890101525b50928201516001600160a01b03166101008601526040820151151561012086015260608201516001600160c01b0319166101408601526080820151601481900b6101608701529260808701516001600160a01b03811660c08801529350601f01601f1916949094016101a0019594505050505056fe4d6f6f20c3a9f09f9a80c3a96f6f6f6ff09f9a80f09f9a806f6fc3a9c3a94d4d6f4d6f6f6fc3a94d20c3a94d6fc3a9f09f9a806f6f6f6f6f6f6fc3a94d6f20f09f9a804d6f6f6f4dc3a96f6f6fc3a94d6ff09f9a804df09f9a8020a2646970667358221220c1bd870396894897247c899f9de8991d7ad765f363e82742d99d896ac35e12fe64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ae1e6302 {\n bool s_0;\n bytes16 s_1;\n }\n\n struct S_14df74d1 {\n int56 s_0;\n }\n\n struct S_a80e594b {\n string s_0;\n address s_1;\n bool s_2;\n bytes8 s_3;\n int168 s_4;\n }\n\n struct S_9a5307e2 {\n S_ae1e6302 s_0;\n int80 s_1;\n S_14df74d1 s_2;\n S_a80e594b s_3;\n address s_4;\n }\n\n function test () public pure returns (S_9a5307e2 memory) {\n S_9a5307e2 memory r;\n {\n S_ae1e6302 memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n {\n bytes16 r_0_1 = bytes16(0x547d940576b6684e7577ce48a1b680a7);\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n int80 r_1 = 195275467286069587507060;\n r.s_1 = r_1;\n }\n {\n S_14df74d1 memory r_2;\n {\n int56 r_2_0 = -31858278206719536;\n r_2.s_0 = r_2_0;\n }\n r.s_2 = r_2;\n }\n {\n S_a80e594b memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀éoooo🚀🚀ooééMMoMoooéM éMoé🚀oooooooéMo 🚀MoooMéoooéMo🚀M🚀 \";\n r_3.s_0 = r_3_0;\n }\n {\n address r_3_1 = 0x5ff8345CDa8c3D653E180E91442821F27A305b1f;\n r_3.s_1 = r_3_1;\n }\n {\n bool r_3_2 = false;\n r_3.s_2 = r_3_2;\n }\n {\n bytes8 r_3_3 = bytes8(0x948ea2fab7caa578);\n r_3.s_3 = r_3_3;\n }\n {\n int168 r_3_4 = 147519962802338650405257059499066995236534275095098;\n r_3.s_4 = r_3_4;\n }\n r.s_3 = r_3;\n }\n {\n address r_4 = 0x4b5e519B396158cDC09Af33f981503ba8e5BCE08;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000547d940576b6684e7577ce48a1b680a700000000000000000000000000000000000000000000000000000000000000000000000000002959e77fc2e9be8c7774ffffffffffffffffffffffffffffffffffffffffffffffffff8ed110945539d000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000004b5e519b396158cdc09af33f981503ba8e5bce0800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000005ff8345cda8c3d653e180e91442821f27a305b1f0000000000000000000000000000000000000000000000000000000000000000948ea2fab7caa578000000000000000000000000000000000000000000000000000000000000000000000064efefea25285dde462b71ed6ed8654861399d3a3a000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a80c3a96f6f6f6ff09f9a80f09f9a806f6fc3a9c3a94d4d6f4d6f6f6fc3a94d20c3a94d6fc3a9f09f9a806f6f6f6f6f6f6fc3a94d6f20f09f9a804d6f6f6f4dc3a96f6f6fc3a94d6ff09f9a804df09f9a80200000000000" + }, + { + "name": "random-((bool,int112[2],(address,(uint24),string,bool),bytes6,address),string)", + "type": "((bool,int112[2],(address,(uint24),string,bool),bytes6,address),string)", + "value": [ + [ + false, + ["972942638256654382999419594160444", "23183086320580162713252726095638"], + [ + "0x7A23963f0F1686C549c5E4DA6E8A00e42b5a87A1", + ["2215555"], + "Moo é🚀 M🚀🚀ééM ééo o ooéMM éo🚀oMoMo🚀🚀 M oMo🚀🚀éoé oéoMé🚀oMMM🚀", + true + ], + "0x0b8f305d7c8b", + "0x2e2728011E0Ec8DD860aB173178aD49d372ed93c" + ], + "Moo é🚀o 🚀é🚀oo🚀o é🚀🚀oMo🚀é" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "972942638256654382999419594160444" + }, + { + "type": "number", + "value": "23183086320580162713252726095638" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x7A23963f0F1686C549c5E4DA6E8A00e42b5a87A1" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2215555" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 M🚀🚀ééM ééo o ooéMM éo🚀oMoMo🚀🚀 M oMo🚀🚀éoé oéoMé🚀oMMM🚀" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x0b8f305d7c8b" + }, + { + "type": "address", + "value": "0x2e2728011E0Ec8DD860aB173178aD49d372ed93c" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o 🚀é🚀oo🚀o é🚀🚀oMo🚀é" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610450806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102c4565b60405180910390f35b610056610184565b61005e610184565b6100666101a4565b6000815261007261020c565b6d2ff843377dfa25a32285918f393c81526d01249c978b24997f1c9e918cbf166020808301919091528201526100d160408051608081018252600080825282516020808201855282825283015260609282018390529181019190915290565b737a23963f0f1686c549c5e4da6e8a00e42b5a87a1815260408051602080820183526221ce83825280840191909152815160a0810190925260648083526000929161038490830139604080840191909152600160608085019190915284820193909352650b8f305d7c8b60d01b84840152732e2728011e0ec8dd860ab173178ad49d372ed93c60808501529284525081519081019091526033808252600091906103e86020830139602083015250919050565b60405180604001604052806101976101a4565b8152602001606081525090565b6040518060a001604052806000151581526020016101c061020c565b81526020016101f860408051608081018252600080825282516020808201855282825283015260609282018390529181019190915290565b815260006020820181905260409091015290565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b8181101561025057602081850181015186830182015201610234565b81811115610262576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b03815116825262ffffff60208201515116602083015260006040820151608060408501526102ae608085018261022a565b6060938401511515949093019390935250919050565b600060208083528351604082850152805115156060850152818101516080850160005b6002811015610307578251600d0b825291840191908401906001016102e7565b505050604081015160c080860152610323610120860182610277565b9050606082015161034060e08701826001600160d01b0319169052565b506080820151915061035e6101008601836001600160a01b03169052565b91850151848303601f1901604086015291610379818461022a565b969550505050505056fe4d6f6f20c3a9f09f9a80204df09f9a80f09f9a80c3a9c3a94d20c3a9c3a96f206f206f6fc3a94d4d20c3a96ff09f9a806f4d6f4d6ff09f9a80f09f9a80204d206f4d6ff09f9a80f09f9a80c3a96fc3a9206fc3a96f4dc3a9f09f9a806f4d4d4df09f9a804d6f6f20c3a9f09f9a806f202020f09f9a80c3a9f09f9a806f6ff09f9a806f20c3a9f09f9a80f09f9a806f4d6ff09f9a80c3a9a26469706673582212201ce73fa2167d0e448ecddeddcb4d6760c9581ad2612325d44526bd082f7a24a464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5f492329 {\n uint24 s_0;\n }\n\n struct S_cde739cf {\n address s_0;\n S_5f492329 s_1;\n string s_2;\n bool s_3;\n }\n\n struct S_9f4d0871 {\n bool s_0;\n int112[2] s_1;\n S_cde739cf s_2;\n bytes6 s_3;\n address s_4;\n }\n\n struct S_a994e943 {\n S_9f4d0871 s_0;\n string s_1;\n }\n\n function test () public pure returns (S_a994e943 memory) {\n S_a994e943 memory r;\n {\n S_9f4d0871 memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n {\n int112[2] memory r_0_1;\n {\n int112 r_0_1_0 = 972942638256654382999419594160444;\n r_0_1[0] = r_0_1_0;\n }\n {\n int112 r_0_1_1 = 23183086320580162713252726095638;\n r_0_1[1] = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n {\n S_cde739cf memory r_0_2;\n {\n address r_0_2_0 = 0x7A23963f0F1686C549c5E4DA6E8A00e42b5a87A1;\n r_0_2.s_0 = r_0_2_0;\n }\n {\n S_5f492329 memory r_0_2_1;\n {\n uint24 r_0_2_1_0 = 2215555;\n r_0_2_1.s_0 = r_0_2_1_0;\n }\n r_0_2.s_1 = r_0_2_1;\n }\n {\n string memory r_0_2_2 = unicode\"Moo é🚀 M🚀🚀ééM ééo o ooéMM éo🚀oMoMo🚀🚀 M oMo🚀🚀éoé oéoMé🚀oMMM🚀\";\n r_0_2.s_2 = r_0_2_2;\n }\n {\n bool r_0_2_3 = true;\n r_0_2.s_3 = r_0_2_3;\n }\n r_0.s_2 = r_0_2;\n }\n {\n bytes6 r_0_3 = bytes6(0x0b8f305d7c8b);\n r_0.s_3 = r_0_3;\n }\n {\n address r_0_4 = 0x2e2728011E0Ec8DD860aB173178aD49d372ed93c;\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀o 🚀é🚀oo🚀o é🚀🚀oMo🚀é\";\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ff843377dfa25a32285918f393c00000000000000000000000000000000000001249c978b24997f1c9e918cbf1600000000000000000000000000000000000000000000000000000000000000c00b8f305d7c8b00000000000000000000000000000000000000000000000000000000000000000000000000002e2728011e0ec8dd860ab173178ad49d372ed93c0000000000000000000000007a23963f0f1686c549c5e4da6e8a00e42b5a87a1000000000000000000000000000000000000000000000000000000000021ce830000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000644d6f6f20c3a9f09f9a80204df09f9a80f09f9a80c3a9c3a94d20c3a9c3a96f206f206f6fc3a94d4d20c3a96ff09f9a806f4d6f4d6ff09f9a80f09f9a80204d206f4d6ff09f9a80f09f9a80c3a96fc3a9206fc3a96f4dc3a9f09f9a806f4d4d4df09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a806f202020f09f9a80c3a9f09f9a806f6ff09f9a806f20c3a9f09f9a80f09f9a806f4d6ff09f9a80c3a900000000000000000000000000" + }, + { + "name": "random-((bytes16,address[4],address[]),bytes4,string,(address,bytes29,uint128))", + "type": "((bytes16,address[4],address[]),bytes4,string,(address,bytes29,uint128))", + "value": [ + [ + "0x93f23991e2523053aaf85ffe34d15a0f", + [ + "0x30248A08800239fE2eD2210e53B4AA703D2E3d92", + "0xF6E9b5aBc6fd17036df499103DED94351b60cC75", + "0x62e88Bb492fF46d24895c88785DDB5E9869DA0DF", + "0x0Af104958F40c15Cdc770a8B7FE03312fCd1Ac34" + ], + [ + "0x18763B03aE587A6D794Fab827d0a90Cb0Ec04a02", + "0x8A5D9E1bEC8fA8Aff972584F410658Cdf512119C", + "0x9A1Ee16996511EA971Ff4C22Fc4E79dfF7284998" + ] + ], + "0x9cc0874b", + "Moo é🚀 oo🚀Mo", + [ + "0x5E8777Ad5fA50AFc76F59205C95a00F244015AEF", + "0xad98d26d271af86d6bad4f4fdd0823aee789b650757333b1ccfd04588c", + "151327265776043193789488881800184450873" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x93f23991e2523053aaf85ffe34d15a0f" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x30248A08800239fE2eD2210e53B4AA703D2E3d92" + }, + { + "type": "address", + "value": "0xF6E9b5aBc6fd17036df499103DED94351b60cC75" + }, + { + "type": "address", + "value": "0x62e88Bb492fF46d24895c88785DDB5E9869DA0DF" + }, + { + "type": "address", + "value": "0x0Af104958F40c15Cdc770a8B7FE03312fCd1Ac34" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x18763B03aE587A6D794Fab827d0a90Cb0Ec04a02" + }, + { + "type": "address", + "value": "0x8A5D9E1bEC8fA8Aff972584F410658Cdf512119C" + }, + { + "type": "address", + "value": "0x9A1Ee16996511EA971Ff4C22Fc4E79dfF7284998" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x9cc0874b" + }, + { + "type": "string", + "value": "Moo é🚀 oo🚀Mo" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5E8777Ad5fA50AFc76F59205C95a00F244015AEF" + }, + { + "type": "hexstring", + "value": "0xad98d26d271af86d6bad4f4fdd0823aee789b650757333b1ccfd04588c" + }, + { + "type": "number", + "value": "151327265776043193789488881800184450873" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104f8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610389565b60405180910390f35b6100566102a8565b61005e6102a8565b6100666102f6565b6f93f23991e2523053aaf85ffe34d15a0f60801b815261008461031e565b7330248a08800239fe2ed2210e53b4aa703d2e3d92815273f6e9b5abc6fd17036df499103ded94351b60cc756020808301919091527362e88bb492ff46d24895c88785ddb5e9869da0df604080840191909152730af104958f40c15cdc770a8b7fe03312fcd1ac34606084015290830191909152805160038082526080820190925260009181602001602082028036833701905050905060007318763b03ae587a6d794fab827d0a90cb0ec04a0290508082600081518110610148576101486104ac565b60200260200101906001600160a01b031690816001600160a01b031681525050506000738a5d9e1bec8fa8aff972584f410658cdf512119c90508082600181518110610196576101966104ac565b60200260200101906001600160a01b031690816001600160a01b031681525050506000739a1ee16996511ea971ff4c22fc4e79dff7284998905080826002815181106101e4576101e46104ac565b6001600160a01b039290921660209283029190910182015260408481019390935292845250639cc0874b60e01b838301528051808201825260138152724d6f6f20c3a9f09f9a80206f6ff09f9a804d6f60681b8184015283820152805160608082018352735e8777ad5fa50afc76f59205c95a00f244015aef82527fad98d26d271af86d6bad4f4fdd0823aee789b650757333b1ccfd04588c000000938201939093526f71d8923dd5da3adba4c97d837df9cf399181019190915290820152919050565b60405180608001604052806102bb6102f6565b815260006020820152606060408201819052016102f1604080516060810182526000808252602082018190529181019190915290565b905290565b6040805160608101909152600081526020810161031161031e565b8152602001606081525090565b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b8181101561036257602081850181015186830182015201610346565b81811115610374576000602083870101525b50601f01601f19169290920160200192915050565b60006020808352835160c0828501526101a084016001600160801b031982511660e086015282820151610100860160005b60048110156103e05782516001600160a01b0316825291850191908501906001016103ba565b5050506040919091015160c06101808601528051918290528201906000906101c08601905b8083101561042e5783516001600160a01b03168252928401926001929092019190840190610405565b50928601516001600160e01b031981166040870152926040870151868203601f190160608801529350610461818561033c565b935050505060608401516104a4608085018280516001600160a01b0316825260208082015162ffffff1916908301526040908101516001600160801b0316910152565b509392505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205a802c0b40fa14308387432cbd5c22197a2d1c1727fdc94ce32261ca730f3cf264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6ea8c27f {\n bytes16 s_0;\n address[4] s_1;\n address[] s_2;\n }\n\n struct S_0ff42d27 {\n address s_0;\n bytes29 s_1;\n uint128 s_2;\n }\n\n struct S_2f9b5c33 {\n S_6ea8c27f s_0;\n bytes4 s_1;\n string s_2;\n S_0ff42d27 s_3;\n }\n\n function test () public pure returns (S_2f9b5c33 memory) {\n S_2f9b5c33 memory r;\n {\n S_6ea8c27f memory r_0;\n {\n bytes16 r_0_0 = bytes16(0x93f23991e2523053aaf85ffe34d15a0f);\n r_0.s_0 = r_0_0;\n }\n {\n address[4] memory r_0_1;\n {\n address r_0_1_0 = 0x30248A08800239fE2eD2210e53B4AA703D2E3d92;\n r_0_1[0] = r_0_1_0;\n }\n {\n address r_0_1_1 = 0xF6E9b5aBc6fd17036df499103DED94351b60cC75;\n r_0_1[1] = r_0_1_1;\n }\n {\n address r_0_1_2 = 0x62e88Bb492fF46d24895c88785DDB5E9869DA0DF;\n r_0_1[2] = r_0_1_2;\n }\n {\n address r_0_1_3 = 0x0Af104958F40c15Cdc770a8B7FE03312fCd1Ac34;\n r_0_1[3] = r_0_1_3;\n }\n r_0.s_1 = r_0_1;\n }\n {\n address[] memory r_0_2 = new address[](3);\n {\n address r_0_2_0 = 0x18763B03aE587A6D794Fab827d0a90Cb0Ec04a02;\n r_0_2[0] = r_0_2_0;\n }\n {\n address r_0_2_1 = 0x8A5D9E1bEC8fA8Aff972584F410658Cdf512119C;\n r_0_2[1] = r_0_2_1;\n }\n {\n address r_0_2_2 = 0x9A1Ee16996511EA971Ff4C22Fc4E79dfF7284998;\n r_0_2[2] = r_0_2_2;\n }\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n bytes4 r_1 = bytes4(0x9cc0874b);\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀 oo🚀Mo\";\n r.s_2 = r_2;\n }\n {\n S_0ff42d27 memory r_3;\n {\n address r_3_0 = 0x5E8777Ad5fA50AFc76F59205C95a00F244015AEF;\n r_3.s_0 = r_3_0;\n }\n {\n bytes29 r_3_1 = bytes29(0xad98d26d271af86d6bad4f4fdd0823aee789b650757333b1ccfd04588c);\n r_3.s_1 = r_3_1;\n }\n {\n uint128 r_3_2 = 151327265776043193789488881800184450873;\n r_3.s_2 = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c09cc0874b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000005e8777ad5fa50afc76f59205c95a00f244015aefad98d26d271af86d6bad4f4fdd0823aee789b650757333b1ccfd04588c0000000000000000000000000000000000000071d8923dd5da3adba4c97d837df9cf3993f23991e2523053aaf85ffe34d15a0f0000000000000000000000000000000000000000000000000000000030248a08800239fe2ed2210e53b4aa703d2e3d92000000000000000000000000f6e9b5abc6fd17036df499103ded94351b60cc7500000000000000000000000062e88bb492ff46d24895c88785ddb5e9869da0df0000000000000000000000000af104958f40c15cdc770a8b7fe03312fcd1ac3400000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000018763b03ae587a6d794fab827d0a90cb0ec04a020000000000000000000000008a5d9e1bec8fa8aff972584f410658cdf512119c0000000000000000000000009a1ee16996511ea971ff4c22fc4e79dff728499800000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a80206f6ff09f9a804d6f00000000000000000000000000" + }, + { + "name": "random-((string,(string,uint112,address),string,bytes13),string,bytes13,bytes13[1])", + "type": "((string,(string,uint112,address),string,bytes13),string,bytes13,bytes13[1])", + "value": [ + [ + "Moo é🚀", + [ + "Moo é🚀🚀M🚀o 🚀🚀é🚀é🚀oé 🚀 ooéoo🚀 Méoo", + "5145220266057505257747033141493505", + "0x2b597162B29360586B084f2C35d0264016821274" + ], + "Moo é🚀o🚀 M🚀🚀 MMooé🚀🚀 éM o o🚀oMooooé🚀oM 🚀", + "0x54ea5bd4bf3e148ead466d343a" + ], + "Moo é🚀 🚀oéoM🚀oMéo Mo🚀é", + "0x49f4bb3aeb4ff67be146fe4b85", + ["0xbc26b1663fea439e81bad8d7d1"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀M🚀o 🚀🚀é🚀é🚀oé 🚀 ooéoo🚀 Méoo" + }, + { + "type": "number", + "value": "5145220266057505257747033141493505" + }, + { + "type": "address", + "value": "0x2b597162B29360586B084f2C35d0264016821274" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀 M🚀🚀 MMooé🚀🚀 éM o o🚀oMooooé🚀oM 🚀" + }, + { + "type": "hexstring", + "value": "0x54ea5bd4bf3e148ead466d343a" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 🚀oéoM🚀oMéo Mo🚀é" + }, + { + "type": "hexstring", + "value": "0x49f4bb3aeb4ff67be146fe4b85" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xbc26b1663fea439e81bad8d7d1" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104a4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102b1565b60405180910390f35b610056610197565b61005e610197565b6100666101ca565b604080518082018252600a8152689adede418753e13f3560b71b60208083019190915290835281516060808201845281526000918101829052918201526000604051806080016040528060438152602001610406604391398252506dfdadcf5365cf9dd4792450333f01602080830191909152732b597162b29360586b084f2c35d0264016821274604080840191909152838201929092528151608081019092526047808352600092916103bf908301396040808401919091526c2a752dea5f9f0a4756a3369a1d60991b606080850191909152928452805192830190525060268082526000919061044960208301396020830152506c49f4bb3aeb4ff67be146fe4b8560981b604082015261017a610213565b6cbc26b1663fea439e81bad8d7d160981b81526060820152919050565b60405180608001604052806101aa6101ca565b815260606020820181905260006040830152016101c5610213565b905290565b6040518060800160405280606081526020016101ff604080516060808201835281526000602082018190529181019190915290565b815260606020820152600060409091015290565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b818110156102575760208185018101518683018201520161023b565b81811115610269576000602083870101525b50601f01601f19169290920160200192915050565b8060005b60018110156102ab5781516001600160981b031916845260209384019390910190600101610282565b50505050565b6000602080835283516080828501528051608060a08601526102d7610120860182610231565b905082820151609f19808784030160c08801528151606084526102fd6060850182610231565b838701516dffffffffffffffffffffffffffff16858801526040808501516001600160a01b03169581019590955293850151888503830160e08a01529390506103468185610231565b9350505050606082015191506103696101008601836001600160981b0319169052565b91850151848303601f19016040860152916103848184610231565b9250505060408401516103a360608501826001600160981b0319169052565b5060608401516103b6608085018261027e565b50939250505056fe4d6f6f20c3a9f09f9a806ff09f9a80204df09f9a80f09f9a80204d4d6f6fc3a9f09f9a80f09f9a8020c3a94d206f206ff09f9a806f4d6f6f6f6fc3a9f09f9a806f4d20f09f9a804d6f6f20c3a9f09f9a80f09f9a804df09f9a806f20f09f9a80f09f9a80c3a9f09f9a80c3a9f09f9a806fc3a920f09f9a8020206f6fc3a96f6ff09f9a80204dc3a96f6f4d6f6f20c3a9f09f9a8020f09f9a806fc3a96f4df09f9a806f4dc3a96f204d6ff09f9a80c3a9a26469706673582212204069c0e01049b7840cb0dedbaa465722e9b1afb27d19189a1e57a77871aada9964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c8ea8146 {\n string s_0;\n uint112 s_1;\n address s_2;\n }\n\n struct S_2b4507fb {\n string s_0;\n S_c8ea8146 s_1;\n string s_2;\n bytes13 s_3;\n }\n\n struct S_8a28d922 {\n S_2b4507fb s_0;\n string s_1;\n bytes13 s_2;\n bytes13[1] s_3;\n }\n\n function test () public pure returns (S_8a28d922 memory) {\n S_8a28d922 memory r;\n {\n S_2b4507fb memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀\";\n r_0.s_0 = r_0_0;\n }\n {\n S_c8ea8146 memory r_0_1;\n {\n string memory r_0_1_0 = unicode\"Moo é🚀🚀M🚀o 🚀🚀é🚀é🚀oé 🚀 ooéoo🚀 Méoo\";\n r_0_1.s_0 = r_0_1_0;\n }\n {\n uint112 r_0_1_1 = 5145220266057505257747033141493505;\n r_0_1.s_1 = r_0_1_1;\n }\n {\n address r_0_1_2 = 0x2b597162B29360586B084f2C35d0264016821274;\n r_0_1.s_2 = r_0_1_2;\n }\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀o🚀 M🚀🚀 MMooé🚀🚀 éM o o🚀oMooooé🚀oM 🚀\";\n r_0.s_2 = r_0_2;\n }\n {\n bytes13 r_0_3 = bytes13(0x54ea5bd4bf3e148ead466d343a);\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀 🚀oéoM🚀oMéo Mo🚀é\";\n r.s_1 = r_1;\n }\n {\n bytes13 r_2 = bytes13(0x49f4bb3aeb4ff67be146fe4b85);\n r.s_2 = r_2;\n }\n {\n bytes13[1] memory r_3;\n {\n bytes13 r_3_0 = bytes13(0xbc26b1663fea439e81bad8d7d1);\n r_3[0] = r_3_0;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002a049f4bb3aeb4ff67be146fe4b8500000000000000000000000000000000000000bc26b1663fea439e81bad8d7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001a054ea5bd4bf3e148ead466d343a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000fdadcf5365cf9dd4792450333f010000000000000000000000002b597162b29360586b084f2c35d026401682127400000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a80f09f9a804df09f9a806f20f09f9a80f09f9a80c3a9f09f9a80c3a9f09f9a806fc3a920f09f9a8020206f6fc3a96f6ff09f9a80204dc3a96f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000474d6f6f20c3a9f09f9a806ff09f9a80204df09f9a80f09f9a80204d4d6f6fc3a9f09f9a80f09f9a8020c3a94d206f206ff09f9a806f4d6f6f6f6fc3a9f09f9a806f4d20f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a8020f09f9a806fc3a96f4df09f9a806f4dc3a96f204d6ff09f9a80c3a90000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((string,bytes6,(address,string,bool,int16,address)),string,address,string)", + "type": "((string,bytes6,(address,string,bool,int16,address)),string,address,string)", + "value": [ + [ + "Moo é🚀 M o🚀oéMé", + "0x6ccab81d27d0", + [ + "0x9c6aEAA2E40f694c840b3a762dc9b0951E559832", + "Moo é🚀o éo ooo🚀o🚀MoéM🚀Moéé oo", + true, + "-31960", + "0x5Dd9237Ba05e9bF860F3458155164b27FEb6184b" + ] + ], + "Moo é🚀oéMo oMoéM 🚀oéé🚀éé oMoéé ", + "0x674e30D7F77d49CD7210B5F631160b61b79fDD9c", + "Moo é🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 M o🚀oéMé" + }, + { + "type": "hexstring", + "value": "0x6ccab81d27d0" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x9c6aEAA2E40f694c840b3a762dc9b0951E559832" + }, + { + "type": "string", + "value": "Moo é🚀o éo ooo🚀o🚀MoéM🚀Moéé oo" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-31960" + }, + { + "type": "address", + "value": "0x5Dd9237Ba05e9bF860F3458155164b27FEb6184b" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oéMo oMoéM 🚀oéé🚀éé oMoéé " + }, + { + "type": "address", + "value": "0x674e30D7F77d49CD7210B5F631160b61b79fDD9c" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061043d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102a6565b60405180910390f35b6100566101f0565b61005e6101f0565b6100a3604080516060808201835280825260006020808401829052845160a0810186528281529081018390528085018290529182018190526080820152909182015290565b604080518082018252601881527f4d6f6f20c3a9f09f9a80204d206ff09f9a806fc3a94dc3a900000000000000006020808301919091529083526506ccab81d27d60d41b83820152815160a0810183526060818301819052600082850181905281830181905260808301819052739c6aeaa2e40f694c840b3a762dc9b0951e55983283528451918201909452602f8082529193929091906103d9908301396020808401919091526001604080850191909152617cd719606080860191909152735dd9237ba05e9bf860f3458155164b27feb6184b60808601528582019490945293855283519283019093525060318082526000926103a89083013960208084019190915273674e30d7f77d49cd7210b5f631160b61b79fdd9c6040808501919091528051808201909152600a8152689adede418753e13f3560b71b91810191909152606083015250919050565b6040518060800160405280610240604080516060808201835280825260006020808401829052845160a0810186528281529081018390528085018290529182018190526080820152909182015290565b8152606060208201819052600060408301529081015290565b6000815180845260005b8181101561027f57602081850181015186830182015201610263565b81811115610291576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835283516080828501528051606060a08601526102cc610100860182610259565b828401516001600160d01b03191660c0870152604090920151858303609f190160e087015280516001600160a01b0390811684528185015160a086860181905292949350909161031e90840182610259565b9050604084015115156040840152606084015160010b6060840152816080850151166080840152848801519450601f199350838782030160408801526103648186610259565b9450505050604085015161038360608601826001600160a01b03169052565b5060608501518185840301608086015261039d8382610259565b969550505050505056fe4d6f6f20c3a9f09f9a806fc3a94d6f206f4d6fc3a94d20f09f9a806fc3a9c3a9f09f9a80c3a9c3a9206f4d6fc3a9c3a9204d6f6f20c3a9f09f9a806f2020c3a96f206f6f6ff09f9a806ff09f9a804d6fc3a94df09f9a804d6fc3a9c3a9206f6fa264697066735822122040fbd6de91d5b3e274c31a6e6691640ee96891d9240083605eab40b3323005aa64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2493425f {\n address s_0;\n string s_1;\n bool s_2;\n int16 s_3;\n address s_4;\n }\n\n struct S_5e102375 {\n string s_0;\n bytes6 s_1;\n S_2493425f s_2;\n }\n\n struct S_9d7e961f {\n S_5e102375 s_0;\n string s_1;\n address s_2;\n string s_3;\n }\n\n function test () public pure returns (S_9d7e961f memory) {\n S_9d7e961f memory r;\n {\n S_5e102375 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀 M o🚀oéMé\";\n r_0.s_0 = r_0_0;\n }\n {\n bytes6 r_0_1 = bytes6(0x6ccab81d27d0);\n r_0.s_1 = r_0_1;\n }\n {\n S_2493425f memory r_0_2;\n {\n address r_0_2_0 = 0x9c6aEAA2E40f694c840b3a762dc9b0951E559832;\n r_0_2.s_0 = r_0_2_0;\n }\n {\n string memory r_0_2_1 = unicode\"Moo é🚀o éo ooo🚀o🚀MoéM🚀Moéé oo\";\n r_0_2.s_1 = r_0_2_1;\n }\n {\n bool r_0_2_2 = true;\n r_0_2.s_2 = r_0_2_2;\n }\n {\n int16 r_0_2_3 = -31960;\n r_0_2.s_3 = r_0_2_3;\n }\n {\n address r_0_2_4 = 0x5Dd9237Ba05e9bF860F3458155164b27FEb6184b;\n r_0_2.s_4 = r_0_2_4;\n }\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀oéMo oMoéM 🚀oéé🚀éé oMoéé \";\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x674e30D7F77d49CD7210B5F631160b61b79fDD9c;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000220000000000000000000000000674e30d7f77d49cd7210b5f631160b61b79fdd9c000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000000606ccab81d27d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a80204d206ff09f9a806fc3a94dc3a900000000000000000000000000000000000000009c6aeaa2e40f694c840b3a762dc9b0951e55983200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83280000000000000000000000005dd9237ba05e9bf860f3458155164b27feb6184b000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a806f2020c3a96f206f6f6ff09f9a806ff09f9a804d6fc3a94df09f9a804d6fc3a9c3a9206f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a806fc3a94d6f206f4d6fc3a94d20f09f9a806fc3a9c3a9f09f9a80c3a9c3a9206f4d6fc3a9c3a920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-((uint16,bool,(address,string,bool),bytes2),(address,address,address,string))", + "type": "((uint16,bool,(address,string,bool),bytes2),(address,address,address,string))", + "value": [ + [ + "63228", + false, + ["0x576996334F430EB66B1aEa70F9b2CE5E2785C9D9", "Moo é🚀o🚀🚀🚀ooo 🚀", true], + "0x7278" + ], + [ + "0x827bCB41156e8179edDcdB0545dfd9494814043b", + "0xa81572Eb09dB09cD20753e03D455ee1F7a9068BB", + "0xAC1d7A6b1950a9882c7ecc9030f17513009B6a6b", + "Moo é🚀" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "63228" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x576996334F430EB66B1aEa70F9b2CE5E2785C9D9" + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀🚀ooo 🚀" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x7278" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x827bCB41156e8179edDcdB0545dfd9494814043b" + }, + { + "type": "address", + "value": "0xa81572Eb09dB09cD20753e03D455ee1F7a9068BB" + }, + { + "type": "address", + "value": "0xAC1d7A6b1950a9882c7ecc9030f17513009B6a6b" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061037d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610298565b60405180910390f35b61005661016b565b61005e61016b565b6100666101a7565b61f6fc815260006020808301829052604080516060808201835281840181815282840195865273576996334f430eb66b1aea70f9b2ce5e2785c9d9835283518085018552601f81527f4d6f6f20c3a9f09f9a806ff09f9a80f09f9a80f09f9a806f6f6f20f09f9a8000818701529052600190945281850152610e4f60f31b83850152928452825160808101845280830192835273827bcb41156e8179eddcdb0545dfd9494814043b815273a81572eb09db09cd20753e03d455ee1f7a9068bb8183015273ac1d7a6b1950a9882c7ecc9030f17513009b6a6b818501528351808501909452600a8452689adede418753e13f3560b71b8483015292909152820152919050565b604051806040016040528061017e6101a7565b815260408051608081018252600080825260208281018290529282015260608082015291015290565b6040518060800160405280600061ffff1681526020016000151581526020016101f5604051806060016040528060006001600160a01b03168152602001606081526020016000151581525090565b8152600060209091015290565b6000815180845260005b818110156102285760208185018101518683018201520161020c565b8181111561023a576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151608060608501526102906080850182610202565b949350505050565b60208152600082516040602084015261ffff81511660608401526020810151151560808401526040810151608060a085015260018060a01b0381511660e0850152602081015160606101008601526102f4610140860182610202565b9050604082015115156101208601526060830151925061032060c08601846001600160f01b0319169052565b6020860151858203601f19016040870152925061033d818461024f565b969550505050505056fea26469706673582212204b5e0fe4dd67e4c7268d3e63fa2043eabbd708558c7fc77731393831273eaffb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fa5560ff {\n address s_0;\n string s_1;\n bool s_2;\n }\n\n struct S_ccd3e6ca {\n uint16 s_0;\n bool s_1;\n S_fa5560ff s_2;\n bytes2 s_3;\n }\n\n struct S_5b55e5c6 {\n address s_0;\n address s_1;\n address s_2;\n string s_3;\n }\n\n struct S_010bde35 {\n S_ccd3e6ca s_0;\n S_5b55e5c6 s_1;\n }\n\n function test () public pure returns (S_010bde35 memory) {\n S_010bde35 memory r;\n {\n S_ccd3e6ca memory r_0;\n {\n uint16 r_0_0 = 63228;\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n {\n S_fa5560ff memory r_0_2;\n {\n address r_0_2_0 = 0x576996334F430EB66B1aEa70F9b2CE5E2785C9D9;\n r_0_2.s_0 = r_0_2_0;\n }\n {\n string memory r_0_2_1 = unicode\"Moo é🚀o🚀🚀🚀ooo 🚀\";\n r_0_2.s_1 = r_0_2_1;\n }\n {\n bool r_0_2_2 = true;\n r_0_2.s_2 = r_0_2_2;\n }\n r_0.s_2 = r_0_2;\n }\n {\n bytes2 r_0_3 = bytes2(0x7278);\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n S_5b55e5c6 memory r_1;\n {\n address r_1_0 = 0x827bCB41156e8179edDcdB0545dfd9494814043b;\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0xa81572Eb09dB09cD20753e03D455ee1F7a9068BB;\n r_1.s_1 = r_1_1;\n }\n {\n address r_1_2 = 0xAC1d7A6b1950a9882c7ecc9030f17513009B6a6b;\n r_1.s_2 = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀\";\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000f6fc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000807278000000000000000000000000000000000000000000000000000000000000000000000000000000000000576996334f430eb66b1aea70f9b2ce5e2785c9d900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a806ff09f9a80f09f9a80f09f9a806f6f6f20f09f9a8000000000000000000000000000827bcb41156e8179eddcdb0545dfd9494814043b000000000000000000000000a81572eb09db09cd20753e03d455ee1f7a9068bb000000000000000000000000ac1d7a6b1950a9882c7ecc9030f17513009b6a6b0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,(int,(uint168,string,address,address),address,string[4]),address)", + "type": "(address,(int,(uint168,string,address,address),address,string[4]),address)", + "value": [ + "0xaBE7bC7c69FdE02dd826eA4C1b0DEc9f4E0450C4", + [ + "32965126527682706427426108139671410138024208463999789235608431142757895827110", + [ + "180275248772760063746601044319196330010035058826324", + "Moo é🚀🚀🚀é ooMoM🚀🚀oooo🚀M é🚀MMé🚀 🚀 o🚀M🚀oéo🚀MoMéM🚀oooM", + "0x664F8b18C384F1dD5fEE516ef93BaB96E22b41B6", + "0x83BF0899458e7e001F1AF90B44731bCeeb4DEf41" + ], + "0xC373A9067f29b8e1658Bc88E6DeAaD333321a3a5", + [ + "Moo é🚀Moooéo MMoéooo", + "Moo é🚀M M🚀o🚀éooMo🚀🚀oM oooo🚀oo🚀Mo", + "Moo é🚀oMo🚀🚀éo🚀MM éééMé oé 🚀oé 🚀o🚀oééMMMo", + "Moo é🚀🚀o🚀 éé🚀é 🚀o🚀oéoo" + ] + ], + "0xADf003d0A7830aF90c2E3973790642596Bc9C343" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xaBE7bC7c69FdE02dd826eA4C1b0DEc9f4E0450C4" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "32965126527682706427426108139671410138024208463999789235608431142757895827110" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "180275248772760063746601044319196330010035058826324" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀é ooMoM🚀🚀oooo🚀M é🚀MMé🚀 🚀 o🚀M🚀oéo🚀MoMéM🚀oooM" + }, + { + "type": "address", + "value": "0x664F8b18C384F1dD5fEE516ef93BaB96E22b41B6" + }, + { + "type": "address", + "value": "0x83BF0899458e7e001F1AF90B44731bCeeb4DEf41" + } + ] + }, + { + "type": "address", + "value": "0xC373A9067f29b8e1658Bc88E6DeAaD333321a3a5" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀Moooéo MMoéooo" + }, + { + "type": "string", + "value": "Moo é🚀M M🚀o🚀éooMo🚀🚀oM oooo🚀oo🚀Mo" + }, + { + "type": "string", + "value": "Moo é🚀oMo🚀🚀éo🚀MM éééMé oé 🚀oé 🚀o🚀oééMMMo" + }, + { + "type": "string", + "value": "Moo é🚀🚀o🚀 éé🚀é 🚀o🚀oéoo" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xADf003d0A7830aF90c2E3973790642596Bc9C343" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610581806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610362565b60405180910390f35b61005661022e565b61005e61022e565b73abe7bc7c69fde02dd826ea4c1b0dec9f4e0450c4815261007d61025e565b7f48e199b4bf27951586940c64513bbd96b21f135f243a0ba55a8184b70b3ceea681526040805160808082018352606060208084018290526000848601819052828501819052747b596dbc81a7a9cdd514e01e8c0c5ea6e645eedc548552855193840190955281835292939261043f9083013960208084019190915273664f8b18c384f1dd5fee516ef93bab96e22b41b66040808501919091527383bf0899458e7e001f1af90b44731bceeb4def416060850152908401929092525073c373a9067f29b8e1658bc88e6deaad333321a3a59082015261015a6102a9565b604080518082018252601a81527f4d6f6f20c3a9f09f9a804d6f6f6fc3a96f204d4d6fc3a96f6f6f00000000000060208083019190915290835281516060810190925260378083526000929161049f9083013990508082600160200201819052505060006040518060800160405280604981526020016104d660499139604080840191909152805160608101909152602d8082526000925061051f602083013960608084019190915283019190915250602082015273adf003d0a7830af90c2e3973790642596bc9c3436040820152919050565b604051806060016040528060006001600160a01b0316815260200161025161025e565b8152600060209091015290565b60408051608080820183526000808352835191820184528082526060602083810182905294830182905282015290918201908152600060208201526040016102a46102a9565b905290565b60405180608001604052806004905b60608152602001906001900390816102b85790505090565b6000815180845260005b818110156102f6576020818501810151868301820152016102da565b81811115610308576000602083870101525b50601f01601f19169290920160200192915050565b600082608081018360005b60048110156103575783830387526103418383516102d0565b6020978801979093509190910190600101610328565b509095945050505050565b60208152600060018060a01b03808451166020840152602084015160606040850152805160808501526020810151608060a086015260018060a81b03815116610100860152602081015160806101208701526103c26101808701826102d0565b90508360408301511661014087015283606083015116610160870152604083015193506103fa60c08701856001600160a01b03169052565b6060830151868203607f190160e08801529350610417818561031d565b9350505050604084015161043660608501826001600160a01b03169052565b50939250505056fe4d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a9206f6f4d6f4df09f9a80f09f9a806f6f6f6ff09f9a804d20c3a9f09f9a804d4dc3a9f09f9a8020f09f9a80206ff09f9a804df09f9a806fc3a96ff09f9a804d6f4dc3a94df09f9a806f6f6f4d4d6f6f20c3a9f09f9a804d204df09f9a806ff09f9a80c3a96f6f4d6ff09f9a80f09f9a806f4d206f6f6f6ff09f9a806f6ff09f9a804d6f4d6f6f20c3a9f09f9a806f4d6ff09f9a80f09f9a80c3a96ff09f9a804d4d20c3a9c3a9c3a94dc3a9206fc3a9202020f09f9a806fc3a920f09f9a806ff09f9a806fc3a9c3a94d4d4d6f4d6f6f20c3a9f09f9a80f09f9a806ff09f9a8020c3a9c3a9f09f9a80c3a920f09f9a806ff09f9a806fc3a96f6fa2646970667358221220922e3310015bc16c97e0089a88dfffcac988adaf0432b9257c1c28f63a8e0fba64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c735d4e1 {\n uint168 s_0;\n string s_1;\n address s_2;\n address s_3;\n }\n\n struct S_2c71b142 {\n int256 s_0;\n S_c735d4e1 s_1;\n address s_2;\n string[4] s_3;\n }\n\n struct S_3147cd8f {\n address s_0;\n S_2c71b142 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_3147cd8f memory) {\n S_3147cd8f memory r;\n {\n address r_0 = 0xaBE7bC7c69FdE02dd826eA4C1b0DEc9f4E0450C4;\n r.s_0 = r_0;\n }\n {\n S_2c71b142 memory r_1;\n {\n int r_1_0 = 32965126527682706427426108139671410138024208463999789235608431142757895827110;\n r_1.s_0 = r_1_0;\n }\n {\n S_c735d4e1 memory r_1_1;\n {\n uint168 r_1_1_0 = 180275248772760063746601044319196330010035058826324;\n r_1_1.s_0 = r_1_1_0;\n }\n {\n string memory r_1_1_1 = unicode\"Moo é🚀🚀🚀é ooMoM🚀🚀oooo🚀M é🚀MMé🚀 🚀 o🚀M🚀oéo🚀MoMéM🚀oooM\";\n r_1_1.s_1 = r_1_1_1;\n }\n {\n address r_1_1_2 = 0x664F8b18C384F1dD5fEE516ef93BaB96E22b41B6;\n r_1_1.s_2 = r_1_1_2;\n }\n {\n address r_1_1_3 = 0x83BF0899458e7e001F1AF90B44731bCeeb4DEf41;\n r_1_1.s_3 = r_1_1_3;\n }\n r_1.s_1 = r_1_1;\n }\n {\n address r_1_2 = 0xC373A9067f29b8e1658Bc88E6DeAaD333321a3a5;\n r_1.s_2 = r_1_2;\n }\n {\n string[4] memory r_1_3;\n {\n string memory r_1_3_0 = unicode\"Moo é🚀Moooéo MMoéooo\";\n r_1_3[0] = r_1_3_0;\n }\n {\n string memory r_1_3_1 = unicode\"Moo é🚀M M🚀o🚀éooMo🚀🚀oM oooo🚀oo🚀Mo\";\n r_1_3[1] = r_1_3_1;\n }\n {\n string memory r_1_3_2 = unicode\"Moo é🚀oMo🚀🚀éo🚀MM éééMé oé 🚀oé 🚀o🚀oééMMMo\";\n r_1_3[2] = r_1_3_2;\n }\n {\n string memory r_1_3_3 = unicode\"Moo é🚀🚀o🚀 éé🚀é 🚀o🚀oéoo\";\n r_1_3[3] = r_1_3_3;\n }\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xADf003d0A7830aF90c2E3973790642596Bc9C343;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000abe7bc7c69fde02dd826ea4c1b0dec9f4e0450c40000000000000000000000000000000000000000000000000000000000000060000000000000000000000000adf003d0a7830af90c2e3973790642596bc9c34348e199b4bf27951586940c64513bbd96b21f135f243a0ba55a8184b70b3ceea60000000000000000000000000000000000000000000000000000000000000080000000000000000000000000c373a9067f29b8e1658bc88e6deaad333321a3a5000000000000000000000000000000000000000000000000000000000000018000000000000000000000007b596dbc81a7a9cdd514e01e8c0c5ea6e645eedc540000000000000000000000000000000000000000000000000000000000000080000000000000000000000000664f8b18c384f1dd5fee516ef93bab96e22b41b600000000000000000000000083bf0899458e7e001f1af90b44731bceeb4def4100000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a9206f6f4d6f4df09f9a80f09f9a806f6f6f6ff09f9a804d20c3a9f09f9a804d4dc3a9f09f9a8020f09f9a80206ff09f9a804df09f9a806fc3a96ff09f9a804d6f4dc3a94df09f9a806f6f6f4d000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000001a4d6f6f20c3a9f09f9a804d6f6f6fc3a96f204d4d6fc3a96f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a804d204df09f9a806ff09f9a80c3a96f6f4d6ff09f9a80f09f9a806f4d206f6f6f6ff09f9a806f6ff09f9a804d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000494d6f6f20c3a9f09f9a806f4d6ff09f9a80f09f9a80c3a96ff09f9a804d4d20c3a9c3a9c3a94dc3a9206fc3a9202020f09f9a806fc3a920f09f9a806ff09f9a806fc3a9c3a94d4d4d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a80f09f9a806ff09f9a8020c3a9c3a9f09f9a80c3a920f09f9a806ff09f9a806fc3a96f6f00000000000000000000000000000000000000" + }, + { + "name": "random-(address,bool,bool,bool,(bytes2,bool,bytes6,int64,bool[]))", + "type": "(address,bool,bool,bool,(bytes2,bool,bytes6,int64,bool[]))", + "value": [ + "0x2F9dbad02C3105A25cf9cf33B18b96e95a8B7e44", + true, + true, + true, + ["0x425e", false, "0x9944d7f54912", "8293293465876885322", [false, true]] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x2F9dbad02C3105A25cf9cf33B18b96e95a8B7e44" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x425e" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x9944d7f54912" + }, + { + "type": "number", + "value": "8293293465876885322" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101cf565b60405180910390f35b61005661017e565b61005e61017e565b732f9dbad02c3105a25cf9cf33b18b96e95a8b7e4481526001602082018190526040820181905260608201526100bd6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915290565b61212f60f11b8152600060208201819052654ca26bfaa48960d11b6040830152677317b277aba8ef4a60608301526002604051908082528060200260200182016040528015610116578160200160208202803683370190505b5090506000808260008151811061012f5761012f6102a7565b60200260200101901515908115158152505050600060019050808260018151811061015c5761015c6102a7565b9115156020928302919091019091015250608080830191909152820152919050565b6040805160a080820183526000808352602080840182905283850182905260608085018390528551938401865282845290830182905293820181905281840152608081810193909352909182015290565b6000602080835260018060a01b03845116818401528084015115156040840152604084015115156060840152606084015115156080840152608084015160a080850152610160840161ffff60f01b82511660c086015282820151151560e086015265ffffffffffff60d01b604083015116610100860152606082015160070b6101208601526080820151915060a0610140860152808251808352610180870191508484019350600092505b8083101561029c5783511515825292840192600192909201919084019061027a565b509695505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220de3eb01dc41473e05a992d7e08fc6ef33dfd569a07b86dbebd6a21d72086c82f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b5a58655 {\n bytes2 s_0;\n bool s_1;\n bytes6 s_2;\n int64 s_3;\n bool[] s_4;\n }\n\n struct S_2053132e {\n address s_0;\n bool s_1;\n bool s_2;\n bool s_3;\n S_b5a58655 s_4;\n }\n\n function test () public pure returns (S_2053132e memory) {\n S_2053132e memory r;\n {\n address r_0 = 0x2F9dbad02C3105A25cf9cf33B18b96e95a8B7e44;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n {\n S_b5a58655 memory r_4;\n {\n bytes2 r_4_0 = bytes2(0x425e);\n r_4.s_0 = r_4_0;\n }\n {\n bool r_4_1 = false;\n r_4.s_1 = r_4_1;\n }\n {\n bytes6 r_4_2 = bytes6(0x9944d7f54912);\n r_4.s_2 = r_4_2;\n }\n {\n int64 r_4_3 = 8293293465876885322;\n r_4.s_3 = r_4_3;\n }\n {\n bool[] memory r_4_4 = new bool[](2);\n {\n bool r_4_4_0 = false;\n r_4_4[0] = r_4_4_0;\n }\n {\n bool r_4_4_1 = true;\n r_4_4[1] = r_4_4_1;\n }\n r_4.s_4 = r_4_4;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000002f9dbad02c3105a25cf9cf33b18b96e95a8b7e4400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0425e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009944d7f5491200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007317b277aba8ef4a00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(address,bool[1],(uint24,(string),int24,address),bool,bytes30)[]", + "type": "(address,bool[1],(uint24,(string),int24,address),bool,bytes30)[]", + "value": [ + [ + "0x6de694568cFfe85A87fd71C309f1353e6d97CCc9", + [true], + [ + "104379", + ["Moo é🚀oo🚀oo é🚀ooo Mo🚀MoMoéMé oooé 🚀 🚀M🚀🚀é éo"], + "-7918119", + "0x20cA2D8AeB931D108A19AB84c72Ee69FF96BdD3E" + ], + false, + "0xdc7334be87c91c26dcd6ff8fac70c8249646a196caaa441a3b09a74a1129" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6de694568cFfe85A87fd71C309f1353e6d97CCc9" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "104379" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀oo é🚀ooo Mo🚀MoMoéMé oooé 🚀 🚀M🚀🚀é éo" + } + ] + }, + { + "type": "number", + "value": "-7918119" + }, + { + "type": "address", + "value": "0x20cA2D8AeB931D108A19AB84c72Ee69FF96BdD3E" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xdc7334be87c91c26dcd6ff8fac70c8249646a196caaa441a3b09a74a1129" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610419806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102ac565b60405180910390f35b60408051600180825281830190925260609160009190816020015b61007161017a565b81526020019060019003908161006957905050905061008e61017a565b736de694568cffe85a87fd71c309f1353e6d97ccc981526100ad6101be565b6001815260208201526100be6101dc565b620197bb815260408051602081019091526060815260006040518060800160405280604c8152602001610398604c913982525060208201526278d226196040808301919091527320ca2d8aeb931d108a19ab84c72ee69ff96bdd3e6060808401919091529083019190915260009082018190527fdc7334be87c91c26dcd6ff8fac70c8249646a196caaa441a3b09a74a11290000608083015282518291849161016957610169610381565b602090810291909101015250919050565b6040518060a0016040528060006001600160a01b0316815260200161019d6101be565b81526020016101aa6101dc565b815260006020820181905260409091015290565b60405180602001604052806001906020820280368337509192915050565b6040518060800160405280600062ffffff1681526020016101aa6040518060200160405280606081525090565b62ffffff815116825260006020808301516080828601528051905081608086015280518060a087015260005b818110156102515782810184015187820160c001528301610235565b8181111561026357600060c083890101525b506040850151925061027a604087018460020b9052565b6060850151925061029660608701846001600160a01b03169052565b601f01601f19169490940160c001949350505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561037257898403603f19018652825180516001600160a01b031685528881015160a0908a8701855b600181101561031f57825115158252918c0191908c0190600101610300565b50505088820151818a88015261033782880182610209565b91505060608083015161034d8289018215159052565b505060809182015161ffff1916959091019490945294870194918701916001016102d4565b50919998505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f6ff09f9a806f6f20c3a9f09f9a806f6f6f204d6ff09f9a804d6f4d6fc3a94dc3a9206f6f6fc3a920f09f9a802020f09f9a804df09f9a80f09f9a80c3a920c3a96fa26469706673582212203afd053b856dfeeb810e4d643b3d2bdf2dc10ba293a8c0c6760278c5db9153fb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_1c6c701b {\n uint24 s_0;\n S_97fc4627 s_1;\n int24 s_2;\n address s_3;\n }\n\n struct S_44e83e8b {\n address s_0;\n bool[1] s_1;\n S_1c6c701b s_2;\n bool s_3;\n bytes30 s_4;\n }\n\n function test () public pure returns (S_44e83e8b[] memory) {\n S_44e83e8b[] memory r = new S_44e83e8b[](1);\n {\n S_44e83e8b memory r_0;\n {\n address r_0_0 = 0x6de694568cFfe85A87fd71C309f1353e6d97CCc9;\n r_0.s_0 = r_0_0;\n }\n {\n bool[1] memory r_0_1;\n {\n bool r_0_1_0 = true;\n r_0_1[0] = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n {\n S_1c6c701b memory r_0_2;\n {\n uint24 r_0_2_0 = 104379;\n r_0_2.s_0 = r_0_2_0;\n }\n {\n S_97fc4627 memory r_0_2_1;\n {\n string memory r_0_2_1_0 = unicode\"Moo é🚀oo🚀oo é🚀ooo Mo🚀MoMoéMé oooé 🚀 🚀M🚀🚀é éo\";\n r_0_2_1.s_0 = r_0_2_1_0;\n }\n r_0_2.s_1 = r_0_2_1;\n }\n {\n int24 r_0_2_2 = -7918119;\n r_0_2.s_2 = r_0_2_2;\n }\n {\n address r_0_2_3 = 0x20cA2D8AeB931D108A19AB84c72Ee69FF96BdD3E;\n r_0_2.s_3 = r_0_2_3;\n }\n r_0.s_2 = r_0_2;\n }\n {\n bool r_0_3 = false;\n r_0.s_3 = r_0_3;\n }\n {\n bytes30 r_0_4 = bytes30(0xdc7334be87c91c26dcd6ff8fac70c8249646a196caaa441a3b09a74a1129);\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000006de694568cffe85a87fd71c309f1353e6d97ccc9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000dc7334be87c91c26dcd6ff8fac70c8249646a196caaa441a3b09a74a1129000000000000000000000000000000000000000000000000000000000000000197bb0000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff872dd900000000000000000000000020ca2d8aeb931d108a19ab84c72ee69ff96bdd3e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a806f6ff09f9a806f6f20c3a9f09f9a806f6f6f204d6ff09f9a804d6f4d6fc3a94dc3a9206f6f6fc3a920f09f9a802020f09f9a804df09f9a80f09f9a80c3a920c3a96f0000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,bool,(bytes23,bytes17,bytes18,int184,bool),uint32,bool[4])", + "type": "(bool,bool,(bytes23,bytes17,bytes18,int184,bool),uint32,bool[4])", + "value": [ + false, + true, + [ + "0xeca96f300fce83e0a6a176671541df99e4286f8ab8a5a5", + "0x766ff73add65b01e404d9526f5d4967770", + "0x76796c47481685c7f8bf1a47b0a1414e2acc", + "-11864387994009205910523010940966140556177928992386113021", + false + ], + "760720750", + [true, false, false, false] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xeca96f300fce83e0a6a176671541df99e4286f8ab8a5a5" + }, + { + "type": "hexstring", + "value": "0x766ff73add65b01e404d9526f5d4967770" + }, + { + "type": "hexstring", + "value": "0x76796c47481685c7f8bf1a47b0a1414e2acc" + }, + { + "type": "number", + "value": "-11864387994009205910523010940966140556177928992386113021" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "number", + "value": "760720750" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506102e6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101fa565b60405180910390f35b61005661015a565b61005e61015a565b600081526001602082015261009a6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b7feca96f300fce83e0a6a176671541df99e4286f8ab8a5a50000000000000000008152700766ff73add65b01e404d9526f5d496777607c1b6020820152711d9e5b11d205a171fe2fc691ec2850538ab360721b604080830191909152767bdeb7b08515af951a87eaa750cb1455695c25051addfc196060808401919091526000608084015290830191909152632d57ad6e908201526101376101b1565b600181526000602082018190526040820181905260608201526080820152919050565b6040805160a080820183526000808352602080840182905284519283018552818352820181905281840181905260608201819052608082015290918201908152600060208201526040016101ac6101b1565b905290565b60405180608001604052806004906020820280368337509192915050565b8060005b60048110156101f457815115158452602093840193909101906001016101d3565b50505050565b600061018082019050825115158252602083015115156020830152604083015168ffffffffffffffffff1981511660408401526effffffffffffffffffffffffffffff1960208201511660608401526dffffffffffffffffffffffffffff196040820151166080840152606081015160160b60a08401526080810151151560c084015250606083015161029560e084018263ffffffff169052565b5060808301516102a96101008401826101cf565b509291505056fea26469706673582212207986dbb6680b1b05c08bce6882e88908014c5f18dbe8548d9df00e69a5e06a5864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ad8ed4d9 {\n bytes23 s_0;\n bytes17 s_1;\n bytes18 s_2;\n int184 s_3;\n bool s_4;\n }\n\n struct S_e8f803c0 {\n bool s_0;\n bool s_1;\n S_ad8ed4d9 s_2;\n uint32 s_3;\n bool[4] s_4;\n }\n\n function test () public pure returns (S_e8f803c0 memory) {\n S_e8f803c0 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n S_ad8ed4d9 memory r_2;\n {\n bytes23 r_2_0 = bytes23(0xeca96f300fce83e0a6a176671541df99e4286f8ab8a5a5);\n r_2.s_0 = r_2_0;\n }\n {\n bytes17 r_2_1 = bytes17(0x766ff73add65b01e404d9526f5d4967770);\n r_2.s_1 = r_2_1;\n }\n {\n bytes18 r_2_2 = bytes18(0x76796c47481685c7f8bf1a47b0a1414e2acc);\n r_2.s_2 = r_2_2;\n }\n {\n int184 r_2_3 = -11864387994009205910523010940966140556177928992386113021;\n r_2.s_3 = r_2_3;\n }\n {\n bool r_2_4 = false;\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n {\n uint32 r_3 = 760720750;\n r.s_3 = r_3;\n }\n {\n bool[4] memory r_4;\n {\n bool r_4_0 = true;\n r_4[0] = r_4_0;\n }\n {\n bool r_4_1 = false;\n r_4[1] = r_4_1;\n }\n {\n bool r_4_2 = false;\n r_4[2] = r_4_2;\n }\n {\n bool r_4_3 = false;\n r_4[3] = r_4_3;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001eca96f300fce83e0a6a176671541df99e4286f8ab8a5a5000000000000000000766ff73add65b01e404d9526f5d496777000000000000000000000000000000076796c47481685c7f8bf1a47b0a1414e2acc0000000000000000000000000000ffffffffffffffffff8421484f7aea506ae5781558af34ebaa96a3dafae522030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d57ad6e0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,bool[1],address,bytes14[2],(uint248,bool[1][3]))", + "type": "(bool,bool[1],address,bytes14[2],(uint248,bool[1][3]))", + "value": [ + true, + [true], + "0x6Bc872b1e22A7e127333bcE991BDB5eC8E5ABE47", + ["0x19857f375ffc668a83bbb9b3c45d", "0xc902045836feeb0ec17c7edc593b"], + [ + "258194964794744524230559495263567441561223259568268014092085689186747213230", + [[false], [true], [true]] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0x6Bc872b1e22A7e127333bcE991BDB5eC8E5ABE47" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x19857f375ffc668a83bbb9b3c45d" + }, + { + "type": "hexstring", + "value": "0xc902045836feeb0ec17c7edc593b" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "258194964794744524230559495263567441561223259568268014092085689186747213230" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610334806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610270565b60405180910390f35b610056610136565b61005e610136565b6001815261006a610178565b600181526020820152736bc872b1e22a7e127333bce991bdb5ec8e5abe476040820152610095610196565b6d19857f375ffc668a83bbb9b3c45d60901b81526dc902045836feeb0ec17c7edc593b60901b602082015260608201526100cd6101b4565b7e92221783d2937ac969c7dc083f0f1f58153b16b3b49ad0330a996ae1d8e5ae81526100f76101d3565b6100ff610178565b60008152815261010d610178565b60018152602082015261011e610178565b60018152604082015260208201526080820152919050565b6040518060a00160405280600015158152602001610152610178565b815260006020820152604001610166610196565b81526020016101736101b4565b905290565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b604051806040016040528060006001600160f81b031681526020016101735b60405180606001604052806003905b6101ea610178565b8152602001906001900390816101e25790505090565b8060005b60018110156102255781511515845260209384019390910190600101610204565b50505050565b80516001600160f81b0316825260208082015181840160005b600381101561026857610258828451610200565b9183019190830190600101610244565b505050505050565b8151151581526020808301516101208301919061028f82850182610200565b506040848101516001600160a01b03169084015260608085015190840160005b60028110156102e157825171ffffffffffffffffffffffffffffffffffff1916825291830191908301906001016102af565b5050505060808301516102f760a084018261022b565b509291505056fea264697066735822122025962c9ce76a3b6a250db2a42003b271592018948ab27ddb6be50ef1f2de89dd64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_58eced15 {\n uint248 s_0;\n bool[1][3] s_1;\n }\n\n struct S_24570919 {\n bool s_0;\n bool[1] s_1;\n address s_2;\n bytes14[2] s_3;\n S_58eced15 s_4;\n }\n\n function test () public pure returns (S_24570919 memory) {\n S_24570919 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bool[1] memory r_1;\n {\n bool r_1_0 = true;\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x6Bc872b1e22A7e127333bcE991BDB5eC8E5ABE47;\n r.s_2 = r_2;\n }\n {\n bytes14[2] memory r_3;\n {\n bytes14 r_3_0 = bytes14(0x19857f375ffc668a83bbb9b3c45d);\n r_3[0] = r_3_0;\n }\n {\n bytes14 r_3_1 = bytes14(0xc902045836feeb0ec17c7edc593b);\n r_3[1] = r_3_1;\n }\n r.s_3 = r_3;\n }\n {\n S_58eced15 memory r_4;\n {\n uint248 r_4_0 = 258194964794744524230559495263567441561223259568268014092085689186747213230;\n r_4.s_0 = r_4_0;\n }\n {\n bool[1][3] memory r_4_1;\n {\n bool[1] memory r_4_1_0;\n {\n bool r_4_1_0_0 = false;\n r_4_1_0[0] = r_4_1_0_0;\n }\n r_4_1[0] = r_4_1_0;\n }\n {\n bool[1] memory r_4_1_1;\n {\n bool r_4_1_1_0 = true;\n r_4_1_1[0] = r_4_1_1_0;\n }\n r_4_1[1] = r_4_1_1;\n }\n {\n bool[1] memory r_4_1_2;\n {\n bool r_4_1_2_0 = true;\n r_4_1_2[0] = r_4_1_2_0;\n }\n r_4_1[2] = r_4_1_2;\n }\n r_4.s_1 = r_4_1;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000006bc872b1e22a7e127333bce991bdb5ec8e5abe4719857f375ffc668a83bbb9b3c45d000000000000000000000000000000000000c902045836feeb0ec17c7edc593b0000000000000000000000000000000000000092221783d2937ac969c7dc083f0f1f58153b16b3b49ad0330a996ae1d8e5ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(bool,bytes15[3],uint24[4],bool[3][1],(string,bytes23))", + "type": "(bool,bytes15[3],uint24[4],bool[3][1],(string,bytes23))", + "value": [ + false, + [ + "0xae509bacca4f742db480595be5fee7", + "0x3fa8b72c31a63e3c60523598f0deb5", + "0x453058e2bc9bb8d4ba79b38f8e892a" + ], + ["3723455", "8302641", "8184613", "13888049"], + [[false, true, false]], + [ + "Moo é🚀oo éooMoMMo oé oéooM éo🚀 ", + "0xac9fb925caf5f35a540da198e66c3648ceb2776fbb9da2" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xae509bacca4f742db480595be5fee7" + }, + { + "type": "hexstring", + "value": "0x3fa8b72c31a63e3c60523598f0deb5" + }, + { + "type": "hexstring", + "value": "0x453058e2bc9bb8d4ba79b38f8e892a" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3723455" + }, + { + "type": "number", + "value": "8302641" + }, + { + "type": "number", + "value": "8184613" + }, + { + "type": "number", + "value": "13888049" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo éooMoMMo oé oéooM éo🚀 " + }, + { + "type": "hexstring", + "value": "0xac9fb925caf5f35a540da198e66c3648ceb2776fbb9da2" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610439806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610340565b60405180910390f35b61005661017a565b61005e61017a565b6000815261006a6101e3565b6eae509bacca4f742db480595be5fee760881b81526e3fa8b72c31a63e3c60523598f0deb560881b6020808301919091526e22982c715e4ddc6a5d3cd9c7c7449560891b60408301528201526100be610201565b6238d0bf8152627eb0316020820152627ce32560408083019190915262d3ea3160608301528201526100ee61021f565b6100f66101e3565b60008082526001602080840191909152604080840183905292845260608086019490945282518084019093529282529181019190915260006040518060600160405280602b81526020016103d9602b91398252507fac9fb925caf5f35a540da198e66c3648ceb2776fbb9da200000000000000000060208201526080820152919050565b6040518060a001604052806000151581526020016101966101e3565b81526020016101a3610201565b81526020016101b061021f565b81526020016101de604051806040016040528060608152602001600068ffffffffffffffffff191681525090565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180602001604052806001905b6102366101e3565b81526020019060019003908161022e5790505090565b8060005b600481101561027457815162ffffff16845260209384019390910190600101610250565b50505050565b806000805b600180821061028e57506102cd565b835186845b60038110156102b357825115158252602092830192909101908301610293565b50505060609590950194506020929092019160010161027f565b5050505050565b6000815160408452805180604086015260005b8181101561030457602081840181015160608884010152016102e7565b81811115610316576000606083880101525b5060209384015168ffffffffffffffffff1916938501939093525050601f01601f19160160600190565b600060208083528351151581840152808401516040840160005b600381101561038b57825170ffffffffffffffffffffffffffffffffff19168252918301919083019060010161035a565b5050505060408301516103a160a084018261024c565b5060608301516103b561012084018261027a565b506080830151610180838101526103d06101a08401826102d4565b94935050505056fe4d6f6f20c3a9f09f9a806f6f20c3a96f6f4d6f4d4d6f206fc3a9206fc3a96f6f4d20c3a96ff09f9a802020a264697066735822122000cb0ed662cad0e1f8b7fd3571874f4310d68efdfbc6e1a41624018a8d210cd964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_3bf09736 {\n string s_0;\n bytes23 s_1;\n }\n\n struct S_46f2a5f3 {\n bool s_0;\n bytes15[3] s_1;\n uint24[4] s_2;\n bool[3][1] s_3;\n S_3bf09736 s_4;\n }\n\n function test () public pure returns (S_46f2a5f3 memory) {\n S_46f2a5f3 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n bytes15[3] memory r_1;\n {\n bytes15 r_1_0 = bytes15(0xae509bacca4f742db480595be5fee7);\n r_1[0] = r_1_0;\n }\n {\n bytes15 r_1_1 = bytes15(0x3fa8b72c31a63e3c60523598f0deb5);\n r_1[1] = r_1_1;\n }\n {\n bytes15 r_1_2 = bytes15(0x453058e2bc9bb8d4ba79b38f8e892a);\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n uint24[4] memory r_2;\n {\n uint24 r_2_0 = 3723455;\n r_2[0] = r_2_0;\n }\n {\n uint24 r_2_1 = 8302641;\n r_2[1] = r_2_1;\n }\n {\n uint24 r_2_2 = 8184613;\n r_2[2] = r_2_2;\n }\n {\n uint24 r_2_3 = 13888049;\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n bool[3][1] memory r_3;\n {\n bool[3] memory r_3_0;\n {\n bool r_3_0_0 = false;\n r_3_0[0] = r_3_0_0;\n }\n {\n bool r_3_0_1 = true;\n r_3_0[1] = r_3_0_1;\n }\n {\n bool r_3_0_2 = false;\n r_3_0[2] = r_3_0_2;\n }\n r_3[0] = r_3_0;\n }\n r.s_3 = r_3;\n }\n {\n S_3bf09736 memory r_4;\n {\n string memory r_4_0 = unicode\"Moo é🚀oo éooMoMMo oé oéooM éo🚀 \";\n r_4.s_0 = r_4_0;\n }\n {\n bytes23 r_4_1 = bytes23(0xac9fb925caf5f35a540da198e66c3648ceb2776fbb9da2);\n r_4.s_1 = r_4_1;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000ae509bacca4f742db480595be5fee700000000000000000000000000000000003fa8b72c31a63e3c60523598f0deb50000000000000000000000000000000000453058e2bc9bb8d4ba79b38f8e892a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038d0bf00000000000000000000000000000000000000000000000000000000007eb03100000000000000000000000000000000000000000000000000000000007ce3250000000000000000000000000000000000000000000000000000000000d3ea3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000040ac9fb925caf5f35a540da198e66c3648ceb2776fbb9da2000000000000000000000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a806f6f20c3a96f6f4d6f4d4d6f206fc3a9206fc3a96f6f4d20c3a96ff09f9a802020000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,bytes6,address,(string[],(bool,bytes22,bytes30,bytes4,string)))", + "type": "(bool,bytes6,address,(string[],(bool,bytes22,bytes30,bytes4,string)))", + "value": [ + true, + "0xa11103836741", + "0x1980E4865D1C1631BE600c45CD9718980Ce6aefc", + [ + [ + "Moo é🚀o 🚀🚀🚀o🚀MMMMé M🚀é o", + "Moo é🚀🚀ooo🚀oM🚀o 🚀M🚀MéooMoéM🚀oooMéoM Mo 🚀🚀ooéoo🚀MMMéM ", + "Moo é🚀éoMéo" + ], + [ + false, + "0xaa91d3f1adb5a5dce5bdc0d817036b758f542d5f3772", + "0xdecec76c3f33d0dccede7b249ec4737feb8376d023a1df137b692bc2d8ac", + "0xb1ede891", + "Moo é🚀o oo 🚀oo oéoé🚀 éoMM ooo🚀MooM 🚀Mo é🚀oooM oo🚀ooéMM " + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xa11103836741" + }, + { + "type": "address", + "value": "0x1980E4865D1C1631BE600c45CD9718980Ce6aefc" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o 🚀🚀🚀o🚀MMMMé M🚀é o" + }, + { + "type": "string", + "value": "Moo é🚀🚀ooo🚀oM🚀o 🚀M🚀MéooMoéM🚀oooMéoM Mo 🚀🚀ooéoo🚀MMMéM " + }, + { + "type": "string", + "value": "Moo é🚀éoMéo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xaa91d3f1adb5a5dce5bdc0d817036b758f542d5f3772" + }, + { + "type": "hexstring", + "value": "0xdecec76c3f33d0dccede7b249ec4737feb8376d023a1df137b692bc2d8ac" + }, + { + "type": "hexstring", + "value": "0xb1ede891" + }, + { + "type": "string", + "value": "Moo é🚀o oo 🚀oo oéoé🚀 éoMM ooo🚀MooM 🚀Mo é🚀oooM oo🚀ooéMM " + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610572806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610335565b60405180910390f35b610056610282565b61005e610282565b6001815265a1110383674160d01b6020820152731980e4865d1c1631be600c45cd9718980ce6aefc60408201526100cb6040805180820182526060808252825160a08101845260008082526020828101829052948201819052818301526080810191909152909182015290565b60408051600380825260808201909252600091816020015b60608152602001906001900390816100e357905050905060006040518060600160405280602d8152602001610461602d91399050808260008151811061012b5761012b61044a565b60200260200101819052505060006040518060800160405280605981526020016104e460599139905080826001815181106101685761016861044a565b6020026020010181905250506000604051806040016040528060118152602001704d6f6f20c3a9f09f9a80c3a96f4dc3a96f60781b815250905080826002815181106101b6576101b661044a565b60209081029190910101525081526101f76040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915290565b6000808252755548e9f8d6dad2ee72dee06c0b81b5bac7aa16af9bb960511b6020808401919091527fdecec76c3f33d0dccede7b249ec4737feb8376d023a1df137b692bc2d8ac000060408085019190915263b1ede89160e01b60608501528051608081019091526056808252909161048e9083013960808301525060208201526060820152919050565b6040805160808101825260008082526020820181905291810191909152606081016102e36040805180820182526060808252825160a08101845260008082526020828101829052948201819052818301526080810191909152909182015290565b905290565b6000815180845260005b8181101561030e576020818501810151868301820152016102f2565b81811115610320576000602083870101525b50601f01601f19169290920160200192915050565b60006020808352835115158184015265ffffffffffff60d01b8185015116604084015260018060a01b036040850151166060840152606084015160808085015260e084018151604060a087015281815180845261010093508388019150838160051b8901019350858301925060005b818110156103d25760ff198986030183526103c08585516102e8565b945092860192918601916001016103a4565b50505050828201519150609f198582030160c086015281511515815269ffffffffffffffffffff1983830151168382015261ffff19604083015116604082015263ffffffff60e01b60608301511660608201526080820151925060a0608082015261044060a08201846102e8565b9695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f20f09f9a80f09f9a80f09f9a806ff09f9a804d4d4d4dc3a9204df09f9a80c3a9206f4d6f6f20c3a9f09f9a806f2020206f6f20f09f9a806f6f20206fc3a96fc3a9f09f9a8020c3a96f4d4d206f6f6ff09f9a804d6f6f4d20f09f9a804d6f2020c3a9f09f9a806f6f6f4d206f6ff09f9a806f6fc3a94d4d204d6f6f20c3a9f09f9a80f09f9a806f6f6ff09f9a806f4df09f9a806f20f09f9a804df09f9a804dc3a96f6f4d6fc3a94df09f9a806f6f6f4dc3a96f4d204d6f20f09f9a80f09f9a806f6fc3a96f6ff09f9a804d4d4dc3a94d20a26469706673582212206646a31b0319a52405dea0b4184003e5e6bdf588404ed4fa8bf8d6a16986802864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_3bd38af0 {\n bool s_0;\n bytes22 s_1;\n bytes30 s_2;\n bytes4 s_3;\n string s_4;\n }\n\n struct S_7488cda2 {\n string[] s_0;\n S_3bd38af0 s_1;\n }\n\n struct S_8e0c8459 {\n bool s_0;\n bytes6 s_1;\n address s_2;\n S_7488cda2 s_3;\n }\n\n function test () public pure returns (S_8e0c8459 memory) {\n S_8e0c8459 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bytes6 r_1 = bytes6(0xa11103836741);\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x1980E4865D1C1631BE600c45CD9718980Ce6aefc;\n r.s_2 = r_2;\n }\n {\n S_7488cda2 memory r_3;\n {\n string[] memory r_3_0 = new string[](3);\n {\n string memory r_3_0_0 = unicode\"Moo é🚀o 🚀🚀🚀o🚀MMMMé M🚀é o\";\n r_3_0[0] = r_3_0_0;\n }\n {\n string memory r_3_0_1 = unicode\"Moo é🚀🚀ooo🚀oM🚀o 🚀M🚀MéooMoéM🚀oooMéoM Mo 🚀🚀ooéoo🚀MMMéM \";\n r_3_0[1] = r_3_0_1;\n }\n {\n string memory r_3_0_2 = unicode\"Moo é🚀éoMéo\";\n r_3_0[2] = r_3_0_2;\n }\n r_3.s_0 = r_3_0;\n }\n {\n S_3bd38af0 memory r_3_1;\n {\n bool r_3_1_0 = false;\n r_3_1.s_0 = r_3_1_0;\n }\n {\n bytes22 r_3_1_1 = bytes22(0xaa91d3f1adb5a5dce5bdc0d817036b758f542d5f3772);\n r_3_1.s_1 = r_3_1_1;\n }\n {\n bytes30 r_3_1_2 = bytes30(0xdecec76c3f33d0dccede7b249ec4737feb8376d023a1df137b692bc2d8ac);\n r_3_1.s_2 = r_3_1_2;\n }\n {\n bytes4 r_3_1_3 = bytes4(0xb1ede891);\n r_3_1.s_3 = r_3_1_3;\n }\n {\n string memory r_3_1_4 = unicode\"Moo é🚀o oo 🚀oo oéoé🚀 éoMM ooo🚀MooM 🚀Mo é🚀oooM oo🚀ooéMM \";\n r_3_1.s_4 = r_3_1_4;\n }\n r_3.s_1 = r_3_1;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001a1110383674100000000000000000000000000000000000000000000000000000000000000000000000000001980e4865d1c1631be600c45cd9718980ce6aefc0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a806f20f09f9a80f09f9a80f09f9a806ff09f9a804d4d4d4dc3a9204df09f9a80c3a9206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a80f09f9a806f6f6ff09f9a806f4df09f9a806f20f09f9a804df09f9a804dc3a96f6f4d6fc3a94df09f9a806f6f6f4dc3a96f4d204d6f20f09f9a80f09f9a806f6fc3a96f6ff09f9a804d4d4dc3a94d200000000000000000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a80c3a96f4dc3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa91d3f1adb5a5dce5bdc0d817036b758f542d5f377200000000000000000000decec76c3f33d0dccede7b249ec4737feb8376d023a1df137b692bc2d8ac0000b1ede8910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a806f2020206f6f20f09f9a806f6f20206fc3a96fc3a9f09f9a8020c3a96f4d4d206f6f6ff09f9a804d6f6f4d20f09f9a804d6f2020c3a9f09f9a806f6f6f4d206f6ff09f9a806f6fc3a94d4d2000000000000000000000" + }, + { + "name": "random-(bool[1],string,address,string,(bytes28,bool[4],(uint184),bool))", + "type": "(bool[1],string,address,string,(bytes28,bool[4],(uint184),bool))", + "value": [ + [false], + "Moo é🚀🚀🚀🚀o🚀🚀o oMéé🚀MooéMMMMéoo", + "0x0aE154e14C0Bb2564f569a588D8023c95e70DA36", + "Moo é🚀🚀🚀oéo oM é🚀 oooéé🚀🚀oMooo M ééo 🚀ooo", + [ + "0xf0c45ae145d38e6b1ce4cd3e116a6ccfa693f37564870acd91375e7b", + [false, true, true, false], + ["3422628548776214959578390507501256180072667251267458439"], + false + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀🚀o🚀🚀o oMéé🚀MooéMMMMéoo" + }, + { + "type": "address", + "value": "0x0aE154e14C0Bb2564f569a588D8023c95e70DA36" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀oéo oM é🚀 oooéé🚀🚀oMooo M ééo 🚀ooo" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf0c45ae145d38e6b1ce4cd3e116a6ccfa693f37564870acd91375e7b" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3422628548776214959578390507501256180072667251267458439" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061040b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102b3565b60405180910390f35b61005661015b565b61005e61015b565b610066610194565b60008082529082526040805160608101909152603880825261039e6020830139602080840191909152730ae154e14c0bb2564f569a588d8023c95e70da366040808501919091528051608081019091526048808252600093509091610356908301396060830152506100d66101b2565b7ff0c45ae145d38e6b1ce4cd3e116a6ccfa693f37564870acd91375e7b0000000081526101016101ec565b600080825260016020808401829052604080850192909252606080850184905285820194909452815190810182527623bbe17c2b5723ffa52ff4e2bfeae3dd4437b841e9d587815290840152908201526080820152919050565b6040518060a0016040528061016e610194565b8152606060208201819052600060408301528082015260800161018f6101b2565b905290565b60405180602001604052806001906020820280368337509192915050565b604080516080810190915260008152602081016101cd6101ec565b8152604080516020808201835260008083529084019190915291015290565b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b8181101561023057602081850181015186830182015201610214565b81811115610242576000602083870101525b50601f01601f19169290920160200192915050565b805163ffffffff1916825260208082015181840160005b600481101561028d57825115158252918301919083019060010161026e565b505050506040810151516001600160b81b031660a083015260600151151560c090910152565b6020808252825160009190828483015b60018210156102e457825115158152918301916001919091019083016102c3565b505050830151610160604084015261030061018084018261020a565b9050604084015161031c60608501826001600160a01b03169052565b506060840151838203601f19016080850152610338828261020a565b915050608084015161034d60a0850182610257565b50939250505056fe4d6f6f20c3a9f09f9a80f09f9a80f09f9a806fc3a96f2020206f4d20c3a9f09f9a80206f6f6fc3a9c3a9f09f9a80f09f9a806f4d6f6f6f204d2020c3a9c3a96f20f09f9a806f6f6f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a806ff09f9a80f09f9a806f206f4dc3a9c3a9f09f9a804d6f6fc3a94d4d4d4dc3a96f6fa264697066735822122033f4cb287c68cc89fd1e8e5d1c78ef9caeee464d9cbc78fe38a6c25628b1c30264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_602e5ffe {\n uint184 s_0;\n }\n\n struct S_d863331d {\n bytes28 s_0;\n bool[4] s_1;\n S_602e5ffe s_2;\n bool s_3;\n }\n\n struct S_98983a61 {\n bool[1] s_0;\n string s_1;\n address s_2;\n string s_3;\n S_d863331d s_4;\n }\n\n function test () public pure returns (S_98983a61 memory) {\n S_98983a61 memory r;\n {\n bool[1] memory r_0;\n {\n bool r_0_0 = false;\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀🚀🚀🚀o🚀🚀o oMéé🚀MooéMMMMéoo\";\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x0aE154e14C0Bb2564f569a588D8023c95e70DA36;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀🚀🚀oéo oM é🚀 oooéé🚀🚀oMooo M ééo 🚀ooo\";\n r.s_3 = r_3;\n }\n {\n S_d863331d memory r_4;\n {\n bytes28 r_4_0 = bytes28(0xf0c45ae145d38e6b1ce4cd3e116a6ccfa693f37564870acd91375e7b);\n r_4.s_0 = r_4_0;\n }\n {\n bool[4] memory r_4_1;\n {\n bool r_4_1_0 = false;\n r_4_1[0] = r_4_1_0;\n }\n {\n bool r_4_1_1 = true;\n r_4_1[1] = r_4_1_1;\n }\n {\n bool r_4_1_2 = true;\n r_4_1[2] = r_4_1_2;\n }\n {\n bool r_4_1_3 = false;\n r_4_1[3] = r_4_1_3;\n }\n r_4.s_1 = r_4_1;\n }\n {\n S_602e5ffe memory r_4_2;\n {\n uint184 r_4_2_0 = 3422628548776214959578390507501256180072667251267458439;\n r_4_2.s_0 = r_4_2_0;\n }\n r_4.s_2 = r_4_2;\n }\n {\n bool r_4_3 = false;\n r_4.s_3 = r_4_3;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000ae154e14c0bb2564f569a588d8023c95e70da3600000000000000000000000000000000000000000000000000000000000001c0f0c45ae145d38e6b1ce4cd3e116a6ccfa693f37564870acd91375e7b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000023bbe17c2b5723ffa52ff4e2bfeae3dd4437b841e9d587000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a806ff09f9a80f09f9a806f206f4dc3a9c3a9f09f9a804d6f6fc3a94d4d4d4dc3a96f6f000000000000000000000000000000000000000000000000000000000000000000000000000000484d6f6f20c3a9f09f9a80f09f9a80f09f9a806fc3a96f2020206f4d20c3a9f09f9a80206f6f6fc3a9c3a9f09f9a80f09f9a806f4d6f6f6f204d2020c3a9c3a96f20f09f9a806f6f6f000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool[2],address,(bytes12[],bool,address[4],bytes11,bool))", + "type": "(bool[2],address,(bytes12[],bool,address[4],bytes11,bool))", + "value": [ + [false, false], + "0x5bB4e6AeD9b0823B7279fD2e05FA2b1C9f825faE", + [ + ["0xca5cf12cb164984063e4d9f5"], + true, + [ + "0x188c4247f16E124beA253319B6d85E9bC9956b07", + "0x81f48Ce6F1a3b1002E6F96cCea719303db408950", + "0xEB5F9b5E8bAB1129997f208AE367a40b2F595e42", + "0x50F48B48A73397b7ca61E32619D8FA815f197Fe8" + ], + "0xd7d3a9922778a3d6677b47", + true + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x5bB4e6AeD9b0823B7279fD2e05FA2b1C9f825faE" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xca5cf12cb164984063e4d9f5" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x188c4247f16E124beA253319B6d85E9bC9956b07" + }, + { + "type": "address", + "value": "0x81f48Ce6F1a3b1002E6F96cCea719303db408950" + }, + { + "type": "address", + "value": "0xEB5F9b5E8bAB1129997f208AE367a40b2F595e42" + }, + { + "type": "address", + "value": "0x50F48B48A73397b7ca61E32619D8FA815f197Fe8" + } + ] + }, + { + "type": "hexstring", + "value": "0xd7d3a9922778a3d6677b47" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103a9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610271565b60405180910390f35b6100566101a3565b61005e6101a3565b6100666101cf565b6000808252602080830191909152908252735bb4e6aed9b0823b7279fd2e05fa2b1c9f825fae908201526100986101ed565b60408051600180825281830190925260009160208083019080368337505081519192506bca5cf12cb164984063e4d9f560a01b9182915083906000906100e0576100e061035d565b6001600160a01b03199092166020928302919091018201529183525060019082015261010a610221565b73188c4247f16e124bea253319b6d85e9bc9956b0781527381f48ce6f1a3b1002e6f96ccea719303db408950602082015273eb5f9b5e8bab1129997f208ae367a40b2f595e426040808301919091527350f48b48a73397b7ca61e32619d8fa815f197fe8606080840191909152838201929092526ad7d3a9922778a3d6677b4760a81b9183019190915260016080830152820152919050565b60405180606001604052806101b66101cf565b8152600060208201526040016101ca6101ed565b905290565b60405180604001604052806002906020820280368337509192915050565b6040805160a081018252606081526000602082015290810161020d610221565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b8060005b600481101561026b5781516001600160a01b0316845260209384019390910190600101610243565b50505050565b6020808252825160009190828483015b60028210156102a25782511515815291830191600191909101908301610281565b505050838101516001600160a01b031660608401526040840151608080850152805161010060a086015280516101a08601819052908301906000906101c08701905b8083101561030e5783516001600160a01b03191682529285019260019290920191908501906102e4565b5093830151151560c087015260408301519361032d60e088018661023f565b60608401516001600160a81b03191661016088015260809093015115156101809096019590955250949350505050565b634e487b7160e01b600052603260045260246000fdfea264697066735822122024f745658d8b558bbbd921461a6d98cbfb864531f4c455b37933d50d6ee9e33064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8a88401e {\n bytes12[] s_0;\n bool s_1;\n address[4] s_2;\n bytes11 s_3;\n bool s_4;\n }\n\n struct S_03f21d83 {\n bool[2] s_0;\n address s_1;\n S_8a88401e s_2;\n }\n\n function test () public pure returns (S_03f21d83 memory) {\n S_03f21d83 memory r;\n {\n bool[2] memory r_0;\n {\n bool r_0_0 = false;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x5bB4e6AeD9b0823B7279fD2e05FA2b1C9f825faE;\n r.s_1 = r_1;\n }\n {\n S_8a88401e memory r_2;\n {\n bytes12[] memory r_2_0 = new bytes12[](1);\n {\n bytes12 r_2_0_0 = bytes12(0xca5cf12cb164984063e4d9f5);\n r_2_0[0] = r_2_0_0;\n }\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2.s_1 = r_2_1;\n }\n {\n address[4] memory r_2_2;\n {\n address r_2_2_0 = 0x188c4247f16E124beA253319B6d85E9bC9956b07;\n r_2_2[0] = r_2_2_0;\n }\n {\n address r_2_2_1 = 0x81f48Ce6F1a3b1002E6F96cCea719303db408950;\n r_2_2[1] = r_2_2_1;\n }\n {\n address r_2_2_2 = 0xEB5F9b5E8bAB1129997f208AE367a40b2F595e42;\n r_2_2[2] = r_2_2_2;\n }\n {\n address r_2_2_3 = 0x50F48B48A73397b7ca61E32619D8FA815f197Fe8;\n r_2_2[3] = r_2_2_3;\n }\n r_2.s_2 = r_2_2;\n }\n {\n bytes11 r_2_3 = bytes11(0xd7d3a9922778a3d6677b47);\n r_2.s_3 = r_2_3;\n }\n {\n bool r_2_4 = true;\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005bb4e6aed9b0823b7279fd2e05fa2b1c9f825fae000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000188c4247f16e124bea253319b6d85e9bc9956b0700000000000000000000000081f48ce6f1a3b1002e6f96ccea719303db408950000000000000000000000000eb5f9b5e8bab1129997f208ae367a40b2f595e4200000000000000000000000050f48b48a73397b7ca61e32619d8fa815f197fe8d7d3a9922778a3d6677b4700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001ca5cf12cb164984063e4d9f50000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes32[1],(int184,string,string,bool,int64)[],string)[3]", + "type": "(bytes32[1],(int184,string,string,bool,int64)[],string)[3]", + "value": [ + [ + ["0xc4d6082cf912b4c32b520894d51b7a26df085acb7b0eaeb8249b15e399a9b3dd"], + [ + [ + "3227389823094766559653875229413924396012027996347215850", + "Moo é🚀oMéM", + "Moo é🚀é oM🚀🚀éM🚀🚀🚀o🚀oé🚀🚀M 🚀oo🚀ooM", + true, + "7204642582434829093" + ], + [ + "-5766724485026436906284218955900451384388016007231142797", + "Moo é🚀MoM🚀", + "Moo é🚀oMoMMéooMoMéoéoM M o oéMoM éoo🚀 M🚀", + true, + "8502420496356956141" + ], + [ + "12147665247211144087673606942405219731406907656656044045", + "Moo é🚀oooM🚀 oooooM🚀MMé é🚀o🚀oM oM", + "Moo é🚀o🚀Mo🚀M o o🚀 oM 🚀 oéé 🚀oooo🚀é oMMéMMo🚀éééo o", + false, + "4669911440028927813" + ] + ], + "Moo é🚀 éooM🚀🚀🚀ooéooMoMéoooMooo🚀🚀o🚀Méoé🚀M 🚀éé" + ], + [ + ["0xf04276ae47e69596fe5e100b158f230d7fa613fc86e663da6a23be2603b75f00"], + [ + [ + "7878714061901294950406497810661660690695627703886513927", + "Moo é🚀ééé🚀oM 🚀ééo o🚀MoooM🚀é🚀 ééé🚀ooMoMéM🚀oMM ooM🚀oMMo ", + "Moo é🚀o🚀éooMo Mo é o🚀🚀M🚀", + true, + "3990742981477510431" + ] + ], + "Moo é🚀M oéoé oMéé🚀ooM🚀🚀oo🚀🚀ooéoé🚀 oMoMo🚀" + ], + [ + ["0x2c0a90c4f4e4390e9b691a378bf15e4f729186b9ed68307752d47092331724ca"], + [], + "Moo é🚀éMoM🚀oo oé🚀🚀🚀" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc4d6082cf912b4c32b520894d51b7a26df085acb7b0eaeb8249b15e399a9b3dd" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3227389823094766559653875229413924396012027996347215850" + }, + { + "type": "string", + "value": "Moo é🚀oMéM" + }, + { + "type": "string", + "value": "Moo é🚀é oM🚀🚀éM🚀🚀🚀o🚀oé🚀🚀M 🚀oo🚀ooM" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "7204642582434829093" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-5766724485026436906284218955900451384388016007231142797" + }, + { + "type": "string", + "value": "Moo é🚀MoM🚀" + }, + { + "type": "string", + "value": "Moo é🚀oMoMMéooMoMéoéoM M o oéMoM éoo🚀 M🚀" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "8502420496356956141" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "12147665247211144087673606942405219731406907656656044045" + }, + { + "type": "string", + "value": "Moo é🚀oooM🚀 oooooM🚀MMé é🚀o🚀oM oM" + }, + { + "type": "string", + "value": "Moo é🚀o🚀Mo🚀M o o🚀 oM 🚀 oéé 🚀oooo🚀é oMMéMMo🚀éééo o" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "4669911440028927813" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 éooM🚀🚀🚀ooéooMoMéoooMooo🚀🚀o🚀Méoé🚀M 🚀éé" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xf04276ae47e69596fe5e100b158f230d7fa613fc86e663da6a23be2603b75f00" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "7878714061901294950406497810661660690695627703886513927" + }, + { + "type": "string", + "value": "Moo é🚀ééé🚀oM 🚀ééo o🚀MoooM🚀é🚀 ééé🚀ooMoMéM🚀oMM ooM🚀oMMo " + }, + { + "type": "string", + "value": "Moo é🚀o🚀éooMo Mo é o🚀🚀M🚀" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "3990742981477510431" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M oéoé oMéé🚀ooM🚀🚀oo🚀🚀ooéoé🚀 oMoMo🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2c0a90c4f4e4390e9b691a378bf15e4f729186b9ed68307752d47092331724ca" + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "string", + "value": "Moo é🚀éMoM🚀oo oé🚀🚀🚀" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610981806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906105bc565b60405180910390f35b6100566104c6565b61005e6104c6565b6100666104f3565b61006e61051a565b7fc4d6082cf912b4c32b520894d51b7a26df085acb7b0eaeb8249b15e399a9b3dd8152815260408051600380825260808201909252600091816020015b6100b3610538565b8152602001906001900390816100ab5790505090506100d0610538565b7621b20dba5c2aebd9cdc122006f88d96f9e886f9ed2afea8152604080518082018252600f81526e4d6f6f20c3a9f09f9a806f4dc3a94d60881b6020808301919091528084019190915281516080810190925260458083526000929161087d90830139604083015250600160608201526763fc0841c3ae53256080820152815181908390600090610163576101636106f2565b602002602001018190525050610177610538565b763c351902a1a8e63989c02a50e2924a8ae2ab64fc0d7b8c198152604080518082018252601181526f9adede418753e13f35009ade9be13f35607f1b60208083019190915280840191909152815160608101909252603980835260009291610913908301396040830152506001606082018190526775feaa64c85b57ed6080830152825182918491811061020d5761020d6106f2565b602002602001018190525050610221610538565b767ed3d9da0190cc4a27247df34f30bc181897eaedcac00d81526040805160608101909152603280825260009190610709602083013990508082602001819052505060006040518060800160405280605181526020016108c260519139604083015250600060608201526740cedbb663750745608082015281518190839060029081106102b0576102b06106f2565b6020026020010181905250508082602001819052505060006040518060800160405280604f8152602001610782604f913960408301525081526102f16104f3565b6102f961051a565b7ff04276ae47e69596fe5e100b158f230d7fa613fc86e663da6a23be2603b75f0081528152604080516001808252818301909252600091816020015b61033d610538565b81526020019060019003908161033557905050905061035a610538565b765241f2eb797df68f42d5a8bee5a7bdaa78285a2f1b870781526040805160808101909152605d80825260009190610820602083013990508082602001819052505060006040518060600160405280602a81526020016107d1602a913960408301525060016060820152673761f79908d9ad1f60808201528151819083906000906103e7576103e76106f2565b60200260200101819052505080826020018190525050600060405180608001604052806047815260200161073b60479139604083015250602082015261042b6104f3565b61043361051a565b7f2c0a90c4f4e4390e9b691a378bf15e4f729186b9ed68307752d47092331724ca815281526040805160008082526020820190925281610489565b610476610538565b81526020019060019003908161046e5790505b5090508082602001819052505060006040518060600160405280602581526020016107fb6025913960408301525080826002602002015250919050565b60405180606001604052806003905b6104dd6104f3565b8152602001906001900390816104d55790505090565b604051806060016040528061050661051a565b815260200160608152602001606081525090565b60405180602001604052806001906020820280368337509192915050565b6040518060a00160405280600060160b81526020016060815260200160608152602001600015158152602001600060070b81525090565b6000815180845260005b8181101561059557602081850181015186830182015201610579565b818111156105a7576000602083870101525b50601f01601f19169290920160200192915050565b6020808252600090608083820181850186855b60038110156106e557878303601f1901845281518051606090818601908660005b600181101561060d5782518252918b0191908b01906001016105f0565b50505082890151868a01839052805191829052600582901b8701890191908a01908988019060005b818110156106b257607f198a86030183528351805160160b86528d81015160a08f88015261066660a088018261056f565b9050604080830151888303828a015261067f838261056f565b92505050878201511515888801528d82015160070b8e88015280965050508c840193508c83019250600181019050610635565b50505050604092830151868203878501529291506106d0818461056f565b968901969550505091860191506001016105cf565b5090979650505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f6f6f4df09f9a80206f6f6f6f6f4df09f9a804d4dc3a920c3a9f09f9a806ff09f9a806f4d206f4d4d6f6f20c3a9f09f9a804d206fc3a96fc3a9206f4dc3a9c3a9f09f9a806f6f4df09f9a80f09f9a806f6ff09f9a80f09f9a806f6fc3a96fc3a9f09f9a80206f4d6f4d6ff09f9a804d6f6f20c3a9f09f9a8020c3a96f6f4df09f9a80f09f9a80f09f9a806f6fc3a96f6f4d6f4dc3a96f6f6f4d6f6f6ff09f9a80f09f9a806ff09f9a804dc3a96fc3a9f09f9a804d20f09f9a80c3a9c3a94d6f6f20c3a9f09f9a806ff09f9a80c3a96f6f4d6f204d6f20c3a9206ff09f9a80f09f9a804df09f9a804d6f6f20c3a9f09f9a80c3a94d6f4df09f9a806f6f206fc3a9f09f9a80f09f9a80f09f9a804d6f6f20c3a9f09f9a80c3a9c3a9c3a9f09f9a806f4d20f09f9a80c3a9c3a96f20206ff09f9a804d6f6f6f4df09f9a80c3a9f09f9a8020c3a9c3a9c3a9f09f9a806f6f4d6f4dc3a94df09f9a806f4d4d206f6f4df09f9a806f4d4d6f204d6f6f20c3a9f09f9a80c3a9206f4df09f9a80f09f9a80c3a94df09f9a80f09f9a80f09f9a806ff09f9a806fc3a9f09f9a80f09f9a804d20f09f9a806f6ff09f9a806f6f4d4d6f6f20c3a9f09f9a806ff09f9a804d6ff09f9a804d206f206ff09f9a80206f4d20f09f9a80206fc3a9c3a920f09f9a806f6f6f6ff09f9a80c3a9206f4d4dc3a94d4d6ff09f9a80c3a9c3a9c3a96f206f4d6f6f20c3a9f09f9a806f4d6f4d4dc3a96f6f4d6f4dc3a96fc3a96f4d20204d206f206fc3a94d6f4d2020c3a96f6ff09f9a80204df09f9a80a2646970667358221220825b89cb6a679eda92ec869b3a8aca08bf56f2c31c36b7e3043371d05be26c6764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a79e3937 {\n int184 s_0;\n string s_1;\n string s_2;\n bool s_3;\n int64 s_4;\n }\n\n struct S_a1aeef04 {\n bytes32[1] s_0;\n S_a79e3937[] s_1;\n string s_2;\n }\n\n function test () public pure returns (S_a1aeef04[3] memory) {\n S_a1aeef04[3] memory r;\n {\n S_a1aeef04 memory r_0;\n {\n bytes32[1] memory r_0_0;\n {\n bytes32 r_0_0_0 = bytes32(0xc4d6082cf912b4c32b520894d51b7a26df085acb7b0eaeb8249b15e399a9b3dd);\n r_0_0[0] = r_0_0_0;\n }\n r_0.s_0 = r_0_0;\n }\n {\n S_a79e3937[] memory r_0_1 = new S_a79e3937[](3);\n {\n S_a79e3937 memory r_0_1_0;\n {\n int184 r_0_1_0_0 = 3227389823094766559653875229413924396012027996347215850;\n r_0_1_0.s_0 = r_0_1_0_0;\n }\n {\n string memory r_0_1_0_1 = unicode\"Moo é🚀oMéM\";\n r_0_1_0.s_1 = r_0_1_0_1;\n }\n {\n string memory r_0_1_0_2 = unicode\"Moo é🚀é oM🚀🚀éM🚀🚀🚀o🚀oé🚀🚀M 🚀oo🚀ooM\";\n r_0_1_0.s_2 = r_0_1_0_2;\n }\n {\n bool r_0_1_0_3 = true;\n r_0_1_0.s_3 = r_0_1_0_3;\n }\n {\n int64 r_0_1_0_4 = 7204642582434829093;\n r_0_1_0.s_4 = r_0_1_0_4;\n }\n r_0_1[0] = r_0_1_0;\n }\n {\n S_a79e3937 memory r_0_1_1;\n {\n int184 r_0_1_1_0 = -5766724485026436906284218955900451384388016007231142797;\n r_0_1_1.s_0 = r_0_1_1_0;\n }\n {\n string memory r_0_1_1_1 = unicode\"Moo é🚀MoM🚀\";\n r_0_1_1.s_1 = r_0_1_1_1;\n }\n {\n string memory r_0_1_1_2 = unicode\"Moo é🚀oMoMMéooMoMéoéoM M o oéMoM éoo🚀 M🚀\";\n r_0_1_1.s_2 = r_0_1_1_2;\n }\n {\n bool r_0_1_1_3 = true;\n r_0_1_1.s_3 = r_0_1_1_3;\n }\n {\n int64 r_0_1_1_4 = 8502420496356956141;\n r_0_1_1.s_4 = r_0_1_1_4;\n }\n r_0_1[1] = r_0_1_1;\n }\n {\n S_a79e3937 memory r_0_1_2;\n {\n int184 r_0_1_2_0 = 12147665247211144087673606942405219731406907656656044045;\n r_0_1_2.s_0 = r_0_1_2_0;\n }\n {\n string memory r_0_1_2_1 = unicode\"Moo é🚀oooM🚀 oooooM🚀MMé é🚀o🚀oM oM\";\n r_0_1_2.s_1 = r_0_1_2_1;\n }\n {\n string memory r_0_1_2_2 = unicode\"Moo é🚀o🚀Mo🚀M o o🚀 oM 🚀 oéé 🚀oooo🚀é oMMéMMo🚀éééo o\";\n r_0_1_2.s_2 = r_0_1_2_2;\n }\n {\n bool r_0_1_2_3 = false;\n r_0_1_2.s_3 = r_0_1_2_3;\n }\n {\n int64 r_0_1_2_4 = 4669911440028927813;\n r_0_1_2.s_4 = r_0_1_2_4;\n }\n r_0_1[2] = r_0_1_2;\n }\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀 éooM🚀🚀🚀ooéooMoMéoooMooo🚀🚀o🚀Méoé🚀M 🚀éé\";\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_a1aeef04 memory r_1;\n {\n bytes32[1] memory r_1_0;\n {\n bytes32 r_1_0_0 = bytes32(0xf04276ae47e69596fe5e100b158f230d7fa613fc86e663da6a23be2603b75f00);\n r_1_0[0] = r_1_0_0;\n }\n r_1.s_0 = r_1_0;\n }\n {\n S_a79e3937[] memory r_1_1 = new S_a79e3937[](1);\n {\n S_a79e3937 memory r_1_1_0;\n {\n int184 r_1_1_0_0 = 7878714061901294950406497810661660690695627703886513927;\n r_1_1_0.s_0 = r_1_1_0_0;\n }\n {\n string memory r_1_1_0_1 = unicode\"Moo é🚀ééé🚀oM 🚀ééo o🚀MoooM🚀é🚀 ééé🚀ooMoMéM🚀oMM ooM🚀oMMo \";\n r_1_1_0.s_1 = r_1_1_0_1;\n }\n {\n string memory r_1_1_0_2 = unicode\"Moo é🚀o🚀éooMo Mo é o🚀🚀M🚀\";\n r_1_1_0.s_2 = r_1_1_0_2;\n }\n {\n bool r_1_1_0_3 = true;\n r_1_1_0.s_3 = r_1_1_0_3;\n }\n {\n int64 r_1_1_0_4 = 3990742981477510431;\n r_1_1_0.s_4 = r_1_1_0_4;\n }\n r_1_1[0] = r_1_1_0;\n }\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀M oéoé oMéé🚀ooM🚀🚀oo🚀🚀ooéoé🚀 oMoMo🚀\";\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_a1aeef04 memory r_2;\n {\n bytes32[1] memory r_2_0;\n {\n bytes32 r_2_0_0 = bytes32(0x2c0a90c4f4e4390e9b691a378bf15e4f729186b9ed68307752d47092331724ca);\n r_2_0[0] = r_2_0_0;\n }\n r_2.s_0 = r_2_0;\n }\n {\n S_a79e3937[] memory r_2_1 = new S_a79e3937[](0);\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀éMoM🚀oo oé🚀🚀🚀\";\n r_2.s_2 = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000005e00000000000000000000000000000000000000000000000000000000000000880c4d6082cf912b4c32b520894d51b7a26df085acb7b0eaeb8249b15e399a9b3dd000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000030000000000000000000021b20dba5c2aebd9cdc122006f88d96f9e886f9ed2afea00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000063fc0841c3ae5325000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a806f4dc3a94d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a80c3a9206f4df09f9a80f09f9a80c3a94df09f9a80f09f9a80f09f9a806ff09f9a806fc3a9f09f9a80f09f9a804d20f09f9a806f6ff09f9a806f6f4d000000000000000000000000000000000000000000000000000000ffffffffffffffffffc3cae6fd5e5719c6763fd5af1d6db5751d549b03f2847300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000075feaa64c85b57ed00000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a804d6f4df09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a806f4d6f4d4dc3a96f6f4d6f4dc3a96fc3a96f4d20204d206f206fc3a94d6f4d2020c3a96f6ff09f9a80204df09f9a80000000000000000000000000000000007ed3d9da0190cc4a27247df34f30bc181897eaedcac00d00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040cedbb66375074500000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a806f6f6f4df09f9a80206f6f6f6f6f4df09f9a804d4dc3a920c3a9f09f9a806ff09f9a806f4d206f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a806ff09f9a804d6ff09f9a804d206f206ff09f9a80206f4d20f09f9a80206fc3a9c3a920f09f9a806f6f6f6ff09f9a80c3a9206f4d4dc3a94d4d6ff09f9a80c3a9c3a9c3a96f206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a8020c3a96f6f4df09f9a80f09f9a80f09f9a806f6fc3a96f6f4d6f4dc3a96f6f6f4d6f6f6ff09f9a80f09f9a806ff09f9a804dc3a96fc3a9f09f9a804d20f09f9a80c3a9c3a90000000000000000000000000000000000f04276ae47e69596fe5e100b158f230d7fa613fc86e663da6a23be2603b75f0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000005241f2eb797df68f42d5a8bee5a7bdaa78285a2f1b870700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000003761f79908d9ad1f000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a80c3a9c3a9c3a9f09f9a806f4d20f09f9a80c3a9c3a96f20206ff09f9a804d6f6f6f4df09f9a80c3a9f09f9a8020c3a9c3a9c3a9f09f9a806f6f4d6f4dc3a94df09f9a806f4d4d206f6f4df09f9a806f4d4d6f20000000000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a806ff09f9a80c3a96f6f4d6f204d6f20c3a9206ff09f9a80f09f9a804df09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000474d6f6f20c3a9f09f9a804d206fc3a96fc3a9206f4dc3a9c3a9f09f9a806f6f4df09f9a80f09f9a806f6ff09f9a80f09f9a806f6fc3a96fc3a9f09f9a80206f4d6f4d6ff09f9a80000000000000000000000000000000000000000000000000002c0a90c4f4e4390e9b691a378bf15e4f729186b9ed68307752d47092331724ca00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a80c3a94d6f4df09f9a806f6f206fc3a9f09f9a80f09f9a80f09f9a80000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int240,bool[2],uint168,(bytes2,address,bytes23,address)[4],int8)", + "type": "(int240,bool[2],uint168,(bytes2,address,bytes23,address)[4],int8)", + "value": [ + "-403702370009211908536660830119123770505137295644894082844678981841102604", + [true, false], + "174851448085213452956069975898037158060831376523577", + [ + [ + "0xace0", + "0x4EEf68612d9713d3cdF8c47fC0b34027910f69f2", + "0xf24b3655d0a0a6ad0425f6697219da4af6bb65af3618da", + "0x1D0d43cC9CAA3Ab04a997E7826ead5c31bBB8310" + ], + [ + "0x0693", + "0x50Bf174585b3a834A9b8270059e18eA3Cd3e96e3", + "0xa4f8fb2c47149fd2c80936ce347409d0a487e12445a73b", + "0x8C1660421BcD2958506F5c081b8b4268E78CFa39" + ], + [ + "0xa09d", + "0xA1C587Ec860eaf456cF76036Bc797BdF3B0fDf27", + "0x441884a6d4f877bf773a520d7d5c4e32560141ec4e6de1", + "0xBBf05Ce45877034c5ACfA84b23bf19E459463ABd" + ], + [ + "0x17e5", + "0x2D096e58B43eec9457a1002298fe0394f69B1881", + "0xc0caa5bcc6dd75e565a68828111da5d140dd345bd7108b", + "0x2AD93E2955EA8d12e09F3aB9578bd71faa8fF6b0" + ] + ], + "66" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-403702370009211908536660830119123770505137295644894082844678981841102604" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "number", + "value": "174851448085213452956069975898037158060831376523577" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xace0" + }, + { + "type": "address", + "value": "0x4EEf68612d9713d3cdF8c47fC0b34027910f69f2" + }, + { + "type": "hexstring", + "value": "0xf24b3655d0a0a6ad0425f6697219da4af6bb65af3618da" + }, + { + "type": "address", + "value": "0x1D0d43cC9CAA3Ab04a997E7826ead5c31bBB8310" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x0693" + }, + { + "type": "address", + "value": "0x50Bf174585b3a834A9b8270059e18eA3Cd3e96e3" + }, + { + "type": "hexstring", + "value": "0xa4f8fb2c47149fd2c80936ce347409d0a487e12445a73b" + }, + { + "type": "address", + "value": "0x8C1660421BcD2958506F5c081b8b4268E78CFa39" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa09d" + }, + { + "type": "address", + "value": "0xA1C587Ec860eaf456cF76036Bc797BdF3B0fDf27" + }, + { + "type": "hexstring", + "value": "0x441884a6d4f877bf773a520d7d5c4e32560141ec4e6de1" + }, + { + "type": "address", + "value": "0xBBf05Ce45877034c5ACfA84b23bf19E459463ABd" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x17e5" + }, + { + "type": "address", + "value": "0x2D096e58B43eec9457a1002298fe0394f69B1881" + }, + { + "type": "hexstring", + "value": "0xc0caa5bcc6dd75e565a68828111da5d140dd345bd7108b" + }, + { + "type": "address", + "value": "0x2AD93E2955EA8d12e09F3aB9578bd71faa8fF6b0" + } + ] + } + ] + }, + { + "type": "number", + "value": "66" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610454806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061039d565b60405180910390f35b61005661028d565b61005e61028d565b7fffffc581d8cbe4646be69bfffdfce8530c78095cc6e4b9e4467bcbb74d5758f481526100896102cb565b6001815260006020808301919091528201527477a3621a1b29883bd44b8924771925b63cf0cdc13960408201526100be6102e9565b604080516080808201835261056760f51b8252734eef68612d9713d3cdf8c47fc0b34027910f69f26020808401919091527ff24b3655d0a0a6ad0425f6697219da4af6bb65af3618da00000000000000000083850152731d0d43cc9caa3ab04a997e7826ead5c31bbb83106060808501919091529285528351808301855261069360f01b81527350bf174585b3a834a9b8270059e18ea3cd3e96e3818301527fa4f8fb2c47149fd2c80936ce347409d0a487e12445a73b00000000000000000081860152738c1660421bcd2958506f5c081b8b4268e78cfa3981850152858201528351808301855261a09d60f01b815273a1c587ec860eaf456cf76036bc797bdf3b0fdf27818301527f441884a6d4f877bf773a520d7d5c4e32560141ec4e6de10000000000000000008186015273bbf05ce45877034c5acfa84b23bf19e459463abd8185015285850152835180830185526117e560f01b8152732d096e58b43eec9457a1002298fe0394f69b1881918101919091527fc0caa5bcc6dd75e565a68828111da5d140dd345bd7108b00000000000000000093810193909352732ad93e2955ea8d12e09f3ab9578bd71faa8ff6b08383015283820192909252830191909152604290820152919050565b6040518060a001604052806000601d0b81526020016102aa6102cb565b8152600060208201526040016102be6102e9565b8152600060209091015290565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004905b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816102f85790505090565b8060005b600481101561039757815180516001600160f01b03191685526020808201516001600160a01b039081168288015260408084015168ffffffffffffffffff191690880152606092830151169186019190915260809094019390910190600101610333565b50505050565b8151601d0b81526020808301516102a08301919081840160005b60028110156103d65782511515825291830191908301906001016103b7565b5050505060408301516001600160a81b0316606083810191909152830151610401608084018261032f565b50608083015161041761028084018260000b9052565b509291505056fea2646970667358221220abb7e6baa4df82a70a3b807dfd0b72b5abcf98892bee293d78195ca1e5e3c4f264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5116c5ff {\n bytes2 s_0;\n address s_1;\n bytes23 s_2;\n address s_3;\n }\n\n struct S_3ed2b3f3 {\n int240 s_0;\n bool[2] s_1;\n uint168 s_2;\n S_5116c5ff[4] s_3;\n int8 s_4;\n }\n\n function test () public pure returns (S_3ed2b3f3 memory) {\n S_3ed2b3f3 memory r;\n {\n int240 r_0 = -403702370009211908536660830119123770505137295644894082844678981841102604;\n r.s_0 = r_0;\n }\n {\n bool[2] memory r_1;\n {\n bool r_1_0 = true;\n r_1[0] = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1[1] = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n uint168 r_2 = 174851448085213452956069975898037158060831376523577;\n r.s_2 = r_2;\n }\n {\n S_5116c5ff[4] memory r_3;\n {\n S_5116c5ff memory r_3_0;\n {\n bytes2 r_3_0_0 = bytes2(0xace0);\n r_3_0.s_0 = r_3_0_0;\n }\n {\n address r_3_0_1 = 0x4EEf68612d9713d3cdF8c47fC0b34027910f69f2;\n r_3_0.s_1 = r_3_0_1;\n }\n {\n bytes23 r_3_0_2 = bytes23(0xf24b3655d0a0a6ad0425f6697219da4af6bb65af3618da);\n r_3_0.s_2 = r_3_0_2;\n }\n {\n address r_3_0_3 = 0x1D0d43cC9CAA3Ab04a997E7826ead5c31bBB8310;\n r_3_0.s_3 = r_3_0_3;\n }\n r_3[0] = r_3_0;\n }\n {\n S_5116c5ff memory r_3_1;\n {\n bytes2 r_3_1_0 = bytes2(0x0693);\n r_3_1.s_0 = r_3_1_0;\n }\n {\n address r_3_1_1 = 0x50Bf174585b3a834A9b8270059e18eA3Cd3e96e3;\n r_3_1.s_1 = r_3_1_1;\n }\n {\n bytes23 r_3_1_2 = bytes23(0xa4f8fb2c47149fd2c80936ce347409d0a487e12445a73b);\n r_3_1.s_2 = r_3_1_2;\n }\n {\n address r_3_1_3 = 0x8C1660421BcD2958506F5c081b8b4268E78CFa39;\n r_3_1.s_3 = r_3_1_3;\n }\n r_3[1] = r_3_1;\n }\n {\n S_5116c5ff memory r_3_2;\n {\n bytes2 r_3_2_0 = bytes2(0xa09d);\n r_3_2.s_0 = r_3_2_0;\n }\n {\n address r_3_2_1 = 0xA1C587Ec860eaf456cF76036Bc797BdF3B0fDf27;\n r_3_2.s_1 = r_3_2_1;\n }\n {\n bytes23 r_3_2_2 = bytes23(0x441884a6d4f877bf773a520d7d5c4e32560141ec4e6de1);\n r_3_2.s_2 = r_3_2_2;\n }\n {\n address r_3_2_3 = 0xBBf05Ce45877034c5ACfA84b23bf19E459463ABd;\n r_3_2.s_3 = r_3_2_3;\n }\n r_3[2] = r_3_2;\n }\n {\n S_5116c5ff memory r_3_3;\n {\n bytes2 r_3_3_0 = bytes2(0x17e5);\n r_3_3.s_0 = r_3_3_0;\n }\n {\n address r_3_3_1 = 0x2D096e58B43eec9457a1002298fe0394f69B1881;\n r_3_3.s_1 = r_3_3_1;\n }\n {\n bytes23 r_3_3_2 = bytes23(0xc0caa5bcc6dd75e565a68828111da5d140dd345bd7108b);\n r_3_3.s_2 = r_3_3_2;\n }\n {\n address r_3_3_3 = 0x2AD93E2955EA8d12e09F3aB9578bd71faa8fF6b0;\n r_3_3.s_3 = r_3_3_3;\n }\n r_3[3] = r_3_3;\n }\n r.s_3 = r_3;\n }\n {\n int8 r_4 = 66;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0xffffc581d8cbe4646be69bfffdfce8530c78095cc6e4b9e4467bcbb74d5758f400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000077a3621a1b29883bd44b8924771925b63cf0cdc139ace00000000000000000000000000000000000000000000000000000000000000000000000000000000000004eef68612d9713d3cdf8c47fc0b34027910f69f2f24b3655d0a0a6ad0425f6697219da4af6bb65af3618da0000000000000000000000000000000000000000001d0d43cc9caa3ab04a997e7826ead5c31bbb8310069300000000000000000000000000000000000000000000000000000000000000000000000000000000000050bf174585b3a834a9b8270059e18ea3cd3e96e3a4f8fb2c47149fd2c80936ce347409d0a487e12445a73b0000000000000000000000000000000000000000008c1660421bcd2958506f5c081b8b4268e78cfa39a09d000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1c587ec860eaf456cf76036bc797bdf3b0fdf27441884a6d4f877bf773a520d7d5c4e32560141ec4e6de1000000000000000000000000000000000000000000bbf05ce45877034c5acfa84b23bf19e459463abd17e50000000000000000000000000000000000000000000000000000000000000000000000000000000000002d096e58b43eec9457a1002298fe0394f69b1881c0caa5bcc6dd75e565a68828111da5d140dd345bd7108b0000000000000000000000000000000000000000002ad93e2955ea8d12e09f3ab9578bd71faa8ff6b00000000000000000000000000000000000000000000000000000000000000042" + }, + { + "name": "random-(string,address[2],(uint168[],bytes1[1],string),string,bool)", + "type": "(string,address[2],(uint168[],bytes1[1],string),string,bool)", + "value": [ + "Moo é🚀é o oooé🚀🚀 🚀🚀éo 🚀o MMéo oo🚀o éoMo", + [ + "0x2f25B8224fd558585129f103a7C789a09B422B93", + "0x969ac1a550fAfc03E0024FCD799BFfDebb68a72c" + ], + [ + [ + "179843515880633008439626350009744337972267305043325", + "338377012014492455856762628722909119948344669918289" + ], + ["0xb3"], + "Moo é🚀🚀oo M🚀🚀oo🚀éooéMé oMoééo oM🚀🚀oéo éé🚀🚀 M🚀🚀🚀é Moéo" + ], + "Moo é🚀éééM🚀 Moo", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é o oooé🚀🚀 🚀🚀éo 🚀o MMéo oo🚀o éoMo" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x2f25B8224fd558585129f103a7C789a09B422B93" + }, + { + "type": "address", + "value": "0x969ac1a550fAfc03E0024FCD799BFfDebb68a72c" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "179843515880633008439626350009744337972267305043325" + }, + { + "type": "number", + "value": "338377012014492455856762628722909119948344669918289" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xb3" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀oo M🚀🚀oo🚀éooéMé oMoééo oM🚀🚀oéo éé🚀🚀 M🚀🚀🚀é Moéo" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éééM🚀 Moo" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061052e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061038d565b60405180910390f35b610056610203565b61005e610203565b60006040518060800160405280604381526020016104b66043913982525061008461023e565b732f25b8224fd558585129f103a7c789a09b422b93815273969ac1a550fafc03e0024fcd799bffdebb68a72c6020808301919091528201526100c461025c565b6040805160028082526060820183526000926020830190803683370190505090506000747b0dce29f64191caaed88282182e22977504e6857d9050808260008151811061011357610113610439565b60200260200101906001600160a81b031690816001600160a81b03168152505050600074e786e5fe59e7295c1fcca62f5240d6785f0cc654519050808260018151811061016257610162610439565b6001600160a81b0390921660209283029190910190910152508152610185610283565b60b360f81b81526020828101919091526040805160a0810190915260668082526000926104509083013960408084019190915283810192909252508051808201909152601981527f4d6f6f20c3a9f09f9a80c3a9c3a9c3a94df09f9a80204d6f6f000000000000006020820152606082015260006080820152919050565b6040518060a001604052806060815260200161021d61023e565b815260200161022a61025c565b815260606020820152600060409091015290565b60405180604001604052806002906020820280368337509192915050565b604051806060016040528060608152602001610276610283565b8152602001606081525090565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b818110156102c7576020818501810151868301820152016102ab565b818111156102d9576000602083870101525b50601f01601f19169290920160200192915050565b805160608084528151908401819052600091602091908201906080860190845b818110156103335783516001600160a81b03168352928401929184019160010161030e565b505082850151915082860160005b60018110156103685783516001600160f81b03191682529284019290840190600101610341565b505060408501519250858103604087015261038381846102a1565b9695505050505050565b60006020808352835160c0828501526103a960e08501826102a1565b9050818501516040850160005b60028110156103dc5782516001600160a01b0316825291840191908401906001016103b6565b50505060408501519150601f19808583030160808601526103fd82846102ee565b925060608601519150808584030160a08601525061041b82826102a1565b915050608084015161043160c085018215159052565b509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a806f6f204df09f9a80f09f9a806f6ff09f9a80c3a96f6fc3a94dc3a9206f4d6fc3a9c3a96f206f4df09f9a80f09f9a806fc3a96f20c3a9c3a9f09f9a80f09f9a80204df09f9a80f09f9a80f09f9a80c3a92020204d6fc3a96f4d6f6f20c3a9f09f9a80c3a9206f206f6f6fc3a9f09f9a80f09f9a8020f09f9a80f09f9a80c3a96f20f09f9a806f204d4dc3a96f20206f6ff09f9a806f20c3a96f4d6fa264697066735822122063a9c1ef0caf6fca4a12de35e2f2428869df9aba60fcef65afbe2f2691ff424e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_24f93496 {\n uint168[] s_0;\n bytes1[1] s_1;\n string s_2;\n }\n\n struct S_7f591fe6 {\n string s_0;\n address[2] s_1;\n S_24f93496 s_2;\n string s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_7f591fe6 memory) {\n S_7f591fe6 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀é o oooé🚀🚀 🚀🚀éo 🚀o MMéo oo🚀o éoMo\";\n r.s_0 = r_0;\n }\n {\n address[2] memory r_1;\n {\n address r_1_0 = 0x2f25B8224fd558585129f103a7C789a09B422B93;\n r_1[0] = r_1_0;\n }\n {\n address r_1_1 = 0x969ac1a550fAfc03E0024FCD799BFfDebb68a72c;\n r_1[1] = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n S_24f93496 memory r_2;\n {\n uint168[] memory r_2_0 = new uint168[](2);\n {\n uint168 r_2_0_0 = 179843515880633008439626350009744337972267305043325;\n r_2_0[0] = r_2_0_0;\n }\n {\n uint168 r_2_0_1 = 338377012014492455856762628722909119948344669918289;\n r_2_0[1] = r_2_0_1;\n }\n r_2.s_0 = r_2_0;\n }\n {\n bytes1[1] memory r_2_1;\n {\n bytes1 r_2_1_0 = bytes1(0xb3);\n r_2_1[0] = r_2_1_0;\n }\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀🚀oo M🚀🚀oo🚀éooéMé oMoééo oM🚀🚀oéo éé🚀🚀 M🚀🚀🚀é Moéo\";\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀éééM🚀 Moo\";\n r.s_3 = r_3;\n }\n {\n bool r_4 = false;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000002f25b8224fd558585129f103a7c789a09b422b93000000000000000000000000969ac1a550fafc03e0024fcd799bffdebb68a72c000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a80c3a9206f206f6f6fc3a9f09f9a80f09f9a8020f09f9a80f09f9a80c3a96f20f09f9a806f204d4dc3a96f20206f6ff09f9a806f20c3a96f4d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000200000000000000000000007b0dce29f64191caaed88282182e22977504e6857d0000000000000000000000e786e5fe59e7295c1fcca62f5240d6785f0cc6545100000000000000000000000000000000000000000000000000000000000000664d6f6f20c3a9f09f9a80f09f9a806f6f204df09f9a80f09f9a806f6ff09f9a80c3a96f6fc3a94dc3a9206f4d6fc3a9c3a96f206f4df09f9a80f09f9a806fc3a96f20c3a9c3a9f09f9a80f09f9a80204df09f9a80f09f9a80f09f9a80c3a92020204d6fc3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000194d6f6f20c3a9f09f9a80c3a9c3a9c3a94df09f9a80204d6f6f00000000000000" + }, + { + "name": "random-(string,bool,(bytes22,bool,bytes9,address,string[]),address)[3]", + "type": "(string,bool,(bytes22,bool,bytes9,address,string[]),address)[3]", + "value": [ + [ + "Moo é🚀", + true, + [ + "0x67bc9b3a320317242252181af375be7b7873d1d4fb00", + false, + "0x852134cdb68cd78c82", + "0xE255562e50815A85aa2B773922D49667C0d1dD48", + [ + "Moo é🚀M M oo🚀ooMé🚀éo🚀o oéo", + "Moo é🚀", + "Moo é🚀éo 🚀oo o🚀M", + "Moo é🚀 éMo🚀🚀 🚀Moéoo🚀é🚀o" + ] + ], + "0x4086D5EfC1dC51d34822A8369544040525173e5B" + ], + [ + "Moo é🚀", + true, + [ + "0x29adc7020d24f53125d726a51762b5a8fd9270707413", + true, + "0x8bef7130c25a4347f8", + "0x72cCeb7dC53f128b1cB258301F4d43094b70a156", + ["Moo é🚀oM🚀 ooéMéooo oMMo o🚀🚀oéé🚀MM ooo o", "Moo é🚀 ooooM🚀oooooooooMM"] + ], + "0xB8180Be816dFeD24666c6252888DdA1B4265D467" + ], + [ + "Moo é🚀é🚀", + true, + [ + "0x013cd26853073933528b58825111dc15af95bc1ee74b", + false, + "0xea25c40103283a5f65", + "0xE78F4a86d983348693c1eBca62c410403cdf3C0c", + [ + "Moo é🚀", + "Moo é🚀o 🚀o🚀éMoM🚀oMoéMo🚀 éoo🚀 oMoéMMMééM🚀é o ", + "Moo é🚀oo🚀🚀o oo 🚀 éoo🚀oo 🚀oM 🚀🚀o" + ] + ], + "0x31EA7A1A0850327b85a7a5c51edA553e76fcE1D5" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x67bc9b3a320317242252181af375be7b7873d1d4fb00" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x852134cdb68cd78c82" + }, + { + "type": "address", + "value": "0xE255562e50815A85aa2B773922D49667C0d1dD48" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀M M oo🚀ooMé🚀éo🚀o oéo" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀éo 🚀oo o🚀M" + }, + { + "type": "string", + "value": "Moo é🚀 éMo🚀🚀 🚀Moéoo🚀é🚀o" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x4086D5EfC1dC51d34822A8369544040525173e5B" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x29adc7020d24f53125d726a51762b5a8fd9270707413" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x8bef7130c25a4347f8" + }, + { + "type": "address", + "value": "0x72cCeb7dC53f128b1cB258301F4d43094b70a156" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM🚀 ooéMéooo oMMo o🚀🚀oéé🚀MM ooo o" + }, + { + "type": "string", + "value": "Moo é🚀 ooooM🚀oooooooooMM" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xB8180Be816dFeD24666c6252888DdA1B4265D467" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x013cd26853073933528b58825111dc15af95bc1ee74b" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xea25c40103283a5f65" + }, + { + "type": "address", + "value": "0xE78F4a86d983348693c1eBca62c410403cdf3C0c" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀o 🚀o🚀éMoM🚀oMoéMo🚀 éoo🚀 oMoéMMMééM🚀é o " + }, + { + "type": "string", + "value": "Moo é🚀oo🚀🚀o oo 🚀 éoo🚀oo 🚀oM 🚀🚀o" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x31EA7A1A0850327b85a7a5c51edA553e76fcE1D5" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506108fe806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061066f565b60405180910390f35b610056610598565b61005e610598565b6100666105c5565b60408051808201909152600a8152689adede418753e13f3560b71b60208083019190915290825260019082015261009b6105f2565b7467bc9b3a320317242252181af375be7b7873d1d4fb60581b81526000602082018190526842909a66db466bc64160b91b60408084019190915273e255562e50815a85aa2b773922d49667c0d1dd4860608401528051600480825260a0820190925290816020015b606081526020019060019003908161010357905050905060006040518060600160405280602a81526020016107b0602a91399050808260008151811061014b5761014b610799565b60200260200101819052505060006040518060400160405280600a8152602001689adede418753e13f3560b71b8152509050808260018151811061019157610191610799565b60200260200101819052505060006040518060400160405280601b81526020017f4d6f6f20c3a9f09f9a80c3a96f20f09f9a806f6f206ff09f9a804d0000000000815250905080826002815181106101eb576101eb610799565b60200260200101819052505060006040518060600160405280602d815260200161089c602d91399050808260038151811061022857610228610799565b60209081029190910101525060808201526040820152734086d5efc1dc51d34822a8369544040525173e5b606082015281526102626105c5565b60408051808201909152600a8152689adede418753e13f3560b71b6020808301919091529082526001908201526102976105f2565b7529adc7020d24f53125d726a51762b5a8fd927070741360501b81526001602082015268117dee26184b4868ff60bb1b60408201527372cceb7dc53f128b1cb258301f4d43094b70a15660608201526000600260405190808252806020026020018201604052801561031d57816020015b60608152602001906001900390816103085790505b50905060006040518060600160405280603d815260200161085f603d91399050808260008151811061035157610351610799565b60200260200101819052505060006040518060400160405280601f81526020017f4d6f6f20c3a9f09f9a80206f6f6f6f4df09f9a806f6f6f6f6f6f6f6f6f4d4d00815250905080826001815181106103ab576103ab610799565b6020908102919091010152506080820152604082015273b8180be816dfed24666c6252888dda1b4265d4676060820152808260016020020152506103ed6105c5565b60408051808201909152601081526e9adede418753e13f35018753e13f3560871b6020808301919091529082526001908201526104286105f2565b75013cd26853073933528b58825111dc15af95bc1ee74b60501b815260006020820181905268ea25c40103283a5f6560b81b60408084019190915273e78f4a86d983348693c1ebca62c410403cdf3c0c6060840152805160038082526080820190925290816020015b606081526020019060019003908161049157905050905060006040518060400160405280600a8152602001689adede418753e13f3560b71b815250905080826000815181106104e2576104e2610799565b60200260200101819052505060006040518060800160405280604a8152602001610815604a91399050808260018151811061051f5761051f610799565b60200260200101819052505060006040518060600160405280603b81526020016107da603b91399050808260028151811061055c5761055c610799565b60209081029190910101525060808201526040828101919091527331ea7a1a0850327b85a7a5c51eda553e76fce1d56060830152820152919050565b60405180606001604052806003905b6105af6105c5565b8152602001906001900390816105a75790505090565b6040805160808101825260608152600060208201529081016105e56105f2565b8152600060209091015290565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915290565b6000815180845260005b818110156106485760208185018101518683018201520161062c565b8181111561065a576000602083870101525b50601f01601f19169290920160200192915050565b602080825260009060808382018185018685805b600381101561078b57888403601f19018552825180518786526106a888870182610622565b828a01511515878b0152604080840151888303828a0152805169ffffffffffffffffffff19168352808c015115158c840152808201516001600160b81b031916918301919091526060808201516001600160a01b031681840152908a015160a08b840181905281519084018190529293509091908b019060c080850191600581901b860190910190885b818110156107605760bf1987840301845261074e838651610622565b948f0194938f01939250600101610732565b5050948301516001600160a01b03169890920197909752505094870194935091860191600101610683565b509198975050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d204d206f6ff09f9a806f6f4dc3a9f09f9a80c3a96ff09f9a806f206fc3a96f4d6f6f20c3a9f09f9a806f6ff09f9a80f09f9a806f206f6f2020f09f9a802020c3a96f6ff09f9a806f6f20f09f9a806f4d20f09f9a80f09f9a806f4d6f6f20c3a9f09f9a806f20f09f9a806ff09f9a80c3a94d6f4df09f9a806f4d6fc3a94d6ff09f9a8020c3a96f6ff09f9a8020206f4d6fc3a94d4d4dc3a9c3a94df09f9a80c3a9206f204d6f6f20c3a9f09f9a806f4df09f9a80206f6fc3a94dc3a96f6f6f206f4d4d6f206ff09f9a80f09f9a806fc3a9c3a9f09f9a804d4d206f6f6f2020206f4d6f6f20c3a9f09f9a8020c3a94d6ff09f9a80f09f9a8020f09f9a804d6fc3a96f6ff09f9a80c3a9f09f9a806fa2646970667358221220b5e8b67b36189a8262ff308f48e6c1577ef29b7732034b7dd07ba0fe78a03efe64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_24945a01 {\n bytes22 s_0;\n bool s_1;\n bytes9 s_2;\n address s_3;\n string[] s_4;\n }\n\n struct S_d67a7322 {\n string s_0;\n bool s_1;\n S_24945a01 s_2;\n address s_3;\n }\n\n function test () public pure returns (S_d67a7322[3] memory) {\n S_d67a7322[3] memory r;\n {\n S_d67a7322 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀\";\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0.s_1 = r_0_1;\n }\n {\n S_24945a01 memory r_0_2;\n {\n bytes22 r_0_2_0 = bytes22(0x67bc9b3a320317242252181af375be7b7873d1d4fb00);\n r_0_2.s_0 = r_0_2_0;\n }\n {\n bool r_0_2_1 = false;\n r_0_2.s_1 = r_0_2_1;\n }\n {\n bytes9 r_0_2_2 = bytes9(0x852134cdb68cd78c82);\n r_0_2.s_2 = r_0_2_2;\n }\n {\n address r_0_2_3 = 0xE255562e50815A85aa2B773922D49667C0d1dD48;\n r_0_2.s_3 = r_0_2_3;\n }\n {\n string[] memory r_0_2_4 = new string[](4);\n {\n string memory r_0_2_4_0 = unicode\"Moo é🚀M M oo🚀ooMé🚀éo🚀o oéo\";\n r_0_2_4[0] = r_0_2_4_0;\n }\n {\n string memory r_0_2_4_1 = unicode\"Moo é🚀\";\n r_0_2_4[1] = r_0_2_4_1;\n }\n {\n string memory r_0_2_4_2 = unicode\"Moo é🚀éo 🚀oo o🚀M\";\n r_0_2_4[2] = r_0_2_4_2;\n }\n {\n string memory r_0_2_4_3 = unicode\"Moo é🚀 éMo🚀🚀 🚀Moéoo🚀é🚀o\";\n r_0_2_4[3] = r_0_2_4_3;\n }\n r_0_2.s_4 = r_0_2_4;\n }\n r_0.s_2 = r_0_2;\n }\n {\n address r_0_3 = 0x4086D5EfC1dC51d34822A8369544040525173e5B;\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_d67a7322 memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀\";\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1.s_1 = r_1_1;\n }\n {\n S_24945a01 memory r_1_2;\n {\n bytes22 r_1_2_0 = bytes22(0x29adc7020d24f53125d726a51762b5a8fd9270707413);\n r_1_2.s_0 = r_1_2_0;\n }\n {\n bool r_1_2_1 = true;\n r_1_2.s_1 = r_1_2_1;\n }\n {\n bytes9 r_1_2_2 = bytes9(0x8bef7130c25a4347f8);\n r_1_2.s_2 = r_1_2_2;\n }\n {\n address r_1_2_3 = 0x72cCeb7dC53f128b1cB258301F4d43094b70a156;\n r_1_2.s_3 = r_1_2_3;\n }\n {\n string[] memory r_1_2_4 = new string[](2);\n {\n string memory r_1_2_4_0 = unicode\"Moo é🚀oM🚀 ooéMéooo oMMo o🚀🚀oéé🚀MM ooo o\";\n r_1_2_4[0] = r_1_2_4_0;\n }\n {\n string memory r_1_2_4_1 = unicode\"Moo é🚀 ooooM🚀oooooooooMM\";\n r_1_2_4[1] = r_1_2_4_1;\n }\n r_1_2.s_4 = r_1_2_4;\n }\n r_1.s_2 = r_1_2;\n }\n {\n address r_1_3 = 0xB8180Be816dFeD24666c6252888DdA1B4265D467;\n r_1.s_3 = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_d67a7322 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀é🚀\";\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2.s_1 = r_2_1;\n }\n {\n S_24945a01 memory r_2_2;\n {\n bytes22 r_2_2_0 = bytes22(0x013cd26853073933528b58825111dc15af95bc1ee74b);\n r_2_2.s_0 = r_2_2_0;\n }\n {\n bool r_2_2_1 = false;\n r_2_2.s_1 = r_2_2_1;\n }\n {\n bytes9 r_2_2_2 = bytes9(0xea25c40103283a5f65);\n r_2_2.s_2 = r_2_2_2;\n }\n {\n address r_2_2_3 = 0xE78F4a86d983348693c1eBca62c410403cdf3C0c;\n r_2_2.s_3 = r_2_2_3;\n }\n {\n string[] memory r_2_2_4 = new string[](3);\n {\n string memory r_2_2_4_0 = unicode\"Moo é🚀\";\n r_2_2_4[0] = r_2_2_4_0;\n }\n {\n string memory r_2_2_4_1 = unicode\"Moo é🚀o 🚀o🚀éMoM🚀oMoéMo🚀 éoo🚀 oMoéMMMééM🚀é o \";\n r_2_2_4[1] = r_2_2_4_1;\n }\n {\n string memory r_2_2_4_2 = unicode\"Moo é🚀oo🚀🚀o oo 🚀 éoo🚀oo 🚀oM 🚀🚀o\";\n r_2_2_4[2] = r_2_2_4_2;\n }\n r_2_2.s_4 = r_2_2_4;\n }\n r_2.s_2 = r_2_2;\n }\n {\n address r_2_3 = 0x31EA7A1A0850327b85a7a5c51edA553e76fcE1D5;\n r_2.s_3 = r_2_3;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000004086d5efc1dc51d34822a8369544040525173e5b000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000067bc9b3a320317242252181af375be7b7873d1d4fb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000852134cdb68cd78c820000000000000000000000000000000000000000000000000000000000000000000000e255562e50815a85aa2b773922d49667c0d1dd4800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a804d204d206f6ff09f9a806f6f4dc3a9f09f9a80c3a96ff09f9a806f206fc3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a80c3a96f20f09f9a806f6f206ff09f9a804d0000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a8020c3a94d6ff09f9a80f09f9a8020f09f9a804d6fc3a96f6ff09f9a80c3a9f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000b8180be816dfed24666c6252888dda1b4265d467000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000029adc7020d24f53125d726a51762b5a8fd92707074130000000000000000000000000000000000000000000000000000000000000000000000000000000000018bef7130c25a4347f8000000000000000000000000000000000000000000000000000000000000000000000072cceb7dc53f128b1cb258301f4d43094b70a15600000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a806f4df09f9a80206f6fc3a94dc3a96f6f6f206f4d4d6f206ff09f9a80f09f9a806fc3a9c3a9f09f9a804d4d206f6f6f2020206f000000000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a80206f6f6f6f4df09f9a806f6f6f6f6f6f6f6f6f4d4d000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000031ea7a1a0850327b85a7a5c51eda553e76fce1d500000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a80c3a9f09f9a8000000000000000000000000000000000013cd26853073933528b58825111dc15af95bc1ee74b000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea25c40103283a5f650000000000000000000000000000000000000000000000000000000000000000000000e78f4a86d983348693c1ebca62c410403cdf3c0c00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a806f20f09f9a806ff09f9a80c3a94d6f4df09f9a806f4d6fc3a94d6ff09f9a8020c3a96f6ff09f9a8020206f4d6fc3a94d4d4dc3a9c3a94df09f9a80c3a9206f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b4d6f6f20c3a9f09f9a806f6ff09f9a80f09f9a806f206f6f2020f09f9a802020c3a96f6ff09f9a806f6f20f09f9a806f4d20f09f9a80f09f9a806f0000000000" + }, + { + "name": "random-(((address,address,bytes10)[],int232,string),bool[3],int40,string,int88)", + "type": "(((address,address,bytes10)[],int232,string),bool[3],int40,string,int88)", + "value": [ + [ + [ + [ + "0xCd2BA1Ee69Ed70864faaF4E858ed227d68F6ab0A", + "0xdB15830E882c4c95f0f3D086B0ccA62398867Cef", + "0x18c2790b43c9f58bce67" + ], + [ + "0xADcaCE74Fd61c8DAaeC7A9753F01b03627c71B28", + "0x7b2610EEe5763cF273D27dBa73dC6e6eB8dCA13e", + "0x2e31b3b5bff830b75dec" + ], + [ + "0x3F1A91712E08C1c7744EaFf341d6E7a7dA93aC22", + "0x4d7824E8181cfDe2134Eb76a503548BF547cB1D1", + "0x2b366950b7ab7e5ea9b8" + ] + ], + "2547036973721796361908427292914529870096031577404663883014100863408875", + "Moo é🚀o🚀oooo M🚀o🚀 o🚀 o" + ], + [true, false, true], + "202296080683", + "Moo é🚀oMoMoéoo o🚀🚀🚀🚀MéMo🚀éoMM oé 🚀 ", + "-17221204314813648301393939" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xCd2BA1Ee69Ed70864faaF4E858ed227d68F6ab0A" + }, + { + "type": "address", + "value": "0xdB15830E882c4c95f0f3D086B0ccA62398867Cef" + }, + { + "type": "hexstring", + "value": "0x18c2790b43c9f58bce67" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xADcaCE74Fd61c8DAaeC7A9753F01b03627c71B28" + }, + { + "type": "address", + "value": "0x7b2610EEe5763cF273D27dBa73dC6e6eB8dCA13e" + }, + { + "type": "hexstring", + "value": "0x2e31b3b5bff830b75dec" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x3F1A91712E08C1c7744EaFf341d6E7a7dA93aC22" + }, + { + "type": "address", + "value": "0x4d7824E8181cfDe2134Eb76a503548BF547cB1D1" + }, + { + "type": "hexstring", + "value": "0x2b366950b7ab7e5ea9b8" + } + ] + } + ] + }, + { + "type": "number", + "value": "2547036973721796361908427292914529870096031577404663883014100863408875" + }, + { + "type": "string", + "value": "Moo é🚀o🚀oooo M🚀o🚀 o🚀 o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "number", + "value": "202296080683" + }, + { + "type": "string", + "value": "Moo é🚀oMoMoéoo o🚀🚀🚀🚀MéMo🚀éoMM oé 🚀 " + }, + { + "type": "number", + "value": "-17221204314813648301393939" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506105a8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906103dc565b60405180910390f35b6100566102f9565b61005e6102f9565b60408051606080820183528082526000602083018190528284019190915282516003808252608082019094529192909190816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816100945750506040805160608101825273cd2ba1ee69ed70864faaf4e858ed227d68f6ab0a815273db15830e882c4c95f0f3d086b0cca62398867cef60208201526918c2790b43c9f58bce6760b01b9181019190915281519192509081908390600090610129576101296104f9565b602002602001018190525050610158604080516060810182526000808252602082018190529181019190915290565b73adcace74fd61c8daaec7a9753f01b03627c71b288152737b2610eee5763cf273d27dba73dc6e6eb8dca13e6020820152690b8c6ced6ffe0c2dd77b60b21b604082015281518190839060019081106101b3576101b36104f9565b6020026020010181905250506101e2604080516060810182526000808252602082018190529181019190915290565b733f1a91712e08c1c7744eaff341d6e7a7da93ac228152734d7824e8181cfde2134eb76a503548bf547cb1d16020820152690566cd2a16f56fcbd53760b31b6040820152815181908390600290811061023d5761023d6104f9565b602090810291909101810191909152918352507c5e798fe81325bd49738bb21c942408d479c20155ecf9dffc0b471bdaeb828201526040805160608101909152602680825260009261054d90830139604083015250815261029c610346565b60018082526000602080840182905260408085019390935284810193909352642f19c9392b84830152815160608101909252603d8083529092610510908301396060830152506a0e3ebb5b46a81aa2430812196080820152919050565b604080516101008101909152606060a08201818152600060c084015260e083019190915281526020810161032b610346565b81526000602082018190526060604083018190529091015290565b60405180606001604052806003906020820280368337509192915050565b6000815180845260005b8181101561038a5760208185018101518683018201520161036e565b8181111561039c576000602083870101525b50601f01601f19169290920160200192915050565b8060005b60038110156103d657815115158452602093840193909101906001016103b5565b50505050565b6020808252825160e08383015280516060610100850181905281516101608601819052600094939284019185916101808801905b8084101561045a57845180516001600160a01b0390811684528882015116888401526040908101516001600160b01b03191690830152938601936001939093019290820190610410565b50858501519350610471610120890185601c0b9052565b6040850151945060ff198882030161014089015261048f8186610364565b9450508488015194506104a560408801866103b1565b604088015194506104bb60a088018660040b9052565b870151868403601f190160c088015293506104da915082905083610364565b91505060808401516104f160e0850182600a0b9052565b509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f4d6f4d6fc3a96f6f206ff09f9a80f09f9a80f09f9a80f09f9a804dc3a94d6ff09f9a80c3a96f4d4d206fc3a920f09f9a80204d6f6f20c3a9f09f9a806ff09f9a806f6f6f6f204df09f9a806ff09f9a80206ff09f9a80206fa264697066735822122075f74550ffc054edec9b22c856ba45049d2616ad56acf293042b0c8cb8bff76464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ab2ff2de {\n address s_0;\n address s_1;\n bytes10 s_2;\n }\n\n struct S_27fc7447 {\n S_ab2ff2de[] s_0;\n int232 s_1;\n string s_2;\n }\n\n struct S_e8b69507 {\n S_27fc7447 s_0;\n bool[3] s_1;\n int40 s_2;\n string s_3;\n int88 s_4;\n }\n\n function test () public pure returns (S_e8b69507 memory) {\n S_e8b69507 memory r;\n {\n S_27fc7447 memory r_0;\n {\n S_ab2ff2de[] memory r_0_0 = new S_ab2ff2de[](3);\n {\n S_ab2ff2de memory r_0_0_0;\n {\n address r_0_0_0_0 = 0xCd2BA1Ee69Ed70864faaF4E858ed227d68F6ab0A;\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n address r_0_0_0_1 = 0xdB15830E882c4c95f0f3D086B0ccA62398867Cef;\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n bytes10 r_0_0_0_2 = bytes10(0x18c2790b43c9f58bce67);\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n r_0_0[0] = r_0_0_0;\n }\n {\n S_ab2ff2de memory r_0_0_1;\n {\n address r_0_0_1_0 = 0xADcaCE74Fd61c8DAaeC7A9753F01b03627c71B28;\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n {\n address r_0_0_1_1 = 0x7b2610EEe5763cF273D27dBa73dC6e6eB8dCA13e;\n r_0_0_1.s_1 = r_0_0_1_1;\n }\n {\n bytes10 r_0_0_1_2 = bytes10(0x2e31b3b5bff830b75dec);\n r_0_0_1.s_2 = r_0_0_1_2;\n }\n r_0_0[1] = r_0_0_1;\n }\n {\n S_ab2ff2de memory r_0_0_2;\n {\n address r_0_0_2_0 = 0x3F1A91712E08C1c7744EaFf341d6E7a7dA93aC22;\n r_0_0_2.s_0 = r_0_0_2_0;\n }\n {\n address r_0_0_2_1 = 0x4d7824E8181cfDe2134Eb76a503548BF547cB1D1;\n r_0_0_2.s_1 = r_0_0_2_1;\n }\n {\n bytes10 r_0_0_2_2 = bytes10(0x2b366950b7ab7e5ea9b8);\n r_0_0_2.s_2 = r_0_0_2_2;\n }\n r_0_0[2] = r_0_0_2;\n }\n r_0.s_0 = r_0_0;\n }\n {\n int232 r_0_1 = 2547036973721796361908427292914529870096031577404663883014100863408875;\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀o🚀oooo M🚀o🚀 o🚀 o\";\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n bool[3] memory r_1;\n {\n bool r_1_0 = true;\n r_1[0] = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1[1] = r_1_1;\n }\n {\n bool r_1_2 = true;\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n int40 r_2 = 202296080683;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀oMoMoéoo o🚀🚀🚀🚀MéMo🚀éoMM oé 🚀 \";\n r.s_3 = r_3;\n }\n {\n int88 r_4 = -17221204314813648301393939;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000002f19c9392b00000000000000000000000000000000000000000000000000000000000002e0fffffffffffffffffffffffffffffffffffffffffff1c144a4b957e55dbcf7ed00000000000000000000000000000000000000000000000000000000000000600000005e798fe81325bd49738bb21c942408d479c20155ecf9dffc0b471bdaeb00000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000cd2ba1ee69ed70864faaf4e858ed227d68f6ab0a000000000000000000000000db15830e882c4c95f0f3d086b0cca62398867cef18c2790b43c9f58bce6700000000000000000000000000000000000000000000000000000000000000000000adcace74fd61c8daaec7a9753f01b03627c71b280000000000000000000000007b2610eee5763cf273d27dba73dc6e6eb8dca13e2e31b3b5bff830b75dec000000000000000000000000000000000000000000000000000000000000000000003f1a91712e08c1c7744eaff341d6e7a7da93ac220000000000000000000000004d7824e8181cfde2134eb76a503548bf547cb1d12b366950b7ab7e5ea9b80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a806ff09f9a806f6f6f6f204df09f9a806ff09f9a80206ff09f9a80206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a806f4d6f4d6fc3a96f6f206ff09f9a80f09f9a80f09f9a80f09f9a804dc3a94d6ff09f9a80c3a96f4d4d206fc3a920f09f9a8020000000" + }, + { + "name": "random-(((bool,string,string,bytes30,bool),bytes12,uint176,string,bytes23),int72[3])", + "type": "(((bool,string,string,bytes30,bool),bytes12,uint176,string,bytes23),int72[3])", + "value": [ + [ + [ + false, + "Moo é🚀oéoé 🚀Moooé ooé oMMoooééMooéooé🚀oo🚀o é🚀oMé é", + "Moo é🚀🚀M🚀🚀o 🚀oM🚀🚀Mo Mo🚀éM🚀Mé🚀é🚀Moo🚀🚀 Mo🚀o🚀🚀🚀🚀oo é 🚀oMM oMo 🚀🚀 ", + "0x28e78032d7d945cced2f7de12f17790b02ede12b6a6f18b1c368eaf5f968", + false + ], + "0xbbe9a67c17a8528be2be13e8", + "15373804840663994511981326899441106752049751886743384", + "Moo é🚀o🚀ooMé🚀o 🚀 o éoMé", + "0x736fa3569433d67976773e6f6f14810a3e94e99402cf45" + ], + ["-1011832647432448474394", "-1383562459575301402241", "-1121266229049976815275"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀oéoé 🚀Moooé ooé oMMoooééMooéooé🚀oo🚀o é🚀oMé é" + }, + { + "type": "string", + "value": "Moo é🚀🚀M🚀🚀o 🚀oM🚀🚀Mo Mo🚀éM🚀Mé🚀é🚀Moo🚀🚀 Mo🚀o🚀🚀🚀🚀oo é 🚀oMM oMo 🚀🚀 " + }, + { + "type": "hexstring", + "value": "0x28e78032d7d945cced2f7de12f17790b02ede12b6a6f18b1c368eaf5f968" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0xbbe9a67c17a8528be2be13e8" + }, + { + "type": "number", + "value": "15373804840663994511981326899441106752049751886743384" + }, + { + "type": "string", + "value": "Moo é🚀o🚀ooMé🚀o 🚀 o éoMé" + }, + { + "type": "hexstring", + "value": "0x736fa3569433d67976773e6f6f14810a3e94e99402cf45" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-1011832647432448474394" + }, + { + "type": "number", + "value": "-1383562459575301402241" + }, + { + "type": "number", + "value": "-1121266229049976815275" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061050f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102e3565b60405180910390f35b6100566101d0565b61005e6101d0565b6100666101f5565b6040805160a0810182526000808252606060208301819052928201839052918101829052608081019190915260008082526040805160808101909152604d80825261048d602083013990508082602001819052505060006040518060c001604052806082815260200161040b608291396040808401919091527f28e78032d7d945cced2f7de12f17790b02ede12b6a6f18b1c368eaf5f96800006060808501919091526000608085018190529385526b177d34cf82f50a517c57c27d60a31b6020808701919091527529172f23a650289e8bf582521a7a6dbf72ccaea947588684015282519182019092526027808252909250906103e4908301396060830152507f736fa3569433d67976773e6f6f14810a3e94e99402cf450000000000000000006080820152815261019761024c565b6836d9ffafebb2277d19198152684b00c9468e3f976e8019602080830191909152683cc8b1de990da5feaa196040830152820152919050565b60405180604001604052806101e36101f5565b81526020016101f061024c565b905290565b604080516101408101909152600060a08201818152606060c0840181905260e08401526101008301829052610120830191909152819081526000602082018190526040820181905260608083015260809091015290565b60405180606001604052806003906020820280368337509192915050565b6000815180845260005b8181101561029057602081850181015186830182015201610274565b818111156102a2576000602083870101525b50601f01601f19169290920160200192915050565b8060005b60038110156102dd57815160080b8452602093840193909101906001016102bb565b50505050565b602081526000825160806020840152805160a08085015280511515610140850152602081015160a061016086015261031f6101e086018261026a565b9050604082015161013f198683030161018087015261033e828261026a565b60608481015161ffff19166101a089015260809094015115156101c088015260208501516001600160a01b03191660c088015260408501516001600160b01b031660e088015292840151868403609f19016101008801529291506103a49050818361026a565b915050608082015191506103c761012085018368ffffffffffffffffff19169052565b602085015191506103db60408501836102b7565b94935050505056fe4d6f6f20c3a9f09f9a806ff09f9a806f6f4dc3a9f09f9a806f20f09f9a80206f20c3a96f4dc3a94d6f6f20c3a9f09f9a80f09f9a804df09f9a80f09f9a806f20f09f9a806f4df09f9a80f09f9a804d6f204d6ff09f9a80c3a94df09f9a804dc3a9f09f9a80c3a9f09f9a804d6f6ff09f9a80f09f9a80204d6ff09f9a806ff09f9a80f09f9a80f09f9a80f09f9a806f6f20c3a920f09f9a806f4d4d206f4d6f20f09f9a80f09f9a80204d6f6f20c3a9f09f9a806fc3a96fc3a920f09f9a804d6f6f6fc3a9206f6fc3a9206f4d4d6f6f6fc3a9c3a94d6f6fc3a96f6fc3a9f09f9a806f6ff09f9a806f20c3a9f09f9a806f4dc3a920c3a9a2646970667358221220e0ad165fc3e56a4796e05151a81d2c592217449003891514e2f8382aaaa61e9c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_efd43eae {\n bool s_0;\n string s_1;\n string s_2;\n bytes30 s_3;\n bool s_4;\n }\n\n struct S_e534fe2d {\n S_efd43eae s_0;\n bytes12 s_1;\n uint176 s_2;\n string s_3;\n bytes23 s_4;\n }\n\n struct S_aac76a6a {\n S_e534fe2d s_0;\n int72[3] s_1;\n }\n\n function test () public pure returns (S_aac76a6a memory) {\n S_aac76a6a memory r;\n {\n S_e534fe2d memory r_0;\n {\n S_efd43eae memory r_0_0;\n {\n bool r_0_0_0 = false;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n string memory r_0_0_1 = unicode\"Moo é🚀oéoé 🚀Moooé ooé oMMoooééMooéooé🚀oo🚀o é🚀oMé é\";\n r_0_0.s_1 = r_0_0_1;\n }\n {\n string memory r_0_0_2 = unicode\"Moo é🚀🚀M🚀🚀o 🚀oM🚀🚀Mo Mo🚀éM🚀Mé🚀é🚀Moo🚀🚀 Mo🚀o🚀🚀🚀🚀oo é 🚀oMM oMo 🚀🚀 \";\n r_0_0.s_2 = r_0_0_2;\n }\n {\n bytes30 r_0_0_3 = bytes30(0x28e78032d7d945cced2f7de12f17790b02ede12b6a6f18b1c368eaf5f968);\n r_0_0.s_3 = r_0_0_3;\n }\n {\n bool r_0_0_4 = false;\n r_0_0.s_4 = r_0_0_4;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bytes12 r_0_1 = bytes12(0xbbe9a67c17a8528be2be13e8);\n r_0.s_1 = r_0_1;\n }\n {\n uint176 r_0_2 = 15373804840663994511981326899441106752049751886743384;\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀o🚀ooMé🚀o 🚀 o éoMé\";\n r_0.s_3 = r_0_3;\n }\n {\n bytes23 r_0_4 = bytes23(0x736fa3569433d67976773e6f6f14810a3e94e99402cf45);\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n int72[3] memory r_1;\n {\n int72 r_1_0 = -1011832647432448474394;\n r_1[0] = r_1_0;\n }\n {\n int72 r_1_1 = -1383562459575301402241;\n r_1[1] = r_1_1;\n }\n {\n int72 r_1_2 = -1121266229049976815275;\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffffffffffffffffffc9260050144dd882e6ffffffffffffffffffffffffffffffffffffffffffffffb4ff36b971c068917fffffffffffffffffffffffffffffffffffffffffffffffc3374e2166f25a015500000000000000000000000000000000000000000000000000000000000000a0bbe9a67c17a8528be2be13e800000000000000000000000000000000000000000000000000000000000029172f23a650289e8bf582521a7a6dbf72ccaea947580000000000000000000000000000000000000000000000000000000000000280736fa3569433d67976773e6f6f14810a3e94e99402cf45000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012028e78032d7d945cced2f7de12f17790b02ede12b6a6f18b1c368eaf5f96800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a806fc3a96fc3a920f09f9a804d6f6f6fc3a9206f6fc3a9206f4d4d6f6f6fc3a9c3a94d6f6fc3a96f6fc3a9f09f9a806f6ff09f9a806f20c3a9f09f9a806f4dc3a920c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000824d6f6f20c3a9f09f9a80f09f9a804df09f9a80f09f9a806f20f09f9a806f4df09f9a80f09f9a804d6f204d6ff09f9a80c3a94df09f9a804dc3a9f09f9a80c3a9f09f9a804d6f6ff09f9a80f09f9a80204d6ff09f9a806ff09f9a80f09f9a80f09f9a80f09f9a806f6f20c3a920f09f9a806f4d4d206f4d6f20f09f9a80f09f9a802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a806ff09f9a806f6f4dc3a9f09f9a806f20f09f9a80206f20c3a96f4dc3a900000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((bool,(string,(string,bytes3,address),uint48,address,bool[1])),string,bool)", + "type": "((bool,(string,(string,bytes3,address),uint48,address,bool[1])),string,bool)", + "value": [ + [ + false, + [ + "Moo é🚀 🚀🚀éooMMoMo éM🚀oM oMoééoMoMoMé🚀 é éMMoM éMM", + [ + "Moo é🚀é🚀é🚀🚀o🚀é🚀éMMéMoM", + "0x8957ce", + "0x674f996d32816a34338DecCF23D2B3BfC6565A49" + ], + "100237906634362", + "0xB559cEa4CC8dD9223A8b35ae1962334EC6bbF250", + [true] + ] + ], + "Moo é🚀éoo éMoM", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀🚀éooMMoMo éM🚀oM oMoééoMoMoMé🚀 é éMMoM éMM" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀é🚀🚀o🚀é🚀éMMéMoM" + }, + { + "type": "hexstring", + "value": "0x8957ce" + }, + { + "type": "address", + "value": "0x674f996d32816a34338DecCF23D2B3BfC6565A49" + } + ] + }, + { + "type": "number", + "value": "100237906634362" + }, + { + "type": "address", + "value": "0xB559cEa4CC8dD9223A8b35ae1962334EC6bbF250" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éoo éMoM" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610454806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102a7565b60405180910390f35b61005661017d565b61005e61017d565b6100666101a4565b600081526100726101c5565b60006040518060800160405280604c81526020016103d3604c9139825250604080516060808201835281526000602082018190529181019190915260006040518060600160405280602e81526020016103a5602e91398252506244abe760e91b60208083019190915273674f996d32816a34338deccf23d2b3bfc6565a4960408084019190915290830191909152655b2a74d1667a9082015273b559cea4cc8dd9223a8b35ae1962334ec6bbf250606082015261012d610211565b60018152608082015260208281019190915290825260408051808201825260148152734d6f6f20c3a9f09f9a80c3a96f6f20c3a94d6f4d60601b8184015291830191909152600090820152919050565b60405180606001604052806101906101a4565b815260606020820152600060409091015290565b60405180604001604052806000151581526020016101c06101c5565b905290565b6040518060a00160405280606081526020016101fa604080516060808201835281526000602082018190529181019190915290565b815260006020820181905260408201526060016101c05b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b8181101561025557602081850181015186830182015201610239565b81811115610267576000602083870101525b50601f01601f19169290920160200192915050565b8060005b60018110156102a15781511515845260209384019390910190600101610280565b50505050565b60006020808352835160608285015280511515608085015281810151905060408060a0860152815160a060c08701526102e461016087018261022f565b90508383015160bf198783030160e0880152805160608352610309606084018261022f565b828701516001600160e81b03191684880152848301516001600160a01b03908116948601949094528585015165ffffffffffff166101008a015260608601519384166101208a015260809095015194905061036861014089018661027c565b94880151878603601f19018489015294610382818761022f565b95505050508086015191505061039c606085018215159052565b50939250505056fe4d6f6f20c3a9f09f9a80c3a9f09f9a80c3a9f09f9a80f09f9a806ff09f9a80c3a9f09f9a80c3a94d4dc3a94d6f4d4d6f6f20c3a9f09f9a802020f09f9a80f09f9a80c3a96f6f4d4d6f4d6f20c3a94df09f9a806f4d2020206f4d6fc3a9c3a96f4d6f4d6f4dc3a9f09f9a8020c3a920c3a94d4d6f4d20c3a94d4da2646970667358221220a296f44ec231a01c847b573a4924a6e87a01a1a426021e4b0cea8f838086ee7164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d76e7644 {\n string s_0;\n bytes3 s_1;\n address s_2;\n }\n\n struct S_698ef546 {\n string s_0;\n S_d76e7644 s_1;\n uint48 s_2;\n address s_3;\n bool[1] s_4;\n }\n\n struct S_f56cbb96 {\n bool s_0;\n S_698ef546 s_1;\n }\n\n struct S_f09a2469 {\n S_f56cbb96 s_0;\n string s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_f09a2469 memory) {\n S_f09a2469 memory r;\n {\n S_f56cbb96 memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n {\n S_698ef546 memory r_0_1;\n {\n string memory r_0_1_0 = unicode\"Moo é🚀 🚀🚀éooMMoMo éM🚀oM oMoééoMoMoMé🚀 é éMMoM éMM\";\n r_0_1.s_0 = r_0_1_0;\n }\n {\n S_d76e7644 memory r_0_1_1;\n {\n string memory r_0_1_1_0 = unicode\"Moo é🚀é🚀é🚀🚀o🚀é🚀éMMéMoM\";\n r_0_1_1.s_0 = r_0_1_1_0;\n }\n {\n bytes3 r_0_1_1_1 = bytes3(0x8957ce);\n r_0_1_1.s_1 = r_0_1_1_1;\n }\n {\n address r_0_1_1_2 = 0x674f996d32816a34338DecCF23D2B3BfC6565A49;\n r_0_1_1.s_2 = r_0_1_1_2;\n }\n r_0_1.s_1 = r_0_1_1;\n }\n {\n uint48 r_0_1_2 = 100237906634362;\n r_0_1.s_2 = r_0_1_2;\n }\n {\n address r_0_1_3 = 0xB559cEa4CC8dD9223A8b35ae1962334EC6bbF250;\n r_0_1.s_3 = r_0_1_3;\n }\n {\n bool[1] memory r_0_1_4;\n {\n bool r_0_1_4_0 = true;\n r_0_1_4[0] = r_0_1_4_0;\n }\n r_0_1.s_4 = r_0_1_4;\n }\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀éoo éMoM\";\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000005b2a74d1667a000000000000000000000000b559cea4cc8dd9223a8b35ae1962334ec6bbf2500000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a802020f09f9a80f09f9a80c3a96f6f4d4d6f4d6f20c3a94df09f9a806f4d2020206f4d6fc3a9c3a96f4d6f4d6f4dc3a9f09f9a8020c3a920c3a94d4d6f4d20c3a94d4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000608957ce0000000000000000000000000000000000000000000000000000000000000000000000000000000000674f996d32816a34338deccf23d2b3bfc6565a49000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a80c3a9f09f9a80c3a9f09f9a80f09f9a806ff09f9a80c3a9f09f9a80c3a94d4dc3a94d6f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a80c3a96f6f20c3a94d6f4d000000000000000000000000" + }, + { + "name": "random-((bool),((bytes18[],bool,string[2],address,bytes2),address,bool),address)", + "type": "((bool),((bytes18[],bool,string[2],address,bytes2),address,bool),address)", + "value": [ + [false], + [ + [ + [ + "0xf34d534066d40fd11229fc2bb2d4b1a0d235", + "0x4b6e3d1a4622b37ebd48c10dc348e58e391a", + "0xfdf517a081f28e87927008e956952b645399" + ], + true, + [ + "Moo é🚀ooooo oM🚀M🚀oéo MM🚀ééo MM 🚀 ", + "Moo é🚀 MéoM🚀o🚀o 🚀é🚀M🚀Mooé🚀 ooééoM" + ], + "0x25CbA404FfeCcdB3b3545C6BDEd131b486d88512", + "0xa4b8" + ], + "0xa25Ec86bad5A6371A3f713F77Ac442A51A517E90", + false + ], + "0x42FAd4Fd3451c2ae824cb23b36a34A2105d082b9" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xf34d534066d40fd11229fc2bb2d4b1a0d235" + }, + { + "type": "hexstring", + "value": "0x4b6e3d1a4622b37ebd48c10dc348e58e391a" + }, + { + "type": "hexstring", + "value": "0xfdf517a081f28e87927008e956952b645399" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooooo oM🚀M🚀oéo MM🚀ééo MM 🚀 " + }, + { + "type": "string", + "value": "Moo é🚀 MéoM🚀o🚀o 🚀é🚀M🚀Mooé🚀 ooééoM" + } + ] + }, + { + "type": "address", + "value": "0x25CbA404FfeCcdB3b3545C6BDEd131b486d88512" + }, + { + "type": "hexstring", + "value": "0xa4b8" + } + ] + }, + { + "type": "address", + "value": "0xa25Ec86bad5A6371A3f713F77Ac442A51A517E90" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x42FAd4Fd3451c2ae824cb23b36a34A2105d082b9" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061052f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061035c565b60405180910390f35b610056610241565b61005e610241565b6040805160208101909152600081528152610077610270565b61007f610297565b60408051600380825260808201909252600091602082016060803683375050815191925071f34d534066d40fd11229fc2bb2d4b1a0d23560701b9182915083906000906100ce576100ce610470565b6001600160701b0319909216602092830291909101909101525080517125b71e8d231159bf5ea46086e1a472c71c8d60711b9081908390600190811061011657610116610470565b6001600160701b03199092166020928302919091019091015250805171fdf517a081f28e87927008e956952b64539960701b9081908390600290811061015e5761015e610470565b6001600160701b0319909216602092830291909101820152918352506001908201526101886102b3565b60006040518060600160405280603581526020016104c5603591398252506040805160608101909152603e8082526000919061048760208301396020808401919091526040848101939093527325cba404ffeccdb3b3545c6bded131b486d88512606085015261149760f31b60808501529284525073a25ec86bad5a6371a3f713f77ac442a51a517e9083830152600083820152908301919091527342fad4fd3451c2ae824cb23b36a34a2105d082b990820152919050565b6040805160808101909152600060608201908152815260208101610263610270565b8152600060209091015290565b6040518060600160405280610283610297565b815260006020820181905260409091015290565b6040805160a08101825260608152600060208201529081016102835b60405180604001604052806002905b60608152602001906001900390816102c25790505090565b60008260408101836000805b600281101561035057848403885282518051808652835b81811015610319576020818401810151888301820152016102fd565b8181111561032a5784602083890101525b506020998a0199601f91909101601f1916959095018501949390930192506001016102e6565b50919695505050505050565b6000602080835283515115158184015280840151606060408501528051606060808601526101808501815160a060e08801528181518084526101a0890191508683019350600092505b808310156103cf5783516001600160701b03191682529286019260019290920191908601906103a5565b50858401511515610100890152604084015160df19898303016101208a015292506103fa81846102da565b9250505060608201516104196101408801826001600160a01b03169052565b50608082015191506104386101608701836001600160f01b0319169052565b928201516001600160a01b0390811660a0870152604092830151151560c0870152959091015190941660609093019290925250919050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a802020204dc3a96f4df09f9a806ff09f9a806f20f09f9a80c3a9f09f9a804df09f9a804d6f6fc3a9f09f9a80206f6fc3a9c3a96f4d4d6f6f20c3a9f09f9a806f6f6f6f6f206f4df09f9a804df09f9a806fc3a96f204d4df09f9a80c3a9c3a96f204d4d2020f09f9a8020a2646970667358221220f879b3c257cb13a05a2c31bc28684ef342c4c5d70a75dd1dd815b02e20a67a8764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_b1507c6d {\n bytes18[] s_0;\n bool s_1;\n string[2] s_2;\n address s_3;\n bytes2 s_4;\n }\n\n struct S_2d571853 {\n S_b1507c6d s_0;\n address s_1;\n bool s_2;\n }\n\n struct S_a0926b2a {\n S_c1053bda s_0;\n S_2d571853 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_a0926b2a memory) {\n S_a0926b2a memory r;\n {\n S_c1053bda memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n S_2d571853 memory r_1;\n {\n S_b1507c6d memory r_1_0;\n {\n bytes18[] memory r_1_0_0 = new bytes18[](3);\n {\n bytes18 r_1_0_0_0 = bytes18(0xf34d534066d40fd11229fc2bb2d4b1a0d235);\n r_1_0_0[0] = r_1_0_0_0;\n }\n {\n bytes18 r_1_0_0_1 = bytes18(0x4b6e3d1a4622b37ebd48c10dc348e58e391a);\n r_1_0_0[1] = r_1_0_0_1;\n }\n {\n bytes18 r_1_0_0_2 = bytes18(0xfdf517a081f28e87927008e956952b645399);\n r_1_0_0[2] = r_1_0_0_2;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bool r_1_0_1 = true;\n r_1_0.s_1 = r_1_0_1;\n }\n {\n string[2] memory r_1_0_2;\n {\n string memory r_1_0_2_0 = unicode\"Moo é🚀ooooo oM🚀M🚀oéo MM🚀ééo MM 🚀 \";\n r_1_0_2[0] = r_1_0_2_0;\n }\n {\n string memory r_1_0_2_1 = unicode\"Moo é🚀 MéoM🚀o🚀o 🚀é🚀M🚀Mooé🚀 ooééoM\";\n r_1_0_2[1] = r_1_0_2_1;\n }\n r_1_0.s_2 = r_1_0_2;\n }\n {\n address r_1_0_3 = 0x25CbA404FfeCcdB3b3545C6BDEd131b486d88512;\n r_1_0.s_3 = r_1_0_3;\n }\n {\n bytes2 r_1_0_4 = bytes2(0xa4b8);\n r_1_0.s_4 = r_1_0_4;\n }\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0xa25Ec86bad5A6371A3f713F77Ac442A51A517E90;\n r_1.s_1 = r_1_1;\n }\n {\n bool r_1_2 = false;\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x42FAd4Fd3451c2ae824cb23b36a34A2105d082b9;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000042fad4fd3451c2ae824cb23b36a34a2105d082b90000000000000000000000000000000000000000000000000000000000000060000000000000000000000000a25ec86bad5a6371a3f713f77ac442a51a517e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000012000000000000000000000000025cba404ffeccdb3b3545c6bded131b486d88512a4b80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f34d534066d40fd11229fc2bb2d4b1a0d23500000000000000000000000000004b6e3d1a4622b37ebd48c10dc348e58e391a0000000000000000000000000000fdf517a081f28e87927008e956952b6453990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000354d6f6f20c3a9f09f9a806f6f6f6f6f206f4df09f9a804df09f9a806fc3a96f204d4df09f9a80c3a9c3a96f204d4d2020f09f9a80200000000000000000000000000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a802020204dc3a96f4df09f9a806ff09f9a806f20f09f9a80c3a9f09f9a804df09f9a804d6f6fc3a9f09f9a80206f6fc3a9c3a96f4d0000" + }, + { + "name": "random-((bool[4],bool,address)[2],address[4],bytes3,(int216,string,address))", + "type": "((bool[4],bool,address)[2],address[4],bytes3,(int216,string,address))", + "value": [ + [ + [[true, true, true, false], false, "0x0246a09a120AB6120a133a3bE0B1FEF398Fc7Ef9"], + [[true, true, true, false], true, "0x4D6E8E8EB75c958665dc11AF9e9FFd2C0dd28b52"] + ], + [ + "0xB680962D3bee6fF9C05538627fD53a7c2A62f0Fd", + "0x46680b1eB78d7514795b2a28F5B9d6B60cb3b6f2", + "0x2dc2C02F1c9c52e6295d3Db8252B8dF082588b46", + "0x165C6027E20E0Cd8E0FE9DE3BA3D2b30f60a5c62" + ], + "0x6df2fa", + [ + "-44464390171147625489391479425103316763329688937263544007342445236", + "Moo é🚀é oo éooooo🚀 éoéMé M🚀oMéM🚀 ooM", + "0x53c48a6260366b9f66e2761d0f990a1521D272C2" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x0246a09a120AB6120a133a3bE0B1FEF398Fc7Ef9" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x4D6E8E8EB75c958665dc11AF9e9FFd2C0dd28b52" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xB680962D3bee6fF9C05538627fD53a7c2A62f0Fd" + }, + { + "type": "address", + "value": "0x46680b1eB78d7514795b2a28F5B9d6B60cb3b6f2" + }, + { + "type": "address", + "value": "0x2dc2C02F1c9c52e6295d3Db8252B8dF082588b46" + }, + { + "type": "address", + "value": "0x165C6027E20E0Cd8E0FE9DE3BA3D2b30f60a5c62" + } + ] + }, + { + "type": "hexstring", + "value": "0x6df2fa" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-44464390171147625489391479425103316763329688937263544007342445236" + }, + { + "type": "string", + "value": "Moo é🚀é oo éooooo🚀 éoéMé M🚀oMéM🚀 ooM" + }, + { + "type": "address", + "value": "0x53c48a6260366b9f66e2761d0f990a1521D272C2" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104ce806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906103a1565b60405180910390f35b610056610211565b61005e610211565b61006661027c565b61006e6102a9565b6100766102d0565b60018082526020808301829052604080840192909252600060608401819052928452830191909152730246a09a120ab6120a133a3be0b1fef398fc7ef99082015281526100c16102a9565b6100c96102d0565b6001808252602080830182905260408084018390526000606085015292845283810191909152734d6e8e8eb75c958665dc11af9e9ffd2c0dd28b529183019190915282015281526101186102d0565b73b680962d3bee6ff9c05538627fd53a7c2a62f0fd81527346680b1eb78d7514795b2a28f5b9d6b60cb3b6f2602080830191909152732dc2c02f1c9c52e6295d3db8252b8df082588b4660408084019190915273165c6027e20e0cd8e0fe9de3ba3d2b30f60a5c62606080850191909152848301939093526236f97d60e91b848201528051808401825280830184905260008183018190527a6c16420810fda8236aac9da5d0f96e59ba4804973caf5f385852b31982528251948501909252603880855290939192610461908301396020830152507353c48a6260366b9f66e2761d0f990a1521d272c260408201526060820152919050565b604051806080016040528061022461027c565b81526020016102316102d0565b815260200160006001600160e81b031916815260200161027760405180606001604052806000601a0b81526020016060815260200160006001600160a01b031681525090565b905290565b60405180604001604052806002905b6102936102a9565b81526020019060019003908161028b5790505090565b60405180606001604052806102bc6102d0565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b8060005b600481101561031a5781516001600160a01b03168452602093840193909101906001016102f2565b50505050565b8051601a0b82526000602080830151606082860152805180606087015260005b8181101561035c57828101840151878201608001528301610340565b8181111561036e576000608083890101525b506040850151925061038b60408701846001600160a01b03169052565b601f01601f191694909401608001949350505050565b602080825282516000919082848301815b6002811015610413578351805183855b60048110156103e15782511515825291880191908801906001016103c2565b5050508086015115156080840152604001516001600160a01b031660a08301529284019260c0909101906001016103b2565b505050508301516104286101a08401826102ee565b5060408301516001600160e81b031916610220830152606083015161024080840152610458610260840182610320565b94935050505056fe4d6f6f20c3a9f09f9a80c3a9206f6f20c3a96f6f6f6f6ff09f9a8020c3a96fc3a94dc3a920204df09f9a806f4dc3a94df09f9a80206f6f4da26469706673582212201266d3dbad4fa2a426233c5bbb5a212a0d0e9d939364aff55528405e6d24b10664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8462387e {\n bool[4] s_0;\n bool s_1;\n address s_2;\n }\n\n struct S_6b024e88 {\n int216 s_0;\n string s_1;\n address s_2;\n }\n\n struct S_fe798ef9 {\n S_8462387e[2] s_0;\n address[4] s_1;\n bytes3 s_2;\n S_6b024e88 s_3;\n }\n\n function test () public pure returns (S_fe798ef9 memory) {\n S_fe798ef9 memory r;\n {\n S_8462387e[2] memory r_0;\n {\n S_8462387e memory r_0_0;\n {\n bool[4] memory r_0_0_0;\n {\n bool r_0_0_0_0 = true;\n r_0_0_0[0] = r_0_0_0_0;\n }\n {\n bool r_0_0_0_1 = true;\n r_0_0_0[1] = r_0_0_0_1;\n }\n {\n bool r_0_0_0_2 = true;\n r_0_0_0[2] = r_0_0_0_2;\n }\n {\n bool r_0_0_0_3 = false;\n r_0_0_0[3] = r_0_0_0_3;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n bool r_0_0_1 = false;\n r_0_0.s_1 = r_0_0_1;\n }\n {\n address r_0_0_2 = 0x0246a09a120AB6120a133a3bE0B1FEF398Fc7Ef9;\n r_0_0.s_2 = r_0_0_2;\n }\n r_0[0] = r_0_0;\n }\n {\n S_8462387e memory r_0_1;\n {\n bool[4] memory r_0_1_0;\n {\n bool r_0_1_0_0 = true;\n r_0_1_0[0] = r_0_1_0_0;\n }\n {\n bool r_0_1_0_1 = true;\n r_0_1_0[1] = r_0_1_0_1;\n }\n {\n bool r_0_1_0_2 = true;\n r_0_1_0[2] = r_0_1_0_2;\n }\n {\n bool r_0_1_0_3 = false;\n r_0_1_0[3] = r_0_1_0_3;\n }\n r_0_1.s_0 = r_0_1_0;\n }\n {\n bool r_0_1_1 = true;\n r_0_1.s_1 = r_0_1_1;\n }\n {\n address r_0_1_2 = 0x4D6E8E8EB75c958665dc11AF9e9FFd2C0dd28b52;\n r_0_1.s_2 = r_0_1_2;\n }\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n address[4] memory r_1;\n {\n address r_1_0 = 0xB680962D3bee6fF9C05538627fD53a7c2A62f0Fd;\n r_1[0] = r_1_0;\n }\n {\n address r_1_1 = 0x46680b1eB78d7514795b2a28F5B9d6B60cb3b6f2;\n r_1[1] = r_1_1;\n }\n {\n address r_1_2 = 0x2dc2C02F1c9c52e6295d3Db8252B8dF082588b46;\n r_1[2] = r_1_2;\n }\n {\n address r_1_3 = 0x165C6027E20E0Cd8E0FE9DE3BA3D2b30f60a5c62;\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n bytes3 r_2 = bytes3(0x6df2fa);\n r.s_2 = r_2;\n }\n {\n S_6b024e88 memory r_3;\n {\n int216 r_3_0 = -44464390171147625489391479425103316763329688937263544007342445236;\n r_3.s_0 = r_3_0;\n }\n {\n string memory r_3_1 = unicode\"Moo é🚀é oo éooooo🚀 éoéMé M🚀oMéM🚀 ooM\";\n r_3.s_1 = r_3_1;\n }\n {\n address r_3_2 = 0x53c48a6260366b9f66e2761d0f990a1521D272C2;\n r_3.s_2 = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000246a09a120ab6120a133a3be0b1fef398fc7ef9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000004d6e8e8eb75c958665dc11af9e9ffd2c0dd28b52000000000000000000000000b680962d3bee6ff9c05538627fd53a7c2a62f0fd00000000000000000000000046680b1eb78d7514795b2a28f5b9d6b60cb3b6f20000000000000000000000002dc2c02f1c9c52e6295d3db8252b8df082588b46000000000000000000000000165c6027e20e0cd8e0fe9de3ba3d2b30f60a5c626df2fa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240ffffffffff93e9bdf7ef0257dc9553625a2f0691a645b7fb68c350a0c7a7ad4c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000053c48a6260366b9f66e2761d0f990a1521d272c200000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a80c3a9206f6f20c3a96f6f6f6f6ff09f9a8020c3a96fc3a94dc3a920204df09f9a806f4dc3a94df09f9a80206f6f4d0000000000000000" + }, + { + "name": "random-((bytes26,int32,address,int32,(bytes15,uint144))[3],uint152,address,bool,int88)", + "type": "((bytes26,int32,address,int32,(bytes15,uint144))[3],uint152,address,bool,int88)", + "value": [ + [ + [ + "0x7cd678eab8603f87d01e1aa76691b570e54d2a5d96d30d2da4cc", + "-1274087755", + "0x18cf7F1A50C3C8Ba63d58bE94A29a2748EbA7aa7", + "-410244943", + [ + "0xa1d439ce49c66ecf5a3fc20b76e5d0", + "5861305222278979196761994006358524681924217" + ] + ], + [ + "0x9b947a7161ab1eede7145268c011541284334a4373d0b714bca5", + "865864550", + "0xB756CD513d28450faC2BE04B9bdfD39c04d01648", + "-1580226233", + [ + "0x763c0b949a1bc10bf6e0a6078d826b", + "13416853283015054219154715288741264563542174" + ] + ], + [ + "0x05ad904cf15046303c188db6527129f4625290fd6cc71a2dc38f", + "15765399", + "0xb622d0Cf6E0c02c9c7eC3Ef251548E9097872C13", + "-1309242370", + [ + "0xa625ad7ce943cda0e26c51bd97f319", + "14565845279644385387939078387108336350844367" + ] + ] + ], + "2504265487923180049920196788541285307081912627", + "0x0153e0C83bDDA9884f10322a12198F277F2CCDae", + true, + "46056321346117608791734550" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x7cd678eab8603f87d01e1aa76691b570e54d2a5d96d30d2da4cc" + }, + { + "type": "number", + "value": "-1274087755" + }, + { + "type": "address", + "value": "0x18cf7F1A50C3C8Ba63d58bE94A29a2748EbA7aa7" + }, + { + "type": "number", + "value": "-410244943" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa1d439ce49c66ecf5a3fc20b76e5d0" + }, + { + "type": "number", + "value": "5861305222278979196761994006358524681924217" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x9b947a7161ab1eede7145268c011541284334a4373d0b714bca5" + }, + { + "type": "number", + "value": "865864550" + }, + { + "type": "address", + "value": "0xB756CD513d28450faC2BE04B9bdfD39c04d01648" + }, + { + "type": "number", + "value": "-1580226233" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x763c0b949a1bc10bf6e0a6078d826b" + }, + { + "type": "number", + "value": "13416853283015054219154715288741264563542174" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x05ad904cf15046303c188db6527129f4625290fd6cc71a2dc38f" + }, + { + "type": "number", + "value": "15765399" + }, + { + "type": "address", + "value": "0xb622d0Cf6E0c02c9c7eC3Ef251548E9097872C13" + }, + { + "type": "number", + "value": "-1309242370" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa625ad7ce943cda0e26c51bd97f319" + }, + { + "type": "number", + "value": "14565845279644385387939078387108336350844367" + } + ] + } + ] + } + ] + }, + { + "type": "number", + "value": "2504265487923180049920196788541285307081912627" + }, + { + "type": "address", + "value": "0x0153e0C83bDDA9884f10322a12198F277F2CCDae" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "46056321346117608791734550" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061049c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610365565b60405180910390f35b6100566102c8565b61005e6102c8565b6100666102fd565b61006e61032a565b7f7cd678eab8603f87d01e1aa76691b570e54d2a5d96d30d2da4cc0000000000008152634bf1094a1960208201527318cf7f1a50c3c8ba63d58be94a29a2748eba7aa76040820152631873d74e1960608201526100db604080518082019091526000808252602082015290565b6e0a1d439ce49c66ecf5a3fc20b76e5d608c1b8152714348d3f413fa3abd805e9ea60e461cde2e7960208201526080820152815261011761032a565b7f9b947a7161ab1eede7145268c011541284334a4373d0b714bca5000000000000815263339c0b66602082015273b756cd513d28450fac2be04b9bdfd39c04d016486040820152635e3056b8196060820152610183604080518082019091526000808252602082015290565b6e763c0b949a1bc10bf6e0a6078d826b60881b8152719a04968db88c280169044226b6ac55da989e60208201526080820152808260016020020152506101c761032a565b7f05ad904cf15046303c188db6527129f4625290fd6cc71a2dc38f000000000000815262f08f97602082015273b622d0cf6e0c02c9c7ec3ef251548e9097872c136040820152634e097401196060820152610232604080518082019091526000808252602082015290565b6ea625ad7ce943cda0e26c51bd97f31960881b815271a7352c0ef0178c13190456d720d1fe20d5cf6020820152608082015280826002602090810291909101919091529183525072704b8ed5c4ad29f1260c8b1f123df22511713390820152730153e0c83bdda9884f10322a12198f277f2ccdae6040820152600160608201526a2618ce2ed9956227edf9166080820152919050565b6040518060a001604052806102db6102fd565b8152600060208201819052604082018190526060820181905260809091015290565b60405180606001604052806003905b61031461032a565b81526020019060019003908161030c5790505090565b6040805160a0810182526000808252602080830182905282840182905260608301829052835180850190945281845283015290608082015290565b81516102c08201908260005b6003808210610380575061040f565b8351805165ffffffffffff19168452602080820151830b818601526040808301516001600160a01b03169086015260608083015190930b92850192909252608090810151805170ffffffffffffffffffffffffffffffffff19169185019190915281015171ffffffffffffffffffffffffffffffffffff1660a08401529092019160c090910190600101610371565b505050602083015172ffffffffffffffffffffffffffffffffffffff1661024083015260408301516001600160a01b031661026083015260608301511515610280830152608090920151600a0b6102a0909101529056fea26469706673582212204e2270f03ba412e5ccb2f06f612cc92451e17e4c15366fe453edb9ea71a32a7364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_68fe2188 {\n bytes15 s_0;\n uint144 s_1;\n }\n\n struct S_babb2207 {\n bytes26 s_0;\n int32 s_1;\n address s_2;\n int32 s_3;\n S_68fe2188 s_4;\n }\n\n struct S_c18a6c13 {\n S_babb2207[3] s_0;\n uint152 s_1;\n address s_2;\n bool s_3;\n int88 s_4;\n }\n\n function test () public pure returns (S_c18a6c13 memory) {\n S_c18a6c13 memory r;\n {\n S_babb2207[3] memory r_0;\n {\n S_babb2207 memory r_0_0;\n {\n bytes26 r_0_0_0 = bytes26(0x7cd678eab8603f87d01e1aa76691b570e54d2a5d96d30d2da4cc);\n r_0_0.s_0 = r_0_0_0;\n }\n {\n int32 r_0_0_1 = -1274087755;\n r_0_0.s_1 = r_0_0_1;\n }\n {\n address r_0_0_2 = 0x18cf7F1A50C3C8Ba63d58bE94A29a2748EbA7aa7;\n r_0_0.s_2 = r_0_0_2;\n }\n {\n int32 r_0_0_3 = -410244943;\n r_0_0.s_3 = r_0_0_3;\n }\n {\n S_68fe2188 memory r_0_0_4;\n {\n bytes15 r_0_0_4_0 = bytes15(0xa1d439ce49c66ecf5a3fc20b76e5d0);\n r_0_0_4.s_0 = r_0_0_4_0;\n }\n {\n uint144 r_0_0_4_1 = 5861305222278979196761994006358524681924217;\n r_0_0_4.s_1 = r_0_0_4_1;\n }\n r_0_0.s_4 = r_0_0_4;\n }\n r_0[0] = r_0_0;\n }\n {\n S_babb2207 memory r_0_1;\n {\n bytes26 r_0_1_0 = bytes26(0x9b947a7161ab1eede7145268c011541284334a4373d0b714bca5);\n r_0_1.s_0 = r_0_1_0;\n }\n {\n int32 r_0_1_1 = 865864550;\n r_0_1.s_1 = r_0_1_1;\n }\n {\n address r_0_1_2 = 0xB756CD513d28450faC2BE04B9bdfD39c04d01648;\n r_0_1.s_2 = r_0_1_2;\n }\n {\n int32 r_0_1_3 = -1580226233;\n r_0_1.s_3 = r_0_1_3;\n }\n {\n S_68fe2188 memory r_0_1_4;\n {\n bytes15 r_0_1_4_0 = bytes15(0x763c0b949a1bc10bf6e0a6078d826b);\n r_0_1_4.s_0 = r_0_1_4_0;\n }\n {\n uint144 r_0_1_4_1 = 13416853283015054219154715288741264563542174;\n r_0_1_4.s_1 = r_0_1_4_1;\n }\n r_0_1.s_4 = r_0_1_4;\n }\n r_0[1] = r_0_1;\n }\n {\n S_babb2207 memory r_0_2;\n {\n bytes26 r_0_2_0 = bytes26(0x05ad904cf15046303c188db6527129f4625290fd6cc71a2dc38f);\n r_0_2.s_0 = r_0_2_0;\n }\n {\n int32 r_0_2_1 = 15765399;\n r_0_2.s_1 = r_0_2_1;\n }\n {\n address r_0_2_2 = 0xb622d0Cf6E0c02c9c7eC3Ef251548E9097872C13;\n r_0_2.s_2 = r_0_2_2;\n }\n {\n int32 r_0_2_3 = -1309242370;\n r_0_2.s_3 = r_0_2_3;\n }\n {\n S_68fe2188 memory r_0_2_4;\n {\n bytes15 r_0_2_4_0 = bytes15(0xa625ad7ce943cda0e26c51bd97f319);\n r_0_2_4.s_0 = r_0_2_4_0;\n }\n {\n uint144 r_0_2_4_1 = 14565845279644385387939078387108336350844367;\n r_0_2_4.s_1 = r_0_2_4_1;\n }\n r_0_2.s_4 = r_0_2_4;\n }\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n uint152 r_1 = 2504265487923180049920196788541285307081912627;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x0153e0C83bDDA9884f10322a12198F277F2CCDae;\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n {\n int88 r_4 = 46056321346117608791734550;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x7cd678eab8603f87d01e1aa76691b570e54d2a5d96d30d2da4cc000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffb40ef6b500000000000000000000000018cf7f1a50c3c8ba63d58be94a29a2748eba7aa7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe78c28b1a1d439ce49c66ecf5a3fc20b76e5d0000000000000000000000000000000000000000000000000000000000000004348d3f413fa3abd805e9ea60e461cde2e799b947a7161ab1eede7145268c011541284334a4373d0b714bca500000000000000000000000000000000000000000000000000000000000000000000339c0b66000000000000000000000000b756cd513d28450fac2be04b9bdfd39c04d01648ffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1cfa947763c0b949a1bc10bf6e0a6078d826b000000000000000000000000000000000000000000000000000000000000009a04968db88c280169044226b6ac55da989e05ad904cf15046303c188db6527129f4625290fd6cc71a2dc38f0000000000000000000000000000000000000000000000000000000000000000000000f08f97000000000000000000000000b622d0cf6e0c02c9c7ec3ef251548e9097872c13ffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1f68bfea625ad7ce943cda0e26c51bd97f31900000000000000000000000000000000000000000000000000000000000000a7352c0ef0178c13190456d720d1fe20d5cf00000000000000000000000000704b8ed5c4ad29f1260c8b1f123df2251171330000000000000000000000000153e0c83bdda9884f10322a12198f277f2ccdae00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000002618ce2ed9956227edf916" + }, + { + "name": "random-(address,(bool,uint40,((string),int16,bytes1),bool)[3],address,string)[1]", + "type": "(address,(bool,uint40,((string),int16,bytes1),bool)[3],address,string)[1]", + "value": [ + [ + "0x0aA91C192DBEb96741e94ECeC8372FD1aba3A0B5", + [ + [false, "67972901229", [["Moo é🚀🚀oMMéo éM 🚀MM oé"], "614", "0xf9"], false], + [ + true, + "265915777972", + [ + [ + "Moo é🚀éM🚀🚀é 🚀oM🚀ooé 🚀o 🚀éMéooéMéoM🚀ooooooooé o🚀éoMoéMMé é 🚀o" + ], + "6275", + "0x1a" + ], + true + ], + [false, "334872994325", [["Moo é🚀o éoéo🚀"], "-30017", "0x62"], false] + ], + "0x11EfDA1818b8e98Bf8928a5AD32eA329ef11B324", + "Moo é🚀 Mo🚀🚀o🚀é🚀o🚀M🚀éo Mé🚀o🚀oéoé🚀🚀ééooéMoééé 🚀🚀🚀éMoMooé oéMoé " + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x0aA91C192DBEb96741e94ECeC8372FD1aba3A0B5" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "67972901229" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oMMéo éM 🚀MM oé" + } + ] + }, + { + "type": "number", + "value": "614" + }, + { + "type": "hexstring", + "value": "0xf9" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "265915777972" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éM🚀🚀é 🚀oM🚀ooé 🚀o 🚀éMéooéMéoM🚀ooooooooé o🚀éoMoéMMé é 🚀o" + } + ] + }, + { + "type": "number", + "value": "6275" + }, + { + "type": "hexstring", + "value": "0x1a" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "334872994325" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o éoéo🚀" + } + ] + }, + { + "type": "number", + "value": "-30017" + }, + { + "type": "hexstring", + "value": "0x62" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "address", + "value": "0x11EfDA1818b8e98Bf8928a5AD32eA329ef11B324" + }, + { + "type": "string", + "value": "Moo é🚀 Mo🚀🚀o🚀é🚀o🚀M🚀éo Mé🚀o🚀oéoé🚀🚀ééooéMoééé 🚀🚀🚀éMoMooé oéMoé " + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061062e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906103be565b60405180910390f35b61005661029c565b61005e61029c565b6100666102c9565b730aa91c192dbeb96741e94ecec8372fd1aba3a0b58152610085610300565b61008d61032d565b60008152640fd380296d60208201526100c660408051608081018252606080820190815281526000602082018190529181019190915290565b60408051602081019091526060815260006040518060600160405280602381526020016105d6602391398252508152610266602082015260f960f81b60408083019190915282015260006060820152815261011f61032d565b60018152643de9d0c3b4602082015261015860408051608081018252606080820190815281526000602082018190529181019190915290565b60408051602081019091526060815260006040518060a00160405280606881526020016104f5606891398252508152611883602080830191909152600d60f91b604080840191909152830191909152600160608301528201526101b961032d565b60008152644df7fc621560208201526101f260408051608081018252606080820190815281526000602082018190529181019190915290565b604080516020808201835260608083528351808501855260168152749adede418753e13f3500de418752df8752dfe13f3560571b8184015283529184526175401984820152603160f91b8484015284830193909352600090840181905284820193909352848201939093527311efda1818b8e98bf8928a5ad32ea329ef11b32484840152825160a0810190935260798084529192919061055d908301396060830152508152919050565b60405180602001604052806001905b6102b36102c9565b8152602001906001900390816102ab5790505090565b604051806080016040528060006001600160a01b031681526020016102ec610300565b815260006020820152606060409091015290565b60405180606001604052806003905b61031761032d565b81526020019060019003908161030f5790505090565b604080516080808201835260008083526020808401829052845192830185526060808401908152835282018190528184015290918201908152600060209091015290565b6000815180845260005b818110156103975760208185018101518683018201520161037b565b818111156103a9576000602083870101525b50601f01601f19169290920160200192915050565b6020808252600090604083820181850186855b60018110156104e757878303601f19018452815180516001600160a01b031684528681015160808886018190529060e086019082870160005b60038110156104a257607f19898503018252825180511515855264ffffffffff8d820151168d8601528b810151868d870152805160608089890152815191508f60e089015261045d610100890183610371565b91508f83015160010b60a089015260ff60f81b8f8401511660c089015280840151935061048d8189018515159052565b5095505050918b0191908b019060010161040a565b505050828801516001600160a01b038116878a015291506060830151925085810360608701526104d28184610371565b968901969550505091860191506001016103d1565b509097965050505050505056fe4d6f6f20c3a9f09f9a80c3a94df09f9a80f09f9a80c3a920f09f9a806f4df09f9a806f6fc3a920f09f9a806f20f09f9a80c3a94dc3a96f6fc3a94dc3a96f4df09f9a806f6f6f6f6f6f6f6fc3a9206ff09f9a80c3a96f4d6fc3a94d4dc3a92020c3a920f09f9a806f4d6f6f20c3a9f09f9a80204d6ff09f9a80f09f9a806ff09f9a80c3a9f09f9a806ff09f9a804df09f9a80c3a96f204dc3a9f09f9a806ff09f9a806fc3a96fc3a9f09f9a80f09f9a80c3a9c3a96f6fc3a94d6fc3a9c3a9c3a9202020f09f9a80f09f9a80f09f9a80c3a94d6f4d6f6fc3a9206fc3a94d6fc3a9204d6f6f20c3a9f09f9a80f09f9a806f4d4dc3a96f20c3a94d20f09f9a804d4d206fc3a9a264697066735822122094d5e38bb546e494b1dfe46a1ea86f5477a4b2776f705ad1324361faea78e47464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_275d34e5 {\n S_97fc4627 s_0;\n int16 s_1;\n bytes1 s_2;\n }\n\n struct S_c9a38557 {\n bool s_0;\n uint40 s_1;\n S_275d34e5 s_2;\n bool s_3;\n }\n\n struct S_817dcba3 {\n address s_0;\n S_c9a38557[3] s_1;\n address s_2;\n string s_3;\n }\n\n function test () public pure returns (S_817dcba3[1] memory) {\n S_817dcba3[1] memory r;\n {\n S_817dcba3 memory r_0;\n {\n address r_0_0 = 0x0aA91C192DBEb96741e94ECeC8372FD1aba3A0B5;\n r_0.s_0 = r_0_0;\n }\n {\n S_c9a38557[3] memory r_0_1;\n {\n S_c9a38557 memory r_0_1_0;\n {\n bool r_0_1_0_0 = false;\n r_0_1_0.s_0 = r_0_1_0_0;\n }\n {\n uint40 r_0_1_0_1 = 67972901229;\n r_0_1_0.s_1 = r_0_1_0_1;\n }\n {\n S_275d34e5 memory r_0_1_0_2;\n {\n S_97fc4627 memory r_0_1_0_2_0;\n {\n string memory r_0_1_0_2_0_0 = unicode\"Moo é🚀🚀oMMéo éM 🚀MM oé\";\n r_0_1_0_2_0.s_0 = r_0_1_0_2_0_0;\n }\n r_0_1_0_2.s_0 = r_0_1_0_2_0;\n }\n {\n int16 r_0_1_0_2_1 = 614;\n r_0_1_0_2.s_1 = r_0_1_0_2_1;\n }\n {\n bytes1 r_0_1_0_2_2 = bytes1(0xf9);\n r_0_1_0_2.s_2 = r_0_1_0_2_2;\n }\n r_0_1_0.s_2 = r_0_1_0_2;\n }\n {\n bool r_0_1_0_3 = false;\n r_0_1_0.s_3 = r_0_1_0_3;\n }\n r_0_1[0] = r_0_1_0;\n }\n {\n S_c9a38557 memory r_0_1_1;\n {\n bool r_0_1_1_0 = true;\n r_0_1_1.s_0 = r_0_1_1_0;\n }\n {\n uint40 r_0_1_1_1 = 265915777972;\n r_0_1_1.s_1 = r_0_1_1_1;\n }\n {\n S_275d34e5 memory r_0_1_1_2;\n {\n S_97fc4627 memory r_0_1_1_2_0;\n {\n string memory r_0_1_1_2_0_0 = unicode\"Moo é🚀éM🚀🚀é 🚀oM🚀ooé 🚀o 🚀éMéooéMéoM🚀ooooooooé o🚀éoMoéMMé é 🚀o\";\n r_0_1_1_2_0.s_0 = r_0_1_1_2_0_0;\n }\n r_0_1_1_2.s_0 = r_0_1_1_2_0;\n }\n {\n int16 r_0_1_1_2_1 = 6275;\n r_0_1_1_2.s_1 = r_0_1_1_2_1;\n }\n {\n bytes1 r_0_1_1_2_2 = bytes1(0x1a);\n r_0_1_1_2.s_2 = r_0_1_1_2_2;\n }\n r_0_1_1.s_2 = r_0_1_1_2;\n }\n {\n bool r_0_1_1_3 = true;\n r_0_1_1.s_3 = r_0_1_1_3;\n }\n r_0_1[1] = r_0_1_1;\n }\n {\n S_c9a38557 memory r_0_1_2;\n {\n bool r_0_1_2_0 = false;\n r_0_1_2.s_0 = r_0_1_2_0;\n }\n {\n uint40 r_0_1_2_1 = 334872994325;\n r_0_1_2.s_1 = r_0_1_2_1;\n }\n {\n S_275d34e5 memory r_0_1_2_2;\n {\n S_97fc4627 memory r_0_1_2_2_0;\n {\n string memory r_0_1_2_2_0_0 = unicode\"Moo é🚀o éoéo🚀\";\n r_0_1_2_2_0.s_0 = r_0_1_2_2_0_0;\n }\n r_0_1_2_2.s_0 = r_0_1_2_2_0;\n }\n {\n int16 r_0_1_2_2_1 = -30017;\n r_0_1_2_2.s_1 = r_0_1_2_2_1;\n }\n {\n bytes1 r_0_1_2_2_2 = bytes1(0x62);\n r_0_1_2_2.s_2 = r_0_1_2_2_2;\n }\n r_0_1_2.s_2 = r_0_1_2_2;\n }\n {\n bool r_0_1_2_3 = false;\n r_0_1_2.s_3 = r_0_1_2_3;\n }\n r_0_1[2] = r_0_1_2;\n }\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0x11EfDA1818b8e98Bf8928a5AD32eA329ef11B324;\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀 Mo🚀🚀o🚀é🚀o🚀M🚀éo Mé🚀o🚀oéoé🚀🚀ééooéMoééé 🚀🚀🚀éMoMooé oéMoé \";\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000aa91c192dbeb96741e94ecec8372fd1aba3a0b5000000000000000000000000000000000000000000000000000000000000008000000000000000000000000011efda1818b8e98bf8928a5ad32ea329ef11b3240000000000000000000000000000000000000000000000000000000000000520000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fd380296d0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000266f900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a80f09f9a806f4d4dc3a96f20c3a94d20f09f9a804d4d206fc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000003de9d0c3b400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000018831a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000684d6f6f20c3a9f09f9a80c3a94df09f9a80f09f9a80c3a920f09f9a806f4df09f9a806f6fc3a920f09f9a806f20f09f9a80c3a94dc3a96f6fc3a94dc3a96f4df09f9a806f6f6f6f6f6f6f6fc3a9206ff09f9a80c3a96f4d6fc3a94d4dc3a92020c3a920f09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004df7fc6215000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8abf6200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a806f20c3a96fc3a96ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000794d6f6f20c3a9f09f9a80204d6ff09f9a80f09f9a806ff09f9a80c3a9f09f9a806ff09f9a804df09f9a80c3a96f204dc3a9f09f9a806ff09f9a806fc3a96fc3a9f09f9a80f09f9a80c3a9c3a96f6fc3a94d6fc3a9c3a9c3a9202020f09f9a80f09f9a80f09f9a80c3a94d6f4d6f6fc3a9206fc3a94d6fc3a92000000000000000" + }, + { + "name": "random-(address,string,bool,(string,string,(bytes9,string[2],bool),string,string))", + "type": "(address,string,bool,(string,string,(bytes9,string[2],bool),string,string))", + "value": [ + "0xfF7a812ffecB77E4150d5D22A1400F7B48332858", + "Moo é🚀ooéM 🚀Mo ooooM🚀o🚀 o🚀o o éMoéMé M é🚀éoooo éé oéMooMooooé🚀é", + false, + [ + "Moo é🚀 MMé o🚀oéoo o", + "Moo é🚀", + [ + "0x093373ae03f0043833", + [ + "Moo é🚀MéoMé🚀é MéoMéoo Moéé🚀éoM🚀é éMM🚀oéo🚀oé🚀éooM o oo oéM", + "Moo é🚀oéo oéo🚀éo🚀oo 🚀 Mo oooM o Mé 🚀🚀" + ], + true + ], + "Moo é🚀🚀 🚀é🚀M 🚀🚀Mooo oéooooo oéMMM🚀o🚀🚀🚀M🚀🚀oM🚀o oé🚀 é oM ", + "Moo é🚀Mooé🚀o🚀 M🚀oo ooM éMooo MoM éMoéoooééoMéo 🚀é🚀M é" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xfF7a812ffecB77E4150d5D22A1400F7B48332858" + }, + { + "type": "string", + "value": "Moo é🚀ooéM 🚀Mo ooooM🚀o🚀 o🚀o o éMoéMé M é🚀éoooo éé oéMooMooooé🚀é" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 MMé o🚀oéoo o" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x093373ae03f0043833" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MéoMé🚀é MéoMéoo Moéé🚀éoM🚀é éMM🚀oéo🚀oé🚀éooM o oo oéM" + }, + { + "type": "string", + "value": "Moo é🚀oéo oéo🚀éo🚀oo 🚀 Mo oooM o Mé 🚀🚀" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀 🚀é🚀M 🚀🚀Mooo oéooooo oéMMM🚀o🚀🚀🚀M🚀🚀oM🚀o oé🚀 é oM " + }, + { + "type": "string", + "value": "Moo é🚀Mooé🚀o🚀 M🚀oo ooM éMooo MoM éMoéoooééoMéo 🚀é🚀M é" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506105d9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102c4565b60405180910390f35b6100566101c7565b61005e6101c7565b73ff7a812ffecb77e4150d5d22a1400f7b48332858815260408051608081019091526060808252600091906104e66020830139602083015250600060408201526100a66101f3565b604080518082018252601c81527f4d6f6f20c3a9f09f9a80204d4dc3a9206ff09f9a806fc3a96f6f206f000000006020808301919091529083528151808301909252600a8252689adede418753e13f3560b71b82820152820152610108610228565b68093373ae03f004383360b81b815261011f610250565b60006040518060800160405280605e8152602001610546605e91398252506040805160608101909152603c808252600091906103ee60208301396020808401919091528381019290925250600160408084019190915283810192909252815160a0810190925260688083526000929161047e90830139606083015250604080516080810190915260548082526000919061042a60208301396080830152506060820152919050565b604080516080810182526000808252606060208301819052928201529081016101ee6101f3565b905290565b6040518060a001604052806060815260200160608152602001610214610228565b815260200160608152602001606081525090565b60408051606081019091526000815260208101610243610250565b8152600060209091015290565b60405180604001604052806002905b606081526020019060019003908161025f5790505090565b6000815180845260005b8181101561029d57602081850181015186830182015201610281565b818111156102af576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835260018060a01b03845116818401528084015160406080818601526102f260a0860183610277565b915080860151606081151581880152808801519150601f19878503016080880152815160a0855261032660a0860182610277565b9050858301518582038787015261033d8282610277565b848601518782038888015280516001600160b81b031916825288810151898301869052919350915060a083019084840160005b600281101561039f57605f1986850301825261038d848451610277565b9350918a0191908a0190600101610370565b50505085820151151586840152838501519750868103848801526103c38189610277565b975050505050608081015191505081830360808301526103e38382610277565b969550505050505056fe4d6f6f20c3a9f09f9a806fc3a96f206fc3a96ff09f9a80c3a96ff09f9a806f6f20f09f9a80204d6f206f6f6f4d206f204dc3a920f09f9a80f09f9a804d6f6f20c3a9f09f9a804d6f6fc3a9f09f9a806ff09f9a80204df09f9a806f6f206f6f4d20c3a94d6f6f6f204d6f4d20c3a94d6fc3a96f6f6fc3a9c3a96f4dc3a96f20f09f9a80c3a9f09f9a804d20202020c3a94d6f6f20c3a9f09f9a80f09f9a8020f09f9a80c3a9f09f9a804d2020f09f9a80f09f9a804d6f6f6f206fc3a96f6f6f6f6f206fc3a94d4d4df09f9a806ff09f9a80f09f9a80f09f9a804df09f9a80f09f9a806f4df09f9a806f206fc3a9f09f9a8020c3a9206f4d204d6f6f20c3a9f09f9a806f6fc3a94d20f09f9a804d6f206f6f6f6f4df09f9a806ff09f9a80206ff09f9a806f206f20c3a94d6fc3a94dc3a9204d20c3a9f09f9a80c3a96f6f6f6f20c3a9c3a9206fc3a94d6f6f4d6f6f6f6fc3a9f09f9a80c3a94d6f6f20c3a9f09f9a804dc3a96f4dc3a9f09f9a80c3a9204dc3a96f4dc3a96f6f204d6fc3a9c3a9f09f9a80c3a96f4df09f9a80c3a920c3a94d4df09f9a806fc3a96ff09f9a806fc3a9f09f9a80c3a96f6f4d20206f206f6f206fc3a94da26469706673582212202c9562a5b7d063a6428f9d542f3ed13896ad76dec42ebeb5eef7c6c028b36b2f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_554129f2 {\n bytes9 s_0;\n string[2] s_1;\n bool s_2;\n }\n\n struct S_0a5d4ce3 {\n string s_0;\n string s_1;\n S_554129f2 s_2;\n string s_3;\n string s_4;\n }\n\n struct S_d4c572a7 {\n address s_0;\n string s_1;\n bool s_2;\n S_0a5d4ce3 s_3;\n }\n\n function test () public pure returns (S_d4c572a7 memory) {\n S_d4c572a7 memory r;\n {\n address r_0 = 0xfF7a812ffecB77E4150d5D22A1400F7B48332858;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀ooéM 🚀Mo ooooM🚀o🚀 o🚀o o éMoéMé M é🚀éoooo éé oéMooMooooé🚀é\";\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n S_0a5d4ce3 memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀 MMé o🚀oéoo o\";\n r_3.s_0 = r_3_0;\n }\n {\n string memory r_3_1 = unicode\"Moo é🚀\";\n r_3.s_1 = r_3_1;\n }\n {\n S_554129f2 memory r_3_2;\n {\n bytes9 r_3_2_0 = bytes9(0x093373ae03f0043833);\n r_3_2.s_0 = r_3_2_0;\n }\n {\n string[2] memory r_3_2_1;\n {\n string memory r_3_2_1_0 = unicode\"Moo é🚀MéoMé🚀é MéoMéoo Moéé🚀éoM🚀é éMM🚀oéo🚀oé🚀éooM o oo oéM\";\n r_3_2_1[0] = r_3_2_1_0;\n }\n {\n string memory r_3_2_1_1 = unicode\"Moo é🚀oéo oéo🚀éo🚀oo 🚀 Mo oooM o Mé 🚀🚀\";\n r_3_2_1[1] = r_3_2_1_1;\n }\n r_3_2.s_1 = r_3_2_1;\n }\n {\n bool r_3_2_2 = true;\n r_3_2.s_2 = r_3_2_2;\n }\n r_3.s_2 = r_3_2;\n }\n {\n string memory r_3_3 = unicode\"Moo é🚀🚀 🚀é🚀M 🚀🚀Mooo oéooooo oéMMM🚀o🚀🚀🚀M🚀🚀oM🚀o oé🚀 é oM \";\n r_3.s_3 = r_3_3;\n }\n {\n string memory r_3_4 = unicode\"Moo é🚀Mooé🚀o🚀 M🚀oo ooM éMooo MoM éMoéoooééoMéo 🚀é🚀M é\";\n r_3.s_4 = r_3_4;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000ff7a812ffecb77e4150d5d22a1400f7b4833285800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a806f6fc3a94d20f09f9a804d6f206f6f6f6f4df09f9a806ff09f9a80206ff09f9a806f206f20c3a94d6fc3a94dc3a9204d20c3a9f09f9a80c3a96f6f6f6f20c3a9c3a9206fc3a94d6f6f4d6f6f6f6fc3a9f09f9a80c3a900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80204d4dc3a9206ff09f9a806fc3a96f6f206f00000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000093373ae03f0043833000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a804dc3a96f4dc3a9f09f9a80c3a9204dc3a96f4dc3a96f6f204d6fc3a9c3a9f09f9a80c3a96f4df09f9a80c3a920c3a94d4df09f9a806fc3a96ff09f9a806fc3a9f09f9a80c3a96f6f4d20206f206f6f206fc3a94d0000000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a806fc3a96f206fc3a96ff09f9a80c3a96ff09f9a806f6f20f09f9a80204d6f206f6f6f4d206f204dc3a920f09f9a80f09f9a800000000000000000000000000000000000000000000000000000000000000000000000684d6f6f20c3a9f09f9a80f09f9a8020f09f9a80c3a9f09f9a804d2020f09f9a80f09f9a804d6f6f6f206fc3a96f6f6f6f6f206fc3a94d4d4df09f9a806ff09f9a80f09f9a80f09f9a804df09f9a80f09f9a806f4df09f9a806f206fc3a9f09f9a8020c3a9206f4d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a804d6f6fc3a9f09f9a806ff09f9a80204df09f9a806f6f206f6f4d20c3a94d6f6f6f204d6f4d20c3a94d6fc3a96f6f6fc3a9c3a96f4dc3a96f20f09f9a80c3a9f09f9a804d20202020c3a9000000000000000000000000" + }, + { + "name": "random-(bool,bytes15,(uint16[4],bool[1],uint112,bool[]),string,bytes3)", + "type": "(bool,bytes15,(uint16[4],bool[1],uint112,bool[]),string,bytes3)", + "value": [ + false, + "0xc9d253f49034669f69306e1cf5ef02", + [ + ["43615", "34357", "47501", "886"], + [true], + "2926495038821940548885772380050993", + [false, true, true] + ], + "Moo é🚀🚀M éooo éo🚀oéMooo🚀 é ooM🚀é🚀", + "0xf7736b" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xc9d253f49034669f69306e1cf5ef02" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "43615" + }, + { + "type": "number", + "value": "34357" + }, + { + "type": "number", + "value": "47501" + }, + { + "type": "number", + "value": "886" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "number", + "value": "2926495038821940548885772380050993" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀M éooo éo🚀oéMooo🚀 é ooM🚀é🚀" + }, + { + "type": "hexstring", + "value": "0xf7736b" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061048b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061030d565b60405180910390f35b6100566101b5565b61005e6101b5565b600081526e64e929fa481a334fb498370e7af78160891b60208201526100826101e8565b61008a61021c565b61aa5f8152618635602082015261b98d6040820152610376606082015281526100b161023a565b6001815260208201526d90498f76d89bedd8dc63454a963160408083019190915280516003808252608082019092526000918160200160208202803683370190505090506000808260008151811061010b5761010b610405565b60200260200101901515908115158152505050600060019050808260018151811061013857610138610405565b60200260200101901515908115158152505050600060019050808260028151811061016557610165610405565b911515602092830291909101820152606080850193909352604080860194909452835192830190935250603a80825260009261041c9083013960608301525062f7736b60e81b6080820152919050565b6040805160a081018252600080825260208201529081016101d46101e8565b815260606020820152600060409091015290565b60405180608001604052806101fb61021c565b815260200161020861023a565b815260006020820152606060409091015290565b60405180608001604052806004906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b8060005b600181101561027d578151151584526020938401939091019060010161025c565b50505050565b600081518084526020808501945080840160005b838110156102b5578151151587529582019590820190600101610297565b509495945050505050565b6000815180845260005b818110156102e6576020818501810151868301820152016102ca565b818111156102f8576000602083870101525b50601f01601f19169290920160200192915050565b602080825282511515828201528281015170ffffffffffffffffffffffffffffffffff191660408084019190915283015160a060608401528051600092918360c086015b600482101561037457835161ffff16815292840192600191909101908401610351565b50509182015191610389610140860184610258565b60408101516dffffffffffffffffffffffffffff166101608601526060015160e061018086015291506103c290506101a0840182610283565b90506060840151601f198483030160808501526103df82826102c0565b91505060808401516103fd60a08501826001600160e81b0319169052565b509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a804d20c3a96f6f6f2020c3a96ff09f9a806fc3a94d6f6f6ff09f9a8020c3a9206f6f4df09f9a80c3a9f09f9a80a2646970667358221220bbf3c4b5bee4349f47fe85deda601bc072f018eaa8fcea44f2bc2c09cb6effb164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_64e4ef6c {\n uint16[4] s_0;\n bool[1] s_1;\n uint112 s_2;\n bool[] s_3;\n }\n\n struct S_13c11169 {\n bool s_0;\n bytes15 s_1;\n S_64e4ef6c s_2;\n string s_3;\n bytes3 s_4;\n }\n\n function test () public pure returns (S_13c11169 memory) {\n S_13c11169 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n bytes15 r_1 = bytes15(0xc9d253f49034669f69306e1cf5ef02);\n r.s_1 = r_1;\n }\n {\n S_64e4ef6c memory r_2;\n {\n uint16[4] memory r_2_0;\n {\n uint16 r_2_0_0 = 43615;\n r_2_0[0] = r_2_0_0;\n }\n {\n uint16 r_2_0_1 = 34357;\n r_2_0[1] = r_2_0_1;\n }\n {\n uint16 r_2_0_2 = 47501;\n r_2_0[2] = r_2_0_2;\n }\n {\n uint16 r_2_0_3 = 886;\n r_2_0[3] = r_2_0_3;\n }\n r_2.s_0 = r_2_0;\n }\n {\n bool[1] memory r_2_1;\n {\n bool r_2_1_0 = true;\n r_2_1[0] = r_2_1_0;\n }\n r_2.s_1 = r_2_1;\n }\n {\n uint112 r_2_2 = 2926495038821940548885772380050993;\n r_2.s_2 = r_2_2;\n }\n {\n bool[] memory r_2_3 = new bool[](3);\n {\n bool r_2_3_0 = false;\n r_2_3[0] = r_2_3_0;\n }\n {\n bool r_2_3_1 = true;\n r_2_3[1] = r_2_3_1;\n }\n {\n bool r_2_3_2 = true;\n r_2_3[2] = r_2_3_2;\n }\n r_2.s_3 = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀🚀M éooo éo🚀oéMooo🚀 é ooM🚀é🚀\";\n r.s_3 = r_3;\n }\n {\n bytes3 r_4 = bytes3(0xf7736b);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000c9d253f49034669f69306e1cf5ef02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000200f7736b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa5f0000000000000000000000000000000000000000000000000000000000008635000000000000000000000000000000000000000000000000000000000000b98d0000000000000000000000000000000000000000000000000000000000000376000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000090498f76d89bedd8dc63454a963100000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000003a4d6f6f20c3a9f09f9a80f09f9a804d20c3a96f6f6f2020c3a96ff09f9a806fc3a94d6f6f6ff09f9a8020c3a9206f6f4df09f9a80c3a9f09f9a80000000000000" + }, + { + "name": "random-(int232,(bool,string,uint136,address,bytes4[2]),address,uint80,int8[2])", + "type": "(int232,(bool,string,uint136,address,bytes4[2]),address,uint80,int8[2])", + "value": [ + "-2079440775584775807337132105788565643682173916178697799676537367312107", + [ + false, + "Moo é🚀M🚀o🚀 o🚀🚀oMo 🚀MoooooéM🚀 éM éM é🚀o🚀", + "8173386882283799959557936638716380589138", + "0xc4eab3e937475283C191612cd4cFE4FFfBeAB69d", + ["0x3dee9bf2", "0xb81e350c"] + ], + "0x12dCBB498eE2a8B48d0475f09D2969fcA29B784b", + "330162886233817626908519", + ["10", "-92"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "-2079440775584775807337132105788565643682173916178697799676537367312107" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀M🚀o🚀 o🚀🚀oMo 🚀MoooooéM🚀 éM éM é🚀o🚀" + }, + { + "type": "number", + "value": "8173386882283799959557936638716380589138" + }, + { + "type": "address", + "value": "0xc4eab3e937475283C191612cd4cFE4FFfBeAB69d" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3dee9bf2" + }, + { + "type": "hexstring", + "value": "0xb81e350c" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x12dCBB498eE2a8B48d0475f09D2969fcA29B784b" + }, + { + "type": "number", + "value": "330162886233817626908519" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "10" + }, + { + "type": "number", + "value": "-92" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103d1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061024d565b60405180910390f35b610056610153565b61005e610153565b7fffffffb2de877c69b0a86ef8b6af2f6f194d21b35c97e496261efbcc307dc9158152610089610190565b6000808252604080516080810190915260498082526103536020830139602083015250701804f90deae10ac066ab0a9e05d9b22c52604082015273c4eab3e937475283c191612cd4cfe4fffbeab69d60608201526100e56101cf565b631ef74df960e11b8152632e078d4360e21b60208083019190915260808301919091528201527312dcbb498ee2a8b48d0475f09d2969fca29b784b60408201526945ea2a7a27b7171f1767606082015261013d6101cf565b600a8152605b1960208201526080820152919050565b6040518060a001604052806000601c0b8152602001610170610190565b8152600060208201819052604082015260600161018b6101cf565b905290565b6040518060a001604052806000151581526020016060815260200160006001600160881b0316815260200160006001600160a01b0316815260200161018b5b60405180604001604052806002906020820280368337509192915050565b8060005b600281101561021a5781516001600160e01b0319168452602093840193909101906001016101f1565b50505050565b806000805b6002811015610246578251820b855260209485019490920191600101610225565b5050505050565b600060208083528351601c0b818401528084015160c060408501528051151560e08501528181015160c06101008601528051806101a087015260005b818110156102a6578281018501518782016101c001528401610289565b818111156102b95760006101c083890101525b5060408301516001600160881b031661012087015260608301516001600160a01b0316610140870152608083015193506102f76101608701856101ed565b60408701516001600160a01b03811660608801529350606087015169ffffffffffffffffffff8116608088015293506080870151935061033a60a0870185610220565b601f01601f1916949094016101c0019594505050505056fe4d6f6f20c3a9f09f9a804df09f9a806ff09f9a80206ff09f9a80f09f9a806f4d6f20f09f9a804d6f6f6f6f6fc3a94df09f9a8020c3a94d20c3a94d202020c3a9f09f9a806ff09f9a80a26469706673582212200feaefd5b26004bce00363c4186b81f72d7fcb7ca8ad7f3a6b41f908a30d067664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_3e79728b {\n bool s_0;\n string s_1;\n uint136 s_2;\n address s_3;\n bytes4[2] s_4;\n }\n\n struct S_a86e13cd {\n int232 s_0;\n S_3e79728b s_1;\n address s_2;\n uint80 s_3;\n int8[2] s_4;\n }\n\n function test () public pure returns (S_a86e13cd memory) {\n S_a86e13cd memory r;\n {\n int232 r_0 = -2079440775584775807337132105788565643682173916178697799676537367312107;\n r.s_0 = r_0;\n }\n {\n S_3e79728b memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀M🚀o🚀 o🚀🚀oMo 🚀MoooooéM🚀 éM éM é🚀o🚀\";\n r_1.s_1 = r_1_1;\n }\n {\n uint136 r_1_2 = 8173386882283799959557936638716380589138;\n r_1.s_2 = r_1_2;\n }\n {\n address r_1_3 = 0xc4eab3e937475283C191612cd4cFE4FFfBeAB69d;\n r_1.s_3 = r_1_3;\n }\n {\n bytes4[2] memory r_1_4;\n {\n bytes4 r_1_4_0 = bytes4(0x3dee9bf2);\n r_1_4[0] = r_1_4_0;\n }\n {\n bytes4 r_1_4_1 = bytes4(0xb81e350c);\n r_1_4[1] = r_1_4_1;\n }\n r_1.s_4 = r_1_4;\n }\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x12dCBB498eE2a8B48d0475f09D2969fcA29B784b;\n r.s_2 = r_2;\n }\n {\n uint80 r_3 = 330162886233817626908519;\n r.s_3 = r_3;\n }\n {\n int8[2] memory r_4;\n {\n int8 r_4_0 = 10;\n r_4[0] = r_4_0;\n }\n {\n int8 r_4_1 = -92;\n r_4[1] = r_4_1;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020ffffffb2de877c69b0a86ef8b6af2f6f194d21b35c97e496261efbcc307dc91500000000000000000000000000000000000000000000000000000000000000c000000000000000000000000012dcbb498ee2a8b48d0475f09d2969fca29b784b0000000000000000000000000000000000000000000045ea2a7a27b7171f1767000000000000000000000000000000000000000000000000000000000000000affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000001804f90deae10ac066ab0a9e05d9b22c52000000000000000000000000c4eab3e937475283c191612cd4cfe4fffbeab69d3dee9bf200000000000000000000000000000000000000000000000000000000b81e350c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000494d6f6f20c3a9f09f9a804df09f9a806ff09f9a80206ff09f9a80f09f9a806f4d6f20f09f9a804d6f6f6f6f6fc3a94df09f9a8020c3a94d20c3a94d202020c3a9f09f9a806ff09f9a800000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int32,(uint120,((string,int104,bool,(int128),string)[1],address,address)))[]", + "type": "(int32,(uint120,((string,int104,bool,(int128),string)[1],address,address)))[]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061032b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101b6565b60405180910390f35b604080516000808252602082019092526060919081610083565b61007061008a565b8152602001906001900390816100685790505b5092915050565b6040518060400160405280600060030b81526020016100a76100ac565b905290565b604051806040016040528060006001600160781b031681526020016100a760405180606001604052806100dd6100f1565b815260006020820181905260409091015290565b60405180602001604052806001905b61010861011e565b8152602001906001900390816101005790505090565b6040518060a00160405280606081526020016000600c0b815260200160001515815260200161015c60405180602001604052806000600f0b81525090565b8152602001606081525090565b6000815180845260005b8181101561018f57602081850181015186830182015201610173565b818111156101a1576000602083870101525b50601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156102e757888303603f190185528151805160030b845287015187840187905280516001600160781b031687850152870151606080850188905281516080860182905261010086019060e0870160005b60018110156102a75760df198985030182528251805160a0865261025760a0870182610169565b90508e820151600c0b8f8701528d82015115158e8701528682015151600f0b878701526080820151915085810360808701526102938183610169565b95505050918c0191908c0190600101610230565b505050828a01516001600160a01b03811660a08801529150918801516001600160a01b03811660c0870152919689019694505050908601906001016101dd565b50909897505050505050505056fea264697066735822122066e50cc8693e6f95d98e3d064afe106f768151fbe49aa7119e1904dad43c748464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b1600010 {\n int128 s_0;\n }\n\n struct S_bfb60337 {\n string s_0;\n int104 s_1;\n bool s_2;\n S_b1600010 s_3;\n string s_4;\n }\n\n struct S_6cf11def {\n S_bfb60337[1] s_0;\n address s_1;\n address s_2;\n }\n\n struct S_0789e1a4 {\n uint120 s_0;\n S_6cf11def s_1;\n }\n\n struct S_af29a066 {\n int32 s_0;\n S_0789e1a4 s_1;\n }\n\n function test () public pure returns (S_af29a066[] memory) {\n S_af29a066[] memory r = new S_af29a066[](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,(bool,int136,uint216,string),string,((bytes11,uint56,bool[]),bytes27))", + "type": "(string,(bool,int136,uint216,string),string,((bytes11,uint56,bool[]),bytes27))", + "value": [ + "Moo é🚀Mo🚀 éoM🚀M🚀éMéoooo🚀é🚀Mo ooMo🚀o", + [ + true, + "-1164221126038085248374030812529608821205", + "2886752086344032224339910669180919805207688756914310040895445033", + "Moo é🚀o é🚀éMéoooooé é🚀 Mo🚀éo Moo🚀o🚀 éo🚀🚀oéo🚀ooM🚀oo🚀o o" + ], + "Moo é🚀", + [ + ["0x2eb1ccc0993b9c447330a8", "65359066188433656", [false]], + "0xfe3c000ea4ff983f10458ae1f90193d881c7036826275ca98cd086" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mo🚀 éoM🚀M🚀éMéoooo🚀é🚀Mo ooMo🚀o" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-1164221126038085248374030812529608821205" + }, + { + "type": "number", + "value": "2886752086344032224339910669180919805207688756914310040895445033" + }, + { + "type": "string", + "value": "Moo é🚀o é🚀éMéoooooé é🚀 Mo🚀éo Moo🚀o🚀 éo🚀🚀oéo🚀ooM🚀oo🚀o o" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x2eb1ccc0993b9c447330a8" + }, + { + "type": "number", + "value": "65359066188433656" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xfe3c000ea4ff983f10458ae1f90193d881c7036826275ca98cd086" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104e8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610348565b60405180910390f35b6100566101d5565b61005e6101d5565b60006040518060600160405280603d8152602001610476603d9139825250604080516080810182526060808201526001815270036bdcd535d23efe513f05bb99b60f09d4196020808301919091527a07046e23cb3d592516810ebb9ddd6d1c071b490aecf4e26a75582982840152825160a0810190935260638084529192600092909161041390830139606083015250602080830191909152604080518082018252600a8152689adede418753e13f3560b71b92810192909252820152610123610229565b6040805160608082018352818301526a05d63998132773888e661560ab1b815266e833b9730348f86020808301919091528251600180825281850190945291926000929182810190803683370190505090506000808260008151811061018b5761018b6103fc565b9115156020928302919091018201526040840192909252509082527ffe3c000ea4ff983f10458ae1f90193d881c7036826275ca98cd0860000000000908201526060820152919050565b604051806080016040528060608152602001610210604080516080810182526000808252602082018190529181019190915260608082015290565b815260200160608152602001610224610229565b905290565b60405180604001604052806102566040805160608082018352600080835260208301529181019190915290565b8152600060209091015290565b6000815180845260005b818110156102895760208185018101518683018201520161026d565b8181111561029b576000602083870101525b50601f01601f19169290920160200192915050565b600081516040845260a084016affffffffffffffffffffff60a81b8251166040860152602066ffffffffffffff81840151166060870152604083015192506060608087015281835180845260c0880191508285019450600093505b8084101561032d5784511515825293820193600193909301929082019061030b565b509481015164ffffffffff1916950194909452509092915050565b60208152600082516080602084015261036460a0840182610263565b90506020840151601f1980858403016040860152815115158352602082015160100b602084015260018060d81b03604083015116604084015260608201519150608060608401526103b86080840183610263565b925060408601519150808584030160608601526103d58383610263565b92506060860151915080858403016080860152506103f382826102b0565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f2020c3a9f09f9a80c3a94dc3a96f6f6f6f6fc3a92020c3a9f09f9a80204d6ff09f9a80c3a96f204d6f6ff09f9a806ff09f9a8020c3a96ff09f9a80f09f9a806fc3a96ff09f9a806f6f4df09f9a806f6ff09f9a806f20206f4d6f6f20c3a9f09f9a804d6ff09f9a8020c3a96f4df09f9a804df09f9a80c3a94dc3a96f6f6f6ff09f9a80c3a9f09f9a804d6f206f6f4d6ff09f9a806fa26469706673582212201a4bd95106f08965ceb31698b230d2419576d4093fb479e780a600e2c264d83f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_dd204004 {\n bool s_0;\n int136 s_1;\n uint216 s_2;\n string s_3;\n }\n\n struct S_96b27f20 {\n bytes11 s_0;\n uint56 s_1;\n bool[] s_2;\n }\n\n struct S_c79b37e9 {\n S_96b27f20 s_0;\n bytes27 s_1;\n }\n\n struct S_6afd1de1 {\n string s_0;\n S_dd204004 s_1;\n string s_2;\n S_c79b37e9 s_3;\n }\n\n function test () public pure returns (S_6afd1de1 memory) {\n S_6afd1de1 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀Mo🚀 éoM🚀M🚀éMéoooo🚀é🚀Mo ooMo🚀o\";\n r.s_0 = r_0;\n }\n {\n S_dd204004 memory r_1;\n {\n bool r_1_0 = true;\n r_1.s_0 = r_1_0;\n }\n {\n int136 r_1_1 = -1164221126038085248374030812529608821205;\n r_1.s_1 = r_1_1;\n }\n {\n uint216 r_1_2 = 2886752086344032224339910669180919805207688756914310040895445033;\n r_1.s_2 = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀o é🚀éMéoooooé é🚀 Mo🚀éo Moo🚀o🚀 éo🚀🚀oéo🚀ooM🚀oo🚀o o\";\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀\";\n r.s_2 = r_2;\n }\n {\n S_c79b37e9 memory r_3;\n {\n S_96b27f20 memory r_3_0;\n {\n bytes11 r_3_0_0 = bytes11(0x2eb1ccc0993b9c447330a8);\n r_3_0.s_0 = r_3_0_0;\n }\n {\n uint56 r_3_0_1 = 65359066188433656;\n r_3_0.s_1 = r_3_0_1;\n }\n {\n bool[] memory r_3_0_2 = new bool[](1);\n {\n bool r_3_0_2_0 = false;\n r_3_0_2[0] = r_3_0_2_0;\n }\n r_3_0.s_2 = r_3_0_2;\n }\n r_3.s_0 = r_3_0;\n }\n {\n bytes27 r_3_1 = bytes27(0xfe3c000ea4ff983f10458ae1f90193d881c7036826275ca98cd086);\n r_3.s_1 = r_3_1;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a804d6ff09f9a8020c3a96f4df09f9a804df09f9a80c3a94dc3a96f6f6f6ff09f9a80c3a9f09f9a804d6f206f6f4d6ff09f9a806f0000000000000000000000000000000000000000000000000000000000000000000001fffffffffffffffffffffffffffffffc94232aca2dc101aec0fa446649f0f62b000000000007046e23cb3d592516810ebb9ddd6d1c071b490aecf4e26a755829000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a806f2020c3a9f09f9a80c3a94dc3a96f6f6f6f6fc3a92020c3a9f09f9a80204d6ff09f9a80c3a96f204d6f6ff09f9a806ff09f9a8020c3a96ff09f9a80f09f9a806fc3a96ff09f9a806f6f4df09f9a806f6ff09f9a806f20206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040fe3c000ea4ff983f10458ae1f90193d881c7036826275ca98cd08600000000002eb1ccc0993b9c447330a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e833b9730348f8000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,bytes11,bytes12,(bytes7,(address,bytes17,bytes26[],bool[2])[4]))", + "type": "(string,bytes11,bytes12,(bytes7,(address,bytes17,bytes26[],bool[2])[4]))", + "value": [ + "Moo é🚀Mé🚀🚀é🚀 Mo🚀oo🚀 MM🚀 🚀🚀🚀éMMoMoéoéMMo", + "0xfddb86f32746d296980685", + "0x35799ac6c9a8865497ebd270", + [ + "0xa4856e7e816e16", + [ + [ + "0x779d508be1EeF03C200410C433b568a8F5DC2b89", + "0x2ac662d8132312499b64ad78823200fc92", + [ + "0x2a5c9ff0e817e8f68a94151e302753a32a78ba02610b4e6536ab", + "0x3ea0092ac33b8a334b2772e8a216462bb35841ba2a16cefd869f" + ], + [true, true] + ], + [ + "0xe9bf7A03fdC296a66EBA6c24bAaF6cB89a72e402", + "0x476982f425eb6743e3a6f7b6c5cf744bb8", + [ + "0x1f90bf1bff7fd785fea4f19774558811e4804f9a9dc5acc9c86b", + "0x93b0f6ded3d2804277a2002a3fe2cb3da7694ae1b257fe63fef9", + "0x3457a7c3b4194fb774c654d3b0ef83dac271b11256f44f013833", + "0xf0d4889f0a2cd26ceb47290496e59125ea117967a4ef079c084e" + ], + [false, true] + ], + [ + "0x023B1D7982Ad4dEcB33dfF9faBE7653295E513c8", + "0x7f96310e3cde75692c22bf05aa8ce035bf", + [ + "0x2c61ad161238bcf92b0f62f80b9fee25ae7afd47d0f17e502e50", + "0x2306f2ba70e09c97087f93849bf4f87378d502bcae55068951e8", + "0x9c846fde7f7bed480fd405adb33e76f9bc487145cc301c86372a", + "0x362bc23a860f6e14760642a895114b88e3731016287ad86e078d" + ], + [true, false] + ], + [ + "0x0253a90d12362656426aa9D9f0AfF1Dd101F59eb", + "0xf65034dbbd36c0977468dda09d9e60eff3", + [], + [false, false] + ] + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mé🚀🚀é🚀 Mo🚀oo🚀 MM🚀 🚀🚀🚀éMMoMoéoéMMo" + }, + { + "type": "hexstring", + "value": "0xfddb86f32746d296980685" + }, + { + "type": "hexstring", + "value": "0x35799ac6c9a8865497ebd270" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa4856e7e816e16" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x779d508be1EeF03C200410C433b568a8F5DC2b89" + }, + { + "type": "hexstring", + "value": "0x2ac662d8132312499b64ad78823200fc92" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2a5c9ff0e817e8f68a94151e302753a32a78ba02610b4e6536ab" + }, + { + "type": "hexstring", + "value": "0x3ea0092ac33b8a334b2772e8a216462bb35841ba2a16cefd869f" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xe9bf7A03fdC296a66EBA6c24bAaF6cB89a72e402" + }, + { + "type": "hexstring", + "value": "0x476982f425eb6743e3a6f7b6c5cf744bb8" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x1f90bf1bff7fd785fea4f19774558811e4804f9a9dc5acc9c86b" + }, + { + "type": "hexstring", + "value": "0x93b0f6ded3d2804277a2002a3fe2cb3da7694ae1b257fe63fef9" + }, + { + "type": "hexstring", + "value": "0x3457a7c3b4194fb774c654d3b0ef83dac271b11256f44f013833" + }, + { + "type": "hexstring", + "value": "0xf0d4889f0a2cd26ceb47290496e59125ea117967a4ef079c084e" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x023B1D7982Ad4dEcB33dfF9faBE7653295E513c8" + }, + { + "type": "hexstring", + "value": "0x7f96310e3cde75692c22bf05aa8ce035bf" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2c61ad161238bcf92b0f62f80b9fee25ae7afd47d0f17e502e50" + }, + { + "type": "hexstring", + "value": "0x2306f2ba70e09c97087f93849bf4f87378d502bcae55068951e8" + }, + { + "type": "hexstring", + "value": "0x9c846fde7f7bed480fd405adb33e76f9bc487145cc301c86372a" + }, + { + "type": "hexstring", + "value": "0x362bc23a860f6e14760642a895114b88e3731016287ad86e078d" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x0253a90d12362656426aa9D9f0AfF1Dd101F59eb" + }, + { + "type": "hexstring", + "value": "0xf65034dbbd36c0977468dda09d9e60eff3" + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610911806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906107cc565b60405180910390f35b6100566105f3565b61005e6105f3565b60006040518060800160405280604b8152602001610891604b91398252506afddb86f32746d29698068560a81b60208201526b035799ac6c9a8865497ebd2760a41b60408201526100ad610634565b665242b73f40b70b60c91b81526100c261064a565b6100ca610677565b73779d508be1eef03c200410c433b568a8f5dc2b898152701563316c09918924cdb256bc4119007e4960791b602082015260408051600280825260608201909252600091816020016020820280368337505081519192507f2a5c9ff0e817e8f68a94151e302753a32a78ba02610b4e6536ab0000000000009182915083906000906101575761015761087a565b65ffffffffffff19909216602092830291909101909101525080517f3ea0092ac33b8a334b2772e8a216462bb35841ba2a16cefd869f000000000000908190839060019081106101a9576101a961087a565b65ffffffffffff19909216602092830291909101909101525060408201526101cf61069a565b60018082526020820152606082015281526101e8610677565b73e9bf7a03fdc296a66eba6c24baaf6cb89a72e40281527008ed305e84bd6ce87c74def6d8b9ee8977607b1b602082015260408051600480825260a08201909252600091816020016020820280368337505081519192507f1f90bf1bff7fd785fea4f19774558811e4804f9a9dc5acc9c86b0000000000009182915083906000906102755761027561087a565b65ffffffffffff19909216602092830291909101909101525080517f93b0f6ded3d2804277a2002a3fe2cb3da7694ae1b257fe63fef9000000000000908190839060019081106102c7576102c761087a565b65ffffffffffff19909216602092830291909101909101525080517f3457a7c3b4194fb774c654d3b0ef83dac271b11256f44f013833000000000000908190839060029081106103195761031961087a565b65ffffffffffff19909216602092830291909101909101525080517ff0d4889f0a2cd26ceb47290496e59125ea117967a4ef079c084e0000000000009081908390600390811061036b5761036b61087a565b65ffffffffffff199092166020928302919091019091015250604082015261039161069a565b60008152600160208083019190915260608301919091528201526103b3610677565b73023b1d7982ad4decb33dff9fabe7653295e513c88152707f96310e3cde75692c22bf05aa8ce035bf60781b602082015260408051600480825260a08201909252600091816020016020820280368337505081519192507f2c61ad161238bcf92b0f62f80b9fee25ae7afd47d0f17e502e500000000000009182915083906000906104405761044061087a565b65ffffffffffff19909216602092830291909101909101525080517f2306f2ba70e09c97087f93849bf4f87378d502bcae55068951e8000000000000908190839060019081106104925761049261087a565b65ffffffffffff19909216602092830291909101909101525080517f9c846fde7f7bed480fd405adb33e76f9bc487145cc301c86372a000000000000908190839060029081106104e4576104e461087a565b65ffffffffffff19909216602092830291909101909101525080517f362bc23a860f6e14760642a895114b88e3731016287ad86e078d000000000000908190839060039081106105365761053661087a565b65ffffffffffff199092166020928302919091019091015250604082015261055c61069a565b600181526000602082015260608201526040820152610579610677565b730253a90d12362656426aa9d9f0aff1dd101f59eb815270f65034dbbd36c0977468dda09d9e60eff360781b602080830191909152604080516000815291820181528201526105c661069a565b60008082526020808301919091526060838101929092528382019290925290830191909152820152919050565b60405180608001604052806060815260200160006001600160a81b031916815260200160006001600160a01b031916815260200161062f610634565b905290565b60408051808201909152600081526020810161062f5b60405180608001604052806004905b610661610677565b8152602001906001900390816106595790505090565b6040805160808101825260008082526020820152606091810182905290810161062f5b60405180604001604052806002906020820280368337509192915050565b8060005b60028110156106dd57815115158452602093840193909101906001016106bc565b50505050565b80516001600160c81b03191682526020808201516040828501819052600092909160c0919086840183880186805b60048110156107bd578a8303603f19018452845180516001600160a01b03168452868101516effffffffffffffffffffffffffffff1916878501528881015160a08a860181905281519086018190528986019189019085905b8082101561079357825165ffffffffffff19168452928a0192918a01916001919091019061076a565b505050606091820151916107a9868201846106b8565b509587019594870194935050600101610711565b50909998505050505050505050565b60006020808352835160808285015280518060a086015260005b818110156108025782810184015186820160c0015283016107e6565b8181111561081457600060c083880101525b509185015191601f01601f19168401905061083b60408501836001600160a81b0319169052565b60408501516001600160a01b03198116606086015291506060850151915060a084820301608085015261087160c08201836106e3565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804dc3a9f09f9a80f09f9a80c3a9f09f9a80204d6ff09f9a806f6ff09f9a80204d4df09f9a8020f09f9a80f09f9a80f09f9a80c3a94d4d6f4d6fc3a96fc3a94d4d6fa264697066735822122078be4035a7a7b45f77acc4a428b256f557e284a0a9b50a42d3b7de429f3b9da064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b18937e2 {\n address s_0;\n bytes17 s_1;\n bytes26[] s_2;\n bool[2] s_3;\n }\n\n struct S_349f5351 {\n bytes7 s_0;\n S_b18937e2[4] s_1;\n }\n\n struct S_5ea23101 {\n string s_0;\n bytes11 s_1;\n bytes12 s_2;\n S_349f5351 s_3;\n }\n\n function test () public pure returns (S_5ea23101 memory) {\n S_5ea23101 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀Mé🚀🚀é🚀 Mo🚀oo🚀 MM🚀 🚀🚀🚀éMMoMoéoéMMo\";\n r.s_0 = r_0;\n }\n {\n bytes11 r_1 = bytes11(0xfddb86f32746d296980685);\n r.s_1 = r_1;\n }\n {\n bytes12 r_2 = bytes12(0x35799ac6c9a8865497ebd270);\n r.s_2 = r_2;\n }\n {\n S_349f5351 memory r_3;\n {\n bytes7 r_3_0 = bytes7(0xa4856e7e816e16);\n r_3.s_0 = r_3_0;\n }\n {\n S_b18937e2[4] memory r_3_1;\n {\n S_b18937e2 memory r_3_1_0;\n {\n address r_3_1_0_0 = 0x779d508be1EeF03C200410C433b568a8F5DC2b89;\n r_3_1_0.s_0 = r_3_1_0_0;\n }\n {\n bytes17 r_3_1_0_1 = bytes17(0x2ac662d8132312499b64ad78823200fc92);\n r_3_1_0.s_1 = r_3_1_0_1;\n }\n {\n bytes26[] memory r_3_1_0_2 = new bytes26[](2);\n {\n bytes26 r_3_1_0_2_0 = bytes26(0x2a5c9ff0e817e8f68a94151e302753a32a78ba02610b4e6536ab);\n r_3_1_0_2[0] = r_3_1_0_2_0;\n }\n {\n bytes26 r_3_1_0_2_1 = bytes26(0x3ea0092ac33b8a334b2772e8a216462bb35841ba2a16cefd869f);\n r_3_1_0_2[1] = r_3_1_0_2_1;\n }\n r_3_1_0.s_2 = r_3_1_0_2;\n }\n {\n bool[2] memory r_3_1_0_3;\n {\n bool r_3_1_0_3_0 = true;\n r_3_1_0_3[0] = r_3_1_0_3_0;\n }\n {\n bool r_3_1_0_3_1 = true;\n r_3_1_0_3[1] = r_3_1_0_3_1;\n }\n r_3_1_0.s_3 = r_3_1_0_3;\n }\n r_3_1[0] = r_3_1_0;\n }\n {\n S_b18937e2 memory r_3_1_1;\n {\n address r_3_1_1_0 = 0xe9bf7A03fdC296a66EBA6c24bAaF6cB89a72e402;\n r_3_1_1.s_0 = r_3_1_1_0;\n }\n {\n bytes17 r_3_1_1_1 = bytes17(0x476982f425eb6743e3a6f7b6c5cf744bb8);\n r_3_1_1.s_1 = r_3_1_1_1;\n }\n {\n bytes26[] memory r_3_1_1_2 = new bytes26[](4);\n {\n bytes26 r_3_1_1_2_0 = bytes26(0x1f90bf1bff7fd785fea4f19774558811e4804f9a9dc5acc9c86b);\n r_3_1_1_2[0] = r_3_1_1_2_0;\n }\n {\n bytes26 r_3_1_1_2_1 = bytes26(0x93b0f6ded3d2804277a2002a3fe2cb3da7694ae1b257fe63fef9);\n r_3_1_1_2[1] = r_3_1_1_2_1;\n }\n {\n bytes26 r_3_1_1_2_2 = bytes26(0x3457a7c3b4194fb774c654d3b0ef83dac271b11256f44f013833);\n r_3_1_1_2[2] = r_3_1_1_2_2;\n }\n {\n bytes26 r_3_1_1_2_3 = bytes26(0xf0d4889f0a2cd26ceb47290496e59125ea117967a4ef079c084e);\n r_3_1_1_2[3] = r_3_1_1_2_3;\n }\n r_3_1_1.s_2 = r_3_1_1_2;\n }\n {\n bool[2] memory r_3_1_1_3;\n {\n bool r_3_1_1_3_0 = false;\n r_3_1_1_3[0] = r_3_1_1_3_0;\n }\n {\n bool r_3_1_1_3_1 = true;\n r_3_1_1_3[1] = r_3_1_1_3_1;\n }\n r_3_1_1.s_3 = r_3_1_1_3;\n }\n r_3_1[1] = r_3_1_1;\n }\n {\n S_b18937e2 memory r_3_1_2;\n {\n address r_3_1_2_0 = 0x023B1D7982Ad4dEcB33dfF9faBE7653295E513c8;\n r_3_1_2.s_0 = r_3_1_2_0;\n }\n {\n bytes17 r_3_1_2_1 = bytes17(0x7f96310e3cde75692c22bf05aa8ce035bf);\n r_3_1_2.s_1 = r_3_1_2_1;\n }\n {\n bytes26[] memory r_3_1_2_2 = new bytes26[](4);\n {\n bytes26 r_3_1_2_2_0 = bytes26(0x2c61ad161238bcf92b0f62f80b9fee25ae7afd47d0f17e502e50);\n r_3_1_2_2[0] = r_3_1_2_2_0;\n }\n {\n bytes26 r_3_1_2_2_1 = bytes26(0x2306f2ba70e09c97087f93849bf4f87378d502bcae55068951e8);\n r_3_1_2_2[1] = r_3_1_2_2_1;\n }\n {\n bytes26 r_3_1_2_2_2 = bytes26(0x9c846fde7f7bed480fd405adb33e76f9bc487145cc301c86372a);\n r_3_1_2_2[2] = r_3_1_2_2_2;\n }\n {\n bytes26 r_3_1_2_2_3 = bytes26(0x362bc23a860f6e14760642a895114b88e3731016287ad86e078d);\n r_3_1_2_2[3] = r_3_1_2_2_3;\n }\n r_3_1_2.s_2 = r_3_1_2_2;\n }\n {\n bool[2] memory r_3_1_2_3;\n {\n bool r_3_1_2_3_0 = true;\n r_3_1_2_3[0] = r_3_1_2_3_0;\n }\n {\n bool r_3_1_2_3_1 = false;\n r_3_1_2_3[1] = r_3_1_2_3_1;\n }\n r_3_1_2.s_3 = r_3_1_2_3;\n }\n r_3_1[2] = r_3_1_2;\n }\n {\n S_b18937e2 memory r_3_1_3;\n {\n address r_3_1_3_0 = 0x0253a90d12362656426aa9D9f0AfF1Dd101F59eb;\n r_3_1_3.s_0 = r_3_1_3_0;\n }\n {\n bytes17 r_3_1_3_1 = bytes17(0xf65034dbbd36c0977468dda09d9e60eff3);\n r_3_1_3.s_1 = r_3_1_3_1;\n }\n {\n bytes26[] memory r_3_1_3_2 = new bytes26[](0);\n r_3_1_3.s_2 = r_3_1_3_2;\n }\n {\n bool[2] memory r_3_1_3_3;\n {\n bool r_3_1_3_3_0 = false;\n r_3_1_3_3[0] = r_3_1_3_3_0;\n }\n {\n bool r_3_1_3_3_1 = false;\n r_3_1_3_3[1] = r_3_1_3_3_1;\n }\n r_3_1_3.s_3 = r_3_1_3_3;\n }\n r_3_1[3] = r_3_1_3;\n }\n r_3.s_1 = r_3_1;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080fddb86f32746d29698068500000000000000000000000000000000000000000035799ac6c9a8865497ebd27000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a804dc3a9f09f9a80f09f9a80c3a9f09f9a80204d6ff09f9a806f6ff09f9a80204d4df09f9a8020f09f9a80f09f9a80f09f9a80c3a94d4d6f4d6fc3a96fc3a94d4d6f000000000000000000000000000000000000000000a4856e7e816e160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000779d508be1eef03c200410c433b568a8f5dc2b892ac662d8132312499b64ad78823200fc9200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000022a5c9ff0e817e8f68a94151e302753a32a78ba02610b4e6536ab0000000000003ea0092ac33b8a334b2772e8a216462bb35841ba2a16cefd869f000000000000000000000000000000000000e9bf7a03fdc296a66eba6c24baaf6cb89a72e402476982f425eb6743e3a6f7b6c5cf744bb800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000041f90bf1bff7fd785fea4f19774558811e4804f9a9dc5acc9c86b00000000000093b0f6ded3d2804277a2002a3fe2cb3da7694ae1b257fe63fef90000000000003457a7c3b4194fb774c654d3b0ef83dac271b11256f44f013833000000000000f0d4889f0a2cd26ceb47290496e59125ea117967a4ef079c084e000000000000000000000000000000000000023b1d7982ad4decb33dff9fabe7653295e513c87f96310e3cde75692c22bf05aa8ce035bf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042c61ad161238bcf92b0f62f80b9fee25ae7afd47d0f17e502e500000000000002306f2ba70e09c97087f93849bf4f87378d502bcae55068951e80000000000009c846fde7f7bed480fd405adb33e76f9bc487145cc301c86372a000000000000362bc23a860f6e14760642a895114b88e3731016287ad86e078d0000000000000000000000000000000000000253a90d12362656426aa9d9f0aff1dd101f59ebf65034dbbd36c0977468dda09d9e60eff300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string[4],(address[4],int16,string,address,bool[]),string,bytes17)", + "type": "(string[4],(address[4],int16,string,address,bool[]),string,bytes17)", + "value": [ + [ + "Moo é🚀M MMM o", + "Moo é🚀M Moooééooooéoé🚀oM o o🚀é ooooéooMooooéoé oéMé🚀o🚀Mo", + "Moo é🚀oMéMo🚀 🚀MoMo🚀ééooo", + "Moo é🚀 éoM🚀o🚀 🚀é🚀oéMMo oMéo MMooooo éooooo" + ], + [ + [ + "0x62557325a8Aa36C4b8063a062C1589E5F6930709", + "0x1E186fa11c8364689aB6dD6d73C0B97ebE7AA7DD", + "0x10DafeB44858EacFff8BFfea62eC9B0c88504433", + "0xC9D67dA168131348B2Cb6fDfadc1c2869aE1B799" + ], + "32647", + "Moo é🚀o🚀M MMéoo MéM o é M🚀 oo ééoo🚀éé🚀🚀oMooo🚀 o oMéoMéoo🚀Moé", + "0x02Cb3D234A91Bb8FdCBb40f6BF83e23F19419A23", + [true] + ], + "Moo é🚀é é", + "0xdd3f23674b7e07829fe5899f5b75c104f0" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀M MMM o" + }, + { + "type": "string", + "value": "Moo é🚀M Moooééooooéoé🚀oM o o🚀é ooooéooMooooéoé oéMé🚀o🚀Mo" + }, + { + "type": "string", + "value": "Moo é🚀oMéMo🚀 🚀MoMo🚀ééooo" + }, + { + "type": "string", + "value": "Moo é🚀 éoM🚀o🚀 🚀é🚀oéMMo oMéo MMooooo éooooo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x62557325a8Aa36C4b8063a062C1589E5F6930709" + }, + { + "type": "address", + "value": "0x1E186fa11c8364689aB6dD6d73C0B97ebE7AA7DD" + }, + { + "type": "address", + "value": "0x10DafeB44858EacFff8BFfea62eC9B0c88504433" + }, + { + "type": "address", + "value": "0xC9D67dA168131348B2Cb6fDfadc1c2869aE1B799" + } + ] + }, + { + "type": "number", + "value": "32647" + }, + { + "type": "string", + "value": "Moo é🚀o🚀M MMéoo MéM o é M🚀 oo ééoo🚀éé🚀🚀oMooo🚀 o oMéoMéoo🚀Moé" + }, + { + "type": "address", + "value": "0x02Cb3D234A91Bb8FdCBb40f6BF83e23F19419A23" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀é é" + }, + { + "type": "hexstring", + "value": "0xdd3f23674b7e07829fe5899f5b75c104f0" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061066c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061044e565b60405180910390f35b610056610269565b61005e610269565b61006661029d565b60408051808201825260118152704d6f6f20c3a9f09f9a804d204d4d4d206f60781b60208083019190915290835281516080810190925260548083526000929161057c90830139905080826001602002018190525050600060405180606001604052806028815260200161060f60289139604080840191909152805160608101909152603f808252600092506105d06020830139606083015250815261010a6102c4565b610112610305565b7362557325a8aa36c4b8063a062c1589e5f69307098152731e186fa11c8364689ab6dd6d73c0b97ebe7aa7dd6020808301919091527310dafeb44858eacfff8bffea62ec9b0c8850443360408084019190915273c9d67da168131348b2cb6fdfadc1c2869ae1b7996060840152918352617f8783820152815160808101909252605f8083526000929161051d908301396040838101919091527302cb3d234a91bb8fdcbb40f6bf83e23f19419a23606084015280516001808252818301909252600092509060208083019080368337019050509050600060019050808260008151811061020157610201610506565b91151560209283029190910182015260808401929092525082810191909152604080518082018252600f81526e4d6f6f20c3a9f09f9a80c3a920c3a960881b92810192909252820152700dd3f23674b7e07829fe5899f5b75c104f607c1b6060820152919050565b604051806080016040528061027c61029d565b81526020016102896102c4565b815260606020820152600060409091015290565b60405180608001604052806004905b60608152602001906001900390816102ac5790505090565b6040518060a001604052806102d7610305565b8152602001600060010b81526020016060815260200160006001600160a01b03168152602001606081525090565b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b818110156103495760208185018101518683018201520161032d565b8181111561035b576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b838110156103a2578151151587529582019590820190600101610384565b509495945050505050565b80516000906101009084835b60048110156103e15782516001600160a01b03168252602092830192909101906001016103b9565b50505060208301516103f8608086018260010b9052565b5060408301518160a086015261041082860182610323565b915050606083015161042d60c08601826001600160a01b03169052565b50608083015184820360e08601526104458282610370565b95945050505050565b602080825282516080838301526000919061012084019060a08501845b600481101561049a57609f19878503018252610488848451610323565b9350918401919084019060010161046b565b505050818501519150601f19808583030160408601526104ba82846103ad565b92506040860151915080858403016060860152506104d88282610323565b91505060608401516104fe60808501826effffffffffffffffffffffffffffff19169052565b509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806ff09f9a804d204d4dc3a96f6f204dc3a94d206f20c3a9204df09f9a80206f6f20c3a9c3a96f6ff09f9a80c3a9c3a9f09f9a80f09f9a806f4d6f6f6ff09f9a80206f206f4dc3a96f4dc3a96f6ff09f9a804d6fc3a94d6f6f20c3a9f09f9a804d204d6f6f6fc3a9c3a96f6f6f6fc3a96fc3a9f09f9a806f4d206f206ff09f9a80c3a920206f6f6f6fc3a96f6f4d6f6f6f6fc3a96fc3a920206fc3a94dc3a9f09f9a806ff09f9a804d6f4d6f6f20c3a9f09f9a8020c3a96f4df09f9a806ff09f9a8020f09f9a80c3a9f09f9a806fc3a94d4d6f206f4dc3a96f204d4d6f6f6f6f6f20c3a96f6f6f6f6f4d6f6f20c3a9f09f9a806f4dc3a94d6ff09f9a8020f09f9a804d6f4d6ff09f9a80c3a9c3a96f6f6fa26469706673582212204ca23b197a8b53134f4219c7e438d7c721be1442ff280d37ec277458f475df6964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ef62c53d {\n address[4] s_0;\n int16 s_1;\n string s_2;\n address s_3;\n bool[] s_4;\n }\n\n struct S_db218672 {\n string[4] s_0;\n S_ef62c53d s_1;\n string s_2;\n bytes17 s_3;\n }\n\n function test () public pure returns (S_db218672 memory) {\n S_db218672 memory r;\n {\n string[4] memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀M MMM o\";\n r_0[0] = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀M Moooééooooéoé🚀oM o o🚀é ooooéooMooooéoé oéMé🚀o🚀Mo\";\n r_0[1] = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀oMéMo🚀 🚀MoMo🚀ééooo\";\n r_0[2] = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀 éoM🚀o🚀 🚀é🚀oéMMo oMéo MMooooo éooooo\";\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n S_ef62c53d memory r_1;\n {\n address[4] memory r_1_0;\n {\n address r_1_0_0 = 0x62557325a8Aa36C4b8063a062C1589E5F6930709;\n r_1_0[0] = r_1_0_0;\n }\n {\n address r_1_0_1 = 0x1E186fa11c8364689aB6dD6d73C0B97ebE7AA7DD;\n r_1_0[1] = r_1_0_1;\n }\n {\n address r_1_0_2 = 0x10DafeB44858EacFff8BFfea62eC9B0c88504433;\n r_1_0[2] = r_1_0_2;\n }\n {\n address r_1_0_3 = 0xC9D67dA168131348B2Cb6fDfadc1c2869aE1B799;\n r_1_0[3] = r_1_0_3;\n }\n r_1.s_0 = r_1_0;\n }\n {\n int16 r_1_1 = 32647;\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀o🚀M MMéoo MéM o é M🚀 oo ééoo🚀éé🚀🚀oMooo🚀 o oMéoMéoo🚀Moé\";\n r_1.s_2 = r_1_2;\n }\n {\n address r_1_3 = 0x02Cb3D234A91Bb8FdCBb40f6BF83e23F19419A23;\n r_1.s_3 = r_1_3;\n }\n {\n bool[] memory r_1_4 = new bool[](1);\n {\n bool r_1_4_0 = true;\n r_1_4[0] = r_1_4_0;\n }\n r_1.s_4 = r_1_4;\n }\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀é é\";\n r.s_2 = r_2;\n }\n {\n bytes17 r_3 = bytes17(0xdd3f23674b7e07829fe5899f5b75c104f0);\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000440dd3f23674b7e07829fe5899f5b75c104f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a804d204d4d4d206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a804d204d6f6f6fc3a9c3a96f6f6f6fc3a96fc3a9f09f9a806f4d206f206ff09f9a80c3a920206f6f6f6fc3a96f6f4d6f6f6f6fc3a96fc3a920206fc3a94dc3a9f09f9a806ff09f9a804d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000284d6f6f20c3a9f09f9a806f4dc3a94d6ff09f9a8020f09f9a804d6f4d6ff09f9a80c3a9c3a96f6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a8020c3a96f4df09f9a806ff09f9a8020f09f9a80c3a9f09f9a806fc3a94d4d6f206f4dc3a96f204d4d6f6f6f6f6f20c3a96f6f6f6f6f0000000000000000000000000062557325a8aa36c4b8063a062c1589e5f69307090000000000000000000000001e186fa11c8364689ab6dd6d73c0b97ebe7aa7dd00000000000000000000000010dafeb44858eacfff8bffea62ec9b0c88504433000000000000000000000000c9d67da168131348b2cb6fdfadc1c2869ae1b7990000000000000000000000000000000000000000000000000000000000007f87000000000000000000000000000000000000000000000000000000000000010000000000000000000000000002cb3d234a91bb8fdcbb40f6bf83e23f19419a230000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000005f4d6f6f20c3a9f09f9a806ff09f9a804d204d4dc3a96f6f204dc3a94d206f20c3a9204df09f9a80206f6f20c3a9c3a96f6ff09f9a80c3a9c3a9f09f9a80f09f9a806f4d6f6f6ff09f9a80206f206f4dc3a96f4dc3a96f6ff09f9a804d6fc3a90000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a80c3a920c3a90000000000000000000000000000000000" + }, + { + "name": "random-(((bool,uint112[2],string),string,bytes1,bool[1],bytes32),bool,bytes9)[4]", + "type": "(((bool,uint112[2],string),string,bytes1,bool[1],bytes32),bool,bytes9)[4]", + "value": [ + [ + [ + [ + false, + [ + "1524743065659751003181002726779991", + "2304995672955559947592275229386344" + ], + "Moo é🚀o🚀" + ], + "Moo é🚀 oééMoooé oMMooo🚀MoMMM🚀éé éé oé", + "0xef", + [true], + "0xb4546181da7adbdfa821f7b068e4aade9a8ba432524fd04b290dacba7bd6da6b" + ], + true, + "0x91d627c27c59abcd55" + ], + [ + [ + [ + true, + [ + "2193032221931312744498652777456888", + "4539594797478879932990022069986571" + ], + "Moo é🚀éo🚀ooo oooMo🚀o🚀" + ], + "Moo é🚀MoéoMoMMMoé 🚀ooooéoo", + "0x66", + [true], + "0x328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd41" + ], + true, + "0xd1c5904c1676b9a3ca" + ], + [ + [ + [ + false, + ["597474868964284695740190723126164", "1602494145763489996048063486089087"], + "Moo é🚀" + ], + "Moo é🚀M éMo🚀 M ooéo🚀🚀 MM 🚀M🚀MoéM 🚀M MMM é🚀🚀éM🚀🚀ooMéooMo", + "0x37", + [false], + "0x83ee6960ccd77d8ef4483783d79d5721de907a490a78a7c3bc87f47e7cd7aac1" + ], + true, + "0xa093601cc9a7219c91" + ], + [ + [ + [ + true, + [ + "1976019007855734913493630404751134", + "4821591390761240086920764850975974" + ], + "Moo é🚀o🚀oo Moo🚀éoéMéoM🚀🚀 oMo oéééo🚀🚀o🚀 oéoo o 🚀M ooMooo " + ], + "Moo é🚀MMé MoMoo 🚀 M éé oo oM éoéooééééoo🚀 oo🚀", + "0x97", + [false], + "0x7c337b937f57bda5cc1f7ea3bd895bc276087e225b156f214579f1fc3bb4df4c" + ], + false, + "0x4803d6bcc535142e38" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1524743065659751003181002726779991" + }, + { + "type": "number", + "value": "2304995672955559947592275229386344" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 oééMoooé oMMooo🚀MoMMM🚀éé éé oé" + }, + { + "type": "hexstring", + "value": "0xef" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0xb4546181da7adbdfa821f7b068e4aade9a8ba432524fd04b290dacba7bd6da6b" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x91d627c27c59abcd55" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "2193032221931312744498652777456888" + }, + { + "type": "number", + "value": "4539594797478879932990022069986571" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éo🚀ooo oooMo🚀o🚀" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀MoéoMoMMMoé 🚀ooooéoo" + }, + { + "type": "hexstring", + "value": "0x66" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd41" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xd1c5904c1676b9a3ca" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "597474868964284695740190723126164" + }, + { + "type": "number", + "value": "1602494145763489996048063486089087" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M éMo🚀 M ooéo🚀🚀 MM 🚀M🚀MoéM 🚀M MMM é🚀🚀éM🚀🚀ooMéooMo" + }, + { + "type": "hexstring", + "value": "0x37" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x83ee6960ccd77d8ef4483783d79d5721de907a490a78a7c3bc87f47e7cd7aac1" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xa093601cc9a7219c91" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1976019007855734913493630404751134" + }, + { + "type": "number", + "value": "4821591390761240086920764850975974" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀oo Moo🚀éoéMéoM🚀🚀 oMo oéééo🚀🚀o🚀 oéoo o 🚀M ooMooo " + } + ] + }, + { + "type": "string", + "value": "Moo é🚀MMé MoMoo 🚀 M éé oo oM éoéooééééoo🚀 oo🚀" + }, + { + "type": "hexstring", + "value": "0x97" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x7c337b937f57bda5cc1f7ea3bd895bc276087e225b156f214579f1fc3bb4df4c" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x4803d6bcc535142e38" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506108ad806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906105ca565b60405180910390f35b61005661045e565b61005e61045e565b61006661048b565b61006e6104b2565b6100766104ed565b60008152610082610516565b6d4b2cf68f09d5822c2a1f46cb2c5781526d71a522b4affd44ca5257b72fa66860208083019190915282810191909152604080518082018252600f81526d9adede418753e13f3500dfe13f35608f1b81840152818401529183528151606081019092526037808352600092916108419083013960208301525060ef60f81b604082015261010d610534565b600180825260608301919091527fb4546181da7adbdfa821f7b068e4aade9a8ba432524fd04b290dacba7bd6da6b608083015290825260208201526891d627c27c59abcd5560b81b6040820152815261016461048b565b61016c6104b2565b6101746104ed565b60018152610180610516565b6d6c1ff548af881be7a390654ea4f881526ddfd1bde55234c1ec554a1893250b602080830191909152828101919091526040805160608101909152602380825260009261081e90830139604080840191909152918352508051606081019091526024808252600091906107fa6020830139602083015250603360f91b6040820152610209610534565b600180825260608301919091527f328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd4160808301529082526020828101919091526868e2c8260b3b5cd1e560b91b604083015282015261026561048b565b61026d6104b2565b6102756104ed565b60008152610281610516565b6d1d75316c184c7a4fea2f2573b39481526d4f0251d91af3ec5af25d6131d77f60208083019190915282810191909152604080518082018252600a8152689adede418753e13f3560b71b8184015281840152918352815160a081019092526061808352600092916106f690830139602083015250603760f81b6040820152610307610534565b6000815260608201527f83ee6960ccd77d8ef4483783d79d5721de907a490a78a7c3bc87f47e7cd7aac1608082015281526001602082015268a093601cc9a7219c9160b81b60408083019190915282015261036061048b565b6103686104b2565b6103706104ed565b6001815261037c610516565b6d616cddc555a3f13a1fb508f36f1e81526dedb90a08171d0fce529f75ec34e6602080830191909152828101919091526040805160808101909152605e80825260009261079c90830139604080840191909152918352508051608081019091526045808252600091906107576020830139602083015250609760f81b6040820152610405610534565b60008082526060838101929092527f7c337b937f57bda5cc1f7ea3bd895bc276087e225b156f214579f1fc3bb4df4c608084015291835260208301919091526809007ad798a6a285c760bb1b6040830152820152919050565b60405180608001604052806004905b61047561048b565b81526020019060019003908161046d5790505090565b604051806060016040528061049e6104b2565b815260006020820181905260409091015290565b6040518060a001604052806104c56104ed565b815260606020820181905260006040830152016104e0610534565b8152600060209091015290565b6040518060600160405280600015158152602001610509610516565b8152602001606081525090565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b818110156105785760208185018101518683018201520161055c565b8181111561058a576000602083870101525b50601f01601f19169290920160200192915050565b8060005b60018110156105c457815115158452602093840193909101906001016105a3565b50505050565b602080825260009060a08382018185018685805b60048110156106e757601f1989850301855282516060815181875280518983890152805115156101008901528a8101516101208901875b60028110156106425782516dffffffffffffffffffffffffffff168252918d0191908d0190600101610615565b50505060408082015191506080806101608b01526106646101808b0184610552565b92508c840151605f198b850301828c015261067f8482610552565b9350508184015161069b8d8c01826001600160f81b0319169052565b5093830151936106ae60c08b018661059f565b9092015160e0890152838b015115158b890152928101516001600160b81b031916960195909552948701949350918601916001016105de565b50919897505050505050505056fe4d6f6f20c3a9f09f9a804d20c3a94d6ff09f9a80204d20206f6fc3a96ff09f9a80f09f9a80204d4d2020f09f9a804df09f9a804d6fc3a94d20f09f9a804d204d4d4d20c3a9f09f9a80f09f9a80c3a94df09f9a80f09f9a806f6f4dc3a96f6f4d6f4d6f6f20c3a9f09f9a804d4dc3a9204d6f4d6f6f20f09f9a80204d2020c3a9c3a9206f6f206f4d20c3a96fc3a96f6fc3a9c3a9c3a9c3a96f6ff09f9a8020206f6ff09f9a804d6f6f20c3a9f09f9a806ff09f9a806f6f204d6f6ff09f9a80c3a96fc3a94dc3a96f4df09f9a80f09f9a80206f4d6f206fc3a9c3a9c3a96ff09f9a80f09f9a806ff09f9a8020206fc3a96f6f206f20f09f9a804d2020206f6f4d6f6f6f204d6f6f20c3a9f09f9a804d6fc3a96f4d6f4d4d4d6fc3a920f09f9a806f6f6f6fc3a96f6f4d6f6f20c3a9f09f9a80c3a96ff09f9a806f6f6f206f6f6f4d6ff09f9a806ff09f9a804d6f6f20c3a9f09f9a80206fc3a9c3a94d6f6f6fc3a9206f4d4d6f6f6ff09f9a804d6f4d4d4df09f9a80c3a9c3a920c3a9c3a9206fc3a9a26469706673582212203a1f133693bbc077fb2e10b86fd57aa69fe422c9596bd2b59b2d0c5291bead7c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2dff1de4 {\n bool s_0;\n uint112[2] s_1;\n string s_2;\n }\n\n struct S_712d7f10 {\n S_2dff1de4 s_0;\n string s_1;\n bytes1 s_2;\n bool[1] s_3;\n bytes32 s_4;\n }\n\n struct S_ac9e1130 {\n S_712d7f10 s_0;\n bool s_1;\n bytes9 s_2;\n }\n\n function test () public pure returns (S_ac9e1130[4] memory) {\n S_ac9e1130[4] memory r;\n {\n S_ac9e1130 memory r_0;\n {\n S_712d7f10 memory r_0_0;\n {\n S_2dff1de4 memory r_0_0_0;\n {\n bool r_0_0_0_0 = false;\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n uint112[2] memory r_0_0_0_1;\n {\n uint112 r_0_0_0_1_0 = 1524743065659751003181002726779991;\n r_0_0_0_1[0] = r_0_0_0_1_0;\n }\n {\n uint112 r_0_0_0_1_1 = 2304995672955559947592275229386344;\n r_0_0_0_1[1] = r_0_0_0_1_1;\n }\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n string memory r_0_0_0_2 = unicode\"Moo é🚀o🚀\";\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n string memory r_0_0_1 = unicode\"Moo é🚀 oééMoooé oMMooo🚀MoMMM🚀éé éé oé\";\n r_0_0.s_1 = r_0_0_1;\n }\n {\n bytes1 r_0_0_2 = bytes1(0xef);\n r_0_0.s_2 = r_0_0_2;\n }\n {\n bool[1] memory r_0_0_3;\n {\n bool r_0_0_3_0 = true;\n r_0_0_3[0] = r_0_0_3_0;\n }\n r_0_0.s_3 = r_0_0_3;\n }\n {\n bytes32 r_0_0_4 = bytes32(0xb4546181da7adbdfa821f7b068e4aade9a8ba432524fd04b290dacba7bd6da6b);\n r_0_0.s_4 = r_0_0_4;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0.s_1 = r_0_1;\n }\n {\n bytes9 r_0_2 = bytes9(0x91d627c27c59abcd55);\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_ac9e1130 memory r_1;\n {\n S_712d7f10 memory r_1_0;\n {\n S_2dff1de4 memory r_1_0_0;\n {\n bool r_1_0_0_0 = true;\n r_1_0_0.s_0 = r_1_0_0_0;\n }\n {\n uint112[2] memory r_1_0_0_1;\n {\n uint112 r_1_0_0_1_0 = 2193032221931312744498652777456888;\n r_1_0_0_1[0] = r_1_0_0_1_0;\n }\n {\n uint112 r_1_0_0_1_1 = 4539594797478879932990022069986571;\n r_1_0_0_1[1] = r_1_0_0_1_1;\n }\n r_1_0_0.s_1 = r_1_0_0_1;\n }\n {\n string memory r_1_0_0_2 = unicode\"Moo é🚀éo🚀ooo oooMo🚀o🚀\";\n r_1_0_0.s_2 = r_1_0_0_2;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n string memory r_1_0_1 = unicode\"Moo é🚀MoéoMoMMMoé 🚀ooooéoo\";\n r_1_0.s_1 = r_1_0_1;\n }\n {\n bytes1 r_1_0_2 = bytes1(0x66);\n r_1_0.s_2 = r_1_0_2;\n }\n {\n bool[1] memory r_1_0_3;\n {\n bool r_1_0_3_0 = true;\n r_1_0_3[0] = r_1_0_3_0;\n }\n r_1_0.s_3 = r_1_0_3;\n }\n {\n bytes32 r_1_0_4 = bytes32(0x328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd41);\n r_1_0.s_4 = r_1_0_4;\n }\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1.s_1 = r_1_1;\n }\n {\n bytes9 r_1_2 = bytes9(0xd1c5904c1676b9a3ca);\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_ac9e1130 memory r_2;\n {\n S_712d7f10 memory r_2_0;\n {\n S_2dff1de4 memory r_2_0_0;\n {\n bool r_2_0_0_0 = false;\n r_2_0_0.s_0 = r_2_0_0_0;\n }\n {\n uint112[2] memory r_2_0_0_1;\n {\n uint112 r_2_0_0_1_0 = 597474868964284695740190723126164;\n r_2_0_0_1[0] = r_2_0_0_1_0;\n }\n {\n uint112 r_2_0_0_1_1 = 1602494145763489996048063486089087;\n r_2_0_0_1[1] = r_2_0_0_1_1;\n }\n r_2_0_0.s_1 = r_2_0_0_1;\n }\n {\n string memory r_2_0_0_2 = unicode\"Moo é🚀\";\n r_2_0_0.s_2 = r_2_0_0_2;\n }\n r_2_0.s_0 = r_2_0_0;\n }\n {\n string memory r_2_0_1 = unicode\"Moo é🚀M éMo🚀 M ooéo🚀🚀 MM 🚀M🚀MoéM 🚀M MMM é🚀🚀éM🚀🚀ooMéooMo\";\n r_2_0.s_1 = r_2_0_1;\n }\n {\n bytes1 r_2_0_2 = bytes1(0x37);\n r_2_0.s_2 = r_2_0_2;\n }\n {\n bool[1] memory r_2_0_3;\n {\n bool r_2_0_3_0 = false;\n r_2_0_3[0] = r_2_0_3_0;\n }\n r_2_0.s_3 = r_2_0_3;\n }\n {\n bytes32 r_2_0_4 = bytes32(0x83ee6960ccd77d8ef4483783d79d5721de907a490a78a7c3bc87f47e7cd7aac1);\n r_2_0.s_4 = r_2_0_4;\n }\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2.s_1 = r_2_1;\n }\n {\n bytes9 r_2_2 = bytes9(0xa093601cc9a7219c91);\n r_2.s_2 = r_2_2;\n }\n r[2] = r_2;\n }\n {\n S_ac9e1130 memory r_3;\n {\n S_712d7f10 memory r_3_0;\n {\n S_2dff1de4 memory r_3_0_0;\n {\n bool r_3_0_0_0 = true;\n r_3_0_0.s_0 = r_3_0_0_0;\n }\n {\n uint112[2] memory r_3_0_0_1;\n {\n uint112 r_3_0_0_1_0 = 1976019007855734913493630404751134;\n r_3_0_0_1[0] = r_3_0_0_1_0;\n }\n {\n uint112 r_3_0_0_1_1 = 4821591390761240086920764850975974;\n r_3_0_0_1[1] = r_3_0_0_1_1;\n }\n r_3_0_0.s_1 = r_3_0_0_1;\n }\n {\n string memory r_3_0_0_2 = unicode\"Moo é🚀o🚀oo Moo🚀éoéMéoM🚀🚀 oMo oéééo🚀🚀o🚀 oéoo o 🚀M ooMooo \";\n r_3_0_0.s_2 = r_3_0_0_2;\n }\n r_3_0.s_0 = r_3_0_0;\n }\n {\n string memory r_3_0_1 = unicode\"Moo é🚀MMé MoMoo 🚀 M éé oo oM éoéooééééoo🚀 oo🚀\";\n r_3_0.s_1 = r_3_0_1;\n }\n {\n bytes1 r_3_0_2 = bytes1(0x97);\n r_3_0.s_2 = r_3_0_2;\n }\n {\n bool[1] memory r_3_0_3;\n {\n bool r_3_0_3_0 = false;\n r_3_0_3[0] = r_3_0_3_0;\n }\n r_3_0.s_3 = r_3_0_3;\n }\n {\n bytes32 r_3_0_4 = bytes32(0x7c337b937f57bda5cc1f7ea3bd895bc276087e225b156f214579f1fc3bb4df4c);\n r_3_0.s_4 = r_3_0_4;\n }\n r_3.s_0 = r_3_0;\n }\n {\n bool r_3_1 = false;\n r_3.s_1 = r_3_1;\n }\n {\n bytes9 r_3_2 = bytes9(0x4803d6bcc535142e38);\n r_3.s_2 = r_3_2;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000007400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000191d627c27c59abcd55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000160ef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4546181da7adbdfa821f7b068e4aade9a8ba432524fd04b290dacba7bd6da6b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b2cf68f09d5822c2a1f46cb2c5700000000000000000000000000000000000071a522b4affd44ca5257b72fa6680000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a806ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a80206fc3a9c3a94d6f6f6fc3a9206f4d4d6f6f6ff09f9a804d6f4d4d4df09f9a80c3a9c3a920c3a9c3a9206fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001d1c5904c1676b9a3ca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000018066000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd4100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000006c1ff548af881be7a390654ea4f8000000000000000000000000000000000000dfd1bde55234c1ec554a1893250b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a80c3a96ff09f9a806f6f6f206f6f6f4d6ff09f9a806ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000244d6f6f20c3a9f09f9a804d6fc3a96f4d6f4d4d4d6fc3a920f09f9a806f6f6f6fc3a96f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001a093601cc9a7219c91000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001603700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083ee6960ccd77d8ef4483783d79d5721de907a490a78a7c3bc87f47e7cd7aac100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d75316c184c7a4fea2f2573b3940000000000000000000000000000000000004f0251d91af3ec5af25d6131d77f0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a804d20c3a94d6ff09f9a80204d20206f6fc3a96ff09f9a80f09f9a80204d4d2020f09f9a804df09f9a804d6fc3a94d20f09f9a804d204d4d4d20c3a9f09f9a80f09f9a80c3a94df09f9a80f09f9a806f6f4dc3a96f6f4d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000004803d6bcc535142e38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001a0970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c337b937f57bda5cc1f7ea3bd895bc276087e225b156f214579f1fc3bb4df4c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000616cddc555a3f13a1fb508f36f1e000000000000000000000000000000000000edb90a08171d0fce529f75ec34e60000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a806ff09f9a806f6f204d6f6ff09f9a80c3a96fc3a94dc3a96f4df09f9a80f09f9a80206f4d6f206fc3a9c3a9c3a96ff09f9a80f09f9a806ff09f9a8020206fc3a96f6f206f20f09f9a804d2020206f6f4d6f6f6f20000000000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a804d4dc3a9204d6f4d6f6f20f09f9a80204d2020c3a9c3a9206f6f206f4d20c3a96fc3a96f6fc3a9c3a9c3a9c3a96f6ff09f9a8020206f6ff09f9a80000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((address,address[1]),(uint112,(string,address,address,uint184,bytes4),string,bool),uint240)", + "type": "((address,address[1]),(uint112,(string,address,address,uint184,bytes4),string,bool),uint240)", + "value": [ + [ + "0xAD19FaDF81A15d0837E38DDcC587eBDF1296DB8e", + ["0xA28a9239812CDe273c9B3AB871D6529865C288a0"] + ], + [ + "2789240170870581534885721673351500", + [ + "Moo é🚀 M🚀oéé éooo🚀🚀 🚀éoM🚀 oM🚀🚀oMo🚀éo M ééM🚀M 🚀oooooooééo", + "0x2c13E4C5a8Bf8a2771c36368374c448F37a43768", + "0x410Daaf3A26F65CFB733B44e31d0855ac2B2b8Bc", + "12726693198414424396038837673065339712036485956547019958", + "0xf5b55100" + ], + "Moo é🚀🚀🚀éoMoo🚀Mo🚀éoo é o🚀M éMéoMoM o ", + true + ], + "1680834534767936496981263258330137788751777961886160992532481400896987555" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xAD19FaDF81A15d0837E38DDcC587eBDF1296DB8e" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xA28a9239812CDe273c9B3AB871D6529865C288a0" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2789240170870581534885721673351500" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 M🚀oéé éooo🚀🚀 🚀éoM🚀 oM🚀🚀oMo🚀éo M ééM🚀M 🚀oooooooééo" + }, + { + "type": "address", + "value": "0x2c13E4C5a8Bf8a2771c36368374c448F37a43768" + }, + { + "type": "address", + "value": "0x410Daaf3A26F65CFB733B44e31d0855ac2B2b8Bc" + }, + { + "type": "number", + "value": "12726693198414424396038837673065339712036485956547019958" + }, + { + "type": "hexstring", + "value": "0xf5b55100" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀éoMoo🚀Mo🚀éoo é o🚀M éMéoMoM o " + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "number", + "value": "1680834534767936496981263258330137788751777961886160992532481400896987555" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104d5806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102da565b60405180910390f35b6100566101cd565b61005e6101cd565b6100666101fa565b73ad19fadf81a15d0837e38ddcc587ebdf1296db8e8152610085610222565b73a28a9239812cde273c9b3ab871d6529865c288a08152602082015281526100ab610240565b6d898529111926347fc7d9ff78c14c81526040805160a08101825260608082526000602083018190529282018390528101829052608081019190915260006040518060a001604052806064815260200161043c60649139825250732c13e4c5a8bf8a2771c36368374c448f37a4376860208083019190915273410daaf3a26f65cfb733b44e31d0855ac2b2b8bc6040808401919091527684df74da5be1182d5880e1b6b310093510340b244684b660608085019190915262f5b55160e81b60808501528483019390935280519283019052603d808352600092916103ff90830139604080840191909152600160608401526020840192909252507df3899e31bdbfd360b0ccc4fe8464447b93c8d6dae86adb5435f77377a1a390820152919050565b60405180606001604052806101e06101fa565b81526020016101ed610240565b8152600060209091015290565b604051806040016040528060006001600160a01b0316815260200161021d610222565b905290565b60405180602001604052806001906020820280368337509192915050565b60408051608080820183526000808352835160a081018552606080825260208281018490529582018390528101829052918201529091820190815260606020820152600060409091015290565b6000815180845260005b818110156102b357602081850181015186830182015201610297565b818111156102c5576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825180516001600160a01b0390811684840152908201516000929160408501845b600181101561031f578351831682529284019290840190600101610300565b5050828601519150608060608601526dffffffffffffffffffffffffffff82511660a086015282820151608060c0870152805160a06101208801526103686101c088018261028d565b94820151831661014088015250604080820151831661016088015260608201516001600160b81b031661018088015260808201516001600160e01b0319166101a0880152830151868503609f190160e0880152936103c6818661028d565b9450505050606081015190506103e161010085018215159052565b5060408401516001600160f01b038116608085015250939250505056fe4d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a96f4d6f6ff09f9a804d6ff09f9a80c3a96f6f20c3a9206ff09f9a804d20c3a94dc3a96f4d6f4d206f204d6f6f20c3a9f09f9a80204df09f9a806fc3a9c3a920c3a96f6f6ff09f9a80f09f9a8020f09f9a80c3a96f4df09f9a80206f4df09f9a80f09f9a806f4d6ff09f9a80c3a96f204d2020c3a9c3a94df09f9a804d20f09f9a806f6f6f6f6f6f6fc3a9c3a96fa264697066735822122007c06084321294164edfb6f5f0fce9018e15fbbd0f383f437e0ff677c17a1c7964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ab540be8 {\n address s_0;\n address[1] s_1;\n }\n\n struct S_1a0602cf {\n string s_0;\n address s_1;\n address s_2;\n uint184 s_3;\n bytes4 s_4;\n }\n\n struct S_f4640940 {\n uint112 s_0;\n S_1a0602cf s_1;\n string s_2;\n bool s_3;\n }\n\n struct S_db9728ba {\n S_ab540be8 s_0;\n S_f4640940 s_1;\n uint240 s_2;\n }\n\n function test () public pure returns (S_db9728ba memory) {\n S_db9728ba memory r;\n {\n S_ab540be8 memory r_0;\n {\n address r_0_0 = 0xAD19FaDF81A15d0837E38DDcC587eBDF1296DB8e;\n r_0.s_0 = r_0_0;\n }\n {\n address[1] memory r_0_1;\n {\n address r_0_1_0 = 0xA28a9239812CDe273c9B3AB871D6529865C288a0;\n r_0_1[0] = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n S_f4640940 memory r_1;\n {\n uint112 r_1_0 = 2789240170870581534885721673351500;\n r_1.s_0 = r_1_0;\n }\n {\n S_1a0602cf memory r_1_1;\n {\n string memory r_1_1_0 = unicode\"Moo é🚀 M🚀oéé éooo🚀🚀 🚀éoM🚀 oM🚀🚀oMo🚀éo M ééM🚀M 🚀oooooooééo\";\n r_1_1.s_0 = r_1_1_0;\n }\n {\n address r_1_1_1 = 0x2c13E4C5a8Bf8a2771c36368374c448F37a43768;\n r_1_1.s_1 = r_1_1_1;\n }\n {\n address r_1_1_2 = 0x410Daaf3A26F65CFB733B44e31d0855ac2B2b8Bc;\n r_1_1.s_2 = r_1_1_2;\n }\n {\n uint184 r_1_1_3 = 12726693198414424396038837673065339712036485956547019958;\n r_1_1.s_3 = r_1_1_3;\n }\n {\n bytes4 r_1_1_4 = bytes4(0xf5b55100);\n r_1_1.s_4 = r_1_1_4;\n }\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀🚀🚀éoMoo🚀Mo🚀éoo é o🚀M éMéoMoM o \";\n r_1.s_2 = r_1_2;\n }\n {\n bool r_1_3 = true;\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n uint240 r_2 = 1680834534767936496981263258330137788751777961886160992532481400896987555;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000ad19fadf81a15d0837e38ddcc587ebdf1296db8e000000000000000000000000a28a9239812cde273c9b3ab871d6529865c288a000000000000000000000000000000000000000000000000000000000000000800000f3899e31bdbfd360b0ccc4fe8464447b93c8d6dae86adb5435f77377a1a3000000000000000000000000000000000000898529111926347fc7d9ff78c14c000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000002c13e4c5a8bf8a2771c36368374c448f37a43768000000000000000000000000410daaf3a26f65cfb733b44e31d0855ac2b2b8bc00000000000000000084df74da5be1182d5880e1b6b310093510340b244684b6f5b551000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000644d6f6f20c3a9f09f9a80204df09f9a806fc3a9c3a920c3a96f6f6ff09f9a80f09f9a8020f09f9a80c3a96f4df09f9a80206f4df09f9a80f09f9a806f4d6ff09f9a80c3a96f204d2020c3a9c3a94df09f9a804d20f09f9a806f6f6f6f6f6f6fc3a9c3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a96f4d6f6ff09f9a804d6ff09f9a80c3a96f6f20c3a9206ff09f9a804d20c3a94dc3a96f4d6f4d206f20000000" + }, + { + "name": "random-((bytes24,address,string,(bytes29,bytes13[1],bool))[],bool[2],address,string)", + "type": "((bytes24,address,string,(bytes29,bytes13[1],bool))[],bool[2],address,string)", + "value": [ + [ + [ + "0x214e40176841805427e125f9d848135f52ecc65fcf216146", + "0x541688f4Ec74A3ddaa5cD03ba0E9B7cD5535BdA1", + "Moo é🚀ooMo🚀Mo Mé MééM🚀éo🚀é 🚀é éé oééé🚀🚀ooéM🚀🚀oo🚀éMoMo🚀Mo", + [ + "0xba8da3bff86e14975031ee08b2239ded1369a235c68a72cc994af2744f", + ["0x70a7214babec31160cd6f142a3"], + true + ] + ], + [ + "0x2ec77abf473eafa7c51a6c29387731344d244e9f27106e77", + "0xdA21D39868d5400854a0Cf90e2f58a1134b65570", + "Moo é🚀éMo MoMMéoo🚀", + [ + "0x14f2ffd9c86a273ad6f05ac06a35be0461c6d947561ee0b932cd2f450e", + ["0xe29085cfdc5909453f30c6900f"], + true + ] + ] + ], + [true, true], + "0xcb09b29C2A189BfEE99e808Fa47391aDA083E515", + "Moo é🚀o🚀ooM oo ooéM" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x214e40176841805427e125f9d848135f52ecc65fcf216146" + }, + { + "type": "address", + "value": "0x541688f4Ec74A3ddaa5cD03ba0E9B7cD5535BdA1" + }, + { + "type": "string", + "value": "Moo é🚀ooMo🚀Mo Mé MééM🚀éo🚀é 🚀é éé oééé🚀🚀ooéM🚀🚀oo🚀éMoMo🚀Mo" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xba8da3bff86e14975031ee08b2239ded1369a235c68a72cc994af2744f" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x70a7214babec31160cd6f142a3" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x2ec77abf473eafa7c51a6c29387731344d244e9f27106e77" + }, + { + "type": "address", + "value": "0xdA21D39868d5400854a0Cf90e2f58a1134b65570" + }, + { + "type": "string", + "value": "Moo é🚀éMo MoMMéoo🚀" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x14f2ffd9c86a273ad6f05ac06a35be0461c6d947561ee0b932cd2f450e" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xe29085cfdc5909453f30c6900f" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0xcb09b29C2A189BfEE99e808Fa47391aDA083E515" + }, + { + "type": "string", + "value": "Moo é🚀o🚀ooM oo ooéM" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061061c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610422565b60405180910390f35b6100566102ec565b61005e6102ec565b60408051600280825260608201909252600091816020015b61007e61031a565b81526020019060019003908161007657905050905061009b61031a565b7f214e40176841805427e125f9d848135f52ecc65fcf2161460000000000000000815273541688f4ec74a3ddaa5cd03ba0e9b7cd5535bda16020808301919091526040805160a08101909152606780825260009261058090830139604083015250610104610346565b7fba8da3bff86e14975031ee08b2239ded1369a235c68a72cc994af2744f000000815261012f61036e565b6c70a7214babec31160cd6f142a360981b8152602082015260016040820152606082015281518190839060009061016857610168610569565b60200260200101819052505061017c61031a565b7f2ec77abf473eafa7c51a6c29387731344d244e9f27106e770000000000000000815273da21d39868d5400854a0cf90e2f58a1134b65570602080830191909152604080518082018252601b81527f4d6f6f20c3a9f09f9a80c3a94d6f204d6f4d4dc3a96f6ff09f9a800000000000928101929092528201526101fd610346565b7f14f2ffd9c86a273ad6f05ac06a35be0461c6d947561ee0b932cd2f450e000000815261022861036e565b6ce29085cfdc5909453f30c6900f60981b815260208201526001604082018190526060830191909152825182918491811061026557610265610569565b602090810291909101015250815261027b61038c565b60018082526020808301919091528281019190915273cb09b29c2a189bfee99e808fa47391ada083e5156040808401919091528051808201909152601b81527f4d6f6f20c3a9f09f9a806ff09f9a806f6f4d206f6f206f6fc3a94d0000000000918101919091526060820152919050565b60405180608001604052806060815260200161030661038c565b815260006020820152606060409091015290565b60408051608081018252600080825260208201526060918101829052908101610341610346565b905290565b6040805160608101909152600081526020810161036161036e565b8152600060209091015290565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b818110156103d0576020818501810151868301820152016103b4565b818111156103e2576000602083870101525b50601f01601f19169290920160200192915050565b8060005b600281101561041c57815115158452602093840193909101906001016103fb565b50505050565b6000602080835260c0808401855160a0808588015282825180855260e08901915060e08160051b8a0101945086840193506000805b82811015610515578a870360df190184528551805167ffffffffffffffff19168852898101516001600160a01b03168a890152604080820151818a018b90526104a28b8b01826103aa565b9050606080840151935062ffffff19845116818c0152508b83015160808b01865b60018110156104f657825172ffffffffffffffffffffffffffffffffffffff19168252918e0191908e01906001016104c3565b5050509101511515978601979097529488019492880192600101610457565b50505050938701519361052b60408801866103f7565b60408801516001600160a01b031660808801526060880151878403601f190191880191909152935061055f905081846103aa565b9695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f6f4d6ff09f9a804d6f204dc3a9204dc3a9c3a94df09f9a80c3a96ff09f9a80c3a920f09f9a80c3a920c3a9c3a9206fc3a9c3a9c3a9f09f9a80f09f9a806f6fc3a94df09f9a80f09f9a806f6ff09f9a80c3a94d6f4d6ff09f9a804d6fa2646970667358221220f353ec4ada11420496c6823b81ffa26715885365525f897b5e968b658e688b7f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_cbd148e4 {\n bytes29 s_0;\n bytes13[1] s_1;\n bool s_2;\n }\n\n struct S_2bd05fea {\n bytes24 s_0;\n address s_1;\n string s_2;\n S_cbd148e4 s_3;\n }\n\n struct S_fe604db3 {\n S_2bd05fea[] s_0;\n bool[2] s_1;\n address s_2;\n string s_3;\n }\n\n function test () public pure returns (S_fe604db3 memory) {\n S_fe604db3 memory r;\n {\n S_2bd05fea[] memory r_0 = new S_2bd05fea[](2);\n {\n S_2bd05fea memory r_0_0;\n {\n bytes24 r_0_0_0 = bytes24(0x214e40176841805427e125f9d848135f52ecc65fcf216146);\n r_0_0.s_0 = r_0_0_0;\n }\n {\n address r_0_0_1 = 0x541688f4Ec74A3ddaa5cD03ba0E9B7cD5535BdA1;\n r_0_0.s_1 = r_0_0_1;\n }\n {\n string memory r_0_0_2 = unicode\"Moo é🚀ooMo🚀Mo Mé MééM🚀éo🚀é 🚀é éé oééé🚀🚀ooéM🚀🚀oo🚀éMoMo🚀Mo\";\n r_0_0.s_2 = r_0_0_2;\n }\n {\n S_cbd148e4 memory r_0_0_3;\n {\n bytes29 r_0_0_3_0 = bytes29(0xba8da3bff86e14975031ee08b2239ded1369a235c68a72cc994af2744f);\n r_0_0_3.s_0 = r_0_0_3_0;\n }\n {\n bytes13[1] memory r_0_0_3_1;\n {\n bytes13 r_0_0_3_1_0 = bytes13(0x70a7214babec31160cd6f142a3);\n r_0_0_3_1[0] = r_0_0_3_1_0;\n }\n r_0_0_3.s_1 = r_0_0_3_1;\n }\n {\n bool r_0_0_3_2 = true;\n r_0_0_3.s_2 = r_0_0_3_2;\n }\n r_0_0.s_3 = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n S_2bd05fea memory r_0_1;\n {\n bytes24 r_0_1_0 = bytes24(0x2ec77abf473eafa7c51a6c29387731344d244e9f27106e77);\n r_0_1.s_0 = r_0_1_0;\n }\n {\n address r_0_1_1 = 0xdA21D39868d5400854a0Cf90e2f58a1134b65570;\n r_0_1.s_1 = r_0_1_1;\n }\n {\n string memory r_0_1_2 = unicode\"Moo é🚀éMo MoMMéoo🚀\";\n r_0_1.s_2 = r_0_1_2;\n }\n {\n S_cbd148e4 memory r_0_1_3;\n {\n bytes29 r_0_1_3_0 = bytes29(0x14f2ffd9c86a273ad6f05ac06a35be0461c6d947561ee0b932cd2f450e);\n r_0_1_3.s_0 = r_0_1_3_0;\n }\n {\n bytes13[1] memory r_0_1_3_1;\n {\n bytes13 r_0_1_3_1_0 = bytes13(0xe29085cfdc5909453f30c6900f);\n r_0_1_3_1[0] = r_0_1_3_1_0;\n }\n r_0_1_3.s_1 = r_0_1_3_1;\n }\n {\n bool r_0_1_3_2 = true;\n r_0_1_3.s_2 = r_0_1_3_2;\n }\n r_0_1.s_3 = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n bool[2] memory r_1;\n {\n bool r_1_0 = true;\n r_1[0] = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1[1] = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xcb09b29C2A189BfEE99e808Fa47391aDA083E515;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀o🚀ooM oo ooéM\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000cb09b29c2a189bfee99e808fa47391ada083e51500000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0214e40176841805427e125f9d848135f52ecc65fcf2161460000000000000000000000000000000000000000541688f4ec74a3ddaa5cd03ba0e9b7cd5535bda100000000000000000000000000000000000000000000000000000000000000c0ba8da3bff86e14975031ee08b2239ded1369a235c68a72cc994af2744f00000070a7214babec31160cd6f142a300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000674d6f6f20c3a9f09f9a806f6f4d6ff09f9a804d6f204dc3a9204dc3a9c3a94df09f9a80c3a96ff09f9a80c3a920f09f9a80c3a920c3a9c3a9206fc3a9c3a9c3a9f09f9a80f09f9a806f6fc3a94df09f9a80f09f9a806f6ff09f9a80c3a94d6f4d6ff09f9a804d6f000000000000000000000000000000000000000000000000002ec77abf473eafa7c51a6c29387731344d244e9f27106e770000000000000000000000000000000000000000da21d39868d5400854a0cf90e2f58a1134b6557000000000000000000000000000000000000000000000000000000000000000c014f2ffd9c86a273ad6f05ac06a35be0461c6d947561ee0b932cd2f450e000000e29085cfdc5909453f30c6900f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a80c3a94d6f204d6f4d4dc3a96f6ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a806ff09f9a806f6f4d206f6f206f6fc3a94d0000000000" + }, + { + "name": "random-((string,string,(string,string[4],uint240,(bytes23[4],address,bool))[4],string))", + "type": "((string,string,(string,string[4],uint240,(bytes23[4],address,bool))[4],string))", + "value": [ + [ + "Moo é🚀", + "Moo é🚀", + [ + [ + "Moo é🚀🚀🚀 M M MM", + [ + "Moo é🚀éo🚀oo", + "Moo é🚀", + "Moo é🚀", + "Moo é🚀🚀ooéo oo🚀éoooM oMé oéM🚀oéMM🚀éo MMo" + ], + "814555359560293370236521225424701320641954613471591701308136790196232147", + [ + [ + "0x5d274cab679a51d6f22b007203d3f750bb505bdd3759aa", + "0xb08a8af5567c186a6ec356931f2036aa89feb52a65105d", + "0xef4ade4a31877dff310e10940018bcbdab087974a68248", + "0x9da0fe95f6b6c490169e4c8f807cde7b6fe9b40044f7f6" + ], + "0xF3D04A21F31301b645368Ce384902B424809893e", + false + ] + ], + [ + "Moo é🚀é🚀MMoMéM🚀Méoo oé🚀", + [ + "Moo é🚀 🚀o oMMo🚀M🚀oMo", + "Moo é🚀oé Méooé Moooo", + "Moo é🚀", + "Moo é🚀🚀M ooMM ooo ooé oéoo 🚀🚀ooMoé o M éoéMo oM🚀 oM MM" + ], + "346385063941645945282457815996977493452354320534099363377869401412073583", + [ + [ + "0xfc5e74404010f8903edab82b49409999c35e6ff62d53cb", + "0xd37de0df3816b917efd729ccc3c8f5b1da18c3958f8d41", + "0x43f932d79874efbf020aa84e213da3cf19742a90cc4110", + "0x70befe6ad18367c896eb28f8e4caf984180fc5a2bfd318" + ], + "0x267A836e29bDD4eA91a0CDeE9EDbf4d7804741C9", + false + ] + ], + [ + "Moo é🚀é ooM🚀 o ooo", + [ + "Moo é🚀é ééM o🚀🚀🚀oo o 🚀MM éoooM🚀M 🚀oéM", + "Moo é🚀éo🚀Mé🚀o🚀o ooé 🚀o o🚀🚀éoo oo🚀🚀 o🚀oMéooMMMo🚀ooé", + "Moo é🚀o🚀Moé🚀o🚀🚀oMMM🚀 🚀oéM oMooMo é 🚀éoMoMo 🚀Moo🚀", + "Moo é🚀 MM🚀o 🚀MoM🚀 Mo MM🚀o 🚀 M🚀MééMMoMMéoM🚀🚀ooM🚀o🚀oéo🚀🚀🚀o" + ], + "1076127099185097150400809704391287104521004738381718839603410431127243423", + [ + [ + "0xc0384e369d7dfd273e9da946659fd2aa163b9ecce74955", + "0x4a39861df0ddec319864892758bc13fee283ba1faf8c75", + "0x88f32d892e131337d8de4e5d849b8a6164c1ef748ca76f", + "0xd45043712b12a88e62d4e68e8a59a85c1c68a7847fc592" + ], + "0x6B92469260C298382f6e633592C6aAAf32017efD", + true + ] + ], + [ + "Moo é🚀🚀🚀M M🚀M🚀M MoMéMMMéo ooé ", + [ + "Moo é🚀M", + "Moo é🚀ooéMoMéMéo oo oé🚀o 🚀é 🚀éooMéo🚀", + "Moo é🚀ééoMoMéooMM🚀MMo🚀🚀oooMo🚀é🚀🚀🚀ooMooooéé🚀oMM", + "Moo é🚀oooMoMoé🚀o🚀ooooéooéo M🚀oM🚀éMoéo" + ], + "1462292077611571137616390930009237249294300296751303391901834163604575340", + [ + [ + "0xdccab3adddc84fdc7d825fa4d5ff6714778c53d2ca78ef", + "0x56cd63c707a9f8b589bd1e6ea5a8776ad61f7fcdd3da96", + "0x57f91d76789de0566b87f4d2f74adeffc844556269e0dc", + "0xb7632920be17aa18e97efaad7c8ed8b725fba6528e6a5b" + ], + "0xe90063B8685f5cB23832430a70453179e5E2f46f", + false + ] + ] + ], + "Moo é🚀M MM🚀oé🚀o🚀oé🚀🚀 é🚀ooMoMééoooo🚀 ooo " + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀 M M MM" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éo🚀oo" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀ooéo oo🚀éoooM oMé oéM🚀oéMM🚀éo MMo" + } + ] + }, + { + "type": "number", + "value": "814555359560293370236521225424701320641954613471591701308136790196232147" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x5d274cab679a51d6f22b007203d3f750bb505bdd3759aa" + }, + { + "type": "hexstring", + "value": "0xb08a8af5567c186a6ec356931f2036aa89feb52a65105d" + }, + { + "type": "hexstring", + "value": "0xef4ade4a31877dff310e10940018bcbdab087974a68248" + }, + { + "type": "hexstring", + "value": "0x9da0fe95f6b6c490169e4c8f807cde7b6fe9b40044f7f6" + } + ] + }, + { + "type": "address", + "value": "0xF3D04A21F31301b645368Ce384902B424809893e" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀MMoMéM🚀Méoo oé🚀" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀o oMMo🚀M🚀oMo" + }, + { + "type": "string", + "value": "Moo é🚀oé Méooé Moooo" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀M ooMM ooo ooé oéoo 🚀🚀ooMoé o M éoéMo oM🚀 oM MM" + } + ] + }, + { + "type": "number", + "value": "346385063941645945282457815996977493452354320534099363377869401412073583" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xfc5e74404010f8903edab82b49409999c35e6ff62d53cb" + }, + { + "type": "hexstring", + "value": "0xd37de0df3816b917efd729ccc3c8f5b1da18c3958f8d41" + }, + { + "type": "hexstring", + "value": "0x43f932d79874efbf020aa84e213da3cf19742a90cc4110" + }, + { + "type": "hexstring", + "value": "0x70befe6ad18367c896eb28f8e4caf984180fc5a2bfd318" + } + ] + }, + { + "type": "address", + "value": "0x267A836e29bDD4eA91a0CDeE9EDbf4d7804741C9" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é ooM🚀 o ooo" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é ééM o🚀🚀🚀oo o 🚀MM éoooM🚀M 🚀oéM" + }, + { + "type": "string", + "value": "Moo é🚀éo🚀Mé🚀o🚀o ooé 🚀o o🚀🚀éoo oo🚀🚀 o🚀oMéooMMMo🚀ooé" + }, + { + "type": "string", + "value": "Moo é🚀o🚀Moé🚀o🚀🚀oMMM🚀 🚀oéM oMooMo é 🚀éoMoMo 🚀Moo🚀" + }, + { + "type": "string", + "value": "Moo é🚀 MM🚀o 🚀MoM🚀 Mo MM🚀o 🚀 M🚀MééMMoMMéoM🚀🚀ooM🚀o🚀oéo🚀🚀🚀o" + } + ] + }, + { + "type": "number", + "value": "1076127099185097150400809704391287104521004738381718839603410431127243423" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc0384e369d7dfd273e9da946659fd2aa163b9ecce74955" + }, + { + "type": "hexstring", + "value": "0x4a39861df0ddec319864892758bc13fee283ba1faf8c75" + }, + { + "type": "hexstring", + "value": "0x88f32d892e131337d8de4e5d849b8a6164c1ef748ca76f" + }, + { + "type": "hexstring", + "value": "0xd45043712b12a88e62d4e68e8a59a85c1c68a7847fc592" + } + ] + }, + { + "type": "address", + "value": "0x6B92469260C298382f6e633592C6aAAf32017efD" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀M M🚀M🚀M MoMéMMMéo ooé " + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀M" + }, + { + "type": "string", + "value": "Moo é🚀ooéMoMéMéo oo oé🚀o 🚀é 🚀éooMéo🚀" + }, + { + "type": "string", + "value": "Moo é🚀ééoMoMéooMM🚀MMo🚀🚀oooMo🚀é🚀🚀🚀ooMooooéé🚀oMM" + }, + { + "type": "string", + "value": "Moo é🚀oooMoMoé🚀o🚀ooooéooéo M🚀oM🚀éMoéo" + } + ] + }, + { + "type": "number", + "value": "1462292077611571137616390930009237249294300296751303391901834163604575340" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xdccab3adddc84fdc7d825fa4d5ff6714778c53d2ca78ef" + }, + { + "type": "hexstring", + "value": "0x56cd63c707a9f8b589bd1e6ea5a8776ad61f7fcdd3da96" + }, + { + "type": "hexstring", + "value": "0x57f91d76789de0566b87f4d2f74adeffc844556269e0dc" + }, + { + "type": "hexstring", + "value": "0xb7632920be17aa18e97efaad7c8ed8b725fba6528e6a5b" + } + ] + }, + { + "type": "address", + "value": "0xe90063B8685f5cB23832430a70453179e5E2f46f" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M MM🚀oé🚀o🚀oé🚀🚀 é🚀ooMoMééoooo🚀 ooo " + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610eb5806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906109ce565b60405180910390f35b61005661081f565b61005e61081f565b610066610837565b604080518082018252600a808252689adede418753e13f3560b71b60208084018290529285528351808501909452908352828201528201526100a6610865565b6100ae610892565b60408051808201909152601b81527f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80204d2020204d204d4d0000000000602082015281526100ec6108c0565b60408051808201825260138152724d6f6f20c3a9f09f9a80c3a96ff09f9a806f6f60681b60208083019190915290835281518083018352600a808252689adede418753e13f3560b71b82840181905285840192909252835180850185529081528083019190915283830152815160608101909252603f80835260009291610e419083013960608301525060208201527d7605899970bcf5af3b095ab35b301ac91d797b89bed5f5d2c90cc1141fd360408201526101a76108e7565b6101af61090e565b7f5d274cab679a51d6f22b007203d3f750bb505bdd3759aa00000000000000000081527fb08a8af5567c186a6ec356931f2036aa89feb52a65105d0000000000000000006020808301919091527fef4ade4a31877dff310e10940018bcbdab087974a682480000000000000000006040808401919091527f9da0fe95f6b6c490169e4c8f807cde7b6fe9b40044f7f600000000000000000060608085019190915292845273f3d04a21f31301b645368ce384902b424809893e918401919091526000908301528201528152610282610892565b6000604051806060016040528060288152602001610c27602891398252506102a86108c0565b6000604051806060016040528060218152602001610b1660219139825250604080518082018252601b81527f4d6f6f20c3a9f09f9a806fc3a9204dc3a96f6fc3a9204d6f6f6f6f00000000006020808301919091528084019190915281518083018352600a8152689adede418753e13f3560b71b8183015282840152815160808101909252604d80835260009291610d869083013960608301525060208201527d323022d73d2d5799c913482cbcdde37710b2325ad9ad1f251a2fbb53f86f60408201526103746108e7565b61037c61090e565b7ffc5e74404010f8903edab82b49409999c35e6ff62d53cb00000000000000000081527fd37de0df3816b917efd729ccc3c8f5b1da18c3958f8d410000000000000000006020808301919091527f43f932d79874efbf020aa84e213da3cf19742a90cc41100000000000000000006040808401919091527f70befe6ad18367c896eb28f8e4caf984180fc5a2bfd31800000000000000000060608085019190915292845273267a836e29bdd4ea91a0cdee9edbf4d7804741c98483015260009084015290830191909152820152610451610892565b60408051808201909152601a81527f4d6f6f20c3a9f09f9a80c3a9206f6f4df09f9a80206f206f6f6f0000000000006020820152815261048f6108c0565b6000604051806080016040528060438152602001610d43604391398252506040805160808101909152605a80825260009190610bcd60208301399050808260016020020181905250506000604051806080016040528060538152602001610cf060539139604080840191909152805160a08101909152606780825260009250610c89602083013960608301525060208201527d9bebc5c5faecd83c5f8ec8026b28f02b129047613972e96b66977b96ca9f604082015261054d6108e7565b61055561090e565b7fc0384e369d7dfd273e9da946659fd2aa163b9ecce7495500000000000000000081527f4a39861df0ddec319864892758bc13fee283ba1faf8c750000000000000000006020808301919091527f88f32d892e131337d8de4e5d849b8a6164c1ef748ca76f0000000000000000006040808401919091527fd45043712b12a88e62d4e68e8a59a85c1c68a7847fc592000000000000000000606080850191909152928452736b92469260c298382f6e633592c6aaaf32017efd918401919091526001838201529083019190915282015261062d610892565b6000604051806060016040528060328152602001610dd3603291398252506106536108c0565b604080518082018252600b81526a4d6f6f20c3a9f09f9a804d60a81b602080830191909152908352815160608101909252603c80835260009291610e05908301399050808260016020020181905250506000604051806080016040528060508152602001610b3760509139604080840191909152805160608101909152603a80825260009250610c4f602083013960608301525060208201527dd3df6d7caf36359fd13ac03ecfeb8238b04a87910e56859b8d928012546c60408201526107186108e7565b61072061090e565b7fdccab3adddc84fdc7d825fa4d5ff6714778c53d2ca78ef00000000000000000081527f56cd63c707a9f8b589bd1e6ea5a8776ad61f7fcdd3da960000000000000000006020808301919091527f57f91d76789de0566b87f4d2f74adeffc844556269e0dc0000000000000000006040808401919091527fb7632920be17aa18e97efaad7c8ed8b725fba6528e6a5b00000000000000000060608085019190915292845273e90063b8685f5cb23832430a70453179e5e2f46f8483015260008482018190528584019490945291850193909352848101939093528251608081019093526046808452909291610b87908301396060830152508152919050565b6040518060200160405280610832610837565b905290565b60405180608001604052806060815260200160608152602001610858610865565b8152602001606081525090565b60405180608001604052806004905b61087c610892565b8152602001906001900390816108745790505090565b6040518060800160405280606081526020016108ac6108c0565b8152600060208201526040016108326108e7565b60405180608001604052806004905b60608152602001906001900390816108cf5790505090565b60405180606001604052806108fa61090e565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b8181101561095257602081850181015186830182015201610936565b81811115610964576000602083870101525b50601f01601f19169290920160200192915050565b80518260005b60048110156109aa57825168ffffffffffffffffff191682526020928301929091019060010161097f565b50505060208101516001600160a01b0316608083015260400151151560a090910152565b60006020808352835181828501528051608060408601526109f260c086018261092c565b905082820151603f196060818885030181890152610a10848461092c565b93506040850151925081888503016080890152838490506080850160005b6004808210610a3d5750610aeb565b878303845286516101208151818652610a588287018261092c565b9150508b8201518582038d870152818290506080830160005b86811015610aa0578482038352610a8982855161092c565b91508f840193508f83019250600181019050610a71565b5060408501519550610abd60408901876001600160f01b03169052565b898501519550610acf8a890187610979565b9a8e019a978e0197965050506001939093019250610a2e915050565b50828701519750838a82030160a08b0152610b06818961092c565b9b9a505050505050505050505056fe4d6f6f20c3a9f09f9a8020f09f9a806f206f4d4d6ff09f9a804df09f9a806f4d6f4d6f6f20c3a9f09f9a80c3a9c3a96f4d6f4dc3a96f6f4d4df09f9a804d4d6ff09f9a80f09f9a806f6f6f4d6ff09f9a80c3a9f09f9a80f09f9a80f09f9a806f6f4d6f6f6f6fc3a9c3a9f09f9a806f4d4d4d6f6f20c3a9f09f9a804d204d4df09f9a806fc3a9f09f9a806ff09f9a806fc3a9f09f9a80f09f9a8020c3a9f09f9a806f6f4d6f4dc3a9c3a96f6f6f6ff09f9a80206f6f6f204d6f6f20c3a9f09f9a80c3a96ff09f9a804dc3a9f09f9a806ff09f9a806f206f6fc3a920f09f9a806f206ff09f9a80f09f9a80c3a96f6f206f6ff09f9a80f09f9a80206ff09f9a806f4dc3a96f6f4d4d4d6ff09f9a806f6fc3a94d6f6f20c3a9f09f9a80c3a9f09f9a804d4d6f4dc3a94df09f9a804dc3a96f6f206fc3a9f09f9a804d6f6f20c3a9f09f9a806f6f6f4d6f4d6fc3a9f09f9a806ff09f9a806f6f6f6fc3a96f6fc3a96f204df09f9a806f4df09f9a80c3a94d6fc3a96f4d6f6f20c3a9f09f9a80204d4df09f9a806f20f09f9a804d6f4df09f9a80204d6f204d4df09f9a806f20f09f9a80204df09f9a804dc3a9c3a94d4d6f4d4dc3a96f4df09f9a80f09f9a806f6f4df09f9a806ff09f9a806fc3a96ff09f9a80f09f9a80f09f9a806f4d6f6f20c3a9f09f9a806ff09f9a804d6fc3a9f09f9a806ff09f9a80f09f9a806f4d4d4df09f9a8020f09f9a806fc3a94d206f4d6f6f4d6f20c3a920f09f9a80c3a96f4d6f4d6f20f09f9a804d6f6ff09f9a804d6f6f20c3a9f09f9a80c3a92020c3a9c3a94d206ff09f9a80f09f9a80f09f9a806f6f206f2020f09f9a804d4d2020c3a96f6f6f4df09f9a804d20f09f9a806fc3a94d4d6f6f20c3a9f09f9a80f09f9a804d206f6f4d4d206f6f6f206f6fc3a9206fc3a96f6f20f09f9a80f09f9a806f6f4d6fc3a920206f20204d20c3a96fc3a94d6f206f4df09f9a80206f4d204d4d4d6f6f20c3a9f09f9a80f09f9a80f09f9a804d204df09f9a804df09f9a804d20204d6f4dc3a94d4d4dc3a96f206f6fc3a9204d6f6f20c3a9f09f9a806f6fc3a94d6f4dc3a94dc3a96f20206f6f206fc3a9f09f9a806f20f09f9a80c3a920f09f9a80c3a96f6f4dc3a96ff09f9a804d6f6f20c3a9f09f9a80f09f9a806f6fc3a96f20206f6ff09f9a80c3a96f6f6f4d206f4dc3a9206fc3a94df09f9a806fc3a94d4df09f9a80c3a96f204d4d6fa2646970667358221220c1d5585eef935ec5529100085ecf8800b26ff44cfc53da002bcad401d9ecb58a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6c4ab184 {\n bytes23[4] s_0;\n address s_1;\n bool s_2;\n }\n\n struct S_36facdd7 {\n string s_0;\n string[4] s_1;\n uint240 s_2;\n S_6c4ab184 s_3;\n }\n\n struct S_1d8604b7 {\n string s_0;\n string s_1;\n S_36facdd7[4] s_2;\n string s_3;\n }\n\n struct S_42d42b4b {\n S_1d8604b7 s_0;\n }\n\n function test () public pure returns (S_42d42b4b memory) {\n S_42d42b4b memory r;\n {\n S_1d8604b7 memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀\";\n r_0.s_0 = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀\";\n r_0.s_1 = r_0_1;\n }\n {\n S_36facdd7[4] memory r_0_2;\n {\n S_36facdd7 memory r_0_2_0;\n {\n string memory r_0_2_0_0 = unicode\"Moo é🚀🚀🚀 M M MM\";\n r_0_2_0.s_0 = r_0_2_0_0;\n }\n {\n string[4] memory r_0_2_0_1;\n {\n string memory r_0_2_0_1_0 = unicode\"Moo é🚀éo🚀oo\";\n r_0_2_0_1[0] = r_0_2_0_1_0;\n }\n {\n string memory r_0_2_0_1_1 = unicode\"Moo é🚀\";\n r_0_2_0_1[1] = r_0_2_0_1_1;\n }\n {\n string memory r_0_2_0_1_2 = unicode\"Moo é🚀\";\n r_0_2_0_1[2] = r_0_2_0_1_2;\n }\n {\n string memory r_0_2_0_1_3 = unicode\"Moo é🚀🚀ooéo oo🚀éoooM oMé oéM🚀oéMM🚀éo MMo\";\n r_0_2_0_1[3] = r_0_2_0_1_3;\n }\n r_0_2_0.s_1 = r_0_2_0_1;\n }\n {\n uint240 r_0_2_0_2 = 814555359560293370236521225424701320641954613471591701308136790196232147;\n r_0_2_0.s_2 = r_0_2_0_2;\n }\n {\n S_6c4ab184 memory r_0_2_0_3;\n {\n bytes23[4] memory r_0_2_0_3_0;\n {\n bytes23 r_0_2_0_3_0_0 = bytes23(0x5d274cab679a51d6f22b007203d3f750bb505bdd3759aa);\n r_0_2_0_3_0[0] = r_0_2_0_3_0_0;\n }\n {\n bytes23 r_0_2_0_3_0_1 = bytes23(0xb08a8af5567c186a6ec356931f2036aa89feb52a65105d);\n r_0_2_0_3_0[1] = r_0_2_0_3_0_1;\n }\n {\n bytes23 r_0_2_0_3_0_2 = bytes23(0xef4ade4a31877dff310e10940018bcbdab087974a68248);\n r_0_2_0_3_0[2] = r_0_2_0_3_0_2;\n }\n {\n bytes23 r_0_2_0_3_0_3 = bytes23(0x9da0fe95f6b6c490169e4c8f807cde7b6fe9b40044f7f6);\n r_0_2_0_3_0[3] = r_0_2_0_3_0_3;\n }\n r_0_2_0_3.s_0 = r_0_2_0_3_0;\n }\n {\n address r_0_2_0_3_1 = 0xF3D04A21F31301b645368Ce384902B424809893e;\n r_0_2_0_3.s_1 = r_0_2_0_3_1;\n }\n {\n bool r_0_2_0_3_2 = false;\n r_0_2_0_3.s_2 = r_0_2_0_3_2;\n }\n r_0_2_0.s_3 = r_0_2_0_3;\n }\n r_0_2[0] = r_0_2_0;\n }\n {\n S_36facdd7 memory r_0_2_1;\n {\n string memory r_0_2_1_0 = unicode\"Moo é🚀é🚀MMoMéM🚀Méoo oé🚀\";\n r_0_2_1.s_0 = r_0_2_1_0;\n }\n {\n string[4] memory r_0_2_1_1;\n {\n string memory r_0_2_1_1_0 = unicode\"Moo é🚀 🚀o oMMo🚀M🚀oMo\";\n r_0_2_1_1[0] = r_0_2_1_1_0;\n }\n {\n string memory r_0_2_1_1_1 = unicode\"Moo é🚀oé Méooé Moooo\";\n r_0_2_1_1[1] = r_0_2_1_1_1;\n }\n {\n string memory r_0_2_1_1_2 = unicode\"Moo é🚀\";\n r_0_2_1_1[2] = r_0_2_1_1_2;\n }\n {\n string memory r_0_2_1_1_3 = unicode\"Moo é🚀🚀M ooMM ooo ooé oéoo 🚀🚀ooMoé o M éoéMo oM🚀 oM MM\";\n r_0_2_1_1[3] = r_0_2_1_1_3;\n }\n r_0_2_1.s_1 = r_0_2_1_1;\n }\n {\n uint240 r_0_2_1_2 = 346385063941645945282457815996977493452354320534099363377869401412073583;\n r_0_2_1.s_2 = r_0_2_1_2;\n }\n {\n S_6c4ab184 memory r_0_2_1_3;\n {\n bytes23[4] memory r_0_2_1_3_0;\n {\n bytes23 r_0_2_1_3_0_0 = bytes23(0xfc5e74404010f8903edab82b49409999c35e6ff62d53cb);\n r_0_2_1_3_0[0] = r_0_2_1_3_0_0;\n }\n {\n bytes23 r_0_2_1_3_0_1 = bytes23(0xd37de0df3816b917efd729ccc3c8f5b1da18c3958f8d41);\n r_0_2_1_3_0[1] = r_0_2_1_3_0_1;\n }\n {\n bytes23 r_0_2_1_3_0_2 = bytes23(0x43f932d79874efbf020aa84e213da3cf19742a90cc4110);\n r_0_2_1_3_0[2] = r_0_2_1_3_0_2;\n }\n {\n bytes23 r_0_2_1_3_0_3 = bytes23(0x70befe6ad18367c896eb28f8e4caf984180fc5a2bfd318);\n r_0_2_1_3_0[3] = r_0_2_1_3_0_3;\n }\n r_0_2_1_3.s_0 = r_0_2_1_3_0;\n }\n {\n address r_0_2_1_3_1 = 0x267A836e29bDD4eA91a0CDeE9EDbf4d7804741C9;\n r_0_2_1_3.s_1 = r_0_2_1_3_1;\n }\n {\n bool r_0_2_1_3_2 = false;\n r_0_2_1_3.s_2 = r_0_2_1_3_2;\n }\n r_0_2_1.s_3 = r_0_2_1_3;\n }\n r_0_2[1] = r_0_2_1;\n }\n {\n S_36facdd7 memory r_0_2_2;\n {\n string memory r_0_2_2_0 = unicode\"Moo é🚀é ooM🚀 o ooo\";\n r_0_2_2.s_0 = r_0_2_2_0;\n }\n {\n string[4] memory r_0_2_2_1;\n {\n string memory r_0_2_2_1_0 = unicode\"Moo é🚀é ééM o🚀🚀🚀oo o 🚀MM éoooM🚀M 🚀oéM\";\n r_0_2_2_1[0] = r_0_2_2_1_0;\n }\n {\n string memory r_0_2_2_1_1 = unicode\"Moo é🚀éo🚀Mé🚀o🚀o ooé 🚀o o🚀🚀éoo oo🚀🚀 o🚀oMéooMMMo🚀ooé\";\n r_0_2_2_1[1] = r_0_2_2_1_1;\n }\n {\n string memory r_0_2_2_1_2 = unicode\"Moo é🚀o🚀Moé🚀o🚀🚀oMMM🚀 🚀oéM oMooMo é 🚀éoMoMo 🚀Moo🚀\";\n r_0_2_2_1[2] = r_0_2_2_1_2;\n }\n {\n string memory r_0_2_2_1_3 = unicode\"Moo é🚀 MM🚀o 🚀MoM🚀 Mo MM🚀o 🚀 M🚀MééMMoMMéoM🚀🚀ooM🚀o🚀oéo🚀🚀🚀o\";\n r_0_2_2_1[3] = r_0_2_2_1_3;\n }\n r_0_2_2.s_1 = r_0_2_2_1;\n }\n {\n uint240 r_0_2_2_2 = 1076127099185097150400809704391287104521004738381718839603410431127243423;\n r_0_2_2.s_2 = r_0_2_2_2;\n }\n {\n S_6c4ab184 memory r_0_2_2_3;\n {\n bytes23[4] memory r_0_2_2_3_0;\n {\n bytes23 r_0_2_2_3_0_0 = bytes23(0xc0384e369d7dfd273e9da946659fd2aa163b9ecce74955);\n r_0_2_2_3_0[0] = r_0_2_2_3_0_0;\n }\n {\n bytes23 r_0_2_2_3_0_1 = bytes23(0x4a39861df0ddec319864892758bc13fee283ba1faf8c75);\n r_0_2_2_3_0[1] = r_0_2_2_3_0_1;\n }\n {\n bytes23 r_0_2_2_3_0_2 = bytes23(0x88f32d892e131337d8de4e5d849b8a6164c1ef748ca76f);\n r_0_2_2_3_0[2] = r_0_2_2_3_0_2;\n }\n {\n bytes23 r_0_2_2_3_0_3 = bytes23(0xd45043712b12a88e62d4e68e8a59a85c1c68a7847fc592);\n r_0_2_2_3_0[3] = r_0_2_2_3_0_3;\n }\n r_0_2_2_3.s_0 = r_0_2_2_3_0;\n }\n {\n address r_0_2_2_3_1 = 0x6B92469260C298382f6e633592C6aAAf32017efD;\n r_0_2_2_3.s_1 = r_0_2_2_3_1;\n }\n {\n bool r_0_2_2_3_2 = true;\n r_0_2_2_3.s_2 = r_0_2_2_3_2;\n }\n r_0_2_2.s_3 = r_0_2_2_3;\n }\n r_0_2[2] = r_0_2_2;\n }\n {\n S_36facdd7 memory r_0_2_3;\n {\n string memory r_0_2_3_0 = unicode\"Moo é🚀🚀🚀M M🚀M🚀M MoMéMMMéo ooé \";\n r_0_2_3.s_0 = r_0_2_3_0;\n }\n {\n string[4] memory r_0_2_3_1;\n {\n string memory r_0_2_3_1_0 = unicode\"Moo é🚀M\";\n r_0_2_3_1[0] = r_0_2_3_1_0;\n }\n {\n string memory r_0_2_3_1_1 = unicode\"Moo é🚀ooéMoMéMéo oo oé🚀o 🚀é 🚀éooMéo🚀\";\n r_0_2_3_1[1] = r_0_2_3_1_1;\n }\n {\n string memory r_0_2_3_1_2 = unicode\"Moo é🚀ééoMoMéooMM🚀MMo🚀🚀oooMo🚀é🚀🚀🚀ooMooooéé🚀oMM\";\n r_0_2_3_1[2] = r_0_2_3_1_2;\n }\n {\n string memory r_0_2_3_1_3 = unicode\"Moo é🚀oooMoMoé🚀o🚀ooooéooéo M🚀oM🚀éMoéo\";\n r_0_2_3_1[3] = r_0_2_3_1_3;\n }\n r_0_2_3.s_1 = r_0_2_3_1;\n }\n {\n uint240 r_0_2_3_2 = 1462292077611571137616390930009237249294300296751303391901834163604575340;\n r_0_2_3.s_2 = r_0_2_3_2;\n }\n {\n S_6c4ab184 memory r_0_2_3_3;\n {\n bytes23[4] memory r_0_2_3_3_0;\n {\n bytes23 r_0_2_3_3_0_0 = bytes23(0xdccab3adddc84fdc7d825fa4d5ff6714778c53d2ca78ef);\n r_0_2_3_3_0[0] = r_0_2_3_3_0_0;\n }\n {\n bytes23 r_0_2_3_3_0_1 = bytes23(0x56cd63c707a9f8b589bd1e6ea5a8776ad61f7fcdd3da96);\n r_0_2_3_3_0[1] = r_0_2_3_3_0_1;\n }\n {\n bytes23 r_0_2_3_3_0_2 = bytes23(0x57f91d76789de0566b87f4d2f74adeffc844556269e0dc);\n r_0_2_3_3_0[2] = r_0_2_3_3_0_2;\n }\n {\n bytes23 r_0_2_3_3_0_3 = bytes23(0xb7632920be17aa18e97efaad7c8ed8b725fba6528e6a5b);\n r_0_2_3_3_0[3] = r_0_2_3_3_0_3;\n }\n r_0_2_3_3.s_0 = r_0_2_3_3_0;\n }\n {\n address r_0_2_3_3_1 = 0xe90063B8685f5cB23832430a70453179e5E2f46f;\n r_0_2_3_3.s_1 = r_0_2_3_3_1;\n }\n {\n bool r_0_2_3_3_2 = false;\n r_0_2_3_3.s_2 = r_0_2_3_3_2;\n }\n r_0_2_3.s_3 = r_0_2_3_3;\n }\n r_0_2[3] = r_0_2_3;\n }\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀M MM🚀oé🚀o🚀oé🚀🚀 é🚀ooMoMééoooo🚀 ooo \";\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000f60000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000006e00000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000007605899970bcf5af3b095ab35b301ac91d797b89bed5f5d2c90cc1141fd35d274cab679a51d6f22b007203d3f750bb505bdd3759aa000000000000000000b08a8af5567c186a6ec356931f2036aa89feb52a65105d000000000000000000ef4ade4a31877dff310e10940018bcbdab087974a682480000000000000000009da0fe95f6b6c490169e4c8f807cde7b6fe9b40044f7f6000000000000000000000000000000000000000000f3d04a21f31301b645368ce384902b424809893e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a80f09f9a80f09f9a80204d2020204d204d4d0000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a80c3a96ff09f9a806f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a80f09f9a806f6fc3a96f20206f6ff09f9a80c3a96f6f6f4d206f4dc3a9206fc3a94df09f9a806fc3a94d4df09f9a80c3a96f204d4d6f00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001800000323022d73d2d5799c913482cbcdde37710b2325ad9ad1f251a2fbb53f86ffc5e74404010f8903edab82b49409999c35e6ff62d53cb000000000000000000d37de0df3816b917efd729ccc3c8f5b1da18c3958f8d4100000000000000000043f932d79874efbf020aa84e213da3cf19742a90cc411000000000000000000070befe6ad18367c896eb28f8e4caf984180fc5a2bfd318000000000000000000000000000000000000000000267a836e29bdd4ea91a0cdee9edbf4d7804741c9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000284d6f6f20c3a9f09f9a80c3a9f09f9a804d4d6f4dc3a94df09f9a804dc3a96f6f206fc3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a8020f09f9a806f206f4d4d6ff09f9a804df09f9a806f4d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a806fc3a9204dc3a96f6fc3a9204d6f6f6f6f0000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a80f09f9a804d206f6f4d4d206f6f6f206f6fc3a9206fc3a96f6f20f09f9a80f09f9a806f6f4d6fc3a920206f20204d20c3a96fc3a94d6f206f4df09f9a80206f4d204d4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000009bebc5c5faecd83c5f8ec8026b28f02b129047613972e96b66977b96ca9fc0384e369d7dfd273e9da946659fd2aa163b9ecce749550000000000000000004a39861df0ddec319864892758bc13fee283ba1faf8c7500000000000000000088f32d892e131337d8de4e5d849b8a6164c1ef748ca76f000000000000000000d45043712b12a88e62d4e68e8a59a85c1c68a7847fc5920000000000000000000000000000000000000000006b92469260c298382f6e633592c6aaaf32017efd0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001a4d6f6f20c3a9f09f9a80c3a9206f6f4df09f9a80206f206f6f6f000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a80c3a92020c3a9c3a94d206ff09f9a80f09f9a80f09f9a806f6f206f2020f09f9a804d4d2020c3a96f6f6f4df09f9a804d20f09f9a806fc3a94d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a80c3a96ff09f9a804dc3a9f09f9a806ff09f9a806f206f6fc3a920f09f9a806f206ff09f9a80f09f9a80c3a96f6f206f6ff09f9a80f09f9a80206ff09f9a806f4dc3a96f6f4d4d4d6ff09f9a806f6fc3a900000000000000000000000000000000000000000000000000000000000000000000000000534d6f6f20c3a9f09f9a806ff09f9a804d6fc3a9f09f9a806ff09f9a80f09f9a806f4d4d4df09f9a8020f09f9a806fc3a94d206f4d6f6f4d6f20c3a920f09f9a80c3a96f4d6f4d6f20f09f9a804d6f6ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000674d6f6f20c3a9f09f9a80204d4df09f9a806f20f09f9a804d6f4df09f9a80204d6f204d4df09f9a806f20f09f9a80204df09f9a804dc3a9c3a94d4d6f4d4dc3a96f4df09f9a80f09f9a806f6f4df09f9a806ff09f9a806fc3a96ff09f9a80f09f9a80f09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001800000d3df6d7caf36359fd13ac03ecfeb8238b04a87910e56859b8d928012546cdccab3adddc84fdc7d825fa4d5ff6714778c53d2ca78ef00000000000000000056cd63c707a9f8b589bd1e6ea5a8776ad61f7fcdd3da9600000000000000000057f91d76789de0566b87f4d2f74adeffc844556269e0dc000000000000000000b7632920be17aa18e97efaad7c8ed8b725fba6528e6a5b000000000000000000000000000000000000000000e90063b8685f5cb23832430a70453179e5e2f46f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a80f09f9a80f09f9a804d204df09f9a804df09f9a804d20204d6f4dc3a94d4d4dc3a96f206f6fc3a9200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a804d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a806f6fc3a94d6f4dc3a94dc3a96f20206f6f206fc3a9f09f9a806f20f09f9a80c3a920f09f9a80c3a96f6f4dc3a96ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a80c3a9c3a96f4d6f4dc3a96f6f4d4df09f9a804d4d6ff09f9a80f09f9a806f6f6f4d6ff09f9a80c3a9f09f9a80f09f9a80f09f9a806f6f4d6f6f6f6fc3a9c3a9f09f9a806f4d4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a4d6f6f20c3a9f09f9a806f6f6f4d6f4d6fc3a9f09f9a806ff09f9a806f6f6f6fc3a96f6fc3a96f204df09f9a806f4df09f9a80c3a94d6fc3a96f00000000000000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a804d204d4df09f9a806fc3a9f09f9a806ff09f9a806fc3a9f09f9a80f09f9a8020c3a9f09f9a806f6f4d6f4dc3a9c3a96f6f6f6ff09f9a80206f6f6f200000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((uint160,(address,(address,address,bytes8,bytes5),bytes22),uint80,string,bool),address,bool)", + "type": "((uint160,(address,(address,address,bytes8,bytes5),bytes22),uint80,string,bool),address,bool)", + "value": [ + [ + "1108344027074318021382528324955331044833989235307", + [ + "0x2871982D7de5e775b53042AD25d9Fa4626eFd421", + [ + "0x11F18303E418eD2c5BbAa8D5FbcC70eDc9e8391f", + "0x913da9E88C191A531eCFC336D63d084b950850BB", + "0x12ca3ad0eef370bd", + "0x0d7c4ed0d9" + ], + "0xed9166803d7d8d9696f219de5c0e212b866bcb6c440e" + ], + "674165427558529062447527", + "Moo é🚀ooééé🚀oo🚀é oo🚀🚀ooééM éoMoM 🚀", + true + ], + "0xA85c775e5F79B0fDD83D1C36100B86592F6049A2", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1108344027074318021382528324955331044833989235307" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x2871982D7de5e775b53042AD25d9Fa4626eFd421" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x11F18303E418eD2c5BbAa8D5FbcC70eDc9e8391f" + }, + { + "type": "address", + "value": "0x913da9E88C191A531eCFC336D63d084b950850BB" + }, + { + "type": "hexstring", + "value": "0x12ca3ad0eef370bd" + }, + { + "type": "hexstring", + "value": "0x0d7c4ed0d9" + } + ] + }, + { + "type": "hexstring", + "value": "0xed9166803d7d8d9696f219de5c0e212b866bcb6c440e" + } + ] + }, + { + "type": "number", + "value": "674165427558529062447527" + }, + { + "type": "string", + "value": "Moo é🚀ooééé🚀oo🚀é oo🚀🚀ooééM éoMoM 🚀" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0xA85c775e5F79B0fDD83D1C36100B86592F6049A2" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061040e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610297565b60405180910390f35b6100566101be565b61005e6101be565b6100666101e5565b73c223dd747bd4a230bf009afe3ac133e67b34126b81526100bf60408051606080820183526000808352835160808101855281815260208181018390529481018290529182015290918201908152600060209091015290565b732871982d7de5e775b53042ad25d9fa4626efd4218152604080516080810182527311f18303e418ed2c5bbaa8d5fbcc70edc9e8391f815273913da9e88c191a531ecfc336d63d084b950850bb6020808301919091526712ca3ad0eef370bd60c01b82840152640d7c4ed0d960d81b606080840191909152818501929092527576c8b3401ebec6cb4b790cef2e071095c335e5b6220760511b8385015284810193909352698ec294c042f68a28a9a7848301528151908101909152603c80825260009261039d9083013960608301525060016080820152815273a85c775e5f79b0fdd83d1c36100b86592f6049a2602082015260006040820152919050565b60405180606001604052806101d16101e5565b815260006020820181905260409091015290565b6040805160a0810182526000808252825160608082018552828252845160808101865283815260208181018590528187018590529181018490528282015293810191909152909182019081526000602082018190526060604083018190529091015290565b6000815180845260005b8181101561027057602081850181015186830182015201610254565b81811115610282576000602083870101525b50601f01601f19169290920160200192915050565b60208082528251606083830181905281516001600160a01b039081166080860152828401518051821660a0870152808501518051831660c08801528086015190921660e08701526040808301516001600160c01b031916610100880152918301516001600160d81b03191661012087015281015169ffffffffffffffffffff1916610140808701919091529083015169ffffffffffffffffffff166101608601529082015161018085019190915260009291906103586101c086018261024a565b9050608082015191506103706101a086018315159052565b918501516001600160a01b0381166040860152916040860151801515606087015292509594505050505056fe4d6f6f20c3a9f09f9a806f6fc3a9c3a9c3a9f09f9a806f6ff09f9a80c3a9206f6ff09f9a80f09f9a806f6fc3a9c3a94d20c3a96f4d6f4d20f09f9a80a2646970667358221220969258ecdd2296cd95f45b33598f9dbd613d0dae0a2e2d14c9117864f1f1202b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c5a3bd4e {\n address s_0;\n address s_1;\n bytes8 s_2;\n bytes5 s_3;\n }\n\n struct S_a86894fb {\n address s_0;\n S_c5a3bd4e s_1;\n bytes22 s_2;\n }\n\n struct S_dd53e997 {\n uint160 s_0;\n S_a86894fb s_1;\n uint80 s_2;\n string s_3;\n bool s_4;\n }\n\n struct S_28337d72 {\n S_dd53e997 s_0;\n address s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_28337d72 memory) {\n S_28337d72 memory r;\n {\n S_dd53e997 memory r_0;\n {\n uint160 r_0_0 = 1108344027074318021382528324955331044833989235307;\n r_0.s_0 = r_0_0;\n }\n {\n S_a86894fb memory r_0_1;\n {\n address r_0_1_0 = 0x2871982D7de5e775b53042AD25d9Fa4626eFd421;\n r_0_1.s_0 = r_0_1_0;\n }\n {\n S_c5a3bd4e memory r_0_1_1;\n {\n address r_0_1_1_0 = 0x11F18303E418eD2c5BbAa8D5FbcC70eDc9e8391f;\n r_0_1_1.s_0 = r_0_1_1_0;\n }\n {\n address r_0_1_1_1 = 0x913da9E88C191A531eCFC336D63d084b950850BB;\n r_0_1_1.s_1 = r_0_1_1_1;\n }\n {\n bytes8 r_0_1_1_2 = bytes8(0x12ca3ad0eef370bd);\n r_0_1_1.s_2 = r_0_1_1_2;\n }\n {\n bytes5 r_0_1_1_3 = bytes5(0x0d7c4ed0d9);\n r_0_1_1.s_3 = r_0_1_1_3;\n }\n r_0_1.s_1 = r_0_1_1;\n }\n {\n bytes22 r_0_1_2 = bytes22(0xed9166803d7d8d9696f219de5c0e212b866bcb6c440e);\n r_0_1.s_2 = r_0_1_2;\n }\n r_0.s_1 = r_0_1;\n }\n {\n uint80 r_0_2 = 674165427558529062447527;\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀ooééé🚀oo🚀é oo🚀🚀ooééM éoMoM 🚀\";\n r_0.s_3 = r_0_3;\n }\n {\n bool r_0_4 = true;\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xA85c775e5F79B0fDD83D1C36100B86592F6049A2;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000a85c775e5f79b0fdd83d1c36100b86592f6049a20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c223dd747bd4a230bf009afe3ac133e67b34126b0000000000000000000000002871982d7de5e775b53042ad25d9fa4626efd42100000000000000000000000011f18303e418ed2c5bbaa8d5fbcc70edc9e8391f000000000000000000000000913da9e88c191a531ecfc336d63d084b950850bb12ca3ad0eef370bd0000000000000000000000000000000000000000000000000d7c4ed0d9000000000000000000000000000000000000000000000000000000ed9166803d7d8d9696f219de5c0e212b866bcb6c440e00000000000000000000000000000000000000000000000000000000000000008ec294c042f68a28a9a700000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a806f6fc3a9c3a9c3a9f09f9a806f6ff09f9a80c3a9206f6ff09f9a80f09f9a806f6fc3a9c3a94d20c3a96f4d6f4d20f09f9a8000000000" + }, + { + "name": "random-(address,(bytes12,address,(address[1],bool,bool,string,uint72))[1],address,bool)", + "type": "(address,(bytes12,address,(address[1],bool,bool,string,uint72))[1],address,bool)", + "value": [ + "0x69b30a6c6706462Bc33ACBDF9762d4aCAaeF5576", + [ + [ + "0x45ae17463d1966aa8fe1765a", + "0xCafD33a9D261a6c66aEFeF1Fd4aC479818b98F4b", + [ + ["0x6dd0b99ABE7389323C32043BEd669eADd07f0B73"], + true, + true, + "Moo é🚀🚀ooooMé éo o MoMoé MéoooéMoé🚀é🚀oM o é oé ooMo🚀🚀🚀oM🚀oo🚀ooM", + "234309153431590067133" + ] + ] + ], + "0xB5474f85e53691CaE6e298e2C990BCc8eb308963", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x69b30a6c6706462Bc33ACBDF9762d4aCAaeF5576" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x45ae17463d1966aa8fe1765a" + }, + { + "type": "address", + "value": "0xCafD33a9D261a6c66aEFeF1Fd4aC479818b98F4b" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x6dd0b99ABE7389323C32043BEd669eADd07f0B73" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀🚀ooooMé éo o MoMoé MéoooéMoé🚀é🚀oM o é oé ooMo🚀🚀🚀oM🚀oo🚀ooM" + }, + { + "type": "number", + "value": "234309153431590067133" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0xB5474f85e53691CaE6e298e2C990BCc8eb308963" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061043c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610281565b60405180910390f35b61005661015a565b61005e61015a565b7369b30a6c6706462bc33acbdf9762d4acaaef5576815261007d610191565b6100856101be565b6b22d70ba31e8cb35547f0bb2d60a11b815273cafd33a9d261a6c66aefef1fd4ac479818b98f4b60208201526100b96101e2565b6100c1610216565b736dd0b99abe7389323c32043bed669eadd07f0b738152815260016020828101829052604080840192909252815160a081019092526064808352600092916103a390830139606083810191909152680cb3b1559f786cdbbd608084015260408481019390935292845250602084019290925273b5474f85e53691cae6e298e2c990bcc8eb30896391830191909152600090820152919050565b604051806080016040528060006001600160a01b0316815260200161017d610191565b815260006020820181905260409091015290565b60405180602001604052806001905b6101a86101be565b8152602001906001900390816101a05790505090565b60408051606081018252600080825260208201529081016101dd6101e2565b905290565b6040518060a001604052806101f5610216565b81526000602082018190526040820181905260608083015260809091015290565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b8181101561025a5760208185018101518683018201520161023e565b8181111561026c576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835260a080840160018060a01b038087511684870152838701516080604081818a01528485905060c08a0195506000805b60018082106102c65750610373565b8c8903609f19018452865180516001600160a01b0319168a528b81015189168c8b01528501516060868b01819052815185828d015b858210156103185782518d168152918f0191908501908f016102fb565b5050508c8201511515888c01528682015115158c8c015281015160c08b018c905291506103496101008b0183610234565b9087015168ffffffffffffffffff1660e09a909a01999099525094890194918901916001016102b7565b5050508901516001600160a01b031660608981019190915290980151151597909601969096529594505050505056fe4d6f6f20c3a9f09f9a80f09f9a806f6f6f6f4dc3a920c3a96f206f204d6f4d6fc3a9204dc3a96f6f6fc3a94d6fc3a9f09f9a80c3a9f09f9a806f4d206f20c3a9206fc3a9206f6f4d6ff09f9a80f09f9a80f09f9a806f4df09f9a806f6ff09f9a806f6f4da264697066735822122072ed6094e2264d4e685e91a8140521d528fb26c0b7b2f97e7d54f92021b6f38b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_284255b2 {\n address[1] s_0;\n bool s_1;\n bool s_2;\n string s_3;\n uint72 s_4;\n }\n\n struct S_40d18f69 {\n bytes12 s_0;\n address s_1;\n S_284255b2 s_2;\n }\n\n struct S_61e218ca {\n address s_0;\n S_40d18f69[1] s_1;\n address s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_61e218ca memory) {\n S_61e218ca memory r;\n {\n address r_0 = 0x69b30a6c6706462Bc33ACBDF9762d4aCAaeF5576;\n r.s_0 = r_0;\n }\n {\n S_40d18f69[1] memory r_1;\n {\n S_40d18f69 memory r_1_0;\n {\n bytes12 r_1_0_0 = bytes12(0x45ae17463d1966aa8fe1765a);\n r_1_0.s_0 = r_1_0_0;\n }\n {\n address r_1_0_1 = 0xCafD33a9D261a6c66aEFeF1Fd4aC479818b98F4b;\n r_1_0.s_1 = r_1_0_1;\n }\n {\n S_284255b2 memory r_1_0_2;\n {\n address[1] memory r_1_0_2_0;\n {\n address r_1_0_2_0_0 = 0x6dd0b99ABE7389323C32043BEd669eADd07f0B73;\n r_1_0_2_0[0] = r_1_0_2_0_0;\n }\n r_1_0_2.s_0 = r_1_0_2_0;\n }\n {\n bool r_1_0_2_1 = true;\n r_1_0_2.s_1 = r_1_0_2_1;\n }\n {\n bool r_1_0_2_2 = true;\n r_1_0_2.s_2 = r_1_0_2_2;\n }\n {\n string memory r_1_0_2_3 = unicode\"Moo é🚀🚀ooooMé éo o MoMoé MéoooéMoé🚀é🚀oM o é oé ooMo🚀🚀🚀oM🚀oo🚀ooM\";\n r_1_0_2.s_3 = r_1_0_2_3;\n }\n {\n uint72 r_1_0_2_4 = 234309153431590067133;\n r_1_0_2.s_4 = r_1_0_2_4;\n }\n r_1_0.s_2 = r_1_0_2;\n }\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xB5474f85e53691CaE6e298e2C990BCc8eb308963;\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000069b30a6c6706462bc33acbdf9762d4acaaef55760000000000000000000000000000000000000000000000000000000000000080000000000000000000000000b5474f85e53691cae6e298e2c990bcc8eb3089630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002045ae17463d1966aa8fe1765a0000000000000000000000000000000000000000000000000000000000000000cafd33a9d261a6c66aefef1fd4ac479818b98f4b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000006dd0b99abe7389323c32043bed669eadd07f0b730000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000cb3b1559f786cdbbd00000000000000000000000000000000000000000000000000000000000000644d6f6f20c3a9f09f9a80f09f9a806f6f6f6f4dc3a920c3a96f206f204d6f4d6fc3a9204dc3a96f6f6fc3a94d6fc3a9f09f9a80c3a9f09f9a806f4d206f20c3a9206fc3a9206f6f4d6ff09f9a80f09f9a80f09f9a806f4df09f9a806f6ff09f9a806f6f4d00000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,bool,((int152,bytes29,bool),int128[3],bytes27,int144),uint112,bytes20)[4]", + "type": "(address,bool,((int152,bytes29,bool),int128[3],bytes27,int144),uint112,bytes20)[4]", + "value": [ + [ + "0xfe257ec9A225197B5Ef581b39EdBa3C961834143", + true, + [ + [ + "-367487821529439856182634921119176115759882135", + "0x9114277f9adf59dcb919644bb0797e9fb6b545a1c15ae7ae5530811a27", + true + ], + [ + "-55354864036280381072930011386423358393", + "-129812591695521910456620563746077898552", + "158968403595070391923361597987926589550" + ], + "0x519a0a374ade9a831f749f6efb81e7b281aa204a9031a25c47a17f", + "-8435974179221311283253364389512900353606586" + ], + "1661188408825630500428136452681712", + "0x4fe2733a4825536f423022a5225dd4ffd1481b52" + ], + [ + "0xb303C4C33b1080c5B8bD12b0506639B33a52C397", + false, + [ + [ + "1334578797605152123681285783624101320913825750", + "0x3b269c4d8d0744d5207b79c085520632c9064c92888d93db4bd23cf21f", + false + ], + [ + "54681290603971129906076190089653205540", + "-168991046943715566013114202944361563725", + "47317863736967251917982592893322769889" + ], + "0x0ee5720d5e318dae6f1964b36c14d5aaae3df85f7f5eb7dc61865d", + "810330781926253792478935935734255240197179" + ], + "4893268753128527669151769062357040", + "0x8003884b8d09afb6528a29079f7a6fca7262be1d" + ], + [ + "0x1a65ae931C5f6594073633fE725E0d3b6fc6994E", + true, + [ + [ + "-1527110627501976758793339687597945559758308065", + "0x56b84ef4c000424fd4e4f2e6f5e2572cc0aa54d855162f968ab4f7698e", + true + ], + [ + "138747119980425229747649299506787878050", + "-57437622816927220753860359122631450222", + "168623085384907069677430265293169588721" + ], + "0xb6c8de0a1880347aadf721ad259f62f13b29d0def9763ecd255bbd", + "-4436776547332007995224717365652146709309011" + ], + "925887774854788713999338281311518", + "0x5fae3648f111f6819d271eec4ded1baa3acbd173" + ], + [ + "0x995823738767206Aa85A0FbC841DE67A41f7186D", + false, + [ + [ + "-195791953561049843804958689997054126997736977", + "0x885ebb053df90d7abe46b1bc3efc8933f9c93094f7c619702b14f7fa6f", + true + ], + [ + "97155587795711099786084553125234832491", + "-77712364435106515201446387809603554224", + "-116875471542183792885707106261620088159" + ], + "0xd57dd0a634810f8a2db7a527a7ebb2ad479ad34fda7acd4b49c82e", + "6338408759504293889521953865395729093937815" + ], + "884697815834412073480896793851062", + "0xa21ed9bfc65baba34473a1b72d380fd35e2d3609" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xfe257ec9A225197B5Ef581b39EdBa3C961834143" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-367487821529439856182634921119176115759882135" + }, + { + "type": "hexstring", + "value": "0x9114277f9adf59dcb919644bb0797e9fb6b545a1c15ae7ae5530811a27" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-55354864036280381072930011386423358393" + }, + { + "type": "number", + "value": "-129812591695521910456620563746077898552" + }, + { + "type": "number", + "value": "158968403595070391923361597987926589550" + } + ] + }, + { + "type": "hexstring", + "value": "0x519a0a374ade9a831f749f6efb81e7b281aa204a9031a25c47a17f" + }, + { + "type": "number", + "value": "-8435974179221311283253364389512900353606586" + } + ] + }, + { + "type": "number", + "value": "1661188408825630500428136452681712" + }, + { + "type": "hexstring", + "value": "0x4fe2733a4825536f423022a5225dd4ffd1481b52" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xb303C4C33b1080c5B8bD12b0506639B33a52C397" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1334578797605152123681285783624101320913825750" + }, + { + "type": "hexstring", + "value": "0x3b269c4d8d0744d5207b79c085520632c9064c92888d93db4bd23cf21f" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "54681290603971129906076190089653205540" + }, + { + "type": "number", + "value": "-168991046943715566013114202944361563725" + }, + { + "type": "number", + "value": "47317863736967251917982592893322769889" + } + ] + }, + { + "type": "hexstring", + "value": "0x0ee5720d5e318dae6f1964b36c14d5aaae3df85f7f5eb7dc61865d" + }, + { + "type": "number", + "value": "810330781926253792478935935734255240197179" + } + ] + }, + { + "type": "number", + "value": "4893268753128527669151769062357040" + }, + { + "type": "hexstring", + "value": "0x8003884b8d09afb6528a29079f7a6fca7262be1d" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x1a65ae931C5f6594073633fE725E0d3b6fc6994E" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-1527110627501976758793339687597945559758308065" + }, + { + "type": "hexstring", + "value": "0x56b84ef4c000424fd4e4f2e6f5e2572cc0aa54d855162f968ab4f7698e" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "138747119980425229747649299506787878050" + }, + { + "type": "number", + "value": "-57437622816927220753860359122631450222" + }, + { + "type": "number", + "value": "168623085384907069677430265293169588721" + } + ] + }, + { + "type": "hexstring", + "value": "0xb6c8de0a1880347aadf721ad259f62f13b29d0def9763ecd255bbd" + }, + { + "type": "number", + "value": "-4436776547332007995224717365652146709309011" + } + ] + }, + { + "type": "number", + "value": "925887774854788713999338281311518" + }, + { + "type": "hexstring", + "value": "0x5fae3648f111f6819d271eec4ded1baa3acbd173" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x995823738767206Aa85A0FbC841DE67A41f7186D" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-195791953561049843804958689997054126997736977" + }, + { + "type": "hexstring", + "value": "0x885ebb053df90d7abe46b1bc3efc8933f9c93094f7c619702b14f7fa6f" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "97155587795711099786084553125234832491" + }, + { + "type": "number", + "value": "-77712364435106515201446387809603554224" + }, + { + "type": "number", + "value": "-116875471542183792885707106261620088159" + } + ] + }, + { + "type": "hexstring", + "value": "0xd57dd0a634810f8a2db7a527a7ebb2ad479ad34fda7acd4b49c82e" + }, + { + "type": "number", + "value": "6338408759504293889521953865395729093937815" + } + ] + }, + { + "type": "number", + "value": "884697815834412073480896793851062" + }, + { + "type": "hexstring", + "value": "0xa21ed9bfc65baba34473a1b72d380fd35e2d3609" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610792806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061065b565b60405180910390f35b6100566105b0565b61005e6105b0565b6100666105dd565b73fe257ec9a225197b5ef581b39edba3c96183414381526001602082015261008c610610565b6040805160608101825272107a8da5401e38e55a544ac57f2f3042981f961981527f9114277f9adf59dcb919644bb0797e9fb6b545a1c15ae7ae5530811a27000000602082015260019181019190915281526100e661063d565b6f29a4f5826ec7f7b2b00745c5d51533b81981526f61a8fee98115e326710e345835557737196020808301919091526f7798336c2f4b40eb6f44d263cfc8406e604080840191909152908301919091527f519a0a374ade9a831f749f6efb81e7b281aa204a9031a25c47a17f0000000000828201527160d719982f19b0f05582b1010230665243b919606080840191909152908301919091526d51e7253d94105844f1d9b6976ff0908201527327f1399d2412a9b7a1181152912eea7fe8a40da960611b608082015281526101b96105dd565b73b303c4c33b1080c5b8bd12b0506639b33a52c3978152600060208201526101df610610565b60408051606081018252600091810191909152723bd83697e1351ce7500b147bd24a8ad4e7afd681527f3b269c4d8d0744d5207b79c085520632c9064c92888d93db4bd23cf21f0000006020820152815261023861063d565b6f29233bc678d6f4b3bf3b6e1dd6b73a2481526f7f227de442a018e304a67feb83cd864c196020808301919091526f239916cd21754441b8656e459467b5e1604080840191909152838201929092527f0ee5720d5e318dae6f1964b36c14d5aaae3df85f7f5eb7dc61865d00000000008383015271094d591fc6ecb7d322ad1b18f0c7dcbdb43b606080850191909152918401929092526df141bc149975422ea9c4afa5383090830152738003884b8d09afb6528a29079f7a6fca7262be1d60601b608083015282015261030a6105dd565b731a65ae931c5f6594073633fe725e0d3b6fc6994e815260016020820152610330610610565b6040805160608101825272447a5eca0dcdcc08834986ffff30ba38a682e01981527f56b84ef4c000424fd4e4f2e6f5e2572cc0aa54d855162f968ab4f7698e0000006020820152600191810191909152815261038a61063d565b6f6861b92aa21091149cf07309d5d984a281526f2b36157210cf9e0f2fad0cf1f95ade6d196020808301919091526f7edb9ffc7244eb15a407f3527e2179f1604080840191909152908301919091527fb6c8de0a1880347aadf721ad259f62f13b29d0def9763ecd255bbd0000000000828201527132ee83b0e7faee3692ea9167eeeb660ba65219606080840191909152838201929092526d2da658c0c27e9390469747af1d1e91830191909152735fae3648f111f6819d271eec4ded1baa3acbd17360601b60808301528201526104606105dd565b73995823738767206aa85a0fbc841de67a41f7186d815260006020820152610486610610565b604080516060810182527208c794d69f54815eed7d052b20451ca06d8e101981527f885ebb053df90d7abe46b1bc3efc8933f9c93094f7c619702b14f7fa6f000000602082015260019181019190915281526104e061063d565b6f49177c4ef90dc46ecccbdd18fa2d746b81526f3a76db627b77879d290b020c32e00baf196020808301919091526f57ed65a4765f8b3c842553db7905dd5e19604080840191909152908301919091527fd57dd0a634810f8a2db7a527a7ebb2ad479ad34fda7acd4b49c82e0000000000828201527148c2e8c2f835908ed0dc2eac148e76acca97606080840191909152908301919091526d2b9e74d139ea83845179605cb4b68282015273a21ed9bfc65baba34473a1b72d380fd35e2d360960601b6080830152820152919050565b60405180608001604052806004905b6105c76105dd565b8152602001906001900390816105bf5790505090565b6040805160a081018252600080825260208201529081016105fc610610565b815260006020820181905260409091015290565b6040805160e0810190915260006080820181815260a0830182905260c08301919091528152602081016105fc5b60405180606001604052806003906020820280368337509192915050565b610600810181836000805b600481101561075257825180516001600160a01b031685526020808201511515818701526040808301518051805160120b838a01528084015162ffffff19166060808b01919091529083015115156080808b0191909152828501519160a08b01895b60038110156106e8578451600f0b825293870193908701906001016106c8565b50509383015164ffffffffff19166101008b01529183015160110b6101208a015250908301516dffffffffffffffffffffffffffff1661014088015291909101516bffffffffffffffffffffffff1916610160860152610180909401939290920191600101610666565b505050509291505056fea2646970667358221220383d41de733ddf8355b1dc23296eb4b6f25762d9a9d46766895fda7ea964bc9364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0f3f9a44 {\n int152 s_0;\n bytes29 s_1;\n bool s_2;\n }\n\n struct S_d4baab0b {\n S_0f3f9a44 s_0;\n int128[3] s_1;\n bytes27 s_2;\n int144 s_3;\n }\n\n struct S_76980607 {\n address s_0;\n bool s_1;\n S_d4baab0b s_2;\n uint112 s_3;\n bytes20 s_4;\n }\n\n function test () public pure returns (S_76980607[4] memory) {\n S_76980607[4] memory r;\n {\n S_76980607 memory r_0;\n {\n address r_0_0 = 0xfe257ec9A225197B5Ef581b39EdBa3C961834143;\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0.s_1 = r_0_1;\n }\n {\n S_d4baab0b memory r_0_2;\n {\n S_0f3f9a44 memory r_0_2_0;\n {\n int152 r_0_2_0_0 = -367487821529439856182634921119176115759882135;\n r_0_2_0.s_0 = r_0_2_0_0;\n }\n {\n bytes29 r_0_2_0_1 = bytes29(0x9114277f9adf59dcb919644bb0797e9fb6b545a1c15ae7ae5530811a27);\n r_0_2_0.s_1 = r_0_2_0_1;\n }\n {\n bool r_0_2_0_2 = true;\n r_0_2_0.s_2 = r_0_2_0_2;\n }\n r_0_2.s_0 = r_0_2_0;\n }\n {\n int128[3] memory r_0_2_1;\n {\n int128 r_0_2_1_0 = -55354864036280381072930011386423358393;\n r_0_2_1[0] = r_0_2_1_0;\n }\n {\n int128 r_0_2_1_1 = -129812591695521910456620563746077898552;\n r_0_2_1[1] = r_0_2_1_1;\n }\n {\n int128 r_0_2_1_2 = 158968403595070391923361597987926589550;\n r_0_2_1[2] = r_0_2_1_2;\n }\n r_0_2.s_1 = r_0_2_1;\n }\n {\n bytes27 r_0_2_2 = bytes27(0x519a0a374ade9a831f749f6efb81e7b281aa204a9031a25c47a17f);\n r_0_2.s_2 = r_0_2_2;\n }\n {\n int144 r_0_2_3 = -8435974179221311283253364389512900353606586;\n r_0_2.s_3 = r_0_2_3;\n }\n r_0.s_2 = r_0_2;\n }\n {\n uint112 r_0_3 = 1661188408825630500428136452681712;\n r_0.s_3 = r_0_3;\n }\n {\n bytes20 r_0_4 = bytes20(0x4fe2733a4825536f423022a5225DD4Ffd1481b52);\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_76980607 memory r_1;\n {\n address r_1_0 = 0xb303C4C33b1080c5B8bD12b0506639B33a52C397;\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1.s_1 = r_1_1;\n }\n {\n S_d4baab0b memory r_1_2;\n {\n S_0f3f9a44 memory r_1_2_0;\n {\n int152 r_1_2_0_0 = 1334578797605152123681285783624101320913825750;\n r_1_2_0.s_0 = r_1_2_0_0;\n }\n {\n bytes29 r_1_2_0_1 = bytes29(0x3b269c4d8d0744d5207b79c085520632c9064c92888d93db4bd23cf21f);\n r_1_2_0.s_1 = r_1_2_0_1;\n }\n {\n bool r_1_2_0_2 = false;\n r_1_2_0.s_2 = r_1_2_0_2;\n }\n r_1_2.s_0 = r_1_2_0;\n }\n {\n int128[3] memory r_1_2_1;\n {\n int128 r_1_2_1_0 = 54681290603971129906076190089653205540;\n r_1_2_1[0] = r_1_2_1_0;\n }\n {\n int128 r_1_2_1_1 = -168991046943715566013114202944361563725;\n r_1_2_1[1] = r_1_2_1_1;\n }\n {\n int128 r_1_2_1_2 = 47317863736967251917982592893322769889;\n r_1_2_1[2] = r_1_2_1_2;\n }\n r_1_2.s_1 = r_1_2_1;\n }\n {\n bytes27 r_1_2_2 = bytes27(0x0ee5720d5e318dae6f1964b36c14d5aaae3df85f7f5eb7dc61865d);\n r_1_2.s_2 = r_1_2_2;\n }\n {\n int144 r_1_2_3 = 810330781926253792478935935734255240197179;\n r_1_2.s_3 = r_1_2_3;\n }\n r_1.s_2 = r_1_2;\n }\n {\n uint112 r_1_3 = 4893268753128527669151769062357040;\n r_1.s_3 = r_1_3;\n }\n {\n bytes20 r_1_4 = bytes20(0x8003884B8d09afB6528A29079F7A6FcA7262bE1D);\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n {\n S_76980607 memory r_2;\n {\n address r_2_0 = 0x1a65ae931C5f6594073633fE725E0d3b6fc6994E;\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2.s_1 = r_2_1;\n }\n {\n S_d4baab0b memory r_2_2;\n {\n S_0f3f9a44 memory r_2_2_0;\n {\n int152 r_2_2_0_0 = -1527110627501976758793339687597945559758308065;\n r_2_2_0.s_0 = r_2_2_0_0;\n }\n {\n bytes29 r_2_2_0_1 = bytes29(0x56b84ef4c000424fd4e4f2e6f5e2572cc0aa54d855162f968ab4f7698e);\n r_2_2_0.s_1 = r_2_2_0_1;\n }\n {\n bool r_2_2_0_2 = true;\n r_2_2_0.s_2 = r_2_2_0_2;\n }\n r_2_2.s_0 = r_2_2_0;\n }\n {\n int128[3] memory r_2_2_1;\n {\n int128 r_2_2_1_0 = 138747119980425229747649299506787878050;\n r_2_2_1[0] = r_2_2_1_0;\n }\n {\n int128 r_2_2_1_1 = -57437622816927220753860359122631450222;\n r_2_2_1[1] = r_2_2_1_1;\n }\n {\n int128 r_2_2_1_2 = 168623085384907069677430265293169588721;\n r_2_2_1[2] = r_2_2_1_2;\n }\n r_2_2.s_1 = r_2_2_1;\n }\n {\n bytes27 r_2_2_2 = bytes27(0xb6c8de0a1880347aadf721ad259f62f13b29d0def9763ecd255bbd);\n r_2_2.s_2 = r_2_2_2;\n }\n {\n int144 r_2_2_3 = -4436776547332007995224717365652146709309011;\n r_2_2.s_3 = r_2_2_3;\n }\n r_2.s_2 = r_2_2;\n }\n {\n uint112 r_2_3 = 925887774854788713999338281311518;\n r_2.s_3 = r_2_3;\n }\n {\n bytes20 r_2_4 = bytes20(0x5faE3648f111f6819d271Eec4ded1BaA3ACbD173);\n r_2.s_4 = r_2_4;\n }\n r[2] = r_2;\n }\n {\n S_76980607 memory r_3;\n {\n address r_3_0 = 0x995823738767206Aa85A0FbC841DE67A41f7186D;\n r_3.s_0 = r_3_0;\n }\n {\n bool r_3_1 = false;\n r_3.s_1 = r_3_1;\n }\n {\n S_d4baab0b memory r_3_2;\n {\n S_0f3f9a44 memory r_3_2_0;\n {\n int152 r_3_2_0_0 = -195791953561049843804958689997054126997736977;\n r_3_2_0.s_0 = r_3_2_0_0;\n }\n {\n bytes29 r_3_2_0_1 = bytes29(0x885ebb053df90d7abe46b1bc3efc8933f9c93094f7c619702b14f7fa6f);\n r_3_2_0.s_1 = r_3_2_0_1;\n }\n {\n bool r_3_2_0_2 = true;\n r_3_2_0.s_2 = r_3_2_0_2;\n }\n r_3_2.s_0 = r_3_2_0;\n }\n {\n int128[3] memory r_3_2_1;\n {\n int128 r_3_2_1_0 = 97155587795711099786084553125234832491;\n r_3_2_1[0] = r_3_2_1_0;\n }\n {\n int128 r_3_2_1_1 = -77712364435106515201446387809603554224;\n r_3_2_1[1] = r_3_2_1_1;\n }\n {\n int128 r_3_2_1_2 = -116875471542183792885707106261620088159;\n r_3_2_1[2] = r_3_2_1_2;\n }\n r_3_2.s_1 = r_3_2_1;\n }\n {\n bytes27 r_3_2_2 = bytes27(0xd57dd0a634810f8a2db7a527a7ebb2ad479ad34fda7acd4b49c82e);\n r_3_2.s_2 = r_3_2_2;\n }\n {\n int144 r_3_2_3 = 6338408759504293889521953865395729093937815;\n r_3_2.s_3 = r_3_2_3;\n }\n r_3.s_2 = r_3_2;\n }\n {\n uint112 r_3_3 = 884697815834412073480896793851062;\n r_3.s_3 = r_3_3;\n }\n {\n bytes20 r_3_4 = bytes20(0xA21ed9BfC65BabA34473a1b72d380fD35E2d3609);\n r_3.s_4 = r_3_4;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000fe257ec9a225197b5ef581b39edba3c9618341430000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffef85725abfe1c71aa5abb53a80d0cfbd67e0699114277f9adf59dcb919644bb0797e9fb6b545a1c15ae7ae5530811a270000000000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffd65b0a7d9138084d4ff8ba3a2aeacc47ffffffffffffffffffffffffffffffff9e5701167eea1cd98ef1cba7caaa88c8000000000000000000000000000000007798336c2f4b40eb6f44d263cfc8406e519a0a374ade9a831f749f6efb81e7b281aa204a9031a25c47a17f0000000000ffffffffffffffffffffffffffff9f28e667d0e64f0faa7d4efefdcf99adbc4600000000000000000000000000000000000051e7253d94105844f1d9b6976ff04fe2733a4825536f423022a5225dd4ffd1481b52000000000000000000000000000000000000000000000000b303c4c33b1080c5b8bd12b0506639b33a52c3970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003bd83697e1351ce7500b147bd24a8ad4e7afd63b269c4d8d0744d5207b79c085520632c9064c92888d93db4bd23cf21f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029233bc678d6f4b3bf3b6e1dd6b73a24ffffffffffffffffffffffffffffffff80dd821bbd5fe71cfb5980147c3279b300000000000000000000000000000000239916cd21754441b8656e459467b5e10ee5720d5e318dae6f1964b36c14d5aaae3df85f7f5eb7dc61865d00000000000000000000000000000000000000094d591fc6ecb7d322ad1b18f0c7dcbdb43b000000000000000000000000000000000000f141bc149975422ea9c4afa538308003884b8d09afb6528a29079f7a6fca7262be1d0000000000000000000000000000000000000000000000001a65ae931c5f6594073633fe725e0d3b6fc6994e0000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffbb85a135f23233f77cb6790000cf45c7597d1f56b84ef4c000424fd4e4f2e6f5e2572cc0aa54d855162f968ab4f7698e0000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000006861b92aa21091149cf07309d5d984a2ffffffffffffffffffffffffffffffffd4c9ea8def3061f0d052f30e06a52192000000000000000000000000000000007edb9ffc7244eb15a407f3527e2179f1b6c8de0a1880347aadf721ad259f62f13b29d0def9763ecd255bbd0000000000ffffffffffffffffffffffffffffcd117c4f180511c96d156e98111499f459ad0000000000000000000000000000000000002da658c0c27e9390469747af1d1e5fae3648f111f6819d271eec4ded1baa3acbd173000000000000000000000000000000000000000000000000995823738767206aa85a0fbc841de67a41f7186d0000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffff7386b2960ab7ea11282fad4dfbae35f9271ef885ebb053df90d7abe46b1bc3efc8933f9c93094f7c619702b14f7fa6f00000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000049177c4ef90dc46ecccbdd18fa2d746bffffffffffffffffffffffffffffffffc589249d84887862d6f4fdf3cd1ff450ffffffffffffffffffffffffffffffffa8129a5b89a074c37bdaac2486fa22a1d57dd0a634810f8a2db7a527a7ebb2ad479ad34fda7acd4b49c82e0000000000000000000000000000000000000048c2e8c2f835908ed0dc2eac148e76acca970000000000000000000000000000000000002b9e74d139ea83845179605cb4b6a21ed9bfc65baba34473a1b72d380fd35e2d3609000000000000000000000000" + }, + { + "name": "random-(address,uint128,address,address[3],(bytes32,string[4],bytes24[2][],bytes12))", + "type": "(address,uint128,address,address[3],(bytes32,string[4],bytes24[2][],bytes12))", + "value": [ + "0x623683292e6D148c8E2787eCccef94545766D9Ad", + "181486589979320913748479475800337785323", + "0x565413c8EA20764129f6397D0A2dB08BD3Ab5672", + [ + "0x9d8aa1bfF6234B5ba5ca712DcE4C198131F466b3", + "0xaE798e08E4DCcC293dbbc0b1326Ae303c08724F4", + "0x346Bc5bD0Bd359Cf6B199E608099Eb7782A19032" + ], + [ + "0xfbd8b4a9748409b3fda8469d009670f7ff6532ce4be5129a5e4838c97e21dc4a", + [ + "Moo é🚀oéMooéMo🚀M🚀M🚀MéoMéoéo🚀oMoééoM o🚀é🚀o ééMo", + "Moo é🚀éooééééo🚀o oo🚀oMoMMoé🚀oM ooooo 🚀oMooo🚀o", + "Moo é🚀é🚀oéoMoo🚀é 🚀é🚀 oooM éo🚀 oé🚀 é o🚀M🚀 🚀🚀ooéMMéo o Méo", + "Moo é🚀🚀🚀ooMoooéoMoé🚀o🚀éoo🚀o éMMMé " + ], + [ + [ + "0x49c91bec86a512f26eda35703225ea9b53c2557d4575d520", + "0xf6e5a539f062b9c30b5b19d68ad045204bd9ce953230207d" + ], + [ + "0xec204dafacbd736ec52934f97515c418f81c228ede180672", + "0x73078cb529d29e0605dc109dca896ab550250a7c7019d03b" + ], + [ + "0x961b5ab80cbc2f1c83f547fd2b7f903b516fe8ac561eca53", + "0xf5745f1c312cad3f435f565a8ca5c20fd275cc1e098e8ea7" + ], + [ + "0xb1a5fac7c8922daae536840282cc6cf0db9f0ec557ad70db", + "0xc29bb9528069fd52df5613d52679fe8961e2b84795ce964e" + ] + ], + "0xbfce54ac9a7e883f7fa4d6e7" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x623683292e6D148c8E2787eCccef94545766D9Ad" + }, + { + "type": "number", + "value": "181486589979320913748479475800337785323" + }, + { + "type": "address", + "value": "0x565413c8EA20764129f6397D0A2dB08BD3Ab5672" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x9d8aa1bfF6234B5ba5ca712DcE4C198131F466b3" + }, + { + "type": "address", + "value": "0xaE798e08E4DCcC293dbbc0b1326Ae303c08724F4" + }, + { + "type": "address", + "value": "0x346Bc5bD0Bd359Cf6B199E608099Eb7782A19032" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xfbd8b4a9748409b3fda8469d009670f7ff6532ce4be5129a5e4838c97e21dc4a" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéMooéMo🚀M🚀M🚀MéoMéoéo🚀oMoééoM o🚀é🚀o ééMo" + }, + { + "type": "string", + "value": "Moo é🚀éooééééo🚀o oo🚀oMoMMoé🚀oM ooooo 🚀oMooo🚀o" + }, + { + "type": "string", + "value": "Moo é🚀é🚀oéoMoo🚀é 🚀é🚀 oooM éo🚀 oé🚀 é o🚀M🚀 🚀🚀ooéMMéo o Méo" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀ooMoooéoMoé🚀o🚀éoo🚀o éMMMé " + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x49c91bec86a512f26eda35703225ea9b53c2557d4575d520" + }, + { + "type": "hexstring", + "value": "0xf6e5a539f062b9c30b5b19d68ad045204bd9ce953230207d" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xec204dafacbd736ec52934f97515c418f81c228ede180672" + }, + { + "type": "hexstring", + "value": "0x73078cb529d29e0605dc109dca896ab550250a7c7019d03b" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x961b5ab80cbc2f1c83f547fd2b7f903b516fe8ac561eca53" + }, + { + "type": "hexstring", + "value": "0xf5745f1c312cad3f435f565a8ca5c20fd275cc1e098e8ea7" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xb1a5fac7c8922daae536840282cc6cf0db9f0ec557ad70db" + }, + { + "type": "hexstring", + "value": "0xc29bb9528069fd52df5613d52679fe8961e2b84795ce964e" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xbfce54ac9a7e883f7fa4d6e7" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506107fa806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906105ec565b60405180910390f35b6100566103e9565b61005e6103e9565b73623683292e6d148c8e2787ecccef94545766d9ad81526f88890bba8146d8fff2ee4584fe57a1eb602082015273565413c8ea20764129f6397d0a2db08bd3ab567260408201526100ad610424565b739d8aa1bff6234b5ba5ca712dce4c198131f466b3815273ae798e08e4dccc293dbbc0b1326ae303c08724f4602082015273346bc5bd0bd359cf6b199e608099eb7782a1903260408201526060820152610105610442565b7ffbd8b4a9748409b3fda8469d009670f7ff6532ce4be5129a5e4838c97e21dc4a8152610130610471565b60006040518060800160405280604e8152602001610691604e9139825250604080516080810190915260468082526000919061077f602083013990508082600160200201819052505060006040518060a00160405280606681526020016106df60669139604080840191909152805160608101909152603a808252600092506107456020830139606083015250602082015260408051600480825260a08201909252600091816020015b6101e2610498565b8152602001906001900390816101da5790505090506101ff610498565b7f49c91bec86a512f26eda35703225ea9b53c2557d4575d520000000000000000081527ff6e5a539f062b9c30b5b19d68ad045204bd9ce953230207d0000000000000000602082015281518190839060009061025d5761025d61067a565b602002602001018190525050610271610498565b7fec204dafacbd736ec52934f97515c418f81c228ede180672000000000000000081527f73078cb529d29e0605dc109dca896ab550250a7c7019d03b0000000000000000602082015281518190839060019081106102d1576102d161067a565b6020026020010181905250506102e5610498565b7f961b5ab80cbc2f1c83f547fd2b7f903b516fe8ac561eca53000000000000000081527ff5745f1c312cad3f435f565a8ca5c20fd275cc1e098e8ea70000000000000000602082015281518190839060029081106103455761034561067a565b602002602001018190525050610359610498565b7fb1a5fac7c8922daae536840282cc6cf0db9f0ec557ad70db000000000000000081527fc29bb9528069fd52df5613d52679fe8961e2b84795ce964e0000000000000000602082015281518190839060039081106103b9576103b961067a565b60209081029190910101525060408201526bbfce54ac9a7e883f7fa4d6e760a01b60608201526080820152919050565b6040805160a0810182526000808252602082018190529181019190915260608101610412610424565b815260200161041f610442565b905290565b60405180606001604052806003906020820280368337509192915050565b6040805160808101909152600081526020810161045d610471565b815260606020820152600060409091015290565b60405180608001604052806004905b60608152602001906001900390816104805790505090565b60405180604001604052806002906020820280368337509192915050565b60008151808452602080850194508084016000805b8481101561051657825188835b600281101561050057825167ffffffffffffffff1916825291860191908601906001016104d8565b50505060409790970196918301916001016104cb565b50959695505050505050565b8051825260208082015160808285018190526000926101008601929091860184805b60048110156105aa57888603607f1901835283518051808852835b8181101561057a57828101880151898201890152870161055f565b8181111561058a578488838b0101525b50601f01601f191696909601850195509284019291840191600101610544565b5050505050604083015184820360408601526105c682826104b6565b91505060608301516105e460608601826001600160a01b0319169052565b509392505050565b6000602080835260018060a01b0380855116828501526fffffffffffffffffffffffffffffffff8286015116604085015280604086015116606085015260608501516080850160005b6003811015610654578251841682529184019190840190600101610635565b5050505050608083015160e080840152610672610100840182610522565b949350505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806fc3a94d6f6fc3a94d6ff09f9a804df09f9a804df09f9a804dc3a96f4dc3a96fc3a96ff09f9a806f4d6fc3a9c3a96f4d206ff09f9a80c3a9f09f9a806f20c3a9c3a94d6f4d6f6f20c3a9f09f9a80c3a9f09f9a806fc3a96f4d6f6ff09f9a80c3a920f09f9a80c3a9f09f9a802020206f6f6f4d20c3a96ff09f9a80206fc3a9f09f9a8020c3a9206ff09f9a804df09f9a8020f09f9a80f09f9a806f6fc3a94d4dc3a96f206f204dc3a96f4d6f6f20c3a9f09f9a80f09f9a80f09f9a806f6f4d6f6f6fc3a96f4d6fc3a9f09f9a806ff09f9a80c3a96f6ff09f9a806f20c3a94d4d4dc3a9204d6f6f20c3a9f09f9a80c3a96f6fc3a9c3a9c3a9c3a96ff09f9a806f206f6ff09f9a806f4d6f4d4d6fc3a9f09f9a806f4d206f6f6f6f6f20f09f9a806f4d6f6f6ff09f9a806fa2646970667358221220aa57752d215dadfcd6388fcc6e70f39e3dfa9239bb02b646eed033114f1dafa764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_1ad9ae0d {\n bytes32 s_0;\n string[4] s_1;\n bytes24[2][] s_2;\n bytes12 s_3;\n }\n\n struct S_a75cf3f0 {\n address s_0;\n uint128 s_1;\n address s_2;\n address[3] s_3;\n S_1ad9ae0d s_4;\n }\n\n function test () public pure returns (S_a75cf3f0 memory) {\n S_a75cf3f0 memory r;\n {\n address r_0 = 0x623683292e6D148c8E2787eCccef94545766D9Ad;\n r.s_0 = r_0;\n }\n {\n uint128 r_1 = 181486589979320913748479475800337785323;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x565413c8EA20764129f6397D0A2dB08BD3Ab5672;\n r.s_2 = r_2;\n }\n {\n address[3] memory r_3;\n {\n address r_3_0 = 0x9d8aa1bfF6234B5ba5ca712DcE4C198131F466b3;\n r_3[0] = r_3_0;\n }\n {\n address r_3_1 = 0xaE798e08E4DCcC293dbbc0b1326Ae303c08724F4;\n r_3[1] = r_3_1;\n }\n {\n address r_3_2 = 0x346Bc5bD0Bd359Cf6B199E608099Eb7782A19032;\n r_3[2] = r_3_2;\n }\n r.s_3 = r_3;\n }\n {\n S_1ad9ae0d memory r_4;\n {\n bytes32 r_4_0 = bytes32(0xfbd8b4a9748409b3fda8469d009670f7ff6532ce4be5129a5e4838c97e21dc4a);\n r_4.s_0 = r_4_0;\n }\n {\n string[4] memory r_4_1;\n {\n string memory r_4_1_0 = unicode\"Moo é🚀oéMooéMo🚀M🚀M🚀MéoMéoéo🚀oMoééoM o🚀é🚀o ééMo\";\n r_4_1[0] = r_4_1_0;\n }\n {\n string memory r_4_1_1 = unicode\"Moo é🚀éooééééo🚀o oo🚀oMoMMoé🚀oM ooooo 🚀oMooo🚀o\";\n r_4_1[1] = r_4_1_1;\n }\n {\n string memory r_4_1_2 = unicode\"Moo é🚀é🚀oéoMoo🚀é 🚀é🚀 oooM éo🚀 oé🚀 é o🚀M🚀 🚀🚀ooéMMéo o Méo\";\n r_4_1[2] = r_4_1_2;\n }\n {\n string memory r_4_1_3 = unicode\"Moo é🚀🚀🚀ooMoooéoMoé🚀o🚀éoo🚀o éMMMé \";\n r_4_1[3] = r_4_1_3;\n }\n r_4.s_1 = r_4_1;\n }\n {\n bytes24[2][] memory r_4_2 = new bytes24[2][](4);\n {\n bytes24[2] memory r_4_2_0;\n {\n bytes24 r_4_2_0_0 = bytes24(0x49c91bec86a512f26eda35703225ea9b53c2557d4575d520);\n r_4_2_0[0] = r_4_2_0_0;\n }\n {\n bytes24 r_4_2_0_1 = bytes24(0xf6e5a539f062b9c30b5b19d68ad045204bd9ce953230207d);\n r_4_2_0[1] = r_4_2_0_1;\n }\n r_4_2[0] = r_4_2_0;\n }\n {\n bytes24[2] memory r_4_2_1;\n {\n bytes24 r_4_2_1_0 = bytes24(0xec204dafacbd736ec52934f97515c418f81c228ede180672);\n r_4_2_1[0] = r_4_2_1_0;\n }\n {\n bytes24 r_4_2_1_1 = bytes24(0x73078cb529d29e0605dc109dca896ab550250a7c7019d03b);\n r_4_2_1[1] = r_4_2_1_1;\n }\n r_4_2[1] = r_4_2_1;\n }\n {\n bytes24[2] memory r_4_2_2;\n {\n bytes24 r_4_2_2_0 = bytes24(0x961b5ab80cbc2f1c83f547fd2b7f903b516fe8ac561eca53);\n r_4_2_2[0] = r_4_2_2_0;\n }\n {\n bytes24 r_4_2_2_1 = bytes24(0xf5745f1c312cad3f435f565a8ca5c20fd275cc1e098e8ea7);\n r_4_2_2[1] = r_4_2_2_1;\n }\n r_4_2[2] = r_4_2_2;\n }\n {\n bytes24[2] memory r_4_2_3;\n {\n bytes24 r_4_2_3_0 = bytes24(0xb1a5fac7c8922daae536840282cc6cf0db9f0ec557ad70db);\n r_4_2_3[0] = r_4_2_3_0;\n }\n {\n bytes24 r_4_2_3_1 = bytes24(0xc29bb9528069fd52df5613d52679fe8961e2b84795ce964e);\n r_4_2_3[1] = r_4_2_3_1;\n }\n r_4_2[3] = r_4_2_3;\n }\n r_4.s_2 = r_4_2;\n }\n {\n bytes12 r_4_3 = bytes12(0xbfce54ac9a7e883f7fa4d6e7);\n r_4.s_3 = r_4_3;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000623683292e6d148c8e2787ecccef94545766d9ad0000000000000000000000000000000088890bba8146d8fff2ee4584fe57a1eb000000000000000000000000565413c8ea20764129f6397d0a2db08bd3ab56720000000000000000000000009d8aa1bff6234b5ba5ca712dce4c198131f466b3000000000000000000000000ae798e08e4dccc293dbbc0b1326ae303c08724f4000000000000000000000000346bc5bd0bd359cf6b199e608099eb7782a1903200000000000000000000000000000000000000000000000000000000000000e0fbd8b4a9748409b3fda8469d009670f7ff6532ce4be5129a5e4838c97e21dc4a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000300bfce54ac9a7e883f7fa4d6e700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a806fc3a94d6f6fc3a94d6ff09f9a804df09f9a804df09f9a804dc3a96f4dc3a96fc3a96ff09f9a806f4d6fc3a9c3a96f4d206ff09f9a80c3a9f09f9a806f20c3a9c3a94d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a80c3a96f6fc3a9c3a9c3a9c3a96ff09f9a806f206f6ff09f9a806f4d6f4d4d6fc3a9f09f9a806f4d206f6f6f6f6f20f09f9a806f4d6f6f6ff09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000664d6f6f20c3a9f09f9a80c3a9f09f9a806fc3a96f4d6f6ff09f9a80c3a920f09f9a80c3a9f09f9a802020206f6f6f4d20c3a96ff09f9a80206fc3a9f09f9a8020c3a9206ff09f9a804df09f9a8020f09f9a80f09f9a806f6fc3a94d4dc3a96f206f204dc3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a4d6f6f20c3a9f09f9a80f09f9a80f09f9a806f6f4d6f6f6fc3a96f4d6fc3a9f09f9a806ff09f9a80c3a96f6ff09f9a806f20c3a94d4d4dc3a920000000000000000000000000000000000000000000000000000000000000000000000000000449c91bec86a512f26eda35703225ea9b53c2557d4575d5200000000000000000f6e5a539f062b9c30b5b19d68ad045204bd9ce953230207d0000000000000000ec204dafacbd736ec52934f97515c418f81c228ede180672000000000000000073078cb529d29e0605dc109dca896ab550250a7c7019d03b0000000000000000961b5ab80cbc2f1c83f547fd2b7f903b516fe8ac561eca530000000000000000f5745f1c312cad3f435f565a8ca5c20fd275cc1e098e8ea70000000000000000b1a5fac7c8922daae536840282cc6cf0db9f0ec557ad70db0000000000000000c29bb9528069fd52df5613d52679fe8961e2b84795ce964e0000000000000000" + }, + { + "name": "random-(address[1],address,(bytes14,bytes7,address,bytes3,address)[2],(address,(address)),address)", + "type": "(address[1],address,(bytes14,bytes7,address,bytes3,address)[2],(address,(address)),address)", + "value": [ + ["0xF4048F1fdB33fb34F210a04B76fe3891DACA0d3A"], + "0x8474Eda60F21751aD1316A48619cc3b4CFAc8df4", + [ + [ + "0xee71fb07c54a93fc03fd34ae5dd7", + "0x287474777ad165", + "0x26E7AB9Bdd0aFd87aC3e8FEAf221c2DBBFe4EDa4", + "0xd7d34b", + "0xA3A9669f2c1e6c07E462DBe6DB747F042f6AA805" + ], + [ + "0xc0e715e8adec5eb09f42fad287ec", + "0x5055dd34fa1a72", + "0xFA4655227Cc6d9a8D4100F45570F3081D6b6fF4b", + "0xc4f456", + "0x4D53CD834d0fF8B59Ec77c2FEf5Ed69a22F94271" + ] + ], + [ + "0xF3a991510D1007f8729B2D544Ba59A8AA78b9687", + ["0x251622fd83bCa18139752687e03903Fe90B96382"] + ], + "0xE52ae73115feeFe7352703DdBa9c4105c94D6460" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xF4048F1fdB33fb34F210a04B76fe3891DACA0d3A" + } + ] + }, + { + "type": "address", + "value": "0x8474Eda60F21751aD1316A48619cc3b4CFAc8df4" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xee71fb07c54a93fc03fd34ae5dd7" + }, + { + "type": "hexstring", + "value": "0x287474777ad165" + }, + { + "type": "address", + "value": "0x26E7AB9Bdd0aFd87aC3e8FEAf221c2DBBFe4EDa4" + }, + { + "type": "hexstring", + "value": "0xd7d34b" + }, + { + "type": "address", + "value": "0xA3A9669f2c1e6c07E462DBe6DB747F042f6AA805" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc0e715e8adec5eb09f42fad287ec" + }, + { + "type": "hexstring", + "value": "0x5055dd34fa1a72" + }, + { + "type": "address", + "value": "0xFA4655227Cc6d9a8D4100F45570F3081D6b6fF4b" + }, + { + "type": "hexstring", + "value": "0xc4f456" + }, + { + "type": "address", + "value": "0x4D53CD834d0fF8B59Ec77c2FEf5Ed69a22F94271" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xF3a991510D1007f8729B2D544Ba59A8AA78b9687" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x251622fd83bCa18139752687e03903Fe90B96382" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xE52ae73115feeFe7352703DdBa9c4105c94D6460" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061042e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610360565b60405180910390f35b61005661020f565b61005e61020f565b610066610267565b73f4048f1fdb33fb34f210a04b76fe3891daca0d3a81528152738474eda60f21751ad1316a48619cc3b4cfac8df460208201526100a1610285565b6040805160a080820183526dee71fb07c54a93fc03fd34ae5dd760901b825266287474777ad16560c81b6020808401919091527326e7ab9bdd0afd87ac3e8feaf221c2dbbfe4eda48385015262d7d34b60e81b60608085019190915273a3a9669f2c1e6c07e462dbe6db747f042f6aa805608080860191909152938652845192830185526d3039c57a2b7b17ac27d0beb4a1fb60921b835266282aee9a7d0d3960c91b8383015273fa4655227cc6d9a8d4100f45570f3081d6b6ff4b8386015262627a2b60e91b90830152734d53cd834d0ff8b59ec77c2fef5ed69a22f94271928201929092528382015283820192909252805180820182526000808252825180850190935282529182015273f3a991510d1007f8729b2d544ba59a8aa78b9687815260408051602080820190925273251622fd83bca18139752687e03903fe90b96382815290820152606082015273e52ae73115feefe7352703ddba9c4105c94d64606080820152919050565b6040518060a00160405280610222610267565b815260006020820152604001610236610285565b8152604080518082018252600080825282516020818101909452908152818301529101908152600060209091015290565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002905b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282526000199092019101816102945790505090565b8060005b600281101561035a578151805171ffffffffffffffffffffffffffffffffffff191685526020808201516001600160c81b031916818701526040808301516001600160a01b03908116918801919091526060808401516001600160e81b03191690880152608092830151169186019190915260a090940193909101906001016102d6565b50505050565b81516101e08201908260005b60018110156103945782516001600160a01b031682526020928301929091019060010161036c565b5050506020838101516001600160a01b031690830152604080840151906103bd908401826102d2565b50606083015180516001600160a01b039081166101808501526020909101515181166101a08401526080909301519092166101c0909101529056fea264697066735822122018c186363a0be54b1d2ed0b44fb9682a73d29321c2e8523ed9a8a6ae0e9ea2d364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_147fb308 {\n bytes14 s_0;\n bytes7 s_1;\n address s_2;\n bytes3 s_3;\n address s_4;\n }\n\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_f889378e {\n address s_0;\n S_421683f8 s_1;\n }\n\n struct S_c666b43b {\n address[1] s_0;\n address s_1;\n S_147fb308[2] s_2;\n S_f889378e s_3;\n address s_4;\n }\n\n function test () public pure returns (S_c666b43b memory) {\n S_c666b43b memory r;\n {\n address[1] memory r_0;\n {\n address r_0_0 = 0xF4048F1fdB33fb34F210a04B76fe3891DACA0d3A;\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x8474Eda60F21751aD1316A48619cc3b4CFAc8df4;\n r.s_1 = r_1;\n }\n {\n S_147fb308[2] memory r_2;\n {\n S_147fb308 memory r_2_0;\n {\n bytes14 r_2_0_0 = bytes14(0xee71fb07c54a93fc03fd34ae5dd7);\n r_2_0.s_0 = r_2_0_0;\n }\n {\n bytes7 r_2_0_1 = bytes7(0x287474777ad165);\n r_2_0.s_1 = r_2_0_1;\n }\n {\n address r_2_0_2 = 0x26E7AB9Bdd0aFd87aC3e8FEAf221c2DBBFe4EDa4;\n r_2_0.s_2 = r_2_0_2;\n }\n {\n bytes3 r_2_0_3 = bytes3(0xd7d34b);\n r_2_0.s_3 = r_2_0_3;\n }\n {\n address r_2_0_4 = 0xA3A9669f2c1e6c07E462DBe6DB747F042f6AA805;\n r_2_0.s_4 = r_2_0_4;\n }\n r_2[0] = r_2_0;\n }\n {\n S_147fb308 memory r_2_1;\n {\n bytes14 r_2_1_0 = bytes14(0xc0e715e8adec5eb09f42fad287ec);\n r_2_1.s_0 = r_2_1_0;\n }\n {\n bytes7 r_2_1_1 = bytes7(0x5055dd34fa1a72);\n r_2_1.s_1 = r_2_1_1;\n }\n {\n address r_2_1_2 = 0xFA4655227Cc6d9a8D4100F45570F3081D6b6fF4b;\n r_2_1.s_2 = r_2_1_2;\n }\n {\n bytes3 r_2_1_3 = bytes3(0xc4f456);\n r_2_1.s_3 = r_2_1_3;\n }\n {\n address r_2_1_4 = 0x4D53CD834d0fF8B59Ec77c2FEf5Ed69a22F94271;\n r_2_1.s_4 = r_2_1_4;\n }\n r_2[1] = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n S_f889378e memory r_3;\n {\n address r_3_0 = 0xF3a991510D1007f8729B2D544Ba59A8AA78b9687;\n r_3.s_0 = r_3_0;\n }\n {\n S_421683f8 memory r_3_1;\n {\n address r_3_1_0 = 0x251622fd83bCa18139752687e03903Fe90B96382;\n r_3_1.s_0 = r_3_1_0;\n }\n r_3.s_1 = r_3_1;\n }\n r.s_3 = r_3;\n }\n {\n address r_4 = 0xE52ae73115feeFe7352703DdBa9c4105c94D6460;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000f4048f1fdb33fb34f210a04b76fe3891daca0d3a0000000000000000000000008474eda60f21751ad1316a48619cc3b4cfac8df4ee71fb07c54a93fc03fd34ae5dd7000000000000000000000000000000000000287474777ad1650000000000000000000000000000000000000000000000000000000000000000000000000026e7ab9bdd0afd87ac3e8feaf221c2dbbfe4eda4d7d34b0000000000000000000000000000000000000000000000000000000000000000000000000000000000a3a9669f2c1e6c07e462dbe6db747f042f6aa805c0e715e8adec5eb09f42fad287ec0000000000000000000000000000000000005055dd34fa1a7200000000000000000000000000000000000000000000000000000000000000000000000000fa4655227cc6d9a8d4100f45570f3081d6b6ff4bc4f45600000000000000000000000000000000000000000000000000000000000000000000000000000000004d53cd834d0ff8b59ec77c2fef5ed69a22f94271000000000000000000000000f3a991510d1007f8729b2d544ba59a8aa78b9687000000000000000000000000251622fd83bca18139752687e03903fe90b96382000000000000000000000000e52ae73115feefe7352703ddba9c4105c94d6460" + }, + { + "name": "random-(bool,address,(string,(bytes13,address,bool,string,address),bool,(address)[4],string))", + "type": "(bool,address,(string,(bytes13,address,bool,string,address),bool,(address)[4],string))", + "value": [ + false, + "0x172102ffA64Fa277eB0197358dE3937B91810304", + [ + "Moo é🚀oo🚀oMo M M oéM🚀o🚀 o M🚀 Mééoo éé🚀M oMoéoéoo éoo", + [ + "0x3fea276ffb0c8262fa0b5ab875", + "0x21f94ccFec920E687360DAFfb6437FD22984f95C", + true, + "Moo é🚀 🚀🚀 🚀Mééo M éMMooMooéoé 🚀o🚀Mo oéo🚀ooéo🚀🚀Mo🚀MoMooM🚀", + "0xBc645d08bCf0feaD38e23fAF0CB493AFf8bFbAe3" + ], + false, + [ + ["0x0A1863054BA70C2ecd4421e8f927a17E09f4e08c"], + ["0x6D24aF287947B24D4db01481D531A9BD7f080135"], + ["0x3bbc06610652E8b012Ed98B17fEfd55D504044FC"], + ["0x725C5b91C8b479D1680968B964eC863fCc05ecc8"] + ], + "Moo é🚀🚀 MéoMo M o🚀 éé🚀🚀o 🚀 🚀 🚀🚀M Moooo🚀 ééo🚀M 🚀 🚀 M🚀ooooMM o" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x172102ffA64Fa277eB0197358dE3937B91810304" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀oMo M M oéM🚀o🚀 o M🚀 Mééoo éé🚀M oMoéoéoo éoo" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x3fea276ffb0c8262fa0b5ab875" + }, + { + "type": "address", + "value": "0x21f94ccFec920E687360DAFfb6437FD22984f95C" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀 🚀🚀 🚀Mééo M éMMooMooéoé 🚀o🚀Mo oéo🚀ooéo🚀🚀Mo🚀MoMooM🚀" + }, + { + "type": "address", + "value": "0xBc645d08bCf0feaD38e23fAF0CB493AFf8bFbAe3" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x0A1863054BA70C2ecd4421e8f927a17E09f4e08c" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6D24aF287947B24D4db01481D531A9BD7f080135" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x3bbc06610652E8b012Ed98B17fEfd55D504044FC" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x725C5b91C8b479D1680968B964eC863fCc05ecc8" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀 MéoMo M o🚀 éé🚀🚀o 🚀 🚀 🚀🚀M Moooo🚀 ééo🚀M 🚀 🚀 M🚀ooooMM o" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061058d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610339565b60405180910390f35b6100566101fe565b61005e6101fe565b6000815273172102ffa64fa277eb0197358de3937b918103046020820152610084610222565b60006040518060800160405280604f815260200161043b604f91398252506040805160a080820183526060808301526000608083018190526c3fea276ffb0c8262fa0b5ab87560981b83527321f94ccfec920e687360daffb6437fd22984f95c60208085019190915260018486015284519283019094526061808352929390929061048a9083013960608301525073bc645d08bcf0fead38e23faf0cb493aff8bfbae36080820152602082015260006040820152610140610285565b6040805160208082018352730a1863054ba70c2ecd4421e8f927a17e09f4e08c825290835281518082018352736d24af287947b24d4db01481d531a9bd7f08013581528382015281518082018352733bbc06610652e8b012ed98b17fefd55d504044fc8152838301528151808201835273725c5b91c8b479d1680968b964ec863fcc05ecc88152606080850191909152840192909252805160a08101909152606d8082526000926104eb908301396080830152506040820152919050565b604080516060810182526000808252602082015290810161021d610222565b905290565b6040518060a00160405280606081526020016102646040805160a081018252600080825260208201819052918101829052606080820152608081019190915290565b815260006020820152604001610278610285565b8152602001606081525090565b60405180608001604052806004905b6040805160208101909152600081528152602001906001900390816102945790505090565b6000815180845260005b818110156102df576020818501810151868301820152016102c3565b818111156102f1576000602083870101525b50601f01601f19169290920160200192915050565b8060005b6004811015610333578151516001600160a01b031684526020938401939091019060010161030a565b50505050565b6000602080835283511515818401528084015160018060a01b03808216604086015260408601519150606080860152815161010060808701526103806101808701826102b9565b905083830151607f19808884030160a08901526cffffffffffffffffffffffffff60981b8251168352838683015116868401526040820151151560408401526060820151955060a060608401526103da60a08401876102b9565b9550836080830151166080840152604085015193506103fd60c089018515159052565b6060850151935061041160e0890185610306565b6080850151945080888703016101608901525050505061043182826102b9565b9594505050505056fe4d6f6f20c3a9f09f9a806f6ff09f9a806f4d6f204d204d206fc3a94df09f9a806ff09f9a80206f204df09f9a80204dc3a9c3a96f6f20c3a9c3a9f09f9a804d206f4d6fc3a96fc3a96f6f20c3a96f6f4d6f6f20c3a9f09f9a8020f09f9a80f09f9a8020f09f9a804dc3a9c3a96f204d20c3a94d4d6f6f4d6f6fc3a96fc3a920f09f9a806ff09f9a804d6f206fc3a96ff09f9a806f6fc3a96ff09f9a80f09f9a804d6ff09f9a804d6f4d6f6f4df09f9a804d6f6f20c3a9f09f9a80f09f9a80204dc3a96f4d6f204d206ff09f9a8020c3a9c3a9f09f9a80f09f9a806f20f09f9a8020f09f9a8020f09f9a80f09f9a804d204d6f6f6f6ff09f9a8020c3a9c3a96ff09f9a804d20f09f9a8020f09f9a8020204df09f9a806f6f6f6f4d4d206fa26469706673582212202dbe9bbca22c94efe782d549f8a94c24964d9f2bebcb9fd886cc0e6a29b4fb3a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_787766df {\n bytes13 s_0;\n address s_1;\n bool s_2;\n string s_3;\n address s_4;\n }\n\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_917e0a03 {\n string s_0;\n S_787766df s_1;\n bool s_2;\n S_421683f8[4] s_3;\n string s_4;\n }\n\n struct S_a351ffa4 {\n bool s_0;\n address s_1;\n S_917e0a03 s_2;\n }\n\n function test () public pure returns (S_a351ffa4 memory) {\n S_a351ffa4 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x172102ffA64Fa277eB0197358dE3937B91810304;\n r.s_1 = r_1;\n }\n {\n S_917e0a03 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀oo🚀oMo M M oéM🚀o🚀 o M🚀 Mééoo éé🚀M oMoéoéoo éoo\";\n r_2.s_0 = r_2_0;\n }\n {\n S_787766df memory r_2_1;\n {\n bytes13 r_2_1_0 = bytes13(0x3fea276ffb0c8262fa0b5ab875);\n r_2_1.s_0 = r_2_1_0;\n }\n {\n address r_2_1_1 = 0x21f94ccFec920E687360DAFfb6437FD22984f95C;\n r_2_1.s_1 = r_2_1_1;\n }\n {\n bool r_2_1_2 = true;\n r_2_1.s_2 = r_2_1_2;\n }\n {\n string memory r_2_1_3 = unicode\"Moo é🚀 🚀🚀 🚀Mééo M éMMooMooéoé 🚀o🚀Mo oéo🚀ooéo🚀🚀Mo🚀MoMooM🚀\";\n r_2_1.s_3 = r_2_1_3;\n }\n {\n address r_2_1_4 = 0xBc645d08bCf0feaD38e23fAF0CB493AFf8bFbAe3;\n r_2_1.s_4 = r_2_1_4;\n }\n r_2.s_1 = r_2_1;\n }\n {\n bool r_2_2 = false;\n r_2.s_2 = r_2_2;\n }\n {\n S_421683f8[4] memory r_2_3;\n {\n S_421683f8 memory r_2_3_0;\n {\n address r_2_3_0_0 = 0x0A1863054BA70C2ecd4421e8f927a17E09f4e08c;\n r_2_3_0.s_0 = r_2_3_0_0;\n }\n r_2_3[0] = r_2_3_0;\n }\n {\n S_421683f8 memory r_2_3_1;\n {\n address r_2_3_1_0 = 0x6D24aF287947B24D4db01481D531A9BD7f080135;\n r_2_3_1.s_0 = r_2_3_1_0;\n }\n r_2_3[1] = r_2_3_1;\n }\n {\n S_421683f8 memory r_2_3_2;\n {\n address r_2_3_2_0 = 0x3bbc06610652E8b012Ed98B17fEfd55D504044FC;\n r_2_3_2.s_0 = r_2_3_2_0;\n }\n r_2_3[2] = r_2_3_2;\n }\n {\n S_421683f8 memory r_2_3_3;\n {\n address r_2_3_3_0 = 0x725C5b91C8b479D1680968B964eC863fCc05ecc8;\n r_2_3_3.s_0 = r_2_3_3_0;\n }\n r_2_3[3] = r_2_3_3;\n }\n r_2.s_3 = r_2_3;\n }\n {\n string memory r_2_4 = unicode\"Moo é🚀🚀 MéoMo M o🚀 éé🚀🚀o 🚀 🚀 🚀🚀M Moooo🚀 ééo🚀M 🚀 🚀 M🚀ooooMM o\";\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172102ffa64fa277eb0197358de3937b9181030400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1863054ba70c2ecd4421e8f927a17e09f4e08c0000000000000000000000006d24af287947b24d4db01481d531a9bd7f0801350000000000000000000000003bbc06610652e8b012ed98b17fefd55d504044fc000000000000000000000000725c5b91c8b479d1680968b964ec863fcc05ecc800000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a806f6ff09f9a806f4d6f204d204d206fc3a94df09f9a806ff09f9a80206f204df09f9a80204dc3a9c3a96f6f20c3a9c3a9f09f9a804d206f4d6fc3a96fc3a96f6f20c3a96f6f00000000000000000000000000000000003fea276ffb0c8262fa0b5ab8750000000000000000000000000000000000000000000000000000000000000021f94ccfec920e687360daffb6437fd22984f95c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000bc645d08bcf0fead38e23faf0cb493aff8bfbae300000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a8020f09f9a80f09f9a8020f09f9a804dc3a9c3a96f204d20c3a94d4d6f6f4d6f6fc3a96fc3a920f09f9a806ff09f9a804d6f206fc3a96ff09f9a806f6fc3a96ff09f9a80f09f9a804d6ff09f9a804d6f4d6f6f4df09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d4d6f6f20c3a9f09f9a80f09f9a80204dc3a96f4d6f204d206ff09f9a8020c3a9c3a9f09f9a80f09f9a806f20f09f9a8020f09f9a8020f09f9a80f09f9a804d204d6f6f6f6ff09f9a8020c3a9c3a96ff09f9a804d20f09f9a8020f09f9a8020204df09f9a806f6f6f6f4d4d206f00000000000000000000000000000000000000" + }, + { + "name": "random-(bytes28,string[],((uint248,bool,int256,string)[],bool,string),bytes25,bytes7)", + "type": "(bytes28,string[],((uint248,bool,int256,string)[],bool,string),bytes25,bytes7)", + "value": [ + "0x194da41db65d9254774a71f779b91cfd805194b8d12c40f67ab34e7e", + [ + "Moo é🚀", + "Moo é🚀 oooéo🚀🚀oMé🚀MoMM🚀o🚀M🚀🚀ooM Méoo🚀oMoooo ooééoo🚀Mo o Moo " + ], + [ + [ + [ + "401015378022104398860763755888174385874389266357697820153282064075580668039", + true, + "-40364074859506343775250920387147162461191345033779266038121599608863197968753", + "Moo é🚀 ooéMéé🚀 ooooéé🚀 o🚀oMoooo🚀🚀Méooé🚀 o" + ], + [ + "173115523164530164094300620272131304498169065650517645511419802772545173417", + true, + "-35422441541893043457408408215283001092863471004099720093264173698427885229251", + "Moo é🚀oo🚀Moé é o🚀🚀éo 🚀oo🚀éMoo o" + ] + ], + true, + "Moo é🚀oééooo 🚀o🚀oMéM 🚀Moé oo🚀🚀M ooMoooé Méoooooé🚀ooooo🚀ooMoéo🚀" + ], + "0xbc7bbf6009df536bda34bb80af5b95a4d0f1d8acd7bac56759", + "0x8901e45f761b23" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x194da41db65d9254774a71f779b91cfd805194b8d12c40f67ab34e7e" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀 oooéo🚀🚀oMé🚀MoMM🚀o🚀M🚀🚀ooM Méoo🚀oMoooo ooééoo🚀Mo o Moo " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "401015378022104398860763755888174385874389266357697820153282064075580668039" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-40364074859506343775250920387147162461191345033779266038121599608863197968753" + }, + { + "type": "string", + "value": "Moo é🚀 ooéMéé🚀 ooooéé🚀 o🚀oMoooo🚀🚀Méooé🚀 o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "173115523164530164094300620272131304498169065650517645511419802772545173417" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-35422441541893043457408408215283001092863471004099720093264173698427885229251" + }, + { + "type": "string", + "value": "Moo é🚀oo🚀Moé é o🚀🚀éo 🚀oo🚀éMoo o" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀oééooo 🚀o🚀oMéM 🚀Moé oo🚀🚀M ooMoooé Méoooooé🚀ooooo🚀ooMoéo🚀" + } + ] + }, + { + "type": "hexstring", + "value": "0xbc7bbf6009df536bda34bb80af5b95a4d0f1d8acd7bac56759" + }, + { + "type": "hexstring", + "value": "0x8901e45f761b23" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610749806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906104eb565b60405180910390f35b610056610386565b61005e610386565b7f194da41db65d9254774a71f779b91cfd805194b8d12c40f67ab34e7e00000000815260408051600280825260608201909252600091816020015b606081526020019060019003908161009957905050905060006040518060400160405280600a8152602001689adede418753e13f3560b71b815250905080826000815181106100ea576100ea6105b8565b60200260200101819052505060006040518060a001604052806063815260200161064f6063913990508082600181518110610127576101276105b8565b60200260200101819052505080826020018190525050610163604051806060016040528060608152602001600015158152602001606081525090565b60408051600280825260608201909252600091816020015b604080516080810182526000808252602080830182905292820152606080820152825260001990920191018161017b57505060408051608080820183526060808301527ee2f7771119b1adb24f4cf8e347b688a934546d590a9461a8485597c9267887825260016020808401919091527fa6c2be44a4a3389150d01d8216fc1c7fbb186cff51240f03a15a7f45c4e4c68f8385015283519182019093526047808252939450909260009261060890830139606083015250815181908390600090610247576102476105b8565b60200260200101819052505061027c604080516080810182526000808252602082018190529181019190915260608082015290565b7e61fadba20d2b8f2d37c2ad4263441713fe679b64aa68a56169be4a3c0377a9815260016020808301919091527fb1af9bcb9abd095411899077e1135c4dcdaf2f5926ea550dc9f2202b349b6b3d60408084019190915280516060810190915260398082526000926105cf908301396060830152508151819083906001908110610308576103086105b8565b602090810291909101810191909152918352506001828201526040805160a0810190915260628082526000926106b290830139604080840191909152830191909152507fbc7bbf6009df536bda34bb80af5b95a4d0f1d8acd7bac56759000000000000006060820152668901e45f761b2360c81b6080820152919050565b6040518060a00160405280600063ffffffff19168152602001606081526020016103cc604051806060016040528060608152602001600015158152602001606081525090565b815260006020820181905260409091015290565b6000815180845260005b81811015610406576020818501810151868301820152016103ea565b81811115610418576000602083870101525b50601f01601f19169290920160200192915050565b600060608084018351828652818151808452608093508388019150838160051b8901016020808501945060005b838110156104b6578a8303607f19018552855180516001600160f81b0316845282810151151583850152604080820151908501528801518884018890526104a3888501826103e0565b968301969583019593505060010161045a565b50888101518015158b8301529650506040880151955088810360408a01526104de81876103e0565b9998505050505050505050565b6000602080835260c0830163ffffffff19855116828501528185015160a0604086015281815180845260e08701915060e08160051b8801019350848301925060005b8181101561055b5760df198886030183526105498585516103e0565b9450928501929185019160010161052d565b505050506040850151848203601f19016060860152915061057c818361042d565b915050606084015161059a608085018266ffffffffffffff19169052565b5060808401516001600160c81b0319811660a0850152509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f6ff09f9a804d6fc3a920c3a9206ff09f9a80f09f9a80c3a96f20f09f9a806f6ff09f9a80c3a94d6f6f202020206f4d6f6f20c3a9f09f9a80206f6fc3a94dc3a9c3a9f09f9a80206f6f6f6fc3a9c3a9f09f9a80206ff09f9a806f4d6f6f6f6ff09f9a80f09f9a804dc3a96f6fc3a9f09f9a8020206f4d6f6f20c3a9f09f9a80206f6f6fc3a96ff09f9a80f09f9a806f4dc3a9f09f9a804d6f4d4df09f9a806ff09f9a804df09f9a80f09f9a806f6f4d202020204dc3a96f6ff09f9a806f4d6f6f6f6f206f6fc3a9c3a96f6ff09f9a804d6f206f204d6f6f204d6f6f20c3a9f09f9a806fc3a9c3a96f6f6f20f09f9a806ff09f9a806f4dc3a94d20f09f9a804d6fc3a9206f6ff09f9a80f09f9a804d206f6f4d6f6f6fc3a9204dc3a96f6f6f6f6fc3a9f09f9a806f6f6f6f6ff09f9a806f6f4d6fc3a96ff09f9a80a2646970667358221220b05cdbe7af392f1a6df52b4ad8637217dd0db3b9486c328e6e6cf2dc5786792564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_4330d10b {\n uint248 s_0;\n bool s_1;\n int256 s_2;\n string s_3;\n }\n\n struct S_32e24d42 {\n S_4330d10b[] s_0;\n bool s_1;\n string s_2;\n }\n\n struct S_b899f5d7 {\n bytes28 s_0;\n string[] s_1;\n S_32e24d42 s_2;\n bytes25 s_3;\n bytes7 s_4;\n }\n\n function test () public pure returns (S_b899f5d7 memory) {\n S_b899f5d7 memory r;\n {\n bytes28 r_0 = bytes28(0x194da41db65d9254774a71f779b91cfd805194b8d12c40f67ab34e7e);\n r.s_0 = r_0;\n }\n {\n string[] memory r_1 = new string[](2);\n {\n string memory r_1_0 = unicode\"Moo é🚀\";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀 oooéo🚀🚀oMé🚀MoMM🚀o🚀M🚀🚀ooM Méoo🚀oMoooo ooééoo🚀Mo o Moo \";\n r_1[1] = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n S_32e24d42 memory r_2;\n {\n S_4330d10b[] memory r_2_0 = new S_4330d10b[](2);\n {\n S_4330d10b memory r_2_0_0;\n {\n uint248 r_2_0_0_0 = 401015378022104398860763755888174385874389266357697820153282064075580668039;\n r_2_0_0.s_0 = r_2_0_0_0;\n }\n {\n bool r_2_0_0_1 = true;\n r_2_0_0.s_1 = r_2_0_0_1;\n }\n {\n int256 r_2_0_0_2 = -40364074859506343775250920387147162461191345033779266038121599608863197968753;\n r_2_0_0.s_2 = r_2_0_0_2;\n }\n {\n string memory r_2_0_0_3 = unicode\"Moo é🚀 ooéMéé🚀 ooooéé🚀 o🚀oMoooo🚀🚀Méooé🚀 o\";\n r_2_0_0.s_3 = r_2_0_0_3;\n }\n r_2_0[0] = r_2_0_0;\n }\n {\n S_4330d10b memory r_2_0_1;\n {\n uint248 r_2_0_1_0 = 173115523164530164094300620272131304498169065650517645511419802772545173417;\n r_2_0_1.s_0 = r_2_0_1_0;\n }\n {\n bool r_2_0_1_1 = true;\n r_2_0_1.s_1 = r_2_0_1_1;\n }\n {\n int256 r_2_0_1_2 = -35422441541893043457408408215283001092863471004099720093264173698427885229251;\n r_2_0_1.s_2 = r_2_0_1_2;\n }\n {\n string memory r_2_0_1_3 = unicode\"Moo é🚀oo🚀Moé é o🚀🚀éo 🚀oo🚀éMoo o\";\n r_2_0_1.s_3 = r_2_0_1_3;\n }\n r_2_0[1] = r_2_0_1;\n }\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀oééooo 🚀o🚀oMéM 🚀Moé oo🚀🚀M ooMoooé Méoooooé🚀ooooo🚀ooMoéo🚀\";\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n bytes25 r_3 = bytes25(0xbc7bbf6009df536bda34bb80af5b95a4d0f1d8acd7bac56759);\n r.s_3 = r_3;\n }\n {\n bytes7 r_4 = bytes7(0x8901e45f761b23);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020194da41db65d9254774a71f779b91cfd805194b8d12c40f67ab34e7e0000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e0bc7bbf6009df536bda34bb80af5b95a4d0f1d8acd7bac56759000000000000008901e45f761b2300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a80206f6f6fc3a96ff09f9a80f09f9a806f4dc3a9f09f9a804d6f4d4df09f9a806ff09f9a804df09f9a80f09f9a806f6f4d202020204dc3a96f6ff09f9a806f4d6f6f6f6f206f6fc3a9c3a96f6ff09f9a804d6f206f204d6f6f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000014000e2f7771119b1adb24f4cf8e347b688a934546d590a9461a8485597c92678870000000000000000000000000000000000000000000000000000000000000001a6c2be44a4a3389150d01d8216fc1c7fbb186cff51240f03a15a7f45c4e4c68f000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000474d6f6f20c3a9f09f9a80206f6fc3a94dc3a9c3a9f09f9a80206f6f6f6fc3a9c3a9f09f9a80206ff09f9a806f4d6f6f6f6ff09f9a80f09f9a804dc3a96f6fc3a9f09f9a8020206f000000000000000000000000000000000000000000000000000061fadba20d2b8f2d37c2ad4263441713fe679b64aa68a56169be4a3c0377a90000000000000000000000000000000000000000000000000000000000000001b1af9bcb9abd095411899077e1135c4dcdaf2f5926ea550dc9f2202b349b6b3d000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a806f6ff09f9a804d6fc3a920c3a9206ff09f9a80f09f9a80c3a96f20f09f9a806f6ff09f9a80c3a94d6f6f202020206f0000000000000000000000000000000000000000000000000000000000000000000000000000624d6f6f20c3a9f09f9a806fc3a9c3a96f6f6f20f09f9a806ff09f9a806f4dc3a94d20f09f9a804d6fc3a9206f6ff09f9a80f09f9a804d206f6f4d6f6f6fc3a9204dc3a96f6f6f6f6fc3a9f09f9a806f6f6f6f6ff09f9a806f6f4d6fc3a96ff09f9a80000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,(int120,(string,(int208,string,string),address,bool,bytes25),string,bool),address)", + "type": "(string,(int120,(string,(int208,string,string),address,bool,bytes25),string,bool),address)", + "value": [ + "Moo é🚀oM🚀🚀 M MooMoéoéM", + [ + "531855114598017168984700979908517665", + [ + "Moo é🚀oéMMé 🚀oM🚀🚀MM🚀ééo🚀oé 🚀oMéo🚀MooéooMééM o", + [ + "-185896814398313512195683385651623969601986235873041182342443560", + "Moo é🚀M🚀ooo oéMoo éoééM🚀🚀éo", + "Moo é🚀o oooé éé🚀oé🚀 Mo🚀🚀oooMé oo 🚀oo 🚀oééo🚀🚀 🚀oMo" + ], + "0x3226acA84e93aFC4Dbc1b842ED827ce11Bd8Ec70", + false, + "0x013833d3b6370139fc98634016ddf0f49f1dba1d50eaebb001" + ], + "Moo é🚀oMéoéo 🚀o🚀 Mo", + true + ], + "0x9EF884e6Ab1aC83627497EcE2346A1c7488d9281" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM🚀🚀 M MooMoéoéM" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "531855114598017168984700979908517665" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéMMé 🚀oM🚀🚀MM🚀ééo🚀oé 🚀oMéo🚀MooéooMééM o" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-185896814398313512195683385651623969601986235873041182342443560" + }, + { + "type": "string", + "value": "Moo é🚀M🚀ooo oéMoo éoééM🚀🚀éo" + }, + { + "type": "string", + "value": "Moo é🚀o oooé éé🚀oé🚀 Mo🚀🚀oooMé oo 🚀oo 🚀oééo🚀🚀 🚀oMo" + } + ] + }, + { + "type": "address", + "value": "0x3226acA84e93aFC4Dbc1b842ED827ce11Bd8Ec70" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x013833d3b6370139fc98634016ddf0f49f1dba1d50eaebb001" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oMéoéo 🚀o🚀 Mo" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0x9EF884e6Ab1aC83627497EcE2346A1c7488d9281" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610549806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102f2565b60405180910390f35b6100566101f9565b61005e6101f9565b600060405180606001604052806022815260200161041e60229139825250610084610220565b6e666e7b507aa608e50909abbdad1f21815261009e610251565b60006040518060800160405280604f815260200161046d604f9139825250604080516060808201835260208083018290528284018290527973af1235ba5f0172782aaefef079e21911d26c1c57d369daf2271983528351918201909352602d8082529192600092906104409083013990508082602001819052505060006040518060800160405280605881526020016104bc60589139604080840191909152602080850193909352733226aca84e93afc4dbc1b842ed827ce11bd8ec708482015260006060808601919091527f013833d3b6370139fc98634016ddf0f49f1dba1d50eaebb0010000000000000060808601528584019490945280518082018252601f81527f4d6f6f20c3a9f09f9a806f4dc3a96fc3a96f20f09f9a806ff09f9a80204d6f00818501528582015260019385019390935250830191909152739ef884e6ab1ac83627497ece2346a1c7488d928190820152919050565b604051806060016040528060608152602001610213610220565b8152600060209091015290565b60405180608001604052806000600e0b815260200161023d610251565b815260606020820152600060409091015290565b6040518060a001604052806060815260200161028a6040518060600160405280600060190b815260200160608152602001606081525090565b81526000602082018190526040820181905260609091015290565b6000815180845260005b818110156102cb576020818501810151868301820152016102af565b818111156102dd576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835283516060808386015261030f60808601836102a5565b9150828601516040601f1987850301818801528151600e0b845284820151608086860152805160a0608087015261034a6101208701826102a5565b905086820151607f198783030160a0880152805160190b8252878101518689840152610378878401826102a5565b9850508381015190508188038483015261039288826102a5565b97505050818101516103af60c08701826001600160a01b03169052565b5083810151151560e08601526080015166ffffffffffffff191661010085015281810151848603828601526103e486826102a5565b92840151801515868601529295506103f99050565b8701516001600160a01b0381168388015292506104139050565b509094935050505056fe4d6f6f20c3a9f09f9a806f4df09f9a80f09f9a80204d204d6f6f4d6fc3a96fc3a94d4d6f6f20c3a9f09f9a804df09f9a806f6f6f206fc3a94d6f6f20c3a96fc3a9c3a94df09f9a80f09f9a80c3a96f4d6f6f20c3a9f09f9a806fc3a94d4dc3a920f09f9a806f4df09f9a80f09f9a804d4df09f9a80c3a9c3a96ff09f9a806fc3a920f09f9a806f4dc3a96ff09f9a804d6f6fc3a96f6f4dc3a9c3a94d206f4d6f6f20c3a9f09f9a806f206f6f6fc3a920c3a9c3a9f09f9a806fc3a9f09f9a80204d6ff09f9a80f09f9a806f6f6f4dc3a9206f6f2020f09f9a806f6f20f09f9a806fc3a9c3a96ff09f9a80f09f9a8020f09f9a806f4d6fa26469706673582212202329abd3a08316101e7be6af74c826eb579ea4c92198e8bbdce102c6baffe77a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_3abede73 {\n int208 s_0;\n string s_1;\n string s_2;\n }\n\n struct S_f55c1821 {\n string s_0;\n S_3abede73 s_1;\n address s_2;\n bool s_3;\n bytes25 s_4;\n }\n\n struct S_16f2af57 {\n int120 s_0;\n S_f55c1821 s_1;\n string s_2;\n bool s_3;\n }\n\n struct S_9fbfb308 {\n string s_0;\n S_16f2af57 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_9fbfb308 memory) {\n S_9fbfb308 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oM🚀🚀 M MooMoéoéM\";\n r.s_0 = r_0;\n }\n {\n S_16f2af57 memory r_1;\n {\n int120 r_1_0 = 531855114598017168984700979908517665;\n r_1.s_0 = r_1_0;\n }\n {\n S_f55c1821 memory r_1_1;\n {\n string memory r_1_1_0 = unicode\"Moo é🚀oéMMé 🚀oM🚀🚀MM🚀ééo🚀oé 🚀oMéo🚀MooéooMééM o\";\n r_1_1.s_0 = r_1_1_0;\n }\n {\n S_3abede73 memory r_1_1_1;\n {\n int208 r_1_1_1_0 = -185896814398313512195683385651623969601986235873041182342443560;\n r_1_1_1.s_0 = r_1_1_1_0;\n }\n {\n string memory r_1_1_1_1 = unicode\"Moo é🚀M🚀ooo oéMoo éoééM🚀🚀éo\";\n r_1_1_1.s_1 = r_1_1_1_1;\n }\n {\n string memory r_1_1_1_2 = unicode\"Moo é🚀o oooé éé🚀oé🚀 Mo🚀🚀oooMé oo 🚀oo 🚀oééo🚀🚀 🚀oMo\";\n r_1_1_1.s_2 = r_1_1_1_2;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n {\n address r_1_1_2 = 0x3226acA84e93aFC4Dbc1b842ED827ce11Bd8Ec70;\n r_1_1.s_2 = r_1_1_2;\n }\n {\n bool r_1_1_3 = false;\n r_1_1.s_3 = r_1_1_3;\n }\n {\n bytes25 r_1_1_4 = bytes25(0x013833d3b6370139fc98634016ddf0f49f1dba1d50eaebb001);\n r_1_1.s_4 = r_1_1_4;\n }\n r_1.s_1 = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀oMéoéo 🚀o🚀 Mo\";\n r_1.s_2 = r_1_2;\n }\n {\n bool r_1_3 = true;\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n address r_2 = 0x9EF884e6Ab1aC83627497EcE2346A1c7488d9281;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000009ef884e6ab1ac83627497ece2346a1c7488d928100000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a806f4df09f9a80f09f9a80204d204d6f6f4d6fc3a96fc3a94d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000666e7b507aa608e50909abbdad1f21000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001200000000000000000000000003226aca84e93afc4dbc1b842ed827ce11bd8ec700000000000000000000000000000000000000000000000000000000000000000013833d3b6370139fc98634016ddf0f49f1dba1d50eaebb00100000000000000000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a806fc3a94d4dc3a920f09f9a806f4df09f9a80f09f9a804d4df09f9a80c3a9c3a96ff09f9a806fc3a920f09f9a806f4dc3a96ff09f9a804d6f6fc3a96f6f4dc3a9c3a94d206f0000000000000000000000000000000000ffffffffffff8c50edca45a0fe8d87d551010f861de6ee2d93e3a82c96250dd8000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a804df09f9a806f6f6f206fc3a94d6f6f20c3a96fc3a9c3a94df09f9a80f09f9a80c3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a806f206f6f6fc3a920c3a9c3a9f09f9a806fc3a9f09f9a80204d6ff09f9a80f09f9a806f6f6f4dc3a9206f6f2020f09f9a806f6f20f09f9a806fc3a9c3a96ff09f9a80f09f9a8020f09f9a806f4d6f0000000000000000000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a806f4dc3a96fc3a96f20f09f9a806ff09f9a80204d6f00" + }, + { + "name": "random-(string,address,bytes14,(int56[][4][],bytes9,bytes22,address[4]),string)", + "type": "(string,address,bytes14,(int56[][4][],bytes9,bytes22,address[4]),string)", + "value": [ + "Moo é🚀M🚀Mooéé oéM🚀 MMMo🚀", + "0x104367F2FA8038FF71B4f7BB407D66c219850744", + "0x17d22ce9719fb2abb8027cd49be8", + [ + [ + [ + ["7530800189719971", "30875116760874103", "-5225657614429538"], + [], + ["-13238957600360282", "35850646835034921", "-22148944263065629"], + [] + ], + [ + ["-9304579260559729"], + ["-17990213913830372"], + ["-27516062887780094", "30538448961612096", "-22874494097027858"], + [] + ] + ], + "0xa01b498325108b0060", + "0x50c907709c6f7f4f407e2f34421db590051debc756d6", + [ + "0x53C9E2102a1B3DDF6568bcc65903Ef68ec1D75bC", + "0x3A4679F94CDEe79916876D8a71F69Ba443bBDD4A", + "0x48C75603B617c86DC1886e66fEE17DbeE28c2E2b", + "0x3f29c882104500D6f497BB94adE2DE5720A9F5d2" + ] + ], + "Moo é🚀MMoéoéo oéMMMo éooo🚀o🚀Méé🚀éoMMoooé 🚀ééoéM🚀é oooooé " + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M🚀Mooéé oéM🚀 MMMo🚀" + }, + { + "type": "address", + "value": "0x104367F2FA8038FF71B4f7BB407D66c219850744" + }, + { + "type": "hexstring", + "value": "0x17d22ce9719fb2abb8027cd49be8" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "7530800189719971" + }, + { + "type": "number", + "value": "30875116760874103" + }, + { + "type": "number", + "value": "-5225657614429538" + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-13238957600360282" + }, + { + "type": "number", + "value": "35850646835034921" + }, + { + "type": "number", + "value": "-22148944263065629" + } + ] + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-9304579260559729" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-17990213913830372" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-27516062887780094" + }, + { + "type": "number", + "value": "30538448961612096" + }, + { + "type": "number", + "value": "-22874494097027858" + } + ] + }, + { + "type": "array", + "value": [] + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xa01b498325108b0060" + }, + { + "type": "hexstring", + "value": "0x50c907709c6f7f4f407e2f34421db590051debc756d6" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x53C9E2102a1B3DDF6568bcc65903Ef68ec1D75bC" + }, + { + "type": "address", + "value": "0x3A4679F94CDEe79916876D8a71F69Ba443bBDD4A" + }, + { + "type": "address", + "value": "0x48C75603B617c86DC1886e66fEE17DbeE28c2E2b" + }, + { + "type": "address", + "value": "0x3f29c882104500D6f497BB94adE2DE5720A9F5d2" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀MMoéoéo oéMMMo éooo🚀o🚀Méé🚀éoMMoooé 🚀ééoéM🚀é oooooé " + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610911806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906106bc565b60405180910390f35b61005661056c565b61005e61056c565b600060405180606001604052806028815260200161085a6028913982525073104367f2fa8038ff71b4f7bb407d66c21985074460208201526d02fa459d2e33f65577004f9a937d60931b60408201526100b56105b4565b60408051600280825260608201909252600091816020015b6100d56105f8565b8152602001906001900390816100cd5790505090506100f26105f8565b60408051600380825260808201909252600091602082016060803683370190505090506000661ac1390e2ec5a39050808260008151811061013557610135610843565b602002602001019060060b908160060b81525050506000666db0c14eee3c779050808260018151811061016a5761016a610843565b602002602001019060060b908160060b81525050506000661290b539d36d6119905080826002815181106101a0576101a0610843565b60069290920b60209283029190910182015291835250604080516000808252928101909152602083015250604080516003808252608082019092526000918160200160208202803683370190505090506000662f08c304f74759199050808260008151811061021157610211610843565b602002602001019060060b908160060b81525050506000667f5df92d91fb299050808260018151811061024657610246610843565b602002602001019060060b908160060b81525050506000664eb058f2f3301c199050808260028151811061027c5761027c610843565b60069290920b602092830291909101820152604084810193909352825160008082529181019093526060840192909252508251829184916102bf576102bf610843565b6020026020010181905250506102d36105f8565b60408051600180825281830190925260009160208083019080368337019050509050600066210e772d9c3170199050808260008151811061031657610316610843565b60069290920b602092830291909101909101525081526040805160018082528183019092526000918160200160208202803683370190505090506000663fea0115c463e3199050808260008151811061037157610371610843565b60069290920b602092830291909101820152830191909152506040805160038082526080820190925260009181602001602082028036833701905050905060006661c1b6a20b1efd19905080826000815181106103d0576103d0610843565b602002602001019060060b908160060b81525050506000666c7e8eba5929409050808260018151811061040557610405610843565b602002602001019060060b908160060b815250505060006651443b2f11f311199050808260028151811061043b5761043b610843565b60069290920b602092830291909101820152604084810193909352825160008152908101909252506060820152815181908390600190811061047f5761047f610843565b60209081029190910181019190915291835250680500da4c192884580360bd1b9082015275286483b84e37bfa7a03f179a210edac8028ef5e3ab6b60511b60408201526104ca61061f565b7353c9e2102a1b3ddf6568bcc65903ef68ec1d75bc8152733a4679f94cdee79916876d8a71f69ba443bbdd4a6020808301919091527348c75603b617c86dc1886e66fee17dbee28c2e2b604080840191909152733f29c882104500d6f497bb94ade2de5720a9f5d26060808501919091528481019390935291840192909252805160808101909152605a80825260009261088290830139608083015250919050565b6040518060a001604052806060815260200160006001600160a01b0316815260200160006001600160901b03191681526020016105a76105b4565b8152602001606081525090565b60405180608001604052806060815260200160006001600160b81b0319168152602001600069ffffffffffffffffffff191681526020016105f361061f565b905290565b60405180608001604052806004905b60608152602001906001900390816106075790505090565b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b8181101561066357602081850181015186830182015201610647565b81811115610675576000602083870101525b50601f01601f19169290920160200192915050565b8060005b60048110156106b65781516001600160a01b031684526020938401939091019060010161068e565b50505050565b602081526000825160a060208401526106d860c084018261063d565b905060018060a01b0360208501511660408401526001600160901b031960408501511660608401526060840151601f1980858403016080860152815160e0845260e084018151808252610100860191506101008160051b87010160208401935060005b828110156107c85787820360ff190184528451826080810160005b60048110156107b05785820383528351805180845260209182019184019060005b8181101561079857835160060b835260209384019390920191600101610777565b50506020958601959490940193925050600101610756565b5060209788019796909601959350505060010161073b565b50602086015193506107e660208801856001600160b81b0319169052565b60408601519350610806604088018569ffffffffffffffffffff19169052565b6060860151955061081a606088018761068a565b60808a01519650848982030160a08a0152610835818861063d565b9a9950505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804df09f9a804d6f6fc3a9c3a9206fc3a94df09f9a80204d4d4d6ff09f9a804d6f6f20c3a9f09f9a804d4d6fc3a96fc3a96f206fc3a94d4d4d6f20c3a96f6f6ff09f9a806ff09f9a804dc3a9c3a9f09f9a80c3a96f4d4d6f6f6fc3a92020f09f9a80c3a9c3a96fc3a94df09f9a80c3a9206f6f6f6f6fc3a920a26469706673582212201c47375be3db7ced54c968245ed1d2794163f3b7b181da72b818e68288713efc64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_fd52c40a {\n int56[][4][] s_0;\n bytes9 s_1;\n bytes22 s_2;\n address[4] s_3;\n }\n\n struct S_801eb5b9 {\n string s_0;\n address s_1;\n bytes14 s_2;\n S_fd52c40a s_3;\n string s_4;\n }\n\n function test () public pure returns (S_801eb5b9 memory) {\n S_801eb5b9 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀M🚀Mooéé oéM🚀 MMMo🚀\";\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x104367F2FA8038FF71B4f7BB407D66c219850744;\n r.s_1 = r_1;\n }\n {\n bytes14 r_2 = bytes14(0x17d22ce9719fb2abb8027cd49be8);\n r.s_2 = r_2;\n }\n {\n S_fd52c40a memory r_3;\n {\n int56[][4][] memory r_3_0 = new int56[][4][](2);\n {\n int56[][4] memory r_3_0_0;\n {\n int56[] memory r_3_0_0_0 = new int56[](3);\n {\n int56 r_3_0_0_0_0 = 7530800189719971;\n r_3_0_0_0[0] = r_3_0_0_0_0;\n }\n {\n int56 r_3_0_0_0_1 = 30875116760874103;\n r_3_0_0_0[1] = r_3_0_0_0_1;\n }\n {\n int56 r_3_0_0_0_2 = -5225657614429538;\n r_3_0_0_0[2] = r_3_0_0_0_2;\n }\n r_3_0_0[0] = r_3_0_0_0;\n }\n {\n int56[] memory r_3_0_0_1 = new int56[](0);\n r_3_0_0[1] = r_3_0_0_1;\n }\n {\n int56[] memory r_3_0_0_2 = new int56[](3);\n {\n int56 r_3_0_0_2_0 = -13238957600360282;\n r_3_0_0_2[0] = r_3_0_0_2_0;\n }\n {\n int56 r_3_0_0_2_1 = 35850646835034921;\n r_3_0_0_2[1] = r_3_0_0_2_1;\n }\n {\n int56 r_3_0_0_2_2 = -22148944263065629;\n r_3_0_0_2[2] = r_3_0_0_2_2;\n }\n r_3_0_0[2] = r_3_0_0_2;\n }\n {\n int56[] memory r_3_0_0_3 = new int56[](0);\n r_3_0_0[3] = r_3_0_0_3;\n }\n r_3_0[0] = r_3_0_0;\n }\n {\n int56[][4] memory r_3_0_1;\n {\n int56[] memory r_3_0_1_0 = new int56[](1);\n {\n int56 r_3_0_1_0_0 = -9304579260559729;\n r_3_0_1_0[0] = r_3_0_1_0_0;\n }\n r_3_0_1[0] = r_3_0_1_0;\n }\n {\n int56[] memory r_3_0_1_1 = new int56[](1);\n {\n int56 r_3_0_1_1_0 = -17990213913830372;\n r_3_0_1_1[0] = r_3_0_1_1_0;\n }\n r_3_0_1[1] = r_3_0_1_1;\n }\n {\n int56[] memory r_3_0_1_2 = new int56[](3);\n {\n int56 r_3_0_1_2_0 = -27516062887780094;\n r_3_0_1_2[0] = r_3_0_1_2_0;\n }\n {\n int56 r_3_0_1_2_1 = 30538448961612096;\n r_3_0_1_2[1] = r_3_0_1_2_1;\n }\n {\n int56 r_3_0_1_2_2 = -22874494097027858;\n r_3_0_1_2[2] = r_3_0_1_2_2;\n }\n r_3_0_1[2] = r_3_0_1_2;\n }\n {\n int56[] memory r_3_0_1_3 = new int56[](0);\n r_3_0_1[3] = r_3_0_1_3;\n }\n r_3_0[1] = r_3_0_1;\n }\n r_3.s_0 = r_3_0;\n }\n {\n bytes9 r_3_1 = bytes9(0xa01b498325108b0060);\n r_3.s_1 = r_3_1;\n }\n {\n bytes22 r_3_2 = bytes22(0x50c907709c6f7f4f407e2f34421db590051debc756d6);\n r_3.s_2 = r_3_2;\n }\n {\n address[4] memory r_3_3;\n {\n address r_3_3_0 = 0x53C9E2102a1B3DDF6568bcc65903Ef68ec1D75bC;\n r_3_3[0] = r_3_3_0;\n }\n {\n address r_3_3_1 = 0x3A4679F94CDEe79916876D8a71F69Ba443bBDD4A;\n r_3_3[1] = r_3_3_1;\n }\n {\n address r_3_3_2 = 0x48C75603B617c86DC1886e66fEE17DbeE28c2E2b;\n r_3_3[2] = r_3_3_2;\n }\n {\n address r_3_3_3 = 0x3f29c882104500D6f497BB94adE2DE5720A9F5d2;\n r_3_3[3] = r_3_3_3;\n }\n r_3.s_3 = r_3_3;\n }\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀MMoéoéo oéMMMo éooo🚀o🚀Méé🚀éoMMoooé 🚀ééoéM🚀é oooooé \";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000104367f2fa8038ff71b4f7bb407d66c21985074417d22ce9719fb2abb8027cd49be8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000000284d6f6f20c3a9f09f9a804df09f9a804d6f6fc3a9c3a9206fc3a94df09f9a80204d4d4d6ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0a01b498325108b0060000000000000000000000000000000000000000000000050c907709c6f7f4f407e2f34421db590051debc756d60000000000000000000000000000000000000000000053c9e2102a1b3ddf6568bcc65903ef68ec1d75bc0000000000000000000000003a4679f94cdee79916876d8a71f69ba443bbdd4a00000000000000000000000048c75603b617c86dc1886e66fee17dbee28c2e2b0000000000000000000000003f29c882104500d6f497bb94ade2de5720a9f5d200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000001ac1390e2ec5a3000000000000000000000000000000000000000000000000006db0c14eee3c77ffffffffffffffffffffffffffffffffffffffffffffffffffed6f4ac62c929e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffd0f73cfb08b8a6000000000000000000000000000000000000000000000000007f5df92d91fb29ffffffffffffffffffffffffffffffffffffffffffffffffffb14fa70d0ccfe30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffdef188d263ce8f0000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffc015feea3b9c1c0000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffff9e3e495df4e102000000000000000000000000000000000000000000000000006c7e8eba592940ffffffffffffffffffffffffffffffffffffffffffffffffffaebbc4d0ee0cee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a804d4d6fc3a96fc3a96f206fc3a94d4d4d6f20c3a96f6f6ff09f9a806ff09f9a804dc3a9c3a9f09f9a80c3a96f4d4d6f6f6fc3a92020f09f9a80c3a9c3a96fc3a94df09f9a80c3a9206f6f6f6f6fc3a920000000000000" + }, + { + "name": "random-(uint88,bool,int40,(bool[3],bytes6[],bool,address,bytes29),int56)[3]", + "type": "(uint88,bool,int40,(bool[3],bytes6[],bool,address,bytes29),int56)[3]", + "value": [ + [ + "232150326787712383552243143", + true, + "165568683268", + [ + [true, false, true], + ["0x4c83c0c47390", "0x048b2e0b7ed9"], + false, + "0xcE09E1495646A01ae6F8086127c315fa9051F522", + "0x251ddaf3077e20861fc136b496770ec194edd514ea66c85eb3e4ae9d0c" + ], + "-18639727568260225" + ], + [ + "190622864428665519077494383", + true, + "-378223391919", + [ + [true, false, true], + ["0xb61b6f4c8202", "0xc633c927173b", "0x92c0866c1614"], + false, + "0x66f8433078EeD90DEF346128E4ee98f28bB417eB", + "0xab16ac4ca9e2a4a1c543e4238124d08d9285b6697944931b9f3f93df7a" + ], + "-35502381771201321" + ], + [ + "234415786066037235545498268", + true, + "102166238728", + [ + [true, false, true], + [], + true, + "0x4d3aE6C5874D583870C8E374D5AbE9e1f26ce554", + "0xf3130563bf7975c57e72574c44ae0f9582fc646f1e5d63c629f6f26cda" + ], + "16359848424701014" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "232150326787712383552243143" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "165568683268" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x4c83c0c47390" + }, + { + "type": "hexstring", + "value": "0x048b2e0b7ed9" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xcE09E1495646A01ae6F8086127c315fa9051F522" + }, + { + "type": "hexstring", + "value": "0x251ddaf3077e20861fc136b496770ec194edd514ea66c85eb3e4ae9d0c" + } + ] + }, + { + "type": "number", + "value": "-18639727568260225" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "190622864428665519077494383" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-378223391919" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xb61b6f4c8202" + }, + { + "type": "hexstring", + "value": "0xc633c927173b" + }, + { + "type": "hexstring", + "value": "0x92c0866c1614" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x66f8433078EeD90DEF346128E4ee98f28bB417eB" + }, + { + "type": "hexstring", + "value": "0xab16ac4ca9e2a4a1c543e4238124d08d9285b6697944931b9f3f93df7a" + } + ] + }, + { + "type": "number", + "value": "-35502381771201321" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "234415786066037235545498268" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "102166238728" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x4d3aE6C5874D583870C8E374D5AbE9e1f26ce554" + }, + { + "type": "hexstring", + "value": "0xf3130563bf7975c57e72574c44ae0f9582fc646f1e5d63c629f6f26cda" + } + ] + }, + { + "type": "number", + "value": "16359848424701014" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061067f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061050f565b60405180910390f35b610056610413565b61005e610413565b610066610440565b6ac007be6eacb64ec9e6c5c781526001602082015264268ca99d04604082015261008e610476565b6100966104ac565b6001808252600060208301819052604080840192909252918352805160028082526060820190925290816020016020820280368337505081519192506504c83c0c473960d41b9182915083906000906100f1576100f1610633565b6001600160d01b03199092166020928302919091019091015250805165048b2e0b7ed960d01b9081908390600190811061012d5761012d610633565b6001600160d01b031992909216602092830291909101820152830191909152506000604082015273ce09e1495646a01ae6f8086127c315fa9051f5226060808301919091527f251ddaf3077e20861fc136b496770ec194edd514ea66c85eb3e4ae9d0c00000060808084019190915290830191909152664238bbc46a8c80199082015281526101ba610440565b6a9dadf62fdbda7a10528e6f81526001602082015264580fdef4ae1960408201526101e3610476565b6101eb6104ac565b600180825260006020830181905260408084019290925291835280516003808252608082019092529081602001602082028036833750508151919250655b0db7a6410160d11b91829150839060009061024657610246610633565b6001600160d01b03199092166020928302919091019091015250805165c633c927173b60d01b9081908390600190811061028257610282610633565b6001600160d01b0319909216602092830291909101909101525080516524b0219b058560d21b908190839060029081106102be576102be610633565b6001600160d01b031990921660209283029190910182015283019190915250600060408201527366f8433078eed90def346128e4ee98f28bb417eb6060808301919091527fab16ac4ca9e2a4a1c543e4238124d08d9285b6697944931b9f3f93df7a00000060808084019190915290830191909152667e213a66271b28199082015280826001602002015250610352610440565b6ac1e77939d395150f0b629c8152600160208201526417c9951608604082015261037a610476565b6103826104ac565b60018082526000602080840182905260408085018490529385528351918252818101845284015282820152734d3ae6c5874d583870c8e374d5abe9e1f26ce5546060808401919091527ff3130563bf7975c57e72574c44ae0f9582fc646f1e5d63c629f6f26cda00000060808085019190915290840192909252663a1f3209eefc5691830191909152820152919050565b60405180606001604052806003905b61042a610440565b8152602001906001900390816104225790505090565b6040805160a0810182526000808252602082018190529181019190915260608101610469610476565b8152600060209091015290565b6040518060a001604052806104896104ac565b815260606020820181905260006040830181905290820181905260809091015290565b60405180606001604052806003906020820280368337509192915050565b600081518084526020808501945080840160005b838110156105045781516001600160d01b031916875295820195908201906001016104de565b509495945050505050565b602080825260009060808382018185018685805b60038082106105325750610625565b898503601f19018652835180516affffffffffffffffffffff1686528881015115158987015260408082015160040b8188015260608083015160a0828a018190528151938893909290918b015b8785101561059f57855115158152948e0194600194909401938e0161057f565b508d810151965060e06101008c01526105bc6101808c01886104ca565b96508281015194506105d36101208c018615159052565b908101516001600160a01b03166101408b01528b015162ffffff1981166101608b01529250610600915050565b508701516106128689018260060b9052565b5094870194935091860191600101610523565b509198975050505050505050565b634e487b7160e01b600052603260045260246000fdfea264697066735822122026937ed86c1fdeb5cb43424e2e6f247c6decc4d660b9e06bc4d3bb52d36e1fe364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2b615a37 {\n bool[3] s_0;\n bytes6[] s_1;\n bool s_2;\n address s_3;\n bytes29 s_4;\n }\n\n struct S_be987d86 {\n uint88 s_0;\n bool s_1;\n int40 s_2;\n S_2b615a37 s_3;\n int56 s_4;\n }\n\n function test () public pure returns (S_be987d86[3] memory) {\n S_be987d86[3] memory r;\n {\n S_be987d86 memory r_0;\n {\n uint88 r_0_0 = 232150326787712383552243143;\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0.s_1 = r_0_1;\n }\n {\n int40 r_0_2 = 165568683268;\n r_0.s_2 = r_0_2;\n }\n {\n S_2b615a37 memory r_0_3;\n {\n bool[3] memory r_0_3_0;\n {\n bool r_0_3_0_0 = true;\n r_0_3_0[0] = r_0_3_0_0;\n }\n {\n bool r_0_3_0_1 = false;\n r_0_3_0[1] = r_0_3_0_1;\n }\n {\n bool r_0_3_0_2 = true;\n r_0_3_0[2] = r_0_3_0_2;\n }\n r_0_3.s_0 = r_0_3_0;\n }\n {\n bytes6[] memory r_0_3_1 = new bytes6[](2);\n {\n bytes6 r_0_3_1_0 = bytes6(0x4c83c0c47390);\n r_0_3_1[0] = r_0_3_1_0;\n }\n {\n bytes6 r_0_3_1_1 = bytes6(0x048b2e0b7ed9);\n r_0_3_1[1] = r_0_3_1_1;\n }\n r_0_3.s_1 = r_0_3_1;\n }\n {\n bool r_0_3_2 = false;\n r_0_3.s_2 = r_0_3_2;\n }\n {\n address r_0_3_3 = 0xcE09E1495646A01ae6F8086127c315fa9051F522;\n r_0_3.s_3 = r_0_3_3;\n }\n {\n bytes29 r_0_3_4 = bytes29(0x251ddaf3077e20861fc136b496770ec194edd514ea66c85eb3e4ae9d0c);\n r_0_3.s_4 = r_0_3_4;\n }\n r_0.s_3 = r_0_3;\n }\n {\n int56 r_0_4 = -18639727568260225;\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_be987d86 memory r_1;\n {\n uint88 r_1_0 = 190622864428665519077494383;\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1.s_1 = r_1_1;\n }\n {\n int40 r_1_2 = -378223391919;\n r_1.s_2 = r_1_2;\n }\n {\n S_2b615a37 memory r_1_3;\n {\n bool[3] memory r_1_3_0;\n {\n bool r_1_3_0_0 = true;\n r_1_3_0[0] = r_1_3_0_0;\n }\n {\n bool r_1_3_0_1 = false;\n r_1_3_0[1] = r_1_3_0_1;\n }\n {\n bool r_1_3_0_2 = true;\n r_1_3_0[2] = r_1_3_0_2;\n }\n r_1_3.s_0 = r_1_3_0;\n }\n {\n bytes6[] memory r_1_3_1 = new bytes6[](3);\n {\n bytes6 r_1_3_1_0 = bytes6(0xb61b6f4c8202);\n r_1_3_1[0] = r_1_3_1_0;\n }\n {\n bytes6 r_1_3_1_1 = bytes6(0xc633c927173b);\n r_1_3_1[1] = r_1_3_1_1;\n }\n {\n bytes6 r_1_3_1_2 = bytes6(0x92c0866c1614);\n r_1_3_1[2] = r_1_3_1_2;\n }\n r_1_3.s_1 = r_1_3_1;\n }\n {\n bool r_1_3_2 = false;\n r_1_3.s_2 = r_1_3_2;\n }\n {\n address r_1_3_3 = 0x66f8433078EeD90DEF346128E4ee98f28bB417eB;\n r_1_3.s_3 = r_1_3_3;\n }\n {\n bytes29 r_1_3_4 = bytes29(0xab16ac4ca9e2a4a1c543e4238124d08d9285b6697944931b9f3f93df7a);\n r_1_3.s_4 = r_1_3_4;\n }\n r_1.s_3 = r_1_3;\n }\n {\n int56 r_1_4 = -35502381771201321;\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n {\n S_be987d86 memory r_2;\n {\n uint88 r_2_0 = 234415786066037235545498268;\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2.s_1 = r_2_1;\n }\n {\n int40 r_2_2 = 102166238728;\n r_2.s_2 = r_2_2;\n }\n {\n S_2b615a37 memory r_2_3;\n {\n bool[3] memory r_2_3_0;\n {\n bool r_2_3_0_0 = true;\n r_2_3_0[0] = r_2_3_0_0;\n }\n {\n bool r_2_3_0_1 = false;\n r_2_3_0[1] = r_2_3_0_1;\n }\n {\n bool r_2_3_0_2 = true;\n r_2_3_0[2] = r_2_3_0_2;\n }\n r_2_3.s_0 = r_2_3_0;\n }\n {\n bytes6[] memory r_2_3_1 = new bytes6[](0);\n r_2_3.s_1 = r_2_3_1;\n }\n {\n bool r_2_3_2 = true;\n r_2_3.s_2 = r_2_3_2;\n }\n {\n address r_2_3_3 = 0x4d3aE6C5874D583870C8E374D5AbE9e1f26ce554;\n r_2_3.s_3 = r_2_3_3;\n }\n {\n bytes29 r_2_3_4 = bytes29(0xf3130563bf7975c57e72574c44ae0f9582fc646f1e5d63c629f6f26cda);\n r_2_3.s_4 = r_2_3_4;\n }\n r_2.s_3 = r_2_3;\n }\n {\n int56 r_2_4 = 16359848424701014;\n r_2.s_4 = r_2_4;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000c007be6eacb64ec9e6c5c70000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000268ca99d0400000000000000000000000000000000000000000000000000000000000000a0ffffffffffffffffffffffffffffffffffffffffffffffffffbdc7443b95737f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce09e1495646a01ae6f8086127c315fa9051f522251ddaf3077e20861fc136b496770ec194edd514ea66c85eb3e4ae9d0c00000000000000000000000000000000000000000000000000000000000000000000024c83c0c473900000000000000000000000000000000000000000000000000000048b2e0b7ed900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dadf62fdbda7a10528e6f0000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffa7f0210b5100000000000000000000000000000000000000000000000000000000000000a0ffffffffffffffffffffffffffffffffffffffffffffffffff81dec599d8e4d700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066f8433078eed90def346128e4ee98f28bb417ebab16ac4ca9e2a4a1c543e4238124d08d9285b6697944931b9f3f93df7a0000000000000000000000000000000000000000000000000000000000000000000003b61b6f4c82020000000000000000000000000000000000000000000000000000c633c927173b000000000000000000000000000000000000000000000000000092c0866c16140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1e77939d395150f0b629c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000017c995160800000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000003a1f3209eefc5600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000004d3ae6c5874d583870c8e374d5abe9e1f26ce554f3130563bf7975c57e72574c44ae0f9582fc646f1e5d63c629f6f26cda0000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(((string,string,address)[],bool,string),int128,(string,bool,bool,bool),address,address)", + "type": "(((string,string,address)[],bool,string),int128,(string,bool,bool,bool),address,address)", + "value": [ + [ + [ + [ + "Moo é🚀Mo o Mooé🚀🚀éoo🚀oé éoM🚀éo Mé 🚀Moéoo éoo ", + "Moo é🚀o🚀oMM🚀MMo🚀 🚀oMM🚀oo", + "0x238d666871D0435Be4cB344D20228bF29eeDfACA" + ], + [ + "Moo é🚀éééooéMMMéMooo", + "Moo é🚀ooé🚀ooo 🚀Mo🚀oMé🚀🚀Mo Mé MM🚀é MM ", + "0x59F5D3e53Ef59B7B83aA0b18a84685F5b768FBe5" + ] + ], + false, + "Moo é🚀oMMooooM é🚀oo🚀🚀🚀o oé🚀🚀é Mo o" + ], + "-74215461323790999203620574477370774796", + ["Moo é🚀 Mo é Moo 🚀é🚀oM🚀o MéM", false, true, false], + "0xf0a1D853bc48D0687452a238e22D921a18Ede538", + "0xbaB3999Ac506fA887acd99C09310d4fD9A3A3940" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mo o Mooé🚀🚀éoo🚀oé éoM🚀éo Mé 🚀Moéoo éoo " + }, + { + "type": "string", + "value": "Moo é🚀o🚀oMM🚀MMo🚀 🚀oMM🚀oo" + }, + { + "type": "address", + "value": "0x238d666871D0435Be4cB344D20228bF29eeDfACA" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éééooéMMMéMooo" + }, + { + "type": "string", + "value": "Moo é🚀ooé🚀ooo 🚀Mo🚀oMé🚀🚀Mo Mé MM🚀é MM " + }, + { + "type": "address", + "value": "0x59F5D3e53Ef59B7B83aA0b18a84685F5b768FBe5" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀oMMooooM é🚀oo🚀🚀🚀o oé🚀🚀é Mo o" + } + ] + }, + { + "type": "number", + "value": "-74215461323790999203620574477370774796" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 Mo é Moo 🚀é🚀oM🚀o MéM" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0xf0a1D853bc48D0687452a238e22D921a18Ede538" + }, + { + "type": "address", + "value": "0xbaB3999Ac506fA887acd99C09310d4fD9A3A3940" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610684806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906103d7565b60405180910390f35b6100566102b7565b61005e6102b7565b604080516060808201835280825260006020830181905282840182905283516002808252928101909452919290816020015b61009861031b565b8152602001906001900390816100905790505090506100b561031b565b60006040518060800160405280604a815260200161059f604a91398252506040805160608101909152602b80825260009190610624602083013960208301525073238d666871d0435be4cb344d20228bf29eedfaca60408201528151819083906000906101245761012461051b565b60200260200101819052505061013861031b565b604080518082018252601d81527f4d6f6f20c3a9f09f9a80c3a9c3a9c3a96f6fc3a94d4d4dc3a94d6f6f6f0000006020808301919091529083528151606081018352828152600092909161055f908301396020830152507359f5d3e53ef59b7b83aa0b18a84685f5b768fbe5604082015281518190839060019081106101c0576101c061051b565b6020908102919091018101919091529183525060008282018190526040805160608101909152603b80825291929091906105e990830139604080840191909152918352506f37d560c0053ef90fc2e0c9d34d07d50b196020808401919091528151608081018352606080825260009282018390529281018290529182015260006040518060600160405280602d8152602001610532602d9139825250600060208201819052600160408084019190915260608084019290925283019190915273f0a1d853bc48d0687452a238e22d921a18ede5389082015273bab3999ac506fa887acd99c09310d4fd9a3a39406080820152919050565b6040805161010081018252606060a08201818152600060c0840181905260e084018390529083526020808401829052845160808181018752848252918101839052808601839052808401839052948401949094529082018190529181019190915290565b6040518060600160405280606081526020016060815260200160006001600160a01b031681525090565b6000815180845260005b8181101561036b5760208185018101518683018201520161034f565b8181111561037d576000602083870101525b50601f01601f19169290920160200192915050565b60008151608084526103a76080850182610345565b90506020830151151560208501526040830151151560408501526060830151151560608501528091505092915050565b60006020808352835160a0828501526101208401815160608060c088015282825180855261014094508489019150848160051b8a01019450868401935060005b8181101561047d5789860361013f190183528451805185885261043c86890182610345565b9050898201518882038b8a01526104538282610345565b6040938401516001600160a01b031699909301989098525095509387019391870191600101610417565b5050508484015180151560e089015260409094015187840360bf19016101008901529391506104ac8385610345565b948801519493506104c26040880186600f0b9052565b6040880151878503601f19018289015294506104de8486610392565b94508088015193505050506104fe60808501826001600160a01b03169052565b5060808401516001600160a01b03811660a0850152509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80204d6f20c3a920204d6f6f20f09f9a80c3a9f09f9a806f4df09f9a806f20204dc3a94d4d6f6f20c3a9f09f9a806f6fc3a9f09f9a806f6f6f20f09f9a804d6ff09f9a806f4dc3a9f09f9a80f09f9a804d6f204dc3a9204d4df09f9a80c3a9204d4d20204d6f6f20c3a9f09f9a804d6f206f204d6f6fc3a9f09f9a80f09f9a80c3a96f6ff09f9a806fc3a9202020c3a96f4df09f9a80c3a96f204dc3a920f09f9a804d6fc3a96f6f20c3a96f6f204d6f6f20c3a9f09f9a806f4d4d6f6f6f6f4d20c3a9f09f9a806f6ff09f9a80f09f9a80f09f9a806f206fc3a9f09f9a80f09f9a80c3a9204d6f206f4d6f6f20c3a9f09f9a806ff09f9a806f4d4df09f9a804d4d6ff09f9a8020f09f9a806f4d4df09f9a806f6fa264697066735822122001ae5c79279fe6ab8a8c36a0d7c34bdd57eee793dd37aba9a270ca653ef59cc564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8c30c37a {\n string s_0;\n string s_1;\n address s_2;\n }\n\n struct S_1fbc1b4b {\n S_8c30c37a[] s_0;\n bool s_1;\n string s_2;\n }\n\n struct S_824c8cc2 {\n string s_0;\n bool s_1;\n bool s_2;\n bool s_3;\n }\n\n struct S_af5b3f6a {\n S_1fbc1b4b s_0;\n int128 s_1;\n S_824c8cc2 s_2;\n address s_3;\n address s_4;\n }\n\n function test () public pure returns (S_af5b3f6a memory) {\n S_af5b3f6a memory r;\n {\n S_1fbc1b4b memory r_0;\n {\n S_8c30c37a[] memory r_0_0 = new S_8c30c37a[](2);\n {\n S_8c30c37a memory r_0_0_0;\n {\n string memory r_0_0_0_0 = unicode\"Moo é🚀Mo o Mooé🚀🚀éoo🚀oé éoM🚀éo Mé 🚀Moéoo éoo \";\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n string memory r_0_0_0_1 = unicode\"Moo é🚀o🚀oMM🚀MMo🚀 🚀oMM🚀oo\";\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n address r_0_0_0_2 = 0x238d666871D0435Be4cB344D20228bF29eeDfACA;\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n r_0_0[0] = r_0_0_0;\n }\n {\n S_8c30c37a memory r_0_0_1;\n {\n string memory r_0_0_1_0 = unicode\"Moo é🚀éééooéMMMéMooo\";\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n {\n string memory r_0_0_1_1 = unicode\"Moo é🚀ooé🚀ooo 🚀Mo🚀oMé🚀🚀Mo Mé MM🚀é MM \";\n r_0_0_1.s_1 = r_0_0_1_1;\n }\n {\n address r_0_0_1_2 = 0x59F5D3e53Ef59B7B83aA0b18a84685F5b768FBe5;\n r_0_0_1.s_2 = r_0_0_1_2;\n }\n r_0_0[1] = r_0_0_1;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀oMMooooM é🚀oo🚀🚀🚀o oé🚀🚀é Mo o\";\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n int128 r_1 = -74215461323790999203620574477370774796;\n r.s_1 = r_1;\n }\n {\n S_824c8cc2 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀 Mo é Moo 🚀é🚀oM🚀o MéM\";\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = false;\n r_2.s_1 = r_2_1;\n }\n {\n bool r_2_2 = true;\n r_2.s_2 = r_2_2;\n }\n {\n bool r_2_3 = false;\n r_2.s_3 = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xf0a1D853bc48D0687452a238e22D921a18Ede538;\n r.s_3 = r_3;\n }\n {\n address r_4 = 0xbaB3999Ac506fA887acd99C09310d4fD9A3A3940;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0ffffffffffffffffffffffffffffffffc82a9f3ffac106f03d1f362cb2f82af40000000000000000000000000000000000000000000000000000000000000400000000000000000000000000f0a1d853bc48d0687452a238e22d921a18ede538000000000000000000000000bab3999ac506fa887acd99c09310d4fd9a3a3940000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000238d666871d0435be4cb344d20228bf29eedfaca000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a804d6f206f204d6f6fc3a9f09f9a80f09f9a80c3a96f6ff09f9a806fc3a9202020c3a96f4df09f9a80c3a96f204dc3a920f09f9a804d6fc3a96f6f20c3a96f6f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a806ff09f9a806f4d4df09f9a804d4d6ff09f9a8020f09f9a806f4d4df09f9a806f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000059f5d3e53ef59b7b83aa0b18a84685f5b768fbe5000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a80c3a9c3a9c3a96f6fc3a94d4d4dc3a94d6f6f6f00000000000000000000000000000000000000000000000000000000000000000000404d6f6f20c3a9f09f9a806f6fc3a9f09f9a806f6f6f20f09f9a804d6ff09f9a806f4dc3a9f09f9a80f09f9a804d6f204dc3a9204d4df09f9a80c3a9204d4d2020000000000000000000000000000000000000000000000000000000000000003b4d6f6f20c3a9f09f9a806f4d4d6f6f6f6f4d20c3a9f09f9a806f6ff09f9a80f09f9a80f09f9a806f206fc3a9f09f9a80f09f9a80c3a9204d6f206f00000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a80204d6f20c3a920204d6f6f20f09f9a80c3a9f09f9a806f4df09f9a806f20204dc3a94d00000000000000000000000000000000000000" + }, + { + "name": "random-((address,bool,bytes31[4],string[4],string),bool[3],bool,string,string[4])", + "type": "((address,bool,bytes31[4],string[4],string),bool[3],bool,string,string[4])", + "value": [ + [ + "0x2EE0437365b9A29196861E0f08198F34d87D6647", + false, + [ + "0xf8f7e0ac4729f81aee42ba6e6599ddd67179aa1af8a6fe0140f034955bf547", + "0x91fcada700835398d46218e7506da4b3a4aa9b7ee7250b92f23b4e3c90af95", + "0x79dc8176240687d708640b630c5972f198ff609544dc7b290bcc80b3ae3534", + "0x47afb683dc54803dba93f5f5a65e09a847603cbf0fa2813b56159e66c54ff9" + ], + [ + "Moo é🚀🚀 é o🚀ooMoé", + "Moo é🚀o oMo🚀oéoéMoo éMéo éoéo🚀 o éé ooo M ", + "Moo é🚀M🚀oM🚀Méo🚀 🚀 o oéo", + "Moo é🚀oMé🚀 🚀é🚀MM🚀🚀 🚀MéoMM🚀o 🚀é🚀oooéo🚀éM M oé" + ], + "Moo é🚀 o🚀MMoé o🚀MMooéooM🚀é M 🚀 é🚀 🚀ooo éo🚀éo" + ], + [false, false, false], + false, + "Moo é🚀 oooéMooooMooé🚀éMé M é oé🚀é oo o ééMMo🚀", + [ + "Moo é🚀oo M MéM🚀éoMoM🚀éoo🚀🚀o", + "Moo é🚀 M🚀ooo🚀Moéo🚀🚀🚀o🚀oo🚀oé🚀🚀oéoo", + "Moo é🚀oéo🚀é🚀éMoé éMo", + "Moo é🚀Méoo o 🚀 Mo 🚀MoM🚀oo oo🚀M 🚀é🚀oéMo oéo🚀Mo" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x2EE0437365b9A29196861E0f08198F34d87D6647" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xf8f7e0ac4729f81aee42ba6e6599ddd67179aa1af8a6fe0140f034955bf547" + }, + { + "type": "hexstring", + "value": "0x91fcada700835398d46218e7506da4b3a4aa9b7ee7250b92f23b4e3c90af95" + }, + { + "type": "hexstring", + "value": "0x79dc8176240687d708640b630c5972f198ff609544dc7b290bcc80b3ae3534" + }, + { + "type": "hexstring", + "value": "0x47afb683dc54803dba93f5f5a65e09a847603cbf0fa2813b56159e66c54ff9" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀 é o🚀ooMoé" + }, + { + "type": "string", + "value": "Moo é🚀o oMo🚀oéoéMoo éMéo éoéo🚀 o éé ooo M " + }, + { + "type": "string", + "value": "Moo é🚀M🚀oM🚀Méo🚀 🚀 o oéo" + }, + { + "type": "string", + "value": "Moo é🚀oMé🚀 🚀é🚀MM🚀🚀 🚀MéoMM🚀o 🚀é🚀oooéo🚀éM M oé" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 o🚀MMoé o🚀MMooéooM🚀é M 🚀 é🚀 🚀ooo éo🚀éo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀 oooéMooooMooé🚀éMé M é oé🚀é oo o ééMMo🚀" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo M MéM🚀éoMoM🚀éoo🚀🚀o" + }, + { + "type": "string", + "value": "Moo é🚀 M🚀ooo🚀Moéo🚀🚀🚀o🚀oo🚀oé🚀🚀oéoo" + }, + { + "type": "string", + "value": "Moo é🚀oéo🚀é🚀éMoé éMo" + }, + { + "type": "string", + "value": "Moo é🚀Méoo o 🚀 Mo 🚀MoM🚀oo oo🚀M 🚀é🚀oéMo oéo🚀Mo" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506107ec806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610485565b60405180910390f35b6100566102ec565b61005e6102ec565b61006661032c565b732ee0437365b9a29196861e0f08198f34d87d664781526000602082015261008c610365565b7ff8f7e0ac4729f81aee42ba6e6599ddd67179aa1af8a6fe0140f034955bf5470081527f91fcada700835398d46218e7506da4b3a4aa9b7ee7250b92f23b4e3c90af950060208201527f79dc8176240687d708640b630c5972f198ff609544dc7b290bcc80b3ae3534006040808301919091527f47afb683dc54803dba93f5f5a65e09a847603cbf0fa2813b56159e66c54ff9006060830152820152610130610383565b604080518082018252601d81527f4d6f6f20c3a9f09f9a80f09f9a8020c3a9206ff09f9a806f6f4d6fc3a9000000602080830191909152908352815160608101909252603e808352600092916105ce9083013990508082600160200201819052505060006040518060600160405280602c815260200161060c602c91396040808401919091528051608081019091526056808252600092506106666020830139606080840191909152830191909152506040805160808101909152604b808252600091906106df6020830139608083015250815261020c6103aa565b6000808252602080830182905260408084018390528482019390935283830182905282516080810190935260488084529192919061058690830139606083015250610255610383565b60006040518060600160405280602e8152602001610638602e91398252506040805160808101909152604380825260009190610774602083013990508082600160200201819052505060006040518060600160405280602381526020016106bc60239139604080840191909152805160808101909152604a8082526000925061072a60208301396060830152506080820152919050565b6040518060a001604052806102ff61032c565b815260200161030c6103aa565b81526000602082015260606040820181905201610327610383565b905290565b6040805160a0810182526000808252602082015290810161034b610365565b8152602001610358610383565b8152602001606081525090565b60405180608001604052806004906020820280368337509192915050565b60405180608001604052806004905b60608152602001906001900390816103925790505090565b60405180606001604052806003906020820280368337509192915050565b6000815180845260005b818110156103ee576020818501810151868301820152016103d2565b81811115610400576000602083870101525b50601f01601f19169290920160200192915050565b600082608081018360005b600481101561044f5783830387526104398383516103c8565b6020978801979093509190910190600101610420565b509095945050505050565b8060005b600381101561047f578151151584526020938401939091019060010161045e565b50505050565b60006020808352610100845160e08386015260018060a01b03815116828601528281015115156101208601526040810151610140860160005b60048110156104df57825160ff1916825291850191908501906001016104be565b5050506060810151826101c08701526104fc610200870182610415565b9250506080810151905060ff19858303016101e086015261051d82826103c8565b915050818501519150610533604085018361045a565b6040850151151560a08501526060850151601f19858303810160c087015290925061055e82846103c8565b925060808601519150808584030160e08601525061057c8282610415565b9594505050505056fe4d6f6f20c3a9f09f9a8020206f6f6fc3a94d6f6f6f6f4d6f6fc3a9f09f9a80c3a94dc3a9204d20c3a9206fc3a9f09f9a80c3a9206f6f2020206f202020c3a9c3a94d4d6ff09f9a804d6f6f20c3a9f09f9a806f206f4d6ff09f9a806fc3a96fc3a94d6f6f20c3a94dc3a96f2020c3a96fc3a96ff09f9a8020206f20c3a9c3a9206f6f6f204d204d6f6f20c3a9f09f9a804df09f9a806f4df09f9a804dc3a96ff09f9a8020202020f09f9a80206f206fc3a96f4d6f6f20c3a9f09f9a806f6f204d204dc3a94df09f9a80c3a96f4d6f4df09f9a80c3a96f6ff09f9a80f09f9a806f4d6f6f20c3a9f09f9a806f4dc3a9f09f9a8020f09f9a80c3a9f09f9a804d4df09f9a80f09f9a8020f09f9a804dc3a96f4d4df09f9a806f20f09f9a80c3a9f09f9a806f6f6fc3a96ff09f9a80c3a94d204d20206fc3a94d6f6f20c3a9f09f9a806fc3a96ff09f9a80c3a9f09f9a80c3a94d6fc3a920c3a94d6f4d6f6f20c3a9f09f9a80206ff09f9a804d4d6fc3a9206ff09f9a804d4d6f6fc3a96f6f4df09f9a80c3a9204d20f09f9a8020c3a9f09f9a8020f09f9a806f6f6f20c3a96ff09f9a80c3a96f4d6f6f20c3a9f09f9a804dc3a96f6f206f20f09f9a80204d6f20f09f9a804d6f4df09f9a806f6f206f6ff09f9a804d20f09f9a80c3a9f09f9a806fc3a94d6f206fc3a96ff09f9a804d6f4d6f6f20c3a9f09f9a80204df09f9a806f6f6ff09f9a804d6fc3a96ff09f9a80f09f9a80f09f9a806ff09f9a806f6ff09f9a806fc3a9f09f9a80f09f9a806fc3a96f6fa264697066735822122065870eee9325cb9181e615b349edff4a5c8c25e32bdd75eefef036d89134331a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5fa8d31c {\n address s_0;\n bool s_1;\n bytes31[4] s_2;\n string[4] s_3;\n string s_4;\n }\n\n struct S_c0b3abff {\n S_5fa8d31c s_0;\n bool[3] s_1;\n bool s_2;\n string s_3;\n string[4] s_4;\n }\n\n function test () public pure returns (S_c0b3abff memory) {\n S_c0b3abff memory r;\n {\n S_5fa8d31c memory r_0;\n {\n address r_0_0 = 0x2EE0437365b9A29196861E0f08198F34d87D6647;\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n {\n bytes31[4] memory r_0_2;\n {\n bytes31 r_0_2_0 = bytes31(0xf8f7e0ac4729f81aee42ba6e6599ddd67179aa1af8a6fe0140f034955bf547);\n r_0_2[0] = r_0_2_0;\n }\n {\n bytes31 r_0_2_1 = bytes31(0x91fcada700835398d46218e7506da4b3a4aa9b7ee7250b92f23b4e3c90af95);\n r_0_2[1] = r_0_2_1;\n }\n {\n bytes31 r_0_2_2 = bytes31(0x79dc8176240687d708640b630c5972f198ff609544dc7b290bcc80b3ae3534);\n r_0_2[2] = r_0_2_2;\n }\n {\n bytes31 r_0_2_3 = bytes31(0x47afb683dc54803dba93f5f5a65e09a847603cbf0fa2813b56159e66c54ff9);\n r_0_2[3] = r_0_2_3;\n }\n r_0.s_2 = r_0_2;\n }\n {\n string[4] memory r_0_3;\n {\n string memory r_0_3_0 = unicode\"Moo é🚀🚀 é o🚀ooMoé\";\n r_0_3[0] = r_0_3_0;\n }\n {\n string memory r_0_3_1 = unicode\"Moo é🚀o oMo🚀oéoéMoo éMéo éoéo🚀 o éé ooo M \";\n r_0_3[1] = r_0_3_1;\n }\n {\n string memory r_0_3_2 = unicode\"Moo é🚀M🚀oM🚀Méo🚀 🚀 o oéo\";\n r_0_3[2] = r_0_3_2;\n }\n {\n string memory r_0_3_3 = unicode\"Moo é🚀oMé🚀 🚀é🚀MM🚀🚀 🚀MéoMM🚀o 🚀é🚀oooéo🚀éM M oé\";\n r_0_3[3] = r_0_3_3;\n }\n r_0.s_3 = r_0_3;\n }\n {\n string memory r_0_4 = unicode\"Moo é🚀 o🚀MMoé o🚀MMooéooM🚀é M 🚀 é🚀 🚀ooo éo🚀éo\";\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n bool[3] memory r_1;\n {\n bool r_1_0 = false;\n r_1[0] = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1[1] = r_1_1;\n }\n {\n bool r_1_2 = false;\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀 oooéMooooMooé🚀éMé M é oé🚀é oo o ééMMo🚀\";\n r.s_3 = r_3;\n }\n {\n string[4] memory r_4;\n {\n string memory r_4_0 = unicode\"Moo é🚀oo M MéM🚀éoMoM🚀éoo🚀🚀o\";\n r_4[0] = r_4_0;\n }\n {\n string memory r_4_1 = unicode\"Moo é🚀 M🚀ooo🚀Moéo🚀🚀🚀o🚀oo🚀oé🚀🚀oéoo\";\n r_4[1] = r_4_1;\n }\n {\n string memory r_4_2 = unicode\"Moo é🚀oéo🚀é🚀éMoé éMo\";\n r_4[2] = r_4_2;\n }\n {\n string memory r_4_3 = unicode\"Moo é🚀Méoo o 🚀 Mo 🚀MoM🚀oo oo🚀M 🚀é🚀oéMo oéo🚀Mo\";\n r_4[3] = r_4_3;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000004e00000000000000000000000002ee0437365b9a29196861e0f08198f34d87d66470000000000000000000000000000000000000000000000000000000000000000f8f7e0ac4729f81aee42ba6e6599ddd67179aa1af8a6fe0140f034955bf5470091fcada700835398d46218e7506da4b3a4aa9b7ee7250b92f23b4e3c90af950079dc8176240687d708640b630c5972f198ff609544dc7b290bcc80b3ae35340047afb683dc54803dba93f5f5a65e09a847603cbf0fa2813b56159e66c54ff90000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a80f09f9a8020c3a9206ff09f9a806f6f4d6fc3a9000000000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a806f206f4d6ff09f9a806fc3a96fc3a94d6f6f20c3a94dc3a96f2020c3a96fc3a96ff09f9a8020206f20c3a9c3a9206f6f6f204d200000000000000000000000000000000000000000000000000000000000000000002c4d6f6f20c3a9f09f9a804df09f9a806f4df09f9a804dc3a96ff09f9a8020202020f09f9a80206f206fc3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a806f4dc3a9f09f9a8020f09f9a80c3a9f09f9a804d4df09f9a80f09f9a8020f09f9a804dc3a96f4d4df09f9a806f20f09f9a80c3a9f09f9a806f6f6fc3a96ff09f9a80c3a94d204d20206fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a80206ff09f9a804d4d6fc3a9206ff09f9a804d4d6f6fc3a96f6f4df09f9a80c3a9204d20f09f9a8020c3a9f09f9a8020f09f9a806f6f6f20c3a96ff09f9a80c3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000484d6f6f20c3a9f09f9a8020206f6f6fc3a94d6f6f6f6f4d6f6fc3a9f09f9a80c3a94dc3a9204d20c3a9206fc3a9f09f9a80c3a9206f6f2020206f202020c3a9c3a94d4d6ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a806f6f204d204dc3a94df09f9a80c3a96f4d6f4df09f9a80c3a96f6ff09f9a80f09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a80204df09f9a806f6f6ff09f9a804d6fc3a96ff09f9a80f09f9a80f09f9a806ff09f9a806f6ff09f9a806fc3a9f09f9a80f09f9a806fc3a96f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a806fc3a96ff09f9a80c3a9f09f9a80c3a94d6fc3a920c3a94d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a804dc3a96f6f206f20f09f9a80204d6f20f09f9a804d6f4df09f9a806f6f206f6ff09f9a804d20f09f9a80c3a9f09f9a806fc3a94d6f206fc3a96ff09f9a804d6f00000000000000000000000000000000000000000000" + }, + { + "name": "random-((int216[2],string,string),uint176,(uint48,int32,uint72,(address,bool)),string[4])[]", + "type": "((int216[2],string,string),uint176,(uint48,int32,uint72,(address,bool)),string[4])[]", + "value": [ + [ + [ + [ + "48633453508205274203738855842157016160183376500666379088423812852", + "41163220697275691824284955165996627087369586706669840294390424570" + ], + "Moo é🚀🚀M🚀 ", + "Moo é🚀" + ], + "94029584970309724051898885882960890597331044985369566", + [ + "269566708046572", + "949839591", + "3720316878639692423826", + ["0xAe33a4C5BA1f78b5e4A6AE5C565F7f41a1420229", false] + ], + [ + "Moo é🚀MooM🚀MMMooé oééoooéM🚀🚀oo o🚀oM🚀o", + "Moo é🚀oMééééo🚀Mé🚀🚀🚀oéM🚀ooo🚀é oéo🚀🚀Mé", + "Moo é🚀Mé oo 🚀 oMM🚀éMé🚀oé MooMéM🚀 oo🚀oéM", + "Moo é🚀oéM ooMééMéoMoo🚀ooé🚀o Méé é oé é🚀é Mé " + ] + ], + [ + [ + [ + "-2060735802583908800629244723330460831404569284112270623679741858", + "-22822902565903592968673818686315004629370302664744222335984352121" + ], + "Moo é🚀 oM🚀M MoM MM🚀é🚀oéM🚀ooM oé🚀oo ooM", + "Moo é🚀 oé o " + ], + "64378872468774257868862458166120895079284000658516470", + [ + "54788177187505", + "-1912251410", + "4154322639538573442334", + ["0xA112a997033D475213729d79dc5BF34753A7F1d5", true] + ], + [ + "Moo é🚀oo🚀 🚀oMo ", + "Moo é🚀oo🚀 ooé🚀o🚀oo🚀🚀🚀🚀 oMé ééoMé é🚀🚀Mo🚀o é 🚀🚀🚀M", + "Moo é🚀 🚀oMo ooooé éoMooMo🚀oéoo é🚀éoéoééo", + "Moo é🚀oéMo🚀 éoM🚀oé🚀🚀🚀éoM🚀 é🚀ooéé🚀M 🚀Mo" + ] + ], + [ + [ + [ + "-13152154931715534320213074856036485664018615261154004905307360117", + "-39534439954891917906023654868174038752171923281085183867978156330" + ], + "Moo é🚀o ééMoo🚀o oo🚀M oM🚀éMo oM🚀o🚀o🚀éé🚀🚀o 🚀🚀oooééMoMoMéMoéoéo 🚀", + "Moo é🚀🚀oo🚀o🚀🚀o M 🚀🚀🚀🚀M oéo🚀 Mo🚀oMoo oéoo🚀 ooéooM" + ], + "90766279072655992782805791362450374916175215130045451", + [ + "264525479209981", + "-36153002", + "4112356281544586951689", + ["0x6e1E11b3f1049C47a8202A2898B2B51592D35216", true] + ], + [ + "Moo é🚀M🚀M🚀Mo🚀🚀éooooo M🚀oooM🚀 ooooo🚀M ", + "Moo é🚀 ", + "Moo é🚀Méooo é🚀 ", + "Moo é🚀Moéo🚀🚀oo MMoo M🚀🚀éo Moé" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "48633453508205274203738855842157016160183376500666379088423812852" + }, + { + "type": "number", + "value": "41163220697275691824284955165996627087369586706669840294390424570" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀M🚀 " + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "number", + "value": "94029584970309724051898885882960890597331044985369566" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "269566708046572" + }, + { + "type": "number", + "value": "949839591" + }, + { + "type": "number", + "value": "3720316878639692423826" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xAe33a4C5BA1f78b5e4A6AE5C565F7f41a1420229" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MooM🚀MMMooé oééoooéM🚀🚀oo o🚀oM🚀o" + }, + { + "type": "string", + "value": "Moo é🚀oMééééo🚀Mé🚀🚀🚀oéM🚀ooo🚀é oéo🚀🚀Mé" + }, + { + "type": "string", + "value": "Moo é🚀Mé oo 🚀 oMM🚀éMé🚀oé MooMéM🚀 oo🚀oéM" + }, + { + "type": "string", + "value": "Moo é🚀oéM ooMééMéoMoo🚀ooé🚀o Méé é oé é🚀é Mé " + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-2060735802583908800629244723330460831404569284112270623679741858" + }, + { + "type": "number", + "value": "-22822902565903592968673818686315004629370302664744222335984352121" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 oM🚀M MoM MM🚀é🚀oéM🚀ooM oé🚀oo ooM" + }, + { + "type": "string", + "value": "Moo é🚀 oé o " + } + ] + }, + { + "type": "number", + "value": "64378872468774257868862458166120895079284000658516470" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "54788177187505" + }, + { + "type": "number", + "value": "-1912251410" + }, + { + "type": "number", + "value": "4154322639538573442334" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xA112a997033D475213729d79dc5BF34753A7F1d5" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀 🚀oMo " + }, + { + "type": "string", + "value": "Moo é🚀oo🚀 ooé🚀o🚀oo🚀🚀🚀🚀 oMé ééoMé é🚀🚀Mo🚀o é 🚀🚀🚀M" + }, + { + "type": "string", + "value": "Moo é🚀 🚀oMo ooooé éoMooMo🚀oéoo é🚀éoéoééo" + }, + { + "type": "string", + "value": "Moo é🚀oéMo🚀 éoM🚀oé🚀🚀🚀éoM🚀 é🚀ooéé🚀M 🚀Mo" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-13152154931715534320213074856036485664018615261154004905307360117" + }, + { + "type": "number", + "value": "-39534439954891917906023654868174038752171923281085183867978156330" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o ééMoo🚀o oo🚀M oM🚀éMo oM🚀o🚀o🚀éé🚀🚀o 🚀🚀oooééMoMoMéMoéoéo 🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀oo🚀o🚀🚀o M 🚀🚀🚀🚀M oéo🚀 Mo🚀oMoo oéoo🚀 ooéooM" + } + ] + }, + { + "type": "number", + "value": "90766279072655992782805791362450374916175215130045451" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "264525479209981" + }, + { + "type": "number", + "value": "-36153002" + }, + { + "type": "number", + "value": "4112356281544586951689" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6e1E11b3f1049C47a8202A2898B2B51592D35216" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀M🚀M🚀Mo🚀🚀éooooo M🚀oooM🚀 ooooo🚀M " + }, + { + "type": "string", + "value": "Moo é🚀 " + }, + { + "type": "string", + "value": "Moo é🚀Méooo é🚀 " + }, + { + "type": "string", + "value": "Moo é🚀Moéo🚀🚀oo MMoo M🚀🚀éo Moé" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610d13806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906107ff565b60405180910390f35b6040805160038082526080820190925260609160009190816020015b610072610694565b81526020019060019003908161006a57905050905061008f610694565b6100976106cd565b61009f6106f4565b7a7638ac23b2108b84fad6a094643ab6ce9b7ef715831597148ffef481527a640fef64950721c952b01b78c78793ba9780bebd236640c86a63fa6020808301919091529082526040805180820182526014815273026b7b79061d4f84fcd40784fcd4026f84fcd40160651b818401528383015280518082018252600a8152689adede418753e13f3560b71b818401529083015290825275fb51a720a3cc60f170ce9669a5f5a61d31b7b15273de90820152610158610712565b65f52b63e05aec815263389d66e7602082015268c9adc4aa0a08e6a2926040820152610194604080518082019091526000808252602082015290565b73ae33a4c5ba1f78b5e4a6ae5c565f7f41a1420229815260006020820152606082015260408201526101c4610746565b60006040518060600160405280603c8152602001610a79603c913982525060408051608081019091526049808252600091906109766020830139602080840191909152604080516060810182528181526000935091610bfd90830139604080840191909152805160808101909152604580825260009250610b5f602083013990508082600360200201525060608201528151819083906000906102695761026961095f565b60200260200101819052505061027d610694565b6102856106cd565b61028d6106f4565b7a050266275ff1ca0418fc6385792cc3a6891a19adc1325943b47fa11981527a377aba258993beab1095e8cf8c8e59e8797151d91eeb9c08623b78196020808301919091529082526040805160608101909152603d808252600092610ab5908301396020808401919091526040805180820182526011815270026b7b79061d4f84fcd401037e1d490379607d1b81840152908401529183525075ac11cfe403bd95dc8656f8c4ec49a03ffd006f3b69f690820152610349610712565b6531d45dd6d2b181526371faa41119602082015268e134cede1d9bd27d1e6040820152610386604080518082019091526000808252602082015290565b73a112a997033d475213729d79dc5bf34753a7f1d5815260016020820152606082015260408201526103b6610746565b604080518082018252601981527f4d6f6f20c3a9f09f9a806f6ff09f9a8020f09f9a806f4d6f2000000000000000602080830191909152908352815160a08101909252606280835260009291610c7c9083013990508082600160200201819052505060006040518060600160405280603d81526020016109ef603d9139604080840191909152805160808101909152604d80825260009250610a2c60208301399050808260036020020152506060820152815181908390600190811061047e5761047e61095f565b602002602001018190525050610492610694565b61049a6106cd565b6104a26106f4565b7a1ff89b29df924fb2237b362926d40b109e5bfbaad4018b07d74b741981527a601a57a67bf603664f758f63f87fd8c9e04cc7d8948658c2128929196020808301919091529082526040805160a08101909152606d808252600092610af2908301399050808260200181905250506000604051806080016040528060598152602001610ba460599139604083015250815275f298ceef4381d751afe2458deeaa74e6b6a6ad2fec0b6020820152610557610712565b65f095a338ebfd8152630227a6a919602082015268deee6869de0f61fc096040820152610594604080518082019091526000808252602082015290565b736e1e11b3f1049c47a8202a2898b2b51592d35216815260016020820152606082015260408201526105c4610746565b60006040518060600160405280603f8152602001610c3d603f9139825250604080518082018252600b81526a026b7b79061d4f84fcd40160ad1b6020808301919091528084019190915281518083018352601881527f4d6f6f20c3a9f09f9a804dc3a96f6f6f20c3a9f09f9a8020000000000000000081830152828401528151606081019092526030808352600092916109bf90830139905080826003602002015250606082015281518190839060029081106106835761068361095f565b602090810291909101015250919050565b60405180608001604052806106a76106cd565b8152600060208201526040016106bb610712565b81526020016106c8610746565b905290565b60405180606001604052806106e06106f4565b815260200160608152602001606081525090565b60405180604001604052806002906020820280368337509192915050565b6040805160808101825260008082526020808301829052828401829052835180850190945281845283015290606082015290565b60405180608001604052806004905b60608152602001906001900390816107555790505090565b6000815180845260005b8181101561079357602081850181015186830182015201610777565b818111156107a5576000602083870101525b50601f01601f19169290920160200192915050565b600082608081018360005b60048110156107f45783830387526107de83835161076d565b60209788019790935091909101906001016107c5565b509095945050505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561095057898403603f1901865282518051610100808752815191859188015b600283101561086c578351601a0b8152928c0192600192909201918c0161084a565b508b8101519250608061014089015261088961018089018461076d565b908b015188820360ff19016101608a015290925090506108a9828261076d565b915050898201516108c48b8801826001600160b01b03169052565b50888201516109228a880182805165ffffffffffff16825260208082015160030b8184015260408083015168ffffffffffffffffff169084015260609182015180516001600160a01b03169284019290925201511515608090910152565b506060820151915085810360e087015261093c81836107ba565b978a01979550505091870191600101610827565b50919998505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f4dc3a9c3a9c3a9c3a96ff09f9a804dc3a9f09f9a80f09f9a80f09f9a806fc3a94df09f9a806f6f6ff09f9a80c3a9206fc3a96ff09f9a80f09f9a804dc3a94d6f6f20c3a9f09f9a804d6fc3a96ff09f9a80f09f9a806f6f204d4d6f6f204df09f9a80f09f9a80c3a96f204d6fc3a94d6f6f20c3a9f09f9a8020f09f9a806f4d6f206f6f6f6fc3a920c3a96f4d6f6f4d6ff09f9a806fc3a96f6f20c3a9f09f9a80c3a96fc3a96fc3a9c3a96f4d6f6f20c3a9f09f9a806fc3a94d6ff09f9a8020c3a96f4df09f9a806fc3a9f09f9a80f09f9a80f09f9a80c3a96f4df09f9a802020c3a9f09f9a806f6fc3a9c3a9f09f9a804d20f09f9a804d6f4d6f6f20c3a9f09f9a804d6f6f4df09f9a804d4d4d6f6fc3a9206fc3a9c3a96f6f6fc3a94df09f9a80f09f9a806f6f206ff09f9a806f4df09f9a806f4d6f6f20c3a9f09f9a80206f4df09f9a804d204d6f4d20204d4df09f9a80c3a9f09f9a806fc3a94df09f9a806f6f4d206fc3a9f09f9a806f6f206f6f4d4d6f6f20c3a9f09f9a806f20c3a9c3a94d6f6ff09f9a806f206f6ff09f9a804d206f4df09f9a80c3a94d6f206f4df09f9a806ff09f9a806ff09f9a80c3a9c3a9f09f9a80f09f9a806f20f09f9a80f09f9a806f6f6fc3a9c3a94d6f4d6f4dc3a94d6fc3a96fc3a96f20f09f9a804d6f6f20c3a9f09f9a806fc3a94d206f6f4dc3a9c3a94dc3a96f4d6f6ff09f9a806f6fc3a9f09f9a806f204dc3a9c3a920c3a9206fc3a920c3a9f09f9a80c3a9204dc3a9204d6f6f20c3a9f09f9a80f09f9a806f6ff09f9a806ff09f9a80f09f9a806f20204d20f09f9a80f09f9a80f09f9a80f09f9a804d206fc3a96ff09f9a80204d6ff09f9a806f4d6f6f206fc3a96f6ff09f9a80206f6fc3a96f6f4d4d6f6f20c3a9f09f9a804dc3a9206f6f20f09f9a80206f4d4df09f9a80c3a94dc3a9f09f9a806fc3a9204d6f6f4dc3a94df09f9a80206f6ff09f9a806fc3a94d4d6f6f20c3a9f09f9a804df09f9a804df09f9a804d6ff09f9a80f09f9a80c3a96f6f6f6f6f204df09f9a806f6f6f4df09f9a80206f6f6f6f6ff09f9a804d204d6f6f20c3a9f09f9a806f6ff09f9a80206f6fc3a9f09f9a806ff09f9a806f6ff09f9a80f09f9a80f09f9a80f09f9a80206f4dc3a92020c3a9c3a96f4dc3a920c3a9f09f9a80f09f9a804d6ff09f9a806f20c3a920f09f9a80f09f9a80f09f9a804da2646970667358221220bace4698eb40dc1a13f06d4c17e0f1b82d63961fef0d947054a303a91f1dc2eb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_148a9025 {\n int216[2] s_0;\n string s_1;\n string s_2;\n }\n\n struct S_5cde0d08 {\n address s_0;\n bool s_1;\n }\n\n struct S_0ecd4634 {\n uint48 s_0;\n int32 s_1;\n uint72 s_2;\n S_5cde0d08 s_3;\n }\n\n struct S_f1f4634e {\n S_148a9025 s_0;\n uint176 s_1;\n S_0ecd4634 s_2;\n string[4] s_3;\n }\n\n function test () public pure returns (S_f1f4634e[] memory) {\n S_f1f4634e[] memory r = new S_f1f4634e[](3);\n {\n S_f1f4634e memory r_0;\n {\n S_148a9025 memory r_0_0;\n {\n int216[2] memory r_0_0_0;\n {\n int216 r_0_0_0_0 = 48633453508205274203738855842157016160183376500666379088423812852;\n r_0_0_0[0] = r_0_0_0_0;\n }\n {\n int216 r_0_0_0_1 = 41163220697275691824284955165996627087369586706669840294390424570;\n r_0_0_0[1] = r_0_0_0_1;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n string memory r_0_0_1 = unicode\"Moo é🚀🚀M🚀 \";\n r_0_0.s_1 = r_0_0_1;\n }\n {\n string memory r_0_0_2 = unicode\"Moo é🚀\";\n r_0_0.s_2 = r_0_0_2;\n }\n r_0.s_0 = r_0_0;\n }\n {\n uint176 r_0_1 = 94029584970309724051898885882960890597331044985369566;\n r_0.s_1 = r_0_1;\n }\n {\n S_0ecd4634 memory r_0_2;\n {\n uint48 r_0_2_0 = 269566708046572;\n r_0_2.s_0 = r_0_2_0;\n }\n {\n int32 r_0_2_1 = 949839591;\n r_0_2.s_1 = r_0_2_1;\n }\n {\n uint72 r_0_2_2 = 3720316878639692423826;\n r_0_2.s_2 = r_0_2_2;\n }\n {\n S_5cde0d08 memory r_0_2_3;\n {\n address r_0_2_3_0 = 0xAe33a4C5BA1f78b5e4A6AE5C565F7f41a1420229;\n r_0_2_3.s_0 = r_0_2_3_0;\n }\n {\n bool r_0_2_3_1 = false;\n r_0_2_3.s_1 = r_0_2_3_1;\n }\n r_0_2.s_3 = r_0_2_3;\n }\n r_0.s_2 = r_0_2;\n }\n {\n string[4] memory r_0_3;\n {\n string memory r_0_3_0 = unicode\"Moo é🚀MooM🚀MMMooé oééoooéM🚀🚀oo o🚀oM🚀o\";\n r_0_3[0] = r_0_3_0;\n }\n {\n string memory r_0_3_1 = unicode\"Moo é🚀oMééééo🚀Mé🚀🚀🚀oéM🚀ooo🚀é oéo🚀🚀Mé\";\n r_0_3[1] = r_0_3_1;\n }\n {\n string memory r_0_3_2 = unicode\"Moo é🚀Mé oo 🚀 oMM🚀éMé🚀oé MooMéM🚀 oo🚀oéM\";\n r_0_3[2] = r_0_3_2;\n }\n {\n string memory r_0_3_3 = unicode\"Moo é🚀oéM ooMééMéoMoo🚀ooé🚀o Méé é oé é🚀é Mé \";\n r_0_3[3] = r_0_3_3;\n }\n r_0.s_3 = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_f1f4634e memory r_1;\n {\n S_148a9025 memory r_1_0;\n {\n int216[2] memory r_1_0_0;\n {\n int216 r_1_0_0_0 = -2060735802583908800629244723330460831404569284112270623679741858;\n r_1_0_0[0] = r_1_0_0_0;\n }\n {\n int216 r_1_0_0_1 = -22822902565903592968673818686315004629370302664744222335984352121;\n r_1_0_0[1] = r_1_0_0_1;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n string memory r_1_0_1 = unicode\"Moo é🚀 oM🚀M MoM MM🚀é🚀oéM🚀ooM oé🚀oo ooM\";\n r_1_0.s_1 = r_1_0_1;\n }\n {\n string memory r_1_0_2 = unicode\"Moo é🚀 oé o \";\n r_1_0.s_2 = r_1_0_2;\n }\n r_1.s_0 = r_1_0;\n }\n {\n uint176 r_1_1 = 64378872468774257868862458166120895079284000658516470;\n r_1.s_1 = r_1_1;\n }\n {\n S_0ecd4634 memory r_1_2;\n {\n uint48 r_1_2_0 = 54788177187505;\n r_1_2.s_0 = r_1_2_0;\n }\n {\n int32 r_1_2_1 = -1912251410;\n r_1_2.s_1 = r_1_2_1;\n }\n {\n uint72 r_1_2_2 = 4154322639538573442334;\n r_1_2.s_2 = r_1_2_2;\n }\n {\n S_5cde0d08 memory r_1_2_3;\n {\n address r_1_2_3_0 = 0xA112a997033D475213729d79dc5BF34753A7F1d5;\n r_1_2_3.s_0 = r_1_2_3_0;\n }\n {\n bool r_1_2_3_1 = true;\n r_1_2_3.s_1 = r_1_2_3_1;\n }\n r_1_2.s_3 = r_1_2_3;\n }\n r_1.s_2 = r_1_2;\n }\n {\n string[4] memory r_1_3;\n {\n string memory r_1_3_0 = unicode\"Moo é🚀oo🚀 🚀oMo \";\n r_1_3[0] = r_1_3_0;\n }\n {\n string memory r_1_3_1 = unicode\"Moo é🚀oo🚀 ooé🚀o🚀oo🚀🚀🚀🚀 oMé ééoMé é🚀🚀Mo🚀o é 🚀🚀🚀M\";\n r_1_3[1] = r_1_3_1;\n }\n {\n string memory r_1_3_2 = unicode\"Moo é🚀 🚀oMo ooooé éoMooMo🚀oéoo é🚀éoéoééo\";\n r_1_3[2] = r_1_3_2;\n }\n {\n string memory r_1_3_3 = unicode\"Moo é🚀oéMo🚀 éoM🚀oé🚀🚀🚀éoM🚀 é🚀ooéé🚀M 🚀Mo\";\n r_1_3[3] = r_1_3_3;\n }\n r_1.s_3 = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_f1f4634e memory r_2;\n {\n S_148a9025 memory r_2_0;\n {\n int216[2] memory r_2_0_0;\n {\n int216 r_2_0_0_0 = -13152154931715534320213074856036485664018615261154004905307360117;\n r_2_0_0[0] = r_2_0_0_0;\n }\n {\n int216 r_2_0_0_1 = -39534439954891917906023654868174038752171923281085183867978156330;\n r_2_0_0[1] = r_2_0_0_1;\n }\n r_2_0.s_0 = r_2_0_0;\n }\n {\n string memory r_2_0_1 = unicode\"Moo é🚀o ééMoo🚀o oo🚀M oM🚀éMo oM🚀o🚀o🚀éé🚀🚀o 🚀🚀oooééMoMoMéMoéoéo 🚀\";\n r_2_0.s_1 = r_2_0_1;\n }\n {\n string memory r_2_0_2 = unicode\"Moo é🚀🚀oo🚀o🚀🚀o M 🚀🚀🚀🚀M oéo🚀 Mo🚀oMoo oéoo🚀 ooéooM\";\n r_2_0.s_2 = r_2_0_2;\n }\n r_2.s_0 = r_2_0;\n }\n {\n uint176 r_2_1 = 90766279072655992782805791362450374916175215130045451;\n r_2.s_1 = r_2_1;\n }\n {\n S_0ecd4634 memory r_2_2;\n {\n uint48 r_2_2_0 = 264525479209981;\n r_2_2.s_0 = r_2_2_0;\n }\n {\n int32 r_2_2_1 = -36153002;\n r_2_2.s_1 = r_2_2_1;\n }\n {\n uint72 r_2_2_2 = 4112356281544586951689;\n r_2_2.s_2 = r_2_2_2;\n }\n {\n S_5cde0d08 memory r_2_2_3;\n {\n address r_2_2_3_0 = 0x6e1E11b3f1049C47a8202A2898B2B51592D35216;\n r_2_2_3.s_0 = r_2_2_3_0;\n }\n {\n bool r_2_2_3_1 = true;\n r_2_2_3.s_1 = r_2_2_3_1;\n }\n r_2_2.s_3 = r_2_2_3;\n }\n r_2.s_2 = r_2_2;\n }\n {\n string[4] memory r_2_3;\n {\n string memory r_2_3_0 = unicode\"Moo é🚀M🚀M🚀Mo🚀🚀éooooo M🚀oooM🚀 ooooo🚀M \";\n r_2_3[0] = r_2_3_0;\n }\n {\n string memory r_2_3_1 = unicode\"Moo é🚀 \";\n r_2_3[1] = r_2_3_1;\n }\n {\n string memory r_2_3_2 = unicode\"Moo é🚀Méooo é🚀 \";\n r_2_3[2] = r_2_3_2;\n }\n {\n string memory r_2_3_3 = unicode\"Moo é🚀Moéo🚀🚀oo MMoo M🚀🚀éo Moé\";\n r_2_3[3] = r_2_3_3;\n }\n r_2.s_3 = r_2_3;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000004a00000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000010000000000000000000000fb51a720a3cc60f170ce9669a5f5a61d31b7b15273de0000000000000000000000000000000000000000000000000000f52b63e05aec00000000000000000000000000000000000000000000000000000000389d66e70000000000000000000000000000000000000000000000c9adc4aa0a08e6a292000000000000000000000000ae33a4c5ba1f78b5e4a6ae5c565f7f41a14202290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000007638ac23b2108b84fad6a094643ab6ce9b7ef715831597148ffef40000000000640fef64950721c952b01b78c78793ba9780bebd236640c86a63fa000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a80f09f9a804df09f9a8020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a804d6f6f4df09f9a804d4d4d6f6fc3a9206fc3a9c3a96f6f6fc3a94df09f9a80f09f9a806f6f206ff09f9a806f4df09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000494d6f6f20c3a9f09f9a806f4dc3a9c3a9c3a9c3a96ff09f9a804dc3a9f09f9a80f09f9a80f09f9a806fc3a94df09f9a806f6f6ff09f9a80c3a9206fc3a96ff09f9a80f09f9a804dc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000404d6f6f20c3a9f09f9a804dc3a9206f6f20f09f9a80206f4d4df09f9a80c3a94dc3a9f09f9a806fc3a9204d6f6f4dc3a94df09f9a80206f6ff09f9a806fc3a94d00000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a806fc3a94d206f6f4dc3a9c3a94dc3a96f4d6f6ff09f9a806f6fc3a9f09f9a806f204dc3a9c3a920c3a9206fc3a920c3a9f09f9a80c3a9204dc3a920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000ac11cfe403bd95dc8656f8c4ec49a03ffd006f3b69f6000000000000000000000000000000000000000000000000000031d45dd6d2b1ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e055bee0000000000000000000000000000000000000000000000e134cede1d9bd27d1e000000000000000000000000a112a997033d475213729d79dc5bf34753a7f1d500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000220fffffffffffafd99d8a00e35fbe7039c7a86d33c5976e5e6523ecda6bc4b805effffffffffc88545da766c4154ef6a17307371a617868eae26e11463f79dc487000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a80206f4df09f9a804d204d6f4d20204d4df09f9a80c3a9f09f9a806fc3a94df09f9a806f6f4d206fc3a9f09f9a806f6f206f6f4d00000000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a80206fc3a9206f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000194d6f6f20c3a9f09f9a806f6ff09f9a8020f09f9a806f4d6f200000000000000000000000000000000000000000000000000000000000000000000000000000624d6f6f20c3a9f09f9a806f6ff09f9a80206f6fc3a9f09f9a806ff09f9a806f6ff09f9a80f09f9a80f09f9a80f09f9a80206f4dc3a92020c3a9c3a96f4dc3a920c3a9f09f9a80f09f9a804d6ff09f9a806f20c3a920f09f9a80f09f9a80f09f9a804d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a8020f09f9a806f4d6f206f6f6f6fc3a920c3a96f4d6f6f4d6ff09f9a806fc3a96f6f20c3a9f09f9a80c3a96fc3a96fc3a9c3a96f000000000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a806fc3a94d6ff09f9a8020c3a96f4df09f9a806fc3a9f09f9a80f09f9a80f09f9a80c3a96f4df09f9a802020c3a9f09f9a806f6fc3a9c3a9f09f9a804d20f09f9a804d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000f298ceef4381d751afe2458deeaa74e6b6a6ad2fec0b0000000000000000000000000000000000000000000000000000f095a338ebfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd859560000000000000000000000000000000000000000000000deee6869de0f61fc090000000000000000000000006e1e11b3f1049c47a8202a2898b2b51592d35216000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0ffffffffffe00764d6206db04ddc84c9d6d92bf4ef61a404552bfe74f828b48bffffffffff9fe5a8598409fc99b08a709c078027361fb338276b79a73ded76d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000006d4d6f6f20c3a9f09f9a806f20c3a9c3a94d6f6ff09f9a806f206f6ff09f9a804d206f4df09f9a80c3a94d6f206f4df09f9a806ff09f9a806ff09f9a80c3a9c3a9f09f9a80f09f9a806f20f09f9a80f09f9a806f6f6fc3a9c3a94d6f4d6f4dc3a94d6fc3a96fc3a96f20f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a80f09f9a806f6ff09f9a806ff09f9a80f09f9a806f20204d20f09f9a80f09f9a80f09f9a80f09f9a804d206fc3a96ff09f9a80204d6ff09f9a806f4d6f6f206fc3a96f6ff09f9a80206f6fc3a96f6f4d00000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a804df09f9a804df09f9a804d6ff09f9a80f09f9a80c3a96f6f6f6f6f204df09f9a806f6f6f4df09f9a80206f6f6f6f6ff09f9a804d2000000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a804dc3a96f6f6f20c3a9f09f9a8020000000000000000000000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a804d6fc3a96ff09f9a80f09f9a806f6f204d4d6f6f204df09f9a80f09f9a80c3a96f204d6fc3a900000000000000000000000000000000" + }, + { + "name": "random-(address,(bool,uint200[4],bytes28,bool),bool,int128,(bool,uint40,int104,uint))[4]", + "type": "(address,(bool,uint200[4],bytes28,bool),bool,int128,(bool,uint40,int104,uint))[4]", + "value": [ + [ + "0x6483b9602C68e905Bf8ba36a0a065415AB0af639", + [ + false, + [ + "514418966516435233886617767315871194762489908019221809404937", + "1501301031376961989029119853109627840372611485460022744085300", + "886410764806953048739611382037083609063717646795463602629845", + "484839980374218021364421632701016896284980611634496973281303" + ], + "0x83800d9f180ed67448931eed391601efff9ed1eb3b9a0d28cafb75e7", + true + ], + false, + "159253254907323182171260364339284352736", + [ + true, + "356730127431", + "9865322582107325960357830613087", + "8917537136417570004895590792349751377912321068607954940412896965217111454225" + ] + ], + [ + "0x1fAc7D74fF8B14264Dffc4F6BE1d2A09Ece171A3", + [ + true, + [ + "208484493814751486215646927731951067772625605766199890187923", + "907317232110342302212824042144906099749316601970104833768789", + "1509802737972189884820211405020107276437736938445460851485868", + "1368341901723745459116338988653705531947186370600717212032282" + ], + "0x30595d8c38d6350a3feeb0b5cbc50cafe620ebe75c1c9abcdf2fb661", + false + ], + false, + "113780725728544935959998669027456894192", + [ + true, + "569090002234", + "-5336575856077555684976670893979", + "87679255559492701024840493125083147882122682150621466792864560735426498258820" + ] + ], + [ + "0x0fe99cBb2FA277920d0e513e5093C1FdE041887E", + [ + false, + [ + "1242953348252922234096489672624760123702588763836821025423178", + "1474863606468306197946980957972383073856011997314937628246599", + "1519596270615883600197587582703232936025841624373245792116816", + "362417721106762462522546254185983175042631063770498773219637" + ], + "0x03950a42d674f329cb32699d200209dafd0549e92dc72a986ee84d3d", + false + ], + true, + "-21589455210126976280773672598553462871", + [ + false, + "135164124912", + "698874988038875535616621341509", + "71716764466554667585906090537894085286604969046244044223447440073180178282454" + ] + ], + [ + "0xAb4b439080Fb6ceBfb94563950938c16870f7d82", + [ + true, + [ + "632860196372717783674286486022027403437074454738220515644741", + "274299308528172247642898691778826953000464098219242823186103", + "1426327979618991963186693445013090137831312669577752214371318", + "897217399086177366232178009194560614833548563200558209684306" + ], + "0x222ce2cdcdd5c0227e7cd8746883b99f661692c8baad87e9e164c3da", + false + ], + false, + "-140971589281360977008119422838855157695", + [ + true, + "486664439153", + "2630442530268493921144028828147", + "56297137938606624557141739559683911873547666379441084222492019964013227321946" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6483b9602C68e905Bf8ba36a0a065415AB0af639" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "514418966516435233886617767315871194762489908019221809404937" + }, + { + "type": "number", + "value": "1501301031376961989029119853109627840372611485460022744085300" + }, + { + "type": "number", + "value": "886410764806953048739611382037083609063717646795463602629845" + }, + { + "type": "number", + "value": "484839980374218021364421632701016896284980611634496973281303" + } + ] + }, + { + "type": "hexstring", + "value": "0x83800d9f180ed67448931eed391601efff9ed1eb3b9a0d28cafb75e7" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "159253254907323182171260364339284352736" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "356730127431" + }, + { + "type": "number", + "value": "9865322582107325960357830613087" + }, + { + "type": "number", + "value": "8917537136417570004895590792349751377912321068607954940412896965217111454225" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x1fAc7D74fF8B14264Dffc4F6BE1d2A09Ece171A3" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "208484493814751486215646927731951067772625605766199890187923" + }, + { + "type": "number", + "value": "907317232110342302212824042144906099749316601970104833768789" + }, + { + "type": "number", + "value": "1509802737972189884820211405020107276437736938445460851485868" + }, + { + "type": "number", + "value": "1368341901723745459116338988653705531947186370600717212032282" + } + ] + }, + { + "type": "hexstring", + "value": "0x30595d8c38d6350a3feeb0b5cbc50cafe620ebe75c1c9abcdf2fb661" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "113780725728544935959998669027456894192" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "569090002234" + }, + { + "type": "number", + "value": "-5336575856077555684976670893979" + }, + { + "type": "number", + "value": "87679255559492701024840493125083147882122682150621466792864560735426498258820" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x0fe99cBb2FA277920d0e513e5093C1FdE041887E" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1242953348252922234096489672624760123702588763836821025423178" + }, + { + "type": "number", + "value": "1474863606468306197946980957972383073856011997314937628246599" + }, + { + "type": "number", + "value": "1519596270615883600197587582703232936025841624373245792116816" + }, + { + "type": "number", + "value": "362417721106762462522546254185983175042631063770498773219637" + } + ] + }, + { + "type": "hexstring", + "value": "0x03950a42d674f329cb32699d200209dafd0549e92dc72a986ee84d3d" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-21589455210126976280773672598553462871" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "135164124912" + }, + { + "type": "number", + "value": "698874988038875535616621341509" + }, + { + "type": "number", + "value": "71716764466554667585906090537894085286604969046244044223447440073180178282454" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xAb4b439080Fb6ceBfb94563950938c16870f7d82" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "632860196372717783674286486022027403437074454738220515644741" + }, + { + "type": "number", + "value": "274299308528172247642898691778826953000464098219242823186103" + }, + { + "type": "number", + "value": "1426327979618991963186693445013090137831312669577752214371318" + }, + { + "type": "number", + "value": "897217399086177366232178009194560614833548563200558209684306" + } + ] + }, + { + "type": "hexstring", + "value": "0x222ce2cdcdd5c0227e7cd8746883b99f661692c8baad87e9e164c3da" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-140971589281360977008119422838855157695" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "486664439153" + }, + { + "type": "number", + "value": "2630442530268493921144028828147" + }, + { + "type": "number", + "value": "56297137938606624557141739559683911873547666379441084222492019964013227321946" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610830806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906106ee565b60405180910390f35b61005661060e565b61005e61060e565b61006661063b565b736483b9602c68e905bf8ba36a0a065415ab0af63981526100856106a0565b600081526100916106d0565b7851f3a09be84005f328401d106d258245b5178868df5d711c09815278ef2bca1fe3ad1b0067def7a33a5d98bbee6f9b9c85547c7334602080830191909152788d36a032d2653d2eee25cb76f73fabf513d442616c2fd26cd5604080840191909152784d3d4d959604452586f59fcba9799c3fc199782b88a0c79817606080850191909152848301939093527f83800d9f180ed67448931eed391601efff9ed1eb3b9a0d28cafb75e700000000848201526001848401819052858301949094526000858201526f77cf0fad35970ce62ece4e8363c51ee08584015280516080808201835294815264530ec5c447928101929092526c7c849393958daee613abe6585f908201527f13b725abf42e8f6f3a752d762ab5991211e3b5483fd83bbc2bbfe402c03f3211918101919091529082015281526101cd61063b565b731fac7d74ff8b14264dffc4f6be1d2a09ece171a381526101ec6106a0565b600181526101f86106d0565b782136a7adab648295d420d6d281ad501013838d7be2fa089693815278908b41e6d7d248b6fdae3ab393d90129cbe939c2a844957d5560208083019190915278f086841540ad3ba072176d43ba70ea8345cd93b16881c16cac60408084019190915278d9fd4c0a448608ba2d95128d90a26c3e0781a747beca759d1a606080850191909152848301939093527f30595d8c38d6350a3feeb0b5cbc50cafe620ebe75c1c9abcdf2fb6610000000084820152600084840181905285830194909452848101939093526f55995ee4b801d610a94a9bf9bfbcc4f08483015282516080808201855260018252648480684d3a828401526c435b6815e7a6197174e891679a19948201949094527fc1d8b33416f30c7753a0d539cd90847366dd4bf37ab0c6bdd10507374fe7e784928101929092529183015282015261033861063b565b730fe99cbb2fa277920d0e513e5093c1fde041887e81526103576106a0565b600081526103636106d0565b78c6038e7580582f3b993bd9cd5d4ab8fa9892a1d890bf057f4a815278eaf59687915ada21032950f77cd5ba93e916574aee73d1c24760208083019190915278f215ed55b0999aa4651c079d75a29181ba3da8b9e4ffd660506040808401919091527839bc898f4943c29a8dd20311a3637bd615f4f581da8b42f935606080850191909152848301939093527f03950a42d674f329cb32699d200209dafd0549e92dc72a986ee84d3d00000000848201526000848401819052858301949094526001858201526f103dfa52e276fcaf962266963e9b88561985840152805160808082018352948152641f7868def0928101929092526c08d22fd738606196ab6d42eb45828201527f9e8e400eaade72e4839535d98d3066f5d40df724f77965fc9aa103de4caff7d692820192909252918301919091528201526104a461063b565b73ab4b439080fb6cebfb94563950938c16870f7d8281526104c36106a0565b600181526104cf6106d0565b7864d208bf4979f31b19eef17d32e71ba229c6fb553268a8d5458152782bb2ca67d637df04858437864ca4b795023957e1a654d576b760208083019190915278e33a26f0f1578d6ea8dfec2be338fc716af9bf22d8aa7dfbf6604080840191909152788eef5ab98ee8dbfbc96cea1f3f1a785345a92488825813d352606080850191909152848301939093527f222ce2cdcdd5c0227e7cd8746883b99f661692c8baad87e9e164c3da0000000084820152600084840181905285830194909452848101939093526f6a0e23f87eba00deabd1ccdc9bc7c7be19848301528251608080820185526001825264714f760571928201929092526c21336b103fc4b70e636ed491f3938101939093527f7c770d07146c609e514056ee41be8da179b1a5b4b134497895090e6c0ba4aa5a83830152830191909152820152919050565b60405180608001604052806004905b61062561063b565b81526020019060019003908161061d5790505090565b6040518060a0016040528060006001600160a01b0316815260200161065e6106a0565b8152600060208201819052604082015260600161069b60408051608081018252600080825260208201819052918101829052606081019190915290565b905290565b60405180608001604052806000151581526020016106bc6106d0565b815260006020820181905260409091015290565b60405180608001604052806004906020820280368337509192915050565b610700810181836000805b600480821061070857506107f0565b835180516001600160a01b031686526020808201518051151582890152808201516040808a01885b878110156107555783516001600160c81b031682529285019290850190600101610730565b50508281015163ffffffff191660c08b0152606092830151151560e08b01528401518015156101008b015291945061078a9050565b5091810151916107a0610120880184600f0b9052565b6080919091015180511515610140880152602081015164ffffffffff166101608801526040810151600c0b610180880152606001516101a08701526101c0909501949390930192506001016106f9565b505050509291505056fea2646970667358221220e65fc41beee1797c6e44e3c3974c8c503aa4510ceb25a0848f7e31ab7911cb8464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ba634d2e {\n bool s_0;\n uint200[4] s_1;\n bytes28 s_2;\n bool s_3;\n }\n\n struct S_c2f85d44 {\n bool s_0;\n uint40 s_1;\n int104 s_2;\n uint256 s_3;\n }\n\n struct S_2a9d1dd8 {\n address s_0;\n S_ba634d2e s_1;\n bool s_2;\n int128 s_3;\n S_c2f85d44 s_4;\n }\n\n function test () public pure returns (S_2a9d1dd8[4] memory) {\n S_2a9d1dd8[4] memory r;\n {\n S_2a9d1dd8 memory r_0;\n {\n address r_0_0 = 0x6483b9602C68e905Bf8ba36a0a065415AB0af639;\n r_0.s_0 = r_0_0;\n }\n {\n S_ba634d2e memory r_0_1;\n {\n bool r_0_1_0 = false;\n r_0_1.s_0 = r_0_1_0;\n }\n {\n uint200[4] memory r_0_1_1;\n {\n uint200 r_0_1_1_0 = 514418966516435233886617767315871194762489908019221809404937;\n r_0_1_1[0] = r_0_1_1_0;\n }\n {\n uint200 r_0_1_1_1 = 1501301031376961989029119853109627840372611485460022744085300;\n r_0_1_1[1] = r_0_1_1_1;\n }\n {\n uint200 r_0_1_1_2 = 886410764806953048739611382037083609063717646795463602629845;\n r_0_1_1[2] = r_0_1_1_2;\n }\n {\n uint200 r_0_1_1_3 = 484839980374218021364421632701016896284980611634496973281303;\n r_0_1_1[3] = r_0_1_1_3;\n }\n r_0_1.s_1 = r_0_1_1;\n }\n {\n bytes28 r_0_1_2 = bytes28(0x83800d9f180ed67448931eed391601efff9ed1eb3b9a0d28cafb75e7);\n r_0_1.s_2 = r_0_1_2;\n }\n {\n bool r_0_1_3 = true;\n r_0_1.s_3 = r_0_1_3;\n }\n r_0.s_1 = r_0_1;\n }\n {\n bool r_0_2 = false;\n r_0.s_2 = r_0_2;\n }\n {\n int128 r_0_3 = 159253254907323182171260364339284352736;\n r_0.s_3 = r_0_3;\n }\n {\n S_c2f85d44 memory r_0_4;\n {\n bool r_0_4_0 = true;\n r_0_4.s_0 = r_0_4_0;\n }\n {\n uint40 r_0_4_1 = 356730127431;\n r_0_4.s_1 = r_0_4_1;\n }\n {\n int104 r_0_4_2 = 9865322582107325960357830613087;\n r_0_4.s_2 = r_0_4_2;\n }\n {\n uint r_0_4_3 = 8917537136417570004895590792349751377912321068607954940412896965217111454225;\n r_0_4.s_3 = r_0_4_3;\n }\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_2a9d1dd8 memory r_1;\n {\n address r_1_0 = 0x1fAc7D74fF8B14264Dffc4F6BE1d2A09Ece171A3;\n r_1.s_0 = r_1_0;\n }\n {\n S_ba634d2e memory r_1_1;\n {\n bool r_1_1_0 = true;\n r_1_1.s_0 = r_1_1_0;\n }\n {\n uint200[4] memory r_1_1_1;\n {\n uint200 r_1_1_1_0 = 208484493814751486215646927731951067772625605766199890187923;\n r_1_1_1[0] = r_1_1_1_0;\n }\n {\n uint200 r_1_1_1_1 = 907317232110342302212824042144906099749316601970104833768789;\n r_1_1_1[1] = r_1_1_1_1;\n }\n {\n uint200 r_1_1_1_2 = 1509802737972189884820211405020107276437736938445460851485868;\n r_1_1_1[2] = r_1_1_1_2;\n }\n {\n uint200 r_1_1_1_3 = 1368341901723745459116338988653705531947186370600717212032282;\n r_1_1_1[3] = r_1_1_1_3;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n {\n bytes28 r_1_1_2 = bytes28(0x30595d8c38d6350a3feeb0b5cbc50cafe620ebe75c1c9abcdf2fb661);\n r_1_1.s_2 = r_1_1_2;\n }\n {\n bool r_1_1_3 = false;\n r_1_1.s_3 = r_1_1_3;\n }\n r_1.s_1 = r_1_1;\n }\n {\n bool r_1_2 = false;\n r_1.s_2 = r_1_2;\n }\n {\n int128 r_1_3 = 113780725728544935959998669027456894192;\n r_1.s_3 = r_1_3;\n }\n {\n S_c2f85d44 memory r_1_4;\n {\n bool r_1_4_0 = true;\n r_1_4.s_0 = r_1_4_0;\n }\n {\n uint40 r_1_4_1 = 569090002234;\n r_1_4.s_1 = r_1_4_1;\n }\n {\n int104 r_1_4_2 = -5336575856077555684976670893979;\n r_1_4.s_2 = r_1_4_2;\n }\n {\n uint r_1_4_3 = 87679255559492701024840493125083147882122682150621466792864560735426498258820;\n r_1_4.s_3 = r_1_4_3;\n }\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n {\n S_2a9d1dd8 memory r_2;\n {\n address r_2_0 = 0x0fe99cBb2FA277920d0e513e5093C1FdE041887E;\n r_2.s_0 = r_2_0;\n }\n {\n S_ba634d2e memory r_2_1;\n {\n bool r_2_1_0 = false;\n r_2_1.s_0 = r_2_1_0;\n }\n {\n uint200[4] memory r_2_1_1;\n {\n uint200 r_2_1_1_0 = 1242953348252922234096489672624760123702588763836821025423178;\n r_2_1_1[0] = r_2_1_1_0;\n }\n {\n uint200 r_2_1_1_1 = 1474863606468306197946980957972383073856011997314937628246599;\n r_2_1_1[1] = r_2_1_1_1;\n }\n {\n uint200 r_2_1_1_2 = 1519596270615883600197587582703232936025841624373245792116816;\n r_2_1_1[2] = r_2_1_1_2;\n }\n {\n uint200 r_2_1_1_3 = 362417721106762462522546254185983175042631063770498773219637;\n r_2_1_1[3] = r_2_1_1_3;\n }\n r_2_1.s_1 = r_2_1_1;\n }\n {\n bytes28 r_2_1_2 = bytes28(0x03950a42d674f329cb32699d200209dafd0549e92dc72a986ee84d3d);\n r_2_1.s_2 = r_2_1_2;\n }\n {\n bool r_2_1_3 = false;\n r_2_1.s_3 = r_2_1_3;\n }\n r_2.s_1 = r_2_1;\n }\n {\n bool r_2_2 = true;\n r_2.s_2 = r_2_2;\n }\n {\n int128 r_2_3 = -21589455210126976280773672598553462871;\n r_2.s_3 = r_2_3;\n }\n {\n S_c2f85d44 memory r_2_4;\n {\n bool r_2_4_0 = false;\n r_2_4.s_0 = r_2_4_0;\n }\n {\n uint40 r_2_4_1 = 135164124912;\n r_2_4.s_1 = r_2_4_1;\n }\n {\n int104 r_2_4_2 = 698874988038875535616621341509;\n r_2_4.s_2 = r_2_4_2;\n }\n {\n uint r_2_4_3 = 71716764466554667585906090537894085286604969046244044223447440073180178282454;\n r_2_4.s_3 = r_2_4_3;\n }\n r_2.s_4 = r_2_4;\n }\n r[2] = r_2;\n }\n {\n S_2a9d1dd8 memory r_3;\n {\n address r_3_0 = 0xAb4b439080Fb6ceBfb94563950938c16870f7d82;\n r_3.s_0 = r_3_0;\n }\n {\n S_ba634d2e memory r_3_1;\n {\n bool r_3_1_0 = true;\n r_3_1.s_0 = r_3_1_0;\n }\n {\n uint200[4] memory r_3_1_1;\n {\n uint200 r_3_1_1_0 = 632860196372717783674286486022027403437074454738220515644741;\n r_3_1_1[0] = r_3_1_1_0;\n }\n {\n uint200 r_3_1_1_1 = 274299308528172247642898691778826953000464098219242823186103;\n r_3_1_1[1] = r_3_1_1_1;\n }\n {\n uint200 r_3_1_1_2 = 1426327979618991963186693445013090137831312669577752214371318;\n r_3_1_1[2] = r_3_1_1_2;\n }\n {\n uint200 r_3_1_1_3 = 897217399086177366232178009194560614833548563200558209684306;\n r_3_1_1[3] = r_3_1_1_3;\n }\n r_3_1.s_1 = r_3_1_1;\n }\n {\n bytes28 r_3_1_2 = bytes28(0x222ce2cdcdd5c0227e7cd8746883b99f661692c8baad87e9e164c3da);\n r_3_1.s_2 = r_3_1_2;\n }\n {\n bool r_3_1_3 = false;\n r_3_1.s_3 = r_3_1_3;\n }\n r_3.s_1 = r_3_1;\n }\n {\n bool r_3_2 = false;\n r_3.s_2 = r_3_2;\n }\n {\n int128 r_3_3 = -140971589281360977008119422838855157695;\n r_3.s_3 = r_3_3;\n }\n {\n S_c2f85d44 memory r_3_4;\n {\n bool r_3_4_0 = true;\n r_3_4.s_0 = r_3_4_0;\n }\n {\n uint40 r_3_4_1 = 486664439153;\n r_3_4.s_1 = r_3_4_1;\n }\n {\n int104 r_3_4_2 = 2630442530268493921144028828147;\n r_3_4.s_2 = r_3_4_2;\n }\n {\n uint r_3_4_3 = 56297137938606624557141739559683911873547666379441084222492019964013227321946;\n r_3_4.s_3 = r_3_4_3;\n }\n r_3.s_4 = r_3_4;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000006483b9602c68e905bf8ba36a0a065415ab0af63900000000000000000000000000000000000000000000000000000000000000000000000000000051f3a09be84005f328401d106d258245b5178868df5d711c0900000000000000ef2bca1fe3ad1b0067def7a33a5d98bbee6f9b9c85547c7334000000000000008d36a032d2653d2eee25cb76f73fabf513d442616c2fd26cd5000000000000004d3d4d959604452586f59fcba9799c3fc199782b88a0c7981783800d9f180ed67448931eed391601efff9ed1eb3b9a0d28cafb75e700000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077cf0fad35970ce62ece4e8363c51ee00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000530ec5c447000000000000000000000000000000000000007c849393958daee613abe6585f13b725abf42e8f6f3a752d762ab5991211e3b5483fd83bbc2bbfe402c03f32110000000000000000000000001fac7d74ff8b14264dffc4f6be1d2a09ece171a30000000000000000000000000000000000000000000000000000000000000001000000000000002136a7adab648295d420d6d281ad501013838d7be2fa08969300000000000000908b41e6d7d248b6fdae3ab393d90129cbe939c2a844957d5500000000000000f086841540ad3ba072176d43ba70ea8345cd93b16881c16cac00000000000000d9fd4c0a448608ba2d95128d90a26c3e0781a747beca759d1a30595d8c38d6350a3feeb0b5cbc50cafe620ebe75c1c9abcdf2fb66100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055995ee4b801d610a94a9bf9bfbcc4f000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000008480684d3affffffffffffffffffffffffffffffffffffffbca497ea1859e68e8b176e9865c1d8b33416f30c7753a0d539cd90847366dd4bf37ab0c6bdd10507374fe7e7840000000000000000000000000fe99cbb2fa277920d0e513e5093c1fde041887e000000000000000000000000000000000000000000000000000000000000000000000000000000c6038e7580582f3b993bd9cd5d4ab8fa9892a1d890bf057f4a00000000000000eaf59687915ada21032950f77cd5ba93e916574aee73d1c24700000000000000f215ed55b0999aa4651c079d75a29181ba3da8b9e4ffd660500000000000000039bc898f4943c29a8dd20311a3637bd615f4f581da8b42f93503950a42d674f329cb32699d200209dafd0549e92dc72a986ee84d3d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffefc205ad1d89035069dd9969c16477a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f7868def00000000000000000000000000000000000000008d22fd738606196ab6d42eb459e8e400eaade72e4839535d98d3066f5d40df724f77965fc9aa103de4caff7d6000000000000000000000000ab4b439080fb6cebfb94563950938c16870f7d8200000000000000000000000000000000000000000000000000000000000000010000000000000064d208bf4979f31b19eef17d32e71ba229c6fb553268a8d545000000000000002bb2ca67d637df04858437864ca4b795023957e1a654d576b700000000000000e33a26f0f1578d6ea8dfec2be338fc716af9bf22d8aa7dfbf6000000000000008eef5ab98ee8dbfbc96cea1f3f1a785345a92488825813d352222ce2cdcdd5c0227e7cd8746883b99f661692c8baad87e9e164c3da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff95f1dc078145ff21542e3323643838410000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000714f7605710000000000000000000000000000000000000021336b103fc4b70e636ed491f37c770d07146c609e514056ee41be8da179b1a5b4b134497895090e6c0ba4aa5a" + }, + { + "name": "random-(address,string,(uint40,bytes15,bytes28,int,string),(bytes25,int136,address,uint,string),bytes23)", + "type": "(address,string,(uint40,bytes15,bytes28,int,string),(bytes25,int136,address,uint,string),bytes23)", + "value": [ + "0x1f6F9AA91DBc51ff53978965E1a84e19E4134e08", + "Moo é🚀éo🚀oMoéoM ééoéoMéMM MéMM MMMoéoMMéo🚀oMMoo", + [ + "963517794903", + "0x5d25e2555bb5e149f85c587a997614", + "0x73d50e2a4f03009d592af0a0a4e3b83b3a3ba2489a982c759868b1cb", + "45249570386203554570058350576891500613898921856836561708627905017830103504292", + "Moo é🚀M🚀oéMéoMM🚀ééMé" + ], + [ + "0x9c00280e7ee343df62cf359a8fe35413cf3a91e1f7f34faf28", + "-19896503621507867938384084543574584982430", + "0xf099D111a814e84e1605855d414ACEf536927986", + "34096947975909874148543574699556533163306716778029820395064892838708639072795", + "Moo é🚀oMoo oM🚀ooo🚀 oMoéoo🚀éoMooooooo🚀MMooé" + ], + "0x4f0f7c853c1f997998bd45503bed93d34cfb5b4654689c" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x1f6F9AA91DBc51ff53978965E1a84e19E4134e08" + }, + { + "type": "string", + "value": "Moo é🚀éo🚀oMoéoM ééoéoMéMM MéMM MMMoéoMMéo🚀oMMoo" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "963517794903" + }, + { + "type": "hexstring", + "value": "0x5d25e2555bb5e149f85c587a997614" + }, + { + "type": "hexstring", + "value": "0x73d50e2a4f03009d592af0a0a4e3b83b3a3ba2489a982c759868b1cb" + }, + { + "type": "number", + "value": "45249570386203554570058350576891500613898921856836561708627905017830103504292" + }, + { + "type": "string", + "value": "Moo é🚀M🚀oéMéoMM🚀ééMé" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x9c00280e7ee343df62cf359a8fe35413cf3a91e1f7f34faf28" + }, + { + "type": "number", + "value": "-19896503621507867938384084543574584982430" + }, + { + "type": "address", + "value": "0xf099D111a814e84e1605855d414ACEf536927986" + }, + { + "type": "number", + "value": "34096947975909874148543574699556533163306716778029820395064892838708639072795" + }, + { + "type": "string", + "value": "Moo é🚀oMoo oM🚀ooo🚀 oMoéoo🚀éoMooooooo🚀MMooé" + } + ] + }, + { + "type": "hexstring", + "value": "0x4f0f7c853c1f997998bd45503bed93d34cfb5b4654689c" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061054b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061038c565b60405180910390f35b610056610246565b61005e610246565b731f6f9aa91dbc51ff53978965e1a84e19e4134e08815260408051608081019091526042808252600091906104b160208301396020830152506100ca6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915290565b64e05622ca5781526e1749789556ed78527e17161ea65d85608a1b6020808301919091527f73d50e2a4f03009d592af0a0a4e3b83b3a3ba2489a982c759868b1cb000000006040808401919091527f640a5967ecb8e43db94ce706a8526be99843c24cf04e7604d75186ae0422d5a4606080850191909152815190810190915260238082526000926104f390830139608083015250604082015261016c6102a0565b7f9c00280e7ee343df62cf359a8fe35413cf3a91e1f7f34faf28000000000000008152703a78773619888bb330a1444736aa6dfb9d1960208083019190915273f099d111a814e84e1605855d414acef5369279866040808401919091527f4b62304b84e64fe10590383f9135ad9c1a4ac145ebf8cd6fa01dcfd80c06821b6060808501919091528151908101909152603d808252600092610474908301396080808401919091526060840192909252507f4f0f7c853c1f997998bd45503bed93d34cfb5b4654689c00000000000000000090820152919050565b6040805160a08082018352600080835260606020808501829052855193840186528284528301829052828501829052828101919091526080820152909182019081526020016102936102a0565b8152600060209091015290565b6040518060a00160405280600066ffffffffffffff19168152602001600060100b815260200160006001600160a01b0316815260200160008152602001606081525090565b6000815180845260005b8181101561030b576020818501810151868301820152016102ef565b8181111561031d576000602083870101525b50601f01601f19169290920160200192915050565b66ffffffffffffff198151168252602081015160100b602083015260018060a01b036040820151166040830152606081015160608301526000608082015160a0608085015261038460a08501826102e5565b949350505050565b602080825282516001600160a01b03168282015282015160a060408301526000906103ba60c08401826102e5565b90506040840151601f198085840301606086015264ffffffffff825116835270ffffffffffffffffffffffffffffffffff19602083015116602084015263ffffffff196040830151166040840152606082015160608401526080820151915060a0608084015261042d60a08401836102e5565b925060608601519150808584030160808601525061044b8282610332565b915050608084015161046b60a085018268ffffffffffffffffff19169052565b50939250505056fe4d6f6f20c3a9f09f9a806f4d6f6f206f4df09f9a806f6f6ff09f9a80206f4d6fc3a96f6ff09f9a80c3a96f4d6f6f6f6f6f6f6ff09f9a804d4d6f6fc3a94d6f6f20c3a9f09f9a80c3a96ff09f9a806f4d6fc3a96f4d20c3a9c3a96fc3a96f4dc3a94d4d204dc3a94d4d204d4d4d6fc3a96f4d4dc3a96ff09f9a806f4d4d6f6f4d6f6f20c3a9f09f9a804df09f9a806fc3a94dc3a96f4d4df09f9a80c3a9c3a94dc3a9a2646970667358221220754b95e5a50280f3fbc3a0ff812f670f0b681b3d4032cb45f9a1d6907d049aa464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_e6dee617 {\n uint40 s_0;\n bytes15 s_1;\n bytes28 s_2;\n int256 s_3;\n string s_4;\n }\n\n struct S_390d33f2 {\n bytes25 s_0;\n int136 s_1;\n address s_2;\n uint256 s_3;\n string s_4;\n }\n\n struct S_93dc0348 {\n address s_0;\n string s_1;\n S_e6dee617 s_2;\n S_390d33f2 s_3;\n bytes23 s_4;\n }\n\n function test () public pure returns (S_93dc0348 memory) {\n S_93dc0348 memory r;\n {\n address r_0 = 0x1f6F9AA91DBc51ff53978965E1a84e19E4134e08;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀éo🚀oMoéoM ééoéoMéMM MéMM MMMoéoMMéo🚀oMMoo\";\n r.s_1 = r_1;\n }\n {\n S_e6dee617 memory r_2;\n {\n uint40 r_2_0 = 963517794903;\n r_2.s_0 = r_2_0;\n }\n {\n bytes15 r_2_1 = bytes15(0x5d25e2555bb5e149f85c587a997614);\n r_2.s_1 = r_2_1;\n }\n {\n bytes28 r_2_2 = bytes28(0x73d50e2a4f03009d592af0a0a4e3b83b3a3ba2489a982c759868b1cb);\n r_2.s_2 = r_2_2;\n }\n {\n int r_2_3 = 45249570386203554570058350576891500613898921856836561708627905017830103504292;\n r_2.s_3 = r_2_3;\n }\n {\n string memory r_2_4 = unicode\"Moo é🚀M🚀oéMéoMM🚀ééMé\";\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n {\n S_390d33f2 memory r_3;\n {\n bytes25 r_3_0 = bytes25(0x9c00280e7ee343df62cf359a8fe35413cf3a91e1f7f34faf28);\n r_3.s_0 = r_3_0;\n }\n {\n int136 r_3_1 = -19896503621507867938384084543574584982430;\n r_3.s_1 = r_3_1;\n }\n {\n address r_3_2 = 0xf099D111a814e84e1605855d414ACEf536927986;\n r_3.s_2 = r_3_2;\n }\n {\n uint r_3_3 = 34096947975909874148543574699556533163306716778029820395064892838708639072795;\n r_3.s_3 = r_3_3;\n }\n {\n string memory r_3_4 = unicode\"Moo é🚀oMoo oM🚀ooo🚀 oMoéoo🚀éoMooooooo🚀MMooé\";\n r_3.s_4 = r_3_4;\n }\n r.s_3 = r_3;\n }\n {\n bytes23 r_4 = bytes23(0x4f0f7c853c1f997998bd45503bed93d34cfb5b4654689c);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000001f6f9aa91dbc51ff53978965e1a84e19e4134e0800000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000002204f0f7c853c1f997998bd45503bed93d34cfb5b4654689c00000000000000000000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a80c3a96ff09f9a806f4d6fc3a96f4d20c3a9c3a96fc3a96f4dc3a94d4d204dc3a94d4d204d4d4d6fc3a96f4d4dc3a96ff09f9a806f4d4d6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e05622ca575d25e2555bb5e149f85c587a997614000000000000000000000000000000000073d50e2a4f03009d592af0a0a4e3b83b3a3ba2489a982c759868b1cb00000000640a5967ecb8e43db94ce706a8526be99843c24cf04e7604d75186ae0422d5a400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a804df09f9a806fc3a94dc3a96f4d4df09f9a80c3a9c3a94dc3a900000000000000000000000000000000000000000000000000000000009c00280e7ee343df62cf359a8fe35413cf3a91e1f7f34faf2800000000000000ffffffffffffffffffffffffffffffc58788c9e677744ccf5ebbb8c955920462000000000000000000000000f099d111a814e84e1605855d414acef5369279864b62304b84e64fe10590383f9135ad9c1a4ac145ebf8cd6fa01dcfd80c06821b00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a806f4d6f6f206f4df09f9a806f6f6ff09f9a80206f4d6fc3a96f6ff09f9a80c3a96f4d6f6f6f6f6f6f6ff09f9a804d4d6f6fc3a9000000" + }, + { + "name": "random-(bool,bool,(bytes21,bytes6),(bool,(address,(int144,bytes12),int248,bool),address,int88,string))", + "type": "(bool,bool,(bytes21,bytes6),(bool,(address,(int144,bytes12),int248,bool),address,int88,string))", + "value": [ + true, + true, + ["0xa35b243393d6cb7e61720acbe82552385725973ba5", "0xbb2453a9685b"], + [ + false, + [ + "0x6d73E405Cdb6aebfcE048d415067F3bddd217bA8", + ["7525579090553749767991480274236885517172672", "0x8a9bff23be1b4dec97be8d80"], + "11673953464856844942616539677257439346346987319979127891031453612887670754", + true + ], + "0x613e0709f953ccF63E22538d860b9F72A7505197", + "-3090628936535824130251653", + "Moo é🚀 ooM🚀ooM Mé 🚀ooMé" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa35b243393d6cb7e61720acbe82552385725973ba5" + }, + { + "type": "hexstring", + "value": "0xbb2453a9685b" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6d73E405Cdb6aebfcE048d415067F3bddd217bA8" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "7525579090553749767991480274236885517172672" + }, + { + "type": "hexstring", + "value": "0x8a9bff23be1b4dec97be8d80" + } + ] + }, + { + "type": "number", + "value": "11673953464856844942616539677257439346346987319979127891031453612887670754" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0x613e0709f953ccF63E22538d860b9F72A7505197" + }, + { + "type": "number", + "value": "-3090628936535824130251653" + }, + { + "type": "string", + "value": "Moo é🚀 ooM🚀ooM Mé 🚀ooMé" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610418806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102ae565b60405180910390f35b6100566101b9565b61005e6101b9565b60018082526020820152610082604080518082019091526000808252602082015290565b74a35b243393d6cb7e61720acbe82552385725973ba560581b815265bb2453a9685b60d01b602082015260408201526100b96101fc565b6000808252604080516080810182528281528151808301835283815260208082018590528083019182528284018581526060808501878152736d73e405cdb6aebfce048d415067f3bddd217ba8865286518088018852715663b073ef68cc0a7debeedc0b31a16f7fc081526b011537fe477c369bd92f7d1b60a71b818601529094527e069b72fffc846a6abcaa7e5cfc20e1f744440026314ac7f24efac2847e7fe290915260019092528086019290925273613e0709f953ccf63e22538d860b9f72a7505197838601526a028e775492ed6e85461b84198186015282519081019092526023808352906103c0908301396080830152506060820152919050565b60408051608081018252600080825260208201529081016101ea604080518082019091526000808252602082015290565b81526020016101f76101fc565b905290565b6040518060a00160405280600015158152602001610248604080516080810182526000808252825180840184528181526020808201839052830152918101829052606081019190915290565b8152600060208201819052604082015260609081015290565b6000815180845260005b818110156102875760208185018101518683018201520161026b565b81811115610299576000602083870101525b50601f01601f19169290920160200192915050565b602080825282511515828201528281015115156040808401919091528084015180516affffffffffffffffffffff1916606080860191909152908301516001600160d01b03191660808501528085015160a0808601528051151560c08601528084015180516001600160a01b031660e087015280850151805160110b610100880152909401516001600160a01b0319166101208087019190915284840151601e0b610140870152918401511515610160860152918201516000939092916103816101808701856001600160a01b03169052565b606083015193506103986101a0870185600a0b9052565b60808301519350806101c08701525050506103b76101e0840182610261565b94935050505056fe4d6f6f20c3a9f09f9a80206f6f4df09f9a806f6f4d204dc3a920f09f9a806f6f4dc3a9a264697066735822122043a9b0c671683252000dd40e5c460877d68a714552ddc24fee0cbb4e12c75d5c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ba958cef {\n bytes21 s_0;\n bytes6 s_1;\n }\n\n struct S_555d9b69 {\n int144 s_0;\n bytes12 s_1;\n }\n\n struct S_a4a62bcb {\n address s_0;\n S_555d9b69 s_1;\n int248 s_2;\n bool s_3;\n }\n\n struct S_5bf68f0b {\n bool s_0;\n S_a4a62bcb s_1;\n address s_2;\n int88 s_3;\n string s_4;\n }\n\n struct S_99790a4e {\n bool s_0;\n bool s_1;\n S_ba958cef s_2;\n S_5bf68f0b s_3;\n }\n\n function test () public pure returns (S_99790a4e memory) {\n S_99790a4e memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n S_ba958cef memory r_2;\n {\n bytes21 r_2_0 = bytes21(0xa35b243393d6cb7e61720acbe82552385725973ba5);\n r_2.s_0 = r_2_0;\n }\n {\n bytes6 r_2_1 = bytes6(0xbb2453a9685b);\n r_2.s_1 = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n S_5bf68f0b memory r_3;\n {\n bool r_3_0 = false;\n r_3.s_0 = r_3_0;\n }\n {\n S_a4a62bcb memory r_3_1;\n {\n address r_3_1_0 = 0x6d73E405Cdb6aebfcE048d415067F3bddd217bA8;\n r_3_1.s_0 = r_3_1_0;\n }\n {\n S_555d9b69 memory r_3_1_1;\n {\n int144 r_3_1_1_0 = 7525579090553749767991480274236885517172672;\n r_3_1_1.s_0 = r_3_1_1_0;\n }\n {\n bytes12 r_3_1_1_1 = bytes12(0x8a9bff23be1b4dec97be8d80);\n r_3_1_1.s_1 = r_3_1_1_1;\n }\n r_3_1.s_1 = r_3_1_1;\n }\n {\n int248 r_3_1_2 = 11673953464856844942616539677257439346346987319979127891031453612887670754;\n r_3_1.s_2 = r_3_1_2;\n }\n {\n bool r_3_1_3 = true;\n r_3_1.s_3 = r_3_1_3;\n }\n r_3.s_1 = r_3_1;\n }\n {\n address r_3_2 = 0x613e0709f953ccF63E22538d860b9F72A7505197;\n r_3.s_2 = r_3_2;\n }\n {\n int88 r_3_3 = -3090628936535824130251653;\n r_3.s_3 = r_3_3;\n }\n {\n string memory r_3_4 = unicode\"Moo é🚀 ooM🚀ooM Mé 🚀ooMé\";\n r_3.s_4 = r_3_4;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a35b243393d6cb7e61720acbe82552385725973ba50000000000000000000000bb2453a9685b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d73e405cdb6aebfce048d415067f3bddd217ba800000000000000000000000000005663b073ef68cc0a7debeedc0b31a16f7fc08a9bff23be1b4dec97be8d80000000000000000000000000000000000000000000069b72fffc846a6abcaa7e5cfc20e1f744440026314ac7f24efac2847e7fe20000000000000000000000000000000000000000000000000000000000000001000000000000000000000000613e0709f953ccf63e22538d860b9f72a7505197fffffffffffffffffffffffffffffffffffffffffffd7188ab6d12917ab9e47b000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a80206f6f4df09f9a806f6f4d204dc3a920f09f9a806f6f4dc3a90000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes20,(uint240,uint32,(((bytes26,address)),bool,string,bytes1,(bool,bool)),(address,address,uint80)))", + "type": "(bytes20,(uint240,uint32,(((bytes26,address)),bool,string,bytes1,(bool,bool)),(address,address,uint80)))", + "value": [ + "0x7543676c36552749c981859bfa1da42cc8635586", + [ + "848900141235319058079322759146918135940608999140472087548375057634067570", + "2633321923", + [ + [ + [ + "0x09542dc7aae78b6537535c2de2e954f96f759458ac45f47dab60", + "0x4A045c296584c765B7CC82B8C83BbA28a209971d" + ] + ], + true, + "Moo é🚀🚀🚀éM oé Mo🚀🚀 🚀oé🚀🚀🚀éMM M🚀é Mo é ", + "0xcc", + [false, true] + ], + [ + "0x2a9102268b16C6eD54d1F5089ae618C7d69B60CE", + "0x0d31AA2D7B8dc2b46F8536232D62742237FA92ad", + "286450449107416109303001" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x7543676c36552749c981859bfa1da42cc8635586" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "848900141235319058079322759146918135940608999140472087548375057634067570" + }, + { + "type": "number", + "value": "2633321923" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x09542dc7aae78b6537535c2de2e954f96f759458ac45f47dab60" + }, + { + "type": "address", + "value": "0x4A045c296584c765B7CC82B8C83BbA28a209971d" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀éM oé Mo🚀🚀 🚀oé🚀🚀🚀éMM M🚀é Mo é " + }, + { + "type": "hexstring", + "value": "0xcc" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x2a9102268b16C6eD54d1F5089ae618C7d69B60CE" + }, + { + "type": "address", + "value": "0x0d31AA2D7B8dc2b46F8536232D62742237FA92ad" + }, + { + "type": "number", + "value": "286450449107416109303001" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061049b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102bc565b60405180910390f35b6100566101e9565b61005e6101e9565b733aa1b3b61b2a93a4e4c0c2cdfd0ed2166431aac360611b8152610080610208565b7d7aff74ccec964f3f5ed64fe76744b4a8ee202aa4554af54a01375ff284728152639cf54dc360208201526100b361024a565b60408051606081018252600060208083018281528385018390528352835180850185527f09542dc7aae78b6537535c2de2e954f96f759458ac45f47dab600000000000008152734a045c296584c765b7cc82b8c83bba28a209971d818301528352918452600184830152825160808101909352604d80845290929161041990830139604080840191909152603360fa1b60608401528051808201909152600080825260208201529050600081526001602082015260808201526040820152610194604080516060810182526000808252602082018190529181019190915290565b732a9102268b16c6ed54d1f5089ae618c7d69b60ce8152730d31aa2d7b8dc2b46f8536232d62742237fa92ad602080830191909152693ca8828cd7abb7b844d960408301526060830191909152820152919050565b604080518082019091526000815260208101610203610208565b905290565b604080516080810182526000808252602082015290810161022761024a565b815260408051606081018252600080825260208281018290529282015291015290565b6040518060a00160405280610275604080516060810182526000602082018181529282015290815290565b81526020016000151581526020016060815260200160006001600160f81b031916815260200161020360405180604001604052806000151581526020016000151581525090565b602080825282516bffffffffffffffffffffffff19168282015282810151604080840181905281516001600160f01b031660608501528183015163ffffffff1660808501528082015160c060a0860152805151805165ffffffffffff19166101208701528401516001600160a01b03166101408601528084015115156101608601529081015160e06101808601528051610200860181905260009493929190855b8181101561037a578281018601518882016102200152850161035d565b8181111561038d576000610220838a0101525b5060608301516001600160f81b031981166101a089015294506080830151805115156101c0890152602081015115156101e08901529450606084015180516001600160a01b0390811660c08a015260208201511660e0890152604081015169ffffffffffffffffffff166101008901529450601f01601f19169590950161022001969550505050505056fe4d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a94d206fc3a92020204d6ff09f9a80f09f9a8020f09f9a806fc3a9f09f9a80f09f9a80f09f9a80c3a94d4d204df09f9a80c3a9204d6f20c3a920a2646970667358221220661b27cb5e16e6e9fdc4aed04dbbc4ef627891978a46405ced3f0ef2b8ed060e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ec804f62 {\n bytes26 s_0;\n address s_1;\n }\n\n struct S_f75f58e4 {\n S_ec804f62 s_0;\n }\n\n struct S_25e98821 {\n bool s_0;\n bool s_1;\n }\n\n struct S_a32c0f73 {\n S_f75f58e4 s_0;\n bool s_1;\n string s_2;\n bytes1 s_3;\n S_25e98821 s_4;\n }\n\n struct S_fb1fb05a {\n address s_0;\n address s_1;\n uint80 s_2;\n }\n\n struct S_81c46499 {\n uint240 s_0;\n uint32 s_1;\n S_a32c0f73 s_2;\n S_fb1fb05a s_3;\n }\n\n struct S_a641b0aa {\n bytes20 s_0;\n S_81c46499 s_1;\n }\n\n function test () public pure returns (S_a641b0aa memory) {\n S_a641b0aa memory r;\n {\n bytes20 r_0 = bytes20(0x7543676C36552749c981859bfA1da42Cc8635586);\n r.s_0 = r_0;\n }\n {\n S_81c46499 memory r_1;\n {\n uint240 r_1_0 = 848900141235319058079322759146918135940608999140472087548375057634067570;\n r_1.s_0 = r_1_0;\n }\n {\n uint32 r_1_1 = 2633321923;\n r_1.s_1 = r_1_1;\n }\n {\n S_a32c0f73 memory r_1_2;\n {\n S_f75f58e4 memory r_1_2_0;\n {\n S_ec804f62 memory r_1_2_0_0;\n {\n bytes26 r_1_2_0_0_0 = bytes26(0x09542dc7aae78b6537535c2de2e954f96f759458ac45f47dab60);\n r_1_2_0_0.s_0 = r_1_2_0_0_0;\n }\n {\n address r_1_2_0_0_1 = 0x4A045c296584c765B7CC82B8C83BbA28a209971d;\n r_1_2_0_0.s_1 = r_1_2_0_0_1;\n }\n r_1_2_0.s_0 = r_1_2_0_0;\n }\n r_1_2.s_0 = r_1_2_0;\n }\n {\n bool r_1_2_1 = true;\n r_1_2.s_1 = r_1_2_1;\n }\n {\n string memory r_1_2_2 = unicode\"Moo é🚀🚀🚀éM oé Mo🚀🚀 🚀oé🚀🚀🚀éMM M🚀é Mo é \";\n r_1_2.s_2 = r_1_2_2;\n }\n {\n bytes1 r_1_2_3 = bytes1(0xcc);\n r_1_2.s_3 = r_1_2_3;\n }\n {\n S_25e98821 memory r_1_2_4;\n {\n bool r_1_2_4_0 = false;\n r_1_2_4.s_0 = r_1_2_4_0;\n }\n {\n bool r_1_2_4_1 = true;\n r_1_2_4.s_1 = r_1_2_4_1;\n }\n r_1_2.s_4 = r_1_2_4;\n }\n r_1.s_2 = r_1_2;\n }\n {\n S_fb1fb05a memory r_1_3;\n {\n address r_1_3_0 = 0x2a9102268b16C6eD54d1F5089ae618C7d69B60CE;\n r_1_3.s_0 = r_1_3_0;\n }\n {\n address r_1_3_1 = 0x0d31AA2D7B8dc2b46F8536232D62742237FA92ad;\n r_1_3.s_1 = r_1_3_1;\n }\n {\n uint80 r_1_3_2 = 286450449107416109303001;\n r_1_3.s_2 = r_1_3_2;\n }\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000207543676c36552749c981859bfa1da42cc8635586000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000007aff74ccec964f3f5ed64fe76744b4a8ee202aa4554af54a01375ff28472000000000000000000000000000000000000000000000000000000009cf54dc300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000002a9102268b16c6ed54d1f5089ae618c7d69b60ce0000000000000000000000000d31aa2d7b8dc2b46f8536232d62742237fa92ad000000000000000000000000000000000000000000003ca8828cd7abb7b844d909542dc7aae78b6537535c2de2e954f96f759458ac45f47dab600000000000000000000000000000000000004a045c296584c765b7cc82b8c83bba28a209971d000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e0cc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a94d206fc3a92020204d6ff09f9a80f09f9a8020f09f9a806fc3a9f09f9a80f09f9a80f09f9a80c3a94d4d204df09f9a80c3a9204d6f20c3a92000000000000000000000000000000000000000" + }, + { + "name": "random-(int,(string,bool[]),((int208,address,uint248,int248,bytes15),bytes7),string,address)[]", + "type": "(int,(string,bool[]),((int208,address,uint248,int248,bytes15),bytes7),string,address)[]", + "value": [ + [ + "29665255536610695984836050210051370942773068286714870907833463307248536471239", + [ + "Moo é🚀M éMééoo🚀Mo🚀o🚀🚀Mé oM é🚀🚀ooMo o🚀 M oo oMo🚀🚀M oM éoo MoéMo", + [false] + ], + [ + [ + "-30041045181995666196066674519678368197547957991507196690770473", + "0xf43E5b24CfBa2829500E6C2D4cE91779aA0a1df4", + "94957436514953153903009727085771937506736141411179094734692372941554960005", + "-168518623556562049436495536022900179320091236904087178407919285734736835308", + "0x64aa972b979a47d1fd74639e871dae" + ], + "0xc7b0b0ca13d6e9" + ], + "Moo é🚀M🚀🚀oo🚀 éM🚀o🚀o Moééo🚀M🚀M🚀oMo🚀ééo", + "0x7377185514385c17423518347B488e2648cCbAC0" + ], + [ + "18850712388595584458486050264380976433875828772395793496252274110752867551681", + ["Moo é🚀Mé o🚀M", []], + [ + [ + "57083916529167999868681997105066825570864595328143678241279069", + "0xFDBa20C9b3eab1ad670D9b213f95D798eAcbCCdD", + "137016823085876863073450661048749781022009273612476726542238218701291925850", + "-122743882412034221844980584845921443247899533401746451222159859455535842996", + "0xbe37031edeec5852bd4d2b759db04a" + ], + "0xcd4c0fa80b9bf6" + ], + "Moo é🚀éoMMoM M🚀🚀oo🚀oMo🚀 🚀éé ", + "0x5Cc591FfD5b64254f1a623A4218eF96c1D8E329E" + ], + [ + "6890251438428819627204208090776921271981380557322757972157469913966487156851", + ["Moo é🚀 🚀ooMoMééoMo🚀éoMéoMoMM", []], + [ + [ + "45513719791672876966144016821930052096454761218299049310554685", + "0xB779eacAEc0dFf808dE07D0B809AebA373D9FD7a", + "447206937726083397343287111277943457458173998462019992967371028055853458293", + "-60849827911492888317998315105312792492821010367487252307796784992734833626", + "0x752e74155e4a3f4cede24cc04bb21e" + ], + "0x83301ec8aab79e" + ], + "Moo é🚀 éoéo", + "0x411Ac92d55aff6CCce4F49D72Bbf1963420f4cC6" + ], + [ + "46732410323500681354757257553261179243463935493448690953042357669976977870671", + ["Moo é🚀oMM Mo🚀oM🚀🚀 oéM éoé🚀MMéo MooMM Mé", [true, true, true, false]], + [ + [ + "20596661477158121955318509059124312697172243767741181402549204", + "0x9d02748df627a8Fa75D305827f19a4fdED531583", + "416632240173503179534394857371318338454515000272724998389983957612845680728", + "-159613184479161038934530094674703351466325338403508525290037200281050521360", + "0x8cf170d03a2f7682a33fa0e501b062" + ], + "0x0bff500e00196f" + ], + "Moo é🚀ooééoo🚀🚀oM oé é🚀M🚀o🚀éoééééoM o o🚀o🚀Mé🚀ooé🚀o🚀 é oéé ooo", + "0xaf19F00cA90Ad97D94f27c12C9489368D52609eC" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "29665255536610695984836050210051370942773068286714870907833463307248536471239" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M éMééoo🚀Mo🚀o🚀🚀Mé oM é🚀🚀ooMo o🚀 M oo oMo🚀🚀M oM éoo MoéMo" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-30041045181995666196066674519678368197547957991507196690770473" + }, + { + "type": "address", + "value": "0xf43E5b24CfBa2829500E6C2D4cE91779aA0a1df4" + }, + { + "type": "number", + "value": "94957436514953153903009727085771937506736141411179094734692372941554960005" + }, + { + "type": "number", + "value": "-168518623556562049436495536022900179320091236904087178407919285734736835308" + }, + { + "type": "hexstring", + "value": "0x64aa972b979a47d1fd74639e871dae" + } + ] + }, + { + "type": "hexstring", + "value": "0xc7b0b0ca13d6e9" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M🚀🚀oo🚀 éM🚀o🚀o Moééo🚀M🚀M🚀oMo🚀ééo" + }, + { + "type": "address", + "value": "0x7377185514385c17423518347B488e2648cCbAC0" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "18850712388595584458486050264380976433875828772395793496252274110752867551681" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mé o🚀M" + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "57083916529167999868681997105066825570864595328143678241279069" + }, + { + "type": "address", + "value": "0xFDBa20C9b3eab1ad670D9b213f95D798eAcbCCdD" + }, + { + "type": "number", + "value": "137016823085876863073450661048749781022009273612476726542238218701291925850" + }, + { + "type": "number", + "value": "-122743882412034221844980584845921443247899533401746451222159859455535842996" + }, + { + "type": "hexstring", + "value": "0xbe37031edeec5852bd4d2b759db04a" + } + ] + }, + { + "type": "hexstring", + "value": "0xcd4c0fa80b9bf6" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éoMMoM M🚀🚀oo🚀oMo🚀 🚀éé " + }, + { + "type": "address", + "value": "0x5Cc591FfD5b64254f1a623A4218eF96c1D8E329E" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "6890251438428819627204208090776921271981380557322757972157469913966487156851" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀ooMoMééoMo🚀éoMéoMoMM" + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "45513719791672876966144016821930052096454761218299049310554685" + }, + { + "type": "address", + "value": "0xB779eacAEc0dFf808dE07D0B809AebA373D9FD7a" + }, + { + "type": "number", + "value": "447206937726083397343287111277943457458173998462019992967371028055853458293" + }, + { + "type": "number", + "value": "-60849827911492888317998315105312792492821010367487252307796784992734833626" + }, + { + "type": "hexstring", + "value": "0x752e74155e4a3f4cede24cc04bb21e" + } + ] + }, + { + "type": "hexstring", + "value": "0x83301ec8aab79e" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 éoéo" + }, + { + "type": "address", + "value": "0x411Ac92d55aff6CCce4F49D72Bbf1963420f4cC6" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "46732410323500681354757257553261179243463935493448690953042357669976977870671" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMM Mo🚀oM🚀🚀 oéM éoé🚀MMéo MooMM Mé" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "20596661477158121955318509059124312697172243767741181402549204" + }, + { + "type": "address", + "value": "0x9d02748df627a8Fa75D305827f19a4fdED531583" + }, + { + "type": "number", + "value": "416632240173503179534394857371318338454515000272724998389983957612845680728" + }, + { + "type": "number", + "value": "-159613184479161038934530094674703351466325338403508525290037200281050521360" + }, + { + "type": "hexstring", + "value": "0x8cf170d03a2f7682a33fa0e501b062" + } + ] + }, + { + "type": "hexstring", + "value": "0x0bff500e00196f" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooééoo🚀🚀oM oé é🚀M🚀o🚀éoééééoM o o🚀o🚀Mé🚀ooé🚀o🚀 é oéé ooo" + }, + { + "type": "address", + "value": "0xaf19F00cA90Ad97D94f27c12C9489368D52609eC" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610c84806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610903565b60405180910390f35b60408051600480825260a0820190925260609160009190816020015b610072610818565b81526020019060019003908161006a57905050905061008f610818565b7f4195f08afb29ae456626081d432b2d469ab4c83574e7c5ce5d2a3c38062546c78152604080518082019091526060808252602082015260006040518060a0016040528060648152602001610b2160649139825250604080516001808252818301909252600091602080830190803683370190505090506000808260008151811061011c5761011c610a84565b911515602092830291909101820152838101929092525082015261013e610868565b610146610888565b7912b1d08a28b923798f04827635287e69f4f33e50712420b32a2819815273f43e5b24cfba2829500e6c2d4ce91779aa0a1df46020808301919091527e35be771364344adf146c3d1a53eb04b3ffecfc71f34c721d33321c9bf1c6856040808401919091527fffa09f30d998b263442114470dd346a2dedbc928d7a7ad15949bf374cbb14d1460608401526e32554b95cbcd23e8feba31cf438ed760891b60808085019190915292845266c7b0b0ca13d6e960c81b848301528481019390935282519182019092526049808252600092610a9b90830139606083015250737377185514385c17423518347b488e2648ccbac0608082015281518190839060009061025257610252610a84565b602002602001018190525050610266610818565b7f29ad20075dbe2dbb0fce88a361494b7e210df29a902f4cda97e3ad81d33909c18152604080518082018252606080825260208083019182528351808501855260148152734d6f6f20c3a9f09f9a804dc3a9206ff09f9a804d60601b818301528352835160008152808201909452929052908201526102e3610868565b6102eb610888565b792385fe18ed0240ff4a1961a4fb43be88366261222afbdc488c5d815273fdba20c9b3eab1ad670d9b213f95d798eacbccdd6020808301919091527e4d8c7c6debb4e3e94d4b0e4f9108daf1d59b127dfeb28a3e051ba188d4315a6040808401919091527fffba87885d2dcff48a69a146ff4a265600fc5f3b1f7c81643001d8a5e434794c6060808501919091526e5f1b818f6f762c295ea695baced82560891b60808501529284526666a607d405cdfb60c91b848301528481019390935282519182019092526032808252600092610b8590830139606083015250735cc591ffd5b64254f1a623a4218ef96c1d8e329e608082015281518190839060019081106103f8576103f8610a84565b60200260200101819052505061040c610818565b7f0f3bbe7e26eb753af847ed31aaf44c030871c2a9b7510547588abe585c4a38738152604080518082019091526060808252602082015260006040518060600160405280602a8152602001610c25602a91398252506040805160008152602080820190925281830152820152610480610868565b610488610888565b791c52c0fe94353e743f05b6dd9b59a85059d35b19715390fa0a3d815273b779eacaec0dff808de07d0b809aeba373d9fd7a6020808301919091527efd1c333d8d43511f5518759b7179243cecb422e679f6f1aeeb490e289563756040808401919091527fffdd8f6a70bfa3d7be06924edbe33df1434fb791386b13e698af57b6084194266060808501919091526e3a973a0aaf251fa676f1266025d90f60891b6080808601919091529385526641980f64555bcf60c91b8584015285820194909452805180820190915260118152704d6f6f20c3a9f09f9a8020c3a96fc3a96f60781b918101919091529183019190915273411ac92d55aff6ccce4f49d72bbf1963420f4cc69082015281518190839060029081106105aa576105aa610a84565b6020026020010181905250506105be610818565b7f67519b5e1571fffac3c97ac0843a953fa1082522b08f52ff1c71582b5e9e8f4f8152604080518082019091526060808252602082015260006040518060600160405280603d8152602001610ae4603d913982525060408051600480825260a0820190925260009160208201608080368337019050509050600060019050808260008151811061065057610650610a84565b60200260200101901515908115158152505050600060019050808260018151811061067d5761067d610a84565b6020026020010190151590811515815250505060006001905080826002815181106106aa576106aa610a84565b60200260200101901515908115158152505050600080826003815181106106d3576106d3610a84565b91151560209283029190910182015283810192909252508201526106f5610868565b6106fd610888565b790cd13ccb75dd165440f7b843ed01f7882c610ce715cdfd5c0bd48152739d02748df627a8fa75d305827f19a4fded5315836020808301919091527eebce34ada29a481309941b5a12d0311cf77137343e5c63829f21db666948586040808401919091527fffa5a981f1a963331b9eff105e65d069e811d55f12cf98817b16c5363d0860f060608401526e4678b8681d17bb41519fd07280d83160891b6080840152918352660bff500e00196f60c81b8382015283820192909252805160a08101909152606e808252600092610bb79083013960608301525073af19f00ca90ad97d94f27c12c9489368d52609ec6080820152815181908390600390811061080757610807610a84565b602090810291909101015250919050565b6040518060a0016040528060008152602001610847604051806040016040528060608152602001606081525090565b8152602001610854610868565b815260606020820152600060409091015290565b604051806040016040528061087b610888565b8152600060209091015290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b6000815180845260005b818110156108dc576020818501810151868301820152016108c0565b818111156108ee576000602083870101525b50601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b84811015610a7557603f198a850301865282516101408151865289820151818b88015280518a838901526109636101808901826108b6565b918c015188830361013f19016101608a01528051808452908d01935086928d0191505b808310156109a857835115158252928c019260019290920191908c0190610986565b508a8401519250610a278b8901848051805160190b83526020808201516001600160a01b0316818501526040808301516001600160f81b031690850152606080830151601e0b9085015260809182015170ffffffffffffffffffffffffffffffffff19169184019190915201516001600160c81b03191660a090910152565b60608401519250878103610100890152610a4181846108b6565b9250505060808201519150610a626101208701836001600160a01b03169052565b968901969450509187019160010161092b565b50919998505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804df09f9a80f09f9a806f6ff09f9a8020c3a94df09f9a806ff09f9a806f204d6fc3a9c3a96ff09f9a804df09f9a804df09f9a806f4d6ff09f9a80c3a9c3a96f4d6f6f20c3a9f09f9a806f4d4d204d6ff09f9a806f4df09f9a80f09f9a8020206fc3a94d20c3a96fc3a9f09f9a804d4dc3a96f204d6f6f4d4d204dc3a94d6f6f20c3a9f09f9a804d20c3a94dc3a9c3a96f6ff09f9a804d6ff09f9a806ff09f9a80f09f9a804dc3a9206f4d20c3a9f09f9a80f09f9a806f6f4d6f206ff09f9a80204d206f6f206f4d6ff09f9a80f09f9a804d206f4d20c3a96f6f204d6fc3a94d6f4d6f6f20c3a9f09f9a80c3a96f4d4d6f4d204df09f9a80f09f9a806f6ff09f9a806f4d6ff09f9a8020f09f9a80c3a9c3a9204d6f6f20c3a9f09f9a806f6fc3a9c3a96f6ff09f9a80f09f9a806f4d206fc3a920c3a9f09f9a804df09f9a806ff09f9a80c3a96fc3a9c3a9c3a9c3a96f4d206f206ff09f9a806ff09f9a804dc3a9f09f9a806f6fc3a9f09f9a806ff09f9a8020c3a92020206fc3a9c3a9206f6f6f4d6f6f20c3a9f09f9a8020f09f9a806f6f4d6f4dc3a9c3a96f4d6ff09f9a80c3a96f4dc3a96f4d6f4d4da26469706673582212202a28ee69384379761446aec203f77e105ab2f6cbc305499046c31ba07faefa4f64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d15bc438 {\n string s_0;\n bool[] s_1;\n }\n\n struct S_12ffbd0d {\n int208 s_0;\n address s_1;\n uint248 s_2;\n int248 s_3;\n bytes15 s_4;\n }\n\n struct S_ba89ce4f {\n S_12ffbd0d s_0;\n bytes7 s_1;\n }\n\n struct S_14e754e6 {\n int256 s_0;\n S_d15bc438 s_1;\n S_ba89ce4f s_2;\n string s_3;\n address s_4;\n }\n\n function test () public pure returns (S_14e754e6[] memory) {\n S_14e754e6[] memory r = new S_14e754e6[](4);\n {\n S_14e754e6 memory r_0;\n {\n int r_0_0 = 29665255536610695984836050210051370942773068286714870907833463307248536471239;\n r_0.s_0 = r_0_0;\n }\n {\n S_d15bc438 memory r_0_1;\n {\n string memory r_0_1_0 = unicode\"Moo é🚀M éMééoo🚀Mo🚀o🚀🚀Mé oM é🚀🚀ooMo o🚀 M oo oMo🚀🚀M oM éoo MoéMo\";\n r_0_1.s_0 = r_0_1_0;\n }\n {\n bool[] memory r_0_1_1 = new bool[](1);\n {\n bool r_0_1_1_0 = false;\n r_0_1_1[0] = r_0_1_1_0;\n }\n r_0_1.s_1 = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n {\n S_ba89ce4f memory r_0_2;\n {\n S_12ffbd0d memory r_0_2_0;\n {\n int208 r_0_2_0_0 = -30041045181995666196066674519678368197547957991507196690770473;\n r_0_2_0.s_0 = r_0_2_0_0;\n }\n {\n address r_0_2_0_1 = 0xf43E5b24CfBa2829500E6C2D4cE91779aA0a1df4;\n r_0_2_0.s_1 = r_0_2_0_1;\n }\n {\n uint248 r_0_2_0_2 = 94957436514953153903009727085771937506736141411179094734692372941554960005;\n r_0_2_0.s_2 = r_0_2_0_2;\n }\n {\n int248 r_0_2_0_3 = -168518623556562049436495536022900179320091236904087178407919285734736835308;\n r_0_2_0.s_3 = r_0_2_0_3;\n }\n {\n bytes15 r_0_2_0_4 = bytes15(0x64aa972b979a47d1fd74639e871dae);\n r_0_2_0.s_4 = r_0_2_0_4;\n }\n r_0_2.s_0 = r_0_2_0;\n }\n {\n bytes7 r_0_2_1 = bytes7(0xc7b0b0ca13d6e9);\n r_0_2.s_1 = r_0_2_1;\n }\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀M🚀🚀oo🚀 éM🚀o🚀o Moééo🚀M🚀M🚀oMo🚀ééo\";\n r_0.s_3 = r_0_3;\n }\n {\n address r_0_4 = 0x7377185514385c17423518347B488e2648cCbAC0;\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_14e754e6 memory r_1;\n {\n int r_1_0 = 18850712388595584458486050264380976433875828772395793496252274110752867551681;\n r_1.s_0 = r_1_0;\n }\n {\n S_d15bc438 memory r_1_1;\n {\n string memory r_1_1_0 = unicode\"Moo é🚀Mé o🚀M\";\n r_1_1.s_0 = r_1_1_0;\n }\n {\n bool[] memory r_1_1_1 = new bool[](0);\n r_1_1.s_1 = r_1_1_1;\n }\n r_1.s_1 = r_1_1;\n }\n {\n S_ba89ce4f memory r_1_2;\n {\n S_12ffbd0d memory r_1_2_0;\n {\n int208 r_1_2_0_0 = 57083916529167999868681997105066825570864595328143678241279069;\n r_1_2_0.s_0 = r_1_2_0_0;\n }\n {\n address r_1_2_0_1 = 0xFDBa20C9b3eab1ad670D9b213f95D798eAcbCCdD;\n r_1_2_0.s_1 = r_1_2_0_1;\n }\n {\n uint248 r_1_2_0_2 = 137016823085876863073450661048749781022009273612476726542238218701291925850;\n r_1_2_0.s_2 = r_1_2_0_2;\n }\n {\n int248 r_1_2_0_3 = -122743882412034221844980584845921443247899533401746451222159859455535842996;\n r_1_2_0.s_3 = r_1_2_0_3;\n }\n {\n bytes15 r_1_2_0_4 = bytes15(0xbe37031edeec5852bd4d2b759db04a);\n r_1_2_0.s_4 = r_1_2_0_4;\n }\n r_1_2.s_0 = r_1_2_0;\n }\n {\n bytes7 r_1_2_1 = bytes7(0xcd4c0fa80b9bf6);\n r_1_2.s_1 = r_1_2_1;\n }\n r_1.s_2 = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀éoMMoM M🚀🚀oo🚀oMo🚀 🚀éé \";\n r_1.s_3 = r_1_3;\n }\n {\n address r_1_4 = 0x5Cc591FfD5b64254f1a623A4218eF96c1D8E329E;\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n {\n S_14e754e6 memory r_2;\n {\n int r_2_0 = 6890251438428819627204208090776921271981380557322757972157469913966487156851;\n r_2.s_0 = r_2_0;\n }\n {\n S_d15bc438 memory r_2_1;\n {\n string memory r_2_1_0 = unicode\"Moo é🚀 🚀ooMoMééoMo🚀éoMéoMoMM\";\n r_2_1.s_0 = r_2_1_0;\n }\n {\n bool[] memory r_2_1_1 = new bool[](0);\n r_2_1.s_1 = r_2_1_1;\n }\n r_2.s_1 = r_2_1;\n }\n {\n S_ba89ce4f memory r_2_2;\n {\n S_12ffbd0d memory r_2_2_0;\n {\n int208 r_2_2_0_0 = 45513719791672876966144016821930052096454761218299049310554685;\n r_2_2_0.s_0 = r_2_2_0_0;\n }\n {\n address r_2_2_0_1 = 0xB779eacAEc0dFf808dE07D0B809AebA373D9FD7a;\n r_2_2_0.s_1 = r_2_2_0_1;\n }\n {\n uint248 r_2_2_0_2 = 447206937726083397343287111277943457458173998462019992967371028055853458293;\n r_2_2_0.s_2 = r_2_2_0_2;\n }\n {\n int248 r_2_2_0_3 = -60849827911492888317998315105312792492821010367487252307796784992734833626;\n r_2_2_0.s_3 = r_2_2_0_3;\n }\n {\n bytes15 r_2_2_0_4 = bytes15(0x752e74155e4a3f4cede24cc04bb21e);\n r_2_2_0.s_4 = r_2_2_0_4;\n }\n r_2_2.s_0 = r_2_2_0;\n }\n {\n bytes7 r_2_2_1 = bytes7(0x83301ec8aab79e);\n r_2_2.s_1 = r_2_2_1;\n }\n r_2.s_2 = r_2_2;\n }\n {\n string memory r_2_3 = unicode\"Moo é🚀 éoéo\";\n r_2.s_3 = r_2_3;\n }\n {\n address r_2_4 = 0x411Ac92d55aff6CCce4F49D72Bbf1963420f4cC6;\n r_2.s_4 = r_2_4;\n }\n r[2] = r_2;\n }\n {\n S_14e754e6 memory r_3;\n {\n int r_3_0 = 46732410323500681354757257553261179243463935493448690953042357669976977870671;\n r_3.s_0 = r_3_0;\n }\n {\n S_d15bc438 memory r_3_1;\n {\n string memory r_3_1_0 = unicode\"Moo é🚀oMM Mo🚀oM🚀🚀 oéM éoé🚀MMéo MooMM Mé\";\n r_3_1.s_0 = r_3_1_0;\n }\n {\n bool[] memory r_3_1_1 = new bool[](4);\n {\n bool r_3_1_1_0 = true;\n r_3_1_1[0] = r_3_1_1_0;\n }\n {\n bool r_3_1_1_1 = true;\n r_3_1_1[1] = r_3_1_1_1;\n }\n {\n bool r_3_1_1_2 = true;\n r_3_1_1[2] = r_3_1_1_2;\n }\n {\n bool r_3_1_1_3 = false;\n r_3_1_1[3] = r_3_1_1_3;\n }\n r_3_1.s_1 = r_3_1_1;\n }\n r_3.s_1 = r_3_1;\n }\n {\n S_ba89ce4f memory r_3_2;\n {\n S_12ffbd0d memory r_3_2_0;\n {\n int208 r_3_2_0_0 = 20596661477158121955318509059124312697172243767741181402549204;\n r_3_2_0.s_0 = r_3_2_0_0;\n }\n {\n address r_3_2_0_1 = 0x9d02748df627a8Fa75D305827f19a4fdED531583;\n r_3_2_0.s_1 = r_3_2_0_1;\n }\n {\n uint248 r_3_2_0_2 = 416632240173503179534394857371318338454515000272724998389983957612845680728;\n r_3_2_0.s_2 = r_3_2_0_2;\n }\n {\n int248 r_3_2_0_3 = -159613184479161038934530094674703351466325338403508525290037200281050521360;\n r_3_2_0.s_3 = r_3_2_0_3;\n }\n {\n bytes15 r_3_2_0_4 = bytes15(0x8cf170d03a2f7682a33fa0e501b062);\n r_3_2_0.s_4 = r_3_2_0_4;\n }\n r_3_2.s_0 = r_3_2_0;\n }\n {\n bytes7 r_3_2_1 = bytes7(0x0bff500e00196f);\n r_3_2.s_1 = r_3_2_1;\n }\n r_3.s_2 = r_3_2;\n }\n {\n string memory r_3_3 = unicode\"Moo é🚀ooééoo🚀🚀oM oé é🚀M🚀o🚀éoééééoM o o🚀o🚀Mé🚀ooé🚀o🚀 é oéé ooo\";\n r_3.s_3 = r_3_3;\n }\n {\n address r_3_4 = 0xaf19F00cA90Ad97D94f27c12C9489368D52609eC;\n r_3.s_4 = r_3_4;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000007e04195f08afb29ae456626081d432b2d469ab4c83574e7c5ce5d2a3c38062546c70000000000000000000000000000000000000000000000000000000000000140ffffffffffffed4e2f75d746dc8670fb7d89cad781960b0cc1af8edbdf4cd5d7000000000000000000000000f43e5b24cfba2829500e6c2d4ce91779aa0a1df40035be771364344adf146c3d1a53eb04b3ffecfc71f34c721d33321c9bf1c685ffa09f30d998b263442114470dd346a2dedbc928d7a7ad15949bf374cbb14d1464aa972b979a47d1fd74639e871dae0000000000000000000000000000000000c7b0b0ca13d6e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002600000000000000000000000007377185514385c17423518347b488e2648ccbac0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000644d6f6f20c3a9f09f9a804d20c3a94dc3a9c3a96f6ff09f9a804d6ff09f9a806ff09f9a80f09f9a804dc3a9206f4d20c3a9f09f9a80f09f9a806f6f4d6f206ff09f9a80204d206f6f206f4d6ff09f9a80f09f9a804d206f4d20c3a96f6f204d6fc3a94d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000494d6f6f20c3a9f09f9a804df09f9a80f09f9a806f6ff09f9a8020c3a94df09f9a806ff09f9a806f204d6fc3a9c3a96ff09f9a804df09f9a804df09f9a806f4d6ff09f9a80c3a9c3a96f000000000000000000000000000000000000000000000029ad20075dbe2dbb0fce88a361494b7e210df29a902f4cda97e3ad81d33909c100000000000000000000000000000000000000000000000000000000000001400000000000002385fe18ed0240ff4a1961a4fb43be88366261222afbdc488c5d000000000000000000000000fdba20c9b3eab1ad670d9b213f95d798eacbccdd004d8c7c6debb4e3e94d4b0e4f9108daf1d59b127dfeb28a3e051ba188d4315affba87885d2dcff48a69a146ff4a265600fc5f3b1f7c81643001d8a5e434794cbe37031edeec5852bd4d2b759db04a0000000000000000000000000000000000cd4c0fa80b9bf60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000005cc591ffd5b64254f1a623a4218ef96c1d8e329e0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a804dc3a9206ff09f9a804d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a80c3a96f4d4d6f4d204df09f9a80f09f9a806f6ff09f9a806f4d6ff09f9a8020f09f9a80c3a9c3a92000000000000000000000000000000f3bbe7e26eb753af847ed31aaf44c030871c2a9b7510547588abe585c4a387300000000000000000000000000000000000000000000000000000000000001400000000000001c52c0fe94353e743f05b6dd9b59a85059d35b19715390fa0a3d000000000000000000000000b779eacaec0dff808de07d0b809aeba373d9fd7a00fd1c333d8d43511f5518759b7179243cecb422e679f6f1aeeb490e28956375ffdd8f6a70bfa3d7be06924edbe33df1434fb791386b13e698af57b608419426752e74155e4a3f4cede24cc04bb21e000000000000000000000000000000000083301ec8aab79e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000411ac92d55aff6ccce4f49d72bbf1963420f4cc6000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a8020f09f9a806f6f4d6f4dc3a9c3a96f4d6ff09f9a80c3a96f4dc3a96f4d6f4d4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a8020c3a96fc3a96f00000000000000000000000000000067519b5e1571fffac3c97ac0843a953fa1082522b08f52ff1c71582b5e9e8f4f00000000000000000000000000000000000000000000000000000000000001400000000000000cd13ccb75dd165440f7b843ed01f7882c610ce715cdfd5c0bd40000000000000000000000009d02748df627a8fa75d305827f19a4fded53158300ebce34ada29a481309941b5a12d0311cf77137343e5c63829f21db66694858ffa5a981f1a963331b9eff105e65d069e811d55f12cf98817b16c5363d0860f08cf170d03a2f7682a33fa0e501b06200000000000000000000000000000000000bff500e00196f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000af19f00ca90ad97d94f27c12c9489368d52609ec000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a806f4d4d204d6ff09f9a806f4df09f9a80f09f9a8020206fc3a94d20c3a96fc3a9f09f9a804d4dc3a96f204d6f6f4d4d204dc3a900000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006e4d6f6f20c3a9f09f9a806f6fc3a9c3a96f6ff09f9a80f09f9a806f4d206fc3a920c3a9f09f9a804df09f9a806ff09f9a80c3a96fc3a9c3a9c3a9c3a96f4d206f206ff09f9a806ff09f9a804dc3a9f09f9a806f6fc3a9f09f9a806ff09f9a8020c3a92020206fc3a9c3a9206f6f6f000000000000000000000000000000000000" + }, + { + "name": "random-(string,bool,address,(bytes8,string,(uint192,bool,int256),(bytes16,address,string,bool)[1]))", + "type": "(string,bool,address,(bytes8,string,(uint192,bool,int256),(bytes16,address,string,bool)[1]))", + "value": [ + "Moo é🚀 M🚀é o 🚀ééoMoM🚀oé oé🚀oM oMooooo M🚀", + true, + "0xfa4eAFB1B5085c7a8A311cEb7fC3fF7a24F4FdEd", + [ + "0x2f3f772cb1714a09", + "Moo é🚀 éooooéoéo Mo o🚀o éo é🚀o🚀oo M", + [ + "4851281032943518285102801021867864444172651317812482084459", + true, + "-25053952289026488485820274690396048118906673231233145235497303698772921369314" + ], + [ + [ + "0x0237a3a94332c7c4061480af52646419", + "0xACcB64173c0417e8eDD79a46862A04638f3CCdA6", + "Moo é🚀🚀 MoéééM🚀é oéMM🚀", + false + ] + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 M🚀é o 🚀ééoMoM🚀oé oé🚀oM oMooooo M🚀" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xfa4eAFB1B5085c7a8A311cEb7fC3fF7a24F4FdEd" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x2f3f772cb1714a09" + }, + { + "type": "string", + "value": "Moo é🚀 éooooéoéo Mo o🚀o éo é🚀o🚀oo M" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "4851281032943518285102801021867864444172651317812482084459" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-25053952289026488485820274690396048118906673231233145235497303698772921369314" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x0237a3a94332c7c4061480af52646419" + }, + { + "type": "address", + "value": "0xACcB64173c0417e8eDD79a46862A04638f3CCdA6" + }, + { + "type": "string", + "value": "Moo é🚀🚀 MoéééM🚀é oéMM🚀" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104d0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102c8565b60405180910390f35b6100566101c1565b61005e6101c1565b60006040518060800160405280604381526020016103f8604391398252506001602082015273fa4eafb1b5085c7a8a311ceb7fc3ff7a24f4fded60408201526100a56101f9565b672f3f772cb1714a0960c01b8152604080516060810190915260378082526000919061043b60208301396020838101919091526040805160608101825277c5d9bcbe5bfba9b6bce6462dd366098b9562c9a26d910e6b81526001928101929092527fc89bf72cb483e3f1ecd0b0a522a5ef23da3ecbc8e9a2578ca266f8d6ca48bd1e8282015283015250610137610234565b60408051608081018252606081830181905260008183018190526f0237a3a94332c7c4061480af5264641960801b835273accb64173c0417e8edd79a46862a04638f3ccda660208085019190915284519283019094526029808352929390929061047290830139604083015250600060608083019190915290825282810191909152820152919050565b60405180608001604052806060815260200160001515815260200160006001600160a01b031681526020016101f46101f9565b905290565b604080516080810182526000808252606060208084018290528451808301865283815290810183905280850192909252928201529081016101f45b60405180602001604052806001905b604080516080810182526000808252602080830182905260609383018490529282015282526000199092019101816102435790505090565b6000815180845260005b818110156102a157602081850181015186830182015201610285565b818111156102b3576000602083870101525b50601f01601f19169290920160200192915050565b600060208083528351608080838601526102e560a086018361027b565b915082860151604081151581880152808801519150606060018060a01b03808416828a0152818a01519350601f1989870301858a015267ffffffffffffffff60c01b84511686528684015160c08888015261034360c088018261027b565b8585015180516001600160c01b031689870152898101511515858a0152850151878901529483015187860360a090980197909752509294928587810160005b60018110156103e757828203895286516fffffffffffffffffffffffffffffffff198151168352848b820151168b8401528681015189888501526103c88a85018261027b565b91870151151593870193909352988a0198968a01969150600101610382565b509b9a505050505050505050505056fe4d6f6f20c3a9f09f9a80204df09f9a80c3a9206f20f09f9a80c3a9c3a96f4d6f4df09f9a806fc3a920206fc3a9f09f9a806f4d2020206f4d6f6f6f6f6f204df09f9a804d6f6f20c3a9f09f9a8020c3a96f6f6f6fc3a96fc3a96f204d6f206ff09f9a806f2020c3a96f20c3a9f09f9a806ff09f9a806f6f20204d4d6f6f20c3a9f09f9a80f09f9a80204d6fc3a9c3a9c3a94df09f9a80c3a920206fc3a94d4df09f9a80a2646970667358221220ce11ad68ec72cf84341a54e7ced6dadddc3b7104fe33572e459adb60248df94564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_cc5ec77a {\n uint192 s_0;\n bool s_1;\n int256 s_2;\n }\n\n struct S_26862223 {\n bytes16 s_0;\n address s_1;\n string s_2;\n bool s_3;\n }\n\n struct S_34b1c7dc {\n bytes8 s_0;\n string s_1;\n S_cc5ec77a s_2;\n S_26862223[1] s_3;\n }\n\n struct S_27b3739a {\n string s_0;\n bool s_1;\n address s_2;\n S_34b1c7dc s_3;\n }\n\n function test () public pure returns (S_27b3739a memory) {\n S_27b3739a memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 M🚀é o 🚀ééoMoM🚀oé oé🚀oM oMooooo M🚀\";\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xfa4eAFB1B5085c7a8A311cEb7fC3fF7a24F4FdEd;\n r.s_2 = r_2;\n }\n {\n S_34b1c7dc memory r_3;\n {\n bytes8 r_3_0 = bytes8(0x2f3f772cb1714a09);\n r_3.s_0 = r_3_0;\n }\n {\n string memory r_3_1 = unicode\"Moo é🚀 éooooéoéo Mo o🚀o éo é🚀o🚀oo M\";\n r_3.s_1 = r_3_1;\n }\n {\n S_cc5ec77a memory r_3_2;\n {\n uint192 r_3_2_0 = 4851281032943518285102801021867864444172651317812482084459;\n r_3_2.s_0 = r_3_2_0;\n }\n {\n bool r_3_2_1 = true;\n r_3_2.s_1 = r_3_2_1;\n }\n {\n int256 r_3_2_2 = -25053952289026488485820274690396048118906673231233145235497303698772921369314;\n r_3_2.s_2 = r_3_2_2;\n }\n r_3.s_2 = r_3_2;\n }\n {\n S_26862223[1] memory r_3_3;\n {\n S_26862223 memory r_3_3_0;\n {\n bytes16 r_3_3_0_0 = bytes16(0x0237a3a94332c7c4061480af52646419);\n r_3_3_0.s_0 = r_3_3_0_0;\n }\n {\n address r_3_3_0_1 = 0xACcB64173c0417e8eDD79a46862A04638f3CCdA6;\n r_3_3_0.s_1 = r_3_3_0_1;\n }\n {\n string memory r_3_3_0_2 = unicode\"Moo é🚀🚀 MoéééM🚀é oéMM🚀\";\n r_3_3_0.s_2 = r_3_3_0_2;\n }\n {\n bool r_3_3_0_3 = false;\n r_3_3_0.s_3 = r_3_3_0_3;\n }\n r_3_3[0] = r_3_3_0;\n }\n r_3.s_3 = r_3_3;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fa4eafb1b5085c7a8a311ceb7fc3ff7a24f4fded000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a80204df09f9a80c3a9206f20f09f9a80c3a9c3a96f4d6f4df09f9a806fc3a920206fc3a9f09f9a806f4d2020206f4d6f6f6f6f6f204df09f9a8000000000000000000000000000000000000000000000000000000000002f3f772cb1714a0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000c5d9bcbe5bfba9b6bce6462dd366098b9562c9a26d910e6b0000000000000000000000000000000000000000000000000000000000000001c89bf72cb483e3f1ecd0b0a522a5ef23da3ecbc8e9a2578ca266f8d6ca48bd1e000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a8020c3a96f6f6f6fc3a96fc3a96f204d6f206ff09f9a806f2020c3a96f20c3a9f09f9a806ff09f9a806f6f20204d00000000000000000000000000000000000000000000000000000000000000000000000000000000200237a3a94332c7c4061480af5264641900000000000000000000000000000000000000000000000000000000accb64173c0417e8edd79a46862a04638f3ccda60000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000294d6f6f20c3a9f09f9a80f09f9a80204d6fc3a9c3a9c3a94df09f9a80c3a920206fc3a94d4df09f9a800000000000000000000000000000000000000000000000" + }, + { + "name": "random-((((address,address,int),bytes30,bool[])),(int112,bytes17,address,(int136),string)[2],string[4])", + "type": "((((address,address,int),bytes30,bool[])),(int112,bytes17,address,(int136),string)[2],string[4])", + "value": [ + [ + [ + [ + "0x908308d59fD1fD951F965eC838a9Ebb6D5b450Aa", + "0x2dC82874C37aB5E2283eb9CE2938eC4ff37AE23e", + "51559861391007624328426198001411521187626097228892384025452897001320400239374" + ], + "0x79a859a9f3073dc945ee31f94022ab9860068de076b1fa6268f6e80d94bf", + [true, true, true, true] + ] + ], + [ + [ + "977418866640932213167409750730875", + "0x327b45f9e828a2fcc746fbb7c813a1a46d", + "0xf018634f80A4A9d135152B05608B698A7b20A9E5", + ["-15103906467070032705753910830524161559963"], + "Moo é🚀ééooéoo🚀ooo🚀🚀 🚀o🚀éoéoMoMo🚀🚀 oééoéo 🚀🚀oéo" + ], + [ + "-1781423843945927863356936533965231", + "0xaae0f0ad9bd220ac13d53b3f7a02e42b67", + "0x38C7e8d2267452cacE8aB9afA75Eb888FFa5456A", + ["22509353492243234918455385061003117049545"], + "Moo é🚀🚀oo🚀Mo MéM M🚀🚀oMo Mo🚀o éMoM🚀 oo🚀🚀o é 🚀ooM🚀🚀oé oM🚀oMé " + ] + ], + [ + "Moo é🚀o🚀 ooééMoo🚀🚀oMo", + "Moo é🚀🚀oMo🚀ooMoMoMéoéo🚀Méoo oM", + "Moo é🚀🚀 🚀 M 🚀🚀o🚀o🚀oMoMoMMoo M 🚀", + "Moo é🚀éMooMéoo oéo oo🚀🚀 éMé oooé oM🚀oé" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x908308d59fD1fD951F965eC838a9Ebb6D5b450Aa" + }, + { + "type": "address", + "value": "0x2dC82874C37aB5E2283eb9CE2938eC4ff37AE23e" + }, + { + "type": "number", + "value": "51559861391007624328426198001411521187626097228892384025452897001320400239374" + } + ] + }, + { + "type": "hexstring", + "value": "0x79a859a9f3073dc945ee31f94022ab9860068de076b1fa6268f6e80d94bf" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "977418866640932213167409750730875" + }, + { + "type": "hexstring", + "value": "0x327b45f9e828a2fcc746fbb7c813a1a46d" + }, + { + "type": "address", + "value": "0xf018634f80A4A9d135152B05608B698A7b20A9E5" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-15103906467070032705753910830524161559963" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ééooéoo🚀ooo🚀🚀 🚀o🚀éoéoMoMo🚀🚀 oééoéo 🚀🚀oéo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-1781423843945927863356936533965231" + }, + { + "type": "hexstring", + "value": "0xaae0f0ad9bd220ac13d53b3f7a02e42b67" + }, + { + "type": "address", + "value": "0x38C7e8d2267452cacE8aB9afA75Eb888FFa5456A" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "22509353492243234918455385061003117049545" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀oo🚀Mo MéM M🚀🚀oMo Mo🚀o éMoM🚀 oo🚀🚀o é 🚀ooM🚀🚀oé oM🚀oMé " + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀 ooééMoo🚀🚀oMo" + }, + { + "type": "string", + "value": "Moo é🚀🚀oMo🚀ooMoMoMéoéo🚀Méoo oM" + }, + { + "type": "string", + "value": "Moo é🚀🚀 🚀 M 🚀🚀o🚀o🚀oMoMoMMoo M 🚀" + }, + { + "type": "string", + "value": "Moo é🚀éMooMéoo oéo oo🚀🚀 éMé oooé oM🚀oé" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506108d8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610623565b60405180910390f35b610056610403565b61005e610403565b6040805160e08101825260006080820181815260a0830182905260c0830182905260208301908152928201526060808201529081526040805160c08101825260006060808301828152608080850184905260a080860185905291855260208086018581528688018590528751948501885273908308d59fd1fd951f965ec838a9ebb6d5b450aa8552732dc82874c37ab5e2283eb9ce2938ec4ff37ae23e858301527f71fdd8ee004c465e25c28f23e6e8429f90d6762712408f66342afc2df3b33b0e858901529386527f79a859a9f3073dc945ee31f94022ab9860068de076b1fa6268f6e80d94bf00009093528551600480825292810190965293949293909183019080368337019050509050600060019050808260008151811061018557610185610705565b6020026020010190151590811515815250505060006001905080826001815181106101b2576101b2610705565b6020026020010190151590811515815250505060006001905080826002815181106101df576101df610705565b60200260200101901515908115158152505050600060019050808260038151811061020c5761020c610705565b911515602092830291909101909101525060408201528152815261022e610468565b610236610495565b6d3030c2b0d434e98381a6e1f1e87b815270327b45f9e828a2fcc746fbb7c813a1a46d60781b60208083019190915273f018634f80a4a9d135152b05608b698a7b20a9e560408084019190915280518083018252702c62ea92ffc821c67e49d8d2e4f6ff8d9a198152606084015280516080810190915260578082526000926107549083013960808301525081526102cc610495565b6d57d4bae273a6a9273458ef35f9ae19815270aae0f0ad9bd220ac13d53b3f7a02e42b6760781b6020808301919091527338c7e8d2267452cace8ab9afa75eb888ffa5456a6040808401919091528051808301825270422627cabd4ab7bcc50a4b639e6a21b6c981526060840152805160a08101909152606a8082526000926107e69083013960808301525060208083019190915282015261036c6104cf565b6000604051806060016040528060258152602001610850602591398252506040805160608101909152602e808252600091906108756020830139905080826001602002018190525050600060405180606001604052806038815260200161071c60389139604080840191909152805160608101909152603b808252600092506107ab60208301396060830152506040820152919050565b60405180606001604052806104496040805160e08101825260006080820181815260a0830182905260c08301829052602083019081529282015260608082015290815290565b8152602001610456610468565b81526020016104636104cf565b905290565b60405180604001604052806002905b61047f610495565b8152602001906001900390816104775790505090565b6040805160a08101825260008082526020808301829052828401829052835190810190935282529060608201908152602001606081525090565b60405180608001604052806004905b60608152602001906001900390816104de5790505090565b6000815180845260005b8181101561051c57602081850181015186830182015201610500565b8181111561052e576000602083870101525b50601f01601f19169290920160200192915050565b60008260408082018460005b60028110156105d257848303885281518051600d0b84526020808201516effffffffffffffffffffffffffffff191681860152858201516001600160a01b0316868601526060808301515160100b9086015260809182015160a092860183905291906105bd828701846104f6565b9a81019a95509390930192505060010161054f565b50909695505050505050565b600082608081018360005b60048110156106185783830387526106028383516104f6565b60209788019790935091909101906001016105e9565b509095945050505050565b602080825282516060838301525160808301829052805180516001600160a01b0390811660a0808701919091528285015190911660c086015260409182015160e08601528284015161ffff1916610100860152910151610120840191909152805161014084018190526000929182019083906101608601905b808310156106be5783511515825292840192600192909201919084019061069c565b50838701519350601f199250828682030160408701526106de8185610543565b935050506040850151818584030160608601526106fb83826105de565b9695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a8020f09f9a80204d20f09f9a80f09f9a806ff09f9a806ff09f9a806f4d6f4d6f4d4d6f6f204d20f09f9a804d6f6f20c3a9f09f9a80c3a9c3a96f6fc3a96f6ff09f9a806f6f6ff09f9a80f09f9a8020f09f9a806ff09f9a80c3a96fc3a96f4d6f4d6ff09f9a80f09f9a8020206fc3a9c3a96fc3a96f20f09f9a80f09f9a806fc3a96f4d6f6f20c3a9f09f9a80c3a94d6f6f4dc3a96f6f206fc3a96f206f6ff09f9a80f09f9a8020c3a94dc3a9206f6f6fc3a920206f4df09f9a806fc3a94d6f6f20c3a9f09f9a80f09f9a806f6ff09f9a804d6f20204dc3a94d204df09f9a80f09f9a806f4d6f204d6ff09f9a806f2020c3a94d6f4df09f9a80206f6ff09f9a80f09f9a806f20c3a920f09f9a806f6f4df09f9a80f09f9a806fc3a9206f4df09f9a806f4dc3a9204d6f6f20c3a9f09f9a806ff09f9a8020206f6fc3a9c3a94d6f6ff09f9a80f09f9a806f4d6f4d6f6f20c3a9f09f9a80f09f9a806f4d6ff09f9a806f6f4d6f4d6f4dc3a96fc3a96ff09f9a804dc3a96f6f206f4da2646970667358221220a1886e8d7a1fa39f28aac22638f8c1000f492e29dd07d1cd21018c4454b85cb564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a3741ccb {\n address s_0;\n address s_1;\n int256 s_2;\n }\n\n struct S_69a34880 {\n S_a3741ccb s_0;\n bytes30 s_1;\n bool[] s_2;\n }\n\n struct S_e5787ac1 {\n S_69a34880 s_0;\n }\n\n struct S_225c98b7 {\n int136 s_0;\n }\n\n struct S_e29425b6 {\n int112 s_0;\n bytes17 s_1;\n address s_2;\n S_225c98b7 s_3;\n string s_4;\n }\n\n struct S_0cfa5d25 {\n S_e5787ac1 s_0;\n S_e29425b6[2] s_1;\n string[4] s_2;\n }\n\n function test () public pure returns (S_0cfa5d25 memory) {\n S_0cfa5d25 memory r;\n {\n S_e5787ac1 memory r_0;\n {\n S_69a34880 memory r_0_0;\n {\n S_a3741ccb memory r_0_0_0;\n {\n address r_0_0_0_0 = 0x908308d59fD1fD951F965eC838a9Ebb6D5b450Aa;\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n address r_0_0_0_1 = 0x2dC82874C37aB5E2283eb9CE2938eC4ff37AE23e;\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n int r_0_0_0_2 = 51559861391007624328426198001411521187626097228892384025452897001320400239374;\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n bytes30 r_0_0_1 = bytes30(0x79a859a9f3073dc945ee31f94022ab9860068de076b1fa6268f6e80d94bf);\n r_0_0.s_1 = r_0_0_1;\n }\n {\n bool[] memory r_0_0_2 = new bool[](4);\n {\n bool r_0_0_2_0 = true;\n r_0_0_2[0] = r_0_0_2_0;\n }\n {\n bool r_0_0_2_1 = true;\n r_0_0_2[1] = r_0_0_2_1;\n }\n {\n bool r_0_0_2_2 = true;\n r_0_0_2[2] = r_0_0_2_2;\n }\n {\n bool r_0_0_2_3 = true;\n r_0_0_2[3] = r_0_0_2_3;\n }\n r_0_0.s_2 = r_0_0_2;\n }\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n S_e29425b6[2] memory r_1;\n {\n S_e29425b6 memory r_1_0;\n {\n int112 r_1_0_0 = 977418866640932213167409750730875;\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bytes17 r_1_0_1 = bytes17(0x327b45f9e828a2fcc746fbb7c813a1a46d);\n r_1_0.s_1 = r_1_0_1;\n }\n {\n address r_1_0_2 = 0xf018634f80A4A9d135152B05608B698A7b20A9E5;\n r_1_0.s_2 = r_1_0_2;\n }\n {\n S_225c98b7 memory r_1_0_3;\n {\n int136 r_1_0_3_0 = -15103906467070032705753910830524161559963;\n r_1_0_3.s_0 = r_1_0_3_0;\n }\n r_1_0.s_3 = r_1_0_3;\n }\n {\n string memory r_1_0_4 = unicode\"Moo é🚀ééooéoo🚀ooo🚀🚀 🚀o🚀éoéoMoMo🚀🚀 oééoéo 🚀🚀oéo\";\n r_1_0.s_4 = r_1_0_4;\n }\n r_1[0] = r_1_0;\n }\n {\n S_e29425b6 memory r_1_1;\n {\n int112 r_1_1_0 = -1781423843945927863356936533965231;\n r_1_1.s_0 = r_1_1_0;\n }\n {\n bytes17 r_1_1_1 = bytes17(0xaae0f0ad9bd220ac13d53b3f7a02e42b67);\n r_1_1.s_1 = r_1_1_1;\n }\n {\n address r_1_1_2 = 0x38C7e8d2267452cacE8aB9afA75Eb888FFa5456A;\n r_1_1.s_2 = r_1_1_2;\n }\n {\n S_225c98b7 memory r_1_1_3;\n {\n int136 r_1_1_3_0 = 22509353492243234918455385061003117049545;\n r_1_1_3.s_0 = r_1_1_3_0;\n }\n r_1_1.s_3 = r_1_1_3;\n }\n {\n string memory r_1_1_4 = unicode\"Moo é🚀🚀oo🚀Mo MéM M🚀🚀oMo Mo🚀o éMoM🚀 oo🚀🚀o é 🚀ooM🚀🚀oé oM🚀oMé \";\n r_1_1.s_4 = r_1_1_4;\n }\n r_1[1] = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n string[4] memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀o🚀 ooééMoo🚀🚀oMo\";\n r_2[0] = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀🚀oMo🚀ooMoMoMéoéo🚀Méoo oM\";\n r_2[1] = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀🚀 🚀 M 🚀🚀o🚀o🚀oMoMoMMoo M 🚀\";\n r_2[2] = r_2_2;\n }\n {\n string memory r_2_3 = unicode\"Moo é🚀éMooMéoo oéo oo🚀🚀 éMé oooé oM🚀oé\";\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000908308d59fd1fd951f965ec838a9ebb6d5b450aa0000000000000000000000002dc82874c37ab5e2283eb9ce2938ec4ff37ae23e71fdd8ee004c465e25c28f23e6e8429f90d6762712408f66342afc2df3b33b0e79a859a9f3073dc945ee31f94022ab9860068de076b1fa6268f6e80d94bf000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000003030c2b0d434e98381a6e1f1e87b327b45f9e828a2fcc746fbb7c813a1a46d000000000000000000000000000000000000000000000000000000f018634f80a4a9d135152b05608b698a7b20a9e5ffffffffffffffffffffffffffffffd39d156d0037de3981b6272d1b0900726500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a80c3a9c3a96f6fc3a96f6ff09f9a806f6f6ff09f9a80f09f9a8020f09f9a806ff09f9a80c3a96fc3a96f4d6f4d6ff09f9a80f09f9a8020206fc3a9c3a96fc3a96f20f09f9a80f09f9a806fc3a96f000000000000000000ffffffffffffffffffffffffffffffffffffa82b451d8c5956d8cba710ca0651aae0f0ad9bd220ac13d53b3f7a02e42b6700000000000000000000000000000000000000000000000000000038c7e8d2267452cace8ab9afa75eb888ffa5456a000000000000000000000000000000422627cabd4ab7bcc50a4b639e6a21b6c900000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000006a4d6f6f20c3a9f09f9a80f09f9a806f6ff09f9a804d6f20204dc3a94d204df09f9a80f09f9a806f4d6f204d6ff09f9a806f2020c3a94d6f4df09f9a80206f6ff09f9a80f09f9a806f20c3a920f09f9a806f6f4df09f9a80f09f9a806fc3a9206f4df09f9a806f4dc3a92000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a806ff09f9a8020206f6fc3a9c3a94d6f6ff09f9a80f09f9a806f4d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a80f09f9a806f4d6ff09f9a806f6f4d6f4d6f4dc3a96fc3a96ff09f9a804dc3a96f6f206f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a80f09f9a8020f09f9a80204d20f09f9a80f09f9a806ff09f9a806ff09f9a806f4d6f4d6f4d4d6f6f204d20f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000003b4d6f6f20c3a9f09f9a80c3a94d6f6f4dc3a96f6f206fc3a96f206f6ff09f9a80f09f9a8020c3a94dc3a9206f6f6fc3a920206f4df09f9a806fc3a90000000000" + }, + { + "name": "random-((((bool,string[3],bytes1),(int144,bool[2]),bytes1,string),bool),string,bytes7,bool,int136)", + "type": "((((bool,string[3],bytes1),(int144,bool[2]),bytes1,string),bool),string,bytes7,bool,int136)", + "value": [ + [ + [ + [ + true, + [ + "Moo é🚀", + "Moo é🚀oéooMoo é🚀o 🚀o oé Méo 🚀é🚀🚀o🚀oo🚀ééo 🚀🚀 Méoé", + "Moo é🚀oo oééM " + ], + "0x41" + ], + ["6174848302900471976999552640360802059723250", [false, false]], + "0x5d", + "Moo é🚀Mé oooo🚀🚀🚀éMM MoM oé 🚀 Méé o Mo é🚀🚀🚀 o🚀éooM " + ], + false + ], + "Moo é🚀M🚀🚀oo oo🚀o ", + "0x7d1cbd8f661c16", + false, + "-40355845618041658146202340524108946950298" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀oéooMoo é🚀o 🚀o oé Méo 🚀é🚀🚀o🚀oo🚀ééo 🚀🚀 Méoé" + }, + { + "type": "string", + "value": "Moo é🚀oo oééM " + } + ] + }, + { + "type": "hexstring", + "value": "0x41" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "6174848302900471976999552640360802059723250" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x5d" + }, + { + "type": "string", + "value": "Moo é🚀Mé oooo🚀🚀🚀éMM MoM oé 🚀 Méé o Mo é🚀🚀🚀 o🚀éooM " + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M🚀🚀oo oo🚀o " + }, + { + "type": "hexstring", + "value": "0x7d1cbd8f661c16" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-40355845618041658146202340524108946950298" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506105c8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610385565b60405180910390f35b6100566101f5565b61005e6101f5565b61006661022b565b61006e61024b565b61007661027f565b60018152610082610297565b604080518082018252600a8152689adede418753e13f3560b71b6020808301919091529083528151608081019092526059808352600092916104e0908301396020838101919091526040805180820182526015815274026b7b79061d4f84fcd4037b79037e1d4e1d4a6901605d1b81840152818501529084019290925250604160f81b9082015281526101136102be565b7146e23f8cdc47eac8a8f928242aa410daa1f281526101306102e0565b600080825260208083018290528381019290925283820192909252605d60f81b604080850191909152805160808101909152605a8082529091610539908301396060808401919091529183525060006020808401829052928452604080518082018252601e81527f4d6f6f20c3a9f09f9a804df09f9a80f09f9a806f6f206f6ff09f9a806f2000008186015293850193909352663e8e5ec7b30e0b60c91b928401929092528201527076985d269352ec7f19ad3140b3fd654899196080820152919050565b6040518060a0016040528061020861022b565b815260606020820181905260006040830181905290820181905260809091015290565b604051806040016040528061023e61024b565b8152600060209091015290565b604051806080016040528061025e61027f565b815260200161026b6102be565b815260006020820152606060409091015290565b604051806060016040528060001515815260200161023e5b60405180606001604052806003905b60608152602001906001900390816102a65790505090565b6040518060400160405280600060110b81526020016102db6102e0565b905290565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b8181101561032457602081850181015186830182015201610308565b81811115610336576000602083870101525b50601f01601f19169290920160200192915050565b805160110b825260208082015181840160005b600281101561037d57825115158252918301919083019060010161035e565b505050505050565b60006020808352835160a0828501528051604060c0860152805160c06101008701526102208601815115156101c08801528482015160606101e0890152818290506102808901925060005b60038110156104005761021f198a85030182526103ee8484516102fe565b935091870191908701906001016103d0565b505050604091909101516001600160f81b031916610200870152818401519061042d61012088018361034b565b60408301516001600160f81b0319811661018089015260609093015187820360ff19016101a089015292915061046381846102fe565b9385015180151560e089015293925061047a915050565b91850151848303601f190160408601529161049581846102fe565b9250505060408401516104b460608501826001600160c81b0319169052565b50606084015180151560808501525060808401516104d760a085018260100b9052565b50939250505056fe4d6f6f20c3a9f09f9a806fc3a96f6f4d6f6f20c3a9f09f9a806f20f09f9a806f206fc3a9204dc3a96f20f09f9a80c3a9f09f9a80f09f9a806ff09f9a806f6ff09f9a80c3a9c3a96f2020f09f9a80f09f9a80204dc3a96fc3a94d6f6f20c3a9f09f9a804dc3a9206f6f6f6ff09f9a80f09f9a80f09f9a80c3a94d4d204d6f4d20206fc3a92020f09f9a80204dc3a9c3a920206f204d6f202020c3a9f09f9a80f09f9a80f09f9a80206ff09f9a80c3a96f6f4d20a2646970667358221220f7d8c890a00b5cf892e7554ede65d9a935037010e212e2f407b25f8abf3e78b564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0f3ffa1d {\n bool s_0;\n string[3] s_1;\n bytes1 s_2;\n }\n\n struct S_234ff0d0 {\n int144 s_0;\n bool[2] s_1;\n }\n\n struct S_ee91a4e2 {\n S_0f3ffa1d s_0;\n S_234ff0d0 s_1;\n bytes1 s_2;\n string s_3;\n }\n\n struct S_cf515569 {\n S_ee91a4e2 s_0;\n bool s_1;\n }\n\n struct S_bf2ae1cb {\n S_cf515569 s_0;\n string s_1;\n bytes7 s_2;\n bool s_3;\n int136 s_4;\n }\n\n function test () public pure returns (S_bf2ae1cb memory) {\n S_bf2ae1cb memory r;\n {\n S_cf515569 memory r_0;\n {\n S_ee91a4e2 memory r_0_0;\n {\n S_0f3ffa1d memory r_0_0_0;\n {\n bool r_0_0_0_0 = true;\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n string[3] memory r_0_0_0_1;\n {\n string memory r_0_0_0_1_0 = unicode\"Moo é🚀\";\n r_0_0_0_1[0] = r_0_0_0_1_0;\n }\n {\n string memory r_0_0_0_1_1 = unicode\"Moo é🚀oéooMoo é🚀o 🚀o oé Méo 🚀é🚀🚀o🚀oo🚀ééo 🚀🚀 Méoé\";\n r_0_0_0_1[1] = r_0_0_0_1_1;\n }\n {\n string memory r_0_0_0_1_2 = unicode\"Moo é🚀oo oééM \";\n r_0_0_0_1[2] = r_0_0_0_1_2;\n }\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n bytes1 r_0_0_0_2 = bytes1(0x41);\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n S_234ff0d0 memory r_0_0_1;\n {\n int144 r_0_0_1_0 = 6174848302900471976999552640360802059723250;\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n {\n bool[2] memory r_0_0_1_1;\n {\n bool r_0_0_1_1_0 = false;\n r_0_0_1_1[0] = r_0_0_1_1_0;\n }\n {\n bool r_0_0_1_1_1 = false;\n r_0_0_1_1[1] = r_0_0_1_1_1;\n }\n r_0_0_1.s_1 = r_0_0_1_1;\n }\n r_0_0.s_1 = r_0_0_1;\n }\n {\n bytes1 r_0_0_2 = bytes1(0x5d);\n r_0_0.s_2 = r_0_0_2;\n }\n {\n string memory r_0_0_3 = unicode\"Moo é🚀Mé oooo🚀🚀🚀éMM MoM oé 🚀 Méé o Mo é🚀🚀🚀 o🚀éooM \";\n r_0_0.s_3 = r_0_0_3;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀M🚀🚀oo oo🚀o \";\n r.s_1 = r_1;\n }\n {\n bytes7 r_2 = bytes7(0x7d1cbd8f661c16);\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n {\n int136 r_4 = -40355845618041658146202340524108946950298;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000003e07d1cbd8f661c16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffff8967a2d96cad1380e652cebf4c029ab7660000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000046e23f8cdc47eac8a8f928242aa410daa1f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000604100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a806fc3a96f6f4d6f6f20c3a9f09f9a806f20f09f9a806f206fc3a9204dc3a96f20f09f9a80c3a9f09f9a80f09f9a806ff09f9a806f6ff09f9a80c3a9c3a96f2020f09f9a80f09f9a80204dc3a96fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a806f6f206fc3a9c3a94d20200000000000000000000000000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a804dc3a9206f6f6f6ff09f9a80f09f9a80f09f9a80c3a94d4d204d6f4d20206fc3a92020f09f9a80204dc3a9c3a920206f204d6f202020c3a9f09f9a80f09f9a80f09f9a80206ff09f9a80c3a96f6f4d20000000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a804df09f9a80f09f9a806f6f206f6ff09f9a806f200000" + }, + { + "name": "random-(((bytes19[1],bytes16,address,bytes23),bool),string,bytes31,((address[4]),string,bytes27),int72)[3]", + "type": "(((bytes19[1],bytes16,address,bytes23),bool),string,bytes31,((address[4]),string,bytes27),int72)[3]", + "value": [ + [ + [ + [ + ["0xa38f52665e4a1da79f0fdea949d089822fd4d0"], + "0x76e0a1e6722ebd9eaa1c825ec0958964", + "0x6e55480CDC3A6D86B31d42487AA2B9D90FbF452E", + "0x33528af1694b9e55ecfc5707db4f6a391eece97dfcb901" + ], + false + ], + "Moo é🚀", + "0x50340f7b6cdfa38d6b890daddee39ea1defd3f3e4e319c95eb3f06411962e3", + [ + [ + [ + "0x474Ba07Cd4188A4a51350cAefF90916D126FCC65", + "0xfAd617249F29AcED88E07906465C6cbf15e5C26e", + "0x239516367eF1e96d776040E6d7bf9169D536069d", + "0x636400AFF2f022F71590f527a3E99AcD50209412" + ] + ], + "Moo é🚀oéoMoé 🚀 MM🚀M oo🚀MM", + "0x476e13f147bbf6fbad69c1a04dd89be6fb06b3d2876958207a0abe" + ], + "-878533724554300707378" + ], + [ + [ + [ + ["0x1adf9712c2a6e249c8ce874c260b8d71f0f652"], + "0xcbbc9fa1f5209337286ac6d07a93971c", + "0xb7BA35C9c7E68f984f48341E34c1985607623D67", + "0x5f81395e32bd7389acbc131de71f6b04cff74c901af960" + ], + false + ], + "Moo é🚀🚀o 🚀éoooM🚀Moo", + "0xf47685492d74db5a6f5667fd2f35ddf2c913f8c425d477d0b2b06b957eb2b4", + [ + [ + [ + "0x50B3e0649551A84e792BFDE0e22E370DBdc0E982", + "0x438C50029780c17af6d172fb2a262a337D6f3587", + "0xC87A60897266B341651d6b79aa7127aD0e8c8769", + "0x1537d8FeC5b5B539f1353aB36B01F16a9B7f10a8" + ] + ], + "Moo é🚀🚀é Mo🚀oMééM 🚀é oo éé M🚀o 🚀o🚀oooM é🚀Mo🚀 oMoo🚀", + "0xcc1413a9acb20fb8e4da3930215e9eee1dd55b3d458aa2e37ac350" + ], + "-2348054812072302191283" + ], + [ + [ + [ + ["0x3a19a9a22986ce0e37d8c38e9149229de44c2a"], + "0xf8e5e8ef0edb5b378457e0aa76d2597d", + "0xE9bAEc0b0d09228EAaAd3eD8435B8929A41c6385", + "0x0317ada38315382f2c4d525cc1eaafb224fc46eb37c68a" + ], + false + ], + "Moo é🚀oo oooMo", + "0x53dd9a699b8039645b878f7b28a3b48ba2283306fb75c9c4ab6b44718eea38", + [ + [ + [ + "0x2cfA9A1D7EA56456Bb32eaD10552CFc95d82263A", + "0xEeB07891920C386CEdaA58b5275e148F7D43dCc0", + "0x4eF50F5f4458e759f56E22E2AA7515fE75d04a61", + "0xbe7fa437f3c8C24b1Dd54fCBe04dAa0E088eD3c5" + ] + ], + "Moo é🚀 MoooMM🚀oMMéoM🚀ééoé é", + "0xb8c881dccf816f4644bc33336bca8a3b4c9023be47d63ff3c4fcea" + ], + "1873101176195224045730" + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xa38f52665e4a1da79f0fdea949d089822fd4d0" + } + ] + }, + { + "type": "hexstring", + "value": "0x76e0a1e6722ebd9eaa1c825ec0958964" + }, + { + "type": "address", + "value": "0x6e55480CDC3A6D86B31d42487AA2B9D90FbF452E" + }, + { + "type": "hexstring", + "value": "0x33528af1694b9e55ecfc5707db4f6a391eece97dfcb901" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "hexstring", + "value": "0x50340f7b6cdfa38d6b890daddee39ea1defd3f3e4e319c95eb3f06411962e3" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x474Ba07Cd4188A4a51350cAefF90916D126FCC65" + }, + { + "type": "address", + "value": "0xfAd617249F29AcED88E07906465C6cbf15e5C26e" + }, + { + "type": "address", + "value": "0x239516367eF1e96d776040E6d7bf9169D536069d" + }, + { + "type": "address", + "value": "0x636400AFF2f022F71590f527a3E99AcD50209412" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oéoMoé 🚀 MM🚀M oo🚀MM" + }, + { + "type": "hexstring", + "value": "0x476e13f147bbf6fbad69c1a04dd89be6fb06b3d2876958207a0abe" + } + ] + }, + { + "type": "number", + "value": "-878533724554300707378" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x1adf9712c2a6e249c8ce874c260b8d71f0f652" + } + ] + }, + { + "type": "hexstring", + "value": "0xcbbc9fa1f5209337286ac6d07a93971c" + }, + { + "type": "address", + "value": "0xb7BA35C9c7E68f984f48341E34c1985607623D67" + }, + { + "type": "hexstring", + "value": "0x5f81395e32bd7389acbc131de71f6b04cff74c901af960" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀o 🚀éoooM🚀Moo" + }, + { + "type": "hexstring", + "value": "0xf47685492d74db5a6f5667fd2f35ddf2c913f8c425d477d0b2b06b957eb2b4" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x50B3e0649551A84e792BFDE0e22E370DBdc0E982" + }, + { + "type": "address", + "value": "0x438C50029780c17af6d172fb2a262a337D6f3587" + }, + { + "type": "address", + "value": "0xC87A60897266B341651d6b79aa7127aD0e8c8769" + }, + { + "type": "address", + "value": "0x1537d8FeC5b5B539f1353aB36B01F16a9B7f10a8" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀é Mo🚀oMééM 🚀é oo éé M🚀o 🚀o🚀oooM é🚀Mo🚀 oMoo🚀" + }, + { + "type": "hexstring", + "value": "0xcc1413a9acb20fb8e4da3930215e9eee1dd55b3d458aa2e37ac350" + } + ] + }, + { + "type": "number", + "value": "-2348054812072302191283" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3a19a9a22986ce0e37d8c38e9149229de44c2a" + } + ] + }, + { + "type": "hexstring", + "value": "0xf8e5e8ef0edb5b378457e0aa76d2597d" + }, + { + "type": "address", + "value": "0xE9bAEc0b0d09228EAaAd3eD8435B8929A41c6385" + }, + { + "type": "hexstring", + "value": "0x0317ada38315382f2c4d525cc1eaafb224fc46eb37c68a" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oo oooMo" + }, + { + "type": "hexstring", + "value": "0x53dd9a699b8039645b878f7b28a3b48ba2283306fb75c9c4ab6b44718eea38" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x2cfA9A1D7EA56456Bb32eaD10552CFc95d82263A" + }, + { + "type": "address", + "value": "0xEeB07891920C386CEdaA58b5275e148F7D43dCc0" + }, + { + "type": "address", + "value": "0x4eF50F5f4458e759f56E22E2AA7515fE75d04a61" + }, + { + "type": "address", + "value": "0xbe7fa437f3c8C24b1Dd54fCBe04dAa0E088eD3c5" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 MoooMM🚀oMMéoM🚀ééoé é" + }, + { + "type": "hexstring", + "value": "0xb8c881dccf816f4644bc33336bca8a3b4c9023be47d63ff3c4fcea" + } + ] + }, + { + "type": "number", + "value": "1873101176195224045730" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610a15806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906107da565b60405180910390f35b610056610602565b61005e610602565b61006661062f565b61006e61066a565b610076610679565b61007e6106a7565b720a38f52665e4a1da79f0fdea949d089822fd4d606c1b815281526f1db828799c8baf67aa872097b025625960821b602082810191909152736e55480cdc3a6d86b31d42487aa2b9d90fbf452e6040808401919091527f33528af1694b9e55ecfc5707db4f6a391eece97dfcb901000000000000000000606084015291835260008382015291835280518082018252600a8152689adede418753e13f3560b71b81840152918301919091527f50340f7b6cdfa38d6b890daddee39ea1defd3f3e4e319c95eb3f06411962e300908201526101566106c5565b61015e6106ec565b610166610704565b73474ba07cd4188a4a51350caeff90916d126fcc65815273fad617249f29aced88e07906465c6cbf15e5c26e60208083019190915273239516367ef1e96d776040e6d7bf9169d536069d60408084019190915273636400aff2f022f71590f527a3e99acd50209412606080850191909152928452928452825191820190925260288082526000926109b8908301396020830152507f476e13f147bbf6fbad69c1a04dd89be6fb06b3d2876958207a0abe000000000060408201526060820152682fa01ac7cf9bf75231196080820152815261023f61062f565b61024761066a565b61024f610679565b6102576106a7565b720d6fcb8961537124e46743a61305c6b8f87b2960691b815281526f32ef27e87d4824cdca1ab1b41ea4e5c760821b60208281019190915273b7ba35c9c7e68f984f48341e34c1985607623d676040808401919091527f5f81395e32bd7389acbc131de71f6b04cff74c901af96000000000000000000060608085019190915292845260008483018190529385528051928301905260218083529061093f908301396020830152507ff47685492d74db5a6f5667fd2f35ddf2c913f8c425d477d0b2b06b957eb2b400604082015261032d6106c5565b6103356106ec565b61033d610704565b7350b3e0649551a84e792bfde0e22e370dbdc0e982815273438c50029780c17af6d172fb2a262a337d6f358760208083019190915273c87a60897266b341651d6b79aa7127ad0e8c8769604080840191909152731537d8fec5b5b539f1353ab36b01f16a9b7f10a860608401529183529183528051608081019091526058808252600092610960908301396020830152507fcc1413a9acb20fb8e4da3930215e9eee1dd55b3d458aa2e37ac350000000000060408201526060820152687f49ce730d5c29a2b21960808201528082600160200201525061041b61062f565b61042361066a565b61042b610679565b6104336106a7565b721d0cd4d114c367071bec61c748a4914ef2261560691b815281526ff8e5e8ef0edb5b378457e0aa76d2597d60801b60208281019190915273e9baec0b0d09228eaaad3ed8435b8929a41c63856040808401919091527f0317ada38315382f2c4d525cc1eaafb224fc46eb37c68a00000000000000000060608401529183526000838201529183528051808201825260138152724d6f6f20c3a9f09f9a806f6f20206f6f6f4d6f60681b81840152918301919091527f53dd9a699b8039645b878f7b28a3b48ba2283306fb75c9c4ab6b44718eea3800908201526105156106c5565b61051d6106ec565b610525610704565b732cfa9a1d7ea56456bb32ead10552cfc95d82263a815273eeb07891920c386cedaa58b5275e148f7d43dcc0602080830191909152734ef50f5f4458e759f56e22e2aa7515fe75d04a6160408084019190915273be7fa437f3c8c24b1dd54fcbe04daa0e088ed3c56060808501919091529284529284528251918201909252602a808252600092610915908301396020830152507fb8c881dccf816f4644bc33336bca8a3b4c9023be47d63ff3c4fcea00000000006040820152606082015268658a802ba25ab208a2608082015280826002602002015250919050565b60405180606001604052806003905b61061961062f565b8152602001906001900390816106115790505090565b6040518060a0016040528061064261066a565b8152606060208201819052600060408301520161065d6106c5565b8152600060209091015290565b604051806040016040528061065d5b604051806080016040528061068c6106a7565b81526000602082018190526040820181905260609091015290565b60405180602001604052806001906020820280368337509192915050565b60405180606001604052806106d86106ec565b815260606020820152600060409091015290565b60405180602001604052806106ff610704565b905290565b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b818110156107485760208185018101518683018201520161072c565b8181111561075a576000602083870101525b50601f01601f19169290920160200192915050565b80515160009083825b60048110156107a05782516001600160a01b0316825260209283019290910190600101610778565b505050602082015160c060808501526107bc60c0850182610722565b905064ffffffffff1960408401511660a08501528091505092915050565b602080825260009060808382018185018685805b600381101561090657888403601f19018552825180518051805161012092919088875b600181101561083e5782516cffffffffffffffffffffffffff19168252918d0191908d0190600101610811565b505050808b01516fffffffffffffffffffffffffffffffff1916888c01526040808201516001600160a01b0316818a015260608083015168ffffffffffffffffff1916818b0152928c015115158b8a0152848c015160a08a01859052926108a7858b0185610722565b94508186015193506108bf60c08b018560ff19169052565b80860151935050505086820360e08801526108da828261076f565b9150508782015191506108f361010087018360080b9052565b95880195945050918601916001016107ee565b50919897505050505050505056fe4d6f6f20c3a9f09f9a80204d6f6f6f4d4df09f9a806f4d4dc3a96f4df09f9a80c3a9c3a96fc3a920c3a94d6f6f20c3a9f09f9a80f09f9a806f20f09f9a80c3a96f6f6f4df09f9a804d6f6f4d6f6f20c3a9f09f9a80f09f9a80c3a9204d6ff09f9a806f4dc3a9c3a94d20f09f9a80c3a9206f6f20c3a9c3a9204df09f9a806f20f09f9a806ff09f9a806f6f6f4d20c3a9f09f9a804d6ff09f9a80206f4d6f6ff09f9a804d6f6f20c3a9f09f9a806fc3a96f4d6fc3a920f09f9a80204d4df09f9a804d206f6ff09f9a804d4da2646970667358221220a9ae6359488d6f410381e8a0357a9b39a33af1f1585b820a292eb3a4e136c46464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ba99ad87 {\n bytes19[1] s_0;\n bytes16 s_1;\n address s_2;\n bytes23 s_3;\n }\n\n struct S_9294cd0f {\n S_ba99ad87 s_0;\n bool s_1;\n }\n\n struct S_5a8b99b2 {\n address[4] s_0;\n }\n\n struct S_0bdb9df7 {\n S_5a8b99b2 s_0;\n string s_1;\n bytes27 s_2;\n }\n\n struct S_b6f46e7c {\n S_9294cd0f s_0;\n string s_1;\n bytes31 s_2;\n S_0bdb9df7 s_3;\n int72 s_4;\n }\n\n function test () public pure returns (S_b6f46e7c[3] memory) {\n S_b6f46e7c[3] memory r;\n {\n S_b6f46e7c memory r_0;\n {\n S_9294cd0f memory r_0_0;\n {\n S_ba99ad87 memory r_0_0_0;\n {\n bytes19[1] memory r_0_0_0_0;\n {\n bytes19 r_0_0_0_0_0 = bytes19(0xa38f52665e4a1da79f0fdea949d089822fd4d0);\n r_0_0_0_0[0] = r_0_0_0_0_0;\n }\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n bytes16 r_0_0_0_1 = bytes16(0x76e0a1e6722ebd9eaa1c825ec0958964);\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n address r_0_0_0_2 = 0x6e55480CDC3A6D86B31d42487AA2B9D90FbF452E;\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n {\n bytes23 r_0_0_0_3 = bytes23(0x33528af1694b9e55ecfc5707db4f6a391eece97dfcb901);\n r_0_0_0.s_3 = r_0_0_0_3;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n bool r_0_0_1 = false;\n r_0_0.s_1 = r_0_0_1;\n }\n r_0.s_0 = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀\";\n r_0.s_1 = r_0_1;\n }\n {\n bytes31 r_0_2 = bytes31(0x50340f7b6cdfa38d6b890daddee39ea1defd3f3e4e319c95eb3f06411962e3);\n r_0.s_2 = r_0_2;\n }\n {\n S_0bdb9df7 memory r_0_3;\n {\n S_5a8b99b2 memory r_0_3_0;\n {\n address[4] memory r_0_3_0_0;\n {\n address r_0_3_0_0_0 = 0x474Ba07Cd4188A4a51350cAefF90916D126FCC65;\n r_0_3_0_0[0] = r_0_3_0_0_0;\n }\n {\n address r_0_3_0_0_1 = 0xfAd617249F29AcED88E07906465C6cbf15e5C26e;\n r_0_3_0_0[1] = r_0_3_0_0_1;\n }\n {\n address r_0_3_0_0_2 = 0x239516367eF1e96d776040E6d7bf9169D536069d;\n r_0_3_0_0[2] = r_0_3_0_0_2;\n }\n {\n address r_0_3_0_0_3 = 0x636400AFF2f022F71590f527a3E99AcD50209412;\n r_0_3_0_0[3] = r_0_3_0_0_3;\n }\n r_0_3_0.s_0 = r_0_3_0_0;\n }\n r_0_3.s_0 = r_0_3_0;\n }\n {\n string memory r_0_3_1 = unicode\"Moo é🚀oéoMoé 🚀 MM🚀M oo🚀MM\";\n r_0_3.s_1 = r_0_3_1;\n }\n {\n bytes27 r_0_3_2 = bytes27(0x476e13f147bbf6fbad69c1a04dd89be6fb06b3d2876958207a0abe);\n r_0_3.s_2 = r_0_3_2;\n }\n r_0.s_3 = r_0_3;\n }\n {\n int72 r_0_4 = -878533724554300707378;\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_b6f46e7c memory r_1;\n {\n S_9294cd0f memory r_1_0;\n {\n S_ba99ad87 memory r_1_0_0;\n {\n bytes19[1] memory r_1_0_0_0;\n {\n bytes19 r_1_0_0_0_0 = bytes19(0x1adf9712c2a6e249c8ce874c260b8d71f0f652);\n r_1_0_0_0[0] = r_1_0_0_0_0;\n }\n r_1_0_0.s_0 = r_1_0_0_0;\n }\n {\n bytes16 r_1_0_0_1 = bytes16(0xcbbc9fa1f5209337286ac6d07a93971c);\n r_1_0_0.s_1 = r_1_0_0_1;\n }\n {\n address r_1_0_0_2 = 0xb7BA35C9c7E68f984f48341E34c1985607623D67;\n r_1_0_0.s_2 = r_1_0_0_2;\n }\n {\n bytes23 r_1_0_0_3 = bytes23(0x5f81395e32bd7389acbc131de71f6b04cff74c901af960);\n r_1_0_0.s_3 = r_1_0_0_3;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bool r_1_0_1 = false;\n r_1_0.s_1 = r_1_0_1;\n }\n r_1.s_0 = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀🚀o 🚀éoooM🚀Moo\";\n r_1.s_1 = r_1_1;\n }\n {\n bytes31 r_1_2 = bytes31(0xf47685492d74db5a6f5667fd2f35ddf2c913f8c425d477d0b2b06b957eb2b4);\n r_1.s_2 = r_1_2;\n }\n {\n S_0bdb9df7 memory r_1_3;\n {\n S_5a8b99b2 memory r_1_3_0;\n {\n address[4] memory r_1_3_0_0;\n {\n address r_1_3_0_0_0 = 0x50B3e0649551A84e792BFDE0e22E370DBdc0E982;\n r_1_3_0_0[0] = r_1_3_0_0_0;\n }\n {\n address r_1_3_0_0_1 = 0x438C50029780c17af6d172fb2a262a337D6f3587;\n r_1_3_0_0[1] = r_1_3_0_0_1;\n }\n {\n address r_1_3_0_0_2 = 0xC87A60897266B341651d6b79aa7127aD0e8c8769;\n r_1_3_0_0[2] = r_1_3_0_0_2;\n }\n {\n address r_1_3_0_0_3 = 0x1537d8FeC5b5B539f1353aB36B01F16a9B7f10a8;\n r_1_3_0_0[3] = r_1_3_0_0_3;\n }\n r_1_3_0.s_0 = r_1_3_0_0;\n }\n r_1_3.s_0 = r_1_3_0;\n }\n {\n string memory r_1_3_1 = unicode\"Moo é🚀🚀é Mo🚀oMééM 🚀é oo éé M🚀o 🚀o🚀oooM é🚀Mo🚀 oMoo🚀\";\n r_1_3.s_1 = r_1_3_1;\n }\n {\n bytes27 r_1_3_2 = bytes27(0xcc1413a9acb20fb8e4da3930215e9eee1dd55b3d458aa2e37ac350);\n r_1_3.s_2 = r_1_3_2;\n }\n r_1.s_3 = r_1_3;\n }\n {\n int72 r_1_4 = -2348054812072302191283;\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n {\n S_b6f46e7c memory r_2;\n {\n S_9294cd0f memory r_2_0;\n {\n S_ba99ad87 memory r_2_0_0;\n {\n bytes19[1] memory r_2_0_0_0;\n {\n bytes19 r_2_0_0_0_0 = bytes19(0x3a19a9a22986ce0e37d8c38e9149229de44c2a);\n r_2_0_0_0[0] = r_2_0_0_0_0;\n }\n r_2_0_0.s_0 = r_2_0_0_0;\n }\n {\n bytes16 r_2_0_0_1 = bytes16(0xf8e5e8ef0edb5b378457e0aa76d2597d);\n r_2_0_0.s_1 = r_2_0_0_1;\n }\n {\n address r_2_0_0_2 = 0xE9bAEc0b0d09228EAaAd3eD8435B8929A41c6385;\n r_2_0_0.s_2 = r_2_0_0_2;\n }\n {\n bytes23 r_2_0_0_3 = bytes23(0x0317ada38315382f2c4d525cc1eaafb224fc46eb37c68a);\n r_2_0_0.s_3 = r_2_0_0_3;\n }\n r_2_0.s_0 = r_2_0_0;\n }\n {\n bool r_2_0_1 = false;\n r_2_0.s_1 = r_2_0_1;\n }\n r_2.s_0 = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀oo oooMo\";\n r_2.s_1 = r_2_1;\n }\n {\n bytes31 r_2_2 = bytes31(0x53dd9a699b8039645b878f7b28a3b48ba2283306fb75c9c4ab6b44718eea38);\n r_2.s_2 = r_2_2;\n }\n {\n S_0bdb9df7 memory r_2_3;\n {\n S_5a8b99b2 memory r_2_3_0;\n {\n address[4] memory r_2_3_0_0;\n {\n address r_2_3_0_0_0 = 0x2cfA9A1D7EA56456Bb32eaD10552CFc95d82263A;\n r_2_3_0_0[0] = r_2_3_0_0_0;\n }\n {\n address r_2_3_0_0_1 = 0xEeB07891920C386CEdaA58b5275e148F7D43dCc0;\n r_2_3_0_0[1] = r_2_3_0_0_1;\n }\n {\n address r_2_3_0_0_2 = 0x4eF50F5f4458e759f56E22E2AA7515fE75d04a61;\n r_2_3_0_0[2] = r_2_3_0_0_2;\n }\n {\n address r_2_3_0_0_3 = 0xbe7fa437f3c8C24b1Dd54fCBe04dAa0E088eD3c5;\n r_2_3_0_0[3] = r_2_3_0_0_3;\n }\n r_2_3_0.s_0 = r_2_3_0_0;\n }\n r_2_3.s_0 = r_2_3_0;\n }\n {\n string memory r_2_3_1 = unicode\"Moo é🚀 MoooMM🚀oMMéoM🚀ééoé é\";\n r_2_3.s_1 = r_2_3_1;\n }\n {\n bytes27 r_2_3_2 = bytes27(0xb8c881dccf816f4644bc33336bca8a3b4c9023be47d63ff3c4fcea);\n r_2_3.s_2 = r_2_3_2;\n }\n r_2.s_3 = r_2_3;\n }\n {\n int72 r_2_4 = 1873101176195224045730;\n r_2.s_4 = r_2_4;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000005a0a38f52665e4a1da79f0fdea949d089822fd4d00000000000000000000000000076e0a1e6722ebd9eaa1c825ec0958964000000000000000000000000000000000000000000000000000000006e55480cdc3a6d86b31d42487aa2b9d90fbf452e33528af1694b9e55ecfc5707db4f6a391eece97dfcb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012050340f7b6cdfa38d6b890daddee39ea1defd3f3e4e319c95eb3f06411962e3000000000000000000000000000000000000000000000000000000000000000160ffffffffffffffffffffffffffffffffffffffffffffffd05fe538306408adce000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000474ba07cd4188a4a51350caeff90916d126fcc65000000000000000000000000fad617249f29aced88e07906465c6cbf15e5c26e000000000000000000000000239516367ef1e96d776040e6d7bf9169d536069d000000000000000000000000636400aff2f022f71590f527a3e99acd5020941200000000000000000000000000000000000000000000000000000000000000c0476e13f147bbf6fbad69c1a04dd89be6fb06b3d2876958207a0abe000000000000000000000000000000000000000000000000000000000000000000000000284d6f6f20c3a9f09f9a806fc3a96f4d6fc3a920f09f9a80204d4df09f9a804d206f6ff09f9a804d4d0000000000000000000000000000000000000000000000001adf9712c2a6e249c8ce874c260b8d71f0f65200000000000000000000000000cbbc9fa1f5209337286ac6d07a93971c00000000000000000000000000000000000000000000000000000000b7ba35c9c7e68f984f48341e34c1985607623d675f81395e32bd7389acbc131de71f6b04cff74c901af96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120f47685492d74db5a6f5667fd2f35ddf2c913f8c425d477d0b2b06b957eb2b4000000000000000000000000000000000000000000000000000000000000000180ffffffffffffffffffffffffffffffffffffffffffffff80b6318cf2a3d65d4d00000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a80f09f9a806f20f09f9a80c3a96f6f6f4df09f9a804d6f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b3e0649551a84e792bfde0e22e370dbdc0e982000000000000000000000000438c50029780c17af6d172fb2a262a337d6f3587000000000000000000000000c87a60897266b341651d6b79aa7127ad0e8c87690000000000000000000000001537d8fec5b5b539f1353ab36b01f16a9b7f10a800000000000000000000000000000000000000000000000000000000000000c0cc1413a9acb20fb8e4da3930215e9eee1dd55b3d458aa2e37ac350000000000000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a80f09f9a80c3a9204d6ff09f9a806f4dc3a9c3a94d20f09f9a80c3a9206f6f20c3a9c3a9204df09f9a806f20f09f9a806ff09f9a806f6f6f4d20c3a9f09f9a804d6ff09f9a80206f4d6f6ff09f9a8000000000000000003a19a9a22986ce0e37d8c38e9149229de44c2a00000000000000000000000000f8e5e8ef0edb5b378457e0aa76d2597d00000000000000000000000000000000000000000000000000000000e9baec0b0d09228eaaad3ed8435b8929a41c63850317ada38315382f2c4d525cc1eaafb224fc46eb37c68a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012053dd9a699b8039645b878f7b28a3b48ba2283306fb75c9c4ab6b44718eea380000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000658a802ba25ab208a200000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a806f6f20206f6f6f4d6f000000000000000000000000000000000000000000000000002cfa9a1d7ea56456bb32ead10552cfc95d82263a000000000000000000000000eeb07891920c386cedaa58b5275e148f7d43dcc00000000000000000000000004ef50f5f4458e759f56e22e2aa7515fe75d04a61000000000000000000000000be7fa437f3c8c24b1dd54fcbe04daa0e088ed3c500000000000000000000000000000000000000000000000000000000000000c0b8c881dccf816f4644bc33336bca8a3b4c9023be47d63ff3c4fcea0000000000000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a80204d6f6f6f4d4df09f9a806f4d4dc3a96f4df09f9a80c3a9c3a96fc3a920c3a900000000000000000000000000000000000000000000" + }, + { + "name": "random-((bool,bool,address,string[]),address,uint96,string,(bytes16,(bool)[3],bool,int232))[3]", + "type": "((bool,bool,address,string[]),address,uint96,string,(bytes16,(bool)[3],bool,int232))[3]", + "value": [ + [ + [ + true, + true, + "0xA56a86c0CC5326212Bda3d1a48a5a4BedEf7449d", + [ + "Moo é🚀éoo🚀M🚀🚀o o ooéoMéMoMéo🚀", + "Moo é🚀oM oooo🚀o🚀ooMo é🚀 🚀MoM", + "Moo é🚀🚀🚀 o o🚀é🚀oéo 🚀o" + ] + ], + "0x727B5f2Bb8C0fd94135aC513b144cb9486bD3138", + "74119244891081101631345647992", + "Moo é🚀 é🚀oM🚀 éMooM🚀M🚀🚀MoM ééoM 🚀oé 🚀MéooMM🚀oéMo🚀o", + [ + "0xd0284e92d3b9e0242d0a4bbd6781b0b6", + [[false], [true], [false]], + false, + "2015744372352643699368653516288848792370893864712675850360129822712066" + ] + ], + [ + [false, true, "0x878310b3232CFf80f97Bad3fd8FC4aad27448fFc", ["Moo é🚀🚀o"]], + "0x4E145EEE551de1F810e19888114f4cFd1d93AA72", + "1154838798351363358452737586", + "Moo é🚀Mé ooo🚀 Mooé🚀é🚀ooé🚀🚀", + [ + "0x68151efcc3c675a31c455e00bfa06cec", + [[false], [true], [true]], + false, + "-2374300893861232542468757077616514028300989456728643735967798008048968" + ] + ], + [ + [ + false, + false, + "0x0ee2f4eA89D5dA7FC10F5fc14c65713e2F8bd52c", + [ + "Moo é🚀éoMo🚀oo🚀MMMMMoéééo🚀MééoM oooéoooM", + "Moo é🚀o🚀 o🚀 MMoMéo🚀🚀é o 🚀o🚀🚀 oMoMéo🚀", + "Moo é🚀" + ] + ], + "0xAD403b93fF925AC4213cf18B8998821b076dBCFD", + "17523765766723850732090753256", + "Moo é🚀oéMé🚀oMo ooo 🚀ééé 🚀oMMéoé M🚀 🚀é", + [ + "0x6923fe86a320e2e67abfbc9eb14c4056", + [[true], [false], [false]], + true, + "569966561646417809910816818758484505920056805924731760058745715275846" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xA56a86c0CC5326212Bda3d1a48a5a4BedEf7449d" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoo🚀M🚀🚀o o ooéoMéMoMéo🚀" + }, + { + "type": "string", + "value": "Moo é🚀oM oooo🚀o🚀ooMo é🚀 🚀MoM" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀 o o🚀é🚀oéo 🚀o" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x727B5f2Bb8C0fd94135aC513b144cb9486bD3138" + }, + { + "type": "number", + "value": "74119244891081101631345647992" + }, + { + "type": "string", + "value": "Moo é🚀 é🚀oM🚀 éMooM🚀M🚀🚀MoM ééoM 🚀oé 🚀MéooMM🚀oéMo🚀o" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd0284e92d3b9e0242d0a4bbd6781b0b6" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "2015744372352643699368653516288848792370893864712675850360129822712066" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x878310b3232CFf80f97Bad3fd8FC4aad27448fFc" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀o" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x4E145EEE551de1F810e19888114f4cFd1d93AA72" + }, + { + "type": "number", + "value": "1154838798351363358452737586" + }, + { + "type": "string", + "value": "Moo é🚀Mé ooo🚀 Mooé🚀é🚀ooé🚀🚀" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x68151efcc3c675a31c455e00bfa06cec" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-2374300893861232542468757077616514028300989456728643735967798008048968" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x0ee2f4eA89D5dA7FC10F5fc14c65713e2F8bd52c" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoMo🚀oo🚀MMMMMoéééo🚀MééoM oooéoooM" + }, + { + "type": "string", + "value": "Moo é🚀o🚀 o🚀 MMoMéo🚀🚀é o 🚀o🚀🚀 oMoMéo🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xAD403b93fF925AC4213cf18B8998821b076dBCFD" + }, + { + "type": "number", + "value": "17523765766723850732090753256" + }, + { + "type": "string", + "value": "Moo é🚀oéMé🚀oMo ooo 🚀ééé 🚀oMMéoé M🚀 🚀é" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x6923fe86a320e2e67abfbc9eb14c4056" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "569966561646417809910816818758484505920056805924731760058745715275846" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610b1b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906107c5565b60405180910390f35b610056610632565b61005e610632565b61006661065f565b6040805160808082018352606080830152600180835260208084019190915273a56a86c0cc5326212bda3d1a48a5a4bedef7449d8385015283516003808252928101909452919260009290919082015b60608152602001906001900390816100b65790505090506000604051806060016040528060318152602001610a4960319139905080826000815181106100fe576100fe6108fe565b60200260200101819052505060006040518060600160405280602e8152602001610a1b602e91399050808260018151811061013b5761013b6108fe565b60200260200101819052505060006040518060600160405280602a815260200161096d602a913990508082600281518110610178576101786108fe565b60209081029190910181019190915260608401929092525090825273727b5f2bb8c0fd94135ac513b144cb9486bd3138828201526bef7e009cb1dbf971b79be1786040808401919091528051608081019091526058808252600092610915908301396060830152506101e86106b3565b6f6814274969dcf012168525deb3c0d85b60811b81526102066106e2565b6040805160208082018352600080835291845282518082018452600181528482015282518082018452828152848401528401929092528201527c4ac4a3228a936be1bd55ac4cff07472606416ddeeff7587f030ee8e10260608201526080820152815261027161065f565b6040805160808101825260008082526060808301526001602080840182905273878310b3232cff80f97bad3fd8fc4aad27448ffc8486015284518281528086019095529293919282015b60608152602001906001900390816102bb57905050905060006040518060400160405280600f81526020016e4d6f6f20c3a9f09f9a80f09f9a806f60881b81525090508082600081518110610312576103126108fe565b60209081029190910181019190915260608085019390935292845250734e145eee551de1f810e19888114f4cfd1d93aa72838301526b03bb42a0b3c06c073321e632604080850191909152805191820190526031808252600092610ab5908301396060830152506103816106b3565b6f1a0547bf30f19d68c71157802fe81b3b60821b815261039f6106e2565b6040805160208082018352600080835291845282518082018452600180825285830191909152835180830185529081528484015284810193909352908301527fffffffa7eeaa3e53830dfa5826ad87c264b076c07bd49c026e30d4f34a6e92b86060830152608083019190915282015261041761065f565b604080516080808201835260008083526020808401829052606080850152730ee2f4ea89d5da7fc10f5fc14c65713e2f8bd52c84860152845160038082529381019095529293909290919082015b606081526020019060019003908161046557905050905060006040518060600160405280603b8152602001610a7a603b9139905080826000815181106104ad576104ad6108fe565b602002602001018190525050600060405180608001604052806043815260200161099760439139905080826001815181106104ea576104ea6108fe565b60200260200101819052505060006040518060400160405280600a8152602001689adede418753e13f3560b71b81525090508082600281518110610530576105306108fe565b60209081029190910181019190915260608401929092525090825273ad403b93ff925ac4213cf18b8998821b076dbcfd828201526b389f51bdb86fc5c4510500e860408084019190915280516080810190915260418082526000926109da908301396060830152506105a06106b3565b6f3491ff43519071733d5fde4f58a6202b60811b81526105be6106e2565b60408051602080820183526001808352918452825180820184526000808252858301919091528351808301855290815284840152840192909252828101919091527c152427f6197d0a8facb34bcb95656332b8f38928b276c49cf383d5b84660608301526080830191909152820152919050565b60405180606001604052806003905b61064961065f565b8152602001906001900390816106415790505090565b604080516101208101909152600060a0820181815260c0830182905260e083019190915260606101008301528190815260006020820181905260408201526060808201526080016106ae6106b3565b905290565b604080516080810190915260008152602081016106ce6106e2565b815260006020820181905260409091015290565b60405180606001604052806003905b6040805160208101909152600081528152602001906001900390816106f15790505090565b6000815180845260005b8181101561073c57602081850181015186830182015201610720565b8181111561074e576000602083870101525b50601f01601f19169290920160200192915050565b80516fffffffffffffffffffffffffffffffff1916825260208082015181840160005b60038110156107a657825151151582529183019190830190600101610786565b5050505060408101511515608083015260600151601c0b60a090910152565b602080825260009060808382018185018685805b60038110156108f057601f198985030185528251805161014080875281511515908701528881015115156101608701526040808201516001600160a01b03166101808801526060918201516101a088018a905280516101c089018190529192908b01916101e0600582901b8a0181019291908a0190885b8181101561087f576101df198c860301835261086d858751610716565b958f01959450918e0191600101610850565b505050848c01516001600160a01b0381168a8e01529250848401516bffffffffffffffffffffffff81168a8601529250808501519350888203818a0152506108c78184610716565b925050508782015191506108dd88870183610763565b95880195945050918601916001016107d9565b509198975050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a8020c3a9f09f9a806f4df09f9a802020c3a94d6f6f4df09f9a804df09f9a80f09f9a804d6f4d20c3a9c3a96f4d20f09f9a806fc3a920f09f9a804dc3a96f6f4d4df09f9a806fc3a94d6ff09f9a806f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80206f206ff09f9a80c3a9f09f9a806fc3a96f20f09f9a806f4d6f6f20c3a9f09f9a806ff09f9a80206ff09f9a80204d4d6f4dc3a96ff09f9a80f09f9a80c3a9206f20f09f9a806ff09f9a80f09f9a80206f4d6f4dc3a96ff09f9a804d6f6f20c3a9f09f9a806fc3a94dc3a9f09f9a806f4d6f206f6f6f20f09f9a80c3a9c3a9c3a920f09f9a806f4d4dc3a96fc3a920204df09f9a8020f09f9a80c3a94d6f6f20c3a9f09f9a806f4d20206f6f6f6ff09f9a806ff09f9a806f6f4d6f20c3a9f09f9a8020f09f9a804d6f4d4d6f6f20c3a9f09f9a80c3a96f6ff09f9a804df09f9a80f09f9a806f206f206f6fc3a96f4dc3a94d6f4dc3a96ff09f9a804d6f6f20c3a9f09f9a80c3a96f4d6ff09f9a806f6ff09f9a804d4d4d4d4d6fc3a9c3a9c3a96ff09f9a804dc3a9c3a96f4d206f6f6fc3a96f6f6f4d4d6f6f20c3a9f09f9a804dc3a9206f6f6ff09f9a80204d6f6fc3a9f09f9a80c3a9f09f9a806f6fc3a9f09f9a80f09f9a80a2646970667358221220f9f4d3b95dd4550858cfd6a138717d667e5b36906ed51153a2ecb4583594046664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5805d811 {\n bool s_0;\n bool s_1;\n address s_2;\n string[] s_3;\n }\n\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_e06fe566 {\n bytes16 s_0;\n S_c1053bda[3] s_1;\n bool s_2;\n int232 s_3;\n }\n\n struct S_9c603a51 {\n S_5805d811 s_0;\n address s_1;\n uint96 s_2;\n string s_3;\n S_e06fe566 s_4;\n }\n\n function test () public pure returns (S_9c603a51[3] memory) {\n S_9c603a51[3] memory r;\n {\n S_9c603a51 memory r_0;\n {\n S_5805d811 memory r_0_0;\n {\n bool r_0_0_0 = true;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n bool r_0_0_1 = true;\n r_0_0.s_1 = r_0_0_1;\n }\n {\n address r_0_0_2 = 0xA56a86c0CC5326212Bda3d1a48a5a4BedEf7449d;\n r_0_0.s_2 = r_0_0_2;\n }\n {\n string[] memory r_0_0_3 = new string[](3);\n {\n string memory r_0_0_3_0 = unicode\"Moo é🚀éoo🚀M🚀🚀o o ooéoMéMoMéo🚀\";\n r_0_0_3[0] = r_0_0_3_0;\n }\n {\n string memory r_0_0_3_1 = unicode\"Moo é🚀oM oooo🚀o🚀ooMo é🚀 🚀MoM\";\n r_0_0_3[1] = r_0_0_3_1;\n }\n {\n string memory r_0_0_3_2 = unicode\"Moo é🚀🚀🚀 o o🚀é🚀oéo 🚀o\";\n r_0_0_3[2] = r_0_0_3_2;\n }\n r_0_0.s_3 = r_0_0_3;\n }\n r_0.s_0 = r_0_0;\n }\n {\n address r_0_1 = 0x727B5f2Bb8C0fd94135aC513b144cb9486bD3138;\n r_0.s_1 = r_0_1;\n }\n {\n uint96 r_0_2 = 74119244891081101631345647992;\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀 é🚀oM🚀 éMooM🚀M🚀🚀MoM ééoM 🚀oé 🚀MéooMM🚀oéMo🚀o\";\n r_0.s_3 = r_0_3;\n }\n {\n S_e06fe566 memory r_0_4;\n {\n bytes16 r_0_4_0 = bytes16(0xd0284e92d3b9e0242d0a4bbd6781b0b6);\n r_0_4.s_0 = r_0_4_0;\n }\n {\n S_c1053bda[3] memory r_0_4_1;\n {\n S_c1053bda memory r_0_4_1_0;\n {\n bool r_0_4_1_0_0 = false;\n r_0_4_1_0.s_0 = r_0_4_1_0_0;\n }\n r_0_4_1[0] = r_0_4_1_0;\n }\n {\n S_c1053bda memory r_0_4_1_1;\n {\n bool r_0_4_1_1_0 = true;\n r_0_4_1_1.s_0 = r_0_4_1_1_0;\n }\n r_0_4_1[1] = r_0_4_1_1;\n }\n {\n S_c1053bda memory r_0_4_1_2;\n {\n bool r_0_4_1_2_0 = false;\n r_0_4_1_2.s_0 = r_0_4_1_2_0;\n }\n r_0_4_1[2] = r_0_4_1_2;\n }\n r_0_4.s_1 = r_0_4_1;\n }\n {\n bool r_0_4_2 = false;\n r_0_4.s_2 = r_0_4_2;\n }\n {\n int232 r_0_4_3 = 2015744372352643699368653516288848792370893864712675850360129822712066;\n r_0_4.s_3 = r_0_4_3;\n }\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_9c603a51 memory r_1;\n {\n S_5805d811 memory r_1_0;\n {\n bool r_1_0_0 = false;\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bool r_1_0_1 = true;\n r_1_0.s_1 = r_1_0_1;\n }\n {\n address r_1_0_2 = 0x878310b3232CFf80f97Bad3fd8FC4aad27448fFc;\n r_1_0.s_2 = r_1_0_2;\n }\n {\n string[] memory r_1_0_3 = new string[](1);\n {\n string memory r_1_0_3_0 = unicode\"Moo é🚀🚀o\";\n r_1_0_3[0] = r_1_0_3_0;\n }\n r_1_0.s_3 = r_1_0_3;\n }\n r_1.s_0 = r_1_0;\n }\n {\n address r_1_1 = 0x4E145EEE551de1F810e19888114f4cFd1d93AA72;\n r_1.s_1 = r_1_1;\n }\n {\n uint96 r_1_2 = 1154838798351363358452737586;\n r_1.s_2 = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀Mé ooo🚀 Mooé🚀é🚀ooé🚀🚀\";\n r_1.s_3 = r_1_3;\n }\n {\n S_e06fe566 memory r_1_4;\n {\n bytes16 r_1_4_0 = bytes16(0x68151efcc3c675a31c455e00bfa06cec);\n r_1_4.s_0 = r_1_4_0;\n }\n {\n S_c1053bda[3] memory r_1_4_1;\n {\n S_c1053bda memory r_1_4_1_0;\n {\n bool r_1_4_1_0_0 = false;\n r_1_4_1_0.s_0 = r_1_4_1_0_0;\n }\n r_1_4_1[0] = r_1_4_1_0;\n }\n {\n S_c1053bda memory r_1_4_1_1;\n {\n bool r_1_4_1_1_0 = true;\n r_1_4_1_1.s_0 = r_1_4_1_1_0;\n }\n r_1_4_1[1] = r_1_4_1_1;\n }\n {\n S_c1053bda memory r_1_4_1_2;\n {\n bool r_1_4_1_2_0 = true;\n r_1_4_1_2.s_0 = r_1_4_1_2_0;\n }\n r_1_4_1[2] = r_1_4_1_2;\n }\n r_1_4.s_1 = r_1_4_1;\n }\n {\n bool r_1_4_2 = false;\n r_1_4.s_2 = r_1_4_2;\n }\n {\n int232 r_1_4_3 = -2374300893861232542468757077616514028300989456728643735967798008048968;\n r_1_4.s_3 = r_1_4_3;\n }\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n {\n S_9c603a51 memory r_2;\n {\n S_5805d811 memory r_2_0;\n {\n bool r_2_0_0 = false;\n r_2_0.s_0 = r_2_0_0;\n }\n {\n bool r_2_0_1 = false;\n r_2_0.s_1 = r_2_0_1;\n }\n {\n address r_2_0_2 = 0x0ee2f4eA89D5dA7FC10F5fc14c65713e2F8bd52c;\n r_2_0.s_2 = r_2_0_2;\n }\n {\n string[] memory r_2_0_3 = new string[](3);\n {\n string memory r_2_0_3_0 = unicode\"Moo é🚀éoMo🚀oo🚀MMMMMoéééo🚀MééoM oooéoooM\";\n r_2_0_3[0] = r_2_0_3_0;\n }\n {\n string memory r_2_0_3_1 = unicode\"Moo é🚀o🚀 o🚀 MMoMéo🚀🚀é o 🚀o🚀🚀 oMoMéo🚀\";\n r_2_0_3[1] = r_2_0_3_1;\n }\n {\n string memory r_2_0_3_2 = unicode\"Moo é🚀\";\n r_2_0_3[2] = r_2_0_3_2;\n }\n r_2_0.s_3 = r_2_0_3;\n }\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0xAD403b93fF925AC4213cf18B8998821b076dBCFD;\n r_2.s_1 = r_2_1;\n }\n {\n uint96 r_2_2 = 17523765766723850732090753256;\n r_2.s_2 = r_2_2;\n }\n {\n string memory r_2_3 = unicode\"Moo é🚀oéMé🚀oMo ooo 🚀ééé 🚀oMMéoé M🚀 🚀é\";\n r_2.s_3 = r_2_3;\n }\n {\n S_e06fe566 memory r_2_4;\n {\n bytes16 r_2_4_0 = bytes16(0x6923fe86a320e2e67abfbc9eb14c4056);\n r_2_4.s_0 = r_2_4_0;\n }\n {\n S_c1053bda[3] memory r_2_4_1;\n {\n S_c1053bda memory r_2_4_1_0;\n {\n bool r_2_4_1_0_0 = true;\n r_2_4_1_0.s_0 = r_2_4_1_0_0;\n }\n r_2_4_1[0] = r_2_4_1_0;\n }\n {\n S_c1053bda memory r_2_4_1_1;\n {\n bool r_2_4_1_1_0 = false;\n r_2_4_1_1.s_0 = r_2_4_1_1_0;\n }\n r_2_4_1[1] = r_2_4_1_1;\n }\n {\n S_c1053bda memory r_2_4_1_2;\n {\n bool r_2_4_1_2_0 = false;\n r_2_4_1_2.s_0 = r_2_4_1_2_0;\n }\n r_2_4_1[2] = r_2_4_1_2;\n }\n r_2_4.s_1 = r_2_4_1;\n }\n {\n bool r_2_4_2 = true;\n r_2_4.s_2 = r_2_4_2;\n }\n {\n int232 r_2_4_3 = 569966561646417809910816818758484505920056805924731760058745715275846;\n r_2_4.s_3 = r_2_4_3;\n }\n r_2.s_4 = r_2_4;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000006e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000727b5f2bb8c0fd94135ac513b144cb9486bd31380000000000000000000000000000000000000000ef7e009cb1dbf971b79be1780000000000000000000000000000000000000000000000000000000000000360d0284e92d3b9e0242d0a4bbd6781b0b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ac4a3228a936be1bd55ac4cff07472606416ddeeff7587f030ee8e10200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a56a86c0cc5326212bda3d1a48a5a4bedef7449d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a80c3a96f6ff09f9a804df09f9a80f09f9a806f206f206f6fc3a96f4dc3a94d6f4dc3a96ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a806f4d20206f6f6f6ff09f9a806ff09f9a806f6f4d6f20c3a9f09f9a8020f09f9a804d6f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a80f09f9a80f09f9a80206f206ff09f9a80c3a9f09f9a806fc3a96f20f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a8020c3a9f09f9a806f4df09f9a802020c3a94d6f6f4df09f9a804df09f9a80f09f9a804d6f4d20c3a9c3a96f4d20f09f9a806fc3a920f09f9a804dc3a96f6f4d4df09f9a806fc3a94d6ff09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000004e145eee551de1f810e19888114f4cfd1d93aa72000000000000000000000000000000000000000003bb42a0b3c06c073321e632000000000000000000000000000000000000000000000000000000000000024068151efcc3c675a31c455e00bfa06cec000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffa7eeaa3e53830dfa5826ad87c264b076c07bd49c026e30d4f34a6e92b800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000878310b3232cff80f97bad3fd8fc4aad27448ffc000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a80f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a804dc3a9206f6f6ff09f9a80204d6f6fc3a9f09f9a80c3a9f09f9a806f6fc3a9f09f9a80f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000ad403b93ff925ac4213cf18b8998821b076dbcfd0000000000000000000000000000000000000000389f51bdb86fc5c4510500e800000000000000000000000000000000000000000000000000000000000003606923fe86a320e2e67abfbc9eb14c4056000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000152427f6197d0a8facb34bcb95656332b8f38928b276c49cf383d5b846000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ee2f4ea89d5da7fc10f5fc14c65713e2f8bd52c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000003b4d6f6f20c3a9f09f9a80c3a96f4d6ff09f9a806f6ff09f9a804d4d4d4d4d6fc3a9c3a9c3a96ff09f9a804dc3a9c3a96f4d206f6f6fc3a96f6f6f4d000000000000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a806ff09f9a80206ff09f9a80204d4d6f4dc3a96ff09f9a80f09f9a80c3a9206f20f09f9a806ff09f9a80f09f9a80206f4d6f4dc3a96ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a806fc3a94dc3a9f09f9a806f4d6f206f6f6f20f09f9a80c3a9c3a9c3a920f09f9a806f4d4dc3a96fc3a920204df09f9a8020f09f9a80c3a900000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((bool,bytes29[1],uint216,int16,(bool,string,int168,bytes19[4])),bytes10,string,bytes27,string)", + "type": "((bool,bytes29[1],uint216,int16,(bool,string,int168,bytes19[4])),bytes10,string,bytes27,string)", + "value": [ + [ + false, + ["0xae958ccebde0d68309bb9920dbb03d2302038ada3e0695c6d245d29638"], + "34588956925111867972330688092252384491979011332725286746642883025", + "-17814", + [ + false, + "Moo é🚀🚀éoo", + "-95598922699718537229087676339091443499277188140232", + [ + "0xa46da958ff075f4e5a3bf5748e9e6872faaaf4", + "0x07ae214229e513a61ddad364c7556f2d60fcea", + "0x82ba049dbf76bd4d679567a10de6ff2a60cf65", + "0x656c2200ed28c0e3ac2d6edc428e3e5119bcb3" + ] + ] + ], + "0xc5e7fd75e1c3c6cac703", + "Moo é🚀 é🚀ooo🚀M 🚀 MéM ooMéoo🚀o o🚀oMM🚀éoMoooéooo", + "0x5d5de0f9fef2fe364df173f77b5fbb6fbc631209f35bcb9b1bbefd", + "Moo é🚀 MooMMéo🚀MMo 🚀éoéMoé🚀Méoéo 🚀éo🚀é🚀 🚀éMoMoM🚀🚀oooM🚀MM M🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xae958ccebde0d68309bb9920dbb03d2302038ada3e0695c6d245d29638" + } + ] + }, + { + "type": "number", + "value": "34588956925111867972330688092252384491979011332725286746642883025" + }, + { + "type": "number", + "value": "-17814" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀🚀éoo" + }, + { + "type": "number", + "value": "-95598922699718537229087676339091443499277188140232" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xa46da958ff075f4e5a3bf5748e9e6872faaaf4" + }, + { + "type": "hexstring", + "value": "0x07ae214229e513a61ddad364c7556f2d60fcea" + }, + { + "type": "hexstring", + "value": "0x82ba049dbf76bd4d679567a10de6ff2a60cf65" + }, + { + "type": "hexstring", + "value": "0x656c2200ed28c0e3ac2d6edc428e3e5119bcb3" + } + ] + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xc5e7fd75e1c3c6cac703" + }, + { + "type": "string", + "value": "Moo é🚀 é🚀ooo🚀M 🚀 MéM ooMéoo🚀o o🚀oMM🚀éoMoooéooo" + }, + { + "type": "hexstring", + "value": "0x5d5de0f9fef2fe364df173f77b5fbb6fbc631209f35bcb9b1bbefd" + }, + { + "type": "string", + "value": "Moo é🚀 MooMMéo🚀MMo 🚀éoéMoé🚀Méoéo 🚀éo🚀é🚀 🚀éMoMoM🚀🚀oooM🚀MM M🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506105a4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906103bd565b60405180910390f35b610056610229565b61005e610229565b610066610260565b6000815261007261029c565b7fae958ccebde0d68309bb9920dbb03d2302038ada3e0695c6d245d29638000000815260208201527a5414c2bfcaf2109390a13161dad6d8866380b5137a51795f82a1d160408201526145951960608201526100cc6102ba565b6000815260408051808201825260128152714d6f6f20c3a9f09f9a80f09f9a80c3a96f6f60701b60208083019190915283015274416953f4498a0a291186a39b7cb3c66835b55d0cc719908201526101226102dd565b72291b6a563fc1d7d3968efd5d23a79a1cbeaabd606a1b81527203d710a114f289d30eed69b263aab796b07e7560691b6020808301919091527282ba049dbf76bd4d679567a10de6ff2a60cf6560681b60408084019190915272656c2200ed28c0e3ac2d6edc428e3e5119bcb360681b60608085019190915284019290925260808481019390935292845269c5e7fd75e1c3c6cac70360b01b8484015280519182019052604a8082526000926104ba908301396040808401919091527f5d5de0f9fef2fe364df173f77b5fbb6fbc631209f35bcb9b1bbefd00000000006060840152805160a08101909152606b808252600092506105046020830139608083015250919050565b6040518060a0016040528061023c610260565b81526000602082018190526060604083018190528083019190915260809091015290565b6040518060a0016040528060001515815260200161027c61029c565b815260006020820181905260408201526060016102976102ba565b905290565b60405180602001604052806001906020820280368337509192915050565b604080516080810182526000808252606060208301819052928201529081016102975b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b8181101561032157602081850181015186830182015201610305565b81811115610333576000602083870101525b50601f01601f19169290920160200192915050565b805115158252600060208083015160e08286015261036960e08601826102fb565b9050604084015160140b604086015260608401516060860160005b60048110156103b15782516cffffffffffffffffffffffffff191682529184019190840190600101610384565b50919695505050505050565b60006020808352835160a0828501528051151560c08501528181015160e0850160005b600181101561040357825162ffffff1916825291840191908401906001016103e0565b50505060408101516001600160d81b0316610100850152606081015160010b6101208501526080015160a0610140850152610442610160850182610348565b918501516001600160b01b03198116604086015291905060408501519150601f198085830301606086015261047782846102fb565b925060608601519150610494608086018364ffffffffff19169052565b60808601519150808584030160a0860152506104b082826102fb565b9594505050505056fe4d6f6f20c3a9f09f9a8020c3a9f09f9a806f6f6ff09f9a804d20f09f9a8020204dc3a94d206f6f4dc3a96f6ff09f9a806f206ff09f9a806f4d4df09f9a80c3a96f4d6f6f6fc3a96f6f6f4d6f6f20c3a9f09f9a8020204d6f6f4d4dc3a96ff09f9a804d4d6f20f09f9a80c3a96fc3a94d6fc3a9f09f9a804dc3a96fc3a96f2020f09f9a80c3a96ff09f9a80c3a9f09f9a8020f09f9a80c3a94d6f4d6f4df09f9a80f09f9a806f6f6f4df09f9a804d4d204df09f9a80a2646970667358221220b3daccafe4d0c4d635d8ba799943335994ae9abb783e7ec48d3326098a248ec564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c3781cd5 {\n bool s_0;\n string s_1;\n int168 s_2;\n bytes19[4] s_3;\n }\n\n struct S_6a7a4daf {\n bool s_0;\n bytes29[1] s_1;\n uint216 s_2;\n int16 s_3;\n S_c3781cd5 s_4;\n }\n\n struct S_9bba254d {\n S_6a7a4daf s_0;\n bytes10 s_1;\n string s_2;\n bytes27 s_3;\n string s_4;\n }\n\n function test () public pure returns (S_9bba254d memory) {\n S_9bba254d memory r;\n {\n S_6a7a4daf memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n {\n bytes29[1] memory r_0_1;\n {\n bytes29 r_0_1_0 = bytes29(0xae958ccebde0d68309bb9920dbb03d2302038ada3e0695c6d245d29638);\n r_0_1[0] = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n {\n uint216 r_0_2 = 34588956925111867972330688092252384491979011332725286746642883025;\n r_0.s_2 = r_0_2;\n }\n {\n int16 r_0_3 = -17814;\n r_0.s_3 = r_0_3;\n }\n {\n S_c3781cd5 memory r_0_4;\n {\n bool r_0_4_0 = false;\n r_0_4.s_0 = r_0_4_0;\n }\n {\n string memory r_0_4_1 = unicode\"Moo é🚀🚀éoo\";\n r_0_4.s_1 = r_0_4_1;\n }\n {\n int168 r_0_4_2 = -95598922699718537229087676339091443499277188140232;\n r_0_4.s_2 = r_0_4_2;\n }\n {\n bytes19[4] memory r_0_4_3;\n {\n bytes19 r_0_4_3_0 = bytes19(0xa46da958ff075f4e5a3bf5748e9e6872faaaf4);\n r_0_4_3[0] = r_0_4_3_0;\n }\n {\n bytes19 r_0_4_3_1 = bytes19(0x07ae214229e513a61ddad364c7556f2d60fcea);\n r_0_4_3[1] = r_0_4_3_1;\n }\n {\n bytes19 r_0_4_3_2 = bytes19(0x82ba049dbf76bd4d679567a10de6ff2a60cf65);\n r_0_4_3[2] = r_0_4_3_2;\n }\n {\n bytes19 r_0_4_3_3 = bytes19(0x656c2200ed28c0e3ac2d6edc428e3e5119bcb3);\n r_0_4_3[3] = r_0_4_3_3;\n }\n r_0_4.s_3 = r_0_4_3;\n }\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n bytes10 r_1 = bytes10(0xc5e7fd75e1c3c6cac703);\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀 é🚀ooo🚀M 🚀 MéM ooMéoo🚀o o🚀oMM🚀éoMoooéooo\";\n r.s_2 = r_2;\n }\n {\n bytes27 r_3 = bytes27(0x5d5de0f9fef2fe364df173f77b5fbb6fbc631209f35bcb9b1bbefd);\n r.s_3 = r_3;\n }\n {\n string memory r_4 = unicode\"Moo é🚀 MooMMéo🚀MMo 🚀éoéMoé🚀Méoéo 🚀éo🚀é🚀 🚀éMoMoM🚀🚀oooM🚀MM M🚀\";\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0c5e7fd75e1c3c6cac7030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002605d5de0f9fef2fe364df173f77b5fbb6fbc631209f35bcb9b1bbefd000000000000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000000ae958ccebde0d68309bb9920dbb03d2302038ada3e0695c6d245d2963800000000000000005414c2bfcaf2109390a13161dad6d8866380b5137a51795f82a1d1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffba6a00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0ffffffffffffffffffffffbe96ac0bb675f5d6ee795c64834c3997ca4aa2f338a46da958ff075f4e5a3bf5748e9e6872faaaf40000000000000000000000000007ae214229e513a61ddad364c7556f2d60fcea0000000000000000000000000082ba049dbf76bd4d679567a10de6ff2a60cf6500000000000000000000000000656c2200ed28c0e3ac2d6edc428e3e5119bcb30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a80f09f9a80c3a96f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a8020c3a9f09f9a806f6f6ff09f9a804d20f09f9a8020204dc3a94d206f6f4dc3a96f6ff09f9a806f206ff09f9a806f4d4df09f9a80c3a96f4d6f6f6fc3a96f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006b4d6f6f20c3a9f09f9a8020204d6f6f4d4dc3a96ff09f9a804d4d6f20f09f9a80c3a96fc3a94d6fc3a9f09f9a804dc3a96fc3a96f2020f09f9a80c3a96ff09f9a80c3a9f09f9a8020f09f9a80c3a94d6f4d6f4df09f9a80f09f9a806f6f6f4df09f9a804d4d204df09f9a80000000000000000000000000000000000000000000" + }, + { + "name": "random-((int,(((bytes27,bytes14,address,bytes17)[1]),address,bytes7,address),uint192),string,int256,bool[3])", + "type": "((int,(((bytes27,bytes14,address,bytes17)[1]),address,bytes7,address),uint192),string,int256,bool[3])", + "value": [ + [ + "13173298113009821450810374662266444586753607818345582586203811312368175910257", + [ + [ + [ + [ + "0x3f103859ca758b60359a70c8a7bd17a83094e76b8053c591024372", + "0x2bb97a146f5758f9be8a021fb152", + "0x066eAE20Df43d1236543F91C3254Ebc7D378f75a", + "0x405b0d88bfc325d3ca6ea68acf6a7e20a7" + ] + ] + ], + "0xC18aB791e827b066Dcffb7aa06713C8d214abE4b", + "0x2d2228f2351ca6", + "0xFAc3EDAeFe4B1ad0449E4D90103395383BbAeAb2" + ], + "4339536122181906316510292365767347242736771185293621648556" + ], + "Moo é🚀ooooéoo🚀 Mééo", + "10269206329789991383076569419174094107080371696636548398341504340519374599689", + [true, false, false] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "13173298113009821450810374662266444586753607818345582586203811312368175910257" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x3f103859ca758b60359a70c8a7bd17a83094e76b8053c591024372" + }, + { + "type": "hexstring", + "value": "0x2bb97a146f5758f9be8a021fb152" + }, + { + "type": "address", + "value": "0x066eAE20Df43d1236543F91C3254Ebc7D378f75a" + }, + { + "type": "hexstring", + "value": "0x405b0d88bfc325d3ca6ea68acf6a7e20a7" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0xC18aB791e827b066Dcffb7aa06713C8d214abE4b" + }, + { + "type": "hexstring", + "value": "0x2d2228f2351ca6" + }, + { + "type": "address", + "value": "0xFAc3EDAeFe4B1ad0449E4D90103395383BbAeAb2" + } + ] + }, + { + "type": "number", + "value": "4339536122181906316510292365767347242736771185293621648556" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooooéoo🚀 Mééo" + }, + { + "type": "number", + "value": "10269206329789991383076569419174094107080371696636548398341504340519374599689" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506104e4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610384565b60405180910390f35b610056610211565b61005e610211565b610066610244565b7f1d1fd28fdb2caac6c9f35c91d9486e2f6b3e154c774be6dcad235c49678d8d71815261009161026b565b610099610299565b6100a16102a8565b604080516080810182527f3f103859ca758b60359a70c8a7bd17a83094e76b8053c591024372000000000081526d15dcbd0a37abac7cdf45010fd8a960911b60208083019190915273066eae20df43d1236543f91c3254ebc7d378f75a8284015270405b0d88bfc325d3ca6ea68acf6a7e20a760781b60608084019190915291845292845292845273c18ab791e827b066dcffb7aa06713c8d214abe4b8483015266169114791a8e5360c91b8482015273fac3edaefe4b1ad0449e4d90103395383bbaeab2928401929092528381019290925277b0fadf016af2774b575177867cb26cf1857e11579012dcac8382015291835281518083018352601d81527f4d6f6f20c3a9f09f9a806f6f6f6fc3a96f6ff09f9a80204dc3a9c3a96f00000081830152908301527f16b42a30cfb4c9d847a7ed3fd6a92e116de683e1c20b5d34ad3caaced81cb609908201526101f56102ee565b6001815260006020820181905260408201526060820152919050565b6040518060800160405280610224610244565b8152602001606081526020016000815260200161023f6102ee565b905290565b60405180606001604052806000815260200161025e61026b565b8152600060209091015290565b604051806080016040528061027e610299565b81526000602082018190526040820181905260609091015290565b604051806020016040528061023f5b60405180602001604052806001905b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816102b75790505090565b60405180606001604052806003906020820280368337509192915050565b6000815180845260005b8181101561033257602081850181015186830182015201610316565b81811115610344576000602083870101525b50601f01601f19169290920160200192915050565b8060005b600381101561037e578151151584526020938401939091019060010161035d565b50505050565b6020808252825180518383015280820151805151600093929190604090858288015b600182101561041a578251805164ffffffffff191682528781015171ffffffffffffffffffffffffffffffffffff191688830152848101516001600160a01b0316858301526060908101516effffffffffffffffffffffffffffff19169082015291860191600191909101906080016103a6565b505050838201516001600160a01b0390811660c0880152818301516001600160c81b03191660e0880152606090920151918216610100870152918201516001600160c01b03811661012087015291928601516101c0610140870152926104846101e087018561030c565b93508087015161016087015250505060608401516104a6610180850182610359565b50939250505056fea2646970667358221220aa2eab4e160707dc3885619a145f3190d50c155a6515a1b2d12827746704f61864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2d2dc890 {\n bytes27 s_0;\n bytes14 s_1;\n address s_2;\n bytes17 s_3;\n }\n\n struct S_43208241 {\n S_2d2dc890[1] s_0;\n }\n\n struct S_8e93bc67 {\n S_43208241 s_0;\n address s_1;\n bytes7 s_2;\n address s_3;\n }\n\n struct S_07e5082e {\n int256 s_0;\n S_8e93bc67 s_1;\n uint192 s_2;\n }\n\n struct S_ec36874c {\n S_07e5082e s_0;\n string s_1;\n int256 s_2;\n bool[3] s_3;\n }\n\n function test () public pure returns (S_ec36874c memory) {\n S_ec36874c memory r;\n {\n S_07e5082e memory r_0;\n {\n int r_0_0 = 13173298113009821450810374662266444586753607818345582586203811312368175910257;\n r_0.s_0 = r_0_0;\n }\n {\n S_8e93bc67 memory r_0_1;\n {\n S_43208241 memory r_0_1_0;\n {\n S_2d2dc890[1] memory r_0_1_0_0;\n {\n S_2d2dc890 memory r_0_1_0_0_0;\n {\n bytes27 r_0_1_0_0_0_0 = bytes27(0x3f103859ca758b60359a70c8a7bd17a83094e76b8053c591024372);\n r_0_1_0_0_0.s_0 = r_0_1_0_0_0_0;\n }\n {\n bytes14 r_0_1_0_0_0_1 = bytes14(0x2bb97a146f5758f9be8a021fb152);\n r_0_1_0_0_0.s_1 = r_0_1_0_0_0_1;\n }\n {\n address r_0_1_0_0_0_2 = 0x066eAE20Df43d1236543F91C3254Ebc7D378f75a;\n r_0_1_0_0_0.s_2 = r_0_1_0_0_0_2;\n }\n {\n bytes17 r_0_1_0_0_0_3 = bytes17(0x405b0d88bfc325d3ca6ea68acf6a7e20a7);\n r_0_1_0_0_0.s_3 = r_0_1_0_0_0_3;\n }\n r_0_1_0_0[0] = r_0_1_0_0_0;\n }\n r_0_1_0.s_0 = r_0_1_0_0;\n }\n r_0_1.s_0 = r_0_1_0;\n }\n {\n address r_0_1_1 = 0xC18aB791e827b066Dcffb7aa06713C8d214abE4b;\n r_0_1.s_1 = r_0_1_1;\n }\n {\n bytes7 r_0_1_2 = bytes7(0x2d2228f2351ca6);\n r_0_1.s_2 = r_0_1_2;\n }\n {\n address r_0_1_3 = 0xFAc3EDAeFe4B1ad0449E4D90103395383BbAeAb2;\n r_0_1.s_3 = r_0_1_3;\n }\n r_0.s_1 = r_0_1;\n }\n {\n uint192 r_0_2 = 4339536122181906316510292365767347242736771185293621648556;\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀ooooéoo🚀 Mééo\";\n r.s_1 = r_1;\n }\n {\n int256 r_2 = 10269206329789991383076569419174094107080371696636548398341504340519374599689;\n r.s_2 = r_2;\n }\n {\n bool[3] memory r_3;\n {\n bool r_3_0 = true;\n r_3[0] = r_3_0;\n }\n {\n bool r_3_1 = false;\n r_3[1] = r_3_1;\n }\n {\n bool r_3_2 = false;\n r_3[2] = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000201d1fd28fdb2caac6c9f35c91d9486e2f6b3e154c774be6dcad235c49678d8d713f103859ca758b60359a70c8a7bd17a83094e76b8053c59102437200000000002bb97a146f5758f9be8a021fb152000000000000000000000000000000000000000000000000000000000000066eae20df43d1236543f91c3254ebc7d378f75a405b0d88bfc325d3ca6ea68acf6a7e20a7000000000000000000000000000000000000000000000000000000c18ab791e827b066dcffb7aa06713c8d214abe4b2d2228f2351ca600000000000000000000000000000000000000000000000000000000000000000000000000fac3edaefe4b1ad0449e4d90103395383bbaeab20000000000000000b0fadf016af2774b575177867cb26cf1857e11579012dcac00000000000000000000000000000000000000000000000000000000000001c016b42a30cfb4c9d847a7ed3fd6a92e116de683e1c20b5d34ad3caaced81cb609000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a806f6f6f6fc3a96f6ff09f9a80204dc3a9c3a96f000000" + }, + { + "name": "random-(address,int80,(string,address[3][1],(bool,bytes5,bool,bytes28),uint240,uint88))[4][4]", + "type": "(address,int80,(string,address[3][1],(bool,bytes5,bool,bytes28),uint240,uint88))[4][4]", + "value": [ + [ + [ + "0xfe885b3641f37aBccC8b5B6D8C6a7dF555210767", + "-371954046979619113350646", + [ + "Moo é🚀ooM🚀é🚀 oooMéé🚀é 🚀🚀 MMMéooo oMo🚀é", + [ + [ + "0xbBF282f8688338465A94AC8599E02386b5cd22F2", + "0xDdF736BE8709AC99860430A984e96C6F8b391099", + "0xE7C38A0984540225CBf85498DB586c270A389EC7" + ] + ], + [ + false, + "0x77fa16afdd", + true, + "0x77f74f709eedb466b62cee3c0acaf238d221322940dd21c5e68c43cf" + ], + "1726008546681151260551673598736135016501958094094443998590598452689683472", + "10164057757303282681551155" + ] + ], + [ + "0x222F1924FEbd6b9A69733904ded8720404ef905f", + "317868839210587068255486", + [ + "Moo é🚀oMoé🚀🚀🚀oooM🚀", + [ + [ + "0xc0c95c9448bEAFA3596Ba222d777c3cDBAfB94AA", + "0xE239A942223A91CfA1f78670189FDFe6AE1Cd5fD", + "0x03b94B43284465fc157f981e2A6bEb912ff4740B" + ] + ], + [ + false, + "0x1fb2e65d72", + false, + "0x2bef0993e4b24a68b622b3d43d28857492be91a46f50b55cde50d593" + ], + "361129914365884532405488894426208442412880084923785456935277568178346674", + "272453771477002621586759820" + ] + ], + [ + "0x07592a1445307fcCA87b0ECB13fc26D016090f17", + "-573345633070781755699460", + [ + "Moo é🚀éo🚀ooMéoM🚀oM Moé o🚀Mé 🚀ooé🚀Moooo", + [ + [ + "0x74CeFAEF109F3b0FbcD654086ed14afF1c2d4aCB", + "0xE996Aaf96C73c17114D9b3B96F0020B7FaF66665", + "0xFE044366F8D27ea8951F589bF3f098de555712E7" + ] + ], + [ + true, + "0xd98b533a04", + false, + "0x7361f5713429ee5b3c5aa0f95a51f20362d03de73af5d24fdd1ba3a9" + ], + "113175224569512132013602103585824308313673745181417885159929491955838294", + "228042630791797743924668015" + ] + ], + [ + "0xdEd3728DE4B0b5EF2e877365aB81522f4be28d0E", + "78552340874942351714788", + [ + "Moo é🚀oé 🚀🚀oééoooMéoé🚀 é🚀oéo🚀", + [ + [ + "0x27D6FeA2a818863362dC1CB5704448D02f04A776", + "0xa516255263F68dc224e67E5D3750Ab8C4DF974f4", + "0xAaA49B36544055460f23B02B2241c0Eb6E1D2135" + ] + ], + [ + true, + "0x6181aee8fd", + false, + "0x5bca6ff666305ba99db6c0a4c94ca9c20bdd4c1b726d9fc5abe07838" + ], + "757119636008924985821085062009745352205806977222282372812821415663386768", + "142356003821432769055146607" + ] + ] + ], + [ + [ + "0x50A1bD48978827275f23797f3CA96897ffA8ED76", + "412470653691313394787764", + [ + "Moo é🚀éoMMéo🚀 MMoééMM éo 🚀oéo🚀🚀 M", + [ + [ + "0x2225F93CFA3ff596CfB3205ebf32570ee5CFCE26", + "0x850E5bC3309820A886aA850a4ee9586f6B095F8e", + "0x8d97a2ab51CCB4Bc4FCBb5273a7E0bb7FA4B17bc" + ] + ], + [ + true, + "0x7bd96891eb", + true, + "0xca861b294f1d32a2806431f122a97875f12176f30437df73046fad89" + ], + "499852171895052400262391608960276181971313109864263121723067631577566061", + "298830116619038927014612371" + ] + ], + [ + "0x00541Afc9D96642D0221F314859e27e98FeD271F", + "-487575037523970649496700", + [ + "Moo é🚀", + [ + [ + "0x91b965e04AF757186C2e753709ac29A352F01333", + "0xbDE131e4171c055e6e6251FFEC1F9C3d308f812c", + "0x5DD1693Be9bE0115a90B75B64D928E352853C472" + ] + ], + [ + true, + "0x34d17ee2b8", + false, + "0x25f9af3d7cf62f47d42c83c8f2aa9e4aa0ff6d9a8068533e7fdc0b8f" + ], + "452851383571058179006716562279806002331361802630414285486007432088225249", + "51270756966335915626570875" + ] + ], + [ + "0x3A10d67f1060852d0b34fb0561bB419649Ed91Ea", + "600129248375862126655075", + [ + "Moo é🚀o🚀 Mooéé🚀🚀🚀éooéo🚀oéo 🚀 Mo o 🚀é 🚀MooMé é🚀MMoo", + [ + [ + "0xb97cF4099ceE515bF91Dede77BF18be293719Df5", + "0x95faB6D50E7c8abdE4e7e4d34aBceD79c1e7eD9D", + "0xEB69636054cfEFc5A54490c800E9ECfe3f9DF898" + ] + ], + [ + false, + "0x852a89c094", + false, + "0xb21d045becf473d467f22c9a8758ada41ca82290b26329aaeefe57ce" + ], + "795039194579847259850917773229897630644160991993442051064403825866683146", + "167584524349078587361670595" + ] + ], + [ + "0x38A0def46C720b68f746B7c4e7d36BAd2d97BaBf", + "-571377777619362448405324", + [ + "Moo é🚀o", + [ + [ + "0xc970B10C2D75Fb18b349A48CCC3a40A7054b413b", + "0xD752358f34733c7B679d3edBb61DA3430f24a057", + "0xF139768178070f7F95E5C90898Bba3a1152a848A" + ] + ], + [ + false, + "0x88a7eeff6e", + true, + "0x6692b9ded3351da70590efd6e126d11e54f895ea894498c3c0b102c6" + ], + "265316384866407637405333897426040408612786893731115282179285144603292617", + "26776131584309205161772383" + ] + ] + ], + [ + [ + "0x6A22c415a20E4842b9A0f2244860401C384F4526", + "377198327110170995321985", + [ + "Moo é🚀🚀oéoo🚀ooMM🚀 M🚀oM🚀oMé🚀🚀 éMooMé 🚀🚀🚀Mooé", + [ + [ + "0x4b0a7A830EF062cb70A07183b95d0573ACFF908d", + "0xAb4269215db5825eBc8fFbB51BF8C7d635976cba", + "0x9493F94df0172Cb57f2a743425bAAA61d2E36D5C" + ] + ], + [ + true, + "0x7f60ddd631", + true, + "0xaa7fb16a4c2d9e8a93a2809e83e661ea2d90e92ee4dadd80f2cf1f27" + ], + "421122003415530036370691533604691027973883054084228617991336821478546513", + "67592121420163781572907310" + ] + ], + [ + "0x539225fC1b1feEd47a887b7F28bbC39B00f681f3", + "325400860414691026941500", + [ + "Moo é🚀éMMMM", + [ + [ + "0xdFb2b5C84dD8cf1BB9b285359F95361443af7BFA", + "0xD258E63182CFF58744DE38c18442d65D8454d47c", + "0x2bD9124A4a497F9203c535Dae11ab8B73793a50C" + ] + ], + [ + false, + "0xf6487e5b08", + false, + "0xde1f0f573dad198c53280b8b3c60a60927611e96ea2e9034bb05d818" + ], + "654848288828254932964363218520914018951639448609035557111564712228759821", + "56131956284168133665082115" + ] + ], + [ + "0xCE191FF0e845C96033b9A1a641c0Db8a5E5cF164", + "-579263166506302098927964", + [ + "Moo é🚀Mo🚀oo 🚀🚀 é o🚀 oé🚀éoo é🚀🚀🚀oMé 🚀Mo 🚀é Mé🚀 oéoéMM🚀MM🚀 MMMé", + [ + [ + "0xB24E74D85c799edab28711e7baEd44A9b479B2A2", + "0x79E0024b4E63751f64B86778A8c3aba9a2e818b6", + "0x62Ab7aC1AeD57C29796C1376b8B3b836d78A07D5" + ] + ], + [ + true, + "0x70be09c29c", + false, + "0xd9d8222df6b73dab031a36de7b577b8d6e0119c7984b8e704592c632" + ], + "339979713229544680630608818877017593993309940551175945598554611544677637", + "75947959788314645638720418" + ] + ], + [ + "0x3AC86AfC57D1782d32Ec61A2A7bcD5779Cb694E0", + "-142181656589653134506668", + [ + "Moo é🚀éoooMo🚀MMMoMMMMééMMoMo🚀éM", + [ + [ + "0x1FE6519189F2123e53fB123029dFbe1fAA3d53A8", + "0x9B9e5dB619a9B045E3a515415144EA2365f3709f", + "0x04759E42c9371b5BfbE6d0ac39b3087DcCfa40c9" + ] + ], + [ + false, + "0xee9cec350a", + false, + "0x4a75ff596e91fc5743735c5abc6d63f173a28e8a02c64d0783b123a0" + ], + "551128815124698752723409326612528100683782846558464748832208201796375295", + "95150692173394116586863979" + ] + ] + ], + [ + [ + "0x030573313f5577C816A48612D61e64Af101f297A", + "439680220069889117273100", + [ + "Moo é🚀o oM ooM 🚀🚀 M🚀M ooM🚀🚀éoMéoéM🚀o", + [ + [ + "0x3BE9e18DD4b0e421af2dDef85b25eE5E26026433", + "0x55b698d4Ea077625463e30D16690AB02bCFD85b1", + "0x6561a1e5e70Ec491c65018B255354701A3284F3a" + ] + ], + [ + false, + "0x55bf2a1829", + false, + "0x0db469339f168c06d384d0f72bee3ebc4421186ada40d85a4b040798" + ], + "153538234430212797863930183779204420626295318668450215694804729607097992", + "182728775794337843018604238" + ] + ], + [ + "0x08dFaA7fdA0402a3970A052222b30D27000E70AC", + "445650647259072783925180", + [ + "Moo é🚀", + [ + [ + "0x3500f521Ae038594932F058606d5a7a33D079ABB", + "0x9927225F4FB72e319535F65eC05b6bC350aB4cfD", + "0x7cF21513497E8364237214B81336dEe3123C6181" + ] + ], + [ + true, + "0x1afc93828b", + false, + "0x4da909d70b05044a5653cb97b58ff15506fc6a0be68801c29cdbb232" + ], + "1215939105339581641879978693481822744304929761923021186061041665205879522", + "210046568862336085767248583" + ] + ], + [ + "0x4643D27B1eE2a853BD499C83f292444B379eb726", + "156322560523113864827463", + [ + "Moo é🚀 o MoMoéoo🚀éoé é é ooo🚀 🚀M🚀é", + [ + [ + "0x195c04C57b529Bd31FDaf043da8AFbEb77840D5A", + "0xAbC28aef7953cb91C54801e5Cb40358819776BEa", + "0x780f327993C8396A91b259251207EC7eFDB5AfBA" + ] + ], + [ + false, + "0x6ff5946d79", + false, + "0x65f1230ab880ca3722c79c3a6dd87540be344da93f527316e541008a" + ], + "1551278232610995841306329861014276702152899602279337454019598562446887001", + "78720716921216444131233280" + ] + ], + [ + "0xc92A68aBf4fd45B8F7de18bD8cB2fA959e473C07", + "172038106178585222449582", + [ + "Moo é🚀o 🚀oM 🚀🚀MMéééM🚀éMoM🚀oo", + [ + [ + "0xa7C37FEbfBa5DA50d7330fc88a0292E3b7511fF6", + "0x5c8C7eFE2642658235c996A3691b52781670741F", + "0x6D364AF9c7abDDC0b91F4131a0289C9fD35a02b3" + ] + ], + [ + true, + "0x4f9ffc5366", + false, + "0x2845fff610f25fad7d5ef76d3e3141c2be16b5280d5ea7992c8dafd8" + ], + "474722090577515673307964402621661487521855441300047619523278325550952753", + "89029201664642928626205282" + ] + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xfe885b3641f37aBccC8b5B6D8C6a7dF555210767" + }, + { + "type": "number", + "value": "-371954046979619113350646" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooM🚀é🚀 oooMéé🚀é 🚀🚀 MMMéooo oMo🚀é" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xbBF282f8688338465A94AC8599E02386b5cd22F2" + }, + { + "type": "address", + "value": "0xDdF736BE8709AC99860430A984e96C6F8b391099" + }, + { + "type": "address", + "value": "0xE7C38A0984540225CBf85498DB586c270A389EC7" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x77fa16afdd" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x77f74f709eedb466b62cee3c0acaf238d221322940dd21c5e68c43cf" + } + ] + }, + { + "type": "number", + "value": "1726008546681151260551673598736135016501958094094443998590598452689683472" + }, + { + "type": "number", + "value": "10164057757303282681551155" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x222F1924FEbd6b9A69733904ded8720404ef905f" + }, + { + "type": "number", + "value": "317868839210587068255486" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMoé🚀🚀🚀oooM🚀" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xc0c95c9448bEAFA3596Ba222d777c3cDBAfB94AA" + }, + { + "type": "address", + "value": "0xE239A942223A91CfA1f78670189FDFe6AE1Cd5fD" + }, + { + "type": "address", + "value": "0x03b94B43284465fc157f981e2A6bEb912ff4740B" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x1fb2e65d72" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x2bef0993e4b24a68b622b3d43d28857492be91a46f50b55cde50d593" + } + ] + }, + { + "type": "number", + "value": "361129914365884532405488894426208442412880084923785456935277568178346674" + }, + { + "type": "number", + "value": "272453771477002621586759820" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x07592a1445307fcCA87b0ECB13fc26D016090f17" + }, + { + "type": "number", + "value": "-573345633070781755699460" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éo🚀ooMéoM🚀oM Moé o🚀Mé 🚀ooé🚀Moooo" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x74CeFAEF109F3b0FbcD654086ed14afF1c2d4aCB" + }, + { + "type": "address", + "value": "0xE996Aaf96C73c17114D9b3B96F0020B7FaF66665" + }, + { + "type": "address", + "value": "0xFE044366F8D27ea8951F589bF3f098de555712E7" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xd98b533a04" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x7361f5713429ee5b3c5aa0f95a51f20362d03de73af5d24fdd1ba3a9" + } + ] + }, + { + "type": "number", + "value": "113175224569512132013602103585824308313673745181417885159929491955838294" + }, + { + "type": "number", + "value": "228042630791797743924668015" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xdEd3728DE4B0b5EF2e877365aB81522f4be28d0E" + }, + { + "type": "number", + "value": "78552340874942351714788" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oé 🚀🚀oééoooMéoé🚀 é🚀oéo🚀" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x27D6FeA2a818863362dC1CB5704448D02f04A776" + }, + { + "type": "address", + "value": "0xa516255263F68dc224e67E5D3750Ab8C4DF974f4" + }, + { + "type": "address", + "value": "0xAaA49B36544055460f23B02B2241c0Eb6E1D2135" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x6181aee8fd" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x5bca6ff666305ba99db6c0a4c94ca9c20bdd4c1b726d9fc5abe07838" + } + ] + }, + { + "type": "number", + "value": "757119636008924985821085062009745352205806977222282372812821415663386768" + }, + { + "type": "number", + "value": "142356003821432769055146607" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x50A1bD48978827275f23797f3CA96897ffA8ED76" + }, + { + "type": "number", + "value": "412470653691313394787764" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoMMéo🚀 MMoééMM éo 🚀oéo🚀🚀 M" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x2225F93CFA3ff596CfB3205ebf32570ee5CFCE26" + }, + { + "type": "address", + "value": "0x850E5bC3309820A886aA850a4ee9586f6B095F8e" + }, + { + "type": "address", + "value": "0x8d97a2ab51CCB4Bc4FCBb5273a7E0bb7FA4B17bc" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x7bd96891eb" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xca861b294f1d32a2806431f122a97875f12176f30437df73046fad89" + } + ] + }, + { + "type": "number", + "value": "499852171895052400262391608960276181971313109864263121723067631577566061" + }, + { + "type": "number", + "value": "298830116619038927014612371" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x00541Afc9D96642D0221F314859e27e98FeD271F" + }, + { + "type": "number", + "value": "-487575037523970649496700" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x91b965e04AF757186C2e753709ac29A352F01333" + }, + { + "type": "address", + "value": "0xbDE131e4171c055e6e6251FFEC1F9C3d308f812c" + }, + { + "type": "address", + "value": "0x5DD1693Be9bE0115a90B75B64D928E352853C472" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x34d17ee2b8" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x25f9af3d7cf62f47d42c83c8f2aa9e4aa0ff6d9a8068533e7fdc0b8f" + } + ] + }, + { + "type": "number", + "value": "452851383571058179006716562279806002331361802630414285486007432088225249" + }, + { + "type": "number", + "value": "51270756966335915626570875" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x3A10d67f1060852d0b34fb0561bB419649Ed91Ea" + }, + { + "type": "number", + "value": "600129248375862126655075" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀 Mooéé🚀🚀🚀éooéo🚀oéo 🚀 Mo o 🚀é 🚀MooMé é🚀MMoo" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xb97cF4099ceE515bF91Dede77BF18be293719Df5" + }, + { + "type": "address", + "value": "0x95faB6D50E7c8abdE4e7e4d34aBceD79c1e7eD9D" + }, + { + "type": "address", + "value": "0xEB69636054cfEFc5A54490c800E9ECfe3f9DF898" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x852a89c094" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xb21d045becf473d467f22c9a8758ada41ca82290b26329aaeefe57ce" + } + ] + }, + { + "type": "number", + "value": "795039194579847259850917773229897630644160991993442051064403825866683146" + }, + { + "type": "number", + "value": "167584524349078587361670595" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x38A0def46C720b68f746B7c4e7d36BAd2d97BaBf" + }, + { + "type": "number", + "value": "-571377777619362448405324" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xc970B10C2D75Fb18b349A48CCC3a40A7054b413b" + }, + { + "type": "address", + "value": "0xD752358f34733c7B679d3edBb61DA3430f24a057" + }, + { + "type": "address", + "value": "0xF139768178070f7F95E5C90898Bba3a1152a848A" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x88a7eeff6e" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x6692b9ded3351da70590efd6e126d11e54f895ea894498c3c0b102c6" + } + ] + }, + { + "type": "number", + "value": "265316384866407637405333897426040408612786893731115282179285144603292617" + }, + { + "type": "number", + "value": "26776131584309205161772383" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6A22c415a20E4842b9A0f2244860401C384F4526" + }, + { + "type": "number", + "value": "377198327110170995321985" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oéoo🚀ooMM🚀 M🚀oM🚀oMé🚀🚀 éMooMé 🚀🚀🚀Mooé" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x4b0a7A830EF062cb70A07183b95d0573ACFF908d" + }, + { + "type": "address", + "value": "0xAb4269215db5825eBc8fFbB51BF8C7d635976cba" + }, + { + "type": "address", + "value": "0x9493F94df0172Cb57f2a743425bAAA61d2E36D5C" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x7f60ddd631" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xaa7fb16a4c2d9e8a93a2809e83e661ea2d90e92ee4dadd80f2cf1f27" + } + ] + }, + { + "type": "number", + "value": "421122003415530036370691533604691027973883054084228617991336821478546513" + }, + { + "type": "number", + "value": "67592121420163781572907310" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x539225fC1b1feEd47a887b7F28bbC39B00f681f3" + }, + { + "type": "number", + "value": "325400860414691026941500" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éMMMM" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xdFb2b5C84dD8cf1BB9b285359F95361443af7BFA" + }, + { + "type": "address", + "value": "0xD258E63182CFF58744DE38c18442d65D8454d47c" + }, + { + "type": "address", + "value": "0x2bD9124A4a497F9203c535Dae11ab8B73793a50C" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xf6487e5b08" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xde1f0f573dad198c53280b8b3c60a60927611e96ea2e9034bb05d818" + } + ] + }, + { + "type": "number", + "value": "654848288828254932964363218520914018951639448609035557111564712228759821" + }, + { + "type": "number", + "value": "56131956284168133665082115" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xCE191FF0e845C96033b9A1a641c0Db8a5E5cF164" + }, + { + "type": "number", + "value": "-579263166506302098927964" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mo🚀oo 🚀🚀 é o🚀 oé🚀éoo é🚀🚀🚀oMé 🚀Mo 🚀é Mé🚀 oéoéMM🚀MM🚀 MMMé" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xB24E74D85c799edab28711e7baEd44A9b479B2A2" + }, + { + "type": "address", + "value": "0x79E0024b4E63751f64B86778A8c3aba9a2e818b6" + }, + { + "type": "address", + "value": "0x62Ab7aC1AeD57C29796C1376b8B3b836d78A07D5" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x70be09c29c" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xd9d8222df6b73dab031a36de7b577b8d6e0119c7984b8e704592c632" + } + ] + }, + { + "type": "number", + "value": "339979713229544680630608818877017593993309940551175945598554611544677637" + }, + { + "type": "number", + "value": "75947959788314645638720418" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x3AC86AfC57D1782d32Ec61A2A7bcD5779Cb694E0" + }, + { + "type": "number", + "value": "-142181656589653134506668" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoooMo🚀MMMoMMMMééMMoMo🚀éM" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x1FE6519189F2123e53fB123029dFbe1fAA3d53A8" + }, + { + "type": "address", + "value": "0x9B9e5dB619a9B045E3a515415144EA2365f3709f" + }, + { + "type": "address", + "value": "0x04759E42c9371b5BfbE6d0ac39b3087DcCfa40c9" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xee9cec350a" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x4a75ff596e91fc5743735c5abc6d63f173a28e8a02c64d0783b123a0" + } + ] + }, + { + "type": "number", + "value": "551128815124698752723409326612528100683782846558464748832208201796375295" + }, + { + "type": "number", + "value": "95150692173394116586863979" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x030573313f5577C816A48612D61e64Af101f297A" + }, + { + "type": "number", + "value": "439680220069889117273100" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o oM ooM 🚀🚀 M🚀M ooM🚀🚀éoMéoéM🚀o" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x3BE9e18DD4b0e421af2dDef85b25eE5E26026433" + }, + { + "type": "address", + "value": "0x55b698d4Ea077625463e30D16690AB02bCFD85b1" + }, + { + "type": "address", + "value": "0x6561a1e5e70Ec491c65018B255354701A3284F3a" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x55bf2a1829" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x0db469339f168c06d384d0f72bee3ebc4421186ada40d85a4b040798" + } + ] + }, + { + "type": "number", + "value": "153538234430212797863930183779204420626295318668450215694804729607097992" + }, + { + "type": "number", + "value": "182728775794337843018604238" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x08dFaA7fdA0402a3970A052222b30D27000E70AC" + }, + { + "type": "number", + "value": "445650647259072783925180" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x3500f521Ae038594932F058606d5a7a33D079ABB" + }, + { + "type": "address", + "value": "0x9927225F4FB72e319535F65eC05b6bC350aB4cfD" + }, + { + "type": "address", + "value": "0x7cF21513497E8364237214B81336dEe3123C6181" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x1afc93828b" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x4da909d70b05044a5653cb97b58ff15506fc6a0be68801c29cdbb232" + } + ] + }, + { + "type": "number", + "value": "1215939105339581641879978693481822744304929761923021186061041665205879522" + }, + { + "type": "number", + "value": "210046568862336085767248583" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x4643D27B1eE2a853BD499C83f292444B379eb726" + }, + { + "type": "number", + "value": "156322560523113864827463" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 o MoMoéoo🚀éoé é é ooo🚀 🚀M🚀é" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x195c04C57b529Bd31FDaf043da8AFbEb77840D5A" + }, + { + "type": "address", + "value": "0xAbC28aef7953cb91C54801e5Cb40358819776BEa" + }, + { + "type": "address", + "value": "0x780f327993C8396A91b259251207EC7eFDB5AfBA" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x6ff5946d79" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x65f1230ab880ca3722c79c3a6dd87540be344da93f527316e541008a" + } + ] + }, + { + "type": "number", + "value": "1551278232610995841306329861014276702152899602279337454019598562446887001" + }, + { + "type": "number", + "value": "78720716921216444131233280" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xc92A68aBf4fd45B8F7de18bD8cB2fA959e473C07" + }, + { + "type": "number", + "value": "172038106178585222449582" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o 🚀oM 🚀🚀MMéééM🚀éMoM🚀oo" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xa7C37FEbfBa5DA50d7330fc88a0292E3b7511fF6" + }, + { + "type": "address", + "value": "0x5c8C7eFE2642658235c996A3691b52781670741F" + }, + { + "type": "address", + "value": "0x6D364AF9c7abDDC0b91F4131a0289C9fD35a02b3" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x4f9ffc5366" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x2845fff610f25fad7d5ef76d3e3141c2be16b5280d5ea7992c8dafd8" + } + ] + }, + { + "type": "number", + "value": "474722090577515673307964402621661487521855441300047619523278325550952753" + }, + { + "type": "number", + "value": "89029201664642928626205282" + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50611be5806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190611739565b60405180910390f35b6100566115ad565b61005e6115ad565b6100666115da565b61006e611607565b73fe885b3641f37abccc8b5b6d8c6a7df5552107678152694ec3ab5696f6617735f519602082015261009e61162b565b6000604051806080016040528060428152602001611a0d604291398252506100c4611666565b6100cc611693565b73bbf282f8688338465a94ac8599e02386b5cd22f2815273ddf736be8709ac99860430a984e96c6f8b39109960208083019190915273e7c38a0984540225cbf85498db586c270a389ec760408301529082528201526101296116b1565b600081526477fa16afdd60d81b602082015260016040808301919091527f77f74f709eedb466b62cee3c0acaf238d221322940dd21c5e68c43cf00000000606080840191909152838201929092527dfa153715b3922c53c3e2a7598a2496cb4427c3ba6017de66d13c7e2ec410918301919091526a086852acd27d5ded3c9933608083015282015281526101bb611607565b73222f1924febd6b9a69733904ded8720404ef905f815269434fb44d20bd61234cfe60208201526101ea61162b565b600060405180606001604052806023815260200161197760239139825250610210611666565b610218611693565b73c0c95c9448beafa3596ba222d777c3cdbafb94aa815273e239a942223a91cfa1f78670189fdfe6ae1cd5fd6020808301919091527303b94b43284465fc157f981e2a6beb912ff4740b60408301529082528201526102756116b1565b6000808252640fd9732eb960d91b60208301526040808301919091527f2bef0993e4b24a68b622b3d43d28857492be91a46f50b55cde50d59300000000606080840191909152838201929092527d34530d911f28950da7e1a7006e9078092281217591a7102c6d739f695ab2918301919091526ae15e548bff220a8be7e08c60808301528201528082600160200201525061030e611607565b7307592a1445307fcca87b0ecb13fc26d016090f17815269796921094a857a1e310319602082015261033e61162b565b60006040518060600160405280603e8152602001611a4f603e9139825250610364611666565b61036c611693565b7374cefaef109f3b0fbcd654086ed14aff1c2d4acb815273e996aaf96c73c17114d9b3b96f0020b7faf6666560208083019190915273fe044366f8d27ea8951f589bf3f098de555712e760408301529082528201526103c96116b1565b60018152643662d4ce8160da1b602082015260006040808301919091527f7361f5713429ee5b3c5aa0f95a51f20362d03de73af5d24fdd1ba3a900000000606080840191909152838201929092527d1065e7031524dae7571a7a7e286b74198f16cf022e02f801e1f61976ed56918301919091526abca1e7c943ac1236ede66f608083015282810191909152820152610460611607565b73ded3728de4b0b5ef2e877365ab81522f4be28d0e81526910a254b7ed9f0014a9e4602082015261048f61162b565b6000604051806060016040528060378152602001611940603791398252506104b5611666565b6104bd611693565b7327d6fea2a818863362dc1cb5704448d02f04a776815273a516255263f68dc224e67e5d3750ab8c4df974f460208083019190915273aaa49b36544055460f23b02b2241c0eb6e1d2135604083015290825282015261051a6116b1565b60018152646181aee8fd60d81b602082015260006040808301919091527f5bca6ff666305ba99db6c0a4c94ca9c20bdd4c1b726d9fc5abe0783800000000606080840191909152838201929092527d6db320cb9d387e6ce3608cba557adf2847267593adf231d0eb5662024090838301526a75c10e6e33c7d43111c26f608084015283019190915282015281526105af6115da565b6105b7611607565b7350a1bd48978827275f23797f3ca96897ffa8ed76815269575814357910dabfa5b460208201526105e661162b565b6000604051806060016040528060388152602001611adf6038913982525061060c611666565b610614611693565b732225f93cfa3ff596cfb3205ebf32570ee5cfce26815273850e5bc3309820a886aa850a4ee9586f6b095f8e602080830191909152738d97a2ab51ccb4bc4fcbb5273a7e0bb7fa4b17bc60408301529082528201526106716116b1565b6001808252647bd96891eb60d81b60208301526040808301919091527fca861b294f1d32a2806431f122a97875f12176f30437df73046fad8900000000606080840191909152838201929092527d486c8c293d7f9b9998bada26823adb5c84d070cb5fa57048e1f44d678b6d918301919091526af72fbd1506022ce0e84d9360808301528201528152610702611607565b72541afc9d96642d0221f314859e27e98fed271f815269673f7ee940c9b91c1c7b19602082015261073161162b565b60408051808201909152600a8152689adede418753e13f3560b71b6020820152815261075b611666565b610763611693565b7391b965e04af757186c2e753709ac29a352f01333815273bde131e4171c055e6e6251ffec1f9c3d308f812c602080830191909152735dd1693be9be0115a90b75b64d928e352853c47260408301529082528201526107c06116b1565b6001815264069a2fdc5760db1b60208083019190915260006040808401919091527f25f9af3d7cf62f47d42c83c8f2aa9e4aa0ff6d9a8068533e7fdc0b8f00000000606080850191909152848201939093527d419d30fdd0533a4157fc08d7f70812e79c41e443cd42b52fa729e2e585e1928401929092526a2a69014decc1f76bafa47b60808401529083019190915282015261085b611607565b733a10d67f1060852d0b34fb0561bb419649ed91ea8152697f15125dc0d0f93b3663602082015261088a61162b565b60006040518060800160405280605a81526020016118a7605a91398252506108b0611666565b6108b8611693565b73b97cf4099cee515bf91dede77bf18be293719df581527395fab6d50e7c8abde4e7e4d34abced79c1e7ed9d60208083019190915273eb69636054cfefc5a54490c800e9ecfe3f9df89860408301529082528201526109156116b1565b600080825264214aa2702560da1b60208301526040808301919091527fb21d045becf473d467f22c9a8758ada41ca82290b26329aaeefe57ce00000000606080840191909152838201929092527d7331a4885ce1724d6312d79093e2c80015f2a4384acf342ee1508d21b30a918301919091526a8a9f6744ca3f42b31335c36080830152828101919091528201526109ab611607565b7338a0def46c720b68f746b7c4e7d36bad2d97babf81526978fe738e4f99be57f34b1960208201526109db61162b565b60408051808201909152600b81526a4d6f6f20c3a9f09f9a806f60a81b60208201528152610a07611666565b610a0f611693565b73c970b10c2d75fb18b349a48ccc3a40a7054b413b815273d752358f34733c7b679d3edbb61da3430f24a05760208083019190915273f139768178070f7f95e5c90898bba3a1152a848a6040830152908252820152610a6c6116b1565b60008152644453f77fb760d91b60208083019190915260016040808401919091527f6692b9ded3351da70590efd6e126d11e54f895ea894498c3c0b102c600000000606080850191909152848201939093527d267121b4e10ddbb391e1d1f6bc6be92602e23af63a948cc9ee4d869d73c9848401526a1626110070effc2bd4855f6080850152840192909252830191909152820152610b096115da565b610b11611607565b736a22c415a20e4842b9a0f2244860401c384f45268152694fdff658584ff98fec816020820152610b4061162b565b6000604051806080016040528060528152602001611a8d60529139825250610b66611666565b610b6e611693565b734b0a7a830ef062cb70a07183b95d0573acff908d815273ab4269215db5825ebc8ffbb51bf8c7d635976cba602080830191909152739493f94df0172cb57f2a743425baaa61d2e36d5c6040830152908252820152610bcb6116b1565b6001808252647f60ddd63160d81b60208301526040808301919091527faa7fb16a4c2d9e8a93a2809e83e661ea2d90e92ee4dadd80f2cf1f2700000000606080840191909152838201929092527d3d0448833dd562543d7e28898b07f9e4e1028687dc3581794bcd73825c51918301919091526a37e9303e8c8f69c767512e60808301528201528152610c5c611607565b73539225fc1b1feed47a887b7f28bbc39b00f681f381526944e80417e3837f90363c6020820152610c8b61162b565b60408051808201909152601081526f4d6f6f20c3a9f09f9a80c3a94d4d4d4d60801b60208201528152610cbc611666565b610cc4611693565b73dfb2b5c84dd8cf1bb9b285359f95361443af7bfa815273d258e63182cff58744de38c18442d65d8454d47c602080830191909152732bd9124a4a497f9203c535dae11ab8b73793a50c6040830152908252820152610d216116b1565b6000808252641ec90fcb6160db1b60208301526040808301919091527fde1f0f573dad198c53280b8b3c60a60927611e96ea2e9034bb05d81800000000606080840191909152838201929092527d5ee1ac4a2df2132c171c7ecb1e16068ea37abea60e34230800522751290d918301919091526a2e6e67728c988ab4e7cb03608083015282015280826001602002015250610dba611607565b73ce191ff0e845c96033b9a1a641c0db8a5e5cf1648152697aa9eb4f45b0f914715b196020820152610dea61162b565b60006040518060a001604052806073815260200161199a60739139825250610e10611666565b610e18611693565b73b24e74d85c799edab28711e7baed44a9b479b2a281527379e0024b4e63751f64b86778a8c3aba9a2e818b66020808301919091527362ab7ac1aed57c29796c1376b8b3b836d78a07d56040830152908252820152610e756116b1565b60018152641c2f8270a760da1b602082015260006040808301919091527fd9d8222df6b73dab031a36de7b577b8d6e0119c7984b8e704592c63200000000606080840191909152838201929092527d31428c662f07d72505957e96792c27a8ead8585110681fd17ce2364edd05918301919091526a3ed29b2660ef931d04aba2608083015282810191909152820152610f0c611607565b733ac86afc57d1782d32ec61a2a7bcd5779cb694e08152691e1baedc3d9664bb7aab196020820152610f3c61162b565b60006040518060600160405280602d8152602001611b83602d9139825250610f62611666565b610f6a611693565b731fe6519189f2123e53fb123029dfbe1faa3d53a88152739b9e5db619a9b045e3a515415144ea2365f3709f6020808301919091527304759e42c9371b5bfbe6d0ac39b3087dccfa40c96040830152908252820152610fc76116b1565b600080825264774e761a8560d91b60208301526040808301919091527f4a75ff596e91fc5743735c5abc6d63f173a28e8a02c64d0783b123a000000000606080840191909152838201929092527d4fda81002b0d07d3ed3c15ce75d89171783c7bc63970f51edb3cff6d52ff838301526a4eb4f15bbfc0c7705d7d6b6080840152838101929092528301919091528201526110606115da565b611068611607565b73030573313f5577c816a48612d61e64af101f297a8152695d1b1ccc23eb54983c0c602082015261109761162b565b60006040518060600160405280603f8152602001611901603f91398252506110bd611666565b6110c5611693565b733be9e18dd4b0e421af2ddef85b25ee5e2602643381527355b698d4ea077625463e30d16690ab02bcfd85b1602080830191909152736561a1e5e70ec491c65018b255354701a3284f3a60408301529082528201526111226116b1565b60008082526455bf2a182960d81b60208301526040808301919091527f0db469339f168c06d384d0f72bee3ebc4421186ada40d85a4b04079800000000606080840191909152838201929092527d163f0cb4e38104e40ba5882a458e9b7b6fb7d8b35cf4a32337475eba0e88918301919091526a972652c8db039091821ece608083015282015281526111b3611607565b7308dfaa7fda0402a3970a052222b30d27000e70ac8152695e5ec51e7bcd86f73fbc60208201526111e261162b565b60408051808201909152600a8152689adede418753e13f3560b71b6020820152815261120c611666565b611214611693565b733500f521ae038594932f058606d5a7a33d079abb8152739927225f4fb72e319535f65ec05b6bc350ab4cfd602080830191909152737cf21513497e8364237214b81336dee3123c618160408301529082528201526112716116b1565b60018152641afc93828b60d81b60208083019190915260006040808401919091527f4da909d70b05044a5653cb97b58ff15506fc6a0be68801c29cdbb23200000000606080850191909152848201939093527db02db02643b3d51ef0fe6151a433b0bb7857c02e13d97f76f31877e042e2928401929092526aadbf17506e55315dc85ac760808401529083019190915282015261130c611607565b734643d27b1ee2a853bd499c83f292444b379eb726815269211a4353135997971247602082015261133b61162b565b6000604051806060016040528060398152602001611b1760399139825250611361611666565b611369611693565b73195c04c57b529bd31fdaf043da8afbeb77840d5a815273abc28aef7953cb91c54801e5cb40358819776bea60208083019190915273780f327993c8396a91b259251207ec7efdb5afba60408301529082528201526113c66116b1565b6000808252646ff5946d7960d81b60208301526040808301919091527f65f1230ab880ca3722c79c3a6dd87540be344da93f527316e541008a00000000606080840191909152838201929092527de0c41b8cdf2a6bff5fa391c18ca67f7829dffc981e66817ade819bb94859918301919091526a411dc29d82fcdafd60ce0060808301528281019190915282015261145c611607565b73c92a68abf4fd45b8f7de18bd8cb2fa959e473c07815269246e34551878c34809ae602082015261148b61162b565b6000604051806060016040528060338152602001611b50603391398252506114b1611666565b6114b9611693565b73a7c37febfba5da50d7330fc88a0292e3b7511ff68152735c8c7efe2642658235c996a3691b52781670741f602080830191909152736d364af9c7abddc0b91f4131a0289c9fd35a02b360408301529082528201526115166116b1565b600181526427cffe29b360d91b602082015260006040808301919091527f2845fff610f25fad7d5ef76d3e3141c2be16b5280d5ea7992c8dafd800000000606080840191909152838201929092527d44c86bc58034c185c7658484d58d62bef58453ae950663deeea10b4c3131838301526a49a4aab166aa4e7de18262608084015283019190915282810191909152820152919050565b60405180608001604052806004905b6115c46115da565b8152602001906001900390816115bc5790505090565b60405180608001604052806004905b6115f1611607565b8152602001906001900390816115e95790505090565b604080516060810182526000808252602082015290810161162661162b565b905290565b6040518060a0016040528060608152602001611645611666565b81526020016116526116b1565b815260006020820181905260409091015290565b60405180602001604052806001905b61167d611693565b8152602001906001900390816116755790505090565b60405180606001604052806003906020820280368337509192915050565b60408051608081018252600080825260208201819052918101829052606081019190915290565b806000805b60018082106116ec5750611732565b835186845b60038110156117185782516001600160a01b031682526020928301929091019083016116f1565b5050506060959095019450602092909201916001016116dd565b5050505050565b602080825260009060a0830183820185845b600481101561189a57601f19878503810184528251856080810160005b60048110156118845788820383528351606060018060a01b0382511684528b82015160090b8c850152604080830151925081818601528251610140838701528051806101a088015260005b818110156117d3578f81840101516101c0828a0101528f810190506117b3565b818111156117e65760006101c0838a0101525b508e85015191506117fa60808801836116d8565b918401518051151560e088015260208101516001600160d81b031916610100880152604081015115156101208801526060015163ffffffff191661014087015250908201516001600160f01b03166101608501526080909101516affffffffffffffffffffff16610180840152938a0193928a0192601f0185169091016101c00190600101611768565b509650505092850192509084019060010161174b565b5091969550505050505056fe4d6f6f20c3a9f09f9a806ff09f9a8020204d6f6fc3a9c3a9f09f9a80f09f9a80f09f9a80c3a96f6fc3a96ff09f9a806fc3a96f20f09f9a80204d6f206f20f09f9a80c3a920f09f9a804d6f6f4dc3a920c3a9f09f9a804d4d6f6f4d6f6f20c3a9f09f9a806f206f4d206f6f4d202020f09f9a80f09f9a80204df09f9a804d206f6f4df09f9a80f09f9a80c3a96f4dc3a96fc3a94df09f9a806f4d6f6f20c3a9f09f9a806fc3a920f09f9a80f09f9a806fc3a9c3a96f6f6f4dc3a96fc3a9f09f9a8020c3a9f09f9a806fc3a96ff09f9a804d6f6f20c3a9f09f9a806f4d6fc3a9f09f9a80f09f9a80f09f9a806f6f6f4df09f9a804d6f6f20c3a9f09f9a804d6ff09f9a806f6f20f09f9a80f09f9a8020c3a920206ff09f9a80206fc3a9f09f9a80c3a96f6f20c3a9f09f9a80f09f9a80f09f9a806f4dc3a920f09f9a804d6f20f09f9a80c3a9204dc3a9f09f9a80206fc3a96fc3a94d4df09f9a804d4df09f9a80204d4d4dc3a94d6f6f20c3a9f09f9a806f6f4df09f9a80c3a9f09f9a80206f6f6f4dc3a9c3a9f09f9a80c3a920f09f9a80f09f9a80204d4d4dc3a96f6f6f206f4d6ff09f9a80c3a94d6f6f20c3a9f09f9a80c3a96ff09f9a806f6f4dc3a96f4df09f9a806f4d204d6fc3a9206ff09f9a804dc3a920f09f9a806f6fc3a9f09f9a804d6f6f6f6f4d6f6f20c3a9f09f9a80f09f9a806fc3a96f6ff09f9a806f6f4d4df09f9a80204df09f9a806f4df09f9a806f4dc3a9f09f9a80f09f9a8020c3a94d6f6f4dc3a920f09f9a80f09f9a80f09f9a804d6f6fc3a94d6f6f20c3a9f09f9a80c3a96f4d4dc3a96ff09f9a80204d4d6fc3a9c3a94d4d20c3a96f20f09f9a806fc3a96ff09f9a80f09f9a8020204d4d6f6f20c3a9f09f9a80206f204d6f4d6fc3a96f6ff09f9a80c3a96fc3a920c3a92020c3a9206f6f6ff09f9a8020f09f9a804df09f9a80c3a94d6f6f20c3a9f09f9a806f20f09f9a806f4d20f09f9a80f09f9a804d4dc3a9c3a9c3a94df09f9a80c3a94d6f4df09f9a806f6f4d6f6f20c3a9f09f9a80c3a96f6f6f4d6ff09f9a804d4d4d6f4d4d4d4dc3a9c3a94d4d6f4d6ff09f9a80c3a94da2646970667358221220742beb672a8daf4be548c1d57d5607176146e20933fa2b57ce4f28fedeb6c56d64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_2eddd6ac {\n bool s_0;\n bytes5 s_1;\n bool s_2;\n bytes28 s_3;\n }\n\n struct S_09bc5ab4 {\n string s_0;\n address[3][1] s_1;\n S_2eddd6ac s_2;\n uint240 s_3;\n uint88 s_4;\n }\n\n struct S_a03de45e {\n address s_0;\n int80 s_1;\n S_09bc5ab4 s_2;\n }\n\n function test () public pure returns (S_a03de45e[4][4] memory) {\n S_a03de45e[4][4] memory r;\n {\n S_a03de45e[4] memory r_0;\n {\n S_a03de45e memory r_0_0;\n {\n address r_0_0_0 = 0xfe885b3641f37aBccC8b5B6D8C6a7dF555210767;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n int80 r_0_0_1 = -371954046979619113350646;\n r_0_0.s_1 = r_0_0_1;\n }\n {\n S_09bc5ab4 memory r_0_0_2;\n {\n string memory r_0_0_2_0 = unicode\"Moo é🚀ooM🚀é🚀 oooMéé🚀é 🚀🚀 MMMéooo oMo🚀é\";\n r_0_0_2.s_0 = r_0_0_2_0;\n }\n {\n address[3][1] memory r_0_0_2_1;\n {\n address[3] memory r_0_0_2_1_0;\n {\n address r_0_0_2_1_0_0 = 0xbBF282f8688338465A94AC8599E02386b5cd22F2;\n r_0_0_2_1_0[0] = r_0_0_2_1_0_0;\n }\n {\n address r_0_0_2_1_0_1 = 0xDdF736BE8709AC99860430A984e96C6F8b391099;\n r_0_0_2_1_0[1] = r_0_0_2_1_0_1;\n }\n {\n address r_0_0_2_1_0_2 = 0xE7C38A0984540225CBf85498DB586c270A389EC7;\n r_0_0_2_1_0[2] = r_0_0_2_1_0_2;\n }\n r_0_0_2_1[0] = r_0_0_2_1_0;\n }\n r_0_0_2.s_1 = r_0_0_2_1;\n }\n {\n S_2eddd6ac memory r_0_0_2_2;\n {\n bool r_0_0_2_2_0 = false;\n r_0_0_2_2.s_0 = r_0_0_2_2_0;\n }\n {\n bytes5 r_0_0_2_2_1 = bytes5(0x77fa16afdd);\n r_0_0_2_2.s_1 = r_0_0_2_2_1;\n }\n {\n bool r_0_0_2_2_2 = true;\n r_0_0_2_2.s_2 = r_0_0_2_2_2;\n }\n {\n bytes28 r_0_0_2_2_3 = bytes28(0x77f74f709eedb466b62cee3c0acaf238d221322940dd21c5e68c43cf);\n r_0_0_2_2.s_3 = r_0_0_2_2_3;\n }\n r_0_0_2.s_2 = r_0_0_2_2;\n }\n {\n uint240 r_0_0_2_3 = 1726008546681151260551673598736135016501958094094443998590598452689683472;\n r_0_0_2.s_3 = r_0_0_2_3;\n }\n {\n uint88 r_0_0_2_4 = 10164057757303282681551155;\n r_0_0_2.s_4 = r_0_0_2_4;\n }\n r_0_0.s_2 = r_0_0_2;\n }\n r_0[0] = r_0_0;\n }\n {\n S_a03de45e memory r_0_1;\n {\n address r_0_1_0 = 0x222F1924FEbd6b9A69733904ded8720404ef905f;\n r_0_1.s_0 = r_0_1_0;\n }\n {\n int80 r_0_1_1 = 317868839210587068255486;\n r_0_1.s_1 = r_0_1_1;\n }\n {\n S_09bc5ab4 memory r_0_1_2;\n {\n string memory r_0_1_2_0 = unicode\"Moo é🚀oMoé🚀🚀🚀oooM🚀\";\n r_0_1_2.s_0 = r_0_1_2_0;\n }\n {\n address[3][1] memory r_0_1_2_1;\n {\n address[3] memory r_0_1_2_1_0;\n {\n address r_0_1_2_1_0_0 = 0xc0c95c9448bEAFA3596Ba222d777c3cDBAfB94AA;\n r_0_1_2_1_0[0] = r_0_1_2_1_0_0;\n }\n {\n address r_0_1_2_1_0_1 = 0xE239A942223A91CfA1f78670189FDFe6AE1Cd5fD;\n r_0_1_2_1_0[1] = r_0_1_2_1_0_1;\n }\n {\n address r_0_1_2_1_0_2 = 0x03b94B43284465fc157f981e2A6bEb912ff4740B;\n r_0_1_2_1_0[2] = r_0_1_2_1_0_2;\n }\n r_0_1_2_1[0] = r_0_1_2_1_0;\n }\n r_0_1_2.s_1 = r_0_1_2_1;\n }\n {\n S_2eddd6ac memory r_0_1_2_2;\n {\n bool r_0_1_2_2_0 = false;\n r_0_1_2_2.s_0 = r_0_1_2_2_0;\n }\n {\n bytes5 r_0_1_2_2_1 = bytes5(0x1fb2e65d72);\n r_0_1_2_2.s_1 = r_0_1_2_2_1;\n }\n {\n bool r_0_1_2_2_2 = false;\n r_0_1_2_2.s_2 = r_0_1_2_2_2;\n }\n {\n bytes28 r_0_1_2_2_3 = bytes28(0x2bef0993e4b24a68b622b3d43d28857492be91a46f50b55cde50d593);\n r_0_1_2_2.s_3 = r_0_1_2_2_3;\n }\n r_0_1_2.s_2 = r_0_1_2_2;\n }\n {\n uint240 r_0_1_2_3 = 361129914365884532405488894426208442412880084923785456935277568178346674;\n r_0_1_2.s_3 = r_0_1_2_3;\n }\n {\n uint88 r_0_1_2_4 = 272453771477002621586759820;\n r_0_1_2.s_4 = r_0_1_2_4;\n }\n r_0_1.s_2 = r_0_1_2;\n }\n r_0[1] = r_0_1;\n }\n {\n S_a03de45e memory r_0_2;\n {\n address r_0_2_0 = 0x07592a1445307fcCA87b0ECB13fc26D016090f17;\n r_0_2.s_0 = r_0_2_0;\n }\n {\n int80 r_0_2_1 = -573345633070781755699460;\n r_0_2.s_1 = r_0_2_1;\n }\n {\n S_09bc5ab4 memory r_0_2_2;\n {\n string memory r_0_2_2_0 = unicode\"Moo é🚀éo🚀ooMéoM🚀oM Moé o🚀Mé 🚀ooé🚀Moooo\";\n r_0_2_2.s_0 = r_0_2_2_0;\n }\n {\n address[3][1] memory r_0_2_2_1;\n {\n address[3] memory r_0_2_2_1_0;\n {\n address r_0_2_2_1_0_0 = 0x74CeFAEF109F3b0FbcD654086ed14afF1c2d4aCB;\n r_0_2_2_1_0[0] = r_0_2_2_1_0_0;\n }\n {\n address r_0_2_2_1_0_1 = 0xE996Aaf96C73c17114D9b3B96F0020B7FaF66665;\n r_0_2_2_1_0[1] = r_0_2_2_1_0_1;\n }\n {\n address r_0_2_2_1_0_2 = 0xFE044366F8D27ea8951F589bF3f098de555712E7;\n r_0_2_2_1_0[2] = r_0_2_2_1_0_2;\n }\n r_0_2_2_1[0] = r_0_2_2_1_0;\n }\n r_0_2_2.s_1 = r_0_2_2_1;\n }\n {\n S_2eddd6ac memory r_0_2_2_2;\n {\n bool r_0_2_2_2_0 = true;\n r_0_2_2_2.s_0 = r_0_2_2_2_0;\n }\n {\n bytes5 r_0_2_2_2_1 = bytes5(0xd98b533a04);\n r_0_2_2_2.s_1 = r_0_2_2_2_1;\n }\n {\n bool r_0_2_2_2_2 = false;\n r_0_2_2_2.s_2 = r_0_2_2_2_2;\n }\n {\n bytes28 r_0_2_2_2_3 = bytes28(0x7361f5713429ee5b3c5aa0f95a51f20362d03de73af5d24fdd1ba3a9);\n r_0_2_2_2.s_3 = r_0_2_2_2_3;\n }\n r_0_2_2.s_2 = r_0_2_2_2;\n }\n {\n uint240 r_0_2_2_3 = 113175224569512132013602103585824308313673745181417885159929491955838294;\n r_0_2_2.s_3 = r_0_2_2_3;\n }\n {\n uint88 r_0_2_2_4 = 228042630791797743924668015;\n r_0_2_2.s_4 = r_0_2_2_4;\n }\n r_0_2.s_2 = r_0_2_2;\n }\n r_0[2] = r_0_2;\n }\n {\n S_a03de45e memory r_0_3;\n {\n address r_0_3_0 = 0xdEd3728DE4B0b5EF2e877365aB81522f4be28d0E;\n r_0_3.s_0 = r_0_3_0;\n }\n {\n int80 r_0_3_1 = 78552340874942351714788;\n r_0_3.s_1 = r_0_3_1;\n }\n {\n S_09bc5ab4 memory r_0_3_2;\n {\n string memory r_0_3_2_0 = unicode\"Moo é🚀oé 🚀🚀oééoooMéoé🚀 é🚀oéo🚀\";\n r_0_3_2.s_0 = r_0_3_2_0;\n }\n {\n address[3][1] memory r_0_3_2_1;\n {\n address[3] memory r_0_3_2_1_0;\n {\n address r_0_3_2_1_0_0 = 0x27D6FeA2a818863362dC1CB5704448D02f04A776;\n r_0_3_2_1_0[0] = r_0_3_2_1_0_0;\n }\n {\n address r_0_3_2_1_0_1 = 0xa516255263F68dc224e67E5D3750Ab8C4DF974f4;\n r_0_3_2_1_0[1] = r_0_3_2_1_0_1;\n }\n {\n address r_0_3_2_1_0_2 = 0xAaA49B36544055460f23B02B2241c0Eb6E1D2135;\n r_0_3_2_1_0[2] = r_0_3_2_1_0_2;\n }\n r_0_3_2_1[0] = r_0_3_2_1_0;\n }\n r_0_3_2.s_1 = r_0_3_2_1;\n }\n {\n S_2eddd6ac memory r_0_3_2_2;\n {\n bool r_0_3_2_2_0 = true;\n r_0_3_2_2.s_0 = r_0_3_2_2_0;\n }\n {\n bytes5 r_0_3_2_2_1 = bytes5(0x6181aee8fd);\n r_0_3_2_2.s_1 = r_0_3_2_2_1;\n }\n {\n bool r_0_3_2_2_2 = false;\n r_0_3_2_2.s_2 = r_0_3_2_2_2;\n }\n {\n bytes28 r_0_3_2_2_3 = bytes28(0x5bca6ff666305ba99db6c0a4c94ca9c20bdd4c1b726d9fc5abe07838);\n r_0_3_2_2.s_3 = r_0_3_2_2_3;\n }\n r_0_3_2.s_2 = r_0_3_2_2;\n }\n {\n uint240 r_0_3_2_3 = 757119636008924985821085062009745352205806977222282372812821415663386768;\n r_0_3_2.s_3 = r_0_3_2_3;\n }\n {\n uint88 r_0_3_2_4 = 142356003821432769055146607;\n r_0_3_2.s_4 = r_0_3_2_4;\n }\n r_0_3.s_2 = r_0_3_2;\n }\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_a03de45e[4] memory r_1;\n {\n S_a03de45e memory r_1_0;\n {\n address r_1_0_0 = 0x50A1bD48978827275f23797f3CA96897ffA8ED76;\n r_1_0.s_0 = r_1_0_0;\n }\n {\n int80 r_1_0_1 = 412470653691313394787764;\n r_1_0.s_1 = r_1_0_1;\n }\n {\n S_09bc5ab4 memory r_1_0_2;\n {\n string memory r_1_0_2_0 = unicode\"Moo é🚀éoMMéo🚀 MMoééMM éo 🚀oéo🚀🚀 M\";\n r_1_0_2.s_0 = r_1_0_2_0;\n }\n {\n address[3][1] memory r_1_0_2_1;\n {\n address[3] memory r_1_0_2_1_0;\n {\n address r_1_0_2_1_0_0 = 0x2225F93CFA3ff596CfB3205ebf32570ee5CFCE26;\n r_1_0_2_1_0[0] = r_1_0_2_1_0_0;\n }\n {\n address r_1_0_2_1_0_1 = 0x850E5bC3309820A886aA850a4ee9586f6B095F8e;\n r_1_0_2_1_0[1] = r_1_0_2_1_0_1;\n }\n {\n address r_1_0_2_1_0_2 = 0x8d97a2ab51CCB4Bc4FCBb5273a7E0bb7FA4B17bc;\n r_1_0_2_1_0[2] = r_1_0_2_1_0_2;\n }\n r_1_0_2_1[0] = r_1_0_2_1_0;\n }\n r_1_0_2.s_1 = r_1_0_2_1;\n }\n {\n S_2eddd6ac memory r_1_0_2_2;\n {\n bool r_1_0_2_2_0 = true;\n r_1_0_2_2.s_0 = r_1_0_2_2_0;\n }\n {\n bytes5 r_1_0_2_2_1 = bytes5(0x7bd96891eb);\n r_1_0_2_2.s_1 = r_1_0_2_2_1;\n }\n {\n bool r_1_0_2_2_2 = true;\n r_1_0_2_2.s_2 = r_1_0_2_2_2;\n }\n {\n bytes28 r_1_0_2_2_3 = bytes28(0xca861b294f1d32a2806431f122a97875f12176f30437df73046fad89);\n r_1_0_2_2.s_3 = r_1_0_2_2_3;\n }\n r_1_0_2.s_2 = r_1_0_2_2;\n }\n {\n uint240 r_1_0_2_3 = 499852171895052400262391608960276181971313109864263121723067631577566061;\n r_1_0_2.s_3 = r_1_0_2_3;\n }\n {\n uint88 r_1_0_2_4 = 298830116619038927014612371;\n r_1_0_2.s_4 = r_1_0_2_4;\n }\n r_1_0.s_2 = r_1_0_2;\n }\n r_1[0] = r_1_0;\n }\n {\n S_a03de45e memory r_1_1;\n {\n address r_1_1_0 = 0x00541Afc9D96642D0221F314859e27e98FeD271F;\n r_1_1.s_0 = r_1_1_0;\n }\n {\n int80 r_1_1_1 = -487575037523970649496700;\n r_1_1.s_1 = r_1_1_1;\n }\n {\n S_09bc5ab4 memory r_1_1_2;\n {\n string memory r_1_1_2_0 = unicode\"Moo é🚀\";\n r_1_1_2.s_0 = r_1_1_2_0;\n }\n {\n address[3][1] memory r_1_1_2_1;\n {\n address[3] memory r_1_1_2_1_0;\n {\n address r_1_1_2_1_0_0 = 0x91b965e04AF757186C2e753709ac29A352F01333;\n r_1_1_2_1_0[0] = r_1_1_2_1_0_0;\n }\n {\n address r_1_1_2_1_0_1 = 0xbDE131e4171c055e6e6251FFEC1F9C3d308f812c;\n r_1_1_2_1_0[1] = r_1_1_2_1_0_1;\n }\n {\n address r_1_1_2_1_0_2 = 0x5DD1693Be9bE0115a90B75B64D928E352853C472;\n r_1_1_2_1_0[2] = r_1_1_2_1_0_2;\n }\n r_1_1_2_1[0] = r_1_1_2_1_0;\n }\n r_1_1_2.s_1 = r_1_1_2_1;\n }\n {\n S_2eddd6ac memory r_1_1_2_2;\n {\n bool r_1_1_2_2_0 = true;\n r_1_1_2_2.s_0 = r_1_1_2_2_0;\n }\n {\n bytes5 r_1_1_2_2_1 = bytes5(0x34d17ee2b8);\n r_1_1_2_2.s_1 = r_1_1_2_2_1;\n }\n {\n bool r_1_1_2_2_2 = false;\n r_1_1_2_2.s_2 = r_1_1_2_2_2;\n }\n {\n bytes28 r_1_1_2_2_3 = bytes28(0x25f9af3d7cf62f47d42c83c8f2aa9e4aa0ff6d9a8068533e7fdc0b8f);\n r_1_1_2_2.s_3 = r_1_1_2_2_3;\n }\n r_1_1_2.s_2 = r_1_1_2_2;\n }\n {\n uint240 r_1_1_2_3 = 452851383571058179006716562279806002331361802630414285486007432088225249;\n r_1_1_2.s_3 = r_1_1_2_3;\n }\n {\n uint88 r_1_1_2_4 = 51270756966335915626570875;\n r_1_1_2.s_4 = r_1_1_2_4;\n }\n r_1_1.s_2 = r_1_1_2;\n }\n r_1[1] = r_1_1;\n }\n {\n S_a03de45e memory r_1_2;\n {\n address r_1_2_0 = 0x3A10d67f1060852d0b34fb0561bB419649Ed91Ea;\n r_1_2.s_0 = r_1_2_0;\n }\n {\n int80 r_1_2_1 = 600129248375862126655075;\n r_1_2.s_1 = r_1_2_1;\n }\n {\n S_09bc5ab4 memory r_1_2_2;\n {\n string memory r_1_2_2_0 = unicode\"Moo é🚀o🚀 Mooéé🚀🚀🚀éooéo🚀oéo 🚀 Mo o 🚀é 🚀MooMé é🚀MMoo\";\n r_1_2_2.s_0 = r_1_2_2_0;\n }\n {\n address[3][1] memory r_1_2_2_1;\n {\n address[3] memory r_1_2_2_1_0;\n {\n address r_1_2_2_1_0_0 = 0xb97cF4099ceE515bF91Dede77BF18be293719Df5;\n r_1_2_2_1_0[0] = r_1_2_2_1_0_0;\n }\n {\n address r_1_2_2_1_0_1 = 0x95faB6D50E7c8abdE4e7e4d34aBceD79c1e7eD9D;\n r_1_2_2_1_0[1] = r_1_2_2_1_0_1;\n }\n {\n address r_1_2_2_1_0_2 = 0xEB69636054cfEFc5A54490c800E9ECfe3f9DF898;\n r_1_2_2_1_0[2] = r_1_2_2_1_0_2;\n }\n r_1_2_2_1[0] = r_1_2_2_1_0;\n }\n r_1_2_2.s_1 = r_1_2_2_1;\n }\n {\n S_2eddd6ac memory r_1_2_2_2;\n {\n bool r_1_2_2_2_0 = false;\n r_1_2_2_2.s_0 = r_1_2_2_2_0;\n }\n {\n bytes5 r_1_2_2_2_1 = bytes5(0x852a89c094);\n r_1_2_2_2.s_1 = r_1_2_2_2_1;\n }\n {\n bool r_1_2_2_2_2 = false;\n r_1_2_2_2.s_2 = r_1_2_2_2_2;\n }\n {\n bytes28 r_1_2_2_2_3 = bytes28(0xb21d045becf473d467f22c9a8758ada41ca82290b26329aaeefe57ce);\n r_1_2_2_2.s_3 = r_1_2_2_2_3;\n }\n r_1_2_2.s_2 = r_1_2_2_2;\n }\n {\n uint240 r_1_2_2_3 = 795039194579847259850917773229897630644160991993442051064403825866683146;\n r_1_2_2.s_3 = r_1_2_2_3;\n }\n {\n uint88 r_1_2_2_4 = 167584524349078587361670595;\n r_1_2_2.s_4 = r_1_2_2_4;\n }\n r_1_2.s_2 = r_1_2_2;\n }\n r_1[2] = r_1_2;\n }\n {\n S_a03de45e memory r_1_3;\n {\n address r_1_3_0 = 0x38A0def46C720b68f746B7c4e7d36BAd2d97BaBf;\n r_1_3.s_0 = r_1_3_0;\n }\n {\n int80 r_1_3_1 = -571377777619362448405324;\n r_1_3.s_1 = r_1_3_1;\n }\n {\n S_09bc5ab4 memory r_1_3_2;\n {\n string memory r_1_3_2_0 = unicode\"Moo é🚀o\";\n r_1_3_2.s_0 = r_1_3_2_0;\n }\n {\n address[3][1] memory r_1_3_2_1;\n {\n address[3] memory r_1_3_2_1_0;\n {\n address r_1_3_2_1_0_0 = 0xc970B10C2D75Fb18b349A48CCC3a40A7054b413b;\n r_1_3_2_1_0[0] = r_1_3_2_1_0_0;\n }\n {\n address r_1_3_2_1_0_1 = 0xD752358f34733c7B679d3edBb61DA3430f24a057;\n r_1_3_2_1_0[1] = r_1_3_2_1_0_1;\n }\n {\n address r_1_3_2_1_0_2 = 0xF139768178070f7F95E5C90898Bba3a1152a848A;\n r_1_3_2_1_0[2] = r_1_3_2_1_0_2;\n }\n r_1_3_2_1[0] = r_1_3_2_1_0;\n }\n r_1_3_2.s_1 = r_1_3_2_1;\n }\n {\n S_2eddd6ac memory r_1_3_2_2;\n {\n bool r_1_3_2_2_0 = false;\n r_1_3_2_2.s_0 = r_1_3_2_2_0;\n }\n {\n bytes5 r_1_3_2_2_1 = bytes5(0x88a7eeff6e);\n r_1_3_2_2.s_1 = r_1_3_2_2_1;\n }\n {\n bool r_1_3_2_2_2 = true;\n r_1_3_2_2.s_2 = r_1_3_2_2_2;\n }\n {\n bytes28 r_1_3_2_2_3 = bytes28(0x6692b9ded3351da70590efd6e126d11e54f895ea894498c3c0b102c6);\n r_1_3_2_2.s_3 = r_1_3_2_2_3;\n }\n r_1_3_2.s_2 = r_1_3_2_2;\n }\n {\n uint240 r_1_3_2_3 = 265316384866407637405333897426040408612786893731115282179285144603292617;\n r_1_3_2.s_3 = r_1_3_2_3;\n }\n {\n uint88 r_1_3_2_4 = 26776131584309205161772383;\n r_1_3_2.s_4 = r_1_3_2_4;\n }\n r_1_3.s_2 = r_1_3_2;\n }\n r_1[3] = r_1_3;\n }\n r[1] = r_1;\n }\n {\n S_a03de45e[4] memory r_2;\n {\n S_a03de45e memory r_2_0;\n {\n address r_2_0_0 = 0x6A22c415a20E4842b9A0f2244860401C384F4526;\n r_2_0.s_0 = r_2_0_0;\n }\n {\n int80 r_2_0_1 = 377198327110170995321985;\n r_2_0.s_1 = r_2_0_1;\n }\n {\n S_09bc5ab4 memory r_2_0_2;\n {\n string memory r_2_0_2_0 = unicode\"Moo é🚀🚀oéoo🚀ooMM🚀 M🚀oM🚀oMé🚀🚀 éMooMé 🚀🚀🚀Mooé\";\n r_2_0_2.s_0 = r_2_0_2_0;\n }\n {\n address[3][1] memory r_2_0_2_1;\n {\n address[3] memory r_2_0_2_1_0;\n {\n address r_2_0_2_1_0_0 = 0x4b0a7A830EF062cb70A07183b95d0573ACFF908d;\n r_2_0_2_1_0[0] = r_2_0_2_1_0_0;\n }\n {\n address r_2_0_2_1_0_1 = 0xAb4269215db5825eBc8fFbB51BF8C7d635976cba;\n r_2_0_2_1_0[1] = r_2_0_2_1_0_1;\n }\n {\n address r_2_0_2_1_0_2 = 0x9493F94df0172Cb57f2a743425bAAA61d2E36D5C;\n r_2_0_2_1_0[2] = r_2_0_2_1_0_2;\n }\n r_2_0_2_1[0] = r_2_0_2_1_0;\n }\n r_2_0_2.s_1 = r_2_0_2_1;\n }\n {\n S_2eddd6ac memory r_2_0_2_2;\n {\n bool r_2_0_2_2_0 = true;\n r_2_0_2_2.s_0 = r_2_0_2_2_0;\n }\n {\n bytes5 r_2_0_2_2_1 = bytes5(0x7f60ddd631);\n r_2_0_2_2.s_1 = r_2_0_2_2_1;\n }\n {\n bool r_2_0_2_2_2 = true;\n r_2_0_2_2.s_2 = r_2_0_2_2_2;\n }\n {\n bytes28 r_2_0_2_2_3 = bytes28(0xaa7fb16a4c2d9e8a93a2809e83e661ea2d90e92ee4dadd80f2cf1f27);\n r_2_0_2_2.s_3 = r_2_0_2_2_3;\n }\n r_2_0_2.s_2 = r_2_0_2_2;\n }\n {\n uint240 r_2_0_2_3 = 421122003415530036370691533604691027973883054084228617991336821478546513;\n r_2_0_2.s_3 = r_2_0_2_3;\n }\n {\n uint88 r_2_0_2_4 = 67592121420163781572907310;\n r_2_0_2.s_4 = r_2_0_2_4;\n }\n r_2_0.s_2 = r_2_0_2;\n }\n r_2[0] = r_2_0;\n }\n {\n S_a03de45e memory r_2_1;\n {\n address r_2_1_0 = 0x539225fC1b1feEd47a887b7F28bbC39B00f681f3;\n r_2_1.s_0 = r_2_1_0;\n }\n {\n int80 r_2_1_1 = 325400860414691026941500;\n r_2_1.s_1 = r_2_1_1;\n }\n {\n S_09bc5ab4 memory r_2_1_2;\n {\n string memory r_2_1_2_0 = unicode\"Moo é🚀éMMMM\";\n r_2_1_2.s_0 = r_2_1_2_0;\n }\n {\n address[3][1] memory r_2_1_2_1;\n {\n address[3] memory r_2_1_2_1_0;\n {\n address r_2_1_2_1_0_0 = 0xdFb2b5C84dD8cf1BB9b285359F95361443af7BFA;\n r_2_1_2_1_0[0] = r_2_1_2_1_0_0;\n }\n {\n address r_2_1_2_1_0_1 = 0xD258E63182CFF58744DE38c18442d65D8454d47c;\n r_2_1_2_1_0[1] = r_2_1_2_1_0_1;\n }\n {\n address r_2_1_2_1_0_2 = 0x2bD9124A4a497F9203c535Dae11ab8B73793a50C;\n r_2_1_2_1_0[2] = r_2_1_2_1_0_2;\n }\n r_2_1_2_1[0] = r_2_1_2_1_0;\n }\n r_2_1_2.s_1 = r_2_1_2_1;\n }\n {\n S_2eddd6ac memory r_2_1_2_2;\n {\n bool r_2_1_2_2_0 = false;\n r_2_1_2_2.s_0 = r_2_1_2_2_0;\n }\n {\n bytes5 r_2_1_2_2_1 = bytes5(0xf6487e5b08);\n r_2_1_2_2.s_1 = r_2_1_2_2_1;\n }\n {\n bool r_2_1_2_2_2 = false;\n r_2_1_2_2.s_2 = r_2_1_2_2_2;\n }\n {\n bytes28 r_2_1_2_2_3 = bytes28(0xde1f0f573dad198c53280b8b3c60a60927611e96ea2e9034bb05d818);\n r_2_1_2_2.s_3 = r_2_1_2_2_3;\n }\n r_2_1_2.s_2 = r_2_1_2_2;\n }\n {\n uint240 r_2_1_2_3 = 654848288828254932964363218520914018951639448609035557111564712228759821;\n r_2_1_2.s_3 = r_2_1_2_3;\n }\n {\n uint88 r_2_1_2_4 = 56131956284168133665082115;\n r_2_1_2.s_4 = r_2_1_2_4;\n }\n r_2_1.s_2 = r_2_1_2;\n }\n r_2[1] = r_2_1;\n }\n {\n S_a03de45e memory r_2_2;\n {\n address r_2_2_0 = 0xCE191FF0e845C96033b9A1a641c0Db8a5E5cF164;\n r_2_2.s_0 = r_2_2_0;\n }\n {\n int80 r_2_2_1 = -579263166506302098927964;\n r_2_2.s_1 = r_2_2_1;\n }\n {\n S_09bc5ab4 memory r_2_2_2;\n {\n string memory r_2_2_2_0 = unicode\"Moo é🚀Mo🚀oo 🚀🚀 é o🚀 oé🚀éoo é🚀🚀🚀oMé 🚀Mo 🚀é Mé🚀 oéoéMM🚀MM🚀 MMMé\";\n r_2_2_2.s_0 = r_2_2_2_0;\n }\n {\n address[3][1] memory r_2_2_2_1;\n {\n address[3] memory r_2_2_2_1_0;\n {\n address r_2_2_2_1_0_0 = 0xB24E74D85c799edab28711e7baEd44A9b479B2A2;\n r_2_2_2_1_0[0] = r_2_2_2_1_0_0;\n }\n {\n address r_2_2_2_1_0_1 = 0x79E0024b4E63751f64B86778A8c3aba9a2e818b6;\n r_2_2_2_1_0[1] = r_2_2_2_1_0_1;\n }\n {\n address r_2_2_2_1_0_2 = 0x62Ab7aC1AeD57C29796C1376b8B3b836d78A07D5;\n r_2_2_2_1_0[2] = r_2_2_2_1_0_2;\n }\n r_2_2_2_1[0] = r_2_2_2_1_0;\n }\n r_2_2_2.s_1 = r_2_2_2_1;\n }\n {\n S_2eddd6ac memory r_2_2_2_2;\n {\n bool r_2_2_2_2_0 = true;\n r_2_2_2_2.s_0 = r_2_2_2_2_0;\n }\n {\n bytes5 r_2_2_2_2_1 = bytes5(0x70be09c29c);\n r_2_2_2_2.s_1 = r_2_2_2_2_1;\n }\n {\n bool r_2_2_2_2_2 = false;\n r_2_2_2_2.s_2 = r_2_2_2_2_2;\n }\n {\n bytes28 r_2_2_2_2_3 = bytes28(0xd9d8222df6b73dab031a36de7b577b8d6e0119c7984b8e704592c632);\n r_2_2_2_2.s_3 = r_2_2_2_2_3;\n }\n r_2_2_2.s_2 = r_2_2_2_2;\n }\n {\n uint240 r_2_2_2_3 = 339979713229544680630608818877017593993309940551175945598554611544677637;\n r_2_2_2.s_3 = r_2_2_2_3;\n }\n {\n uint88 r_2_2_2_4 = 75947959788314645638720418;\n r_2_2_2.s_4 = r_2_2_2_4;\n }\n r_2_2.s_2 = r_2_2_2;\n }\n r_2[2] = r_2_2;\n }\n {\n S_a03de45e memory r_2_3;\n {\n address r_2_3_0 = 0x3AC86AfC57D1782d32Ec61A2A7bcD5779Cb694E0;\n r_2_3.s_0 = r_2_3_0;\n }\n {\n int80 r_2_3_1 = -142181656589653134506668;\n r_2_3.s_1 = r_2_3_1;\n }\n {\n S_09bc5ab4 memory r_2_3_2;\n {\n string memory r_2_3_2_0 = unicode\"Moo é🚀éoooMo🚀MMMoMMMMééMMoMo🚀éM\";\n r_2_3_2.s_0 = r_2_3_2_0;\n }\n {\n address[3][1] memory r_2_3_2_1;\n {\n address[3] memory r_2_3_2_1_0;\n {\n address r_2_3_2_1_0_0 = 0x1FE6519189F2123e53fB123029dFbe1fAA3d53A8;\n r_2_3_2_1_0[0] = r_2_3_2_1_0_0;\n }\n {\n address r_2_3_2_1_0_1 = 0x9B9e5dB619a9B045E3a515415144EA2365f3709f;\n r_2_3_2_1_0[1] = r_2_3_2_1_0_1;\n }\n {\n address r_2_3_2_1_0_2 = 0x04759E42c9371b5BfbE6d0ac39b3087DcCfa40c9;\n r_2_3_2_1_0[2] = r_2_3_2_1_0_2;\n }\n r_2_3_2_1[0] = r_2_3_2_1_0;\n }\n r_2_3_2.s_1 = r_2_3_2_1;\n }\n {\n S_2eddd6ac memory r_2_3_2_2;\n {\n bool r_2_3_2_2_0 = false;\n r_2_3_2_2.s_0 = r_2_3_2_2_0;\n }\n {\n bytes5 r_2_3_2_2_1 = bytes5(0xee9cec350a);\n r_2_3_2_2.s_1 = r_2_3_2_2_1;\n }\n {\n bool r_2_3_2_2_2 = false;\n r_2_3_2_2.s_2 = r_2_3_2_2_2;\n }\n {\n bytes28 r_2_3_2_2_3 = bytes28(0x4a75ff596e91fc5743735c5abc6d63f173a28e8a02c64d0783b123a0);\n r_2_3_2_2.s_3 = r_2_3_2_2_3;\n }\n r_2_3_2.s_2 = r_2_3_2_2;\n }\n {\n uint240 r_2_3_2_3 = 551128815124698752723409326612528100683782846558464748832208201796375295;\n r_2_3_2.s_3 = r_2_3_2_3;\n }\n {\n uint88 r_2_3_2_4 = 95150692173394116586863979;\n r_2_3_2.s_4 = r_2_3_2_4;\n }\n r_2_3.s_2 = r_2_3_2;\n }\n r_2[3] = r_2_3;\n }\n r[2] = r_2;\n }\n {\n S_a03de45e[4] memory r_3;\n {\n S_a03de45e memory r_3_0;\n {\n address r_3_0_0 = 0x030573313f5577C816A48612D61e64Af101f297A;\n r_3_0.s_0 = r_3_0_0;\n }\n {\n int80 r_3_0_1 = 439680220069889117273100;\n r_3_0.s_1 = r_3_0_1;\n }\n {\n S_09bc5ab4 memory r_3_0_2;\n {\n string memory r_3_0_2_0 = unicode\"Moo é🚀o oM ooM 🚀🚀 M🚀M ooM🚀🚀éoMéoéM🚀o\";\n r_3_0_2.s_0 = r_3_0_2_0;\n }\n {\n address[3][1] memory r_3_0_2_1;\n {\n address[3] memory r_3_0_2_1_0;\n {\n address r_3_0_2_1_0_0 = 0x3BE9e18DD4b0e421af2dDef85b25eE5E26026433;\n r_3_0_2_1_0[0] = r_3_0_2_1_0_0;\n }\n {\n address r_3_0_2_1_0_1 = 0x55b698d4Ea077625463e30D16690AB02bCFD85b1;\n r_3_0_2_1_0[1] = r_3_0_2_1_0_1;\n }\n {\n address r_3_0_2_1_0_2 = 0x6561a1e5e70Ec491c65018B255354701A3284F3a;\n r_3_0_2_1_0[2] = r_3_0_2_1_0_2;\n }\n r_3_0_2_1[0] = r_3_0_2_1_0;\n }\n r_3_0_2.s_1 = r_3_0_2_1;\n }\n {\n S_2eddd6ac memory r_3_0_2_2;\n {\n bool r_3_0_2_2_0 = false;\n r_3_0_2_2.s_0 = r_3_0_2_2_0;\n }\n {\n bytes5 r_3_0_2_2_1 = bytes5(0x55bf2a1829);\n r_3_0_2_2.s_1 = r_3_0_2_2_1;\n }\n {\n bool r_3_0_2_2_2 = false;\n r_3_0_2_2.s_2 = r_3_0_2_2_2;\n }\n {\n bytes28 r_3_0_2_2_3 = bytes28(0x0db469339f168c06d384d0f72bee3ebc4421186ada40d85a4b040798);\n r_3_0_2_2.s_3 = r_3_0_2_2_3;\n }\n r_3_0_2.s_2 = r_3_0_2_2;\n }\n {\n uint240 r_3_0_2_3 = 153538234430212797863930183779204420626295318668450215694804729607097992;\n r_3_0_2.s_3 = r_3_0_2_3;\n }\n {\n uint88 r_3_0_2_4 = 182728775794337843018604238;\n r_3_0_2.s_4 = r_3_0_2_4;\n }\n r_3_0.s_2 = r_3_0_2;\n }\n r_3[0] = r_3_0;\n }\n {\n S_a03de45e memory r_3_1;\n {\n address r_3_1_0 = 0x08dFaA7fdA0402a3970A052222b30D27000E70AC;\n r_3_1.s_0 = r_3_1_0;\n }\n {\n int80 r_3_1_1 = 445650647259072783925180;\n r_3_1.s_1 = r_3_1_1;\n }\n {\n S_09bc5ab4 memory r_3_1_2;\n {\n string memory r_3_1_2_0 = unicode\"Moo é🚀\";\n r_3_1_2.s_0 = r_3_1_2_0;\n }\n {\n address[3][1] memory r_3_1_2_1;\n {\n address[3] memory r_3_1_2_1_0;\n {\n address r_3_1_2_1_0_0 = 0x3500f521Ae038594932F058606d5a7a33D079ABB;\n r_3_1_2_1_0[0] = r_3_1_2_1_0_0;\n }\n {\n address r_3_1_2_1_0_1 = 0x9927225F4FB72e319535F65eC05b6bC350aB4cfD;\n r_3_1_2_1_0[1] = r_3_1_2_1_0_1;\n }\n {\n address r_3_1_2_1_0_2 = 0x7cF21513497E8364237214B81336dEe3123C6181;\n r_3_1_2_1_0[2] = r_3_1_2_1_0_2;\n }\n r_3_1_2_1[0] = r_3_1_2_1_0;\n }\n r_3_1_2.s_1 = r_3_1_2_1;\n }\n {\n S_2eddd6ac memory r_3_1_2_2;\n {\n bool r_3_1_2_2_0 = true;\n r_3_1_2_2.s_0 = r_3_1_2_2_0;\n }\n {\n bytes5 r_3_1_2_2_1 = bytes5(0x1afc93828b);\n r_3_1_2_2.s_1 = r_3_1_2_2_1;\n }\n {\n bool r_3_1_2_2_2 = false;\n r_3_1_2_2.s_2 = r_3_1_2_2_2;\n }\n {\n bytes28 r_3_1_2_2_3 = bytes28(0x4da909d70b05044a5653cb97b58ff15506fc6a0be68801c29cdbb232);\n r_3_1_2_2.s_3 = r_3_1_2_2_3;\n }\n r_3_1_2.s_2 = r_3_1_2_2;\n }\n {\n uint240 r_3_1_2_3 = 1215939105339581641879978693481822744304929761923021186061041665205879522;\n r_3_1_2.s_3 = r_3_1_2_3;\n }\n {\n uint88 r_3_1_2_4 = 210046568862336085767248583;\n r_3_1_2.s_4 = r_3_1_2_4;\n }\n r_3_1.s_2 = r_3_1_2;\n }\n r_3[1] = r_3_1;\n }\n {\n S_a03de45e memory r_3_2;\n {\n address r_3_2_0 = 0x4643D27B1eE2a853BD499C83f292444B379eb726;\n r_3_2.s_0 = r_3_2_0;\n }\n {\n int80 r_3_2_1 = 156322560523113864827463;\n r_3_2.s_1 = r_3_2_1;\n }\n {\n S_09bc5ab4 memory r_3_2_2;\n {\n string memory r_3_2_2_0 = unicode\"Moo é🚀 o MoMoéoo🚀éoé é é ooo🚀 🚀M🚀é\";\n r_3_2_2.s_0 = r_3_2_2_0;\n }\n {\n address[3][1] memory r_3_2_2_1;\n {\n address[3] memory r_3_2_2_1_0;\n {\n address r_3_2_2_1_0_0 = 0x195c04C57b529Bd31FDaf043da8AFbEb77840D5A;\n r_3_2_2_1_0[0] = r_3_2_2_1_0_0;\n }\n {\n address r_3_2_2_1_0_1 = 0xAbC28aef7953cb91C54801e5Cb40358819776BEa;\n r_3_2_2_1_0[1] = r_3_2_2_1_0_1;\n }\n {\n address r_3_2_2_1_0_2 = 0x780f327993C8396A91b259251207EC7eFDB5AfBA;\n r_3_2_2_1_0[2] = r_3_2_2_1_0_2;\n }\n r_3_2_2_1[0] = r_3_2_2_1_0;\n }\n r_3_2_2.s_1 = r_3_2_2_1;\n }\n {\n S_2eddd6ac memory r_3_2_2_2;\n {\n bool r_3_2_2_2_0 = false;\n r_3_2_2_2.s_0 = r_3_2_2_2_0;\n }\n {\n bytes5 r_3_2_2_2_1 = bytes5(0x6ff5946d79);\n r_3_2_2_2.s_1 = r_3_2_2_2_1;\n }\n {\n bool r_3_2_2_2_2 = false;\n r_3_2_2_2.s_2 = r_3_2_2_2_2;\n }\n {\n bytes28 r_3_2_2_2_3 = bytes28(0x65f1230ab880ca3722c79c3a6dd87540be344da93f527316e541008a);\n r_3_2_2_2.s_3 = r_3_2_2_2_3;\n }\n r_3_2_2.s_2 = r_3_2_2_2;\n }\n {\n uint240 r_3_2_2_3 = 1551278232610995841306329861014276702152899602279337454019598562446887001;\n r_3_2_2.s_3 = r_3_2_2_3;\n }\n {\n uint88 r_3_2_2_4 = 78720716921216444131233280;\n r_3_2_2.s_4 = r_3_2_2_4;\n }\n r_3_2.s_2 = r_3_2_2;\n }\n r_3[2] = r_3_2;\n }\n {\n S_a03de45e memory r_3_3;\n {\n address r_3_3_0 = 0xc92A68aBf4fd45B8F7de18bD8cB2fA959e473C07;\n r_3_3.s_0 = r_3_3_0;\n }\n {\n int80 r_3_3_1 = 172038106178585222449582;\n r_3_3.s_1 = r_3_3_1;\n }\n {\n S_09bc5ab4 memory r_3_3_2;\n {\n string memory r_3_3_2_0 = unicode\"Moo é🚀o 🚀oM 🚀🚀MMéééM🚀éMoM🚀oo\";\n r_3_3_2.s_0 = r_3_3_2_0;\n }\n {\n address[3][1] memory r_3_3_2_1;\n {\n address[3] memory r_3_3_2_1_0;\n {\n address r_3_3_2_1_0_0 = 0xa7C37FEbfBa5DA50d7330fc88a0292E3b7511fF6;\n r_3_3_2_1_0[0] = r_3_3_2_1_0_0;\n }\n {\n address r_3_3_2_1_0_1 = 0x5c8C7eFE2642658235c996A3691b52781670741F;\n r_3_3_2_1_0[1] = r_3_3_2_1_0_1;\n }\n {\n address r_3_3_2_1_0_2 = 0x6D364AF9c7abDDC0b91F4131a0289C9fD35a02b3;\n r_3_3_2_1_0[2] = r_3_3_2_1_0_2;\n }\n r_3_3_2_1[0] = r_3_3_2_1_0;\n }\n r_3_3_2.s_1 = r_3_3_2_1;\n }\n {\n S_2eddd6ac memory r_3_3_2_2;\n {\n bool r_3_3_2_2_0 = true;\n r_3_3_2_2.s_0 = r_3_3_2_2_0;\n }\n {\n bytes5 r_3_3_2_2_1 = bytes5(0x4f9ffc5366);\n r_3_3_2_2.s_1 = r_3_3_2_2_1;\n }\n {\n bool r_3_3_2_2_2 = false;\n r_3_3_2_2.s_2 = r_3_3_2_2_2;\n }\n {\n bytes28 r_3_3_2_2_3 = bytes28(0x2845fff610f25fad7d5ef76d3e3141c2be16b5280d5ea7992c8dafd8);\n r_3_3_2_2.s_3 = r_3_3_2_2_3;\n }\n r_3_3_2.s_2 = r_3_3_2_2;\n }\n {\n uint240 r_3_3_2_3 = 474722090577515673307964402621661487521855441300047619523278325550952753;\n r_3_3_2.s_3 = r_3_3_2_3;\n }\n {\n uint88 r_3_3_2_4 = 89029201664642928626205282;\n r_3_3_2.s_4 = r_3_3_2_4;\n }\n r_3_3.s_2 = r_3_3_2;\n }\n r_3[3] = r_3_3;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000092000000000000000000000000000000000000000000000000000000000000011800000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000006a0000000000000000000000000fe885b3641f37abccc8b5b6d8c6a7df555210767ffffffffffffffffffffffffffffffffffffffffffffb13c54a969099e88ca0a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140000000000000000000000000bbf282f8688338465a94ac8599e02386b5cd22f2000000000000000000000000ddf736be8709ac99860430a984e96c6f8b391099000000000000000000000000e7c38a0984540225cbf85498db586c270a389ec7000000000000000000000000000000000000000000000000000000000000000077fa16afdd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000177f74f709eedb466b62cee3c0acaf238d221322940dd21c5e68c43cf000000000000fa153715b3922c53c3e2a7598a2496cb4427c3ba6017de66d13c7e2ec410000000000000000000000000000000000000000000086852acd27d5ded3c993300000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a806f6f4df09f9a80c3a9f09f9a80206f6f6f4dc3a9c3a9f09f9a80c3a920f09f9a80f09f9a80204d4d4dc3a96f6f6f206f4d6ff09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000222f1924febd6b9a69733904ded8720404ef905f00000000000000000000000000000000000000000000434fb44d20bd61234cfe00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140000000000000000000000000c0c95c9448beafa3596ba222d777c3cdbafb94aa000000000000000000000000e239a942223a91cfa1f78670189fdfe6ae1cd5fd00000000000000000000000003b94b43284465fc157f981e2a6beb912ff4740b00000000000000000000000000000000000000000000000000000000000000001fb2e65d7200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bef0993e4b24a68b622b3d43d28857492be91a46f50b55cde50d59300000000000034530d911f28950da7e1a7006e9078092281217591a7102c6d739f695ab2000000000000000000000000000000000000000000e15e548bff220a8be7e08c00000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a806f4d6fc3a9f09f9a80f09f9a80f09f9a806f6f6f4df09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000007592a1445307fcca87b0ecb13fc26d016090f17ffffffffffffffffffffffffffffffffffffffffffff8696def6b57a85e1cefc0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000014000000000000000000000000074cefaef109f3b0fbcd654086ed14aff1c2d4acb000000000000000000000000e996aaf96c73c17114d9b3b96f0020b7faf66665000000000000000000000000fe044366f8d27ea8951f589bf3f098de555712e70000000000000000000000000000000000000000000000000000000000000001d98b533a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007361f5713429ee5b3c5aa0f95a51f20362d03de73af5d24fdd1ba3a90000000000001065e7031524dae7571a7a7e286b74198f16cf022e02f801e1f61976ed56000000000000000000000000000000000000000000bca1e7c943ac1236ede66f000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a80c3a96ff09f9a806f6f4dc3a96f4df09f9a806f4d204d6fc3a9206ff09f9a804dc3a920f09f9a806f6fc3a9f09f9a804d6f6f6f6f0000000000000000000000000000ded3728de4b0b5ef2e877365ab81522f4be28d0e0000000000000000000000000000000000000000000010a254b7ed9f0014a9e40000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000014000000000000000000000000027d6fea2a818863362dc1cb5704448d02f04a776000000000000000000000000a516255263f68dc224e67e5d3750ab8c4df974f4000000000000000000000000aaa49b36544055460f23b02b2241c0eb6e1d213500000000000000000000000000000000000000000000000000000000000000016181aee8fd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005bca6ff666305ba99db6c0a4c94ca9c20bdd4c1b726d9fc5abe078380000000000006db320cb9d387e6ce3608cba557adf2847267593adf231d0eb566202409000000000000000000000000000000000000000000075c10e6e33c7d43111c26f00000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a806fc3a920f09f9a80f09f9a806fc3a9c3a96f6f6f4dc3a96fc3a9f09f9a8020c3a9f09f9a806fc3a96ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000460000000000000000000000000000000000000000000000000000000000000068000000000000000000000000050a1bd48978827275f23797f3ca96897ffa8ed7600000000000000000000000000000000000000000000575814357910dabfa5b4000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000002225f93cfa3ff596cfb3205ebf32570ee5cfce26000000000000000000000000850e5bc3309820a886aa850a4ee9586f6b095f8e0000000000000000000000008d97a2ab51ccb4bc4fcbb5273a7e0bb7fa4b17bc00000000000000000000000000000000000000000000000000000000000000017bd96891eb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ca861b294f1d32a2806431f122a97875f12176f30437df73046fad89000000000000486c8c293d7f9b9998bada26823adb5c84d070cb5fa57048e1f44d678b6d000000000000000000000000000000000000000000f72fbd1506022ce0e84d9300000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a80c3a96f4d4dc3a96ff09f9a80204d4d6fc3a9c3a94d4d20c3a96f20f09f9a806fc3a96ff09f9a80f09f9a8020204d000000000000000000000000000000000000000000541afc9d96642d0221f314859e27e98fed271fffffffffffffffffffffffffffffffffffffffffffff98c08116bf3646e3e3840000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000014000000000000000000000000091b965e04af757186c2e753709ac29a352f01333000000000000000000000000bde131e4171c055e6e6251ffec1f9c3d308f812c0000000000000000000000005dd1693be9be0115a90b75b64d928e352853c472000000000000000000000000000000000000000000000000000000000000000134d17ee2b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025f9af3d7cf62f47d42c83c8f2aa9e4aa0ff6d9a8068533e7fdc0b8f000000000000419d30fdd0533a4157fc08d7f70812e79c41e443cd42b52fa729e2e585e10000000000000000000000000000000000000000002a69014decc1f76bafa47b000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000003a10d67f1060852d0b34fb0561bb419649ed91ea000000000000000000000000000000000000000000007f15125dc0d0f93b366300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140000000000000000000000000b97cf4099cee515bf91dede77bf18be293719df500000000000000000000000095fab6d50e7c8abde4e7e4d34abced79c1e7ed9d000000000000000000000000eb69636054cfefc5a54490c800e9ecfe3f9df8980000000000000000000000000000000000000000000000000000000000000000852a89c0940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21d045becf473d467f22c9a8758ada41ca82290b26329aaeefe57ce0000000000007331a4885ce1724d6312d79093e2c80015f2a4384acf342ee1508d21b30a0000000000000000000000000000000000000000008a9f6744ca3f42b31335c3000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a806ff09f9a8020204d6f6fc3a9c3a9f09f9a80f09f9a80f09f9a80c3a96f6fc3a96ff09f9a806fc3a96f20f09f9a80204d6f206f20f09f9a80c3a920f09f9a804d6f6f4dc3a920c3a9f09f9a804d4d6f6f00000000000000000000000000000000000038a0def46c720b68f746b7c4e7d36bad2d97babfffffffffffffffffffffffffffffffffffffffffffff87018c71b06641a80cb400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140000000000000000000000000c970b10c2d75fb18b349a48ccc3a40a7054b413b000000000000000000000000d752358f34733c7b679d3edbb61da3430f24a057000000000000000000000000f139768178070f7f95e5c90898bba3a1152a848a000000000000000000000000000000000000000000000000000000000000000088a7eeff6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016692b9ded3351da70590efd6e126d11e54f895ea894498c3c0b102c6000000000000267121b4e10ddbb391e1d1f6bc6be92602e23af63a948cc9ee4d869d73c90000000000000000000000000000000000000000001626110070effc2bd4855f000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000006c00000000000000000000000006a22c415a20e4842b9a0f2244860401c384f4526000000000000000000000000000000000000000000004fdff658584ff98fec81000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000004b0a7a830ef062cb70a07183b95d0573acff908d000000000000000000000000ab4269215db5825ebc8ffbb51bf8c7d635976cba0000000000000000000000009493f94df0172cb57f2a743425baaa61d2e36d5c00000000000000000000000000000000000000000000000000000000000000017f60ddd6310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aa7fb16a4c2d9e8a93a2809e83e661ea2d90e92ee4dadd80f2cf1f270000000000003d0448833dd562543d7e28898b07f9e4e1028687dc3581794bcd73825c5100000000000000000000000000000000000000000037e9303e8c8f69c767512e00000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a80f09f9a806fc3a96f6ff09f9a806f6f4d4df09f9a80204df09f9a806f4df09f9a806f4dc3a9f09f9a80f09f9a8020c3a94d6f6f4dc3a920f09f9a80f09f9a80f09f9a804d6f6fc3a90000000000000000000000000000000000000000000000000000539225fc1b1feed47a887b7f28bbc39b00f681f30000000000000000000000000000000000000000000044e80417e3837f90363c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140000000000000000000000000dfb2b5c84dd8cf1bb9b285359f95361443af7bfa000000000000000000000000d258e63182cff58744de38c18442d65d8454d47c0000000000000000000000002bd9124a4a497f9203c535dae11ab8b73793a50c0000000000000000000000000000000000000000000000000000000000000000f6487e5b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de1f0f573dad198c53280b8b3c60a60927611e96ea2e9034bb05d8180000000000005ee1ac4a2df2132c171c7ecb1e16068ea37abea60e34230800522751290d0000000000000000000000000000000000000000002e6e67728c988ab4e7cb0300000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a80c3a94d4d4d4d00000000000000000000000000000000000000000000000000000000ce191ff0e845c96033b9a1a641c0db8a5e5cf164ffffffffffffffffffffffffffffffffffffffffffff855614b0ba4f06eb8ea400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140000000000000000000000000b24e74d85c799edab28711e7baed44a9b479b2a200000000000000000000000079e0024b4e63751f64b86778a8c3aba9a2e818b600000000000000000000000062ab7ac1aed57c29796c1376b8b3b836d78a07d5000000000000000000000000000000000000000000000000000000000000000170be09c29c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9d8222df6b73dab031a36de7b577b8d6e0119c7984b8e704592c63200000000000031428c662f07d72505957e96792c27a8ead8585110681fd17ce2364edd050000000000000000000000000000000000000000003ed29b2660ef931d04aba200000000000000000000000000000000000000000000000000000000000000734d6f6f20c3a9f09f9a804d6ff09f9a806f6f20f09f9a80f09f9a8020c3a920206ff09f9a80206fc3a9f09f9a80c3a96f6f20c3a9f09f9a80f09f9a80f09f9a806f4dc3a920f09f9a804d6f20f09f9a80c3a9204dc3a9f09f9a80206fc3a96fc3a94d4df09f9a804d4df09f9a80204d4d4dc3a9000000000000000000000000000000000000000000000000003ac86afc57d1782d32ec61a2a7bcd5779cb694e0ffffffffffffffffffffffffffffffffffffffffffffe1e45123c2699b448554000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000001fe6519189f2123e53fb123029dfbe1faa3d53a80000000000000000000000009b9e5db619a9b045e3a515415144ea2365f3709f00000000000000000000000004759e42c9371b5bfbe6d0ac39b3087dccfa40c90000000000000000000000000000000000000000000000000000000000000000ee9cec350a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a75ff596e91fc5743735c5abc6d63f173a28e8a02c64d0783b123a00000000000004fda81002b0d07d3ed3c15ce75d89171783c7bc63970f51edb3cff6d52ff0000000000000000000000000000000000000000004eb4f15bbfc0c7705d7d6b000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a80c3a96f6f6f4d6ff09f9a804d4d4d6f4d4d4d4dc3a9c3a94d4d6f4d6ff09f9a80c3a94d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000660000000000000000000000000030573313f5577c816a48612d61e64af101f297a000000000000000000000000000000000000000000005d1b1ccc23eb54983c0c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000003be9e18dd4b0e421af2ddef85b25ee5e2602643300000000000000000000000055b698d4ea077625463e30d16690ab02bcfd85b10000000000000000000000006561a1e5e70ec491c65018b255354701a3284f3a000000000000000000000000000000000000000000000000000000000000000055bf2a182900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000db469339f168c06d384d0f72bee3ebc4421186ada40d85a4b040798000000000000163f0cb4e38104e40ba5882a458e9b7b6fb7d8b35cf4a32337475eba0e88000000000000000000000000000000000000000000972652c8db039091821ece000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a806f206f4d206f6f4d202020f09f9a80f09f9a80204df09f9a804d206f6f4df09f9a80f09f9a80c3a96f4dc3a96fc3a94df09f9a806f0000000000000000000000000008dfaa7fda0402a3970a052222b30d27000e70ac000000000000000000000000000000000000000000005e5ec51e7bcd86f73fbc000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000003500f521ae038594932f058606d5a7a33d079abb0000000000000000000000009927225f4fb72e319535f65ec05b6bc350ab4cfd0000000000000000000000007cf21513497e8364237214b81336dee3123c618100000000000000000000000000000000000000000000000000000000000000011afc93828b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004da909d70b05044a5653cb97b58ff15506fc6a0be68801c29cdbb232000000000000b02db02643b3d51ef0fe6151a433b0bb7857c02e13d97f76f31877e042e2000000000000000000000000000000000000000000adbf17506e55315dc85ac7000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000004643d27b1ee2a853bd499c83f292444b379eb72600000000000000000000000000000000000000000000211a435313599797124700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140000000000000000000000000195c04c57b529bd31fdaf043da8afbeb77840d5a000000000000000000000000abc28aef7953cb91c54801e5cb40358819776bea000000000000000000000000780f327993c8396a91b259251207ec7efdb5afba00000000000000000000000000000000000000000000000000000000000000006ff5946d79000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065f1230ab880ca3722c79c3a6dd87540be344da93f527316e541008a000000000000e0c41b8cdf2a6bff5fa391c18ca67f7829dffc981e66817ade819bb94859000000000000000000000000000000000000000000411dc29d82fcdafd60ce0000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a80206f204d6f4d6fc3a96f6ff09f9a80c3a96fc3a920c3a92020c3a9206f6f6ff09f9a8020f09f9a804df09f9a80c3a900000000000000000000000000000000000000c92a68abf4fd45b8f7de18bd8cb2fa959e473c0700000000000000000000000000000000000000000000246e34551878c34809ae00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140000000000000000000000000a7c37febfba5da50d7330fc88a0292e3b7511ff60000000000000000000000005c8c7efe2642658235c996a3691b52781670741f0000000000000000000000006d364af9c7abddc0b91f4131a0289c9fd35a02b300000000000000000000000000000000000000000000000000000000000000014f9ffc536600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002845fff610f25fad7d5ef76d3e3141c2be16b5280d5ea7992c8dafd800000000000044c86bc58034c185c7658484d58d62bef58453ae950663deeea10b4c313100000000000000000000000000000000000000000049a4aab166aa4e7de1826200000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a806f20f09f9a806f4d20f09f9a80f09f9a804d4dc3a9c3a9c3a94df09f9a80c3a94d6f4df09f9a806f6f00000000000000000000000000" + }, + { + "name": "random-(address[4][4],bytes8,(address,int24,bytes1,(address,address,int24,address,int96)[1])[1])", + "type": "(address[4][4],bytes8,(address,int24,bytes1,(address,address,int24,address,int96)[1])[1])", + "value": [ + [ + [ + "0x2846970672E7E5a6Ac8419370ebD697B8B02a056", + "0x906bdB00c444C4C6E1c61e711586a82c430Bc9A0", + "0xd7cd344e7C2Fb80E22a0cB87950db05385B64102", + "0xe7cF51d3E1e034eb69bD3ba59B1600aDE93f4689" + ], + [ + "0x6959f817d113E347A077B1E7bDB095f14ba97548", + "0x0A63CF1996a593b8baF74bfaBA73601500B2071a", + "0x89dcbd37Aae703956b32892b52922f470078385f", + "0x0f8e94983A662167C66b2a6617F4d25594AAfaBc" + ], + [ + "0x2eE84d60b49F431EB97c82d79D73f53d7c54ffeA", + "0xe35ccd4869eFEb7dcF9cb6255018dd32578B9914", + "0xA214481089AB85cDe63Abb74665098772811bf99", + "0x12C23B2CfE1Dc803Df2Da7142e7a25c8b8D7A3fB" + ], + [ + "0x4cCBaBf08b96897b938E7AbCD5407D5907e0cBbB", + "0x7722CC4DF41B310777851c79D8b411ca221072Bc", + "0x45a31833AD150F88FeFf6D391a5b72FCB7079144", + "0xD4434E3f5344F66cbe8F10C3069081c1C9Ce1169" + ] + ], + "0x277f5b039f9e336c", + [ + [ + "0x8Ea06565f19BED0a95FFC8c6351ce655a203dd07", + "3250358", + "0xe5", + [ + [ + "0x27f9513ea8cB83DF3BC1998CA06d9ca7883Ac6b3", + "0x072704bEbBC6f498D37272B8Fae3f471C1e34d6f", + "-1104074", + "0x3A96A9486f01Afb302120c20D0dD660997c3658C", + "-12233380421610704216933172426" + ] + ] + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x2846970672E7E5a6Ac8419370ebD697B8B02a056" + }, + { + "type": "address", + "value": "0x906bdB00c444C4C6E1c61e711586a82c430Bc9A0" + }, + { + "type": "address", + "value": "0xd7cd344e7C2Fb80E22a0cB87950db05385B64102" + }, + { + "type": "address", + "value": "0xe7cF51d3E1e034eb69bD3ba59B1600aDE93f4689" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x6959f817d113E347A077B1E7bDB095f14ba97548" + }, + { + "type": "address", + "value": "0x0A63CF1996a593b8baF74bfaBA73601500B2071a" + }, + { + "type": "address", + "value": "0x89dcbd37Aae703956b32892b52922f470078385f" + }, + { + "type": "address", + "value": "0x0f8e94983A662167C66b2a6617F4d25594AAfaBc" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x2eE84d60b49F431EB97c82d79D73f53d7c54ffeA" + }, + { + "type": "address", + "value": "0xe35ccd4869eFEb7dcF9cb6255018dd32578B9914" + }, + { + "type": "address", + "value": "0xA214481089AB85cDe63Abb74665098772811bf99" + }, + { + "type": "address", + "value": "0x12C23B2CfE1Dc803Df2Da7142e7a25c8b8D7A3fB" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x4cCBaBf08b96897b938E7AbCD5407D5907e0cBbB" + }, + { + "type": "address", + "value": "0x7722CC4DF41B310777851c79D8b411ca221072Bc" + }, + { + "type": "address", + "value": "0x45a31833AD150F88FeFf6D391a5b72FCB7079144" + }, + { + "type": "address", + "value": "0xD4434E3f5344F66cbe8F10C3069081c1C9Ce1169" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x277f5b039f9e336c" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x8Ea06565f19BED0a95FFC8c6351ce655a203dd07" + }, + { + "type": "number", + "value": "3250358" + }, + { + "type": "hexstring", + "value": "0xe5" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x27f9513ea8cB83DF3BC1998CA06d9ca7883Ac6b3" + }, + { + "type": "address", + "value": "0x072704bEbBC6f498D37272B8Fae3f471C1e34d6f" + }, + { + "type": "number", + "value": "-1104074" + }, + { + "type": "address", + "value": "0x3A96A9486f01Afb302120c20D0dD660997c3658C" + }, + { + "type": "number", + "value": "-12233380421610704216933172426" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506105be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906104f3565b60405180910390f35b610056610316565b61005e610316565b610066610342565b61006e61036f565b732846970672e7e5a6ac8419370ebd697b8b02a056815273906bdb00c444c4c6e1c61e711586a82c430bc9a0602082015273d7cd344e7c2fb80e22a0cb87950db05385b64102604082015273e7cf51d3e1e034eb69bd3ba59b1600ade93f4689606082015281526100dd61036f565b736959f817d113e347a077b1e7bdb095f14ba975488152730a63cf1996a593b8baf74bfaba73601500b2071a6020808301919091527389dcbd37aae703956b32892b52922f470078385f6040830152730f8e94983a662167c66b2a6617f4d25594aafabc606083015282015261015161036f565b732ee84d60b49f431eb97c82d79d73f53d7c54ffea815273e35ccd4869efeb7dcf9cb6255018dd32578b9914602082015273a214481089ab85cde63abb74665098772811bf996040808301919091527312c23b2cfe1dc803df2da7142e7a25c8b8d7a3fb60608301528201526101c561036f565b734ccbabf08b96897b938e7abcd5407d5907e0cbbb8152737722cc4df41b310777851c79d8b411ca221072bc6020808301919091527345a31833ad150f88feff6d391a5b72fcb7079144604083015273d4434e3f5344f66cbe8f10c3069081c1c9ce11696060808401919091528301919091529082526709dfd6c0e7e78cdb60c21b9082015261025361038d565b61025b6103ba565b738ea06565f19bed0a95ffc8c6351ce655a203dd078152623198b6602082015260e560f81b604082015261028d6103df565b6040805160a0810182527327f9513ea8cb83df3bc1998ca06d9ca7883ac6b3815273072704bebbc6f498d37272b8fae3f471c1e34d6f60208201526210d8c91981830152733a96a9486f01afb302120c20d0dd660997c3658c6060808301919091526b278737117f62968b0f1684c9196080830152908352830191909152908252820152919050565b6040518060600160405280610329610342565b81526000602082015260400161033d61038d565b905290565b60405180608001604052806004905b61035961036f565b8152602001906001900390816103515790505090565b60405180608001604052806004906020820280368337509192915050565b60405180602001604052806001905b6103a46103ba565b81526020019060019003908161039c5790505090565b60408051608081018252600080825260208201819052918101919091526060810161033d5b60405180602001604052806001905b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282526000199092019101816103ee5790505090565b806000805b600180821061044057506104ec565b835180516001600160a01b039081168852602080830151600290810b828b01526040808501516001600160f81b031916818c015260609485015194909190808c01895b888110156104cf5787518051881683528681015188168784015285810151850b8684015283810151881684840152608090810151600b0b908301529685019660a0909101908801610483565b5050506101009a909a019950509590950194505050600101610431565b5050505050565b8151610320820190826000805b600480821061050f5750610555565b845184845b8381101561053b5782516001600160a01b0316825260209283019290910190600101610514565b505050602094909401935060809290920191600101610500565b5050505060208301516001600160c01b031916610200830152604083015161058161022084018261042c565b509291505056fea26469706673582212201e23a3830dd219397d28d43cebabb88bb413e34ebf54ba12d9589e73796c6e1764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_3985b702 {\n address s_0;\n address s_1;\n int24 s_2;\n address s_3;\n int96 s_4;\n }\n\n struct S_e601a2ec {\n address s_0;\n int24 s_1;\n bytes1 s_2;\n S_3985b702[1] s_3;\n }\n\n struct S_c2d48df9 {\n address[4][4] s_0;\n bytes8 s_1;\n S_e601a2ec[1] s_2;\n }\n\n function test () public pure returns (S_c2d48df9 memory) {\n S_c2d48df9 memory r;\n {\n address[4][4] memory r_0;\n {\n address[4] memory r_0_0;\n {\n address r_0_0_0 = 0x2846970672E7E5a6Ac8419370ebD697B8B02a056;\n r_0_0[0] = r_0_0_0;\n }\n {\n address r_0_0_1 = 0x906bdB00c444C4C6E1c61e711586a82c430Bc9A0;\n r_0_0[1] = r_0_0_1;\n }\n {\n address r_0_0_2 = 0xd7cd344e7C2Fb80E22a0cB87950db05385B64102;\n r_0_0[2] = r_0_0_2;\n }\n {\n address r_0_0_3 = 0xe7cF51d3E1e034eb69bD3ba59B1600aDE93f4689;\n r_0_0[3] = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n address[4] memory r_0_1;\n {\n address r_0_1_0 = 0x6959f817d113E347A077B1E7bDB095f14ba97548;\n r_0_1[0] = r_0_1_0;\n }\n {\n address r_0_1_1 = 0x0A63CF1996a593b8baF74bfaBA73601500B2071a;\n r_0_1[1] = r_0_1_1;\n }\n {\n address r_0_1_2 = 0x89dcbd37Aae703956b32892b52922f470078385f;\n r_0_1[2] = r_0_1_2;\n }\n {\n address r_0_1_3 = 0x0f8e94983A662167C66b2a6617F4d25594AAfaBc;\n r_0_1[3] = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n {\n address[4] memory r_0_2;\n {\n address r_0_2_0 = 0x2eE84d60b49F431EB97c82d79D73f53d7c54ffeA;\n r_0_2[0] = r_0_2_0;\n }\n {\n address r_0_2_1 = 0xe35ccd4869eFEb7dcF9cb6255018dd32578B9914;\n r_0_2[1] = r_0_2_1;\n }\n {\n address r_0_2_2 = 0xA214481089AB85cDe63Abb74665098772811bf99;\n r_0_2[2] = r_0_2_2;\n }\n {\n address r_0_2_3 = 0x12C23B2CfE1Dc803Df2Da7142e7a25c8b8D7A3fB;\n r_0_2[3] = r_0_2_3;\n }\n r_0[2] = r_0_2;\n }\n {\n address[4] memory r_0_3;\n {\n address r_0_3_0 = 0x4cCBaBf08b96897b938E7AbCD5407D5907e0cBbB;\n r_0_3[0] = r_0_3_0;\n }\n {\n address r_0_3_1 = 0x7722CC4DF41B310777851c79D8b411ca221072Bc;\n r_0_3[1] = r_0_3_1;\n }\n {\n address r_0_3_2 = 0x45a31833AD150F88FeFf6D391a5b72FCB7079144;\n r_0_3[2] = r_0_3_2;\n }\n {\n address r_0_3_3 = 0xD4434E3f5344F66cbe8F10C3069081c1C9Ce1169;\n r_0_3[3] = r_0_3_3;\n }\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n bytes8 r_1 = bytes8(0x277f5b039f9e336c);\n r.s_1 = r_1;\n }\n {\n S_e601a2ec[1] memory r_2;\n {\n S_e601a2ec memory r_2_0;\n {\n address r_2_0_0 = 0x8Ea06565f19BED0a95FFC8c6351ce655a203dd07;\n r_2_0.s_0 = r_2_0_0;\n }\n {\n int24 r_2_0_1 = 3250358;\n r_2_0.s_1 = r_2_0_1;\n }\n {\n bytes1 r_2_0_2 = bytes1(0xe5);\n r_2_0.s_2 = r_2_0_2;\n }\n {\n S_3985b702[1] memory r_2_0_3;\n {\n S_3985b702 memory r_2_0_3_0;\n {\n address r_2_0_3_0_0 = 0x27f9513ea8cB83DF3BC1998CA06d9ca7883Ac6b3;\n r_2_0_3_0.s_0 = r_2_0_3_0_0;\n }\n {\n address r_2_0_3_0_1 = 0x072704bEbBC6f498D37272B8Fae3f471C1e34d6f;\n r_2_0_3_0.s_1 = r_2_0_3_0_1;\n }\n {\n int24 r_2_0_3_0_2 = -1104074;\n r_2_0_3_0.s_2 = r_2_0_3_0_2;\n }\n {\n address r_2_0_3_0_3 = 0x3A96A9486f01Afb302120c20D0dD660997c3658C;\n r_2_0_3_0.s_3 = r_2_0_3_0_3;\n }\n {\n int96 r_2_0_3_0_4 = -12233380421610704216933172426;\n r_2_0_3_0.s_4 = r_2_0_3_0_4;\n }\n r_2_0_3[0] = r_2_0_3_0;\n }\n r_2_0.s_3 = r_2_0_3;\n }\n r_2[0] = r_2_0;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000002846970672e7e5a6ac8419370ebd697b8b02a056000000000000000000000000906bdb00c444c4c6e1c61e711586a82c430bc9a0000000000000000000000000d7cd344e7c2fb80e22a0cb87950db05385b64102000000000000000000000000e7cf51d3e1e034eb69bd3ba59b1600ade93f46890000000000000000000000006959f817d113e347a077b1e7bdb095f14ba975480000000000000000000000000a63cf1996a593b8baf74bfaba73601500b2071a00000000000000000000000089dcbd37aae703956b32892b52922f470078385f0000000000000000000000000f8e94983a662167c66b2a6617f4d25594aafabc0000000000000000000000002ee84d60b49f431eb97c82d79d73f53d7c54ffea000000000000000000000000e35ccd4869efeb7dcf9cb6255018dd32578b9914000000000000000000000000a214481089ab85cde63abb74665098772811bf9900000000000000000000000012c23b2cfe1dc803df2da7142e7a25c8b8d7a3fb0000000000000000000000004ccbabf08b96897b938e7abcd5407d5907e0cbbb0000000000000000000000007722cc4df41b310777851c79d8b411ca221072bc00000000000000000000000045a31833ad150f88feff6d391a5b72fcb7079144000000000000000000000000d4434e3f5344f66cbe8f10c3069081c1c9ce1169277f5b039f9e336c0000000000000000000000000000000000000000000000000000000000000000000000008ea06565f19bed0a95ffc8c6351ce655a203dd0700000000000000000000000000000000000000000000000000000000003198b6e50000000000000000000000000000000000000000000000000000000000000000000000000000000000000027f9513ea8cb83df3bc1998ca06d9ca7883ac6b3000000000000000000000000072704bebbc6f498d37272b8fae3f471c1e34d6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef27360000000000000000000000003a96a9486f01afb302120c20d0dd660997c3658cffffffffffffffffffffffffffffffffffffffffd878c8ee809d6974f0e97b36" + }, + { + "name": "random-(bool,(address,((bool,int232,bytes7,int184[4]),bytes27[4][4]),(address),uint40),address)[]", + "type": "(bool,(address,((bool,int232,bytes7,int184[4]),bytes27[4][4]),(address),uint40),address)[]", + "value": [], + "verbose": { + "type": "array", + "value": [] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061033a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906101ee565b60405180910390f35b604080516000808252602082019092526060919081610083565b61007061008a565b8152602001906001900390816100685790505b5092915050565b60405180606001604052806000151581526020016100a66100b3565b8152600060209091015290565b604051806080016040528060006001600160a01b031681526020016100d66100f5565b8152604080516020808201835260008083529084019190915291015290565b604051806040016040528061010861011a565b8152602001610115610143565b905290565b604080516080810182526000808252602082018190529181019190915260608101610115610170565b60405180608001604052806004905b61015a610170565b8152602001906001900390816101525790505090565b60405180608001604052806004906020820280368337509192915050565b806000805b60048082106101a257506101e7565b835186845b838110156101cd57825164ffffffffff19168252602092830192909101906001016101a7565b505050608095909501945060209290920191600101610193565b5050505050565b60208082528251828201819052600091906040908185019086840185805b838110156102f65782518051151586528781015180516001600160a01b031689880152808901518051805115158a8a0152808b0151601c0b6060808b01919091528a8201516001600160c81b03191660808b0152908101519060a08a0190875b600481101561028c57835160160b8352928d0192918d019160010161026c565b50928c0151926102a06101208c018561018e565b8b850151516001600160a01b03166103208c01529093015164ffffffffff81166103408b015292506102d0915050565b508601516001600160a01b0316610360860152610380909401939186019160010161020c565b50929897505050505050505056fea26469706673582212205b83d211221052180d29d2ec58aaf3467c265c8e5758442c62b759d4e4fcf8bc64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_92d0fb33 {\n bool s_0;\n int232 s_1;\n bytes7 s_2;\n int184[4] s_3;\n }\n\n struct S_4f896fbe {\n S_92d0fb33 s_0;\n bytes27[4][4] s_1;\n }\n\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_de8c4e82 {\n address s_0;\n S_4f896fbe s_1;\n S_421683f8 s_2;\n uint40 s_3;\n }\n\n struct S_00af99da {\n bool s_0;\n S_de8c4e82 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_00af99da[] memory) {\n S_00af99da[] memory r = new S_00af99da[](0);\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,(bytes15,(bool,address,string,string[][3])[3])[1],(address,address[2]),string)", + "type": "(string,(bytes15,(bool,address,string,string[][3])[3])[1],(address,address[2]),string)", + "value": [ + "Moo é🚀oMéé🚀🚀é 🚀ooo 🚀o MoM 🚀éo🚀éooM🚀oM🚀é", + [ + [ + "0x93db45bbf1d25ef7b458c9ac9ae03c", + [ + [ + true, + "0x82f48CfEDCd65065bf606b1d57775b1c7BdF0129", + "Moo é🚀 Méé 🚀MoM o o é M", + [ + ["Moo é🚀 oo éMoo🚀 🚀é"], + [ + "Moo é🚀o ooo éééé oo🚀é🚀o oMM🚀Moooéé 🚀🚀🚀 ooo🚀M 🚀🚀 ooéoo🚀M", + "Moo é🚀éo🚀o🚀o🚀oo M ooMooé🚀oMoéoo 🚀oé🚀🚀M o🚀ooMéé🚀Méooé ééooé🚀🚀🚀 o", + "Moo é🚀o M é🚀 MMooo🚀🚀o🚀éoMM o o🚀ooééM oéo" + ], + [ + "Moo é🚀 o M🚀M 🚀o o🚀🚀🚀éM o🚀éoM", + "Moo é🚀", + "Moo é🚀oéMMé🚀oM é🚀éé🚀oMM🚀🚀 MooéMM" + ] + ] + ], + [ + false, + "0x5bDA6E0C556955762ceaB7C4dFf7C5a381928835", + "Moo é🚀o Mo é🚀🚀é🚀🚀 ", + [ + [], + ["Moo é🚀éééMM M", "Moo é🚀", "Moo é🚀oééééoMMééoéoo o"], + [ + "Moo é🚀éoooMMoMoMéMoéo🚀", + "Moo é🚀éoooo🚀éMééoo oé 🚀M🚀oé🚀éoooé🚀M Mo" + ] + ] + ], + [ + true, + "0x4dF7E949563B347015DD0dEf8Ab899a6aA01fdAa", + "Moo é🚀ééoM MoéMoM", + [ + [], + [ + "Moo é🚀o ", + "Moo é🚀oé🚀Mé", + "Moo é🚀 é", + "Moo é🚀MooooMoéoéo🚀🚀é o🚀ooM ééééo Moo 🚀 o" + ], + [ + "Moo é🚀ooM é🚀é🚀 oo é Mé🚀oM🚀Méo🚀MéM🚀🚀🚀o🚀Mé oooo ", + "Moo é🚀éMoo🚀ééMo o é o éé🚀 oo🚀ooéo o o🚀 oéMo🚀ééé", + "Moo é🚀o🚀oo 🚀é éM é🚀" + ] + ] + ] + ] + ] + ], + [ + "0x634cF8866c2471E86379B50C5DBcc71F2b50A636", + [ + "0x3f6247413d749e1eC92EDDee08E58aFE088d9202", + "0x67ac5ed51Aa774710A0074fb495C56802ed0baBa" + ] + ], + "Moo é🚀oo🚀MoMo" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMéé🚀🚀é 🚀ooo 🚀o MoM 🚀éo🚀éooM🚀oM🚀é" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x93db45bbf1d25ef7b458c9ac9ae03c" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x82f48CfEDCd65065bf606b1d57775b1c7BdF0129" + }, + { + "type": "string", + "value": "Moo é🚀 Méé 🚀MoM o o é M" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oo éMoo🚀 🚀é" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o ooo éééé oo🚀é🚀o oMM🚀Moooéé 🚀🚀🚀 ooo🚀M 🚀🚀 ooéoo🚀M" + }, + { + "type": "string", + "value": "Moo é🚀éo🚀o🚀o🚀oo M ooMooé🚀oMoéoo 🚀oé🚀🚀M o🚀ooMéé🚀Méooé ééooé🚀🚀🚀 o" + }, + { + "type": "string", + "value": "Moo é🚀o M é🚀 MMooo🚀🚀o🚀éoMM o o🚀ooééM oéo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 o M🚀M 🚀o o🚀🚀🚀éM o🚀éoM" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀oéMMé🚀oM é🚀éé🚀oMM🚀🚀 MooéMM" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x5bDA6E0C556955762ceaB7C4dFf7C5a381928835" + }, + { + "type": "string", + "value": "Moo é🚀o Mo é🚀🚀é🚀🚀 " + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éééMM M" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀oééééoMMééoéoo o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoooMMoMoMéMoéo🚀" + }, + { + "type": "string", + "value": "Moo é🚀éoooo🚀éMééoo oé 🚀M🚀oé🚀éoooé🚀M Mo" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x4dF7E949563B347015DD0dEf8Ab899a6aA01fdAa" + }, + { + "type": "string", + "value": "Moo é🚀ééoM MoéMoM" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o " + }, + { + "type": "string", + "value": "Moo é🚀oé🚀Mé" + }, + { + "type": "string", + "value": "Moo é🚀 é" + }, + { + "type": "string", + "value": "Moo é🚀MooooMoéoéo🚀🚀é o🚀ooM ééééo Moo 🚀 o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooM é🚀é🚀 oo é Mé🚀oM🚀Méo🚀MéM🚀🚀🚀o🚀Mé oooo " + }, + { + "type": "string", + "value": "Moo é🚀éMoo🚀ééMo o é o éé🚀 oo🚀ooéo o o🚀 oéMo🚀ééé" + }, + { + "type": "string", + "value": "Moo é🚀o🚀oo 🚀é éM é🚀" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x634cF8866c2471E86379B50C5DBcc71F2b50A636" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x3f6247413d749e1eC92EDDee08E58aFE088d9202" + }, + { + "type": "address", + "value": "0x67ac5ed51Aa774710A0074fb495C56802ed0baBa" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oo🚀MoMo" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506110cb806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610b40565b60405180910390f35b61005661097c565b61005e61097c565b60006040518060800160405280604a8152602001610eb9604a91398252506100846109b0565b61008c6109dd565b6e24f6d16efc7497bded16326b26b80f608a1b81526100a96109fc565b6100b1610a29565b600181527382f48cfedcd65065bf606b1d57775b1c7bdf012960208083019190915260408051606081019091526025808252600092610d8e908301396040830152506100fb610a4c565b604080516001808252818301909252600091816020015b606081526020019060019003908161011257905050905060006040518060400160405280601e81526020017f4d6f6f20c3a9f09f9a80206f6f20c3a94d6f6ff09f9a8020f09f9a80c3a900008152509050808260008151811061017757610177610d01565b602090810291909101015250815260408051600380825260808201909252600091816020015b606081526020019060019003908161019d57905050905060006040518060a0016040528060618152602001610dd660619139905080826000815181106101e5576101e5610d01565b60200260200101819052505060006040518060a0016040528060728152602001611024607291399050808260018151811061022257610222610d01565b6020026020010181905250506000604051806060016040528060408152602001610fab604091399050808260028151811061025f5761025f610d01565b6020908102919091018101919091528301919091525060408051600380825260808201909252600091816020015b606081526020019060019003908161028d5790505090506000604051806060016040528060348152602001610e8560349139905080826000815181106102d5576102d5610d01565b60200260200101819052505060006040518060400160405280600a8152602001689adede418753e13f3560b71b8152509050808260018151811061031b5761031b610d01565b6020026020010181905250506000604051806060016040528060398152602001610feb603991399050808260028151811061035857610358610d01565b602090810291909101015250604082015260608201528152610378610a29565b6000808252735bda6e0c556955762ceab7c4dff7c5a381928835602080840191909152604080516060810190915260258082529091610f44908301396040830152506103c2610a4c565b60408051600080825260208201909252816103ed565b60608152602001906001900390816103d85790505b5082525060408051600380825260808201909252600091816020015b60608152602001906001900390816104095790505090506000604051806040016040528060148152602001734d6f6f20c3a9f09f9a80c3a9c3a9c3a94d4d204d60601b8152509050808260008151811061046557610465610d01565b60200260200101819052505060006040518060400160405280600a8152602001689adede418753e13f3560b71b815250905080826001815181106104ab576104ab610d01565b6020026020010181905250506000604051806060016040528060218152602001610d1860219139905080826002815181106104e8576104e8610d01565b6020908102919091018101919091528301919091525060408051600280825260608201909252600091816020015b606081526020019060019003908161051657905050905060006040518060400160405280602081526020017f4d6f6f20c3a9f09f9a80c3a96f6f6f4d4d6f4d6f4dc3a94d6fc3a96ff09f9a808152509050808260008151811061057b5761057b610d01565b6020026020010181905250506000604051806080016040528060428152602001610f6960429139905080826001815181106105b8576105b8610d01565b602090810291909101015250808260026020020152506060820152808260016020020152506105e5610a29565b60018152734df7e949563b347015dd0def8ab899a6aa01fdaa602080830191909152604080518082018252601881527f4d6f6f20c3a9f09f9a80c3a9c3a96f4d204d6fc3a94d6f4d000000000000000092810192909252820152610647610a4c565b6040805160008082526020820190925281610672565b606081526020019060019003908161065d5790505b5082525060408051600480825260a08201909252600091816020015b606081526020019060019003908161068e57905050905060006040518060400160405280600c81526020016b026b7b79061d4f84fcd4037960a51b815250905080826000815181106106e2576106e2610d01565b6020026020010181905250506000604051806040016040528060148152602001734d6f6f20c3a9f09f9a806fc3a9f09f9a804dc3a960601b8152509050808260018151811061073357610733610d01565b60200260200101819052505060006040518060400160405280600d81526020016c4d6f6f20c3a9f09f9a8020c3a960981b8152509050808260028151811061077d5761077d610d01565b6020026020010181905250506000604051806080016040528060418152602001610f0360419139905080826003815181106107ba576107ba610d01565b6020908102919091018101919091528301919091525060408051600380825260808201909252600091816020015b60608152602001906001900390816107e85790505090506000604051806080016040528060558152602001610d39605591399050808260008151811061083057610830610d01565b60200260200101819052505060006040518060800160405280604e8152602001610e37604e91399050808260018151811061086d5761086d610d01565b6020026020010181905250506000604051806060016040528060238152602001610db360239139905080826002815181106108aa576108aa610d01565b602090810291909101810191909152604080850193909352606085019390935250830191909152828101919091529082528201526108e6610a73565b73634cf8866c2471e86379b50c5dbcc71f2b50a6368152610905610a92565b733f6247413d749e1ec92eddee08e58afe088d920281527367ac5ed51aa774710a0074fb495c56802ed0baba60208083019190915282810191909152604083810192909252815180830190925260148252734d6f6f20c3a9f09f9a806f6ff09f9a804d6f4d6f60601b908201526060820152919050565b6040518060800160405280606081526020016109966109b0565b81526020016109a3610a73565b8152602001606081525090565b60405180602001604052806001905b6109c76109dd565b8152602001906001900390816109bf5790505090565b6040805180820190915260008152602081016109f76109fc565b905290565b60405180606001604052806003905b610a13610a29565b815260200190600190039081610a0b5790505090565b604080516080810182526000808252602082015260609181018290529081016109f75b60405180606001604052806003905b6060815260200190600190039081610a5b5790505090565b604051806040016040528060006001600160a01b031681526020016109f75b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b81811015610ad657602081850181015186830182015201610aba565b81811115610ae8576000602083870101525b50601f01601f19169290920160200192915050565b80516001600160a01b03908116835260208083015181850160005b6002811015610b37578251851682529183019190830190600101610b18565b50505050505050565b602081526000825160c06020840152610b5c60e0840182610ab0565b602085810151858303601f190160408701529192508290810160005b6001811015610cc4578482038352835170ffffffffffffffffffffffffffffffffff19815116835260208101519050604060208401526040830160a0840160005b6003811015610cac57603f19868303018352835180511515835260018060a01b036020820151166020840152604081015160806040850152610bfe6080850182610ab0565b60609283015185820386850152929091508190810160005b6003811015610c8f578382038352845180518084526020918201918085019190600582901b86010160005b82811015610c7257601f19878303018452610c5d828651610ab0565b60209586019594909401939150600101610c41565b506020988901989690960195945050506001919091019050610c16565b506020978801979690960195945050506001919091019050610bb9565b50602096870196959095019493505050600101610b78565b5060408701519350610cd96060870185610afd565b6060870151868203601f190160c08801529350610cf68185610ab0565b979650505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806fc3a9c3a9c3a9c3a96f4d4dc3a9c3a96fc3a96f6f206f4d6f6f20c3a9f09f9a806f6f4d20c3a9f09f9a80c3a9f09f9a80206f6f20c3a9204dc3a9f09f9a806f4df09f9a804dc3a96ff09f9a804dc3a94df09f9a80f09f9a80f09f9a806ff09f9a804dc3a920206f6f6f6f204d6f6f20c3a9f09f9a80204dc3a9c3a92020f09f9a804d6f4d2020206f206f20c3a920204d4d6f6f20c3a9f09f9a806ff09f9a806f6f20f09f9a80c3a920c3a94d20c3a9f09f9a804d6f6f20c3a9f09f9a806f206f6f6f20c3a9c3a9c3a9c3a9206f6ff09f9a80c3a9f09f9a806f206f4d4df09f9a804d6f6f6fc3a9c3a920f09f9a80f09f9a80f09f9a80206f6f6ff09f9a804d20f09f9a80f09f9a80206f6fc3a96f6ff09f9a804d4d6f6f20c3a9f09f9a80c3a94d6f6ff09f9a80c3a9c3a94d6f206f20c3a920206f20c3a9c3a9f09f9a80206f6ff09f9a806f6fc3a96f206f206ff09f9a80206fc3a94d6ff09f9a80c3a9c3a9c3a94d6f6f20c3a9f09f9a80206f204df09f9a804d20f09f9a806f206ff09f9a80f09f9a80f09f9a80c3a94d206ff09f9a80c3a96f4d4d6f6f20c3a9f09f9a806f4dc3a9c3a9f09f9a80f09f9a80c3a920f09f9a806f6f6f2020f09f9a806f204d6f4d20f09f9a80c3a96ff09f9a80c3a96f6f4df09f9a806f4df09f9a80c3a94d6f6f20c3a9f09f9a804d6f6f6f6f4d6fc3a96fc3a96ff09f9a80f09f9a80c3a920206ff09f9a806f6f4d20c3a9c3a9c3a9c3a96f20204d6f6f20f09f9a80206f4d6f6f20c3a9f09f9a806f204d6f2020c3a9f09f9a80f09f9a80c3a9f09f9a80f09f9a80204d6f6f20c3a9f09f9a80c3a96f6f6f6ff09f9a80c3a94dc3a9c3a96f6f206fc3a920f09f9a804df09f9a806fc3a9f09f9a80c3a96f6f6fc3a9f09f9a804d20204d6f4d6f6f20c3a9f09f9a806f204d20c3a9f09f9a80204d4d6f6f6ff09f9a80f09f9a806ff09f9a80c3a96f4d4d206f206ff09f9a806f6fc3a9c3a94d206fc3a96f4d6f6f20c3a9f09f9a806fc3a94d4dc3a9f09f9a806f4d20c3a9f09f9a80c3a9c3a9f09f9a806f4d4df09f9a80f09f9a80204d6f6fc3a94d4d4d6f6f20c3a9f09f9a80c3a96ff09f9a806ff09f9a806ff09f9a806f6f204d206f6f4d6f6fc3a9f09f9a806f4d6fc3a96f6f20f09f9a806fc3a9f09f9a80f09f9a804d206ff09f9a806f6f4dc3a9c3a9f09f9a804dc3a96f6fc3a920c3a9c3a96f6fc3a9f09f9a80f09f9a80f09f9a80206fa26469706673582212204eb7f6a745320e516a4ac63298a5271e0edb5f7a96eb85f51f2bcb725b06fe3c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8205038c {\n bool s_0;\n address s_1;\n string s_2;\n string[][3] s_3;\n }\n\n struct S_f45a93f2 {\n bytes15 s_0;\n S_8205038c[3] s_1;\n }\n\n struct S_2ab2cf39 {\n address s_0;\n address[2] s_1;\n }\n\n struct S_9203f8cb {\n string s_0;\n S_f45a93f2[1] s_1;\n S_2ab2cf39 s_2;\n string s_3;\n }\n\n function test () public pure returns (S_9203f8cb memory) {\n S_9203f8cb memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oMéé🚀🚀é 🚀ooo 🚀o MoM 🚀éo🚀éooM🚀oM🚀é\";\n r.s_0 = r_0;\n }\n {\n S_f45a93f2[1] memory r_1;\n {\n S_f45a93f2 memory r_1_0;\n {\n bytes15 r_1_0_0 = bytes15(0x93db45bbf1d25ef7b458c9ac9ae03c);\n r_1_0.s_0 = r_1_0_0;\n }\n {\n S_8205038c[3] memory r_1_0_1;\n {\n S_8205038c memory r_1_0_1_0;\n {\n bool r_1_0_1_0_0 = true;\n r_1_0_1_0.s_0 = r_1_0_1_0_0;\n }\n {\n address r_1_0_1_0_1 = 0x82f48CfEDCd65065bf606b1d57775b1c7BdF0129;\n r_1_0_1_0.s_1 = r_1_0_1_0_1;\n }\n {\n string memory r_1_0_1_0_2 = unicode\"Moo é🚀 Méé 🚀MoM o o é M\";\n r_1_0_1_0.s_2 = r_1_0_1_0_2;\n }\n {\n string[][3] memory r_1_0_1_0_3;\n {\n string[] memory r_1_0_1_0_3_0 = new string[](1);\n {\n string memory r_1_0_1_0_3_0_0 = unicode\"Moo é🚀 oo éMoo🚀 🚀é\";\n r_1_0_1_0_3_0[0] = r_1_0_1_0_3_0_0;\n }\n r_1_0_1_0_3[0] = r_1_0_1_0_3_0;\n }\n {\n string[] memory r_1_0_1_0_3_1 = new string[](3);\n {\n string memory r_1_0_1_0_3_1_0 = unicode\"Moo é🚀o ooo éééé oo🚀é🚀o oMM🚀Moooéé 🚀🚀🚀 ooo🚀M 🚀🚀 ooéoo🚀M\";\n r_1_0_1_0_3_1[0] = r_1_0_1_0_3_1_0;\n }\n {\n string memory r_1_0_1_0_3_1_1 = unicode\"Moo é🚀éo🚀o🚀o🚀oo M ooMooé🚀oMoéoo 🚀oé🚀🚀M o🚀ooMéé🚀Méooé ééooé🚀🚀🚀 o\";\n r_1_0_1_0_3_1[1] = r_1_0_1_0_3_1_1;\n }\n {\n string memory r_1_0_1_0_3_1_2 = unicode\"Moo é🚀o M é🚀 MMooo🚀🚀o🚀éoMM o o🚀ooééM oéo\";\n r_1_0_1_0_3_1[2] = r_1_0_1_0_3_1_2;\n }\n r_1_0_1_0_3[1] = r_1_0_1_0_3_1;\n }\n {\n string[] memory r_1_0_1_0_3_2 = new string[](3);\n {\n string memory r_1_0_1_0_3_2_0 = unicode\"Moo é🚀 o M🚀M 🚀o o🚀🚀🚀éM o🚀éoM\";\n r_1_0_1_0_3_2[0] = r_1_0_1_0_3_2_0;\n }\n {\n string memory r_1_0_1_0_3_2_1 = unicode\"Moo é🚀\";\n r_1_0_1_0_3_2[1] = r_1_0_1_0_3_2_1;\n }\n {\n string memory r_1_0_1_0_3_2_2 = unicode\"Moo é🚀oéMMé🚀oM é🚀éé🚀oMM🚀🚀 MooéMM\";\n r_1_0_1_0_3_2[2] = r_1_0_1_0_3_2_2;\n }\n r_1_0_1_0_3[2] = r_1_0_1_0_3_2;\n }\n r_1_0_1_0.s_3 = r_1_0_1_0_3;\n }\n r_1_0_1[0] = r_1_0_1_0;\n }\n {\n S_8205038c memory r_1_0_1_1;\n {\n bool r_1_0_1_1_0 = false;\n r_1_0_1_1.s_0 = r_1_0_1_1_0;\n }\n {\n address r_1_0_1_1_1 = 0x5bDA6E0C556955762ceaB7C4dFf7C5a381928835;\n r_1_0_1_1.s_1 = r_1_0_1_1_1;\n }\n {\n string memory r_1_0_1_1_2 = unicode\"Moo é🚀o Mo é🚀🚀é🚀🚀 \";\n r_1_0_1_1.s_2 = r_1_0_1_1_2;\n }\n {\n string[][3] memory r_1_0_1_1_3;\n {\n string[] memory r_1_0_1_1_3_0 = new string[](0);\n r_1_0_1_1_3[0] = r_1_0_1_1_3_0;\n }\n {\n string[] memory r_1_0_1_1_3_1 = new string[](3);\n {\n string memory r_1_0_1_1_3_1_0 = unicode\"Moo é🚀éééMM M\";\n r_1_0_1_1_3_1[0] = r_1_0_1_1_3_1_0;\n }\n {\n string memory r_1_0_1_1_3_1_1 = unicode\"Moo é🚀\";\n r_1_0_1_1_3_1[1] = r_1_0_1_1_3_1_1;\n }\n {\n string memory r_1_0_1_1_3_1_2 = unicode\"Moo é🚀oééééoMMééoéoo o\";\n r_1_0_1_1_3_1[2] = r_1_0_1_1_3_1_2;\n }\n r_1_0_1_1_3[1] = r_1_0_1_1_3_1;\n }\n {\n string[] memory r_1_0_1_1_3_2 = new string[](2);\n {\n string memory r_1_0_1_1_3_2_0 = unicode\"Moo é🚀éoooMMoMoMéMoéo🚀\";\n r_1_0_1_1_3_2[0] = r_1_0_1_1_3_2_0;\n }\n {\n string memory r_1_0_1_1_3_2_1 = unicode\"Moo é🚀éoooo🚀éMééoo oé 🚀M🚀oé🚀éoooé🚀M Mo\";\n r_1_0_1_1_3_2[1] = r_1_0_1_1_3_2_1;\n }\n r_1_0_1_1_3[2] = r_1_0_1_1_3_2;\n }\n r_1_0_1_1.s_3 = r_1_0_1_1_3;\n }\n r_1_0_1[1] = r_1_0_1_1;\n }\n {\n S_8205038c memory r_1_0_1_2;\n {\n bool r_1_0_1_2_0 = true;\n r_1_0_1_2.s_0 = r_1_0_1_2_0;\n }\n {\n address r_1_0_1_2_1 = 0x4dF7E949563B347015DD0dEf8Ab899a6aA01fdAa;\n r_1_0_1_2.s_1 = r_1_0_1_2_1;\n }\n {\n string memory r_1_0_1_2_2 = unicode\"Moo é🚀ééoM MoéMoM\";\n r_1_0_1_2.s_2 = r_1_0_1_2_2;\n }\n {\n string[][3] memory r_1_0_1_2_3;\n {\n string[] memory r_1_0_1_2_3_0 = new string[](0);\n r_1_0_1_2_3[0] = r_1_0_1_2_3_0;\n }\n {\n string[] memory r_1_0_1_2_3_1 = new string[](4);\n {\n string memory r_1_0_1_2_3_1_0 = unicode\"Moo é🚀o \";\n r_1_0_1_2_3_1[0] = r_1_0_1_2_3_1_0;\n }\n {\n string memory r_1_0_1_2_3_1_1 = unicode\"Moo é🚀oé🚀Mé\";\n r_1_0_1_2_3_1[1] = r_1_0_1_2_3_1_1;\n }\n {\n string memory r_1_0_1_2_3_1_2 = unicode\"Moo é🚀 é\";\n r_1_0_1_2_3_1[2] = r_1_0_1_2_3_1_2;\n }\n {\n string memory r_1_0_1_2_3_1_3 = unicode\"Moo é🚀MooooMoéoéo🚀🚀é o🚀ooM ééééo Moo 🚀 o\";\n r_1_0_1_2_3_1[3] = r_1_0_1_2_3_1_3;\n }\n r_1_0_1_2_3[1] = r_1_0_1_2_3_1;\n }\n {\n string[] memory r_1_0_1_2_3_2 = new string[](3);\n {\n string memory r_1_0_1_2_3_2_0 = unicode\"Moo é🚀ooM é🚀é🚀 oo é Mé🚀oM🚀Méo🚀MéM🚀🚀🚀o🚀Mé oooo \";\n r_1_0_1_2_3_2[0] = r_1_0_1_2_3_2_0;\n }\n {\n string memory r_1_0_1_2_3_2_1 = unicode\"Moo é🚀éMoo🚀ééMo o é o éé🚀 oo🚀ooéo o o🚀 oéMo🚀ééé\";\n r_1_0_1_2_3_2[1] = r_1_0_1_2_3_2_1;\n }\n {\n string memory r_1_0_1_2_3_2_2 = unicode\"Moo é🚀o🚀oo 🚀é éM é🚀\";\n r_1_0_1_2_3_2[2] = r_1_0_1_2_3_2_2;\n }\n r_1_0_1_2_3[2] = r_1_0_1_2_3_2;\n }\n r_1_0_1_2.s_3 = r_1_0_1_2_3;\n }\n r_1_0_1[2] = r_1_0_1_2;\n }\n r_1_0.s_1 = r_1_0_1;\n }\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n S_2ab2cf39 memory r_2;\n {\n address r_2_0 = 0x634cF8866c2471E86379B50C5DBcc71F2b50A636;\n r_2.s_0 = r_2_0;\n }\n {\n address[2] memory r_2_1;\n {\n address r_2_1_0 = 0x3f6247413d749e1eC92EDDee08E58aFE088d9202;\n r_2_1[0] = r_2_1_0;\n }\n {\n address r_2_1_1 = 0x67ac5ed51Aa774710A0074fb495C56802ed0baBa;\n r_2_1[1] = r_2_1_1;\n }\n r_2.s_1 = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀oo🚀MoMo\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000634cf8866c2471e86379b50c5dbcc71f2b50a6360000000000000000000000003f6247413d749e1ec92eddee08e58afe088d920200000000000000000000000067ac5ed51aa774710a0074fb495c56802ed0baba0000000000000000000000000000000000000000000000000000000000001040000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a806f4dc3a9c3a9f09f9a80f09f9a80c3a920f09f9a806f6f6f2020f09f9a806f204d6f4d20f09f9a80c3a96ff09f9a80c3a96f6f4df09f9a806f4df09f9a80c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002093db45bbf1d25ef7b458c9ac9ae03c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000009a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000082f48cfedcd65065bf606b1d57775b1c7bdf0129000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a80204dc3a9c3a92020f09f9a804d6f4d2020206f206f20c3a920204d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a80206f6f20c3a94d6f6ff09f9a8020f09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a806f206f6f6f20c3a9c3a9c3a9c3a9206f6ff09f9a80c3a9f09f9a806f206f4d4df09f9a804d6f6f6fc3a9c3a920f09f9a80f09f9a80f09f9a80206f6f6ff09f9a804d20f09f9a80f09f9a80206f6fc3a96f6ff09f9a804d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000724d6f6f20c3a9f09f9a80c3a96ff09f9a806ff09f9a806ff09f9a806f6f204d206f6f4d6f6fc3a9f09f9a806f4d6fc3a96f6f20f09f9a806fc3a9f09f9a80f09f9a804d206ff09f9a806f6f4dc3a9c3a9f09f9a804dc3a96f6fc3a920c3a9c3a96f6fc3a9f09f9a80f09f9a80f09f9a80206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000404d6f6f20c3a9f09f9a806f204d20c3a9f09f9a80204d4d6f6f6ff09f9a80f09f9a806ff09f9a80c3a96f4d4d206f206ff09f9a806f6fc3a9c3a94d206fc3a96f0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a80206f204df09f9a804d20f09f9a806f206ff09f9a80f09f9a80f09f9a80c3a94d206ff09f9a80c3a96f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a806fc3a94d4dc3a9f09f9a806f4d20c3a9f09f9a80c3a9c3a9f09f9a806f4d4df09f9a80f09f9a80204d6f6fc3a94d4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005bda6e0c556955762ceab7c4dff7c5a381928835000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a806f204d6f2020c3a9f09f9a80f09f9a80c3a9f09f9a80f09f9a80200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a80c3a9c3a9c3a94d4d204d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a806fc3a9c3a9c3a9c3a96f4d4dc3a9c3a96fc3a96f6f206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000204d6f6f20c3a9f09f9a80c3a96f6f6f4d4d6f4d6f4dc3a94d6fc3a96ff09f9a8000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a80c3a96f6f6f6ff09f9a80c3a94dc3a9c3a96f6f206fc3a920f09f9a804df09f9a806fc3a9f09f9a80c3a96f6f6fc3a9f09f9a804d20204d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000004df7e949563b347015dd0def8ab899a6aa01fdaa000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a80c3a9c3a96f4d204d6fc3a94d6f4d000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a806f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a806fc3a9f09f9a804dc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a8020c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a804d6f6f6f6f4d6fc3a96fc3a96ff09f9a80f09f9a80c3a920206ff09f9a806f6f4d20c3a9c3a9c3a9c3a96f20204d6f6f20f09f9a80206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a806f6f4d20c3a9f09f9a80c3a9f09f9a80206f6f20c3a9204dc3a9f09f9a806f4df09f9a804dc3a96ff09f9a804dc3a94df09f9a80f09f9a80f09f9a806ff09f9a804dc3a920206f6f6f6f200000000000000000000000000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a80c3a94d6f6ff09f9a80c3a9c3a94d6f206f20c3a920206f20c3a9c3a9f09f9a80206f6ff09f9a806f6fc3a96f206f206ff09f9a80206fc3a94d6ff09f9a80c3a9c3a9c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a806ff09f9a806f6f20f09f9a80c3a920c3a94d20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a806f6ff09f9a804d6f4d6f000000000000000000000000" + }, + { + "name": "random-(string,(string),bytes20[],string,(bool,bytes29,((address),uint200,uint48,int120,bytes11),uint8))[1]", + "type": "(string,(string),bytes20[],string,(bool,bytes29,((address),uint200,uint48,int120,bytes11),uint8))[1]", + "value": [ + [ + "Moo é🚀M 🚀MooéMMo", + ["Moo é🚀M🚀🚀éo"], + [ + "0x19ef5f9cf0d3f035da12b12d73c4c63148bbb79a", + "0x369318c17702729ea7b06f5e464698305b3a7675", + "0x90df78bc128c9c32e1cac02938d1a09e8fd02b35" + ], + "Moo é🚀é🚀🚀", + [ + true, + "0xfa99041c32bcc7ff0c463f59816b7486ce5a7ab76ac103e28503bfd22a", + [ + ["0xD11cf919f8Cbab59479dd9D8c73e3f1d08ba6404"], + "1521341453638934311885508631277296040204198640852816840625044", + "158869959867570", + "617178504167975460931480648441433358", + "0x5bedc96093fb42b4f57bcb" + ], + "27" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M 🚀MooéMMo" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M🚀🚀éo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x19ef5f9cf0d3f035da12b12d73c4c63148bbb79a" + }, + { + "type": "hexstring", + "value": "0x369318c17702729ea7b06f5e464698305b3a7675" + }, + { + "type": "hexstring", + "value": "0x90df78bc128c9c32e1cac02938d1a09e8fd02b35" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀é🚀🚀" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xfa99041c32bcc7ff0c463f59816b7486ce5a7ab76ac103e28503bfd22a" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xD11cf919f8Cbab59479dd9D8c73e3f1d08ba6404" + } + ] + }, + { + "type": "number", + "value": "1521341453638934311885508631277296040204198640852816840625044" + }, + { + "type": "number", + "value": "158869959867570" + }, + { + "type": "number", + "value": "617178504167975460931480648441433358" + }, + { + "type": "hexstring", + "value": "0x5bedc96093fb42b4f57bcb" + } + ] + }, + { + "type": "number", + "value": "27" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506105f2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061042c565b60405180910390f35b61005661030f565b61005e61030f565b61006661033c565b604080518082018252601881527f4d6f6f20c3a9f09f9a804d20f09f9a804d6f6fc3a94d4d6f000000000000000060208083019190915290835281518082018352606081528251808401845260168152754d6f6f20c3a9f09f9a804df09f9a80f09f9a80c3a96f60501b81840152815290830152805160038082526080820190925260009181602001602082028036833750508151919250730cf7afce7869f81aed095896b9e26318a45ddbcd60611b91829150839060009061012b5761012b6105a6565b6001600160601b03199092166020928302919091019091015250805173369318c17702729ea7b06f5e464698305b3a767560601b90819083906001908110610175576101756105a6565b6001600160601b0319909216602092830291909101909101525080517390df78bc128c9c32e1cac02938d1a09e8fd02b3560601b908190839060029081106101bf576101bf6105a6565b6001600160601b0319909216602092830291909101820152604080850193909352825180840190935260148352729adede418753e13f35018753e13f3501e13f3560671b90830152506060820152610215610384565b600181527ffa99041c32bcc7ff0c463f59816b7486ce5a7ab76ac103e28503bfd22a00000060208201526102766040805160c081018252600060a0820181815282526020820181905291810182905260608101829052608081019190915290565b604080516020808201835273d11cf919f8cbab59479dd9d8c73e3f1d08ba6404825290835278f25d19e54958712c8c1e81f24f48433dfa861b14c95bf00b949083015265907dcb85fcb2828201526e76dd3fe54c3a2f65886709df908d0e6060808401919091526a5bedc96093fb42b4f57bcb60a81b60808085019190915291840192909252601b918301919091528201528152919050565b60405180602001604052806001905b61032661033c565b81526020019060019003908161031e5790505090565b6040518060a00160405280606081526020016103646040518060200160405280606081525090565b8152602001606081526020016060815260200161037f610384565b905290565b60408051608081018252600080825260208201529081016103d26040805160c081018252600060a0820181815282526020820181905291810182905260608101829052608081019190915290565b8152600060209091015290565b6000815180845260005b81811015610405576020818501810151868301820152016103e9565b81811115610417576000602083870101525b50601f01601f19169290920160200192915050565b602080825260009060408382018185018685805b600180821061044f5750610598565b601f198a86030186528351610180815181885261046e828901826103df565b838c01518982038a8e0152518c8252909250905061048e8b8301826103df565b838b01518982038a8d01528051808352908d019350879250908c01905b808310156104d25783516001600160601b0319168252928c019291850191908c01906104ab565b5060609450848401519250888103858a01526104ee81846103df565b608094850151805115158b87015260208082015162ffffff191660a08d01526040808301518051516001600160a01b031660c08f0152918201516001600160c81b031660e08e015281015165ffffffffffff166101008d0152606080820151600e0b6101208e0152908701516001600160a81b0319166101408d015281015160ff166101608c0152909550939250610584915050565b505094870194935091860191600101610440565b509198975050505050505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220d25dd9b7710cd9c5fb72902f17cafd228ee90cfb9f740fc5c9e244f5d555ecd064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_561ac612 {\n S_421683f8 s_0;\n uint200 s_1;\n uint48 s_2;\n int120 s_3;\n bytes11 s_4;\n }\n\n struct S_3f844a37 {\n bool s_0;\n bytes29 s_1;\n S_561ac612 s_2;\n uint8 s_3;\n }\n\n struct S_a45df11a {\n string s_0;\n S_97fc4627 s_1;\n bytes20[] s_2;\n string s_3;\n S_3f844a37 s_4;\n }\n\n function test () public pure returns (S_a45df11a[1] memory) {\n S_a45df11a[1] memory r;\n {\n S_a45df11a memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀M 🚀MooéMMo\";\n r_0.s_0 = r_0_0;\n }\n {\n S_97fc4627 memory r_0_1;\n {\n string memory r_0_1_0 = unicode\"Moo é🚀M🚀🚀éo\";\n r_0_1.s_0 = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n {\n bytes20[] memory r_0_2 = new bytes20[](3);\n {\n bytes20 r_0_2_0 = bytes20(0x19Ef5F9cf0d3F035DA12B12D73c4c63148BBB79a);\n r_0_2[0] = r_0_2_0;\n }\n {\n bytes20 r_0_2_1 = bytes20(0x369318C17702729EA7b06F5e464698305B3a7675);\n r_0_2[1] = r_0_2_1;\n }\n {\n bytes20 r_0_2_2 = bytes20(0x90Df78Bc128C9c32e1caC02938d1a09E8fD02b35);\n r_0_2[2] = r_0_2_2;\n }\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀é🚀🚀\";\n r_0.s_3 = r_0_3;\n }\n {\n S_3f844a37 memory r_0_4;\n {\n bool r_0_4_0 = true;\n r_0_4.s_0 = r_0_4_0;\n }\n {\n bytes29 r_0_4_1 = bytes29(0xfa99041c32bcc7ff0c463f59816b7486ce5a7ab76ac103e28503bfd22a);\n r_0_4.s_1 = r_0_4_1;\n }\n {\n S_561ac612 memory r_0_4_2;\n {\n S_421683f8 memory r_0_4_2_0;\n {\n address r_0_4_2_0_0 = 0xD11cf919f8Cbab59479dd9D8c73e3f1d08ba6404;\n r_0_4_2_0.s_0 = r_0_4_2_0_0;\n }\n r_0_4_2.s_0 = r_0_4_2_0;\n }\n {\n uint200 r_0_4_2_1 = 1521341453638934311885508631277296040204198640852816840625044;\n r_0_4_2.s_1 = r_0_4_2_1;\n }\n {\n uint48 r_0_4_2_2 = 158869959867570;\n r_0_4_2.s_2 = r_0_4_2_2;\n }\n {\n int120 r_0_4_2_3 = 617178504167975460931480648441433358;\n r_0_4_2.s_3 = r_0_4_2_3;\n }\n {\n bytes11 r_0_4_2_4 = bytes11(0x5bedc96093fb42b4f57bcb);\n r_0_4_2.s_4 = r_0_4_2_4;\n }\n r_0_4.s_2 = r_0_4_2;\n }\n {\n uint8 r_0_4_3 = 27;\n r_0_4.s_3 = r_0_4_3;\n }\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000001fa99041c32bcc7ff0c463f59816b7486ce5a7ab76ac103e28503bfd22a000000000000000000000000000000d11cf919f8cbab59479dd9d8c73e3f1d08ba640400000000000000f25d19e54958712c8c1e81f24f48433dfa861b14c95bf00b940000000000000000000000000000000000000000000000000000907dcb85fcb2000000000000000000000000000000000076dd3fe54c3a2f65886709df908d0e5bedc96093fb42b4f57bcb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b00000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a804d20f09f9a804d6f6fc3a94d4d6f0000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a804df09f9a80f09f9a80c3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000000319ef5f9cf0d3f035da12b12d73c4c63148bbb79a000000000000000000000000369318c17702729ea7b06f5e464698305b3a767500000000000000000000000090df78bc128c9c32e1cac02938d1a09e8fd02b3500000000000000000000000000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a80000000000000000000000000" + }, + { + "name": "random-(string,int16,(address,(string,address,bool,(address),bytes3[1])[3],address,bytes25,bytes7),bool)", + "type": "(string,int16,(address,(string,address,bool,(address),bytes3[1])[3],address,bytes25,bytes7),bool)", + "value": [ + "Moo é🚀o oM🚀 é🚀o 🚀 oéé🚀 éM o ", + "16406", + [ + "0x00c11862B560cD6D47a766130aCd18942485f62A", + [ + [ + "Moo é🚀o o", + "0xd1526Bd986fe16558B096A4170102085c26B266A", + false, + ["0x2e95b869cAc1BF986b1c1989cC08d26f2Be588B6"], + ["0x3f5529"] + ], + [ + "Moo é🚀MM oM oMéMMo 🚀o🚀o éM🚀", + "0x4A3F1F2a177C6E013332762D88dE7866b1579cF8", + false, + ["0xAb6662aD636e480d7D95392aa0c173cde89C9239"], + ["0x5bb6fc"] + ], + [ + "Moo é🚀🚀 🚀oo🚀 o éMM🚀Mooo🚀MéMo🚀oé🚀 o M🚀🚀oo🚀MoMoé🚀🚀", + "0x504551ecf77bbb7208A098b2E5904118A0d8CC81", + false, + ["0x73e8F5e502e02F0F8929091db35feFf952D9Da3D"], + ["0x1a89df"] + ] + ], + "0xc3D05677e84486ceBe21CBCef715b11c27C7cB8d", + "0xc47eed3655d71f6d1a14ffab812e350aed6f70eebb22cd0d7f", + "0x436d7c3e2d0528" + ], + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o oM🚀 é🚀o 🚀 oéé🚀 éM o " + }, + { + "type": "number", + "value": "16406" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x00c11862B560cD6D47a766130aCd18942485f62A" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o o" + }, + { + "type": "address", + "value": "0xd1526Bd986fe16558B096A4170102085c26B266A" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x2e95b869cAc1BF986b1c1989cC08d26f2Be588B6" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3f5529" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MM oM oMéMMo 🚀o🚀o éM🚀" + }, + { + "type": "address", + "value": "0x4A3F1F2a177C6E013332762D88dE7866b1579cF8" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xAb6662aD636e480d7D95392aa0c173cde89C9239" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x5bb6fc" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀 🚀oo🚀 o éMM🚀Mooo🚀MéMo🚀oé🚀 o M🚀🚀oo🚀MoMoé🚀🚀" + }, + { + "type": "address", + "value": "0x504551ecf77bbb7208A098b2E5904118A0d8CC81" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x73e8F5e502e02F0F8929091db35feFf952D9Da3D" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x1a89df" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0xc3D05677e84486ceBe21CBCef715b11c27C7cB8d" + }, + { + "type": "hexstring", + "value": "0xc47eed3655d71f6d1a14ffab812e350aed6f70eebb22cd0d7f" + }, + { + "type": "hexstring", + "value": "0x436d7c3e2d0528" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610661806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610428565b60405180910390f35b6100566102c9565b61005e6102c9565b600060405180606001604052806031815260200161057360319139825250614016602082015261008c6102f6565b72c11862b560cd6d47a766130acd18942485f62a81526100aa610334565b6100b2610361565b604080518082018252600f81526e4d6f6f20c3a9f09f9a806f2020206f60881b60208083019190915290835273d1526bd986fe16558b096a4170102085c26b266a838201526000838301528151908101909152732e95b869cac1bf986b1c1989cc08d26f2be588b6815260608201526101296103bd565b623f552960e81b815260808201528152610141610361565b60006040518060600160405280602b81526020016105a4602b9139825250734a3f1f2a177c6e013332762d88de7866b1579cf860208083019190915260006040808401919091528051918201905273ab6662ad636e480d7d95392aa0c173cde89c9239815260608201526101b36103bd565b6216edbf60ea1b8152608082015260208201526101ce610361565b60006040518060800160405280605d81526020016105cf605d913982525073504551ecf77bbb7208a098b2e5904118a0d8cc816020808301919091526000604080840191909152805191820190527373e8f5e502e02f0f8929091db35feff952d9da3d815260608201526102406103bd565b621a89df60e81b8152608082810191909152604080840192909252602084019290925273c3d05677e84486cebe21cbcef715b11c27c7cb8d838201527fc47eed3655d71f6d1a14ffab812e350aed6f70eebb22cd0d7f0000000000000060608085019190915266086daf87c5a0a560cb1b92840192909252830191909152600190820152919050565b6040805160808101825260608152600060208201529081016102e96102f6565b8152600060209091015290565b6040518060a0016040528060006001600160a01b03168152602001610319610334565b81526000602082018190526040820181905260609091015290565b60405180606001604052806003905b61034b610361565b8152602001906001900390816103435790505090565b6040518060a001604052806060815260200160006001600160a01b031681526020016000151581526020016103ab604051806020016040528060006001600160a01b031681525090565b81526020016103b86103bd565b905290565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b81811015610401576020818501810151868301820152016103e5565b81811115610413576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835283516080808386015261044560a08601836103db565b9150828601516040600182810b828901528189015192506060601f1989870301818a015260a0860160018060a01b038086511688528886015160a08a8a0152828390506101008a01935060005b600381101561052057609f198b86030182528251805160a087526104b960a08801826103db565b9050858e830151168e8801528982015115158a88015285888301515116888801528b82015191508b870160005b8a81101561050b5783516001600160e81b0319168252928f0192908f01908a016104e6565b509096505050918b0191908b01908601610492565b50505050838501516001600160a01b0316938701939093528084015166ffffffffffffff191681870152928401516001600160c81b03191694840194909452960151151594019390935250919291505056fe4d6f6f20c3a9f09f9a806f20206f4df09f9a8020c3a9f09f9a806f20f09f9a80206fc3a9c3a9f09f9a8020c3a94d206f204d6f6f20c3a9f09f9a804d4d206f4d206f4dc3a94d4d6f20f09f9a806ff09f9a806f2020c3a94df09f9a804d6f6f20c3a9f09f9a80f09f9a802020f09f9a806f6ff09f9a80206f20c3a94d4df09f9a804d6f6f6ff09f9a804dc3a94d6ff09f9a806fc3a9f09f9a80206f204df09f9a80f09f9a806f6ff09f9a804d6f4d6fc3a9f09f9a80f09f9a80a26469706673582212200579b7b996c149469f4d151831cb734003e6e71cdcd06d18966549673e4e977364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_ec6fe6ab {\n string s_0;\n address s_1;\n bool s_2;\n S_421683f8 s_3;\n bytes3[1] s_4;\n }\n\n struct S_5163e452 {\n address s_0;\n S_ec6fe6ab[3] s_1;\n address s_2;\n bytes25 s_3;\n bytes7 s_4;\n }\n\n struct S_bfd257f8 {\n string s_0;\n int16 s_1;\n S_5163e452 s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_bfd257f8 memory) {\n S_bfd257f8 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀o oM🚀 é🚀o 🚀 oéé🚀 éM o \";\n r.s_0 = r_0;\n }\n {\n int16 r_1 = 16406;\n r.s_1 = r_1;\n }\n {\n S_5163e452 memory r_2;\n {\n address r_2_0 = 0x00c11862B560cD6D47a766130aCd18942485f62A;\n r_2.s_0 = r_2_0;\n }\n {\n S_ec6fe6ab[3] memory r_2_1;\n {\n S_ec6fe6ab memory r_2_1_0;\n {\n string memory r_2_1_0_0 = unicode\"Moo é🚀o o\";\n r_2_1_0.s_0 = r_2_1_0_0;\n }\n {\n address r_2_1_0_1 = 0xd1526Bd986fe16558B096A4170102085c26B266A;\n r_2_1_0.s_1 = r_2_1_0_1;\n }\n {\n bool r_2_1_0_2 = false;\n r_2_1_0.s_2 = r_2_1_0_2;\n }\n {\n S_421683f8 memory r_2_1_0_3;\n {\n address r_2_1_0_3_0 = 0x2e95b869cAc1BF986b1c1989cC08d26f2Be588B6;\n r_2_1_0_3.s_0 = r_2_1_0_3_0;\n }\n r_2_1_0.s_3 = r_2_1_0_3;\n }\n {\n bytes3[1] memory r_2_1_0_4;\n {\n bytes3 r_2_1_0_4_0 = bytes3(0x3f5529);\n r_2_1_0_4[0] = r_2_1_0_4_0;\n }\n r_2_1_0.s_4 = r_2_1_0_4;\n }\n r_2_1[0] = r_2_1_0;\n }\n {\n S_ec6fe6ab memory r_2_1_1;\n {\n string memory r_2_1_1_0 = unicode\"Moo é🚀MM oM oMéMMo 🚀o🚀o éM🚀\";\n r_2_1_1.s_0 = r_2_1_1_0;\n }\n {\n address r_2_1_1_1 = 0x4A3F1F2a177C6E013332762D88dE7866b1579cF8;\n r_2_1_1.s_1 = r_2_1_1_1;\n }\n {\n bool r_2_1_1_2 = false;\n r_2_1_1.s_2 = r_2_1_1_2;\n }\n {\n S_421683f8 memory r_2_1_1_3;\n {\n address r_2_1_1_3_0 = 0xAb6662aD636e480d7D95392aa0c173cde89C9239;\n r_2_1_1_3.s_0 = r_2_1_1_3_0;\n }\n r_2_1_1.s_3 = r_2_1_1_3;\n }\n {\n bytes3[1] memory r_2_1_1_4;\n {\n bytes3 r_2_1_1_4_0 = bytes3(0x5bb6fc);\n r_2_1_1_4[0] = r_2_1_1_4_0;\n }\n r_2_1_1.s_4 = r_2_1_1_4;\n }\n r_2_1[1] = r_2_1_1;\n }\n {\n S_ec6fe6ab memory r_2_1_2;\n {\n string memory r_2_1_2_0 = unicode\"Moo é🚀🚀 🚀oo🚀 o éMM🚀Mooo🚀MéMo🚀oé🚀 o M🚀🚀oo🚀MoMoé🚀🚀\";\n r_2_1_2.s_0 = r_2_1_2_0;\n }\n {\n address r_2_1_2_1 = 0x504551ecf77bbb7208A098b2E5904118A0d8CC81;\n r_2_1_2.s_1 = r_2_1_2_1;\n }\n {\n bool r_2_1_2_2 = false;\n r_2_1_2.s_2 = r_2_1_2_2;\n }\n {\n S_421683f8 memory r_2_1_2_3;\n {\n address r_2_1_2_3_0 = 0x73e8F5e502e02F0F8929091db35feFf952D9Da3D;\n r_2_1_2_3.s_0 = r_2_1_2_3_0;\n }\n r_2_1_2.s_3 = r_2_1_2_3;\n }\n {\n bytes3[1] memory r_2_1_2_4;\n {\n bytes3 r_2_1_2_4_0 = bytes3(0x1a89df);\n r_2_1_2_4[0] = r_2_1_2_4_0;\n }\n r_2_1_2.s_4 = r_2_1_2_4;\n }\n r_2_1[2] = r_2_1_2;\n }\n r_2.s_1 = r_2_1;\n }\n {\n address r_2_2 = 0xc3D05677e84486ceBe21CBCef715b11c27C7cB8d;\n r_2.s_2 = r_2_2;\n }\n {\n bytes25 r_2_3 = bytes25(0xc47eed3655d71f6d1a14ffab812e350aed6f70eebb22cd0d7f);\n r_2.s_3 = r_2_3;\n }\n {\n bytes7 r_2_4 = bytes7(0x436d7c3e2d0528);\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000401600000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a806f20206f4df09f9a8020c3a9f09f9a806f20f09f9a80206fc3a9c3a9f09f9a8020c3a94d206f2000000000000000000000000000000000000000000000000000000000c11862b560cd6d47a766130acd18942485f62a00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000c3d05677e84486cebe21cbcef715b11c27c7cb8dc47eed3655d71f6d1a14ffab812e350aed6f70eebb22cd0d7f00000000000000436d7c3e2d05280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000d1526bd986fe16558b096a4170102085c26b266a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e95b869cac1bf986b1c1989cc08d26f2be588b63f55290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a806f2020206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000004a3f1f2a177c6e013332762d88de7866b1579cf80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab6662ad636e480d7d95392aa0c173cde89c92395bb6fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a804d4d206f4d206f4dc3a94d4d6f20f09f9a806ff09f9a806f2020c3a94df09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000504551ecf77bbb7208a098b2e5904118a0d8cc81000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073e8f5e502e02f0f8929091db35feff952d9da3d1a89df0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a80f09f9a802020f09f9a806f6ff09f9a80206f20c3a94d4df09f9a804d6f6f6ff09f9a804dc3a94d6ff09f9a806fc3a9f09f9a80206f204df09f9a80f09f9a806f6ff09f9a804d6f4d6fc3a9f09f9a80f09f9a80000000" + }, + { + "name": "random-(uint16[],(address,uint184,address,string)[4],address[3],(string,string,(bytes29,bytes27),bytes6))", + "type": "(uint16[],(address,uint184,address,string)[4],address[3],(string,string,(bytes29,bytes27),bytes6))", + "value": [ + ["49973", "52712", "27558"], + [ + [ + "0xa997ae99319d4d5f78001116304B85963CFD598a", + "22352808840010289842302397066752508338424843837075798122", + "0x437c4AA417145B8550CB480a73690dc14b69C7cC", + "Moo é🚀M ooMooé Moo🚀éMo🚀éoé🚀🚀🚀é🚀 Mo🚀 MMo" + ], + [ + "0xbA4bc495f2EA2017b703f7EF1FCBBB762Fd05Bae", + "20670249487535512276558324215094809644232506495339701687", + "0x99A6715055006E3de8D49f47F5dEA681b7C3f3e0", + "Moo é🚀oMooo🚀" + ], + [ + "0xd5eCfc2Ea1f253CeecBbEeF73E6004a2a48E4b38", + "22294945854463320255348459051974076724187677082649948436", + "0x6F5d882Aac2Ac4D0421443b56141D09e9B9Fc125", + "Moo é🚀o o ooo🚀éoooM 🚀🚀MéMo " + ], + [ + "0x04Ee2A1Cbdeba468344e2f97F548158c56B05Fd3", + "18784143715623195643577902658013427953297211858112924806", + "0x8D8630F191BD85750907e1fdE246FF405c871be5", + "Moo é🚀 🚀oM🚀🚀éMo🚀MM Mo🚀🚀 ooMooo éo oM 🚀oéMM🚀o" + ] + ], + [ + "0x02065635c53aB63b284A3381EBAE147D6bB13968", + "0x40940924E49087322b82B969d6777Ba4375A0315", + "0xB6752997639B8CEF0dc3b5b4996d85a5F7a8D390" + ], + [ + "Moo é🚀🚀éo MMMo Méoéo 🚀o ééMMéooéoMMooé ", + "Moo é🚀ooééo éé oM🚀 ooéo Mo o oooM oéo🚀Moo🚀M Mo🚀🚀o oooo", + [ + "0x9d28efccf33e1e24bccddc68c1a9053189e4bdc88eed904105a620bdd3", + "0x491d8567619599200340e91e36443eb838636ef1834e1e604e17bd" + ], + "0x5299a0863036" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "49973" + }, + { + "type": "number", + "value": "52712" + }, + { + "type": "number", + "value": "27558" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xa997ae99319d4d5f78001116304B85963CFD598a" + }, + { + "type": "number", + "value": "22352808840010289842302397066752508338424843837075798122" + }, + { + "type": "address", + "value": "0x437c4AA417145B8550CB480a73690dc14b69C7cC" + }, + { + "type": "string", + "value": "Moo é🚀M ooMooé Moo🚀éMo🚀éoé🚀🚀🚀é🚀 Mo🚀 MMo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xbA4bc495f2EA2017b703f7EF1FCBBB762Fd05Bae" + }, + { + "type": "number", + "value": "20670249487535512276558324215094809644232506495339701687" + }, + { + "type": "address", + "value": "0x99A6715055006E3de8D49f47F5dEA681b7C3f3e0" + }, + { + "type": "string", + "value": "Moo é🚀oMooo🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xd5eCfc2Ea1f253CeecBbEeF73E6004a2a48E4b38" + }, + { + "type": "number", + "value": "22294945854463320255348459051974076724187677082649948436" + }, + { + "type": "address", + "value": "0x6F5d882Aac2Ac4D0421443b56141D09e9B9Fc125" + }, + { + "type": "string", + "value": "Moo é🚀o o ooo🚀éoooM 🚀🚀MéMo " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x04Ee2A1Cbdeba468344e2f97F548158c56B05Fd3" + }, + { + "type": "number", + "value": "18784143715623195643577902658013427953297211858112924806" + }, + { + "type": "address", + "value": "0x8D8630F191BD85750907e1fdE246FF405c871be5" + }, + { + "type": "string", + "value": "Moo é🚀 🚀oM🚀🚀éMo🚀MM Mo🚀🚀 ooMooo éo oM 🚀oéMM🚀o" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x02065635c53aB63b284A3381EBAE147D6bB13968" + }, + { + "type": "address", + "value": "0x40940924E49087322b82B969d6777Ba4375A0315" + }, + { + "type": "address", + "value": "0xB6752997639B8CEF0dc3b5b4996d85a5F7a8D390" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀éo MMMo Méoéo 🚀o ééMMéooéoMMooé " + }, + { + "type": "string", + "value": "Moo é🚀ooééo éé oM🚀 ooéo Mo o oooM oéo🚀Moo🚀M Mo🚀🚀o oooo" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x9d28efccf33e1e24bccddc68c1a9053189e4bdc88eed904105a620bdd3" + }, + { + "type": "hexstring", + "value": "0x491d8567619599200340e91e36443eb838636ef1834e1e604e17bd" + } + ] + }, + { + "type": "hexstring", + "value": "0x5299a0863036" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610948806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610712565b60405180910390f35b6100566104a8565b61005e6104a8565b6040805160038082526080820190925260009160208201606080368337019050509050600061c3359050808260008151811061009c5761009c6107b6565b602002602001019061ffff16908161ffff168152505050600061cde8905080826001815181106100ce576100ce6107b6565b602002602001019061ffff16908161ffff1681525050506000616ba690508082600281518110610100576101006107b6565b61ffff9092166020928302919091019091015250815261011e6104e1565b604080516080808201835260608083015273a997ae99319d4d5f78001116304b85963cfd598a825276e95fcc739b489ed254c80862bcefb6dd5c83fed172b86a60208084019190915273437c4aa417145b8550cb480a73690dc14b69c7cc838501528351918201909352604680825291926000929061087d90830139606083015250808260006020020152506101d3604080516080810182526000808252602082018190529181019190915260608082015290565b73ba4bc495f2ea2017b703f7ef1fcbbb762fd05bae815276d7ceb6a00304eb1d36e62a93652e03722fa1978be1a5b76020808301919091527399a6715055006e3de8d49f47f5dea681b7c3f3e06040808401919091528051808201825260138152719adede418753e13f3500de9adededfe13f35606f1b8184015260608085019190915284830193909352805160808101825280840184905273d5ecfc2ea1f253ceecbbeef73e6004a2a48e4b38815276e8c524fd820f8ac5feba048a31d2c1244c4be8f824f11481840152736f5d882aac2ac4d0421443b56141d09e9b9fc125818301528151938401909152602a80845290926000929091906107cd908301396060830152508082600260200201525061030d604080516080810182526000808252602082018190529181019190915260608082015290565b7304ee2a1cbdeba468344e2f97f548158c56b05fd3815276c41d98afcb8097d5423f370a10373c0eaa86a5aefecc86602080830191909152738d8630f191bd85750907e1fde246ff405c871be5604080840191909152805160808101909152604c8082526000926107f790830139606083810191909152830191909152506020820152610398610526565b7302065635c53ab63b284a3381ebae147d6bb1396881527340940924e49087322b82b969d6777ba4375a0315602082015273b6752997639b8cef0dc3b5b4996d85a5f7a8d3906040808301919091528201526103f2610544565b60006040518060600160405280603a8152602001610843603a913982525060408051608081019091526050808252600091906108c360208301396020838101919091526040805180820182527f9d28efccf33e1e24bccddc68c1a9053189e4bdc88eed904105a620bdd300000081527f491d8567619599200340e91e36443eb838636ef1834e1e604e17bd0000000000928101929092528301525065294cd043181b60d11b606080830191909152820152919050565b6040518060800160405280606081526020016104c26104e1565b81526020016104cf610526565b81526020016104dc610544565b905290565b60405180608001604052806004905b60408051608081018252600080825260208083018290529282015260608082015282526000199092019101816104f05790505090565b60405180606001604052806003906020820280368337509192915050565b604051806080016040528060608152602001606081526020016105886040518060400160405280600062ffffff19168152602001600064ffffffffff191681525090565b8152600060209091015290565b6000815180845260005b818110156105bb5760208185018101518683018201520161059f565b818111156105cd576000602083870101525b50601f01601f19169290920160200192915050565b60008260808082018460005b600481101561065f578483038852815180516001600160a01b0390811685526020808301516001600160b81b03168187015260408084015190921691860191909152606091820151828601879052919061064a87870184610595565b9a81019a9550939093019250506001016105ee565b50909695505050505050565b8060005b60038110156106975781516001600160a01b031684526020938401939091019060010161066f565b50505050565b6000815160a084526106b260a0850182610595565b9050602083015184820360208601526106cb8282610595565b915050604083015162ffffff19815116604086015264ffffffffff1960208201511660608601525065ffffffffffff60d01b60608401511660808501528091505092915050565b6020808252825160c083830152805160e084018190526000929182019083906101008601905b8083101561075c57835161ffff168252928401926001929092019190840190610738565b50838701519350601f1992508286820301604087015261077c81856105e2565b935050506040850151610792606086018261066b565b506060850151818584030160c08601526107ac838261069d565b9695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f206f206f6f6ff09f9a80c3a96f6f6f4d20f09f9a80f09f9a804dc3a94d6f204d6f6f20c3a9f09f9a8020f09f9a806f4df09f9a80f09f9a80c3a94d6ff09f9a804d4d20204d6ff09f9a80f09f9a80206f6f4d6f6f6f20c3a96f206f4d20f09f9a806fc3a94d4df09f9a806f4d6f6f20c3a9f09f9a80f09f9a80c3a96f20204d4d4d6f204dc3a96fc3a96f20f09f9a806f20c3a9c3a94d4dc3a96f6fc3a96f4d4d6f6fc3a9204d6f6f20c3a9f09f9a804d206f6f4d6f6fc3a9204d6f6ff09f9a80c3a94d6ff09f9a80c3a96fc3a9f09f9a80f09f9a80f09f9a80c3a9f09f9a8020204d6ff09f9a80204d4d6f4d6f6f20c3a9f09f9a806f6fc3a9c3a96f2020c3a9c3a9206f4df09f9a80206f6fc3a96f204d6f206f206f6f6f4d206fc3a96ff09f9a804d6f6ff09f9a804d204d6ff09f9a80f09f9a806f206f6f6f6fa26469706673582212208179b5b6431bceb0d782375ff048eddda9c50874a14360bed7e59829e1f933c364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_101bedc7 {\n address s_0;\n uint184 s_1;\n address s_2;\n string s_3;\n }\n\n struct S_4cbbdb99 {\n bytes29 s_0;\n bytes27 s_1;\n }\n\n struct S_cb7ec20d {\n string s_0;\n string s_1;\n S_4cbbdb99 s_2;\n bytes6 s_3;\n }\n\n struct S_1706a793 {\n uint16[] s_0;\n S_101bedc7[4] s_1;\n address[3] s_2;\n S_cb7ec20d s_3;\n }\n\n function test () public pure returns (S_1706a793 memory) {\n S_1706a793 memory r;\n {\n uint16[] memory r_0 = new uint16[](3);\n {\n uint16 r_0_0 = 49973;\n r_0[0] = r_0_0;\n }\n {\n uint16 r_0_1 = 52712;\n r_0[1] = r_0_1;\n }\n {\n uint16 r_0_2 = 27558;\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n S_101bedc7[4] memory r_1;\n {\n S_101bedc7 memory r_1_0;\n {\n address r_1_0_0 = 0xa997ae99319d4d5f78001116304B85963CFD598a;\n r_1_0.s_0 = r_1_0_0;\n }\n {\n uint184 r_1_0_1 = 22352808840010289842302397066752508338424843837075798122;\n r_1_0.s_1 = r_1_0_1;\n }\n {\n address r_1_0_2 = 0x437c4AA417145B8550CB480a73690dc14b69C7cC;\n r_1_0.s_2 = r_1_0_2;\n }\n {\n string memory r_1_0_3 = unicode\"Moo é🚀M ooMooé Moo🚀éMo🚀éoé🚀🚀🚀é🚀 Mo🚀 MMo\";\n r_1_0.s_3 = r_1_0_3;\n }\n r_1[0] = r_1_0;\n }\n {\n S_101bedc7 memory r_1_1;\n {\n address r_1_1_0 = 0xbA4bc495f2EA2017b703f7EF1FCBBB762Fd05Bae;\n r_1_1.s_0 = r_1_1_0;\n }\n {\n uint184 r_1_1_1 = 20670249487535512276558324215094809644232506495339701687;\n r_1_1.s_1 = r_1_1_1;\n }\n {\n address r_1_1_2 = 0x99A6715055006E3de8D49f47F5dEA681b7C3f3e0;\n r_1_1.s_2 = r_1_1_2;\n }\n {\n string memory r_1_1_3 = unicode\"Moo é🚀oMooo🚀\";\n r_1_1.s_3 = r_1_1_3;\n }\n r_1[1] = r_1_1;\n }\n {\n S_101bedc7 memory r_1_2;\n {\n address r_1_2_0 = 0xd5eCfc2Ea1f253CeecBbEeF73E6004a2a48E4b38;\n r_1_2.s_0 = r_1_2_0;\n }\n {\n uint184 r_1_2_1 = 22294945854463320255348459051974076724187677082649948436;\n r_1_2.s_1 = r_1_2_1;\n }\n {\n address r_1_2_2 = 0x6F5d882Aac2Ac4D0421443b56141D09e9B9Fc125;\n r_1_2.s_2 = r_1_2_2;\n }\n {\n string memory r_1_2_3 = unicode\"Moo é🚀o o ooo🚀éoooM 🚀🚀MéMo \";\n r_1_2.s_3 = r_1_2_3;\n }\n r_1[2] = r_1_2;\n }\n {\n S_101bedc7 memory r_1_3;\n {\n address r_1_3_0 = 0x04Ee2A1Cbdeba468344e2f97F548158c56B05Fd3;\n r_1_3.s_0 = r_1_3_0;\n }\n {\n uint184 r_1_3_1 = 18784143715623195643577902658013427953297211858112924806;\n r_1_3.s_1 = r_1_3_1;\n }\n {\n address r_1_3_2 = 0x8D8630F191BD85750907e1fdE246FF405c871be5;\n r_1_3.s_2 = r_1_3_2;\n }\n {\n string memory r_1_3_3 = unicode\"Moo é🚀 🚀oM🚀🚀éMo🚀MM Mo🚀🚀 ooMooo éo oM 🚀oéMM🚀o\";\n r_1_3.s_3 = r_1_3_3;\n }\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n address[3] memory r_2;\n {\n address r_2_0 = 0x02065635c53aB63b284A3381EBAE147D6bB13968;\n r_2[0] = r_2_0;\n }\n {\n address r_2_1 = 0x40940924E49087322b82B969d6777Ba4375A0315;\n r_2[1] = r_2_1;\n }\n {\n address r_2_2 = 0xB6752997639B8CEF0dc3b5b4996d85a5F7a8D390;\n r_2[2] = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n S_cb7ec20d memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀🚀éo MMMo Méoéo 🚀o ééMMéooéoMMooé \";\n r_3.s_0 = r_3_0;\n }\n {\n string memory r_3_1 = unicode\"Moo é🚀ooééo éé oM🚀 ooéo Mo o oooM oéo🚀Moo🚀M Mo🚀🚀o oooo\";\n r_3.s_1 = r_3_1;\n }\n {\n S_4cbbdb99 memory r_3_2;\n {\n bytes29 r_3_2_0 = bytes29(0x9d28efccf33e1e24bccddc68c1a9053189e4bdc88eed904105a620bdd3);\n r_3_2.s_0 = r_3_2_0;\n }\n {\n bytes27 r_3_2_1 = bytes27(0x491d8567619599200340e91e36443eb838636ef1834e1e604e17bd);\n r_3_2.s_1 = r_3_2_1;\n }\n r_3.s_2 = r_3_2;\n }\n {\n bytes6 r_3_3 = bytes6(0x5299a0863036);\n r_3.s_3 = r_3_3;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000002065635c53ab63b284a3381ebae147d6bb1396800000000000000000000000040940924e49087322b82b969d6777ba4375a0315000000000000000000000000b6752997639b8cef0dc3b5b4996d85a5f7a8d39000000000000000000000000000000000000000000000000000000000000005600000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000c335000000000000000000000000000000000000000000000000000000000000cde80000000000000000000000000000000000000000000000000000000000006ba60000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000320000000000000000000000000a997ae99319d4d5f78001116304b85963cfd598a000000000000000000e95fcc739b489ed254c80862bcefb6dd5c83fed172b86a000000000000000000000000437c4aa417145b8550cb480a73690dc14b69c7cc000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a804d206f6f4d6f6fc3a9204d6f6ff09f9a80c3a94d6ff09f9a80c3a96fc3a9f09f9a80f09f9a80f09f9a80c3a9f09f9a8020204d6ff09f9a80204d4d6f0000000000000000000000000000000000000000000000000000000000000000000000000000ba4bc495f2ea2017b703f7ef1fcbbb762fd05bae000000000000000000d7ceb6a00304eb1d36e62a93652e03722fa1978be1a5b700000000000000000000000099a6715055006e3de8d49f47f5dea681b7c3f3e0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a806f4d6f6f6ff09f9a8000000000000000000000000000000000000000000000000000d5ecfc2ea1f253ceecbbeef73e6004a2a48e4b38000000000000000000e8c524fd820f8ac5feba048a31d2c1244c4be8f824f1140000000000000000000000006f5d882aac2ac4d0421443b56141d09e9b9fc1250000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a806f206f206f6f6ff09f9a80c3a96f6f6f4d20f09f9a80f09f9a804dc3a94d6f200000000000000000000000000000000000000000000000000000000000000000000004ee2a1cbdeba468344e2f97f548158c56b05fd3000000000000000000c41d98afcb8097d5423f370a10373c0eaa86a5aefecc860000000000000000000000008d8630f191bd85750907e1fde246ff405c871be50000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a8020f09f9a806f4df09f9a80f09f9a80c3a94d6ff09f9a804d4d20204d6ff09f9a80f09f9a80206f6f4d6f6f6f20c3a96f206f4d20f09f9a806fc3a94d4df09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001009d28efccf33e1e24bccddc68c1a9053189e4bdc88eed904105a620bdd3000000491d8567619599200340e91e36443eb838636ef1834e1e604e17bd00000000005299a08630360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a4d6f6f20c3a9f09f9a80f09f9a80c3a96f20204d4d4d6f204dc3a96fc3a96f20f09f9a806f20c3a9c3a94d4dc3a96f6fc3a96f4d4d6f6fc3a92000000000000000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a806f6fc3a9c3a96f2020c3a9c3a9206f4df09f9a80206f6fc3a96f204d6f206f206f6f6f4d206fc3a96ff09f9a804d6f6ff09f9a804d204d6ff09f9a80f09f9a806f206f6f6f6f00000000000000000000000000000000" + }, + { + "name": "random-(uint24,int64[2],((bool[][2],(address,string,bytes1,uint216,string))),address)[3][3]", + "type": "(uint24,int64[2],((bool[][2],(address,string,bytes1,uint216,string))),address)[3][3]", + "value": [ + [ + [ + "7878909", + ["5974493399659447779", "4282738417890485748"], + [ + [ + [[], [true]], + [ + "0x7967B6017C61A0d3245f1aA3D18d5071Da010a51", + "Moo é🚀", + "0xbb", + "20944079792621261196888964681634754148806223982820931539781660798", + "Moo é🚀Mo🚀🚀ooooo🚀o🚀 éMo🚀oo🚀o🚀Mo" + ] + ] + ], + "0x9e749337dB3f580Ada7d5c4639798893ea7526b5" + ], + [ + "3771665", + ["-4020771506997897864", "7527673142927007182"], + [ + [ + [[false], [true]], + [ + "0xCf9da3bfA345A2558a99F6fA3D651dA12b6D8CE3", + "Moo é🚀", + "0x59", + "18864518056506174093383034214245207148746026942282257145290281872", + "Moo é🚀M🚀🚀o🚀é🚀🚀oMMM🚀oM M éMM🚀M 🚀ééoooooo 🚀oé🚀🚀Mo éo🚀éooé" + ] + ] + ], + "0xB00441329843aC8adFD78cC9ab6BbDEc78aD0540" + ], + [ + "12906190", + ["2318552752296791621", "-8780540951137241335"], + [ + [ + [[true], []], + [ + "0xE03FA562AEF693Bd4A95213797d4F1f25860E7C6", + "Moo é🚀é🚀 ooMo éooéMéééoooééé🚀oééé oo éo🚀🚀🚀é🚀 Moé", + "0xd3", + "30276435430511853896861358542986961747667647253423379231122933248", + "Moo é🚀 o🚀éMé 🚀🚀 M🚀Méé🚀oMo🚀MooM oM🚀éooéMé M o🚀M🚀M 🚀o🚀ooéoMo🚀 🚀é" + ] + ] + ], + "0x5814ED4F37D81895462f38dd32d0d2D2d4eB2c80" + ] + ], + [ + [ + "14533564", + ["513156561789079568", "798386550769464415"], + [ + [ + [[true], [true, false]], + [ + "0xbFB96A7F4F88C0Ab5FcE2B2915000D51A08243eE", + "Moo é🚀 oo o é🚀ooMMéM🚀M 🚀o🚀o 🚀oé🚀Mé🚀Mo o ééoooM🚀é🚀éooéoo MéoéMMM", + "0xa4", + "94268182663441924477315506316433561309740241761516795906835203065", + "Moo é🚀oooéo🚀Moéo🚀 Mooo M🚀 ooéééé" + ] + ] + ], + "0x46502e3551E8CB08916E43E57a5aFc594446dD68" + ], + [ + "1627187", + ["-4140114426077429215", "3358478230553457566"], + [ + [ + [[false, false], []], + [ + "0xb13d4DF06a5DF00cB09bc488B842f335993424B1", + "Moo é🚀oo Mé🚀o🚀é🚀oMé🚀 🚀M ooo🚀o", + "0x6c", + "31862608245847353469749369818515597333705403400770420586412396690", + "Moo é🚀o🚀oé oéé🚀oéoé 🚀é oo oo oM🚀oMooé🚀M 🚀éMé MMMM🚀éoéé M ooé" + ] + ] + ], + "0x0f9278E8F3Ae371aa040928A45951552A8929faa" + ], + [ + "2163782", + ["3886680150632011270", "-7495526120747920607"], + [ + [ + [[false], []], + [ + "0x4c65e31982DadDa42307ADb243ccA8A72Ae64222", + "Moo é🚀o🚀🚀M 🚀🚀🚀oM🚀ooM🚀o🚀MMoMooéM 🚀o o ", + "0x43", + "59960313712236422865068254353737427957776817516749974264136530064", + "Moo é🚀éééo Méoooo🚀MMo ééooo éMo🚀 oéé é🚀" + ] + ] + ], + "0xbb4c616bc615b7b6C9D8744CdC0C93F90dAd655a" + ] + ], + [ + [ + "1959728", + ["4676639648180745163", "-885735482008792797"], + [ + [ + [[], [false, false, true, true]], + [ + "0x57A9be1880E68943AdcE4F62e175B3476F0a37CA", + "Moo é🚀oé🚀 🚀ééé🚀o🚀🚀o é ééo M🚀ooMMM M🚀Mé", + "0x6d", + "56048536632962939827198251916750354370706957288921132136638258348", + "Moo é🚀ooMo 🚀" + ] + ] + ], + "0x84b65f1320BaBb0E307b5834708301c7cA3023Af" + ], + [ + "13580794", + ["-1722941348427173174", "-7075137442856142154"], + [ + [ + [[], [false, false, false]], + [ + "0x7Ba0c2677B5E0F8f38F7F63706285827487f81ef", + "Moo é🚀éoooMoo ", + "0x92", + "16433703827913589581502359332569286188739228227578518029371614977", + "Moo é🚀🚀🚀M🚀oéo🚀é ooéoMooo🚀o🚀oé🚀🚀oéoo🚀Mo🚀 🚀Mé oo🚀" + ] + ] + ], + "0x971FEF9281643D6d0DEb6A7e71b6AfB274F42BB0" + ], + [ + "3688368", + ["7692595569902164889", "-3971984619589784919"], + [ + [ + [[true, true, false, false], []], + [ + "0xf46E8Fb760454aC809C8b54d6FFd5164a2eB0EFe", + "Moo é🚀 éo🚀oé🚀 M", + "0x0a", + "58703094886778838796687464122993861423723403987518296264635840146", + "Moo é🚀 éoooMo M MM é oMM🚀o🚀 o🚀o🚀🚀M o 🚀oM" + ] + ] + ], + "0xb44d01A33e16eFFB157ae498A272c7E54dbf4824" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "7878909" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "5974493399659447779" + }, + { + "type": "number", + "value": "4282738417890485748" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x7967B6017C61A0d3245f1aA3D18d5071Da010a51" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "hexstring", + "value": "0xbb" + }, + { + "type": "number", + "value": "20944079792621261196888964681634754148806223982820931539781660798" + }, + { + "type": "string", + "value": "Moo é🚀Mo🚀🚀ooooo🚀o🚀 éMo🚀oo🚀o🚀Mo" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0x9e749337dB3f580Ada7d5c4639798893ea7526b5" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3771665" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-4020771506997897864" + }, + { + "type": "number", + "value": "7527673142927007182" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xCf9da3bfA345A2558a99F6fA3D651dA12b6D8CE3" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "hexstring", + "value": "0x59" + }, + { + "type": "number", + "value": "18864518056506174093383034214245207148746026942282257145290281872" + }, + { + "type": "string", + "value": "Moo é🚀M🚀🚀o🚀é🚀🚀oMMM🚀oM M éMM🚀M 🚀ééoooooo 🚀oé🚀🚀Mo éo🚀éooé" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0xB00441329843aC8adFD78cC9ab6BbDEc78aD0540" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "12906190" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "2318552752296791621" + }, + { + "type": "number", + "value": "-8780540951137241335" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xE03FA562AEF693Bd4A95213797d4F1f25860E7C6" + }, + { + "type": "string", + "value": "Moo é🚀é🚀 ooMo éooéMéééoooééé🚀oééé oo éo🚀🚀🚀é🚀 Moé" + }, + { + "type": "hexstring", + "value": "0xd3" + }, + { + "type": "number", + "value": "30276435430511853896861358542986961747667647253423379231122933248" + }, + { + "type": "string", + "value": "Moo é🚀 o🚀éMé 🚀🚀 M🚀Méé🚀oMo🚀MooM oM🚀éooéMé M o🚀M🚀M 🚀o🚀ooéoMo🚀 🚀é" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0x5814ED4F37D81895462f38dd32d0d2D2d4eB2c80" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "14533564" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "513156561789079568" + }, + { + "type": "number", + "value": "798386550769464415" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xbFB96A7F4F88C0Ab5FcE2B2915000D51A08243eE" + }, + { + "type": "string", + "value": "Moo é🚀 oo o é🚀ooMMéM🚀M 🚀o🚀o 🚀oé🚀Mé🚀Mo o ééoooM🚀é🚀éooéoo MéoéMMM" + }, + { + "type": "hexstring", + "value": "0xa4" + }, + { + "type": "number", + "value": "94268182663441924477315506316433561309740241761516795906835203065" + }, + { + "type": "string", + "value": "Moo é🚀oooéo🚀Moéo🚀 Mooo M🚀 ooéééé" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0x46502e3551E8CB08916E43E57a5aFc594446dD68" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1627187" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-4140114426077429215" + }, + { + "type": "number", + "value": "3358478230553457566" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xb13d4DF06a5DF00cB09bc488B842f335993424B1" + }, + { + "type": "string", + "value": "Moo é🚀oo Mé🚀o🚀é🚀oMé🚀 🚀M ooo🚀o" + }, + { + "type": "hexstring", + "value": "0x6c" + }, + { + "type": "number", + "value": "31862608245847353469749369818515597333705403400770420586412396690" + }, + { + "type": "string", + "value": "Moo é🚀o🚀oé oéé🚀oéoé 🚀é oo oo oM🚀oMooé🚀M 🚀éMé MMMM🚀éoéé M ooé" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0x0f9278E8F3Ae371aa040928A45951552A8929faa" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2163782" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3886680150632011270" + }, + { + "type": "number", + "value": "-7495526120747920607" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x4c65e31982DadDa42307ADb243ccA8A72Ae64222" + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀M 🚀🚀🚀oM🚀ooM🚀o🚀MMoMooéM 🚀o o " + }, + { + "type": "hexstring", + "value": "0x43" + }, + { + "type": "number", + "value": "59960313712236422865068254353737427957776817516749974264136530064" + }, + { + "type": "string", + "value": "Moo é🚀éééo Méoooo🚀MMo ééooo éMo🚀 oéé é🚀" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0xbb4c616bc615b7b6C9D8744CdC0C93F90dAd655a" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1959728" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "4676639648180745163" + }, + { + "type": "number", + "value": "-885735482008792797" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x57A9be1880E68943AdcE4F62e175B3476F0a37CA" + }, + { + "type": "string", + "value": "Moo é🚀oé🚀 🚀ééé🚀o🚀🚀o é ééo M🚀ooMMM M🚀Mé" + }, + { + "type": "hexstring", + "value": "0x6d" + }, + { + "type": "number", + "value": "56048536632962939827198251916750354370706957288921132136638258348" + }, + { + "type": "string", + "value": "Moo é🚀ooMo 🚀" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0x84b65f1320BaBb0E307b5834708301c7cA3023Af" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "13580794" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-1722941348427173174" + }, + { + "type": "number", + "value": "-7075137442856142154" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x7Ba0c2677B5E0F8f38F7F63706285827487f81ef" + }, + { + "type": "string", + "value": "Moo é🚀éoooMoo " + }, + { + "type": "hexstring", + "value": "0x92" + }, + { + "type": "number", + "value": "16433703827913589581502359332569286188739228227578518029371614977" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀M🚀oéo🚀é ooéoMooo🚀o🚀oé🚀🚀oéoo🚀Mo🚀 🚀Mé oo🚀" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0x971FEF9281643D6d0DEb6A7e71b6AfB274F42BB0" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3688368" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "7692595569902164889" + }, + { + "type": "number", + "value": "-3971984619589784919" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xf46E8Fb760454aC809C8b54d6FFd5164a2eB0EFe" + }, + { + "type": "string", + "value": "Moo é🚀 éo🚀oé🚀 M" + }, + { + "type": "hexstring", + "value": "0x0a" + }, + { + "type": "number", + "value": "58703094886778838796687464122993861423723403987518296264635840146" + }, + { + "type": "string", + "value": "Moo é🚀 éoooMo M MM é oMM🚀o🚀 o🚀o🚀🚀M o 🚀oM" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0xb44d01A33e16eFFB157ae498A272c7E54dbf4824" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506117b7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061127e565b60405180910390f35b610056610fea565b61005e610fea565b610066611017565b61006e611044565b627838fd815261007c61107d565b6752e9aa17bf9e05e38152673b6f57e67047e5f46020808301919091528201526100a461109b565b6100ac6110b3565b6100b46110d3565b6040805160008082526020820190925282525060408051600180825281830190925260009160208083019080368337019050509050600060019050808260008151811061010357610103611363565b9115156020928302919091018201528301919091525081526101236110fa565b737967b6017c61a0d3245f1aa3d18d5071da010a518152604080518082018252600a8152689adede418753e13f3560b71b6020808301919091528084019190915260bb60f81b828401527a32e988690e412da48c036fe5c3bd253654e72a641583075a91b07e606080850191909152825190810190925260388083526000929161163890830139608083015250602082015281526040820152739e749337db3f580ada7d5c4639798893ea7526b5606082015281526101e0611044565b62398d1181526101ee61107d565b6737cca661f59f2a87198152676877aad715699dce60208083019190915282015261021761109b565b61021f6110b3565b6102276110d3565b604080516001808252818301909252600091602080830190803683370190505090506000808260008151811061025f5761025f611363565b9115156020928302919091019091015250815260408051600180825281830190925260009181602001602082028036833701905050905060006001905080826000815181106102b0576102b0611363565b9115156020928302919091018201528301919091525081526102d06110fa565b73cf9da3bfa345a2558a99f6fa3d651da12b6d8ce38152604080518082018252600a8152689adede418753e13f3560b71b60208083019190915280840191909152605960f81b828401527a2ddb6b1cc136b6e5e271b8123ad8adc3951d2282053794688fd3906060840152815160a081019092526069808352600092916116709083013960808301525060208201528152604082015273b00441329843ac8adfd78cc9ab6bbdec78ad0540606082015280826001602002015250610392611044565b62c4eece81526103a061107d565b67202d2771a9a78e4581526779dabf79484e48f6196020808301919091528201526103c961109b565b6103d16110b3565b6103d96110d3565b60408051600180825281830190925260009160208083019080368337019050509050600060019050808260008151811061041557610415611363565b9115156020928302919091018201529183525060408051600081528083019091529082015281526104446110fa565b73e03fa562aef693bd4a95213797d4f1f25860e7c681526040805160808101909152605580825260009190611570602083013960208084019190915260d360f81b6040808501919091527a499912702fa9188a4076fb7c06ac693dcb25f2fe8d5466ab9046006060850152805160a0810190915260738082526000935090916116d99083013960808301525060208201528152604082810191909152735814ed4f37d81895462f38dd32d0d2d2d4eb2c8060608301528201528152610507611017565b61050f611044565b62ddc3bc815261051d61107d565b67071f192c939950108152670b1470568010345f60208083019190915282015261054561109b565b61054d6110b3565b6105556110d3565b60408051600180825281830190925260009160208083019080368337019050509050600060019050808260008151811061059157610591611363565b911515602092830291909101909101525081526040805160028082526060820190925260009181602001602082028036833701905050905060006001905080826000815181106105e3576105e3611363565b602002602001019015159081151581525050506000808260018151811061060c5761060c611363565b91151560209283029190910182015283019190915250815261062c6110fa565b73bfb96a7f4f88c0ab5fce2b2915000d51a08243ee81526040805160a0810190915260698082526000919061137a6020830139602080840191909152602960fa1b6040808501919091527ae5273bed862c7fb729df80825f7f6a1d01eb5f000c39e0792dc3f9606080860191909152815190810190915260348082526000935090916115c5908301396080830152506020820152815260408201527346502e3551e8cb08916e43e57a5afc594446dd68606082015281526106eb611044565b6218d43381526106f961107d565b673974a4229fd0bdde198152672e9bb6281e05739e60208083019190915282015261072261109b565b61072a6110b3565b6107326110d3565b6040805160028082526060820183526000926020830190803683370190505090506000808260008151811061076957610769611363565b602002602001019015159081151581525050506000808260018151811061079257610792611363565b9115156020928302919091018201529183525060408051600081528083019091529082015281526107c16110fa565b73b13d4df06a5df00cb09bc488b842f335993424b18152604080516060810190915260368082526000919061174c6020830139602080840191909152601b60fa1b6040808501919091527a4d742658adf16776c10030c279339e5a3c80a696c9624b6fe250926060850152805160a08101909152606380825260009350909161150d90830139608083015250602082015281526040820152730f9278e8f3ae371aa040928a45951552a8929faa606082015280826001602002015250610885611044565b62210446815261089361107d565b6735f0430125fb96068152676805754b37d76cde196020808301919091528201526108bc61109b565b6108c46110b3565b6108cc6110d3565b604080516001808252818301909252600091602080830190803683370190505090506000808260008151811061090457610904611363565b9115156020928302919091018201529183525060408051600081528083019091529082015281526109336110fa565b734c65e31982dadda42307adb243cca8a72ae64222815260408051608081019091526045808252600091906114876020830139602080840191909152604360f81b6040808501919091527a91c165138e7aafa2ab3d02f6f13fc44074e4d709b021c996baf8906060808601919091528151908101909152603f8082526000935090916115f99083013960808301525060208201528152604082015273bb4c616bc615b7b6c9d8744cdc0c93f90dad655a60608201528082600260200201525080826001602002015250610a04611017565b610a0c611044565b621de7308152610a1a61107d565b6740e6c2fb6c5233cb8152670c4ac3ba6217eedc19602080830191909152820152610a4361109b565b610a4b6110b3565b610a536110d3565b6040805160008082526020820190925282525060408051600480825260a082019092526000916020820160808036833701905050905060008082600081518110610a9f57610a9f611363565b6020026020010190151590811515815250505060008082600181518110610ac857610ac8611363565b602002602001019015159081151581525050506000600190508082600281518110610af557610af5611363565b602002602001019015159081151581525050506000600190508082600381518110610b2257610b22611363565b911515602092830291909101820152830191909152508152610b426110fa565b7357a9be1880e68943adce4f62e175b3476f0a37ca815260408051608081019091526047808252600091906114406020830139602083810191909152606d60f81b6040808501919091527a883f1708b95cffd5eea5996a4eb04392905294f5e60cefa2251cac6060808601919091528151808301835260138152719adede418753e13f3500dede9ade41e13f35606f1b81850152608086015291850193909352928452508301919091527384b65f1320babb0e307b5834708301c7ca3023af908201528152610c0f611044565b62cf39fa8152610c1d61107d565b6717e91e0721d58d3519815267622ff004c281854919602080830191909152820152610c4761109b565b610c4f6110b3565b610c576110d3565b60408051600080825260208201909252825250604080516003808252608082019092526000916020820160608036833701905050905060008082600081518110610ca357610ca3611363565b6020026020010190151590811515815250505060008082600181518110610ccc57610ccc611363565b6020026020010190151590811515815250505060008082600281518110610cf557610cf5611363565b911515602092830291909101820152830191909152508152610d156110fa565b737ba0c2677b5e0f8f38f7f63706285827487f81ef81526040805180820182526013815272026b7b79061d4f84fcd4061d4b7b7b7a6b7b79606d1b60208083019190915280840191909152604960f91b828401527a27f2b810567a789a63179f96b6778740f17d674122c67c7c06a7016060840152815160808101909252605d808352600092916113e39083013960808301525060208201528152604082015273971fef9281643d6d0deb6a7e71b6afb274f42bb0606082015280826001602002015250610de1611044565b623847b08152610def61107d565b676ac196e9e8c31b99815267371f52f78ff6d55619602080830191909152820152610e1861109b565b610e206110b3565b610e286110d3565b60408051600480825260a08201909252600091602082016080803683370190505090506000600190508082600081518110610e6557610e65611363565b602002602001019015159081151581525050506000600190508082600181518110610e9257610e92611363565b6020026020010190151590811515815250505060008082600281518110610ebb57610ebb611363565b6020026020010190151590811515815250505060008082600381518110610ee457610ee4611363565b911515602092830291909101820152918352506040805160008152808301909152908201528152610f136110fa565b73f46e8fb760454ac809c8b54d6ffd5164a2eb0efe8152604080518082018252601b81527f4d6f6f20c3a9f09f9a8020c3a96ff09f9a806fc3a9f09f9a80204d000000000060208083019190915280840191909152600560f91b828401527a8eb3068ff010187e190e82ade9660f131c6b9c035638dd0573f69260608401528151608081019092526041808352600092916114cc908301396080830152506020820152815260408281019190915273b44d01a33e16effb157ae498a272c7e54dbf4824606083015282810191909152820152919050565b60405180606001604052806003905b611001611017565b815260200190600190039081610ff95790505090565b60405180606001604052806003905b61102e611044565b8152602001906001900390816110265790505090565b6040518060800160405280600062ffffff16815260200161106361107d565b815260200161107061109b565b8152600060209091015290565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806110ae6110b3565b905290565b60405180604001604052806110c66110d3565b81526020016110ae6110fa565b60405180604001604052806002905b60608152602001906001900390816110e25790505090565b6040805160a081018252600080825260606020830181905292820181905282820152608081019190915290565b6000815180845260005b8181101561114d57602081850181015186830182015201611131565b8181111561115f576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0381511682526000602082015160a0602085015261119b60a0850182611127565b905060ff60f81b604084015116604085015260018060d81b036060840151166060850152608083015184820360808601526111d68282611127565b95945050505050565b8051602080845281516040858301526000929060a08601906060870185805b600281101561125557898503605f19018352835180518087529088019088870190845b8181101561123f57835115158352928a0192918a0191600101611221565b50909650505092860192918601916001016111fe565b5050505091810151858303601f19016040870152916112748184611174565b9695505050505050565b60208082526000906080830183820185845b600380821061129f5750611357565b878503601f19018452825185606080820160005b85811015611340578982038452845160a062ffffff82511684528c8201518d850160005b60028110156112f757825160070b8252918f0191908f01906001016112d7565b50505060408201518186860152611310828601826111df565b928601516001600160a01b038116608087015292915061132d9050565b958c0195948c01949250506001016112b3565b509750505093860193505090840190600101611290565b50919695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80206f6f206f20c3a9f09f9a806f6f4d4dc3a94df09f9a804d20f09f9a806ff09f9a806f20f09f9a806fc3a9f09f9a804dc3a9f09f9a804d6f206f20c3a9c3a96f6f6f4df09f9a80c3a9f09f9a80c3a96f6fc3a96f6f204dc3a96fc3a94d4d4d4d6f6f20c3a9f09f9a80f09f9a80f09f9a804df09f9a806fc3a96ff09f9a80c3a9206f6fc3a96f4d6f6f6ff09f9a806ff09f9a806fc3a9f09f9a80f09f9a806fc3a96f6ff09f9a804d6ff09f9a8020f09f9a804dc3a9206f6ff09f9a804d6f6f20c3a9f09f9a806fc3a9f09f9a8020f09f9a80c3a9c3a9c3a9f09f9a806ff09f9a80f09f9a806f20c3a920c3a9c3a96f204df09f9a806f6f4d4d4d204df09f9a804dc3a94d6f6f20c3a9f09f9a806ff09f9a80f09f9a804d20f09f9a80f09f9a80f09f9a806f4df09f9a806f6f4df09f9a806ff09f9a804d4d6f4d6f6fc3a94d20f09f9a806f206f204d6f6f20c3a9f09f9a8020c3a96f6f6f4d6f204d204d4d20c3a9206f4d4df09f9a806ff09f9a80206ff09f9a806ff09f9a80f09f9a804d206f2020f09f9a806f4d4d6f6f20c3a9f09f9a806ff09f9a806fc3a920206fc3a9c3a9f09f9a806fc3a96fc3a920f09f9a80c3a9206f6f206f6f206f4df09f9a806f4d6f6fc3a9f09f9a804d20f09f9a80c3a94dc3a9204d4d4d4df09f9a80c3a96fc3a9c3a9204d206f6fc3a94d6f6f20c3a9f09f9a80c3a9f09f9a80206f6f4d6f20c3a96f6fc3a94dc3a9c3a9c3a96f6f6fc3a9c3a9c3a9f09f9a806fc3a9c3a9c3a9206f6f20c3a96ff09f9a80f09f9a80f09f9a80c3a9f09f9a80204d6fc3a94d6f6f20c3a9f09f9a806f6f6fc3a96ff09f9a804d6fc3a96ff09f9a80204d6f6f6f20204df09f9a80206f6fc3a9c3a9c3a9c3a94d6f6f20c3a9f09f9a80c3a9c3a9c3a96f204dc3a96f6f6f6ff09f9a804d4d6f2020c3a9c3a96f6f6f20c3a94d6ff09f9a80206fc3a9c3a920c3a9f09f9a804d6f6f20c3a9f09f9a804d6ff09f9a80f09f9a806f6f6f6f6ff09f9a806ff09f9a8020c3a94d6ff09f9a806f6ff09f9a806ff09f9a804d6f4d6f6f20c3a9f09f9a804df09f9a80f09f9a806ff09f9a80c3a9f09f9a80f09f9a806f4d4d4df09f9a806f4d204d20c3a94d4df09f9a804d2020f09f9a80c3a9c3a96f6f6f6f6f6f2020f09f9a806fc3a9f09f9a80f09f9a804d6f20c3a96ff09f9a80c3a96f6fc3a94d6f6f20c3a9f09f9a80206ff09f9a80c3a94dc3a920f09f9a80f09f9a80204df09f9a804dc3a9c3a9f09f9a806f4d6ff09f9a804d6f6f4d206f4df09f9a80c3a96f6fc3a94dc3a9204d206ff09f9a804df09f9a804d2020f09f9a806ff09f9a806f6fc3a96f4d6ff09f9a8020f09f9a80c3a94d6f6f20c3a9f09f9a806f6f204dc3a9f09f9a806ff09f9a80c3a9f09f9a806f4dc3a9f09f9a8020f09f9a804d206f6f6ff09f9a806fa2646970667358221220ebfc13114590139dec252a3036b45ae3affe8a3a1afffdc63a7a82bb35af7b3364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_885e90a2 {\n address s_0;\n string s_1;\n bytes1 s_2;\n uint216 s_3;\n string s_4;\n }\n\n struct S_502390a3 {\n bool[][2] s_0;\n S_885e90a2 s_1;\n }\n\n struct S_1900ede5 {\n S_502390a3 s_0;\n }\n\n struct S_a9031fcd {\n uint24 s_0;\n int64[2] s_1;\n S_1900ede5 s_2;\n address s_3;\n }\n\n function test () public pure returns (S_a9031fcd[3][3] memory) {\n S_a9031fcd[3][3] memory r;\n {\n S_a9031fcd[3] memory r_0;\n {\n S_a9031fcd memory r_0_0;\n {\n uint24 r_0_0_0 = 7878909;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n int64[2] memory r_0_0_1;\n {\n int64 r_0_0_1_0 = 5974493399659447779;\n r_0_0_1[0] = r_0_0_1_0;\n }\n {\n int64 r_0_0_1_1 = 4282738417890485748;\n r_0_0_1[1] = r_0_0_1_1;\n }\n r_0_0.s_1 = r_0_0_1;\n }\n {\n S_1900ede5 memory r_0_0_2;\n {\n S_502390a3 memory r_0_0_2_0;\n {\n bool[][2] memory r_0_0_2_0_0;\n {\n bool[] memory r_0_0_2_0_0_0 = new bool[](0);\n r_0_0_2_0_0[0] = r_0_0_2_0_0_0;\n }\n {\n bool[] memory r_0_0_2_0_0_1 = new bool[](1);\n {\n bool r_0_0_2_0_0_1_0 = true;\n r_0_0_2_0_0_1[0] = r_0_0_2_0_0_1_0;\n }\n r_0_0_2_0_0[1] = r_0_0_2_0_0_1;\n }\n r_0_0_2_0.s_0 = r_0_0_2_0_0;\n }\n {\n S_885e90a2 memory r_0_0_2_0_1;\n {\n address r_0_0_2_0_1_0 = 0x7967B6017C61A0d3245f1aA3D18d5071Da010a51;\n r_0_0_2_0_1.s_0 = r_0_0_2_0_1_0;\n }\n {\n string memory r_0_0_2_0_1_1 = unicode\"Moo é🚀\";\n r_0_0_2_0_1.s_1 = r_0_0_2_0_1_1;\n }\n {\n bytes1 r_0_0_2_0_1_2 = bytes1(0xbb);\n r_0_0_2_0_1.s_2 = r_0_0_2_0_1_2;\n }\n {\n uint216 r_0_0_2_0_1_3 = 20944079792621261196888964681634754148806223982820931539781660798;\n r_0_0_2_0_1.s_3 = r_0_0_2_0_1_3;\n }\n {\n string memory r_0_0_2_0_1_4 = unicode\"Moo é🚀Mo🚀🚀ooooo🚀o🚀 éMo🚀oo🚀o🚀Mo\";\n r_0_0_2_0_1.s_4 = r_0_0_2_0_1_4;\n }\n r_0_0_2_0.s_1 = r_0_0_2_0_1;\n }\n r_0_0_2.s_0 = r_0_0_2_0;\n }\n r_0_0.s_2 = r_0_0_2;\n }\n {\n address r_0_0_3 = 0x9e749337dB3f580Ada7d5c4639798893ea7526b5;\n r_0_0.s_3 = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n S_a9031fcd memory r_0_1;\n {\n uint24 r_0_1_0 = 3771665;\n r_0_1.s_0 = r_0_1_0;\n }\n {\n int64[2] memory r_0_1_1;\n {\n int64 r_0_1_1_0 = -4020771506997897864;\n r_0_1_1[0] = r_0_1_1_0;\n }\n {\n int64 r_0_1_1_1 = 7527673142927007182;\n r_0_1_1[1] = r_0_1_1_1;\n }\n r_0_1.s_1 = r_0_1_1;\n }\n {\n S_1900ede5 memory r_0_1_2;\n {\n S_502390a3 memory r_0_1_2_0;\n {\n bool[][2] memory r_0_1_2_0_0;\n {\n bool[] memory r_0_1_2_0_0_0 = new bool[](1);\n {\n bool r_0_1_2_0_0_0_0 = false;\n r_0_1_2_0_0_0[0] = r_0_1_2_0_0_0_0;\n }\n r_0_1_2_0_0[0] = r_0_1_2_0_0_0;\n }\n {\n bool[] memory r_0_1_2_0_0_1 = new bool[](1);\n {\n bool r_0_1_2_0_0_1_0 = true;\n r_0_1_2_0_0_1[0] = r_0_1_2_0_0_1_0;\n }\n r_0_1_2_0_0[1] = r_0_1_2_0_0_1;\n }\n r_0_1_2_0.s_0 = r_0_1_2_0_0;\n }\n {\n S_885e90a2 memory r_0_1_2_0_1;\n {\n address r_0_1_2_0_1_0 = 0xCf9da3bfA345A2558a99F6fA3D651dA12b6D8CE3;\n r_0_1_2_0_1.s_0 = r_0_1_2_0_1_0;\n }\n {\n string memory r_0_1_2_0_1_1 = unicode\"Moo é🚀\";\n r_0_1_2_0_1.s_1 = r_0_1_2_0_1_1;\n }\n {\n bytes1 r_0_1_2_0_1_2 = bytes1(0x59);\n r_0_1_2_0_1.s_2 = r_0_1_2_0_1_2;\n }\n {\n uint216 r_0_1_2_0_1_3 = 18864518056506174093383034214245207148746026942282257145290281872;\n r_0_1_2_0_1.s_3 = r_0_1_2_0_1_3;\n }\n {\n string memory r_0_1_2_0_1_4 = unicode\"Moo é🚀M🚀🚀o🚀é🚀🚀oMMM🚀oM M éMM🚀M 🚀ééoooooo 🚀oé🚀🚀Mo éo🚀éooé\";\n r_0_1_2_0_1.s_4 = r_0_1_2_0_1_4;\n }\n r_0_1_2_0.s_1 = r_0_1_2_0_1;\n }\n r_0_1_2.s_0 = r_0_1_2_0;\n }\n r_0_1.s_2 = r_0_1_2;\n }\n {\n address r_0_1_3 = 0xB00441329843aC8adFD78cC9ab6BbDEc78aD0540;\n r_0_1.s_3 = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n {\n S_a9031fcd memory r_0_2;\n {\n uint24 r_0_2_0 = 12906190;\n r_0_2.s_0 = r_0_2_0;\n }\n {\n int64[2] memory r_0_2_1;\n {\n int64 r_0_2_1_0 = 2318552752296791621;\n r_0_2_1[0] = r_0_2_1_0;\n }\n {\n int64 r_0_2_1_1 = -8780540951137241335;\n r_0_2_1[1] = r_0_2_1_1;\n }\n r_0_2.s_1 = r_0_2_1;\n }\n {\n S_1900ede5 memory r_0_2_2;\n {\n S_502390a3 memory r_0_2_2_0;\n {\n bool[][2] memory r_0_2_2_0_0;\n {\n bool[] memory r_0_2_2_0_0_0 = new bool[](1);\n {\n bool r_0_2_2_0_0_0_0 = true;\n r_0_2_2_0_0_0[0] = r_0_2_2_0_0_0_0;\n }\n r_0_2_2_0_0[0] = r_0_2_2_0_0_0;\n }\n {\n bool[] memory r_0_2_2_0_0_1 = new bool[](0);\n r_0_2_2_0_0[1] = r_0_2_2_0_0_1;\n }\n r_0_2_2_0.s_0 = r_0_2_2_0_0;\n }\n {\n S_885e90a2 memory r_0_2_2_0_1;\n {\n address r_0_2_2_0_1_0 = 0xE03FA562AEF693Bd4A95213797d4F1f25860E7C6;\n r_0_2_2_0_1.s_0 = r_0_2_2_0_1_0;\n }\n {\n string memory r_0_2_2_0_1_1 = unicode\"Moo é🚀é🚀 ooMo éooéMéééoooééé🚀oééé oo éo🚀🚀🚀é🚀 Moé\";\n r_0_2_2_0_1.s_1 = r_0_2_2_0_1_1;\n }\n {\n bytes1 r_0_2_2_0_1_2 = bytes1(0xd3);\n r_0_2_2_0_1.s_2 = r_0_2_2_0_1_2;\n }\n {\n uint216 r_0_2_2_0_1_3 = 30276435430511853896861358542986961747667647253423379231122933248;\n r_0_2_2_0_1.s_3 = r_0_2_2_0_1_3;\n }\n {\n string memory r_0_2_2_0_1_4 = unicode\"Moo é🚀 o🚀éMé 🚀🚀 M🚀Méé🚀oMo🚀MooM oM🚀éooéMé M o🚀M🚀M 🚀o🚀ooéoMo🚀 🚀é\";\n r_0_2_2_0_1.s_4 = r_0_2_2_0_1_4;\n }\n r_0_2_2_0.s_1 = r_0_2_2_0_1;\n }\n r_0_2_2.s_0 = r_0_2_2_0;\n }\n r_0_2.s_2 = r_0_2_2;\n }\n {\n address r_0_2_3 = 0x5814ED4F37D81895462f38dd32d0d2D2d4eB2c80;\n r_0_2.s_3 = r_0_2_3;\n }\n r_0[2] = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_a9031fcd[3] memory r_1;\n {\n S_a9031fcd memory r_1_0;\n {\n uint24 r_1_0_0 = 14533564;\n r_1_0.s_0 = r_1_0_0;\n }\n {\n int64[2] memory r_1_0_1;\n {\n int64 r_1_0_1_0 = 513156561789079568;\n r_1_0_1[0] = r_1_0_1_0;\n }\n {\n int64 r_1_0_1_1 = 798386550769464415;\n r_1_0_1[1] = r_1_0_1_1;\n }\n r_1_0.s_1 = r_1_0_1;\n }\n {\n S_1900ede5 memory r_1_0_2;\n {\n S_502390a3 memory r_1_0_2_0;\n {\n bool[][2] memory r_1_0_2_0_0;\n {\n bool[] memory r_1_0_2_0_0_0 = new bool[](1);\n {\n bool r_1_0_2_0_0_0_0 = true;\n r_1_0_2_0_0_0[0] = r_1_0_2_0_0_0_0;\n }\n r_1_0_2_0_0[0] = r_1_0_2_0_0_0;\n }\n {\n bool[] memory r_1_0_2_0_0_1 = new bool[](2);\n {\n bool r_1_0_2_0_0_1_0 = true;\n r_1_0_2_0_0_1[0] = r_1_0_2_0_0_1_0;\n }\n {\n bool r_1_0_2_0_0_1_1 = false;\n r_1_0_2_0_0_1[1] = r_1_0_2_0_0_1_1;\n }\n r_1_0_2_0_0[1] = r_1_0_2_0_0_1;\n }\n r_1_0_2_0.s_0 = r_1_0_2_0_0;\n }\n {\n S_885e90a2 memory r_1_0_2_0_1;\n {\n address r_1_0_2_0_1_0 = 0xbFB96A7F4F88C0Ab5FcE2B2915000D51A08243eE;\n r_1_0_2_0_1.s_0 = r_1_0_2_0_1_0;\n }\n {\n string memory r_1_0_2_0_1_1 = unicode\"Moo é🚀 oo o é🚀ooMMéM🚀M 🚀o🚀o 🚀oé🚀Mé🚀Mo o ééoooM🚀é🚀éooéoo MéoéMMM\";\n r_1_0_2_0_1.s_1 = r_1_0_2_0_1_1;\n }\n {\n bytes1 r_1_0_2_0_1_2 = bytes1(0xa4);\n r_1_0_2_0_1.s_2 = r_1_0_2_0_1_2;\n }\n {\n uint216 r_1_0_2_0_1_3 = 94268182663441924477315506316433561309740241761516795906835203065;\n r_1_0_2_0_1.s_3 = r_1_0_2_0_1_3;\n }\n {\n string memory r_1_0_2_0_1_4 = unicode\"Moo é🚀oooéo🚀Moéo🚀 Mooo M🚀 ooéééé\";\n r_1_0_2_0_1.s_4 = r_1_0_2_0_1_4;\n }\n r_1_0_2_0.s_1 = r_1_0_2_0_1;\n }\n r_1_0_2.s_0 = r_1_0_2_0;\n }\n r_1_0.s_2 = r_1_0_2;\n }\n {\n address r_1_0_3 = 0x46502e3551E8CB08916E43E57a5aFc594446dD68;\n r_1_0.s_3 = r_1_0_3;\n }\n r_1[0] = r_1_0;\n }\n {\n S_a9031fcd memory r_1_1;\n {\n uint24 r_1_1_0 = 1627187;\n r_1_1.s_0 = r_1_1_0;\n }\n {\n int64[2] memory r_1_1_1;\n {\n int64 r_1_1_1_0 = -4140114426077429215;\n r_1_1_1[0] = r_1_1_1_0;\n }\n {\n int64 r_1_1_1_1 = 3358478230553457566;\n r_1_1_1[1] = r_1_1_1_1;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n {\n S_1900ede5 memory r_1_1_2;\n {\n S_502390a3 memory r_1_1_2_0;\n {\n bool[][2] memory r_1_1_2_0_0;\n {\n bool[] memory r_1_1_2_0_0_0 = new bool[](2);\n {\n bool r_1_1_2_0_0_0_0 = false;\n r_1_1_2_0_0_0[0] = r_1_1_2_0_0_0_0;\n }\n {\n bool r_1_1_2_0_0_0_1 = false;\n r_1_1_2_0_0_0[1] = r_1_1_2_0_0_0_1;\n }\n r_1_1_2_0_0[0] = r_1_1_2_0_0_0;\n }\n {\n bool[] memory r_1_1_2_0_0_1 = new bool[](0);\n r_1_1_2_0_0[1] = r_1_1_2_0_0_1;\n }\n r_1_1_2_0.s_0 = r_1_1_2_0_0;\n }\n {\n S_885e90a2 memory r_1_1_2_0_1;\n {\n address r_1_1_2_0_1_0 = 0xb13d4DF06a5DF00cB09bc488B842f335993424B1;\n r_1_1_2_0_1.s_0 = r_1_1_2_0_1_0;\n }\n {\n string memory r_1_1_2_0_1_1 = unicode\"Moo é🚀oo Mé🚀o🚀é🚀oMé🚀 🚀M ooo🚀o\";\n r_1_1_2_0_1.s_1 = r_1_1_2_0_1_1;\n }\n {\n bytes1 r_1_1_2_0_1_2 = bytes1(0x6c);\n r_1_1_2_0_1.s_2 = r_1_1_2_0_1_2;\n }\n {\n uint216 r_1_1_2_0_1_3 = 31862608245847353469749369818515597333705403400770420586412396690;\n r_1_1_2_0_1.s_3 = r_1_1_2_0_1_3;\n }\n {\n string memory r_1_1_2_0_1_4 = unicode\"Moo é🚀o🚀oé oéé🚀oéoé 🚀é oo oo oM🚀oMooé🚀M 🚀éMé MMMM🚀éoéé M ooé\";\n r_1_1_2_0_1.s_4 = r_1_1_2_0_1_4;\n }\n r_1_1_2_0.s_1 = r_1_1_2_0_1;\n }\n r_1_1_2.s_0 = r_1_1_2_0;\n }\n r_1_1.s_2 = r_1_1_2;\n }\n {\n address r_1_1_3 = 0x0f9278E8F3Ae371aa040928A45951552A8929faa;\n r_1_1.s_3 = r_1_1_3;\n }\n r_1[1] = r_1_1;\n }\n {\n S_a9031fcd memory r_1_2;\n {\n uint24 r_1_2_0 = 2163782;\n r_1_2.s_0 = r_1_2_0;\n }\n {\n int64[2] memory r_1_2_1;\n {\n int64 r_1_2_1_0 = 3886680150632011270;\n r_1_2_1[0] = r_1_2_1_0;\n }\n {\n int64 r_1_2_1_1 = -7495526120747920607;\n r_1_2_1[1] = r_1_2_1_1;\n }\n r_1_2.s_1 = r_1_2_1;\n }\n {\n S_1900ede5 memory r_1_2_2;\n {\n S_502390a3 memory r_1_2_2_0;\n {\n bool[][2] memory r_1_2_2_0_0;\n {\n bool[] memory r_1_2_2_0_0_0 = new bool[](1);\n {\n bool r_1_2_2_0_0_0_0 = false;\n r_1_2_2_0_0_0[0] = r_1_2_2_0_0_0_0;\n }\n r_1_2_2_0_0[0] = r_1_2_2_0_0_0;\n }\n {\n bool[] memory r_1_2_2_0_0_1 = new bool[](0);\n r_1_2_2_0_0[1] = r_1_2_2_0_0_1;\n }\n r_1_2_2_0.s_0 = r_1_2_2_0_0;\n }\n {\n S_885e90a2 memory r_1_2_2_0_1;\n {\n address r_1_2_2_0_1_0 = 0x4c65e31982DadDa42307ADb243ccA8A72Ae64222;\n r_1_2_2_0_1.s_0 = r_1_2_2_0_1_0;\n }\n {\n string memory r_1_2_2_0_1_1 = unicode\"Moo é🚀o🚀🚀M 🚀🚀🚀oM🚀ooM🚀o🚀MMoMooéM 🚀o o \";\n r_1_2_2_0_1.s_1 = r_1_2_2_0_1_1;\n }\n {\n bytes1 r_1_2_2_0_1_2 = bytes1(0x43);\n r_1_2_2_0_1.s_2 = r_1_2_2_0_1_2;\n }\n {\n uint216 r_1_2_2_0_1_3 = 59960313712236422865068254353737427957776817516749974264136530064;\n r_1_2_2_0_1.s_3 = r_1_2_2_0_1_3;\n }\n {\n string memory r_1_2_2_0_1_4 = unicode\"Moo é🚀éééo Méoooo🚀MMo ééooo éMo🚀 oéé é🚀\";\n r_1_2_2_0_1.s_4 = r_1_2_2_0_1_4;\n }\n r_1_2_2_0.s_1 = r_1_2_2_0_1;\n }\n r_1_2_2.s_0 = r_1_2_2_0;\n }\n r_1_2.s_2 = r_1_2_2;\n }\n {\n address r_1_2_3 = 0xbb4c616bc615b7b6C9D8744CdC0C93F90dAd655a;\n r_1_2.s_3 = r_1_2_3;\n }\n r_1[2] = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_a9031fcd[3] memory r_2;\n {\n S_a9031fcd memory r_2_0;\n {\n uint24 r_2_0_0 = 1959728;\n r_2_0.s_0 = r_2_0_0;\n }\n {\n int64[2] memory r_2_0_1;\n {\n int64 r_2_0_1_0 = 4676639648180745163;\n r_2_0_1[0] = r_2_0_1_0;\n }\n {\n int64 r_2_0_1_1 = -885735482008792797;\n r_2_0_1[1] = r_2_0_1_1;\n }\n r_2_0.s_1 = r_2_0_1;\n }\n {\n S_1900ede5 memory r_2_0_2;\n {\n S_502390a3 memory r_2_0_2_0;\n {\n bool[][2] memory r_2_0_2_0_0;\n {\n bool[] memory r_2_0_2_0_0_0 = new bool[](0);\n r_2_0_2_0_0[0] = r_2_0_2_0_0_0;\n }\n {\n bool[] memory r_2_0_2_0_0_1 = new bool[](4);\n {\n bool r_2_0_2_0_0_1_0 = false;\n r_2_0_2_0_0_1[0] = r_2_0_2_0_0_1_0;\n }\n {\n bool r_2_0_2_0_0_1_1 = false;\n r_2_0_2_0_0_1[1] = r_2_0_2_0_0_1_1;\n }\n {\n bool r_2_0_2_0_0_1_2 = true;\n r_2_0_2_0_0_1[2] = r_2_0_2_0_0_1_2;\n }\n {\n bool r_2_0_2_0_0_1_3 = true;\n r_2_0_2_0_0_1[3] = r_2_0_2_0_0_1_3;\n }\n r_2_0_2_0_0[1] = r_2_0_2_0_0_1;\n }\n r_2_0_2_0.s_0 = r_2_0_2_0_0;\n }\n {\n S_885e90a2 memory r_2_0_2_0_1;\n {\n address r_2_0_2_0_1_0 = 0x57A9be1880E68943AdcE4F62e175B3476F0a37CA;\n r_2_0_2_0_1.s_0 = r_2_0_2_0_1_0;\n }\n {\n string memory r_2_0_2_0_1_1 = unicode\"Moo é🚀oé🚀 🚀ééé🚀o🚀🚀o é ééo M🚀ooMMM M🚀Mé\";\n r_2_0_2_0_1.s_1 = r_2_0_2_0_1_1;\n }\n {\n bytes1 r_2_0_2_0_1_2 = bytes1(0x6d);\n r_2_0_2_0_1.s_2 = r_2_0_2_0_1_2;\n }\n {\n uint216 r_2_0_2_0_1_3 = 56048536632962939827198251916750354370706957288921132136638258348;\n r_2_0_2_0_1.s_3 = r_2_0_2_0_1_3;\n }\n {\n string memory r_2_0_2_0_1_4 = unicode\"Moo é🚀ooMo 🚀\";\n r_2_0_2_0_1.s_4 = r_2_0_2_0_1_4;\n }\n r_2_0_2_0.s_1 = r_2_0_2_0_1;\n }\n r_2_0_2.s_0 = r_2_0_2_0;\n }\n r_2_0.s_2 = r_2_0_2;\n }\n {\n address r_2_0_3 = 0x84b65f1320BaBb0E307b5834708301c7cA3023Af;\n r_2_0.s_3 = r_2_0_3;\n }\n r_2[0] = r_2_0;\n }\n {\n S_a9031fcd memory r_2_1;\n {\n uint24 r_2_1_0 = 13580794;\n r_2_1.s_0 = r_2_1_0;\n }\n {\n int64[2] memory r_2_1_1;\n {\n int64 r_2_1_1_0 = -1722941348427173174;\n r_2_1_1[0] = r_2_1_1_0;\n }\n {\n int64 r_2_1_1_1 = -7075137442856142154;\n r_2_1_1[1] = r_2_1_1_1;\n }\n r_2_1.s_1 = r_2_1_1;\n }\n {\n S_1900ede5 memory r_2_1_2;\n {\n S_502390a3 memory r_2_1_2_0;\n {\n bool[][2] memory r_2_1_2_0_0;\n {\n bool[] memory r_2_1_2_0_0_0 = new bool[](0);\n r_2_1_2_0_0[0] = r_2_1_2_0_0_0;\n }\n {\n bool[] memory r_2_1_2_0_0_1 = new bool[](3);\n {\n bool r_2_1_2_0_0_1_0 = false;\n r_2_1_2_0_0_1[0] = r_2_1_2_0_0_1_0;\n }\n {\n bool r_2_1_2_0_0_1_1 = false;\n r_2_1_2_0_0_1[1] = r_2_1_2_0_0_1_1;\n }\n {\n bool r_2_1_2_0_0_1_2 = false;\n r_2_1_2_0_0_1[2] = r_2_1_2_0_0_1_2;\n }\n r_2_1_2_0_0[1] = r_2_1_2_0_0_1;\n }\n r_2_1_2_0.s_0 = r_2_1_2_0_0;\n }\n {\n S_885e90a2 memory r_2_1_2_0_1;\n {\n address r_2_1_2_0_1_0 = 0x7Ba0c2677B5E0F8f38F7F63706285827487f81ef;\n r_2_1_2_0_1.s_0 = r_2_1_2_0_1_0;\n }\n {\n string memory r_2_1_2_0_1_1 = unicode\"Moo é🚀éoooMoo \";\n r_2_1_2_0_1.s_1 = r_2_1_2_0_1_1;\n }\n {\n bytes1 r_2_1_2_0_1_2 = bytes1(0x92);\n r_2_1_2_0_1.s_2 = r_2_1_2_0_1_2;\n }\n {\n uint216 r_2_1_2_0_1_3 = 16433703827913589581502359332569286188739228227578518029371614977;\n r_2_1_2_0_1.s_3 = r_2_1_2_0_1_3;\n }\n {\n string memory r_2_1_2_0_1_4 = unicode\"Moo é🚀🚀🚀M🚀oéo🚀é ooéoMooo🚀o🚀oé🚀🚀oéoo🚀Mo🚀 🚀Mé oo🚀\";\n r_2_1_2_0_1.s_4 = r_2_1_2_0_1_4;\n }\n r_2_1_2_0.s_1 = r_2_1_2_0_1;\n }\n r_2_1_2.s_0 = r_2_1_2_0;\n }\n r_2_1.s_2 = r_2_1_2;\n }\n {\n address r_2_1_3 = 0x971FEF9281643D6d0DEb6A7e71b6AfB274F42BB0;\n r_2_1.s_3 = r_2_1_3;\n }\n r_2[1] = r_2_1;\n }\n {\n S_a9031fcd memory r_2_2;\n {\n uint24 r_2_2_0 = 3688368;\n r_2_2.s_0 = r_2_2_0;\n }\n {\n int64[2] memory r_2_2_1;\n {\n int64 r_2_2_1_0 = 7692595569902164889;\n r_2_2_1[0] = r_2_2_1_0;\n }\n {\n int64 r_2_2_1_1 = -3971984619589784919;\n r_2_2_1[1] = r_2_2_1_1;\n }\n r_2_2.s_1 = r_2_2_1;\n }\n {\n S_1900ede5 memory r_2_2_2;\n {\n S_502390a3 memory r_2_2_2_0;\n {\n bool[][2] memory r_2_2_2_0_0;\n {\n bool[] memory r_2_2_2_0_0_0 = new bool[](4);\n {\n bool r_2_2_2_0_0_0_0 = true;\n r_2_2_2_0_0_0[0] = r_2_2_2_0_0_0_0;\n }\n {\n bool r_2_2_2_0_0_0_1 = true;\n r_2_2_2_0_0_0[1] = r_2_2_2_0_0_0_1;\n }\n {\n bool r_2_2_2_0_0_0_2 = false;\n r_2_2_2_0_0_0[2] = r_2_2_2_0_0_0_2;\n }\n {\n bool r_2_2_2_0_0_0_3 = false;\n r_2_2_2_0_0_0[3] = r_2_2_2_0_0_0_3;\n }\n r_2_2_2_0_0[0] = r_2_2_2_0_0_0;\n }\n {\n bool[] memory r_2_2_2_0_0_1 = new bool[](0);\n r_2_2_2_0_0[1] = r_2_2_2_0_0_1;\n }\n r_2_2_2_0.s_0 = r_2_2_2_0_0;\n }\n {\n S_885e90a2 memory r_2_2_2_0_1;\n {\n address r_2_2_2_0_1_0 = 0xf46E8Fb760454aC809C8b54d6FFd5164a2eB0EFe;\n r_2_2_2_0_1.s_0 = r_2_2_2_0_1_0;\n }\n {\n string memory r_2_2_2_0_1_1 = unicode\"Moo é🚀 éo🚀oé🚀 M\";\n r_2_2_2_0_1.s_1 = r_2_2_2_0_1_1;\n }\n {\n bytes1 r_2_2_2_0_1_2 = bytes1(0x0a);\n r_2_2_2_0_1.s_2 = r_2_2_2_0_1_2;\n }\n {\n uint216 r_2_2_2_0_1_3 = 58703094886778838796687464122993861423723403987518296264635840146;\n r_2_2_2_0_1.s_3 = r_2_2_2_0_1_3;\n }\n {\n string memory r_2_2_2_0_1_4 = unicode\"Moo é🚀 éoooMo M MM é oMM🚀o🚀 o🚀o🚀🚀M o 🚀oM\";\n r_2_2_2_0_1.s_4 = r_2_2_2_0_1_4;\n }\n r_2_2_2_0.s_1 = r_2_2_2_0_1;\n }\n r_2_2_2.s_0 = r_2_2_2_0;\n }\n r_2_2.s_2 = r_2_2_2;\n }\n {\n address r_2_2_3 = 0xb44d01A33e16eFFB157ae498A272c7E54dbf4824;\n r_2_2.s_3 = r_2_2_3;\n }\n r_2[2] = r_2_2;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000a4000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000007838fd00000000000000000000000000000000000000000000000052e9aa17bf9e05e30000000000000000000000000000000000000000000000003b6f57e67047e5f400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000009e749337db3f580ada7d5c4639798893ea7526b50000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000007967b6017c61a0d3245f1aa3d18d5071da010a5100000000000000000000000000000000000000000000000000000000000000a0bb00000000000000000000000000000000000000000000000000000000000000000000000032e988690e412da48c036fe5c3bd253654e72a641583075a91b07e00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a804d6ff09f9a80f09f9a806f6f6f6f6ff09f9a806ff09f9a8020c3a94d6ff09f9a806f6ff09f9a806ff09f9a804d6f00000000000000000000000000000000000000000000000000000000000000000000000000398d11ffffffffffffffffffffffffffffffffffffffffffffffffc833599e0a60d5780000000000000000000000000000000000000000000000006877aad715699dce00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b00441329843ac8adfd78cc9ab6bbdec78ad0540000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000cf9da3bfa345a2558a99f6fa3d651da12b6d8ce300000000000000000000000000000000000000000000000000000000000000a0590000000000000000000000000000000000000000000000000000000000000000000000002ddb6b1cc136b6e5e271b8123ad8adc3951d2282053794688fd39000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000694d6f6f20c3a9f09f9a804df09f9a80f09f9a806ff09f9a80c3a9f09f9a80f09f9a806f4d4d4df09f9a806f4d204d20c3a94d4df09f9a804d2020f09f9a80c3a9c3a96f6f6f6f6f6f2020f09f9a806fc3a9f09f9a80f09f9a804d6f20c3a96ff09f9a80c3a96f6fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4eece000000000000000000000000000000000000000000000000202d2771a9a78e45ffffffffffffffffffffffffffffffffffffffffffffffff86254086b7b1b70900000000000000000000000000000000000000000000000000000000000000a00000000000000000000000005814ed4f37d81895462f38dd32d0d2d2d4eb2c800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e03fa562aef693bd4a95213797d4f1f25860e7c600000000000000000000000000000000000000000000000000000000000000a0d3000000000000000000000000000000000000000000000000000000000000000000000000499912702fa9188a4076fb7c06ac693dcb25f2fe8d5466ab904600000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a80c3a9f09f9a80206f6f4d6f20c3a96f6fc3a94dc3a9c3a9c3a96f6f6fc3a9c3a9c3a9f09f9a806fc3a9c3a9c3a9206f6f20c3a96ff09f9a80f09f9a80f09f9a80c3a9f09f9a80204d6fc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000734d6f6f20c3a9f09f9a80206ff09f9a80c3a94dc3a920f09f9a80f09f9a80204df09f9a804dc3a9c3a9f09f9a806f4d6ff09f9a804d6f6f4d206f4df09f9a80c3a96f6fc3a94dc3a9204d206ff09f9a804df09f9a804d2020f09f9a806ff09f9a806f6fc3a96f4d6ff09f9a8020f09f9a80c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000007400000000000000000000000000000000000000000000000000000000000ddc3bc000000000000000000000000000000000000000000000000071f192c939950100000000000000000000000000000000000000000000000000b1470568010345f00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000046502e3551e8cb08916e43e57a5afc594446dd680000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bfb96a7f4f88c0ab5fce2b2915000d51a08243ee00000000000000000000000000000000000000000000000000000000000000a0a4000000000000000000000000000000000000000000000000000000000000000000000000e5273bed862c7fb729df80825f7f6a1d01eb5f000c39e0792dc3f9000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000694d6f6f20c3a9f09f9a80206f6f206f20c3a9f09f9a806f6f4d4dc3a94df09f9a804d20f09f9a806ff09f9a806f20f09f9a806fc3a9f09f9a804dc3a9f09f9a804d6f206f20c3a9c3a96f6f6f4df09f9a80c3a9f09f9a80c3a96f6fc3a96f6f204dc3a96fc3a94d4d4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a806f6f6fc3a96ff09f9a804d6fc3a96ff09f9a80204d6f6f6f20204df09f9a80206f6fc3a9c3a9c3a9c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000018d433ffffffffffffffffffffffffffffffffffffffffffffffffc68b5bdd602f42210000000000000000000000000000000000000000000000002e9bb6281e05739e00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000f9278e8f3ae371aa040928a45951552a8929faa000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b13d4df06a5df00cb09bc488b842f335993424b100000000000000000000000000000000000000000000000000000000000000a06c0000000000000000000000000000000000000000000000000000000000000000000000004d742658adf16776c10030c279339e5a3c80a696c9624b6fe25092000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a806f6f204dc3a9f09f9a806ff09f9a80c3a9f09f9a806f4dc3a9f09f9a8020f09f9a804d206f6f6ff09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a806ff09f9a806fc3a920206fc3a9c3a9f09f9a806fc3a96fc3a920f09f9a80c3a9206f6f206f6f206f4df09f9a806f4d6f6fc3a9f09f9a804d20f09f9a80c3a94dc3a9204d4d4d4df09f9a80c3a96fc3a9c3a9204d206f6fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021044600000000000000000000000000000000000000000000000035f0430125fb9606ffffffffffffffffffffffffffffffffffffffffffffffff97fa8ab4c828932100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000bb4c616bc615b7b6c9d8744cdc0c93f90dad655a0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c65e31982dadda42307adb243cca8a72ae6422200000000000000000000000000000000000000000000000000000000000000a04300000000000000000000000000000000000000000000000000000000000000000000000091c165138e7aafa2ab3d02f6f13fc44074e4d709b021c996baf890000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a806ff09f9a80f09f9a804d20f09f9a80f09f9a80f09f9a806f4df09f9a806f6f4df09f9a806ff09f9a804d4d6f4d6f6fc3a94d20f09f9a806f206f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a80c3a9c3a9c3a96f204dc3a96f6f6f6ff09f9a804d4d6f2020c3a9c3a96f6f6f20c3a94d6ff09f9a80206fc3a9c3a920c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000001de73000000000000000000000000000000000000000000000000040e6c2fb6c5233cbfffffffffffffffffffffffffffffffffffffffffffffffff3b53c459de8112300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000084b65f1320babb0e307b5834708301c7ca3023af0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000057a9be1880e68943adce4f62e175b3476f0a37ca00000000000000000000000000000000000000000000000000000000000000a06d000000000000000000000000000000000000000000000000000000000000000000000000883f1708b95cffd5eea5996a4eb04392905294f5e60cefa2251cac000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000474d6f6f20c3a9f09f9a806fc3a9f09f9a8020f09f9a80c3a9c3a9c3a9f09f9a806ff09f9a80f09f9a806f20c3a920c3a9c3a96f204df09f9a806f6f4d4d4d204df09f9a804dc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a806f6f4d6f20f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf39faffffffffffffffffffffffffffffffffffffffffffffffffe816e1f8de2a72caffffffffffffffffffffffffffffffffffffffffffffffff9dd00ffb3d7e7ab600000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000971fef9281643d6d0deb6a7e71b6afb274f42bb000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ba0c2677b5e0f8f38f7f63706285827487f81ef00000000000000000000000000000000000000000000000000000000000000a09200000000000000000000000000000000000000000000000000000000000000000000000027f2b810567a789a63179f96b6778740f17d674122c67c7c06a70100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a80c3a96f6f6f4d6f6f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a80f09f9a80f09f9a804df09f9a806fc3a96ff09f9a80c3a9206f6fc3a96f4d6f6f6ff09f9a806ff09f9a806fc3a9f09f9a80f09f9a806fc3a96f6ff09f9a804d6ff09f9a8020f09f9a804dc3a9206f6ff09f9a8000000000000000000000000000000000000000000000000000000000000000003847b00000000000000000000000000000000000000000000000006ac196e9e8c31b99ffffffffffffffffffffffffffffffffffffffffffffffffc8e0ad0870092aa900000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b44d01a33e16effb157ae498a272c7e54dbf4824000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f46e8fb760454ac809c8b54d6ffd5164a2eb0efe00000000000000000000000000000000000000000000000000000000000000a00a0000000000000000000000000000000000000000000000000000000000000000000000008eb3068ff010187e190e82ade9660f131c6b9c035638dd0573f69200000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a8020c3a96ff09f9a806fc3a9f09f9a80204d000000000000000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a8020c3a96f6f6f4d6f204d204d4d20c3a9206f4d4df09f9a806ff09f9a80206ff09f9a806ff09f9a80f09f9a804d206f2020f09f9a806f4d00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(((string,address,bytes30,(uint240,string[2][3],(bytes12)),uint72),bool,bool,int48),int112,bytes1,string)", + "type": "(((string,address,bytes30,(uint240,string[2][3],(bytes12)),uint72),bool,bool,int48),int112,bytes1,string)", + "value": [ + [ + [ + "Moo é🚀oo ooo éMéo🚀oo", + "0x88FDF5389adfc060bC6566bc6D325729E0d25ba2", + "0x48453874a70d956abff059536cdca94a90d21a2fc75463e8bb4f468a1001", + [ + "998207974724704301982761600087456641428608250369892593831980993255221722", + [ + ["Moo é🚀", "Moo é🚀o🚀 MMéMé🚀o🚀é Méooo oM🚀🚀éo🚀🚀MoMMéoo🚀o"], + ["Moo é🚀oMoMooo🚀", "Moo é🚀 MéMM"], + ["Moo é🚀éooé 🚀🚀oMéoé M🚀ééoM o 🚀é", "Moo é🚀🚀ooé 🚀o"] + ], + ["0x3b190ccc4b8de4eda077bf48"] + ], + "3115037690195025298773" + ], + true, + false, + "5375968087072" + ], + "-2348062724939223504806037714083334", + "0x6a", + "Moo é🚀oo🚀oooo o 🚀🚀o🚀MéoééMoé oéM🚀 é 🚀oMéoéoo🚀oMMM🚀éo🚀 oMM" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo ooo éMéo🚀oo" + }, + { + "type": "address", + "value": "0x88FDF5389adfc060bC6566bc6D325729E0d25ba2" + }, + { + "type": "hexstring", + "value": "0x48453874a70d956abff059536cdca94a90d21a2fc75463e8bb4f468a1001" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "998207974724704301982761600087456641428608250369892593831980993255221722" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀o🚀 MMéMé🚀o🚀é Méooo oM🚀🚀éo🚀🚀MoMMéoo🚀o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMoMooo🚀" + }, + { + "type": "string", + "value": "Moo é🚀 MéMM" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éooé 🚀🚀oMéoé M🚀ééoM o 🚀é" + }, + { + "type": "string", + "value": "Moo é🚀🚀ooé 🚀o" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x3b190ccc4b8de4eda077bf48" + } + ] + } + ] + }, + { + "type": "number", + "value": "3115037690195025298773" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "5375968087072" + } + ] + }, + { + "type": "number", + "value": "-2348062724939223504806037714083334" + }, + { + "type": "hexstring", + "value": "0x6a" + }, + { + "type": "string", + "value": "Moo é🚀oo🚀oooo o 🚀🚀o🚀MéoééMoé oéM🚀 é 🚀oMéoéoo🚀oMMM🚀éo🚀 oMM" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061070d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610450565b60405180910390f35b6100566102d7565b61005e6102d7565b610066610303565b61006e610331565b604080518082018252601d81527f4d6f6f20c3a9f09f9a806f6f206f6f6f20c3a94dc3a96ff09f9a806f6f0000006020808301919091529083527388fdf5389adfc060bc6566bc6d325729e0d25ba2908301527f48453874a70d956abff059536cdca94a90d21a2fc75463e8bb4f468a10010000908201526100ee610374565b7d90a19772c77761240116b1264808e82db70e920f8899a5f034083ffea9da81526101176103af565b61011f6103dc565b604080518082018252600a8152689adede418753e13f3560b71b602080830191909152908352815160808101909252604e808352600092916105f490830139602083015250815261016e6103dc565b60408051808201825260158152739adede418753e13f3500de9ade9adededfe13f35605f1b602080830191909152908352815180830190925260118252704d6f6f20c3a9f09f9a8020204dc3a94d4d60781b82820152828101919091528201526101d66103dc565b600060405180606001604052806035815260200161064260359139825250604080518082018252601881527f4d6f6f20c3a9f09f9a80f09f9a806f6fc3a920f09f9a806f0000000000000000602080830191909152808401919091528382019290925283820192909252815180820183526b076321998971bc9db40ef7e960a31b81528383015260608481019390935268a8ddd5030e2bcb8555608085015292845260018484015260008482018190526504e3b0ab0c20928501929092529284526d73c4b7db20cefa51b8ff97679e051984830152603560f91b84840152825160a08101909352606180845290929161067790830139606083015250919050565b60405180608001604052806102ea610303565b8152600060208201819052604082015260609081015290565b6040518060800160405280610316610331565b81526000602082018190526040820181905260609091015290565b6040518060a001604052806060815260200160006001600160a01b03168152602001600061ffff19168152602001610367610374565b8152600060209091015290565b604051806060016040528060006001600160f01b031681526020016103976103af565b81526040805160208181019092526000815291015290565b60405180606001604052806003905b6103c66103dc565b8152602001906001900390816103be5790505090565b60405180604001604052806002905b60608152602001906001900390816103eb5790505090565b6000815180845260005b818110156104295760208185018101518683018201520161040d565b8181111561043b576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835283516080828501528051608060a0860152805160a06101208701526104806101c0870182610403565b828501516001600160a01b031661014088015260408084015161ffff191661016089015260608085015189840361011f19016101808b015280516001600160f01b0316845280880151888501839052939450919290919060c08501908386016000805b600381101561054257888503605f19018352835185898101845b600281101561052d578882038352610516828551610403565b91508f840193508f830192506001810190506104fd565b5096505050928b0192918b01916001016104e3565b505050509083015180516001600160a01b03191685850152906080860151955061057a6101a08b018768ffffffffffffffffff169052565b87870151151560c08b01528387015180151560e08c015296830151600581900b6101008c0152969550968a0151966105b68a850189600d0b9052565b838b01516001600160f81b031916838b0152828b0151601f198b83030160808c015297506105e48189610403565b9b9a505050505050505050505056fe4d6f6f20c3a9f09f9a806ff09f9a8020204d4dc3a94dc3a9f09f9a806ff09f9a80c3a920204dc3a96f6f6f206f4df09f9a80f09f9a80c3a96ff09f9a80f09f9a804d6f4d4dc3a96f6ff09f9a806f4d6f6f20c3a9f09f9a80c3a96f6fc3a920f09f9a80f09f9a806f4dc3a96fc3a9204df09f9a80c3a9c3a96f4d206f20f09f9a80c3a94d6f6f20c3a9f09f9a806f6ff09f9a806f6f6f6f206f20f09f9a80f09f9a806ff09f9a804dc3a96fc3a9c3a94d6fc3a9206fc3a94df09f9a8020c3a920f09f9a806f4dc3a96fc3a96f6ff09f9a806f4d4d4df09f9a80c3a96ff09f9a80206f4d4da2646970667358221220287504ca6ac67b453350aeb939765fedda57dff8b8a89eec25c15d0f993577cf64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d13f080d {\n bytes12 s_0;\n }\n\n struct S_bf60a306 {\n uint240 s_0;\n string[2][3] s_1;\n S_d13f080d s_2;\n }\n\n struct S_efddd9ad {\n string s_0;\n address s_1;\n bytes30 s_2;\n S_bf60a306 s_3;\n uint72 s_4;\n }\n\n struct S_c64c6445 {\n S_efddd9ad s_0;\n bool s_1;\n bool s_2;\n int48 s_3;\n }\n\n struct S_5f5c3c63 {\n S_c64c6445 s_0;\n int112 s_1;\n bytes1 s_2;\n string s_3;\n }\n\n function test () public pure returns (S_5f5c3c63 memory) {\n S_5f5c3c63 memory r;\n {\n S_c64c6445 memory r_0;\n {\n S_efddd9ad memory r_0_0;\n {\n string memory r_0_0_0 = unicode\"Moo é🚀oo ooo éMéo🚀oo\";\n r_0_0.s_0 = r_0_0_0;\n }\n {\n address r_0_0_1 = 0x88FDF5389adfc060bC6566bc6D325729E0d25ba2;\n r_0_0.s_1 = r_0_0_1;\n }\n {\n bytes30 r_0_0_2 = bytes30(0x48453874a70d956abff059536cdca94a90d21a2fc75463e8bb4f468a1001);\n r_0_0.s_2 = r_0_0_2;\n }\n {\n S_bf60a306 memory r_0_0_3;\n {\n uint240 r_0_0_3_0 = 998207974724704301982761600087456641428608250369892593831980993255221722;\n r_0_0_3.s_0 = r_0_0_3_0;\n }\n {\n string[2][3] memory r_0_0_3_1;\n {\n string[2] memory r_0_0_3_1_0;\n {\n string memory r_0_0_3_1_0_0 = unicode\"Moo é🚀\";\n r_0_0_3_1_0[0] = r_0_0_3_1_0_0;\n }\n {\n string memory r_0_0_3_1_0_1 = unicode\"Moo é🚀o🚀 MMéMé🚀o🚀é Méooo oM🚀🚀éo🚀🚀MoMMéoo🚀o\";\n r_0_0_3_1_0[1] = r_0_0_3_1_0_1;\n }\n r_0_0_3_1[0] = r_0_0_3_1_0;\n }\n {\n string[2] memory r_0_0_3_1_1;\n {\n string memory r_0_0_3_1_1_0 = unicode\"Moo é🚀oMoMooo🚀\";\n r_0_0_3_1_1[0] = r_0_0_3_1_1_0;\n }\n {\n string memory r_0_0_3_1_1_1 = unicode\"Moo é🚀 MéMM\";\n r_0_0_3_1_1[1] = r_0_0_3_1_1_1;\n }\n r_0_0_3_1[1] = r_0_0_3_1_1;\n }\n {\n string[2] memory r_0_0_3_1_2;\n {\n string memory r_0_0_3_1_2_0 = unicode\"Moo é🚀éooé 🚀🚀oMéoé M🚀ééoM o 🚀é\";\n r_0_0_3_1_2[0] = r_0_0_3_1_2_0;\n }\n {\n string memory r_0_0_3_1_2_1 = unicode\"Moo é🚀🚀ooé 🚀o\";\n r_0_0_3_1_2[1] = r_0_0_3_1_2_1;\n }\n r_0_0_3_1[2] = r_0_0_3_1_2;\n }\n r_0_0_3.s_1 = r_0_0_3_1;\n }\n {\n S_d13f080d memory r_0_0_3_2;\n {\n bytes12 r_0_0_3_2_0 = bytes12(0x3b190ccc4b8de4eda077bf48);\n r_0_0_3_2.s_0 = r_0_0_3_2_0;\n }\n r_0_0_3.s_2 = r_0_0_3_2;\n }\n r_0_0.s_3 = r_0_0_3;\n }\n {\n uint72 r_0_0_4 = 3115037690195025298773;\n r_0_0.s_4 = r_0_0_4;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0.s_1 = r_0_1;\n }\n {\n bool r_0_2 = false;\n r_0.s_2 = r_0_2;\n }\n {\n int48 r_0_3 = 5375968087072;\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n int112 r_1 = -2348062724939223504806037714083334;\n r.s_1 = r_1;\n }\n {\n bytes1 r_2 = bytes1(0x6a);\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀oo🚀oooo o 🚀🚀o🚀MéoééMoé oéM🚀 é 🚀oMéoéoo🚀oMMM🚀éo🚀 oMM\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffffffff8c3b4824df3105ae4700689861fa6a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e3b0ab0c2000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000088fdf5389adfc060bc6566bc6d325729e0d25ba248453874a70d956abff059536cdca94a90d21a2fc75463e8bb4f468a1001000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000a8ddd5030e2bcb8555000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a806f6f206f6f6f20c3a94dc3a96ff09f9a806f6f000000000090a19772c77761240116b1264808e82db70e920f8899a5f034083ffea9da00000000000000000000000000000000000000000000000000000000000000603b190ccc4b8de4eda077bf48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a806ff09f9a8020204d4dc3a94dc3a9f09f9a806ff09f9a80c3a920204dc3a96f6f6f206f4df09f9a80f09f9a80c3a96ff09f9a80f09f9a804d6f4d4dc3a96f6ff09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a806f4d6f4d6f6f6ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a8020204dc3a94d4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000354d6f6f20c3a9f09f9a80c3a96f6fc3a920f09f9a80f09f9a806f4dc3a96fc3a9204df09f9a80c3a9c3a96f4d206f20f09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a80f09f9a806f6fc3a920f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a806f6ff09f9a806f6f6f6f206f20f09f9a80f09f9a806ff09f9a804dc3a96fc3a9c3a94d6fc3a9206fc3a94df09f9a8020c3a920f09f9a806f4dc3a96fc3a96f6ff09f9a806f4d4d4df09f9a80c3a96ff09f9a80206f4d4d00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((address[4],address[],bool[3],bytes29,address[])[2][2],string,address,uint144[])", + "type": "((address[4],address[],bool[3],bytes29,address[])[2][2],string,address,uint144[])", + "value": [ + [ + [ + [ + [ + "0x1D226Feea5B580BFd3af103bE0ca482bf7f816d5", + "0xc60B0BE0605e3eB11234d7566831e16B38973fC7", + "0x679449aa378f0F9aF44707F3989cE30Fcb465296", + "0xC5Ae051024a8dcf9465817e42Fda8481494A6124" + ], + [ + "0xcB08Df4f3164FE46Ab6E89713619EbbF56d59f9F", + "0x91e846e7d98640BB2CF11B8b3b183b4257DC4A03", + "0x4B716f40Fc3D264609680b2793CDe74ea9E4294A", + "0x766d4141D6AdeFB751A8758562f0460C41f58055" + ], + [false, true, true], + "0x4f98d7e7a91dae0f30938ec3ec0cabe08c6a9827ce4b0bdf07c9d4a7f6", + [ + "0x6dAAEb4BFcB1350f55Ab5fb218540d5E32243779", + "0xF0F3f92C0601A0ec84068A77c41BB6a86DaFa784", + "0x59169cDB688801CA8D3A536666be29821099e9De", + "0x0915F10AECD1fB0e9dF25eEE63a81aFe08d3383F" + ] + ], + [ + [ + "0x40dCc5D22A8C716Cf77447adc3F75Ac49A6046b1", + "0xf60fFeE18eF19A26F556BbF5f0247524412C9360", + "0x12be0F7525c2352FC43fc21cC4E65d221cfe272f", + "0x677B24F3dD42EE063765239D6227379329D39728" + ], + [], + [true, true, true], + "0x713bc26af92fc70562f3ba22356657e3d0d390f8d9517c331911be270d", + [ + "0x6861Ab7fA2FE7B180661e15242665f7d4c842347", + "0x0485B7F781208cE4C0Ecf01d10b89C72FF0ABA65", + "0xb3B809c752aa66c975A7b2d58aF1feF9e1e5e272" + ] + ] + ], + [ + [ + [ + "0x1084ccE6c2f283c7C8b9aE236f8F150ac140b2e6", + "0x50Bb770e203241dD8E212E179b7C574AE93D7497", + "0x34272F2305F6772887B9fA3822cb0386ac0825fF", + "0x20b8933BB4d79DF827f7107Ca577a2C782da0D03" + ], + [], + [true, true, true], + "0x4ba84d657c9197536bb62c85aafb6563182800535736c727e88fda1cc2", + [] + ], + [ + [ + "0x37782C536ba4F2555aE6d9dce9833d0C6661D5E0", + "0x57F7dE449c3b8d39c3804f5EbEeae6517d6229F0", + "0x642A9E62FCc3D7789c664476EC1a1E5aE1Bc0Daa", + "0xCBdc50E5e36C4dFa51D3D90B91fD4C819d3eE1D8" + ], + [ + "0xB754E459E6cC56e117232C7B6c8Da65716BbbC25", + "0x5549d3d4F0Ca9232c3f7e73c415b6e631e0Eb6f5" + ], + [false, true, true], + "0xbf28a31947576c73346c7a356618ea6497753097fbde46bcdcd9d67cfe", + [ + "0xd468ecf64c16FD41379019FFE6d90Df74515F8d8", + "0xAd5C935582E51a68ec2f4F968315299EF76B7382" + ] + ] + ] + ], + "Moo é🚀oo🚀oo🚀ééo oMMo🚀🚀éM🚀éé🚀o 🚀oéoé🚀oéo🚀é", + "0xe92cF93697B56093B04C57d7808352529Ab86fB2", + [ + "10839282410974085545049655487999014380610003", + "2224009049836471620008649945337810268201861", + "15344869964919693839632180566457816676834074", + "16236888109866797014123203250676465792717884" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x1D226Feea5B580BFd3af103bE0ca482bf7f816d5" + }, + { + "type": "address", + "value": "0xc60B0BE0605e3eB11234d7566831e16B38973fC7" + }, + { + "type": "address", + "value": "0x679449aa378f0F9aF44707F3989cE30Fcb465296" + }, + { + "type": "address", + "value": "0xC5Ae051024a8dcf9465817e42Fda8481494A6124" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xcB08Df4f3164FE46Ab6E89713619EbbF56d59f9F" + }, + { + "type": "address", + "value": "0x91e846e7d98640BB2CF11B8b3b183b4257DC4A03" + }, + { + "type": "address", + "value": "0x4B716f40Fc3D264609680b2793CDe74ea9E4294A" + }, + { + "type": "address", + "value": "0x766d4141D6AdeFB751A8758562f0460C41f58055" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x4f98d7e7a91dae0f30938ec3ec0cabe08c6a9827ce4b0bdf07c9d4a7f6" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x6dAAEb4BFcB1350f55Ab5fb218540d5E32243779" + }, + { + "type": "address", + "value": "0xF0F3f92C0601A0ec84068A77c41BB6a86DaFa784" + }, + { + "type": "address", + "value": "0x59169cDB688801CA8D3A536666be29821099e9De" + }, + { + "type": "address", + "value": "0x0915F10AECD1fB0e9dF25eEE63a81aFe08d3383F" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x40dCc5D22A8C716Cf77447adc3F75Ac49A6046b1" + }, + { + "type": "address", + "value": "0xf60fFeE18eF19A26F556BbF5f0247524412C9360" + }, + { + "type": "address", + "value": "0x12be0F7525c2352FC43fc21cC4E65d221cfe272f" + }, + { + "type": "address", + "value": "0x677B24F3dD42EE063765239D6227379329D39728" + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x713bc26af92fc70562f3ba22356657e3d0d390f8d9517c331911be270d" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x6861Ab7fA2FE7B180661e15242665f7d4c842347" + }, + { + "type": "address", + "value": "0x0485B7F781208cE4C0Ecf01d10b89C72FF0ABA65" + }, + { + "type": "address", + "value": "0xb3B809c752aa66c975A7b2d58aF1feF9e1e5e272" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x1084ccE6c2f283c7C8b9aE236f8F150ac140b2e6" + }, + { + "type": "address", + "value": "0x50Bb770e203241dD8E212E179b7C574AE93D7497" + }, + { + "type": "address", + "value": "0x34272F2305F6772887B9fA3822cb0386ac0825fF" + }, + { + "type": "address", + "value": "0x20b8933BB4d79DF827f7107Ca577a2C782da0D03" + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x4ba84d657c9197536bb62c85aafb6563182800535736c727e88fda1cc2" + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x37782C536ba4F2555aE6d9dce9833d0C6661D5E0" + }, + { + "type": "address", + "value": "0x57F7dE449c3b8d39c3804f5EbEeae6517d6229F0" + }, + { + "type": "address", + "value": "0x642A9E62FCc3D7789c664476EC1a1E5aE1Bc0Daa" + }, + { + "type": "address", + "value": "0xCBdc50E5e36C4dFa51D3D90B91fD4C819d3eE1D8" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xB754E459E6cC56e117232C7B6c8Da65716BbbC25" + }, + { + "type": "address", + "value": "0x5549d3d4F0Ca9232c3f7e73c415b6e631e0Eb6f5" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0xbf28a31947576c73346c7a356618ea6497753097fbde46bcdcd9d67cfe" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xd468ecf64c16FD41379019FFE6d90Df74515F8d8" + }, + { + "type": "address", + "value": "0xAd5C935582E51a68ec2f4F968315299EF76B7382" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oo🚀oo🚀ééo oMMo🚀🚀éM🚀éé🚀o 🚀oéoé🚀oéo🚀é" + }, + { + "type": "address", + "value": "0xe92cF93697B56093B04C57d7808352529Ab86fB2" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "10839282410974085545049655487999014380610003" + }, + { + "type": "number", + "value": "2224009049836471620008649945337810268201861" + }, + { + "type": "number", + "value": "15344869964919693839632180566457816676834074" + }, + { + "type": "number", + "value": "16236888109866797014123203250676465792717884" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610ea1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610c9f565b60405180910390f35b610056610aad565b61005e610aad565b610066610ad9565b61006e610b06565b610076610b33565b61007e610b6e565b731d226feea5b580bfd3af103be0ca482bf7f816d5815273c60b0be0605e3eb11234d7566831e16b38973fc7602082015273679449aa378f0f9af44707f3989ce30fcb46529660408083019190915273c5ae051024a8dcf9465817e42fda8481494a612460608301529082528051600480825260a08201909252600091816020016020820280368337019050509050600073cb08df4f3164fe46ab6e89713619ebbf56d59f9f9050808260008151811061013a5761013a610e04565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007391e846e7d98640bb2cf11b8b3b183b4257dc4a039050808260018151811061018857610188610e04565b60200260200101906001600160a01b031690816001600160a01b031681525050506000734b716f40fc3d264609680b2793cde74ea9e4294a905080826002815181106101d6576101d6610e04565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073766d4141d6adefb751a8758562f0460c41f580559050808260038151811061022457610224610e04565b6001600160a01b039092166020928302919091018201528301919091525061024a610b8c565b600080825260016020808401829052604080850192909252848201939093527f4f98d7e7a91dae0f30938ec3ec0cabe08c6a9827ce4b0bdf07c9d4a7f600000060608501528051600480825260a08201909252919282016080803683370190505090506000736daaeb4bfcb1350f55ab5fb218540d5e32243779905080826000815181106102da576102da610e04565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073f0f3f92c0601a0ec84068a77c41bb6a86dafa7849050808260018151811061032857610328610e04565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007359169cdb688801ca8d3a536666be29821099e9de9050808260028151811061037657610376610e04565b60200260200101906001600160a01b031690816001600160a01b031681525050506000730915f10aecd1fb0e9df25eee63a81afe08d3383f905080826003815181106103c4576103c4610e04565b6001600160a01b03929092166020928302919091019091015250608082015281526103ed610b33565b6103f5610b6e565b7340dcc5d22a8c716cf77447adc3f75ac49a6046b1815273f60ffee18ef19a26f556bbf5f0247524412c93606020808301919091527312be0f7525c2352fc43fc21cc4e65d221cfe272f60408084019190915273677b24f3dd42ee063765239d6227379329d39728606084015291835281516000815280820190925282015261047c610b8c565b600180825260208201819052604080830191909152828101919091527f713bc26af92fc70562f3ba22356657e3d0d390f8d9517c331911be270d000000606083015280516003808252608082019092526000918160200160208202803683370190505090506000736861ab7fa2fe7b180661e15242665f7d4c8423479050808260008151811061050e5761050e610e04565b60200260200101906001600160a01b031690816001600160a01b031681525050506000730485b7f781208ce4c0ecf01d10b89c72ff0aba659050808260018151811061055c5761055c610e04565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073b3b809c752aa66c975a7b2d58af1fef9e1e5e272905080826002815181106105aa576105aa610e04565b6001600160a01b039290921660209283029190910182015260808401929092525082015281526105d8610b06565b6105e0610b33565b6105e8610b6e565b731084cce6c2f283c7c8b9ae236f8f150ac140b2e681527350bb770e203241dd8e212e179b7c574ae93d74976020808301919091527334272f2305f6772887b9fa3822cb0386ac0825ff6040808401919091527320b8933bb4d79df827f7107ca577a2c782da0d03606084015291835281516000815280820190925282015261066f610b8c565b60018082526020808301829052604080840192909252838201929092527f4ba84d657c9197536bb62c85aafb6563182800535736c727e88fda1cc200000060608401528051600081529182019052608082015281526106cc610b33565b6106d4610b6e565b7337782c536ba4f2555ae6d9dce9833d0c6661d5e081527357f7de449c3b8d39c3804f5ebeeae6517d6229f0602082015273642a9e62fcc3d7789c664476ec1a1e5ae1bc0daa60408083019190915273cbdc50e5e36c4dfa51d3d90b91fd4c819d3ee1d860608084019190915291835280516002808252928101909152600091816020016020820280368337019050509050600073b754e459e6cc56e117232c7b6c8da65716bbbc259050808260008151811061079357610793610e04565b60200260200101906001600160a01b031690816001600160a01b031681525050506000735549d3d4f0ca9232c3f7e73c415b6e631e0eb6f5905080826001815181106107e1576107e1610e04565b6001600160a01b0390921660209283029190910182015283019190915250610807610b8c565b600080825260016020808401829052604080850192909252848201939093527fbf28a31947576c73346c7a356618ea6497753097fbde46bcdcd9d67cfe000000606080860191909152815160028082529181018352929390919083019080368337019050509050600073d468ecf64c16fd41379019ffe6d90df74515f8d89050808260008151811061089b5761089b610e04565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073ad5c935582e51a68ec2f4f968315299ef76b7382905080826001815181106108e9576108e9610e04565b6001600160a01b03929092166020928302919091018201526080848101939093528481019390935250838201929092529183526040805191820190526051808252600092610e1b9083013960208301525073e92cf93697b56093b04c57d7808352529ab86fb26040808301919091528051600480825260a082019092526000918160200160208202803683370190505090506000717c6dc9c118b355ba4f619b4be78dcd61a1d3905080826000815181106109a6576109a6610e04565b60200260200101906001600160901b031690816001600160901b031681525050506000711987c672911b8ab0488e4c72cc60eb4c2385905080826001815181106109f2576109f2610e04565b60200260200101906001600160901b031690816001600160901b03168152505050600071b0268517d1143edf05f2656f1fbfcb941b1a90508082600281518110610a3e57610a3e610e04565b60200260200101906001600160901b031690816001600160901b03168152505050600071ba63ecf5721ce0c72b478d3ab93e2a4c143c90508082600381518110610a8a57610a8a610e04565b6001600160901b0390921660209283029190910190910152506060820152919050565b6040518060800160405280610ac0610ad9565b8152606060208201819052600060408301529081015290565b60405180604001604052806002905b610af0610b06565b815260200190600190039081610ae85790505090565b60405180604001604052806002905b610b1d610b33565b815260200190600190039081610b155790505090565b6040518060a00160405280610b46610b6e565b815260200160608152602001610b5a610b8c565b815260006020820152606060409091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b600081518084526020808501945080840160005b83811015610be35781516001600160a01b031687529582019590820190600101610bbe565b509495945050505050565b8060005b6003811015610c135781511515845260209384019390910190600101610bf2565b50505050565b6000815180845260005b81811015610c3f57602081850181015186830182015201610c23565b81811115610c51576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610be35781516001600160901b031687529582019590820190600101610c7a565b602080825282516080838301526000919060e084019060a08501845b6002808210610cca5750610da1565b878503609f19018352835185604080820160005b85811015610d8a57898203845284518051610140908460005b6004811015610d1d5782516001600160a01b03168252918f0191908f0190600101610cf7565b5050508c820151816080860152610d3682860182610baa565b91505084820151610d4a60a0860182610bee565b50606082015162ffffff191661010085015260809091015183820361012085015290610d768183610baa565b968d0196958d019593505050600101610cde565b509750505093860193505090840190600101610cbb565b505050818501519150601f1980858303016040860152610dc18284610c19565b925060408601519150610ddf60608601836001600160a01b03169052565b606086015191508085840301608086015250610dfb8282610c66565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f6ff09f9a806f6ff09f9a80c3a9c3a96f206f4d4d6ff09f9a80f09f9a80c3a94df09f9a80c3a9c3a9f09f9a806f20f09f9a806fc3a96fc3a9f09f9a806fc3a96ff09f9a80c3a9a26469706673582212201ec33e9ebd13c44c8719eabe90639135da1a4cb7f013a1f4a3de2308b57463bb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_82c52c71 {\n address[4] s_0;\n address[] s_1;\n bool[3] s_2;\n bytes29 s_3;\n address[] s_4;\n }\n\n struct S_694bf363 {\n S_82c52c71[2][2] s_0;\n string s_1;\n address s_2;\n uint144[] s_3;\n }\n\n function test () public pure returns (S_694bf363 memory) {\n S_694bf363 memory r;\n {\n S_82c52c71[2][2] memory r_0;\n {\n S_82c52c71[2] memory r_0_0;\n {\n S_82c52c71 memory r_0_0_0;\n {\n address[4] memory r_0_0_0_0;\n {\n address r_0_0_0_0_0 = 0x1D226Feea5B580BFd3af103bE0ca482bf7f816d5;\n r_0_0_0_0[0] = r_0_0_0_0_0;\n }\n {\n address r_0_0_0_0_1 = 0xc60B0BE0605e3eB11234d7566831e16B38973fC7;\n r_0_0_0_0[1] = r_0_0_0_0_1;\n }\n {\n address r_0_0_0_0_2 = 0x679449aa378f0F9aF44707F3989cE30Fcb465296;\n r_0_0_0_0[2] = r_0_0_0_0_2;\n }\n {\n address r_0_0_0_0_3 = 0xC5Ae051024a8dcf9465817e42Fda8481494A6124;\n r_0_0_0_0[3] = r_0_0_0_0_3;\n }\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n address[] memory r_0_0_0_1 = new address[](4);\n {\n address r_0_0_0_1_0 = 0xcB08Df4f3164FE46Ab6E89713619EbbF56d59f9F;\n r_0_0_0_1[0] = r_0_0_0_1_0;\n }\n {\n address r_0_0_0_1_1 = 0x91e846e7d98640BB2CF11B8b3b183b4257DC4A03;\n r_0_0_0_1[1] = r_0_0_0_1_1;\n }\n {\n address r_0_0_0_1_2 = 0x4B716f40Fc3D264609680b2793CDe74ea9E4294A;\n r_0_0_0_1[2] = r_0_0_0_1_2;\n }\n {\n address r_0_0_0_1_3 = 0x766d4141D6AdeFB751A8758562f0460C41f58055;\n r_0_0_0_1[3] = r_0_0_0_1_3;\n }\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n bool[3] memory r_0_0_0_2;\n {\n bool r_0_0_0_2_0 = false;\n r_0_0_0_2[0] = r_0_0_0_2_0;\n }\n {\n bool r_0_0_0_2_1 = true;\n r_0_0_0_2[1] = r_0_0_0_2_1;\n }\n {\n bool r_0_0_0_2_2 = true;\n r_0_0_0_2[2] = r_0_0_0_2_2;\n }\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n {\n bytes29 r_0_0_0_3 = bytes29(0x4f98d7e7a91dae0f30938ec3ec0cabe08c6a9827ce4b0bdf07c9d4a7f6);\n r_0_0_0.s_3 = r_0_0_0_3;\n }\n {\n address[] memory r_0_0_0_4 = new address[](4);\n {\n address r_0_0_0_4_0 = 0x6dAAEb4BFcB1350f55Ab5fb218540d5E32243779;\n r_0_0_0_4[0] = r_0_0_0_4_0;\n }\n {\n address r_0_0_0_4_1 = 0xF0F3f92C0601A0ec84068A77c41BB6a86DaFa784;\n r_0_0_0_4[1] = r_0_0_0_4_1;\n }\n {\n address r_0_0_0_4_2 = 0x59169cDB688801CA8D3A536666be29821099e9De;\n r_0_0_0_4[2] = r_0_0_0_4_2;\n }\n {\n address r_0_0_0_4_3 = 0x0915F10AECD1fB0e9dF25eEE63a81aFe08d3383F;\n r_0_0_0_4[3] = r_0_0_0_4_3;\n }\n r_0_0_0.s_4 = r_0_0_0_4;\n }\n r_0_0[0] = r_0_0_0;\n }\n {\n S_82c52c71 memory r_0_0_1;\n {\n address[4] memory r_0_0_1_0;\n {\n address r_0_0_1_0_0 = 0x40dCc5D22A8C716Cf77447adc3F75Ac49A6046b1;\n r_0_0_1_0[0] = r_0_0_1_0_0;\n }\n {\n address r_0_0_1_0_1 = 0xf60fFeE18eF19A26F556BbF5f0247524412C9360;\n r_0_0_1_0[1] = r_0_0_1_0_1;\n }\n {\n address r_0_0_1_0_2 = 0x12be0F7525c2352FC43fc21cC4E65d221cfe272f;\n r_0_0_1_0[2] = r_0_0_1_0_2;\n }\n {\n address r_0_0_1_0_3 = 0x677B24F3dD42EE063765239D6227379329D39728;\n r_0_0_1_0[3] = r_0_0_1_0_3;\n }\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n {\n address[] memory r_0_0_1_1 = new address[](0);\n r_0_0_1.s_1 = r_0_0_1_1;\n }\n {\n bool[3] memory r_0_0_1_2;\n {\n bool r_0_0_1_2_0 = true;\n r_0_0_1_2[0] = r_0_0_1_2_0;\n }\n {\n bool r_0_0_1_2_1 = true;\n r_0_0_1_2[1] = r_0_0_1_2_1;\n }\n {\n bool r_0_0_1_2_2 = true;\n r_0_0_1_2[2] = r_0_0_1_2_2;\n }\n r_0_0_1.s_2 = r_0_0_1_2;\n }\n {\n bytes29 r_0_0_1_3 = bytes29(0x713bc26af92fc70562f3ba22356657e3d0d390f8d9517c331911be270d);\n r_0_0_1.s_3 = r_0_0_1_3;\n }\n {\n address[] memory r_0_0_1_4 = new address[](3);\n {\n address r_0_0_1_4_0 = 0x6861Ab7fA2FE7B180661e15242665f7d4c842347;\n r_0_0_1_4[0] = r_0_0_1_4_0;\n }\n {\n address r_0_0_1_4_1 = 0x0485B7F781208cE4C0Ecf01d10b89C72FF0ABA65;\n r_0_0_1_4[1] = r_0_0_1_4_1;\n }\n {\n address r_0_0_1_4_2 = 0xb3B809c752aa66c975A7b2d58aF1feF9e1e5e272;\n r_0_0_1_4[2] = r_0_0_1_4_2;\n }\n r_0_0_1.s_4 = r_0_0_1_4;\n }\n r_0_0[1] = r_0_0_1;\n }\n r_0[0] = r_0_0;\n }\n {\n S_82c52c71[2] memory r_0_1;\n {\n S_82c52c71 memory r_0_1_0;\n {\n address[4] memory r_0_1_0_0;\n {\n address r_0_1_0_0_0 = 0x1084ccE6c2f283c7C8b9aE236f8F150ac140b2e6;\n r_0_1_0_0[0] = r_0_1_0_0_0;\n }\n {\n address r_0_1_0_0_1 = 0x50Bb770e203241dD8E212E179b7C574AE93D7497;\n r_0_1_0_0[1] = r_0_1_0_0_1;\n }\n {\n address r_0_1_0_0_2 = 0x34272F2305F6772887B9fA3822cb0386ac0825fF;\n r_0_1_0_0[2] = r_0_1_0_0_2;\n }\n {\n address r_0_1_0_0_3 = 0x20b8933BB4d79DF827f7107Ca577a2C782da0D03;\n r_0_1_0_0[3] = r_0_1_0_0_3;\n }\n r_0_1_0.s_0 = r_0_1_0_0;\n }\n {\n address[] memory r_0_1_0_1 = new address[](0);\n r_0_1_0.s_1 = r_0_1_0_1;\n }\n {\n bool[3] memory r_0_1_0_2;\n {\n bool r_0_1_0_2_0 = true;\n r_0_1_0_2[0] = r_0_1_0_2_0;\n }\n {\n bool r_0_1_0_2_1 = true;\n r_0_1_0_2[1] = r_0_1_0_2_1;\n }\n {\n bool r_0_1_0_2_2 = true;\n r_0_1_0_2[2] = r_0_1_0_2_2;\n }\n r_0_1_0.s_2 = r_0_1_0_2;\n }\n {\n bytes29 r_0_1_0_3 = bytes29(0x4ba84d657c9197536bb62c85aafb6563182800535736c727e88fda1cc2);\n r_0_1_0.s_3 = r_0_1_0_3;\n }\n {\n address[] memory r_0_1_0_4 = new address[](0);\n r_0_1_0.s_4 = r_0_1_0_4;\n }\n r_0_1[0] = r_0_1_0;\n }\n {\n S_82c52c71 memory r_0_1_1;\n {\n address[4] memory r_0_1_1_0;\n {\n address r_0_1_1_0_0 = 0x37782C536ba4F2555aE6d9dce9833d0C6661D5E0;\n r_0_1_1_0[0] = r_0_1_1_0_0;\n }\n {\n address r_0_1_1_0_1 = 0x57F7dE449c3b8d39c3804f5EbEeae6517d6229F0;\n r_0_1_1_0[1] = r_0_1_1_0_1;\n }\n {\n address r_0_1_1_0_2 = 0x642A9E62FCc3D7789c664476EC1a1E5aE1Bc0Daa;\n r_0_1_1_0[2] = r_0_1_1_0_2;\n }\n {\n address r_0_1_1_0_3 = 0xCBdc50E5e36C4dFa51D3D90B91fD4C819d3eE1D8;\n r_0_1_1_0[3] = r_0_1_1_0_3;\n }\n r_0_1_1.s_0 = r_0_1_1_0;\n }\n {\n address[] memory r_0_1_1_1 = new address[](2);\n {\n address r_0_1_1_1_0 = 0xB754E459E6cC56e117232C7B6c8Da65716BbbC25;\n r_0_1_1_1[0] = r_0_1_1_1_0;\n }\n {\n address r_0_1_1_1_1 = 0x5549d3d4F0Ca9232c3f7e73c415b6e631e0Eb6f5;\n r_0_1_1_1[1] = r_0_1_1_1_1;\n }\n r_0_1_1.s_1 = r_0_1_1_1;\n }\n {\n bool[3] memory r_0_1_1_2;\n {\n bool r_0_1_1_2_0 = false;\n r_0_1_1_2[0] = r_0_1_1_2_0;\n }\n {\n bool r_0_1_1_2_1 = true;\n r_0_1_1_2[1] = r_0_1_1_2_1;\n }\n {\n bool r_0_1_1_2_2 = true;\n r_0_1_1_2[2] = r_0_1_1_2_2;\n }\n r_0_1_1.s_2 = r_0_1_1_2;\n }\n {\n bytes29 r_0_1_1_3 = bytes29(0xbf28a31947576c73346c7a356618ea6497753097fbde46bcdcd9d67cfe);\n r_0_1_1.s_3 = r_0_1_1_3;\n }\n {\n address[] memory r_0_1_1_4 = new address[](2);\n {\n address r_0_1_1_4_0 = 0xd468ecf64c16FD41379019FFE6d90Df74515F8d8;\n r_0_1_1_4[0] = r_0_1_1_4_0;\n }\n {\n address r_0_1_1_4_1 = 0xAd5C935582E51a68ec2f4F968315299EF76B7382;\n r_0_1_1_4[1] = r_0_1_1_4_1;\n }\n r_0_1_1.s_4 = r_0_1_1_4;\n }\n r_0_1[1] = r_0_1_1;\n }\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀oo🚀oo🚀ééo oMMo🚀🚀éM🚀éé🚀o 🚀oéoé🚀oéo🚀é\";\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xe92cF93697B56093B04C57d7808352529Ab86fB2;\n r.s_2 = r_2;\n }\n {\n uint144[] memory r_3 = new uint144[](4);\n {\n uint144 r_3_0 = 10839282410974085545049655487999014380610003;\n r_3[0] = r_3_0;\n }\n {\n uint144 r_3_1 = 2224009049836471620008649945337810268201861;\n r_3[1] = r_3_1;\n }\n {\n uint144 r_3_2 = 15344869964919693839632180566457816676834074;\n r_3[2] = r_3_2;\n }\n {\n uint144 r_3_3 = 16236888109866797014123203250676465792717884;\n r_3[3] = r_3_3;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000920000000000000000000000000e92cf93697b56093b04c57d7808352529ab86fb200000000000000000000000000000000000000000000000000000000000009a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000001d226feea5b580bfd3af103be0ca482bf7f816d5000000000000000000000000c60b0be0605e3eb11234d7566831e16b38973fc7000000000000000000000000679449aa378f0f9af44707f3989ce30fcb465296000000000000000000000000c5ae051024a8dcf9465817e42fda8481494a612400000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014f98d7e7a91dae0f30938ec3ec0cabe08c6a9827ce4b0bdf07c9d4a7f600000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000cb08df4f3164fe46ab6e89713619ebbf56d59f9f00000000000000000000000091e846e7d98640bb2cf11b8b3b183b4257dc4a030000000000000000000000004b716f40fc3d264609680b2793cde74ea9e4294a000000000000000000000000766d4141d6adefb751a8758562f0460c41f5805500000000000000000000000000000000000000000000000000000000000000040000000000000000000000006daaeb4bfcb1350f55ab5fb218540d5e32243779000000000000000000000000f0f3f92c0601a0ec84068a77c41bb6a86dafa78400000000000000000000000059169cdb688801ca8d3a536666be29821099e9de0000000000000000000000000915f10aecd1fb0e9df25eee63a81afe08d3383f00000000000000000000000040dcc5d22a8c716cf77447adc3f75ac49a6046b1000000000000000000000000f60ffee18ef19a26f556bbf5f0247524412c936000000000000000000000000012be0f7525c2352fc43fc21cc4e65d221cfe272f000000000000000000000000677b24f3dd42ee063765239d6227379329d397280000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001713bc26af92fc70562f3ba22356657e3d0d390f8d9517c331911be270d0000000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000006861ab7fa2fe7b180661e15242665f7d4c8423470000000000000000000000000485b7f781208ce4c0ecf01d10b89c72ff0aba65000000000000000000000000b3b809c752aa66c975a7b2d58af1fef9e1e5e272000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000001084cce6c2f283c7c8b9ae236f8f150ac140b2e600000000000000000000000050bb770e203241dd8e212e179b7c574ae93d749700000000000000000000000034272f2305f6772887b9fa3822cb0386ac0825ff00000000000000000000000020b8933bb4d79df827f7107ca577a2c782da0d0300000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014ba84d657c9197536bb62c85aafb6563182800535736c727e88fda1cc200000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037782c536ba4f2555ae6d9dce9833d0c6661d5e000000000000000000000000057f7de449c3b8d39c3804f5ebeeae6517d6229f0000000000000000000000000642a9e62fcc3d7789c664476ec1a1e5ae1bc0daa000000000000000000000000cbdc50e5e36c4dfa51d3d90b91fd4c819d3ee1d80000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001bf28a31947576c73346c7a356618ea6497753097fbde46bcdcd9d67cfe00000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b754e459e6cc56e117232c7b6c8da65716bbbc250000000000000000000000005549d3d4f0ca9232c3f7e73c415b6e631e0eb6f50000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d468ecf64c16fd41379019ffe6d90df74515f8d8000000000000000000000000ad5c935582e51a68ec2f4f968315299ef76b738200000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a806f6ff09f9a806f6ff09f9a80c3a9c3a96f206f4d4d6ff09f9a80f09f9a80c3a94df09f9a80c3a9c3a9f09f9a806f20f09f9a806fc3a96fc3a9f09f9a806fc3a96ff09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000007c6dc9c118b355ba4f619b4be78dcd61a1d300000000000000000000000000001987c672911b8ab0488e4c72cc60eb4c23850000000000000000000000000000b0268517d1143edf05f2656f1fbfcb941b1a0000000000000000000000000000ba63ecf5721ce0c72b478d3ab93e2a4c143c" + }, + { + "name": "random-((uint,address[2],(bytes25,bytes21,string[1],bool,bool)),address,(uint80,address[2],string[3]))", + "type": "((uint,address[2],(bytes25,bytes21,string[1],bool,bool)),address,(uint80,address[2],string[3]))", + "value": [ + [ + "65961121603576596653245102800611347372046054249542752328040567684316251270092", + [ + "0x596AD12c7dFC4730894Ee63B29fDdA09FAED0125", + "0x98ea1d52658307E88A8347a129F62f6F7cF29C44" + ], + [ + "0x1086ea08b24d769bcb900ae1e754464346a21706f950ceab60", + "0x5201f1f1b8774ef24f9ea8e3a664331e82e49aa15c", + ["Moo é🚀o éMo 🚀oMMoooMéMMéooéMMMéoé o M éooo éoéooé o🚀éo é"], + true, + false + ] + ], + "0x46063A895339a250526509C56f4aeD66d5626A5e", + [ + "49986080904397228086997", + [ + "0x8f695F971A6E065DECAce8320dcb581B6b9014f3", + "0x208BC04aE4dB90E1A06345950F821a8f02dc765A" + ], + [ + "Moo é🚀 ooM oo🚀 ooé🚀éM🚀ooMoooéM🚀", + "Moo é🚀oé🚀Méooo M🚀 é🚀éMo🚀o MoééM🚀🚀oMo🚀Mo🚀MM 🚀oé oé o", + "Moo é🚀oooo🚀MM 🚀🚀Mo🚀oo o🚀🚀MéM🚀🚀o🚀 🚀o M🚀 🚀Mo ooM" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "65961121603576596653245102800611347372046054249542752328040567684316251270092" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x596AD12c7dFC4730894Ee63B29fDdA09FAED0125" + }, + { + "type": "address", + "value": "0x98ea1d52658307E88A8347a129F62f6F7cF29C44" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x1086ea08b24d769bcb900ae1e754464346a21706f950ceab60" + }, + { + "type": "hexstring", + "value": "0x5201f1f1b8774ef24f9ea8e3a664331e82e49aa15c" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o éMo 🚀oMMoooMéMMéooéMMMéoé o M éooo éoéooé o🚀éo é" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "address", + "value": "0x46063A895339a250526509C56f4aeD66d5626A5e" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "49986080904397228086997" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x8f695F971A6E065DECAce8320dcb581B6b9014f3" + }, + { + "type": "address", + "value": "0x208BC04aE4dB90E1A06345950F821a8f02dc765A" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 ooM oo🚀 ooé🚀éM🚀ooMoooéM🚀" + }, + { + "type": "string", + "value": "Moo é🚀oé🚀Méooo M🚀 é🚀éMo🚀o MoééM🚀🚀oMo🚀Mo🚀MM 🚀oé oé o" + }, + { + "type": "string", + "value": "Moo é🚀oooo🚀MM 🚀🚀Mo🚀oo o🚀🚀MéM🚀🚀o🚀 🚀o M🚀 🚀Mo ooM" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506106e4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061043f565b60405180910390f35b610056610248565b61005e610248565b610066610274565b7f91d4abfb950fd12ae58e64fbf71e850e71b44e74947f7ddd8a764e488357abcc815261009161029b565b73596ad12c7dfc4730894ee63b29fdda09faed012581527398ea1d52658307e88a8347a129f62f6f7cf29c446020808301919091528201526100d16102b9565b7f1086ea08b24d769bcb900ae1e754464346a21706f950ceab600000000000000081527414807c7c6e1dd3bc93e7aa38e9990cc7a0b926a857605a1b602082015261011a6102ec565b60006040518060800160405280604f815260200161057d604f9139825250604082810191909152600160608301526000608083015282015281527346063a895339a250526509c56f4aed66d5626a5e6020820152610176610313565b690a95c03960f1355416d5815261018b61029b565b738f695f971a6e065decace8320dcb581b6b9014f3815273208bc04ae4db90e1a06345950f821a8f02dc765a6020808301919091528201526101cb610342565b6000604051806060016040528060328152602001610623603291398252506040805160808101909152605a80825260009190610655602083013990508082600160200201819052505060006040518060800160405280605781526020016105cc605791396040808401919091528381019290925250820152919050565b604051806060016040528061025b610274565b81526000602082015260400161026f610313565b905290565b60405180606001604052806000815260200161028e61029b565b815260200161026f6102b9565b60405180604001604052806002906020820280368337509192915050565b6040805160a081018252600080825260208201529081016102d86102ec565b815260006020820181905260409091015290565b60405180602001604052806001905b60608152602001906001900390816102fb5790505090565b6040518060600160405280600069ffffffffffffffffffff16815260200161033961029b565b815260200161026f5b6040805160608082019092529081526002602082016102fb565b8060005b60028110156103885781516001600160a01b0316845260209384019390910190600101610360565b50505050565b60006080830169ffffffffffffffffffff83511684526020808401516103b68287018261035c565b5060408401516080606087015260e08601926000805b600381101561043257888603607f1901835283518051808852835b818110156104025782810188015189820189015287016103e7565b81811115610412578488838b0101525b50601f01601f1916969096018501955092840192918401916001016103cc565b5093979650505050505050565b600060208083528351606082850152805160808501528181015161046660a086018261035c565b50604090810151608060e0860152805166ffffffffffffff1916610100860152828101516affffffffffffffffffffff19166101208601529081015160a06101408601526101c08501906101a086016000805b60018110156105205788850361019f1901835283518051808752835b818110156104f0578281018a01518882018b015289016104d5565b8181111561050057848a838a0101525b50601f01601f1916959095018701945092860192918601916001016104b9565b505050506060820151151561016086015260809091015180151561018086015290918501516001600160a01b0381166040860152916040860151858203601f190160608701529250610572818461038e565b969550505050505056fe4d6f6f20c3a9f09f9a806f20c3a94d6f20f09f9a806f4d4d6f6f6f4dc3a94d4dc3a96f6fc3a94d4d4dc3a96fc3a9206f204d2020c3a96f6f6f20c3a96fc3a96f6fc3a9206ff09f9a80c3a96f20c3a94d6f6f20c3a9f09f9a806f6f6f6ff09f9a804d4d20f09f9a80f09f9a804d6ff09f9a806f6f206ff09f9a80f09f9a804dc3a94df09f9a80f09f9a806ff09f9a8020f09f9a806f204df09f9a8020f09f9a804d6f206f6f4d4d6f6f20c3a9f09f9a80206f6f4d206f6ff09f9a80206f6fc3a9f09f9a80c3a94df09f9a806f6f4d6f6f6fc3a94df09f9a804d6f6f20c3a9f09f9a806fc3a9f09f9a804dc3a96f6f6f204df09f9a8020c3a9f09f9a80c3a94d6ff09f9a806f204d6fc3a9c3a94df09f9a80f09f9a806f4d6ff09f9a804d6ff09f9a804d4d20f09f9a806fc3a9206fc3a9206fa264697066735822122086b8c5c04274a11b0252f3bbe8e124cb47a1b444c5439053dbd0c83a2ebc409864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_17374cd1 {\n bytes25 s_0;\n bytes21 s_1;\n string[1] s_2;\n bool s_3;\n bool s_4;\n }\n\n struct S_889c259e {\n uint256 s_0;\n address[2] s_1;\n S_17374cd1 s_2;\n }\n\n struct S_86f0887e {\n uint80 s_0;\n address[2] s_1;\n string[3] s_2;\n }\n\n struct S_a87950c6 {\n S_889c259e s_0;\n address s_1;\n S_86f0887e s_2;\n }\n\n function test () public pure returns (S_a87950c6 memory) {\n S_a87950c6 memory r;\n {\n S_889c259e memory r_0;\n {\n uint r_0_0 = 65961121603576596653245102800611347372046054249542752328040567684316251270092;\n r_0.s_0 = r_0_0;\n }\n {\n address[2] memory r_0_1;\n {\n address r_0_1_0 = 0x596AD12c7dFC4730894Ee63B29fDdA09FAED0125;\n r_0_1[0] = r_0_1_0;\n }\n {\n address r_0_1_1 = 0x98ea1d52658307E88A8347a129F62f6F7cF29C44;\n r_0_1[1] = r_0_1_1;\n }\n r_0.s_1 = r_0_1;\n }\n {\n S_17374cd1 memory r_0_2;\n {\n bytes25 r_0_2_0 = bytes25(0x1086ea08b24d769bcb900ae1e754464346a21706f950ceab60);\n r_0_2.s_0 = r_0_2_0;\n }\n {\n bytes21 r_0_2_1 = bytes21(0x5201f1f1b8774ef24f9ea8e3a664331e82e49aa15c);\n r_0_2.s_1 = r_0_2_1;\n }\n {\n string[1] memory r_0_2_2;\n {\n string memory r_0_2_2_0 = unicode\"Moo é🚀o éMo 🚀oMMoooMéMMéooéMMMéoé o M éooo éoéooé o🚀éo é\";\n r_0_2_2[0] = r_0_2_2_0;\n }\n r_0_2.s_2 = r_0_2_2;\n }\n {\n bool r_0_2_3 = true;\n r_0_2.s_3 = r_0_2_3;\n }\n {\n bool r_0_2_4 = false;\n r_0_2.s_4 = r_0_2_4;\n }\n r_0.s_2 = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x46063A895339a250526509C56f4aeD66d5626A5e;\n r.s_1 = r_1;\n }\n {\n S_86f0887e memory r_2;\n {\n uint80 r_2_0 = 49986080904397228086997;\n r_2.s_0 = r_2_0;\n }\n {\n address[2] memory r_2_1;\n {\n address r_2_1_0 = 0x8f695F971A6E065DECAce8320dcb581B6b9014f3;\n r_2_1[0] = r_2_1_0;\n }\n {\n address r_2_1_1 = 0x208BC04aE4dB90E1A06345950F821a8f02dc765A;\n r_2_1[1] = r_2_1_1;\n }\n r_2.s_1 = r_2_1;\n }\n {\n string[3] memory r_2_2;\n {\n string memory r_2_2_0 = unicode\"Moo é🚀 ooM oo🚀 ooé🚀éM🚀ooMoooéM🚀\";\n r_2_2[0] = r_2_2_0;\n }\n {\n string memory r_2_2_1 = unicode\"Moo é🚀oé🚀Méooo M🚀 é🚀éMo🚀o MoééM🚀🚀oMo🚀Mo🚀MM 🚀oé oé o\";\n r_2_2[1] = r_2_2_1;\n }\n {\n string memory r_2_2_2 = unicode\"Moo é🚀oooo🚀MM 🚀🚀Mo🚀oo o🚀🚀MéM🚀🚀o🚀 🚀o M🚀 🚀Mo ooM\";\n r_2_2[2] = r_2_2_2;\n }\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000046063a895339a250526509c56f4aed66d5626a5e000000000000000000000000000000000000000000000000000000000000022091d4abfb950fd12ae58e64fbf71e850e71b44e74947f7ddd8a764e488357abcc000000000000000000000000596ad12c7dfc4730894ee63b29fdda09faed012500000000000000000000000098ea1d52658307e88a8347a129f62f6f7cf29c4400000000000000000000000000000000000000000000000000000000000000801086ea08b24d769bcb900ae1e754464346a21706f950ceab60000000000000005201f1f1b8774ef24f9ea8e3a664331e82e49aa15c000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a806f20c3a94d6f20f09f9a806f4d4d6f6f6f4dc3a94d4dc3a96f6fc3a94d4d4dc3a96fc3a9206f204d2020c3a96f6f6f20c3a96fc3a96f6fc3a9206ff09f9a80c3a96f20c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000a95c03960f1355416d50000000000000000000000008f695f971a6e065decace8320dcb581b6b9014f3000000000000000000000000208bc04ae4db90e1a06345950f821a8f02dc765a0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a80206f6f4d206f6ff09f9a80206f6fc3a9f09f9a80c3a94df09f9a806f6f4d6f6f6fc3a94df09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a806fc3a9f09f9a804dc3a96f6f6f204df09f9a8020c3a9f09f9a80c3a94d6ff09f9a806f204d6fc3a9c3a94df09f9a80f09f9a806f4d6ff09f9a804d6ff09f9a804d4d20f09f9a806fc3a9206fc3a9206f00000000000000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a806f6f6f6ff09f9a804d4d20f09f9a80f09f9a804d6ff09f9a806f6f206ff09f9a80f09f9a804dc3a94df09f9a80f09f9a806ff09f9a8020f09f9a806f204df09f9a8020f09f9a804d6f206f6f4d000000000000000000" + }, + { + "name": "random-(bytes11,bytes7,(string,(bytes28,((bool),int48,int64,bool,int152)),(address,(bool,bool,int224),address)),address)", + "type": "(bytes11,bytes7,(string,(bytes28,((bool),int48,int64,bool,int152)),(address,(bool,bool,int224),address)),address)", + "value": [ + "0xd0377dc57f5b06801694ee", + "0x1f7a5dc64ea658", + [ + "Moo é🚀 é ", + [ + "0x661373ac5282a7568ceb8dc50c54d8333dff10823de220500618b27c", + [ + [false], + "-78667960584245", + "7105604242905646209", + false, + "2326322274880926260778912606012360289042334396" + ] + ], + [ + "0xd0353D838c63656A923DF745F6e46FbD5C9E5a48", + [ + false, + false, + "5774185279353353389230134981167564492501107814526176442732572045760" + ], + "0xA5C28BFdDA86f22abDC643Be7Dde0C264C0220B6" + ] + ], + "0x4CaEa4ad10908842fE0dE9884E9Aa9E05d5CD921" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd0377dc57f5b06801694ee" + }, + { + "type": "hexstring", + "value": "0x1f7a5dc64ea658" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é " + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x661373ac5282a7568ceb8dc50c54d8333dff10823de220500618b27c" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "number", + "value": "-78667960584245" + }, + { + "type": "number", + "value": "7105604242905646209" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "2326322274880926260778912606012360289042334396" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xd0353D838c63656A923DF745F6e46FbD5C9E5a48" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "5774185279353353389230134981167564492501107814526176442732572045760" + } + ] + }, + { + "type": "address", + "value": "0xA5C28BFdDA86f22abDC643Be7Dde0C264C0220B6" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x4CaEa4ad10908842fE0dE9884E9Aa9E05d5CD921" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061043e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906102c4565b60405180910390f35b6100566101f3565b61005e6101f3565b6a681bbee2bfad83400b4a7760a91b81526603ef4bb8c9d4cb60cb1b602082015261008761021f565b60408051808201909152600e81526d026b7b79061d4f84fcd401061d4960951b602082015281526100b661024b565b7f661373ac5282a7568ceb8dc50c54d8333dff10823de220500618b27c0000000081526040805160c081018252600060a08201818152825260208083018281528385018381526060850184815260808601858152875180860190985285885296865265478c4fd888341990925267629c2d696ce64481905291909152726850debb14d22f1794efefe096aba7d06882bc90925281830152820152610158610294565b73d0353d838c63656a923df745f6e46fbd5c9e5a488152604080516060808201835260008083526020808401919091527b36d444523119314d397b62ae8cff8a240105239720608cb6215ff1c08385015284019190915273a5c28bfdda86f22abdc643be7dde0c264c0220b68284015283820192909252830191909152734caea4ad10908842fe0de9884e9aa9e05d5cd92190820152919050565b604080516080810182526000808252602082015290810161021261021f565b8152600060209091015290565b60405180606001604052806060815260200161023961024b565b8152602001610246610294565b905290565b6040805180820190915260008152602081016102466040805160c081018252600060a0820181815282526020820181905291810182905260608101829052608081019190915290565b60408051606080820183526000808352835191820184528082526020828101829052938201529091820190610212565b600060208083526affffffffffffffffffffff60a81b8451168184015266ffffffffffffff60c81b8185015116604084015260408401516080606085015280516101808060a087015281518061022088015260005b818110156103365783810186015188820161024001528501610319565b81811115610349576000610240838a0101525b5093830151805163ffffffff191660c0880152602090810151805151151560e08901528082015160050b61010089015260408082015160070b6101208a015260608083015115156101408b015260809283015160120b6101608b01529581015180516001600160a01b03908116958b019586528185015180511515878701529485015115158684015293820151601b0b858801520151821692810192909252969092015190951690840152601f01601f1916909101610240019291505056fea26469706673582212202cd30f012001121c6626414023ed238b4e9a659153e1d763f606a0cc8a44a0a664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_f512f8e5 {\n S_c1053bda s_0;\n int48 s_1;\n int64 s_2;\n bool s_3;\n int152 s_4;\n }\n\n struct S_de5a5adb {\n bytes28 s_0;\n S_f512f8e5 s_1;\n }\n\n struct S_49ba74a5 {\n bool s_0;\n bool s_1;\n int224 s_2;\n }\n\n struct S_63fc7e8b {\n address s_0;\n S_49ba74a5 s_1;\n address s_2;\n }\n\n struct S_28f36c94 {\n string s_0;\n S_de5a5adb s_1;\n S_63fc7e8b s_2;\n }\n\n struct S_163320d8 {\n bytes11 s_0;\n bytes7 s_1;\n S_28f36c94 s_2;\n address s_3;\n }\n\n function test () public pure returns (S_163320d8 memory) {\n S_163320d8 memory r;\n {\n bytes11 r_0 = bytes11(0xd0377dc57f5b06801694ee);\n r.s_0 = r_0;\n }\n {\n bytes7 r_1 = bytes7(0x1f7a5dc64ea658);\n r.s_1 = r_1;\n }\n {\n S_28f36c94 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀 é \";\n r_2.s_0 = r_2_0;\n }\n {\n S_de5a5adb memory r_2_1;\n {\n bytes28 r_2_1_0 = bytes28(0x661373ac5282a7568ceb8dc50c54d8333dff10823de220500618b27c);\n r_2_1.s_0 = r_2_1_0;\n }\n {\n S_f512f8e5 memory r_2_1_1;\n {\n S_c1053bda memory r_2_1_1_0;\n {\n bool r_2_1_1_0_0 = false;\n r_2_1_1_0.s_0 = r_2_1_1_0_0;\n }\n r_2_1_1.s_0 = r_2_1_1_0;\n }\n {\n int48 r_2_1_1_1 = -78667960584245;\n r_2_1_1.s_1 = r_2_1_1_1;\n }\n {\n int64 r_2_1_1_2 = 7105604242905646209;\n r_2_1_1.s_2 = r_2_1_1_2;\n }\n {\n bool r_2_1_1_3 = false;\n r_2_1_1.s_3 = r_2_1_1_3;\n }\n {\n int152 r_2_1_1_4 = 2326322274880926260778912606012360289042334396;\n r_2_1_1.s_4 = r_2_1_1_4;\n }\n r_2_1.s_1 = r_2_1_1;\n }\n r_2.s_1 = r_2_1;\n }\n {\n S_63fc7e8b memory r_2_2;\n {\n address r_2_2_0 = 0xd0353D838c63656A923DF745F6e46FbD5C9E5a48;\n r_2_2.s_0 = r_2_2_0;\n }\n {\n S_49ba74a5 memory r_2_2_1;\n {\n bool r_2_2_1_0 = false;\n r_2_2_1.s_0 = r_2_2_1_0;\n }\n {\n bool r_2_2_1_1 = false;\n r_2_2_1.s_1 = r_2_2_1_1;\n }\n {\n int224 r_2_2_1_2 = 5774185279353353389230134981167564492501107814526176442732572045760;\n r_2_2_1.s_2 = r_2_2_1_2;\n }\n r_2_2.s_1 = r_2_2_1;\n }\n {\n address r_2_2_2 = 0xA5C28BFdDA86f22abDC643Be7Dde0C264C0220B6;\n r_2_2.s_2 = r_2_2_2;\n }\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x4CaEa4ad10908842fE0dE9884E9Aa9E05d5CD921;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020d0377dc57f5b06801694ee0000000000000000000000000000000000000000001f7a5dc64ea6580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000004caea4ad10908842fe0de9884e9aa9e05d5cd9210000000000000000000000000000000000000000000000000000000000000180661373ac5282a7568ceb8dc50c54d8333dff10823de220500618b27c000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffb873b02777cb000000000000000000000000000000000000000000000000629c2d696ce644810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006850debb14d22f1794efefe096aba7d06882bc000000000000000000000000d0353d838c63656a923df745f6e46fbd5c9e5a48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036d444523119314d397b62ae8cff8a240105239720608cb6215ff1c0000000000000000000000000a5c28bfdda86f22abdc643be7dde0c264c0220b6000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a8020c3a920000000000000000000000000000000000000" + }, + { + "name": "random-(bytes9,(bool,address[2]),int168,bytes22,(string,string[1],(int256[2],bytes13,bool,bool),address))", + "type": "(bytes9,(bool,address[2]),int168,bytes22,(string,string[1],(int256[2],bytes13,bool,bool),address))", + "value": [ + "0x164ee9d8d62b22249f", + [ + false, + [ + "0xB00f60F97B45939eBb694B90a9DBa8038CBa5f09", + "0x247494c5b7cd1F4956ff51B0cB9A14a3926Bfe42" + ] + ], + "-100335459599962282905660676628061743755105326755845", + "0x813e5b9714961774e7b31b48664f351611eac3a1ca36", + [ + "Moo é🚀oo ooéoé", + ["Moo é🚀oooo éMéooo oo éMéo"], + [ + [ + "7424034867776187483791399233442789598306053058407075508090397467569830482648", + "-49141267867329983767075258606458461461039440801269284833434248843440734065020" + ], + "0xee5115114cd6694e659d0d7bfa", + false, + false + ], + "0xAD3149aF3789692AF3E040225e510f1656aaA76D" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x164ee9d8d62b22249f" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xB00f60F97B45939eBb694B90a9DBa8038CBa5f09" + }, + { + "type": "address", + "value": "0x247494c5b7cd1F4956ff51B0cB9A14a3926Bfe42" + } + ] + } + ] + }, + { + "type": "number", + "value": "-100335459599962282905660676628061743755105326755845" + }, + { + "type": "hexstring", + "value": "0x813e5b9714961774e7b31b48664f351611eac3a1ca36" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo ooéoé" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oooo éMéooo oo éMéo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "7424034867776187483791399233442789598306053058407075508090397467569830482648" + }, + { + "type": "number", + "value": "-49141267867329983767075258606458461461039440801269284833434248843440734065020" + } + ] + }, + { + "type": "hexstring", + "value": "0xee5115114cd6694e659d0d7bfa" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0xAD3149aF3789692AF3E040225e510f1656aaA76D" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610533806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610436565b60405180910390f35b61005661020c565b61005e61020c565b68164ee9d8d62b22249f60b81b8152610075610247565b6000815261008161025f565b73b00f60f97b45939ebb694b90a9dba8038cba5f09815273247494c5b7cd1f4956ff51b0cb9a14a3926bfe42602080830191909152828101919091528201527444a6fd9d5348a6ebbd42782dc75f3f91cc6c36700419604082015275409f2dcb8a4b0bba73d98da433279a8b08f561d0e51b60511b606082015261010361027d565b6040805180820190915260148152734d6f6f20c3a9f09f9a806f6f206f6fc3a96fc3a960601b602082015281526101386102b1565b60006040518060600160405280602181526020016104dd6021913982525060208201526101636102d8565b61016b61025f565b7f1069dad5f1da07942ec0b6b187d512e283e206fb7680dfdc1b41f52c3f23d2d881527f935b072dbd3d2ea6c79afe8e79650e6adc5b510ec5a5fc0ec4e2f219b4342e846020808301919091529082526c77288a88a66b34a732ce86bdfd60991b908201526000604080830182905260608084019290925283019190915273ad3149af3789692af3e040225e510f1656aaa76d908201526080820152919050565b6040805160a081019091526000815260208101610227610247565b8152600060208201819052604082015260600161024261027d565b905290565b60405180604001604052806000151581526020016102425b60405180604001604052806002906020820280368337509192915050565b6040518060800160405280606081526020016102976102b1565b81526020016102a46102d8565b8152600060209091015290565b60405180602001604052806001905b60608152602001906001900390816102c05790505090565b60405180608001604052806102eb61025f565b81526000602082018190526040820181905260609091015290565b6000815180845260005b8181101561032c57602081850181015186830182015201610310565b8181111561033e576000602083870101525b50601f01601f19169290920160200192915050565b6000610100825181855261036982860182610306565b6020858101518783038883015291935091508282810160005b60018110156103ad57858203835261039b828551610306565b93850193928501929150600101610382565b50604087810151805190965093506000925088015b60028310156103e15783518152928401926001929092019184016103c2565b509284015172ffffffffffffffffffffffffffffffffffffff1916608088015250506040820151151560a0860152606091820151151560c08601529201516001600160a01b031660e090930192909252919050565b602080825282516001600160b81b03191682820152828101518051151560408401528101516000919060608401835b600281101561048b5782516001600160a01b031682529183019190830190600101610465565b5050505060408301516104a360a084018260140b9052565b50606083015169ffffffffffffffffffff191660c0830152608083015160e0808401526104d4610100840182610353565b94935050505056fe4d6f6f20c3a9f09f9a806f6f6f6f20c3a94dc3a96f6f6f206f6f20c3a94dc3a96fa2646970667358221220a6ccc3ee515919ba7f694ed8004599e53c8c6461b603a3ac1c04853910246ceb64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_11fc7862 {\n bool s_0;\n address[2] s_1;\n }\n\n struct S_c02ac85a {\n int256[2] s_0;\n bytes13 s_1;\n bool s_2;\n bool s_3;\n }\n\n struct S_9f08f62d {\n string s_0;\n string[1] s_1;\n S_c02ac85a s_2;\n address s_3;\n }\n\n struct S_32dd6869 {\n bytes9 s_0;\n S_11fc7862 s_1;\n int168 s_2;\n bytes22 s_3;\n S_9f08f62d s_4;\n }\n\n function test () public pure returns (S_32dd6869 memory) {\n S_32dd6869 memory r;\n {\n bytes9 r_0 = bytes9(0x164ee9d8d62b22249f);\n r.s_0 = r_0;\n }\n {\n S_11fc7862 memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n {\n address[2] memory r_1_1;\n {\n address r_1_1_0 = 0xB00f60F97B45939eBb694B90a9DBa8038CBa5f09;\n r_1_1[0] = r_1_1_0;\n }\n {\n address r_1_1_1 = 0x247494c5b7cd1F4956ff51B0cB9A14a3926Bfe42;\n r_1_1[1] = r_1_1_1;\n }\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n int168 r_2 = -100335459599962282905660676628061743755105326755845;\n r.s_2 = r_2;\n }\n {\n bytes22 r_3 = bytes22(0x813e5b9714961774e7b31b48664f351611eac3a1ca36);\n r.s_3 = r_3;\n }\n {\n S_9f08f62d memory r_4;\n {\n string memory r_4_0 = unicode\"Moo é🚀oo ooéoé\";\n r_4.s_0 = r_4_0;\n }\n {\n string[1] memory r_4_1;\n {\n string memory r_4_1_0 = unicode\"Moo é🚀oooo éMéooo oo éMéo\";\n r_4_1[0] = r_4_1_0;\n }\n r_4.s_1 = r_4_1;\n }\n {\n S_c02ac85a memory r_4_2;\n {\n int256[2] memory r_4_2_0;\n {\n int256 r_4_2_0_0 = 7424034867776187483791399233442789598306053058407075508090397467569830482648;\n r_4_2_0[0] = r_4_2_0_0;\n }\n {\n int256 r_4_2_0_1 = -49141267867329983767075258606458461461039440801269284833434248843440734065020;\n r_4_2_0[1] = r_4_2_0_1;\n }\n r_4_2.s_0 = r_4_2_0;\n }\n {\n bytes13 r_4_2_1 = bytes13(0xee5115114cd6694e659d0d7bfa);\n r_4_2.s_1 = r_4_2_1;\n }\n {\n bool r_4_2_2 = false;\n r_4_2.s_2 = r_4_2_2;\n }\n {\n bool r_4_2_3 = false;\n r_4_2.s_3 = r_4_2_3;\n }\n r_4.s_2 = r_4_2;\n }\n {\n address r_4_3 = 0xAD3149aF3789692AF3E040225e510f1656aaA76D;\n r_4.s_3 = r_4_3;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020164ee9d8d62b22249f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b00f60f97b45939ebb694b90a9dba8038cba5f09000000000000000000000000247494c5b7cd1f4956ff51b0cb9a14a3926bfe42ffffffffffffffffffffffbb590262acb7591442bd87d238a0c06e3393c98ffb813e5b9714961774e7b31b48664f351611eac3a1ca360000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001401069dad5f1da07942ec0b6b187d512e283e206fb7680dfdc1b41f52c3f23d2d8935b072dbd3d2ea6c79afe8e79650e6adc5b510ec5a5fc0ec4e2f219b4342e84ee5115114cd6694e659d0d7bfa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad3149af3789692af3e040225e510f1656aaa76d00000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a806f6f206f6fc3a96fc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a806f6f6f6f20c3a94dc3a96f6f6f206f6f20c3a94dc3a96f00000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((address,((bytes2,(bool[3],bytes8,int240,string,address),(int8,string),bytes17))),(uint96,uint192),string[3][3])", + "type": "((address,((bytes2,(bool[3],bytes8,int240,string,address),(int8,string),bytes17))),(uint96,uint192),string[3][3])", + "value": [ + [ + "0x67b07B0fd93cFC8f4fA729E2c161b826a9062c82", + [ + [ + "0xcef4", + [ + [true, true, false], + "0x40839d67fe488e04", + "703547361575752883923072166597533876385223368313870554168942714137928552", + "Moo é🚀MoMooéé", + "0x64c78F6E488c014Cf7BEAd105479f0AA23f67865" + ], + ["-98", "Moo é🚀 M"], + "0xc9ca5c348cc425e23d01b9a73c680b3b95" + ] + ] + ], + [ + "55554333146762261374501182776", + "4905584324972330139225031045774172477254018074840152333192" + ], + [ + [ + "Moo é🚀M éMMé ooéMMo🚀o", + "Moo é🚀oééMMo ", + "Moo é🚀Méo ooo🚀é éoMéo MMoéé🚀 éo🚀o" + ], + [ + "Moo é🚀MM🚀oééo M🚀 o éo🚀 M🚀éooooé M🚀🚀 🚀", + "Moo é🚀o 🚀éMo🚀é🚀é MMoo🚀 ooo ooM🚀é M Méo🚀MMéo", + "Moo é🚀🚀M Mooo ooéo🚀ooooo🚀 M é🚀 🚀 o" + ], + [ + "Moo é🚀ooéo éo M🚀ooMo🚀oMo o éé 🚀M 🚀é", + "Moo é🚀oM ooo MMooo", + "Moo é🚀oé🚀é🚀 o oo 🚀🚀é🚀 🚀o 🚀 éo🚀oMM" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x67b07B0fd93cFC8f4fA729E2c161b826a9062c82" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xcef4" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x40839d67fe488e04" + }, + { + "type": "number", + "value": "703547361575752883923072166597533876385223368313870554168942714137928552" + }, + { + "type": "string", + "value": "Moo é🚀MoMooéé" + }, + { + "type": "address", + "value": "0x64c78F6E488c014Cf7BEAd105479f0AA23f67865" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-98" + }, + { + "type": "string", + "value": "Moo é🚀 M" + } + ] + }, + { + "type": "hexstring", + "value": "0xc9ca5c348cc425e23d01b9a73c680b3b95" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "55554333146762261374501182776" + }, + { + "type": "number", + "value": "4905584324972330139225031045774172477254018074840152333192" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀M éMMé ooéMMo🚀o" + }, + { + "type": "string", + "value": "Moo é🚀oééMMo " + }, + { + "type": "string", + "value": "Moo é🚀Méo ooo🚀é éoMéo MMoéé🚀 éo🚀o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MM🚀oééo M🚀 o éo🚀 M🚀éooooé M🚀🚀 🚀" + }, + { + "type": "string", + "value": "Moo é🚀o 🚀éMo🚀é🚀é MMoo🚀 ooo ooM🚀é M Méo🚀MMéo" + }, + { + "type": "string", + "value": "Moo é🚀🚀M Mooo ooéo🚀ooooo🚀 M é🚀 🚀 o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooéo éo M🚀ooMo🚀oMo o éé 🚀M 🚀é" + }, + { + "type": "string", + "value": "Moo é🚀oM ooo MMooo" + }, + { + "type": "string", + "value": "Moo é🚀oé🚀é🚀 o oo 🚀🚀é🚀 🚀o 🚀 éo🚀oMM" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506108fe806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906105da565b60405180910390f35b610056610382565b61005e610382565b6100666103c6565b7367b07b0fd93cfc8f4fa729e2c161b826a9062c8281526100856103e5565b61008d6103f4565b6133bd60f21b815261009d610440565b6100a5610474565b60018082526020808301919091526000604080840191909152918352671020e759ff92238160c21b838201527d65f005a25a7b0eedbd428364b6c1260f2107237e9cb5cd140a2acabce368838301528151808301835260138152724d6f6f20c3a9f09f9a804d6f4d6f6fc3a9c3a960681b818301526060808501919091527364c78f6e488c014cf7bead105479f0aa23f6786560808501528482019390935281518083018352808201848152606119825283518085018552600c81526b4d6f6f20c3a9f09f9a80204d60a01b8185015290528483015270c9ca5c348cc425e23d01b9a73c680b3b9560781b928401929092529183528381019290925291835281518083019092526bb38177a26f665cdac44cdd38825277c810b0aa89f3dbf0c3ab05c8b09ce7ec32e3b3a96bfedb88828201528201526101e3610492565b6101eb6104bf565b604080518082018252601f81527f4d6f6f20c3a9f09f9a804d20c3a94d4dc3a9206f6fc3a94d4d6ff09f9a806f00602080830191909152908352815180830183526013815272026b7b79061d4f84fcd4037e1d4e1d4a6a6b79606d1b81830152838201528151606081019092526035808352600092916107549083013960408301525081526102786104bf565b60006040518060800160405280604581526020016107c1604591398252506040805160808101909152604a8082526000919061087f602083013990508082600160200201819052505060006040518060600160405280603781526020016108066037913960408301525060208201526102ef6104bf565b60006040518060600160405280603881526020016107896038913982525060408051808201909152601781527f4d6f6f20c3a9f09f9a806f4d20206f6f6f204d4d6f6f6f000000000000000000602082015280826001602002018190525050600060405180608001604052806042815260200161083d604291396040808401919091528381019290925250820152919050565b60405180606001604052806103956103c6565b81526020016103b4604080518082019091526000808252602082015290565b81526020016103c1610492565b905290565b604051806040016040528060006001600160a01b031681526020016103c15b60405180602001604052806103c15b6040805160808101909152600081526020810161040f610440565b815260200161043360405180604001604052806000800b8152602001606081525090565b8152600060209091015290565b6040518060a00160405280610453610474565b81526000602082018190526040820181905260608083015260809091015290565b60405180606001604052806003906020820280368337509192915050565b60405180606001604052806003905b6104a96104bf565b8152602001906001900390816104a15790505090565b60405180606001604052806003905b60608152602001906001900390816104ce5790505090565b6000815180845260005b8181101561050c576020818501810151868301820152016104f0565b8181111561051e576000602083870101525b50601f01601f19169290920160200192915050565b805160000b8252600060208201516040602085015261055560408501826104e6565b949350505050565b6000826060808201846000805b600380821061057957506105cd565b8685038a52835185878101855b848110156105b357888203835261059e8285516104e6565b60209485019493909301929150600101610586565b5060209c8d019c909750959095019450505060010161056a565b5091979650505050505050565b60208082528251608083830181905281516001600160a01b031660a085015290820151604060c08501525160e0840183905280516001600160f01b031916610100850152808301516101208501929092528151600093928461018087015b60038210156106595783511515815292850192600191909101908501610638565b5050808401516001600160c01b0319166101e08701526040810151601d0b610200870152606081015160e0610220880152915061069a6102608701836104e6565b9150608081015190506106b96102408701826001600160a01b03169052565b50604082015185820360ff19016101408701526106d68282610533565b915050606082015191506106ff6101608601836effffffffffffffffffffffffffffff19169052565b9185015180516bffffffffffffffffffffffff16604086015260208101516001600160c01b03166060860152916040860151858203601f190160808701529250610749818461055d565b969550505050505056fe4d6f6f20c3a9f09f9a804dc3a96f206f6f6ff09f9a80c3a920c3a96f4dc3a96f204d4d6fc3a9c3a9f09f9a8020c3a96ff09f9a806f4d6f6f20c3a9f09f9a806f6fc3a96f20c3a96f204df09f9a806f6f4d6ff09f9a806f4d6f206f20c3a9c3a920f09f9a804d20f09f9a80c3a94d6f6f20c3a9f09f9a804d4df09f9a806fc3a9c3a96f204df09f9a8020206f20c3a96ff09f9a8020204df09f9a80c3a96f6f6f6fc3a9204df09f9a80f09f9a8020f09f9a804d6f6f20c3a9f09f9a80f09f9a804d204d6f6f6f206f6fc3a96ff09f9a806f6f6f6f6ff09f9a80204d20c3a9f09f9a8020f09f9a80206f4d6f6f20c3a9f09f9a806fc3a9f09f9a80c3a9f09f9a8020206f206f6f20f09f9a80f09f9a80c3a9f09f9a8020f09f9a806f20f09f9a8020c3a96ff09f9a806f4d4d4d6f6f20c3a9f09f9a806f202020f09f9a80c3a94d6ff09f9a80c3a9f09f9a80c3a9204d4d6f6ff09f9a80206f6f6f206f6f4df09f9a80c3a920204d204dc3a96ff09f9a804d4dc3a96fa26469706673582212208f629d50f11952cfdd941aef5a8acc44204ad17a231388e04d29b1006db50e6e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7438029c {\n bool[3] s_0;\n bytes8 s_1;\n int240 s_2;\n string s_3;\n address s_4;\n }\n\n struct S_51138439 {\n int8 s_0;\n string s_1;\n }\n\n struct S_1089e840 {\n bytes2 s_0;\n S_7438029c s_1;\n S_51138439 s_2;\n bytes17 s_3;\n }\n\n struct S_f2d0beee {\n S_1089e840 s_0;\n }\n\n struct S_12b4eb12 {\n address s_0;\n S_f2d0beee s_1;\n }\n\n struct S_d557d50b {\n uint96 s_0;\n uint192 s_1;\n }\n\n struct S_6876aac4 {\n S_12b4eb12 s_0;\n S_d557d50b s_1;\n string[3][3] s_2;\n }\n\n function test () public pure returns (S_6876aac4 memory) {\n S_6876aac4 memory r;\n {\n S_12b4eb12 memory r_0;\n {\n address r_0_0 = 0x67b07B0fd93cFC8f4fA729E2c161b826a9062c82;\n r_0.s_0 = r_0_0;\n }\n {\n S_f2d0beee memory r_0_1;\n {\n S_1089e840 memory r_0_1_0;\n {\n bytes2 r_0_1_0_0 = bytes2(0xcef4);\n r_0_1_0.s_0 = r_0_1_0_0;\n }\n {\n S_7438029c memory r_0_1_0_1;\n {\n bool[3] memory r_0_1_0_1_0;\n {\n bool r_0_1_0_1_0_0 = true;\n r_0_1_0_1_0[0] = r_0_1_0_1_0_0;\n }\n {\n bool r_0_1_0_1_0_1 = true;\n r_0_1_0_1_0[1] = r_0_1_0_1_0_1;\n }\n {\n bool r_0_1_0_1_0_2 = false;\n r_0_1_0_1_0[2] = r_0_1_0_1_0_2;\n }\n r_0_1_0_1.s_0 = r_0_1_0_1_0;\n }\n {\n bytes8 r_0_1_0_1_1 = bytes8(0x40839d67fe488e04);\n r_0_1_0_1.s_1 = r_0_1_0_1_1;\n }\n {\n int240 r_0_1_0_1_2 = 703547361575752883923072166597533876385223368313870554168942714137928552;\n r_0_1_0_1.s_2 = r_0_1_0_1_2;\n }\n {\n string memory r_0_1_0_1_3 = unicode\"Moo é🚀MoMooéé\";\n r_0_1_0_1.s_3 = r_0_1_0_1_3;\n }\n {\n address r_0_1_0_1_4 = 0x64c78F6E488c014Cf7BEAd105479f0AA23f67865;\n r_0_1_0_1.s_4 = r_0_1_0_1_4;\n }\n r_0_1_0.s_1 = r_0_1_0_1;\n }\n {\n S_51138439 memory r_0_1_0_2;\n {\n int8 r_0_1_0_2_0 = -98;\n r_0_1_0_2.s_0 = r_0_1_0_2_0;\n }\n {\n string memory r_0_1_0_2_1 = unicode\"Moo é🚀 M\";\n r_0_1_0_2.s_1 = r_0_1_0_2_1;\n }\n r_0_1_0.s_2 = r_0_1_0_2;\n }\n {\n bytes17 r_0_1_0_3 = bytes17(0xc9ca5c348cc425e23d01b9a73c680b3b95);\n r_0_1_0.s_3 = r_0_1_0_3;\n }\n r_0_1.s_0 = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n S_d557d50b memory r_1;\n {\n uint96 r_1_0 = 55554333146762261374501182776;\n r_1.s_0 = r_1_0;\n }\n {\n uint192 r_1_1 = 4905584324972330139225031045774172477254018074840152333192;\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n string[3][3] memory r_2;\n {\n string[3] memory r_2_0;\n {\n string memory r_2_0_0 = unicode\"Moo é🚀M éMMé ooéMMo🚀o\";\n r_2_0[0] = r_2_0_0;\n }\n {\n string memory r_2_0_1 = unicode\"Moo é🚀oééMMo \";\n r_2_0[1] = r_2_0_1;\n }\n {\n string memory r_2_0_2 = unicode\"Moo é🚀Méo ooo🚀é éoMéo MMoéé🚀 éo🚀o\";\n r_2_0[2] = r_2_0_2;\n }\n r_2[0] = r_2_0;\n }\n {\n string[3] memory r_2_1;\n {\n string memory r_2_1_0 = unicode\"Moo é🚀MM🚀oééo M🚀 o éo🚀 M🚀éooooé M🚀🚀 🚀\";\n r_2_1[0] = r_2_1_0;\n }\n {\n string memory r_2_1_1 = unicode\"Moo é🚀o 🚀éMo🚀é🚀é MMoo🚀 ooo ooM🚀é M Méo🚀MMéo\";\n r_2_1[1] = r_2_1_1;\n }\n {\n string memory r_2_1_2 = unicode\"Moo é🚀🚀M Mooo ooéo🚀ooooo🚀 M é🚀 🚀 o\";\n r_2_1[2] = r_2_1_2;\n }\n r_2[1] = r_2_1;\n }\n {\n string[3] memory r_2_2;\n {\n string memory r_2_2_0 = unicode\"Moo é🚀ooéo éo M🚀ooMo🚀oMo o éé 🚀M 🚀é\";\n r_2_2[0] = r_2_2_0;\n }\n {\n string memory r_2_2_1 = unicode\"Moo é🚀oM ooo MMooo\";\n r_2_2[1] = r_2_2_1;\n }\n {\n string memory r_2_2_2 = unicode\"Moo é🚀oé🚀é🚀 o oo 🚀🚀é🚀 🚀o 🚀 éo🚀oMM\";\n r_2_2[2] = r_2_2_2;\n }\n r_2[2] = r_2_2;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000b38177a26f665cdac44cdd380000000000000000c810b0aa89f3dbf0c3ab05c8b09ce7ec32e3b3a96bfedb88000000000000000000000000000000000000000000000000000000000000030000000000000000000000000067b07b0fd93cfc8f4fa729e2c161b826a9062c8200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000020cef4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a0c9ca5c348cc425e23d01b9a73c680b3b9500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000040839d67fe488e04000000000000000000000000000000000000000000000000000065f005a25a7b0eedbd428364b6c1260f2107237e9cb5cd140a2acabce36800000000000000000000000000000000000000000000000000000000000000e000000000000000000000000064c78f6e488c014cf7bead105479f0aa23f6786500000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a804d6f4d6f6fc3a9c3a900000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9e0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a80204d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a804d20c3a94d4dc3a9206f6fc3a94d4d6ff09f9a806f0000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a806fc3a9c3a94d4d6f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000354d6f6f20c3a9f09f9a804dc3a96f206f6f6ff09f9a80c3a920c3a96f4dc3a96f204d4d6fc3a9c3a9f09f9a8020c3a96ff09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a804d4df09f9a806fc3a9c3a96f204df09f9a8020206f20c3a96ff09f9a8020204df09f9a80c3a96f6f6f6fc3a9204df09f9a80f09f9a8020f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a806f202020f09f9a80c3a94d6ff09f9a80c3a9f09f9a80c3a9204d4d6f6ff09f9a80206f6f6f206f6f4df09f9a80c3a920204d204dc3a96ff09f9a804d4dc3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a80f09f9a804d204d6f6f6f206f6fc3a96ff09f9a806f6f6f6f6ff09f9a80204d20c3a9f09f9a8020f09f9a80206f000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a806f6fc3a96f20c3a96f204df09f9a806f6f4d6ff09f9a806f4d6f206f20c3a9c3a920f09f9a804d20f09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a806f4d20206f6f6f204d4d6f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a806fc3a9f09f9a80c3a9f09f9a8020206f206f6f20f09f9a80f09f9a80c3a9f09f9a8020f09f9a806f20f09f9a8020c3a96ff09f9a806f4d4d000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address,bool,(string,uint16,(bool,bool,bytes21,bytes24)[4],address,(int96,bool,bool))[],bytes21,bool)", + "type": "(address,bool,(string,uint16,(bool,bool,bytes21,bytes24)[4],address,(int96,bool,bool))[],bytes21,bool)", + "value": [ + "0x1E620aCC1035d63aF6a175a76369Fa2A0d4c7E8E", + true, + [], + "0xdecafe310dd1814089f4a320f147be0cac412793b1", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x1E620aCC1035d63aF6a175a76369Fa2A0d4c7E8E" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [] + }, + { + "type": "hexstring", + "value": "0xdecafe310dd1814089f4a320f147be0cac412793b1" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506103a7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061020e565b60405180910390f35b6040805160a080820183526000808352602080840182905260608486018190528085018390526080808601849052865194850187528487018290529084018390528301829052731e620acc1035d63af6a175a76369fa2a0d4c7e8e835260018382015284518281529081019094529192909190816100e2565b6100cf610113565b8152602001906001900390816100c75790505b5060408301525074decafe310dd1814089f4a320f147be0cac412793b160581b606082015260006080820152919050565b6040805160a081018252606081526000602082015290810161013361015f565b815260006020808301829052604080516060810182528381529182018390528181019290925291015290565b60405180608001604052806004905b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018161016e5790505090565b8060005b60048110156102085781518051151585526020808201511515818701526040808301516affffffffffffffffffffff19169087015260609182015167ffffffffffffffff191691860191909152608090940193909101906001016101a9565b50505050565b6000602080835260c0830160018060a01b038551168285015281850151604081151581870152808701519150606060a08188015283835180865260e08901915060e08160051b8a0101955086850194506000805b828110156103355760df198b890301845286516102c08151818b52805180838d01528592505b808310156102a7578183018d01518c84016102e00152918c0191610288565b808311156102b957856102e0828e0101525b8c84015161ffff168c8e01528984015192506102d78a8d01846101a5565b838901516001600160a01b03166102408d01526080909301518051600b0b6102608d0152602081015115156102808d01526040015115156102a08c01525050601f01601f19169097016102e001969588019592880192600101610262565b505050508701516affffffffffffffffffffff1981166080880152935061035a915050565b608085015180151560a0860152915094935050505056fea2646970667358221220244c8dcdead4cf0c7354b318fcba1b993528eb4485f84e35a096ccd572c4e28764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0669c04c {\n bool s_0;\n bool s_1;\n bytes21 s_2;\n bytes24 s_3;\n }\n\n struct S_db7bd56f {\n int96 s_0;\n bool s_1;\n bool s_2;\n }\n\n struct S_a7e159a9 {\n string s_0;\n uint16 s_1;\n S_0669c04c[4] s_2;\n address s_3;\n S_db7bd56f s_4;\n }\n\n struct S_003e44e0 {\n address s_0;\n bool s_1;\n S_a7e159a9[] s_2;\n bytes21 s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_003e44e0 memory) {\n S_003e44e0 memory r;\n {\n address r_0 = 0x1E620aCC1035d63aF6a175a76369Fa2A0d4c7E8E;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n S_a7e159a9[] memory r_2 = new S_a7e159a9[](0);\n r.s_2 = r_2;\n }\n {\n bytes21 r_3 = bytes21(0xdecafe310dd1814089f4a320f147be0cac412793b1);\n r.s_3 = r_3;\n }\n {\n bool r_4 = false;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000001e620acc1035d63af6a175a76369fa2a0d4c7e8e000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0decafe310dd1814089f4a320f147be0cac412793b1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes14[3],(int32[1],uint168,bytes26,((bool[1]),address[])),bytes7,(bool,(bool),bool,string,address))", + "type": "(bytes14[3],(int32[1],uint168,bytes26,((bool[1]),address[])),bytes7,(bool,(bool),bool,string,address))", + "value": [ + [ + "0xc3ec97fb78f7a49f724aec1ee775", + "0x22e7c736152c6e42bbcff2e67936", + "0xa694635771a1a8aae9c27583f9dc" + ], + [ + ["-1950938984"], + "87067062404810549073219706469542110158337975125288", + "0x6f2723373602ff607c3aaabfce7e1f5066e693be22cf05500ef8", + [[[true]], ["0xAFc70386e1D3cc7a92CbDC0627C2Fb7Ab27F0b59"]] + ], + "0x37ebf3243dfad2", + [ + true, + [true], + true, + "Moo é🚀M MMoé🚀🚀MoMo🚀 🚀é", + "0xd3a5122649E70cE1283dF3bf2784a6716F07cBB8" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc3ec97fb78f7a49f724aec1ee775" + }, + { + "type": "hexstring", + "value": "0x22e7c736152c6e42bbcff2e67936" + }, + { + "type": "hexstring", + "value": "0xa694635771a1a8aae9c27583f9dc" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-1950938984" + } + ] + }, + { + "type": "number", + "value": "87067062404810549073219706469542110158337975125288" + }, + { + "type": "hexstring", + "value": "0x6f2723373602ff607c3aaabfce7e1f5066e693be22cf05500ef8" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xAFc70386e1D3cc7a92CbDC0627C2Fb7Ab27F0b59" + } + ] + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x37ebf3243dfad2" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀M MMoé🚀🚀MoMo🚀 🚀é" + }, + { + "type": "address", + "value": "0xd3a5122649E70cE1283dF3bf2784a6716F07cBB8" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506105ec806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906104d8565b60405180910390f35b61005661024f565b61005e61024f565b6100666102b8565b6dc3ec97fb78f7a49f724aec1ee77560901b81526d1173e39b0a9637215de7f9733c9b60911b60208201526d29a518d5dc686a2aba709d60fe7760921b604082015281526100b26102d6565b6100ba610304565b637448f7671981528152743b92de1b5eddad6dd6e090f1f2d4925a98b6e6052860208201527f6f2723373602ff607c3aaabfce7e1f5066e693be22cf05500ef8000000000000604082015261010d610322565b610115610342565b61011d610304565b60018082529082529082526040805182815280820190915260009160208083019080368337019050509050600073afc70386e1d3cc7a92cbdc0627c2fb7ab27f0b599050808260008151811061017557610175610578565b6001600160a01b0390921660209283029190910182015283810192909252506060830191909152820152661bf5f9921efd6960c91b60408201526101e76040805160a0810182526000808252825160208082018552828252830152918101829052606080820152608081019190915290565b600180825260408051602080820183528382528085019190915281840192909252805160608101909152602880825260009261058f9083013960608084019190915273d3a5122649e70ce1283df3bf2784a6716f07cbb8608084015283019190915250919050565b60405180608001604052806102626102b8565b815260200161026f6102d6565b8152600060208201526040016102b36040805160a0810182526000808252825160208082018552828252830152918101829052606080820152608081019190915290565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806102e9610304565b815260006020820181905260408201526060016102b3610322565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280610335610342565b8152602001606081525090565b60405180602001604052806102b3610304565b8051600090608084019084835b600181101561038457825160030b825260209283019290910190600101610362565b5050506020838101516001600160a81b03168582015260408085015165ffffffffffff1916908601526060808501516080918701919091528051519260c08701906000905b60018210156103ea57855115158152948401946001919091019084016103c9565b505090820151604060a08801528051918290528201925060e08601906000905b808210156104335784516001600160a01b0316835293830193918301916001919091019061040a565b50909695505050505050565b805115158252600060208083015151151581850152604083015115156040850152606083015160a0606086015280518060a087015260005b818110156104935782810184015187820160c001528301610477565b818111156104a557600060c083890101525b50608085015192506104c260808701846001600160a01b03169052565b601f01601f19169490940160c001949350505050565b6020808252825160009190828483015b600382101561051c57825171ffffffffffffffffffffffffffffffffffff19168152918301916001919091019083016104e8565b50505083015160c0608084015261053660e0840182610355565b9050604084015161055360a08501826001600160c81b0319169052565b506060840151838203601f190160c085015261056f828261043f565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d204d4d6fc3a9f09f9a80f09f9a804d6f4d6ff09f9a8020f09f9a80c3a9a264697066735822122062b47e6629a142a23ba590cc815a96bb465b120362a104371932a5ad16bf62ce64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d2d22cc7 {\n bool[1] s_0;\n }\n\n struct S_4fae7072 {\n S_d2d22cc7 s_0;\n address[] s_1;\n }\n\n struct S_0104cc3c {\n int32[1] s_0;\n uint168 s_1;\n bytes26 s_2;\n S_4fae7072 s_3;\n }\n\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_186fbd76 {\n bool s_0;\n S_c1053bda s_1;\n bool s_2;\n string s_3;\n address s_4;\n }\n\n struct S_d327d6fd {\n bytes14[3] s_0;\n S_0104cc3c s_1;\n bytes7 s_2;\n S_186fbd76 s_3;\n }\n\n function test () public pure returns (S_d327d6fd memory) {\n S_d327d6fd memory r;\n {\n bytes14[3] memory r_0;\n {\n bytes14 r_0_0 = bytes14(0xc3ec97fb78f7a49f724aec1ee775);\n r_0[0] = r_0_0;\n }\n {\n bytes14 r_0_1 = bytes14(0x22e7c736152c6e42bbcff2e67936);\n r_0[1] = r_0_1;\n }\n {\n bytes14 r_0_2 = bytes14(0xa694635771a1a8aae9c27583f9dc);\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n S_0104cc3c memory r_1;\n {\n int32[1] memory r_1_0;\n {\n int32 r_1_0_0 = -1950938984;\n r_1_0[0] = r_1_0_0;\n }\n r_1.s_0 = r_1_0;\n }\n {\n uint168 r_1_1 = 87067062404810549073219706469542110158337975125288;\n r_1.s_1 = r_1_1;\n }\n {\n bytes26 r_1_2 = bytes26(0x6f2723373602ff607c3aaabfce7e1f5066e693be22cf05500ef8);\n r_1.s_2 = r_1_2;\n }\n {\n S_4fae7072 memory r_1_3;\n {\n S_d2d22cc7 memory r_1_3_0;\n {\n bool[1] memory r_1_3_0_0;\n {\n bool r_1_3_0_0_0 = true;\n r_1_3_0_0[0] = r_1_3_0_0_0;\n }\n r_1_3_0.s_0 = r_1_3_0_0;\n }\n r_1_3.s_0 = r_1_3_0;\n }\n {\n address[] memory r_1_3_1 = new address[](1);\n {\n address r_1_3_1_0 = 0xAFc70386e1D3cc7a92CbDC0627C2Fb7Ab27F0b59;\n r_1_3_1[0] = r_1_3_1_0;\n }\n r_1_3.s_1 = r_1_3_1;\n }\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n bytes7 r_2 = bytes7(0x37ebf3243dfad2);\n r.s_2 = r_2;\n }\n {\n S_186fbd76 memory r_3;\n {\n bool r_3_0 = true;\n r_3.s_0 = r_3_0;\n }\n {\n S_c1053bda memory r_3_1;\n {\n bool r_3_1_0 = true;\n r_3_1.s_0 = r_3_1_0;\n }\n r_3.s_1 = r_3_1;\n }\n {\n bool r_3_2 = true;\n r_3.s_2 = r_3_2;\n }\n {\n string memory r_3_3 = unicode\"Moo é🚀M MMoé🚀🚀MoMo🚀 🚀é\";\n r_3.s_3 = r_3_3;\n }\n {\n address r_3_4 = 0xd3a5122649E70cE1283dF3bf2784a6716F07cBB8;\n r_3.s_4 = r_3_4;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020c3ec97fb78f7a49f724aec1ee77500000000000000000000000000000000000022e7c736152c6e42bbcff2e67936000000000000000000000000000000000000a694635771a1a8aae9c27583f9dc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c037ebf3243dfad20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8bb7089800000000000000000000003b92de1b5eddad6dd6e090f1f2d4925a98b6e605286f2723373602ff607c3aaabfce7e1f5066e693be22cf05500ef80000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000afc70386e1d3cc7a92cbdc0627c2fb7ab27f0b5900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000d3a5122649e70ce1283df3bf2784a6716f07cbb800000000000000000000000000000000000000000000000000000000000000284d6f6f20c3a9f09f9a804d204d4d6fc3a9f09f9a80f09f9a804d6f4d6ff09f9a8020f09f9a80c3a9000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes30,(int192),string[2],(string,string,(bytes20,bytes12,(address,uint136[1],uint216,string,address[]))),(bytes3))", + "type": "(bytes30,(int192),string[2],(string,string,(bytes20,bytes12,(address,uint136[1],uint216,string,address[]))),(bytes3))", + "value": [ + "0xa137d1cd7b4557cac246f6e3450948c0f556d212e3129013f3bbdf3fc10c", + ["2037068930245087684756099283727091550186566670149945148704"], + [ + "Moo é🚀ooo🚀 MMoMéoMooMo Mo", + "Moo é🚀oMo 🚀 Méooo🚀ééoM 🚀oooéooMé 🚀oé🚀o🚀🚀ooMéMéoM🚀🚀🚀 ooMoé" + ], + [ + "Moo é🚀 Mo oéo🚀🚀 o🚀 🚀🚀 🚀éoooM🚀ooo", + "Moo é🚀o🚀🚀oMo éM ooo🚀o oMMoé🚀oo oééo M", + [ + "0x76b037ebc2a387068bd2fe818f82cbbb74e68201", + "0xd87429e65c6784d9d054b81a", + [ + "0xF65618E74822F66d1ab94DbE4a9c7260a46f1d4a", + ["14109388050680661275247680250092534044587"], + "10851661205865290690491059330096443828500993526125288288918213787", + "Moo é🚀éMo🚀é🚀M 🚀 🚀 o ééooo", + [ + "0x8446300b505e8718f9f7b5b71498132F0711f6fC", + "0x3C3f0b6589A3d976c28E3c9cB0EC574eEF73edEB", + "0xbF73b6816962275D5903D981C92C6Ac200348D22" + ] + ] + ] + ], + ["0x044947"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa137d1cd7b4557cac246f6e3450948c0f556d212e3129013f3bbdf3fc10c" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2037068930245087684756099283727091550186566670149945148704" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooo🚀 MMoMéoMooMo Mo" + }, + { + "type": "string", + "value": "Moo é🚀oMo 🚀 Méooo🚀ééoM 🚀oooéooMé 🚀oé🚀o🚀🚀ooMéMéoM🚀🚀🚀 ooMoé" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 Mo oéo🚀🚀 o🚀 🚀🚀 🚀éoooM🚀ooo" + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀oMo éM ooo🚀o oMMoé🚀oo oééo M" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x76b037ebc2a387068bd2fe818f82cbbb74e68201" + }, + { + "type": "hexstring", + "value": "0xd87429e65c6784d9d054b81a" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xF65618E74822F66d1ab94DbE4a9c7260a46f1d4a" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "14109388050680661275247680250092534044587" + } + ] + }, + { + "type": "number", + "value": "10851661205865290690491059330096443828500993526125288288918213787" + }, + { + "type": "string", + "value": "Moo é🚀éMo🚀é🚀M 🚀 🚀 o ééooo" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x8446300b505e8718f9f7b5b71498132F0711f6fC" + }, + { + "type": "address", + "value": "0x3C3f0b6589A3d976c28E3c9cB0EC574eEF73edEB" + }, + { + "type": "address", + "value": "0xbF73b6816962275D5903D981C92C6Ac200348D22" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x044947" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610820806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906105f9565b60405180910390f35b610056610340565b61005e610340565b7fa137d1cd7b4557cac246f6e3450948c0f556d212e3129013f3bbdf3fc10c00008152604080516020808201909252775313fdf2e387a82d3e2ce3eda9de53e5c65bfea57db445208152908201526100b4610394565b6000604051806060016040528060228152602001610790602291398252506040805160a0810190915260668082526000919061072a602083013960208301525060408201526101016103bb565b60006040518060600160405280603c81526020016106c1603c913982525060408051606081019091526039808252600091906107b260208301396020830152506101496103d8565b7376b037ebc2a387068bd2fe818f82cbbb74e6820160601b81526b6c3a14f32e33c26ce82a5c0d60a11b60208201526101806103f3565b73f65618e74822f66d1ab94dbe4a9c7260a46f1d4a815261019f61042f565b702976b94b5c643e7a4dda5459d1004717ab81526020828101919091527a1a61015e72f14517616c26518f28dda25ea85b81bbf2090194949b604080840191909152805160608101909152602d8082526000926106fd90830139606083015250604080516003808252608082019092526000918160200160208202803683370190505090506000738446300b505e8718f9f7b5b71498132f0711f6fc90508082600081518110610251576102516106aa565b60200260200101906001600160a01b031690816001600160a01b031681525050506000733c3f0b6589a3d976c28e3c9cb0ec574eef73edeb9050808260018151811061029f5761029f6106aa565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073bf73b6816962275d5903d981c92c6ac200348d22905080826002815181106102ed576102ed6106aa565b6001600160a01b039290921660209283029190910182015260808481019390935260408581019490945285840194909452506060850193909352805191820190526204494760e81b815290820152919050565b6040805160a08101825260008082528251602080820185529181529082015290810161036a610394565b81526020016103776103bb565b81526040805160208181019092526000815291015290565b905290565b60405180604001604052806002905b60608152602001906001900390816103a35790505090565b6040518060600160405280606081526020016060815260200161038f5b604080516060810182526000808252602082015290810161038f5b6040518060a0016040528060006001600160a01b0316815260200161041661042f565b8152600060208201526060604082018190529081015290565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b8181101561047357602081850181015186830182015201610457565b81811115610485576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b838110156104d35781516001600160a01b0316875295820195908201906001016104ae565b509495945050505050565b60008151606084526104f3606085018261044d565b90506020808401518583038287015261050c838261044d565b6040868101518883038983015280516bffffffffffffffffffffffff19168352848101516001600160a01b03191685840152810151606091830182905280516001600160a01b0316918301919091528084015191945091506080840160005b600181101561059b57825170ffffffffffffffffffffffffffffffffff168252918401919084019060010161056b565b50505060408101516001600160d81b03811660a085015291506060810151915060a060c08401526105d061010084018361044d565b915060808101519050605f198383030160e08401526105ef828261049a565b9695505050505050565b6020808252825161ffff191682820152828101515160170b60408084019190915283015160a060608401526000919061010084019060c08501845b60028110156106635760bf1987850301825261065184845161044d565b93509184019190840190600101610634565b5050506060850151848203601f19016080860152915061068381836104de565b91505060808401516106a260a0850182516001600160e81b0319169052565b509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80204d6f20206fc3a96ff09f9a80f09f9a80206ff09f9a8020f09f9a80f09f9a8020f09f9a80c3a96f6f6f4df09f9a806f6f6f4d6f6f20c3a9f09f9a80c3a94d6ff09f9a80c3a9f09f9a804d20f09f9a8020f09f9a80206f20c3a9c3a96f6f6f4d6f6f20c3a9f09f9a806f4d6f2020f09f9a8020204dc3a96f6f6ff09f9a80c3a9c3a96f4d20f09f9a806f6f6fc3a96f6f4dc3a920f09f9a806fc3a9f09f9a806ff09f9a80f09f9a806f6f4dc3a94dc3a96f4df09f9a80f09f9a80f09f9a80206f6f4d6fc3a94d6f6f20c3a9f09f9a806f6f6ff09f9a80204d4d6f4dc3a96f4d6f6f4d6f20204d6f4d6f6f20c3a9f09f9a806ff09f9a80f09f9a806f4d6f20c3a94d206f6f6ff09f9a806f206f4d4d6fc3a9f09f9a806f6f206fc3a9c3a96f204da2646970667358221220d41c5a82c30e9448b7247ddf583de51be6569be360c004014a75ef8e014e6c6664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ad75eff8 {\n int192 s_0;\n }\n\n struct S_af1677fe {\n address s_0;\n uint136[1] s_1;\n uint216 s_2;\n string s_3;\n address[] s_4;\n }\n\n struct S_dff01d3c {\n bytes20 s_0;\n bytes12 s_1;\n S_af1677fe s_2;\n }\n\n struct S_c62daf3e {\n string s_0;\n string s_1;\n S_dff01d3c s_2;\n }\n\n struct S_f9135bc5 {\n bytes3 s_0;\n }\n\n struct S_84b9a376 {\n bytes30 s_0;\n S_ad75eff8 s_1;\n string[2] s_2;\n S_c62daf3e s_3;\n S_f9135bc5 s_4;\n }\n\n function test () public pure returns (S_84b9a376 memory) {\n S_84b9a376 memory r;\n {\n bytes30 r_0 = bytes30(0xa137d1cd7b4557cac246f6e3450948c0f556d212e3129013f3bbdf3fc10c);\n r.s_0 = r_0;\n }\n {\n S_ad75eff8 memory r_1;\n {\n int192 r_1_0 = 2037068930245087684756099283727091550186566670149945148704;\n r_1.s_0 = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n string[2] memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀ooo🚀 MMoMéoMooMo Mo\";\n r_2[0] = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀oMo 🚀 Méooo🚀ééoM 🚀oooéooMé 🚀oé🚀o🚀🚀ooMéMéoM🚀🚀🚀 ooMoé\";\n r_2[1] = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n S_c62daf3e memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀 Mo oéo🚀🚀 o🚀 🚀🚀 🚀éoooM🚀ooo\";\n r_3.s_0 = r_3_0;\n }\n {\n string memory r_3_1 = unicode\"Moo é🚀o🚀🚀oMo éM ooo🚀o oMMoé🚀oo oééo M\";\n r_3.s_1 = r_3_1;\n }\n {\n S_dff01d3c memory r_3_2;\n {\n bytes20 r_3_2_0 = bytes20(0x76b037ebc2a387068Bd2fE818f82cBbb74e68201);\n r_3_2.s_0 = r_3_2_0;\n }\n {\n bytes12 r_3_2_1 = bytes12(0xd87429e65c6784d9d054b81a);\n r_3_2.s_1 = r_3_2_1;\n }\n {\n S_af1677fe memory r_3_2_2;\n {\n address r_3_2_2_0 = 0xF65618E74822F66d1ab94DbE4a9c7260a46f1d4a;\n r_3_2_2.s_0 = r_3_2_2_0;\n }\n {\n uint136[1] memory r_3_2_2_1;\n {\n uint136 r_3_2_2_1_0 = 14109388050680661275247680250092534044587;\n r_3_2_2_1[0] = r_3_2_2_1_0;\n }\n r_3_2_2.s_1 = r_3_2_2_1;\n }\n {\n uint216 r_3_2_2_2 = 10851661205865290690491059330096443828500993526125288288918213787;\n r_3_2_2.s_2 = r_3_2_2_2;\n }\n {\n string memory r_3_2_2_3 = unicode\"Moo é🚀éMo🚀é🚀M 🚀 🚀 o ééooo\";\n r_3_2_2.s_3 = r_3_2_2_3;\n }\n {\n address[] memory r_3_2_2_4 = new address[](3);\n {\n address r_3_2_2_4_0 = 0x8446300b505e8718f9f7b5b71498132F0711f6fC;\n r_3_2_2_4[0] = r_3_2_2_4_0;\n }\n {\n address r_3_2_2_4_1 = 0x3C3f0b6589A3d976c28E3c9cB0EC574eEF73edEB;\n r_3_2_2_4[1] = r_3_2_2_4_1;\n }\n {\n address r_3_2_2_4_2 = 0xbF73b6816962275D5903D981C92C6Ac200348D22;\n r_3_2_2_4[2] = r_3_2_2_4_2;\n }\n r_3_2_2.s_4 = r_3_2_2_4;\n }\n r_3_2.s_2 = r_3_2_2;\n }\n r_3.s_2 = r_3_2;\n }\n r.s_3 = r_3;\n }\n {\n S_f9135bc5 memory r_4;\n {\n bytes3 r_4_0 = bytes3(0x044947);\n r_4.s_0 = r_4_0;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020a137d1cd7b4557cac246f6e3450948c0f556d212e3129013f3bbdf3fc10c000000000000000000005313fdf2e387a82d3e2ce3eda9de53e5c65bfea57db4452000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e00449470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a806f6f6ff09f9a80204d4d6f4dc3a96f4d6f6f4d6f20204d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000664d6f6f20c3a9f09f9a806f4d6f2020f09f9a8020204dc3a96f6f6ff09f9a80c3a9c3a96f4d20f09f9a806f6f6fc3a96f6f4dc3a920f09f9a806fc3a9f09f9a806ff09f9a80f09f9a806f6f4dc3a94dc3a96f4df09f9a80f09f9a80f09f9a80206f6f4d6fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a80204d6f20206fc3a96ff09f9a80f09f9a80206ff09f9a8020f09f9a80f09f9a8020f09f9a80c3a96f6f6f4df09f9a806f6f6f0000000000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a806ff09f9a80f09f9a806f4d6f20c3a94d206f6f6ff09f9a806f206f4d4d6fc3a9f09f9a806f6f206fc3a9c3a96f204d0000000000000076b037ebc2a387068bd2fe818f82cbbb74e68201000000000000000000000000d87429e65c6784d9d054b81a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000f65618e74822f66d1ab94dbe4a9c7260a46f1d4a0000000000000000000000000000002976b94b5c643e7a4dda5459d1004717ab00000000001a61015e72f14517616c26518f28dda25ea85b81bbf2090194949b00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a80c3a94d6ff09f9a80c3a9f09f9a804d20f09f9a8020f09f9a80206f20c3a9c3a96f6f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000008446300b505e8718f9f7b5b71498132f0711f6fc0000000000000000000000003c3f0b6589a3d976c28e3c9cb0ec574eef73edeb000000000000000000000000bf73b6816962275d5903d981c92c6ac200348d22" + }, + { + "name": "random-(string,bool,(address,address,((bool),(address,address,string,uint16),uint160,(bytes31,bool,string,bytes26)[2])),(string))", + "type": "(string,bool,(address,address,((bool),(address,address,string,uint16),uint160,(bytes31,bool,string,bytes26)[2])),(string))", + "value": [ + "Moo é🚀🚀éééMM ééo o oo🚀oo🚀MéoMMooMééMé🚀o🚀o🚀ééMoooMo oo", + true, + [ + "0xE66A6F5e07BCB29ECb48BD4F0C08E2872EBC6ef2", + "0xE2F7bC16393d6f37dAAf0B0989B0C1e7d1Cf9b60", + [ + [false], + [ + "0xA3fD8271d4ef9266174fE409113C0aeeDE5b98bd", + "0x9a8D4049A78D11D32684aB03B9ed7EdaE2C63B93", + "Moo é🚀", + "5136" + ], + "916422500711144337695906013851951176225583533211", + [ + [ + "0x68a540f159da95c9a54205da8aab2ffefeef4db4d6e5dfb6aa76b3960e99bf", + true, + "Moo é🚀🚀oo oééo 🚀", + "0xbe8a76b1fed40a7425eacbba7e6dc38fbae10b12ae88a5d82d21" + ], + [ + "0x04f82b1bf4a3041086d08cbd6e0acbc21ebfa1850b34baab95f08a76217635", + true, + "Moo é🚀M🚀éé🚀é🚀o🚀 oéo éo🚀éMMéoM ooo🚀M ooo🚀éMo", + "0x7a6135c771194724e7b4dca32976d7d22429c1b2bbb42eda40ed" + ] + ] + ] + ], + ["Moo é🚀éooéMoM MMooMoMo🚀🚀M oéM🚀oé🚀o 🚀🚀é M ooMM é"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀éééMM ééo o oo🚀oo🚀MéoMMooMééMé🚀o🚀o🚀ééMoooMo oo" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xE66A6F5e07BCB29ECb48BD4F0C08E2872EBC6ef2" + }, + { + "type": "address", + "value": "0xE2F7bC16393d6f37dAAf0B0989B0C1e7d1Cf9b60" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xA3fD8271d4ef9266174fE409113C0aeeDE5b98bd" + }, + { + "type": "address", + "value": "0x9a8D4049A78D11D32684aB03B9ed7EdaE2C63B93" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "number", + "value": "5136" + } + ] + }, + { + "type": "number", + "value": "916422500711144337695906013851951176225583533211" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x68a540f159da95c9a54205da8aab2ffefeef4db4d6e5dfb6aa76b3960e99bf" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀🚀oo oééo 🚀" + }, + { + "type": "hexstring", + "value": "0xbe8a76b1fed40a7425eacbba7e6dc38fbae10b12ae88a5d82d21" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x04f82b1bf4a3041086d08cbd6e0acbc21ebfa1850b34baab95f08a76217635" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀M🚀éé🚀é🚀o🚀 oéo éo🚀éMMéoM ooo🚀M ooo🚀éMo" + }, + { + "type": "hexstring", + "value": "0x7a6135c771194724e7b4dca32976d7d22429c1b2bbb42eda40ed" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éooéMoM MMooMoMo🚀🚀M oéM🚀oé🚀o 🚀🚀é M ooMM é" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506106f6806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906104bc565b60405180910390f35b6100566102e3565b61005e6102e3565b60006040518060800160405280605781526020016105d1605791398252506001602082015261008b610323565b73e66a6f5e07bcb29ecb48bd4f0c08e2872ebc6ef2815273e2f7bc16393d6f37daaf0b0989b0c1e7d1cf9b6060208201526100c461033e565b604080516020808201835260008083529184528251608081018452606081850181815290820193845273a3fd8271d4ef9266174fe409113c0aeede5b98bd8252739a8d4049a78d11d32684ab03b9ed7edae2c63b938284015284518086018652600a8152689adede418753e13f3560b71b81850152905261141090925283015273a085ce61618695138f703cf51a1448c276400c9b9082015261016561038c565b6040805160808082018352606082840181815260008285018181527f68a540f159da95c9a54205da8aab2ffefeef4db4d6e5dfb6aa76b3960e99bf008652600160208088018290528851808a018a52601c81527f4d6f6f20c3a9f09f9a80f09f9a806f6f206fc3a9c3a96f20f09f9a8000000000818301529094527fbe8a76b1fed40a7425eacbba7e6dc38fbae10b12ae88a5d82d21000000000000909152948752855180850187528087018490529283018190527f04f82b1bf4a3041086d08cbd6e0acbc21ebfa1850b34baab95f08a76217635008352828201949094528451928301909452604e8083529093610673908301396040830152507f7a6135c771194724e7b4dca32976d7d22429c1b2bbb42eda40ed0000000000006060820152808260016020908102919091019190915260608085019390935260408086019490945285840194909452508151928301909152815260006040518060800160405280604b8152602001610628604b91398252506060820152919050565b604080516080810182526060815260006020820152908101610303610323565b815260200161031e6040518060200160405280606081525090565b905290565b604080516060810182526000808252602082015290810161031e5b6040805160a0810190915260006080820190815281908152604080516080810182526000808252602082810182905260609383018490529282015291019081526000602082015260400161031e5b60405180604001604052806002905b6040805160808101825260008082526020808301829052606093830184905292820152825260001990920191018161039b5790505090565b6000815180845260005b818110156103f9576020818501810151868301820152016103dd565b8181111561040b576000602083870101525b50601f01601f19169290920160200192915050565b60008260408082018460005b60028110156104935784830388528151608060ff198251168552602080830151151581870152868301518288880152610467838801826103d3565b60609485015165ffffffffffff19169790940196909652998a019991945050919091019060010161042c565b50909695505050505050565b60008151602084526104b460208501826103d3565b949350505050565b6000602080835283516080828501526104d860a08501826103d3565b905081850151604081151581870152808701519150601f19606081888603018189015260018060a01b03808551168652808786015116878701528385015194508184870152845151151582870152868501516080808801528181511660e088015281888201511661010088015284810151975060806101208801526105616101608801896103d3565b9083015161ffff16610140880152938501516001600160a01b03811660a088015293965061058c9050565b92830151848603605f190160c0860152926105a78685610420565b955080890151945050808786030160808801525050506105c7828261049f565b9594505050505056fe4d6f6f20c3a9f09f9a80f09f9a80c3a9c3a9c3a94d4d20c3a9c3a96f206f206f6ff09f9a806f6ff09f9a804dc3a96f4d4d6f6f4dc3a9c3a94dc3a9f09f9a806ff09f9a806ff09f9a80c3a9c3a94d6f6f6f4d6f20206f6f4d6f6f20c3a9f09f9a80c3a96f6fc3a94d6f4d204d4d6f6f4d6f4d6ff09f9a80f09f9a804d206fc3a94df09f9a806fc3a9f09f9a806f20f09f9a80f09f9a80c3a9204d206f6f4d4d20c3a94d6f6f20c3a9f09f9a804df09f9a80c3a9c3a9f09f9a80c3a9f09f9a806ff09f9a8020206fc3a96f2020c3a96ff09f9a80c3a94d4dc3a96f4d206f6f6ff09f9a804d206f6f6ff09f9a80c3a94d6fa2646970667358221220bf96fc29f7d153471aca79297c82af29b6c71f43afb32dbe259e706f53cf665e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_580e1474 {\n address s_0;\n address s_1;\n string s_2;\n uint16 s_3;\n }\n\n struct S_266cb0b9 {\n bytes31 s_0;\n bool s_1;\n string s_2;\n bytes26 s_3;\n }\n\n struct S_45df91f1 {\n S_c1053bda s_0;\n S_580e1474 s_1;\n uint160 s_2;\n S_266cb0b9[2] s_3;\n }\n\n struct S_2a96377d {\n address s_0;\n address s_1;\n S_45df91f1 s_2;\n }\n\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_5af0a372 {\n string s_0;\n bool s_1;\n S_2a96377d s_2;\n S_97fc4627 s_3;\n }\n\n function test () public pure returns (S_5af0a372 memory) {\n S_5af0a372 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀🚀éééMM ééo o oo🚀oo🚀MéoMMooMééMé🚀o🚀o🚀ééMoooMo oo\";\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n S_2a96377d memory r_2;\n {\n address r_2_0 = 0xE66A6F5e07BCB29ECb48BD4F0C08E2872EBC6ef2;\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0xE2F7bC16393d6f37dAAf0B0989B0C1e7d1Cf9b60;\n r_2.s_1 = r_2_1;\n }\n {\n S_45df91f1 memory r_2_2;\n {\n S_c1053bda memory r_2_2_0;\n {\n bool r_2_2_0_0 = false;\n r_2_2_0.s_0 = r_2_2_0_0;\n }\n r_2_2.s_0 = r_2_2_0;\n }\n {\n S_580e1474 memory r_2_2_1;\n {\n address r_2_2_1_0 = 0xA3fD8271d4ef9266174fE409113C0aeeDE5b98bd;\n r_2_2_1.s_0 = r_2_2_1_0;\n }\n {\n address r_2_2_1_1 = 0x9a8D4049A78D11D32684aB03B9ed7EdaE2C63B93;\n r_2_2_1.s_1 = r_2_2_1_1;\n }\n {\n string memory r_2_2_1_2 = unicode\"Moo é🚀\";\n r_2_2_1.s_2 = r_2_2_1_2;\n }\n {\n uint16 r_2_2_1_3 = 5136;\n r_2_2_1.s_3 = r_2_2_1_3;\n }\n r_2_2.s_1 = r_2_2_1;\n }\n {\n uint160 r_2_2_2 = 916422500711144337695906013851951176225583533211;\n r_2_2.s_2 = r_2_2_2;\n }\n {\n S_266cb0b9[2] memory r_2_2_3;\n {\n S_266cb0b9 memory r_2_2_3_0;\n {\n bytes31 r_2_2_3_0_0 = bytes31(0x68a540f159da95c9a54205da8aab2ffefeef4db4d6e5dfb6aa76b3960e99bf);\n r_2_2_3_0.s_0 = r_2_2_3_0_0;\n }\n {\n bool r_2_2_3_0_1 = true;\n r_2_2_3_0.s_1 = r_2_2_3_0_1;\n }\n {\n string memory r_2_2_3_0_2 = unicode\"Moo é🚀🚀oo oééo 🚀\";\n r_2_2_3_0.s_2 = r_2_2_3_0_2;\n }\n {\n bytes26 r_2_2_3_0_3 = bytes26(0xbe8a76b1fed40a7425eacbba7e6dc38fbae10b12ae88a5d82d21);\n r_2_2_3_0.s_3 = r_2_2_3_0_3;\n }\n r_2_2_3[0] = r_2_2_3_0;\n }\n {\n S_266cb0b9 memory r_2_2_3_1;\n {\n bytes31 r_2_2_3_1_0 = bytes31(0x04f82b1bf4a3041086d08cbd6e0acbc21ebfa1850b34baab95f08a76217635);\n r_2_2_3_1.s_0 = r_2_2_3_1_0;\n }\n {\n bool r_2_2_3_1_1 = true;\n r_2_2_3_1.s_1 = r_2_2_3_1_1;\n }\n {\n string memory r_2_2_3_1_2 = unicode\"Moo é🚀M🚀éé🚀é🚀o🚀 oéo éo🚀éMMéoM ooo🚀M ooo🚀éMo\";\n r_2_2_3_1.s_2 = r_2_2_3_1_2;\n }\n {\n bytes26 r_2_2_3_1_3 = bytes26(0x7a6135c771194724e7b4dca32976d7d22429c1b2bbb42eda40ed);\n r_2_2_3_1.s_3 = r_2_2_3_1_3;\n }\n r_2_2_3[1] = r_2_2_3_1;\n }\n r_2_2.s_3 = r_2_2_3;\n }\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n S_97fc4627 memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀éooéMoM MMooMoMo🚀🚀M oéM🚀oé🚀o 🚀🚀é M ooMM é\";\n r_3.s_0 = r_3_0;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a80f09f9a80c3a9c3a9c3a94d4d20c3a9c3a96f206f206f6ff09f9a806f6ff09f9a804dc3a96f4d4d6f6f4dc3a9c3a94dc3a9f09f9a806ff09f9a806ff09f9a80c3a9c3a94d6f6f6f4d6f20206f6f000000000000000000000000000000000000000000e66a6f5e07bcb29ecb48bd4f0c08e2872ebc6ef2000000000000000000000000e2f7bc16393d6f37daaf0b0989b0c1e7d1cf9b60000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000a085ce61618695138f703cf51a1448c276400c9b0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000a3fd8271d4ef9266174fe409113c0aeede5b98bd0000000000000000000000009a8d4049a78d11d32684ab03b9ed7edae2c63b9300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001410000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000010068a540f159da95c9a54205da8aab2ffefeef4db4d6e5dfb6aa76b3960e99bf0000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080be8a76b1fed40a7425eacbba7e6dc38fbae10b12ae88a5d82d21000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80f09f9a806f6f206fc3a9c3a96f20f09f9a800000000004f82b1bf4a3041086d08cbd6e0acbc21ebfa1850b34baab95f08a7621763500000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000807a6135c771194724e7b4dca32976d7d22429c1b2bbb42eda40ed000000000000000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a804df09f9a80c3a9c3a9f09f9a80c3a9f09f9a806ff09f9a8020206fc3a96f2020c3a96ff09f9a80c3a94d4dc3a96f4d206f6f6ff09f9a804d206f6f6ff09f9a80c3a94d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a80c3a96f6fc3a94d6f4d204d4d6f6f4d6f4d6ff09f9a80f09f9a804d206fc3a94df09f9a806fc3a9f09f9a806f20f09f9a80f09f9a80c3a9204d206f6f4d4d20c3a9000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,string,bytes15[3],(string,bool,bool,string,((uint232,(bytes1,bytes23,int24[],int8),bytes4),bytes22)))", + "type": "(string,string,bytes15[3],(string,bool,bool,string,((uint232,(bytes1,bytes23,int24[],int8),bytes4),bytes22)))", + "value": [ + "Moo é🚀 MMoo 🚀🚀Moéoooé🚀oo", + "Moo é🚀o🚀ééoéooMM o🚀", + [ + "0x02bdcd63671a6015c6a470b3217c65", + "0x33d5b2a8d974013b45f139c7a187a2", + "0xfaa10d7f8d18c7736a7d11609718b9" + ], + [ + "Moo é🚀 oo🚀M🚀🚀🚀éooM o🚀ééooM MMé", + true, + true, + "Moo é🚀é🚀é🚀o🚀éMooo🚀 🚀 M oéooé🚀é🚀M", + [ + [ + "4168637198087632516944368877967562832240128706135842842843529391293656", + [ + "0x3d", + "0x99ff1f514362883450e2301dd8111bee85712dc61120e9", + ["26467", "-4823089", "-2975968", "-70145"], + "-56" + ], + "0xe558938f" + ], + "0x17c6fafd5af4860c3cbc9a95ee66dd59194ac6608c5e" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 MMoo 🚀🚀Moéoooé🚀oo" + }, + { + "type": "string", + "value": "Moo é🚀o🚀ééoéooMM o🚀" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x02bdcd63671a6015c6a470b3217c65" + }, + { + "type": "hexstring", + "value": "0x33d5b2a8d974013b45f139c7a187a2" + }, + { + "type": "hexstring", + "value": "0xfaa10d7f8d18c7736a7d11609718b9" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oo🚀M🚀🚀🚀éooM o🚀ééooM MMé" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀é🚀é🚀o🚀éMooo🚀 🚀 M oéooé🚀é🚀M" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "4168637198087632516944368877967562832240128706135842842843529391293656" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x3d" + }, + { + "type": "hexstring", + "value": "0x99ff1f514362883450e2301dd8111bee85712dc61120e9" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "26467" + }, + { + "type": "number", + "value": "-4823089" + }, + { + "type": "number", + "value": "-2975968" + }, + { + "type": "number", + "value": "-70145" + } + ] + }, + { + "type": "number", + "value": "-56" + } + ] + }, + { + "type": "hexstring", + "value": "0xe558938f" + } + ] + }, + { + "type": "hexstring", + "value": "0x17c6fafd5af4860c3cbc9a95ee66dd59194ac6608c5e" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506106f8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061056d565b60405180910390f35b610056610318565b61005e610318565b6000604051806060016040528060298152602001610665602991398252506040805180820190915260208082527f4d6f6f20c3a9f09f9a806ff09f9a80c3a9c3a96fc3a96f6f4d4d206ff09f9a80818301528201526100bb61034b565b6e02bdcd63671a6015c6a470b3217c6560881b81526e19ead9546cba009da2f89ce3d0c3d160891b60208201526efaa10d7f8d18c7736a7d11609718b960881b60408083019190915282015261010f610369565b600060405180606001604052806035815260200161068e6035913982525060016020808301829052604080840192909252815160608101909252603f8083526000929161062690830139606083015250610167610398565b61016f6103b8565b7c9a9f93b127ecfe16bd94bf67bab81dc024565ae8afeb13247c69e2c4d88152604080516080808201835260608284018190526000908301819052603d60f81b83527f99ff1f514362883450e2301dd8111bee85712dc61120e90000000000000000006020808501919091528451600480825260a08201909652939491939290830190803683370190505090506000616763905080826000815181106102175761021761060f565b602002602001019060020b908160020b815250505060006249983019905080826001815181106102495761024961060f565b600292830b60209182029290920101528251622d68df1992508291849181106102745761027461060f565b602002602001019060020b908160020b815250505060006201120019905080826003815181106102a6576102a661060f565b60029290920b6020928302919091018201526040808501939093526037196060808601919091528582019490945263e558938f60e01b9285019290925250918352750be37d7ead7a43061e5e4d4af7336eac8ca56330462f60511b918301919091526080830191909152820152919050565b6040518060800160405280606081526020016060815260200161033961034b565b8152602001610346610369565b905290565b60405180606001604052806003906020820280368337509192915050565b6040518060a0016040528060608152602001600015158152602001600015158152602001606081526020016103465b60405180604001604052806103ab6103b8565b8152600060209091015290565b60408051606080820183526000808352835160808101855281815260208181018390529481018390529182015290918201906103ab565b6000815180845260005b81811015610415576020818501810151868301820152016103f9565b81811115610427576000602083870101525b50601f01601f19169290920160200192915050565b6000815160a0845261045160a08501826103ef565b90506020808401511515818601526040808501511515818701526060850151868403606088015261048284826103ef565b6080878101518983038a830152805185845280516001600160e81b0316868501528681015160608086015280516001600160f81b03191660a08601528088015168ffffffffffffffffff191660c08601528087015160e0860194909452835161012086018190529498509194509290918601906000906101408901905b8083101561052257835160020b82529288019260019290920191908801906104ff565b506060840151935061053a6101008a018560000b9052565b95909301516001600160e01b031916608088015250505082015169ffffffffffffffffffff191691909201529392505050565b60006020808352835160c08285015261058960e08501826103ef565b905081850151601f19808684030160408701526105a683836103ef565b9250604087015191506060860160005b60038110156105e757835170ffffffffffffffffffffffffffffffffff1916825292850192908501906001016105b6565b505060608701519350808684030160c08701525050610606818361043c565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80c3a9f09f9a80c3a9f09f9a806ff09f9a80c3a94d6f6f6ff09f9a8020f09f9a80204d206fc3a96f6fc3a9f09f9a80c3a9f09f9a804d4d6f6f20c3a9f09f9a8020204d4d6f6f2020f09f9a80f09f9a804d6fc3a96f6f6fc3a9f09f9a806f6f4d6f6f20c3a9f09f9a80206f6ff09f9a804df09f9a80f09f9a80f09f9a80c3a96f6f4d206ff09f9a80c3a9c3a96f6f4d204d4dc3a9a26469706673582212202988a57d23cb119a3d5f03b1f86b5b6c39ae56df0cb292247fdc32b0298e593c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_75a4476a {\n bytes1 s_0;\n bytes23 s_1;\n int24[] s_2;\n int8 s_3;\n }\n\n struct S_bf4fe9a4 {\n uint232 s_0;\n S_75a4476a s_1;\n bytes4 s_2;\n }\n\n struct S_5e66851a {\n S_bf4fe9a4 s_0;\n bytes22 s_1;\n }\n\n struct S_73687d60 {\n string s_0;\n bool s_1;\n bool s_2;\n string s_3;\n S_5e66851a s_4;\n }\n\n struct S_bca93cb8 {\n string s_0;\n string s_1;\n bytes15[3] s_2;\n S_73687d60 s_3;\n }\n\n function test () public pure returns (S_bca93cb8 memory) {\n S_bca93cb8 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀 MMoo 🚀🚀Moéoooé🚀oo\";\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀o🚀ééoéooMM o🚀\";\n r.s_1 = r_1;\n }\n {\n bytes15[3] memory r_2;\n {\n bytes15 r_2_0 = bytes15(0x02bdcd63671a6015c6a470b3217c65);\n r_2[0] = r_2_0;\n }\n {\n bytes15 r_2_1 = bytes15(0x33d5b2a8d974013b45f139c7a187a2);\n r_2[1] = r_2_1;\n }\n {\n bytes15 r_2_2 = bytes15(0xfaa10d7f8d18c7736a7d11609718b9);\n r_2[2] = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n S_73687d60 memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀 oo🚀M🚀🚀🚀éooM o🚀ééooM MMé\";\n r_3.s_0 = r_3_0;\n }\n {\n bool r_3_1 = true;\n r_3.s_1 = r_3_1;\n }\n {\n bool r_3_2 = true;\n r_3.s_2 = r_3_2;\n }\n {\n string memory r_3_3 = unicode\"Moo é🚀é🚀é🚀o🚀éMooo🚀 🚀 M oéooé🚀é🚀M\";\n r_3.s_3 = r_3_3;\n }\n {\n S_5e66851a memory r_3_4;\n {\n S_bf4fe9a4 memory r_3_4_0;\n {\n uint232 r_3_4_0_0 = 4168637198087632516944368877967562832240128706135842842843529391293656;\n r_3_4_0.s_0 = r_3_4_0_0;\n }\n {\n S_75a4476a memory r_3_4_0_1;\n {\n bytes1 r_3_4_0_1_0 = bytes1(0x3d);\n r_3_4_0_1.s_0 = r_3_4_0_1_0;\n }\n {\n bytes23 r_3_4_0_1_1 = bytes23(0x99ff1f514362883450e2301dd8111bee85712dc61120e9);\n r_3_4_0_1.s_1 = r_3_4_0_1_1;\n }\n {\n int24[] memory r_3_4_0_1_2 = new int24[](4);\n {\n int24 r_3_4_0_1_2_0 = 26467;\n r_3_4_0_1_2[0] = r_3_4_0_1_2_0;\n }\n {\n int24 r_3_4_0_1_2_1 = -4823089;\n r_3_4_0_1_2[1] = r_3_4_0_1_2_1;\n }\n {\n int24 r_3_4_0_1_2_2 = -2975968;\n r_3_4_0_1_2[2] = r_3_4_0_1_2_2;\n }\n {\n int24 r_3_4_0_1_2_3 = -70145;\n r_3_4_0_1_2[3] = r_3_4_0_1_2_3;\n }\n r_3_4_0_1.s_2 = r_3_4_0_1_2;\n }\n {\n int8 r_3_4_0_1_3 = -56;\n r_3_4_0_1.s_3 = r_3_4_0_1_3;\n }\n r_3_4_0.s_1 = r_3_4_0_1;\n }\n {\n bytes4 r_3_4_0_2 = bytes4(0xe558938f);\n r_3_4_0.s_2 = r_3_4_0_2;\n }\n r_3_4.s_0 = r_3_4_0;\n }\n {\n bytes22 r_3_4_1 = bytes22(0x17c6fafd5af4860c3cbc9a95ee66dd59194ac6608c5e);\n r_3_4.s_1 = r_3_4_1;\n }\n r_3.s_4 = r_3_4;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012002bdcd63671a6015c6a470b3217c65000000000000000000000000000000000033d5b2a8d974013b45f139c7a187a20000000000000000000000000000000000faa10d7f8d18c7736a7d11609718b90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000294d6f6f20c3a9f09f9a8020204d4d6f6f2020f09f9a80f09f9a804d6fc3a96f6f6fc3a9f09f9a806f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000204d6f6f20c3a9f09f9a806ff09f9a80c3a9c3a96fc3a96f6f4d4d206ff09f9a8000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000354d6f6f20c3a9f09f9a80206f6ff09f9a804df09f9a80f09f9a80f09f9a80c3a96f6f4d206ff09f9a80c3a9c3a96f6f4d204d4dc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a80c3a9f09f9a80c3a9f09f9a806ff09f9a80c3a94d6f6f6ff09f9a8020f09f9a80204d206fc3a96f6fc3a9f09f9a80c3a9f09f9a804d00000000000000000000000000000000000000000000000000000000000000004017c6fafd5af4860c3cbc9a95ee66dd59194ac6608c5e000000000000000000000000009a9f93b127ecfe16bd94bf67bab81dc024565ae8afeb13247c69e2c4d80000000000000000000000000000000000000000000000000000000000000060e558938f000000000000000000000000000000000000000000000000000000003d0000000000000000000000000000000000000000000000000000000000000099ff1f514362883450e2301dd8111bee85712dc61120e90000000000000000000000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000006763ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb667cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd29720fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeedff" + }, + { + "name": "random-((((bytes26),bool,bool[1],address),bytes4,string,(bool,string[],bytes9[4],(bool,address,address)),bool))[3]", + "type": "((((bytes26),bool,bool[1],address),bytes4,string,(bool,string[],bytes9[4],(bool,address,address)),bool))[3]", + "value": [ + [ + [ + [ + ["0x76c4bdcb4fd1c75aabbc5ac6ad53d650fdf7b457bef229fbc0c5"], + true, + [true], + "0xD724039edE2c586203762938737aE822b3825c2F" + ], + "0x4f5191d1", + "Moo é🚀", + [ + false, + [], + [ + "0xb595d342d7a9f75a6f", + "0x1c5087f9da64bb3f71", + "0x423e4dad6e648ff95e", + "0x0507b315ef15cf5d99" + ], + [ + false, + "0x3Cf794E454EE2605c510392082537D27e8f474c2", + "0x679A8B72CC0912E276283bc2d2a21f39Ba337CE4" + ] + ], + true + ] + ], + [ + [ + [ + ["0x079222c9d34106605724add983ecf8c33598312ecb3efce19704"], + true, + [false], + "0xd8b545fB3AEd8D5F7fCCDb4e7806DE727607F38e" + ], + "0x2061a03b", + "Moo é🚀 oM🚀🚀MéMMo🚀M Mo🚀oo🚀oo🚀éoo🚀🚀Mooo é", + [ + false, + [ + "Moo é🚀o oMoMéoMoM🚀o🚀oooMooMo🚀 ooM 🚀M oM 🚀MMoé🚀ééM", + "Moo é🚀oooéMo éoéoo é Méooé o Mooo o M oMooo 🚀" + ], + [ + "0x3e79089c264603a4b9", + "0xaadf1e6522080e6b27", + "0xc2e2f6cf75fb54b916", + "0x7ae9d40b0f3ae8ce13" + ], + [ + false, + "0x742920762919f76c5e92Bb424c9c651eba09bfFb", + "0x1B8f25d93bD2b6A441a1fB6D2aA96f8cC2C0fc99" + ] + ], + true + ] + ], + [ + [ + [ + ["0x0af1946841d7f1eecaea8734f48956eb0d3fef715a2a528c0ca7"], + false, + [false], + "0x289132918e66C936b66DF052ffDD4D247b4e488D" + ], + "0xfb69f6d0", + "Moo é🚀🚀🚀oé🚀 M🚀éoéM 🚀🚀ééoo ooooooo🚀 🚀o éé🚀 o🚀M MMoMoéo", + [ + false, + [ + "Moo é🚀 oo🚀🚀éé🚀oM🚀é🚀🚀éMM o🚀oMoMoéMMM 🚀o🚀 M🚀 🚀o🚀éo🚀o 🚀 MM🚀o o", + "Moo é🚀🚀oéoMooooéMoo", + "Moo é🚀o🚀 oMM🚀oo🚀oooéoo ooé é🚀o🚀Méoo" + ], + [ + "0x6618497727a3e0a890", + "0x1e244d1834acf1937d", + "0xc0b059c9c26dd5b2a1", + "0x1fe55567386848cce8" + ], + [ + true, + "0xF9EDfD91f2E3302eA48bD0c6bEbFF5b0bB0B2a77", + "0x6b3f4f46D3dd573f44585CdC5BbFa411FC78260A" + ] + ], + true + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x76c4bdcb4fd1c75aabbc5ac6ad53d650fdf7b457bef229fbc0c5" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0xD724039edE2c586203762938737aE822b3825c2F" + } + ] + }, + { + "type": "hexstring", + "value": "0x4f5191d1" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xb595d342d7a9f75a6f" + }, + { + "type": "hexstring", + "value": "0x1c5087f9da64bb3f71" + }, + { + "type": "hexstring", + "value": "0x423e4dad6e648ff95e" + }, + { + "type": "hexstring", + "value": "0x0507b315ef15cf5d99" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x3Cf794E454EE2605c510392082537D27e8f474c2" + }, + { + "type": "address", + "value": "0x679A8B72CC0912E276283bc2d2a21f39Ba337CE4" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x079222c9d34106605724add983ecf8c33598312ecb3efce19704" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0xd8b545fB3AEd8D5F7fCCDb4e7806DE727607F38e" + } + ] + }, + { + "type": "hexstring", + "value": "0x2061a03b" + }, + { + "type": "string", + "value": "Moo é🚀 oM🚀🚀MéMMo🚀M Mo🚀oo🚀oo🚀éoo🚀🚀Mooo é" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o oMoMéoMoM🚀o🚀oooMooMo🚀 ooM 🚀M oM 🚀MMoé🚀ééM" + }, + { + "type": "string", + "value": "Moo é🚀oooéMo éoéoo é Méooé o Mooo o M oMooo 🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3e79089c264603a4b9" + }, + { + "type": "hexstring", + "value": "0xaadf1e6522080e6b27" + }, + { + "type": "hexstring", + "value": "0xc2e2f6cf75fb54b916" + }, + { + "type": "hexstring", + "value": "0x7ae9d40b0f3ae8ce13" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x742920762919f76c5e92Bb424c9c651eba09bfFb" + }, + { + "type": "address", + "value": "0x1B8f25d93bD2b6A441a1fB6D2aA96f8cC2C0fc99" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x0af1946841d7f1eecaea8734f48956eb0d3fef715a2a528c0ca7" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x289132918e66C936b66DF052ffDD4D247b4e488D" + } + ] + }, + { + "type": "hexstring", + "value": "0xfb69f6d0" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀oé🚀 M🚀éoéM 🚀🚀ééoo ooooooo🚀 🚀o éé🚀 o🚀M MMoMoéo" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oo🚀🚀éé🚀oM🚀é🚀🚀éMM o🚀oMoMoéMMM 🚀o🚀 M🚀 🚀o🚀éo🚀o 🚀 MM🚀o o" + }, + { + "type": "string", + "value": "Moo é🚀🚀oéoMooooéMoo" + }, + { + "type": "string", + "value": "Moo é🚀o🚀 oMM🚀oo🚀oooéoo ooé é🚀o🚀Méoo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x6618497727a3e0a890" + }, + { + "type": "hexstring", + "value": "0x1e244d1834acf1937d" + }, + { + "type": "hexstring", + "value": "0xc0b059c9c26dd5b2a1" + }, + { + "type": "hexstring", + "value": "0x1fe55567386848cce8" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xF9EDfD91f2E3302eA48bD0c6bEbFF5b0bB0B2a77" + }, + { + "type": "address", + "value": "0x6b3f4f46D3dd573f44585CdC5BbFa411FC78260A" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610c46806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610905565b60405180910390f35b6100566106ad565b61005e6106ad565b6100666106da565b61006e6106f2565b61007661072d565b6040805160208082019092527f76c4bdcb4fd1c75aabbc5ac6ad53d650fdf7b457bef229fbc0c5000000000000815282526001908201526100b561074e565b6001815260408281019190915273d724039ede2c586203762938737ae822b3825c2f6060830152908252634f5191d160e01b60208381019190915281518083018352600a8152689adede418753e13f3560b71b918101919091529082015261011b61076c565b6000808252604080518281526020810190915281610149565b60608152602001906001900390816101345790505b506020830152506101586107af565b68b595d342d7a9f75a6f60b81b8152681c5087f9da64bb3f7160b81b60208083019190915268211f26d6b73247fcaf60b91b604080840191909152680507b315ef15cf5d9960b81b606080850191909152848201939093528051808401825260008152733cf794e454ee2605c510392082537d27e8f474c29281019290925273679a8b72cc0912e276283bc2d2a21f39ba337ce49082015282820152820152600160808201528152815261020a6106da565b6102126106f2565b61021a61072d565b6040805160208082019092527f079222c9d34106605724add983ecf8c33598312ecb3efce197040000000000008152825260019082015261025961074e565b600080825260408381019290925273d8b545fb3aed8d5f7fccdb4e7806de727607f38e6060840152918352632061a03b60e01b602084810191909152815160808101909252604680835290610ad1908301396040830152506102b961076c565b60008082526040805160028082526060820190925290816020015b60608152602001906001900390816102d457905050905060006040518060800160405280604c8152602001610b8a604c91399050808260008151811061031c5761031c610a19565b60200260200101819052505060006040518060600160405280603b8152602001610bd6603b91399050808260018151811061035957610359610a19565b602002602001018190525050808260200181905250506103776107af565b683e79089c264603a4b960b81b815268aadf1e6522080e6b2760b81b6020808301919091526861717b67bafdaa5c8b60b91b604080840191909152687ae9d40b0f3ae8ce1360b81b60608085019190915284820193909352805180840182526000815273742920762919f76c5e92bb424c9c651eba09bffb81840152731b8f25d93bd2b6a441a1fb6d2aa96f8cc2c0fc999181019190915283830152908301919091526001608083015290825282015261042f6106da565b6104376106f2565b61043f61072d565b6040805160208082019092527f0af1946841d7f1eecaea8734f48956eb0d3fef715a2a528c0ca70000000000008152825260009082015261047e61074e565b600080825260408381019290925273289132918e66c936b66df052ffdd4d247b4e488d6060840152918352630fb69f6d60e41b602084810191909152815160a08101909252606480835290610a30908301396040830152506104de61076c565b60008082526040805160038082526080820190925290816020015b60608152602001906001900390816104f957905050905060006040518060a0016040528060738152602001610b17607391399050808260008151811061054157610541610a19565b60200260200101819052505060006040518060400160405280601c81526020017f4d6f6f20c3a9f09f9a80f09f9a806fc3a96f4d6f6f6f6fc3a94d6f6f000000008152509050808260018151811061059b5761059b610a19565b60200260200101819052505060006040518060600160405280603d8152602001610a94603d9139905080826002815181106105d8576105d8610a19565b602002602001018190525050808260200181905250506105f66107af565b6806618497727a3e0a8960bc1b8152681e244d1834acf1937d60b81b60208083019190915268c0b059c9c26dd5b2a160b81b6040808401919091526803fcaaace70d09199d60bb1b6060808501919091528482019390935280518084018252600180825273f9edfd91f2e3302ea48bd0c6bebff5b0bb0b2a7793820193909352736b3f4f46d3dd573f44585cdc5bbfa411fc78260a8183015284840152918401929092526080830191909152908252820152919050565b60405180606001604052806003905b6106c46106da565b8152602001906001900390816106bc5790505090565b60405180602001604052806106ed6106f2565b905290565b6040518060a0016040528061070561072d565b8152600060208201526060604082018190520161072061076c565b8152600060209091015290565b6040805160a081018252600060808201818152825260208201529081016107205b60405180602001604052806001906020820280368337509192915050565b60408051608081018252600081526060602082015290810161078c6107af565b815260408051606081018252600080825260208281018290529282015291015290565b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b818110156107f3576020818501810151868301820152016107d7565b81811115610805576000602083870101525b50601f01601f19169290920160200192915050565b8060005b60048110156108475781516001600160b81b03191684526020938401939091019060010161081e565b50505050565b805115158252602080820151610120828501819052815190850181905260009261014080870193600584901b88019091019290820190855b818110156108b45761013f198986030186526108a28584516107cd565b95840195945091830191600101610885565b50505050604084015191506108cc604086018361081a565b60608401518051151560c087015260208101516001600160a01b0390811660e08801526040820151166101008701529150949350505050565b602080825260009060808382018185018685805b6003811015610a0b57601f19808a8603018652835151888652805165ffffffffffff19815151168a880152898101516040811515818a01528083015191506060808a01885b600181101561097d57845115158252938e0193908e019060010161095e565b5050928301516001600160a01b03168b8a01528b8401516001600160e01b0319811660a08b01529281850151935061010092508260c08b01526109c46101208b01856107cd565b935080850151915050848984030160e08a01526109e1838261084d565b938b01518015158a8401529394506109f69050565b50505094870194935091860191600101610919565b509198975050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a80f09f9a806fc3a9f09f9a80204df09f9a80c3a96fc3a94d20f09f9a80f09f9a80c3a9c3a96f6f20206f6f6f6f6f6f6ff09f9a8020f09f9a806f2020c3a9c3a9f09f9a80202020206ff09f9a804d204d4d6f4d6fc3a96f4d6f6f20c3a9f09f9a806ff09f9a8020206f4d4df09f9a806f6ff09f9a806f6f6fc3a96f6f20206f6fc3a92020c3a9f09f9a806ff09f9a804dc3a96f6f4d6f6f20c3a9f09f9a80206f4df09f9a80f09f9a804dc3a94d4d6ff09f9a804d204d6ff09f9a806f6ff09f9a806f6ff09f9a80c3a96f6ff09f9a80f09f9a804d6f6f6f20c3a94d6f6f20c3a9f09f9a80206f6ff09f9a80f09f9a80c3a9c3a9f09f9a806f4df09f9a80c3a9f09f9a80f09f9a80c3a94d4d206ff09f9a806f4d6f4d6fc3a94d4d4d20f09f9a806ff09f9a8020204df09f9a8020f09f9a806ff09f9a80c3a96ff09f9a806f20f09f9a80204d4df09f9a806f206f4d6f6f20c3a9f09f9a806f206f4d6f4dc3a96f4d6f4df09f9a806ff09f9a806f6f6f4d6f6f4d6ff09f9a80206f6f4d20f09f9a804d206f4d2020f09f9a804d4d6fc3a9f09f9a80c3a9c3a94d4d6f6f20c3a9f09f9a806f6f6fc3a94d6f2020c3a96fc3a96f6f20c3a9204dc3a96f6fc3a9206f204d6f6f6f206f204d206f4d6f6f6f20f09f9a80a2646970667358221220b5be95caa58bdcea526302991308c99dfd403f4adaf64ea29198bec61ef3afbe64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_da4d5856 {\n bytes26 s_0;\n }\n\n struct S_d25c3bab {\n S_da4d5856 s_0;\n bool s_1;\n bool[1] s_2;\n address s_3;\n }\n\n struct S_2f7d42be {\n bool s_0;\n address s_1;\n address s_2;\n }\n\n struct S_4506ab90 {\n bool s_0;\n string[] s_1;\n bytes9[4] s_2;\n S_2f7d42be s_3;\n }\n\n struct S_dc160b72 {\n S_d25c3bab s_0;\n bytes4 s_1;\n string s_2;\n S_4506ab90 s_3;\n bool s_4;\n }\n\n struct S_c0cbfe32 {\n S_dc160b72 s_0;\n }\n\n function test () public pure returns (S_c0cbfe32[3] memory) {\n S_c0cbfe32[3] memory r;\n {\n S_c0cbfe32 memory r_0;\n {\n S_dc160b72 memory r_0_0;\n {\n S_d25c3bab memory r_0_0_0;\n {\n S_da4d5856 memory r_0_0_0_0;\n {\n bytes26 r_0_0_0_0_0 = bytes26(0x76c4bdcb4fd1c75aabbc5ac6ad53d650fdf7b457bef229fbc0c5);\n r_0_0_0_0.s_0 = r_0_0_0_0_0;\n }\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n bool r_0_0_0_1 = true;\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n bool[1] memory r_0_0_0_2;\n {\n bool r_0_0_0_2_0 = true;\n r_0_0_0_2[0] = r_0_0_0_2_0;\n }\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n {\n address r_0_0_0_3 = 0xD724039edE2c586203762938737aE822b3825c2F;\n r_0_0_0.s_3 = r_0_0_0_3;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n bytes4 r_0_0_1 = bytes4(0x4f5191d1);\n r_0_0.s_1 = r_0_0_1;\n }\n {\n string memory r_0_0_2 = unicode\"Moo é🚀\";\n r_0_0.s_2 = r_0_0_2;\n }\n {\n S_4506ab90 memory r_0_0_3;\n {\n bool r_0_0_3_0 = false;\n r_0_0_3.s_0 = r_0_0_3_0;\n }\n {\n string[] memory r_0_0_3_1 = new string[](0);\n r_0_0_3.s_1 = r_0_0_3_1;\n }\n {\n bytes9[4] memory r_0_0_3_2;\n {\n bytes9 r_0_0_3_2_0 = bytes9(0xb595d342d7a9f75a6f);\n r_0_0_3_2[0] = r_0_0_3_2_0;\n }\n {\n bytes9 r_0_0_3_2_1 = bytes9(0x1c5087f9da64bb3f71);\n r_0_0_3_2[1] = r_0_0_3_2_1;\n }\n {\n bytes9 r_0_0_3_2_2 = bytes9(0x423e4dad6e648ff95e);\n r_0_0_3_2[2] = r_0_0_3_2_2;\n }\n {\n bytes9 r_0_0_3_2_3 = bytes9(0x0507b315ef15cf5d99);\n r_0_0_3_2[3] = r_0_0_3_2_3;\n }\n r_0_0_3.s_2 = r_0_0_3_2;\n }\n {\n S_2f7d42be memory r_0_0_3_3;\n {\n bool r_0_0_3_3_0 = false;\n r_0_0_3_3.s_0 = r_0_0_3_3_0;\n }\n {\n address r_0_0_3_3_1 = 0x3Cf794E454EE2605c510392082537D27e8f474c2;\n r_0_0_3_3.s_1 = r_0_0_3_3_1;\n }\n {\n address r_0_0_3_3_2 = 0x679A8B72CC0912E276283bc2d2a21f39Ba337CE4;\n r_0_0_3_3.s_2 = r_0_0_3_3_2;\n }\n r_0_0_3.s_3 = r_0_0_3_3;\n }\n r_0_0.s_3 = r_0_0_3;\n }\n {\n bool r_0_0_4 = true;\n r_0_0.s_4 = r_0_0_4;\n }\n r_0.s_0 = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_c0cbfe32 memory r_1;\n {\n S_dc160b72 memory r_1_0;\n {\n S_d25c3bab memory r_1_0_0;\n {\n S_da4d5856 memory r_1_0_0_0;\n {\n bytes26 r_1_0_0_0_0 = bytes26(0x079222c9d34106605724add983ecf8c33598312ecb3efce19704);\n r_1_0_0_0.s_0 = r_1_0_0_0_0;\n }\n r_1_0_0.s_0 = r_1_0_0_0;\n }\n {\n bool r_1_0_0_1 = true;\n r_1_0_0.s_1 = r_1_0_0_1;\n }\n {\n bool[1] memory r_1_0_0_2;\n {\n bool r_1_0_0_2_0 = false;\n r_1_0_0_2[0] = r_1_0_0_2_0;\n }\n r_1_0_0.s_2 = r_1_0_0_2;\n }\n {\n address r_1_0_0_3 = 0xd8b545fB3AEd8D5F7fCCDb4e7806DE727607F38e;\n r_1_0_0.s_3 = r_1_0_0_3;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bytes4 r_1_0_1 = bytes4(0x2061a03b);\n r_1_0.s_1 = r_1_0_1;\n }\n {\n string memory r_1_0_2 = unicode\"Moo é🚀 oM🚀🚀MéMMo🚀M Mo🚀oo🚀oo🚀éoo🚀🚀Mooo é\";\n r_1_0.s_2 = r_1_0_2;\n }\n {\n S_4506ab90 memory r_1_0_3;\n {\n bool r_1_0_3_0 = false;\n r_1_0_3.s_0 = r_1_0_3_0;\n }\n {\n string[] memory r_1_0_3_1 = new string[](2);\n {\n string memory r_1_0_3_1_0 = unicode\"Moo é🚀o oMoMéoMoM🚀o🚀oooMooMo🚀 ooM 🚀M oM 🚀MMoé🚀ééM\";\n r_1_0_3_1[0] = r_1_0_3_1_0;\n }\n {\n string memory r_1_0_3_1_1 = unicode\"Moo é🚀oooéMo éoéoo é Méooé o Mooo o M oMooo 🚀\";\n r_1_0_3_1[1] = r_1_0_3_1_1;\n }\n r_1_0_3.s_1 = r_1_0_3_1;\n }\n {\n bytes9[4] memory r_1_0_3_2;\n {\n bytes9 r_1_0_3_2_0 = bytes9(0x3e79089c264603a4b9);\n r_1_0_3_2[0] = r_1_0_3_2_0;\n }\n {\n bytes9 r_1_0_3_2_1 = bytes9(0xaadf1e6522080e6b27);\n r_1_0_3_2[1] = r_1_0_3_2_1;\n }\n {\n bytes9 r_1_0_3_2_2 = bytes9(0xc2e2f6cf75fb54b916);\n r_1_0_3_2[2] = r_1_0_3_2_2;\n }\n {\n bytes9 r_1_0_3_2_3 = bytes9(0x7ae9d40b0f3ae8ce13);\n r_1_0_3_2[3] = r_1_0_3_2_3;\n }\n r_1_0_3.s_2 = r_1_0_3_2;\n }\n {\n S_2f7d42be memory r_1_0_3_3;\n {\n bool r_1_0_3_3_0 = false;\n r_1_0_3_3.s_0 = r_1_0_3_3_0;\n }\n {\n address r_1_0_3_3_1 = 0x742920762919f76c5e92Bb424c9c651eba09bfFb;\n r_1_0_3_3.s_1 = r_1_0_3_3_1;\n }\n {\n address r_1_0_3_3_2 = 0x1B8f25d93bD2b6A441a1fB6D2aA96f8cC2C0fc99;\n r_1_0_3_3.s_2 = r_1_0_3_3_2;\n }\n r_1_0_3.s_3 = r_1_0_3_3;\n }\n r_1_0.s_3 = r_1_0_3;\n }\n {\n bool r_1_0_4 = true;\n r_1_0.s_4 = r_1_0_4;\n }\n r_1.s_0 = r_1_0;\n }\n r[1] = r_1;\n }\n {\n S_c0cbfe32 memory r_2;\n {\n S_dc160b72 memory r_2_0;\n {\n S_d25c3bab memory r_2_0_0;\n {\n S_da4d5856 memory r_2_0_0_0;\n {\n bytes26 r_2_0_0_0_0 = bytes26(0x0af1946841d7f1eecaea8734f48956eb0d3fef715a2a528c0ca7);\n r_2_0_0_0.s_0 = r_2_0_0_0_0;\n }\n r_2_0_0.s_0 = r_2_0_0_0;\n }\n {\n bool r_2_0_0_1 = false;\n r_2_0_0.s_1 = r_2_0_0_1;\n }\n {\n bool[1] memory r_2_0_0_2;\n {\n bool r_2_0_0_2_0 = false;\n r_2_0_0_2[0] = r_2_0_0_2_0;\n }\n r_2_0_0.s_2 = r_2_0_0_2;\n }\n {\n address r_2_0_0_3 = 0x289132918e66C936b66DF052ffDD4D247b4e488D;\n r_2_0_0.s_3 = r_2_0_0_3;\n }\n r_2_0.s_0 = r_2_0_0;\n }\n {\n bytes4 r_2_0_1 = bytes4(0xfb69f6d0);\n r_2_0.s_1 = r_2_0_1;\n }\n {\n string memory r_2_0_2 = unicode\"Moo é🚀🚀🚀oé🚀 M🚀éoéM 🚀🚀ééoo ooooooo🚀 🚀o éé🚀 o🚀M MMoMoéo\";\n r_2_0.s_2 = r_2_0_2;\n }\n {\n S_4506ab90 memory r_2_0_3;\n {\n bool r_2_0_3_0 = false;\n r_2_0_3.s_0 = r_2_0_3_0;\n }\n {\n string[] memory r_2_0_3_1 = new string[](3);\n {\n string memory r_2_0_3_1_0 = unicode\"Moo é🚀 oo🚀🚀éé🚀oM🚀é🚀🚀éMM o🚀oMoMoéMMM 🚀o🚀 M🚀 🚀o🚀éo🚀o 🚀 MM🚀o o\";\n r_2_0_3_1[0] = r_2_0_3_1_0;\n }\n {\n string memory r_2_0_3_1_1 = unicode\"Moo é🚀🚀oéoMooooéMoo\";\n r_2_0_3_1[1] = r_2_0_3_1_1;\n }\n {\n string memory r_2_0_3_1_2 = unicode\"Moo é🚀o🚀 oMM🚀oo🚀oooéoo ooé é🚀o🚀Méoo\";\n r_2_0_3_1[2] = r_2_0_3_1_2;\n }\n r_2_0_3.s_1 = r_2_0_3_1;\n }\n {\n bytes9[4] memory r_2_0_3_2;\n {\n bytes9 r_2_0_3_2_0 = bytes9(0x6618497727a3e0a890);\n r_2_0_3_2[0] = r_2_0_3_2_0;\n }\n {\n bytes9 r_2_0_3_2_1 = bytes9(0x1e244d1834acf1937d);\n r_2_0_3_2[1] = r_2_0_3_2_1;\n }\n {\n bytes9 r_2_0_3_2_2 = bytes9(0xc0b059c9c26dd5b2a1);\n r_2_0_3_2[2] = r_2_0_3_2_2;\n }\n {\n bytes9 r_2_0_3_2_3 = bytes9(0x1fe55567386848cce8);\n r_2_0_3_2[3] = r_2_0_3_2_3;\n }\n r_2_0_3.s_2 = r_2_0_3_2;\n }\n {\n S_2f7d42be memory r_2_0_3_3;\n {\n bool r_2_0_3_3_0 = true;\n r_2_0_3_3.s_0 = r_2_0_3_3_0;\n }\n {\n address r_2_0_3_3_1 = 0xF9EDfD91f2E3302eA48bD0c6bEbFF5b0bB0B2a77;\n r_2_0_3_3.s_1 = r_2_0_3_3_1;\n }\n {\n address r_2_0_3_3_2 = 0x6b3f4f46D3dd573f44585CdC5BbFa411FC78260A;\n r_2_0_3_3.s_2 = r_2_0_3_3_2;\n }\n r_2_0_3.s_3 = r_2_0_3_3;\n }\n r_2_0.s_3 = r_2_0_3;\n }\n {\n bool r_2_0_4 = true;\n r_2_0.s_4 = r_2_0_4;\n }\n r_2.s_0 = r_2_0;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000002076c4bdcb4fd1c75aabbc5ac6ad53d650fdf7b457bef229fbc0c500000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d724039ede2c586203762938737ae822b3825c2f4f5191d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120b595d342d7a9f75a6f00000000000000000000000000000000000000000000001c5087f9da64bb3f710000000000000000000000000000000000000000000000423e4dad6e648ff95e00000000000000000000000000000000000000000000000507b315ef15cf5d99000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003cf794e454ee2605c510392082537d27e8f474c2000000000000000000000000679a8b72cc0912e276283bc2d2a21f39ba337ce400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020079222c9d34106605724add983ecf8c33598312ecb3efce1970400000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8b545fb3aed8d5f7fccdb4e7806de727607f38e2061a03b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a80206f4df09f9a80f09f9a804dc3a94d4d6ff09f9a804d204d6ff09f9a806f6ff09f9a806f6ff09f9a80c3a96f6ff09f9a80f09f9a804d6f6f6f20c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001203e79089c264603a4b90000000000000000000000000000000000000000000000aadf1e6522080e6b270000000000000000000000000000000000000000000000c2e2f6cf75fb54b91600000000000000000000000000000000000000000000007ae9d40b0f3ae8ce1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000742920762919f76c5e92bb424c9c651eba09bffb0000000000000000000000001b8f25d93bd2b6a441a1fb6d2aa96f8cc2c0fc990000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a806f206f4d6f4dc3a96f4d6f4df09f9a806ff09f9a806f6f6f4d6f6f4d6ff09f9a80206f6f4d20f09f9a804d206f4d2020f09f9a804d4d6fc3a9f09f9a80c3a9c3a94d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b4d6f6f20c3a9f09f9a806f6f6fc3a94d6f2020c3a96fc3a96f6f20c3a9204dc3a96f6fc3a9206f204d6f6f6f206f204d206f4d6f6f6f20f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000200af1946841d7f1eecaea8734f48956eb0d3fef715a2a528c0ca700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000289132918e66c936b66df052ffdd4d247b4e488dfb69f6d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000644d6f6f20c3a9f09f9a80f09f9a80f09f9a806fc3a9f09f9a80204df09f9a80c3a96fc3a94d20f09f9a80f09f9a80c3a9c3a96f6f20206f6f6f6f6f6f6ff09f9a8020f09f9a806f2020c3a9c3a9f09f9a80202020206ff09f9a804d204d4d6f4d6fc3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001206618497727a3e0a89000000000000000000000000000000000000000000000001e244d1834acf1937d0000000000000000000000000000000000000000000000c0b059c9c26dd5b2a100000000000000000000000000000000000000000000001fe55567386848cce800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f9edfd91f2e3302ea48bd0c6bebff5b0bb0b2a770000000000000000000000006b3f4f46d3dd573f44585cdc5bbfa411fc78260a000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000734d6f6f20c3a9f09f9a80206f6ff09f9a80f09f9a80c3a9c3a9f09f9a806f4df09f9a80c3a9f09f9a80f09f9a80c3a94d4d206ff09f9a806f4d6f4d6fc3a94d4d4d20f09f9a806ff09f9a8020204df09f9a8020f09f9a806ff09f9a80c3a96ff09f9a806f20f09f9a80204d4df09f9a806f206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80f09f9a806fc3a96f4d6f6f6f6fc3a94d6f6f00000000000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a806ff09f9a8020206f4d4df09f9a806f6ff09f9a806f6f6fc3a96f6f20206f6fc3a92020c3a9f09f9a806ff09f9a804dc3a96f6f000000" + }, + { + "name": "random-(((int168,uint160,address,string,uint200),address[3]),(uint48,(bytes8,bytes31[],(int224,int))[][]),int152,bytes22)", + "type": "(((int168,uint160,address,string,uint200),address[3]),(uint48,(bytes8,bytes31[],(int224,int))[][]),int152,bytes22)", + "value": [ + [ + [ + "62569139631898096881636259981194516235958816558672", + "61831295811805027381337393198917796559039815576", + "0x8004138e512FA39eDE0633c9Fe685B5B871Ff482", + "Moo é🚀", + "460171249213786923179064349165350025116288767688629306915649" + ], + [ + "0x0c7AA30F28f7502763Fc319F7a25B78B222a5b2c", + "0xe0c5268E5BaDA2Fc25d656951c18F4dfcCF1Da14", + "0xf184E9aA2cAb183edaF3CC552fdF72B24D91B7ba" + ] + ], + ["108887304616692", []], + "1155634070046581896319725415865499494392486041", + "0xddc9ebec9aed4f5f4eb9e89ef12f0fb0fc65ecdb21a1" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "62569139631898096881636259981194516235958816558672" + }, + { + "type": "number", + "value": "61831295811805027381337393198917796559039815576" + }, + { + "type": "address", + "value": "0x8004138e512FA39eDE0633c9Fe685B5B871Ff482" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "number", + "value": "460171249213786923179064349165350025116288767688629306915649" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x0c7AA30F28f7502763Fc319F7a25B78B222a5b2c" + }, + { + "type": "address", + "value": "0xe0c5268E5BaDA2Fc25d656951c18F4dfcCF1Da14" + }, + { + "type": "address", + "value": "0xf184E9aA2cAb183edaF3CC552fdF72B24D91B7ba" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "108887304616692" + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "number", + "value": "1155634070046581896319725415865499494392486041" + }, + { + "type": "hexstring", + "value": "0xddc9ebec9aed4f5f4eb9e89ef12f0fb0fc65ecdb21a1" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610569806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061040f565b60405180910390f35b610056610202565b61005e610202565b610066610253565b6040805160a0810182526060808201908152600060808301908152742acfc141c8c48da66edf9df25a317acf8209734e508352730ad49c7753b609de6e343a182beb8d9ec99cdf98602080850191909152738004138e512fa39ede0633c9fe685b5b871ff482848601528451808601909552600a8552689adede418753e13f3560b71b9085015292905278494f3c037f66099c9b593e3a83200e4da25837ff1a09f1fb419091528152610117610295565b730c7aa30f28f7502763fc319f7a25b78b222a5b2c815273e0c5268e5bada2fc25d656951c18f4dfccf1da1460208083019190915273f184e9aa2cab183edaf3cc552fdf72b24d91b7ba60408084019190915283820192909252918352805180820182526060818401526563084d1cbaf48152815160008082529381019092529190816101b4565b606081526020019060019003908161019f5790505b50602080840191909152830191909152507233d2074d69ae4c2549ea3381ba12e711c75899604082015275ddc9ebec9aed4f5f4eb9e89ef12f0fb0fc65ecdb21a160501b6060820152919050565b6040518060800160405280610215610253565b815260200161023f6040518060400160405280600065ffffffffffff168152602001606081525090565b815260006020820181905260409091015290565b6040805160e081018252600091810182815260608083018490526080830184905260a083015260c082019290925290815260208101610290610295565b905290565b60405180606001604052806003906020820280368337509192915050565b8060005b60038110156102df5781516001600160a01b03168452602093840193909101906001016102b7565b50505050565b6000604080840165ffffffffffff8451168552602080850151838288015282815180855260608901915060059450606081861b8a0101848401935060005b82811015610401578a8203605f19018452845180518084529087019087840190808a1b8501890160005b828110156103e757868203601f19018452845180516001600160c01b03191683528b81015160808d8501819052815190850181905260a08501918e01906000905b808210156103b257825160ff19168452928f0192918f01916001919091019061038e565b5050508e82015191508151601b0b8f8501528c820151606085015280935050508a850194508a8401935060018101905061034d565b509789019796890196945050506001919091019050610323565b509998505050505050505050565b6000602080835283516080828501528051608060a08601526101c0815160140b6101208701528382015160018060a01b03808216610140890152806040850151166101608901525050606082015160a06101808801528051808389015260005b8181101561048c578281018701518982016101e00152860161046f565b8181111561049f5760006101e0838b0101525b506080939093015192601f01601f1916870190506104c96101a08801846001600160c81b03169052565b92840151926104db60c08801856102b3565b9387015186850382016040880152936104f86101e08201866102e5565b9450505050506040840151610512606085018260120b9052565b50606084015169ffffffffffffffffffff198116608085015250939250505056fea2646970667358221220c289653b998a573540d8771026ce8335e1e0aa3a64d77678784637c730e1383264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ccd0667f {\n int168 s_0;\n uint160 s_1;\n address s_2;\n string s_3;\n uint200 s_4;\n }\n\n struct S_cc7b58e8 {\n S_ccd0667f s_0;\n address[3] s_1;\n }\n\n struct S_e4fed101 {\n int224 s_0;\n int256 s_1;\n }\n\n struct S_2153b98c {\n bytes8 s_0;\n bytes31[] s_1;\n S_e4fed101 s_2;\n }\n\n struct S_4b07bf09 {\n uint48 s_0;\n S_2153b98c[][] s_1;\n }\n\n struct S_af870ba8 {\n S_cc7b58e8 s_0;\n S_4b07bf09 s_1;\n int152 s_2;\n bytes22 s_3;\n }\n\n function test () public pure returns (S_af870ba8 memory) {\n S_af870ba8 memory r;\n {\n S_cc7b58e8 memory r_0;\n {\n S_ccd0667f memory r_0_0;\n {\n int168 r_0_0_0 = 62569139631898096881636259981194516235958816558672;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n uint160 r_0_0_1 = 61831295811805027381337393198917796559039815576;\n r_0_0.s_1 = r_0_0_1;\n }\n {\n address r_0_0_2 = 0x8004138e512FA39eDE0633c9Fe685B5B871Ff482;\n r_0_0.s_2 = r_0_0_2;\n }\n {\n string memory r_0_0_3 = unicode\"Moo é🚀\";\n r_0_0.s_3 = r_0_0_3;\n }\n {\n uint200 r_0_0_4 = 460171249213786923179064349165350025116288767688629306915649;\n r_0_0.s_4 = r_0_0_4;\n }\n r_0.s_0 = r_0_0;\n }\n {\n address[3] memory r_0_1;\n {\n address r_0_1_0 = 0x0c7AA30F28f7502763Fc319F7a25B78B222a5b2c;\n r_0_1[0] = r_0_1_0;\n }\n {\n address r_0_1_1 = 0xe0c5268E5BaDA2Fc25d656951c18F4dfcCF1Da14;\n r_0_1[1] = r_0_1_1;\n }\n {\n address r_0_1_2 = 0xf184E9aA2cAb183edaF3CC552fdF72B24D91B7ba;\n r_0_1[2] = r_0_1_2;\n }\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n S_4b07bf09 memory r_1;\n {\n uint48 r_1_0 = 108887304616692;\n r_1.s_0 = r_1_0;\n }\n {\n S_2153b98c[][] memory r_1_1 = new S_2153b98c[][](0);\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n int152 r_2 = 1155634070046581896319725415865499494392486041;\n r.s_2 = r_2;\n }\n {\n bytes22 r_3 = bytes22(0xddc9ebec9aed4f5f4eb9e89ef12f0fb0fc65ecdb21a1);\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000033d2074d69ae4c2549ea3381ba12e711c75899ddc9ebec9aed4f5f4eb9e89ef12f0fb0fc65ecdb21a10000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000c7aa30f28f7502763fc319f7a25b78b222a5b2c000000000000000000000000e0c5268e5bada2fc25d656951c18f4dfccf1da14000000000000000000000000f184e9aa2cab183edaf3cc552fdf72b24d91b7ba00000000000000000000002acfc141c8c48da66edf9df25a317acf8209734e500000000000000000000000000ad49c7753b609de6e343a182beb8d9ec99cdf980000000000000000000000008004138e512fa39ede0633c9fe685b5b871ff48200000000000000000000000000000000000000000000000000000000000000a000000000000000494f3c037f66099c9b593e3a83200e4da25837ff1a09f1fb41000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063084d1cbaf400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((address,bytes15,((string[3],address,bool,address),string,address,string[],string),string),address,int24,bytes18,bytes5)", + "type": "((address,bytes15,((string[3],address,bool,address),string,address,string[],string),string),address,int24,bytes18,bytes5)", + "value": [ + [ + "0x7e6777Dc08c9d6bAce67e1d1447c82F8Ba8C112c", + "0xa813f3d6d01a2651f70fa7c32beaea", + [ + [ + [ + "Moo é🚀oM oo é o éo🚀Mé", + "Moo é🚀ééMooMMéMé éo ooo🚀Mo o🚀é 🚀éo éoo 🚀o 🚀 oééo ", + "Moo é🚀é🚀o🚀o🚀🚀 🚀oo🚀🚀é🚀éMo" + ], + "0x41b2aC869f2DD5C4EB5FCD11cB690898A988fa4c", + false, + "0xFB5e7Eb6b8DAe4c2F154a956575a63026e0657A5" + ], + "Moo é🚀Méo M🚀o🚀🚀🚀 oé oé Moé é🚀oooé🚀🚀oé🚀 oMéoéMM", + "0x4e3c92488Ada2deAa8128235F71BC7c37eDacbEd", + [], + "Moo é🚀é 🚀 oéoéé 🚀🚀 🚀Mo ééMoéo M oMoM é oo🚀M🚀🚀o 🚀" + ], + "Moo é🚀éoéoM🚀Méooéé oé🚀🚀éo🚀M Mé" + ], + "0x9FF872838F53a87EaBBF9142B2DBF0fa1a9862eC", + "5256104", + "0x8800ef0c3773dca95889497fc8705fb7e044", + "0x184166a96a" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x7e6777Dc08c9d6bAce67e1d1447c82F8Ba8C112c" + }, + { + "type": "hexstring", + "value": "0xa813f3d6d01a2651f70fa7c32beaea" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM oo é o éo🚀Mé" + }, + { + "type": "string", + "value": "Moo é🚀ééMooMMéMé éo ooo🚀Mo o🚀é 🚀éo éoo 🚀o 🚀 oééo " + }, + { + "type": "string", + "value": "Moo é🚀é🚀o🚀o🚀🚀 🚀oo🚀🚀é🚀éMo" + } + ] + }, + { + "type": "address", + "value": "0x41b2aC869f2DD5C4EB5FCD11cB690898A988fa4c" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xFB5e7Eb6b8DAe4c2F154a956575a63026e0657A5" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Méo M🚀o🚀🚀🚀 oé oé Moé é🚀oooé🚀🚀oé🚀 oMéoéMM" + }, + { + "type": "address", + "value": "0x4e3c92488Ada2deAa8128235F71BC7c37eDacbEd" + }, + { + "type": "array", + "value": [] + }, + { + "type": "string", + "value": "Moo é🚀é 🚀 oéoéé 🚀🚀 🚀Mo ééMoéo M oMoM é oo🚀M🚀🚀o 🚀" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éoéoM🚀Méooéé oé🚀🚀éo🚀M Mé" + } + ] + }, + { + "type": "address", + "value": "0x9FF872838F53a87EaBBF9142B2DBF0fa1a9862eC" + }, + { + "type": "number", + "value": "5256104" + }, + { + "type": "hexstring", + "value": "0x8800ef0c3773dca95889497fc8705fb7e044" + }, + { + "type": "hexstring", + "value": "0x184166a96a" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061079d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610428565b60405180910390f35b61005661028f565b61005e61028f565b6100666102c4565b737e6777dc08c9d6bace67e1d1447c82f8ba8c112c81526e5409f9eb680d1328fb87d3e195f57560891b602082015261009d6102f0565b6100a561032e565b6100ad61035c565b604080518082018252601f81527f4d6f6f20c3a9f09f9a806f4d206f6f20c3a9206f20c3a96ff09f9a804dc3a900602080830191909152908352815160808101909252604e808352600092916106399083013990508082600160200201819052505060006040518060600160405280603781526020016106db60379139604080840191909152918352507341b2ac869f2dd5c4eb5fcd11cb690898a988fa4c602083810191909152600083830181905273fb5e7eb6b8dae4c2f154a956575a63026e0657a5606085015292845281516080810190925260548083529061068790830139602083015250734e3c92488ada2deaa8128235f71bc7c37edacbed60408201526000806040519080825280602002602001820160405280156101e657816020015b60608152602001906001900390816101d15790505b5060608301525060408051608081019091526056808252600091906107126020830139608083015250604080830191909152805160608101909152603680825260009190610603602083013960608084019190915291835250739ff872838f53a87eabbf9142b2dbf0fa1a9862ec6020830152625033a860408301527122003bc30ddcf72a5622525ff21c17edf81160721b90820152640c20b354b560d91b6080820152919050565b6040518060a001604052806102a26102c4565b8152600060208201819052604082018190526060820181905260809091015290565b60408051608081018252600080825260208201529081016102e36102f0565b8152602001606081525090565b6040518060a0016040528061030361032e565b81526020016060815260200160006001600160a01b0316815260200160608152602001606081525090565b604051806080016040528061034161035c565b81526000602082018190526040820181905260609091015290565b60405180606001604052806003905b606081526020019060019003908161036b5790505090565b6000815180845260005b818110156103a95760208185018101518683018201520161038d565b818111156103bb576000602083870101525b50601f01601f19169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b8481101561041b57601f19868403018952610409838351610383565b988401989250908301906001016103ed565b5090979650505050505050565b60006020808352835160a08285015260018060a01b038082511660c086015270ffffffffffffffffffffffffffffffffff19838301511660e086015260408201516080610100870152805160a06101408801526102608701815160806101e08a0152818290506102c08a01925060005b60038110156104c85761025f198b85030182526104b6848451610383565b93509188019190880190600101610498565b505050818601519390931661020088015260408101511515610220880152606001516001600160a01b03166102408701528084015161013f19878403810161016089015290926105188185610383565b93505060408201516105366101808901826001600160a01b03169052565b50606082015181888503016101a089015261055184826103d0565b9350506080820151915080878403016101c0880152506105718282610383565b9150506060820151915060bf19858203016101208601526105928183610383565b928601516001600160a01b03811660408701529291506105af9050565b604085015191506105c5606085018360020b9052565b60608501516dffffffffffffffffffffffffffff1981166080860152915060808501516001600160d81b0319811660a0860152915094935050505056fe4d6f6f20c3a9f09f9a80c3a96fc3a96f4df09f9a804dc3a96f6fc3a9c3a9206fc3a9f09f9a80f09f9a80c3a96ff09f9a804d204dc3a94d6f6f20c3a9f09f9a80c3a9c3a94d6f6f4d4dc3a94dc3a920c3a96f206f6f6ff09f9a804d6f206ff09f9a80c3a920f09f9a80c3a96f20c3a96f6f20f09f9a806f20f09f9a80206fc3a9c3a96f204d6f6f20c3a9f09f9a804dc3a96f204df09f9a806ff09f9a80f09f9a80f09f9a80206fc3a9206fc3a9204d6fc3a92020c3a9f09f9a806f6f6fc3a9f09f9a80f09f9a806fc3a9f09f9a80206f4dc3a96fc3a94d4d4d6f6f20c3a9f09f9a80c3a9f09f9a806ff09f9a806ff09f9a80f09f9a8020f09f9a806f6ff09f9a80f09f9a80c3a9f09f9a80c3a94d6f4d6f6f20c3a9f09f9a80c3a920f09f9a80206fc3a96fc3a9c3a920f09f9a80f09f9a802020f09f9a804d6f20c3a9c3a94d6fc3a96f204d206f4d6f4d20c3a920206f6ff09f9a804df09f9a80f09f9a806f20f09f9a80a26469706673582212209c552590617acde20b6fd1f9bf5e7a3f970ec062f7487375165e63e6e2b567d664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_963224a6 {\n string[3] s_0;\n address s_1;\n bool s_2;\n address s_3;\n }\n\n struct S_a10bb23b {\n S_963224a6 s_0;\n string s_1;\n address s_2;\n string[] s_3;\n string s_4;\n }\n\n struct S_1f60a6df {\n address s_0;\n bytes15 s_1;\n S_a10bb23b s_2;\n string s_3;\n }\n\n struct S_568d845c {\n S_1f60a6df s_0;\n address s_1;\n int24 s_2;\n bytes18 s_3;\n bytes5 s_4;\n }\n\n function test () public pure returns (S_568d845c memory) {\n S_568d845c memory r;\n {\n S_1f60a6df memory r_0;\n {\n address r_0_0 = 0x7e6777Dc08c9d6bAce67e1d1447c82F8Ba8C112c;\n r_0.s_0 = r_0_0;\n }\n {\n bytes15 r_0_1 = bytes15(0xa813f3d6d01a2651f70fa7c32beaea);\n r_0.s_1 = r_0_1;\n }\n {\n S_a10bb23b memory r_0_2;\n {\n S_963224a6 memory r_0_2_0;\n {\n string[3] memory r_0_2_0_0;\n {\n string memory r_0_2_0_0_0 = unicode\"Moo é🚀oM oo é o éo🚀Mé\";\n r_0_2_0_0[0] = r_0_2_0_0_0;\n }\n {\n string memory r_0_2_0_0_1 = unicode\"Moo é🚀ééMooMMéMé éo ooo🚀Mo o🚀é 🚀éo éoo 🚀o 🚀 oééo \";\n r_0_2_0_0[1] = r_0_2_0_0_1;\n }\n {\n string memory r_0_2_0_0_2 = unicode\"Moo é🚀é🚀o🚀o🚀🚀 🚀oo🚀🚀é🚀éMo\";\n r_0_2_0_0[2] = r_0_2_0_0_2;\n }\n r_0_2_0.s_0 = r_0_2_0_0;\n }\n {\n address r_0_2_0_1 = 0x41b2aC869f2DD5C4EB5FCD11cB690898A988fa4c;\n r_0_2_0.s_1 = r_0_2_0_1;\n }\n {\n bool r_0_2_0_2 = false;\n r_0_2_0.s_2 = r_0_2_0_2;\n }\n {\n address r_0_2_0_3 = 0xFB5e7Eb6b8DAe4c2F154a956575a63026e0657A5;\n r_0_2_0.s_3 = r_0_2_0_3;\n }\n r_0_2.s_0 = r_0_2_0;\n }\n {\n string memory r_0_2_1 = unicode\"Moo é🚀Méo M🚀o🚀🚀🚀 oé oé Moé é🚀oooé🚀🚀oé🚀 oMéoéMM\";\n r_0_2.s_1 = r_0_2_1;\n }\n {\n address r_0_2_2 = 0x4e3c92488Ada2deAa8128235F71BC7c37eDacbEd;\n r_0_2.s_2 = r_0_2_2;\n }\n {\n string[] memory r_0_2_3 = new string[](0);\n r_0_2.s_3 = r_0_2_3;\n }\n {\n string memory r_0_2_4 = unicode\"Moo é🚀é 🚀 oéoéé 🚀🚀 🚀Mo ééMoéo M oMoM é oo🚀M🚀🚀o 🚀\";\n r_0_2.s_4 = r_0_2_4;\n }\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀éoéoM🚀Méooéé oé🚀🚀éo🚀M Mé\";\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x9FF872838F53a87EaBBF9142B2DBF0fa1a9862eC;\n r.s_1 = r_1;\n }\n {\n int24 r_2 = 5256104;\n r.s_2 = r_2;\n }\n {\n bytes18 r_3 = bytes18(0x8800ef0c3773dca95889497fc8705fb7e044);\n r.s_3 = r_3;\n }\n {\n bytes5 r_4 = bytes5(0x184166a96a);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000009ff872838f53a87eabbf9142b2dbf0fa1a9862ec00000000000000000000000000000000000000000000000000000000005033a88800ef0c3773dca95889497fc8705fb7e0440000000000000000000000000000184166a96a0000000000000000000000000000000000000000000000000000000000000000000000000000007e6777dc08c9d6bace67e1d1447c82f8ba8c112ca813f3d6d01a2651f70fa7c32beaea00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000004e3c92488ada2deaa8128235f71bc7c37edacbed00000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000008000000000000000000000000041b2ac869f2dd5c4eb5fcd11cb690898a988fa4c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fb5e7eb6b8dae4c2f154a956575a63026e0657a5000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a806f4d206f6f20c3a9206f20c3a96ff09f9a804dc3a900000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a80c3a9c3a94d6f6f4d4dc3a94dc3a920c3a96f206f6f6ff09f9a804d6f206ff09f9a80c3a920f09f9a80c3a96f20c3a96f6f20f09f9a806f20f09f9a80206fc3a9c3a96f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a80c3a9f09f9a806ff09f9a806ff09f9a80f09f9a8020f09f9a806f6ff09f9a80f09f9a80c3a9f09f9a80c3a94d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a804dc3a96f204df09f9a806ff09f9a80f09f9a80f09f9a80206fc3a9206fc3a9204d6fc3a92020c3a9f09f9a806f6f6fc3a9f09f9a80f09f9a806fc3a9f09f9a80206f4dc3a96fc3a94d4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a80c3a920f09f9a80206fc3a96fc3a9c3a920f09f9a80f09f9a802020f09f9a804d6f20c3a9c3a94d6fc3a96f204d206f4d6f4d20c3a920206f6ff09f9a804df09f9a80f09f9a806f20f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a80c3a96fc3a96f4df09f9a804dc3a96f6fc3a9c3a9206fc3a9f09f9a80f09f9a80c3a96ff09f9a804d204dc3a900000000000000000000" + }, + { + "name": "random-((address[3],(string,bytes19,(bool,(bytes9[2],address,(uint88,bool)),string,address)),address,bool),string,uint32[1])", + "type": "((address[3],(string,bytes19,(bool,(bytes9[2],address,(uint88,bool)),string,address)),address,bool),string,uint32[1])", + "value": [ + [ + [ + "0xAfb65F55C74C8C113530FC7C44ea8ac0D5abC73f", + "0x93adB40F732dbC094A4730010793298b214d2756", + "0x7C999F86D727aB2Ad8b9B1176B441De462B31914" + ], + [ + "Moo é🚀 M🚀oo🚀oo🚀ooooéMM 🚀Moo o oo ooMéMo", + "0xb100979c3047f02cc9bf79e733366f99d6f1d7", + [ + true, + [ + ["0xd4b801db5755b16b2d", "0xa288ba5c840d801012"], + "0xe2797850dD06692c5F3b68D0F5780A9F6FfA2447", + ["141859461037909040135630401", false] + ], + "Moo é🚀éoo o éM oééoo o é", + "0xfFdFfc5962d4e428C936156cbaD6a0A8f2DBecB0" + ] + ], + "0x13AD832B16C28c505EEC2813D6614643D82Fb0Fd", + true + ], + "Moo é🚀M oM🚀oo🚀🚀M 🚀éééé oé M🚀🚀o 🚀🚀o🚀MM🚀", + ["3603634331"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xAfb65F55C74C8C113530FC7C44ea8ac0D5abC73f" + }, + { + "type": "address", + "value": "0x93adB40F732dbC094A4730010793298b214d2756" + }, + { + "type": "address", + "value": "0x7C999F86D727aB2Ad8b9B1176B441De462B31914" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 M🚀oo🚀oo🚀ooooéMM 🚀Moo o oo ooMéMo" + }, + { + "type": "hexstring", + "value": "0xb100979c3047f02cc9bf79e733366f99d6f1d7" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xd4b801db5755b16b2d" + }, + { + "type": "hexstring", + "value": "0xa288ba5c840d801012" + } + ] + }, + { + "type": "address", + "value": "0xe2797850dD06692c5F3b68D0F5780A9F6FfA2447" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "141859461037909040135630401" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éoo o éM oééoo o é" + }, + { + "type": "address", + "value": "0xfFdFfc5962d4e428C936156cbaD6a0A8f2DBecB0" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x13AD832B16C28c505EEC2813D6614643D82Fb0Fd" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M oM🚀oo🚀🚀M 🚀éééé oé M🚀🚀o 🚀🚀o🚀MM🚀" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3603634331" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061065e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906103ec565b60405180910390f35b610056610233565b61005e610233565b61006661025f565b61006e610293565b73afb65f55c74c8c113530fc7c44ea8ac0d5abc73f81527393adb40f732dbc094a4730010793298b214d27566020820152737c999f86d727ab2ad8b9b1176b441de462b31914604082015281526100c36102b1565b60006040518060600160405280603a81526020016105ef603a913982525072b100979c3047f02cc9bf79e733366f99d6f1d760681b60208201526101056102cc565b600181526101116102fc565b610119610334565b68d4b801db5755b16b2d60b81b81526851445d2e4206c0080960b91b60208083019190915290825273e2797850dd06692c5f3b68d0f5780a9f6ffa24478282015260408051808201825260008184018190526a7557e8cad0a56a56036e41825282850191909152848301939093528051606081019091526023808252909161057f9083013960408084019190915273ffdffc5962d4e428c936156cbad6a0a8f2dbecb0606080850191909152848201939093526020858101949094527313ad832b16c28c505eec2813d6614643d82fb0fd8582015260019285019290925250918352815160808101909252604d808352600092916105a290830139602083015250610222610352565b63d6cb189b81526040820152919050565b604051806060016040528061024661025f565b81526020016060815260200161025a610352565b905290565b6040518060800160405280610272610293565b815260200161027f6102b1565b815260006020820181905260409091015290565b60405180606001604052806003906020820280368337509192915050565b604080516060808201835281526000602082015290810161025a5b60405180608001604052806000151581526020016102e86102fc565b815260606020820152600060409091015290565b604051806060016040528061030f610334565b8152600060208083018290526040805180820182528381529182019290925291015290565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b818110156103965760208185018101518683018201520161037a565b818111156103a8576000602083870101525b50601f01601f19169290920160200192915050565b8060005b60018110156103e657815163ffffffff168452602093840193909101906001016103c1565b50505050565b602080825282516060838301819052815160009392909184608087015b60038210156104315784516001600160a01b0316815293850193600191909101908501610409565b505083820151925060c060e08701528251816101408801526104576101a0880182610370565b848601516cffffffffffffffffffffffffff191661016089015260409485015188820361013f19016101808a015280511515825280870151805191969293506101009160008986015b60028210156104c95782516001600160b81b0319168152918a0191600191909101908a016104a0565b505050808801516001600160a01b03168486015282015180516affffffffffffffffffffff166080850152870151151560a08401528582015160c0840182905261051582850182610370565b968501516001600160a01b0390811660e08601528387015116828b015250848401518015156101208b0152968a0151601f198a8803018a840152969561055b8189610370565b975050508089015194505050610573818701846103bd565b50919594505050505056fe4d6f6f20c3a9f09f9a80c3a96f6f206f202020c3a94d206fc3a9c3a96f6f206f20c3a94d6f6f20c3a9f09f9a804d206f4df09f9a806f6ff09f9a80f09f9a804d20f09f9a80c3a9c3a9c3a9c3a9206fc3a9204df09f9a80f09f9a806f20f09f9a80f09f9a806ff09f9a804d4df09f9a804d6f6f20c3a9f09f9a80204df09f9a806f6ff09f9a806f6ff09f9a806f6f6f6fc3a94d4d20f09f9a804d6f6f206f206f6f20206f6f4dc3a94d6fa2646970667358221220c761c32ed67c4d713c32a0da2ed44fc54bae02088d6c84c9fd2418623ae2767064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5231a6bb {\n uint88 s_0;\n bool s_1;\n }\n\n struct S_a7444b9c {\n bytes9[2] s_0;\n address s_1;\n S_5231a6bb s_2;\n }\n\n struct S_027588eb {\n bool s_0;\n S_a7444b9c s_1;\n string s_2;\n address s_3;\n }\n\n struct S_c96d0cc7 {\n string s_0;\n bytes19 s_1;\n S_027588eb s_2;\n }\n\n struct S_e94f4112 {\n address[3] s_0;\n S_c96d0cc7 s_1;\n address s_2;\n bool s_3;\n }\n\n struct S_db4f221a {\n S_e94f4112 s_0;\n string s_1;\n uint32[1] s_2;\n }\n\n function test () public pure returns (S_db4f221a memory) {\n S_db4f221a memory r;\n {\n S_e94f4112 memory r_0;\n {\n address[3] memory r_0_0;\n {\n address r_0_0_0 = 0xAfb65F55C74C8C113530FC7C44ea8ac0D5abC73f;\n r_0_0[0] = r_0_0_0;\n }\n {\n address r_0_0_1 = 0x93adB40F732dbC094A4730010793298b214d2756;\n r_0_0[1] = r_0_0_1;\n }\n {\n address r_0_0_2 = 0x7C999F86D727aB2Ad8b9B1176B441De462B31914;\n r_0_0[2] = r_0_0_2;\n }\n r_0.s_0 = r_0_0;\n }\n {\n S_c96d0cc7 memory r_0_1;\n {\n string memory r_0_1_0 = unicode\"Moo é🚀 M🚀oo🚀oo🚀ooooéMM 🚀Moo o oo ooMéMo\";\n r_0_1.s_0 = r_0_1_0;\n }\n {\n bytes19 r_0_1_1 = bytes19(0xb100979c3047f02cc9bf79e733366f99d6f1d7);\n r_0_1.s_1 = r_0_1_1;\n }\n {\n S_027588eb memory r_0_1_2;\n {\n bool r_0_1_2_0 = true;\n r_0_1_2.s_0 = r_0_1_2_0;\n }\n {\n S_a7444b9c memory r_0_1_2_1;\n {\n bytes9[2] memory r_0_1_2_1_0;\n {\n bytes9 r_0_1_2_1_0_0 = bytes9(0xd4b801db5755b16b2d);\n r_0_1_2_1_0[0] = r_0_1_2_1_0_0;\n }\n {\n bytes9 r_0_1_2_1_0_1 = bytes9(0xa288ba5c840d801012);\n r_0_1_2_1_0[1] = r_0_1_2_1_0_1;\n }\n r_0_1_2_1.s_0 = r_0_1_2_1_0;\n }\n {\n address r_0_1_2_1_1 = 0xe2797850dD06692c5F3b68D0F5780A9F6FfA2447;\n r_0_1_2_1.s_1 = r_0_1_2_1_1;\n }\n {\n S_5231a6bb memory r_0_1_2_1_2;\n {\n uint88 r_0_1_2_1_2_0 = 141859461037909040135630401;\n r_0_1_2_1_2.s_0 = r_0_1_2_1_2_0;\n }\n {\n bool r_0_1_2_1_2_1 = false;\n r_0_1_2_1_2.s_1 = r_0_1_2_1_2_1;\n }\n r_0_1_2_1.s_2 = r_0_1_2_1_2;\n }\n r_0_1_2.s_1 = r_0_1_2_1;\n }\n {\n string memory r_0_1_2_2 = unicode\"Moo é🚀éoo o éM oééoo o é\";\n r_0_1_2.s_2 = r_0_1_2_2;\n }\n {\n address r_0_1_2_3 = 0xfFdFfc5962d4e428C936156cbaD6a0A8f2DBecB0;\n r_0_1_2.s_3 = r_0_1_2_3;\n }\n r_0_1.s_2 = r_0_1_2;\n }\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0x13AD832B16C28c505EEC2813D6614643D82Fb0Fd;\n r_0.s_2 = r_0_2;\n }\n {\n bool r_0_3 = true;\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀M oM🚀oo🚀🚀M 🚀éééé oé M🚀🚀o 🚀🚀o🚀MM🚀\";\n r.s_1 = r_1;\n }\n {\n uint32[1] memory r_2;\n {\n uint32 r_2_0 = 3603634331;\n r_2[0] = r_2_0;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000d6cb189b000000000000000000000000afb65f55c74c8c113530fc7c44ea8ac0d5abc73f00000000000000000000000093adb40f732dbc094a4730010793298b214d27560000000000000000000000007c999f86d727ab2ad8b9b1176b441de462b3191400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000013ad832b16c28c505eec2813d6614643d82fb0fd00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060b100979c3047f02cc9bf79e733366f99d6f1d70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000003a4d6f6f20c3a9f09f9a80204df09f9a806f6ff09f9a806f6ff09f9a806f6f6f6fc3a94d4d20f09f9a804d6f6f206f206f6f20206f6f4dc3a94d6f0000000000000000000000000000000000000000000000000000000000000000000000000001d4b801db5755b16b2d0000000000000000000000000000000000000000000000a288ba5c840d8010120000000000000000000000000000000000000000000000000000000000000000000000e2797850dd06692c5f3b68d0f5780a9f6ffa24470000000000000000000000000000000000000000007557e8cad0a56a56036e4100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000ffdffc5962d4e428c936156cbad6a0a8f2dbecb000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a80c3a96f6f206f202020c3a94d206fc3a9c3a96f6f206f20c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a804d206f4df09f9a806f6ff09f9a80f09f9a804d20f09f9a80c3a9c3a9c3a9c3a9206fc3a9204df09f9a80f09f9a806f20f09f9a80f09f9a806ff09f9a804d4df09f9a8000000000000000000000000000000000000000" + }, + { + "name": "random-((bool,int,(bool,string,string),bool[4],string),(uint232)[],(int72[],address,string,string[3],bool))", + "type": "((bool,int,(bool,string,string),bool[4],string),(uint232)[],(int72[],address,string,string[3],bool))", + "value": [ + [ + true, + "-54399778222038694183140980469431808390807330939282783147505491971111470614640", + [false, "Moo é🚀o🚀🚀oé", "Moo é🚀oéé 🚀"], + [true, false, true, true], + "Moo é🚀" + ], + [["3123898811166440292454144232166577922871499420688975498658830073235283"]], + [ + ["1154091736794279393838"], + "0x5209f95Daf972fc9DED2762B52Cb3bb2032dC772", + "Moo é🚀🚀o éM🚀éo 🚀oo 🚀 🚀MoM🚀MoM", + [ + "Moo é🚀éoM éoMéMo Mé 🚀oéM🚀éoMéo 🚀éM Mo🚀", + "Moo é🚀éooMoé🚀 M🚀éMMéMéoé🚀MooMé Mo", + "Moo é🚀MMMéoo oo" + ], + false + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-54399778222038694183140980469431808390807330939282783147505491971111470614640" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀oé" + }, + { + "type": "string", + "value": "Moo é🚀oéé 🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3123898811166440292454144232166577922871499420688975498658830073235283" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1154091736794279393838" + } + ] + }, + { + "type": "address", + "value": "0x5209f95Daf972fc9DED2762B52Cb3bb2032dC772" + }, + { + "type": "string", + "value": "Moo é🚀🚀o éM🚀éo 🚀oo 🚀 🚀MoM🚀MoM" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoM éoMéMo Mé 🚀oéM🚀éoMéo 🚀éM Mo🚀" + }, + { + "type": "string", + "value": "Moo é🚀éooMoé🚀 M🚀éMMéMéoé🚀MooMé Mo" + }, + { + "type": "string", + "value": "Moo é🚀MMMéoo oo" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506107ad806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906105c9565b60405180910390f35b610056610316565b61005e610316565b610066610342565b600181527f87bad1103a52b3033efb58f442b4eaa6a5727cca6402fe4756c2b469abe637906020808301919091526040805160608082018352600082528184018181528284019182528351808501855260168152754d6f6f20c3a9f09f9a806ff09f9a80f09f9a806fc3a960501b8187015290528251808401845260148152729adede418753e13f3500df8753875241e13f3560671b948101949094529290925282015261011261039d565b6001808252600060208084018290526040808501849052606080860185905286019490945283518085018552600a8152689adede418753e13f3560b71b81830152608086015293855282518281528084019093529282015b60408051602081019091526000815281526020019060019003908161016a57505060408051602081019091527c73df315ad68dd30b5ddd6894df97bc7bb99afa056f20ae32394e7c87538152815191925090819083906000906101cf576101cf6106b8565b602002602001018190525050808260200181905250506101ed6103bb565b604080516001808252818301909252600091602080830190803683370190505090506000683e903d7ff96ca33a2e90508082600081518110610231576102316106b8565b60089290920b60209283029190910182015291835250735209f95daf972fc9ded2762b52cb3bb2032dc7728282015260408051606081019091526036808252600092610742908301396040830152506102886103f9565b60006040518060600160405280603e81526020016106cf603e9139825250604080516060810190915260358082526000919061070d602083013960208381019190915260408051808201825260148152734d6f6f20c3a9f09f9a804d4d4dc3a96f6f206f6f60601b928101929092528084019190915260608401929092525060006080830152820152919050565b6040518060600160405280610329610342565b81526020016060815260200161033d6103bb565b905290565b6040518060a0016040528060001515815260200160008152602001610383604051806060016040528060001515815260200160608152602001606081525090565b815260200161039061039d565b8152602001606081525090565b60405180608001604052806004906020820280368337509192915050565b6040518060a001604052806060815260200160006001600160a01b03168152602001606081526020016103ec6103f9565b8152600060209091015290565b60405180606001604052806003905b60608152602001906001900390816104085790505090565b6000815180845260005b818110156104465760208185018101518683018201520161042a565b81811115610458576000602083870101525b50601f01601f19169290920160200192915050565b8060005b60048110156104925781511515845260209384019390910190600101610471565b50505050565b600081518084526020808501945080840160005b838110156104d2578151516001600160e81b0316875295820195908201906001016104ac565b509495945050505050565b600082606081018360005b6003811015610517578383038752610501838351610420565b60209788019790935091909101906001016104e8565b509095945050505050565b805160a080845281519084018190526000916020919082019060c0860190845b8181101561056157835160080b83529284019291840191600101610542565b5050848301516001600160a01b0381168785015291506040850151925085810360408701526105908184610420565b92505050606083015184820360608601526105ab82826104dd565b91505060808301516105c1608086018215159052565b509392505050565b602081526000825160606020840152805115156080840152602081015160a0840152604081015161010060c085015280511515610180850152602081015160606101a086015261061d6101e0860182610420565b90506040820151915061017f19858203016101c086015261063e8183610420565b915050606082015161065360e086018261046d565b5060808201519150607f19848203016101608501526106728183610420565b9150506020840151601f19808584030160408601526106918383610498565b92506040860151915080858403016060860152506106af8282610522565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80c3a96f4d20c3a96f4dc3a94d6f204dc3a920f09f9a806fc3a94df09f9a80c3a96f4dc3a96f20f09f9a80c3a94d204d6ff09f9a804d6f6f20c3a9f09f9a80c3a96f6f4d6fc3a9f09f9a80204df09f9a80c3a94d4dc3a94dc3a96fc3a9f09f9a804d6f6f4dc3a9204d6f4d6f6f20c3a9f09f9a80f09f9a806f20c3a94df09f9a80c3a96f20f09f9a806f6f2020f09f9a8020f09f9a804d6f4df09f9a804d6f4da26469706673582212200266c597f1d2da11ab1af8bc4bf17cb0b384ffa0f28c81ada7d6dd4fe34318b064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_21333ac5 {\n bool s_0;\n string s_1;\n string s_2;\n }\n\n struct S_1eaa98ab {\n bool s_0;\n int256 s_1;\n S_21333ac5 s_2;\n bool[4] s_3;\n string s_4;\n }\n\n struct S_d617b071 {\n uint232 s_0;\n }\n\n struct S_1b3d34b2 {\n int72[] s_0;\n address s_1;\n string s_2;\n string[3] s_3;\n bool s_4;\n }\n\n struct S_5dee3792 {\n S_1eaa98ab s_0;\n S_d617b071[] s_1;\n S_1b3d34b2 s_2;\n }\n\n function test () public pure returns (S_5dee3792 memory) {\n S_5dee3792 memory r;\n {\n S_1eaa98ab memory r_0;\n {\n bool r_0_0 = true;\n r_0.s_0 = r_0_0;\n }\n {\n int r_0_1 = -54399778222038694183140980469431808390807330939282783147505491971111470614640;\n r_0.s_1 = r_0_1;\n }\n {\n S_21333ac5 memory r_0_2;\n {\n bool r_0_2_0 = false;\n r_0_2.s_0 = r_0_2_0;\n }\n {\n string memory r_0_2_1 = unicode\"Moo é🚀o🚀🚀oé\";\n r_0_2.s_1 = r_0_2_1;\n }\n {\n string memory r_0_2_2 = unicode\"Moo é🚀oéé 🚀\";\n r_0_2.s_2 = r_0_2_2;\n }\n r_0.s_2 = r_0_2;\n }\n {\n bool[4] memory r_0_3;\n {\n bool r_0_3_0 = true;\n r_0_3[0] = r_0_3_0;\n }\n {\n bool r_0_3_1 = false;\n r_0_3[1] = r_0_3_1;\n }\n {\n bool r_0_3_2 = true;\n r_0_3[2] = r_0_3_2;\n }\n {\n bool r_0_3_3 = true;\n r_0_3[3] = r_0_3_3;\n }\n r_0.s_3 = r_0_3;\n }\n {\n string memory r_0_4 = unicode\"Moo é🚀\";\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n S_d617b071[] memory r_1 = new S_d617b071[](1);\n {\n S_d617b071 memory r_1_0;\n {\n uint232 r_1_0_0 = 3123898811166440292454144232166577922871499420688975498658830073235283;\n r_1_0.s_0 = r_1_0_0;\n }\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n S_1b3d34b2 memory r_2;\n {\n int72[] memory r_2_0 = new int72[](1);\n {\n int72 r_2_0_0 = 1154091736794279393838;\n r_2_0[0] = r_2_0_0;\n }\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0x5209f95Daf972fc9DED2762B52Cb3bb2032dC772;\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀🚀o éM🚀éo 🚀oo 🚀 🚀MoM🚀MoM\";\n r_2.s_2 = r_2_2;\n }\n {\n string[3] memory r_2_3;\n {\n string memory r_2_3_0 = unicode\"Moo é🚀éoM éoMéMo Mé 🚀oéM🚀éoMéo 🚀éM Mo🚀\";\n r_2_3[0] = r_2_3_0;\n }\n {\n string memory r_2_3_1 = unicode\"Moo é🚀éooMoé🚀 M🚀éMMéMéoé🚀MooMé Mo\";\n r_2_3[1] = r_2_3_1;\n }\n {\n string memory r_2_3_2 = unicode\"Moo é🚀MMMéoo oo\";\n r_2_3[2] = r_2_3_2;\n }\n r_2.s_3 = r_2_3;\n }\n {\n bool r_2_4 = false;\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000187bad1103a52b3033efb58f442b4eaa6a5727cca6402fe4756c2b469abe637900000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a806ff09f9a80f09f9a806fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a806fc3a9c3a920f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000073df315ad68dd30b5ddd6894df97bc7bb99afa056f20ae32394e7c875300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000005209f95daf972fc9ded2762b52cb3bb2032dc77200000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000003e903d7ff96ca33a2e00000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a80f09f9a806f20c3a94df09f9a80c3a96f20f09f9a806f6f2020f09f9a8020f09f9a804d6f4df09f9a804d6f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a80c3a96f4d20c3a96f4dc3a94d6f204dc3a920f09f9a806fc3a94df09f9a80c3a96f4dc3a96f20f09f9a80c3a94d204d6ff09f9a80000000000000000000000000000000000000000000000000000000000000000000354d6f6f20c3a9f09f9a80c3a96f6f4d6fc3a9f09f9a80204df09f9a80c3a94d4dc3a94dc3a96fc3a9f09f9a804d6f6f4dc3a9204d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a804d4d4dc3a96f6f206f6f000000000000000000000000" + }, + { + "name": "random-(address,bool,((((int192,address,bytes24[2][1][2]),(address)),int72)[4],bool,address,address,string),(address),bool)", + "type": "(address,bool,((((int192,address,bytes24[2][1][2]),(address)),int72)[4],bool,address,address,string),(address),bool)", + "value": [ + "0xFD7ab00CA7078cFa1100A0225eBfB1886d2B07A7", + true, + [ + [ + [ + [ + [ + "-1653326182153686178333117331197120426262934019458579409599", + "0xB4516A85E4f06a10B87EfA925F7030f312c0Af7a", + [ + [ + [ + "0xc45a0bde748bef6e4c4a01696daa5998b306af882c1fd2c2", + "0x66f7685af0f65caff78a773d2e6c1732c8ee2cb530ad7a77" + ] + ], + [ + [ + "0x82b3894bc4bbf162818cc748b452b93a2a586fe5ff35a899", + "0x52cf070aeab82755dd77f5d982809fd53c2877b9329bddd7" + ] + ] + ] + ], + ["0xF69AF804c83378D7055aeA5C1b132145181D071e"] + ], + "2289019808589871087278" + ], + [ + [ + [ + "729269888266242878959581948868578225014473867990478202083", + "0xC2e8FFec40211DB6A45dC3246316Dd85607B9FbF", + [ + [ + [ + "0x043170d7a1256dd452523c31c5e47fd21e361d19a0a59bff", + "0x4683c472cb4f98574910744a2e09cd9f765ace2a50568cc2" + ] + ], + [ + [ + "0x2fe88292b5c3e64a270d06bea7d153b926d21e6971378a66", + "0x5ec52e709691abc0d730215396b25946848cdb21afc8a89e" + ] + ] + ] + ], + ["0x9045870Bd14161b4E48BA02802Df1f2095314D97"] + ], + "1310854226926574290493" + ], + [ + [ + [ + "-2224774792172874454821033980760415550697583432894874600627", + "0x08f4743DB9a99F11140d00e6402E16d71740B735", + [ + [ + [ + "0x379a51e76631bd9256fbc23f7cfd1d4e4be9dfe0afe882f6", + "0x6a0a3dc321e5f028052a713fcab8da26fd11d4a02f2d50e4" + ] + ], + [ + [ + "0x24af5d88b7a75c6118507de924cdcd9210f9d4918fc44d44", + "0xbd3feb7760944e93b18fe1abc1cb7308d7f09e6a42a0603d" + ] + ] + ] + ], + ["0xe19Fb79452E99Dad314A060BF9Cf5A23D430DD59"] + ], + "1796091489060553007655" + ], + [ + [ + [ + "-877108660701897373797550523867062951038263538988443755777", + "0xE2d7128b2252eB3A5AB932D10FF3dfef2EE21893", + [ + [ + [ + "0xbc4913d510f0b7c7f5da23de672e5f9f89dfdb9729d8e2dd", + "0x4d8431b5aac57062cf6b6bc2de50662aa7092da1046f8889" + ] + ], + [ + [ + "0x734210bb20eee090582ff93663c40e09b35a1441710b3860", + "0x23f32273f10461e28df70e9ccfb8d6b1ba4e3c6d3c9cd99d" + ] + ] + ] + ], + ["0x03256F6EC30884bD43edd2314B88Eb19482D0731"] + ], + "455491076321424883538" + ] + ], + true, + "0xB1e426B51B44FC3f6604BD17176F4f71Ff64987D", + "0x06817D870E27010396C7040Fef438d22DEEB2097", + "Moo é🚀 oM o🚀ooo oM🚀oéééMoééM" + ], + ["0x4AaFb05Bf4FbA7Af320485f8C23ed6660a9296AB"], + true + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xFD7ab00CA7078cFa1100A0225eBfB1886d2B07A7" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-1653326182153686178333117331197120426262934019458579409599" + }, + { + "type": "address", + "value": "0xB4516A85E4f06a10B87EfA925F7030f312c0Af7a" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc45a0bde748bef6e4c4a01696daa5998b306af882c1fd2c2" + }, + { + "type": "hexstring", + "value": "0x66f7685af0f65caff78a773d2e6c1732c8ee2cb530ad7a77" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x82b3894bc4bbf162818cc748b452b93a2a586fe5ff35a899" + }, + { + "type": "hexstring", + "value": "0x52cf070aeab82755dd77f5d982809fd53c2877b9329bddd7" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xF69AF804c83378D7055aeA5C1b132145181D071e" + } + ] + } + ] + }, + { + "type": "number", + "value": "2289019808589871087278" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "729269888266242878959581948868578225014473867990478202083" + }, + { + "type": "address", + "value": "0xC2e8FFec40211DB6A45dC3246316Dd85607B9FbF" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x043170d7a1256dd452523c31c5e47fd21e361d19a0a59bff" + }, + { + "type": "hexstring", + "value": "0x4683c472cb4f98574910744a2e09cd9f765ace2a50568cc2" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2fe88292b5c3e64a270d06bea7d153b926d21e6971378a66" + }, + { + "type": "hexstring", + "value": "0x5ec52e709691abc0d730215396b25946848cdb21afc8a89e" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x9045870Bd14161b4E48BA02802Df1f2095314D97" + } + ] + } + ] + }, + { + "type": "number", + "value": "1310854226926574290493" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-2224774792172874454821033980760415550697583432894874600627" + }, + { + "type": "address", + "value": "0x08f4743DB9a99F11140d00e6402E16d71740B735" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x379a51e76631bd9256fbc23f7cfd1d4e4be9dfe0afe882f6" + }, + { + "type": "hexstring", + "value": "0x6a0a3dc321e5f028052a713fcab8da26fd11d4a02f2d50e4" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x24af5d88b7a75c6118507de924cdcd9210f9d4918fc44d44" + }, + { + "type": "hexstring", + "value": "0xbd3feb7760944e93b18fe1abc1cb7308d7f09e6a42a0603d" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xe19Fb79452E99Dad314A060BF9Cf5A23D430DD59" + } + ] + } + ] + }, + { + "type": "number", + "value": "1796091489060553007655" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-877108660701897373797550523867062951038263538988443755777" + }, + { + "type": "address", + "value": "0xE2d7128b2252eB3A5AB932D10FF3dfef2EE21893" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xbc4913d510f0b7c7f5da23de672e5f9f89dfdb9729d8e2dd" + }, + { + "type": "hexstring", + "value": "0x4d8431b5aac57062cf6b6bc2de50662aa7092da1046f8889" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x734210bb20eee090582ff93663c40e09b35a1441710b3860" + }, + { + "type": "hexstring", + "value": "0x23f32273f10461e28df70e9ccfb8d6b1ba4e3c6d3c9cd99d" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x03256F6EC30884bD43edd2314B88Eb19482D0731" + } + ] + } + ] + }, + { + "type": "number", + "value": "455491076321424883538" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xB1e426B51B44FC3f6604BD17176F4f71Ff64987D" + }, + { + "type": "address", + "value": "0x06817D870E27010396C7040Fef438d22DEEB2097" + }, + { + "type": "string", + "value": "Moo é🚀 oM o🚀ooo oM🚀oéééMoééM" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x4AaFb05Bf4FbA7Af320485f8C23ed6660a9296AB" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610a64806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610866565b60405180910390f35b61005661069b565b61005e61069b565b73fd7ab00ca7078cfa1100a0225ebfb1886d2b07a78152600160208201526100846106e1565b61008c610718565b610094610745565b61009c610754565b6100a4610786565b77436d87dfb9ff24a1373a0d3f57aaacc5ccca11664085aabe19815273b4516a85e4f06a10b87efa925f7030f312c0af7a60208201526100e26107a1565b6100ea6107ce565b6100f26107fb565b7fc45a0bde748bef6e4c4a01696daa5998b306af882c1fd2c2000000000000000081527f66f7685af0f65caff78a773d2e6c1732c8ee2cb530ad7a7700000000000000006020820152815281526101476107ce565b61014f6107fb565b7f82b3894bc4bbf162818cc748b452b93a2a586fe5ff35a899000000000000000081527f52cf070aeab82755dd77f5d982809fd53c2877b9329bddd7000000000000000060208083019190915290825282810191909152604083810192909252918352805180830190915273f69af804c83378d7055aea5c1b132145181d071e815282820152908252687c1687fc2a6fe87eae9082015281526101f0610745565b6101f8610754565b610200610786565b771dbdeed24d3a2581827045aa736f0bd6a11cb1482ef9a4e3815273c2e8ffec40211db6a45dc3246316dd85607b9fbf602082015261023d6107a1565b6102456107ce565b61024d6107fb565b7f043170d7a1256dd452523c31c5e47fd21e361d19a0a59bff000000000000000081527f4683c472cb4f98574910744a2e09cd9f765ace2a50568cc200000000000000006020820152815281526102a26107ce565b6102aa6107fb565b7f2fe88292b5c3e64a270d06bea7d153b926d21e6971378a66000000000000000081527f5ec52e709691abc0d730215396b25946848cdb21afc8a89e0000000000000000602080830191909152908252828101919091526040838101929092529183528051808301909152739045870bd14161b4e48ba02802df1f2095314d9781528282015290825268470fc1be2fb5c0c63d8282015282015261034c610745565b610354610754565b61035c610786565b775abbbb8d6b8d37855f545bba7cb73a9378e863bf3b4b44b21981527308f4743db9a99f11140d00e6402e16d71740b735602082015261039a6107a1565b6103a26107ce565b6103aa6107fb565b7f379a51e76631bd9256fbc23f7cfd1d4e4be9dfe0afe882f6000000000000000081527f6a0a3dc321e5f028052a713fcab8da26fd11d4a02f2d50e400000000000000006020820152815281526103ff6107ce565b6104076107fb565b7f24af5d88b7a75c6118507de924cdcd9210f9d4918fc44d44000000000000000081527fbd3feb7760944e93b18fe1abc1cb7308d7f09e6a42a0603d0000000000000000602080830191909152908252828101919091526040838101929092529183528051808301825273e19fb79452e99dad314a060bf9cf5a23d430dd5981528383015291835268615dc6cd3334a8a227908301528201526104a8610745565b6104b0610754565b6104b8610786565b7723c5711342f21b2e0356e8d04432de69e2ccc638a1dfe50019815273e2d7128b2252eb3a5ab932d10ff3dfef2ee2189360208201526104f66107a1565b6104fe6107ce565b6105066107fb565b7fbc4913d510f0b7c7f5da23de672e5f9f89dfdb9729d8e2dd000000000000000081527f4d8431b5aac57062cf6b6bc2de50662aa7092da1046f8889000000000000000060208201528152815261055b6107ce565b6105636107fb565b7f734210bb20eee090582ff93663c40e09b35a1441710b3860000000000000000081527f23f32273f10461e28df70e9ccfb8d6b1ba4e3c6d3c9cd99d000000000000000060208083019190915290825282810191909152604083810192909252918352805180830182527303256f6ec30884bd43edd2314b88eb19482d07318152838301529183526818b135609e82debf528382015260608481019390935292845260018484015273b1e426b51b44fc3f6604bd17176f4f71ff64987d848201527306817d870e27010396c7040fef438d22deeb20978483015280519182019052602b808252600092610a0490830139608083015250604082015261067360408051602081019091526000815290565b734aafb05bf4fba7af320485f8c23ed6660a9296ab8152606082015260016080820152919050565b6040805160a081018252600080825260208201529081016106ba6106e1565b81526020016106d460408051602081019091526000815290565b8152600060209091015290565b6040518060a001604052806106f4610718565b81526000602082018190526040820181905260608083019190915260809091015290565b60405180608001604052806004905b61072f610745565b8152602001906001900390816107275790505090565b60405180604001604052806106d45b6040518060400160405280610767610786565b815260200161078160408051602081019091526000815290565b905290565b60408051606081018252600080825260208201529081016107815b60405180604001604052806002905b6107b86107ce565b8152602001906001900390816107b05790505090565b60405180602001604052806001905b6107e56107fb565b8152602001906001900390816107dd5790505090565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b8181101561083f57602081850181015186830182015201610823565b81811115610851576000602083870101525b50601f01601f19169290920160200192915050565b60208152600060018060a01b038084511660208401526020840151801515604085015250604084015160a06060850152805160c0850160005b600481101561098157825180518051805160170b8552876020820151166020860152604081015190506040850160005b60028110156109495782518260005b60018110156109305782518260005b600281101561091757825167ffffffffffffffff19168252602092830192909101906001016108ed565b50505060209290920191604091909101906001016108de565b50505060209290920191604091909101906001016108cf565b505050602090810151516001600160a01b031660c08501529081015160080b60e084015292909201916101009091019060010161089f565b505050602081015115156104c085015260408101516001600160a01b039081166104e08601526060820151166105008501526080015161048061052085015290506109d0610540840182610819565b905060608401516109ed6080850182516001600160a01b03169052565b50608084015180151560a085015250939250505056fe4d6f6f20c3a9f09f9a80206f4d206ff09f9a806f6f6f206f4df09f9a806fc3a9c3a9c3a94d6fc3a9c3a94da2646970667358221220aab81e7d200cb5a2839da2b894e62d82efaeb358836a84b9c217c26773498b2964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b2b4cc84 {\n int192 s_0;\n address s_1;\n bytes24[2][1][2] s_2;\n }\n\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_beff7ad7 {\n S_b2b4cc84 s_0;\n S_421683f8 s_1;\n }\n\n struct S_ac16e46e {\n S_beff7ad7 s_0;\n int72 s_1;\n }\n\n struct S_55c057f3 {\n S_ac16e46e[4] s_0;\n bool s_1;\n address s_2;\n address s_3;\n string s_4;\n }\n\n struct S_d666820b {\n address s_0;\n bool s_1;\n S_55c057f3 s_2;\n S_421683f8 s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_d666820b memory) {\n S_d666820b memory r;\n {\n address r_0 = 0xFD7ab00CA7078cFa1100A0225eBfB1886d2B07A7;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n S_55c057f3 memory r_2;\n {\n S_ac16e46e[4] memory r_2_0;\n {\n S_ac16e46e memory r_2_0_0;\n {\n S_beff7ad7 memory r_2_0_0_0;\n {\n S_b2b4cc84 memory r_2_0_0_0_0;\n {\n int192 r_2_0_0_0_0_0 = -1653326182153686178333117331197120426262934019458579409599;\n r_2_0_0_0_0.s_0 = r_2_0_0_0_0_0;\n }\n {\n address r_2_0_0_0_0_1 = 0xB4516A85E4f06a10B87EfA925F7030f312c0Af7a;\n r_2_0_0_0_0.s_1 = r_2_0_0_0_0_1;\n }\n {\n bytes24[2][1][2] memory r_2_0_0_0_0_2;\n {\n bytes24[2][1] memory r_2_0_0_0_0_2_0;\n {\n bytes24[2] memory r_2_0_0_0_0_2_0_0;\n {\n bytes24 r_2_0_0_0_0_2_0_0_0 = bytes24(0xc45a0bde748bef6e4c4a01696daa5998b306af882c1fd2c2);\n r_2_0_0_0_0_2_0_0[0] = r_2_0_0_0_0_2_0_0_0;\n }\n {\n bytes24 r_2_0_0_0_0_2_0_0_1 = bytes24(0x66f7685af0f65caff78a773d2e6c1732c8ee2cb530ad7a77);\n r_2_0_0_0_0_2_0_0[1] = r_2_0_0_0_0_2_0_0_1;\n }\n r_2_0_0_0_0_2_0[0] = r_2_0_0_0_0_2_0_0;\n }\n r_2_0_0_0_0_2[0] = r_2_0_0_0_0_2_0;\n }\n {\n bytes24[2][1] memory r_2_0_0_0_0_2_1;\n {\n bytes24[2] memory r_2_0_0_0_0_2_1_0;\n {\n bytes24 r_2_0_0_0_0_2_1_0_0 = bytes24(0x82b3894bc4bbf162818cc748b452b93a2a586fe5ff35a899);\n r_2_0_0_0_0_2_1_0[0] = r_2_0_0_0_0_2_1_0_0;\n }\n {\n bytes24 r_2_0_0_0_0_2_1_0_1 = bytes24(0x52cf070aeab82755dd77f5d982809fd53c2877b9329bddd7);\n r_2_0_0_0_0_2_1_0[1] = r_2_0_0_0_0_2_1_0_1;\n }\n r_2_0_0_0_0_2_1[0] = r_2_0_0_0_0_2_1_0;\n }\n r_2_0_0_0_0_2[1] = r_2_0_0_0_0_2_1;\n }\n r_2_0_0_0_0.s_2 = r_2_0_0_0_0_2;\n }\n r_2_0_0_0.s_0 = r_2_0_0_0_0;\n }\n {\n S_421683f8 memory r_2_0_0_0_1;\n {\n address r_2_0_0_0_1_0 = 0xF69AF804c83378D7055aeA5C1b132145181D071e;\n r_2_0_0_0_1.s_0 = r_2_0_0_0_1_0;\n }\n r_2_0_0_0.s_1 = r_2_0_0_0_1;\n }\n r_2_0_0.s_0 = r_2_0_0_0;\n }\n {\n int72 r_2_0_0_1 = 2289019808589871087278;\n r_2_0_0.s_1 = r_2_0_0_1;\n }\n r_2_0[0] = r_2_0_0;\n }\n {\n S_ac16e46e memory r_2_0_1;\n {\n S_beff7ad7 memory r_2_0_1_0;\n {\n S_b2b4cc84 memory r_2_0_1_0_0;\n {\n int192 r_2_0_1_0_0_0 = 729269888266242878959581948868578225014473867990478202083;\n r_2_0_1_0_0.s_0 = r_2_0_1_0_0_0;\n }\n {\n address r_2_0_1_0_0_1 = 0xC2e8FFec40211DB6A45dC3246316Dd85607B9FbF;\n r_2_0_1_0_0.s_1 = r_2_0_1_0_0_1;\n }\n {\n bytes24[2][1][2] memory r_2_0_1_0_0_2;\n {\n bytes24[2][1] memory r_2_0_1_0_0_2_0;\n {\n bytes24[2] memory r_2_0_1_0_0_2_0_0;\n {\n bytes24 r_2_0_1_0_0_2_0_0_0 = bytes24(0x043170d7a1256dd452523c31c5e47fd21e361d19a0a59bff);\n r_2_0_1_0_0_2_0_0[0] = r_2_0_1_0_0_2_0_0_0;\n }\n {\n bytes24 r_2_0_1_0_0_2_0_0_1 = bytes24(0x4683c472cb4f98574910744a2e09cd9f765ace2a50568cc2);\n r_2_0_1_0_0_2_0_0[1] = r_2_0_1_0_0_2_0_0_1;\n }\n r_2_0_1_0_0_2_0[0] = r_2_0_1_0_0_2_0_0;\n }\n r_2_0_1_0_0_2[0] = r_2_0_1_0_0_2_0;\n }\n {\n bytes24[2][1] memory r_2_0_1_0_0_2_1;\n {\n bytes24[2] memory r_2_0_1_0_0_2_1_0;\n {\n bytes24 r_2_0_1_0_0_2_1_0_0 = bytes24(0x2fe88292b5c3e64a270d06bea7d153b926d21e6971378a66);\n r_2_0_1_0_0_2_1_0[0] = r_2_0_1_0_0_2_1_0_0;\n }\n {\n bytes24 r_2_0_1_0_0_2_1_0_1 = bytes24(0x5ec52e709691abc0d730215396b25946848cdb21afc8a89e);\n r_2_0_1_0_0_2_1_0[1] = r_2_0_1_0_0_2_1_0_1;\n }\n r_2_0_1_0_0_2_1[0] = r_2_0_1_0_0_2_1_0;\n }\n r_2_0_1_0_0_2[1] = r_2_0_1_0_0_2_1;\n }\n r_2_0_1_0_0.s_2 = r_2_0_1_0_0_2;\n }\n r_2_0_1_0.s_0 = r_2_0_1_0_0;\n }\n {\n S_421683f8 memory r_2_0_1_0_1;\n {\n address r_2_0_1_0_1_0 = 0x9045870Bd14161b4E48BA02802Df1f2095314D97;\n r_2_0_1_0_1.s_0 = r_2_0_1_0_1_0;\n }\n r_2_0_1_0.s_1 = r_2_0_1_0_1;\n }\n r_2_0_1.s_0 = r_2_0_1_0;\n }\n {\n int72 r_2_0_1_1 = 1310854226926574290493;\n r_2_0_1.s_1 = r_2_0_1_1;\n }\n r_2_0[1] = r_2_0_1;\n }\n {\n S_ac16e46e memory r_2_0_2;\n {\n S_beff7ad7 memory r_2_0_2_0;\n {\n S_b2b4cc84 memory r_2_0_2_0_0;\n {\n int192 r_2_0_2_0_0_0 = -2224774792172874454821033980760415550697583432894874600627;\n r_2_0_2_0_0.s_0 = r_2_0_2_0_0_0;\n }\n {\n address r_2_0_2_0_0_1 = 0x08f4743DB9a99F11140d00e6402E16d71740B735;\n r_2_0_2_0_0.s_1 = r_2_0_2_0_0_1;\n }\n {\n bytes24[2][1][2] memory r_2_0_2_0_0_2;\n {\n bytes24[2][1] memory r_2_0_2_0_0_2_0;\n {\n bytes24[2] memory r_2_0_2_0_0_2_0_0;\n {\n bytes24 r_2_0_2_0_0_2_0_0_0 = bytes24(0x379a51e76631bd9256fbc23f7cfd1d4e4be9dfe0afe882f6);\n r_2_0_2_0_0_2_0_0[0] = r_2_0_2_0_0_2_0_0_0;\n }\n {\n bytes24 r_2_0_2_0_0_2_0_0_1 = bytes24(0x6a0a3dc321e5f028052a713fcab8da26fd11d4a02f2d50e4);\n r_2_0_2_0_0_2_0_0[1] = r_2_0_2_0_0_2_0_0_1;\n }\n r_2_0_2_0_0_2_0[0] = r_2_0_2_0_0_2_0_0;\n }\n r_2_0_2_0_0_2[0] = r_2_0_2_0_0_2_0;\n }\n {\n bytes24[2][1] memory r_2_0_2_0_0_2_1;\n {\n bytes24[2] memory r_2_0_2_0_0_2_1_0;\n {\n bytes24 r_2_0_2_0_0_2_1_0_0 = bytes24(0x24af5d88b7a75c6118507de924cdcd9210f9d4918fc44d44);\n r_2_0_2_0_0_2_1_0[0] = r_2_0_2_0_0_2_1_0_0;\n }\n {\n bytes24 r_2_0_2_0_0_2_1_0_1 = bytes24(0xbd3feb7760944e93b18fe1abc1cb7308d7f09e6a42a0603d);\n r_2_0_2_0_0_2_1_0[1] = r_2_0_2_0_0_2_1_0_1;\n }\n r_2_0_2_0_0_2_1[0] = r_2_0_2_0_0_2_1_0;\n }\n r_2_0_2_0_0_2[1] = r_2_0_2_0_0_2_1;\n }\n r_2_0_2_0_0.s_2 = r_2_0_2_0_0_2;\n }\n r_2_0_2_0.s_0 = r_2_0_2_0_0;\n }\n {\n S_421683f8 memory r_2_0_2_0_1;\n {\n address r_2_0_2_0_1_0 = 0xe19Fb79452E99Dad314A060BF9Cf5A23D430DD59;\n r_2_0_2_0_1.s_0 = r_2_0_2_0_1_0;\n }\n r_2_0_2_0.s_1 = r_2_0_2_0_1;\n }\n r_2_0_2.s_0 = r_2_0_2_0;\n }\n {\n int72 r_2_0_2_1 = 1796091489060553007655;\n r_2_0_2.s_1 = r_2_0_2_1;\n }\n r_2_0[2] = r_2_0_2;\n }\n {\n S_ac16e46e memory r_2_0_3;\n {\n S_beff7ad7 memory r_2_0_3_0;\n {\n S_b2b4cc84 memory r_2_0_3_0_0;\n {\n int192 r_2_0_3_0_0_0 = -877108660701897373797550523867062951038263538988443755777;\n r_2_0_3_0_0.s_0 = r_2_0_3_0_0_0;\n }\n {\n address r_2_0_3_0_0_1 = 0xE2d7128b2252eB3A5AB932D10FF3dfef2EE21893;\n r_2_0_3_0_0.s_1 = r_2_0_3_0_0_1;\n }\n {\n bytes24[2][1][2] memory r_2_0_3_0_0_2;\n {\n bytes24[2][1] memory r_2_0_3_0_0_2_0;\n {\n bytes24[2] memory r_2_0_3_0_0_2_0_0;\n {\n bytes24 r_2_0_3_0_0_2_0_0_0 = bytes24(0xbc4913d510f0b7c7f5da23de672e5f9f89dfdb9729d8e2dd);\n r_2_0_3_0_0_2_0_0[0] = r_2_0_3_0_0_2_0_0_0;\n }\n {\n bytes24 r_2_0_3_0_0_2_0_0_1 = bytes24(0x4d8431b5aac57062cf6b6bc2de50662aa7092da1046f8889);\n r_2_0_3_0_0_2_0_0[1] = r_2_0_3_0_0_2_0_0_1;\n }\n r_2_0_3_0_0_2_0[0] = r_2_0_3_0_0_2_0_0;\n }\n r_2_0_3_0_0_2[0] = r_2_0_3_0_0_2_0;\n }\n {\n bytes24[2][1] memory r_2_0_3_0_0_2_1;\n {\n bytes24[2] memory r_2_0_3_0_0_2_1_0;\n {\n bytes24 r_2_0_3_0_0_2_1_0_0 = bytes24(0x734210bb20eee090582ff93663c40e09b35a1441710b3860);\n r_2_0_3_0_0_2_1_0[0] = r_2_0_3_0_0_2_1_0_0;\n }\n {\n bytes24 r_2_0_3_0_0_2_1_0_1 = bytes24(0x23f32273f10461e28df70e9ccfb8d6b1ba4e3c6d3c9cd99d);\n r_2_0_3_0_0_2_1_0[1] = r_2_0_3_0_0_2_1_0_1;\n }\n r_2_0_3_0_0_2_1[0] = r_2_0_3_0_0_2_1_0;\n }\n r_2_0_3_0_0_2[1] = r_2_0_3_0_0_2_1;\n }\n r_2_0_3_0_0.s_2 = r_2_0_3_0_0_2;\n }\n r_2_0_3_0.s_0 = r_2_0_3_0_0;\n }\n {\n S_421683f8 memory r_2_0_3_0_1;\n {\n address r_2_0_3_0_1_0 = 0x03256F6EC30884bD43edd2314B88Eb19482D0731;\n r_2_0_3_0_1.s_0 = r_2_0_3_0_1_0;\n }\n r_2_0_3_0.s_1 = r_2_0_3_0_1;\n }\n r_2_0_3.s_0 = r_2_0_3_0;\n }\n {\n int72 r_2_0_3_1 = 455491076321424883538;\n r_2_0_3.s_1 = r_2_0_3_1;\n }\n r_2_0[3] = r_2_0_3;\n }\n r_2.s_0 = r_2_0;\n }\n {\n bool r_2_1 = true;\n r_2.s_1 = r_2_1;\n }\n {\n address r_2_2 = 0xB1e426B51B44FC3f6604BD17176F4f71Ff64987D;\n r_2.s_2 = r_2_2;\n }\n {\n address r_2_3 = 0x06817D870E27010396C7040Fef438d22DEEB2097;\n r_2.s_3 = r_2_3;\n }\n {\n string memory r_2_4 = unicode\"Moo é🚀 oM o🚀ooo oM🚀oéééMoééM\";\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n {\n S_421683f8 memory r_3;\n {\n address r_3_0 = 0x4AaFb05Bf4FbA7Af320485f8C23ed6660a9296AB;\n r_3.s_0 = r_3_0;\n }\n r.s_3 = r_3;\n }\n {\n bool r_4 = true;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000fd7ab00ca7078cfa1100a0225ebfb1886d2b07a7000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000004aafb05bf4fba7af320485f8c23ed6660a9296ab0000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffbc9278204600db5ec8c5f2c0a855533a3335ee99bf7a5541000000000000000000000000b4516a85e4f06a10b87efa925f7030f312c0af7ac45a0bde748bef6e4c4a01696daa5998b306af882c1fd2c2000000000000000066f7685af0f65caff78a773d2e6c1732c8ee2cb530ad7a77000000000000000082b3894bc4bbf162818cc748b452b93a2a586fe5ff35a899000000000000000052cf070aeab82755dd77f5d982809fd53c2877b9329bddd70000000000000000000000000000000000000000f69af804c83378d7055aea5c1b132145181d071e00000000000000000000000000000000000000000000007c1687fc2a6fe87eae00000000000000001dbdeed24d3a2581827045aa736f0bd6a11cb1482ef9a4e3000000000000000000000000c2e8ffec40211db6a45dc3246316dd85607b9fbf043170d7a1256dd452523c31c5e47fd21e361d19a0a59bff00000000000000004683c472cb4f98574910744a2e09cd9f765ace2a50568cc200000000000000002fe88292b5c3e64a270d06bea7d153b926d21e6971378a6600000000000000005ec52e709691abc0d730215396b25946848cdb21afc8a89e00000000000000000000000000000000000000009045870bd14161b4e48ba02802df1f2095314d970000000000000000000000000000000000000000000000470fc1be2fb5c0c63dffffffffffffffffa54444729472c87aa0aba4458348c56c87179c40c4b4bb4d00000000000000000000000008f4743db9a99f11140d00e6402e16d71740b735379a51e76631bd9256fbc23f7cfd1d4e4be9dfe0afe882f600000000000000006a0a3dc321e5f028052a713fcab8da26fd11d4a02f2d50e4000000000000000024af5d88b7a75c6118507de924cdcd9210f9d4918fc44d440000000000000000bd3feb7760944e93b18fe1abc1cb7308d7f09e6a42a0603d0000000000000000000000000000000000000000e19fb79452e99dad314a060bf9cf5a23d430dd590000000000000000000000000000000000000000000000615dc6cd3334a8a227ffffffffffffffffdc3a8eecbd0de4d1fca9172fbbcd21961d3339c75e201aff000000000000000000000000e2d7128b2252eb3a5ab932d10ff3dfef2ee21893bc4913d510f0b7c7f5da23de672e5f9f89dfdb9729d8e2dd00000000000000004d8431b5aac57062cf6b6bc2de50662aa7092da1046f88890000000000000000734210bb20eee090582ff93663c40e09b35a1441710b3860000000000000000023f32273f10461e28df70e9ccfb8d6b1ba4e3c6d3c9cd99d000000000000000000000000000000000000000003256f6ec30884bd43edd2314b88eb19482d0731000000000000000000000000000000000000000000000018b135609e82debf520000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b1e426b51b44fc3f6604bd17176f4f71ff64987d00000000000000000000000006817d870e27010396c7040fef438d22deeb20970000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a80206f4d206ff09f9a806f6f6f206f4df09f9a806fc3a9c3a9c3a94d6fc3a9c3a94d000000000000000000000000000000000000000000" + }, + { + "name": "random-(address[4],address,bytes32,address,(uint152,int240[4],bytes23,uint16,(bytes13[1],bytes25[1],address)[1])[1])", + "type": "(address[4],address,bytes32,address,(uint152,int240[4],bytes23,uint16,(bytes13[1],bytes25[1],address)[1])[1])", + "value": [ + [ + "0x111f49399Fb8512Df1312Ae80f80Bf95662774b7", + "0xFf6B37E3387ECff107D3218748dE91D85FaE5AEa", + "0x839bc0EB8241c0Ea732D2a44bdb2517C016A1A93", + "0xeC24e32CeEE2155FCD9065C3b6E9F35Ce176e0F3" + ], + "0xD82c6954EA9Be17129Be0D1C8D5A56D4884aE7cb", + "0x52dcf6eaffc5c1a4f0fbe004ab7134f75bc4505e314398b8ef3c54bfe4df83ca", + "0x0A92033A336e0eae27AF58e72234e82914fbA5F6", + [ + [ + "3469027454968466405983297571281400750976290047", + [ + "-610278884543666526574401058253431345207323422716226652219626071411430455", + "239990749043344641667386646536957086055534660644395940145892653567865879", + "88767191719091573165037898821377228098152873188315466629215211727464768", + "-463802395071770939269398138072493291080548296074361498474328901581243217" + ], + "0xaa5093a832988c8e2d95f637a46e888b5ede9d90ad13ae", + "23499", + [ + [ + ["0xa7e27b77cb8d8f683b1b58c20b"], + ["0xb9d759a5e1cce9e7c5567c9ce6b1859ae2ed36b79df33553de"], + "0x03DA56B80a99d6e55c969F66E7902Abb800B2396" + ] + ] + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x111f49399Fb8512Df1312Ae80f80Bf95662774b7" + }, + { + "type": "address", + "value": "0xFf6B37E3387ECff107D3218748dE91D85FaE5AEa" + }, + { + "type": "address", + "value": "0x839bc0EB8241c0Ea732D2a44bdb2517C016A1A93" + }, + { + "type": "address", + "value": "0xeC24e32CeEE2155FCD9065C3b6E9F35Ce176e0F3" + } + ] + }, + { + "type": "address", + "value": "0xD82c6954EA9Be17129Be0D1C8D5A56D4884aE7cb" + }, + { + "type": "hexstring", + "value": "0x52dcf6eaffc5c1a4f0fbe004ab7134f75bc4505e314398b8ef3c54bfe4df83ca" + }, + { + "type": "address", + "value": "0x0A92033A336e0eae27AF58e72234e82914fbA5F6" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3469027454968466405983297571281400750976290047" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-610278884543666526574401058253431345207323422716226652219626071411430455" + }, + { + "type": "number", + "value": "239990749043344641667386646536957086055534660644395940145892653567865879" + }, + { + "type": "number", + "value": "88767191719091573165037898821377228098152873188315466629215211727464768" + }, + { + "type": "number", + "value": "-463802395071770939269398138072493291080548296074361498474328901581243217" + } + ] + }, + { + "type": "hexstring", + "value": "0xaa5093a832988c8e2d95f637a46e888b5ede9d90ad13ae" + }, + { + "type": "number", + "value": "23499" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xa7e27b77cb8d8f683b1b58c20b" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xb9d759a5e1cce9e7c5567c9ce6b1859ae2ed36b79df33553de" + } + ] + }, + { + "type": "address", + "value": "0x03DA56B80a99d6e55c969F66E7902Abb800B2396" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061060e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610554565b60405180910390f35b6100566102c2565b61005e6102c2565b6100666102fc565b73111f49399fb8512df1312ae80f80bf95662774b7815273ff6b37e3387ecff107d3218748de91d85fae5aea60208083019190915273839bc0eb8241c0ea732d2a44bdb2517c016a1a9360408084019190915273ec24e32ceee2155fcd9065c3b6e9f35ce176e0f360608085019190915292845273d82c6954ea9be17129be0d1c8d5a56d4884ae7cb918401919091527f52dcf6eaffc5c1a4f0fbe004ab7134f75bc4505e314398b8ef3c54bfe4df83ca90830152730a92033a336e0eae27af58e72234e82914fba5f69082015261013c61031a565b610144610347565b729b8e7b70be8572d240fef62e65baac5c244cff81526101626102fc565b7fffffa7937f820cdee9052d3c066d739b45a12ac64fb74a4f0f68164a162b6bc981527d22c5c06a783510d997fd34599b2e2b21e72410dd66a6e1183108375074176020808301919091527d0cdc8ee1f012d6af7284d1dfcd7d30d44f665fb3bab2c3473d45c531a9406040808401919091527fffffbccc9cefdbfa607bc60778b29ae7d079ea8ca85790f053a65f8030647caf606080850191909152918401929092527faa5093a832988c8e2d95f637a46e888b5ede9d90ad13ae00000000000000000091830191909152615bcb9082015261023d610381565b6102456103ae565b61024d6103db565b6ca7e27b77cb8d8f683b1b58c20b60981b8152815261026a6103db565b7fb9d759a5e1cce9e7c5567c9ce6b1859ae2ed36b79df33553de00000000000000815260208201527303da56b80a99d6e55c969f66e7902abb800b239660408201528152608082810191909152908252820152919050565b6040518060a001604052806102d56102fc565b81526000602082018190526040820181905260608201526080016102f761031a565b905290565b60405180608001604052806004906020820280368337509192915050565b60405180602001604052806001905b610331610347565b8152602001906001900390816103295790505090565b6040518060a0016040528060006001600160981b0316815260200161036a6102fc565b815260006020820181905260408201526060016102f75b60405180602001604052806001905b6103986103ae565b8152602001906001900390816103905790505090565b60405180606001604052806103c16103db565b81526020016103ce6103db565b8152600060209091015290565b60405180602001604052806001906020820280368337509192915050565b8060005b600180821061040c57506104a8565b825180518660005b8481101561044757825172ffffffffffffffffffffffffffffffffffffff19168252602092830192909101908401610414565b50505060208082015181880160005b8581101561047b57825166ffffffffffffff1916825291830191908301908501610456565b5050506040918201516001600160a01b0316918701919091526060909501949290920191506001016103fd565b50505050565b806000805b60018082106104c2575061054d565b83516001600160981b038151168752602080820151818901865b60048110156104fb578251601d0b8252918301919083019085016104dc565b505050604082015168ffffffffffffffffff191660a0890152606082015161ffff1660c08901526080820151925061053660e08901846103f9565b6101409790970196949094019350506001016104b3565b5050505050565b81516102208201908260005b60048110156105885782516001600160a01b0316825260209283019290910190600101610560565b50505060208301516001600160a01b038116608084015250604083015160a083015260608301516001600160a01b03811660c08401525060808301516105d160e08401826104ae565b509291505056fea26469706673582212207d4f24536371abc0ff0a48f6e1ebef71822dd2419c939ffac7b416d00a19160b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_53479498 {\n bytes13[1] s_0;\n bytes25[1] s_1;\n address s_2;\n }\n\n struct S_23f8ac80 {\n uint152 s_0;\n int240[4] s_1;\n bytes23 s_2;\n uint16 s_3;\n S_53479498[1] s_4;\n }\n\n struct S_6c15860a {\n address[4] s_0;\n address s_1;\n bytes32 s_2;\n address s_3;\n S_23f8ac80[1] s_4;\n }\n\n function test () public pure returns (S_6c15860a memory) {\n S_6c15860a memory r;\n {\n address[4] memory r_0;\n {\n address r_0_0 = 0x111f49399Fb8512Df1312Ae80f80Bf95662774b7;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0xFf6B37E3387ECff107D3218748dE91D85FaE5AEa;\n r_0[1] = r_0_1;\n }\n {\n address r_0_2 = 0x839bc0EB8241c0Ea732D2a44bdb2517C016A1A93;\n r_0[2] = r_0_2;\n }\n {\n address r_0_3 = 0xeC24e32CeEE2155FCD9065C3b6E9F35Ce176e0F3;\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xD82c6954EA9Be17129Be0D1C8D5A56D4884aE7cb;\n r.s_1 = r_1;\n }\n {\n bytes32 r_2 = bytes32(0x52dcf6eaffc5c1a4f0fbe004ab7134f75bc4505e314398b8ef3c54bfe4df83ca);\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x0A92033A336e0eae27AF58e72234e82914fbA5F6;\n r.s_3 = r_3;\n }\n {\n S_23f8ac80[1] memory r_4;\n {\n S_23f8ac80 memory r_4_0;\n {\n uint152 r_4_0_0 = 3469027454968466405983297571281400750976290047;\n r_4_0.s_0 = r_4_0_0;\n }\n {\n int240[4] memory r_4_0_1;\n {\n int240 r_4_0_1_0 = -610278884543666526574401058253431345207323422716226652219626071411430455;\n r_4_0_1[0] = r_4_0_1_0;\n }\n {\n int240 r_4_0_1_1 = 239990749043344641667386646536957086055534660644395940145892653567865879;\n r_4_0_1[1] = r_4_0_1_1;\n }\n {\n int240 r_4_0_1_2 = 88767191719091573165037898821377228098152873188315466629215211727464768;\n r_4_0_1[2] = r_4_0_1_2;\n }\n {\n int240 r_4_0_1_3 = -463802395071770939269398138072493291080548296074361498474328901581243217;\n r_4_0_1[3] = r_4_0_1_3;\n }\n r_4_0.s_1 = r_4_0_1;\n }\n {\n bytes23 r_4_0_2 = bytes23(0xaa5093a832988c8e2d95f637a46e888b5ede9d90ad13ae);\n r_4_0.s_2 = r_4_0_2;\n }\n {\n uint16 r_4_0_3 = 23499;\n r_4_0.s_3 = r_4_0_3;\n }\n {\n S_53479498[1] memory r_4_0_4;\n {\n S_53479498 memory r_4_0_4_0;\n {\n bytes13[1] memory r_4_0_4_0_0;\n {\n bytes13 r_4_0_4_0_0_0 = bytes13(0xa7e27b77cb8d8f683b1b58c20b);\n r_4_0_4_0_0[0] = r_4_0_4_0_0_0;\n }\n r_4_0_4_0.s_0 = r_4_0_4_0_0;\n }\n {\n bytes25[1] memory r_4_0_4_0_1;\n {\n bytes25 r_4_0_4_0_1_0 = bytes25(0xb9d759a5e1cce9e7c5567c9ce6b1859ae2ed36b79df33553de);\n r_4_0_4_0_1[0] = r_4_0_4_0_1_0;\n }\n r_4_0_4_0.s_1 = r_4_0_4_0_1;\n }\n {\n address r_4_0_4_0_2 = 0x03DA56B80a99d6e55c969F66E7902Abb800B2396;\n r_4_0_4_0.s_2 = r_4_0_4_0_2;\n }\n r_4_0_4[0] = r_4_0_4_0;\n }\n r_4_0.s_4 = r_4_0_4;\n }\n r_4[0] = r_4_0;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000111f49399fb8512df1312ae80f80bf95662774b7000000000000000000000000ff6b37e3387ecff107d3218748de91d85fae5aea000000000000000000000000839bc0eb8241c0ea732d2a44bdb2517c016a1a93000000000000000000000000ec24e32ceee2155fcd9065c3b6e9f35ce176e0f3000000000000000000000000d82c6954ea9be17129be0d1c8d5a56d4884ae7cb52dcf6eaffc5c1a4f0fbe004ab7134f75bc4505e314398b8ef3c54bfe4df83ca0000000000000000000000000a92033a336e0eae27af58e72234e82914fba5f6000000000000000000000000009b8e7b70be8572d240fef62e65baac5c244cffffffa7937f820cdee9052d3c066d739b45a12ac64fb74a4f0f68164a162b6bc9000022c5c06a783510d997fd34599b2e2b21e72410dd66a6e11831083750741700000cdc8ee1f012d6af7284d1dfcd7d30d44f665fb3bab2c3473d45c531a940ffffbccc9cefdbfa607bc60778b29ae7d079ea8ca85790f053a65f8030647cafaa5093a832988c8e2d95f637a46e888b5ede9d90ad13ae0000000000000000000000000000000000000000000000000000000000000000000000000000005bcba7e27b77cb8d8f683b1b58c20b00000000000000000000000000000000000000b9d759a5e1cce9e7c5567c9ce6b1859ae2ed36b79df33553de0000000000000000000000000000000000000003da56b80a99d6e55c969f66e7902abb800b2396" + }, + { + "name": "random-(bool[4],(address[3],bool,((bool[2],address,int256[4],bool),address))[3],bool[][2][])", + "type": "(bool[4],(address[3],bool,((bool[2],address,int256[4],bool),address))[3],bool[][2][])", + "value": [ + [true, true, true, false], + [ + [ + [ + "0x6FD0c51233F26cD32C0D3ed81689371AfD6B3393", + "0xdbF7270EcbF21Fc2D4eaDef4BC0237169E6Cfefd", + "0x534e181a1BF782a6479210AAb1F92FC16e76C709" + ], + false, + [ + [ + [true, false], + "0x97D4bF4198407CF1d0a48329B8FF669bF0E4e98E", + [ + "43717326077816838296666351446801400798342795393702095434648935507386426911068", + "-40026100810336195068279683604426924390758992293733033016275353698710966376856", + "-50743723834276728942893096667496680051408620224594068383719488616863028925939", + "14720210771419083899651258551616407497766249053263605701942335157773547156361" + ], + true + ], + "0xa887B14be68589Fe81807F50f8b0058A7dB702E5" + ] + ], + [ + [ + "0x769D5cFd7294965a5A4ad97B9393582d5F334aF4", + "0x7D6B37F30Add3A3b81cd6B83E6756D64c85e6f77", + "0x430bea1C909a10b2E6BcAA008088f7b5C5229eac" + ], + true, + [ + [ + [false, true], + "0xE30DB9261906c98F2302Bde793C7C9DfC2498496", + [ + "-15555662859501656261692537281179499343414883352409691925539572777967206498014", + "-57845050639978682714478682296853572272480323748868659017777957763269739213907", + "-38815776483839195269821127658089282398460513147570736870397284035890214163480", + "-40736916093614860070667216078369698562970043394344133089444487185068890857496" + ], + true + ], + "0xe4b0ebe5681819b7E400DE1De4499c41D305556C" + ] + ], + [ + [ + "0x354fc1BFcaf660Ec26C7AeB2E7cB4410d0613B2C", + "0x3B4474C69d14Af77f5F917D599C59F7549b5CdE6", + "0x5877C10Fd261BB6c543eb82f65511ceB3df7e60F" + ], + true, + [ + [ + [true, false], + "0x22B9F591517D1d9331618506B382eFAAB0fa5607", + [ + "-21462331976415269489443528535689658952426945085984897618405260761783513445449", + "-32712474771254250389717773471128669032394860371741371180691387571445760097552", + "14601382676250904256765862346792007485507337020667717959036628067124897143647", + "28952005482379120569167190714305978135939653433438129247606068936384498553229" + ], + false + ], + "0xb8446F349716C7ede06032f36441A3b0E90C2466" + ] + ] + ], + [ + [ + [false, true, true], + [true, false] + ], + [ + [true, true], + [true, false] + ], + [[false], [false, false, true]], + [[false, false, false, true], [false]] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x6FD0c51233F26cD32C0D3ed81689371AfD6B3393" + }, + { + "type": "address", + "value": "0xdbF7270EcbF21Fc2D4eaDef4BC0237169E6Cfefd" + }, + { + "type": "address", + "value": "0x534e181a1BF782a6479210AAb1F92FC16e76C709" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x97D4bF4198407CF1d0a48329B8FF669bF0E4e98E" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "43717326077816838296666351446801400798342795393702095434648935507386426911068" + }, + { + "type": "number", + "value": "-40026100810336195068279683604426924390758992293733033016275353698710966376856" + }, + { + "type": "number", + "value": "-50743723834276728942893096667496680051408620224594068383719488616863028925939" + }, + { + "type": "number", + "value": "14720210771419083899651258551616407497766249053263605701942335157773547156361" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0xa887B14be68589Fe81807F50f8b0058A7dB702E5" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x769D5cFd7294965a5A4ad97B9393582d5F334aF4" + }, + { + "type": "address", + "value": "0x7D6B37F30Add3A3b81cd6B83E6756D64c85e6f77" + }, + { + "type": "address", + "value": "0x430bea1C909a10b2E6BcAA008088f7b5C5229eac" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0xE30DB9261906c98F2302Bde793C7C9DfC2498496" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-15555662859501656261692537281179499343414883352409691925539572777967206498014" + }, + { + "type": "number", + "value": "-57845050639978682714478682296853572272480323748868659017777957763269739213907" + }, + { + "type": "number", + "value": "-38815776483839195269821127658089282398460513147570736870397284035890214163480" + }, + { + "type": "number", + "value": "-40736916093614860070667216078369698562970043394344133089444487185068890857496" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0xe4b0ebe5681819b7E400DE1De4499c41D305556C" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x354fc1BFcaf660Ec26C7AeB2E7cB4410d0613B2C" + }, + { + "type": "address", + "value": "0x3B4474C69d14Af77f5F917D599C59F7549b5CdE6" + }, + { + "type": "address", + "value": "0x5877C10Fd261BB6c543eb82f65511ceB3df7e60F" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x22B9F591517D1d9331618506B382eFAAB0fa5607" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-21462331976415269489443528535689658952426945085984897618405260761783513445449" + }, + { + "type": "number", + "value": "-32712474771254250389717773471128669032394860371741371180691387571445760097552" + }, + { + "type": "number", + "value": "14601382676250904256765862346792007485507337020667717959036628067124897143647" + }, + { + "type": "number", + "value": "28952005482379120569167190714305978135939653433438129247606068936384498553229" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0xb8446F349716C7ede06032f36441A3b0E90C2466" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610de9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610c35565b60405180910390f35b610056610a3d565b61005e610a3d565b610066610a6a565b6001808252602082018190526040820152600060608201528152610088610a88565b610090610ab5565b610098610ae1565b736fd0c51233f26cd32c0d3ed81689371afd6b3393815273dbf7270ecbf21fc2d4eadef4bc0237169e6cfefd60208083019190915273534e181a1bf782a6479210aab1f92fc16e76c70960408301529082526000908201526100f8610aff565b610100610b1f565b610108610b46565b6001815260006020808301919091529082527397d4bf4198407cf1d0a48329b8ff669bf0e4e98e9082015261013b610a6a565b7f60a72133cb619cd576a86f0737a227973f7988a6a7a0664f3eb251733c1ae95c81527fa782079edcd76b615432c97808ef71a94c7718b909830fdae7ebac4973e9e6686020808301919091527f8fd011f2737fc841e053ea477073eb89eb4edc8fecd6a5cdecdef55100a92a0d6040808401919091527f208b581353df7e26a88ea45bb5d0904ed3fb5eb4ee99b4067a310eddc71533896060808501919091528482019390935260019284019290925291835273a887b14be68589fe81807f50f8b0058a7db702e5918301919091528201528152610218610ab5565b610220610ae1565b73769d5cfd7294965a5a4ad97b9393582d5f334af48152737d6b37f30add3a3b81cd6b83e6756d64c85e6f7760208083019190915273430bea1c909a10b2e6bcaa008088f7b5c5229eac6040830152908252600190820152610280610aff565b610288610b1f565b610290610b46565b60008152600160208083019190915290825273e30db9261906c98f2302bde793c7c9dfc2498496908201526102c3610a6a565b7fdd9bce8c6f6705d732309925190d61653dbcdae5fbc8b91c862eeb9426d0812281527f801cdc8fcb2d1c7c4d1e2cc57cdc28bc300453fb4921bf60fdf633ad86230bad6020808301919091527faa2f0c8f396f520518d486b7df637042bc55b42d60eeded16ce130b7827eabe86040808401919091527fa5efb8faa7bf5a9da10275f12265fb659e537946248289552906c44138d2dfe86060808501919091528482019390935260019284019290925291835273e4b0ebe5681819b7e400de1de4499c41d305556c838301528301919091528201526103a1610ab5565b6103a9610ae1565b73354fc1bfcaf660ec26c7aeb2e7cb4410d0613b2c8152733b4474c69d14af77f5f917d599c59f7549b5cde6602080830191909152735877c10fd261bb6c543eb82f65511ceb3df7e60f6040830152908252600190820152610409610aff565b610411610b1f565b610419610b46565b6001815260006020808301919091529082527322b9f591517d1d9331618506b382efaab0fa56079082015261044c610a6a565b7fd08cc0263ff64681e2b9b48b569198a7c4470bbbb1c5fb8476620298ba3b0bb781527fb7ad6539be18d44ce82e74b9bc8c226e435c5dd28ce9018274e57c66dbf682f06020808301919091527f204816f8501a9e301ce4ab537bc46ffb87478f0fe77d7f0e030fa51cdb085b5f6040808401919091527f40024120198a401a790786a2e2629be3818419306a1b02e5621d1352223ad18d60608085019190915284820193909352600092840183905292845273b8446f349716c7ede06032f36441a3b0e90c2466848201528483019390935284820193909352908401929092528151600480825260a082019093529091816020015b61054a610b64565b815260200190600190039081610542579050509050610567610b64565b6040805160038082526080820190925260009160208201606080368337019050509050600080826000815181106105a0576105a0610d9d565b6020026020010190151590811515815250505060006001905080826001815181106105cd576105cd610d9d565b6020026020010190151590811515815250505060006001905080826002815181106105fa576105fa610d9d565b9115156020928302919091019091015250815260408051600280825260608201909252600091816020016020820280368337019050509050600060019050808260008151811061064c5761064c610d9d565b602002602001019015159081151581525050506000808260018151811061067557610675610d9d565b911515602092830291909101820152830191909152508151819083906000906106a0576106a0610d9d565b6020026020010181905250506106b4610b64565b60408051600280825260608201835260009260208301908036833701905050905060006001905080826000815181106106ef576106ef610d9d565b60200260200101901515908115158152505050600060019050808260018151811061071c5761071c610d9d565b9115156020928302919091019091015250815260408051600280825260608201909252600091816020016020820280368337019050509050600060019050808260008151811061076e5761076e610d9d565b602002602001019015159081151581525050506000808260018151811061079757610797610d9d565b9115156020928302919091018201528301919091525081518190839060019081106107c4576107c4610d9d565b6020026020010181905250506107d8610b64565b604080516001808252818301909252600091602080830190803683370190505090506000808260008151811061081057610810610d9d565b91151560209283029190910190910152508152604080516003808252608082019092526000918160200160208202803683370190505090506000808260008151811061085e5761085e610d9d565b602002602001019015159081151581525050506000808260018151811061088757610887610d9d565b6020026020010190151590811515815250505060006001905080826002815181106108b4576108b4610d9d565b9115156020928302919091018201528301919091525081518190839060029081106108e1576108e1610d9d565b6020026020010181905250506108f5610b64565b60408051600480825260a08201909252600091602082016080803683370190505090506000808260008151811061092e5761092e610d9d565b602002602001019015159081151581525050506000808260018151811061095757610957610d9d565b602002602001019015159081151581525050506000808260028151811061098057610980610d9d565b6020026020010190151590811515815250505060006001905080826003815181106109ad576109ad610d9d565b91151560209283029190910190910152508152604080516001808252818301909252600091816020016020820280368337019050509050600080826000815181106109fa576109fa610d9d565b911515602092830291909101820152830191909152508151819083906003908110610a2757610a27610d9d565b6020908102919091010152506040820152919050565b6040518060600160405280610a50610a6a565b8152602001610a5d610a88565b8152602001606081525090565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003905b610a9f610ab5565b815260200190600190039081610a975790505090565b6040518060600160405280610ac8610ae1565b815260006020820152604001610adc610aff565b905290565b60405180606001604052806003906020820280368337509192915050565b6040518060400160405280610b12610b1f565b8152600060209091015290565b6040518060800160405280610b32610b46565b815260006020820152604001610b12610a6a565b60405180604001604052806002906020820280368337509192915050565b60405180604001604052806002905b6060815260200190600190039081610b735790505090565b600081518084526020808501808196508360051b8101915082860160005b85811015610c285782840389528151846040810160005b6002811015610c1357878203835283518051808452908a01908a84019060005b81811015610bfe57835115158352928c0192918c0191600101610be0565b5050948a0194938a0193925050600101610bc0565b509a87019a9550505090840190600101610ba9565b5091979650505050505050565b6020808252825160009190828483015b6004821015610c665782511515815291830191600191909101908301610c45565b5050508084015160a0840160005b6003808210610c835750610d77565b835180518460005b84811015610cb05782516001600160a01b031682529188019190880190600101610c8b565b505050808601511515606085810191909152604091820151805180519394509092906000608088015b6002821015610cfa57835115158152928a0192600191909101908a01610cd9565b5050808901516001600160a01b031660c0880152938401519360e08701915060005b6004811015610d3957855183529489019491890191600101610d1c565b50909101519250610d51905061016085018315159052565b8501516001600160a01b031661018084015250918301916101a090910190600101610c74565b50505050604083015161058083810152610d956105a0840182610b8b565b949350505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212200874ed124d3c5a02e10238065f85d04e5506b3b96e0b1743dbe0c3ef1ead77e164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6a3289d8 {\n bool[2] s_0;\n address s_1;\n int256[4] s_2;\n bool s_3;\n }\n\n struct S_27afd0b8 {\n S_6a3289d8 s_0;\n address s_1;\n }\n\n struct S_88bb0a4f {\n address[3] s_0;\n bool s_1;\n S_27afd0b8 s_2;\n }\n\n struct S_7418da87 {\n bool[4] s_0;\n S_88bb0a4f[3] s_1;\n bool[][2][] s_2;\n }\n\n function test () public pure returns (S_7418da87 memory) {\n S_7418da87 memory r;\n {\n bool[4] memory r_0;\n {\n bool r_0_0 = true;\n r_0[0] = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0[1] = r_0_1;\n }\n {\n bool r_0_2 = true;\n r_0[2] = r_0_2;\n }\n {\n bool r_0_3 = false;\n r_0[3] = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n S_88bb0a4f[3] memory r_1;\n {\n S_88bb0a4f memory r_1_0;\n {\n address[3] memory r_1_0_0;\n {\n address r_1_0_0_0 = 0x6FD0c51233F26cD32C0D3ed81689371AfD6B3393;\n r_1_0_0[0] = r_1_0_0_0;\n }\n {\n address r_1_0_0_1 = 0xdbF7270EcbF21Fc2D4eaDef4BC0237169E6Cfefd;\n r_1_0_0[1] = r_1_0_0_1;\n }\n {\n address r_1_0_0_2 = 0x534e181a1BF782a6479210AAb1F92FC16e76C709;\n r_1_0_0[2] = r_1_0_0_2;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bool r_1_0_1 = false;\n r_1_0.s_1 = r_1_0_1;\n }\n {\n S_27afd0b8 memory r_1_0_2;\n {\n S_6a3289d8 memory r_1_0_2_0;\n {\n bool[2] memory r_1_0_2_0_0;\n {\n bool r_1_0_2_0_0_0 = true;\n r_1_0_2_0_0[0] = r_1_0_2_0_0_0;\n }\n {\n bool r_1_0_2_0_0_1 = false;\n r_1_0_2_0_0[1] = r_1_0_2_0_0_1;\n }\n r_1_0_2_0.s_0 = r_1_0_2_0_0;\n }\n {\n address r_1_0_2_0_1 = 0x97D4bF4198407CF1d0a48329B8FF669bF0E4e98E;\n r_1_0_2_0.s_1 = r_1_0_2_0_1;\n }\n {\n int256[4] memory r_1_0_2_0_2;\n {\n int256 r_1_0_2_0_2_0 = 43717326077816838296666351446801400798342795393702095434648935507386426911068;\n r_1_0_2_0_2[0] = r_1_0_2_0_2_0;\n }\n {\n int256 r_1_0_2_0_2_1 = -40026100810336195068279683604426924390758992293733033016275353698710966376856;\n r_1_0_2_0_2[1] = r_1_0_2_0_2_1;\n }\n {\n int256 r_1_0_2_0_2_2 = -50743723834276728942893096667496680051408620224594068383719488616863028925939;\n r_1_0_2_0_2[2] = r_1_0_2_0_2_2;\n }\n {\n int256 r_1_0_2_0_2_3 = 14720210771419083899651258551616407497766249053263605701942335157773547156361;\n r_1_0_2_0_2[3] = r_1_0_2_0_2_3;\n }\n r_1_0_2_0.s_2 = r_1_0_2_0_2;\n }\n {\n bool r_1_0_2_0_3 = true;\n r_1_0_2_0.s_3 = r_1_0_2_0_3;\n }\n r_1_0_2.s_0 = r_1_0_2_0;\n }\n {\n address r_1_0_2_1 = 0xa887B14be68589Fe81807F50f8b0058A7dB702E5;\n r_1_0_2.s_1 = r_1_0_2_1;\n }\n r_1_0.s_2 = r_1_0_2;\n }\n r_1[0] = r_1_0;\n }\n {\n S_88bb0a4f memory r_1_1;\n {\n address[3] memory r_1_1_0;\n {\n address r_1_1_0_0 = 0x769D5cFd7294965a5A4ad97B9393582d5F334aF4;\n r_1_1_0[0] = r_1_1_0_0;\n }\n {\n address r_1_1_0_1 = 0x7D6B37F30Add3A3b81cd6B83E6756D64c85e6f77;\n r_1_1_0[1] = r_1_1_0_1;\n }\n {\n address r_1_1_0_2 = 0x430bea1C909a10b2E6BcAA008088f7b5C5229eac;\n r_1_1_0[2] = r_1_1_0_2;\n }\n r_1_1.s_0 = r_1_1_0;\n }\n {\n bool r_1_1_1 = true;\n r_1_1.s_1 = r_1_1_1;\n }\n {\n S_27afd0b8 memory r_1_1_2;\n {\n S_6a3289d8 memory r_1_1_2_0;\n {\n bool[2] memory r_1_1_2_0_0;\n {\n bool r_1_1_2_0_0_0 = false;\n r_1_1_2_0_0[0] = r_1_1_2_0_0_0;\n }\n {\n bool r_1_1_2_0_0_1 = true;\n r_1_1_2_0_0[1] = r_1_1_2_0_0_1;\n }\n r_1_1_2_0.s_0 = r_1_1_2_0_0;\n }\n {\n address r_1_1_2_0_1 = 0xE30DB9261906c98F2302Bde793C7C9DfC2498496;\n r_1_1_2_0.s_1 = r_1_1_2_0_1;\n }\n {\n int256[4] memory r_1_1_2_0_2;\n {\n int256 r_1_1_2_0_2_0 = -15555662859501656261692537281179499343414883352409691925539572777967206498014;\n r_1_1_2_0_2[0] = r_1_1_2_0_2_0;\n }\n {\n int256 r_1_1_2_0_2_1 = -57845050639978682714478682296853572272480323748868659017777957763269739213907;\n r_1_1_2_0_2[1] = r_1_1_2_0_2_1;\n }\n {\n int256 r_1_1_2_0_2_2 = -38815776483839195269821127658089282398460513147570736870397284035890214163480;\n r_1_1_2_0_2[2] = r_1_1_2_0_2_2;\n }\n {\n int256 r_1_1_2_0_2_3 = -40736916093614860070667216078369698562970043394344133089444487185068890857496;\n r_1_1_2_0_2[3] = r_1_1_2_0_2_3;\n }\n r_1_1_2_0.s_2 = r_1_1_2_0_2;\n }\n {\n bool r_1_1_2_0_3 = true;\n r_1_1_2_0.s_3 = r_1_1_2_0_3;\n }\n r_1_1_2.s_0 = r_1_1_2_0;\n }\n {\n address r_1_1_2_1 = 0xe4b0ebe5681819b7E400DE1De4499c41D305556C;\n r_1_1_2.s_1 = r_1_1_2_1;\n }\n r_1_1.s_2 = r_1_1_2;\n }\n r_1[1] = r_1_1;\n }\n {\n S_88bb0a4f memory r_1_2;\n {\n address[3] memory r_1_2_0;\n {\n address r_1_2_0_0 = 0x354fc1BFcaf660Ec26C7AeB2E7cB4410d0613B2C;\n r_1_2_0[0] = r_1_2_0_0;\n }\n {\n address r_1_2_0_1 = 0x3B4474C69d14Af77f5F917D599C59F7549b5CdE6;\n r_1_2_0[1] = r_1_2_0_1;\n }\n {\n address r_1_2_0_2 = 0x5877C10Fd261BB6c543eb82f65511ceB3df7e60F;\n r_1_2_0[2] = r_1_2_0_2;\n }\n r_1_2.s_0 = r_1_2_0;\n }\n {\n bool r_1_2_1 = true;\n r_1_2.s_1 = r_1_2_1;\n }\n {\n S_27afd0b8 memory r_1_2_2;\n {\n S_6a3289d8 memory r_1_2_2_0;\n {\n bool[2] memory r_1_2_2_0_0;\n {\n bool r_1_2_2_0_0_0 = true;\n r_1_2_2_0_0[0] = r_1_2_2_0_0_0;\n }\n {\n bool r_1_2_2_0_0_1 = false;\n r_1_2_2_0_0[1] = r_1_2_2_0_0_1;\n }\n r_1_2_2_0.s_0 = r_1_2_2_0_0;\n }\n {\n address r_1_2_2_0_1 = 0x22B9F591517D1d9331618506B382eFAAB0fa5607;\n r_1_2_2_0.s_1 = r_1_2_2_0_1;\n }\n {\n int256[4] memory r_1_2_2_0_2;\n {\n int256 r_1_2_2_0_2_0 = -21462331976415269489443528535689658952426945085984897618405260761783513445449;\n r_1_2_2_0_2[0] = r_1_2_2_0_2_0;\n }\n {\n int256 r_1_2_2_0_2_1 = -32712474771254250389717773471128669032394860371741371180691387571445760097552;\n r_1_2_2_0_2[1] = r_1_2_2_0_2_1;\n }\n {\n int256 r_1_2_2_0_2_2 = 14601382676250904256765862346792007485507337020667717959036628067124897143647;\n r_1_2_2_0_2[2] = r_1_2_2_0_2_2;\n }\n {\n int256 r_1_2_2_0_2_3 = 28952005482379120569167190714305978135939653433438129247606068936384498553229;\n r_1_2_2_0_2[3] = r_1_2_2_0_2_3;\n }\n r_1_2_2_0.s_2 = r_1_2_2_0_2;\n }\n {\n bool r_1_2_2_0_3 = false;\n r_1_2_2_0.s_3 = r_1_2_2_0_3;\n }\n r_1_2_2.s_0 = r_1_2_2_0;\n }\n {\n address r_1_2_2_1 = 0xb8446F349716C7ede06032f36441A3b0E90C2466;\n r_1_2_2.s_1 = r_1_2_2_1;\n }\n r_1_2.s_2 = r_1_2_2;\n }\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n bool[][2][] memory r_2 = new bool[][2][](4);\n {\n bool[][2] memory r_2_0;\n {\n bool[] memory r_2_0_0 = new bool[](3);\n {\n bool r_2_0_0_0 = false;\n r_2_0_0[0] = r_2_0_0_0;\n }\n {\n bool r_2_0_0_1 = true;\n r_2_0_0[1] = r_2_0_0_1;\n }\n {\n bool r_2_0_0_2 = true;\n r_2_0_0[2] = r_2_0_0_2;\n }\n r_2_0[0] = r_2_0_0;\n }\n {\n bool[] memory r_2_0_1 = new bool[](2);\n {\n bool r_2_0_1_0 = true;\n r_2_0_1[0] = r_2_0_1_0;\n }\n {\n bool r_2_0_1_1 = false;\n r_2_0_1[1] = r_2_0_1_1;\n }\n r_2_0[1] = r_2_0_1;\n }\n r_2[0] = r_2_0;\n }\n {\n bool[][2] memory r_2_1;\n {\n bool[] memory r_2_1_0 = new bool[](2);\n {\n bool r_2_1_0_0 = true;\n r_2_1_0[0] = r_2_1_0_0;\n }\n {\n bool r_2_1_0_1 = true;\n r_2_1_0[1] = r_2_1_0_1;\n }\n r_2_1[0] = r_2_1_0;\n }\n {\n bool[] memory r_2_1_1 = new bool[](2);\n {\n bool r_2_1_1_0 = true;\n r_2_1_1[0] = r_2_1_1_0;\n }\n {\n bool r_2_1_1_1 = false;\n r_2_1_1[1] = r_2_1_1_1;\n }\n r_2_1[1] = r_2_1_1;\n }\n r_2[1] = r_2_1;\n }\n {\n bool[][2] memory r_2_2;\n {\n bool[] memory r_2_2_0 = new bool[](1);\n {\n bool r_2_2_0_0 = false;\n r_2_2_0[0] = r_2_2_0_0;\n }\n r_2_2[0] = r_2_2_0;\n }\n {\n bool[] memory r_2_2_1 = new bool[](3);\n {\n bool r_2_2_1_0 = false;\n r_2_2_1[0] = r_2_2_1_0;\n }\n {\n bool r_2_2_1_1 = false;\n r_2_2_1[1] = r_2_2_1_1;\n }\n {\n bool r_2_2_1_2 = true;\n r_2_2_1[2] = r_2_2_1_2;\n }\n r_2_2[1] = r_2_2_1;\n }\n r_2[2] = r_2_2;\n }\n {\n bool[][2] memory r_2_3;\n {\n bool[] memory r_2_3_0 = new bool[](4);\n {\n bool r_2_3_0_0 = false;\n r_2_3_0[0] = r_2_3_0_0;\n }\n {\n bool r_2_3_0_1 = false;\n r_2_3_0[1] = r_2_3_0_1;\n }\n {\n bool r_2_3_0_2 = false;\n r_2_3_0[2] = r_2_3_0_2;\n }\n {\n bool r_2_3_0_3 = true;\n r_2_3_0[3] = r_2_3_0_3;\n }\n r_2_3[0] = r_2_3_0;\n }\n {\n bool[] memory r_2_3_1 = new bool[](1);\n {\n bool r_2_3_1_0 = false;\n r_2_3_1[0] = r_2_3_1_0;\n }\n r_2_3[1] = r_2_3_1;\n }\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000006fd0c51233f26cd32c0d3ed81689371afd6b3393000000000000000000000000dbf7270ecbf21fc2d4eadef4bc0237169e6cfefd000000000000000000000000534e181a1bf782a6479210aab1f92fc16e76c70900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097d4bf4198407cf1d0a48329b8ff669bf0e4e98e60a72133cb619cd576a86f0737a227973f7988a6a7a0664f3eb251733c1ae95ca782079edcd76b615432c97808ef71a94c7718b909830fdae7ebac4973e9e6688fd011f2737fc841e053ea477073eb89eb4edc8fecd6a5cdecdef55100a92a0d208b581353df7e26a88ea45bb5d0904ed3fb5eb4ee99b4067a310eddc71533890000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a887b14be68589fe81807f50f8b0058a7db702e5000000000000000000000000769d5cfd7294965a5a4ad97b9393582d5f334af40000000000000000000000007d6b37f30add3a3b81cd6b83e6756d64c85e6f77000000000000000000000000430bea1c909a10b2e6bcaa008088f7b5c5229eac000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e30db9261906c98f2302bde793c7c9dfc2498496dd9bce8c6f6705d732309925190d61653dbcdae5fbc8b91c862eeb9426d08122801cdc8fcb2d1c7c4d1e2cc57cdc28bc300453fb4921bf60fdf633ad86230badaa2f0c8f396f520518d486b7df637042bc55b42d60eeded16ce130b7827eabe8a5efb8faa7bf5a9da10275f12265fb659e537946248289552906c44138d2dfe80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e4b0ebe5681819b7e400de1de4499c41d305556c000000000000000000000000354fc1bfcaf660ec26c7aeb2e7cb4410d0613b2c0000000000000000000000003b4474c69d14af77f5f917d599c59f7549b5cde60000000000000000000000005877c10fd261bb6c543eb82f65511ceb3df7e60f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022b9f591517d1d9331618506b382efaab0fa5607d08cc0263ff64681e2b9b48b569198a7c4470bbbb1c5fb8476620298ba3b0bb7b7ad6539be18d44ce82e74b9bc8c226e435c5dd28ce9018274e57c66dbf682f0204816f8501a9e301ce4ab537bc46ffb87478f0fe77d7f0e030fa51cdb085b5f40024120198a401a790786a2e2629be3818419306a1b02e5621d1352223ad18d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b8446f349716c7ede06032f36441a3b0e90c246600000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,int152,bool,((bytes30[3],address,bool),((address,bytes4[2],bool),bool,bool,string)[4][2])[])", + "type": "(string,int152,bool,((bytes30[3],address,bool),((address,bytes4[2],bool),bool,bool,string)[4][2])[])", + "value": [ + "Moo é🚀éooé oo🚀é 🚀oMéoM🚀 🚀o oMooMoMoéo🚀🚀ooo🚀 M", + "1038682924496575370524636657733852580279327620", + true, + [ + [ + [ + [ + "0x571fcb17d306a515b63760c952f3d264c004e9b94e745933b1755c3708e9", + "0xd2ff594ec9fd630e8151ba17254bb93555a6ce350dbccdfa871e383073ff", + "0x391da0841cdcc0f7e1e24a97ba1b8485013a9667ce4caf59d5568f365281" + ], + "0x4bb0830c8aEdc3b6ce497f216be334C21bb4fC7a", + false + ], + [ + [ + [ + [ + "0xE8860CFdFc8cDBceccd26D9a5EBf70d275dB44d1", + ["0x377bbea3", "0x24d6b1d0"], + true + ], + false, + false, + "Moo é🚀Mo o🚀M🚀é oMoo🚀 o éé ooMéoM🚀 🚀é" + ], + [ + [ + "0x2cE6C205B7d6bDE8b4fd540F50855b4428ED9994", + ["0x17cea387", "0x5cd2d06f"], + false + ], + true, + false, + "Moo é🚀🚀 M🚀o🚀éo ooMooM🚀🚀M MMMM éoo🚀Moo " + ], + [ + [ + "0x110345c4a49963Ac64Fd67Abc04BfFB8E4A94b7C", + ["0xbfb10334", "0x625686b9"], + false + ], + true, + true, + "Moo é🚀éoo🚀oooMé🚀oMMoééé🚀MoMoéé🚀ééo🚀🚀 oo🚀éoo é 🚀éooo🚀ooo🚀oM o" + ], + [ + [ + "0xDfB23C9496340E3DD3d2FA3e434A540a30fff3D6", + ["0x326f4bca", "0x48015abf"], + false + ], + false, + true, + "Moo é🚀éMoo🚀oMéo éM 🚀 é🚀Méo o🚀ooé🚀🚀éMooM🚀MMé🚀 " + ] + ], + [ + [ + [ + "0xa7AEB8A8527ec968674BcBe62Db0B37871f0F98C", + ["0x40189c7e", "0xbf06634f"], + true + ], + false, + true, + "Moo é🚀🚀 oMMMoo " + ], + [ + [ + "0xA389185832487EFA09361022Bb666e3dCf8b7Be6", + ["0x011e8376", "0x448a44cb"], + false + ], + true, + true, + "Moo é🚀éMé🚀MoooM oooo🚀éoéoo oéé o MMo🚀🚀" + ], + [ + [ + "0xC5784844d95155aC222C27FC9C0aCFDc9120B79F", + ["0x3c555fab", "0x99f5cb2b"], + true + ], + false, + false, + "Moo é🚀M🚀o MoM🚀 o 🚀ooMéé🚀 🚀o o 🚀Mo MoM🚀" + ], + [ + [ + "0x9C6Fd314070BaC441B96655E624368C044Fc9386", + ["0x30956f49", "0x1e1ffd12"], + true + ], + false, + false, + "Moo é🚀o🚀Mo o🚀o" + ] + ] + ] + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éooé oo🚀é 🚀oMéoM🚀 🚀o oMooMoMoéo🚀🚀ooo🚀 M" + }, + { + "type": "number", + "value": "1038682924496575370524636657733852580279327620" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x571fcb17d306a515b63760c952f3d264c004e9b94e745933b1755c3708e9" + }, + { + "type": "hexstring", + "value": "0xd2ff594ec9fd630e8151ba17254bb93555a6ce350dbccdfa871e383073ff" + }, + { + "type": "hexstring", + "value": "0x391da0841cdcc0f7e1e24a97ba1b8485013a9667ce4caf59d5568f365281" + } + ] + }, + { + "type": "address", + "value": "0x4bb0830c8aEdc3b6ce497f216be334C21bb4fC7a" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xE8860CFdFc8cDBceccd26D9a5EBf70d275dB44d1" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x377bbea3" + }, + { + "type": "hexstring", + "value": "0x24d6b1d0" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀Mo o🚀M🚀é oMoo🚀 o éé ooMéoM🚀 🚀é" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x2cE6C205B7d6bDE8b4fd540F50855b4428ED9994" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x17cea387" + }, + { + "type": "hexstring", + "value": "0x5cd2d06f" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀🚀 M🚀o🚀éo ooMooM🚀🚀M MMMM éoo🚀Moo " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x110345c4a49963Ac64Fd67Abc04BfFB8E4A94b7C" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xbfb10334" + }, + { + "type": "hexstring", + "value": "0x625686b9" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀éoo🚀oooMé🚀oMMoééé🚀MoMoéé🚀ééo🚀🚀 oo🚀éoo é 🚀éooo🚀ooo🚀oM o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xDfB23C9496340E3DD3d2FA3e434A540a30fff3D6" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x326f4bca" + }, + { + "type": "hexstring", + "value": "0x48015abf" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀éMoo🚀oMéo éM 🚀 é🚀Méo o🚀ooé🚀🚀éMooM🚀MMé🚀 " + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xa7AEB8A8527ec968674BcBe62Db0B37871f0F98C" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x40189c7e" + }, + { + "type": "hexstring", + "value": "0xbf06634f" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀🚀 oMMMoo " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xA389185832487EFA09361022Bb666e3dCf8b7Be6" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x011e8376" + }, + { + "type": "hexstring", + "value": "0x448a44cb" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀éMé🚀MoooM oooo🚀éoéoo oéé o MMo🚀🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xC5784844d95155aC222C27FC9C0aCFDc9120B79F" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3c555fab" + }, + { + "type": "hexstring", + "value": "0x99f5cb2b" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀M🚀o MoM🚀 o 🚀ooMéé🚀 🚀o o 🚀Mo MoM🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x9C6Fd314070BaC441B96655E624368C044Fc9386" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x30956f49" + }, + { + "type": "hexstring", + "value": "0x1e1ffd12" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀o🚀Mo o🚀o" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610ca3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061094c565b60405180910390f35b61007e604051806080016040528060608152602001600060120b8152602001600015158152602001606081525090565b6100ae604051806080016040528060608152602001600060120b8152602001600015158152602001606081525090565b60006040518060800160405280604c8152602001610b1e604c9139825250722e937ec66d2a84df95abf70d3c5f60e6319b846020820152600160408083018290528051828152808201909152600091816020015b61010a6106bd565b8152602001906001900390816101025790505090506101276106bd565b61012f6106e2565b610137610709565b7f571fcb17d306a515b63760c952f3d264c004e9b94e745933b1755c3708e9000081527fd2ff594ec9fd630e8151ba17254bb93555a6ce350dbccdfa871e383073ff00006020808301919091527f391da0841cdcc0f7e1e24a97ba1b8485013a9667ce4caf59d5568f3652810000604080840191909152918352734bb0830c8aedc3b6ce497f216be334c21bb4fc7a9083015260009082015281526101da610727565b6101e2610754565b6101ea610781565b6101f26107ad565b73e8860cfdfc8cdbceccd26d9a5ebf70d275db44d181526102116107dd565b63377bbea360e01b815263024d6b1d60e41b6020808301919091528281019190915260016040808401919091529183526000838201819052838301819052825160608101909352603d808452909291610aa2908301396060830152508152610277610781565b61027f6107ad565b732ce6c205b7d6bde8b4fd540f50855b4428ed9994815261029e6107dd565b6317cea38760e01b8152635cd2d06f60e01b6020808301919091528281019190915260006040808401829052928452600184830152838301819052825160608101909352603f808452909291610adf908301396060830152506020820152610304610781565b61030c6107ad565b73110345c4a49963ac64fd67abc04bffb8e4a94b7c815261032b6107dd565b632fec40cd60e21b815263625686b960e01b6020808301919091528281019190915260006040808401829052928452600184830181905284840152825160a08101909352606d808452909291610c01908301396060830152506040820152610391610781565b6103996107ad565b73dfb23c9496340e3dd3d2fa3e434a540a30fff3d681526103b86107dd565b631937a5e560e11b81526348015abf60e01b60208083019190915282810191909152600060408084018290529284528382018190526001848401528251608081019093526052808452909291610b6a90830139606083810191909152830191909152508152610425610754565b61042d610781565b6104356107ad565b73a7aeb8a8527ec968674bcbe62db0b37871f0f98c81526104546107dd565b63200c4e3f60e11b815263bf06634f60e01b60208083019190915282810191909152600160408084018290529284526000848301528383015281518083019092526016825275026b7b79061d4f84fcd40784fcd401037a6a6a6b7b7960551b90820152606082015281526104c6610781565b6104ce6107ad565b73a389185832487efa09361022bb666e3dcf8b7be681526104ed6107dd565b628f41bb60e11b815263448a44cb60e01b6020808301919091528281019190915260006040808401829052928452600184830181905284840152825160608101909352603c808452909291610a66908301396060830152506020820152610552610781565b61055a6107ad565b73c5784844d95155ac222c27fc9c0acfdc9120b79f81526105796107dd565b633c555fab60e01b81526399f5cb2b60e01b60208083019190915282810191909152600160408084019190915291835260008382018190528383018190528251608081019093526045808452909291610bbc9083013960608301525060408201526105e2610781565b6105ea6107ad565b739c6fd314070bac441b96655e624368c044fc938681526106096107dd565b6330956f4960e01b8152630f0ffe8960e11b60208083019190915282810191909152600160408084019190915291835260008382018190528383018190528251808401909352601a83527f4d6f6f20c3a9f09f9a806ff09f9a804d6f2020206ff09f9a806f0000000000008383015260608085019390935291840192909252838201929092528301919091528251829184916106a7576106a7610a4f565b6020908102919091010152506060820152919050565b60405180604001604052806106d06106e2565b81526020016106dd610727565b905290565b60405180606001604052806106f5610709565b815260006020820181905260409091015290565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806002905b61073e610754565b8152602001906001900390816107365790505090565b60405180608001604052806004905b61076b610781565b8152602001906001900390816107635790505090565b60405180608001604052806107946107ad565b8152600060208201819052604082015260609081015290565b604051806060016040528060006001600160a01b031681526020016107d06107dd565b8152600060209091015290565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b8181101561082157602081850181015186830182015201610805565b81811115610833576000602083870101525b50601f01601f19169290920160200192915050565b60008260408082018460005b60028082106108635750610940565b8584038952825184608080820160005b60048110156109215788820384528451805180516001600160a01b0316845260208082015160e092919081870160005b8c8110156108c95782516001600160e01b031916825291830191908301906001016108a3565b505050908d0151151560608681019190915283820151151587870152838e015180151560a088015293015160c086018390529290610909838701856107fb565b98810198970196945050506001919091019050610873565b5060209c8d019c90975095909501945050506001919091019050610854565b50909695505050505050565b60006020808352835160808285015261096860a08501826107fb565b9050818501518060120b6040860152506040850151606081151581870152808701519150601f19808785030160808801528383518086528686019150868160051b87010187860195506000805b83811015610a3e578883038601855287518051805160c0919086865b60038110156109f357825161ffff19168252918f0191908f01906001016109d1565b505050808d01516001600160a01b0316868b01526040015115156080860152908b015160a0850182905290610a2a81860183610848565b998c0199968c0196945050506001016109b5565b50909b9a5050505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80c3a94dc3a9f09f9a804d6f6f6f4d206f6f6f6ff09f9a80c3a96fc3a96f6f206fc3a9c3a9206f204d4d6ff09f9a80f09f9a804d6f6f20c3a9f09f9a804d6f206ff09f9a804df09f9a80c3a920206f4d6f6ff09f9a80206f20c3a9c3a9206f6f4dc3a96f4df09f9a8020f09f9a80c3a94d6f6f20c3a9f09f9a80f09f9a80204df09f9a806ff09f9a80c3a96f206f6f4d6f6f4df09f9a80f09f9a804d204d4d4d4d2020c3a96f6ff09f9a804d6f6f204d6f6f20c3a9f09f9a80c3a96f6fc3a9206f6ff09f9a80c3a920f09f9a806f4dc3a96f4df09f9a8020f09f9a806f20206f4d6f6f4d6f4d6fc3a96ff09f9a80f09f9a806f6f6ff09f9a80204d4d6f6f20c3a9f09f9a80c3a94d6f6ff09f9a806f4dc3a96f20c3a94d20f09f9a8020c3a9f09f9a804dc3a96f206ff09f9a806f6fc3a9f09f9a80f09f9a80c3a94d6f6f4df09f9a804d4dc3a9f09f9a8020204d6f6f20c3a9f09f9a804df09f9a806f20204d6f4df09f9a80206f2020f09f9a806f6f4dc3a9c3a9f09f9a8020f09f9a806f2020206f20f09f9a804d6f204d6f4df09f9a804d6f6f20c3a9f09f9a80c3a96f6ff09f9a806f6f6f4dc3a9f09f9a806f4d4d6fc3a9c3a9c3a9f09f9a804d6f4d6fc3a9c3a9f09f9a80c3a9c3a96ff09f9a80f09f9a80206f6ff09f9a80c3a96f6f2020c3a9202020f09f9a80c3a96f6f6ff09f9a806f6f6ff09f9a806f4d206fa2646970667358221220d00bca17bce7d75e879f819087ee60d8a0a954c531feb9d74ed5755d30988f9c64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_3610b15a {\n bytes30[3] s_0;\n address s_1;\n bool s_2;\n }\n\n struct S_cbe5d844 {\n address s_0;\n bytes4[2] s_1;\n bool s_2;\n }\n\n struct S_2600ac1c {\n S_cbe5d844 s_0;\n bool s_1;\n bool s_2;\n string s_3;\n }\n\n struct S_3dcd01a1 {\n S_3610b15a s_0;\n S_2600ac1c[4][2] s_1;\n }\n\n struct S_8c03ba0b {\n string s_0;\n int152 s_1;\n bool s_2;\n S_3dcd01a1[] s_3;\n }\n\n function test () public pure returns (S_8c03ba0b memory) {\n S_8c03ba0b memory r;\n {\n string memory r_0 = unicode\"Moo é🚀éooé oo🚀é 🚀oMéoM🚀 🚀o oMooMoMoéo🚀🚀ooo🚀 M\";\n r.s_0 = r_0;\n }\n {\n int152 r_1 = 1038682924496575370524636657733852580279327620;\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n S_3dcd01a1[] memory r_3 = new S_3dcd01a1[](1);\n {\n S_3dcd01a1 memory r_3_0;\n {\n S_3610b15a memory r_3_0_0;\n {\n bytes30[3] memory r_3_0_0_0;\n {\n bytes30 r_3_0_0_0_0 = bytes30(0x571fcb17d306a515b63760c952f3d264c004e9b94e745933b1755c3708e9);\n r_3_0_0_0[0] = r_3_0_0_0_0;\n }\n {\n bytes30 r_3_0_0_0_1 = bytes30(0xd2ff594ec9fd630e8151ba17254bb93555a6ce350dbccdfa871e383073ff);\n r_3_0_0_0[1] = r_3_0_0_0_1;\n }\n {\n bytes30 r_3_0_0_0_2 = bytes30(0x391da0841cdcc0f7e1e24a97ba1b8485013a9667ce4caf59d5568f365281);\n r_3_0_0_0[2] = r_3_0_0_0_2;\n }\n r_3_0_0.s_0 = r_3_0_0_0;\n }\n {\n address r_3_0_0_1 = 0x4bb0830c8aEdc3b6ce497f216be334C21bb4fC7a;\n r_3_0_0.s_1 = r_3_0_0_1;\n }\n {\n bool r_3_0_0_2 = false;\n r_3_0_0.s_2 = r_3_0_0_2;\n }\n r_3_0.s_0 = r_3_0_0;\n }\n {\n S_2600ac1c[4][2] memory r_3_0_1;\n {\n S_2600ac1c[4] memory r_3_0_1_0;\n {\n S_2600ac1c memory r_3_0_1_0_0;\n {\n S_cbe5d844 memory r_3_0_1_0_0_0;\n {\n address r_3_0_1_0_0_0_0 = 0xE8860CFdFc8cDBceccd26D9a5EBf70d275dB44d1;\n r_3_0_1_0_0_0.s_0 = r_3_0_1_0_0_0_0;\n }\n {\n bytes4[2] memory r_3_0_1_0_0_0_1;\n {\n bytes4 r_3_0_1_0_0_0_1_0 = bytes4(0x377bbea3);\n r_3_0_1_0_0_0_1[0] = r_3_0_1_0_0_0_1_0;\n }\n {\n bytes4 r_3_0_1_0_0_0_1_1 = bytes4(0x24d6b1d0);\n r_3_0_1_0_0_0_1[1] = r_3_0_1_0_0_0_1_1;\n }\n r_3_0_1_0_0_0.s_1 = r_3_0_1_0_0_0_1;\n }\n {\n bool r_3_0_1_0_0_0_2 = true;\n r_3_0_1_0_0_0.s_2 = r_3_0_1_0_0_0_2;\n }\n r_3_0_1_0_0.s_0 = r_3_0_1_0_0_0;\n }\n {\n bool r_3_0_1_0_0_1 = false;\n r_3_0_1_0_0.s_1 = r_3_0_1_0_0_1;\n }\n {\n bool r_3_0_1_0_0_2 = false;\n r_3_0_1_0_0.s_2 = r_3_0_1_0_0_2;\n }\n {\n string memory r_3_0_1_0_0_3 = unicode\"Moo é🚀Mo o🚀M🚀é oMoo🚀 o éé ooMéoM🚀 🚀é\";\n r_3_0_1_0_0.s_3 = r_3_0_1_0_0_3;\n }\n r_3_0_1_0[0] = r_3_0_1_0_0;\n }\n {\n S_2600ac1c memory r_3_0_1_0_1;\n {\n S_cbe5d844 memory r_3_0_1_0_1_0;\n {\n address r_3_0_1_0_1_0_0 = 0x2cE6C205B7d6bDE8b4fd540F50855b4428ED9994;\n r_3_0_1_0_1_0.s_0 = r_3_0_1_0_1_0_0;\n }\n {\n bytes4[2] memory r_3_0_1_0_1_0_1;\n {\n bytes4 r_3_0_1_0_1_0_1_0 = bytes4(0x17cea387);\n r_3_0_1_0_1_0_1[0] = r_3_0_1_0_1_0_1_0;\n }\n {\n bytes4 r_3_0_1_0_1_0_1_1 = bytes4(0x5cd2d06f);\n r_3_0_1_0_1_0_1[1] = r_3_0_1_0_1_0_1_1;\n }\n r_3_0_1_0_1_0.s_1 = r_3_0_1_0_1_0_1;\n }\n {\n bool r_3_0_1_0_1_0_2 = false;\n r_3_0_1_0_1_0.s_2 = r_3_0_1_0_1_0_2;\n }\n r_3_0_1_0_1.s_0 = r_3_0_1_0_1_0;\n }\n {\n bool r_3_0_1_0_1_1 = true;\n r_3_0_1_0_1.s_1 = r_3_0_1_0_1_1;\n }\n {\n bool r_3_0_1_0_1_2 = false;\n r_3_0_1_0_1.s_2 = r_3_0_1_0_1_2;\n }\n {\n string memory r_3_0_1_0_1_3 = unicode\"Moo é🚀🚀 M🚀o🚀éo ooMooM🚀🚀M MMMM éoo🚀Moo \";\n r_3_0_1_0_1.s_3 = r_3_0_1_0_1_3;\n }\n r_3_0_1_0[1] = r_3_0_1_0_1;\n }\n {\n S_2600ac1c memory r_3_0_1_0_2;\n {\n S_cbe5d844 memory r_3_0_1_0_2_0;\n {\n address r_3_0_1_0_2_0_0 = 0x110345c4a49963Ac64Fd67Abc04BfFB8E4A94b7C;\n r_3_0_1_0_2_0.s_0 = r_3_0_1_0_2_0_0;\n }\n {\n bytes4[2] memory r_3_0_1_0_2_0_1;\n {\n bytes4 r_3_0_1_0_2_0_1_0 = bytes4(0xbfb10334);\n r_3_0_1_0_2_0_1[0] = r_3_0_1_0_2_0_1_0;\n }\n {\n bytes4 r_3_0_1_0_2_0_1_1 = bytes4(0x625686b9);\n r_3_0_1_0_2_0_1[1] = r_3_0_1_0_2_0_1_1;\n }\n r_3_0_1_0_2_0.s_1 = r_3_0_1_0_2_0_1;\n }\n {\n bool r_3_0_1_0_2_0_2 = false;\n r_3_0_1_0_2_0.s_2 = r_3_0_1_0_2_0_2;\n }\n r_3_0_1_0_2.s_0 = r_3_0_1_0_2_0;\n }\n {\n bool r_3_0_1_0_2_1 = true;\n r_3_0_1_0_2.s_1 = r_3_0_1_0_2_1;\n }\n {\n bool r_3_0_1_0_2_2 = true;\n r_3_0_1_0_2.s_2 = r_3_0_1_0_2_2;\n }\n {\n string memory r_3_0_1_0_2_3 = unicode\"Moo é🚀éoo🚀oooMé🚀oMMoééé🚀MoMoéé🚀ééo🚀🚀 oo🚀éoo é 🚀éooo🚀ooo🚀oM o\";\n r_3_0_1_0_2.s_3 = r_3_0_1_0_2_3;\n }\n r_3_0_1_0[2] = r_3_0_1_0_2;\n }\n {\n S_2600ac1c memory r_3_0_1_0_3;\n {\n S_cbe5d844 memory r_3_0_1_0_3_0;\n {\n address r_3_0_1_0_3_0_0 = 0xDfB23C9496340E3DD3d2FA3e434A540a30fff3D6;\n r_3_0_1_0_3_0.s_0 = r_3_0_1_0_3_0_0;\n }\n {\n bytes4[2] memory r_3_0_1_0_3_0_1;\n {\n bytes4 r_3_0_1_0_3_0_1_0 = bytes4(0x326f4bca);\n r_3_0_1_0_3_0_1[0] = r_3_0_1_0_3_0_1_0;\n }\n {\n bytes4 r_3_0_1_0_3_0_1_1 = bytes4(0x48015abf);\n r_3_0_1_0_3_0_1[1] = r_3_0_1_0_3_0_1_1;\n }\n r_3_0_1_0_3_0.s_1 = r_3_0_1_0_3_0_1;\n }\n {\n bool r_3_0_1_0_3_0_2 = false;\n r_3_0_1_0_3_0.s_2 = r_3_0_1_0_3_0_2;\n }\n r_3_0_1_0_3.s_0 = r_3_0_1_0_3_0;\n }\n {\n bool r_3_0_1_0_3_1 = false;\n r_3_0_1_0_3.s_1 = r_3_0_1_0_3_1;\n }\n {\n bool r_3_0_1_0_3_2 = true;\n r_3_0_1_0_3.s_2 = r_3_0_1_0_3_2;\n }\n {\n string memory r_3_0_1_0_3_3 = unicode\"Moo é🚀éMoo🚀oMéo éM 🚀 é🚀Méo o🚀ooé🚀🚀éMooM🚀MMé🚀 \";\n r_3_0_1_0_3.s_3 = r_3_0_1_0_3_3;\n }\n r_3_0_1_0[3] = r_3_0_1_0_3;\n }\n r_3_0_1[0] = r_3_0_1_0;\n }\n {\n S_2600ac1c[4] memory r_3_0_1_1;\n {\n S_2600ac1c memory r_3_0_1_1_0;\n {\n S_cbe5d844 memory r_3_0_1_1_0_0;\n {\n address r_3_0_1_1_0_0_0 = 0xa7AEB8A8527ec968674BcBe62Db0B37871f0F98C;\n r_3_0_1_1_0_0.s_0 = r_3_0_1_1_0_0_0;\n }\n {\n bytes4[2] memory r_3_0_1_1_0_0_1;\n {\n bytes4 r_3_0_1_1_0_0_1_0 = bytes4(0x40189c7e);\n r_3_0_1_1_0_0_1[0] = r_3_0_1_1_0_0_1_0;\n }\n {\n bytes4 r_3_0_1_1_0_0_1_1 = bytes4(0xbf06634f);\n r_3_0_1_1_0_0_1[1] = r_3_0_1_1_0_0_1_1;\n }\n r_3_0_1_1_0_0.s_1 = r_3_0_1_1_0_0_1;\n }\n {\n bool r_3_0_1_1_0_0_2 = true;\n r_3_0_1_1_0_0.s_2 = r_3_0_1_1_0_0_2;\n }\n r_3_0_1_1_0.s_0 = r_3_0_1_1_0_0;\n }\n {\n bool r_3_0_1_1_0_1 = false;\n r_3_0_1_1_0.s_1 = r_3_0_1_1_0_1;\n }\n {\n bool r_3_0_1_1_0_2 = true;\n r_3_0_1_1_0.s_2 = r_3_0_1_1_0_2;\n }\n {\n string memory r_3_0_1_1_0_3 = unicode\"Moo é🚀🚀 oMMMoo \";\n r_3_0_1_1_0.s_3 = r_3_0_1_1_0_3;\n }\n r_3_0_1_1[0] = r_3_0_1_1_0;\n }\n {\n S_2600ac1c memory r_3_0_1_1_1;\n {\n S_cbe5d844 memory r_3_0_1_1_1_0;\n {\n address r_3_0_1_1_1_0_0 = 0xA389185832487EFA09361022Bb666e3dCf8b7Be6;\n r_3_0_1_1_1_0.s_0 = r_3_0_1_1_1_0_0;\n }\n {\n bytes4[2] memory r_3_0_1_1_1_0_1;\n {\n bytes4 r_3_0_1_1_1_0_1_0 = bytes4(0x011e8376);\n r_3_0_1_1_1_0_1[0] = r_3_0_1_1_1_0_1_0;\n }\n {\n bytes4 r_3_0_1_1_1_0_1_1 = bytes4(0x448a44cb);\n r_3_0_1_1_1_0_1[1] = r_3_0_1_1_1_0_1_1;\n }\n r_3_0_1_1_1_0.s_1 = r_3_0_1_1_1_0_1;\n }\n {\n bool r_3_0_1_1_1_0_2 = false;\n r_3_0_1_1_1_0.s_2 = r_3_0_1_1_1_0_2;\n }\n r_3_0_1_1_1.s_0 = r_3_0_1_1_1_0;\n }\n {\n bool r_3_0_1_1_1_1 = true;\n r_3_0_1_1_1.s_1 = r_3_0_1_1_1_1;\n }\n {\n bool r_3_0_1_1_1_2 = true;\n r_3_0_1_1_1.s_2 = r_3_0_1_1_1_2;\n }\n {\n string memory r_3_0_1_1_1_3 = unicode\"Moo é🚀éMé🚀MoooM oooo🚀éoéoo oéé o MMo🚀🚀\";\n r_3_0_1_1_1.s_3 = r_3_0_1_1_1_3;\n }\n r_3_0_1_1[1] = r_3_0_1_1_1;\n }\n {\n S_2600ac1c memory r_3_0_1_1_2;\n {\n S_cbe5d844 memory r_3_0_1_1_2_0;\n {\n address r_3_0_1_1_2_0_0 = 0xC5784844d95155aC222C27FC9C0aCFDc9120B79F;\n r_3_0_1_1_2_0.s_0 = r_3_0_1_1_2_0_0;\n }\n {\n bytes4[2] memory r_3_0_1_1_2_0_1;\n {\n bytes4 r_3_0_1_1_2_0_1_0 = bytes4(0x3c555fab);\n r_3_0_1_1_2_0_1[0] = r_3_0_1_1_2_0_1_0;\n }\n {\n bytes4 r_3_0_1_1_2_0_1_1 = bytes4(0x99f5cb2b);\n r_3_0_1_1_2_0_1[1] = r_3_0_1_1_2_0_1_1;\n }\n r_3_0_1_1_2_0.s_1 = r_3_0_1_1_2_0_1;\n }\n {\n bool r_3_0_1_1_2_0_2 = true;\n r_3_0_1_1_2_0.s_2 = r_3_0_1_1_2_0_2;\n }\n r_3_0_1_1_2.s_0 = r_3_0_1_1_2_0;\n }\n {\n bool r_3_0_1_1_2_1 = false;\n r_3_0_1_1_2.s_1 = r_3_0_1_1_2_1;\n }\n {\n bool r_3_0_1_1_2_2 = false;\n r_3_0_1_1_2.s_2 = r_3_0_1_1_2_2;\n }\n {\n string memory r_3_0_1_1_2_3 = unicode\"Moo é🚀M🚀o MoM🚀 o 🚀ooMéé🚀 🚀o o 🚀Mo MoM🚀\";\n r_3_0_1_1_2.s_3 = r_3_0_1_1_2_3;\n }\n r_3_0_1_1[2] = r_3_0_1_1_2;\n }\n {\n S_2600ac1c memory r_3_0_1_1_3;\n {\n S_cbe5d844 memory r_3_0_1_1_3_0;\n {\n address r_3_0_1_1_3_0_0 = 0x9C6Fd314070BaC441B96655E624368C044Fc9386;\n r_3_0_1_1_3_0.s_0 = r_3_0_1_1_3_0_0;\n }\n {\n bytes4[2] memory r_3_0_1_1_3_0_1;\n {\n bytes4 r_3_0_1_1_3_0_1_0 = bytes4(0x30956f49);\n r_3_0_1_1_3_0_1[0] = r_3_0_1_1_3_0_1_0;\n }\n {\n bytes4 r_3_0_1_1_3_0_1_1 = bytes4(0x1e1ffd12);\n r_3_0_1_1_3_0_1[1] = r_3_0_1_1_3_0_1_1;\n }\n r_3_0_1_1_3_0.s_1 = r_3_0_1_1_3_0_1;\n }\n {\n bool r_3_0_1_1_3_0_2 = true;\n r_3_0_1_1_3_0.s_2 = r_3_0_1_1_3_0_2;\n }\n r_3_0_1_1_3.s_0 = r_3_0_1_1_3_0;\n }\n {\n bool r_3_0_1_1_3_1 = false;\n r_3_0_1_1_3.s_1 = r_3_0_1_1_3_1;\n }\n {\n bool r_3_0_1_1_3_2 = false;\n r_3_0_1_1_3.s_2 = r_3_0_1_1_3_2;\n }\n {\n string memory r_3_0_1_1_3_3 = unicode\"Moo é🚀o🚀Mo o🚀o\";\n r_3_0_1_1_3.s_3 = r_3_0_1_1_3_3;\n }\n r_3_0_1_1[3] = r_3_0_1_1_3;\n }\n r_3_0_1[1] = r_3_0_1_1;\n }\n r_3_0.s_1 = r_3_0_1;\n }\n r_3[0] = r_3_0;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000002e937ec66d2a84df95abf70d3c5f60e6319b8400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a80c3a96f6fc3a9206f6ff09f9a80c3a920f09f9a806f4dc3a96f4df09f9a8020f09f9a806f20206f4d6f6f4d6f4d6fc3a96ff09f9a80f09f9a806f6f6ff09f9a80204d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020571fcb17d306a515b63760c952f3d264c004e9b94e745933b1755c3708e90000d2ff594ec9fd630e8151ba17254bb93555a6ce350dbccdfa871e383073ff0000391da0841cdcc0f7e1e24a97ba1b8485013a9667ce4caf59d5568f36528100000000000000000000000000004bb0830c8aedc3b6ce497f216be334c21bb4fc7a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000620000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000480000000000000000000000000e8860cfdfc8cdbceccd26d9a5ebf70d275db44d1377bbea30000000000000000000000000000000000000000000000000000000024d6b1d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a804d6f206ff09f9a804df09f9a80c3a920206f4d6f6ff09f9a80206f20c3a9c3a9206f6f4dc3a96f4df09f9a8020f09f9a80c3a90000000000000000000000000000002ce6c205b7d6bde8b4fd540f50855b4428ed999417cea387000000000000000000000000000000000000000000000000000000005cd2d06f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a80f09f9a80204df09f9a806ff09f9a80c3a96f206f6f4d6f6f4df09f9a80f09f9a804d204d4d4d4d2020c3a96f6ff09f9a804d6f6f2000000000000000000000000000110345c4a49963ac64fd67abc04bffb8e4a94b7cbfb1033400000000000000000000000000000000000000000000000000000000625686b90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006d4d6f6f20c3a9f09f9a80c3a96f6ff09f9a806f6f6f4dc3a9f09f9a806f4d4d6fc3a9c3a9c3a9f09f9a804d6f4d6fc3a9c3a9f09f9a80c3a9c3a96ff09f9a80f09f9a80206f6ff09f9a80c3a96f6f2020c3a9202020f09f9a80c3a96f6f6ff09f9a806f6f6ff09f9a806f4d206f00000000000000000000000000000000000000000000000000000000000000dfb23c9496340e3dd3d2fa3e434a540a30fff3d6326f4bca0000000000000000000000000000000000000000000000000000000048015abf0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a80c3a94d6f6ff09f9a806f4dc3a96f20c3a94d20f09f9a8020c3a9f09f9a804dc3a96f206ff09f9a806f6fc3a9f09f9a80f09f9a80c3a94d6f6f4df09f9a804d4dc3a9f09f9a8020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000440000000000000000000000000a7aeb8a8527ec968674bcbe62db0b37871f0f98c40189c7e00000000000000000000000000000000000000000000000000000000bf06634f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a80f09f9a80206f4d4d4d6f6f2000000000000000000000000000000000000000000000a389185832487efa09361022bb666e3dcf8b7be6011e837600000000000000000000000000000000000000000000000000000000448a44cb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a80c3a94dc3a9f09f9a804d6f6f6f4d206f6f6f6ff09f9a80c3a96fc3a96f6f206fc3a9c3a9206f204d4d6ff09f9a80f09f9a8000000000000000000000000000000000c5784844d95155ac222c27fc9c0acfdc9120b79f3c555fab0000000000000000000000000000000000000000000000000000000099f5cb2b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000454d6f6f20c3a9f09f9a804df09f9a806f20204d6f4df09f9a80206f2020f09f9a806f6f4dc3a9c3a9f09f9a8020f09f9a806f2020206f20f09f9a804d6f204d6f4df09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000009c6fd314070bac441b96655e624368c044fc938630956f49000000000000000000000000000000000000000000000000000000001e1ffd120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001a4d6f6f20c3a9f09f9a806ff09f9a804d6f2020206ff09f9a806f000000000000" + }, + { + "name": "random-((((uint104,bool,string,int72)),string[3],string,bool[])[],address,(bool,address,string,(int,string[]),bytes10))", + "type": "((((uint104,bool,string,int72)),string[3],string,bool[])[],address,(bool,address,string,(int,string[]),bytes10))", + "value": [ + [ + [ + [["404150106349524308203710232736", false, "Moo é🚀", "756364864453827873872"]], + [ + "Moo é🚀", + "Moo é🚀🚀oMoMoMMMMo🚀", + "Moo é🚀🚀🚀 🚀ooé🚀é🚀o éé o 🚀o oMMoé o oé " + ], + "Moo é🚀 🚀MMo", + [] + ], + [ + [ + [ + "4981296494736128120717006307409", + false, + "Moo é🚀🚀Mo", + "-1275144583251754845112" + ] + ], + [ + "Moo é🚀 🚀🚀éMéMoMoé 🚀 Mooooo é🚀éMé🚀 éoo🚀🚀 o é oé🚀ééééM🚀MM ", + "Moo é🚀MooooM éooMM éoMéo o", + "Moo é🚀o o Mooé o éoooé" + ], + "Moo é🚀éé 🚀Mo🚀éoM🚀M oé MoééM o", + [true, false] + ] + ], + "0x297dF168E011676A2b4CA54C0612223c0A68454B", + [ + false, + "0x683EBbD952BEDf7B01D0F5b8e42378c12dd4d0ec", + "Moo é🚀oMM oo M🚀🚀M🚀é🚀🚀 oooééé🚀éoéo oo éoooé🚀 oéMMéoo🚀ééoo éo", + [ + "56386597083436841200305139559528777523959107169871239099962171537470164590928", + [ + "Moo é🚀oMé🚀éM ooMéoo🚀 M ooMéMoo 🚀", + "Moo é🚀", + "Moo é🚀ooé MéooMé🚀éoooMMoooéooéé🚀 éoo🚀ooo🚀oMéoo ", + "Moo é🚀éooéoéo🚀 oé" + ] + ], + "0x2ec624da481d6877f6df" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "404150106349524308203710232736" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "number", + "value": "756364864453827873872" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀oMoMoMMMMo🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀 🚀ooé🚀é🚀o éé o 🚀o oMMoé o oé " + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 🚀MMo" + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "4981296494736128120717006307409" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀🚀Mo" + }, + { + "type": "number", + "value": "-1275144583251754845112" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀🚀éMéMoMoé 🚀 Mooooo é🚀éMé🚀 éoo🚀🚀 o é oé🚀ééééM🚀MM " + }, + { + "type": "string", + "value": "Moo é🚀MooooM éooMM éoMéo o" + }, + { + "type": "string", + "value": "Moo é🚀o o Mooé o éoooé" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éé 🚀Mo🚀éoM🚀M oé MoééM o" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0x297dF168E011676A2b4CA54C0612223c0A68454B" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x683EBbD952BEDf7B01D0F5b8e42378c12dd4d0ec" + }, + { + "type": "string", + "value": "Moo é🚀oMM oo M🚀🚀M🚀é🚀🚀 oooééé🚀éoéo oo éoooé🚀 oéMMéoo🚀ééoo éo" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "56386597083436841200305139559528777523959107169871239099962171537470164590928" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMé🚀éM ooMéoo🚀 M ooMéMoo 🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀ooé MéooMé🚀éoooMMoooéooéé🚀 éoo🚀ooo🚀oMéoo " + }, + { + "type": "string", + "value": "Moo é🚀éooéoéo🚀 oé" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x2ec624da481d6877f6df" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610bf7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610899565b60405180910390f35b61005661060c565b61005e61060c565b60408051600280825260608201909252600091816020015b61007e610630565b81526020019060019003908161007657905050905061009b610630565b6040805160a0810182526000602082018181529282018190526060808301526080820152908152604080516080810182526000602080830182905260608385018181529084019283526c0519e121edb85831bc628cb8a084528451808601909552600a8552689adede418753e13f3560b71b9185019190915292909252682900abccd3f4e3cc5090915281528152610131610689565b604080518082018252600a8152689adede418753e13f3560b71b60208083019190915290835281518083018352601c81527f4d6f6f20c3a9f09f9a80f09f9a806f4d6f4d6f4d4d4d4d6ff09f9a80000000008183015283820152815160808101909252604280835260009291610a1b908301396040838101919091526020848101939093528051808201825260128152714d6f6f20c3a9f09f9a8020f09f9a804d4d6f60701b818501528482015280516000808252938101909152606084015250825182918491610204576102046109d2565b602002602001018190525050610218610630565b6040805160a0810182526000602082018181529282018190526060808301526080820152908152604080516080810182526000602080830182905260608385018181529084019283526c3edf6fe2c55dedd94209c7805184528451808601909552601085526f4d6f6f20c3a9f09f9a80f09f9a804d6f60801b91850191909152929092526845202f9a76405d83b719909152815281526102b6610689565b60006040518060a0016040528060658152602001610a5d606591398252506040805160608101909152602180825260009190610af36020830139602083810191909152604080518082018252601e81527f4d6f6f20c3a9f09f9a806f206f204d6f6fc3a9206f2020c3a96f6f6fc3a900008184015281850152848201939093528251606081019093526031808452600093925090610ac290830139604083810191909152805160028082526060820183526000935090916020830190803683370190505090506000600190508082600081518110610396576103966109d2565b60200260200101901515908115158152505050600080826001815181106103bf576103bf6109d2565b9115156020928302919091019091015250606082015281518190839060019081106103ec576103ec6109d2565b6020908102919091018101919091529183525073297df168e011676a2b4ca54c0612223c0a68454b908201526104206106b0565b600080825273683ebbd952bedf7b01d0f5b8e42378c12dd4d0ec6020808401919091526040805160a0810190915260658082529091610b5d9083013960408381019190915280518082018252606060208201527f7ca9aed72ea2ebb15225bedeaae730640795d7d2cdc519ce1c7c85609b7c615081528151600480825260a08201909352909250600091816020015b60608152602001906001900390816104af57905050905060006040518060600160405280603281526020016109e960329139905080826000815181106104f7576104f76109d2565b60200260200101819052505060006040518060400160405280600a8152602001689adede418753e13f3560b71b8152509050808260018151811061053d5761053d6109d2565b6020026020010181905250506000604051806080016040528060498152602001610b14604991399050808260028151811061057a5761057a6109d2565b60200260200101819052505060006040518060400160405280601c81526020017f4d6f6f20c3a9f09f9a80c3a96f6fc3a96fc3a96ff09f9a80206fc3a900000000815250905080826003815181106105d4576105d46109d2565b602090810291909101810191909152830191909152506060820152692ec624da481d6877f6df60b01b60808201526040820152919050565b604080516060808201835281526000602082015290810161062b6106b0565b905290565b60405180608001604052806106686040805160a081018252600060208201818152928201819052606080830152608082015290815290565b8152602001610675610689565b815260200160608152602001606081525090565b60405180606001604052806003905b60608152602001906001900390816106985790505090565b6040518060a0016040528060001515815260200160006001600160a01b03168152602001606081526020016106f8604051806040016040528060008152602001606081525090565b8152600060209091015290565b6000815180845260005b8181101561072b5760208185018101518683018201520161070f565b8181111561073d576000602083870101525b50601f01601f19169290920160200192915050565b600082606081018360005b600381101561078c578383038752610776838351610705565b602097880197909350919091019060010161075d565b509095945050505050565b600081518084526020808501945080840160005b838110156107c95781511515875295820195908201906001016107ab565b509495945050505050565b8051151582526000602060018060a01b03818401511681850152604083015160a0604086015261080760a0860182610705565b606085810151878303888301528051835284015160408584018190528151908401819052929350840191600581901b840182019184019060005b8181101561086f57605f1986850301835261085d848651610705565b94870194935091860191600101610841565b5050506080860151935061088f60808801856001600160b01b0319169052565b9695505050505050565b60006020808352608080840185516060808588015282825180855260a094508489019150848160051b8a0101878501945060005b82811015610992578a8203609f1901845285518051898452518984018b905280516cffffffffffffffffffffffffff16898501528a810151151560c085015260408082015160e086018c9052610927610120870182610705565b9289015160080b61010087015250828c01518583038d8701529161094b8184610752565b92505080830151858303828701526109638382610705565b925050508682015191508381038785015261097e8183610797565b978b0197958b0195935050506001016108cd565b50968a01516001600160a01b03811660408b01529660408b01518a8203601f1901858c015297506109c381896107d4565b9b9a5050505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f4dc3a9f09f9a80c3a94d206f6f4dc3a96f6ff09f9a8020204d206f6f4dc3a94d6f6f20f09f9a804d6f6f20c3a9f09f9a80f09f9a80f09f9a8020f09f9a806f6fc3a9f09f9a80c3a9f09f9a806f2020c3a9c3a9206f20f09f9a806f206f4d4d6fc3a9206f206fc3a9204d6f6f20c3a9f09f9a8020f09f9a80f09f9a80c3a94dc3a94d6f4d6fc3a920f09f9a8020204d6f6f6f6f6f20c3a9f09f9a80c3a94dc3a9f09f9a8020c3a96f6ff09f9a80f09f9a80206f20c3a9206fc3a9f09f9a80c3a9c3a9c3a9c3a94df09f9a804d4d204d6f6f20c3a9f09f9a80c3a9c3a920f09f9a804d6ff09f9a80c3a96f4df09f9a804d20206fc3a9204d6fc3a9c3a94d206f4d6f6f20c3a9f09f9a804d6f6f6f6f4d20c3a96f6f4d4d20c3a96f4dc3a96f206f4d6f6f20c3a9f09f9a806f6fc3a920204dc3a96f6f4dc3a9f09f9a80c3a96f6f6f4d4d6f6f6fc3a96f6fc3a9c3a9f09f9a8020c3a96f6ff09f9a806f6f6ff09f9a806f4dc3a96f6f204d6f6f20c3a9f09f9a806f4d4d206f6f204df09f9a80f09f9a804df09f9a80c3a9f09f9a80f09f9a80206f6f6fc3a9c3a9c3a9f09f9a80c3a96fc3a96f206f6f20c3a96f6f6fc3a9f09f9a8020206fc3a94d4dc3a96f6ff09f9a80c3a9c3a96f6f20c3a96fa264697066735822122024df8b8a8e07305c14b685ff50b207422e0d6a156ba2d24c271f8287622bc26a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_eb70fad8 {\n uint104 s_0;\n bool s_1;\n string s_2;\n int72 s_3;\n }\n\n struct S_4d17aa14 {\n S_eb70fad8 s_0;\n }\n\n struct S_763a9ffd {\n S_4d17aa14 s_0;\n string[3] s_1;\n string s_2;\n bool[] s_3;\n }\n\n struct S_04eee440 {\n int256 s_0;\n string[] s_1;\n }\n\n struct S_60cad417 {\n bool s_0;\n address s_1;\n string s_2;\n S_04eee440 s_3;\n bytes10 s_4;\n }\n\n struct S_f337e842 {\n S_763a9ffd[] s_0;\n address s_1;\n S_60cad417 s_2;\n }\n\n function test () public pure returns (S_f337e842 memory) {\n S_f337e842 memory r;\n {\n S_763a9ffd[] memory r_0 = new S_763a9ffd[](2);\n {\n S_763a9ffd memory r_0_0;\n {\n S_4d17aa14 memory r_0_0_0;\n {\n S_eb70fad8 memory r_0_0_0_0;\n {\n uint104 r_0_0_0_0_0 = 404150106349524308203710232736;\n r_0_0_0_0.s_0 = r_0_0_0_0_0;\n }\n {\n bool r_0_0_0_0_1 = false;\n r_0_0_0_0.s_1 = r_0_0_0_0_1;\n }\n {\n string memory r_0_0_0_0_2 = unicode\"Moo é🚀\";\n r_0_0_0_0.s_2 = r_0_0_0_0_2;\n }\n {\n int72 r_0_0_0_0_3 = 756364864453827873872;\n r_0_0_0_0.s_3 = r_0_0_0_0_3;\n }\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n string[3] memory r_0_0_1;\n {\n string memory r_0_0_1_0 = unicode\"Moo é🚀\";\n r_0_0_1[0] = r_0_0_1_0;\n }\n {\n string memory r_0_0_1_1 = unicode\"Moo é🚀🚀oMoMoMMMMo🚀\";\n r_0_0_1[1] = r_0_0_1_1;\n }\n {\n string memory r_0_0_1_2 = unicode\"Moo é🚀🚀🚀 🚀ooé🚀é🚀o éé o 🚀o oMMoé o oé \";\n r_0_0_1[2] = r_0_0_1_2;\n }\n r_0_0.s_1 = r_0_0_1;\n }\n {\n string memory r_0_0_2 = unicode\"Moo é🚀 🚀MMo\";\n r_0_0.s_2 = r_0_0_2;\n }\n {\n bool[] memory r_0_0_3 = new bool[](0);\n r_0_0.s_3 = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n S_763a9ffd memory r_0_1;\n {\n S_4d17aa14 memory r_0_1_0;\n {\n S_eb70fad8 memory r_0_1_0_0;\n {\n uint104 r_0_1_0_0_0 = 4981296494736128120717006307409;\n r_0_1_0_0.s_0 = r_0_1_0_0_0;\n }\n {\n bool r_0_1_0_0_1 = false;\n r_0_1_0_0.s_1 = r_0_1_0_0_1;\n }\n {\n string memory r_0_1_0_0_2 = unicode\"Moo é🚀🚀Mo\";\n r_0_1_0_0.s_2 = r_0_1_0_0_2;\n }\n {\n int72 r_0_1_0_0_3 = -1275144583251754845112;\n r_0_1_0_0.s_3 = r_0_1_0_0_3;\n }\n r_0_1_0.s_0 = r_0_1_0_0;\n }\n r_0_1.s_0 = r_0_1_0;\n }\n {\n string[3] memory r_0_1_1;\n {\n string memory r_0_1_1_0 = unicode\"Moo é🚀 🚀🚀éMéMoMoé 🚀 Mooooo é🚀éMé🚀 éoo🚀🚀 o é oé🚀ééééM🚀MM \";\n r_0_1_1[0] = r_0_1_1_0;\n }\n {\n string memory r_0_1_1_1 = unicode\"Moo é🚀MooooM éooMM éoMéo o\";\n r_0_1_1[1] = r_0_1_1_1;\n }\n {\n string memory r_0_1_1_2 = unicode\"Moo é🚀o o Mooé o éoooé\";\n r_0_1_1[2] = r_0_1_1_2;\n }\n r_0_1.s_1 = r_0_1_1;\n }\n {\n string memory r_0_1_2 = unicode\"Moo é🚀éé 🚀Mo🚀éoM🚀M oé MoééM o\";\n r_0_1.s_2 = r_0_1_2;\n }\n {\n bool[] memory r_0_1_3 = new bool[](2);\n {\n bool r_0_1_3_0 = true;\n r_0_1_3[0] = r_0_1_3_0;\n }\n {\n bool r_0_1_3_1 = false;\n r_0_1_3[1] = r_0_1_3_1;\n }\n r_0_1.s_3 = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x297dF168E011676A2b4CA54C0612223c0A68454B;\n r.s_1 = r_1;\n }\n {\n S_60cad417 memory r_2;\n {\n bool r_2_0 = false;\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0x683EBbD952BEDf7B01D0F5b8e42378c12dd4d0ec;\n r_2.s_1 = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀oMM oo M🚀🚀M🚀é🚀🚀 oooééé🚀éoéo oo éoooé🚀 oéMMéoo🚀ééoo éo\";\n r_2.s_2 = r_2_2;\n }\n {\n S_04eee440 memory r_2_3;\n {\n int r_2_3_0 = 56386597083436841200305139559528777523959107169871239099962171537470164590928;\n r_2_3.s_0 = r_2_3_0;\n }\n {\n string[] memory r_2_3_1 = new string[](4);\n {\n string memory r_2_3_1_0 = unicode\"Moo é🚀oMé🚀éM ooMéoo🚀 M ooMéMoo 🚀\";\n r_2_3_1[0] = r_2_3_1_0;\n }\n {\n string memory r_2_3_1_1 = unicode\"Moo é🚀\";\n r_2_3_1[1] = r_2_3_1_1;\n }\n {\n string memory r_2_3_1_2 = unicode\"Moo é🚀ooé MéooMé🚀éoooMMoooéooéé🚀 éoo🚀ooo🚀oMéoo \";\n r_2_3_1[2] = r_2_3_1_2;\n }\n {\n string memory r_2_3_1_3 = unicode\"Moo é🚀éooéoéo🚀 oé\";\n r_2_3_1[3] = r_2_3_1_3;\n }\n r_2_3.s_1 = r_2_3_1;\n }\n r_2.s_3 = r_2_3;\n }\n {\n bytes10 r_2_4 = bytes10(0x2ec624da481d6877f6df);\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000297df168e011676a2b4ca54c0612223c0a68454b00000000000000000000000000000000000000000000000000000000000007a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000519e121edb85831bc628cb8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000002900abccd3f4e3cc50000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80f09f9a806f4d6f4d6f4d4d4d4d6ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a80f09f9a80f09f9a8020f09f9a806f6fc3a9f09f9a80c3a9f09f9a806f2020c3a9c3a9206f20f09f9a806f206f4d4d6fc3a9206f206fc3a92000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a8020f09f9a804d4d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000003edf6fe2c55dedd94209c7805100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffffffffffffffffffbadfd06589bfa27c4800000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a80f09f9a804d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000654d6f6f20c3a9f09f9a8020f09f9a80f09f9a80c3a94dc3a94d6f4d6fc3a920f09f9a8020204d6f6f6f6f6f20c3a9f09f9a80c3a94dc3a9f09f9a8020c3a96f6ff09f9a80f09f9a80206f20c3a9206fc3a9f09f9a80c3a9c3a9c3a9c3a94df09f9a804d4d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a804d6f6f6f6f4d20c3a96f6f4d4d20c3a96f4dc3a96f206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a806f206f204d6f6fc3a9206f2020c3a96f6f6fc3a9000000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a80c3a9c3a920f09f9a804d6ff09f9a80c3a96f4df09f9a804d20206fc3a9204d6fc3a9c3a94d206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000683ebbd952bedf7b01d0f5b8e42378c12dd4d0ec00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001402ec624da481d6877f6df0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000654d6f6f20c3a9f09f9a806f4d4d206f6f204df09f9a80f09f9a804df09f9a80c3a9f09f9a80f09f9a80206f6f6fc3a9c3a9c3a9f09f9a80c3a96fc3a96f206f6f20c3a96f6f6fc3a9f09f9a8020206fc3a94d4dc3a96f6ff09f9a80c3a9c3a96f6f20c3a96f0000000000000000000000000000000000000000000000000000007ca9aed72ea2ebb15225bedeaae730640795d7d2cdc519ce1c7c85609b7c615000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a806f4dc3a9f09f9a80c3a94d206f6f4dc3a96f6ff09f9a8020204d206f6f4dc3a94d6f6f20f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000494d6f6f20c3a9f09f9a806f6fc3a920204dc3a96f6f4dc3a9f09f9a80c3a96f6f6f4d4d6f6f6fc3a96f6fc3a9c3a9f09f9a8020c3a96f6ff09f9a806f6f6ff09f9a806f4dc3a96f6f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80c3a96f6fc3a96fc3a96ff09f9a80206fc3a900000000" + }, + { + "name": "random-(uint8,bytes21,bytes9[1],uint,(string,address[1],((bytes6,string,(string)[][4]),string,(uint16))[1],bytes6,uint152))", + "type": "(uint8,bytes21,bytes9[1],uint,(string,address[1],((bytes6,string,(string)[][4]),string,(uint16))[1],bytes6,uint152))", + "value": [ + "85", + "0xf2e63a62147f1b81d1947e8c6e3f318cf562d1ae76", + ["0xfdda8916adbf38c486"], + "3075903312148500504168904248259152309375262875677038196822495383751846552920", + [ + "Moo é🚀M oé oo ééMé🚀ooo🚀éMo🚀éoMooo oo MM🚀 o éoMoé🚀ooéoooo o o 🚀", + ["0x3B75a8Fc3E2dA0247228147D0ce83493eCA7B0f7"], + [ + [ + [ + "0x8b71d11dc6d7", + "Moo é🚀éo ooéMMéo🚀🚀o🚀o é🚀o oooo oMooo🚀éo🚀MoMM", + [[], [["Moo é🚀"], ["Moo é🚀"]], [], [["Moo é🚀"]]] + ], + "Moo é🚀Mo🚀MooooéMéé", + ["25106"] + ] + ], + "0x034a3db9c844", + "1385407973241408890692723962938071587076343272" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "85" + }, + { + "type": "hexstring", + "value": "0xf2e63a62147f1b81d1947e8c6e3f318cf562d1ae76" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xfdda8916adbf38c486" + } + ] + }, + { + "type": "number", + "value": "3075903312148500504168904248259152309375262875677038196822495383751846552920" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M oé oo ééMé🚀ooo🚀éMo🚀éoMooo oo MM🚀 o éoMoé🚀ooéoooo o o 🚀" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x3B75a8Fc3E2dA0247228147D0ce83493eCA7B0f7" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8b71d11dc6d7" + }, + { + "type": "string", + "value": "Moo é🚀éo ooéMMéo🚀🚀o🚀o é🚀o oooo oMooo🚀éo🚀MoMM" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Mo🚀MooooéMéé" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "25106" + } + ] + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x034a3db9c844" + }, + { + "type": "number", + "value": "1385407973241408890692723962938071587076343272" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506108d9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061075f565b60405180910390f35b6100566103f4565b61005e6103f4565b605581527479731d310a3f8dc0e8ca3f46371f98c67ab168d73b60591b602082015261008861042c565b687eed448b56df9c624360b91b815260408201527f06cce64ad7e9bcb22897b2640ca98b5b5e3f4913b8dca1ea522c366be7e8655860608201526100ca61044a565b60006040518060800160405280605d81526020016107fe605d91398252506100f061042c565b733b75a8fc3e2da0247228147d0ce83493eca7b0f781526020820152610114610485565b61011c6104b2565b6101246104eb565b658b71d11dc6d760d01b8152604080516080810190915260498082526000919061085b602083013960208301525061015a610506565b6040805160008082526020820190925281610192565b6040805160208101909152606081528152602001906001900390816101705790505b5082525060408051600280825260608201909252600091816020015b6040805160208101909152606081528152602001906001900390816101ae57505060408051602081019091526060815290915060408051808201909152600a8152689adede418753e13f3560b71b60208201528152815181908390600090610218576102186107e7565b60200260200101819052505061023a6040518060200160405280606081525090565b60408051808201909152600a8152689adede418753e13f3560b71b602082015281528151819083906001908110610273576102736107e7565b6020908102919091018101919091528381019290925250604080516000808252928101909152816102c1565b60408051602081019091526060815281526020019060019003908161029f5790505b50604080840191909152805160018082528183019092526000925090816020015b6040805160208101909152606081528152602001906001900390816102e257505060408051602081019091526060815290915060408051808201909152600a8152689adede418753e13f3560b71b6020820152815281518190839060009061034c5761034c6107e7565b6020908102919091018101919091526060808501939093526040858101949094529385525081518083018352601c81527f4d6f6f20c3a9f09f9a804d6ff09f9a804d6f6f6f6fc3a94dc3a9c3a9000000008185015284840152815192830182526162128352838201929092529183529083019190915264d28f6e721160d21b90820152723e1fb41d85d891e4e774a630a54937f13a85e8608080830191909152820152919050565b6040805160a0810182526000808252602082015290810161041361042c565b81526020016000815260200161042761044a565b905290565b60405180602001604052806001906020820280368337509192915050565b6040518060a001604052806060815260200161046461042c565b8152602001610471610485565b815260006020820181905260409091015290565b60405180602001604052806001905b61049c6104b2565b8152602001906001900390816104945790505090565b60405180606001604052806104c56104eb565b8152602001606081526020016104276040518060200160405280600061ffff1681525090565b60408051606080820183526000825260208201529081016104275b60405180608001604052806004905b60608152602001906001900390816105155790505090565b6000815180845260005b8181101561055357602081850181015186830182015201610537565b81811115610565576000602083870101525b50601f01601f19169290920160200192915050565b6000815160a0845261058f60a085018261052d565b905060208301516020850160005b60018110156105c55782516001600160a01b031682526020928301929091019060010161059d565b50505060408301518482036040860152818290506020830160005b600181101561070f578482038352835180516060845265ffffffffffff60d01b815116606085015260208101516060608086015261062160c086018261052d565b60409290920151858303605f190160a0870152919050806080810160005b60048110156106c2578382038352845180518084526020918201918085019190600582901b86010160005b828110156106a557601f198783030184528451516020835261068f602084018261052d565b602096870196959095019492505060010161066a565b50602098890198969096019594505050600191909101905061063f565b506020850151935086810360208801526106dc818561052d565b9350505050604082015191506106f960408501835161ffff169052565b60209586019594909401939250506001016105e0565b506060860151935061072d60608801856001600160d01b0319169052565b60808601519350610755608088018572ffffffffffffffffffffffffffffffffffffff169052565b9695505050505050565b6000602080835260ff845116818401526affffffffffffffffffffff198185015116604084015260408401516060840160005b60018110156107b95782516001600160b81b03191682529183019190830190600101610792565b5050505060608301516080830152608083015160a0808401526107df60c084018261057a565b949350505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d206fc3a9206f6f20c3a9c3a94dc3a9f09f9a806f6f6ff09f9a80c3a94d6ff09f9a80c3a96f4d6f6f6f206f6f204d4df09f9a80206f20c3a96f4d6fc3a9f09f9a806f6fc3a96f6f6f6f206f206f20f09f9a804d6f6f20c3a9f09f9a80c3a96f206f6fc3a94d4dc3a96ff09f9a80f09f9a806ff09f9a806f2020c3a9f09f9a806f20206f6f6f6f206f4d6f6f6ff09f9a80c3a96ff09f9a804d6f4d4da2646970667358221220d90f2ba466c9b55f33782ff0b420022769cae0aeecfe9c16c2a6cb2eb46d2f8364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_ecb2d3e4 {\n bytes6 s_0;\n string s_1;\n S_97fc4627[][4] s_2;\n }\n\n struct S_267213ef {\n uint16 s_0;\n }\n\n struct S_c29a59f0 {\n S_ecb2d3e4 s_0;\n string s_1;\n S_267213ef s_2;\n }\n\n struct S_eee93bbd {\n string s_0;\n address[1] s_1;\n S_c29a59f0[1] s_2;\n bytes6 s_3;\n uint152 s_4;\n }\n\n struct S_d365fbcd {\n uint8 s_0;\n bytes21 s_1;\n bytes9[1] s_2;\n uint256 s_3;\n S_eee93bbd s_4;\n }\n\n function test () public pure returns (S_d365fbcd memory) {\n S_d365fbcd memory r;\n {\n uint8 r_0 = 85;\n r.s_0 = r_0;\n }\n {\n bytes21 r_1 = bytes21(0xf2e63a62147f1b81d1947e8c6e3f318cf562d1ae76);\n r.s_1 = r_1;\n }\n {\n bytes9[1] memory r_2;\n {\n bytes9 r_2_0 = bytes9(0xfdda8916adbf38c486);\n r_2[0] = r_2_0;\n }\n r.s_2 = r_2;\n }\n {\n uint r_3 = 3075903312148500504168904248259152309375262875677038196822495383751846552920;\n r.s_3 = r_3;\n }\n {\n S_eee93bbd memory r_4;\n {\n string memory r_4_0 = unicode\"Moo é🚀M oé oo ééMé🚀ooo🚀éMo🚀éoMooo oo MM🚀 o éoMoé🚀ooéoooo o o 🚀\";\n r_4.s_0 = r_4_0;\n }\n {\n address[1] memory r_4_1;\n {\n address r_4_1_0 = 0x3B75a8Fc3E2dA0247228147D0ce83493eCA7B0f7;\n r_4_1[0] = r_4_1_0;\n }\n r_4.s_1 = r_4_1;\n }\n {\n S_c29a59f0[1] memory r_4_2;\n {\n S_c29a59f0 memory r_4_2_0;\n {\n S_ecb2d3e4 memory r_4_2_0_0;\n {\n bytes6 r_4_2_0_0_0 = bytes6(0x8b71d11dc6d7);\n r_4_2_0_0.s_0 = r_4_2_0_0_0;\n }\n {\n string memory r_4_2_0_0_1 = unicode\"Moo é🚀éo ooéMMéo🚀🚀o🚀o é🚀o oooo oMooo🚀éo🚀MoMM\";\n r_4_2_0_0.s_1 = r_4_2_0_0_1;\n }\n {\n S_97fc4627[][4] memory r_4_2_0_0_2;\n {\n S_97fc4627[] memory r_4_2_0_0_2_0 = new S_97fc4627[](0);\n r_4_2_0_0_2[0] = r_4_2_0_0_2_0;\n }\n {\n S_97fc4627[] memory r_4_2_0_0_2_1 = new S_97fc4627[](2);\n {\n S_97fc4627 memory r_4_2_0_0_2_1_0;\n {\n string memory r_4_2_0_0_2_1_0_0 = unicode\"Moo é🚀\";\n r_4_2_0_0_2_1_0.s_0 = r_4_2_0_0_2_1_0_0;\n }\n r_4_2_0_0_2_1[0] = r_4_2_0_0_2_1_0;\n }\n {\n S_97fc4627 memory r_4_2_0_0_2_1_1;\n {\n string memory r_4_2_0_0_2_1_1_0 = unicode\"Moo é🚀\";\n r_4_2_0_0_2_1_1.s_0 = r_4_2_0_0_2_1_1_0;\n }\n r_4_2_0_0_2_1[1] = r_4_2_0_0_2_1_1;\n }\n r_4_2_0_0_2[1] = r_4_2_0_0_2_1;\n }\n {\n S_97fc4627[] memory r_4_2_0_0_2_2 = new S_97fc4627[](0);\n r_4_2_0_0_2[2] = r_4_2_0_0_2_2;\n }\n {\n S_97fc4627[] memory r_4_2_0_0_2_3 = new S_97fc4627[](1);\n {\n S_97fc4627 memory r_4_2_0_0_2_3_0;\n {\n string memory r_4_2_0_0_2_3_0_0 = unicode\"Moo é🚀\";\n r_4_2_0_0_2_3_0.s_0 = r_4_2_0_0_2_3_0_0;\n }\n r_4_2_0_0_2_3[0] = r_4_2_0_0_2_3_0;\n }\n r_4_2_0_0_2[3] = r_4_2_0_0_2_3;\n }\n r_4_2_0_0.s_2 = r_4_2_0_0_2;\n }\n r_4_2_0.s_0 = r_4_2_0_0;\n }\n {\n string memory r_4_2_0_1 = unicode\"Moo é🚀Mo🚀MooooéMéé\";\n r_4_2_0.s_1 = r_4_2_0_1;\n }\n {\n S_267213ef memory r_4_2_0_2;\n {\n uint16 r_4_2_0_2_0 = 25106;\n r_4_2_0_2.s_0 = r_4_2_0_2_0;\n }\n r_4_2_0.s_2 = r_4_2_0_2;\n }\n r_4_2[0] = r_4_2_0;\n }\n r_4.s_2 = r_4_2;\n }\n {\n bytes6 r_4_3 = bytes6(0x034a3db9c844);\n r_4.s_3 = r_4_3;\n }\n {\n uint152 r_4_4 = 1385407973241408890692723962938071587076343272;\n r_4.s_4 = r_4_4;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000055f2e63a62147f1b81d1947e8c6e3f318cf562d1ae760000000000000000000000fdda8916adbf38c486000000000000000000000000000000000000000000000006cce64ad7e9bcb22897b2640ca98b5b5e3f4913b8dca1ea522c366be7e8655800000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000003b75a8fc3e2da0247228147d0ce83493eca7b0f70000000000000000000000000000000000000000000000000000000000000120034a3db9c8440000000000000000000000000000000000000000000000000000000000000000000000000000003e1fb41d85d891e4e774a630a54937f13a85e8000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a804d206fc3a9206f6f20c3a9c3a94dc3a9f09f9a806f6f6ff09f9a80c3a94d6ff09f9a80c3a96f4d6f6f6f206f6f204d4df09f9a80206f20c3a96f4d6fc3a9f09f9a806f6fc3a96f6f6f6f206f206f20f09f9a800000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000062128b71d11dc6d70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000494d6f6f20c3a9f09f9a80c3a96f206f6fc3a94d4dc3a96ff09f9a80f09f9a806ff09f9a806f2020c3a9f09f9a806f20206f6f6f6f206f4d6f6f6ff09f9a80c3a96ff09f9a804d6f4d4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a804d6ff09f9a804d6f6f6f6fc3a94dc3a9c3a900000000" + }, + { + "name": "random-(((uint240,string,(bool,address,string,uint112),bytes32[3],uint24),address[]),bool,(bytes11,string[3][2]),address[2],address)", + "type": "(((uint240,string,(bool,address,string,uint112),bytes32[3],uint24),address[]),bool,(bytes11,string[3][2]),address[2],address)", + "value": [ + [ + [ + "1499762057607264398106530864280212138189547998353071823019925912593234919", + "Moo é🚀oMooMééo 🚀oo", + [ + true, + "0x7e0658d1875Da228fE51349BBe8948630292fb05", + "Moo é🚀o🚀🚀oM🚀 o oM🚀 ooMooéo🚀ééé M🚀 🚀🚀ooooMoooéMMM🚀🚀o Mo", + "1152110887042683611540513446938977" + ], + [ + "0x6dbee3b878906ec4971990fd64219c0c4c3f737306502c9c17704fecc82fec82", + "0xe018cbf7296817e2b64eb728fe88452b3a5ad7b2ca2bb81b785ba15ff342d492", + "0x7f9d3abb85ef4a854a51c61d96210ddd460ec7f53861b32b454ead8e973c0a3f" + ], + "14671876" + ], + [] + ], + false, + [ + "0x3870e2d7f3da95b45b24f4", + [ + ["Moo é🚀🚀o é🚀o🚀 Mo ", "Moo é🚀", "Moo é🚀oéMoo🚀🚀 éé"], + [ + "Moo é🚀🚀éo 🚀ééoooé🚀éoo🚀🚀 ooMé M🚀éo 🚀oMo oo🚀oo MMM oé", + "Moo é🚀oMééoMoo Moéo oéé oéo o🚀oooé Moéééooo é", + "Moo é🚀" + ] + ] + ], + [ + "0x1783BB84dF43311b866409068FaC2343E38F1a0F", + "0x4A2331d6C695212DB411695F866107cADd30a4CF" + ], + "0x135Ef9ffbA9a6b4A9A36DdF13571D7e26d72e351" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1499762057607264398106530864280212138189547998353071823019925912593234919" + }, + { + "type": "string", + "value": "Moo é🚀oMooMééo 🚀oo" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x7e0658d1875Da228fE51349BBe8948630292fb05" + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀oM🚀 o oM🚀 ooMooéo🚀ééé M🚀 🚀🚀ooooMoooéMMM🚀🚀o Mo" + }, + { + "type": "number", + "value": "1152110887042683611540513446938977" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x6dbee3b878906ec4971990fd64219c0c4c3f737306502c9c17704fecc82fec82" + }, + { + "type": "hexstring", + "value": "0xe018cbf7296817e2b64eb728fe88452b3a5ad7b2ca2bb81b785ba15ff342d492" + }, + { + "type": "hexstring", + "value": "0x7f9d3abb85ef4a854a51c61d96210ddd460ec7f53861b32b454ead8e973c0a3f" + } + ] + }, + { + "type": "number", + "value": "14671876" + } + ] + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x3870e2d7f3da95b45b24f4" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀o é🚀o🚀 Mo " + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀oéMoo🚀🚀 éé" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀éo 🚀ééoooé🚀éoo🚀🚀 ooMé M🚀éo 🚀oMo oo🚀oo MMM oé" + }, + { + "type": "string", + "value": "Moo é🚀oMééoMoo Moéo oéé oéo o🚀oooé Moéééooo é" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x1783BB84dF43311b866409068FaC2343E38F1a0F" + }, + { + "type": "address", + "value": "0x4A2331d6C695212DB411695F866107cADd30a4CF" + } + ] + }, + { + "type": "address", + "value": "0x135Ef9ffbA9a6b4A9A36DdF13571D7e26d72e351" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506108ea806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610648565b60405180910390f35b610056610373565b61005e610373565b6100666103b4565b61006e6103d4565b7dd94d443874a5952bc8b050b002970f78eaace69f52ac72352b971fcdfbe78152604080518082018252601b81527f4d6f6f20c3a9f09f9a806f4d6f6f4dc3a9c3a96f20f09f9a806f6f0000000000602080830191909152808401919091528151608080820184526060828501819052600090830181905260018352737e0658d1875da228fe51349bbe8948630292fb05838501528451918201909452605e808252919392909190610857908301396040808401919091526d38cdaf0d45e1f568584602cfc961606084015283019190915250610149610420565b7f6dbee3b878906ec4971990fd64219c0c4c3f737306502c9c17704fecc82fec8281527fe018cbf7296817e2b64eb728fe88452b3a5ad7b2ca2bb81b785ba15ff342d4926020808301919091527f7f9d3abb85ef4a854a51c61d96210ddd460ec7f53861b32b454ead8e973c0a3f604080840191909152606084019290925262dfe004608084015291835280516000808252818401909252838301529183528201526101f361043e565b6a0e1c38b5fcf6a56d16c93d60aa1b815261020c61045d565b61021461048a565b600060405180606001604052806023815260200161083460239139825250604080518082018252600a8152689adede418753e13f3560b71b6020808301919091528084019190915281518083018352601d81527f4d6f6f20c3a9f09f9a806fc3a94d6f6ff09f9a80f09f9a8020c3a9c3a90000009181019190915290820152815261029d61048a565b60006040518060800160405280605c8152602001610799605c91398252506040805160608101909152603f808252600091906107f56020830139602083810191909152604080518082018252600a8152689adede418753e13f3560b71b8184015281850152848201939093528401929092528301919091525061031e6104b1565b731783bb84df43311b866409068fac2343e38f1a0f8152734a2331d6c695212db411695f866107cadd30a4cf6020820152606082015273135ef9ffba9a6b4a9a36ddf13571d7e26d72e3516080820152919050565b6040518060a001604052806103866103b4565b81526000602082015260400161039a61043e565b81526020016103a76104b1565b8152600060209091015290565b60405180604001604052806103c76103d4565b8152602001606081525090565b6040805160a08101825260008152606060208201529081016104176040805160808101825260008082526020820181905260609282018390529181019190915290565b81526020016103a75b60405180606001604052806003906020820280368337509192915050565b60408051808201909152600081526020810161045861045d565b905290565b60405180604001604052806002905b61047461048a565b81526020019060019003908161046c5790505090565b60405180606001604052806003905b60608152602001906001900390816104995790505090565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b818110156104f5576020818501810151868301820152016104d9565b81811115610507576000602083870101525b50601f01601f19169290920160200192915050565b8060005b600381101561053f578151845260209384019390910190600101610520565b50505050565b600081518084526020808501945080840160005b8381101561057e5781516001600160a01b031687529582019590820190600101610559565b509495945050505050565b80516001600160a81b0319168252602080820151604082850181905260009260808601929091860184805b600281101561060f57888603603f1901835283518660608101845b60038110156105fa5789820383526105e88285516104cf565b938901939289019291506001016105cf565b509750505092840192918401916001016105b4565b5093979650505050505050565b8060005b600281101561053f5781516001600160a01b0316845260209384019390910190600101610620565b60006020808352835160c082850152805160408060e087015260018060f01b038251166101208701528382015160e061014088015261068b6102008801826104cf565b90508183015161011f198883030161016089015280511515825260018060a01b03868201511686830152828101516080848401526106cc60808401826104cf565b90506dffffffffffffffffffffffffffff6060830151166060840152606085015192506106fd6101808a018461051c565b608085015194506107166101e08a018662ffffff169052565b9486015188860360df19016101008a0152946107328187610545565b968a01518015158a86015296955061074992505050565b860151858303601f19016060870152925061076690508183610589565b915050606084015161077b608085018261061c565b5060808401516001600160a01b03811660c085015250939250505056fe4d6f6f20c3a9f09f9a80f09f9a80c3a96f20f09f9a80c3a9c3a96f6f6fc3a9f09f9a80c3a96f6ff09f9a80f09f9a80206f6f4dc3a920204df09f9a80c3a96f2020f09f9a806f4d6f20206f6ff09f9a806f6f2020204d4d4d206fc3a94d6f6f20c3a9f09f9a806f4dc3a9c3a96f4d6f6f204d6fc3a96f206fc3a9c3a9206fc3a96f206ff09f9a806f6f6fc3a9204d6fc3a9c3a9c3a96f6f6f20c3a94d6f6f20c3a9f09f9a80f09f9a806f20c3a9f09f9a806ff09f9a8020202020204d6f204d6f6f20c3a9f09f9a806ff09f9a80f09f9a806f4df09f9a80206f206f4df09f9a8020206f6f4d6f6fc3a96ff09f9a80c3a9c3a9c3a9204df09f9a8020f09f9a80f09f9a806f6f6f6f4d6f6f6fc3a94d4d4df09f9a80f09f9a806f204d6fa2646970667358221220503054324522d5c58a2747b1908c3ed60eec1c353c16b032ccf01c08a277a88864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_920e3d3c {\n bool s_0;\n address s_1;\n string s_2;\n uint112 s_3;\n }\n\n struct S_bbee8fbb {\n uint240 s_0;\n string s_1;\n S_920e3d3c s_2;\n bytes32[3] s_3;\n uint24 s_4;\n }\n\n struct S_70cfb21a {\n S_bbee8fbb s_0;\n address[] s_1;\n }\n\n struct S_7e383224 {\n bytes11 s_0;\n string[3][2] s_1;\n }\n\n struct S_ceb699f4 {\n S_70cfb21a s_0;\n bool s_1;\n S_7e383224 s_2;\n address[2] s_3;\n address s_4;\n }\n\n function test () public pure returns (S_ceb699f4 memory) {\n S_ceb699f4 memory r;\n {\n S_70cfb21a memory r_0;\n {\n S_bbee8fbb memory r_0_0;\n {\n uint240 r_0_0_0 = 1499762057607264398106530864280212138189547998353071823019925912593234919;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n string memory r_0_0_1 = unicode\"Moo é🚀oMooMééo 🚀oo\";\n r_0_0.s_1 = r_0_0_1;\n }\n {\n S_920e3d3c memory r_0_0_2;\n {\n bool r_0_0_2_0 = true;\n r_0_0_2.s_0 = r_0_0_2_0;\n }\n {\n address r_0_0_2_1 = 0x7e0658d1875Da228fE51349BBe8948630292fb05;\n r_0_0_2.s_1 = r_0_0_2_1;\n }\n {\n string memory r_0_0_2_2 = unicode\"Moo é🚀o🚀🚀oM🚀 o oM🚀 ooMooéo🚀ééé M🚀 🚀🚀ooooMoooéMMM🚀🚀o Mo\";\n r_0_0_2.s_2 = r_0_0_2_2;\n }\n {\n uint112 r_0_0_2_3 = 1152110887042683611540513446938977;\n r_0_0_2.s_3 = r_0_0_2_3;\n }\n r_0_0.s_2 = r_0_0_2;\n }\n {\n bytes32[3] memory r_0_0_3;\n {\n bytes32 r_0_0_3_0 = bytes32(0x6dbee3b878906ec4971990fd64219c0c4c3f737306502c9c17704fecc82fec82);\n r_0_0_3[0] = r_0_0_3_0;\n }\n {\n bytes32 r_0_0_3_1 = bytes32(0xe018cbf7296817e2b64eb728fe88452b3a5ad7b2ca2bb81b785ba15ff342d492);\n r_0_0_3[1] = r_0_0_3_1;\n }\n {\n bytes32 r_0_0_3_2 = bytes32(0x7f9d3abb85ef4a854a51c61d96210ddd460ec7f53861b32b454ead8e973c0a3f);\n r_0_0_3[2] = r_0_0_3_2;\n }\n r_0_0.s_3 = r_0_0_3;\n }\n {\n uint24 r_0_0_4 = 14671876;\n r_0_0.s_4 = r_0_0_4;\n }\n r_0.s_0 = r_0_0;\n }\n {\n address[] memory r_0_1 = new address[](0);\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n bool r_1 = false;\n r.s_1 = r_1;\n }\n {\n S_7e383224 memory r_2;\n {\n bytes11 r_2_0 = bytes11(0x3870e2d7f3da95b45b24f4);\n r_2.s_0 = r_2_0;\n }\n {\n string[3][2] memory r_2_1;\n {\n string[3] memory r_2_1_0;\n {\n string memory r_2_1_0_0 = unicode\"Moo é🚀🚀o é🚀o🚀 Mo \";\n r_2_1_0[0] = r_2_1_0_0;\n }\n {\n string memory r_2_1_0_1 = unicode\"Moo é🚀\";\n r_2_1_0[1] = r_2_1_0_1;\n }\n {\n string memory r_2_1_0_2 = unicode\"Moo é🚀oéMoo🚀🚀 éé\";\n r_2_1_0[2] = r_2_1_0_2;\n }\n r_2_1[0] = r_2_1_0;\n }\n {\n string[3] memory r_2_1_1;\n {\n string memory r_2_1_1_0 = unicode\"Moo é🚀🚀éo 🚀ééoooé🚀éoo🚀🚀 ooMé M🚀éo 🚀oMo oo🚀oo MMM oé\";\n r_2_1_1[0] = r_2_1_1_0;\n }\n {\n string memory r_2_1_1_1 = unicode\"Moo é🚀oMééoMoo Moéo oéé oéo o🚀oooé Moéééooo é\";\n r_2_1_1[1] = r_2_1_1_1;\n }\n {\n string memory r_2_1_1_2 = unicode\"Moo é🚀\";\n r_2_1_1[2] = r_2_1_1_2;\n }\n r_2_1[1] = r_2_1_1;\n }\n r_2.s_1 = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n address[2] memory r_3;\n {\n address r_3_0 = 0x1783BB84dF43311b866409068FaC2343E38F1a0F;\n r_3[0] = r_3_0;\n }\n {\n address r_3_1 = 0x4A2331d6C695212DB411695F866107cADd30a4CF;\n r_3[1] = r_3_1;\n }\n r.s_3 = r_3;\n }\n {\n address r_4 = 0x135Ef9ffbA9a6b4A9A36DdF13571D7e26d72e351;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003400000000000000000000000001783bb84df43311b866409068fac2343e38f1a0f0000000000000000000000004a2331d6c695212db411695f866107cadd30a4cf000000000000000000000000135ef9ffba9a6b4a9a36ddf13571d7e26d72e351000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002600000d94d443874a5952bc8b050b002970f78eaace69f52ac72352b971fcdfbe700000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001206dbee3b878906ec4971990fd64219c0c4c3f737306502c9c17704fecc82fec82e018cbf7296817e2b64eb728fe88452b3a5ad7b2ca2bb81b785ba15ff342d4927f9d3abb85ef4a854a51c61d96210ddd460ec7f53861b32b454ead8e973c0a3f0000000000000000000000000000000000000000000000000000000000dfe004000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a806f4d6f6f4dc3a9c3a96f20f09f9a806f6f000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000007e0658d1875da228fe51349bbe8948630292fb05000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000038cdaf0d45e1f568584602cfc961000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a806ff09f9a80f09f9a806f4df09f9a80206f206f4df09f9a8020206f6f4d6f6fc3a96ff09f9a80c3a9c3a9c3a9204df09f9a8020f09f9a80f09f9a806f6f6f6f4d6f6f6fc3a94d4d4df09f9a80f09f9a806f204d6f000000000000000000000000000000000000000000000000000000000000000000003870e2d7f3da95b45b24f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a80f09f9a806f20c3a9f09f9a806ff09f9a8020202020204d6f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a806fc3a94d6f6ff09f9a80f09f9a8020c3a9c3a9000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a80f09f9a80c3a96f20f09f9a80c3a9c3a96f6f6fc3a9f09f9a80c3a96f6ff09f9a80f09f9a80206f6f4dc3a920204df09f9a80c3a96f2020f09f9a806f4d6f20206f6ff09f9a806f6f2020204d4d4d206fc3a900000000000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a806f4dc3a9c3a96f4d6f6f204d6fc3a96f206fc3a9c3a9206fc3a96f206ff09f9a806f6f6fc3a9204d6fc3a9c3a9c3a96f6f6f20c3a900000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-((bytes14[3],((string[4][4],uint160,int216,string,uint184),bytes8,(address,int16)),bool,bool,bytes3)[2],address,address,bool)", + "type": "((bytes14[3],((string[4][4],uint160,int216,string,uint184),bytes8,(address,int16)),bool,bool,bytes3)[2],address,address,bool)", + "value": [ + [ + [ + [ + "0x2083905f5a3502830581dc8384f5", + "0xd46b270375c488525e1ade05c524", + "0xa242d24a9178b6924fb23244dd6b" + ], + [ + [ + [ + [ + "Moo é🚀oM é🚀MooM🚀 🚀🚀ééo🚀🚀 M", + "Moo é🚀o🚀MM 🚀oM🚀 oMo ooéooMooooMoo🚀éoo 🚀 🚀 éMMM o M🚀o🚀🚀Mé", + "Moo é🚀Mo o🚀🚀", + "Moo é🚀🚀 o🚀MooooéoMoM🚀🚀Moé🚀éooéM MoMMéoMéooo M" + ], + [ + "Moo é🚀ééo MoéMéM🚀ooooo🚀Mo🚀é🚀oMoo🚀oo", + "Moo é🚀é🚀ooMMééM🚀🚀🚀é 🚀é🚀oo 🚀M🚀 oM", + "Moo é🚀", + "Moo é🚀é 🚀oMé M 🚀o " + ], + [ + "Moo é🚀 🚀🚀🚀oo o🚀oéoo🚀Méé oMé🚀é M 🚀oM🚀oMoo 🚀MoooMoM🚀", + "Moo é🚀é🚀éo🚀🚀🚀 éoo o oM🚀", + "Moo é🚀🚀é ééoo Méo o", + "Moo é🚀 éo🚀MMMo🚀oo oo o🚀MéMéM🚀Mo" + ], + [ + "Moo é🚀é oo🚀MMoMé oé o oM🚀", + "Moo é🚀🚀ooMMMoé🚀o oM o oMoooooM🚀MM🚀🚀ooéo 🚀ééoo🚀 o", + "Moo é🚀🚀oéé Moo", + "Moo é🚀" + ] + ], + "884430255819745256523193039258211446315638002813", + "-693898364554408765599645607512590923470049104324493537713311421", + "Moo é🚀oo M🚀 🚀o oMé🚀é éooé🚀 M🚀🚀 oMMé éo🚀oooo ooM ", + "23650830203124819375692743025730069794796506458213991695" + ], + "0xf27860b6798d6c05", + ["0xe467C54dF3a1e5AF92A97A9Aa8184E4dc0A1b11C", "-15200"] + ], + true, + true, + "0xea1849" + ], + [ + [ + "0xdb65be2d5277216dfbdf02dcfdf7", + "0xbb91c6ec887873483da9947eb851", + "0x924e3f8e49abdc8fc0218e40e307" + ], + [ + [ + [ + [ + "Moo é🚀 Moéé MoMooooMM🚀o🚀ooMéoM o", + "Moo é🚀🚀éo 🚀o ", + "Moo é🚀oéo🚀🚀o 🚀Mo🚀o M🚀oéo ooéMo🚀é 🚀MMo oé oM🚀🚀é🚀🚀🚀🚀é", + "Moo é🚀 oé Moo 🚀M oMo M" + ], + [ + "Moo é🚀oooooéoéooéoé🚀M🚀M🚀oMMMo🚀 é é é", + "Moo é🚀Méo🚀 oMM🚀ooMMM🚀M🚀oooé🚀 Mo🚀 🚀", + "Moo é🚀", + "Moo é🚀M🚀ooMo ééM o ééMM 🚀éMéoo🚀oé🚀Mé" + ], + [ + "Moo é🚀o 🚀MoéMMoo🚀🚀o oM🚀ooéMé🚀éééM oo🚀 🚀ooMMo éo", + "Moo é🚀o🚀oMooéé oé ", + "Moo é🚀🚀 🚀o🚀o o🚀o🚀🚀éMM o o🚀MooMoo éo MMo 🚀Moééoooé🚀oM🚀 oo🚀", + "Moo é🚀o🚀o M🚀o o" + ], + [ + "Moo é🚀", + "Moo é🚀oMooééM éM é éMoMoéoooé🚀o🚀o o ooéo éM M🚀o", + "Moo é🚀🚀 éé oo o🚀o oMééo ooo🚀oé o ", + "Moo é🚀 éé é🚀éoé oé é é🚀MéoM é Mo" + ] + ], + "949266093556621147761682348332220140352897609418", + "-26024854546950923878321035282188769806149122950412435678850226859", + "Moo é🚀 🚀M", + "19179245589829708036931860587278255011873379139647833701" + ], + "0x68fe5be447ac0c11", + ["0x32E8BE048439df51Dc27a643EE2625Dfa7676805", "22644"] + ], + false, + false, + "0x38c185" + ] + ], + "0x75e7eF8F5cb09e7825071BEDdeD8844E66A4c299", + "0xE86C3471425fF22ef76F60B0C19227813057cdCc", + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2083905f5a3502830581dc8384f5" + }, + { + "type": "hexstring", + "value": "0xd46b270375c488525e1ade05c524" + }, + { + "type": "hexstring", + "value": "0xa242d24a9178b6924fb23244dd6b" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM é🚀MooM🚀 🚀🚀ééo🚀🚀 M" + }, + { + "type": "string", + "value": "Moo é🚀o🚀MM 🚀oM🚀 oMo ooéooMooooMoo🚀éoo 🚀 🚀 éMMM o M🚀o🚀🚀Mé" + }, + { + "type": "string", + "value": "Moo é🚀Mo o🚀🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀 o🚀MooooéoMoM🚀🚀Moé🚀éooéM MoMMéoMéooo M" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ééo MoéMéM🚀ooooo🚀Mo🚀é🚀oMoo🚀oo" + }, + { + "type": "string", + "value": "Moo é🚀é🚀ooMMééM🚀🚀🚀é 🚀é🚀oo 🚀M🚀 oM" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀é 🚀oMé M 🚀o " + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀🚀🚀oo o🚀oéoo🚀Méé oMé🚀é M 🚀oM🚀oMoo 🚀MoooMoM🚀" + }, + { + "type": "string", + "value": "Moo é🚀é🚀éo🚀🚀🚀 éoo o oM🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀é ééoo Méo o" + }, + { + "type": "string", + "value": "Moo é🚀 éo🚀MMMo🚀oo oo o🚀MéMéM🚀Mo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é oo🚀MMoMé oé o oM🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀ooMMMoé🚀o oM o oMoooooM🚀MM🚀🚀ooéo 🚀ééoo🚀 o" + }, + { + "type": "string", + "value": "Moo é🚀🚀oéé Moo" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + { + "type": "number", + "value": "884430255819745256523193039258211446315638002813" + }, + { + "type": "number", + "value": "-693898364554408765599645607512590923470049104324493537713311421" + }, + { + "type": "string", + "value": "Moo é🚀oo M🚀 🚀o oMé🚀é éooé🚀 M🚀🚀 oMMé éo🚀oooo ooM " + }, + { + "type": "number", + "value": "23650830203124819375692743025730069794796506458213991695" + } + ] + }, + { + "type": "hexstring", + "value": "0xf27860b6798d6c05" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xe467C54dF3a1e5AF92A97A9Aa8184E4dc0A1b11C" + }, + { + "type": "number", + "value": "-15200" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xea1849" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xdb65be2d5277216dfbdf02dcfdf7" + }, + { + "type": "hexstring", + "value": "0xbb91c6ec887873483da9947eb851" + }, + { + "type": "hexstring", + "value": "0x924e3f8e49abdc8fc0218e40e307" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 Moéé MoMooooMM🚀o🚀ooMéoM o" + }, + { + "type": "string", + "value": "Moo é🚀🚀éo 🚀o " + }, + { + "type": "string", + "value": "Moo é🚀oéo🚀🚀o 🚀Mo🚀o M🚀oéo ooéMo🚀é 🚀MMo oé oM🚀🚀é🚀🚀🚀🚀é" + }, + { + "type": "string", + "value": "Moo é🚀 oé Moo 🚀M oMo M" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oooooéoéooéoé🚀M🚀M🚀oMMMo🚀 é é é" + }, + { + "type": "string", + "value": "Moo é🚀Méo🚀 oMM🚀ooMMM🚀M🚀oooé🚀 Mo🚀 🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀M🚀ooMo ééM o ééMM 🚀éMéoo🚀oé🚀Mé" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o 🚀MoéMMoo🚀🚀o oM🚀ooéMé🚀éééM oo🚀 🚀ooMMo éo" + }, + { + "type": "string", + "value": "Moo é🚀o🚀oMooéé oé " + }, + { + "type": "string", + "value": "Moo é🚀🚀 🚀o🚀o o🚀o🚀🚀éMM o o🚀MooMoo éo MMo 🚀Moééoooé🚀oM🚀 oo🚀" + }, + { + "type": "string", + "value": "Moo é🚀o🚀o M🚀o o" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀oMooééM éM é éMoMoéoooé🚀o🚀o o ooéo éM M🚀o" + }, + { + "type": "string", + "value": "Moo é🚀🚀 éé oo o🚀o oMééo ooo🚀oé o " + }, + { + "type": "string", + "value": "Moo é🚀 éé é🚀éoé oé é é🚀MéoM é Mo" + } + ] + } + ] + }, + { + "type": "number", + "value": "949266093556621147761682348332220140352897609418" + }, + { + "type": "number", + "value": "-26024854546950923878321035282188769806149122950412435678850226859" + }, + { + "type": "string", + "value": "Moo é🚀 🚀M" + }, + { + "type": "number", + "value": "19179245589829708036931860587278255011873379139647833701" + } + ] + }, + { + "type": "hexstring", + "value": "0x68fe5be447ac0c11" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x32E8BE048439df51Dc27a643EE2625Dfa7676805" + }, + { + "type": "number", + "value": "22644" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x38c185" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x75e7eF8F5cb09e7825071BEDdeD8844E66A4c299" + }, + { + "type": "address", + "value": "0xE86C3471425fF22ef76F60B0C19227813057cdCc" + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50611266806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610ba9565b60405180910390f35b6100566108c8565b61005e6108c8565b6100666108f6565b61006e610923565b610076610943565b6d2083905f5a3502830581dc8384f560901b81526d351ac9c0dd7122149786b781714960921b60208201526da242d24a9178b6924fb23244dd6b60901b604082015281526100c2610961565b6100ca61099f565b6100d26109d3565b6100da610a00565b6000604051806060016040528060338152602001610e2d603391398252506040805160808101909152605d8082526000919061108c602083013960208381019190915260408051808201825260168152749adede418753e13f35009ade40dfe13f3501e13f3560571b818401528185015280516080810190915260468082526000935090916111eb908301396060830152508152610176610a00565b60006040518060600160405280603c8152602001610fee603c91398252506040805160808101909152604180825260009190610dec6020830139602083810191909152604080518082018252600a8152689adede418753e13f3560b71b81840152818501528051808201909152601e81527f4d6f6f20c3a9f09f9a80c3a920f09f9a806f4dc3a9204d20f09f9a806f20000081830152606084015283019190915250610220610a00565b60006040518060800160405280605b8152602001610d91605b91398252506040805160608101909152602d8082526000919061102a6020830139602083810191909152604080518082018252601e81527f4d6f6f20c3a9f09f9a80f09f9a80c3a920c3a9c3a96f6f204dc3a96f206f000081840152818501528051606081019091526032808252600093509091610ce99083013960608301525060408201526102c7610a00565b6000604051806060016040528060278152602001610fc7602791398252506040805160808101909152604d808252600091906110e96020830139602083810191909152604080518082018252601881527f4d6f6f20c3a9f09f9a80f09f9a806fc3a9c3a920204d6f6f0000000000000000818401528185015280518082018252600a8152689adede418753e13f3560b71b8184015260608086019190915285019390935292845250739aeb396b87f313787a26b491930ba71fbad3147d838301527a01afd0631db3b6893e99970e3880b587b600fc4c9802306a8fcebc19838201528051608081019091526050808252600092610e9d9083013960608301525076f6ed1ab574aa7b6002b779f7d964b7c300cb59066e450f6080820152815267f27860b6798d6c0560c01b6020820152610411604080518082019091526000808252602082015290565b73e467c54df3a1e5af92a97a9aa8184e4dc0a1b11c8152613b5f196020808301919091526040838101929092528301919091526001908201819052606082015262ea184960e81b60808201528152610467610923565b61046f610943565b6ddb65be2d5277216dfbdf02dcfdf760901b81526dbb91c6ec887873483da9947eb85160901b60208201526d924e3f8e49abdc8fc0218e40e30760901b604082015281526104bb610961565b6104c361099f565b6104cb6109d3565b6104d3610a00565b60006040518060600160405280602e8152602001610d1b602e913982525060408051808201909152601981527f4d6f6f20c3a9f09f9a80f09f9a80c3a96f20f09f9a806f20200000000000000060208201528082600160200201819052505060006040518060a0016040528060658152602001611186606591396040838101919091528051808201909152601e81527f4d6f6f20c3a9f09f9a80206fc3a9204d6f6f20f09f9a804d206f4d6f204d000060208201526060830152508152610598610a00565b60006040518060600160405280603b8152602001610f50603b91398252506040805160608101909152603d80825260009190610e606020830139602083810191909152604080518082018252600a8152689adede418753e13f3560b71b8184015281850152805160608101909152603c808252600093509091610f8b90830139606083015250602082015261062b610a00565b60006040518060800160405280605081526020016111366050913982525060408051808201909152601c81527f4d6f6f20c3a9f09f9a806ff09f9a806f4d6f6fc3a9c3a9206fc3a9200000000060208201528082600160200201819052505060006040518060a0016040528060638152602001610eed6063913960408381019190915280518082018252601981527f4d6f6f20c3a9f09f9a806ff09f9a806f204df09f9a806f206f0000000000000060208201526060840152830191909152506106f3610a00565b604080518082018252600a8152689adede418753e13f3560b71b602080830191909152908352815160808101909252604880835260009291610d49908301399050808260016020020181905250506000604051806060016040528060348152602001610cb5603491396040808401919091528051606081019091526035808252600092506110576020830139606080840191909152838101929092525090825273a646905601e333084bce2405025cc8951860eeca6020838101919091527a3f434e86d6c4d881675319f535c93375d9878468b5503f3ce89aaa196040808501919091528051808201825260128152714d6f6f20c3a9f09f9a80202020f09f9a804d60701b818401528484015276c83d9c5bfdfb014d053bda6e8926032da4c5c5fd9e06656080808601919091529385526768fe5be447ac0c1160c01b85830152805180820182527332e8be048439df51dc27a643ee2625dfa7676805815261587481840152858201528582019490945260008585018190528583018190526238c18560e81b93860193909352858101949094529385527375e7ef8f5cb09e7825071bedded8844e66a4c2999285019290925273e86c3471425ff22ef76f60b0c19227813057cdcc9084015290820152919050565b60405180608001604052806108db6108f6565b81526000602082018190526040820181905260609091015290565b60405180604001604052806002905b61090d610923565b8152602001906001900390816109055790505090565b6040518060a00160405280610936610943565b81526020016108db610961565b60405180606001604052806003906020820280368337509192915050565b604051806060016040528061097461099f565b81526000602082015260400161099a604080518082019091526000808252602082015290565b905290565b6040518060a001604052806109b26109d3565b81526000602082018190526040820181905260608083015260809091015290565b60405180608001604052806004905b6109ea610a00565b8152602001906001900390816109e25790505090565b60405180608001604052806004905b6060815260200190600190039081610a0f5790505090565b6000815180845260005b81811015610a4d57602081850181015186830182015201610a31565b81811115610a5f576000602083870101525b50601f01601f19169290920160200192915050565b80516080808452815160a085830152600092906101a0860190610120870185805b6004808210610aa45750610afc565b8a860361011f19018452845186898101855b84811015610ae3578982038352610ace828551610a27565b60209485019493909301929150600101610ab6565b5097505050602094850194939093019250600101610a95565b5050505060208201516001600160a01b031660a08701526040820151601a0b60c08701526060820151868203607f190160e0880152610b3b8282610a27565b938301516001600160b81b038116610100890152939150610b599050565b60208501519250610b7660208701846001600160c01b0319169052565b60408501519250610ba0604087018480516001600160a01b0316825260209081015160010b910152565b95945050505050565b6000602080835260a08084018551608080858801528283905060e093508388016000805b6002811015610c77578a8303609f190184528551805184845b6003811015610c1857825171ffffffffffffffffffffffffffffffffffff19168252918c0191908c0190600101610be6565b5050508981015160608981870152610c328a870183610a74565b91506040830151610c468988018215159052565b508201511515858b0152908601516001600160e81b03191660c0909401939093529488019492880192600101610bcd565b5050958901516001600160a01b0390811660408a8101919091528a0151166060808a0191909152909801511515960195909552509094935050505056fe4d6f6f20c3a9f09f9a80f09f9a8020c3a9c3a9206f6f206ff09f9a806f206f4dc3a9c3a96f20206f6f6ff09f9a806fc3a9206f204d6f6f20c3a9f09f9a8020c3a96ff09f9a804d4d4d6ff09f9a806f6f206f6f206ff09f9a804dc3a94dc3a94df09f9a804d6f4d6f6f20c3a9f09f9a80204d6fc3a9c3a920204d6f4d6f6f6f6f4d4df09f9a806ff09f9a806f6f4dc3a96f4d206f4d6f6f20c3a9f09f9a806f4d6f6fc3a9c3a94d20c3a94d2020c3a920c3a94d6f4d6fc3a96f6f6fc3a9f09f9a806ff09f9a806f206f206f6fc3a96f202020c3a94d204df09f9a806f4d6f6f20c3a9f09f9a802020f09f9a80f09f9a80f09f9a806f6f206ff09f9a806fc3a96f6ff09f9a804dc3a9c3a9206f4dc3a9f09f9a80c3a9204d2020f09f9a806f4df09f9a806f4d6f6f20f09f9a804d6f6f6f4d6f4df09f9a804d6f6f20c3a9f09f9a80c3a9f09f9a806f6f4d4dc3a9c3a94df09f9a80f09f9a80f09f9a80c3a920f09f9a80c3a9f09f9a806f6f20f09f9a804df09f9a80206f4d4d6f6f20c3a9f09f9a806f4d20c3a9f09f9a804d6f6f4df09f9a8020f09f9a80f09f9a80c3a9c3a96ff09f9a80f09f9a80204d4d6f6f20c3a9f09f9a804dc3a96ff09f9a80206f4d4df09f9a806f6f4d4d4df09f9a804df09f9a806f6f6fc3a9f09f9a80204d6ff09f9a8020f09f9a804d6f6f20c3a9f09f9a806f6f204df09f9a8020f09f9a806f206f4dc3a9f09f9a80c3a92020c3a96f6fc3a9f09f9a80204df09f9a80f09f9a80206f4d4dc3a920c3a96ff09f9a806f6f6f6f206f6f4d204d6f6f20c3a9f09f9a80f09f9a8020f09f9a806ff09f9a806f206ff09f9a806ff09f9a80f09f9a80c3a94d4d206f206ff09f9a804d6f6f4d6f6f20c3a96f204d4d6f20f09f9a804d6fc3a9c3a96f6f6fc3a9f09f9a806f4df09f9a80206f6ff09f9a804d6f6f20c3a9f09f9a806f6f6f6f6fc3a96fc3a96f6fc3a96fc3a9f09f9a804df09f9a804df09f9a806f4d4d4d6ff09f9a8020c3a920c3a920c3a94d6f6f20c3a9f09f9a804df09f9a806f6f4d6f20c3a9c3a94d206f20c3a9c3a94d4d20f09f9a80c3a94dc3a96f6ff09f9a806fc3a9f09f9a804dc3a94d6f6f20c3a9f09f9a80c3a920206f6ff09f9a804d4d6f4dc3a9206fc3a9206f206f4df09f9a804d6f6f20c3a9f09f9a80c3a9c3a96f20204d6fc3a94dc3a94df09f9a806f6f6f6f6ff09f9a804d6ff09f9a80c3a9f09f9a806f4d6f6ff09f9a806f6f4d6f6f20c3a9f09f9a80c3a9f09f9a80c3a96ff09f9a80f09f9a80f09f9a8020c3a96f6f206f206f4df09f9a804d6f6f20c3a9f09f9a8020c3a9c3a920c3a9f09f9a80c3a96fc3a9206fc3a92020c3a920c3a9f09f9a804dc3a96f4d20c3a9204d6f4d6f6f20c3a9f09f9a806ff09f9a804d4d20f09f9a806f4df09f9a80206f4d6f206f6fc3a96f6f4d6f6f6f6f4d6f6ff09f9a80c3a96f6f20f09f9a802020f09f9a802020c3a94d4d4d206f204df09f9a806ff09f9a80f09f9a804dc3a94d6f6f20c3a9f09f9a80f09f9a806f6f4d4d4d6fc3a9f09f9a806f206f4d206f206f4d6f6f6f6f6f4df09f9a804d4df09f9a80f09f9a806f6fc3a96f20f09f9a80c3a9c3a96f6ff09f9a80206f4d6f6f20c3a9f09f9a806f20f09f9a804d6fc3a94d4d6f6ff09f9a80f09f9a806f206f4df09f9a806f6fc3a94dc3a9f09f9a80c3a9c3a9c3a94d206f6ff09f9a8020f09f9a806f6f4d4d6f2020c3a96f4d6f6f20c3a9f09f9a806fc3a96ff09f9a80f09f9a806f20f09f9a804d6ff09f9a806f204df09f9a806fc3a96f206f6fc3a94d6ff09f9a80c3a920f09f9a804d4d6f206fc3a9206f4df09f9a80f09f9a80c3a9f09f9a80f09f9a80f09f9a80f09f9a80c3a94d6f6f20c3a9f09f9a80f09f9a80206ff09f9a804d6f6f6f6fc3a96f4d6f4df09f9a80f09f9a804d6fc3a9f09f9a80c3a96f6fc3a94d204d6f4d4dc3a96f4dc3a96f6f6f204da264697066735822122035b2b7cbbafa0008c89e84028629b7f29e2d0c9fe819862dc3562b56a60fcb1e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_7c85266e {\n string[4][4] s_0;\n uint160 s_1;\n int216 s_2;\n string s_3;\n uint184 s_4;\n }\n\n struct S_b49bcddb {\n address s_0;\n int16 s_1;\n }\n\n struct S_48dbe8a4 {\n S_7c85266e s_0;\n bytes8 s_1;\n S_b49bcddb s_2;\n }\n\n struct S_35777228 {\n bytes14[3] s_0;\n S_48dbe8a4 s_1;\n bool s_2;\n bool s_3;\n bytes3 s_4;\n }\n\n struct S_d881be93 {\n S_35777228[2] s_0;\n address s_1;\n address s_2;\n bool s_3;\n }\n\n function test () public pure returns (S_d881be93 memory) {\n S_d881be93 memory r;\n {\n S_35777228[2] memory r_0;\n {\n S_35777228 memory r_0_0;\n {\n bytes14[3] memory r_0_0_0;\n {\n bytes14 r_0_0_0_0 = bytes14(0x2083905f5a3502830581dc8384f5);\n r_0_0_0[0] = r_0_0_0_0;\n }\n {\n bytes14 r_0_0_0_1 = bytes14(0xd46b270375c488525e1ade05c524);\n r_0_0_0[1] = r_0_0_0_1;\n }\n {\n bytes14 r_0_0_0_2 = bytes14(0xa242d24a9178b6924fb23244dd6b);\n r_0_0_0[2] = r_0_0_0_2;\n }\n r_0_0.s_0 = r_0_0_0;\n }\n {\n S_48dbe8a4 memory r_0_0_1;\n {\n S_7c85266e memory r_0_0_1_0;\n {\n string[4][4] memory r_0_0_1_0_0;\n {\n string[4] memory r_0_0_1_0_0_0;\n {\n string memory r_0_0_1_0_0_0_0 = unicode\"Moo é🚀oM é🚀MooM🚀 🚀🚀ééo🚀🚀 M\";\n r_0_0_1_0_0_0[0] = r_0_0_1_0_0_0_0;\n }\n {\n string memory r_0_0_1_0_0_0_1 = unicode\"Moo é🚀o🚀MM 🚀oM🚀 oMo ooéooMooooMoo🚀éoo 🚀 🚀 éMMM o M🚀o🚀🚀Mé\";\n r_0_0_1_0_0_0[1] = r_0_0_1_0_0_0_1;\n }\n {\n string memory r_0_0_1_0_0_0_2 = unicode\"Moo é🚀Mo o🚀🚀\";\n r_0_0_1_0_0_0[2] = r_0_0_1_0_0_0_2;\n }\n {\n string memory r_0_0_1_0_0_0_3 = unicode\"Moo é🚀🚀 o🚀MooooéoMoM🚀🚀Moé🚀éooéM MoMMéoMéooo M\";\n r_0_0_1_0_0_0[3] = r_0_0_1_0_0_0_3;\n }\n r_0_0_1_0_0[0] = r_0_0_1_0_0_0;\n }\n {\n string[4] memory r_0_0_1_0_0_1;\n {\n string memory r_0_0_1_0_0_1_0 = unicode\"Moo é🚀ééo MoéMéM🚀ooooo🚀Mo🚀é🚀oMoo🚀oo\";\n r_0_0_1_0_0_1[0] = r_0_0_1_0_0_1_0;\n }\n {\n string memory r_0_0_1_0_0_1_1 = unicode\"Moo é🚀é🚀ooMMééM🚀🚀🚀é 🚀é🚀oo 🚀M🚀 oM\";\n r_0_0_1_0_0_1[1] = r_0_0_1_0_0_1_1;\n }\n {\n string memory r_0_0_1_0_0_1_2 = unicode\"Moo é🚀\";\n r_0_0_1_0_0_1[2] = r_0_0_1_0_0_1_2;\n }\n {\n string memory r_0_0_1_0_0_1_3 = unicode\"Moo é🚀é 🚀oMé M 🚀o \";\n r_0_0_1_0_0_1[3] = r_0_0_1_0_0_1_3;\n }\n r_0_0_1_0_0[1] = r_0_0_1_0_0_1;\n }\n {\n string[4] memory r_0_0_1_0_0_2;\n {\n string memory r_0_0_1_0_0_2_0 = unicode\"Moo é🚀 🚀🚀🚀oo o🚀oéoo🚀Méé oMé🚀é M 🚀oM🚀oMoo 🚀MoooMoM🚀\";\n r_0_0_1_0_0_2[0] = r_0_0_1_0_0_2_0;\n }\n {\n string memory r_0_0_1_0_0_2_1 = unicode\"Moo é🚀é🚀éo🚀🚀🚀 éoo o oM🚀\";\n r_0_0_1_0_0_2[1] = r_0_0_1_0_0_2_1;\n }\n {\n string memory r_0_0_1_0_0_2_2 = unicode\"Moo é🚀🚀é ééoo Méo o\";\n r_0_0_1_0_0_2[2] = r_0_0_1_0_0_2_2;\n }\n {\n string memory r_0_0_1_0_0_2_3 = unicode\"Moo é🚀 éo🚀MMMo🚀oo oo o🚀MéMéM🚀Mo\";\n r_0_0_1_0_0_2[3] = r_0_0_1_0_0_2_3;\n }\n r_0_0_1_0_0[2] = r_0_0_1_0_0_2;\n }\n {\n string[4] memory r_0_0_1_0_0_3;\n {\n string memory r_0_0_1_0_0_3_0 = unicode\"Moo é🚀é oo🚀MMoMé oé o oM🚀\";\n r_0_0_1_0_0_3[0] = r_0_0_1_0_0_3_0;\n }\n {\n string memory r_0_0_1_0_0_3_1 = unicode\"Moo é🚀🚀ooMMMoé🚀o oM o oMoooooM🚀MM🚀🚀ooéo 🚀ééoo🚀 o\";\n r_0_0_1_0_0_3[1] = r_0_0_1_0_0_3_1;\n }\n {\n string memory r_0_0_1_0_0_3_2 = unicode\"Moo é🚀🚀oéé Moo\";\n r_0_0_1_0_0_3[2] = r_0_0_1_0_0_3_2;\n }\n {\n string memory r_0_0_1_0_0_3_3 = unicode\"Moo é🚀\";\n r_0_0_1_0_0_3[3] = r_0_0_1_0_0_3_3;\n }\n r_0_0_1_0_0[3] = r_0_0_1_0_0_3;\n }\n r_0_0_1_0.s_0 = r_0_0_1_0_0;\n }\n {\n uint160 r_0_0_1_0_1 = 884430255819745256523193039258211446315638002813;\n r_0_0_1_0.s_1 = r_0_0_1_0_1;\n }\n {\n int216 r_0_0_1_0_2 = -693898364554408765599645607512590923470049104324493537713311421;\n r_0_0_1_0.s_2 = r_0_0_1_0_2;\n }\n {\n string memory r_0_0_1_0_3 = unicode\"Moo é🚀oo M🚀 🚀o oMé🚀é éooé🚀 M🚀🚀 oMMé éo🚀oooo ooM \";\n r_0_0_1_0.s_3 = r_0_0_1_0_3;\n }\n {\n uint184 r_0_0_1_0_4 = 23650830203124819375692743025730069794796506458213991695;\n r_0_0_1_0.s_4 = r_0_0_1_0_4;\n }\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n {\n bytes8 r_0_0_1_1 = bytes8(0xf27860b6798d6c05);\n r_0_0_1.s_1 = r_0_0_1_1;\n }\n {\n S_b49bcddb memory r_0_0_1_2;\n {\n address r_0_0_1_2_0 = 0xe467C54dF3a1e5AF92A97A9Aa8184E4dc0A1b11C;\n r_0_0_1_2.s_0 = r_0_0_1_2_0;\n }\n {\n int16 r_0_0_1_2_1 = -15200;\n r_0_0_1_2.s_1 = r_0_0_1_2_1;\n }\n r_0_0_1.s_2 = r_0_0_1_2;\n }\n r_0_0.s_1 = r_0_0_1;\n }\n {\n bool r_0_0_2 = true;\n r_0_0.s_2 = r_0_0_2;\n }\n {\n bool r_0_0_3 = true;\n r_0_0.s_3 = r_0_0_3;\n }\n {\n bytes3 r_0_0_4 = bytes3(0xea1849);\n r_0_0.s_4 = r_0_0_4;\n }\n r_0[0] = r_0_0;\n }\n {\n S_35777228 memory r_0_1;\n {\n bytes14[3] memory r_0_1_0;\n {\n bytes14 r_0_1_0_0 = bytes14(0xdb65be2d5277216dfbdf02dcfdf7);\n r_0_1_0[0] = r_0_1_0_0;\n }\n {\n bytes14 r_0_1_0_1 = bytes14(0xbb91c6ec887873483da9947eb851);\n r_0_1_0[1] = r_0_1_0_1;\n }\n {\n bytes14 r_0_1_0_2 = bytes14(0x924e3f8e49abdc8fc0218e40e307);\n r_0_1_0[2] = r_0_1_0_2;\n }\n r_0_1.s_0 = r_0_1_0;\n }\n {\n S_48dbe8a4 memory r_0_1_1;\n {\n S_7c85266e memory r_0_1_1_0;\n {\n string[4][4] memory r_0_1_1_0_0;\n {\n string[4] memory r_0_1_1_0_0_0;\n {\n string memory r_0_1_1_0_0_0_0 = unicode\"Moo é🚀 Moéé MoMooooMM🚀o🚀ooMéoM o\";\n r_0_1_1_0_0_0[0] = r_0_1_1_0_0_0_0;\n }\n {\n string memory r_0_1_1_0_0_0_1 = unicode\"Moo é🚀🚀éo 🚀o \";\n r_0_1_1_0_0_0[1] = r_0_1_1_0_0_0_1;\n }\n {\n string memory r_0_1_1_0_0_0_2 = unicode\"Moo é🚀oéo🚀🚀o 🚀Mo🚀o M🚀oéo ooéMo🚀é 🚀MMo oé oM🚀🚀é🚀🚀🚀🚀é\";\n r_0_1_1_0_0_0[2] = r_0_1_1_0_0_0_2;\n }\n {\n string memory r_0_1_1_0_0_0_3 = unicode\"Moo é🚀 oé Moo 🚀M oMo M\";\n r_0_1_1_0_0_0[3] = r_0_1_1_0_0_0_3;\n }\n r_0_1_1_0_0[0] = r_0_1_1_0_0_0;\n }\n {\n string[4] memory r_0_1_1_0_0_1;\n {\n string memory r_0_1_1_0_0_1_0 = unicode\"Moo é🚀oooooéoéooéoé🚀M🚀M🚀oMMMo🚀 é é é\";\n r_0_1_1_0_0_1[0] = r_0_1_1_0_0_1_0;\n }\n {\n string memory r_0_1_1_0_0_1_1 = unicode\"Moo é🚀Méo🚀 oMM🚀ooMMM🚀M🚀oooé🚀 Mo🚀 🚀\";\n r_0_1_1_0_0_1[1] = r_0_1_1_0_0_1_1;\n }\n {\n string memory r_0_1_1_0_0_1_2 = unicode\"Moo é🚀\";\n r_0_1_1_0_0_1[2] = r_0_1_1_0_0_1_2;\n }\n {\n string memory r_0_1_1_0_0_1_3 = unicode\"Moo é🚀M🚀ooMo ééM o ééMM 🚀éMéoo🚀oé🚀Mé\";\n r_0_1_1_0_0_1[3] = r_0_1_1_0_0_1_3;\n }\n r_0_1_1_0_0[1] = r_0_1_1_0_0_1;\n }\n {\n string[4] memory r_0_1_1_0_0_2;\n {\n string memory r_0_1_1_0_0_2_0 = unicode\"Moo é🚀o 🚀MoéMMoo🚀🚀o oM🚀ooéMé🚀éééM oo🚀 🚀ooMMo éo\";\n r_0_1_1_0_0_2[0] = r_0_1_1_0_0_2_0;\n }\n {\n string memory r_0_1_1_0_0_2_1 = unicode\"Moo é🚀o🚀oMooéé oé \";\n r_0_1_1_0_0_2[1] = r_0_1_1_0_0_2_1;\n }\n {\n string memory r_0_1_1_0_0_2_2 = unicode\"Moo é🚀🚀 🚀o🚀o o🚀o🚀🚀éMM o o🚀MooMoo éo MMo 🚀Moééoooé🚀oM🚀 oo🚀\";\n r_0_1_1_0_0_2[2] = r_0_1_1_0_0_2_2;\n }\n {\n string memory r_0_1_1_0_0_2_3 = unicode\"Moo é🚀o🚀o M🚀o o\";\n r_0_1_1_0_0_2[3] = r_0_1_1_0_0_2_3;\n }\n r_0_1_1_0_0[2] = r_0_1_1_0_0_2;\n }\n {\n string[4] memory r_0_1_1_0_0_3;\n {\n string memory r_0_1_1_0_0_3_0 = unicode\"Moo é🚀\";\n r_0_1_1_0_0_3[0] = r_0_1_1_0_0_3_0;\n }\n {\n string memory r_0_1_1_0_0_3_1 = unicode\"Moo é🚀oMooééM éM é éMoMoéoooé🚀o🚀o o ooéo éM M🚀o\";\n r_0_1_1_0_0_3[1] = r_0_1_1_0_0_3_1;\n }\n {\n string memory r_0_1_1_0_0_3_2 = unicode\"Moo é🚀🚀 éé oo o🚀o oMééo ooo🚀oé o \";\n r_0_1_1_0_0_3[2] = r_0_1_1_0_0_3_2;\n }\n {\n string memory r_0_1_1_0_0_3_3 = unicode\"Moo é🚀 éé é🚀éoé oé é é🚀MéoM é Mo\";\n r_0_1_1_0_0_3[3] = r_0_1_1_0_0_3_3;\n }\n r_0_1_1_0_0[3] = r_0_1_1_0_0_3;\n }\n r_0_1_1_0.s_0 = r_0_1_1_0_0;\n }\n {\n uint160 r_0_1_1_0_1 = 949266093556621147761682348332220140352897609418;\n r_0_1_1_0.s_1 = r_0_1_1_0_1;\n }\n {\n int216 r_0_1_1_0_2 = -26024854546950923878321035282188769806149122950412435678850226859;\n r_0_1_1_0.s_2 = r_0_1_1_0_2;\n }\n {\n string memory r_0_1_1_0_3 = unicode\"Moo é🚀 🚀M\";\n r_0_1_1_0.s_3 = r_0_1_1_0_3;\n }\n {\n uint184 r_0_1_1_0_4 = 19179245589829708036931860587278255011873379139647833701;\n r_0_1_1_0.s_4 = r_0_1_1_0_4;\n }\n r_0_1_1.s_0 = r_0_1_1_0;\n }\n {\n bytes8 r_0_1_1_1 = bytes8(0x68fe5be447ac0c11);\n r_0_1_1.s_1 = r_0_1_1_1;\n }\n {\n S_b49bcddb memory r_0_1_1_2;\n {\n address r_0_1_1_2_0 = 0x32E8BE048439df51Dc27a643EE2625Dfa7676805;\n r_0_1_1_2.s_0 = r_0_1_1_2_0;\n }\n {\n int16 r_0_1_1_2_1 = 22644;\n r_0_1_1_2.s_1 = r_0_1_1_2_1;\n }\n r_0_1_1.s_2 = r_0_1_1_2;\n }\n r_0_1.s_1 = r_0_1_1;\n }\n {\n bool r_0_1_2 = false;\n r_0_1.s_2 = r_0_1_2;\n }\n {\n bool r_0_1_3 = false;\n r_0_1.s_3 = r_0_1_3;\n }\n {\n bytes3 r_0_1_4 = bytes3(0x38c185);\n r_0_1.s_4 = r_0_1_4;\n }\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x75e7eF8F5cb09e7825071BEDdeD8844E66A4c299;\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xE86C3471425fF22ef76F60B0C19227813057cdCc;\n r.s_2 = r_2;\n }\n {\n bool r_3 = false;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000075e7ef8f5cb09e7825071bedded8844e66a4c299000000000000000000000000e86c3471425ff22ef76f60b0c19227813057cdcc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000b202083905f5a3502830581dc8384f5000000000000000000000000000000000000d46b270375c488525e1ade05c524000000000000000000000000000000000000a242d24a9178b6924fb23244dd6b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001ea184900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f27860b6798d6c05000000000000000000000000000000000000000000000000000000000000000000000000e467c54df3a1e5af92a97a9aa8184e4dc0a1b11cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc4a000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000009aeb396b87f313787a26b491930ba71fbad3147dfffffffffffe502f9ce24c4976c16668f1c77f4a7849ff03b367fdcf957031430000000000000000000000000000000000000000000000000000000000000900000000000000000000f6ed1ab574aa7b6002b779f7d964b7c300cb59066e450f000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a806f4d20c3a9f09f9a804d6f6f4df09f9a8020f09f9a80f09f9a80c3a9c3a96ff09f9a80f09f9a80204d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a806ff09f9a804d4d20f09f9a806f4df09f9a80206f4d6f206f6fc3a96f6f4d6f6f6f6f4d6f6ff09f9a80c3a96f6f20f09f9a802020f09f9a802020c3a94d4d4d206f204df09f9a806ff09f9a80f09f9a804dc3a900000000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a804d6f206ff09f9a80f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a80f09f9a80206ff09f9a804d6f6f6f6fc3a96f4d6f4df09f9a80f09f9a804d6fc3a9f09f9a80c3a96f6fc3a94d204d6f4d4dc3a96f4dc3a96f6f6f204d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a80c3a9c3a96f20204d6fc3a94dc3a94df09f9a806f6f6f6f6ff09f9a804d6ff09f9a80c3a9f09f9a806f4d6f6ff09f9a806f6f0000000000000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a80c3a9f09f9a806f6f4d4dc3a9c3a94df09f9a80f09f9a80f09f9a80c3a920f09f9a80c3a9f09f9a806f6f20f09f9a804df09f9a80206f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a80c3a920f09f9a806f4dc3a9204d20f09f9a806f20000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a802020f09f9a80f09f9a80f09f9a806f6f206ff09f9a806fc3a96f6ff09f9a804dc3a9c3a9206f4dc3a9f09f9a80c3a9204d2020f09f9a806f4df09f9a806f4d6f6f20f09f9a804d6f6f6f4d6f4df09f9a800000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a80c3a9f09f9a80c3a96ff09f9a80f09f9a80f09f9a8020c3a96f6f206f206f4df09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a80f09f9a80c3a920c3a9c3a96f6f204dc3a96f206f000000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a8020c3a96ff09f9a804d4d4d6ff09f9a806f6f206f6f206ff09f9a804dc3a94dc3a94df09f9a804d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a80c3a920206f6ff09f9a804d4d6f4dc3a9206fc3a9206f206f4df09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a80f09f9a806f6f4d4d4d6fc3a9f09f9a806f206f4d206f206f4d6f6f6f6f6f4df09f9a804d4df09f9a80f09f9a806f6fc3a96f20f09f9a80c3a9c3a96f6ff09f9a80206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a80f09f9a806fc3a9c3a920204d6f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a806f6f204df09f9a8020f09f9a806f206f4dc3a9f09f9a80c3a92020c3a96f6fc3a9f09f9a80204df09f9a80f09f9a80206f4d4dc3a920c3a96ff09f9a806f6f6f6f206f6f4d2000000000000000000000000000000000db65be2d5277216dfbdf02dcfdf7000000000000000000000000000000000000bb91c6ec887873483da9947eb851000000000000000000000000000000000000924e3f8e49abdc8fc0218e40e30700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038c1850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008068fe5be447ac0c1100000000000000000000000000000000000000000000000000000000000000000000000032e8be048439df51dc27a643ee2625dfa7676805000000000000000000000000000000000000000000000000000000000000587400000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a646905601e333084bce2405025cc8951860eecaffffffffffc0bcb179293b277e98ace60aca36cc8a26787b974aafc0c31765550000000000000000000000000000000000000000000000000000000000000920000000000000000000c83d9c5bfdfb014d053bda6e8926032da4c5c5fd9e06650000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a80204d6fc3a9c3a920204d6f4d6f6f6f6f4d4df09f9a806ff09f9a806f6f4dc3a96f4d206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000194d6f6f20c3a9f09f9a80f09f9a80c3a96f20f09f9a806f20200000000000000000000000000000000000000000000000000000000000000000000000000000654d6f6f20c3a9f09f9a806fc3a96ff09f9a80f09f9a806f20f09f9a804d6ff09f9a806f204df09f9a806fc3a96f206f6fc3a94d6ff09f9a80c3a920f09f9a804d4d6f206fc3a9206f4df09f9a80f09f9a80c3a9f09f9a80f09f9a80f09f9a80f09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a80206fc3a9204d6f6f20f09f9a804d206f4d6f204d0000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000003b4d6f6f20c3a9f09f9a806f6f6f6f6fc3a96fc3a96f6fc3a96fc3a9f09f9a804df09f9a804df09f9a806f4d4d4d6ff09f9a8020c3a920c3a920c3a90000000000000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a804dc3a96ff09f9a80206f4d4df09f9a806f6f4d4d4df09f9a804df09f9a806f6f6fc3a9f09f9a80204d6ff09f9a8020f09f9a80000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a804df09f9a806f6f4d6f20c3a9c3a94d206f20c3a9c3a94d4d20f09f9a80c3a94dc3a96f6ff09f9a806fc3a9f09f9a804dc3a90000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a806f20f09f9a804d6fc3a94d4d6f6ff09f9a80f09f9a806f206f4df09f9a806f6fc3a94dc3a9f09f9a80c3a9c3a9c3a94d206f6ff09f9a8020f09f9a806f6f4d4d6f2020c3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a806ff09f9a806f4d6f6fc3a9c3a9206fc3a9200000000000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a80f09f9a8020f09f9a806ff09f9a806f206ff09f9a806ff09f9a80f09f9a80c3a94d4d206f206ff09f9a804d6f6f4d6f6f20c3a96f204d4d6f20f09f9a804d6fc3a9c3a96f6f6fc3a9f09f9a806f4df09f9a80206f6ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000194d6f6f20c3a9f09f9a806ff09f9a806f204df09f9a806f206f00000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000484d6f6f20c3a9f09f9a806f4d6f6fc3a9c3a94d20c3a94d2020c3a920c3a94d6f4d6fc3a96f6f6fc3a9f09f9a806ff09f9a806f206f206f6fc3a96f202020c3a94d204df09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a80f09f9a8020c3a9c3a9206f6f206ff09f9a806f206f4dc3a9c3a96f20206f6f6ff09f9a806fc3a9206f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000354d6f6f20c3a9f09f9a8020c3a9c3a920c3a9f09f9a80c3a96fc3a9206fc3a92020c3a920c3a9f09f9a804dc3a96f4d20c3a9204d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a80202020f09f9a804d0000000000000000000000000000" + }, + { + "name": "random-((bytes8,string[1],address,(uint64[4],(string,string,address),bool[2],string,bytes32[]),(string,(address,uint200),uint208,uint64)))", + "type": "((bytes8,string[1],address,(uint64[4],(string,string,address),bool[2],string,bytes32[]),(string,(address,uint200),uint208,uint64)))", + "value": [ + [ + "0x8845d5c6947aa8c5", + ["Moo é🚀🚀éoé oo🚀é"], + "0x359cD0745d1012cB89FDD74D8592CAb7Ba84af47", + [ + [ + "7254255887554804097", + "949521475707603241", + "18005144837519667542", + "2938851722724532560" + ], + ["Moo é🚀", "Moo é🚀", "0x45e6e4A3E4Da573035d3DE8fB955FD8221594542"], + [true, true], + "Moo é🚀oMéMooéoéo oooé🚀oé MééMéMooMo M MéM", + [] + ], + [ + "Moo é🚀ooM🚀ééoo ooM é 🚀M🚀oMMoo MMM 🚀oM🚀🚀", + [ + "0x23c66e27C0590f2140F1C85Cbb870e112465315B", + "360608226955343173499327957384725982904922611564353308372046" + ], + "18904749027156691926643271784224729714876680149984494052296269", + "10357105648862011313" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8845d5c6947aa8c5" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀éoé oo🚀é" + } + ] + }, + { + "type": "address", + "value": "0x359cD0745d1012cB89FDD74D8592CAb7Ba84af47" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "7254255887554804097" + }, + { + "type": "number", + "value": "949521475707603241" + }, + { + "type": "number", + "value": "18005144837519667542" + }, + { + "type": "number", + "value": "2938851722724532560" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "address", + "value": "0x45e6e4A3E4Da573035d3DE8fB955FD8221594542" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oMéMooéoéo oooé🚀oé MééMéMooMo M MéM" + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooM🚀ééoo ooM é 🚀M🚀oMMoo MMM 🚀oM🚀🚀" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x23c66e27C0590f2140F1C85Cbb870e112465315B" + }, + { + "type": "number", + "value": "360608226955343173499327957384725982904922611564353308372046" + } + ] + }, + { + "type": "number", + "value": "18904749027156691926643271784224729714876680149984494052296269" + }, + { + "type": "number", + "value": "10357105648862011313" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061076a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906105fa565b60405180910390f35b61005661028d565b61005e61028d565b6100666102a5565b678845d5c6947aa8c560c01b815261007c6102e1565b604080518082018252601c81527f4d6f6f20c3a9f09f9a80f09f9a80c3a96fc3a9206f6ff09f9a80c3a90000000060208083019190915290835283019190915273359cd0745d1012cb89fdd74d8592cab7ba84af47908201526100dd610308565b6100e561036e565b6764ac4b4b877d79818152670d2d60c05a28092960208083019190915267f9df1fd599d171566040808401919091526728c8e612348a615060608085019190915292845280518084018252838152808301938452600081830190815282518084018452600a808252689adede418753e13f3560b71b8287018190529184528451808601909552845283850152919093527345e6e4a3e4da573035d3de8fb955fd8221594542905282015261019761038c565b6001808252602080830191909152604080840192909252815160608101909252603b808352600092916106b9908301396060830152506040805160008082526020820190925260808301525060608201526101f06103aa565b60006040518060800160405280604181526020016106f4604191398252506040805180820182527323c66e27c0590f2140f1c85cbb870e112465315b8152783972bd8f2cd72fcbf7289b08552e58a27027021103a564ac4e602080830191909152830152790bc3b34544ef25fc783921f562f3731064fc609abda068edc64d90820152678fbbd4b69d9c9fb1606082015260808201528152919050565b60405180602001604052806102a06102a5565b905290565b6040805160a0810190915260008152602081016102c06102e1565b8152600060208201526040016102d4610308565b81526020016102a06103aa565b60405180602001604052806001905b60608152602001906001900390816102f05790505090565b6040518060a0016040528061031b61036e565b815260200161034d6040518060600160405280606081526020016060815260200160006001600160a01b031681525090565b815260200161035a61038c565b815260200160608152602001606081525090565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6040518060800160405280606081526020016103d6604080518082019091526000808252602082015290565b815260006020820181905260409091015290565b6000815180845260005b81811015610410576020818501810151868301820152016103f4565b81811115610422576000602083870101525b50601f01601f19169290920160200192915050565b600081516060845261044c60608501826103ea565b90506020830151848203602086015261046582826103ea565b6040948501516001600160a01b03169590940194909452509092915050565b8060005b60028110156104a95781511515845260209384019390910190600101610488565b50505050565b600081518084526020808501945080840160005b838110156104df578151875295820195908201906001016104c3565b509495945050505050565b80516000906101209084835b600481101561051f57825167ffffffffffffffff168252602092830192909101906001016104f6565b505050602083015181608086015261053982860182610437565b915050604083015161054e60a0860182610484565b50606083015184820360e086015261056682826103ea565b915050608083015184820361010086015261058182826104af565b95945050505050565b6000815160a0845261059f60a08501826103ea565b60208481015180516001600160a01b03168783015201516001600160c81b03166040808701919091528401516001600160d01b03166060808701919091529093015167ffffffffffffffff1660809094019390935250919050565b6020808252825182820182905280516001600160c01b03191660408401528082015160a06060850152600092919061010085019060e08601855b60018110156106635760df198885030182526106518484516103ea565b93509185019190850190600101610634565b50505060408201516001600160a01b031660808601526060820151858203603f1990810160a088015290935061069982856104ea565b935060808301519250808685030160c08701525050610581828261058a56fe4d6f6f20c3a9f09f9a806f4dc3a94d6f6fc3a96fc3a96f206f6f6fc3a9f09f9a806fc3a920204dc3a9c3a94dc3a94d6f6f4d6f20204d204dc3a94d4d6f6f20c3a9f09f9a806f6f4df09f9a80c3a9c3a96f6f206f6f4d20c3a920f09f9a804df09f9a806f4d4d6f6f20204d4d4d20f09f9a806f4df09f9a80f09f9a80a2646970667358221220fbb7bd43aca0d39498b3cce992e050db60d0baff1ecc1006812bbbb9af51350464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8c30c37a {\n string s_0;\n string s_1;\n address s_2;\n }\n\n struct S_e2219208 {\n uint64[4] s_0;\n S_8c30c37a s_1;\n bool[2] s_2;\n string s_3;\n bytes32[] s_4;\n }\n\n struct S_43558593 {\n address s_0;\n uint200 s_1;\n }\n\n struct S_c7ac1036 {\n string s_0;\n S_43558593 s_1;\n uint208 s_2;\n uint64 s_3;\n }\n\n struct S_cd9b6e81 {\n bytes8 s_0;\n string[1] s_1;\n address s_2;\n S_e2219208 s_3;\n S_c7ac1036 s_4;\n }\n\n struct S_9331c5c8 {\n S_cd9b6e81 s_0;\n }\n\n function test () public pure returns (S_9331c5c8 memory) {\n S_9331c5c8 memory r;\n {\n S_cd9b6e81 memory r_0;\n {\n bytes8 r_0_0 = bytes8(0x8845d5c6947aa8c5);\n r_0.s_0 = r_0_0;\n }\n {\n string[1] memory r_0_1;\n {\n string memory r_0_1_0 = unicode\"Moo é🚀🚀éoé oo🚀é\";\n r_0_1[0] = r_0_1_0;\n }\n r_0.s_1 = r_0_1;\n }\n {\n address r_0_2 = 0x359cD0745d1012cB89FDD74D8592CAb7Ba84af47;\n r_0.s_2 = r_0_2;\n }\n {\n S_e2219208 memory r_0_3;\n {\n uint64[4] memory r_0_3_0;\n {\n uint64 r_0_3_0_0 = 7254255887554804097;\n r_0_3_0[0] = r_0_3_0_0;\n }\n {\n uint64 r_0_3_0_1 = 949521475707603241;\n r_0_3_0[1] = r_0_3_0_1;\n }\n {\n uint64 r_0_3_0_2 = 18005144837519667542;\n r_0_3_0[2] = r_0_3_0_2;\n }\n {\n uint64 r_0_3_0_3 = 2938851722724532560;\n r_0_3_0[3] = r_0_3_0_3;\n }\n r_0_3.s_0 = r_0_3_0;\n }\n {\n S_8c30c37a memory r_0_3_1;\n {\n string memory r_0_3_1_0 = unicode\"Moo é🚀\";\n r_0_3_1.s_0 = r_0_3_1_0;\n }\n {\n string memory r_0_3_1_1 = unicode\"Moo é🚀\";\n r_0_3_1.s_1 = r_0_3_1_1;\n }\n {\n address r_0_3_1_2 = 0x45e6e4A3E4Da573035d3DE8fB955FD8221594542;\n r_0_3_1.s_2 = r_0_3_1_2;\n }\n r_0_3.s_1 = r_0_3_1;\n }\n {\n bool[2] memory r_0_3_2;\n {\n bool r_0_3_2_0 = true;\n r_0_3_2[0] = r_0_3_2_0;\n }\n {\n bool r_0_3_2_1 = true;\n r_0_3_2[1] = r_0_3_2_1;\n }\n r_0_3.s_2 = r_0_3_2;\n }\n {\n string memory r_0_3_3 = unicode\"Moo é🚀oMéMooéoéo oooé🚀oé MééMéMooMo M MéM\";\n r_0_3.s_3 = r_0_3_3;\n }\n {\n bytes32[] memory r_0_3_4 = new bytes32[](0);\n r_0_3.s_4 = r_0_3_4;\n }\n r_0.s_3 = r_0_3;\n }\n {\n S_c7ac1036 memory r_0_4;\n {\n string memory r_0_4_0 = unicode\"Moo é🚀ooM🚀ééoo ooM é 🚀M🚀oMMoo MMM 🚀oM🚀🚀\";\n r_0_4.s_0 = r_0_4_0;\n }\n {\n S_43558593 memory r_0_4_1;\n {\n address r_0_4_1_0 = 0x23c66e27C0590f2140F1C85Cbb870e112465315B;\n r_0_4_1.s_0 = r_0_4_1_0;\n }\n {\n uint200 r_0_4_1_1 = 360608226955343173499327957384725982904922611564353308372046;\n r_0_4_1.s_1 = r_0_4_1_1;\n }\n r_0_4.s_1 = r_0_4_1;\n }\n {\n uint208 r_0_4_2 = 18904749027156691926643271784224729714876680149984494052296269;\n r_0_4.s_2 = r_0_4_2;\n }\n {\n uint64 r_0_4_3 = 10357105648862011313;\n r_0_4.s_3 = r_0_4_3;\n }\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000208845d5c6947aa8c500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000359cd0745d1012cb89fdd74d8592cab7ba84af47000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80f09f9a80c3a96fc3a9206f6ff09f9a80c3a90000000000000000000000000000000000000000000000000000000064ac4b4b877d79810000000000000000000000000000000000000000000000000d2d60c05a280929000000000000000000000000000000000000000000000000f9df1fd599d1715600000000000000000000000000000000000000000000000028c8e612348a615000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000045e6e4a3e4da573035d3de8fb955fd8221594542000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b4d6f6f20c3a9f09f9a806f4dc3a94d6f6fc3a96fc3a96f206f6f6fc3a9f09f9a806fc3a920204dc3a9c3a94dc3a94d6f6f4d6f20204d204dc3a94d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000023c66e27c0590f2140f1c85cbb870e112465315b000000000000003972bd8f2cd72fcbf7289b08552e58a27027021103a564ac4e0000000000000bc3b34544ef25fc783921f562f3731064fc609abda068edc64d0000000000000000000000000000000000000000000000008fbbd4b69d9c9fb100000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a806f6f4df09f9a80c3a9c3a96f6f206f6f4d20c3a920f09f9a804df09f9a806f4d4d6f6f20204d4d4d20f09f9a806f4df09f9a80f09f9a8000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((uint248,(int152,string,int16[2]),string,address,address[])[1],string,(string,address,(address,address),address[4],bool),address)", + "type": "((uint248,(int152,string,int16[2]),string,address,address[])[1],string,(string,address,(address,address),address[4],bool),address)", + "value": [ + [ + [ + "97002626819882037930954750066705338905137732423656964250906865713242325063", + [ + "-1967128713573622175643667723191076847333504483", + "Moo é🚀 ooMoM🚀MéMoMo🚀oo🚀 ", + ["-6697", "11980"] + ], + "Moo é🚀", + "0x8dbDD8AcCf5B6B5Df59028034f8E077B66BD8517", + [ + "0xf7139788524A3F32aBA958a54e0F734B5c03cb16", + "0xb9DCdb5D0FC33652816CE9fc7B41001877a06505", + "0xa56CF124a6feC5cff51a1F4428070f23d3cC6363", + "0xd410DcD0268408FD51c3d7EaD201c00ff195C394" + ] + ] + ], + "Moo é🚀 éo 🚀o🚀ooé🚀éM🚀é🚀MoooMoé o 🚀🚀🚀oo oéoMé", + [ + "Moo é🚀éM 🚀 é", + "0x314ebA744e8C2F1005e5B2c2B1f064b04a2820eA", + [ + "0xCDaF034fCBB0c74ce9EA4Dc9Fc839aA93cA60Dc6", + "0x535283705AE27D13d2a4e61d5bfd3a8b3b5B6fA5" + ], + [ + "0xe8ee40abfa31E2008776Bb1Fe9c570C83480569F", + "0x37213e2747941d256Dc746619Ae2A25d1675dfDb", + "0xb41F828A9b1B0868005C366b624c0F91f7ff387c", + "0x61a47b3B0f54b741Bf6157b38EcFa5D747ce9FdD" + ], + true + ], + "0xF3A84631B9b5e3aad396206Fc9b32Fc260769b0E" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "97002626819882037930954750066705338905137732423656964250906865713242325063" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-1967128713573622175643667723191076847333504483" + }, + { + "type": "string", + "value": "Moo é🚀 ooMoM🚀MéMoMo🚀oo🚀 " + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-6697" + }, + { + "type": "number", + "value": "11980" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "address", + "value": "0x8dbDD8AcCf5B6B5Df59028034f8E077B66BD8517" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xf7139788524A3F32aBA958a54e0F734B5c03cb16" + }, + { + "type": "address", + "value": "0xb9DCdb5D0FC33652816CE9fc7B41001877a06505" + }, + { + "type": "address", + "value": "0xa56CF124a6feC5cff51a1F4428070f23d3cC6363" + }, + { + "type": "address", + "value": "0xd410DcD0268408FD51c3d7EaD201c00ff195C394" + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 éo 🚀o🚀ooé🚀éM🚀é🚀MoooMoé o 🚀🚀🚀oo oéoMé" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éM 🚀 é" + }, + { + "type": "address", + "value": "0x314ebA744e8C2F1005e5B2c2B1f064b04a2820eA" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xCDaF034fCBB0c74ce9EA4Dc9Fc839aA93cA60Dc6" + }, + { + "type": "address", + "value": "0x535283705AE27D13d2a4e61d5bfd3a8b3b5B6fA5" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xe8ee40abfa31E2008776Bb1Fe9c570C83480569F" + }, + { + "type": "address", + "value": "0x37213e2747941d256Dc746619Ae2A25d1675dfDb" + }, + { + "type": "address", + "value": "0xb41F828A9b1B0868005C366b624c0F91f7ff387c" + }, + { + "type": "address", + "value": "0x61a47b3B0f54b741Bf6157b38EcFa5D747ce9FdD" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0xF3A84631B9b5e3aad396206Fc9b32Fc260769b0E" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061087c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061064c565b60405180910390f35b6100566103ed565b61005e6103ed565b610066610421565b61006e61044e565b7e36e6cb667c1ee2bd7e3da112d64a24342830ec1fe4ed6b44574e646af24047815261009861048a565b72583587b9b189c0ac521b2ab111ede59f6975e219815260408051606081019091526026808252600091906107d260208301396020830152506100d96104ae565b611a28198152612ecc6020808301919091526040838101929092528381019290925280518082018252600a8152689adede418753e13f3560b71b8184015283820152738dbdd8accf5b6b5df59028034f8e077b66bd851760608401528051600480825260a082019092526000929091908201608080368337019050509050600073f7139788524a3f32aba958a54e0f734b5c03cb1690508082600081518110610184576101846107bb565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073b9dcdb5d0fc33652816ce9fc7b41001877a06505905080826001815181106101d2576101d26107bb565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073a56cf124a6fec5cff51a1f4428070f23d3cc636390508082600281518110610220576102206107bb565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073d410dcd0268408fd51c3d7ead201c00ff195c3949050808260038151811061026e5761026e6107bb565b6001600160a01b039290921660209283029190910182015260808481019390935292845250918352604080519283019052604f808352600092916107f8908301396020830152506102bd6104cc565b60408051808201825260158152744d6f6f20c3a9f09f9a80c3a94d20f09f9a8020c3a960581b60208083019190915290835273314eba744e8c2f1005e5b2c2b1f064b04a2820ea838201528151808301835273cdaf034fcbb0c74ce9ea4dc9fc839aa93ca60dc6815273535283705ae27d13d2a4e61d5bfd3a8b3b5b6fa5918101919091529082015261034e610507565b73e8ee40abfa31e2008776bb1fe9c570c83480569f81527337213e2747941d256dc746619ae2a25d1675dfdb602082015273b41f828a9b1b0868005c366b624c0f91f7ff387c6040808301919091527361a47b3b0f54b741bf6157b38ecfa5d747ce9fdd606080840191909152838101929092526001608084015283019190915273f3a84631b9b5e3aad396206fc9b32fc260769b0e90820152919050565b6040518060800160405280610400610421565b8152602001606081526020016104146104cc565b8152600060209091015290565b60405180602001604052806001905b61043861044e565b8152602001906001900390816104305790505090565b6040518060a0016040528060006001600160f81b0316815260200161047161048a565b8152606060208201819052600060408301529081015290565b60408051606080820183526000825260208201529081016104a96104ae565b905290565b60405180604001604052806002906020820280368337509192915050565b6040805160a08101825260608152600060208201529081016104fe604080518082019091526000808252602082015290565b81526020016104145b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b8181101561054b5760208185018101518683018201520161052f565b8181111561055d576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b838110156105ab5781516001600160a01b031687529582019590820190600101610586565b509495945050505050565b600061012082518185526105cc82860182610525565b91505060208084015160018060a01b0380821683880152604086015191508082511660408801528083830151166060880152606086015191506080870160005b600481101561062b57835183168252928401929084019060010161060c565b5050505050608083015161064461010086018215159052565b509392505050565b6000602080835260a08084018551608080858801528283905060c093508388016000805b600180821061067f5750610752565b8b8403609f19018552865180516001600160f81b031685528a8101518b86018b9052805160120b8b870152808c01518a87018990526106c2610120880182610525565b9050604080830151925060e08801875b60028110156106f0578451870b8252938f0193908f019086016106d2565b5050808401519450878203818901525061070a8185610525565b93505050606080820151610728828801826001600160a01b03169052565b50508601518482038588015261073e8282610572565b978b0197958b019594505050600101610670565b5050868a01519650601f199550858982030160408a01526107738188610525565b96505050604088015192508387860301606088015261079285846105b6565b9450606088015193506107af818801856001600160a01b03169052565b50929695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80206f6f4d6f4df09f9a804dc3a94d6f4d6ff09f9a806f6ff09f9a80204d6f6f20c3a9f09f9a8020c3a96f20f09f9a806ff09f9a806f6fc3a9f09f9a80c3a94df09f9a80c3a9f09f9a804d6f6f6f4d6fc3a920206f20f09f9a80f09f9a80f09f9a806f6f206fc3a96f4dc3a9a2646970667358221220a41835091e8685752ed39b08bd9d28d10e2574d435bf0d3769aa5f53b7e9351964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ebc47640 {\n int152 s_0;\n string s_1;\n int16[2] s_2;\n }\n\n struct S_2614f739 {\n uint248 s_0;\n S_ebc47640 s_1;\n string s_2;\n address s_3;\n address[] s_4;\n }\n\n struct S_3b625bf6 {\n address s_0;\n address s_1;\n }\n\n struct S_aaa2da57 {\n string s_0;\n address s_1;\n S_3b625bf6 s_2;\n address[4] s_3;\n bool s_4;\n }\n\n struct S_aef7017f {\n S_2614f739[1] s_0;\n string s_1;\n S_aaa2da57 s_2;\n address s_3;\n }\n\n function test () public pure returns (S_aef7017f memory) {\n S_aef7017f memory r;\n {\n S_2614f739[1] memory r_0;\n {\n S_2614f739 memory r_0_0;\n {\n uint248 r_0_0_0 = 97002626819882037930954750066705338905137732423656964250906865713242325063;\n r_0_0.s_0 = r_0_0_0;\n }\n {\n S_ebc47640 memory r_0_0_1;\n {\n int152 r_0_0_1_0 = -1967128713573622175643667723191076847333504483;\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n {\n string memory r_0_0_1_1 = unicode\"Moo é🚀 ooMoM🚀MéMoMo🚀oo🚀 \";\n r_0_0_1.s_1 = r_0_0_1_1;\n }\n {\n int16[2] memory r_0_0_1_2;\n {\n int16 r_0_0_1_2_0 = -6697;\n r_0_0_1_2[0] = r_0_0_1_2_0;\n }\n {\n int16 r_0_0_1_2_1 = 11980;\n r_0_0_1_2[1] = r_0_0_1_2_1;\n }\n r_0_0_1.s_2 = r_0_0_1_2;\n }\n r_0_0.s_1 = r_0_0_1;\n }\n {\n string memory r_0_0_2 = unicode\"Moo é🚀\";\n r_0_0.s_2 = r_0_0_2;\n }\n {\n address r_0_0_3 = 0x8dbDD8AcCf5B6B5Df59028034f8E077B66BD8517;\n r_0_0.s_3 = r_0_0_3;\n }\n {\n address[] memory r_0_0_4 = new address[](4);\n {\n address r_0_0_4_0 = 0xf7139788524A3F32aBA958a54e0F734B5c03cb16;\n r_0_0_4[0] = r_0_0_4_0;\n }\n {\n address r_0_0_4_1 = 0xb9DCdb5D0FC33652816CE9fc7B41001877a06505;\n r_0_0_4[1] = r_0_0_4_1;\n }\n {\n address r_0_0_4_2 = 0xa56CF124a6feC5cff51a1F4428070f23d3cC6363;\n r_0_0_4[2] = r_0_0_4_2;\n }\n {\n address r_0_0_4_3 = 0xd410DcD0268408FD51c3d7EaD201c00ff195C394;\n r_0_0_4[3] = r_0_0_4_3;\n }\n r_0_0.s_4 = r_0_0_4;\n }\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀 éo 🚀o🚀ooé🚀éM🚀é🚀MoooMoé o 🚀🚀🚀oo oéoMé\";\n r.s_1 = r_1;\n }\n {\n S_aaa2da57 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀éM 🚀 é\";\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0x314ebA744e8C2F1005e5B2c2B1f064b04a2820eA;\n r_2.s_1 = r_2_1;\n }\n {\n S_3b625bf6 memory r_2_2;\n {\n address r_2_2_0 = 0xCDaF034fCBB0c74ce9EA4Dc9Fc839aA93cA60Dc6;\n r_2_2.s_0 = r_2_2_0;\n }\n {\n address r_2_2_1 = 0x535283705AE27D13d2a4e61d5bfd3a8b3b5B6fA5;\n r_2_2.s_1 = r_2_2_1;\n }\n r_2.s_2 = r_2_2;\n }\n {\n address[4] memory r_2_3;\n {\n address r_2_3_0 = 0xe8ee40abfa31E2008776Bb1Fe9c570C83480569F;\n r_2_3[0] = r_2_3_0;\n }\n {\n address r_2_3_1 = 0x37213e2747941d256Dc746619Ae2A25d1675dfDb;\n r_2_3[1] = r_2_3_1;\n }\n {\n address r_2_3_2 = 0xb41F828A9b1B0868005C366b624c0F91f7ff387c;\n r_2_3[2] = r_2_3_2;\n }\n {\n address r_2_3_3 = 0x61a47b3B0f54b741Bf6157b38EcFa5D747ce9FdD;\n r_2_3[3] = r_2_3_3;\n }\n r_2.s_3 = r_2_3;\n }\n {\n bool r_2_4 = true;\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xF3A84631B9b5e3aad396206Fc9b32Fc260769b0E;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000380000000000000000000000000f3a84631b9b5e3aad396206fc9b32fc260769b0e00000000000000000000000000000000000000000000000000000000000000200036e6cb667c1ee2bd7e3da112d64a24342830ec1fe4ed6b44574e646af2404700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001800000000000000000000000008dbdd8accf5b6b5df59028034f8e077b66bd851700000000000000000000000000000000000000000000000000000000000001c0ffffffffffffffffffffffffffa7ca78464e763f53ade4d54eee121a60968a1d0000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5d70000000000000000000000000000000000000000000000000000000000002ecc00000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a80206f6f4d6f4df09f9a804dc3a94d6f4d6ff09f9a806f6ff09f9a80200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000f7139788524a3f32aba958a54e0f734b5c03cb16000000000000000000000000b9dcdb5d0fc33652816ce9fc7b41001877a06505000000000000000000000000a56cf124a6fec5cff51a1f4428070f23d3cc6363000000000000000000000000d410dcd0268408fd51c3d7ead201c00ff195c394000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a8020c3a96f20f09f9a806ff09f9a806f6fc3a9f09f9a80c3a94df09f9a80c3a9f09f9a804d6f6f6f4d6fc3a920206f20f09f9a80f09f9a80f09f9a806f6f206fc3a96f4dc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000314eba744e8c2f1005e5b2c2b1f064b04a2820ea000000000000000000000000cdaf034fcbb0c74ce9ea4dc9fc839aa93ca60dc6000000000000000000000000535283705ae27d13d2a4e61d5bfd3a8b3b5b6fa5000000000000000000000000e8ee40abfa31e2008776bb1fe9c570c83480569f00000000000000000000000037213e2747941d256dc746619ae2a25d1675dfdb000000000000000000000000b41f828a9b1b0868005c366b624c0f91f7ff387c00000000000000000000000061a47b3b0f54b741bf6157b38ecfa5d747ce9fdd000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a80c3a94d20f09f9a8020c3a90000000000000000000000" + }, + { + "name": "random-(address[],bool,bytes7,string,(bytes19,bytes12[4],((bool),address,string,bytes20,bytes7),(string,string,bool,int64),address))[2]", + "type": "(address[],bool,bytes7,string,(bytes19,bytes12[4],((bool),address,string,bytes20,bytes7),(string,string,bool,int64),address))[2]", + "value": [ + [ + [ + "0x38193019ccB0a4dcA827Fb421A7d5C035931EFe5", + "0xe48a56a70D0568989e4df130666485F1d1a1b9D2", + "0x8783BBcE01E9A7BE94a1Ba5Fe4AeFEd0e3653156", + "0x587eCE9AA9020dd4E7bf669Af6E43c5a45c3F64A" + ], + true, + "0x9eb5b8fa44c79b", + "Moo é🚀o🚀🚀oo 🚀oo 🚀 Méo🚀 é éM🚀 é🚀oM 🚀MM🚀 ooooo🚀Mé MéoM 🚀oéoéo ", + [ + "0x6dc3e4b04b032206455dee245f2fcfa2e73906", + [ + "0x6b9ff9b005dec83fc18d14df", + "0x9c95ef77a7194af24b5aad7c", + "0x9c91591702e75c2ac21c9ebf", + "0x1946ead544200907594df718" + ], + [ + [true], + "0x913D2037593aD1A1A931261Cb5e43c5ff6c9FB60", + "Moo é🚀oéé🚀é🚀 M🚀 oé🚀oo é🚀🚀🚀o é🚀 M oo Mé o🚀oooooMooo M🚀o", + "0x289d702ef9ef2b93eeead1b3f08aa7b13d77709a", + "0x7e22681a226b30" + ], + ["Moo é🚀", "Moo é🚀M Moéoéo🚀🚀oMMoMM oooéooé ", true, "-7018813490672324756"], + "0x45609Ca234CfB0059EE9BAB9cA14f063a300aB9a" + ] + ], + [ + [ + "0xEf158481b9089c256cECf4f372015a2b9131c7F1", + "0x6F8Ce6adBE51B87F41Eeeb1614c463Ca412761F1", + "0x7C34b9E0E32eA42A8085aAb68A1b091B958F77D5", + "0x366A7D867c41cb533d2417D0571EaDD334982144" + ], + true, + "0xb1293a224fccf4", + "Moo é🚀", + [ + "0x27f1f264ca54d67ddbe4fc44dc027442b69bb2", + [ + "0xe3e41403ed869ede64f832b6", + "0x32b1fe9b20e7c44af4b7abed", + "0x775a84b099d9b6265b875b1c", + "0x677f8807440ea1764944f440" + ], + [ + [true], + "0x92F06D63f39853229e2b29199F453d2002070FF7", + "Moo é🚀oé 🚀oéo o oo oééooéoooéo oMoM🚀MéooéM🚀oMo🚀o🚀éo🚀Mo", + "0x013d19bf6ca65d3812ff246901bdcc7fcd1ab957", + "0xaf1d2b6c9393de" + ], + [ + "Moo é🚀 Moo 🚀éooooM éo🚀é🚀oé🚀🚀oMéM🚀🚀o oéoo🚀ééMéo🚀🚀ooo", + "Moo é🚀 éé🚀oo Méoé🚀🚀éoé🚀o🚀 MéM🚀M 🚀M🚀🚀oooéoé 🚀🚀🚀M 🚀ooMéo", + false, + "-9008147863258183686" + ], + "0x6C74D7188c2f5545b1f70C462a33fFA940Cbf899" + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x38193019ccB0a4dcA827Fb421A7d5C035931EFe5" + }, + { + "type": "address", + "value": "0xe48a56a70D0568989e4df130666485F1d1a1b9D2" + }, + { + "type": "address", + "value": "0x8783BBcE01E9A7BE94a1Ba5Fe4AeFEd0e3653156" + }, + { + "type": "address", + "value": "0x587eCE9AA9020dd4E7bf669Af6E43c5a45c3F64A" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x9eb5b8fa44c79b" + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀oo 🚀oo 🚀 Méo🚀 é éM🚀 é🚀oM 🚀MM🚀 ooooo🚀Mé MéoM 🚀oéoéo " + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x6dc3e4b04b032206455dee245f2fcfa2e73906" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x6b9ff9b005dec83fc18d14df" + }, + { + "type": "hexstring", + "value": "0x9c95ef77a7194af24b5aad7c" + }, + { + "type": "hexstring", + "value": "0x9c91591702e75c2ac21c9ebf" + }, + { + "type": "hexstring", + "value": "0x1946ead544200907594df718" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0x913D2037593aD1A1A931261Cb5e43c5ff6c9FB60" + }, + { + "type": "string", + "value": "Moo é🚀oéé🚀é🚀 M🚀 oé🚀oo é🚀🚀🚀o é🚀 M oo Mé o🚀oooooMooo M🚀o" + }, + { + "type": "hexstring", + "value": "0x289d702ef9ef2b93eeead1b3f08aa7b13d77709a" + }, + { + "type": "hexstring", + "value": "0x7e22681a226b30" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀M Moéoéo🚀🚀oMMoMM oooéooé " + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-7018813490672324756" + } + ] + }, + { + "type": "address", + "value": "0x45609Ca234CfB0059EE9BAB9cA14f063a300aB9a" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xEf158481b9089c256cECf4f372015a2b9131c7F1" + }, + { + "type": "address", + "value": "0x6F8Ce6adBE51B87F41Eeeb1614c463Ca412761F1" + }, + { + "type": "address", + "value": "0x7C34b9E0E32eA42A8085aAb68A1b091B958F77D5" + }, + { + "type": "address", + "value": "0x366A7D867c41cb533d2417D0571EaDD334982144" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xb1293a224fccf4" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x27f1f264ca54d67ddbe4fc44dc027442b69bb2" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xe3e41403ed869ede64f832b6" + }, + { + "type": "hexstring", + "value": "0x32b1fe9b20e7c44af4b7abed" + }, + { + "type": "hexstring", + "value": "0x775a84b099d9b6265b875b1c" + }, + { + "type": "hexstring", + "value": "0x677f8807440ea1764944f440" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0x92F06D63f39853229e2b29199F453d2002070FF7" + }, + { + "type": "string", + "value": "Moo é🚀oé 🚀oéo o oo oééooéoooéo oMoM🚀MéooéM🚀oMo🚀o🚀éo🚀Mo" + }, + { + "type": "hexstring", + "value": "0x013d19bf6ca65d3812ff246901bdcc7fcd1ab957" + }, + { + "type": "hexstring", + "value": "0xaf1d2b6c9393de" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 Moo 🚀éooooM éo🚀é🚀oé🚀🚀oMéM🚀🚀o oéoo🚀ééMéo🚀🚀ooo" + }, + { + "type": "string", + "value": "Moo é🚀 éé🚀oo Méoé🚀🚀éoé🚀o🚀 MéM🚀M 🚀M🚀🚀oooéoé 🚀🚀🚀M 🚀ooMéo" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-9008147863258183686" + } + ] + }, + { + "type": "address", + "value": "0x6C74D7188c2f5545b1f70C462a33fFA940Cbf899" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610d1e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906109dc565b60405180910390f35b6100566106ff565b61005e6106ff565b61006661072c565b60408051600480825260a082019092526000916020820160808036833701905050905060007338193019ccb0a4dca827fb421a7d5c035931efe5905080826000815181106100b6576100b6610abc565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073e48a56a70d0568989e4df130666485f1d1a1b9d29050808260018151811061010457610104610abc565b60200260200101906001600160a01b031690816001600160a01b031681525050506000738783bbce01e9a7be94a1ba5fe4aefed0e36531569050808260028151811061015257610152610abc565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073587ece9aa9020dd4e7bf669af6e43c5a45c3f64a905080826003815181106101a0576101a0610abc565b6001600160a01b0390921660209283029190910182015291835250600182820152669eb5b8fa44c79b60c81b604080840191909152805160a08101909152606a808252600092610be7908301396060830152506101fb61076c565b7236e1f2582581910322aef7122f97e7d1739c8360691b815261021c6107d6565b6b6b9ff9b005dec83fc18d14df60a01b81526b27257bdde9c652bc92d6ab5f60a21b6020808301919091526b9c91591702e75c2ac21c9ebf60a01b60408301526b0328dd5aa8840120eb29bee360a31b606083015282015261027c6107f4565b60408051602080820183526001825290835273913d2037593ad1a1a931261cb5e43c5ff6c9fb6083820152815160a08101909252606180835260009291610ad39083013960408084019190915273144eb8177cf795c9f77568d9f84553d89ebbb84d60611b6060808501919091526607e22681a226b360cc1b608080860191909152858301949094528151938401825280845260208401819052600091840182905283015250604080518082018252600a8152689adede418753e13f3560b71b602080830191909152908352815160608101909252602d80835260009291610c519083013960208301525060016040820152676167d5aeb83e5093196060808301919091528201527345609ca234cfb0059ee9bab9ca14f063a300ab9a60808083019190915282015281526103af61072c565b60408051600480825260a0820190925260009160208201608080368337019050509050600073ef158481b9089c256cecf4f372015a2b9131c7f1905080826000815181106103ff576103ff610abc565b60200260200101906001600160a01b031690816001600160a01b031681525050506000736f8ce6adbe51b87f41eeeb1614c463ca412761f19050808260018151811061044d5761044d610abc565b60200260200101906001600160a01b031690816001600160a01b031681525050506000737c34b9e0e32ea42a8085aab68a1b091b958f77d59050808260028151811061049b5761049b610abc565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073366a7d867c41cb533d2417d0571eadd334982144905080826003815181106104e9576104e9610abc565b6001600160a01b0390921660209283029190910182015291835250600182820152662c4a4e8893f33d60ca1b6040808401919091528051808201909152600a8152689adede418753e13f3560b71b91810191909152606082015261054b61076c565b7213f8f932652a6b3eedf27e226e013a215b4dd960691b815261056c6107d6565b6b71f20a01f6c34f6f327c195b60a11b81526b32b1fe9b20e7c44af4b7abed60a01b6020808301919091526b1dd6a12c26766d8996e1d6c760a21b60408301526b019dfe201d103a85d92513d160a61b60608301528201526105cc6107f4565b6040805160208082018352600182529083527392f06d63f39853229e2b29199f453d2002070ff783820152815160808101909252605580835260009291610b349083013960408084019190915273013d19bf6ca65d3812ff246901bdcc7fcd1ab95760601b60608085019190915266578e95b649c9ef60c91b60808086019190915285830194909452815193840182528084526020840181905260009184018290528301525060006040518060800160405280605e8152602001610b89605e91398252506040805160a08101909152606b80825260009190610c7e602083013960208301525060006040820152677d035ec121b2b80519606080830191909152820152736c74d7188c2f5545b1f70c462a33ffa940cbf89960808083019190915282015280826001602002015250919050565b60405180604001604052806002905b61071661072c565b81526020019060019003908161070e5790505090565b6040518060a001604052806060815260200160001515815260200160006001600160c81b03191681526020016060815260200161076761076c565b905290565b6040805160a0810190915260008152602081016107876107d6565b81526020016107946107f4565b81526020016107c960405180608001604052806060815260200160608152602001600015158152602001600060070b81525090565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b6040805160c081018252600060a082018181528252602082018190526060928201839052918101829052608081019190915290565b6000815180845260005b8181101561084f57602081850181015186830182015201610833565b81811115610861576000602083870101525b50601f01601f19169290920160200192915050565b8051511515825260018060a01b0360208201511660208301526000604082015160a060408501526108aa60a0850182610829565b6060848101516bffffffffffffffffffffffff1916908601526080938401516001600160c81b03191693909401929092525090919050565b60008151608084526108f76080850182610829565b9050602083015184820360208601526109108282610829565b915050604083015115156040850152606083015160070b60608501528091505092915050565b60006101006cffffffffffffffffffffffffff19835116845260208084015181860160005b60048110156109825782516001600160a01b0319168252918301919083019060010161095b565b5050505060408301518160a086015261099d82860182610876565b915050606083015184820360c08601526109b782826108e2565b91505060808301516109d460e08601826001600160a01b03169052565b509392505050565b602080825260009060608382018185018685805b6002811015610aae57888403601f190185528251805160a0808752815190870181905260c08701918a019085905b80821015610a475782516001600160a01b03168452928b0192918b019160019190910190610a1e565b505050888201511515868a01526040808301516001600160c81b031916908701528782015186820389880152610a7d8282610829565b91505060808083015192508682038188015250610a9a8183610936565b9689019695505050918601916001016109f0565b509198975050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806fc3a9c3a9f09f9a80c3a9f09f9a80204df09f9a80206fc3a9f09f9a806f6f20c3a9f09f9a80f09f9a80f09f9a806f20c3a9f09f9a80204d206f6f204dc3a9206ff09f9a806f6f6f6f6f4d6f6f6f2020204df09f9a806f4d6f6f20c3a9f09f9a806fc3a920f09f9a806fc3a96f206f206f6f206fc3a9c3a96f6fc3a96f6f6fc3a96f206f4d6f4df09f9a804dc3a96f6fc3a94df09f9a806f4d6ff09f9a806ff09f9a80c3a96ff09f9a804d6f4d6f6f20c3a9f09f9a80204d6f6f20f09f9a80c3a96f6f6f6f4d20c3a96ff09f9a80c3a9f09f9a806fc3a9f09f9a80f09f9a806f4dc3a94df09f9a80f09f9a806f206fc3a96f6ff09f9a80c3a9c3a94dc3a96ff09f9a80f09f9a806f6f6f4d6f6f20c3a9f09f9a806ff09f9a80f09f9a806f6f20f09f9a806f6f20f09f9a80204dc3a96ff09f9a8020c3a920c3a94df09f9a8020c3a9f09f9a806f4d20f09f9a804d4df09f9a80206f6f6f6f6ff09f9a804dc3a920204dc3a96f4d20f09f9a806fc3a96fc3a96f204d6f6f20c3a9f09f9a804d204d6fc3a96fc3a96ff09f9a80f09f9a806f4d4d6f4d4d206f6f6fc3a96f6fc3a9204d6f6f20c3a9f09f9a8020c3a9c3a9f09f9a806f6f204dc3a96fc3a9f09f9a80f09f9a80c3a96fc3a9f09f9a806ff09f9a80204dc3a94df09f9a804d20f09f9a804df09f9a80f09f9a806f6f6fc3a96fc3a920f09f9a80f09f9a80f09f9a804d20f09f9a806f6f4dc3a96fa2646970667358221220a865098bf9cbc19bc698e48716e517a04110032ce20b65c3479b21ac77e5528664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_2b0ed142 {\n S_c1053bda s_0;\n address s_1;\n string s_2;\n bytes20 s_3;\n bytes7 s_4;\n }\n\n struct S_41757118 {\n string s_0;\n string s_1;\n bool s_2;\n int64 s_3;\n }\n\n struct S_57deda67 {\n bytes19 s_0;\n bytes12[4] s_1;\n S_2b0ed142 s_2;\n S_41757118 s_3;\n address s_4;\n }\n\n struct S_349ded74 {\n address[] s_0;\n bool s_1;\n bytes7 s_2;\n string s_3;\n S_57deda67 s_4;\n }\n\n function test () public pure returns (S_349ded74[2] memory) {\n S_349ded74[2] memory r;\n {\n S_349ded74 memory r_0;\n {\n address[] memory r_0_0 = new address[](4);\n {\n address r_0_0_0 = 0x38193019ccB0a4dcA827Fb421A7d5C035931EFe5;\n r_0_0[0] = r_0_0_0;\n }\n {\n address r_0_0_1 = 0xe48a56a70D0568989e4df130666485F1d1a1b9D2;\n r_0_0[1] = r_0_0_1;\n }\n {\n address r_0_0_2 = 0x8783BBcE01E9A7BE94a1Ba5Fe4AeFEd0e3653156;\n r_0_0[2] = r_0_0_2;\n }\n {\n address r_0_0_3 = 0x587eCE9AA9020dd4E7bf669Af6E43c5a45c3F64A;\n r_0_0[3] = r_0_0_3;\n }\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = true;\n r_0.s_1 = r_0_1;\n }\n {\n bytes7 r_0_2 = bytes7(0x9eb5b8fa44c79b);\n r_0.s_2 = r_0_2;\n }\n {\n string memory r_0_3 = unicode\"Moo é🚀o🚀🚀oo 🚀oo 🚀 Méo🚀 é éM🚀 é🚀oM 🚀MM🚀 ooooo🚀Mé MéoM 🚀oéoéo \";\n r_0.s_3 = r_0_3;\n }\n {\n S_57deda67 memory r_0_4;\n {\n bytes19 r_0_4_0 = bytes19(0x6dc3e4b04b032206455dee245f2fcfa2e73906);\n r_0_4.s_0 = r_0_4_0;\n }\n {\n bytes12[4] memory r_0_4_1;\n {\n bytes12 r_0_4_1_0 = bytes12(0x6b9ff9b005dec83fc18d14df);\n r_0_4_1[0] = r_0_4_1_0;\n }\n {\n bytes12 r_0_4_1_1 = bytes12(0x9c95ef77a7194af24b5aad7c);\n r_0_4_1[1] = r_0_4_1_1;\n }\n {\n bytes12 r_0_4_1_2 = bytes12(0x9c91591702e75c2ac21c9ebf);\n r_0_4_1[2] = r_0_4_1_2;\n }\n {\n bytes12 r_0_4_1_3 = bytes12(0x1946ead544200907594df718);\n r_0_4_1[3] = r_0_4_1_3;\n }\n r_0_4.s_1 = r_0_4_1;\n }\n {\n S_2b0ed142 memory r_0_4_2;\n {\n S_c1053bda memory r_0_4_2_0;\n {\n bool r_0_4_2_0_0 = true;\n r_0_4_2_0.s_0 = r_0_4_2_0_0;\n }\n r_0_4_2.s_0 = r_0_4_2_0;\n }\n {\n address r_0_4_2_1 = 0x913D2037593aD1A1A931261Cb5e43c5ff6c9FB60;\n r_0_4_2.s_1 = r_0_4_2_1;\n }\n {\n string memory r_0_4_2_2 = unicode\"Moo é🚀oéé🚀é🚀 M🚀 oé🚀oo é🚀🚀🚀o é🚀 M oo Mé o🚀oooooMooo M🚀o\";\n r_0_4_2.s_2 = r_0_4_2_2;\n }\n {\n bytes20 r_0_4_2_3 = bytes20(0x289d702eF9ef2b93EEEAd1B3f08aa7b13d77709a);\n r_0_4_2.s_3 = r_0_4_2_3;\n }\n {\n bytes7 r_0_4_2_4 = bytes7(0x7e22681a226b30);\n r_0_4_2.s_4 = r_0_4_2_4;\n }\n r_0_4.s_2 = r_0_4_2;\n }\n {\n S_41757118 memory r_0_4_3;\n {\n string memory r_0_4_3_0 = unicode\"Moo é🚀\";\n r_0_4_3.s_0 = r_0_4_3_0;\n }\n {\n string memory r_0_4_3_1 = unicode\"Moo é🚀M Moéoéo🚀🚀oMMoMM oooéooé \";\n r_0_4_3.s_1 = r_0_4_3_1;\n }\n {\n bool r_0_4_3_2 = true;\n r_0_4_3.s_2 = r_0_4_3_2;\n }\n {\n int64 r_0_4_3_3 = -7018813490672324756;\n r_0_4_3.s_3 = r_0_4_3_3;\n }\n r_0_4.s_3 = r_0_4_3;\n }\n {\n address r_0_4_4 = 0x45609Ca234CfB0059EE9BAB9cA14f063a300aB9a;\n r_0_4.s_4 = r_0_4_4;\n }\n r_0.s_4 = r_0_4;\n }\n r[0] = r_0;\n }\n {\n S_349ded74 memory r_1;\n {\n address[] memory r_1_0 = new address[](4);\n {\n address r_1_0_0 = 0xEf158481b9089c256cECf4f372015a2b9131c7F1;\n r_1_0[0] = r_1_0_0;\n }\n {\n address r_1_0_1 = 0x6F8Ce6adBE51B87F41Eeeb1614c463Ca412761F1;\n r_1_0[1] = r_1_0_1;\n }\n {\n address r_1_0_2 = 0x7C34b9E0E32eA42A8085aAb68A1b091B958F77D5;\n r_1_0[2] = r_1_0_2;\n }\n {\n address r_1_0_3 = 0x366A7D867c41cb533d2417D0571EaDD334982144;\n r_1_0[3] = r_1_0_3;\n }\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = true;\n r_1.s_1 = r_1_1;\n }\n {\n bytes7 r_1_2 = bytes7(0xb1293a224fccf4);\n r_1.s_2 = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀\";\n r_1.s_3 = r_1_3;\n }\n {\n S_57deda67 memory r_1_4;\n {\n bytes19 r_1_4_0 = bytes19(0x27f1f264ca54d67ddbe4fc44dc027442b69bb2);\n r_1_4.s_0 = r_1_4_0;\n }\n {\n bytes12[4] memory r_1_4_1;\n {\n bytes12 r_1_4_1_0 = bytes12(0xe3e41403ed869ede64f832b6);\n r_1_4_1[0] = r_1_4_1_0;\n }\n {\n bytes12 r_1_4_1_1 = bytes12(0x32b1fe9b20e7c44af4b7abed);\n r_1_4_1[1] = r_1_4_1_1;\n }\n {\n bytes12 r_1_4_1_2 = bytes12(0x775a84b099d9b6265b875b1c);\n r_1_4_1[2] = r_1_4_1_2;\n }\n {\n bytes12 r_1_4_1_3 = bytes12(0x677f8807440ea1764944f440);\n r_1_4_1[3] = r_1_4_1_3;\n }\n r_1_4.s_1 = r_1_4_1;\n }\n {\n S_2b0ed142 memory r_1_4_2;\n {\n S_c1053bda memory r_1_4_2_0;\n {\n bool r_1_4_2_0_0 = true;\n r_1_4_2_0.s_0 = r_1_4_2_0_0;\n }\n r_1_4_2.s_0 = r_1_4_2_0;\n }\n {\n address r_1_4_2_1 = 0x92F06D63f39853229e2b29199F453d2002070FF7;\n r_1_4_2.s_1 = r_1_4_2_1;\n }\n {\n string memory r_1_4_2_2 = unicode\"Moo é🚀oé 🚀oéo o oo oééooéoooéo oMoM🚀MéooéM🚀oMo🚀o🚀éo🚀Mo\";\n r_1_4_2.s_2 = r_1_4_2_2;\n }\n {\n bytes20 r_1_4_2_3 = bytes20(0x013d19BF6Ca65D3812Ff246901bDcc7FCd1ab957);\n r_1_4_2.s_3 = r_1_4_2_3;\n }\n {\n bytes7 r_1_4_2_4 = bytes7(0xaf1d2b6c9393de);\n r_1_4_2.s_4 = r_1_4_2_4;\n }\n r_1_4.s_2 = r_1_4_2;\n }\n {\n S_41757118 memory r_1_4_3;\n {\n string memory r_1_4_3_0 = unicode\"Moo é🚀 Moo 🚀éooooM éo🚀é🚀oé🚀🚀oMéM🚀🚀o oéoo🚀ééMéo🚀🚀ooo\";\n r_1_4_3.s_0 = r_1_4_3_0;\n }\n {\n string memory r_1_4_3_1 = unicode\"Moo é🚀 éé🚀oo Méoé🚀🚀éoé🚀o🚀 MéM🚀M 🚀M🚀🚀oooéoé 🚀🚀🚀M 🚀ooMéo\";\n r_1_4_3.s_1 = r_1_4_3_1;\n }\n {\n bool r_1_4_3_2 = false;\n r_1_4_3.s_2 = r_1_4_3_2;\n }\n {\n int64 r_1_4_3_3 = -9008147863258183686;\n r_1_4_3.s_3 = r_1_4_3_3;\n }\n r_1_4.s_3 = r_1_4_3;\n }\n {\n address r_1_4_4 = 0x6C74D7188c2f5545b1f70C462a33fFA940Cbf899;\n r_1_4.s_4 = r_1_4_4;\n }\n r_1.s_4 = r_1_4;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000019eb5b8fa44c79b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000038193019ccb0a4dca827fb421a7d5c035931efe5000000000000000000000000e48a56a70d0568989e4df130666485f1d1a1b9d20000000000000000000000008783bbce01e9a7be94a1ba5fe4aefed0e3653156000000000000000000000000587ece9aa9020dd4e7bf669af6e43c5a45c3f64a000000000000000000000000000000000000000000000000000000000000006a4d6f6f20c3a9f09f9a806ff09f9a80f09f9a806f6f20f09f9a806f6f20f09f9a80204dc3a96ff09f9a8020c3a920c3a94df09f9a8020c3a9f09f9a806f4d20f09f9a804d4df09f9a80206f6f6f6f6ff09f9a804dc3a920204dc3a96f4d20f09f9a806fc3a96fc3a96f20000000000000000000000000000000000000000000006dc3e4b04b032206455dee245f2fcfa2e73906000000000000000000000000006b9ff9b005dec83fc18d14df00000000000000000000000000000000000000009c95ef77a7194af24b5aad7c00000000000000000000000000000000000000009c91591702e75c2ac21c9ebf00000000000000000000000000000000000000001946ead544200907594df71800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000024000000000000000000000000045609ca234cfb0059ee9bab9ca14f063a300ab9a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000913d2037593ad1a1a931261cb5e43c5ff6c9fb6000000000000000000000000000000000000000000000000000000000000000a0289d702ef9ef2b93eeead1b3f08aa7b13d77709a0000000000000000000000007e22681a226b300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a806fc3a9c3a9f09f9a80c3a9f09f9a80204df09f9a80206fc3a9f09f9a806f6f20c3a9f09f9a80f09f9a80f09f9a806f20c3a9f09f9a80204d206f6f204dc3a9206ff09f9a806f6f6f6f6f4d6f6f6f2020204df09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffff9e982a5147c1af6c000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a804d204d6fc3a96fc3a96ff09f9a80f09f9a806f4d4d6f4d4d206f6f6fc3a96f6fc3a9200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001b1293a224fccf400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000ef158481b9089c256cecf4f372015a2b9131c7f10000000000000000000000006f8ce6adbe51b87f41eeeb1614c463ca412761f10000000000000000000000007c34b9e0e32ea42a8085aab68a1b091b958f77d5000000000000000000000000366a7d867c41cb533d2417d0571eadd334982144000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000027f1f264ca54d67ddbe4fc44dc027442b69bb200000000000000000000000000e3e41403ed869ede64f832b6000000000000000000000000000000000000000032b1fe9b20e7c44af4b7abed0000000000000000000000000000000000000000775a84b099d9b6265b875b1c0000000000000000000000000000000000000000677f8807440ea1764944f4400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002200000000000000000000000006c74d7188c2f5545b1f70c462a33ffa940cbf899000000000000000000000000000000000000000000000000000000000000000100000000000000000000000092f06d63f39853229e2b29199f453d2002070ff700000000000000000000000000000000000000000000000000000000000000a0013d19bf6ca65d3812ff246901bdcc7fcd1ab957000000000000000000000000af1d2b6c9393de0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a806fc3a920f09f9a806fc3a96f206f206f6f206fc3a9c3a96f6fc3a96f6f6fc3a96f206f4d6f4df09f9a804dc3a96f6fc3a94df09f9a806f4d6ff09f9a806ff09f9a80c3a96ff09f9a804d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff82fca13ede4d47fa000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a80204d6f6f20f09f9a80c3a96f6f6f6f4d20c3a96ff09f9a80c3a9f09f9a806fc3a9f09f9a80f09f9a806f4dc3a94df09f9a80f09f9a806f206fc3a96f6ff09f9a80c3a9c3a94dc3a96ff09f9a80f09f9a806f6f6f0000000000000000000000000000000000000000000000000000000000000000006b4d6f6f20c3a9f09f9a8020c3a9c3a9f09f9a806f6f204dc3a96fc3a9f09f9a80f09f9a80c3a96fc3a9f09f9a806ff09f9a80204dc3a94df09f9a804d20f09f9a804df09f9a80f09f9a806f6f6fc3a96fc3a920f09f9a80f09f9a80f09f9a804d20f09f9a806f6f4dc3a96f000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,int88,(bool,uint136[],uint240,((address,(int64,string,bool,string,(bytes29,(bytes7,string))),string),int232,bool),bytes11),uint64)", + "type": "(bool,int88,(bool,uint136[],uint240,((address,(int64,string,bool,string,(bytes29,(bytes7,string))),string),int232,bool),bytes11),uint64)", + "value": [ + true, + "99068473432584017410456427", + [ + true, + ["85654337282655613828362063691203056929407"], + "1483865830802575623999652063910865397998733824359192943572190957063184561", + [ + [ + "0xf5E456F2a8CF50085ca6445813F5984e468510C0", + [ + "-5879535793652325958", + "Moo é🚀M 🚀Mé🚀🚀🚀 MM 🚀oéoéooo MoéoM🚀MMoé🚀oooMé 🚀oM MéMooéMé🚀Moéo🚀", + true, + "Moo é🚀 🚀éoéo M o ", + [ + "0x4480bf55b436b43deac8c745ddc00d367f11c315ae37087e214f15a512", + ["0xad0c5d8f6c063e", "Moo é🚀🚀ooéo 🚀 oMMMé🚀éooMM🚀oMoo M🚀o o🚀"] + ] + ], + "Moo é🚀" + ], + "-3082174989613501572030520261376293512742666392131679040348195889941144", + true + ], + "0xe62ca4d4a6620e5ff5bf84" + ], + "5699512860806215211" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "99068473432584017410456427" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "85654337282655613828362063691203056929407" + } + ] + }, + { + "type": "number", + "value": "1483865830802575623999652063910865397998733824359192943572190957063184561" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xf5E456F2a8CF50085ca6445813F5984e468510C0" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-5879535793652325958" + }, + { + "type": "string", + "value": "Moo é🚀M 🚀Mé🚀🚀🚀 MM 🚀oéoéooo MoéoM🚀MMoé🚀oooMé 🚀oM MéMooéMé🚀Moéo🚀" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀 🚀éoéo M o " + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x4480bf55b436b43deac8c745ddc00d367f11c315ae37087e214f15a512" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xad0c5d8f6c063e" + }, + { + "type": "string", + "value": "Moo é🚀🚀ooéo 🚀 oMMMé🚀éooMM🚀oMoo M🚀o o🚀" + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "number", + "value": "-3082174989613501572030520261376293512742666392131679040348195889941144" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0xe62ca4d4a6620e5ff5bf84" + } + ] + }, + { + "type": "number", + "value": "5699512860806215211" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610722806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061053b565b60405180910390f35b6100566102c2565b61005e6102c2565b600181526a51f290b4bdd343e286fb6b602082015261007b6102ee565b60018082526040805182815280820190915260009160208083019080368337019050509050600070fbb7294dce6cd29f3220c87d432b6e8a7f905080826000815181106100ca576100ca61062e565b6001600160881b03909216602092830291909101820152830191909152507dd6ffa485a20ded614534ddbc21c5a0f459acf32be45c4809391e2bcd20b16040820152610114610311565b61011c610338565b73f5e456f2a8cf50085ca6445813f5984e468510c0815261013b610368565b6751984ea738d75e451981526040805160a08101909152606a80825260009190610645602083013960208084019190915260016040808501919091528051808201909152601c81527f4d6f6f20c3a9f09f9a80202020f09f9a80c3a96fc3a96f204d206f2000000000918101919091526060830152506101b96103a1565b7f4480bf55b436b43deac8c745ddc00d367f11c315ae37087e214f15a51200000081526040805180820190915260008152606060208201526656862ec7b6031f60c91b81526040805160608101909152603e808252600091906106af6020830139602080840191909152838101929092525060808084019290925283810192909252604080518082018252600a8152689adede418753e13f3560b71b81850152818501529284527fffffff8dacffa30f32b3a00fca8bac233abb2091e417c47e8464842e168af568918401919091526001838301526060848101939093526a398b293529988397fd6fe160aa1b90840152830191909152674f18bcbfe51ff62b90820152919050565b60408051608081018252600080825260208201529081016102e16102ee565b8152600060209091015290565b6040805160a0810182526000808252606060208301819052928201529081016102e15b6040518060600160405280610324610338565b815260006020820181905260409091015290565b604051806060016040528060006001600160a01b0316815260200161035b610368565b8152602001606081525090565b6040518060a00160405280600060070b8152602001606081526020016000151581526020016060815260200161039c6103a1565b905290565b6040518060400160405280600062ffffff1916815260200161039c604051806040016040528060006001600160c81b0319168152602001606081525090565b6000815180845260005b81811015610406576020818501810151868301820152016103ea565b81811115610418576000602083870101525b50601f01601f19169290920160200192915050565b600081516060845260018060a01b03815116606085015260208082015160606080870152805160070b60c08701528181015160a060e08801526104746101608801826103e0565b90506040808301511515610100890152606083015160bf19808a8503016101208b01526104a184836103e0565b6080958601518b82039092016101408c0152815162ffffff191681529086015186820184905280516001600160c81b0319168483015286015160608201849052949093506104f291508301846103e0565b94810151888603605f190160a08a015294925061050f83866103e0565b945083870151925061052584890184601c0b9052565b9586015115159690950195909552509392505050565b60006020808352835115158184015280840151600a0b604084015260408401516080606085015261014084018151151560a08601528282015160a060c0870152818151808452610160880191508583019350600092505b808310156105bb5783516001600160881b03168252928501926001929092019190850190610592565b5060408401516001600160f01b031660e08801526060840151878203609f190161010089015294506105ed818661042d565b9450505050608081015190506106106101208501826001600160a81b0319169052565b50606084015167ffffffffffffffff81166080850152509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d20f09f9a804dc3a9f09f9a80f09f9a80f09f9a80204d4d20f09f9a806fc3a96fc3a96f6f6f204d6fc3a96f4df09f9a804d4d6fc3a9f09f9a806f6f6f4dc3a920f09f9a806f4d204dc3a94d6f6fc3a94dc3a9f09f9a804d6fc3a96ff09f9a804d6f6f20c3a9f09f9a80f09f9a806f6fc3a96f20f09f9a80206f4d4d4dc3a9f09f9a80c3a96f6f4d4df09f9a806f4d6f6f204df09f9a806f206ff09f9a80a2646970667358221220914d6c2d8775c183fb085b959c645c966e664f044678584fee3b6bd05ee5849864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_76f7d9be {\n bytes7 s_0;\n string s_1;\n }\n\n struct S_b3bdae0d {\n bytes29 s_0;\n S_76f7d9be s_1;\n }\n\n struct S_89fa6770 {\n int64 s_0;\n string s_1;\n bool s_2;\n string s_3;\n S_b3bdae0d s_4;\n }\n\n struct S_62459ccf {\n address s_0;\n S_89fa6770 s_1;\n string s_2;\n }\n\n struct S_4a500eb6 {\n S_62459ccf s_0;\n int232 s_1;\n bool s_2;\n }\n\n struct S_6b6f8635 {\n bool s_0;\n uint136[] s_1;\n uint240 s_2;\n S_4a500eb6 s_3;\n bytes11 s_4;\n }\n\n struct S_9a6958f0 {\n bool s_0;\n int88 s_1;\n S_6b6f8635 s_2;\n uint64 s_3;\n }\n\n function test () public pure returns (S_9a6958f0 memory) {\n S_9a6958f0 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n int88 r_1 = 99068473432584017410456427;\n r.s_1 = r_1;\n }\n {\n S_6b6f8635 memory r_2;\n {\n bool r_2_0 = true;\n r_2.s_0 = r_2_0;\n }\n {\n uint136[] memory r_2_1 = new uint136[](1);\n {\n uint136 r_2_1_0 = 85654337282655613828362063691203056929407;\n r_2_1[0] = r_2_1_0;\n }\n r_2.s_1 = r_2_1;\n }\n {\n uint240 r_2_2 = 1483865830802575623999652063910865397998733824359192943572190957063184561;\n r_2.s_2 = r_2_2;\n }\n {\n S_4a500eb6 memory r_2_3;\n {\n S_62459ccf memory r_2_3_0;\n {\n address r_2_3_0_0 = 0xf5E456F2a8CF50085ca6445813F5984e468510C0;\n r_2_3_0.s_0 = r_2_3_0_0;\n }\n {\n S_89fa6770 memory r_2_3_0_1;\n {\n int64 r_2_3_0_1_0 = -5879535793652325958;\n r_2_3_0_1.s_0 = r_2_3_0_1_0;\n }\n {\n string memory r_2_3_0_1_1 = unicode\"Moo é🚀M 🚀Mé🚀🚀🚀 MM 🚀oéoéooo MoéoM🚀MMoé🚀oooMé 🚀oM MéMooéMé🚀Moéo🚀\";\n r_2_3_0_1.s_1 = r_2_3_0_1_1;\n }\n {\n bool r_2_3_0_1_2 = true;\n r_2_3_0_1.s_2 = r_2_3_0_1_2;\n }\n {\n string memory r_2_3_0_1_3 = unicode\"Moo é🚀 🚀éoéo M o \";\n r_2_3_0_1.s_3 = r_2_3_0_1_3;\n }\n {\n S_b3bdae0d memory r_2_3_0_1_4;\n {\n bytes29 r_2_3_0_1_4_0 = bytes29(0x4480bf55b436b43deac8c745ddc00d367f11c315ae37087e214f15a512);\n r_2_3_0_1_4.s_0 = r_2_3_0_1_4_0;\n }\n {\n S_76f7d9be memory r_2_3_0_1_4_1;\n {\n bytes7 r_2_3_0_1_4_1_0 = bytes7(0xad0c5d8f6c063e);\n r_2_3_0_1_4_1.s_0 = r_2_3_0_1_4_1_0;\n }\n {\n string memory r_2_3_0_1_4_1_1 = unicode\"Moo é🚀🚀ooéo 🚀 oMMMé🚀éooMM🚀oMoo M🚀o o🚀\";\n r_2_3_0_1_4_1.s_1 = r_2_3_0_1_4_1_1;\n }\n r_2_3_0_1_4.s_1 = r_2_3_0_1_4_1;\n }\n r_2_3_0_1.s_4 = r_2_3_0_1_4;\n }\n r_2_3_0.s_1 = r_2_3_0_1;\n }\n {\n string memory r_2_3_0_2 = unicode\"Moo é🚀\";\n r_2_3_0.s_2 = r_2_3_0_2;\n }\n r_2_3.s_0 = r_2_3_0;\n }\n {\n int232 r_2_3_1 = -3082174989613501572030520261376293512742666392131679040348195889941144;\n r_2_3.s_1 = r_2_3_1;\n }\n {\n bool r_2_3_2 = true;\n r_2_3.s_2 = r_2_3_2;\n }\n r_2.s_3 = r_2_3;\n }\n {\n bytes11 r_2_4 = bytes11(0xe62ca4d4a6620e5ff5bf84);\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n {\n uint64 r_3 = 5699512860806215211;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000051f290b4bdd343e286fb6b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000004f18bcbfe51ff62b000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000d6ffa485a20ded614534ddbc21c5a0f459acf32be45c4809391e2bcd20b100000000000000000000000000000000000000000000000000000000000000e0e62ca4d4a6620e5ff5bf840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000fbb7294dce6cd29f3220c87d432b6e8a7f0000000000000000000000000000000000000000000000000000000000000060ffffff8dacffa30f32b3a00fca8bac233abb2091e417c47e8464842e168af5680000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f5e456f2a8cf50085ca6445813f5984e468510c0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c0ffffffffffffffffffffffffffffffffffffffffffffffffae67b158c728a1ba00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000006a4d6f6f20c3a9f09f9a804d20f09f9a804dc3a9f09f9a80f09f9a80f09f9a80204d4d20f09f9a806fc3a96fc3a96f6f6f204d6fc3a96f4df09f9a804d4d6fc3a9f09f9a806f6f6f4dc3a920f09f9a806f4d204dc3a94d6f6fc3a94dc3a9f09f9a804d6fc3a96ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80202020f09f9a80c3a96fc3a96f204d206f20000000004480bf55b436b43deac8c745ddc00d367f11c315ae37087e214f15a5120000000000000000000000000000000000000000000000000000000000000000000040ad0c5d8f6c063e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a80f09f9a806f6fc3a96f20f09f9a80206f4d4d4dc3a9f09f9a80c3a96f6f4d4df09f9a806f4d6f6f204df09f9a806f206ff09f9a800000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(uint152,((address,bytes8,(bytes31,address,(string[],string,string,int200,int),bool,string),bool)[3],bool,(uint72,address[1])))", + "type": "(uint152,((address,bytes8,(bytes31,address,(string[],string,string,int200,int),bool,string),bool)[3],bool,(uint72,address[1])))", + "value": [ + "5159533543432923781032277669191604190015108103", + [ + [ + [ + "0x0508bA0Df204AdCfCd82C3acDeEC5DAd54D77121", + "0xc7618e7f429bd562", + [ + "0x5409447834ec158783622a3d0986c97e74bb8ebf0d546eda360ab9dd846105", + "0xC7D1651e6FaBcBA5c1238531c1aA95B60Dc8f235", + [ + [], + "Moo é🚀🚀M🚀 ooé", + "Moo é🚀Mé ééooéoéMéé🚀M🚀🚀oo🚀ooo éo 🚀MMéé éMooo", + "212791505914023039338568809134359311613690416063997367458563", + "-33530412298051405226546383261494022364457357270428692435909613237395782022285" + ], + false, + "Moo é🚀MMéMoo éoMo oM🚀o o" + ], + true + ], + [ + "0x297720CB452CE99CdBe5A5a9BbB0d190a95e287c", + "0xfdf71c0e4c539392", + [ + "0x850c087a887c6d57169ca3b5807b319f2601b52f2d303d84873f34f9b6265a", + "0xDF5495699D89715E4DeA26C2463953c1b001fefD", + [ + [ + "Moo é🚀🚀oéo o🚀", + "Moo é🚀o éo🚀oéo éo ééé o oé🚀 🚀🚀 éoMoMMéM Mo 🚀oéMé🚀oo oé", + "Moo é🚀éooo🚀o oo é oo oooo🚀oMM ooéMoM🚀oéooo oMéoo ", + "Moo é🚀éoMMM🚀 Mo🚀éM M🚀🚀oéM🚀oooMo🚀🚀 Mé🚀🚀 🚀Mooéo🚀o🚀éoo" + ], + "Moo é🚀M🚀M", + "Moo é🚀oéM ooM🚀MMoM🚀é🚀Méé ooMé 🚀Moooo", + "-142973891831385108100828884113747081171727313794877729287305", + "-48798664125480539943696523578595559435549723640915617573467337944958554582935" + ], + false, + "Moo é🚀" + ], + true + ], + [ + "0x1aF2A54062dd5A79e88f5da6f079243321b81A9d", + "0xfdf2d5267c94b87a", + [ + "0x4d4c7813fc8c9423c7cfbcf34cdcb6d1b1fb36186400d92e3612359f4910c8", + "0x70534346085143e0c13292D52B48CAd0143ea44A", + [ + [ + "Moo é🚀🚀oo", + "Moo é🚀🚀oMMo🚀🚀o 🚀oo oéoMoooo 🚀o é é🚀Moéo", + "Moo é🚀é🚀oo é🚀oo🚀oé🚀Méoo🚀 o oMoo🚀oooM🚀🚀Méé o oé oéoMo🚀 🚀oé " + ], + "Moo é🚀 oéMoM🚀o 🚀", + "Moo é🚀 M 🚀ooo éoM oMMo🚀M🚀é ", + "-617982761035780618456704691967575022063648786862819971573220", + "-44328924306892541892128414215498959846674455559082904675115521585513791357478" + ], + true, + "Moo é🚀MoMo é🚀 🚀é🚀ooéM" + ], + false + ] + ], + false, + ["1625615725014830973962", ["0xbB7Fb0b202859A5F9983c109aa287BE554b8BAA6"]] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "5159533543432923781032277669191604190015108103" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x0508bA0Df204AdCfCd82C3acDeEC5DAd54D77121" + }, + { + "type": "hexstring", + "value": "0xc7618e7f429bd562" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x5409447834ec158783622a3d0986c97e74bb8ebf0d546eda360ab9dd846105" + }, + { + "type": "address", + "value": "0xC7D1651e6FaBcBA5c1238531c1aA95B60Dc8f235" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "string", + "value": "Moo é🚀🚀M🚀 ooé" + }, + { + "type": "string", + "value": "Moo é🚀Mé ééooéoéMéé🚀M🚀🚀oo🚀ooo éo 🚀MMéé éMooo" + }, + { + "type": "number", + "value": "212791505914023039338568809134359311613690416063997367458563" + }, + { + "type": "number", + "value": "-33530412298051405226546383261494022364457357270428692435909613237395782022285" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀MMéMoo éoMo oM🚀o o" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x297720CB452CE99CdBe5A5a9BbB0d190a95e287c" + }, + { + "type": "hexstring", + "value": "0xfdf71c0e4c539392" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x850c087a887c6d57169ca3b5807b319f2601b52f2d303d84873f34f9b6265a" + }, + { + "type": "address", + "value": "0xDF5495699D89715E4DeA26C2463953c1b001fefD" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oéo o🚀" + }, + { + "type": "string", + "value": "Moo é🚀o éo🚀oéo éo ééé o oé🚀 🚀🚀 éoMoMMéM Mo 🚀oéMé🚀oo oé" + }, + { + "type": "string", + "value": "Moo é🚀éooo🚀o oo é oo oooo🚀oMM ooéMoM🚀oéooo oMéoo " + }, + { + "type": "string", + "value": "Moo é🚀éoMMM🚀 Mo🚀éM M🚀🚀oéM🚀oooMo🚀🚀 Mé🚀🚀 🚀Mooéo🚀o🚀éoo" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M🚀M" + }, + { + "type": "string", + "value": "Moo é🚀oéM ooM🚀MMoM🚀é🚀Méé ooMé 🚀Moooo" + }, + { + "type": "number", + "value": "-142973891831385108100828884113747081171727313794877729287305" + }, + { + "type": "number", + "value": "-48798664125480539943696523578595559435549723640915617573467337944958554582935" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x1aF2A54062dd5A79e88f5da6f079243321b81A9d" + }, + { + "type": "hexstring", + "value": "0xfdf2d5267c94b87a" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x4d4c7813fc8c9423c7cfbcf34cdcb6d1b1fb36186400d92e3612359f4910c8" + }, + { + "type": "address", + "value": "0x70534346085143e0c13292D52B48CAd0143ea44A" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oo" + }, + { + "type": "string", + "value": "Moo é🚀🚀oMMo🚀🚀o 🚀oo oéoMoooo 🚀o é é🚀Moéo" + }, + { + "type": "string", + "value": "Moo é🚀é🚀oo é🚀oo🚀oé🚀Méoo🚀 o oMoo🚀oooM🚀🚀Méé o oé oéoMo🚀 🚀oé " + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 oéMoM🚀o 🚀" + }, + { + "type": "string", + "value": "Moo é🚀 M 🚀ooo éoM oMMo🚀M🚀é " + }, + { + "type": "number", + "value": "-617982761035780618456704691967575022063648786862819971573220" + }, + { + "type": "number", + "value": "-44328924306892541892128414215498959846674455559082904675115521585513791357478" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀MoMo é🚀 🚀é🚀ooéM" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1625615725014830973962" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xbB7Fb0b202859A5F9983c109aa287BE554b8BAA6" + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610e16806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061094d565b60405180910390f35b61005661076b565b61005e61076b565b72e75c8a553cc8ee25c162353854acfddec7b407815261007c610793565b6100846107ba565b61008c6107e7565b730508ba0df204adcfcd82c3acdeec5dad54d7712181526763b0c73fa14deab160c11b60208201526100bc610813565b7f5409447834ec158783622a3d0986c97e74bb8ebf0d546eda360ab9dd84610500815273c7d1651e6fabcba5c1238531c1aa95b60dc8f2356020820152610101610846565b604080516000808252602082019092528161012c565b60608152602001906001900390816101175790505b50825250604080518082018252601881527f4d6f6f20c3a9f09f9a80f09f9a804df09f9a80206f6fc3a9000000000000000060208083019190915280840191909152815160808101909252604b80835260009291610d96908301396040808401919091527821e64efb9d47b6df442e1b0fca678abfcdcd98f4d6fe929b036060808501919091527fb5de758cb0986b2547fb181ba430f5d5f21ae68fe8f82f169ed5d0f731794b7360808501528482019390935260008484018190528151938401909152602180845290929150610ca96020830139608083015250604082015260016060820152815261021d6107e7565b73297720cb452ce99cdbe5a5a9bbb0d190a95e287c8152677efb8e072629c9c960c11b602082015261024d610813565b7f850c087a887c6d57169ca3b5807b319f2601b52f2d303d84873f34f9b6265a00815273df5495699d89715e4dea26c2463953c1b001fefd6020820152610292610846565b60408051600480825260a08201909252600091816020015b60608152602001906001900390816102aa57905050905060006040518060400160405280601981526020017f4d6f6f20c3a9f09f9a80f09f9a806fc3a96f20206ff09f9a80000000000000008152509050808260008151811061030f5761030f610b2f565b60200260200101819052505060006040518060800160405280605a8152602001610ba7605a91399050808260018151811061034c5761034c610b2f565b6020026020010181905250506000604051806080016040528060438152602001610d2e604391399050808260028151811061038957610389610b2f565b60200260200101819052505060006040518060a0016040528060618152602001610b4660619139905080826003815181106103c6576103c6610b2f565b60209081029190910181019190915291835250604080518082018252601081526f4d6f6f20c3a9f09f9a804df09f9a804d60801b8184015283830152805160608101909152603a808252600092610cf4908301396040838101919091527816c6ed148d2cceb62b365ccb83a38286d1d93b3bba96402c88196060808501919091527f941cef54cdebd300d6f82187efc243cc2196dbe3a94e9ade61902523df2c50696080808601919091528583019490945260008582015281518083018352600a8152689adede418753e13f3560b71b6020828101919091529486015290850193909352506001918301919091528201526104bf6107e7565b731af2a54062dd5a79e88f5da6f079243321b81a9d8152677ef96a933e4a5c3d60c11b60208201526104ef610813565b7f4d4c7813fc8c9423c7cfbcf34cdcb6d1b1fb36186400d92e3612359f4910c80081527370534346085143e0c13292d52b48cad0143ea44a6020820152610534610846565b60408051600380825260808201909252600091816020015b606081526020019060019003908161054c57905050905060006040518060400160405280601081526020016f4d6f6f20c3a9f09f9a80f09f9a806f6f60801b815250905080826000815181106105a4576105a4610b2f565b6020026020010181905250506000604051806080016040528060438152602001610c6660439139905080826001815181106105e1576105e1610b2f565b60200260200101819052505060006040518060a0016040528060658152602001610c01606591399050808260028151811061061e5761061e610b2f565b60209081029190910181019190915291835250604080518082018252601b81527f4d6f6f20c3a9f09f9a80206fc3a94d6f4df09f9a806f20f09f9a8000000000008184015283830152805160608101909152602a808252600092610cca908301396040808401919091527862734913244b38f5cdc88add72d4d7c14d6d0b331103de25e3196060808501919091527f9dfeb7cd133e5efc45f599212781b2516a14a34829b39d5ef4a6a64450adfdda6080850152848201939093526001848401528051928301905250602580825260009190610d716020830139608083015250604082810191909152600060608301819052908301919091529082526020820152610727610878565b68581ff339050e16840a815261073b610899565b73bb7fb0b202859a5f9983c109aa287be554b8baa681526020828101919091526040830191909152820152919050565b604051806040016040528060006001600160981b0316815260200161078e610793565b905290565b60405180606001604052806107a66107ba565b81526000602082015260400161078e610878565b60405180606001604052806003905b6107d16107e7565b8152602001906001900390816107c95790505090565b6040805160808101825260008082526020820152908101610806610813565b8152600060209091015290565b6040805160a08101825260008082526020820152908101610832610846565b815260006020820152606060409091015290565b6040518060a00160405280606081526020016060815260200160608152602001600060180b8152602001600081525090565b6040518060400160405280600068ffffffffffffffffff16815260200161078e5b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b818110156108dd576020818501810151868301820152016108c1565b818111156108ef576000602083870101525b50601f01601f19169290920160200192915050565b68ffffffffffffffffff815116825260208082015181840160005b60018110156109455782516001600160a01b03168252918301919083019060010161091f565b505050505050565b600060208083526001600160981b0384511681840152808401516040808186015260e0850182516080806060890152828390506101408901935060005b6003811015610b035760df198a8603018252835180516001600160a01b039081168752898201516001600160c01b0319168a88015287820151888801869052805160ff191686890152808b015190911660a0808901919091528189015160c0890182905280516101208a019290925281516101c08a018190529092916101e0600583901b8b01810192918e0191908b019060005b81811015610a4d576101df198d8603018352610a3b8585516108b7565b9450928f0192918f0191600101610a1e565b505050508b83015161011f19808b8403016101408c0152610a6e83836108b7565b92508b8501519150808b8403016101608c015250610a8c82826108b7565b9150506060830151610aa46101808b018260180b9052565b50918601516101a08901526060810151151560e089015280860151888303607f19016101008a015291610ad781846108b7565b9250505060608201519150610af0606088018315159052565b955050928701929087019060010161098a565b505094840151151594870194909452818301519350610b2560a0870185610904565b9695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80c3a96f4d4d4df09f9a80204d6ff09f9a80c3a94d204df09f9a80f09f9a806fc3a94df09f9a806f6f6f4d6ff09f9a80f09f9a80204dc3a9f09f9a80f09f9a8020f09f9a804d6f6fc3a96ff09f9a806ff09f9a80c3a96f6f4d6f6f20c3a9f09f9a806f20c3a96ff09f9a806fc3a96f202020c3a96f20c3a9c3a9c3a9206f206fc3a9f09f9a8020f09f9a80f09f9a8020c3a96f4d6f4d4dc3a94d204d6f20f09f9a806fc3a94dc3a9f09f9a806f6f206fc3a94d6f6f20c3a9f09f9a80c3a9f09f9a806f6f20c3a9f09f9a806f6ff09f9a806fc3a9f09f9a804dc3a96f6ff09f9a80206f206f4d6f6ff09f9a806f6f6f4df09f9a80f09f9a804dc3a9c3a9206f206fc3a9206fc3a96f4d6ff09f9a8020f09f9a806fc3a9204d6f6f20c3a9f09f9a80f09f9a806f4d4d6ff09f9a80f09f9a806f2020f09f9a806f6f206fc3a96f4d6f6f6f6f20f09f9a806f2020c3a920c3a9f09f9a804d6fc3a96f4d6f6f20c3a9f09f9a804d4dc3a94d6f6f20c3a96f4d6f206f4df09f9a806f206f4d6f6f20c3a9f09f9a80204d20f09f9a806f6f6f20c3a96f4d206f4d4d6ff09f9a804df09f9a80c3a9204d6f6f20c3a9f09f9a806fc3a94d206f6f4df09f9a804d4d6f4df09f9a80c3a9f09f9a804dc3a9c3a920206f6f4dc3a920f09f9a804d6f6f6f6f4d6f6f20c3a9f09f9a80c3a96f6f6ff09f9a806f206f6f20c3a9206f6f206f6f6f6ff09f9a806f4d4d206f6fc3a94d6f4df09f9a806fc3a96f6f6f206f4dc3a96f6f204d6f6f20c3a9f09f9a804d6f4d6f20c3a9f09f9a8020f09f9a80c3a9f09f9a806f6fc3a94d4d6f6f20c3a9f09f9a804dc3a920c3a9c3a96f6fc3a96fc3a94dc3a9c3a9f09f9a804df09f9a80f09f9a806f6ff09f9a806f6f6f20c3a96f20f09f9a804d4dc3a9c3a92020c3a94d6f6f6fa264697066735822122011a13933dddd8498c63c6fd6265d6bfa79ce059f12916280a25fbc5ce31d7fd664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0756fe5d {\n string[] s_0;\n string s_1;\n string s_2;\n int200 s_3;\n int256 s_4;\n }\n\n struct S_6eba870e {\n bytes31 s_0;\n address s_1;\n S_0756fe5d s_2;\n bool s_3;\n string s_4;\n }\n\n struct S_545489c5 {\n address s_0;\n bytes8 s_1;\n S_6eba870e s_2;\n bool s_3;\n }\n\n struct S_6a3ee73a {\n uint72 s_0;\n address[1] s_1;\n }\n\n struct S_361dd6b0 {\n S_545489c5[3] s_0;\n bool s_1;\n S_6a3ee73a s_2;\n }\n\n struct S_0673135d {\n uint152 s_0;\n S_361dd6b0 s_1;\n }\n\n function test () public pure returns (S_0673135d memory) {\n S_0673135d memory r;\n {\n uint152 r_0 = 5159533543432923781032277669191604190015108103;\n r.s_0 = r_0;\n }\n {\n S_361dd6b0 memory r_1;\n {\n S_545489c5[3] memory r_1_0;\n {\n S_545489c5 memory r_1_0_0;\n {\n address r_1_0_0_0 = 0x0508bA0Df204AdCfCd82C3acDeEC5DAd54D77121;\n r_1_0_0.s_0 = r_1_0_0_0;\n }\n {\n bytes8 r_1_0_0_1 = bytes8(0xc7618e7f429bd562);\n r_1_0_0.s_1 = r_1_0_0_1;\n }\n {\n S_6eba870e memory r_1_0_0_2;\n {\n bytes31 r_1_0_0_2_0 = bytes31(0x5409447834ec158783622a3d0986c97e74bb8ebf0d546eda360ab9dd846105);\n r_1_0_0_2.s_0 = r_1_0_0_2_0;\n }\n {\n address r_1_0_0_2_1 = 0xC7D1651e6FaBcBA5c1238531c1aA95B60Dc8f235;\n r_1_0_0_2.s_1 = r_1_0_0_2_1;\n }\n {\n S_0756fe5d memory r_1_0_0_2_2;\n {\n string[] memory r_1_0_0_2_2_0 = new string[](0);\n r_1_0_0_2_2.s_0 = r_1_0_0_2_2_0;\n }\n {\n string memory r_1_0_0_2_2_1 = unicode\"Moo é🚀🚀M🚀 ooé\";\n r_1_0_0_2_2.s_1 = r_1_0_0_2_2_1;\n }\n {\n string memory r_1_0_0_2_2_2 = unicode\"Moo é🚀Mé ééooéoéMéé🚀M🚀🚀oo🚀ooo éo 🚀MMéé éMooo\";\n r_1_0_0_2_2.s_2 = r_1_0_0_2_2_2;\n }\n {\n int200 r_1_0_0_2_2_3 = 212791505914023039338568809134359311613690416063997367458563;\n r_1_0_0_2_2.s_3 = r_1_0_0_2_2_3;\n }\n {\n int r_1_0_0_2_2_4 = -33530412298051405226546383261494022364457357270428692435909613237395782022285;\n r_1_0_0_2_2.s_4 = r_1_0_0_2_2_4;\n }\n r_1_0_0_2.s_2 = r_1_0_0_2_2;\n }\n {\n bool r_1_0_0_2_3 = false;\n r_1_0_0_2.s_3 = r_1_0_0_2_3;\n }\n {\n string memory r_1_0_0_2_4 = unicode\"Moo é🚀MMéMoo éoMo oM🚀o o\";\n r_1_0_0_2.s_4 = r_1_0_0_2_4;\n }\n r_1_0_0.s_2 = r_1_0_0_2;\n }\n {\n bool r_1_0_0_3 = true;\n r_1_0_0.s_3 = r_1_0_0_3;\n }\n r_1_0[0] = r_1_0_0;\n }\n {\n S_545489c5 memory r_1_0_1;\n {\n address r_1_0_1_0 = 0x297720CB452CE99CdBe5A5a9BbB0d190a95e287c;\n r_1_0_1.s_0 = r_1_0_1_0;\n }\n {\n bytes8 r_1_0_1_1 = bytes8(0xfdf71c0e4c539392);\n r_1_0_1.s_1 = r_1_0_1_1;\n }\n {\n S_6eba870e memory r_1_0_1_2;\n {\n bytes31 r_1_0_1_2_0 = bytes31(0x850c087a887c6d57169ca3b5807b319f2601b52f2d303d84873f34f9b6265a);\n r_1_0_1_2.s_0 = r_1_0_1_2_0;\n }\n {\n address r_1_0_1_2_1 = 0xDF5495699D89715E4DeA26C2463953c1b001fefD;\n r_1_0_1_2.s_1 = r_1_0_1_2_1;\n }\n {\n S_0756fe5d memory r_1_0_1_2_2;\n {\n string[] memory r_1_0_1_2_2_0 = new string[](4);\n {\n string memory r_1_0_1_2_2_0_0 = unicode\"Moo é🚀🚀oéo o🚀\";\n r_1_0_1_2_2_0[0] = r_1_0_1_2_2_0_0;\n }\n {\n string memory r_1_0_1_2_2_0_1 = unicode\"Moo é🚀o éo🚀oéo éo ééé o oé🚀 🚀🚀 éoMoMMéM Mo 🚀oéMé🚀oo oé\";\n r_1_0_1_2_2_0[1] = r_1_0_1_2_2_0_1;\n }\n {\n string memory r_1_0_1_2_2_0_2 = unicode\"Moo é🚀éooo🚀o oo é oo oooo🚀oMM ooéMoM🚀oéooo oMéoo \";\n r_1_0_1_2_2_0[2] = r_1_0_1_2_2_0_2;\n }\n {\n string memory r_1_0_1_2_2_0_3 = unicode\"Moo é🚀éoMMM🚀 Mo🚀éM M🚀🚀oéM🚀oooMo🚀🚀 Mé🚀🚀 🚀Mooéo🚀o🚀éoo\";\n r_1_0_1_2_2_0[3] = r_1_0_1_2_2_0_3;\n }\n r_1_0_1_2_2.s_0 = r_1_0_1_2_2_0;\n }\n {\n string memory r_1_0_1_2_2_1 = unicode\"Moo é🚀M🚀M\";\n r_1_0_1_2_2.s_1 = r_1_0_1_2_2_1;\n }\n {\n string memory r_1_0_1_2_2_2 = unicode\"Moo é🚀oéM ooM🚀MMoM🚀é🚀Méé ooMé 🚀Moooo\";\n r_1_0_1_2_2.s_2 = r_1_0_1_2_2_2;\n }\n {\n int200 r_1_0_1_2_2_3 = -142973891831385108100828884113747081171727313794877729287305;\n r_1_0_1_2_2.s_3 = r_1_0_1_2_2_3;\n }\n {\n int r_1_0_1_2_2_4 = -48798664125480539943696523578595559435549723640915617573467337944958554582935;\n r_1_0_1_2_2.s_4 = r_1_0_1_2_2_4;\n }\n r_1_0_1_2.s_2 = r_1_0_1_2_2;\n }\n {\n bool r_1_0_1_2_3 = false;\n r_1_0_1_2.s_3 = r_1_0_1_2_3;\n }\n {\n string memory r_1_0_1_2_4 = unicode\"Moo é🚀\";\n r_1_0_1_2.s_4 = r_1_0_1_2_4;\n }\n r_1_0_1.s_2 = r_1_0_1_2;\n }\n {\n bool r_1_0_1_3 = true;\n r_1_0_1.s_3 = r_1_0_1_3;\n }\n r_1_0[1] = r_1_0_1;\n }\n {\n S_545489c5 memory r_1_0_2;\n {\n address r_1_0_2_0 = 0x1aF2A54062dd5A79e88f5da6f079243321b81A9d;\n r_1_0_2.s_0 = r_1_0_2_0;\n }\n {\n bytes8 r_1_0_2_1 = bytes8(0xfdf2d5267c94b87a);\n r_1_0_2.s_1 = r_1_0_2_1;\n }\n {\n S_6eba870e memory r_1_0_2_2;\n {\n bytes31 r_1_0_2_2_0 = bytes31(0x4d4c7813fc8c9423c7cfbcf34cdcb6d1b1fb36186400d92e3612359f4910c8);\n r_1_0_2_2.s_0 = r_1_0_2_2_0;\n }\n {\n address r_1_0_2_2_1 = 0x70534346085143e0c13292D52B48CAd0143ea44A;\n r_1_0_2_2.s_1 = r_1_0_2_2_1;\n }\n {\n S_0756fe5d memory r_1_0_2_2_2;\n {\n string[] memory r_1_0_2_2_2_0 = new string[](3);\n {\n string memory r_1_0_2_2_2_0_0 = unicode\"Moo é🚀🚀oo\";\n r_1_0_2_2_2_0[0] = r_1_0_2_2_2_0_0;\n }\n {\n string memory r_1_0_2_2_2_0_1 = unicode\"Moo é🚀🚀oMMo🚀🚀o 🚀oo oéoMoooo 🚀o é é🚀Moéo\";\n r_1_0_2_2_2_0[1] = r_1_0_2_2_2_0_1;\n }\n {\n string memory r_1_0_2_2_2_0_2 = unicode\"Moo é🚀é🚀oo é🚀oo🚀oé🚀Méoo🚀 o oMoo🚀oooM🚀🚀Méé o oé oéoMo🚀 🚀oé \";\n r_1_0_2_2_2_0[2] = r_1_0_2_2_2_0_2;\n }\n r_1_0_2_2_2.s_0 = r_1_0_2_2_2_0;\n }\n {\n string memory r_1_0_2_2_2_1 = unicode\"Moo é🚀 oéMoM🚀o 🚀\";\n r_1_0_2_2_2.s_1 = r_1_0_2_2_2_1;\n }\n {\n string memory r_1_0_2_2_2_2 = unicode\"Moo é🚀 M 🚀ooo éoM oMMo🚀M🚀é \";\n r_1_0_2_2_2.s_2 = r_1_0_2_2_2_2;\n }\n {\n int200 r_1_0_2_2_2_3 = -617982761035780618456704691967575022063648786862819971573220;\n r_1_0_2_2_2.s_3 = r_1_0_2_2_2_3;\n }\n {\n int r_1_0_2_2_2_4 = -44328924306892541892128414215498959846674455559082904675115521585513791357478;\n r_1_0_2_2_2.s_4 = r_1_0_2_2_2_4;\n }\n r_1_0_2_2.s_2 = r_1_0_2_2_2;\n }\n {\n bool r_1_0_2_2_3 = true;\n r_1_0_2_2.s_3 = r_1_0_2_2_3;\n }\n {\n string memory r_1_0_2_2_4 = unicode\"Moo é🚀MoMo é🚀 🚀é🚀ooéM\";\n r_1_0_2_2.s_4 = r_1_0_2_2_4;\n }\n r_1_0_2.s_2 = r_1_0_2_2;\n }\n {\n bool r_1_0_2_3 = false;\n r_1_0_2.s_3 = r_1_0_2_3;\n }\n r_1_0[2] = r_1_0_2;\n }\n r_1.s_0 = r_1_0;\n }\n {\n bool r_1_1 = false;\n r_1.s_1 = r_1_1;\n }\n {\n S_6a3ee73a memory r_1_2;\n {\n uint72 r_1_2_0 = 1625615725014830973962;\n r_1_2.s_0 = r_1_2_0;\n }\n {\n address[1] memory r_1_2_1;\n {\n address r_1_2_1_0 = 0xbB7Fb0b202859A5F9983c109aa287BE554b8BAA6;\n r_1_2_1[0] = r_1_2_1_0;\n }\n r_1_2.s_1 = r_1_2_1;\n }\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000e75c8a553cc8ee25c162353854acfddec7b4070000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000581ff339050e16840a000000000000000000000000bb7fb0b202859a5f9983c109aa287be554b8baa60000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000508ba0df204adcfcd82c3acdeec5dad54d77121c7618e7f429bd562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000015409447834ec158783622a3d0986c97e74bb8ebf0d546eda360ab9dd84610500000000000000000000000000c7d1651e6fabcba5c1238531c1aa95b60dc8f23500000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000021e64efb9d47b6df442e1b0fca678abfcdcd98f4d6fe929b03b5de758cb0986b2547fb181ba430f5d5f21ae68fe8f82f169ed5d0f731794b73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a80f09f9a804df09f9a80206f6fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a804dc3a920c3a9c3a96f6fc3a96fc3a94dc3a9c3a9f09f9a804df09f9a80f09f9a806f6ff09f9a806f6f6f20c3a96f20f09f9a804d4dc3a9c3a92020c3a94d6f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a804d4dc3a94d6f6f20c3a96f4d6f206f4df09f9a806f206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000297720cb452ce99cdbe5a5a9bbb0d190a95e287cfdf71c0e4c53939200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001850c087a887c6d57169ca3b5807b319f2601b52f2d303d84873f34f9b6265a00000000000000000000000000df5495699d89715e4dea26c2463953c1b001fefd00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000360ffffffffffffffe93912eb72d33149d4c9a3347c5c7d792e26c4c44569bfd377941cef54cdebd300d6f82187efc243cc2196dbe3a94e9ade61902523df2c50690000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000194d6f6f20c3a9f09f9a80f09f9a806fc3a96f20206ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a806f20c3a96ff09f9a806fc3a96f202020c3a96f20c3a9c3a9c3a9206f206fc3a9f09f9a8020f09f9a80f09f9a8020c3a96f4d6f4d4dc3a94d204d6f20f09f9a806fc3a94dc3a9f09f9a806f6f206fc3a900000000000000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a80c3a96f6f6ff09f9a806f206f6f20c3a9206f6f206f6f6f6ff09f9a806f4d4d206f6fc3a94d6f4df09f9a806fc3a96f6f6f206f4dc3a96f6f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a80c3a96f4d4d4df09f9a80204d6ff09f9a80c3a94d204df09f9a80f09f9a806fc3a94df09f9a806f6f6f4d6ff09f9a80f09f9a80204dc3a9f09f9a80f09f9a8020f09f9a804d6f6fc3a96ff09f9a806ff09f9a80c3a96f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a804df09f9a804d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a4d6f6f20c3a9f09f9a806fc3a94d206f6f4df09f9a804d4d6f4df09f9a80c3a9f09f9a804dc3a9c3a920206f6f4dc3a920f09f9a804d6f6f6f6f000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000001af2a54062dd5a79e88f5da6f079243321b81a9dfdf2d5267c94b87a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000004d4c7813fc8c9423c7cfbcf34cdcb6d1b1fb36186400d92e3612359f4910c80000000000000000000000000070534346085143e0c13292d52b48cad0143ea44a00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c0ffffffffffffff9d8cb6ecdbb4c70a323775228d2b283eb292f4cceefc21da1c9dfeb7cd133e5efc45f599212781b2516a14a34829b39d5ef4a6a64450adfdda0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a80f09f9a806f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a80f09f9a806f4d4d6ff09f9a80f09f9a806f2020f09f9a806f6f206fc3a96f4d6f6f6f6f20f09f9a806f2020c3a920c3a9f09f9a804d6fc3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000654d6f6f20c3a9f09f9a80c3a9f09f9a806f6f20c3a9f09f9a806f6ff09f9a806fc3a9f09f9a804dc3a96f6ff09f9a80206f206f4d6f6ff09f9a806f6f6f4df09f9a80f09f9a804dc3a9c3a9206f206fc3a9206fc3a96f4d6ff09f9a8020f09f9a806fc3a920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a80206fc3a94d6f4df09f9a806f20f09f9a800000000000000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a80204d20f09f9a806f6f6f20c3a96f4d206f4d4d6ff09f9a804df09f9a80c3a9200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a804d6f4d6f20c3a9f09f9a8020f09f9a80c3a9f09f9a806f6fc3a94d000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((string,uint56,uint80,int96,(address,address[4][3][4],bool,string,string)),string,int104,(string,string,uint24[2])[2],uint40)", + "type": "((string,uint56,uint80,int96,(address,address[4][3][4],bool,string,string)),string,int104,(string,string,uint24[2])[2],uint40)", + "value": [ + [ + "Moo é🚀o M MM🚀", + "56849351209168644", + "585997473532304877245652", + "-4265759512060080937463725419", + [ + "0xbE2f53B85E8604A1332C7Ff1046f82e944f7bD72", + [ + [ + [ + "0x0E3F8485CFd217dA380cf0B27617C322E07e4f31", + "0x136bF83b5bbb291f3E475955e85C1FBF219edE56", + "0x13B6aFE3859C6975b45f8836a9b8aCc2EB77f1FF", + "0x314012405F3ba51Df8b13AbB2283b17626D67171" + ], + [ + "0x9eb9d7f18E42130CE3b84c9FE7237305BAAf4440", + "0xBD9EAe1CCBcbD011c7A6fCf9173FA39a09f02A74", + "0x443264Cfa7BCDCA5d0dD9b3A3A2171DF37696955", + "0xC272cBe93E268C16b0a7ADF7C378445f00334bBA" + ], + [ + "0x7630E4C0FbD21cFEE3a06353845447E79F289C53", + "0xFfe1424749978070D2Ce4040B71228fC5efacbD7", + "0xBd39C43bc2A88E9966b45e03F0794A42938b5A03", + "0x881eA6814Af3D64C694d7cA7Fa111De202d1C079" + ] + ], + [ + [ + "0xE41ae8553bCbe1CbF53Dd1138A0a454577948039", + "0xA898A15ae97686f1AB1228D6fa20bcb78DAd0608", + "0xE1432De1870EE93088575fEA949057a040002d4D", + "0x0dBeB6A56EF01626fB45fC0B4f547eE712Ede852" + ], + [ + "0x6f0e0982217302044DF71c99Ba9aa8BFADf14db1", + "0x0F87b7da3457B427c3F7d364Aa31D984524C84C6", + "0x6eaA244E9cA00d7AE7241f0e672ba306D9226e33", + "0x5B8Beead6A378759D71C3d10112Fb288cCE97909" + ], + [ + "0xe7363AA6AafAb78BaD91fc5AC1457497D8E4870c", + "0x4241465383392D07C5FD3Cda92183C61e088CBe1", + "0x566D0Bf07B5524Dc161ad2938BCeA93966CB1290", + "0x1B708f31abD8d77c24079CE01921D03f55eeC865" + ] + ], + [ + [ + "0xE99af37f27979942B260d519Fd11bBcf0ce3994C", + "0x8BB3645412b4112797149693D6Ed0613402D085A", + "0x62BFAa086a482a74d54493F4C64b28712c08b3D0", + "0x1Dbf7EC44CC917E1356ADb3f8C9f590f7C892b53" + ], + [ + "0xb07a63e9da1855E6281f9DB2BA9Feb50E59c5135", + "0xC9A53f7F553dB52BBb3039AE78ce05d7a3615Ec9", + "0x4c52E99beed045eBbA15E2F7B49d0FbDEEE05766", + "0x6c82f29cF31E675ddD3aC8b68122f60e2fE0655B" + ], + [ + "0xFe17f2Da202ac964ac1B9a7B3AA8c8a72FFF4b47", + "0x8d05A9ac597CB603704B9FD3cC969EAbAab326d5", + "0xC6044A150704BD932259750974f52334f6e62eC8", + "0xf17f1120B2b3Bb02524eDD1D7e82C634138D98DE" + ] + ], + [ + [ + "0x7f23182d1d596A48247bF624330C38a4e5A28F76", + "0x263eD001abAB7a765366D4d4ba5D6B5967f7f78A", + "0x2414b362d8106DF54463778F8Ea38e0E67905FAE", + "0x0cDf542157af0Ef2AC48C638Eb11693DDc89A049" + ], + [ + "0x89D4bc257E8972D5041F3d17502227995e8829a1", + "0x9Faee31C2a44812A1d171232845a493140ce51D2", + "0xF1727bfdfDcc8a82540EbccaA144c86718A880A2", + "0xBfdC339B0742F8511c4dB446c97f92c8a9E98182" + ], + [ + "0x3E4f1555dAA7229EAA91dB6b90e0A33020C477d0", + "0x5AC14b9e81d05dbfc95A0f44810a1fDAAcd1CbD2", + "0x87BE9f322A83ca6cC2a65Fd4cFC1A80b83597fcc", + "0x8CEF3B7698f19A691C380748fE8f0b4E22E760BB" + ] + ] + ], + true, + "Moo é🚀 é é 🚀 oo🚀ooéM oéMMooo éé🚀oé", + "Moo é🚀éMéMo🚀éo éMMMoo🚀 🚀éooooM" + ] + ], + "Moo é🚀oo🚀 oé🚀 ooM🚀o oo🚀 🚀MéMé🚀éo", + "-8864381719565654955396350516378", + [ + ["Moo é🚀ooo", "Moo é🚀M🚀éMM🚀o", ["6204066", "15693755"]], + ["Moo é🚀 éé🚀🚀 Mo", "Moo é🚀oé", ["9668851", "6990993"]] + ], + "981728239224" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o M MM🚀" + }, + { + "type": "number", + "value": "56849351209168644" + }, + { + "type": "number", + "value": "585997473532304877245652" + }, + { + "type": "number", + "value": "-4265759512060080937463725419" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xbE2f53B85E8604A1332C7Ff1046f82e944f7bD72" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x0E3F8485CFd217dA380cf0B27617C322E07e4f31" + }, + { + "type": "address", + "value": "0x136bF83b5bbb291f3E475955e85C1FBF219edE56" + }, + { + "type": "address", + "value": "0x13B6aFE3859C6975b45f8836a9b8aCc2EB77f1FF" + }, + { + "type": "address", + "value": "0x314012405F3ba51Df8b13AbB2283b17626D67171" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x9eb9d7f18E42130CE3b84c9FE7237305BAAf4440" + }, + { + "type": "address", + "value": "0xBD9EAe1CCBcbD011c7A6fCf9173FA39a09f02A74" + }, + { + "type": "address", + "value": "0x443264Cfa7BCDCA5d0dD9b3A3A2171DF37696955" + }, + { + "type": "address", + "value": "0xC272cBe93E268C16b0a7ADF7C378445f00334bBA" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x7630E4C0FbD21cFEE3a06353845447E79F289C53" + }, + { + "type": "address", + "value": "0xFfe1424749978070D2Ce4040B71228fC5efacbD7" + }, + { + "type": "address", + "value": "0xBd39C43bc2A88E9966b45e03F0794A42938b5A03" + }, + { + "type": "address", + "value": "0x881eA6814Af3D64C694d7cA7Fa111De202d1C079" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xE41ae8553bCbe1CbF53Dd1138A0a454577948039" + }, + { + "type": "address", + "value": "0xA898A15ae97686f1AB1228D6fa20bcb78DAd0608" + }, + { + "type": "address", + "value": "0xE1432De1870EE93088575fEA949057a040002d4D" + }, + { + "type": "address", + "value": "0x0dBeB6A56EF01626fB45fC0B4f547eE712Ede852" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x6f0e0982217302044DF71c99Ba9aa8BFADf14db1" + }, + { + "type": "address", + "value": "0x0F87b7da3457B427c3F7d364Aa31D984524C84C6" + }, + { + "type": "address", + "value": "0x6eaA244E9cA00d7AE7241f0e672ba306D9226e33" + }, + { + "type": "address", + "value": "0x5B8Beead6A378759D71C3d10112Fb288cCE97909" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xe7363AA6AafAb78BaD91fc5AC1457497D8E4870c" + }, + { + "type": "address", + "value": "0x4241465383392D07C5FD3Cda92183C61e088CBe1" + }, + { + "type": "address", + "value": "0x566D0Bf07B5524Dc161ad2938BCeA93966CB1290" + }, + { + "type": "address", + "value": "0x1B708f31abD8d77c24079CE01921D03f55eeC865" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xE99af37f27979942B260d519Fd11bBcf0ce3994C" + }, + { + "type": "address", + "value": "0x8BB3645412b4112797149693D6Ed0613402D085A" + }, + { + "type": "address", + "value": "0x62BFAa086a482a74d54493F4C64b28712c08b3D0" + }, + { + "type": "address", + "value": "0x1Dbf7EC44CC917E1356ADb3f8C9f590f7C892b53" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xb07a63e9da1855E6281f9DB2BA9Feb50E59c5135" + }, + { + "type": "address", + "value": "0xC9A53f7F553dB52BBb3039AE78ce05d7a3615Ec9" + }, + { + "type": "address", + "value": "0x4c52E99beed045eBbA15E2F7B49d0FbDEEE05766" + }, + { + "type": "address", + "value": "0x6c82f29cF31E675ddD3aC8b68122f60e2fE0655B" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xFe17f2Da202ac964ac1B9a7B3AA8c8a72FFF4b47" + }, + { + "type": "address", + "value": "0x8d05A9ac597CB603704B9FD3cC969EAbAab326d5" + }, + { + "type": "address", + "value": "0xC6044A150704BD932259750974f52334f6e62eC8" + }, + { + "type": "address", + "value": "0xf17f1120B2b3Bb02524eDD1D7e82C634138D98DE" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x7f23182d1d596A48247bF624330C38a4e5A28F76" + }, + { + "type": "address", + "value": "0x263eD001abAB7a765366D4d4ba5D6B5967f7f78A" + }, + { + "type": "address", + "value": "0x2414b362d8106DF54463778F8Ea38e0E67905FAE" + }, + { + "type": "address", + "value": "0x0cDf542157af0Ef2AC48C638Eb11693DDc89A049" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x89D4bc257E8972D5041F3d17502227995e8829a1" + }, + { + "type": "address", + "value": "0x9Faee31C2a44812A1d171232845a493140ce51D2" + }, + { + "type": "address", + "value": "0xF1727bfdfDcc8a82540EbccaA144c86718A880A2" + }, + { + "type": "address", + "value": "0xBfdC339B0742F8511c4dB446c97f92c8a9E98182" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x3E4f1555dAA7229EAA91dB6b90e0A33020C477d0" + }, + { + "type": "address", + "value": "0x5AC14b9e81d05dbfc95A0f44810a1fDAAcd1CbD2" + }, + { + "type": "address", + "value": "0x87BE9f322A83ca6cC2a65Fd4cFC1A80b83597fcc" + }, + { + "type": "address", + "value": "0x8CEF3B7698f19A691C380748fE8f0b4E22E760BB" + } + ] + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀 é é 🚀 oo🚀ooéM oéMMooo éé🚀oé" + }, + { + "type": "string", + "value": "Moo é🚀éMéMo🚀éo éMMMoo🚀 🚀éooooM" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oo🚀 oé🚀 ooM🚀o oo🚀 🚀MéMé🚀éo" + }, + { + "type": "number", + "value": "-8864381719565654955396350516378" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooo" + }, + { + "type": "string", + "value": "Moo é🚀M🚀éMM🚀o" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "6204066" + }, + { + "type": "number", + "value": "15693755" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 éé🚀🚀 Mo" + }, + { + "type": "string", + "value": "Moo é🚀oé" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "9668851" + }, + { + "type": "number", + "value": "6990993" + } + ] + } + ] + } + ] + }, + { + "type": "number", + "value": "981728239224" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610d71806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610adc565b60405180910390f35b610056610849565b61005e610849565b610066610884565b60408051808201825260148152729adede418753e13f3500de409a409a9be13f3560671b60208083019190915290835266c9f82f0888af0490830152697c16fc97f5f3f9f554d4908201526b0dc88db68389333074ac3d6a1960608201526100cc6108d0565b73be2f53b85e8604a1332c7ff1046f82e944f7bd7281526100eb61090c565b6100f3610939565b6100fb610966565b730e3f8485cfd217da380cf0b27617c322e07e4f31815273136bf83b5bbb291f3e475955e85c1fbf219ede5660208201527313b6afe3859c6975b45f8836a9b8acc2eb77f1ff604082015273314012405f3ba51df8b13abb2283b17626d671716060820152815261016a610966565b739eb9d7f18e42130ce3b84c9fe7237305baaf4440815273bd9eae1ccbcbd011c7a6fcf9173fa39a09f02a7460208083019190915273443264cfa7bcdca5d0dd9b3a3a2171df37696955604083015273c272cbe93e268c16b0a7adf7c378445f00334bba60608301528201526101de610966565b737630e4c0fbd21cfee3a06353845447e79f289c53815273ffe1424749978070d2ce4040b71228fc5efacbd7602082015273bd39c43bc2a88e9966b45e03f0794a42938b5a0360408083019190915273881ea6814af3d64c694d7ca7fa111de202d1c07960608301528201528152610254610939565b61025c610966565b73e41ae8553bcbe1cbf53dd1138a0a454577948039815273a898a15ae97686f1ab1228d6fa20bcb78dad0608602082015273e1432de1870ee93088575fea949057a040002d4d6040820152730dbeb6a56ef01626fb45fc0b4f547ee712ede852606082015281526102cb610966565b736f0e0982217302044df71c99ba9aa8bfadf14db18152730f87b7da3457b427c3f7d364aa31d984524c84c6602080830191909152736eaa244e9ca00d7ae7241f0e672ba306d9226e336040830152735b8beead6a378759d71c3d10112fb288cce97909606083015282015261033f610966565b73e7363aa6aafab78bad91fc5ac1457497d8e4870c8152734241465383392d07c5fd3cda92183c61e088cbe160208083019190915273566d0bf07b5524dc161ad2938bcea93966cb1290604080840191909152731b708f31abd8d77c24079ce01921d03f55eec86560608401528301919091528201526103bd610939565b6103c5610966565b73e99af37f27979942b260d519fd11bbcf0ce3994c8152738bb3645412b4112797149693d6ed0613402d085a60208201527362bfaa086a482a74d54493f4c64b28712c08b3d06040820152731dbf7ec44cc917e1356adb3f8c9f590f7c892b5360608201528152610434610966565b73b07a63e9da1855e6281f9db2ba9feb50e59c5135815273c9a53f7f553db52bbb3039ae78ce05d7a3615ec9602080830191909152734c52e99beed045ebba15e2f7b49d0fbdeee057666040830152736c82f29cf31e675ddd3ac8b68122f60e2fe0655b60608301528201526104a8610966565b73fe17f2da202ac964ac1b9a7b3aa8c8a72fff4b478152738d05a9ac597cb603704b9fd3cc969eabaab326d5602082015273c6044a150704bd932259750974f52334f6e62ec860408083019190915273f17f1120b2b3bb02524edd1d7e82c634138d98de606083015282810191909152820152610523610939565b61052b610966565b737f23182d1d596a48247bf624330c38a4e5a28f76815273263ed001abab7a765366d4d4ba5d6b5967f7f78a6020820152732414b362d8106df54463778f8ea38e0e67905fae6040820152730cdf542157af0ef2ac48c638eb11693ddc89a0496060820152815261059a610966565b7389d4bc257e8972d5041f3d17502227995e8829a18152739faee31c2a44812a1d171232845a493140ce51d260208083019190915273f1727bfdfdcc8a82540ebccaa144c86718a880a2604083015273bfdc339b0742f8511c4db446c97f92c8a9e98182606083015282015261060e610966565b733e4f1555daa7229eaa91db6b90e0a33020c477d08152735ac14b9e81d05dbfc95a0f44810a1fdaacd1cbd26020808301919091527387be9f322a83ca6cc2a65fd4cfc1a80b83597fcc604080840191909152738cef3b7698f19a691c380748fe8f0b4e22e760bb60608085019190915284820193909352848301939093528481019390935260018483015281519081019091526036808252600092610c9b90830139606080840191909152604080519182019052603080825260009250610d0c60208301396080808401919091528301919091525081526040805160608101909152603b80825260009190610cd160208301396020830152506c6fe25cb360b198623ccf469c99196040820152610724610984565b61072c6109b1565b604080518082018252600d81526c4d6f6f20c3a9f09f9a806f6f6f60981b6020808301919091529083528151808301909252601882527f4d6f6f20c3a9f09f9a804df09f9a80c3a94d4df09f9a806f0000000000000000828201528201526107926109ce565b625eaaa2815262ef77bb6020820152604082015281526107b06109b1565b604080518082018252601a81527f4d6f6f20c3a9f09f9a8020c3a9c3a9f09f9a80f09f9a80204d6f0000000000006020808301919091529083528151808301909252600d82526c4d6f6f20c3a9f09f9a806fc3a960981b828201528201526108166109ce565b629388f38152626aac916020808301919091526040830191909152820152606082015264e493901e786080820152919050565b6040518060a0016040528061085c610884565b81526060602082018190526000604083015201610877610984565b8152600060209091015290565b6040518060a0016040528060608152602001600066ffffffffffffff168152602001600069ffffffffffffffffffff1681526020016000600b0b81526020016108cb6108d0565b905290565b6040518060a0016040528060006001600160a01b031681526020016108f361090c565b8152600060208201526060604082018190529081015290565b60405180608001604052806004905b610923610939565b81526020019060019003908161091b5790505090565b60405180606001604052806003905b610950610966565b8152602001906001900390816109485790505090565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806002905b61099b6109b1565b8152602001906001900390816109935790505090565b604051806060016040528060608152602001606081526020016108cb5b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b81811015610a12576020818501810151868301820152016109f6565b81811115610a24576000602083870101525b50601f01601f19169290920160200192915050565b6000826040808201846000805b6002808210610a555750610acf565b8685038a52835160808151818852610a6f828901826109ec565b915050602080830151888303828a0152610a8983826109ec565b938a015193925050878901865b85811015610ab757845162ffffff1682529382019390820190600101610a96565b50509b8c019b90965094909401935050600101610a46565b5091979650505050505050565b60006020808352835160a082850152805160a060c0860152610b026101608601826109ec565b8284015166ffffffffffffff1660e0870152604083015169ffffffffffffffffffff166101008701526060830151600b0b61012087015260809283015186820360bf190161014088015280516001600160a01b0390811683528186015191949293506106809186850160005b6004808210610b7d5750610bdb565b83518360005b6003811015610bc35782518260005b86811015610bb05782518b168252918f0191908f0190600101610b92565b505050918c019190890190600101610b83565b50505092890192506101809190910190600101610b6e565b505050506040840151151561062084015260608401516106408401829052610c05828501826109ec565b915050818401519350828103610660840152610c2181856109ec565b935050838701519350601f19915081868403016040870152610c4383856109ec565b935060408701519250610c5b6060870184600c0b9052565b60608701519250818685030181870152610c758484610a39565b93508087015192505050610c9260a085018264ffffffffff169052565b50939250505056fe4d6f6f20c3a9f09f9a8020c3a920c3a920f09f9a80206f6ff09f9a806f6fc3a94d206fc3a94d4d6f6f6f20c3a9c3a9f09f9a806fc3a94d6f6f20c3a9f09f9a806f6ff09f9a8020206fc3a9f09f9a80206f6f4df09f9a806f206f6ff09f9a8020f09f9a804dc3a94dc3a9f09f9a80c3a96f4d6f6f20c3a9f09f9a80c3a94dc3a94d6ff09f9a80c3a96f20c3a94d4d4d6f6ff09f9a8020f09f9a80c3a96f6f6f6f4da2646970667358221220247e341e52639ddfec6f9f56615b4e77b36acc553b715e8860b4f92327bb870064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a327d8d8 {\n address s_0;\n address[4][3][4] s_1;\n bool s_2;\n string s_3;\n string s_4;\n }\n\n struct S_0828a50a {\n string s_0;\n uint56 s_1;\n uint80 s_2;\n int96 s_3;\n S_a327d8d8 s_4;\n }\n\n struct S_ec0a35d9 {\n string s_0;\n string s_1;\n uint24[2] s_2;\n }\n\n struct S_98c25c06 {\n S_0828a50a s_0;\n string s_1;\n int104 s_2;\n S_ec0a35d9[2] s_3;\n uint40 s_4;\n }\n\n function test () public pure returns (S_98c25c06 memory) {\n S_98c25c06 memory r;\n {\n S_0828a50a memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀o M MM🚀\";\n r_0.s_0 = r_0_0;\n }\n {\n uint56 r_0_1 = 56849351209168644;\n r_0.s_1 = r_0_1;\n }\n {\n uint80 r_0_2 = 585997473532304877245652;\n r_0.s_2 = r_0_2;\n }\n {\n int96 r_0_3 = -4265759512060080937463725419;\n r_0.s_3 = r_0_3;\n }\n {\n S_a327d8d8 memory r_0_4;\n {\n address r_0_4_0 = 0xbE2f53B85E8604A1332C7Ff1046f82e944f7bD72;\n r_0_4.s_0 = r_0_4_0;\n }\n {\n address[4][3][4] memory r_0_4_1;\n {\n address[4][3] memory r_0_4_1_0;\n {\n address[4] memory r_0_4_1_0_0;\n {\n address r_0_4_1_0_0_0 = 0x0E3F8485CFd217dA380cf0B27617C322E07e4f31;\n r_0_4_1_0_0[0] = r_0_4_1_0_0_0;\n }\n {\n address r_0_4_1_0_0_1 = 0x136bF83b5bbb291f3E475955e85C1FBF219edE56;\n r_0_4_1_0_0[1] = r_0_4_1_0_0_1;\n }\n {\n address r_0_4_1_0_0_2 = 0x13B6aFE3859C6975b45f8836a9b8aCc2EB77f1FF;\n r_0_4_1_0_0[2] = r_0_4_1_0_0_2;\n }\n {\n address r_0_4_1_0_0_3 = 0x314012405F3ba51Df8b13AbB2283b17626D67171;\n r_0_4_1_0_0[3] = r_0_4_1_0_0_3;\n }\n r_0_4_1_0[0] = r_0_4_1_0_0;\n }\n {\n address[4] memory r_0_4_1_0_1;\n {\n address r_0_4_1_0_1_0 = 0x9eb9d7f18E42130CE3b84c9FE7237305BAAf4440;\n r_0_4_1_0_1[0] = r_0_4_1_0_1_0;\n }\n {\n address r_0_4_1_0_1_1 = 0xBD9EAe1CCBcbD011c7A6fCf9173FA39a09f02A74;\n r_0_4_1_0_1[1] = r_0_4_1_0_1_1;\n }\n {\n address r_0_4_1_0_1_2 = 0x443264Cfa7BCDCA5d0dD9b3A3A2171DF37696955;\n r_0_4_1_0_1[2] = r_0_4_1_0_1_2;\n }\n {\n address r_0_4_1_0_1_3 = 0xC272cBe93E268C16b0a7ADF7C378445f00334bBA;\n r_0_4_1_0_1[3] = r_0_4_1_0_1_3;\n }\n r_0_4_1_0[1] = r_0_4_1_0_1;\n }\n {\n address[4] memory r_0_4_1_0_2;\n {\n address r_0_4_1_0_2_0 = 0x7630E4C0FbD21cFEE3a06353845447E79F289C53;\n r_0_4_1_0_2[0] = r_0_4_1_0_2_0;\n }\n {\n address r_0_4_1_0_2_1 = 0xFfe1424749978070D2Ce4040B71228fC5efacbD7;\n r_0_4_1_0_2[1] = r_0_4_1_0_2_1;\n }\n {\n address r_0_4_1_0_2_2 = 0xBd39C43bc2A88E9966b45e03F0794A42938b5A03;\n r_0_4_1_0_2[2] = r_0_4_1_0_2_2;\n }\n {\n address r_0_4_1_0_2_3 = 0x881eA6814Af3D64C694d7cA7Fa111De202d1C079;\n r_0_4_1_0_2[3] = r_0_4_1_0_2_3;\n }\n r_0_4_1_0[2] = r_0_4_1_0_2;\n }\n r_0_4_1[0] = r_0_4_1_0;\n }\n {\n address[4][3] memory r_0_4_1_1;\n {\n address[4] memory r_0_4_1_1_0;\n {\n address r_0_4_1_1_0_0 = 0xE41ae8553bCbe1CbF53Dd1138A0a454577948039;\n r_0_4_1_1_0[0] = r_0_4_1_1_0_0;\n }\n {\n address r_0_4_1_1_0_1 = 0xA898A15ae97686f1AB1228D6fa20bcb78DAd0608;\n r_0_4_1_1_0[1] = r_0_4_1_1_0_1;\n }\n {\n address r_0_4_1_1_0_2 = 0xE1432De1870EE93088575fEA949057a040002d4D;\n r_0_4_1_1_0[2] = r_0_4_1_1_0_2;\n }\n {\n address r_0_4_1_1_0_3 = 0x0dBeB6A56EF01626fB45fC0B4f547eE712Ede852;\n r_0_4_1_1_0[3] = r_0_4_1_1_0_3;\n }\n r_0_4_1_1[0] = r_0_4_1_1_0;\n }\n {\n address[4] memory r_0_4_1_1_1;\n {\n address r_0_4_1_1_1_0 = 0x6f0e0982217302044DF71c99Ba9aa8BFADf14db1;\n r_0_4_1_1_1[0] = r_0_4_1_1_1_0;\n }\n {\n address r_0_4_1_1_1_1 = 0x0F87b7da3457B427c3F7d364Aa31D984524C84C6;\n r_0_4_1_1_1[1] = r_0_4_1_1_1_1;\n }\n {\n address r_0_4_1_1_1_2 = 0x6eaA244E9cA00d7AE7241f0e672ba306D9226e33;\n r_0_4_1_1_1[2] = r_0_4_1_1_1_2;\n }\n {\n address r_0_4_1_1_1_3 = 0x5B8Beead6A378759D71C3d10112Fb288cCE97909;\n r_0_4_1_1_1[3] = r_0_4_1_1_1_3;\n }\n r_0_4_1_1[1] = r_0_4_1_1_1;\n }\n {\n address[4] memory r_0_4_1_1_2;\n {\n address r_0_4_1_1_2_0 = 0xe7363AA6AafAb78BaD91fc5AC1457497D8E4870c;\n r_0_4_1_1_2[0] = r_0_4_1_1_2_0;\n }\n {\n address r_0_4_1_1_2_1 = 0x4241465383392D07C5FD3Cda92183C61e088CBe1;\n r_0_4_1_1_2[1] = r_0_4_1_1_2_1;\n }\n {\n address r_0_4_1_1_2_2 = 0x566D0Bf07B5524Dc161ad2938BCeA93966CB1290;\n r_0_4_1_1_2[2] = r_0_4_1_1_2_2;\n }\n {\n address r_0_4_1_1_2_3 = 0x1B708f31abD8d77c24079CE01921D03f55eeC865;\n r_0_4_1_1_2[3] = r_0_4_1_1_2_3;\n }\n r_0_4_1_1[2] = r_0_4_1_1_2;\n }\n r_0_4_1[1] = r_0_4_1_1;\n }\n {\n address[4][3] memory r_0_4_1_2;\n {\n address[4] memory r_0_4_1_2_0;\n {\n address r_0_4_1_2_0_0 = 0xE99af37f27979942B260d519Fd11bBcf0ce3994C;\n r_0_4_1_2_0[0] = r_0_4_1_2_0_0;\n }\n {\n address r_0_4_1_2_0_1 = 0x8BB3645412b4112797149693D6Ed0613402D085A;\n r_0_4_1_2_0[1] = r_0_4_1_2_0_1;\n }\n {\n address r_0_4_1_2_0_2 = 0x62BFAa086a482a74d54493F4C64b28712c08b3D0;\n r_0_4_1_2_0[2] = r_0_4_1_2_0_2;\n }\n {\n address r_0_4_1_2_0_3 = 0x1Dbf7EC44CC917E1356ADb3f8C9f590f7C892b53;\n r_0_4_1_2_0[3] = r_0_4_1_2_0_3;\n }\n r_0_4_1_2[0] = r_0_4_1_2_0;\n }\n {\n address[4] memory r_0_4_1_2_1;\n {\n address r_0_4_1_2_1_0 = 0xb07a63e9da1855E6281f9DB2BA9Feb50E59c5135;\n r_0_4_1_2_1[0] = r_0_4_1_2_1_0;\n }\n {\n address r_0_4_1_2_1_1 = 0xC9A53f7F553dB52BBb3039AE78ce05d7a3615Ec9;\n r_0_4_1_2_1[1] = r_0_4_1_2_1_1;\n }\n {\n address r_0_4_1_2_1_2 = 0x4c52E99beed045eBbA15E2F7B49d0FbDEEE05766;\n r_0_4_1_2_1[2] = r_0_4_1_2_1_2;\n }\n {\n address r_0_4_1_2_1_3 = 0x6c82f29cF31E675ddD3aC8b68122f60e2fE0655B;\n r_0_4_1_2_1[3] = r_0_4_1_2_1_3;\n }\n r_0_4_1_2[1] = r_0_4_1_2_1;\n }\n {\n address[4] memory r_0_4_1_2_2;\n {\n address r_0_4_1_2_2_0 = 0xFe17f2Da202ac964ac1B9a7B3AA8c8a72FFF4b47;\n r_0_4_1_2_2[0] = r_0_4_1_2_2_0;\n }\n {\n address r_0_4_1_2_2_1 = 0x8d05A9ac597CB603704B9FD3cC969EAbAab326d5;\n r_0_4_1_2_2[1] = r_0_4_1_2_2_1;\n }\n {\n address r_0_4_1_2_2_2 = 0xC6044A150704BD932259750974f52334f6e62eC8;\n r_0_4_1_2_2[2] = r_0_4_1_2_2_2;\n }\n {\n address r_0_4_1_2_2_3 = 0xf17f1120B2b3Bb02524eDD1D7e82C634138D98DE;\n r_0_4_1_2_2[3] = r_0_4_1_2_2_3;\n }\n r_0_4_1_2[2] = r_0_4_1_2_2;\n }\n r_0_4_1[2] = r_0_4_1_2;\n }\n {\n address[4][3] memory r_0_4_1_3;\n {\n address[4] memory r_0_4_1_3_0;\n {\n address r_0_4_1_3_0_0 = 0x7f23182d1d596A48247bF624330C38a4e5A28F76;\n r_0_4_1_3_0[0] = r_0_4_1_3_0_0;\n }\n {\n address r_0_4_1_3_0_1 = 0x263eD001abAB7a765366D4d4ba5D6B5967f7f78A;\n r_0_4_1_3_0[1] = r_0_4_1_3_0_1;\n }\n {\n address r_0_4_1_3_0_2 = 0x2414b362d8106DF54463778F8Ea38e0E67905FAE;\n r_0_4_1_3_0[2] = r_0_4_1_3_0_2;\n }\n {\n address r_0_4_1_3_0_3 = 0x0cDf542157af0Ef2AC48C638Eb11693DDc89A049;\n r_0_4_1_3_0[3] = r_0_4_1_3_0_3;\n }\n r_0_4_1_3[0] = r_0_4_1_3_0;\n }\n {\n address[4] memory r_0_4_1_3_1;\n {\n address r_0_4_1_3_1_0 = 0x89D4bc257E8972D5041F3d17502227995e8829a1;\n r_0_4_1_3_1[0] = r_0_4_1_3_1_0;\n }\n {\n address r_0_4_1_3_1_1 = 0x9Faee31C2a44812A1d171232845a493140ce51D2;\n r_0_4_1_3_1[1] = r_0_4_1_3_1_1;\n }\n {\n address r_0_4_1_3_1_2 = 0xF1727bfdfDcc8a82540EbccaA144c86718A880A2;\n r_0_4_1_3_1[2] = r_0_4_1_3_1_2;\n }\n {\n address r_0_4_1_3_1_3 = 0xBfdC339B0742F8511c4dB446c97f92c8a9E98182;\n r_0_4_1_3_1[3] = r_0_4_1_3_1_3;\n }\n r_0_4_1_3[1] = r_0_4_1_3_1;\n }\n {\n address[4] memory r_0_4_1_3_2;\n {\n address r_0_4_1_3_2_0 = 0x3E4f1555dAA7229EAA91dB6b90e0A33020C477d0;\n r_0_4_1_3_2[0] = r_0_4_1_3_2_0;\n }\n {\n address r_0_4_1_3_2_1 = 0x5AC14b9e81d05dbfc95A0f44810a1fDAAcd1CbD2;\n r_0_4_1_3_2[1] = r_0_4_1_3_2_1;\n }\n {\n address r_0_4_1_3_2_2 = 0x87BE9f322A83ca6cC2a65Fd4cFC1A80b83597fcc;\n r_0_4_1_3_2[2] = r_0_4_1_3_2_2;\n }\n {\n address r_0_4_1_3_2_3 = 0x8CEF3B7698f19A691C380748fE8f0b4E22E760BB;\n r_0_4_1_3_2[3] = r_0_4_1_3_2_3;\n }\n r_0_4_1_3[2] = r_0_4_1_3_2;\n }\n r_0_4_1[3] = r_0_4_1_3;\n }\n r_0_4.s_1 = r_0_4_1;\n }\n {\n bool r_0_4_2 = true;\n r_0_4.s_2 = r_0_4_2;\n }\n {\n string memory r_0_4_3 = unicode\"Moo é🚀 é é 🚀 oo🚀ooéM oéMMooo éé🚀oé\";\n r_0_4.s_3 = r_0_4_3;\n }\n {\n string memory r_0_4_4 = unicode\"Moo é🚀éMéMo🚀éo éMMMoo🚀 🚀éooooM\";\n r_0_4.s_4 = r_0_4_4;\n }\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀oo🚀 oé🚀 ooM🚀o oo🚀 🚀MéMé🚀éo\";\n r.s_1 = r_1;\n }\n {\n int104 r_2 = -8864381719565654955396350516378;\n r.s_2 = r_2;\n }\n {\n S_ec0a35d9[2] memory r_3;\n {\n S_ec0a35d9 memory r_3_0;\n {\n string memory r_3_0_0 = unicode\"Moo é🚀ooo\";\n r_3_0.s_0 = r_3_0_0;\n }\n {\n string memory r_3_0_1 = unicode\"Moo é🚀M🚀éMM🚀o\";\n r_3_0.s_1 = r_3_0_1;\n }\n {\n uint24[2] memory r_3_0_2;\n {\n uint24 r_3_0_2_0 = 6204066;\n r_3_0_2[0] = r_3_0_2_0;\n }\n {\n uint24 r_3_0_2_1 = 15693755;\n r_3_0_2[1] = r_3_0_2_1;\n }\n r_3_0.s_2 = r_3_0_2;\n }\n r_3[0] = r_3_0;\n }\n {\n S_ec0a35d9 memory r_3_1;\n {\n string memory r_3_1_0 = unicode\"Moo é🚀 éé🚀🚀 Mo\";\n r_3_1.s_0 = r_3_1_0;\n }\n {\n string memory r_3_1_1 = unicode\"Moo é🚀oé\";\n r_3_1.s_1 = r_3_1_1;\n }\n {\n uint24[2] memory r_3_1_2;\n {\n uint24 r_3_1_2_0 = 9668851;\n r_3_1_2[0] = r_3_1_2_0;\n }\n {\n uint24 r_3_1_2_1 = 6990993;\n r_3_1_2[1] = r_3_1_2_1;\n }\n r_3_1.s_2 = r_3_1_2;\n }\n r_3[1] = r_3_1;\n }\n r.s_3 = r_3;\n }\n {\n uint40 r_4 = 981728239224;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000008c0ffffffffffffffffffffffffffffffffffffff901da34c9f4e679dc330b963660000000000000000000000000000000000000000000000000000000000000920000000000000000000000000000000000000000000000000000000e493901e7800000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000c9f82f0888af04000000000000000000000000000000000000000000007c16fc97f5f3f9f554d4fffffffffffffffffffffffffffffffffffffffff23772497c76cccf8b53c29500000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a806f204d204d4df09f9a80000000000000000000000000000000000000000000000000be2f53b85e8604a1332c7ff1046f82e944f7bd720000000000000000000000000e3f8485cfd217da380cf0b27617c322e07e4f31000000000000000000000000136bf83b5bbb291f3e475955e85c1fbf219ede5600000000000000000000000013b6afe3859c6975b45f8836a9b8acc2eb77f1ff000000000000000000000000314012405f3ba51df8b13abb2283b17626d671710000000000000000000000009eb9d7f18e42130ce3b84c9fe7237305baaf4440000000000000000000000000bd9eae1ccbcbd011c7a6fcf9173fa39a09f02a74000000000000000000000000443264cfa7bcdca5d0dd9b3a3a2171df37696955000000000000000000000000c272cbe93e268c16b0a7adf7c378445f00334bba0000000000000000000000007630e4c0fbd21cfee3a06353845447e79f289c53000000000000000000000000ffe1424749978070d2ce4040b71228fc5efacbd7000000000000000000000000bd39c43bc2a88e9966b45e03f0794a42938b5a03000000000000000000000000881ea6814af3d64c694d7ca7fa111de202d1c079000000000000000000000000e41ae8553bcbe1cbf53dd1138a0a454577948039000000000000000000000000a898a15ae97686f1ab1228d6fa20bcb78dad0608000000000000000000000000e1432de1870ee93088575fea949057a040002d4d0000000000000000000000000dbeb6a56ef01626fb45fc0b4f547ee712ede8520000000000000000000000006f0e0982217302044df71c99ba9aa8bfadf14db10000000000000000000000000f87b7da3457b427c3f7d364aa31d984524c84c60000000000000000000000006eaa244e9ca00d7ae7241f0e672ba306d9226e330000000000000000000000005b8beead6a378759d71c3d10112fb288cce97909000000000000000000000000e7363aa6aafab78bad91fc5ac1457497d8e4870c0000000000000000000000004241465383392d07c5fd3cda92183c61e088cbe1000000000000000000000000566d0bf07b5524dc161ad2938bcea93966cb12900000000000000000000000001b708f31abd8d77c24079ce01921d03f55eec865000000000000000000000000e99af37f27979942b260d519fd11bbcf0ce3994c0000000000000000000000008bb3645412b4112797149693d6ed0613402d085a00000000000000000000000062bfaa086a482a74d54493f4c64b28712c08b3d00000000000000000000000001dbf7ec44cc917e1356adb3f8c9f590f7c892b53000000000000000000000000b07a63e9da1855e6281f9db2ba9feb50e59c5135000000000000000000000000c9a53f7f553db52bbb3039ae78ce05d7a3615ec90000000000000000000000004c52e99beed045ebba15e2f7b49d0fbdeee057660000000000000000000000006c82f29cf31e675ddd3ac8b68122f60e2fe0655b000000000000000000000000fe17f2da202ac964ac1b9a7b3aa8c8a72fff4b470000000000000000000000008d05a9ac597cb603704b9fd3cc969eabaab326d5000000000000000000000000c6044a150704bd932259750974f52334f6e62ec8000000000000000000000000f17f1120b2b3bb02524edd1d7e82c634138d98de0000000000000000000000007f23182d1d596a48247bf624330c38a4e5a28f76000000000000000000000000263ed001abab7a765366d4d4ba5d6b5967f7f78a0000000000000000000000002414b362d8106df54463778f8ea38e0e67905fae0000000000000000000000000cdf542157af0ef2ac48c638eb11693ddc89a04900000000000000000000000089d4bc257e8972d5041f3d17502227995e8829a10000000000000000000000009faee31c2a44812a1d171232845a493140ce51d2000000000000000000000000f1727bfdfdcc8a82540ebccaa144c86718a880a2000000000000000000000000bfdc339b0742f8511c4db446c97f92c8a9e981820000000000000000000000003e4f1555daa7229eaa91db6b90e0a33020c477d00000000000000000000000005ac14b9e81d05dbfc95a0f44810a1fdaacd1cbd200000000000000000000000087be9f322a83ca6cc2a65fd4cfc1a80b83597fcc0000000000000000000000008cef3b7698f19a691c380748fe8f0b4e22e760bb0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000006e000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a8020c3a920c3a920f09f9a80206f6ff09f9a806f6fc3a94d206fc3a94d4d6f6f6f20c3a9c3a9f09f9a806fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a80c3a94dc3a94d6ff09f9a80c3a96f20c3a94d4d4d6f6ff09f9a8020f09f9a80c3a96f6f6f6f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b4d6f6f20c3a9f09f9a806f6ff09f9a8020206fc3a9f09f9a80206f6f4df09f9a806f206f6ff09f9a8020f09f9a804dc3a94dc3a9f09f9a80c3a96f000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000005eaaa20000000000000000000000000000000000000000000000000000000000ef77bb000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a806f6f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a804df09f9a80c3a94d4df09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000009388f300000000000000000000000000000000000000000000000000000000006aac91000000000000000000000000000000000000000000000000000000000000001a4d6f6f20c3a9f09f9a8020c3a9c3a9f09f9a80f09f9a80204d6f000000000000000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a806fc3a900000000000000000000000000000000000000" + }, + { + "name": "random-(address,((bool,bytes2,string,string,bytes14),(address[1],string),(bool,bool,address,string,(string,address)),bytes31,int168[1][3]))[4]", + "type": "(address,((bool,bytes2,string,string,bytes14),(address[1],string),(bool,bool,address,string,(string,address)),bytes31,int168[1][3]))[4]", + "value": [ + [ + "0x0f075a4416d4D84C78F69fd35797D0C29184A37D", + [ + [ + true, + "0xe3c2", + "Moo é🚀o🚀oooé🚀 Moé🚀o 🚀🚀oM é🚀o oo🚀o 🚀🚀o🚀oMoo", + "Moo é🚀éo 🚀o ", + "0x2c5c5553b4790302975a37e5ad8f" + ], + [ + ["0xb5091997ffBDD824e5c8270EE06a043B3001b977"], + "Moo é🚀🚀 oo🚀oééM🚀oMoééooM o🚀oMM Mé éooooooé " + ], + [ + true, + true, + "0x002259c887cBbd081d1b9877B5FF4F3f9b26e753", + "Moo é🚀oMoéééMoooé 🚀MMMé🚀 oo oo éo🚀éooé 🚀M🚀oé🚀M🚀🚀ooé", + ["Moo é🚀", "0xBDA275D83Ad72ed95184BbB3a2E1Acfa92f18281"] + ], + "0x062e62918be6120c41df980b3cc0aa6e380b6c1a8374eef2745c696ce41207", + [ + ["-132855900570452566957322838209045807642919493469809"], + ["-136174730158470224504270391184933229790858613389318"], + ["109975475066293541020901115424284490066385872913007"] + ] + ] + ], + [ + "0xf74200CFC6AcF583A4651f43Af3055E40f4EFEaD", + [ + [ + true, + "0x58fc", + "Moo é🚀", + "Moo é🚀oo oo🚀MMM🚀MMo MéMMM o🚀M M🚀oMoMo MMéé🚀o", + "0xf78b9b1db18b265da71216098f8b" + ], + [ + ["0xe5838496090a6D67b04386413b4f5c6219a00fB1"], + "Moo é🚀oM🚀oMM🚀 éoo🚀🚀oo🚀🚀oé éoM M🚀éM🚀🚀o MoMoéM🚀é" + ], + [ + false, + false, + "0x3242B41Ee6cCe9983d90d8e0BB2eb1Ae6A1492aD", + "Moo é🚀🚀é oéoMoéé🚀o 🚀M 🚀ooo🚀oo 🚀oéMoM ooooMMoMoo 🚀M ", + [ + "Moo é🚀🚀 🚀🚀 🚀 o 🚀MMMéééé 🚀ooooééoéooé🚀oMoooo oo", + "0xD30E60F2B086b9eEFD667c9Ba76b5415DA3E9FF7" + ] + ], + "0xcfdedf4811f80388673329ba4f897609a84246f7857ce578243a55b1252f4b", + [ + ["10281119352035492206931127914602624747929407159960"], + ["-70340482105650579936370982723225901738369260261161"], + ["114405844888924470006150992202480185249539601628410"] + ] + ] + ], + [ + "0x5467A3a6b826F0C388728964deB436ff6D14D90b", + [ + [ + true, + "0xb3fc", + "Moo é🚀 éo M 🚀 oéo🚀 oéo o o M🚀ooMoé🚀o ", + "Moo é🚀 Méé MMMéMo oo é oéo M 🚀oMoéo", + "0x038dce1ee3d62b3fc0b9f92e5227" + ], + [ + ["0x42d9e5b2BDD13C260c4CD60AF3DE1c0b7F861516"], + "Moo é🚀o 🚀éo é🚀🚀🚀 é oé Moéoé🚀 o" + ], + [ + true, + false, + "0x96b56676F61870Aef4d25694C5e15dECf52f735e", + "Moo é🚀 🚀 é", + [ + "Moo é🚀🚀M oéoé🚀🚀é 🚀oo🚀M🚀🚀MMo🚀o🚀é🚀oMéMoo éo🚀ééMo🚀o o ooMMo🚀 é o", + "0x938F9a9fa9f20E8391488be3e0f78F2D4CCAF751" + ] + ], + "0x498c2b7b811995f683644dff78caa8bee50abdaf615cc1323675799985996f", + [ + ["-157778683258692730386398385145916088106356432515585"], + ["54232751861361794542609314957671101038500089270044"], + ["72319662811015540544807272466622102793294740544085"] + ] + ] + ], + [ + "0x0d091C9593C567355201484B0A4761D613d5A72b", + [ + [ + false, + "0xcc1f", + "Moo é🚀", + "Moo é🚀🚀oé o🚀🚀oéo🚀🚀oMéoo🚀🚀é🚀o o éoooééM oééMooMéoéM", + "0xb4ca524f71fd3d3481079179798c" + ], + [ + ["0x1C49449270a67372779E95A3c07Cd1b8797ADd0A"], + "Moo é🚀🚀 oé ooéM MMé🚀MMoo MMééo🚀M 🚀oMMMoé🚀Moo🚀M" + ], + [ + true, + false, + "0x74FDa08C81136F929B95B73C9cdD82cAA0e127F7", + "Moo é🚀 Moéoéé🚀 M Mo🚀oM🚀éM 🚀🚀oéo", + ["Moo é🚀é oooéo", "0x8f830e90Da904Fd4cA01dFc72435c4fc0476e392"] + ], + "0x89eeebdf159eb75289aff1969d6762fffe1b5f0f319f922209668938e85282", + [ + ["-186847071082254048487298153605925822047099540853151"], + ["141865574129162983409560752579659683272264030575773"], + ["-47515847437253924176768556922944829601606456314080"] + ] + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x0f075a4416d4D84C78F69fd35797D0C29184A37D" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xe3c2" + }, + { + "type": "string", + "value": "Moo é🚀o🚀oooé🚀 Moé🚀o 🚀🚀oM é🚀o oo🚀o 🚀🚀o🚀oMoo" + }, + { + "type": "string", + "value": "Moo é🚀éo 🚀o " + }, + { + "type": "hexstring", + "value": "0x2c5c5553b4790302975a37e5ad8f" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xb5091997ffBDD824e5c8270EE06a043B3001b977" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀 oo🚀oééM🚀oMoééooM o🚀oMM Mé éooooooé " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x002259c887cBbd081d1b9877B5FF4F3f9b26e753" + }, + { + "type": "string", + "value": "Moo é🚀oMoéééMoooé 🚀MMMé🚀 oo oo éo🚀éooé 🚀M🚀oé🚀M🚀🚀ooé" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "address", + "value": "0xBDA275D83Ad72ed95184BbB3a2E1Acfa92f18281" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x062e62918be6120c41df980b3cc0aa6e380b6c1a8374eef2745c696ce41207" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-132855900570452566957322838209045807642919493469809" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-136174730158470224504270391184933229790858613389318" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "109975475066293541020901115424284490066385872913007" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xf74200CFC6AcF583A4651f43Af3055E40f4EFEaD" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x58fc" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀oo oo🚀MMM🚀MMo MéMMM o🚀M M🚀oMoMo MMéé🚀o" + }, + { + "type": "hexstring", + "value": "0xf78b9b1db18b265da71216098f8b" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xe5838496090a6D67b04386413b4f5c6219a00fB1" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oM🚀oMM🚀 éoo🚀🚀oo🚀🚀oé éoM M🚀éM🚀🚀o MoMoéM🚀é" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x3242B41Ee6cCe9983d90d8e0BB2eb1Ae6A1492aD" + }, + { + "type": "string", + "value": "Moo é🚀🚀é oéoMoéé🚀o 🚀M 🚀ooo🚀oo 🚀oéMoM ooooMMoMoo 🚀M " + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀 🚀🚀 🚀 o 🚀MMMéééé 🚀ooooééoéooé🚀oMoooo oo" + }, + { + "type": "address", + "value": "0xD30E60F2B086b9eEFD667c9Ba76b5415DA3E9FF7" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xcfdedf4811f80388673329ba4f897609a84246f7857ce578243a55b1252f4b" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "10281119352035492206931127914602624747929407159960" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-70340482105650579936370982723225901738369260261161" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "114405844888924470006150992202480185249539601628410" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5467A3a6b826F0C388728964deB436ff6D14D90b" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0xb3fc" + }, + { + "type": "string", + "value": "Moo é🚀 éo M 🚀 oéo🚀 oéo o o M🚀ooMoé🚀o " + }, + { + "type": "string", + "value": "Moo é🚀 Méé MMMéMo oo é oéo M 🚀oMoéo" + }, + { + "type": "hexstring", + "value": "0x038dce1ee3d62b3fc0b9f92e5227" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x42d9e5b2BDD13C260c4CD60AF3DE1c0b7F861516" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o 🚀éo é🚀🚀🚀 é oé Moéoé🚀 o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x96b56676F61870Aef4d25694C5e15dECf52f735e" + }, + { + "type": "string", + "value": "Moo é🚀 🚀 é" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀M oéoé🚀🚀é 🚀oo🚀M🚀🚀MMo🚀o🚀é🚀oMéMoo éo🚀ééMo🚀o o ooMMo🚀 é o" + }, + { + "type": "address", + "value": "0x938F9a9fa9f20E8391488be3e0f78F2D4CCAF751" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x498c2b7b811995f683644dff78caa8bee50abdaf615cc1323675799985996f" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-157778683258692730386398385145916088106356432515585" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "54232751861361794542609314957671101038500089270044" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "72319662811015540544807272466622102793294740544085" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x0d091C9593C567355201484B0A4761D613d5A72b" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0xcc1f" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀oé o🚀🚀oéo🚀🚀oMéoo🚀🚀é🚀o o éoooééM oééMooMéoéM" + }, + { + "type": "hexstring", + "value": "0xb4ca524f71fd3d3481079179798c" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x1C49449270a67372779E95A3c07Cd1b8797ADd0A" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀 oé ooéM MMé🚀MMoo MMééo🚀M 🚀oMMMoé🚀Moo🚀M" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x74FDa08C81136F929B95B73C9cdD82cAA0e127F7" + }, + { + "type": "string", + "value": "Moo é🚀 Moéoéé🚀 M Mo🚀oM🚀éM 🚀🚀oéo" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é oooéo" + }, + { + "type": "address", + "value": "0x8f830e90Da904Fd4cA01dFc72435c4fc0476e392" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x89eeebdf159eb75289aff1969d6762fffe1b5f0f319f922209668938e85282" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-186847071082254048487298153605925822047099540853151" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "141865574129162983409560752579659683272264030575773" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-47515847437253924176768556922944829601606456314080" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50611234806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610c9f565b60405180910390f35b6100566109c2565b61005e6109c2565b6100666109ef565b730f075a4416d4d84c78f69fd35797d0c29184a37d8152610085610a17565b61008d610a58565b600181526171e160f11b6020808301919091526040805160808101909152604f808252600092610e5a9083013960408084019190915280518082019091526014815273026b7b79061d4f84fcd4061d4b790784fcd4037960651b60208201526060830152506d2c5c5553b4790302975a37e5ad8f60901b60808201528152610113610a88565b61011b610aa8565b73b5091997ffbdd824e5c8270ee06a043b3001b977815281526040805160808101909152604280825260009190610f54602083013960208084019190915283019190915250610168610ac6565b6001808252602080830191909152722259c887cbbd081d1b9877b5ff4f3f9b26e7536040808401919091528051608081019091526059808252600092611164908301396060830152506101cc60408051808201909152606081526000602082015290565b604080518082018252600a8152689adede418753e13f3560b71b60208083019190915290835273bda275d83ad72ed95184bbb3a2e1acfa92f182819083015260808301919091528201527f062e62918be6120c41df980b3cc0aa6e380b6c1a8374eef2745c696ce41207006060820152610244610b01565b61024c610aa8565b745ae7589f4cefb0d52341fdf91320827b9a0cf88670198152815261026f610aa8565b745d2cae168913ecd71c537df3371b0bc4062dbc78051981526020820152610295610aa8565b744b3f8edbbd904043cd116b20a0551cb5a95540826f815260408201526080820152602082015281526102c66109ef565b73f74200cfc6acf583a4651f43af3055e40f4efead81526102e5610a17565b6102ed610a58565b6001815261163f60f21b602080830191909152604080518082018252600a8152689adede418753e13f3560b71b818401528184015280516080810190915260428082526000926111bd908301396060830152506df78b9b1db18b265da71216098f8b60901b60808201528152610361610a88565b610369610aa8565b73e5838496090a6d67b04386413b4f5c6219a00fb1815281526040805160808101909152605780825260009190610fe66020830139602080840191909152830191909152506103b6610ac6565b60008082526020808301829052733242b41ee6cce9983d90d8e0bb2eb1ae6a1492ad604080850191909152805160808101909152605280825290916110969083013960608301525061041960408051808201909152606081526000602082015290565b6000604051806080016040528060508152602001610f966050913982525073d30e60f2b086b9eefd667c9ba76b5415da3e9ff76020820152608082015260408201527fcfdedf4811f80388673329ba4f897609a84246f7857ce578243a55b1252f4b006060820152610489610b01565b610491610aa8565b740708dd56181e58fb42080937ed8436582515e17e98815281526104b3610aa8565b743021004e45456a02614e8c89cb3ba450c5aedd0f2819815260208201526104d9610aa8565b744e47978317f43791640c4d29d83fd6c08e60827cfa81526040820152608082015260208281019190915282015261050f6109ef565b735467a3a6b826f0c388728964deb436ff6d14d90b815261052e610a17565b610536610a58565b60018152612cff60f21b60208083019190915260408051606081019091526039808252600092610de89083013960408084019190915280516060810190915260308082526000925061113460208301396060830152506d038dce1ee3d62b3fc0b9f92e522760901b608082015281526105ad610a88565b6105b5610aa8565b7342d9e5b2bdd13c260c4cd60af3de1c0b7f861516815281526040805160608101909152603980825260009190610e21602083013960208084019190915283019190915250610602610ac6565b60018152600060208083018290527396b56676f61870aef4d25694c5e15decf52f735e6040808501919091528051808201825260138152724d6f6f20c3a9f09f9a802020f09f9a8020c3a960681b81840152606080860191909152815180830190925281529081019190915260006040518060a0016040528060738152602001610ea96073913982525073938f9a9fa9f20e8391488be3e0f78f2d4ccaf7516020820152608082015260408201527f498c2b7b811995f683644dff78caa8bee50abdaf615cc1323675799985996f0060608201526106de610b01565b6106e6610aa8565b746bf4e0d986ee4b1340630dae9d514dc232090d32001981528152610709610aa8565b74251b88b36671b8440a1f884c7f3b0308f2dfb18f1c8152602082015261072e610aa8565b74317badd6874db8e3fdeefdceb38033556f56855a5581526040808301919091526080830191909152602083019190915282015261076a6109ef565b730d091c9593c567355201484b0a4761d613d5a72b8152610789610a17565b610791610a58565b600080825261cc1f60f01b602080840191909152604080518082018252600a8152689adede418753e13f3560b71b81840152818501528051608081019091526059808252909161103d908301396060830152506d2d329493dc7f4f4d2041e45e5e6360921b60808201528152610805610a88565b61080d610aa8565b731c49449270a67372779e95a3c07cd1b8797add0a815281526040805160808101909152604c808252600091906110e860208301396020808401919091528301919091525061085a610ac6565b60018152600060208083018290527374fda08c81136f929b95b73c9cdd82caa0e127f760408085019190915280516060810190915260388082529091610f1c908301396060830152506108be60408051808201909152606081526000602082015290565b60408051808201825260138152724d6f6f20c3a9f09f9a80c3a9206f6f6fc3a96f60681b602080830191909152908352738f830e90da904fd4ca01dfc72435c4fc0476e3929083015260808301919091528201527f89eeebdf159eb75289aff1969d6762fffe1b5f0f319f922209668938e85282006060820152610940610b01565b610948610aa8565b747fd89070d0333865562ee5ddfbd3b0e1894a39d19e198152815261096b610aa8565b746111805b7c7a9700906180a74fd231140a20b75c9d81526020820152610990610aa8565b742082fc4a18906b578a9ab4335bfca7f2a6baec08df1981526040820152608082015260208201526060820152919050565b60405180608001604052806004905b6109d96109ef565b8152602001906001900390816109d15790505090565b604051806040016040528060006001600160a01b03168152602001610a12610a17565b905290565b6040518060a00160405280610a2a610a58565b8152602001610a37610a88565b8152602001610a44610ac6565b815260006020820152604001610a12610b01565b6040805160a081018252600080825260208201819052606092820183905282820192909252608081019190915290565b6040518060400160405280610a9b610aa8565b8152602001606081525090565b60405180602001604052806001906020820280368337509192915050565b6040805160a0810182526000808252602080830182905282840182905260608084018190528451808601909552845283015290608082015290565b60405180606001604052806003905b610b18610aa8565b815260200190600190039081610b105790505090565b6000815180845260005b81811015610b5457602081850181015186830182015201610b38565b81811115610b66576000602083870101525b50601f01601f19169290920160200192915050565b805160009083825b6001811015610bab5782516001600160a01b0316825260209283019290910190600101610b83565b505050602082015160406020850152610bc76040850182610b2e565b949350505050565b8051151582526020810151151560208301526000604082015160018060a01b0380821660408601526060840151915060a06060860152610c1260a0860183610b2e565b915060808401518583036080870152805160408452610c346040850182610b2e565b6020928301519093169390910192909252949350505050565b806000805b6003811015610c9857825185835b6001811015610c8257825160140b825260209283019290910190600101610c60565b5050506020948501949290920191600101610c52565b5050505050565b602080825260009060a083820181850186855b6004811015610dda57878303601f19018452815180516001600160a01b031684528601516040878501819052815160e08287015280511515610120870152808901516001600160f01b031916610140870152808201516101608701899052610d1e6101c0880182610b2e565b905060608083015161011f19898403016101808a0152610d3e8382610b2e565b925050608071ffffffffffffffffffffffffffffffffffff1981850151166101a08a01528b8601519350603f19808a850301838b0152610d7e8486610b7b565b958701518a8703909101828b0152949350610d998486610bcf565b9450818601519350610db08b8a018560ff19169052565b80860151955050505050610dc760c0860183610c4d565b9487019493505090850190600101610cb2565b509097965050505050505056fe4d6f6f20c3a9f09f9a8020c3a96f204d20f09f9a80206fc3a96ff09f9a80206fc3a96f206f206f204df09f9a806f6f4d6fc3a9f09f9a806f204d6f6f20c3a9f09f9a806f2020f09f9a80c3a96f20c3a9f09f9a80f09f9a80f09f9a802020c3a9206fc3a9204d6fc3a96fc3a9f09f9a80206f4d6f6f20c3a9f09f9a806ff09f9a806f6f6fc3a9f09f9a80204d6fc3a9f09f9a806f20f09f9a80f09f9a806f4d20c3a9f09f9a806f206f6ff09f9a806f20f09f9a80f09f9a806ff09f9a806f4d6f6f4d6f6f20c3a9f09f9a80f09f9a804d206fc3a96fc3a9f09f9a80f09f9a80c3a920f09f9a806f6ff09f9a804df09f9a80f09f9a804d4d6ff09f9a806ff09f9a80c3a9f09f9a806f4dc3a94d6f6f20c3a96ff09f9a80c3a9c3a94d6ff09f9a806f206f2020206f6f4d4d6ff09f9a8020c3a9206f4d6f6f20c3a9f09f9a80204d6fc3a96fc3a9c3a9f09f9a80204d204d6ff09f9a806f4df09f9a80c3a94d2020f09f9a80f09f9a806fc3a96f4d6f6f20c3a9f09f9a80f09f9a80206f6ff09f9a806fc3a9c3a94df09f9a806f4d6fc3a9c3a96f6f4d206ff09f9a806f4d4d204dc3a920c3a96f6f6f6f6f6fc3a9204d6f6f20c3a9f09f9a80f09f9a8020f09f9a80f09f9a8020f09f9a80206f2020f09f9a804d4d4dc3a9c3a9c3a9c3a920f09f9a806f6f6f6fc3a9c3a96fc3a96f6fc3a9f09f9a806f4d6f6f6f6f206f6f4d6f6f20c3a9f09f9a806f4df09f9a806f4d4df09f9a8020c3a96f6ff09f9a80f09f9a806f6ff09f9a80f09f9a806fc3a92020c3a96f4d204df09f9a80c3a94df09f9a80f09f9a806f204d6f4d6fc3a94df09f9a80c3a94d6f6f20c3a9f09f9a80f09f9a806fc3a9206ff09f9a80f09f9a806fc3a96ff09f9a80f09f9a806f4dc3a96f6ff09f9a80f09f9a80c3a9f09f9a806f206f20c3a96f6f6fc3a9c3a94d206fc3a9c3a94d6f6f4dc3a96fc3a94d4d6f6f20c3a9f09f9a80f09f9a80c3a9206fc3a96f4d6fc3a9c3a9f09f9a806f20f09f9a804d20f09f9a806f6f6ff09f9a806f6f20f09f9a806fc3a94d6f4d20206f6f6f6f4d4d6f4d6f6f20f09f9a804d204d6f6f20c3a9f09f9a80f09f9a80206fc3a9206f6fc3a94d204d4dc3a9f09f9a804d4d6f6f204d4dc3a9c3a96ff09f9a804d202020f09f9a806f4d4d4d6fc3a9f09f9a804d6f6ff09f9a804d4d6f6f20c3a9f09f9a80204dc3a9c3a9204d4d4dc3a94d6f206f6f20c3a9206fc3a96f204d20f09f9a806f4d6fc3a96f4d6f6f20c3a9f09f9a806f4d6fc3a9c3a9c3a94d6f6f6fc3a920f09f9a804d4d4dc3a9f09f9a80206f6f206f6f20c3a96ff09f9a80c3a96f6fc3a920f09f9a804df09f9a806fc3a9f09f9a804df09f9a80f09f9a806f6fc3a94d6f6f20c3a9f09f9a806f6f206f6ff09f9a804d4d4df09f9a804d4d6f204dc3a94d4d4d206ff09f9a804d204df09f9a806f4d6f4d6f204d4dc3a9c3a9f09f9a806fa264697066735822122008a254d8087b6ec010899b2bc826ceee51a1c03bbaec2c7e460269a91b43f1a864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_04d27fca {\n bool s_0;\n bytes2 s_1;\n string s_2;\n string s_3;\n bytes14 s_4;\n }\n\n struct S_a931c238 {\n address[1] s_0;\n string s_1;\n }\n\n struct S_e7028728 {\n string s_0;\n address s_1;\n }\n\n struct S_93ea1879 {\n bool s_0;\n bool s_1;\n address s_2;\n string s_3;\n S_e7028728 s_4;\n }\n\n struct S_7640573f {\n S_04d27fca s_0;\n S_a931c238 s_1;\n S_93ea1879 s_2;\n bytes31 s_3;\n int168[1][3] s_4;\n }\n\n struct S_46c4c857 {\n address s_0;\n S_7640573f s_1;\n }\n\n function test () public pure returns (S_46c4c857[4] memory) {\n S_46c4c857[4] memory r;\n {\n S_46c4c857 memory r_0;\n {\n address r_0_0 = 0x0f075a4416d4D84C78F69fd35797D0C29184A37D;\n r_0.s_0 = r_0_0;\n }\n {\n S_7640573f memory r_0_1;\n {\n S_04d27fca memory r_0_1_0;\n {\n bool r_0_1_0_0 = true;\n r_0_1_0.s_0 = r_0_1_0_0;\n }\n {\n bytes2 r_0_1_0_1 = bytes2(0xe3c2);\n r_0_1_0.s_1 = r_0_1_0_1;\n }\n {\n string memory r_0_1_0_2 = unicode\"Moo é🚀o🚀oooé🚀 Moé🚀o 🚀🚀oM é🚀o oo🚀o 🚀🚀o🚀oMoo\";\n r_0_1_0.s_2 = r_0_1_0_2;\n }\n {\n string memory r_0_1_0_3 = unicode\"Moo é🚀éo 🚀o \";\n r_0_1_0.s_3 = r_0_1_0_3;\n }\n {\n bytes14 r_0_1_0_4 = bytes14(0x2c5c5553b4790302975a37e5ad8f);\n r_0_1_0.s_4 = r_0_1_0_4;\n }\n r_0_1.s_0 = r_0_1_0;\n }\n {\n S_a931c238 memory r_0_1_1;\n {\n address[1] memory r_0_1_1_0;\n {\n address r_0_1_1_0_0 = 0xb5091997ffBDD824e5c8270EE06a043B3001b977;\n r_0_1_1_0[0] = r_0_1_1_0_0;\n }\n r_0_1_1.s_0 = r_0_1_1_0;\n }\n {\n string memory r_0_1_1_1 = unicode\"Moo é🚀🚀 oo🚀oééM🚀oMoééooM o🚀oMM Mé éooooooé \";\n r_0_1_1.s_1 = r_0_1_1_1;\n }\n r_0_1.s_1 = r_0_1_1;\n }\n {\n S_93ea1879 memory r_0_1_2;\n {\n bool r_0_1_2_0 = true;\n r_0_1_2.s_0 = r_0_1_2_0;\n }\n {\n bool r_0_1_2_1 = true;\n r_0_1_2.s_1 = r_0_1_2_1;\n }\n {\n address r_0_1_2_2 = 0x002259c887cBbd081d1b9877B5FF4F3f9b26e753;\n r_0_1_2.s_2 = r_0_1_2_2;\n }\n {\n string memory r_0_1_2_3 = unicode\"Moo é🚀oMoéééMoooé 🚀MMMé🚀 oo oo éo🚀éooé 🚀M🚀oé🚀M🚀🚀ooé\";\n r_0_1_2.s_3 = r_0_1_2_3;\n }\n {\n S_e7028728 memory r_0_1_2_4;\n {\n string memory r_0_1_2_4_0 = unicode\"Moo é🚀\";\n r_0_1_2_4.s_0 = r_0_1_2_4_0;\n }\n {\n address r_0_1_2_4_1 = 0xBDA275D83Ad72ed95184BbB3a2E1Acfa92f18281;\n r_0_1_2_4.s_1 = r_0_1_2_4_1;\n }\n r_0_1_2.s_4 = r_0_1_2_4;\n }\n r_0_1.s_2 = r_0_1_2;\n }\n {\n bytes31 r_0_1_3 = bytes31(0x062e62918be6120c41df980b3cc0aa6e380b6c1a8374eef2745c696ce41207);\n r_0_1.s_3 = r_0_1_3;\n }\n {\n int168[1][3] memory r_0_1_4;\n {\n int168[1] memory r_0_1_4_0;\n {\n int168 r_0_1_4_0_0 = -132855900570452566957322838209045807642919493469809;\n r_0_1_4_0[0] = r_0_1_4_0_0;\n }\n r_0_1_4[0] = r_0_1_4_0;\n }\n {\n int168[1] memory r_0_1_4_1;\n {\n int168 r_0_1_4_1_0 = -136174730158470224504270391184933229790858613389318;\n r_0_1_4_1[0] = r_0_1_4_1_0;\n }\n r_0_1_4[1] = r_0_1_4_1;\n }\n {\n int168[1] memory r_0_1_4_2;\n {\n int168 r_0_1_4_2_0 = 109975475066293541020901115424284490066385872913007;\n r_0_1_4_2[0] = r_0_1_4_2_0;\n }\n r_0_1_4[2] = r_0_1_4_2;\n }\n r_0_1.s_4 = r_0_1_4;\n }\n r_0.s_1 = r_0_1;\n }\n r[0] = r_0;\n }\n {\n S_46c4c857 memory r_1;\n {\n address r_1_0 = 0xf74200CFC6AcF583A4651f43Af3055E40f4EFEaD;\n r_1.s_0 = r_1_0;\n }\n {\n S_7640573f memory r_1_1;\n {\n S_04d27fca memory r_1_1_0;\n {\n bool r_1_1_0_0 = true;\n r_1_1_0.s_0 = r_1_1_0_0;\n }\n {\n bytes2 r_1_1_0_1 = bytes2(0x58fc);\n r_1_1_0.s_1 = r_1_1_0_1;\n }\n {\n string memory r_1_1_0_2 = unicode\"Moo é🚀\";\n r_1_1_0.s_2 = r_1_1_0_2;\n }\n {\n string memory r_1_1_0_3 = unicode\"Moo é🚀oo oo🚀MMM🚀MMo MéMMM o🚀M M🚀oMoMo MMéé🚀o\";\n r_1_1_0.s_3 = r_1_1_0_3;\n }\n {\n bytes14 r_1_1_0_4 = bytes14(0xf78b9b1db18b265da71216098f8b);\n r_1_1_0.s_4 = r_1_1_0_4;\n }\n r_1_1.s_0 = r_1_1_0;\n }\n {\n S_a931c238 memory r_1_1_1;\n {\n address[1] memory r_1_1_1_0;\n {\n address r_1_1_1_0_0 = 0xe5838496090a6D67b04386413b4f5c6219a00fB1;\n r_1_1_1_0[0] = r_1_1_1_0_0;\n }\n r_1_1_1.s_0 = r_1_1_1_0;\n }\n {\n string memory r_1_1_1_1 = unicode\"Moo é🚀oM🚀oMM🚀 éoo🚀🚀oo🚀🚀oé éoM M🚀éM🚀🚀o MoMoéM🚀é\";\n r_1_1_1.s_1 = r_1_1_1_1;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n {\n S_93ea1879 memory r_1_1_2;\n {\n bool r_1_1_2_0 = false;\n r_1_1_2.s_0 = r_1_1_2_0;\n }\n {\n bool r_1_1_2_1 = false;\n r_1_1_2.s_1 = r_1_1_2_1;\n }\n {\n address r_1_1_2_2 = 0x3242B41Ee6cCe9983d90d8e0BB2eb1Ae6A1492aD;\n r_1_1_2.s_2 = r_1_1_2_2;\n }\n {\n string memory r_1_1_2_3 = unicode\"Moo é🚀🚀é oéoMoéé🚀o 🚀M 🚀ooo🚀oo 🚀oéMoM ooooMMoMoo 🚀M \";\n r_1_1_2.s_3 = r_1_1_2_3;\n }\n {\n S_e7028728 memory r_1_1_2_4;\n {\n string memory r_1_1_2_4_0 = unicode\"Moo é🚀🚀 🚀🚀 🚀 o 🚀MMMéééé 🚀ooooééoéooé🚀oMoooo oo\";\n r_1_1_2_4.s_0 = r_1_1_2_4_0;\n }\n {\n address r_1_1_2_4_1 = 0xD30E60F2B086b9eEFD667c9Ba76b5415DA3E9FF7;\n r_1_1_2_4.s_1 = r_1_1_2_4_1;\n }\n r_1_1_2.s_4 = r_1_1_2_4;\n }\n r_1_1.s_2 = r_1_1_2;\n }\n {\n bytes31 r_1_1_3 = bytes31(0xcfdedf4811f80388673329ba4f897609a84246f7857ce578243a55b1252f4b);\n r_1_1.s_3 = r_1_1_3;\n }\n {\n int168[1][3] memory r_1_1_4;\n {\n int168[1] memory r_1_1_4_0;\n {\n int168 r_1_1_4_0_0 = 10281119352035492206931127914602624747929407159960;\n r_1_1_4_0[0] = r_1_1_4_0_0;\n }\n r_1_1_4[0] = r_1_1_4_0;\n }\n {\n int168[1] memory r_1_1_4_1;\n {\n int168 r_1_1_4_1_0 = -70340482105650579936370982723225901738369260261161;\n r_1_1_4_1[0] = r_1_1_4_1_0;\n }\n r_1_1_4[1] = r_1_1_4_1;\n }\n {\n int168[1] memory r_1_1_4_2;\n {\n int168 r_1_1_4_2_0 = 114405844888924470006150992202480185249539601628410;\n r_1_1_4_2[0] = r_1_1_4_2_0;\n }\n r_1_1_4[2] = r_1_1_4_2;\n }\n r_1_1.s_4 = r_1_1_4;\n }\n r_1.s_1 = r_1_1;\n }\n r[1] = r_1;\n }\n {\n S_46c4c857 memory r_2;\n {\n address r_2_0 = 0x5467A3a6b826F0C388728964deB436ff6D14D90b;\n r_2.s_0 = r_2_0;\n }\n {\n S_7640573f memory r_2_1;\n {\n S_04d27fca memory r_2_1_0;\n {\n bool r_2_1_0_0 = true;\n r_2_1_0.s_0 = r_2_1_0_0;\n }\n {\n bytes2 r_2_1_0_1 = bytes2(0xb3fc);\n r_2_1_0.s_1 = r_2_1_0_1;\n }\n {\n string memory r_2_1_0_2 = unicode\"Moo é🚀 éo M 🚀 oéo🚀 oéo o o M🚀ooMoé🚀o \";\n r_2_1_0.s_2 = r_2_1_0_2;\n }\n {\n string memory r_2_1_0_3 = unicode\"Moo é🚀 Méé MMMéMo oo é oéo M 🚀oMoéo\";\n r_2_1_0.s_3 = r_2_1_0_3;\n }\n {\n bytes14 r_2_1_0_4 = bytes14(0x038dce1ee3d62b3fc0b9f92e5227);\n r_2_1_0.s_4 = r_2_1_0_4;\n }\n r_2_1.s_0 = r_2_1_0;\n }\n {\n S_a931c238 memory r_2_1_1;\n {\n address[1] memory r_2_1_1_0;\n {\n address r_2_1_1_0_0 = 0x42d9e5b2BDD13C260c4CD60AF3DE1c0b7F861516;\n r_2_1_1_0[0] = r_2_1_1_0_0;\n }\n r_2_1_1.s_0 = r_2_1_1_0;\n }\n {\n string memory r_2_1_1_1 = unicode\"Moo é🚀o 🚀éo é🚀🚀🚀 é oé Moéoé🚀 o\";\n r_2_1_1.s_1 = r_2_1_1_1;\n }\n r_2_1.s_1 = r_2_1_1;\n }\n {\n S_93ea1879 memory r_2_1_2;\n {\n bool r_2_1_2_0 = true;\n r_2_1_2.s_0 = r_2_1_2_0;\n }\n {\n bool r_2_1_2_1 = false;\n r_2_1_2.s_1 = r_2_1_2_1;\n }\n {\n address r_2_1_2_2 = 0x96b56676F61870Aef4d25694C5e15dECf52f735e;\n r_2_1_2.s_2 = r_2_1_2_2;\n }\n {\n string memory r_2_1_2_3 = unicode\"Moo é🚀 🚀 é\";\n r_2_1_2.s_3 = r_2_1_2_3;\n }\n {\n S_e7028728 memory r_2_1_2_4;\n {\n string memory r_2_1_2_4_0 = unicode\"Moo é🚀🚀M oéoé🚀🚀é 🚀oo🚀M🚀🚀MMo🚀o🚀é🚀oMéMoo éo🚀ééMo🚀o o ooMMo🚀 é o\";\n r_2_1_2_4.s_0 = r_2_1_2_4_0;\n }\n {\n address r_2_1_2_4_1 = 0x938F9a9fa9f20E8391488be3e0f78F2D4CCAF751;\n r_2_1_2_4.s_1 = r_2_1_2_4_1;\n }\n r_2_1_2.s_4 = r_2_1_2_4;\n }\n r_2_1.s_2 = r_2_1_2;\n }\n {\n bytes31 r_2_1_3 = bytes31(0x498c2b7b811995f683644dff78caa8bee50abdaf615cc1323675799985996f);\n r_2_1.s_3 = r_2_1_3;\n }\n {\n int168[1][3] memory r_2_1_4;\n {\n int168[1] memory r_2_1_4_0;\n {\n int168 r_2_1_4_0_0 = -157778683258692730386398385145916088106356432515585;\n r_2_1_4_0[0] = r_2_1_4_0_0;\n }\n r_2_1_4[0] = r_2_1_4_0;\n }\n {\n int168[1] memory r_2_1_4_1;\n {\n int168 r_2_1_4_1_0 = 54232751861361794542609314957671101038500089270044;\n r_2_1_4_1[0] = r_2_1_4_1_0;\n }\n r_2_1_4[1] = r_2_1_4_1;\n }\n {\n int168[1] memory r_2_1_4_2;\n {\n int168 r_2_1_4_2_0 = 72319662811015540544807272466622102793294740544085;\n r_2_1_4_2[0] = r_2_1_4_2_0;\n }\n r_2_1_4[2] = r_2_1_4_2;\n }\n r_2_1.s_4 = r_2_1_4;\n }\n r_2.s_1 = r_2_1;\n }\n r[2] = r_2;\n }\n {\n S_46c4c857 memory r_3;\n {\n address r_3_0 = 0x0d091C9593C567355201484B0A4761D613d5A72b;\n r_3.s_0 = r_3_0;\n }\n {\n S_7640573f memory r_3_1;\n {\n S_04d27fca memory r_3_1_0;\n {\n bool r_3_1_0_0 = false;\n r_3_1_0.s_0 = r_3_1_0_0;\n }\n {\n bytes2 r_3_1_0_1 = bytes2(0xcc1f);\n r_3_1_0.s_1 = r_3_1_0_1;\n }\n {\n string memory r_3_1_0_2 = unicode\"Moo é🚀\";\n r_3_1_0.s_2 = r_3_1_0_2;\n }\n {\n string memory r_3_1_0_3 = unicode\"Moo é🚀🚀oé o🚀🚀oéo🚀🚀oMéoo🚀🚀é🚀o o éoooééM oééMooMéoéM\";\n r_3_1_0.s_3 = r_3_1_0_3;\n }\n {\n bytes14 r_3_1_0_4 = bytes14(0xb4ca524f71fd3d3481079179798c);\n r_3_1_0.s_4 = r_3_1_0_4;\n }\n r_3_1.s_0 = r_3_1_0;\n }\n {\n S_a931c238 memory r_3_1_1;\n {\n address[1] memory r_3_1_1_0;\n {\n address r_3_1_1_0_0 = 0x1C49449270a67372779E95A3c07Cd1b8797ADd0A;\n r_3_1_1_0[0] = r_3_1_1_0_0;\n }\n r_3_1_1.s_0 = r_3_1_1_0;\n }\n {\n string memory r_3_1_1_1 = unicode\"Moo é🚀🚀 oé ooéM MMé🚀MMoo MMééo🚀M 🚀oMMMoé🚀Moo🚀M\";\n r_3_1_1.s_1 = r_3_1_1_1;\n }\n r_3_1.s_1 = r_3_1_1;\n }\n {\n S_93ea1879 memory r_3_1_2;\n {\n bool r_3_1_2_0 = true;\n r_3_1_2.s_0 = r_3_1_2_0;\n }\n {\n bool r_3_1_2_1 = false;\n r_3_1_2.s_1 = r_3_1_2_1;\n }\n {\n address r_3_1_2_2 = 0x74FDa08C81136F929B95B73C9cdD82cAA0e127F7;\n r_3_1_2.s_2 = r_3_1_2_2;\n }\n {\n string memory r_3_1_2_3 = unicode\"Moo é🚀 Moéoéé🚀 M Mo🚀oM🚀éM 🚀🚀oéo\";\n r_3_1_2.s_3 = r_3_1_2_3;\n }\n {\n S_e7028728 memory r_3_1_2_4;\n {\n string memory r_3_1_2_4_0 = unicode\"Moo é🚀é oooéo\";\n r_3_1_2_4.s_0 = r_3_1_2_4_0;\n }\n {\n address r_3_1_2_4_1 = 0x8f830e90Da904Fd4cA01dFc72435c4fc0476e392;\n r_3_1_2_4.s_1 = r_3_1_2_4_1;\n }\n r_3_1_2.s_4 = r_3_1_2_4;\n }\n r_3_1.s_2 = r_3_1_2;\n }\n {\n bytes31 r_3_1_3 = bytes31(0x89eeebdf159eb75289aff1969d6762fffe1b5f0f319f922209668938e85282);\n r_3_1.s_3 = r_3_1_3;\n }\n {\n int168[1][3] memory r_3_1_4;\n {\n int168[1] memory r_3_1_4_0;\n {\n int168 r_3_1_4_0_0 = -186847071082254048487298153605925822047099540853151;\n r_3_1_4_0[0] = r_3_1_4_0_0;\n }\n r_3_1_4[0] = r_3_1_4_0;\n }\n {\n int168[1] memory r_3_1_4_1;\n {\n int168 r_3_1_4_1_0 = 141865574129162983409560752579659683272264030575773;\n r_3_1_4_1[0] = r_3_1_4_1_0;\n }\n r_3_1_4[1] = r_3_1_4_1;\n }\n {\n int168[1] memory r_3_1_4_2;\n {\n int168 r_3_1_4_2_0 = -47515847437253924176768556922944829601606456314080;\n r_3_1_4_2[0] = r_3_1_4_2_0;\n }\n r_3_1_4[2] = r_3_1_4_2;\n }\n r_3_1.s_4 = r_3_1_4;\n }\n r_3.s_1 = r_3_1;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000005600000000000000000000000000000000000000000000000000000000000000a800000000000000000000000000000000000000000000000000000000000000f600000000000000000000000000f075a4416d4d84c78f69fd35797d0c29184a37d000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000300062e62918be6120c41df980b3cc0aa6e380b6c1a8374eef2745c696ce4120700ffffffffffffffffffffffa518a760b3104f2adcbe0206ecdf7d8465f307798fffffffffffffffffffffffa2d351e976ec1328e3ac820cc8e4f43bf9d24387fa00000000000000000000004b3f8edbbd904043cd116b20a0551cb5a95540826f0000000000000000000000000000000000000000000000000000000000000001e3c200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001202c5c5553b4790302975a37e5ad8f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a806ff09f9a806f6f6fc3a9f09f9a80204d6fc3a9f09f9a806f20f09f9a80f09f9a806f4d20c3a9f09f9a806f206f6ff09f9a806f20f09f9a80f09f9a806ff09f9a806f4d6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a80c3a96f20f09f9a806f20000000000000000000000000000000000000000000000000b5091997ffbdd824e5c8270ee06a043b3001b977000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a80f09f9a80206f6ff09f9a806fc3a9c3a94df09f9a806f4d6fc3a9c3a96f6f4d206ff09f9a806f4d4d204dc3a920c3a96f6f6f6f6f6fc3a92000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000002259c887cbbd081d1b9877b5ff4f3f9b26e75300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a806f4d6fc3a9c3a9c3a94d6f6f6fc3a920f09f9a804d4d4dc3a9f09f9a80206f6f206f6f20c3a96ff09f9a80c3a96f6fc3a920f09f9a804df09f9a806fc3a9f09f9a804df09f9a80f09f9a806f6fc3a9000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000bda275d83ad72ed95184bbb3a2e1acfa92f18281000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000f74200cfc6acf583a4651f43af3055e40f4efead000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000300cfdedf4811f80388673329ba4f897609a84246f7857ce578243a55b1252f4b0000000000000000000000000708dd56181e58fb42080937ed8436582515e17e98ffffffffffffffffffffffcfdeffb1baba95fd9eb1737634c45baf3a5122f0d700000000000000000000004e47978317f43791640c4d29d83fd6c08e60827cfa000000000000000000000000000000000000000000000000000000000000000158fc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0f78b9b1db18b265da71216098f8b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a806f6f206f6ff09f9a804d4d4df09f9a804d4d6f204dc3a94d4d4d206ff09f9a804d204df09f9a806f4d6f4d6f204d4dc3a9c3a9f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000e5838496090a6d67b04386413b4f5c6219a00fb1000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a806f4df09f9a806f4d4df09f9a8020c3a96f6ff09f9a80f09f9a806f6ff09f9a80f09f9a806fc3a92020c3a96f4d204df09f9a80c3a94df09f9a80f09f9a806f204d6f4d6fc3a94df09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003242b41ee6cce9983d90d8e0bb2eb1ae6a1492ad00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a80f09f9a80c3a9206fc3a96f4d6fc3a9c3a9f09f9a806f20f09f9a804d20f09f9a806f6f6ff09f9a806f6f20f09f9a806fc3a94d6f4d20206f6f6f6f4d4d6f4d6f6f20f09f9a804d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000d30e60f2b086b9eefd667c9ba76b5415da3e9ff700000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a80f09f9a8020f09f9a80f09f9a8020f09f9a80206f2020f09f9a804d4d4dc3a9c3a9c3a9c3a920f09f9a806f6f6f6fc3a9c3a96fc3a96f6fc3a9f09f9a806f4d6f6f6f6f206f6f000000000000000000000000000000000000000000000000000000005467a3a6b826f0c388728964deb436ff6d14d90b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002e0498c2b7b811995f683644dff78caa8bee50abdaf615cc1323675799985996f00ffffffffffffffffffffff940b1f267911b4ecbf9cf25162aeb23dcdf6f2cdff0000000000000000000000251b88b36671b8440a1f884c7f3b0308f2dfb18f1c0000000000000000000000317badd6874db8e3fdeefdceb38033556f56855a550000000000000000000000000000000000000000000000000000000000000001b3fc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100038dce1ee3d62b3fc0b9f92e522700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a8020c3a96f204d20f09f9a80206fc3a96ff09f9a80206fc3a96f206f206f204df09f9a806f6f4d6fc3a9f09f9a806f200000000000000000000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a80204dc3a9c3a9204d4d4dc3a94d6f206f6f20c3a9206fc3a96f204d20f09f9a806f4d6fc3a96f0000000000000000000000000000000000000000000000000000000042d9e5b2bdd13c260c4cd60af3de1c0b7f861516000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a806f2020f09f9a80c3a96f20c3a9f09f9a80f09f9a80f09f9a802020c3a9206fc3a9204d6fc3a96fc3a9f09f9a80206f000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096b56676f61870aef4d25694c5e15decf52f735e00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a802020f09f9a8020c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000938f9a9fa9f20e8391488be3e0f78f2d4ccaf75100000000000000000000000000000000000000000000000000000000000000734d6f6f20c3a9f09f9a80f09f9a804d206fc3a96fc3a9f09f9a80f09f9a80c3a920f09f9a806f6ff09f9a804df09f9a80f09f9a804d4d6ff09f9a806ff09f9a80c3a9f09f9a806f4dc3a94d6f6f20c3a96ff09f9a80c3a9c3a94d6ff09f9a806f206f2020206f6f4d4d6ff09f9a8020c3a9206f000000000000000000000000000000000000000000000000000d091c9593c567355201484b0a4761d613d5a72b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000030089eeebdf159eb75289aff1969d6762fffe1b5f0f319f922209668938e8528200ffffffffffffffffffffff80276f8f2fccc79aa9d11a22042c4f1e76b5c62e6100000000000000000000006111805b7c7a9700906180a74fd231140a20b75c9dffffffffffffffffffffffdf7d03b5e76f94a875654bcca403580d594513f7200000000000000000000000000000000000000000000000000000000000000000cc1f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0b4ca524f71fd3d3481079179798c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a80f09f9a806fc3a9206ff09f9a80f09f9a806fc3a96ff09f9a80f09f9a806f4dc3a96f6ff09f9a80f09f9a80c3a9f09f9a806f206f20c3a96f6f6fc3a9c3a94d206fc3a9c3a94d6f6f4dc3a96fc3a94d000000000000000000000000000000000000001c49449270a67372779e95a3c07cd1b8797add0a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a80f09f9a80206fc3a9206f6fc3a94d204d4dc3a9f09f9a804d4d6f6f204d4dc3a9c3a96ff09f9a804d202020f09f9a806f4d4d4d6fc3a9f09f9a804d6f6ff09f9a804d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074fda08c81136f929b95b73c9cdd82caa0e127f700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a80204d6fc3a96fc3a9c3a9f09f9a80204d204d6ff09f9a806f4df09f9a80c3a94d2020f09f9a80f09f9a806fc3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000008f830e90da904fd4ca01dfc72435c4fc0476e39200000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a80c3a9206f6f6fc3a96f00000000000000000000000000" + }, + { + "name": "random-(int184,((string[3],bytes17,address),(uint[3],(int200),address,bytes29[3]),address,string,bool[]),int24,(address,address,bytes21,bool))", + "type": "(int184,((string[3],bytes17,address),(uint[3],(int200),address,bytes29[3]),address,string,bool[]),int24,(address,address,bytes21,bool))", + "value": [ + "10185335835705589186101059708721489697976903556057377518", + [ + [ + [ + "Moo é🚀Mé ", + "Moo é🚀Moo o oMéMM🚀🚀oMMoMoMéo🚀🚀 oé", + "Moo é🚀é🚀 oMMé 🚀🚀M MoééoéMéoooé éoo é oMéo🚀 oMM🚀🚀MooM🚀" + ], + "0x1e1bb68944be60674ce9dbe89201a4ab2d", + "0x4576B7Dc7aDB93203819AAdeb0E3aC21D7F4896b" + ], + [ + [ + "36114325555168542233322009559668645598862926391415783888696122610530572325575", + "60762652398308231926972678367461694517229149704016908959019482000282708881831", + "47861590773579426757882838942552201846661040201951003651542489032352278558172" + ], + ["-571695732114535490360138261830488000825934111026638921041339"], + "0x9E92F672b61aCC419d267E76fd5B352A47F7ECcF", + [ + "0x79fbdf1ce278a114a9637ebd100618a483244e3a2c1373f6351fe8258e", + "0xf8401e4a5b5c1d65b0274a98223e21934d23e84a6d8a9b57bd43a5f73b", + "0x1053851477778970c22422397e81254af5c68e3d7929c452904c9def8d" + ] + ], + "0xbD271D0D66D04282FaA75219249E8bE247C27E24", + "Moo é🚀", + [false, true] + ], + "4386406", + [ + "0xd24c42ec3145c1FcBbD12b53E5caDEb927A119E9", + "0xC27a97E83CaEB2aFaa6a7D36639e6C87a1a89795", + "0x92bca2023a27cac5c83cff86126ddbcdcdf50730d1", + true + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "10185335835705589186101059708721489697976903556057377518" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mé " + }, + { + "type": "string", + "value": "Moo é🚀Moo o oMéMM🚀🚀oMMoMoMéo🚀🚀 oé" + }, + { + "type": "string", + "value": "Moo é🚀é🚀 oMMé 🚀🚀M MoééoéMéoooé éoo é oMéo🚀 oMM🚀🚀MooM🚀" + } + ] + }, + { + "type": "hexstring", + "value": "0x1e1bb68944be60674ce9dbe89201a4ab2d" + }, + { + "type": "address", + "value": "0x4576B7Dc7aDB93203819AAdeb0E3aC21D7F4896b" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "36114325555168542233322009559668645598862926391415783888696122610530572325575" + }, + { + "type": "number", + "value": "60762652398308231926972678367461694517229149704016908959019482000282708881831" + }, + { + "type": "number", + "value": "47861590773579426757882838942552201846661040201951003651542489032352278558172" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-571695732114535490360138261830488000825934111026638921041339" + } + ] + }, + { + "type": "address", + "value": "0x9E92F672b61aCC419d267E76fd5B352A47F7ECcF" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x79fbdf1ce278a114a9637ebd100618a483244e3a2c1373f6351fe8258e" + }, + { + "type": "hexstring", + "value": "0xf8401e4a5b5c1d65b0274a98223e21934d23e84a6d8a9b57bd43a5f73b" + }, + { + "type": "hexstring", + "value": "0x1053851477778970c22422397e81254af5c68e3d7929c452904c9def8d" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xbD271D0D66D04282FaA75219249E8bE247C27E24" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "number", + "value": "4386406" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xd24c42ec3145c1FcBbD12b53E5caDEb927A119E9" + }, + { + "type": "address", + "value": "0xC27a97E83CaEB2aFaa6a7D36639e6C87a1a89795" + }, + { + "type": "hexstring", + "value": "0x92bca2023a27cac5c83cff86126ddbcdcdf50730d1" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610872806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610627565b60405180910390f35b6100566103e5565b61005e6103e5565b766a570195269ddaef4391ccef6755d5e337f2778e81aaee815261008061043d565b610088610476565b61009061049d565b604080518082018252600e81526d026b7b79061d4f84fcd4026e1d4960951b6020808301919091529083528151606081019092526034808352600092916108099083013990508082600160200201819052505060006040518060800160405280605881526020016107b16058913960408084019190915291835250701e1bb68944be60674ce9dbe89201a4ab2d60781b6020830152734576b7dc7adb93203819aadeb0e3ac21d7f4896b9082015281526101486104c4565b6101506104fc565b7f4fd7fbe0c586f9a8abd0a955a38370a1b64ae9da8cc327909d000fcb5a5c52c781527f8656714814309f0b9aaf7d208e2360b76e2102f10652fa71177541be024c31a76020808301919091527f69d0b34cca5b07446b23d41a227d00f47bf6beeec138c86808677db5dad4b5dc60408084019190915291835281518082018352785b138df1b4bfd2cfea1d49c2f96fb4ac3d05c9d5aab5f685ba19815290830152739e92f672b61acc419d267e76fd5b352a47f7eccf908201526102136104fc565b7f79fbdf1ce278a114a9637ebd100618a483244e3a2c1373f6351fe8258e00000081527ff8401e4a5b5c1d65b0274a98223e21934d23e84a6d8a9b57bd43a5f73b0000006020808301919091527f1053851477778970c22422397e81254af5c68e3d7929c452904c9def8d0000006040808401919091526060848101939093528482019390935273bd271d0d66d04282faa75219249e8be247c27e248484015282518084018452600a8152689adede418753e13f3560b71b818301528483015282516002808252928101845260009390929183019080368337019050509050600080826000815181106103085761030861079a565b6020026020010190151590811515815250505060006001905080826001815181106103355761033561079a565b9115156020928302919091018201526080840192909252508201526242ee66604082015261038360408051608081018252600080825260208201819052918101829052606081019190915290565b73d24c42ec3145c1fcbbd12b53e5cadeb927a119e9815273c27a97e83caeb2afaa6a7d36639e6c87a1a8979560208201527492bca2023a27cac5c83cff86126ddbcdcdf50730d160581b60408201526001606080830191909152820152919050565b6040518060800160405280600060160b815260200161040261043d565b81526000602082015260400161043860408051608081018252600080825260208201819052918101829052606081019190915290565b905290565b6040518060a00160405280610450610476565b815260200161045d6104c4565b8152600060208201526060604082018190529081015290565b604051806060016040528061048961049d565b815260006020820181905260409091015290565b60405180606001604052806003905b60608152602001906001900390816104ac5790505090565b60405180608001604052806104d76104fc565b8152604080516020818101909252600081529101908152600060208201526040016104385b60405180606001604052806003906020820280368337509192915050565b6000815180845260005b8181101561054057602081850181015186830182015201610524565b81811115610552576000602083870101525b50601f01601f19169290920160200192915050565b80518260005b600381101561058c57825182526020928301929091019060010161056d565b5050506020818101515160180b60608481019190915260408301516001600160a01b0316608085015282015160a0840160005b60038110156105e257825162ffffff1916825291830191908301906001016105bf565b505050505050565b600081518084526020808501945080840160005b8381101561061c5781511515875295820195908201906001016105fe565b509495945050505050565b6020808252825160160b828201528281015160e060408401528051610180610100850152805160606102808601526000939291906103408601906102e08701865b6003811015610698576102df1989850301825261068684845161051a565b93509186019190860190600101610668565b505050818401516effffffffffffffffffffffffffffff19166102a087015260408201516001600160a01b03166102c087015292820151926106de610120870185610567565b60408301516001600160a01b0316610220870152606083015160ff1987830381016102408901529094509150610714818561051a565b9350506080820151915080858403016102608601525061073482826105ea565b915050604084015161074b606085018260020b9052565b5060608481015180516001600160a01b03908116608087015260208201511660a086015260408101516affffffffffffffffffffff191660c086015290810151151560e0850152509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80c3a9f09f9a80206f4d4dc3a920f09f9a80f09f9a804d204d6fc3a9c3a96fc3a94dc3a96f6f6fc3a920c3a96f6f20c3a9206f4dc3a96ff09f9a80206f4d4df09f9a80f09f9a804d6f6f4df09f9a804d6f6f20c3a9f09f9a804d6f6f206f206f4dc3a94d4df09f9a80f09f9a806f4d4d6f4d6f4dc3a96ff09f9a80f09f9a80206fc3a9a26469706673582212200513cde7df88be3a4897832843f78a1c7929a598259ec7c9253c93504f66403564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_dc11a5a8 {\n string[3] s_0;\n bytes17 s_1;\n address s_2;\n }\n\n struct S_530fe426 {\n int200 s_0;\n }\n\n struct S_7caf8a50 {\n uint256[3] s_0;\n S_530fe426 s_1;\n address s_2;\n bytes29[3] s_3;\n }\n\n struct S_33b68843 {\n S_dc11a5a8 s_0;\n S_7caf8a50 s_1;\n address s_2;\n string s_3;\n bool[] s_4;\n }\n\n struct S_62bedf46 {\n address s_0;\n address s_1;\n bytes21 s_2;\n bool s_3;\n }\n\n struct S_0f0af590 {\n int184 s_0;\n S_33b68843 s_1;\n int24 s_2;\n S_62bedf46 s_3;\n }\n\n function test () public pure returns (S_0f0af590 memory) {\n S_0f0af590 memory r;\n {\n int184 r_0 = 10185335835705589186101059708721489697976903556057377518;\n r.s_0 = r_0;\n }\n {\n S_33b68843 memory r_1;\n {\n S_dc11a5a8 memory r_1_0;\n {\n string[3] memory r_1_0_0;\n {\n string memory r_1_0_0_0 = unicode\"Moo é🚀Mé \";\n r_1_0_0[0] = r_1_0_0_0;\n }\n {\n string memory r_1_0_0_1 = unicode\"Moo é🚀Moo o oMéMM🚀🚀oMMoMoMéo🚀🚀 oé\";\n r_1_0_0[1] = r_1_0_0_1;\n }\n {\n string memory r_1_0_0_2 = unicode\"Moo é🚀é🚀 oMMé 🚀🚀M MoééoéMéoooé éoo é oMéo🚀 oMM🚀🚀MooM🚀\";\n r_1_0_0[2] = r_1_0_0_2;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bytes17 r_1_0_1 = bytes17(0x1e1bb68944be60674ce9dbe89201a4ab2d);\n r_1_0.s_1 = r_1_0_1;\n }\n {\n address r_1_0_2 = 0x4576B7Dc7aDB93203819AAdeb0E3aC21D7F4896b;\n r_1_0.s_2 = r_1_0_2;\n }\n r_1.s_0 = r_1_0;\n }\n {\n S_7caf8a50 memory r_1_1;\n {\n uint256[3] memory r_1_1_0;\n {\n uint r_1_1_0_0 = 36114325555168542233322009559668645598862926391415783888696122610530572325575;\n r_1_1_0[0] = r_1_1_0_0;\n }\n {\n uint r_1_1_0_1 = 60762652398308231926972678367461694517229149704016908959019482000282708881831;\n r_1_1_0[1] = r_1_1_0_1;\n }\n {\n uint r_1_1_0_2 = 47861590773579426757882838942552201846661040201951003651542489032352278558172;\n r_1_1_0[2] = r_1_1_0_2;\n }\n r_1_1.s_0 = r_1_1_0;\n }\n {\n S_530fe426 memory r_1_1_1;\n {\n int200 r_1_1_1_0 = -571695732114535490360138261830488000825934111026638921041339;\n r_1_1_1.s_0 = r_1_1_1_0;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n {\n address r_1_1_2 = 0x9E92F672b61aCC419d267E76fd5B352A47F7ECcF;\n r_1_1.s_2 = r_1_1_2;\n }\n {\n bytes29[3] memory r_1_1_3;\n {\n bytes29 r_1_1_3_0 = bytes29(0x79fbdf1ce278a114a9637ebd100618a483244e3a2c1373f6351fe8258e);\n r_1_1_3[0] = r_1_1_3_0;\n }\n {\n bytes29 r_1_1_3_1 = bytes29(0xf8401e4a5b5c1d65b0274a98223e21934d23e84a6d8a9b57bd43a5f73b);\n r_1_1_3[1] = r_1_1_3_1;\n }\n {\n bytes29 r_1_1_3_2 = bytes29(0x1053851477778970c22422397e81254af5c68e3d7929c452904c9def8d);\n r_1_1_3[2] = r_1_1_3_2;\n }\n r_1_1.s_3 = r_1_1_3;\n }\n r_1.s_1 = r_1_1;\n }\n {\n address r_1_2 = 0xbD271D0D66D04282FaA75219249E8bE247C27E24;\n r_1.s_2 = r_1_2;\n }\n {\n string memory r_1_3 = unicode\"Moo é🚀\";\n r_1.s_3 = r_1_3;\n }\n {\n bool[] memory r_1_4 = new bool[](2);\n {\n bool r_1_4_0 = false;\n r_1_4[0] = r_1_4_0;\n }\n {\n bool r_1_4_1 = true;\n r_1_4[1] = r_1_4_1;\n }\n r_1.s_4 = r_1_4;\n }\n r.s_1 = r_1;\n }\n {\n int24 r_2 = 4386406;\n r.s_2 = r_2;\n }\n {\n S_62bedf46 memory r_3;\n {\n address r_3_0 = 0xd24c42ec3145c1FcBbD12b53E5caDEb927A119E9;\n r_3.s_0 = r_3_0;\n }\n {\n address r_3_1 = 0xC27a97E83CaEB2aFaa6a7D36639e6C87a1a89795;\n r_3.s_1 = r_3_1;\n }\n {\n bytes21 r_3_2 = bytes21(0x92bca2023a27cac5c83cff86126ddbcdcdf50730d1);\n r_3.s_2 = r_3_2;\n }\n {\n bool r_3_3 = true;\n r_3.s_3 = r_3_3;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000006a570195269ddaef4391ccef6755d5e337f2778e81aaee00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000042ee66000000000000000000000000d24c42ec3145c1fcbbd12b53e5cadeb927a119e9000000000000000000000000c27a97e83caeb2afaa6a7d36639e6c87a1a8979592bca2023a27cac5c83cff86126ddbcdcdf50730d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001804fd7fbe0c586f9a8abd0a955a38370a1b64ae9da8cc327909d000fcb5a5c52c78656714814309f0b9aaf7d208e2360b76e2102f10652fa71177541be024c31a769d0b34cca5b07446b23d41a227d00f47bf6beeec138c86808677db5dad4b5dcffffffffffffffa4ec720e4b402d3015e2b63d06904b53c2fa362a554a097a450000000000000000000000009e92f672b61acc419d267e76fd5b352a47f7eccf79fbdf1ce278a114a9637ebd100618a483244e3a2c1373f6351fe8258e000000f8401e4a5b5c1d65b0274a98223e21934d23e84a6d8a9b57bd43a5f73b0000001053851477778970c22422397e81254af5c68e3d7929c452904c9def8d000000000000000000000000000000bd271d0d66d04282faa75219249e8be247c27e24000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000000601e1bb68944be60674ce9dbe89201a4ab2d0000000000000000000000000000000000000000000000000000004576b7dc7adb93203819aadeb0e3ac21d7f4896b000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a804dc3a92000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a804d6f6f206f206f4dc3a94d4df09f9a80f09f9a806f4d4d6f4d6f4dc3a96ff09f9a80f09f9a80206fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a80c3a9f09f9a80206f4d4dc3a920f09f9a80f09f9a804d204d6fc3a9c3a96fc3a94dc3a96f6f6fc3a920c3a96f6f20c3a9206f4dc3a96ff09f9a80206f4d4df09f9a80f09f9a804d6f6f4df09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(string,string,((bytes26),(address,bytes10,(bytes24,uint256[3],(bool,(string,address[1]),string,address,string)),bool,string)[2],bool),string)", + "type": "(string,string,((bytes26),(address,bytes10,(bytes24,uint256[3],(bool,(string,address[1]),string,address,string)),bool,string)[2],bool),string)", + "value": [ + "Moo é🚀🚀🚀oM oéM🚀Méoo🚀", + "Moo é🚀", + [ + ["0xf6a6eda8895b61d1f31666d33a67c4149f034dff5becb37c29a8"], + [ + [ + "0x0c847b6BAEc673F9589bFb3fabc98F6e1528bd64", + "0xaafc73f5c8c5768ea720", + [ + "0x3bef3ff4511334eaff1ed84e9a8d1e82b1c3684abd026524", + [ + "24607535201678916201050698634880289647537422983556649388218167511173562850304", + "81972837835788828705103392840108708057772341177229323827543342192841539225697", + "58378743444386562888477130415325848584338368793290400661916654532297228950613" + ], + [ + false, + [ + "Moo é🚀 🚀oooMoo o oMo MooM é🚀oo🚀é🚀o ééé🚀Mo🚀o Mooéé M🚀 ", + ["0x446a4969c1663A24516c72907Ccd8C5911C97039"] + ], + "Moo é🚀MMo 🚀éo🚀éM🚀 M", + "0x4AE9356B82B1A62d299c909417D4eAb9bFCbdF05", + "Moo é🚀é o oooéM o o o🚀oooéo🚀oMo" + ] + ], + false, + "Moo é🚀" + ], + [ + "0xde3Ac83c9452708159D383D23764423d7E0eaD99", + "0x1e02622e6390be9b7be4", + [ + "0xf752cca8f91a2612bbd4ce3a2aff3b282f0f440aa0fbb697", + [ + "70930780465373985931377451328516251316675573976826907720586119233112870519143", + "41157697918880313273063964244577739342008280988357786627971632771490057183766", + "23101050293274233770460807469475357545923971729533207878198168984220049534309" + ], + [ + false, + [ + "Moo é🚀oo🚀oMM🚀é oMoo 🚀🚀Mo🚀oM🚀🚀 oéo🚀ooo🚀🚀oéo", + ["0x754ab0f13712755520Be4429864754C2cbA97D19"] + ], + "Moo é🚀ooo 🚀 é🚀M🚀Méo🚀o🚀🚀ééoo🚀M oM🚀oM🚀ooM 🚀MoMéé🚀Mo M Mé MooMoo", + "0x5909C1B38CE819A8fb83f6c317fb372E38267DBE", + "Moo é🚀M M" + ] + ], + true, + "Moo é🚀" + ] + ], + true + ], + "Moo é🚀oMMooooMo🚀🚀oo oo🚀 éMéoMooéMMo🚀🚀o o" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀oM oéM🚀Méoo🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf6a6eda8895b61d1f31666d33a67c4149f034dff5becb37c29a8" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x0c847b6BAEc673F9589bFb3fabc98F6e1528bd64" + }, + { + "type": "hexstring", + "value": "0xaafc73f5c8c5768ea720" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x3bef3ff4511334eaff1ed84e9a8d1e82b1c3684abd026524" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "24607535201678916201050698634880289647537422983556649388218167511173562850304" + }, + { + "type": "number", + "value": "81972837835788828705103392840108708057772341177229323827543342192841539225697" + }, + { + "type": "number", + "value": "58378743444386562888477130415325848584338368793290400661916654532297228950613" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀oooMoo o oMo MooM é🚀oo🚀é🚀o ééé🚀Mo🚀o Mooéé M🚀 " + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x446a4969c1663A24516c72907Ccd8C5911C97039" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀MMo 🚀éo🚀éM🚀 M" + }, + { + "type": "address", + "value": "0x4AE9356B82B1A62d299c909417D4eAb9bFCbdF05" + }, + { + "type": "string", + "value": "Moo é🚀é o oooéM o o o🚀oooéo🚀oMo" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xde3Ac83c9452708159D383D23764423d7E0eaD99" + }, + { + "type": "hexstring", + "value": "0x1e02622e6390be9b7be4" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf752cca8f91a2612bbd4ce3a2aff3b282f0f440aa0fbb697" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "70930780465373985931377451328516251316675573976826907720586119233112870519143" + }, + { + "type": "number", + "value": "41157697918880313273063964244577739342008280988357786627971632771490057183766" + }, + { + "type": "number", + "value": "23101050293274233770460807469475357545923971729533207878198168984220049534309" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀oMM🚀é oMoo 🚀🚀Mo🚀oM🚀🚀 oéo🚀ooo🚀🚀oéo" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x754ab0f13712755520Be4429864754C2cbA97D19" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooo 🚀 é🚀M🚀Méo🚀o🚀🚀ééoo🚀M oM🚀oM🚀ooM 🚀MoMéé🚀Mo M Mé MooMoo" + }, + { + "type": "address", + "value": "0x5909C1B38CE819A8fb83f6c317fb372E38267DBE" + }, + { + "type": "string", + "value": "Moo é🚀M M" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oMMooooMo🚀🚀oo oo🚀 éMéoMooéMMo🚀🚀o o" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610acc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061069f565b60405180910390f35b6100566104e1565b61005e6104e1565b6000604051806060016040528060268152602001610a006026913982525060408051808201909152600a8152689adede418753e13f3560b71b6020808301919091528201526100ab61050f565b60408051602081019091527ff6a6eda8895b61d1f31666d33a67c4149f034dff5becb37c29a8000000000000815281526100e361053e565b6100eb61056b565b730c847b6baec673f9589bfb3fabc98f6e1528bd648152690557e39fae462bb4753960b51b602082015261011d61059e565b7f3bef3ff4511334eaff1ed84e9a8d1e82b1c3684abd026524000000000000000081526101486105cb565b7f36675f113bb60ea4ddfd04422908bd7579fc3ea8842bce8f49f869251ac75c0081527fb53afb66e5ea34ca036f8f4c55b2fe3d1eb7cb8d687ea2d5d3d7a42fb39c88616020808301919091527f811132a68880db2766e66e6a71396f2b3b9c16257f7eb840df86d0cd734a1c5560408301528201526101c66105e9565b600081526101d261061e565b60006040518060800160405280605781526020016109a9605791398252506101f8610634565b73446a4969c1663a24516c72907ccd8c5911c9703981526020828101919091528281019190915260408051606081019091526022808252600092610a7590830139604080840191909152734ae9356b82b1a62d299c909417d4eab9bfcbdf056060808501919091528151908101909152602d808252600092506108d360208301396080838101919091526040848101939093528483019390935250600060608401528051808201909152600a8152689adede418753e13f3560b71b60208201529082015281526102c661056b565b73de3ac83c9452708159d383d23764423d7e0ead998152690780988b98e42fa6def960b21b60208201526102f861059e565b7ff752cca8f91a2612bbd4ce3a2aff3b282f0f440aa0fbb697000000000000000081526103236105cb565b7f9cd16627c0930dbc1e32d629fe886734a32fdabc311bdad8ab6c6bb5b204816781527f5afe6e76b03ebea5e89e3cbf01006de8effc0067d7b0a3b108a1c664550662166020808301919091527f3312bb2a59fd607fc13406136aa8f7be0df97282b7aa08a32972a0f82fcaed6560408301528201526103a16105e9565b600081526103ad61061e565b60006040518060800160405280604f8152602001610a26604f91398252506103d3610634565b73754ab0f13712755520be4429864754c2cba97d198152602082810191909152828101919091526040805160a08101909152606b80825260009261093e90830139604083810191909152735909c1b38ce819a8fb83f6c317fb372e38267dbe60608085019190915281518083018352600d81526c4d6f6f20c3a9f09f9a804d204d60981b6020808301919091526080808701929092528684019590955286830195909552600186820181905282518084018452600a8152689adede418753e13f3560b71b818701529587019590955286840195909552868301959095525084840191909152848301939093528151908101909152603e80825260009261090090830139606083015250919050565b6040518060800160405280606081526020016060815260200161050261050f565b8152602001606081525090565b604080516080810190915260006060820190815281526020810161053161053e565b8152600060209091015290565b60405180604001604052806002905b61055561056b565b81526020019060019003908161054d5790505090565b6040805160a0810182526000808252602082015290810161058a61059e565b815260006020820152606060409091015290565b604080516060810190915260008152602081016105b96105cb565b81526020016105c66105e9565b905290565b60405180606001604052806003906020820280368337509192915050565b6040518060a0016040528060001515815260200161060561061e565b8152606060208201819052600060408301529081015290565b6040518060400160405280606081526020016105c65b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b818110156106785760208185018101518683018201520161065c565b8181111561068a576000602083870101525b50601f01601f19169290920160200192915050565b6000602080835283516080828501526106bb60a0850182610652565b905081850151601f1960408187850301818801526106d98484610652565b9350808801519250818785030160608801526060840165ffffffffffff19845151168552858401516060878701528182905060a08701925060005b600281101561089d57878403605f19018252825180516001600160a01b0390811686528a8201516001600160b01b0319168b8701528682015160a0888801819052815167ffffffffffffffff191690880152808c015160c0880160005b600381101561078e5782518252918e0191908e0190600101610771565b50505087810151905060a0610120880152805115156101408801528b81015160a06101608901528051896101e08a01526107cc6102208a0182610652565b918e0151919050610200890160005b60018110156107fa57835186168252928f0192908f01906001016107db565b505089830151935061013f19915081898203016101808a015261081d8185610652565b935050606082015161083b6101a08a01826001600160a01b03169052565b506080820151915080888403016101c0890152506108598282610652565b915050606082015161086f606088018215159052565b506080820151915085810360808701526108898183610652565b955050509188019190880190600101610714565b505050818401511515858301526060890151888203840160808a015295506108c58187610652565b999850505050505050505056fe4d6f6f20c3a9f09f9a80c3a9206f20206f6f6fc3a94d206f206f206ff09f9a806f6f6fc3a96ff09f9a806f4d6f4d6f6f20c3a9f09f9a806f4d4d6f6f6f6f4d6ff09f9a80f09f9a806f6f206f6ff09f9a8020c3a94dc3a96f4d6f6fc3a94d4d6ff09f9a80f09f9a806f206f4d6f6f20c3a9f09f9a806f6f6f20f09f9a8020c3a9f09f9a804df09f9a804dc3a96ff09f9a806ff09f9a80f09f9a80c3a9c3a96f6ff09f9a804d20206f4df09f9a806f4df09f9a806f6f4d20f09f9a804d6f4dc3a9c3a9f09f9a804d6f204d20204dc3a9204d6f6f4d6f6f4d6f6f20c3a9f09f9a8020f09f9a806f6f6f4d6f6f206f206f4d6f2020204d6f6f4d20c3a9f09f9a806f6ff09f9a80c3a9f09f9a806f20c3a9c3a9c3a9f09f9a804d6ff09f9a806f204d6f6fc3a9c3a9204df09f9a80204d6f6f20c3a9f09f9a80f09f9a80f09f9a806f4d206fc3a94df09f9a804dc3a96f6ff09f9a804d6f6f20c3a9f09f9a806f6ff09f9a806f4d4df09f9a80c3a9206f4d6f6f20f09f9a80f09f9a804d6ff09f9a806f4df09f9a80f09f9a80206fc3a96ff09f9a806f6f6ff09f9a80f09f9a806fc3a96f4d6f6f20c3a9f09f9a804d4d6f20f09f9a80c3a96ff09f9a80c3a94df09f9a80204da2646970667358221220dc860a7096d37cc7f1f58a81f44112cd2dc7b86a8df59472f9767bc4704bb47064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_da4d5856 {\n bytes26 s_0;\n }\n\n struct S_ab97f69c {\n string s_0;\n address[1] s_1;\n }\n\n struct S_1d1481e8 {\n bool s_0;\n S_ab97f69c s_1;\n string s_2;\n address s_3;\n string s_4;\n }\n\n struct S_ab615d82 {\n bytes24 s_0;\n uint256[3] s_1;\n S_1d1481e8 s_2;\n }\n\n struct S_6c82fdcb {\n address s_0;\n bytes10 s_1;\n S_ab615d82 s_2;\n bool s_3;\n string s_4;\n }\n\n struct S_d581539c {\n S_da4d5856 s_0;\n S_6c82fdcb[2] s_1;\n bool s_2;\n }\n\n struct S_dc8181f2 {\n string s_0;\n string s_1;\n S_d581539c s_2;\n string s_3;\n }\n\n function test () public pure returns (S_dc8181f2 memory) {\n S_dc8181f2 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀🚀🚀oM oéM🚀Méoo🚀\";\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r.s_1 = r_1;\n }\n {\n S_d581539c memory r_2;\n {\n S_da4d5856 memory r_2_0;\n {\n bytes26 r_2_0_0 = bytes26(0xf6a6eda8895b61d1f31666d33a67c4149f034dff5becb37c29a8);\n r_2_0.s_0 = r_2_0_0;\n }\n r_2.s_0 = r_2_0;\n }\n {\n S_6c82fdcb[2] memory r_2_1;\n {\n S_6c82fdcb memory r_2_1_0;\n {\n address r_2_1_0_0 = 0x0c847b6BAEc673F9589bFb3fabc98F6e1528bd64;\n r_2_1_0.s_0 = r_2_1_0_0;\n }\n {\n bytes10 r_2_1_0_1 = bytes10(0xaafc73f5c8c5768ea720);\n r_2_1_0.s_1 = r_2_1_0_1;\n }\n {\n S_ab615d82 memory r_2_1_0_2;\n {\n bytes24 r_2_1_0_2_0 = bytes24(0x3bef3ff4511334eaff1ed84e9a8d1e82b1c3684abd026524);\n r_2_1_0_2.s_0 = r_2_1_0_2_0;\n }\n {\n uint256[3] memory r_2_1_0_2_1;\n {\n uint256 r_2_1_0_2_1_0 = 24607535201678916201050698634880289647537422983556649388218167511173562850304;\n r_2_1_0_2_1[0] = r_2_1_0_2_1_0;\n }\n {\n uint256 r_2_1_0_2_1_1 = 81972837835788828705103392840108708057772341177229323827543342192841539225697;\n r_2_1_0_2_1[1] = r_2_1_0_2_1_1;\n }\n {\n uint256 r_2_1_0_2_1_2 = 58378743444386562888477130415325848584338368793290400661916654532297228950613;\n r_2_1_0_2_1[2] = r_2_1_0_2_1_2;\n }\n r_2_1_0_2.s_1 = r_2_1_0_2_1;\n }\n {\n S_1d1481e8 memory r_2_1_0_2_2;\n {\n bool r_2_1_0_2_2_0 = false;\n r_2_1_0_2_2.s_0 = r_2_1_0_2_2_0;\n }\n {\n S_ab97f69c memory r_2_1_0_2_2_1;\n {\n string memory r_2_1_0_2_2_1_0 = unicode\"Moo é🚀 🚀oooMoo o oMo MooM é🚀oo🚀é🚀o ééé🚀Mo🚀o Mooéé M🚀 \";\n r_2_1_0_2_2_1.s_0 = r_2_1_0_2_2_1_0;\n }\n {\n address[1] memory r_2_1_0_2_2_1_1;\n {\n address r_2_1_0_2_2_1_1_0 = 0x446a4969c1663A24516c72907Ccd8C5911C97039;\n r_2_1_0_2_2_1_1[0] = r_2_1_0_2_2_1_1_0;\n }\n r_2_1_0_2_2_1.s_1 = r_2_1_0_2_2_1_1;\n }\n r_2_1_0_2_2.s_1 = r_2_1_0_2_2_1;\n }\n {\n string memory r_2_1_0_2_2_2 = unicode\"Moo é🚀MMo 🚀éo🚀éM🚀 M\";\n r_2_1_0_2_2.s_2 = r_2_1_0_2_2_2;\n }\n {\n address r_2_1_0_2_2_3 = 0x4AE9356B82B1A62d299c909417D4eAb9bFCbdF05;\n r_2_1_0_2_2.s_3 = r_2_1_0_2_2_3;\n }\n {\n string memory r_2_1_0_2_2_4 = unicode\"Moo é🚀é o oooéM o o o🚀oooéo🚀oMo\";\n r_2_1_0_2_2.s_4 = r_2_1_0_2_2_4;\n }\n r_2_1_0_2.s_2 = r_2_1_0_2_2;\n }\n r_2_1_0.s_2 = r_2_1_0_2;\n }\n {\n bool r_2_1_0_3 = false;\n r_2_1_0.s_3 = r_2_1_0_3;\n }\n {\n string memory r_2_1_0_4 = unicode\"Moo é🚀\";\n r_2_1_0.s_4 = r_2_1_0_4;\n }\n r_2_1[0] = r_2_1_0;\n }\n {\n S_6c82fdcb memory r_2_1_1;\n {\n address r_2_1_1_0 = 0xde3Ac83c9452708159D383D23764423d7E0eaD99;\n r_2_1_1.s_0 = r_2_1_1_0;\n }\n {\n bytes10 r_2_1_1_1 = bytes10(0x1e02622e6390be9b7be4);\n r_2_1_1.s_1 = r_2_1_1_1;\n }\n {\n S_ab615d82 memory r_2_1_1_2;\n {\n bytes24 r_2_1_1_2_0 = bytes24(0xf752cca8f91a2612bbd4ce3a2aff3b282f0f440aa0fbb697);\n r_2_1_1_2.s_0 = r_2_1_1_2_0;\n }\n {\n uint256[3] memory r_2_1_1_2_1;\n {\n uint256 r_2_1_1_2_1_0 = 70930780465373985931377451328516251316675573976826907720586119233112870519143;\n r_2_1_1_2_1[0] = r_2_1_1_2_1_0;\n }\n {\n uint256 r_2_1_1_2_1_1 = 41157697918880313273063964244577739342008280988357786627971632771490057183766;\n r_2_1_1_2_1[1] = r_2_1_1_2_1_1;\n }\n {\n uint256 r_2_1_1_2_1_2 = 23101050293274233770460807469475357545923971729533207878198168984220049534309;\n r_2_1_1_2_1[2] = r_2_1_1_2_1_2;\n }\n r_2_1_1_2.s_1 = r_2_1_1_2_1;\n }\n {\n S_1d1481e8 memory r_2_1_1_2_2;\n {\n bool r_2_1_1_2_2_0 = false;\n r_2_1_1_2_2.s_0 = r_2_1_1_2_2_0;\n }\n {\n S_ab97f69c memory r_2_1_1_2_2_1;\n {\n string memory r_2_1_1_2_2_1_0 = unicode\"Moo é🚀oo🚀oMM🚀é oMoo 🚀🚀Mo🚀oM🚀🚀 oéo🚀ooo🚀🚀oéo\";\n r_2_1_1_2_2_1.s_0 = r_2_1_1_2_2_1_0;\n }\n {\n address[1] memory r_2_1_1_2_2_1_1;\n {\n address r_2_1_1_2_2_1_1_0 = 0x754ab0f13712755520Be4429864754C2cbA97D19;\n r_2_1_1_2_2_1_1[0] = r_2_1_1_2_2_1_1_0;\n }\n r_2_1_1_2_2_1.s_1 = r_2_1_1_2_2_1_1;\n }\n r_2_1_1_2_2.s_1 = r_2_1_1_2_2_1;\n }\n {\n string memory r_2_1_1_2_2_2 = unicode\"Moo é🚀ooo 🚀 é🚀M🚀Méo🚀o🚀🚀ééoo🚀M oM🚀oM🚀ooM 🚀MoMéé🚀Mo M Mé MooMoo\";\n r_2_1_1_2_2.s_2 = r_2_1_1_2_2_2;\n }\n {\n address r_2_1_1_2_2_3 = 0x5909C1B38CE819A8fb83f6c317fb372E38267DBE;\n r_2_1_1_2_2.s_3 = r_2_1_1_2_2_3;\n }\n {\n string memory r_2_1_1_2_2_4 = unicode\"Moo é🚀M M\";\n r_2_1_1_2_2.s_4 = r_2_1_1_2_2_4;\n }\n r_2_1_1_2.s_2 = r_2_1_1_2_2;\n }\n r_2_1_1.s_2 = r_2_1_1_2;\n }\n {\n bool r_2_1_1_3 = true;\n r_2_1_1.s_3 = r_2_1_1_3;\n }\n {\n string memory r_2_1_1_4 = unicode\"Moo é🚀\";\n r_2_1_1.s_4 = r_2_1_1_4;\n }\n r_2_1[1] = r_2_1_1;\n }\n r_2.s_1 = r_2_1;\n }\n {\n bool r_2_2 = true;\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀oMMooooMo🚀🚀oo oo🚀 éMéoMooéMMo🚀🚀o o\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000092000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a80f09f9a80f09f9a806f4d206fc3a94df09f9a804dc3a96f6ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000f6a6eda8895b61d1f31666d33a67c4149f034dff5becb37c29a800000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003e00000000000000000000000000c847b6baec673f9589bfb3fabc98f6e1528bd64aafc73f5c8c5768ea7200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003603bef3ff4511334eaff1ed84e9a8d1e82b1c3684abd026524000000000000000036675f113bb60ea4ddfd04422908bd7579fc3ea8842bce8f49f869251ac75c00b53afb66e5ea34ca036f8f4c55b2fe3d1eb7cb8d687ea2d5d3d7a42fb39c8861811132a68880db2766e66e6a71396f2b3b9c16257f7eb840df86d0cd734a1c5500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001600000000000000000000000004ae9356b82b1a62d299c909417d4eab9bfcbdf0500000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000446a4969c1663a24516c72907ccd8c5911c9703900000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a8020f09f9a806f6f6f4d6f6f206f206f4d6f2020204d6f6f4d20c3a9f09f9a806f6ff09f9a80c3a9f09f9a806f20c3a9c3a9c3a9f09f9a804d6ff09f9a806f204d6f6fc3a9c3a9204df09f9a802000000000000000000000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a804d4d6f20f09f9a80c3a96ff09f9a80c3a94df09f9a80204d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a80c3a9206f20206f6f6fc3a94d206f206f206ff09f9a806f6f6fc3a96ff09f9a806f4d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000de3ac83c9452708159d383d23764423d7e0ead991e02622e6390be9b7be40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000380f752cca8f91a2612bbd4ce3a2aff3b282f0f440aa0fbb69700000000000000009cd16627c0930dbc1e32d629fe886734a32fdabc311bdad8ab6c6bb5b20481675afe6e76b03ebea5e89e3cbf01006de8effc0067d7b0a3b108a1c664550662163312bb2a59fd607fc13406136aa8f7be0df97282b7aa08a32972a0f82fcaed6500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001600000000000000000000000005909c1b38ce819a8fb83f6c317fb372e38267dbe00000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000754ab0f13712755520be4429864754c2cba97d19000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a806f6ff09f9a806f4d4df09f9a80c3a9206f4d6f6f20f09f9a80f09f9a804d6ff09f9a806f4df09f9a80f09f9a80206fc3a96ff09f9a806f6f6ff09f9a80f09f9a806fc3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006b4d6f6f20c3a9f09f9a806f6f6f20f09f9a8020c3a9f09f9a804df09f9a804dc3a96ff09f9a806ff09f9a80f09f9a80c3a9c3a96f6ff09f9a804d20206f4df09f9a806f4df09f9a806f6f4d20f09f9a804d6f4dc3a9c3a9f09f9a804d6f204d20204dc3a9204d6f6f4d6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a804d204d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a806f4d4d6f6f6f6f4d6ff09f9a80f09f9a806f6f206f6ff09f9a8020c3a94dc3a96f4d6f6fc3a94d4d6ff09f9a80f09f9a806f206f0000" + }, + { + "name": "random-(string[],bytes32,string,(bytes9,string),(string[3],(bool,int,address),int168[4],(bytes10,uint160,string,string[3],bool),address))", + "type": "(string[],bytes32,string,(bytes9,string),(string[3],(bool,int,address),int168[4],(bytes10,uint160,string,string[3],bool),address))", + "value": [ + [ + "Moo é🚀🚀éM oo🚀🚀oé ooééM oMé M oo🚀é🚀é🚀éM Méoé oMé Mo oo M", + "Moo é🚀o🚀🚀é🚀 M M🚀éMoé🚀éMMM🚀🚀 🚀 éMoéooo🚀🚀oooé🚀ooo é", + "Moo é🚀🚀M Méé🚀M🚀o🚀ooMooooé" + ], + "0x35b58bc6b2e86a149137011d9e79f67ccf910408cf850eb60c967fc151e66507", + "Moo é🚀", + ["0x1ab9e6de4300b3e710", "Moo é🚀"], + [ + ["Moo é🚀oooéo🚀🚀ééo", "Moo é🚀o🚀ooM🚀 ooo éoéoMoéé o é🚀éo oMé", "Moo é🚀"], + [ + true, + "-52343328100017934614010995073651536382019702561228134622071359108840623668748", + "0xC798Ed1e821FB8f23B25aE912158F45F9D5f46e4" + ], + [ + "-173666669972844002299230817627983981568935346646981", + "117431028151454856015126677031743287486687349902616", + "103436833516638214675123097022239786901995220917460", + "173248718569683442958681505682999101287603201186975" + ], + [ + "0xebe2dd840f9df83f1f72", + "1187798663603825457181228610184939028777684659873", + "Moo é🚀oo MoM🚀Moo🚀o 🚀 M🚀Mo oéoooé 🚀é oo", + [ + "Moo é🚀🚀🚀éo🚀é🚀éo oM🚀🚀🚀 🚀ooMéoo🚀é éooM🚀éM🚀oéM🚀🚀 🚀🚀Moéo🚀éo o🚀o ", + "Moo é🚀🚀oéé o é Mo🚀é", + "Moo é🚀oé oé éoM🚀M é🚀" + ], + false + ], + "0x172fC64837f4dE7271f06D6b2880485B817eb42f" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀éM oo🚀🚀oé ooééM oMé M oo🚀é🚀é🚀éM Méoé oMé Mo oo M" + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀é🚀 M M🚀éMoé🚀éMMM🚀🚀 🚀 éMoéooo🚀🚀oooé🚀ooo é" + }, + { + "type": "string", + "value": "Moo é🚀🚀M Méé🚀M🚀o🚀ooMooooé" + } + ] + }, + { + "type": "hexstring", + "value": "0x35b58bc6b2e86a149137011d9e79f67ccf910408cf850eb60c967fc151e66507" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x1ab9e6de4300b3e710" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oooéo🚀🚀ééo" + }, + { + "type": "string", + "value": "Moo é🚀o🚀ooM🚀 ooo éoéoMoéé o é🚀éo oMé" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-52343328100017934614010995073651536382019702561228134622071359108840623668748" + }, + { + "type": "address", + "value": "0xC798Ed1e821FB8f23B25aE912158F45F9D5f46e4" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-173666669972844002299230817627983981568935346646981" + }, + { + "type": "number", + "value": "117431028151454856015126677031743287486687349902616" + }, + { + "type": "number", + "value": "103436833516638214675123097022239786901995220917460" + }, + { + "type": "number", + "value": "173248718569683442958681505682999101287603201186975" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xebe2dd840f9df83f1f72" + }, + { + "type": "number", + "value": "1187798663603825457181228610184939028777684659873" + }, + { + "type": "string", + "value": "Moo é🚀oo MoM🚀Moo🚀o 🚀 M🚀Mo oéoooé 🚀é oo" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀éo🚀é🚀éo oM🚀🚀🚀 🚀ooMéoo🚀é éooM🚀éM🚀oéM🚀🚀 🚀🚀Moéo🚀éo o🚀o " + }, + { + "type": "string", + "value": "Moo é🚀🚀oéé o é Mo🚀é" + }, + { + "type": "string", + "value": "Moo é🚀oé oé éoM🚀M é🚀" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x172fC64837f4dE7271f06D6b2880485B817eb42f" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610a72806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061073c565b60405180910390f35b610056610432565b61005e610432565b60408051600380825260808201909252600091816020015b6060815260200190600190039081610076579050509050600060405180608001604052806059815260200161093b60599139905080826000815181106100be576100be61080b565b60200260200101819052505060006040518060800160405280605f8152602001610822605f9139905080826001815181106100fb576100fb61080b565b60200260200101819052505060006040518060600160405280602c81526020016109b6602c9139905080826002815181106101385761013861080b565b602090810291909101810191909152918352507f35b58bc6b2e86a149137011d9e79f67ccf910408cf850eb60c967fc151e6650782820152604080518082018252600a808252689adede418753e13f3560b71b828501819052838601929092528251808401845260608186018181526801ab9e6de4300b3e7160bc1b835285518087019096529285529484019290925291909152908201526101d861048e565b6101e06104e8565b604080518082018252601d81527f4d6f6f20c3a9f09f9a806f6f6fc3a96ff09f9a80f09f9a80c3a9c3a96f0000006020808301919091529083528151606081019092526039808352600092916109e290830139602083810191909152604080518082018252600a8152689adede418753e13f3560b71b81840152818501529284528251606081018452600181527f8c46b9e6a3bf4699bcccf04fcc1f50cf2dbc63730645d744fb6fae40037081f48183015273c798ed1e821fb8f23b25ae912158f45f9d5f46e493810193909352830191909152506102bd61050f565b7476d3dad061fde532422672592d9e541dbb05c12fc41981527450597d6bd43871df5d898f5a42f9387e6df2c10d1860208201527446c63c07e06259083c957c89bf9a5cfa1cab4c5cd460408083019190915274768aa53992a876df4416d33617d12ebf9667711c9f606083015282015261033661052d565b6975f16ec207cefc1f8fb960b11b815273d00ebbf3738edceb905a9b4e66e30d992ce36ea16020808301919091526040805160608101909152603c8082526000926108ff9083013960408301525061038c6104e8565b60006040518060a00160405280607e8152602001610881607e9139825250604080516060810190915260228082526000919061099460208301399050808260016020020181905250506000604051806060016040528060228152602001610a1b6022913960408301525060608281019190915260006080808401919091529083019190915273172fc64837f4de7271f06d6b2880485b817eb42f82820152820152919050565b6040518060a0016040528060608152602001600080191681526020016060815260200161047c604051806040016040528060006001600160b81b0319168152602001606081525090565b815260200161048961048e565b905290565b6040518060a001604052806104a16104e8565b815260408051606081018252600080825260208281018290529282015291019081526020016104ce61050f565b81526020016104db61052d565b8152600060209091015290565b60405180606001604052806003905b60608152602001906001900390816104f75790505090565b60405180608001604052806004906020820280368337509192915050565b6040805160a0810182526000808252602082015260609181018290529081016104db6104e8565b6000815180845260005b8181101561057a5760208185018101518683018201520161055e565b8181111561058c576000602083870101525b50601f01601f19169290920160200192915050565b68ffffffffffffffffff60b81b815116825260006020820151604060208501526105ce6040850182610554565b949350505050565b600082606081018360005b60038110156106105783830387526105fa838351610554565b60209788019790935091909101906001016105e1565b509095945050505050565b80516001600160b01b03191682526020808201516001600160a01b03169083015260408082015160a091840182905260009161065990850182610554565b90506060830151848203606086015261067282826105d6565b9150506080830151151560808501528091505092915050565b600061014082518185526106a1828601826105d6565b915050602080840151805115158287015281810151604087015260018060a01b0360408201511660608701525060408401516080860160005b60048110156106fa57825160140b825291830191908301906001016106da565b505050506060830151848203610100860152610716828261061b565b91505060808301516107346101208601826001600160a01b03169052565b509392505050565b6000602080835260c08301845160a08386015281815180845260e08701915060e08160051b8801019350848301925060005b8181101561079c5760df1988860301835261078a858551610554565b9450928501929185019160010161076e565b5050505081850151604085015260408501519150601f19808583030160608601526107c78284610554565b925060608601519150808584030160808601526107e483836105a1565b925060808601519150808584030160a086015250610802828261068b565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806ff09f9a80f09f9a80c3a9f09f9a80204d204df09f9a80c3a94d6fc3a9f09f9a80c3a94d4d4df09f9a80f09f9a8020f09f9a8020c3a94d6fc3a96f6f6ff09f9a80f09f9a806f6f6fc3a9f09f9a806f6f6f2020c3a94d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a96ff09f9a80c3a9f09f9a80c3a96f20206f4df09f9a80f09f9a80f09f9a8020f09f9a806f6f4dc3a96f6ff09f9a80c3a920c3a96f6f4df09f9a80c3a94df09f9a806fc3a94df09f9a80f09f9a8020f09f9a80f09f9a804d6fc3a96ff09f9a80c3a96f206ff09f9a806f204d6f6f20c3a9f09f9a806f6f204d6f4df09f9a804d6f6ff09f9a806f20f09f9a80204df09f9a804d6f206fc3a96f6f6fc3a920f09f9a80c3a9206f6f4d6f6f20c3a9f09f9a80f09f9a80c3a94d206f6ff09f9a80f09f9a806fc3a9206f6fc3a9c3a94d206f4dc3a9204d206f6ff09f9a80c3a9f09f9a80c3a9f09f9a80c3a94d204dc3a96fc3a9206f4dc3a9204d6f206f6f20204d4d6f6f20c3a9f09f9a80f09f9a806fc3a9c3a9206f20c3a920204d6ff09f9a80c3a94d6f6f20c3a9f09f9a80f09f9a804d204dc3a9c3a9f09f9a804df09f9a806ff09f9a806f6f4d6f6f6f6fc3a94d6f6f20c3a9f09f9a806ff09f9a806f6f4df09f9a8020206f6f6f20c3a96fc3a96f4d6fc3a9c3a9206f20c3a9f09f9a80c3a96f206f4dc3a94d6f6f20c3a9f09f9a806fc3a9206fc3a920c3a96f4df09f9a804d20c3a9f09f9a80a26469706673582212200596b82b84192c0f644f46052dd1fac0f770a513c41d5c967095ade8a55da6ba64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_64dabfbe {\n bytes9 s_0;\n string s_1;\n }\n\n struct S_1aa26cc8 {\n bool s_0;\n int256 s_1;\n address s_2;\n }\n\n struct S_e37753f8 {\n bytes10 s_0;\n uint160 s_1;\n string s_2;\n string[3] s_3;\n bool s_4;\n }\n\n struct S_cc0bd079 {\n string[3] s_0;\n S_1aa26cc8 s_1;\n int168[4] s_2;\n S_e37753f8 s_3;\n address s_4;\n }\n\n struct S_a29b54bc {\n string[] s_0;\n bytes32 s_1;\n string s_2;\n S_64dabfbe s_3;\n S_cc0bd079 s_4;\n }\n\n function test () public pure returns (S_a29b54bc memory) {\n S_a29b54bc memory r;\n {\n string[] memory r_0 = new string[](3);\n {\n string memory r_0_0 = unicode\"Moo é🚀🚀éM oo🚀🚀oé ooééM oMé M oo🚀é🚀é🚀éM Méoé oMé Mo oo M\";\n r_0[0] = r_0_0;\n }\n {\n string memory r_0_1 = unicode\"Moo é🚀o🚀🚀é🚀 M M🚀éMoé🚀éMMM🚀🚀 🚀 éMoéooo🚀🚀oooé🚀ooo é\";\n r_0[1] = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀🚀M Méé🚀M🚀o🚀ooMooooé\";\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n bytes32 r_1 = bytes32(0x35b58bc6b2e86a149137011d9e79f67ccf910408cf850eb60c967fc151e66507);\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀\";\n r.s_2 = r_2;\n }\n {\n S_64dabfbe memory r_3;\n {\n bytes9 r_3_0 = bytes9(0x1ab9e6de4300b3e710);\n r_3.s_0 = r_3_0;\n }\n {\n string memory r_3_1 = unicode\"Moo é🚀\";\n r_3.s_1 = r_3_1;\n }\n r.s_3 = r_3;\n }\n {\n S_cc0bd079 memory r_4;\n {\n string[3] memory r_4_0;\n {\n string memory r_4_0_0 = unicode\"Moo é🚀oooéo🚀🚀ééo\";\n r_4_0[0] = r_4_0_0;\n }\n {\n string memory r_4_0_1 = unicode\"Moo é🚀o🚀ooM🚀 ooo éoéoMoéé o é🚀éo oMé\";\n r_4_0[1] = r_4_0_1;\n }\n {\n string memory r_4_0_2 = unicode\"Moo é🚀\";\n r_4_0[2] = r_4_0_2;\n }\n r_4.s_0 = r_4_0;\n }\n {\n S_1aa26cc8 memory r_4_1;\n {\n bool r_4_1_0 = true;\n r_4_1.s_0 = r_4_1_0;\n }\n {\n int r_4_1_1 = -52343328100017934614010995073651536382019702561228134622071359108840623668748;\n r_4_1.s_1 = r_4_1_1;\n }\n {\n address r_4_1_2 = 0xC798Ed1e821FB8f23B25aE912158F45F9D5f46e4;\n r_4_1.s_2 = r_4_1_2;\n }\n r_4.s_1 = r_4_1;\n }\n {\n int168[4] memory r_4_2;\n {\n int168 r_4_2_0 = -173666669972844002299230817627983981568935346646981;\n r_4_2[0] = r_4_2_0;\n }\n {\n int168 r_4_2_1 = 117431028151454856015126677031743287486687349902616;\n r_4_2[1] = r_4_2_1;\n }\n {\n int168 r_4_2_2 = 103436833516638214675123097022239786901995220917460;\n r_4_2[2] = r_4_2_2;\n }\n {\n int168 r_4_2_3 = 173248718569683442958681505682999101287603201186975;\n r_4_2[3] = r_4_2_3;\n }\n r_4.s_2 = r_4_2;\n }\n {\n S_e37753f8 memory r_4_3;\n {\n bytes10 r_4_3_0 = bytes10(0xebe2dd840f9df83f1f72);\n r_4_3.s_0 = r_4_3_0;\n }\n {\n uint160 r_4_3_1 = 1187798663603825457181228610184939028777684659873;\n r_4_3.s_1 = r_4_3_1;\n }\n {\n string memory r_4_3_2 = unicode\"Moo é🚀oo MoM🚀Moo🚀o 🚀 M🚀Mo oéoooé 🚀é oo\";\n r_4_3.s_2 = r_4_3_2;\n }\n {\n string[3] memory r_4_3_3;\n {\n string memory r_4_3_3_0 = unicode\"Moo é🚀🚀🚀éo🚀é🚀éo oM🚀🚀🚀 🚀ooMéoo🚀é éooM🚀éM🚀oéM🚀🚀 🚀🚀Moéo🚀éo o🚀o \";\n r_4_3_3[0] = r_4_3_3_0;\n }\n {\n string memory r_4_3_3_1 = unicode\"Moo é🚀🚀oéé o é Mo🚀é\";\n r_4_3_3[1] = r_4_3_3_1;\n }\n {\n string memory r_4_3_3_2 = unicode\"Moo é🚀oé oé éoM🚀M é🚀\";\n r_4_3_3[2] = r_4_3_3_2;\n }\n r_4_3.s_3 = r_4_3_3;\n }\n {\n bool r_4_3_4 = false;\n r_4_3.s_4 = r_4_3_4;\n }\n r_4.s_3 = r_4_3;\n }\n {\n address r_4_4 = 0x172fC64837f4dE7271f06D6b2880485B817eb42f;\n r_4.s_4 = r_4_4;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a035b58bc6b2e86a149137011d9e79f67ccf910408cf850eb60c967fc151e66507000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a80f09f9a80c3a94d206f6ff09f9a80f09f9a806fc3a9206f6fc3a9c3a94d206f4dc3a9204d206f6ff09f9a80c3a9f09f9a80c3a9f09f9a80c3a94d204dc3a96fc3a9206f4dc3a9204d6f206f6f20204d00000000000000000000000000000000000000000000000000000000000000000000000000005f4d6f6f20c3a9f09f9a806ff09f9a80f09f9a80c3a9f09f9a80204d204df09f9a80c3a94d6fc3a9f09f9a80c3a94d4d4df09f9a80f09f9a8020f09f9a8020c3a94d6fc3a96f6f6ff09f9a80f09f9a806f6f6fc3a9f09f9a806f6f6f2020c3a900000000000000000000000000000000000000000000000000000000000000002c4d6f6f20c3a9f09f9a80f09f9a804d204dc3a9c3a9f09f9a804df09f9a806ff09f9a806f6f4d6f6f6f6fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000001ab9e6de4300b3e71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000018c46b9e6a3bf4699bcccf04fcc1f50cf2dbc63730645d744fb6fae40037081f4000000000000000000000000c798ed1e821fb8f23b25ae912158f45f9d5f46e4ffffffffffffffffffffff892c252f9e021acdbdd98da6d261abe244fa3ed03b000000000000000000000050597d6bd43871df5d898f5a42f9387e6df2c10d18000000000000000000000046c63c07e06259083c957c89bf9a5cfa1cab4c5cd40000000000000000000000768aa53992a876df4416d33617d12ebf9667711c9f0000000000000000000000000000000000000000000000000000000000000280000000000000000000000000172fc64837f4de7271f06d6b2880485b817eb42f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a806f6f6fc3a96ff09f9a80f09f9a80c3a9c3a96f00000000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a806ff09f9a806f6f4df09f9a8020206f6f6f20c3a96fc3a96f4d6fc3a9c3a9206f20c3a9f09f9a80c3a96f206f4dc3a900000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000ebe2dd840f9df83f1f7200000000000000000000000000000000000000000000000000000000000000000000d00ebbf3738edceb905a9b4e66e30d992ce36ea100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a806f6f204d6f4df09f9a804d6f6ff09f9a806f20f09f9a80204df09f9a804d6f206fc3a96f6f6fc3a920f09f9a80c3a9206f6f00000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007e4d6f6f20c3a9f09f9a80f09f9a80f09f9a80c3a96ff09f9a80c3a9f09f9a80c3a96f20206f4df09f9a80f09f9a80f09f9a8020f09f9a806f6f4dc3a96f6ff09f9a80c3a920c3a96f6f4df09f9a80c3a94df09f9a806fc3a94df09f9a80f09f9a8020f09f9a80f09f9a804d6fc3a96ff09f9a80c3a96f206ff09f9a806f20000000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a80f09f9a806fc3a9c3a9206f20c3a920204d6ff09f9a80c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a806fc3a9206fc3a920c3a96f4df09f9a804d20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((string,(string,(bool[4][4],int104,address,bool[1][2][])[2],bool,address)),string,(bool[][4],bytes24),address[])", + "type": "((string,(string,(bool[4][4],int104,address,bool[1][2][])[2],bool,address)),string,(bool[][4],bytes24),address[])", + "value": [ + [ + "Moo é🚀éM o MMooo é 🚀M🚀oMoMoéo", + [ + "Moo é🚀ooMMM MoéM🚀🚀MoooM é 🚀Mooéé", + [ + [ + [ + [true, false, false, true], + [false, false, true, true], + [false, false, true, false], + [false, false, true, false] + ], + "6579835414599432878651849958866", + "0xDd735426B9B18FE61F8B3c08F87DfB6869fd6c25", + [] + ], + [ + [ + [true, false, false, true], + [true, true, true, false], + [true, true, true, true], + [false, true, false, false] + ], + "1321381532277498459445726587890", + "0x7E033bAf2b9eaBDf84d3Ee3691dd454A8fe818D7", + [ + [[true], [false]], + [[true], [true]], + [[true], [true]] + ] + ] + ], + false, + "0x70487CE7700bE8A90F859D7bccf4C3F54De1A550" + ] + ], + "Moo é🚀éM", + [ + [ + [true, false, true, true], + [false, false, false, true], + [true, true], + [false, false, false, true] + ], + "0x56f033999a9f113d0543e46d73bdbec4104d1f2d0670557f" + ], + ["0x3e86232a17c3d1ec2f70D54CeE22e5Cc6542f5B4"] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éM o MMooo é 🚀M🚀oMoMoéo" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooMMM MoéM🚀🚀MoooM é 🚀Mooéé" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "number", + "value": "6579835414599432878651849958866" + }, + { + "type": "address", + "value": "0xDd735426B9B18FE61F8B3c08F87DfB6869fd6c25" + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "number", + "value": "1321381532277498459445726587890" + }, + { + "type": "address", + "value": "0x7E033bAf2b9eaBDf84d3Ee3691dd454A8fe818D7" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x70487CE7700bE8A90F859D7bccf4C3F54De1A550" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éM" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x56f033999a9f113d0543e46d73bdbec4104d1f2d0670557f" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x3e86232a17c3d1ec2f70D54CeE22e5Cc6542f5B4" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610d76806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610b29565b60405180910390f35b6100566107d1565b61005e6107d1565b610066610805565b60006040518060600160405280602b8152602001610ce4602b913982525061008c610824565b6000604051806060016040528060328152602001610d0f603291398252506100b2610852565b6100ba61087f565b6100c26108ab565b6100ca6108d8565b60018082526000602083018190526040830152606082015281526100ec6108d8565b600080825260208083019190915260016040830181905260608301528201526101136108d8565b6000808252602082018190526001604080840191909152606083019190915282015261013d6108d8565b60008082526020808301829052600160408085019190915260608085018490528501939093529284526c530c9849eb49ca71842f19e5d28484015273dd735426b9b18fe61f8b3c08f87dfb6869fd6c2584830152815181815292830190915290816101be565b6101ab6108f6565b8152602001906001900390816101a35790505b5060608301525081526101cf61087f565b6101d76108ab565b6101df6108d8565b60018082526000602083018190526040830152606082015281526102016108d8565b600180825260208083018290526040830191909152600060608301528201526102286108d8565b6001808252602082018190526040808301829052606083019190915282015261024f6108d8565b60008082526001602080840191909152604080840183905260608085018490528501939093529284526c10ad9d2f6edfda69c21e2cabf292840192909252737e033baf2b9eabdf84d3ee3691dd454a8fe818d783820152805160038082526080820190925290816020015b6102c26108f6565b8152602001906001900390816102ba5790505090506102df6108f6565b6102e7610923565b6001815281526102f5610923565b6000808252602083019190915282518291849161031457610314610ccd565b6020026020010181905250506103286108f6565b610330610923565b60018152815261033e610923565b60018082526020830191909152825182918491811061035f5761035f610ccd565b6020026020010181905250506103736108f6565b61037b610923565b600181528152610389610923565b60018152602082015281518190839060029081106103a9576103a9610ccd565b60209081029190910101525060608201528082600160209081029190910191909152838101929092525060006040808401919091527370487ce7700be8a90f859d7bccf4c3f54de1a5506060840152838201929092529183528051808201909152600d81526c4d6f6f20c3a9f09f9a80c3a94d60981b818301529082015261042f610941565b610437610961565b60408051600480825260a0820190925260009160208201608080368337019050509050600060019050808260008151811061047457610474610ccd565b602002602001019015159081151581525050506000808260018151811061049d5761049d610ccd565b6020026020010190151590811515815250505060006001905080826002815181106104ca576104ca610ccd565b6020026020010190151590811515815250505060006001905080826003815181106104f7576104f7610ccd565b9115156020928302919091019091015250815260408051600480825260a082019092526000918160200160208202803683370190505090506000808260008151811061054557610545610ccd565b602002602001019015159081151581525050506000808260018151811061056e5761056e610ccd565b602002602001019015159081151581525050506000808260028151811061059757610597610ccd565b6020026020010190151590811515815250505060006001905080826003815181106105c4576105c4610ccd565b9115156020928302919091018201528301919091525060408051600280825260608201909252600091816020016020820280368337019050509050600060019050808260008151811061061957610619610ccd565b60200260200101901515908115158152505050600060019050808260018151811061064657610646610ccd565b9115156020928302919091018201526040848101939093528251600480825260a082019094526000939092509082016080803683370190505090506000808260008151811061069757610697610ccd565b60200260200101901515908115158152505050600080826001815181106106c0576106c0610ccd565b60200260200101901515908115158152505050600080826002815181106106e9576106e9610ccd565b60200260200101901515908115158152505050600060019050808260038151811061071657610716610ccd565b9115156020928302919091018201526060840192909252509082527f56f033999a9f113d0543e46d73bdbec4104d1f2d0670557f000000000000000090820152604082810191909152805160018082528183019092526000918160200160208202803683370190505090506000733e86232a17c3d1ec2f70d54cee22e5cc6542f5b4905080826000815181106107ae576107ae610ccd565b6001600160a01b0390921660209283029190910190910152506060820152919050565b60405180608001604052806107e4610805565b8152602001606081526020016107f8610941565b8152602001606081525090565b60405180604001604052806060815260200161081f610824565b905290565b60405180608001604052806060815260200161083e610852565b815260006020820181905260409091015290565b60405180604001604052806002905b61086961087f565b8152602001906001900390816108615790505090565b60405180608001604052806108926108ab565b8152600060208201819052604082015260609081015290565b60405180608001604052806004905b6108c26108d8565b8152602001906001900390816108ba5790505090565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806002905b61090d610923565b8152602001906001900390816109055790505090565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280610954610961565b8152600060209091015290565b60405180608001604052806004905b60608152602001906001900390816109705790505090565b6000815180845260005b818110156109ae57602081850181015186830182015201610992565b818111156109c0576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610a4e5781518760005b6002811015610a385782518260005b6001811015610a25578251151582529188019190880190600101610a06565b50505091850191908501906001016109f7565b50505060409690960195908201906001016109e9565b509495945050505050565b8051604080845260009160c0850191850183805b6004811015610ac857878503603f19018352835180518087526020918201918088019190855b82811015610ab1578451151584529381019392810192600101610a93565b509197505094850194939093019250600101610a6d565b505050506020830151610ae8602086018267ffffffffffffffff19169052565b509392505050565b600081518084526020808501945080840160005b83811015610a4e5781516001600160a01b031687529582019590820190600101610b04565b600060208083528351608082850152805160408060a0870152610b4f60e0870183610988565b9150838301519250609f198683030160c0870152825160808352610b766080840182610988565b84860151848203858801529091508183810160005b6002811015610c3e578482038352835180518360005b6004811015610be55782518260005b6004811015610bcf57825115158252918f0191908f0190600101610bb0565b505050918c019160809190910190600101610ba1565b50505089810151610bfc610200850182600c0b9052565b50868101516001600160a01b0316610220840152606001516102606102408401819052610c2b908401826109d5565b948a0194938a0193925050600101610b8b565b508685015180151587870152935060608701519650610c6860608701886001600160a01b03169052565b878b01519750601f199650868a820301858b0152610c868189610988565b9750505050508087015191505081858403016060860152610ca78382610a59565b925050606085015181858403016080860152610cc38382610af0565b9695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80c3a94d206f20204d4d6f6f6f20c3a920f09f9a804df09f9a806f4d6f4d6fc3a96f4d6f6f20c3a9f09f9a806f6f4d4d4d20204d6fc3a94df09f9a80f09f9a804d6f6f6f4d20c3a920f09f9a804d6f6fc3a9c3a9a2646970667358221220db091d90849d3dd44bfe42ee9d5d6d7c0bbf1ef10a30f7c184d6a54ac3bc472864736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_ef8f5be7 {\n bool[4][4] s_0;\n int104 s_1;\n address s_2;\n bool[1][2][] s_3;\n }\n\n struct S_53cd2c90 {\n string s_0;\n S_ef8f5be7[2] s_1;\n bool s_2;\n address s_3;\n }\n\n struct S_91dfbffe {\n string s_0;\n S_53cd2c90 s_1;\n }\n\n struct S_e317eeee {\n bool[][4] s_0;\n bytes24 s_1;\n }\n\n struct S_c8a2c6fc {\n S_91dfbffe s_0;\n string s_1;\n S_e317eeee s_2;\n address[] s_3;\n }\n\n function test () public pure returns (S_c8a2c6fc memory) {\n S_c8a2c6fc memory r;\n {\n S_91dfbffe memory r_0;\n {\n string memory r_0_0 = unicode\"Moo é🚀éM o MMooo é 🚀M🚀oMoMoéo\";\n r_0.s_0 = r_0_0;\n }\n {\n S_53cd2c90 memory r_0_1;\n {\n string memory r_0_1_0 = unicode\"Moo é🚀ooMMM MoéM🚀🚀MoooM é 🚀Mooéé\";\n r_0_1.s_0 = r_0_1_0;\n }\n {\n S_ef8f5be7[2] memory r_0_1_1;\n {\n S_ef8f5be7 memory r_0_1_1_0;\n {\n bool[4][4] memory r_0_1_1_0_0;\n {\n bool[4] memory r_0_1_1_0_0_0;\n {\n bool r_0_1_1_0_0_0_0 = true;\n r_0_1_1_0_0_0[0] = r_0_1_1_0_0_0_0;\n }\n {\n bool r_0_1_1_0_0_0_1 = false;\n r_0_1_1_0_0_0[1] = r_0_1_1_0_0_0_1;\n }\n {\n bool r_0_1_1_0_0_0_2 = false;\n r_0_1_1_0_0_0[2] = r_0_1_1_0_0_0_2;\n }\n {\n bool r_0_1_1_0_0_0_3 = true;\n r_0_1_1_0_0_0[3] = r_0_1_1_0_0_0_3;\n }\n r_0_1_1_0_0[0] = r_0_1_1_0_0_0;\n }\n {\n bool[4] memory r_0_1_1_0_0_1;\n {\n bool r_0_1_1_0_0_1_0 = false;\n r_0_1_1_0_0_1[0] = r_0_1_1_0_0_1_0;\n }\n {\n bool r_0_1_1_0_0_1_1 = false;\n r_0_1_1_0_0_1[1] = r_0_1_1_0_0_1_1;\n }\n {\n bool r_0_1_1_0_0_1_2 = true;\n r_0_1_1_0_0_1[2] = r_0_1_1_0_0_1_2;\n }\n {\n bool r_0_1_1_0_0_1_3 = true;\n r_0_1_1_0_0_1[3] = r_0_1_1_0_0_1_3;\n }\n r_0_1_1_0_0[1] = r_0_1_1_0_0_1;\n }\n {\n bool[4] memory r_0_1_1_0_0_2;\n {\n bool r_0_1_1_0_0_2_0 = false;\n r_0_1_1_0_0_2[0] = r_0_1_1_0_0_2_0;\n }\n {\n bool r_0_1_1_0_0_2_1 = false;\n r_0_1_1_0_0_2[1] = r_0_1_1_0_0_2_1;\n }\n {\n bool r_0_1_1_0_0_2_2 = true;\n r_0_1_1_0_0_2[2] = r_0_1_1_0_0_2_2;\n }\n {\n bool r_0_1_1_0_0_2_3 = false;\n r_0_1_1_0_0_2[3] = r_0_1_1_0_0_2_3;\n }\n r_0_1_1_0_0[2] = r_0_1_1_0_0_2;\n }\n {\n bool[4] memory r_0_1_1_0_0_3;\n {\n bool r_0_1_1_0_0_3_0 = false;\n r_0_1_1_0_0_3[0] = r_0_1_1_0_0_3_0;\n }\n {\n bool r_0_1_1_0_0_3_1 = false;\n r_0_1_1_0_0_3[1] = r_0_1_1_0_0_3_1;\n }\n {\n bool r_0_1_1_0_0_3_2 = true;\n r_0_1_1_0_0_3[2] = r_0_1_1_0_0_3_2;\n }\n {\n bool r_0_1_1_0_0_3_3 = false;\n r_0_1_1_0_0_3[3] = r_0_1_1_0_0_3_3;\n }\n r_0_1_1_0_0[3] = r_0_1_1_0_0_3;\n }\n r_0_1_1_0.s_0 = r_0_1_1_0_0;\n }\n {\n int104 r_0_1_1_0_1 = 6579835414599432878651849958866;\n r_0_1_1_0.s_1 = r_0_1_1_0_1;\n }\n {\n address r_0_1_1_0_2 = 0xDd735426B9B18FE61F8B3c08F87DfB6869fd6c25;\n r_0_1_1_0.s_2 = r_0_1_1_0_2;\n }\n {\n bool[1][2][] memory r_0_1_1_0_3 = new bool[1][2][](0);\n r_0_1_1_0.s_3 = r_0_1_1_0_3;\n }\n r_0_1_1[0] = r_0_1_1_0;\n }\n {\n S_ef8f5be7 memory r_0_1_1_1;\n {\n bool[4][4] memory r_0_1_1_1_0;\n {\n bool[4] memory r_0_1_1_1_0_0;\n {\n bool r_0_1_1_1_0_0_0 = true;\n r_0_1_1_1_0_0[0] = r_0_1_1_1_0_0_0;\n }\n {\n bool r_0_1_1_1_0_0_1 = false;\n r_0_1_1_1_0_0[1] = r_0_1_1_1_0_0_1;\n }\n {\n bool r_0_1_1_1_0_0_2 = false;\n r_0_1_1_1_0_0[2] = r_0_1_1_1_0_0_2;\n }\n {\n bool r_0_1_1_1_0_0_3 = true;\n r_0_1_1_1_0_0[3] = r_0_1_1_1_0_0_3;\n }\n r_0_1_1_1_0[0] = r_0_1_1_1_0_0;\n }\n {\n bool[4] memory r_0_1_1_1_0_1;\n {\n bool r_0_1_1_1_0_1_0 = true;\n r_0_1_1_1_0_1[0] = r_0_1_1_1_0_1_0;\n }\n {\n bool r_0_1_1_1_0_1_1 = true;\n r_0_1_1_1_0_1[1] = r_0_1_1_1_0_1_1;\n }\n {\n bool r_0_1_1_1_0_1_2 = true;\n r_0_1_1_1_0_1[2] = r_0_1_1_1_0_1_2;\n }\n {\n bool r_0_1_1_1_0_1_3 = false;\n r_0_1_1_1_0_1[3] = r_0_1_1_1_0_1_3;\n }\n r_0_1_1_1_0[1] = r_0_1_1_1_0_1;\n }\n {\n bool[4] memory r_0_1_1_1_0_2;\n {\n bool r_0_1_1_1_0_2_0 = true;\n r_0_1_1_1_0_2[0] = r_0_1_1_1_0_2_0;\n }\n {\n bool r_0_1_1_1_0_2_1 = true;\n r_0_1_1_1_0_2[1] = r_0_1_1_1_0_2_1;\n }\n {\n bool r_0_1_1_1_0_2_2 = true;\n r_0_1_1_1_0_2[2] = r_0_1_1_1_0_2_2;\n }\n {\n bool r_0_1_1_1_0_2_3 = true;\n r_0_1_1_1_0_2[3] = r_0_1_1_1_0_2_3;\n }\n r_0_1_1_1_0[2] = r_0_1_1_1_0_2;\n }\n {\n bool[4] memory r_0_1_1_1_0_3;\n {\n bool r_0_1_1_1_0_3_0 = false;\n r_0_1_1_1_0_3[0] = r_0_1_1_1_0_3_0;\n }\n {\n bool r_0_1_1_1_0_3_1 = true;\n r_0_1_1_1_0_3[1] = r_0_1_1_1_0_3_1;\n }\n {\n bool r_0_1_1_1_0_3_2 = false;\n r_0_1_1_1_0_3[2] = r_0_1_1_1_0_3_2;\n }\n {\n bool r_0_1_1_1_0_3_3 = false;\n r_0_1_1_1_0_3[3] = r_0_1_1_1_0_3_3;\n }\n r_0_1_1_1_0[3] = r_0_1_1_1_0_3;\n }\n r_0_1_1_1.s_0 = r_0_1_1_1_0;\n }\n {\n int104 r_0_1_1_1_1 = 1321381532277498459445726587890;\n r_0_1_1_1.s_1 = r_0_1_1_1_1;\n }\n {\n address r_0_1_1_1_2 = 0x7E033bAf2b9eaBDf84d3Ee3691dd454A8fe818D7;\n r_0_1_1_1.s_2 = r_0_1_1_1_2;\n }\n {\n bool[1][2][] memory r_0_1_1_1_3 = new bool[1][2][](3);\n {\n bool[1][2] memory r_0_1_1_1_3_0;\n {\n bool[1] memory r_0_1_1_1_3_0_0;\n {\n bool r_0_1_1_1_3_0_0_0 = true;\n r_0_1_1_1_3_0_0[0] = r_0_1_1_1_3_0_0_0;\n }\n r_0_1_1_1_3_0[0] = r_0_1_1_1_3_0_0;\n }\n {\n bool[1] memory r_0_1_1_1_3_0_1;\n {\n bool r_0_1_1_1_3_0_1_0 = false;\n r_0_1_1_1_3_0_1[0] = r_0_1_1_1_3_0_1_0;\n }\n r_0_1_1_1_3_0[1] = r_0_1_1_1_3_0_1;\n }\n r_0_1_1_1_3[0] = r_0_1_1_1_3_0;\n }\n {\n bool[1][2] memory r_0_1_1_1_3_1;\n {\n bool[1] memory r_0_1_1_1_3_1_0;\n {\n bool r_0_1_1_1_3_1_0_0 = true;\n r_0_1_1_1_3_1_0[0] = r_0_1_1_1_3_1_0_0;\n }\n r_0_1_1_1_3_1[0] = r_0_1_1_1_3_1_0;\n }\n {\n bool[1] memory r_0_1_1_1_3_1_1;\n {\n bool r_0_1_1_1_3_1_1_0 = true;\n r_0_1_1_1_3_1_1[0] = r_0_1_1_1_3_1_1_0;\n }\n r_0_1_1_1_3_1[1] = r_0_1_1_1_3_1_1;\n }\n r_0_1_1_1_3[1] = r_0_1_1_1_3_1;\n }\n {\n bool[1][2] memory r_0_1_1_1_3_2;\n {\n bool[1] memory r_0_1_1_1_3_2_0;\n {\n bool r_0_1_1_1_3_2_0_0 = true;\n r_0_1_1_1_3_2_0[0] = r_0_1_1_1_3_2_0_0;\n }\n r_0_1_1_1_3_2[0] = r_0_1_1_1_3_2_0;\n }\n {\n bool[1] memory r_0_1_1_1_3_2_1;\n {\n bool r_0_1_1_1_3_2_1_0 = true;\n r_0_1_1_1_3_2_1[0] = r_0_1_1_1_3_2_1_0;\n }\n r_0_1_1_1_3_2[1] = r_0_1_1_1_3_2_1;\n }\n r_0_1_1_1_3[2] = r_0_1_1_1_3_2;\n }\n r_0_1_1_1.s_3 = r_0_1_1_1_3;\n }\n r_0_1_1[1] = r_0_1_1_1;\n }\n r_0_1.s_1 = r_0_1_1;\n }\n {\n bool r_0_1_2 = false;\n r_0_1.s_2 = r_0_1_2;\n }\n {\n address r_0_1_3 = 0x70487CE7700bE8A90F859D7bccf4C3F54De1A550;\n r_0_1.s_3 = r_0_1_3;\n }\n r_0.s_1 = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀éM\";\n r.s_1 = r_1;\n }\n {\n S_e317eeee memory r_2;\n {\n bool[][4] memory r_2_0;\n {\n bool[] memory r_2_0_0 = new bool[](4);\n {\n bool r_2_0_0_0 = true;\n r_2_0_0[0] = r_2_0_0_0;\n }\n {\n bool r_2_0_0_1 = false;\n r_2_0_0[1] = r_2_0_0_1;\n }\n {\n bool r_2_0_0_2 = true;\n r_2_0_0[2] = r_2_0_0_2;\n }\n {\n bool r_2_0_0_3 = true;\n r_2_0_0[3] = r_2_0_0_3;\n }\n r_2_0[0] = r_2_0_0;\n }\n {\n bool[] memory r_2_0_1 = new bool[](4);\n {\n bool r_2_0_1_0 = false;\n r_2_0_1[0] = r_2_0_1_0;\n }\n {\n bool r_2_0_1_1 = false;\n r_2_0_1[1] = r_2_0_1_1;\n }\n {\n bool r_2_0_1_2 = false;\n r_2_0_1[2] = r_2_0_1_2;\n }\n {\n bool r_2_0_1_3 = true;\n r_2_0_1[3] = r_2_0_1_3;\n }\n r_2_0[1] = r_2_0_1;\n }\n {\n bool[] memory r_2_0_2 = new bool[](2);\n {\n bool r_2_0_2_0 = true;\n r_2_0_2[0] = r_2_0_2_0;\n }\n {\n bool r_2_0_2_1 = true;\n r_2_0_2[1] = r_2_0_2_1;\n }\n r_2_0[2] = r_2_0_2;\n }\n {\n bool[] memory r_2_0_3 = new bool[](4);\n {\n bool r_2_0_3_0 = false;\n r_2_0_3[0] = r_2_0_3_0;\n }\n {\n bool r_2_0_3_1 = false;\n r_2_0_3[1] = r_2_0_3_1;\n }\n {\n bool r_2_0_3_2 = false;\n r_2_0_3[2] = r_2_0_3_2;\n }\n {\n bool r_2_0_3_3 = true;\n r_2_0_3[3] = r_2_0_3_3;\n }\n r_2_0[3] = r_2_0_3;\n }\n r_2.s_0 = r_2_0;\n }\n {\n bytes24 r_2_1 = bytes24(0x56f033999a9f113d0543e46d73bdbec4104d1f2d0670557f);\n r_2.s_1 = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n address[] memory r_3 = new address[](1);\n {\n address r_3_0 = 0x3e86232a17c3d1ec2f70D54CeE22e5Cc6542f5B4;\n r_3[0] = r_3_0;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000008400000000000000000000000000000000000000000000000000000000000000b40000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a80c3a94d206f20204d4d6f6f6f20c3a920f09f9a804df09f9a806f4d6f4d6fc3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070487ce7700be8a90f859d7bccf4c3f54de1a55000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a806f6f4d4d4d20204d6fc3a94df09f9a80f09f9a804d6f6f6f4d20c3a920f09f9a804d6f6fc3a9c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000530c9849eb49ca71842f19e5d2000000000000000000000000dd735426b9b18fe61f8b3c08f87dfb6869fd6c250000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ad9d2f6edfda69c21e2cabf20000000000000000000000007e033baf2b9eabdf84d3ee3691dd454a8fe818d700000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a80c3a94d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004056f033999a9f113d0543e46d73bdbec4104d1f2d0670557f00000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000003e86232a17c3d1ec2f70d54cee22e5cc6542f5b4" + }, + { + "name": "random-(bytes10,((((int208,bytes27,bool,(uint32,bool,bytes23))),string[3],bytes2,bytes11),address,(uint216,string,address[][3]),address[2])[4],string)", + "type": "(bytes10,((((int208,bytes27,bool,(uint32,bool,bytes23))),string[3],bytes2,bytes11),address,(uint216,string,address[][3]),address[2])[4],string)", + "value": [ + "0x3cf9a19df94e3887bb0f", + [ + [ + [ + [ + [ + "-108011484543700343107002238552945224529381821241531628865634813", + "0xd7809e4d96d6b185b7eac7918e54f1050a44400e0d3e655c4f6a18", + false, + [ + "1571875826", + true, + "0x028237dccc4bdbd8b2c7f806b99b1241e1edec5b3501ff" + ] + ] + ], + [ + "Moo é🚀ooo🚀o🚀 oé ", + "Moo é🚀", + "Moo é🚀M🚀éooM🚀Mo🚀 éooéMéo MoMo M🚀ééM MééoMooé🚀éé🚀 " + ], + "0x10fb", + "0xb680eeae2ad10c4698640f" + ], + "0xCCE3DC32Ec89F8340EA13dC664a6828966F9047e", + [ + "91929768614579885241121598984127876418190780700646559023731363204", + "Moo é🚀MéooM🚀MMé🚀o", + [ + [], + [ + "0x8A9E7E7fb6142E27a0B8cF42fE3112fc6FE37E3F", + "0x67c4d42e1080E9D3386A150bcc3973bb68939689", + "0x458Bf0CD9301C47a66648612B8c4E3497E36117C" + ], + [ + "0xf0e2Ddbe109772e33b1157F8D60E162939A1AD1c", + "0xbb32A13a27B3dF0E64A2C0c444997a8Fc8746932", + "0x3bDb08F3A08eC371CFD6885FFcADEc41A47C41D0", + "0x6084D44Fc1eD03a980fd3510A56e88d2984818aC" + ] + ] + ], + [ + "0xeB7c5898A284cA8526B64c2a03a3F7A99B3a7a36", + "0xF980632A2188f31454ffb9207965154B5FC58018" + ] + ], + [ + [ + [ + [ + "71555856829126466378064881000637697862793071429674631251043613", + "0x9985e2f6ce9f3ced607c0120d3e0656b15f87f8a3b1712f53cd144", + false, + [ + "1716611995", + true, + "0x6fda9f56604a784bc6a56b465bbbd229d63fccdcf775fa" + ] + ] + ], + [ + "Moo é🚀 MoMo éooéooé ééoMéMéo🚀o oo M o🚀oMoMéo oéé ", + "Moo é🚀o🚀 oéo Moo MMoo🚀 🚀é ooooMMM🚀o🚀🚀é 🚀oéoooMo🚀 🚀MMM éé", + "Moo é🚀🚀 oMMo🚀🚀🚀o 🚀M M Mo🚀o" + ], + "0x4d3e", + "0x533ab9f15dbc0c74f840a5" + ], + "0x5600501869F44bb0C0A6729e8340C20603d0f7d6", + [ + "67152750802715546162005508286188312969453450197358150420202783792", + "Moo é🚀oooMoéoé éo oM MMé🚀🚀éoé é 🚀Mo🚀 éMo🚀é🚀M🚀ééo🚀Mé", + [ + [ + "0xA16A5AC73A584c0CAd9B4921012E877c2BBac2Cf", + "0x548726Cc2c0364508E385cC7F57A16727Bf944a5", + "0x6108947eDE11b4Cacb57b1d1724266989D6cDD71", + "0xee7b17A612CB573c6FEEAebaB9323751476087F5" + ], + [ + "0x60c956C9aa3835e4d14b0aAcb8609ef9971a4d46", + "0x3A0A357b9BDC3Bf03217d81Ed47D493b1543ca5f", + "0xdb1D29105E4689C0933aEBF5BA0e89F9AD76949b", + "0x24CB70c15efC56BcD5ADD3E3671a9A8978a9b890" + ], + [ + "0xD03A27c18aea1101D50C04FDEE10DD4D63062A00", + "0x2dd5405cad20BAb8f4F993B51888dC63096CD55A", + "0x93F2EB8b3EaF1d7648E115F570d6245E2aE84ec6" + ] + ] + ], + [ + "0xCAd0178A692d302067DaBbB0321AD75E055d4580", + "0x928ef1e75148D028e73B8A10A54a6Bb6f5926266" + ] + ], + [ + [ + [ + [ + "96363881988588643014124903031250814833401843396099094528279851", + "0xf24afb2cc363c314ea945946b23c0571d199e753f1603d1c124e70", + true, + [ + "1824009918", + false, + "0x9df6368d4445b361b6f07f7c8c8496544b91ac7b7fc9f2" + ] + ] + ], + [ + "Moo é🚀 o🚀oé éoé é🚀oo 🚀éM🚀é🚀o éM🚀 🚀oééo🚀 Moooo 🚀Méoéé o🚀o 🚀oM é", + "Moo é🚀 éé ooéoM oéooMoé🚀🚀🚀oo🚀o 🚀MMooé ", + "Moo é🚀é🚀oo🚀 🚀M 🚀🚀éé🚀o🚀ooé🚀🚀é🚀 o" + ], + "0xa64f", + "0x740f4ba74871bc9ec25500" + ], + "0x2f613D650EED8d3A21bb1c1391024DeA68E21B69", + [ + "52139196495110251778772168498373012670287987622237683445548471514", + "Moo é🚀🚀Mooéoé🚀M🚀 🚀é o🚀ooooéo oé é é🚀oMo oo éo", + [ + [ + "0xcF2CaeB584c2a4dfB1af7F0D9e0Fb845e8C8cF6e", + "0x198Ca6d056F46c8b29E6770AC709541583cAE8AA", + "0xFC944D122bc6bB86BB9D550dC8A607001defb911", + "0x93F43e870AF29c8fb5Bb19331Ca8246274399718" + ], + [ + "0x43558dEF06AF7F3332e9Bfc5e1a0e6E53811f16C", + "0xd8C817a4915F5351a4b0f5dFa2bD6EF000AA4a43", + "0xBce66483DC063409D649a347d866EB53686CE345" + ], + [ + "0x7b395566E1cC2766c1546305dC668b3329E6eBb9", + "0x383d1E6eBBcf38319261c73D1Ab7B99A288EAD65" + ] + ] + ], + [ + "0xDf4204BFAaE9B2bce18E2906cD1B13Aea534D0f0", + "0x48c8Fb0657762c4f8BC77ecd2Be95c6968e5DFF3" + ] + ], + [ + [ + [ + [ + "-169032519442784140758446062937051254553184341018368642998253492", + "0x47c5c88fc0be9b6396b84290b1fc7b35e0e869060492a9a3e8a3fe", + true, + [ + "3650270403", + true, + "0x663a0063fefaa66598e876859a71d5de946d82957f06b4" + ] + ] + ], + [ + "Moo é🚀é🚀 ééo oé🚀 oééo Mo é", + "Moo é🚀o o Mo oooo🚀MMééo🚀é🚀oéo🚀MMé🚀oé🚀Mo🚀🚀o🚀é o🚀 🚀oéMéMé oooé", + "Moo é🚀 o MMo" + ], + "0x3257", + "0xaf7de65e1e61a0a79005ef" + ], + "0xef58Fa521967accD2aDC1f08e4f54b674B49E606", + [ + "50134414082692195463601619161210169859173079101287930974986813554", + "Moo é🚀🚀ooo oo o", + [ + ["0x9ba234d960c530e916dF9B480cd9a27E8313A4b4"], + [ + "0x0a0d79D1DeBce4d7CC269fF1Dc050c6c0aa62774", + "0xae743080325b1703fEdAB647b082bcDAB6EA6c43", + "0x5b102ab08a822322AD0b58100aB0bBe1EF4a12de", + "0x26325763D1972aBB32EB731B55535B99B130C1AD" + ], + [] + ] + ], + [ + "0x69B0B6413055f14A9d1e061B8E606015c4854ba7", + "0xDF5291e1A43B02ea41fa9976e5E2C4A88014C377" + ] + ] + ], + "Moo é🚀é o🚀éééééé🚀🚀o🚀oo🚀Méoé🚀é🚀M🚀🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x3cf9a19df94e3887bb0f" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-108011484543700343107002238552945224529381821241531628865634813" + }, + { + "type": "hexstring", + "value": "0xd7809e4d96d6b185b7eac7918e54f1050a44400e0d3e655c4f6a18" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1571875826" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x028237dccc4bdbd8b2c7f806b99b1241e1edec5b3501ff" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooo🚀o🚀 oé " + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀M🚀éooM🚀Mo🚀 éooéMéo MoMo M🚀ééM MééoMooé🚀éé🚀 " + } + ] + }, + { + "type": "hexstring", + "value": "0x10fb" + }, + { + "type": "hexstring", + "value": "0xb680eeae2ad10c4698640f" + } + ] + }, + { + "type": "address", + "value": "0xCCE3DC32Ec89F8340EA13dC664a6828966F9047e" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "91929768614579885241121598984127876418190780700646559023731363204" + }, + { + "type": "string", + "value": "Moo é🚀MéooM🚀MMé🚀o" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x8A9E7E7fb6142E27a0B8cF42fE3112fc6FE37E3F" + }, + { + "type": "address", + "value": "0x67c4d42e1080E9D3386A150bcc3973bb68939689" + }, + { + "type": "address", + "value": "0x458Bf0CD9301C47a66648612B8c4E3497E36117C" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xf0e2Ddbe109772e33b1157F8D60E162939A1AD1c" + }, + { + "type": "address", + "value": "0xbb32A13a27B3dF0E64A2C0c444997a8Fc8746932" + }, + { + "type": "address", + "value": "0x3bDb08F3A08eC371CFD6885FFcADEc41A47C41D0" + }, + { + "type": "address", + "value": "0x6084D44Fc1eD03a980fd3510A56e88d2984818aC" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xeB7c5898A284cA8526B64c2a03a3F7A99B3a7a36" + }, + { + "type": "address", + "value": "0xF980632A2188f31454ffb9207965154B5FC58018" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "71555856829126466378064881000637697862793071429674631251043613" + }, + { + "type": "hexstring", + "value": "0x9985e2f6ce9f3ced607c0120d3e0656b15f87f8a3b1712f53cd144" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1716611995" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x6fda9f56604a784bc6a56b465bbbd229d63fccdcf775fa" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 MoMo éooéooé ééoMéMéo🚀o oo M o🚀oMoMéo oéé " + }, + { + "type": "string", + "value": "Moo é🚀o🚀 oéo Moo MMoo🚀 🚀é ooooMMM🚀o🚀🚀é 🚀oéoooMo🚀 🚀MMM éé" + }, + { + "type": "string", + "value": "Moo é🚀🚀 oMMo🚀🚀🚀o 🚀M M Mo🚀o" + } + ] + }, + { + "type": "hexstring", + "value": "0x4d3e" + }, + { + "type": "hexstring", + "value": "0x533ab9f15dbc0c74f840a5" + } + ] + }, + { + "type": "address", + "value": "0x5600501869F44bb0C0A6729e8340C20603d0f7d6" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "67152750802715546162005508286188312969453450197358150420202783792" + }, + { + "type": "string", + "value": "Moo é🚀oooMoéoé éo oM MMé🚀🚀éoé é 🚀Mo🚀 éMo🚀é🚀M🚀ééo🚀Mé" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xA16A5AC73A584c0CAd9B4921012E877c2BBac2Cf" + }, + { + "type": "address", + "value": "0x548726Cc2c0364508E385cC7F57A16727Bf944a5" + }, + { + "type": "address", + "value": "0x6108947eDE11b4Cacb57b1d1724266989D6cDD71" + }, + { + "type": "address", + "value": "0xee7b17A612CB573c6FEEAebaB9323751476087F5" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x60c956C9aa3835e4d14b0aAcb8609ef9971a4d46" + }, + { + "type": "address", + "value": "0x3A0A357b9BDC3Bf03217d81Ed47D493b1543ca5f" + }, + { + "type": "address", + "value": "0xdb1D29105E4689C0933aEBF5BA0e89F9AD76949b" + }, + { + "type": "address", + "value": "0x24CB70c15efC56BcD5ADD3E3671a9A8978a9b890" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xD03A27c18aea1101D50C04FDEE10DD4D63062A00" + }, + { + "type": "address", + "value": "0x2dd5405cad20BAb8f4F993B51888dC63096CD55A" + }, + { + "type": "address", + "value": "0x93F2EB8b3EaF1d7648E115F570d6245E2aE84ec6" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xCAd0178A692d302067DaBbB0321AD75E055d4580" + }, + { + "type": "address", + "value": "0x928ef1e75148D028e73B8A10A54a6Bb6f5926266" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "96363881988588643014124903031250814833401843396099094528279851" + }, + { + "type": "hexstring", + "value": "0xf24afb2cc363c314ea945946b23c0571d199e753f1603d1c124e70" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1824009918" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x9df6368d4445b361b6f07f7c8c8496544b91ac7b7fc9f2" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 o🚀oé éoé é🚀oo 🚀éM🚀é🚀o éM🚀 🚀oééo🚀 Moooo 🚀Méoéé o🚀o 🚀oM é" + }, + { + "type": "string", + "value": "Moo é🚀 éé ooéoM oéooMoé🚀🚀🚀oo🚀o 🚀MMooé " + }, + { + "type": "string", + "value": "Moo é🚀é🚀oo🚀 🚀M 🚀🚀éé🚀o🚀ooé🚀🚀é🚀 o" + } + ] + }, + { + "type": "hexstring", + "value": "0xa64f" + }, + { + "type": "hexstring", + "value": "0x740f4ba74871bc9ec25500" + } + ] + }, + { + "type": "address", + "value": "0x2f613D650EED8d3A21bb1c1391024DeA68E21B69" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "52139196495110251778772168498373012670287987622237683445548471514" + }, + { + "type": "string", + "value": "Moo é🚀🚀Mooéoé🚀M🚀 🚀é o🚀ooooéo oé é é🚀oMo oo éo" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xcF2CaeB584c2a4dfB1af7F0D9e0Fb845e8C8cF6e" + }, + { + "type": "address", + "value": "0x198Ca6d056F46c8b29E6770AC709541583cAE8AA" + }, + { + "type": "address", + "value": "0xFC944D122bc6bB86BB9D550dC8A607001defb911" + }, + { + "type": "address", + "value": "0x93F43e870AF29c8fb5Bb19331Ca8246274399718" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x43558dEF06AF7F3332e9Bfc5e1a0e6E53811f16C" + }, + { + "type": "address", + "value": "0xd8C817a4915F5351a4b0f5dFa2bD6EF000AA4a43" + }, + { + "type": "address", + "value": "0xBce66483DC063409D649a347d866EB53686CE345" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x7b395566E1cC2766c1546305dC668b3329E6eBb9" + }, + { + "type": "address", + "value": "0x383d1E6eBBcf38319261c73D1Ab7B99A288EAD65" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xDf4204BFAaE9B2bce18E2906cD1B13Aea534D0f0" + }, + { + "type": "address", + "value": "0x48c8Fb0657762c4f8BC77ecd2Be95c6968e5DFF3" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-169032519442784140758446062937051254553184341018368642998253492" + }, + { + "type": "hexstring", + "value": "0x47c5c88fc0be9b6396b84290b1fc7b35e0e869060492a9a3e8a3fe" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3650270403" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x663a0063fefaa66598e876859a71d5de946d82957f06b4" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀 ééo oé🚀 oééo Mo é" + }, + { + "type": "string", + "value": "Moo é🚀o o Mo oooo🚀MMééo🚀é🚀oéo🚀MMé🚀oé🚀Mo🚀🚀o🚀é o🚀 🚀oéMéMé oooé" + }, + { + "type": "string", + "value": "Moo é🚀 o MMo" + } + ] + }, + { + "type": "hexstring", + "value": "0x3257" + }, + { + "type": "hexstring", + "value": "0xaf7de65e1e61a0a79005ef" + } + ] + }, + { + "type": "address", + "value": "0xef58Fa521967accD2aDC1f08e4f54b674B49E606" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "50134414082692195463601619161210169859173079101287930974986813554" + }, + { + "type": "string", + "value": "Moo é🚀🚀ooo oo o" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x9ba234d960c530e916dF9B480cd9a27E8313A4b4" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x0a0d79D1DeBce4d7CC269fF1Dc050c6c0aa62774" + }, + { + "type": "address", + "value": "0xae743080325b1703fEdAB647b082bcDAB6EA6c43" + }, + { + "type": "address", + "value": "0x5b102ab08a822322AD0b58100aB0bBe1EF4a12de" + }, + { + "type": "address", + "value": "0x26325763D1972aBB32EB731B55535B99B130C1AD" + } + ] + }, + { + "type": "array", + "value": [] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x69B0B6413055f14A9d1e061B8E606015c4854ba7" + }, + { + "type": "address", + "value": "0xDF5291e1A43B02ea41fa9976e5E2C4A88014C377" + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀é o🚀éééééé🚀🚀o🚀oo🚀Méoé🚀é🚀M🚀🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50611d05806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190611796565b60405180910390f35b6100566114b0565b61005e6114b0565b693cf9a19df94e3887bb0f60b01b81526100766114d8565b61007e611505565b61008661153e565b61008e611572565b610096611581565b79433738e44d1227b6a5ac1714635b734fcd0207e316dbb562c1fc1981527fd7809e4d96d6b185b7eac7918e54f1050a44400e0d3e655c4f6a180000000000602082015260006040820152610104604080516060810182526000808252602082018190529181019190915290565b635db0ebf28152600160208201527f028237dccc4bdbd8b2c7f806b99b1241e1edec5b3501ff00000000000000000060408201526060820152815281526101496115c5565b604080518082018252601b81527f4d6f6f20c3a9f09f9a806f6f6ff09f9a806ff09f9a80206fc3a920000000000060208083019190915290835281518083018352600a8152689adede418753e13f3560b71b8183015283820152815160808101909252605380835260009291611c0c908301396040808401919091526020848101939093526110fb60f01b90840152506ab680eeae2ad10c4698640f60a81b606083015290825273cce3dc32ec89f8340ea13dc664a6828966f9047e908201526102116115ec565b7adf780913c4763bb0b872c6adb33aceeb1123de6fc7affafac4cd84815260408051808201909152601d81527f4d6f6f20c3a9f09f9a804dc3a96f6f4df09f9a804d4dc3a9f09f9a806f0000006020808301919091528201526102726115c5565b6040805160008082526020820190925282525060408051600380825260808201909252600091602082016060803683370190505090506000738a9e7e7fb6142e27a0b8cf42fe3112fc6fe37e3f905080826000815181106102d5576102d561190c565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007367c4d42e1080e9d3386a150bcc3973bb68939689905080826001815181106103235761032361190c565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073458bf0cd9301c47a66648612b8c4e3497e36117c905080826002815181106103715761037161190c565b6001600160a01b03929092166020928302919091018201528301919091525060408051600480825260a08201909252600091816020016020820280368337019050509050600073f0e2ddbe109772e33b1157f8d60e162939a1ad1c905080826000815181106103e2576103e261190c565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073bb32a13a27b3df0e64a2c0c444997a8fc8746932905080826001815181106104305761043061190c565b60200260200101906001600160a01b031690816001600160a01b031681525050506000733bdb08f3a08ec371cfd6885ffcadec41a47c41d09050808260028151811061047e5761047e61190c565b60200260200101906001600160a01b031690816001600160a01b031681525050506000736084d44fc1ed03a980fd3510a56e88d2984818ac905080826003815181106104cc576104cc61190c565b6001600160a01b0390921660209283029190910190910152508082600260200201525060408083019190915282015261050361160b565b73eb7c5898a284ca8526b64c2a03a3f7a99b3a7a36815273f980632a2188f31454ffb9207965154b5fc58018602082015260608201528152610543611505565b61054b61153e565b610553611572565b61055b611581565b792c878173a54c81f3d713d42f30cfe2ab7d571a9794780513251d81527f9985e2f6ce9f3ced607c0120d3e0656b15f87f8a3b1712f53cd14400000000006020820152600060408201526105c8604080516060810182526000808252602082018190529181019190915290565b6366516b9b8152600160208201527f6fda9f56604a784bc6a56b465bbbd229d63fccdcf775fa000000000000000000604082015260608201528152815261060d6115c5565b6000604051806080016040528060488152602001611923604891398252506040805160808101909152605e8082526000919061199860208301399050808260016020020181905250506000604051806060016040528060308152602001611bdc6030913960408084019190915260208481019390935261269f60f11b90840152506a533ab9f15dbc0c74f840a560a81b6060830152908252735600501869f44bb0c0a6729e8340c20603d0f7d6908201526106c66115ec565b7aa33d4269522979a6be5aff8d28f62830e530d857e75bb80e8c043081526040805160808101909152605c80825260009190611b80602083013960208301525061070e6115c5565b60408051600480825260a0820190925260009160208201608080368337019050509050600073a16a5ac73a584c0cad9b4921012e877c2bbac2cf9050808260008151811061075e5761075e61190c565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073548726cc2c0364508e385cc7f57a16727bf944a5905080826001815181106107ac576107ac61190c565b60200260200101906001600160a01b031690816001600160a01b031681525050506000736108947ede11b4cacb57b1d1724266989d6cdd71905080826002815181106107fa576107fa61190c565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073ee7b17a612cb573c6feeaebab9323751476087f5905080826003815181106108485761084861190c565b6001600160a01b03929092166020928302919091019091015250815260408051600480825260a0820190925260009181602001602082028036833701905050905060007360c956c9aa3835e4d14b0aacb8609ef9971a4d46905080826000815181106108b6576108b661190c565b60200260200101906001600160a01b031690816001600160a01b031681525050506000733a0a357b9bdc3bf03217d81ed47d493b1543ca5f905080826001815181106109045761090461190c565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073db1d29105e4689c0933aebf5ba0e89f9ad76949b905080826002815181106109525761095261190c565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007324cb70c15efc56bcd5add3e3671a9a8978a9b890905080826003815181106109a0576109a061190c565b6001600160a01b03929092166020928302919091018201528301919091525060408051600380825260808201909252600091816020016020820280368337019050509050600073d03a27c18aea1101d50c04fdee10dd4d63062a0090508082600081518110610a1157610a1161190c565b60200260200101906001600160a01b031690816001600160a01b031681525050506000732dd5405cad20bab8f4f993b51888dc63096cd55a90508082600181518110610a5f57610a5f61190c565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007393f2eb8b3eaf1d7648e115f570d6245e2ae84ec690508082600281518110610aad57610aad61190c565b6001600160a01b03909216602092830291909101909101525080826002602002015250604080830191909152820152610ae461160b565b73cad0178a692d302067dabbb0321ad75e055d4580815273928ef1e75148d028e73b8a10a54a6bb6f59262666020808301919091526060830191909152820152610b2c611505565b610b3461153e565b610b3c611572565b610b44611581565b793bf7a6ef8296b39bf713e97416b793ebd5a4ef7f4ddc2122452b81527ff24afb2cc363c314ea945946b23c0571d199e753f1603d1c124e700000000000602082015260016040820152610bb1604080516060810182526000808252602082018190529181019190915290565b636cb82ebe8152600060208201527f9df6368d4445b361b6f07f7c8c8496544b91ac7b7fc9f20000000000000000006040820152606082015281528152610bf66115c5565b60006040518060a0016040528060718152602001611c5f607191398252506040805160608101909152603f80825260009190611a8e60208301399050808260016020020181905250506000604051806080016040528060468152602001611acd6046913960408084019190915260208481019390935261a64f60f01b908401525069740f4ba74871bc9ec25560b01b6060830152908252732f613d650eed8d3a21bb1c1391024dea68e21b6990820152610cae6115ec565b7a7ebe4d380bd5601bc35ddb3f1d85fb9138e73233aa79b353c054da81526040805160808101909152604e808252600091906119f66020830139602083015250610cf66115c5565b60408051600480825260a0820190925260009160208201608080368337019050509050600073cf2caeb584c2a4dfb1af7f0d9e0fb845e8c8cf6e90508082600081518110610d4657610d4661190c565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073198ca6d056f46c8b29e6770ac709541583cae8aa90508082600181518110610d9457610d9461190c565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073fc944d122bc6bb86bb9d550dc8a607001defb91190508082600281518110610de257610de261190c565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007393f43e870af29c8fb5bb19331ca824627439971890508082600381518110610e3057610e3061190c565b6001600160a01b0392909216602092830291909101909101525081526040805160038082526080820190925260009181602001602082028036833701905050905060007343558def06af7f3332e9bfc5e1a0e6e53811f16c90508082600081518110610e9e57610e9e61190c565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073d8c817a4915f5351a4b0f5dfa2bd6ef000aa4a4390508082600181518110610eec57610eec61190c565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073bce66483dc063409d649a347d866eb53686ce34590508082600281518110610f3a57610f3a61190c565b6001600160a01b039290921660209283029190910182015283019190915250604080516002808252606082019092526000918160200160208202803683370190505090506000737b395566e1cc2766c1546305dc668b3329e6ebb990508082600081518110610fab57610fab61190c565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073383d1e6ebbcf38319261c73d1ab7b99a288ead6590508082600181518110610ff957610ff961190c565b6001600160a01b0390921660209283029190910190910152508082600260200201525060408083019190915282015261103061160b565b73df4204bfaae9b2bce18e2906cd1b13aea534d0f081527348c8fb0657762c4f8bc77ecd2be95c6968e5dff3602082015260608201526040820152611073611505565b61107b61153e565b611083611572565b61108b611581565b7969306f16f8a57905e8851952eb7a076780c74378dd98ad1eb7b31981527f47c5c88fc0be9b6396b84290b1fc7b35e0e869060492a9a3e8a3fe00000000006020820152600160408201526110f9604080516060810182526000808252602082018190529181019190915290565b63d992b4c38152600160208201527f663a0063fefaa66598e876859a71d5de946d82957f06b4000000000000000000604082015260608201528152815261113e6115c5565b60006040518060600160405280602d815260200161196b602d91398252506040805160a08101909152606d80825260009190611b13602083013960208381019190915260408051808201825260118152704d6f6f20c3a9f09f9a80206f20204d4d6f60781b81840152818501528482019390935261325760f01b92840192909252506aaf7de65e1e61a0a79005ef60a81b606083015290825273ef58fa521967accd2adc1f08e4f54b674b49e606908201526111f86115ec565b7a79deb8f456d8e582d8016ed011ecc0d6393c5c78f1ffff7ebfc07281526040805180820190915260168152754d6f6f20c3a9f09f9a80f09f9a806f6f6f206f6f206f60501b6020808301919091528201526112526115c5565b604080516001808252818301909252600091602080830190803683370190505090506000739ba234d960c530e916df9b480cd9a27e8313a4b4905080826000815181106112a1576112a161190c565b6001600160a01b03929092166020928302919091019091015250815260408051600480825260a082019092526000918160200160208202803683370190505090506000730a0d79d1debce4d7cc269ff1dc050c6c0aa627749050808260008151811061130f5761130f61190c565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073ae743080325b1703fedab647b082bcdab6ea6c439050808260018151811061135d5761135d61190c565b60200260200101906001600160a01b031690816001600160a01b031681525050506000735b102ab08a822322ad0b58100ab0bbe1ef4a12de905080826002815181106113ab576113ab61190c565b60200260200101906001600160a01b031690816001600160a01b0316815250505060007326325763d1972abb32eb731b55535b99b130c1ad905080826003815181106113f9576113f961190c565b6001600160a01b0392909216602092830291909101820152838101929092525060408051600081529182018152808301919091528281019190915282015261143f61160b565b7369b0b6413055f14a9d1e061b8e606015c4854ba7815273df5291e1a43b02ea41fa9976e5e2c4a88014c37760208083019190915260608381019290925290830191909152828101919091526040805160808101909152604a808252600092611a4490830139604083015250919050565b604080516060810190915260008152602081016114cb6114d8565b8152602001606081525090565b60405180608001604052806004905b6114ef611505565b8152602001906001900390816114e75790505090565b604051806080016040528061151861153e565b81526000602082015260400161152c6115ec565b815260200161153961160b565b905290565b6040518060800160405280611551611572565b815260200161155e6115c5565b815260006020820181905260409091015290565b60405180602001604052806115395b604080516080810182526000808252602082018190529181019190915260608101611539604080516060810182526000808252602082018190529181019190915290565b60405180606001604052806003905b60608152602001906001900390816115d45790505090565b60408051606080820183526000825260208201529081016115396115c5565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b8181101561164f57602081850181015186830182015201611633565b81811115611661576000602083870101525b50601f01601f19169290920160200192915050565b600082606081018360005b60038110156116b057838303875261169a838351611629565b6020978801979093509190910190600101611681565b509095945050505050565b60018060d81b03815116825260006020808301516060828601526116e26060860182611629565b90506040840151858203604087015281829050606083016000805b6003811015611756578583038452845180518085529088019088850190845b818110156117415783516001600160a01b03168352928a0192918a019160010161171c565b505095880195948801949350506001016116fd565b509098975050505050505050565b8060005b60028110156117905781516001600160a01b0316845260209384019390910190600101611768565b50505050565b602080825282516001600160b01b0319168282015282810151606060408085018290526000939261010092909160808701848801875b60048110156118e257898203607f190183528551805160a0808552815151805160190b918601919091528a81015164ffffffffff191660c086015286810151151560e0860152870151805163ffffffff168a860152808b01511515610120808701919091529087015168ffffffffffffffffff19166101408601528a820151610160860191909152906118636101c0860183611676565b9150868101516118806101808701826001600160f01b0319169052565b508701516001600160a81b0319166101a0850152898201516001600160a01b03168a85015285820151848203878601526118ba82826116bb565b9150508682015191506118cf87850183611764565b96890196938901939250506001016117cc565b5089830151898203601f1901858b015296506118fe8188611629565b9a9950505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80204d6f4d6f20c3a96f6fc3a96f6fc3a920c3a9c3a96f4dc3a94dc3a96ff09f9a806f20206f6f2020204d206ff09f9a806f4d6f4dc3a96f206fc3a9c3a9204d6f6f20c3a9f09f9a80c3a9f09f9a8020c3a9c3a96f206fc3a9f09f9a80206fc3a9c3a96f20204d6f2020c3a94d6f6f20c3a9f09f9a806ff09f9a80206fc3a96f204d6f6f204d4d6f6ff09f9a8020f09f9a80c3a920206f6f6f6f4d4d4df09f9a806ff09f9a80f09f9a80c3a920f09f9a806fc3a96f6f6f4d6ff09f9a8020f09f9a804d4d4d20c3a9c3a94d6f6f20c3a9f09f9a80f09f9a804d6f6fc3a96fc3a9f09f9a804df09f9a8020f09f9a80c3a9206ff09f9a806f6f6f6fc3a96f206fc3a920c3a92020c3a9f09f9a806f4d6f20206f6f2020c3a96f4d6f6f20c3a9f09f9a80c3a9206ff09f9a80c3a9c3a9c3a9c3a9c3a9c3a9f09f9a80f09f9a806ff09f9a806f6ff09f9a804dc3a96fc3a9f09f9a80c3a9f09f9a804df09f9a80f09f9a804d6f6f20c3a9f09f9a8020c3a9c3a9206f6fc3a96f4d206fc3a96f6f4d6fc3a9f09f9a80f09f9a80f09f9a806f6ff09f9a806f20f09f9a804d4d6f6fc3a9204d6f6f20c3a9f09f9a80c3a9f09f9a806f6ff09f9a8020f09f9a804d20f09f9a80f09f9a80c3a9c3a9f09f9a806ff09f9a806f6fc3a9f09f9a80f09f9a80c3a9f09f9a80206f4d6f6f20c3a9f09f9a806f206f204d6f206f6f6f6ff09f9a804d4dc3a9c3a96ff09f9a80c3a9f09f9a806fc3a96ff09f9a804d4dc3a9f09f9a806fc3a9f09f9a804d6ff09f9a80f09f9a806ff09f9a80c3a9206ff09f9a802020f09f9a806fc3a94dc3a94dc3a9206f6f6fc3a94d6f6f20c3a9f09f9a806f6f6f4d6fc3a96fc3a920c3a96f206f4d204d4dc3a9f09f9a80f09f9a80c3a96fc3a920c3a920f09f9a804d6ff09f9a802020c3a94d6ff09f9a80c3a9f09f9a804df09f9a80c3a9c3a96ff09f9a804dc3a94d6f6f20c3a9f09f9a80f09f9a80206f4d4d6ff09f9a80f09f9a80f09f9a806f20f09f9a804d204d204d6ff09f9a806f4d6f6f20c3a9f09f9a804df09f9a80c3a96f6f4df09f9a804d6ff09f9a802020c3a96f6fc3a94dc3a96f204d6f4d6f204df09f9a80c3a9c3a94d204dc3a9c3a96f4d6f6fc3a9f09f9a80c3a9c3a9f09f9a80204d6f6f20c3a9f09f9a80206ff09f9a806fc3a920c3a96fc3a920c3a9f09f9a806f6f20f09f9a80c3a94df09f9a80c3a9f09f9a806f20c3a94df09f9a8020f09f9a806fc3a9c3a96ff09f9a80204d6f6f6f6f20f09f9a804dc3a96fc3a9c3a920206ff09f9a806f20f09f9a806f4d20c3a9a26469706673582212206dd5e6598bf78fff131b97eb133576d4fb673864b62b9d3e913fb8ee7d43a92464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_94783a2a {\n uint32 s_0;\n bool s_1;\n bytes23 s_2;\n }\n\n struct S_d0716984 {\n int208 s_0;\n bytes27 s_1;\n bool s_2;\n S_94783a2a s_3;\n }\n\n struct S_48e72d4c {\n S_d0716984 s_0;\n }\n\n struct S_1b617d04 {\n S_48e72d4c s_0;\n string[3] s_1;\n bytes2 s_2;\n bytes11 s_3;\n }\n\n struct S_5df7cbdd {\n uint216 s_0;\n string s_1;\n address[][3] s_2;\n }\n\n struct S_8f6909b2 {\n S_1b617d04 s_0;\n address s_1;\n S_5df7cbdd s_2;\n address[2] s_3;\n }\n\n struct S_8ca1a3cc {\n bytes10 s_0;\n S_8f6909b2[4] s_1;\n string s_2;\n }\n\n function test () public pure returns (S_8ca1a3cc memory) {\n S_8ca1a3cc memory r;\n {\n bytes10 r_0 = bytes10(0x3cf9a19df94e3887bb0f);\n r.s_0 = r_0;\n }\n {\n S_8f6909b2[4] memory r_1;\n {\n S_8f6909b2 memory r_1_0;\n {\n S_1b617d04 memory r_1_0_0;\n {\n S_48e72d4c memory r_1_0_0_0;\n {\n S_d0716984 memory r_1_0_0_0_0;\n {\n int208 r_1_0_0_0_0_0 = -108011484543700343107002238552945224529381821241531628865634813;\n r_1_0_0_0_0.s_0 = r_1_0_0_0_0_0;\n }\n {\n bytes27 r_1_0_0_0_0_1 = bytes27(0xd7809e4d96d6b185b7eac7918e54f1050a44400e0d3e655c4f6a18);\n r_1_0_0_0_0.s_1 = r_1_0_0_0_0_1;\n }\n {\n bool r_1_0_0_0_0_2 = false;\n r_1_0_0_0_0.s_2 = r_1_0_0_0_0_2;\n }\n {\n S_94783a2a memory r_1_0_0_0_0_3;\n {\n uint32 r_1_0_0_0_0_3_0 = 1571875826;\n r_1_0_0_0_0_3.s_0 = r_1_0_0_0_0_3_0;\n }\n {\n bool r_1_0_0_0_0_3_1 = true;\n r_1_0_0_0_0_3.s_1 = r_1_0_0_0_0_3_1;\n }\n {\n bytes23 r_1_0_0_0_0_3_2 = bytes23(0x028237dccc4bdbd8b2c7f806b99b1241e1edec5b3501ff);\n r_1_0_0_0_0_3.s_2 = r_1_0_0_0_0_3_2;\n }\n r_1_0_0_0_0.s_3 = r_1_0_0_0_0_3;\n }\n r_1_0_0_0.s_0 = r_1_0_0_0_0;\n }\n r_1_0_0.s_0 = r_1_0_0_0;\n }\n {\n string[3] memory r_1_0_0_1;\n {\n string memory r_1_0_0_1_0 = unicode\"Moo é🚀ooo🚀o🚀 oé \";\n r_1_0_0_1[0] = r_1_0_0_1_0;\n }\n {\n string memory r_1_0_0_1_1 = unicode\"Moo é🚀\";\n r_1_0_0_1[1] = r_1_0_0_1_1;\n }\n {\n string memory r_1_0_0_1_2 = unicode\"Moo é🚀M🚀éooM🚀Mo🚀 éooéMéo MoMo M🚀ééM MééoMooé🚀éé🚀 \";\n r_1_0_0_1[2] = r_1_0_0_1_2;\n }\n r_1_0_0.s_1 = r_1_0_0_1;\n }\n {\n bytes2 r_1_0_0_2 = bytes2(0x10fb);\n r_1_0_0.s_2 = r_1_0_0_2;\n }\n {\n bytes11 r_1_0_0_3 = bytes11(0xb680eeae2ad10c4698640f);\n r_1_0_0.s_3 = r_1_0_0_3;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n address r_1_0_1 = 0xCCE3DC32Ec89F8340EA13dC664a6828966F9047e;\n r_1_0.s_1 = r_1_0_1;\n }\n {\n S_5df7cbdd memory r_1_0_2;\n {\n uint216 r_1_0_2_0 = 91929768614579885241121598984127876418190780700646559023731363204;\n r_1_0_2.s_0 = r_1_0_2_0;\n }\n {\n string memory r_1_0_2_1 = unicode\"Moo é🚀MéooM🚀MMé🚀o\";\n r_1_0_2.s_1 = r_1_0_2_1;\n }\n {\n address[][3] memory r_1_0_2_2;\n {\n address[] memory r_1_0_2_2_0 = new address[](0);\n r_1_0_2_2[0] = r_1_0_2_2_0;\n }\n {\n address[] memory r_1_0_2_2_1 = new address[](3);\n {\n address r_1_0_2_2_1_0 = 0x8A9E7E7fb6142E27a0B8cF42fE3112fc6FE37E3F;\n r_1_0_2_2_1[0] = r_1_0_2_2_1_0;\n }\n {\n address r_1_0_2_2_1_1 = 0x67c4d42e1080E9D3386A150bcc3973bb68939689;\n r_1_0_2_2_1[1] = r_1_0_2_2_1_1;\n }\n {\n address r_1_0_2_2_1_2 = 0x458Bf0CD9301C47a66648612B8c4E3497E36117C;\n r_1_0_2_2_1[2] = r_1_0_2_2_1_2;\n }\n r_1_0_2_2[1] = r_1_0_2_2_1;\n }\n {\n address[] memory r_1_0_2_2_2 = new address[](4);\n {\n address r_1_0_2_2_2_0 = 0xf0e2Ddbe109772e33b1157F8D60E162939A1AD1c;\n r_1_0_2_2_2[0] = r_1_0_2_2_2_0;\n }\n {\n address r_1_0_2_2_2_1 = 0xbb32A13a27B3dF0E64A2C0c444997a8Fc8746932;\n r_1_0_2_2_2[1] = r_1_0_2_2_2_1;\n }\n {\n address r_1_0_2_2_2_2 = 0x3bDb08F3A08eC371CFD6885FFcADEc41A47C41D0;\n r_1_0_2_2_2[2] = r_1_0_2_2_2_2;\n }\n {\n address r_1_0_2_2_2_3 = 0x6084D44Fc1eD03a980fd3510A56e88d2984818aC;\n r_1_0_2_2_2[3] = r_1_0_2_2_2_3;\n }\n r_1_0_2_2[2] = r_1_0_2_2_2;\n }\n r_1_0_2.s_2 = r_1_0_2_2;\n }\n r_1_0.s_2 = r_1_0_2;\n }\n {\n address[2] memory r_1_0_3;\n {\n address r_1_0_3_0 = 0xeB7c5898A284cA8526B64c2a03a3F7A99B3a7a36;\n r_1_0_3[0] = r_1_0_3_0;\n }\n {\n address r_1_0_3_1 = 0xF980632A2188f31454ffb9207965154B5FC58018;\n r_1_0_3[1] = r_1_0_3_1;\n }\n r_1_0.s_3 = r_1_0_3;\n }\n r_1[0] = r_1_0;\n }\n {\n S_8f6909b2 memory r_1_1;\n {\n S_1b617d04 memory r_1_1_0;\n {\n S_48e72d4c memory r_1_1_0_0;\n {\n S_d0716984 memory r_1_1_0_0_0;\n {\n int208 r_1_1_0_0_0_0 = 71555856829126466378064881000637697862793071429674631251043613;\n r_1_1_0_0_0.s_0 = r_1_1_0_0_0_0;\n }\n {\n bytes27 r_1_1_0_0_0_1 = bytes27(0x9985e2f6ce9f3ced607c0120d3e0656b15f87f8a3b1712f53cd144);\n r_1_1_0_0_0.s_1 = r_1_1_0_0_0_1;\n }\n {\n bool r_1_1_0_0_0_2 = false;\n r_1_1_0_0_0.s_2 = r_1_1_0_0_0_2;\n }\n {\n S_94783a2a memory r_1_1_0_0_0_3;\n {\n uint32 r_1_1_0_0_0_3_0 = 1716611995;\n r_1_1_0_0_0_3.s_0 = r_1_1_0_0_0_3_0;\n }\n {\n bool r_1_1_0_0_0_3_1 = true;\n r_1_1_0_0_0_3.s_1 = r_1_1_0_0_0_3_1;\n }\n {\n bytes23 r_1_1_0_0_0_3_2 = bytes23(0x6fda9f56604a784bc6a56b465bbbd229d63fccdcf775fa);\n r_1_1_0_0_0_3.s_2 = r_1_1_0_0_0_3_2;\n }\n r_1_1_0_0_0.s_3 = r_1_1_0_0_0_3;\n }\n r_1_1_0_0.s_0 = r_1_1_0_0_0;\n }\n r_1_1_0.s_0 = r_1_1_0_0;\n }\n {\n string[3] memory r_1_1_0_1;\n {\n string memory r_1_1_0_1_0 = unicode\"Moo é🚀 MoMo éooéooé ééoMéMéo🚀o oo M o🚀oMoMéo oéé \";\n r_1_1_0_1[0] = r_1_1_0_1_0;\n }\n {\n string memory r_1_1_0_1_1 = unicode\"Moo é🚀o🚀 oéo Moo MMoo🚀 🚀é ooooMMM🚀o🚀🚀é 🚀oéoooMo🚀 🚀MMM éé\";\n r_1_1_0_1[1] = r_1_1_0_1_1;\n }\n {\n string memory r_1_1_0_1_2 = unicode\"Moo é🚀🚀 oMMo🚀🚀🚀o 🚀M M Mo🚀o\";\n r_1_1_0_1[2] = r_1_1_0_1_2;\n }\n r_1_1_0.s_1 = r_1_1_0_1;\n }\n {\n bytes2 r_1_1_0_2 = bytes2(0x4d3e);\n r_1_1_0.s_2 = r_1_1_0_2;\n }\n {\n bytes11 r_1_1_0_3 = bytes11(0x533ab9f15dbc0c74f840a5);\n r_1_1_0.s_3 = r_1_1_0_3;\n }\n r_1_1.s_0 = r_1_1_0;\n }\n {\n address r_1_1_1 = 0x5600501869F44bb0C0A6729e8340C20603d0f7d6;\n r_1_1.s_1 = r_1_1_1;\n }\n {\n S_5df7cbdd memory r_1_1_2;\n {\n uint216 r_1_1_2_0 = 67152750802715546162005508286188312969453450197358150420202783792;\n r_1_1_2.s_0 = r_1_1_2_0;\n }\n {\n string memory r_1_1_2_1 = unicode\"Moo é🚀oooMoéoé éo oM MMé🚀🚀éoé é 🚀Mo🚀 éMo🚀é🚀M🚀ééo🚀Mé\";\n r_1_1_2.s_1 = r_1_1_2_1;\n }\n {\n address[][3] memory r_1_1_2_2;\n {\n address[] memory r_1_1_2_2_0 = new address[](4);\n {\n address r_1_1_2_2_0_0 = 0xA16A5AC73A584c0CAd9B4921012E877c2BBac2Cf;\n r_1_1_2_2_0[0] = r_1_1_2_2_0_0;\n }\n {\n address r_1_1_2_2_0_1 = 0x548726Cc2c0364508E385cC7F57A16727Bf944a5;\n r_1_1_2_2_0[1] = r_1_1_2_2_0_1;\n }\n {\n address r_1_1_2_2_0_2 = 0x6108947eDE11b4Cacb57b1d1724266989D6cDD71;\n r_1_1_2_2_0[2] = r_1_1_2_2_0_2;\n }\n {\n address r_1_1_2_2_0_3 = 0xee7b17A612CB573c6FEEAebaB9323751476087F5;\n r_1_1_2_2_0[3] = r_1_1_2_2_0_3;\n }\n r_1_1_2_2[0] = r_1_1_2_2_0;\n }\n {\n address[] memory r_1_1_2_2_1 = new address[](4);\n {\n address r_1_1_2_2_1_0 = 0x60c956C9aa3835e4d14b0aAcb8609ef9971a4d46;\n r_1_1_2_2_1[0] = r_1_1_2_2_1_0;\n }\n {\n address r_1_1_2_2_1_1 = 0x3A0A357b9BDC3Bf03217d81Ed47D493b1543ca5f;\n r_1_1_2_2_1[1] = r_1_1_2_2_1_1;\n }\n {\n address r_1_1_2_2_1_2 = 0xdb1D29105E4689C0933aEBF5BA0e89F9AD76949b;\n r_1_1_2_2_1[2] = r_1_1_2_2_1_2;\n }\n {\n address r_1_1_2_2_1_3 = 0x24CB70c15efC56BcD5ADD3E3671a9A8978a9b890;\n r_1_1_2_2_1[3] = r_1_1_2_2_1_3;\n }\n r_1_1_2_2[1] = r_1_1_2_2_1;\n }\n {\n address[] memory r_1_1_2_2_2 = new address[](3);\n {\n address r_1_1_2_2_2_0 = 0xD03A27c18aea1101D50C04FDEE10DD4D63062A00;\n r_1_1_2_2_2[0] = r_1_1_2_2_2_0;\n }\n {\n address r_1_1_2_2_2_1 = 0x2dd5405cad20BAb8f4F993B51888dC63096CD55A;\n r_1_1_2_2_2[1] = r_1_1_2_2_2_1;\n }\n {\n address r_1_1_2_2_2_2 = 0x93F2EB8b3EaF1d7648E115F570d6245E2aE84ec6;\n r_1_1_2_2_2[2] = r_1_1_2_2_2_2;\n }\n r_1_1_2_2[2] = r_1_1_2_2_2;\n }\n r_1_1_2.s_2 = r_1_1_2_2;\n }\n r_1_1.s_2 = r_1_1_2;\n }\n {\n address[2] memory r_1_1_3;\n {\n address r_1_1_3_0 = 0xCAd0178A692d302067DaBbB0321AD75E055d4580;\n r_1_1_3[0] = r_1_1_3_0;\n }\n {\n address r_1_1_3_1 = 0x928ef1e75148D028e73B8A10A54a6Bb6f5926266;\n r_1_1_3[1] = r_1_1_3_1;\n }\n r_1_1.s_3 = r_1_1_3;\n }\n r_1[1] = r_1_1;\n }\n {\n S_8f6909b2 memory r_1_2;\n {\n S_1b617d04 memory r_1_2_0;\n {\n S_48e72d4c memory r_1_2_0_0;\n {\n S_d0716984 memory r_1_2_0_0_0;\n {\n int208 r_1_2_0_0_0_0 = 96363881988588643014124903031250814833401843396099094528279851;\n r_1_2_0_0_0.s_0 = r_1_2_0_0_0_0;\n }\n {\n bytes27 r_1_2_0_0_0_1 = bytes27(0xf24afb2cc363c314ea945946b23c0571d199e753f1603d1c124e70);\n r_1_2_0_0_0.s_1 = r_1_2_0_0_0_1;\n }\n {\n bool r_1_2_0_0_0_2 = true;\n r_1_2_0_0_0.s_2 = r_1_2_0_0_0_2;\n }\n {\n S_94783a2a memory r_1_2_0_0_0_3;\n {\n uint32 r_1_2_0_0_0_3_0 = 1824009918;\n r_1_2_0_0_0_3.s_0 = r_1_2_0_0_0_3_0;\n }\n {\n bool r_1_2_0_0_0_3_1 = false;\n r_1_2_0_0_0_3.s_1 = r_1_2_0_0_0_3_1;\n }\n {\n bytes23 r_1_2_0_0_0_3_2 = bytes23(0x9df6368d4445b361b6f07f7c8c8496544b91ac7b7fc9f2);\n r_1_2_0_0_0_3.s_2 = r_1_2_0_0_0_3_2;\n }\n r_1_2_0_0_0.s_3 = r_1_2_0_0_0_3;\n }\n r_1_2_0_0.s_0 = r_1_2_0_0_0;\n }\n r_1_2_0.s_0 = r_1_2_0_0;\n }\n {\n string[3] memory r_1_2_0_1;\n {\n string memory r_1_2_0_1_0 = unicode\"Moo é🚀 o🚀oé éoé é🚀oo 🚀éM🚀é🚀o éM🚀 🚀oééo🚀 Moooo 🚀Méoéé o🚀o 🚀oM é\";\n r_1_2_0_1[0] = r_1_2_0_1_0;\n }\n {\n string memory r_1_2_0_1_1 = unicode\"Moo é🚀 éé ooéoM oéooMoé🚀🚀🚀oo🚀o 🚀MMooé \";\n r_1_2_0_1[1] = r_1_2_0_1_1;\n }\n {\n string memory r_1_2_0_1_2 = unicode\"Moo é🚀é🚀oo🚀 🚀M 🚀🚀éé🚀o🚀ooé🚀🚀é🚀 o\";\n r_1_2_0_1[2] = r_1_2_0_1_2;\n }\n r_1_2_0.s_1 = r_1_2_0_1;\n }\n {\n bytes2 r_1_2_0_2 = bytes2(0xa64f);\n r_1_2_0.s_2 = r_1_2_0_2;\n }\n {\n bytes11 r_1_2_0_3 = bytes11(0x740f4ba74871bc9ec25500);\n r_1_2_0.s_3 = r_1_2_0_3;\n }\n r_1_2.s_0 = r_1_2_0;\n }\n {\n address r_1_2_1 = 0x2f613D650EED8d3A21bb1c1391024DeA68E21B69;\n r_1_2.s_1 = r_1_2_1;\n }\n {\n S_5df7cbdd memory r_1_2_2;\n {\n uint216 r_1_2_2_0 = 52139196495110251778772168498373012670287987622237683445548471514;\n r_1_2_2.s_0 = r_1_2_2_0;\n }\n {\n string memory r_1_2_2_1 = unicode\"Moo é🚀🚀Mooéoé🚀M🚀 🚀é o🚀ooooéo oé é é🚀oMo oo éo\";\n r_1_2_2.s_1 = r_1_2_2_1;\n }\n {\n address[][3] memory r_1_2_2_2;\n {\n address[] memory r_1_2_2_2_0 = new address[](4);\n {\n address r_1_2_2_2_0_0 = 0xcF2CaeB584c2a4dfB1af7F0D9e0Fb845e8C8cF6e;\n r_1_2_2_2_0[0] = r_1_2_2_2_0_0;\n }\n {\n address r_1_2_2_2_0_1 = 0x198Ca6d056F46c8b29E6770AC709541583cAE8AA;\n r_1_2_2_2_0[1] = r_1_2_2_2_0_1;\n }\n {\n address r_1_2_2_2_0_2 = 0xFC944D122bc6bB86BB9D550dC8A607001defb911;\n r_1_2_2_2_0[2] = r_1_2_2_2_0_2;\n }\n {\n address r_1_2_2_2_0_3 = 0x93F43e870AF29c8fb5Bb19331Ca8246274399718;\n r_1_2_2_2_0[3] = r_1_2_2_2_0_3;\n }\n r_1_2_2_2[0] = r_1_2_2_2_0;\n }\n {\n address[] memory r_1_2_2_2_1 = new address[](3);\n {\n address r_1_2_2_2_1_0 = 0x43558dEF06AF7F3332e9Bfc5e1a0e6E53811f16C;\n r_1_2_2_2_1[0] = r_1_2_2_2_1_0;\n }\n {\n address r_1_2_2_2_1_1 = 0xd8C817a4915F5351a4b0f5dFa2bD6EF000AA4a43;\n r_1_2_2_2_1[1] = r_1_2_2_2_1_1;\n }\n {\n address r_1_2_2_2_1_2 = 0xBce66483DC063409D649a347d866EB53686CE345;\n r_1_2_2_2_1[2] = r_1_2_2_2_1_2;\n }\n r_1_2_2_2[1] = r_1_2_2_2_1;\n }\n {\n address[] memory r_1_2_2_2_2 = new address[](2);\n {\n address r_1_2_2_2_2_0 = 0x7b395566E1cC2766c1546305dC668b3329E6eBb9;\n r_1_2_2_2_2[0] = r_1_2_2_2_2_0;\n }\n {\n address r_1_2_2_2_2_1 = 0x383d1E6eBBcf38319261c73D1Ab7B99A288EAD65;\n r_1_2_2_2_2[1] = r_1_2_2_2_2_1;\n }\n r_1_2_2_2[2] = r_1_2_2_2_2;\n }\n r_1_2_2.s_2 = r_1_2_2_2;\n }\n r_1_2.s_2 = r_1_2_2;\n }\n {\n address[2] memory r_1_2_3;\n {\n address r_1_2_3_0 = 0xDf4204BFAaE9B2bce18E2906cD1B13Aea534D0f0;\n r_1_2_3[0] = r_1_2_3_0;\n }\n {\n address r_1_2_3_1 = 0x48c8Fb0657762c4f8BC77ecd2Be95c6968e5DFF3;\n r_1_2_3[1] = r_1_2_3_1;\n }\n r_1_2.s_3 = r_1_2_3;\n }\n r_1[2] = r_1_2;\n }\n {\n S_8f6909b2 memory r_1_3;\n {\n S_1b617d04 memory r_1_3_0;\n {\n S_48e72d4c memory r_1_3_0_0;\n {\n S_d0716984 memory r_1_3_0_0_0;\n {\n int208 r_1_3_0_0_0_0 = -169032519442784140758446062937051254553184341018368642998253492;\n r_1_3_0_0_0.s_0 = r_1_3_0_0_0_0;\n }\n {\n bytes27 r_1_3_0_0_0_1 = bytes27(0x47c5c88fc0be9b6396b84290b1fc7b35e0e869060492a9a3e8a3fe);\n r_1_3_0_0_0.s_1 = r_1_3_0_0_0_1;\n }\n {\n bool r_1_3_0_0_0_2 = true;\n r_1_3_0_0_0.s_2 = r_1_3_0_0_0_2;\n }\n {\n S_94783a2a memory r_1_3_0_0_0_3;\n {\n uint32 r_1_3_0_0_0_3_0 = 3650270403;\n r_1_3_0_0_0_3.s_0 = r_1_3_0_0_0_3_0;\n }\n {\n bool r_1_3_0_0_0_3_1 = true;\n r_1_3_0_0_0_3.s_1 = r_1_3_0_0_0_3_1;\n }\n {\n bytes23 r_1_3_0_0_0_3_2 = bytes23(0x663a0063fefaa66598e876859a71d5de946d82957f06b4);\n r_1_3_0_0_0_3.s_2 = r_1_3_0_0_0_3_2;\n }\n r_1_3_0_0_0.s_3 = r_1_3_0_0_0_3;\n }\n r_1_3_0_0.s_0 = r_1_3_0_0_0;\n }\n r_1_3_0.s_0 = r_1_3_0_0;\n }\n {\n string[3] memory r_1_3_0_1;\n {\n string memory r_1_3_0_1_0 = unicode\"Moo é🚀é🚀 ééo oé🚀 oééo Mo é\";\n r_1_3_0_1[0] = r_1_3_0_1_0;\n }\n {\n string memory r_1_3_0_1_1 = unicode\"Moo é🚀o o Mo oooo🚀MMééo🚀é🚀oéo🚀MMé🚀oé🚀Mo🚀🚀o🚀é o🚀 🚀oéMéMé oooé\";\n r_1_3_0_1[1] = r_1_3_0_1_1;\n }\n {\n string memory r_1_3_0_1_2 = unicode\"Moo é🚀 o MMo\";\n r_1_3_0_1[2] = r_1_3_0_1_2;\n }\n r_1_3_0.s_1 = r_1_3_0_1;\n }\n {\n bytes2 r_1_3_0_2 = bytes2(0x3257);\n r_1_3_0.s_2 = r_1_3_0_2;\n }\n {\n bytes11 r_1_3_0_3 = bytes11(0xaf7de65e1e61a0a79005ef);\n r_1_3_0.s_3 = r_1_3_0_3;\n }\n r_1_3.s_0 = r_1_3_0;\n }\n {\n address r_1_3_1 = 0xef58Fa521967accD2aDC1f08e4f54b674B49E606;\n r_1_3.s_1 = r_1_3_1;\n }\n {\n S_5df7cbdd memory r_1_3_2;\n {\n uint216 r_1_3_2_0 = 50134414082692195463601619161210169859173079101287930974986813554;\n r_1_3_2.s_0 = r_1_3_2_0;\n }\n {\n string memory r_1_3_2_1 = unicode\"Moo é🚀🚀ooo oo o\";\n r_1_3_2.s_1 = r_1_3_2_1;\n }\n {\n address[][3] memory r_1_3_2_2;\n {\n address[] memory r_1_3_2_2_0 = new address[](1);\n {\n address r_1_3_2_2_0_0 = 0x9ba234d960c530e916dF9B480cd9a27E8313A4b4;\n r_1_3_2_2_0[0] = r_1_3_2_2_0_0;\n }\n r_1_3_2_2[0] = r_1_3_2_2_0;\n }\n {\n address[] memory r_1_3_2_2_1 = new address[](4);\n {\n address r_1_3_2_2_1_0 = 0x0a0d79D1DeBce4d7CC269fF1Dc050c6c0aa62774;\n r_1_3_2_2_1[0] = r_1_3_2_2_1_0;\n }\n {\n address r_1_3_2_2_1_1 = 0xae743080325b1703fEdAB647b082bcDAB6EA6c43;\n r_1_3_2_2_1[1] = r_1_3_2_2_1_1;\n }\n {\n address r_1_3_2_2_1_2 = 0x5b102ab08a822322AD0b58100aB0bBe1EF4a12de;\n r_1_3_2_2_1[2] = r_1_3_2_2_1_2;\n }\n {\n address r_1_3_2_2_1_3 = 0x26325763D1972aBB32EB731B55535B99B130C1AD;\n r_1_3_2_2_1[3] = r_1_3_2_2_1_3;\n }\n r_1_3_2_2[1] = r_1_3_2_2_1;\n }\n {\n address[] memory r_1_3_2_2_2 = new address[](0);\n r_1_3_2_2[2] = r_1_3_2_2_2;\n }\n r_1_3_2.s_2 = r_1_3_2_2;\n }\n r_1_3.s_2 = r_1_3_2;\n }\n {\n address[2] memory r_1_3_3;\n {\n address r_1_3_3_0 = 0x69B0B6413055f14A9d1e061B8E606015c4854ba7;\n r_1_3_3[0] = r_1_3_3_0;\n }\n {\n address r_1_3_3_1 = 0xDF5291e1A43B02ea41fa9976e5E2C4A88014C377;\n r_1_3_3[1] = r_1_3_3_1;\n }\n r_1_3.s_3 = r_1_3_3;\n }\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n string memory r_2 = unicode\"Moo é🚀é o🚀éééééé🚀🚀o🚀oo🚀Méoé🚀é🚀M🚀🚀\";\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000203cf9a19df94e3887bb0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000005e00000000000000000000000000000000000000000000000000000000000000c6000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000cce3dc32ec89f8340ea13dc664a6828966f9047e0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000eb7c5898a284ca8526b64c2a03a3f7a99b3a7a36000000000000000000000000f980632a2188f31454ffb9207965154b5fc58018ffffffffffffbcc8c71bb2edd8495a53e8eb9ca48cb032fdf81ce9244a9d3e03d7809e4d96d6b185b7eac7918e54f1050a44400e0d3e655c4f6a1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005db0ebf20000000000000000000000000000000000000000000000000000000000000001028237dccc4bdbd8b2c7f806b99b1241e1edec5b3501ff000000000000000000000000000000000000000000000000000000000000000000000000000000012010fb000000000000000000000000000000000000000000000000000000000000b680eeae2ad10c4698640f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a806f6f6ff09f9a806ff09f9a80206fc3a9200000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000534d6f6f20c3a9f09f9a804df09f9a80c3a96f6f4df09f9a804d6ff09f9a802020c3a96f6fc3a94dc3a96f204d6f4d6f204df09f9a80c3a9c3a94d204dc3a9c3a96f4d6f6fc3a9f09f9a80c3a9c3a9f09f9a8020000000000000000000000000000000000000df780913c4763bb0b872c6adb33aceeb1123de6fc7affafac4cd84000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a804dc3a96f6f4df09f9a804d4dc3a9f09f9a806f000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000008a9e7e7fb6142e27a0b8cf42fe3112fc6fe37e3f00000000000000000000000067c4d42e1080e9d3386a150bcc3973bb68939689000000000000000000000000458bf0cd9301c47a66648612b8c4e3497e36117c0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000f0e2ddbe109772e33b1157f8d60e162939a1ad1c000000000000000000000000bb32a13a27b3df0e64a2c0c444997a8fc87469320000000000000000000000003bdb08f3a08ec371cfd6885ffcadec41a47c41d00000000000000000000000006084d44fc1ed03a980fd3510a56e88d2984818ac00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000005600501869f44bb0c0a6729e8340c20603d0f7d60000000000000000000000000000000000000000000000000000000000000380000000000000000000000000cad0178a692d302067dabbb0321ad75e055d4580000000000000000000000000928ef1e75148d028e73b8a10a54a6bb6f59262660000000000002c878173a54c81f3d713d42f30cfe2ab7d571a9794780513251d9985e2f6ce9f3ced607c0120d3e0656b15f87f8a3b1712f53cd144000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066516b9b00000000000000000000000000000000000000000000000000000000000000016fda9f56604a784bc6a56b465bbbd229d63fccdcf775fa00000000000000000000000000000000000000000000000000000000000000000000000000000001204d3e000000000000000000000000000000000000000000000000000000000000533ab9f15dbc0c74f840a5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000484d6f6f20c3a9f09f9a80204d6f4d6f20c3a96f6fc3a96f6fc3a920c3a9c3a96f4dc3a94dc3a96ff09f9a806f20206f6f2020204d206ff09f9a806f4d6f4dc3a96f206fc3a9c3a920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a806ff09f9a80206fc3a96f204d6f6f204d4d6f6ff09f9a8020f09f9a80c3a920206f6f6f6f4d4d4df09f9a806ff09f9a80f09f9a80c3a920f09f9a806fc3a96f6f6f4d6ff09f9a8020f09f9a804d4d4d20c3a9c3a9000000000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a80f09f9a80206f4d4d6ff09f9a80f09f9a80f09f9a806f20f09f9a804d204d204d6ff09f9a806f000000000000000000000000000000000000000000a33d4269522979a6be5aff8d28f62830e530d857e75bb80e8c0430000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a806f6f6f4d6fc3a96fc3a920c3a96f206f4d204d4dc3a9f09f9a80f09f9a80c3a96fc3a920c3a920f09f9a804d6ff09f9a802020c3a94d6ff09f9a80c3a9f09f9a804df09f9a80c3a9c3a96ff09f9a804dc3a9000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000a16a5ac73a584c0cad9b4921012e877c2bbac2cf000000000000000000000000548726cc2c0364508e385cc7f57a16727bf944a50000000000000000000000006108947ede11b4cacb57b1d1724266989d6cdd71000000000000000000000000ee7b17a612cb573c6feeaebab9323751476087f5000000000000000000000000000000000000000000000000000000000000000400000000000000000000000060c956c9aa3835e4d14b0aacb8609ef9971a4d460000000000000000000000003a0a357b9bdc3bf03217d81ed47d493b1543ca5f000000000000000000000000db1d29105e4689c0933aebf5ba0e89f9ad76949b00000000000000000000000024cb70c15efc56bcd5add3e3671a9a8978a9b8900000000000000000000000000000000000000000000000000000000000000003000000000000000000000000d03a27c18aea1101d50c04fdee10dd4d63062a000000000000000000000000002dd5405cad20bab8f4f993b51888dc63096cd55a00000000000000000000000093f2eb8b3eaf1d7648e115f570d6245e2ae84ec600000000000000000000000000000000000000000000000000000000000000a00000000000000000000000002f613d650eed8d3a21bb1c1391024dea68e21b6900000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000df4204bfaae9b2bce18e2906cd1b13aea534d0f000000000000000000000000048c8fb0657762c4f8bc77ecd2be95c6968e5dff30000000000003bf7a6ef8296b39bf713e97416b793ebd5a4ef7f4ddc2122452bf24afb2cc363c314ea945946b23c0571d199e753f1603d1c124e7000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006cb82ebe00000000000000000000000000000000000000000000000000000000000000009df6368d4445b361b6f07f7c8c8496544b91ac7b7fc9f20000000000000000000000000000000000000000000000000000000000000000000000000000000120a64f000000000000000000000000000000000000000000000000000000000000740f4ba74871bc9ec2550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000714d6f6f20c3a9f09f9a80206ff09f9a806fc3a920c3a96fc3a920c3a9f09f9a806f6f20f09f9a80c3a94df09f9a80c3a9f09f9a806f20c3a94df09f9a8020f09f9a806fc3a9c3a96ff09f9a80204d6f6f6f6f20f09f9a804dc3a96fc3a9c3a920206ff09f9a806f20f09f9a806f4d20c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a8020c3a9c3a9206f6fc3a96f4d206fc3a96f6f4d6fc3a9f09f9a80f09f9a80f09f9a806f6ff09f9a806f20f09f9a804d4d6f6fc3a9200000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a80c3a9f09f9a806f6ff09f9a8020f09f9a804d20f09f9a80f09f9a80c3a9c3a9f09f9a806ff09f9a806f6fc3a9f09f9a80f09f9a80c3a9f09f9a80206f000000000000000000000000000000000000000000000000000000000000007ebe4d380bd5601bc35ddb3f1d85fb9138e73233aa79b353c054da000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a80f09f9a804d6f6fc3a96fc3a9f09f9a804df09f9a8020f09f9a80c3a9206ff09f9a806f6f6f6fc3a96f206fc3a920c3a92020c3a9f09f9a806f4d6f20206f6f2020c3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000cf2caeb584c2a4dfb1af7f0d9e0fb845e8c8cf6e000000000000000000000000198ca6d056f46c8b29e6770ac709541583cae8aa000000000000000000000000fc944d122bc6bb86bb9d550dc8a607001defb91100000000000000000000000093f43e870af29c8fb5bb19331ca8246274399718000000000000000000000000000000000000000000000000000000000000000300000000000000000000000043558def06af7f3332e9bfc5e1a0e6e53811f16c000000000000000000000000d8c817a4915f5351a4b0f5dfa2bd6ef000aa4a43000000000000000000000000bce66483dc063409d649a347d866eb53686ce34500000000000000000000000000000000000000000000000000000000000000020000000000000000000000007b395566e1cc2766c1546305dc668b3329e6ebb9000000000000000000000000383d1e6ebbcf38319261c73d1ab7b99a288ead6500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000ef58fa521967accd2adc1f08e4f54b674b49e606000000000000000000000000000000000000000000000000000000000000036000000000000000000000000069b0b6413055f14a9d1e061b8e606015c4854ba7000000000000000000000000df5291e1a43b02ea41fa9976e5e2c4a88014c377ffffffffffff96cf90e9075a86fa177ae6ad1485f8987f38bc87226752e1484c47c5c88fc0be9b6396b84290b1fc7b35e0e869060492a9a3e8a3fe0000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000d992b4c30000000000000000000000000000000000000000000000000000000000000001663a0063fefaa66598e876859a71d5de946d82957f06b400000000000000000000000000000000000000000000000000000000000000000000000000000001203257000000000000000000000000000000000000000000000000000000000000af7de65e1e61a0a79005ef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a80c3a9f09f9a8020c3a9c3a96f206fc3a9f09f9a80206fc3a9c3a96f20204d6f2020c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d4d6f6f20c3a9f09f9a806f206f204d6f206f6f6f6ff09f9a804d4dc3a9c3a96ff09f9a80c3a9f09f9a806fc3a96ff09f9a804d4dc3a9f09f9a806fc3a9f09f9a804d6ff09f9a80f09f9a806ff09f9a80c3a9206ff09f9a802020f09f9a806fc3a94dc3a94dc3a9206f6f6fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a80206f20204d4d6f000000000000000000000000000000000000000079deb8f456d8e582d8016ed011ecc0d6393c5c78f1ffff7ebfc072000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a80f09f9a806f6f6f206f6f206f00000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009ba234d960c530e916df9b480cd9a27e8313a4b400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a0d79d1debce4d7cc269ff1dc050c6c0aa62774000000000000000000000000ae743080325b1703fedab647b082bcdab6ea6c430000000000000000000000005b102ab08a822322ad0b58100ab0bbe1ef4a12de00000000000000000000000026325763d1972abb32eb731b55535b99b130c1ad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a80c3a9206ff09f9a80c3a9c3a9c3a9c3a9c3a9c3a9f09f9a80f09f9a806ff09f9a806f6ff09f9a804dc3a96fc3a9f09f9a80c3a9f09f9a804df09f9a80f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes2,address,(address,bytes4,(bool,bytes1),uint120,bytes13),bytes23,(address,(address,bytes32,address,bytes14[3][2]),bool[4],address[1],int136))", + "type": "(bytes2,address,(address,bytes4,(bool,bytes1),uint120,bytes13),bytes23,(address,(address,bytes32,address,bytes14[3][2]),bool[4],address[1],int136))", + "value": [ + "0x76b0", + "0x3F3F76BEBF4f431E9B51a748D2F96D3BBd96D743", + [ + "0x054F544b9d1294606157401CE18Da02f21FEA173", + "0x79904220", + [false, "0x8b"], + "1025546436232594542959493000688835848", + "0xea456fd2fd8500d2705bdb24df" + ], + "0xfda72977b964fe605d3bbdac5f8b33bb5164473c903486", + [ + "0x796D138062c6abb7c32a7F5462530C0212AFbbAe", + [ + "0x5Ee5C5e39A301e766BBAEe633396D5241b840ab5", + "0xc86903f18b84c6b6f48cfceca551150814defe2c7febf8089233e0df1a7f1175", + "0x3554c507c75b9B1390B9d6B2f5B1a8a5F5A8f7A1", + [ + [ + "0x42f1765f26792e20e55543de11bf", + "0x6366a9500ceddce6bbb1d9b58efa", + "0xadc81507ee5fb146d4a1d78396d6" + ], + [ + "0xd36d89c7fa82695cdf55a83adf89", + "0xd2d408132a392e34290a3b13dcc2", + "0x31ae5dc3486ccf8729d461194bc6" + ] + ] + ], + [true, true, true, true], + ["0x30D442c6a86e23E539C9Bb75ab10161c7F21020c"], + "22564925728339677287236097601267203561700" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x76b0" + }, + { + "type": "address", + "value": "0x3F3F76BEBF4f431E9B51a748D2F96D3BBd96D743" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x054F544b9d1294606157401CE18Da02f21FEA173" + }, + { + "type": "hexstring", + "value": "0x79904220" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x8b" + } + ] + }, + { + "type": "number", + "value": "1025546436232594542959493000688835848" + }, + { + "type": "hexstring", + "value": "0xea456fd2fd8500d2705bdb24df" + } + ] + }, + { + "type": "hexstring", + "value": "0xfda72977b964fe605d3bbdac5f8b33bb5164473c903486" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x796D138062c6abb7c32a7F5462530C0212AFbbAe" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5Ee5C5e39A301e766BBAEe633396D5241b840ab5" + }, + { + "type": "hexstring", + "value": "0xc86903f18b84c6b6f48cfceca551150814defe2c7febf8089233e0df1a7f1175" + }, + { + "type": "address", + "value": "0x3554c507c75b9B1390B9d6B2f5B1a8a5F5A8f7A1" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x42f1765f26792e20e55543de11bf" + }, + { + "type": "hexstring", + "value": "0x6366a9500ceddce6bbb1d9b58efa" + }, + { + "type": "hexstring", + "value": "0xadc81507ee5fb146d4a1d78396d6" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xd36d89c7fa82695cdf55a83adf89" + }, + { + "type": "hexstring", + "value": "0xd2d408132a392e34290a3b13dcc2" + }, + { + "type": "hexstring", + "value": "0x31ae5dc3486ccf8729d461194bc6" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x30D442c6a86e23E539C9Bb75ab10161c7F21020c" + } + ] + }, + { + "type": "number", + "value": "22564925728339677287236097601267203561700" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610689806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061057b565b60405180910390f35b6100566102e9565b61005e6102e9565b61076b60f41b8152733f3f76bebf4f431e9b51a748d2f96d3bbd96d7436020808301919091526040805160a08101825260008082528184018181528351808501855282815280860183905283850190815260608085018481526080860185815273054f544b9d1294606157401ce18da02f21fea17387526303cc821160e51b90945286518088018852948552608b60f81b978501979097529290526ec58357d72c73bc231de3036b801d089094526cea456fd2fd8500d2705bdb24df60981b909352908301527ffda72977b964fe605d3bbdac5f8b33bb5164473c9034860000000000000000009082015261015161034f565b73796d138062c6abb7c32a7f5462530c0212afbbae8152610170610399565b735ee5c5e39a301e766bbaee633396d5241b840ab581527fc86903f18b84c6b6f48cfceca551150814defe2c7febf8089233e0df1a7f11756020820152733554c507c75b9b1390b9d6b2f5b1a8a5f5a8f7a160408201526101cf6103be565b6101d76103eb565b6d42f1765f26792e20e55543de11bf60901b81526d31b354a80676ee735dd8ecdac77d60911b60208201526d56e40a83f72fd8a36a50ebc1cb6b60911b604082015281526102236103eb565b6dd36d89c7fa82695cdf55a83adf8960901b81526d696a0409951c971a14851d89ee6160911b6020808301919091526d18d72ee1a43667c394ea308ca5e360911b6040830152828101919091526060830191909152820152610283610409565b600180825260208201819052604080830182905260608301919091528201526102aa610427565b7330d442c6a86e23e539c9bb75ab10161c7f21020c8152606082015270424ff69d84d8d46959e91522e2bfdbd8e4608080830191909152820152919050565b6040805160a0808201835260008083526020808401829052845192830185528183528281018290528451808601865282815290810182905282850152606082018190526080820152909182019081526000602082015260400161034a61034f565b905290565b6040518060a0016040528060006001600160a01b03168152602001610372610399565b815260200161037f610409565b815260200161038c610427565b8152600060209091015290565b60408051608081018252600080825260208201819052918101919091526060810161034a5b60405180604001604052806002905b6103d56103eb565b8152602001906001900390816103cd5790505090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b8060005b600481101561046a5781511515845260209384019390910190600101610449565b50505050565b8060005b600181101561046a5781516001600160a01b0316845260209384019390910190600101610474565b60018060a01b038082511683526020808301518281511682860152818101516040860152604081015160608482168188015280830151945060808701925060009150815b600281101561053357855184845b600381101561052057825171ffffffffffffffffffffffffffffffffffff1916825291870191908701906001016104ee565b50505094840194928101926001016104e0565b5060408601519450610549610140880186610445565b8501519350610560925050506101c0840182610470565b5060808101516105766101e084018260100b9052565b505050565b81516001600160f01b03191681526020808301516001600160a01b0390811682840152604080850151805190921681850152818301516001600160e01b03191660608086019190915290820151805115156080808701919091529301516001600160f81b03191660a0850152808201516effffffffffffffffffffffffffffff1660c08501529082015172ffffffffffffffffffffffffffffffffffffff191660e084015283015168ffffffffffffffffff191661010083015282015161032082019061064c61012084018261049c565b509291505056fea2646970667358221220c50c9c634edae623d22a7635d6d4fd754cf1c00028f7735cc6dda0c67f424f2764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_77880394 {\n bool s_0;\n bytes1 s_1;\n }\n\n struct S_52454aca {\n address s_0;\n bytes4 s_1;\n S_77880394 s_2;\n uint120 s_3;\n bytes13 s_4;\n }\n\n struct S_1d3cd2dc {\n address s_0;\n bytes32 s_1;\n address s_2;\n bytes14[3][2] s_3;\n }\n\n struct S_3b00f4dc {\n address s_0;\n S_1d3cd2dc s_1;\n bool[4] s_2;\n address[1] s_3;\n int136 s_4;\n }\n\n struct S_0ef3815e {\n bytes2 s_0;\n address s_1;\n S_52454aca s_2;\n bytes23 s_3;\n S_3b00f4dc s_4;\n }\n\n function test () public pure returns (S_0ef3815e memory) {\n S_0ef3815e memory r;\n {\n bytes2 r_0 = bytes2(0x76b0);\n r.s_0 = r_0;\n }\n {\n address r_1 = 0x3F3F76BEBF4f431E9B51a748D2F96D3BBd96D743;\n r.s_1 = r_1;\n }\n {\n S_52454aca memory r_2;\n {\n address r_2_0 = 0x054F544b9d1294606157401CE18Da02f21FEA173;\n r_2.s_0 = r_2_0;\n }\n {\n bytes4 r_2_1 = bytes4(0x79904220);\n r_2.s_1 = r_2_1;\n }\n {\n S_77880394 memory r_2_2;\n {\n bool r_2_2_0 = false;\n r_2_2.s_0 = r_2_2_0;\n }\n {\n bytes1 r_2_2_1 = bytes1(0x8b);\n r_2_2.s_1 = r_2_2_1;\n }\n r_2.s_2 = r_2_2;\n }\n {\n uint120 r_2_3 = 1025546436232594542959493000688835848;\n r_2.s_3 = r_2_3;\n }\n {\n bytes13 r_2_4 = bytes13(0xea456fd2fd8500d2705bdb24df);\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n {\n bytes23 r_3 = bytes23(0xfda72977b964fe605d3bbdac5f8b33bb5164473c903486);\n r.s_3 = r_3;\n }\n {\n S_3b00f4dc memory r_4;\n {\n address r_4_0 = 0x796D138062c6abb7c32a7F5462530C0212AFbbAe;\n r_4.s_0 = r_4_0;\n }\n {\n S_1d3cd2dc memory r_4_1;\n {\n address r_4_1_0 = 0x5Ee5C5e39A301e766BBAEe633396D5241b840ab5;\n r_4_1.s_0 = r_4_1_0;\n }\n {\n bytes32 r_4_1_1 = bytes32(0xc86903f18b84c6b6f48cfceca551150814defe2c7febf8089233e0df1a7f1175);\n r_4_1.s_1 = r_4_1_1;\n }\n {\n address r_4_1_2 = 0x3554c507c75b9B1390B9d6B2f5B1a8a5F5A8f7A1;\n r_4_1.s_2 = r_4_1_2;\n }\n {\n bytes14[3][2] memory r_4_1_3;\n {\n bytes14[3] memory r_4_1_3_0;\n {\n bytes14 r_4_1_3_0_0 = bytes14(0x42f1765f26792e20e55543de11bf);\n r_4_1_3_0[0] = r_4_1_3_0_0;\n }\n {\n bytes14 r_4_1_3_0_1 = bytes14(0x6366a9500ceddce6bbb1d9b58efa);\n r_4_1_3_0[1] = r_4_1_3_0_1;\n }\n {\n bytes14 r_4_1_3_0_2 = bytes14(0xadc81507ee5fb146d4a1d78396d6);\n r_4_1_3_0[2] = r_4_1_3_0_2;\n }\n r_4_1_3[0] = r_4_1_3_0;\n }\n {\n bytes14[3] memory r_4_1_3_1;\n {\n bytes14 r_4_1_3_1_0 = bytes14(0xd36d89c7fa82695cdf55a83adf89);\n r_4_1_3_1[0] = r_4_1_3_1_0;\n }\n {\n bytes14 r_4_1_3_1_1 = bytes14(0xd2d408132a392e34290a3b13dcc2);\n r_4_1_3_1[1] = r_4_1_3_1_1;\n }\n {\n bytes14 r_4_1_3_1_2 = bytes14(0x31ae5dc3486ccf8729d461194bc6);\n r_4_1_3_1[2] = r_4_1_3_1_2;\n }\n r_4_1_3[1] = r_4_1_3_1;\n }\n r_4_1.s_3 = r_4_1_3;\n }\n r_4.s_1 = r_4_1;\n }\n {\n bool[4] memory r_4_2;\n {\n bool r_4_2_0 = true;\n r_4_2[0] = r_4_2_0;\n }\n {\n bool r_4_2_1 = true;\n r_4_2[1] = r_4_2_1;\n }\n {\n bool r_4_2_2 = true;\n r_4_2[2] = r_4_2_2;\n }\n {\n bool r_4_2_3 = true;\n r_4_2[3] = r_4_2_3;\n }\n r_4.s_2 = r_4_2;\n }\n {\n address[1] memory r_4_3;\n {\n address r_4_3_0 = 0x30D442c6a86e23E539C9Bb75ab10161c7F21020c;\n r_4_3[0] = r_4_3_0;\n }\n r_4.s_3 = r_4_3;\n }\n {\n int136 r_4_4 = 22564925728339677287236097601267203561700;\n r_4.s_4 = r_4_4;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x76b00000000000000000000000000000000000000000000000000000000000000000000000000000000000003f3f76bebf4f431e9b51a748d2f96d3bbd96d743000000000000000000000000054f544b9d1294606157401ce18da02f21fea173799042200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c58357d72c73bc231de3036b801d08ea456fd2fd8500d2705bdb24df00000000000000000000000000000000000000fda72977b964fe605d3bbdac5f8b33bb5164473c903486000000000000000000000000000000000000000000796d138062c6abb7c32a7f5462530c0212afbbae0000000000000000000000005ee5c5e39a301e766bbaee633396d5241b840ab5c86903f18b84c6b6f48cfceca551150814defe2c7febf8089233e0df1a7f11750000000000000000000000003554c507c75b9b1390b9d6b2f5b1a8a5f5a8f7a142f1765f26792e20e55543de11bf0000000000000000000000000000000000006366a9500ceddce6bbb1d9b58efa000000000000000000000000000000000000adc81507ee5fb146d4a1d78396d6000000000000000000000000000000000000d36d89c7fa82695cdf55a83adf89000000000000000000000000000000000000d2d408132a392e34290a3b13dcc200000000000000000000000000000000000031ae5dc3486ccf8729d461194bc6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000030d442c6a86e23e539c9bb75ab10161c7f21020c000000000000000000000000000000424ff69d84d8d46959e91522e2bfdbd8e4" + }, + { + "name": "random-(uint64[],(uint112,(string[2],bool,string,bytes4),int184,bytes2[2],bytes20)[1],address[2],(bytes11,bool)[4],bool)[][2]", + "type": "(uint64[],(uint112,(string[2],bool,string,bytes4),int184,bytes2[2],bytes20)[1],address[2],(bytes11,bool)[4],bool)[][2]", + "value": [ + [], + [ + [ + [], + [ + [ + "2168309674635519289834040467556503", + [ + ["Moo é🚀 Moo🚀🚀é🚀🚀Mé🚀🚀M MoM🚀🚀ooééé Méo🚀", "Moo é🚀"], + false, + "Moo é🚀 oM éo🚀🚀 o ", + "0x2fea09a5" + ], + "783499682528676179965540489384191606492672511931549245", + ["0x02ec", "0xd610"], + "0x114612429b3ae1fab0602bcd8db486a8d5200ac3" + ] + ], + [ + "0x757a571F7dAb143891138d94D9d7A26daE1754af", + "0x1DA17106a15693EC1CFB7eC1A924C5C6B85B8Ed6" + ], + [ + ["0xd1fe69d986ac510ad6d04c", false], + ["0x24b6ea34176870c028d71f", false], + ["0x688c1660d8176fe4b67dbd", false], + ["0x44ff5820b17d450cb84099", true] + ], + true + ], + [ + [], + [ + [ + "2116535856143673809255732494889387", + [ + [ + "Moo é🚀🚀éé🚀 o ééé M🚀 éé🚀o🚀🚀MééMéMoo🚀Méé🚀é MéM🚀🚀🚀é oMMo o", + "Moo é🚀🚀M🚀oMo é🚀oooé oo " + ], + true, + "Moo é🚀o🚀oMo M🚀🚀é🚀 ", + "0x74f90bab" + ], + "10284111585956313908193614209681614157542633602231900645", + ["0x6df3", "0x6156"], + "0x257df5eb2b681b87ba618b14c98519af723c58a4" + ] + ], + [ + "0x649fF49E2355b82FFBeEf1bE1eD848613661948A", + "0x1eB75C9AE41E2377Fc279a294E91a2a649EE2549" + ], + [ + ["0xfad930cc2266f718adbcb1", false], + ["0xf4b4b728af82effb987b5d", true], + ["0xe514227da14cb411a572a4", true], + ["0x1ab57d44a1ff46e64f5269", false] + ], + false + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2168309674635519289834040467556503" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 Moo🚀🚀é🚀🚀Mé🚀🚀M MoM🚀🚀ooééé Méo🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀 oM éo🚀🚀 o " + }, + { + "type": "hexstring", + "value": "0x2fea09a5" + } + ] + }, + { + "type": "number", + "value": "783499682528676179965540489384191606492672511931549245" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x02ec" + }, + { + "type": "hexstring", + "value": "0xd610" + } + ] + }, + { + "type": "hexstring", + "value": "0x114612429b3ae1fab0602bcd8db486a8d5200ac3" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x757a571F7dAb143891138d94D9d7A26daE1754af" + }, + { + "type": "address", + "value": "0x1DA17106a15693EC1CFB7eC1A924C5C6B85B8Ed6" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd1fe69d986ac510ad6d04c" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x24b6ea34176870c028d71f" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x688c1660d8176fe4b67dbd" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x44ff5820b17d450cb84099" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2116535856143673809255732494889387" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀éé🚀 o ééé M🚀 éé🚀o🚀🚀MééMéMoo🚀Méé🚀é MéM🚀🚀🚀é oMMo o" + }, + { + "type": "string", + "value": "Moo é🚀🚀M🚀oMo é🚀oooé oo " + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀o🚀oMo M🚀🚀é🚀 " + }, + { + "type": "hexstring", + "value": "0x74f90bab" + } + ] + }, + { + "type": "number", + "value": "10284111585956313908193614209681614157542633602231900645" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x6df3" + }, + { + "type": "hexstring", + "value": "0x6156" + } + ] + }, + { + "type": "hexstring", + "value": "0x257df5eb2b681b87ba618b14c98519af723c58a4" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x649fF49E2355b82FFBeEf1bE1eD848613661948A" + }, + { + "type": "address", + "value": "0x1eB75C9AE41E2377Fc279a294E91a2a649EE2549" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xfad930cc2266f718adbcb1" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf4b4b728af82effb987b5d" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xe514227da14cb411a572a4" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x1ab57d44a1ff46e64f5269" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610b3e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906108d1565b60405180910390f35b610056610567565b61005e610567565b604080516000808252602082019092528161008f565b61007c61058e565b8152602001906001900390816100745790505b5082525060408051600280825260608201909252600091816020015b6100b361058e565b8152602001906001900390816100ab5790505090506100d061058e565b60408051600081526020810190915281526100e96105cf565b6100f16105fc565b6d6ae7ea6cdea25d3b4d81ae7e8897815261010a610633565b610112610567565b60006040518060800160405280604a8152602001610a98604a9139825250604080518082018252600a8152689adede418753e13f3560b71b6020808301919091528084019190915291835260008383015280518082018252601e81527f4d6f6f20c3a9f09f9a8020206f4d2020c3a96ff09f9a80f09f9a80206f2000008184015283820152632fea09a560e01b60608401529083019190915276082e1c3cbda53268f0d3206b86b02e7aa1f8bb105f863d908201526101cf610661565b60bb60f21b8152610d6160f41b602080830191909152606083019190915273114612429b3ae1fab0602bcd8db486a8d5200ac360601b6080830152908252820152610218610661565b73757a571f7dab143891138d94d9d7a26dae1754af8152731da17106a15693ec1cfb7ec1a924c5c6b85b8ed66020820152604082015261025661067f565b604080518082018252600060208083018290526a347f9a7661ab1442b5b41360aa1b8352918452825180840184528083018290526a24b6ea34176870c028d71f60a81b815284830152825180840184528083018290526a688c1660d8176fe4b67dbd60a81b81528484015282518084019093526a44ff5820b17d450cb8409960a81b8352600191830182905260608085019390935291840192909252608083019190915282518291849161030c5761030c6109f1565b60200260200101819052505061032061058e565b60408051600081526020810190915281526103396105cf565b6103416105fc565b6d685a7031f9b1e95b2bb3ad1271ab815261035a610633565b610362610567565b60006040518060a00160405280606c8152602001610a08606c91398252506040805160608101909152602780825260009190610ae260208301396020808401919091529183525060018282015260408051606081019091526024808252600092610a74908301396040808401919091526374f90bab60e01b6060840152602084019290925250766b5f02b18b0f7f158070d8464a3da4dc9bbe9ead4d19e59082015261040c610661565b616df360f01b81526130ab60f11b602080830191909152606083019190915273095f7d7acada06e1ee9862c53261466bdc8f162960621b6080830152908252820152610456610661565b73649ff49e2355b82ffbeef1be1ed848613661948a8152731eb75c9ae41e2377fc279a294e91a2a649ee25496020820152604082015261049461067f565b604080518082018252600060208083018290526afad930cc2266f718adbcb160a81b8352918452825180840184526af4b4b728af82effb987b5d60a81b8152600181840181905285840191909152835180850185526a3945089f68532d04695ca960aa1b81528084018290528585015283518085019094529183018190526a1ab57d44a1ff46e64f526960a81b8352606080850193909352918401929092526080830152825182918491811061054c5761054c6109f1565b60209081029190910101525080826001602002015250919050565b60405180604001604052806002905b60608152602001906001900390816105765790505090565b6040518060a00160405280606081526020016105a86105cf565b81526020016105b5610661565b81526020016105c261067f565b8152600060209091015290565b60405180602001604052806001905b6105e66105fc565b8152602001906001900390816105de5790505090565b6040518060a0016040528060006001600160701b0316815260200161061f610633565b8152600060208201526040016105c2610661565b6040518060800160405280610646610567565b81526000602082018190526060604083018190529091015290565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004905b604080518082019091526000808252602082015281526020019060019003908161068e5790505090565b6000815180845260005b818110156106de576020818501810151868301820152016106c2565b818111156106f0576000602083870101525b50601f01601f19169290920160200192915050565b8060005b60028110156107325781516001600160f01b031916845260209384019390910190600101610709565b50505050565b6000826020808201846000805b6001808210610754575061085d565b8685038a52835180516001600160701b031686528681015160c088880181905281516080918901829052610140890192916101808a019190885b60028110156107bd5761013f198c85030186526107ac8484516106b8565b958d01959350918c0191870161078e565b508b840151151560e08c01526040808501518c850360bf19016101008e015290975094506107eb83866106b8565b6060948501516001600160e01b0319166101208d015286880151601681900b898e0152909550939250828601519650610826838c0188610705565b8501516bffffffffffffffffffffffff19811660a08c0152955061084992505050565b9a87019a9550505091840191600101610745565b5091979650505050505050565b8060005b60028110156107325781516001600160a01b031684526020938401939091019060010161086e565b8060005b600481101561073257815180516001600160a81b03191685526020908101511515818601526040909401939091019060010161089a565b60208082526000906060830183820185845b60028110156109e557601f1987850381018452825180518087529087019087870190600581901b8801890160005b828110156109ce5789820386018452845180516101a080855281519085018190526101c08501918e01906000905b8082101561096957825167ffffffffffffffff168452928f0192918f01916001919091019061093f565b5050508c8201518482038e8601526109818282610738565b9150506040808301516109968287018261086a565b5050606082015160806109ab81870183610896565b92909201518015156101808601529150958c0195948c0194925050600101610911565b5097505050938601935050908401906001016108e3565b50919695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a80c3a9c3a9f09f9a80206f20c3a9c3a9c3a9204df09f9a8020c3a9c3a9f09f9a806ff09f9a80f09f9a804dc3a9c3a94dc3a94d6f6ff09f9a804dc3a9c3a9f09f9a80c3a9204dc3a94df09f9a80f09f9a80f09f9a80c3a920206f4d4d6f206f4d6f6f20c3a9f09f9a806ff09f9a806f4d6f204df09f9a80f09f9a80c3a9f09f9a8020204d6f6f20c3a9f09f9a8020204d6f6ff09f9a80f09f9a80c3a9f09f9a80f09f9a804dc3a9f09f9a80f09f9a804d204d6f4df09f9a80f09f9a806f6fc3a9c3a9c3a9204dc3a96ff09f9a804d6f6f20c3a9f09f9a80f09f9a804df09f9a806f4d6f2020c3a9f09f9a806f6f6fc3a9206f6f20a2646970667358221220f15f7f88c0671f8a5a6d5f23147ac7dccc22ad8e2d1a733887be914d1e648e1964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_d0769f15 {\n string[2] s_0;\n bool s_1;\n string s_2;\n bytes4 s_3;\n }\n\n struct S_04f74023 {\n uint112 s_0;\n S_d0769f15 s_1;\n int184 s_2;\n bytes2[2] s_3;\n bytes20 s_4;\n }\n\n struct S_623cd789 {\n bytes11 s_0;\n bool s_1;\n }\n\n struct S_68edc32d {\n uint64[] s_0;\n S_04f74023[1] s_1;\n address[2] s_2;\n S_623cd789[4] s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_68edc32d[][2] memory) {\n S_68edc32d[][2] memory r;\n {\n S_68edc32d[] memory r_0 = new S_68edc32d[](0);\n r[0] = r_0;\n }\n {\n S_68edc32d[] memory r_1 = new S_68edc32d[](2);\n {\n S_68edc32d memory r_1_0;\n {\n uint64[] memory r_1_0_0 = new uint64[](0);\n r_1_0.s_0 = r_1_0_0;\n }\n {\n S_04f74023[1] memory r_1_0_1;\n {\n S_04f74023 memory r_1_0_1_0;\n {\n uint112 r_1_0_1_0_0 = 2168309674635519289834040467556503;\n r_1_0_1_0.s_0 = r_1_0_1_0_0;\n }\n {\n S_d0769f15 memory r_1_0_1_0_1;\n {\n string[2] memory r_1_0_1_0_1_0;\n {\n string memory r_1_0_1_0_1_0_0 = unicode\"Moo é🚀 Moo🚀🚀é🚀🚀Mé🚀🚀M MoM🚀🚀ooééé Méo🚀\";\n r_1_0_1_0_1_0[0] = r_1_0_1_0_1_0_0;\n }\n {\n string memory r_1_0_1_0_1_0_1 = unicode\"Moo é🚀\";\n r_1_0_1_0_1_0[1] = r_1_0_1_0_1_0_1;\n }\n r_1_0_1_0_1.s_0 = r_1_0_1_0_1_0;\n }\n {\n bool r_1_0_1_0_1_1 = false;\n r_1_0_1_0_1.s_1 = r_1_0_1_0_1_1;\n }\n {\n string memory r_1_0_1_0_1_2 = unicode\"Moo é🚀 oM éo🚀🚀 o \";\n r_1_0_1_0_1.s_2 = r_1_0_1_0_1_2;\n }\n {\n bytes4 r_1_0_1_0_1_3 = bytes4(0x2fea09a5);\n r_1_0_1_0_1.s_3 = r_1_0_1_0_1_3;\n }\n r_1_0_1_0.s_1 = r_1_0_1_0_1;\n }\n {\n int184 r_1_0_1_0_2 = 783499682528676179965540489384191606492672511931549245;\n r_1_0_1_0.s_2 = r_1_0_1_0_2;\n }\n {\n bytes2[2] memory r_1_0_1_0_3;\n {\n bytes2 r_1_0_1_0_3_0 = bytes2(0x02ec);\n r_1_0_1_0_3[0] = r_1_0_1_0_3_0;\n }\n {\n bytes2 r_1_0_1_0_3_1 = bytes2(0xd610);\n r_1_0_1_0_3[1] = r_1_0_1_0_3_1;\n }\n r_1_0_1_0.s_3 = r_1_0_1_0_3;\n }\n {\n bytes20 r_1_0_1_0_4 = bytes20(0x114612429b3AE1FAB0602BCd8db486a8D5200Ac3);\n r_1_0_1_0.s_4 = r_1_0_1_0_4;\n }\n r_1_0_1[0] = r_1_0_1_0;\n }\n r_1_0.s_1 = r_1_0_1;\n }\n {\n address[2] memory r_1_0_2;\n {\n address r_1_0_2_0 = 0x757a571F7dAb143891138d94D9d7A26daE1754af;\n r_1_0_2[0] = r_1_0_2_0;\n }\n {\n address r_1_0_2_1 = 0x1DA17106a15693EC1CFB7eC1A924C5C6B85B8Ed6;\n r_1_0_2[1] = r_1_0_2_1;\n }\n r_1_0.s_2 = r_1_0_2;\n }\n {\n S_623cd789[4] memory r_1_0_3;\n {\n S_623cd789 memory r_1_0_3_0;\n {\n bytes11 r_1_0_3_0_0 = bytes11(0xd1fe69d986ac510ad6d04c);\n r_1_0_3_0.s_0 = r_1_0_3_0_0;\n }\n {\n bool r_1_0_3_0_1 = false;\n r_1_0_3_0.s_1 = r_1_0_3_0_1;\n }\n r_1_0_3[0] = r_1_0_3_0;\n }\n {\n S_623cd789 memory r_1_0_3_1;\n {\n bytes11 r_1_0_3_1_0 = bytes11(0x24b6ea34176870c028d71f);\n r_1_0_3_1.s_0 = r_1_0_3_1_0;\n }\n {\n bool r_1_0_3_1_1 = false;\n r_1_0_3_1.s_1 = r_1_0_3_1_1;\n }\n r_1_0_3[1] = r_1_0_3_1;\n }\n {\n S_623cd789 memory r_1_0_3_2;\n {\n bytes11 r_1_0_3_2_0 = bytes11(0x688c1660d8176fe4b67dbd);\n r_1_0_3_2.s_0 = r_1_0_3_2_0;\n }\n {\n bool r_1_0_3_2_1 = false;\n r_1_0_3_2.s_1 = r_1_0_3_2_1;\n }\n r_1_0_3[2] = r_1_0_3_2;\n }\n {\n S_623cd789 memory r_1_0_3_3;\n {\n bytes11 r_1_0_3_3_0 = bytes11(0x44ff5820b17d450cb84099);\n r_1_0_3_3.s_0 = r_1_0_3_3_0;\n }\n {\n bool r_1_0_3_3_1 = true;\n r_1_0_3_3.s_1 = r_1_0_3_3_1;\n }\n r_1_0_3[3] = r_1_0_3_3;\n }\n r_1_0.s_3 = r_1_0_3;\n }\n {\n bool r_1_0_4 = true;\n r_1_0.s_4 = r_1_0_4;\n }\n r_1[0] = r_1_0;\n }\n {\n S_68edc32d memory r_1_1;\n {\n uint64[] memory r_1_1_0 = new uint64[](0);\n r_1_1.s_0 = r_1_1_0;\n }\n {\n S_04f74023[1] memory r_1_1_1;\n {\n S_04f74023 memory r_1_1_1_0;\n {\n uint112 r_1_1_1_0_0 = 2116535856143673809255732494889387;\n r_1_1_1_0.s_0 = r_1_1_1_0_0;\n }\n {\n S_d0769f15 memory r_1_1_1_0_1;\n {\n string[2] memory r_1_1_1_0_1_0;\n {\n string memory r_1_1_1_0_1_0_0 = unicode\"Moo é🚀🚀éé🚀 o ééé M🚀 éé🚀o🚀🚀MééMéMoo🚀Méé🚀é MéM🚀🚀🚀é oMMo o\";\n r_1_1_1_0_1_0[0] = r_1_1_1_0_1_0_0;\n }\n {\n string memory r_1_1_1_0_1_0_1 = unicode\"Moo é🚀🚀M🚀oMo é🚀oooé oo \";\n r_1_1_1_0_1_0[1] = r_1_1_1_0_1_0_1;\n }\n r_1_1_1_0_1.s_0 = r_1_1_1_0_1_0;\n }\n {\n bool r_1_1_1_0_1_1 = true;\n r_1_1_1_0_1.s_1 = r_1_1_1_0_1_1;\n }\n {\n string memory r_1_1_1_0_1_2 = unicode\"Moo é🚀o🚀oMo M🚀🚀é🚀 \";\n r_1_1_1_0_1.s_2 = r_1_1_1_0_1_2;\n }\n {\n bytes4 r_1_1_1_0_1_3 = bytes4(0x74f90bab);\n r_1_1_1_0_1.s_3 = r_1_1_1_0_1_3;\n }\n r_1_1_1_0.s_1 = r_1_1_1_0_1;\n }\n {\n int184 r_1_1_1_0_2 = 10284111585956313908193614209681614157542633602231900645;\n r_1_1_1_0.s_2 = r_1_1_1_0_2;\n }\n {\n bytes2[2] memory r_1_1_1_0_3;\n {\n bytes2 r_1_1_1_0_3_0 = bytes2(0x6df3);\n r_1_1_1_0_3[0] = r_1_1_1_0_3_0;\n }\n {\n bytes2 r_1_1_1_0_3_1 = bytes2(0x6156);\n r_1_1_1_0_3[1] = r_1_1_1_0_3_1;\n }\n r_1_1_1_0.s_3 = r_1_1_1_0_3;\n }\n {\n bytes20 r_1_1_1_0_4 = bytes20(0x257df5EB2B681B87ba618B14C98519af723c58a4);\n r_1_1_1_0.s_4 = r_1_1_1_0_4;\n }\n r_1_1_1[0] = r_1_1_1_0;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n {\n address[2] memory r_1_1_2;\n {\n address r_1_1_2_0 = 0x649fF49E2355b82FFBeEf1bE1eD848613661948A;\n r_1_1_2[0] = r_1_1_2_0;\n }\n {\n address r_1_1_2_1 = 0x1eB75C9AE41E2377Fc279a294E91a2a649EE2549;\n r_1_1_2[1] = r_1_1_2_1;\n }\n r_1_1.s_2 = r_1_1_2;\n }\n {\n S_623cd789[4] memory r_1_1_3;\n {\n S_623cd789 memory r_1_1_3_0;\n {\n bytes11 r_1_1_3_0_0 = bytes11(0xfad930cc2266f718adbcb1);\n r_1_1_3_0.s_0 = r_1_1_3_0_0;\n }\n {\n bool r_1_1_3_0_1 = false;\n r_1_1_3_0.s_1 = r_1_1_3_0_1;\n }\n r_1_1_3[0] = r_1_1_3_0;\n }\n {\n S_623cd789 memory r_1_1_3_1;\n {\n bytes11 r_1_1_3_1_0 = bytes11(0xf4b4b728af82effb987b5d);\n r_1_1_3_1.s_0 = r_1_1_3_1_0;\n }\n {\n bool r_1_1_3_1_1 = true;\n r_1_1_3_1.s_1 = r_1_1_3_1_1;\n }\n r_1_1_3[1] = r_1_1_3_1;\n }\n {\n S_623cd789 memory r_1_1_3_2;\n {\n bytes11 r_1_1_3_2_0 = bytes11(0xe514227da14cb411a572a4);\n r_1_1_3_2.s_0 = r_1_1_3_2_0;\n }\n {\n bool r_1_1_3_2_1 = true;\n r_1_1_3_2.s_1 = r_1_1_3_2_1;\n }\n r_1_1_3[2] = r_1_1_3_2;\n }\n {\n S_623cd789 memory r_1_1_3_3;\n {\n bytes11 r_1_1_3_3_0 = bytes11(0x1ab57d44a1ff46e64f5269);\n r_1_1_3_3.s_0 = r_1_1_3_3_0;\n }\n {\n bool r_1_1_3_3_1 = false;\n r_1_1_3_3.s_1 = r_1_1_3_3_1;\n }\n r_1_1_3[3] = r_1_1_3_3;\n }\n r_1_1.s_3 = r_1_1_3;\n }\n {\n bool r_1_1_4 = false;\n r_1_1.s_4 = r_1_1_4;\n }\n r_1[1] = r_1_1;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000757a571f7dab143891138d94d9d7a26dae1754af0000000000000000000000001da17106a15693ec1cfb7ec1a924c5c6b85b8ed6d1fe69d986ac510ad6d04c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024b6ea34176870c028d71f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000688c1660d8176fe4b67dbd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044ff5820b17d450cb8409900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000006ae7ea6cdea25d3b4d81ae7e889700000000000000000000000000000000000000000000000000000000000000c0000000000000000000082e1c3cbda53268f0d3206b86b02e7aa1f8bb105f863d02ec000000000000000000000000000000000000000000000000000000000000d610000000000000000000000000000000000000000000000000000000000000114612429b3ae1fab0602bcd8db486a8d5200ac30000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001802fea09a500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a8020204d6f6ff09f9a80f09f9a80c3a9f09f9a80f09f9a804dc3a9f09f9a80f09f9a804d204d6f4df09f9a80f09f9a806f6fc3a9c3a9c3a9204dc3a96ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a8020206f4d2020c3a96ff09f9a80f09f9a80206f20000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000649ff49e2355b82ffbeef1be1ed848613661948a0000000000000000000000001eb75c9ae41e2377fc279a294e91a2a649ee2549fad930cc2266f718adbcb10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4b4b728af82effb987b5d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e514227da14cb411a572a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011ab57d44a1ff46e64f52690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000685a7031f9b1e95b2bb3ad1271ab00000000000000000000000000000000000000000000000000000000000000c00000000000000000006b5f02b18b0f7f158070d8464a3da4dc9bbe9ead4d19e56df30000000000000000000000000000000000000000000000000000000000006156000000000000000000000000000000000000000000000000000000000000257df5eb2b681b87ba618b14c98519af723c58a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001c074f90bab00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006c4d6f6f20c3a9f09f9a80f09f9a80c3a9c3a9f09f9a80206f20c3a9c3a9c3a9204df09f9a8020c3a9c3a9f09f9a806ff09f9a80f09f9a804dc3a9c3a94dc3a94d6f6ff09f9a804dc3a9c3a9f09f9a80c3a9204dc3a94df09f9a80f09f9a80f09f9a80c3a920206f4d4d6f206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a80f09f9a804df09f9a806f4d6f2020c3a9f09f9a806f6f6fc3a9206f6f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000244d6f6f20c3a9f09f9a806ff09f9a806f4d6f204df09f9a80f09f9a80c3a9f09f9a80202000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,((string,bytes17,(address),bytes19[3][3],int152[3]),bytes19,(string,(address,string,address,string[2]),bool),bytes28),(address,string[4]))[4]", + "type": "(bool,((string,bytes17,(address),bytes19[3][3],int152[3]),bytes19,(string,(address,string,address,string[2]),bool),bytes28),(address,string[4]))[4]", + "value": [ + [ + false, + [ + [ + "Moo é🚀🚀oooé🚀oM o", + "0x90d1d7a4d3c8d2c4e74ef898513b121b4e", + ["0xD09f5502419fe25fF2C9eC3a2b84f68B2Cb92Aa7"], + [ + [ + "0x2a53f4420eefd46df8915a306061fc03a799df", + "0x5fe2b782880ed43eebb3fcea563d4e17d8f724", + "0x648b62ef9afe26f970ce6ac7c96893d8b2c98d" + ], + [ + "0x4eb2cdd02eb92fe6c704e696cd84fbfcaa4772", + "0x107228c1bb573564c7d7c3baede74c98bd1212", + "0x29f79a015066bda3d725d33ca5e4457b0c777b" + ], + [ + "0xc50ce89c23426629c89705c7c02b58077e882c", + "0xc0c426ae87d617332b0b553a43d28aeced1558", + "0x0a2812fafedade07fc50774c83ae28183ebd27" + ] + ], + [ + "431585739183620163088351677677933235714528567", + "-1116669211917382481183902027414992645454996252", + "650412557428707265057216628132677499176729954" + ] + ], + "0x07d4898a52fb8adf0fab2e4a0daf2c53eb5e6d", + [ + "Moo é🚀o🚀 🚀MMo o🚀éMo🚀🚀éoMo oé🚀M🚀ooooo🚀o 🚀M", + [ + "0x0a0f6EEf4d0bb780934A0d58BD49d1Db46F83D41", + "Moo é🚀oééM oé🚀éM🚀oM🚀é M🚀o Méoé ééo🚀🚀🚀é🚀ooé", + "0x51b684cD1750899b2efc108D0ca55cf36345Cb29", + [ + "Moo é🚀 é oooM oooMo🚀Mo🚀oM 🚀ééooéo éMéé🚀éMo🚀Mé M ooooéo", + "Moo é🚀é🚀Moo o" + ] + ], + false + ], + "0x8542fbbb69675516ee5cf80b09ffe87177decadcfd9a3e5330f32302" + ], + [ + "0xcD01614BE9B752726E766C4E93E23755C7546897", + [ + "Moo é🚀🚀 oMoé🚀éo", + "Moo é🚀é🚀éMooéoo🚀oo🚀ooMooo🚀oé 🚀oooooé🚀o🚀 oo🚀o MM🚀oo 🚀M", + "Moo é🚀 o Mo 🚀é🚀🚀oéo M oooM 🚀 Moo", + "Moo é🚀 MéMMé Mo o MoM🚀éMéé🚀🚀 oo🚀🚀MéM🚀🚀éoMoé🚀🚀🚀ooo🚀oé" + ] + ] + ], + [ + false, + [ + [ + "Moo é🚀 ooo🚀🚀🚀ooo", + "0x5811b5d2aacea939662e9ea8220d7c062c", + ["0xeE1Bf04e3719c12cCE1bFE2920c132e522edeeAC"], + [ + [ + "0x904afe233a680ec92eb46d05e29697e2cfd5d3", + "0x56cb88dcdd676fc43fdc322e289e96afdadf8f", + "0x7fbd510e2bc31db1bb9f6dbceacf9dafb28e5c" + ], + [ + "0x64650e8e989c743894be8b36934e89018753d6", + "0x4c0f166214e9eb86d26cd6da36eb093a7b3da7", + "0x731075b2351c801a6791938986b11f361b52f8" + ], + [ + "0x91c592cd133c416b67ddef295d1ab568df247c", + "0xb3ac8ef1a7adbb9770feb75984cb6094517d42", + "0xcb311c7cf5f6cac09d0a7b85f234f73d312f33" + ] + ], + [ + "2153827364392934683215017004626188286370096127", + "2703546555172687709737797302690545571203234820", + "430775534561839653758449717457769406806132433" + ] + ], + "0x4992ca08aab5235e7872b63a5b630f8f75fdab", + [ + "Moo é🚀MMo🚀🚀Mé🚀oéééoooéMé é🚀o é ", + [ + "0x426B639Ea0aF99d863e04Ad97204c0902915a291", + "Moo é🚀M é o🚀ééMMooM oo🚀 🚀 oéooéMMo🚀é oéoo🚀oooooM oMooM🚀é M oo", + "0x3891b4657B544A54100E5D188e032Bd020286438", + [ + "Moo é🚀é🚀oo🚀 é🚀MMoM🚀M é Mé oé🚀éM é🚀oM ééo🚀oMooM🚀éo ", + "Moo é🚀🚀éoéé Mooé 🚀oo o " + ] + ], + false + ], + "0x062b4d4001c96856f4b27e2bcd54cc5dd7c38be5beaabdded2e3abba" + ], + [ + "0xdd9a529D64b3A96BdAB7a021742079fe9cA3F2dB", + [ + "Moo é🚀 M Mééo éMMéoM🚀oMM🚀 oéoé🚀M é oé🚀 é🚀", + "Moo é🚀é oooo🚀ooo 🚀 ééM Moo oMoMo MoéMMMoo o🚀oééMoooo éo🚀 o", + "Moo é🚀Méo oéoM🚀🚀Mé oé 🚀oooMMéoo", + "Moo é🚀oooéé🚀o oo" + ] + ] + ], + [ + true, + [ + [ + "Moo é🚀MM🚀🚀éé oéo🚀é ", + "0xcc7f13267b41acf941b17cdefc2806cb76", + ["0x6cC7818714Df681c93D145d0703C6F57033725b6"], + [ + [ + "0x7bd9936d9282efa18e1ba8a248e2fc7f288674", + "0x5b98f8de1ad55b73645d71989bdf44386e166f", + "0xb17963f665be342c40085323c222da527acf31" + ], + [ + "0xdf7ae492b718639771235f56fc64b0aa774939", + "0xd9e6206720b85f4dc6dfd9ff5e6f06c5c5d36b", + "0xfb93a2e5e4e9e9bb564cccfb5ed1e8dab53d00" + ], + [ + "0x5c44f203fb4eb32209b2890058d1ffa96deed5", + "0x780db44b8693dbc61ba361bc82447446579cd2", + "0xd783b9b3dedd7b91662b31dd22a5762d4c8368" + ] + ], + [ + "-2396120581861681811298631044721138587888247083", + "-2830987302743047426481473440024433188175625531", + "2210410983840805835543064681386313716631987685" + ] + ], + "0x46e3662bed3765c4420052e7d96c002615237f", + [ + "Moo é🚀o é🚀oM🚀 éo🚀o🚀Méo🚀Moo🚀MM🚀 🚀é🚀o🚀🚀oéooé o ", + [ + "0x76B50F0CAa331Ca99AE3F1BecBb778f61fB330DF", + "Moo é🚀M🚀o🚀é", + "0x20854d701466b1929cD2AF5801d5e6b92BF7Ac93", + [ + "Moo é🚀é🚀🚀éo Mé éMooM M🚀M🚀🚀o 🚀M🚀🚀 🚀oé Mé🚀MMooo oooéooo🚀o éo", + "Moo é🚀oMéo🚀M ooooooooéoo🚀🚀 " + ] + ], + true + ], + "0x10417ad721dd982c427420900dbf825f12a3d15ebe5e7a49580b5274" + ], + [ + "0x642A8154e5a8f34A72252637FC5670b3354C10C1", + [ + "Moo é🚀o 🚀Moéoo 🚀MMoMM🚀oo 🚀o🚀🚀🚀🚀ééM oéooMé🚀o M🚀o", + "Moo é🚀🚀🚀 éo🚀oMé 🚀M🚀ooo🚀MM🚀🚀Mo oéoMMoé oMM 🚀🚀 éoéM", + "Moo é🚀Mo🚀ooé🚀🚀éé MoMoo Moééoo🚀éoé éMooo 🚀oMéM o MéoMooMoMo🚀Méoé", + "Moo é🚀🚀o" + ] + ] + ], + [ + false, + [ + [ + "Moo é🚀oééo🚀éMooooééoMoo éM🚀MoM🚀éo", + "0x88ff917fb91533eaef1507477dbdeabdfa", + ["0x494fDE79041CB6E684023703a9b05a3F3CEAbf42"], + [ + [ + "0xa23ab2543a56cdcfcc448da01550ed701293c5", + "0xd0e1b79aedda343d3d7513bbe94d2b88696062", + "0x29885767f43ea7e8d795ef44e0e1ec739e934e" + ], + [ + "0xef826ab55fc7a9c7817e57252ddbf8a3a3aa7f", + "0x832ae9717db366ebf6aabaa8ecab3ea69f2e1c", + "0x56a160e829f038f4a48b13050751a4f9c1f647" + ], + [ + "0x8d8fc83c90bffadf7ea8be15eac87b00766699", + "0xfbd2ede90b08140cf5d7a7c38d4b784927617b", + "0x251939dfa0d77f9e98aa9451965c758f1682ad" + ] + ], + [ + "-1355179431322837227527680346702439934387306036", + "296130412114917465533373671843331322513681531", + "1003905070786950847084945880328770365080069754" + ] + ], + "0x2725741af37a26933107d0296a061f3a10ecfb", + [ + "Moo é🚀ooo🚀éoéoooMoo oo🚀🚀é 🚀 🚀é🚀é M 🚀oMééMoo éoé🚀M 🚀o🚀ééo", + [ + "0x84250D6fcb7e6cF3A7DF8c48b1934fE55E3B6E8c", + "Moo é🚀o o 🚀oéM 🚀é M", + "0xADd4dd07c53023100B7cAf3468500f2D969e671F", + [ + "Moo é🚀o 🚀 🚀o M ééo é🚀oMo oéMM🚀éoM🚀MMéoMo🚀éo oMooMééoééo", + "Moo é🚀MoéééM🚀ooéo oooM🚀🚀ooMéé🚀Mo o🚀 o éo" + ] + ], + true + ], + "0xc54e889e2d8f9ddb1ddeb2cf66c6c7c768827e0061a318ad8f194d29" + ], + [ + "0x2463429fA3C5f0A08f76b9BCC36a68E756F03edE", + [ + "Moo é🚀🚀🚀 M🚀M o M🚀éoééoéé é 🚀oéoéoM", + "Moo é🚀🚀oééMé🚀oooooMMMooo🚀🚀éo 🚀o éoMM🚀é🚀ooé ", + "Moo é🚀Mo🚀o oé 🚀é", + "Moo é🚀 é🚀🚀o 🚀ooéMoo Méo é" + ] + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oooé🚀oM o" + }, + { + "type": "hexstring", + "value": "0x90d1d7a4d3c8d2c4e74ef898513b121b4e" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xD09f5502419fe25fF2C9eC3a2b84f68B2Cb92Aa7" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2a53f4420eefd46df8915a306061fc03a799df" + }, + { + "type": "hexstring", + "value": "0x5fe2b782880ed43eebb3fcea563d4e17d8f724" + }, + { + "type": "hexstring", + "value": "0x648b62ef9afe26f970ce6ac7c96893d8b2c98d" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x4eb2cdd02eb92fe6c704e696cd84fbfcaa4772" + }, + { + "type": "hexstring", + "value": "0x107228c1bb573564c7d7c3baede74c98bd1212" + }, + { + "type": "hexstring", + "value": "0x29f79a015066bda3d725d33ca5e4457b0c777b" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc50ce89c23426629c89705c7c02b58077e882c" + }, + { + "type": "hexstring", + "value": "0xc0c426ae87d617332b0b553a43d28aeced1558" + }, + { + "type": "hexstring", + "value": "0x0a2812fafedade07fc50774c83ae28183ebd27" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "431585739183620163088351677677933235714528567" + }, + { + "type": "number", + "value": "-1116669211917382481183902027414992645454996252" + }, + { + "type": "number", + "value": "650412557428707265057216628132677499176729954" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x07d4898a52fb8adf0fab2e4a0daf2c53eb5e6d" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀 🚀MMo o🚀éMo🚀🚀éoMo oé🚀M🚀ooooo🚀o 🚀M" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x0a0f6EEf4d0bb780934A0d58BD49d1Db46F83D41" + }, + { + "type": "string", + "value": "Moo é🚀oééM oé🚀éM🚀oM🚀é M🚀o Méoé ééo🚀🚀🚀é🚀ooé" + }, + { + "type": "address", + "value": "0x51b684cD1750899b2efc108D0ca55cf36345Cb29" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é oooM oooMo🚀Mo🚀oM 🚀ééooéo éMéé🚀éMo🚀Mé M ooooéo" + }, + { + "type": "string", + "value": "Moo é🚀é🚀Moo o" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x8542fbbb69675516ee5cf80b09ffe87177decadcfd9a3e5330f32302" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xcD01614BE9B752726E766C4E93E23755C7546897" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀 oMoé🚀éo" + }, + { + "type": "string", + "value": "Moo é🚀é🚀éMooéoo🚀oo🚀ooMooo🚀oé 🚀oooooé🚀o🚀 oo🚀o MM🚀oo 🚀M" + }, + { + "type": "string", + "value": "Moo é🚀 o Mo 🚀é🚀🚀oéo M oooM 🚀 Moo" + }, + { + "type": "string", + "value": "Moo é🚀 MéMMé Mo o MoM🚀éMéé🚀🚀 oo🚀🚀MéM🚀🚀éoMoé🚀🚀🚀ooo🚀oé" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 ooo🚀🚀🚀ooo" + }, + { + "type": "hexstring", + "value": "0x5811b5d2aacea939662e9ea8220d7c062c" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xeE1Bf04e3719c12cCE1bFE2920c132e522edeeAC" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x904afe233a680ec92eb46d05e29697e2cfd5d3" + }, + { + "type": "hexstring", + "value": "0x56cb88dcdd676fc43fdc322e289e96afdadf8f" + }, + { + "type": "hexstring", + "value": "0x7fbd510e2bc31db1bb9f6dbceacf9dafb28e5c" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x64650e8e989c743894be8b36934e89018753d6" + }, + { + "type": "hexstring", + "value": "0x4c0f166214e9eb86d26cd6da36eb093a7b3da7" + }, + { + "type": "hexstring", + "value": "0x731075b2351c801a6791938986b11f361b52f8" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x91c592cd133c416b67ddef295d1ab568df247c" + }, + { + "type": "hexstring", + "value": "0xb3ac8ef1a7adbb9770feb75984cb6094517d42" + }, + { + "type": "hexstring", + "value": "0xcb311c7cf5f6cac09d0a7b85f234f73d312f33" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "2153827364392934683215017004626188286370096127" + }, + { + "type": "number", + "value": "2703546555172687709737797302690545571203234820" + }, + { + "type": "number", + "value": "430775534561839653758449717457769406806132433" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x4992ca08aab5235e7872b63a5b630f8f75fdab" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MMo🚀🚀Mé🚀oéééoooéMé é🚀o é " + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x426B639Ea0aF99d863e04Ad97204c0902915a291" + }, + { + "type": "string", + "value": "Moo é🚀M é o🚀ééMMooM oo🚀 🚀 oéooéMMo🚀é oéoo🚀oooooM oMooM🚀é M oo" + }, + { + "type": "address", + "value": "0x3891b4657B544A54100E5D188e032Bd020286438" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀oo🚀 é🚀MMoM🚀M é Mé oé🚀éM é🚀oM ééo🚀oMooM🚀éo " + }, + { + "type": "string", + "value": "Moo é🚀🚀éoéé Mooé 🚀oo o " + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x062b4d4001c96856f4b27e2bcd54cc5dd7c38be5beaabdded2e3abba" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xdd9a529D64b3A96BdAB7a021742079fe9cA3F2dB" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 M Mééo éMMéoM🚀oMM🚀 oéoé🚀M é oé🚀 é🚀" + }, + { + "type": "string", + "value": "Moo é🚀é oooo🚀ooo 🚀 ééM Moo oMoMo MoéMMMoo o🚀oééMoooo éo🚀 o" + }, + { + "type": "string", + "value": "Moo é🚀Méo oéoM🚀🚀Mé oé 🚀oooMMéoo" + }, + { + "type": "string", + "value": "Moo é🚀oooéé🚀o oo" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MM🚀🚀éé oéo🚀é " + }, + { + "type": "hexstring", + "value": "0xcc7f13267b41acf941b17cdefc2806cb76" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6cC7818714Df681c93D145d0703C6F57033725b6" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x7bd9936d9282efa18e1ba8a248e2fc7f288674" + }, + { + "type": "hexstring", + "value": "0x5b98f8de1ad55b73645d71989bdf44386e166f" + }, + { + "type": "hexstring", + "value": "0xb17963f665be342c40085323c222da527acf31" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xdf7ae492b718639771235f56fc64b0aa774939" + }, + { + "type": "hexstring", + "value": "0xd9e6206720b85f4dc6dfd9ff5e6f06c5c5d36b" + }, + { + "type": "hexstring", + "value": "0xfb93a2e5e4e9e9bb564cccfb5ed1e8dab53d00" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x5c44f203fb4eb32209b2890058d1ffa96deed5" + }, + { + "type": "hexstring", + "value": "0x780db44b8693dbc61ba361bc82447446579cd2" + }, + { + "type": "hexstring", + "value": "0xd783b9b3dedd7b91662b31dd22a5762d4c8368" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-2396120581861681811298631044721138587888247083" + }, + { + "type": "number", + "value": "-2830987302743047426481473440024433188175625531" + }, + { + "type": "number", + "value": "2210410983840805835543064681386313716631987685" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x46e3662bed3765c4420052e7d96c002615237f" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o é🚀oM🚀 éo🚀o🚀Méo🚀Moo🚀MM🚀 🚀é🚀o🚀🚀oéooé o " + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x76B50F0CAa331Ca99AE3F1BecBb778f61fB330DF" + }, + { + "type": "string", + "value": "Moo é🚀M🚀o🚀é" + }, + { + "type": "address", + "value": "0x20854d701466b1929cD2AF5801d5e6b92BF7Ac93" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀🚀éo Mé éMooM M🚀M🚀🚀o 🚀M🚀🚀 🚀oé Mé🚀MMooo oooéooo🚀o éo" + }, + { + "type": "string", + "value": "Moo é🚀oMéo🚀M ooooooooéoo🚀🚀 " + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x10417ad721dd982c427420900dbf825f12a3d15ebe5e7a49580b5274" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x642A8154e5a8f34A72252637FC5670b3354C10C1" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o 🚀Moéoo 🚀MMoMM🚀oo 🚀o🚀🚀🚀🚀ééM oéooMé🚀o M🚀o" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀 éo🚀oMé 🚀M🚀ooo🚀MM🚀🚀Mo oéoMMoé oMM 🚀🚀 éoéM" + }, + { + "type": "string", + "value": "Moo é🚀Mo🚀ooé🚀🚀éé MoMoo Moééoo🚀éoé éMooo 🚀oMéM o MéoMooMoMo🚀Méoé" + }, + { + "type": "string", + "value": "Moo é🚀🚀o" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oééo🚀éMooooééoMoo éM🚀MoM🚀éo" + }, + { + "type": "hexstring", + "value": "0x88ff917fb91533eaef1507477dbdeabdfa" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x494fDE79041CB6E684023703a9b05a3F3CEAbf42" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xa23ab2543a56cdcfcc448da01550ed701293c5" + }, + { + "type": "hexstring", + "value": "0xd0e1b79aedda343d3d7513bbe94d2b88696062" + }, + { + "type": "hexstring", + "value": "0x29885767f43ea7e8d795ef44e0e1ec739e934e" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xef826ab55fc7a9c7817e57252ddbf8a3a3aa7f" + }, + { + "type": "hexstring", + "value": "0x832ae9717db366ebf6aabaa8ecab3ea69f2e1c" + }, + { + "type": "hexstring", + "value": "0x56a160e829f038f4a48b13050751a4f9c1f647" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8d8fc83c90bffadf7ea8be15eac87b00766699" + }, + { + "type": "hexstring", + "value": "0xfbd2ede90b08140cf5d7a7c38d4b784927617b" + }, + { + "type": "hexstring", + "value": "0x251939dfa0d77f9e98aa9451965c758f1682ad" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-1355179431322837227527680346702439934387306036" + }, + { + "type": "number", + "value": "296130412114917465533373671843331322513681531" + }, + { + "type": "number", + "value": "1003905070786950847084945880328770365080069754" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x2725741af37a26933107d0296a061f3a10ecfb" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooo🚀éoéoooMoo oo🚀🚀é 🚀 🚀é🚀é M 🚀oMééMoo éoé🚀M 🚀o🚀ééo" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x84250D6fcb7e6cF3A7DF8c48b1934fE55E3B6E8c" + }, + { + "type": "string", + "value": "Moo é🚀o o 🚀oéM 🚀é M" + }, + { + "type": "address", + "value": "0xADd4dd07c53023100B7cAf3468500f2D969e671F" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o 🚀 🚀o M ééo é🚀oMo oéMM🚀éoM🚀MMéoMo🚀éo oMooMééoééo" + }, + { + "type": "string", + "value": "Moo é🚀MoéééM🚀ooéo oooM🚀🚀ooMéé🚀Mo o🚀 o éo" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0xc54e889e2d8f9ddb1ddeb2cf66c6c7c768827e0061a318ad8f194d29" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x2463429fA3C5f0A08f76b9BCC36a68E756F03edE" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀 M🚀M o M🚀éoééoéé é 🚀oéoéoM" + }, + { + "type": "string", + "value": "Moo é🚀🚀oééMé🚀oooooMMMooo🚀🚀éo 🚀o éoMM🚀é🚀ooé " + }, + { + "type": "string", + "value": "Moo é🚀Mo🚀o oé 🚀é" + }, + { + "type": "string", + "value": "Moo é🚀 é🚀🚀o 🚀ooéMoo Méo é" + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50611e0a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190611456565b60405180910390f35b610056611103565b61005e611103565b610066611130565b6000815261007261115e565b61007a611192565b604080518082018252601c81527f4d6f6f20c3a9f09f9a80f09f9a806f6f6fc3a9f09f9a806f4d20206f00000000602080830191909152908352704868ebd269e4696273a77c4c289d890da760791b838201528151908101825273d09f5502419fe25ff2c9ec3a2b84f68b2cb92aa78152908201526100f76111d9565b6100ff611206565b722a53f4420eefd46df8915a306061fc03a799df60681b81527217f8ade0a203b50fbaecff3a958f5385f63dc9606a1b602082015272648b62ef9afe26f970ce6ac7c96893d8b2c98d60681b6040820152815261015a611206565b72275966e8175c97f36382734b66c27dfe5523b960691b81527208391460ddab9ab263ebe1dd76f3a64c5e890960691b6020808301919091527229f79a015066bda3d725d33ca5e4457b0c777b60681b60408301528201526101ba611206565b7231433a2708d0998a7225c171f00ad601dfa20b606a1b815272181884d5d0fac2e665616aa7487a515d9da2ab606b1b6020820152720a2812fafedade07fc50774c83ae28183ebd2760681b604080830191909152820152606082015261021f611206565b72135a5c7eea6c61b3f756967026fdb5990615378152723212bbe038b2c3539aefdaf4c08b194f0aa31b19602080830191909152721d2a5eb7a7be356f4cd6d731310391c16dbd62604083015260808301919091529082527207d4898a52fb8adf0fab2e4a0daf2c53eb5e6d60681b9082015261029a611224565b60006040518060800160405280604c81526020016115e1604c91398252506102c061123a565b730a0f6eef4d0bb780934a0d58bd49d1db46f83d41815260408051608081019091526052808252600091906119b160208301396020830152507351b684cd1750899b2efc108d0ca55cf36345cb29604082015261031b61125d565b60006040518060800160405280605581526020016118fb6055913982525060408051808201825260158152744d6f6f20c3a9f09f9a80c3a9f09f9a804d6f6f206f60581b60208083019190915280840191909152606084810193909352848101939093526000848201528401929092527f8542fbbb69675516ee5cf80b09ffe87177decadcfd9a3e5330f3230200000000918301919091528201526103be611284565b73cd01614be9b752726e766c4e93e23755c754689781526103dd6112a3565b604080518082018252601b81527f4d6f6f20c3a9f09f9a80f09f9a80206f4d6fc3a9f09f9a80c3a96f0000000000602080830191909152908352815160808101909252605d80835260009291611a03908301399050808260016020020181905250506000604051806060016040528060338152602001611ba760339139604080840191909152805160a081019091526065808252600092506118616020830139606083015250602082015260408201528152610497611130565b600081526104a361115e565b6104ab611192565b604080518082018252601d81527f4d6f6f20c3a9f09f9a80206f6f6ff09f9a80f09f9a80f09f9a806f6f6f0000006020808301919091529083527016046d74aab3aa4e598ba7aa08835f018b607a1b838201528151908101825273ee1bf04e3719c12cce1bfe2920c132e522edeeac8152908201526105286111d9565b610530611206565b72904afe233a680ec92eb46d05e29697e2cfd5d360681b81527256cb88dcdd676fc43fdc322e289e96afdadf8f60681b6020820152721fef54438af0c76c6ee7db6f3ab3e76beca397606a1b6040820152815261058b611206565b72323287474c4e3a1c4a5f459b49a74480c3a9eb60691b8152724c0f166214e9eb86d26cd6da36eb093a7b3da760681b602080830191909152720e620eb646a390034cf2327130d623e6c36a5f606b1b60408301528201526105eb611206565b72247164b344cf105ad9f77bca5746ad5a37c91f606a1b81527259d64778d3d6ddcbb87f5bacc265b04a28bea160691b602082015272cb311c7cf5f6cac09d0a7b85f234f73d312f3360681b6040808301919091528201526060820152610650611206565b726094b9bfac7fc81106767ea49ed826d8c9a3ff815272793b3141c9342902b38c32f2c44c5429e1bc046020808301919091527213510f84b434e161b0013f85118f89296c86d160408301526080830191909152908252724992ca08aab5235e7872b63a5b630f8f75fdab60681b908201526106ca611224565b6000604051806060016040528060388152602001611c9a603891398252506106f061123a565b73426b639ea0af99d863e04ad97204c0902915a29181526040805160808101909152605b80825260009190611af36020830139602083015250733891b4657b544a54100e5d188e032bd020286438604082015261074b61125d565b6000604051806080016040528060598152602001611d50605991398252506040805160608101909152602680825260009190611a606020830139602080840191909152606084810193909352848101939093525060006040808501919091528401929092527f062b4d4001c96856f4b27e2bcd54cc5dd7c38be5beaabdded2e3abba00000000918301919091528201526107e3611284565b73dd9a529d64b3a96bdab7a021742079fe9ca3f2db81526108026112a3565b6000604051806080016040528060498152602001611818604991398252506040805160808101909152605480825260009190611692602083013990508082600160200201819052505060006040518060600160405280603181526020016116e66031913960408381019190915280518082018252601981527f4d6f6f20c3a9f09f9a806f6f6fc3a9c3a9f09f9a806f206f6f00000000000000602080830191909152606085019190915284810193909352840192909252830191909152506108c8611130565b600181526108d461115e565b6108dc611192565b6000604051806060016040528060248152602001611cd26024913982525070663f89933da0d67ca0d8be6f7e140365bb60791b602082015261092960408051602081019091526000815290565b736cc7818714df681c93d145d0703c6f57033725b68152604082015261094d6111d9565b610955611206565b721ef664db64a0bbe86386ea289238bf1fca219d606a1b8152725b98f8de1ad55b73645d71989bdf44386e166f60681b602082015272b17963f665be342c40085323c222da527acf3160681b604082015281526109b0611206565b72df7ae492b718639771235f56fc64b0aa77493960681b815272d9e6206720b85f4dc6dfd9ff5e6f06c5c5d36b60681b60208083019190915271fb93a2e5e4e9e9bb564cccfb5ed1e8dab53d60701b6040830152820152610a0f611206565b725c44f203fb4eb32209b2890058d1ffa96deed560681b8152723c06da25c349ede30dd1b0de41223a232bce6960691b6020820152721af077367bdbaf722cc5663ba454aec5a9906d606b1b6040808301919091528201526060820152610a74611206565b726b721d8508ff7d5925c34f25cc16f8b877e12a198152727ef223f43d49efd7d07040b6fed97848703d3a1960208083019190915272631e460fae25563bc9632b2a165033b3b9e5e5604083015260808301919091529082527246e3662bed3765c4420052e7d96c002615237f60681b90820152610af0611224565b6000604051806080016040528060598152602001611b4e60599139825250610b1661123a565b7376b50f0caa331ca99ae3f1becbb778f61fb330df815260408051808201825260168152754d6f6f20c3a9f09f9a804df09f9a806ff09f9a80c3a960501b6020808301919091528301527320854d701466b1929cd2af5801d5e6b92bf7ac9390820152610b8161125d565b60006040518060a0016040528060678152602001611bda606791398252506040805160608101909152602a808252600091906117176020830139602080840191909152606084810193909352848101939093525060016040808501919091528401929092527f10417ad721dd982c427420900dbf825f12a3d15ebe5e7a49580b52740000000091830191909152820152610c19611284565b73642a8154e5a8f34a72252637fc5670b3354c10c18152610c386112a3565b6000604051806080016040528060598152602001611c41605991398252506040805160808101909152605a80825260009190611cf6602083013990508082600160200201819052505060006040518060a00160405280606181526020016119506061913960408381019190915280518082018252600f81526e4d6f6f20c3a9f09f9a80f09f9a806f60881b60208083019190915260608501919091528401929092525082810191909152820152610ced611130565b60008152610cf961115e565b610d01611192565b60006040518060600160405280603581526020016118c66035913982525070447fc8bfdc8a99f5778a83a3bedef55efd60791b6020820152610d4e60408051602081019091526000815290565b73494fde79041cb6e684023703a9b05a3f3ceabf4281526040820152610d726111d9565b610d7a611206565b72a23ab2543a56cdcfcc448da01550ed701293c560681b8152726870dbcd76ed1a1e9eba89ddf4a695c434b03160691b60208201527214c42bb3fa1f53f46bcaf7a27070f639cf49a760691b60408201528152610dd5611206565b72ef826ab55fc7a9c7817e57252ddbf8a3a3aa7f60681b81527220caba5c5f6cd9bafdaaaeaa3b2acfa9a7cb87606a1b6020808301919091527256a160e829f038f4a48b13050751a4f9c1f64760681b6040830152820152610e35611206565b728d8fc83c90bffadf7ea8be15eac87b0076669960681b815272fbd2ede90b08140cf5d7a7c38d4b784927617b60681b602082015272251939dfa0d77f9e98aa9451965c758f1682ad60681b6040808301919091528201526060820152610e9a611206565b723cc4b26a283b560104c1a531be1de50a5c3e33198152720d476910fd95d12a84028113e3163c9d9f6c7b602080830191909152722d0443d94313dfac5a917e1b630c3bd7a5e67a60408301526080830191909152908252722725741af37a26933107d0296a061f3a10ecfb60681b90820152610f15611224565b60006040518060a001604052806065815260200161162d60659139825250610f3b61123a565b7384250d6fcb7e6cf3a7df8c48b1934fe55e3b6e8c81526040805160608101909152602180825260009190611ad2602083013960208301525073add4dd07c53023100b7caf3468500f2d969e671f6040820152610f9661125d565b60006040518060800160405280605881526020016117836058913982525060408051608081019091526042808252600091906117416020830139602080840191909152606084810193909352848101939093525060016040808501919091528401929092527fc54e889e2d8f9ddb1ddeb2cf66c6c7c768827e0061a318ad8f194d29000000009183019190915282015261102e611284565b732463429fa3c5f0a08f76b9bcc36a68e756f03ede815261104d6112a3565b60006040518060600160405280603d81526020016117db603d91398252506040805160808101909152604c80825260009190611a866020830139602083810191909152604080518082018252601c81527f4d6f6f20c3a9f09f9a804d6ff09f9a806f206fc3a920f09f9a80c3a9000000008184015281850152805160608101909152602c808252600093509091611da9908301396060808401919091526020840192909252506040830191909152820152919050565b60405180608001604052806004905b61111a611130565b8152602001906001900390816111125790505090565b604051806060016040528060001515815260200161114c61115e565b8152602001611159611284565b905290565b6040518060800160405280611171611192565b815260006020820152604001611185611224565b8152600060209091015290565b6040805160a08101825260608152600060208201529081016111bf60408051602081019091526000815290565b81526020016111cc6111d9565b8152602001611159611206565b60405180606001604052806003905b6111f0611206565b8152602001906001900390816111e85790505090565b60405180606001604052806003906020820280368337509192915050565b6040518060600160405280606081526020016111855b604080516080810182526000808252606060208301819052928201529081016111595b60405180604001604052806002905b606081526020019060019003908161126c5790505090565b604051806040016040528060006001600160a01b031681526020016111595b60408051608081019091526060815260036020820161126c565b6000815180845260005b818110156112e3576020818501810151868301820152016112c7565b818111156112f5576000602083870101525b50601f01601f19169290920160200192915050565b8060005b600381101561133057815160120b84526020938401939091019060010161130e565b50505050565b600081516060845261134b60608501826112bd565b90506020808401518583038287015260018060a01b038082511684528282015160808486015261137e60808601826112bd565b6040848101519093168684015260609384015186820394909601939093525090929083018360005b60028110156113d15781830386526113bf8385516112bd565b958501959385019392506001016113a6565b5050604086015193506113e8604088018515159052565b9695505050505050565b80516001600160a01b03168252602080820151604082850181905260009260c086019290918601845b600481101561144a57603f198886030182526114388584516112bd565b9450918301919083019060010161141b565b50929695505050505050565b602080825260009060a0830183820185845b60048110156115d457601f1987850301835281516060815115158652868201518188880152805160808389015280516101e060e08a01526114ad6102c08a01826112bd565b828b01516effffffffffffffffffffffffffffff19166101008b01526040830151516001600160a01b03166101208b0152848301519091506101408a0160005b600381101561153c5782518260005b60038110156115295782516cffffffffffffffffffffffffff19168252918f0191908f01906001016114fc565b505050918c0191908601906001016114ed565b505050608082015191506115546102608a018361130a565b898301516cffffffffffffffffffffffffff191660808a01526040830151605f198a83030160a08b0152915061158a8183611336565b9383015163ffffffff19811660c08b01529391506115a59050565b6040840151935087810360408901526115be81856113f2565b9750505093860193505090840190600101611468565b5091969550505050505056fe4d6f6f20c3a9f09f9a806ff09f9a8020f09f9a804d4d6f20206ff09f9a80c3a94d6ff09f9a80f09f9a80c3a96f4d6f206fc3a9f09f9a804df09f9a806f6f6f6f6ff09f9a806f20f09f9a804d4d6f6f20c3a9f09f9a806f6f6ff09f9a80c3a96fc3a96f6f6f4d6f6f206f6ff09f9a80f09f9a80c3a920f09f9a8020f09f9a80c3a9f09f9a80c3a9204d20f09f9a806f4dc3a9c3a94d6f6f20c3a96fc3a9f09f9a804d20f09f9a806ff09f9a80c3a9c3a96f4d6f6f20c3a9f09f9a80c3a9202020206f6f6f6ff09f9a806f6f6f20f09f9a8020c3a9c3a94d204d6f6f206f4d6f4d6f204d6fc3a94d4d4d6f6f206ff09f9a806fc3a9c3a94d6f6f6f6f20c3a96ff09f9a80206f4d6f6f20c3a9f09f9a804dc3a96f206fc3a96f4df09f9a80f09f9a804dc3a9206fc3a920f09f9a806f6f6f4d4dc3a96f6f4d6f6f20c3a9f09f9a806f4dc3a96ff09f9a804d206f6f6f6f6f6f6f6fc3a96f6ff09f9a80f09f9a80204d6f6f20c3a9f09f9a804d6fc3a9c3a9c3a94df09f9a806f6fc3a96f206f6f6f4df09f9a80f09f9a806f6f4dc3a9c3a9f09f9a804d6f206ff09f9a80206f20c3a96f4d6f6f20c3a9f09f9a806f20f09f9a8020f09f9a806f204d20c3a9c3a96f20c3a9f09f9a806f4d6f206fc3a94d4df09f9a80c3a96f4df09f9a804d4dc3a96f4d6ff09f9a80c3a96f206f4d6f6f4dc3a9c3a96fc3a9c3a96f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80204df09f9a804d206f204df09f9a80c3a96fc3a9c3a96fc3a9c3a920c3a920f09f9a806fc3a96fc3a96f4d4d6f6f20c3a9f09f9a80204d204dc3a9c3a96f20c3a94d4dc3a96f4df09f9a806f4d4df09f9a80206fc3a96fc3a9f09f9a804d2020c3a92020206fc3a9f09f9a802020c3a9f09f9a804d6f6f20c3a9f09f9a80204dc3a94d4dc3a9204d6f202020206f204d6f4df09f9a80c3a94dc3a9c3a9f09f9a80f09f9a80206f6ff09f9a80f09f9a804dc3a94df09f9a80f09f9a80c3a96f4d6fc3a9f09f9a80f09f9a80f09f9a806f6f6ff09f9a806fc3a94d6f6f20c3a9f09f9a806fc3a9c3a96ff09f9a80c3a94d6f6f6f6fc3a9c3a96f4d6f6f20c3a94df09f9a804d6f4df09f9a80c3a96f4d6f6f20c3a9f09f9a802020c3a9206f6f6f4d206f6f6f4d6ff09f9a804d6ff09f9a806f4d2020f09f9a80c3a9c3a96f6fc3a96f20c3a94dc3a9c3a9f09f9a80c3a94d6ff09f9a804dc3a9204d206f6f6f6fc3a96f4d6f6f20c3a9f09f9a804d6ff09f9a806f6fc3a9f09f9a80f09f9a80c3a9c3a9204d6f4d6f6f204d6fc3a9c3a96f6ff09f9a80c3a96fc3a920c3a94d6f6f6f20f09f9a806f4dc3a94d206f204dc3a96f4d6f6f4d6f4d6ff09f9a804dc3a96fc3a94d6f6f20c3a9f09f9a806fc3a9c3a94d206fc3a9f09f9a80c3a94df09f9a806f4df09f9a80c3a9204df09f9a806f20204dc3a96fc3a920c3a9c3a96ff09f9a80f09f9a80f09f9a80c3a9f09f9a806f6fc3a94d6f6f20c3a9f09f9a80c3a9f09f9a80c3a94d6f6fc3a96f6ff09f9a806f6ff09f9a806f6f4d6f6f6ff09f9a806fc3a920f09f9a806f6f6f6f6fc3a9f09f9a806ff09f9a8020206f6ff09f9a806f204d4df09f9a806f6f20f09f9a804d4d6f6f20c3a9f09f9a80f09f9a80c3a96fc3a9c3a920204d6f6fc3a920f09f9a806f6f206f204d6f6f20c3a9f09f9a80f09f9a806fc3a9c3a94dc3a9f09f9a806f6f6f6f6f4d4d4d6f6f6ff09f9a80f09f9a80c3a96f2020f09f9a806f20c3a96f4d4df09f9a80c3a9f09f9a806f6fc3a9204d6f6f20c3a9f09f9a806f206f20f09f9a806fc3a94d20f09f9a80c3a92020204d4d6f6f20c3a9f09f9a804d20c3a9206ff09f9a80c3a9c3a94d4d6f6f4d206f6ff09f9a8020f09f9a80206fc3a96f6fc3a94d4d6ff09f9a80c3a9206fc3a96f6ff09f9a806f6f6f6f6f4d206f4d6f6f4df09f9a80c3a9204d206f6f4d6f6f20c3a9f09f9a806f2020c3a9f09f9a806f4df09f9a8020c3a96ff09f9a806ff09f9a804dc3a96ff09f9a804d6f6ff09f9a804d4df09f9a8020f09f9a80c3a9f09f9a806ff09f9a80f09f9a806fc3a96f6fc3a9206f204d6f6f20c3a9f09f9a80206f204d6f2020f09f9a80c3a9f09f9a80f09f9a806fc3a96f204d206f6f6f4d20f09f9a80204d6f6f4d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a80c3a96f204dc3a920c3a94d6f6f4d204df09f9a804df09f9a80f09f9a806f20f09f9a804df09f9a80f09f9a8020f09f9a806fc3a9204dc3a9f09f9a804d4d6f6f6f206f6f6fc3a96f6f6ff09f9a806f20c3a96f4d6f6f20c3a9f09f9a806f2020f09f9a804d6fc3a96f6f20f09f9a804d4d6f4d4df09f9a806f6f2020f09f9a806ff09f9a80f09f9a80f09f9a80f09f9a80c3a9c3a94d206fc3a96f6f4dc3a9f09f9a806f20204df09f9a806f4d6f6f20c3a9f09f9a804d4d6ff09f9a80f09f9a804dc3a9f09f9a806fc3a9c3a9c3a96f6f6fc3a94dc3a920c3a9f09f9a806f2020c3a9204d6f6f20c3a9f09f9a804d4df09f9a80f09f9a80c3a9c3a9206fc3a96ff09f9a80c3a9204d6f6f20c3a9f09f9a80f09f9a80f09f9a8020c3a96ff09f9a806f4dc3a920f09f9a804df09f9a806f6f6ff09f9a804d4df09f9a80f09f9a804d6f206fc3a96f4d4d6fc3a9206f4d4d20f09f9a80f09f9a802020c3a96fc3a94d4d6f6f20c3a9f09f9a80c3a9f09f9a806f6ff09f9a8020c3a9f09f9a804d4d6f4df09f9a804d20c3a9204dc3a9206fc3a9f09f9a80c3a94d2020c3a9f09f9a806f4d20c3a9c3a96ff09f9a806f4d6f6f4df09f9a80c3a96f204d6f6f20c3a9f09f9a8020c3a9f09f9a80f09f9a806f2020f09f9a806f6fc3a94d6f6f204dc3a96f2020c3a9a264697066735822122043b78331cc2b5e8fc171843a99bba85fa8112743ef59b5157bdec6faa42920f164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_873998a3 {\n string s_0;\n bytes17 s_1;\n S_421683f8 s_2;\n bytes19[3][3] s_3;\n int152[3] s_4;\n }\n\n struct S_2cd4fee6 {\n address s_0;\n string s_1;\n address s_2;\n string[2] s_3;\n }\n\n struct S_a02295c8 {\n string s_0;\n S_2cd4fee6 s_1;\n bool s_2;\n }\n\n struct S_ac7dd91b {\n S_873998a3 s_0;\n bytes19 s_1;\n S_a02295c8 s_2;\n bytes28 s_3;\n }\n\n struct S_ab1b3cb0 {\n address s_0;\n string[4] s_1;\n }\n\n struct S_90d6287b {\n bool s_0;\n S_ac7dd91b s_1;\n S_ab1b3cb0 s_2;\n }\n\n function test () public pure returns (S_90d6287b[4] memory) {\n S_90d6287b[4] memory r;\n {\n S_90d6287b memory r_0;\n {\n bool r_0_0 = false;\n r_0.s_0 = r_0_0;\n }\n {\n S_ac7dd91b memory r_0_1;\n {\n S_873998a3 memory r_0_1_0;\n {\n string memory r_0_1_0_0 = unicode\"Moo é🚀🚀oooé🚀oM o\";\n r_0_1_0.s_0 = r_0_1_0_0;\n }\n {\n bytes17 r_0_1_0_1 = bytes17(0x90d1d7a4d3c8d2c4e74ef898513b121b4e);\n r_0_1_0.s_1 = r_0_1_0_1;\n }\n {\n S_421683f8 memory r_0_1_0_2;\n {\n address r_0_1_0_2_0 = 0xD09f5502419fe25fF2C9eC3a2b84f68B2Cb92Aa7;\n r_0_1_0_2.s_0 = r_0_1_0_2_0;\n }\n r_0_1_0.s_2 = r_0_1_0_2;\n }\n {\n bytes19[3][3] memory r_0_1_0_3;\n {\n bytes19[3] memory r_0_1_0_3_0;\n {\n bytes19 r_0_1_0_3_0_0 = bytes19(0x2a53f4420eefd46df8915a306061fc03a799df);\n r_0_1_0_3_0[0] = r_0_1_0_3_0_0;\n }\n {\n bytes19 r_0_1_0_3_0_1 = bytes19(0x5fe2b782880ed43eebb3fcea563d4e17d8f724);\n r_0_1_0_3_0[1] = r_0_1_0_3_0_1;\n }\n {\n bytes19 r_0_1_0_3_0_2 = bytes19(0x648b62ef9afe26f970ce6ac7c96893d8b2c98d);\n r_0_1_0_3_0[2] = r_0_1_0_3_0_2;\n }\n r_0_1_0_3[0] = r_0_1_0_3_0;\n }\n {\n bytes19[3] memory r_0_1_0_3_1;\n {\n bytes19 r_0_1_0_3_1_0 = bytes19(0x4eb2cdd02eb92fe6c704e696cd84fbfcaa4772);\n r_0_1_0_3_1[0] = r_0_1_0_3_1_0;\n }\n {\n bytes19 r_0_1_0_3_1_1 = bytes19(0x107228c1bb573564c7d7c3baede74c98bd1212);\n r_0_1_0_3_1[1] = r_0_1_0_3_1_1;\n }\n {\n bytes19 r_0_1_0_3_1_2 = bytes19(0x29f79a015066bda3d725d33ca5e4457b0c777b);\n r_0_1_0_3_1[2] = r_0_1_0_3_1_2;\n }\n r_0_1_0_3[1] = r_0_1_0_3_1;\n }\n {\n bytes19[3] memory r_0_1_0_3_2;\n {\n bytes19 r_0_1_0_3_2_0 = bytes19(0xc50ce89c23426629c89705c7c02b58077e882c);\n r_0_1_0_3_2[0] = r_0_1_0_3_2_0;\n }\n {\n bytes19 r_0_1_0_3_2_1 = bytes19(0xc0c426ae87d617332b0b553a43d28aeced1558);\n r_0_1_0_3_2[1] = r_0_1_0_3_2_1;\n }\n {\n bytes19 r_0_1_0_3_2_2 = bytes19(0x0a2812fafedade07fc50774c83ae28183ebd27);\n r_0_1_0_3_2[2] = r_0_1_0_3_2_2;\n }\n r_0_1_0_3[2] = r_0_1_0_3_2;\n }\n r_0_1_0.s_3 = r_0_1_0_3;\n }\n {\n int152[3] memory r_0_1_0_4;\n {\n int152 r_0_1_0_4_0 = 431585739183620163088351677677933235714528567;\n r_0_1_0_4[0] = r_0_1_0_4_0;\n }\n {\n int152 r_0_1_0_4_1 = -1116669211917382481183902027414992645454996252;\n r_0_1_0_4[1] = r_0_1_0_4_1;\n }\n {\n int152 r_0_1_0_4_2 = 650412557428707265057216628132677499176729954;\n r_0_1_0_4[2] = r_0_1_0_4_2;\n }\n r_0_1_0.s_4 = r_0_1_0_4;\n }\n r_0_1.s_0 = r_0_1_0;\n }\n {\n bytes19 r_0_1_1 = bytes19(0x07d4898a52fb8adf0fab2e4a0daf2c53eb5e6d);\n r_0_1.s_1 = r_0_1_1;\n }\n {\n S_a02295c8 memory r_0_1_2;\n {\n string memory r_0_1_2_0 = unicode\"Moo é🚀o🚀 🚀MMo o🚀éMo🚀🚀éoMo oé🚀M🚀ooooo🚀o 🚀M\";\n r_0_1_2.s_0 = r_0_1_2_0;\n }\n {\n S_2cd4fee6 memory r_0_1_2_1;\n {\n address r_0_1_2_1_0 = 0x0a0f6EEf4d0bb780934A0d58BD49d1Db46F83D41;\n r_0_1_2_1.s_0 = r_0_1_2_1_0;\n }\n {\n string memory r_0_1_2_1_1 = unicode\"Moo é🚀oééM oé🚀éM🚀oM🚀é M🚀o Méoé ééo🚀🚀🚀é🚀ooé\";\n r_0_1_2_1.s_1 = r_0_1_2_1_1;\n }\n {\n address r_0_1_2_1_2 = 0x51b684cD1750899b2efc108D0ca55cf36345Cb29;\n r_0_1_2_1.s_2 = r_0_1_2_1_2;\n }\n {\n string[2] memory r_0_1_2_1_3;\n {\n string memory r_0_1_2_1_3_0 = unicode\"Moo é🚀 é oooM oooMo🚀Mo🚀oM 🚀ééooéo éMéé🚀éMo🚀Mé M ooooéo\";\n r_0_1_2_1_3[0] = r_0_1_2_1_3_0;\n }\n {\n string memory r_0_1_2_1_3_1 = unicode\"Moo é🚀é🚀Moo o\";\n r_0_1_2_1_3[1] = r_0_1_2_1_3_1;\n }\n r_0_1_2_1.s_3 = r_0_1_2_1_3;\n }\n r_0_1_2.s_1 = r_0_1_2_1;\n }\n {\n bool r_0_1_2_2 = false;\n r_0_1_2.s_2 = r_0_1_2_2;\n }\n r_0_1.s_2 = r_0_1_2;\n }\n {\n bytes28 r_0_1_3 = bytes28(0x8542fbbb69675516ee5cf80b09ffe87177decadcfd9a3e5330f32302);\n r_0_1.s_3 = r_0_1_3;\n }\n r_0.s_1 = r_0_1;\n }\n {\n S_ab1b3cb0 memory r_0_2;\n {\n address r_0_2_0 = 0xcD01614BE9B752726E766C4E93E23755C7546897;\n r_0_2.s_0 = r_0_2_0;\n }\n {\n string[4] memory r_0_2_1;\n {\n string memory r_0_2_1_0 = unicode\"Moo é🚀🚀 oMoé🚀éo\";\n r_0_2_1[0] = r_0_2_1_0;\n }\n {\n string memory r_0_2_1_1 = unicode\"Moo é🚀é🚀éMooéoo🚀oo🚀ooMooo🚀oé 🚀oooooé🚀o🚀 oo🚀o MM🚀oo 🚀M\";\n r_0_2_1[1] = r_0_2_1_1;\n }\n {\n string memory r_0_2_1_2 = unicode\"Moo é🚀 o Mo 🚀é🚀🚀oéo M oooM 🚀 Moo\";\n r_0_2_1[2] = r_0_2_1_2;\n }\n {\n string memory r_0_2_1_3 = unicode\"Moo é🚀 MéMMé Mo o MoM🚀éMéé🚀🚀 oo🚀🚀MéM🚀🚀éoMoé🚀🚀🚀ooo🚀oé\";\n r_0_2_1[3] = r_0_2_1_3;\n }\n r_0_2.s_1 = r_0_2_1;\n }\n r_0.s_2 = r_0_2;\n }\n r[0] = r_0;\n }\n {\n S_90d6287b memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n {\n S_ac7dd91b memory r_1_1;\n {\n S_873998a3 memory r_1_1_0;\n {\n string memory r_1_1_0_0 = unicode\"Moo é🚀 ooo🚀🚀🚀ooo\";\n r_1_1_0.s_0 = r_1_1_0_0;\n }\n {\n bytes17 r_1_1_0_1 = bytes17(0x5811b5d2aacea939662e9ea8220d7c062c);\n r_1_1_0.s_1 = r_1_1_0_1;\n }\n {\n S_421683f8 memory r_1_1_0_2;\n {\n address r_1_1_0_2_0 = 0xeE1Bf04e3719c12cCE1bFE2920c132e522edeeAC;\n r_1_1_0_2.s_0 = r_1_1_0_2_0;\n }\n r_1_1_0.s_2 = r_1_1_0_2;\n }\n {\n bytes19[3][3] memory r_1_1_0_3;\n {\n bytes19[3] memory r_1_1_0_3_0;\n {\n bytes19 r_1_1_0_3_0_0 = bytes19(0x904afe233a680ec92eb46d05e29697e2cfd5d3);\n r_1_1_0_3_0[0] = r_1_1_0_3_0_0;\n }\n {\n bytes19 r_1_1_0_3_0_1 = bytes19(0x56cb88dcdd676fc43fdc322e289e96afdadf8f);\n r_1_1_0_3_0[1] = r_1_1_0_3_0_1;\n }\n {\n bytes19 r_1_1_0_3_0_2 = bytes19(0x7fbd510e2bc31db1bb9f6dbceacf9dafb28e5c);\n r_1_1_0_3_0[2] = r_1_1_0_3_0_2;\n }\n r_1_1_0_3[0] = r_1_1_0_3_0;\n }\n {\n bytes19[3] memory r_1_1_0_3_1;\n {\n bytes19 r_1_1_0_3_1_0 = bytes19(0x64650e8e989c743894be8b36934e89018753d6);\n r_1_1_0_3_1[0] = r_1_1_0_3_1_0;\n }\n {\n bytes19 r_1_1_0_3_1_1 = bytes19(0x4c0f166214e9eb86d26cd6da36eb093a7b3da7);\n r_1_1_0_3_1[1] = r_1_1_0_3_1_1;\n }\n {\n bytes19 r_1_1_0_3_1_2 = bytes19(0x731075b2351c801a6791938986b11f361b52f8);\n r_1_1_0_3_1[2] = r_1_1_0_3_1_2;\n }\n r_1_1_0_3[1] = r_1_1_0_3_1;\n }\n {\n bytes19[3] memory r_1_1_0_3_2;\n {\n bytes19 r_1_1_0_3_2_0 = bytes19(0x91c592cd133c416b67ddef295d1ab568df247c);\n r_1_1_0_3_2[0] = r_1_1_0_3_2_0;\n }\n {\n bytes19 r_1_1_0_3_2_1 = bytes19(0xb3ac8ef1a7adbb9770feb75984cb6094517d42);\n r_1_1_0_3_2[1] = r_1_1_0_3_2_1;\n }\n {\n bytes19 r_1_1_0_3_2_2 = bytes19(0xcb311c7cf5f6cac09d0a7b85f234f73d312f33);\n r_1_1_0_3_2[2] = r_1_1_0_3_2_2;\n }\n r_1_1_0_3[2] = r_1_1_0_3_2;\n }\n r_1_1_0.s_3 = r_1_1_0_3;\n }\n {\n int152[3] memory r_1_1_0_4;\n {\n int152 r_1_1_0_4_0 = 2153827364392934683215017004626188286370096127;\n r_1_1_0_4[0] = r_1_1_0_4_0;\n }\n {\n int152 r_1_1_0_4_1 = 2703546555172687709737797302690545571203234820;\n r_1_1_0_4[1] = r_1_1_0_4_1;\n }\n {\n int152 r_1_1_0_4_2 = 430775534561839653758449717457769406806132433;\n r_1_1_0_4[2] = r_1_1_0_4_2;\n }\n r_1_1_0.s_4 = r_1_1_0_4;\n }\n r_1_1.s_0 = r_1_1_0;\n }\n {\n bytes19 r_1_1_1 = bytes19(0x4992ca08aab5235e7872b63a5b630f8f75fdab);\n r_1_1.s_1 = r_1_1_1;\n }\n {\n S_a02295c8 memory r_1_1_2;\n {\n string memory r_1_1_2_0 = unicode\"Moo é🚀MMo🚀🚀Mé🚀oéééoooéMé é🚀o é \";\n r_1_1_2.s_0 = r_1_1_2_0;\n }\n {\n S_2cd4fee6 memory r_1_1_2_1;\n {\n address r_1_1_2_1_0 = 0x426B639Ea0aF99d863e04Ad97204c0902915a291;\n r_1_1_2_1.s_0 = r_1_1_2_1_0;\n }\n {\n string memory r_1_1_2_1_1 = unicode\"Moo é🚀M é o🚀ééMMooM oo🚀 🚀 oéooéMMo🚀é oéoo🚀oooooM oMooM🚀é M oo\";\n r_1_1_2_1.s_1 = r_1_1_2_1_1;\n }\n {\n address r_1_1_2_1_2 = 0x3891b4657B544A54100E5D188e032Bd020286438;\n r_1_1_2_1.s_2 = r_1_1_2_1_2;\n }\n {\n string[2] memory r_1_1_2_1_3;\n {\n string memory r_1_1_2_1_3_0 = unicode\"Moo é🚀é🚀oo🚀 é🚀MMoM🚀M é Mé oé🚀éM é🚀oM ééo🚀oMooM🚀éo \";\n r_1_1_2_1_3[0] = r_1_1_2_1_3_0;\n }\n {\n string memory r_1_1_2_1_3_1 = unicode\"Moo é🚀🚀éoéé Mooé 🚀oo o \";\n r_1_1_2_1_3[1] = r_1_1_2_1_3_1;\n }\n r_1_1_2_1.s_3 = r_1_1_2_1_3;\n }\n r_1_1_2.s_1 = r_1_1_2_1;\n }\n {\n bool r_1_1_2_2 = false;\n r_1_1_2.s_2 = r_1_1_2_2;\n }\n r_1_1.s_2 = r_1_1_2;\n }\n {\n bytes28 r_1_1_3 = bytes28(0x062b4d4001c96856f4b27e2bcd54cc5dd7c38be5beaabdded2e3abba);\n r_1_1.s_3 = r_1_1_3;\n }\n r_1.s_1 = r_1_1;\n }\n {\n S_ab1b3cb0 memory r_1_2;\n {\n address r_1_2_0 = 0xdd9a529D64b3A96BdAB7a021742079fe9cA3F2dB;\n r_1_2.s_0 = r_1_2_0;\n }\n {\n string[4] memory r_1_2_1;\n {\n string memory r_1_2_1_0 = unicode\"Moo é🚀 M Mééo éMMéoM🚀oMM🚀 oéoé🚀M é oé🚀 é🚀\";\n r_1_2_1[0] = r_1_2_1_0;\n }\n {\n string memory r_1_2_1_1 = unicode\"Moo é🚀é oooo🚀ooo 🚀 ééM Moo oMoMo MoéMMMoo o🚀oééMoooo éo🚀 o\";\n r_1_2_1[1] = r_1_2_1_1;\n }\n {\n string memory r_1_2_1_2 = unicode\"Moo é🚀Méo oéoM🚀🚀Mé oé 🚀oooMMéoo\";\n r_1_2_1[2] = r_1_2_1_2;\n }\n {\n string memory r_1_2_1_3 = unicode\"Moo é🚀oooéé🚀o oo\";\n r_1_2_1[3] = r_1_2_1_3;\n }\n r_1_2.s_1 = r_1_2_1;\n }\n r_1.s_2 = r_1_2;\n }\n r[1] = r_1;\n }\n {\n S_90d6287b memory r_2;\n {\n bool r_2_0 = true;\n r_2.s_0 = r_2_0;\n }\n {\n S_ac7dd91b memory r_2_1;\n {\n S_873998a3 memory r_2_1_0;\n {\n string memory r_2_1_0_0 = unicode\"Moo é🚀MM🚀🚀éé oéo🚀é \";\n r_2_1_0.s_0 = r_2_1_0_0;\n }\n {\n bytes17 r_2_1_0_1 = bytes17(0xcc7f13267b41acf941b17cdefc2806cb76);\n r_2_1_0.s_1 = r_2_1_0_1;\n }\n {\n S_421683f8 memory r_2_1_0_2;\n {\n address r_2_1_0_2_0 = 0x6cC7818714Df681c93D145d0703C6F57033725b6;\n r_2_1_0_2.s_0 = r_2_1_0_2_0;\n }\n r_2_1_0.s_2 = r_2_1_0_2;\n }\n {\n bytes19[3][3] memory r_2_1_0_3;\n {\n bytes19[3] memory r_2_1_0_3_0;\n {\n bytes19 r_2_1_0_3_0_0 = bytes19(0x7bd9936d9282efa18e1ba8a248e2fc7f288674);\n r_2_1_0_3_0[0] = r_2_1_0_3_0_0;\n }\n {\n bytes19 r_2_1_0_3_0_1 = bytes19(0x5b98f8de1ad55b73645d71989bdf44386e166f);\n r_2_1_0_3_0[1] = r_2_1_0_3_0_1;\n }\n {\n bytes19 r_2_1_0_3_0_2 = bytes19(0xb17963f665be342c40085323c222da527acf31);\n r_2_1_0_3_0[2] = r_2_1_0_3_0_2;\n }\n r_2_1_0_3[0] = r_2_1_0_3_0;\n }\n {\n bytes19[3] memory r_2_1_0_3_1;\n {\n bytes19 r_2_1_0_3_1_0 = bytes19(0xdf7ae492b718639771235f56fc64b0aa774939);\n r_2_1_0_3_1[0] = r_2_1_0_3_1_0;\n }\n {\n bytes19 r_2_1_0_3_1_1 = bytes19(0xd9e6206720b85f4dc6dfd9ff5e6f06c5c5d36b);\n r_2_1_0_3_1[1] = r_2_1_0_3_1_1;\n }\n {\n bytes19 r_2_1_0_3_1_2 = bytes19(0xfb93a2e5e4e9e9bb564cccfb5ed1e8dab53d00);\n r_2_1_0_3_1[2] = r_2_1_0_3_1_2;\n }\n r_2_1_0_3[1] = r_2_1_0_3_1;\n }\n {\n bytes19[3] memory r_2_1_0_3_2;\n {\n bytes19 r_2_1_0_3_2_0 = bytes19(0x5c44f203fb4eb32209b2890058d1ffa96deed5);\n r_2_1_0_3_2[0] = r_2_1_0_3_2_0;\n }\n {\n bytes19 r_2_1_0_3_2_1 = bytes19(0x780db44b8693dbc61ba361bc82447446579cd2);\n r_2_1_0_3_2[1] = r_2_1_0_3_2_1;\n }\n {\n bytes19 r_2_1_0_3_2_2 = bytes19(0xd783b9b3dedd7b91662b31dd22a5762d4c8368);\n r_2_1_0_3_2[2] = r_2_1_0_3_2_2;\n }\n r_2_1_0_3[2] = r_2_1_0_3_2;\n }\n r_2_1_0.s_3 = r_2_1_0_3;\n }\n {\n int152[3] memory r_2_1_0_4;\n {\n int152 r_2_1_0_4_0 = -2396120581861681811298631044721138587888247083;\n r_2_1_0_4[0] = r_2_1_0_4_0;\n }\n {\n int152 r_2_1_0_4_1 = -2830987302743047426481473440024433188175625531;\n r_2_1_0_4[1] = r_2_1_0_4_1;\n }\n {\n int152 r_2_1_0_4_2 = 2210410983840805835543064681386313716631987685;\n r_2_1_0_4[2] = r_2_1_0_4_2;\n }\n r_2_1_0.s_4 = r_2_1_0_4;\n }\n r_2_1.s_0 = r_2_1_0;\n }\n {\n bytes19 r_2_1_1 = bytes19(0x46e3662bed3765c4420052e7d96c002615237f);\n r_2_1.s_1 = r_2_1_1;\n }\n {\n S_a02295c8 memory r_2_1_2;\n {\n string memory r_2_1_2_0 = unicode\"Moo é🚀o é🚀oM🚀 éo🚀o🚀Méo🚀Moo🚀MM🚀 🚀é🚀o🚀🚀oéooé o \";\n r_2_1_2.s_0 = r_2_1_2_0;\n }\n {\n S_2cd4fee6 memory r_2_1_2_1;\n {\n address r_2_1_2_1_0 = 0x76B50F0CAa331Ca99AE3F1BecBb778f61fB330DF;\n r_2_1_2_1.s_0 = r_2_1_2_1_0;\n }\n {\n string memory r_2_1_2_1_1 = unicode\"Moo é🚀M🚀o🚀é\";\n r_2_1_2_1.s_1 = r_2_1_2_1_1;\n }\n {\n address r_2_1_2_1_2 = 0x20854d701466b1929cD2AF5801d5e6b92BF7Ac93;\n r_2_1_2_1.s_2 = r_2_1_2_1_2;\n }\n {\n string[2] memory r_2_1_2_1_3;\n {\n string memory r_2_1_2_1_3_0 = unicode\"Moo é🚀é🚀🚀éo Mé éMooM M🚀M🚀🚀o 🚀M🚀🚀 🚀oé Mé🚀MMooo oooéooo🚀o éo\";\n r_2_1_2_1_3[0] = r_2_1_2_1_3_0;\n }\n {\n string memory r_2_1_2_1_3_1 = unicode\"Moo é🚀oMéo🚀M ooooooooéoo🚀🚀 \";\n r_2_1_2_1_3[1] = r_2_1_2_1_3_1;\n }\n r_2_1_2_1.s_3 = r_2_1_2_1_3;\n }\n r_2_1_2.s_1 = r_2_1_2_1;\n }\n {\n bool r_2_1_2_2 = true;\n r_2_1_2.s_2 = r_2_1_2_2;\n }\n r_2_1.s_2 = r_2_1_2;\n }\n {\n bytes28 r_2_1_3 = bytes28(0x10417ad721dd982c427420900dbf825f12a3d15ebe5e7a49580b5274);\n r_2_1.s_3 = r_2_1_3;\n }\n r_2.s_1 = r_2_1;\n }\n {\n S_ab1b3cb0 memory r_2_2;\n {\n address r_2_2_0 = 0x642A8154e5a8f34A72252637FC5670b3354C10C1;\n r_2_2.s_0 = r_2_2_0;\n }\n {\n string[4] memory r_2_2_1;\n {\n string memory r_2_2_1_0 = unicode\"Moo é🚀o 🚀Moéoo 🚀MMoMM🚀oo 🚀o🚀🚀🚀🚀ééM oéooMé🚀o M🚀o\";\n r_2_2_1[0] = r_2_2_1_0;\n }\n {\n string memory r_2_2_1_1 = unicode\"Moo é🚀🚀🚀 éo🚀oMé 🚀M🚀ooo🚀MM🚀🚀Mo oéoMMoé oMM 🚀🚀 éoéM\";\n r_2_2_1[1] = r_2_2_1_1;\n }\n {\n string memory r_2_2_1_2 = unicode\"Moo é🚀Mo🚀ooé🚀🚀éé MoMoo Moééoo🚀éoé éMooo 🚀oMéM o MéoMooMoMo🚀Méoé\";\n r_2_2_1[2] = r_2_2_1_2;\n }\n {\n string memory r_2_2_1_3 = unicode\"Moo é🚀🚀o\";\n r_2_2_1[3] = r_2_2_1_3;\n }\n r_2_2.s_1 = r_2_2_1;\n }\n r_2.s_2 = r_2_2;\n }\n r[2] = r_2;\n }\n {\n S_90d6287b memory r_3;\n {\n bool r_3_0 = false;\n r_3.s_0 = r_3_0;\n }\n {\n S_ac7dd91b memory r_3_1;\n {\n S_873998a3 memory r_3_1_0;\n {\n string memory r_3_1_0_0 = unicode\"Moo é🚀oééo🚀éMooooééoMoo éM🚀MoM🚀éo\";\n r_3_1_0.s_0 = r_3_1_0_0;\n }\n {\n bytes17 r_3_1_0_1 = bytes17(0x88ff917fb91533eaef1507477dbdeabdfa);\n r_3_1_0.s_1 = r_3_1_0_1;\n }\n {\n S_421683f8 memory r_3_1_0_2;\n {\n address r_3_1_0_2_0 = 0x494fDE79041CB6E684023703a9b05a3F3CEAbf42;\n r_3_1_0_2.s_0 = r_3_1_0_2_0;\n }\n r_3_1_0.s_2 = r_3_1_0_2;\n }\n {\n bytes19[3][3] memory r_3_1_0_3;\n {\n bytes19[3] memory r_3_1_0_3_0;\n {\n bytes19 r_3_1_0_3_0_0 = bytes19(0xa23ab2543a56cdcfcc448da01550ed701293c5);\n r_3_1_0_3_0[0] = r_3_1_0_3_0_0;\n }\n {\n bytes19 r_3_1_0_3_0_1 = bytes19(0xd0e1b79aedda343d3d7513bbe94d2b88696062);\n r_3_1_0_3_0[1] = r_3_1_0_3_0_1;\n }\n {\n bytes19 r_3_1_0_3_0_2 = bytes19(0x29885767f43ea7e8d795ef44e0e1ec739e934e);\n r_3_1_0_3_0[2] = r_3_1_0_3_0_2;\n }\n r_3_1_0_3[0] = r_3_1_0_3_0;\n }\n {\n bytes19[3] memory r_3_1_0_3_1;\n {\n bytes19 r_3_1_0_3_1_0 = bytes19(0xef826ab55fc7a9c7817e57252ddbf8a3a3aa7f);\n r_3_1_0_3_1[0] = r_3_1_0_3_1_0;\n }\n {\n bytes19 r_3_1_0_3_1_1 = bytes19(0x832ae9717db366ebf6aabaa8ecab3ea69f2e1c);\n r_3_1_0_3_1[1] = r_3_1_0_3_1_1;\n }\n {\n bytes19 r_3_1_0_3_1_2 = bytes19(0x56a160e829f038f4a48b13050751a4f9c1f647);\n r_3_1_0_3_1[2] = r_3_1_0_3_1_2;\n }\n r_3_1_0_3[1] = r_3_1_0_3_1;\n }\n {\n bytes19[3] memory r_3_1_0_3_2;\n {\n bytes19 r_3_1_0_3_2_0 = bytes19(0x8d8fc83c90bffadf7ea8be15eac87b00766699);\n r_3_1_0_3_2[0] = r_3_1_0_3_2_0;\n }\n {\n bytes19 r_3_1_0_3_2_1 = bytes19(0xfbd2ede90b08140cf5d7a7c38d4b784927617b);\n r_3_1_0_3_2[1] = r_3_1_0_3_2_1;\n }\n {\n bytes19 r_3_1_0_3_2_2 = bytes19(0x251939dfa0d77f9e98aa9451965c758f1682ad);\n r_3_1_0_3_2[2] = r_3_1_0_3_2_2;\n }\n r_3_1_0_3[2] = r_3_1_0_3_2;\n }\n r_3_1_0.s_3 = r_3_1_0_3;\n }\n {\n int152[3] memory r_3_1_0_4;\n {\n int152 r_3_1_0_4_0 = -1355179431322837227527680346702439934387306036;\n r_3_1_0_4[0] = r_3_1_0_4_0;\n }\n {\n int152 r_3_1_0_4_1 = 296130412114917465533373671843331322513681531;\n r_3_1_0_4[1] = r_3_1_0_4_1;\n }\n {\n int152 r_3_1_0_4_2 = 1003905070786950847084945880328770365080069754;\n r_3_1_0_4[2] = r_3_1_0_4_2;\n }\n r_3_1_0.s_4 = r_3_1_0_4;\n }\n r_3_1.s_0 = r_3_1_0;\n }\n {\n bytes19 r_3_1_1 = bytes19(0x2725741af37a26933107d0296a061f3a10ecfb);\n r_3_1.s_1 = r_3_1_1;\n }\n {\n S_a02295c8 memory r_3_1_2;\n {\n string memory r_3_1_2_0 = unicode\"Moo é🚀ooo🚀éoéoooMoo oo🚀🚀é 🚀 🚀é🚀é M 🚀oMééMoo éoé🚀M 🚀o🚀ééo\";\n r_3_1_2.s_0 = r_3_1_2_0;\n }\n {\n S_2cd4fee6 memory r_3_1_2_1;\n {\n address r_3_1_2_1_0 = 0x84250D6fcb7e6cF3A7DF8c48b1934fE55E3B6E8c;\n r_3_1_2_1.s_0 = r_3_1_2_1_0;\n }\n {\n string memory r_3_1_2_1_1 = unicode\"Moo é🚀o o 🚀oéM 🚀é M\";\n r_3_1_2_1.s_1 = r_3_1_2_1_1;\n }\n {\n address r_3_1_2_1_2 = 0xADd4dd07c53023100B7cAf3468500f2D969e671F;\n r_3_1_2_1.s_2 = r_3_1_2_1_2;\n }\n {\n string[2] memory r_3_1_2_1_3;\n {\n string memory r_3_1_2_1_3_0 = unicode\"Moo é🚀o 🚀 🚀o M ééo é🚀oMo oéMM🚀éoM🚀MMéoMo🚀éo oMooMééoééo\";\n r_3_1_2_1_3[0] = r_3_1_2_1_3_0;\n }\n {\n string memory r_3_1_2_1_3_1 = unicode\"Moo é🚀MoéééM🚀ooéo oooM🚀🚀ooMéé🚀Mo o🚀 o éo\";\n r_3_1_2_1_3[1] = r_3_1_2_1_3_1;\n }\n r_3_1_2_1.s_3 = r_3_1_2_1_3;\n }\n r_3_1_2.s_1 = r_3_1_2_1;\n }\n {\n bool r_3_1_2_2 = true;\n r_3_1_2.s_2 = r_3_1_2_2;\n }\n r_3_1.s_2 = r_3_1_2;\n }\n {\n bytes28 r_3_1_3 = bytes28(0xc54e889e2d8f9ddb1ddeb2cf66c6c7c768827e0061a318ad8f194d29);\n r_3_1.s_3 = r_3_1_3;\n }\n r_3.s_1 = r_3_1;\n }\n {\n S_ab1b3cb0 memory r_3_2;\n {\n address r_3_2_0 = 0x2463429fA3C5f0A08f76b9BCC36a68E756F03edE;\n r_3_2.s_0 = r_3_2_0;\n }\n {\n string[4] memory r_3_2_1;\n {\n string memory r_3_2_1_0 = unicode\"Moo é🚀🚀🚀 M🚀M o M🚀éoééoéé é 🚀oéoéoM\";\n r_3_2_1[0] = r_3_2_1_0;\n }\n {\n string memory r_3_2_1_1 = unicode\"Moo é🚀🚀oééMé🚀oooooMMMooo🚀🚀éo 🚀o éoMM🚀é🚀ooé \";\n r_3_2_1[1] = r_3_2_1_1;\n }\n {\n string memory r_3_2_1_2 = unicode\"Moo é🚀Mo🚀o oé 🚀é\";\n r_3_2_1[2] = r_3_2_1_2;\n }\n {\n string memory r_3_2_1_3 = unicode\"Moo é🚀 é🚀🚀o 🚀ooéMoo Méo é\";\n r_3_2_1[3] = r_3_2_1_3;\n }\n r_3_2.s_1 = r_3_2_1;\n }\n r_3.s_2 = r_3_2;\n }\n r[3] = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000008e0000000000000000000000000000000000000000000000000000000000000112000000000000000000000000000000000000000000000000000000000000019c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000005e0000000000000000000000000000000000000000000000000000000000000008007d4898a52fb8adf0fab2e4a0daf2c53eb5e6d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a08542fbbb69675516ee5cf80b09ffe87177decadcfd9a3e5330f323020000000000000000000000000000000000000000000000000000000000000000000001e090d1d7a4d3c8d2c4e74ef898513b121b4e000000000000000000000000000000000000000000000000000000d09f5502419fe25ff2c9ec3a2b84f68b2cb92aa72a53f4420eefd46df8915a306061fc03a799df000000000000000000000000005fe2b782880ed43eebb3fcea563d4e17d8f72400000000000000000000000000648b62ef9afe26f970ce6ac7c96893d8b2c98d000000000000000000000000004eb2cdd02eb92fe6c704e696cd84fbfcaa477200000000000000000000000000107228c1bb573564c7d7c3baede74c98bd12120000000000000000000000000029f79a015066bda3d725d33ca5e4457b0c777b00000000000000000000000000c50ce89c23426629c89705c7c02b58077e882c00000000000000000000000000c0c426ae87d617332b0b553a43d28aeced1558000000000000000000000000000a2812fafedade07fc50774c83ae28183ebd270000000000000000000000000000000000000000000000000000135a5c7eea6c61b3f756967026fdb599061537ffffffffffffffffffffffffffcded441fc74d3cac6510250b3f74e6b0f55ce4000000000000000000000000001d2a5eb7a7be356f4cd6d731310391c16dbd62000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80f09f9a806f6f6fc3a9f09f9a806f4d20206f00000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a806ff09f9a8020f09f9a804d4d6f20206ff09f9a80c3a94d6ff09f9a80f09f9a80c3a96f4d6f206fc3a9f09f9a804df09f9a806f6f6f6f6ff09f9a806f20f09f9a804d00000000000000000000000000000000000000000000000000000000000000000a0f6eef4d0bb780934a0d58bd49d1db46f83d41000000000000000000000000000000000000000000000000000000000000008000000000000000000000000051b684cd1750899b2efc108d0ca55cf36345cb29000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a806fc3a9c3a94d206fc3a9f09f9a80c3a94df09f9a806f4df09f9a80c3a9204df09f9a806f20204dc3a96fc3a920c3a9c3a96ff09f9a80f09f9a80f09f9a80c3a9f09f9a806f6fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a802020c3a9206f6f6f4d206f6f6f4d6ff09f9a804d6ff09f9a806f4d2020f09f9a80c3a9c3a96f6fc3a96f20c3a94dc3a9c3a9f09f9a80c3a94d6ff09f9a804dc3a9204d206f6f6f6fc3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a80c3a9f09f9a804d6f6f206f0000000000000000000000000000000000000000000000cd01614be9b752726e766c4e93e23755c75468970000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a80f09f9a80206f4d6fc3a9f09f9a80c3a96f0000000000000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a80c3a9f09f9a80c3a94d6f6fc3a96f6ff09f9a806f6ff09f9a806f6f4d6f6f6ff09f9a806fc3a920f09f9a806f6f6f6f6fc3a9f09f9a806ff09f9a8020206f6ff09f9a806f204d4df09f9a806f6f20f09f9a804d00000000000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a80206f204d6f2020f09f9a80c3a9f09f9a80f09f9a806fc3a96f204d206f6f6f4d20f09f9a80204d6f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000654d6f6f20c3a9f09f9a80204dc3a94d4dc3a9204d6f202020206f204d6f4df09f9a80c3a94dc3a9c3a9f09f9a80f09f9a80206f6ff09f9a80f09f9a804dc3a94df09f9a80f09f9a80c3a96f4d6fc3a9f09f9a80f09f9a80f09f9a806f6f6ff09f9a806fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000005e000000000000000000000000000000000000000000000000000000000000000804992ca08aab5235e7872b63a5b630f8f75fdab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0062b4d4001c96856f4b27e2bcd54cc5dd7c38be5beaabdded2e3abba0000000000000000000000000000000000000000000000000000000000000000000001e05811b5d2aacea939662e9ea8220d7c062c000000000000000000000000000000000000000000000000000000ee1bf04e3719c12cce1bfe2920c132e522edeeac904afe233a680ec92eb46d05e29697e2cfd5d30000000000000000000000000056cb88dcdd676fc43fdc322e289e96afdadf8f000000000000000000000000007fbd510e2bc31db1bb9f6dbceacf9dafb28e5c0000000000000000000000000064650e8e989c743894be8b36934e89018753d6000000000000000000000000004c0f166214e9eb86d26cd6da36eb093a7b3da700000000000000000000000000731075b2351c801a6791938986b11f361b52f80000000000000000000000000091c592cd133c416b67ddef295d1ab568df247c00000000000000000000000000b3ac8ef1a7adbb9770feb75984cb6094517d4200000000000000000000000000cb311c7cf5f6cac09d0a7b85f234f73d312f3300000000000000000000000000000000000000000000000000006094b9bfac7fc81106767ea49ed826d8c9a3ff00000000000000000000000000793b3141c9342902b38c32f2c44c5429e1bc040000000000000000000000000013510f84b434e161b0013f85118f89296c86d1000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a80206f6f6ff09f9a80f09f9a80f09f9a806f6f6f000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a804d4d6ff09f9a80f09f9a804dc3a9f09f9a806fc3a9c3a9c3a96f6f6fc3a94dc3a920c3a9f09f9a806f2020c3a9200000000000000000000000000000000000000000426b639ea0af99d863e04ad97204c0902915a29100000000000000000000000000000000000000000000000000000000000000800000000000000000000000003891b4657b544a54100e5d188e032bd0202864380000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a804d20c3a9206ff09f9a80c3a9c3a94d4d6f6f4d206f6ff09f9a8020f09f9a80206fc3a96f6fc3a94d4d6ff09f9a80c3a9206fc3a96f6ff09f9a806f6f6f6f6f4d206f4d6f6f4df09f9a80c3a9204d206f6f0000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a80c3a9f09f9a806f6ff09f9a8020c3a9f09f9a804d4d6f4df09f9a804d20c3a9204dc3a9206fc3a9f09f9a80c3a94d2020c3a9f09f9a806f4d20c3a9c3a96ff09f9a806f4d6f6f4df09f9a80c3a96f200000000000000000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a80f09f9a80c3a96fc3a9c3a920204d6f6fc3a920f09f9a806f6f206f200000000000000000000000000000000000000000000000000000000000000000000000000000dd9a529d64b3a96bdab7a021742079fe9ca3f2db000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000494d6f6f20c3a9f09f9a80204d204dc3a9c3a96f20c3a94d4dc3a96f4df09f9a806f4d4df09f9a80206fc3a96fc3a9f09f9a804d2020c3a92020206fc3a9f09f9a802020c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a80c3a9202020206f6f6f6ff09f9a806f6f6f20f09f9a8020c3a9c3a94d204d6f6f206f4d6f4d6f204d6fc3a94d4d4d6f6f206ff09f9a806fc3a9c3a94d6f6f6f6f20c3a96ff09f9a80206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a804dc3a96f206fc3a96f4df09f9a80f09f9a804dc3a9206fc3a920f09f9a806f6f6f4d4dc3a96f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000194d6f6f20c3a9f09f9a806f6f6fc3a9c3a9f09f9a806f206f6f00000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000008046e3662bed3765c4420052e7d96c002615237f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c010417ad721dd982c427420900dbf825f12a3d15ebe5e7a49580b52740000000000000000000000000000000000000000000000000000000000000000000001e0cc7f13267b41acf941b17cdefc2806cb760000000000000000000000000000000000000000000000000000006cc7818714df681c93d145d0703c6f57033725b67bd9936d9282efa18e1ba8a248e2fc7f288674000000000000000000000000005b98f8de1ad55b73645d71989bdf44386e166f00000000000000000000000000b17963f665be342c40085323c222da527acf3100000000000000000000000000df7ae492b718639771235f56fc64b0aa77493900000000000000000000000000d9e6206720b85f4dc6dfd9ff5e6f06c5c5d36b00000000000000000000000000fb93a2e5e4e9e9bb564cccfb5ed1e8dab53d00000000000000000000000000005c44f203fb4eb32209b2890058d1ffa96deed500000000000000000000000000780db44b8693dbc61ba361bc82447446579cd200000000000000000000000000d783b9b3dedd7b91662b31dd22a5762d4c836800000000000000000000000000ffffffffffffffffffffffffff948de27af70082a6da3cb0da33e90747881ed5ffffffffffffffffffffffffff810ddc0bc2b610282f8fbf49012687b78fc2c500000000000000000000000000631e460fae25563bc9632b2a165033b3b9e5e500000000000000000000000000000000000000000000000000000000000000244d6f6f20c3a9f09f9a804d4df09f9a80f09f9a80c3a9c3a9206fc3a96ff09f9a80c3a92000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a806f2020c3a9f09f9a806f4df09f9a8020c3a96ff09f9a806ff09f9a804dc3a96ff09f9a804d6f6ff09f9a804d4df09f9a8020f09f9a80c3a9f09f9a806ff09f9a80f09f9a806fc3a96f6fc3a9206f200000000000000000000000000000000000000076b50f0caa331ca99ae3f1becbb778f61fb330df000000000000000000000000000000000000000000000000000000000000008000000000000000000000000020854d701466b1929cd2af5801d5e6b92bf7ac9300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a804df09f9a806ff09f9a80c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000674d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a80c3a96f204dc3a920c3a94d6f6f4d204df09f9a804df09f9a80f09f9a806f20f09f9a804df09f9a80f09f9a8020f09f9a806fc3a9204dc3a9f09f9a804d4d6f6f6f206f6f6fc3a96f6f6ff09f9a806f20c3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a806f4dc3a96ff09f9a804d206f6f6f6f6f6f6f6fc3a96f6ff09f9a80f09f9a802000000000000000000000000000000000000000000000000000000000000000000000642a8154e5a8f34a72252637fc5670b3354c10c10000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a806f2020f09f9a804d6fc3a96f6f20f09f9a804d4d6f4d4df09f9a806f6f2020f09f9a806ff09f9a80f09f9a80f09f9a80f09f9a80c3a9c3a94d206fc3a96f6f4dc3a9f09f9a806f20204df09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a80f09f9a80f09f9a8020c3a96ff09f9a806f4dc3a920f09f9a804df09f9a806f6f6ff09f9a804d4df09f9a80f09f9a804d6f206fc3a96f4d4d6fc3a9206f4d4d20f09f9a80f09f9a802020c3a96fc3a94d00000000000000000000000000000000000000000000000000000000000000000000000000614d6f6f20c3a9f09f9a804d6ff09f9a806f6fc3a9f09f9a80f09f9a80c3a9c3a9204d6f4d6f6f204d6fc3a9c3a96f6ff09f9a80c3a96fc3a920c3a94d6f6f6f20f09f9a806f4dc3a94d206f204dc3a96f4d6f6f4d6f4d6ff09f9a804dc3a96fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a80f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000802725741af37a26933107d0296a061f3a10ecfb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c0c54e889e2d8f9ddb1ddeb2cf66c6c7c768827e0061a318ad8f194d290000000000000000000000000000000000000000000000000000000000000000000001e088ff917fb91533eaef1507477dbdeabdfa000000000000000000000000000000000000000000000000000000494fde79041cb6e684023703a9b05a3f3ceabf42a23ab2543a56cdcfcc448da01550ed701293c500000000000000000000000000d0e1b79aedda343d3d7513bbe94d2b886960620000000000000000000000000029885767f43ea7e8d795ef44e0e1ec739e934e00000000000000000000000000ef826ab55fc7a9c7817e57252ddbf8a3a3aa7f00000000000000000000000000832ae9717db366ebf6aabaa8ecab3ea69f2e1c0000000000000000000000000056a160e829f038f4a48b13050751a4f9c1f647000000000000000000000000008d8fc83c90bffadf7ea8be15eac87b0076669900000000000000000000000000fbd2ede90b08140cf5d7a7c38d4b784927617b00000000000000000000000000251939dfa0d77f9e98aa9451965c758f1682ad00000000000000000000000000ffffffffffffffffffffffffffc33b4d95d7c4a9fefb3e5ace41e21af5a3c1cc000000000000000000000000000d476910fd95d12a84028113e3163c9d9f6c7b000000000000000000000000002d0443d94313dfac5a917e1b630c3bd7a5e67a00000000000000000000000000000000000000000000000000000000000000354d6f6f20c3a9f09f9a806fc3a9c3a96ff09f9a80c3a94d6f6f6f6fc3a9c3a96f4d6f6f20c3a94df09f9a804d6f4df09f9a80c3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000654d6f6f20c3a9f09f9a806f6f6ff09f9a80c3a96fc3a96f6f6f4d6f6f206f6ff09f9a80f09f9a80c3a920f09f9a8020f09f9a80c3a9f09f9a80c3a9204d20f09f9a806f4dc3a9c3a94d6f6f20c3a96fc3a9f09f9a804d20f09f9a806ff09f9a80c3a9c3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000084250d6fcb7e6cf3a7df8c48b1934fe55e3b6e8c0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000add4dd07c53023100b7caf3468500f2d969e671f00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a806f206f20f09f9a806fc3a94d20f09f9a80c3a92020204d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a806f20f09f9a8020f09f9a806f204d20c3a9c3a96f20c3a9f09f9a806f4d6f206fc3a94d4df09f9a80c3a96f4df09f9a804d4dc3a96f4d6ff09f9a80c3a96f206f4d6f6f4dc3a9c3a96fc3a9c3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a804d6fc3a9c3a9c3a94df09f9a806f6fc3a96f206f6f6f4df09f9a80f09f9a806f6f4dc3a9c3a9f09f9a804d6f206ff09f9a80206f20c3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000002463429fa3c5f0a08f76b9bcc36a68e756f03ede0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a80f09f9a80f09f9a80204df09f9a804d206f204df09f9a80c3a96fc3a9c3a96fc3a9c3a920c3a920f09f9a806fc3a96fc3a96f4d000000000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a80f09f9a806fc3a9c3a94dc3a9f09f9a806f6f6f6f6f4d4d4d6f6f6ff09f9a80f09f9a80c3a96f2020f09f9a806f20c3a96f4d4df09f9a80c3a9f09f9a806f6fc3a9200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a804d6ff09f9a806f206fc3a920f09f9a80c3a900000000000000000000000000000000000000000000000000000000000000000000002c4d6f6f20c3a9f09f9a8020c3a9f09f9a80f09f9a806f2020f09f9a806f6fc3a94d6f6f204dc3a96f2020c3a90000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,string[3],((bool,string)),(((bytes2,bytes14,uint168,int48,bool[1][1]),uint104,address,string)),(uint160,(bool[2][][2][2]),bytes18))", + "type": "(bool,string[3],((bool,string)),(((bytes2,bytes14,uint168,int48,bool[1][1]),uint104,address,string)),(uint160,(bool[2][][2][2]),bytes18))", + "value": [ + true, + [ + "Moo é🚀o éoo M oM🚀 oo MééMéo🚀ooo M Moééo🚀", + "Moo é🚀 🚀M oM🚀🚀Mo o🚀o🚀 MM 🚀o🚀🚀🚀ooé 🚀🚀o🚀🚀o oooo🚀ooo🚀o🚀é🚀oo🚀M", + "Moo é🚀o🚀MM o Moé oMéoéoéoMo🚀ooMooM🚀 é🚀o MMé ooM é🚀oMM🚀" + ], + [[true, "Moo é🚀MMMMoM o🚀🚀🚀ééoo 🚀M é🚀M ooéMo 🚀 🚀éM🚀o🚀oé 🚀oMééooo"]], + [ + [ + [ + "0x4f89", + "0xadce4eb732c9f8e71e5c3f87b10e", + "44598453584867922519532923706388542158971849461330", + "-63398827106234", + [[true]] + ], + "1812967080998146360362462321544", + "0xfC03D7A3cC032937288f627831a394E9f7Cf2EB3", + "Moo é🚀o 🚀o🚀 ooMooo🚀Moo🚀é Moéo ééoo éMMéoM éoooMoMM é🚀 🚀🚀éM" + ] + ], + [ + "73008686174554693852374332816814602592382804637", + [ + [ + [[], []], + [ + [ + [false, false], + [false, true] + ], + [[false, false]] + ] + ] + ], + "0x12b81a09a16e22c0fefa3377a2d07945fe69" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o éoo M oM🚀 oo MééMéo🚀ooo M Moééo🚀" + }, + { + "type": "string", + "value": "Moo é🚀 🚀M oM🚀🚀Mo o🚀o🚀 MM 🚀o🚀🚀🚀ooé 🚀🚀o🚀🚀o oooo🚀ooo🚀o🚀é🚀oo🚀M" + }, + { + "type": "string", + "value": "Moo é🚀o🚀MM o Moé oMéoéoéoMo🚀ooMooM🚀 é🚀o MMé ooM é🚀oMM🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀MMMMoM o🚀🚀🚀ééoo 🚀M é🚀M ooéMo 🚀 🚀éM🚀o🚀oé 🚀oMééooo" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x4f89" + }, + { + "type": "hexstring", + "value": "0xadce4eb732c9f8e71e5c3f87b10e" + }, + { + "type": "number", + "value": "44598453584867922519532923706388542158971849461330" + }, + { + "type": "number", + "value": "-63398827106234" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "number", + "value": "1812967080998146360362462321544" + }, + { + "type": "address", + "value": "0xfC03D7A3cC032937288f627831a394E9f7Cf2EB3" + }, + { + "type": "string", + "value": "Moo é🚀o 🚀o🚀 ooMooo🚀Moo🚀é Moéo ééoo éMMéoM éoooMoMM é🚀 🚀🚀éM" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "73008686174554693852374332816814602592382804637" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x12b81a09a16e22c0fefa3377a2d07945fe69" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610b12806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610850565b60405180910390f35b6100566103fd565b61005e6103fd565b6001815261006a61045e565b60006040518060600160405280603c8152602001610a4e603c91398252506040805160a0810190915260778082526000919061091a60208301399050808260016020020181905250506000604051806080016040528060538152602001610a8a60539139604083810191909152602084810193909352805160608082018352600082860181815283850183905283528351808501855280870183905260018152845160808101909552828552929592945092916109919083013960208301525081526040820152610139610485565b610141610494565b6101496104c0565b614f8960f01b81526d56e7275b9964fc738f2e1fc3d88760911b6020820152741e83f7d31b0e3bbf99769eae36b08b152164b0ce5260408201526539a930919fb91960608201526101986104ec565b6101a0610519565b6001815281526080828101919091529082526c16e2033879250a4ce2ce9b9b8860208381019190915273fc03d7a3cc032937288f627831a394e9f7cf2eb360408085019190915280519283019052605d808352600092916109f19083013960608084019190915291835250820152610216610537565b730cc9d29d65da8714e7a9fb79e2c5aa80c456e29d8152610235610567565b61023d610576565b6102456105a3565b6040805160008082526020820190925281610276565b6102636105bc565b81526020019060019003908161025b5790505b5082525060408051600080825260208201909252816102ab565b6102986105bc565b8152602001906001900390816102905790505b5060208301525081526102bc6105a3565b60408051600280825260608201909252600091816020015b6102dc6105bc565b8152602001906001900390816102d45790505090506102f96105bc565b60008082526020820181905282518291849161031757610317610903565b60200260200101819052505061032b6105bc565b60008152600160208201819052825182918491811061034c5761034c610903565b6020908102919091010152508152604080516001808252818301909252600091816020015b6103796105bc565b8152602001906001900390816103715790505090506103966105bc565b6000808252602082018190528251829184916103b4576103b4610903565b6020908102919091018101919091528381019290925250828101919091529082528201527112b81a09a16e22c0fefa3377a2d07945fe6960701b60408201526080820152919050565b6040518060a0016040528060001515815260200161041961045e565b815260200161043f60408051606080820183526000602083019081529282015290815290565b815260200161044c610485565b8152602001610459610537565b905290565b60405180606001604052806003905b606081526020019060019003908161046d5790505090565b60405180602001604052806104595b60405180608001604052806104a76104c0565b8152600060208201819052604082015260609081015290565b6040805160a0810182526000808252602082018190529181018290526060810191909152608081016104595b60405180602001604052806001905b610503610519565b8152602001906001900390816104fb5790505090565b60405180602001604052806001906020820280368337509192915050565b604051806060016040528060006001600160a01b0316815260200161055a610567565b8152600060209091015290565b60405180602001604052806104595b60405180604001604052806002905b61058d6105a3565b8152602001906001900390816105855790505090565b604080518082019091526060815260016020820161046d565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b81811015610600576020818501810151868301820152016105e4565b81811115610612576000602083870101525b50601f01601f19169290920160200192915050565b805160208084528151151584820152015160408084015260009061064e60608501826105da565b949350505050565b600060208251818552805161ffff60f01b8151168387015271ffffffffffffffffffffffffffffffffffff198382015116604087015260018060a81b036040820151166060870152606081015160050b60808701526080810151905060a086016000805b60018082106106c957506106ff565b845184845b838110156106eb57825115158252918901919089019083016106ce565b5050509386019350918501916001016106ba565b50505050908101516cffffffffffffffffffffffffff1660c085015260408101516001600160a01b031660e0850152606001516101008085015261064e6101208501826105da565b80516001600160a01b03168252602080820151606082850181905290519084018290526000919060c0850160808601845b600281101561082157878303607f190182528351836040810160005b600281101561080c57868203835283518051808452908a01908a84019060005b818110156107f75783518360005b60028110156107e157825115158252918f0191908f01906001016107c2565b505050928c0192604092909201916001016107b4565b5050948a0194938a0193925050600101610794565b50958701959450505090840190600101610778565b50506040850151925061084760408701846dffffffffffffffffffffffffffff19169052565b95945050505050565b602080825282511515828201528281015160a060408401526000919061012084019060c08501845b60038110156108a75760bf198785030182526108958484516105da565b93509184019190840190600101610878565b50505060408501519150601f19808583030160608601526108c88284610627565b925060608601519150808584030160808601526108e58383610656565b925060808601519150808584030160a0860152506108478282610747565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a8020f09f9a804d206f4df09f9a80f09f9a804d6f206ff09f9a806ff09f9a80204d4d20f09f9a806ff09f9a80f09f9a80f09f9a806f6fc3a920f09f9a80f09f9a806ff09f9a80f09f9a806f20206f6f6f6ff09f9a806f6f6ff09f9a806ff09f9a80c3a9f09f9a806f6ff09f9a804d4d6f6f20c3a9f09f9a804d4d4d4d6f4d206ff09f9a80f09f9a80f09f9a80c3a9c3a96f6f20f09f9a804d20c3a9f09f9a804d206f6fc3a94d6f20f09f9a8020f09f9a80c3a94df09f9a806ff09f9a806fc3a920f09f9a806f4dc3a9c3a96f6f6f4d6f6f20c3a9f09f9a806f20f09f9a806ff09f9a80206f6f4d6f6f6ff09f9a804d6f6ff09f9a80c3a9204d6fc3a96f20c3a9c3a96f6f2020c3a94d4dc3a96f4d20c3a96f6f6f4d6f4d4d20c3a9f09f9a8020f09f9a80f09f9a80c3a94d4d6f6f20c3a9f09f9a806f20c3a96f6f204d206f4df09f9a80206f6f20204dc3a9c3a94dc3a96ff09f9a806f6f6f204d204d6fc3a9c3a96ff09f9a804d6f6f20c3a9f09f9a806ff09f9a804d4d206f204d6fc3a9206f4dc3a96fc3a96fc3a96f4d6ff09f9a806f6f4d6f6f4df09f9a8020c3a9f09f9a806f204d4dc3a9206f6f4d20c3a9f09f9a806f4d4df09f9a80a26469706673582212202d384c01fd7bb40c4b9fb16a8b774f9018e1102554d6acf7b18bf42368ac6d9a64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_0e00bb9b {\n bool s_0;\n string s_1;\n }\n\n struct S_1de075c7 {\n S_0e00bb9b s_0;\n }\n\n struct S_820bac46 {\n bytes2 s_0;\n bytes14 s_1;\n uint168 s_2;\n int48 s_3;\n bool[1][1] s_4;\n }\n\n struct S_09091575 {\n S_820bac46 s_0;\n uint104 s_1;\n address s_2;\n string s_3;\n }\n\n struct S_39b3eba2 {\n S_09091575 s_0;\n }\n\n struct S_ee629257 {\n bool[2][][2][2] s_0;\n }\n\n struct S_531f29c6 {\n uint160 s_0;\n S_ee629257 s_1;\n bytes18 s_2;\n }\n\n struct S_510b16e9 {\n bool s_0;\n string[3] s_1;\n S_1de075c7 s_2;\n S_39b3eba2 s_3;\n S_531f29c6 s_4;\n }\n\n function test () public pure returns (S_510b16e9 memory) {\n S_510b16e9 memory r;\n {\n bool r_0 = true;\n r.s_0 = r_0;\n }\n {\n string[3] memory r_1;\n {\n string memory r_1_0 = unicode\"Moo é🚀o éoo M oM🚀 oo MééMéo🚀ooo M Moééo🚀\";\n r_1[0] = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀 🚀M oM🚀🚀Mo o🚀o🚀 MM 🚀o🚀🚀🚀ooé 🚀🚀o🚀🚀o oooo🚀ooo🚀o🚀é🚀oo🚀M\";\n r_1[1] = r_1_1;\n }\n {\n string memory r_1_2 = unicode\"Moo é🚀o🚀MM o Moé oMéoéoéoMo🚀ooMooM🚀 é🚀o MMé ooM é🚀oMM🚀\";\n r_1[2] = r_1_2;\n }\n r.s_1 = r_1;\n }\n {\n S_1de075c7 memory r_2;\n {\n S_0e00bb9b memory r_2_0;\n {\n bool r_2_0_0 = true;\n r_2_0.s_0 = r_2_0_0;\n }\n {\n string memory r_2_0_1 = unicode\"Moo é🚀MMMMoM o🚀🚀🚀ééoo 🚀M é🚀M ooéMo 🚀 🚀éM🚀o🚀oé 🚀oMééooo\";\n r_2_0.s_1 = r_2_0_1;\n }\n r_2.s_0 = r_2_0;\n }\n r.s_2 = r_2;\n }\n {\n S_39b3eba2 memory r_3;\n {\n S_09091575 memory r_3_0;\n {\n S_820bac46 memory r_3_0_0;\n {\n bytes2 r_3_0_0_0 = bytes2(0x4f89);\n r_3_0_0.s_0 = r_3_0_0_0;\n }\n {\n bytes14 r_3_0_0_1 = bytes14(0xadce4eb732c9f8e71e5c3f87b10e);\n r_3_0_0.s_1 = r_3_0_0_1;\n }\n {\n uint168 r_3_0_0_2 = 44598453584867922519532923706388542158971849461330;\n r_3_0_0.s_2 = r_3_0_0_2;\n }\n {\n int48 r_3_0_0_3 = -63398827106234;\n r_3_0_0.s_3 = r_3_0_0_3;\n }\n {\n bool[1][1] memory r_3_0_0_4;\n {\n bool[1] memory r_3_0_0_4_0;\n {\n bool r_3_0_0_4_0_0 = true;\n r_3_0_0_4_0[0] = r_3_0_0_4_0_0;\n }\n r_3_0_0_4[0] = r_3_0_0_4_0;\n }\n r_3_0_0.s_4 = r_3_0_0_4;\n }\n r_3_0.s_0 = r_3_0_0;\n }\n {\n uint104 r_3_0_1 = 1812967080998146360362462321544;\n r_3_0.s_1 = r_3_0_1;\n }\n {\n address r_3_0_2 = 0xfC03D7A3cC032937288f627831a394E9f7Cf2EB3;\n r_3_0.s_2 = r_3_0_2;\n }\n {\n string memory r_3_0_3 = unicode\"Moo é🚀o 🚀o🚀 ooMooo🚀Moo🚀é Moéo ééoo éMMéoM éoooMoMM é🚀 🚀🚀éM\";\n r_3_0.s_3 = r_3_0_3;\n }\n r_3.s_0 = r_3_0;\n }\n r.s_3 = r_3;\n }\n {\n S_531f29c6 memory r_4;\n {\n uint160 r_4_0 = 73008686174554693852374332816814602592382804637;\n r_4.s_0 = r_4_0;\n }\n {\n S_ee629257 memory r_4_1;\n {\n bool[2][][2][2] memory r_4_1_0;\n {\n bool[2][][2] memory r_4_1_0_0;\n {\n bool[2][] memory r_4_1_0_0_0 = new bool[2][](0);\n r_4_1_0_0[0] = r_4_1_0_0_0;\n }\n {\n bool[2][] memory r_4_1_0_0_1 = new bool[2][](0);\n r_4_1_0_0[1] = r_4_1_0_0_1;\n }\n r_4_1_0[0] = r_4_1_0_0;\n }\n {\n bool[2][][2] memory r_4_1_0_1;\n {\n bool[2][] memory r_4_1_0_1_0 = new bool[2][](2);\n {\n bool[2] memory r_4_1_0_1_0_0;\n {\n bool r_4_1_0_1_0_0_0 = false;\n r_4_1_0_1_0_0[0] = r_4_1_0_1_0_0_0;\n }\n {\n bool r_4_1_0_1_0_0_1 = false;\n r_4_1_0_1_0_0[1] = r_4_1_0_1_0_0_1;\n }\n r_4_1_0_1_0[0] = r_4_1_0_1_0_0;\n }\n {\n bool[2] memory r_4_1_0_1_0_1;\n {\n bool r_4_1_0_1_0_1_0 = false;\n r_4_1_0_1_0_1[0] = r_4_1_0_1_0_1_0;\n }\n {\n bool r_4_1_0_1_0_1_1 = true;\n r_4_1_0_1_0_1[1] = r_4_1_0_1_0_1_1;\n }\n r_4_1_0_1_0[1] = r_4_1_0_1_0_1;\n }\n r_4_1_0_1[0] = r_4_1_0_1_0;\n }\n {\n bool[2][] memory r_4_1_0_1_1 = new bool[2][](1);\n {\n bool[2] memory r_4_1_0_1_1_0;\n {\n bool r_4_1_0_1_1_0_0 = false;\n r_4_1_0_1_1_0[0] = r_4_1_0_1_1_0_0;\n }\n {\n bool r_4_1_0_1_1_0_1 = false;\n r_4_1_0_1_1_0[1] = r_4_1_0_1_1_0_1;\n }\n r_4_1_0_1_1[0] = r_4_1_0_1_1_0;\n }\n r_4_1_0_1[1] = r_4_1_0_1_1;\n }\n r_4_1_0[1] = r_4_1_0_1;\n }\n r_4_1.s_0 = r_4_1_0;\n }\n r_4.s_1 = r_4_1;\n }\n {\n bytes18 r_4_2 = bytes18(0x12b81a09a16e22c0fefa3377a2d07945fe69);\n r_4.s_2 = r_4_2;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a806f20c3a96f6f204d206f4df09f9a80206f6f20204dc3a9c3a94dc3a96ff09f9a806f6f6f204d204d6fc3a9c3a96ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000774d6f6f20c3a9f09f9a8020f09f9a804d206f4df09f9a80f09f9a804d6f206ff09f9a806ff09f9a80204d4d20f09f9a806ff09f9a80f09f9a80f09f9a806f6fc3a920f09f9a80f09f9a806ff09f9a80f09f9a806f20206f6f6f6ff09f9a806f6f6ff09f9a806ff09f9a80c3a9f09f9a806f6ff09f9a804d00000000000000000000000000000000000000000000000000000000000000000000000000000000534d6f6f20c3a9f09f9a806ff09f9a804d4d206f204d6fc3a9206f4dc3a96fc3a96fc3a96f4d6ff09f9a806f6f4d6f6f4df09f9a8020c3a9f09f9a806f204d4dc3a9206f6f4d20c3a9f09f9a806f4d4df09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a804d4d4d4d6f4d206ff09f9a80f09f9a80f09f9a80c3a9c3a96f6f20f09f9a804d20c3a9f09f9a804d206f6fc3a94d6f20f09f9a8020f09f9a80c3a94df09f9a806ff09f9a806fc3a920f09f9a806f4dc3a9c3a96f6f6f00000000000000000000000000000000000000000000000000000000000000204f89000000000000000000000000000000000000000000000000000000000000adce4eb732c9f8e71e5c3f87b10e00000000000000000000000000000000000000000000000000000000001e83f7d31b0e3bbf99769eae36b08b152164b0ce52ffffffffffffffffffffffffffffffffffffffffffffffffffffc656cf6e604600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000016e2033879250a4ce2ce9b9b88000000000000000000000000fc03d7a3cc032937288f627831a394e9f7cf2eb30000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a806f20f09f9a806ff09f9a80206f6f4d6f6f6ff09f9a804d6f6ff09f9a80c3a9204d6fc3a96f20c3a9c3a96f6f2020c3a94d4dc3a96f4d20c3a96f6f6f4d6f4d4d20c3a9f09f9a8020f09f9a80f09f9a80c3a94d0000000000000000000000000000000cc9d29d65da8714e7a9fb79e2c5aa80c456e29d000000000000000000000000000000000000000000000000000000000000006012b81a09a16e22c0fefa3377a2d07945fe6900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(uint120,(address,(string,bytes2,(uint32,bool[4],bytes2,string,bool),address)[][4][],bytes21[4][1],bytes4,string),string[][])", + "type": "(uint120,(address,(string,bytes2,(uint32,bool[4],bytes2,string,bool),address)[][4][],bytes21[4][1],bytes4,string),string[][])", + "value": [ + "118032467151180840678421008543178929", + [ + "0x2c04BF96b436c20513eef153409Fa89714a44098", + [ + [ + [ + [ + "Moo é🚀", + "0x37bc", + [ + "325789764", + [true, false, false, true], + "0xe17a", + "Moo é🚀o éé", + true + ], + "0xCC35f88Eb8eFe1867f72e69F7C57532d17052D45" + ], + [ + "Moo é🚀oM 🚀 MéoéMéooMo éoooé", + "0x722f", + [ + "3089238400", + [false, false, false, false], + "0x4d81", + "Moo é🚀 o 🚀o", + true + ], + "0x75F4cc7FAc6eBB3016776DF0Cfec941f72dA2420" + ], + [ + "Moo é🚀o🚀M🚀oMoéo o ooéé🚀oé éoMoooMéoo🚀é ooo o", + "0x5b67", + [ + "4061355906", + [true, true, true, true], + "0x2077", + "Moo é🚀 ", + false + ], + "0xe078797A9feB2B8a9d2E37156a574776A961124D" + ] + ], + [], + [ + [ + "Moo é🚀o", + "0x974f", + [ + "2632340480", + [true, true, true, false], + "0xd827", + "Moo é🚀oM M ooo🚀éoooéMMMoMoé oéoo🚀o 🚀", + true + ], + "0xcaA3251d916a0f8677c7997133E2a0c6e6D24e73" + ], + [ + "Moo é🚀MéM é", + "0xf527", + [ + "8870127", + [false, false, false, true], + "0x22aa", + "Moo é🚀 éooMé🚀oMo oéoooMo o🚀 Mo🚀oo", + false + ], + "0x08E1Ccf9494E2f2995e65fD03F4435C96DF32B05" + ], + [ + "Moo é🚀oééM🚀Moé o🚀 🚀oéoéoo🚀o🚀é ééM🚀MM oM🚀 MMMoooéoo", + "0x61fe", + [ + "3308472352", + [false, false, false, false], + "0xac2a", + "Moo é🚀 o🚀ooooMMooé🚀oM🚀o🚀 o🚀🚀Mooé🚀🚀 o o", + false + ], + "0x8b8EB017d542ACe3fA11f3329a3508cdca5c0c0b" + ], + [ + "Moo é🚀🚀", + "0xecfa", + [ + "1255130709", + [false, false, true, false], + "0x5ab3", + "Moo é🚀🚀é🚀oM 🚀oé🚀o 🚀ooMoo 🚀éM 🚀 ", + false + ], + "0x2Dfd4D17bfE574f45828acE6D919A8e1F0Ae48e6" + ] + ], + [ + [ + "Moo é🚀o🚀oéooMé", + "0x6dce", + [ + "331747208", + [true, true, true, false], + "0x5225", + "Moo é🚀🚀 oM🚀🚀oéM🚀 éMé o M oéo🚀MMoM🚀o🚀o Mo 🚀", + false + ], + "0x7A51df6b8783FaF41CAe7F2Bc3e9Cc527275831F" + ], + [ + "Moo é🚀éooé oM🚀🚀🚀o éoo 🚀🚀o 🚀oo🚀🚀", + "0x6719", + [ + "1565095980", + [false, false, true, false], + "0x9a59", + "Moo é🚀o🚀M🚀MéoM🚀o éo🚀o ééé", + false + ], + "0x70713845Aa0e0B376762fac0615b2f5c0A53660A" + ], + [ + "Moo é🚀M", + "0x0da2", + [ + "2374059176", + [true, true, false, false], + "0x1fd5", + "Moo é🚀ooMoé🚀🚀🚀o🚀 é🚀Mé Moo o oM🚀🚀MéooMo oéé🚀🚀 é🚀", + true + ], + "0x865CBdD0b922d9dC232BFc45A259117CA1e37ca1" + ], + [ + "Moo é🚀🚀 ", + "0xc084", + [ + "3977201122", + [true, true, false, true], + "0x5e19", + "Moo é🚀oMo éo 🚀 oMéé o oMMoéMoo ééMoooéo", + false + ], + "0x7EF9634CE309dC670cf64e79D1330e1906fDC807" + ] + ] + ] + ], + [ + [ + "0xc48413c2682ffae9c5f3177dbbf96bdc608df1b25b", + "0xd54f17f43b0f79d669affeeeee352e067b548f5ea1", + "0xaddf381c7bce57bd3ea070e22611ceb5be0251a5c8", + "0x5d5512b68391dcb24aa1074f11e6c291e78651e0c7" + ] + ], + "0xb17ac19b", + "Moo é🚀🚀o oé🚀ooMo🚀é🚀🚀o🚀ooéé ooéoo " + ], + [ + [], + ["Moo é🚀M🚀🚀o🚀éo o M🚀MéooMoo🚀 éMMMMo🚀é🚀 ééoé 🚀", "Moo é🚀"], + ["Moo é🚀oéo o🚀ooééMM 🚀o🚀MMé🚀🚀éMM🚀🚀🚀oéMooéo", "Moo é🚀"] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "118032467151180840678421008543178929" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x2c04BF96b436c20513eef153409Fa89714a44098" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "hexstring", + "value": "0x37bc" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "325789764" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0xe17a" + }, + { + "type": "string", + "value": "Moo é🚀o éé" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0xCC35f88Eb8eFe1867f72e69F7C57532d17052D45" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oM 🚀 MéoéMéooMo éoooé" + }, + { + "type": "hexstring", + "value": "0x722f" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3089238400" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x4d81" + }, + { + "type": "string", + "value": "Moo é🚀 o 🚀o" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0x75F4cc7FAc6eBB3016776DF0Cfec941f72dA2420" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀M🚀oMoéo o ooéé🚀oé éoMoooMéoo🚀é ooo o" + }, + { + "type": "hexstring", + "value": "0x5b67" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "4061355906" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x2077" + }, + { + "type": "string", + "value": "Moo é🚀 " + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0xe078797A9feB2B8a9d2E37156a574776A961124D" + } + ] + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o" + }, + { + "type": "hexstring", + "value": "0x974f" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2632340480" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0xd827" + }, + { + "type": "string", + "value": "Moo é🚀oM M ooo🚀éoooéMMMoMoé oéoo🚀o 🚀" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0xcaA3251d916a0f8677c7997133E2a0c6e6D24e73" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MéM é" + }, + { + "type": "hexstring", + "value": "0xf527" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "8870127" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x22aa" + }, + { + "type": "string", + "value": "Moo é🚀 éooMé🚀oMo oéoooMo o🚀 Mo🚀oo" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x08E1Ccf9494E2f2995e65fD03F4435C96DF32B05" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oééM🚀Moé o🚀 🚀oéoéoo🚀o🚀é ééM🚀MM oM🚀 MMMoooéoo" + }, + { + "type": "hexstring", + "value": "0x61fe" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3308472352" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0xac2a" + }, + { + "type": "string", + "value": "Moo é🚀 o🚀ooooMMooé🚀oM🚀o🚀 o🚀🚀Mooé🚀🚀 o o" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x8b8EB017d542ACe3fA11f3329a3508cdca5c0c0b" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀" + }, + { + "type": "hexstring", + "value": "0xecfa" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1255130709" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x5ab3" + }, + { + "type": "string", + "value": "Moo é🚀🚀é🚀oM 🚀oé🚀o 🚀ooMoo 🚀éM 🚀 " + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x2Dfd4D17bfE574f45828acE6D919A8e1F0Ae48e6" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀oéooMé" + }, + { + "type": "hexstring", + "value": "0x6dce" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "331747208" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x5225" + }, + { + "type": "string", + "value": "Moo é🚀🚀 oM🚀🚀oéM🚀 éMé o M oéo🚀MMoM🚀o🚀o Mo 🚀" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x7A51df6b8783FaF41CAe7F2Bc3e9Cc527275831F" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éooé oM🚀🚀🚀o éoo 🚀🚀o 🚀oo🚀🚀" + }, + { + "type": "hexstring", + "value": "0x6719" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1565095980" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x9a59" + }, + { + "type": "string", + "value": "Moo é🚀o🚀M🚀MéoM🚀o éo🚀o ééé" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x70713845Aa0e0B376762fac0615b2f5c0A53660A" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M" + }, + { + "type": "hexstring", + "value": "0x0da2" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2374059176" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x1fd5" + }, + { + "type": "string", + "value": "Moo é🚀ooMoé🚀🚀🚀o🚀 é🚀Mé Moo o oM🚀🚀MéooMo oéé🚀🚀 é🚀" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0x865CBdD0b922d9dC232BFc45A259117CA1e37ca1" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀 " + }, + { + "type": "hexstring", + "value": "0xc084" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3977201122" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x5e19" + }, + { + "type": "string", + "value": "Moo é🚀oMo éo 🚀 oMéé o oMMoéMoo ééMoooéo" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "address", + "value": "0x7EF9634CE309dC670cf64e79D1330e1906fDC807" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc48413c2682ffae9c5f3177dbbf96bdc608df1b25b" + }, + { + "type": "hexstring", + "value": "0xd54f17f43b0f79d669affeeeee352e067b548f5ea1" + }, + { + "type": "hexstring", + "value": "0xaddf381c7bce57bd3ea070e22611ceb5be0251a5c8" + }, + { + "type": "hexstring", + "value": "0x5d5512b68391dcb24aa1074f11e6c291e78651e0c7" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xb17ac19b" + }, + { + "type": "string", + "value": "Moo é🚀🚀o oé🚀ooMo🚀é🚀🚀o🚀ooéé ooéoo " + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀M🚀🚀o🚀éo o M🚀MéooMoo🚀 éMMMMo🚀é🚀 ééoé 🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéo o🚀ooééMM 🚀o🚀MMé🚀🚀éMM🚀🚀🚀oéMooéo" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061180c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906111a8565b60405180910390f35b610056610f1f565b61005e610f1f565b6e16bb732e9f42464ca26c170e00e0b18152610078610f4f565b732c04bf96b436c20513eef153409fa89714a440988152604080516001808252818301909252600091816020015b6100ae610f83565b8152602001906001900390816100a65790505090506100cb610f83565b60408051600380825260808201909252600091816020015b6100eb610faa565b8152602001906001900390816100e3579050509050610108610faa565b60408051808201909152600a8152689adede418753e13f3560b71b602080830191909152908252610def60f21b90820152610141610fd7565b63136b28448152610150611012565b60018082526000602080840182905260408085018390526060808601859052868301959095526170bd60f11b8682015280518082018252601081526f4d6f6f20c3a9f09f9a806f20c3a9c3a960801b928101929092528585019190915260808501929092529084019290925273cc35f88eb8efe1867f72e69f7c57532d17052d45908301528251829184916101e7576101e76113f8565b6020026020010181905250506101fb610faa565b60006040518060600160405280602781526020016114d16027913982525061722f60f01b602082015261022c610fd7565b63b8220980815261023b611012565b60008082526020808301829052604080840183905260608085019390935284820193909352614d8160f01b848401528251808401845260128152714d6f6f20c3a9f09f9a80206f20f09f9a806f60701b9181019190915283820152600160808401819052918401929092527375f4cc7fac6ebb3016776df0cfec941f72da24209183019190915282518291849181106102d6576102d66113f8565b6020026020010181905250506102ea610faa565b600060405180608001604052806043815260200161165a60439139825250615b6760f01b602082015261031b610fd7565b63f2135f82815261032a611012565b6001808252602080830182905260408084018390526060808501939093528482019390935261207760f01b8484015282518084018452600b81526a026b7b79061d4f84fcd40160ad1b9181019190915283820152600060808401529083019190915273e078797a9feb2b8a9d2e37156a574776a961124d9082015281518190839060029081106103bc576103bc6113f8565b60209081029190910181019190915291835250604080516000808252928101909152816103ff565b6103ec610faa565b8152602001906001900390816103e45790505b5060208301525060408051600480825260a08201909252600091816020015b610426610faa565b81526020019060019003908161041e579050509050610443610faa565b60408051808201909152600b81526a4d6f6f20c3a9f09f9a806f60a81b60208083019190915290825261974f60f01b9082015261047e610fd7565b639ce65400815261048d611012565b60018082526020808301829052604080840192909252600060608085018290528583019490945261d82760f01b85840152825193840190925260368084529192919061144d908301396060808401919091526001608084015260408401929092525073caa3251d916a0f8677c7997133e2a0c6e6d24e739082015281518190839060009061051d5761051d6113f8565b602002602001018190525050610531610faa565b6040805180820190915260118152704d6f6f20c3a9f09f9a804dc3a94d20c3a960781b60208083019190915290825261f52760f01b90820152610572610fd7565b628758ef8152610580611012565b60008082526020808301829052604080840183905260016060808601919091528583019490945261115560f11b858201528051938401905260328084529192919061169d90830139606080840191909152600060808401526040840192909252507308e1ccf9494e2f2995e65fd03f4435c96df32b05908201528151819083906001908110610611576106116113f8565b602002602001018190525050610625610faa565b60006040518060800160405280605681526020016115ac605691398252506130ff60f11b6020820152610656610fd7565b63c53348208152610665611012565b600080825260208083018290526040808401839052606084018390528482019390935261561560f11b848401528251608081019093526044808452919291906117479083013960608084019190915260006080840152604084019290925250738b8eb017d542ace3fa11f3329a3508cdca5c0c0b9082015281518190839060029081106106f4576106f46113f8565b602002602001018190525050610708610faa565b60408051808201909152600e81526c9adede418753e13f3501e13f3560971b60208083019190915290825261767d60f11b90820152610745610fd7565b634acfc6558152610754611012565b600080825260208083018290526001604080850191909152606080850184905285830194909452615ab360f01b8582015280519384019052603e8084529192919061140f9083013960608084019190915260006080840152604084019290925250732dfd4d17bfe574f45828ace6d919a8e1f0ae48e69082015281518190839060039081106107e5576107e56113f8565b6020908102919091010152506040808301919091528051600480825260a08201909252600091816020015b610818610faa565b815260200190600190039081610810579050509050610835610faa565b60408051808201909152601781527f4d6f6f20c3a9f09f9a806ff09f9a806fc3a96f6f4dc3a90000000000000000006020808301919091529082526136e760f11b90820152610882610fd7565b6313c60f888152610891611012565b600180825260208083018290526040808401929092526000606084018190528482019390935261522560f01b84830152815160808101909252604a808352906116cf908301396060808401919091526000608084018190526040850193909352737a51df6b8783faf41cae7f2bc3e9cc527275831f908401525082518291849161091d5761091d6113f8565b602002602001018190525050610931610faa565b60006040518060600160405280603f81526020016114f8603f913982525061671960f01b6020820152610962610fd7565b635d49782c8152610971611012565b600080825260208083018290526001604080850191909152606080850184905285830194909452619a5960f01b8582015280519384019052602e8084529192919061171990830139606080840191909152600060808401526040840192909252507370713845aa0e0b376762fac0615b2f5c0a53660a908201528151819083906001908110610a0257610a026113f8565b602002602001018190525050610a16610faa565b60408051808201909152600b81526a4d6f6f20c3a9f09f9a804d60a81b6020808301919091529082526106d160f11b90820152610a51610fd7565b638d8144a88152610a60611012565b6001808252602080830191909152600060408084018290526060840182905284830193909352611fd560f01b848401528251608081019093526058808452909291611602908301396060808401919091526001608084015260408401929092525073865cbdd0b922d9dc232bfc45a259117ca1e37ca1908201528151819083906002908110610af157610af16113f8565b602002602001018190525050610b05610faa565b60408051808201909152600f81526e026b7b79061d4f84fcd40784fcd401608d1b60208083019190915290825261302160f21b90820152610b44610fd7565b63ed0f45e28152610b53611012565b600180825260208083018290526000604080850182905260608086019490945285830194909452615e1960f01b8585015283519283019093526039808352906115379083013960608084019190915260006080840152604084019290925250737ef9634ce309dc670cf64e79d1330e1906fdc807908201528151819083906003908110610be257610be26113f8565b6020908102919091010152506060820152815181908390600090610c0857610c086113f8565b60200260200101819052505080826020018190525050610c26611030565b610c2e611012565b74c48413c2682ffae9c5f3177dbbf96bdc608df1b25b60581b815274d54f17f43b0f79d669affeeeee352e067b548f5ea160581b6020808301919091527415bbe7038f79caf7a7d40e1c44c239d6b7c04a34b9605b1b604080840191909152745d5512b68391dcb24aa1074f11e6c291e78651e0c760581b6060808501919091529284528481019390935263b17ac19b60e01b848301528251918201909252603c80825260009261157090830139608083015250602082015260006003604051908082528060200260200182016040528015610d1e57816020015b6060815260200190600190039081610d095790505b50604080516000808252602082019092529192509081610d4e565b6060815260200190600190039081610d395790505b5090508082600081518110610d6557610d656113f8565b60209081029190910101525060408051600280825260608201909252600091816020015b6060815260200190600190039081610d8957905050905060006040518060800160405280604e8152602001611483604e913990508082600081518110610dd157610dd16113f8565b60200260200101819052505060006040518060400160405280600a8152602001689adede418753e13f3560b71b81525090508082600181518110610e1757610e176113f8565b6020026020010181905250508082600181518110610e3757610e376113f8565b60209081029190910101525060408051600280825260608201909252600091816020015b6060815260200190600190039081610e5b57905050905060006040518060800160405280604c815260200161178b604c913990508082600081518110610ea357610ea36113f8565b60200260200101819052505060006040518060400160405280600a8152602001689adede418753e13f3560b71b81525090508082600181518110610ee957610ee96113f8565b6020026020010181905250508082600281518110610f0957610f096113f8565b6020908102919091010152506040820152919050565b604051806060016040528060006001600160781b03168152602001610f42610f4f565b8152602001606081525090565b6040805160a0810182526000815260606020820152908101610f6f611030565b815260006020820152606060409091015290565b60405180608001604052806004905b6060815260200190600190039081610f925790505090565b604080516080810182526060815260006020820152908101610fca610fd7565b8152600060209091015290565b6040518060a00160405280600063ffffffff168152602001610ff7611012565b81526000602082018190526060604083018190529091015290565b60405180608001604052806004906020820280368337509192915050565b60405180602001604052806001905b611047611012565b81526020019060019003908161103f5790505090565b6000815180845260005b8181101561108357602081850181015186830182015201611067565b81811115611095576000602083870101525b50601f01601f19169290920160200192915050565b806000805b60018082106110be5750611109565b835186845b60048110156110ef5782516affffffffffffffffffffff191682526020928301929091019083016110c3565b5050506080959095019450602092909201916001016110af565b5050505050565b600081518084526020808501808196506005915083821b81018387016000805b87811015611199578484038b5282518051808652908801908886019080891b87018a01855b8281101561118357601f1989830301845261117182865161105d565b948c0194938c01939150600101611155565b509d8a019d965050509287019250600101611130565b50919998505050505050505050565b602080825282516001600160781b031682820152828101516060604084015280516001600160a01b031660808401528082015161010060a08501528051610180850181905260009391909101906101a08086019190600582901b870101855b828110156113835787820361019f190184528451826080810160005b600481101561136b578582038352835180518084526020918201918085019190600582901b86010160005b8281101561134e57601f198783030184528451805160808452611274608085018261105d565b905061ffff60f01b60208301511660208501526040820151848203604086015263ffffffff815116825260208101516020830160005b60048110156112cb57825115158252602092830192909101906001016112aa565b50505060408101516001600160f01b0319811660a084015250606081015161010060c08401526112ff61010084018261105d565b90506080820151915061131660e084018315159052565b6060840151935061133260608701856001600160a01b03169052565b602098890198979097019694505050600191909101905061124e565b506020978801979690960195945050506001919091019050611223565b50602097880197969096019593505050600101611207565b506040850151935061139860c08801856110aa565b60608501516001600160e01b03198116610140890152608090950151878203607f19016101608901529493506113ce818661105d565b9450505050506040840151601f198483030160608501526113ef8282611110565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a80c3a9f09f9a806f4d20f09f9a806fc3a9f09f9a806f202020f09f9a806f6f4d6f6f2020f09f9a80c3a94d20f09f9a80204d6f6f20c3a9f09f9a806f4d204d206f6f6ff09f9a80c3a96f6f6fc3a94d4d4d6f4d6fc3a920206fc3a96f6ff09f9a806f20f09f9a804d6f6f20c3a9f09f9a804df09f9a80f09f9a806ff09f9a80c3a96f206f204df09f9a804dc3a96f6f4d6f6ff09f9a8020c3a94d4d4d4d6ff09f9a80c3a9f09f9a8020c3a9c3a96fc3a920f09f9a804d6f6f20c3a9f09f9a806f4d20f09f9a80204dc3a96fc3a94dc3a96f6f4d6f20c3a96f6f6fc3a94d6f6f20c3a9f09f9a80c3a96f6fc3a920206f4df09f9a80f09f9a80f09f9a806f20c3a96f6f20f09f9a80f09f9a806f20f09f9a806f6ff09f9a80f09f9a804d6f6f20c3a9f09f9a806f4d6f2020c3a96f2020f09f9a80206f4dc3a9c3a920206f206f4d4d6fc3a94d6f6f2020c3a9c3a94d6f6f6fc3a96f4d6f6f20c3a9f09f9a80f09f9a806f206fc3a9f09f9a806f6f4d6ff09f9a80c3a9f09f9a80f09f9a806ff09f9a806f6fc3a9c3a9206f6fc3a96f6f204d6f6f20c3a9f09f9a806fc3a9c3a94df09f9a804d6fc3a9206ff09f9a8020f09f9a806fc3a96fc3a96f6ff09f9a806ff09f9a80c3a92020c3a9c3a94df09f9a804d4d206f4df09f9a8020204d4d4d6f6f6fc3a96f6f4d6f6f20c3a9f09f9a806f6f4d6fc3a9f09f9a80f09f9a80f09f9a806ff09f9a8020c3a9f09f9a804dc3a9204d6f6f206f206f4df09f9a80f09f9a804dc3a96f6f4d6f206fc3a9c3a9f09f9a80f09f9a8020c3a9f09f9a804d6f6f20c3a9f09f9a806ff09f9a804df09f9a806f4d6fc3a96f206f206f6fc3a9c3a9f09f9a806fc3a920c3a96f4d6f6f6f4dc3a96f6ff09f9a80c3a9206f6f6f206f4d6f6f20c3a9f09f9a802020c3a96f6f4dc3a9f09f9a806f4d6f206fc3a96f6f6f4d6f206ff09f9a80204d6ff09f9a806f6f4d6f6f20c3a9f09f9a80f09f9a80206f4df09f9a80f09f9a806fc3a94df09f9a8020c3a94dc3a9206f204d206fc3a96ff09f9a804d4d6f4df09f9a806ff09f9a806f204d6f20f09f9a804d6f6f20c3a9f09f9a806ff09f9a804df09f9a804dc3a96f4df09f9a806f20c3a96ff09f9a806f20c3a9c3a9c3a94d6f6f20c3a9f09f9a80206ff09f9a806f6f6f6f4d4d6f6fc3a9f09f9a806f4df09f9a806ff09f9a80206ff09f9a80f09f9a804d6f6fc3a9f09f9a80f09f9a80206f206f4d6f6f20c3a9f09f9a806fc3a96f206ff09f9a806f6fc3a9c3a94d4d2020f09f9a806ff09f9a804d4dc3a9f09f9a80f09f9a80c3a94d4df09f9a80f09f9a80f09f9a806fc3a94d6f6fc3a96fa264697066735822122004e1b9560980eeaf0494fd2cfe252cace67541023f04937b37d795b8647b909564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b73ee2ba {\n uint32 s_0;\n bool[4] s_1;\n bytes2 s_2;\n string s_3;\n bool s_4;\n }\n\n struct S_fc8d639a {\n string s_0;\n bytes2 s_1;\n S_b73ee2ba s_2;\n address s_3;\n }\n\n struct S_5597625f {\n address s_0;\n S_fc8d639a[][4][] s_1;\n bytes21[4][1] s_2;\n bytes4 s_3;\n string s_4;\n }\n\n struct S_bef65855 {\n uint120 s_0;\n S_5597625f s_1;\n string[][] s_2;\n }\n\n function test () public pure returns (S_bef65855 memory) {\n S_bef65855 memory r;\n {\n uint120 r_0 = 118032467151180840678421008543178929;\n r.s_0 = r_0;\n }\n {\n S_5597625f memory r_1;\n {\n address r_1_0 = 0x2c04BF96b436c20513eef153409Fa89714a44098;\n r_1.s_0 = r_1_0;\n }\n {\n S_fc8d639a[][4][] memory r_1_1 = new S_fc8d639a[][4][](1);\n {\n S_fc8d639a[][4] memory r_1_1_0;\n {\n S_fc8d639a[] memory r_1_1_0_0 = new S_fc8d639a[](3);\n {\n S_fc8d639a memory r_1_1_0_0_0;\n {\n string memory r_1_1_0_0_0_0 = unicode\"Moo é🚀\";\n r_1_1_0_0_0.s_0 = r_1_1_0_0_0_0;\n }\n {\n bytes2 r_1_1_0_0_0_1 = bytes2(0x37bc);\n r_1_1_0_0_0.s_1 = r_1_1_0_0_0_1;\n }\n {\n S_b73ee2ba memory r_1_1_0_0_0_2;\n {\n uint32 r_1_1_0_0_0_2_0 = 325789764;\n r_1_1_0_0_0_2.s_0 = r_1_1_0_0_0_2_0;\n }\n {\n bool[4] memory r_1_1_0_0_0_2_1;\n {\n bool r_1_1_0_0_0_2_1_0 = true;\n r_1_1_0_0_0_2_1[0] = r_1_1_0_0_0_2_1_0;\n }\n {\n bool r_1_1_0_0_0_2_1_1 = false;\n r_1_1_0_0_0_2_1[1] = r_1_1_0_0_0_2_1_1;\n }\n {\n bool r_1_1_0_0_0_2_1_2 = false;\n r_1_1_0_0_0_2_1[2] = r_1_1_0_0_0_2_1_2;\n }\n {\n bool r_1_1_0_0_0_2_1_3 = true;\n r_1_1_0_0_0_2_1[3] = r_1_1_0_0_0_2_1_3;\n }\n r_1_1_0_0_0_2.s_1 = r_1_1_0_0_0_2_1;\n }\n {\n bytes2 r_1_1_0_0_0_2_2 = bytes2(0xe17a);\n r_1_1_0_0_0_2.s_2 = r_1_1_0_0_0_2_2;\n }\n {\n string memory r_1_1_0_0_0_2_3 = unicode\"Moo é🚀o éé\";\n r_1_1_0_0_0_2.s_3 = r_1_1_0_0_0_2_3;\n }\n {\n bool r_1_1_0_0_0_2_4 = true;\n r_1_1_0_0_0_2.s_4 = r_1_1_0_0_0_2_4;\n }\n r_1_1_0_0_0.s_2 = r_1_1_0_0_0_2;\n }\n {\n address r_1_1_0_0_0_3 = 0xCC35f88Eb8eFe1867f72e69F7C57532d17052D45;\n r_1_1_0_0_0.s_3 = r_1_1_0_0_0_3;\n }\n r_1_1_0_0[0] = r_1_1_0_0_0;\n }\n {\n S_fc8d639a memory r_1_1_0_0_1;\n {\n string memory r_1_1_0_0_1_0 = unicode\"Moo é🚀oM 🚀 MéoéMéooMo éoooé\";\n r_1_1_0_0_1.s_0 = r_1_1_0_0_1_0;\n }\n {\n bytes2 r_1_1_0_0_1_1 = bytes2(0x722f);\n r_1_1_0_0_1.s_1 = r_1_1_0_0_1_1;\n }\n {\n S_b73ee2ba memory r_1_1_0_0_1_2;\n {\n uint32 r_1_1_0_0_1_2_0 = 3089238400;\n r_1_1_0_0_1_2.s_0 = r_1_1_0_0_1_2_0;\n }\n {\n bool[4] memory r_1_1_0_0_1_2_1;\n {\n bool r_1_1_0_0_1_2_1_0 = false;\n r_1_1_0_0_1_2_1[0] = r_1_1_0_0_1_2_1_0;\n }\n {\n bool r_1_1_0_0_1_2_1_1 = false;\n r_1_1_0_0_1_2_1[1] = r_1_1_0_0_1_2_1_1;\n }\n {\n bool r_1_1_0_0_1_2_1_2 = false;\n r_1_1_0_0_1_2_1[2] = r_1_1_0_0_1_2_1_2;\n }\n {\n bool r_1_1_0_0_1_2_1_3 = false;\n r_1_1_0_0_1_2_1[3] = r_1_1_0_0_1_2_1_3;\n }\n r_1_1_0_0_1_2.s_1 = r_1_1_0_0_1_2_1;\n }\n {\n bytes2 r_1_1_0_0_1_2_2 = bytes2(0x4d81);\n r_1_1_0_0_1_2.s_2 = r_1_1_0_0_1_2_2;\n }\n {\n string memory r_1_1_0_0_1_2_3 = unicode\"Moo é🚀 o 🚀o\";\n r_1_1_0_0_1_2.s_3 = r_1_1_0_0_1_2_3;\n }\n {\n bool r_1_1_0_0_1_2_4 = true;\n r_1_1_0_0_1_2.s_4 = r_1_1_0_0_1_2_4;\n }\n r_1_1_0_0_1.s_2 = r_1_1_0_0_1_2;\n }\n {\n address r_1_1_0_0_1_3 = 0x75F4cc7FAc6eBB3016776DF0Cfec941f72dA2420;\n r_1_1_0_0_1.s_3 = r_1_1_0_0_1_3;\n }\n r_1_1_0_0[1] = r_1_1_0_0_1;\n }\n {\n S_fc8d639a memory r_1_1_0_0_2;\n {\n string memory r_1_1_0_0_2_0 = unicode\"Moo é🚀o🚀M🚀oMoéo o ooéé🚀oé éoMoooMéoo🚀é ooo o\";\n r_1_1_0_0_2.s_0 = r_1_1_0_0_2_0;\n }\n {\n bytes2 r_1_1_0_0_2_1 = bytes2(0x5b67);\n r_1_1_0_0_2.s_1 = r_1_1_0_0_2_1;\n }\n {\n S_b73ee2ba memory r_1_1_0_0_2_2;\n {\n uint32 r_1_1_0_0_2_2_0 = 4061355906;\n r_1_1_0_0_2_2.s_0 = r_1_1_0_0_2_2_0;\n }\n {\n bool[4] memory r_1_1_0_0_2_2_1;\n {\n bool r_1_1_0_0_2_2_1_0 = true;\n r_1_1_0_0_2_2_1[0] = r_1_1_0_0_2_2_1_0;\n }\n {\n bool r_1_1_0_0_2_2_1_1 = true;\n r_1_1_0_0_2_2_1[1] = r_1_1_0_0_2_2_1_1;\n }\n {\n bool r_1_1_0_0_2_2_1_2 = true;\n r_1_1_0_0_2_2_1[2] = r_1_1_0_0_2_2_1_2;\n }\n {\n bool r_1_1_0_0_2_2_1_3 = true;\n r_1_1_0_0_2_2_1[3] = r_1_1_0_0_2_2_1_3;\n }\n r_1_1_0_0_2_2.s_1 = r_1_1_0_0_2_2_1;\n }\n {\n bytes2 r_1_1_0_0_2_2_2 = bytes2(0x2077);\n r_1_1_0_0_2_2.s_2 = r_1_1_0_0_2_2_2;\n }\n {\n string memory r_1_1_0_0_2_2_3 = unicode\"Moo é🚀 \";\n r_1_1_0_0_2_2.s_3 = r_1_1_0_0_2_2_3;\n }\n {\n bool r_1_1_0_0_2_2_4 = false;\n r_1_1_0_0_2_2.s_4 = r_1_1_0_0_2_2_4;\n }\n r_1_1_0_0_2.s_2 = r_1_1_0_0_2_2;\n }\n {\n address r_1_1_0_0_2_3 = 0xe078797A9feB2B8a9d2E37156a574776A961124D;\n r_1_1_0_0_2.s_3 = r_1_1_0_0_2_3;\n }\n r_1_1_0_0[2] = r_1_1_0_0_2;\n }\n r_1_1_0[0] = r_1_1_0_0;\n }\n {\n S_fc8d639a[] memory r_1_1_0_1 = new S_fc8d639a[](0);\n r_1_1_0[1] = r_1_1_0_1;\n }\n {\n S_fc8d639a[] memory r_1_1_0_2 = new S_fc8d639a[](4);\n {\n S_fc8d639a memory r_1_1_0_2_0;\n {\n string memory r_1_1_0_2_0_0 = unicode\"Moo é🚀o\";\n r_1_1_0_2_0.s_0 = r_1_1_0_2_0_0;\n }\n {\n bytes2 r_1_1_0_2_0_1 = bytes2(0x974f);\n r_1_1_0_2_0.s_1 = r_1_1_0_2_0_1;\n }\n {\n S_b73ee2ba memory r_1_1_0_2_0_2;\n {\n uint32 r_1_1_0_2_0_2_0 = 2632340480;\n r_1_1_0_2_0_2.s_0 = r_1_1_0_2_0_2_0;\n }\n {\n bool[4] memory r_1_1_0_2_0_2_1;\n {\n bool r_1_1_0_2_0_2_1_0 = true;\n r_1_1_0_2_0_2_1[0] = r_1_1_0_2_0_2_1_0;\n }\n {\n bool r_1_1_0_2_0_2_1_1 = true;\n r_1_1_0_2_0_2_1[1] = r_1_1_0_2_0_2_1_1;\n }\n {\n bool r_1_1_0_2_0_2_1_2 = true;\n r_1_1_0_2_0_2_1[2] = r_1_1_0_2_0_2_1_2;\n }\n {\n bool r_1_1_0_2_0_2_1_3 = false;\n r_1_1_0_2_0_2_1[3] = r_1_1_0_2_0_2_1_3;\n }\n r_1_1_0_2_0_2.s_1 = r_1_1_0_2_0_2_1;\n }\n {\n bytes2 r_1_1_0_2_0_2_2 = bytes2(0xd827);\n r_1_1_0_2_0_2.s_2 = r_1_1_0_2_0_2_2;\n }\n {\n string memory r_1_1_0_2_0_2_3 = unicode\"Moo é🚀oM M ooo🚀éoooéMMMoMoé oéoo🚀o 🚀\";\n r_1_1_0_2_0_2.s_3 = r_1_1_0_2_0_2_3;\n }\n {\n bool r_1_1_0_2_0_2_4 = true;\n r_1_1_0_2_0_2.s_4 = r_1_1_0_2_0_2_4;\n }\n r_1_1_0_2_0.s_2 = r_1_1_0_2_0_2;\n }\n {\n address r_1_1_0_2_0_3 = 0xcaA3251d916a0f8677c7997133E2a0c6e6D24e73;\n r_1_1_0_2_0.s_3 = r_1_1_0_2_0_3;\n }\n r_1_1_0_2[0] = r_1_1_0_2_0;\n }\n {\n S_fc8d639a memory r_1_1_0_2_1;\n {\n string memory r_1_1_0_2_1_0 = unicode\"Moo é🚀MéM é\";\n r_1_1_0_2_1.s_0 = r_1_1_0_2_1_0;\n }\n {\n bytes2 r_1_1_0_2_1_1 = bytes2(0xf527);\n r_1_1_0_2_1.s_1 = r_1_1_0_2_1_1;\n }\n {\n S_b73ee2ba memory r_1_1_0_2_1_2;\n {\n uint32 r_1_1_0_2_1_2_0 = 8870127;\n r_1_1_0_2_1_2.s_0 = r_1_1_0_2_1_2_0;\n }\n {\n bool[4] memory r_1_1_0_2_1_2_1;\n {\n bool r_1_1_0_2_1_2_1_0 = false;\n r_1_1_0_2_1_2_1[0] = r_1_1_0_2_1_2_1_0;\n }\n {\n bool r_1_1_0_2_1_2_1_1 = false;\n r_1_1_0_2_1_2_1[1] = r_1_1_0_2_1_2_1_1;\n }\n {\n bool r_1_1_0_2_1_2_1_2 = false;\n r_1_1_0_2_1_2_1[2] = r_1_1_0_2_1_2_1_2;\n }\n {\n bool r_1_1_0_2_1_2_1_3 = true;\n r_1_1_0_2_1_2_1[3] = r_1_1_0_2_1_2_1_3;\n }\n r_1_1_0_2_1_2.s_1 = r_1_1_0_2_1_2_1;\n }\n {\n bytes2 r_1_1_0_2_1_2_2 = bytes2(0x22aa);\n r_1_1_0_2_1_2.s_2 = r_1_1_0_2_1_2_2;\n }\n {\n string memory r_1_1_0_2_1_2_3 = unicode\"Moo é🚀 éooMé🚀oMo oéoooMo o🚀 Mo🚀oo\";\n r_1_1_0_2_1_2.s_3 = r_1_1_0_2_1_2_3;\n }\n {\n bool r_1_1_0_2_1_2_4 = false;\n r_1_1_0_2_1_2.s_4 = r_1_1_0_2_1_2_4;\n }\n r_1_1_0_2_1.s_2 = r_1_1_0_2_1_2;\n }\n {\n address r_1_1_0_2_1_3 = 0x08E1Ccf9494E2f2995e65fD03F4435C96DF32B05;\n r_1_1_0_2_1.s_3 = r_1_1_0_2_1_3;\n }\n r_1_1_0_2[1] = r_1_1_0_2_1;\n }\n {\n S_fc8d639a memory r_1_1_0_2_2;\n {\n string memory r_1_1_0_2_2_0 = unicode\"Moo é🚀oééM🚀Moé o🚀 🚀oéoéoo🚀o🚀é ééM🚀MM oM🚀 MMMoooéoo\";\n r_1_1_0_2_2.s_0 = r_1_1_0_2_2_0;\n }\n {\n bytes2 r_1_1_0_2_2_1 = bytes2(0x61fe);\n r_1_1_0_2_2.s_1 = r_1_1_0_2_2_1;\n }\n {\n S_b73ee2ba memory r_1_1_0_2_2_2;\n {\n uint32 r_1_1_0_2_2_2_0 = 3308472352;\n r_1_1_0_2_2_2.s_0 = r_1_1_0_2_2_2_0;\n }\n {\n bool[4] memory r_1_1_0_2_2_2_1;\n {\n bool r_1_1_0_2_2_2_1_0 = false;\n r_1_1_0_2_2_2_1[0] = r_1_1_0_2_2_2_1_0;\n }\n {\n bool r_1_1_0_2_2_2_1_1 = false;\n r_1_1_0_2_2_2_1[1] = r_1_1_0_2_2_2_1_1;\n }\n {\n bool r_1_1_0_2_2_2_1_2 = false;\n r_1_1_0_2_2_2_1[2] = r_1_1_0_2_2_2_1_2;\n }\n {\n bool r_1_1_0_2_2_2_1_3 = false;\n r_1_1_0_2_2_2_1[3] = r_1_1_0_2_2_2_1_3;\n }\n r_1_1_0_2_2_2.s_1 = r_1_1_0_2_2_2_1;\n }\n {\n bytes2 r_1_1_0_2_2_2_2 = bytes2(0xac2a);\n r_1_1_0_2_2_2.s_2 = r_1_1_0_2_2_2_2;\n }\n {\n string memory r_1_1_0_2_2_2_3 = unicode\"Moo é🚀 o🚀ooooMMooé🚀oM🚀o🚀 o🚀🚀Mooé🚀🚀 o o\";\n r_1_1_0_2_2_2.s_3 = r_1_1_0_2_2_2_3;\n }\n {\n bool r_1_1_0_2_2_2_4 = false;\n r_1_1_0_2_2_2.s_4 = r_1_1_0_2_2_2_4;\n }\n r_1_1_0_2_2.s_2 = r_1_1_0_2_2_2;\n }\n {\n address r_1_1_0_2_2_3 = 0x8b8EB017d542ACe3fA11f3329a3508cdca5c0c0b;\n r_1_1_0_2_2.s_3 = r_1_1_0_2_2_3;\n }\n r_1_1_0_2[2] = r_1_1_0_2_2;\n }\n {\n S_fc8d639a memory r_1_1_0_2_3;\n {\n string memory r_1_1_0_2_3_0 = unicode\"Moo é🚀🚀\";\n r_1_1_0_2_3.s_0 = r_1_1_0_2_3_0;\n }\n {\n bytes2 r_1_1_0_2_3_1 = bytes2(0xecfa);\n r_1_1_0_2_3.s_1 = r_1_1_0_2_3_1;\n }\n {\n S_b73ee2ba memory r_1_1_0_2_3_2;\n {\n uint32 r_1_1_0_2_3_2_0 = 1255130709;\n r_1_1_0_2_3_2.s_0 = r_1_1_0_2_3_2_0;\n }\n {\n bool[4] memory r_1_1_0_2_3_2_1;\n {\n bool r_1_1_0_2_3_2_1_0 = false;\n r_1_1_0_2_3_2_1[0] = r_1_1_0_2_3_2_1_0;\n }\n {\n bool r_1_1_0_2_3_2_1_1 = false;\n r_1_1_0_2_3_2_1[1] = r_1_1_0_2_3_2_1_1;\n }\n {\n bool r_1_1_0_2_3_2_1_2 = true;\n r_1_1_0_2_3_2_1[2] = r_1_1_0_2_3_2_1_2;\n }\n {\n bool r_1_1_0_2_3_2_1_3 = false;\n r_1_1_0_2_3_2_1[3] = r_1_1_0_2_3_2_1_3;\n }\n r_1_1_0_2_3_2.s_1 = r_1_1_0_2_3_2_1;\n }\n {\n bytes2 r_1_1_0_2_3_2_2 = bytes2(0x5ab3);\n r_1_1_0_2_3_2.s_2 = r_1_1_0_2_3_2_2;\n }\n {\n string memory r_1_1_0_2_3_2_3 = unicode\"Moo é🚀🚀é🚀oM 🚀oé🚀o 🚀ooMoo 🚀éM 🚀 \";\n r_1_1_0_2_3_2.s_3 = r_1_1_0_2_3_2_3;\n }\n {\n bool r_1_1_0_2_3_2_4 = false;\n r_1_1_0_2_3_2.s_4 = r_1_1_0_2_3_2_4;\n }\n r_1_1_0_2_3.s_2 = r_1_1_0_2_3_2;\n }\n {\n address r_1_1_0_2_3_3 = 0x2Dfd4D17bfE574f45828acE6D919A8e1F0Ae48e6;\n r_1_1_0_2_3.s_3 = r_1_1_0_2_3_3;\n }\n r_1_1_0_2[3] = r_1_1_0_2_3;\n }\n r_1_1_0[2] = r_1_1_0_2;\n }\n {\n S_fc8d639a[] memory r_1_1_0_3 = new S_fc8d639a[](4);\n {\n S_fc8d639a memory r_1_1_0_3_0;\n {\n string memory r_1_1_0_3_0_0 = unicode\"Moo é🚀o🚀oéooMé\";\n r_1_1_0_3_0.s_0 = r_1_1_0_3_0_0;\n }\n {\n bytes2 r_1_1_0_3_0_1 = bytes2(0x6dce);\n r_1_1_0_3_0.s_1 = r_1_1_0_3_0_1;\n }\n {\n S_b73ee2ba memory r_1_1_0_3_0_2;\n {\n uint32 r_1_1_0_3_0_2_0 = 331747208;\n r_1_1_0_3_0_2.s_0 = r_1_1_0_3_0_2_0;\n }\n {\n bool[4] memory r_1_1_0_3_0_2_1;\n {\n bool r_1_1_0_3_0_2_1_0 = true;\n r_1_1_0_3_0_2_1[0] = r_1_1_0_3_0_2_1_0;\n }\n {\n bool r_1_1_0_3_0_2_1_1 = true;\n r_1_1_0_3_0_2_1[1] = r_1_1_0_3_0_2_1_1;\n }\n {\n bool r_1_1_0_3_0_2_1_2 = true;\n r_1_1_0_3_0_2_1[2] = r_1_1_0_3_0_2_1_2;\n }\n {\n bool r_1_1_0_3_0_2_1_3 = false;\n r_1_1_0_3_0_2_1[3] = r_1_1_0_3_0_2_1_3;\n }\n r_1_1_0_3_0_2.s_1 = r_1_1_0_3_0_2_1;\n }\n {\n bytes2 r_1_1_0_3_0_2_2 = bytes2(0x5225);\n r_1_1_0_3_0_2.s_2 = r_1_1_0_3_0_2_2;\n }\n {\n string memory r_1_1_0_3_0_2_3 = unicode\"Moo é🚀🚀 oM🚀🚀oéM🚀 éMé o M oéo🚀MMoM🚀o🚀o Mo 🚀\";\n r_1_1_0_3_0_2.s_3 = r_1_1_0_3_0_2_3;\n }\n {\n bool r_1_1_0_3_0_2_4 = false;\n r_1_1_0_3_0_2.s_4 = r_1_1_0_3_0_2_4;\n }\n r_1_1_0_3_0.s_2 = r_1_1_0_3_0_2;\n }\n {\n address r_1_1_0_3_0_3 = 0x7A51df6b8783FaF41CAe7F2Bc3e9Cc527275831F;\n r_1_1_0_3_0.s_3 = r_1_1_0_3_0_3;\n }\n r_1_1_0_3[0] = r_1_1_0_3_0;\n }\n {\n S_fc8d639a memory r_1_1_0_3_1;\n {\n string memory r_1_1_0_3_1_0 = unicode\"Moo é🚀éooé oM🚀🚀🚀o éoo 🚀🚀o 🚀oo🚀🚀\";\n r_1_1_0_3_1.s_0 = r_1_1_0_3_1_0;\n }\n {\n bytes2 r_1_1_0_3_1_1 = bytes2(0x6719);\n r_1_1_0_3_1.s_1 = r_1_1_0_3_1_1;\n }\n {\n S_b73ee2ba memory r_1_1_0_3_1_2;\n {\n uint32 r_1_1_0_3_1_2_0 = 1565095980;\n r_1_1_0_3_1_2.s_0 = r_1_1_0_3_1_2_0;\n }\n {\n bool[4] memory r_1_1_0_3_1_2_1;\n {\n bool r_1_1_0_3_1_2_1_0 = false;\n r_1_1_0_3_1_2_1[0] = r_1_1_0_3_1_2_1_0;\n }\n {\n bool r_1_1_0_3_1_2_1_1 = false;\n r_1_1_0_3_1_2_1[1] = r_1_1_0_3_1_2_1_1;\n }\n {\n bool r_1_1_0_3_1_2_1_2 = true;\n r_1_1_0_3_1_2_1[2] = r_1_1_0_3_1_2_1_2;\n }\n {\n bool r_1_1_0_3_1_2_1_3 = false;\n r_1_1_0_3_1_2_1[3] = r_1_1_0_3_1_2_1_3;\n }\n r_1_1_0_3_1_2.s_1 = r_1_1_0_3_1_2_1;\n }\n {\n bytes2 r_1_1_0_3_1_2_2 = bytes2(0x9a59);\n r_1_1_0_3_1_2.s_2 = r_1_1_0_3_1_2_2;\n }\n {\n string memory r_1_1_0_3_1_2_3 = unicode\"Moo é🚀o🚀M🚀MéoM🚀o éo🚀o ééé\";\n r_1_1_0_3_1_2.s_3 = r_1_1_0_3_1_2_3;\n }\n {\n bool r_1_1_0_3_1_2_4 = false;\n r_1_1_0_3_1_2.s_4 = r_1_1_0_3_1_2_4;\n }\n r_1_1_0_3_1.s_2 = r_1_1_0_3_1_2;\n }\n {\n address r_1_1_0_3_1_3 = 0x70713845Aa0e0B376762fac0615b2f5c0A53660A;\n r_1_1_0_3_1.s_3 = r_1_1_0_3_1_3;\n }\n r_1_1_0_3[1] = r_1_1_0_3_1;\n }\n {\n S_fc8d639a memory r_1_1_0_3_2;\n {\n string memory r_1_1_0_3_2_0 = unicode\"Moo é🚀M\";\n r_1_1_0_3_2.s_0 = r_1_1_0_3_2_0;\n }\n {\n bytes2 r_1_1_0_3_2_1 = bytes2(0x0da2);\n r_1_1_0_3_2.s_1 = r_1_1_0_3_2_1;\n }\n {\n S_b73ee2ba memory r_1_1_0_3_2_2;\n {\n uint32 r_1_1_0_3_2_2_0 = 2374059176;\n r_1_1_0_3_2_2.s_0 = r_1_1_0_3_2_2_0;\n }\n {\n bool[4] memory r_1_1_0_3_2_2_1;\n {\n bool r_1_1_0_3_2_2_1_0 = true;\n r_1_1_0_3_2_2_1[0] = r_1_1_0_3_2_2_1_0;\n }\n {\n bool r_1_1_0_3_2_2_1_1 = true;\n r_1_1_0_3_2_2_1[1] = r_1_1_0_3_2_2_1_1;\n }\n {\n bool r_1_1_0_3_2_2_1_2 = false;\n r_1_1_0_3_2_2_1[2] = r_1_1_0_3_2_2_1_2;\n }\n {\n bool r_1_1_0_3_2_2_1_3 = false;\n r_1_1_0_3_2_2_1[3] = r_1_1_0_3_2_2_1_3;\n }\n r_1_1_0_3_2_2.s_1 = r_1_1_0_3_2_2_1;\n }\n {\n bytes2 r_1_1_0_3_2_2_2 = bytes2(0x1fd5);\n r_1_1_0_3_2_2.s_2 = r_1_1_0_3_2_2_2;\n }\n {\n string memory r_1_1_0_3_2_2_3 = unicode\"Moo é🚀ooMoé🚀🚀🚀o🚀 é🚀Mé Moo o oM🚀🚀MéooMo oéé🚀🚀 é🚀\";\n r_1_1_0_3_2_2.s_3 = r_1_1_0_3_2_2_3;\n }\n {\n bool r_1_1_0_3_2_2_4 = true;\n r_1_1_0_3_2_2.s_4 = r_1_1_0_3_2_2_4;\n }\n r_1_1_0_3_2.s_2 = r_1_1_0_3_2_2;\n }\n {\n address r_1_1_0_3_2_3 = 0x865CBdD0b922d9dC232BFc45A259117CA1e37ca1;\n r_1_1_0_3_2.s_3 = r_1_1_0_3_2_3;\n }\n r_1_1_0_3[2] = r_1_1_0_3_2;\n }\n {\n S_fc8d639a memory r_1_1_0_3_3;\n {\n string memory r_1_1_0_3_3_0 = unicode\"Moo é🚀🚀 \";\n r_1_1_0_3_3.s_0 = r_1_1_0_3_3_0;\n }\n {\n bytes2 r_1_1_0_3_3_1 = bytes2(0xc084);\n r_1_1_0_3_3.s_1 = r_1_1_0_3_3_1;\n }\n {\n S_b73ee2ba memory r_1_1_0_3_3_2;\n {\n uint32 r_1_1_0_3_3_2_0 = 3977201122;\n r_1_1_0_3_3_2.s_0 = r_1_1_0_3_3_2_0;\n }\n {\n bool[4] memory r_1_1_0_3_3_2_1;\n {\n bool r_1_1_0_3_3_2_1_0 = true;\n r_1_1_0_3_3_2_1[0] = r_1_1_0_3_3_2_1_0;\n }\n {\n bool r_1_1_0_3_3_2_1_1 = true;\n r_1_1_0_3_3_2_1[1] = r_1_1_0_3_3_2_1_1;\n }\n {\n bool r_1_1_0_3_3_2_1_2 = false;\n r_1_1_0_3_3_2_1[2] = r_1_1_0_3_3_2_1_2;\n }\n {\n bool r_1_1_0_3_3_2_1_3 = true;\n r_1_1_0_3_3_2_1[3] = r_1_1_0_3_3_2_1_3;\n }\n r_1_1_0_3_3_2.s_1 = r_1_1_0_3_3_2_1;\n }\n {\n bytes2 r_1_1_0_3_3_2_2 = bytes2(0x5e19);\n r_1_1_0_3_3_2.s_2 = r_1_1_0_3_3_2_2;\n }\n {\n string memory r_1_1_0_3_3_2_3 = unicode\"Moo é🚀oMo éo 🚀 oMéé o oMMoéMoo ééMoooéo\";\n r_1_1_0_3_3_2.s_3 = r_1_1_0_3_3_2_3;\n }\n {\n bool r_1_1_0_3_3_2_4 = false;\n r_1_1_0_3_3_2.s_4 = r_1_1_0_3_3_2_4;\n }\n r_1_1_0_3_3.s_2 = r_1_1_0_3_3_2;\n }\n {\n address r_1_1_0_3_3_3 = 0x7EF9634CE309dC670cf64e79D1330e1906fDC807;\n r_1_1_0_3_3.s_3 = r_1_1_0_3_3_3;\n }\n r_1_1_0_3[3] = r_1_1_0_3_3;\n }\n r_1_1_0[3] = r_1_1_0_3;\n }\n r_1_1[0] = r_1_1_0;\n }\n r_1.s_1 = r_1_1;\n }\n {\n bytes21[4][1] memory r_1_2;\n {\n bytes21[4] memory r_1_2_0;\n {\n bytes21 r_1_2_0_0 = bytes21(0xc48413c2682ffae9c5f3177dbbf96bdc608df1b25b);\n r_1_2_0[0] = r_1_2_0_0;\n }\n {\n bytes21 r_1_2_0_1 = bytes21(0xd54f17f43b0f79d669affeeeee352e067b548f5ea1);\n r_1_2_0[1] = r_1_2_0_1;\n }\n {\n bytes21 r_1_2_0_2 = bytes21(0xaddf381c7bce57bd3ea070e22611ceb5be0251a5c8);\n r_1_2_0[2] = r_1_2_0_2;\n }\n {\n bytes21 r_1_2_0_3 = bytes21(0x5d5512b68391dcb24aa1074f11e6c291e78651e0c7);\n r_1_2_0[3] = r_1_2_0_3;\n }\n r_1_2[0] = r_1_2_0;\n }\n r_1.s_2 = r_1_2;\n }\n {\n bytes4 r_1_3 = bytes4(0xb17ac19b);\n r_1.s_3 = r_1_3;\n }\n {\n string memory r_1_4 = unicode\"Moo é🚀🚀o oé🚀ooMo🚀é🚀🚀o🚀ooéé ooéoo \";\n r_1.s_4 = r_1_4;\n }\n r.s_1 = r_1;\n }\n {\n string[][] memory r_2 = new string[][](3);\n {\n string[] memory r_2_0 = new string[](0);\n r_2[0] = r_2_0;\n }\n {\n string[] memory r_2_1 = new string[](2);\n {\n string memory r_2_1_0 = unicode\"Moo é🚀M🚀🚀o🚀éo o M🚀MéooMoo🚀 éMMMMo🚀é🚀 ééoé 🚀\";\n r_2_1[0] = r_2_1_0;\n }\n {\n string memory r_2_1_1 = unicode\"Moo é🚀\";\n r_2_1[1] = r_2_1_1;\n }\n r_2[1] = r_2_1;\n }\n {\n string[] memory r_2_2 = new string[](2);\n {\n string memory r_2_2_0 = unicode\"Moo é🚀oéo o🚀ooééMM 🚀o🚀MMé🚀🚀éMM🚀🚀🚀oéMooéo\";\n r_2_2[0] = r_2_2_0;\n }\n {\n string memory r_2_2_1 = unicode\"Moo é🚀\";\n r_2_2[1] = r_2_2_1;\n }\n r_2[2] = r_2_2;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000016bb732e9f42464ca26c170e00e0b100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001c800000000000000000000000002c04bf96b436c20513eef153409fa89714a440980000000000000000000000000000000000000000000000000000000000000100c48413c2682ffae9c5f3177dbbf96bdc608df1b25b0000000000000000000000d54f17f43b0f79d669affeeeee352e067b548f5ea10000000000000000000000addf381c7bce57bd3ea070e22611ceb5be0251a5c800000000000000000000005d5512b68391dcb24aa1074f11e6c291e78651e0c70000000000000000000000b17ac19b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bc00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000000000000000000000000000000000008037bc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000cc35f88eb8efe1867f72e69f7c57532d17052d45000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000136b28440000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e17a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a806f20c3a9c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080722f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000075f4cc7fac6ebb3016776df0cfec941f72da242000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a806f4d20f09f9a80204dc3a96fc3a94dc3a96f6f4d6f20c3a96f6f6fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b822098000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a80206f20f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000805b670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000e078797a9feb2b8a9d2e37156a574776a961124d00000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a806ff09f9a804df09f9a806f4d6fc3a96f206f206f6fc3a9c3a9f09f9a806fc3a920c3a96f4d6f6f6f4dc3a96f6ff09f9a80c3a9206f6f6f206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2135f820000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001207700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000007400000000000000000000000000000000000000000000000000000000000000080974f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000caa3251d916a0f8677c7997133e2a0c6e6d24e73000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ce654000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000d8270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a806f4d204d206f6f6ff09f9a80c3a96f6f6fc3a94d4d4d6f4d6fc3a920206fc3a96f6ff09f9a806f20f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000080f52700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000008e1ccf9494e2f2995e65fd03f4435c96df32b0500000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a804dc3a94d20c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000008758ef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000122aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a802020c3a96f6f4dc3a9f09f9a806f4d6f206fc3a96f6f6f4d6f206ff09f9a80204d6ff09f9a806f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008061fe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000008b8eb017d542ace3fa11f3329a3508cdca5c0c0b00000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a806fc3a9c3a94df09f9a804d6fc3a9206ff09f9a8020f09f9a806fc3a96fc3a96f6ff09f9a806ff09f9a80c3a92020c3a9c3a94df09f9a804d4d206f4df09f9a8020204d4d4d6f6f6fc3a96f6f0000000000000000000000000000000000000000000000000000000000000000000000000000c53348200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444d6f6f20c3a9f09f9a80206ff09f9a806f6f6f6f4d4d6f6fc3a9f09f9a806f4df09f9a806ff09f9a80206ff09f9a80f09f9a804d6f6fc3a9f09f9a80f09f9a80206f206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ecfa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000002dfd4d17bfe574f45828ace6d919a8e1f0ae48e6000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a80f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004acfc65500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000005ab300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a80f09f9a80c3a9f09f9a806f4d20f09f9a806fc3a9f09f9a806f202020f09f9a806f6f4d6f6f2020f09f9a80c3a94d20f09f9a802000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000074000000000000000000000000000000000000000000000000000000000000000806dce00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000007a51df6b8783faf41cae7f2bc3e9cc527275831f00000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a806ff09f9a806fc3a96f6f4dc3a90000000000000000000000000000000000000000000000000000000000000000000000000013c60f880000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000522500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a80f09f9a80206f4df09f9a80f09f9a806fc3a94df09f9a8020c3a94dc3a9206f204d206fc3a96ff09f9a804d4d6f4df09f9a806ff09f9a806f204d6f20f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080671900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000070713845aa0e0b376762fac0615b2f5c0a53660a000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a80c3a96f6fc3a920206f4df09f9a80f09f9a80f09f9a806f20c3a96f6f20f09f9a80f09f9a806f20f09f9a806f6ff09f9a80f09f9a8000000000000000000000000000000000000000000000000000000000005d49782c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000009a5900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a806ff09f9a804df09f9a804dc3a96f4df09f9a806f20c3a96ff09f9a806f20c3a9c3a9c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800da200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000865cbdd0b922d9dc232bfc45a259117ca1e37ca1000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a804d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d8144a800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fd50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a806f6f4d6fc3a9f09f9a80f09f9a80f09f9a806ff09f9a8020c3a9f09f9a804dc3a9204d6f6f206f206f4df09f9a80f09f9a804dc3a96f6f4d6f206fc3a9c3a9f09f9a80f09f9a8020c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000080c08400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000007ef9634ce309dc670cf64e79d1330e1906fdc807000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a80f09f9a8020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ed0f45e200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015e190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a806f4d6f2020c3a96f2020f09f9a80206f4dc3a9c3a920206f206f4d4d6fc3a94d6f6f2020c3a9c3a94d6f6f6fc3a96f00000000000000000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a80f09f9a806f206fc3a9f09f9a806f6f4d6ff09f9a80c3a9f09f9a80f09f9a806ff09f9a806f6fc3a9c3a9206f6fc3a96f6f200000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a804df09f9a80f09f9a806ff09f9a80c3a96f206f204df09f9a804dc3a96f6f4d6f6ff09f9a8020c3a94d4d4d4d6ff09f9a80c3a9f09f9a8020c3a9c3a96fc3a920f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a806fc3a96f206ff09f9a806f6fc3a9c3a94d4d2020f09f9a806ff09f9a804d4dc3a9f09f9a80f09f9a80c3a94d4df09f9a80f09f9a80f09f9a806fc3a94d6f6fc3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(((address,(bytes8,string,int136,address,string),address,address,bool)[],string,bytes25[4],address,(address))[3][1],address,bool,bool[1][][4])", + "type": "(((address,(bytes8,string,int136,address,string),address,address,bool)[],string,bytes25[4],address,(address))[3][1],address,bool,bool[1][][4])", + "value": [ + [ + [ + [ + [], + "Moo é🚀🚀oMo é🚀 é🚀🚀éoo é o🚀éMéoo ooo é🚀 🚀ooo éoo", + [ + "0x8f43d76e459fe48836439c119766a9972de87979784adb7093", + "0xf035dbeeb827db57bdd152143aa7227ea3caa536ca91ab9c28", + "0x7157fd0b968af9f078e5ff25560c0805d6eea81aea26a12527", + "0x67428f6ba9b11f41abeae45b5f6d63ea13a1225947133bedca" + ], + "0x27562256d4A4d74Db2c0556eD18967Ad09Bed136", + ["0x95decbb049174fb0bDDD866871161eAeEC3716B5"] + ], + [ + [ + [ + "0x249D492410cf2E84b96F400D34E97480fc355dA6", + [ + "0x021e01e9e6372c1d", + "Moo é🚀Mé🚀🚀M é🚀oooéM🚀é Méooo🚀🚀 Mo🚀oM", + "41265762335509778239214040315564793533946", + "0x9Fcfa343660100cE99fAf065D55f7f03983B46ee", + "Moo é🚀🚀oM🚀Mooé🚀é🚀 ééM🚀MMéooMooMoooéo éoéo 🚀oéMoMéM🚀 é🚀 o🚀éoM" + ], + "0x33C34511989733edbE05700bD90A6413E400aF02", + "0x7a5AF02956997409945FB5ecbA07A66B1619B7BA", + false + ], + [ + "0xEeCB35A823BffE10D39D11D2F1CE33A1f43532b3", + [ + "0xdf6ddaf618378474", + "Moo é🚀", + "-31136522373649898592636393231769760345316", + "0x0697c90e051Fb3a4be026639d89B217f34C438b6", + "Moo é🚀oMo🚀MoMo o o🚀 oMoM" + ], + "0xAEe192252d2376cA76555E79D764873aF1fd6B13", + "0xF0B2474666C292d57163bAceE73183E4b384387C", + false + ], + [ + "0xd0a3d45Bcc321Dc273129D6B5342577aF3D784A8", + [ + "0x52b3fa43831f7595", + "Moo é🚀 oooMMo o", + "7184269872080566297116242228418398017976", + "0x5a6022407BBbE21fB371b21802e3cB7A00A7f724", + "Moo é🚀🚀 o🚀ooM🚀éé " + ], + "0x3c42512B28523046E33A96C526514DDD544ac1Fd", + "0x57af2e20256DF53132912F74FB511E2A23B51FDd", + true + ] + ], + "Moo é🚀o MoM🚀ooo🚀 éo🚀", + [ + "0xcd9f59f7ed4ee3d9651bd21837c09bda3b5a36554f9e9036e3", + "0x790128a278a0737971f5aaca828f1840827b9df01476437d20", + "0x5be83768730574f58be32b61daeec53e59dd6f2b3e26299fef", + "0x66fb7e9eb7a80d9b2558e72ed88e5f72a8ee9e5145e742f3a8" + ], + "0xe4F3a16bECb949e8f949169513B05cDd3CB0f8A2", + ["0xd636EFDcd5534C19F7312FB5D1fa8EAf13fc4Fd2"] + ], + [ + [ + [ + "0xdbFe81Bdc618d5e09d822b300864Fc5860dd9c55", + [ + "0x57c830e14c33653f", + "Moo é🚀éM🚀oMoo 🚀M 🚀ééoo🚀Mo oo", + "10362802216222783026790027926521726402259", + "0xEe527586bd65247d7751d6168d20EC834Ee72Ba8", + "Moo é🚀M🚀oMMooo🚀oM 🚀éooMé🚀é ééooéoM🚀 éo🚀é Méé o 🚀 🚀 éo oooo" + ], + "0xA79e9CB848533e33875fc2B310213362fa6aF598", + "0xE0094967B4F59a581ef1C7Caf7Da1cCf32DaA969", + true + ], + [ + "0xd737CeF1E0603e2cdfaeDDc9827502B033F1C5aB", + [ + "0xeff12b120e3f9d69", + "Moo é🚀🚀🚀ooé🚀oo 🚀oé🚀oo🚀M🚀Mo oo🚀éoo🚀ooooééo 🚀o Méé 🚀🚀M", + "11957986524501207466435950599261045344494", + "0xc391E80eAfbeeAe9ccBF3057149319AC91030157", + "Moo é🚀🚀oooMéo🚀o o 🚀é🚀o🚀🚀ooMMooéMM🚀🚀o Mé o Méo🚀🚀ooéM éoo oo" + ], + "0x8C66D2bf186EE0Fc8a99a3aa69E28a80Ca3D8209", + "0xF9d0f0C3Bab03A1fcA8F784b55C026aB1F907129", + true + ], + [ + "0xCDD3d8263E25502ABfaad5255B12064A9b900FFD", + [ + "0x83b859bd41d3b1dd", + "Moo é🚀ooooo o é oo MMoM🚀 MM🚀Mo 🚀", + "-38570628417875409241193015294703320129818", + "0xdfFB4db271e9C42b516C388Fc3f41ab308A082D2", + "Moo é🚀o🚀🚀oooo🚀🚀o o ééoo " + ], + "0xE5a7F76Df50d7Ce72D1509921Ae1CbFc2C0dAd01", + "0x14bec285c86B9BD4db9FC61cea309D26a10c0d6d", + true + ] + ], + "Moo é🚀🚀🚀 o oéoM 🚀é🚀é o🚀é", + [ + "0xc3458961d6444147d02355ff44ae2cfa02de0c460d986dec90", + "0x2ebae44e1804ac3bcc939c68ec912c10feb8acad9a4f0a779b", + "0x77b0bc67ff3ecc53c6d06abab804afd33a31f49f6b936cda43", + "0xa68fc6e4ce68768b3419f0d1e1e4a50eac0ddeac60a88fe57d" + ], + "0xCFE08AB4b2239EB0775B46EB540549bA5DeeFF63", + ["0x27285c37d4070Ea4a513930c605Eb8A5DAfB11fA"] + ] + ] + ], + "0xbd8aED6E7cB55bEC1B9C76CED5B84A824E51059e", + false, + [[], [[true], [false], [true], [false]], [[true], [false]], [[false], [false]]] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "string", + "value": "Moo é🚀🚀oMo é🚀 é🚀🚀éoo é o🚀éMéoo ooo é🚀 🚀ooo éoo" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8f43d76e459fe48836439c119766a9972de87979784adb7093" + }, + { + "type": "hexstring", + "value": "0xf035dbeeb827db57bdd152143aa7227ea3caa536ca91ab9c28" + }, + { + "type": "hexstring", + "value": "0x7157fd0b968af9f078e5ff25560c0805d6eea81aea26a12527" + }, + { + "type": "hexstring", + "value": "0x67428f6ba9b11f41abeae45b5f6d63ea13a1225947133bedca" + } + ] + }, + { + "type": "address", + "value": "0x27562256d4A4d74Db2c0556eD18967Ad09Bed136" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x95decbb049174fb0bDDD866871161eAeEC3716B5" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x249D492410cf2E84b96F400D34E97480fc355dA6" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x021e01e9e6372c1d" + }, + { + "type": "string", + "value": "Moo é🚀Mé🚀🚀M é🚀oooéM🚀é Méooo🚀🚀 Mo🚀oM" + }, + { + "type": "number", + "value": "41265762335509778239214040315564793533946" + }, + { + "type": "address", + "value": "0x9Fcfa343660100cE99fAf065D55f7f03983B46ee" + }, + { + "type": "string", + "value": "Moo é🚀🚀oM🚀Mooé🚀é🚀 ééM🚀MMéooMooMoooéo éoéo 🚀oéMoMéM🚀 é🚀 o🚀éoM" + } + ] + }, + { + "type": "address", + "value": "0x33C34511989733edbE05700bD90A6413E400aF02" + }, + { + "type": "address", + "value": "0x7a5AF02956997409945FB5ecbA07A66B1619B7BA" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xEeCB35A823BffE10D39D11D2F1CE33A1f43532b3" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xdf6ddaf618378474" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "number", + "value": "-31136522373649898592636393231769760345316" + }, + { + "type": "address", + "value": "0x0697c90e051Fb3a4be026639d89B217f34C438b6" + }, + { + "type": "string", + "value": "Moo é🚀oMo🚀MoMo o o🚀 oMoM" + } + ] + }, + { + "type": "address", + "value": "0xAEe192252d2376cA76555E79D764873aF1fd6B13" + }, + { + "type": "address", + "value": "0xF0B2474666C292d57163bAceE73183E4b384387C" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xd0a3d45Bcc321Dc273129D6B5342577aF3D784A8" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x52b3fa43831f7595" + }, + { + "type": "string", + "value": "Moo é🚀 oooMMo o" + }, + { + "type": "number", + "value": "7184269872080566297116242228418398017976" + }, + { + "type": "address", + "value": "0x5a6022407BBbE21fB371b21802e3cB7A00A7f724" + }, + { + "type": "string", + "value": "Moo é🚀🚀 o🚀ooM🚀éé " + } + ] + }, + { + "type": "address", + "value": "0x3c42512B28523046E33A96C526514DDD544ac1Fd" + }, + { + "type": "address", + "value": "0x57af2e20256DF53132912F74FB511E2A23B51FDd" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o MoM🚀ooo🚀 éo🚀" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xcd9f59f7ed4ee3d9651bd21837c09bda3b5a36554f9e9036e3" + }, + { + "type": "hexstring", + "value": "0x790128a278a0737971f5aaca828f1840827b9df01476437d20" + }, + { + "type": "hexstring", + "value": "0x5be83768730574f58be32b61daeec53e59dd6f2b3e26299fef" + }, + { + "type": "hexstring", + "value": "0x66fb7e9eb7a80d9b2558e72ed88e5f72a8ee9e5145e742f3a8" + } + ] + }, + { + "type": "address", + "value": "0xe4F3a16bECb949e8f949169513B05cDd3CB0f8A2" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xd636EFDcd5534C19F7312FB5D1fa8EAf13fc4Fd2" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xdbFe81Bdc618d5e09d822b300864Fc5860dd9c55" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x57c830e14c33653f" + }, + { + "type": "string", + "value": "Moo é🚀éM🚀oMoo 🚀M 🚀ééoo🚀Mo oo" + }, + { + "type": "number", + "value": "10362802216222783026790027926521726402259" + }, + { + "type": "address", + "value": "0xEe527586bd65247d7751d6168d20EC834Ee72Ba8" + }, + { + "type": "string", + "value": "Moo é🚀M🚀oMMooo🚀oM 🚀éooMé🚀é ééooéoM🚀 éo🚀é Méé o 🚀 🚀 éo oooo" + } + ] + }, + { + "type": "address", + "value": "0xA79e9CB848533e33875fc2B310213362fa6aF598" + }, + { + "type": "address", + "value": "0xE0094967B4F59a581ef1C7Caf7Da1cCf32DaA969" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xd737CeF1E0603e2cdfaeDDc9827502B033F1C5aB" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xeff12b120e3f9d69" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀ooé🚀oo 🚀oé🚀oo🚀M🚀Mo oo🚀éoo🚀ooooééo 🚀o Méé 🚀🚀M" + }, + { + "type": "number", + "value": "11957986524501207466435950599261045344494" + }, + { + "type": "address", + "value": "0xc391E80eAfbeeAe9ccBF3057149319AC91030157" + }, + { + "type": "string", + "value": "Moo é🚀🚀oooMéo🚀o o 🚀é🚀o🚀🚀ooMMooéMM🚀🚀o Mé o Méo🚀🚀ooéM éoo oo" + } + ] + }, + { + "type": "address", + "value": "0x8C66D2bf186EE0Fc8a99a3aa69E28a80Ca3D8209" + }, + { + "type": "address", + "value": "0xF9d0f0C3Bab03A1fcA8F784b55C026aB1F907129" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xCDD3d8263E25502ABfaad5255B12064A9b900FFD" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x83b859bd41d3b1dd" + }, + { + "type": "string", + "value": "Moo é🚀ooooo o é oo MMoM🚀 MM🚀Mo 🚀" + }, + { + "type": "number", + "value": "-38570628417875409241193015294703320129818" + }, + { + "type": "address", + "value": "0xdfFB4db271e9C42b516C388Fc3f41ab308A082D2" + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀oooo🚀🚀o o ééoo " + } + ] + }, + { + "type": "address", + "value": "0xE5a7F76Df50d7Ce72D1509921Ae1CbFc2C0dAd01" + }, + { + "type": "address", + "value": "0x14bec285c86B9BD4db9FC61cea309D26a10c0d6d" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀 o oéoM 🚀é🚀é o🚀é" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc3458961d6444147d02355ff44ae2cfa02de0c460d986dec90" + }, + { + "type": "hexstring", + "value": "0x2ebae44e1804ac3bcc939c68ec912c10feb8acad9a4f0a779b" + }, + { + "type": "hexstring", + "value": "0x77b0bc67ff3ecc53c6d06abab804afd33a31f49f6b936cda43" + }, + { + "type": "hexstring", + "value": "0xa68fc6e4ce68768b3419f0d1e1e4a50eac0ddeac60a88fe57d" + } + ] + }, + { + "type": "address", + "value": "0xCFE08AB4b2239EB0775B46EB540549bA5DeeFF63" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x27285c37d4070Ea4a513930c605Eb8A5DAfB11fA" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0xbd8aED6E7cB55bEC1B9C76CED5B84A824E51059e" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50611623806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190611075565b60405180910390f35b610056610dcb565b61005e610dcb565b610066610dfe565b61006e610e2b565b610076610e58565b60408051600080825260208201909252816100a7565b610094610e97565b81526020019060019003908161008c5790505b50825250604080516080810190915260518082526000919061147860208301396020830152506100d5610ed5565b7f8f43d76e459fe48836439c119766a9972de87979784adb70930000000000000081527ff035dbeeb827db57bdd152143aa7227ea3caa536ca91ab9c28000000000000006020808301919091527f7157fd0b968af9f078e5ff25560c0805d6eea81aea26a12527000000000000006040808401919091527f67428f6ba9b11f41abeae45b5f6d63ea13a1225947133bedca00000000000000606080850191909152848201939093527327562256d4a4d74db2c0556ed18967ad09bed1369284019290925281519081019091527395decbb049174fb0bddd866871161eaeec3716b58152608082015281526101c7610e58565b60408051600380825260808201909252600091816020015b6101e7610e97565b8152602001906001900390816101df579050509050610204610e97565b73249d492410cf2e84b96f400d34e97480fc355da68152610223610ef3565b67021e01e9e6372c1d60c01b815260408051608081019091526042808252600091906113826020830139602080840191909152707944e8bc6a018c4ac718c9c755fd6815fa604080850191909152739fcfa343660100ce99faf065d55f7f03983b46ee6060850152805160a081019091526069808252600093509091611585908301396080808401919091526020840192909252507333c34511989733edbe05700bd90a6413e400af026040830152737a5af02956997409945fb5ecba07a66b1619b7ba60608301526000908201819052825182918491610306576103066112b7565b60200260200101819052505061031a610e97565b73eecb35a823bffe10d39d11d2f1ce33a1f43532b38152610339610ef3565b6737db76bd860de11d60c21b8152604080518082018252600a8152689adede418753e13f3560b71b60208083019190915280840191909152705b80841491c9b65d0cc53100c6e766ace31982840152730697c90e051fb3a4be026639d89b217f34c438b660608085019190915282519081019092526022808352600092916112ce9083013960808084019190915260208401929092525073aee192252d2376ca76555e79d764873af1fd6b13604083015273f0b2474666c292d57163bacee73183e4b384387c60608301526000908201528151819083906001908110610421576104216112b7565b602002602001018190525050610435610e97565b73d0a3d45bcc321dc273129d6b5342577af3d784a88152610454610ef3565b6752b3fa43831f759560c01b815260408051808201825260138152724d6f6f20c3a9f09f9a80206f6f6f4d4d6f206f60681b6020808301919091528084019190915270151cd80c2a43a89b203c21de44280e59b882840152735a6022407bbbe21fb371b21802e3cb7a00a7f724606080850191909152825180840184528281527f4d6f6f20c3a9f09f9a80f09f9a80206ff09f9a806f6f4df09f9a80c3a9c3a9208184015260808086019190915291850193909352733c42512b28523046e33a96c526514ddd544ac1fd918401919091527357af2e20256df53132912f74fb511e2a23b51fdd91830191909152600190820152815181908390600290811061055e5761055e6112b7565b6020026020010181905250508082600001819052505060006040518060600160405280602281526020016114566022913960208301525061059d610ed5565b7fcd9f59f7ed4ee3d9651bd21837c09bda3b5a36554f9e9036e30000000000000081527f790128a278a0737971f5aaca828f1840827b9df01476437d20000000000000006020808301919091527f5be83768730574f58be32b61daeec53e59dd6f2b3e26299fef000000000000006040808401919091527f66fb7e9eb7a80d9b2558e72ed88e5f72a8ee9e5145e742f3a8000000000000006060808501919091528482019390935273e4f3a16becb949e8f949169513b05cdd3cb0f8a292840192909252815180820190925273d636efdcd5534c19f7312fb5d1fa8eaf13fc4fd282526080830191909152820152610693610e58565b60408051600380825260808201909252600091816020015b6106b3610e97565b8152602001906001900390816106ab5790505090506106d0610e97565b73dbfe81bdc618d5e09d822b300864fc5860dd9c5581526106ef610ef3565b6757c830e14c33653f60c01b81526040805160608101909152602f808252600091906114c96020830139602080840191909152701e741b1c0ea72a684071f2ebbfd1287ed360408085019190915273ee527586bd65247d7751d6168d20ec834ee72ba86060850152805160a0810190915260628082526000935090916114f89083013960808084019190915260208401929092525073a79e9cb848533e33875fc2b310213362fa6af598604083015273e0094967b4f59a581ef1c7caf7da1ccf32daa96960608301526001908201528151819083906000906107d3576107d36112b7565b6020026020010181905250506107e7610e97565b73d737cef1e0603e2cdfaeddc9827502b033f1c5ab8152610806610ef3565b67eff12b120e3f9d6960c01b81526040805160a0810190915260638082526000919061131f6020830139602080840191909152702324306ea56b3f4546f5849c18b38748ee60408085019190915273c391e80eafbeeae9ccbf3057149319ac910301576060850152805160a0810190915260638082526000935090916113f390830139608080840191909152602084019290925250738c66d2bf186ee0fc8a99a3aa69e28a80ca3d8209604083015273f9d0f0c3bab03a1fca8f784b55c026ab1f9071296060830152600190820181905282518291849181106108eb576108eb6112b7565b6020026020010181905250506108ff610e97565b73cdd3d8263e25502abfaad5255b12064a9b900ffd815261091e610ef3565b6783b859bd41d3b1dd60c01b81526040805160608101909152602f808252600091906112f0602083013960208084019190915270715950d30ab215b54922be42b8d65b61191960408085019190915273dffb4db271e9c42b516c388fc3f41ab308a082d26060808601919091528151908101909152602b80825260009350909161155a9083013960808084019190915260208401929092525073e5a7f76df50d7ce72d1509921ae1cbfc2c0dad0160408301527314bec285c86b9bd4db9fc61cea309d26a10c0d6d60608301526001908201528151819083906002908110610a0857610a086112b7565b6020026020010181905250508082600001819052505060006040518060600160405280602f81526020016113c4602f9139602083015250610a47610ed5565b7fc3458961d6444147d02355ff44ae2cfa02de0c460d986dec900000000000000081527f2ebae44e1804ac3bcc939c68ec912c10feb8acad9a4f0a779b000000000000006020808301919091527f77b0bc67ff3ecc53c6d06abab804afd33a31f49f6b936cda43000000000000006040808401919091527fa68fc6e4ce68768b3419f0d1e1e4a50eac0ddeac60a88fe57d000000000000006060808501919091528482019390935273cfe08ab4b2239eb0775b46eb540549ba5deeff6392840192909252815180820183527327285c37d4070ea4a513930c605eb8a5dafb11fa815260808401528382019290925291835291835273bd8aed6e7cb55bec1b9c76ced5b84a824e51059e91830191909152600090820152610b65610f20565b6040805160008082526020820190925281610b96565b610b83610f47565b815260200190600190039081610b7b5790505b5082525060408051600480825260a08201909252600091816020015b610bba610f47565b815260200190600190039081610bb2579050509050610bd7610f47565b60018152815181908390600090610bf057610bf06112b7565b602002602001018190525050610c04610f47565b600081528151819083906001908110610c1f57610c1f6112b7565b602002602001018190525050610c33610f47565b600181528151819083906002908110610c4e57610c4e6112b7565b602002602001018190525050610c62610f47565b600081528151819083906003908110610c7d57610c7d6112b7565b6020908102919091018101919091528301919091525060408051600280825260608201909252600091816020015b610cb3610f47565b815260200190600190039081610cab579050509050610cd0610f47565b60018152815181908390600090610ce957610ce96112b7565b602002602001018190525050610cfd610f47565b600081528151819083906001908110610d1857610d186112b7565b6020908102919091010152506040808301919091528051600280825260608201909252600091816020015b610d4b610f47565b815260200190600190039081610d43579050509050610d68610f47565b6000808252825182918491610d7f57610d7f6112b7565b602002602001018190525050610d93610f47565b600081528151819083906001908110610dae57610dae6112b7565b602090810291909101015250606080830191909152820152919050565b6040518060800160405280610dde610dfe565b81526000602082018190526040820152606001610df9610f20565b905290565b60405180602001604052806001905b610e15610e2b565b815260200190600190039081610e0d5790505090565b60405180606001604052806003905b610e42610e58565b815260200190600190039081610e3a5790505090565b6040518060a001604052806060815260200160608152602001610e79610ed5565b81526000602080830182905260408051918201815291815291015290565b6040518060a0016040528060006001600160a01b03168152602001610eba610ef3565b81526000602082018190526040820181905260609091015290565b60405180608001604052806004906020820280368337509192915050565b6040805160a081018252600080825260606020830181905292820181905282820152608081019190915290565b60405180608001604052806004905b6060815260200190600190039081610f2f5790505090565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b81811015610f8b57602081850181015186830182015201610f6f565b81811115610f9d576000602083870101525b50601f01601f19169290920160200192915050565b8060005b6004811015610fdf57815166ffffffffffffff1916845260209384019390910190600101610fb6565b50505050565b600082608081018360005b600481101561106a57838303875281518051808552602091820191808601919060005b828110156110535784518460005b6001811015611040578251151582529184019190840190600101611021565b5050509381019392810192600101611013565b50998a019991955050929092019150600101610ff0565b509095945050505050565b60208152600082516080602084015260a0830160c0840160005b600181101561126a57858203609f190183528351826060810160005b600381101561125257858203835283518051610100845261010084018151808252610120860191506101208160051b87010160208401935060005b828110156111e55787820361011f19018452845180516001600160a01b0316835260208082015160a082860181905281516001600160c01b031916818701529181015160c086019290925290611140610140860182610f65565b604083015160100b60e087015260608301516001600160a01b0316610100870152608090920151858303609f19016101208701529190506111818183610f65565b915050604082015161119e60408601826001600160a01b03169052565b5060608201516111b960608601826001600160a01b03169052565b50608082015191506111cf608085018315159052565b60209687019695909501949250506001016110e6565b506020850151935086810360208801526111ff8185610f65565b935050505060408201516112166040860182610fb2565b5060608201516001600160a01b0390811660c0860152608090920151805190921660e085015260209586019594909401939250506001016110ab565b5060209687019695909501949350505060010161108f565b5060208601516001600160a01b038116604087015292506040860151801515606087015292506060860151858203601f1901608087015292506112ad8184610fe5565b9695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f4d6ff09f9a804d6f4d6f206f206ff09f9a80206f4d6f4d4d6f6f20c3a9f09f9a806f6f6f6f6f206f20c3a920206f6f204d4d6f4df09f9a80204d4df09f9a804d6f20f09f9a804d6f6f20c3a9f09f9a80f09f9a80f09f9a806f6fc3a9f09f9a806f6f20f09f9a806fc3a9f09f9a806f6ff09f9a804df09f9a804d6f206f6ff09f9a80c3a96f6ff09f9a806f6f6f6fc3a9c3a96f20f09f9a806f204dc3a9c3a920f09f9a80f09f9a804d4d6f6f20c3a9f09f9a804dc3a9f09f9a80f09f9a804d20c3a9f09f9a806f6f6fc3a94df09f9a80c3a9204dc3a96f6f6ff09f9a80f09f9a8020204d6ff09f9a806f4d4d6f6f20c3a9f09f9a80f09f9a80f09f9a80206f206fc3a96f4d20f09f9a80c3a9f09f9a80c3a9206ff09f9a80c3a94d6f6f20c3a9f09f9a80f09f9a806f6f6f4dc3a96ff09f9a806f206f20f09f9a80c3a9f09f9a806ff09f9a80f09f9a806f6f4d4d6f6fc3a94d4df09f9a80f09f9a806f204dc3a9206f204dc3a96ff09f9a80f09f9a806f6fc3a94d20c3a96f6f206f6f4d6f6f20c3a9f09f9a806f204d6f4df09f9a806f6f6ff09f9a8020c3a96ff09f9a804d6f6f20c3a9f09f9a80f09f9a806f4d6f20c3a9f09f9a802020c3a9f09f9a80f09f9a80c3a96f6f20c3a920206ff09f9a80c3a94dc3a96f6f206f6f6f20c3a9f09f9a8020f09f9a806f6f6f20c3a96f6f4d6f6f20c3a9f09f9a80c3a94df09f9a806f4d6f6f20f09f9a804d20f09f9a80c3a9c3a96f6ff09f9a804d6f206f6f4d6f6f20c3a9f09f9a804df09f9a806f4d4d6f6f6ff09f9a806f4d20f09f9a80c3a96f6f4dc3a9f09f9a80c3a920c3a9c3a96f6fc3a96f4df09f9a8020c3a96ff09f9a80c3a9204dc3a9c3a9206f20f09f9a8020f09f9a802020c3a96f206f6f6f6f4d6f6f20c3a9f09f9a806ff09f9a80f09f9a806f6f6f6ff09f9a80f09f9a806f206f2020c3a9c3a96f6f204d6f6f20c3a9f09f9a80f09f9a806f4df09f9a804d6f6fc3a9f09f9a80c3a9f09f9a802020c3a9c3a94df09f9a804d4dc3a96f6f4d6f6f4d6f6f6fc3a96f2020c3a96fc3a96f20f09f9a806fc3a94d6f4dc3a94df09f9a8020c3a9f09f9a80206ff09f9a80c3a96f4da26469706673582212201adc65c5dba831624d41f7c6d964f40c6811f93b917454b0b0c896e80ffc1bf964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_686abcdf {\n bytes8 s_0;\n string s_1;\n int136 s_2;\n address s_3;\n string s_4;\n }\n\n struct S_6757c49f {\n address s_0;\n S_686abcdf s_1;\n address s_2;\n address s_3;\n bool s_4;\n }\n\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_ccfda69a {\n S_6757c49f[] s_0;\n string s_1;\n bytes25[4] s_2;\n address s_3;\n S_421683f8 s_4;\n }\n\n struct S_88f3285d {\n S_ccfda69a[3][1] s_0;\n address s_1;\n bool s_2;\n bool[1][][4] s_3;\n }\n\n function test () public pure returns (S_88f3285d memory) {\n S_88f3285d memory r;\n {\n S_ccfda69a[3][1] memory r_0;\n {\n S_ccfda69a[3] memory r_0_0;\n {\n S_ccfda69a memory r_0_0_0;\n {\n S_6757c49f[] memory r_0_0_0_0 = new S_6757c49f[](0);\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n string memory r_0_0_0_1 = unicode\"Moo é🚀🚀oMo é🚀 é🚀🚀éoo é o🚀éMéoo ooo é🚀 🚀ooo éoo\";\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n bytes25[4] memory r_0_0_0_2;\n {\n bytes25 r_0_0_0_2_0 = bytes25(0x8f43d76e459fe48836439c119766a9972de87979784adb7093);\n r_0_0_0_2[0] = r_0_0_0_2_0;\n }\n {\n bytes25 r_0_0_0_2_1 = bytes25(0xf035dbeeb827db57bdd152143aa7227ea3caa536ca91ab9c28);\n r_0_0_0_2[1] = r_0_0_0_2_1;\n }\n {\n bytes25 r_0_0_0_2_2 = bytes25(0x7157fd0b968af9f078e5ff25560c0805d6eea81aea26a12527);\n r_0_0_0_2[2] = r_0_0_0_2_2;\n }\n {\n bytes25 r_0_0_0_2_3 = bytes25(0x67428f6ba9b11f41abeae45b5f6d63ea13a1225947133bedca);\n r_0_0_0_2[3] = r_0_0_0_2_3;\n }\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n {\n address r_0_0_0_3 = 0x27562256d4A4d74Db2c0556eD18967Ad09Bed136;\n r_0_0_0.s_3 = r_0_0_0_3;\n }\n {\n S_421683f8 memory r_0_0_0_4;\n {\n address r_0_0_0_4_0 = 0x95decbb049174fb0bDDD866871161eAeEC3716B5;\n r_0_0_0_4.s_0 = r_0_0_0_4_0;\n }\n r_0_0_0.s_4 = r_0_0_0_4;\n }\n r_0_0[0] = r_0_0_0;\n }\n {\n S_ccfda69a memory r_0_0_1;\n {\n S_6757c49f[] memory r_0_0_1_0 = new S_6757c49f[](3);\n {\n S_6757c49f memory r_0_0_1_0_0;\n {\n address r_0_0_1_0_0_0 = 0x249D492410cf2E84b96F400D34E97480fc355dA6;\n r_0_0_1_0_0.s_0 = r_0_0_1_0_0_0;\n }\n {\n S_686abcdf memory r_0_0_1_0_0_1;\n {\n bytes8 r_0_0_1_0_0_1_0 = bytes8(0x021e01e9e6372c1d);\n r_0_0_1_0_0_1.s_0 = r_0_0_1_0_0_1_0;\n }\n {\n string memory r_0_0_1_0_0_1_1 = unicode\"Moo é🚀Mé🚀🚀M é🚀oooéM🚀é Méooo🚀🚀 Mo🚀oM\";\n r_0_0_1_0_0_1.s_1 = r_0_0_1_0_0_1_1;\n }\n {\n int136 r_0_0_1_0_0_1_2 = 41265762335509778239214040315564793533946;\n r_0_0_1_0_0_1.s_2 = r_0_0_1_0_0_1_2;\n }\n {\n address r_0_0_1_0_0_1_3 = 0x9Fcfa343660100cE99fAf065D55f7f03983B46ee;\n r_0_0_1_0_0_1.s_3 = r_0_0_1_0_0_1_3;\n }\n {\n string memory r_0_0_1_0_0_1_4 = unicode\"Moo é🚀🚀oM🚀Mooé🚀é🚀 ééM🚀MMéooMooMoooéo éoéo 🚀oéMoMéM🚀 é🚀 o🚀éoM\";\n r_0_0_1_0_0_1.s_4 = r_0_0_1_0_0_1_4;\n }\n r_0_0_1_0_0.s_1 = r_0_0_1_0_0_1;\n }\n {\n address r_0_0_1_0_0_2 = 0x33C34511989733edbE05700bD90A6413E400aF02;\n r_0_0_1_0_0.s_2 = r_0_0_1_0_0_2;\n }\n {\n address r_0_0_1_0_0_3 = 0x7a5AF02956997409945FB5ecbA07A66B1619B7BA;\n r_0_0_1_0_0.s_3 = r_0_0_1_0_0_3;\n }\n {\n bool r_0_0_1_0_0_4 = false;\n r_0_0_1_0_0.s_4 = r_0_0_1_0_0_4;\n }\n r_0_0_1_0[0] = r_0_0_1_0_0;\n }\n {\n S_6757c49f memory r_0_0_1_0_1;\n {\n address r_0_0_1_0_1_0 = 0xEeCB35A823BffE10D39D11D2F1CE33A1f43532b3;\n r_0_0_1_0_1.s_0 = r_0_0_1_0_1_0;\n }\n {\n S_686abcdf memory r_0_0_1_0_1_1;\n {\n bytes8 r_0_0_1_0_1_1_0 = bytes8(0xdf6ddaf618378474);\n r_0_0_1_0_1_1.s_0 = r_0_0_1_0_1_1_0;\n }\n {\n string memory r_0_0_1_0_1_1_1 = unicode\"Moo é🚀\";\n r_0_0_1_0_1_1.s_1 = r_0_0_1_0_1_1_1;\n }\n {\n int136 r_0_0_1_0_1_1_2 = -31136522373649898592636393231769760345316;\n r_0_0_1_0_1_1.s_2 = r_0_0_1_0_1_1_2;\n }\n {\n address r_0_0_1_0_1_1_3 = 0x0697c90e051Fb3a4be026639d89B217f34C438b6;\n r_0_0_1_0_1_1.s_3 = r_0_0_1_0_1_1_3;\n }\n {\n string memory r_0_0_1_0_1_1_4 = unicode\"Moo é🚀oMo🚀MoMo o o🚀 oMoM\";\n r_0_0_1_0_1_1.s_4 = r_0_0_1_0_1_1_4;\n }\n r_0_0_1_0_1.s_1 = r_0_0_1_0_1_1;\n }\n {\n address r_0_0_1_0_1_2 = 0xAEe192252d2376cA76555E79D764873aF1fd6B13;\n r_0_0_1_0_1.s_2 = r_0_0_1_0_1_2;\n }\n {\n address r_0_0_1_0_1_3 = 0xF0B2474666C292d57163bAceE73183E4b384387C;\n r_0_0_1_0_1.s_3 = r_0_0_1_0_1_3;\n }\n {\n bool r_0_0_1_0_1_4 = false;\n r_0_0_1_0_1.s_4 = r_0_0_1_0_1_4;\n }\n r_0_0_1_0[1] = r_0_0_1_0_1;\n }\n {\n S_6757c49f memory r_0_0_1_0_2;\n {\n address r_0_0_1_0_2_0 = 0xd0a3d45Bcc321Dc273129D6B5342577aF3D784A8;\n r_0_0_1_0_2.s_0 = r_0_0_1_0_2_0;\n }\n {\n S_686abcdf memory r_0_0_1_0_2_1;\n {\n bytes8 r_0_0_1_0_2_1_0 = bytes8(0x52b3fa43831f7595);\n r_0_0_1_0_2_1.s_0 = r_0_0_1_0_2_1_0;\n }\n {\n string memory r_0_0_1_0_2_1_1 = unicode\"Moo é🚀 oooMMo o\";\n r_0_0_1_0_2_1.s_1 = r_0_0_1_0_2_1_1;\n }\n {\n int136 r_0_0_1_0_2_1_2 = 7184269872080566297116242228418398017976;\n r_0_0_1_0_2_1.s_2 = r_0_0_1_0_2_1_2;\n }\n {\n address r_0_0_1_0_2_1_3 = 0x5a6022407BBbE21fB371b21802e3cB7A00A7f724;\n r_0_0_1_0_2_1.s_3 = r_0_0_1_0_2_1_3;\n }\n {\n string memory r_0_0_1_0_2_1_4 = unicode\"Moo é🚀🚀 o🚀ooM🚀éé \";\n r_0_0_1_0_2_1.s_4 = r_0_0_1_0_2_1_4;\n }\n r_0_0_1_0_2.s_1 = r_0_0_1_0_2_1;\n }\n {\n address r_0_0_1_0_2_2 = 0x3c42512B28523046E33A96C526514DDD544ac1Fd;\n r_0_0_1_0_2.s_2 = r_0_0_1_0_2_2;\n }\n {\n address r_0_0_1_0_2_3 = 0x57af2e20256DF53132912F74FB511E2A23B51FDd;\n r_0_0_1_0_2.s_3 = r_0_0_1_0_2_3;\n }\n {\n bool r_0_0_1_0_2_4 = true;\n r_0_0_1_0_2.s_4 = r_0_0_1_0_2_4;\n }\n r_0_0_1_0[2] = r_0_0_1_0_2;\n }\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n {\n string memory r_0_0_1_1 = unicode\"Moo é🚀o MoM🚀ooo🚀 éo🚀\";\n r_0_0_1.s_1 = r_0_0_1_1;\n }\n {\n bytes25[4] memory r_0_0_1_2;\n {\n bytes25 r_0_0_1_2_0 = bytes25(0xcd9f59f7ed4ee3d9651bd21837c09bda3b5a36554f9e9036e3);\n r_0_0_1_2[0] = r_0_0_1_2_0;\n }\n {\n bytes25 r_0_0_1_2_1 = bytes25(0x790128a278a0737971f5aaca828f1840827b9df01476437d20);\n r_0_0_1_2[1] = r_0_0_1_2_1;\n }\n {\n bytes25 r_0_0_1_2_2 = bytes25(0x5be83768730574f58be32b61daeec53e59dd6f2b3e26299fef);\n r_0_0_1_2[2] = r_0_0_1_2_2;\n }\n {\n bytes25 r_0_0_1_2_3 = bytes25(0x66fb7e9eb7a80d9b2558e72ed88e5f72a8ee9e5145e742f3a8);\n r_0_0_1_2[3] = r_0_0_1_2_3;\n }\n r_0_0_1.s_2 = r_0_0_1_2;\n }\n {\n address r_0_0_1_3 = 0xe4F3a16bECb949e8f949169513B05cDd3CB0f8A2;\n r_0_0_1.s_3 = r_0_0_1_3;\n }\n {\n S_421683f8 memory r_0_0_1_4;\n {\n address r_0_0_1_4_0 = 0xd636EFDcd5534C19F7312FB5D1fa8EAf13fc4Fd2;\n r_0_0_1_4.s_0 = r_0_0_1_4_0;\n }\n r_0_0_1.s_4 = r_0_0_1_4;\n }\n r_0_0[1] = r_0_0_1;\n }\n {\n S_ccfda69a memory r_0_0_2;\n {\n S_6757c49f[] memory r_0_0_2_0 = new S_6757c49f[](3);\n {\n S_6757c49f memory r_0_0_2_0_0;\n {\n address r_0_0_2_0_0_0 = 0xdbFe81Bdc618d5e09d822b300864Fc5860dd9c55;\n r_0_0_2_0_0.s_0 = r_0_0_2_0_0_0;\n }\n {\n S_686abcdf memory r_0_0_2_0_0_1;\n {\n bytes8 r_0_0_2_0_0_1_0 = bytes8(0x57c830e14c33653f);\n r_0_0_2_0_0_1.s_0 = r_0_0_2_0_0_1_0;\n }\n {\n string memory r_0_0_2_0_0_1_1 = unicode\"Moo é🚀éM🚀oMoo 🚀M 🚀ééoo🚀Mo oo\";\n r_0_0_2_0_0_1.s_1 = r_0_0_2_0_0_1_1;\n }\n {\n int136 r_0_0_2_0_0_1_2 = 10362802216222783026790027926521726402259;\n r_0_0_2_0_0_1.s_2 = r_0_0_2_0_0_1_2;\n }\n {\n address r_0_0_2_0_0_1_3 = 0xEe527586bd65247d7751d6168d20EC834Ee72Ba8;\n r_0_0_2_0_0_1.s_3 = r_0_0_2_0_0_1_3;\n }\n {\n string memory r_0_0_2_0_0_1_4 = unicode\"Moo é🚀M🚀oMMooo🚀oM 🚀éooMé🚀é ééooéoM🚀 éo🚀é Méé o 🚀 🚀 éo oooo\";\n r_0_0_2_0_0_1.s_4 = r_0_0_2_0_0_1_4;\n }\n r_0_0_2_0_0.s_1 = r_0_0_2_0_0_1;\n }\n {\n address r_0_0_2_0_0_2 = 0xA79e9CB848533e33875fc2B310213362fa6aF598;\n r_0_0_2_0_0.s_2 = r_0_0_2_0_0_2;\n }\n {\n address r_0_0_2_0_0_3 = 0xE0094967B4F59a581ef1C7Caf7Da1cCf32DaA969;\n r_0_0_2_0_0.s_3 = r_0_0_2_0_0_3;\n }\n {\n bool r_0_0_2_0_0_4 = true;\n r_0_0_2_0_0.s_4 = r_0_0_2_0_0_4;\n }\n r_0_0_2_0[0] = r_0_0_2_0_0;\n }\n {\n S_6757c49f memory r_0_0_2_0_1;\n {\n address r_0_0_2_0_1_0 = 0xd737CeF1E0603e2cdfaeDDc9827502B033F1C5aB;\n r_0_0_2_0_1.s_0 = r_0_0_2_0_1_0;\n }\n {\n S_686abcdf memory r_0_0_2_0_1_1;\n {\n bytes8 r_0_0_2_0_1_1_0 = bytes8(0xeff12b120e3f9d69);\n r_0_0_2_0_1_1.s_0 = r_0_0_2_0_1_1_0;\n }\n {\n string memory r_0_0_2_0_1_1_1 = unicode\"Moo é🚀🚀🚀ooé🚀oo 🚀oé🚀oo🚀M🚀Mo oo🚀éoo🚀ooooééo 🚀o Méé 🚀🚀M\";\n r_0_0_2_0_1_1.s_1 = r_0_0_2_0_1_1_1;\n }\n {\n int136 r_0_0_2_0_1_1_2 = 11957986524501207466435950599261045344494;\n r_0_0_2_0_1_1.s_2 = r_0_0_2_0_1_1_2;\n }\n {\n address r_0_0_2_0_1_1_3 = 0xc391E80eAfbeeAe9ccBF3057149319AC91030157;\n r_0_0_2_0_1_1.s_3 = r_0_0_2_0_1_1_3;\n }\n {\n string memory r_0_0_2_0_1_1_4 = unicode\"Moo é🚀🚀oooMéo🚀o o 🚀é🚀o🚀🚀ooMMooéMM🚀🚀o Mé o Méo🚀🚀ooéM éoo oo\";\n r_0_0_2_0_1_1.s_4 = r_0_0_2_0_1_1_4;\n }\n r_0_0_2_0_1.s_1 = r_0_0_2_0_1_1;\n }\n {\n address r_0_0_2_0_1_2 = 0x8C66D2bf186EE0Fc8a99a3aa69E28a80Ca3D8209;\n r_0_0_2_0_1.s_2 = r_0_0_2_0_1_2;\n }\n {\n address r_0_0_2_0_1_3 = 0xF9d0f0C3Bab03A1fcA8F784b55C026aB1F907129;\n r_0_0_2_0_1.s_3 = r_0_0_2_0_1_3;\n }\n {\n bool r_0_0_2_0_1_4 = true;\n r_0_0_2_0_1.s_4 = r_0_0_2_0_1_4;\n }\n r_0_0_2_0[1] = r_0_0_2_0_1;\n }\n {\n S_6757c49f memory r_0_0_2_0_2;\n {\n address r_0_0_2_0_2_0 = 0xCDD3d8263E25502ABfaad5255B12064A9b900FFD;\n r_0_0_2_0_2.s_0 = r_0_0_2_0_2_0;\n }\n {\n S_686abcdf memory r_0_0_2_0_2_1;\n {\n bytes8 r_0_0_2_0_2_1_0 = bytes8(0x83b859bd41d3b1dd);\n r_0_0_2_0_2_1.s_0 = r_0_0_2_0_2_1_0;\n }\n {\n string memory r_0_0_2_0_2_1_1 = unicode\"Moo é🚀ooooo o é oo MMoM🚀 MM🚀Mo 🚀\";\n r_0_0_2_0_2_1.s_1 = r_0_0_2_0_2_1_1;\n }\n {\n int136 r_0_0_2_0_2_1_2 = -38570628417875409241193015294703320129818;\n r_0_0_2_0_2_1.s_2 = r_0_0_2_0_2_1_2;\n }\n {\n address r_0_0_2_0_2_1_3 = 0xdfFB4db271e9C42b516C388Fc3f41ab308A082D2;\n r_0_0_2_0_2_1.s_3 = r_0_0_2_0_2_1_3;\n }\n {\n string memory r_0_0_2_0_2_1_4 = unicode\"Moo é🚀o🚀🚀oooo🚀🚀o o ééoo \";\n r_0_0_2_0_2_1.s_4 = r_0_0_2_0_2_1_4;\n }\n r_0_0_2_0_2.s_1 = r_0_0_2_0_2_1;\n }\n {\n address r_0_0_2_0_2_2 = 0xE5a7F76Df50d7Ce72D1509921Ae1CbFc2C0dAd01;\n r_0_0_2_0_2.s_2 = r_0_0_2_0_2_2;\n }\n {\n address r_0_0_2_0_2_3 = 0x14bec285c86B9BD4db9FC61cea309D26a10c0d6d;\n r_0_0_2_0_2.s_3 = r_0_0_2_0_2_3;\n }\n {\n bool r_0_0_2_0_2_4 = true;\n r_0_0_2_0_2.s_4 = r_0_0_2_0_2_4;\n }\n r_0_0_2_0[2] = r_0_0_2_0_2;\n }\n r_0_0_2.s_0 = r_0_0_2_0;\n }\n {\n string memory r_0_0_2_1 = unicode\"Moo é🚀🚀🚀 o oéoM 🚀é🚀é o🚀é\";\n r_0_0_2.s_1 = r_0_0_2_1;\n }\n {\n bytes25[4] memory r_0_0_2_2;\n {\n bytes25 r_0_0_2_2_0 = bytes25(0xc3458961d6444147d02355ff44ae2cfa02de0c460d986dec90);\n r_0_0_2_2[0] = r_0_0_2_2_0;\n }\n {\n bytes25 r_0_0_2_2_1 = bytes25(0x2ebae44e1804ac3bcc939c68ec912c10feb8acad9a4f0a779b);\n r_0_0_2_2[1] = r_0_0_2_2_1;\n }\n {\n bytes25 r_0_0_2_2_2 = bytes25(0x77b0bc67ff3ecc53c6d06abab804afd33a31f49f6b936cda43);\n r_0_0_2_2[2] = r_0_0_2_2_2;\n }\n {\n bytes25 r_0_0_2_2_3 = bytes25(0xa68fc6e4ce68768b3419f0d1e1e4a50eac0ddeac60a88fe57d);\n r_0_0_2_2[3] = r_0_0_2_2_3;\n }\n r_0_0_2.s_2 = r_0_0_2_2;\n }\n {\n address r_0_0_2_3 = 0xCFE08AB4b2239EB0775B46EB540549bA5DeeFF63;\n r_0_0_2.s_3 = r_0_0_2_3;\n }\n {\n S_421683f8 memory r_0_0_2_4;\n {\n address r_0_0_2_4_0 = 0x27285c37d4070Ea4a513930c605Eb8A5DAfB11fA;\n r_0_0_2_4.s_0 = r_0_0_2_4_0;\n }\n r_0_0_2.s_4 = r_0_0_2_4;\n }\n r_0_0[2] = r_0_0_2;\n }\n r_0[0] = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n address r_1 = 0xbd8aED6E7cB55bEC1B9C76CED5B84A824E51059e;\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n {\n bool[1][][4] memory r_3;\n {\n bool[1][] memory r_3_0 = new bool[1][](0);\n r_3[0] = r_3_0;\n }\n {\n bool[1][] memory r_3_1 = new bool[1][](4);\n {\n bool[1] memory r_3_1_0;\n {\n bool r_3_1_0_0 = true;\n r_3_1_0[0] = r_3_1_0_0;\n }\n r_3_1[0] = r_3_1_0;\n }\n {\n bool[1] memory r_3_1_1;\n {\n bool r_3_1_1_0 = false;\n r_3_1_1[0] = r_3_1_1_0;\n }\n r_3_1[1] = r_3_1_1;\n }\n {\n bool[1] memory r_3_1_2;\n {\n bool r_3_1_2_0 = true;\n r_3_1_2[0] = r_3_1_2_0;\n }\n r_3_1[2] = r_3_1_2;\n }\n {\n bool[1] memory r_3_1_3;\n {\n bool r_3_1_3_0 = false;\n r_3_1_3[0] = r_3_1_3_0;\n }\n r_3_1[3] = r_3_1_3;\n }\n r_3[1] = r_3_1;\n }\n {\n bool[1][] memory r_3_2 = new bool[1][](2);\n {\n bool[1] memory r_3_2_0;\n {\n bool r_3_2_0_0 = true;\n r_3_2_0[0] = r_3_2_0_0;\n }\n r_3_2[0] = r_3_2_0;\n }\n {\n bool[1] memory r_3_2_1;\n {\n bool r_3_2_1_0 = false;\n r_3_2_1[0] = r_3_2_1_0;\n }\n r_3_2[1] = r_3_2_1;\n }\n r_3[2] = r_3_2;\n }\n {\n bool[1][] memory r_3_3 = new bool[1][](2);\n {\n bool[1] memory r_3_3_0;\n {\n bool r_3_3_0_0 = false;\n r_3_3_0[0] = r_3_3_0_0;\n }\n r_3_3[0] = r_3_3_0;\n }\n {\n bool[1] memory r_3_3_1;\n {\n bool r_3_3_1_0 = false;\n r_3_3_1[0] = r_3_3_1_0;\n }\n r_3_3[1] = r_3_3_1;\n }\n r_3[3] = r_3_3;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000bd8aed6e7cb55bec1b9c76ced5b84a824e51059e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000009e0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001208f43d76e459fe48836439c119766a9972de87979784adb709300000000000000f035dbeeb827db57bdd152143aa7227ea3caa536ca91ab9c28000000000000007157fd0b968af9f078e5ff25560c0805d6eea81aea26a125270000000000000067428f6ba9b11f41abeae45b5f6d63ea13a1225947133bedca0000000000000000000000000000000000000027562256d4a4d74db2c0556ed18967ad09bed13600000000000000000000000095decbb049174fb0bddd866871161eaeec3716b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a80f09f9a806f4d6f20c3a9f09f9a802020c3a9f09f9a80f09f9a80c3a96f6f20c3a920206ff09f9a80c3a94dc3a96f6f206f6f6f20c3a9f09f9a8020f09f9a806f6f6f20c3a96f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000780cd9f59f7ed4ee3d9651bd21837c09bda3b5a36554f9e9036e300000000000000790128a278a0737971f5aaca828f1840827b9df01476437d20000000000000005be83768730574f58be32b61daeec53e59dd6f2b3e26299fef0000000000000066fb7e9eb7a80d9b2558e72ed88e5f72a8ee9e5145e742f3a800000000000000000000000000000000000000e4f3a16becb949e8f949169513b05cdd3cb0f8a2000000000000000000000000d636efdcd5534c19f7312fb5d1fa8eaf13fc4fd20000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000004a0000000000000000000000000249d492410cf2e84b96f400d34e97480fc355da600000000000000000000000000000000000000000000000000000000000000a000000000000000000000000033c34511989733edbe05700bd90a6413e400af020000000000000000000000007a5af02956997409945fb5ecba07a66b1619b7ba0000000000000000000000000000000000000000000000000000000000000000021e01e9e6372c1d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000007944e8bc6a018c4ac718c9c755fd6815fa0000000000000000000000009fcfa343660100ce99faf065d55f7f03983b46ee000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a804dc3a9f09f9a80f09f9a804d20c3a9f09f9a806f6f6fc3a94df09f9a80c3a9204dc3a96f6f6ff09f9a80f09f9a8020204d6ff09f9a806f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000694d6f6f20c3a9f09f9a80f09f9a806f4df09f9a804d6f6fc3a9f09f9a80c3a9f09f9a802020c3a9c3a94df09f9a804d4dc3a96f6f4d6f6f4d6f6f6fc3a96f2020c3a96fc3a96f20f09f9a806fc3a94d6f4dc3a94df09f9a8020c3a9f09f9a80206ff09f9a80c3a96f4d0000000000000000000000000000000000000000000000000000000000000000000000eecb35a823bffe10d39d11d2f1ce33a1f43532b300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000aee192252d2376ca76555e79d764873af1fd6b13000000000000000000000000f0b2474666c292d57163bacee73183e4b384387c0000000000000000000000000000000000000000000000000000000000000000df6ddaf61837847400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0ffffffffffffffffffffffffffffffa47f7beb6e3649a2f33aceff391899531c0000000000000000000000000697c90e051fb3a4be026639d89b217f34c438b600000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a806f4d6ff09f9a804d6f4d6f206f206ff09f9a80206f4d6f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0a3d45bcc321dc273129d6b5342577af3d784a800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000003c42512b28523046e33a96c526514ddd544ac1fd00000000000000000000000057af2e20256df53132912f74fb511e2a23b51fdd000000000000000000000000000000000000000000000000000000000000000152b3fa43831f759500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000151cd80c2a43a89b203c21de44280e59b80000000000000000000000005a6022407bbbe21fb371b21802e3cb7a00a7f72400000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a80206f6f6f4d4d6f206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000204d6f6f20c3a9f09f9a80f09f9a80206ff09f9a806f6f4df09f9a80c3a9c3a92000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a806f204d6f4df09f9a806f6f6ff09f9a8020c3a96ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000840c3458961d6444147d02355ff44ae2cfa02de0c460d986dec90000000000000002ebae44e1804ac3bcc939c68ec912c10feb8acad9a4f0a779b0000000000000077b0bc67ff3ecc53c6d06abab804afd33a31f49f6b936cda4300000000000000a68fc6e4ce68768b3419f0d1e1e4a50eac0ddeac60a88fe57d00000000000000000000000000000000000000cfe08ab4b2239eb0775b46eb540549ba5deeff6300000000000000000000000027285c37d4070ea4a513930c605eb8a5dafb11fa0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000520000000000000000000000000dbfe81bdc618d5e09d822b300864fc5860dd9c5500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a79e9cb848533e33875fc2b310213362fa6af598000000000000000000000000e0094967b4f59a581ef1c7caf7da1ccf32daa969000000000000000000000000000000000000000000000000000000000000000157c830e14c33653f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000001e741b1c0ea72a684071f2ebbfd1287ed3000000000000000000000000ee527586bd65247d7751d6168d20ec834ee72ba80000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a80c3a94df09f9a806f4d6f6f20f09f9a804d20f09f9a80c3a9c3a96f6ff09f9a804d6f206f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000624d6f6f20c3a9f09f9a804df09f9a806f4d4d6f6f6ff09f9a806f4d20f09f9a80c3a96f6f4dc3a9f09f9a80c3a920c3a9c3a96f6fc3a96f4df09f9a8020c3a96ff09f9a80c3a9204dc3a9c3a9206f20f09f9a8020f09f9a802020c3a96f206f6f6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000d737cef1e0603e2cdfaeddc9827502b033f1c5ab00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000008c66d2bf186ee0fc8a99a3aa69e28a80ca3d8209000000000000000000000000f9d0f0c3bab03a1fca8f784b55c026ab1f9071290000000000000000000000000000000000000000000000000000000000000001eff12b120e3f9d6900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000002324306ea56b3f4546f5849c18b38748ee000000000000000000000000c391e80eafbeeae9ccbf3057149319ac91030157000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a80f09f9a80f09f9a806f6fc3a9f09f9a806f6f20f09f9a806fc3a9f09f9a806f6ff09f9a804df09f9a804d6f206f6ff09f9a80c3a96f6ff09f9a806f6f6f6fc3a9c3a96f20f09f9a806f204dc3a9c3a920f09f9a80f09f9a804d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a80f09f9a806f6f6f4dc3a96ff09f9a806f206f20f09f9a80c3a9f09f9a806ff09f9a80f09f9a806f6f4d4d6f6fc3a94d4df09f9a80f09f9a806f204dc3a9206f204dc3a96ff09f9a80f09f9a806f6fc3a94d20c3a96f6f206f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000cdd3d8263e25502abfaad5255b12064a9b900ffd00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000e5a7f76df50d7ce72d1509921ae1cbfc2c0dad0100000000000000000000000014bec285c86b9bd4db9fc61cea309d26a10c0d6d000000000000000000000000000000000000000000000000000000000000000183b859bd41d3b1dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0ffffffffffffffffffffffffffffff8ea6af2cf54dea4ab6dd41bd4729a49ee6000000000000000000000000dffb4db271e9c42b516c388fc3f41ab308a082d20000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a806f6f6f6f6f206f20c3a920206f6f204d4d6f4df09f9a80204d4df09f9a804d6f20f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a806ff09f9a80f09f9a806f6f6f6ff09f9a80f09f9a806f206f2020c3a9c3a96f6f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80206f206fc3a96f4d20f09f9a80c3a9f09f9a80c3a9206ff09f9a80c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes12,(bool[1],((bool,bytes6,(int96,bytes17,address[1]),int216),bool,address,string[2]),address,bool,int216)[2],(bytes26[1],uint72)[1][4])", + "type": "(bytes12,(bool[1],((bool,bytes6,(int96,bytes17,address[1]),int216),bool,address,string[2]),address,bool,int216)[2],(bytes26[1],uint72)[1][4])", + "value": [ + "0x53f5aca5c337a6c4e4431d72", + [ + [ + [false], + [ + [ + false, + "0x0459af93ff15", + [ + "-1971481084983213762991294426", + "0x334370eb969e54f9f9a6797ce5b26d69a4", + ["0x5777a1622dA18A644c9Ece970AB481096D6b6785"] + ], + "40803334357589702835248104181007008695506356321232760585881391362" + ], + true, + "0xA63603C3E83fe5AfFD512c4757e12704D57edE06", + ["Moo é🚀🚀éo🚀🚀oo ooé🚀 Mé éoMo", "Moo é🚀"] + ], + "0xc941Ff66A427EA171bf2914600E0e1190B7195d8", + true, + "51058849365927828416897941719704376935603890168361591909656805788" + ], + [ + [true], + [ + [ + true, + "0x44c424db4462", + [ + "3040682035426292858005706211", + "0x04576614aebf9df5f412dc8070e1b3f880", + ["0xb126e7A9fe6838C58cD6FcfB7aaeD52023e1eB58"] + ], + "36539763564443667408874316987657089023188009277806280294774565176" + ], + false, + "0x67C55D695ef8202aCc2AA6aeF8dD600CFb4617C5", + ["Moo é🚀 oo", "Moo é🚀oM🚀o🚀🚀ooé oéM éMMMoMéM🚀🚀🚀MMoéMo"] + ], + "0xFBa585d4539c5dBa57261fe3E378FfF8Ef8922f7", + false, + "-24578961906272079566045346142590683337501256663213591040882424049" + ] + ], + [ + [ + [ + ["0x1cce66ed41ce4daa4c2c3f325402f0ea84eb72e70f45db421d7d"], + "882759070998650718416" + ] + ], + [ + [ + ["0xeed637dfd60e96516dbbf9773072fa785db80df9cb64fd36cb0f"], + "3485286420009806226919" + ] + ], + [ + [ + ["0x13a1aacc856d1fb4ee25c3219793d4f53602460a93c4ca520775"], + "1639765765829936911687" + ] + ], + [ + [ + ["0xcad7c6e65ecc5a81ce2c6d1e8b3ae6e6644c72451c27e85dd334"], + "1618529194808791461717" + ] + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x53f5aca5c337a6c4e4431d72" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x0459af93ff15" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-1971481084983213762991294426" + }, + { + "type": "hexstring", + "value": "0x334370eb969e54f9f9a6797ce5b26d69a4" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x5777a1622dA18A644c9Ece970AB481096D6b6785" + } + ] + } + ] + }, + { + "type": "number", + "value": "40803334357589702835248104181007008695506356321232760585881391362" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xA63603C3E83fe5AfFD512c4757e12704D57edE06" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀éo🚀🚀oo ooé🚀 Mé éoMo" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xc941Ff66A427EA171bf2914600E0e1190B7195d8" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "51058849365927828416897941719704376935603890168361591909656805788" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x44c424db4462" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "3040682035426292858005706211" + }, + { + "type": "hexstring", + "value": "0x04576614aebf9df5f412dc8070e1b3f880" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xb126e7A9fe6838C58cD6FcfB7aaeD52023e1eB58" + } + ] + } + ] + }, + { + "type": "number", + "value": "36539763564443667408874316987657089023188009277806280294774565176" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x67C55D695ef8202aCc2AA6aeF8dD600CFb4617C5" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oo" + }, + { + "type": "string", + "value": "Moo é🚀oM🚀o🚀🚀ooé oéM éMMMoMéM🚀🚀🚀MMoéMo" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xFBa585d4539c5dBa57261fe3E378FfF8Ef8922f7" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-24578961906272079566045346142590683337501256663213591040882424049" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x1cce66ed41ce4daa4c2c3f325402f0ea84eb72e70f45db421d7d" + } + ] + }, + { + "type": "number", + "value": "882759070998650718416" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xeed637dfd60e96516dbbf9773072fa785db80df9cb64fd36cb0f" + } + ] + }, + { + "type": "number", + "value": "3485286420009806226919" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x13a1aacc856d1fb4ee25c3219793d4f53602460a93c4ca520775" + } + ] + }, + { + "type": "number", + "value": "1639765765829936911687" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xcad7c6e65ecc5a81ce2c6d1e8b3ae6e6644c72451c27e85dd334" + } + ] + }, + { + "type": "number", + "value": "1618529194808791461717" + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610a2b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610897565b60405180910390f35b6100566104e4565b61005e6104e4565b6b29fad652e19bd36272218eb960a11b8152610078610511565b61008061053e565b610088610579565b600081528152610096610597565b61009e6105c5565b60008152650459af93ff1560d01b60208201526100b96105f1565b6b065ec55bc48450fe13cf07d9198152700cd0dc3ae5a7953e7e699e5f396c9b5a69607a1b60208201526100eb610579565b735777a1622da18a644c9ece970ab481096d6b67858152604082810191909152828101919091527a632ffa30f4822b0d6682e88c1ff4c1b61f69366a2126e59410110260608301529082526001602083015273a63603c3e83fe5affd512c4757e12704d57ede069082015261015e610610565b60006040518060600160405280602e81526020016109c8602e9139825250604080518082018252600a8152689adede418753e13f3560b71b6020808301919091528084019190915260608481019390935284019290925273c941ff66a427ea171bf2914600e0e1190b7195d8918301919091526001908201527a7c1dfffddd5d2e07e76655cbb5e61e9d6fea5149ee1de6759fc19c6080820152815261020261053e565b61020a610579565b600181528152610218610597565b6102206105c5565b60018152652262126da23160d11b602082015261023b6105f1565b6b09d331776eadf0a35ca355e381526f08aecc295d7f3bebe825b900e1c367f1607f1b602082015261026b610579565b73b126e7a9fe6838c58cd6fcfb7aaed52023e1eb588152604082810191909152828101919091527a58d2c02d4aada6f2fa94ad8d73c4111b8097dbf67417c6464369386060830152908252600060208301527367c55d695ef8202acc2aa6aef8dd600cfb4617c5908201526102de610610565b604080518082018252600e81526d4d6f6f20c3a9f09f9a8020206f6f60901b6020808301919091529083528151606081018352828152600092909161098890830139602080840191909152606084810193909352848101939093525073fba585d4539c5dba57261fe3e378fff8ef8922f760408401526000908301527a3bbf868a29386a4a573e4ea00cd07f378dfaf32d372b2ee7fcb8f01960808301528281019190915282015261038e610637565b610396610664565b61039e610691565b6103a6610579565b7f1cce66ed41ce4daa4c2c3f325402f0ea84eb72e70f45db421d7d00000000000081528152682fdabe3a03e86888d06020820152815281526103e6610664565b6103ee610691565b6103f6610579565b7feed637dfd60e96516dbbf9773072fa785db80df9cb64fd36cb0f0000000000008152815268bcf010bd28f96465e760208281019190915290825282015261043c610664565b610444610691565b61044c610579565b7f13a1aacc856d1fb4ee25c3219793d4f53602460a93c4ca520775000000000000815281526858e452442bc3c1954760208201528152604082015261048f610664565b610497610691565b61049f610579565b7fcad7c6e65ecc5a81ce2c6d1e8b3ae6e6644c72451c27e85dd334000000000000815281526857bd9acf57e906ef556020820152815260608201526040820152919050565b604080516060810190915260008152602081016104ff610511565b815260200161050c610637565b905290565b60405180604001604052806002905b61052861053e565b8152602001906001900390816105205790505090565b6040518060a00160405280610551610579565b815260200161055e610597565b81526000602082018190526040820181905260609091015290565b60405180602001604052806001906020820280368337509192915050565b60405180608001604052806105aa6105c5565b8152600060208201819052604082015260600161050c610610565b60408051608081018252600080825260208201529081016105e46105f1565b8152600060209091015290565b604080516060810182526000808252602082015290810161050c610579565b60405180604001604052806002905b606081526020019060019003908161061f5790505090565b60405180608001604052806004905b61064e610664565b8152602001906001900390816106465790505090565b60405180602001604052806001905b61067b610691565b8152602001906001900390816106735790505090565b60405180604001604052806105e4610579565b60008260408101836000805b600281101561071a57848403885282518051808652835b818110156106e3576020818401810151888301820152016106c7565b818111156106f45784602083890101525b506020998a0199601f91909101601f1916959095018501949390930192506001016106b0565b50919695505050505050565b80518051151583526020808201516001600160d01b031916818501526040808301518051600b0b82870152808301516effffffffffffffffffffffffffffff19166060870152015160009261012092909160808701855b60018110156107a35782516001600160a01b03168252918301919083019060010161077d565b505050606082015191506107bc60a0870183601a0b9052565b840151151560c08601525060408301516001600160a01b031660e0850152606083015161010085018290526107f3828601826106a4565b95945050505050565b8060005b60048110156108915781518460005b600180821061081e5750610878565b835180518460005b8481101561084c57825165ffffffffffff19168252602092830192909101908401610826565b50505060209081015168ffffffffffffffffff168482015293909301925060409091019060010161080f565b5050506040939093019260209190910190600101610800565b50505050565b602080825282516001600160a01b0319168282015282810151610140604080850191909152600092916101a0850191610160860185805b60028110156109685788860361015f190183528451805160a09088855b600181101561090a57825115158252918b0191908b01906001016108eb565b50505088820151818a8a0152610922828a0182610726565b9150508582015161093d878a01826001600160a01b03169052565b50606082810151151590890152608091820151601a0b919097015293860193918601916001016108ce565b505050860151925061097f905060608501836107fc565b94935050505056fe4d6f6f20c3a9f09f9a806f4df09f9a806ff09f9a80f09f9a806f6fc3a9206fc3a94d20c3a94d4d4d6f4dc3a94df09f9a80f09f9a80f09f9a804d4d6fc3a94d6f4d6f6f20c3a9f09f9a80f09f9a80c3a96ff09f9a80f09f9a806f6f206f6fc3a9f09f9a80204dc3a920c3a96f4d6fa26469706673582212200ae9cd68a955770617c3a3fec31cae76f5df9aa454388ec6cce6951519a465f064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5d816ab6 {\n int96 s_0;\n bytes17 s_1;\n address[1] s_2;\n }\n\n struct S_7466de91 {\n bool s_0;\n bytes6 s_1;\n S_5d816ab6 s_2;\n int216 s_3;\n }\n\n struct S_17d737f2 {\n S_7466de91 s_0;\n bool s_1;\n address s_2;\n string[2] s_3;\n }\n\n struct S_ffddc76d {\n bool[1] s_0;\n S_17d737f2 s_1;\n address s_2;\n bool s_3;\n int216 s_4;\n }\n\n struct S_95d62f8c {\n bytes26[1] s_0;\n uint72 s_1;\n }\n\n struct S_5c624a1a {\n bytes12 s_0;\n S_ffddc76d[2] s_1;\n S_95d62f8c[1][4] s_2;\n }\n\n function test () public pure returns (S_5c624a1a memory) {\n S_5c624a1a memory r;\n {\n bytes12 r_0 = bytes12(0x53f5aca5c337a6c4e4431d72);\n r.s_0 = r_0;\n }\n {\n S_ffddc76d[2] memory r_1;\n {\n S_ffddc76d memory r_1_0;\n {\n bool[1] memory r_1_0_0;\n {\n bool r_1_0_0_0 = false;\n r_1_0_0[0] = r_1_0_0_0;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n S_17d737f2 memory r_1_0_1;\n {\n S_7466de91 memory r_1_0_1_0;\n {\n bool r_1_0_1_0_0 = false;\n r_1_0_1_0.s_0 = r_1_0_1_0_0;\n }\n {\n bytes6 r_1_0_1_0_1 = bytes6(0x0459af93ff15);\n r_1_0_1_0.s_1 = r_1_0_1_0_1;\n }\n {\n S_5d816ab6 memory r_1_0_1_0_2;\n {\n int96 r_1_0_1_0_2_0 = -1971481084983213762991294426;\n r_1_0_1_0_2.s_0 = r_1_0_1_0_2_0;\n }\n {\n bytes17 r_1_0_1_0_2_1 = bytes17(0x334370eb969e54f9f9a6797ce5b26d69a4);\n r_1_0_1_0_2.s_1 = r_1_0_1_0_2_1;\n }\n {\n address[1] memory r_1_0_1_0_2_2;\n {\n address r_1_0_1_0_2_2_0 = 0x5777a1622dA18A644c9Ece970AB481096D6b6785;\n r_1_0_1_0_2_2[0] = r_1_0_1_0_2_2_0;\n }\n r_1_0_1_0_2.s_2 = r_1_0_1_0_2_2;\n }\n r_1_0_1_0.s_2 = r_1_0_1_0_2;\n }\n {\n int216 r_1_0_1_0_3 = 40803334357589702835248104181007008695506356321232760585881391362;\n r_1_0_1_0.s_3 = r_1_0_1_0_3;\n }\n r_1_0_1.s_0 = r_1_0_1_0;\n }\n {\n bool r_1_0_1_1 = true;\n r_1_0_1.s_1 = r_1_0_1_1;\n }\n {\n address r_1_0_1_2 = 0xA63603C3E83fe5AfFD512c4757e12704D57edE06;\n r_1_0_1.s_2 = r_1_0_1_2;\n }\n {\n string[2] memory r_1_0_1_3;\n {\n string memory r_1_0_1_3_0 = unicode\"Moo é🚀🚀éo🚀🚀oo ooé🚀 Mé éoMo\";\n r_1_0_1_3[0] = r_1_0_1_3_0;\n }\n {\n string memory r_1_0_1_3_1 = unicode\"Moo é🚀\";\n r_1_0_1_3[1] = r_1_0_1_3_1;\n }\n r_1_0_1.s_3 = r_1_0_1_3;\n }\n r_1_0.s_1 = r_1_0_1;\n }\n {\n address r_1_0_2 = 0xc941Ff66A427EA171bf2914600E0e1190B7195d8;\n r_1_0.s_2 = r_1_0_2;\n }\n {\n bool r_1_0_3 = true;\n r_1_0.s_3 = r_1_0_3;\n }\n {\n int216 r_1_0_4 = 51058849365927828416897941719704376935603890168361591909656805788;\n r_1_0.s_4 = r_1_0_4;\n }\n r_1[0] = r_1_0;\n }\n {\n S_ffddc76d memory r_1_1;\n {\n bool[1] memory r_1_1_0;\n {\n bool r_1_1_0_0 = true;\n r_1_1_0[0] = r_1_1_0_0;\n }\n r_1_1.s_0 = r_1_1_0;\n }\n {\n S_17d737f2 memory r_1_1_1;\n {\n S_7466de91 memory r_1_1_1_0;\n {\n bool r_1_1_1_0_0 = true;\n r_1_1_1_0.s_0 = r_1_1_1_0_0;\n }\n {\n bytes6 r_1_1_1_0_1 = bytes6(0x44c424db4462);\n r_1_1_1_0.s_1 = r_1_1_1_0_1;\n }\n {\n S_5d816ab6 memory r_1_1_1_0_2;\n {\n int96 r_1_1_1_0_2_0 = 3040682035426292858005706211;\n r_1_1_1_0_2.s_0 = r_1_1_1_0_2_0;\n }\n {\n bytes17 r_1_1_1_0_2_1 = bytes17(0x04576614aebf9df5f412dc8070e1b3f880);\n r_1_1_1_0_2.s_1 = r_1_1_1_0_2_1;\n }\n {\n address[1] memory r_1_1_1_0_2_2;\n {\n address r_1_1_1_0_2_2_0 = 0xb126e7A9fe6838C58cD6FcfB7aaeD52023e1eB58;\n r_1_1_1_0_2_2[0] = r_1_1_1_0_2_2_0;\n }\n r_1_1_1_0_2.s_2 = r_1_1_1_0_2_2;\n }\n r_1_1_1_0.s_2 = r_1_1_1_0_2;\n }\n {\n int216 r_1_1_1_0_3 = 36539763564443667408874316987657089023188009277806280294774565176;\n r_1_1_1_0.s_3 = r_1_1_1_0_3;\n }\n r_1_1_1.s_0 = r_1_1_1_0;\n }\n {\n bool r_1_1_1_1 = false;\n r_1_1_1.s_1 = r_1_1_1_1;\n }\n {\n address r_1_1_1_2 = 0x67C55D695ef8202aCc2AA6aeF8dD600CFb4617C5;\n r_1_1_1.s_2 = r_1_1_1_2;\n }\n {\n string[2] memory r_1_1_1_3;\n {\n string memory r_1_1_1_3_0 = unicode\"Moo é🚀 oo\";\n r_1_1_1_3[0] = r_1_1_1_3_0;\n }\n {\n string memory r_1_1_1_3_1 = unicode\"Moo é🚀oM🚀o🚀🚀ooé oéM éMMMoMéM🚀🚀🚀MMoéMo\";\n r_1_1_1_3[1] = r_1_1_1_3_1;\n }\n r_1_1_1.s_3 = r_1_1_1_3;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n {\n address r_1_1_2 = 0xFBa585d4539c5dBa57261fe3E378FfF8Ef8922f7;\n r_1_1.s_2 = r_1_1_2;\n }\n {\n bool r_1_1_3 = false;\n r_1_1.s_3 = r_1_1_3;\n }\n {\n int216 r_1_1_4 = -24578961906272079566045346142590683337501256663213591040882424049;\n r_1_1.s_4 = r_1_1_4;\n }\n r_1[1] = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n S_95d62f8c[1][4] memory r_2;\n {\n S_95d62f8c[1] memory r_2_0;\n {\n S_95d62f8c memory r_2_0_0;\n {\n bytes26[1] memory r_2_0_0_0;\n {\n bytes26 r_2_0_0_0_0 = bytes26(0x1cce66ed41ce4daa4c2c3f325402f0ea84eb72e70f45db421d7d);\n r_2_0_0_0[0] = r_2_0_0_0_0;\n }\n r_2_0_0.s_0 = r_2_0_0_0;\n }\n {\n uint72 r_2_0_0_1 = 882759070998650718416;\n r_2_0_0.s_1 = r_2_0_0_1;\n }\n r_2_0[0] = r_2_0_0;\n }\n r_2[0] = r_2_0;\n }\n {\n S_95d62f8c[1] memory r_2_1;\n {\n S_95d62f8c memory r_2_1_0;\n {\n bytes26[1] memory r_2_1_0_0;\n {\n bytes26 r_2_1_0_0_0 = bytes26(0xeed637dfd60e96516dbbf9773072fa785db80df9cb64fd36cb0f);\n r_2_1_0_0[0] = r_2_1_0_0_0;\n }\n r_2_1_0.s_0 = r_2_1_0_0;\n }\n {\n uint72 r_2_1_0_1 = 3485286420009806226919;\n r_2_1_0.s_1 = r_2_1_0_1;\n }\n r_2_1[0] = r_2_1_0;\n }\n r_2[1] = r_2_1;\n }\n {\n S_95d62f8c[1] memory r_2_2;\n {\n S_95d62f8c memory r_2_2_0;\n {\n bytes26[1] memory r_2_2_0_0;\n {\n bytes26 r_2_2_0_0_0 = bytes26(0x13a1aacc856d1fb4ee25c3219793d4f53602460a93c4ca520775);\n r_2_2_0_0[0] = r_2_2_0_0_0;\n }\n r_2_2_0.s_0 = r_2_2_0_0;\n }\n {\n uint72 r_2_2_0_1 = 1639765765829936911687;\n r_2_2_0.s_1 = r_2_2_0_1;\n }\n r_2_2[0] = r_2_2_0;\n }\n r_2[2] = r_2_2;\n }\n {\n S_95d62f8c[1] memory r_2_3;\n {\n S_95d62f8c memory r_2_3_0;\n {\n bytes26[1] memory r_2_3_0_0;\n {\n bytes26 r_2_3_0_0_0 = bytes26(0xcad7c6e65ecc5a81ce2c6d1e8b3ae6e6644c72451c27e85dd334);\n r_2_3_0_0[0] = r_2_3_0_0_0;\n }\n r_2_3_0.s_0 = r_2_3_0_0;\n }\n {\n uint72 r_2_3_0_1 = 1618529194808791461717;\n r_2_3_0.s_1 = r_2_3_0_1;\n }\n r_2_3[0] = r_2_3_0;\n }\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002053f5aca5c337a6c4e4431d72000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001401cce66ed41ce4daa4c2c3f325402f0ea84eb72e70f45db421d7d00000000000000000000000000000000000000000000000000000000002fdabe3a03e86888d0eed637dfd60e96516dbbf9773072fa785db80df9cb64fd36cb0f0000000000000000000000000000000000000000000000000000000000bcf010bd28f96465e713a1aacc856d1fb4ee25c3219793d4f53602460a93c4ca520775000000000000000000000000000000000000000000000000000000000058e452442bc3c19547cad7c6e65ecc5a81ce2c6d1e8b3ae6e6644c72451c27e85dd334000000000000000000000000000000000000000000000000000000000057bd9acf57e906ef55000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000c941ff66a427ea171bf2914600e0e1190b7195d8000000000000000000000000000000000000000000000000000000000000000100000000007c1dfffddd5d2e07e76655cbb5e61e9d6fea5149ee1de6759fc19c00000000000000000000000000000000000000000000000000000000000000000459af93ff150000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffff9a13aa43b7baf01ec30f826334370eb969e54f9f9a6797ce5b26d69a40000000000000000000000000000000000000000000000000000005777a1622da18a644c9ece970ab481096d6b67850000000000632ffa30f4822b0d6682e88c1ff4c1b61f69366a2126e5941011020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a63603c3e83fe5affd512c4757e12704d57ede060000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a80f09f9a80c3a96ff09f9a80f09f9a806f6f206f6fc3a9f09f9a80204dc3a920c3a96f4d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000fba585d4539c5dba57261fe3e378fff8ef8922f70000000000000000000000000000000000000000000000000000000000000000ffffffffffc4407975d6c795b5a8c1b15ff32f80c872050cd2c8d4d11803470f000000000000000000000000000000000000000000000000000000000000000144c424db44620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d331776eadf0a35ca355e304576614aebf9df5f412dc8070e1b3f880000000000000000000000000000000000000000000000000000000b126e7a9fe6838c58cd6fcfb7aaed52023e1eb58000000000058d2c02d4aada6f2fa94ad8d73c4111b8097dbf67417c646436938000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067c55d695ef8202acc2aa6aef8dd600cfb4617c5000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a8020206f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000404d6f6f20c3a9f09f9a806f4df09f9a806ff09f9a80f09f9a806f6fc3a9206fc3a94d20c3a94d4d4d6f4dc3a94df09f9a80f09f9a80f09f9a804d4d6fc3a94d6f" + }, + { + "name": "random-(bytes31,(bool,string,bytes3,((string,(address,string),bytes31,bool,address[2])[3],address,bytes7[],(bytes6,string,uint224[4],string),address[2])),bool)", + "type": "(bytes31,(bool,string,bytes3,((string,(address,string),bytes31,bool,address[2])[3],address,bytes7[],(bytes6,string,uint224[4],string),address[2])),bool)", + "value": [ + "0x71789785ea72517af99f74e3fb407127951340d7d520257a8ebb65f54e1afe", + [ + false, + "Moo é🚀M🚀", + "0x93e73b", + [ + [ + [ + "Moo é🚀oééé🚀é🚀oo🚀éoMooM🚀M 🚀🚀🚀ooMM", + ["0xCCF090B7Ce8Cb7F741202d046af8B380E11963c3", "Moo é🚀oo M M🚀éééMM"], + "0xde4782669f681e3d064817c71067bfc48e736aad3747960ac26b554287bb76", + true, + [ + "0x19C317E543305F4F0739cBd681F799155cE96465", + "0x6b0bD86C29ac1edd4B8822e778ACA20e05E3eb93" + ] + ], + [ + "Moo é🚀M é MéMo MM🚀oéMoéoM🚀🚀o oé🚀🚀oM ooéoo🚀é éM🚀M", + [ + "0x4C85fe8001B39Ee70bD3a7072a6303a0fB00D8D8", + "Moo é🚀éé o oo🚀 oMééoéo" + ], + "0xc8c786624a4d6a960fc904f05353534afdf6100d1a2810bc6c753c536a5b9b", + true, + [ + "0x96626ba13d99EE6d5e0Dc04657475DE9dd5E98f5", + "0xEF1714ae6973eE02dcE5801572e6775d71755741" + ] + ], + [ + "Moo é🚀oo🚀M🚀oéo oo oo Mo o ", + [ + "0x5aD5B31BF0f30D04E89098EC4b4DE3db3E4A975f", + "Moo é🚀o🚀Méo 🚀éé Mo é🚀 oéoM ooMo🚀MooM🚀🚀MoMMMoo🚀M éooo🚀oM" + ], + "0xab25e1c179692e44cfd3cee3ccef1716af35b791ef0f5a788693ff676ab893", + false, + [ + "0xA297AAe107Fe6B2525eceA88945fBc3169955D31", + "0x52E1b0762EEba073cbb8f317020CFCE214F2e85F" + ] + ] + ], + "0x95667A4DCE4F71464986c16681fBdc29Ab44BF33", + ["0xc9d89cac7bfe49", "0x809ab310b3b47b", "0xd6937045a2a627"], + [ + "0x24d9fbed640c", + "Moo é🚀oo Méééooooo🚀o🚀M", + [ + "18260040204669273983367984183841222908336359884446240702289504676480", + "20689410844088486323544556789595477163788398968380336675309503198612", + "9261121455333649860773143397004589990171015849159111998294778383167", + "7274891814480000480114167924079011163663227992870544813085229739982" + ], + "Moo é🚀" + ], + [ + "0xfb32B8204d3A80486de3be80b8e9e3682e3b99Fa", + "0x0B05F899B05Da84E58Fe6545Dd7B6e67BA2bc48F" + ] + ] + ], + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x71789785ea72517af99f74e3fb407127951340d7d520257a8ebb65f54e1afe" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀M🚀" + }, + { + "type": "hexstring", + "value": "0x93e73b" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oééé🚀é🚀oo🚀éoMooM🚀M 🚀🚀🚀ooMM" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xCCF090B7Ce8Cb7F741202d046af8B380E11963c3" + }, + { + "type": "string", + "value": "Moo é🚀oo M M🚀éééMM" + } + ] + }, + { + "type": "hexstring", + "value": "0xde4782669f681e3d064817c71067bfc48e736aad3747960ac26b554287bb76" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x19C317E543305F4F0739cBd681F799155cE96465" + }, + { + "type": "address", + "value": "0x6b0bD86C29ac1edd4B8822e778ACA20e05E3eb93" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M é MéMo MM🚀oéMoéoM🚀🚀o oé🚀🚀oM ooéoo🚀é éM🚀M" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x4C85fe8001B39Ee70bD3a7072a6303a0fB00D8D8" + }, + { + "type": "string", + "value": "Moo é🚀éé o oo🚀 oMééoéo" + } + ] + }, + { + "type": "hexstring", + "value": "0xc8c786624a4d6a960fc904f05353534afdf6100d1a2810bc6c753c536a5b9b" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x96626ba13d99EE6d5e0Dc04657475DE9dd5E98f5" + }, + { + "type": "address", + "value": "0xEF1714ae6973eE02dcE5801572e6775d71755741" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀M🚀oéo oo oo Mo o " + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5aD5B31BF0f30D04E89098EC4b4DE3db3E4A975f" + }, + { + "type": "string", + "value": "Moo é🚀o🚀Méo 🚀éé Mo é🚀 oéoM ooMo🚀MooM🚀🚀MoMMMoo🚀M éooo🚀oM" + } + ] + }, + { + "type": "hexstring", + "value": "0xab25e1c179692e44cfd3cee3ccef1716af35b791ef0f5a788693ff676ab893" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xA297AAe107Fe6B2525eceA88945fBc3169955D31" + }, + { + "type": "address", + "value": "0x52E1b0762EEba073cbb8f317020CFCE214F2e85F" + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0x95667A4DCE4F71464986c16681fBdc29Ab44BF33" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc9d89cac7bfe49" + }, + { + "type": "hexstring", + "value": "0x809ab310b3b47b" + }, + { + "type": "hexstring", + "value": "0xd6937045a2a627" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x24d9fbed640c" + }, + { + "type": "string", + "value": "Moo é🚀oo Méééooooo🚀o🚀M" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "18260040204669273983367984183841222908336359884446240702289504676480" + }, + { + "type": "number", + "value": "20689410844088486323544556789595477163788398968380336675309503198612" + }, + { + "type": "number", + "value": "9261121455333649860773143397004589990171015849159111998294778383167" + }, + { + "type": "number", + "value": "7274891814480000480114167924079011163663227992870544813085229739982" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xfb32B8204d3A80486de3be80b8e9e3682e3b99Fa" + }, + { + "type": "address", + "value": "0x0B05F899B05Da84E58Fe6545Dd7B6e67BA2bc48F" + } + ] + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610be4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906108b3565b60405180910390f35b610056610603565b61005e610603565b7f71789785ea72517af99f74e3fb407127951340d7d520257a8ebb65f54e1afe00815261008961062b565b60008152604080518082018252600f81526d9adede418753e13f35009be13f35608f1b6020808301919091528301526293e73b60e81b908201526100cb610657565b6100d3610692565b6100db6106bf565b60006040518060600160405280603f8152602001610b4c603f91398252506040805180820182526060602080830182815273ccf090b7ce8cb7f741202d046af8b380e11963c3845284518086018652601d81527f4d6f6f20c3a9f09f9a806f6f204d20204df09f9a80c3a9c3a9c3a94d4d0000008184015290528401919091527fde4782669f681e3d064817c71067bfc48e736aad3747960ac26b554287bb760091830191909152600190820152610191610703565b7319c317e543305f4f0739cbd681f799155ce964658152736b0bd86c29ac1edd4b8822e778aca20e05e3eb936020820152608082015281526101d16106bf565b6000604051806080016040528060528152602001610ad460529139825250604080518082019091526000815260606020820152734c85fe8001b39ee70bd3a7072a6303a0fb00d8d881526040805160608101909152602480825260009190610b8b6020830139602080840191909152830191909152507fc8c786624a4d6a960fc904f05353534afdf6100d1a2810bc6c753c536a5b9b0060408201526001606082015261027c610703565b7396626ba13d99ee6d5e0dc04657475de9dd5e98f5815273ef1714ae6973ee02dce5801572e6775d7175574160208083019190915260808301919091528201526102c46106bf565b6000604051806060016040528060268152602001610b2660269139825250604080518082019091526000815260606020820152735ad5b31bf0f30d04e89098ec4b4de3db3e4a975f81526040805160808101909152605c80825260009190610a556020830139602080840191909152830191909152507fab25e1c179692e44cfd3cee3ccef1716af35b791ef0f5a788693ff676ab8930060408201526000606082015261036f610703565b73a297aae107fe6b2525ecea88945fbc3169955d3181527352e1b0762eeba073cbb8f317020cfce214f2e85f6020808301919091526080838101929092526040848101939093529284527395667a4dce4f71464986c16681fbdc29ab44bf33848401528151600380825291810190925260009282016060803683375050815191925066c9d89cac7bfe4960c81b91829150839060009061041157610411610a3e565b6001600160c81b03199092166020928302919091019091015250805166809ab310b3b47b60c81b9081908390600190811061044e5761044e610a3e565b6001600160c81b03199092166020928302919091019091015250805166d6937045a2a62760c81b9081908390600290811061048b5761048b610a3e565b6001600160c81b0319909216602092830291909101909101525060408201526104b2610721565b6509367efb590360d21b81526040805160608101909152602380825260009190610ab160208301396020830152506104e861074e565b7bad63b2eab381c4ede5ddcacf38ba3db61f71094e6d99217ba644aa8081527bc4752bfa2e6c5bf6c3cedb4e369c8c719ef92e2b8d3450aa770535946020808301919091527b57f08a07d9c90fb32eb35081f2c27a2c8b99bb562ec7f9e83e730b3f6040808401919091527b4514484a66b395a2ae34ff5935a279f6b96dbfe8c56557de32f26fce606080850191909152848201939093528051808201909152600a8152689adede418753e13f3560b71b91810191909152828201528201526105af610703565b73fb32b8204d3a80486de3be80b8e9e3682e3b99fa8152730b05f899b05da84e58fe6545dd7b6e67ba2bc48f6020808301919091526080830191909152606083019190915282015260006040820152919050565b6040805160608101909152600081526020810161061e61062b565b8152600060209091015290565b60408051608081018252600080825260606020830181905292820152908101610652610657565b905290565b6040518060a0016040528061066a610692565b81526000602082015260606040820181905201610685610721565b8152602001610652610703565b60405180606001604052806003905b6106a96106bf565b8152602001906001900390816106a15790505090565b6040518060a00160405280606081526020016106ec60408051808201909152600081526060602082015290565b815260006020820181905260408201526060016106525b60405180604001604052806002906020820280368337509192915050565b60408051608081018252600081526060602082015290810161074161074e565b8152602001606081525090565b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b8181101561079257602081850181015186830182015201610776565b818111156107a4576000602083870101525b50601f01601f19169290920160200192915050565b8060005b60028110156107e55781516001600160a01b03168452602093840193909101906001016107bd565b50505050565b600081518084526020808501945080840160005b838110156108255781516001600160c81b031916875295820195908201906001016107ff565b509495945050505050565b65ffffffffffff60d01b8151168252600060208083015160e08286015261085a60e086018261076c565b905060408401516040860160005b600481101561088e5782516001600160e01b031682529184019190840190600101610868565b5050506060840151915084810360c08601526108aa818361076c565b95945050505050565b60006020808352608060ff198086511683860152828601516060604081818901528251151585890152858301518560a08a01526108f46101008a018261076c565b848301516001600160e81b03191660c08b810191909152948401518a8203607f190160e08c0152805186835290959192506101208301919081840160005b60038110156109ca5785850360bf19018252825180518587526109578688018261076c565b90508d8201518782038f89015260018060a01b0381511682528e8101519050898f8301526109878a83018261076c565b9150508b898301511689880152898201516109a58b89018215159052565b50908c0151906109b7878e01836107b9565b955050918b0191908b0190600101610932565b50505050848801516001600160a01b038116838a01529550828501519750818103838301526109f981896107eb565b97505082840151945080870383820152610a138786610830565b9650858401519450610a27868201866107b9565b509097015115159590960194909452509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806ff09f9a804dc3a96f20f09f9a80c3a9c3a920204d6f2020c3a9f09f9a80206fc3a96f4d206f6f4d6ff09f9a804d6f6f4df09f9a80f09f9a804d6f4d4d4d6f6ff09f9a804d2020c3a96f6f6ff09f9a806f4d4d6f6f20c3a9f09f9a806f6f204dc3a9c3a9c3a96f6f6f6f6ff09f9a806ff09f9a804d4d6f6f20c3a9f09f9a804d20c3a9204dc3a94d6f204d4df09f9a806fc3a94d6fc3a96f4df09f9a80f09f9a806f20206fc3a9f09f9a80f09f9a806f4d206f6fc3a96f6ff09f9a80c3a920c3a94df09f9a804d4d6f6f20c3a9f09f9a806f6ff09f9a804df09f9a806fc3a96f206f6f206f6f204d6f206f20204d6f6f20c3a9f09f9a806fc3a9c3a9c3a9f09f9a80c3a9f09f9a806f6ff09f9a80c3a96f4d6f6f4df09f9a804d2020f09f9a80f09f9a80f09f9a806f6f4d4d4d6f6f20c3a9f09f9a80c3a9c3a9206f20206f6ff09f9a8020206f4dc3a9c3a96fc3a96fa264697066735822122007614360a5c3dea1e4ef5c52aeddc6389827a20a4ab42d78b208556164189fc464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8090aaf4 {\n address s_0;\n string s_1;\n }\n\n struct S_308b85cb {\n string s_0;\n S_8090aaf4 s_1;\n bytes31 s_2;\n bool s_3;\n address[2] s_4;\n }\n\n struct S_b53795a6 {\n bytes6 s_0;\n string s_1;\n uint224[4] s_2;\n string s_3;\n }\n\n struct S_15b64894 {\n S_308b85cb[3] s_0;\n address s_1;\n bytes7[] s_2;\n S_b53795a6 s_3;\n address[2] s_4;\n }\n\n struct S_1bd70314 {\n bool s_0;\n string s_1;\n bytes3 s_2;\n S_15b64894 s_3;\n }\n\n struct S_3317076f {\n bytes31 s_0;\n S_1bd70314 s_1;\n bool s_2;\n }\n\n function test () public pure returns (S_3317076f memory) {\n S_3317076f memory r;\n {\n bytes31 r_0 = bytes31(0x71789785ea72517af99f74e3fb407127951340d7d520257a8ebb65f54e1afe);\n r.s_0 = r_0;\n }\n {\n S_1bd70314 memory r_1;\n {\n bool r_1_0 = false;\n r_1.s_0 = r_1_0;\n }\n {\n string memory r_1_1 = unicode\"Moo é🚀M🚀\";\n r_1.s_1 = r_1_1;\n }\n {\n bytes3 r_1_2 = bytes3(0x93e73b);\n r_1.s_2 = r_1_2;\n }\n {\n S_15b64894 memory r_1_3;\n {\n S_308b85cb[3] memory r_1_3_0;\n {\n S_308b85cb memory r_1_3_0_0;\n {\n string memory r_1_3_0_0_0 = unicode\"Moo é🚀oééé🚀é🚀oo🚀éoMooM🚀M 🚀🚀🚀ooMM\";\n r_1_3_0_0.s_0 = r_1_3_0_0_0;\n }\n {\n S_8090aaf4 memory r_1_3_0_0_1;\n {\n address r_1_3_0_0_1_0 = 0xCCF090B7Ce8Cb7F741202d046af8B380E11963c3;\n r_1_3_0_0_1.s_0 = r_1_3_0_0_1_0;\n }\n {\n string memory r_1_3_0_0_1_1 = unicode\"Moo é🚀oo M M🚀éééMM\";\n r_1_3_0_0_1.s_1 = r_1_3_0_0_1_1;\n }\n r_1_3_0_0.s_1 = r_1_3_0_0_1;\n }\n {\n bytes31 r_1_3_0_0_2 = bytes31(0xde4782669f681e3d064817c71067bfc48e736aad3747960ac26b554287bb76);\n r_1_3_0_0.s_2 = r_1_3_0_0_2;\n }\n {\n bool r_1_3_0_0_3 = true;\n r_1_3_0_0.s_3 = r_1_3_0_0_3;\n }\n {\n address[2] memory r_1_3_0_0_4;\n {\n address r_1_3_0_0_4_0 = 0x19C317E543305F4F0739cBd681F799155cE96465;\n r_1_3_0_0_4[0] = r_1_3_0_0_4_0;\n }\n {\n address r_1_3_0_0_4_1 = 0x6b0bD86C29ac1edd4B8822e778ACA20e05E3eb93;\n r_1_3_0_0_4[1] = r_1_3_0_0_4_1;\n }\n r_1_3_0_0.s_4 = r_1_3_0_0_4;\n }\n r_1_3_0[0] = r_1_3_0_0;\n }\n {\n S_308b85cb memory r_1_3_0_1;\n {\n string memory r_1_3_0_1_0 = unicode\"Moo é🚀M é MéMo MM🚀oéMoéoM🚀🚀o oé🚀🚀oM ooéoo🚀é éM🚀M\";\n r_1_3_0_1.s_0 = r_1_3_0_1_0;\n }\n {\n S_8090aaf4 memory r_1_3_0_1_1;\n {\n address r_1_3_0_1_1_0 = 0x4C85fe8001B39Ee70bD3a7072a6303a0fB00D8D8;\n r_1_3_0_1_1.s_0 = r_1_3_0_1_1_0;\n }\n {\n string memory r_1_3_0_1_1_1 = unicode\"Moo é🚀éé o oo🚀 oMééoéo\";\n r_1_3_0_1_1.s_1 = r_1_3_0_1_1_1;\n }\n r_1_3_0_1.s_1 = r_1_3_0_1_1;\n }\n {\n bytes31 r_1_3_0_1_2 = bytes31(0xc8c786624a4d6a960fc904f05353534afdf6100d1a2810bc6c753c536a5b9b);\n r_1_3_0_1.s_2 = r_1_3_0_1_2;\n }\n {\n bool r_1_3_0_1_3 = true;\n r_1_3_0_1.s_3 = r_1_3_0_1_3;\n }\n {\n address[2] memory r_1_3_0_1_4;\n {\n address r_1_3_0_1_4_0 = 0x96626ba13d99EE6d5e0Dc04657475DE9dd5E98f5;\n r_1_3_0_1_4[0] = r_1_3_0_1_4_0;\n }\n {\n address r_1_3_0_1_4_1 = 0xEF1714ae6973eE02dcE5801572e6775d71755741;\n r_1_3_0_1_4[1] = r_1_3_0_1_4_1;\n }\n r_1_3_0_1.s_4 = r_1_3_0_1_4;\n }\n r_1_3_0[1] = r_1_3_0_1;\n }\n {\n S_308b85cb memory r_1_3_0_2;\n {\n string memory r_1_3_0_2_0 = unicode\"Moo é🚀oo🚀M🚀oéo oo oo Mo o \";\n r_1_3_0_2.s_0 = r_1_3_0_2_0;\n }\n {\n S_8090aaf4 memory r_1_3_0_2_1;\n {\n address r_1_3_0_2_1_0 = 0x5aD5B31BF0f30D04E89098EC4b4DE3db3E4A975f;\n r_1_3_0_2_1.s_0 = r_1_3_0_2_1_0;\n }\n {\n string memory r_1_3_0_2_1_1 = unicode\"Moo é🚀o🚀Méo 🚀éé Mo é🚀 oéoM ooMo🚀MooM🚀🚀MoMMMoo🚀M éooo🚀oM\";\n r_1_3_0_2_1.s_1 = r_1_3_0_2_1_1;\n }\n r_1_3_0_2.s_1 = r_1_3_0_2_1;\n }\n {\n bytes31 r_1_3_0_2_2 = bytes31(0xab25e1c179692e44cfd3cee3ccef1716af35b791ef0f5a788693ff676ab893);\n r_1_3_0_2.s_2 = r_1_3_0_2_2;\n }\n {\n bool r_1_3_0_2_3 = false;\n r_1_3_0_2.s_3 = r_1_3_0_2_3;\n }\n {\n address[2] memory r_1_3_0_2_4;\n {\n address r_1_3_0_2_4_0 = 0xA297AAe107Fe6B2525eceA88945fBc3169955D31;\n r_1_3_0_2_4[0] = r_1_3_0_2_4_0;\n }\n {\n address r_1_3_0_2_4_1 = 0x52E1b0762EEba073cbb8f317020CFCE214F2e85F;\n r_1_3_0_2_4[1] = r_1_3_0_2_4_1;\n }\n r_1_3_0_2.s_4 = r_1_3_0_2_4;\n }\n r_1_3_0[2] = r_1_3_0_2;\n }\n r_1_3.s_0 = r_1_3_0;\n }\n {\n address r_1_3_1 = 0x95667A4DCE4F71464986c16681fBdc29Ab44BF33;\n r_1_3.s_1 = r_1_3_1;\n }\n {\n bytes7[] memory r_1_3_2 = new bytes7[](3);\n {\n bytes7 r_1_3_2_0 = bytes7(0xc9d89cac7bfe49);\n r_1_3_2[0] = r_1_3_2_0;\n }\n {\n bytes7 r_1_3_2_1 = bytes7(0x809ab310b3b47b);\n r_1_3_2[1] = r_1_3_2_1;\n }\n {\n bytes7 r_1_3_2_2 = bytes7(0xd6937045a2a627);\n r_1_3_2[2] = r_1_3_2_2;\n }\n r_1_3.s_2 = r_1_3_2;\n }\n {\n S_b53795a6 memory r_1_3_3;\n {\n bytes6 r_1_3_3_0 = bytes6(0x24d9fbed640c);\n r_1_3_3.s_0 = r_1_3_3_0;\n }\n {\n string memory r_1_3_3_1 = unicode\"Moo é🚀oo Méééooooo🚀o🚀M\";\n r_1_3_3.s_1 = r_1_3_3_1;\n }\n {\n uint224[4] memory r_1_3_3_2;\n {\n uint224 r_1_3_3_2_0 = 18260040204669273983367984183841222908336359884446240702289504676480;\n r_1_3_3_2[0] = r_1_3_3_2_0;\n }\n {\n uint224 r_1_3_3_2_1 = 20689410844088486323544556789595477163788398968380336675309503198612;\n r_1_3_3_2[1] = r_1_3_3_2_1;\n }\n {\n uint224 r_1_3_3_2_2 = 9261121455333649860773143397004589990171015849159111998294778383167;\n r_1_3_3_2[2] = r_1_3_3_2_2;\n }\n {\n uint224 r_1_3_3_2_3 = 7274891814480000480114167924079011163663227992870544813085229739982;\n r_1_3_3_2[3] = r_1_3_3_2_3;\n }\n r_1_3_3.s_2 = r_1_3_3_2;\n }\n {\n string memory r_1_3_3_3 = unicode\"Moo é🚀\";\n r_1_3_3.s_3 = r_1_3_3_3;\n }\n r_1_3.s_3 = r_1_3_3;\n }\n {\n address[2] memory r_1_3_4;\n {\n address r_1_3_4_0 = 0xfb32B8204d3A80486de3be80b8e9e3682e3b99Fa;\n r_1_3_4[0] = r_1_3_4_0;\n }\n {\n address r_1_3_4_1 = 0x0B05F899B05Da84E58Fe6545Dd7B6e67BA2bc48F;\n r_1_3_4[1] = r_1_3_4_1;\n }\n r_1_3.s_4 = r_1_3_4;\n }\n r_1.s_3 = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = false;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002071789785ea72517af99f74e3fb407127951340d7d520257a8ebb65f54e1afe00000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008093e73b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a804df09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000095667a4dce4f71464986c16681fbdc29ab44bf3300000000000000000000000000000000000000000000000000000000000006800000000000000000000000000000000000000000000000000000000000000700000000000000000000000000fb32b8204d3a80486de3be80b8e9e3682e3b99fa0000000000000000000000000b05f899b05da84e58fe6545dd7b6e67ba2bc48f0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120de4782669f681e3d064817c71067bfc48e736aad3747960ac26b554287bb7600000000000000000000000000000000000000000000000000000000000000000100000000000000000000000019c317e543305f4f0739cbd681f799155ce964650000000000000000000000006b0bd86c29ac1edd4b8822e778aca20e05e3eb93000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a806fc3a9c3a9c3a9f09f9a80c3a9f09f9a806f6ff09f9a80c3a96f4d6f6f4df09f9a804d2020f09f9a80f09f9a80f09f9a806f6f4d4d00000000000000000000000000ccf090b7ce8cb7f741202d046af8b380e11963c30000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a806f6f204d20204df09f9a80c3a9c3a9c3a94d4d00000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000140c8c786624a4d6a960fc904f05353534afdf6100d1a2810bc6c753c536a5b9b00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000096626ba13d99ee6d5e0dc04657475de9dd5e98f5000000000000000000000000ef1714ae6973ee02dce5801572e6775d7175574100000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a804d20c3a9204dc3a94d6f204d4df09f9a806fc3a94d6fc3a96f4df09f9a80f09f9a806f20206fc3a9f09f9a80f09f9a806f4d206f6fc3a96f6ff09f9a80c3a920c3a94df09f9a804d00000000000000000000000000000000000000000000000000004c85fe8001b39ee70bd3a7072a6303a0fb00d8d8000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000244d6f6f20c3a9f09f9a80c3a9c3a9206f20206f6ff09f9a8020206f4dc3a9c3a96fc3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120ab25e1c179692e44cfd3cee3ccef1716af35b791ef0f5a788693ff676ab893000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a297aae107fe6b2525ecea88945fbc3169955d3100000000000000000000000052e1b0762eeba073cbb8f317020cfce214f2e85f00000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a806f6ff09f9a804df09f9a806fc3a96f206f6f206f6f204d6f206f202000000000000000000000000000000000000000000000000000000000000000000000000000005ad5b31bf0f30d04e89098ec4b4de3db3e4a975f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a806ff09f9a804dc3a96f20f09f9a80c3a9c3a920204d6f2020c3a9f09f9a80206fc3a96f4d206f6f4d6ff09f9a804d6f6f4df09f9a80f09f9a804d6f4d4d4d6f6ff09f9a804d2020c3a96f6f6ff09f9a806f4d000000000000000000000000000000000000000000000000000000000000000000000003c9d89cac7bfe4900000000000000000000000000000000000000000000000000809ab310b3b47b00000000000000000000000000000000000000000000000000d6937045a2a6270000000000000000000000000000000000000000000000000024d9fbed640c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000ad63b2eab381c4ede5ddcacf38ba3db61f71094e6d99217ba644aa8000000000c4752bfa2e6c5bf6c3cedb4e369c8c719ef92e2b8d3450aa770535940000000057f08a07d9c90fb32eb35081f2c27a2c8b99bb562ec7f9e83e730b3f000000004514484a66b395a2ae34ff5935a279f6b96dbfe8c56557de32f26fce000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a806f6f204dc3a9c3a9c3a96f6f6f6f6ff09f9a806ff09f9a804d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int32,(uint56,bytes27,bool,(address,bool,(bool,bool),(bytes31,(string,bytes17,((uint80),string)[3][],(bytes31,uint104)[4],uint48)))),string)[4][1][3]", + "type": "(int32,(uint56,bytes27,bool,(address,bool,(bool,bool),(bytes31,(string,bytes17,((uint80),string)[3][],(bytes31,uint104)[4],uint48)))),string)[4][1][3]", + "value": [ + [ + [ + [ + "18355222", + [ + "57605386795259468", + "0x71ef38edd1de0d0fe4505a0d0ae63937d06557cd28350ca1571f3c", + true, + [ + "0x27b258FA3988A5E38dBAf403f8727441Dad93286", + true, + [true, false], + [ + "0x25c195eec3482605a36958b210bc1d5437bfbdd949c9515603fba77abbdd55", + [ + "Moo é🚀🚀M🚀éo o🚀M🚀é o é🚀éo🚀M🚀o🚀oooéoooMoé🚀", + "0x38d263bc12265c652145b25a26113fcc7e", + [ + [ + [ + ["902109314565981353941411"], + "Moo é🚀o🚀🚀é🚀🚀 oM🚀🚀éééé🚀🚀oéMoM ooééo🚀 oé🚀 Méoo oo oooM o🚀Méo" + ], + [ + ["100921045557741606128354"], + "Moo é🚀Mé MoMMo🚀éoMoMoo🚀o 🚀éé M🚀MoéMoM🚀Mé🚀oo🚀M " + ], + [ + ["591931470670889595099545"], + "Moo é🚀 🚀 o o🚀🚀MéoM oéoéo🚀oMoM🚀M" + ] + ], + [ + [ + ["476592337609322106346873"], + "Moo é🚀oMo🚀 🚀M ooooo o🚀o éé éMééooéooM oooo🚀🚀M é oo" + ], + [ + ["207837155718070607859987"], + "Moo é🚀o o o o🚀éo🚀MMMM 🚀🚀M🚀o 🚀é🚀éoéoé é Méo🚀Méoo🚀🚀oMMooé" + ], + [ + ["245780807101999562840711"], + "Moo é🚀🚀 éMoMo o🚀MM🚀 ééMo éoooMoooMoooéé🚀🚀oo🚀ééo 🚀🚀 " + ] + ], + [ + [["841037729954510806441697"], "Moo é🚀"], + [["710066326581668142669341"], "Moo é🚀é"], + [ + ["910891532403756632616283"], + "Moo é🚀Mo oooMéooMééé🚀🚀🚀M oMéééMMooé🚀éoéo Mooo🚀M o Mooo" + ] + ], + [ + [ + ["95509990206409565452298"], + "Moo é🚀é oo 🚀🚀🚀éoéoMM oo" + ], + [ + ["768893670727290818509096"], + "Moo é🚀🚀 é🚀o🚀o🚀 ooéMoo M MMé oéMMoM oo éé 🚀é🚀 M🚀🚀" + ], + [ + ["1031893528898539643774826"], + "Moo é🚀 éM éoé🚀M🚀M Méoooé🚀 M éo oM" + ] + ] + ], + [ + [ + "0x8ef7380bb72bd51844a26505a8fd0c7fc4b8e3a6b621190a3645048351c5a6", + "2903159897798253948824791347977" + ], + [ + "0xe4bb152090d38297f101ae13a44055271fc8fab29f0d3af2e7281571268bfa", + "3905471293673782658392748267612" + ], + [ + "0x42276335c2b5dc4a14c14aff1c50b566dc75c7b1a094b3e1e2bb9b6ec63841", + "9282998479400373305756046633986" + ], + [ + "0xd6d90b6e348c2a6f2c2b3b68a8d9c0f3a98d9f00d489fe685e610a03cbcb72", + "14167259132795680660318273273641" + ] + ], + "194582415095792" + ] + ] + ] + ], + "Moo é🚀🚀o 🚀🚀🚀 M oéo ooééé" + ], + [ + "1518415825", + [ + "5576117797126617", + "0x2b5b999f8bd52f04f9f8a0369f3e05e13581bcbe71dc3e926aa6cb", + true, + [ + "0xD13e497f1e5527A3C27834b0deD2b5Fd3aBeB6E5", + true, + [false, false], + [ + "0x92d5e795f3be6659ea34b2b398b614b9826f2953e5e3d579aa3a4a8afcbddd", + [ + "Moo é🚀oéMoM oM🚀Mo Méo🚀éoMoé éé", + "0xa4d9191c96565cd2c349f9c8530d0377fb", + [ + [ + [ + ["1162095319204708183120967"], + "Moo é🚀🚀 ooééoé MM M ééo o 🚀 é 🚀Mo o éooM🚀MM 🚀oéM🚀éo Méo" + ], + [ + ["272884958764643581332538"], + "Moo é🚀oM oé ééoo🚀oé🚀Moééo🚀ooééoooééé ooééoMé o 🚀 ééo MoMM éM" + ], + [["791645322997087948475041"], "Moo é🚀éM"] + ], + [ + [ + ["723278491125565320940318"], + "Moo é🚀o oMééMo ooooooo🚀🚀 M" + ], + [ + ["552043958592243750387283"], + "Moo é🚀ooooMMMé🚀oo🚀éoo🚀oo🚀 🚀é🚀o" + ], + [ + ["308448460972648359403240"], + "Moo é🚀o🚀oééM o🚀 o oooé🚀 éo é🚀" + ] + ] + ], + [ + [ + "0x18ea9744fff348e9c64f3338bf54fd041553be491bcfe49f0fdbe627414e4f", + "17543211149938518911882444864746" + ], + [ + "0x7b7d35df8b8c2ac9211017182446b42780c97cbd9f6ebaed41f7c40ee5e62c", + "15221617671273916157388938414982" + ], + [ + "0xd0162622470078e075a86c08146dda6fd059f9ee5b079d4bd6b5b6adb2dfcd", + "12928109738491269108925831392415" + ], + [ + "0x18f6d5237f961e45ae2b6adada04ed3fdbc633a51c9beaa1816fad92a328d9", + "17559319900421028608277988566636" + ] + ], + "28013312150153" + ] + ] + ] + ], + "Moo é🚀🚀oo🚀oo" + ], + [ + "825705551", + [ + "17491718229780352", + "0xa43c3be0e2ebe1219c4a9a4a17823b0445eb881d7a0a9dca7ce46b", + true, + [ + "0x1F7D10a796a0B01ec3283A0efE4662CE1559fFd3", + false, + [false, true], + [ + "0x18863b8b339012d809b98142942d7057915e6f5b3b625e9c64b9ffd31bb8ac", + [ + "Moo é🚀MM ", + "0x2aea2b820e8dfca5d26a675335944badcf", + [], + [ + [ + "0x7e5de7c2e33b38f32447900ca4420d0e255b08c343517d2504d64581feb2e6", + "8286211808974415723761821562562" + ], + [ + "0x6c4f2f5c1814515150ce9b74b2057cdac529c6c73269b96000196d7628df1a", + "3417562814199303548836001735486" + ], + [ + "0x35fc69846197173e24beb7c054125f739dadc8525e64368dc39e86ea7df9de", + "18011624044238526319942890898687" + ], + [ + "0x42f0058d747f79ab9ea3c6eebccd31062d143c2658ee554a5e991dc87dd26e", + "2815035757122382850575985213136" + ] + ], + "276412360348032" + ] + ] + ] + ], + "Moo é🚀o ooooMéé MéMM ooMo éoéMoé 🚀oMéMM é M oMooo🚀éé oooééM " + ], + [ + "-1589091163", + [ + "10946574074863406", + "0x412af116c31a93b0d27258332e5af002ccc7dc69e661a1cec24493", + true, + [ + "0xa74d366A1c62AE724e42FD89B72Ee014c65c78DF", + false, + [true, false], + [ + "0xcb80725b7c1cad31f47d3ee80c560b81e8a4dd2b295eb79056bf742310fc8b", + [ + "Moo é🚀é éMMoo éoo o 🚀oéMoM", + "0xa930afe6e210b3bfcd09beb8346e9bdefa", + [], + [ + [ + "0xf582f681c34198affb98cc050e274ae77f43f9e0addbe1a1938e4623282b3a", + "1573085793233808965640542414042" + ], + [ + "0xfb22bdbc137f750cdbc42c8a9f571dd771e9e5738f668c1b7a5a3733b8a33b", + "16611964371288393801231102109040" + ], + [ + "0x3bf36e2756998fdb9e589406842585077db4effd2a919776e6b41303546e1a", + "19814559038747150532004354758775" + ], + [ + "0xc97d5a7d513773d4ff04089a762c02aafdc49bc58717147150315948c3f640", + "10316353148491318811956024938102" + ] + ], + "33295012599608" + ] + ] + ] + ], + "Moo é🚀 é oooéo ooéoo🚀oé🚀ooéM MMé ooMé🚀o o 🚀oo" + ] + ] + ], + [ + [ + [ + "1476853243", + [ + "60467477827986915", + "0x5332806576af8ec3d590461298d7f8128825a22aba5d48db506b25", + false, + [ + "0xb696E384D6829658BFB71D4B88BBBF321Ff97773", + false, + [false, true], + [ + "0x18729c2de78d8688c6ce47b17f62183da5d66fcc5037317ce617a5ade2f33b", + [ + "Moo é🚀M ooo🚀o", + "0x26b07b89792f6dc10a054ca5f625b67eab", + [], + [ + [ + "0xd3dab3151aaf56c3f4d62e2850a08f68bb168a0e2b6f2f239c42afb1a5dc97", + "6872418091216598016862177004896" + ], + [ + "0x47c1dc43c86c201aa67a63dfe1304ce7e5133eebe45c296c6ddb64d08263b9", + "10006911296464363614555990793596" + ], + [ + "0xfd7546ab959bba86a811b06891a91d2650f3576f09a7e1d289b61ff5f1e377", + "3801943204431408774802283769269" + ], + [ + "0xf158360981592577dcb27ec15e3e3b4b93772c9dcf893cafdbce2ec1832f64", + "13068490283941365693850383167407" + ] + ], + "216953581947454" + ] + ] + ] + ], + "Moo é🚀ooéM🚀 oééoo🚀ooo🚀 o Mé Mé oo🚀Mo M🚀Mo🚀éo🚀oMooo🚀 🚀MMoo" + ], + [ + "747420445", + [ + "16188566180546682", + "0x860b14b2e17b3fd6cd1634596166f9a76cefd3de0b605ab9512b0e", + true, + [ + "0x096563133d098C6cDB92D8af284ae57e06741593", + true, + [true, false], + [ + "0x6bf5b4a9ebe952fa7b8f9c4af1cd5a5d36834e99aff65611ac2085e6085bd9", + [ + "Moo é🚀éMo MoooéMéo🚀M é", + "0xbf51bb827ad140cd939d46eeb58884c043", + [ + [ + [ + ["778368575929596687322604"], + "Moo é🚀🚀oooM🚀é 🚀éooooM🚀o🚀MMoéoMM🚀ooéoM🚀é o oéoé MMooé🚀 Mé" + ], + [ + ["829843186055021846451034"], + "Moo é🚀M🚀éM M o 🚀é🚀éé ooéMoé MM🚀Mo🚀o🚀MMM🚀🚀 Mo" + ], + [["361770595238878083926428"], "Moo é🚀 🚀"] + ], + [ + [ + ["141486280541489331339031"], + "Moo é🚀o🚀oo🚀é oé ééo" + ], + [ + ["259028910893327677202134"], + "Moo é🚀 o oé🚀oMMMo🚀🚀 🚀oMoéMoMo🚀" + ], + [ + ["1133757143313620214830831"], + "Moo é🚀o éo éMé🚀o M🚀o🚀oM MMoMM o éo éo🚀🚀oMM 🚀🚀ooMéoMo" + ] + ], + [ + [ + ["601096245887659086830207"], + "Moo é🚀Mooo🚀 éooMoé🚀éo" + ], + [ + ["1098442981598804116546650"], + "Moo é🚀oM🚀🚀éoMMM🚀🚀oooéoooMéMo🚀oMéMoé🚀oMo🚀 éo🚀 ooo 🚀éoé🚀o" + ], + [ + ["341624200395660190621777"], + "Moo é🚀🚀oé🚀M🚀ooéééMo ooMéM🚀oo🚀Moo M🚀🚀🚀o🚀oo 🚀oMo🚀é o M🚀" + ] + ] + ], + [ + [ + "0xc28f97501f7791652fb45bb3d9976991bedac8ddf291eade2581dcc10dcf62", + "7046739415477862561695982978854" + ], + [ + "0x4d41991d972b7c188164e117804b6339c4e0347122b0189b8503ef38892b28", + "20246486506681101723782299644808" + ], + [ + "0xbd58cef4a779fd62899c2c85e99373c3b7e387394dc1a389e38c9a68866e5b", + "2405135291133471726241251808659" + ], + [ + "0xd8690ec22dfafe6dc7c6ba7e040bbca489b51c01b046eb15613743edd44e64", + "12233201482784658931643004358966" + ] + ], + "93747656736920" + ] + ] + ] + ], + "Moo é🚀ooo🚀 M🚀oMMé 🚀M🚀éo🚀oo ooM é🚀oooéé éééooéo🚀o🚀ooéo o o o🚀o" + ], + [ + "918624151", + [ + "56486694906339737", + "0x0ce34271c85d1f7ad57d1f3565af13198555b24f5c469c7c8d1670", + true, + [ + "0x52381eb8042518cfCD935a58DeC4334c3F97489E", + true, + [false, false], + [ + "0xb547c7cfcd6b78f66b4eecfdea431273018a3671ef8d68065a8edc201c233b", + [ + "Moo é🚀ooéo o🚀MéoMMé 🚀oé🚀🚀o M éooéMé éoééoé", + "0x3f68e27ce7b2ad3ef0f90b12fef74c3aa3", + [ + [ + [ + ["649705950308356913956615"], + "Moo é🚀éooooo🚀oéMMoo éo é ééééo" + ], + [ + ["58468454581933630711541"], + "Moo é🚀 Mooooéooéé🚀o🚀o oM Moo🚀Mo ééoo oéoooo🚀ooé🚀 ooM " + ], + [ + ["469311536106426346369599"], + "Moo é🚀🚀oM 🚀Moo MMMé oo oo🚀oo🚀oMMé M ooééoéMo é o" + ] + ], + [ + [["183883345857417564092205"], "Moo é🚀Mé🚀oM🚀"], + [["706959299831709797717431"], "Moo é🚀"], + [ + ["127672568362815957964762"], + "Moo é🚀éMo🚀ééoéMéo🚀o🚀" + ] + ], + [ + [["530031133160340027734252"], "Moo é🚀"], + [ + ["836123641572017954708367"], + "Moo é🚀o🚀🚀 🚀🚀o Mo🚀MééoMéoM🚀o🚀MéoooM🚀" + ], + [["404840947105315220766498"], "Moo é🚀oé o🚀oo"] + ], + [ + [["512886782297741481563198"], "Moo é🚀ooMé🚀ooo"], + [ + ["130508694331430248070448"], + "Moo é🚀Mé 🚀oMéM🚀🚀oMéo oM" + ], + [["484957477470614903403427"], "Moo é🚀🚀éoé"] + ] + ], + [ + [ + "0xe7ece7ae291cd0458a033985ada4c2fec400224a751c41f6447cf13301a401", + "12927771394155598973762112288802" + ], + [ + "0x255a667a600e5ee772487aa83888580271ad9d46ee529c5a50f6f3acb0b16f", + "17266090260360266537560743786226" + ], + [ + "0x0db78f003a4145bebf8fbd7fce49fb124592f6c0e551fdc45bb4aa2fd837c9", + "8454111238309761354615382142430" + ], + [ + "0x6c94b1caf5cae510639dc473a027026fecb07fee48304a13c1fe99817356cb", + "5598719154263456989403668378468" + ] + ], + "207026167236643" + ] + ] + ] + ], + "Moo é🚀o🚀Méooé o" + ], + [ + "-1914892012", + [ + "20299934080799188", + "0x1d2e9d46924e4f5913d7830e45246d546111b393349a7e51408075", + false, + [ + "0xE197Af46E9E37C4a6895Ca782651DA6377E279BF", + false, + [true, false], + [ + "0xa188b35c1d88ceb6ee0784da9e16e8e808c8c736520c4e4bb31de59d598f32", + [ + "Moo é🚀 o oé", + "0x61a2d25a7d1a2179e68e410932c51efb9b", + [ + [ + [["954032285101724101324237"], "Moo é🚀"], + [["196730564305282248666853"], "Moo é🚀o🚀o éoMM "], + [ + ["603667938580924110880859"], + "Moo é🚀 oéo éé 🚀oo " + ] + ], + [ + [ + ["1099728774289268466661399"], + "Moo é🚀éo 🚀oMoéé o oMooooM🚀éé🚀🚀éo " + ], + [ + ["959612613096905308760943"], + "Moo é🚀 🚀M Moooé🚀 oo M o oo 🚀o oé M" + ], + [ + ["1025002190457938415535849"], + "Moo é🚀🚀Moo oé🚀oMo 🚀M oMMoMo MéM🚀o" + ] + ] + ], + [ + [ + "0x12dcb1bc894edcec544c35af28d5be0a590a40830edd501c8c715faeb812d9", + "6995212533981106046433128563926" + ], + [ + "0x8d9fbe397650464e7b601019a91d2728b4cadbbcbbe79d21bfeb1f71b5336c", + "8597070187493096549654997007129" + ], + [ + "0xcc1e1fdc69738faa5d6621e6570f96ea5455879d84e6aced6eb8f4a98532b8", + "9129996001931131645523743293902" + ], + [ + "0xb8b96fd6a9e1bd59acb7c0b76803b3ebc93ddd50715a5c7600ce89852e0ed0", + "4242684607374094016047792180447" + ] + ], + "86381324625382" + ] + ] + ] + ], + "Moo é🚀 ooéo🚀🚀ooM" + ] + ] + ], + [ + [ + [ + "450086051", + [ + "1862667065203480", + "0xe8132e5855fcb7e84a8c0cb2d9cd67b7931a9d2c93bf826c2b77b5", + false, + [ + "0xa322764125e3A508d77E0ba42C154C12E193BD5e", + true, + [false, false], + [ + "0xde240c049f7da90a7ecb9156c990f89bdceb476917fd3322998d3bec8e0c5b", + [ + "Moo é🚀 M M🚀oooMMM🚀", + "0x617345c7fbe4523b00537142e2f8705b9a", + [ + [ + [ + ["1025559340071980978979119"], + "Moo é🚀oMoMéoéoMo oéMo oM ooooMMoMé MM ooMMéé🚀o o" + ], + [ + ["199996398625034076461454"], + "Moo é🚀🚀M🚀🚀MM ééé o" + ], + [["135884599882127575401329"], "Moo é🚀o🚀o"] + ], + [ + [ + ["515288475754605993331757"], + "Moo é🚀oMoo ééoMM " + ], + [ + ["731268341141024115374595"], + "Moo é🚀ééMo🚀 🚀o 🚀ooo🚀o o🚀🚀MM 🚀o🚀 ooéo🚀🚀éMooooéoo🚀Mo🚀🚀 🚀🚀🚀oMoo🚀é" + ], + [ + ["398545296696103799871368"], + "Moo é🚀Mo🚀 oo M oé🚀o " + ] + ], + [ + [ + ["881339986468801126955473"], + "Moo é🚀Moé🚀éo M éMM🚀ooMM🚀 oooM🚀oMooo🚀🚀éMMM🚀🚀 o🚀MMoM🚀 Mo" + ], + [ + ["655244207891843442155449"], + "Moo é🚀🚀oooéoo🚀é🚀MMMoo 🚀é🚀ééoéé éMé o éMMMooo🚀oooMMooééMo é o🚀" + ], + [ + ["160788531032816849381164"], + "Moo é🚀ooM🚀oM o oéoé🚀oéo🚀M 🚀o🚀🚀🚀é🚀 éM oéo M M🚀oé 🚀🚀🚀Mé🚀 o o" + ] + ], + [ + [ + ["62361039763499843442233"], + "Moo é🚀o🚀🚀🚀MoéooMéééééé é🚀 o🚀oo 🚀éM🚀éoM M o" + ], + [ + ["959406524645207881940115"], + "Moo é🚀o éoM 🚀 éMoMMo🚀MoMM🚀o" + ], + [ + ["146539970214223232055320"], + "Moo é🚀🚀oéooMo🚀 🚀 Mé🚀ooMoooo🚀🚀MéooéoéoMooooooMooo" + ] + ] + ], + [ + [ + "0x85d89f6f7782bc2075891a6d05add5f17d67133c2f7dfd884628f5b9135b5f", + "8152652264041231856031820014334" + ], + [ + "0x0fb8607251804ff82b5b152a4bae09bd636adc9ad4063a6d6ca2cab2560537", + "16416864780937006238066005305072" + ], + [ + "0x3ccbe135ae880f89c39361f314bffdf7a5c2aa5a2dedae7c3a6caa34848236", + "17480310804968673507446811182722" + ], + [ + "0xfa0b99564ab5bb7c3cf61146ccf566c56f9a5a7aa6f2c2bda64b15303e1713", + "19557527284622991208475854982546" + ] + ], + "83317973902405" + ] + ] + ] + ], + "Moo é🚀🚀oooé oM oé🚀o🚀MéMo M🚀ooM🚀o MM" + ], + [ + "700510769", + [ + "42507258221890211", + "0x00ccca1671adbde8393212111aa00d5c0e5d7b5453b136a72d0b04", + false, + [ + "0xA0cf4B6227A6214dCDFAD8F3b9a2b2159342c967", + true, + [true, true], + [ + "0xba32bcbcc576d6084f8da91ef59fabc42d2c32870f8f89e74d76849b23de8e", + [ + "Moo é🚀🚀o🚀 MMéo Mooo🚀éo 🚀 é oéo🚀éMéMéMéM🚀Mooo 🚀o", + "0xe64be12210d44d8c9af2b28b479fdda6e7", + [ + [ + [ + ["998904477997770689783828"], + "Moo é🚀ooo éoMo o 🚀éMo🚀M🚀oMoé ooéo🚀éMé" + ], + [ + ["672234829220922730895350"], + "Moo é🚀oooéo🚀ooé 🚀o🚀M🚀o🚀o oMoMéé🚀éooéoM oM🚀MooéM🚀o é🚀éMo🚀Mo éo" + ], + [ + ["565572148567774672239845"], + "Moo é🚀éo🚀ooMooé oooM ooMMoéMéMé oMM MMMMéoMoMéoMo" + ] + ] + ], + [ + [ + "0xdf5e535bdb2251e7b882f04e2c196d209e69bf0727fbcafe195e4536825a1b", + "6878548423508897219270706061599" + ], + [ + "0x221da0d5340ce979deba370153b25c5ad15c51438f37375ab06c759b7a9f48", + "15516337744500600307057943997971" + ], + [ + "0x814565cb98266cee7971f06826107017acb8ea548cde76f1a84d2ab364ad66", + "9082912372448664233971398161464" + ], + [ + "0x57119d2a41f20ade5aa366907021ca01c8dabdc944aa24f0a17f237bbc063d", + "12403548110132185946652650413082" + ] + ], + "6402288773077" + ] + ] + ] + ], + "Moo é🚀🚀o🚀🚀ooM🚀oo🚀éé🚀🚀oéoM 🚀Mo🚀🚀🚀🚀🚀o" + ], + [ + "379366848", + [ + "4777727319079755", + "0x8f000774670384e84ff808431f60951061811e1da8808f4b881570", + true, + [ + "0x9B867Cfd32926770310F8dc48F2a5761F8CeDb0B", + true, + [true, true], + [ + "0x46011da7fb6d10b847738342476d67cdafa19c63bef70301d8e60a8212c84c", + [ + "Moo é🚀🚀🚀o🚀🚀oé MM🚀 éoMoM🚀🚀éooo🚀o🚀oo🚀oM🚀éoé oMMM éooé🚀éo🚀", + "0xfdfac1c8007af04108c1865d6c50fa1249", + [ + [ + [ + ["57362128525397904213373"], + "Moo é🚀éo🚀 éoéMMMéo é ééM🚀🚀🚀ooé🚀Mo🚀🚀MéMé🚀Mo oéMéo MMooo" + ], + [ + ["892154695378074136422085"], + "Moo é🚀ooM 🚀éoMo oo éMMéMoéoo🚀o 🚀" + ], + [ + ["901879116585764694543963"], + "Moo é🚀 MM 🚀 oéé🚀é 🚀oé🚀oé é o 🚀o🚀éoo éo🚀 🚀MMM🚀 " + ] + ] + ], + [ + [ + "0x0747c3b1da93154e98dca22db9b30987ed2ed20c0d806647b1288968a3c7d7", + "4146567576601627746825362586315" + ], + [ + "0x5f0f712b08bf9f443e4b1e177842f36510f49100058d3ea926cd25630247a7", + "7224863001570592521097169560835" + ], + [ + "0xa6db2d5c4a63a868f1a217950b0b308cee6bf793a070fe16729c4b62effbe8", + "10157693620079683599116916718228" + ], + [ + "0x68169af8168260dc2ecfb574beac056944f32f2f530a7ea62ed3cd1577ba6e", + "18999040883110654313566239821052" + ] + ], + "23705855955643" + ] + ] + ] + ], + "Moo é🚀Moo oMéoééooé" + ], + [ + "-602593327", + [ + "68387087619570718", + "0x19417c16c4099975c42e171f8d5afc0165a795590aa4d4053e105f", + true, + [ + "0x453Ae228c89C6ed368617E677a883F251ae61593", + false, + [true, true], + [ + "0x5fcc25a764936dfa632e9515846c730f51dece1ec0f392da926ee942bb273b", + [ + "Moo é🚀oéoM ooééo 🚀🚀 🚀oo 🚀oooo M éo🚀éoo", + "0x33152d109b1c0e4be90cd6c417d5c70d17", + [ + [ + [ + ["867959008457721706592071"], + "Moo é🚀oo éé MééMooMo🚀Méo 🚀oooo🚀MMooéoééM o🚀o🚀éo🚀oM" + ], + [ + ["83607570335716133607005"], + "Moo é🚀🚀ééMéoMéoo oMM o M éo é M o 🚀 Moo🚀é" + ], + [["487947877097455589394867"], "Moo é🚀ooMoMoo🚀"] + ] + ], + [ + [ + "0xc626c1b4c9017d322408531761b91c8d5a563a7ee1caf991a87d491105136d", + "16523666341471639949050835668816" + ], + [ + "0x9f8b3ff1ffdb11b8b7dd7966335f1086ab986d8e074ad0c64a6e9f2a2becac", + "18715586166639367550398947210310" + ], + [ + "0x59681117d865de490b4dc9624d2c8d6dc81eee44ae06a90c9c13dbb800acf1", + "11076808997132194427870041008509" + ], + [ + "0x4054712b301a4f27057b5c125287fdab406a13bbfec45fea29c6f8ca27ca28", + "16924362469328952392198222756247" + ] + ], + "229066645449592" + ] + ] + ] + ], + "Moo é🚀oooé🚀éé o🚀Moé🚀M ooo🚀MM 🚀é" + ] + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "18355222" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "57605386795259468" + }, + { + "type": "hexstring", + "value": "0x71ef38edd1de0d0fe4505a0d0ae63937d06557cd28350ca1571f3c" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x27b258FA3988A5E38dBAf403f8727441Dad93286" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x25c195eec3482605a36958b210bc1d5437bfbdd949c9515603fba77abbdd55" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀M🚀éo o🚀M🚀é o é🚀éo🚀M🚀o🚀oooéoooMoé🚀" + }, + { + "type": "hexstring", + "value": "0x38d263bc12265c652145b25a26113fcc7e" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "902109314565981353941411" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀é🚀🚀 oM🚀🚀éééé🚀🚀oéMoM ooééo🚀 oé🚀 Méoo oo oooM o🚀Méo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "100921045557741606128354" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Mé MoMMo🚀éoMoMoo🚀o 🚀éé M🚀MoéMoM🚀Mé🚀oo🚀M " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "591931470670889595099545" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 🚀 o o🚀🚀MéoM oéoéo🚀oMoM🚀M" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "476592337609322106346873" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oMo🚀 🚀M ooooo o🚀o éé éMééooéooM oooo🚀🚀M é oo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "207837155718070607859987" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o o o o🚀éo🚀MMMM 🚀🚀M🚀o 🚀é🚀éoéoé é Méo🚀Méoo🚀🚀oMMooé" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "245780807101999562840711" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀 éMoMo o🚀MM🚀 ééMo éoooMoooMoooéé🚀🚀oo🚀ééo 🚀🚀 " + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "841037729954510806441697" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "710066326581668142669341" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀é" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "910891532403756632616283" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Mo oooMéooMééé🚀🚀🚀M oMéééMMooé🚀éoéo Mooo🚀M o Mooo" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "95509990206409565452298" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀é oo 🚀🚀🚀éoéoMM oo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "768893670727290818509096" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀 é🚀o🚀o🚀 ooéMoo M MMé oéMMoM oo éé 🚀é🚀 M🚀🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1031893528898539643774826" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 éM éoé🚀M🚀M Méoooé🚀 M éo oM" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8ef7380bb72bd51844a26505a8fd0c7fc4b8e3a6b621190a3645048351c5a6" + }, + { + "type": "number", + "value": "2903159897798253948824791347977" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xe4bb152090d38297f101ae13a44055271fc8fab29f0d3af2e7281571268bfa" + }, + { + "type": "number", + "value": "3905471293673782658392748267612" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x42276335c2b5dc4a14c14aff1c50b566dc75c7b1a094b3e1e2bb9b6ec63841" + }, + { + "type": "number", + "value": "9282998479400373305756046633986" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd6d90b6e348c2a6f2c2b3b68a8d9c0f3a98d9f00d489fe685e610a03cbcb72" + }, + { + "type": "number", + "value": "14167259132795680660318273273641" + } + ] + } + ] + }, + { + "type": "number", + "value": "194582415095792" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀o 🚀🚀🚀 M oéo ooééé" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1518415825" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "5576117797126617" + }, + { + "type": "hexstring", + "value": "0x2b5b999f8bd52f04f9f8a0369f3e05e13581bcbe71dc3e926aa6cb" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xD13e497f1e5527A3C27834b0deD2b5Fd3aBeB6E5" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x92d5e795f3be6659ea34b2b398b614b9826f2953e5e3d579aa3a4a8afcbddd" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéMoM oM🚀Mo Méo🚀éoMoé éé" + }, + { + "type": "hexstring", + "value": "0xa4d9191c96565cd2c349f9c8530d0377fb" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1162095319204708183120967" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀 ooééoé MM M ééo o 🚀 é 🚀Mo o éooM🚀MM 🚀oéM🚀éo Méo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "272884958764643581332538" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oM oé ééoo🚀oé🚀Moééo🚀ooééoooééé ooééoMé o 🚀 ééo MoMM éM" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "791645322997087948475041" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éM" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "723278491125565320940318" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o oMééMo ooooooo🚀🚀 M" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "552043958592243750387283" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooooMMMé🚀oo🚀éoo🚀oo🚀 🚀é🚀o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "308448460972648359403240" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀oééM o🚀 o oooé🚀 éo é🚀" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x18ea9744fff348e9c64f3338bf54fd041553be491bcfe49f0fdbe627414e4f" + }, + { + "type": "number", + "value": "17543211149938518911882444864746" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x7b7d35df8b8c2ac9211017182446b42780c97cbd9f6ebaed41f7c40ee5e62c" + }, + { + "type": "number", + "value": "15221617671273916157388938414982" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd0162622470078e075a86c08146dda6fd059f9ee5b079d4bd6b5b6adb2dfcd" + }, + { + "type": "number", + "value": "12928109738491269108925831392415" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x18f6d5237f961e45ae2b6adada04ed3fdbc633a51c9beaa1816fad92a328d9" + }, + { + "type": "number", + "value": "17559319900421028608277988566636" + } + ] + } + ] + }, + { + "type": "number", + "value": "28013312150153" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀oo🚀oo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "825705551" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "17491718229780352" + }, + { + "type": "hexstring", + "value": "0xa43c3be0e2ebe1219c4a9a4a17823b0445eb881d7a0a9dca7ce46b" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x1F7D10a796a0B01ec3283A0efE4662CE1559fFd3" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x18863b8b339012d809b98142942d7057915e6f5b3b625e9c64b9ffd31bb8ac" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MM " + }, + { + "type": "hexstring", + "value": "0x2aea2b820e8dfca5d26a675335944badcf" + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x7e5de7c2e33b38f32447900ca4420d0e255b08c343517d2504d64581feb2e6" + }, + { + "type": "number", + "value": "8286211808974415723761821562562" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x6c4f2f5c1814515150ce9b74b2057cdac529c6c73269b96000196d7628df1a" + }, + { + "type": "number", + "value": "3417562814199303548836001735486" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x35fc69846197173e24beb7c054125f739dadc8525e64368dc39e86ea7df9de" + }, + { + "type": "number", + "value": "18011624044238526319942890898687" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x42f0058d747f79ab9ea3c6eebccd31062d143c2658ee554a5e991dc87dd26e" + }, + { + "type": "number", + "value": "2815035757122382850575985213136" + } + ] + } + ] + }, + { + "type": "number", + "value": "276412360348032" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o ooooMéé MéMM ooMo éoéMoé 🚀oMéMM é M oMooo🚀éé oooééM " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-1589091163" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "10946574074863406" + }, + { + "type": "hexstring", + "value": "0x412af116c31a93b0d27258332e5af002ccc7dc69e661a1cec24493" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xa74d366A1c62AE724e42FD89B72Ee014c65c78DF" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xcb80725b7c1cad31f47d3ee80c560b81e8a4dd2b295eb79056bf742310fc8b" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀é éMMoo éoo o 🚀oéMoM" + }, + { + "type": "hexstring", + "value": "0xa930afe6e210b3bfcd09beb8346e9bdefa" + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf582f681c34198affb98cc050e274ae77f43f9e0addbe1a1938e4623282b3a" + }, + { + "type": "number", + "value": "1573085793233808965640542414042" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xfb22bdbc137f750cdbc42c8a9f571dd771e9e5738f668c1b7a5a3733b8a33b" + }, + { + "type": "number", + "value": "16611964371288393801231102109040" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x3bf36e2756998fdb9e589406842585077db4effd2a919776e6b41303546e1a" + }, + { + "type": "number", + "value": "19814559038747150532004354758775" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc97d5a7d513773d4ff04089a762c02aafdc49bc58717147150315948c3f640" + }, + { + "type": "number", + "value": "10316353148491318811956024938102" + } + ] + } + ] + }, + { + "type": "number", + "value": "33295012599608" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 é oooéo ooéoo🚀oé🚀ooéM MMé ooMé🚀o o 🚀oo" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1476853243" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "60467477827986915" + }, + { + "type": "hexstring", + "value": "0x5332806576af8ec3d590461298d7f8128825a22aba5d48db506b25" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xb696E384D6829658BFB71D4B88BBBF321Ff97773" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x18729c2de78d8688c6ce47b17f62183da5d66fcc5037317ce617a5ade2f33b" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M ooo🚀o" + }, + { + "type": "hexstring", + "value": "0x26b07b89792f6dc10a054ca5f625b67eab" + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd3dab3151aaf56c3f4d62e2850a08f68bb168a0e2b6f2f239c42afb1a5dc97" + }, + { + "type": "number", + "value": "6872418091216598016862177004896" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x47c1dc43c86c201aa67a63dfe1304ce7e5133eebe45c296c6ddb64d08263b9" + }, + { + "type": "number", + "value": "10006911296464363614555990793596" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xfd7546ab959bba86a811b06891a91d2650f3576f09a7e1d289b61ff5f1e377" + }, + { + "type": "number", + "value": "3801943204431408774802283769269" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf158360981592577dcb27ec15e3e3b4b93772c9dcf893cafdbce2ec1832f64" + }, + { + "type": "number", + "value": "13068490283941365693850383167407" + } + ] + } + ] + }, + { + "type": "number", + "value": "216953581947454" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooéM🚀 oééoo🚀ooo🚀 o Mé Mé oo🚀Mo M🚀Mo🚀éo🚀oMooo🚀 🚀MMoo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "747420445" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "16188566180546682" + }, + { + "type": "hexstring", + "value": "0x860b14b2e17b3fd6cd1634596166f9a76cefd3de0b605ab9512b0e" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x096563133d098C6cDB92D8af284ae57e06741593" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x6bf5b4a9ebe952fa7b8f9c4af1cd5a5d36834e99aff65611ac2085e6085bd9" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éMo MoooéMéo🚀M é" + }, + { + "type": "hexstring", + "value": "0xbf51bb827ad140cd939d46eeb58884c043" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "778368575929596687322604" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀oooM🚀é 🚀éooooM🚀o🚀MMoéoMM🚀ooéoM🚀é o oéoé MMooé🚀 Mé" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "829843186055021846451034" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M🚀éM M o 🚀é🚀éé ooéMoé MM🚀Mo🚀o🚀MMM🚀🚀 Mo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "361770595238878083926428" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 🚀" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "141486280541489331339031" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀oo🚀é oé ééo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "259028910893327677202134" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 o oé🚀oMMMo🚀🚀 🚀oMoéMoMo🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1133757143313620214830831" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o éo éMé🚀o M🚀o🚀oM MMoMM o éo éo🚀🚀oMM 🚀🚀ooMéoMo" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "601096245887659086830207" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Mooo🚀 éooMoé🚀éo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1098442981598804116546650" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oM🚀🚀éoMMM🚀🚀oooéoooMéMo🚀oMéMoé🚀oMo🚀 éo🚀 ooo 🚀éoé🚀o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "341624200395660190621777" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀oé🚀M🚀ooéééMo ooMéM🚀oo🚀Moo M🚀🚀🚀o🚀oo 🚀oMo🚀é o M🚀" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc28f97501f7791652fb45bb3d9976991bedac8ddf291eade2581dcc10dcf62" + }, + { + "type": "number", + "value": "7046739415477862561695982978854" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x4d41991d972b7c188164e117804b6339c4e0347122b0189b8503ef38892b28" + }, + { + "type": "number", + "value": "20246486506681101723782299644808" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xbd58cef4a779fd62899c2c85e99373c3b7e387394dc1a389e38c9a68866e5b" + }, + { + "type": "number", + "value": "2405135291133471726241251808659" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd8690ec22dfafe6dc7c6ba7e040bbca489b51c01b046eb15613743edd44e64" + }, + { + "type": "number", + "value": "12233201482784658931643004358966" + } + ] + } + ] + }, + { + "type": "number", + "value": "93747656736920" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooo🚀 M🚀oMMé 🚀M🚀éo🚀oo ooM é🚀oooéé éééooéo🚀o🚀ooéo o o o🚀o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "918624151" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "56486694906339737" + }, + { + "type": "hexstring", + "value": "0x0ce34271c85d1f7ad57d1f3565af13198555b24f5c469c7c8d1670" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x52381eb8042518cfCD935a58DeC4334c3F97489E" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xb547c7cfcd6b78f66b4eecfdea431273018a3671ef8d68065a8edc201c233b" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooéo o🚀MéoMMé 🚀oé🚀🚀o M éooéMé éoééoé" + }, + { + "type": "hexstring", + "value": "0x3f68e27ce7b2ad3ef0f90b12fef74c3aa3" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "649705950308356913956615" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éooooo🚀oéMMoo éo é ééééo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "58468454581933630711541" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 Mooooéooéé🚀o🚀o oM Moo🚀Mo ééoo oéoooo🚀ooé🚀 ooM " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "469311536106426346369599" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀oM 🚀Moo MMMé oo oo🚀oo🚀oMMé M ooééoéMo é o" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "183883345857417564092205" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Mé🚀oM🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "706959299831709797717431" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "127672568362815957964762" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éMo🚀ééoéMéo🚀o🚀" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "530031133160340027734252" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "836123641572017954708367" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀 🚀🚀o Mo🚀MééoMéoM🚀o🚀MéoooM🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "404840947105315220766498" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oé o🚀oo" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "512886782297741481563198" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooMé🚀ooo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "130508694331430248070448" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Mé 🚀oMéM🚀🚀oMéo oM" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "484957477470614903403427" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀éoé" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xe7ece7ae291cd0458a033985ada4c2fec400224a751c41f6447cf13301a401" + }, + { + "type": "number", + "value": "12927771394155598973762112288802" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x255a667a600e5ee772487aa83888580271ad9d46ee529c5a50f6f3acb0b16f" + }, + { + "type": "number", + "value": "17266090260360266537560743786226" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x0db78f003a4145bebf8fbd7fce49fb124592f6c0e551fdc45bb4aa2fd837c9" + }, + { + "type": "number", + "value": "8454111238309761354615382142430" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x6c94b1caf5cae510639dc473a027026fecb07fee48304a13c1fe99817356cb" + }, + { + "type": "number", + "value": "5598719154263456989403668378468" + } + ] + } + ] + }, + { + "type": "number", + "value": "207026167236643" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀Méooé o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-1914892012" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "20299934080799188" + }, + { + "type": "hexstring", + "value": "0x1d2e9d46924e4f5913d7830e45246d546111b393349a7e51408075" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xE197Af46E9E37C4a6895Ca782651DA6377E279BF" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa188b35c1d88ceb6ee0784da9e16e8e808c8c736520c4e4bb31de59d598f32" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 o oé" + }, + { + "type": "hexstring", + "value": "0x61a2d25a7d1a2179e68e410932c51efb9b" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "954032285101724101324237" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "196730564305282248666853" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀o éoMM " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "603667938580924110880859" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 oéo éé 🚀oo " + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1099728774289268466661399" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éo 🚀oMoéé o oMooooM🚀éé🚀🚀éo " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "959612613096905308760943" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 🚀M Moooé🚀 oo M o oo 🚀o oé M" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1025002190457938415535849" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀Moo oé🚀oMo 🚀M oMMoMo MéM🚀o" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x12dcb1bc894edcec544c35af28d5be0a590a40830edd501c8c715faeb812d9" + }, + { + "type": "number", + "value": "6995212533981106046433128563926" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8d9fbe397650464e7b601019a91d2728b4cadbbcbbe79d21bfeb1f71b5336c" + }, + { + "type": "number", + "value": "8597070187493096549654997007129" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xcc1e1fdc69738faa5d6621e6570f96ea5455879d84e6aced6eb8f4a98532b8" + }, + { + "type": "number", + "value": "9129996001931131645523743293902" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xb8b96fd6a9e1bd59acb7c0b76803b3ebc93ddd50715a5c7600ce89852e0ed0" + }, + { + "type": "number", + "value": "4242684607374094016047792180447" + } + ] + } + ] + }, + { + "type": "number", + "value": "86381324625382" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 ooéo🚀🚀ooM" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "450086051" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1862667065203480" + }, + { + "type": "hexstring", + "value": "0xe8132e5855fcb7e84a8c0cb2d9cd67b7931a9d2c93bf826c2b77b5" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xa322764125e3A508d77E0ba42C154C12E193BD5e" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xde240c049f7da90a7ecb9156c990f89bdceb476917fd3322998d3bec8e0c5b" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 M M🚀oooMMM🚀" + }, + { + "type": "hexstring", + "value": "0x617345c7fbe4523b00537142e2f8705b9a" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1025559340071980978979119" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oMoMéoéoMo oéMo oM ooooMMoMé MM ooMMéé🚀o o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "199996398625034076461454" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀M🚀🚀MM ééé o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "135884599882127575401329" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀o" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "515288475754605993331757" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oMoo ééoMM " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "731268341141024115374595" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ééMo🚀 🚀o 🚀ooo🚀o o🚀🚀MM 🚀o🚀 ooéo🚀🚀éMooooéoo🚀Mo🚀🚀 🚀🚀🚀oMoo🚀é" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "398545296696103799871368" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Mo🚀 oo M oé🚀o " + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "881339986468801126955473" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Moé🚀éo M éMM🚀ooMM🚀 oooM🚀oMooo🚀🚀éMMM🚀🚀 o🚀MMoM🚀 Mo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "655244207891843442155449" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀oooéoo🚀é🚀MMMoo 🚀é🚀ééoéé éMé o éMMMooo🚀oooMMooééMo é o🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "160788531032816849381164" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooM🚀oM o oéoé🚀oéo🚀M 🚀o🚀🚀🚀é🚀 éM oéo M M🚀oé 🚀🚀🚀Mé🚀 o o" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "62361039763499843442233" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀🚀MoéooMéééééé é🚀 o🚀oo 🚀éM🚀éoM M o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "959406524645207881940115" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o éoM 🚀 éMoMMo🚀MoMM🚀o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "146539970214223232055320" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀oéooMo🚀 🚀 Mé🚀ooMoooo🚀🚀MéooéoéoMooooooMooo" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x85d89f6f7782bc2075891a6d05add5f17d67133c2f7dfd884628f5b9135b5f" + }, + { + "type": "number", + "value": "8152652264041231856031820014334" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x0fb8607251804ff82b5b152a4bae09bd636adc9ad4063a6d6ca2cab2560537" + }, + { + "type": "number", + "value": "16416864780937006238066005305072" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x3ccbe135ae880f89c39361f314bffdf7a5c2aa5a2dedae7c3a6caa34848236" + }, + { + "type": "number", + "value": "17480310804968673507446811182722" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xfa0b99564ab5bb7c3cf61146ccf566c56f9a5a7aa6f2c2bda64b15303e1713" + }, + { + "type": "number", + "value": "19557527284622991208475854982546" + } + ] + } + ] + }, + { + "type": "number", + "value": "83317973902405" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀oooé oM oé🚀o🚀MéMo M🚀ooM🚀o MM" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "700510769" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "42507258221890211" + }, + { + "type": "hexstring", + "value": "0x00ccca1671adbde8393212111aa00d5c0e5d7b5453b136a72d0b04" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xA0cf4B6227A6214dCDFAD8F3b9a2b2159342c967" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xba32bcbcc576d6084f8da91ef59fabc42d2c32870f8f89e74d76849b23de8e" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀o🚀 MMéo Mooo🚀éo 🚀 é oéo🚀éMéMéMéM🚀Mooo 🚀o" + }, + { + "type": "hexstring", + "value": "0xe64be12210d44d8c9af2b28b479fdda6e7" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "998904477997770689783828" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooo éoMo o 🚀éMo🚀M🚀oMoé ooéo🚀éMé" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "672234829220922730895350" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oooéo🚀ooé 🚀o🚀M🚀o🚀o oMoMéé🚀éooéoM oM🚀MooéM🚀o é🚀éMo🚀Mo éo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "565572148567774672239845" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éo🚀ooMooé oooM ooMMoéMéMé oMM MMMMéoMoMéoMo" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xdf5e535bdb2251e7b882f04e2c196d209e69bf0727fbcafe195e4536825a1b" + }, + { + "type": "number", + "value": "6878548423508897219270706061599" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x221da0d5340ce979deba370153b25c5ad15c51438f37375ab06c759b7a9f48" + }, + { + "type": "number", + "value": "15516337744500600307057943997971" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x814565cb98266cee7971f06826107017acb8ea548cde76f1a84d2ab364ad66" + }, + { + "type": "number", + "value": "9082912372448664233971398161464" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x57119d2a41f20ade5aa366907021ca01c8dabdc944aa24f0a17f237bbc063d" + }, + { + "type": "number", + "value": "12403548110132185946652650413082" + } + ] + } + ] + }, + { + "type": "number", + "value": "6402288773077" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀o🚀🚀ooM🚀oo🚀éé🚀🚀oéoM 🚀Mo🚀🚀🚀🚀🚀o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "379366848" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "4777727319079755" + }, + { + "type": "hexstring", + "value": "0x8f000774670384e84ff808431f60951061811e1da8808f4b881570" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x9B867Cfd32926770310F8dc48F2a5761F8CeDb0B" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x46011da7fb6d10b847738342476d67cdafa19c63bef70301d8e60a8212c84c" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀o🚀🚀oé MM🚀 éoMoM🚀🚀éooo🚀o🚀oo🚀oM🚀éoé oMMM éooé🚀éo🚀" + }, + { + "type": "hexstring", + "value": "0xfdfac1c8007af04108c1865d6c50fa1249" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "57362128525397904213373" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éo🚀 éoéMMMéo é ééM🚀🚀🚀ooé🚀Mo🚀🚀MéMé🚀Mo oéMéo MMooo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "892154695378074136422085" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooM 🚀éoMo oo éMMéMoéoo🚀o 🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "901879116585764694543963" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 MM 🚀 oéé🚀é 🚀oé🚀oé é o 🚀o🚀éoo éo🚀 🚀MMM🚀 " + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x0747c3b1da93154e98dca22db9b30987ed2ed20c0d806647b1288968a3c7d7" + }, + { + "type": "number", + "value": "4146567576601627746825362586315" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x5f0f712b08bf9f443e4b1e177842f36510f49100058d3ea926cd25630247a7" + }, + { + "type": "number", + "value": "7224863001570592521097169560835" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa6db2d5c4a63a868f1a217950b0b308cee6bf793a070fe16729c4b62effbe8" + }, + { + "type": "number", + "value": "10157693620079683599116916718228" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x68169af8168260dc2ecfb574beac056944f32f2f530a7ea62ed3cd1577ba6e" + }, + { + "type": "number", + "value": "18999040883110654313566239821052" + } + ] + } + ] + }, + { + "type": "number", + "value": "23705855955643" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Moo oMéoééooé" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-602593327" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "68387087619570718" + }, + { + "type": "hexstring", + "value": "0x19417c16c4099975c42e171f8d5afc0165a795590aa4d4053e105f" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x453Ae228c89C6ed368617E677a883F251ae61593" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x5fcc25a764936dfa632e9515846c730f51dece1ec0f392da926ee942bb273b" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéoM ooééo 🚀🚀 🚀oo 🚀oooo M éo🚀éoo" + }, + { + "type": "hexstring", + "value": "0x33152d109b1c0e4be90cd6c417d5c70d17" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "867959008457721706592071" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oo éé MééMooMo🚀Méo 🚀oooo🚀MMooéoééM o🚀o🚀éo🚀oM" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "83607570335716133607005" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀ééMéoMéoo oMM o M éo é M o 🚀 Moo🚀é" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "487947877097455589394867" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooMoMoo🚀" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc626c1b4c9017d322408531761b91c8d5a563a7ee1caf991a87d491105136d" + }, + { + "type": "number", + "value": "16523666341471639949050835668816" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x9f8b3ff1ffdb11b8b7dd7966335f1086ab986d8e074ad0c64a6e9f2a2becac" + }, + { + "type": "number", + "value": "18715586166639367550398947210310" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x59681117d865de490b4dc9624d2c8d6dc81eee44ae06a90c9c13dbb800acf1" + }, + { + "type": "number", + "value": "11076808997132194427870041008509" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x4054712b301a4f27057b5c125287fdab406a13bbfec45fea29c6f8ca27ca28" + }, + { + "type": "number", + "value": "16924362469328952392198222756247" + } + ] + } + ] + }, + { + "type": "number", + "value": "229066645449592" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oooé🚀éé o🚀Moé🚀M ooo🚀MM 🚀é" + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50614e72806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906139a1565b60405180910390f35b61005661371a565b61005e61371a565b610066613747565b61006e613774565b6100766137a1565b630118141681526100856137cb565b66cca7cb4914964c81527f71ef38edd1de0d0fe4505a0d0ae63937d06557cd28350ca1571f3c00000000006020820152600160408201526100c46137f9565b7327b258fa3988a5e38dbaf403f8727441dad932868152600160208083018290526040805180820182526000928101929092529181529082015261010661382f565b7f25c195eec3482605a36958b210bc1d5437bfbdd949c9515603fba77abbdd55008152610131613845565b60006040518060800160405280604e8152602001614be7604e9139825250701c6931de09132e3290a2d92d13089fe63f60791b602082015260408051600480825260a08201909252600091816020015b61018961388c565b8152602001906001900390816101815790505090506101a661388c565b6101ae6138b9565b604080516020808201835269bf0771a5a1c4965a19a38252908352815160a08101909252606b80835260009291614a589083013960208301525081526101f26138b9565b604080516020808201835269155ef0db08267a77cae28252908352815160808101909252604e808352600092916144c6908301396020830152508082600160200201525061023e6138b9565b6040805160208082018352697d58ab58c3d4e07ad9998252908352815160608101909252603580835260009291613e8490830139602083015250604082015281518190839060009061029257610292613c3b565b6020026020010181905250506102a661388c565b6102ae6138b9565b60408051602080820183526964ec1f550940cdc25d798252908352815160808101909252604e80835260009291613fb99083013960208301525081526102f26138b9565b6040805160208082018352692c02dff21523e904d1138252908352815160a08101909252606280835260009291614291908301396020830152508082600160200201525061033e6138b9565b604080516020808201835269340bcde360be21435a8782529083528151608081019092526058808352600092916141eb908301396020830152506040820152815181908390600190811061039457610394613c3b565b6020026020010181905250506103a861388c565b6103b06138b9565b604080516020808201835269b218bf2798c223e3dee182529083528151808301909252600a8252689adede418753e13f3560b71b8282015282015281526103f56138b9565b604080516020808201835269965cc5cf4d6497545e1d82529083528151808301909252600c82526b4d6f6f20c3a9f09f9a80c3a960a01b82820152828101919091528201526104426138b9565b604080516020808201835269c0e38767130a4cf7ad5b82529083528151608081019092526054808352600092916145b7908301396020830152506040820152815181908390600290811061049857610498613c3b565b6020026020010181905250506104ac61388c565b6104b46138b9565b60408051602080820183526914399b60ab1d1faab80a825290835281516060810190925260278083526000929161467f9083013960208301525081526104f86138b9565b604080516020808201835269a2d1cf3589359e39b928825290835281516080810190925260538083526000929161480390830139602083015250808260016020020152506105446138b9565b604080516020808201835269da830f6f2efde7e4a76a8252908352815160608101909252603480835260009291614492908301396020830152506040820152815181908390600390811061059a5761059a613c3b565b60209081029190910101525060408201526105b36138d3565b6040805180820182527f8ef7380bb72bd51844a26505a8fd0c7fc4b8e3a6b621190a3645048351c5a60081526c24a49d9525487915b30428f309602080830191909152908352815180830183527fe4bb152090d38297f101ae13a44055271fc8fab29f0d3af2e7281571268bfa0081526c314b4223130b5febae5241185c8183015283820152815180830183527f42276335c2b5dc4a14c14aff1c50b566dc75c7b1a094b3e1e2bb9b6ec638410081526c752afc5e5746a464420564ac028183015283830152815180830183527fd6d90b6e348c2a6f2c2b3b68a8d9c0f3a98d9f00d489fe685e610a03cbcb720081526cb2d0e216711be929d85c6dff29818301526060808501919091528481019390935265b0f8bfbb37f060808501528481019390935284820193909352848101939093528481019390935280519182019052602d808252600092613f8c9083013960408301525081526107136137a1565b635a812fd181526107226137cb565b6613cf73188601d981527f2b5b999f8bd52f04f9f8a0369f3e05e13581bcbe71dc3e926aa6cb00000000006020820152600160408201526107616137f9565b73d13e497f1e5527a3c27834b0ded2b5fd3abeb6e5815260016020808301919091526040805180820182526000808252928101929092528201526107a361382f565b7f92d5e795f3be6659ea34b2b398b614b9826f2953e5e3d579aa3a4a8afcbddd0081526107ce613845565b60006040518060600160405280602f8152602001614dd6602f913982525070a4d9191c96565cd2c349f9c8530d0377fb60781b602082015260408051600280825260608201909252600091816020015b61082661388c565b81526020019060019003908161081e57905050905061084361388c565b61084b6138b9565b604080516020808201835269f61550409bcd4a3f1c478252908352815160808101909252605a8083526000929161451490830139602083015250815261088f6138b9565b60408051602080820183526939c91f8dbdf7a32e8c3a8252908352815160808101909252605d808352600092916148b590830139602083015250808260016020020152506108db6138b9565b604080516020808201835269a7a32dcfc52b81fb8aa1825290835281518083018352600d81526c4d6f6f20c3a9f09f9a80c3a94d60981b818301529083015282015281518190839060009061093257610932613c3b565b60200260200101819052505061094661388c565b61094e6138b9565b6040805160208082018352699929016d010501894b1e8252908352815160608101909252602680835260009291614c359083013960208301525081526109926138b9565b60408051602080820183526974e65ceafd6643fbbe538252908352815160608101909252603780835260009291613db090830139602083015250808260016020020152506109de6138b9565b6040805160208082018352694151064a80a334221ee882529083528151606081019092526034808352600092916149859083013960208301525060408201528151819083906001908110610a3457610a34613c3b565b6020908102919091010152506040820152610a4d6138d3565b6040805180820182527f18ea9744fff348e9c64f3338bf54fd041553be491bcfe49f0fdbe627414e4f0081526cdd6d2c2528c369d3a38962fcea602080830191909152908352815180830183527f7b7d35df8b8c2ac9211017182446b42780c97cbd9f6ebaed41f7c40ee5e62c0081526cc01fb30784f23cb589a60a0b868183015283820152815180830183527fd0162622470078e075a86c08146dda6fd059f9ee5b079d4bd6b5b6adb2dfcd0081526ca32cf9bb8e297ab513cd1d2c9f8183015283830152815180830183527f18f6d5237f961e45ae2b6adada04ed3fdbc633a51c9beaa1816fad92a328d90081526cdda138fdc238b631d13018e66c818301526060808501919091528481019390935265197a5b850a8960808501528481019390935284820193909352840192909252838201929092528151808301835260168152754d6f6f20c3a9f09f9a80f09f9a806f6ff09f9a806f6f60501b8183015291830191909152820152610bc16137a1565b633137444f8152610bd06137cb565b663e24a00398e78081527fa43c3be0e2ebe1219c4a9a4a17823b0445eb881d7a0a9dca7ce46b0000000000602082015260016040820152610c0f6137f9565b731f7d10a796a0b01ec3283a0efe4662ce1559ffd3815260006020808301829052604080518082018252928352600191830191909152820152610c5061382f565b7f18863b8b339012d809b98142942d7057915e6f5b3b625e9c64b9ffd31bb8ac008152610c7b613845565b604080518082018252600d81526c026b7b79061d4f84fcd4026a69609d1b602080830191909152908352702aea2b820e8dfca5d26a675335944badcf60781b83820152815160008082529181019092529081610ced565b610cda61388c565b815260200190600190039081610cd25790505b50604083015250610cfc6138d3565b6040805180820182527f7e5de7c2e33b38f32447900ca4420d0e255b08c343517d2504d64581feb2e60081526c689631c288415225d5768836c2602080830191909152908352815180830183527f6c4f2f5c1814515150ce9b74b2057cdac529c6c73269b96000196d7628df1a0081526c2b22bdb3bc07288b7ff759e33e8183015283820152815180830183527f35fc69846197173e24beb7c054125f739dadc8525e64368dc39e86ea7df9de0081526ce356b235c1c7235689dcaf44ff8183015283830152815180830183527f42f0058d747f79ab9ea3c6eebccd31062d143c2658ee554a5e991dc87dd26e0081526c2387df007ed2be3683376efed0818301526060808501919091528481019390935265fb65448cd1806080808601919091528582019490945285830194909452908501939093528482019390935281519283019091526054808352600092916143819083013960408301525080826002602002015250610e6a6137a1565b635eb79b5a198152610e7a6137cb565b6626e3d9e33d5f2e81527f412af116c31a93b0d27258332e5af002ccc7dc69e661a1cec244930000000000602082015260016040820152610eb96137f9565b73a74d366a1c62ae724e42fd89b72ee014c65c78df815260006020808301829052604080518082018252918201929092526001815290820152610efa61382f565b7fcb80725b7c1cad31f47d3ee80c560b81e8a4dd2b295eb79056bf742310fc8b008152610f25613845565b6000604051806060016040528060258152602001613f346025913982525070549857f3710859dfe684df5c1a374def7d60791b60208083019190915260408051600080825292810190915281610f91565b610f7e61388c565b815260200190600190039081610f765790505b50604083015250610fa06138d3565b6040805180820182527ff582f681c34198affb98cc050e274ae77f43f9e0addbe1a1938e4623282b3a0081526c13daea11ee82499a8cbcaae4da602080830191909152908352815180830183527ffb22bdbc137f750cdbc42c8a9f571dd771e9e5738f668c1b7a5a3733b8a33b0081526cd1ac26dd4622380ed40a53e5708183015283820152815180830183527f3bf36e2756998fdb9e589406842585077db4effd2a919776e6b41303546e1a0081526cfa184b154898f29a96f27098778183015283830152815180830183527fc97d5a7d513773d4ff04089a762c02aafdc49bc58717147150315948c3f6400081526c8235ef5112191bb0bf8f4f8e768183015260608085019190915284810193909352651e4819661738608080860191909152858201949094528583019490945290850193909352848201939093528151928301909152604480835260009291613c529083013960408301525060608201528152815261110d613747565b611115613774565b61111d6137a1565b635806fdfb815261112c6137cb565b66d6d2d9c866a5e381527f5332806576af8ec3d590461298d7f8128825a22aba5d48db506b25000000000060208201526000604082015261116b6137f9565b73b696e384d6829658bfb71d4b88bbbf321ff977738152600060208083018290526040805180820182529283526001918301919091528201526111ac61382f565b7f18729c2de78d8688c6ce47b17f62183da5d66fcc5037317ce617a5ade2f33b0081526111d7613845565b60408051808201825260148152734d6f6f20c3a9f09f9a804d206f6f6ff09f9a806f60601b6020808301919091529083527026b07b89792f6dc10a054ca5f625b67eab60781b83820152815160008082529181019092529081611250565b61123d61388c565b8152602001906001900390816112355790505b5060408301525061125f6138d3565b6040805180820182527fd3dab3151aaf56c3f4d62e2850a08f68bb168a0e2b6f2f239c42afb1a5dc970081526c56bdfb01a44934810af1010d60602080830191909152908352815180830183527f47c1dc43c86c201aa67a63dfe1304ce7e5133eebe45c296c6ddb64d08263b90081526c7e4e130416d1e7721fca3e1d7c8183015283820152815180830183527ffd7546ab959bba86a811b06891a91d2650f3576f09a7e1d289b61ff5f1e3770081526c2ffcbdb56f8d3b3c4d431d2db58183015283830152815180830183527ff158360981592577dcb27ec15e3e3b4b93772c9dcf893cafdbce2ec1832f640081526ca4f291cc57bf2c44a300162faf818301526060808501919091528481019390935265c551712f4a3e608080860191909152858201949094528583019490945285820194909452858301949094528251908101909252828252600092906140de9083013960408301525081526113c36137a1565b632c8cbb1d81526113d26137cb565b6639836a489d487a81527f860b14b2e17b3fd6cd1634596166f9a76cefd3de0b605ab9512b0e00000000006020820152600160408201526114116137f9565b73096563133d098c6cdb92d8af284ae57e067415938152600160208083018290526040805180820182526000928101929092529181529082015261145361382f565b7f6bf5b4a9ebe952fa7b8f9c4af1cd5a5d36834e99aff65611ac2085e6085bd900815261147e613845565b60006040518060600160405280602181526020016149646021913982525070bf51bb827ad140cd939d46eeb58884c04360781b602082015260408051600380825260808201909252600091816020015b6114d661388c565b8152602001906001900390816114ce5790505090506114f361388c565b6114fb6138b9565b604080516020808201835269a4d371eeda81e42e8dec8252908352815160808101909252605e80835260009291614c9890830139602083015250815261153f6138b9565b604080516020808201835269afb9e3a65b68a041d35a8252908352815160808101909252604e80835260009291614243908301396020830152508082600160200201525061158b6138b9565b6040805160208082018352694c9b9f8e4aff8719c99c825290835281518083018352600f81526d9adede418753e13f350041e13f35608f1b81830152908301528201528151819083906000906115e3576115e3613c3b565b6020026020010181905250506115f761388c565b6115ff6138b9565b6040805160208082018352691df5fc943e0aee527f178252908352815160608101909252602180835260009291614cf69083013960208301525081526116436138b9565b60408051602080820183526936d9fc42ef7e53491ed68252908352815160608101909252603380835260009291613f59908301396020830152508082600160200201525061168f6138b9565b604080516020808201835269f015190f7cf2b53556ef8252908352815160808101909252605780835260009291613c9690830139602083015250604082015281518190839060019081106116e5576116e5613c3b565b6020026020010181905250506116f961388c565b6117016138b9565b6040805160208082018352697f497e270a6c59a5da7f8252908352815160608101909252602280835260009291613d8e9083013960208301525081526117456138b9565b604080516020808201835269e89ab69e1bc53c38a45a8252908352815160a08101909252606380835260009291614d7390830139602083015250808260016020020152506117916138b9565b60408051602080820183526948577c29c1441b1120518252908352815160a0810190925260638083526000929161475f90830139602083015250604082015281518190839060029081106117e7576117e7613c3b565b60209081029190910101525060408201526118006138d3565b6040805180820182527fc28f97501f7791652fb45bb3d9976991bedac8ddf291eade2581dcc10dcf620081526c58f13e39e80440ae1edba08726602080830191909152908352815180830183527f4d41991d972b7c188164e117804b6339c4e0347122b0189b8503ef38892b280081526cff8bed1c531ae7be339c71f3888183015283820152815180830183527fbd58cef4a779fd62899c2c85e99373c3b7e387394dc1a389e38c9a68866e5b0081526c1e5b69488c6c5e2945d6df55938183015283830152815180830183527fd8690ec22dfafe6dc7c6ba7e040bbca489b51c01b046eb15613743edd44e640081526c9a679b189466ac7891ed0a1136818301526060808501919091528481019390935265554353c740986080850152848101939093528482019390935284019290925283820192909252815160a081019092526068808352600092916146d09083013960408301525060208201526119656137a1565b6336c1179781526119746137cb565b66c8ae59886da19981527f0ce34271c85d1f7ad57d1f3565af13198555b24f5c469c7c8d167000000000006020820152600160408201526119b36137f9565b7352381eb8042518cfcd935a58dec4334c3f97489e815260016020808301919091526040805180820182526000808252928101929092528201526119f561382f565b7fb547c7cfcd6b78f66b4eecfdea431273018a3671ef8d68065a8edc201c233b008152611a20613845565b600060405180608001604052806049815260200161456e60499139825250703f68e27ce7b2ad3ef0f90b12fef74c3aa360781b602082015260408051600480825260a08201909252600091816020015b611a7861388c565b815260200190600190039081611a70579050509050611a9561388c565b611a9d6138b9565b6040805160208082018352698994a150dbcbc6f507078252908352815160608101909252602f80835260009291614038908301396020830152508152611ae16138b9565b6040805160208082018352690c6194ce5f1ea66e66f5825290835281516080810190925260528083526000929161460b9083013960208301525080826001602002015250611b2d6138b9565b60408051602080820183526963616de9f1b585c9f23f82529083528151608081019092526046808352600092916143d5908301396020830152506040820152815181908390600090611b8157611b81613c3b565b602002602001018190525050611b9561388c565b611b9d6138b9565b60408051602080820183526926f0560e2199a723772d8252908352815180830190925260178252759adede418753e13f35009b8753e13f3500de9be13f35604f1b828201528201528152611bef6138b9565b60408051602080820183526995b45726de09ffc015b782529083528151808301909252600a8252689adede418753e13f3560b71b8282015282810191909152820152611c396138b9565b6040805160208082018352691b0924d007b91c9717da825290835281516060810190925260268083526000929161441b9083013960208301525060408201528151819083906001908110611c8f57611c8f613c3b565b602002602001018190525050611ca361388c565b611cab6138b9565b604080516020808201835269703d0b98f807d9e1f8ec82529083528151808301909252600a8252689adede418753e13f3560b71b828201528201528152611cf06138b9565b604080516020808201835269b10e5a7a94d653915b8f825290835281516080810190925260438083526000929161413e9083013960208301525080826001602002015250611d3c6138b9565b60408051602080820183526955ba78c28504bb3e3f2282529083528151808301835260158152744d6f6f20c3a9f09f9a806fc3a9206ff09f9a806f6f60581b81830152908301528201528151819083906002908110611d9d57611d9d613c3b565b602002602001018190525050611db161388c565b611db96138b9565b6040805160208082018352696c9ba5ef252941b1543e8252908352815180830190925260168252754d6f6f20c3a9f09f9a806f6f4dc3a9f09f9a806f6f6f60501b828201528201528152611e0b6138b9565b6040805160208082018352691ba2e3f78dbd08033d3082529083528151606081019092526027808352600092916147389083013960208301525080826001602002015250611e576138b9565b60408051602080820183526966b198f7d8b03f5533a382529083528151808301835260138152724d6f6f20c3a9f09f9a80f09f9a80c3a96fc3a960681b81830152908301528201528151819083906003908110611eb657611eb6613c3b565b6020908102919091010152506040820152611ecf6138d3565b6040805180820182527fe7ece7ae291cd0458a033985ada4c2fec400224a751c41f6447cf13301a4010081526ca32be1dc5af912bff887477822602080830191909152908352815180830183527f255a667a600e5ee772487aa83888580271ad9d46ee529c5a50f6f3acb0b16f0081526cd9edbf1e32aba56f7b3c8eb6f28183015283820152815180830183527f0db78f003a4145bebf8fbd7fce49fb124592f6c0e551fdc45bb4aa2fd837c90081526c6ab4b4e9a67a62ab296968edde8183015283830152815180830183527f6c94b1caf5cae510639dc473a027026fecb07fee48304a13c1fe99817356cb0081526c46aa6ff0856eab8c4a42c17364818301526060808501919091528481019390935265bc4a09284823608085015284810193909352848201939093528401929092528382019290925281518083018352601881527f4d6f6f20c3a9f09f9a806ff09f9a804dc3a96f6fc3a9206f0000000000000000918101919091528282015282015261204a6137a1565b637222eeeb19815261205a6137cb565b66481eaeb7d991d481527f1d2e9d46924e4f5913d7830e45246d546111b393349a7e5140807500000000006020820152600060408201526120996137f9565b73e197af46e9e37c4a6895ca782651da6377e279bf8152600060208083018290526040805180820182529182019290925260018152908201526120da61382f565b7fa188b35c1d88ceb6ee0784da9e16e8e808c8c736520c4e4bb31de59d598f32008152612105613845565b604080518082018252601081526f4d6f6f20c3a9f09f9a80206f206fc3a960801b6020808301919091529083527061a2d25a7d1a2179e68e410932c51efb9b60781b908301528051600280825260608201909252600091816020015b61216961388c565b81526020019060019003908161216157905050905061218661388c565b61218e6138b9565b604080516020808201835269ca06319d4c567aa92dcd82529083528151808301909252600a8252689adede418753e13f3560b71b8282015282015281526121d36138b9565b60408051602080820183526929a8c906d873daf6eee582529083528151808301909252601782527f4d6f6f20c3a9f09f9a806ff09f9a806f20c3a96f4d4d2000000000000000000082820152828101919091528201526122316138b9565b6040805160208082018352697fd4e78ed9893302405b825290835281518083018352601c81527f4d6f6f20c3a9f09f9a80206fc3a96f20c3a9c3a920f09f9a806f6f2000000000818301529083015282015281518190839060009061229857612298613c3b565b6020026020010181905250506122ac61388c565b6122b46138b9565b604080516020808201835269e8e06a9363537d9a381782529083528151606081019092526037808352600092916142f39083013960208301525081526122f86138b9565b604080516020808201835269cb34b438e61c3a41eb6f82529083528151606081019092526032808352600092916149b990830139602083015250808260016020020152506123446138b9565b604080516020808201835269d90d7ae6d724115146e98252908352815160608101909252603480835260009291613de7908301396020830152506040820152815181908390600190811061239a5761239a613c3b565b60209081029190910101525060408201526123b36138d3565b6040805180820182527f12dcb1bc894edcec544c35af28d5be0a590a40830edd501c8c715faeb812d90081526c584ac0305501dd6114c9a744d6602080830191909152908352815180830183527f8d9fbe397650464e7b601019a91d2728b4cadbbcbbe79d21bfeb1f71b5336c0081526c6c82a1c8aa84d7513e59bc7b198183015283820152815180830183527fcc1e1fdc69738faa5d6621e6570f96ea5455879d84e6aced6eb8f4a98532b80081526c733c9baf7be298187b324941ce8183015283830152815180830183527fb8b96fd6a9e1bd59acb7c0b76803b3ebc93ddd50715a5c7600ce89852e0ed00081526c358cda73d04a4471e0d14eccdf8183015260608085019190915284810193909352654e90382b65e660808501528481019390935284820193909352848101939093528481019390935280518082018252601b81527f4d6f6f20c3a9f09f9a80206f6fc3a96ff09f9a80f09f9a806f6f4d00000000008185015290840152830191909152908252820152612535613747565b61253d613774565b6125456137a1565b631ad3c4a381526125546137cb565b66069e15f8c19b1881527fe8132e5855fcb7e84a8c0cb2d9cd67b7931a9d2c93bf826c2b77b500000000006020820152600060408201526125936137f9565b73a322764125e3a508d77e0ba42c154c12e193bd5e815260016020808301919091526040805180820182526000808252928101929092528201526125d561382f565b7fde240c049f7da90a7ecb9156c990f89bdceb476917fd3322998d3bec8e0c5b008152612600613845565b604080518082018252601c81527f4d6f6f20c3a9f09f9a80204d204df09f9a806f6f6f4d4d4df09f9a80000000006020808301919091529083527030b9a2e3fdf2291d8029b8a1717c382dcd60791b908301528051600480825260a08201909252600091816020015b61267161388c565b81526020019060019003908161266957905050905061268e61388c565b6126966138b9565b604080516020808201835269d92baee7e5351a4cc12f8252908352815160608101909252603d80835260009291614c5b9083013960208301525081526126da6138b9565b6040805160208082018352692a59d3951b229224998e825290835281516060810190925260228083526000929161465d90830139602083015250808260016020020152506127266138b9565b6040805160208082018352691cc651a4bd544cecc371825290835281518083018352601081526f4d6f6f20c3a9f09f9a806ff09f9a806f60801b818301529083015282015281518190839060009061278057612780613c3b565b60200260200101819052505061279461388c565b61279c6138b9565b6040805160208082018352696d1dd82057764edd0c2d82529083528151808301909252601782527f4d6f6f20c3a9f09f9a806f4d6f6f20c3a9c3a96f4d4d200000000000000000008282015282015281526127f56138b9565b6040805160208082018352699ada22de720a2845ba038252908352815160a08101909252607b80835260009291613eb990830139602083015250808260016020020152506128416138b9565b60408051602080820183526954652f0f31a049dfd788825290835281518083018352601f81527f4d6f6f20c3a9f09f9a804d6ff09f9a80206f6f204d206fc3a9f09f9a806f2000818301529083015282015281518190839060019081106128aa576128aa613c3b565b6020026020010181905250506128be61388c565b6128c66138b9565b604080516020808201835269baa1895199ffb73979d18252908352815160808101909252605c80835260009291614d1790830139602083015250815261290a6138b9565b6040805160208082018352698ac0dc145507dec21fb98252908352815160a08101909252606380835260009291613ced90830139602083015250808260016020020152506129566138b9565b604080516020808201835269220c5d1d9832f031e72c8252908352815160a08101909252606d808352600092916149eb90830139602083015250604082015281518190839060029081106129ac576129ac613c3b565b6020026020010181905250506129c061388c565b6129c86138b9565b6040805160208082018352690d349946fdf439f5d6398252908352815160808101909252604d80835260009291614b5e908301396020830152508152612a0c6138b9565b604080516020808201835269cb29882ba331e2e1fc938252908352815160608101909252602a808352600092916146a69083013960208301525080826001602002015250612a586138b9565b6040805160208082018352691f07f29cabcc7a9338188252908352815160808101909252604b80835260009291614ac39083013960208301525060408201528151819083906003908110612aae57612aae613c3b565b6020908102919091010152506040820152612ac76138d3565b6040805180820182527f85d89f6f7782bc2075891a6d05add5f17d67133c2f7dfd884628f5b9135b5f0081526c66e6a3e4c99e55af5a4fade2fe602080830191909152908352815180830183527f0fb8607251804ff82b5b152a4bae09bd636adc9ad4063a6d6ca2cab25605370081526ccf35c04404a2233b8b48d8e6f08183015283820152815180830183527f3ccbe135ae880f89c39361f314bffdf7a5c2aa5a2dedae7c3a6caa348482360081526cdca1ee33037191c6b6af62c6828183015283830152815180830183527ffa0b99564ab5bb7c3cf61146ccf566c56f9a5a7aa6f2c2bda64b15303e17130081526cf6d9c76639a386b4f513294d928183015260608085019190915284810193909352654bc6fa3ce445608085015284810193909352848201939093528481019390935284810193909352805191820190526039808252600092614067908301396040830152508152612c276137a1565b6329c0f2318152612c366137cb565b669704204ab10aa381527eccca1671adbde8393212111aa00d5c0e5d7b5453b136a72d0b040000000000602082015260006040820152612c746137f9565b73a0cf4b6227a6214dcdfad8f3b9a2b2159342c9678152600160208083018290526040805180820182528381529182019290925290820152612cb461382f565b7fba32bcbcc576d6084f8da91ef59fabc42d2c32870f8f89e74d76849b23de8e008152612cdf613845565b6000604051806080016040528060508152602001614b0e6050913982525070e64be12210d44d8c9af2b28b479fdda6e760781b6020820152604080516001808252818301909252600091816020015b612d3661388c565b815260200190600190039081612d2e579050509050612d5361388c565b612d5b6138b9565b604080516020808201835269d386b862cc399a44a8148252908352815160608101909252603c80835260009291614bab908301396020830152508152612d9f6138b9565b6040805160208082018352698e59ec5123a8911a57f68252908352815160a08101909252606980835260009291613e1b9083013960208301525080826001602002015250612deb6138b9565b60408051602080820183526977c3ba4490b8f4f8bce582529083528151608081019092526041808352600092916147c2908301396020830152506040820152815181908390600090612e3f57612e3f613c3b565b6020908102919091010152506040820152612e586138d3565b6040805180820182527fdf5e535bdb2251e7b882f04e2c196d209e69bf0727fbcafe195e4536825a1b0081526c56d1c9e5ffc1204fad24e1e11f602080830191909152908352815180830183527f221da0d5340ce979deba370153b25c5ad15c51438f37375ab06c759b7a9f480081526cc3d7fdc29451b2c656f2396e138183015283820152815180830183527f814565cb98266cee7971f06826107017acb8ea548cde76f1a84d2ab364ad660081526c72a479051f3727927fa86f34388183015283830152815180830183527f57119d2a41f20ade5aa366907021ca01c8dabdc944aa24f0a17f237bbc063d0081526c9c8e068608b07f30afa6b69c1a81830152606080850191909152848101939093526505d2a625e7d5608080860191909152858201949094528583019490945290850193909352848201939093528151928301909152605180835260009291614441908301396040830152506020820152612fc16137a1565b63169cadc08152612fd06137cb565b6610f95153affb4b81527f8f000774670384e84ff808431f60951061811e1da8808f4b881570000000000060208201526001604082015261300f6137f9565b739b867cfd32926770310f8dc48f2a5761f8cedb0b815260016020808301829052604080518082018252838152918201929092529082015261304f61382f565b7f46011da7fb6d10b847738342476d67cdafa19c63bef70301d8e60a8212c84c00815261307a613845565b60006040518060a00160405280606a8152602001614181606a913982525070fdfac1c8007af04108c1865d6c50fa124960781b6020820152604080516001808252818301909252600091816020015b6130d161388c565b8152602001906001900390816130c95790505090506130ee61388c565b6130f66138b9565b6040805160208082018352690c259b72a84463ba457d8252908352815160808101909252605f8083526000929161485690830139602083015250815261313a6138b9565b604080516020808201835269bcebcd8de032fd2726c5825290835281516060810190925260318083526000929161400790830139602083015250808260016020020152506131866138b9565b604080516020808201835269befaf7021e66ebf84e5b825290835281516080810190925260578083526000929161432a9083013960208301525060408201528151819083906000906131da576131da613c3b565b60209081029190910101525060408201526131f36138d3565b6040805180820182527f0747c3b1da93154e98dca22db9b30987ed2ed20c0d806647b1288968a3c7d70081526c3456484ed978ceda172f61bacb602080830191909152908352815180830183527f5f0f712b08bf9f443e4b1e177842f36510f49100058d3ea926cd25630247a70081526c5b30ca9a6ea621145980ff65038183015283820152815180830183527fa6db2d5c4a63a868f1a217950b0b308cee6bf793a070fe16729c4b62effbe80081526c8035473b14a0868e33d4f37a948183015283830152815180830183527f68169af8168260dc2ecfb574beac056944f32f2f530a7ea62ed3cd1577ba6e0081526cefcd36468e7972a6b096498cfc818301526060808501919091528481019390935265158f731f92bb608085015284810193909352848201939093528401929092528382019290925281518083018352601b81527f4d6f6f20c3a9f09f9a804d6f6f206f4dc3a96fc3a9c3a96f6fc3a90000000000918101919091528282015282015261336e6137a1565b6323ead82e19815261337e6137cb565b66f2f5b1a0c9bc1e81527f19417c16c4099975c42e171f8d5afc0165a795590aa4d4053e105f00000000006020820152600160408201526133bd6137f9565b73453ae228c89c6ed368617e677a883f251ae61593815260006020808301919091526040805180820182526001808252928101929092528201526133ff61382f565b7f5fcc25a764936dfa632e9515846c730f51dece1ec0f392da926ee942bb273b00815261342a613845565b60006040518060600160405280603e8152602001613d50603e91398252507033152d109b1c0e4be90cd6c417d5c70d1760781b6020820152604080516001808252818301909252600091816020015b61348161388c565b81526020019060019003908161347957905050905061349e61388c565b6134a66138b9565b604080516020808201835269b7cc26f1fc61d16a374782529083528151608081019092526052808352600092916149129083013960208301525081526134ea6138b9565b60408051602080820183526911b4601ec870f6d8965d8252908352815160608101909252603e808352600092916140a090830139602083015250808260016020020152506135366138b9565b6040805160208082018352696753b519817bdb1a09b382529083528151808301835260158152739adede418753e13f3500dede9ade9adedfe13f35605f1b818301529083015282015281518190839060009061359457613594613c3b565b60209081029190910101525060408201526135ad6138d3565b6040805180820182527fc626c1b4c9017d322408531761b91c8d5a563a7ee1caf991a87d491105136d0081526cd08ed8722a753c28a6bf848f50602080830191909152908352815180830183527f9f8b3ff1ffdb11b8b7dd7966335f1086ab986d8e074ad0c64a6e9f2a2becac0081526cec3952079480b8826826a934468183015283820152815180830183527f59681117d865de490b4dc9624d2c8d6dc81eee44ae06a90c9c13dbb800acf10081526c8bcf19a6c0e2a5d0863ceae97d8183015283830152815180830183527f4054712b301a4f27057b5c125287fdab406a13bbfec45fea29c6f8ca27ca280081526cd59d9083b2ede887d6e32bb997818301526060808501919091528481019390935265d055bc082b78608085015284810193909352848201939093528481019390935284810193909352805191820190526038808252600092614e0590830139604083810191909152606084019290925250908252820152919050565b60405180606001604052806003905b613731613747565b8152602001906001900390816137295790505090565b60405180602001604052806001905b61375e613774565b8152602001906001900390816137565790505090565b60405180608001604052806004905b61378b6137a1565b8152602001906001900390816137835790505090565b6040518060600160405280600060030b81526020016137be6137cb565b8152602001606081525090565b6040805160808101825260008082526020820181905291810191909152606081016137f46137f9565b905290565b60408051608081018252600080825260208083018290528351808501855282815290810191909152909182019081526020016137f45b6040805180820190915260008152602081016137f45b6040518060a001604052806060815260200160006effffffffffffffffffffffffffffff191681526020016060815260200161387f6138d3565b8152600060209091015290565b60405180606001604052806003905b6138a36138b9565b81526020019060019003908161389b5790505090565b6040805160608101825260009181019182529081906137be565b60405180608001604052806004905b60408051808201909152600080825260208201528152602001906001900390816138e25790505090565b6000815180845260005b8181101561393257602081850181015186830182015201613916565b81811115613944576000602083870101525b50601f01601f19169290920160200192915050565b8060005b600481101561399b578151805160ff191685526020908101516cffffffffffffffffffffffffff16818601526040909401939091019060010161395d565b50505050565b60208152600060208201608083018460005b6003811015613c3057858303601f190184528151836020810160005b6001811015613c175786820383528351826080810160005b6004811015613bff5785820383528351805160030b835260208101516060602085015266ffffffffffffff815116606085015264ffffffffff196020820151166080850152604081015180151560a08601525060608101519050608060c085015260018060a01b0381511660e08501526020810151151561010085015260408101518051151561012086015260208101511515610140860152506060810151905060a061016085015260ff198151166101808501526020810151905060406101a085015280516101806101c0860152613ac461034086018261390c565b6020838101516effffffffffffffffffffffffffffff19166101e088015260408401518783036101bf1901610200890152805180845292935081019181840191600582901b85010160005b82811015613b9457858203601f190184528451826060810160005b6003811015613b7c578582038352835169ffffffffffffffffffff8151511683526020810151905060406020840152613b66604084018261390c565b6020958601959490940193925050600101613b2a565b50602097880197969096019593505050600101613b0f565b5060608601519450613baa6102208a0186613959565b60808601519550613bc66103208a018765ffffffffffff169052565b6040870151965088810360408a0152613bdf818861390c565b9850505050505050506020840193506020830192506001810190506139e7565b506020968701969590950194935050506001016139cf565b50602096870196909550939093019250506001016139b3565b509095945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a8020c3a9206f6f6fc3a96f206f6fc3a96f6ff09f9a806fc3a9f09f9a806f6fc3a94d204d4dc3a9206f6f4dc3a9f09f9a806f206f20f09f9a806f6f4d6f6f20c3a9f09f9a806f2020c3a96f20c3a94dc3a9f09f9a806f20204df09f9a806ff09f9a806f4d204d4d6f4d4d206f20c3a96f20c3a96ff09f9a80f09f9a806f4d4d202020f09f9a80f09f9a806f6f4dc3a96f4d6f4d6f6f20c3a9f09f9a80f09f9a806f6f6fc3a96f6ff09f9a80c3a9f09f9a804d4d4d6f6f20f09f9a80c3a9f09f9a80c3a9c3a96fc3a9c3a920c3a94dc3a9206f20c3a94d4d4d6f6f6ff09f9a806f6f6f4d4d6f6fc3a9c3a94d6f20c3a9206ff09f9a804d6f6f20c3a9f09f9a806fc3a96f4d206f6fc3a9c3a96f20f09f9a80f09f9a8020f09f9a806f6f20f09f9a806f6f6f6f204d20c3a96ff09f9a80c3a96f6f4d6f6f20c3a9f09f9a804d6f6f6ff09f9a8020c3a96f6f4d6fc3a9f09f9a80c3a96f4d6f6f20c3a9f09f9a806f6f6f6f4d4d4dc3a9f09f9a806f6ff09f9a80c3a96f6ff09f9a806f6ff09f9a8020f09f9a80c3a9f09f9a806f4d6f6f20c3a9f09f9a80f09f9a804d6f6f20206fc3a9f09f9a806f4d6f20f09f9a804d206f4d4d6f4d6f204dc3a94df09f9a806f4d6f6f20c3a9f09f9a806f6f6fc3a96ff09f9a806f6fc3a920f09f9a806ff09f9a804df09f9a806ff09f9a806f206f4d6f4dc3a9c3a9f09f9a80c3a96f6fc3a96f4d206f4df09f9a804d6f6fc3a94df09f9a806f20c3a9f09f9a80c3a94d6ff09f9a804d6f20c3a96f4d6f6f20c3a9f09f9a8020f09f9a80206f206ff09f9a80f09f9a804dc3a96f4d206fc3a96fc3a96ff09f9a806f4d6f4df09f9a804d4d6f6f20c3a9f09f9a80c3a9c3a94d6ff09f9a8020f09f9a806f20f09f9a806f6f6ff09f9a806f206ff09f9a80f09f9a804d4d20f09f9a806ff09f9a80206f6fc3a96ff09f9a80f09f9a80c3a94d6f6f6f6fc3a96f6ff09f9a804d6ff09f9a80f09f9a8020f09f9a80f09f9a80f09f9a806f4d6f6ff09f9a80c3a94d6f6f20c3a9f09f9a80c3a920c3a94d4d6f6f20c3a96f6f206f20f09f9a806fc3a94d6f4d4d6f6f20c3a9f09f9a80206f206fc3a9f09f9a806f4d4d4d6ff09f9a80f09f9a8020f09f9a806f4d6fc3a94d6f4d6ff09f9a804d6f6f20c3a9f09f9a80f09f9a806f2020f09f9a80f09f9a80f09f9a80204d206fc3a96f206f6fc3a9c3a9c3a94d6f6f20c3a9f09f9a806f4d6ff09f9a802020f09f9a804d206f6f6f6f6f206ff09f9a806f20c3a9c3a92020c3a94dc3a9c3a96f6fc3a96f6f4d206f6f6f6ff09f9a80f09f9a804d20c3a9206f6f4d6f6f20c3a9f09f9a806f6f4d20f09f9a80c3a96f4d6f206f6f20c3a94d4dc3a94d6fc3a96f6ff09f9a806f20f09f9a804d6f6f20c3a9f09f9a80c3a96f6f6f6f6ff09f9a806fc3a94d4d6f6f202020c3a96f20c3a920c3a9c3a9c3a9c3a96f4d6f6f20c3a9f09f9a80f09f9a806f6f6fc3a9206f4d206fc3a9f09f9a806ff09f9a804dc3a94d6f204df09f9a806f6f4df09f9a806f204d4d4d6f6f20c3a9f09f9a80f09f9a80c3a9c3a94dc3a96f4dc3a96f6f206f4d4d206f204d2020c3a96f20c3a9204d206f20f09f9a80204d6f6ff09f9a80c3a94d6f6f20c3a9f09f9a806f6fc3a94df09f9a80206fc3a9c3a96f6ff09f9a806f6f6ff09f9a80206f204dc3a9204dc3a92020206f6ff09f9a804d6f204df09f9a804d6ff09f9a80c3a96ff09f9a806f4d6f6f6ff09f9a8020f09f9a804d4d6f6f4d6f6f20c3a9f09f9a806ff09f9a80f09f9a8020f09f9a80f09f9a806f204d6ff09f9a804dc3a9c3a96f4dc3a96f4df09f9a806ff09f9a804dc3a96f6f6f4df09f9a804d6f6f20c3a9f09f9a80f09f9a80f09f9a806ff09f9a80f09f9a806fc3a9204d4df09f9a8020c3a96f4d6f4df09f9a80f09f9a80c3a96f6f6ff09f9a806ff09f9a806f6ff09f9a806f4df09f9a80c3a96fc3a9206f4d4d4d20c3a96f6fc3a9f09f9a80c3a96ff09f9a804d6f6f20c3a9f09f9a80f09f9a8020c3a94d6f4d6f206ff09f9a804d4df09f9a8020c3a9c3a94d6f20c3a96f6f6f4d6f6f6f4d6f6f6fc3a9c3a9f09f9a80f09f9a806f6ff09f9a80c3a9c3a96f20f09f9a80f09f9a8020204d6f6f20c3a9f09f9a804df09f9a80c3a94d204d206f20f09f9a80c3a9f09f9a80c3a9c3a9206f6fc3a94d6fc3a9204d4df09f9a804d6ff09f9a806ff09f9a804d4d4df09f9a80f09f9a80204d6f4d6f6f20c3a9f09f9a806f206f206f206ff09f9a80c3a96ff09f9a804d4d4d4d20f09f9a80f09f9a804df09f9a806f20f09f9a80c3a9f09f9a80c3a96fc3a96fc3a920c3a9204dc3a96ff09f9a804dc3a96f6ff09f9a80f09f9a806f4d4d6f6fc3a94d6f6f20c3a9f09f9a80c3a96f20f09f9a806f4d6fc3a9c3a9206f206f4d6f6f6f6f4df09f9a80c3a9c3a9f09f9a80f09f9a80c3a96f204d6f6f20c3a9f09f9a80204d4d20f09f9a80206fc3a9c3a9f09f9a80c3a92020f09f9a806fc3a9f09f9a806fc3a920c3a9206f20f09f9a806ff09f9a80c3a96f6f20c3a96ff09f9a8020f09f9a804d4d4df09f9a8020204d6f6f20c3a9f09f9a806f206f6f6f6f4dc3a9c3a9204dc3a94d4d206f6f4d6f20c3a96fc3a94d6fc3a92020f09f9a806f4dc3a94d4d20c3a9204d206f4d6f6f6ff09f9a80c3a9c3a920206f6f6fc3a9c3a94d204d6f6f20c3a9f09f9a80f09f9a806f4d20f09f9a804d6f6f204d4d4dc3a9206f6f206f6ff09f9a806f6ff09f9a806f4d4dc3a9204d206f6fc3a9c3a96fc3a94d6f20c3a9206f4d6f6f20c3a9f09f9a80c3a94d6ff09f9a80c3a9c3a96fc3a94dc3a96ff09f9a806ff09f9a804d6f6f20c3a9f09f9a80f09f9a806ff09f9a80f09f9a806f6f4df09f9a806f6ff09f9a80c3a9c3a9f09f9a80f09f9a806fc3a96f4d20f09f9a804d6ff09f9a80f09f9a80f09f9a80f09f9a80f09f9a806f4d6f6f20c3a9f09f9a8020c3a94d20c3a96fc3a9f09f9a804df09f9a804d204dc3a96f6f6fc3a9f09f9a80204d20c3a96f206f4d4d6f6f20c3a9f09f9a804dc3a9204d6f4d4d6ff09f9a80c3a96f4d6f4d6f6ff09f9a806f20f09f9a80c3a9c3a9204df09f9a804d6fc3a94d6f4df09f9a804dc3a9f09f9a806f6ff09f9a804d20204d6f6f20c3a9f09f9a80f09f9a80206f6fc3a9c3a96fc3a920204d4d204d20c3a9c3a96f206f20f09f9a8020c3a920f09f9a804d6f206f20c3a96f6f4df09f9a804d4d20f09f9a806fc3a94df09f9a80c3a96f2020204dc3a96f4d6f6f20c3a9f09f9a806f6fc3a96f206ff09f9a804dc3a96f4d4dc3a92020f09f9a806fc3a9f09f9a80f09f9a806f20204d2020c3a96f6fc3a94dc3a92020c3a96fc3a9c3a96fc3a94d6f6f20c3a9f09f9a804d6f206f6f6f4dc3a96f6f4dc3a9c3a9c3a9f09f9a80f09f9a80f09f9a804d20206f4dc3a9c3a9c3a94d4d6f6fc3a9f09f9a80c3a96fc3a96f204d6f6f6ff09f9a804d206f204d6f6f6f4d6f6f20c3a9f09f9a802020204d6f6f6f6fc3a96f6fc3a9c3a9f09f9a806ff09f9a806f206f4d20204d6f6ff09f9a804d6f20c3a9c3a96f6f206fc3a96f6f6f6ff09f9a806f6fc3a9f09f9a80206f6f4d204d6f6f20c3a9f09f9a80f09f9a804df09f9a80f09f9a804d4d20c3a9c3a9c3a9206f4d6f6f20c3a9f09f9a80c3a9206f6f20f09f9a80f09f9a80f09f9a80c3a96fc3a96f4d4d206f6f4d6f6f20c3a9f09f9a806f20c3a96f4d20f09f9a8020c3a94d6f4d4d6ff09f9a804d6f4d4df09f9a806f4d6f6f20c3a9f09f9a806f6f6ff09f9a8020204df09f9a806f4d4dc3a920f09f9a804df09f9a80c3a96ff09f9a806f6f206f6f4d20c3a9f09f9a806f6f6fc3a9c3a920c3a9c3a9c3a96f6fc3a96ff09f9a806ff09f9a806f6fc3a96f20206f206f206ff09f9a806f4d6f6f20c3a9f09f9a804dc3a920f09f9a806f4dc3a94df09f9a80f09f9a806f4dc3a96f206f4d4d6f6f20c3a9f09f9a80f09f9a806fc3a9f09f9a804df09f9a806f6fc3a9c3a9c3a94d6f206f6f4dc3a94df09f9a806f6ff09f9a804d6f6f204df09f9a80f09f9a80f09f9a806ff09f9a806f6f20f09f9a806f4d6ff09f9a80c3a9206f204df09f9a804d6f6f20c3a9f09f9a80c3a96ff09f9a806f6f4d6f6fc3a9206f6f6f4d20206f6f4d4d6fc3a94dc3a94dc3a9206f4d4d20204d4d4d4dc3a96f4d6f4dc3a96f4d6f4d6f6f20c3a9f09f9a80f09f9a8020c3a9f09f9a806ff09f9a806ff09f9a80206f6fc3a94d6f6f204d204d4dc3a9206fc3a94d4d6f4d206f6f20c3a9c3a920f09f9a80c3a9f09f9a80204df09f9a80f09f9a804d6f6f20c3a9f09f9a80c3a96ff09f9a802020c3a96fc3a94d4d4dc3a96f20c3a920c3a9c3a94df09f9a80f09f9a80f09f9a806f6fc3a9f09f9a804d6ff09f9a80f09f9a804dc3a94dc3a9f09f9a804d6f206fc3a94dc3a96f204d4d6f6f6f4d6f6f20c3a9f09f9a806f4d206fc3a920c3a9c3a96f6ff09f9a806fc3a9f09f9a804d6fc3a9c3a96ff09f9a806f6fc3a9c3a96f6f6fc3a9c3a9c3a9206f6fc3a9c3a96f4dc3a9206f20f09f9a8020c3a9c3a96f204d6f4d4d20c3a94d4d6f6f20c3a9f09f9a806f6f20c3a9c3a9204dc3a9c3a94d6f6f4d6ff09f9a804dc3a96f2020f09f9a806f6f6f6ff09f9a804d4d6f6fc3a96fc3a9c3a94d206ff09f9a806ff09f9a80c3a96ff09f9a806f4d4d6f6f20c3a9f09f9a80c3a94d6f204d6f6f6fc3a94dc3a96ff09f9a804d20c3a94d6f6f20c3a9f09f9a806ff09f9a806fc3a9c3a94d20206ff09f9a8020206f206f6f6fc3a9f09f9a8020c3a96f20c3a9f09f9a804d6f6f20c3a9f09f9a8020f09f9a804d20204d6f6f6fc3a9f09f9a80206f6f204d206f206f6f20f09f9a806f206fc3a9204d4d6f6f20c3a9f09f9a806f6f4df09f9a806f4d206f206fc3a96fc3a9f09f9a806fc3a96ff09f9a804d20f09f9a806ff09f9a80f09f9a80f09f9a80c3a9f09f9a8020c3a94d206fc3a96f204d204df09f9a806fc3a920f09f9a80f09f9a80f09f9a804dc3a9f09f9a80206f206f4d6f6f20c3a9f09f9a806ff09f9a80f09f9a80c3a9f09f9a80f09f9a80206f4df09f9a80f09f9a80c3a9c3a9c3a9c3a9f09f9a80f09f9a806fc3a94d6f4d206f6fc3a9c3a96ff09f9a8020206fc3a9f09f9a80204dc3a96f6f206f6f206f6f6f4d206ff09f9a804dc3a96f4d6f6f20c3a9f09f9a80f09f9a806fc3a96f6f4d6ff09f9a8020f09f9a80204dc3a9f09f9a806f6f4d6f6f6f6ff09f9a80f09f9a804dc3a96f6fc3a96fc3a96f4d6f6f6f6f6f6f4d6f6f6f4d6f6f20c3a9f09f9a80f09f9a806ff09f9a80204d4dc3a96f204d6f6f6ff09f9a80c3a96f20f09f9a8020c3a9206fc3a96ff09f9a80c3a94dc3a94dc3a94dc3a94df09f9a804d6f6f6f20f09f9a806f4d6f6f20c3a9f09f9a806ff09f9a80f09f9a80f09f9a804d6fc3a96f6f4dc3a9c3a9c3a9c3a9c3a9c3a920c3a9f09f9a80206ff09f9a806f6f20f09f9a80c3a94df09f9a80c3a96f4d204d206f4d6f6f20c3a9f09f9a806f6f6f20c3a96f4d6f20206f20f09f9a80c3a94d6ff09f9a804df09f9a806f4d6fc3a9206f6fc3a96ff09f9a80c3a94dc3a94d6f6f20c3a9f09f9a80f09f9a804df09f9a80c3a96f206ff09f9a804df09f9a80c3a9206f2020c3a9f09f9a80c3a96ff09f9a804df09f9a806ff09f9a806f6f6fc3a96f6f6f4d6fc3a9f09f9a804d6f6f20c3a9f09f9a806f206f4dc3a9c3a94d6f206f6f6f6f6f6f6ff09f9a80f09f9a80204d4d6f6f20c3a9f09f9a806f4d6f4dc3a96fc3a96f4d6f206fc3a94d6f206f4d206f6f6f6f4d4d6f4dc3a9204d4d206f6f4d4dc3a9c3a9f09f9a806f206f4d6f6f20c3a9f09f9a80f09f9a806f6f6f4df09f9a80c3a92020f09f9a80c3a96f6f6f6f4df09f9a806ff09f9a804d4d6fc3a96f4d4df09f9a806f6fc3a96f4df09f9a80c3a9206f206fc3a96fc3a9204d4d6f6fc3a9f09f9a80204dc3a94d6f6f20c3a9f09f9a806ff09f9a806f6ff09f9a80c3a9206fc3a920c3a9c3a96f4d6f6f20c3a9f09f9a804d6fc3a9f09f9a80c3a96f204d20c3a94d4df09f9a806f6f4d4df09f9a80206f6f6f4df09f9a806f4d6f6f6ff09f9a80f09f9a80c3a94d4d4df09f9a80f09f9a80206ff09f9a804d4d6f4df09f9a80204d6f4d6f6f20c3a9f09f9a806f4df09f9a80f09f9a80c3a96f4d4d4df09f9a80f09f9a806f6f6fc3a96f6f6f4dc3a94d6ff09f9a806f4dc3a94d6fc3a9f09f9a806f4d6ff09f9a802020c3a96ff09f9a8020206f6f6f20f09f9a80c3a96fc3a9f09f9a806f4d6f6f20c3a9f09f9a806fc3a94d6f4d206f4df09f9a804d6f20204dc3a96ff09f9a80c3a96f4d6fc3a920c3a9c3a94d6f6f20c3a9f09f9a806f6f6fc3a9f09f9a80c3a9c3a9206ff09f9a804d6fc3a9f09f9a804d206f6f6ff09f9a804d4d2020f09f9a80c3a9a2646970667358221220bab7fc4e6040e2128adcb0612a4304c680e93bf7c36847f523af78118a5a01e164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_25e98821 {\n bool s_0;\n bool s_1;\n }\n\n struct S_54896afd {\n uint80 s_0;\n }\n\n struct S_5758d412 {\n S_54896afd s_0;\n string s_1;\n }\n\n struct S_d8e64867 {\n bytes31 s_0;\n uint104 s_1;\n }\n\n struct S_770db331 {\n string s_0;\n bytes17 s_1;\n S_5758d412[3][] s_2;\n S_d8e64867[4] s_3;\n uint48 s_4;\n }\n\n struct S_a55eb82d {\n bytes31 s_0;\n S_770db331 s_1;\n }\n\n struct S_733a0ce7 {\n address s_0;\n bool s_1;\n S_25e98821 s_2;\n S_a55eb82d s_3;\n }\n\n struct S_c8d7c908 {\n uint56 s_0;\n bytes27 s_1;\n bool s_2;\n S_733a0ce7 s_3;\n }\n\n struct S_920026e8 {\n int32 s_0;\n S_c8d7c908 s_1;\n string s_2;\n }\n\n function test () public pure returns (S_920026e8[4][1][3] memory) {\n S_920026e8[4][1][3] memory r;\n {\n S_920026e8[4][1] memory r_0;\n {\n S_920026e8[4] memory r_0_0;\n {\n S_920026e8 memory r_0_0_0;\n {\n int32 r_0_0_0_0 = 18355222;\n r_0_0_0.s_0 = r_0_0_0_0;\n }\n {\n S_c8d7c908 memory r_0_0_0_1;\n {\n uint56 r_0_0_0_1_0 = 57605386795259468;\n r_0_0_0_1.s_0 = r_0_0_0_1_0;\n }\n {\n bytes27 r_0_0_0_1_1 = bytes27(0x71ef38edd1de0d0fe4505a0d0ae63937d06557cd28350ca1571f3c);\n r_0_0_0_1.s_1 = r_0_0_0_1_1;\n }\n {\n bool r_0_0_0_1_2 = true;\n r_0_0_0_1.s_2 = r_0_0_0_1_2;\n }\n {\n S_733a0ce7 memory r_0_0_0_1_3;\n {\n address r_0_0_0_1_3_0 = 0x27b258FA3988A5E38dBAf403f8727441Dad93286;\n r_0_0_0_1_3.s_0 = r_0_0_0_1_3_0;\n }\n {\n bool r_0_0_0_1_3_1 = true;\n r_0_0_0_1_3.s_1 = r_0_0_0_1_3_1;\n }\n {\n S_25e98821 memory r_0_0_0_1_3_2;\n {\n bool r_0_0_0_1_3_2_0 = true;\n r_0_0_0_1_3_2.s_0 = r_0_0_0_1_3_2_0;\n }\n {\n bool r_0_0_0_1_3_2_1 = false;\n r_0_0_0_1_3_2.s_1 = r_0_0_0_1_3_2_1;\n }\n r_0_0_0_1_3.s_2 = r_0_0_0_1_3_2;\n }\n {\n S_a55eb82d memory r_0_0_0_1_3_3;\n {\n bytes31 r_0_0_0_1_3_3_0 = bytes31(0x25c195eec3482605a36958b210bc1d5437bfbdd949c9515603fba77abbdd55);\n r_0_0_0_1_3_3.s_0 = r_0_0_0_1_3_3_0;\n }\n {\n S_770db331 memory r_0_0_0_1_3_3_1;\n {\n string memory r_0_0_0_1_3_3_1_0 = unicode\"Moo é🚀🚀M🚀éo o🚀M🚀é o é🚀éo🚀M🚀o🚀oooéoooMoé🚀\";\n r_0_0_0_1_3_3_1.s_0 = r_0_0_0_1_3_3_1_0;\n }\n {\n bytes17 r_0_0_0_1_3_3_1_1 = bytes17(0x38d263bc12265c652145b25a26113fcc7e);\n r_0_0_0_1_3_3_1.s_1 = r_0_0_0_1_3_3_1_1;\n }\n {\n S_5758d412[3][] memory r_0_0_0_1_3_3_1_2 = new S_5758d412[3][](4);\n {\n S_5758d412[3] memory r_0_0_0_1_3_3_1_2_0;\n {\n S_5758d412 memory r_0_0_0_1_3_3_1_2_0_0;\n {\n S_54896afd memory r_0_0_0_1_3_3_1_2_0_0_0;\n {\n uint80 r_0_0_0_1_3_3_1_2_0_0_0_0 = 902109314565981353941411;\n r_0_0_0_1_3_3_1_2_0_0_0.s_0 = r_0_0_0_1_3_3_1_2_0_0_0_0;\n }\n r_0_0_0_1_3_3_1_2_0_0.s_0 = r_0_0_0_1_3_3_1_2_0_0_0;\n }\n {\n string memory r_0_0_0_1_3_3_1_2_0_0_1 = unicode\"Moo é🚀o🚀🚀é🚀🚀 oM🚀🚀éééé🚀🚀oéMoM ooééo🚀 oé🚀 Méoo oo oooM o🚀Méo\";\n r_0_0_0_1_3_3_1_2_0_0.s_1 = r_0_0_0_1_3_3_1_2_0_0_1;\n }\n r_0_0_0_1_3_3_1_2_0[0] = r_0_0_0_1_3_3_1_2_0_0;\n }\n {\n S_5758d412 memory r_0_0_0_1_3_3_1_2_0_1;\n {\n S_54896afd memory r_0_0_0_1_3_3_1_2_0_1_0;\n {\n uint80 r_0_0_0_1_3_3_1_2_0_1_0_0 = 100921045557741606128354;\n r_0_0_0_1_3_3_1_2_0_1_0.s_0 = r_0_0_0_1_3_3_1_2_0_1_0_0;\n }\n r_0_0_0_1_3_3_1_2_0_1.s_0 = r_0_0_0_1_3_3_1_2_0_1_0;\n }\n {\n string memory r_0_0_0_1_3_3_1_2_0_1_1 = unicode\"Moo é🚀Mé MoMMo🚀éoMoMoo🚀o 🚀éé M🚀MoéMoM🚀Mé🚀oo🚀M \";\n r_0_0_0_1_3_3_1_2_0_1.s_1 = r_0_0_0_1_3_3_1_2_0_1_1;\n }\n r_0_0_0_1_3_3_1_2_0[1] = r_0_0_0_1_3_3_1_2_0_1;\n }\n {\n S_5758d412 memory r_0_0_0_1_3_3_1_2_0_2;\n {\n S_54896afd memory r_0_0_0_1_3_3_1_2_0_2_0;\n {\n uint80 r_0_0_0_1_3_3_1_2_0_2_0_0 = 591931470670889595099545;\n r_0_0_0_1_3_3_1_2_0_2_0.s_0 = r_0_0_0_1_3_3_1_2_0_2_0_0;\n }\n r_0_0_0_1_3_3_1_2_0_2.s_0 = r_0_0_0_1_3_3_1_2_0_2_0;\n }\n {\n string memory r_0_0_0_1_3_3_1_2_0_2_1 = unicode\"Moo é🚀 🚀 o o🚀🚀MéoM oéoéo🚀oMoM🚀M\";\n r_0_0_0_1_3_3_1_2_0_2.s_1 = r_0_0_0_1_3_3_1_2_0_2_1;\n }\n r_0_0_0_1_3_3_1_2_0[2] = r_0_0_0_1_3_3_1_2_0_2;\n }\n r_0_0_0_1_3_3_1_2[0] = r_0_0_0_1_3_3_1_2_0;\n }\n {\n S_5758d412[3] memory r_0_0_0_1_3_3_1_2_1;\n {\n S_5758d412 memory r_0_0_0_1_3_3_1_2_1_0;\n {\n S_54896afd memory r_0_0_0_1_3_3_1_2_1_0_0;\n {\n uint80 r_0_0_0_1_3_3_1_2_1_0_0_0 = 476592337609322106346873;\n r_0_0_0_1_3_3_1_2_1_0_0.s_0 = r_0_0_0_1_3_3_1_2_1_0_0_0;\n }\n r_0_0_0_1_3_3_1_2_1_0.s_0 = r_0_0_0_1_3_3_1_2_1_0_0;\n }\n {\n string memory r_0_0_0_1_3_3_1_2_1_0_1 = unicode\"Moo é🚀oMo🚀 🚀M ooooo o🚀o éé éMééooéooM oooo🚀🚀M é oo\";\n r_0_0_0_1_3_3_1_2_1_0.s_1 = r_0_0_0_1_3_3_1_2_1_0_1;\n }\n r_0_0_0_1_3_3_1_2_1[0] = r_0_0_0_1_3_3_1_2_1_0;\n }\n {\n S_5758d412 memory r_0_0_0_1_3_3_1_2_1_1;\n {\n S_54896afd memory r_0_0_0_1_3_3_1_2_1_1_0;\n {\n uint80 r_0_0_0_1_3_3_1_2_1_1_0_0 = 207837155718070607859987;\n r_0_0_0_1_3_3_1_2_1_1_0.s_0 = r_0_0_0_1_3_3_1_2_1_1_0_0;\n }\n r_0_0_0_1_3_3_1_2_1_1.s_0 = r_0_0_0_1_3_3_1_2_1_1_0;\n }\n {\n string memory r_0_0_0_1_3_3_1_2_1_1_1 = unicode\"Moo é🚀o o o o🚀éo🚀MMMM 🚀🚀M🚀o 🚀é🚀éoéoé é Méo🚀Méoo🚀🚀oMMooé\";\n r_0_0_0_1_3_3_1_2_1_1.s_1 = r_0_0_0_1_3_3_1_2_1_1_1;\n }\n r_0_0_0_1_3_3_1_2_1[1] = r_0_0_0_1_3_3_1_2_1_1;\n }\n {\n S_5758d412 memory r_0_0_0_1_3_3_1_2_1_2;\n {\n S_54896afd memory r_0_0_0_1_3_3_1_2_1_2_0;\n {\n uint80 r_0_0_0_1_3_3_1_2_1_2_0_0 = 245780807101999562840711;\n r_0_0_0_1_3_3_1_2_1_2_0.s_0 = r_0_0_0_1_3_3_1_2_1_2_0_0;\n }\n r_0_0_0_1_3_3_1_2_1_2.s_0 = r_0_0_0_1_3_3_1_2_1_2_0;\n }\n {\n string memory r_0_0_0_1_3_3_1_2_1_2_1 = unicode\"Moo é🚀🚀 éMoMo o🚀MM🚀 ééMo éoooMoooMoooéé🚀🚀oo🚀ééo 🚀🚀 \";\n r_0_0_0_1_3_3_1_2_1_2.s_1 = r_0_0_0_1_3_3_1_2_1_2_1;\n }\n r_0_0_0_1_3_3_1_2_1[2] = r_0_0_0_1_3_3_1_2_1_2;\n }\n r_0_0_0_1_3_3_1_2[1] = r_0_0_0_1_3_3_1_2_1;\n }\n {\n S_5758d412[3] memory r_0_0_0_1_3_3_1_2_2;\n {\n S_5758d412 memory r_0_0_0_1_3_3_1_2_2_0;\n {\n S_54896afd memory r_0_0_0_1_3_3_1_2_2_0_0;\n {\n uint80 r_0_0_0_1_3_3_1_2_2_0_0_0 = 841037729954510806441697;\n r_0_0_0_1_3_3_1_2_2_0_0.s_0 = r_0_0_0_1_3_3_1_2_2_0_0_0;\n }\n r_0_0_0_1_3_3_1_2_2_0.s_0 = r_0_0_0_1_3_3_1_2_2_0_0;\n }\n {\n string memory r_0_0_0_1_3_3_1_2_2_0_1 = unicode\"Moo é🚀\";\n r_0_0_0_1_3_3_1_2_2_0.s_1 = r_0_0_0_1_3_3_1_2_2_0_1;\n }\n r_0_0_0_1_3_3_1_2_2[0] = r_0_0_0_1_3_3_1_2_2_0;\n }\n {\n S_5758d412 memory r_0_0_0_1_3_3_1_2_2_1;\n {\n S_54896afd memory r_0_0_0_1_3_3_1_2_2_1_0;\n {\n uint80 r_0_0_0_1_3_3_1_2_2_1_0_0 = 710066326581668142669341;\n r_0_0_0_1_3_3_1_2_2_1_0.s_0 = r_0_0_0_1_3_3_1_2_2_1_0_0;\n }\n r_0_0_0_1_3_3_1_2_2_1.s_0 = r_0_0_0_1_3_3_1_2_2_1_0;\n }\n {\n string memory r_0_0_0_1_3_3_1_2_2_1_1 = unicode\"Moo é🚀é\";\n r_0_0_0_1_3_3_1_2_2_1.s_1 = r_0_0_0_1_3_3_1_2_2_1_1;\n }\n r_0_0_0_1_3_3_1_2_2[1] = r_0_0_0_1_3_3_1_2_2_1;\n }\n {\n S_5758d412 memory r_0_0_0_1_3_3_1_2_2_2;\n {\n S_54896afd memory r_0_0_0_1_3_3_1_2_2_2_0;\n {\n uint80 r_0_0_0_1_3_3_1_2_2_2_0_0 = 910891532403756632616283;\n r_0_0_0_1_3_3_1_2_2_2_0.s_0 = r_0_0_0_1_3_3_1_2_2_2_0_0;\n }\n r_0_0_0_1_3_3_1_2_2_2.s_0 = r_0_0_0_1_3_3_1_2_2_2_0;\n }\n {\n string memory r_0_0_0_1_3_3_1_2_2_2_1 = unicode\"Moo é🚀Mo oooMéooMééé🚀🚀🚀M oMéééMMooé🚀éoéo Mooo🚀M o Mooo\";\n r_0_0_0_1_3_3_1_2_2_2.s_1 = r_0_0_0_1_3_3_1_2_2_2_1;\n }\n r_0_0_0_1_3_3_1_2_2[2] = r_0_0_0_1_3_3_1_2_2_2;\n }\n r_0_0_0_1_3_3_1_2[2] = r_0_0_0_1_3_3_1_2_2;\n }\n {\n S_5758d412[3] memory r_0_0_0_1_3_3_1_2_3;\n {\n S_5758d412 memory r_0_0_0_1_3_3_1_2_3_0;\n {\n S_54896afd memory r_0_0_0_1_3_3_1_2_3_0_0;\n {\n uint80 r_0_0_0_1_3_3_1_2_3_0_0_0 = 95509990206409565452298;\n r_0_0_0_1_3_3_1_2_3_0_0.s_0 = r_0_0_0_1_3_3_1_2_3_0_0_0;\n }\n r_0_0_0_1_3_3_1_2_3_0.s_0 = r_0_0_0_1_3_3_1_2_3_0_0;\n }\n {\n string memory r_0_0_0_1_3_3_1_2_3_0_1 = unicode\"Moo é🚀é oo 🚀🚀🚀éoéoMM oo\";\n r_0_0_0_1_3_3_1_2_3_0.s_1 = r_0_0_0_1_3_3_1_2_3_0_1;\n }\n r_0_0_0_1_3_3_1_2_3[0] = r_0_0_0_1_3_3_1_2_3_0;\n }\n {\n S_5758d412 memory r_0_0_0_1_3_3_1_2_3_1;\n {\n S_54896afd memory r_0_0_0_1_3_3_1_2_3_1_0;\n {\n uint80 r_0_0_0_1_3_3_1_2_3_1_0_0 = 768893670727290818509096;\n r_0_0_0_1_3_3_1_2_3_1_0.s_0 = r_0_0_0_1_3_3_1_2_3_1_0_0;\n }\n r_0_0_0_1_3_3_1_2_3_1.s_0 = r_0_0_0_1_3_3_1_2_3_1_0;\n }\n {\n string memory r_0_0_0_1_3_3_1_2_3_1_1 = unicode\"Moo é🚀🚀 é🚀o🚀o🚀 ooéMoo M MMé oéMMoM oo éé 🚀é🚀 M🚀🚀\";\n r_0_0_0_1_3_3_1_2_3_1.s_1 = r_0_0_0_1_3_3_1_2_3_1_1;\n }\n r_0_0_0_1_3_3_1_2_3[1] = r_0_0_0_1_3_3_1_2_3_1;\n }\n {\n S_5758d412 memory r_0_0_0_1_3_3_1_2_3_2;\n {\n S_54896afd memory r_0_0_0_1_3_3_1_2_3_2_0;\n {\n uint80 r_0_0_0_1_3_3_1_2_3_2_0_0 = 1031893528898539643774826;\n r_0_0_0_1_3_3_1_2_3_2_0.s_0 = r_0_0_0_1_3_3_1_2_3_2_0_0;\n }\n r_0_0_0_1_3_3_1_2_3_2.s_0 = r_0_0_0_1_3_3_1_2_3_2_0;\n }\n {\n string memory r_0_0_0_1_3_3_1_2_3_2_1 = unicode\"Moo é🚀 éM éoé🚀M🚀M Méoooé🚀 M éo oM\";\n r_0_0_0_1_3_3_1_2_3_2.s_1 = r_0_0_0_1_3_3_1_2_3_2_1;\n }\n r_0_0_0_1_3_3_1_2_3[2] = r_0_0_0_1_3_3_1_2_3_2;\n }\n r_0_0_0_1_3_3_1_2[3] = r_0_0_0_1_3_3_1_2_3;\n }\n r_0_0_0_1_3_3_1.s_2 = r_0_0_0_1_3_3_1_2;\n }\n {\n S_d8e64867[4] memory r_0_0_0_1_3_3_1_3;\n {\n S_d8e64867 memory r_0_0_0_1_3_3_1_3_0;\n {\n bytes31 r_0_0_0_1_3_3_1_3_0_0 = bytes31(0x8ef7380bb72bd51844a26505a8fd0c7fc4b8e3a6b621190a3645048351c5a6);\n r_0_0_0_1_3_3_1_3_0.s_0 = r_0_0_0_1_3_3_1_3_0_0;\n }\n {\n uint104 r_0_0_0_1_3_3_1_3_0_1 = 2903159897798253948824791347977;\n r_0_0_0_1_3_3_1_3_0.s_1 = r_0_0_0_1_3_3_1_3_0_1;\n }\n r_0_0_0_1_3_3_1_3[0] = r_0_0_0_1_3_3_1_3_0;\n }\n {\n S_d8e64867 memory r_0_0_0_1_3_3_1_3_1;\n {\n bytes31 r_0_0_0_1_3_3_1_3_1_0 = bytes31(0xe4bb152090d38297f101ae13a44055271fc8fab29f0d3af2e7281571268bfa);\n r_0_0_0_1_3_3_1_3_1.s_0 = r_0_0_0_1_3_3_1_3_1_0;\n }\n {\n uint104 r_0_0_0_1_3_3_1_3_1_1 = 3905471293673782658392748267612;\n r_0_0_0_1_3_3_1_3_1.s_1 = r_0_0_0_1_3_3_1_3_1_1;\n }\n r_0_0_0_1_3_3_1_3[1] = r_0_0_0_1_3_3_1_3_1;\n }\n {\n S_d8e64867 memory r_0_0_0_1_3_3_1_3_2;\n {\n bytes31 r_0_0_0_1_3_3_1_3_2_0 = bytes31(0x42276335c2b5dc4a14c14aff1c50b566dc75c7b1a094b3e1e2bb9b6ec63841);\n r_0_0_0_1_3_3_1_3_2.s_0 = r_0_0_0_1_3_3_1_3_2_0;\n }\n {\n uint104 r_0_0_0_1_3_3_1_3_2_1 = 9282998479400373305756046633986;\n r_0_0_0_1_3_3_1_3_2.s_1 = r_0_0_0_1_3_3_1_3_2_1;\n }\n r_0_0_0_1_3_3_1_3[2] = r_0_0_0_1_3_3_1_3_2;\n }\n {\n S_d8e64867 memory r_0_0_0_1_3_3_1_3_3;\n {\n bytes31 r_0_0_0_1_3_3_1_3_3_0 = bytes31(0xd6d90b6e348c2a6f2c2b3b68a8d9c0f3a98d9f00d489fe685e610a03cbcb72);\n r_0_0_0_1_3_3_1_3_3.s_0 = r_0_0_0_1_3_3_1_3_3_0;\n }\n {\n uint104 r_0_0_0_1_3_3_1_3_3_1 = 14167259132795680660318273273641;\n r_0_0_0_1_3_3_1_3_3.s_1 = r_0_0_0_1_3_3_1_3_3_1;\n }\n r_0_0_0_1_3_3_1_3[3] = r_0_0_0_1_3_3_1_3_3;\n }\n r_0_0_0_1_3_3_1.s_3 = r_0_0_0_1_3_3_1_3;\n }\n {\n uint48 r_0_0_0_1_3_3_1_4 = 194582415095792;\n r_0_0_0_1_3_3_1.s_4 = r_0_0_0_1_3_3_1_4;\n }\n r_0_0_0_1_3_3.s_1 = r_0_0_0_1_3_3_1;\n }\n r_0_0_0_1_3.s_3 = r_0_0_0_1_3_3;\n }\n r_0_0_0_1.s_3 = r_0_0_0_1_3;\n }\n r_0_0_0.s_1 = r_0_0_0_1;\n }\n {\n string memory r_0_0_0_2 = unicode\"Moo é🚀🚀o 🚀🚀🚀 M oéo ooééé\";\n r_0_0_0.s_2 = r_0_0_0_2;\n }\n r_0_0[0] = r_0_0_0;\n }\n {\n S_920026e8 memory r_0_0_1;\n {\n int32 r_0_0_1_0 = 1518415825;\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n {\n S_c8d7c908 memory r_0_0_1_1;\n {\n uint56 r_0_0_1_1_0 = 5576117797126617;\n r_0_0_1_1.s_0 = r_0_0_1_1_0;\n }\n {\n bytes27 r_0_0_1_1_1 = bytes27(0x2b5b999f8bd52f04f9f8a0369f3e05e13581bcbe71dc3e926aa6cb);\n r_0_0_1_1.s_1 = r_0_0_1_1_1;\n }\n {\n bool r_0_0_1_1_2 = true;\n r_0_0_1_1.s_2 = r_0_0_1_1_2;\n }\n {\n S_733a0ce7 memory r_0_0_1_1_3;\n {\n address r_0_0_1_1_3_0 = 0xD13e497f1e5527A3C27834b0deD2b5Fd3aBeB6E5;\n r_0_0_1_1_3.s_0 = r_0_0_1_1_3_0;\n }\n {\n bool r_0_0_1_1_3_1 = true;\n r_0_0_1_1_3.s_1 = r_0_0_1_1_3_1;\n }\n {\n S_25e98821 memory r_0_0_1_1_3_2;\n {\n bool r_0_0_1_1_3_2_0 = false;\n r_0_0_1_1_3_2.s_0 = r_0_0_1_1_3_2_0;\n }\n {\n bool r_0_0_1_1_3_2_1 = false;\n r_0_0_1_1_3_2.s_1 = r_0_0_1_1_3_2_1;\n }\n r_0_0_1_1_3.s_2 = r_0_0_1_1_3_2;\n }\n {\n S_a55eb82d memory r_0_0_1_1_3_3;\n {\n bytes31 r_0_0_1_1_3_3_0 = bytes31(0x92d5e795f3be6659ea34b2b398b614b9826f2953e5e3d579aa3a4a8afcbddd);\n r_0_0_1_1_3_3.s_0 = r_0_0_1_1_3_3_0;\n }\n {\n S_770db331 memory r_0_0_1_1_3_3_1;\n {\n string memory r_0_0_1_1_3_3_1_0 = unicode\"Moo é🚀oéMoM oM🚀Mo Méo🚀éoMoé éé\";\n r_0_0_1_1_3_3_1.s_0 = r_0_0_1_1_3_3_1_0;\n }\n {\n bytes17 r_0_0_1_1_3_3_1_1 = bytes17(0xa4d9191c96565cd2c349f9c8530d0377fb);\n r_0_0_1_1_3_3_1.s_1 = r_0_0_1_1_3_3_1_1;\n }\n {\n S_5758d412[3][] memory r_0_0_1_1_3_3_1_2 = new S_5758d412[3][](2);\n {\n S_5758d412[3] memory r_0_0_1_1_3_3_1_2_0;\n {\n S_5758d412 memory r_0_0_1_1_3_3_1_2_0_0;\n {\n S_54896afd memory r_0_0_1_1_3_3_1_2_0_0_0;\n {\n uint80 r_0_0_1_1_3_3_1_2_0_0_0_0 = 1162095319204708183120967;\n r_0_0_1_1_3_3_1_2_0_0_0.s_0 = r_0_0_1_1_3_3_1_2_0_0_0_0;\n }\n r_0_0_1_1_3_3_1_2_0_0.s_0 = r_0_0_1_1_3_3_1_2_0_0_0;\n }\n {\n string memory r_0_0_1_1_3_3_1_2_0_0_1 = unicode\"Moo é🚀🚀 ooééoé MM M ééo o 🚀 é 🚀Mo o éooM🚀MM 🚀oéM🚀éo Méo\";\n r_0_0_1_1_3_3_1_2_0_0.s_1 = r_0_0_1_1_3_3_1_2_0_0_1;\n }\n r_0_0_1_1_3_3_1_2_0[0] = r_0_0_1_1_3_3_1_2_0_0;\n }\n {\n S_5758d412 memory r_0_0_1_1_3_3_1_2_0_1;\n {\n S_54896afd memory r_0_0_1_1_3_3_1_2_0_1_0;\n {\n uint80 r_0_0_1_1_3_3_1_2_0_1_0_0 = 272884958764643581332538;\n r_0_0_1_1_3_3_1_2_0_1_0.s_0 = r_0_0_1_1_3_3_1_2_0_1_0_0;\n }\n r_0_0_1_1_3_3_1_2_0_1.s_0 = r_0_0_1_1_3_3_1_2_0_1_0;\n }\n {\n string memory r_0_0_1_1_3_3_1_2_0_1_1 = unicode\"Moo é🚀oM oé ééoo🚀oé🚀Moééo🚀ooééoooééé ooééoMé o 🚀 ééo MoMM éM\";\n r_0_0_1_1_3_3_1_2_0_1.s_1 = r_0_0_1_1_3_3_1_2_0_1_1;\n }\n r_0_0_1_1_3_3_1_2_0[1] = r_0_0_1_1_3_3_1_2_0_1;\n }\n {\n S_5758d412 memory r_0_0_1_1_3_3_1_2_0_2;\n {\n S_54896afd memory r_0_0_1_1_3_3_1_2_0_2_0;\n {\n uint80 r_0_0_1_1_3_3_1_2_0_2_0_0 = 791645322997087948475041;\n r_0_0_1_1_3_3_1_2_0_2_0.s_0 = r_0_0_1_1_3_3_1_2_0_2_0_0;\n }\n r_0_0_1_1_3_3_1_2_0_2.s_0 = r_0_0_1_1_3_3_1_2_0_2_0;\n }\n {\n string memory r_0_0_1_1_3_3_1_2_0_2_1 = unicode\"Moo é🚀éM\";\n r_0_0_1_1_3_3_1_2_0_2.s_1 = r_0_0_1_1_3_3_1_2_0_2_1;\n }\n r_0_0_1_1_3_3_1_2_0[2] = r_0_0_1_1_3_3_1_2_0_2;\n }\n r_0_0_1_1_3_3_1_2[0] = r_0_0_1_1_3_3_1_2_0;\n }\n {\n S_5758d412[3] memory r_0_0_1_1_3_3_1_2_1;\n {\n S_5758d412 memory r_0_0_1_1_3_3_1_2_1_0;\n {\n S_54896afd memory r_0_0_1_1_3_3_1_2_1_0_0;\n {\n uint80 r_0_0_1_1_3_3_1_2_1_0_0_0 = 723278491125565320940318;\n r_0_0_1_1_3_3_1_2_1_0_0.s_0 = r_0_0_1_1_3_3_1_2_1_0_0_0;\n }\n r_0_0_1_1_3_3_1_2_1_0.s_0 = r_0_0_1_1_3_3_1_2_1_0_0;\n }\n {\n string memory r_0_0_1_1_3_3_1_2_1_0_1 = unicode\"Moo é🚀o oMééMo ooooooo🚀🚀 M\";\n r_0_0_1_1_3_3_1_2_1_0.s_1 = r_0_0_1_1_3_3_1_2_1_0_1;\n }\n r_0_0_1_1_3_3_1_2_1[0] = r_0_0_1_1_3_3_1_2_1_0;\n }\n {\n S_5758d412 memory r_0_0_1_1_3_3_1_2_1_1;\n {\n S_54896afd memory r_0_0_1_1_3_3_1_2_1_1_0;\n {\n uint80 r_0_0_1_1_3_3_1_2_1_1_0_0 = 552043958592243750387283;\n r_0_0_1_1_3_3_1_2_1_1_0.s_0 = r_0_0_1_1_3_3_1_2_1_1_0_0;\n }\n r_0_0_1_1_3_3_1_2_1_1.s_0 = r_0_0_1_1_3_3_1_2_1_1_0;\n }\n {\n string memory r_0_0_1_1_3_3_1_2_1_1_1 = unicode\"Moo é🚀ooooMMMé🚀oo🚀éoo🚀oo🚀 🚀é🚀o\";\n r_0_0_1_1_3_3_1_2_1_1.s_1 = r_0_0_1_1_3_3_1_2_1_1_1;\n }\n r_0_0_1_1_3_3_1_2_1[1] = r_0_0_1_1_3_3_1_2_1_1;\n }\n {\n S_5758d412 memory r_0_0_1_1_3_3_1_2_1_2;\n {\n S_54896afd memory r_0_0_1_1_3_3_1_2_1_2_0;\n {\n uint80 r_0_0_1_1_3_3_1_2_1_2_0_0 = 308448460972648359403240;\n r_0_0_1_1_3_3_1_2_1_2_0.s_0 = r_0_0_1_1_3_3_1_2_1_2_0_0;\n }\n r_0_0_1_1_3_3_1_2_1_2.s_0 = r_0_0_1_1_3_3_1_2_1_2_0;\n }\n {\n string memory r_0_0_1_1_3_3_1_2_1_2_1 = unicode\"Moo é🚀o🚀oééM o🚀 o oooé🚀 éo é🚀\";\n r_0_0_1_1_3_3_1_2_1_2.s_1 = r_0_0_1_1_3_3_1_2_1_2_1;\n }\n r_0_0_1_1_3_3_1_2_1[2] = r_0_0_1_1_3_3_1_2_1_2;\n }\n r_0_0_1_1_3_3_1_2[1] = r_0_0_1_1_3_3_1_2_1;\n }\n r_0_0_1_1_3_3_1.s_2 = r_0_0_1_1_3_3_1_2;\n }\n {\n S_d8e64867[4] memory r_0_0_1_1_3_3_1_3;\n {\n S_d8e64867 memory r_0_0_1_1_3_3_1_3_0;\n {\n bytes31 r_0_0_1_1_3_3_1_3_0_0 = bytes31(0x18ea9744fff348e9c64f3338bf54fd041553be491bcfe49f0fdbe627414e4f);\n r_0_0_1_1_3_3_1_3_0.s_0 = r_0_0_1_1_3_3_1_3_0_0;\n }\n {\n uint104 r_0_0_1_1_3_3_1_3_0_1 = 17543211149938518911882444864746;\n r_0_0_1_1_3_3_1_3_0.s_1 = r_0_0_1_1_3_3_1_3_0_1;\n }\n r_0_0_1_1_3_3_1_3[0] = r_0_0_1_1_3_3_1_3_0;\n }\n {\n S_d8e64867 memory r_0_0_1_1_3_3_1_3_1;\n {\n bytes31 r_0_0_1_1_3_3_1_3_1_0 = bytes31(0x7b7d35df8b8c2ac9211017182446b42780c97cbd9f6ebaed41f7c40ee5e62c);\n r_0_0_1_1_3_3_1_3_1.s_0 = r_0_0_1_1_3_3_1_3_1_0;\n }\n {\n uint104 r_0_0_1_1_3_3_1_3_1_1 = 15221617671273916157388938414982;\n r_0_0_1_1_3_3_1_3_1.s_1 = r_0_0_1_1_3_3_1_3_1_1;\n }\n r_0_0_1_1_3_3_1_3[1] = r_0_0_1_1_3_3_1_3_1;\n }\n {\n S_d8e64867 memory r_0_0_1_1_3_3_1_3_2;\n {\n bytes31 r_0_0_1_1_3_3_1_3_2_0 = bytes31(0xd0162622470078e075a86c08146dda6fd059f9ee5b079d4bd6b5b6adb2dfcd);\n r_0_0_1_1_3_3_1_3_2.s_0 = r_0_0_1_1_3_3_1_3_2_0;\n }\n {\n uint104 r_0_0_1_1_3_3_1_3_2_1 = 12928109738491269108925831392415;\n r_0_0_1_1_3_3_1_3_2.s_1 = r_0_0_1_1_3_3_1_3_2_1;\n }\n r_0_0_1_1_3_3_1_3[2] = r_0_0_1_1_3_3_1_3_2;\n }\n {\n S_d8e64867 memory r_0_0_1_1_3_3_1_3_3;\n {\n bytes31 r_0_0_1_1_3_3_1_3_3_0 = bytes31(0x18f6d5237f961e45ae2b6adada04ed3fdbc633a51c9beaa1816fad92a328d9);\n r_0_0_1_1_3_3_1_3_3.s_0 = r_0_0_1_1_3_3_1_3_3_0;\n }\n {\n uint104 r_0_0_1_1_3_3_1_3_3_1 = 17559319900421028608277988566636;\n r_0_0_1_1_3_3_1_3_3.s_1 = r_0_0_1_1_3_3_1_3_3_1;\n }\n r_0_0_1_1_3_3_1_3[3] = r_0_0_1_1_3_3_1_3_3;\n }\n r_0_0_1_1_3_3_1.s_3 = r_0_0_1_1_3_3_1_3;\n }\n {\n uint48 r_0_0_1_1_3_3_1_4 = 28013312150153;\n r_0_0_1_1_3_3_1.s_4 = r_0_0_1_1_3_3_1_4;\n }\n r_0_0_1_1_3_3.s_1 = r_0_0_1_1_3_3_1;\n }\n r_0_0_1_1_3.s_3 = r_0_0_1_1_3_3;\n }\n r_0_0_1_1.s_3 = r_0_0_1_1_3;\n }\n r_0_0_1.s_1 = r_0_0_1_1;\n }\n {\n string memory r_0_0_1_2 = unicode\"Moo é🚀🚀oo🚀oo\";\n r_0_0_1.s_2 = r_0_0_1_2;\n }\n r_0_0[1] = r_0_0_1;\n }\n {\n S_920026e8 memory r_0_0_2;\n {\n int32 r_0_0_2_0 = 825705551;\n r_0_0_2.s_0 = r_0_0_2_0;\n }\n {\n S_c8d7c908 memory r_0_0_2_1;\n {\n uint56 r_0_0_2_1_0 = 17491718229780352;\n r_0_0_2_1.s_0 = r_0_0_2_1_0;\n }\n {\n bytes27 r_0_0_2_1_1 = bytes27(0xa43c3be0e2ebe1219c4a9a4a17823b0445eb881d7a0a9dca7ce46b);\n r_0_0_2_1.s_1 = r_0_0_2_1_1;\n }\n {\n bool r_0_0_2_1_2 = true;\n r_0_0_2_1.s_2 = r_0_0_2_1_2;\n }\n {\n S_733a0ce7 memory r_0_0_2_1_3;\n {\n address r_0_0_2_1_3_0 = 0x1F7D10a796a0B01ec3283A0efE4662CE1559fFd3;\n r_0_0_2_1_3.s_0 = r_0_0_2_1_3_0;\n }\n {\n bool r_0_0_2_1_3_1 = false;\n r_0_0_2_1_3.s_1 = r_0_0_2_1_3_1;\n }\n {\n S_25e98821 memory r_0_0_2_1_3_2;\n {\n bool r_0_0_2_1_3_2_0 = false;\n r_0_0_2_1_3_2.s_0 = r_0_0_2_1_3_2_0;\n }\n {\n bool r_0_0_2_1_3_2_1 = true;\n r_0_0_2_1_3_2.s_1 = r_0_0_2_1_3_2_1;\n }\n r_0_0_2_1_3.s_2 = r_0_0_2_1_3_2;\n }\n {\n S_a55eb82d memory r_0_0_2_1_3_3;\n {\n bytes31 r_0_0_2_1_3_3_0 = bytes31(0x18863b8b339012d809b98142942d7057915e6f5b3b625e9c64b9ffd31bb8ac);\n r_0_0_2_1_3_3.s_0 = r_0_0_2_1_3_3_0;\n }\n {\n S_770db331 memory r_0_0_2_1_3_3_1;\n {\n string memory r_0_0_2_1_3_3_1_0 = unicode\"Moo é🚀MM \";\n r_0_0_2_1_3_3_1.s_0 = r_0_0_2_1_3_3_1_0;\n }\n {\n bytes17 r_0_0_2_1_3_3_1_1 = bytes17(0x2aea2b820e8dfca5d26a675335944badcf);\n r_0_0_2_1_3_3_1.s_1 = r_0_0_2_1_3_3_1_1;\n }\n {\n S_5758d412[3][] memory r_0_0_2_1_3_3_1_2 = new S_5758d412[3][](0);\n r_0_0_2_1_3_3_1.s_2 = r_0_0_2_1_3_3_1_2;\n }\n {\n S_d8e64867[4] memory r_0_0_2_1_3_3_1_3;\n {\n S_d8e64867 memory r_0_0_2_1_3_3_1_3_0;\n {\n bytes31 r_0_0_2_1_3_3_1_3_0_0 = bytes31(0x7e5de7c2e33b38f32447900ca4420d0e255b08c343517d2504d64581feb2e6);\n r_0_0_2_1_3_3_1_3_0.s_0 = r_0_0_2_1_3_3_1_3_0_0;\n }\n {\n uint104 r_0_0_2_1_3_3_1_3_0_1 = 8286211808974415723761821562562;\n r_0_0_2_1_3_3_1_3_0.s_1 = r_0_0_2_1_3_3_1_3_0_1;\n }\n r_0_0_2_1_3_3_1_3[0] = r_0_0_2_1_3_3_1_3_0;\n }\n {\n S_d8e64867 memory r_0_0_2_1_3_3_1_3_1;\n {\n bytes31 r_0_0_2_1_3_3_1_3_1_0 = bytes31(0x6c4f2f5c1814515150ce9b74b2057cdac529c6c73269b96000196d7628df1a);\n r_0_0_2_1_3_3_1_3_1.s_0 = r_0_0_2_1_3_3_1_3_1_0;\n }\n {\n uint104 r_0_0_2_1_3_3_1_3_1_1 = 3417562814199303548836001735486;\n r_0_0_2_1_3_3_1_3_1.s_1 = r_0_0_2_1_3_3_1_3_1_1;\n }\n r_0_0_2_1_3_3_1_3[1] = r_0_0_2_1_3_3_1_3_1;\n }\n {\n S_d8e64867 memory r_0_0_2_1_3_3_1_3_2;\n {\n bytes31 r_0_0_2_1_3_3_1_3_2_0 = bytes31(0x35fc69846197173e24beb7c054125f739dadc8525e64368dc39e86ea7df9de);\n r_0_0_2_1_3_3_1_3_2.s_0 = r_0_0_2_1_3_3_1_3_2_0;\n }\n {\n uint104 r_0_0_2_1_3_3_1_3_2_1 = 18011624044238526319942890898687;\n r_0_0_2_1_3_3_1_3_2.s_1 = r_0_0_2_1_3_3_1_3_2_1;\n }\n r_0_0_2_1_3_3_1_3[2] = r_0_0_2_1_3_3_1_3_2;\n }\n {\n S_d8e64867 memory r_0_0_2_1_3_3_1_3_3;\n {\n bytes31 r_0_0_2_1_3_3_1_3_3_0 = bytes31(0x42f0058d747f79ab9ea3c6eebccd31062d143c2658ee554a5e991dc87dd26e);\n r_0_0_2_1_3_3_1_3_3.s_0 = r_0_0_2_1_3_3_1_3_3_0;\n }\n {\n uint104 r_0_0_2_1_3_3_1_3_3_1 = 2815035757122382850575985213136;\n r_0_0_2_1_3_3_1_3_3.s_1 = r_0_0_2_1_3_3_1_3_3_1;\n }\n r_0_0_2_1_3_3_1_3[3] = r_0_0_2_1_3_3_1_3_3;\n }\n r_0_0_2_1_3_3_1.s_3 = r_0_0_2_1_3_3_1_3;\n }\n {\n uint48 r_0_0_2_1_3_3_1_4 = 276412360348032;\n r_0_0_2_1_3_3_1.s_4 = r_0_0_2_1_3_3_1_4;\n }\n r_0_0_2_1_3_3.s_1 = r_0_0_2_1_3_3_1;\n }\n r_0_0_2_1_3.s_3 = r_0_0_2_1_3_3;\n }\n r_0_0_2_1.s_3 = r_0_0_2_1_3;\n }\n r_0_0_2.s_1 = r_0_0_2_1;\n }\n {\n string memory r_0_0_2_2 = unicode\"Moo é🚀o ooooMéé MéMM ooMo éoéMoé 🚀oMéMM é M oMooo🚀éé oooééM \";\n r_0_0_2.s_2 = r_0_0_2_2;\n }\n r_0_0[2] = r_0_0_2;\n }\n {\n S_920026e8 memory r_0_0_3;\n {\n int32 r_0_0_3_0 = -1589091163;\n r_0_0_3.s_0 = r_0_0_3_0;\n }\n {\n S_c8d7c908 memory r_0_0_3_1;\n {\n uint56 r_0_0_3_1_0 = 10946574074863406;\n r_0_0_3_1.s_0 = r_0_0_3_1_0;\n }\n {\n bytes27 r_0_0_3_1_1 = bytes27(0x412af116c31a93b0d27258332e5af002ccc7dc69e661a1cec24493);\n r_0_0_3_1.s_1 = r_0_0_3_1_1;\n }\n {\n bool r_0_0_3_1_2 = true;\n r_0_0_3_1.s_2 = r_0_0_3_1_2;\n }\n {\n S_733a0ce7 memory r_0_0_3_1_3;\n {\n address r_0_0_3_1_3_0 = 0xa74d366A1c62AE724e42FD89B72Ee014c65c78DF;\n r_0_0_3_1_3.s_0 = r_0_0_3_1_3_0;\n }\n {\n bool r_0_0_3_1_3_1 = false;\n r_0_0_3_1_3.s_1 = r_0_0_3_1_3_1;\n }\n {\n S_25e98821 memory r_0_0_3_1_3_2;\n {\n bool r_0_0_3_1_3_2_0 = true;\n r_0_0_3_1_3_2.s_0 = r_0_0_3_1_3_2_0;\n }\n {\n bool r_0_0_3_1_3_2_1 = false;\n r_0_0_3_1_3_2.s_1 = r_0_0_3_1_3_2_1;\n }\n r_0_0_3_1_3.s_2 = r_0_0_3_1_3_2;\n }\n {\n S_a55eb82d memory r_0_0_3_1_3_3;\n {\n bytes31 r_0_0_3_1_3_3_0 = bytes31(0xcb80725b7c1cad31f47d3ee80c560b81e8a4dd2b295eb79056bf742310fc8b);\n r_0_0_3_1_3_3.s_0 = r_0_0_3_1_3_3_0;\n }\n {\n S_770db331 memory r_0_0_3_1_3_3_1;\n {\n string memory r_0_0_3_1_3_3_1_0 = unicode\"Moo é🚀é éMMoo éoo o 🚀oéMoM\";\n r_0_0_3_1_3_3_1.s_0 = r_0_0_3_1_3_3_1_0;\n }\n {\n bytes17 r_0_0_3_1_3_3_1_1 = bytes17(0xa930afe6e210b3bfcd09beb8346e9bdefa);\n r_0_0_3_1_3_3_1.s_1 = r_0_0_3_1_3_3_1_1;\n }\n {\n S_5758d412[3][] memory r_0_0_3_1_3_3_1_2 = new S_5758d412[3][](0);\n r_0_0_3_1_3_3_1.s_2 = r_0_0_3_1_3_3_1_2;\n }\n {\n S_d8e64867[4] memory r_0_0_3_1_3_3_1_3;\n {\n S_d8e64867 memory r_0_0_3_1_3_3_1_3_0;\n {\n bytes31 r_0_0_3_1_3_3_1_3_0_0 = bytes31(0xf582f681c34198affb98cc050e274ae77f43f9e0addbe1a1938e4623282b3a);\n r_0_0_3_1_3_3_1_3_0.s_0 = r_0_0_3_1_3_3_1_3_0_0;\n }\n {\n uint104 r_0_0_3_1_3_3_1_3_0_1 = 1573085793233808965640542414042;\n r_0_0_3_1_3_3_1_3_0.s_1 = r_0_0_3_1_3_3_1_3_0_1;\n }\n r_0_0_3_1_3_3_1_3[0] = r_0_0_3_1_3_3_1_3_0;\n }\n {\n S_d8e64867 memory r_0_0_3_1_3_3_1_3_1;\n {\n bytes31 r_0_0_3_1_3_3_1_3_1_0 = bytes31(0xfb22bdbc137f750cdbc42c8a9f571dd771e9e5738f668c1b7a5a3733b8a33b);\n r_0_0_3_1_3_3_1_3_1.s_0 = r_0_0_3_1_3_3_1_3_1_0;\n }\n {\n uint104 r_0_0_3_1_3_3_1_3_1_1 = 16611964371288393801231102109040;\n r_0_0_3_1_3_3_1_3_1.s_1 = r_0_0_3_1_3_3_1_3_1_1;\n }\n r_0_0_3_1_3_3_1_3[1] = r_0_0_3_1_3_3_1_3_1;\n }\n {\n S_d8e64867 memory r_0_0_3_1_3_3_1_3_2;\n {\n bytes31 r_0_0_3_1_3_3_1_3_2_0 = bytes31(0x3bf36e2756998fdb9e589406842585077db4effd2a919776e6b41303546e1a);\n r_0_0_3_1_3_3_1_3_2.s_0 = r_0_0_3_1_3_3_1_3_2_0;\n }\n {\n uint104 r_0_0_3_1_3_3_1_3_2_1 = 19814559038747150532004354758775;\n r_0_0_3_1_3_3_1_3_2.s_1 = r_0_0_3_1_3_3_1_3_2_1;\n }\n r_0_0_3_1_3_3_1_3[2] = r_0_0_3_1_3_3_1_3_2;\n }\n {\n S_d8e64867 memory r_0_0_3_1_3_3_1_3_3;\n {\n bytes31 r_0_0_3_1_3_3_1_3_3_0 = bytes31(0xc97d5a7d513773d4ff04089a762c02aafdc49bc58717147150315948c3f640);\n r_0_0_3_1_3_3_1_3_3.s_0 = r_0_0_3_1_3_3_1_3_3_0;\n }\n {\n uint104 r_0_0_3_1_3_3_1_3_3_1 = 10316353148491318811956024938102;\n r_0_0_3_1_3_3_1_3_3.s_1 = r_0_0_3_1_3_3_1_3_3_1;\n }\n r_0_0_3_1_3_3_1_3[3] = r_0_0_3_1_3_3_1_3_3;\n }\n r_0_0_3_1_3_3_1.s_3 = r_0_0_3_1_3_3_1_3;\n }\n {\n uint48 r_0_0_3_1_3_3_1_4 = 33295012599608;\n r_0_0_3_1_3_3_1.s_4 = r_0_0_3_1_3_3_1_4;\n }\n r_0_0_3_1_3_3.s_1 = r_0_0_3_1_3_3_1;\n }\n r_0_0_3_1_3.s_3 = r_0_0_3_1_3_3;\n }\n r_0_0_3_1.s_3 = r_0_0_3_1_3;\n }\n r_0_0_3.s_1 = r_0_0_3_1;\n }\n {\n string memory r_0_0_3_2 = unicode\"Moo é🚀 é oooéo ooéoo🚀oé🚀ooéM MMé ooMé🚀o o 🚀oo\";\n r_0_0_3.s_2 = r_0_0_3_2;\n }\n r_0_0[3] = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n r[0] = r_0;\n }\n {\n S_920026e8[4][1] memory r_1;\n {\n S_920026e8[4] memory r_1_0;\n {\n S_920026e8 memory r_1_0_0;\n {\n int32 r_1_0_0_0 = 1476853243;\n r_1_0_0.s_0 = r_1_0_0_0;\n }\n {\n S_c8d7c908 memory r_1_0_0_1;\n {\n uint56 r_1_0_0_1_0 = 60467477827986915;\n r_1_0_0_1.s_0 = r_1_0_0_1_0;\n }\n {\n bytes27 r_1_0_0_1_1 = bytes27(0x5332806576af8ec3d590461298d7f8128825a22aba5d48db506b25);\n r_1_0_0_1.s_1 = r_1_0_0_1_1;\n }\n {\n bool r_1_0_0_1_2 = false;\n r_1_0_0_1.s_2 = r_1_0_0_1_2;\n }\n {\n S_733a0ce7 memory r_1_0_0_1_3;\n {\n address r_1_0_0_1_3_0 = 0xb696E384D6829658BFB71D4B88BBBF321Ff97773;\n r_1_0_0_1_3.s_0 = r_1_0_0_1_3_0;\n }\n {\n bool r_1_0_0_1_3_1 = false;\n r_1_0_0_1_3.s_1 = r_1_0_0_1_3_1;\n }\n {\n S_25e98821 memory r_1_0_0_1_3_2;\n {\n bool r_1_0_0_1_3_2_0 = false;\n r_1_0_0_1_3_2.s_0 = r_1_0_0_1_3_2_0;\n }\n {\n bool r_1_0_0_1_3_2_1 = true;\n r_1_0_0_1_3_2.s_1 = r_1_0_0_1_3_2_1;\n }\n r_1_0_0_1_3.s_2 = r_1_0_0_1_3_2;\n }\n {\n S_a55eb82d memory r_1_0_0_1_3_3;\n {\n bytes31 r_1_0_0_1_3_3_0 = bytes31(0x18729c2de78d8688c6ce47b17f62183da5d66fcc5037317ce617a5ade2f33b);\n r_1_0_0_1_3_3.s_0 = r_1_0_0_1_3_3_0;\n }\n {\n S_770db331 memory r_1_0_0_1_3_3_1;\n {\n string memory r_1_0_0_1_3_3_1_0 = unicode\"Moo é🚀M ooo🚀o\";\n r_1_0_0_1_3_3_1.s_0 = r_1_0_0_1_3_3_1_0;\n }\n {\n bytes17 r_1_0_0_1_3_3_1_1 = bytes17(0x26b07b89792f6dc10a054ca5f625b67eab);\n r_1_0_0_1_3_3_1.s_1 = r_1_0_0_1_3_3_1_1;\n }\n {\n S_5758d412[3][] memory r_1_0_0_1_3_3_1_2 = new S_5758d412[3][](0);\n r_1_0_0_1_3_3_1.s_2 = r_1_0_0_1_3_3_1_2;\n }\n {\n S_d8e64867[4] memory r_1_0_0_1_3_3_1_3;\n {\n S_d8e64867 memory r_1_0_0_1_3_3_1_3_0;\n {\n bytes31 r_1_0_0_1_3_3_1_3_0_0 = bytes31(0xd3dab3151aaf56c3f4d62e2850a08f68bb168a0e2b6f2f239c42afb1a5dc97);\n r_1_0_0_1_3_3_1_3_0.s_0 = r_1_0_0_1_3_3_1_3_0_0;\n }\n {\n uint104 r_1_0_0_1_3_3_1_3_0_1 = 6872418091216598016862177004896;\n r_1_0_0_1_3_3_1_3_0.s_1 = r_1_0_0_1_3_3_1_3_0_1;\n }\n r_1_0_0_1_3_3_1_3[0] = r_1_0_0_1_3_3_1_3_0;\n }\n {\n S_d8e64867 memory r_1_0_0_1_3_3_1_3_1;\n {\n bytes31 r_1_0_0_1_3_3_1_3_1_0 = bytes31(0x47c1dc43c86c201aa67a63dfe1304ce7e5133eebe45c296c6ddb64d08263b9);\n r_1_0_0_1_3_3_1_3_1.s_0 = r_1_0_0_1_3_3_1_3_1_0;\n }\n {\n uint104 r_1_0_0_1_3_3_1_3_1_1 = 10006911296464363614555990793596;\n r_1_0_0_1_3_3_1_3_1.s_1 = r_1_0_0_1_3_3_1_3_1_1;\n }\n r_1_0_0_1_3_3_1_3[1] = r_1_0_0_1_3_3_1_3_1;\n }\n {\n S_d8e64867 memory r_1_0_0_1_3_3_1_3_2;\n {\n bytes31 r_1_0_0_1_3_3_1_3_2_0 = bytes31(0xfd7546ab959bba86a811b06891a91d2650f3576f09a7e1d289b61ff5f1e377);\n r_1_0_0_1_3_3_1_3_2.s_0 = r_1_0_0_1_3_3_1_3_2_0;\n }\n {\n uint104 r_1_0_0_1_3_3_1_3_2_1 = 3801943204431408774802283769269;\n r_1_0_0_1_3_3_1_3_2.s_1 = r_1_0_0_1_3_3_1_3_2_1;\n }\n r_1_0_0_1_3_3_1_3[2] = r_1_0_0_1_3_3_1_3_2;\n }\n {\n S_d8e64867 memory r_1_0_0_1_3_3_1_3_3;\n {\n bytes31 r_1_0_0_1_3_3_1_3_3_0 = bytes31(0xf158360981592577dcb27ec15e3e3b4b93772c9dcf893cafdbce2ec1832f64);\n r_1_0_0_1_3_3_1_3_3.s_0 = r_1_0_0_1_3_3_1_3_3_0;\n }\n {\n uint104 r_1_0_0_1_3_3_1_3_3_1 = 13068490283941365693850383167407;\n r_1_0_0_1_3_3_1_3_3.s_1 = r_1_0_0_1_3_3_1_3_3_1;\n }\n r_1_0_0_1_3_3_1_3[3] = r_1_0_0_1_3_3_1_3_3;\n }\n r_1_0_0_1_3_3_1.s_3 = r_1_0_0_1_3_3_1_3;\n }\n {\n uint48 r_1_0_0_1_3_3_1_4 = 216953581947454;\n r_1_0_0_1_3_3_1.s_4 = r_1_0_0_1_3_3_1_4;\n }\n r_1_0_0_1_3_3.s_1 = r_1_0_0_1_3_3_1;\n }\n r_1_0_0_1_3.s_3 = r_1_0_0_1_3_3;\n }\n r_1_0_0_1.s_3 = r_1_0_0_1_3;\n }\n r_1_0_0.s_1 = r_1_0_0_1;\n }\n {\n string memory r_1_0_0_2 = unicode\"Moo é🚀ooéM🚀 oééoo🚀ooo🚀 o Mé Mé oo🚀Mo M🚀Mo🚀éo🚀oMooo🚀 🚀MMoo\";\n r_1_0_0.s_2 = r_1_0_0_2;\n }\n r_1_0[0] = r_1_0_0;\n }\n {\n S_920026e8 memory r_1_0_1;\n {\n int32 r_1_0_1_0 = 747420445;\n r_1_0_1.s_0 = r_1_0_1_0;\n }\n {\n S_c8d7c908 memory r_1_0_1_1;\n {\n uint56 r_1_0_1_1_0 = 16188566180546682;\n r_1_0_1_1.s_0 = r_1_0_1_1_0;\n }\n {\n bytes27 r_1_0_1_1_1 = bytes27(0x860b14b2e17b3fd6cd1634596166f9a76cefd3de0b605ab9512b0e);\n r_1_0_1_1.s_1 = r_1_0_1_1_1;\n }\n {\n bool r_1_0_1_1_2 = true;\n r_1_0_1_1.s_2 = r_1_0_1_1_2;\n }\n {\n S_733a0ce7 memory r_1_0_1_1_3;\n {\n address r_1_0_1_1_3_0 = 0x096563133d098C6cDB92D8af284ae57e06741593;\n r_1_0_1_1_3.s_0 = r_1_0_1_1_3_0;\n }\n {\n bool r_1_0_1_1_3_1 = true;\n r_1_0_1_1_3.s_1 = r_1_0_1_1_3_1;\n }\n {\n S_25e98821 memory r_1_0_1_1_3_2;\n {\n bool r_1_0_1_1_3_2_0 = true;\n r_1_0_1_1_3_2.s_0 = r_1_0_1_1_3_2_0;\n }\n {\n bool r_1_0_1_1_3_2_1 = false;\n r_1_0_1_1_3_2.s_1 = r_1_0_1_1_3_2_1;\n }\n r_1_0_1_1_3.s_2 = r_1_0_1_1_3_2;\n }\n {\n S_a55eb82d memory r_1_0_1_1_3_3;\n {\n bytes31 r_1_0_1_1_3_3_0 = bytes31(0x6bf5b4a9ebe952fa7b8f9c4af1cd5a5d36834e99aff65611ac2085e6085bd9);\n r_1_0_1_1_3_3.s_0 = r_1_0_1_1_3_3_0;\n }\n {\n S_770db331 memory r_1_0_1_1_3_3_1;\n {\n string memory r_1_0_1_1_3_3_1_0 = unicode\"Moo é🚀éMo MoooéMéo🚀M é\";\n r_1_0_1_1_3_3_1.s_0 = r_1_0_1_1_3_3_1_0;\n }\n {\n bytes17 r_1_0_1_1_3_3_1_1 = bytes17(0xbf51bb827ad140cd939d46eeb58884c043);\n r_1_0_1_1_3_3_1.s_1 = r_1_0_1_1_3_3_1_1;\n }\n {\n S_5758d412[3][] memory r_1_0_1_1_3_3_1_2 = new S_5758d412[3][](3);\n {\n S_5758d412[3] memory r_1_0_1_1_3_3_1_2_0;\n {\n S_5758d412 memory r_1_0_1_1_3_3_1_2_0_0;\n {\n S_54896afd memory r_1_0_1_1_3_3_1_2_0_0_0;\n {\n uint80 r_1_0_1_1_3_3_1_2_0_0_0_0 = 778368575929596687322604;\n r_1_0_1_1_3_3_1_2_0_0_0.s_0 = r_1_0_1_1_3_3_1_2_0_0_0_0;\n }\n r_1_0_1_1_3_3_1_2_0_0.s_0 = r_1_0_1_1_3_3_1_2_0_0_0;\n }\n {\n string memory r_1_0_1_1_3_3_1_2_0_0_1 = unicode\"Moo é🚀🚀oooM🚀é 🚀éooooM🚀o🚀MMoéoMM🚀ooéoM🚀é o oéoé MMooé🚀 Mé\";\n r_1_0_1_1_3_3_1_2_0_0.s_1 = r_1_0_1_1_3_3_1_2_0_0_1;\n }\n r_1_0_1_1_3_3_1_2_0[0] = r_1_0_1_1_3_3_1_2_0_0;\n }\n {\n S_5758d412 memory r_1_0_1_1_3_3_1_2_0_1;\n {\n S_54896afd memory r_1_0_1_1_3_3_1_2_0_1_0;\n {\n uint80 r_1_0_1_1_3_3_1_2_0_1_0_0 = 829843186055021846451034;\n r_1_0_1_1_3_3_1_2_0_1_0.s_0 = r_1_0_1_1_3_3_1_2_0_1_0_0;\n }\n r_1_0_1_1_3_3_1_2_0_1.s_0 = r_1_0_1_1_3_3_1_2_0_1_0;\n }\n {\n string memory r_1_0_1_1_3_3_1_2_0_1_1 = unicode\"Moo é🚀M🚀éM M o 🚀é🚀éé ooéMoé MM🚀Mo🚀o🚀MMM🚀🚀 Mo\";\n r_1_0_1_1_3_3_1_2_0_1.s_1 = r_1_0_1_1_3_3_1_2_0_1_1;\n }\n r_1_0_1_1_3_3_1_2_0[1] = r_1_0_1_1_3_3_1_2_0_1;\n }\n {\n S_5758d412 memory r_1_0_1_1_3_3_1_2_0_2;\n {\n S_54896afd memory r_1_0_1_1_3_3_1_2_0_2_0;\n {\n uint80 r_1_0_1_1_3_3_1_2_0_2_0_0 = 361770595238878083926428;\n r_1_0_1_1_3_3_1_2_0_2_0.s_0 = r_1_0_1_1_3_3_1_2_0_2_0_0;\n }\n r_1_0_1_1_3_3_1_2_0_2.s_0 = r_1_0_1_1_3_3_1_2_0_2_0;\n }\n {\n string memory r_1_0_1_1_3_3_1_2_0_2_1 = unicode\"Moo é🚀 🚀\";\n r_1_0_1_1_3_3_1_2_0_2.s_1 = r_1_0_1_1_3_3_1_2_0_2_1;\n }\n r_1_0_1_1_3_3_1_2_0[2] = r_1_0_1_1_3_3_1_2_0_2;\n }\n r_1_0_1_1_3_3_1_2[0] = r_1_0_1_1_3_3_1_2_0;\n }\n {\n S_5758d412[3] memory r_1_0_1_1_3_3_1_2_1;\n {\n S_5758d412 memory r_1_0_1_1_3_3_1_2_1_0;\n {\n S_54896afd memory r_1_0_1_1_3_3_1_2_1_0_0;\n {\n uint80 r_1_0_1_1_3_3_1_2_1_0_0_0 = 141486280541489331339031;\n r_1_0_1_1_3_3_1_2_1_0_0.s_0 = r_1_0_1_1_3_3_1_2_1_0_0_0;\n }\n r_1_0_1_1_3_3_1_2_1_0.s_0 = r_1_0_1_1_3_3_1_2_1_0_0;\n }\n {\n string memory r_1_0_1_1_3_3_1_2_1_0_1 = unicode\"Moo é🚀o🚀oo🚀é oé ééo\";\n r_1_0_1_1_3_3_1_2_1_0.s_1 = r_1_0_1_1_3_3_1_2_1_0_1;\n }\n r_1_0_1_1_3_3_1_2_1[0] = r_1_0_1_1_3_3_1_2_1_0;\n }\n {\n S_5758d412 memory r_1_0_1_1_3_3_1_2_1_1;\n {\n S_54896afd memory r_1_0_1_1_3_3_1_2_1_1_0;\n {\n uint80 r_1_0_1_1_3_3_1_2_1_1_0_0 = 259028910893327677202134;\n r_1_0_1_1_3_3_1_2_1_1_0.s_0 = r_1_0_1_1_3_3_1_2_1_1_0_0;\n }\n r_1_0_1_1_3_3_1_2_1_1.s_0 = r_1_0_1_1_3_3_1_2_1_1_0;\n }\n {\n string memory r_1_0_1_1_3_3_1_2_1_1_1 = unicode\"Moo é🚀 o oé🚀oMMMo🚀🚀 🚀oMoéMoMo🚀\";\n r_1_0_1_1_3_3_1_2_1_1.s_1 = r_1_0_1_1_3_3_1_2_1_1_1;\n }\n r_1_0_1_1_3_3_1_2_1[1] = r_1_0_1_1_3_3_1_2_1_1;\n }\n {\n S_5758d412 memory r_1_0_1_1_3_3_1_2_1_2;\n {\n S_54896afd memory r_1_0_1_1_3_3_1_2_1_2_0;\n {\n uint80 r_1_0_1_1_3_3_1_2_1_2_0_0 = 1133757143313620214830831;\n r_1_0_1_1_3_3_1_2_1_2_0.s_0 = r_1_0_1_1_3_3_1_2_1_2_0_0;\n }\n r_1_0_1_1_3_3_1_2_1_2.s_0 = r_1_0_1_1_3_3_1_2_1_2_0;\n }\n {\n string memory r_1_0_1_1_3_3_1_2_1_2_1 = unicode\"Moo é🚀o éo éMé🚀o M🚀o🚀oM MMoMM o éo éo🚀🚀oMM 🚀🚀ooMéoMo\";\n r_1_0_1_1_3_3_1_2_1_2.s_1 = r_1_0_1_1_3_3_1_2_1_2_1;\n }\n r_1_0_1_1_3_3_1_2_1[2] = r_1_0_1_1_3_3_1_2_1_2;\n }\n r_1_0_1_1_3_3_1_2[1] = r_1_0_1_1_3_3_1_2_1;\n }\n {\n S_5758d412[3] memory r_1_0_1_1_3_3_1_2_2;\n {\n S_5758d412 memory r_1_0_1_1_3_3_1_2_2_0;\n {\n S_54896afd memory r_1_0_1_1_3_3_1_2_2_0_0;\n {\n uint80 r_1_0_1_1_3_3_1_2_2_0_0_0 = 601096245887659086830207;\n r_1_0_1_1_3_3_1_2_2_0_0.s_0 = r_1_0_1_1_3_3_1_2_2_0_0_0;\n }\n r_1_0_1_1_3_3_1_2_2_0.s_0 = r_1_0_1_1_3_3_1_2_2_0_0;\n }\n {\n string memory r_1_0_1_1_3_3_1_2_2_0_1 = unicode\"Moo é🚀Mooo🚀 éooMoé🚀éo\";\n r_1_0_1_1_3_3_1_2_2_0.s_1 = r_1_0_1_1_3_3_1_2_2_0_1;\n }\n r_1_0_1_1_3_3_1_2_2[0] = r_1_0_1_1_3_3_1_2_2_0;\n }\n {\n S_5758d412 memory r_1_0_1_1_3_3_1_2_2_1;\n {\n S_54896afd memory r_1_0_1_1_3_3_1_2_2_1_0;\n {\n uint80 r_1_0_1_1_3_3_1_2_2_1_0_0 = 1098442981598804116546650;\n r_1_0_1_1_3_3_1_2_2_1_0.s_0 = r_1_0_1_1_3_3_1_2_2_1_0_0;\n }\n r_1_0_1_1_3_3_1_2_2_1.s_0 = r_1_0_1_1_3_3_1_2_2_1_0;\n }\n {\n string memory r_1_0_1_1_3_3_1_2_2_1_1 = unicode\"Moo é🚀oM🚀🚀éoMMM🚀🚀oooéoooMéMo🚀oMéMoé🚀oMo🚀 éo🚀 ooo 🚀éoé🚀o\";\n r_1_0_1_1_3_3_1_2_2_1.s_1 = r_1_0_1_1_3_3_1_2_2_1_1;\n }\n r_1_0_1_1_3_3_1_2_2[1] = r_1_0_1_1_3_3_1_2_2_1;\n }\n {\n S_5758d412 memory r_1_0_1_1_3_3_1_2_2_2;\n {\n S_54896afd memory r_1_0_1_1_3_3_1_2_2_2_0;\n {\n uint80 r_1_0_1_1_3_3_1_2_2_2_0_0 = 341624200395660190621777;\n r_1_0_1_1_3_3_1_2_2_2_0.s_0 = r_1_0_1_1_3_3_1_2_2_2_0_0;\n }\n r_1_0_1_1_3_3_1_2_2_2.s_0 = r_1_0_1_1_3_3_1_2_2_2_0;\n }\n {\n string memory r_1_0_1_1_3_3_1_2_2_2_1 = unicode\"Moo é🚀🚀oé🚀M🚀ooéééMo ooMéM🚀oo🚀Moo M🚀🚀🚀o🚀oo 🚀oMo🚀é o M🚀\";\n r_1_0_1_1_3_3_1_2_2_2.s_1 = r_1_0_1_1_3_3_1_2_2_2_1;\n }\n r_1_0_1_1_3_3_1_2_2[2] = r_1_0_1_1_3_3_1_2_2_2;\n }\n r_1_0_1_1_3_3_1_2[2] = r_1_0_1_1_3_3_1_2_2;\n }\n r_1_0_1_1_3_3_1.s_2 = r_1_0_1_1_3_3_1_2;\n }\n {\n S_d8e64867[4] memory r_1_0_1_1_3_3_1_3;\n {\n S_d8e64867 memory r_1_0_1_1_3_3_1_3_0;\n {\n bytes31 r_1_0_1_1_3_3_1_3_0_0 = bytes31(0xc28f97501f7791652fb45bb3d9976991bedac8ddf291eade2581dcc10dcf62);\n r_1_0_1_1_3_3_1_3_0.s_0 = r_1_0_1_1_3_3_1_3_0_0;\n }\n {\n uint104 r_1_0_1_1_3_3_1_3_0_1 = 7046739415477862561695982978854;\n r_1_0_1_1_3_3_1_3_0.s_1 = r_1_0_1_1_3_3_1_3_0_1;\n }\n r_1_0_1_1_3_3_1_3[0] = r_1_0_1_1_3_3_1_3_0;\n }\n {\n S_d8e64867 memory r_1_0_1_1_3_3_1_3_1;\n {\n bytes31 r_1_0_1_1_3_3_1_3_1_0 = bytes31(0x4d41991d972b7c188164e117804b6339c4e0347122b0189b8503ef38892b28);\n r_1_0_1_1_3_3_1_3_1.s_0 = r_1_0_1_1_3_3_1_3_1_0;\n }\n {\n uint104 r_1_0_1_1_3_3_1_3_1_1 = 20246486506681101723782299644808;\n r_1_0_1_1_3_3_1_3_1.s_1 = r_1_0_1_1_3_3_1_3_1_1;\n }\n r_1_0_1_1_3_3_1_3[1] = r_1_0_1_1_3_3_1_3_1;\n }\n {\n S_d8e64867 memory r_1_0_1_1_3_3_1_3_2;\n {\n bytes31 r_1_0_1_1_3_3_1_3_2_0 = bytes31(0xbd58cef4a779fd62899c2c85e99373c3b7e387394dc1a389e38c9a68866e5b);\n r_1_0_1_1_3_3_1_3_2.s_0 = r_1_0_1_1_3_3_1_3_2_0;\n }\n {\n uint104 r_1_0_1_1_3_3_1_3_2_1 = 2405135291133471726241251808659;\n r_1_0_1_1_3_3_1_3_2.s_1 = r_1_0_1_1_3_3_1_3_2_1;\n }\n r_1_0_1_1_3_3_1_3[2] = r_1_0_1_1_3_3_1_3_2;\n }\n {\n S_d8e64867 memory r_1_0_1_1_3_3_1_3_3;\n {\n bytes31 r_1_0_1_1_3_3_1_3_3_0 = bytes31(0xd8690ec22dfafe6dc7c6ba7e040bbca489b51c01b046eb15613743edd44e64);\n r_1_0_1_1_3_3_1_3_3.s_0 = r_1_0_1_1_3_3_1_3_3_0;\n }\n {\n uint104 r_1_0_1_1_3_3_1_3_3_1 = 12233201482784658931643004358966;\n r_1_0_1_1_3_3_1_3_3.s_1 = r_1_0_1_1_3_3_1_3_3_1;\n }\n r_1_0_1_1_3_3_1_3[3] = r_1_0_1_1_3_3_1_3_3;\n }\n r_1_0_1_1_3_3_1.s_3 = r_1_0_1_1_3_3_1_3;\n }\n {\n uint48 r_1_0_1_1_3_3_1_4 = 93747656736920;\n r_1_0_1_1_3_3_1.s_4 = r_1_0_1_1_3_3_1_4;\n }\n r_1_0_1_1_3_3.s_1 = r_1_0_1_1_3_3_1;\n }\n r_1_0_1_1_3.s_3 = r_1_0_1_1_3_3;\n }\n r_1_0_1_1.s_3 = r_1_0_1_1_3;\n }\n r_1_0_1.s_1 = r_1_0_1_1;\n }\n {\n string memory r_1_0_1_2 = unicode\"Moo é🚀ooo🚀 M🚀oMMé 🚀M🚀éo🚀oo ooM é🚀oooéé éééooéo🚀o🚀ooéo o o o🚀o\";\n r_1_0_1.s_2 = r_1_0_1_2;\n }\n r_1_0[1] = r_1_0_1;\n }\n {\n S_920026e8 memory r_1_0_2;\n {\n int32 r_1_0_2_0 = 918624151;\n r_1_0_2.s_0 = r_1_0_2_0;\n }\n {\n S_c8d7c908 memory r_1_0_2_1;\n {\n uint56 r_1_0_2_1_0 = 56486694906339737;\n r_1_0_2_1.s_0 = r_1_0_2_1_0;\n }\n {\n bytes27 r_1_0_2_1_1 = bytes27(0x0ce34271c85d1f7ad57d1f3565af13198555b24f5c469c7c8d1670);\n r_1_0_2_1.s_1 = r_1_0_2_1_1;\n }\n {\n bool r_1_0_2_1_2 = true;\n r_1_0_2_1.s_2 = r_1_0_2_1_2;\n }\n {\n S_733a0ce7 memory r_1_0_2_1_3;\n {\n address r_1_0_2_1_3_0 = 0x52381eb8042518cfCD935a58DeC4334c3F97489E;\n r_1_0_2_1_3.s_0 = r_1_0_2_1_3_0;\n }\n {\n bool r_1_0_2_1_3_1 = true;\n r_1_0_2_1_3.s_1 = r_1_0_2_1_3_1;\n }\n {\n S_25e98821 memory r_1_0_2_1_3_2;\n {\n bool r_1_0_2_1_3_2_0 = false;\n r_1_0_2_1_3_2.s_0 = r_1_0_2_1_3_2_0;\n }\n {\n bool r_1_0_2_1_3_2_1 = false;\n r_1_0_2_1_3_2.s_1 = r_1_0_2_1_3_2_1;\n }\n r_1_0_2_1_3.s_2 = r_1_0_2_1_3_2;\n }\n {\n S_a55eb82d memory r_1_0_2_1_3_3;\n {\n bytes31 r_1_0_2_1_3_3_0 = bytes31(0xb547c7cfcd6b78f66b4eecfdea431273018a3671ef8d68065a8edc201c233b);\n r_1_0_2_1_3_3.s_0 = r_1_0_2_1_3_3_0;\n }\n {\n S_770db331 memory r_1_0_2_1_3_3_1;\n {\n string memory r_1_0_2_1_3_3_1_0 = unicode\"Moo é🚀ooéo o🚀MéoMMé 🚀oé🚀🚀o M éooéMé éoééoé\";\n r_1_0_2_1_3_3_1.s_0 = r_1_0_2_1_3_3_1_0;\n }\n {\n bytes17 r_1_0_2_1_3_3_1_1 = bytes17(0x3f68e27ce7b2ad3ef0f90b12fef74c3aa3);\n r_1_0_2_1_3_3_1.s_1 = r_1_0_2_1_3_3_1_1;\n }\n {\n S_5758d412[3][] memory r_1_0_2_1_3_3_1_2 = new S_5758d412[3][](4);\n {\n S_5758d412[3] memory r_1_0_2_1_3_3_1_2_0;\n {\n S_5758d412 memory r_1_0_2_1_3_3_1_2_0_0;\n {\n S_54896afd memory r_1_0_2_1_3_3_1_2_0_0_0;\n {\n uint80 r_1_0_2_1_3_3_1_2_0_0_0_0 = 649705950308356913956615;\n r_1_0_2_1_3_3_1_2_0_0_0.s_0 = r_1_0_2_1_3_3_1_2_0_0_0_0;\n }\n r_1_0_2_1_3_3_1_2_0_0.s_0 = r_1_0_2_1_3_3_1_2_0_0_0;\n }\n {\n string memory r_1_0_2_1_3_3_1_2_0_0_1 = unicode\"Moo é🚀éooooo🚀oéMMoo éo é ééééo\";\n r_1_0_2_1_3_3_1_2_0_0.s_1 = r_1_0_2_1_3_3_1_2_0_0_1;\n }\n r_1_0_2_1_3_3_1_2_0[0] = r_1_0_2_1_3_3_1_2_0_0;\n }\n {\n S_5758d412 memory r_1_0_2_1_3_3_1_2_0_1;\n {\n S_54896afd memory r_1_0_2_1_3_3_1_2_0_1_0;\n {\n uint80 r_1_0_2_1_3_3_1_2_0_1_0_0 = 58468454581933630711541;\n r_1_0_2_1_3_3_1_2_0_1_0.s_0 = r_1_0_2_1_3_3_1_2_0_1_0_0;\n }\n r_1_0_2_1_3_3_1_2_0_1.s_0 = r_1_0_2_1_3_3_1_2_0_1_0;\n }\n {\n string memory r_1_0_2_1_3_3_1_2_0_1_1 = unicode\"Moo é🚀 Mooooéooéé🚀o🚀o oM Moo🚀Mo ééoo oéoooo🚀ooé🚀 ooM \";\n r_1_0_2_1_3_3_1_2_0_1.s_1 = r_1_0_2_1_3_3_1_2_0_1_1;\n }\n r_1_0_2_1_3_3_1_2_0[1] = r_1_0_2_1_3_3_1_2_0_1;\n }\n {\n S_5758d412 memory r_1_0_2_1_3_3_1_2_0_2;\n {\n S_54896afd memory r_1_0_2_1_3_3_1_2_0_2_0;\n {\n uint80 r_1_0_2_1_3_3_1_2_0_2_0_0 = 469311536106426346369599;\n r_1_0_2_1_3_3_1_2_0_2_0.s_0 = r_1_0_2_1_3_3_1_2_0_2_0_0;\n }\n r_1_0_2_1_3_3_1_2_0_2.s_0 = r_1_0_2_1_3_3_1_2_0_2_0;\n }\n {\n string memory r_1_0_2_1_3_3_1_2_0_2_1 = unicode\"Moo é🚀🚀oM 🚀Moo MMMé oo oo🚀oo🚀oMMé M ooééoéMo é o\";\n r_1_0_2_1_3_3_1_2_0_2.s_1 = r_1_0_2_1_3_3_1_2_0_2_1;\n }\n r_1_0_2_1_3_3_1_2_0[2] = r_1_0_2_1_3_3_1_2_0_2;\n }\n r_1_0_2_1_3_3_1_2[0] = r_1_0_2_1_3_3_1_2_0;\n }\n {\n S_5758d412[3] memory r_1_0_2_1_3_3_1_2_1;\n {\n S_5758d412 memory r_1_0_2_1_3_3_1_2_1_0;\n {\n S_54896afd memory r_1_0_2_1_3_3_1_2_1_0_0;\n {\n uint80 r_1_0_2_1_3_3_1_2_1_0_0_0 = 183883345857417564092205;\n r_1_0_2_1_3_3_1_2_1_0_0.s_0 = r_1_0_2_1_3_3_1_2_1_0_0_0;\n }\n r_1_0_2_1_3_3_1_2_1_0.s_0 = r_1_0_2_1_3_3_1_2_1_0_0;\n }\n {\n string memory r_1_0_2_1_3_3_1_2_1_0_1 = unicode\"Moo é🚀Mé🚀oM🚀\";\n r_1_0_2_1_3_3_1_2_1_0.s_1 = r_1_0_2_1_3_3_1_2_1_0_1;\n }\n r_1_0_2_1_3_3_1_2_1[0] = r_1_0_2_1_3_3_1_2_1_0;\n }\n {\n S_5758d412 memory r_1_0_2_1_3_3_1_2_1_1;\n {\n S_54896afd memory r_1_0_2_1_3_3_1_2_1_1_0;\n {\n uint80 r_1_0_2_1_3_3_1_2_1_1_0_0 = 706959299831709797717431;\n r_1_0_2_1_3_3_1_2_1_1_0.s_0 = r_1_0_2_1_3_3_1_2_1_1_0_0;\n }\n r_1_0_2_1_3_3_1_2_1_1.s_0 = r_1_0_2_1_3_3_1_2_1_1_0;\n }\n {\n string memory r_1_0_2_1_3_3_1_2_1_1_1 = unicode\"Moo é🚀\";\n r_1_0_2_1_3_3_1_2_1_1.s_1 = r_1_0_2_1_3_3_1_2_1_1_1;\n }\n r_1_0_2_1_3_3_1_2_1[1] = r_1_0_2_1_3_3_1_2_1_1;\n }\n {\n S_5758d412 memory r_1_0_2_1_3_3_1_2_1_2;\n {\n S_54896afd memory r_1_0_2_1_3_3_1_2_1_2_0;\n {\n uint80 r_1_0_2_1_3_3_1_2_1_2_0_0 = 127672568362815957964762;\n r_1_0_2_1_3_3_1_2_1_2_0.s_0 = r_1_0_2_1_3_3_1_2_1_2_0_0;\n }\n r_1_0_2_1_3_3_1_2_1_2.s_0 = r_1_0_2_1_3_3_1_2_1_2_0;\n }\n {\n string memory r_1_0_2_1_3_3_1_2_1_2_1 = unicode\"Moo é🚀éMo🚀ééoéMéo🚀o🚀\";\n r_1_0_2_1_3_3_1_2_1_2.s_1 = r_1_0_2_1_3_3_1_2_1_2_1;\n }\n r_1_0_2_1_3_3_1_2_1[2] = r_1_0_2_1_3_3_1_2_1_2;\n }\n r_1_0_2_1_3_3_1_2[1] = r_1_0_2_1_3_3_1_2_1;\n }\n {\n S_5758d412[3] memory r_1_0_2_1_3_3_1_2_2;\n {\n S_5758d412 memory r_1_0_2_1_3_3_1_2_2_0;\n {\n S_54896afd memory r_1_0_2_1_3_3_1_2_2_0_0;\n {\n uint80 r_1_0_2_1_3_3_1_2_2_0_0_0 = 530031133160340027734252;\n r_1_0_2_1_3_3_1_2_2_0_0.s_0 = r_1_0_2_1_3_3_1_2_2_0_0_0;\n }\n r_1_0_2_1_3_3_1_2_2_0.s_0 = r_1_0_2_1_3_3_1_2_2_0_0;\n }\n {\n string memory r_1_0_2_1_3_3_1_2_2_0_1 = unicode\"Moo é🚀\";\n r_1_0_2_1_3_3_1_2_2_0.s_1 = r_1_0_2_1_3_3_1_2_2_0_1;\n }\n r_1_0_2_1_3_3_1_2_2[0] = r_1_0_2_1_3_3_1_2_2_0;\n }\n {\n S_5758d412 memory r_1_0_2_1_3_3_1_2_2_1;\n {\n S_54896afd memory r_1_0_2_1_3_3_1_2_2_1_0;\n {\n uint80 r_1_0_2_1_3_3_1_2_2_1_0_0 = 836123641572017954708367;\n r_1_0_2_1_3_3_1_2_2_1_0.s_0 = r_1_0_2_1_3_3_1_2_2_1_0_0;\n }\n r_1_0_2_1_3_3_1_2_2_1.s_0 = r_1_0_2_1_3_3_1_2_2_1_0;\n }\n {\n string memory r_1_0_2_1_3_3_1_2_2_1_1 = unicode\"Moo é🚀o🚀🚀 🚀🚀o Mo🚀MééoMéoM🚀o🚀MéoooM🚀\";\n r_1_0_2_1_3_3_1_2_2_1.s_1 = r_1_0_2_1_3_3_1_2_2_1_1;\n }\n r_1_0_2_1_3_3_1_2_2[1] = r_1_0_2_1_3_3_1_2_2_1;\n }\n {\n S_5758d412 memory r_1_0_2_1_3_3_1_2_2_2;\n {\n S_54896afd memory r_1_0_2_1_3_3_1_2_2_2_0;\n {\n uint80 r_1_0_2_1_3_3_1_2_2_2_0_0 = 404840947105315220766498;\n r_1_0_2_1_3_3_1_2_2_2_0.s_0 = r_1_0_2_1_3_3_1_2_2_2_0_0;\n }\n r_1_0_2_1_3_3_1_2_2_2.s_0 = r_1_0_2_1_3_3_1_2_2_2_0;\n }\n {\n string memory r_1_0_2_1_3_3_1_2_2_2_1 = unicode\"Moo é🚀oé o🚀oo\";\n r_1_0_2_1_3_3_1_2_2_2.s_1 = r_1_0_2_1_3_3_1_2_2_2_1;\n }\n r_1_0_2_1_3_3_1_2_2[2] = r_1_0_2_1_3_3_1_2_2_2;\n }\n r_1_0_2_1_3_3_1_2[2] = r_1_0_2_1_3_3_1_2_2;\n }\n {\n S_5758d412[3] memory r_1_0_2_1_3_3_1_2_3;\n {\n S_5758d412 memory r_1_0_2_1_3_3_1_2_3_0;\n {\n S_54896afd memory r_1_0_2_1_3_3_1_2_3_0_0;\n {\n uint80 r_1_0_2_1_3_3_1_2_3_0_0_0 = 512886782297741481563198;\n r_1_0_2_1_3_3_1_2_3_0_0.s_0 = r_1_0_2_1_3_3_1_2_3_0_0_0;\n }\n r_1_0_2_1_3_3_1_2_3_0.s_0 = r_1_0_2_1_3_3_1_2_3_0_0;\n }\n {\n string memory r_1_0_2_1_3_3_1_2_3_0_1 = unicode\"Moo é🚀ooMé🚀ooo\";\n r_1_0_2_1_3_3_1_2_3_0.s_1 = r_1_0_2_1_3_3_1_2_3_0_1;\n }\n r_1_0_2_1_3_3_1_2_3[0] = r_1_0_2_1_3_3_1_2_3_0;\n }\n {\n S_5758d412 memory r_1_0_2_1_3_3_1_2_3_1;\n {\n S_54896afd memory r_1_0_2_1_3_3_1_2_3_1_0;\n {\n uint80 r_1_0_2_1_3_3_1_2_3_1_0_0 = 130508694331430248070448;\n r_1_0_2_1_3_3_1_2_3_1_0.s_0 = r_1_0_2_1_3_3_1_2_3_1_0_0;\n }\n r_1_0_2_1_3_3_1_2_3_1.s_0 = r_1_0_2_1_3_3_1_2_3_1_0;\n }\n {\n string memory r_1_0_2_1_3_3_1_2_3_1_1 = unicode\"Moo é🚀Mé 🚀oMéM🚀🚀oMéo oM\";\n r_1_0_2_1_3_3_1_2_3_1.s_1 = r_1_0_2_1_3_3_1_2_3_1_1;\n }\n r_1_0_2_1_3_3_1_2_3[1] = r_1_0_2_1_3_3_1_2_3_1;\n }\n {\n S_5758d412 memory r_1_0_2_1_3_3_1_2_3_2;\n {\n S_54896afd memory r_1_0_2_1_3_3_1_2_3_2_0;\n {\n uint80 r_1_0_2_1_3_3_1_2_3_2_0_0 = 484957477470614903403427;\n r_1_0_2_1_3_3_1_2_3_2_0.s_0 = r_1_0_2_1_3_3_1_2_3_2_0_0;\n }\n r_1_0_2_1_3_3_1_2_3_2.s_0 = r_1_0_2_1_3_3_1_2_3_2_0;\n }\n {\n string memory r_1_0_2_1_3_3_1_2_3_2_1 = unicode\"Moo é🚀🚀éoé\";\n r_1_0_2_1_3_3_1_2_3_2.s_1 = r_1_0_2_1_3_3_1_2_3_2_1;\n }\n r_1_0_2_1_3_3_1_2_3[2] = r_1_0_2_1_3_3_1_2_3_2;\n }\n r_1_0_2_1_3_3_1_2[3] = r_1_0_2_1_3_3_1_2_3;\n }\n r_1_0_2_1_3_3_1.s_2 = r_1_0_2_1_3_3_1_2;\n }\n {\n S_d8e64867[4] memory r_1_0_2_1_3_3_1_3;\n {\n S_d8e64867 memory r_1_0_2_1_3_3_1_3_0;\n {\n bytes31 r_1_0_2_1_3_3_1_3_0_0 = bytes31(0xe7ece7ae291cd0458a033985ada4c2fec400224a751c41f6447cf13301a401);\n r_1_0_2_1_3_3_1_3_0.s_0 = r_1_0_2_1_3_3_1_3_0_0;\n }\n {\n uint104 r_1_0_2_1_3_3_1_3_0_1 = 12927771394155598973762112288802;\n r_1_0_2_1_3_3_1_3_0.s_1 = r_1_0_2_1_3_3_1_3_0_1;\n }\n r_1_0_2_1_3_3_1_3[0] = r_1_0_2_1_3_3_1_3_0;\n }\n {\n S_d8e64867 memory r_1_0_2_1_3_3_1_3_1;\n {\n bytes31 r_1_0_2_1_3_3_1_3_1_0 = bytes31(0x255a667a600e5ee772487aa83888580271ad9d46ee529c5a50f6f3acb0b16f);\n r_1_0_2_1_3_3_1_3_1.s_0 = r_1_0_2_1_3_3_1_3_1_0;\n }\n {\n uint104 r_1_0_2_1_3_3_1_3_1_1 = 17266090260360266537560743786226;\n r_1_0_2_1_3_3_1_3_1.s_1 = r_1_0_2_1_3_3_1_3_1_1;\n }\n r_1_0_2_1_3_3_1_3[1] = r_1_0_2_1_3_3_1_3_1;\n }\n {\n S_d8e64867 memory r_1_0_2_1_3_3_1_3_2;\n {\n bytes31 r_1_0_2_1_3_3_1_3_2_0 = bytes31(0x0db78f003a4145bebf8fbd7fce49fb124592f6c0e551fdc45bb4aa2fd837c9);\n r_1_0_2_1_3_3_1_3_2.s_0 = r_1_0_2_1_3_3_1_3_2_0;\n }\n {\n uint104 r_1_0_2_1_3_3_1_3_2_1 = 8454111238309761354615382142430;\n r_1_0_2_1_3_3_1_3_2.s_1 = r_1_0_2_1_3_3_1_3_2_1;\n }\n r_1_0_2_1_3_3_1_3[2] = r_1_0_2_1_3_3_1_3_2;\n }\n {\n S_d8e64867 memory r_1_0_2_1_3_3_1_3_3;\n {\n bytes31 r_1_0_2_1_3_3_1_3_3_0 = bytes31(0x6c94b1caf5cae510639dc473a027026fecb07fee48304a13c1fe99817356cb);\n r_1_0_2_1_3_3_1_3_3.s_0 = r_1_0_2_1_3_3_1_3_3_0;\n }\n {\n uint104 r_1_0_2_1_3_3_1_3_3_1 = 5598719154263456989403668378468;\n r_1_0_2_1_3_3_1_3_3.s_1 = r_1_0_2_1_3_3_1_3_3_1;\n }\n r_1_0_2_1_3_3_1_3[3] = r_1_0_2_1_3_3_1_3_3;\n }\n r_1_0_2_1_3_3_1.s_3 = r_1_0_2_1_3_3_1_3;\n }\n {\n uint48 r_1_0_2_1_3_3_1_4 = 207026167236643;\n r_1_0_2_1_3_3_1.s_4 = r_1_0_2_1_3_3_1_4;\n }\n r_1_0_2_1_3_3.s_1 = r_1_0_2_1_3_3_1;\n }\n r_1_0_2_1_3.s_3 = r_1_0_2_1_3_3;\n }\n r_1_0_2_1.s_3 = r_1_0_2_1_3;\n }\n r_1_0_2.s_1 = r_1_0_2_1;\n }\n {\n string memory r_1_0_2_2 = unicode\"Moo é🚀o🚀Méooé o\";\n r_1_0_2.s_2 = r_1_0_2_2;\n }\n r_1_0[2] = r_1_0_2;\n }\n {\n S_920026e8 memory r_1_0_3;\n {\n int32 r_1_0_3_0 = -1914892012;\n r_1_0_3.s_0 = r_1_0_3_0;\n }\n {\n S_c8d7c908 memory r_1_0_3_1;\n {\n uint56 r_1_0_3_1_0 = 20299934080799188;\n r_1_0_3_1.s_0 = r_1_0_3_1_0;\n }\n {\n bytes27 r_1_0_3_1_1 = bytes27(0x1d2e9d46924e4f5913d7830e45246d546111b393349a7e51408075);\n r_1_0_3_1.s_1 = r_1_0_3_1_1;\n }\n {\n bool r_1_0_3_1_2 = false;\n r_1_0_3_1.s_2 = r_1_0_3_1_2;\n }\n {\n S_733a0ce7 memory r_1_0_3_1_3;\n {\n address r_1_0_3_1_3_0 = 0xE197Af46E9E37C4a6895Ca782651DA6377E279BF;\n r_1_0_3_1_3.s_0 = r_1_0_3_1_3_0;\n }\n {\n bool r_1_0_3_1_3_1 = false;\n r_1_0_3_1_3.s_1 = r_1_0_3_1_3_1;\n }\n {\n S_25e98821 memory r_1_0_3_1_3_2;\n {\n bool r_1_0_3_1_3_2_0 = true;\n r_1_0_3_1_3_2.s_0 = r_1_0_3_1_3_2_0;\n }\n {\n bool r_1_0_3_1_3_2_1 = false;\n r_1_0_3_1_3_2.s_1 = r_1_0_3_1_3_2_1;\n }\n r_1_0_3_1_3.s_2 = r_1_0_3_1_3_2;\n }\n {\n S_a55eb82d memory r_1_0_3_1_3_3;\n {\n bytes31 r_1_0_3_1_3_3_0 = bytes31(0xa188b35c1d88ceb6ee0784da9e16e8e808c8c736520c4e4bb31de59d598f32);\n r_1_0_3_1_3_3.s_0 = r_1_0_3_1_3_3_0;\n }\n {\n S_770db331 memory r_1_0_3_1_3_3_1;\n {\n string memory r_1_0_3_1_3_3_1_0 = unicode\"Moo é🚀 o oé\";\n r_1_0_3_1_3_3_1.s_0 = r_1_0_3_1_3_3_1_0;\n }\n {\n bytes17 r_1_0_3_1_3_3_1_1 = bytes17(0x61a2d25a7d1a2179e68e410932c51efb9b);\n r_1_0_3_1_3_3_1.s_1 = r_1_0_3_1_3_3_1_1;\n }\n {\n S_5758d412[3][] memory r_1_0_3_1_3_3_1_2 = new S_5758d412[3][](2);\n {\n S_5758d412[3] memory r_1_0_3_1_3_3_1_2_0;\n {\n S_5758d412 memory r_1_0_3_1_3_3_1_2_0_0;\n {\n S_54896afd memory r_1_0_3_1_3_3_1_2_0_0_0;\n {\n uint80 r_1_0_3_1_3_3_1_2_0_0_0_0 = 954032285101724101324237;\n r_1_0_3_1_3_3_1_2_0_0_0.s_0 = r_1_0_3_1_3_3_1_2_0_0_0_0;\n }\n r_1_0_3_1_3_3_1_2_0_0.s_0 = r_1_0_3_1_3_3_1_2_0_0_0;\n }\n {\n string memory r_1_0_3_1_3_3_1_2_0_0_1 = unicode\"Moo é🚀\";\n r_1_0_3_1_3_3_1_2_0_0.s_1 = r_1_0_3_1_3_3_1_2_0_0_1;\n }\n r_1_0_3_1_3_3_1_2_0[0] = r_1_0_3_1_3_3_1_2_0_0;\n }\n {\n S_5758d412 memory r_1_0_3_1_3_3_1_2_0_1;\n {\n S_54896afd memory r_1_0_3_1_3_3_1_2_0_1_0;\n {\n uint80 r_1_0_3_1_3_3_1_2_0_1_0_0 = 196730564305282248666853;\n r_1_0_3_1_3_3_1_2_0_1_0.s_0 = r_1_0_3_1_3_3_1_2_0_1_0_0;\n }\n r_1_0_3_1_3_3_1_2_0_1.s_0 = r_1_0_3_1_3_3_1_2_0_1_0;\n }\n {\n string memory r_1_0_3_1_3_3_1_2_0_1_1 = unicode\"Moo é🚀o🚀o éoMM \";\n r_1_0_3_1_3_3_1_2_0_1.s_1 = r_1_0_3_1_3_3_1_2_0_1_1;\n }\n r_1_0_3_1_3_3_1_2_0[1] = r_1_0_3_1_3_3_1_2_0_1;\n }\n {\n S_5758d412 memory r_1_0_3_1_3_3_1_2_0_2;\n {\n S_54896afd memory r_1_0_3_1_3_3_1_2_0_2_0;\n {\n uint80 r_1_0_3_1_3_3_1_2_0_2_0_0 = 603667938580924110880859;\n r_1_0_3_1_3_3_1_2_0_2_0.s_0 = r_1_0_3_1_3_3_1_2_0_2_0_0;\n }\n r_1_0_3_1_3_3_1_2_0_2.s_0 = r_1_0_3_1_3_3_1_2_0_2_0;\n }\n {\n string memory r_1_0_3_1_3_3_1_2_0_2_1 = unicode\"Moo é🚀 oéo éé 🚀oo \";\n r_1_0_3_1_3_3_1_2_0_2.s_1 = r_1_0_3_1_3_3_1_2_0_2_1;\n }\n r_1_0_3_1_3_3_1_2_0[2] = r_1_0_3_1_3_3_1_2_0_2;\n }\n r_1_0_3_1_3_3_1_2[0] = r_1_0_3_1_3_3_1_2_0;\n }\n {\n S_5758d412[3] memory r_1_0_3_1_3_3_1_2_1;\n {\n S_5758d412 memory r_1_0_3_1_3_3_1_2_1_0;\n {\n S_54896afd memory r_1_0_3_1_3_3_1_2_1_0_0;\n {\n uint80 r_1_0_3_1_3_3_1_2_1_0_0_0 = 1099728774289268466661399;\n r_1_0_3_1_3_3_1_2_1_0_0.s_0 = r_1_0_3_1_3_3_1_2_1_0_0_0;\n }\n r_1_0_3_1_3_3_1_2_1_0.s_0 = r_1_0_3_1_3_3_1_2_1_0_0;\n }\n {\n string memory r_1_0_3_1_3_3_1_2_1_0_1 = unicode\"Moo é🚀éo 🚀oMoéé o oMooooM🚀éé🚀🚀éo \";\n r_1_0_3_1_3_3_1_2_1_0.s_1 = r_1_0_3_1_3_3_1_2_1_0_1;\n }\n r_1_0_3_1_3_3_1_2_1[0] = r_1_0_3_1_3_3_1_2_1_0;\n }\n {\n S_5758d412 memory r_1_0_3_1_3_3_1_2_1_1;\n {\n S_54896afd memory r_1_0_3_1_3_3_1_2_1_1_0;\n {\n uint80 r_1_0_3_1_3_3_1_2_1_1_0_0 = 959612613096905308760943;\n r_1_0_3_1_3_3_1_2_1_1_0.s_0 = r_1_0_3_1_3_3_1_2_1_1_0_0;\n }\n r_1_0_3_1_3_3_1_2_1_1.s_0 = r_1_0_3_1_3_3_1_2_1_1_0;\n }\n {\n string memory r_1_0_3_1_3_3_1_2_1_1_1 = unicode\"Moo é🚀 🚀M Moooé🚀 oo M o oo 🚀o oé M\";\n r_1_0_3_1_3_3_1_2_1_1.s_1 = r_1_0_3_1_3_3_1_2_1_1_1;\n }\n r_1_0_3_1_3_3_1_2_1[1] = r_1_0_3_1_3_3_1_2_1_1;\n }\n {\n S_5758d412 memory r_1_0_3_1_3_3_1_2_1_2;\n {\n S_54896afd memory r_1_0_3_1_3_3_1_2_1_2_0;\n {\n uint80 r_1_0_3_1_3_3_1_2_1_2_0_0 = 1025002190457938415535849;\n r_1_0_3_1_3_3_1_2_1_2_0.s_0 = r_1_0_3_1_3_3_1_2_1_2_0_0;\n }\n r_1_0_3_1_3_3_1_2_1_2.s_0 = r_1_0_3_1_3_3_1_2_1_2_0;\n }\n {\n string memory r_1_0_3_1_3_3_1_2_1_2_1 = unicode\"Moo é🚀🚀Moo oé🚀oMo 🚀M oMMoMo MéM🚀o\";\n r_1_0_3_1_3_3_1_2_1_2.s_1 = r_1_0_3_1_3_3_1_2_1_2_1;\n }\n r_1_0_3_1_3_3_1_2_1[2] = r_1_0_3_1_3_3_1_2_1_2;\n }\n r_1_0_3_1_3_3_1_2[1] = r_1_0_3_1_3_3_1_2_1;\n }\n r_1_0_3_1_3_3_1.s_2 = r_1_0_3_1_3_3_1_2;\n }\n {\n S_d8e64867[4] memory r_1_0_3_1_3_3_1_3;\n {\n S_d8e64867 memory r_1_0_3_1_3_3_1_3_0;\n {\n bytes31 r_1_0_3_1_3_3_1_3_0_0 = bytes31(0x12dcb1bc894edcec544c35af28d5be0a590a40830edd501c8c715faeb812d9);\n r_1_0_3_1_3_3_1_3_0.s_0 = r_1_0_3_1_3_3_1_3_0_0;\n }\n {\n uint104 r_1_0_3_1_3_3_1_3_0_1 = 6995212533981106046433128563926;\n r_1_0_3_1_3_3_1_3_0.s_1 = r_1_0_3_1_3_3_1_3_0_1;\n }\n r_1_0_3_1_3_3_1_3[0] = r_1_0_3_1_3_3_1_3_0;\n }\n {\n S_d8e64867 memory r_1_0_3_1_3_3_1_3_1;\n {\n bytes31 r_1_0_3_1_3_3_1_3_1_0 = bytes31(0x8d9fbe397650464e7b601019a91d2728b4cadbbcbbe79d21bfeb1f71b5336c);\n r_1_0_3_1_3_3_1_3_1.s_0 = r_1_0_3_1_3_3_1_3_1_0;\n }\n {\n uint104 r_1_0_3_1_3_3_1_3_1_1 = 8597070187493096549654997007129;\n r_1_0_3_1_3_3_1_3_1.s_1 = r_1_0_3_1_3_3_1_3_1_1;\n }\n r_1_0_3_1_3_3_1_3[1] = r_1_0_3_1_3_3_1_3_1;\n }\n {\n S_d8e64867 memory r_1_0_3_1_3_3_1_3_2;\n {\n bytes31 r_1_0_3_1_3_3_1_3_2_0 = bytes31(0xcc1e1fdc69738faa5d6621e6570f96ea5455879d84e6aced6eb8f4a98532b8);\n r_1_0_3_1_3_3_1_3_2.s_0 = r_1_0_3_1_3_3_1_3_2_0;\n }\n {\n uint104 r_1_0_3_1_3_3_1_3_2_1 = 9129996001931131645523743293902;\n r_1_0_3_1_3_3_1_3_2.s_1 = r_1_0_3_1_3_3_1_3_2_1;\n }\n r_1_0_3_1_3_3_1_3[2] = r_1_0_3_1_3_3_1_3_2;\n }\n {\n S_d8e64867 memory r_1_0_3_1_3_3_1_3_3;\n {\n bytes31 r_1_0_3_1_3_3_1_3_3_0 = bytes31(0xb8b96fd6a9e1bd59acb7c0b76803b3ebc93ddd50715a5c7600ce89852e0ed0);\n r_1_0_3_1_3_3_1_3_3.s_0 = r_1_0_3_1_3_3_1_3_3_0;\n }\n {\n uint104 r_1_0_3_1_3_3_1_3_3_1 = 4242684607374094016047792180447;\n r_1_0_3_1_3_3_1_3_3.s_1 = r_1_0_3_1_3_3_1_3_3_1;\n }\n r_1_0_3_1_3_3_1_3[3] = r_1_0_3_1_3_3_1_3_3;\n }\n r_1_0_3_1_3_3_1.s_3 = r_1_0_3_1_3_3_1_3;\n }\n {\n uint48 r_1_0_3_1_3_3_1_4 = 86381324625382;\n r_1_0_3_1_3_3_1.s_4 = r_1_0_3_1_3_3_1_4;\n }\n r_1_0_3_1_3_3.s_1 = r_1_0_3_1_3_3_1;\n }\n r_1_0_3_1_3.s_3 = r_1_0_3_1_3_3;\n }\n r_1_0_3_1.s_3 = r_1_0_3_1_3;\n }\n r_1_0_3.s_1 = r_1_0_3_1;\n }\n {\n string memory r_1_0_3_2 = unicode\"Moo é🚀 ooéo🚀🚀ooM\";\n r_1_0_3.s_2 = r_1_0_3_2;\n }\n r_1_0[3] = r_1_0_3;\n }\n r_1[0] = r_1_0;\n }\n r[1] = r_1;\n }\n {\n S_920026e8[4][1] memory r_2;\n {\n S_920026e8[4] memory r_2_0;\n {\n S_920026e8 memory r_2_0_0;\n {\n int32 r_2_0_0_0 = 450086051;\n r_2_0_0.s_0 = r_2_0_0_0;\n }\n {\n S_c8d7c908 memory r_2_0_0_1;\n {\n uint56 r_2_0_0_1_0 = 1862667065203480;\n r_2_0_0_1.s_0 = r_2_0_0_1_0;\n }\n {\n bytes27 r_2_0_0_1_1 = bytes27(0xe8132e5855fcb7e84a8c0cb2d9cd67b7931a9d2c93bf826c2b77b5);\n r_2_0_0_1.s_1 = r_2_0_0_1_1;\n }\n {\n bool r_2_0_0_1_2 = false;\n r_2_0_0_1.s_2 = r_2_0_0_1_2;\n }\n {\n S_733a0ce7 memory r_2_0_0_1_3;\n {\n address r_2_0_0_1_3_0 = 0xa322764125e3A508d77E0ba42C154C12E193BD5e;\n r_2_0_0_1_3.s_0 = r_2_0_0_1_3_0;\n }\n {\n bool r_2_0_0_1_3_1 = true;\n r_2_0_0_1_3.s_1 = r_2_0_0_1_3_1;\n }\n {\n S_25e98821 memory r_2_0_0_1_3_2;\n {\n bool r_2_0_0_1_3_2_0 = false;\n r_2_0_0_1_3_2.s_0 = r_2_0_0_1_3_2_0;\n }\n {\n bool r_2_0_0_1_3_2_1 = false;\n r_2_0_0_1_3_2.s_1 = r_2_0_0_1_3_2_1;\n }\n r_2_0_0_1_3.s_2 = r_2_0_0_1_3_2;\n }\n {\n S_a55eb82d memory r_2_0_0_1_3_3;\n {\n bytes31 r_2_0_0_1_3_3_0 = bytes31(0xde240c049f7da90a7ecb9156c990f89bdceb476917fd3322998d3bec8e0c5b);\n r_2_0_0_1_3_3.s_0 = r_2_0_0_1_3_3_0;\n }\n {\n S_770db331 memory r_2_0_0_1_3_3_1;\n {\n string memory r_2_0_0_1_3_3_1_0 = unicode\"Moo é🚀 M M🚀oooMMM🚀\";\n r_2_0_0_1_3_3_1.s_0 = r_2_0_0_1_3_3_1_0;\n }\n {\n bytes17 r_2_0_0_1_3_3_1_1 = bytes17(0x617345c7fbe4523b00537142e2f8705b9a);\n r_2_0_0_1_3_3_1.s_1 = r_2_0_0_1_3_3_1_1;\n }\n {\n S_5758d412[3][] memory r_2_0_0_1_3_3_1_2 = new S_5758d412[3][](4);\n {\n S_5758d412[3] memory r_2_0_0_1_3_3_1_2_0;\n {\n S_5758d412 memory r_2_0_0_1_3_3_1_2_0_0;\n {\n S_54896afd memory r_2_0_0_1_3_3_1_2_0_0_0;\n {\n uint80 r_2_0_0_1_3_3_1_2_0_0_0_0 = 1025559340071980978979119;\n r_2_0_0_1_3_3_1_2_0_0_0.s_0 = r_2_0_0_1_3_3_1_2_0_0_0_0;\n }\n r_2_0_0_1_3_3_1_2_0_0.s_0 = r_2_0_0_1_3_3_1_2_0_0_0;\n }\n {\n string memory r_2_0_0_1_3_3_1_2_0_0_1 = unicode\"Moo é🚀oMoMéoéoMo oéMo oM ooooMMoMé MM ooMMéé🚀o o\";\n r_2_0_0_1_3_3_1_2_0_0.s_1 = r_2_0_0_1_3_3_1_2_0_0_1;\n }\n r_2_0_0_1_3_3_1_2_0[0] = r_2_0_0_1_3_3_1_2_0_0;\n }\n {\n S_5758d412 memory r_2_0_0_1_3_3_1_2_0_1;\n {\n S_54896afd memory r_2_0_0_1_3_3_1_2_0_1_0;\n {\n uint80 r_2_0_0_1_3_3_1_2_0_1_0_0 = 199996398625034076461454;\n r_2_0_0_1_3_3_1_2_0_1_0.s_0 = r_2_0_0_1_3_3_1_2_0_1_0_0;\n }\n r_2_0_0_1_3_3_1_2_0_1.s_0 = r_2_0_0_1_3_3_1_2_0_1_0;\n }\n {\n string memory r_2_0_0_1_3_3_1_2_0_1_1 = unicode\"Moo é🚀🚀M🚀🚀MM ééé o\";\n r_2_0_0_1_3_3_1_2_0_1.s_1 = r_2_0_0_1_3_3_1_2_0_1_1;\n }\n r_2_0_0_1_3_3_1_2_0[1] = r_2_0_0_1_3_3_1_2_0_1;\n }\n {\n S_5758d412 memory r_2_0_0_1_3_3_1_2_0_2;\n {\n S_54896afd memory r_2_0_0_1_3_3_1_2_0_2_0;\n {\n uint80 r_2_0_0_1_3_3_1_2_0_2_0_0 = 135884599882127575401329;\n r_2_0_0_1_3_3_1_2_0_2_0.s_0 = r_2_0_0_1_3_3_1_2_0_2_0_0;\n }\n r_2_0_0_1_3_3_1_2_0_2.s_0 = r_2_0_0_1_3_3_1_2_0_2_0;\n }\n {\n string memory r_2_0_0_1_3_3_1_2_0_2_1 = unicode\"Moo é🚀o🚀o\";\n r_2_0_0_1_3_3_1_2_0_2.s_1 = r_2_0_0_1_3_3_1_2_0_2_1;\n }\n r_2_0_0_1_3_3_1_2_0[2] = r_2_0_0_1_3_3_1_2_0_2;\n }\n r_2_0_0_1_3_3_1_2[0] = r_2_0_0_1_3_3_1_2_0;\n }\n {\n S_5758d412[3] memory r_2_0_0_1_3_3_1_2_1;\n {\n S_5758d412 memory r_2_0_0_1_3_3_1_2_1_0;\n {\n S_54896afd memory r_2_0_0_1_3_3_1_2_1_0_0;\n {\n uint80 r_2_0_0_1_3_3_1_2_1_0_0_0 = 515288475754605993331757;\n r_2_0_0_1_3_3_1_2_1_0_0.s_0 = r_2_0_0_1_3_3_1_2_1_0_0_0;\n }\n r_2_0_0_1_3_3_1_2_1_0.s_0 = r_2_0_0_1_3_3_1_2_1_0_0;\n }\n {\n string memory r_2_0_0_1_3_3_1_2_1_0_1 = unicode\"Moo é🚀oMoo ééoMM \";\n r_2_0_0_1_3_3_1_2_1_0.s_1 = r_2_0_0_1_3_3_1_2_1_0_1;\n }\n r_2_0_0_1_3_3_1_2_1[0] = r_2_0_0_1_3_3_1_2_1_0;\n }\n {\n S_5758d412 memory r_2_0_0_1_3_3_1_2_1_1;\n {\n S_54896afd memory r_2_0_0_1_3_3_1_2_1_1_0;\n {\n uint80 r_2_0_0_1_3_3_1_2_1_1_0_0 = 731268341141024115374595;\n r_2_0_0_1_3_3_1_2_1_1_0.s_0 = r_2_0_0_1_3_3_1_2_1_1_0_0;\n }\n r_2_0_0_1_3_3_1_2_1_1.s_0 = r_2_0_0_1_3_3_1_2_1_1_0;\n }\n {\n string memory r_2_0_0_1_3_3_1_2_1_1_1 = unicode\"Moo é🚀ééMo🚀 🚀o 🚀ooo🚀o o🚀🚀MM 🚀o🚀 ooéo🚀🚀éMooooéoo🚀Mo🚀🚀 🚀🚀🚀oMoo🚀é\";\n r_2_0_0_1_3_3_1_2_1_1.s_1 = r_2_0_0_1_3_3_1_2_1_1_1;\n }\n r_2_0_0_1_3_3_1_2_1[1] = r_2_0_0_1_3_3_1_2_1_1;\n }\n {\n S_5758d412 memory r_2_0_0_1_3_3_1_2_1_2;\n {\n S_54896afd memory r_2_0_0_1_3_3_1_2_1_2_0;\n {\n uint80 r_2_0_0_1_3_3_1_2_1_2_0_0 = 398545296696103799871368;\n r_2_0_0_1_3_3_1_2_1_2_0.s_0 = r_2_0_0_1_3_3_1_2_1_2_0_0;\n }\n r_2_0_0_1_3_3_1_2_1_2.s_0 = r_2_0_0_1_3_3_1_2_1_2_0;\n }\n {\n string memory r_2_0_0_1_3_3_1_2_1_2_1 = unicode\"Moo é🚀Mo🚀 oo M oé🚀o \";\n r_2_0_0_1_3_3_1_2_1_2.s_1 = r_2_0_0_1_3_3_1_2_1_2_1;\n }\n r_2_0_0_1_3_3_1_2_1[2] = r_2_0_0_1_3_3_1_2_1_2;\n }\n r_2_0_0_1_3_3_1_2[1] = r_2_0_0_1_3_3_1_2_1;\n }\n {\n S_5758d412[3] memory r_2_0_0_1_3_3_1_2_2;\n {\n S_5758d412 memory r_2_0_0_1_3_3_1_2_2_0;\n {\n S_54896afd memory r_2_0_0_1_3_3_1_2_2_0_0;\n {\n uint80 r_2_0_0_1_3_3_1_2_2_0_0_0 = 881339986468801126955473;\n r_2_0_0_1_3_3_1_2_2_0_0.s_0 = r_2_0_0_1_3_3_1_2_2_0_0_0;\n }\n r_2_0_0_1_3_3_1_2_2_0.s_0 = r_2_0_0_1_3_3_1_2_2_0_0;\n }\n {\n string memory r_2_0_0_1_3_3_1_2_2_0_1 = unicode\"Moo é🚀Moé🚀éo M éMM🚀ooMM🚀 oooM🚀oMooo🚀🚀éMMM🚀🚀 o🚀MMoM🚀 Mo\";\n r_2_0_0_1_3_3_1_2_2_0.s_1 = r_2_0_0_1_3_3_1_2_2_0_1;\n }\n r_2_0_0_1_3_3_1_2_2[0] = r_2_0_0_1_3_3_1_2_2_0;\n }\n {\n S_5758d412 memory r_2_0_0_1_3_3_1_2_2_1;\n {\n S_54896afd memory r_2_0_0_1_3_3_1_2_2_1_0;\n {\n uint80 r_2_0_0_1_3_3_1_2_2_1_0_0 = 655244207891843442155449;\n r_2_0_0_1_3_3_1_2_2_1_0.s_0 = r_2_0_0_1_3_3_1_2_2_1_0_0;\n }\n r_2_0_0_1_3_3_1_2_2_1.s_0 = r_2_0_0_1_3_3_1_2_2_1_0;\n }\n {\n string memory r_2_0_0_1_3_3_1_2_2_1_1 = unicode\"Moo é🚀🚀oooéoo🚀é🚀MMMoo 🚀é🚀ééoéé éMé o éMMMooo🚀oooMMooééMo é o🚀\";\n r_2_0_0_1_3_3_1_2_2_1.s_1 = r_2_0_0_1_3_3_1_2_2_1_1;\n }\n r_2_0_0_1_3_3_1_2_2[1] = r_2_0_0_1_3_3_1_2_2_1;\n }\n {\n S_5758d412 memory r_2_0_0_1_3_3_1_2_2_2;\n {\n S_54896afd memory r_2_0_0_1_3_3_1_2_2_2_0;\n {\n uint80 r_2_0_0_1_3_3_1_2_2_2_0_0 = 160788531032816849381164;\n r_2_0_0_1_3_3_1_2_2_2_0.s_0 = r_2_0_0_1_3_3_1_2_2_2_0_0;\n }\n r_2_0_0_1_3_3_1_2_2_2.s_0 = r_2_0_0_1_3_3_1_2_2_2_0;\n }\n {\n string memory r_2_0_0_1_3_3_1_2_2_2_1 = unicode\"Moo é🚀ooM🚀oM o oéoé🚀oéo🚀M 🚀o🚀🚀🚀é🚀 éM oéo M M🚀oé 🚀🚀🚀Mé🚀 o o\";\n r_2_0_0_1_3_3_1_2_2_2.s_1 = r_2_0_0_1_3_3_1_2_2_2_1;\n }\n r_2_0_0_1_3_3_1_2_2[2] = r_2_0_0_1_3_3_1_2_2_2;\n }\n r_2_0_0_1_3_3_1_2[2] = r_2_0_0_1_3_3_1_2_2;\n }\n {\n S_5758d412[3] memory r_2_0_0_1_3_3_1_2_3;\n {\n S_5758d412 memory r_2_0_0_1_3_3_1_2_3_0;\n {\n S_54896afd memory r_2_0_0_1_3_3_1_2_3_0_0;\n {\n uint80 r_2_0_0_1_3_3_1_2_3_0_0_0 = 62361039763499843442233;\n r_2_0_0_1_3_3_1_2_3_0_0.s_0 = r_2_0_0_1_3_3_1_2_3_0_0_0;\n }\n r_2_0_0_1_3_3_1_2_3_0.s_0 = r_2_0_0_1_3_3_1_2_3_0_0;\n }\n {\n string memory r_2_0_0_1_3_3_1_2_3_0_1 = unicode\"Moo é🚀o🚀🚀🚀MoéooMéééééé é🚀 o🚀oo 🚀éM🚀éoM M o\";\n r_2_0_0_1_3_3_1_2_3_0.s_1 = r_2_0_0_1_3_3_1_2_3_0_1;\n }\n r_2_0_0_1_3_3_1_2_3[0] = r_2_0_0_1_3_3_1_2_3_0;\n }\n {\n S_5758d412 memory r_2_0_0_1_3_3_1_2_3_1;\n {\n S_54896afd memory r_2_0_0_1_3_3_1_2_3_1_0;\n {\n uint80 r_2_0_0_1_3_3_1_2_3_1_0_0 = 959406524645207881940115;\n r_2_0_0_1_3_3_1_2_3_1_0.s_0 = r_2_0_0_1_3_3_1_2_3_1_0_0;\n }\n r_2_0_0_1_3_3_1_2_3_1.s_0 = r_2_0_0_1_3_3_1_2_3_1_0;\n }\n {\n string memory r_2_0_0_1_3_3_1_2_3_1_1 = unicode\"Moo é🚀o éoM 🚀 éMoMMo🚀MoMM🚀o\";\n r_2_0_0_1_3_3_1_2_3_1.s_1 = r_2_0_0_1_3_3_1_2_3_1_1;\n }\n r_2_0_0_1_3_3_1_2_3[1] = r_2_0_0_1_3_3_1_2_3_1;\n }\n {\n S_5758d412 memory r_2_0_0_1_3_3_1_2_3_2;\n {\n S_54896afd memory r_2_0_0_1_3_3_1_2_3_2_0;\n {\n uint80 r_2_0_0_1_3_3_1_2_3_2_0_0 = 146539970214223232055320;\n r_2_0_0_1_3_3_1_2_3_2_0.s_0 = r_2_0_0_1_3_3_1_2_3_2_0_0;\n }\n r_2_0_0_1_3_3_1_2_3_2.s_0 = r_2_0_0_1_3_3_1_2_3_2_0;\n }\n {\n string memory r_2_0_0_1_3_3_1_2_3_2_1 = unicode\"Moo é🚀🚀oéooMo🚀 🚀 Mé🚀ooMoooo🚀🚀MéooéoéoMooooooMooo\";\n r_2_0_0_1_3_3_1_2_3_2.s_1 = r_2_0_0_1_3_3_1_2_3_2_1;\n }\n r_2_0_0_1_3_3_1_2_3[2] = r_2_0_0_1_3_3_1_2_3_2;\n }\n r_2_0_0_1_3_3_1_2[3] = r_2_0_0_1_3_3_1_2_3;\n }\n r_2_0_0_1_3_3_1.s_2 = r_2_0_0_1_3_3_1_2;\n }\n {\n S_d8e64867[4] memory r_2_0_0_1_3_3_1_3;\n {\n S_d8e64867 memory r_2_0_0_1_3_3_1_3_0;\n {\n bytes31 r_2_0_0_1_3_3_1_3_0_0 = bytes31(0x85d89f6f7782bc2075891a6d05add5f17d67133c2f7dfd884628f5b9135b5f);\n r_2_0_0_1_3_3_1_3_0.s_0 = r_2_0_0_1_3_3_1_3_0_0;\n }\n {\n uint104 r_2_0_0_1_3_3_1_3_0_1 = 8152652264041231856031820014334;\n r_2_0_0_1_3_3_1_3_0.s_1 = r_2_0_0_1_3_3_1_3_0_1;\n }\n r_2_0_0_1_3_3_1_3[0] = r_2_0_0_1_3_3_1_3_0;\n }\n {\n S_d8e64867 memory r_2_0_0_1_3_3_1_3_1;\n {\n bytes31 r_2_0_0_1_3_3_1_3_1_0 = bytes31(0x0fb8607251804ff82b5b152a4bae09bd636adc9ad4063a6d6ca2cab2560537);\n r_2_0_0_1_3_3_1_3_1.s_0 = r_2_0_0_1_3_3_1_3_1_0;\n }\n {\n uint104 r_2_0_0_1_3_3_1_3_1_1 = 16416864780937006238066005305072;\n r_2_0_0_1_3_3_1_3_1.s_1 = r_2_0_0_1_3_3_1_3_1_1;\n }\n r_2_0_0_1_3_3_1_3[1] = r_2_0_0_1_3_3_1_3_1;\n }\n {\n S_d8e64867 memory r_2_0_0_1_3_3_1_3_2;\n {\n bytes31 r_2_0_0_1_3_3_1_3_2_0 = bytes31(0x3ccbe135ae880f89c39361f314bffdf7a5c2aa5a2dedae7c3a6caa34848236);\n r_2_0_0_1_3_3_1_3_2.s_0 = r_2_0_0_1_3_3_1_3_2_0;\n }\n {\n uint104 r_2_0_0_1_3_3_1_3_2_1 = 17480310804968673507446811182722;\n r_2_0_0_1_3_3_1_3_2.s_1 = r_2_0_0_1_3_3_1_3_2_1;\n }\n r_2_0_0_1_3_3_1_3[2] = r_2_0_0_1_3_3_1_3_2;\n }\n {\n S_d8e64867 memory r_2_0_0_1_3_3_1_3_3;\n {\n bytes31 r_2_0_0_1_3_3_1_3_3_0 = bytes31(0xfa0b99564ab5bb7c3cf61146ccf566c56f9a5a7aa6f2c2bda64b15303e1713);\n r_2_0_0_1_3_3_1_3_3.s_0 = r_2_0_0_1_3_3_1_3_3_0;\n }\n {\n uint104 r_2_0_0_1_3_3_1_3_3_1 = 19557527284622991208475854982546;\n r_2_0_0_1_3_3_1_3_3.s_1 = r_2_0_0_1_3_3_1_3_3_1;\n }\n r_2_0_0_1_3_3_1_3[3] = r_2_0_0_1_3_3_1_3_3;\n }\n r_2_0_0_1_3_3_1.s_3 = r_2_0_0_1_3_3_1_3;\n }\n {\n uint48 r_2_0_0_1_3_3_1_4 = 83317973902405;\n r_2_0_0_1_3_3_1.s_4 = r_2_0_0_1_3_3_1_4;\n }\n r_2_0_0_1_3_3.s_1 = r_2_0_0_1_3_3_1;\n }\n r_2_0_0_1_3.s_3 = r_2_0_0_1_3_3;\n }\n r_2_0_0_1.s_3 = r_2_0_0_1_3;\n }\n r_2_0_0.s_1 = r_2_0_0_1;\n }\n {\n string memory r_2_0_0_2 = unicode\"Moo é🚀🚀oooé oM oé🚀o🚀MéMo M🚀ooM🚀o MM\";\n r_2_0_0.s_2 = r_2_0_0_2;\n }\n r_2_0[0] = r_2_0_0;\n }\n {\n S_920026e8 memory r_2_0_1;\n {\n int32 r_2_0_1_0 = 700510769;\n r_2_0_1.s_0 = r_2_0_1_0;\n }\n {\n S_c8d7c908 memory r_2_0_1_1;\n {\n uint56 r_2_0_1_1_0 = 42507258221890211;\n r_2_0_1_1.s_0 = r_2_0_1_1_0;\n }\n {\n bytes27 r_2_0_1_1_1 = bytes27(0x00ccca1671adbde8393212111aa00d5c0e5d7b5453b136a72d0b04);\n r_2_0_1_1.s_1 = r_2_0_1_1_1;\n }\n {\n bool r_2_0_1_1_2 = false;\n r_2_0_1_1.s_2 = r_2_0_1_1_2;\n }\n {\n S_733a0ce7 memory r_2_0_1_1_3;\n {\n address r_2_0_1_1_3_0 = 0xA0cf4B6227A6214dCDFAD8F3b9a2b2159342c967;\n r_2_0_1_1_3.s_0 = r_2_0_1_1_3_0;\n }\n {\n bool r_2_0_1_1_3_1 = true;\n r_2_0_1_1_3.s_1 = r_2_0_1_1_3_1;\n }\n {\n S_25e98821 memory r_2_0_1_1_3_2;\n {\n bool r_2_0_1_1_3_2_0 = true;\n r_2_0_1_1_3_2.s_0 = r_2_0_1_1_3_2_0;\n }\n {\n bool r_2_0_1_1_3_2_1 = true;\n r_2_0_1_1_3_2.s_1 = r_2_0_1_1_3_2_1;\n }\n r_2_0_1_1_3.s_2 = r_2_0_1_1_3_2;\n }\n {\n S_a55eb82d memory r_2_0_1_1_3_3;\n {\n bytes31 r_2_0_1_1_3_3_0 = bytes31(0xba32bcbcc576d6084f8da91ef59fabc42d2c32870f8f89e74d76849b23de8e);\n r_2_0_1_1_3_3.s_0 = r_2_0_1_1_3_3_0;\n }\n {\n S_770db331 memory r_2_0_1_1_3_3_1;\n {\n string memory r_2_0_1_1_3_3_1_0 = unicode\"Moo é🚀🚀o🚀 MMéo Mooo🚀éo 🚀 é oéo🚀éMéMéMéM🚀Mooo 🚀o\";\n r_2_0_1_1_3_3_1.s_0 = r_2_0_1_1_3_3_1_0;\n }\n {\n bytes17 r_2_0_1_1_3_3_1_1 = bytes17(0xe64be12210d44d8c9af2b28b479fdda6e7);\n r_2_0_1_1_3_3_1.s_1 = r_2_0_1_1_3_3_1_1;\n }\n {\n S_5758d412[3][] memory r_2_0_1_1_3_3_1_2 = new S_5758d412[3][](1);\n {\n S_5758d412[3] memory r_2_0_1_1_3_3_1_2_0;\n {\n S_5758d412 memory r_2_0_1_1_3_3_1_2_0_0;\n {\n S_54896afd memory r_2_0_1_1_3_3_1_2_0_0_0;\n {\n uint80 r_2_0_1_1_3_3_1_2_0_0_0_0 = 998904477997770689783828;\n r_2_0_1_1_3_3_1_2_0_0_0.s_0 = r_2_0_1_1_3_3_1_2_0_0_0_0;\n }\n r_2_0_1_1_3_3_1_2_0_0.s_0 = r_2_0_1_1_3_3_1_2_0_0_0;\n }\n {\n string memory r_2_0_1_1_3_3_1_2_0_0_1 = unicode\"Moo é🚀ooo éoMo o 🚀éMo🚀M🚀oMoé ooéo🚀éMé\";\n r_2_0_1_1_3_3_1_2_0_0.s_1 = r_2_0_1_1_3_3_1_2_0_0_1;\n }\n r_2_0_1_1_3_3_1_2_0[0] = r_2_0_1_1_3_3_1_2_0_0;\n }\n {\n S_5758d412 memory r_2_0_1_1_3_3_1_2_0_1;\n {\n S_54896afd memory r_2_0_1_1_3_3_1_2_0_1_0;\n {\n uint80 r_2_0_1_1_3_3_1_2_0_1_0_0 = 672234829220922730895350;\n r_2_0_1_1_3_3_1_2_0_1_0.s_0 = r_2_0_1_1_3_3_1_2_0_1_0_0;\n }\n r_2_0_1_1_3_3_1_2_0_1.s_0 = r_2_0_1_1_3_3_1_2_0_1_0;\n }\n {\n string memory r_2_0_1_1_3_3_1_2_0_1_1 = unicode\"Moo é🚀oooéo🚀ooé 🚀o🚀M🚀o🚀o oMoMéé🚀éooéoM oM🚀MooéM🚀o é🚀éMo🚀Mo éo\";\n r_2_0_1_1_3_3_1_2_0_1.s_1 = r_2_0_1_1_3_3_1_2_0_1_1;\n }\n r_2_0_1_1_3_3_1_2_0[1] = r_2_0_1_1_3_3_1_2_0_1;\n }\n {\n S_5758d412 memory r_2_0_1_1_3_3_1_2_0_2;\n {\n S_54896afd memory r_2_0_1_1_3_3_1_2_0_2_0;\n {\n uint80 r_2_0_1_1_3_3_1_2_0_2_0_0 = 565572148567774672239845;\n r_2_0_1_1_3_3_1_2_0_2_0.s_0 = r_2_0_1_1_3_3_1_2_0_2_0_0;\n }\n r_2_0_1_1_3_3_1_2_0_2.s_0 = r_2_0_1_1_3_3_1_2_0_2_0;\n }\n {\n string memory r_2_0_1_1_3_3_1_2_0_2_1 = unicode\"Moo é🚀éo🚀ooMooé oooM ooMMoéMéMé oMM MMMMéoMoMéoMo\";\n r_2_0_1_1_3_3_1_2_0_2.s_1 = r_2_0_1_1_3_3_1_2_0_2_1;\n }\n r_2_0_1_1_3_3_1_2_0[2] = r_2_0_1_1_3_3_1_2_0_2;\n }\n r_2_0_1_1_3_3_1_2[0] = r_2_0_1_1_3_3_1_2_0;\n }\n r_2_0_1_1_3_3_1.s_2 = r_2_0_1_1_3_3_1_2;\n }\n {\n S_d8e64867[4] memory r_2_0_1_1_3_3_1_3;\n {\n S_d8e64867 memory r_2_0_1_1_3_3_1_3_0;\n {\n bytes31 r_2_0_1_1_3_3_1_3_0_0 = bytes31(0xdf5e535bdb2251e7b882f04e2c196d209e69bf0727fbcafe195e4536825a1b);\n r_2_0_1_1_3_3_1_3_0.s_0 = r_2_0_1_1_3_3_1_3_0_0;\n }\n {\n uint104 r_2_0_1_1_3_3_1_3_0_1 = 6878548423508897219270706061599;\n r_2_0_1_1_3_3_1_3_0.s_1 = r_2_0_1_1_3_3_1_3_0_1;\n }\n r_2_0_1_1_3_3_1_3[0] = r_2_0_1_1_3_3_1_3_0;\n }\n {\n S_d8e64867 memory r_2_0_1_1_3_3_1_3_1;\n {\n bytes31 r_2_0_1_1_3_3_1_3_1_0 = bytes31(0x221da0d5340ce979deba370153b25c5ad15c51438f37375ab06c759b7a9f48);\n r_2_0_1_1_3_3_1_3_1.s_0 = r_2_0_1_1_3_3_1_3_1_0;\n }\n {\n uint104 r_2_0_1_1_3_3_1_3_1_1 = 15516337744500600307057943997971;\n r_2_0_1_1_3_3_1_3_1.s_1 = r_2_0_1_1_3_3_1_3_1_1;\n }\n r_2_0_1_1_3_3_1_3[1] = r_2_0_1_1_3_3_1_3_1;\n }\n {\n S_d8e64867 memory r_2_0_1_1_3_3_1_3_2;\n {\n bytes31 r_2_0_1_1_3_3_1_3_2_0 = bytes31(0x814565cb98266cee7971f06826107017acb8ea548cde76f1a84d2ab364ad66);\n r_2_0_1_1_3_3_1_3_2.s_0 = r_2_0_1_1_3_3_1_3_2_0;\n }\n {\n uint104 r_2_0_1_1_3_3_1_3_2_1 = 9082912372448664233971398161464;\n r_2_0_1_1_3_3_1_3_2.s_1 = r_2_0_1_1_3_3_1_3_2_1;\n }\n r_2_0_1_1_3_3_1_3[2] = r_2_0_1_1_3_3_1_3_2;\n }\n {\n S_d8e64867 memory r_2_0_1_1_3_3_1_3_3;\n {\n bytes31 r_2_0_1_1_3_3_1_3_3_0 = bytes31(0x57119d2a41f20ade5aa366907021ca01c8dabdc944aa24f0a17f237bbc063d);\n r_2_0_1_1_3_3_1_3_3.s_0 = r_2_0_1_1_3_3_1_3_3_0;\n }\n {\n uint104 r_2_0_1_1_3_3_1_3_3_1 = 12403548110132185946652650413082;\n r_2_0_1_1_3_3_1_3_3.s_1 = r_2_0_1_1_3_3_1_3_3_1;\n }\n r_2_0_1_1_3_3_1_3[3] = r_2_0_1_1_3_3_1_3_3;\n }\n r_2_0_1_1_3_3_1.s_3 = r_2_0_1_1_3_3_1_3;\n }\n {\n uint48 r_2_0_1_1_3_3_1_4 = 6402288773077;\n r_2_0_1_1_3_3_1.s_4 = r_2_0_1_1_3_3_1_4;\n }\n r_2_0_1_1_3_3.s_1 = r_2_0_1_1_3_3_1;\n }\n r_2_0_1_1_3.s_3 = r_2_0_1_1_3_3;\n }\n r_2_0_1_1.s_3 = r_2_0_1_1_3;\n }\n r_2_0_1.s_1 = r_2_0_1_1;\n }\n {\n string memory r_2_0_1_2 = unicode\"Moo é🚀🚀o🚀🚀ooM🚀oo🚀éé🚀🚀oéoM 🚀Mo🚀🚀🚀🚀🚀o\";\n r_2_0_1.s_2 = r_2_0_1_2;\n }\n r_2_0[1] = r_2_0_1;\n }\n {\n S_920026e8 memory r_2_0_2;\n {\n int32 r_2_0_2_0 = 379366848;\n r_2_0_2.s_0 = r_2_0_2_0;\n }\n {\n S_c8d7c908 memory r_2_0_2_1;\n {\n uint56 r_2_0_2_1_0 = 4777727319079755;\n r_2_0_2_1.s_0 = r_2_0_2_1_0;\n }\n {\n bytes27 r_2_0_2_1_1 = bytes27(0x8f000774670384e84ff808431f60951061811e1da8808f4b881570);\n r_2_0_2_1.s_1 = r_2_0_2_1_1;\n }\n {\n bool r_2_0_2_1_2 = true;\n r_2_0_2_1.s_2 = r_2_0_2_1_2;\n }\n {\n S_733a0ce7 memory r_2_0_2_1_3;\n {\n address r_2_0_2_1_3_0 = 0x9B867Cfd32926770310F8dc48F2a5761F8CeDb0B;\n r_2_0_2_1_3.s_0 = r_2_0_2_1_3_0;\n }\n {\n bool r_2_0_2_1_3_1 = true;\n r_2_0_2_1_3.s_1 = r_2_0_2_1_3_1;\n }\n {\n S_25e98821 memory r_2_0_2_1_3_2;\n {\n bool r_2_0_2_1_3_2_0 = true;\n r_2_0_2_1_3_2.s_0 = r_2_0_2_1_3_2_0;\n }\n {\n bool r_2_0_2_1_3_2_1 = true;\n r_2_0_2_1_3_2.s_1 = r_2_0_2_1_3_2_1;\n }\n r_2_0_2_1_3.s_2 = r_2_0_2_1_3_2;\n }\n {\n S_a55eb82d memory r_2_0_2_1_3_3;\n {\n bytes31 r_2_0_2_1_3_3_0 = bytes31(0x46011da7fb6d10b847738342476d67cdafa19c63bef70301d8e60a8212c84c);\n r_2_0_2_1_3_3.s_0 = r_2_0_2_1_3_3_0;\n }\n {\n S_770db331 memory r_2_0_2_1_3_3_1;\n {\n string memory r_2_0_2_1_3_3_1_0 = unicode\"Moo é🚀🚀🚀o🚀🚀oé MM🚀 éoMoM🚀🚀éooo🚀o🚀oo🚀oM🚀éoé oMMM éooé🚀éo🚀\";\n r_2_0_2_1_3_3_1.s_0 = r_2_0_2_1_3_3_1_0;\n }\n {\n bytes17 r_2_0_2_1_3_3_1_1 = bytes17(0xfdfac1c8007af04108c1865d6c50fa1249);\n r_2_0_2_1_3_3_1.s_1 = r_2_0_2_1_3_3_1_1;\n }\n {\n S_5758d412[3][] memory r_2_0_2_1_3_3_1_2 = new S_5758d412[3][](1);\n {\n S_5758d412[3] memory r_2_0_2_1_3_3_1_2_0;\n {\n S_5758d412 memory r_2_0_2_1_3_3_1_2_0_0;\n {\n S_54896afd memory r_2_0_2_1_3_3_1_2_0_0_0;\n {\n uint80 r_2_0_2_1_3_3_1_2_0_0_0_0 = 57362128525397904213373;\n r_2_0_2_1_3_3_1_2_0_0_0.s_0 = r_2_0_2_1_3_3_1_2_0_0_0_0;\n }\n r_2_0_2_1_3_3_1_2_0_0.s_0 = r_2_0_2_1_3_3_1_2_0_0_0;\n }\n {\n string memory r_2_0_2_1_3_3_1_2_0_0_1 = unicode\"Moo é🚀éo🚀 éoéMMMéo é ééM🚀🚀🚀ooé🚀Mo🚀🚀MéMé🚀Mo oéMéo MMooo\";\n r_2_0_2_1_3_3_1_2_0_0.s_1 = r_2_0_2_1_3_3_1_2_0_0_1;\n }\n r_2_0_2_1_3_3_1_2_0[0] = r_2_0_2_1_3_3_1_2_0_0;\n }\n {\n S_5758d412 memory r_2_0_2_1_3_3_1_2_0_1;\n {\n S_54896afd memory r_2_0_2_1_3_3_1_2_0_1_0;\n {\n uint80 r_2_0_2_1_3_3_1_2_0_1_0_0 = 892154695378074136422085;\n r_2_0_2_1_3_3_1_2_0_1_0.s_0 = r_2_0_2_1_3_3_1_2_0_1_0_0;\n }\n r_2_0_2_1_3_3_1_2_0_1.s_0 = r_2_0_2_1_3_3_1_2_0_1_0;\n }\n {\n string memory r_2_0_2_1_3_3_1_2_0_1_1 = unicode\"Moo é🚀ooM 🚀éoMo oo éMMéMoéoo🚀o 🚀\";\n r_2_0_2_1_3_3_1_2_0_1.s_1 = r_2_0_2_1_3_3_1_2_0_1_1;\n }\n r_2_0_2_1_3_3_1_2_0[1] = r_2_0_2_1_3_3_1_2_0_1;\n }\n {\n S_5758d412 memory r_2_0_2_1_3_3_1_2_0_2;\n {\n S_54896afd memory r_2_0_2_1_3_3_1_2_0_2_0;\n {\n uint80 r_2_0_2_1_3_3_1_2_0_2_0_0 = 901879116585764694543963;\n r_2_0_2_1_3_3_1_2_0_2_0.s_0 = r_2_0_2_1_3_3_1_2_0_2_0_0;\n }\n r_2_0_2_1_3_3_1_2_0_2.s_0 = r_2_0_2_1_3_3_1_2_0_2_0;\n }\n {\n string memory r_2_0_2_1_3_3_1_2_0_2_1 = unicode\"Moo é🚀 MM 🚀 oéé🚀é 🚀oé🚀oé é o 🚀o🚀éoo éo🚀 🚀MMM🚀 \";\n r_2_0_2_1_3_3_1_2_0_2.s_1 = r_2_0_2_1_3_3_1_2_0_2_1;\n }\n r_2_0_2_1_3_3_1_2_0[2] = r_2_0_2_1_3_3_1_2_0_2;\n }\n r_2_0_2_1_3_3_1_2[0] = r_2_0_2_1_3_3_1_2_0;\n }\n r_2_0_2_1_3_3_1.s_2 = r_2_0_2_1_3_3_1_2;\n }\n {\n S_d8e64867[4] memory r_2_0_2_1_3_3_1_3;\n {\n S_d8e64867 memory r_2_0_2_1_3_3_1_3_0;\n {\n bytes31 r_2_0_2_1_3_3_1_3_0_0 = bytes31(0x0747c3b1da93154e98dca22db9b30987ed2ed20c0d806647b1288968a3c7d7);\n r_2_0_2_1_3_3_1_3_0.s_0 = r_2_0_2_1_3_3_1_3_0_0;\n }\n {\n uint104 r_2_0_2_1_3_3_1_3_0_1 = 4146567576601627746825362586315;\n r_2_0_2_1_3_3_1_3_0.s_1 = r_2_0_2_1_3_3_1_3_0_1;\n }\n r_2_0_2_1_3_3_1_3[0] = r_2_0_2_1_3_3_1_3_0;\n }\n {\n S_d8e64867 memory r_2_0_2_1_3_3_1_3_1;\n {\n bytes31 r_2_0_2_1_3_3_1_3_1_0 = bytes31(0x5f0f712b08bf9f443e4b1e177842f36510f49100058d3ea926cd25630247a7);\n r_2_0_2_1_3_3_1_3_1.s_0 = r_2_0_2_1_3_3_1_3_1_0;\n }\n {\n uint104 r_2_0_2_1_3_3_1_3_1_1 = 7224863001570592521097169560835;\n r_2_0_2_1_3_3_1_3_1.s_1 = r_2_0_2_1_3_3_1_3_1_1;\n }\n r_2_0_2_1_3_3_1_3[1] = r_2_0_2_1_3_3_1_3_1;\n }\n {\n S_d8e64867 memory r_2_0_2_1_3_3_1_3_2;\n {\n bytes31 r_2_0_2_1_3_3_1_3_2_0 = bytes31(0xa6db2d5c4a63a868f1a217950b0b308cee6bf793a070fe16729c4b62effbe8);\n r_2_0_2_1_3_3_1_3_2.s_0 = r_2_0_2_1_3_3_1_3_2_0;\n }\n {\n uint104 r_2_0_2_1_3_3_1_3_2_1 = 10157693620079683599116916718228;\n r_2_0_2_1_3_3_1_3_2.s_1 = r_2_0_2_1_3_3_1_3_2_1;\n }\n r_2_0_2_1_3_3_1_3[2] = r_2_0_2_1_3_3_1_3_2;\n }\n {\n S_d8e64867 memory r_2_0_2_1_3_3_1_3_3;\n {\n bytes31 r_2_0_2_1_3_3_1_3_3_0 = bytes31(0x68169af8168260dc2ecfb574beac056944f32f2f530a7ea62ed3cd1577ba6e);\n r_2_0_2_1_3_3_1_3_3.s_0 = r_2_0_2_1_3_3_1_3_3_0;\n }\n {\n uint104 r_2_0_2_1_3_3_1_3_3_1 = 18999040883110654313566239821052;\n r_2_0_2_1_3_3_1_3_3.s_1 = r_2_0_2_1_3_3_1_3_3_1;\n }\n r_2_0_2_1_3_3_1_3[3] = r_2_0_2_1_3_3_1_3_3;\n }\n r_2_0_2_1_3_3_1.s_3 = r_2_0_2_1_3_3_1_3;\n }\n {\n uint48 r_2_0_2_1_3_3_1_4 = 23705855955643;\n r_2_0_2_1_3_3_1.s_4 = r_2_0_2_1_3_3_1_4;\n }\n r_2_0_2_1_3_3.s_1 = r_2_0_2_1_3_3_1;\n }\n r_2_0_2_1_3.s_3 = r_2_0_2_1_3_3;\n }\n r_2_0_2_1.s_3 = r_2_0_2_1_3;\n }\n r_2_0_2.s_1 = r_2_0_2_1;\n }\n {\n string memory r_2_0_2_2 = unicode\"Moo é🚀Moo oMéoééooé\";\n r_2_0_2.s_2 = r_2_0_2_2;\n }\n r_2_0[2] = r_2_0_2;\n }\n {\n S_920026e8 memory r_2_0_3;\n {\n int32 r_2_0_3_0 = -602593327;\n r_2_0_3.s_0 = r_2_0_3_0;\n }\n {\n S_c8d7c908 memory r_2_0_3_1;\n {\n uint56 r_2_0_3_1_0 = 68387087619570718;\n r_2_0_3_1.s_0 = r_2_0_3_1_0;\n }\n {\n bytes27 r_2_0_3_1_1 = bytes27(0x19417c16c4099975c42e171f8d5afc0165a795590aa4d4053e105f);\n r_2_0_3_1.s_1 = r_2_0_3_1_1;\n }\n {\n bool r_2_0_3_1_2 = true;\n r_2_0_3_1.s_2 = r_2_0_3_1_2;\n }\n {\n S_733a0ce7 memory r_2_0_3_1_3;\n {\n address r_2_0_3_1_3_0 = 0x453Ae228c89C6ed368617E677a883F251ae61593;\n r_2_0_3_1_3.s_0 = r_2_0_3_1_3_0;\n }\n {\n bool r_2_0_3_1_3_1 = false;\n r_2_0_3_1_3.s_1 = r_2_0_3_1_3_1;\n }\n {\n S_25e98821 memory r_2_0_3_1_3_2;\n {\n bool r_2_0_3_1_3_2_0 = true;\n r_2_0_3_1_3_2.s_0 = r_2_0_3_1_3_2_0;\n }\n {\n bool r_2_0_3_1_3_2_1 = true;\n r_2_0_3_1_3_2.s_1 = r_2_0_3_1_3_2_1;\n }\n r_2_0_3_1_3.s_2 = r_2_0_3_1_3_2;\n }\n {\n S_a55eb82d memory r_2_0_3_1_3_3;\n {\n bytes31 r_2_0_3_1_3_3_0 = bytes31(0x5fcc25a764936dfa632e9515846c730f51dece1ec0f392da926ee942bb273b);\n r_2_0_3_1_3_3.s_0 = r_2_0_3_1_3_3_0;\n }\n {\n S_770db331 memory r_2_0_3_1_3_3_1;\n {\n string memory r_2_0_3_1_3_3_1_0 = unicode\"Moo é🚀oéoM ooééo 🚀🚀 🚀oo 🚀oooo M éo🚀éoo\";\n r_2_0_3_1_3_3_1.s_0 = r_2_0_3_1_3_3_1_0;\n }\n {\n bytes17 r_2_0_3_1_3_3_1_1 = bytes17(0x33152d109b1c0e4be90cd6c417d5c70d17);\n r_2_0_3_1_3_3_1.s_1 = r_2_0_3_1_3_3_1_1;\n }\n {\n S_5758d412[3][] memory r_2_0_3_1_3_3_1_2 = new S_5758d412[3][](1);\n {\n S_5758d412[3] memory r_2_0_3_1_3_3_1_2_0;\n {\n S_5758d412 memory r_2_0_3_1_3_3_1_2_0_0;\n {\n S_54896afd memory r_2_0_3_1_3_3_1_2_0_0_0;\n {\n uint80 r_2_0_3_1_3_3_1_2_0_0_0_0 = 867959008457721706592071;\n r_2_0_3_1_3_3_1_2_0_0_0.s_0 = r_2_0_3_1_3_3_1_2_0_0_0_0;\n }\n r_2_0_3_1_3_3_1_2_0_0.s_0 = r_2_0_3_1_3_3_1_2_0_0_0;\n }\n {\n string memory r_2_0_3_1_3_3_1_2_0_0_1 = unicode\"Moo é🚀oo éé MééMooMo🚀Méo 🚀oooo🚀MMooéoééM o🚀o🚀éo🚀oM\";\n r_2_0_3_1_3_3_1_2_0_0.s_1 = r_2_0_3_1_3_3_1_2_0_0_1;\n }\n r_2_0_3_1_3_3_1_2_0[0] = r_2_0_3_1_3_3_1_2_0_0;\n }\n {\n S_5758d412 memory r_2_0_3_1_3_3_1_2_0_1;\n {\n S_54896afd memory r_2_0_3_1_3_3_1_2_0_1_0;\n {\n uint80 r_2_0_3_1_3_3_1_2_0_1_0_0 = 83607570335716133607005;\n r_2_0_3_1_3_3_1_2_0_1_0.s_0 = r_2_0_3_1_3_3_1_2_0_1_0_0;\n }\n r_2_0_3_1_3_3_1_2_0_1.s_0 = r_2_0_3_1_3_3_1_2_0_1_0;\n }\n {\n string memory r_2_0_3_1_3_3_1_2_0_1_1 = unicode\"Moo é🚀🚀ééMéoMéoo oMM o M éo é M o 🚀 Moo🚀é\";\n r_2_0_3_1_3_3_1_2_0_1.s_1 = r_2_0_3_1_3_3_1_2_0_1_1;\n }\n r_2_0_3_1_3_3_1_2_0[1] = r_2_0_3_1_3_3_1_2_0_1;\n }\n {\n S_5758d412 memory r_2_0_3_1_3_3_1_2_0_2;\n {\n S_54896afd memory r_2_0_3_1_3_3_1_2_0_2_0;\n {\n uint80 r_2_0_3_1_3_3_1_2_0_2_0_0 = 487947877097455589394867;\n r_2_0_3_1_3_3_1_2_0_2_0.s_0 = r_2_0_3_1_3_3_1_2_0_2_0_0;\n }\n r_2_0_3_1_3_3_1_2_0_2.s_0 = r_2_0_3_1_3_3_1_2_0_2_0;\n }\n {\n string memory r_2_0_3_1_3_3_1_2_0_2_1 = unicode\"Moo é🚀ooMoMoo🚀\";\n r_2_0_3_1_3_3_1_2_0_2.s_1 = r_2_0_3_1_3_3_1_2_0_2_1;\n }\n r_2_0_3_1_3_3_1_2_0[2] = r_2_0_3_1_3_3_1_2_0_2;\n }\n r_2_0_3_1_3_3_1_2[0] = r_2_0_3_1_3_3_1_2_0;\n }\n r_2_0_3_1_3_3_1.s_2 = r_2_0_3_1_3_3_1_2;\n }\n {\n S_d8e64867[4] memory r_2_0_3_1_3_3_1_3;\n {\n S_d8e64867 memory r_2_0_3_1_3_3_1_3_0;\n {\n bytes31 r_2_0_3_1_3_3_1_3_0_0 = bytes31(0xc626c1b4c9017d322408531761b91c8d5a563a7ee1caf991a87d491105136d);\n r_2_0_3_1_3_3_1_3_0.s_0 = r_2_0_3_1_3_3_1_3_0_0;\n }\n {\n uint104 r_2_0_3_1_3_3_1_3_0_1 = 16523666341471639949050835668816;\n r_2_0_3_1_3_3_1_3_0.s_1 = r_2_0_3_1_3_3_1_3_0_1;\n }\n r_2_0_3_1_3_3_1_3[0] = r_2_0_3_1_3_3_1_3_0;\n }\n {\n S_d8e64867 memory r_2_0_3_1_3_3_1_3_1;\n {\n bytes31 r_2_0_3_1_3_3_1_3_1_0 = bytes31(0x9f8b3ff1ffdb11b8b7dd7966335f1086ab986d8e074ad0c64a6e9f2a2becac);\n r_2_0_3_1_3_3_1_3_1.s_0 = r_2_0_3_1_3_3_1_3_1_0;\n }\n {\n uint104 r_2_0_3_1_3_3_1_3_1_1 = 18715586166639367550398947210310;\n r_2_0_3_1_3_3_1_3_1.s_1 = r_2_0_3_1_3_3_1_3_1_1;\n }\n r_2_0_3_1_3_3_1_3[1] = r_2_0_3_1_3_3_1_3_1;\n }\n {\n S_d8e64867 memory r_2_0_3_1_3_3_1_3_2;\n {\n bytes31 r_2_0_3_1_3_3_1_3_2_0 = bytes31(0x59681117d865de490b4dc9624d2c8d6dc81eee44ae06a90c9c13dbb800acf1);\n r_2_0_3_1_3_3_1_3_2.s_0 = r_2_0_3_1_3_3_1_3_2_0;\n }\n {\n uint104 r_2_0_3_1_3_3_1_3_2_1 = 11076808997132194427870041008509;\n r_2_0_3_1_3_3_1_3_2.s_1 = r_2_0_3_1_3_3_1_3_2_1;\n }\n r_2_0_3_1_3_3_1_3[2] = r_2_0_3_1_3_3_1_3_2;\n }\n {\n S_d8e64867 memory r_2_0_3_1_3_3_1_3_3;\n {\n bytes31 r_2_0_3_1_3_3_1_3_3_0 = bytes31(0x4054712b301a4f27057b5c125287fdab406a13bbfec45fea29c6f8ca27ca28);\n r_2_0_3_1_3_3_1_3_3.s_0 = r_2_0_3_1_3_3_1_3_3_0;\n }\n {\n uint104 r_2_0_3_1_3_3_1_3_3_1 = 16924362469328952392198222756247;\n r_2_0_3_1_3_3_1_3_3.s_1 = r_2_0_3_1_3_3_1_3_3_1;\n }\n r_2_0_3_1_3_3_1_3[3] = r_2_0_3_1_3_3_1_3_3;\n }\n r_2_0_3_1_3_3_1.s_3 = r_2_0_3_1_3_3_1_3;\n }\n {\n uint48 r_2_0_3_1_3_3_1_4 = 229066645449592;\n r_2_0_3_1_3_3_1.s_4 = r_2_0_3_1_3_3_1_4;\n }\n r_2_0_3_1_3_3.s_1 = r_2_0_3_1_3_3_1;\n }\n r_2_0_3_1_3.s_3 = r_2_0_3_1_3_3;\n }\n r_2_0_3_1.s_3 = r_2_0_3_1_3;\n }\n r_2_0_3.s_1 = r_2_0_3_1;\n }\n {\n string memory r_2_0_3_2 = unicode\"Moo é🚀oooé🚀éé o🚀Moé🚀M ooo🚀MM 🚀é\";\n r_2_0_3.s_2 = r_2_0_3_2;\n }\n r_2_0[3] = r_2_0_3;\n }\n r_2[0] = r_2_0;\n }\n r[2] = r_2;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000020e00000000000000000000000000000000000000000000000000000000000004760000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000f2000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c20000000000000000000000000000000000000000000000000000000000118141600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000e4000000000000000000000000000000000000000000000000000cca7cb4914964c71ef38edd1de0d0fe4505a0d0ae63937d06557cd28350ca1571f3c00000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000027b258fa3988a5e38dbaf403f8727441dad9328600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a025c195eec3482605a36958b210bc1d5437bfbdd949c9515603fba77abbdd55000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000018038d263bc12265c652145b25a26113fcc7e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002008ef7380bb72bd51844a26505a8fd0c7fc4b8e3a6b621190a3645048351c5a6000000000000000000000000000000000000000024a49d9525487915b30428f309e4bb152090d38297f101ae13a44055271fc8fab29f0d3af2e7281571268bfa0000000000000000000000000000000000000000314b4223130b5febae5241185c42276335c2b5dc4a14c14aff1c50b566dc75c7b1a094b3e1e2bb9b6ec638410000000000000000000000000000000000000000752afc5e5746a464420564ac02d6d90b6e348c2a6f2c2b3b68a8d9c0f3a98d9f00d489fe685e610a03cbcb720000000000000000000000000000000000000000b2d0e216711be929d85c6dff290000000000000000000000000000000000000000000000000000b0f8bfbb37f0000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a80f09f9a804df09f9a80c3a96f206ff09f9a804df09f9a80c3a9206f2020c3a9f09f9a80c3a96ff09f9a804df09f9a806ff09f9a806f6f6fc3a96f6f6f4d6fc3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000005e0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000bf0771a5a1c4965a19a30000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006b4d6f6f20c3a9f09f9a806ff09f9a80f09f9a80c3a9f09f9a80f09f9a80206f4df09f9a80f09f9a80c3a9c3a9c3a9c3a9f09f9a80f09f9a806fc3a94d6f4d206f6fc3a9c3a96ff09f9a8020206fc3a9f09f9a80204dc3a96f6f206f6f206f6f6f4d206ff09f9a804dc3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000155ef0db08267a77cae20000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a804dc3a9204d6f4d4d6ff09f9a80c3a96f4d6f4d6f6ff09f9a806f20f09f9a80c3a9c3a9204df09f9a804d6fc3a94d6f4df09f9a804dc3a9f09f9a806f6ff09f9a804d2020000000000000000000000000000000000000000000000000000000000000000000000000000000007d58ab58c3d4e07ad999000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000354d6f6f20c3a9f09f9a8020f09f9a80206f206ff09f9a80f09f9a804dc3a96f4d206fc3a96fc3a96ff09f9a806f4d6f4df09f9a804d00000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000064ec1f550940cdc25d790000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a806f4d6ff09f9a802020f09f9a804d206f6f6f6f6f206ff09f9a806f20c3a9c3a92020c3a94dc3a9c3a96f6fc3a96f6f4d206f6f6f6ff09f9a80f09f9a804d20c3a9206f6f000000000000000000000000000000000000000000000000000000000000000000000000000000002c02dff21523e904d113000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000624d6f6f20c3a9f09f9a806f206f206f206ff09f9a80c3a96ff09f9a804d4d4d4d20f09f9a80f09f9a804df09f9a806f20f09f9a80c3a9f09f9a80c3a96fc3a96fc3a920c3a9204dc3a96ff09f9a804dc3a96f6ff09f9a80f09f9a806f4d4d6f6fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000340bcde360be21435a87000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a80f09f9a8020c3a94d6f4d6f206ff09f9a804d4df09f9a8020c3a9c3a94d6f20c3a96f6f6f4d6f6f6f4d6f6f6fc3a9c3a9f09f9a80f09f9a806f6ff09f9a80c3a9c3a96f20f09f9a80f09f9a8020200000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000b218bf2798c223e3dee10000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000965cc5cf4d6497545e1d0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0e38767130a4cf7ad5b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a804d6f206f6f6f4dc3a96f6f4dc3a9c3a9c3a9f09f9a80f09f9a80f09f9a804d20206f4dc3a9c3a9c3a94d4d6f6fc3a9f09f9a80c3a96fc3a96f204d6f6f6ff09f9a804d206f204d6f6f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000014399b60ab1d1faab80a000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a80c3a9206f6f20f09f9a80f09f9a80f09f9a80c3a96fc3a96f4d4d206f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2d1cf3589359e39b928000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000534d6f6f20c3a9f09f9a80f09f9a8020c3a9f09f9a806ff09f9a806ff09f9a80206f6fc3a94d6f6f204d204d4dc3a9206fc3a94d4d6f4d206f6f20c3a9c3a920f09f9a80c3a9f09f9a80204df09f9a80f09f9a800000000000000000000000000000000000000000000000000000000000000000000000da830f6f2efde7e4a76a000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a8020c3a94d20c3a96fc3a9f09f9a804df09f9a804d204dc3a96f6f6fc3a9f09f9a80204d20c3a96f206f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a80f09f9a806f2020f09f9a80f09f9a80f09f9a80204d206fc3a96f206f6fc3a9c3a9c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a812fd1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000008a00000000000000000000000000000000000000000000000000013cf73188601d92b5b999f8bd52f04f9f8a0369f3e05e13581bcbe71dc3e926aa6cb000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000d13e497f1e5527a3c27834b0ded2b5fd3abeb6e500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a092d5e795f3be6659ea34b2b398b614b9826f2953e5e3d579aa3a4a8afcbddd0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180a4d9191c96565cd2c349f9c8530d0377fb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e018ea9744fff348e9c64f3338bf54fd041553be491bcfe49f0fdbe627414e4f0000000000000000000000000000000000000000dd6d2c2528c369d3a38962fcea7b7d35df8b8c2ac9211017182446b42780c97cbd9f6ebaed41f7c40ee5e62c0000000000000000000000000000000000000000c01fb30784f23cb589a60a0b86d0162622470078e075a86c08146dda6fd059f9ee5b079d4bd6b5b6adb2dfcd0000000000000000000000000000000000000000a32cf9bb8e297ab513cd1d2c9f18f6d5237f961e45ae2b6adada04ed3fdbc633a51c9beaa1816fad92a328d90000000000000000000000000000000000000000dda138fdc238b631d13018e66c0000000000000000000000000000000000000000000000000000197a5b850a89000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a806fc3a94d6f4d206f4df09f9a804d6f20204dc3a96ff09f9a80c3a96f4d6fc3a920c3a9c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000f61550409bcd4a3f1c470000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a80f09f9a80206f6fc3a9c3a96fc3a920204d4d204d20c3a9c3a96f206f20f09f9a8020c3a920f09f9a804d6f206f20c3a96f6f4df09f9a804d4d20f09f9a806fc3a94df09f9a80c3a96f2020204dc3a96f0000000000000000000000000000000000000000000000000000000039c91f8dbdf7a32e8c3a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a806f4d206fc3a920c3a9c3a96f6ff09f9a806fc3a9f09f9a804d6fc3a9c3a96ff09f9a806f6fc3a9c3a96f6f6fc3a9c3a9c3a9206f6fc3a9c3a96f4dc3a9206f20f09f9a8020c3a9c3a96f204d6f4d4d20c3a94d00000000000000000000000000000000000000000000000000a7a32dcfc52b81fb8aa10000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a80c3a94d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000009929016d010501894b1e000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a806f206f4dc3a9c3a94d6f206f6f6f6f6f6f6ff09f9a80f09f9a80204d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074e65ceafd6643fbbe53000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a806f6f6f6f4d4d4dc3a9f09f9a806f6ff09f9a80c3a96f6ff09f9a806f6ff09f9a8020f09f9a80c3a9f09f9a806f000000000000000000000000000000000000000000000000000000000000004151064a80a334221ee8000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a806ff09f9a806fc3a9c3a94d20206ff09f9a8020206f206f6f6fc3a9f09f9a8020c3a96f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a80f09f9a806f6ff09f9a806f6f00000000000000000000000000000000000000000000000000000000000000000000000000003137444f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000003e24a00398e780a43c3be0e2ebe1219c4a9a4a17823b0445eb881d7a0a9dca7ce46b0000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000001f7d10a796a0b01ec3283a0efe4662ce1559ffd300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a018863b8b339012d809b98142942d7057915e6f5b3b625e9c64b9ffd31bb8ac00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001802aea2b820e8dfca5d26a675335944badcf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c07e5de7c2e33b38f32447900ca4420d0e255b08c343517d2504d64581feb2e60000000000000000000000000000000000000000689631c288415225d5768836c26c4f2f5c1814515150ce9b74b2057cdac529c6c73269b96000196d7628df1a00000000000000000000000000000000000000002b22bdb3bc07288b7ff759e33e35fc69846197173e24beb7c054125f739dadc8525e64368dc39e86ea7df9de0000000000000000000000000000000000000000e356b235c1c7235689dcaf44ff42f0058d747f79ab9ea3c6eebccd31062d143c2658ee554a5e991dc87dd26e00000000000000000000000000000000000000002387df007ed2be3683376efed00000000000000000000000000000000000000000000000000000fb65448cd180000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a804d4d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a806f206f6f6f6f4dc3a9c3a9204dc3a94d4d206f6f4d6f20c3a96fc3a94d6fc3a92020f09f9a806f4dc3a94d4d20c3a9204d206f4d6f6f6ff09f9a80c3a9c3a920206f6f6fc3a9c3a94d20000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffa14864a5000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000026e3d9e33d5f2e412af116c31a93b0d27258332e5af002ccc7dc69e661a1cec24493000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000a74d366a1c62ae724e42fd89b72ee014c65c78df00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0cb80725b7c1cad31f47d3ee80c560b81e8a4dd2b295eb79056bf742310fc8b0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180a930afe6e210b3bfcd09beb8346e9bdefa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0f582f681c34198affb98cc050e274ae77f43f9e0addbe1a1938e4623282b3a000000000000000000000000000000000000000013daea11ee82499a8cbcaae4dafb22bdbc137f750cdbc42c8a9f571dd771e9e5738f668c1b7a5a3733b8a33b0000000000000000000000000000000000000000d1ac26dd4622380ed40a53e5703bf36e2756998fdb9e589406842585077db4effd2a919776e6b41303546e1a0000000000000000000000000000000000000000fa184b154898f29a96f2709877c97d5a7d513773d4ff04089a762c02aafdc49bc58717147150315948c3f64000000000000000000000000000000000000000008235ef5112191bb0bf8f4f8e7600000000000000000000000000000000000000000000000000001e481966173800000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a80c3a920c3a94d4d6f6f20c3a96f6f206f20f09f9a806fc3a94d6f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444d6f6f20c3a9f09f9a8020c3a9206f6f6fc3a96f206f6fc3a96f6ff09f9a806fc3a9f09f9a806f6fc3a94d204d4dc3a9206f6f4dc3a9f09f9a806f206f20f09f9a806f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000010e00000000000000000000000000000000000000000000000000000000000001e20000000000000000000000000000000000000000000000000000000005806fdfb000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000d6d2d9c866a5e35332806576af8ec3d590461298d7f8128825a22aba5d48db506b25000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000b696e384d6829658bfb71d4b88bbbf321ff9777300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a018729c2de78d8688c6ce47b17f62183da5d66fcc5037317ce617a5ade2f33b000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000018026b07b89792f6dc10a054ca5f625b67eab00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c0d3dab3151aaf56c3f4d62e2850a08f68bb168a0e2b6f2f239c42afb1a5dc97000000000000000000000000000000000000000056bdfb01a44934810af1010d6047c1dc43c86c201aa67a63dfe1304ce7e5133eebe45c296c6ddb64d08263b900000000000000000000000000000000000000007e4e130416d1e7721fca3e1d7cfd7546ab959bba86a811b06891a91d2650f3576f09a7e1d289b61ff5f1e37700000000000000000000000000000000000000002ffcbdb56f8d3b3c4d431d2db5f158360981592577dcb27ec15e3e3b4b93772c9dcf893cafdbce2ec1832f640000000000000000000000000000000000000000a4f291cc57bf2c44a300162faf0000000000000000000000000000000000000000000000000000c551712f4a3e00000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a804d206f6f6ff09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a806f6fc3a94df09f9a80206fc3a9c3a96f6ff09f9a806f6f6ff09f9a80206f204dc3a9204dc3a92020206f6ff09f9a804d6f204df09f9a804d6ff09f9a80c3a96ff09f9a806f4d6f6f6ff09f9a8020f09f9a804d4d6f6f000000000000000000000000000000000000000000000000000000002c8cbb1d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000ba00000000000000000000000000000000000000000000000000039836a489d487a860b14b2e17b3fd6cd1634596166f9a76cefd3de0b605ab9512b0e000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000096563133d098c6cdb92d8af284ae57e0674159300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a06bf5b4a9ebe952fa7b8f9c4af1cd5a5d36834e99aff65611ac2085e6085bd90000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180bf51bb827ad140cd939d46eeb58884c04300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0c28f97501f7791652fb45bb3d9976991bedac8ddf291eade2581dcc10dcf62000000000000000000000000000000000000000058f13e39e80440ae1edba087264d41991d972b7c188164e117804b6339c4e0347122b0189b8503ef38892b280000000000000000000000000000000000000000ff8bed1c531ae7be339c71f388bd58cef4a779fd62899c2c85e99373c3b7e387394dc1a389e38c9a68866e5b00000000000000000000000000000000000000001e5b69488c6c5e2945d6df5593d8690ec22dfafe6dc7c6ba7e040bbca489b51c01b046eb15613743edd44e6400000000000000000000000000000000000000009a679b189466ac7891ed0a11360000000000000000000000000000000000000000000000000000554353c7409800000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a80c3a94d6f204d6f6f6fc3a94dc3a96ff09f9a804d20c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000a4d371eeda81e42e8dec0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a80f09f9a806f6f6f4df09f9a80c3a92020f09f9a80c3a96f6f6f6f4df09f9a806ff09f9a804d4d6fc3a96f4d4df09f9a806f6fc3a96f4df09f9a80c3a9206f206fc3a96fc3a9204d4d6f6fc3a9f09f9a80204dc3a9000000000000000000000000000000000000000000000000afb9e3a65b68a041d35a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a804df09f9a80c3a94d204d206f20f09f9a80c3a9f09f9a80c3a9c3a9206f6fc3a94d6fc3a9204d4df09f9a804d6ff09f9a806ff09f9a804d4d4df09f9a80f09f9a80204d6f000000000000000000000000000000000000000000000000000000000000000000000000000000004c9b9f8e4aff8719c99c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a8020f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000001df5fc943e0aee527f17000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a806ff09f9a806f6ff09f9a80c3a9206fc3a920c3a9c3a96f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036d9fc42ef7e53491ed6000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a80206f206fc3a9f09f9a806f4d4d4d6ff09f9a80f09f9a8020f09f9a806f4d6fc3a94d6f4d6ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000f015190f7cf2b53556ef000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a806f2020c3a96f20c3a94dc3a9f09f9a806f20204df09f9a806ff09f9a806f4d204d4d6f4d4d206f20c3a96f20c3a96ff09f9a80f09f9a806f4d4d202020f09f9a80f09f9a806f6f4dc3a96f4d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000007f497e270a6c59a5da7f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a804d6f6f6ff09f9a8020c3a96f6f4d6fc3a9f09f9a80c3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e89ab69e1bc53c38a45a000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a806f4df09f9a80f09f9a80c3a96f4d4d4df09f9a80f09f9a806f6f6fc3a96f6f6f4dc3a94d6ff09f9a806f4dc3a94d6fc3a9f09f9a806f4d6ff09f9a802020c3a96ff09f9a8020206f6f6f20f09f9a80c3a96fc3a9f09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048577c29c1441b112051000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a80f09f9a806fc3a9f09f9a804df09f9a806f6fc3a9c3a9c3a94d6f206f6f4dc3a94df09f9a806f6ff09f9a804d6f6f204df09f9a80f09f9a80f09f9a806ff09f9a806f6f20f09f9a806f4d6ff09f9a80c3a9206f204df09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000684d6f6f20c3a9f09f9a806f6f6ff09f9a8020204df09f9a806f4d4dc3a920f09f9a804df09f9a80c3a96ff09f9a806f6f206f6f4d20c3a9f09f9a806f6f6fc3a9c3a920c3a9c3a9c3a96f6fc3a96ff09f9a806ff09f9a806f6fc3a96f20206f206f206ff09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036c1179700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000c8ae59886da1990ce34271c85d1f7ad57d1f3565af13198555b24f5c469c7c8d167000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000052381eb8042518cfcd935a58dec4334c3f97489e00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0b547c7cfcd6b78f66b4eecfdea431273018a3671ef8d68065a8edc201c233b00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001803f68e27ce7b2ad3ef0f90b12fef74c3aa30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200e7ece7ae291cd0458a033985ada4c2fec400224a751c41f6447cf13301a4010000000000000000000000000000000000000000a32be1dc5af912bff887477822255a667a600e5ee772487aa83888580271ad9d46ee529c5a50f6f3acb0b16f0000000000000000000000000000000000000000d9edbf1e32aba56f7b3c8eb6f20db78f003a4145bebf8fbd7fce49fb124592f6c0e551fdc45bb4aa2fd837c900000000000000000000000000000000000000006ab4b4e9a67a62ab296968edde6c94b1caf5cae510639dc473a027026fecb07fee48304a13c1fe99817356cb000000000000000000000000000000000000000046aa6ff0856eab8c4a42c173640000000000000000000000000000000000000000000000000000bc4a0928482300000000000000000000000000000000000000000000000000000000000000494d6f6f20c3a9f09f9a806f6fc3a96f206ff09f9a804dc3a96f4d4dc3a92020f09f9a806fc3a9f09f9a80f09f9a806f20204d2020c3a96f6fc3a94dc3a92020c3a96fc3a9c3a96fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000007200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000008994a150dbcbc6f507070000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a80c3a96f6f6f6f6ff09f9a806fc3a94d4d6f6f202020c3a96f20c3a920c3a9c3a9c3a9c3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000c6194ce5f1ea66e66f5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a802020204d6f6f6f6fc3a96f6fc3a9c3a9f09f9a806ff09f9a806f206f4d20204d6f6ff09f9a804d6f20c3a9c3a96f6f206fc3a96f6f6f6ff09f9a806f6fc3a9f09f9a80206f6f4d2000000000000000000000000000000000000000000000000000000000000000000000000063616de9f1b585c9f23f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a80f09f9a806f4d20f09f9a804d6f6f204d4d4dc3a9206f6f206f6ff09f9a806f6ff09f9a806f4d4dc3a9204d206f6fc3a9c3a96fc3a94d6f20c3a9206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000026f0560e2199a723772d000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a804dc3a9f09f9a806f4df09f9a800000000000000000000000000000000000000000000000000000000000000095b45726de09ffc015b70000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b0924d007b91c9717da000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a80c3a94d6ff09f9a80c3a9c3a96fc3a94dc3a96ff09f9a806ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000703d0b98f807d9e1f8ec0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b10e5a7a94d653915b8f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a806ff09f9a80f09f9a8020f09f9a80f09f9a806f204d6ff09f9a804dc3a9c3a96f4dc3a96f4df09f9a806ff09f9a804dc3a96f6f6f4df09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055ba78c28504bb3e3f22000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a806fc3a9206ff09f9a806f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000006c9ba5ef252941b1543e000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a806f6f4dc3a9f09f9a806f6f6f00000000000000000000000000000000000000000000000000000000000000001ba2e3f78dbd08033d30000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a804dc3a920f09f9a806f4dc3a94df09f9a80f09f9a806f4dc3a96f206f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066b198f7d8b03f5533a3000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a80f09f9a80c3a96fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a806ff09f9a804dc3a96f6fc3a9206f0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8ddd11140000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000481eaeb7d991d41d2e9d46924e4f5913d7830e45246d546111b393349a7e51408075000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000e197af46e9e37c4a6895ca782651da6377e279bf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0a188b35c1d88ceb6ee0784da9e16e8e808c8c736520c4e4bb31de59d598f32000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000018061a2d25a7d1a2179e68e410932c51efb9b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c012dcb1bc894edcec544c35af28d5be0a590a40830edd501c8c715faeb812d90000000000000000000000000000000000000000584ac0305501dd6114c9a744d68d9fbe397650464e7b601019a91d2728b4cadbbcbbe79d21bfeb1f71b5336c00000000000000000000000000000000000000006c82a1c8aa84d7513e59bc7b19cc1e1fdc69738faa5d6621e6570f96ea5455879d84e6aced6eb8f4a98532b80000000000000000000000000000000000000000733c9baf7be298187b324941ceb8b96fd6a9e1bd59acb7c0b76803b3ebc93ddd50715a5c7600ce89852e0ed00000000000000000000000000000000000000000358cda73d04a4471e0d14eccdf00000000000000000000000000000000000000000000000000004e90382b65e600000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a80206f206fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000ca06319d4c567aa92dcd0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029a8c906d873daf6eee5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a806ff09f9a806f20c3a96f4d4d20000000000000000000000000000000000000000000000000000000000000007fd4e78ed9893302405b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80206fc3a96f20c3a9c3a920f09f9a806f6f20000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000e8e06a9363537d9a3817000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a80c3a96f20f09f9a806f4d6fc3a9c3a9206f206f4d6f6f6f6f4df09f9a80c3a9c3a9f09f9a80f09f9a80c3a96f2000000000000000000000000000000000000000000000000000000000000000cb34b438e61c3a41eb6f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a8020f09f9a804d20204d6f6f6fc3a9f09f9a80206f6f204d206f206f6f20f09f9a806f206fc3a9204d000000000000000000000000000000000000000000000000000000000000000000000000d90d7ae6d724115146e9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a80f09f9a804d6f6f20206fc3a9f09f9a806f4d6f20f09f9a804d206f4d4d6f4d6f204dc3a94df09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a80206f6fc3a96ff09f9a80f09f9a806f6f4d0000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000ec000000000000000000000000000000000000000000000000000000000000015e00000000000000000000000000000000000000000000000000000000000001cc0000000000000000000000000000000000000000000000000000000001ad3c4a300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000de000000000000000000000000000000000000000000000000000069e15f8c19b18e8132e5855fcb7e84a8c0cb2d9cd67b7931a9d2c93bf826c2b77b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000a322764125e3a508d77e0ba42c154c12e193bd5e00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0de240c049f7da90a7ecb9156c990f89bdceb476917fd3322998d3bec8e0c5b0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180617345c7fbe4523b00537142e2f8705b9a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c085d89f6f7782bc2075891a6d05add5f17d67133c2f7dfd884628f5b9135b5f000000000000000000000000000000000000000066e6a3e4c99e55af5a4fade2fe0fb8607251804ff82b5b152a4bae09bd636adc9ad4063a6d6ca2cab25605370000000000000000000000000000000000000000cf35c04404a2233b8b48d8e6f03ccbe135ae880f89c39361f314bffdf7a5c2aa5a2dedae7c3a6caa348482360000000000000000000000000000000000000000dca1ee33037191c6b6af62c682fa0b99564ab5bb7c3cf61146ccf566c56f9a5a7aa6f2c2bda64b15303e17130000000000000000000000000000000000000000f6d9c76639a386b4f513294d9200000000000000000000000000000000000000000000000000004bc6fa3ce445000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80204d204df09f9a806f6f6f4d4d4df09f9a80000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000007c00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000d92baee7e5351a4cc12f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a806f4d6f4dc3a96fc3a96f4d6f206fc3a94d6f206f4d206f6f6f6f4d4d6f4dc3a9204d4d206f6f4d4dc3a9c3a9f09f9a806f206f000000000000000000000000000000000000000000000000002a59d3951b229224998e000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a80f09f9a804df09f9a80f09f9a804d4d20c3a9c3a9c3a9206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cc651a4bd544cecc371000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a806ff09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000006d1dd82057764edd0c2d000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a806f4d6f6f20c3a9c3a96f4d4d20000000000000000000000000000000000000000000000000000000000000009ada22de720a2845ba030000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000007b4d6f6f20c3a9f09f9a80c3a9c3a94d6ff09f9a8020f09f9a806f20f09f9a806f6f6ff09f9a806f206ff09f9a80f09f9a804d4d20f09f9a806ff09f9a80206f6fc3a96ff09f9a80f09f9a80c3a94d6f6f6f6fc3a96f6ff09f9a804d6ff09f9a80f09f9a8020f09f9a80f09f9a80f09f9a806f4d6f6ff09f9a80c3a900000000000000000000000000000000000000000000000000000054652f0f31a049dfd7880000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a804d6ff09f9a80206f6f204d206fc3a9f09f9a806f200000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000baa1895199ffb73979d10000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a804d6fc3a9f09f9a80c3a96f204d20c3a94d4df09f9a806f6f4d4df09f9a80206f6f6f4df09f9a806f4d6f6f6ff09f9a80f09f9a80c3a94d4d4df09f9a80f09f9a80206ff09f9a804d4d6f4df09f9a80204d6f00000000000000000000000000000000000000000000000000008ac0dc145507dec21fb9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a80f09f9a806f6f6fc3a96f6ff09f9a80c3a9f09f9a804d4d4d6f6f20f09f9a80c3a9f09f9a80c3a9c3a96fc3a9c3a920c3a94dc3a9206f20c3a94d4d4d6f6f6ff09f9a806f6f6f4d4d6f6fc3a9c3a94d6f20c3a9206ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000220c5d1d9832f031e72c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006d4d6f6f20c3a9f09f9a806f6f4df09f9a806f4d206f206fc3a96fc3a9f09f9a806fc3a96ff09f9a804d20f09f9a806ff09f9a80f09f9a80f09f9a80c3a9f09f9a8020c3a94d206fc3a96f204d204df09f9a806fc3a920f09f9a80f09f9a80f09f9a804dc3a9f09f9a80206f206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000d349946fdf439f5d6390000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a806ff09f9a80f09f9a80f09f9a804d6fc3a96f6f4dc3a9c3a9c3a9c3a9c3a9c3a920c3a9f09f9a80206ff09f9a806f6f20f09f9a80c3a94df09f9a80c3a96f4d204d206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000cb29882ba331e2e1fc930000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a806f20c3a96f4d20f09f9a8020c3a94d6f4d4d6ff09f9a804d6f4d4df09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f07f29cabcc7a9338180000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a80f09f9a806fc3a96f6f4d6ff09f9a8020f09f9a80204dc3a9f09f9a806f6f4d6f6f6f6ff09f9a80f09f9a804dc3a96f6fc3a96fc3a96f4d6f6f6f6f6f6f4d6f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a80f09f9a806f6f6fc3a9206f4d206fc3a9f09f9a806ff09f9a804dc3a94d6f204df09f9a806f6f4df09f9a806f204d4d000000000000000000000000000000000000000000000000000000000000000000000029c0f231000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000006a0000000000000000000000000000000000000000000000000009704204ab10aa300ccca1671adbde8393212111aa00d5c0e5d7b5453b136a72d0b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000a0cf4b6227a6214dcdfad8f3b9a2b2159342c96700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0ba32bcbcc576d6084f8da91ef59fabc42d2c32870f8f89e74d76849b23de8e0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180e64be12210d44d8c9af2b28b479fdda6e70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200df5e535bdb2251e7b882f04e2c196d209e69bf0727fbcafe195e4536825a1b000000000000000000000000000000000000000056d1c9e5ffc1204fad24e1e11f221da0d5340ce979deba370153b25c5ad15c51438f37375ab06c759b7a9f480000000000000000000000000000000000000000c3d7fdc29451b2c656f2396e13814565cb98266cee7971f06826107017acb8ea548cde76f1a84d2ab364ad66000000000000000000000000000000000000000072a479051f3727927fa86f343857119d2a41f20ade5aa366907021ca01c8dabdc944aa24f0a17f237bbc063d00000000000000000000000000000000000000009c8e068608b07f30afa6b69c1a000000000000000000000000000000000000000000000000000005d2a625e7d500000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a80f09f9a806ff09f9a80204d4dc3a96f204d6f6f6ff09f9a80c3a96f20f09f9a8020c3a9206fc3a96ff09f9a80c3a94dc3a94dc3a94dc3a94df09f9a804d6f6f6f20f09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000d386b862cc399a44a8140000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a806f6f6f20c3a96f4d6f20206f20f09f9a80c3a94d6ff09f9a804df09f9a806f4d6fc3a9206f6fc3a96ff09f9a80c3a94dc3a900000000000000000000000000000000000000000000000000008e59ec5123a8911a57f6000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000694d6f6f20c3a9f09f9a806f6f6fc3a96ff09f9a806f6fc3a920f09f9a806ff09f9a804df09f9a806ff09f9a806f206f4d6f4dc3a9c3a9f09f9a80c3a96f6fc3a96f4d206f4df09f9a804d6f6fc3a94df09f9a806f20c3a9f09f9a80c3a94d6ff09f9a804d6f20c3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077c3ba4490b8f4f8bce5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a80c3a96ff09f9a806f6f4d6f6fc3a9206f6f6f4d20206f6f4d4d6fc3a94dc3a94dc3a9206f4d4d20204d4d4d4dc3a96f4d6f4dc3a96f4d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a80f09f9a806ff09f9a80f09f9a806f6f4df09f9a806f6ff09f9a80c3a9c3a9f09f9a80f09f9a806fc3a96f4d20f09f9a804d6ff09f9a80f09f9a80f09f9a80f09f9a80f09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000169cadc0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000006a00000000000000000000000000000000000000000000000000010f95153affb4b8f000774670384e84ff808431f60951061811e1da8808f4b8815700000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000009b867cfd32926770310f8dc48f2a5761f8cedb0b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a046011da7fb6d10b847738342476d67cdafa19c63bef70301d8e60a8212c84c0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180fdfac1c8007af04108c1865d6c50fa124900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200747c3b1da93154e98dca22db9b30987ed2ed20c0d806647b1288968a3c7d700000000000000000000000000000000000000003456484ed978ceda172f61bacb5f0f712b08bf9f443e4b1e177842f36510f49100058d3ea926cd25630247a700000000000000000000000000000000000000005b30ca9a6ea621145980ff6503a6db2d5c4a63a868f1a217950b0b308cee6bf793a070fe16729c4b62effbe800000000000000000000000000000000000000008035473b14a0868e33d4f37a9468169af8168260dc2ecfb574beac056944f32f2f530a7ea62ed3cd1577ba6e0000000000000000000000000000000000000000efcd36468e7972a6b096498cfc0000000000000000000000000000000000000000000000000000158f731f92bb000000000000000000000000000000000000000000000000000000000000006a4d6f6f20c3a9f09f9a80f09f9a80f09f9a806ff09f9a80f09f9a806fc3a9204d4df09f9a8020c3a96f4d6f4df09f9a80f09f9a80c3a96f6f6ff09f9a806ff09f9a806f6ff09f9a806f4df09f9a80c3a96fc3a9206f4d4d4d20c3a96f6fc3a9f09f9a80c3a96ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000c259b72a84463ba457d0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005f4d6f6f20c3a9f09f9a80c3a96ff09f9a802020c3a96fc3a94d4d4dc3a96f20c3a920c3a9c3a94df09f9a80f09f9a80f09f9a806f6fc3a9f09f9a804d6ff09f9a80f09f9a804dc3a94dc3a9f09f9a804d6f206fc3a94dc3a96f204d4d6f6f6f0000000000000000000000000000000000000000000000bcebcd8de032fd2726c5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a806f6f4d20f09f9a80c3a96f4d6f206f6f20c3a94d4dc3a94d6fc3a96f6ff09f9a806f20f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000befaf7021e66ebf84e5b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a80204d4d20f09f9a80206fc3a9c3a9f09f9a80c3a92020f09f9a806fc3a9f09f9a806fc3a920c3a9206f20f09f9a806ff09f9a80c3a96f6f20c3a96ff09f9a8020f09f9a804d4d4df09f9a802020000000000000000000000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a804d6f6f206f4dc3a96fc3a9c3a96f6fc3a90000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc1527d10000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000062000000000000000000000000000000000000000000000000000f2f5b1a0c9bc1e19417c16c4099975c42e171f8d5afc0165a795590aa4d4053e105f000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000453ae228c89c6ed368617e677a883f251ae6159300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a05fcc25a764936dfa632e9515846c730f51dece1ec0f392da926ee942bb273b000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000018033152d109b1c0e4be90cd6c417d5c70d1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0c626c1b4c9017d322408531761b91c8d5a563a7ee1caf991a87d491105136d0000000000000000000000000000000000000000d08ed8722a753c28a6bf848f509f8b3ff1ffdb11b8b7dd7966335f1086ab986d8e074ad0c64a6e9f2a2becac0000000000000000000000000000000000000000ec3952079480b8826826a9344659681117d865de490b4dc9624d2c8d6dc81eee44ae06a90c9c13dbb800acf100000000000000000000000000000000000000008bcf19a6c0e2a5d0863ceae97d4054712b301a4f27057b5c125287fdab406a13bbfec45fea29c6f8ca27ca280000000000000000000000000000000000000000d59d9083b2ede887d6e32bb9970000000000000000000000000000000000000000000000000000d055bc082b78000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a806fc3a96f4d206f6fc3a9c3a96f20f09f9a80f09f9a8020f09f9a806f6f20f09f9a806f6f6f6f204d20c3a96ff09f9a80c3a96f6f0000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000b7cc26f1fc61d16a3747000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a806f6f20c3a9c3a9204dc3a9c3a94d6f6f4d6ff09f9a804dc3a96f2020f09f9a806f6f6f6ff09f9a804d4d6f6fc3a96fc3a9c3a94d206ff09f9a806ff09f9a80c3a96ff09f9a806f4d00000000000000000000000000000000000000000000000000000000000000000000000011b4601ec870f6d8965d0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a80f09f9a80c3a9c3a94dc3a96f4dc3a96f6f206f4d4d206f204d2020c3a96f20c3a9204d206f20f09f9a80204d6f6ff09f9a80c3a90000000000000000000000000000000000000000000000006753b519817bdb1a09b3000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a806f6f4d6f4d6f6ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a806f6f6fc3a9f09f9a80c3a9c3a9206ff09f9a804d6fc3a9f09f9a804d206f6f6ff09f9a804d4d2020f09f9a80c3a90000000000000000" + }, + { + "name": "random-(bytes6,string,(address,int168,uint248,(bytes16,string,(address),(bool,(bool[1],string,address,((string,string[1]),int128,address,address))),string)[],address[2]),string)", + "type": "(bytes6,string,(address,int168,uint248,(bytes16,string,(address),(bool,(bool[1],string,address,((string,string[1]),int128,address,address))),string)[],address[2]),string)", + "value": [ + "0xd6a6d56e8dfe", + "Moo é🚀 ooMéMM ", + [ + "0x5C7DFeDc0A31b52036D502B28E14530Ad4D01CD0", + "17601828751497087310125586715235872856368303052213", + "217240073057417179001824132277089683280053034351984081946948220603723217330", + [ + [ + "0x9833067bd8081d385379cd5c2d97e0ca", + "Moo é🚀o 🚀oéMooooM éMéoo🚀🚀🚀 oMMM 🚀éM o MMoéooM🚀oéo🚀o ééo ", + ["0x9b22AA1B1d5343e4C05F005079303C9D54Bee3D0"], + [ + false, + [ + [false], + "Moo é🚀Méo🚀o🚀oMoéoo🚀🚀o 🚀oMo🚀🚀🚀o🚀M éo🚀M🚀M🚀é é é MM M🚀", + "0x9805206D07D3367000aC154cF193B7b3a67Bd43d", + [ + ["Moo é🚀éoMM🚀ééo éM🚀o🚀ooé 🚀M M", ["Moo é🚀o🚀🚀"]], + "49292834066700206678247183266662468294", + "0x70a0D3513e804574a0a20dfd63C58FEb415D49D4", + "0x3ea4f78F1401bE5bC2fbB80a28FFB2571988f928" + ] + ] + ], + "Moo é🚀🚀 éo🚀 M oMoé" + ], + [ + "0x63fd66a9338ff84774c8bb6bf7fb4534", + "Moo é🚀oo oo🚀🚀🚀M oéMMé oMo🚀oMooo éooMé", + ["0x36C65E7Db1C4d1DE8bdc75cFE15325142a00Bc89"], + [ + false, + [ + [true], + "Moo é🚀", + "0xAD08Bd45C5cdde038892bA8e5B6d083628147B56", + [ + [ + "Moo é🚀oéo🚀 🚀o🚀 ooooooMo🚀oMéoM o🚀🚀 ooé éo", + ["Moo é🚀 M oo"] + ], + "-70880202837806996608293628351541434668", + "0x4C16713382DA1F313255d33E7Ee6528c66AD582b", + "0xCfA3260F781dd6d0b758784fBdd38F1A407B1dB3" + ] + ] + ], + "Moo é🚀éooM 🚀oMéMMo" + ], + [ + "0xe9e7dffb334d12c091b995ac673b7a97", + "Moo é🚀Mo Mé oo MoMéooMoéMé🚀oé🚀o🚀 éoM ooé🚀M", + ["0x625cAFbB258a05240aD8F3A17e76e078b25EdE64"], + [ + true, + [ + [true], + "Moo é🚀ooM", + "0xD9D2691334D3ED2C69DD219D75A8616e8c4C968f", + [ + ["Moo é🚀o🚀oM 🚀o MM🚀oo", ["Moo é🚀éo"]], + "-164302756442392904686524561251483093889", + "0x1CD86029dE60A2e7d2e103B0D4704CD53bB7E300", + "0x182755373337B44856Ec9464c22DF1c1DB5afE3F" + ] + ] + ], + "Moo é🚀MéoMoéM o" + ], + [ + "0xc947748795be8fb4f06d6f2dae7a871e", + "Moo é🚀o Moo🚀 oo ", + ["0x5d06CF92198E46929EcB5Be1fde4b0CFDFd116Cb"], + [ + false, + [ + [true], + "Moo é🚀M 🚀é🚀oo🚀Mo🚀é 🚀Mooooooo", + "0x3414f5756C5c91129E8D4450fDE1b6e509Bb048b", + [ + [ + "Moo é🚀 M🚀oM🚀o ooooMo🚀éM oo🚀MMéMoéé M", + ["Moo é🚀o Moéo🚀ooo🚀ooM"] + ], + "-138793539658939051109607675178891855643", + "0xf89D7cd5057C890cf4668e2CE85048114597F733", + "0xC77Ec3d79296970F4Df2f8eC3D49955e11318982" + ] + ] + ], + "Moo é🚀o🚀MééoooMéooéM éo🚀🚀ooMM🚀o éo🚀oéé M o🚀Mo éé é MoMo oo" + ] + ], + [ + "0xdBBb61b1BcdFA8405CFC8F25c1CA0D55D44eFE68", + "0xeeE5b9b29b211Ec185f70486233Bea87Eb6B02f4" + ] + ], + "Moo é🚀" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd6a6d56e8dfe" + }, + { + "type": "string", + "value": "Moo é🚀 ooMéMM " + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5C7DFeDc0A31b52036D502B28E14530Ad4D01CD0" + }, + { + "type": "number", + "value": "17601828751497087310125586715235872856368303052213" + }, + { + "type": "number", + "value": "217240073057417179001824132277089683280053034351984081946948220603723217330" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x9833067bd8081d385379cd5c2d97e0ca" + }, + { + "type": "string", + "value": "Moo é🚀o 🚀oéMooooM éMéoo🚀🚀🚀 oMMM 🚀éM o MMoéooM🚀oéo🚀o ééo " + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x9b22AA1B1d5343e4C05F005079303C9D54Bee3D0" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Méo🚀o🚀oMoéoo🚀🚀o 🚀oMo🚀🚀🚀o🚀M éo🚀M🚀M🚀é é é MM M🚀" + }, + { + "type": "address", + "value": "0x9805206D07D3367000aC154cF193B7b3a67Bd43d" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoMM🚀ééo éM🚀o🚀ooé 🚀M M" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀🚀" + } + ] + } + ] + }, + { + "type": "number", + "value": "49292834066700206678247183266662468294" + }, + { + "type": "address", + "value": "0x70a0D3513e804574a0a20dfd63C58FEb415D49D4" + }, + { + "type": "address", + "value": "0x3ea4f78F1401bE5bC2fbB80a28FFB2571988f928" + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀 éo🚀 M oMoé" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x63fd66a9338ff84774c8bb6bf7fb4534" + }, + { + "type": "string", + "value": "Moo é🚀oo oo🚀🚀🚀M oéMMé oMo🚀oMooo éooMé" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x36C65E7Db1C4d1DE8bdc75cFE15325142a00Bc89" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "address", + "value": "0xAD08Bd45C5cdde038892bA8e5B6d083628147B56" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéo🚀 🚀o🚀 ooooooMo🚀oMéoM o🚀🚀 ooé éo" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 M oo" + } + ] + } + ] + }, + { + "type": "number", + "value": "-70880202837806996608293628351541434668" + }, + { + "type": "address", + "value": "0x4C16713382DA1F313255d33E7Ee6528c66AD582b" + }, + { + "type": "address", + "value": "0xCfA3260F781dd6d0b758784fBdd38F1A407B1dB3" + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éooM 🚀oMéMMo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xe9e7dffb334d12c091b995ac673b7a97" + }, + { + "type": "string", + "value": "Moo é🚀Mo Mé oo MoMéooMoéMé🚀oé🚀o🚀 éoM ooé🚀M" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x625cAFbB258a05240aD8F3A17e76e078b25EdE64" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooM" + }, + { + "type": "address", + "value": "0xD9D2691334D3ED2C69DD219D75A8616e8c4C968f" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀oM 🚀o MM🚀oo" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀éo" + } + ] + } + ] + }, + { + "type": "number", + "value": "-164302756442392904686524561251483093889" + }, + { + "type": "address", + "value": "0x1CD86029dE60A2e7d2e103B0D4704CD53bB7E300" + }, + { + "type": "address", + "value": "0x182755373337B44856Ec9464c22DF1c1DB5afE3F" + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀MéoMoéM o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc947748795be8fb4f06d6f2dae7a871e" + }, + { + "type": "string", + "value": "Moo é🚀o Moo🚀 oo " + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5d06CF92198E46929EcB5Be1fde4b0CFDFd116Cb" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M 🚀é🚀oo🚀Mo🚀é 🚀Mooooooo" + }, + { + "type": "address", + "value": "0x3414f5756C5c91129E8D4450fDE1b6e509Bb048b" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 M🚀oM🚀o ooooMo🚀éM oo🚀MMéMoéé M" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o Moéo🚀ooo🚀ooM" + } + ] + } + ] + }, + { + "type": "number", + "value": "-138793539658939051109607675178891855643" + }, + { + "type": "address", + "value": "0xf89D7cd5057C890cf4668e2CE85048114597F733" + }, + { + "type": "address", + "value": "0xC77Ec3d79296970F4Df2f8eC3D49955e11318982" + } + ] + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀MééoooMéooéM éo🚀🚀ooMM🚀o éo🚀oéé M o🚀Mo éé é MoMo oo" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xdBBb61b1BcdFA8405CFC8F25c1CA0D55D44eFE68" + }, + { + "type": "address", + "value": "0xeeE5b9b29b211Ec185f70486233Bea87Eb6B02f4" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50611110806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610c6b565b60405180910390f35b6100566109aa565b61005e6109aa565b656b536ab746ff60d11b8152604080518082019091526013815272026b7b79061d4f84fcd401037b7a6e1d4a6a69606d1b6020808301919091528201526100a36109d7565b735c7dfedc0a31b52036d502b28e14530ad4d01cd08152740c0b2d4c95d0bb71f3f0256634cb9b701cd05015b560208201527e7af41a26cf7dc4e0387e7d9d082d66e531cca374370318197dfd2cedc8f9b26040808301919091528051600480825260a08201909252600091816020015b61011c610a0b565b815260200190600190039081610114579050509050610139610a0b565b6f4c19833dec040e9c29bce6ae16cbf06560811b81526040805160808101909152605980825260009190610e6a602083013960208301525061018660408051602081019091526000815290565b739b22aa1b1d5343e4c05f005079303c9d54bee3d0815260408201526101aa610a41565b600081526101b6610a59565b6101be610a87565b60008082529082526040805160a081019091526064808252610f076020830139602083015250739805206d07d3367000ac154cf193b7b3a67bd43d6040820152610206610aa5565b61020e610ad3565b600060405180606001604052806031815260200161107960319139825250610234610ae9565b60408051808201825260138152719adede418753e13f3500dfe13f3501e13f35606f1b602080830191909152908352838101929092529183526f2515745b3e87d3c2e109a8fa176e4ac6838201527370a0d3513e804574a0a20dfd63c58feb415d49d483830152733ea4f78f1401be5bc2fbb80a28ffb2571988f9286060808501919091528481019390935284810193909352908401929092528151808301909252601f82527f4d6f6f20c3a9f09f9a80f09f9a8020c3a96ff09f9a80204d20206f4d6fc3a90090820152608082015281518190839060009061031957610319610e53565b60200260200101819052505061032d610a0b565b6f18ff59aa4ce3fe11dd322edafdfed14d60821b81526040805160608101909152603980825260009190610fa3602083013960208301525061037a60408051602081019091526000815290565b7336c65e7db1c4d1de8bdc75cfe15325142a00bc898152604082015261039e610a41565b600081526103aa610a59565b6103b2610a87565b600181528152604080518082018252600a8152689adede418753e13f3560b71b60208281019190915283015273ad08bd45c5cdde038892ba8e5b6d083628147b56908201526103ff610aa5565b610407610ad3565b6000604051806080016040528060448152602001610ec36044913982525061042d610ae9565b604080518082018252601081526f4d6f6f20c3a9f09f9a8020204d206f6f60801b602080830191909152908352838101929092529183526f355307cf90ec0abe07d3d4d3b79c592b1983820152734c16713382da1f313255d33e7ee6528c66ad582b8383015273cfa3260f781dd6d0b758784fbdd38f1a407b1db36060808501919091528481019390935284810193909352908401929092528151808301909252601c82527f4d6f6f20c3a9f09f9a80c3a96f6f4d2020f09f9a806f4dc3a94d4d6f00000000908201526080820152815181908390600190811061051357610513610e53565b602002602001018190525050610527610a0b565b6fe9e7dffb334d12c091b995ac673b7a9760801b81526040805160808101909152604180825260009190610fdc602083013960208301525061057460408051602081019091526000815290565b73625cafbb258a05240ad8f3a17e76e078b25ede6481526040820152610598610a41565b600181526105a4610a59565b6105ac610a87565b600181528152604080518082018252600d81526c4d6f6f20c3a9f09f9a806f6f4d60981b60208281019190915283015273d9d2691334d3ed2c69dd219d75a8616e8c4c968f908201526105fd610aa5565b610605610ad3565b6040805180820190915260208082527f4d6f6f20c3a9f09f9a806ff09f9a806f4d20f09f9a806f204d4df09f9a806f6f908201528152610643610ae9565b604080518082018252600d81526c4d6f6f20c3a9f09f9a80c3a96f60981b602080830191909152908352838101929092529183526f7b9b8f52d6d97a1d8c1feeaa9c8d8b801983820152731cd86029de60a2e7d2e103b0d4704cd53bb7e3008383015273182755373337b44856ec9464c22df1c1db5afe3f606080850191909152848101939093528481019390935290840192909252815180830190925260158252744d6f6f20c3a9f09f9a804dc3a96f4d6fc3a94d206f60581b908201526080820152815181908390600290811061071e5761071e610e53565b602002602001018190525050610732610a0b565b6f64a3ba43cadf47da7836b796d73d438f60811b815260408051808201909152601781527f4d6f6f20c3a9f09f9a806f204d6f6ff09f9a80206f6f2000000000000000000060208083019190915282015261079860408051602081019091526000815290565b735d06cf92198e46929ecb5be1fde4b0cfdfd116cb815260408201526107bc610a41565b600081526107c8610a59565b6107d0610a87565b60018152815260408051606081019091526031808252600091906110aa6020830139602083015250733414f5756c5c91129e8d4450fde1b6e509bb048b604082015261081a610aa5565b610822610ad3565b6000604051806060016040528060388152602001610f6b60389139825250610848610ae9565b604080518082018252601f81527f4d6f6f20c3a9f09f9a806f204d6fc3a96ff09f9a806f6f6ff09f9a806f6f4d00602080830191909152908352838101929092529183526f686aa9d558cc24e33ba5433d431fc71a198382015273f89d7cd5057c890cf4668e2ce85048114597f7338383015273c77ec3d79296970f4df2f8ec3d49955e11318982606080850191909152848101939093528481019390935290840192909252815160808101909252605c8083526000929161101d90830139608083015250815181908390600390811061092457610924610e53565b602090810291909101015250606082015261093d610b10565b73dbbb61b1bcdfa8405cfc8f25c1ca0d55d44efe68815273eee5b9b29b211ec185f70486233bea87eb6b02f460208083019190915260808301919091526040838101929092528151808301909252600a8252689adede418753e13f3560b71b908201526060820152919050565b6040805160808101825260008152606060208201529081016109ca6109d7565b8152602001606081525090565b6040805160a0810182526000808252602082018190529181019190915260608082015260808101610a06610b10565b905290565b6040805160a0810182526000815260606020820152908101610a3860408051602081019091526000815290565b81526020016109ca5b6040518060400160405280600015158152602001610a065b6040518060800160405280610a6c610a87565b81526060602082018190526000604083015201610a06610aa5565b60405180602001604052806001906020820280368337509192915050565b6040518060800160405280610ab8610ad3565b81526000602082018190526040820181905260609091015290565b604051806040016040528060608152602001610a065b60405180602001604052806001905b6060815260200190600190039081610af85790505090565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b81811015610b5457602081850181015186830182015201610b38565b81811115610b66576000602083870101525b50601f01601f19169290920160200192915050565b6000815160808452805160406080860152610b9960c0860182610b2e565b602092830151868203607f190160a0880152929091508181810160005b6001811015610be1578482038352610bcf828751610b2e565b95840195928401929150600101610bb6565b50828701519450610bf683890186600f0b9052565b60408701519450610c1260408901866001600160a01b03169052565b60608701519450610c2e60608901866001600160a01b03169052565b979650505050505050565b8060005b6002811015610c655781516001600160a01b0316845260209384019390910190600101610c3d565b50505050565b6000602080835265ffffffffffff60d01b845116818401528084015160806040850152610c9b60a0850182610b2e565b90506040850151601f198086840301606087015260018060a01b038083511684528483015160140b8585015260018060f81b036040840151166040850152606083015160c0606086015260c08501815180825260e08701915060e08160051b880101888401935060005b82811015610e135760df1989830301845284516fffffffffffffffffffffffffffffffff1981511683528a81015160a08c850152610d4660a0850182610b2e565b905087604083015151166040850152606082015184820360608601528051151582528c810151905060408d83015280516040830160005b6001811015610d9c57825115158252918f0191908f0190600101610d7d565b5050508c81015160806060840152610db760c0840182610b2e565b60408301518b166080850152606090920151838303603f190160a0850152919050610de28183610b7b565b92505050608082015191508381036080850152610dff8183610b2e565b968c0196958c019593505050600101610d05565b5060808701519850610e28608089018a610c39565b60608c01519850858b82030160808c0152610e43818a610b2e565b9c9b505050505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f20f09f9a806fc3a94d6f6f6f6f4d20c3a94dc3a96f6ff09f9a80f09f9a80f09f9a80206f4d4d4d20f09f9a80c3a94d206f204d4d6fc3a96f6f4df09f9a806fc3a96ff09f9a806f20c3a9c3a96f204d6f6f20c3a9f09f9a806fc3a96ff09f9a8020f09f9a806ff09f9a8020206f6f6f6f6f6f4d6ff09f9a806f4dc3a96f4d206ff09f9a80f09f9a8020206f6fc3a920c3a96f4d6f6f20c3a9f09f9a804dc3a96ff09f9a806ff09f9a806f4d6fc3a96f6ff09f9a80f09f9a806f20f09f9a806f4d6ff09f9a80f09f9a80f09f9a806ff09f9a804d20c3a96ff09f9a804df09f9a804df09f9a80c3a920c3a920c3a9204d4d204df09f9a804d6f6f20c3a9f09f9a80204df09f9a806f4df09f9a806f206f6f6f6f4d6ff09f9a80c3a94d206f6ff09f9a804d4dc3a94d6fc3a9c3a9204d4d6f6f20c3a9f09f9a806f6f206f6ff09f9a80f09f9a80f09f9a804d206fc3a94d4dc3a9206f4d6ff09f9a806f4d6f6f6f20c3a96f6f4dc3a94d6f6f20c3a9f09f9a804d6f204dc3a9206f6f204d6f4dc3a96f6f4d6fc3a94dc3a9f09f9a806fc3a9f09f9a806ff09f9a8020c3a96f4d206f6fc3a9f09f9a804d4d6f6f20c3a9f09f9a806ff09f9a804dc3a9c3a96f6f6f4dc3a96f6fc3a94d20c3a96ff09f9a80f09f9a806f6f4d4df09f9a806f20c3a96ff09f9a806fc3a9c3a920204d206ff09f9a804d6f20c3a9c3a920c3a9204d6f4d6f206f6f4d6f6f20c3a9f09f9a80c3a96f4d4df09f9a80c3a9c3a96f20c3a94df09f9a806ff09f9a806f6fc3a920f09f9a804d204d4d6f6f20c3a9f09f9a804d20f09f9a80c3a9f09f9a806f6ff09f9a804d6ff09f9a80c3a920f09f9a804d6f6f6f6f6f6f6fa26469706673582212206ed3998f843d46e368a45d41a0ec27933b86bd9ff15fa855da79435189ece52764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_c76a12d8 {\n string s_0;\n string[1] s_1;\n }\n\n struct S_5d0bf50e {\n S_c76a12d8 s_0;\n int128 s_1;\n address s_2;\n address s_3;\n }\n\n struct S_c7d1e161 {\n bool[1] s_0;\n string s_1;\n address s_2;\n S_5d0bf50e s_3;\n }\n\n struct S_c4d623b1 {\n bool s_0;\n S_c7d1e161 s_1;\n }\n\n struct S_7b97843e {\n bytes16 s_0;\n string s_1;\n S_421683f8 s_2;\n S_c4d623b1 s_3;\n string s_4;\n }\n\n struct S_ceac7f58 {\n address s_0;\n int168 s_1;\n uint248 s_2;\n S_7b97843e[] s_3;\n address[2] s_4;\n }\n\n struct S_cf485ded {\n bytes6 s_0;\n string s_1;\n S_ceac7f58 s_2;\n string s_3;\n }\n\n function test () public pure returns (S_cf485ded memory) {\n S_cf485ded memory r;\n {\n bytes6 r_0 = bytes6(0xd6a6d56e8dfe);\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀 ooMéMM \";\n r.s_1 = r_1;\n }\n {\n S_ceac7f58 memory r_2;\n {\n address r_2_0 = 0x5C7DFeDc0A31b52036D502B28E14530Ad4D01CD0;\n r_2.s_0 = r_2_0;\n }\n {\n int168 r_2_1 = 17601828751497087310125586715235872856368303052213;\n r_2.s_1 = r_2_1;\n }\n {\n uint248 r_2_2 = 217240073057417179001824132277089683280053034351984081946948220603723217330;\n r_2.s_2 = r_2_2;\n }\n {\n S_7b97843e[] memory r_2_3 = new S_7b97843e[](4);\n {\n S_7b97843e memory r_2_3_0;\n {\n bytes16 r_2_3_0_0 = bytes16(0x9833067bd8081d385379cd5c2d97e0ca);\n r_2_3_0.s_0 = r_2_3_0_0;\n }\n {\n string memory r_2_3_0_1 = unicode\"Moo é🚀o 🚀oéMooooM éMéoo🚀🚀🚀 oMMM 🚀éM o MMoéooM🚀oéo🚀o ééo \";\n r_2_3_0.s_1 = r_2_3_0_1;\n }\n {\n S_421683f8 memory r_2_3_0_2;\n {\n address r_2_3_0_2_0 = 0x9b22AA1B1d5343e4C05F005079303C9D54Bee3D0;\n r_2_3_0_2.s_0 = r_2_3_0_2_0;\n }\n r_2_3_0.s_2 = r_2_3_0_2;\n }\n {\n S_c4d623b1 memory r_2_3_0_3;\n {\n bool r_2_3_0_3_0 = false;\n r_2_3_0_3.s_0 = r_2_3_0_3_0;\n }\n {\n S_c7d1e161 memory r_2_3_0_3_1;\n {\n bool[1] memory r_2_3_0_3_1_0;\n {\n bool r_2_3_0_3_1_0_0 = false;\n r_2_3_0_3_1_0[0] = r_2_3_0_3_1_0_0;\n }\n r_2_3_0_3_1.s_0 = r_2_3_0_3_1_0;\n }\n {\n string memory r_2_3_0_3_1_1 = unicode\"Moo é🚀Méo🚀o🚀oMoéoo🚀🚀o 🚀oMo🚀🚀🚀o🚀M éo🚀M🚀M🚀é é é MM M🚀\";\n r_2_3_0_3_1.s_1 = r_2_3_0_3_1_1;\n }\n {\n address r_2_3_0_3_1_2 = 0x9805206D07D3367000aC154cF193B7b3a67Bd43d;\n r_2_3_0_3_1.s_2 = r_2_3_0_3_1_2;\n }\n {\n S_5d0bf50e memory r_2_3_0_3_1_3;\n {\n S_c76a12d8 memory r_2_3_0_3_1_3_0;\n {\n string memory r_2_3_0_3_1_3_0_0 = unicode\"Moo é🚀éoMM🚀ééo éM🚀o🚀ooé 🚀M M\";\n r_2_3_0_3_1_3_0.s_0 = r_2_3_0_3_1_3_0_0;\n }\n {\n string[1] memory r_2_3_0_3_1_3_0_1;\n {\n string memory r_2_3_0_3_1_3_0_1_0 = unicode\"Moo é🚀o🚀🚀\";\n r_2_3_0_3_1_3_0_1[0] = r_2_3_0_3_1_3_0_1_0;\n }\n r_2_3_0_3_1_3_0.s_1 = r_2_3_0_3_1_3_0_1;\n }\n r_2_3_0_3_1_3.s_0 = r_2_3_0_3_1_3_0;\n }\n {\n int128 r_2_3_0_3_1_3_1 = 49292834066700206678247183266662468294;\n r_2_3_0_3_1_3.s_1 = r_2_3_0_3_1_3_1;\n }\n {\n address r_2_3_0_3_1_3_2 = 0x70a0D3513e804574a0a20dfd63C58FEb415D49D4;\n r_2_3_0_3_1_3.s_2 = r_2_3_0_3_1_3_2;\n }\n {\n address r_2_3_0_3_1_3_3 = 0x3ea4f78F1401bE5bC2fbB80a28FFB2571988f928;\n r_2_3_0_3_1_3.s_3 = r_2_3_0_3_1_3_3;\n }\n r_2_3_0_3_1.s_3 = r_2_3_0_3_1_3;\n }\n r_2_3_0_3.s_1 = r_2_3_0_3_1;\n }\n r_2_3_0.s_3 = r_2_3_0_3;\n }\n {\n string memory r_2_3_0_4 = unicode\"Moo é🚀🚀 éo🚀 M oMoé\";\n r_2_3_0.s_4 = r_2_3_0_4;\n }\n r_2_3[0] = r_2_3_0;\n }\n {\n S_7b97843e memory r_2_3_1;\n {\n bytes16 r_2_3_1_0 = bytes16(0x63fd66a9338ff84774c8bb6bf7fb4534);\n r_2_3_1.s_0 = r_2_3_1_0;\n }\n {\n string memory r_2_3_1_1 = unicode\"Moo é🚀oo oo🚀🚀🚀M oéMMé oMo🚀oMooo éooMé\";\n r_2_3_1.s_1 = r_2_3_1_1;\n }\n {\n S_421683f8 memory r_2_3_1_2;\n {\n address r_2_3_1_2_0 = 0x36C65E7Db1C4d1DE8bdc75cFE15325142a00Bc89;\n r_2_3_1_2.s_0 = r_2_3_1_2_0;\n }\n r_2_3_1.s_2 = r_2_3_1_2;\n }\n {\n S_c4d623b1 memory r_2_3_1_3;\n {\n bool r_2_3_1_3_0 = false;\n r_2_3_1_3.s_0 = r_2_3_1_3_0;\n }\n {\n S_c7d1e161 memory r_2_3_1_3_1;\n {\n bool[1] memory r_2_3_1_3_1_0;\n {\n bool r_2_3_1_3_1_0_0 = true;\n r_2_3_1_3_1_0[0] = r_2_3_1_3_1_0_0;\n }\n r_2_3_1_3_1.s_0 = r_2_3_1_3_1_0;\n }\n {\n string memory r_2_3_1_3_1_1 = unicode\"Moo é🚀\";\n r_2_3_1_3_1.s_1 = r_2_3_1_3_1_1;\n }\n {\n address r_2_3_1_3_1_2 = 0xAD08Bd45C5cdde038892bA8e5B6d083628147B56;\n r_2_3_1_3_1.s_2 = r_2_3_1_3_1_2;\n }\n {\n S_5d0bf50e memory r_2_3_1_3_1_3;\n {\n S_c76a12d8 memory r_2_3_1_3_1_3_0;\n {\n string memory r_2_3_1_3_1_3_0_0 = unicode\"Moo é🚀oéo🚀 🚀o🚀 ooooooMo🚀oMéoM o🚀🚀 ooé éo\";\n r_2_3_1_3_1_3_0.s_0 = r_2_3_1_3_1_3_0_0;\n }\n {\n string[1] memory r_2_3_1_3_1_3_0_1;\n {\n string memory r_2_3_1_3_1_3_0_1_0 = unicode\"Moo é🚀 M oo\";\n r_2_3_1_3_1_3_0_1[0] = r_2_3_1_3_1_3_0_1_0;\n }\n r_2_3_1_3_1_3_0.s_1 = r_2_3_1_3_1_3_0_1;\n }\n r_2_3_1_3_1_3.s_0 = r_2_3_1_3_1_3_0;\n }\n {\n int128 r_2_3_1_3_1_3_1 = -70880202837806996608293628351541434668;\n r_2_3_1_3_1_3.s_1 = r_2_3_1_3_1_3_1;\n }\n {\n address r_2_3_1_3_1_3_2 = 0x4C16713382DA1F313255d33E7Ee6528c66AD582b;\n r_2_3_1_3_1_3.s_2 = r_2_3_1_3_1_3_2;\n }\n {\n address r_2_3_1_3_1_3_3 = 0xCfA3260F781dd6d0b758784fBdd38F1A407B1dB3;\n r_2_3_1_3_1_3.s_3 = r_2_3_1_3_1_3_3;\n }\n r_2_3_1_3_1.s_3 = r_2_3_1_3_1_3;\n }\n r_2_3_1_3.s_1 = r_2_3_1_3_1;\n }\n r_2_3_1.s_3 = r_2_3_1_3;\n }\n {\n string memory r_2_3_1_4 = unicode\"Moo é🚀éooM 🚀oMéMMo\";\n r_2_3_1.s_4 = r_2_3_1_4;\n }\n r_2_3[1] = r_2_3_1;\n }\n {\n S_7b97843e memory r_2_3_2;\n {\n bytes16 r_2_3_2_0 = bytes16(0xe9e7dffb334d12c091b995ac673b7a97);\n r_2_3_2.s_0 = r_2_3_2_0;\n }\n {\n string memory r_2_3_2_1 = unicode\"Moo é🚀Mo Mé oo MoMéooMoéMé🚀oé🚀o🚀 éoM ooé🚀M\";\n r_2_3_2.s_1 = r_2_3_2_1;\n }\n {\n S_421683f8 memory r_2_3_2_2;\n {\n address r_2_3_2_2_0 = 0x625cAFbB258a05240aD8F3A17e76e078b25EdE64;\n r_2_3_2_2.s_0 = r_2_3_2_2_0;\n }\n r_2_3_2.s_2 = r_2_3_2_2;\n }\n {\n S_c4d623b1 memory r_2_3_2_3;\n {\n bool r_2_3_2_3_0 = true;\n r_2_3_2_3.s_0 = r_2_3_2_3_0;\n }\n {\n S_c7d1e161 memory r_2_3_2_3_1;\n {\n bool[1] memory r_2_3_2_3_1_0;\n {\n bool r_2_3_2_3_1_0_0 = true;\n r_2_3_2_3_1_0[0] = r_2_3_2_3_1_0_0;\n }\n r_2_3_2_3_1.s_0 = r_2_3_2_3_1_0;\n }\n {\n string memory r_2_3_2_3_1_1 = unicode\"Moo é🚀ooM\";\n r_2_3_2_3_1.s_1 = r_2_3_2_3_1_1;\n }\n {\n address r_2_3_2_3_1_2 = 0xD9D2691334D3ED2C69DD219D75A8616e8c4C968f;\n r_2_3_2_3_1.s_2 = r_2_3_2_3_1_2;\n }\n {\n S_5d0bf50e memory r_2_3_2_3_1_3;\n {\n S_c76a12d8 memory r_2_3_2_3_1_3_0;\n {\n string memory r_2_3_2_3_1_3_0_0 = unicode\"Moo é🚀o🚀oM 🚀o MM🚀oo\";\n r_2_3_2_3_1_3_0.s_0 = r_2_3_2_3_1_3_0_0;\n }\n {\n string[1] memory r_2_3_2_3_1_3_0_1;\n {\n string memory r_2_3_2_3_1_3_0_1_0 = unicode\"Moo é🚀éo\";\n r_2_3_2_3_1_3_0_1[0] = r_2_3_2_3_1_3_0_1_0;\n }\n r_2_3_2_3_1_3_0.s_1 = r_2_3_2_3_1_3_0_1;\n }\n r_2_3_2_3_1_3.s_0 = r_2_3_2_3_1_3_0;\n }\n {\n int128 r_2_3_2_3_1_3_1 = -164302756442392904686524561251483093889;\n r_2_3_2_3_1_3.s_1 = r_2_3_2_3_1_3_1;\n }\n {\n address r_2_3_2_3_1_3_2 = 0x1CD86029dE60A2e7d2e103B0D4704CD53bB7E300;\n r_2_3_2_3_1_3.s_2 = r_2_3_2_3_1_3_2;\n }\n {\n address r_2_3_2_3_1_3_3 = 0x182755373337B44856Ec9464c22DF1c1DB5afE3F;\n r_2_3_2_3_1_3.s_3 = r_2_3_2_3_1_3_3;\n }\n r_2_3_2_3_1.s_3 = r_2_3_2_3_1_3;\n }\n r_2_3_2_3.s_1 = r_2_3_2_3_1;\n }\n r_2_3_2.s_3 = r_2_3_2_3;\n }\n {\n string memory r_2_3_2_4 = unicode\"Moo é🚀MéoMoéM o\";\n r_2_3_2.s_4 = r_2_3_2_4;\n }\n r_2_3[2] = r_2_3_2;\n }\n {\n S_7b97843e memory r_2_3_3;\n {\n bytes16 r_2_3_3_0 = bytes16(0xc947748795be8fb4f06d6f2dae7a871e);\n r_2_3_3.s_0 = r_2_3_3_0;\n }\n {\n string memory r_2_3_3_1 = unicode\"Moo é🚀o Moo🚀 oo \";\n r_2_3_3.s_1 = r_2_3_3_1;\n }\n {\n S_421683f8 memory r_2_3_3_2;\n {\n address r_2_3_3_2_0 = 0x5d06CF92198E46929EcB5Be1fde4b0CFDFd116Cb;\n r_2_3_3_2.s_0 = r_2_3_3_2_0;\n }\n r_2_3_3.s_2 = r_2_3_3_2;\n }\n {\n S_c4d623b1 memory r_2_3_3_3;\n {\n bool r_2_3_3_3_0 = false;\n r_2_3_3_3.s_0 = r_2_3_3_3_0;\n }\n {\n S_c7d1e161 memory r_2_3_3_3_1;\n {\n bool[1] memory r_2_3_3_3_1_0;\n {\n bool r_2_3_3_3_1_0_0 = true;\n r_2_3_3_3_1_0[0] = r_2_3_3_3_1_0_0;\n }\n r_2_3_3_3_1.s_0 = r_2_3_3_3_1_0;\n }\n {\n string memory r_2_3_3_3_1_1 = unicode\"Moo é🚀M 🚀é🚀oo🚀Mo🚀é 🚀Mooooooo\";\n r_2_3_3_3_1.s_1 = r_2_3_3_3_1_1;\n }\n {\n address r_2_3_3_3_1_2 = 0x3414f5756C5c91129E8D4450fDE1b6e509Bb048b;\n r_2_3_3_3_1.s_2 = r_2_3_3_3_1_2;\n }\n {\n S_5d0bf50e memory r_2_3_3_3_1_3;\n {\n S_c76a12d8 memory r_2_3_3_3_1_3_0;\n {\n string memory r_2_3_3_3_1_3_0_0 = unicode\"Moo é🚀 M🚀oM🚀o ooooMo🚀éM oo🚀MMéMoéé M\";\n r_2_3_3_3_1_3_0.s_0 = r_2_3_3_3_1_3_0_0;\n }\n {\n string[1] memory r_2_3_3_3_1_3_0_1;\n {\n string memory r_2_3_3_3_1_3_0_1_0 = unicode\"Moo é🚀o Moéo🚀ooo🚀ooM\";\n r_2_3_3_3_1_3_0_1[0] = r_2_3_3_3_1_3_0_1_0;\n }\n r_2_3_3_3_1_3_0.s_1 = r_2_3_3_3_1_3_0_1;\n }\n r_2_3_3_3_1_3.s_0 = r_2_3_3_3_1_3_0;\n }\n {\n int128 r_2_3_3_3_1_3_1 = -138793539658939051109607675178891855643;\n r_2_3_3_3_1_3.s_1 = r_2_3_3_3_1_3_1;\n }\n {\n address r_2_3_3_3_1_3_2 = 0xf89D7cd5057C890cf4668e2CE85048114597F733;\n r_2_3_3_3_1_3.s_2 = r_2_3_3_3_1_3_2;\n }\n {\n address r_2_3_3_3_1_3_3 = 0xC77Ec3d79296970F4Df2f8eC3D49955e11318982;\n r_2_3_3_3_1_3.s_3 = r_2_3_3_3_1_3_3;\n }\n r_2_3_3_3_1.s_3 = r_2_3_3_3_1_3;\n }\n r_2_3_3_3.s_1 = r_2_3_3_3_1;\n }\n r_2_3_3.s_3 = r_2_3_3_3;\n }\n {\n string memory r_2_3_3_4 = unicode\"Moo é🚀o🚀MééoooMéooéM éo🚀🚀ooMM🚀o éo🚀oéé M o🚀Mo éé é MoMo oo\";\n r_2_3_3.s_4 = r_2_3_3_4;\n }\n r_2_3[3] = r_2_3_3;\n }\n r_2.s_3 = r_2_3;\n }\n {\n address[2] memory r_2_4;\n {\n address r_2_4_0 = 0xdBBb61b1BcdFA8405CFC8F25c1CA0D55D44eFE68;\n r_2_4[0] = r_2_4_0;\n }\n {\n address r_2_4_1 = 0xeeE5b9b29b211Ec185f70486233Bea87Eb6B02f4;\n r_2_4[1] = r_2_4_1;\n }\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀\";\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020d6a6d56e8dfe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a80206f6f4dc3a94d4d20000000000000000000000000000000000000000000000000005c7dfedc0a31b52036d502b28e14530ad4d01cd000000000000000000000000c0b2d4c95d0bb71f3f0256634cb9b701cd05015b5007af41a26cf7dc4e0387e7d9d082d66e531cca374370318197dfd2cedc8f9b200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000dbbb61b1bcdfa8405cfc8f25c1ca0d55d44efe68000000000000000000000000eee5b9b29b211ec185f70486233bea87eb6b02f40000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000008a00000000000000000000000000000000000000000000000000000000000000c609833067bd8081d385379cd5c2d97e0ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000009b22aa1b1d5343e4c05f005079303c9d54bee3d00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a806f20f09f9a806fc3a94d6f6f6f6f4d20c3a94dc3a96f6ff09f9a80f09f9a80f09f9a80206f4d4d4d20f09f9a80c3a94d206f204d4d6fc3a96f6f4df09f9a806fc3a96ff09f9a806f20c3a9c3a96f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000009805206d07d3367000ac154cf193b7b3a67bd43d000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000644d6f6f20c3a9f09f9a804dc3a96ff09f9a806ff09f9a806f4d6fc3a96f6ff09f9a80f09f9a806f20f09f9a806f4d6ff09f9a80f09f9a80f09f9a806ff09f9a804d20c3a96ff09f9a804df09f9a804df09f9a80c3a920c3a920c3a9204d4d204df09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000002515745b3e87d3c2e109a8fa176e4ac600000000000000000000000070a0d3513e804574a0a20dfd63c58feb415d49d40000000000000000000000003ea4f78f1401be5bc2fbb80a28ffb2571988f928000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a80c3a96f4d4df09f9a80c3a9c3a96f20c3a94df09f9a806ff09f9a806f6fc3a920f09f9a804d204d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a806ff09f9a80f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a80f09f9a8020c3a96ff09f9a80204d20206f4d6fc3a90063fd66a9338ff84774c8bb6bf7fb45340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000036c65e7db1c4d1de8bdc75cfe15325142a00bc89000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a806f6f206f6ff09f9a80f09f9a80f09f9a804d206fc3a94d4dc3a9206f4d6ff09f9a806f4d6f6f6f20c3a96f6f4dc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000ad08bd45c5cdde038892ba8e5b6d083628147b5600000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffffcaacf8306f13f541f82c2b2c4863a6d40000000000000000000000004c16713382da1f313255d33e7ee6528c66ad582b000000000000000000000000cfa3260f781dd6d0b758784fbdd38f1a407b1db3000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000444d6f6f20c3a9f09f9a806fc3a96ff09f9a8020f09f9a806ff09f9a8020206f6f6f6f6f6f4d6ff09f9a806f4dc3a96f4d206ff09f9a80f09f9a8020206f6fc3a920c3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a8020204d206f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80c3a96f6f4d2020f09f9a806f4dc3a94d4d6f00000000e9e7dffb334d12c091b995ac673b7a970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000625cafbb258a05240ad8f3a17e76e078b25ede640000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a804d6f204dc3a9206f6f204d6f4dc3a96f6f4d6fc3a94dc3a9f09f9a806fc3a9f09f9a806ff09f9a8020c3a96f4d206f6fc3a9f09f9a804d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000d9d2691334d3ed2c69dd219d75a8616e8c4c968f00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a806f6f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffff846470ad292685e273e011556372747f0000000000000000000000001cd86029de60a2e7d2e103b0d4704cd53bb7e300000000000000000000000000182755373337b44856ec9464c22df1c1db5afe3f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000204d6f6f20c3a9f09f9a806ff09f9a806f4d20f09f9a806f204d4df09f9a806f6f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a80c3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a804dc3a96f4d6fc3a94d206f0000000000000000000000c947748795be8fb4f06d6f2dae7a871e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000005d06cf92198e46929ecb5be1fde4b0cfdfd116cb00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a806f204d6f6ff09f9a80206f6f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000003414f5756c5c91129e8d4450fde1b6e509bb048b00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a804d20f09f9a80c3a9f09f9a806f6ff09f9a804d6ff09f9a80c3a920f09f9a804d6f6f6f6f6f6f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffff9795562aa733db1cc45abcc2bce038e5000000000000000000000000f89d7cd5057c890cf4668e2ce85048114597f733000000000000000000000000c77ec3d79296970f4df2f8ec3d49955e11318982000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a80204df09f9a806f4df09f9a806f206f6f6f6f4d6ff09f9a80c3a94d206f6ff09f9a804d4dc3a94d6fc3a9c3a9204d00000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a806f204d6fc3a96ff09f9a806f6f6ff09f9a806f6f4d00000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a806ff09f9a804dc3a9c3a96f6f6f4dc3a96f6fc3a94d20c3a96ff09f9a80f09f9a806f6f4d4df09f9a806f20c3a96ff09f9a806fc3a9c3a920204d206ff09f9a804d6f20c3a9c3a920c3a9204d6f4d6f206f6f00000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,bytes11,(bytes13,bool[],(int160,(bytes1[3])[],(bool,bytes23,string,bytes19,((bytes30,uint256[4],bytes28),uint80,bool,bool,bool)[]),bytes16)),address)", + "type": "(string,bytes11,(bytes13,bool[],(int160,(bytes1[3])[],(bool,bytes23,string,bytes19,((bytes30,uint256[4],bytes28),uint80,bool,bool,bool)[]),bytes16)),address)", + "value": [ + "Moo é🚀MMéoé🚀o🚀ooéMM🚀oé🚀oo🚀M ", + "0xb91c7bab7641829b0ac3aa", + [ + "0x590bf20f8224d5c27a29ff809a", + [false, false, false], + [ + "-473272939497505773052553635129628765169324481648", + [ + [["0xaa", "0x88", "0x94"]], + [["0xfc", "0x2d", "0x4e"]], + [["0x62", "0x0a", "0xa5"]] + ], + [ + false, + "0x271bfebf5e437f035fc88ef5b982224a1b66d2cde7f95e", + "Moo é🚀oMoé🚀Mo éMMM🚀oMo éooo 🚀", + "0x1f6813ab0662ff7cb4520ca2950f8029218b6d", + [ + [ + [ + "0xed9b6eb9e844a51eff248fd6d80048fda4e51104bc69c764d82efd9fd96d", + [ + "91232287069125766962403628055276480532985712295479857849717236904243072374893", + "31586196773491879313390560002367796428382189204487648778148962130611508299424", + "7975672891649382190474193358168854816015626000363478494707627386405046386791", + "81216346222660663679465550773025558967985787844913737911522180624310247494888" + ], + "0xd2682352e70c03bef13a0d6ea73d0cab5e8d5618fea8852d4d30f5cd" + ], + "576221118342238746928401", + true, + true, + false + ], + [ + [ + "0x678100d27f5f648a0015a4bca645aa70daf1043134d82625a38a45788ef6", + [ + "51998462732394538304403344513253546291478649133114502576308966049135104434190", + "16984479167058614472269838380011682527168510507193688943127372136843921560650", + "35997648790175436358272025068629060331400405961799213518564051416125277781321", + "31661411309582738770517464133519180146066332099425006726180248023900864373001" + ], + "0xcc5e3c5f4692a7da61a5c72a05e7b8ec80acf8bb05e1185c505be71a" + ], + "845555270567686324975195", + false, + false, + true + ], + [ + [ + "0xbfb7c080da3c732c11785a7b0b88362a50e63ca8d12cbc7f5687b45f54a6", + [ + "22305154555307614318597100139266526622337782323492900702499983811063525729534", + "76999404135158926276606574026593640095454185007136464396507726872172159479706", + "41460873103258109719901063309440364457574410527743986372578642603301930656263", + "9004626772405518445999632174653359254439455245228748370916277165262484844631" + ], + "0x0ccadde4787b628cb64411707f8cbbcba981402ff923ad1a4e48c148" + ], + "929550569640633381715500", + true, + true, + true + ] + ] + ], + "0x05c24dedd3ecd1756dc26662f2e33aed" + ] + ], + "0x17857216aaf3E5A7aF879b4997F7d9A6dF608a0d" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MMéoé🚀o🚀ooéMM🚀oé🚀oo🚀M " + }, + { + "type": "hexstring", + "value": "0xb91c7bab7641829b0ac3aa" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x590bf20f8224d5c27a29ff809a" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-473272939497505773052553635129628765169324481648" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xaa" + }, + { + "type": "hexstring", + "value": "0x88" + }, + { + "type": "hexstring", + "value": "0x94" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xfc" + }, + { + "type": "hexstring", + "value": "0x2d" + }, + { + "type": "hexstring", + "value": "0x4e" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x62" + }, + { + "type": "hexstring", + "value": "0x0a" + }, + { + "type": "hexstring", + "value": "0xa5" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x271bfebf5e437f035fc88ef5b982224a1b66d2cde7f95e" + }, + { + "type": "string", + "value": "Moo é🚀oMoé🚀Mo éMMM🚀oMo éooo 🚀" + }, + { + "type": "hexstring", + "value": "0x1f6813ab0662ff7cb4520ca2950f8029218b6d" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xed9b6eb9e844a51eff248fd6d80048fda4e51104bc69c764d82efd9fd96d" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "91232287069125766962403628055276480532985712295479857849717236904243072374893" + }, + { + "type": "number", + "value": "31586196773491879313390560002367796428382189204487648778148962130611508299424" + }, + { + "type": "number", + "value": "7975672891649382190474193358168854816015626000363478494707627386405046386791" + }, + { + "type": "number", + "value": "81216346222660663679465550773025558967985787844913737911522180624310247494888" + } + ] + }, + { + "type": "hexstring", + "value": "0xd2682352e70c03bef13a0d6ea73d0cab5e8d5618fea8852d4d30f5cd" + } + ] + }, + { + "type": "number", + "value": "576221118342238746928401" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x678100d27f5f648a0015a4bca645aa70daf1043134d82625a38a45788ef6" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "51998462732394538304403344513253546291478649133114502576308966049135104434190" + }, + { + "type": "number", + "value": "16984479167058614472269838380011682527168510507193688943127372136843921560650" + }, + { + "type": "number", + "value": "35997648790175436358272025068629060331400405961799213518564051416125277781321" + }, + { + "type": "number", + "value": "31661411309582738770517464133519180146066332099425006726180248023900864373001" + } + ] + }, + { + "type": "hexstring", + "value": "0xcc5e3c5f4692a7da61a5c72a05e7b8ec80acf8bb05e1185c505be71a" + } + ] + }, + { + "type": "number", + "value": "845555270567686324975195" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xbfb7c080da3c732c11785a7b0b88362a50e63ca8d12cbc7f5687b45f54a6" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "22305154555307614318597100139266526622337782323492900702499983811063525729534" + }, + { + "type": "number", + "value": "76999404135158926276606574026593640095454185007136464396507726872172159479706" + }, + { + "type": "number", + "value": "41460873103258109719901063309440364457574410527743986372578642603301930656263" + }, + { + "type": "number", + "value": "9004626772405518445999632174653359254439455245228748370916277165262484844631" + } + ] + }, + { + "type": "hexstring", + "value": "0x0ccadde4787b628cb64411707f8cbbcba981402ff923ad1a4e48c148" + } + ] + }, + { + "type": "number", + "value": "929550569640633381715500" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x05c24dedd3ecd1756dc26662f2e33aed" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x17857216aaf3E5A7aF879b4997F7d9A6dF608a0d" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610c94806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610b09565b60405180910390f35b6100566107aa565b61005e6107aa565b6000604051806060016040528060338152602001610c2c603391398252506a5c8e3dd5bb20c14d8561d560a91b60208201526100986107d7565b6c2c85f907c1126ae13d14ffc04d60991b81526040805160038082526080820190925260009160208201606080368337019050509050600080826000815181106100e4576100e4610be8565b602002602001019015159081151581525050506000808260018151811061010d5761010d610be8565b602002602001019015159081151581525050506000808260028151811061013657610136610be8565b911515602092830291909101820152830191909152506101546107fb565b7352e64ae6f0e17e42f0eeec7a57c9973acdfd5c6f19815260408051600380825260808201909252600091816020015b61018c610843565b8152602001906001900390816101845790505090506101a9610843565b6101b1610852565b605560f91b8152601160fb1b6020820152602560fa1b604082015281528151819083906000906101e3576101e3610be8565b6020026020010181905250506101f7610843565b6101ff610852565b603f60fa1b8152602d60f81b6020820152602760f91b60408201528152815181908390600190811061023357610233610be8565b602002602001018190525050610247610843565b61024f610852565b603160f91b8152600560f91b602082015260a560f81b60408201528152815181908390600290811061028357610283610be8565b602002602001018190525050808260200181905250506102c96040805160a081018252600080825260208201819052606092820183905282820152608081019190915290565b60008082527f271bfebf5e437f035fc88ef5b982224a1b66d2cde7f95e0000000000000000006020808401919091526040805160608101909152602d8082529091610bff90830139604083810191909152721f6813ab0662ff7cb4520ca2950f8029218b6d60681b606084015280516003808252608082019092526000925090816020015b610356610870565b81526020019060019003908161034e579050509050610373610870565b61037b6108a5565b7fed9b6eb9e844a51eff248fd6d80048fda4e51104bc69c764d82efd9fd96d000081526103a66108bc565b7fc9b3a503617d4907088fd9e5b5511a937a4acfacc15e9a0285b7c6505ad0986d81527f45d527617d977a805e426b373fbd1f4345967e4415f9ea4c1920aa2ec68b46a06020808301919091527f11a2122574ad39911ce2e9dc801fbc3770315ea28395070c846b8d0af99f00676040808401919091527fb38ed2ad745b75ab7b0489dddd412c8aeccdf7d8749348fd9d4e8dbde06214e8606080850191909152848301939093527fd2682352e70c03bef13a0d6ea73d0cab5e8d5618fea8852d4d30f5cd0000000084820152928452697a05026925f007c365119084015260019183018290528201526000608082018190528251829184916104ab576104ab610be8565b6020026020010181905250506104bf610870565b6104c76108a5565b7f678100d27f5f648a0015a4bca645aa70daf1043134d82625a38a45788ef6000081526104f26108bc565b7f72f61641eed189f66c5498a814640112eed68c405bd63e99cfeefd727fc9200e81527f258cdfe1ed4043a3d8c20b32fd8709dd9827b646ca83da3afba98ce057c3944a6020808301919091527f4f95f27b072dda7851fff660f7c97621ce0a40f5d963d65871c5a05a17f8bd496040808401919091527f45ffb947b082242a3e74680e7fbcef3b6aea4d9f830c3dea6b923a4134e3e109606080850191909152848301939093527fcc5e3c5f4692a7da61a5c72a05e7b8ec80acf8bb05e1185c505be71a000000008482015292845269b30da49fed7c4b05765b90840152600091830182905282015260016080820181905282518291849181106105f9576105f9610be8565b60200260200101819052505061060d610870565b6106156108a5565b7fbfb7c080da3c732c11785a7b0b88362a50e63ca8d12cbc7f5687b45f54a6000081526106406108bc565b7f31504524af90f46bccb54dcfd613504362190acaa5addd3f523d4e5d8e38e4fe81527faa3c1e4a2c89ecefd3de0e5ce9f0a3096bc72341e8eb583fa98dacd5653aaf9a6020808301919091527f5baa05c74656723b0174a1775ce0edfb7f2a434770fb05c733f551150959e2076040808401919091527f13e8702a16a8b44cc9d22dbb29550cd8d3f1ded77372cbd664ad831b778cb057606080850191909152848301939093527f0ccadde4787b628cb64411707f8cbbcba981402ff923ad1a4e48c148000000008482015292845269c4d7098fe629d5d07e2c90840152600191830182905282018190526080820152815181908390600290811061074857610748610be8565b60209081029190910101525060808201526040808301919091526f05c24dedd3ecd1756dc26662f2e33aed60801b606080840191909152838201929092528301919091527317857216aaf3e5a7af879b4997f7d9a6df608a0d90820152919050565b6040805160808101825260608152600060208201529081016107ca6107d7565b8152600060209091015290565b60408051606080820183526000825260208201529081016107f66107fb565b905290565b6040805160808101825260008152606060208201529081016107ca6040805160a081018252600080825260208201819052606092820183905282820152608081019190915290565b60405180602001604052806107f65b60405180606001604052806003906020820280368337509192915050565b6040518060a001604052806108836108a5565b8152600060208201819052604082018190526060820181905260809091015290565b604080516060810190915260008152602081016107ca5b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b81811015610900576020818501810151868301820152016108e4565b81811115610912576000602083870101525b50601f01601f19169290920160200192915050565b600060a0825115158452602068ffffffffffffffffff19818501511681860152604080850151838288015261095e848801826108da565b6060878101516cffffffffffffffffffffffffff1916898201526080808901518a8403828c01528051808552908701945091929091600091870190825b81811015610a315786518051805161ffff191685528a8101518b8601875b60048110156109d65782518252918d0191908d01906001016109b9565b50505089015163ffffffff1916848c0152808a015169ffffffffffffffffffff1660c085015280890151151560e08501528681015115156101008501528501511515610120840152958801956101409092019160010161099b565b50909b9a5050505050505050505050565b600060808301825160130b845260208084015160808287015282815180855260a088019150838301945060009250825b81811015610abd5785515183855b6003811015610aa75782516001600160f81b03191682529187019190870190600101610a80565b5050509484019460609290920191600101610a72565b5050604086015193508681036040880152610ad88185610927565b93505050506060830151610b0160608601826fffffffffffffffffffffffffffffffff19169052565b509392505050565b600060208083528351608082850152610b2560a08501826108da565b90506affffffffffffffffffffff60a81b828601511660408501526040850151601f19858303016060860152606082016cffffffffffffffffffffffffff60981b8251168352838201516060858501528181518084526080860191508683019350600092505b80831015610bad57835115158252928601926001929092019190860190610b8b565b50604084015195508481036040860152610bc78187610a42565b955050505050506060840151610b0160808501826001600160a01b03169052565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f4d6fc3a9f09f9a804d6f20c3a94d4d4df09f9a806f4d6f20c3a96f6f6f20f09f9a804d6f6f20c3a9f09f9a804d4dc3a96fc3a9f09f9a806ff09f9a806f6fc3a94d4df09f9a806fc3a9f09f9a806f6ff09f9a804d20a264697066735822122070a6641eb259188986c56573b84bc7c0c9f2536ce46e5d3516a88ce0cae348b764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8eebce79 {\n bytes1[3] s_0;\n }\n\n struct S_861062ac {\n bytes30 s_0;\n uint256[4] s_1;\n bytes28 s_2;\n }\n\n struct S_60281cba {\n S_861062ac s_0;\n uint80 s_1;\n bool s_2;\n bool s_3;\n bool s_4;\n }\n\n struct S_25cfc49d {\n bool s_0;\n bytes23 s_1;\n string s_2;\n bytes19 s_3;\n S_60281cba[] s_4;\n }\n\n struct S_2aeabbaf {\n int160 s_0;\n S_8eebce79[] s_1;\n S_25cfc49d s_2;\n bytes16 s_3;\n }\n\n struct S_b80d4e3e {\n bytes13 s_0;\n bool[] s_1;\n S_2aeabbaf s_2;\n }\n\n struct S_31340d66 {\n string s_0;\n bytes11 s_1;\n S_b80d4e3e s_2;\n address s_3;\n }\n\n function test () public pure returns (S_31340d66 memory) {\n S_31340d66 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀MMéoé🚀o🚀ooéMM🚀oé🚀oo🚀M \";\n r.s_0 = r_0;\n }\n {\n bytes11 r_1 = bytes11(0xb91c7bab7641829b0ac3aa);\n r.s_1 = r_1;\n }\n {\n S_b80d4e3e memory r_2;\n {\n bytes13 r_2_0 = bytes13(0x590bf20f8224d5c27a29ff809a);\n r_2.s_0 = r_2_0;\n }\n {\n bool[] memory r_2_1 = new bool[](3);\n {\n bool r_2_1_0 = false;\n r_2_1[0] = r_2_1_0;\n }\n {\n bool r_2_1_1 = false;\n r_2_1[1] = r_2_1_1;\n }\n {\n bool r_2_1_2 = false;\n r_2_1[2] = r_2_1_2;\n }\n r_2.s_1 = r_2_1;\n }\n {\n S_2aeabbaf memory r_2_2;\n {\n int160 r_2_2_0 = -473272939497505773052553635129628765169324481648;\n r_2_2.s_0 = r_2_2_0;\n }\n {\n S_8eebce79[] memory r_2_2_1 = new S_8eebce79[](3);\n {\n S_8eebce79 memory r_2_2_1_0;\n {\n bytes1[3] memory r_2_2_1_0_0;\n {\n bytes1 r_2_2_1_0_0_0 = bytes1(0xaa);\n r_2_2_1_0_0[0] = r_2_2_1_0_0_0;\n }\n {\n bytes1 r_2_2_1_0_0_1 = bytes1(0x88);\n r_2_2_1_0_0[1] = r_2_2_1_0_0_1;\n }\n {\n bytes1 r_2_2_1_0_0_2 = bytes1(0x94);\n r_2_2_1_0_0[2] = r_2_2_1_0_0_2;\n }\n r_2_2_1_0.s_0 = r_2_2_1_0_0;\n }\n r_2_2_1[0] = r_2_2_1_0;\n }\n {\n S_8eebce79 memory r_2_2_1_1;\n {\n bytes1[3] memory r_2_2_1_1_0;\n {\n bytes1 r_2_2_1_1_0_0 = bytes1(0xfc);\n r_2_2_1_1_0[0] = r_2_2_1_1_0_0;\n }\n {\n bytes1 r_2_2_1_1_0_1 = bytes1(0x2d);\n r_2_2_1_1_0[1] = r_2_2_1_1_0_1;\n }\n {\n bytes1 r_2_2_1_1_0_2 = bytes1(0x4e);\n r_2_2_1_1_0[2] = r_2_2_1_1_0_2;\n }\n r_2_2_1_1.s_0 = r_2_2_1_1_0;\n }\n r_2_2_1[1] = r_2_2_1_1;\n }\n {\n S_8eebce79 memory r_2_2_1_2;\n {\n bytes1[3] memory r_2_2_1_2_0;\n {\n bytes1 r_2_2_1_2_0_0 = bytes1(0x62);\n r_2_2_1_2_0[0] = r_2_2_1_2_0_0;\n }\n {\n bytes1 r_2_2_1_2_0_1 = bytes1(0x0a);\n r_2_2_1_2_0[1] = r_2_2_1_2_0_1;\n }\n {\n bytes1 r_2_2_1_2_0_2 = bytes1(0xa5);\n r_2_2_1_2_0[2] = r_2_2_1_2_0_2;\n }\n r_2_2_1_2.s_0 = r_2_2_1_2_0;\n }\n r_2_2_1[2] = r_2_2_1_2;\n }\n r_2_2.s_1 = r_2_2_1;\n }\n {\n S_25cfc49d memory r_2_2_2;\n {\n bool r_2_2_2_0 = false;\n r_2_2_2.s_0 = r_2_2_2_0;\n }\n {\n bytes23 r_2_2_2_1 = bytes23(0x271bfebf5e437f035fc88ef5b982224a1b66d2cde7f95e);\n r_2_2_2.s_1 = r_2_2_2_1;\n }\n {\n string memory r_2_2_2_2 = unicode\"Moo é🚀oMoé🚀Mo éMMM🚀oMo éooo 🚀\";\n r_2_2_2.s_2 = r_2_2_2_2;\n }\n {\n bytes19 r_2_2_2_3 = bytes19(0x1f6813ab0662ff7cb4520ca2950f8029218b6d);\n r_2_2_2.s_3 = r_2_2_2_3;\n }\n {\n S_60281cba[] memory r_2_2_2_4 = new S_60281cba[](3);\n {\n S_60281cba memory r_2_2_2_4_0;\n {\n S_861062ac memory r_2_2_2_4_0_0;\n {\n bytes30 r_2_2_2_4_0_0_0 = bytes30(0xed9b6eb9e844a51eff248fd6d80048fda4e51104bc69c764d82efd9fd96d);\n r_2_2_2_4_0_0.s_0 = r_2_2_2_4_0_0_0;\n }\n {\n uint256[4] memory r_2_2_2_4_0_0_1;\n {\n uint256 r_2_2_2_4_0_0_1_0 = 91232287069125766962403628055276480532985712295479857849717236904243072374893;\n r_2_2_2_4_0_0_1[0] = r_2_2_2_4_0_0_1_0;\n }\n {\n uint256 r_2_2_2_4_0_0_1_1 = 31586196773491879313390560002367796428382189204487648778148962130611508299424;\n r_2_2_2_4_0_0_1[1] = r_2_2_2_4_0_0_1_1;\n }\n {\n uint256 r_2_2_2_4_0_0_1_2 = 7975672891649382190474193358168854816015626000363478494707627386405046386791;\n r_2_2_2_4_0_0_1[2] = r_2_2_2_4_0_0_1_2;\n }\n {\n uint256 r_2_2_2_4_0_0_1_3 = 81216346222660663679465550773025558967985787844913737911522180624310247494888;\n r_2_2_2_4_0_0_1[3] = r_2_2_2_4_0_0_1_3;\n }\n r_2_2_2_4_0_0.s_1 = r_2_2_2_4_0_0_1;\n }\n {\n bytes28 r_2_2_2_4_0_0_2 = bytes28(0xd2682352e70c03bef13a0d6ea73d0cab5e8d5618fea8852d4d30f5cd);\n r_2_2_2_4_0_0.s_2 = r_2_2_2_4_0_0_2;\n }\n r_2_2_2_4_0.s_0 = r_2_2_2_4_0_0;\n }\n {\n uint80 r_2_2_2_4_0_1 = 576221118342238746928401;\n r_2_2_2_4_0.s_1 = r_2_2_2_4_0_1;\n }\n {\n bool r_2_2_2_4_0_2 = true;\n r_2_2_2_4_0.s_2 = r_2_2_2_4_0_2;\n }\n {\n bool r_2_2_2_4_0_3 = true;\n r_2_2_2_4_0.s_3 = r_2_2_2_4_0_3;\n }\n {\n bool r_2_2_2_4_0_4 = false;\n r_2_2_2_4_0.s_4 = r_2_2_2_4_0_4;\n }\n r_2_2_2_4[0] = r_2_2_2_4_0;\n }\n {\n S_60281cba memory r_2_2_2_4_1;\n {\n S_861062ac memory r_2_2_2_4_1_0;\n {\n bytes30 r_2_2_2_4_1_0_0 = bytes30(0x678100d27f5f648a0015a4bca645aa70daf1043134d82625a38a45788ef6);\n r_2_2_2_4_1_0.s_0 = r_2_2_2_4_1_0_0;\n }\n {\n uint256[4] memory r_2_2_2_4_1_0_1;\n {\n uint256 r_2_2_2_4_1_0_1_0 = 51998462732394538304403344513253546291478649133114502576308966049135104434190;\n r_2_2_2_4_1_0_1[0] = r_2_2_2_4_1_0_1_0;\n }\n {\n uint256 r_2_2_2_4_1_0_1_1 = 16984479167058614472269838380011682527168510507193688943127372136843921560650;\n r_2_2_2_4_1_0_1[1] = r_2_2_2_4_1_0_1_1;\n }\n {\n uint256 r_2_2_2_4_1_0_1_2 = 35997648790175436358272025068629060331400405961799213518564051416125277781321;\n r_2_2_2_4_1_0_1[2] = r_2_2_2_4_1_0_1_2;\n }\n {\n uint256 r_2_2_2_4_1_0_1_3 = 31661411309582738770517464133519180146066332099425006726180248023900864373001;\n r_2_2_2_4_1_0_1[3] = r_2_2_2_4_1_0_1_3;\n }\n r_2_2_2_4_1_0.s_1 = r_2_2_2_4_1_0_1;\n }\n {\n bytes28 r_2_2_2_4_1_0_2 = bytes28(0xcc5e3c5f4692a7da61a5c72a05e7b8ec80acf8bb05e1185c505be71a);\n r_2_2_2_4_1_0.s_2 = r_2_2_2_4_1_0_2;\n }\n r_2_2_2_4_1.s_0 = r_2_2_2_4_1_0;\n }\n {\n uint80 r_2_2_2_4_1_1 = 845555270567686324975195;\n r_2_2_2_4_1.s_1 = r_2_2_2_4_1_1;\n }\n {\n bool r_2_2_2_4_1_2 = false;\n r_2_2_2_4_1.s_2 = r_2_2_2_4_1_2;\n }\n {\n bool r_2_2_2_4_1_3 = false;\n r_2_2_2_4_1.s_3 = r_2_2_2_4_1_3;\n }\n {\n bool r_2_2_2_4_1_4 = true;\n r_2_2_2_4_1.s_4 = r_2_2_2_4_1_4;\n }\n r_2_2_2_4[1] = r_2_2_2_4_1;\n }\n {\n S_60281cba memory r_2_2_2_4_2;\n {\n S_861062ac memory r_2_2_2_4_2_0;\n {\n bytes30 r_2_2_2_4_2_0_0 = bytes30(0xbfb7c080da3c732c11785a7b0b88362a50e63ca8d12cbc7f5687b45f54a6);\n r_2_2_2_4_2_0.s_0 = r_2_2_2_4_2_0_0;\n }\n {\n uint256[4] memory r_2_2_2_4_2_0_1;\n {\n uint256 r_2_2_2_4_2_0_1_0 = 22305154555307614318597100139266526622337782323492900702499983811063525729534;\n r_2_2_2_4_2_0_1[0] = r_2_2_2_4_2_0_1_0;\n }\n {\n uint256 r_2_2_2_4_2_0_1_1 = 76999404135158926276606574026593640095454185007136464396507726872172159479706;\n r_2_2_2_4_2_0_1[1] = r_2_2_2_4_2_0_1_1;\n }\n {\n uint256 r_2_2_2_4_2_0_1_2 = 41460873103258109719901063309440364457574410527743986372578642603301930656263;\n r_2_2_2_4_2_0_1[2] = r_2_2_2_4_2_0_1_2;\n }\n {\n uint256 r_2_2_2_4_2_0_1_3 = 9004626772405518445999632174653359254439455245228748370916277165262484844631;\n r_2_2_2_4_2_0_1[3] = r_2_2_2_4_2_0_1_3;\n }\n r_2_2_2_4_2_0.s_1 = r_2_2_2_4_2_0_1;\n }\n {\n bytes28 r_2_2_2_4_2_0_2 = bytes28(0x0ccadde4787b628cb64411707f8cbbcba981402ff923ad1a4e48c148);\n r_2_2_2_4_2_0.s_2 = r_2_2_2_4_2_0_2;\n }\n r_2_2_2_4_2.s_0 = r_2_2_2_4_2_0;\n }\n {\n uint80 r_2_2_2_4_2_1 = 929550569640633381715500;\n r_2_2_2_4_2.s_1 = r_2_2_2_4_2_1;\n }\n {\n bool r_2_2_2_4_2_2 = true;\n r_2_2_2_4_2.s_2 = r_2_2_2_4_2_2;\n }\n {\n bool r_2_2_2_4_2_3 = true;\n r_2_2_2_4_2.s_3 = r_2_2_2_4_2_3;\n }\n {\n bool r_2_2_2_4_2_4 = true;\n r_2_2_2_4_2.s_4 = r_2_2_2_4_2_4;\n }\n r_2_2_2_4[2] = r_2_2_2_4_2;\n }\n r_2_2_2.s_4 = r_2_2_2_4;\n }\n r_2_2.s_2 = r_2_2_2;\n }\n {\n bytes16 r_2_2_3 = bytes16(0x05c24dedd3ecd1756dc26662f2e33aed);\n r_2_2.s_3 = r_2_2_3;\n }\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x17857216aaf3E5A7aF879b4997F7d9A6dF608a0d;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080b91c7bab7641829b0ac3aa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000017857216aaf3e5a7af879b4997f7d9a6df608a0d00000000000000000000000000000000000000000000000000000000000000334d6f6f20c3a9f09f9a804d4dc3a96fc3a9f09f9a806ff09f9a806f6fc3a94d4df09f9a806fc3a9f09f9a806f6ff09f9a804d2000000000000000000000000000590bf20f8224d5c27a29ff809a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffad19b5190f1e81bd0f111385a83668c53202a390000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c005c24dedd3ecd1756dc26662f2e33aed000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003aa0000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000fc000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000000062000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000a5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000271bfebf5e437f035fc88ef5b982224a1b66d2cde7f95e00000000000000000000000000000000000000000000000000000000000000000000000000000000a01f6813ab0662ff7cb4520ca2950f8029218b6d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a806f4d6fc3a9f09f9a804d6f20c3a94d4d4df09f9a806f4d6f20c3a96f6f6f20f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ed9b6eb9e844a51eff248fd6d80048fda4e51104bc69c764d82efd9fd96d0000c9b3a503617d4907088fd9e5b5511a937a4acfacc15e9a0285b7c6505ad0986d45d527617d977a805e426b373fbd1f4345967e4415f9ea4c1920aa2ec68b46a011a2122574ad39911ce2e9dc801fbc3770315ea28395070c846b8d0af99f0067b38ed2ad745b75ab7b0489dddd412c8aeccdf7d8749348fd9d4e8dbde06214e8d2682352e70c03bef13a0d6ea73d0cab5e8d5618fea8852d4d30f5cd00000000000000000000000000000000000000000000000000007a05026925f007c36511000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000678100d27f5f648a0015a4bca645aa70daf1043134d82625a38a45788ef6000072f61641eed189f66c5498a814640112eed68c405bd63e99cfeefd727fc9200e258cdfe1ed4043a3d8c20b32fd8709dd9827b646ca83da3afba98ce057c3944a4f95f27b072dda7851fff660f7c97621ce0a40f5d963d65871c5a05a17f8bd4945ffb947b082242a3e74680e7fbcef3b6aea4d9f830c3dea6b923a4134e3e109cc5e3c5f4692a7da61a5c72a05e7b8ec80acf8bb05e1185c505be71a0000000000000000000000000000000000000000000000000000b30da49fed7c4b05765b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bfb7c080da3c732c11785a7b0b88362a50e63ca8d12cbc7f5687b45f54a6000031504524af90f46bccb54dcfd613504362190acaa5addd3f523d4e5d8e38e4feaa3c1e4a2c89ecefd3de0e5ce9f0a3096bc72341e8eb583fa98dacd5653aaf9a5baa05c74656723b0174a1775ce0edfb7f2a434770fb05c733f551150959e20713e8702a16a8b44cc9d22dbb29550cd8d3f1ded77372cbd664ad831b778cb0570ccadde4787b628cb64411707f8cbbcba981402ff923ad1a4e48c1480000000000000000000000000000000000000000000000000000c4d7098fe629d5d07e2c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001" + }, + { + "name": "random-(address,((address,string),(address,string,bytes1,bool,bytes17),(uint,(address[2],(string,string,bytes18)[2])),address,(bool,((string,bytes6),bool))),uint72,address,bytes30[2][4])", + "type": "(address,((address,string),(address,string,bytes1,bool,bytes17),(uint,(address[2],(string,string,bytes18)[2])),address,(bool,((string,bytes6),bool))),uint72,address,bytes30[2][4])", + "value": [ + "0x1402C626ddF0ee9bF5Cb592Baae2f0049452b551", + [ + [ + "0xAF8227385f58C016164fcA61eF525Ed829711562", + "Moo é🚀M MM🚀🚀oMéoooo🚀M🚀🚀M 🚀oM🚀MoMMMo🚀oooo🚀M🚀MooéoMoo M🚀 🚀é" + ], + [ + "0x760651275c907bcFe3fC1821593209d066199BeE", + "Moo é🚀o o éMéooM o🚀oo 🚀 éoééM🚀ééMo", + "0x83", + true, + "0x8c0dee3098386c2a12eac0998fe3c821ab" + ], + [ + "51218234366483015623190454520378042501219207103170342528510830228156385319185", + [ + [ + "0x219a9256702CFFde8a7167C375CAe87693f8F1bc", + "0x10ccB1B04C29798637DC44ba715250bE76992D55" + ], + [ + [ + "Moo é🚀🚀MéM🚀", + "Moo é🚀🚀Mo 🚀o", + "0x09e53c8873a43144f2084ab81653020519c4" + ], + [ + "Moo é🚀éMMM🚀ooMééé🚀oM Mé🚀M éo M🚀o ooo ooé éooooo🚀o ", + "Moo é🚀o 🚀ooé🚀oéooéo Moé oéoéoé🚀🚀 🚀🚀o🚀Moé ", + "0x53a8447f1b4d27d5443787ae4c4eb6a86729" + ] + ] + ] + ], + "0x93e8cc862C19d690CC4dc8e6B34b0eE9081FB8D8", + [true, [["Moo é🚀éooMoéM é 🚀", "0x81ccb8afe039"], false]] + ], + "3385819309048819068409", + "0xcBE700564f9485a4bFcd5Bc58338E75f20ec7D4c", + [ + [ + "0xbda5b11758c9356bf06d7ca48753a9c2bc52ce35c2175232ac6d771f0810", + "0xe24027977601c58970cfe867e546044e4ebe3dcf19ea72b5dbb464b75232" + ], + [ + "0xdbaf7267e852fb3c5e71c45e50735bf64f8290cf9dd99d6d1f1a23549c5f", + "0x2d9e63a2267b8f515d59fe8d63a3667fde49790dd9b242489891fa2107cd" + ], + [ + "0x9873d10c65d1e014ff4e05366a974196bdbd1e0229c10b615088f1d81e9f", + "0xccea08fa4183164b906fc3f7b0f08e66b34bd7a258056e1e5ad4afb14d6f" + ], + [ + "0x5db64d42155734f3f506079283ae7109dc6f2b11489065854cfc4becffbf", + "0xb5d8fe2f434b275fa14d9c0e7401f903f566c129849a5f5bb66677a6ebc5" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x1402C626ddF0ee9bF5Cb592Baae2f0049452b551" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xAF8227385f58C016164fcA61eF525Ed829711562" + }, + { + "type": "string", + "value": "Moo é🚀M MM🚀🚀oMéoooo🚀M🚀🚀M 🚀oM🚀MoMMMo🚀oooo🚀M🚀MooéoMoo M🚀 🚀é" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x760651275c907bcFe3fC1821593209d066199BeE" + }, + { + "type": "string", + "value": "Moo é🚀o o éMéooM o🚀oo 🚀 éoééM🚀ééMo" + }, + { + "type": "hexstring", + "value": "0x83" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x8c0dee3098386c2a12eac0998fe3c821ab" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "51218234366483015623190454520378042501219207103170342528510830228156385319185" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x219a9256702CFFde8a7167C375CAe87693f8F1bc" + }, + { + "type": "address", + "value": "0x10ccB1B04C29798637DC44ba715250bE76992D55" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀MéM🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀Mo 🚀o" + }, + { + "type": "hexstring", + "value": "0x09e53c8873a43144f2084ab81653020519c4" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éMMM🚀ooMééé🚀oM Mé🚀M éo M🚀o ooo ooé éooooo🚀o " + }, + { + "type": "string", + "value": "Moo é🚀o 🚀ooé🚀oéooéo Moé oéoéoé🚀🚀 🚀🚀o🚀Moé " + }, + { + "type": "hexstring", + "value": "0x53a8447f1b4d27d5443787ae4c4eb6a86729" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "address", + "value": "0x93e8cc862C19d690CC4dc8e6B34b0eE9081FB8D8" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éooMoéM é 🚀" + }, + { + "type": "hexstring", + "value": "0x81ccb8afe039" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + }, + { + "type": "number", + "value": "3385819309048819068409" + }, + { + "type": "address", + "value": "0xcBE700564f9485a4bFcd5Bc58338E75f20ec7D4c" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xbda5b11758c9356bf06d7ca48753a9c2bc52ce35c2175232ac6d771f0810" + }, + { + "type": "hexstring", + "value": "0xe24027977601c58970cfe867e546044e4ebe3dcf19ea72b5dbb464b75232" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xdbaf7267e852fb3c5e71c45e50735bf64f8290cf9dd99d6d1f1a23549c5f" + }, + { + "type": "hexstring", + "value": "0x2d9e63a2267b8f515d59fe8d63a3667fde49790dd9b242489891fa2107cd" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x9873d10c65d1e014ff4e05366a974196bdbd1e0229c10b615088f1d81e9f" + }, + { + "type": "hexstring", + "value": "0xccea08fa4183164b906fc3f7b0f08e66b34bd7a258056e1e5ad4afb14d6f" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x5db64d42155734f3f506079283ae7109dc6f2b11489065854cfc4becffbf" + }, + { + "type": "hexstring", + "value": "0xb5d8fe2f434b275fa14d9c0e7401f903f566c129849a5f5bb66677a6ebc5" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610c0a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610980565b60405180910390f35b610056610585565b61005e610585565b731402c626ddf0ee9bf5cb592baae2f0049452b551815261007d6105c8565b60408051808201909152600081526060602082015273af8227385f58c016164fca61ef525ed82971156281526040805160a08101909152606780825260009190610ad7602083013960208301525081526100ff6040805160a0810182526000808252606060208301819052928201819052918101829052608081019190915290565b73760651275c907bcfe3fc1821593209d066199bee81526040805160608101909152603780825260009190610aa06020830139602080840191909152608360f81b604084015260016060840152708c0dee3098386c2a12eac0998fe3c821ab60781b60808401528301919091525061017561066d565b7f713c7e4b652466138b07bc89332586c6f4aaf36cacb52b25f222398b9117d91181526101a0610683565b6101a86106a3565b73219a9256702cffde8a7167c375cae87693f8f1bc81527310ccb1b04c29798637dc44ba715250be76992d55602082015281526101e36106c1565b604080516060808201835280825260208083018281526000848601818152865180880188526016808252749adede418753e13f3501e13f35009b87529be13f3560571b8287015290875287518089018952908152754d6f6f20c3a9f09f9a80f09f9a804d6f20f09f9a806f60501b818601529092527102794f221ce90c513c8212ae0594c081467160721b90915292855283518083018552828152908101919091529182015260006040518060800160405280604d8152602001610b3e604d91398252506040805160808101909152604a80825260009190610b8b60208301396020830152507153a8447f1b4d27d5443787ae4c4eb6a8672960701b60408201528082600160209081029190910191909152838101929092525082015260408201527393e8cc862c19d690cc4dc8e6b34b0ee9081fb8d8606082015261036060405180604001604052806000151581526020016105c360408051608081018252606091810182815260009282018390528152602081019190915290565b600181526040805160808082018352606082840181815260008285018190529084526020808501828152865180880188528481528083018481528851808a018a52601c81527f4d6f6f20c3a9f09f9a80c3a96f6f4d6fc3a94d20c3a92020f09f9a80000000008186015282526581ccb8afe03960d01b9052865291909152808601939093529085019390935284019290925268b78bae92bd8963adf99183019190915273cbe700564f9485a4bfcd5bc58338e75f20ec7d4c90820152610424610702565b61042c6106a3565b7fbda5b11758c9356bf06d7ca48753a9c2bc52ce35c2175232ac6d771f0810000081527fe24027977601c58970cfe867e546044e4ebe3dcf19ea72b5dbb464b7523200006020820152815261047f6106a3565b7fdbaf7267e852fb3c5e71c45e50735bf64f8290cf9dd99d6d1f1a23549c5f000081527f2d9e63a2267b8f515d59fe8d63a3667fde49790dd9b242489891fa2107cd00006020808301919091528201526104d76106a3565b7f9873d10c65d1e014ff4e05366a974196bdbd1e0229c10b615088f1d81e9f000081527fccea08fa4183164b906fc3f7b0f08e66b34bd7a258056e1e5ad4afb14d6f00006020820152604082015261052d6106a3565b7f5db64d42155734f3f506079283ae7109dc6f2b11489065854cfc4becffbf000081527fb5d8fe2f434b275fa14d9c0e7401f903f566c129849a5f5bb66677a6ebc50000602082015260608201526080820152919050565b6040518060a0016040528060006001600160a01b031681526020016105a86105c8565b815260006020820181905260408201526060016105c3610702565b905290565b6040805160e08101909152600060a08201908152606060c0830152819081526040805160a08101825260008082526060602083810182905293830182905282018190526080820152910190815260200161062061066d565b8152600060208201526040016105c360405180604001604052806000151581526020016105c360408051608081018252606091810182815260009282018390528152602081019190915290565b6040518060400160405280600081526020016105c35b60405180604001604052806106966106a3565b81526020016105c36106c1565b60405180604001604052806002906020820280368337509192915050565b60405180604001604052806002905b604080516060808201835280825260208201526000918101919091528152602001906001900390816106d05790505090565b60405180608001604052806004905b6107196106a3565b8152602001906001900390816107115790505090565b6000815180845260005b8181101561075557602081850181015186830182015201610739565b81811115610767576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0381511682526000602082015160a060208501526107a360a085018261072f565b6040848101516001600160f81b031916908601526060808501511515908601526080938401516effffffffffffffffffffffffffffff191693909401929092525090919050565b8051825260208082015160408285018190528151600093919290919060a08701858886015b60028210156108375785516001600160a01b031681529484019460019190910190840161080f565b5050908201516060608089018190529093509060e088019060005b60028110156108bd57898303609f19018252855180518585526108778686018261072f565b9050868201518582038887015261088e828261072f565b928a01516dffffffffffffffffffffffffffff1916958a01959095525095850195925090840190600101610852565b509098975050505050505050565b805115158252600060208201516040602085015280516040808601528051604060808701526108fd60c087018261072f565b6020928301516001600160d01b03191660a0880152929091015115156060909501949094529392505050565b806000805b600481101561097957825185835b600281101561096057825161ffff191682526020928301929091019060010161093c565b505050604094909401936020929092019160010161092e565b5050505050565b60208152600060018060a01b0380845116602084015260208401516101806040850152805160a06101a086015282815116610240860152602081015192505060406102608501526109d561028085018361072f565b9150602081015161019f1980868503016101c08701526109f5848361077c565b93506040830151915080868503016101e0870152610a1384836107ea565b935060608301519150610a326102008701836001600160a01b03169052565b6080830151925080868503016102208701525050610a5082826108cb565b9150506040840151610a6f606085018268ffffffffffffffffff169052565b5060608401516001600160a01b0381166080850152506080840151610a9760a0850182610929565b50939250505056fe4d6f6f20c3a9f09f9a806f206f20c3a94dc3a96f6f4d20206ff09f9a806f6f20f09f9a8020c3a96fc3a9c3a94df09f9a80c3a9c3a94d6f4d6f6f20c3a9f09f9a804d204d4df09f9a80f09f9a806f4dc3a96f6f6f6ff09f9a804df09f9a80f09f9a804d20f09f9a806f4df09f9a804d6f4d4d4d6ff09f9a806f6f6f6ff09f9a804df09f9a804d6f6fc3a96f4d6f6f20204df09f9a80202020f09f9a80c3a94d6f6f20c3a9f09f9a80c3a94d4d4df09f9a806f6f4dc3a9c3a9c3a9f09f9a806f4d204dc3a9f09f9a804d20c3a96f204df09f9a806f206f6f6f206f6fc3a920c3a96f6f6f6f6ff09f9a806f204d6f6f20c3a9f09f9a806f20f09f9a806f6fc3a9f09f9a806fc3a96f6fc3a96f204d6fc3a9206fc3a96fc3a96fc3a9f09f9a80f09f9a8020f09f9a80f09f9a806ff09f9a804d6fc3a920a26469706673582212206c3ab3e240569357d939b01bdc14531bbc1df63fb90abe98ac96d394316485f064736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_8090aaf4 {\n address s_0;\n string s_1;\n }\n\n struct S_cf82b2b3 {\n address s_0;\n string s_1;\n bytes1 s_2;\n bool s_3;\n bytes17 s_4;\n }\n\n struct S_2324a664 {\n string s_0;\n string s_1;\n bytes18 s_2;\n }\n\n struct S_6af640d4 {\n address[2] s_0;\n S_2324a664[2] s_1;\n }\n\n struct S_46ffbd1d {\n uint256 s_0;\n S_6af640d4 s_1;\n }\n\n struct S_55549d31 {\n string s_0;\n bytes6 s_1;\n }\n\n struct S_10fc8101 {\n S_55549d31 s_0;\n bool s_1;\n }\n\n struct S_d8d727d8 {\n bool s_0;\n S_10fc8101 s_1;\n }\n\n struct S_56a0350c {\n S_8090aaf4 s_0;\n S_cf82b2b3 s_1;\n S_46ffbd1d s_2;\n address s_3;\n S_d8d727d8 s_4;\n }\n\n struct S_c58b7dc9 {\n address s_0;\n S_56a0350c s_1;\n uint72 s_2;\n address s_3;\n bytes30[2][4] s_4;\n }\n\n function test () public pure returns (S_c58b7dc9 memory) {\n S_c58b7dc9 memory r;\n {\n address r_0 = 0x1402C626ddF0ee9bF5Cb592Baae2f0049452b551;\n r.s_0 = r_0;\n }\n {\n S_56a0350c memory r_1;\n {\n S_8090aaf4 memory r_1_0;\n {\n address r_1_0_0 = 0xAF8227385f58C016164fcA61eF525Ed829711562;\n r_1_0.s_0 = r_1_0_0;\n }\n {\n string memory r_1_0_1 = unicode\"Moo é🚀M MM🚀🚀oMéoooo🚀M🚀🚀M 🚀oM🚀MoMMMo🚀oooo🚀M🚀MooéoMoo M🚀 🚀é\";\n r_1_0.s_1 = r_1_0_1;\n }\n r_1.s_0 = r_1_0;\n }\n {\n S_cf82b2b3 memory r_1_1;\n {\n address r_1_1_0 = 0x760651275c907bcFe3fC1821593209d066199BeE;\n r_1_1.s_0 = r_1_1_0;\n }\n {\n string memory r_1_1_1 = unicode\"Moo é🚀o o éMéooM o🚀oo 🚀 éoééM🚀ééMo\";\n r_1_1.s_1 = r_1_1_1;\n }\n {\n bytes1 r_1_1_2 = bytes1(0x83);\n r_1_1.s_2 = r_1_1_2;\n }\n {\n bool r_1_1_3 = true;\n r_1_1.s_3 = r_1_1_3;\n }\n {\n bytes17 r_1_1_4 = bytes17(0x8c0dee3098386c2a12eac0998fe3c821ab);\n r_1_1.s_4 = r_1_1_4;\n }\n r_1.s_1 = r_1_1;\n }\n {\n S_46ffbd1d memory r_1_2;\n {\n uint r_1_2_0 = 51218234366483015623190454520378042501219207103170342528510830228156385319185;\n r_1_2.s_0 = r_1_2_0;\n }\n {\n S_6af640d4 memory r_1_2_1;\n {\n address[2] memory r_1_2_1_0;\n {\n address r_1_2_1_0_0 = 0x219a9256702CFFde8a7167C375CAe87693f8F1bc;\n r_1_2_1_0[0] = r_1_2_1_0_0;\n }\n {\n address r_1_2_1_0_1 = 0x10ccB1B04C29798637DC44ba715250bE76992D55;\n r_1_2_1_0[1] = r_1_2_1_0_1;\n }\n r_1_2_1.s_0 = r_1_2_1_0;\n }\n {\n S_2324a664[2] memory r_1_2_1_1;\n {\n S_2324a664 memory r_1_2_1_1_0;\n {\n string memory r_1_2_1_1_0_0 = unicode\"Moo é🚀🚀MéM🚀\";\n r_1_2_1_1_0.s_0 = r_1_2_1_1_0_0;\n }\n {\n string memory r_1_2_1_1_0_1 = unicode\"Moo é🚀🚀Mo 🚀o\";\n r_1_2_1_1_0.s_1 = r_1_2_1_1_0_1;\n }\n {\n bytes18 r_1_2_1_1_0_2 = bytes18(0x09e53c8873a43144f2084ab81653020519c4);\n r_1_2_1_1_0.s_2 = r_1_2_1_1_0_2;\n }\n r_1_2_1_1[0] = r_1_2_1_1_0;\n }\n {\n S_2324a664 memory r_1_2_1_1_1;\n {\n string memory r_1_2_1_1_1_0 = unicode\"Moo é🚀éMMM🚀ooMééé🚀oM Mé🚀M éo M🚀o ooo ooé éooooo🚀o \";\n r_1_2_1_1_1.s_0 = r_1_2_1_1_1_0;\n }\n {\n string memory r_1_2_1_1_1_1 = unicode\"Moo é🚀o 🚀ooé🚀oéooéo Moé oéoéoé🚀🚀 🚀🚀o🚀Moé \";\n r_1_2_1_1_1.s_1 = r_1_2_1_1_1_1;\n }\n {\n bytes18 r_1_2_1_1_1_2 = bytes18(0x53a8447f1b4d27d5443787ae4c4eb6a86729);\n r_1_2_1_1_1.s_2 = r_1_2_1_1_1_2;\n }\n r_1_2_1_1[1] = r_1_2_1_1_1;\n }\n r_1_2_1.s_1 = r_1_2_1_1;\n }\n r_1_2.s_1 = r_1_2_1;\n }\n r_1.s_2 = r_1_2;\n }\n {\n address r_1_3 = 0x93e8cc862C19d690CC4dc8e6B34b0eE9081FB8D8;\n r_1.s_3 = r_1_3;\n }\n {\n S_d8d727d8 memory r_1_4;\n {\n bool r_1_4_0 = true;\n r_1_4.s_0 = r_1_4_0;\n }\n {\n S_10fc8101 memory r_1_4_1;\n {\n S_55549d31 memory r_1_4_1_0;\n {\n string memory r_1_4_1_0_0 = unicode\"Moo é🚀éooMoéM é 🚀\";\n r_1_4_1_0.s_0 = r_1_4_1_0_0;\n }\n {\n bytes6 r_1_4_1_0_1 = bytes6(0x81ccb8afe039);\n r_1_4_1_0.s_1 = r_1_4_1_0_1;\n }\n r_1_4_1.s_0 = r_1_4_1_0;\n }\n {\n bool r_1_4_1_1 = false;\n r_1_4_1.s_1 = r_1_4_1_1;\n }\n r_1_4.s_1 = r_1_4_1;\n }\n r_1.s_4 = r_1_4;\n }\n r.s_1 = r_1;\n }\n {\n uint72 r_2 = 3385819309048819068409;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0xcBE700564f9485a4bFcd5Bc58338E75f20ec7D4c;\n r.s_3 = r_3;\n }\n {\n bytes30[2][4] memory r_4;\n {\n bytes30[2] memory r_4_0;\n {\n bytes30 r_4_0_0 = bytes30(0xbda5b11758c9356bf06d7ca48753a9c2bc52ce35c2175232ac6d771f0810);\n r_4_0[0] = r_4_0_0;\n }\n {\n bytes30 r_4_0_1 = bytes30(0xe24027977601c58970cfe867e546044e4ebe3dcf19ea72b5dbb464b75232);\n r_4_0[1] = r_4_0_1;\n }\n r_4[0] = r_4_0;\n }\n {\n bytes30[2] memory r_4_1;\n {\n bytes30 r_4_1_0 = bytes30(0xdbaf7267e852fb3c5e71c45e50735bf64f8290cf9dd99d6d1f1a23549c5f);\n r_4_1[0] = r_4_1_0;\n }\n {\n bytes30 r_4_1_1 = bytes30(0x2d9e63a2267b8f515d59fe8d63a3667fde49790dd9b242489891fa2107cd);\n r_4_1[1] = r_4_1_1;\n }\n r_4[1] = r_4_1;\n }\n {\n bytes30[2] memory r_4_2;\n {\n bytes30 r_4_2_0 = bytes30(0x9873d10c65d1e014ff4e05366a974196bdbd1e0229c10b615088f1d81e9f);\n r_4_2[0] = r_4_2_0;\n }\n {\n bytes30 r_4_2_1 = bytes30(0xccea08fa4183164b906fc3f7b0f08e66b34bd7a258056e1e5ad4afb14d6f);\n r_4_2[1] = r_4_2_1;\n }\n r_4[2] = r_4_2;\n }\n {\n bytes30[2] memory r_4_3;\n {\n bytes30 r_4_3_0 = bytes30(0x5db64d42155734f3f506079283ae7109dc6f2b11489065854cfc4becffbf);\n r_4_3[0] = r_4_3_0;\n }\n {\n bytes30 r_4_3_1 = bytes30(0xb5d8fe2f434b275fa14d9c0e7401f903f566c129849a5f5bb66677a6ebc5);\n r_4_3[1] = r_4_3_1;\n }\n r_4[3] = r_4_3;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000001402c626ddf0ee9bf5cb592baae2f0049452b55100000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000b78bae92bd8963adf9000000000000000000000000cbe700564f9485a4bfcd5bc58338e75f20ec7d4cbda5b11758c9356bf06d7ca48753a9c2bc52ce35c2175232ac6d771f08100000e24027977601c58970cfe867e546044e4ebe3dcf19ea72b5dbb464b752320000dbaf7267e852fb3c5e71c45e50735bf64f8290cf9dd99d6d1f1a23549c5f00002d9e63a2267b8f515d59fe8d63a3667fde49790dd9b242489891fa2107cd00009873d10c65d1e014ff4e05366a974196bdbd1e0229c10b615088f1d81e9f0000ccea08fa4183164b906fc3f7b0f08e66b34bd7a258056e1e5ad4afb14d6f00005db64d42155734f3f506079283ae7109dc6f2b11489065854cfc4becffbf0000b5d8fe2f434b275fa14d9c0e7401f903f566c129849a5f5bb66677a6ebc5000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000028000000000000000000000000093e8cc862c19d690cc4dc8e6b34b0ee9081fb8d800000000000000000000000000000000000000000000000000000000000005a0000000000000000000000000af8227385f58c016164fca61ef525ed829711562000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000674d6f6f20c3a9f09f9a804d204d4df09f9a80f09f9a806f4dc3a96f6f6f6ff09f9a804df09f9a80f09f9a804d20f09f9a806f4df09f9a804d6f4d4d4d6ff09f9a806f6f6f6ff09f9a804df09f9a804d6f6fc3a96f4d6f6f20204df09f9a80202020f09f9a80c3a900000000000000000000000000000000000000000000000000000000000000000000000000760651275c907bcfe3fc1821593209d066199bee00000000000000000000000000000000000000000000000000000000000000a0830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018c0dee3098386c2a12eac0998fe3c821ab00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374d6f6f20c3a9f09f9a806f206f20c3a94dc3a96f6f4d20206ff09f9a806f6f20f09f9a8020c3a96fc3a9c3a94df09f9a80c3a9c3a94d6f000000000000000000713c7e4b652466138b07bc89332586c6f4aaf36cacb52b25f222398b9117d9110000000000000000000000000000000000000000000000000000000000000040000000000000000000000000219a9256702cffde8a7167c375cae87693f8f1bc00000000000000000000000010ccb1b04c29798637dc44ba715250be76992d55000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a009e53c8873a43144f2084ab81653020519c4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a80f09f9a804dc3a94df09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a80f09f9a804d6f20f09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e053a8447f1b4d27d5443787ae4c4eb6a867290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a80c3a94d4d4df09f9a806f6f4dc3a9c3a9c3a9f09f9a806f4d204dc3a9f09f9a804d20c3a96f204df09f9a806f206f6f6f206f6fc3a920c3a96f6f6f6f6ff09f9a806f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a806f20f09f9a806f6fc3a9f09f9a806fc3a96f6fc3a96f204d6fc3a9206fc3a96fc3a96fc3a9f09f9a80f09f9a8020f09f9a80f09f9a806ff09f9a804d6fc3a920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004081ccb8afe0390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80c3a96f6f4d6fc3a94d20c3a92020f09f9a8000000000" + }, + { + "name": "random-(string,(bytes25[3],string,((address,(bytes12,bytes2[4],(address,bytes20,string,string),address),(bool,bytes2,address,bytes23)[2],bytes19,uint[3][1]),bool,bool,address))[])", + "type": "(string,(bytes25[3],string,((address,(bytes12,bytes2[4],(address,bytes20,string,string),address),(bool,bytes2,address,bytes23)[2],bytes19,uint[3][1]),bool,bool,address))[])", + "value": ["Moo é🚀éoé🚀🚀o🚀o ooMo 🚀🚀MooMoo oooM🚀🚀 🚀 é🚀🚀éM🚀 é ", []], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éoé🚀🚀o🚀o ooMo 🚀🚀MooMoo oooM🚀🚀 🚀 é🚀🚀éM🚀 é " + }, + { + "type": "array", + "value": [] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610689806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906103f8565b60405180910390f35b6040805180820190915260608082526020820152604080518082019091526060808252602082015260006040518060800160405280605981526020016105fb6059913982525060408051600080825260208201909252816100c5565b6100b26100d1565b8152602001906001900390816100aa5790505b50602083015250919050565b60405180606001604052806100e46100fd565b8152602001606081526020016100f861011b565b905290565b60405180606001604052806003906020820280368337509192915050565b604051806080016040528061012e610149565b81526000602082018190526040820181905260609091015290565b6040518060a0016040528060006001600160a01b0316815260200161016c61018d565b81526020016101796101f8565b8152600060208201526040016100f861023e565b604080516080810190915260008152602081016101a861026b565b81526020016101eb604051806080016040528060006001600160a01b0316815260200160006001600160601b031916815260200160608152602001606081525090565b8152600060209091015290565b60405180604001604052806002905b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816102075790505090565b60405180602001604052806001905b6102556100fd565b81526020019060019003908161024d5790505090565b60405180608001604052806004906020820280368337509192915050565b6000815180845260005b818110156102af57602081850181015186830182015201610293565b818111156102c1576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0381511682526001600160601b0319602082015116602083015260006040820151608060408501526103116080850182610289565b90506060830151848203606086015261032a8282610289565b95945050505050565b8060005b600281101561039a5781518051151585526020808201516001600160f01b031916818701526040808301516001600160a01b03169087015260609182015168ffffffffffffffffff19169186019190915260809094019390910190600101610337565b50505050565b806000805b60018082106103b457506103f1565b835186845b60038110156103d757825182526020928301929091019083016103b9565b5050506060959095019450602092909201916001016103a5565b5050505050565b600060208083528351604080838601526104156060860183610289565b83870151601f1987830381018489015281518084529294509085019184860190600581901b8601870160005b828110156105eb5787820385018452855180518360005b600381101561047f57825166ffffffffffffff19168252918c0191908c0190600101610458565b5050508981015160a0606085015261049a60a0850182610289565b9050888201519150838103608085015281516080825260018060a01b0381511660808301528b8101516101c060a08401526001600160601b0360a01b8151166102408401528c810151610260840160005b60048110156105125782516001600160f01b0319168252918f0191908f01906001016104eb565b5050508a81015160e06102e085015261052f6103208501826102d6565b90506060820151915061054e6103008501836001600160a01b03169052565b8b830151915061056160c0850183610333565b60608301516cffffffffffffffffffffffffff1981166101c08601529150608083015192506105946101e08501846103a0565b8d85015192506105a78e85018415159052565b848c0151801515858e01529250606085015194506105d060608501866001600160a01b03169052565b998d0199978d01979550505060019290920191506104419050565b509a995050505050505050505056fe4d6f6f20c3a9f09f9a80c3a96fc3a9f09f9a80f09f9a806ff09f9a806f206f6f4d6f20f09f9a80f09f9a804d6f6f4d6f6f206f6f6f4df09f9a80f09f9a8020f09f9a8020c3a9f09f9a80f09f9a80c3a94df09f9a8020c3a920a2646970667358221220026f16a8fbae1729ced7905024c97617fcec17daed3fdcea38b1836e3bfad5a364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_f8094b90 {\n address s_0;\n bytes20 s_1;\n string s_2;\n string s_3;\n }\n\n struct S_7c217ce2 {\n bytes12 s_0;\n bytes2[4] s_1;\n S_f8094b90 s_2;\n address s_3;\n }\n\n struct S_3d66157d {\n bool s_0;\n bytes2 s_1;\n address s_2;\n bytes23 s_3;\n }\n\n struct S_ece03302 {\n address s_0;\n S_7c217ce2 s_1;\n S_3d66157d[2] s_2;\n bytes19 s_3;\n uint256[3][1] s_4;\n }\n\n struct S_c2ca3a8c {\n S_ece03302 s_0;\n bool s_1;\n bool s_2;\n address s_3;\n }\n\n struct S_4ef1ba24 {\n bytes25[3] s_0;\n string s_1;\n S_c2ca3a8c s_2;\n }\n\n struct S_c8bf7526 {\n string s_0;\n S_4ef1ba24[] s_1;\n }\n\n function test () public pure returns (S_c8bf7526 memory) {\n S_c8bf7526 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀éoé🚀🚀o🚀o ooMo 🚀🚀MooMoo oooM🚀🚀 🚀 é🚀🚀éM🚀 é \";\n r.s_0 = r_0;\n }\n {\n S_4ef1ba24[] memory r_1 = new S_4ef1ba24[](0);\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a80c3a96fc3a9f09f9a80f09f9a806ff09f9a806f206f6f4d6f20f09f9a80f09f9a804d6f6f4d6f6f206f6f6f4df09f9a80f09f9a8020f09f9a8020c3a9f09f9a80f09f9a80c3a94df09f9a8020c3a920000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(address[2],uint176,(string[],bytes22,string,bool)[],((bool,uint),string,(uint80,bool,bool,address,string[1])),((((bool),address[2],string,address)[1],string,string))[])", + "type": "(address[2],uint176,(string[],bytes22,string,bool)[],((bool,uint),string,(uint80,bool,bool,address,string[1])),((((bool),address[2],string,address)[1],string,string))[])", + "value": [ + [ + "0x8987Fa2Aac46D8A11EB87fcf9890458e8936cA61", + "0x8FB5F6650fCCc0efF26E28023fDCcEdF14E9864f" + ], + "23551615400437493761736304982846751570286021631936031", + [ + [ + [ + "Moo é🚀ééééMMo🚀 M M o 🚀MooMooMé é oMoo🚀 ooM ", + "Moo é🚀oé🚀Mé🚀é o 🚀 Méo🚀éo🚀oéoo🚀ooéM 🚀ééo🚀🚀ooo🚀M oé oM MM🚀o🚀", + "Moo é🚀oé oMoo🚀🚀é 🚀 o Méoé M🚀éMé🚀oMMéé 🚀ooMooMéo🚀ooo🚀", + "Moo é🚀 M é🚀 oo🚀é éé🚀éo🚀🚀oooé 🚀oo ooMo🚀🚀o oo🚀 éoM🚀Mo🚀o " + ], + "0x0062ec78ccc1d6cf069994e17f8dc5eee150a1b73e1b", + "Moo é🚀ooooéoo", + false + ], + [ + ["Moo é🚀", "Moo é🚀🚀🚀oMé🚀 ééoM"], + "0xe5af7aaaa13f22fdd79717d099f1dfbc1e52009637c3", + "Moo é🚀🚀o", + true + ], + [ + [ + "Moo é🚀MMéo oé🚀éooé", + "Moo é🚀🚀 M o oé🚀M🚀M 🚀éooooM ooo🚀o ooMo oé🚀MéMé" + ], + "0xeea4cf9e6327c5a205fa57df9274b86d7b60e0dee4ee", + "Moo é🚀éoooo", + true + ] + ], + [ + [ + false, + "89574471288993514935650399801903430075700747180448827236201756264800791061895" + ], + "Moo é🚀ooooMMéooé ", + [ + "704687446297847473298686", + true, + true, + "0xe300e43bfe36527aB16931Ccf646B4eabbF81246", + ["Moo é🚀é M🚀M🚀MéoooéM MooéMoo"] + ] + ], + [ + [ + [ + [ + [ + [true], + [ + "0x9a12Aee3f664507C566B273D2F4Eb9d4D03D4180", + "0x7a8ec8105d60F71C3ACc92C64875b1aDFd837357" + ], + "Moo é🚀 Moooo🚀ooM o🚀éo o ", + "0x4Ff681175143029B6A6e00996aCE1Cac634c500d" + ] + ], + "Moo é🚀 🚀🚀oooMMéooo🚀🚀éMéé🚀ooéooMM Moo", + "Moo é🚀oM🚀🚀o o🚀 🚀o🚀🚀éoooM 🚀🚀Mé🚀🚀M🚀o M 🚀éoéM" + ] + ], + [ + [ + [ + [ + [false], + [ + "0x3bE888F6540fc4d78187206A53276E9abbab9c3c", + "0xDdBAF99c86C79633d1D34258Ac54a2e3502Fd71e" + ], + "Moo é🚀oMM🚀oMéMéooMoé Mo 🚀🚀M", + "0x32d1e9fc919125BbF9Fc8F78F830bA808876041A" + ] + ], + "Moo é🚀🚀🚀🚀🚀oéoMMM🚀o🚀ooo🚀oooMoMooéMM🚀MM éoé🚀éM Moo", + "Moo é🚀 éMooé M🚀 🚀éM oéMM🚀éMoo" + ] + ], + [ + [ + [ + [ + [false], + [ + "0xBDB6d879236A1Ff7Ab89120daE1BA21Abe245973", + "0x9246B3dCCEFB80d4Ed0c4C2051B22CA015483bFa" + ], + "Moo é🚀o M🚀é🚀M oMM M🚀oo MoMMo🚀o oo 🚀M🚀🚀éM", + "0x9BCBB647735eCabbE7c31DA582D12d6726Dfd589" + ] + ], + "Moo é🚀", + "Moo é🚀 éooM o🚀 🚀oé🚀🚀M🚀Méoo🚀🚀oMoé oM M 🚀é o🚀" + ] + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x8987Fa2Aac46D8A11EB87fcf9890458e8936cA61" + }, + { + "type": "address", + "value": "0x8FB5F6650fCCc0efF26E28023fDCcEdF14E9864f" + } + ] + }, + { + "type": "number", + "value": "23551615400437493761736304982846751570286021631936031" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ééééMMo🚀 M M o 🚀MooMooMé é oMoo🚀 ooM " + }, + { + "type": "string", + "value": "Moo é🚀oé🚀Mé🚀é o 🚀 Méo🚀éo🚀oéoo🚀ooéM 🚀ééo🚀🚀ooo🚀M oé oM MM🚀o🚀" + }, + { + "type": "string", + "value": "Moo é🚀oé oMoo🚀🚀é 🚀 o Méoé M🚀éMé🚀oMMéé 🚀ooMooMéo🚀ooo🚀" + }, + { + "type": "string", + "value": "Moo é🚀 M é🚀 oo🚀é éé🚀éo🚀🚀oooé 🚀oo ooMo🚀🚀o oo🚀 éoM🚀Mo🚀o " + } + ] + }, + { + "type": "hexstring", + "value": "0x0062ec78ccc1d6cf069994e17f8dc5eee150a1b73e1b" + }, + { + "type": "string", + "value": "Moo é🚀ooooéoo" + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀oMé🚀 ééoM" + } + ] + }, + { + "type": "hexstring", + "value": "0xe5af7aaaa13f22fdd79717d099f1dfbc1e52009637c3" + }, + { + "type": "string", + "value": "Moo é🚀🚀o" + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MMéo oé🚀éooé" + }, + { + "type": "string", + "value": "Moo é🚀🚀 M o oé🚀M🚀M 🚀éooooM ooo🚀o ooMo oé🚀MéMé" + } + ] + }, + { + "type": "hexstring", + "value": "0xeea4cf9e6327c5a205fa57df9274b86d7b60e0dee4ee" + }, + { + "type": "string", + "value": "Moo é🚀éoooo" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "89574471288993514935650399801903430075700747180448827236201756264800791061895" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooooMMéooé " + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "704687446297847473298686" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xe300e43bfe36527aB16931Ccf646B4eabbF81246" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é M🚀M🚀MéoooéM MooéMoo" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x9a12Aee3f664507C566B273D2F4Eb9d4D03D4180" + }, + { + "type": "address", + "value": "0x7a8ec8105d60F71C3ACc92C64875b1aDFd837357" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 Moooo🚀ooM o🚀éo o " + }, + { + "type": "address", + "value": "0x4Ff681175143029B6A6e00996aCE1Cac634c500d" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 🚀🚀oooMMéooo🚀🚀éMéé🚀ooéooMM Moo" + }, + { + "type": "string", + "value": "Moo é🚀oM🚀🚀o o🚀 🚀o🚀🚀éoooM 🚀🚀Mé🚀🚀M🚀o M 🚀éoéM" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x3bE888F6540fc4d78187206A53276E9abbab9c3c" + }, + { + "type": "address", + "value": "0xDdBAF99c86C79633d1D34258Ac54a2e3502Fd71e" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oMM🚀oMéMéooMoé Mo 🚀🚀M" + }, + { + "type": "address", + "value": "0x32d1e9fc919125BbF9Fc8F78F830bA808876041A" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀🚀🚀oéoMMM🚀o🚀ooo🚀oooMoMooéMM🚀MM éoé🚀éM Moo" + }, + { + "type": "string", + "value": "Moo é🚀 éMooé M🚀 🚀éM oéMM🚀éMoo" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xBDB6d879236A1Ff7Ab89120daE1BA21Abe245973" + }, + { + "type": "address", + "value": "0x9246B3dCCEFB80d4Ed0c4C2051B22CA015483bFa" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o M🚀é🚀M oMM M🚀oo MoMMo🚀o oo 🚀M🚀🚀éM" + }, + { + "type": "address", + "value": "0x9BCBB647735eCabbE7c31DA582D12d6726Dfd589" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀 éooM o🚀 🚀oé🚀🚀M🚀Méoo🚀🚀oMoé oM M 🚀é o🚀" + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b506113af806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610e07565b60405180910390f35b610056610a29565b61005e610a29565b610066610a64565b738987fa2aac46d8a11eb87fcf9890458e8936ca618152738fb5f6650fccc0eff26e28023fdccedf14e9864f602080830191909152908252753ef2ab4fc6aba6c5a5c845bc009cfa6fe96854da061f9082015260408051600380825260808201909252600091816020015b604080516080810182526060808252600060208084018290529383018290529082015282526000199092019101816100d157505060408051608081018252606080825260006020830181905292820181905281019190915290915060408051600480825260a08201909252600091816020015b606081526020019060019003908161014457905050905060006040518060600160405280603e8152602001611147603e91399050808260008151811061018c5761018c610f6d565b60200260200101819052505060006040518060a00160405280606c81526020016111b5606c9139905080826001815181106101c9576101c9610f6d565b60200260200101819052505060006040518060800160405280605a8152602001611288605a91399050808260028151811061020657610206610f6d565b60200260200101819052505060006040518060a00160405280606381526020016110e4606391399050808260038151811061024357610243610f6d565b602090810291909101810191909152918352507462ec78ccc1d6cf069994e17f8dc5eee150a1b73e1b60501b8282015260408051808201825260128152714d6f6f20c3a9f09f9a806f6f6f6fc3a96f6f60701b928101929092528201526000606082018190528251829184916102bb576102bb610f6d565b6020026020010181905250506102f160408051608081018252606080825260006020830181905292820181905281019190915290565b60408051600280825260608201909252600091816020015b606081526020019060019003908161030957905050905060006040518060400160405280600a8152602001689adede418753e13f3560b71b8152509050808260008151811061035a5761035a610f6d565b6020026020010181905250506000604051806060016040528060218152602001610f84602191399050808260018151811061039757610397610f6d565b6020908102919091018101919091529183525075e5af7aaaa13f22fdd79717d099f1dfbc1e52009637c360501b82820152604080518082018252600f81526e4d6f6f20c3a9f09f9a80f09f9a806f60881b92810192909252820152600160608201819052825182918491811061040f5761040f610f6d565b60200260200101819052505061044560408051608081018252606080825260006020830181905292820181905281019190915290565b60408051600280825260608201909252600091816020015b606081526020019060019003908161045d57905050905060006040518060400160405280601d81526020017f4d6f6f20c3a9f09f9a804d4dc3a96f206fc3a9f09f9a80c3a96f6fc3a9000000815250905080826000815181106104c2576104c2610f6d565b602002602001018190525050600060405180608001604052806049815260200161109b60499139905080826001815181106104ff576104ff610f6d565b6020908102919091018101919091529183525075775267cf3193e2d102fd2befc93a5c36bdb0706f727760511b82820152604080518082018252601081526f4d6f6f20c3a9f09f9a80c3a96f6f6f6f60801b9281019290925282015260016060820152815181908390600290811061057957610579610f6d565b6020908102919091010152506040820152610592610a82565b604080518082018252600081527fc6095aa67f4103da21fc8f07759d641764c85c620a8028c86e466cac1b4c65876020808301919091529083528151808301909252601782527f4d6f6f20c3a9f09f9a806f6f6f6f4d4dc3a96f6fc3a92000000000000000000082820152820152610608610ab6565b6995392ed9bdc98406dcfe8152600160208201819052604082015273e300e43bfe36527ab16931ccf646b4eabbf812466060820152610645610ae2565b6000604051806060016040528060298152602001610fa560299139825250608082810191909152604083810192909252606084019290925280516003808252928101909152600091816020015b61069a610b09565b8152602001906001900390816106925790505090506106b7610b09565b6106bf610b18565b6106c7610b3f565b6106cf610b6c565b60408051602081019091526001815281526106e8610a64565b739a12aee3f664507c566b273d2f4eb9d4d03d41808152737a8ec8105d60f71c3acc92c64875b1adfd837357602080830191909152828101919091526040805160608101909152602380825260009261107890830139604083810191909152734ff681175143029b6a6e00996ace1cac634c500d606080850191909152928452928452508151908101909152603c8082526000919061124c60208301399050808260200181905250506000604051806080016040528060588152602001610fce6058913960408301525081528151819083906000906107c9576107c9610f6d565b6020026020010181905250506107dd610b09565b6107e5610b18565b6107ed610b3f565b6107f5610b6c565b604080516020810190915260008152815261080e610a64565b733be888f6540fc4d78187206a53276e9abbab9c3c815273ddbaf99c86c79633d1d34258ac54a2e3502fd71e602080830191909152828101919091526040805160608101909152602b808252600092611221908301396040838101919091527332d1e9fc919125bbf9fc8f78f830ba808876041a6060840152918352509082528051608081019091526054808252600091906112e26020830139905080826020018190525050600060405180606001604052806030815260200161118560309139604083015250815281518190839060019081106108ee576108ee610f6d565b602002602001018190525050610902610b09565b61090a610b18565b610912610b3f565b61091a610b6c565b6040805160208101909152600081528152610933610a64565b73bdb6d879236a1ff7ab89120dae1ba21abe2459738152739246b3dccefb80d4ed0c4c2051b22ca015483bfa602080830191909152828101919091526040805160808101909152604480825260009261133690830139604083810191909152739bcbb647735ecabbe7c31da582d12d6726dfd58960608401529183525090825280518082018252600a8152689adede418753e13f3560b71b602082810191909152838101919091528151608081019092526052808352600092916110269083013960408301525081528151819083906002908110610a1357610a13610f6d565b6020908102919091010152506080820152919050565b6040518060a00160405280610a3c610a64565b81526000602082015260606040820181905201610a57610a82565b8152602001606081525090565b60405180604001604052806002906020820280368337509192915050565b6040805160a0810182526000606080830182815260808401929092529082526020820152908101610ab1610ab6565b905290565b6040805160a081018252600080825260208201819052918101829052606081019190915260808101610ab15b60405180602001604052806001905b6060815260200190600190039081610af15790505090565b6040518060200160405280610ab15b6040518060600160405280610b2b610b3f565b815260200160608152602001606081525090565b60405180602001604052806001905b610b56610b6c565b815260200190600190039081610b4e5790505090565b6040805160a08101909152600060808201908152815260208101610b8e610a64565b815260606020820152600060409091015290565b8060005b6002811015610bce5781516001600160a01b0316845260209384019390910190600101610ba6565b50505050565b6000815180845260005b81811015610bfa57602081850181015186830182015201610bde565b81811115610c0c576000602083870101525b50601f01601f19169290920160200192915050565b600081518051151584526020808201518186015280840151915060806040860152610c4f6080860183610bd4565b91506040840151858303606087015260a0830169ffffffffffffffffffff82511684528282015115158385015260408201511515604085015260018060a01b0360608301511660608501526080820151915060a060808501528081905060c08501915060005b6001811015610ce457609f19868403018252610cd2838551610bd4565b93850193925090840190600101610cb5565b5090979650505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015610dfa5782840389528151518585528051606087870181905260809160a091838901838a0160005b6001811015610da3578b8203607f190183528451805151151583528d810151610d668f850182610ba2565b5060408101518786850152610d7d88850182610bd4565b918601516001600160a01b031693890193909352948d0194928d01929150600101610d3b565b508b8701519550601f19945060409350848b820301848c0152610dc68187610bd4565b955050508185015194508289850301818a0152505050610de68183610bd4565b9a87019a9550505090840190600101610d0f565b5091979650505050505050565b6000602080835260e08301610e1f8285018651610ba2565b818501516001600160b01b031660608581019190915260408087015160c0608080890191909152815194859052610100600586901b890181019593949392870192908901906000805b82811015610f215760ff198c8a0301845285518051868b528051878c0181905260a0600582901b8d018101928e0191908d0190865b81811015610ecb57609f198f8603018352610eb9858551610bd4565b9450928f0192918f0191600101610e9d565b505050508b82015169ffffffffffffffffffff19168b8d0152898201518b82038b8d0152610ef98282610bd4565b928a01518015158d8c0152929150610f0e9050565b9950509489019492890192600101610e68565b50505050828901519550601f199350838886030160a0890152610f448587610c21565b9550808901519450505050808584030160c086015250610f648282610cf1565b95945050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a80f09f9a806f4dc3a9f09f9a8020c3a9c3a96f4d4d6f6f20c3a9f09f9a80c3a9204df09f9a804df09f9a804dc3a96f6f6fc3a94d204d6f6fc3a94d6f6f4d6f6f20c3a9f09f9a806f4df09f9a80f09f9a806f206ff09f9a80202020f09f9a806ff09f9a80f09f9a80c3a96f6f6f4d20f09f9a80f09f9a804dc3a9f09f9a80f09f9a804df09f9a806f204d20f09f9a80c3a96fc3a94d4d6f6f20c3a9f09f9a802020c3a96f6f4d206ff09f9a802020f09f9a806fc3a9f09f9a80f09f9a804df09f9a804dc3a96f6ff09f9a80f09f9a806f4d6fc3a9206f4d20204d20f09f9a80c3a9206ff09f9a804d6f6f20c3a9f09f9a80204d6f6f6f6ff09f9a806f6f4d206ff09f9a80c3a96f206f204d6f6f20c3a9f09f9a80f09f9a80204d206f206fc3a9f09f9a804df09f9a804d20f09f9a80c3a96f6f6f6f4d206f6f6ff09f9a806f206f6f4d6f20206fc3a9f09f9a804dc3a94dc3a94d6f6f20c3a9f09f9a80204d20c3a9f09f9a8020206f6ff09f9a80c3a920c3a9c3a9f09f9a80c3a96ff09f9a80f09f9a806f6f6fc3a920f09f9a806f6f206f6f4d6ff09f9a80f09f9a806f206f6ff09f9a8020c3a96f4df09f9a804d6ff09f9a806f204d6f6f20c3a9f09f9a80c3a9c3a9c3a9c3a94d4d6ff09f9a80204d204d206f20f09f9a804d6f6f4d6f6f4dc3a920c3a9206f4d6f6ff09f9a80206f6f4d204d6f6f20c3a9f09f9a8020c3a94d6f6fc3a9204df09f9a8020f09f9a80c3a94d20206fc3a94d4df09f9a80c3a94d6f6f4d6f6f20c3a9f09f9a806fc3a9f09f9a804dc3a9f09f9a80c3a9206f20f09f9a80204dc3a96ff09f9a80c3a96ff09f9a806fc3a96f6ff09f9a806f6fc3a94d20f09f9a80c3a9c3a96ff09f9a80f09f9a806f6f6ff09f9a804d206fc3a9206f4d204d4df09f9a806ff09f9a804d6f6f20c3a9f09f9a806f4d4df09f9a806f4dc3a94dc3a96f6f4d6fc3a9204d6f20f09f9a80f09f9a804d4d6f6f20c3a9f09f9a8020f09f9a80f09f9a806f6f6f4d4dc3a96f6f6ff09f9a80f09f9a80c3a94dc3a9c3a9f09f9a806f6fc3a96f6f4d4d204d6f6f4d6f6f20c3a9f09f9a806fc3a9206f4d6f6ff09f9a80f09f9a80c3a920f09f9a8020206f204dc3a96fc3a9204df09f9a80c3a94dc3a9f09f9a806f4d4dc3a9c3a920f09f9a806f6f4d6f6f4dc3a96ff09f9a806f6f6ff09f9a804d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a80f09f9a806fc3a96f4d4d4df09f9a806ff09f9a806f6f6ff09f9a806f6f6f4d6f4d6f6fc3a94d4df09f9a804d4d20c3a96fc3a9f09f9a80c3a94d204d6f6f4d6f6f20c3a9f09f9a806f20204df09f9a80c3a9f09f9a804d206f4d4d204df09f9a806f6f204d6f4d4d6ff09f9a806f206f6f20f09f9a804df09f9a80f09f9a80c3a94da264697066735822122084ec15b982894e4586e42b92514ab43068df18523b2b8e5a06a3d42bd181560964736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_831282b2 {\n string[] s_0;\n bytes22 s_1;\n string s_2;\n bool s_3;\n }\n\n struct S_a441b23c {\n bool s_0;\n uint256 s_1;\n }\n\n struct S_1ff73a29 {\n uint80 s_0;\n bool s_1;\n bool s_2;\n address s_3;\n string[1] s_4;\n }\n\n struct S_1e55e72a {\n S_a441b23c s_0;\n string s_1;\n S_1ff73a29 s_2;\n }\n\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_0dee559a {\n S_c1053bda s_0;\n address[2] s_1;\n string s_2;\n address s_3;\n }\n\n struct S_e23a0fc8 {\n S_0dee559a[1] s_0;\n string s_1;\n string s_2;\n }\n\n struct S_b2019ea0 {\n S_e23a0fc8 s_0;\n }\n\n struct S_78fbc7d8 {\n address[2] s_0;\n uint176 s_1;\n S_831282b2[] s_2;\n S_1e55e72a s_3;\n S_b2019ea0[] s_4;\n }\n\n function test () public pure returns (S_78fbc7d8 memory) {\n S_78fbc7d8 memory r;\n {\n address[2] memory r_0;\n {\n address r_0_0 = 0x8987Fa2Aac46D8A11EB87fcf9890458e8936cA61;\n r_0[0] = r_0_0;\n }\n {\n address r_0_1 = 0x8FB5F6650fCCc0efF26E28023fDCcEdF14E9864f;\n r_0[1] = r_0_1;\n }\n r.s_0 = r_0;\n }\n {\n uint176 r_1 = 23551615400437493761736304982846751570286021631936031;\n r.s_1 = r_1;\n }\n {\n S_831282b2[] memory r_2 = new S_831282b2[](3);\n {\n S_831282b2 memory r_2_0;\n {\n string[] memory r_2_0_0 = new string[](4);\n {\n string memory r_2_0_0_0 = unicode\"Moo é🚀ééééMMo🚀 M M o 🚀MooMooMé é oMoo🚀 ooM \";\n r_2_0_0[0] = r_2_0_0_0;\n }\n {\n string memory r_2_0_0_1 = unicode\"Moo é🚀oé🚀Mé🚀é o 🚀 Méo🚀éo🚀oéoo🚀ooéM 🚀ééo🚀🚀ooo🚀M oé oM MM🚀o🚀\";\n r_2_0_0[1] = r_2_0_0_1;\n }\n {\n string memory r_2_0_0_2 = unicode\"Moo é🚀oé oMoo🚀🚀é 🚀 o Méoé M🚀éMé🚀oMMéé 🚀ooMooMéo🚀ooo🚀\";\n r_2_0_0[2] = r_2_0_0_2;\n }\n {\n string memory r_2_0_0_3 = unicode\"Moo é🚀 M é🚀 oo🚀é éé🚀éo🚀🚀oooé 🚀oo ooMo🚀🚀o oo🚀 éoM🚀Mo🚀o \";\n r_2_0_0[3] = r_2_0_0_3;\n }\n r_2_0.s_0 = r_2_0_0;\n }\n {\n bytes22 r_2_0_1 = bytes22(0x0062ec78ccc1d6cf069994e17f8dc5eee150a1b73e1b);\n r_2_0.s_1 = r_2_0_1;\n }\n {\n string memory r_2_0_2 = unicode\"Moo é🚀ooooéoo\";\n r_2_0.s_2 = r_2_0_2;\n }\n {\n bool r_2_0_3 = false;\n r_2_0.s_3 = r_2_0_3;\n }\n r_2[0] = r_2_0;\n }\n {\n S_831282b2 memory r_2_1;\n {\n string[] memory r_2_1_0 = new string[](2);\n {\n string memory r_2_1_0_0 = unicode\"Moo é🚀\";\n r_2_1_0[0] = r_2_1_0_0;\n }\n {\n string memory r_2_1_0_1 = unicode\"Moo é🚀🚀🚀oMé🚀 ééoM\";\n r_2_1_0[1] = r_2_1_0_1;\n }\n r_2_1.s_0 = r_2_1_0;\n }\n {\n bytes22 r_2_1_1 = bytes22(0xe5af7aaaa13f22fdd79717d099f1dfbc1e52009637c3);\n r_2_1.s_1 = r_2_1_1;\n }\n {\n string memory r_2_1_2 = unicode\"Moo é🚀🚀o\";\n r_2_1.s_2 = r_2_1_2;\n }\n {\n bool r_2_1_3 = true;\n r_2_1.s_3 = r_2_1_3;\n }\n r_2[1] = r_2_1;\n }\n {\n S_831282b2 memory r_2_2;\n {\n string[] memory r_2_2_0 = new string[](2);\n {\n string memory r_2_2_0_0 = unicode\"Moo é🚀MMéo oé🚀éooé\";\n r_2_2_0[0] = r_2_2_0_0;\n }\n {\n string memory r_2_2_0_1 = unicode\"Moo é🚀🚀 M o oé🚀M🚀M 🚀éooooM ooo🚀o ooMo oé🚀MéMé\";\n r_2_2_0[1] = r_2_2_0_1;\n }\n r_2_2.s_0 = r_2_2_0;\n }\n {\n bytes22 r_2_2_1 = bytes22(0xeea4cf9e6327c5a205fa57df9274b86d7b60e0dee4ee);\n r_2_2.s_1 = r_2_2_1;\n }\n {\n string memory r_2_2_2 = unicode\"Moo é🚀éoooo\";\n r_2_2.s_2 = r_2_2_2;\n }\n {\n bool r_2_2_3 = true;\n r_2_2.s_3 = r_2_2_3;\n }\n r_2[2] = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n S_1e55e72a memory r_3;\n {\n S_a441b23c memory r_3_0;\n {\n bool r_3_0_0 = false;\n r_3_0.s_0 = r_3_0_0;\n }\n {\n uint r_3_0_1 = 89574471288993514935650399801903430075700747180448827236201756264800791061895;\n r_3_0.s_1 = r_3_0_1;\n }\n r_3.s_0 = r_3_0;\n }\n {\n string memory r_3_1 = unicode\"Moo é🚀ooooMMéooé \";\n r_3.s_1 = r_3_1;\n }\n {\n S_1ff73a29 memory r_3_2;\n {\n uint80 r_3_2_0 = 704687446297847473298686;\n r_3_2.s_0 = r_3_2_0;\n }\n {\n bool r_3_2_1 = true;\n r_3_2.s_1 = r_3_2_1;\n }\n {\n bool r_3_2_2 = true;\n r_3_2.s_2 = r_3_2_2;\n }\n {\n address r_3_2_3 = 0xe300e43bfe36527aB16931Ccf646B4eabbF81246;\n r_3_2.s_3 = r_3_2_3;\n }\n {\n string[1] memory r_3_2_4;\n {\n string memory r_3_2_4_0 = unicode\"Moo é🚀é M🚀M🚀MéoooéM MooéMoo\";\n r_3_2_4[0] = r_3_2_4_0;\n }\n r_3_2.s_4 = r_3_2_4;\n }\n r_3.s_2 = r_3_2;\n }\n r.s_3 = r_3;\n }\n {\n S_b2019ea0[] memory r_4 = new S_b2019ea0[](3);\n {\n S_b2019ea0 memory r_4_0;\n {\n S_e23a0fc8 memory r_4_0_0;\n {\n S_0dee559a[1] memory r_4_0_0_0;\n {\n S_0dee559a memory r_4_0_0_0_0;\n {\n S_c1053bda memory r_4_0_0_0_0_0;\n {\n bool r_4_0_0_0_0_0_0 = true;\n r_4_0_0_0_0_0.s_0 = r_4_0_0_0_0_0_0;\n }\n r_4_0_0_0_0.s_0 = r_4_0_0_0_0_0;\n }\n {\n address[2] memory r_4_0_0_0_0_1;\n {\n address r_4_0_0_0_0_1_0 = 0x9a12Aee3f664507C566B273D2F4Eb9d4D03D4180;\n r_4_0_0_0_0_1[0] = r_4_0_0_0_0_1_0;\n }\n {\n address r_4_0_0_0_0_1_1 = 0x7a8ec8105d60F71C3ACc92C64875b1aDFd837357;\n r_4_0_0_0_0_1[1] = r_4_0_0_0_0_1_1;\n }\n r_4_0_0_0_0.s_1 = r_4_0_0_0_0_1;\n }\n {\n string memory r_4_0_0_0_0_2 = unicode\"Moo é🚀 Moooo🚀ooM o🚀éo o \";\n r_4_0_0_0_0.s_2 = r_4_0_0_0_0_2;\n }\n {\n address r_4_0_0_0_0_3 = 0x4Ff681175143029B6A6e00996aCE1Cac634c500d;\n r_4_0_0_0_0.s_3 = r_4_0_0_0_0_3;\n }\n r_4_0_0_0[0] = r_4_0_0_0_0;\n }\n r_4_0_0.s_0 = r_4_0_0_0;\n }\n {\n string memory r_4_0_0_1 = unicode\"Moo é🚀 🚀🚀oooMMéooo🚀🚀éMéé🚀ooéooMM Moo\";\n r_4_0_0.s_1 = r_4_0_0_1;\n }\n {\n string memory r_4_0_0_2 = unicode\"Moo é🚀oM🚀🚀o o🚀 🚀o🚀🚀éoooM 🚀🚀Mé🚀🚀M🚀o M 🚀éoéM\";\n r_4_0_0.s_2 = r_4_0_0_2;\n }\n r_4_0.s_0 = r_4_0_0;\n }\n r_4[0] = r_4_0;\n }\n {\n S_b2019ea0 memory r_4_1;\n {\n S_e23a0fc8 memory r_4_1_0;\n {\n S_0dee559a[1] memory r_4_1_0_0;\n {\n S_0dee559a memory r_4_1_0_0_0;\n {\n S_c1053bda memory r_4_1_0_0_0_0;\n {\n bool r_4_1_0_0_0_0_0 = false;\n r_4_1_0_0_0_0.s_0 = r_4_1_0_0_0_0_0;\n }\n r_4_1_0_0_0.s_0 = r_4_1_0_0_0_0;\n }\n {\n address[2] memory r_4_1_0_0_0_1;\n {\n address r_4_1_0_0_0_1_0 = 0x3bE888F6540fc4d78187206A53276E9abbab9c3c;\n r_4_1_0_0_0_1[0] = r_4_1_0_0_0_1_0;\n }\n {\n address r_4_1_0_0_0_1_1 = 0xDdBAF99c86C79633d1D34258Ac54a2e3502Fd71e;\n r_4_1_0_0_0_1[1] = r_4_1_0_0_0_1_1;\n }\n r_4_1_0_0_0.s_1 = r_4_1_0_0_0_1;\n }\n {\n string memory r_4_1_0_0_0_2 = unicode\"Moo é🚀oMM🚀oMéMéooMoé Mo 🚀🚀M\";\n r_4_1_0_0_0.s_2 = r_4_1_0_0_0_2;\n }\n {\n address r_4_1_0_0_0_3 = 0x32d1e9fc919125BbF9Fc8F78F830bA808876041A;\n r_4_1_0_0_0.s_3 = r_4_1_0_0_0_3;\n }\n r_4_1_0_0[0] = r_4_1_0_0_0;\n }\n r_4_1_0.s_0 = r_4_1_0_0;\n }\n {\n string memory r_4_1_0_1 = unicode\"Moo é🚀🚀🚀🚀🚀oéoMMM🚀o🚀ooo🚀oooMoMooéMM🚀MM éoé🚀éM Moo\";\n r_4_1_0.s_1 = r_4_1_0_1;\n }\n {\n string memory r_4_1_0_2 = unicode\"Moo é🚀 éMooé M🚀 🚀éM oéMM🚀éMoo\";\n r_4_1_0.s_2 = r_4_1_0_2;\n }\n r_4_1.s_0 = r_4_1_0;\n }\n r_4[1] = r_4_1;\n }\n {\n S_b2019ea0 memory r_4_2;\n {\n S_e23a0fc8 memory r_4_2_0;\n {\n S_0dee559a[1] memory r_4_2_0_0;\n {\n S_0dee559a memory r_4_2_0_0_0;\n {\n S_c1053bda memory r_4_2_0_0_0_0;\n {\n bool r_4_2_0_0_0_0_0 = false;\n r_4_2_0_0_0_0.s_0 = r_4_2_0_0_0_0_0;\n }\n r_4_2_0_0_0.s_0 = r_4_2_0_0_0_0;\n }\n {\n address[2] memory r_4_2_0_0_0_1;\n {\n address r_4_2_0_0_0_1_0 = 0xBDB6d879236A1Ff7Ab89120daE1BA21Abe245973;\n r_4_2_0_0_0_1[0] = r_4_2_0_0_0_1_0;\n }\n {\n address r_4_2_0_0_0_1_1 = 0x9246B3dCCEFB80d4Ed0c4C2051B22CA015483bFa;\n r_4_2_0_0_0_1[1] = r_4_2_0_0_0_1_1;\n }\n r_4_2_0_0_0.s_1 = r_4_2_0_0_0_1;\n }\n {\n string memory r_4_2_0_0_0_2 = unicode\"Moo é🚀o M🚀é🚀M oMM M🚀oo MoMMo🚀o oo 🚀M🚀🚀éM\";\n r_4_2_0_0_0.s_2 = r_4_2_0_0_0_2;\n }\n {\n address r_4_2_0_0_0_3 = 0x9BCBB647735eCabbE7c31DA582D12d6726Dfd589;\n r_4_2_0_0_0.s_3 = r_4_2_0_0_0_3;\n }\n r_4_2_0_0[0] = r_4_2_0_0_0;\n }\n r_4_2_0.s_0 = r_4_2_0_0;\n }\n {\n string memory r_4_2_0_1 = unicode\"Moo é🚀\";\n r_4_2_0.s_1 = r_4_2_0_1;\n }\n {\n string memory r_4_2_0_2 = unicode\"Moo é🚀 éooM o🚀 🚀oé🚀🚀M🚀Méoo🚀🚀oMoé oM M 🚀é o🚀\";\n r_4_2_0.s_2 = r_4_2_0_2;\n }\n r_4_2.s_0 = r_4_2_0;\n }\n r_4[2] = r_4_2;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000008987fa2aac46d8a11eb87fcf9890458e8936ca610000000000000000000000008fb5f6650fccc0eff26e28023fdccedf14e9864f000000000000000000003ef2ab4fc6aba6c5a5c845bc009cfa6fe96854da061f00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000008600000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000000800062ec78ccc1d6cf069994e17f8dc5eee150a1b73e1b00000000000000000000000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a80c3a9c3a9c3a9c3a94d4d6ff09f9a80204d204d206f20f09f9a804d6f6f4d6f6f4dc3a920c3a9206f4d6f6ff09f9a80206f6f4d200000000000000000000000000000000000000000000000000000000000000000006c4d6f6f20c3a9f09f9a806fc3a9f09f9a804dc3a9f09f9a80c3a9206f20f09f9a80204dc3a96ff09f9a80c3a96ff09f9a806fc3a96f6ff09f9a806f6fc3a94d20f09f9a80c3a9c3a96ff09f9a80f09f9a806f6f6ff09f9a804d206fc3a9206f4d204d4df09f9a806ff09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a806fc3a9206f4d6f6ff09f9a80f09f9a80c3a920f09f9a8020206f204dc3a96fc3a9204df09f9a80c3a94dc3a9f09f9a806f4d4dc3a9c3a920f09f9a806f6f4d6f6f4dc3a96ff09f9a806f6f6ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a80204d20c3a9f09f9a8020206f6ff09f9a80c3a920c3a9c3a9f09f9a80c3a96ff09f9a80f09f9a806f6f6fc3a920f09f9a806f6f206f6f4d6ff09f9a80f09f9a806f206f6ff09f9a8020c3a96f4df09f9a804d6ff09f9a806f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a806f6f6f6fc3a96f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e5af7aaaa13f22fdd79717d099f1dfbc1e52009637c30000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a80f09f9a80f09f9a806f4dc3a9f09f9a8020c3a9c3a96f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a80f09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080eea4cf9e6327c5a205fa57df9274b86d7b60e0dee4ee0000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a804d4dc3a96f206fc3a9f09f9a80c3a96f6fc3a900000000000000000000000000000000000000000000000000000000000000000000494d6f6f20c3a9f09f9a80f09f9a80204d206f206fc3a9f09f9a804df09f9a804d20f09f9a80c3a96f6f6f6f4d206f6f6ff09f9a806f206f6f4d6f20206fc3a9f09f9a804dc3a94dc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a80c3a96f6f6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6095aa67f4103da21fc8f07759d641764c85c620a8028c86e466cac1b4c6587000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a806f6f6f6f4d4dc3a96f6fc3a9200000000000000000000000000000000000000000000000000000000000000095392ed9bdc98406dcfe00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e300e43bfe36527ab16931ccf646b4eabbf8124600000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000294d6f6f20c3a9f09f9a80c3a9204df09f9a804df09f9a804dc3a96f6f6fc3a94d204d6f6fc3a94d6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009a12aee3f664507c566b273d2f4eb9d4d03d41800000000000000000000000007a8ec8105d60f71c3acc92c64875b1adfd83735700000000000000000000000000000000000000000000000000000000000000a00000000000000000000000004ff681175143029b6a6e00996ace1cac634c500d00000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a80204d6f6f6f6ff09f9a806f6f4d206ff09f9a80c3a96f206f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a8020f09f9a80f09f9a806f6f6f4d4dc3a96f6f6ff09f9a80f09f9a80c3a94dc3a9c3a9f09f9a806f6fc3a96f6f4d4d204d6f6f0000000000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a806f4df09f9a80f09f9a806f206ff09f9a80202020f09f9a806ff09f9a80f09f9a80c3a96f6f6f4d20f09f9a80f09f9a804dc3a9f09f9a80f09f9a804df09f9a806f204d20f09f9a80c3a96fc3a94d00000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003be888f6540fc4d78187206a53276e9abbab9c3c000000000000000000000000ddbaf99c86c79633d1d34258ac54a2e3502fd71e00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000032d1e9fc919125bbf9fc8f78f830ba808876041a000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a806f4d4df09f9a806f4dc3a94dc3a96f6f4d6fc3a9204d6f20f09f9a80f09f9a804d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a80f09f9a806fc3a96f4d4d4df09f9a806ff09f9a806f6f6ff09f9a806f6f6f4d6f4d6f6fc3a94d4df09f9a804d4d20c3a96fc3a9f09f9a80c3a94d204d6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a8020c3a94d6f6fc3a9204df09f9a8020f09f9a80c3a94d20206fc3a94d4df09f9a80c3a94d6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bdb6d879236a1ff7ab89120dae1ba21abe2459730000000000000000000000009246b3dccefb80d4ed0c4c2051b22ca015483bfa00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000009bcbb647735ecabbe7c31da582d12d6726dfd58900000000000000000000000000000000000000000000000000000000000000444d6f6f20c3a9f09f9a806f20204df09f9a80c3a9f09f9a804d206f4d4d204df09f9a806f6f204d6f4d4d6ff09f9a806f206f6f20f09f9a804df09f9a80f09f9a80c3a94d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a802020c3a96f6f4d206ff09f9a802020f09f9a806fc3a9f09f9a80f09f9a804df09f9a804dc3a96f6ff09f9a80f09f9a806f4d6fc3a9206f4d20204d20f09f9a80c3a9206ff09f9a800000000000000000000000000000" + }, + { + "name": "random-(bool,string,(string,(address,int24[3][4],uint256[4],bytes4[2]),uint),(string,address,(bool[],(bytes21[4],bytes24,int16,uint),address,string)[],bytes16[],string))", + "type": "(bool,string,(string,(address,int24[3][4],uint256[4],bytes4[2]),uint),(string,address,(bool[],(bytes21[4],bytes24,int16,uint),address,string)[],bytes16[],string))", + "value": [ + false, + "Moo é🚀o🚀oooM 🚀 éM🚀MooM🚀éMo🚀 éM🚀é M🚀é🚀", + [ + "Moo é🚀M o🚀M ééMoM oMMMoéé o🚀ooo🚀🚀 oM ", + [ + "0x4D83c1c5E96481fA0332cA77B9F1994007412d08", + [ + ["4215508", "-804602", "6838314"], + ["3177847", "7367301", "6083917"], + ["2329061", "1102630", "4180570"], + ["3025781", "6662439", "7479268"] + ], + [ + "39926023276551085363373582917962715309110965465257791049343790740795854995200", + "69071099571165351632141813685936392177023307842243971693386608934577522126609", + "27981916224878156486424019165533706326602015054501449050777621061309858092707", + "103333959163340068196172810723261371070218427218848437463158122590000607056992" + ], + ["0x6c6ed070", "0xb3f88148"] + ], + "58873819301920659827327704165588347661803108275350507540069153646136052274778" + ], + [ + "Moo é🚀 é MoMo éoooM🚀 ééMo", + "0x5f7B69C401a6da723d0a74c013b508FB873Fe97F", + [ + [ + [true, false, true], + [ + [ + "0x2eb2ed8b228e45fdf48b0c0f5738f4770db3f8c94c", + "0x13127aff85bbb8ff5b3f721bd42d3a84574847f2a6", + "0x2aa61f8736a7f12ca09018e5a66c31765fa1124127", + "0xff8044d2d4598f7142c584fcb5f3458933f28d7002" + ], + "0xb14cfe383701294e2c274ae3b57f4ab5389f6c5ea18e2c4d", + "-22605", + "649568991712649594053811376457667049924588071162452735678000128326155118770" + ], + "0x986F35cF4dc8cE5B4FcE71740b5cBE15d5Ef3333", + "Moo é🚀é 🚀o o oéoéo 🚀🚀 é🚀o🚀🚀é o🚀éM🚀o🚀ééoMo🚀 éooéooM" + ], + [ + [], + [ + [ + "0xddad84471c463fd59659586d556a982cbc6d7b6119", + "0xe3475c870e964e17f4d9e417ff3858944bb8c9df1b", + "0x815edfbdffd3407a5236be6bce4aa3fad2aecbfc47", + "0x786015477d5cc93205db219b092bd25297ecdc3f54" + ], + "0xb0662c6397b100dcf05b6009b57157e8dd0e6aeacbbcf27d", + "8163", + "48065875065003226500716755168132809397299922213635047157652004299330904465876" + ], + "0xAca67A929eC0A91AD0F312E22483b2A28761ec17", + "Moo é🚀 oMooé🚀éMooo🚀 o 🚀 M🚀🚀éo🚀o" + ], + [ + [true, false, true], + [ + [ + "0x6d0311f25c6be2472f052e9ba98867f7fe88388ead", + "0xba534bc76a2dec4e8d99bedf58256d7fb033ddb0f0", + "0xf6245a7bfddb0b8d3d1fe871296ee621bfd00285df", + "0xebf3bc8364e72165f2bf3b6eba8166e1a58ce48d4b" + ], + "0xdd2cbe26c72e448b7e6ef11f8dbd3421070567f1be401460", + "-4397", + "108685860433130461855587303095532121226214581672484191372945582326527518796580" + ], + "0x1E91D2Ca63c2d3cC76B65057cbe40579AD743326", + "Moo é🚀oM🚀 éo MooMéMM🚀 éééMoo🚀🚀éMM🚀🚀🚀M" + ] + ], + ["0x45d2eca383a886627c5efef44aaca5c3"], + "Moo é🚀M🚀é 🚀 Mo éoo o🚀🚀éMoo 🚀éoMé oM M oé o o" + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀o🚀oooM 🚀 éM🚀MooM🚀éMo🚀 éM🚀é M🚀é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M o🚀M ééMoM oMMMoéé o🚀ooo🚀🚀 oM " + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x4D83c1c5E96481fA0332cA77B9F1994007412d08" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "4215508" + }, + { + "type": "number", + "value": "-804602" + }, + { + "type": "number", + "value": "6838314" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3177847" + }, + { + "type": "number", + "value": "7367301" + }, + { + "type": "number", + "value": "6083917" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "2329061" + }, + { + "type": "number", + "value": "1102630" + }, + { + "type": "number", + "value": "4180570" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3025781" + }, + { + "type": "number", + "value": "6662439" + }, + { + "type": "number", + "value": "7479268" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "39926023276551085363373582917962715309110965465257791049343790740795854995200" + }, + { + "type": "number", + "value": "69071099571165351632141813685936392177023307842243971693386608934577522126609" + }, + { + "type": "number", + "value": "27981916224878156486424019165533706326602015054501449050777621061309858092707" + }, + { + "type": "number", + "value": "103333959163340068196172810723261371070218427218848437463158122590000607056992" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x6c6ed070" + }, + { + "type": "hexstring", + "value": "0xb3f88148" + } + ] + } + ] + }, + { + "type": "number", + "value": "58873819301920659827327704165588347661803108275350507540069153646136052274778" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é MoMo éoooM🚀 ééMo" + }, + { + "type": "address", + "value": "0x5f7B69C401a6da723d0a74c013b508FB873Fe97F" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x2eb2ed8b228e45fdf48b0c0f5738f4770db3f8c94c" + }, + { + "type": "hexstring", + "value": "0x13127aff85bbb8ff5b3f721bd42d3a84574847f2a6" + }, + { + "type": "hexstring", + "value": "0x2aa61f8736a7f12ca09018e5a66c31765fa1124127" + }, + { + "type": "hexstring", + "value": "0xff8044d2d4598f7142c584fcb5f3458933f28d7002" + } + ] + }, + { + "type": "hexstring", + "value": "0xb14cfe383701294e2c274ae3b57f4ab5389f6c5ea18e2c4d" + }, + { + "type": "number", + "value": "-22605" + }, + { + "type": "number", + "value": "649568991712649594053811376457667049924588071162452735678000128326155118770" + } + ] + }, + { + "type": "address", + "value": "0x986F35cF4dc8cE5B4FcE71740b5cBE15d5Ef3333" + }, + { + "type": "string", + "value": "Moo é🚀é 🚀o o oéoéo 🚀🚀 é🚀o🚀🚀é o🚀éM🚀o🚀ééoMo🚀 éooéooM" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xddad84471c463fd59659586d556a982cbc6d7b6119" + }, + { + "type": "hexstring", + "value": "0xe3475c870e964e17f4d9e417ff3858944bb8c9df1b" + }, + { + "type": "hexstring", + "value": "0x815edfbdffd3407a5236be6bce4aa3fad2aecbfc47" + }, + { + "type": "hexstring", + "value": "0x786015477d5cc93205db219b092bd25297ecdc3f54" + } + ] + }, + { + "type": "hexstring", + "value": "0xb0662c6397b100dcf05b6009b57157e8dd0e6aeacbbcf27d" + }, + { + "type": "number", + "value": "8163" + }, + { + "type": "number", + "value": "48065875065003226500716755168132809397299922213635047157652004299330904465876" + } + ] + }, + { + "type": "address", + "value": "0xAca67A929eC0A91AD0F312E22483b2A28761ec17" + }, + { + "type": "string", + "value": "Moo é🚀 oMooé🚀éMooo🚀 o 🚀 M🚀🚀éo🚀o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x6d0311f25c6be2472f052e9ba98867f7fe88388ead" + }, + { + "type": "hexstring", + "value": "0xba534bc76a2dec4e8d99bedf58256d7fb033ddb0f0" + }, + { + "type": "hexstring", + "value": "0xf6245a7bfddb0b8d3d1fe871296ee621bfd00285df" + }, + { + "type": "hexstring", + "value": "0xebf3bc8364e72165f2bf3b6eba8166e1a58ce48d4b" + } + ] + }, + { + "type": "hexstring", + "value": "0xdd2cbe26c72e448b7e6ef11f8dbd3421070567f1be401460" + }, + { + "type": "number", + "value": "-4397" + }, + { + "type": "number", + "value": "108685860433130461855587303095532121226214581672484191372945582326527518796580" + } + ] + }, + { + "type": "address", + "value": "0x1E91D2Ca63c2d3cC76B65057cbe40579AD743326" + }, + { + "type": "string", + "value": "Moo é🚀oM🚀 éo MooMéMM🚀 éééMoo🚀🚀éMM🚀🚀🚀M" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x45d2eca383a886627c5efef44aaca5c3" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M🚀é 🚀 Mo éoo o🚀🚀éMoo 🚀éoMé oM M oé o o" + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b5061103a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610d11565b60405180910390f35b6100566108d6565b61005e6108d6565b600080825260408051608081019091526046808252610fbf6020830139602083015250610089610908565b60006040518060600160405280603c8152602001610e3b603c91398252506100af61092f565b734d83c1c5e96481fa0332ca77b9f1994007412d0881526100ce61096c565b6100d6610999565b624052d48152620c46f91960208201526268582a604082015281526100f9610999565b62307d77815262706a85602080830191909152625cd54d6040830152820152610120610999565b622389e581526210d3266020820152623fca5a604080830191909152820152610147610999565b622e2b7581526265a92760208083019190915262721fe4604083015260608301919091528201526101766109b7565b7f5845540f19460064a283b531f616b3dffc8dd7b16a1281f856366416f8f4bf0081527f98b4db61a41f05a65f5d1e37bbb7bae34fd82f90afb9a0b0f60d2fd20f90af1160208201527f3ddd340db1817d09df81fb14b7d76a323b348696514fa602a5c6ef7df89896a36040808301919091527fe474f2c1091278791c49b839aae83f0ce3b2f457f8d9837cd1b847e0874ad460606083015282015261021a6109d5565b6306c6ed0760e41b815263167f102960e31b60208083019190915260608301919091528201527f8229669eb1022c47dcca982521345b699feb27db62017b531b4ba49442f5d65a6040808301919091528201526102756109f3565b6000604051806060016040528060258152602001610f9a60259139825250735f7b69c401a6da723d0a74c013b508fb873fe97f602082015260408051600380825260808201909252600091816020015b6102cd610a2b565b8152602001906001900390816102c55790505090506102ea610a2b565b6040805160038082526080820190925260009160208201606080368337019050509050600060019050808260008151811061032757610327610e24565b602002602001019015159081151581525050506000808260018151811061035057610350610e24565b60200260200101901515908115158152505050600060019050808260028151811061037d5761037d610e24565b91151560209283029190910190910152508152610398610a59565b6103a06109b7565b740bacbb62c8a3917f7d22c303d5ce3d1dc36cfe3253605a1b81527409893d7fc2dddc7fad9fb90dea169d422ba423f95360591b602080830191909152742aa61f8736a7f12ca09018e5a66c31765fa112412760581b6040808401919091527fff8044d2d4598f7142c584fcb5f3458933f28d700200000000000000000000006060808501919091529284527fb14cfe383701294e2c274ae3b57f4ab5389f6c5ea18e2c4d00000000000000008483015261584c19848201527f016fa49cfe5a3393aba101651bbc278922d838ebdaf785935a58a8e8971c28b2928401929092528381019290925273986f35cf4dc8ce5b4fce71740b5cbe15d5ef333383820152805160808101909152605e808252600092610f3c908301396060830152508151819083906000906104d4576104d4610e24565b6020026020010181905250506104e8610a2b565b6040805160008152602081019091528152610501610a59565b6105096109b7565b74ddad84471c463fd59659586d556a982cbc6d7b611960581b815274e3475c870e964e17f4d9e417ff3858944bb8c9df1b60581b60208083019190915274815edfbdffd3407a5236be6bce4aa3fad2aecbfc4760581b604080840191909152741e180551df57324c8176c866c24af494a5fb370fd5605a1b6060808501919091529284527fb0662c6397b100dcf05b6009b57157e8dd0e6aeacbbcf27d000000000000000084830152611fe3848201527f6a44523a4af6fda0b19d45a68d4acea3f7267b53465cdebb15a7a6ef1d2521d4848401528482019390935273aca67a929ec0a91ad0f312e22483b2a28761ec178484015282519182019092526039808252600092610e7790830139606083015250815181908390600190811061063257610632610e24565b602002602001018190525050610646610a2b565b6040805160038082526080820190925260009160208201606080368337019050509050600060019050808260008151811061068357610683610e24565b60200260200101901515908115158152505050600080826001815181106106ac576106ac610e24565b6020026020010190151590811515815250505060006001905080826002815181106106d9576106d9610e24565b911515602092830291909101909101525081526106f4610a59565b6106fc6109b7565b746d0311f25c6be2472f052e9ba98867f7fe88388ead60581b8152740ba534bc76a2dec4e8d99bedf58256d7fb033ddb0f605c1b60208083019190915274f6245a7bfddb0b8d3d1fe871296ee621bfd00285df60581b60408084019190915274ebf3bc8364e72165f2bf3b6eba8166e1a58ce48d4b60581b6060808501919091529284527fdd2cbe26c72e448b7e6ef11f8dbd3421070567f1be40146000000000000000008483015261112c19848201527ff04a045c1cfc16d8810f61a01dfa53ffaae20d7e50d9061e36fedd045faf6b249284019290925283810192909252731e91d2ca63c2d3cc76b65057cbe40579ad743326838201528051608081019091526046808252600092610eb090830139606083015250815181908390600290811061082a5761082a610e24565b60209081029190910101525060408281019190915280516001808252818301909252600091816020016020820280368337505081519192506f45d2eca383a886627c5efef44aaca5c360801b91829150839060009061088b5761088b610e24565b6001600160801b031990921660209283029190910182015260608401929092525060408051608081019091526046808252600092610ef6908301396080830152506060820152919050565b6040805160808101825260008152606060208201529081016108f6610908565b81526020016109036109f3565b905290565b60405180606001604052806060815260200161092261092f565b8152602001600081525090565b604051806080016040528060006001600160a01b0316815260200161095261096c565b815260200161095f6109b7565b81526020016109036109d5565b60405180608001604052806004905b610983610999565b81526020019060019003908161097b5790505090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6040518060a001604052806060815260200160006001600160a01b031681526020016060815260200160608152602001606081525090565b604051806080016040528060608152602001610a45610a59565b815260006020820152606060409091015290565b6040518060800160405280610a6c6109b7565b81526000602082018190526040820181905260609091015290565b6000815180845260005b81811015610aad57602081850181015186830182015201610a91565b81811115610abf576000602083870101525b50601f01601f19169290920160200192915050565b8060005b6004811015610af7578151845260209384019390910190600101610ad8565b50505050565b8060005b6002811015610af75781516001600160e01b031916845260209384019390910190600101610b01565b80518260005b6004811015610b5d5782516affffffffffffffffffffff1916825260209283019290910190600101610b30565b505050602081015167ffffffffffffffff19166080830152604081015160010b60a08301526060015160c090910152565b600081518084526020808501945080840160005b83811015610bc85781516001600160801b03191687529582019590820190600101610ba2565b509495945050505050565b6000815160a08452610be860a0850182610a87565b6020848101516001600160a01b0316868201526040808601518784038289015280518085529394509192909183019083850190600581901b860185016000805b83811015610cce57888303601f190185528551805161014080865281519086018190526101608601918b019085905b80821015610c7957825115158452928c0192918c019160019190910190610c57565b50505089820151610c8c8b870182610b2a565b50888201516001600160a01b031661010086015260609091015184820361012086015290610cba8183610a87565b978a0197968a019694505050600101610c28565b50506060890151965089810360608b0152610ce98188610b8e565b965050505050505060808301518482036080860152610d088282610a87565b95945050505050565b6000602080835283511515818401528084015160806040850152610d3860a0850182610a87565b90506040850151601f1960608187850301818801526102a08351818652610d6182870182610a87565b8588015180516001600160a01b0316888a0152808901519193509150604087016000805b6004811015610dc657835183835b6003811015610db357825160020b8252918d0191908d0190600101610d93565b505050928a019291860191600101610d85565b5050505060408101519650610ddf6101c0870188610ad4565b8201519550610df2610240860187610afd565b604084015161028086015281890151955082888203016080890152610e178187610bd3565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d20206ff09f9a804d2020c3a9c3a94d6f4d206f4d4d4d6fc3a9c3a9206ff09f9a806f6f6ff09f9a80f09f9a8020206f4d204d6f6f20c3a9f09f9a80206f4d6f6fc3a9f09f9a80c3a94d6f6f6ff09f9a80206f20f09f9a8020204df09f9a80f09f9a80c3a96ff09f9a806f4d6f6f20c3a9f09f9a806f4df09f9a80202020c3a96f204d6f6f4dc3a94d4df09f9a8020c3a9c3a9c3a94d6f6ff09f9a80f09f9a80c3a94d4df09f9a80f09f9a80f09f9a804d4d6f6f20c3a9f09f9a804df09f9a80c3a920f09f9a80204d6f20c3a96f6f206ff09f9a80f09f9a80c3a94d6f6f20f09f9a80c3a96f4dc3a9206f4d204d206fc3a9206f20206f4d6f6f20c3a9f09f9a80c3a920f09f9a806f206f206fc3a96fc3a96f20f09f9a80f09f9a8020c3a9f09f9a806ff09f9a80f09f9a80c3a9206ff09f9a80c3a94df09f9a806ff09f9a80c3a9c3a96f4d6ff09f9a8020c3a96f6fc3a96f6f4d4d6f6f20c3a9f09f9a8020c3a920204d6f4d6f20c3a96f6f6f4df09f9a8020c3a9c3a94d6f4d6f6f20c3a9f09f9a806ff09f9a806f6f6f4d20f09f9a8020c3a94df09f9a804d6f6f4df09f9a80c3a94d6ff09f9a8020c3a94df09f9a80c3a9204df09f9a80c3a9f09f9a80a2646970667358221220d19252bca1512c998d785f85ae9f7a635a8f8ae52cf54146afe732a9a8398b5b64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_a507b25f {\n address s_0;\n int24[3][4] s_1;\n uint256[4] s_2;\n bytes4[2] s_3;\n }\n\n struct S_db103722 {\n string s_0;\n S_a507b25f s_1;\n uint256 s_2;\n }\n\n struct S_5a6fdea5 {\n bytes21[4] s_0;\n bytes24 s_1;\n int16 s_2;\n uint256 s_3;\n }\n\n struct S_770964d1 {\n bool[] s_0;\n S_5a6fdea5 s_1;\n address s_2;\n string s_3;\n }\n\n struct S_3019a25a {\n string s_0;\n address s_1;\n S_770964d1[] s_2;\n bytes16[] s_3;\n string s_4;\n }\n\n struct S_7f01c5a0 {\n bool s_0;\n string s_1;\n S_db103722 s_2;\n S_3019a25a s_3;\n }\n\n function test () public pure returns (S_7f01c5a0 memory) {\n S_7f01c5a0 memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀o🚀oooM 🚀 éM🚀MooM🚀éMo🚀 éM🚀é M🚀é🚀\";\n r.s_1 = r_1;\n }\n {\n S_db103722 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀M o🚀M ééMoM oMMMoéé o🚀ooo🚀🚀 oM \";\n r_2.s_0 = r_2_0;\n }\n {\n S_a507b25f memory r_2_1;\n {\n address r_2_1_0 = 0x4D83c1c5E96481fA0332cA77B9F1994007412d08;\n r_2_1.s_0 = r_2_1_0;\n }\n {\n int24[3][4] memory r_2_1_1;\n {\n int24[3] memory r_2_1_1_0;\n {\n int24 r_2_1_1_0_0 = 4215508;\n r_2_1_1_0[0] = r_2_1_1_0_0;\n }\n {\n int24 r_2_1_1_0_1 = -804602;\n r_2_1_1_0[1] = r_2_1_1_0_1;\n }\n {\n int24 r_2_1_1_0_2 = 6838314;\n r_2_1_1_0[2] = r_2_1_1_0_2;\n }\n r_2_1_1[0] = r_2_1_1_0;\n }\n {\n int24[3] memory r_2_1_1_1;\n {\n int24 r_2_1_1_1_0 = 3177847;\n r_2_1_1_1[0] = r_2_1_1_1_0;\n }\n {\n int24 r_2_1_1_1_1 = 7367301;\n r_2_1_1_1[1] = r_2_1_1_1_1;\n }\n {\n int24 r_2_1_1_1_2 = 6083917;\n r_2_1_1_1[2] = r_2_1_1_1_2;\n }\n r_2_1_1[1] = r_2_1_1_1;\n }\n {\n int24[3] memory r_2_1_1_2;\n {\n int24 r_2_1_1_2_0 = 2329061;\n r_2_1_1_2[0] = r_2_1_1_2_0;\n }\n {\n int24 r_2_1_1_2_1 = 1102630;\n r_2_1_1_2[1] = r_2_1_1_2_1;\n }\n {\n int24 r_2_1_1_2_2 = 4180570;\n r_2_1_1_2[2] = r_2_1_1_2_2;\n }\n r_2_1_1[2] = r_2_1_1_2;\n }\n {\n int24[3] memory r_2_1_1_3;\n {\n int24 r_2_1_1_3_0 = 3025781;\n r_2_1_1_3[0] = r_2_1_1_3_0;\n }\n {\n int24 r_2_1_1_3_1 = 6662439;\n r_2_1_1_3[1] = r_2_1_1_3_1;\n }\n {\n int24 r_2_1_1_3_2 = 7479268;\n r_2_1_1_3[2] = r_2_1_1_3_2;\n }\n r_2_1_1[3] = r_2_1_1_3;\n }\n r_2_1.s_1 = r_2_1_1;\n }\n {\n uint256[4] memory r_2_1_2;\n {\n uint256 r_2_1_2_0 = 39926023276551085363373582917962715309110965465257791049343790740795854995200;\n r_2_1_2[0] = r_2_1_2_0;\n }\n {\n uint256 r_2_1_2_1 = 69071099571165351632141813685936392177023307842243971693386608934577522126609;\n r_2_1_2[1] = r_2_1_2_1;\n }\n {\n uint256 r_2_1_2_2 = 27981916224878156486424019165533706326602015054501449050777621061309858092707;\n r_2_1_2[2] = r_2_1_2_2;\n }\n {\n uint256 r_2_1_2_3 = 103333959163340068196172810723261371070218427218848437463158122590000607056992;\n r_2_1_2[3] = r_2_1_2_3;\n }\n r_2_1.s_2 = r_2_1_2;\n }\n {\n bytes4[2] memory r_2_1_3;\n {\n bytes4 r_2_1_3_0 = bytes4(0x6c6ed070);\n r_2_1_3[0] = r_2_1_3_0;\n }\n {\n bytes4 r_2_1_3_1 = bytes4(0xb3f88148);\n r_2_1_3[1] = r_2_1_3_1;\n }\n r_2_1.s_3 = r_2_1_3;\n }\n r_2.s_1 = r_2_1;\n }\n {\n uint r_2_2 = 58873819301920659827327704165588347661803108275350507540069153646136052274778;\n r_2.s_2 = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n S_3019a25a memory r_3;\n {\n string memory r_3_0 = unicode\"Moo é🚀 é MoMo éoooM🚀 ééMo\";\n r_3.s_0 = r_3_0;\n }\n {\n address r_3_1 = 0x5f7B69C401a6da723d0a74c013b508FB873Fe97F;\n r_3.s_1 = r_3_1;\n }\n {\n S_770964d1[] memory r_3_2 = new S_770964d1[](3);\n {\n S_770964d1 memory r_3_2_0;\n {\n bool[] memory r_3_2_0_0 = new bool[](3);\n {\n bool r_3_2_0_0_0 = true;\n r_3_2_0_0[0] = r_3_2_0_0_0;\n }\n {\n bool r_3_2_0_0_1 = false;\n r_3_2_0_0[1] = r_3_2_0_0_1;\n }\n {\n bool r_3_2_0_0_2 = true;\n r_3_2_0_0[2] = r_3_2_0_0_2;\n }\n r_3_2_0.s_0 = r_3_2_0_0;\n }\n {\n S_5a6fdea5 memory r_3_2_0_1;\n {\n bytes21[4] memory r_3_2_0_1_0;\n {\n bytes21 r_3_2_0_1_0_0 = bytes21(0x2eb2ed8b228e45fdf48b0c0f5738f4770db3f8c94c);\n r_3_2_0_1_0[0] = r_3_2_0_1_0_0;\n }\n {\n bytes21 r_3_2_0_1_0_1 = bytes21(0x13127aff85bbb8ff5b3f721bd42d3a84574847f2a6);\n r_3_2_0_1_0[1] = r_3_2_0_1_0_1;\n }\n {\n bytes21 r_3_2_0_1_0_2 = bytes21(0x2aa61f8736a7f12ca09018e5a66c31765fa1124127);\n r_3_2_0_1_0[2] = r_3_2_0_1_0_2;\n }\n {\n bytes21 r_3_2_0_1_0_3 = bytes21(0xff8044d2d4598f7142c584fcb5f3458933f28d7002);\n r_3_2_0_1_0[3] = r_3_2_0_1_0_3;\n }\n r_3_2_0_1.s_0 = r_3_2_0_1_0;\n }\n {\n bytes24 r_3_2_0_1_1 = bytes24(0xb14cfe383701294e2c274ae3b57f4ab5389f6c5ea18e2c4d);\n r_3_2_0_1.s_1 = r_3_2_0_1_1;\n }\n {\n int16 r_3_2_0_1_2 = -22605;\n r_3_2_0_1.s_2 = r_3_2_0_1_2;\n }\n {\n uint r_3_2_0_1_3 = 649568991712649594053811376457667049924588071162452735678000128326155118770;\n r_3_2_0_1.s_3 = r_3_2_0_1_3;\n }\n r_3_2_0.s_1 = r_3_2_0_1;\n }\n {\n address r_3_2_0_2 = 0x986F35cF4dc8cE5B4FcE71740b5cBE15d5Ef3333;\n r_3_2_0.s_2 = r_3_2_0_2;\n }\n {\n string memory r_3_2_0_3 = unicode\"Moo é🚀é 🚀o o oéoéo 🚀🚀 é🚀o🚀🚀é o🚀éM🚀o🚀ééoMo🚀 éooéooM\";\n r_3_2_0.s_3 = r_3_2_0_3;\n }\n r_3_2[0] = r_3_2_0;\n }\n {\n S_770964d1 memory r_3_2_1;\n {\n bool[] memory r_3_2_1_0 = new bool[](0);\n r_3_2_1.s_0 = r_3_2_1_0;\n }\n {\n S_5a6fdea5 memory r_3_2_1_1;\n {\n bytes21[4] memory r_3_2_1_1_0;\n {\n bytes21 r_3_2_1_1_0_0 = bytes21(0xddad84471c463fd59659586d556a982cbc6d7b6119);\n r_3_2_1_1_0[0] = r_3_2_1_1_0_0;\n }\n {\n bytes21 r_3_2_1_1_0_1 = bytes21(0xe3475c870e964e17f4d9e417ff3858944bb8c9df1b);\n r_3_2_1_1_0[1] = r_3_2_1_1_0_1;\n }\n {\n bytes21 r_3_2_1_1_0_2 = bytes21(0x815edfbdffd3407a5236be6bce4aa3fad2aecbfc47);\n r_3_2_1_1_0[2] = r_3_2_1_1_0_2;\n }\n {\n bytes21 r_3_2_1_1_0_3 = bytes21(0x786015477d5cc93205db219b092bd25297ecdc3f54);\n r_3_2_1_1_0[3] = r_3_2_1_1_0_3;\n }\n r_3_2_1_1.s_0 = r_3_2_1_1_0;\n }\n {\n bytes24 r_3_2_1_1_1 = bytes24(0xb0662c6397b100dcf05b6009b57157e8dd0e6aeacbbcf27d);\n r_3_2_1_1.s_1 = r_3_2_1_1_1;\n }\n {\n int16 r_3_2_1_1_2 = 8163;\n r_3_2_1_1.s_2 = r_3_2_1_1_2;\n }\n {\n uint r_3_2_1_1_3 = 48065875065003226500716755168132809397299922213635047157652004299330904465876;\n r_3_2_1_1.s_3 = r_3_2_1_1_3;\n }\n r_3_2_1.s_1 = r_3_2_1_1;\n }\n {\n address r_3_2_1_2 = 0xAca67A929eC0A91AD0F312E22483b2A28761ec17;\n r_3_2_1.s_2 = r_3_2_1_2;\n }\n {\n string memory r_3_2_1_3 = unicode\"Moo é🚀 oMooé🚀éMooo🚀 o 🚀 M🚀🚀éo🚀o\";\n r_3_2_1.s_3 = r_3_2_1_3;\n }\n r_3_2[1] = r_3_2_1;\n }\n {\n S_770964d1 memory r_3_2_2;\n {\n bool[] memory r_3_2_2_0 = new bool[](3);\n {\n bool r_3_2_2_0_0 = true;\n r_3_2_2_0[0] = r_3_2_2_0_0;\n }\n {\n bool r_3_2_2_0_1 = false;\n r_3_2_2_0[1] = r_3_2_2_0_1;\n }\n {\n bool r_3_2_2_0_2 = true;\n r_3_2_2_0[2] = r_3_2_2_0_2;\n }\n r_3_2_2.s_0 = r_3_2_2_0;\n }\n {\n S_5a6fdea5 memory r_3_2_2_1;\n {\n bytes21[4] memory r_3_2_2_1_0;\n {\n bytes21 r_3_2_2_1_0_0 = bytes21(0x6d0311f25c6be2472f052e9ba98867f7fe88388ead);\n r_3_2_2_1_0[0] = r_3_2_2_1_0_0;\n }\n {\n bytes21 r_3_2_2_1_0_1 = bytes21(0xba534bc76a2dec4e8d99bedf58256d7fb033ddb0f0);\n r_3_2_2_1_0[1] = r_3_2_2_1_0_1;\n }\n {\n bytes21 r_3_2_2_1_0_2 = bytes21(0xf6245a7bfddb0b8d3d1fe871296ee621bfd00285df);\n r_3_2_2_1_0[2] = r_3_2_2_1_0_2;\n }\n {\n bytes21 r_3_2_2_1_0_3 = bytes21(0xebf3bc8364e72165f2bf3b6eba8166e1a58ce48d4b);\n r_3_2_2_1_0[3] = r_3_2_2_1_0_3;\n }\n r_3_2_2_1.s_0 = r_3_2_2_1_0;\n }\n {\n bytes24 r_3_2_2_1_1 = bytes24(0xdd2cbe26c72e448b7e6ef11f8dbd3421070567f1be401460);\n r_3_2_2_1.s_1 = r_3_2_2_1_1;\n }\n {\n int16 r_3_2_2_1_2 = -4397;\n r_3_2_2_1.s_2 = r_3_2_2_1_2;\n }\n {\n uint r_3_2_2_1_3 = 108685860433130461855587303095532121226214581672484191372945582326527518796580;\n r_3_2_2_1.s_3 = r_3_2_2_1_3;\n }\n r_3_2_2.s_1 = r_3_2_2_1;\n }\n {\n address r_3_2_2_2 = 0x1E91D2Ca63c2d3cC76B65057cbe40579AD743326;\n r_3_2_2.s_2 = r_3_2_2_2;\n }\n {\n string memory r_3_2_2_3 = unicode\"Moo é🚀oM🚀 éo MooMéMM🚀 éééMoo🚀🚀éMM🚀🚀🚀M\";\n r_3_2_2.s_3 = r_3_2_2_3;\n }\n r_3_2[2] = r_3_2_2;\n }\n r_3.s_2 = r_3_2;\n }\n {\n bytes16[] memory r_3_3 = new bytes16[](1);\n {\n bytes16 r_3_3_0 = bytes16(0x45d2eca383a886627c5efef44aaca5c3);\n r_3_3[0] = r_3_3_0;\n }\n r_3.s_3 = r_3_3;\n }\n {\n string memory r_3_4 = unicode\"Moo é🚀M🚀é 🚀 Mo éoo o🚀🚀éMoo 🚀éoMé oM M oé o o\";\n r_3.s_4 = r_3_4;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a806ff09f9a806f6f6f4d20f09f9a8020c3a94df09f9a804d6f6f4df09f9a80c3a94d6ff09f9a8020c3a94df09f9a80c3a9204df09f9a80c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000004d83c1c5e96481fa0332ca77b9f1994007412d0800000000000000000000000000000000000000000000000000000000004052d4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3b906000000000000000000000000000000000000000000000000000000000068582a0000000000000000000000000000000000000000000000000000000000307d770000000000000000000000000000000000000000000000000000000000706a8500000000000000000000000000000000000000000000000000000000005cd54d00000000000000000000000000000000000000000000000000000000002389e5000000000000000000000000000000000000000000000000000000000010d32600000000000000000000000000000000000000000000000000000000003fca5a00000000000000000000000000000000000000000000000000000000002e2b75000000000000000000000000000000000000000000000000000000000065a9270000000000000000000000000000000000000000000000000000000000721fe45845540f19460064a283b531f616b3dffc8dd7b16a1281f856366416f8f4bf0098b4db61a41f05a65f5d1e37bbb7bae34fd82f90afb9a0b0f60d2fd20f90af113ddd340db1817d09df81fb14b7d76a323b348696514fa602a5c6ef7df89896a3e474f2c1091278791c49b839aae83f0ce3b2f457f8d9837cd1b847e0874ad4606c6ed07000000000000000000000000000000000000000000000000000000000b3f88148000000000000000000000000000000000000000000000000000000008229669eb1022c47dcca982521345b699feb27db62017b531b4ba49442f5d65a000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a804d20206ff09f9a804d2020c3a9c3a94d6f4d206f4d4d4d6fc3a9c3a9206ff09f9a806f6f6ff09f9a80f09f9a8020206f4d200000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000005f7b69c401a6da723d0a74c013b508fb873fe97f000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000007c0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a8020c3a920204d6f4d6f20c3a96f6f6f4df09f9a8020c3a9c3a94d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000001402eb2ed8b228e45fdf48b0c0f5738f4770db3f8c94c000000000000000000000013127aff85bbb8ff5b3f721bd42d3a84574847f2a600000000000000000000002aa61f8736a7f12ca09018e5a66c31765fa11241270000000000000000000000ff8044d2d4598f7142c584fcb5f3458933f28d70020000000000000000000000b14cfe383701294e2c274ae3b57f4ab5389f6c5ea18e2c4d0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa7b3016fa49cfe5a3393aba101651bbc278922d838ebdaf785935a58a8e8971c28b2000000000000000000000000986f35cf4dc8ce5b4fce71740b5cbe15d5ef333300000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a80c3a920f09f9a806f206f206fc3a96fc3a96f20f09f9a80f09f9a8020c3a9f09f9a806ff09f9a80f09f9a80c3a9206ff09f9a80c3a94df09f9a806ff09f9a80c3a9c3a96f4d6ff09f9a8020c3a96f6fc3a96f6f4d00000000000000000000000000000000000000000000000000000000000000000140ddad84471c463fd59659586d556a982cbc6d7b61190000000000000000000000e3475c870e964e17f4d9e417ff3858944bb8c9df1b0000000000000000000000815edfbdffd3407a5236be6bce4aa3fad2aecbfc470000000000000000000000786015477d5cc93205db219b092bd25297ecdc3f540000000000000000000000b0662c6397b100dcf05b6009b57157e8dd0e6aeacbbcf27d00000000000000000000000000000000000000000000000000000000000000000000000000001fe36a44523a4af6fda0b19d45a68d4acea3f7267b53465cdebb15a7a6ef1d2521d4000000000000000000000000aca67a929ec0a91ad0f312e22483b2a28761ec170000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a80206f4d6f6fc3a9f09f9a80c3a94d6f6f6ff09f9a80206f20f09f9a8020204df09f9a80f09f9a80c3a96ff09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000001406d0311f25c6be2472f052e9ba98867f7fe88388ead0000000000000000000000ba534bc76a2dec4e8d99bedf58256d7fb033ddb0f00000000000000000000000f6245a7bfddb0b8d3d1fe871296ee621bfd00285df0000000000000000000000ebf3bc8364e72165f2bf3b6eba8166e1a58ce48d4b0000000000000000000000dd2cbe26c72e448b7e6ef11f8dbd3421070567f1be4014600000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeed3f04a045c1cfc16d8810f61a01dfa53ffaae20d7e50d9061e36fedd045faf6b240000000000000000000000001e91d2ca63c2d3cc76b65057cbe40579ad74332600000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a806f4df09f9a80202020c3a96f204d6f6f4dc3a94d4df09f9a8020c3a9c3a9c3a94d6f6ff09f9a80f09f9a80c3a94d4df09f9a80f09f9a80f09f9a804d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000145d2eca383a886627c5efef44aaca5c30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a804df09f9a80c3a920f09f9a80204d6f20c3a96f6f206ff09f9a80f09f9a80c3a94d6f6f20f09f9a80c3a96f4dc3a9206f4d204d206fc3a9206f20206f0000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((int152,bytes17,uint64[1],bool),((bool,string,((address[3],bytes22),bytes8,(int128,bool,(string,string,string),address,string)),address,bytes7),string,int40[2])[4][1][4],bool,address)", + "type": "((int152,bytes17,uint64[1],bool),((bool,string,((address[3],bytes22),bytes8,(int128,bool,(string,string,string),address,string)),address,bytes7),string,int40[2])[4][1][4],bool,address)", + "value": [ + [ + "2557053897289181536776227039130753366531499764", + "0x64e16d767c709174fdb3b814b795d2e683", + ["2263345982287538497"], + true + ], + [ + [ + [ + [ + [ + true, + "Moo é🚀🚀🚀oo o🚀🚀 oéo🚀 oéMMoMooéoM🚀🚀oMM🚀🚀🚀🚀o ", + [ + [ + [ + "0x77b2C3b055786ff7A936686c125e84CdB3a3c876", + "0x0d6B791045bdFb317a3B5946B4756B097EC3986b", + "0xc12F0c8d22b046D909C69bC89f21C531c5746163" + ], + "0x608e571f1d7724d085dae45ac249071d05747dba741d" + ], + "0x5cb7199b7b95e3e9", + [ + "-50107174431156178692800459312299352861", + true, + [ + "Moo é🚀oo🚀 oM🚀Mo🚀 Moo🚀M🚀é o🚀MéMéooéM🚀MMoM 🚀o M🚀 🚀 o MM🚀🚀 oé", + "Moo é🚀o🚀éoMo éé🚀oooé🚀Mo🚀 é🚀MMMMéoM🚀oo🚀oo 🚀Moé ooo 🚀🚀🚀", + "Moo é🚀🚀M🚀o🚀oMé🚀 oooM MM🚀o ooo" + ], + "0x87B4709AFAe80773735280825B347d9971eCB691", + "Moo é🚀🚀o" + ] + ], + "0xF7fF3Be34346B75ffFFE0d5Dc0225aFdB212Dd25", + "0x368a7df30c3967" + ], + "Moo é🚀🚀oMoo 🚀 oo", + ["-266286681710", "525885121095"] + ], + [ + [ + false, + "Moo é🚀o éoéééooMM🚀M 🚀oM ", + [ + [ + [ + "0x13eC2E2dE547f48AD354ee4AEd82c2b8c3E5E556", + "0x3D0906dbA7D38713b1184eA920bf0d2bAaCc07f2", + "0x4746B3d6DE6140DC59dD9E9704B91f86858aE500" + ], + "0x73246ca93dd5735fbacb9107c823b7f8eb104af8f806" + ], + "0x5d3c845b5aa34420", + [ + "163701809972189021710462008086298077530", + false, + [ + "Moo é🚀 o🚀é🚀oM", + "Moo é🚀 éo oM", + "Moo é🚀 M 🚀éééoMMooo🚀Mé 🚀MM é o🚀o🚀 éMoé" + ], + "0x6Fc60D8c853d725e0906bDaB3E09Fe71d9ef467b", + "Moo é🚀🚀o o🚀Mo oMé🚀é🚀é🚀oMo🚀o oéo o🚀ooMooé Moé🚀o " + ] + ], + "0x738Eb7EB4664B050A29298068da94C056718FF1A", + "0x749fb2c41b7b88" + ], + "Moo é🚀", + ["-294063635696", "-457809642668"] + ], + [ + [ + true, + "Moo é🚀oééo Mo éMéé 🚀éM oM", + [ + [ + [ + "0xC3DdC93DF8929dC89eA3286542C6cEDE3cBfc0C4", + "0x718dd49145B4ae405AF2cB6E56c091C4c10a802B", + "0x7E03FB9e50c1e7219d7077F1D0ED28D54FfC832e" + ], + "0xe25599e0ec186c4f00d74a6c396bfbbab24c6082b168" + ], + "0xb6c22be93fc4e473", + [ + "-102733595900354371215138505875632835742", + false, + [ + "Moo é🚀oééoMooéoéoooo🚀o 🚀éooéo o🚀M🚀o 🚀M Méooo", + "Moo é🚀🚀o🚀oMoééo éééooM🚀🚀ooo", + "Moo é🚀🚀o oo 🚀🚀M oooMMMM🚀o 🚀Mo🚀o🚀M🚀ooo éMoo🚀🚀 ooM🚀o🚀éé éé🚀 oMM" + ], + "0xe93Bd7EA3eD7907837CD88f19d851CE440438b4B", + "Moo é🚀oééM🚀o🚀oooooééoM🚀é🚀éMM🚀🚀o🚀🚀éo🚀 o🚀o🚀 oo 🚀oo🚀oMéé éM" + ] + ], + "0xDc1Df1fE26e618D818543eeAEB4E43AD32cD6665", + "0x5325fa2502fdd1" + ], + "Moo é🚀oéooo oéMM🚀é ooé 🚀🚀M ooooMM M🚀éo🚀 M 🚀🚀é MMoé oo🚀oo o🚀Mo", + ["478765699500", "-495211968069"] + ], + [ + [ + true, + "Moo é🚀", + [ + [ + [ + "0x4f099c8f6d99818636f5AD1eea5C9B133ef99048", + "0x9E9544EF65849969c0cc0cEB86233a7e09468970", + "0xe13c2A64ee60dC0f94b985fb7BC91b158EE00559" + ], + "0xd2946b3810589dd01ef0d704dd434f8183d67cd8de0b" + ], + "0x290c94382d81ad3c", + [ + "161748600966332684423685375546815565583", + false, + [ + "Moo é🚀", + "Moo é🚀 éMoooo M🚀éMoéM🚀é é🚀Mooooéé🚀éo éoooééoMéMo oMM o🚀 ooM", + "Moo é🚀 🚀éooo o🚀" + ], + "0x90127D0D0261C4B20E2Cc2085db10024101b3104", + "Moo é🚀ooé o" + ] + ], + "0xff958C5E3973110d2EC056910087A5654ae881AB", + "0x0ef43618428a14" + ], + "Moo é🚀o", + ["-242978510265", "-173359248627"] + ] + ] + ], + [ + [ + [ + [ + false, + "Moo é🚀M Mo🚀🚀MM🚀M🚀🚀 éo🚀Méoéo🚀é 🚀ooM oooMoM oooo éooM 🚀 ", + [ + [ + [ + "0x5D636E181B8417a58326e34d561E4070FbD8E178", + "0x3baa6BB0f96eF7ff900f931D00251758415f600E", + "0xbf750a076E3C9035F4cFC383D8083dCA34248c6f" + ], + "0x80aedb9fd3b8201fc59d17301d578348184d1bfcc3a6" + ], + "0xf53f134197ff0ba6", + [ + "-47063988488179439809328724451385541069", + true, + [ + "Moo é🚀M Méo 🚀 éMooo🚀é🚀M🚀oo🚀🚀éoo é🚀MoooM🚀MoooM🚀éoo éo éMMé oé", + "Moo é🚀Moo ooMo 🚀🚀 o 🚀ooo🚀🚀oMMo🚀 oo", + "Moo é🚀o M🚀🚀é oéoo🚀oo🚀 o Mé o🚀MM M🚀éMéoo ooMéo🚀oMM🚀 é MéMéMé " + ], + "0x25A029586837483b82dcC5dbe3630849BD6c78BA", + "Moo é🚀éMooMoo🚀🚀M🚀é🚀o🚀ooM o 🚀Méé é 🚀" + ] + ], + "0xA19B175B3399848d4473c4bbE5996aF5C0e165d9", + "0x578d256e7d3df9" + ], + "Moo é🚀ééo🚀ééo", + ["-499993156525", "-247386515738"] + ], + [ + [ + true, + "Moo é🚀oéooé🚀M", + [ + [ + [ + "0xa4802F649bC5834De9DfeAcC9766d4ff9207e408", + "0x160909344d5C144B7F502d868C24A41f96e0fD53", + "0x8BefD74625fbeB828f03F583fB8004Cf836985C1" + ], + "0x95841e588dafb0c7c847aeed0a0ad6710eff930f55ee" + ], + "0x5a4c00cd7a9721ca", + [ + "63624728085155674815414656595645876392", + true, + [ + "Moo é🚀 🚀o🚀 M🚀🚀é M é🚀éMM o ééM", + "Moo é🚀éoM 🚀🚀oMMMoooMM🚀ééMM oo ooo é🚀éoMMoé", + "Moo é🚀MééoM o🚀oM🚀oooM 🚀M Mo Méo ooéé🚀ooM" + ], + "0xebd39a65B78c03b3D2ADD73F4E8D2273c1DB7106", + "Moo é🚀o🚀o é oM🚀Moéé M 🚀🚀o éooéM🚀🚀M o🚀MoMoéoéoo🚀" + ] + ], + "0xa4c2D29CD36d5B885bb649dCeC0a663CB1de37b0", + "0xd040e3305117e6" + ], + "Moo é🚀ooééoM o🚀M Mooé🚀", + ["34804187488", "-515844725223"] + ], + [ + [ + false, + "Moo é🚀M🚀M éo Mé oéMéé🚀 é", + [ + [ + [ + "0x4D814fB71Bcf5AAD58B2205cAEcf2B8fce94446a", + "0xc5b216cD7c4D9aA71696626656af3C3997543b94", + "0xb4c8197664D834A78fa598544E57bAf061024A8F" + ], + "0xda6b9c3f7d2fdd2a79dd85e5ab48059e8971ed48e298" + ], + "0x96068b8ecef5bc60", + [ + "-50414449485213460151355499249196331985", + true, + [ + "Moo é🚀", + "Moo é🚀o🚀🚀oooooo🚀éooMMéoo🚀 🚀🚀o🚀é 🚀éoooM ooM M MM🚀oéé Mo🚀oo", + "Moo é🚀M🚀oé🚀M🚀🚀é" + ], + "0xB0A6522B4eD9821a887f885e76c4087FA266787E", + "Moo é🚀oMo🚀 Méé🚀oo🚀🚀o🚀o🚀Mo🚀 🚀éé" + ] + ], + "0xDbfCF080a14358ECDd3DD8d30C698AA16e0845FE", + "0x982f0841cc90a1" + ], + "Moo é🚀oo Mé🚀🚀 M M", + ["-213545541656", "296114960907"] + ], + [ + [ + false, + "Moo é🚀é🚀éoMo éM 🚀🚀🚀éMoMooMéoo🚀🚀Mo ", + [ + [ + [ + "0x6167eC3F676b54F2842c038Ed55C8fAfa2DF4196", + "0xede5094843deB0795E98c13c57c1B1d26E3b30bb", + "0x368e4cc37E84485479462E3eB131F47F20733104" + ], + "0x8eece1fc5d97366349413a277eda09d017d76df51293" + ], + "0x7641870d67c9cd29", + [ + "141817897536058375490243465516155199593", + true, + [ + "Moo é🚀🚀oéoMooo", + "Moo é🚀ooé🚀ooéo🚀oMM", + "Moo é🚀MMoMMo 🚀🚀oéooééMMoo MM" + ], + "0xcc448419B619D7Cc59d447F8C0B0fC5A3cC100F4", + "Moo é🚀" + ] + ], + "0x1763d060B32aAfA02a6F6cA499038a0e928477b8", + "0x41fdae2306fba3" + ], + "Moo é🚀MMo 🚀oMMéoMoM🚀MooMéo🚀M🚀Mo o", + ["-257060915571", "53125257302"] + ] + ] + ], + [ + [ + [ + [ + false, + "Moo é🚀🚀🚀ooMM🚀MééMoM", + [ + [ + [ + "0x71D355DE0dd118fF156dF8517E39E2ABbabA438f", + "0xaF35671f099B913fDd8AE97CF60b827c179BDA34", + "0xBc2472868D038A4b170BA6D333cE75c8025c376D" + ], + "0x91c7bf133651fdee8746dbcc8859d376ce10083b9b4d" + ], + "0x5eb60976e4fee44b", + [ + "146040914452404139636133140323314417802", + true, + [ + "Moo é🚀oMoé Méoéoé o oéo 🚀 o MéMoooMMM MMMoo🚀éM oo o o", + "Moo é🚀🚀é🚀MMMoooo🚀🚀M 🚀oooéMo", + "Moo é🚀 o🚀 éoéM🚀o MéoMoéoM 🚀 éMoMéé🚀éMMooooMéMéoMMo o" + ], + "0x7d84272a441212743f7FBA0a6083e125F48d5Edc", + "Moo é🚀oooMM🚀oMo oé🚀oé🚀é🚀M" + ] + ], + "0x7581B289936f63c693753b2eB8D2322d55401FEE", + "0xf76707081f9811" + ], + "Moo é🚀Mooooo🚀 oo🚀", + ["-418950882776", "524829848999"] + ], + [ + [ + false, + "Moo é🚀🚀ooo oMéé é", + [ + [ + [ + "0xef39293a07717FCEE87E558F66a69f22a90E716b", + "0xd3238bc068d5469Faae53fe61e3D28809CAA273b", + "0x1D670fE466711115EFa20cb297D5c0421D859389" + ], + "0x958cb3ac8dc7bce8effc6ad24659ff19b9674d94e766" + ], + "0x8b04ef97822e828b", + [ + "-854946371447721398857650813844016249", + true, + [ + "Moo é🚀o🚀o🚀oéoooM🚀éooé🚀🚀 🚀oo oo 🚀🚀🚀oooooéo oMoM", + "Moo é🚀é🚀Mo🚀o Méoo🚀🚀oo 🚀oéo🚀ooMo", + "Moo é🚀🚀🚀 oM oM Moé 🚀oéoé🚀Mo🚀🚀🚀 MooéooMo🚀🚀ooooo " + ], + "0xee59E04DA840532e07D3059d3858fA7955B91204", + "Moo é🚀éoMo🚀é🚀oé" + ] + ], + "0xd44dF1CF962948F082fe43Ed2b01f49dCf99f3d0", + "0x1fa12715f29770" + ], + "Moo é🚀🚀 é🚀o🚀ééooo🚀éooMooéo M oé🚀o🚀ooMMéoMMé🚀 ", + ["-315319918186", "-268249708440"] + ], + [ + [ + false, + "Moo é🚀oééoMMMéoéoMo🚀 oo🚀o", + [ + [ + [ + "0x59D6F42DB099CE0D55a6B7C4a983AbdEB6497920", + "0xa802b1028dca6c4dbf1e2c15E8979d874BEB86b9", + "0xdb0BF0FeD7b4f4EBb2841cD9a680525bb6a190cD" + ], + "0x701aeb0598026806cf2e547cbdff02a87709fc37b759" + ], + "0xb64d9f88ff5e1100", + [ + "2448348339561654361231214220456131733", + true, + [ + "Moo é🚀", + "Moo é🚀o🚀éMéM M ééo🚀M oooo🚀🚀ooo o🚀o", + "Moo é🚀 o🚀éM🚀 🚀 oM🚀M🚀éMéM🚀o🚀ooo MMo é Mooéoéé" + ], + "0x0F968351013E54160E680D2312eee75B42509FcA", + "Moo é🚀MéM M ooé" + ] + ], + "0x8E93fe3045Ce3429Ff3eF8592616FC2C252CcFa0", + "0x5e64ddf75b0de8" + ], + "Moo é🚀ééooo oééoMMéoo 🚀ooM🚀M", + ["8230283030", "-208070293378"] + ], + [ + [ + false, + "Moo é🚀M ooo oMMéo 🚀🚀", + [ + [ + [ + "0xe8be8845Fb6017ceDb280dD3f6aF7d03b747D95e", + "0x4E5f05c11e461D34bA1AD53433A2F238a29f9Afc", + "0x716F35acAb14eC52DaA0Dd6b036A74C2851c2569" + ], + "0x2dcb459c57ae870b8188f72c18bf037001df04c45543" + ], + "0x11c71a1e5adf3682", + [ + "-128872963893010848526820829214143625467", + true, + [ + "Moo é🚀 é éé", + "Moo é🚀🚀Méé🚀🚀o é é éoéoé🚀 🚀MoMooéo🚀ooo o🚀 Mo🚀oéMé🚀 M🚀", + "Moo é🚀M🚀ooé " + ], + "0xf4558561Cae05DF23d50573B375e1b8f2610222F", + "Moo é🚀éooéo🚀 🚀éooMMo🚀oMéo🚀oéooMoooo 🚀oMéoMMM ooo🚀o ooo é o" + ] + ], + "0x02c240A608B92428c196A55861DB5C15cF4989cb", + "0xbbe2d06698156b" + ], + "Moo é🚀M 🚀 oo🚀é🚀éoé éMM", + ["-405381587136", "296350960436"] + ] + ] + ], + [ + [ + [ + [ + false, + "Moo é🚀o", + [ + [ + [ + "0x0271A9f08b096f13F15615Bf3abFBA63A3835228", + "0x57CAA879D4EeC37000334f29dDcFc6EACe9C9054", + "0x70E88A662Cb1688Ad5afe3d51701acE53c89F5b2" + ], + "0xcdaa21752004534fafae55be67ecb8fd35fa4f92272c" + ], + "0xf70538f14abc419f", + [ + "-74770074349806728544199440763260947058", + false, + [ + "Moo é🚀éooM", + "Moo é🚀 🚀🚀 Moo🚀🚀Mé o Mé🚀 oM o o🚀🚀M🚀MoééM o🚀 é🚀oooMM🚀o MM🚀🚀é 🚀🚀", + "Moo é🚀 o é é🚀Mo M" + ], + "0x811D981e7dbe6f80727285343906aa50bE657Ae2", + "Moo é🚀o ooéo MoM🚀 🚀éo oM🚀🚀 éo ooooMoo éMo🚀oo🚀éo🚀🚀oo" + ] + ], + "0x2dD9b0B8Ea3F36f15eAdA31DE8493717073AA5dC", + "0x086cdf87df18c2" + ], + "Moo é🚀o🚀o🚀oM ", + ["13319631627", "-337173007305"] + ], + [ + [ + true, + "Moo é🚀🚀MMéoé Moo M🚀 oMoéoo🚀 oéMéo🚀 Moéooéoooéooooé🚀🚀 o ", + [ + [ + [ + "0xe14CC5dbF416a76d7A606B0C4eF726c01425Dbe1", + "0xD58a1D35359A2860592D29Ba3DFa0b9fbD52F76A", + "0xBc7B421A3c1f8E0283007835e4F809E7423F0816" + ], + "0xdf78fb020870422a9dfd196ef4cdc059e18bc6c6e3c2" + ], + "0x37104cd607a25215", + [ + "103826667361427089928837382649458393018", + false, + [ + "Moo é🚀🚀Mooo🚀MMM Mo 🚀oMooMo🚀MMoéoooM oo🚀MM🚀éM", + "Moo é🚀oé éé🚀ooéoooMooo é🚀ééoM🚀ooéo é🚀🚀é oé🚀🚀é🚀 🚀o🚀o", + "Moo é🚀" + ], + "0x28FF38296fD042aEC5e9672cf44A8a1a17305F18", + "Moo é🚀o🚀é é🚀oéoooMM" + ] + ], + "0x9423a01eFEc6b7aF47fD029575a2D0F992617c7E", + "0x6101e0fe89074f" + ], + "Moo é🚀", + ["437124834717", "-209087154503"] + ], + [ + [ + false, + "Moo é🚀ooo", + [ + [ + [ + "0xB5405956dA2Fa7849f979aFA97ABFd706b942582", + "0xE0470F38eA39eCd0C79B5234EE861caBE4538946", + "0x8365a9E8B96fC7C5e0B65Bf254c8c669aE4FfB49" + ], + "0xf937c889573cb774d0ab3237361b9f3509b6f7d6b7d8" + ], + "0x5cabbbc7466a93ef", + [ + "-140672197555055157231416370861641455899", + true, + [ + "Moo é🚀o", + "Moo é🚀éMMooo 🚀MoéoMMoM éé 🚀oé ", + "Moo é🚀éM🚀MM🚀MoéMMoéMMooéo🚀éééMo éoMo🚀 M M🚀 ooo" + ], + "0x987188ac2B0b4BDe48BF19C9d9CbAa7c0a4B0cc9", + "Moo é🚀" + ] + ], + "0xb41C0c7CE3d4c72427158fe122eaAF1fDA056f75", + "0xf67b8591c9bece" + ], + "Moo é🚀éMéMMMoo🚀🚀é Méé éoMMooMM ", + ["137528695621", "-131315912947"] + ], + [ + [ + false, + "Moo é🚀", + [ + [ + [ + "0x1746211F458690A6A4b71154637876b917cEe918", + "0x31de4CD09EC9715267CC84c6A1C8D7E9FDf8fe20", + "0xd4dDe6bD2e4ac31717510c2Aee22734b007bF148" + ], + "0x54d4138d9f36bab4954ad00b8593bb8345281f7fd842" + ], + "0xb1ebd4df3f415559", + [ + "-4795633902205635648984968202052634112", + true, + [ + "Moo é🚀oooo🚀 o éM ééééoM🚀M oMMé🚀🚀 o🚀oooéMMM oo", + "Moo é🚀o🚀o", + "Moo é🚀" + ], + "0x302B699c9b23359bD795dF80665031799E9848C9", + "Moo é🚀M MMMé🚀oo 🚀o🚀MoM M 🚀" + ] + ], + "0xF5E84cF41CC6e5b38C5759E307f5966089B25e66", + "0xbb72b251fe9700" + ], + "Moo é🚀é🚀 oééMéoooo o🚀oéM 🚀 🚀", + ["-222159116766", "-29436146639"] + ] + ] + ] + ], + true, + "0x5FEa7a766a6f18b075f51b24a578EB3156663f5b" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2557053897289181536776227039130753366531499764" + }, + { + "type": "hexstring", + "value": "0x64e16d767c709174fdb3b814b795d2e683" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "2263345982287538497" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀oo o🚀🚀 oéo🚀 oéMMoMooéoM🚀🚀oMM🚀🚀🚀🚀o " + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x77b2C3b055786ff7A936686c125e84CdB3a3c876" + }, + { + "type": "address", + "value": "0x0d6B791045bdFb317a3B5946B4756B097EC3986b" + }, + { + "type": "address", + "value": "0xc12F0c8d22b046D909C69bC89f21C531c5746163" + } + ] + }, + { + "type": "hexstring", + "value": "0x608e571f1d7724d085dae45ac249071d05747dba741d" + } + ] + }, + { + "type": "hexstring", + "value": "0x5cb7199b7b95e3e9" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-50107174431156178692800459312299352861" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀 oM🚀Mo🚀 Moo🚀M🚀é o🚀MéMéooéM🚀MMoM 🚀o M🚀 🚀 o MM🚀🚀 oé" + }, + { + "type": "string", + "value": "Moo é🚀o🚀éoMo éé🚀oooé🚀Mo🚀 é🚀MMMMéoM🚀oo🚀oo 🚀Moé ooo 🚀🚀🚀" + }, + { + "type": "string", + "value": "Moo é🚀🚀M🚀o🚀oMé🚀 oooM MM🚀o ooo" + } + ] + }, + { + "type": "address", + "value": "0x87B4709AFAe80773735280825B347d9971eCB691" + }, + { + "type": "string", + "value": "Moo é🚀🚀o" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xF7fF3Be34346B75ffFFE0d5Dc0225aFdB212Dd25" + }, + { + "type": "hexstring", + "value": "0x368a7df30c3967" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀oMoo 🚀 oo" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-266286681710" + }, + { + "type": "number", + "value": "525885121095" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀o éoéééooMM🚀M 🚀oM " + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x13eC2E2dE547f48AD354ee4AEd82c2b8c3E5E556" + }, + { + "type": "address", + "value": "0x3D0906dbA7D38713b1184eA920bf0d2bAaCc07f2" + }, + { + "type": "address", + "value": "0x4746B3d6DE6140DC59dD9E9704B91f86858aE500" + } + ] + }, + { + "type": "hexstring", + "value": "0x73246ca93dd5735fbacb9107c823b7f8eb104af8f806" + } + ] + }, + { + "type": "hexstring", + "value": "0x5d3c845b5aa34420" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "163701809972189021710462008086298077530" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 o🚀é🚀oM" + }, + { + "type": "string", + "value": "Moo é🚀 éo oM" + }, + { + "type": "string", + "value": "Moo é🚀 M 🚀éééoMMooo🚀Mé 🚀MM é o🚀o🚀 éMoé" + } + ] + }, + { + "type": "address", + "value": "0x6Fc60D8c853d725e0906bDaB3E09Fe71d9ef467b" + }, + { + "type": "string", + "value": "Moo é🚀🚀o o🚀Mo oMé🚀é🚀é🚀oMo🚀o oéo o🚀ooMooé Moé🚀o " + } + ] + } + ] + }, + { + "type": "address", + "value": "0x738Eb7EB4664B050A29298068da94C056718FF1A" + }, + { + "type": "hexstring", + "value": "0x749fb2c41b7b88" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-294063635696" + }, + { + "type": "number", + "value": "-457809642668" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀oééo Mo éMéé 🚀éM oM" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xC3DdC93DF8929dC89eA3286542C6cEDE3cBfc0C4" + }, + { + "type": "address", + "value": "0x718dd49145B4ae405AF2cB6E56c091C4c10a802B" + }, + { + "type": "address", + "value": "0x7E03FB9e50c1e7219d7077F1D0ED28D54FfC832e" + } + ] + }, + { + "type": "hexstring", + "value": "0xe25599e0ec186c4f00d74a6c396bfbbab24c6082b168" + } + ] + }, + { + "type": "hexstring", + "value": "0xb6c22be93fc4e473" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-102733595900354371215138505875632835742" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oééoMooéoéoooo🚀o 🚀éooéo o🚀M🚀o 🚀M Méooo" + }, + { + "type": "string", + "value": "Moo é🚀🚀o🚀oMoééo éééooM🚀🚀ooo" + }, + { + "type": "string", + "value": "Moo é🚀🚀o oo 🚀🚀M oooMMMM🚀o 🚀Mo🚀o🚀M🚀ooo éMoo🚀🚀 ooM🚀o🚀éé éé🚀 oMM" + } + ] + }, + { + "type": "address", + "value": "0xe93Bd7EA3eD7907837CD88f19d851CE440438b4B" + }, + { + "type": "string", + "value": "Moo é🚀oééM🚀o🚀oooooééoM🚀é🚀éMM🚀🚀o🚀🚀éo🚀 o🚀o🚀 oo 🚀oo🚀oMéé éM" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xDc1Df1fE26e618D818543eeAEB4E43AD32cD6665" + }, + { + "type": "hexstring", + "value": "0x5325fa2502fdd1" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oéooo oéMM🚀é ooé 🚀🚀M ooooMM M🚀éo🚀 M 🚀🚀é MMoé oo🚀oo o🚀Mo" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "478765699500" + }, + { + "type": "number", + "value": "-495211968069" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x4f099c8f6d99818636f5AD1eea5C9B133ef99048" + }, + { + "type": "address", + "value": "0x9E9544EF65849969c0cc0cEB86233a7e09468970" + }, + { + "type": "address", + "value": "0xe13c2A64ee60dC0f94b985fb7BC91b158EE00559" + } + ] + }, + { + "type": "hexstring", + "value": "0xd2946b3810589dd01ef0d704dd434f8183d67cd8de0b" + } + ] + }, + { + "type": "hexstring", + "value": "0x290c94382d81ad3c" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "161748600966332684423685375546815565583" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀 éMoooo M🚀éMoéM🚀é é🚀Mooooéé🚀éo éoooééoMéMo oMM o🚀 ooM" + }, + { + "type": "string", + "value": "Moo é🚀 🚀éooo o🚀" + } + ] + }, + { + "type": "address", + "value": "0x90127D0D0261C4B20E2Cc2085db10024101b3104" + }, + { + "type": "string", + "value": "Moo é🚀ooé o" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xff958C5E3973110d2EC056910087A5654ae881AB" + }, + { + "type": "hexstring", + "value": "0x0ef43618428a14" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-242978510265" + }, + { + "type": "number", + "value": "-173359248627" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀M Mo🚀🚀MM🚀M🚀🚀 éo🚀Méoéo🚀é 🚀ooM oooMoM oooo éooM 🚀 " + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x5D636E181B8417a58326e34d561E4070FbD8E178" + }, + { + "type": "address", + "value": "0x3baa6BB0f96eF7ff900f931D00251758415f600E" + }, + { + "type": "address", + "value": "0xbf750a076E3C9035F4cFC383D8083dCA34248c6f" + } + ] + }, + { + "type": "hexstring", + "value": "0x80aedb9fd3b8201fc59d17301d578348184d1bfcc3a6" + } + ] + }, + { + "type": "hexstring", + "value": "0xf53f134197ff0ba6" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-47063988488179439809328724451385541069" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M Méo 🚀 éMooo🚀é🚀M🚀oo🚀🚀éoo é🚀MoooM🚀MoooM🚀éoo éo éMMé oé" + }, + { + "type": "string", + "value": "Moo é🚀Moo ooMo 🚀🚀 o 🚀ooo🚀🚀oMMo🚀 oo" + }, + { + "type": "string", + "value": "Moo é🚀o M🚀🚀é oéoo🚀oo🚀 o Mé o🚀MM M🚀éMéoo ooMéo🚀oMM🚀 é MéMéMé " + } + ] + }, + { + "type": "address", + "value": "0x25A029586837483b82dcC5dbe3630849BD6c78BA" + }, + { + "type": "string", + "value": "Moo é🚀éMooMoo🚀🚀M🚀é🚀o🚀ooM o 🚀Méé é 🚀" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xA19B175B3399848d4473c4bbE5996aF5C0e165d9" + }, + { + "type": "hexstring", + "value": "0x578d256e7d3df9" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ééo🚀ééo" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-499993156525" + }, + { + "type": "number", + "value": "-247386515738" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀oéooé🚀M" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xa4802F649bC5834De9DfeAcC9766d4ff9207e408" + }, + { + "type": "address", + "value": "0x160909344d5C144B7F502d868C24A41f96e0fD53" + }, + { + "type": "address", + "value": "0x8BefD74625fbeB828f03F583fB8004Cf836985C1" + } + ] + }, + { + "type": "hexstring", + "value": "0x95841e588dafb0c7c847aeed0a0ad6710eff930f55ee" + } + ] + }, + { + "type": "hexstring", + "value": "0x5a4c00cd7a9721ca" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "63624728085155674815414656595645876392" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀o🚀 M🚀🚀é M é🚀éMM o ééM" + }, + { + "type": "string", + "value": "Moo é🚀éoM 🚀🚀oMMMoooMM🚀ééMM oo ooo é🚀éoMMoé" + }, + { + "type": "string", + "value": "Moo é🚀MééoM o🚀oM🚀oooM 🚀M Mo Méo ooéé🚀ooM" + } + ] + }, + { + "type": "address", + "value": "0xebd39a65B78c03b3D2ADD73F4E8D2273c1DB7106" + }, + { + "type": "string", + "value": "Moo é🚀o🚀o é oM🚀Moéé M 🚀🚀o éooéM🚀🚀M o🚀MoMoéoéoo🚀" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xa4c2D29CD36d5B885bb649dCeC0a663CB1de37b0" + }, + { + "type": "hexstring", + "value": "0xd040e3305117e6" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooééoM o🚀M Mooé🚀" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "34804187488" + }, + { + "type": "number", + "value": "-515844725223" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀M🚀M éo Mé oéMéé🚀 é" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x4D814fB71Bcf5AAD58B2205cAEcf2B8fce94446a" + }, + { + "type": "address", + "value": "0xc5b216cD7c4D9aA71696626656af3C3997543b94" + }, + { + "type": "address", + "value": "0xb4c8197664D834A78fa598544E57bAf061024A8F" + } + ] + }, + { + "type": "hexstring", + "value": "0xda6b9c3f7d2fdd2a79dd85e5ab48059e8971ed48e298" + } + ] + }, + { + "type": "hexstring", + "value": "0x96068b8ecef5bc60" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-50414449485213460151355499249196331985" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀o🚀🚀oooooo🚀éooMMéoo🚀 🚀🚀o🚀é 🚀éoooM ooM M MM🚀oéé Mo🚀oo" + }, + { + "type": "string", + "value": "Moo é🚀M🚀oé🚀M🚀🚀é" + } + ] + }, + { + "type": "address", + "value": "0xB0A6522B4eD9821a887f885e76c4087FA266787E" + }, + { + "type": "string", + "value": "Moo é🚀oMo🚀 Méé🚀oo🚀🚀o🚀o🚀Mo🚀 🚀éé" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xDbfCF080a14358ECDd3DD8d30C698AA16e0845FE" + }, + { + "type": "hexstring", + "value": "0x982f0841cc90a1" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oo Mé🚀🚀 M M" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-213545541656" + }, + { + "type": "number", + "value": "296114960907" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀é🚀éoMo éM 🚀🚀🚀éMoMooMéoo🚀🚀Mo " + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x6167eC3F676b54F2842c038Ed55C8fAfa2DF4196" + }, + { + "type": "address", + "value": "0xede5094843deB0795E98c13c57c1B1d26E3b30bb" + }, + { + "type": "address", + "value": "0x368e4cc37E84485479462E3eB131F47F20733104" + } + ] + }, + { + "type": "hexstring", + "value": "0x8eece1fc5d97366349413a277eda09d017d76df51293" + } + ] + }, + { + "type": "hexstring", + "value": "0x7641870d67c9cd29" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "141817897536058375490243465516155199593" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oéoMooo" + }, + { + "type": "string", + "value": "Moo é🚀ooé🚀ooéo🚀oMM" + }, + { + "type": "string", + "value": "Moo é🚀MMoMMo 🚀🚀oéooééMMoo MM" + } + ] + }, + { + "type": "address", + "value": "0xcc448419B619D7Cc59d447F8C0B0fC5A3cC100F4" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x1763d060B32aAfA02a6F6cA499038a0e928477b8" + }, + { + "type": "hexstring", + "value": "0x41fdae2306fba3" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀MMo 🚀oMMéoMoM🚀MooMéo🚀M🚀Mo o" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-257060915571" + }, + { + "type": "number", + "value": "53125257302" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀ooMM🚀MééMoM" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x71D355DE0dd118fF156dF8517E39E2ABbabA438f" + }, + { + "type": "address", + "value": "0xaF35671f099B913fDd8AE97CF60b827c179BDA34" + }, + { + "type": "address", + "value": "0xBc2472868D038A4b170BA6D333cE75c8025c376D" + } + ] + }, + { + "type": "hexstring", + "value": "0x91c7bf133651fdee8746dbcc8859d376ce10083b9b4d" + } + ] + }, + { + "type": "hexstring", + "value": "0x5eb60976e4fee44b" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "146040914452404139636133140323314417802" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oMoé Méoéoé o oéo 🚀 o MéMoooMMM MMMoo🚀éM oo o o" + }, + { + "type": "string", + "value": "Moo é🚀🚀é🚀MMMoooo🚀🚀M 🚀oooéMo" + }, + { + "type": "string", + "value": "Moo é🚀 o🚀 éoéM🚀o MéoMoéoM 🚀 éMoMéé🚀éMMooooMéMéoMMo o" + } + ] + }, + { + "type": "address", + "value": "0x7d84272a441212743f7FBA0a6083e125F48d5Edc" + }, + { + "type": "string", + "value": "Moo é🚀oooMM🚀oMo oé🚀oé🚀é🚀M" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x7581B289936f63c693753b2eB8D2322d55401FEE" + }, + { + "type": "hexstring", + "value": "0xf76707081f9811" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Mooooo🚀 oo🚀" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-418950882776" + }, + { + "type": "number", + "value": "524829848999" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀🚀ooo oMéé é" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xef39293a07717FCEE87E558F66a69f22a90E716b" + }, + { + "type": "address", + "value": "0xd3238bc068d5469Faae53fe61e3D28809CAA273b" + }, + { + "type": "address", + "value": "0x1D670fE466711115EFa20cb297D5c0421D859389" + } + ] + }, + { + "type": "hexstring", + "value": "0x958cb3ac8dc7bce8effc6ad24659ff19b9674d94e766" + } + ] + }, + { + "type": "hexstring", + "value": "0x8b04ef97822e828b" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-854946371447721398857650813844016249" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o🚀o🚀oéoooM🚀éooé🚀🚀 🚀oo oo 🚀🚀🚀oooooéo oMoM" + }, + { + "type": "string", + "value": "Moo é🚀é🚀Mo🚀o Méoo🚀🚀oo 🚀oéo🚀ooMo" + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀 oM oM Moé 🚀oéoé🚀Mo🚀🚀🚀 MooéooMo🚀🚀ooooo " + } + ] + }, + { + "type": "address", + "value": "0xee59E04DA840532e07D3059d3858fA7955B91204" + }, + { + "type": "string", + "value": "Moo é🚀éoMo🚀é🚀oé" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xd44dF1CF962948F082fe43Ed2b01f49dCf99f3d0" + }, + { + "type": "hexstring", + "value": "0x1fa12715f29770" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀 é🚀o🚀ééooo🚀éooMooéo M oé🚀o🚀ooMMéoMMé🚀 " + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-315319918186" + }, + { + "type": "number", + "value": "-268249708440" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀oééoMMMéoéoMo🚀 oo🚀o" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x59D6F42DB099CE0D55a6B7C4a983AbdEB6497920" + }, + { + "type": "address", + "value": "0xa802b1028dca6c4dbf1e2c15E8979d874BEB86b9" + }, + { + "type": "address", + "value": "0xdb0BF0FeD7b4f4EBb2841cD9a680525bb6a190cD" + } + ] + }, + { + "type": "hexstring", + "value": "0x701aeb0598026806cf2e547cbdff02a87709fc37b759" + } + ] + }, + { + "type": "hexstring", + "value": "0xb64d9f88ff5e1100" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2448348339561654361231214220456131733" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀o🚀éMéM M ééo🚀M oooo🚀🚀ooo o🚀o" + }, + { + "type": "string", + "value": "Moo é🚀 o🚀éM🚀 🚀 oM🚀M🚀éMéM🚀o🚀ooo MMo é Mooéoéé" + } + ] + }, + { + "type": "address", + "value": "0x0F968351013E54160E680D2312eee75B42509FcA" + }, + { + "type": "string", + "value": "Moo é🚀MéM M ooé" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x8E93fe3045Ce3429Ff3eF8592616FC2C252CcFa0" + }, + { + "type": "hexstring", + "value": "0x5e64ddf75b0de8" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ééooo oééoMMéoo 🚀ooM🚀M" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "8230283030" + }, + { + "type": "number", + "value": "-208070293378" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀M ooo oMMéo 🚀🚀" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xe8be8845Fb6017ceDb280dD3f6aF7d03b747D95e" + }, + { + "type": "address", + "value": "0x4E5f05c11e461D34bA1AD53433A2F238a29f9Afc" + }, + { + "type": "address", + "value": "0x716F35acAb14eC52DaA0Dd6b036A74C2851c2569" + } + ] + }, + { + "type": "hexstring", + "value": "0x2dcb459c57ae870b8188f72c18bf037001df04c45543" + } + ] + }, + { + "type": "hexstring", + "value": "0x11c71a1e5adf3682" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-128872963893010848526820829214143625467" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é éé" + }, + { + "type": "string", + "value": "Moo é🚀🚀Méé🚀🚀o é é éoéoé🚀 🚀MoMooéo🚀ooo o🚀 Mo🚀oéMé🚀 M🚀" + }, + { + "type": "string", + "value": "Moo é🚀M🚀ooé " + } + ] + }, + { + "type": "address", + "value": "0xf4558561Cae05DF23d50573B375e1b8f2610222F" + }, + { + "type": "string", + "value": "Moo é🚀éooéo🚀 🚀éooMMo🚀oMéo🚀oéooMoooo 🚀oMéoMMM ooo🚀o ooo é o" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x02c240A608B92428c196A55861DB5C15cF4989cb" + }, + { + "type": "hexstring", + "value": "0xbbe2d06698156b" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M 🚀 oo🚀é🚀éoé éMM" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-405381587136" + }, + { + "type": "number", + "value": "296350960436" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀o" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x0271A9f08b096f13F15615Bf3abFBA63A3835228" + }, + { + "type": "address", + "value": "0x57CAA879D4EeC37000334f29dDcFc6EACe9C9054" + }, + { + "type": "address", + "value": "0x70E88A662Cb1688Ad5afe3d51701acE53c89F5b2" + } + ] + }, + { + "type": "hexstring", + "value": "0xcdaa21752004534fafae55be67ecb8fd35fa4f92272c" + } + ] + }, + { + "type": "hexstring", + "value": "0xf70538f14abc419f" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-74770074349806728544199440763260947058" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éooM" + }, + { + "type": "string", + "value": "Moo é🚀 🚀🚀 Moo🚀🚀Mé o Mé🚀 oM o o🚀🚀M🚀MoééM o🚀 é🚀oooMM🚀o MM🚀🚀é 🚀🚀" + }, + { + "type": "string", + "value": "Moo é🚀 o é é🚀Mo M" + } + ] + }, + { + "type": "address", + "value": "0x811D981e7dbe6f80727285343906aa50bE657Ae2" + }, + { + "type": "string", + "value": "Moo é🚀o ooéo MoM🚀 🚀éo oM🚀🚀 éo ooooMoo éMo🚀oo🚀éo🚀🚀oo" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x2dD9b0B8Ea3F36f15eAdA31DE8493717073AA5dC" + }, + { + "type": "hexstring", + "value": "0x086cdf87df18c2" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀o🚀oM " + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "13319631627" + }, + { + "type": "number", + "value": "-337173007305" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀🚀MMéoé Moo M🚀 oMoéoo🚀 oéMéo🚀 Moéooéoooéooooé🚀🚀 o " + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xe14CC5dbF416a76d7A606B0C4eF726c01425Dbe1" + }, + { + "type": "address", + "value": "0xD58a1D35359A2860592D29Ba3DFa0b9fbD52F76A" + }, + { + "type": "address", + "value": "0xBc7B421A3c1f8E0283007835e4F809E7423F0816" + } + ] + }, + { + "type": "hexstring", + "value": "0xdf78fb020870422a9dfd196ef4cdc059e18bc6c6e3c2" + } + ] + }, + { + "type": "hexstring", + "value": "0x37104cd607a25215" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "103826667361427089928837382649458393018" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀Mooo🚀MMM Mo 🚀oMooMo🚀MMoéoooM oo🚀MM🚀éM" + }, + { + "type": "string", + "value": "Moo é🚀oé éé🚀ooéoooMooo é🚀ééoM🚀ooéo é🚀🚀é oé🚀🚀é🚀 🚀o🚀o" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "address", + "value": "0x28FF38296fD042aEC5e9672cf44A8a1a17305F18" + }, + { + "type": "string", + "value": "Moo é🚀o🚀é é🚀oéoooMM" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x9423a01eFEc6b7aF47fD029575a2D0F992617c7E" + }, + { + "type": "hexstring", + "value": "0x6101e0fe89074f" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "437124834717" + }, + { + "type": "number", + "value": "-209087154503" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀ooo" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xB5405956dA2Fa7849f979aFA97ABFd706b942582" + }, + { + "type": "address", + "value": "0xE0470F38eA39eCd0C79B5234EE861caBE4538946" + }, + { + "type": "address", + "value": "0x8365a9E8B96fC7C5e0B65Bf254c8c669aE4FfB49" + } + ] + }, + { + "type": "hexstring", + "value": "0xf937c889573cb774d0ab3237361b9f3509b6f7d6b7d8" + } + ] + }, + { + "type": "hexstring", + "value": "0x5cabbbc7466a93ef" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-140672197555055157231416370861641455899" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o" + }, + { + "type": "string", + "value": "Moo é🚀éMMooo 🚀MoéoMMoM éé 🚀oé " + }, + { + "type": "string", + "value": "Moo é🚀éM🚀MM🚀MoéMMoéMMooéo🚀éééMo éoMo🚀 M M🚀 ooo" + } + ] + }, + { + "type": "address", + "value": "0x987188ac2B0b4BDe48BF19C9d9CbAa7c0a4B0cc9" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xb41C0c7CE3d4c72427158fe122eaAF1fDA056f75" + }, + { + "type": "hexstring", + "value": "0xf67b8591c9bece" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éMéMMMoo🚀🚀é Méé éoMMooMM " + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "137528695621" + }, + { + "type": "number", + "value": "-131315912947" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x1746211F458690A6A4b71154637876b917cEe918" + }, + { + "type": "address", + "value": "0x31de4CD09EC9715267CC84c6A1C8D7E9FDf8fe20" + }, + { + "type": "address", + "value": "0xd4dDe6bD2e4ac31717510c2Aee22734b007bF148" + } + ] + }, + { + "type": "hexstring", + "value": "0x54d4138d9f36bab4954ad00b8593bb8345281f7fd842" + } + ] + }, + { + "type": "hexstring", + "value": "0xb1ebd4df3f415559" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-4795633902205635648984968202052634112" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oooo🚀 o éM ééééoM🚀M oMMé🚀🚀 o🚀oooéMMM oo" + }, + { + "type": "string", + "value": "Moo é🚀o🚀o" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "address", + "value": "0x302B699c9b23359bD795dF80665031799E9848C9" + }, + { + "type": "string", + "value": "Moo é🚀M MMMé🚀oo 🚀o🚀MoM M 🚀" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xF5E84cF41CC6e5b38C5759E307f5966089B25e66" + }, + { + "type": "hexstring", + "value": "0xbb72b251fe9700" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀é🚀 oééMéoooo o🚀oéM 🚀 🚀" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-222159116766" + }, + { + "type": "number", + "value": "-29436146639" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x5FEa7a766a6f18b075f51b24a578EB3156663f5b" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50613cdf806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190612c51565b60405180910390f35b610056612753565b61005e612753565b610066612787565b7272a98a070c21be46645eb52e8cb3a06d67e6f481527064e16d767c709174fdb3b814b795d2e68360781b602082015261009e6127b3565b671f69052dde0e6941815260408201526001606082015281526100bf6127d1565b6100c76127fe565b6100cf61282b565b6100d7612858565b6100df612884565b600181526040805160808101909152605280825260009190613a23602083013960208301525061010d6128a0565b6101156128c7565b61011d6128d6565b7377b2c3b055786ff7a936686c125e84cdb3a3c8768152730d6b791045bdfb317a3b5946b4756b097ec3986b60208083019190915273c12f0c8d22b046d909c69bc89f21c531c5746163604083015290825275608e571f1d7724d085dae45ac249071d05747dba741d60501b82820152908252675cb7199b7b95e3e960c01b908201526101a86128f4565b6f25b24a6fad612c8697e119946051a31c198152600160208083019190915260408051606080820183528082529281018390529081019190915260006040518060a0016040528060678152602001613092606791398252506040805160a08101909152606280825260009190612ff760208301399050808260200181905250506000604051806060016040528060328152602001613a756032913960408084019190915283810192909252507387b4709afae80773735280825b347d9971ecb69160608084019190915281518083018352600f81526e4d6f6f20c3a9f09f9a80f09f9a806f60881b602080830191909152608080860192909252858401949094528583019490945273f7ff3be34346b75ffffe0d5dc0225afdb212dd259085015266368a7df30c396760c81b928401929092529183528051808201909152601b81527f4d6f6f20c3a9f09f9a80f09f9a806f4d6f6f20f09f9a8020206f6f0000000000818301529082015261031b61294a565b643dffec4e6d198152647a7132224760208201526040820152815261033e612858565b610346612884565b600080825260408051606081019091526026808252612f4e60208301396020830152506103716128a0565b6103796128c7565b6103816128d6565b7313ec2e2de547f48ad354ee4aed82c2b8c3e5e5568152733d0906dba7d38713b1184ea920bf0d2baacc07f2602080830191909152734746b3d6de6140dc59dd9e9704b91f86858ae500604083015290825275399236549eeab9afdd65c883e411dbfc7588257c7c0360511b828201529082526702e9e422dad51a2160c51b9082015261040c6128f4565b6f7b27d2600402a6387aa3f6ec9a9fa95a81526000602080830182905260408051606080820183528082528184018181528284019190915282518084018452601881527f4d6f6f20c3a9f09f9a80206ff09f9a80c3a9f09f9a806f4d00000000000000008186015282528251808401845260118152704d6f6f20c3a9f09f9a8020c3a96f206f4d60781b8186015290528151608081019092526042808352909392613608908301396040808401919091528381019290925250736fc60d8c853d725e0906bdab3e09fe71d9ef467b60608301528051608081019091526052808252600091906133586020830139608080840191909152604080850193909352848301939093525073738eb7eb4664b050a29298068da94c056718ff1a6060840152660e93f658836f7160cb1b918301919091529082528051808201909152600a8152689adede418753e13f3560b71b60208083019190915282015261056f61294a565b6444778efcef198152646a9794c4ab19602080830191909152604083019190915282015261059b612858565b6105a3612884565b600181526040805160608101909152602980825260009190612f2560208301396020830152506105d16128a0565b6105d96128c7565b6105e16128d6565b73c3ddc93df8929dc89ea3286542c6cede3cbfc0c4815273718dd49145b4ae405af2cb6e56c091c4c10a802b602080830191909152737e03fb9e50c1e7219d7077f1d0ed28d54ffc832e6040830152908252751c4ab33c1d830d89e01ae94d872d7f7756498c10562d60531b8282015290825267b6c22be93fc4e47360c01b9082015261066c6128f4565b6f4d49c5575646576a9d6e932c65424c9d198152600060208083018290526040805160608082018352808252818401819052818301528151608081019092526046808352909392612f749083013982525060408051606081019091526030808252600091906132ef602083013990508082602001819052505060006040518060a00160405280606f815260200161369c606f9139604080840191909152838101929092525073e93bd7ea3ed7907837cd88f19d851ce440438b4b6060830152805160a08101909152606e808252600091906138686020830139608080840191909152604080850193909352848301939093525073dc1df1fe26e618d818543eeaeb4e43ad32cd66656060840152665325fa2502fdd160c81b91830191909152908252805160a08101909152606380825260009190613ad560208301396020830152506107b661294a565b646f78a8d1ac815264734ceef6441960208201526040828101919091528201526107de612858565b6107e6612884565b6001815260408051808201909152600a8152689adede418753e13f3560b71b6020808301919091528201526108196128a0565b6108216128c7565b6108296128d6565b734f099c8f6d99818636f5ad1eea5c9b133ef990488152739e9544ef65849969c0cc0ceb86233a7e0946897060208083019190915273e13c2a64ee60dc0f94b985fb7bc91b158ee00559604083015290825275d2946b3810589dd01ef0d704dd434f8183d67cd8de0b60501b82820152908252670a43250e0b606b4f60c21b908201526108b46128f4565b6f79afa5bc6cae5062853572445b6a4f0f81526000602080830182905260408051606080820183528082528184018190528183015281518083018352600a8152689adede418753e13f3560b71b818501528152815160808101909252605c80835290939261350790830139602080840191909152604080518082018252601a81527f4d6f6f20c3a9f09f9a8020f09f9a80c3a96f6f6f206ff09f9a800000000000008184015281850152848101939093527390127d0d0261c4b20e2cc2085db10024101b310460608086019190915283518085018552601081526f4d6f6f20c3a9f09f9a806f6fc3a9206f60801b81840152608080870191909152868501959095528684019590955273ff958c5e3973110d2ec056910087a5654ae881ab94860194909452506603bd0d8610a28560ca1b918401919091529183528151808301909252600b82526a4d6f6f20c3a9f09f9a806f60a81b82820152820152610a1961294a565b643892a5d5b819815264285d0434f21960208201526040820152606082015281528152610a446127fe565b610a4c61282b565b610a54612858565b610a5c612884565b60008082526040805160808101909152605a8082526130f96020830139602083015250610a876128a0565b610a8f6128c7565b610a976128d6565b735d636e181b8417a58326e34d561e4070fbd8e1788152733baa6bb0f96ef7ff900f931d00251758415f600e60208083019190915273bf750a076e3c9035f4cfc383d8083dca34248c6f60408301529082527540576dcfe9dc100fe2ce8b980eabc1a40c268dfe61d360511b82820152908252677a9f89a0cbff85d360c11b90820152610b226128f4565b6f236831c8fe58e9730155c6e92c3601cc198152600160208083019190915260408051606080820183528082529281018390529081019190915260006040518060a0016040528060668152602001612ddd606691398252506040805160608101909152603980825260009190613059602083013990508082602001819052505060006040518060a00160405280606381526020016133aa6063913960408084019190915283810192909252507325a029586837483b82dcc5dbe3630849bd6c78ba60608301528051608081019091526041808252600091906135c76020830139608080840191909152604080850193909352848301939093525073a19b175b3399848d4473c4bbe5996af5c0e165d9606084015266578d256e7d3df960c81b918301919091529082528051808201909152601881527f4d6f6f20c3a9f09f9a80c3a9c3a96ff09f9a80c3a9c3a96f0000000000000000602080830191909152820152610c8c61294a565b647469ea1bac19815264399962a91919602082015260408201528152610cb0612858565b610cb8612884565b600181526040805180820190915260168152754d6f6f20c3a9f09f9a806fc3a96f6fc3a9f09f9a804d60501b602080830191909152820152610cf86128a0565b610d006128c7565b610d086128d6565b73a4802f649bc5834de9dfeacc9766d4ff9207e408815273160909344d5c144b7f502d868c24a41f96e0fd53602080830191909152738befd74625fbeb828f03f583fb8004cf836985c16040830152908252754ac20f2c46d7d863e423d77685056b38877fc987aaf760511b82820152908252672d260066bd4b90e560c11b90820152610d936128f4565b6f2fddad497796e5078b01986f9adac8a88152600160208083019190915260408051606080820183528082529281018390529081019190915260006040518060600160405280603581526020016137326035913982525060408051608081019091526043808252600091906134c4602083013990508082602001819052505060006040518060600160405280603d8152602001612d57603d9139604080840191909152838101929092525073ebd39a65b78c03b3d2add73f4e8d2273c1db710660608301528051608081019091526052808252600091906137676020830139608080840191909152604080850193909352848301939093525073a4c2d29cd36d5b885bb649dcec0a663cb1de37b06060808501919091526668207198288bf360c91b928401929092529183528151908101909152602580825260009190612d326020830139602083015250610ee661294a565b64081a7dc160815264781abdd9e6196020808301919091526040830191909152820152610f11612858565b610f19612884565b60008082526040805160608101909152602a80825261322d6020830139602083015250610f446128a0565b610f4c6128c7565b610f546128d6565b734d814fb71bcf5aad58b2205caecf2b8fce94446a815273c5b216cd7c4d9aa71696626656af3c3997543b9460208083019190915273b4c8197664d834a78fa598544e57baf061024a8f6040830152908252751b4d7387efa5fba54f3bb0bcb56900b3d12e3da91c5360531b828201529082526704b0345c7677ade360c51b90820152610fdf6128f4565b6f25ed78441d2e8a6b247e087382bff3d0198152600160208083019190915260408051606080820183528082528184018190528183015281518083018352600a8152689adede418753e13f3560b71b818501528152815160a08101909252606280835290926000929190613806908301399050808260200181905250506000604051806060016040528060218152602001613bac60219139604080840191909152838101929092525073b0a6522b4ed9821a887f885e76c4087fa266787e6060808401919091528151908101909152603e80825260009190612e996020830139608080840191909152604080850193909352848301939093525073dbfcf080a14358ecdd3dd8d30c698aa16e0845fe606084015266982f0841cc90a160c81b918301919091529082528051808201909152601d81527f4d6f6f20c3a9f09f9a806f6f204dc3a9f09f9a80f09f9a8020204d204d00000060208083019190915282015261114961294a565b6431b84e60171981526444f1d3ba0b6020820152604082810191909152820152611171612858565b611179612884565b60008082526040805160608101909152603d808252612fba60208301396020830152506111a46128a0565b6111ac6128c7565b6111b46128d6565b736167ec3f676b54f2842c038ed55c8fafa2df4196815273ede5094843deb0795e98c13c57c1b1d26e3b30bb60208083019190915273368e4cc37e84485479462e3eb131f47f207331046040830152908252758eece1fc5d97366349413a277eda09d017d76df5129360501b82820152908252677641870d67c9cd2960c01b9082015261123f6128f4565b6f6ab122306deb47ff08c2ed30d144e0698152600160208083019190915260408051606080820183528082528184018181528284018290528351808501855260168152754d6f6f20c3a9f09f9a80f09f9a806fc3a96f4d6f6f6f60501b81870152835283518085018552601e81527f4d6f6f20c3a9f09f9a806f6fc3a9f09f9a806f6fc3a96ff09f9a806f4d4d00008187015290528251908101909252602980835290926000929190612e7090830139604080840191909152838101929092525073cc448419b619d7cc59d447f8c0b0fc5a3cc100f460608084019190915281518083018352600a8152689adede418753e13f3560b71b6020808301919091526080808601929092528584019490945285830194909452731763d060b32aafa02a6f6ca499038a0e928477b8858201526641fdae2306fba360c81b9385019390935292845282519182019092526034808252600092613490908301396020830152506113a961294a565b643bda064972198152640c5e831856602080830191909152604083019190915260608301919091529082528201526113df6127fe565b6113e761282b565b6113ef612858565b6113f7612884565b6000808252604080516060810190915260228082526137b960208301396020830152506114226128a0565b61142a6128c7565b6114326128d6565b7371d355de0dd118ff156df8517e39e2abbaba438f815273af35671f099b913fdd8ae97cf60b827c179bda3460208083019190915273bc2472868d038a4b170ba6d333ce75c8025c376d60408301529082527591c7bf133651fdee8746dbcc8859d376ce10083b9b4d60501b82820152908252675eb60976e4fee44b60c01b908201526114bd6128f4565b6f6dde74ff966ff7ec6bee74c31dbfc08a8152600160208083019190915260408051606080820183528082529281018390529081019190915260006040518060800160405280604a8152602001613257604a91398252506040805160608101909152603080825260009190613910602083013990508082602001819052505060006040518060800160405280604e8152602001612ed7604e91396040808401919091528381019290925250737d84272a441212743f7fba0a6083e125f48d5edc6060808401919091528151908101909152602d80825260009190612e4360208301396080808401919091526040808501939093528483019390935250737581b289936f63c693753b2eb8d2322d55401fee606084015266f76707081f981160c81b918301919091529082528051808201909152601c81527f4d6f6f20c3a9f09f9a804d6f6f6f6f6ff09f9a8020206f6ff09f9a800000000060208083019190915282015261162961294a565b64618b6b25d7198152647a324bf5a760208201526040820152815261164c612858565b611654612884565b6000815260408051808201909152601b81527f4d6f6f20c3a9f09f9a80f09f9a806f6f6f206f4dc3a9c3a920c3a9000000000060208083019190915282015261169b6128a0565b6116a36128c7565b6116ab6128d6565b73ef39293a07717fcee87e558f66a69f22a90e716b815273d3238bc068d5469faae53fe61e3d28809caa273b602080830191909152731d670fe466711115efa20cb297d5c0421d8593896040830152908252754ac659d646e3de7477fe3569232cff8cdcb3a6ca73b360511b82820152908252678b04ef97822e828b60c01b908201526117366128f4565b6ea4a81c4bc21d50f6a3fca219974c781981526001602080830191909152604080516060808201835280825292810183905290810191909152600060405180608001604052806051815260200161340d60519139825250604080516060810190915260398082526000919061331f6020830139905080826020018190525050600060405180608001604052806052815260200161364a60529139604080840191909152838101929092525073ee59e04da840532e07d3059d3858fa7955b9120460608084019190915281518083018352601c81527f4d6f6f20c3a9f09f9a80c3a96f4d6ff09f9a80c3a9f09f9a806fc3a900000000602080830191909152608080860192909252858401949094528583019490945273d44df1cf962948f082fe43ed2b01f49dcf99f3d0908501526601fa12715f297760cc1b848401529284528251918201909252604e8082526000926132a19083013960208301525061189b61294a565b64496a881e69198152643e74edb7971960208083019190915260408301919091528201526118c7612858565b6118cf612884565b60008082526040805160608101909152602780825261370b60208301396020830152506118fa6128a0565b6119026128c7565b61190a6128d6565b7359d6f42db099ce0d55a6b7c4a983abdeb6497920815273a802b1028dca6c4dbf1e2c15e8979d874beb86b960208083019190915273db0bf0fed7b4f4ebb2841cd9a680525bb6a190cd604083015290825275701aeb0598026806cf2e547cbdff02a87709fc37b75960501b8282015290825266b64d9f88ff5e1160c81b908201526119946128f4565b6f01d788e4995dcc260f83e26597127c9581526001602080830191909152604080516060808201835280825281840181905281830181905282518084018452600a8152689adede418753e13f3560b71b8186015282528251908101909252603a808352909260009291906138d69083013990508082602001819052505060006040518060800160405280604d81526020016131e0604d91396040808401919091528381019290925250730f968351013e54160e680d2312eee75b42509fca6060808401919091528151808301835260168152754d6f6f20c3a9f09f9a804dc3a94d204d20206f6fc3a960501b6020808301919091526080808601929092528584019490945285830194909452738e93fe3045ce3429ff3ef8592616fc2c252ccfa085820152660bcc9bbeeb61bd60cb1b938501939093529284528251918201909252602b8082526000926137db90830139602083015250611af361294a565b6401ea9027168152643071f4b781196020820152604082810191909152820152611b1b612858565b611b23612884565b6000815260408051808201909152601f81527f4d6f6f20c3a9f09f9a804d206f6f6f206f4d4dc3a96f20f09f9a80f09f9a8000602080830191909152820152611b6a6128a0565b611b726128c7565b611b7a6128d6565b73e8be8845fb6017cedb280dd3f6af7d03b747d95e8152734e5f05c11e461d34ba1ad53433a2f238a29f9afc60208083019190915273716f35acab14ec52daa0dd6b036a74c2851c25696040830152908252752dcb459c57ae870b8188f72c18bf037001df04c4554360501b828201529082526708e38d0f2d6f9b4160c11b90820152611c056128f4565b6f60f407af4850ee894dd72061f5c338fa19815260016020808301919091526040805160608082018352808252818401819052818301528151808301835260128152714d6f6f20c3a9f09f9a8020c3a920c3a9c3a960701b818501528152815160a08101909252606280835290926000929190613153908301396020808401919091526040805180820182526015815274026b7b79061d4f84fcd4026f84fcd4037b7e1d4901605d1b81840152818501528481019390935273f4558561cae05df23d50573b375e1b8f2610222f606085015282516080810190935260588084526000939250906139cb9083013960808084019190915260408085019390935284830193909352507302c240a608b92428c196a55861db5c15cf4989cb60608085019190915266bbe2d06698156b60c81b928401929092529183528151908101909152602880825260009190612d0a6020830139602083015250611d6661294a565b645e62a020bf1981526444ffe4cb3460208201526040828101919091526060830191909152908252820152611d996127fe565b611da161282b565b611da9612858565b611db1612884565b6000815260408051808201909152600b81526a4d6f6f20c3a9f09f9a806f60a81b602080830191909152820152611de66128a0565b611dee6128c7565b611df66128d6565b730271a9f08b096f13f15615bf3abfba63a383522881527357caa879d4eec37000334f29ddcfc6eace9c90546020808301919091527370e88a662cb1688ad5afe3d51701ace53c89f5b2604083015290825275336a885d480114d3ebeb956f99fb2e3f4d7e93e489cb60521b8282015290825267f70538f14abc419f60c01b90820152611e816128f4565b6f384031488f7c8d5ac9639261c166ca711981526000602080830182905260408051606080820183528082528184018190528183015281518083018352600f81526e4d6f6f20c3a9f09f9a80c3a96f6f4d60881b818501528152815160a081019092526074808352909392613b3890830139602080840191909152604080518082018252601b81527f4d6f6f20c3a9f09f9a8020206f20c3a920c3a9f09f9a804d6f204d000000000081840152818501528481019390935273811d981e7dbe6f80727285343906aa50be657ae260608501528251608081019093526056808452600093925090613bcd908301396080808401919091526040808501939093528483019390935250732dd9b0b8ea3f36f15eada31de8493717073aa5dc60608401526604366fc3ef8c6160c91b918301919091529082528051808201909152601781527f4d6f6f20c3a9f09f9a806ff09f9a806ff09f9a806f4d20000000000000000000602080830191909152820152611ff861294a565b640319e9730b8152644e8113cbc81960208201526040820152815261201b612858565b612023612884565b600181526040805160808101909152605880825260009190613c2360208301396020830152506120516128a0565b6120596128c7565b6120616128d6565b73e14cc5dbf416a76d7a606b0c4ef726c01425dbe1815273d58a1d35359a2860592d29ba3dfa0b9fbd52f76a60208083019190915273bc7b421a3c1f8e0283007835e4f809e7423f08166040830152908252756fbc7d81043821154efe8cb77a66e02cf0c5e36371e160511b828201529082526737104cd607a2521560c01b908201526120ec6128f4565b6f4e1c49ecd024b4b4a23bf565e52affba8152600060208083018290526040805160608082018352808252818401819052818301528151608081019092526044808352909392613987908301398252506040805160a081019091526064808252600091906135636020830139602080840191909152604080518082018252600a808252689adede418753e13f3560b71b82850181905283870192909252868301959095527328ff38296fd042aec5e9672cf44a8a1a17305f18606080880191909152825180840184528481527f4d6f6f20c3a9f09f9a806ff09f9a80c3a920c3a9f09f9a806fc3a96f6f6f4d4d818601526080808901919091528884019790975288830197909752739423a01efec6b7af47fd029575a2d0f992617c7e96880196909652666101e0fe89074f60c81b948701949094529486525081518083019092528152808301919091529082015261224361294a565b6465c6aba59d81526430ae90c94619602080830191909152604083019190915282015261226e612858565b612276612884565b6000815260408051808201909152600d81526c4d6f6f20c3a9f09f9a806f6f6f60981b6020808301919091528201526122ad6128a0565b6122b56128c7565b6122bd6128d6565b73b5405956da2fa7849f979afa97abfd706b942582815273e0470f38ea39ecd0c79b5234ee861cabe4538946602080830191909152738365a9e8b96fc7c5e0b65bf254c8c669ae4ffb496040830152908252751f26f9112ae796ee9a156646e6c373e6a136defad6fb60531b82820152908252675cabbbc7466a93ef60c01b908201526123486128f4565b6f69d47ad1a4b30c073b94c4e91952591a1981526001602080830191909152604080516060808201835280825281840181905281830181905282518084018452600b81526a4d6f6f20c3a9f09f9a806f60a81b8186015282528251908101909252602e80835290926000929190613aa7908301399050808260200181905250506000604051806080016040528060498152602001612d9460499139604080840191909152838101929092525073987188ac2b0b4bde48bf19c9d9cbaa7c0a4b0cc960608084019190915281518083018352600a8152689adede418753e13f3560b71b602080830191909152608080860192909252858401949094528583019490945273b41c0c7ce3d4c72427158fe122eaaf1fda056f7585820152667b3dc2c8e4df6760c91b938501939093529284528251918201909252602f808252600092613c7b9083013960208301525061249d61294a565b642005595b458152641e9309d0f21960208201526040828101919091528201526124c5612858565b6124cd612884565b6000815260408051808201909152600a8152689adede418753e13f3560b71b6020808301919091528201526125006128a0565b6125086128c7565b6125106128d6565b731746211f458690a6a4b71154637876b917cee91881527331de4cd09ec9715267cc84c6a1c8d7e9fdf8fe2060208083019190915273d4dde6bd2e4ac31717510c2aee22734b007bf1486040830152908252752a6a09c6cf9b5d5a4aa56805c2c9ddc1a2940fbfec2160511b8282015290825267b1ebd4df3f41555960c01b9082015261259b6128f4565b6f039b9b019e86862c3bbe3d54ff6705ff1981526001602080830191909152604080516060808201835280825292810183905290810191909152600060405180608001604052806047815260200161394060479139825250604080518082018252601081526f4d6f6f20c3a9f09f9a806ff09f9a806f60801b6020808301919091528084019190915281518083018352600a8152689adede418753e13f3560b71b81830152828401528382019290925273302b699c9b23359bd795df80665031799e9848c96060808501919091528151908101909152602b8082526000926131b590830139608080840191909152604080850193909352848301939093525073f5e84cf41cc6e5b38c5759e307f5966089b25e6660608085019190915265bb72b251fe9760d01b92840192909252918352815190810190915260328082526000919061345e60208301396020830152506126f361294a565b6433b9b719dd1981526406da87f3ce196020808301919091526040838101929092526060808501939093529284528482019390935290840192909252600190830152735fea7a766a6f18b075f51b24a578eb3156663f5b90820152919050565b6040518060800160405280612766612787565b81526020016127736127d1565b815260006020820181905260409091015290565b60408051608081018252600080825260208201529081016127a66127b3565b8152600060209091015290565b60405180602001604052806001906020820280368337509192915050565b60405180608001604052806004905b6127e86127fe565b8152602001906001900390816127e05790505090565b60405180602001604052806001905b61281561282b565b81526020019060019003908161280d5790505090565b60405180608001604052806004905b612842612858565b81526020019060019003908161283a5790505090565b604051806060016040528061286b612884565b81526020016060815260200161287f61294a565b905290565b6040805160a08101825260008152606060208201529081016127735b60405180606001604052806128b36128c7565b81526000602082015260400161287f6128f4565b60405180604001604052806127a65b60405180606001604052806003906020820280368337509192915050565b6040518060a001604052806000600f0b815260200160001515815260200161293660405180606001604052806060815260200160608152602001606081525090565b815260006020820152606060409091015290565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b8181101561298e57602081850181015186830182015201612972565b818111156129a0576000602083870101525b50601f01601f19169290920160200192915050565b8051600f0b82526020810151151560208301526000604082015160a060408501528051606060a08601526129ed610100860182612968565b90506020820151609f19808784030160c0880152612a0b8383612968565b925060408401519350808784030160e08801525050612a2a8183612968565b9150506060830151612a4760608601826001600160a01b03169052565b5060808301518482036080860152612a5f8282612968565b95945050505050565b8060005b6002811015612a8e57815160040b845260209384019390910190600101612a6c565b50505050565b600082608081018360005b6004811015612c465783830387528151836020810160005b6001811015612c2d5786820383528351826080810160005b6004811015612c155785820383528351805160808452805115156080850152602081015160a080860152612b07610120860182612968565b6040830151868203607f190160c08801528051805192935090918360005b6003811015612b4d5782516001600160a01b0316825260209283019290910190600101612b25565b50505060209081015169ffffffffffffffffffff191660608401528101516001600160c01b03191660808301526040015160c060a08301819052612b93908301826129b5565b9150506060820151612bb060e08701826001600160a01b03169052565b5060808201519150612bcf6101008601836001600160c81b0319169052565b602083015191508481036020860152612be88183612968565b91505060408201519150612bff6040850183612a68565b6020958601959490940193925050600101612acf565b50602096870196959095019493505050600101612ab7565b506020998a019990955093909301925050600101612a9f565b509095945050505050565b600060208083528351805160120b828501526effffffffffffffffffffffffffffff198282015116604085015260408101516060850160005b6001811015612cb157825167ffffffffffffffff1682529184019190840190600101612c8a565b505050606001511515608084015283015160e060a0840152612cd7610100840182612a94565b90506040840151612cec60c085018215159052565b5060608401516001600160a01b03811660e085015250939250505056fe4d6f6f20c3a9f09f9a804d20f09f9a80206f6ff09f9a80c3a9f09f9a80c3a96fc3a92020c3a94d4d4d6f6f20c3a9f09f9a806f6fc3a9c3a96f4d20206ff09f9a804d20204d6f6fc3a9f09f9a804d6f6f20c3a9f09f9a804dc3a9c3a96f4d206ff09f9a806f4df09f9a806f6f6f4d20f09f9a804d204d6f204dc3a96f206f6fc3a9c3a9f09f9a806f6f4d4d6f6f20c3a9f09f9a80c3a94df09f9a804d4df09f9a804d6fc3a94d4d6fc3a94d4d6f6fc3a96ff09f9a80c3a9c3a9c3a94d6f20c3a96f4d6ff09f9a80204d204df09f9a80206f6f6f4d6f6f20c3a9f09f9a804d20204dc3a96f20f09f9a8020c3a94d6f6f6ff09f9a80c3a9f09f9a804df09f9a806f6ff09f9a80f09f9a80c3a96f6f20c3a9f09f9a804d6f6f6f4df09f9a804d6f6f6f4df09f9a80c3a96f6f20c3a96f20c3a94d4dc3a9206fc3a94d6f6f20c3a9f09f9a806f6f6f4d4df09f9a806f4d6f20206fc3a9f09f9a806fc3a9f09f9a80c3a9f09f9a804d4d6f6f20c3a9f09f9a804d4d6f4d4d6f20f09f9a80f09f9a806fc3a96f6fc3a9c3a94d4d6f6f204d4d4d6f6f20c3a9f09f9a806f4d6ff09f9a80204dc3a9c3a9f09f9a806f6ff09f9a80f09f9a806ff09f9a806ff09f9a804d6ff09f9a8020f09f9a80c3a9c3a94d6f6f20c3a9f09f9a80206ff09f9a8020c3a96fc3a94df09f9a806f204dc3a96f4d6fc3a96f4d20f09f9a8020c3a94d6f4dc3a9c3a9f09f9a80c3a94d4d6f6f6f6f4dc3a94dc3a96f4d4d6f206f4d6f6f20c3a9f09f9a806fc3a9c3a96f204d6f20c3a94dc3a9c3a920202020f09f9a80c3a94d206f4d4d6f6f20c3a9f09f9a806f20c3a96fc3a9c3a9c3a96f6f4d4df09f9a804d20f09f9a806f4d204d6f6f20c3a9f09f9a806fc3a9c3a96f4d6f6fc3a96fc3a96f6f6f6ff09f9a806f20f09f9a80c3a96f6fc3a96f206ff09f9a804df09f9a806f20f09f9a804d204dc3a96f6f6f4d6f6f20c3a9f09f9a80c3a9f09f9a80c3a96f4d6f20c3a94d20f09f9a80f09f9a80f09f9a80c3a94d6f4d6f6f4dc3a96f6ff09f9a80f09f9a804d6f204d6f6f20c3a9f09f9a806ff09f9a80c3a96f4d6f20c3a9c3a9f09f9a806f6f6fc3a9f09f9a804d6ff09f9a8020c3a9f09f9a804d4d4d4dc3a96f4df09f9a806f6ff09f9a806f6f20f09f9a804d6fc3a920206f6f6f20f09f9a80f09f9a80f09f9a804d6f6f20c3a9f09f9a804d6f6f206f6f4d6f20f09f9a80f09f9a80206f20f09f9a806f6f6ff09f9a80f09f9a806f4d4d6ff09f9a8020206f6f4d6f6f20c3a9f09f9a806f6ff09f9a80206f4df09f9a804d6ff09f9a80204d6f6ff09f9a804df09f9a80c3a9206ff09f9a804dc3a94dc3a96f6fc3a94df09f9a804d4d6f4d20f09f9a806f204df09f9a8020f09f9a80206f204d4df09f9a80f09f9a80206fc3a94d6f6f20c3a9f09f9a804d204d6ff09f9a80f09f9a804d4df09f9a804df09f9a80f09f9a8020c3a96ff09f9a804dc3a96fc3a96ff09f9a80c3a920f09f9a806f6f4d206f6f6f4d6f4d206f6f6f6f20c3a96f6f4d20f09f9a80204d6f6f20c3a9f09f9a80f09f9a804dc3a9c3a9f09f9a80f09f9a806f20c3a920c3a920c3a96fc3a96fc3a9f09f9a802020f09f9a804d6f4d6f6fc3a96ff09f9a806f6f6f206ff09f9a8020204d6ff09f9a806fc3a94dc3a9f09f9a80204df09f9a804d6f6f20c3a9f09f9a804d204d4d4dc3a9f09f9a806f6f20f09f9a806ff09f9a804d6f4d204d20f09f9a804d6f6f20c3a9f09f9a80206ff09f9a80c3a94df09f9a802020f09f9a80206f4df09f9a804df09f9a80c3a94dc3a94df09f9a806ff09f9a806f6f6f204d4d6f20c3a9204d6f6fc3a96fc3a9c3a94d6f6f20c3a9f09f9a804df09f9a804d20c3a96f204dc3a9206fc3a94dc3a9c3a9f09f9a80202020c3a94d6f6f20c3a9f09f9a806f4d6fc3a920204dc3a96fc3a96fc3a920206f206fc3a96f20f09f9a80206f20204dc3a94d6f6f6f4d4d4d20204d4d4d6f6ff09f9a80c3a94d206f6f206f206f4d6f6f20c3a9f09f9a80f09f9a8020c3a9f09f9a806ff09f9a80c3a9c3a96f6f6ff09f9a80c3a96f6f4d6f6fc3a96f204d206fc3a9f09f9a806ff09f9a806f6f4d4dc3a96f4d4dc3a9f09f9a80204d6f6f20c3a9f09f9a80f09f9a806ff09f9a806f4d6fc3a9c3a96f20c3a9c3a9c3a96f6f4df09f9a80f09f9a806f6f6f4d6f6f20c3a9f09f9a80c3a9f09f9a804d6ff09f9a806f20204dc3a96f6ff09f9a80f09f9a806f6f20f09f9a806fc3a96ff09f9a806f6f4d6f4d6f6f20c3a9f09f9a80f09f9a806f206ff09f9a804d6f206f4dc3a9f09f9a80c3a9f09f9a80c3a9f09f9a806f4d6ff09f9a806f206fc3a96f206ff09f9a806f6f4d6f6fc3a9204d6fc3a9f09f9a806f20204d6f6f20c3a9f09f9a806f204df09f9a80f09f9a80c3a9206fc3a96f6ff09f9a806f6ff09f9a80206f204dc3a9206ff09f9a804d4d204df09f9a80c3a94dc3a96f6f206f6f4dc3a96ff09f9a806f4d4df09f9a8020c3a920204dc3a94dc3a94dc3a9204d6f6f20c3a9f09f9a806ff09f9a806ff09f9a806fc3a96f6f6f4df09f9a80c3a96f6fc3a9f09f9a80f09f9a8020f09f9a806f6f206f6f20f09f9a80f09f9a80f09f9a806f6f6f6f6fc3a96f206f4d6f4d4d6f6f20c3a9f09f9a80c3a9f09f9a8020206fc3a9c3a94dc3a96f6f6f6f206ff09f9a806fc3a94d20f09f9a8020f09f9a804d6f6f20c3a9f09f9a804d4d6f2020f09f9a806f4d4dc3a96f4d6f4df09f9a804d6f6f4dc3a96ff09f9a804df09f9a804d6f206f4d6f6f20c3a9f09f9a80c3a96f4d202020f09f9a80f09f9a806f4d4d4d6f6f6f4d4df09f9a80c3a9c3a94d4d206f6f206f6f6f2020c3a9f09f9a80c3a96f4d4d6fc3a94d6f6f20c3a9f09f9a802020c3a94d6f6f6f6f204df09f9a80c3a94d6fc3a94df09f9a80c3a92020c3a9f09f9a804d6f6f6f6fc3a9c3a9f09f9a80c3a96f20c3a96f6f6fc3a9c3a96f4dc3a94d6f206f4d4d206ff09f9a80206f6f4d4d6f6f20c3a9f09f9a806fc3a920c3a9c3a9f09f9a806f6fc3a96f6f6f4d6f6f6f2020c3a9f09f9a80c3a9c3a96f4df09f9a806f6fc3a96f20c3a9f09f9a80f09f9a80c3a9206fc3a9f09f9a80f09f9a80c3a9f09f9a80202020f09f9a806ff09f9a806f4d6f6f20c3a9f09f9a80c3a94d6f6f4d6f6ff09f9a80f09f9a804df09f9a80c3a9f09f9a806ff09f9a806f6f4d206f20f09f9a804dc3a9c3a920c3a920f09f9a804d6f6f20c3a9f09f9a80204d20f09f9a80c3a9c3a9c3a96f4d4d6f6f6ff09f9a804dc3a920f09f9a804d4d20c3a92020206ff09f9a806ff09f9a8020c3a94d6fc3a94d6f6f20c3a9f09f9a80f09f9a80f09f9a80206f4d206f4d204d6fc3a920f09f9a806fc3a96fc3a9f09f9a804d6ff09f9a80f09f9a80f09f9a80204d6f6fc3a96f6f4d6ff09f9a80f09f9a806f6f6f6f6f204d6f6f20c3a9f09f9a80f09f9a806f206f6f20f09f9a80f09f9a804d206f6f6f4d4d4d4df09f9a806f2020f09f9a804d6ff09f9a806ff09f9a804df09f9a806f6f6f20c3a94d6f6ff09f9a80f09f9a8020206f6f4df09f9a806ff09f9a80c3a9c3a920c3a9c3a9f09f9a80206f4d4d4d6f6f20c3a9f09f9a806fc3a9c3a96f4d4d4dc3a96fc3a96f4d6ff09f9a80206f6ff09f9a806f4d6f6f20c3a9f09f9a8020f09f9a806ff09f9a80204df09f9a80f09f9a80c3a9204d20c3a9f09f9a80c3a94d4d206f20c3a9c3a94d4d6f6f20c3a9f09f9a806ff09f9a806f20c3a9206f4df09f9a804d6fc3a9c3a9204d20f09f9a80f09f9a806f20c3a96f6fc3a94df09f9a80f09f9a804d206ff09f9a804d6f4d6fc3a96fc3a96f6ff09f9a804d6f6f20c3a9f09f9a80f09f9a80f09f9a806f6f4d4df09f9a804dc3a9c3a94d6f4d4d6f6f20c3a9f09f9a80c3a9c3a96f6f6f206fc3a9c3a96f4d4dc3a96f6f20f09f9a806f6f4df09f9a804d4d6f6f20c3a9f09f9a806ff09f9a80f09f9a806f6f6f6f6f6ff09f9a80c3a96f6f4d4dc3a96f6ff09f9a802020f09f9a80f09f9a806ff09f9a80c3a920f09f9a80c3a96f6f6f4d206f6f4d204d204d4df09f9a806fc3a9c3a9204d6ff09f9a806f6f4d6f6f20c3a9f09f9a806fc3a9c3a94df09f9a806ff09f9a806f6f6f6f6fc3a9c3a96f4df09f9a80c3a9f09f9a80c3a94d4df09f9a80f09f9a806ff09f9a80f09f9a80c3a96ff09f9a80206ff09f9a806ff09f9a80206f6f2020f09f9a806f6ff09f9a806f4dc3a9c3a920c3a94d4d6f6f20c3a9f09f9a806ff09f9a80c3a94dc3a94d204d2020c3a9c3a96ff09f9a804d206f6f6f6ff09f9a80f09f9a806f6f6f206ff09f9a806f4d6f6f20c3a9f09f9a80f09f9a80c3a9f09f9a804d4d4d6f6f6f6ff09f9a80f09f9a804d20f09f9a806f6f6fc3a94d6f4d6f6f20c3a9f09f9a806f6f6f6ff09f9a80206f20c3a94d20c3a9c3a9c3a9c3a96f4df09f9a804d206f4d4dc3a9f09f9a80f09f9a80206ff09f9a806f6f6fc3a94d4d4d206f6f4d6f6f20c3a9f09f9a80f09f9a804d6f6f6ff09f9a804d4d4d204d6f20f09f9a806f4d6f6f4d6ff09f9a804d4d6fc3a96f6f6f4d206f6ff09f9a804d4df09f9a80c3a94d4d6f6f20c3a9f09f9a80c3a96f6fc3a96ff09f9a8020f09f9a80c3a96f6f4d4d6ff09f9a806f4dc3a96ff09f9a806fc3a96f6f4d6f6f6f6f2020f09f9a806f4dc3a96f4d4d4d206f6f6ff09f9a806f206f6f6f20c3a9206f4d6f6f20c3a9f09f9a80f09f9a80f09f9a806f6f206ff09f9a80f09f9a80206fc3a96ff09f9a80206fc3a94d4d6f4d6f6fc3a96f4df09f9a80f09f9a806f4d4df09f9a80f09f9a80f09f9a80f09f9a806f204d6f6f20c3a9f09f9a80f09f9a804df09f9a806ff09f9a806f4dc3a9f09f9a8020206f6f6f4d204d4df09f9a806f206f6f6f4d6f6f20c3a9f09f9a80c3a94d4d6f6f6f20f09f9a804d6fc3a96f4d4d6f4d20c3a9c3a92020f09f9a806fc3a9204d6f6f20c3a9f09f9a806fc3a96f6f6f206fc3a94d4df09f9a80c3a9206f6fc3a920f09f9a80f09f9a804d206f6f6f6f4d4d204df09f9a80c3a96ff09f9a80204d20f09f9a80f09f9a80c3a9204d4d6fc3a9206f6ff09f9a806f6f206ff09f9a804d6f4d6f6f20c3a9f09f9a8020f09f9a80f09f9a80204d6f6ff09f9a80f09f9a804dc3a9206f204dc3a9f09f9a80206f4d206f206ff09f9a80f09f9a804df09f9a804d6fc3a9c3a94d206ff09f9a8020c3a9f09f9a806f6f6f4d4df09f9a806f204d4df09f9a80f09f9a80c3a920f09f9a80f09f9a804d6f6f20c3a9f09f9a804df09f9a806fc3a9f09f9a804df09f9a80f09f9a80c3a94d6f6f20c3a9f09f9a806f206f6fc3a96f204d6f4df09f9a802020f09f9a80c3a96f206f4df09f9a80f09f9a8020c3a96f20206f6f6f6f4d6f6f20c3a94d6ff09f9a806f6ff09f9a80c3a96ff09f9a80f09f9a806f6f4d6f6f20c3a9f09f9a80f09f9a804d4dc3a96fc3a9204d6f6f204df09f9a80206f4d6fc3a96f6ff09f9a8020206fc3a94dc3a96ff09f9a8020204d6fc3a96f6fc3a96f6f6fc3a96f6f6f6fc3a9f09f9a80f09f9a80206f204d6f6f20c3a9f09f9a80c3a94dc3a94d4d4d6f6ff09f9a80f09f9a80c3a9204dc3a9c3a920c3a96f4d4d6f6f4d4d20a26469706673582212200417651eb25410ef5ee6715c99863a0b23b4e87351419183685b79f8f1101c9464736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_80a10b18 {\n int152 s_0;\n bytes17 s_1;\n uint64[1] s_2;\n bool s_3;\n }\n\n struct S_d29e61bf {\n address[3] s_0;\n bytes22 s_1;\n }\n\n struct S_061dfc07 {\n string s_0;\n string s_1;\n string s_2;\n }\n\n struct S_a217dd34 {\n int128 s_0;\n bool s_1;\n S_061dfc07 s_2;\n address s_3;\n string s_4;\n }\n\n struct S_7e54c7ee {\n S_d29e61bf s_0;\n bytes8 s_1;\n S_a217dd34 s_2;\n }\n\n struct S_71a4881b {\n bool s_0;\n string s_1;\n S_7e54c7ee s_2;\n address s_3;\n bytes7 s_4;\n }\n\n struct S_6c7af139 {\n S_71a4881b s_0;\n string s_1;\n int40[2] s_2;\n }\n\n struct S_ed992665 {\n S_80a10b18 s_0;\n S_6c7af139[4][1][4] s_1;\n bool s_2;\n address s_3;\n }\n\n function test () public pure returns (S_ed992665 memory) {\n S_ed992665 memory r;\n {\n S_80a10b18 memory r_0;\n {\n int152 r_0_0 = 2557053897289181536776227039130753366531499764;\n r_0.s_0 = r_0_0;\n }\n {\n bytes17 r_0_1 = bytes17(0x64e16d767c709174fdb3b814b795d2e683);\n r_0.s_1 = r_0_1;\n }\n {\n uint64[1] memory r_0_2;\n {\n uint64 r_0_2_0 = 2263345982287538497;\n r_0_2[0] = r_0_2_0;\n }\n r_0.s_2 = r_0_2;\n }\n {\n bool r_0_3 = true;\n r_0.s_3 = r_0_3;\n }\n r.s_0 = r_0;\n }\n {\n S_6c7af139[4][1][4] memory r_1;\n {\n S_6c7af139[4][1] memory r_1_0;\n {\n S_6c7af139[4] memory r_1_0_0;\n {\n S_6c7af139 memory r_1_0_0_0;\n {\n S_71a4881b memory r_1_0_0_0_0;\n {\n bool r_1_0_0_0_0_0 = true;\n r_1_0_0_0_0.s_0 = r_1_0_0_0_0_0;\n }\n {\n string memory r_1_0_0_0_0_1 = unicode\"Moo é🚀🚀🚀oo o🚀🚀 oéo🚀 oéMMoMooéoM🚀🚀oMM🚀🚀🚀🚀o \";\n r_1_0_0_0_0.s_1 = r_1_0_0_0_0_1;\n }\n {\n S_7e54c7ee memory r_1_0_0_0_0_2;\n {\n S_d29e61bf memory r_1_0_0_0_0_2_0;\n {\n address[3] memory r_1_0_0_0_0_2_0_0;\n {\n address r_1_0_0_0_0_2_0_0_0 = 0x77b2C3b055786ff7A936686c125e84CdB3a3c876;\n r_1_0_0_0_0_2_0_0[0] = r_1_0_0_0_0_2_0_0_0;\n }\n {\n address r_1_0_0_0_0_2_0_0_1 = 0x0d6B791045bdFb317a3B5946B4756B097EC3986b;\n r_1_0_0_0_0_2_0_0[1] = r_1_0_0_0_0_2_0_0_1;\n }\n {\n address r_1_0_0_0_0_2_0_0_2 = 0xc12F0c8d22b046D909C69bC89f21C531c5746163;\n r_1_0_0_0_0_2_0_0[2] = r_1_0_0_0_0_2_0_0_2;\n }\n r_1_0_0_0_0_2_0.s_0 = r_1_0_0_0_0_2_0_0;\n }\n {\n bytes22 r_1_0_0_0_0_2_0_1 = bytes22(0x608e571f1d7724d085dae45ac249071d05747dba741d);\n r_1_0_0_0_0_2_0.s_1 = r_1_0_0_0_0_2_0_1;\n }\n r_1_0_0_0_0_2.s_0 = r_1_0_0_0_0_2_0;\n }\n {\n bytes8 r_1_0_0_0_0_2_1 = bytes8(0x5cb7199b7b95e3e9);\n r_1_0_0_0_0_2.s_1 = r_1_0_0_0_0_2_1;\n }\n {\n S_a217dd34 memory r_1_0_0_0_0_2_2;\n {\n int128 r_1_0_0_0_0_2_2_0 = -50107174431156178692800459312299352861;\n r_1_0_0_0_0_2_2.s_0 = r_1_0_0_0_0_2_2_0;\n }\n {\n bool r_1_0_0_0_0_2_2_1 = true;\n r_1_0_0_0_0_2_2.s_1 = r_1_0_0_0_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_0_0_0_0_2_2_2;\n {\n string memory r_1_0_0_0_0_2_2_2_0 = unicode\"Moo é🚀oo🚀 oM🚀Mo🚀 Moo🚀M🚀é o🚀MéMéooéM🚀MMoM 🚀o M🚀 🚀 o MM🚀🚀 oé\";\n r_1_0_0_0_0_2_2_2.s_0 = r_1_0_0_0_0_2_2_2_0;\n }\n {\n string memory r_1_0_0_0_0_2_2_2_1 = unicode\"Moo é🚀o🚀éoMo éé🚀oooé🚀Mo🚀 é🚀MMMMéoM🚀oo🚀oo 🚀Moé ooo 🚀🚀🚀\";\n r_1_0_0_0_0_2_2_2.s_1 = r_1_0_0_0_0_2_2_2_1;\n }\n {\n string memory r_1_0_0_0_0_2_2_2_2 = unicode\"Moo é🚀🚀M🚀o🚀oMé🚀 oooM MM🚀o ooo\";\n r_1_0_0_0_0_2_2_2.s_2 = r_1_0_0_0_0_2_2_2_2;\n }\n r_1_0_0_0_0_2_2.s_2 = r_1_0_0_0_0_2_2_2;\n }\n {\n address r_1_0_0_0_0_2_2_3 = 0x87B4709AFAe80773735280825B347d9971eCB691;\n r_1_0_0_0_0_2_2.s_3 = r_1_0_0_0_0_2_2_3;\n }\n {\n string memory r_1_0_0_0_0_2_2_4 = unicode\"Moo é🚀🚀o\";\n r_1_0_0_0_0_2_2.s_4 = r_1_0_0_0_0_2_2_4;\n }\n r_1_0_0_0_0_2.s_2 = r_1_0_0_0_0_2_2;\n }\n r_1_0_0_0_0.s_2 = r_1_0_0_0_0_2;\n }\n {\n address r_1_0_0_0_0_3 = 0xF7fF3Be34346B75ffFFE0d5Dc0225aFdB212Dd25;\n r_1_0_0_0_0.s_3 = r_1_0_0_0_0_3;\n }\n {\n bytes7 r_1_0_0_0_0_4 = bytes7(0x368a7df30c3967);\n r_1_0_0_0_0.s_4 = r_1_0_0_0_0_4;\n }\n r_1_0_0_0.s_0 = r_1_0_0_0_0;\n }\n {\n string memory r_1_0_0_0_1 = unicode\"Moo é🚀🚀oMoo 🚀 oo\";\n r_1_0_0_0.s_1 = r_1_0_0_0_1;\n }\n {\n int40[2] memory r_1_0_0_0_2;\n {\n int40 r_1_0_0_0_2_0 = -266286681710;\n r_1_0_0_0_2[0] = r_1_0_0_0_2_0;\n }\n {\n int40 r_1_0_0_0_2_1 = 525885121095;\n r_1_0_0_0_2[1] = r_1_0_0_0_2_1;\n }\n r_1_0_0_0.s_2 = r_1_0_0_0_2;\n }\n r_1_0_0[0] = r_1_0_0_0;\n }\n {\n S_6c7af139 memory r_1_0_0_1;\n {\n S_71a4881b memory r_1_0_0_1_0;\n {\n bool r_1_0_0_1_0_0 = false;\n r_1_0_0_1_0.s_0 = r_1_0_0_1_0_0;\n }\n {\n string memory r_1_0_0_1_0_1 = unicode\"Moo é🚀o éoéééooMM🚀M 🚀oM \";\n r_1_0_0_1_0.s_1 = r_1_0_0_1_0_1;\n }\n {\n S_7e54c7ee memory r_1_0_0_1_0_2;\n {\n S_d29e61bf memory r_1_0_0_1_0_2_0;\n {\n address[3] memory r_1_0_0_1_0_2_0_0;\n {\n address r_1_0_0_1_0_2_0_0_0 = 0x13eC2E2dE547f48AD354ee4AEd82c2b8c3E5E556;\n r_1_0_0_1_0_2_0_0[0] = r_1_0_0_1_0_2_0_0_0;\n }\n {\n address r_1_0_0_1_0_2_0_0_1 = 0x3D0906dbA7D38713b1184eA920bf0d2bAaCc07f2;\n r_1_0_0_1_0_2_0_0[1] = r_1_0_0_1_0_2_0_0_1;\n }\n {\n address r_1_0_0_1_0_2_0_0_2 = 0x4746B3d6DE6140DC59dD9E9704B91f86858aE500;\n r_1_0_0_1_0_2_0_0[2] = r_1_0_0_1_0_2_0_0_2;\n }\n r_1_0_0_1_0_2_0.s_0 = r_1_0_0_1_0_2_0_0;\n }\n {\n bytes22 r_1_0_0_1_0_2_0_1 = bytes22(0x73246ca93dd5735fbacb9107c823b7f8eb104af8f806);\n r_1_0_0_1_0_2_0.s_1 = r_1_0_0_1_0_2_0_1;\n }\n r_1_0_0_1_0_2.s_0 = r_1_0_0_1_0_2_0;\n }\n {\n bytes8 r_1_0_0_1_0_2_1 = bytes8(0x5d3c845b5aa34420);\n r_1_0_0_1_0_2.s_1 = r_1_0_0_1_0_2_1;\n }\n {\n S_a217dd34 memory r_1_0_0_1_0_2_2;\n {\n int128 r_1_0_0_1_0_2_2_0 = 163701809972189021710462008086298077530;\n r_1_0_0_1_0_2_2.s_0 = r_1_0_0_1_0_2_2_0;\n }\n {\n bool r_1_0_0_1_0_2_2_1 = false;\n r_1_0_0_1_0_2_2.s_1 = r_1_0_0_1_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_0_0_1_0_2_2_2;\n {\n string memory r_1_0_0_1_0_2_2_2_0 = unicode\"Moo é🚀 o🚀é🚀oM\";\n r_1_0_0_1_0_2_2_2.s_0 = r_1_0_0_1_0_2_2_2_0;\n }\n {\n string memory r_1_0_0_1_0_2_2_2_1 = unicode\"Moo é🚀 éo oM\";\n r_1_0_0_1_0_2_2_2.s_1 = r_1_0_0_1_0_2_2_2_1;\n }\n {\n string memory r_1_0_0_1_0_2_2_2_2 = unicode\"Moo é🚀 M 🚀éééoMMooo🚀Mé 🚀MM é o🚀o🚀 éMoé\";\n r_1_0_0_1_0_2_2_2.s_2 = r_1_0_0_1_0_2_2_2_2;\n }\n r_1_0_0_1_0_2_2.s_2 = r_1_0_0_1_0_2_2_2;\n }\n {\n address r_1_0_0_1_0_2_2_3 = 0x6Fc60D8c853d725e0906bDaB3E09Fe71d9ef467b;\n r_1_0_0_1_0_2_2.s_3 = r_1_0_0_1_0_2_2_3;\n }\n {\n string memory r_1_0_0_1_0_2_2_4 = unicode\"Moo é🚀🚀o o🚀Mo oMé🚀é🚀é🚀oMo🚀o oéo o🚀ooMooé Moé🚀o \";\n r_1_0_0_1_0_2_2.s_4 = r_1_0_0_1_0_2_2_4;\n }\n r_1_0_0_1_0_2.s_2 = r_1_0_0_1_0_2_2;\n }\n r_1_0_0_1_0.s_2 = r_1_0_0_1_0_2;\n }\n {\n address r_1_0_0_1_0_3 = 0x738Eb7EB4664B050A29298068da94C056718FF1A;\n r_1_0_0_1_0.s_3 = r_1_0_0_1_0_3;\n }\n {\n bytes7 r_1_0_0_1_0_4 = bytes7(0x749fb2c41b7b88);\n r_1_0_0_1_0.s_4 = r_1_0_0_1_0_4;\n }\n r_1_0_0_1.s_0 = r_1_0_0_1_0;\n }\n {\n string memory r_1_0_0_1_1 = unicode\"Moo é🚀\";\n r_1_0_0_1.s_1 = r_1_0_0_1_1;\n }\n {\n int40[2] memory r_1_0_0_1_2;\n {\n int40 r_1_0_0_1_2_0 = -294063635696;\n r_1_0_0_1_2[0] = r_1_0_0_1_2_0;\n }\n {\n int40 r_1_0_0_1_2_1 = -457809642668;\n r_1_0_0_1_2[1] = r_1_0_0_1_2_1;\n }\n r_1_0_0_1.s_2 = r_1_0_0_1_2;\n }\n r_1_0_0[1] = r_1_0_0_1;\n }\n {\n S_6c7af139 memory r_1_0_0_2;\n {\n S_71a4881b memory r_1_0_0_2_0;\n {\n bool r_1_0_0_2_0_0 = true;\n r_1_0_0_2_0.s_0 = r_1_0_0_2_0_0;\n }\n {\n string memory r_1_0_0_2_0_1 = unicode\"Moo é🚀oééo Mo éMéé 🚀éM oM\";\n r_1_0_0_2_0.s_1 = r_1_0_0_2_0_1;\n }\n {\n S_7e54c7ee memory r_1_0_0_2_0_2;\n {\n S_d29e61bf memory r_1_0_0_2_0_2_0;\n {\n address[3] memory r_1_0_0_2_0_2_0_0;\n {\n address r_1_0_0_2_0_2_0_0_0 = 0xC3DdC93DF8929dC89eA3286542C6cEDE3cBfc0C4;\n r_1_0_0_2_0_2_0_0[0] = r_1_0_0_2_0_2_0_0_0;\n }\n {\n address r_1_0_0_2_0_2_0_0_1 = 0x718dd49145B4ae405AF2cB6E56c091C4c10a802B;\n r_1_0_0_2_0_2_0_0[1] = r_1_0_0_2_0_2_0_0_1;\n }\n {\n address r_1_0_0_2_0_2_0_0_2 = 0x7E03FB9e50c1e7219d7077F1D0ED28D54FfC832e;\n r_1_0_0_2_0_2_0_0[2] = r_1_0_0_2_0_2_0_0_2;\n }\n r_1_0_0_2_0_2_0.s_0 = r_1_0_0_2_0_2_0_0;\n }\n {\n bytes22 r_1_0_0_2_0_2_0_1 = bytes22(0xe25599e0ec186c4f00d74a6c396bfbbab24c6082b168);\n r_1_0_0_2_0_2_0.s_1 = r_1_0_0_2_0_2_0_1;\n }\n r_1_0_0_2_0_2.s_0 = r_1_0_0_2_0_2_0;\n }\n {\n bytes8 r_1_0_0_2_0_2_1 = bytes8(0xb6c22be93fc4e473);\n r_1_0_0_2_0_2.s_1 = r_1_0_0_2_0_2_1;\n }\n {\n S_a217dd34 memory r_1_0_0_2_0_2_2;\n {\n int128 r_1_0_0_2_0_2_2_0 = -102733595900354371215138505875632835742;\n r_1_0_0_2_0_2_2.s_0 = r_1_0_0_2_0_2_2_0;\n }\n {\n bool r_1_0_0_2_0_2_2_1 = false;\n r_1_0_0_2_0_2_2.s_1 = r_1_0_0_2_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_0_0_2_0_2_2_2;\n {\n string memory r_1_0_0_2_0_2_2_2_0 = unicode\"Moo é🚀oééoMooéoéoooo🚀o 🚀éooéo o🚀M🚀o 🚀M Méooo\";\n r_1_0_0_2_0_2_2_2.s_0 = r_1_0_0_2_0_2_2_2_0;\n }\n {\n string memory r_1_0_0_2_0_2_2_2_1 = unicode\"Moo é🚀🚀o🚀oMoééo éééooM🚀🚀ooo\";\n r_1_0_0_2_0_2_2_2.s_1 = r_1_0_0_2_0_2_2_2_1;\n }\n {\n string memory r_1_0_0_2_0_2_2_2_2 = unicode\"Moo é🚀🚀o oo 🚀🚀M oooMMMM🚀o 🚀Mo🚀o🚀M🚀ooo éMoo🚀🚀 ooM🚀o🚀éé éé🚀 oMM\";\n r_1_0_0_2_0_2_2_2.s_2 = r_1_0_0_2_0_2_2_2_2;\n }\n r_1_0_0_2_0_2_2.s_2 = r_1_0_0_2_0_2_2_2;\n }\n {\n address r_1_0_0_2_0_2_2_3 = 0xe93Bd7EA3eD7907837CD88f19d851CE440438b4B;\n r_1_0_0_2_0_2_2.s_3 = r_1_0_0_2_0_2_2_3;\n }\n {\n string memory r_1_0_0_2_0_2_2_4 = unicode\"Moo é🚀oééM🚀o🚀oooooééoM🚀é🚀éMM🚀🚀o🚀🚀éo🚀 o🚀o🚀 oo 🚀oo🚀oMéé éM\";\n r_1_0_0_2_0_2_2.s_4 = r_1_0_0_2_0_2_2_4;\n }\n r_1_0_0_2_0_2.s_2 = r_1_0_0_2_0_2_2;\n }\n r_1_0_0_2_0.s_2 = r_1_0_0_2_0_2;\n }\n {\n address r_1_0_0_2_0_3 = 0xDc1Df1fE26e618D818543eeAEB4E43AD32cD6665;\n r_1_0_0_2_0.s_3 = r_1_0_0_2_0_3;\n }\n {\n bytes7 r_1_0_0_2_0_4 = bytes7(0x5325fa2502fdd1);\n r_1_0_0_2_0.s_4 = r_1_0_0_2_0_4;\n }\n r_1_0_0_2.s_0 = r_1_0_0_2_0;\n }\n {\n string memory r_1_0_0_2_1 = unicode\"Moo é🚀oéooo oéMM🚀é ooé 🚀🚀M ooooMM M🚀éo🚀 M 🚀🚀é MMoé oo🚀oo o🚀Mo\";\n r_1_0_0_2.s_1 = r_1_0_0_2_1;\n }\n {\n int40[2] memory r_1_0_0_2_2;\n {\n int40 r_1_0_0_2_2_0 = 478765699500;\n r_1_0_0_2_2[0] = r_1_0_0_2_2_0;\n }\n {\n int40 r_1_0_0_2_2_1 = -495211968069;\n r_1_0_0_2_2[1] = r_1_0_0_2_2_1;\n }\n r_1_0_0_2.s_2 = r_1_0_0_2_2;\n }\n r_1_0_0[2] = r_1_0_0_2;\n }\n {\n S_6c7af139 memory r_1_0_0_3;\n {\n S_71a4881b memory r_1_0_0_3_0;\n {\n bool r_1_0_0_3_0_0 = true;\n r_1_0_0_3_0.s_0 = r_1_0_0_3_0_0;\n }\n {\n string memory r_1_0_0_3_0_1 = unicode\"Moo é🚀\";\n r_1_0_0_3_0.s_1 = r_1_0_0_3_0_1;\n }\n {\n S_7e54c7ee memory r_1_0_0_3_0_2;\n {\n S_d29e61bf memory r_1_0_0_3_0_2_0;\n {\n address[3] memory r_1_0_0_3_0_2_0_0;\n {\n address r_1_0_0_3_0_2_0_0_0 = 0x4f099c8f6d99818636f5AD1eea5C9B133ef99048;\n r_1_0_0_3_0_2_0_0[0] = r_1_0_0_3_0_2_0_0_0;\n }\n {\n address r_1_0_0_3_0_2_0_0_1 = 0x9E9544EF65849969c0cc0cEB86233a7e09468970;\n r_1_0_0_3_0_2_0_0[1] = r_1_0_0_3_0_2_0_0_1;\n }\n {\n address r_1_0_0_3_0_2_0_0_2 = 0xe13c2A64ee60dC0f94b985fb7BC91b158EE00559;\n r_1_0_0_3_0_2_0_0[2] = r_1_0_0_3_0_2_0_0_2;\n }\n r_1_0_0_3_0_2_0.s_0 = r_1_0_0_3_0_2_0_0;\n }\n {\n bytes22 r_1_0_0_3_0_2_0_1 = bytes22(0xd2946b3810589dd01ef0d704dd434f8183d67cd8de0b);\n r_1_0_0_3_0_2_0.s_1 = r_1_0_0_3_0_2_0_1;\n }\n r_1_0_0_3_0_2.s_0 = r_1_0_0_3_0_2_0;\n }\n {\n bytes8 r_1_0_0_3_0_2_1 = bytes8(0x290c94382d81ad3c);\n r_1_0_0_3_0_2.s_1 = r_1_0_0_3_0_2_1;\n }\n {\n S_a217dd34 memory r_1_0_0_3_0_2_2;\n {\n int128 r_1_0_0_3_0_2_2_0 = 161748600966332684423685375546815565583;\n r_1_0_0_3_0_2_2.s_0 = r_1_0_0_3_0_2_2_0;\n }\n {\n bool r_1_0_0_3_0_2_2_1 = false;\n r_1_0_0_3_0_2_2.s_1 = r_1_0_0_3_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_0_0_3_0_2_2_2;\n {\n string memory r_1_0_0_3_0_2_2_2_0 = unicode\"Moo é🚀\";\n r_1_0_0_3_0_2_2_2.s_0 = r_1_0_0_3_0_2_2_2_0;\n }\n {\n string memory r_1_0_0_3_0_2_2_2_1 = unicode\"Moo é🚀 éMoooo M🚀éMoéM🚀é é🚀Mooooéé🚀éo éoooééoMéMo oMM o🚀 ooM\";\n r_1_0_0_3_0_2_2_2.s_1 = r_1_0_0_3_0_2_2_2_1;\n }\n {\n string memory r_1_0_0_3_0_2_2_2_2 = unicode\"Moo é🚀 🚀éooo o🚀\";\n r_1_0_0_3_0_2_2_2.s_2 = r_1_0_0_3_0_2_2_2_2;\n }\n r_1_0_0_3_0_2_2.s_2 = r_1_0_0_3_0_2_2_2;\n }\n {\n address r_1_0_0_3_0_2_2_3 = 0x90127D0D0261C4B20E2Cc2085db10024101b3104;\n r_1_0_0_3_0_2_2.s_3 = r_1_0_0_3_0_2_2_3;\n }\n {\n string memory r_1_0_0_3_0_2_2_4 = unicode\"Moo é🚀ooé o\";\n r_1_0_0_3_0_2_2.s_4 = r_1_0_0_3_0_2_2_4;\n }\n r_1_0_0_3_0_2.s_2 = r_1_0_0_3_0_2_2;\n }\n r_1_0_0_3_0.s_2 = r_1_0_0_3_0_2;\n }\n {\n address r_1_0_0_3_0_3 = 0xff958C5E3973110d2EC056910087A5654ae881AB;\n r_1_0_0_3_0.s_3 = r_1_0_0_3_0_3;\n }\n {\n bytes7 r_1_0_0_3_0_4 = bytes7(0x0ef43618428a14);\n r_1_0_0_3_0.s_4 = r_1_0_0_3_0_4;\n }\n r_1_0_0_3.s_0 = r_1_0_0_3_0;\n }\n {\n string memory r_1_0_0_3_1 = unicode\"Moo é🚀o\";\n r_1_0_0_3.s_1 = r_1_0_0_3_1;\n }\n {\n int40[2] memory r_1_0_0_3_2;\n {\n int40 r_1_0_0_3_2_0 = -242978510265;\n r_1_0_0_3_2[0] = r_1_0_0_3_2_0;\n }\n {\n int40 r_1_0_0_3_2_1 = -173359248627;\n r_1_0_0_3_2[1] = r_1_0_0_3_2_1;\n }\n r_1_0_0_3.s_2 = r_1_0_0_3_2;\n }\n r_1_0_0[3] = r_1_0_0_3;\n }\n r_1_0[0] = r_1_0_0;\n }\n r_1[0] = r_1_0;\n }\n {\n S_6c7af139[4][1] memory r_1_1;\n {\n S_6c7af139[4] memory r_1_1_0;\n {\n S_6c7af139 memory r_1_1_0_0;\n {\n S_71a4881b memory r_1_1_0_0_0;\n {\n bool r_1_1_0_0_0_0 = false;\n r_1_1_0_0_0.s_0 = r_1_1_0_0_0_0;\n }\n {\n string memory r_1_1_0_0_0_1 = unicode\"Moo é🚀M Mo🚀🚀MM🚀M🚀🚀 éo🚀Méoéo🚀é 🚀ooM oooMoM oooo éooM 🚀 \";\n r_1_1_0_0_0.s_1 = r_1_1_0_0_0_1;\n }\n {\n S_7e54c7ee memory r_1_1_0_0_0_2;\n {\n S_d29e61bf memory r_1_1_0_0_0_2_0;\n {\n address[3] memory r_1_1_0_0_0_2_0_0;\n {\n address r_1_1_0_0_0_2_0_0_0 = 0x5D636E181B8417a58326e34d561E4070FbD8E178;\n r_1_1_0_0_0_2_0_0[0] = r_1_1_0_0_0_2_0_0_0;\n }\n {\n address r_1_1_0_0_0_2_0_0_1 = 0x3baa6BB0f96eF7ff900f931D00251758415f600E;\n r_1_1_0_0_0_2_0_0[1] = r_1_1_0_0_0_2_0_0_1;\n }\n {\n address r_1_1_0_0_0_2_0_0_2 = 0xbf750a076E3C9035F4cFC383D8083dCA34248c6f;\n r_1_1_0_0_0_2_0_0[2] = r_1_1_0_0_0_2_0_0_2;\n }\n r_1_1_0_0_0_2_0.s_0 = r_1_1_0_0_0_2_0_0;\n }\n {\n bytes22 r_1_1_0_0_0_2_0_1 = bytes22(0x80aedb9fd3b8201fc59d17301d578348184d1bfcc3a6);\n r_1_1_0_0_0_2_0.s_1 = r_1_1_0_0_0_2_0_1;\n }\n r_1_1_0_0_0_2.s_0 = r_1_1_0_0_0_2_0;\n }\n {\n bytes8 r_1_1_0_0_0_2_1 = bytes8(0xf53f134197ff0ba6);\n r_1_1_0_0_0_2.s_1 = r_1_1_0_0_0_2_1;\n }\n {\n S_a217dd34 memory r_1_1_0_0_0_2_2;\n {\n int128 r_1_1_0_0_0_2_2_0 = -47063988488179439809328724451385541069;\n r_1_1_0_0_0_2_2.s_0 = r_1_1_0_0_0_2_2_0;\n }\n {\n bool r_1_1_0_0_0_2_2_1 = true;\n r_1_1_0_0_0_2_2.s_1 = r_1_1_0_0_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_1_0_0_0_2_2_2;\n {\n string memory r_1_1_0_0_0_2_2_2_0 = unicode\"Moo é🚀M Méo 🚀 éMooo🚀é🚀M🚀oo🚀🚀éoo é🚀MoooM🚀MoooM🚀éoo éo éMMé oé\";\n r_1_1_0_0_0_2_2_2.s_0 = r_1_1_0_0_0_2_2_2_0;\n }\n {\n string memory r_1_1_0_0_0_2_2_2_1 = unicode\"Moo é🚀Moo ooMo 🚀🚀 o 🚀ooo🚀🚀oMMo🚀 oo\";\n r_1_1_0_0_0_2_2_2.s_1 = r_1_1_0_0_0_2_2_2_1;\n }\n {\n string memory r_1_1_0_0_0_2_2_2_2 = unicode\"Moo é🚀o M🚀🚀é oéoo🚀oo🚀 o Mé o🚀MM M🚀éMéoo ooMéo🚀oMM🚀 é MéMéMé \";\n r_1_1_0_0_0_2_2_2.s_2 = r_1_1_0_0_0_2_2_2_2;\n }\n r_1_1_0_0_0_2_2.s_2 = r_1_1_0_0_0_2_2_2;\n }\n {\n address r_1_1_0_0_0_2_2_3 = 0x25A029586837483b82dcC5dbe3630849BD6c78BA;\n r_1_1_0_0_0_2_2.s_3 = r_1_1_0_0_0_2_2_3;\n }\n {\n string memory r_1_1_0_0_0_2_2_4 = unicode\"Moo é🚀éMooMoo🚀🚀M🚀é🚀o🚀ooM o 🚀Méé é 🚀\";\n r_1_1_0_0_0_2_2.s_4 = r_1_1_0_0_0_2_2_4;\n }\n r_1_1_0_0_0_2.s_2 = r_1_1_0_0_0_2_2;\n }\n r_1_1_0_0_0.s_2 = r_1_1_0_0_0_2;\n }\n {\n address r_1_1_0_0_0_3 = 0xA19B175B3399848d4473c4bbE5996aF5C0e165d9;\n r_1_1_0_0_0.s_3 = r_1_1_0_0_0_3;\n }\n {\n bytes7 r_1_1_0_0_0_4 = bytes7(0x578d256e7d3df9);\n r_1_1_0_0_0.s_4 = r_1_1_0_0_0_4;\n }\n r_1_1_0_0.s_0 = r_1_1_0_0_0;\n }\n {\n string memory r_1_1_0_0_1 = unicode\"Moo é🚀ééo🚀ééo\";\n r_1_1_0_0.s_1 = r_1_1_0_0_1;\n }\n {\n int40[2] memory r_1_1_0_0_2;\n {\n int40 r_1_1_0_0_2_0 = -499993156525;\n r_1_1_0_0_2[0] = r_1_1_0_0_2_0;\n }\n {\n int40 r_1_1_0_0_2_1 = -247386515738;\n r_1_1_0_0_2[1] = r_1_1_0_0_2_1;\n }\n r_1_1_0_0.s_2 = r_1_1_0_0_2;\n }\n r_1_1_0[0] = r_1_1_0_0;\n }\n {\n S_6c7af139 memory r_1_1_0_1;\n {\n S_71a4881b memory r_1_1_0_1_0;\n {\n bool r_1_1_0_1_0_0 = true;\n r_1_1_0_1_0.s_0 = r_1_1_0_1_0_0;\n }\n {\n string memory r_1_1_0_1_0_1 = unicode\"Moo é🚀oéooé🚀M\";\n r_1_1_0_1_0.s_1 = r_1_1_0_1_0_1;\n }\n {\n S_7e54c7ee memory r_1_1_0_1_0_2;\n {\n S_d29e61bf memory r_1_1_0_1_0_2_0;\n {\n address[3] memory r_1_1_0_1_0_2_0_0;\n {\n address r_1_1_0_1_0_2_0_0_0 = 0xa4802F649bC5834De9DfeAcC9766d4ff9207e408;\n r_1_1_0_1_0_2_0_0[0] = r_1_1_0_1_0_2_0_0_0;\n }\n {\n address r_1_1_0_1_0_2_0_0_1 = 0x160909344d5C144B7F502d868C24A41f96e0fD53;\n r_1_1_0_1_0_2_0_0[1] = r_1_1_0_1_0_2_0_0_1;\n }\n {\n address r_1_1_0_1_0_2_0_0_2 = 0x8BefD74625fbeB828f03F583fB8004Cf836985C1;\n r_1_1_0_1_0_2_0_0[2] = r_1_1_0_1_0_2_0_0_2;\n }\n r_1_1_0_1_0_2_0.s_0 = r_1_1_0_1_0_2_0_0;\n }\n {\n bytes22 r_1_1_0_1_0_2_0_1 = bytes22(0x95841e588dafb0c7c847aeed0a0ad6710eff930f55ee);\n r_1_1_0_1_0_2_0.s_1 = r_1_1_0_1_0_2_0_1;\n }\n r_1_1_0_1_0_2.s_0 = r_1_1_0_1_0_2_0;\n }\n {\n bytes8 r_1_1_0_1_0_2_1 = bytes8(0x5a4c00cd7a9721ca);\n r_1_1_0_1_0_2.s_1 = r_1_1_0_1_0_2_1;\n }\n {\n S_a217dd34 memory r_1_1_0_1_0_2_2;\n {\n int128 r_1_1_0_1_0_2_2_0 = 63624728085155674815414656595645876392;\n r_1_1_0_1_0_2_2.s_0 = r_1_1_0_1_0_2_2_0;\n }\n {\n bool r_1_1_0_1_0_2_2_1 = true;\n r_1_1_0_1_0_2_2.s_1 = r_1_1_0_1_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_1_0_1_0_2_2_2;\n {\n string memory r_1_1_0_1_0_2_2_2_0 = unicode\"Moo é🚀 🚀o🚀 M🚀🚀é M é🚀éMM o ééM\";\n r_1_1_0_1_0_2_2_2.s_0 = r_1_1_0_1_0_2_2_2_0;\n }\n {\n string memory r_1_1_0_1_0_2_2_2_1 = unicode\"Moo é🚀éoM 🚀🚀oMMMoooMM🚀ééMM oo ooo é🚀éoMMoé\";\n r_1_1_0_1_0_2_2_2.s_1 = r_1_1_0_1_0_2_2_2_1;\n }\n {\n string memory r_1_1_0_1_0_2_2_2_2 = unicode\"Moo é🚀MééoM o🚀oM🚀oooM 🚀M Mo Méo ooéé🚀ooM\";\n r_1_1_0_1_0_2_2_2.s_2 = r_1_1_0_1_0_2_2_2_2;\n }\n r_1_1_0_1_0_2_2.s_2 = r_1_1_0_1_0_2_2_2;\n }\n {\n address r_1_1_0_1_0_2_2_3 = 0xebd39a65B78c03b3D2ADD73F4E8D2273c1DB7106;\n r_1_1_0_1_0_2_2.s_3 = r_1_1_0_1_0_2_2_3;\n }\n {\n string memory r_1_1_0_1_0_2_2_4 = unicode\"Moo é🚀o🚀o é oM🚀Moéé M 🚀🚀o éooéM🚀🚀M o🚀MoMoéoéoo🚀\";\n r_1_1_0_1_0_2_2.s_4 = r_1_1_0_1_0_2_2_4;\n }\n r_1_1_0_1_0_2.s_2 = r_1_1_0_1_0_2_2;\n }\n r_1_1_0_1_0.s_2 = r_1_1_0_1_0_2;\n }\n {\n address r_1_1_0_1_0_3 = 0xa4c2D29CD36d5B885bb649dCeC0a663CB1de37b0;\n r_1_1_0_1_0.s_3 = r_1_1_0_1_0_3;\n }\n {\n bytes7 r_1_1_0_1_0_4 = bytes7(0xd040e3305117e6);\n r_1_1_0_1_0.s_4 = r_1_1_0_1_0_4;\n }\n r_1_1_0_1.s_0 = r_1_1_0_1_0;\n }\n {\n string memory r_1_1_0_1_1 = unicode\"Moo é🚀ooééoM o🚀M Mooé🚀\";\n r_1_1_0_1.s_1 = r_1_1_0_1_1;\n }\n {\n int40[2] memory r_1_1_0_1_2;\n {\n int40 r_1_1_0_1_2_0 = 34804187488;\n r_1_1_0_1_2[0] = r_1_1_0_1_2_0;\n }\n {\n int40 r_1_1_0_1_2_1 = -515844725223;\n r_1_1_0_1_2[1] = r_1_1_0_1_2_1;\n }\n r_1_1_0_1.s_2 = r_1_1_0_1_2;\n }\n r_1_1_0[1] = r_1_1_0_1;\n }\n {\n S_6c7af139 memory r_1_1_0_2;\n {\n S_71a4881b memory r_1_1_0_2_0;\n {\n bool r_1_1_0_2_0_0 = false;\n r_1_1_0_2_0.s_0 = r_1_1_0_2_0_0;\n }\n {\n string memory r_1_1_0_2_0_1 = unicode\"Moo é🚀M🚀M éo Mé oéMéé🚀 é\";\n r_1_1_0_2_0.s_1 = r_1_1_0_2_0_1;\n }\n {\n S_7e54c7ee memory r_1_1_0_2_0_2;\n {\n S_d29e61bf memory r_1_1_0_2_0_2_0;\n {\n address[3] memory r_1_1_0_2_0_2_0_0;\n {\n address r_1_1_0_2_0_2_0_0_0 = 0x4D814fB71Bcf5AAD58B2205cAEcf2B8fce94446a;\n r_1_1_0_2_0_2_0_0[0] = r_1_1_0_2_0_2_0_0_0;\n }\n {\n address r_1_1_0_2_0_2_0_0_1 = 0xc5b216cD7c4D9aA71696626656af3C3997543b94;\n r_1_1_0_2_0_2_0_0[1] = r_1_1_0_2_0_2_0_0_1;\n }\n {\n address r_1_1_0_2_0_2_0_0_2 = 0xb4c8197664D834A78fa598544E57bAf061024A8F;\n r_1_1_0_2_0_2_0_0[2] = r_1_1_0_2_0_2_0_0_2;\n }\n r_1_1_0_2_0_2_0.s_0 = r_1_1_0_2_0_2_0_0;\n }\n {\n bytes22 r_1_1_0_2_0_2_0_1 = bytes22(0xda6b9c3f7d2fdd2a79dd85e5ab48059e8971ed48e298);\n r_1_1_0_2_0_2_0.s_1 = r_1_1_0_2_0_2_0_1;\n }\n r_1_1_0_2_0_2.s_0 = r_1_1_0_2_0_2_0;\n }\n {\n bytes8 r_1_1_0_2_0_2_1 = bytes8(0x96068b8ecef5bc60);\n r_1_1_0_2_0_2.s_1 = r_1_1_0_2_0_2_1;\n }\n {\n S_a217dd34 memory r_1_1_0_2_0_2_2;\n {\n int128 r_1_1_0_2_0_2_2_0 = -50414449485213460151355499249196331985;\n r_1_1_0_2_0_2_2.s_0 = r_1_1_0_2_0_2_2_0;\n }\n {\n bool r_1_1_0_2_0_2_2_1 = true;\n r_1_1_0_2_0_2_2.s_1 = r_1_1_0_2_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_1_0_2_0_2_2_2;\n {\n string memory r_1_1_0_2_0_2_2_2_0 = unicode\"Moo é🚀\";\n r_1_1_0_2_0_2_2_2.s_0 = r_1_1_0_2_0_2_2_2_0;\n }\n {\n string memory r_1_1_0_2_0_2_2_2_1 = unicode\"Moo é🚀o🚀🚀oooooo🚀éooMMéoo🚀 🚀🚀o🚀é 🚀éoooM ooM M MM🚀oéé Mo🚀oo\";\n r_1_1_0_2_0_2_2_2.s_1 = r_1_1_0_2_0_2_2_2_1;\n }\n {\n string memory r_1_1_0_2_0_2_2_2_2 = unicode\"Moo é🚀M🚀oé🚀M🚀🚀é\";\n r_1_1_0_2_0_2_2_2.s_2 = r_1_1_0_2_0_2_2_2_2;\n }\n r_1_1_0_2_0_2_2.s_2 = r_1_1_0_2_0_2_2_2;\n }\n {\n address r_1_1_0_2_0_2_2_3 = 0xB0A6522B4eD9821a887f885e76c4087FA266787E;\n r_1_1_0_2_0_2_2.s_3 = r_1_1_0_2_0_2_2_3;\n }\n {\n string memory r_1_1_0_2_0_2_2_4 = unicode\"Moo é🚀oMo🚀 Méé🚀oo🚀🚀o🚀o🚀Mo🚀 🚀éé\";\n r_1_1_0_2_0_2_2.s_4 = r_1_1_0_2_0_2_2_4;\n }\n r_1_1_0_2_0_2.s_2 = r_1_1_0_2_0_2_2;\n }\n r_1_1_0_2_0.s_2 = r_1_1_0_2_0_2;\n }\n {\n address r_1_1_0_2_0_3 = 0xDbfCF080a14358ECDd3DD8d30C698AA16e0845FE;\n r_1_1_0_2_0.s_3 = r_1_1_0_2_0_3;\n }\n {\n bytes7 r_1_1_0_2_0_4 = bytes7(0x982f0841cc90a1);\n r_1_1_0_2_0.s_4 = r_1_1_0_2_0_4;\n }\n r_1_1_0_2.s_0 = r_1_1_0_2_0;\n }\n {\n string memory r_1_1_0_2_1 = unicode\"Moo é🚀oo Mé🚀🚀 M M\";\n r_1_1_0_2.s_1 = r_1_1_0_2_1;\n }\n {\n int40[2] memory r_1_1_0_2_2;\n {\n int40 r_1_1_0_2_2_0 = -213545541656;\n r_1_1_0_2_2[0] = r_1_1_0_2_2_0;\n }\n {\n int40 r_1_1_0_2_2_1 = 296114960907;\n r_1_1_0_2_2[1] = r_1_1_0_2_2_1;\n }\n r_1_1_0_2.s_2 = r_1_1_0_2_2;\n }\n r_1_1_0[2] = r_1_1_0_2;\n }\n {\n S_6c7af139 memory r_1_1_0_3;\n {\n S_71a4881b memory r_1_1_0_3_0;\n {\n bool r_1_1_0_3_0_0 = false;\n r_1_1_0_3_0.s_0 = r_1_1_0_3_0_0;\n }\n {\n string memory r_1_1_0_3_0_1 = unicode\"Moo é🚀é🚀éoMo éM 🚀🚀🚀éMoMooMéoo🚀🚀Mo \";\n r_1_1_0_3_0.s_1 = r_1_1_0_3_0_1;\n }\n {\n S_7e54c7ee memory r_1_1_0_3_0_2;\n {\n S_d29e61bf memory r_1_1_0_3_0_2_0;\n {\n address[3] memory r_1_1_0_3_0_2_0_0;\n {\n address r_1_1_0_3_0_2_0_0_0 = 0x6167eC3F676b54F2842c038Ed55C8fAfa2DF4196;\n r_1_1_0_3_0_2_0_0[0] = r_1_1_0_3_0_2_0_0_0;\n }\n {\n address r_1_1_0_3_0_2_0_0_1 = 0xede5094843deB0795E98c13c57c1B1d26E3b30bb;\n r_1_1_0_3_0_2_0_0[1] = r_1_1_0_3_0_2_0_0_1;\n }\n {\n address r_1_1_0_3_0_2_0_0_2 = 0x368e4cc37E84485479462E3eB131F47F20733104;\n r_1_1_0_3_0_2_0_0[2] = r_1_1_0_3_0_2_0_0_2;\n }\n r_1_1_0_3_0_2_0.s_0 = r_1_1_0_3_0_2_0_0;\n }\n {\n bytes22 r_1_1_0_3_0_2_0_1 = bytes22(0x8eece1fc5d97366349413a277eda09d017d76df51293);\n r_1_1_0_3_0_2_0.s_1 = r_1_1_0_3_0_2_0_1;\n }\n r_1_1_0_3_0_2.s_0 = r_1_1_0_3_0_2_0;\n }\n {\n bytes8 r_1_1_0_3_0_2_1 = bytes8(0x7641870d67c9cd29);\n r_1_1_0_3_0_2.s_1 = r_1_1_0_3_0_2_1;\n }\n {\n S_a217dd34 memory r_1_1_0_3_0_2_2;\n {\n int128 r_1_1_0_3_0_2_2_0 = 141817897536058375490243465516155199593;\n r_1_1_0_3_0_2_2.s_0 = r_1_1_0_3_0_2_2_0;\n }\n {\n bool r_1_1_0_3_0_2_2_1 = true;\n r_1_1_0_3_0_2_2.s_1 = r_1_1_0_3_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_1_0_3_0_2_2_2;\n {\n string memory r_1_1_0_3_0_2_2_2_0 = unicode\"Moo é🚀🚀oéoMooo\";\n r_1_1_0_3_0_2_2_2.s_0 = r_1_1_0_3_0_2_2_2_0;\n }\n {\n string memory r_1_1_0_3_0_2_2_2_1 = unicode\"Moo é🚀ooé🚀ooéo🚀oMM\";\n r_1_1_0_3_0_2_2_2.s_1 = r_1_1_0_3_0_2_2_2_1;\n }\n {\n string memory r_1_1_0_3_0_2_2_2_2 = unicode\"Moo é🚀MMoMMo 🚀🚀oéooééMMoo MM\";\n r_1_1_0_3_0_2_2_2.s_2 = r_1_1_0_3_0_2_2_2_2;\n }\n r_1_1_0_3_0_2_2.s_2 = r_1_1_0_3_0_2_2_2;\n }\n {\n address r_1_1_0_3_0_2_2_3 = 0xcc448419B619D7Cc59d447F8C0B0fC5A3cC100F4;\n r_1_1_0_3_0_2_2.s_3 = r_1_1_0_3_0_2_2_3;\n }\n {\n string memory r_1_1_0_3_0_2_2_4 = unicode\"Moo é🚀\";\n r_1_1_0_3_0_2_2.s_4 = r_1_1_0_3_0_2_2_4;\n }\n r_1_1_0_3_0_2.s_2 = r_1_1_0_3_0_2_2;\n }\n r_1_1_0_3_0.s_2 = r_1_1_0_3_0_2;\n }\n {\n address r_1_1_0_3_0_3 = 0x1763d060B32aAfA02a6F6cA499038a0e928477b8;\n r_1_1_0_3_0.s_3 = r_1_1_0_3_0_3;\n }\n {\n bytes7 r_1_1_0_3_0_4 = bytes7(0x41fdae2306fba3);\n r_1_1_0_3_0.s_4 = r_1_1_0_3_0_4;\n }\n r_1_1_0_3.s_0 = r_1_1_0_3_0;\n }\n {\n string memory r_1_1_0_3_1 = unicode\"Moo é🚀MMo 🚀oMMéoMoM🚀MooMéo🚀M🚀Mo o\";\n r_1_1_0_3.s_1 = r_1_1_0_3_1;\n }\n {\n int40[2] memory r_1_1_0_3_2;\n {\n int40 r_1_1_0_3_2_0 = -257060915571;\n r_1_1_0_3_2[0] = r_1_1_0_3_2_0;\n }\n {\n int40 r_1_1_0_3_2_1 = 53125257302;\n r_1_1_0_3_2[1] = r_1_1_0_3_2_1;\n }\n r_1_1_0_3.s_2 = r_1_1_0_3_2;\n }\n r_1_1_0[3] = r_1_1_0_3;\n }\n r_1_1[0] = r_1_1_0;\n }\n r_1[1] = r_1_1;\n }\n {\n S_6c7af139[4][1] memory r_1_2;\n {\n S_6c7af139[4] memory r_1_2_0;\n {\n S_6c7af139 memory r_1_2_0_0;\n {\n S_71a4881b memory r_1_2_0_0_0;\n {\n bool r_1_2_0_0_0_0 = false;\n r_1_2_0_0_0.s_0 = r_1_2_0_0_0_0;\n }\n {\n string memory r_1_2_0_0_0_1 = unicode\"Moo é🚀🚀🚀ooMM🚀MééMoM\";\n r_1_2_0_0_0.s_1 = r_1_2_0_0_0_1;\n }\n {\n S_7e54c7ee memory r_1_2_0_0_0_2;\n {\n S_d29e61bf memory r_1_2_0_0_0_2_0;\n {\n address[3] memory r_1_2_0_0_0_2_0_0;\n {\n address r_1_2_0_0_0_2_0_0_0 = 0x71D355DE0dd118fF156dF8517E39E2ABbabA438f;\n r_1_2_0_0_0_2_0_0[0] = r_1_2_0_0_0_2_0_0_0;\n }\n {\n address r_1_2_0_0_0_2_0_0_1 = 0xaF35671f099B913fDd8AE97CF60b827c179BDA34;\n r_1_2_0_0_0_2_0_0[1] = r_1_2_0_0_0_2_0_0_1;\n }\n {\n address r_1_2_0_0_0_2_0_0_2 = 0xBc2472868D038A4b170BA6D333cE75c8025c376D;\n r_1_2_0_0_0_2_0_0[2] = r_1_2_0_0_0_2_0_0_2;\n }\n r_1_2_0_0_0_2_0.s_0 = r_1_2_0_0_0_2_0_0;\n }\n {\n bytes22 r_1_2_0_0_0_2_0_1 = bytes22(0x91c7bf133651fdee8746dbcc8859d376ce10083b9b4d);\n r_1_2_0_0_0_2_0.s_1 = r_1_2_0_0_0_2_0_1;\n }\n r_1_2_0_0_0_2.s_0 = r_1_2_0_0_0_2_0;\n }\n {\n bytes8 r_1_2_0_0_0_2_1 = bytes8(0x5eb60976e4fee44b);\n r_1_2_0_0_0_2.s_1 = r_1_2_0_0_0_2_1;\n }\n {\n S_a217dd34 memory r_1_2_0_0_0_2_2;\n {\n int128 r_1_2_0_0_0_2_2_0 = 146040914452404139636133140323314417802;\n r_1_2_0_0_0_2_2.s_0 = r_1_2_0_0_0_2_2_0;\n }\n {\n bool r_1_2_0_0_0_2_2_1 = true;\n r_1_2_0_0_0_2_2.s_1 = r_1_2_0_0_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_2_0_0_0_2_2_2;\n {\n string memory r_1_2_0_0_0_2_2_2_0 = unicode\"Moo é🚀oMoé Méoéoé o oéo 🚀 o MéMoooMMM MMMoo🚀éM oo o o\";\n r_1_2_0_0_0_2_2_2.s_0 = r_1_2_0_0_0_2_2_2_0;\n }\n {\n string memory r_1_2_0_0_0_2_2_2_1 = unicode\"Moo é🚀🚀é🚀MMMoooo🚀🚀M 🚀oooéMo\";\n r_1_2_0_0_0_2_2_2.s_1 = r_1_2_0_0_0_2_2_2_1;\n }\n {\n string memory r_1_2_0_0_0_2_2_2_2 = unicode\"Moo é🚀 o🚀 éoéM🚀o MéoMoéoM 🚀 éMoMéé🚀éMMooooMéMéoMMo o\";\n r_1_2_0_0_0_2_2_2.s_2 = r_1_2_0_0_0_2_2_2_2;\n }\n r_1_2_0_0_0_2_2.s_2 = r_1_2_0_0_0_2_2_2;\n }\n {\n address r_1_2_0_0_0_2_2_3 = 0x7d84272a441212743f7FBA0a6083e125F48d5Edc;\n r_1_2_0_0_0_2_2.s_3 = r_1_2_0_0_0_2_2_3;\n }\n {\n string memory r_1_2_0_0_0_2_2_4 = unicode\"Moo é🚀oooMM🚀oMo oé🚀oé🚀é🚀M\";\n r_1_2_0_0_0_2_2.s_4 = r_1_2_0_0_0_2_2_4;\n }\n r_1_2_0_0_0_2.s_2 = r_1_2_0_0_0_2_2;\n }\n r_1_2_0_0_0.s_2 = r_1_2_0_0_0_2;\n }\n {\n address r_1_2_0_0_0_3 = 0x7581B289936f63c693753b2eB8D2322d55401FEE;\n r_1_2_0_0_0.s_3 = r_1_2_0_0_0_3;\n }\n {\n bytes7 r_1_2_0_0_0_4 = bytes7(0xf76707081f9811);\n r_1_2_0_0_0.s_4 = r_1_2_0_0_0_4;\n }\n r_1_2_0_0.s_0 = r_1_2_0_0_0;\n }\n {\n string memory r_1_2_0_0_1 = unicode\"Moo é🚀Mooooo🚀 oo🚀\";\n r_1_2_0_0.s_1 = r_1_2_0_0_1;\n }\n {\n int40[2] memory r_1_2_0_0_2;\n {\n int40 r_1_2_0_0_2_0 = -418950882776;\n r_1_2_0_0_2[0] = r_1_2_0_0_2_0;\n }\n {\n int40 r_1_2_0_0_2_1 = 524829848999;\n r_1_2_0_0_2[1] = r_1_2_0_0_2_1;\n }\n r_1_2_0_0.s_2 = r_1_2_0_0_2;\n }\n r_1_2_0[0] = r_1_2_0_0;\n }\n {\n S_6c7af139 memory r_1_2_0_1;\n {\n S_71a4881b memory r_1_2_0_1_0;\n {\n bool r_1_2_0_1_0_0 = false;\n r_1_2_0_1_0.s_0 = r_1_2_0_1_0_0;\n }\n {\n string memory r_1_2_0_1_0_1 = unicode\"Moo é🚀🚀ooo oMéé é\";\n r_1_2_0_1_0.s_1 = r_1_2_0_1_0_1;\n }\n {\n S_7e54c7ee memory r_1_2_0_1_0_2;\n {\n S_d29e61bf memory r_1_2_0_1_0_2_0;\n {\n address[3] memory r_1_2_0_1_0_2_0_0;\n {\n address r_1_2_0_1_0_2_0_0_0 = 0xef39293a07717FCEE87E558F66a69f22a90E716b;\n r_1_2_0_1_0_2_0_0[0] = r_1_2_0_1_0_2_0_0_0;\n }\n {\n address r_1_2_0_1_0_2_0_0_1 = 0xd3238bc068d5469Faae53fe61e3D28809CAA273b;\n r_1_2_0_1_0_2_0_0[1] = r_1_2_0_1_0_2_0_0_1;\n }\n {\n address r_1_2_0_1_0_2_0_0_2 = 0x1D670fE466711115EFa20cb297D5c0421D859389;\n r_1_2_0_1_0_2_0_0[2] = r_1_2_0_1_0_2_0_0_2;\n }\n r_1_2_0_1_0_2_0.s_0 = r_1_2_0_1_0_2_0_0;\n }\n {\n bytes22 r_1_2_0_1_0_2_0_1 = bytes22(0x958cb3ac8dc7bce8effc6ad24659ff19b9674d94e766);\n r_1_2_0_1_0_2_0.s_1 = r_1_2_0_1_0_2_0_1;\n }\n r_1_2_0_1_0_2.s_0 = r_1_2_0_1_0_2_0;\n }\n {\n bytes8 r_1_2_0_1_0_2_1 = bytes8(0x8b04ef97822e828b);\n r_1_2_0_1_0_2.s_1 = r_1_2_0_1_0_2_1;\n }\n {\n S_a217dd34 memory r_1_2_0_1_0_2_2;\n {\n int128 r_1_2_0_1_0_2_2_0 = -854946371447721398857650813844016249;\n r_1_2_0_1_0_2_2.s_0 = r_1_2_0_1_0_2_2_0;\n }\n {\n bool r_1_2_0_1_0_2_2_1 = true;\n r_1_2_0_1_0_2_2.s_1 = r_1_2_0_1_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_2_0_1_0_2_2_2;\n {\n string memory r_1_2_0_1_0_2_2_2_0 = unicode\"Moo é🚀o🚀o🚀oéoooM🚀éooé🚀🚀 🚀oo oo 🚀🚀🚀oooooéo oMoM\";\n r_1_2_0_1_0_2_2_2.s_0 = r_1_2_0_1_0_2_2_2_0;\n }\n {\n string memory r_1_2_0_1_0_2_2_2_1 = unicode\"Moo é🚀é🚀Mo🚀o Méoo🚀🚀oo 🚀oéo🚀ooMo\";\n r_1_2_0_1_0_2_2_2.s_1 = r_1_2_0_1_0_2_2_2_1;\n }\n {\n string memory r_1_2_0_1_0_2_2_2_2 = unicode\"Moo é🚀🚀🚀 oM oM Moé 🚀oéoé🚀Mo🚀🚀🚀 MooéooMo🚀🚀ooooo \";\n r_1_2_0_1_0_2_2_2.s_2 = r_1_2_0_1_0_2_2_2_2;\n }\n r_1_2_0_1_0_2_2.s_2 = r_1_2_0_1_0_2_2_2;\n }\n {\n address r_1_2_0_1_0_2_2_3 = 0xee59E04DA840532e07D3059d3858fA7955B91204;\n r_1_2_0_1_0_2_2.s_3 = r_1_2_0_1_0_2_2_3;\n }\n {\n string memory r_1_2_0_1_0_2_2_4 = unicode\"Moo é🚀éoMo🚀é🚀oé\";\n r_1_2_0_1_0_2_2.s_4 = r_1_2_0_1_0_2_2_4;\n }\n r_1_2_0_1_0_2.s_2 = r_1_2_0_1_0_2_2;\n }\n r_1_2_0_1_0.s_2 = r_1_2_0_1_0_2;\n }\n {\n address r_1_2_0_1_0_3 = 0xd44dF1CF962948F082fe43Ed2b01f49dCf99f3d0;\n r_1_2_0_1_0.s_3 = r_1_2_0_1_0_3;\n }\n {\n bytes7 r_1_2_0_1_0_4 = bytes7(0x1fa12715f29770);\n r_1_2_0_1_0.s_4 = r_1_2_0_1_0_4;\n }\n r_1_2_0_1.s_0 = r_1_2_0_1_0;\n }\n {\n string memory r_1_2_0_1_1 = unicode\"Moo é🚀🚀 é🚀o🚀ééooo🚀éooMooéo M oé🚀o🚀ooMMéoMMé🚀 \";\n r_1_2_0_1.s_1 = r_1_2_0_1_1;\n }\n {\n int40[2] memory r_1_2_0_1_2;\n {\n int40 r_1_2_0_1_2_0 = -315319918186;\n r_1_2_0_1_2[0] = r_1_2_0_1_2_0;\n }\n {\n int40 r_1_2_0_1_2_1 = -268249708440;\n r_1_2_0_1_2[1] = r_1_2_0_1_2_1;\n }\n r_1_2_0_1.s_2 = r_1_2_0_1_2;\n }\n r_1_2_0[1] = r_1_2_0_1;\n }\n {\n S_6c7af139 memory r_1_2_0_2;\n {\n S_71a4881b memory r_1_2_0_2_0;\n {\n bool r_1_2_0_2_0_0 = false;\n r_1_2_0_2_0.s_0 = r_1_2_0_2_0_0;\n }\n {\n string memory r_1_2_0_2_0_1 = unicode\"Moo é🚀oééoMMMéoéoMo🚀 oo🚀o\";\n r_1_2_0_2_0.s_1 = r_1_2_0_2_0_1;\n }\n {\n S_7e54c7ee memory r_1_2_0_2_0_2;\n {\n S_d29e61bf memory r_1_2_0_2_0_2_0;\n {\n address[3] memory r_1_2_0_2_0_2_0_0;\n {\n address r_1_2_0_2_0_2_0_0_0 = 0x59D6F42DB099CE0D55a6B7C4a983AbdEB6497920;\n r_1_2_0_2_0_2_0_0[0] = r_1_2_0_2_0_2_0_0_0;\n }\n {\n address r_1_2_0_2_0_2_0_0_1 = 0xa802b1028dca6c4dbf1e2c15E8979d874BEB86b9;\n r_1_2_0_2_0_2_0_0[1] = r_1_2_0_2_0_2_0_0_1;\n }\n {\n address r_1_2_0_2_0_2_0_0_2 = 0xdb0BF0FeD7b4f4EBb2841cD9a680525bb6a190cD;\n r_1_2_0_2_0_2_0_0[2] = r_1_2_0_2_0_2_0_0_2;\n }\n r_1_2_0_2_0_2_0.s_0 = r_1_2_0_2_0_2_0_0;\n }\n {\n bytes22 r_1_2_0_2_0_2_0_1 = bytes22(0x701aeb0598026806cf2e547cbdff02a87709fc37b759);\n r_1_2_0_2_0_2_0.s_1 = r_1_2_0_2_0_2_0_1;\n }\n r_1_2_0_2_0_2.s_0 = r_1_2_0_2_0_2_0;\n }\n {\n bytes8 r_1_2_0_2_0_2_1 = bytes8(0xb64d9f88ff5e1100);\n r_1_2_0_2_0_2.s_1 = r_1_2_0_2_0_2_1;\n }\n {\n S_a217dd34 memory r_1_2_0_2_0_2_2;\n {\n int128 r_1_2_0_2_0_2_2_0 = 2448348339561654361231214220456131733;\n r_1_2_0_2_0_2_2.s_0 = r_1_2_0_2_0_2_2_0;\n }\n {\n bool r_1_2_0_2_0_2_2_1 = true;\n r_1_2_0_2_0_2_2.s_1 = r_1_2_0_2_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_2_0_2_0_2_2_2;\n {\n string memory r_1_2_0_2_0_2_2_2_0 = unicode\"Moo é🚀\";\n r_1_2_0_2_0_2_2_2.s_0 = r_1_2_0_2_0_2_2_2_0;\n }\n {\n string memory r_1_2_0_2_0_2_2_2_1 = unicode\"Moo é🚀o🚀éMéM M ééo🚀M oooo🚀🚀ooo o🚀o\";\n r_1_2_0_2_0_2_2_2.s_1 = r_1_2_0_2_0_2_2_2_1;\n }\n {\n string memory r_1_2_0_2_0_2_2_2_2 = unicode\"Moo é🚀 o🚀éM🚀 🚀 oM🚀M🚀éMéM🚀o🚀ooo MMo é Mooéoéé\";\n r_1_2_0_2_0_2_2_2.s_2 = r_1_2_0_2_0_2_2_2_2;\n }\n r_1_2_0_2_0_2_2.s_2 = r_1_2_0_2_0_2_2_2;\n }\n {\n address r_1_2_0_2_0_2_2_3 = 0x0F968351013E54160E680D2312eee75B42509FcA;\n r_1_2_0_2_0_2_2.s_3 = r_1_2_0_2_0_2_2_3;\n }\n {\n string memory r_1_2_0_2_0_2_2_4 = unicode\"Moo é🚀MéM M ooé\";\n r_1_2_0_2_0_2_2.s_4 = r_1_2_0_2_0_2_2_4;\n }\n r_1_2_0_2_0_2.s_2 = r_1_2_0_2_0_2_2;\n }\n r_1_2_0_2_0.s_2 = r_1_2_0_2_0_2;\n }\n {\n address r_1_2_0_2_0_3 = 0x8E93fe3045Ce3429Ff3eF8592616FC2C252CcFa0;\n r_1_2_0_2_0.s_3 = r_1_2_0_2_0_3;\n }\n {\n bytes7 r_1_2_0_2_0_4 = bytes7(0x5e64ddf75b0de8);\n r_1_2_0_2_0.s_4 = r_1_2_0_2_0_4;\n }\n r_1_2_0_2.s_0 = r_1_2_0_2_0;\n }\n {\n string memory r_1_2_0_2_1 = unicode\"Moo é🚀ééooo oééoMMéoo 🚀ooM🚀M\";\n r_1_2_0_2.s_1 = r_1_2_0_2_1;\n }\n {\n int40[2] memory r_1_2_0_2_2;\n {\n int40 r_1_2_0_2_2_0 = 8230283030;\n r_1_2_0_2_2[0] = r_1_2_0_2_2_0;\n }\n {\n int40 r_1_2_0_2_2_1 = -208070293378;\n r_1_2_0_2_2[1] = r_1_2_0_2_2_1;\n }\n r_1_2_0_2.s_2 = r_1_2_0_2_2;\n }\n r_1_2_0[2] = r_1_2_0_2;\n }\n {\n S_6c7af139 memory r_1_2_0_3;\n {\n S_71a4881b memory r_1_2_0_3_0;\n {\n bool r_1_2_0_3_0_0 = false;\n r_1_2_0_3_0.s_0 = r_1_2_0_3_0_0;\n }\n {\n string memory r_1_2_0_3_0_1 = unicode\"Moo é🚀M ooo oMMéo 🚀🚀\";\n r_1_2_0_3_0.s_1 = r_1_2_0_3_0_1;\n }\n {\n S_7e54c7ee memory r_1_2_0_3_0_2;\n {\n S_d29e61bf memory r_1_2_0_3_0_2_0;\n {\n address[3] memory r_1_2_0_3_0_2_0_0;\n {\n address r_1_2_0_3_0_2_0_0_0 = 0xe8be8845Fb6017ceDb280dD3f6aF7d03b747D95e;\n r_1_2_0_3_0_2_0_0[0] = r_1_2_0_3_0_2_0_0_0;\n }\n {\n address r_1_2_0_3_0_2_0_0_1 = 0x4E5f05c11e461D34bA1AD53433A2F238a29f9Afc;\n r_1_2_0_3_0_2_0_0[1] = r_1_2_0_3_0_2_0_0_1;\n }\n {\n address r_1_2_0_3_0_2_0_0_2 = 0x716F35acAb14eC52DaA0Dd6b036A74C2851c2569;\n r_1_2_0_3_0_2_0_0[2] = r_1_2_0_3_0_2_0_0_2;\n }\n r_1_2_0_3_0_2_0.s_0 = r_1_2_0_3_0_2_0_0;\n }\n {\n bytes22 r_1_2_0_3_0_2_0_1 = bytes22(0x2dcb459c57ae870b8188f72c18bf037001df04c45543);\n r_1_2_0_3_0_2_0.s_1 = r_1_2_0_3_0_2_0_1;\n }\n r_1_2_0_3_0_2.s_0 = r_1_2_0_3_0_2_0;\n }\n {\n bytes8 r_1_2_0_3_0_2_1 = bytes8(0x11c71a1e5adf3682);\n r_1_2_0_3_0_2.s_1 = r_1_2_0_3_0_2_1;\n }\n {\n S_a217dd34 memory r_1_2_0_3_0_2_2;\n {\n int128 r_1_2_0_3_0_2_2_0 = -128872963893010848526820829214143625467;\n r_1_2_0_3_0_2_2.s_0 = r_1_2_0_3_0_2_2_0;\n }\n {\n bool r_1_2_0_3_0_2_2_1 = true;\n r_1_2_0_3_0_2_2.s_1 = r_1_2_0_3_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_2_0_3_0_2_2_2;\n {\n string memory r_1_2_0_3_0_2_2_2_0 = unicode\"Moo é🚀 é éé\";\n r_1_2_0_3_0_2_2_2.s_0 = r_1_2_0_3_0_2_2_2_0;\n }\n {\n string memory r_1_2_0_3_0_2_2_2_1 = unicode\"Moo é🚀🚀Méé🚀🚀o é é éoéoé🚀 🚀MoMooéo🚀ooo o🚀 Mo🚀oéMé🚀 M🚀\";\n r_1_2_0_3_0_2_2_2.s_1 = r_1_2_0_3_0_2_2_2_1;\n }\n {\n string memory r_1_2_0_3_0_2_2_2_2 = unicode\"Moo é🚀M🚀ooé \";\n r_1_2_0_3_0_2_2_2.s_2 = r_1_2_0_3_0_2_2_2_2;\n }\n r_1_2_0_3_0_2_2.s_2 = r_1_2_0_3_0_2_2_2;\n }\n {\n address r_1_2_0_3_0_2_2_3 = 0xf4558561Cae05DF23d50573B375e1b8f2610222F;\n r_1_2_0_3_0_2_2.s_3 = r_1_2_0_3_0_2_2_3;\n }\n {\n string memory r_1_2_0_3_0_2_2_4 = unicode\"Moo é🚀éooéo🚀 🚀éooMMo🚀oMéo🚀oéooMoooo 🚀oMéoMMM ooo🚀o ooo é o\";\n r_1_2_0_3_0_2_2.s_4 = r_1_2_0_3_0_2_2_4;\n }\n r_1_2_0_3_0_2.s_2 = r_1_2_0_3_0_2_2;\n }\n r_1_2_0_3_0.s_2 = r_1_2_0_3_0_2;\n }\n {\n address r_1_2_0_3_0_3 = 0x02c240A608B92428c196A55861DB5C15cF4989cb;\n r_1_2_0_3_0.s_3 = r_1_2_0_3_0_3;\n }\n {\n bytes7 r_1_2_0_3_0_4 = bytes7(0xbbe2d06698156b);\n r_1_2_0_3_0.s_4 = r_1_2_0_3_0_4;\n }\n r_1_2_0_3.s_0 = r_1_2_0_3_0;\n }\n {\n string memory r_1_2_0_3_1 = unicode\"Moo é🚀M 🚀 oo🚀é🚀éoé éMM\";\n r_1_2_0_3.s_1 = r_1_2_0_3_1;\n }\n {\n int40[2] memory r_1_2_0_3_2;\n {\n int40 r_1_2_0_3_2_0 = -405381587136;\n r_1_2_0_3_2[0] = r_1_2_0_3_2_0;\n }\n {\n int40 r_1_2_0_3_2_1 = 296350960436;\n r_1_2_0_3_2[1] = r_1_2_0_3_2_1;\n }\n r_1_2_0_3.s_2 = r_1_2_0_3_2;\n }\n r_1_2_0[3] = r_1_2_0_3;\n }\n r_1_2[0] = r_1_2_0;\n }\n r_1[2] = r_1_2;\n }\n {\n S_6c7af139[4][1] memory r_1_3;\n {\n S_6c7af139[4] memory r_1_3_0;\n {\n S_6c7af139 memory r_1_3_0_0;\n {\n S_71a4881b memory r_1_3_0_0_0;\n {\n bool r_1_3_0_0_0_0 = false;\n r_1_3_0_0_0.s_0 = r_1_3_0_0_0_0;\n }\n {\n string memory r_1_3_0_0_0_1 = unicode\"Moo é🚀o\";\n r_1_3_0_0_0.s_1 = r_1_3_0_0_0_1;\n }\n {\n S_7e54c7ee memory r_1_3_0_0_0_2;\n {\n S_d29e61bf memory r_1_3_0_0_0_2_0;\n {\n address[3] memory r_1_3_0_0_0_2_0_0;\n {\n address r_1_3_0_0_0_2_0_0_0 = 0x0271A9f08b096f13F15615Bf3abFBA63A3835228;\n r_1_3_0_0_0_2_0_0[0] = r_1_3_0_0_0_2_0_0_0;\n }\n {\n address r_1_3_0_0_0_2_0_0_1 = 0x57CAA879D4EeC37000334f29dDcFc6EACe9C9054;\n r_1_3_0_0_0_2_0_0[1] = r_1_3_0_0_0_2_0_0_1;\n }\n {\n address r_1_3_0_0_0_2_0_0_2 = 0x70E88A662Cb1688Ad5afe3d51701acE53c89F5b2;\n r_1_3_0_0_0_2_0_0[2] = r_1_3_0_0_0_2_0_0_2;\n }\n r_1_3_0_0_0_2_0.s_0 = r_1_3_0_0_0_2_0_0;\n }\n {\n bytes22 r_1_3_0_0_0_2_0_1 = bytes22(0xcdaa21752004534fafae55be67ecb8fd35fa4f92272c);\n r_1_3_0_0_0_2_0.s_1 = r_1_3_0_0_0_2_0_1;\n }\n r_1_3_0_0_0_2.s_0 = r_1_3_0_0_0_2_0;\n }\n {\n bytes8 r_1_3_0_0_0_2_1 = bytes8(0xf70538f14abc419f);\n r_1_3_0_0_0_2.s_1 = r_1_3_0_0_0_2_1;\n }\n {\n S_a217dd34 memory r_1_3_0_0_0_2_2;\n {\n int128 r_1_3_0_0_0_2_2_0 = -74770074349806728544199440763260947058;\n r_1_3_0_0_0_2_2.s_0 = r_1_3_0_0_0_2_2_0;\n }\n {\n bool r_1_3_0_0_0_2_2_1 = false;\n r_1_3_0_0_0_2_2.s_1 = r_1_3_0_0_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_3_0_0_0_2_2_2;\n {\n string memory r_1_3_0_0_0_2_2_2_0 = unicode\"Moo é🚀éooM\";\n r_1_3_0_0_0_2_2_2.s_0 = r_1_3_0_0_0_2_2_2_0;\n }\n {\n string memory r_1_3_0_0_0_2_2_2_1 = unicode\"Moo é🚀 🚀🚀 Moo🚀🚀Mé o Mé🚀 oM o o🚀🚀M🚀MoééM o🚀 é🚀oooMM🚀o MM🚀🚀é 🚀🚀\";\n r_1_3_0_0_0_2_2_2.s_1 = r_1_3_0_0_0_2_2_2_1;\n }\n {\n string memory r_1_3_0_0_0_2_2_2_2 = unicode\"Moo é🚀 o é é🚀Mo M\";\n r_1_3_0_0_0_2_2_2.s_2 = r_1_3_0_0_0_2_2_2_2;\n }\n r_1_3_0_0_0_2_2.s_2 = r_1_3_0_0_0_2_2_2;\n }\n {\n address r_1_3_0_0_0_2_2_3 = 0x811D981e7dbe6f80727285343906aa50bE657Ae2;\n r_1_3_0_0_0_2_2.s_3 = r_1_3_0_0_0_2_2_3;\n }\n {\n string memory r_1_3_0_0_0_2_2_4 = unicode\"Moo é🚀o ooéo MoM🚀 🚀éo oM🚀🚀 éo ooooMoo éMo🚀oo🚀éo🚀🚀oo\";\n r_1_3_0_0_0_2_2.s_4 = r_1_3_0_0_0_2_2_4;\n }\n r_1_3_0_0_0_2.s_2 = r_1_3_0_0_0_2_2;\n }\n r_1_3_0_0_0.s_2 = r_1_3_0_0_0_2;\n }\n {\n address r_1_3_0_0_0_3 = 0x2dD9b0B8Ea3F36f15eAdA31DE8493717073AA5dC;\n r_1_3_0_0_0.s_3 = r_1_3_0_0_0_3;\n }\n {\n bytes7 r_1_3_0_0_0_4 = bytes7(0x086cdf87df18c2);\n r_1_3_0_0_0.s_4 = r_1_3_0_0_0_4;\n }\n r_1_3_0_0.s_0 = r_1_3_0_0_0;\n }\n {\n string memory r_1_3_0_0_1 = unicode\"Moo é🚀o🚀o🚀oM \";\n r_1_3_0_0.s_1 = r_1_3_0_0_1;\n }\n {\n int40[2] memory r_1_3_0_0_2;\n {\n int40 r_1_3_0_0_2_0 = 13319631627;\n r_1_3_0_0_2[0] = r_1_3_0_0_2_0;\n }\n {\n int40 r_1_3_0_0_2_1 = -337173007305;\n r_1_3_0_0_2[1] = r_1_3_0_0_2_1;\n }\n r_1_3_0_0.s_2 = r_1_3_0_0_2;\n }\n r_1_3_0[0] = r_1_3_0_0;\n }\n {\n S_6c7af139 memory r_1_3_0_1;\n {\n S_71a4881b memory r_1_3_0_1_0;\n {\n bool r_1_3_0_1_0_0 = true;\n r_1_3_0_1_0.s_0 = r_1_3_0_1_0_0;\n }\n {\n string memory r_1_3_0_1_0_1 = unicode\"Moo é🚀🚀MMéoé Moo M🚀 oMoéoo🚀 oéMéo🚀 Moéooéoooéooooé🚀🚀 o \";\n r_1_3_0_1_0.s_1 = r_1_3_0_1_0_1;\n }\n {\n S_7e54c7ee memory r_1_3_0_1_0_2;\n {\n S_d29e61bf memory r_1_3_0_1_0_2_0;\n {\n address[3] memory r_1_3_0_1_0_2_0_0;\n {\n address r_1_3_0_1_0_2_0_0_0 = 0xe14CC5dbF416a76d7A606B0C4eF726c01425Dbe1;\n r_1_3_0_1_0_2_0_0[0] = r_1_3_0_1_0_2_0_0_0;\n }\n {\n address r_1_3_0_1_0_2_0_0_1 = 0xD58a1D35359A2860592D29Ba3DFa0b9fbD52F76A;\n r_1_3_0_1_0_2_0_0[1] = r_1_3_0_1_0_2_0_0_1;\n }\n {\n address r_1_3_0_1_0_2_0_0_2 = 0xBc7B421A3c1f8E0283007835e4F809E7423F0816;\n r_1_3_0_1_0_2_0_0[2] = r_1_3_0_1_0_2_0_0_2;\n }\n r_1_3_0_1_0_2_0.s_0 = r_1_3_0_1_0_2_0_0;\n }\n {\n bytes22 r_1_3_0_1_0_2_0_1 = bytes22(0xdf78fb020870422a9dfd196ef4cdc059e18bc6c6e3c2);\n r_1_3_0_1_0_2_0.s_1 = r_1_3_0_1_0_2_0_1;\n }\n r_1_3_0_1_0_2.s_0 = r_1_3_0_1_0_2_0;\n }\n {\n bytes8 r_1_3_0_1_0_2_1 = bytes8(0x37104cd607a25215);\n r_1_3_0_1_0_2.s_1 = r_1_3_0_1_0_2_1;\n }\n {\n S_a217dd34 memory r_1_3_0_1_0_2_2;\n {\n int128 r_1_3_0_1_0_2_2_0 = 103826667361427089928837382649458393018;\n r_1_3_0_1_0_2_2.s_0 = r_1_3_0_1_0_2_2_0;\n }\n {\n bool r_1_3_0_1_0_2_2_1 = false;\n r_1_3_0_1_0_2_2.s_1 = r_1_3_0_1_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_3_0_1_0_2_2_2;\n {\n string memory r_1_3_0_1_0_2_2_2_0 = unicode\"Moo é🚀🚀Mooo🚀MMM Mo 🚀oMooMo🚀MMoéoooM oo🚀MM🚀éM\";\n r_1_3_0_1_0_2_2_2.s_0 = r_1_3_0_1_0_2_2_2_0;\n }\n {\n string memory r_1_3_0_1_0_2_2_2_1 = unicode\"Moo é🚀oé éé🚀ooéoooMooo é🚀ééoM🚀ooéo é🚀🚀é oé🚀🚀é🚀 🚀o🚀o\";\n r_1_3_0_1_0_2_2_2.s_1 = r_1_3_0_1_0_2_2_2_1;\n }\n {\n string memory r_1_3_0_1_0_2_2_2_2 = unicode\"Moo é🚀\";\n r_1_3_0_1_0_2_2_2.s_2 = r_1_3_0_1_0_2_2_2_2;\n }\n r_1_3_0_1_0_2_2.s_2 = r_1_3_0_1_0_2_2_2;\n }\n {\n address r_1_3_0_1_0_2_2_3 = 0x28FF38296fD042aEC5e9672cf44A8a1a17305F18;\n r_1_3_0_1_0_2_2.s_3 = r_1_3_0_1_0_2_2_3;\n }\n {\n string memory r_1_3_0_1_0_2_2_4 = unicode\"Moo é🚀o🚀é é🚀oéoooMM\";\n r_1_3_0_1_0_2_2.s_4 = r_1_3_0_1_0_2_2_4;\n }\n r_1_3_0_1_0_2.s_2 = r_1_3_0_1_0_2_2;\n }\n r_1_3_0_1_0.s_2 = r_1_3_0_1_0_2;\n }\n {\n address r_1_3_0_1_0_3 = 0x9423a01eFEc6b7aF47fD029575a2D0F992617c7E;\n r_1_3_0_1_0.s_3 = r_1_3_0_1_0_3;\n }\n {\n bytes7 r_1_3_0_1_0_4 = bytes7(0x6101e0fe89074f);\n r_1_3_0_1_0.s_4 = r_1_3_0_1_0_4;\n }\n r_1_3_0_1.s_0 = r_1_3_0_1_0;\n }\n {\n string memory r_1_3_0_1_1 = unicode\"Moo é🚀\";\n r_1_3_0_1.s_1 = r_1_3_0_1_1;\n }\n {\n int40[2] memory r_1_3_0_1_2;\n {\n int40 r_1_3_0_1_2_0 = 437124834717;\n r_1_3_0_1_2[0] = r_1_3_0_1_2_0;\n }\n {\n int40 r_1_3_0_1_2_1 = -209087154503;\n r_1_3_0_1_2[1] = r_1_3_0_1_2_1;\n }\n r_1_3_0_1.s_2 = r_1_3_0_1_2;\n }\n r_1_3_0[1] = r_1_3_0_1;\n }\n {\n S_6c7af139 memory r_1_3_0_2;\n {\n S_71a4881b memory r_1_3_0_2_0;\n {\n bool r_1_3_0_2_0_0 = false;\n r_1_3_0_2_0.s_0 = r_1_3_0_2_0_0;\n }\n {\n string memory r_1_3_0_2_0_1 = unicode\"Moo é🚀ooo\";\n r_1_3_0_2_0.s_1 = r_1_3_0_2_0_1;\n }\n {\n S_7e54c7ee memory r_1_3_0_2_0_2;\n {\n S_d29e61bf memory r_1_3_0_2_0_2_0;\n {\n address[3] memory r_1_3_0_2_0_2_0_0;\n {\n address r_1_3_0_2_0_2_0_0_0 = 0xB5405956dA2Fa7849f979aFA97ABFd706b942582;\n r_1_3_0_2_0_2_0_0[0] = r_1_3_0_2_0_2_0_0_0;\n }\n {\n address r_1_3_0_2_0_2_0_0_1 = 0xE0470F38eA39eCd0C79B5234EE861caBE4538946;\n r_1_3_0_2_0_2_0_0[1] = r_1_3_0_2_0_2_0_0_1;\n }\n {\n address r_1_3_0_2_0_2_0_0_2 = 0x8365a9E8B96fC7C5e0B65Bf254c8c669aE4FfB49;\n r_1_3_0_2_0_2_0_0[2] = r_1_3_0_2_0_2_0_0_2;\n }\n r_1_3_0_2_0_2_0.s_0 = r_1_3_0_2_0_2_0_0;\n }\n {\n bytes22 r_1_3_0_2_0_2_0_1 = bytes22(0xf937c889573cb774d0ab3237361b9f3509b6f7d6b7d8);\n r_1_3_0_2_0_2_0.s_1 = r_1_3_0_2_0_2_0_1;\n }\n r_1_3_0_2_0_2.s_0 = r_1_3_0_2_0_2_0;\n }\n {\n bytes8 r_1_3_0_2_0_2_1 = bytes8(0x5cabbbc7466a93ef);\n r_1_3_0_2_0_2.s_1 = r_1_3_0_2_0_2_1;\n }\n {\n S_a217dd34 memory r_1_3_0_2_0_2_2;\n {\n int128 r_1_3_0_2_0_2_2_0 = -140672197555055157231416370861641455899;\n r_1_3_0_2_0_2_2.s_0 = r_1_3_0_2_0_2_2_0;\n }\n {\n bool r_1_3_0_2_0_2_2_1 = true;\n r_1_3_0_2_0_2_2.s_1 = r_1_3_0_2_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_3_0_2_0_2_2_2;\n {\n string memory r_1_3_0_2_0_2_2_2_0 = unicode\"Moo é🚀o\";\n r_1_3_0_2_0_2_2_2.s_0 = r_1_3_0_2_0_2_2_2_0;\n }\n {\n string memory r_1_3_0_2_0_2_2_2_1 = unicode\"Moo é🚀éMMooo 🚀MoéoMMoM éé 🚀oé \";\n r_1_3_0_2_0_2_2_2.s_1 = r_1_3_0_2_0_2_2_2_1;\n }\n {\n string memory r_1_3_0_2_0_2_2_2_2 = unicode\"Moo é🚀éM🚀MM🚀MoéMMoéMMooéo🚀éééMo éoMo🚀 M M🚀 ooo\";\n r_1_3_0_2_0_2_2_2.s_2 = r_1_3_0_2_0_2_2_2_2;\n }\n r_1_3_0_2_0_2_2.s_2 = r_1_3_0_2_0_2_2_2;\n }\n {\n address r_1_3_0_2_0_2_2_3 = 0x987188ac2B0b4BDe48BF19C9d9CbAa7c0a4B0cc9;\n r_1_3_0_2_0_2_2.s_3 = r_1_3_0_2_0_2_2_3;\n }\n {\n string memory r_1_3_0_2_0_2_2_4 = unicode\"Moo é🚀\";\n r_1_3_0_2_0_2_2.s_4 = r_1_3_0_2_0_2_2_4;\n }\n r_1_3_0_2_0_2.s_2 = r_1_3_0_2_0_2_2;\n }\n r_1_3_0_2_0.s_2 = r_1_3_0_2_0_2;\n }\n {\n address r_1_3_0_2_0_3 = 0xb41C0c7CE3d4c72427158fe122eaAF1fDA056f75;\n r_1_3_0_2_0.s_3 = r_1_3_0_2_0_3;\n }\n {\n bytes7 r_1_3_0_2_0_4 = bytes7(0xf67b8591c9bece);\n r_1_3_0_2_0.s_4 = r_1_3_0_2_0_4;\n }\n r_1_3_0_2.s_0 = r_1_3_0_2_0;\n }\n {\n string memory r_1_3_0_2_1 = unicode\"Moo é🚀éMéMMMoo🚀🚀é Méé éoMMooMM \";\n r_1_3_0_2.s_1 = r_1_3_0_2_1;\n }\n {\n int40[2] memory r_1_3_0_2_2;\n {\n int40 r_1_3_0_2_2_0 = 137528695621;\n r_1_3_0_2_2[0] = r_1_3_0_2_2_0;\n }\n {\n int40 r_1_3_0_2_2_1 = -131315912947;\n r_1_3_0_2_2[1] = r_1_3_0_2_2_1;\n }\n r_1_3_0_2.s_2 = r_1_3_0_2_2;\n }\n r_1_3_0[2] = r_1_3_0_2;\n }\n {\n S_6c7af139 memory r_1_3_0_3;\n {\n S_71a4881b memory r_1_3_0_3_0;\n {\n bool r_1_3_0_3_0_0 = false;\n r_1_3_0_3_0.s_0 = r_1_3_0_3_0_0;\n }\n {\n string memory r_1_3_0_3_0_1 = unicode\"Moo é🚀\";\n r_1_3_0_3_0.s_1 = r_1_3_0_3_0_1;\n }\n {\n S_7e54c7ee memory r_1_3_0_3_0_2;\n {\n S_d29e61bf memory r_1_3_0_3_0_2_0;\n {\n address[3] memory r_1_3_0_3_0_2_0_0;\n {\n address r_1_3_0_3_0_2_0_0_0 = 0x1746211F458690A6A4b71154637876b917cEe918;\n r_1_3_0_3_0_2_0_0[0] = r_1_3_0_3_0_2_0_0_0;\n }\n {\n address r_1_3_0_3_0_2_0_0_1 = 0x31de4CD09EC9715267CC84c6A1C8D7E9FDf8fe20;\n r_1_3_0_3_0_2_0_0[1] = r_1_3_0_3_0_2_0_0_1;\n }\n {\n address r_1_3_0_3_0_2_0_0_2 = 0xd4dDe6bD2e4ac31717510c2Aee22734b007bF148;\n r_1_3_0_3_0_2_0_0[2] = r_1_3_0_3_0_2_0_0_2;\n }\n r_1_3_0_3_0_2_0.s_0 = r_1_3_0_3_0_2_0_0;\n }\n {\n bytes22 r_1_3_0_3_0_2_0_1 = bytes22(0x54d4138d9f36bab4954ad00b8593bb8345281f7fd842);\n r_1_3_0_3_0_2_0.s_1 = r_1_3_0_3_0_2_0_1;\n }\n r_1_3_0_3_0_2.s_0 = r_1_3_0_3_0_2_0;\n }\n {\n bytes8 r_1_3_0_3_0_2_1 = bytes8(0xb1ebd4df3f415559);\n r_1_3_0_3_0_2.s_1 = r_1_3_0_3_0_2_1;\n }\n {\n S_a217dd34 memory r_1_3_0_3_0_2_2;\n {\n int128 r_1_3_0_3_0_2_2_0 = -4795633902205635648984968202052634112;\n r_1_3_0_3_0_2_2.s_0 = r_1_3_0_3_0_2_2_0;\n }\n {\n bool r_1_3_0_3_0_2_2_1 = true;\n r_1_3_0_3_0_2_2.s_1 = r_1_3_0_3_0_2_2_1;\n }\n {\n S_061dfc07 memory r_1_3_0_3_0_2_2_2;\n {\n string memory r_1_3_0_3_0_2_2_2_0 = unicode\"Moo é🚀oooo🚀 o éM ééééoM🚀M oMMé🚀🚀 o🚀oooéMMM oo\";\n r_1_3_0_3_0_2_2_2.s_0 = r_1_3_0_3_0_2_2_2_0;\n }\n {\n string memory r_1_3_0_3_0_2_2_2_1 = unicode\"Moo é🚀o🚀o\";\n r_1_3_0_3_0_2_2_2.s_1 = r_1_3_0_3_0_2_2_2_1;\n }\n {\n string memory r_1_3_0_3_0_2_2_2_2 = unicode\"Moo é🚀\";\n r_1_3_0_3_0_2_2_2.s_2 = r_1_3_0_3_0_2_2_2_2;\n }\n r_1_3_0_3_0_2_2.s_2 = r_1_3_0_3_0_2_2_2;\n }\n {\n address r_1_3_0_3_0_2_2_3 = 0x302B699c9b23359bD795dF80665031799E9848C9;\n r_1_3_0_3_0_2_2.s_3 = r_1_3_0_3_0_2_2_3;\n }\n {\n string memory r_1_3_0_3_0_2_2_4 = unicode\"Moo é🚀M MMMé🚀oo 🚀o🚀MoM M 🚀\";\n r_1_3_0_3_0_2_2.s_4 = r_1_3_0_3_0_2_2_4;\n }\n r_1_3_0_3_0_2.s_2 = r_1_3_0_3_0_2_2;\n }\n r_1_3_0_3_0.s_2 = r_1_3_0_3_0_2;\n }\n {\n address r_1_3_0_3_0_3 = 0xF5E84cF41CC6e5b38C5759E307f5966089B25e66;\n r_1_3_0_3_0.s_3 = r_1_3_0_3_0_3;\n }\n {\n bytes7 r_1_3_0_3_0_4 = bytes7(0xbb72b251fe9700);\n r_1_3_0_3_0.s_4 = r_1_3_0_3_0_4;\n }\n r_1_3_0_3.s_0 = r_1_3_0_3_0;\n }\n {\n string memory r_1_3_0_3_1 = unicode\"Moo é🚀é🚀 oééMéoooo o🚀oéM 🚀 🚀\";\n r_1_3_0_3.s_1 = r_1_3_0_3_1;\n }\n {\n int40[2] memory r_1_3_0_3_2;\n {\n int40 r_1_3_0_3_2_0 = -222159116766;\n r_1_3_0_3_2[0] = r_1_3_0_3_2_0;\n }\n {\n int40 r_1_3_0_3_2_1 = -29436146639;\n r_1_3_0_3_2[1] = r_1_3_0_3_2_1;\n }\n r_1_3_0_3.s_2 = r_1_3_0_3_2;\n }\n r_1_3_0[3] = r_1_3_0_3;\n }\n r_1_3[0] = r_1_3_0;\n }\n r_1[3] = r_1_3;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n address r_3 = 0x5FEa7a766a6f18b075f51b24a578EB3156663f5b;\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000072a98a070c21be46645eb52e8cb3a06d67e6f464e16d767c709174fdb3b814b795d2e6830000000000000000000000000000000000000000000000000000000000000000000000000000001f69052dde0e6941000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005fea7a766a6f18b075f51b24a578eb3156663f5b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000002bc000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000540ffffffffffffffffffffffffffffffffffffffffffffffffffffffc20013b1920000000000000000000000000000000000000000000000000000007a71322247000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000f7ff3be34346b75ffffe0d5dc0225afdb212dd25368a7df30c39670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a80f09f9a80f09f9a806f6f206ff09f9a80f09f9a80206fc3a96ff09f9a80206fc3a94d4d6f4d6f6fc3a96f4df09f9a80f09f9a806f4d4df09f9a80f09f9a80f09f9a80f09f9a806f20000000000000000000000000000000000000000000000000000077b2c3b055786ff7a936686c125e84cdb3a3c8760000000000000000000000000d6b791045bdfb317a3b5946b4756b097ec3986b000000000000000000000000c12f0c8d22b046d909c69bc89f21c531c5746163608e571f1d7724d085dae45ac249071d05747dba741d000000000000000000005cb7199b7b95e3e900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0ffffffffffffffffffffffffffffffffda4db590529ed379681ee66b9fae5ce3000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000087b4709afae80773735280825b347d9971ecb69100000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000674d6f6f20c3a9f09f9a806f6ff09f9a80206f4df09f9a804d6ff09f9a80204d6f6ff09f9a804df09f9a80c3a9206ff09f9a804dc3a94dc3a96f6fc3a94df09f9a804d4d6f4d20f09f9a806f204df09f9a8020f09f9a80206f204d4df09f9a80f09f9a80206fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000624d6f6f20c3a9f09f9a806ff09f9a80c3a96f4d6f20c3a9c3a9f09f9a806f6f6fc3a9f09f9a804d6ff09f9a8020c3a9f09f9a804d4d4d4dc3a96f4df09f9a806f6ff09f9a806f6f20f09f9a804d6fc3a920206f6f6f20f09f9a80f09f9a80f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a80f09f9a804df09f9a806ff09f9a806f4dc3a9f09f9a8020206f6f6f4d204d4df09f9a806f206f6f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a80f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a80f09f9a806f4d6f6f20f09f9a8020206f6f0000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000004c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffbb88710310ffffffffffffffffffffffffffffffffffffffffffffffffffffff95686b3b54000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000738eb7eb4664b050a29298068da94c056718ff1a749fb2c41b7b880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000264d6f6f20c3a9f09f9a806f20c3a96fc3a9c3a9c3a96f6f4d4df09f9a804d20f09f9a806f4d20000000000000000000000000000000000000000000000000000000000000000000000000000013ec2e2de547f48ad354ee4aed82c2b8c3e5e5560000000000000000000000003d0906dba7d38713b1184ea920bf0d2baacc07f20000000000000000000000004746b3d6de6140dc59dd9e9704b91f86858ae50073246ca93dd5735fbacb9107c823b7f8eb104af8f806000000000000000000005d3c845b5aa3442000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000007b27d2600402a6387aa3f6ec9a9fa95a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000006fc60d8c853d725e0906bdab3e09fe71d9ef467b0000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a80206ff09f9a80c3a9f09f9a806f4d000000000000000000000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a8020c3a96f206f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a80204d20f09f9a80c3a9c3a9c3a96f4d4d6f6f6ff09f9a804dc3a920f09f9a804d4d20c3a92020206ff09f9a806ff09f9a8020c3a94d6fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a80f09f9a806f206ff09f9a804d6f206f4dc3a9f09f9a80c3a9f09f9a80c3a9f09f9a806f4d6ff09f9a806f206fc3a96f206ff09f9a806f6f4d6f6fc3a9204d6fc3a9f09f9a806f20200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000005600000000000000000000000000000000000000000000000000000006f78a8d1acffffffffffffffffffffffffffffffffffffffffffffffffffffff8cb31109bb000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000dc1df1fe26e618d818543eeaeb4e43ad32cd66655325fa2502fdd10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000294d6f6f20c3a9f09f9a806fc3a9c3a96f204d6f20c3a94dc3a9c3a920202020f09f9a80c3a94d206f4d0000000000000000000000000000000000000000000000000000000000000000000000c3ddc93df8929dc89ea3286542c6cede3cbfc0c4000000000000000000000000718dd49145b4ae405af2cb6e56c091c4c10a802b0000000000000000000000007e03fb9e50c1e7219d7077f1d0ed28d54ffc832ee25599e0ec186c4f00d74a6c396bfbbab24c6082b16800000000000000000000b6c22be93fc4e47300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0ffffffffffffffffffffffffffffffffb2b63aa8a9b9a89562916cd39abdb362000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000e93bd7ea3ed7907837cd88f19d851ce440438b4b0000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000464d6f6f20c3a9f09f9a806fc3a9c3a96f4d6f6fc3a96fc3a96f6f6f6ff09f9a806f20f09f9a80c3a96f6fc3a96f206ff09f9a804df09f9a806f20f09f9a804d204dc3a96f6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a80f09f9a806ff09f9a806f4d6fc3a9c3a96f20c3a9c3a9c3a96f6f4df09f9a80f09f9a806f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f4d6f6f20c3a9f09f9a80f09f9a806f206f6f20f09f9a80f09f9a804d206f6f6f4d4d4d4df09f9a806f2020f09f9a804d6ff09f9a806ff09f9a804df09f9a806f6f6f20c3a94d6f6ff09f9a80f09f9a8020206f6f4df09f9a806ff09f9a80c3a9c3a920c3a9c3a9f09f9a80206f4d4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006e4d6f6f20c3a9f09f9a806fc3a9c3a94df09f9a806ff09f9a806f6f6f6f6fc3a9c3a96f4df09f9a80c3a9f09f9a80c3a94d4df09f9a80f09f9a806ff09f9a80f09f9a80c3a96ff09f9a80206ff09f9a806ff09f9a80206f6f2020f09f9a806f6ff09f9a806f4dc3a9c3a920c3a94d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a806fc3a96f6f6f206fc3a94d4df09f9a80c3a9206f6fc3a920f09f9a80f09f9a804d206f6f6f6f4d4d204df09f9a80c3a96ff09f9a80204d20f09f9a80f09f9a80c3a9204d4d6fc3a9206f6ff09f9a806f6f206ff09f9a804d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000460ffffffffffffffffffffffffffffffffffffffffffffffffffffffc76d5a2a47ffffffffffffffffffffffffffffffffffffffffffffffffffffffd7a2fbcb0d000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000ff958c5e3973110d2ec056910087a5654ae881ab0ef43618428a1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000004f099c8f6d99818636f5ad1eea5c9b133ef990480000000000000000000000009e9544ef65849969c0cc0ceb86233a7e09468970000000000000000000000000e13c2a64ee60dc0f94b985fb7bc91b158ee00559d2946b3810589dd01ef0d704dd434f8183d67cd8de0b00000000000000000000290c94382d81ad3c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000079afa5bc6cae5062853572445b6a4f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000090127d0d0261c4b20e2cc2085db10024101b31040000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a802020c3a94d6f6f6f6f204df09f9a80c3a94d6fc3a94df09f9a80c3a92020c3a9f09f9a804d6f6f6f6fc3a9c3a9f09f9a80c3a96f20c3a96f6f6fc3a9c3a96f4dc3a94d6f206f4d4d206ff09f9a80206f6f4d00000000000000000000000000000000000000000000000000000000000000000000001a4d6f6f20c3a9f09f9a8020f09f9a80c3a96f6f6f206ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a806f6fc3a9206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000b8000000000000000000000000000000000000000000000000000000000000010a000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000580ffffffffffffffffffffffffffffffffffffffffffffffffffffff8b9615e453ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6669d56e6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000a19b175b3399848d4473c4bbe5996af5c0e165d9578d256e7d3df900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a804d204d6ff09f9a80f09f9a804d4df09f9a804df09f9a80f09f9a8020c3a96ff09f9a804dc3a96fc3a96ff09f9a80c3a920f09f9a806f6f4d206f6f6f4d6f4d206f6f6f6f20c3a96f6f4d20f09f9a80200000000000000000000000000000000000005d636e181b8417a58326e34d561e4070fbd8e1780000000000000000000000003baa6bb0f96ef7ff900f931d00251758415f600e000000000000000000000000bf750a076e3c9035f4cfc383d8083dca34248c6f80aedb9fd3b8201fc59d17301d578348184d1bfcc3a600000000000000000000f53f134197ff0ba600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0ffffffffffffffffffffffffffffffffdc97ce3701a7168cfeaa3916d3c9fe33000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000025a029586837483b82dcc5dbe3630849bd6c78ba00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000664d6f6f20c3a9f09f9a804d20204dc3a96f20f09f9a8020c3a94d6f6f6ff09f9a80c3a9f09f9a804df09f9a806f6ff09f9a80f09f9a80c3a96f6f20c3a9f09f9a804d6f6f6f4df09f9a804d6f6f6f4df09f9a80c3a96f6f20c3a96f20c3a94d4dc3a9206fc3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a804d6f6f206f6f4d6f20f09f9a80f09f9a80206f20f09f9a806f6f6ff09f9a80f09f9a806f4d4d6ff09f9a8020206f6f0000000000000000000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a806f204df09f9a80f09f9a80c3a9206fc3a96f6ff09f9a806f6ff09f9a80206f204dc3a9206ff09f9a804d4d204df09f9a80c3a94dc3a96f6f206f6f4dc3a96ff09f9a806f4d4df09f9a8020c3a920204dc3a94dc3a94dc3a920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a80c3a94d6f6f4d6f6ff09f9a80f09f9a804df09f9a80c3a9f09f9a806ff09f9a806f6f4d206f20f09f9a804dc3a9c3a920c3a920f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a80c3a9c3a96ff09f9a80c3a9c3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000081a7dc160ffffffffffffffffffffffffffffffffffffffffffffffffffffff87e5422619000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000a4c2d29cd36d5b885bb649dcec0a663cb1de37b0d040e3305117e60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a806fc3a96f6fc3a9f09f9a804d00000000000000000000000000000000000000000000a4802f649bc5834de9dfeacc9766d4ff9207e408000000000000000000000000160909344d5c144b7f502d868c24a41f96e0fd530000000000000000000000008befd74625fbeb828f03f583fb8004cf836985c195841e588dafb0c7c847aeed0a0ad6710eff930f55ee000000000000000000005a4c00cd7a9721ca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000002fddad497796e5078b01986f9adac8a8000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000ebd39a65b78c03b3d2add73f4e8d2273c1db71060000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000354d6f6f20c3a9f09f9a8020f09f9a806ff09f9a80204df09f9a80f09f9a80c3a9204d20c3a9f09f9a80c3a94d4d206f20c3a9c3a94d000000000000000000000000000000000000000000000000000000000000000000000000000000000000434d6f6f20c3a9f09f9a80c3a96f4d202020f09f9a80f09f9a806f4d4d4d6f6f6f4d4df09f9a80c3a9c3a94d4d206f6f206f6f6f2020c3a9f09f9a80c3a96f4d4d6fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a804dc3a9c3a96f4d206ff09f9a806f4df09f9a806f6f6f4d20f09f9a804d204d6f204dc3a96f206f6fc3a9c3a9f09f9a806f6f4d00000000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a806ff09f9a806f20c3a9206f4df09f9a804d6fc3a9c3a9204d20f09f9a80f09f9a806f20c3a96f6fc3a94df09f9a80f09f9a804d206ff09f9a804d6f4d6fc3a96fc3a96f6ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a806f6fc3a9c3a96f4d20206ff09f9a804d20204d6f6fc3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000004e0ffffffffffffffffffffffffffffffffffffffffffffffffffffffce47b19fe800000000000000000000000000000000000000000000000000000044f1d3ba0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000dbfcf080a14358ecdd3dd8d30c698aa16e0845fe982f0841cc90a100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a804df09f9a804d20c3a96f204dc3a9206fc3a94dc3a9c3a9f09f9a80202020c3a9000000000000000000000000000000000000000000000000000000000000000000004d814fb71bcf5aad58b2205caecf2b8fce94446a000000000000000000000000c5b216cd7c4d9aa71696626656af3c3997543b94000000000000000000000000b4c8197664d834a78fa598544e57baf061024a8fda6b9c3f7d2fdd2a79dd85e5ab48059e8971ed48e2980000000000000000000096068b8ecef5bc6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0ffffffffffffffffffffffffffffffffda1287bbe2d17594db81f78c7d400c2f000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b0a6522b4ed9821a887f885e76c4087fa266787e0000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000624d6f6f20c3a9f09f9a806ff09f9a80f09f9a806f6f6f6f6f6ff09f9a80c3a96f6f4d4dc3a96f6ff09f9a802020f09f9a80f09f9a806ff09f9a80c3a920f09f9a80c3a96f6f6f4d206f6f4d204d204d4df09f9a806fc3a9c3a9204d6ff09f9a806f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000214d6f6f20c3a9f09f9a804df09f9a806fc3a9f09f9a804df09f9a80f09f9a80c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a806f4d6ff09f9a80204dc3a9c3a9f09f9a806f6ff09f9a80f09f9a806ff09f9a806ff09f9a804d6ff09f9a8020f09f9a80c3a9c3a90000000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a806f6f204dc3a9f09f9a80f09f9a8020204d204d00000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000460ffffffffffffffffffffffffffffffffffffffffffffffffffffffc425f9b68d0000000000000000000000000000000000000000000000000000000c5e831856000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001763d060b32aafa02a6f6ca499038a0e928477b841fdae2306fba300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a80c3a9f09f9a80c3a96f4d6f20c3a94d20f09f9a80f09f9a80f09f9a80c3a94d6f4d6f6f4dc3a96f6ff09f9a80f09f9a804d6f200000000000000000000000000000006167ec3f676b54f2842c038ed55c8fafa2df4196000000000000000000000000ede5094843deb0795e98c13c57c1b1d26e3b30bb000000000000000000000000368e4cc37e84485479462e3eb131f47f207331048eece1fc5d97366349413a277eda09d017d76df51293000000000000000000007641870d67c9cd2900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000006ab122306deb47ff08c2ed30d144e069000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000cc448419b619d7cc59d447f8c0b0fc5a3cc100f400000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a80f09f9a806fc3a96f4d6f6f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a806f6fc3a9f09f9a806f6fc3a96ff09f9a806f4d4d000000000000000000000000000000000000000000000000000000000000000000294d6f6f20c3a9f09f9a804d4d6f4d4d6f20f09f9a80f09f9a806fc3a96f6fc3a9c3a94d4d6f6f204d4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a804d4d6f2020f09f9a806f4d4dc3a96f4d6f4df09f9a804d6f6f4dc3a96ff09f9a804df09f9a804d6f206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000005c00000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000500ffffffffffffffffffffffffffffffffffffffffffffffffffffff9e7494da280000000000000000000000000000000000000000000000000000007a324bf5a7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000007581b289936f63c693753b2eb8d2322d55401feef76707081f98110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a80f09f9a80f09f9a806f6f4d4df09f9a804dc3a9c3a94d6f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000071d355de0dd118ff156df8517e39e2abbaba438f000000000000000000000000af35671f099b913fdd8ae97cf60b827c179bda34000000000000000000000000bc2472868d038a4b170ba6d333ce75c8025c376d91c7bf133651fdee8746dbcc8859d376ce10083b9b4d000000000000000000005eb60976e4fee44b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000006dde74ff966ff7ec6bee74c31dbfc08a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000007d84272a441212743f7fba0a6083e125f48d5edc0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a806f4d6fc3a920204dc3a96fc3a96fc3a920206f206fc3a96f20f09f9a80206f20204dc3a94d6f6f6f4d4d4d20204d4d4d6f6ff09f9a80c3a94d206f6f206f206f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a80f09f9a80c3a9f09f9a804d4d4d6f6f6f6ff09f9a80f09f9a804d20f09f9a806f6f6fc3a94d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a80206ff09f9a8020c3a96fc3a94df09f9a806f204dc3a96f4d6fc3a96f4d20f09f9a8020c3a94d6f4dc3a9c3a9f09f9a80c3a94d4d6f6f6f6f4dc3a94dc3a96f4d4d6f206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a806f6f6f4d4df09f9a806f4d6f20206fc3a9f09f9a806fc3a9f09f9a80c3a9f09f9a804d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a804d6f6f6f6f6ff09f9a8020206f6ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000004c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffb69577e196ffffffffffffffffffffffffffffffffffffffffffffffffffffffc18b124868000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000d44df1cf962948f082fe43ed2b01f49dcf99f3d01fa12715f2977000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a80f09f9a806f6f6f206f4dc3a9c3a920c3a90000000000000000000000000000000000ef39293a07717fcee87e558f66a69f22a90e716b000000000000000000000000d3238bc068d5469faae53fe61e3d28809caa273b0000000000000000000000001d670fe466711115efa20cb297d5c0421d859389958cb3ac8dc7bce8effc6ad24659ff19b9674d94e766000000000000000000008b04ef97822e828b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0ffffffffffffffffffffffffffffffffff5b57e3b43de2af095c035de668b387000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000ee59e04da840532e07d3059d3858fa7955b912040000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a806ff09f9a806ff09f9a806fc3a96f6f6f4df09f9a80c3a96f6fc3a9f09f9a80f09f9a8020f09f9a806f6f206f6f20f09f9a80f09f9a80f09f9a806f6f6f6f6fc3a96f206f4d6f4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a80c3a9f09f9a804d6ff09f9a806f20204dc3a96f6ff09f9a80f09f9a806f6f20f09f9a806fc3a96ff09f9a806f6f4d6f0000000000000000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a80f09f9a80f09f9a80206f4d206f4d204d6fc3a920f09f9a806fc3a96fc3a9f09f9a804d6ff09f9a80f09f9a80f09f9a80204d6f6fc3a96f6f4d6ff09f9a80f09f9a806f6f6f6f6f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80c3a96f4d6ff09f9a80c3a9f09f9a806fc3a900000000000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a80f09f9a8020c3a9f09f9a806ff09f9a80c3a9c3a96f6f6ff09f9a80c3a96f6f4d6f6fc3a96f204d206fc3a9f09f9a806ff09f9a806f6f4d4dc3a96f4d4dc3a9f09f9a8020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000001ea902716ffffffffffffffffffffffffffffffffffffffffffffffffffffffcf8e0b487e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000008e93fe3045ce3429ff3ef8592616fc2c252ccfa05e64ddf75b0de80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a806fc3a9c3a96f4d4d4dc3a96fc3a96f4d6ff09f9a80206f6ff09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000059d6f42db099ce0d55a6b7c4a983abdeb6497920000000000000000000000000a802b1028dca6c4dbf1e2c15e8979d874beb86b9000000000000000000000000db0bf0fed7b4f4ebb2841cd9a680525bb6a190cd701aeb0598026806cf2e547cbdff02a87709fc37b75900000000000000000000b64d9f88ff5e110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000001d788e4995dcc260f83e26597127c95000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000f968351013e54160e680d2312eee75b42509fca0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a4d6f6f20c3a9f09f9a806ff09f9a80c3a94dc3a94d204d2020c3a9c3a96ff09f9a804d206f6f6f6ff09f9a80f09f9a806f6f6f206ff09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a80206ff09f9a80c3a94df09f9a802020f09f9a80206f4df09f9a804df09f9a80c3a94dc3a94df09f9a806ff09f9a806f6f6f204d4d6f20c3a9204d6f6fc3a96fc3a9c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164d6f6f20c3a9f09f9a804dc3a94d204d20206f6fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a80c3a9c3a96f6f6f206fc3a9c3a96f4d4dc3a96f6f20f09f9a806f6f4df09f9a804d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000004c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffa19d5fdf4000000000000000000000000000000000000000000000000000000044ffe4cb34000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000002c240a608b92428c196a55861db5c15cf4989cbbbe2d06698156b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a804d206f6f6f206f4d4dc3a96f20f09f9a80f09f9a8000000000000000000000000000e8be8845fb6017cedb280dd3f6af7d03b747d95e0000000000000000000000004e5f05c11e461d34ba1ad53433a2f238a29f9afc000000000000000000000000716f35acab14ec52daa0dd6b036a74c2851c25692dcb459c57ae870b8188f72c18bf037001df04c455430000000000000000000011c71a1e5adf368200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0ffffffffffffffffffffffffffffffff9f0bf850b7af1176b228df9e0a3cc705000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f4558561cae05df23d50573b375e1b8f2610222f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a8020c3a920c3a9c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000624d6f6f20c3a9f09f9a80f09f9a804dc3a9c3a9f09f9a80f09f9a806f20c3a920c3a920c3a96fc3a96fc3a9f09f9a802020f09f9a804d6f4d6f6fc3a96ff09f9a806f6f6f206ff09f9a8020204d6ff09f9a806fc3a94dc3a9f09f9a80204df09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a804df09f9a806f6fc3a92020000000000000000000000000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a80c3a96f6fc3a96ff09f9a8020f09f9a80c3a96f6f4d4d6ff09f9a806f4dc3a96ff09f9a806fc3a96f6f4d6f6f6f6f2020f09f9a806f4dc3a96f4d4d4d206f6f6ff09f9a806f206f6f6f20c3a9206f000000000000000000000000000000000000000000000000000000000000000000000000000000284d6f6f20c3a9f09f9a804d20f09f9a80206f6ff09f9a80c3a9f09f9a80c3a96fc3a92020c3a94d4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000000000000000000ac00000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000004c00000000000000000000000000000000000000000000000000000000319e9730bffffffffffffffffffffffffffffffffffffffffffffffffffffffb17eec3437000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000002dd9b0b8ea3f36f15eada31de8493717073aa5dc086cdf87df18c200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000271a9f08b096f13f15615bf3abfba63a383522800000000000000000000000057caa879d4eec37000334f29ddcfc6eace9c905400000000000000000000000070e88a662cb1688ad5afe3d51701ace53c89f5b2cdaa21752004534fafae55be67ecb8fd35fa4f92272c00000000000000000000f70538f14abc419f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0ffffffffffffffffffffffffffffffffc7bfceb7708372a5369c6d9e3e99358e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000811d981e7dbe6f80727285343906aa50be657ae20000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a80c3a96f6f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000744d6f6f20c3a9f09f9a8020f09f9a80f09f9a80204d6f6ff09f9a80f09f9a804dc3a9206f204dc3a9f09f9a80206f4d206f206ff09f9a80f09f9a804df09f9a804d6fc3a9c3a94d206ff09f9a8020c3a9f09f9a806f6f6f4d4df09f9a806f204d4df09f9a80f09f9a80c3a920f09f9a80f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4d6f6f20c3a9f09f9a8020206f20c3a920c3a9f09f9a804d6f204d000000000000000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a806f206f6fc3a96f204d6f4df09f9a802020f09f9a80c3a96f206f4df09f9a80f09f9a8020c3a96f20206f6f6f6f4d6f6f20c3a94d6ff09f9a806f6ff09f9a80c3a96ff09f9a80f09f9a806f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a806ff09f9a806ff09f9a806f4d200000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000065c6aba59dffffffffffffffffffffffffffffffffffffffffffffffffffffffcf516f36b9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001200000000000000000000000009423a01efec6b7af47fd029575a2d0f992617c7e6101e0fe89074f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000584d6f6f20c3a9f09f9a80f09f9a804d4dc3a96fc3a9204d6f6f204df09f9a80206f4d6fc3a96f6ff09f9a8020206fc3a94dc3a96ff09f9a8020204d6fc3a96f6fc3a96f6f6fc3a96f6f6f6fc3a9f09f9a80f09f9a80206f200000000000000000000000000000000000000000e14cc5dbf416a76d7a606b0c4ef726c01425dbe1000000000000000000000000d58a1d35359a2860592d29ba3dfa0b9fbd52f76a000000000000000000000000bc7b421a3c1f8e0283007835e4f809e7423f0816df78fb020870422a9dfd196ef4cdc059e18bc6c6e3c20000000000000000000037104cd607a2521500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000004e1c49ecd024b4b4a23bf565e52affba000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000028ff38296fd042aec5e9672cf44a8a1a17305f180000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000444d6f6f20c3a9f09f9a80f09f9a804d6f6f6ff09f9a804d4d4d204d6f20f09f9a806f4d6f6f4d6ff09f9a804d4d6fc3a96f6f6f4d206f6ff09f9a804d4df09f9a80c3a94d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000644d6f6f20c3a9f09f9a806fc3a920c3a9c3a9f09f9a806f6fc3a96f6f6f4d6f6f6f2020c3a9f09f9a80c3a9c3a96f4df09f9a806f6fc3a96f20c3a9f09f9a80f09f9a80c3a9206fc3a9f09f9a80f09f9a80c3a9f09f9a80202020f09f9a806ff09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000204d6f6f20c3a9f09f9a806ff09f9a80c3a920c3a9f09f9a806fc3a96f6f6f4d4d000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000002005595b45ffffffffffffffffffffffffffffffffffffffffffffffffffffffe16cf62f0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000b41c0c7ce3d4c72427158fe122eaaf1fda056f75f67b8591c9bece00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a806f6f6f00000000000000000000000000000000000000000000000000000000000000b5405956da2fa7849f979afa97abfd706b942582000000000000000000000000e0470f38ea39ecd0c79b5234ee861cabe45389460000000000000000000000008365a9e8b96fc7c5e0b65bf254c8c669ae4ffb49f937c889573cb774d0ab3237361b9f3509b6f7d6b7d8000000000000000000005cabbbc7466a93ef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0ffffffffffffffffffffffffffffffff962b852e5b4cf3f8c46b3b16e6ada6e5000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000987188ac2b0b4bde48bf19c9d9cbaa7c0a4b0cc90000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000b4d6f6f20c3a9f09f9a806f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a80c3a94d4d6f6f6f20f09f9a804d6fc3a96f4d4d6f4d20c3a9c3a92020f09f9a806fc3a92000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000494d6f6f20c3a9f09f9a80c3a94df09f9a804d4df09f9a804d6fc3a94d4d6fc3a94d4d6f6fc3a96ff09f9a80c3a9c3a9c3a94d6f20c3a96f4d6ff09f9a80204d204df09f9a80206f6f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a80c3a94dc3a94d4d4d6f6ff09f9a80f09f9a80c3a9204dc3a9c3a920c3a96f4d4d6f6f4d4d20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000480ffffffffffffffffffffffffffffffffffffffffffffffffffffffcc4648e622fffffffffffffffffffffffffffffffffffffffffffffffffffffff925780c31000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000f5e84cf41cc6e5b38c5759e307f5966089b25e66bb72b251fe970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000001746211f458690a6a4b71154637876b917cee91800000000000000000000000031de4cd09ec9715267cc84c6a1c8d7e9fdf8fe20000000000000000000000000d4dde6bd2e4ac31717510c2aee22734b007bf14854d4138d9f36bab4954ad00b8593bb8345281f7fd84200000000000000000000b1ebd4df3f41555900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0fffffffffffffffffffffffffffffffffc6464fe617979d3c441c2ab0098fa00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000302b699c9b23359bd795df80665031799e9848c90000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000474d6f6f20c3a9f09f9a806f6f6f6ff09f9a80206f20c3a94d20c3a9c3a9c3a9c3a96f4df09f9a804d206f4d4dc3a9f09f9a80f09f9a80206ff09f9a806f6f6fc3a94d4d4d206f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a806ff09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a804d204d4d4dc3a9f09f9a806f6f20f09f9a806ff09f9a804d6f4d204d20f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000324d6f6f20c3a9f09f9a80c3a9f09f9a8020206fc3a9c3a94dc3a96f6f6f6f206ff09f9a806fc3a94d20f09f9a8020f09f9a800000000000000000000000000000" + }, + { + "name": "random-(address,string,address[],uint216,(string,bool[],uint248,(bytes22[4],int192,(address[1],(bool[],uint152,uint200[4],bool)[2][3],(bool,bytes16,string)[3],bool)),bool))", + "type": "(address,string,address[],uint216,(string,bool[],uint248,(bytes22[4],int192,(address[1],(bool[],uint152,uint200[4],bool)[2][3],(bool,bytes16,string)[3],bool)),bool))", + "value": [ + "0x6cBD005ee0A8425cCd2720779C28e4bF235DEfB5", + "Moo é🚀", + [], + "11748385545372560794270479845558321214969968737676877191283220214", + [ + "Moo é🚀🚀oéééoM é🚀oMM🚀🚀🚀🚀MéM oé o oo🚀 Mo o🚀Mo🚀ooooo ooéo", + [true, true, false], + "42798344027375486566309803589792121734218987083436135956714065043486133841", + [ + [ + "0x022b6e213c8bbf46f464cf4541e2603ec5cf2e0d072e", + "0x7e1860a4e981e553c7de13e8aafbfec5561b11284c77", + "0x2eca0be4b013471a8d7f75fe2a7d713de7f43c5d1bf1", + "0x6deb4610c2e2e36b94127cba65fdaad65440d30bb37e" + ], + "-3131804874836675365962097563578778409409749354739299636533", + [ + ["0x9847ccc4b036E5E1a3a17D9A241967070F1729D6"], + [ + [ + [ + [true, true], + "4811453609733051664779899168340664302657075108", + [ + "1255876989347247720512753317592810888633969462573765865289066", + "1216622046093212162556165353105136543829942240365526103198345", + "215370811753775232602741063242849734162701353739936183888856", + "823015402238356114551734744716502105098908164647589255174139" + ], + false + ], + [ + [true, false], + "530325941254951113908384610582309675093801642", + [ + "196042535101618852734036353557217249159043327150091709761309", + "1000209630002823198737333958941580455793261098313221318603828", + "1582770379972078012417279690170824077476191267860996266217206", + "211597892108955715665469907952604432063378711254720764667943" + ], + false + ] + ], + [ + [ + [true, false, false, true], + "5053728353304829204118609454767263873026688962", + [ + "90375430785740783783606084355710270838721625541169515256294", + "1459464563704860124848157806951393799835345881605069117339421", + "1156530863991771385014859185910638992638242119589151335655288", + "792577780643147984667344473730078347439978460791577387093752" + ], + true + ], + [ + [true, true, false], + "1558583866370296963842801948735210104079872435", + [ + "385890301499052288002246511334633283575008873478473694202379", + "881205930425664847517173055767245270814826901485695592269910", + "1396060809216236462681626474919130849292285900600534037022135", + "924212449694162623963088950249305642992960293579483594110002" + ], + true + ] + ], + [ + [ + [true], + "800623553434897416430228128929249126881203010", + [ + "30901650246894572776489467184391001419425502581061004164418", + "1062494469775336628263021049639132773774175963964112123657952", + "1113746163374984106690563726112219051946637495549803675531444", + "1477786620762075758101193552224821725408193907197507359810796" + ], + false + ], + [ + [true, false], + "5478275331287724787396752631168129522699177847", + [ + "1312533193472735932299195424870320396199288619705910186412010", + "1065440061942792842541869246075224490586793832314198097720434", + "1584766068860971564724520662839324463036553036998237229453177", + "1403318133503285320150782127906795167827937485299277858808891" + ], + false + ] + ] + ], + [ + [false, "0x903af01d24ef4bde2b75a665c63cdef2", "Moo é🚀"], + [ + true, + "0x34a54e0a13d649be641a02b3d421f257", + "Moo é🚀ooéMéM 🚀🚀oé🚀oo🚀Moo éooMooMé🚀🚀oo MoM🚀🚀MM é oéoM🚀" + ], + [ + false, + "0x02ec8fce4f13af60191fb10a45813fcc", + "Moo é🚀 ooo éoMéé oMoooM🚀M🚀 🚀" + ] + ], + false + ] + ], + true + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x6cBD005ee0A8425cCd2720779C28e4bF235DEfB5" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "array", + "value": [] + }, + { + "type": "number", + "value": "11748385545372560794270479845558321214969968737676877191283220214" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oéééoM é🚀oMM🚀🚀🚀🚀MéM oé o oo🚀 Mo o🚀Mo🚀ooooo ooéo" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "number", + "value": "42798344027375486566309803589792121734218987083436135956714065043486133841" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x022b6e213c8bbf46f464cf4541e2603ec5cf2e0d072e" + }, + { + "type": "hexstring", + "value": "0x7e1860a4e981e553c7de13e8aafbfec5561b11284c77" + }, + { + "type": "hexstring", + "value": "0x2eca0be4b013471a8d7f75fe2a7d713de7f43c5d1bf1" + }, + { + "type": "hexstring", + "value": "0x6deb4610c2e2e36b94127cba65fdaad65440d30bb37e" + } + ] + }, + { + "type": "number", + "value": "-3131804874836675365962097563578778409409749354739299636533" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x9847ccc4b036E5E1a3a17D9A241967070F1729D6" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "number", + "value": "4811453609733051664779899168340664302657075108" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1255876989347247720512753317592810888633969462573765865289066" + }, + { + "type": "number", + "value": "1216622046093212162556165353105136543829942240365526103198345" + }, + { + "type": "number", + "value": "215370811753775232602741063242849734162701353739936183888856" + }, + { + "type": "number", + "value": "823015402238356114551734744716502105098908164647589255174139" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "number", + "value": "530325941254951113908384610582309675093801642" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "196042535101618852734036353557217249159043327150091709761309" + }, + { + "type": "number", + "value": "1000209630002823198737333958941580455793261098313221318603828" + }, + { + "type": "number", + "value": "1582770379972078012417279690170824077476191267860996266217206" + }, + { + "type": "number", + "value": "211597892108955715665469907952604432063378711254720764667943" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "number", + "value": "5053728353304829204118609454767263873026688962" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "90375430785740783783606084355710270838721625541169515256294" + }, + { + "type": "number", + "value": "1459464563704860124848157806951393799835345881605069117339421" + }, + { + "type": "number", + "value": "1156530863991771385014859185910638992638242119589151335655288" + }, + { + "type": "number", + "value": "792577780643147984667344473730078347439978460791577387093752" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "number", + "value": "1558583866370296963842801948735210104079872435" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "385890301499052288002246511334633283575008873478473694202379" + }, + { + "type": "number", + "value": "881205930425664847517173055767245270814826901485695592269910" + }, + { + "type": "number", + "value": "1396060809216236462681626474919130849292285900600534037022135" + }, + { + "type": "number", + "value": "924212449694162623963088950249305642992960293579483594110002" + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "number", + "value": "800623553434897416430228128929249126881203010" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "30901650246894572776489467184391001419425502581061004164418" + }, + { + "type": "number", + "value": "1062494469775336628263021049639132773774175963964112123657952" + }, + { + "type": "number", + "value": "1113746163374984106690563726112219051946637495549803675531444" + }, + { + "type": "number", + "value": "1477786620762075758101193552224821725408193907197507359810796" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "number", + "value": "5478275331287724787396752631168129522699177847" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1312533193472735932299195424870320396199288619705910186412010" + }, + { + "type": "number", + "value": "1065440061942792842541869246075224490586793832314198097720434" + }, + { + "type": "number", + "value": "1584766068860971564724520662839324463036553036998237229453177" + }, + { + "type": "number", + "value": "1403318133503285320150782127906795167827937485299277858808891" + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x903af01d24ef4bde2b75a665c63cdef2" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x34a54e0a13d649be641a02b3d421f257" + }, + { + "type": "string", + "value": "Moo é🚀ooéMéM 🚀🚀oé🚀oo🚀Moo éooMooMé🚀🚀oo MoM🚀🚀MM é oéoM🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x02ec8fce4f13af60191fb10a45813fcc" + }, + { + "type": "string", + "value": "Moo é🚀 ooo éoMéé oMoooM🚀M🚀 🚀" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50611283806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061109a565b60405180910390f35b610056610bb5565b61005e610bb5565b736cbd005ee0a8425ccd2720779c28e4bf235defb58152604080518082018252600a8152689adede418753e13f3560b71b602080830191909152808401919091528151600081529081018252908201527a1c8f09cc519508c73607b76869bda69813c394080b0dd56be41ef660608201526100d7610bfb565b600060405180608001604052806060815260200161116660609139825250604080516003808252608082019092526000916020820160608036833701905050905060006001905080826000815181106101325761013261114f565b60200260200101901515908115158152505050600060019050808260018151811061015f5761015f61114f565b60200260200101901515908115158152505050600080826002815181106101885761018861114f565b911515602092830291909101820152830191909152507e183916cf1e477ad5322cc54c96edc8f93993805187fb92729ba01b5b53ce5160408201526101cb610c39565b6101d3610c60565b750115b7109e45dfa37a3267a2a0f1301f62e79706839760511b8152757e1860a4e981e553c7de13e8aafbfec5561b11284c7760501b602080830191909152752eca0be4b013471a8d7f75fe2a7d713de7f43c5d1bf160501b60408301527536f5a308617171b5ca093e5d32fed56b2a206985d9bf60511b6060830152908252777fb9918c61337df89db53a6654016c3c10d08b953d19d5341990820152610279610c7e565b610281610cab565b739847ccc4b036e5e1a3a17d9a241967070f1729d6815281526102a2610cc9565b6102aa610cf6565b6102b2610d23565b60408051600280825260608201835260009260208301908036833701905050905060006001905080826000815181106102ed576102ed61114f565b60200260200101901515908115158152505050600060019050808260018151811061031a5761031a61114f565b9115156020928302919091018201529183525072d7c0c757fd7e7fe5ea92584679f412ec07f7a49082015261034d610c60565b78c8129f91581a9c1cb0df003fe489e40f1bf946a0ce3ff4b56a815278c1d1aed6516ee06fd0aaac5e40528cf697f77c0b9204b98a89602082015278224f80313d494fde47af1e53f6a0b607141a86fa48cb302bd860408083019190915278831d29baf70b013316f49106c1a61c6957a3c84792179dd7fb6060808401919091529083019190915260009082015281526103e5610d23565b60408051600280825260608201835260009260208301908036833701905050905060006001905080826000815181106104205761042061114f565b60200260200101901515908115158152505050600080826001815181106104495761044961114f565b911515602092830291909101820152918352507217c7d7debed35dd7c909436284e99c75853aaa9082015261047c610c60565b781f3b3b917f22516ab95053b829d5e1229065648ad250c4c71d8152789f57b3c9c413340b510ab1539c9eb9be3166297692e6ff743460208083019190915278fc265dcfc4c203dac647eb4f56ce530ef990808512adbd4ef66040808401919091527821b5a112c23aff1f00b15f454eec186f3e5da7de6c7307682760608085019190915290840192909252600091830191909152820152815261051e610cf6565b610526610d23565b60408051600480825260a082019092526000916020820160808036833701905050905060006001905080826000815181106105635761056361114f565b602002602001019015159081151581525050506000808260018151811061058c5761058c61114f565b60200260200101901515908115158152505050600080826002815181106105b5576105b561114f565b6020026020010190151590811515815250505060006001905080826003815181106105e2576105e261114f565b9115156020928302919091018201529183525072e29df4d322db4ef2b62fdffce91b5134b707c290820152610615610c60565b780e65cb8610420b6569855fbf8b55075e54e1f5501c4fbad9e6815278e8819105801db4b41821d6c9efa671c1856c720a4ed190371d602082015278b83ef99f68de63c7c369aaaa31b6bb1fb6df8711dbb3a22778604080830191909152787e43d2221b2fdfe116fd854961e5ef98590fade142390e4ef86060808401919091529083019190915260019082015281526106ad610d23565b604080516003808252608082019092526000916020820160608036833701905050905060006001905080826000815181106106ea576106ea61114f565b6020026020010190151590811515815250505060006001905080826001815181106107175761071761114f565b60200260200101901515908115158152505050600080826002815181106107405761074061114f565b911515602092830291909101820152918352507245e3aa5354238f65341622d23406b573e571b390820152610773610c60565b783d79d2bbd041d408b76f2533e08d6b6ccf95688557a6fe4a0b8152788c625b312a69b7e0eb99bfc35d394c3aebdbd08a804f47885660208083019190915278de67c2f00412b29ee7afbca82df9457593d0d39a2dcda1c5b760408084019190915278933c4c342ba06abccc33286d7da432d272a807a2e0edf83432606080850191909152908401929092526001918301919091528281019190915282015261081a610cf6565b610822610d23565b60408051600180825281830190925260009160208083019080368337019050509050600060019050808260008151811061085e5761085e61114f565b911515602092830291909101820152918352507223e6b5291632c4aa035c7ee36ea721fa18934290820152610891610c60565b7804ec444843757f030b2b4588d1b4d1ae1c6d52390c29e1fd42815278a943dfdb7bcfbf7b656497f18e4ffc5a3d1d2864adb976fee0602082015278b16e1481781fc1a400c7950e6a4230f006334b779d7aac38b460408083019190915278eb6ccc3904ef32e887c4b585964643bf1a9525d2848db124ec606080840191909152908301919091526000908201528152610929610d23565b60408051600280825260608201835260009260208301908036833701905050905060006001905080826000815181106109645761096461114f565b602002602001019015159081151581525050506000808260018151811061098d5761098d61114f565b9115156020928302919091018201529183525072f5a78442ac7e4e9a5ddcc1e222adadce398f77908201526109c0610c60565b78d1193df056aa9c01a8936375b6d3afe4a40df38136dcbf07ea815278a9bc01464775b2c2e18182184566c1b69baeb5fbf98024f47260208083019190915278fc77c1c69a67982f5f94fa30909fe169e7c7798b8ad7e48f7960408084019190915278df8fbcf042914b003e5a14a1988556f9bdf6e9fdea156b243b6060808501919091528482019390935260009284019290925283810192909252830191909152820152610a6d610d43565b604080516060808201835260008083528284018281526f481d780e9277a5ef15bad332e31e6f7960811b60208086019190915285518087018752600a8152689adede418753e13f3560b71b818301529091529285528351808301855280850192909252600182526f34a54e0a13d649be641a02b3d421f25760801b82840152835160808101909452605b808552919390929091906111f39083013960408301525080826001602002015250610b3a6040805160608082018352600080835260208301529181019190915290565b60008082526ebb23f393c4ebd80647ec4291604ff360821b6020808401919091526040805160608101909152602d80825290916111c690830139604083015250808260026020020152506040808301919091526000606080840191909152908301919091528201526001608080830191909152820152919050565b6040518060a0016040528060006001600160a01b03168152602001606081526020016060815260200160006001600160d81b03168152602001610bf6610bfb565b905290565b6040518060a00160405280606081526020016060815260200160006001600160f81b03168152602001610c2c610c39565b8152600060209091015290565b6040518060600160405280610c4c610c60565b815260006020820152604001610bf6610c7e565b60405180608001604052806004906020820280368337509192915050565b6040518060800160405280610c91610cab565b8152602001610c9e610cc9565b8152602001610c2c610d43565b60405180602001604052806001906020820280368337509192915050565b60405180606001604052806003905b610ce0610cf6565b815260200190600190039081610cd85790505090565b60405180604001604052806002905b610d0d610d23565b815260200190600190039081610d055790505090565b604080516080810182526060815260006020820152908101610c2c610c60565b60405180606001604052806003905b60408051606080820183526000808352602083015291810191909152815260200190600190039081610d525790505090565b6000815180845260005b81811015610daa57602081850181015186830182015201610d8e565b81811115610dbc576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610e03578151151587529582019590820190600101610de5565b509495945050505050565b60008260608082018460005b6003811015610e7957848303885281518051151584526020808201516fffffffffffffffffffffffffffffffff191681860152604091820151918501869052610e6586860183610d84565b998101999450929092019150600101610e1a565b50909695505050505050565b6000815160a08452610e9a60a0850182610d84565b905060208084015185830382870152610eb38382610dd1565b925050604060018060f81b038186015116818701526060850151868403606088015260c0840181518586905060005b6004811015610f0c57825169ffffffffffffffffffff191682529186019190860190600101610ee2565b5050508184015160170b60808601529082015160c060a0860152805190916101408601906000905b6001821015610f5c5783516001600160a01b0316815292860192600191909101908601610f34565b505082850151608060e088015291506101a086019060005b60038110156110425787830361013f1901825283518387810160005b600281101561102d5786820383528351805160e08452610fb360e0850182610dd1565b905072ffffffffffffffffffffffffffffffffffffff8d830151168d8501528b8201518c850160005b60048110156110025782516001600160c81b03168252918f0191908f0190600101610fdc565b5050506060820151915061101a60c085018315159052565b948c0194938c0193925050600101610f90565b50958901959450505090860190600101610f74565b50508284015186820360bf190161010088015294506110618186610e0e565b94505050606081015191505061107c61012084018215159052565b5060808401519150611092608086018315159052565b949350505050565b6000602080835260018060a01b0380855116828501528185015160a060408601526110c860c0860182610d84565b6040870151601f1987830381016060890152815180845291860193506000929091908601905b80841015611110578451861682529386019360019390930192908601906110ee565b5060608901516001600160d81b03811660808a0152955060808901519550818882030160a08901526111428187610e85565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a806fc3a9c3a9c3a96f4d2020c3a9f09f9a806f4d4df09f9a80f09f9a80f09f9a80f09f9a804dc3a94d20206fc3a92020206f206f6ff09f9a80204d6f206ff09f9a804d6ff09f9a806f6f6f6f6f206f6fc3a96f4d6f6f20c3a9f09f9a80206f6f6f2020c3a96f4dc3a9c3a9206f4d6f6f6f4df09f9a804df09f9a8020f09f9a804d6f6f20c3a9f09f9a806f6fc3a94dc3a94d20f09f9a80f09f9a806fc3a9f09f9a806f6ff09f9a804d6f6f20c3a96f6f4d6f6f4dc3a9f09f9a80f09f9a806f6f204d6f4df09f9a80f09f9a804d4d20c3a9206fc3a96f4df09f9a80a2646970667358221220334ea6a503b697d32847559d0d3a16fea3234584bc72d51fe98c783ecc820b1764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_574d9217 {\n bool[] s_0;\n uint152 s_1;\n uint200[4] s_2;\n bool s_3;\n }\n\n struct S_cbb9bf37 {\n bool s_0;\n bytes16 s_1;\n string s_2;\n }\n\n struct S_7142d7f8 {\n address[1] s_0;\n S_574d9217[2][3] s_1;\n S_cbb9bf37[3] s_2;\n bool s_3;\n }\n\n struct S_d046c2d5 {\n bytes22[4] s_0;\n int192 s_1;\n S_7142d7f8 s_2;\n }\n\n struct S_f1926b33 {\n string s_0;\n bool[] s_1;\n uint248 s_2;\n S_d046c2d5 s_3;\n bool s_4;\n }\n\n struct S_7cb2dbe3 {\n address s_0;\n string s_1;\n address[] s_2;\n uint216 s_3;\n S_f1926b33 s_4;\n }\n\n function test () public pure returns (S_7cb2dbe3 memory) {\n S_7cb2dbe3 memory r;\n {\n address r_0 = 0x6cBD005ee0A8425cCd2720779C28e4bF235DEfB5;\n r.s_0 = r_0;\n }\n {\n string memory r_1 = unicode\"Moo é🚀\";\n r.s_1 = r_1;\n }\n {\n address[] memory r_2 = new address[](0);\n r.s_2 = r_2;\n }\n {\n uint216 r_3 = 11748385545372560794270479845558321214969968737676877191283220214;\n r.s_3 = r_3;\n }\n {\n S_f1926b33 memory r_4;\n {\n string memory r_4_0 = unicode\"Moo é🚀🚀oéééoM é🚀oMM🚀🚀🚀🚀MéM oé o oo🚀 Mo o🚀Mo🚀ooooo ooéo\";\n r_4.s_0 = r_4_0;\n }\n {\n bool[] memory r_4_1 = new bool[](3);\n {\n bool r_4_1_0 = true;\n r_4_1[0] = r_4_1_0;\n }\n {\n bool r_4_1_1 = true;\n r_4_1[1] = r_4_1_1;\n }\n {\n bool r_4_1_2 = false;\n r_4_1[2] = r_4_1_2;\n }\n r_4.s_1 = r_4_1;\n }\n {\n uint248 r_4_2 = 42798344027375486566309803589792121734218987083436135956714065043486133841;\n r_4.s_2 = r_4_2;\n }\n {\n S_d046c2d5 memory r_4_3;\n {\n bytes22[4] memory r_4_3_0;\n {\n bytes22 r_4_3_0_0 = bytes22(0x022b6e213c8bbf46f464cf4541e2603ec5cf2e0d072e);\n r_4_3_0[0] = r_4_3_0_0;\n }\n {\n bytes22 r_4_3_0_1 = bytes22(0x7e1860a4e981e553c7de13e8aafbfec5561b11284c77);\n r_4_3_0[1] = r_4_3_0_1;\n }\n {\n bytes22 r_4_3_0_2 = bytes22(0x2eca0be4b013471a8d7f75fe2a7d713de7f43c5d1bf1);\n r_4_3_0[2] = r_4_3_0_2;\n }\n {\n bytes22 r_4_3_0_3 = bytes22(0x6deb4610c2e2e36b94127cba65fdaad65440d30bb37e);\n r_4_3_0[3] = r_4_3_0_3;\n }\n r_4_3.s_0 = r_4_3_0;\n }\n {\n int192 r_4_3_1 = -3131804874836675365962097563578778409409749354739299636533;\n r_4_3.s_1 = r_4_3_1;\n }\n {\n S_7142d7f8 memory r_4_3_2;\n {\n address[1] memory r_4_3_2_0;\n {\n address r_4_3_2_0_0 = 0x9847ccc4b036E5E1a3a17D9A241967070F1729D6;\n r_4_3_2_0[0] = r_4_3_2_0_0;\n }\n r_4_3_2.s_0 = r_4_3_2_0;\n }\n {\n S_574d9217[2][3] memory r_4_3_2_1;\n {\n S_574d9217[2] memory r_4_3_2_1_0;\n {\n S_574d9217 memory r_4_3_2_1_0_0;\n {\n bool[] memory r_4_3_2_1_0_0_0 = new bool[](2);\n {\n bool r_4_3_2_1_0_0_0_0 = true;\n r_4_3_2_1_0_0_0[0] = r_4_3_2_1_0_0_0_0;\n }\n {\n bool r_4_3_2_1_0_0_0_1 = true;\n r_4_3_2_1_0_0_0[1] = r_4_3_2_1_0_0_0_1;\n }\n r_4_3_2_1_0_0.s_0 = r_4_3_2_1_0_0_0;\n }\n {\n uint152 r_4_3_2_1_0_0_1 = 4811453609733051664779899168340664302657075108;\n r_4_3_2_1_0_0.s_1 = r_4_3_2_1_0_0_1;\n }\n {\n uint200[4] memory r_4_3_2_1_0_0_2;\n {\n uint200 r_4_3_2_1_0_0_2_0 = 1255876989347247720512753317592810888633969462573765865289066;\n r_4_3_2_1_0_0_2[0] = r_4_3_2_1_0_0_2_0;\n }\n {\n uint200 r_4_3_2_1_0_0_2_1 = 1216622046093212162556165353105136543829942240365526103198345;\n r_4_3_2_1_0_0_2[1] = r_4_3_2_1_0_0_2_1;\n }\n {\n uint200 r_4_3_2_1_0_0_2_2 = 215370811753775232602741063242849734162701353739936183888856;\n r_4_3_2_1_0_0_2[2] = r_4_3_2_1_0_0_2_2;\n }\n {\n uint200 r_4_3_2_1_0_0_2_3 = 823015402238356114551734744716502105098908164647589255174139;\n r_4_3_2_1_0_0_2[3] = r_4_3_2_1_0_0_2_3;\n }\n r_4_3_2_1_0_0.s_2 = r_4_3_2_1_0_0_2;\n }\n {\n bool r_4_3_2_1_0_0_3 = false;\n r_4_3_2_1_0_0.s_3 = r_4_3_2_1_0_0_3;\n }\n r_4_3_2_1_0[0] = r_4_3_2_1_0_0;\n }\n {\n S_574d9217 memory r_4_3_2_1_0_1;\n {\n bool[] memory r_4_3_2_1_0_1_0 = new bool[](2);\n {\n bool r_4_3_2_1_0_1_0_0 = true;\n r_4_3_2_1_0_1_0[0] = r_4_3_2_1_0_1_0_0;\n }\n {\n bool r_4_3_2_1_0_1_0_1 = false;\n r_4_3_2_1_0_1_0[1] = r_4_3_2_1_0_1_0_1;\n }\n r_4_3_2_1_0_1.s_0 = r_4_3_2_1_0_1_0;\n }\n {\n uint152 r_4_3_2_1_0_1_1 = 530325941254951113908384610582309675093801642;\n r_4_3_2_1_0_1.s_1 = r_4_3_2_1_0_1_1;\n }\n {\n uint200[4] memory r_4_3_2_1_0_1_2;\n {\n uint200 r_4_3_2_1_0_1_2_0 = 196042535101618852734036353557217249159043327150091709761309;\n r_4_3_2_1_0_1_2[0] = r_4_3_2_1_0_1_2_0;\n }\n {\n uint200 r_4_3_2_1_0_1_2_1 = 1000209630002823198737333958941580455793261098313221318603828;\n r_4_3_2_1_0_1_2[1] = r_4_3_2_1_0_1_2_1;\n }\n {\n uint200 r_4_3_2_1_0_1_2_2 = 1582770379972078012417279690170824077476191267860996266217206;\n r_4_3_2_1_0_1_2[2] = r_4_3_2_1_0_1_2_2;\n }\n {\n uint200 r_4_3_2_1_0_1_2_3 = 211597892108955715665469907952604432063378711254720764667943;\n r_4_3_2_1_0_1_2[3] = r_4_3_2_1_0_1_2_3;\n }\n r_4_3_2_1_0_1.s_2 = r_4_3_2_1_0_1_2;\n }\n {\n bool r_4_3_2_1_0_1_3 = false;\n r_4_3_2_1_0_1.s_3 = r_4_3_2_1_0_1_3;\n }\n r_4_3_2_1_0[1] = r_4_3_2_1_0_1;\n }\n r_4_3_2_1[0] = r_4_3_2_1_0;\n }\n {\n S_574d9217[2] memory r_4_3_2_1_1;\n {\n S_574d9217 memory r_4_3_2_1_1_0;\n {\n bool[] memory r_4_3_2_1_1_0_0 = new bool[](4);\n {\n bool r_4_3_2_1_1_0_0_0 = true;\n r_4_3_2_1_1_0_0[0] = r_4_3_2_1_1_0_0_0;\n }\n {\n bool r_4_3_2_1_1_0_0_1 = false;\n r_4_3_2_1_1_0_0[1] = r_4_3_2_1_1_0_0_1;\n }\n {\n bool r_4_3_2_1_1_0_0_2 = false;\n r_4_3_2_1_1_0_0[2] = r_4_3_2_1_1_0_0_2;\n }\n {\n bool r_4_3_2_1_1_0_0_3 = true;\n r_4_3_2_1_1_0_0[3] = r_4_3_2_1_1_0_0_3;\n }\n r_4_3_2_1_1_0.s_0 = r_4_3_2_1_1_0_0;\n }\n {\n uint152 r_4_3_2_1_1_0_1 = 5053728353304829204118609454767263873026688962;\n r_4_3_2_1_1_0.s_1 = r_4_3_2_1_1_0_1;\n }\n {\n uint200[4] memory r_4_3_2_1_1_0_2;\n {\n uint200 r_4_3_2_1_1_0_2_0 = 90375430785740783783606084355710270838721625541169515256294;\n r_4_3_2_1_1_0_2[0] = r_4_3_2_1_1_0_2_0;\n }\n {\n uint200 r_4_3_2_1_1_0_2_1 = 1459464563704860124848157806951393799835345881605069117339421;\n r_4_3_2_1_1_0_2[1] = r_4_3_2_1_1_0_2_1;\n }\n {\n uint200 r_4_3_2_1_1_0_2_2 = 1156530863991771385014859185910638992638242119589151335655288;\n r_4_3_2_1_1_0_2[2] = r_4_3_2_1_1_0_2_2;\n }\n {\n uint200 r_4_3_2_1_1_0_2_3 = 792577780643147984667344473730078347439978460791577387093752;\n r_4_3_2_1_1_0_2[3] = r_4_3_2_1_1_0_2_3;\n }\n r_4_3_2_1_1_0.s_2 = r_4_3_2_1_1_0_2;\n }\n {\n bool r_4_3_2_1_1_0_3 = true;\n r_4_3_2_1_1_0.s_3 = r_4_3_2_1_1_0_3;\n }\n r_4_3_2_1_1[0] = r_4_3_2_1_1_0;\n }\n {\n S_574d9217 memory r_4_3_2_1_1_1;\n {\n bool[] memory r_4_3_2_1_1_1_0 = new bool[](3);\n {\n bool r_4_3_2_1_1_1_0_0 = true;\n r_4_3_2_1_1_1_0[0] = r_4_3_2_1_1_1_0_0;\n }\n {\n bool r_4_3_2_1_1_1_0_1 = true;\n r_4_3_2_1_1_1_0[1] = r_4_3_2_1_1_1_0_1;\n }\n {\n bool r_4_3_2_1_1_1_0_2 = false;\n r_4_3_2_1_1_1_0[2] = r_4_3_2_1_1_1_0_2;\n }\n r_4_3_2_1_1_1.s_0 = r_4_3_2_1_1_1_0;\n }\n {\n uint152 r_4_3_2_1_1_1_1 = 1558583866370296963842801948735210104079872435;\n r_4_3_2_1_1_1.s_1 = r_4_3_2_1_1_1_1;\n }\n {\n uint200[4] memory r_4_3_2_1_1_1_2;\n {\n uint200 r_4_3_2_1_1_1_2_0 = 385890301499052288002246511334633283575008873478473694202379;\n r_4_3_2_1_1_1_2[0] = r_4_3_2_1_1_1_2_0;\n }\n {\n uint200 r_4_3_2_1_1_1_2_1 = 881205930425664847517173055767245270814826901485695592269910;\n r_4_3_2_1_1_1_2[1] = r_4_3_2_1_1_1_2_1;\n }\n {\n uint200 r_4_3_2_1_1_1_2_2 = 1396060809216236462681626474919130849292285900600534037022135;\n r_4_3_2_1_1_1_2[2] = r_4_3_2_1_1_1_2_2;\n }\n {\n uint200 r_4_3_2_1_1_1_2_3 = 924212449694162623963088950249305642992960293579483594110002;\n r_4_3_2_1_1_1_2[3] = r_4_3_2_1_1_1_2_3;\n }\n r_4_3_2_1_1_1.s_2 = r_4_3_2_1_1_1_2;\n }\n {\n bool r_4_3_2_1_1_1_3 = true;\n r_4_3_2_1_1_1.s_3 = r_4_3_2_1_1_1_3;\n }\n r_4_3_2_1_1[1] = r_4_3_2_1_1_1;\n }\n r_4_3_2_1[1] = r_4_3_2_1_1;\n }\n {\n S_574d9217[2] memory r_4_3_2_1_2;\n {\n S_574d9217 memory r_4_3_2_1_2_0;\n {\n bool[] memory r_4_3_2_1_2_0_0 = new bool[](1);\n {\n bool r_4_3_2_1_2_0_0_0 = true;\n r_4_3_2_1_2_0_0[0] = r_4_3_2_1_2_0_0_0;\n }\n r_4_3_2_1_2_0.s_0 = r_4_3_2_1_2_0_0;\n }\n {\n uint152 r_4_3_2_1_2_0_1 = 800623553434897416430228128929249126881203010;\n r_4_3_2_1_2_0.s_1 = r_4_3_2_1_2_0_1;\n }\n {\n uint200[4] memory r_4_3_2_1_2_0_2;\n {\n uint200 r_4_3_2_1_2_0_2_0 = 30901650246894572776489467184391001419425502581061004164418;\n r_4_3_2_1_2_0_2[0] = r_4_3_2_1_2_0_2_0;\n }\n {\n uint200 r_4_3_2_1_2_0_2_1 = 1062494469775336628263021049639132773774175963964112123657952;\n r_4_3_2_1_2_0_2[1] = r_4_3_2_1_2_0_2_1;\n }\n {\n uint200 r_4_3_2_1_2_0_2_2 = 1113746163374984106690563726112219051946637495549803675531444;\n r_4_3_2_1_2_0_2[2] = r_4_3_2_1_2_0_2_2;\n }\n {\n uint200 r_4_3_2_1_2_0_2_3 = 1477786620762075758101193552224821725408193907197507359810796;\n r_4_3_2_1_2_0_2[3] = r_4_3_2_1_2_0_2_3;\n }\n r_4_3_2_1_2_0.s_2 = r_4_3_2_1_2_0_2;\n }\n {\n bool r_4_3_2_1_2_0_3 = false;\n r_4_3_2_1_2_0.s_3 = r_4_3_2_1_2_0_3;\n }\n r_4_3_2_1_2[0] = r_4_3_2_1_2_0;\n }\n {\n S_574d9217 memory r_4_3_2_1_2_1;\n {\n bool[] memory r_4_3_2_1_2_1_0 = new bool[](2);\n {\n bool r_4_3_2_1_2_1_0_0 = true;\n r_4_3_2_1_2_1_0[0] = r_4_3_2_1_2_1_0_0;\n }\n {\n bool r_4_3_2_1_2_1_0_1 = false;\n r_4_3_2_1_2_1_0[1] = r_4_3_2_1_2_1_0_1;\n }\n r_4_3_2_1_2_1.s_0 = r_4_3_2_1_2_1_0;\n }\n {\n uint152 r_4_3_2_1_2_1_1 = 5478275331287724787396752631168129522699177847;\n r_4_3_2_1_2_1.s_1 = r_4_3_2_1_2_1_1;\n }\n {\n uint200[4] memory r_4_3_2_1_2_1_2;\n {\n uint200 r_4_3_2_1_2_1_2_0 = 1312533193472735932299195424870320396199288619705910186412010;\n r_4_3_2_1_2_1_2[0] = r_4_3_2_1_2_1_2_0;\n }\n {\n uint200 r_4_3_2_1_2_1_2_1 = 1065440061942792842541869246075224490586793832314198097720434;\n r_4_3_2_1_2_1_2[1] = r_4_3_2_1_2_1_2_1;\n }\n {\n uint200 r_4_3_2_1_2_1_2_2 = 1584766068860971564724520662839324463036553036998237229453177;\n r_4_3_2_1_2_1_2[2] = r_4_3_2_1_2_1_2_2;\n }\n {\n uint200 r_4_3_2_1_2_1_2_3 = 1403318133503285320150782127906795167827937485299277858808891;\n r_4_3_2_1_2_1_2[3] = r_4_3_2_1_2_1_2_3;\n }\n r_4_3_2_1_2_1.s_2 = r_4_3_2_1_2_1_2;\n }\n {\n bool r_4_3_2_1_2_1_3 = false;\n r_4_3_2_1_2_1.s_3 = r_4_3_2_1_2_1_3;\n }\n r_4_3_2_1_2[1] = r_4_3_2_1_2_1;\n }\n r_4_3_2_1[2] = r_4_3_2_1_2;\n }\n r_4_3_2.s_1 = r_4_3_2_1;\n }\n {\n S_cbb9bf37[3] memory r_4_3_2_2;\n {\n S_cbb9bf37 memory r_4_3_2_2_0;\n {\n bool r_4_3_2_2_0_0 = false;\n r_4_3_2_2_0.s_0 = r_4_3_2_2_0_0;\n }\n {\n bytes16 r_4_3_2_2_0_1 = bytes16(0x903af01d24ef4bde2b75a665c63cdef2);\n r_4_3_2_2_0.s_1 = r_4_3_2_2_0_1;\n }\n {\n string memory r_4_3_2_2_0_2 = unicode\"Moo é🚀\";\n r_4_3_2_2_0.s_2 = r_4_3_2_2_0_2;\n }\n r_4_3_2_2[0] = r_4_3_2_2_0;\n }\n {\n S_cbb9bf37 memory r_4_3_2_2_1;\n {\n bool r_4_3_2_2_1_0 = true;\n r_4_3_2_2_1.s_0 = r_4_3_2_2_1_0;\n }\n {\n bytes16 r_4_3_2_2_1_1 = bytes16(0x34a54e0a13d649be641a02b3d421f257);\n r_4_3_2_2_1.s_1 = r_4_3_2_2_1_1;\n }\n {\n string memory r_4_3_2_2_1_2 = unicode\"Moo é🚀ooéMéM 🚀🚀oé🚀oo🚀Moo éooMooMé🚀🚀oo MoM🚀🚀MM é oéoM🚀\";\n r_4_3_2_2_1.s_2 = r_4_3_2_2_1_2;\n }\n r_4_3_2_2[1] = r_4_3_2_2_1;\n }\n {\n S_cbb9bf37 memory r_4_3_2_2_2;\n {\n bool r_4_3_2_2_2_0 = false;\n r_4_3_2_2_2.s_0 = r_4_3_2_2_2_0;\n }\n {\n bytes16 r_4_3_2_2_2_1 = bytes16(0x02ec8fce4f13af60191fb10a45813fcc);\n r_4_3_2_2_2.s_1 = r_4_3_2_2_2_1;\n }\n {\n string memory r_4_3_2_2_2_2 = unicode\"Moo é🚀 ooo éoMéé oMoooM🚀M🚀 🚀\";\n r_4_3_2_2_2.s_2 = r_4_3_2_2_2_2;\n }\n r_4_3_2_2[2] = r_4_3_2_2_2;\n }\n r_4_3_2.s_2 = r_4_3_2_2;\n }\n {\n bool r_4_3_2_3 = false;\n r_4_3_2.s_3 = r_4_3_2_3;\n }\n r_4_3.s_2 = r_4_3_2;\n }\n r_4.s_3 = r_4_3;\n }\n {\n bool r_4_4 = true;\n r_4.s_4 = r_4_4;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000006cbd005ee0a8425ccd2720779c28e4bf235defb500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000001c8f09cc519508c73607b76869bda69813c394080b0dd56be41ef60000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000183916cf1e477ad5322cc54c96edc8f93993805187fb92729ba01b5b53ce5100000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000604d6f6f20c3a9f09f9a80f09f9a806fc3a9c3a9c3a96f4d2020c3a9f09f9a806f4d4df09f9a80f09f9a80f09f9a80f09f9a804dc3a94d20206fc3a92020206f206f6ff09f9a80204d6f206ff09f9a804d6ff09f9a806f6f6f6f6f206f6fc3a96f0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000022b6e213c8bbf46f464cf4541e2603ec5cf2e0d072e000000000000000000007e1860a4e981e553c7de13e8aafbfec5561b11284c77000000000000000000002eca0be4b013471a8d7f75fe2a7d713de7f43c5d1bf1000000000000000000006deb4610c2e2e36b94127cba65fdaad65440d30bb37e00000000000000000000ffffffffffffffff80466e739ecc8207624ac599abfe93c3ef2f746ac2e62acb00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000009847ccc4b036e5e1a3a17d9a241967070f1729d60000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000d7c0c757fd7e7fe5ea92584679f412ec07f7a400000000000000c8129f91581a9c1cb0df003fe489e40f1bf946a0ce3ff4b56a00000000000000c1d1aed6516ee06fd0aaac5e40528cf697f77c0b9204b98a8900000000000000224f80313d494fde47af1e53f6a0b607141a86fa48cb302bd800000000000000831d29baf70b013316f49106c1a61c6957a3c84792179dd7fb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000017c7d7debed35dd7c909436284e99c75853aaa000000000000001f3b3b917f22516ab95053b829d5e1229065648ad250c4c71d000000000000009f57b3c9c413340b510ab1539c9eb9be3166297692e6ff743400000000000000fc265dcfc4c203dac647eb4f56ce530ef990808512adbd4ef60000000000000021b5a112c23aff1f00b15f454eec186f3e5da7de6c730768270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000e29df4d322db4ef2b62fdffce91b5134b707c2000000000000000e65cb8610420b6569855fbf8b55075e54e1f5501c4fbad9e600000000000000e8819105801db4b41821d6c9efa671c1856c720a4ed190371d00000000000000b83ef99f68de63c7c369aaaa31b6bb1fb6df8711dbb3a22778000000000000007e43d2221b2fdfe116fd854961e5ef98590fade142390e4ef800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000045e3aa5354238f65341622d23406b573e571b3000000000000003d79d2bbd041d408b76f2533e08d6b6ccf95688557a6fe4a0b000000000000008c625b312a69b7e0eb99bfc35d394c3aebdbd08a804f47885600000000000000de67c2f00412b29ee7afbca82df9457593d0d39a2dcda1c5b700000000000000933c4c342ba06abccc33286d7da432d272a807a2e0edf83432000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000023e6b5291632c4aa035c7ee36ea721fa1893420000000000000004ec444843757f030b2b4588d1b4d1ae1c6d52390c29e1fd4200000000000000a943dfdb7bcfbf7b656497f18e4ffc5a3d1d2864adb976fee000000000000000b16e1481781fc1a400c7950e6a4230f006334b779d7aac38b400000000000000eb6ccc3904ef32e887c4b585964643bf1a9525d2848db124ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000f5a78442ac7e4e9a5ddcc1e222adadce398f7700000000000000d1193df056aa9c01a8936375b6d3afe4a40df38136dcbf07ea00000000000000a9bc01464775b2c2e18182184566c1b69baeb5fbf98024f47200000000000000fc77c1c69a67982f5f94fa30909fe169e7c7798b8ad7e48f7900000000000000df8fbcf042914b003e5a14a1988556f9bdf6e9fdea156b243b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000903af01d24ef4bde2b75a665c63cdef2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134a54e0a13d649be641a02b3d421f257000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a806f6fc3a94dc3a94d20f09f9a80f09f9a806fc3a9f09f9a806f6ff09f9a804d6f6f20c3a96f6f4d6f6f4dc3a9f09f9a80f09f9a806f6f204d6f4df09f9a80f09f9a804d4d20c3a9206fc3a96f4df09f9a800000000000000000000000000000000000000000000000000000000000000000000000000002ec8fce4f13af60191fb10a45813fcc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a80206f6f6f2020c3a96f4dc3a9c3a9206f4d6f6f6f4df09f9a804df09f9a8020f09f9a8000000000000000000000000000000000000000" + }, + { + "name": "random-(bool,((string)[3],((bool,((bytes11),bytes27,bytes26[],uint48,string),((uint80[3],address,address[1])),bytes17,string),((uint40,int32),int152[3])[],((bool),bool,bool)[4],int96)),address)", + "type": "(bool,((string)[3],((bool,((bytes11),bytes27,bytes26[],uint48,string),((uint80[3],address,address[1])),bytes17,string),((uint40,int32),int152[3])[],((bool),bool,bool)[4],int96)),address)", + "value": [ + false, + [ + [ + ["Moo é🚀o MMé o éM🚀 oéooMééoooé ooo Mé🚀 oMoé"], + ["Moo é🚀 🚀o oooM MM é🚀ooé🚀ooé MMoMM o"], + ["Moo é🚀🚀MMéoooéo é🚀 🚀ooo🚀🚀MéMoo oéooM o🚀ooM Mo"] + ], + [ + [ + true, + [ + ["0x932dde65fb9f2f69ca4738"], + "0x486b4fe3491316cf60aaf1b24c882c2e5f119221f61241cc0ceda4", + [], + "153659014506101", + "Moo é🚀 oMooo o o🚀oMo Mo o🚀🚀 M🚀🚀 éMMo oé é é🚀" + ], + [ + [ + [ + "438613910329105909295447", + "109089138515117367837630", + "551756258728203695837695" + ], + "0xA53525B2A979a63dCbE0DB7D90F07af6f7030cB3", + ["0x4dFb29F89fFfAeDF1457C3729698655a5Ead9959"] + ] + ], + "0x7479ec281e94af181b21779008aa4c93ae", + "Moo é🚀M o🚀 🚀é🚀" + ], + [ + [ + ["959235691055", "687495200"], + [ + "-2610058202524881494598680315501251212508402836", + "2780725569356285966115243087928557512206402793", + "1077207467466402608201462635125866929315824113" + ] + ], + [ + ["740772022181", "-1086918835"], + [ + "838111602694930818189290813948117673620204291", + "-341835273245260977313037423395088411264149546", + "2717973766499356987548601980449792157744613960" + ] + ], + [ + ["224361411732", "-1118855369"], + [ + "1102474998005592214249560468545647578861777848", + "-195200546606339318499777037186549201502495424", + "2425807725283882585536390515723727006121715719" + ] + ] + ], + [ + [[true], false, false], + [[false], false, true], + [[true], false, true], + [[true], false, false] + ], + "-12793842075872703372874618154" + ] + ], + "0xc7d2F4C19c87B0CEC729a1Df6c41fE632A3F3199" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o MMé o éM🚀 oéooMééoooé ooo Mé🚀 oMoé" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 🚀o oooM MM é🚀ooé🚀ooé MMoMM o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀MMéoooéo é🚀 🚀ooo🚀🚀MéMoo oéooM o🚀ooM Mo" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x932dde65fb9f2f69ca4738" + } + ] + }, + { + "type": "hexstring", + "value": "0x486b4fe3491316cf60aaf1b24c882c2e5f119221f61241cc0ceda4" + }, + { + "type": "array", + "value": [] + }, + { + "type": "number", + "value": "153659014506101" + }, + { + "type": "string", + "value": "Moo é🚀 oMooo o o🚀oMo Mo o🚀🚀 M🚀🚀 éMMo oé é é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "438613910329105909295447" + }, + { + "type": "number", + "value": "109089138515117367837630" + }, + { + "type": "number", + "value": "551756258728203695837695" + } + ] + }, + { + "type": "address", + "value": "0xA53525B2A979a63dCbE0DB7D90F07af6f7030cB3" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x4dFb29F89fFfAeDF1457C3729698655a5Ead9959" + } + ] + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x7479ec281e94af181b21779008aa4c93ae" + }, + { + "type": "string", + "value": "Moo é🚀M o🚀 🚀é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "959235691055" + }, + { + "type": "number", + "value": "687495200" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-2610058202524881494598680315501251212508402836" + }, + { + "type": "number", + "value": "2780725569356285966115243087928557512206402793" + }, + { + "type": "number", + "value": "1077207467466402608201462635125866929315824113" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "740772022181" + }, + { + "type": "number", + "value": "-1086918835" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "838111602694930818189290813948117673620204291" + }, + { + "type": "number", + "value": "-341835273245260977313037423395088411264149546" + }, + { + "type": "number", + "value": "2717973766499356987548601980449792157744613960" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "224361411732" + }, + { + "type": "number", + "value": "-1118855369" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1102474998005592214249560468545647578861777848" + }, + { + "type": "number", + "value": "-195200546606339318499777037186549201502495424" + }, + { + "type": "number", + "value": "2425807725283882585536390515723727006121715719" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "number", + "value": "-12793842075872703372874618154" + } + ] + } + ] + }, + { + "type": "address", + "value": "0xc7d2F4C19c87B0CEC729a1Df6c41fE632A3F3199" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610ce0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061098d565b60405180910390f35b6100566105fa565b61005e6105fa565b6000815261006a610623565b610072610648565b60408051602081019091526060815260006040518060600160405280603d8152602001610ba8603d913982525081526040805160208101909152606081526000604051806060016040528060348152602001610be560349139825250602080830191909152604080519182019052606081526000604051806080016040528060488152602001610c19604891398252506040820152815261011161067c565b6101196106a3565b600181526040805160c081018252600060a08201818152825260208083018281526060848601818152818601858152608080880193909352875180860189526a1265bbccbf73e5ed3948e760ab1b815287527f486b4fe3491316cf60aaf1b24c882c2e5f119221f61241cc0ceda40000000000909352865185815280850188529052658bc086f9e6759091528451908101909452604a8085529293919290610c619083013960808301525060208201526101d161070e565b6101d961071d565b6101e1610744565b695ce14ec6f03a62a029578152691719bbea9c78ea9f43be6020808301919091526974d6c447bf5ab05a51ff604083015290825273a53525b2a979a63dcbe0db7d90f07af6f7030cb390820152610236610762565b734dfb29f89fffaedf1457c3729698655a5ead9959815260408281019190915290825282810191909152703a3cf6140f4a578c0d90bbc804552649d760791b606083015280518082018252601d81527f4d6f6f20c3a9f09f9a804d20206ff09f9a8020f09f9a80c3a9f09f9a80000000602082015260808084019190915291835280516003808252928101909152600091816020015b6102d4610780565b8152602001906001900390816102cc5790505090506102f1610780565b6040805180820190915264df56e7122f81526328fa582060208201528152610317610744565b727509ffae539e8f9f66fe9f91da19d4c7d81493198152727cb129feb2a6d316f6cc89b9a4cf57747144e960208083019190915272304dbc3b4f1bbfc5c98b9b61d10efd0da2c1f1604083015282015281518190839060009061037c5761037c610b91565b602002602001018190525050610390610780565b6040805180820190915264ac797407a581526340c910b219602082015281526103b7610744565b7225950ca2c4dac1f6289b13672483f6ac3aeb038152720f541394df1587e0f1603120b9d44a1ca1e829196020808301919091527279e0cf054001db96c78daec7f748f8258fca486040830152820152815181908390600190811061041e5761041e610b91565b602002602001018190525050610432610780565b6040805180820190915264343cfb749481526342b060c81960208201528152610459610744565b72316fcad487b90a8af447b7ac8ddd2b886bb3b881527208c0cad97afd923853a3ef624464e250c462bf19602080830191909152726cc6e8317102f24ae6faf96804d4615029e807604083015282015281518190839060029081106104c0576104c0610b91565b602002602001018190525050808260200181905250506104de6107a9565b604080516080808201835260006060808401828152845260208085018381528587018481528751808401895260018082529088529185905284905294875285518085018752808301848152815280820184815281880185815288518085018a528681528352908590528690528782015285518085018752808301848152815280820184815281880185815288518085018a5288815283529085905286905287870152855193840186528382018381528452838101838152848701848152875180840189529687529585528390529190935284830191909152848301939093526b2956d170a7a6597ae406152919908401528382019290925283019190915273c7d2f4c19c87b0cec729a1df6c41fe632a3f319990820152919050565b6040518060600160405280600015158152602001610616610623565b8152600060209091015290565b6040518060400160405280610636610648565b815260200161064361067c565b905290565b60405180606001604052806003905b6040805160208101909152606081528152602001906001900390816106575790505090565b604051806080016040528061068f6106a3565b8152602001606081526020016106166107a9565b6040518060a001604052806000151581526020016106ed6040805160c081018252600060a08201818152825260208201819052606092820183905282820152608081019190915290565b81526020016106fa61070e565b815260006020820152606060409091015290565b60405180602001604052806106435b6040518060600160405280610730610744565b815260006020820152604001610643610762565b60405180606001604052806003906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b604080516080810182526000918101828152606082019290925290815260208101610643610744565b60405180608001604052806004905b60408051608081018252600060608201818152825260208083018290529282015282526000199092019101816107b85790505090565b6000815180845260005b81811015610814576020818501810151868301820152016107f8565b81811115610826576000602083870101525b50601f01601f19169290920160200192915050565b805180518360005b600381101561086e57825169ffffffffffffffffffff16825260209283019290910190600101610843565b5050506020818101516001600160a01b03908116606086015260409092015191608085019060005b60018110156108b5578451821683529383019391830191600101610896565b50505050505050565b60008151808452602080850194508084016000805b848110156109385782518051805164ffffffffff168a52850151600390810b868b0152908501519060408a0190845b8181101561092157835160120b83529287019291870191600101610902565b50505060a0989098019750918301916001016108d3565b50959695505050505050565b8060005b60048110156109875781518051511515855260208082015115158187015260409182015115159186019190915260609094019390910190600101610948565b50505050565b60006020808352835115158184015280840151604060608186015260c08501825182608088015281829050610120925082880160005b60038110156109fa5789820360bf190183528351518883526109e7898401826107ee565b94890194938901939250506001016109c3565b5094860151888603607f190160a0808b019190915281516101e08089528151151590890152808901516102008901969096528551516001600160a81b0319166103008901528589015164ffffffffff19166103208901528686015161034089019290925281516103a0890181905292979189019594509250906000906103c08301905b80831015610aa657865165ffffffffffff19168252958901956001929092019190890190610a7d565b50606085015165ffffffffffff1661036084015260808501518382036102ff19016103808501529550610ad981876107ee565b95505050848201519250610af161022082018461083b565b60608201516effffffffffffffffffffffffffffff19166102c082015260808201516101df19828603016102e08301529250610b2d84846107ee565b935086860151925080840387820152610b4684846108be565b9650848601519350610b5a85820185610944565b60608601519550610b716101c0820187600b0b9052565b505050508501516001600160a01b03811660608601529050509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f204d4dc3a9206f20c3a94df09f9a8020206fc3a96f6f4dc3a9c3a96f6f6fc3a9206f6f6f204dc3a9f09f9a80206f4d6fc3a94d6f6f20c3a9f09f9a8020f09f9a806f206f6f6f4d204d4d20c3a9f09f9a806f6fc3a9f09f9a806f6fc3a9204d4d6f4d4d20206f4d6f6f20c3a9f09f9a80f09f9a804d4dc3a96f6f6fc3a96f20c3a9f09f9a8020f09f9a806f6f6ff09f9a80f09f9a804dc3a94d6f6f206fc3a96f6f4d206ff09f9a806f6f4d204d6f4d6f6f20c3a9f09f9a802020206f4d6f6f6f206f206ff09f9a806f4d6f204d6f206ff09f9a80f09f9a80204df09f9a80f09f9a802020c3a94d4d6f20206fc3a920c3a920c3a9f09f9a80a2646970667358221220cb33d1f039f5dfcc039d42c89be044d17a2cc0c2a0ffe24022d8459f0a8966c764736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_97fc4627 {\n string s_0;\n }\n\n struct S_1b4cf483 {\n bytes11 s_0;\n }\n\n struct S_acc34dbf {\n S_1b4cf483 s_0;\n bytes27 s_1;\n bytes26[] s_2;\n uint48 s_3;\n string s_4;\n }\n\n struct S_61a80dab {\n uint80[3] s_0;\n address s_1;\n address[1] s_2;\n }\n\n struct S_e186461d {\n S_61a80dab s_0;\n }\n\n struct S_a9ff5e33 {\n bool s_0;\n S_acc34dbf s_1;\n S_e186461d s_2;\n bytes17 s_3;\n string s_4;\n }\n\n struct S_45eeec8a {\n uint40 s_0;\n int32 s_1;\n }\n\n struct S_d7052263 {\n S_45eeec8a s_0;\n int152[3] s_1;\n }\n\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_98eb97a5 {\n S_c1053bda s_0;\n bool s_1;\n bool s_2;\n }\n\n struct S_f09aea52 {\n S_a9ff5e33 s_0;\n S_d7052263[] s_1;\n S_98eb97a5[4] s_2;\n int96 s_3;\n }\n\n struct S_fd275615 {\n S_97fc4627[3] s_0;\n S_f09aea52 s_1;\n }\n\n struct S_b0804e5b {\n bool s_0;\n S_fd275615 s_1;\n address s_2;\n }\n\n function test () public pure returns (S_b0804e5b memory) {\n S_b0804e5b memory r;\n {\n bool r_0 = false;\n r.s_0 = r_0;\n }\n {\n S_fd275615 memory r_1;\n {\n S_97fc4627[3] memory r_1_0;\n {\n S_97fc4627 memory r_1_0_0;\n {\n string memory r_1_0_0_0 = unicode\"Moo é🚀o MMé o éM🚀 oéooMééoooé ooo Mé🚀 oMoé\";\n r_1_0_0.s_0 = r_1_0_0_0;\n }\n r_1_0[0] = r_1_0_0;\n }\n {\n S_97fc4627 memory r_1_0_1;\n {\n string memory r_1_0_1_0 = unicode\"Moo é🚀 🚀o oooM MM é🚀ooé🚀ooé MMoMM o\";\n r_1_0_1.s_0 = r_1_0_1_0;\n }\n r_1_0[1] = r_1_0_1;\n }\n {\n S_97fc4627 memory r_1_0_2;\n {\n string memory r_1_0_2_0 = unicode\"Moo é🚀🚀MMéoooéo é🚀 🚀ooo🚀🚀MéMoo oéooM o🚀ooM Mo\";\n r_1_0_2.s_0 = r_1_0_2_0;\n }\n r_1_0[2] = r_1_0_2;\n }\n r_1.s_0 = r_1_0;\n }\n {\n S_f09aea52 memory r_1_1;\n {\n S_a9ff5e33 memory r_1_1_0;\n {\n bool r_1_1_0_0 = true;\n r_1_1_0.s_0 = r_1_1_0_0;\n }\n {\n S_acc34dbf memory r_1_1_0_1;\n {\n S_1b4cf483 memory r_1_1_0_1_0;\n {\n bytes11 r_1_1_0_1_0_0 = bytes11(0x932dde65fb9f2f69ca4738);\n r_1_1_0_1_0.s_0 = r_1_1_0_1_0_0;\n }\n r_1_1_0_1.s_0 = r_1_1_0_1_0;\n }\n {\n bytes27 r_1_1_0_1_1 = bytes27(0x486b4fe3491316cf60aaf1b24c882c2e5f119221f61241cc0ceda4);\n r_1_1_0_1.s_1 = r_1_1_0_1_1;\n }\n {\n bytes26[] memory r_1_1_0_1_2 = new bytes26[](0);\n r_1_1_0_1.s_2 = r_1_1_0_1_2;\n }\n {\n uint48 r_1_1_0_1_3 = 153659014506101;\n r_1_1_0_1.s_3 = r_1_1_0_1_3;\n }\n {\n string memory r_1_1_0_1_4 = unicode\"Moo é🚀 oMooo o o🚀oMo Mo o🚀🚀 M🚀🚀 éMMo oé é é🚀\";\n r_1_1_0_1.s_4 = r_1_1_0_1_4;\n }\n r_1_1_0.s_1 = r_1_1_0_1;\n }\n {\n S_e186461d memory r_1_1_0_2;\n {\n S_61a80dab memory r_1_1_0_2_0;\n {\n uint80[3] memory r_1_1_0_2_0_0;\n {\n uint80 r_1_1_0_2_0_0_0 = 438613910329105909295447;\n r_1_1_0_2_0_0[0] = r_1_1_0_2_0_0_0;\n }\n {\n uint80 r_1_1_0_2_0_0_1 = 109089138515117367837630;\n r_1_1_0_2_0_0[1] = r_1_1_0_2_0_0_1;\n }\n {\n uint80 r_1_1_0_2_0_0_2 = 551756258728203695837695;\n r_1_1_0_2_0_0[2] = r_1_1_0_2_0_0_2;\n }\n r_1_1_0_2_0.s_0 = r_1_1_0_2_0_0;\n }\n {\n address r_1_1_0_2_0_1 = 0xA53525B2A979a63dCbE0DB7D90F07af6f7030cB3;\n r_1_1_0_2_0.s_1 = r_1_1_0_2_0_1;\n }\n {\n address[1] memory r_1_1_0_2_0_2;\n {\n address r_1_1_0_2_0_2_0 = 0x4dFb29F89fFfAeDF1457C3729698655a5Ead9959;\n r_1_1_0_2_0_2[0] = r_1_1_0_2_0_2_0;\n }\n r_1_1_0_2_0.s_2 = r_1_1_0_2_0_2;\n }\n r_1_1_0_2.s_0 = r_1_1_0_2_0;\n }\n r_1_1_0.s_2 = r_1_1_0_2;\n }\n {\n bytes17 r_1_1_0_3 = bytes17(0x7479ec281e94af181b21779008aa4c93ae);\n r_1_1_0.s_3 = r_1_1_0_3;\n }\n {\n string memory r_1_1_0_4 = unicode\"Moo é🚀M o🚀 🚀é🚀\";\n r_1_1_0.s_4 = r_1_1_0_4;\n }\n r_1_1.s_0 = r_1_1_0;\n }\n {\n S_d7052263[] memory r_1_1_1 = new S_d7052263[](3);\n {\n S_d7052263 memory r_1_1_1_0;\n {\n S_45eeec8a memory r_1_1_1_0_0;\n {\n uint40 r_1_1_1_0_0_0 = 959235691055;\n r_1_1_1_0_0.s_0 = r_1_1_1_0_0_0;\n }\n {\n int32 r_1_1_1_0_0_1 = 687495200;\n r_1_1_1_0_0.s_1 = r_1_1_1_0_0_1;\n }\n r_1_1_1_0.s_0 = r_1_1_1_0_0;\n }\n {\n int152[3] memory r_1_1_1_0_1;\n {\n int152 r_1_1_1_0_1_0 = -2610058202524881494598680315501251212508402836;\n r_1_1_1_0_1[0] = r_1_1_1_0_1_0;\n }\n {\n int152 r_1_1_1_0_1_1 = 2780725569356285966115243087928557512206402793;\n r_1_1_1_0_1[1] = r_1_1_1_0_1_1;\n }\n {\n int152 r_1_1_1_0_1_2 = 1077207467466402608201462635125866929315824113;\n r_1_1_1_0_1[2] = r_1_1_1_0_1_2;\n }\n r_1_1_1_0.s_1 = r_1_1_1_0_1;\n }\n r_1_1_1[0] = r_1_1_1_0;\n }\n {\n S_d7052263 memory r_1_1_1_1;\n {\n S_45eeec8a memory r_1_1_1_1_0;\n {\n uint40 r_1_1_1_1_0_0 = 740772022181;\n r_1_1_1_1_0.s_0 = r_1_1_1_1_0_0;\n }\n {\n int32 r_1_1_1_1_0_1 = -1086918835;\n r_1_1_1_1_0.s_1 = r_1_1_1_1_0_1;\n }\n r_1_1_1_1.s_0 = r_1_1_1_1_0;\n }\n {\n int152[3] memory r_1_1_1_1_1;\n {\n int152 r_1_1_1_1_1_0 = 838111602694930818189290813948117673620204291;\n r_1_1_1_1_1[0] = r_1_1_1_1_1_0;\n }\n {\n int152 r_1_1_1_1_1_1 = -341835273245260977313037423395088411264149546;\n r_1_1_1_1_1[1] = r_1_1_1_1_1_1;\n }\n {\n int152 r_1_1_1_1_1_2 = 2717973766499356987548601980449792157744613960;\n r_1_1_1_1_1[2] = r_1_1_1_1_1_2;\n }\n r_1_1_1_1.s_1 = r_1_1_1_1_1;\n }\n r_1_1_1[1] = r_1_1_1_1;\n }\n {\n S_d7052263 memory r_1_1_1_2;\n {\n S_45eeec8a memory r_1_1_1_2_0;\n {\n uint40 r_1_1_1_2_0_0 = 224361411732;\n r_1_1_1_2_0.s_0 = r_1_1_1_2_0_0;\n }\n {\n int32 r_1_1_1_2_0_1 = -1118855369;\n r_1_1_1_2_0.s_1 = r_1_1_1_2_0_1;\n }\n r_1_1_1_2.s_0 = r_1_1_1_2_0;\n }\n {\n int152[3] memory r_1_1_1_2_1;\n {\n int152 r_1_1_1_2_1_0 = 1102474998005592214249560468545647578861777848;\n r_1_1_1_2_1[0] = r_1_1_1_2_1_0;\n }\n {\n int152 r_1_1_1_2_1_1 = -195200546606339318499777037186549201502495424;\n r_1_1_1_2_1[1] = r_1_1_1_2_1_1;\n }\n {\n int152 r_1_1_1_2_1_2 = 2425807725283882585536390515723727006121715719;\n r_1_1_1_2_1[2] = r_1_1_1_2_1_2;\n }\n r_1_1_1_2.s_1 = r_1_1_1_2_1;\n }\n r_1_1_1[2] = r_1_1_1_2;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n {\n S_98eb97a5[4] memory r_1_1_2;\n {\n S_98eb97a5 memory r_1_1_2_0;\n {\n S_c1053bda memory r_1_1_2_0_0;\n {\n bool r_1_1_2_0_0_0 = true;\n r_1_1_2_0_0.s_0 = r_1_1_2_0_0_0;\n }\n r_1_1_2_0.s_0 = r_1_1_2_0_0;\n }\n {\n bool r_1_1_2_0_1 = false;\n r_1_1_2_0.s_1 = r_1_1_2_0_1;\n }\n {\n bool r_1_1_2_0_2 = false;\n r_1_1_2_0.s_2 = r_1_1_2_0_2;\n }\n r_1_1_2[0] = r_1_1_2_0;\n }\n {\n S_98eb97a5 memory r_1_1_2_1;\n {\n S_c1053bda memory r_1_1_2_1_0;\n {\n bool r_1_1_2_1_0_0 = false;\n r_1_1_2_1_0.s_0 = r_1_1_2_1_0_0;\n }\n r_1_1_2_1.s_0 = r_1_1_2_1_0;\n }\n {\n bool r_1_1_2_1_1 = false;\n r_1_1_2_1.s_1 = r_1_1_2_1_1;\n }\n {\n bool r_1_1_2_1_2 = true;\n r_1_1_2_1.s_2 = r_1_1_2_1_2;\n }\n r_1_1_2[1] = r_1_1_2_1;\n }\n {\n S_98eb97a5 memory r_1_1_2_2;\n {\n S_c1053bda memory r_1_1_2_2_0;\n {\n bool r_1_1_2_2_0_0 = true;\n r_1_1_2_2_0.s_0 = r_1_1_2_2_0_0;\n }\n r_1_1_2_2.s_0 = r_1_1_2_2_0;\n }\n {\n bool r_1_1_2_2_1 = false;\n r_1_1_2_2.s_1 = r_1_1_2_2_1;\n }\n {\n bool r_1_1_2_2_2 = true;\n r_1_1_2_2.s_2 = r_1_1_2_2_2;\n }\n r_1_1_2[2] = r_1_1_2_2;\n }\n {\n S_98eb97a5 memory r_1_1_2_3;\n {\n S_c1053bda memory r_1_1_2_3_0;\n {\n bool r_1_1_2_3_0_0 = true;\n r_1_1_2_3_0.s_0 = r_1_1_2_3_0_0;\n }\n r_1_1_2_3.s_0 = r_1_1_2_3_0;\n }\n {\n bool r_1_1_2_3_1 = false;\n r_1_1_2_3.s_1 = r_1_1_2_3_1;\n }\n {\n bool r_1_1_2_3_2 = false;\n r_1_1_2_3.s_2 = r_1_1_2_3_2;\n }\n r_1_1_2[3] = r_1_1_2_3;\n }\n r_1_1.s_2 = r_1_1_2;\n }\n {\n int96 r_1_1_3 = -12793842075872703372874618154;\n r_1_1.s_3 = r_1_1_3;\n }\n r_1.s_1 = r_1_1;\n }\n r.s_1 = r_1;\n }\n {\n address r_2 = 0xc7d2F4C19c87B0CEC729a1Df6c41fE632A3F3199;\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000c7d2f4c19c87b0cec729a1df6c41fe632a3f319900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a806f204d4dc3a9206f20c3a94df09f9a8020206fc3a96f6f4dc3a9c3a96f6f6fc3a9206f6f6f204dc3a9f09f9a80206f4d6fc3a9000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a8020f09f9a806f206f6f6f4d204d4d20c3a9f09f9a806f6fc3a9f09f9a806f6fc3a9204d4d6f4d4d20206f000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000484d6f6f20c3a9f09f9a80f09f9a804d4dc3a96f6f6fc3a96f20c3a9f09f9a8020f09f9a806f6f6ff09f9a80f09f9a804dc3a94d6f6f206fc3a96f6f4d206ff09f9a806f6f4d204d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffd6a92e8f5859a6851bf9ead600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000005ce14ec6f03a62a02957000000000000000000000000000000000000000000001719bbea9c78ea9f43be0000000000000000000000000000000000000000000074d6c447bf5ab05a51ff000000000000000000000000a53525b2a979a63dcbe0db7d90f07af6f7030cb30000000000000000000000004dfb29f89fffaedf1457c3729698655a5ead99597479ec281e94af181b21779008aa4c93ae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000260932dde65fb9f2f69ca4738000000000000000000000000000000000000000000486b4fe3491316cf60aaf1b24c882c2e5f119221f61241cc0ceda4000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000008bc086f9e67500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a802020206f4d6f6f6f206f206ff09f9a806f4d6f204d6f206ff09f9a80f09f9a80204df09f9a80f09f9a802020c3a94d4d6f20206fc3a920c3a920c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a804d20206ff09f9a8020f09f9a80c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000df56e7122f0000000000000000000000000000000000000000000000000000000028fa5820ffffffffffffffffffffffffff8af60051ac6170609901606e25e62b3827eb6c000000000000000000000000007cb129feb2a6d316f6cc89b9a4cf57747144e900000000000000000000000000304dbc3b4f1bbfc5c98b9b61d10efd0da2c1f1000000000000000000000000000000000000000000000000000000ac797407a5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf36ef4d0000000000000000000000000025950ca2c4dac1f6289b13672483f6ac3aeb03fffffffffffffffffffffffffff0abec6b20ea781f0e9fcedf462bb5e35e17d60000000000000000000000000079e0cf054001db96c78daec7f748f8258fca48000000000000000000000000000000000000000000000000000000343cfb7494ffffffffffffffffffffffffffffffffffffffffffffffffffffffffbd4f9f3700000000000000000000000000316fcad487b90a8af447b7ac8ddd2b886bb3b8fffffffffffffffffffffffffff73f352685026dc7ac5c109dbb9b1daf3b9d40000000000000000000000000006cc6e8317102f24ae6faf96804d4615029e807" + }, + { + "name": "random-(bytes30,bytes7,(int136,address,(string[1][1],bytes19[],bytes31)[1][3],bytes24,((address,address,bytes28,uint232,(address)[3]),uint96,address,(bool,string,bool,address))),(int56)[3],bytes22)", + "type": "(bytes30,bytes7,(int136,address,(string[1][1],bytes19[],bytes31)[1][3],bytes24,((address,address,bytes28,uint232,(address)[3]),uint96,address,(bool,string,bool,address))),(int56)[3],bytes22)", + "value": [ + "0x5f5d352fca8a9ea5e254a92ba6681792727744e3e356040e9e5d1b73df11", + "0xd07533559b7ef7", + [ + "1306039673636518585167882872355422852819", + "0x4eD38da1C5E3a6746159ba3832fa336E42055e97", + [ + [ + [ + [["Moo é🚀ooo M oMoééoé o🚀o é oé"]], + ["0x38192d53fe889666488f69b55dfdcf6092a490"], + "0xe831da8b992dc658f5af6803d7ef81ca4bf6c3897a74bdfb4b5752308a52fa" + ] + ], + [ + [ + [["Moo é🚀MMMMooMo o🚀"]], + ["0x266357e85a31df97e500d8b954de2cbe6eb08c"], + "0x4d84beba0117b002fed97b7f7bc8c4e397f5f3390b9a3b569ecb005011eb6c" + ] + ], + [ + [ + [["Moo é🚀 o🚀Moo o é🚀M Mo o o🚀o🚀o🚀o🚀oM🚀Moé MooM🚀🚀🚀é"]], + ["0x96542913c916734ded115304ac48d36a952c3f"], + "0x54707e7a914ba206d67d32c13024639a1521666cf374e31bb03e6d9687203c" + ] + ] + ], + "0xb98bebf0256285e503fe730c31d8455818eae2cd79d33a89", + [ + [ + "0xC08c5F28E64246B371656230D745a87A05a1Baa8", + "0x6A70eF3c732A585597d3C659e6172EC369c2CDC3", + "0x45d9ff2af520d886c680d828398e7f7489371bb65c417d0b5d4f96c9", + "4997943072066713965471440540305387975190501104903100977694463974629336", + [ + ["0x1B4871c2426256CD8400A22582f523FA093D732C"], + ["0x9eB46D172441C2f713fDf5E5eB9348d3e4aE5870"], + ["0xF1FA3F8599Dc73d950F54C6e64E2D5C49b5D232d"] + ] + ], + "37540739180973795964288335750", + "0x128B35FB7C6588c673112821A76fa0a366eA1164", + [ + true, + "Moo é🚀ooooM oooMo🚀oé oMéo🚀MMMo🚀 oéoM🚀 MM🚀o M", + false, + "0x89dFA1f59942188D880be9AFa1ac701dA48a7B9D" + ] + ] + ], + [["20192835943828866"], ["-10916524283924597"], ["1181717350936765"]], + "0xf592bf6ffb021a41dd7525117ff7afaf547b1b0ad729" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x5f5d352fca8a9ea5e254a92ba6681792727744e3e356040e9e5d1b73df11" + }, + { + "type": "hexstring", + "value": "0xd07533559b7ef7" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1306039673636518585167882872355422852819" + }, + { + "type": "address", + "value": "0x4eD38da1C5E3a6746159ba3832fa336E42055e97" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooo M oMoééoé o🚀o é oé" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x38192d53fe889666488f69b55dfdcf6092a490" + } + ] + }, + { + "type": "hexstring", + "value": "0xe831da8b992dc658f5af6803d7ef81ca4bf6c3897a74bdfb4b5752308a52fa" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MMMMooMo o🚀" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x266357e85a31df97e500d8b954de2cbe6eb08c" + } + ] + }, + { + "type": "hexstring", + "value": "0x4d84beba0117b002fed97b7f7bc8c4e397f5f3390b9a3b569ecb005011eb6c" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 o🚀Moo o é🚀M Mo o o🚀o🚀o🚀o🚀oM🚀Moé MooM🚀🚀🚀é" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x96542913c916734ded115304ac48d36a952c3f" + } + ] + }, + { + "type": "hexstring", + "value": "0x54707e7a914ba206d67d32c13024639a1521666cf374e31bb03e6d9687203c" + } + ] + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xb98bebf0256285e503fe730c31d8455818eae2cd79d33a89" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xC08c5F28E64246B371656230D745a87A05a1Baa8" + }, + { + "type": "address", + "value": "0x6A70eF3c732A585597d3C659e6172EC369c2CDC3" + }, + { + "type": "hexstring", + "value": "0x45d9ff2af520d886c680d828398e7f7489371bb65c417d0b5d4f96c9" + }, + { + "type": "number", + "value": "4997943072066713965471440540305387975190501104903100977694463974629336" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x1B4871c2426256CD8400A22582f523FA093D732C" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x9eB46D172441C2f713fDf5E5eB9348d3e4aE5870" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xF1FA3F8599Dc73d950F54C6e64E2D5C49b5D232d" + } + ] + } + ] + } + ] + }, + { + "type": "number", + "value": "37540739180973795964288335750" + }, + { + "type": "address", + "value": "0x128B35FB7C6588c673112821A76fa0a366eA1164" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀ooooM oooMo🚀oé oMéo🚀MMMo🚀 oéoM🚀 MM🚀o M" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x89dFA1f59942188D880be9AFa1ac701dA48a7B9D" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "20192835943828866" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-10916524283924597" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1181717350936765" + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0xf592bf6ffb021a41dd7525117ff7afaf547b1b0ad729" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610c88806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b604051610045919061099d565b60405180910390f35b6100566105ce565b61005e6105ce565b7f5f5d352fca8a9ea5e254a92ba6681792727744e3e356040e9e5d1b73df110000815266d07533559b7ef760c81b6020820152610099610607565b7003d68e177330fbcaf6e0caeb331ad9d6d38152734ed38da1c5e3a6746159ba3832fa336e42055e9760208201526100cf61063f565b6100d761066c565b6100df610699565b6100e76106c0565b6100ef6106ed565b6000604051806060016040528060298152602001610c2a6029913982525081528152604080516001808252818301909252600091602080830190803683375050815191925072038192d53fe889666488f69b55dfdcf6092a49606c1b91829150839060009061016057610160610b7b565b6001600160681b031992909216602092830291909101820152830191909152507fe831da8b992dc658f5af6803d7ef81ca4bf6c3897a74bdfb4b5752308a52fa006040820152815281526101b261066c565b6101ba610699565b6101c26106c0565b6101ca6106ed565b604080518082018252601881527f4d6f6f20c3a9f09f9a804d4d4d4d6f6f4d6f206ff09f9a800000000000000000602082015282529082529082528051600180825281830190925260009181602001602082028036833750508151919250720998d5fa168c77e5f940362e55378b2f9bac23606a1b91829150839060009061025457610254610b7b565b6001600160681b03199290921660209283029190910182015283810192909252507f4d84beba0117b002fed97b7f7bc8c4e397f5f3390b9a3b569ecb005011eb6c0060408301529082528201526102a961066c565b6102b1610699565b6102b96106c0565b6102c16106ed565b6000604051806080016040528060568152602001610bd4605691398252508152815260408051600180825281830190925260009160208083019080368337505081519192507296542913c916734ded115304ac48d36a952c3f60681b91829150839060009061033257610332610b7b565b6001600160681b031992909216602092830291909101820152830191909152507f54707e7a914ba206d67d32c13024639a1521666cf374e31bb03e6d9687203c00604080830191909152908252828101919091528201527fb98bebf0256285e503fe730c31d8455818eae2cd79d33a89000000000000000060608201526103b7610714565b6103bf610765565b73c08c5f28e64246b371656230d745a87a05a1baa88152736a70ef3c732a585597d3c659e6172ec369c2cdc360208201527f45d9ff2af520d886c680d828398e7f7489371bb65c417d0b5d4f96c90000000060408201527cb9624e9988ff007b7aa1ed27605e0874c0cbe1d6b54889c56df182dfd86060820152610441610791565b6040805160208082018352731b4871c2426256cd8400a22582f523fa093d732c825290835281518082018352739eb46d172441c2f713fdf5e5eb9348d3e4ae58708152838201528151808201835273f1fa3f8599dc73d950f54c6e64e2d5c49b5d232d8152838301526080848101939093529284526b794cf8bcd60f84d5a54d7f868484015273128b35fb7c6588c673112821a76fa0a366ea116484820152805180830182526060818501819052600082840181905290820181905260018252825193840190925260428084529093919291610b929083013960208301525060006040808301919091527389dfa1f59942188d880be9afa1ac701da48a7b9d6060808401919091528301919091526080830191909152820152610562610791565b60408051602080820183526647bd46fd708d828252908352815180820183526626c885602010741981528382015281519081018252660432c402ed70bd815290820152606082015275f592bf6ffb021a41dd7525117ff7afaf547b1b0ad72960501b6080820152919050565b6040805160a081018252600080825260208201529081016105ed610607565b81526020016105fa610791565b8152600060209091015290565b6040805160a0810182526000808252602082015290810161062661063f565b81526000602082015260400161063a610714565b905290565b60405180606001604052806003905b61065661066c565b81526020019060019003908161064e5790505090565b60405180602001604052806001905b610683610699565b81526020019060019003908161067b5790505090565b60405180606001604052806106ac6106c0565b815260606020820152600060409091015290565b60405180602001604052806001905b6106d76106ed565b8152602001906001900390816106cf5790505090565b60405180602001604052806001905b60608152602001906001900390816106fc5790505090565b6040518060800160405280610727610765565b8152600060208201819052604082015260600161063a6040805160808101825260008082526060602083018190529282018190529181019190915290565b6040805160a08101825260008082526020820181905291810182905260608101919091526080810161063a5b60405180606001604052806003905b6040805160208101909152600081528152602001906001900390816107a05790505090565b6000815180845260005b818110156107eb576020818501810151868301820152016107cf565b818111156107fd576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b8381101561084c5781516001600160681b03191687529582019590820190600101610826565b509495945050505050565b805115158252600060208201516080602085015261087860808501826107c5565b6040848101511515908601526060938401516001600160a01b031693909401929092525090919050565b805180516001600160a01b03908116845260208083015182168186015260408084015163ffffffff1916908601526060808401516001600160e81b031690860152608092830151600093610140939192908701855b6003811015610917578451518416825293820193908201906001016108f7565b50508501516bffffffffffffffffffffffff811660e088015291506109399050565b5060408301516001600160a01b03166101008501526060830151610120850182905261096782860182610857565b95945050505050565b8060005b60038110156109975781515160060b845260209384019390910190600101610974565b50505050565b6020808252825161ffff191682820152828101516001600160c81b0319166040808401919091528084015160e06060850152805160100b610100850152918201516001600160a01b031661012084015281015160a0610140840152600091906101a084016102008501845b6003811015610b0b5786820361019f190183528351826020810160005b6001811015610af35785820383528351805160608452606084016080850160005b6001811015610aa857868203605f190183528351826020810160005b6001811015610a90578582038352610a7b8285516107c5565b60209485019493909301929150600101610a62565b50602096870196959095019493505050600101610a46565b50602084015192508581036020870152610ac28184610812565b9250505060408201519150610add604085018360ff19169052565b6020958601959490940193925050600101610a25565b50602096870196959095019493505050600101610a08565b50606084015167ffffffffffffffff19811661016088015260809094015186820360ff1901610180880152939250610b4381856108a2565b93505050506060840151610b5a6080850182610970565b50608084015169ffffffffffffffffffff19811660e0850152509392505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f6f6f6f4d206f6f6f4d6ff09f9a806fc3a9206f4dc3a96ff09f9a804d4d4d6ff09f9a80206fc3a96f4df09f9a80204d4df09f9a806f204d4d6f6f20c3a9f09f9a80206ff09f9a804d6f6f20206f20c3a9f09f9a804d204d6f206f20206ff09f9a806ff09f9a806ff09f9a806ff09f9a806f4df09f9a804d6fc3a9204d6f6f4df09f9a80f09f9a80f09f9a80c3a94d6f6f20c3a9f09f9a806f6f6f204d20206f4d6fc3a9c3a96fc3a9206ff09f9a806f20c3a9206fc3a9a264697066735822122017df297b216ca4ab8c6b351feb0de33b6ef42cb40120d76a8cf6cf8717c823ad64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_89f36773 {\n string[1][1] s_0;\n bytes19[] s_1;\n bytes31 s_2;\n }\n\n struct S_421683f8 {\n address s_0;\n }\n\n struct S_40fc726f {\n address s_0;\n address s_1;\n bytes28 s_2;\n uint232 s_3;\n S_421683f8[3] s_4;\n }\n\n struct S_e22ab74a {\n bool s_0;\n string s_1;\n bool s_2;\n address s_3;\n }\n\n struct S_0da4c039 {\n S_40fc726f s_0;\n uint96 s_1;\n address s_2;\n S_e22ab74a s_3;\n }\n\n struct S_09138acc {\n int136 s_0;\n address s_1;\n S_89f36773[1][3] s_2;\n bytes24 s_3;\n S_0da4c039 s_4;\n }\n\n struct S_14df74d1 {\n int56 s_0;\n }\n\n struct S_da06ed5e {\n bytes30 s_0;\n bytes7 s_1;\n S_09138acc s_2;\n S_14df74d1[3] s_3;\n bytes22 s_4;\n }\n\n function test () public pure returns (S_da06ed5e memory) {\n S_da06ed5e memory r;\n {\n bytes30 r_0 = bytes30(0x5f5d352fca8a9ea5e254a92ba6681792727744e3e356040e9e5d1b73df11);\n r.s_0 = r_0;\n }\n {\n bytes7 r_1 = bytes7(0xd07533559b7ef7);\n r.s_1 = r_1;\n }\n {\n S_09138acc memory r_2;\n {\n int136 r_2_0 = 1306039673636518585167882872355422852819;\n r_2.s_0 = r_2_0;\n }\n {\n address r_2_1 = 0x4eD38da1C5E3a6746159ba3832fa336E42055e97;\n r_2.s_1 = r_2_1;\n }\n {\n S_89f36773[1][3] memory r_2_2;\n {\n S_89f36773[1] memory r_2_2_0;\n {\n S_89f36773 memory r_2_2_0_0;\n {\n string[1][1] memory r_2_2_0_0_0;\n {\n string[1] memory r_2_2_0_0_0_0;\n {\n string memory r_2_2_0_0_0_0_0 = unicode\"Moo é🚀ooo M oMoééoé o🚀o é oé\";\n r_2_2_0_0_0_0[0] = r_2_2_0_0_0_0_0;\n }\n r_2_2_0_0_0[0] = r_2_2_0_0_0_0;\n }\n r_2_2_0_0.s_0 = r_2_2_0_0_0;\n }\n {\n bytes19[] memory r_2_2_0_0_1 = new bytes19[](1);\n {\n bytes19 r_2_2_0_0_1_0 = bytes19(0x38192d53fe889666488f69b55dfdcf6092a490);\n r_2_2_0_0_1[0] = r_2_2_0_0_1_0;\n }\n r_2_2_0_0.s_1 = r_2_2_0_0_1;\n }\n {\n bytes31 r_2_2_0_0_2 = bytes31(0xe831da8b992dc658f5af6803d7ef81ca4bf6c3897a74bdfb4b5752308a52fa);\n r_2_2_0_0.s_2 = r_2_2_0_0_2;\n }\n r_2_2_0[0] = r_2_2_0_0;\n }\n r_2_2[0] = r_2_2_0;\n }\n {\n S_89f36773[1] memory r_2_2_1;\n {\n S_89f36773 memory r_2_2_1_0;\n {\n string[1][1] memory r_2_2_1_0_0;\n {\n string[1] memory r_2_2_1_0_0_0;\n {\n string memory r_2_2_1_0_0_0_0 = unicode\"Moo é🚀MMMMooMo o🚀\";\n r_2_2_1_0_0_0[0] = r_2_2_1_0_0_0_0;\n }\n r_2_2_1_0_0[0] = r_2_2_1_0_0_0;\n }\n r_2_2_1_0.s_0 = r_2_2_1_0_0;\n }\n {\n bytes19[] memory r_2_2_1_0_1 = new bytes19[](1);\n {\n bytes19 r_2_2_1_0_1_0 = bytes19(0x266357e85a31df97e500d8b954de2cbe6eb08c);\n r_2_2_1_0_1[0] = r_2_2_1_0_1_0;\n }\n r_2_2_1_0.s_1 = r_2_2_1_0_1;\n }\n {\n bytes31 r_2_2_1_0_2 = bytes31(0x4d84beba0117b002fed97b7f7bc8c4e397f5f3390b9a3b569ecb005011eb6c);\n r_2_2_1_0.s_2 = r_2_2_1_0_2;\n }\n r_2_2_1[0] = r_2_2_1_0;\n }\n r_2_2[1] = r_2_2_1;\n }\n {\n S_89f36773[1] memory r_2_2_2;\n {\n S_89f36773 memory r_2_2_2_0;\n {\n string[1][1] memory r_2_2_2_0_0;\n {\n string[1] memory r_2_2_2_0_0_0;\n {\n string memory r_2_2_2_0_0_0_0 = unicode\"Moo é🚀 o🚀Moo o é🚀M Mo o o🚀o🚀o🚀o🚀oM🚀Moé MooM🚀🚀🚀é\";\n r_2_2_2_0_0_0[0] = r_2_2_2_0_0_0_0;\n }\n r_2_2_2_0_0[0] = r_2_2_2_0_0_0;\n }\n r_2_2_2_0.s_0 = r_2_2_2_0_0;\n }\n {\n bytes19[] memory r_2_2_2_0_1 = new bytes19[](1);\n {\n bytes19 r_2_2_2_0_1_0 = bytes19(0x96542913c916734ded115304ac48d36a952c3f);\n r_2_2_2_0_1[0] = r_2_2_2_0_1_0;\n }\n r_2_2_2_0.s_1 = r_2_2_2_0_1;\n }\n {\n bytes31 r_2_2_2_0_2 = bytes31(0x54707e7a914ba206d67d32c13024639a1521666cf374e31bb03e6d9687203c);\n r_2_2_2_0.s_2 = r_2_2_2_0_2;\n }\n r_2_2_2[0] = r_2_2_2_0;\n }\n r_2_2[2] = r_2_2_2;\n }\n r_2.s_2 = r_2_2;\n }\n {\n bytes24 r_2_3 = bytes24(0xb98bebf0256285e503fe730c31d8455818eae2cd79d33a89);\n r_2.s_3 = r_2_3;\n }\n {\n S_0da4c039 memory r_2_4;\n {\n S_40fc726f memory r_2_4_0;\n {\n address r_2_4_0_0 = 0xC08c5F28E64246B371656230D745a87A05a1Baa8;\n r_2_4_0.s_0 = r_2_4_0_0;\n }\n {\n address r_2_4_0_1 = 0x6A70eF3c732A585597d3C659e6172EC369c2CDC3;\n r_2_4_0.s_1 = r_2_4_0_1;\n }\n {\n bytes28 r_2_4_0_2 = bytes28(0x45d9ff2af520d886c680d828398e7f7489371bb65c417d0b5d4f96c9);\n r_2_4_0.s_2 = r_2_4_0_2;\n }\n {\n uint232 r_2_4_0_3 = 4997943072066713965471440540305387975190501104903100977694463974629336;\n r_2_4_0.s_3 = r_2_4_0_3;\n }\n {\n S_421683f8[3] memory r_2_4_0_4;\n {\n S_421683f8 memory r_2_4_0_4_0;\n {\n address r_2_4_0_4_0_0 = 0x1B4871c2426256CD8400A22582f523FA093D732C;\n r_2_4_0_4_0.s_0 = r_2_4_0_4_0_0;\n }\n r_2_4_0_4[0] = r_2_4_0_4_0;\n }\n {\n S_421683f8 memory r_2_4_0_4_1;\n {\n address r_2_4_0_4_1_0 = 0x9eB46D172441C2f713fDf5E5eB9348d3e4aE5870;\n r_2_4_0_4_1.s_0 = r_2_4_0_4_1_0;\n }\n r_2_4_0_4[1] = r_2_4_0_4_1;\n }\n {\n S_421683f8 memory r_2_4_0_4_2;\n {\n address r_2_4_0_4_2_0 = 0xF1FA3F8599Dc73d950F54C6e64E2D5C49b5D232d;\n r_2_4_0_4_2.s_0 = r_2_4_0_4_2_0;\n }\n r_2_4_0_4[2] = r_2_4_0_4_2;\n }\n r_2_4_0.s_4 = r_2_4_0_4;\n }\n r_2_4.s_0 = r_2_4_0;\n }\n {\n uint96 r_2_4_1 = 37540739180973795964288335750;\n r_2_4.s_1 = r_2_4_1;\n }\n {\n address r_2_4_2 = 0x128B35FB7C6588c673112821A76fa0a366eA1164;\n r_2_4.s_2 = r_2_4_2;\n }\n {\n S_e22ab74a memory r_2_4_3;\n {\n bool r_2_4_3_0 = true;\n r_2_4_3.s_0 = r_2_4_3_0;\n }\n {\n string memory r_2_4_3_1 = unicode\"Moo é🚀ooooM oooMo🚀oé oMéo🚀MMMo🚀 oéoM🚀 MM🚀o M\";\n r_2_4_3.s_1 = r_2_4_3_1;\n }\n {\n bool r_2_4_3_2 = false;\n r_2_4_3.s_2 = r_2_4_3_2;\n }\n {\n address r_2_4_3_3 = 0x89dFA1f59942188D880be9AFa1ac701dA48a7B9D;\n r_2_4_3.s_3 = r_2_4_3_3;\n }\n r_2_4.s_3 = r_2_4_3;\n }\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n {\n S_14df74d1[3] memory r_3;\n {\n S_14df74d1 memory r_3_0;\n {\n int56 r_3_0_0 = 20192835943828866;\n r_3_0.s_0 = r_3_0_0;\n }\n r_3[0] = r_3_0;\n }\n {\n S_14df74d1 memory r_3_1;\n {\n int56 r_3_1_0 = -10916524283924597;\n r_3_1.s_0 = r_3_1_0;\n }\n r_3[1] = r_3_1;\n }\n {\n S_14df74d1 memory r_3_2;\n {\n int56 r_3_2_0 = 1181717350936765;\n r_3_2.s_0 = r_3_2_0;\n }\n r_3[2] = r_3_2;\n }\n r.s_3 = r_3;\n }\n {\n bytes22 r_4 = bytes22(0xf592bf6ffb021a41dd7525117ff7afaf547b1b0ad729);\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000205f5d352fca8a9ea5e254a92ba6681792727744e3e356040e9e5d1b73df110000d07533559b7ef70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000047bd46fd708d82ffffffffffffffffffffffffffffffffffffffffffffffffffd9377a9fdfef8b000000000000000000000000000000000000000000000000000432c402ed70bdf592bf6ffb021a41dd7525117ff7afaf547b1b0ad7290000000000000000000000000000000000000000000000000003d68e177330fbcaf6e0caeb331ad9d6d30000000000000000000000004ed38da1c5e3a6746159ba3832fa336e42055e9700000000000000000000000000000000000000000000000000000000000000a0b98bebf0256285e503fe730c31d8455818eae2cd79d33a8900000000000000000000000000000000000000000000000000000000000000000000000000000520000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100e831da8b992dc658f5af6803d7ef81ca4bf6c3897a74bdfb4b5752308a52fa000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000294d6f6f20c3a9f09f9a806f6f6f204d20206f4d6fc3a9c3a96fc3a9206ff09f9a806f20c3a9206fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000138192d53fe889666488f69b55dfdcf6092a490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e04d84beba0117b002fed97b7f7bc8c4e397f5f3390b9a3b569ecb005011eb6c000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000184d6f6f20c3a9f09f9a804d4d4d4d6f6f4d6f206ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000001266357e85a31df97e500d8b954de2cbe6eb08c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012054707e7a914ba206d67d32c13024639a1521666cf374e31bb03e6d9687203c000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a80206ff09f9a804d6f6f20206f20c3a9f09f9a804d204d6f206f20206ff09f9a806ff09f9a806ff09f9a806ff09f9a806f4df09f9a804d6fc3a9204d6f6f4df09f9a80f09f9a80f09f9a80c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000196542913c916734ded115304ac48d36a952c3f00000000000000000000000000000000000000000000000000c08c5f28e64246b371656230d745a87a05a1baa80000000000000000000000006a70ef3c732a585597d3c659e6172ec369c2cdc345d9ff2af520d886c680d828398e7f7489371bb65c417d0b5d4f96c900000000000000b9624e9988ff007b7aa1ed27605e0874c0cbe1d6b54889c56df182dfd80000000000000000000000001b4871c2426256cd8400a22582f523fa093d732c0000000000000000000000009eb46d172441c2f713fdf5e5eb9348d3e4ae5870000000000000000000000000f1fa3f8599dc73d950f54c6e64e2d5c49b5d232d0000000000000000000000000000000000000000794cf8bcd60f84d5a54d7f86000000000000000000000000128b35fb7c6588c673112821a76fa0a366ea1164000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089dfa1f59942188d880be9afa1ac701da48a7b9d00000000000000000000000000000000000000000000000000000000000000424d6f6f20c3a9f09f9a806f6f6f6f4d206f6f6f4d6ff09f9a806fc3a9206f4dc3a96ff09f9a804d4d4d6ff09f9a80206fc3a96f4df09f9a80204d4df09f9a806f204d000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int64,uint216,((((address,uint64,bool,string),uint232,((address[],(uint128,bool,address[4],uint224),(bool,address),address,int224),uint216)[2],bool),uint224,string,uint256),bool[2]),string,address)", + "type": "(int64,uint216,((((address,uint64,bool,string),uint232,((address[],(uint128,bool,address[4],uint224),(bool,address),address,int224),uint216)[2],bool),uint224,string,uint256),bool[2]),string,address)", + "value": [ + "8330845538682408411", + "39440413475746584866034360885808897725118995802210616863384418372", + [ + [ + [ + [ + "0x4aa099fB378470A1cb12b767E3a93bFC9bD4fa38", + "7473038770836942203", + true, + "Moo é🚀Mo🚀ooMM " + ], + "2419147848231734414669938811585331416595206977948376671966594465920102", + [ + [ + [ + [], + [ + "260772859105816539547441437415013987391", + true, + [ + "0xCB106Aa514Ac75b3473607DE542aB6585e3565f6", + "0x9Af14cD9739832526Cca0a44C0A914fA65a8df4B", + "0xeecb517743cC66aAFa097B48254F3aA3073A6E93", + "0x6E14132ec5Ce4C3d5098920ffc85420F006c685f" + ], + "9508164638497437534697334918753352283602027495535560506733042052482" + ], + [false, "0xfd2Da0E8Be5ebc79ba103f3CC306E7367b2b9798"], + "0x546d37C1eb13f7723159a4b7eC36287632F15e11", + "5586327429394393481981633760347688910143420084162611983519440884588" + ], + "80589567226374196294465531483948708847207452953622191230714217300" + ], + [ + [ + [ + "0x77C58Ee965388f813D35996aD9F4F51d61B85732", + "0xa95E72bB1A5491A4B48283Eaf3c5bbad04D390Fc", + "0x006f5b28E986A46ebbA59aB539CB0122fF882562", + "0x9541D90B6CE4fBCfBD8D89A6F1ea51753b44B8c8" + ], + [ + "171746513045073861320980928699843358239", + true, + [ + "0xB68D05a74d7976B07978a83ebd5911e96b08A05C", + "0x6864B4497d16e69b819bA9749504595727D43Cae", + "0xfaa01BeeF5569E7ef25728dc8973E863Ab2e725D", + "0x531354eA767201Bd8E299fD3B85934e792687c90" + ], + "12582044321789371836526942939751260089885119678753181163416513210050" + ], + [true, "0x0f2e8832E9490f3B0f373Db5123E87Bb12AaDab4"], + "0x9AB3b29e0aF88A166a5f52506F0D0e99cD763928", + "-5934343975450553320293286355062552340517248675375210157205680159376" + ], + "7188981163680688580887813153193943425396877509459644168378733834" + ] + ], + false + ], + "3728896344359859098430523511132062334724973526989983580225568346094", + "Moo é🚀🚀 oMM Moo", + "74163517662011946694821071607873515128966767506857702118445238519541820419694" + ], + [true, false] + ], + "Moo é🚀", + "0x44B7Bc6127A968CD445FB47c454d93C7243590c6" + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "8330845538682408411" + }, + { + "type": "number", + "value": "39440413475746584866034360885808897725118995802210616863384418372" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x4aa099fB378470A1cb12b767E3a93bFC9bD4fa38" + }, + { + "type": "number", + "value": "7473038770836942203" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀Mo🚀ooMM " + } + ] + }, + { + "type": "number", + "value": "2419147848231734414669938811585331416595206977948376671966594465920102" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "260772859105816539547441437415013987391" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xCB106Aa514Ac75b3473607DE542aB6585e3565f6" + }, + { + "type": "address", + "value": "0x9Af14cD9739832526Cca0a44C0A914fA65a8df4B" + }, + { + "type": "address", + "value": "0xeecb517743cC66aAFa097B48254F3aA3073A6E93" + }, + { + "type": "address", + "value": "0x6E14132ec5Ce4C3d5098920ffc85420F006c685f" + } + ] + }, + { + "type": "number", + "value": "9508164638497437534697334918753352283602027495535560506733042052482" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xfd2Da0E8Be5ebc79ba103f3CC306E7367b2b9798" + } + ] + }, + { + "type": "address", + "value": "0x546d37C1eb13f7723159a4b7eC36287632F15e11" + }, + { + "type": "number", + "value": "5586327429394393481981633760347688910143420084162611983519440884588" + } + ] + }, + { + "type": "number", + "value": "80589567226374196294465531483948708847207452953622191230714217300" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x77C58Ee965388f813D35996aD9F4F51d61B85732" + }, + { + "type": "address", + "value": "0xa95E72bB1A5491A4B48283Eaf3c5bbad04D390Fc" + }, + { + "type": "address", + "value": "0x006f5b28E986A46ebbA59aB539CB0122fF882562" + }, + { + "type": "address", + "value": "0x9541D90B6CE4fBCfBD8D89A6F1ea51753b44B8c8" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "171746513045073861320980928699843358239" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xB68D05a74d7976B07978a83ebd5911e96b08A05C" + }, + { + "type": "address", + "value": "0x6864B4497d16e69b819bA9749504595727D43Cae" + }, + { + "type": "address", + "value": "0xfaa01BeeF5569E7ef25728dc8973E863Ab2e725D" + }, + { + "type": "address", + "value": "0x531354eA767201Bd8E299fD3B85934e792687c90" + } + ] + }, + { + "type": "number", + "value": "12582044321789371836526942939751260089885119678753181163416513210050" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x0f2e8832E9490f3B0f373Db5123E87Bb12AaDab4" + } + ] + }, + { + "type": "address", + "value": "0x9AB3b29e0aF88A166a5f52506F0D0e99cD763928" + }, + { + "type": "number", + "value": "-5934343975450553320293286355062552340517248675375210157205680159376" + } + ] + }, + { + "type": "number", + "value": "7188981163680688580887813153193943425396877509459644168378733834" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "number", + "value": "3728896344359859098430523511132062334724973526989983580225568346094" + }, + { + "type": "string", + "value": "Moo é🚀🚀 oMM Moo" + }, + { + "type": "number", + "value": "74163517662011946694821071607873515128966767506857702118445238519541820419694" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "address", + "value": "0x44B7Bc6127A968CD445FB47c454d93C7243590c6" + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610bd7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610a0d565b60405180910390f35b61005661066a565b61005e61066a565b67739d1be0f3d00ddb81527a5fdfd45e34cc25b7e76fc5d7fedb385a0d8d3a42a9b37e0ae43844602082015261009261069d565b61009a6106c2565b6100a26106f9565b604080516080810182526060808201908152734aa099fb378470a1cb12b767e3a93bfc9bd4fa3882526767b5912b10752d7b60208084019190915260018385015283518085019094526015845274026b7b79061d4f84fcd4026b7f84fcd4037b7a6a69605d1b8482015292905282527c59bb2ea9e52534f0997aed26f0f1411e4ed60506bb953d3671d871f4669082015261013b610741565b61014361076e565b61014b61077d565b60408051600081526020810190915281526101646107ca565b6fc42f069b0f81b4b4c6d7c450f605b43f8152600160208201526101866107e5565b73cb106aa514ac75b3473607de542ab6585e3565f68152739af14cd9739832526cca0a44c0a914fa65a8df4b60208083019190915273eecb517743cc66aafa097b48254f3aa3073a6e93604080840191909152736e14132ec5ce4c3d5098920ffc85420f006c685f606080850191909152848201939093527b5a49116187d4a5d9c2948ad7759f5dee153e5de3b4d7a602018bad828484015284820193909352825180840184526000815273fd2da0e8be5ebc79ba103f3cc306e7367b2b9798818301529284019290925273546d37c1eb13f7723159a4b7ec36287632f15e11908301527b350b9c18120feaa32ca7fddb2fe999165cefa68ca77f5a82f272d36c60808301529082527ac3e702c45a1f8a5344d42f59d30c7eb2b73e1bc156f101b5d983549082015281526102b961076e565b6102c161077d565b60408051600480825260a082019092526000916020820160808036833701905050905060007377c58ee965388f813d35996ad9f4f51d61b857329050808260008151811061031157610311610b8b565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073a95e72bb1a5491a4b48283eaf3c5bbad04d390fc9050808260018151811061035f5761035f610b8b565b60200260200101906001600160a01b031690816001600160a01b031681525050506000726f5b28e986a46ebba59ab539cb0122ff882562905080826002815181106103ac576103ac610b8b565b60200260200101906001600160a01b031690816001600160a01b031681525050506000739541d90b6ce4fbcfbd8d89a6f1ea51753b44b8c8905080826003815181106103fa576103fa610b8b565b6001600160a01b039092166020928302919091019091015250815261041d6107ca565b6f81352cdbfd16c145aab510397e462e1f81526001602082015261043f6107e5565b73b68d05a74d7976b07978a83ebd5911e96b08a05c8152736864b4497d16e69b819ba9749504595727d43cae60208083019190915273faa01beef5569e7ef25728dc8973e863ab2e725d60408084019190915273531354ea767201bd8e299fd3b85934e792687c90606080850191909152848201939093527b77794167748c3ecdc2c76a2e2d505397cfce8eb51dc4a0b1f774e6c284840152848201939093528251808401845260018152730f2e8832e9490f3b0f373db5123e87bb12aadab48183015284840152739ab3b29e0af88a166a5f52506f0d0e99cd763928848301527fffffffffc7a668ad7bb3ce0eed66048a48c01c0e9ddc5143f1b571fcd516057060808501529284527a1179b6c62c5b455a6bf0188da4896d83b7606fb8b9b82d033f550a8484015284830193909352848101939093526000848301529284527b236871e45d779af25c09457a3bd13f870c54a70295e67ed6a82d8fee8484015281518083018352601781527f4d6f6f20c3a9f09f9a80f09f9a8020206f4d4d204d6f6f00000000000000000093810193909352908301919091527fa3f7103eaf7ce0812b348bce90f864b7911baacc50bbfc956a8a199daec5ee6e90820152815261060a610803565b600181526000602080830191909152828101919091526040838101929092528151808301909252600a8252689adede418753e13f3560b71b9082015260608201527344b7bc6127a968cd445fb47c454d93c7243590c66080820152919050565b6040805160a0810182526000808252602082015290810161068961069d565b815260606020820152600060409091015290565b60405180604001604052806106b06106c2565b81526020016106bd610803565b905290565b60405180608001604052806106d56106f9565b815260200160006001600160e01b0316815260200160608152602001600081525090565b604080516101008101825260006080820181815260a0830182905260c08301829052606060e084015282526020820152908101610734610741565b8152600060209091015290565b60405180604001604052806002905b61075861076e565b8152602001906001900390816107505790505090565b60405180604001604052806107345b6040518060a00160405280606081526020016107976107ca565b81526020016107b6604080518082019091526000808252602082015290565b815260006020820181905260409091015290565b60408051608081018252600080825260208201529081016107345b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b818110156108475760208185018101518683018201520161082b565b81811115610859576000602083870101525b50601f01601f19169290920160200192915050565b6fffffffffffffffffffffffffffffffff815116825260208082015115158184015260408201516040840160005b60048110156108c25782516001600160a01b03168252918301919083019060010161089c565b50505050606001516001600160e01b031660c09190910152565b6000826040808201846000805b60028110156109d557858403895282518051868652805161018088880181905281516101c08901819052602092830191906101e08a0190885b818110156109475784516001600160a01b031683529385019391850191600101610922565b5050838501519250606061095d818c018561086e565b858c0151805115156101408d015260208101516001600160a01b03166101608d015293508501516001600160a01b038116838c01529250608085015194506109ab6101a08b0186601b0b9052565b948301516001600160d81b0381168a850152949d83019d98505050949094019350506001016108e9565b5091979650505050505050565b8060005b6002811015610a0757815115158452602093840193909101906001016109e6565b50505050565b60006020808352835160070b8184015260018060d81b03818501511660408401526040840151606060a08186015281518160c087015280516080610120880152805160806101a089015260018060a01b0381511661022089015267ffffffffffffffff8682015116610240890152604081015115156102608901528381015190506080610280890152610aa46102a0890182610821565b905085820151610ac06101c08a01826001600160e81b03169052565b50604082015188820361019f19016101e08a0152610ade82826108dc565b928501518015156102008b0152929150610af59050565b858301516001600160e01b0316610140890152604083015161011f19898303016101608a01529150610b278183610821565b91505082820151610180880152848401519450610b4760e08801866109e2565b87830151878203601f190160808901529450610b638186610821565b9450505050506080840151610b8360a08501826001600160a01b03169052565b509392505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212204cc4c48095475987f8d286f94f2cb3a9e717e8203cb40706495ce95644af1a2264736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_b559c87b {\n address s_0;\n uint64 s_1;\n bool s_2;\n string s_3;\n }\n\n struct S_82df57f3 {\n uint128 s_0;\n bool s_1;\n address[4] s_2;\n uint224 s_3;\n }\n\n struct S_e212a882 {\n bool s_0;\n address s_1;\n }\n\n struct S_7e908572 {\n address[] s_0;\n S_82df57f3 s_1;\n S_e212a882 s_2;\n address s_3;\n int224 s_4;\n }\n\n struct S_fd97bdde {\n S_7e908572 s_0;\n uint216 s_1;\n }\n\n struct S_f08c62d8 {\n S_b559c87b s_0;\n uint232 s_1;\n S_fd97bdde[2] s_2;\n bool s_3;\n }\n\n struct S_ec924ef6 {\n S_f08c62d8 s_0;\n uint224 s_1;\n string s_2;\n uint256 s_3;\n }\n\n struct S_8296e7d5 {\n S_ec924ef6 s_0;\n bool[2] s_1;\n }\n\n struct S_b14e553d {\n int64 s_0;\n uint216 s_1;\n S_8296e7d5 s_2;\n string s_3;\n address s_4;\n }\n\n function test () public pure returns (S_b14e553d memory) {\n S_b14e553d memory r;\n {\n int64 r_0 = 8330845538682408411;\n r.s_0 = r_0;\n }\n {\n uint216 r_1 = 39440413475746584866034360885808897725118995802210616863384418372;\n r.s_1 = r_1;\n }\n {\n S_8296e7d5 memory r_2;\n {\n S_ec924ef6 memory r_2_0;\n {\n S_f08c62d8 memory r_2_0_0;\n {\n S_b559c87b memory r_2_0_0_0;\n {\n address r_2_0_0_0_0 = 0x4aa099fB378470A1cb12b767E3a93bFC9bD4fa38;\n r_2_0_0_0.s_0 = r_2_0_0_0_0;\n }\n {\n uint64 r_2_0_0_0_1 = 7473038770836942203;\n r_2_0_0_0.s_1 = r_2_0_0_0_1;\n }\n {\n bool r_2_0_0_0_2 = true;\n r_2_0_0_0.s_2 = r_2_0_0_0_2;\n }\n {\n string memory r_2_0_0_0_3 = unicode\"Moo é🚀Mo🚀ooMM \";\n r_2_0_0_0.s_3 = r_2_0_0_0_3;\n }\n r_2_0_0.s_0 = r_2_0_0_0;\n }\n {\n uint232 r_2_0_0_1 = 2419147848231734414669938811585331416595206977948376671966594465920102;\n r_2_0_0.s_1 = r_2_0_0_1;\n }\n {\n S_fd97bdde[2] memory r_2_0_0_2;\n {\n S_fd97bdde memory r_2_0_0_2_0;\n {\n S_7e908572 memory r_2_0_0_2_0_0;\n {\n address[] memory r_2_0_0_2_0_0_0 = new address[](0);\n r_2_0_0_2_0_0.s_0 = r_2_0_0_2_0_0_0;\n }\n {\n S_82df57f3 memory r_2_0_0_2_0_0_1;\n {\n uint128 r_2_0_0_2_0_0_1_0 = 260772859105816539547441437415013987391;\n r_2_0_0_2_0_0_1.s_0 = r_2_0_0_2_0_0_1_0;\n }\n {\n bool r_2_0_0_2_0_0_1_1 = true;\n r_2_0_0_2_0_0_1.s_1 = r_2_0_0_2_0_0_1_1;\n }\n {\n address[4] memory r_2_0_0_2_0_0_1_2;\n {\n address r_2_0_0_2_0_0_1_2_0 = 0xCB106Aa514Ac75b3473607DE542aB6585e3565f6;\n r_2_0_0_2_0_0_1_2[0] = r_2_0_0_2_0_0_1_2_0;\n }\n {\n address r_2_0_0_2_0_0_1_2_1 = 0x9Af14cD9739832526Cca0a44C0A914fA65a8df4B;\n r_2_0_0_2_0_0_1_2[1] = r_2_0_0_2_0_0_1_2_1;\n }\n {\n address r_2_0_0_2_0_0_1_2_2 = 0xeecb517743cC66aAFa097B48254F3aA3073A6E93;\n r_2_0_0_2_0_0_1_2[2] = r_2_0_0_2_0_0_1_2_2;\n }\n {\n address r_2_0_0_2_0_0_1_2_3 = 0x6E14132ec5Ce4C3d5098920ffc85420F006c685f;\n r_2_0_0_2_0_0_1_2[3] = r_2_0_0_2_0_0_1_2_3;\n }\n r_2_0_0_2_0_0_1.s_2 = r_2_0_0_2_0_0_1_2;\n }\n {\n uint224 r_2_0_0_2_0_0_1_3 = 9508164638497437534697334918753352283602027495535560506733042052482;\n r_2_0_0_2_0_0_1.s_3 = r_2_0_0_2_0_0_1_3;\n }\n r_2_0_0_2_0_0.s_1 = r_2_0_0_2_0_0_1;\n }\n {\n S_e212a882 memory r_2_0_0_2_0_0_2;\n {\n bool r_2_0_0_2_0_0_2_0 = false;\n r_2_0_0_2_0_0_2.s_0 = r_2_0_0_2_0_0_2_0;\n }\n {\n address r_2_0_0_2_0_0_2_1 = 0xfd2Da0E8Be5ebc79ba103f3CC306E7367b2b9798;\n r_2_0_0_2_0_0_2.s_1 = r_2_0_0_2_0_0_2_1;\n }\n r_2_0_0_2_0_0.s_2 = r_2_0_0_2_0_0_2;\n }\n {\n address r_2_0_0_2_0_0_3 = 0x546d37C1eb13f7723159a4b7eC36287632F15e11;\n r_2_0_0_2_0_0.s_3 = r_2_0_0_2_0_0_3;\n }\n {\n int224 r_2_0_0_2_0_0_4 = 5586327429394393481981633760347688910143420084162611983519440884588;\n r_2_0_0_2_0_0.s_4 = r_2_0_0_2_0_0_4;\n }\n r_2_0_0_2_0.s_0 = r_2_0_0_2_0_0;\n }\n {\n uint216 r_2_0_0_2_0_1 = 80589567226374196294465531483948708847207452953622191230714217300;\n r_2_0_0_2_0.s_1 = r_2_0_0_2_0_1;\n }\n r_2_0_0_2[0] = r_2_0_0_2_0;\n }\n {\n S_fd97bdde memory r_2_0_0_2_1;\n {\n S_7e908572 memory r_2_0_0_2_1_0;\n {\n address[] memory r_2_0_0_2_1_0_0 = new address[](4);\n {\n address r_2_0_0_2_1_0_0_0 = 0x77C58Ee965388f813D35996aD9F4F51d61B85732;\n r_2_0_0_2_1_0_0[0] = r_2_0_0_2_1_0_0_0;\n }\n {\n address r_2_0_0_2_1_0_0_1 = 0xa95E72bB1A5491A4B48283Eaf3c5bbad04D390Fc;\n r_2_0_0_2_1_0_0[1] = r_2_0_0_2_1_0_0_1;\n }\n {\n address r_2_0_0_2_1_0_0_2 = 0x006f5b28E986A46ebbA59aB539CB0122fF882562;\n r_2_0_0_2_1_0_0[2] = r_2_0_0_2_1_0_0_2;\n }\n {\n address r_2_0_0_2_1_0_0_3 = 0x9541D90B6CE4fBCfBD8D89A6F1ea51753b44B8c8;\n r_2_0_0_2_1_0_0[3] = r_2_0_0_2_1_0_0_3;\n }\n r_2_0_0_2_1_0.s_0 = r_2_0_0_2_1_0_0;\n }\n {\n S_82df57f3 memory r_2_0_0_2_1_0_1;\n {\n uint128 r_2_0_0_2_1_0_1_0 = 171746513045073861320980928699843358239;\n r_2_0_0_2_1_0_1.s_0 = r_2_0_0_2_1_0_1_0;\n }\n {\n bool r_2_0_0_2_1_0_1_1 = true;\n r_2_0_0_2_1_0_1.s_1 = r_2_0_0_2_1_0_1_1;\n }\n {\n address[4] memory r_2_0_0_2_1_0_1_2;\n {\n address r_2_0_0_2_1_0_1_2_0 = 0xB68D05a74d7976B07978a83ebd5911e96b08A05C;\n r_2_0_0_2_1_0_1_2[0] = r_2_0_0_2_1_0_1_2_0;\n }\n {\n address r_2_0_0_2_1_0_1_2_1 = 0x6864B4497d16e69b819bA9749504595727D43Cae;\n r_2_0_0_2_1_0_1_2[1] = r_2_0_0_2_1_0_1_2_1;\n }\n {\n address r_2_0_0_2_1_0_1_2_2 = 0xfaa01BeeF5569E7ef25728dc8973E863Ab2e725D;\n r_2_0_0_2_1_0_1_2[2] = r_2_0_0_2_1_0_1_2_2;\n }\n {\n address r_2_0_0_2_1_0_1_2_3 = 0x531354eA767201Bd8E299fD3B85934e792687c90;\n r_2_0_0_2_1_0_1_2[3] = r_2_0_0_2_1_0_1_2_3;\n }\n r_2_0_0_2_1_0_1.s_2 = r_2_0_0_2_1_0_1_2;\n }\n {\n uint224 r_2_0_0_2_1_0_1_3 = 12582044321789371836526942939751260089885119678753181163416513210050;\n r_2_0_0_2_1_0_1.s_3 = r_2_0_0_2_1_0_1_3;\n }\n r_2_0_0_2_1_0.s_1 = r_2_0_0_2_1_0_1;\n }\n {\n S_e212a882 memory r_2_0_0_2_1_0_2;\n {\n bool r_2_0_0_2_1_0_2_0 = true;\n r_2_0_0_2_1_0_2.s_0 = r_2_0_0_2_1_0_2_0;\n }\n {\n address r_2_0_0_2_1_0_2_1 = 0x0f2e8832E9490f3B0f373Db5123E87Bb12AaDab4;\n r_2_0_0_2_1_0_2.s_1 = r_2_0_0_2_1_0_2_1;\n }\n r_2_0_0_2_1_0.s_2 = r_2_0_0_2_1_0_2;\n }\n {\n address r_2_0_0_2_1_0_3 = 0x9AB3b29e0aF88A166a5f52506F0D0e99cD763928;\n r_2_0_0_2_1_0.s_3 = r_2_0_0_2_1_0_3;\n }\n {\n int224 r_2_0_0_2_1_0_4 = -5934343975450553320293286355062552340517248675375210157205680159376;\n r_2_0_0_2_1_0.s_4 = r_2_0_0_2_1_0_4;\n }\n r_2_0_0_2_1.s_0 = r_2_0_0_2_1_0;\n }\n {\n uint216 r_2_0_0_2_1_1 = 7188981163680688580887813153193943425396877509459644168378733834;\n r_2_0_0_2_1.s_1 = r_2_0_0_2_1_1;\n }\n r_2_0_0_2[1] = r_2_0_0_2_1;\n }\n r_2_0_0.s_2 = r_2_0_0_2;\n }\n {\n bool r_2_0_0_3 = false;\n r_2_0_0.s_3 = r_2_0_0_3;\n }\n r_2_0.s_0 = r_2_0_0;\n }\n {\n uint224 r_2_0_1 = 3728896344359859098430523511132062334724973526989983580225568346094;\n r_2_0.s_1 = r_2_0_1;\n }\n {\n string memory r_2_0_2 = unicode\"Moo é🚀🚀 oMM Moo\";\n r_2_0.s_2 = r_2_0_2;\n }\n {\n uint256 r_2_0_3 = 74163517662011946694821071607873515128966767506857702118445238519541820419694;\n r_2_0.s_3 = r_2_0_3;\n }\n r_2.s_0 = r_2_0;\n }\n {\n bool[2] memory r_2_1;\n {\n bool r_2_1_0 = true;\n r_2_1[0] = r_2_1_0;\n }\n {\n bool r_2_1_1 = false;\n r_2_1[1] = r_2_1_1;\n }\n r_2.s_1 = r_2_1;\n }\n r.s_2 = r_2;\n }\n {\n string memory r_3 = unicode\"Moo é🚀\";\n r.s_3 = r_3;\n }\n {\n address r_4 = 0x44B7Bc6127A968CD445FB47c454d93C7243590c6;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000739d1be0f3d00ddb00000000005fdfd45e34cc25b7e76fc5d7fedb385a0d8d3a42a9b37e0ae4384400000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000078000000000000000000000000044b7bc6127a968cd445fb47c454d93c7243590c6000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000236871e45d779af25c09457a3bd13f870c54a70295e67ed6a82d8fee0000000000000000000000000000000000000000000000000000000000000640a3f7103eaf7ce0812b348bce90f864b7911baacc50bbfc956a8a199daec5ee6e000000000000000000000000000000000000000000000000000000000000008000000059bb2ea9e52534f0997aed26f0f1411e4ed60506bb953d3671d871f466000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004aa099fb378470a1cb12b767e3a93bfc9bd4fa3800000000000000000000000000000000000000000000000067b5912b10752d7b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a804d6ff09f9a806f6f4d4d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000400000000000c3e702c45a1f8a5344d42f59d30c7eb2b73e1bc156f101b5d98354000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000c42f069b0f81b4b4c6d7c450f605b43f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000cb106aa514ac75b3473607de542ab6585e3565f60000000000000000000000009af14cd9739832526cca0a44c0a914fa65a8df4b000000000000000000000000eecb517743cc66aafa097b48254f3aa3073a6e930000000000000000000000006e14132ec5ce4c3d5098920ffc85420f006c685f000000005a49116187d4a5d9c2948ad7759f5dee153e5de3b4d7a602018bad820000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fd2da0e8be5ebc79ba103f3cc306e7367b2b9798000000000000000000000000546d37c1eb13f7723159a4b7ec36287632f15e1100000000350b9c18120feaa32ca7fddb2fe999165cefa68ca77f5a82f272d36c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000001179b6c62c5b455a6bf0188da4896d83b7606fb8b9b82d033f550a00000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000081352cdbfd16c145aab510397e462e1f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b68d05a74d7976b07978a83ebd5911e96b08a05c0000000000000000000000006864b4497d16e69b819ba9749504595727d43cae000000000000000000000000faa01beef5569e7ef25728dc8973e863ab2e725d000000000000000000000000531354ea767201bd8e299fd3b85934e792687c900000000077794167748c3ecdc2c76a2e2d505397cfce8eb51dc4a0b1f774e6c200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000f2e8832e9490f3b0f373db5123e87bb12aadab40000000000000000000000009ab3b29e0af88a166a5f52506f0d0e99cd763928ffffffffc7a668ad7bb3ce0eed66048a48c01c0e9ddc5143f1b571fcd5160570000000000000000000000000000000000000000000000000000000000000000400000000000000000000000077c58ee965388f813d35996ad9f4f51d61b85732000000000000000000000000a95e72bb1a5491a4b48283eaf3c5bbad04d390fc000000000000000000000000006f5b28e986a46ebba59ab539cb0122ff8825620000000000000000000000009541d90b6ce4fbcfbd8d89a6f1ea51753b44b8c800000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a80f09f9a8020206f4d4d204d6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(((bytes22,int256)),(bool,(string,int200,bool,bool),(int80,(address[3],string,(address,(((address,uint,string,int104),bytes23,string[1],int240),int160,address,int248),int248,bytes9)[],address,address[1]))))", + "type": "(((bytes22,int256)),(bool,(string,int200,bool,bool),(int80,(address[3],string,(address,(((address,uint,string,int104),bytes23,string[1],int240),int160,address,int248),int248,bytes9)[],address,address[1]))))", + "value": [ + [ + [ + "0x6410d001c97425a1965f78c30d3360646e3989335dd3", + "16644862840422335500993092708628519663803585550606305186497754215477587088835" + ] + ], + [ + true, + [ + "Moo é🚀", + "771061106154875255899966804204850628057254772833888480666072", + false, + true + ], + [ + "348114986213313677165994", + [ + [ + "0x8099046968262A6942735C9890B0FC75BAD6847D", + "0xfab95F73e93B14BF0c8601cAdAb9F82F8daD56Cd", + "0x9be6b1231106E1C933efD7C1F076713247Bfc7b8" + ], + "Moo é🚀🚀🚀🚀o Méo🚀é🚀o éM🚀M M o éo éo 🚀o🚀🚀", + [ + [ + "0x1bF9a57eA5bf4Ac928eb6551578cF2758333353F", + [ + [ + [ + "0xE532381dbbb4c5bB66D402d6F746642a94877942", + "58106711634641195612230948933095665471199163590707804912306507376007879216445", + "Moo é🚀M MMoo🚀oMoMéM o🚀oM éo MMo é🚀🚀🚀 M", + "-5614648396676007376867724030622" + ], + "0x847a85aa550c3646e9bc736b484fb345371807dab87af7", + ["Moo é🚀MM 🚀MééMéo🚀é éMé M Mé"], + "-563620570753608512185849581399826292959076287512156992983338256993917757" + ], + "521995043317913541414910818064881182845795738001", + "0x2B62F90e860319c913d99faff563dcbDc4cc9A57", + "119077032029940971114927970702756805301587833301977208566163507460447877553" + ], + "-206250013158227176431253553237137660863297631858250016252226557568071159547", + "0x927f15e06dad973c1c" + ], + [ + "0x2Bf3346988e3A3437D6EE45f8F96d3cec6817ac6", + [ + [ + [ + "0x86A76936e98754F3253B21B9D8E8E52c9f88aC27", + "83488096579900091463435734669090638314302473940696639539393281888537049568957", + "Moo é🚀é é é🚀 🚀éo🚀🚀 🚀éMo o ooo oMoM oo o", + "1472327178828759134993485834695" + ], + "0x60bc3320e4fba9158e4f8d9cdc7414bf1da079fdafdd7f", + ["Moo é🚀🚀o🚀 🚀MMMoooo🚀Mo é"], + "-100264009029520626746929734424966459305570412932003090186969337374347985" + ], + "-265804773336270786045481143919029055925294678857", + "0xe9E5E05bA15f4045D73d7EB85253C1d9abeCf833", + "134878823185249193540015596925965726624038542102523822299128547221290740897" + ], + "-51151670110786870858765808156064554049421747658904715493788141703290798324", + "0xd5ab32c5124e25c634" + ] + ], + "0x2a6068DAd1f6BBBe77CF6F0a42ac3D65B259D9Fb", + ["0xC223bbc9f5a5a89E326b3f7e5ac0B01aAFcB5Ee2"] + ] + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x6410d001c97425a1965f78c30d3360646e3989335dd3" + }, + { + "type": "number", + "value": "16644862840422335500993092708628519663803585550606305186497754215477587088835" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "number", + "value": "771061106154875255899966804204850628057254772833888480666072" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "348114986213313677165994" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x8099046968262A6942735C9890B0FC75BAD6847D" + }, + { + "type": "address", + "value": "0xfab95F73e93B14BF0c8601cAdAb9F82F8daD56Cd" + }, + { + "type": "address", + "value": "0x9be6b1231106E1C933efD7C1F076713247Bfc7b8" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀🚀o Méo🚀é🚀o éM🚀M M o éo éo 🚀o🚀🚀" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x1bF9a57eA5bf4Ac928eb6551578cF2758333353F" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xE532381dbbb4c5bB66D402d6F746642a94877942" + }, + { + "type": "number", + "value": "58106711634641195612230948933095665471199163590707804912306507376007879216445" + }, + { + "type": "string", + "value": "Moo é🚀M MMoo🚀oMoMéM o🚀oM éo MMo é🚀🚀🚀 M" + }, + { + "type": "number", + "value": "-5614648396676007376867724030622" + } + ] + }, + { + "type": "hexstring", + "value": "0x847a85aa550c3646e9bc736b484fb345371807dab87af7" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀MM 🚀MééMéo🚀é éMé M Mé" + } + ] + }, + { + "type": "number", + "value": "-563620570753608512185849581399826292959076287512156992983338256993917757" + } + ] + }, + { + "type": "number", + "value": "521995043317913541414910818064881182845795738001" + }, + { + "type": "address", + "value": "0x2B62F90e860319c913d99faff563dcbDc4cc9A57" + }, + { + "type": "number", + "value": "119077032029940971114927970702756805301587833301977208566163507460447877553" + } + ] + }, + { + "type": "number", + "value": "-206250013158227176431253553237137660863297631858250016252226557568071159547" + }, + { + "type": "hexstring", + "value": "0x927f15e06dad973c1c" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x2Bf3346988e3A3437D6EE45f8F96d3cec6817ac6" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x86A76936e98754F3253B21B9D8E8E52c9f88aC27" + }, + { + "type": "number", + "value": "83488096579900091463435734669090638314302473940696639539393281888537049568957" + }, + { + "type": "string", + "value": "Moo é🚀é é é🚀 🚀éo🚀🚀 🚀éMo o ooo oMoM oo o" + }, + { + "type": "number", + "value": "1472327178828759134993485834695" + } + ] + }, + { + "type": "hexstring", + "value": "0x60bc3320e4fba9158e4f8d9cdc7414bf1da079fdafdd7f" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀o🚀 🚀MMMoooo🚀Mo é" + } + ] + }, + { + "type": "number", + "value": "-100264009029520626746929734424966459305570412932003090186969337374347985" + } + ] + }, + { + "type": "number", + "value": "-265804773336270786045481143919029055925294678857" + }, + { + "type": "address", + "value": "0xe9E5E05bA15f4045D73d7EB85253C1d9abeCf833" + }, + { + "type": "number", + "value": "134878823185249193540015596925965726624038542102523822299128547221290740897" + } + ] + }, + { + "type": "number", + "value": "-51151670110786870858765808156064554049421747658904715493788141703290798324" + }, + { + "type": "hexstring", + "value": "0xd5ab32c5124e25c634" + } + ] + } + ] + }, + { + "type": "address", + "value": "0x2a6068DAd1f6BBBe77CF6F0a42ac3D65B259D9Fb" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xC223bbc9f5a5a89E326b3f7e5ac0B01aAFcB5Ee2" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610d51806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610b3a565b60405180910390f35b610056610643565b61005e610643565b604080516060810182526000602082018181529282015290815260408051808201909152756410d001c97425a1965f78c30d3360646e3989335dd360501b81527f24cca894401c334170d56a7fe1adf6c24a0045c48f90b5b318fd0ea0541215c36020820152815281526100d0610680565b6001808252604080516080810182526060808252600060208084018281528486018381529385018381528651808801909752600a8752689adede418753e13f3560b71b87840152958552787ad64d91dafbae787e4ff6191ca2d5b80133a498be9c1e21d89052915292909152908201526101486106bb565b6949b759e950c3c68505aa815261015d6106d4565b610165610712565b738099046968262a6942735c9890b0fc75bad6847d815273fab95f73e93b14bf0c8601cadab9f82f8dad56cd602080830191909152739be6b1231106e1c933efd7c1f076713247bfc7b8604080840191909152918352815160808101909252604d80835260009291610c639083013960208301525060408051600280825260608201909252600091816020015b6101fa610730565b8152602001906001900390816101f2579050509050610217610730565b731bf9a57ea5bf4ac928eb6551578cf2758333353f8152610236610767565b61023e610795565b6102466107c9565b73e532381dbbb4c5bb66d402d6f746642a9487794281527f80773bb9ea10878e6364e1a823b14e3f470e7fc62a960f07fda17e2188ba4d3d60208083019190915260408051606081018252818152600092909190610cdc908301396040830152506c46dde84cceeb4866da77cef29d19606082015281527f847a85aa550c3646e9bc736b484fb345371807dab87af700000000000000000060208201526102eb6107fd565b60006040518060600160405280602c8152602001610cb0602c91398252506040828101919091527fffffae5626b000590718a75452e79fcf41a1e336b93e9213f4a94f894cd364c3606080840191909152918352735b6f11397190331ee96b434189d41e811c12a191602084810191909152732b62f90e860319c913d99faff563dcbdc4cc9a57848301527e43652c989ab4517e13b6994eeaa814d8771ce2337286db930be31cb43739b1848401528401929092527fff8b4441d37e0113d31f40dbe0e970d5f1412e31d249cff57c7711c25f8131059183019190915268249fc5781b6b65cf0760ba1b908201528151819083906000906103ee576103ee610be4565b602002602001018190525050610402610730565b732bf3346988e3a3437d6ee45f8f96d3cec6817ac68152610421610767565b610429610795565b6104316107c9565b7386a76936e98754f3253b21b9d8e8e52c9f88ac2781527fb894968d6efa703b899620aabc9b3a2f720c0925c636b5f939acffc1d77c16bd6020808301919091526040805160608101909152603f808252600092610c24908301396040830152506c1295587f66c79bdfa600faa9c7606082015281527f60bc3320e4fba9158e4f8d9cdc7414bf1da079fdafdd7f00000000000000000060208201526104d56107fd565b6000604051806060016040528060298152602001610bfb602991398252506040828101919091527ffffff179004f4ef7f40b9c9b5bb5710c2dcaba11de42eddceb4edd965ce16d2f606080840191909152918352732e8f1927b22a952726edcb83e34be31fd62b43481960208481019190915273e9e5e05ba15f4045d73d7eb85253c1d9abecf833848301527e4c56b59b061dbb333e90e174af2cae7ab9ab314f45423f58bca35d7871eca1848401528401929092527fffe30c971b277e04b3740bcaab0b5bd571f041fd8d1ff720b7646cf6323a3f0c9183019190915268356accb1449389718d60ba1b9082015281518190839060019081106105db576105db610be4565b6020908102919091010152506040820152732a6068dad1f6bbbe77cf6f0a42ac3d65b259d9fb606082015261060e610824565b73c223bbc9f5a5a89e326b3f7e5ac0b01aafcb5ee2815260808201526020828101919091526040830191909152820152919050565b604051806040016040528061066e604080516060810182526000602082018181529282015290815290565b815260200161067b610680565b905290565b6040805160608082018352600080835283516080810185528281526020818101839052948101829052918201529091820190815260200161067b5b6040518060400160405280600060090b815260200161067b5b6040518060a001604052806106e7610712565b8152602001606081526020016060815260200160006001600160a01b0316815260200161067b610824565b60405180606001604052806003906020820280368337509192915050565b604051806080016040528060006001600160a01b03168152602001610753610767565b815260006020820181905260409091015290565b604051806080016040528061077a610795565b81526000602082018190526040820181905260609091015290565b60405180608001604052806107a86107c9565b8152600060208201526040016107bc6107fd565b8152600060209091015290565b604051806080016040528060006001600160a01b0316815260200160008152602001606081526020016000600c0b81525090565b60405180602001604052806001905b606081526020019060019003908161080c5790505090565b60405180602001604052806001906020820280368337509192915050565b6000815180845260005b818110156108685760208185018101518683018201520161084c565b8181111561087a576000602083870101525b50601f01601f19169290920160200192915050565b60008260208082018460005b60018110156108c65784830388526108b4838351610842565b9784019792509083019060010161089b565b50909695505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015610a3a5782840389528151608060018060a01b03808351168752878301518289890152805183848a01528051846101008b0152838151166101808b01528a8101516101a08b01526040935083810151856101c08c01526109586102008c0182610842565b955050606080820151600c0b6101e08c01528b83015191506109896101208c018368ffffffffffffffffff19169052565b828501518b870360ff19016101408d015291506109a6868361088f565b928101519295506109bd6101608c0184601d0b9052565b8b84015192506109d260a08c018460130b9052565b838501516001600160a01b03811660c08d0152925092830151926109fb60e08c0185601e0b9052565b848701519350610a0f858c0185601e0b9052565b958601516001600160b81b0319169990950198909852505099860199945050908401906001016108f0565b5091979650505050505050565b8060005b6001811015610a735781516001600160a01b0316845260209384019390910190600101610a4b565b50505050565b805160090b82526020808201516040828501819052815160009390929091849087015b6003821015610ac45784516001600160a01b0316815293830193600191909101908301610a9c565b505081810151925060e060a0870152610ae1610120870184610842565b925060408101519150603f198684030160c0870152610b0083836108d2565b925060608101519150610b1e60e08701836001600160a01b03169052565b608001519050610b32610100860182610a47565b509392505050565b6000602080835283515169ffffffffffffffffffff1981511682850152818101516040850152508084015160608085015280511515608085015281810151606060a08601528051608060e0870152610b96610160870182610842565b9382015160180b61010087015250604080820151151561012087015260608201511515610140870152820151858403607f190160c087015292610bd98185610a79565b979650505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a806ff09f9a8020f09f9a804d4d4d6f6f6f6ff09f9a804d6f2020c3a94d6f6f20c3a9f09f9a80c3a920c3a920c3a9f09f9a8020f09f9a80c3a96ff09f9a80f09f9a8020f09f9a80c3a94d6f206f206f6f6f206f4d6f4d206f6f206f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a806f20204dc3a96ff09f9a80c3a9f09f9a806f2020c3a94df09f9a804d204d20206f20c3a96f20c3a96f20f09f9a806ff09f9a80f09f9a804d6f6f20c3a9f09f9a804d4d20f09f9a804dc3a9c3a94dc3a96ff09f9a80c3a920c3a94dc3a9204d204dc3a94d6f6f20c3a9f09f9a804d20204d4d6f6ff09f9a806f4d6f4dc3a94d20206ff09f9a806f4d20c3a96f204d4d6f202020c3a9f09f9a80f09f9a80f09f9a80204da26469706673582212200d25444a849a1abf2509fa5494646b729020b9a85d9ac6ac357f05ccbdbcfed164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_5dcec426 {\n bytes22 s_0;\n int256 s_1;\n }\n\n struct S_d18995c1 {\n S_5dcec426 s_0;\n }\n\n struct S_36848ab0 {\n string s_0;\n int200 s_1;\n bool s_2;\n bool s_3;\n }\n\n struct S_e982deac {\n address s_0;\n uint256 s_1;\n string s_2;\n int104 s_3;\n }\n\n struct S_d49c2149 {\n S_e982deac s_0;\n bytes23 s_1;\n string[1] s_2;\n int240 s_3;\n }\n\n struct S_b784ecdf {\n S_d49c2149 s_0;\n int160 s_1;\n address s_2;\n int248 s_3;\n }\n\n struct S_b01a005b {\n address s_0;\n S_b784ecdf s_1;\n int248 s_2;\n bytes9 s_3;\n }\n\n struct S_8e484065 {\n address[3] s_0;\n string s_1;\n S_b01a005b[] s_2;\n address s_3;\n address[1] s_4;\n }\n\n struct S_4d7a43f2 {\n int80 s_0;\n S_8e484065 s_1;\n }\n\n struct S_f501bf89 {\n bool s_0;\n S_36848ab0 s_1;\n S_4d7a43f2 s_2;\n }\n\n struct S_cee4a8a5 {\n S_d18995c1 s_0;\n S_f501bf89 s_1;\n }\n\n function test () public pure returns (S_cee4a8a5 memory) {\n S_cee4a8a5 memory r;\n {\n S_d18995c1 memory r_0;\n {\n S_5dcec426 memory r_0_0;\n {\n bytes22 r_0_0_0 = bytes22(0x6410d001c97425a1965f78c30d3360646e3989335dd3);\n r_0_0.s_0 = r_0_0_0;\n }\n {\n int256 r_0_0_1 = 16644862840422335500993092708628519663803585550606305186497754215477587088835;\n r_0_0.s_1 = r_0_0_1;\n }\n r_0.s_0 = r_0_0;\n }\n r.s_0 = r_0;\n }\n {\n S_f501bf89 memory r_1;\n {\n bool r_1_0 = true;\n r_1.s_0 = r_1_0;\n }\n {\n S_36848ab0 memory r_1_1;\n {\n string memory r_1_1_0 = unicode\"Moo é🚀\";\n r_1_1.s_0 = r_1_1_0;\n }\n {\n int200 r_1_1_1 = 771061106154875255899966804204850628057254772833888480666072;\n r_1_1.s_1 = r_1_1_1;\n }\n {\n bool r_1_1_2 = false;\n r_1_1.s_2 = r_1_1_2;\n }\n {\n bool r_1_1_3 = true;\n r_1_1.s_3 = r_1_1_3;\n }\n r_1.s_1 = r_1_1;\n }\n {\n S_4d7a43f2 memory r_1_2;\n {\n int80 r_1_2_0 = 348114986213313677165994;\n r_1_2.s_0 = r_1_2_0;\n }\n {\n S_8e484065 memory r_1_2_1;\n {\n address[3] memory r_1_2_1_0;\n {\n address r_1_2_1_0_0 = 0x8099046968262A6942735C9890B0FC75BAD6847D;\n r_1_2_1_0[0] = r_1_2_1_0_0;\n }\n {\n address r_1_2_1_0_1 = 0xfab95F73e93B14BF0c8601cAdAb9F82F8daD56Cd;\n r_1_2_1_0[1] = r_1_2_1_0_1;\n }\n {\n address r_1_2_1_0_2 = 0x9be6b1231106E1C933efD7C1F076713247Bfc7b8;\n r_1_2_1_0[2] = r_1_2_1_0_2;\n }\n r_1_2_1.s_0 = r_1_2_1_0;\n }\n {\n string memory r_1_2_1_1 = unicode\"Moo é🚀🚀🚀🚀o Méo🚀é🚀o éM🚀M M o éo éo 🚀o🚀🚀\";\n r_1_2_1.s_1 = r_1_2_1_1;\n }\n {\n S_b01a005b[] memory r_1_2_1_2 = new S_b01a005b[](2);\n {\n S_b01a005b memory r_1_2_1_2_0;\n {\n address r_1_2_1_2_0_0 = 0x1bF9a57eA5bf4Ac928eb6551578cF2758333353F;\n r_1_2_1_2_0.s_0 = r_1_2_1_2_0_0;\n }\n {\n S_b784ecdf memory r_1_2_1_2_0_1;\n {\n S_d49c2149 memory r_1_2_1_2_0_1_0;\n {\n S_e982deac memory r_1_2_1_2_0_1_0_0;\n {\n address r_1_2_1_2_0_1_0_0_0 = 0xE532381dbbb4c5bB66D402d6F746642a94877942;\n r_1_2_1_2_0_1_0_0.s_0 = r_1_2_1_2_0_1_0_0_0;\n }\n {\n uint r_1_2_1_2_0_1_0_0_1 = 58106711634641195612230948933095665471199163590707804912306507376007879216445;\n r_1_2_1_2_0_1_0_0.s_1 = r_1_2_1_2_0_1_0_0_1;\n }\n {\n string memory r_1_2_1_2_0_1_0_0_2 = unicode\"Moo é🚀M MMoo🚀oMoMéM o🚀oM éo MMo é🚀🚀🚀 M\";\n r_1_2_1_2_0_1_0_0.s_2 = r_1_2_1_2_0_1_0_0_2;\n }\n {\n int104 r_1_2_1_2_0_1_0_0_3 = -5614648396676007376867724030622;\n r_1_2_1_2_0_1_0_0.s_3 = r_1_2_1_2_0_1_0_0_3;\n }\n r_1_2_1_2_0_1_0.s_0 = r_1_2_1_2_0_1_0_0;\n }\n {\n bytes23 r_1_2_1_2_0_1_0_1 = bytes23(0x847a85aa550c3646e9bc736b484fb345371807dab87af7);\n r_1_2_1_2_0_1_0.s_1 = r_1_2_1_2_0_1_0_1;\n }\n {\n string[1] memory r_1_2_1_2_0_1_0_2;\n {\n string memory r_1_2_1_2_0_1_0_2_0 = unicode\"Moo é🚀MM 🚀MééMéo🚀é éMé M Mé\";\n r_1_2_1_2_0_1_0_2[0] = r_1_2_1_2_0_1_0_2_0;\n }\n r_1_2_1_2_0_1_0.s_2 = r_1_2_1_2_0_1_0_2;\n }\n {\n int240 r_1_2_1_2_0_1_0_3 = -563620570753608512185849581399826292959076287512156992983338256993917757;\n r_1_2_1_2_0_1_0.s_3 = r_1_2_1_2_0_1_0_3;\n }\n r_1_2_1_2_0_1.s_0 = r_1_2_1_2_0_1_0;\n }\n {\n int160 r_1_2_1_2_0_1_1 = 521995043317913541414910818064881182845795738001;\n r_1_2_1_2_0_1.s_1 = r_1_2_1_2_0_1_1;\n }\n {\n address r_1_2_1_2_0_1_2 = 0x2B62F90e860319c913d99faff563dcbDc4cc9A57;\n r_1_2_1_2_0_1.s_2 = r_1_2_1_2_0_1_2;\n }\n {\n int248 r_1_2_1_2_0_1_3 = 119077032029940971114927970702756805301587833301977208566163507460447877553;\n r_1_2_1_2_0_1.s_3 = r_1_2_1_2_0_1_3;\n }\n r_1_2_1_2_0.s_1 = r_1_2_1_2_0_1;\n }\n {\n int248 r_1_2_1_2_0_2 = -206250013158227176431253553237137660863297631858250016252226557568071159547;\n r_1_2_1_2_0.s_2 = r_1_2_1_2_0_2;\n }\n {\n bytes9 r_1_2_1_2_0_3 = bytes9(0x927f15e06dad973c1c);\n r_1_2_1_2_0.s_3 = r_1_2_1_2_0_3;\n }\n r_1_2_1_2[0] = r_1_2_1_2_0;\n }\n {\n S_b01a005b memory r_1_2_1_2_1;\n {\n address r_1_2_1_2_1_0 = 0x2Bf3346988e3A3437D6EE45f8F96d3cec6817ac6;\n r_1_2_1_2_1.s_0 = r_1_2_1_2_1_0;\n }\n {\n S_b784ecdf memory r_1_2_1_2_1_1;\n {\n S_d49c2149 memory r_1_2_1_2_1_1_0;\n {\n S_e982deac memory r_1_2_1_2_1_1_0_0;\n {\n address r_1_2_1_2_1_1_0_0_0 = 0x86A76936e98754F3253B21B9D8E8E52c9f88aC27;\n r_1_2_1_2_1_1_0_0.s_0 = r_1_2_1_2_1_1_0_0_0;\n }\n {\n uint r_1_2_1_2_1_1_0_0_1 = 83488096579900091463435734669090638314302473940696639539393281888537049568957;\n r_1_2_1_2_1_1_0_0.s_1 = r_1_2_1_2_1_1_0_0_1;\n }\n {\n string memory r_1_2_1_2_1_1_0_0_2 = unicode\"Moo é🚀é é é🚀 🚀éo🚀🚀 🚀éMo o ooo oMoM oo o\";\n r_1_2_1_2_1_1_0_0.s_2 = r_1_2_1_2_1_1_0_0_2;\n }\n {\n int104 r_1_2_1_2_1_1_0_0_3 = 1472327178828759134993485834695;\n r_1_2_1_2_1_1_0_0.s_3 = r_1_2_1_2_1_1_0_0_3;\n }\n r_1_2_1_2_1_1_0.s_0 = r_1_2_1_2_1_1_0_0;\n }\n {\n bytes23 r_1_2_1_2_1_1_0_1 = bytes23(0x60bc3320e4fba9158e4f8d9cdc7414bf1da079fdafdd7f);\n r_1_2_1_2_1_1_0.s_1 = r_1_2_1_2_1_1_0_1;\n }\n {\n string[1] memory r_1_2_1_2_1_1_0_2;\n {\n string memory r_1_2_1_2_1_1_0_2_0 = unicode\"Moo é🚀🚀o🚀 🚀MMMoooo🚀Mo é\";\n r_1_2_1_2_1_1_0_2[0] = r_1_2_1_2_1_1_0_2_0;\n }\n r_1_2_1_2_1_1_0.s_2 = r_1_2_1_2_1_1_0_2;\n }\n {\n int240 r_1_2_1_2_1_1_0_3 = -100264009029520626746929734424966459305570412932003090186969337374347985;\n r_1_2_1_2_1_1_0.s_3 = r_1_2_1_2_1_1_0_3;\n }\n r_1_2_1_2_1_1.s_0 = r_1_2_1_2_1_1_0;\n }\n {\n int160 r_1_2_1_2_1_1_1 = -265804773336270786045481143919029055925294678857;\n r_1_2_1_2_1_1.s_1 = r_1_2_1_2_1_1_1;\n }\n {\n address r_1_2_1_2_1_1_2 = 0xe9E5E05bA15f4045D73d7EB85253C1d9abeCf833;\n r_1_2_1_2_1_1.s_2 = r_1_2_1_2_1_1_2;\n }\n {\n int248 r_1_2_1_2_1_1_3 = 134878823185249193540015596925965726624038542102523822299128547221290740897;\n r_1_2_1_2_1_1.s_3 = r_1_2_1_2_1_1_3;\n }\n r_1_2_1_2_1.s_1 = r_1_2_1_2_1_1;\n }\n {\n int248 r_1_2_1_2_1_2 = -51151670110786870858765808156064554049421747658904715493788141703290798324;\n r_1_2_1_2_1.s_2 = r_1_2_1_2_1_2;\n }\n {\n bytes9 r_1_2_1_2_1_3 = bytes9(0xd5ab32c5124e25c634);\n r_1_2_1_2_1.s_3 = r_1_2_1_2_1_3;\n }\n r_1_2_1_2[1] = r_1_2_1_2_1;\n }\n r_1_2_1.s_2 = r_1_2_1_2;\n }\n {\n address r_1_2_1_3 = 0x2a6068DAd1f6BBBe77CF6F0a42ac3D65B259D9Fb;\n r_1_2_1.s_3 = r_1_2_1_3;\n }\n {\n address[1] memory r_1_2_1_4;\n {\n address r_1_2_1_4_0 = 0xC223bbc9f5a5a89E326b3f7e5ac0B01aAFcB5Ee2;\n r_1_2_1_4[0] = r_1_2_1_4_0;\n }\n r_1_2_1.s_4 = r_1_2_1_4;\n }\n r_1_2.s_1 = r_1_2_1;\n }\n r_1.s_2 = r_1_2;\n }\n r.s_1 = r_1;\n }\n return r;\n }\n}", + "encoded": "0x00000000000000000000000000000000000000000000000000000000000000206410d001c97425a1965f78c30d3360646e3989335dd30000000000000000000024cca894401c334170d56a7fe1adf6c24a0045c48f90b5b318fd0ea0541215c300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000080000000000000007ad64d91dafbae787e4ff6191ca2d5b80133a498be9c1e21d800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049b759e950c3c68505aa00000000000000000000000000000000000000000000000000000000000000400000000000000000000000008099046968262a6942735c9890b0fc75bad6847d000000000000000000000000fab95f73e93b14bf0c8601cadab9f82f8dad56cd0000000000000000000000009be6b1231106e1c933efd7c1f076713247bfc7b800000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001600000000000000000000000002a6068dad1f6bbbe77cf6f0a42ac3d65b259d9fb000000000000000000000000c223bbc9f5a5a89e326b3f7e5ac0b01aafcb5ee2000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a80f09f9a80f09f9a80f09f9a806f20204dc3a96ff09f9a80c3a9f09f9a806f2020c3a94df09f9a804d204d20206f20c3a96f20c3a96f20f09f9a806ff09f9a80f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003200000000000000000000000001bf9a57ea5bf4ac928eb6551578cf2758333353f0000000000000000000000000000000000000000000000000000000000000080ff8b4441d37e0113d31f40dbe0e970d5f1412e31d249cff57c7711c25f813105927f15e06dad973c1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000005b6f11397190331ee96b434189d41e811c12a1910000000000000000000000002b62f90e860319c913d99faff563dcbdc4cc9a570043652c989ab4517e13b6994eeaa814d8771ce2337286db930be31cb43739b10000000000000000000000000000000000000000000000000000000000000080847a85aa550c3646e9bc736b484fb345371807dab87af70000000000000000000000000000000000000000000000000000000000000000000000000000000160ffffae5626b000590718a75452e79fcf41a1e336b93e9213f4a94f894cd364c3000000000000000000000000e532381dbbb4c5bb66d402d6f746642a9487794280773bb9ea10878e6364e1a823b14e3f470e7fc62a960f07fda17e2188ba4d3d0000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffffffffffffb92217b33114b7992588310d6200000000000000000000000000000000000000000000000000000000000000404d6f6f20c3a9f09f9a804d20204d4d6f6ff09f9a806f4d6f4dc3a94d20206ff09f9a806f4d20c3a96f204d4d6f202020c3a9f09f9a80f09f9a80f09f9a80204d0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002c4d6f6f20c3a9f09f9a804d4d20f09f9a804dc3a9c3a94dc3a96ff09f9a80c3a920c3a94dc3a9204d204dc3a900000000000000000000000000000000000000000000000000000000000000002bf3346988e3a3437d6ee45f8f96d3cec6817ac60000000000000000000000000000000000000000000000000000000000000080ffe30c971b277e04b3740bcaab0b5bd571f041fd8d1ff720b7646cf6323a3f0cd5ab32c5124e25c63400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffffd170e6d84dd56ad8d912347c1cb41ce029d4bcb7000000000000000000000000e9e5e05ba15f4045d73d7eb85253c1d9abecf833004c56b59b061dbb333e90e174af2cae7ab9ab314f45423f58bca35d7871eca1000000000000000000000000000000000000000000000000000000000000008060bc3320e4fba9158e4f8d9cdc7414bf1da079fdafdd7f0000000000000000000000000000000000000000000000000000000000000000000000000000000160fffff179004f4ef7f40b9c9b5bb5710c2dcaba11de42eddceb4edd965ce16d2f00000000000000000000000086a76936e98754f3253b21b9d8e8e52c9f88ac27b894968d6efa703b899620aabc9b3a2f720c0925c636b5f939acffc1d77c16bd0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000001295587f66c79bdfa600faa9c7000000000000000000000000000000000000000000000000000000000000003f4d6f6f20c3a9f09f9a80c3a920c3a920c3a9f09f9a8020f09f9a80c3a96ff09f9a80f09f9a8020f09f9a80c3a94d6f206f206f6f6f206f4d6f4d206f6f206f00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000294d6f6f20c3a9f09f9a80f09f9a806ff09f9a8020f09f9a804d4d4d6f6f6f6ff09f9a804d6f2020c3a90000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,((bytes3,(bytes15,bytes18,(bytes11,string,bytes12,bool)[1][4]),uint104,(address,string,bytes29[3],string),(bytes25,bool[],string[],bool,(address,bool,uint152)[2]))),address[3][1])", + "type": "(string,((bytes3,(bytes15,bytes18,(bytes11,string,bytes12,bool)[1][4]),uint104,(address,string,bytes29[3],string),(bytes25,bool[],string[],bool,(address,bool,uint152)[2]))),address[3][1])", + "value": [ + "Moo é🚀M 🚀o", + [ + [ + "0xdc5976", + [ + "0xa753a1a23169d014eedbe537b10076", + "0x224cb660ac1be9955209139e54691dd9c648", + [ + [ + [ + "0x78f454179c2ffd2a54b66f", + "Moo é🚀", + "0x343c687de62671dfd10ef3e7", + false + ] + ], + [ + [ + "0xe8b1cd29d67777c1a43348", + "Moo é🚀MoMé oo🚀 o Méé🚀 o 🚀🚀Mé🚀é oé Mo", + "0x705d93adb327ffe1174aca94", + false + ] + ], + [ + [ + "0xa347609da05247782b419b", + "Moo é🚀oé 🚀o🚀🚀 ooéoéMM🚀ooé", + "0x7c7ac2ea5c59c21810d551b6", + false + ] + ], + [ + [ + "0x72d0f1198a1eb046f378fa", + "Moo é🚀M🚀 🚀oéo oo oéMMéo éo🚀oéo 🚀éooo🚀oMo oMoo🚀🚀é🚀🚀Moé éo o", + "0xf4dc919c266264224bf842c3", + true + ] + ] + ] + ], + "7598157658436859234271441995675", + [ + "0x79E8e81b8A5a9e3e076edE5Bb16638e41F03E198", + "Moo é🚀é🚀oooMo🚀o é oMM oooééo", + [ + "0x15b0fb673f4147a2850f9c1d4203f6286cb2ae27abc0bc55ee6e23ee81", + "0xfe7bff3c8fb4ee9a280dcda7451efbaba0a00ea0c421bb6a5810a920ce", + "0x21b3e529217defe687458ea95697bda10871ba7ada0f484f9802623764" + ], + "Moo é🚀o🚀oéoM🚀🚀oo🚀o" + ], + [ + "0x6234d83f31aab9006a16152c0e4ca604087559292f7d9e6361", + [true], + [ + "Moo é🚀oéMéééM ééoMoo🚀MMMoé 🚀é éé🚀M🚀 ooé🚀o MéooéM Mo", + "Moo é🚀o ooé🚀oMMMM🚀é oo 🚀éM ooéooooMooé🚀 ooéMo o", + "Moo é🚀oMMM 🚀MMé🚀MéooM🚀🚀MMéo🚀oéoMoo🚀🚀M🚀éoéMoMo éoM MoMM🚀" + ], + true, + [ + [ + "0x5F8B47770D099234Bbe04f5C00e2d3c9C9771Cd7", + true, + "3290481995610493170978580998006430724915579280" + ], + [ + "0x3973981Cdee11459DeADD244e665F23C0AA35335", + false, + "5343260894431772871393872023759014814660615935" + ] + ] + ] + ] + ], + [ + [ + "0x2e8cC9c5FCCa7280684154668cC6c78774D0c353", + "0x42C3Ab0C1Af8ecd85172e6BC2275ACA4c2C59673", + "0x41E9616EB62bF6b02278E1448c36c7e6d608c36c" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M 🚀o" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xdc5976" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa753a1a23169d014eedbe537b10076" + }, + { + "type": "hexstring", + "value": "0x224cb660ac1be9955209139e54691dd9c648" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x78f454179c2ffd2a54b66f" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "hexstring", + "value": "0x343c687de62671dfd10ef3e7" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xe8b1cd29d67777c1a43348" + }, + { + "type": "string", + "value": "Moo é🚀MoMé oo🚀 o Méé🚀 o 🚀🚀Mé🚀é oé Mo" + }, + { + "type": "hexstring", + "value": "0x705d93adb327ffe1174aca94" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa347609da05247782b419b" + }, + { + "type": "string", + "value": "Moo é🚀oé 🚀o🚀🚀 ooéoéMM🚀ooé" + }, + { + "type": "hexstring", + "value": "0x7c7ac2ea5c59c21810d551b6" + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x72d0f1198a1eb046f378fa" + }, + { + "type": "string", + "value": "Moo é🚀M🚀 🚀oéo oo oéMMéo éo🚀oéo 🚀éooo🚀oMo oMoo🚀🚀é🚀🚀Moé éo o" + }, + { + "type": "hexstring", + "value": "0xf4dc919c266264224bf842c3" + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "number", + "value": "7598157658436859234271441995675" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x79E8e81b8A5a9e3e076edE5Bb16638e41F03E198" + }, + { + "type": "string", + "value": "Moo é🚀é🚀oooMo🚀o é oMM oooééo" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x15b0fb673f4147a2850f9c1d4203f6286cb2ae27abc0bc55ee6e23ee81" + }, + { + "type": "hexstring", + "value": "0xfe7bff3c8fb4ee9a280dcda7451efbaba0a00ea0c421bb6a5810a920ce" + }, + { + "type": "hexstring", + "value": "0x21b3e529217defe687458ea95697bda10871ba7ada0f484f9802623764" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀oéoM🚀🚀oo🚀o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x6234d83f31aab9006a16152c0e4ca604087559292f7d9e6361" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéMéééM ééoMoo🚀MMMoé 🚀é éé🚀M🚀 ooé🚀o MéooéM Mo" + }, + { + "type": "string", + "value": "Moo é🚀o ooé🚀oMMMM🚀é oo 🚀éM ooéooooMooé🚀 ooéMo o" + }, + { + "type": "string", + "value": "Moo é🚀oMMM 🚀MMé🚀MéooM🚀🚀MMéo🚀oéoMoo🚀🚀M🚀éoéMoMo éoM MoMM🚀" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x5F8B47770D099234Bbe04f5C00e2d3c9C9771Cd7" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "3290481995610493170978580998006430724915579280" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x3973981Cdee11459DeADD244e665F23C0AA35335" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "5343260894431772871393872023759014814660615935" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x2e8cC9c5FCCa7280684154668cC6c78774D0c353" + }, + { + "type": "address", + "value": "0x42C3Ab0C1Af8ecd85172e6BC2275ACA4c2C59673" + }, + { + "type": "address", + "value": "0x41E9616EB62bF6b02278E1448c36c7e6d608c36c" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610f04806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610aef565b60405180910390f35b61005661067b565b61005e61067b565b6040805180820190915260118152704d6f6f20c3a9f09f9a804d20f09f9a806f60781b602082015281526100906106a7565b6100986106b6565b626e2cbb60e91b81526100a96106f2565b6e53a9d0d118b4e80a776df29bd8803b60891b815271044996cc15837d32aa412273ca8d23bb38c960731b60208201526100e161070d565b6100e961073a565b604080516080810182526060602080830182815260008486018181529385018181526a78f454179c2ffd2a54b66f60a81b86528651808801909752600a8752689adede418753e13f3560b71b938701939093529490526b343c687de62671dfd10ef3e760a01b909152919091528152815261016261073a565b60408051608080820183526060602080840182905260008486018190529184018290526a1d1639a53aceeef834866960ab1b8452845192830190945260418083529293909290610e61908301396020838101919091526b1c1764eb6cc9fff845d2b2a560a21b604084015260006060840152918352508201526101e361073a565b604080516080810182526060602080830182905260008385018190528284018190526aa347609da05247782b419b60a81b84528451928301909452602d80835292939290610ea2908301396020830152506b3e3d61752e2ce10c086aa8db60a11b6040808301919091526000606083015290825282015261026261073a565b604080516080810182526060602080830182905260008385018190529183018290526a3968788cc50f582379bc7d60a91b8352835160a0810190945260648085529293919290610dfd908301396020838101919091526bf4dc919c266264224bf842c360a01b60408085019190915260016060808601919091529385529285019390935250838101929092528301919091526c5fe6f8b4c83b162afd32b4479b9082015261030e610780565b7379e8e81b8a5a9e3e076ede5bb16638e41f03e19881526040805160608101909152602a80825260009190610d15602083013960208301525061034f6107ad565b7f15b0fb673f4147a2850f9c1d4203f6286cb2ae27abc0bc55ee6e23ee8100000081527ffe7bff3c8fb4ee9a280dcda7451efbaba0a00ea0c421bb6a5810a920ce0000006020808301919091527f21b3e529217defe687458ea95697bda10871ba7ada0f484f980262376400000060408084019190915283810192909252815160608101909252602380835260009291610d3f90830139606080840191909152830191909152506103fe6107cb565b7f6234d83f31aab9006a16152c0e4ca604087559292f7d9e636100000000000000815260408051600180825281830190925260009160208083019080368337019050509050600060019050808260008151811061045d5761045d610ca1565b9115156020928302919091018201528301919091525060408051600380825260808201909252600091816020015b606081526020019060019003908161048b5790505090506000604051806080016040528060548152602001610d6260549139905080826000815181106104d3576104d3610ca1565b6020026020010181905250506000604051806080016040528060478152602001610db6604791399050808260018151811061051057610510610ca1565b60200260200101819052505060006040518060800160405280605d8152602001610cb8605d91399050808260028151811061054d5761054d610ca1565b60209081029190910101525060408201526001606082015261056d610802565b6040805160608082018352735f8b47770d099234bbe04f5c00e2d3c9c9771cd78252600160208084019190915272938ce17e4954f0970e964e1a04dd452695c9908385015291845282519081018352600081830152733973981cdee11459deadd244e665f23c0aa35335815272ef99a07dadf298b8eb81dabb52783ab316deff928101929092528281019190915260808381019290925290830191909152908252820152610619610841565b6106216107ad565b732e8cc9c5fcca7280684154668cc6c78774d0c35381527342c3ab0c1af8ecd85172e6bc2275aca4c2c5967360208201527341e9616eb62bf6b02278e1448c36c7e6d608c36c604080830191909152908252820152919050565b6040518060600160405280606081526020016106956106a7565b81526020016106a2610841565b905290565b60405180602001604052806106a25b6040805160a0810190915260008152602081016106d16106f2565b8152600060208201526040016106e5610780565b81526020016106a26107cb565b60408051606081018252600080825260208201529081016106a25b60405180608001604052806004905b61072461073a565b81526020019060019003908161071c5790505090565b60405180602001604052806001905b6040805160808101825260008082526060602080840182905293830182905282015282526000199092019101816107495790505090565b6040805160808101825260008152606060208201529081016107a06107ad565b8152602001606081525090565b60405180606001604052806003906020820280368337509192915050565b6040518060a00160405280600066ffffffffffffff1916815260200160608152602001606081526020016000151581526020016106a25b60405180604001604052806002905b60408051606081018252600080825260208083018290529282015282526000199092019101816108115790505090565b60405180602001604052806001905b6108586107ad565b8152602001906001900390816108505790505090565b6000815180845260005b8181101561089457602081850181015186830182015201610878565b818111156108a6576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b038151168252600060208083015160c0828601526108e260c086018261086e565b905060408401516040860160005b600381101561091357825162ffffff1916825291840191908401906001016108f0565b5050506060840151915084810360a086015261092f818361086e565b95945050505050565b6000815180845260208085019450848260051b860182860160005b8581101561097d57838303895261096b83835161086e565b98850198925090840190600101610953565b5090979650505050505050565b8060005b60028110156109e657815180516001600160a01b0316855260208082015115158187015260409182015172ffffffffffffffffffffffffffffffffffffff16918601919091526060909401939091019060010161098e565b50505050565b805166ffffffffffffff19168252602080820151610140828501819052815190850181905260009261016086019281019184905b80821015610a4257835115158552938201939282019260019190910190610a20565b5050505060408301518482036040860152610a5d8282610938565b9150506060830151610a73606086018215159052565b506080830151610a86608086018261098a565b509392505050565b806000805b6001808210610aa25750610ae8565b835186845b6003811015610ace5782516001600160a01b03168252602092830192909101908301610aa7565b505050606095909501945060209290920191600101610a93565b5050505050565b60006020808352835160a082850152610b0b60c085018261086e565b82860151601f198683038101604080890191909152915185845280516001600160e81b031916848701528086015160a084860152805170ffffffffffffffffffffffffffffffffff191660c0860152808701516dffffffffffffffffffffffffffff191660e08601528301516060610100860152939450929091906101a08501610120860160005b6004811015610c325787830361011f190182528351838a810160005b6001811015610c1d57868203835283516affffffffffffffffffffff60a81b81511683528d81015160808f850152610bea608085018261086e565b828c01516001600160a01b031916858d01526060928301511515929094019190915250928c0192918c0191600101610baf565b50958b01959450505090880190600101610b93565b5050848301516cffffffffffffffffffffffffff8116606088015296506060850151965083868203016080870152610c6a81886108bb565b9650505060808301519250818486030160a0850152610c8985846109ec565b9450808801519350505050610a866060850182610a8e565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f4d4d4d20f09f9a804d4dc3a9f09f9a804dc3a96f6f4df09f9a80f09f9a804d4dc3a96ff09f9a806fc3a96f4d6f6ff09f9a80f09f9a804df09f9a80c3a96fc3a94d6f4d6f20c3a96f4d204d6f4d4df09f9a804d6f6f20c3a9f09f9a80c3a9f09f9a806f6f6f4d6ff09f9a806f20c3a9206f4d4d206f6f6fc3a9c3a96f4d6f6f20c3a9f09f9a806ff09f9a806fc3a96f4df09f9a80f09f9a806f6ff09f9a806f4d6f6f20c3a9f09f9a806fc3a94dc3a9c3a9c3a94d20c3a9c3a96f4d6f6ff09f9a804d4d4d6fc3a92020f09f9a80c3a920c3a9c3a9f09f9a804df09f9a80206f6fc3a9f09f9a806f204dc3a96f6fc3a94d204d6f4d6f6f20c3a9f09f9a806f206f6fc3a9f09f9a806f4d4d4d4df09f9a80c3a9206f6f20f09f9a80c3a94d20206f6fc3a96f6f6f6f4d6f6fc3a9f09f9a80206f6fc3a94d6f20206f4d6f6f20c3a9f09f9a804df09f9a8020f09f9a806fc3a96f206f6f206fc3a94d4dc3a96f2020c3a96ff09f9a806fc3a96f20f09f9a80c3a96f6f6ff09f9a806f4d6f206f4d6f6ff09f9a80f09f9a80c3a9f09f9a80f09f9a804d6fc3a92020c3a96f206f4d6f6f20c3a9f09f9a804d6f4dc3a9206f6ff09f9a80206f204dc3a9c3a9f09f9a802020206f2020f09f9a80f09f9a804dc3a9f09f9a80c3a9206fc3a920204d6f4d6f6f20c3a9f09f9a806fc3a920f09f9a806ff09f9a80f09f9a80206f6fc3a96fc3a94d4df09f9a806f6fc3a9a2646970667358221220a53bfc131a5d2de754df440676b4f8ec39bb44ccc7cb8d80d75b82c7bf39815664736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_237fc942 {\n bytes11 s_0;\n string s_1;\n bytes12 s_2;\n bool s_3;\n }\n\n struct S_cb3aa033 {\n bytes15 s_0;\n bytes18 s_1;\n S_237fc942[1][4] s_2;\n }\n\n struct S_65f572f0 {\n address s_0;\n string s_1;\n bytes29[3] s_2;\n string s_3;\n }\n\n struct S_64039d39 {\n address s_0;\n bool s_1;\n uint152 s_2;\n }\n\n struct S_5ed2fe1d {\n bytes25 s_0;\n bool[] s_1;\n string[] s_2;\n bool s_3;\n S_64039d39[2] s_4;\n }\n\n struct S_e6ccb0a3 {\n bytes3 s_0;\n S_cb3aa033 s_1;\n uint104 s_2;\n S_65f572f0 s_3;\n S_5ed2fe1d s_4;\n }\n\n struct S_17ec986b {\n S_e6ccb0a3 s_0;\n }\n\n struct S_37839f5f {\n string s_0;\n S_17ec986b s_1;\n address[3][1] s_2;\n }\n\n function test () public pure returns (S_37839f5f memory) {\n S_37839f5f memory r;\n {\n string memory r_0 = unicode\"Moo é🚀M 🚀o\";\n r.s_0 = r_0;\n }\n {\n S_17ec986b memory r_1;\n {\n S_e6ccb0a3 memory r_1_0;\n {\n bytes3 r_1_0_0 = bytes3(0xdc5976);\n r_1_0.s_0 = r_1_0_0;\n }\n {\n S_cb3aa033 memory r_1_0_1;\n {\n bytes15 r_1_0_1_0 = bytes15(0xa753a1a23169d014eedbe537b10076);\n r_1_0_1.s_0 = r_1_0_1_0;\n }\n {\n bytes18 r_1_0_1_1 = bytes18(0x224cb660ac1be9955209139e54691dd9c648);\n r_1_0_1.s_1 = r_1_0_1_1;\n }\n {\n S_237fc942[1][4] memory r_1_0_1_2;\n {\n S_237fc942[1] memory r_1_0_1_2_0;\n {\n S_237fc942 memory r_1_0_1_2_0_0;\n {\n bytes11 r_1_0_1_2_0_0_0 = bytes11(0x78f454179c2ffd2a54b66f);\n r_1_0_1_2_0_0.s_0 = r_1_0_1_2_0_0_0;\n }\n {\n string memory r_1_0_1_2_0_0_1 = unicode\"Moo é🚀\";\n r_1_0_1_2_0_0.s_1 = r_1_0_1_2_0_0_1;\n }\n {\n bytes12 r_1_0_1_2_0_0_2 = bytes12(0x343c687de62671dfd10ef3e7);\n r_1_0_1_2_0_0.s_2 = r_1_0_1_2_0_0_2;\n }\n {\n bool r_1_0_1_2_0_0_3 = false;\n r_1_0_1_2_0_0.s_3 = r_1_0_1_2_0_0_3;\n }\n r_1_0_1_2_0[0] = r_1_0_1_2_0_0;\n }\n r_1_0_1_2[0] = r_1_0_1_2_0;\n }\n {\n S_237fc942[1] memory r_1_0_1_2_1;\n {\n S_237fc942 memory r_1_0_1_2_1_0;\n {\n bytes11 r_1_0_1_2_1_0_0 = bytes11(0xe8b1cd29d67777c1a43348);\n r_1_0_1_2_1_0.s_0 = r_1_0_1_2_1_0_0;\n }\n {\n string memory r_1_0_1_2_1_0_1 = unicode\"Moo é🚀MoMé oo🚀 o Méé🚀 o 🚀🚀Mé🚀é oé Mo\";\n r_1_0_1_2_1_0.s_1 = r_1_0_1_2_1_0_1;\n }\n {\n bytes12 r_1_0_1_2_1_0_2 = bytes12(0x705d93adb327ffe1174aca94);\n r_1_0_1_2_1_0.s_2 = r_1_0_1_2_1_0_2;\n }\n {\n bool r_1_0_1_2_1_0_3 = false;\n r_1_0_1_2_1_0.s_3 = r_1_0_1_2_1_0_3;\n }\n r_1_0_1_2_1[0] = r_1_0_1_2_1_0;\n }\n r_1_0_1_2[1] = r_1_0_1_2_1;\n }\n {\n S_237fc942[1] memory r_1_0_1_2_2;\n {\n S_237fc942 memory r_1_0_1_2_2_0;\n {\n bytes11 r_1_0_1_2_2_0_0 = bytes11(0xa347609da05247782b419b);\n r_1_0_1_2_2_0.s_0 = r_1_0_1_2_2_0_0;\n }\n {\n string memory r_1_0_1_2_2_0_1 = unicode\"Moo é🚀oé 🚀o🚀🚀 ooéoéMM🚀ooé\";\n r_1_0_1_2_2_0.s_1 = r_1_0_1_2_2_0_1;\n }\n {\n bytes12 r_1_0_1_2_2_0_2 = bytes12(0x7c7ac2ea5c59c21810d551b6);\n r_1_0_1_2_2_0.s_2 = r_1_0_1_2_2_0_2;\n }\n {\n bool r_1_0_1_2_2_0_3 = false;\n r_1_0_1_2_2_0.s_3 = r_1_0_1_2_2_0_3;\n }\n r_1_0_1_2_2[0] = r_1_0_1_2_2_0;\n }\n r_1_0_1_2[2] = r_1_0_1_2_2;\n }\n {\n S_237fc942[1] memory r_1_0_1_2_3;\n {\n S_237fc942 memory r_1_0_1_2_3_0;\n {\n bytes11 r_1_0_1_2_3_0_0 = bytes11(0x72d0f1198a1eb046f378fa);\n r_1_0_1_2_3_0.s_0 = r_1_0_1_2_3_0_0;\n }\n {\n string memory r_1_0_1_2_3_0_1 = unicode\"Moo é🚀M🚀 🚀oéo oo oéMMéo éo🚀oéo 🚀éooo🚀oMo oMoo🚀🚀é🚀🚀Moé éo o\";\n r_1_0_1_2_3_0.s_1 = r_1_0_1_2_3_0_1;\n }\n {\n bytes12 r_1_0_1_2_3_0_2 = bytes12(0xf4dc919c266264224bf842c3);\n r_1_0_1_2_3_0.s_2 = r_1_0_1_2_3_0_2;\n }\n {\n bool r_1_0_1_2_3_0_3 = true;\n r_1_0_1_2_3_0.s_3 = r_1_0_1_2_3_0_3;\n }\n r_1_0_1_2_3[0] = r_1_0_1_2_3_0;\n }\n r_1_0_1_2[3] = r_1_0_1_2_3;\n }\n r_1_0_1.s_2 = r_1_0_1_2;\n }\n r_1_0.s_1 = r_1_0_1;\n }\n {\n uint104 r_1_0_2 = 7598157658436859234271441995675;\n r_1_0.s_2 = r_1_0_2;\n }\n {\n S_65f572f0 memory r_1_0_3;\n {\n address r_1_0_3_0 = 0x79E8e81b8A5a9e3e076edE5Bb16638e41F03E198;\n r_1_0_3.s_0 = r_1_0_3_0;\n }\n {\n string memory r_1_0_3_1 = unicode\"Moo é🚀é🚀oooMo🚀o é oMM oooééo\";\n r_1_0_3.s_1 = r_1_0_3_1;\n }\n {\n bytes29[3] memory r_1_0_3_2;\n {\n bytes29 r_1_0_3_2_0 = bytes29(0x15b0fb673f4147a2850f9c1d4203f6286cb2ae27abc0bc55ee6e23ee81);\n r_1_0_3_2[0] = r_1_0_3_2_0;\n }\n {\n bytes29 r_1_0_3_2_1 = bytes29(0xfe7bff3c8fb4ee9a280dcda7451efbaba0a00ea0c421bb6a5810a920ce);\n r_1_0_3_2[1] = r_1_0_3_2_1;\n }\n {\n bytes29 r_1_0_3_2_2 = bytes29(0x21b3e529217defe687458ea95697bda10871ba7ada0f484f9802623764);\n r_1_0_3_2[2] = r_1_0_3_2_2;\n }\n r_1_0_3.s_2 = r_1_0_3_2;\n }\n {\n string memory r_1_0_3_3 = unicode\"Moo é🚀o🚀oéoM🚀🚀oo🚀o\";\n r_1_0_3.s_3 = r_1_0_3_3;\n }\n r_1_0.s_3 = r_1_0_3;\n }\n {\n S_5ed2fe1d memory r_1_0_4;\n {\n bytes25 r_1_0_4_0 = bytes25(0x6234d83f31aab9006a16152c0e4ca604087559292f7d9e6361);\n r_1_0_4.s_0 = r_1_0_4_0;\n }\n {\n bool[] memory r_1_0_4_1 = new bool[](1);\n {\n bool r_1_0_4_1_0 = true;\n r_1_0_4_1[0] = r_1_0_4_1_0;\n }\n r_1_0_4.s_1 = r_1_0_4_1;\n }\n {\n string[] memory r_1_0_4_2 = new string[](3);\n {\n string memory r_1_0_4_2_0 = unicode\"Moo é🚀oéMéééM ééoMoo🚀MMMoé 🚀é éé🚀M🚀 ooé🚀o MéooéM Mo\";\n r_1_0_4_2[0] = r_1_0_4_2_0;\n }\n {\n string memory r_1_0_4_2_1 = unicode\"Moo é🚀o ooé🚀oMMMM🚀é oo 🚀éM ooéooooMooé🚀 ooéMo o\";\n r_1_0_4_2[1] = r_1_0_4_2_1;\n }\n {\n string memory r_1_0_4_2_2 = unicode\"Moo é🚀oMMM 🚀MMé🚀MéooM🚀🚀MMéo🚀oéoMoo🚀🚀M🚀éoéMoMo éoM MoMM🚀\";\n r_1_0_4_2[2] = r_1_0_4_2_2;\n }\n r_1_0_4.s_2 = r_1_0_4_2;\n }\n {\n bool r_1_0_4_3 = true;\n r_1_0_4.s_3 = r_1_0_4_3;\n }\n {\n S_64039d39[2] memory r_1_0_4_4;\n {\n S_64039d39 memory r_1_0_4_4_0;\n {\n address r_1_0_4_4_0_0 = 0x5F8B47770D099234Bbe04f5C00e2d3c9C9771Cd7;\n r_1_0_4_4_0.s_0 = r_1_0_4_4_0_0;\n }\n {\n bool r_1_0_4_4_0_1 = true;\n r_1_0_4_4_0.s_1 = r_1_0_4_4_0_1;\n }\n {\n uint152 r_1_0_4_4_0_2 = 3290481995610493170978580998006430724915579280;\n r_1_0_4_4_0.s_2 = r_1_0_4_4_0_2;\n }\n r_1_0_4_4[0] = r_1_0_4_4_0;\n }\n {\n S_64039d39 memory r_1_0_4_4_1;\n {\n address r_1_0_4_4_1_0 = 0x3973981Cdee11459DeADD244e665F23C0AA35335;\n r_1_0_4_4_1.s_0 = r_1_0_4_4_1_0;\n }\n {\n bool r_1_0_4_4_1_1 = false;\n r_1_0_4_4_1.s_1 = r_1_0_4_4_1_1;\n }\n {\n uint152 r_1_0_4_4_1_2 = 5343260894431772871393872023759014814660615935;\n r_1_0_4_4_1.s_2 = r_1_0_4_4_1_2;\n }\n r_1_0_4_4[1] = r_1_0_4_4_1;\n }\n r_1_0_4.s_4 = r_1_0_4_4;\n }\n r_1_0.s_4 = r_1_0_4;\n }\n r_1.s_0 = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n address[3][1] memory r_2;\n {\n address[3] memory r_2_0;\n {\n address r_2_0_0 = 0x2e8cC9c5FCCa7280684154668cC6c78774D0c353;\n r_2_0[0] = r_2_0_0;\n }\n {\n address r_2_0_1 = 0x42C3Ab0C1Af8ecd85172e6BC2275ACA4c2C59673;\n r_2_0[1] = r_2_0_1;\n }\n {\n address r_2_0_2 = 0x41E9616EB62bF6b02278E1448c36c7e6d608c36c;\n r_2_0[2] = r_2_0_2;\n }\n r_2[0] = r_2_0;\n }\n r.s_2 = r_2;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000002e8cc9c5fcca7280684154668cc6c78774d0c35300000000000000000000000042c3ab0c1af8ecd85172e6bc2275aca4c2c5967300000000000000000000000041e9616eb62bf6b02278e1448c36c7e6d608c36c00000000000000000000000000000000000000000000000000000000000000114d6f6f20c3a9f09f9a804d20f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020dc5976000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000005fe6f8b4c83b162afd32b4479b00000000000000000000000000000000000000000000000000000000000005c00000000000000000000000000000000000000000000000000000000000000740a753a1a23169d014eedbe537b100760000000000000000000000000000000000224cb660ac1be9955209139e54691dd9c648000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000002078f454179c2ffd2a54b66f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080343c687de62671dfd10ef3e700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e8b1cd29d67777c1a433480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080705d93adb327ffe1174aca940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a804d6f4dc3a9206f6ff09f9a80206f204dc3a9c3a9f09f9a802020206f2020f09f9a80f09f9a804dc3a9f09f9a80c3a9206fc3a920204d6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a347609da05247782b419b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000807c7ac2ea5c59c21810d551b600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a806fc3a920f09f9a806ff09f9a80f09f9a80206f6fc3a96fc3a94d4df09f9a806f6fc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002072d0f1198a1eb046f378fa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f4dc919c266264224bf842c30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000644d6f6f20c3a9f09f9a804df09f9a8020f09f9a806fc3a96f206f6f206fc3a94d4dc3a96f2020c3a96ff09f9a806fc3a96f20f09f9a80c3a96f6f6ff09f9a806f4d6f206f4d6f6ff09f9a80f09f9a80c3a9f09f9a80f09f9a804d6fc3a92020c3a96f206f0000000000000000000000000000000000000000000000000000000000000000000000000000000079e8e81b8a5a9e3e076ede5bb16638e41f03e19800000000000000000000000000000000000000000000000000000000000000c015b0fb673f4147a2850f9c1d4203f6286cb2ae27abc0bc55ee6e23ee81000000fe7bff3c8fb4ee9a280dcda7451efbaba0a00ea0c421bb6a5810a920ce00000021b3e529217defe687458ea95697bda10871ba7ada0f484f98026237640000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a80c3a9f09f9a806f6f6f4d6ff09f9a806f20c3a9206f4d4d206f6f6fc3a9c3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a806ff09f9a806fc3a96f4df09f9a80f09f9a806f6ff09f9a806f00000000000000000000000000000000000000000000000000000000006234d83f31aab9006a16152c0e4ca604087559292f7d9e6361000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005f8b47770d099234bbe04f5c00e2d3c9c9771cd7000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000938ce17e4954f0970e964e1a04dd452695c9900000000000000000000000003973981cdee11459deadd244e665f23c0aa35335000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ef99a07dadf298b8eb81dabb52783ab316deff000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a806fc3a94dc3a9c3a9c3a94d20c3a9c3a96f4d6f6ff09f9a804d4d4d6fc3a92020f09f9a80c3a920c3a9c3a9f09f9a804df09f9a80206f6fc3a9f09f9a806f204dc3a96f6fc3a94d204d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000474d6f6f20c3a9f09f9a806f206f6fc3a9f09f9a806f4d4d4d4df09f9a80c3a9206f6f20f09f9a80c3a94d20206f6fc3a96f6f6f6f4d6f6fc3a9f09f9a80206f6fc3a94d6f20206f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a806f4d4d4d20f09f9a804d4dc3a9f09f9a804dc3a96f6f4df09f9a80f09f9a804d4dc3a96ff09f9a806fc3a96f4d6f6ff09f9a80f09f9a804df09f9a80c3a96fc3a94d6f4d6f20c3a96f4d204d6f4d4df09f9a80000000" + }, + { + "name": "random-(int40,bool,bool[2][3],(bool[1],bool,string[1],((((uint208,uint200),bool,int216,string,bytes24)),(bytes12,address,(address[3],address,bool[1]),(bool[2],uint128,bool,bytes1))),uint144)[3])", + "type": "(int40,bool,bool[2][3],(bool[1],bool,string[1],((((uint208,uint200),bool,int216,string,bytes24)),(bytes12,address,(address[3],address,bool[1]),(bool[2],uint128,bool,bytes1))),uint144)[3])", + "value": [ + "375651691803", + true, + [ + [true, true], + [false, true], + [true, true] + ], + [ + [ + [true], + false, + ["Moo é🚀 oM🚀🚀éo🚀é oé 🚀MoéoooM🚀 oéoooé M éoééo "], + [ + [ + [ + [ + "219869268161584151820843745970004265006757244613879184113165175", + "869851872078048537482535141764915344962291147772909393489970" + ], + true, + "-38952926396370531882162672776222128013892686594924006024776996372", + "Moo é🚀oéMMoooé🚀Mo🚀🚀🚀🚀 oéoMoM é🚀ooo oo o 🚀🚀oo ", + "0xaafe7b6baea9cabde256158964045210d15497343fd691a9" + ] + ], + [ + "0xc382f17a6acee642ad48adbb", + "0x42c34931C9Fd6E72EBe9Bb0303d648639FBd22DD", + [ + [ + "0x32B2873BD3Ae1a7dCb90819209Df8e7e6D6420CA", + "0xb98a9D30b88C2bb915467Cb20b94fbF13b70ceF4", + "0x822C9bDdd6db1bCc30baD1f9893AfFC5fc6190cD" + ], + "0x3a360Ecd653A2c3cD8f937aDcc8b1E6b972d45e5", + [true] + ], + [ + [false, false], + "305437018047719388648675381031824257663", + true, + "0x42" + ] + ] + ], + "17338900104561149788001399758473188465564149" + ], + [ + [true], + false, + ["Moo é🚀🚀é ooMoooo🚀é ééé🚀 oé🚀oooo MM o oéo M🚀🚀ooo oo"], + [ + [ + [ + [ + "148986487589770053248126805684815091560552159056743034474368368", + "341629692577134441380087171025575474021054643073969998618173" + ], + false, + "-16577465788737656605976540502486069690983566910615660372025280087", + "Moo é🚀🚀éMMéoo🚀oo 🚀Mo éo🚀oé🚀Mé o MM🚀oé oé🚀é oo", + "0xba998f48b7a9a52e1b4c48aac4dbfe48b483d45659810ff8" + ] + ], + [ + "0x83ad5c1ad75cb8f694035836", + "0x7b4E5D17E60093EB6B75C68e77fC38a0685b3EcB", + [ + [ + "0x4F8C6975D56e0d919204E0F3702c5134096945c9", + "0x87bf3f3E26b33aCa0f33c598eF23f8cFFA55D69d", + "0xA65bcC50BA717762A449DE2C925C196AE61FCA11" + ], + "0xf5874E28d76b93dAC67F78Cf653E74b30c6435d5", + [true] + ], + [[true, true], "56584285225144935868842109006101141896", false, "0x42"] + ] + ], + "1234073841007169731989883187536212630198654" + ], + [ + [true], + false, + ["Moo é🚀oo🚀oo M🚀oMMooM éM🚀éMoéo"], + [ + [ + [ + [ + "321945002089282189664250243448613872382298483802879413377085075", + "64531526687017767409830824526662104081865747532139174540504" + ], + true, + "-16311206085278764399006835689162197040626345037999992664810229262", + "Moo é🚀", + "0xa61c482a275b47beca980e7dfac1b2d1f878eef01b88c3bd" + ] + ], + [ + "0x0f45c2a79e061ad9612e85f7", + "0x5d8e41eE29c34bba648bf0f2Ad9679E6BE213DCb", + [ + [ + "0x6ACb69a4e4761a86f74Cd4f8D196e3194283467E", + "0x5f28599e7eCA36DdB62F1Da12bfd772d6ce21534", + "0x73C7585B136135eB3CB38a3347b53E5d1362a2bb" + ], + "0x1a068CEE9F2A65f6303407ec2DF83d9e1BE35Ae5", + [false] + ], + [[true, true], "220054157221944246324248159608268304219", false, "0x8c"] + ] + ], + "8509275036342399507475015695954959708816776" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "number", + "value": "375651691803" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oM🚀🚀éo🚀é oé 🚀MoéoooM🚀 oéoooé M éoééo " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "219869268161584151820843745970004265006757244613879184113165175" + }, + { + "type": "number", + "value": "869851872078048537482535141764915344962291147772909393489970" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-38952926396370531882162672776222128013892686594924006024776996372" + }, + { + "type": "string", + "value": "Moo é🚀oéMMoooé🚀Mo🚀🚀🚀🚀 oéoMoM é🚀ooo oo o 🚀🚀oo " + }, + { + "type": "hexstring", + "value": "0xaafe7b6baea9cabde256158964045210d15497343fd691a9" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xc382f17a6acee642ad48adbb" + }, + { + "type": "address", + "value": "0x42c34931C9Fd6E72EBe9Bb0303d648639FBd22DD" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x32B2873BD3Ae1a7dCb90819209Df8e7e6D6420CA" + }, + { + "type": "address", + "value": "0xb98a9D30b88C2bb915467Cb20b94fbF13b70ceF4" + }, + { + "type": "address", + "value": "0x822C9bDdd6db1bCc30baD1f9893AfFC5fc6190cD" + } + ] + }, + { + "type": "address", + "value": "0x3a360Ecd653A2c3cD8f937aDcc8b1E6b972d45e5" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "number", + "value": "305437018047719388648675381031824257663" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "hexstring", + "value": "0x42" + } + ] + } + ] + } + ] + }, + { + "type": "number", + "value": "17338900104561149788001399758473188465564149" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀é ooMoooo🚀é ééé🚀 oé🚀oooo MM o oéo M🚀🚀ooo oo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "148986487589770053248126805684815091560552159056743034474368368" + }, + { + "type": "number", + "value": "341629692577134441380087171025575474021054643073969998618173" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-16577465788737656605976540502486069690983566910615660372025280087" + }, + { + "type": "string", + "value": "Moo é🚀🚀éMMéoo🚀oo 🚀Mo éo🚀oé🚀Mé o MM🚀oé oé🚀é oo" + }, + { + "type": "hexstring", + "value": "0xba998f48b7a9a52e1b4c48aac4dbfe48b483d45659810ff8" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x83ad5c1ad75cb8f694035836" + }, + { + "type": "address", + "value": "0x7b4E5D17E60093EB6B75C68e77fC38a0685b3EcB" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x4F8C6975D56e0d919204E0F3702c5134096945c9" + }, + { + "type": "address", + "value": "0x87bf3f3E26b33aCa0f33c598eF23f8cFFA55D69d" + }, + { + "type": "address", + "value": "0xA65bcC50BA717762A449DE2C925C196AE61FCA11" + } + ] + }, + { + "type": "address", + "value": "0xf5874E28d76b93dAC67F78Cf653E74b30c6435d5" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "number", + "value": "56584285225144935868842109006101141896" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x42" + } + ] + } + ] + } + ] + }, + { + "type": "number", + "value": "1234073841007169731989883187536212630198654" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀oo M🚀oMMooM éM🚀éMoéo" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "number", + "value": "321945002089282189664250243448613872382298483802879413377085075" + }, + { + "type": "number", + "value": "64531526687017767409830824526662104081865747532139174540504" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-16311206085278764399006835689162197040626345037999992664810229262" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "hexstring", + "value": "0xa61c482a275b47beca980e7dfac1b2d1f878eef01b88c3bd" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x0f45c2a79e061ad9612e85f7" + }, + { + "type": "address", + "value": "0x5d8e41eE29c34bba648bf0f2Ad9679E6BE213DCb" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x6ACb69a4e4761a86f74Cd4f8D196e3194283467E" + }, + { + "type": "address", + "value": "0x5f28599e7eCA36DdB62F1Da12bfd772d6ce21534" + }, + { + "type": "address", + "value": "0x73C7585B136135eB3CB38a3347b53E5d1362a2bb" + } + ] + }, + { + "type": "address", + "value": "0x1a068CEE9F2A65f6303407ec2DF83d9e1BE35Ae5" + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "number", + "value": "220054157221944246324248159608268304219" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "hexstring", + "value": "0x8c" + } + ] + } + ] + } + ] + }, + { + "type": "number", + "value": "8509275036342399507475015695954959708816776" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610f18806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610c39565b60405180910390f35b6100566107ef565b61005e6107ef565b64577695ed1b815260016020820152610075610820565b61007d61084d565b60018082526020820152815261009161084d565b6000815260016020808301919091528201526100ab61084d565b600180825260208201526040808301919091528201526100c961086b565b6100d1610898565b6100d96108d9565b600181528152600060208201526100ee6108f7565b60006040518060800160405280604a8152602001610e99604a9139825250604082015261011961091e565b61012161093e565b61012961094d565b6040805180820182527988d331fca814666d8ecb560ff8f9cd2847afed86926f588263778152788a934d4ab2a5948265b47d450d71d15ba0df201e7e07bf30326020808301919091529083526001838201527a5eb07732195deb7faa0ea4ed5e5e97d8ec2500cf84870b37ef56131983830152815160808101909252604e80835260009291610e4b908301396060830152507faafe7b6baea9cabde256158964045210d15497343fd691a900000000000000006080820152815281526101ed610987565b6bc382f17a6acee642ad48adbb60a01b81527342c34931c9fd6e72ebe9bb0303d648639fbd22dd60208201526102216109b3565b6102296109da565b7332b2873bd3ae1a7dcb90819209df8e7e6d6420ca815273b98a9d30b88c2bb915467cb20b94fbf13b70cef460208083019190915273822c9bddd6db1bcc30bad1f9893affc5fc6190cd6040830152908252733a360ecd653a2c3cd8f937adcc8b1e6b972d45e59082015261029c6108d9565b600181526040828101919091528201526102b46109f8565b6102bc61084d565b60008082526020808301919091529082526fe5c907a8b8dab1699454054dc08bf27f8282015260016040830152602160f91b6060808401919091528381019290925283019190915282015271c70a72a3694ce0bab73b1e6069ad49a1d9f560808201528152610329610898565b6103316108d9565b600181528152600060208201526103466108f7565b6000604051806080016040528060508152602001610dfb60509139825250604082015261037161091e565b61037961093e565b61038161094d565b604080518082018252795cb6eab50686b9078cac4b8ae86a7e7d10ac9e8e0cfaa56e8d70815278366cbc6a3d643b35bf30b7e71fce67306a2e22f0465e495e3d60208083019190915290835260008382018190527a284c2eaa5ef2b1b6b803edcfeade84113bfd412aee270db312065619848401528251608081019093526050808452909291610d7e908301396060830152507fba998f48b7a9a52e1b4c48aac4dbfe48b483d45659810ff80000000000000000608082015281528152610446610987565b6b41d6ae0d6bae5c7b4a01ac1b60a11b8152737b4e5d17e60093eb6b75c68e77fc38a0685b3ecb602082015261047a6109b3565b6104826109da565b734f8c6975d56e0d919204e0f3702c5134096945c981527387bf3f3e26b33aca0f33c598ef23f8cffa55d69d60208083019190915273a65bcc50ba717762a449de2c925c196ae61fca11604083015290825273f5874e28d76b93dac67f78cf653e74b30c6435d5908201526104f56108d9565b6001815260408281019190915282015261050d6109f8565b61051561084d565b60018082526020808301919091529082526f2a91bca76c829f1cc9983fcd4c40d9888282015260006040830152602160f91b6060808401919091528381019290925283810192909252830191909152710e2a9df865e7ca663503ec6e7eda2964597e6080830152820152610587610898565b61058f6108d9565b600181528152600060208201526105a46108f7565b60006040518060600160405280602d8152602001610dce602d913982525060408201526105cf61091e565b6105d761093e565b6105df61094d565b60408051808201825279c858cc40eecaa87a1eae38342d7ebf94d6857540f6844dbcae938152780a47cc9337a9be537fe3eb9f1ab5e30643b3587711ff33b4d86020808301919091529083526001838201527a27a67d0c2abe27787ffdbd1b4d5842c6b44cd8aa11156735168e0d19838301528151808301909252600a8252689adede418753e13f3560b71b9082015260608201527fa61c482a275b47beca980e7dfac1b2d1f878eef01b88c3bd00000000000000006080820152815281526106a6610987565b6b0f45c2a79e061ad9612e85f760a01b8152735d8e41ee29c34bba648bf0f2ad9679e6be213dcb60208201526106da6109b3565b6106e26109da565b736acb69a4e4761a86f74cd4f8d196e3194283467e8152735f28599e7eca36ddb62f1da12bfd772d6ce215346020808301919091527373c7585b136135eb3cb38a3347b53e5d1362a2bb6040830152908252731a068cee9f2a65f6303407ec2df83d9e1be35ae5908201526107556108d9565b6000815260408281019190915282015261076d6109f8565b61077561084d565b60018082526020808301919091529082526fa58ce39a9eb819b508b40ab852beaf5b828201526000604080840191909152602360fa1b6060808501919091528481019390935290840192909252838101929092527161ae8307c079f97654d9507f02990dd985886080840152830191909152820152919050565b604080516080810182526000808252602082015290810161080e610820565b815260200161081b61086b565b905290565b60405180606001604052806003905b61083761084d565b81526020019060019003908161082f5790505090565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806003905b610882610898565b81526020019060019003908161087a5790505090565b6040518060a001604052806108ab6108d9565b8152600060208201526040016108bf6108f7565b81526020016108cc61091e565b8152600060209091015290565b60405180602001604052806001906020820280368337509192915050565b60405180602001604052806001905b60608152602001906001900390816109065790505090565b604051806040016040528061093161093e565b815260200161081b610987565b604051806020016040528061081b5b6040805160e081018252600060a0820181815260c08301829052825260208201819052918101829052606080820152608081019190915290565b60408051608081018252600080825260208201529081016109a66109b3565b815260200161081b6109f8565b60405180606001604052806109c66109da565b81526000602082015260400161081b6108d9565b60405180606001604052806003906020820280368337509192915050565b6040518060800160405280610a0b61084d565b81526000602082018190526040820181905260609091015290565b8060005b6002811015610a4b5781511515845260209384019390910190600101610a2a565b50505050565b8060005b6001811015610a4b5781511515845260209384019390910190600101610a55565b6000815180845260005b81811015610a9c57602081850181015186830182015201610a80565b81811115610aae576000602083870101525b50601f01601f19169290920160200192915050565b610ace828251610a26565b6fffffffffffffffffffffffffffffffff602082015116604083015260408101511515606083015260ff60f81b60608201511660808301525050565b80516001600160a01b03191682526020808201516001600160a01b0390811682850152604080840151805190929160009087015b6003821015610b5f5782518416815291850191600191909101908501610b3e565b5050509181015190911660a084015260400151610b7f60c0840182610a51565b506060810151610b9260e0840182610ac3565b505050565b80516101a080845290516020918401829052805180516001600160d01b03166101c08601528201516001600160c81b03166101e08501529081015115156102008401526040810151601a0b610220840152606081015160c0610240850152600091610c06610280860183610a76565b915067ffffffffffffffff19608082015116610260860152506020830151610c316020860182610b0a565b509392505050565b600060208083526101408301845160040b8285015281850151604081151581870152808701519150606080870160005b6003811015610c8d57610c7d828651610a26565b9386019390830190600101610c69565b505087810151610120888101526101a088019490935060005b6003811015610d6f5761013f19898703018252845160a0808801610ccb898451610a51565b828a01511515898b015286830151878a01929092529060c089019060005b6001811015610d1857609f198b8403018452610d06838351610a76565b938c01939250908b0190600101610ce9565b5050858301519150888103868a0152610d318183610b97565b9150506080808301519250610d5b818a018471ffffffffffffffffffffffffffffffffffff169052565b509650509386019390860190600101610ca6565b50939897505050505050505056fe4d6f6f20c3a9f09f9a80f09f9a80c3a94d4dc3a96f6ff09f9a806f6f20f09f9a804d6f20c3a96ff09f9a806fc3a9f09f9a804dc3a920206f20204d4df09f9a806fc3a9206fc3a9f09f9a80c3a9206f6f4d6f6f20c3a9f09f9a806f6ff09f9a806f6f204df09f9a806f4d4d6f6f4d20c3a94df09f9a80c3a94d6fc3a96f4d6f6f20c3a9f09f9a80f09f9a80c3a920206f6f4d6f6f6f6ff09f9a80c3a920c3a9c3a9c3a9f09f9a80206fc3a9f09f9a806f6f6f6f204d4d206f206fc3a96f204df09f9a80f09f9a806f6f6f206f6f4d6f6f20c3a9f09f9a806fc3a94d4d6f6f6fc3a9f09f9a804d6ff09f9a80f09f9a80f09f9a80f09f9a80206fc3a96f4d6f4d20c3a9f09f9a806f6f6f206f6f206f2020f09f9a80f09f9a806f6f204d6f6f20c3a9f09f9a80206f4df09f9a80f09f9a80c3a96ff09f9a80c3a920206fc3a920f09f9a804d6fc3a96f6f6f4df09f9a80206fc3a96f6f6fc3a9204d2020c3a96fc3a9c3a96f20a2646970667358221220a79bf07719f7f4826914648f824ca5d9d3bc79656e89d43124dc23a6c4dbb3dc64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_777c6941 {\n uint208 s_0;\n uint200 s_1;\n }\n\n struct S_b804a8ea {\n S_777c6941 s_0;\n bool s_1;\n int216 s_2;\n string s_3;\n bytes24 s_4;\n }\n\n struct S_c9b0b0e3 {\n S_b804a8ea s_0;\n }\n\n struct S_7bb45416 {\n address[3] s_0;\n address s_1;\n bool[1] s_2;\n }\n\n struct S_2bff667f {\n bool[2] s_0;\n uint128 s_1;\n bool s_2;\n bytes1 s_3;\n }\n\n struct S_788eb28e {\n bytes12 s_0;\n address s_1;\n S_7bb45416 s_2;\n S_2bff667f s_3;\n }\n\n struct S_62d017b9 {\n S_c9b0b0e3 s_0;\n S_788eb28e s_1;\n }\n\n struct S_2ad77a10 {\n bool[1] s_0;\n bool s_1;\n string[1] s_2;\n S_62d017b9 s_3;\n uint144 s_4;\n }\n\n struct S_a3d20497 {\n int40 s_0;\n bool s_1;\n bool[2][3] s_2;\n S_2ad77a10[3] s_3;\n }\n\n function test () public pure returns (S_a3d20497 memory) {\n S_a3d20497 memory r;\n {\n int40 r_0 = 375651691803;\n r.s_0 = r_0;\n }\n {\n bool r_1 = true;\n r.s_1 = r_1;\n }\n {\n bool[2][3] memory r_2;\n {\n bool[2] memory r_2_0;\n {\n bool r_2_0_0 = true;\n r_2_0[0] = r_2_0_0;\n }\n {\n bool r_2_0_1 = true;\n r_2_0[1] = r_2_0_1;\n }\n r_2[0] = r_2_0;\n }\n {\n bool[2] memory r_2_1;\n {\n bool r_2_1_0 = false;\n r_2_1[0] = r_2_1_0;\n }\n {\n bool r_2_1_1 = true;\n r_2_1[1] = r_2_1_1;\n }\n r_2[1] = r_2_1;\n }\n {\n bool[2] memory r_2_2;\n {\n bool r_2_2_0 = true;\n r_2_2[0] = r_2_2_0;\n }\n {\n bool r_2_2_1 = true;\n r_2_2[1] = r_2_2_1;\n }\n r_2[2] = r_2_2;\n }\n r.s_2 = r_2;\n }\n {\n S_2ad77a10[3] memory r_3;\n {\n S_2ad77a10 memory r_3_0;\n {\n bool[1] memory r_3_0_0;\n {\n bool r_3_0_0_0 = true;\n r_3_0_0[0] = r_3_0_0_0;\n }\n r_3_0.s_0 = r_3_0_0;\n }\n {\n bool r_3_0_1 = false;\n r_3_0.s_1 = r_3_0_1;\n }\n {\n string[1] memory r_3_0_2;\n {\n string memory r_3_0_2_0 = unicode\"Moo é🚀 oM🚀🚀éo🚀é oé 🚀MoéoooM🚀 oéoooé M éoééo \";\n r_3_0_2[0] = r_3_0_2_0;\n }\n r_3_0.s_2 = r_3_0_2;\n }\n {\n S_62d017b9 memory r_3_0_3;\n {\n S_c9b0b0e3 memory r_3_0_3_0;\n {\n S_b804a8ea memory r_3_0_3_0_0;\n {\n S_777c6941 memory r_3_0_3_0_0_0;\n {\n uint208 r_3_0_3_0_0_0_0 = 219869268161584151820843745970004265006757244613879184113165175;\n r_3_0_3_0_0_0.s_0 = r_3_0_3_0_0_0_0;\n }\n {\n uint200 r_3_0_3_0_0_0_1 = 869851872078048537482535141764915344962291147772909393489970;\n r_3_0_3_0_0_0.s_1 = r_3_0_3_0_0_0_1;\n }\n r_3_0_3_0_0.s_0 = r_3_0_3_0_0_0;\n }\n {\n bool r_3_0_3_0_0_1 = true;\n r_3_0_3_0_0.s_1 = r_3_0_3_0_0_1;\n }\n {\n int216 r_3_0_3_0_0_2 = -38952926396370531882162672776222128013892686594924006024776996372;\n r_3_0_3_0_0.s_2 = r_3_0_3_0_0_2;\n }\n {\n string memory r_3_0_3_0_0_3 = unicode\"Moo é🚀oéMMoooé🚀Mo🚀🚀🚀🚀 oéoMoM é🚀ooo oo o 🚀🚀oo \";\n r_3_0_3_0_0.s_3 = r_3_0_3_0_0_3;\n }\n {\n bytes24 r_3_0_3_0_0_4 = bytes24(0xaafe7b6baea9cabde256158964045210d15497343fd691a9);\n r_3_0_3_0_0.s_4 = r_3_0_3_0_0_4;\n }\n r_3_0_3_0.s_0 = r_3_0_3_0_0;\n }\n r_3_0_3.s_0 = r_3_0_3_0;\n }\n {\n S_788eb28e memory r_3_0_3_1;\n {\n bytes12 r_3_0_3_1_0 = bytes12(0xc382f17a6acee642ad48adbb);\n r_3_0_3_1.s_0 = r_3_0_3_1_0;\n }\n {\n address r_3_0_3_1_1 = 0x42c34931C9Fd6E72EBe9Bb0303d648639FBd22DD;\n r_3_0_3_1.s_1 = r_3_0_3_1_1;\n }\n {\n S_7bb45416 memory r_3_0_3_1_2;\n {\n address[3] memory r_3_0_3_1_2_0;\n {\n address r_3_0_3_1_2_0_0 = 0x32B2873BD3Ae1a7dCb90819209Df8e7e6D6420CA;\n r_3_0_3_1_2_0[0] = r_3_0_3_1_2_0_0;\n }\n {\n address r_3_0_3_1_2_0_1 = 0xb98a9D30b88C2bb915467Cb20b94fbF13b70ceF4;\n r_3_0_3_1_2_0[1] = r_3_0_3_1_2_0_1;\n }\n {\n address r_3_0_3_1_2_0_2 = 0x822C9bDdd6db1bCc30baD1f9893AfFC5fc6190cD;\n r_3_0_3_1_2_0[2] = r_3_0_3_1_2_0_2;\n }\n r_3_0_3_1_2.s_0 = r_3_0_3_1_2_0;\n }\n {\n address r_3_0_3_1_2_1 = 0x3a360Ecd653A2c3cD8f937aDcc8b1E6b972d45e5;\n r_3_0_3_1_2.s_1 = r_3_0_3_1_2_1;\n }\n {\n bool[1] memory r_3_0_3_1_2_2;\n {\n bool r_3_0_3_1_2_2_0 = true;\n r_3_0_3_1_2_2[0] = r_3_0_3_1_2_2_0;\n }\n r_3_0_3_1_2.s_2 = r_3_0_3_1_2_2;\n }\n r_3_0_3_1.s_2 = r_3_0_3_1_2;\n }\n {\n S_2bff667f memory r_3_0_3_1_3;\n {\n bool[2] memory r_3_0_3_1_3_0;\n {\n bool r_3_0_3_1_3_0_0 = false;\n r_3_0_3_1_3_0[0] = r_3_0_3_1_3_0_0;\n }\n {\n bool r_3_0_3_1_3_0_1 = false;\n r_3_0_3_1_3_0[1] = r_3_0_3_1_3_0_1;\n }\n r_3_0_3_1_3.s_0 = r_3_0_3_1_3_0;\n }\n {\n uint128 r_3_0_3_1_3_1 = 305437018047719388648675381031824257663;\n r_3_0_3_1_3.s_1 = r_3_0_3_1_3_1;\n }\n {\n bool r_3_0_3_1_3_2 = true;\n r_3_0_3_1_3.s_2 = r_3_0_3_1_3_2;\n }\n {\n bytes1 r_3_0_3_1_3_3 = bytes1(0x42);\n r_3_0_3_1_3.s_3 = r_3_0_3_1_3_3;\n }\n r_3_0_3_1.s_3 = r_3_0_3_1_3;\n }\n r_3_0_3.s_1 = r_3_0_3_1;\n }\n r_3_0.s_3 = r_3_0_3;\n }\n {\n uint144 r_3_0_4 = 17338900104561149788001399758473188465564149;\n r_3_0.s_4 = r_3_0_4;\n }\n r_3[0] = r_3_0;\n }\n {\n S_2ad77a10 memory r_3_1;\n {\n bool[1] memory r_3_1_0;\n {\n bool r_3_1_0_0 = true;\n r_3_1_0[0] = r_3_1_0_0;\n }\n r_3_1.s_0 = r_3_1_0;\n }\n {\n bool r_3_1_1 = false;\n r_3_1.s_1 = r_3_1_1;\n }\n {\n string[1] memory r_3_1_2;\n {\n string memory r_3_1_2_0 = unicode\"Moo é🚀🚀é ooMoooo🚀é ééé🚀 oé🚀oooo MM o oéo M🚀🚀ooo oo\";\n r_3_1_2[0] = r_3_1_2_0;\n }\n r_3_1.s_2 = r_3_1_2;\n }\n {\n S_62d017b9 memory r_3_1_3;\n {\n S_c9b0b0e3 memory r_3_1_3_0;\n {\n S_b804a8ea memory r_3_1_3_0_0;\n {\n S_777c6941 memory r_3_1_3_0_0_0;\n {\n uint208 r_3_1_3_0_0_0_0 = 148986487589770053248126805684815091560552159056743034474368368;\n r_3_1_3_0_0_0.s_0 = r_3_1_3_0_0_0_0;\n }\n {\n uint200 r_3_1_3_0_0_0_1 = 341629692577134441380087171025575474021054643073969998618173;\n r_3_1_3_0_0_0.s_1 = r_3_1_3_0_0_0_1;\n }\n r_3_1_3_0_0.s_0 = r_3_1_3_0_0_0;\n }\n {\n bool r_3_1_3_0_0_1 = false;\n r_3_1_3_0_0.s_1 = r_3_1_3_0_0_1;\n }\n {\n int216 r_3_1_3_0_0_2 = -16577465788737656605976540502486069690983566910615660372025280087;\n r_3_1_3_0_0.s_2 = r_3_1_3_0_0_2;\n }\n {\n string memory r_3_1_3_0_0_3 = unicode\"Moo é🚀🚀éMMéoo🚀oo 🚀Mo éo🚀oé🚀Mé o MM🚀oé oé🚀é oo\";\n r_3_1_3_0_0.s_3 = r_3_1_3_0_0_3;\n }\n {\n bytes24 r_3_1_3_0_0_4 = bytes24(0xba998f48b7a9a52e1b4c48aac4dbfe48b483d45659810ff8);\n r_3_1_3_0_0.s_4 = r_3_1_3_0_0_4;\n }\n r_3_1_3_0.s_0 = r_3_1_3_0_0;\n }\n r_3_1_3.s_0 = r_3_1_3_0;\n }\n {\n S_788eb28e memory r_3_1_3_1;\n {\n bytes12 r_3_1_3_1_0 = bytes12(0x83ad5c1ad75cb8f694035836);\n r_3_1_3_1.s_0 = r_3_1_3_1_0;\n }\n {\n address r_3_1_3_1_1 = 0x7b4E5D17E60093EB6B75C68e77fC38a0685b3EcB;\n r_3_1_3_1.s_1 = r_3_1_3_1_1;\n }\n {\n S_7bb45416 memory r_3_1_3_1_2;\n {\n address[3] memory r_3_1_3_1_2_0;\n {\n address r_3_1_3_1_2_0_0 = 0x4F8C6975D56e0d919204E0F3702c5134096945c9;\n r_3_1_3_1_2_0[0] = r_3_1_3_1_2_0_0;\n }\n {\n address r_3_1_3_1_2_0_1 = 0x87bf3f3E26b33aCa0f33c598eF23f8cFFA55D69d;\n r_3_1_3_1_2_0[1] = r_3_1_3_1_2_0_1;\n }\n {\n address r_3_1_3_1_2_0_2 = 0xA65bcC50BA717762A449DE2C925C196AE61FCA11;\n r_3_1_3_1_2_0[2] = r_3_1_3_1_2_0_2;\n }\n r_3_1_3_1_2.s_0 = r_3_1_3_1_2_0;\n }\n {\n address r_3_1_3_1_2_1 = 0xf5874E28d76b93dAC67F78Cf653E74b30c6435d5;\n r_3_1_3_1_2.s_1 = r_3_1_3_1_2_1;\n }\n {\n bool[1] memory r_3_1_3_1_2_2;\n {\n bool r_3_1_3_1_2_2_0 = true;\n r_3_1_3_1_2_2[0] = r_3_1_3_1_2_2_0;\n }\n r_3_1_3_1_2.s_2 = r_3_1_3_1_2_2;\n }\n r_3_1_3_1.s_2 = r_3_1_3_1_2;\n }\n {\n S_2bff667f memory r_3_1_3_1_3;\n {\n bool[2] memory r_3_1_3_1_3_0;\n {\n bool r_3_1_3_1_3_0_0 = true;\n r_3_1_3_1_3_0[0] = r_3_1_3_1_3_0_0;\n }\n {\n bool r_3_1_3_1_3_0_1 = true;\n r_3_1_3_1_3_0[1] = r_3_1_3_1_3_0_1;\n }\n r_3_1_3_1_3.s_0 = r_3_1_3_1_3_0;\n }\n {\n uint128 r_3_1_3_1_3_1 = 56584285225144935868842109006101141896;\n r_3_1_3_1_3.s_1 = r_3_1_3_1_3_1;\n }\n {\n bool r_3_1_3_1_3_2 = false;\n r_3_1_3_1_3.s_2 = r_3_1_3_1_3_2;\n }\n {\n bytes1 r_3_1_3_1_3_3 = bytes1(0x42);\n r_3_1_3_1_3.s_3 = r_3_1_3_1_3_3;\n }\n r_3_1_3_1.s_3 = r_3_1_3_1_3;\n }\n r_3_1_3.s_1 = r_3_1_3_1;\n }\n r_3_1.s_3 = r_3_1_3;\n }\n {\n uint144 r_3_1_4 = 1234073841007169731989883187536212630198654;\n r_3_1.s_4 = r_3_1_4;\n }\n r_3[1] = r_3_1;\n }\n {\n S_2ad77a10 memory r_3_2;\n {\n bool[1] memory r_3_2_0;\n {\n bool r_3_2_0_0 = true;\n r_3_2_0[0] = r_3_2_0_0;\n }\n r_3_2.s_0 = r_3_2_0;\n }\n {\n bool r_3_2_1 = false;\n r_3_2.s_1 = r_3_2_1;\n }\n {\n string[1] memory r_3_2_2;\n {\n string memory r_3_2_2_0 = unicode\"Moo é🚀oo🚀oo M🚀oMMooM éM🚀éMoéo\";\n r_3_2_2[0] = r_3_2_2_0;\n }\n r_3_2.s_2 = r_3_2_2;\n }\n {\n S_62d017b9 memory r_3_2_3;\n {\n S_c9b0b0e3 memory r_3_2_3_0;\n {\n S_b804a8ea memory r_3_2_3_0_0;\n {\n S_777c6941 memory r_3_2_3_0_0_0;\n {\n uint208 r_3_2_3_0_0_0_0 = 321945002089282189664250243448613872382298483802879413377085075;\n r_3_2_3_0_0_0.s_0 = r_3_2_3_0_0_0_0;\n }\n {\n uint200 r_3_2_3_0_0_0_1 = 64531526687017767409830824526662104081865747532139174540504;\n r_3_2_3_0_0_0.s_1 = r_3_2_3_0_0_0_1;\n }\n r_3_2_3_0_0.s_0 = r_3_2_3_0_0_0;\n }\n {\n bool r_3_2_3_0_0_1 = true;\n r_3_2_3_0_0.s_1 = r_3_2_3_0_0_1;\n }\n {\n int216 r_3_2_3_0_0_2 = -16311206085278764399006835689162197040626345037999992664810229262;\n r_3_2_3_0_0.s_2 = r_3_2_3_0_0_2;\n }\n {\n string memory r_3_2_3_0_0_3 = unicode\"Moo é🚀\";\n r_3_2_3_0_0.s_3 = r_3_2_3_0_0_3;\n }\n {\n bytes24 r_3_2_3_0_0_4 = bytes24(0xa61c482a275b47beca980e7dfac1b2d1f878eef01b88c3bd);\n r_3_2_3_0_0.s_4 = r_3_2_3_0_0_4;\n }\n r_3_2_3_0.s_0 = r_3_2_3_0_0;\n }\n r_3_2_3.s_0 = r_3_2_3_0;\n }\n {\n S_788eb28e memory r_3_2_3_1;\n {\n bytes12 r_3_2_3_1_0 = bytes12(0x0f45c2a79e061ad9612e85f7);\n r_3_2_3_1.s_0 = r_3_2_3_1_0;\n }\n {\n address r_3_2_3_1_1 = 0x5d8e41eE29c34bba648bf0f2Ad9679E6BE213DCb;\n r_3_2_3_1.s_1 = r_3_2_3_1_1;\n }\n {\n S_7bb45416 memory r_3_2_3_1_2;\n {\n address[3] memory r_3_2_3_1_2_0;\n {\n address r_3_2_3_1_2_0_0 = 0x6ACb69a4e4761a86f74Cd4f8D196e3194283467E;\n r_3_2_3_1_2_0[0] = r_3_2_3_1_2_0_0;\n }\n {\n address r_3_2_3_1_2_0_1 = 0x5f28599e7eCA36DdB62F1Da12bfd772d6ce21534;\n r_3_2_3_1_2_0[1] = r_3_2_3_1_2_0_1;\n }\n {\n address r_3_2_3_1_2_0_2 = 0x73C7585B136135eB3CB38a3347b53E5d1362a2bb;\n r_3_2_3_1_2_0[2] = r_3_2_3_1_2_0_2;\n }\n r_3_2_3_1_2.s_0 = r_3_2_3_1_2_0;\n }\n {\n address r_3_2_3_1_2_1 = 0x1a068CEE9F2A65f6303407ec2DF83d9e1BE35Ae5;\n r_3_2_3_1_2.s_1 = r_3_2_3_1_2_1;\n }\n {\n bool[1] memory r_3_2_3_1_2_2;\n {\n bool r_3_2_3_1_2_2_0 = false;\n r_3_2_3_1_2_2[0] = r_3_2_3_1_2_2_0;\n }\n r_3_2_3_1_2.s_2 = r_3_2_3_1_2_2;\n }\n r_3_2_3_1.s_2 = r_3_2_3_1_2;\n }\n {\n S_2bff667f memory r_3_2_3_1_3;\n {\n bool[2] memory r_3_2_3_1_3_0;\n {\n bool r_3_2_3_1_3_0_0 = true;\n r_3_2_3_1_3_0[0] = r_3_2_3_1_3_0_0;\n }\n {\n bool r_3_2_3_1_3_0_1 = true;\n r_3_2_3_1_3_0[1] = r_3_2_3_1_3_0_1;\n }\n r_3_2_3_1_3.s_0 = r_3_2_3_1_3_0;\n }\n {\n uint128 r_3_2_3_1_3_1 = 220054157221944246324248159608268304219;\n r_3_2_3_1_3.s_1 = r_3_2_3_1_3_1;\n }\n {\n bool r_3_2_3_1_3_2 = false;\n r_3_2_3_1_3.s_2 = r_3_2_3_1_3_2;\n }\n {\n bytes1 r_3_2_3_1_3_3 = bytes1(0x8c);\n r_3_2_3_1_3.s_3 = r_3_2_3_1_3_3;\n }\n r_3_2_3_1.s_3 = r_3_2_3_1_3;\n }\n r_3_2_3.s_1 = r_3_2_3_1;\n }\n r_3_2.s_3 = r_3_2_3;\n }\n {\n uint144 r_3_2_4 = 8509275036342399507475015695954959708816776;\n r_3_2.s_4 = r_3_2_4;\n }\n r_3[2] = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000577695ed1b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000008e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000c70a72a3694ce0bab73b1e6069ad49a1d9f50000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a80206f4df09f9a80f09f9a80c3a96ff09f9a80c3a920206fc3a920f09f9a804d6fc3a96f6f6f4df09f9a80206fc3a96f6f6fc3a9204d2020c3a96fc3a9c3a96f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0c382f17a6acee642ad48adbb000000000000000000000000000000000000000000000000000000000000000042c34931c9fd6e72ebe9bb0303d648639fbd22dd00000000000000000000000032b2873bd3ae1a7dcb90819209df8e7e6d6420ca000000000000000000000000b98a9d30b88c2bb915467cb20b94fbf13b70cef4000000000000000000000000822c9bddd6db1bcc30bad1f9893affc5fc6190cd0000000000000000000000003a360ecd653a2c3cd8f937adcc8b1e6b972d45e500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e5c907a8b8dab1699454054dc08bf27f00000000000000000000000000000000000000000000000000000000000000014200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000088d331fca814666d8ecb560ff8f9cd2847afed86926f58826377000000000000008a934d4ab2a5948265b47d450d71d15ba0df201e7e07bf30320000000000000000000000000000000000000000000000000000000000000001ffffffffffa14f88cde6a2148055f15b12a1a1682713daff307b78f4c810a9ec00000000000000000000000000000000000000000000000000000000000000c0aafe7b6baea9cabde256158964045210d15497343fd691a90000000000000000000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a806fc3a94d4d6f6f6fc3a9f09f9a804d6ff09f9a80f09f9a80f09f9a80f09f9a80206fc3a96f4d6f4d20c3a9f09f9a806f6f6f206f6f206f2020f09f9a80f09f9a806f6f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000e2a9df865e7ca663503ec6e7eda2964597e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a80f09f9a80c3a920206f6f4d6f6f6f6ff09f9a80c3a920c3a9c3a9c3a9f09f9a80206fc3a9f09f9a806f6f6f6f204d4d206f206fc3a96f204df09f9a80f09f9a806f6f6f206f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a083ad5c1ad75cb8f69403583600000000000000000000000000000000000000000000000000000000000000007b4e5d17e60093eb6b75c68e77fc38a0685b3ecb0000000000000000000000004f8c6975d56e0d919204e0f3702c5134096945c900000000000000000000000087bf3f3e26b33aca0f33c598ef23f8cffa55d69d000000000000000000000000a65bcc50ba717762a449de2c925c196ae61fca11000000000000000000000000f5874e28d76b93dac67f78cf653e74b30c6435d5000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000002a91bca76c829f1cc9983fcd4c40d9880000000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000005cb6eab50686b9078cac4b8ae86a7e7d10ac9e8e0cfaa56e8d7000000000000000366cbc6a3d643b35bf30b7e71fce67306a2e22f0465e495e3d0000000000000000000000000000000000000000000000000000000000000000ffffffffffd7b3d155a10d4e4947fc123015217beec402bed511d8f24cedf9a900000000000000000000000000000000000000000000000000000000000000c0ba998f48b7a9a52e1b4c48aac4dbfe48b483d45659810ff8000000000000000000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a80f09f9a80c3a94d4dc3a96f6ff09f9a806f6f20f09f9a804d6f20c3a96ff09f9a806fc3a9f09f9a804dc3a920206f20204d4df09f9a806fc3a9206fc3a9f09f9a80c3a9206f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000061ae8307c079f97654d9507f02990dd985880000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a806f6ff09f9a806f6f204df09f9a806f4d4d6f6f4d20c3a94df09f9a80c3a94d6fc3a96f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00f45c2a79e061ad9612e85f700000000000000000000000000000000000000000000000000000000000000005d8e41ee29c34bba648bf0f2ad9679e6be213dcb0000000000000000000000006acb69a4e4761a86f74cd4f8d196e3194283467e0000000000000000000000005f28599e7eca36ddb62f1da12bfd772d6ce2153400000000000000000000000073c7585b136135eb3cb38a3347b53e5d1362a2bb0000000000000000000000001a068cee9f2a65f6303407ec2df83d9e1be35ae500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000a58ce39a9eb819b508b40ab852beaf5b00000000000000000000000000000000000000000000000000000000000000008c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000c858cc40eecaa87a1eae38342d7ebf94d6857540f6844dbcae93000000000000000a47cc9337a9be537fe3eb9f1ab5e30643b3587711ff33b4d80000000000000000000000000000000000000000000000000000000000000001ffffffffffd85982f3d541d887800242e4b2a7bd394bb32755eeea98cae971f200000000000000000000000000000000000000000000000000000000000000c0a61c482a275b47beca980e7dfac1b2d1f878eef01b88c3bd0000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000" + }, + { + "name": "random-(int216[4][3],(uint240),(string,(address,string),address,bytes18,bytes7),(bool,(((((bool,string)[1],bool,address,address,address),uint48[4])[],bytes13),bool[],bool,bool,string),(int104[4],address,string,bool,address)[3][4]))", + "type": "(int216[4][3],(uint240),(string,(address,string),address,bytes18,bytes7),(bool,(((((bool,string)[1],bool,address,address,address),uint48[4])[],bytes13),bool[],bool,bool,string),(int104[4],address,string,bool,address)[3][4]))", + "value": [ + [ + [ + "11868273551323100157294454126160326463210669472274297398079489269", + "-31053727823250310608621249451147313770203284496117432770408255436", + "-35551289483291868831798817457826337023067510140450468107009299707", + "27705487658324299639010918334396919034900227026676127919688044132" + ], + [ + "12044017138693016628210818395860956364718205747862810206544386642", + "-8702306605769261499790468258440394794965222848982942661743527506", + "-28363395972824844711796614057537172777249910313607925943977872243", + "47643637639193787944838147871685507329622557357669123821124769689" + ], + [ + "-13203069845579571794049623603299015635575972392100603201804655820", + "25946512839804814763054277019674198850840485901411554258917216628", + "12891626248449257529908405529762949158768787481693885251968171290", + "-27865920595705910445672894784189981965922047042118373127699957252" + ] + ], + ["1382207009521263128956750398763747923824410427347528465131537058228239109"], + [ + "Moo é🚀🚀oo🚀oé éo🚀M é", + [ + "0x0f64F8235aCAFAb58E0f9c103EDD1f547F58982A", + "Moo é🚀éM🚀o🚀 Mo🚀oo🚀Mé🚀Mé🚀MMoo 🚀o Mo🚀🚀o 🚀oM🚀M 🚀éoo🚀 oMMM M o🚀" + ], + "0x01a3DcEBB6f25D479747d3705C5c0229dFb507bD", + "0x8b74d28d4650ef0c7473fb124000f9e7f520", + "0xeb6053e207bb35" + ], + [ + true, + [ + [[], "0x72c5695695b2422f1977ab9d3a"], + [true, true], + false, + true, + "Moo é🚀MM 🚀MMéoM🚀 M oéoé éoéM 🚀éo oMMéMéM " + ], + [ + [ + [ + [ + "-5074289586242130803561253864454", + "-5138031919710303241181851731740", + "-7577469842508842656615352962275", + "9140643037559548420544799441937" + ], + "0x9AfC5f78E9f61f3F3FeECb5E4CeF2335bFFdb218", + "Moo é🚀oo🚀oo🚀 oo é🚀 Méooéé🚀 oo M🚀", + false, + "0x5cf69d07918c6B7f830c51af2ba5b398CE926017" + ], + [ + [ + "-2711996766733954473430188112293", + "7248488480405104317803945728814", + "-6414385276541047787817126763340", + "2822615459793162944907918080120" + ], + "0x965DB25C87606fA31c27763a4A981dbEB5CeeC1d", + "Moo é🚀MooéMM🚀é Moé", + false, + "0xa56D0CCb57E38a06290e5d55e83f071B91cDba6a" + ], + [ + [ + "6496975029233924612505735132214", + "3262969799242826414099798020393", + "-9148379312908505096423176473133", + "-1490527201003463357452175013028" + ], + "0xfDF5d03Ff3734DB79e18d2D98b7C6A002D9Dc1d5", + "Moo é🚀oo🚀Mé ", + false, + "0xf0b127B3C8a4AE57823613659Be13873d20E84cd" + ] + ], + [ + [ + [ + "3802248741973155448465813988468", + "-4003152078104534013783737725374", + "5380629481164699382605782718878", + "5668779431484416522636970969907" + ], + "0x92EDF1b8CEe54De67a14096371859E89ED611a50", + "Moo é🚀🚀 éo🚀oééMoéééM é🚀oMoo éoooé é🚀éo 🚀oooéMMo 🚀 M🚀éoé", + false, + "0xD66F05FC5111F0BFDFeFfE948FEa5783de6EA4AE" + ], + [ + [ + "-568062085438715178399079196926", + "9768430507367101076883772934365", + "-602562884632819818030647935923", + "-7459578771672695078781167433120" + ], + "0xc66d9d123Fe8B514C83827cecdddE250d9E263fd", + "Moo é🚀oéooMoM M Mo Méooéo🚀Mo M o o🚀éoooooo🚀éoo 🚀éoéoo🚀oéMMéoo ", + false, + "0x4CFAd9d2Cb54FdD0E8d9A78C6B007029E6E57B10" + ], + [ + [ + "644816355525406727468935310703", + "1065232650890388168589923806", + "-6018202306858049917167045549162", + "-6257445314057488991281944519143" + ], + "0x73f90F8eAb1502aA5D257a5391F391dD806df4D8", + "Moo é🚀", + false, + "0xB21ed17DE2f0563a22d4b0C4c1b7fB2A8c1e9cF1" + ] + ], + [ + [ + [ + "-2489685752560771594390836389999", + "-5836303905615012163872093609647", + "-7200372650153725693113821212136", + "-4800832066420430696408060081550" + ], + "0xbA407c054EA4479895a37d904cda3d66CD226D60", + "Moo é🚀M🚀oM🚀ééooo", + false, + "0x1394F327390C838B6BeE8e21940a6A44ed800463" + ], + [ + [ + "-791236597442537990931814752485", + "4914840373755983307267010724018", + "-7126416071102534009490142543381", + "-4891088028924601649376546604290" + ], + "0x193855C9EB73080C96550Cd235E41669193371a3", + "Moo é🚀🚀MoéoéMoMéM🚀M🚀🚀 o", + false, + "0xD290058A48b14ff6353b32f674d0ce59189CAb85" + ], + [ + [ + "-2947173121615078237433737900747", + "2538678727486459955635145404773", + "-2244139134378110706833632752394", + "1906538943279207716567008558391" + ], + "0x3A0A785A4ce48F22E736D0B822f41f8E8C57Ac1E", + "Moo é🚀éo", + true, + "0xC768F45520158e9b6E160221642B699B2b01E69E" + ] + ], + [ + [ + [ + "-8476296552097094217835189363703", + "6803076381013793203589571143330", + "9621124440692406663026919583497", + "-8939111491535559169016930193876" + ], + "0xEDA383fD7c62109168d6EA17FeD2CA220DD60d68", + "Moo é🚀MoM 🚀éMooo🚀oéo🚀🚀🚀 ", + false, + "0x24601f97F20C6A30eD6f60dF733d53820B34EFe8" + ], + [ + [ + "-6854076920828393069582040199753", + "5982016531878963269214073646673", + "-2357231073712344983910852459304", + "-9314037810611913904280499603259" + ], + "0x246faEda159EAe57552b58a2e2653EbddC2a2d6f", + "Moo é🚀MMé🚀o oééMMoooo🚀M🚀oo🚀MoéoMoMo🚀🚀o éo", + false, + "0x63eDD3691A40B8e62a1D48e12417bE97636385A3" + ], + [ + [ + "-4599056693394174449082647137941", + "-9231406732178550736626676271382", + "895981846438197924265809498429", + "-1721109792104042131652308771101" + ], + "0x7Fc0cD50a7c9ac812fE52C9859edE2C7195E0979", + "Moo é🚀oé oéo éooM ooMoo 🚀éé oM🚀 éé 🚀oéM oéo🚀o🚀oooéoo o🚀o 🚀 MooM", + true, + "0xfaa39c63dd1c648e26D04a393138F44B9bA01372" + ] + ] + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "11868273551323100157294454126160326463210669472274297398079489269" + }, + { + "type": "number", + "value": "-31053727823250310608621249451147313770203284496117432770408255436" + }, + { + "type": "number", + "value": "-35551289483291868831798817457826337023067510140450468107009299707" + }, + { + "type": "number", + "value": "27705487658324299639010918334396919034900227026676127919688044132" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "12044017138693016628210818395860956364718205747862810206544386642" + }, + { + "type": "number", + "value": "-8702306605769261499790468258440394794965222848982942661743527506" + }, + { + "type": "number", + "value": "-28363395972824844711796614057537172777249910313607925943977872243" + }, + { + "type": "number", + "value": "47643637639193787944838147871685507329622557357669123821124769689" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-13203069845579571794049623603299015635575972392100603201804655820" + }, + { + "type": "number", + "value": "25946512839804814763054277019674198850840485901411554258917216628" + }, + { + "type": "number", + "value": "12891626248449257529908405529762949158768787481693885251968171290" + }, + { + "type": "number", + "value": "-27865920595705910445672894784189981965922047042118373127699957252" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1382207009521263128956750398763747923824410427347528465131537058228239109" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀oo🚀oé éo🚀M é" + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x0f64F8235aCAFAb58E0f9c103EDD1f547F58982A" + }, + { + "type": "string", + "value": "Moo é🚀éM🚀o🚀 Mo🚀oo🚀Mé🚀Mé🚀MMoo 🚀o Mo🚀🚀o 🚀oM🚀M 🚀éoo🚀 oMMM M o🚀" + } + ] + }, + { + "type": "address", + "value": "0x01a3DcEBB6f25D479747d3705C5c0229dFb507bD" + }, + { + "type": "hexstring", + "value": "0x8b74d28d4650ef0c7473fb124000f9e7f520" + }, + { + "type": "hexstring", + "value": "0xeb6053e207bb35" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [] + }, + { + "type": "hexstring", + "value": "0x72c5695695b2422f1977ab9d3a" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀MM 🚀MMéoM🚀 M oéoé éoéM 🚀éo oMMéMéM " + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-5074289586242130803561253864454" + }, + { + "type": "number", + "value": "-5138031919710303241181851731740" + }, + { + "type": "number", + "value": "-7577469842508842656615352962275" + }, + { + "type": "number", + "value": "9140643037559548420544799441937" + } + ] + }, + { + "type": "address", + "value": "0x9AfC5f78E9f61f3F3FeECb5E4CeF2335bFFdb218" + }, + { + "type": "string", + "value": "Moo é🚀oo🚀oo🚀 oo é🚀 Méooéé🚀 oo M🚀" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x5cf69d07918c6B7f830c51af2ba5b398CE926017" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-2711996766733954473430188112293" + }, + { + "type": "number", + "value": "7248488480405104317803945728814" + }, + { + "type": "number", + "value": "-6414385276541047787817126763340" + }, + { + "type": "number", + "value": "2822615459793162944907918080120" + } + ] + }, + { + "type": "address", + "value": "0x965DB25C87606fA31c27763a4A981dbEB5CeeC1d" + }, + { + "type": "string", + "value": "Moo é🚀MooéMM🚀é Moé" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xa56D0CCb57E38a06290e5d55e83f071B91cDba6a" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "6496975029233924612505735132214" + }, + { + "type": "number", + "value": "3262969799242826414099798020393" + }, + { + "type": "number", + "value": "-9148379312908505096423176473133" + }, + { + "type": "number", + "value": "-1490527201003463357452175013028" + } + ] + }, + { + "type": "address", + "value": "0xfDF5d03Ff3734DB79e18d2D98b7C6A002D9Dc1d5" + }, + { + "type": "string", + "value": "Moo é🚀oo🚀Mé " + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xf0b127B3C8a4AE57823613659Be13873d20E84cd" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3802248741973155448465813988468" + }, + { + "type": "number", + "value": "-4003152078104534013783737725374" + }, + { + "type": "number", + "value": "5380629481164699382605782718878" + }, + { + "type": "number", + "value": "5668779431484416522636970969907" + } + ] + }, + { + "type": "address", + "value": "0x92EDF1b8CEe54De67a14096371859E89ED611a50" + }, + { + "type": "string", + "value": "Moo é🚀🚀 éo🚀oééMoéééM é🚀oMoo éoooé é🚀éo 🚀oooéMMo 🚀 M🚀éoé" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xD66F05FC5111F0BFDFeFfE948FEa5783de6EA4AE" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-568062085438715178399079196926" + }, + { + "type": "number", + "value": "9768430507367101076883772934365" + }, + { + "type": "number", + "value": "-602562884632819818030647935923" + }, + { + "type": "number", + "value": "-7459578771672695078781167433120" + } + ] + }, + { + "type": "address", + "value": "0xc66d9d123Fe8B514C83827cecdddE250d9E263fd" + }, + { + "type": "string", + "value": "Moo é🚀oéooMoM M Mo Méooéo🚀Mo M o o🚀éoooooo🚀éoo 🚀éoéoo🚀oéMMéoo " + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x4CFAd9d2Cb54FdD0E8d9A78C6B007029E6E57B10" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "644816355525406727468935310703" + }, + { + "type": "number", + "value": "1065232650890388168589923806" + }, + { + "type": "number", + "value": "-6018202306858049917167045549162" + }, + { + "type": "number", + "value": "-6257445314057488991281944519143" + } + ] + }, + { + "type": "address", + "value": "0x73f90F8eAb1502aA5D257a5391F391dD806df4D8" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xB21ed17DE2f0563a22d4b0C4c1b7fB2A8c1e9cF1" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-2489685752560771594390836389999" + }, + { + "type": "number", + "value": "-5836303905615012163872093609647" + }, + { + "type": "number", + "value": "-7200372650153725693113821212136" + }, + { + "type": "number", + "value": "-4800832066420430696408060081550" + } + ] + }, + { + "type": "address", + "value": "0xbA407c054EA4479895a37d904cda3d66CD226D60" + }, + { + "type": "string", + "value": "Moo é🚀M🚀oM🚀ééooo" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x1394F327390C838B6BeE8e21940a6A44ed800463" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-791236597442537990931814752485" + }, + { + "type": "number", + "value": "4914840373755983307267010724018" + }, + { + "type": "number", + "value": "-7126416071102534009490142543381" + }, + { + "type": "number", + "value": "-4891088028924601649376546604290" + } + ] + }, + { + "type": "address", + "value": "0x193855C9EB73080C96550Cd235E41669193371a3" + }, + { + "type": "string", + "value": "Moo é🚀🚀MoéoéMoMéM🚀M🚀🚀 o" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0xD290058A48b14ff6353b32f674d0ce59189CAb85" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-2947173121615078237433737900747" + }, + { + "type": "number", + "value": "2538678727486459955635145404773" + }, + { + "type": "number", + "value": "-2244139134378110706833632752394" + }, + { + "type": "number", + "value": "1906538943279207716567008558391" + } + ] + }, + { + "type": "address", + "value": "0x3A0A785A4ce48F22E736D0B822f41f8E8C57Ac1E" + }, + { + "type": "string", + "value": "Moo é🚀éo" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xC768F45520158e9b6E160221642B699B2b01E69E" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-8476296552097094217835189363703" + }, + { + "type": "number", + "value": "6803076381013793203589571143330" + }, + { + "type": "number", + "value": "9621124440692406663026919583497" + }, + { + "type": "number", + "value": "-8939111491535559169016930193876" + } + ] + }, + { + "type": "address", + "value": "0xEDA383fD7c62109168d6EA17FeD2CA220DD60d68" + }, + { + "type": "string", + "value": "Moo é🚀MoM 🚀éMooo🚀oéo🚀🚀🚀 " + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x24601f97F20C6A30eD6f60dF733d53820B34EFe8" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-6854076920828393069582040199753" + }, + { + "type": "number", + "value": "5982016531878963269214073646673" + }, + { + "type": "number", + "value": "-2357231073712344983910852459304" + }, + { + "type": "number", + "value": "-9314037810611913904280499603259" + } + ] + }, + { + "type": "address", + "value": "0x246faEda159EAe57552b58a2e2653EbddC2a2d6f" + }, + { + "type": "string", + "value": "Moo é🚀MMé🚀o oééMMoooo🚀M🚀oo🚀MoéoMoMo🚀🚀o éo" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x63eDD3691A40B8e62a1D48e12417bE97636385A3" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-4599056693394174449082647137941" + }, + { + "type": "number", + "value": "-9231406732178550736626676271382" + }, + { + "type": "number", + "value": "895981846438197924265809498429" + }, + { + "type": "number", + "value": "-1721109792104042131652308771101" + } + ] + }, + { + "type": "address", + "value": "0x7Fc0cD50a7c9ac812fE52C9859edE2C7195E0979" + }, + { + "type": "string", + "value": "Moo é🚀oé oéo éooM ooMoo 🚀éé oM🚀 éé 🚀oéM oéo🚀o🚀oooéoo o🚀o 🚀 MooM" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xfaa39c63dd1c648e26D04a393138F44B9bA01372" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50611899806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906114df565b60405180910390f35b610056610e66565b61005e610e66565b610066610ea8565b61006e610ed5565b7a1cd9a50f3300f584bfe9324937e7cbdbf3b7e96dea09de51d784f581527a4b7cc842b4e790f2063b6a50ec0b4c344591c83b76c9898b6c8fcb1960208201527a566b9f2bad7e50d4e6d5ecc0cded557e64410a7a72ae28955e94fa1960408201527a43592ad407e80d17f6ca49091fdee3efbe0920a6a71c3ab7c2ce64606082015281526100fb610ed5565b7a1d4702a0cc6c46bc39146c6e067851848a3f3c90a0571ee294da5281527a1527756d1a6e4781812e669c95bfd78957aca81531c6541accc651196020808301919091527a44f295ab6e895877a0b427b1f6c34c57847fd208d46f5c9b8f8b721960408301527a73d0b55fbdf967bcf1da4508ec567679e0446096b9c7e1db78d799606083015282015261018d610ed5565b7a20184a6097737e9a671aed78e0b190fd539aa96761aeddaa755ccb1981527a3f128df90418590312a67cb2e08f83078026553585a8ba00a351746020808301919091527a1f567a8cbe096b68821b5ab29fd7f5be22dcadba0e63fc2f35fd1a6040808401919091527a43bd01450ce20d31377810fe02b9012a628dee6b769efe7b4a06031960608401528381019290925291835280518083019091527dc844e84c2dc212eafa92b52c85462d33cb9b4ae163263c1483ead8227b05815290820152610257610ef3565b600060405180606001604052806023815260200161184160239139825250604080518082019091526000815260606020820152730f64f8235acafab58e0f9c103edd1f547f58982a81526040805160a08101909152606f808252600091906117946020830139602080840191909152830191909152507301a3dcebb6f25d479747d3705c5c0229dfb507bd60408083019190915271045ba6946a32877863a39fd8920007cf3fa960751b606083015266eb6053e207bb3560c81b6080830152820152610321610f46565b600181526103666040805160e08101909152606060a08201908152600060c0830152819081526060602082018190526000604083018190528183015260809091015290565b604080518082018252606081526000602080830182905283518281529081019093529091816103ab565b610398610fa8565b8152602001906001900390816103905790505b508252506c3962b4ab4ad921178cbbd5ce9d60991b602082015281526040805160028082526060820190925260009181602001602082028036833701905050905060006001905080826000815181106104065761040661158f565b6020026020010190151590811515815250505060006001905080826001815181106104335761043361158f565b91151560209283029190910182015283810192909252506000604080840182905260016060808601919091528151908101909152603e808252919290919061180390830139608083015250602082015261048b610fc8565b610493610ff5565b61049b611022565b6104a3610ed5565b6c400be9f7dd36e8415a43ac84051981526c40d9e064027d277302cc42c71b196020808301919091526c5fa420255b92f2cb0f236f0ce2196040808401919091526c735f02b4f9d400a8dea3c80411606080850191909152928452739afc5f78e9f61f3f3feecb5e4cef2335bffdb218848301528051928301905260388083526000929161175c9083013960408301525060006060820152735cf69d07918c6b7f830c51af2ba5b398ce9260176080820152815261055f611022565b610567610ed5565b6c223aef259154b36080c1fd39a41981526c5b7d21242c917edb1a15231b2e6020808301919091526c50f5ff24673dea611ccc429b4b196040808401919091526c23a05cc8f7f2275812af0e787860608085019190915292845273965db25c87606fa31c27763a4a981dbeb5ceec1d8483015280518082018252601c81527f4d6f6f20c3a9f09f9a804d6f6fc3a94d4df09f9a80c3a9204d6fc3a900000000818401529084015260009183019190915273a56d0ccb57e38a06290e5d55e83f071b91cdba6a608083015282015261063c611022565b610644610ed5565b6c5200dbc8cff98861a1985df43681526c292f395b76aee1cd2f72bdd1296020808301919091526c7378020100d7a6292215710a2c196040808401919091526c12d0273401d5ac014955b7f4a31960608085019190915292845273fdf5d03ff3734db79e18d2d98b7c6a002d9dc1d584830152805180820182526015815274026b7b79061d4f84fcd4037b7f84fcd4026e1d4901605d1b928101929092528381019190915260009183019190915273f0b127b3c8a4ae57823613659be13873d20e84cd60808301528201528152610719610ff5565b610721611022565b610729610ed5565b6c2ffdba7186e0e9b8e07dece47481526c3286e1c9c18a354372223971bd196020808301919091526c43e9c063e0ea7dc47cff74199e6040808401919091526c478cd0714bd3cda0857d004b3360608401529183527392edf1b8cee54de67a14096371859e89ed611a5083820152815160808101909252605e808352600092916115a6908301396040830152506000606082015273d66f05fc5111f0bfdfeffe948fea5783de6ea4ae608082015281526107e1611022565b6107e9610ed5565b6c072b81f19cf70e45ba0a5de8fd1981526c7b4b8054ad0df17669758608dd6020808301919091526c079afc5604e6db1fd6c29b03b2196040808401919091526c5e2732f00fb6de7c1e1ec5759f19606084015291835273c66d9d123fe8b514c83827cecddde250d9e263fd83820152815160808101909252605b808352600092916116669083013960408301525060006060820152734cfad9d2cb54fdd0e8d9a78c6b007029e6e57b10608082015260208201526108a6611022565b6108ae610ed5565b6c0823839683bdd772f5323c6d6f81526b037123c9b703335df2eb55de6020808301919091526c4bf5dc4549a37baf501c599c69196040808401919091526c4efae572a984b99b618514e1e6196060808501919091529284527373f90f8eab1502aa5d257a5391f391dd806df4d88483015280518082018252600a8152689adede418753e13f3560b71b818401528482015260009284019290925273b21ed17de2f0563a22d4b0c4c1b7fb2a8c1e9cf1608084015290830191909152820152610975610ff5565b61097d611022565b610985610ed5565b6c1f6c9bc92ea13c87423e3ca86e1981526c49aa1d708fabe96acbbf179eae196020808301919091526c5ae1a8a8cc180b121c0a46ade7196040808401919091526c3c9853359f8e232a252dc5358d1960608085019190915292845273ba407c054ea4479895a37d904cda3d66cd226d608483015280518082018252601c81527f4d6f6f20c3a9f09f9a804df09f9a806f4df09f9a80c3a9c3a96f6f6f0000000092810192909252830152600090820152731394f327390c838b6bee8e21940a6a44ed80046360808201528152610a5a611022565b610a62610ed5565b6c09fc9f92c6dca62bc760fb20e41981526c3e08b4abc449086ab9864800b26020808301919091526c59f2b136043fbfcdca4eda3e14196040808401919091526c3dbbf5311ae5146c53eed545011960608085019190915292845273193855c9eb73080c96550cd235e41669193371a38483015280519283019052602a808352600092916116c1908301396040830152506000606082015273d290058a48b14ff6353b32f674d0ce59189cab8560808201526020820152610b21611022565b610b29610ed5565b6c2532d477d14c34ba5dedf1f2ca1981526c200ae9d32b2d83865e0b7ff1656020808301919091526c1c533462429fd56507114b7309196040808401919091526c18105c0d0b93a59fa425de3d37606080850191909152928452733a0a785a4ce48f22e736d0b822f41f8e8c57ac1e8483015280518082018252600d81526c4d6f6f20c3a9f09f9a80c3a96f60981b928101929092528381019190915260019183019190915273c768f45520158e9b6e160221642b699b2b01e69e608083015282810191909152820152610bfb610ff5565b610c03611022565b610c0b610ed5565b6c6afc642c94c0c57aad33dbe3f61981526c55ddece359ffb796272727e6a26020808301919091526c796f879bb99ac3ffaa7023af096040808401919091526c70d3d3b820a64956f8b56351d31960608085019190915292845273eda383fd7c62109168d6ea17fed2ca220dd60d688483015280519283019052602d8083526000929161172f90830139604083015250600060608201527324601f97f20c6a30ed6f60df733d53820b34efe860808201528152610cc6611022565b610cce610ed5565b6c5682b78bbd3eba18147bf472481981526c4b80f019615e65a3e33ec5ee516020808301919091526c1dc09fd7ee768fed505c55fb27196040808401919091526c758f478063e0e0003ddccf473a19606084015291835273246faeda159eae57552b58a2e2653ebddc2a2d6f838201528151608081019092526044808352600092916116eb90830139604083015250600060608201527363edd3691a40b8e62a1d48e12417be97636385a360808201526020820152610d8b611022565b610d93610ed5565b6c3a0c5a88661924f7ce899b4e941981526c748448acea43c99bcd28de0915196020808301919091526c0b4f12d004cb1ba5e15ad9513d6040808401919091526c15b934a6f0438cde49ae4a211c196060840152918352737fc0cd50a7c9ac812fe52c9859ede2c7195e097983820152815160a08101909252606280835260009291611604908301396040830152506001606082015273faa39c63dd1c648e26d04a393138f44b9ba013726080820152808260026020020152508082600360200201525060408201526060820152919050565b6040518060800160405280610e79610ea8565b815260408051602080820183526000825283015201610e96610ef3565b8152602001610ea3610f46565b905290565b60405180606001604052806003905b610ebf610ed5565b815260200190600190039081610eb75790505090565b60405180608001604052806004906020820280368337509192915050565b6040518060a0016040528060608152602001610f2b604051806040016040528060006001600160a01b03168152602001606081525090565b81526000602082018190526040820181905260609091015290565b6040518060600160405280600015158152602001610f9b6040805160e08101909152606060a08201908152600060c0830152819081526060602082018190526000604083018190528183015260809091015290565b8152602001610ea3610fc8565b6040518060400160405280610fbb611057565b8152602001610ea3610ed5565b60405180608001604052806004905b610fdf610ff5565b815260200190600190039081610fd75790505090565b60405180606001604052806003905b61100c611022565b8152602001906001900390816110045790505090565b6040518060a00160405280611035610ed5565b8152600060208201819052606060408301819052820181905260809091015290565b6040518060a0016040528061106a61108c565b8152600060208201819052604082018190526060820181905260809091015290565b60405180602001604052806001905b60408051808201909152600081526060602082015281526020019060019003908161109b5790505090565b6000815180845260005b818110156110ec576020818501810151868301820152016110d0565b818111156110fe576000602083870101525b50601f01601f19169290920160200192915050565b6000815160a0845261112860a08501826110c6565b90506020830151848203602086015260018060a01b03808251168352602082015191506040602084015261115f60408401836110c6565b925080604086015116604087015250506dffffffffffffffffffffffffffff19606084015116606085015266ffffffffffffff60c81b60808401511660808501528091505092915050565b8060005b60048110156111d557815165ffffffffffff168452602093840193909101906001016111ae565b50505050565b600081518084526020808501945080840160005b8381101561120d5781511515875295820195908201906001016111ef565b509495945050505050565b60008260808082018460005b60048082106112335750611309565b8584038952825184606080820160005b60038110156112ea57888203845284518051610100908460005b8a81101561127e578251600c0b82526020928301929091019060010161125d565b5050506020828101516001600160a01b03168d860152604083015160a086018390526112ac838701826110c6565b925050858301516112c160c087018215159052565b50918c01516001600160a01b03811660e086015291968701969590950194925050600101611243565b5060209c8d019c90975095909501945050506001919091019050611224565b50909695505050505050565b8051151582526000602080830151606082860152805160a060608701526101408601815160406101008901528181518084526101608a0191506101608160051b8b01019350868301925060005b8181101561143d578a850361015f190183528351805160a0808852815181890191909152610160880190610140890160005b60018110156113d9578a840361013f1901825282518051151585528e015160408f86018190526113c6908601826110c6565b945050918d0191908d0190600101611394565b5050508a820151151560c089015260408201516001600160a01b0390811660e08a0152606083015181166101008a0152608090920151918216610120890152918a015191611429888c01846111aa565b965050509287019291870191600101611362565b505050509083015172ffffffffffffffffffffffffffffffffffffff191661012087015291810151605f1986840381016080880152909261147e81856111db565b935050604082015161149460a088018215159052565b506060820151151560c087015260809091015185830390910160e08601526114bc82826110c6565b915050604083015184820360408601526114d68282611218565b95945050505050565b602080825282516000919082848301815b600381101561153457835182845b600481101561151e578251601a0b825291870191908701906001016114fe565b50505092840192608091909101906001016114f0565b50505050830151516001600160f01b03166101a083015260408301516101e06101c08401819052611569610200850183611113565b91506060850151601f1985840301828601526115858382611315565b9695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a80f09f9a8020c3a96ff09f9a806fc3a9c3a94d6fc3a9c3a9c3a94d20c3a9f09f9a806f4d6f6f20c3a96f6f6fc3a920c3a9f09f9a80c3a96f20f09f9a806f6f6fc3a94d4d6f20f09f9a80204df09f9a80c3a96fc3a94d6f6f20c3a9f09f9a806fc3a9206fc3a96f20c3a96f6f4d206f6f4d6f6f20f09f9a80c3a9c3a9206f4df09f9a8020c3a9c3a920f09f9a806fc3a94d206fc3a96ff09f9a806ff09f9a806f6f6fc3a96f6f206ff09f9a806f20f09f9a80204d6f6f4d4d6f6f20c3a9f09f9a806fc3a96f6f4d6f4d204d204d6f204dc3a96f6fc3a96ff09f9a804d6f204d20206f206ff09f9a80c3a96f6f6f6f6f6ff09f9a80c3a96f6f20f09f9a80c3a96fc3a96f6ff09f9a806fc3a94d4dc3a96f6f204d6f6f20c3a9f09f9a80f09f9a804d6fc3a96fc3a94d6f4dc3a94df09f9a804df09f9a80f09f9a80206f4d6f6f20c3a9f09f9a804d4dc3a9f09f9a806f206fc3a9c3a94d4d6f6f6f6ff09f9a804df09f9a806f6ff09f9a804d6fc3a96f4d6f4d6ff09f9a80f09f9a806f20c3a96f4d6f6f20c3a9f09f9a804d6f4d20f09f9a80c3a94d6f6f6ff09f9a806fc3a96ff09f9a80f09f9a80f09f9a80204d6f6f20c3a9f09f9a806f6ff09f9a806f6ff09f9a80206f6f2020c3a9f09f9a80204dc3a96f6fc3a9c3a9f09f9a80206f6f204df09f9a804d6f6f20c3a9f09f9a80c3a94df09f9a806ff09f9a80204d6ff09f9a806f6ff09f9a804dc3a9f09f9a804dc3a9f09f9a804d4d6f6f20f09f9a806f204d6ff09f9a80f09f9a806f20f09f9a806f4df09f9a804d20f09f9a80c3a96f6ff09f9a80206f4d4d4d2020204d206ff09f9a804d6f6f20c3a9f09f9a804d4d20f09f9a804d4dc3a96f4df09f9a80204d206fc3a96fc3a920c3a96fc3a94d20f09f9a80c3a96f206f4d4dc3a94dc3a94d204d6f6f20c3a9f09f9a80f09f9a806f6ff09f9a806fc3a920c3a96ff09f9a804d20c3a9a2646970667358221220cb20887fca174ae7da1efdb626aba7dc4a3fbf6f7dfbfbf0cbd4416ccb9da45564736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_9f7d5788 {\n uint240 s_0;\n }\n\n struct S_8090aaf4 {\n address s_0;\n string s_1;\n }\n\n struct S_4d8ea1c9 {\n string s_0;\n S_8090aaf4 s_1;\n address s_2;\n bytes18 s_3;\n bytes7 s_4;\n }\n\n struct S_0e00bb9b {\n bool s_0;\n string s_1;\n }\n\n struct S_4ed2e74c {\n S_0e00bb9b[1] s_0;\n bool s_1;\n address s_2;\n address s_3;\n address s_4;\n }\n\n struct S_8e70aa5a {\n S_4ed2e74c s_0;\n uint48[4] s_1;\n }\n\n struct S_7d704509 {\n S_8e70aa5a[] s_0;\n bytes13 s_1;\n }\n\n struct S_af8b831e {\n S_7d704509 s_0;\n bool[] s_1;\n bool s_2;\n bool s_3;\n string s_4;\n }\n\n struct S_644e90dd {\n int104[4] s_0;\n address s_1;\n string s_2;\n bool s_3;\n address s_4;\n }\n\n struct S_0640fa72 {\n bool s_0;\n S_af8b831e s_1;\n S_644e90dd[3][4] s_2;\n }\n\n struct S_85db563d {\n int216[4][3] s_0;\n S_9f7d5788 s_1;\n S_4d8ea1c9 s_2;\n S_0640fa72 s_3;\n }\n\n function test () public pure returns (S_85db563d memory) {\n S_85db563d memory r;\n {\n int216[4][3] memory r_0;\n {\n int216[4] memory r_0_0;\n {\n int216 r_0_0_0 = 11868273551323100157294454126160326463210669472274297398079489269;\n r_0_0[0] = r_0_0_0;\n }\n {\n int216 r_0_0_1 = -31053727823250310608621249451147313770203284496117432770408255436;\n r_0_0[1] = r_0_0_1;\n }\n {\n int216 r_0_0_2 = -35551289483291868831798817457826337023067510140450468107009299707;\n r_0_0[2] = r_0_0_2;\n }\n {\n int216 r_0_0_3 = 27705487658324299639010918334396919034900227026676127919688044132;\n r_0_0[3] = r_0_0_3;\n }\n r_0[0] = r_0_0;\n }\n {\n int216[4] memory r_0_1;\n {\n int216 r_0_1_0 = 12044017138693016628210818395860956364718205747862810206544386642;\n r_0_1[0] = r_0_1_0;\n }\n {\n int216 r_0_1_1 = -8702306605769261499790468258440394794965222848982942661743527506;\n r_0_1[1] = r_0_1_1;\n }\n {\n int216 r_0_1_2 = -28363395972824844711796614057537172777249910313607925943977872243;\n r_0_1[2] = r_0_1_2;\n }\n {\n int216 r_0_1_3 = 47643637639193787944838147871685507329622557357669123821124769689;\n r_0_1[3] = r_0_1_3;\n }\n r_0[1] = r_0_1;\n }\n {\n int216[4] memory r_0_2;\n {\n int216 r_0_2_0 = -13203069845579571794049623603299015635575972392100603201804655820;\n r_0_2[0] = r_0_2_0;\n }\n {\n int216 r_0_2_1 = 25946512839804814763054277019674198850840485901411554258917216628;\n r_0_2[1] = r_0_2_1;\n }\n {\n int216 r_0_2_2 = 12891626248449257529908405529762949158768787481693885251968171290;\n r_0_2[2] = r_0_2_2;\n }\n {\n int216 r_0_2_3 = -27865920595705910445672894784189981965922047042118373127699957252;\n r_0_2[3] = r_0_2_3;\n }\n r_0[2] = r_0_2;\n }\n r.s_0 = r_0;\n }\n {\n S_9f7d5788 memory r_1;\n {\n uint240 r_1_0 = 1382207009521263128956750398763747923824410427347528465131537058228239109;\n r_1.s_0 = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n S_4d8ea1c9 memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀🚀oo🚀oé éo🚀M é\";\n r_2.s_0 = r_2_0;\n }\n {\n S_8090aaf4 memory r_2_1;\n {\n address r_2_1_0 = 0x0f64F8235aCAFAb58E0f9c103EDD1f547F58982A;\n r_2_1.s_0 = r_2_1_0;\n }\n {\n string memory r_2_1_1 = unicode\"Moo é🚀éM🚀o🚀 Mo🚀oo🚀Mé🚀Mé🚀MMoo 🚀o Mo🚀🚀o 🚀oM🚀M 🚀éoo🚀 oMMM M o🚀\";\n r_2_1.s_1 = r_2_1_1;\n }\n r_2.s_1 = r_2_1;\n }\n {\n address r_2_2 = 0x01a3DcEBB6f25D479747d3705C5c0229dFb507bD;\n r_2.s_2 = r_2_2;\n }\n {\n bytes18 r_2_3 = bytes18(0x8b74d28d4650ef0c7473fb124000f9e7f520);\n r_2.s_3 = r_2_3;\n }\n {\n bytes7 r_2_4 = bytes7(0xeb6053e207bb35);\n r_2.s_4 = r_2_4;\n }\n r.s_2 = r_2;\n }\n {\n S_0640fa72 memory r_3;\n {\n bool r_3_0 = true;\n r_3.s_0 = r_3_0;\n }\n {\n S_af8b831e memory r_3_1;\n {\n S_7d704509 memory r_3_1_0;\n {\n S_8e70aa5a[] memory r_3_1_0_0 = new S_8e70aa5a[](0);\n r_3_1_0.s_0 = r_3_1_0_0;\n }\n {\n bytes13 r_3_1_0_1 = bytes13(0x72c5695695b2422f1977ab9d3a);\n r_3_1_0.s_1 = r_3_1_0_1;\n }\n r_3_1.s_0 = r_3_1_0;\n }\n {\n bool[] memory r_3_1_1 = new bool[](2);\n {\n bool r_3_1_1_0 = true;\n r_3_1_1[0] = r_3_1_1_0;\n }\n {\n bool r_3_1_1_1 = true;\n r_3_1_1[1] = r_3_1_1_1;\n }\n r_3_1.s_1 = r_3_1_1;\n }\n {\n bool r_3_1_2 = false;\n r_3_1.s_2 = r_3_1_2;\n }\n {\n bool r_3_1_3 = true;\n r_3_1.s_3 = r_3_1_3;\n }\n {\n string memory r_3_1_4 = unicode\"Moo é🚀MM 🚀MMéoM🚀 M oéoé éoéM 🚀éo oMMéMéM \";\n r_3_1.s_4 = r_3_1_4;\n }\n r_3.s_1 = r_3_1;\n }\n {\n S_644e90dd[3][4] memory r_3_2;\n {\n S_644e90dd[3] memory r_3_2_0;\n {\n S_644e90dd memory r_3_2_0_0;\n {\n int104[4] memory r_3_2_0_0_0;\n {\n int104 r_3_2_0_0_0_0 = -5074289586242130803561253864454;\n r_3_2_0_0_0[0] = r_3_2_0_0_0_0;\n }\n {\n int104 r_3_2_0_0_0_1 = -5138031919710303241181851731740;\n r_3_2_0_0_0[1] = r_3_2_0_0_0_1;\n }\n {\n int104 r_3_2_0_0_0_2 = -7577469842508842656615352962275;\n r_3_2_0_0_0[2] = r_3_2_0_0_0_2;\n }\n {\n int104 r_3_2_0_0_0_3 = 9140643037559548420544799441937;\n r_3_2_0_0_0[3] = r_3_2_0_0_0_3;\n }\n r_3_2_0_0.s_0 = r_3_2_0_0_0;\n }\n {\n address r_3_2_0_0_1 = 0x9AfC5f78E9f61f3F3FeECb5E4CeF2335bFFdb218;\n r_3_2_0_0.s_1 = r_3_2_0_0_1;\n }\n {\n string memory r_3_2_0_0_2 = unicode\"Moo é🚀oo🚀oo🚀 oo é🚀 Méooéé🚀 oo M🚀\";\n r_3_2_0_0.s_2 = r_3_2_0_0_2;\n }\n {\n bool r_3_2_0_0_3 = false;\n r_3_2_0_0.s_3 = r_3_2_0_0_3;\n }\n {\n address r_3_2_0_0_4 = 0x5cf69d07918c6B7f830c51af2ba5b398CE926017;\n r_3_2_0_0.s_4 = r_3_2_0_0_4;\n }\n r_3_2_0[0] = r_3_2_0_0;\n }\n {\n S_644e90dd memory r_3_2_0_1;\n {\n int104[4] memory r_3_2_0_1_0;\n {\n int104 r_3_2_0_1_0_0 = -2711996766733954473430188112293;\n r_3_2_0_1_0[0] = r_3_2_0_1_0_0;\n }\n {\n int104 r_3_2_0_1_0_1 = 7248488480405104317803945728814;\n r_3_2_0_1_0[1] = r_3_2_0_1_0_1;\n }\n {\n int104 r_3_2_0_1_0_2 = -6414385276541047787817126763340;\n r_3_2_0_1_0[2] = r_3_2_0_1_0_2;\n }\n {\n int104 r_3_2_0_1_0_3 = 2822615459793162944907918080120;\n r_3_2_0_1_0[3] = r_3_2_0_1_0_3;\n }\n r_3_2_0_1.s_0 = r_3_2_0_1_0;\n }\n {\n address r_3_2_0_1_1 = 0x965DB25C87606fA31c27763a4A981dbEB5CeeC1d;\n r_3_2_0_1.s_1 = r_3_2_0_1_1;\n }\n {\n string memory r_3_2_0_1_2 = unicode\"Moo é🚀MooéMM🚀é Moé\";\n r_3_2_0_1.s_2 = r_3_2_0_1_2;\n }\n {\n bool r_3_2_0_1_3 = false;\n r_3_2_0_1.s_3 = r_3_2_0_1_3;\n }\n {\n address r_3_2_0_1_4 = 0xa56D0CCb57E38a06290e5d55e83f071B91cDba6a;\n r_3_2_0_1.s_4 = r_3_2_0_1_4;\n }\n r_3_2_0[1] = r_3_2_0_1;\n }\n {\n S_644e90dd memory r_3_2_0_2;\n {\n int104[4] memory r_3_2_0_2_0;\n {\n int104 r_3_2_0_2_0_0 = 6496975029233924612505735132214;\n r_3_2_0_2_0[0] = r_3_2_0_2_0_0;\n }\n {\n int104 r_3_2_0_2_0_1 = 3262969799242826414099798020393;\n r_3_2_0_2_0[1] = r_3_2_0_2_0_1;\n }\n {\n int104 r_3_2_0_2_0_2 = -9148379312908505096423176473133;\n r_3_2_0_2_0[2] = r_3_2_0_2_0_2;\n }\n {\n int104 r_3_2_0_2_0_3 = -1490527201003463357452175013028;\n r_3_2_0_2_0[3] = r_3_2_0_2_0_3;\n }\n r_3_2_0_2.s_0 = r_3_2_0_2_0;\n }\n {\n address r_3_2_0_2_1 = 0xfDF5d03Ff3734DB79e18d2D98b7C6A002D9Dc1d5;\n r_3_2_0_2.s_1 = r_3_2_0_2_1;\n }\n {\n string memory r_3_2_0_2_2 = unicode\"Moo é🚀oo🚀Mé \";\n r_3_2_0_2.s_2 = r_3_2_0_2_2;\n }\n {\n bool r_3_2_0_2_3 = false;\n r_3_2_0_2.s_3 = r_3_2_0_2_3;\n }\n {\n address r_3_2_0_2_4 = 0xf0b127B3C8a4AE57823613659Be13873d20E84cd;\n r_3_2_0_2.s_4 = r_3_2_0_2_4;\n }\n r_3_2_0[2] = r_3_2_0_2;\n }\n r_3_2[0] = r_3_2_0;\n }\n {\n S_644e90dd[3] memory r_3_2_1;\n {\n S_644e90dd memory r_3_2_1_0;\n {\n int104[4] memory r_3_2_1_0_0;\n {\n int104 r_3_2_1_0_0_0 = 3802248741973155448465813988468;\n r_3_2_1_0_0[0] = r_3_2_1_0_0_0;\n }\n {\n int104 r_3_2_1_0_0_1 = -4003152078104534013783737725374;\n r_3_2_1_0_0[1] = r_3_2_1_0_0_1;\n }\n {\n int104 r_3_2_1_0_0_2 = 5380629481164699382605782718878;\n r_3_2_1_0_0[2] = r_3_2_1_0_0_2;\n }\n {\n int104 r_3_2_1_0_0_3 = 5668779431484416522636970969907;\n r_3_2_1_0_0[3] = r_3_2_1_0_0_3;\n }\n r_3_2_1_0.s_0 = r_3_2_1_0_0;\n }\n {\n address r_3_2_1_0_1 = 0x92EDF1b8CEe54De67a14096371859E89ED611a50;\n r_3_2_1_0.s_1 = r_3_2_1_0_1;\n }\n {\n string memory r_3_2_1_0_2 = unicode\"Moo é🚀🚀 éo🚀oééMoéééM é🚀oMoo éoooé é🚀éo 🚀oooéMMo 🚀 M🚀éoé\";\n r_3_2_1_0.s_2 = r_3_2_1_0_2;\n }\n {\n bool r_3_2_1_0_3 = false;\n r_3_2_1_0.s_3 = r_3_2_1_0_3;\n }\n {\n address r_3_2_1_0_4 = 0xD66F05FC5111F0BFDFeFfE948FEa5783de6EA4AE;\n r_3_2_1_0.s_4 = r_3_2_1_0_4;\n }\n r_3_2_1[0] = r_3_2_1_0;\n }\n {\n S_644e90dd memory r_3_2_1_1;\n {\n int104[4] memory r_3_2_1_1_0;\n {\n int104 r_3_2_1_1_0_0 = -568062085438715178399079196926;\n r_3_2_1_1_0[0] = r_3_2_1_1_0_0;\n }\n {\n int104 r_3_2_1_1_0_1 = 9768430507367101076883772934365;\n r_3_2_1_1_0[1] = r_3_2_1_1_0_1;\n }\n {\n int104 r_3_2_1_1_0_2 = -602562884632819818030647935923;\n r_3_2_1_1_0[2] = r_3_2_1_1_0_2;\n }\n {\n int104 r_3_2_1_1_0_3 = -7459578771672695078781167433120;\n r_3_2_1_1_0[3] = r_3_2_1_1_0_3;\n }\n r_3_2_1_1.s_0 = r_3_2_1_1_0;\n }\n {\n address r_3_2_1_1_1 = 0xc66d9d123Fe8B514C83827cecdddE250d9E263fd;\n r_3_2_1_1.s_1 = r_3_2_1_1_1;\n }\n {\n string memory r_3_2_1_1_2 = unicode\"Moo é🚀oéooMoM M Mo Méooéo🚀Mo M o o🚀éoooooo🚀éoo 🚀éoéoo🚀oéMMéoo \";\n r_3_2_1_1.s_2 = r_3_2_1_1_2;\n }\n {\n bool r_3_2_1_1_3 = false;\n r_3_2_1_1.s_3 = r_3_2_1_1_3;\n }\n {\n address r_3_2_1_1_4 = 0x4CFAd9d2Cb54FdD0E8d9A78C6B007029E6E57B10;\n r_3_2_1_1.s_4 = r_3_2_1_1_4;\n }\n r_3_2_1[1] = r_3_2_1_1;\n }\n {\n S_644e90dd memory r_3_2_1_2;\n {\n int104[4] memory r_3_2_1_2_0;\n {\n int104 r_3_2_1_2_0_0 = 644816355525406727468935310703;\n r_3_2_1_2_0[0] = r_3_2_1_2_0_0;\n }\n {\n int104 r_3_2_1_2_0_1 = 1065232650890388168589923806;\n r_3_2_1_2_0[1] = r_3_2_1_2_0_1;\n }\n {\n int104 r_3_2_1_2_0_2 = -6018202306858049917167045549162;\n r_3_2_1_2_0[2] = r_3_2_1_2_0_2;\n }\n {\n int104 r_3_2_1_2_0_3 = -6257445314057488991281944519143;\n r_3_2_1_2_0[3] = r_3_2_1_2_0_3;\n }\n r_3_2_1_2.s_0 = r_3_2_1_2_0;\n }\n {\n address r_3_2_1_2_1 = 0x73f90F8eAb1502aA5D257a5391F391dD806df4D8;\n r_3_2_1_2.s_1 = r_3_2_1_2_1;\n }\n {\n string memory r_3_2_1_2_2 = unicode\"Moo é🚀\";\n r_3_2_1_2.s_2 = r_3_2_1_2_2;\n }\n {\n bool r_3_2_1_2_3 = false;\n r_3_2_1_2.s_3 = r_3_2_1_2_3;\n }\n {\n address r_3_2_1_2_4 = 0xB21ed17DE2f0563a22d4b0C4c1b7fB2A8c1e9cF1;\n r_3_2_1_2.s_4 = r_3_2_1_2_4;\n }\n r_3_2_1[2] = r_3_2_1_2;\n }\n r_3_2[1] = r_3_2_1;\n }\n {\n S_644e90dd[3] memory r_3_2_2;\n {\n S_644e90dd memory r_3_2_2_0;\n {\n int104[4] memory r_3_2_2_0_0;\n {\n int104 r_3_2_2_0_0_0 = -2489685752560771594390836389999;\n r_3_2_2_0_0[0] = r_3_2_2_0_0_0;\n }\n {\n int104 r_3_2_2_0_0_1 = -5836303905615012163872093609647;\n r_3_2_2_0_0[1] = r_3_2_2_0_0_1;\n }\n {\n int104 r_3_2_2_0_0_2 = -7200372650153725693113821212136;\n r_3_2_2_0_0[2] = r_3_2_2_0_0_2;\n }\n {\n int104 r_3_2_2_0_0_3 = -4800832066420430696408060081550;\n r_3_2_2_0_0[3] = r_3_2_2_0_0_3;\n }\n r_3_2_2_0.s_0 = r_3_2_2_0_0;\n }\n {\n address r_3_2_2_0_1 = 0xbA407c054EA4479895a37d904cda3d66CD226D60;\n r_3_2_2_0.s_1 = r_3_2_2_0_1;\n }\n {\n string memory r_3_2_2_0_2 = unicode\"Moo é🚀M🚀oM🚀ééooo\";\n r_3_2_2_0.s_2 = r_3_2_2_0_2;\n }\n {\n bool r_3_2_2_0_3 = false;\n r_3_2_2_0.s_3 = r_3_2_2_0_3;\n }\n {\n address r_3_2_2_0_4 = 0x1394F327390C838B6BeE8e21940a6A44ed800463;\n r_3_2_2_0.s_4 = r_3_2_2_0_4;\n }\n r_3_2_2[0] = r_3_2_2_0;\n }\n {\n S_644e90dd memory r_3_2_2_1;\n {\n int104[4] memory r_3_2_2_1_0;\n {\n int104 r_3_2_2_1_0_0 = -791236597442537990931814752485;\n r_3_2_2_1_0[0] = r_3_2_2_1_0_0;\n }\n {\n int104 r_3_2_2_1_0_1 = 4914840373755983307267010724018;\n r_3_2_2_1_0[1] = r_3_2_2_1_0_1;\n }\n {\n int104 r_3_2_2_1_0_2 = -7126416071102534009490142543381;\n r_3_2_2_1_0[2] = r_3_2_2_1_0_2;\n }\n {\n int104 r_3_2_2_1_0_3 = -4891088028924601649376546604290;\n r_3_2_2_1_0[3] = r_3_2_2_1_0_3;\n }\n r_3_2_2_1.s_0 = r_3_2_2_1_0;\n }\n {\n address r_3_2_2_1_1 = 0x193855C9EB73080C96550Cd235E41669193371a3;\n r_3_2_2_1.s_1 = r_3_2_2_1_1;\n }\n {\n string memory r_3_2_2_1_2 = unicode\"Moo é🚀🚀MoéoéMoMéM🚀M🚀🚀 o\";\n r_3_2_2_1.s_2 = r_3_2_2_1_2;\n }\n {\n bool r_3_2_2_1_3 = false;\n r_3_2_2_1.s_3 = r_3_2_2_1_3;\n }\n {\n address r_3_2_2_1_4 = 0xD290058A48b14ff6353b32f674d0ce59189CAb85;\n r_3_2_2_1.s_4 = r_3_2_2_1_4;\n }\n r_3_2_2[1] = r_3_2_2_1;\n }\n {\n S_644e90dd memory r_3_2_2_2;\n {\n int104[4] memory r_3_2_2_2_0;\n {\n int104 r_3_2_2_2_0_0 = -2947173121615078237433737900747;\n r_3_2_2_2_0[0] = r_3_2_2_2_0_0;\n }\n {\n int104 r_3_2_2_2_0_1 = 2538678727486459955635145404773;\n r_3_2_2_2_0[1] = r_3_2_2_2_0_1;\n }\n {\n int104 r_3_2_2_2_0_2 = -2244139134378110706833632752394;\n r_3_2_2_2_0[2] = r_3_2_2_2_0_2;\n }\n {\n int104 r_3_2_2_2_0_3 = 1906538943279207716567008558391;\n r_3_2_2_2_0[3] = r_3_2_2_2_0_3;\n }\n r_3_2_2_2.s_0 = r_3_2_2_2_0;\n }\n {\n address r_3_2_2_2_1 = 0x3A0A785A4ce48F22E736D0B822f41f8E8C57Ac1E;\n r_3_2_2_2.s_1 = r_3_2_2_2_1;\n }\n {\n string memory r_3_2_2_2_2 = unicode\"Moo é🚀éo\";\n r_3_2_2_2.s_2 = r_3_2_2_2_2;\n }\n {\n bool r_3_2_2_2_3 = true;\n r_3_2_2_2.s_3 = r_3_2_2_2_3;\n }\n {\n address r_3_2_2_2_4 = 0xC768F45520158e9b6E160221642B699B2b01E69E;\n r_3_2_2_2.s_4 = r_3_2_2_2_4;\n }\n r_3_2_2[2] = r_3_2_2_2;\n }\n r_3_2[2] = r_3_2_2;\n }\n {\n S_644e90dd[3] memory r_3_2_3;\n {\n S_644e90dd memory r_3_2_3_0;\n {\n int104[4] memory r_3_2_3_0_0;\n {\n int104 r_3_2_3_0_0_0 = -8476296552097094217835189363703;\n r_3_2_3_0_0[0] = r_3_2_3_0_0_0;\n }\n {\n int104 r_3_2_3_0_0_1 = 6803076381013793203589571143330;\n r_3_2_3_0_0[1] = r_3_2_3_0_0_1;\n }\n {\n int104 r_3_2_3_0_0_2 = 9621124440692406663026919583497;\n r_3_2_3_0_0[2] = r_3_2_3_0_0_2;\n }\n {\n int104 r_3_2_3_0_0_3 = -8939111491535559169016930193876;\n r_3_2_3_0_0[3] = r_3_2_3_0_0_3;\n }\n r_3_2_3_0.s_0 = r_3_2_3_0_0;\n }\n {\n address r_3_2_3_0_1 = 0xEDA383fD7c62109168d6EA17FeD2CA220DD60d68;\n r_3_2_3_0.s_1 = r_3_2_3_0_1;\n }\n {\n string memory r_3_2_3_0_2 = unicode\"Moo é🚀MoM 🚀éMooo🚀oéo🚀🚀🚀 \";\n r_3_2_3_0.s_2 = r_3_2_3_0_2;\n }\n {\n bool r_3_2_3_0_3 = false;\n r_3_2_3_0.s_3 = r_3_2_3_0_3;\n }\n {\n address r_3_2_3_0_4 = 0x24601f97F20C6A30eD6f60dF733d53820B34EFe8;\n r_3_2_3_0.s_4 = r_3_2_3_0_4;\n }\n r_3_2_3[0] = r_3_2_3_0;\n }\n {\n S_644e90dd memory r_3_2_3_1;\n {\n int104[4] memory r_3_2_3_1_0;\n {\n int104 r_3_2_3_1_0_0 = -6854076920828393069582040199753;\n r_3_2_3_1_0[0] = r_3_2_3_1_0_0;\n }\n {\n int104 r_3_2_3_1_0_1 = 5982016531878963269214073646673;\n r_3_2_3_1_0[1] = r_3_2_3_1_0_1;\n }\n {\n int104 r_3_2_3_1_0_2 = -2357231073712344983910852459304;\n r_3_2_3_1_0[2] = r_3_2_3_1_0_2;\n }\n {\n int104 r_3_2_3_1_0_3 = -9314037810611913904280499603259;\n r_3_2_3_1_0[3] = r_3_2_3_1_0_3;\n }\n r_3_2_3_1.s_0 = r_3_2_3_1_0;\n }\n {\n address r_3_2_3_1_1 = 0x246faEda159EAe57552b58a2e2653EbddC2a2d6f;\n r_3_2_3_1.s_1 = r_3_2_3_1_1;\n }\n {\n string memory r_3_2_3_1_2 = unicode\"Moo é🚀MMé🚀o oééMMoooo🚀M🚀oo🚀MoéoMoMo🚀🚀o éo\";\n r_3_2_3_1.s_2 = r_3_2_3_1_2;\n }\n {\n bool r_3_2_3_1_3 = false;\n r_3_2_3_1.s_3 = r_3_2_3_1_3;\n }\n {\n address r_3_2_3_1_4 = 0x63eDD3691A40B8e62a1D48e12417bE97636385A3;\n r_3_2_3_1.s_4 = r_3_2_3_1_4;\n }\n r_3_2_3[1] = r_3_2_3_1;\n }\n {\n S_644e90dd memory r_3_2_3_2;\n {\n int104[4] memory r_3_2_3_2_0;\n {\n int104 r_3_2_3_2_0_0 = -4599056693394174449082647137941;\n r_3_2_3_2_0[0] = r_3_2_3_2_0_0;\n }\n {\n int104 r_3_2_3_2_0_1 = -9231406732178550736626676271382;\n r_3_2_3_2_0[1] = r_3_2_3_2_0_1;\n }\n {\n int104 r_3_2_3_2_0_2 = 895981846438197924265809498429;\n r_3_2_3_2_0[2] = r_3_2_3_2_0_2;\n }\n {\n int104 r_3_2_3_2_0_3 = -1721109792104042131652308771101;\n r_3_2_3_2_0[3] = r_3_2_3_2_0_3;\n }\n r_3_2_3_2.s_0 = r_3_2_3_2_0;\n }\n {\n address r_3_2_3_2_1 = 0x7Fc0cD50a7c9ac812fE52C9859edE2C7195E0979;\n r_3_2_3_2.s_1 = r_3_2_3_2_1;\n }\n {\n string memory r_3_2_3_2_2 = unicode\"Moo é🚀oé oéo éooM ooMoo 🚀éé oM🚀 éé 🚀oéM oéo🚀o🚀oooéoo o🚀o 🚀 MooM\";\n r_3_2_3_2.s_2 = r_3_2_3_2_2;\n }\n {\n bool r_3_2_3_2_3 = true;\n r_3_2_3_2.s_3 = r_3_2_3_2_3;\n }\n {\n address r_3_2_3_2_4 = 0xfaa39c63dd1c648e26D04a393138F44B9bA01372;\n r_3_2_3_2.s_4 = r_3_2_3_2_4;\n }\n r_3_2_3[2] = r_3_2_3_2;\n }\n r_3_2[3] = r_3_2_3;\n }\n r_3.s_2 = r_3_2;\n }\n r.s_3 = r_3;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000001cd9a50f3300f584bfe9324937e7cbdbf3b7e96dea09de51d784f5ffffffffffb48337bd4b186f0df9c495af13f4b3cbba6e37c489367674937034ffffffffffa99460d45281af2b192a133f3212aa819bbef5858d51d76aa16b05000000000043592ad407e80d17f6ca49091fdee3efbe0920a6a71c3ab7c2ce6400000000001d4702a0cc6c46bc39146c6e067851848a3f3c90a0571ee294da52ffffffffffead88a92e591b87e7ed199636a402876a85357eace39abe53339aeffffffffffbb0d6a549176a7885f4bd84e093cb3a87b802df72b90a36470748d000000000073d0b55fbdf967bcf1da4508ec567679e0446096b9c7e1db78d799ffffffffffdfe7b59f688c816598e512871f4e6f02ac6556989e5122558aa33400000000003f128df90418590312a67cb2e08f83078026553585a8ba00a3517400000000001f567a8cbe096b68821b5ab29fd7f5be22dcadba0e63fc2f35fd1affffffffffbc42febaf31df2cec887ef01fd46fed59d72119489610184b5f9fc0000c844e84c2dc212eafa92b52c85462d33cb9b4ae163263c1483ead8227b0500000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000001a3dcebb6f25d479747d3705c5c0229dfb507bd8b74d28d4650ef0c7473fb124000f9e7f5200000000000000000000000000000eb6053e207bb350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234d6f6f20c3a9f09f9a80f09f9a806f6ff09f9a806fc3a920c3a96ff09f9a804d20c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000f64f8235acafab58e0f9c103edd1f547f58982a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006f4d6f6f20c3a9f09f9a80c3a94df09f9a806ff09f9a80204d6ff09f9a806f6ff09f9a804dc3a9f09f9a804dc3a9f09f9a804d4d6f6f20f09f9a806f204d6ff09f9a80f09f9a806f20f09f9a806f4df09f9a804d20f09f9a80c3a96f6ff09f9a80206f4d4d4d2020204d206ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000004072c5695695b2422f1977ab9d3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a804d4d20f09f9a804d4dc3a96f4df09f9a80204d206fc3a96fc3a920c3a96fc3a94d20f09f9a80c3a96f206f4d4dc3a94dc3a94d200000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000009600000000000000000000000000000000000000000000000000000000000000da0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000300ffffffffffffffffffffffffffffffffffffffbff4160822c917bea5bc537bfaffffffffffffffffffffffffffffffffffffffbf261f9bfd82d88cfd33bd38e4ffffffffffffffffffffffffffffffffffffffa05bdfdaa46d0d34f0dc90f31d00000000000000000000000000000000000000735f02b4f9d400a8dea3c804110000000000000000000000009afc5f78e9f61f3f3feecb5e4cef2335bffdb218000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005cf69d07918c6b7f830c51af2ba5b398ce92601700000000000000000000000000000000000000000000000000000000000000384d6f6f20c3a9f09f9a806f6ff09f9a806f6ff09f9a80206f6f2020c3a9f09f9a80204dc3a96f6fc3a9c3a9f09f9a80206f6f204df09f9a800000000000000000ffffffffffffffffffffffffffffffffffffffddc510da6eab4c9f7f3e02c65b000000000000000000000000000000000000005b7d21242c917edb1a15231b2effffffffffffffffffffffffffffffffffffffaf0a00db98c2159ee333bd64b40000000000000000000000000000000000000023a05cc8f7f2275812af0e7878000000000000000000000000965db25c87606fa31c27763a4a981dbeb5ceec1d00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a56d0ccb57e38a06290e5d55e83f071b91cdba6a000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a804d6f6fc3a94d4df09f9a80c3a9204d6fc3a900000000000000000000000000000000000000000000005200dbc8cff98861a1985df43600000000000000000000000000000000000000292f395b76aee1cd2f72bdd129ffffffffffffffffffffffffffffffffffffff8c87fdfeff2859d6ddea8ef5d3ffffffffffffffffffffffffffffffffffffffed2fd8cbfe2a53feb6aa480b5c000000000000000000000000fdf5d03ff3734db79e18d2d98b7c6a002d9dc1d500000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0b127b3c8a4ae57823613659be13873d20e84cd00000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a806f6ff09f9a804dc3a920200000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000002ffdba7186e0e9b8e07dece474ffffffffffffffffffffffffffffffffffffffcd791e363e75cabc8dddc68e420000000000000000000000000000000000000043e9c063e0ea7dc47cff74199e00000000000000000000000000000000000000478cd0714bd3cda0857d004b3300000000000000000000000092edf1b8cee54de67a14096371859e89ed611a5000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d66f05fc5111f0bfdfeffe948fea5783de6ea4ae000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a80f09f9a8020c3a96ff09f9a806fc3a9c3a94d6fc3a9c3a9c3a94d20c3a9f09f9a806f4d6f6f20c3a96f6f6fc3a920c3a9f09f9a80c3a96f20f09f9a806f6f6fc3a94d4d6f20f09f9a80204df09f9a80c3a96fc3a90000fffffffffffffffffffffffffffffffffffffff8d47e0e6308f1ba45f5a21702000000000000000000000000000000000000007b4b8054ad0df17669758608ddfffffffffffffffffffffffffffffffffffffff86503a9fb1924e0293d64fc4dffffffffffffffffffffffffffffffffffffffa1d8cd0ff0492183e1e13a8a60000000000000000000000000c66d9d123fe8b514c83827cecddde250d9e263fd000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004cfad9d2cb54fdd0e8d9a78c6b007029e6e57b10000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a806fc3a96f6f4d6f4d204d204d6f204dc3a96f6fc3a96ff09f9a804d6f204d20206f206ff09f9a80c3a96f6f6f6f6f6ff09f9a80c3a96f6f20f09f9a80c3a96fc3a96f6ff09f9a806fc3a94d4dc3a96f6f200000000000000000000000000000000000000000000000000823839683bdd772f5323c6d6f0000000000000000000000000000000000000000037123c9b703335df2eb55deffffffffffffffffffffffffffffffffffffffb40a23bab65c8450afe3a66396ffffffffffffffffffffffffffffffffffffffb1051a8d567b46649e7aeb1e1900000000000000000000000073f90f8eab1502aa5d257a5391f391dd806df4d800000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21ed17de2f0563a22d4b0c4c1b7fb2a8c1e9cf1000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000300ffffffffffffffffffffffffffffffffffffffe0936436d15ec378bdc1c35791ffffffffffffffffffffffffffffffffffffffb655e28f705416953440e86151ffffffffffffffffffffffffffffffffffffffa51e575733e7f4ede3f5b95218ffffffffffffffffffffffffffffffffffffffc367acca6071dcd5dad23aca72000000000000000000000000ba407c054ea4479895a37d904cda3d66cd226d60000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001394f327390c838b6bee8e21940a6a44ed800463000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a804df09f9a806f4df09f9a80c3a9c3a96f6f6f00000000fffffffffffffffffffffffffffffffffffffff603606d392359d4389f04df1b000000000000000000000000000000000000003e08b4abc449086ab9864800b2ffffffffffffffffffffffffffffffffffffffa60d4ec9fbc0403235b125c1ebffffffffffffffffffffffffffffffffffffffc2440acee51aeb93ac112abafe000000000000000000000000193855c9eb73080c96550cd235e41669193371a300000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d290058a48b14ff6353b32f674d0ce59189cab85000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a80f09f9a804d6fc3a96fc3a94d6f4dc3a94df09f9a804df09f9a80f09f9a80206f00000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffdacd2b882eb3cb45a2120e0d3500000000000000000000000000000000000000200ae9d32b2d83865e0b7ff165ffffffffffffffffffffffffffffffffffffffe3accb9dbd602a9af8eeb48cf60000000000000000000000000000000000000018105c0d0b93a59fa425de3d370000000000000000000000003a0a785a4ce48f22e736d0b822f41f8e8c57ac1e00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c768f45520158e9b6e160221642b699b2b01e69e000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a80c3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000340ffffffffffffffffffffffffffffffffffffff95039bd36b3f3a8552cc241c090000000000000000000000000000000000000055ddece359ffb796272727e6a200000000000000000000000000000000000000796f879bb99ac3ffaa7023af09ffffffffffffffffffffffffffffffffffffff8f2c2c47df59b6a9074a9cae2c000000000000000000000000eda383fd7c62109168d6ea17fed2ca220dd60d680000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024601f97f20c6a30ed6f60df733d53820b34efe8000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a804d6f4d20f09f9a80c3a94d6f6f6ff09f9a806fc3a96ff09f9a80f09f9a80f09f9a802000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffa97d487442c145e7eb840b8db7000000000000000000000000000000000000004b80f019615e65a3e33ec5ee51ffffffffffffffffffffffffffffffffffffffe23f602811897012afa3aa04d8ffffffffffffffffffffffffffffffffffffff8a70b87f9c1f1fffc22330b8c5000000000000000000000000246faeda159eae57552b58a2e2653ebddc2a2d6f0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063edd3691a40b8e62a1d48e12417be97636385a300000000000000000000000000000000000000000000000000000000000000444d6f6f20c3a9f09f9a804d4dc3a9f09f9a806f206fc3a9c3a94d4d6f6f6f6ff09f9a804df09f9a806f6ff09f9a804d6fc3a96f4d6f4d6ff09f9a80f09f9a806f20c3a96f00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffc5f3a57799e6db08317664b16bffffffffffffffffffffffffffffffffffffff8b7bb75315bc366432d721f6ea000000000000000000000000000000000000000b4f12d004cb1ba5e15ad9513dffffffffffffffffffffffffffffffffffffffea46cb590fbc7321b651b5dee30000000000000000000000007fc0cd50a7c9ac812fe52c9859ede2c7195e097900000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000faa39c63dd1c648e26d04a393138f44b9ba0137200000000000000000000000000000000000000000000000000000000000000624d6f6f20c3a9f09f9a806fc3a9206fc3a96f20c3a96f6f4d206f6f4d6f6f20f09f9a80c3a9c3a9206f4df09f9a8020c3a9c3a920f09f9a806fc3a94d206fc3a96ff09f9a806ff09f9a806f6f6fc3a96f6f206ff09f9a806f20f09f9a80204d6f6f4d000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-(string,bytes11,bool,((bytes28,string,bytes5,bytes23),bool,((bytes20,(address,int168,(string,bytes12),string[],string)[1],string[2][4],bool[4],address),(bytes29,bytes20),address[4],string[][1]),bool,(bytes2,(bytes29,string,(bool)),string)),bool)", + "type": "(string,bytes11,bool,((bytes28,string,bytes5,bytes23),bool,((bytes20,(address,int168,(string,bytes12),string[],string)[1],string[2][4],bool[4],address),(bytes29,bytes20),address[4],string[][1]),bool,(bytes2,(bytes29,string,(bool)),string)),bool)", + "value": [ + "Moo é🚀oo", + "0xed6276b0e1137444bde71d", + true, + [ + [ + "0x4b03a656f7c0cea1dfd46d09e1ea795d55d0fa03e723b13be7285230", + "Moo é🚀éoM MMéoM🚀🚀oo🚀o o🚀éM oéMoMMé🚀🚀é🚀o🚀", + "0x1a1154eee0", + "0x841ea74d155e6a8be0531b6f1ada8db847e4e5cd42bea6" + ], + false, + [ + [ + "0x2585e35dca606d071bb79ee874f40a1eb77fd22d", + [ + [ + "0x1509AdB1c7ef0EC3D319A38632dB1Ee84903023b", + "-183729731541987963656296707929168285773664531960233", + [ + "Moo é🚀 ooé🚀🚀o🚀éé o🚀 ééooM🚀o", + "0x8e5a3b7cee6da5c957d11da8" + ], + [], + "Moo é🚀" + ] + ], + [ + ["Moo é🚀🚀ooooo o ooo 🚀o", "Moo é🚀oMo"], + [ + "Moo é🚀o éM🚀oééé🚀🚀ooMé🚀o o🚀🚀 o oM🚀 oo🚀o🚀M é 🚀Mooo🚀oMéMMéooé M", + "Moo é🚀 🚀 éoMé MoéoéoééoM🚀 éé🚀o M🚀oééoé🚀Méo🚀é🚀éoMéo" + ], + ["Moo é🚀", "Moo é🚀"], + [ + "Moo é🚀é🚀🚀o🚀Méoo", + "Moo é🚀M🚀🚀oéoéoM Moééooéo MM éo🚀Moéoo🚀oo 🚀o🚀oMéMM 🚀o🚀oé" + ] + ], + [false, false, true, true], + "0x4b3ffc3f0A77A93d3623c52106f7E825F6A3dF70" + ], + [ + "0x21b015316e7df02843be19c1788677fd96a29080488315a1676e70c17d", + "0x1b03c263d83a01ba4354594ed38be216302ebcfd" + ], + [ + "0x5ed9F862cbC897c207359E2D5885415B3DcDcF06", + "0x5559879070bB52f8Aff90882e103b2Ce52707367", + "0x4C022aCaA177Bc7E8fD3d86D11bf6f60132431aD", + "0xA198fdC31E15BAC7101B4f0499EF24C3de6e9288" + ], + [[]] + ], + false, + [ + "0xaf03", + [ + "0x17da8b0d4e8e39b023b6dea5605cf2472384f752123fb0093bbf3b74da", + "Moo é🚀oo ", + [true] + ], + "Moo é🚀éM🚀é🚀🚀oMooMoo oéMoM🚀Mé🚀🚀M🚀éoéMoMMo M o 🚀Moo" + ] + ], + false + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo" + }, + { + "type": "hexstring", + "value": "0xed6276b0e1137444bde71d" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x4b03a656f7c0cea1dfd46d09e1ea795d55d0fa03e723b13be7285230" + }, + { + "type": "string", + "value": "Moo é🚀éoM MMéoM🚀🚀oo🚀o o🚀éM oéMoMMé🚀🚀é🚀o🚀" + }, + { + "type": "hexstring", + "value": "0x1a1154eee0" + }, + { + "type": "hexstring", + "value": "0x841ea74d155e6a8be0531b6f1ada8db847e4e5cd42bea6" + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x2585e35dca606d071bb79ee874f40a1eb77fd22d" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x1509AdB1c7ef0EC3D319A38632dB1Ee84903023b" + }, + { + "type": "number", + "value": "-183729731541987963656296707929168285773664531960233" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 ooé🚀🚀o🚀éé o🚀 ééooM🚀o" + }, + { + "type": "hexstring", + "value": "0x8e5a3b7cee6da5c957d11da8" + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀ooooo o ooo 🚀o" + }, + { + "type": "string", + "value": "Moo é🚀oMo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o éM🚀oééé🚀🚀ooMé🚀o o🚀🚀 o oM🚀 oo🚀o🚀M é 🚀Mooo🚀oMéMMéooé M" + }, + { + "type": "string", + "value": "Moo é🚀 🚀 éoMé MoéoéoééoM🚀 éé🚀o M🚀oééoé🚀Méo🚀é🚀éoMéo" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀🚀o🚀Méoo" + }, + { + "type": "string", + "value": "Moo é🚀M🚀🚀oéoéoM Moééooéo MM éo🚀Moéoo🚀oo 🚀o🚀oMéMM 🚀o🚀oé" + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0x4b3ffc3f0A77A93d3623c52106f7E825F6A3dF70" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x21b015316e7df02843be19c1788677fd96a29080488315a1676e70c17d" + }, + { + "type": "hexstring", + "value": "0x1b03c263d83a01ba4354594ed38be216302ebcfd" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x5ed9F862cbC897c207359E2D5885415B3DcDcF06" + }, + { + "type": "address", + "value": "0x5559879070bB52f8Aff90882e103b2Ce52707367" + }, + { + "type": "address", + "value": "0x4C022aCaA177Bc7E8fD3d86D11bf6f60132431aD" + }, + { + "type": "address", + "value": "0xA198fdC31E15BAC7101B4f0499EF24C3de6e9288" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [] + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xaf03" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x17da8b0d4e8e39b023b6dea5605cf2472384f752123fb0093bbf3b74da" + }, + { + "type": "string", + "value": "Moo é🚀oo " + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀éM🚀é🚀🚀oMooMoo oéMoM🚀Mé🚀🚀M🚀éoéMoMMo M o 🚀Moo" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50610fa1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190610c52565b60405180910390f35b610056610656565b61005e610656565b604080518082018252600c81526b4d6f6f20c3a9f09f9a806f6f60a01b6020808301919091529083526aed6276b0e1137444bde71d60a81b908301526001908201526100a8610697565b60408051608080820183526060602080840182905260008486018190529184018290527f4b03a656f7c0cea1dfd46d09e1ea795d55d0fa03e723b13be72852300000000084528451928301909452604b8083529293909290610f219083013960208084019190915263d08aa77760dd1b60408401527f841ea74d155e6a8be0531b6f1ada8db847e4e5cd42bea60000000000000000006060840152918352506000908201526101556106ec565b61015d61073c565b732585e35dca606d071bb79ee874f40a1eb77fd22d60601b815261017f610771565b6040805160a081018252600080825260208083018281528451808601865260608082528184018590528587019190915280850181905260808501819052731509adb1c7ef0ec3d319a38632db1ee84903023b8552747db68619e441792e8eb98e73e05a72db56dfd6d1a81990915284518086018652818152808301849052855191820190955260358082529394939091610eec908301398252506b11cb476f9dcdb4b92afa23b560a31b6020820152604082015260008060405190808252806020026020018201604052801561026957816020015b60608152602001906001900390816102545790505b5060608301525060408051808201909152600a8152689adede418753e13f3560b71b60208083019190915260808301919091529082528201526102aa6107d1565b6102b26107fe565b604080518082018252601f81527f4d6f6f20c3a9f09f9a80f09f9a806f6f6f6f6f206f206f6f6f20f09f9a806f006020808301919091529083528151808301909252600d82526c4d6f6f20c3a9f09f9a806f4d6f60981b82820152820152815261031a6107fe565b60006040518060a00160405280606b8152602001610d76606b91398252506040805160808101909152605d80825260009190610de160208301396020808401919091528301919091525061036c6107fe565b604080518082018252600a808252689adede418753e13f3560b71b60208084018290529285528351808501855291825281830152908301528201526103af6107fe565b604080518082018252601e81527f4d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a806ff09f9a804dc3a96f6f0000602080830191909152908352815160808101909252605b80835260009291610e3e908301396020830152506060820152604082015261041a610825565b60008082526020808301919091526001604080840182905260608085019290925290840192909252734b3ffc3f0a77a93d3623c52106f7e825f6a3df70608084015291835280518082019091527f21b015316e7df02843be19c1788677fd96a29080488315a1676e70c17d0000008152731b03c263d83a01ba4354594ed38be216302ebcfd60601b81830152908201526104b2610825565b735ed9f862cbc897c207359e2d5885415b3dcdcf068152735559879070bb52f8aff90882e103b2ce52707367602080830191909152734c022acaa177bc7e8fd3d86d11bf6f60132431ad60408084019190915273a198fdc31e15bac7101b4f0499ef24c3de6e92886060808501919091528482019390935280518083018252928352805160008082529281019091528161055c565b60608152602001906001900390816105475790505b50825250606082810191909152604083019190915260009082015261057f610843565b61af0360f01b81526105b460408051606080820183526000808352602080840192909252835191820184528152909182015290565b7f17da8b0d4e8e39b023b6dea5605cf2472384f752123fb0093bbf3b74da0000008152604080518082018252600e81526d026b7b79061d4f84fcd4037b790160951b60208083019190915280840191909152815180820183526001815282840152838101929092528051608081019091526053808252600092610e99908301396040830152506080808301919091526060830191909152600090820152919050565b6040518060a001604052806060815260200160006001600160a81b031916815260200160001515815260200161068a610697565b8152600060209091015290565b6040805161012081018252600060a08201818152606060c084015260e083018290526101008301829052825260208201529081016106d36106ec565b8152600060208201526040016106e7610843565b905290565b60405180608001604052806106ff61073c565b8152604080518082018252600080825260208083019190915283015201610724610825565b81526040805160208181019092526060815291015290565b6040805160a081019091526000815260208101610757610771565b81526020016107646107d1565b815260200161068a610825565b60405180602001604052806001905b6040805160a081018252600080825260208083018290528351808501855260608082528183019390935293830193909352808201819052608082015282526000199092019101816107805790505090565b60405180608001604052806004905b6107e86107fe565b8152602001906001900390816107e05790505090565b60405180604001604052806002905b606081526020019060019003908161080d5790505090565b60405180608001604052806004906020820280368337509192915050565b6040805160608101909152600081526020810161088360408051606080820183526000808352602080840192909252835191820184528152909182015290565b8152602001606081525090565b6000815180845260005b818110156108b65760208185018101518683018201520161089a565b818111156108c8576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015610925578284038952610913848351610890565b988501989350908401906001016108fb565b5091979650505050505050565b60008260808101836000805b600481101561099c57848403885282518460408101845b600281101561098357878203835261096e828551610890565b60209485019493909301929150600101610955565b5060209a8b019a9096509490940193505060010161093e565b50919695505050505050565b8060005b60048110156109cd57815115158452602093840193909101906001016109ac565b50505050565b8060005b60048110156109cd5781516001600160a01b03168452602093840193909101906001016109d7565b60008260208082018460005b6001811015610a36578483038852610a248383516108dd565b97840197925090830190600101610a0b565b50909695505050505050565b805161010080845281516bffffffffffffffffffffffff1916848201526020808301516101208601929092526000926102008601929091610220870191855b6001811015610b30576101ff19898503018652815160a060018060a01b0382511686528482015160140b858701526040808301518282890152805182848a0152610ace60e08a0182610890565b918801516001600160a01b03191660c08a015250606084810151898303828b01529193509150610afe83826108dd565b9250505060808083015192508682038188015250610b1c8183610890565b978501979550505090820190600101610a81565b5050604083015187830360ff19016101408901529350610b508285610932565b935060608301519150610b676101608801836109a8565b60808301519250610b846101e08801846001600160a01b03169052565b808601519250610bb581880184805162ffffff191682526020908101516bffffffffffffffffffffffff1916910152565b5050506040830151610bca60608601826109d3565b50606083015184820360e0860152610be282826109ff565b95945050505050565b61ffff60f01b8151168252600060208201516060602085015262ffffff198151166060850152602081015160606080860152610c2a60c0860182610890565b9050604082015151151560a0860152604084015191508481036040860152610be28183610890565b60006020808352835160a082850152610c6e60c0850182610890565b90506affffffffffffffffffffff60a81b828601511660408501526040850151151560608501526060850151601f19858303016080860152805160a0835263ffffffff1981511660a084015283810151608060c0850152610cd3610120850182610890565b60408301516001600160d81b03191660e086015260609092015168ffffffffffffffffff191661010085015250838201518015158585015290604083015194508381036040850152610d258186610a42565b945050506060810151610d3c606084018215159052565b50608081015190508183036080830152610d568382610beb565b925050506080840151610d6d60a085018215159052565b50939250505056fe4d6f6f20c3a9f09f9a806f2020c3a94df09f9a806fc3a9c3a9c3a9f09f9a80f09f9a806f6f4dc3a9f09f9a806f206ff09f9a80f09f9a80206f206f4df09f9a80206f6ff09f9a806ff09f9a804d20c3a920f09f9a804d6f6f6ff09f9a806f4dc3a94d4dc3a96f6fc3a9204d4d6f6f20c3a9f09f9a8020f09f9a802020c3a96f4dc3a920204d6fc3a96fc3a96fc3a9c3a96f4df09f9a802020c3a9c3a9f09f9a806f204df09f9a806fc3a9c3a96fc3a9f09f9a804dc3a96ff09f9a80c3a9f09f9a80c3a96f4dc3a96f4d6f6f20c3a9f09f9a804df09f9a80f09f9a806fc3a96fc3a96f4d204d6fc3a9c3a96f6fc3a96f204d4d20c3a96ff09f9a804d6fc3a96f6ff09f9a806f6f20f09f9a806ff09f9a806f4dc3a94d4d20f09f9a806ff09f9a806fc3a94d6f6f20c3a9f09f9a80c3a94df09f9a80c3a9f09f9a80f09f9a806f4d6f6f4d6f6f206fc3a94d6f4df09f9a804dc3a9f09f9a80f09f9a804df09f9a80c3a96fc3a94d6f4d4d6f204d206f20f09f9a804d6f6f4d6f6f20c3a9f09f9a80206f6fc3a9f09f9a80f09f9a806ff09f9a80c3a9c3a92020206ff09f9a8020c3a9c3a96f6f4df09f9a806f4d6f6f20c3a9f09f9a80c3a96f4d204d4dc3a96f4df09f9a80f09f9a806f6ff09f9a806f20206ff09f9a80c3a94d206fc3a94d6f4d4dc3a9f09f9a80f09f9a80c3a9f09f9a806ff09f9a80a2646970667358221220c35ed6209ffbb9a59b507bed196224bb86186d644cef1c79db85a7ad7253430e64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_024b2fb2 {\n bytes28 s_0;\n string s_1;\n bytes5 s_2;\n bytes23 s_3;\n }\n\n struct S_a5eefb3a {\n string s_0;\n bytes12 s_1;\n }\n\n struct S_bcaabad7 {\n address s_0;\n int168 s_1;\n S_a5eefb3a s_2;\n string[] s_3;\n string s_4;\n }\n\n struct S_968e61a6 {\n bytes20 s_0;\n S_bcaabad7[1] s_1;\n string[2][4] s_2;\n bool[4] s_3;\n address s_4;\n }\n\n struct S_f628b69f {\n bytes29 s_0;\n bytes20 s_1;\n }\n\n struct S_6cac2ef6 {\n S_968e61a6 s_0;\n S_f628b69f s_1;\n address[4] s_2;\n string[][1] s_3;\n }\n\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_5dbb2930 {\n bytes29 s_0;\n string s_1;\n S_c1053bda s_2;\n }\n\n struct S_a31119da {\n bytes2 s_0;\n S_5dbb2930 s_1;\n string s_2;\n }\n\n struct S_935276b3 {\n S_024b2fb2 s_0;\n bool s_1;\n S_6cac2ef6 s_2;\n bool s_3;\n S_a31119da s_4;\n }\n\n struct S_1c73d6ad {\n string s_0;\n bytes11 s_1;\n bool s_2;\n S_935276b3 s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_1c73d6ad memory) {\n S_1c73d6ad memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oo\";\n r.s_0 = r_0;\n }\n {\n bytes11 r_1 = bytes11(0xed6276b0e1137444bde71d);\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n S_935276b3 memory r_3;\n {\n S_024b2fb2 memory r_3_0;\n {\n bytes28 r_3_0_0 = bytes28(0x4b03a656f7c0cea1dfd46d09e1ea795d55d0fa03e723b13be7285230);\n r_3_0.s_0 = r_3_0_0;\n }\n {\n string memory r_3_0_1 = unicode\"Moo é🚀éoM MMéoM🚀🚀oo🚀o o🚀éM oéMoMMé🚀🚀é🚀o🚀\";\n r_3_0.s_1 = r_3_0_1;\n }\n {\n bytes5 r_3_0_2 = bytes5(0x1a1154eee0);\n r_3_0.s_2 = r_3_0_2;\n }\n {\n bytes23 r_3_0_3 = bytes23(0x841ea74d155e6a8be0531b6f1ada8db847e4e5cd42bea6);\n r_3_0.s_3 = r_3_0_3;\n }\n r_3.s_0 = r_3_0;\n }\n {\n bool r_3_1 = false;\n r_3.s_1 = r_3_1;\n }\n {\n S_6cac2ef6 memory r_3_2;\n {\n S_968e61a6 memory r_3_2_0;\n {\n bytes20 r_3_2_0_0 = bytes20(0x2585E35dcA606d071Bb79eE874f40a1Eb77fd22D);\n r_3_2_0.s_0 = r_3_2_0_0;\n }\n {\n S_bcaabad7[1] memory r_3_2_0_1;\n {\n S_bcaabad7 memory r_3_2_0_1_0;\n {\n address r_3_2_0_1_0_0 = 0x1509AdB1c7ef0EC3D319A38632dB1Ee84903023b;\n r_3_2_0_1_0.s_0 = r_3_2_0_1_0_0;\n }\n {\n int168 r_3_2_0_1_0_1 = -183729731541987963656296707929168285773664531960233;\n r_3_2_0_1_0.s_1 = r_3_2_0_1_0_1;\n }\n {\n S_a5eefb3a memory r_3_2_0_1_0_2;\n {\n string memory r_3_2_0_1_0_2_0 = unicode\"Moo é🚀 ooé🚀🚀o🚀éé o🚀 ééooM🚀o\";\n r_3_2_0_1_0_2.s_0 = r_3_2_0_1_0_2_0;\n }\n {\n bytes12 r_3_2_0_1_0_2_1 = bytes12(0x8e5a3b7cee6da5c957d11da8);\n r_3_2_0_1_0_2.s_1 = r_3_2_0_1_0_2_1;\n }\n r_3_2_0_1_0.s_2 = r_3_2_0_1_0_2;\n }\n {\n string[] memory r_3_2_0_1_0_3 = new string[](0);\n r_3_2_0_1_0.s_3 = r_3_2_0_1_0_3;\n }\n {\n string memory r_3_2_0_1_0_4 = unicode\"Moo é🚀\";\n r_3_2_0_1_0.s_4 = r_3_2_0_1_0_4;\n }\n r_3_2_0_1[0] = r_3_2_0_1_0;\n }\n r_3_2_0.s_1 = r_3_2_0_1;\n }\n {\n string[2][4] memory r_3_2_0_2;\n {\n string[2] memory r_3_2_0_2_0;\n {\n string memory r_3_2_0_2_0_0 = unicode\"Moo é🚀🚀ooooo o ooo 🚀o\";\n r_3_2_0_2_0[0] = r_3_2_0_2_0_0;\n }\n {\n string memory r_3_2_0_2_0_1 = unicode\"Moo é🚀oMo\";\n r_3_2_0_2_0[1] = r_3_2_0_2_0_1;\n }\n r_3_2_0_2[0] = r_3_2_0_2_0;\n }\n {\n string[2] memory r_3_2_0_2_1;\n {\n string memory r_3_2_0_2_1_0 = unicode\"Moo é🚀o éM🚀oééé🚀🚀ooMé🚀o o🚀🚀 o oM🚀 oo🚀o🚀M é 🚀Mooo🚀oMéMMéooé M\";\n r_3_2_0_2_1[0] = r_3_2_0_2_1_0;\n }\n {\n string memory r_3_2_0_2_1_1 = unicode\"Moo é🚀 🚀 éoMé MoéoéoééoM🚀 éé🚀o M🚀oééoé🚀Méo🚀é🚀éoMéo\";\n r_3_2_0_2_1[1] = r_3_2_0_2_1_1;\n }\n r_3_2_0_2[1] = r_3_2_0_2_1;\n }\n {\n string[2] memory r_3_2_0_2_2;\n {\n string memory r_3_2_0_2_2_0 = unicode\"Moo é🚀\";\n r_3_2_0_2_2[0] = r_3_2_0_2_2_0;\n }\n {\n string memory r_3_2_0_2_2_1 = unicode\"Moo é🚀\";\n r_3_2_0_2_2[1] = r_3_2_0_2_2_1;\n }\n r_3_2_0_2[2] = r_3_2_0_2_2;\n }\n {\n string[2] memory r_3_2_0_2_3;\n {\n string memory r_3_2_0_2_3_0 = unicode\"Moo é🚀é🚀🚀o🚀Méoo\";\n r_3_2_0_2_3[0] = r_3_2_0_2_3_0;\n }\n {\n string memory r_3_2_0_2_3_1 = unicode\"Moo é🚀M🚀🚀oéoéoM Moééooéo MM éo🚀Moéoo🚀oo 🚀o🚀oMéMM 🚀o🚀oé\";\n r_3_2_0_2_3[1] = r_3_2_0_2_3_1;\n }\n r_3_2_0_2[3] = r_3_2_0_2_3;\n }\n r_3_2_0.s_2 = r_3_2_0_2;\n }\n {\n bool[4] memory r_3_2_0_3;\n {\n bool r_3_2_0_3_0 = false;\n r_3_2_0_3[0] = r_3_2_0_3_0;\n }\n {\n bool r_3_2_0_3_1 = false;\n r_3_2_0_3[1] = r_3_2_0_3_1;\n }\n {\n bool r_3_2_0_3_2 = true;\n r_3_2_0_3[2] = r_3_2_0_3_2;\n }\n {\n bool r_3_2_0_3_3 = true;\n r_3_2_0_3[3] = r_3_2_0_3_3;\n }\n r_3_2_0.s_3 = r_3_2_0_3;\n }\n {\n address r_3_2_0_4 = 0x4b3ffc3f0A77A93d3623c52106f7E825F6A3dF70;\n r_3_2_0.s_4 = r_3_2_0_4;\n }\n r_3_2.s_0 = r_3_2_0;\n }\n {\n S_f628b69f memory r_3_2_1;\n {\n bytes29 r_3_2_1_0 = bytes29(0x21b015316e7df02843be19c1788677fd96a29080488315a1676e70c17d);\n r_3_2_1.s_0 = r_3_2_1_0;\n }\n {\n bytes20 r_3_2_1_1 = bytes20(0x1b03C263D83A01bA4354594Ed38BE216302EbcfD);\n r_3_2_1.s_1 = r_3_2_1_1;\n }\n r_3_2.s_1 = r_3_2_1;\n }\n {\n address[4] memory r_3_2_2;\n {\n address r_3_2_2_0 = 0x5ed9F862cbC897c207359E2D5885415B3DcDcF06;\n r_3_2_2[0] = r_3_2_2_0;\n }\n {\n address r_3_2_2_1 = 0x5559879070bB52f8Aff90882e103b2Ce52707367;\n r_3_2_2[1] = r_3_2_2_1;\n }\n {\n address r_3_2_2_2 = 0x4C022aCaA177Bc7E8fD3d86D11bf6f60132431aD;\n r_3_2_2[2] = r_3_2_2_2;\n }\n {\n address r_3_2_2_3 = 0xA198fdC31E15BAC7101B4f0499EF24C3de6e9288;\n r_3_2_2[3] = r_3_2_2_3;\n }\n r_3_2.s_2 = r_3_2_2;\n }\n {\n string[][1] memory r_3_2_3;\n {\n string[] memory r_3_2_3_0 = new string[](0);\n r_3_2_3[0] = r_3_2_3_0;\n }\n r_3_2.s_3 = r_3_2_3;\n }\n r_3.s_2 = r_3_2;\n }\n {\n bool r_3_3 = false;\n r_3.s_3 = r_3_3;\n }\n {\n S_a31119da memory r_3_4;\n {\n bytes2 r_3_4_0 = bytes2(0xaf03);\n r_3_4.s_0 = r_3_4_0;\n }\n {\n S_5dbb2930 memory r_3_4_1;\n {\n bytes29 r_3_4_1_0 = bytes29(0x17da8b0d4e8e39b023b6dea5605cf2472384f752123fb0093bbf3b74da);\n r_3_4_1.s_0 = r_3_4_1_0;\n }\n {\n string memory r_3_4_1_1 = unicode\"Moo é🚀oo \";\n r_3_4_1.s_1 = r_3_4_1_1;\n }\n {\n S_c1053bda memory r_3_4_1_2;\n {\n bool r_3_4_1_2_0 = true;\n r_3_4_1_2.s_0 = r_3_4_1_2_0;\n }\n r_3_4_1.s_2 = r_3_4_1_2;\n }\n r_3_4.s_1 = r_3_4_1;\n }\n {\n string memory r_3_4_2 = unicode\"Moo é🚀éM🚀é🚀🚀oMooMoo oéMoM🚀Mé🚀🚀M🚀éoéMoMMo M o 🚀Moo\";\n r_3_4.s_2 = r_3_4_2;\n }\n r_3.s_4 = r_3_4;\n }\n r.s_3 = r_3;\n }\n {\n bool r_4 = false;\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0ed6276b0e1137444bde71d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4d6f6f20c3a9f09f9a806f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a004b03a656f7c0cea1dfd46d09e1ea795d55d0fa03e723b13be72852300000000000000000000000000000000000000000000000000000000000000000000000801a1154eee0000000000000000000000000000000000000000000000000000000841ea74d155e6a8be0531b6f1ada8db847e4e5cd42bea6000000000000000000000000000000000000000000000000000000000000000000000000000000004b4d6f6f20c3a9f09f9a80c3a96f4d204d4dc3a96f4df09f9a80f09f9a806f6ff09f9a806f20206ff09f9a80c3a94d206fc3a94d6f4d4dc3a9f09f9a80f09f9a80c3a9f09f9a806ff09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010021b015316e7df02843be19c1788677fd96a29080488315a1676e70c17d0000001b03c263d83a01ba4354594ed38be216302ebcfd0000000000000000000000000000000000000000000000005ed9f862cbc897c207359e2d5885415b3dcdcf060000000000000000000000005559879070bb52f8aff90882e103b2ce527073670000000000000000000000004c022acaa177bc7e8fd3d86d11bf6f60132431ad000000000000000000000000a198fdc31e15bac7101b4f0499ef24c3de6e928800000000000000000000000000000000000000000000000000000000000008202585e35dca606d071bb79ee874f40a1eb77fd22d000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000004b3ffc3f0a77a93d3623c52106f7e825f6a3df7000000000000000000000000000000000000000000000000000000000000000200000000000000000000000001509adb1c7ef0ec3d319a38632db1ee84903023bffffffffffffffffffffff824979e61bbe86d17146718c1fa58d24a920292e5700000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000408e5a3b7cee6da5c957d11da8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000354d6f6f20c3a9f09f9a80206f6fc3a9f09f9a80f09f9a806ff09f9a80c3a9c3a92020206ff09f9a8020c3a9c3a96f6f4df09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001f4d6f6f20c3a9f09f9a80f09f9a806f6f6f6f6f206f206f6f6f20f09f9a806f00000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a806f4d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006b4d6f6f20c3a9f09f9a806f2020c3a94df09f9a806fc3a9c3a9c3a9f09f9a80f09f9a806f6f4dc3a9f09f9a806f206ff09f9a80f09f9a80206f206f4df09f9a80206f6ff09f9a806ff09f9a804d20c3a920f09f9a804d6f6f6ff09f9a806f4dc3a94d4dc3a96f6fc3a9204d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a8020f09f9a802020c3a96f4dc3a920204d6fc3a96fc3a96fc3a9c3a96f4df09f9a802020c3a9c3a9f09f9a806f204df09f9a806fc3a9c3a96fc3a9f09f9a804dc3a96ff09f9a80c3a9f09f9a80c3a96f4dc3a96f00000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001e4d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a806ff09f9a804dc3a96f6f0000000000000000000000000000000000000000000000000000000000000000005b4d6f6f20c3a9f09f9a804df09f9a80f09f9a806fc3a96fc3a96f4d204d6fc3a9c3a96f6fc3a96f204d4d20c3a96ff09f9a804d6fc3a96f6ff09f9a806f6f20f09f9a806ff09f9a806f4dc3a94d4d20f09f9a806ff09f9a806fc3a9000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000af030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010017da8b0d4e8e39b023b6dea5605cf2472384f752123fb0093bbf3b74da00000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a806f6f202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000534d6f6f20c3a9f09f9a80c3a94df09f9a80c3a9f09f9a80f09f9a806f4d6f6f4d6f6f206fc3a94d6f4df09f9a804dc3a9f09f9a80f09f9a804df09f9a80c3a96fc3a94d6f4d4d6f204d206f20f09f9a804d6f6f00000000000000000000000000" + }, + { + "name": "random-(string,((bool,address,int56[3],uint200,(bytes30,bool,(int192,bool,string,address[]),bool)),bytes22,address,string)[1],bool,(bytes26,string,bytes2,(address,bytes32[3],address,bytes8,(bytes17,int152))[2][4],(address,bytes2,bool,address,address)[1]),(bool))", + "type": "(string,((bool,address,int56[3],uint200,(bytes30,bool,(int192,bool,string,address[]),bool)),bytes22,address,string)[1],bool,(bytes26,string,bytes2,(address,bytes32[3],address,bytes8,(bytes17,int152))[2][4],(address,bytes2,bool,address,address)[1]),(bool))", + "value": [ + "Moo é🚀oo🚀 oo🚀 Mo🚀🚀o oMMéoé", + [ + [ + [ + false, + "0x78a1Fb3d7C3F3420854C36BB10ea7fDea80Ce919", + ["-26883565741535288", "-5141813151494236", "26629360009472432"], + "1603398987769685005722175597858365826291742512076644510389132", + [ + "0x1c6bda95fb3c9136aec682a6bdbcbd963f938455983189608675fd82507d", + false, + [ + "1046737888541635118449059417916377480933733099728971613817", + false, + "Moo é🚀oMMoooMo é🚀o🚀ooo🚀éMMéo éo🚀oM", + [ + "0x755Ed5385a0187438817d1E6Ff618a30039Aa810", + "0xf1B386675381c89B64c5E4A41fd8E6BeA47856fa" + ] + ], + false + ] + ], + "0x7f211f7170792e5b571a01020cd1c834766c35dc3a45", + "0x55ea89c08d94e5f14261F3533c9C613a2732Fb34", + "Moo é🚀oéo Moé 🚀 o oéoéMM 🚀🚀o oM ooMoé🚀éM" + ] + ], + true, + [ + "0x696e5ca8954b0f4a5bdb51c15d7674a47de75a4fdf68dc4167da", + "Moo é🚀o🚀éoé🚀oéM 🚀ooo o oo ééo🚀éMéoMééé o o Mo oéM", + "0xc037", + [ + [ + [ + "0xD624A8878d6EE485120e8286CbDC9cF10abCbb57", + [ + "0x9221edfb9018a888805a3176f013f076e5d938fbc6aa1753c7c674b950e837bd", + "0xdbe12eecdceb7f1f2ae6fce1d03e94756c8ff8c2bbd52679b3f04f77a7eefcf2", + "0x2f19f93379d6f2a20ecee5ad670612a28f27941256f446ca8bcec1a5899e76e5" + ], + "0x9F8e96E3103AB52246e19a66a409Cf616241e3D0", + "0x56089b9c940e63b6", + [ + "0x121a06299c784458456a8c84cc621a8845", + "-208389642673309035464843874223566773254034848" + ] + ], + [ + "0xaf51A9F6504eD1EEB7b8d89B50bAE1de3D3dA1a7", + [ + "0xfc4791965498566b26a3827759f291ed4649973d574a9f2638a17459f077b995", + "0xa5d8d441d4207fbaee9b38e4d8f56f391f173f74174a824d9958120ee9aa95f8", + "0x96214b938c4341ffffdce7c3a3f4f3dc72a5cce3ce235864a1e316d2383d0daa" + ], + "0x0273602393dd20Cf8430D7Af530aB22036884B72", + "0x466cffcab0e7f98b", + [ + "0x5b5a45f9fe5c475413abe5d5c207e79c64", + "-792160833879411119615087435813012984254121891" + ] + ] + ], + [ + [ + "0x89dB1724662CE37034806ef0787d78d17422b451", + [ + "0x11cbdcde8a2c6877d81e06e882d3e7afc12ad98e03ed853656c3cd79c3b55f7c", + "0x2daf348c7df22a81d75b6b1cd940ef4d7d4f556cbb89151e91d04e39d76e6719", + "0x7aca0588010f9e62b2c7486d11fb2ce02bd19c89b730db54317c8c54058632e6" + ], + "0xAe7e4B15C1cda5de9Be87580e7BB13dA1efb7591", + "0xec83ccc6b0f9181f", + [ + "0xb68204261b7d17cf39e2f735584d6ac398", + "-2458936244162674171091113051772615737777316744" + ] + ], + [ + "0x17b3Ec6ab419d1A366914ED57F6A0b665bDA8CE9", + [ + "0xb3a5f462eb343b2ba38c581558e7f397f15556d4fe7a617745c87af34d3395b0", + "0xd1249dde2921894ace13f5bd798507b60cd2d56f39d16bcb4414acd5530568b6", + "0x2ee1f1d9d38e6598dacec663e7335c697d75bc01421c2ba3889e58119da829c1" + ], + "0x962712bAFa7CE3d91BB38012C7C17Acd92Ee34d3", + "0xa03a8d3e0410d3db", + [ + "0xbdfac2f5ea903403eefab3ad3810b20c50", + "2134837106943374995115965611423503188547599690" + ] + ] + ], + [ + [ + "0x54a6DCC5c20704c266A715d5B7616705ab8dd897", + [ + "0x96b4cecb3c9f703fde5eee9300655d04ee4553c0ca2a5a7d5caecadf2f93b7a2", + "0x20cdfdd8cef57177b8c89a6f0b164fdd52366bcdac703e9b3914f22eda46b1e5", + "0x67ed7307bc38b514b6fc42f6b2010dee17e84f26d5616a135a843e38c9d093b1" + ], + "0x2b39D6D2b7cB289E7555fedfc96B1Ed44832028e", + "0x468ad872ecb06be0", + [ + "0xcfb24ecb1873c6d5b3809a0a0b9a747fe6", + "-1304229747494031120009605527412148632595873471" + ] + ], + [ + "0x2b57CB6E95A167d6320DDA76a18fbdB3AB97Fa2f", + [ + "0xc80dbfaa35599759201f588d5dace4955090e23381d6bd5ed49df9012f41088c", + "0x5439259b129fea278ff17c38bd309d3ef636c65dc37e48489bc31812349b5e50", + "0x10a48424fc6a0e695d248ed29b561abc85b144ffbc24bb6621951033722935f0" + ], + "0xf385efe72580AfF0A9A9fAA25d8ddB790A6a2aF1", + "0xea1fc724e4946a4c", + [ + "0xfd5d6177b05f411f08a415077e3ea2db5b", + "1365080883231409609352493687900635060428675967" + ] + ] + ], + [ + [ + "0x8c28208eC8349F8072c06F3567734543b767D82b", + [ + "0xaff17a3901f235911f59ac47a474052d28ac0e0a5f0fce3bd820208925c06aef", + "0xcfd10f8d7206b876cc433cee909c71959b0b8ea10f708f1ce1e71e1debf83e89", + "0xe6b2c205b9db529db6f2ea215116888be992f48b7f5ecf685c650728c88c6702" + ], + "0xd3860eF07A59fd979CE006D29abE07aB8DEf6dEE", + "0x4bc1e3fc814f60df", + [ + "0xecd6702cfd26f29969e3c3f4a6f8a77c1c", + "10514906339889610898406899598658610492202526" + ] + ], + [ + "0x010509c08C65376879f024B408751484c24593b5", + [ + "0xb31de7417722d4032c56c325431843d10e01c902487fd5e6a174ecd1a1896493", + "0xfc81f788a1ad5404a1fc9a2d90eb2a531e94644b3f7abf70f096d127cc58ab2c", + "0x81933afd788a9e6973be5a2450074737eb8f3bccabb3767cc27b424d88e4b4bb" + ], + "0x99366Bd31FC99c72A364f2270243554c89BA3167", + "0x0103eae73c7a9875", + [ + "0xd216c235c08eec4db21c42fc22c20661f2", + "-1643049406207138164756734900448518194410292726" + ] + ] + ] + ], + [ + [ + "0xD770dFc6Ef1676De63f40927840623b8615DB2d3", + "0x2fce", + true, + "0xCB2d87DBF4D6D9a33a0F3FfA5F0a0c84e04d0B04", + "0xd9583D04D45a8062b6217666376DbE55f6E3473f" + ] + ] + ], + [false] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oo🚀 oo🚀 Mo🚀🚀o oMMéoé" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x78a1Fb3d7C3F3420854C36BB10ea7fDea80Ce919" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-26883565741535288" + }, + { + "type": "number", + "value": "-5141813151494236" + }, + { + "type": "number", + "value": "26629360009472432" + } + ] + }, + { + "type": "number", + "value": "1603398987769685005722175597858365826291742512076644510389132" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x1c6bda95fb3c9136aec682a6bdbcbd963f938455983189608675fd82507d" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1046737888541635118449059417916377480933733099728971613817" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀oMMoooMo é🚀o🚀ooo🚀éMMéo éo🚀oM" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x755Ed5385a0187438817d1E6Ff618a30039Aa810" + }, + { + "type": "address", + "value": "0xf1B386675381c89B64c5E4A41fd8E6BeA47856fa" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x7f211f7170792e5b571a01020cd1c834766c35dc3a45" + }, + { + "type": "address", + "value": "0x55ea89c08d94e5f14261F3533c9C613a2732Fb34" + }, + { + "type": "string", + "value": "Moo é🚀oéo Moé 🚀 o oéoéMM 🚀🚀o oM ooMoé🚀éM" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x696e5ca8954b0f4a5bdb51c15d7674a47de75a4fdf68dc4167da" + }, + { + "type": "string", + "value": "Moo é🚀o🚀éoé🚀oéM 🚀ooo o oo ééo🚀éMéoMééé o o Mo oéM" + }, + { + "type": "hexstring", + "value": "0xc037" + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xD624A8878d6EE485120e8286CbDC9cF10abCbb57" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x9221edfb9018a888805a3176f013f076e5d938fbc6aa1753c7c674b950e837bd" + }, + { + "type": "hexstring", + "value": "0xdbe12eecdceb7f1f2ae6fce1d03e94756c8ff8c2bbd52679b3f04f77a7eefcf2" + }, + { + "type": "hexstring", + "value": "0x2f19f93379d6f2a20ecee5ad670612a28f27941256f446ca8bcec1a5899e76e5" + } + ] + }, + { + "type": "address", + "value": "0x9F8e96E3103AB52246e19a66a409Cf616241e3D0" + }, + { + "type": "hexstring", + "value": "0x56089b9c940e63b6" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x121a06299c784458456a8c84cc621a8845" + }, + { + "type": "number", + "value": "-208389642673309035464843874223566773254034848" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xaf51A9F6504eD1EEB7b8d89B50bAE1de3D3dA1a7" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xfc4791965498566b26a3827759f291ed4649973d574a9f2638a17459f077b995" + }, + { + "type": "hexstring", + "value": "0xa5d8d441d4207fbaee9b38e4d8f56f391f173f74174a824d9958120ee9aa95f8" + }, + { + "type": "hexstring", + "value": "0x96214b938c4341ffffdce7c3a3f4f3dc72a5cce3ce235864a1e316d2383d0daa" + } + ] + }, + { + "type": "address", + "value": "0x0273602393dd20Cf8430D7Af530aB22036884B72" + }, + { + "type": "hexstring", + "value": "0x466cffcab0e7f98b" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x5b5a45f9fe5c475413abe5d5c207e79c64" + }, + { + "type": "number", + "value": "-792160833879411119615087435813012984254121891" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x89dB1724662CE37034806ef0787d78d17422b451" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x11cbdcde8a2c6877d81e06e882d3e7afc12ad98e03ed853656c3cd79c3b55f7c" + }, + { + "type": "hexstring", + "value": "0x2daf348c7df22a81d75b6b1cd940ef4d7d4f556cbb89151e91d04e39d76e6719" + }, + { + "type": "hexstring", + "value": "0x7aca0588010f9e62b2c7486d11fb2ce02bd19c89b730db54317c8c54058632e6" + } + ] + }, + { + "type": "address", + "value": "0xAe7e4B15C1cda5de9Be87580e7BB13dA1efb7591" + }, + { + "type": "hexstring", + "value": "0xec83ccc6b0f9181f" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xb68204261b7d17cf39e2f735584d6ac398" + }, + { + "type": "number", + "value": "-2458936244162674171091113051772615737777316744" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x17b3Ec6ab419d1A366914ED57F6A0b665bDA8CE9" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xb3a5f462eb343b2ba38c581558e7f397f15556d4fe7a617745c87af34d3395b0" + }, + { + "type": "hexstring", + "value": "0xd1249dde2921894ace13f5bd798507b60cd2d56f39d16bcb4414acd5530568b6" + }, + { + "type": "hexstring", + "value": "0x2ee1f1d9d38e6598dacec663e7335c697d75bc01421c2ba3889e58119da829c1" + } + ] + }, + { + "type": "address", + "value": "0x962712bAFa7CE3d91BB38012C7C17Acd92Ee34d3" + }, + { + "type": "hexstring", + "value": "0xa03a8d3e0410d3db" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xbdfac2f5ea903403eefab3ad3810b20c50" + }, + { + "type": "number", + "value": "2134837106943374995115965611423503188547599690" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x54a6DCC5c20704c266A715d5B7616705ab8dd897" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x96b4cecb3c9f703fde5eee9300655d04ee4553c0ca2a5a7d5caecadf2f93b7a2" + }, + { + "type": "hexstring", + "value": "0x20cdfdd8cef57177b8c89a6f0b164fdd52366bcdac703e9b3914f22eda46b1e5" + }, + { + "type": "hexstring", + "value": "0x67ed7307bc38b514b6fc42f6b2010dee17e84f26d5616a135a843e38c9d093b1" + } + ] + }, + { + "type": "address", + "value": "0x2b39D6D2b7cB289E7555fedfc96B1Ed44832028e" + }, + { + "type": "hexstring", + "value": "0x468ad872ecb06be0" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xcfb24ecb1873c6d5b3809a0a0b9a747fe6" + }, + { + "type": "number", + "value": "-1304229747494031120009605527412148632595873471" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x2b57CB6E95A167d6320DDA76a18fbdB3AB97Fa2f" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xc80dbfaa35599759201f588d5dace4955090e23381d6bd5ed49df9012f41088c" + }, + { + "type": "hexstring", + "value": "0x5439259b129fea278ff17c38bd309d3ef636c65dc37e48489bc31812349b5e50" + }, + { + "type": "hexstring", + "value": "0x10a48424fc6a0e695d248ed29b561abc85b144ffbc24bb6621951033722935f0" + } + ] + }, + { + "type": "address", + "value": "0xf385efe72580AfF0A9A9fAA25d8ddB790A6a2aF1" + }, + { + "type": "hexstring", + "value": "0xea1fc724e4946a4c" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xfd5d6177b05f411f08a415077e3ea2db5b" + }, + { + "type": "number", + "value": "1365080883231409609352493687900635060428675967" + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x8c28208eC8349F8072c06F3567734543b767D82b" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xaff17a3901f235911f59ac47a474052d28ac0e0a5f0fce3bd820208925c06aef" + }, + { + "type": "hexstring", + "value": "0xcfd10f8d7206b876cc433cee909c71959b0b8ea10f708f1ce1e71e1debf83e89" + }, + { + "type": "hexstring", + "value": "0xe6b2c205b9db529db6f2ea215116888be992f48b7f5ecf685c650728c88c6702" + } + ] + }, + { + "type": "address", + "value": "0xd3860eF07A59fd979CE006D29abE07aB8DEf6dEE" + }, + { + "type": "hexstring", + "value": "0x4bc1e3fc814f60df" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xecd6702cfd26f29969e3c3f4a6f8a77c1c" + }, + { + "type": "number", + "value": "10514906339889610898406899598658610492202526" + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0x010509c08C65376879f024B408751484c24593b5" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xb31de7417722d4032c56c325431843d10e01c902487fd5e6a174ecd1a1896493" + }, + { + "type": "hexstring", + "value": "0xfc81f788a1ad5404a1fc9a2d90eb2a531e94644b3f7abf70f096d127cc58ab2c" + }, + { + "type": "hexstring", + "value": "0x81933afd788a9e6973be5a2450074737eb8f3bccabb3767cc27b424d88e4b4bb" + } + ] + }, + { + "type": "address", + "value": "0x99366Bd31FC99c72A364f2270243554c89BA3167" + }, + { + "type": "hexstring", + "value": "0x0103eae73c7a9875" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd216c235c08eec4db21c42fc22c20661f2" + }, + { + "type": "number", + "value": "-1643049406207138164756734900448518194410292726" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xD770dFc6Ef1676De63f40927840623b8615DB2d3" + }, + { + "type": "hexstring", + "value": "0x2fce" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xCB2d87DBF4D6D9a33a0F3FfA5F0a0c84e04d0B04" + }, + { + "type": "address", + "value": "0xd9583D04D45a8062b6217666376DbE55f6E3473f" + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50611498806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906111df565b60405180910390f35b610056610cc7565b61005e610cc7565b60006040518060600160405280602f81526020016113b2602f9139825250610084610d12565b61008c610d3f565b610094610d6b565b600081527378a1fb3d7c3f3420854c36bb10ea7fdea80ce91960208201526100ba610ddc565b665f8275ea51f03719815266124473aa65705b196020820152665e9b4307f5e9b060408083019190915282015278ff6faa86b55737e78528fc985d81034ad689a45b8ebb88d38c606082015261014c6040805160808082018352600080835260208084018290528451928301855281835282015260608184018190528082015290918201908152600060209091015290565b7f1c6bda95fb3c9136aec682a6bdbcbd963f938455983189608675fd82507d0000815260006020808301829052604080516080810182528083018490526060818301819052808201819052772ab07416d67fd59e68d65c5128e385c98cc6dde4b6bdc6798252825190810190925260368083529093926113e19083013960408381019190915280516002808252606082018352600093509091602083019080368337019050509050600073755ed5385a0187438817d1e6ff618a30039aa810905080826000815181106102215761022161135d565b60200260200101906001600160a01b031690816001600160a01b03168152505050600073f1b386675381c89b64c5e4a41fd8e6bea47856fa9050808260018151811061026f5761026f61135d565b6001600160a01b039092166020928302919091018201526060808501939093526040808601949094526000858401819052608087019590955294865250757f211f7170792e5b571a01020cd1c834766c35dc3a4560501b858501527355ea89c08d94e5f14261f3533c9c613a2732fb34858301528151908101909152603e8082529192909190611374908301396060830152508152602082015260016040820152610318610dfa565b7f696e5ca8954b0f4a5bdb51c15d7674a47de75a4fdf68dc4167da00000000000081526040805160808101909152604c80825260009190611417602083013960208301525061c03760f01b6040820152610370610e2e565b610378610e5b565b610380610e88565b73d624a8878d6ee485120e8286cbdc9cf10abcbb57815261039f610ddc565b7f9221edfb9018a888805a3176f013f076e5d938fbc6aa1753c7c674b950e837bd81527fdbe12eecdceb7f1f2ae6fce1d03e94756c8ff8c2bbd52679b3f04f77a7eefcf26020808301919091527f2f19f93379d6f2a20ecee5ad670612a28f27941256f446ca8bcec1a5899e76e560408084019190915283820192909252739f8e96e3103ab52246e19a66a409cf616241e3d083830152672b044dce4a0731db60c11b6060840152815180830190925270121a06299c784458456a8c84cc621a884560781b8252720958321e8c77dc1977d7d1bcdc4f6a13ab159f19908201526080820152815261048e610e88565b73af51a9f6504ed1eeb7b8d89b50bae1de3d3da1a781526104ad610ddc565b7ffc4791965498566b26a3827759f291ed4649973d574a9f2638a17459f077b99581527fa5d8d441d4207fbaee9b38e4d8f56f391f173f74174a824d9958120ee9aa95f86020808301919091527f96214b938c4341ffffdce7c3a3f4f3dc72a5cce3ce235864a1e316d2383d0daa60408084019190915283820192909252730273602393dd20cf8430d7af530ab22036884b728383015267466cffcab0e7f98b60c01b606084015281518083019092527016d6917e7f9711d504eaf9757081f9e719607a1b82527223858f7681e97d010f5716ef84652ce28b47a21982820152608083019190915282015281526105a2610e5b565b6105aa610e88565b7389db1724662ce37034806ef0787d78d17422b45181526105c9610ddc565b7f11cbdcde8a2c6877d81e06e882d3e7afc12ad98e03ed853656c3cd79c3b55f7c81527f2daf348c7df22a81d75b6b1cd940ef4d7d4f556cbb89151e91d04e39d76e67196020808301919091527f7aca0588010f9e62b2c7486d11fb2ce02bd19c89b730db54317c8c54058632e66040808401919091528382019290925273ae7e4b15c1cda5de9be87580e7bb13da1efb75918383015267ec83ccc6b0f9181f60c01b606084015281518083019092527016d04084c36fa2f9e73c5ee6ab09ad5873607b1b8252726e433428fd32a0d7360ecb82308384d6a3e3871990820152608082015281526106b8610e88565b7317b3ec6ab419d1a366914ed57f6a0b665bda8ce981526106d7610ddc565b7fb3a5f462eb343b2ba38c581558e7f397f15556d4fe7a617745c87af34d3395b081527fd1249dde2921894ace13f5bd798507b60cd2d56f39d16bcb4414acd5530568b66020808301919091527f2ee1f1d9d38e6598dacec663e7335c697d75bc01421c2ba3889e58119da829c16040808401919091528382019290925273962712bafa7ce3d91bb38012c7c17acd92ee34d38383015267a03a8d3e0410d3db60c01b60608401528151808301909252700bdfac2f5ea903403eefab3ad3810b20c5607c1b8252725fbaba65d9204c92179ef888c15e393a6bfd4a828201526080830191909152828101919091528201526107d0610e5b565b6107d8610e88565b7354a6dcc5c20704c266a715d5b7616705ab8dd89781526107f7610ddc565b7f96b4cecb3c9f703fde5eee9300655d04ee4553c0ca2a5a7d5caecadf2f93b7a281527f20cdfdd8cef57177b8c89a6f0b164fdd52366bcdac703e9b3914f22eda46b1e56020808301919091527f67ed7307bc38b514b6fc42f6b2010dee17e84f26d5616a135a843e38c9d093b160408084019190915283820192909252732b39d6d2b7cb289e7555fedfc96b1ed44832028e8383015267023456c39765835f60c51b606084015281518083019092527067d927658c39e36ad9c04d0505cd3a3ff360791b8252723a7bd2c039ef90ae7756e5c768b93548863ebe1990820152608082015281526108e6610e88565b732b57cb6e95a167d6320dda76a18fbdb3ab97fa2f8152610905610ddc565b7fc80dbfaa35599759201f588d5dace4955090e23381d6bd5ed49df9012f41088c81527f5439259b129fea278ff17c38bd309d3ef636c65dc37e48489bc31812349b5e506020808301919091527f10a48424fc6a0e695d248ed29b561abc85b144ffbc24bb6621951033722935f06040808401919091528382019290925273f385efe72580aff0a9a9faa25d8ddb790a6a2af183830152673a87f1c939251a9360c21b60608401528151808301835270fd5d6177b05f411f08a415077e3ea2db5b60781b8152723d365c2aa89841971fc086f8df1e1448991b7f8183015260808401528301919091528201526109f9610e5b565b610a01610e88565b738c28208ec8349f8072c06f3567734543b767d82b8152610a20610ddc565b7faff17a3901f235911f59ac47a474052d28ac0e0a5f0fce3bd820208925c06aef81527fcfd10f8d7206b876cc433cee909c71959b0b8ea10f708f1ce1e71e1debf83e896020808301919091527fe6b2c205b9db529db6f2ea215116888be992f48b7f5ecf685c650728c88c67026040808401919091528382019290925273d3860ef07a59fd979ce006d29abe07ab8def6dee83830152674bc1e3fc814f60df60c01b60608401528151808301909252703b359c0b3f49bca65a78f0fd29be29df07607a1b82527178b488523df79780069fba3bbc8f5409de1e9082015260808201528152610b0d610e88565b73010509c08c65376879f024b408751484c24593b58152610b2c610ddc565b7fb31de7417722d4032c56c325431843d10e01c902487fd5e6a174ecd1a189649381527ffc81f788a1ad5404a1fc9a2d90eb2a531e94644b3f7abf70f096d127cc58ab2c6020808301919091527f81933afd788a9e6973be5a2450074737eb8f3bccabb3767cc27b424d88e4b4bb604080840191909152838201929092527399366bd31fc99c72a364f2270243554c89ba316783830152670103eae73c7a987560c01b606080850191909152825180840190935270690b611ae0477626d90e217e11610330f960791b83527249ad483ce0330f21d19d789be251d9437005f51983830152608084019290925283019190915282810191909152820152610c30610ed8565b6040805160a08101825273d770dfc6ef1676de63f40927840623b8615db2d381526117e760f11b60208083019190915260018284015273cb2d87dbf4d6d9a33a0f3ffa5f0a0c84e04d0b0460608084019190915273d9583d04d45a8062b6217666376dbe55f6e3473f6080808501919091529285528583019490945292850193909352805191820190526000815290820152919050565b6040518060a0016040528060608152602001610ce1610d12565b815260006020820152604001610cf5610dfa565b81526040805160208181019092526000815291015290565b905290565b60405180602001604052806001905b610d29610d3f565b815260200190600190039081610d215790505090565b6040518060800160405280610d52610d6b565b8152600060208201819052604082015260609081015290565b6040805160a08101825260008082526020820152908101610d8a610ddc565b815260006020820152604001610d0d6040805160808082018352600080835260208084018290528451928301855281835282015260608184018190528082015290918201908152600060209091015290565b60405180606001604052806003906020820280368337509192915050565b6040805160a081018252600080825260606020830181905292820152908101610e21610e2e565b8152602001610d0d610ed8565b60405180608001604052806004905b610e45610e5b565b815260200190600190039081610e3d5790505090565b60405180604001604052806002905b610e72610e88565b815260200190600190039081610e6a5790505090565b6040518060a0016040528060006001600160a01b03168152602001610eab610ddc565b81526000602082018190526040820152606001610d0d604080518082019091526000808252602082015290565b60405180602001604052806001905b6040805160a081018252600080825260208083018290529282018190526060820181905260808201528252600019909201910181610ee75790505090565b6000815180845260005b81811015610f4b57602081850181015186830182015201610f2f565b81811115610f5d576000602083870101525b50601f01601f19169290920160200192915050565b61ffff1981511682526000602080830151151581850152604083015160806040860152805160170b608086015281810151151560a08601526040810151608060c0870152610fc4610100870182610f25565b60609290920151868303607f190160e0880152805180845290840192600092508401905b808310156110115783516001600160a01b03168252928401926001929092019190840190610fe8565b5060608601519350611027606088018515159052565b9695505050505050565b8060005b600181101561109d57815180516001600160a01b0390811686526020808301516001600160f01b031916818801526040808401511515908801526060808401518316908801526080928301519091169186019190915260a09094019390910190600101611035565b50505050565b600061090065ffffffffffff19835116845260208084015182828701526110cc83870182610f25565b925050604061ffff60f01b81860151168187015260608086015181880160005b60048110156111be5782518260005b60028110156111a757825180516001600160a01b03168352898101518a840160005b600381101561113a5782518252918c0191908c019060010161111d565b505050888101516080611157818601836001600160a01b03169052565b898301516001600160c01b03191660a08601529091015180516effffffffffffffffffffffffffffff191660c08501526020015160120b60e08401525091880191610100909101906001016110fb565b5050509185019161020091909101906001016110ec565b50505050505060808301516111d7610860860182611031565b509392505050565b60006020808352835160a0828501526111fb60c0850182610f25565b905081850151601f196040818785030181880152838490508585016000805b60018082106112295750611316565b888403855287518051608080875281511515818801528c8201516001600160a01b031660a08801528882015190919060c08801875b600381101561127d57825160060b8252918f0191908f0190860161125e565b505050606093508381015161129e6101208901826001600160c81b03169052565b50015160e06101408701526112b7610160870182610f72565b90508b8201516112d58d88018269ffffffffffffffffffff19169052565b50878201516001600160a01b0316868901529082015185820383870152906112fd8183610f25565b998c0199968c019695505050600191909101905061121a565b50508983015180151560608b0152965060608a01519650838982030160808a015261134181886110a3565b965050505050505060808401516111d760a08501825115159052565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806fc3a96f204d6fc3a920f09f9a80206f206fc3a96fc3a94d4d20f09f9a80f09f9a806f206f4d206f6f4d6fc3a9f09f9a80c3a94d4d6f6f20c3a9f09f9a806f6ff09f9a802020206f6ff09f9a80204d6ff09f9a80f09f9a806f20206f4d4dc3a96fc3a94d6f6f20c3a9f09f9a806f4d4d6f6f6f4d6f20c3a9f09f9a806ff09f9a806f6f6ff09f9a80c3a94d4dc3a96f20c3a96ff09f9a806f4d4d6f6f20c3a9f09f9a806ff09f9a80c3a96fc3a9f09f9a806fc3a94d20f09f9a806f6f6f206f206f6f20c3a9c3a96ff09f9a80c3a94dc3a96f4dc3a9c3a9c3a9206f206f204d6f206fc3a94da2646970667358221220c1da05b512ff6c8decb96a74a9559c002a54840804482a009af778ec64a8593364736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_6ce8a791 {\n int192 s_0;\n bool s_1;\n string s_2;\n address[] s_3;\n }\n\n struct S_ab04e35a {\n bytes30 s_0;\n bool s_1;\n S_6ce8a791 s_2;\n bool s_3;\n }\n\n struct S_0420b450 {\n bool s_0;\n address s_1;\n int56[3] s_2;\n uint200 s_3;\n S_ab04e35a s_4;\n }\n\n struct S_cbe10e40 {\n S_0420b450 s_0;\n bytes22 s_1;\n address s_2;\n string s_3;\n }\n\n struct S_25840313 {\n bytes17 s_0;\n int152 s_1;\n }\n\n struct S_edd44740 {\n address s_0;\n bytes32[3] s_1;\n address s_2;\n bytes8 s_3;\n S_25840313 s_4;\n }\n\n struct S_80937532 {\n address s_0;\n bytes2 s_1;\n bool s_2;\n address s_3;\n address s_4;\n }\n\n struct S_e4e0364e {\n bytes26 s_0;\n string s_1;\n bytes2 s_2;\n S_edd44740[2][4] s_3;\n S_80937532[1] s_4;\n }\n\n struct S_c1053bda {\n bool s_0;\n }\n\n struct S_042c3179 {\n string s_0;\n S_cbe10e40[1] s_1;\n bool s_2;\n S_e4e0364e s_3;\n S_c1053bda s_4;\n }\n\n function test () public pure returns (S_042c3179 memory) {\n S_042c3179 memory r;\n {\n string memory r_0 = unicode\"Moo é🚀oo🚀 oo🚀 Mo🚀🚀o oMMéoé\";\n r.s_0 = r_0;\n }\n {\n S_cbe10e40[1] memory r_1;\n {\n S_cbe10e40 memory r_1_0;\n {\n S_0420b450 memory r_1_0_0;\n {\n bool r_1_0_0_0 = false;\n r_1_0_0.s_0 = r_1_0_0_0;\n }\n {\n address r_1_0_0_1 = 0x78a1Fb3d7C3F3420854C36BB10ea7fDea80Ce919;\n r_1_0_0.s_1 = r_1_0_0_1;\n }\n {\n int56[3] memory r_1_0_0_2;\n {\n int56 r_1_0_0_2_0 = -26883565741535288;\n r_1_0_0_2[0] = r_1_0_0_2_0;\n }\n {\n int56 r_1_0_0_2_1 = -5141813151494236;\n r_1_0_0_2[1] = r_1_0_0_2_1;\n }\n {\n int56 r_1_0_0_2_2 = 26629360009472432;\n r_1_0_0_2[2] = r_1_0_0_2_2;\n }\n r_1_0_0.s_2 = r_1_0_0_2;\n }\n {\n uint200 r_1_0_0_3 = 1603398987769685005722175597858365826291742512076644510389132;\n r_1_0_0.s_3 = r_1_0_0_3;\n }\n {\n S_ab04e35a memory r_1_0_0_4;\n {\n bytes30 r_1_0_0_4_0 = bytes30(0x1c6bda95fb3c9136aec682a6bdbcbd963f938455983189608675fd82507d);\n r_1_0_0_4.s_0 = r_1_0_0_4_0;\n }\n {\n bool r_1_0_0_4_1 = false;\n r_1_0_0_4.s_1 = r_1_0_0_4_1;\n }\n {\n S_6ce8a791 memory r_1_0_0_4_2;\n {\n int192 r_1_0_0_4_2_0 = 1046737888541635118449059417916377480933733099728971613817;\n r_1_0_0_4_2.s_0 = r_1_0_0_4_2_0;\n }\n {\n bool r_1_0_0_4_2_1 = false;\n r_1_0_0_4_2.s_1 = r_1_0_0_4_2_1;\n }\n {\n string memory r_1_0_0_4_2_2 = unicode\"Moo é🚀oMMoooMo é🚀o🚀ooo🚀éMMéo éo🚀oM\";\n r_1_0_0_4_2.s_2 = r_1_0_0_4_2_2;\n }\n {\n address[] memory r_1_0_0_4_2_3 = new address[](2);\n {\n address r_1_0_0_4_2_3_0 = 0x755Ed5385a0187438817d1E6Ff618a30039Aa810;\n r_1_0_0_4_2_3[0] = r_1_0_0_4_2_3_0;\n }\n {\n address r_1_0_0_4_2_3_1 = 0xf1B386675381c89B64c5E4A41fd8E6BeA47856fa;\n r_1_0_0_4_2_3[1] = r_1_0_0_4_2_3_1;\n }\n r_1_0_0_4_2.s_3 = r_1_0_0_4_2_3;\n }\n r_1_0_0_4.s_2 = r_1_0_0_4_2;\n }\n {\n bool r_1_0_0_4_3 = false;\n r_1_0_0_4.s_3 = r_1_0_0_4_3;\n }\n r_1_0_0.s_4 = r_1_0_0_4;\n }\n r_1_0.s_0 = r_1_0_0;\n }\n {\n bytes22 r_1_0_1 = bytes22(0x7f211f7170792e5b571a01020cd1c834766c35dc3a45);\n r_1_0.s_1 = r_1_0_1;\n }\n {\n address r_1_0_2 = 0x55ea89c08d94e5f14261F3533c9C613a2732Fb34;\n r_1_0.s_2 = r_1_0_2;\n }\n {\n string memory r_1_0_3 = unicode\"Moo é🚀oéo Moé 🚀 o oéoéMM 🚀🚀o oM ooMoé🚀éM\";\n r_1_0.s_3 = r_1_0_3;\n }\n r_1[0] = r_1_0;\n }\n r.s_1 = r_1;\n }\n {\n bool r_2 = true;\n r.s_2 = r_2;\n }\n {\n S_e4e0364e memory r_3;\n {\n bytes26 r_3_0 = bytes26(0x696e5ca8954b0f4a5bdb51c15d7674a47de75a4fdf68dc4167da);\n r_3.s_0 = r_3_0;\n }\n {\n string memory r_3_1 = unicode\"Moo é🚀o🚀éoé🚀oéM 🚀ooo o oo ééo🚀éMéoMééé o o Mo oéM\";\n r_3.s_1 = r_3_1;\n }\n {\n bytes2 r_3_2 = bytes2(0xc037);\n r_3.s_2 = r_3_2;\n }\n {\n S_edd44740[2][4] memory r_3_3;\n {\n S_edd44740[2] memory r_3_3_0;\n {\n S_edd44740 memory r_3_3_0_0;\n {\n address r_3_3_0_0_0 = 0xD624A8878d6EE485120e8286CbDC9cF10abCbb57;\n r_3_3_0_0.s_0 = r_3_3_0_0_0;\n }\n {\n bytes32[3] memory r_3_3_0_0_1;\n {\n bytes32 r_3_3_0_0_1_0 = bytes32(0x9221edfb9018a888805a3176f013f076e5d938fbc6aa1753c7c674b950e837bd);\n r_3_3_0_0_1[0] = r_3_3_0_0_1_0;\n }\n {\n bytes32 r_3_3_0_0_1_1 = bytes32(0xdbe12eecdceb7f1f2ae6fce1d03e94756c8ff8c2bbd52679b3f04f77a7eefcf2);\n r_3_3_0_0_1[1] = r_3_3_0_0_1_1;\n }\n {\n bytes32 r_3_3_0_0_1_2 = bytes32(0x2f19f93379d6f2a20ecee5ad670612a28f27941256f446ca8bcec1a5899e76e5);\n r_3_3_0_0_1[2] = r_3_3_0_0_1_2;\n }\n r_3_3_0_0.s_1 = r_3_3_0_0_1;\n }\n {\n address r_3_3_0_0_2 = 0x9F8e96E3103AB52246e19a66a409Cf616241e3D0;\n r_3_3_0_0.s_2 = r_3_3_0_0_2;\n }\n {\n bytes8 r_3_3_0_0_3 = bytes8(0x56089b9c940e63b6);\n r_3_3_0_0.s_3 = r_3_3_0_0_3;\n }\n {\n S_25840313 memory r_3_3_0_0_4;\n {\n bytes17 r_3_3_0_0_4_0 = bytes17(0x121a06299c784458456a8c84cc621a8845);\n r_3_3_0_0_4.s_0 = r_3_3_0_0_4_0;\n }\n {\n int152 r_3_3_0_0_4_1 = -208389642673309035464843874223566773254034848;\n r_3_3_0_0_4.s_1 = r_3_3_0_0_4_1;\n }\n r_3_3_0_0.s_4 = r_3_3_0_0_4;\n }\n r_3_3_0[0] = r_3_3_0_0;\n }\n {\n S_edd44740 memory r_3_3_0_1;\n {\n address r_3_3_0_1_0 = 0xaf51A9F6504eD1EEB7b8d89B50bAE1de3D3dA1a7;\n r_3_3_0_1.s_0 = r_3_3_0_1_0;\n }\n {\n bytes32[3] memory r_3_3_0_1_1;\n {\n bytes32 r_3_3_0_1_1_0 = bytes32(0xfc4791965498566b26a3827759f291ed4649973d574a9f2638a17459f077b995);\n r_3_3_0_1_1[0] = r_3_3_0_1_1_0;\n }\n {\n bytes32 r_3_3_0_1_1_1 = bytes32(0xa5d8d441d4207fbaee9b38e4d8f56f391f173f74174a824d9958120ee9aa95f8);\n r_3_3_0_1_1[1] = r_3_3_0_1_1_1;\n }\n {\n bytes32 r_3_3_0_1_1_2 = bytes32(0x96214b938c4341ffffdce7c3a3f4f3dc72a5cce3ce235864a1e316d2383d0daa);\n r_3_3_0_1_1[2] = r_3_3_0_1_1_2;\n }\n r_3_3_0_1.s_1 = r_3_3_0_1_1;\n }\n {\n address r_3_3_0_1_2 = 0x0273602393dd20Cf8430D7Af530aB22036884B72;\n r_3_3_0_1.s_2 = r_3_3_0_1_2;\n }\n {\n bytes8 r_3_3_0_1_3 = bytes8(0x466cffcab0e7f98b);\n r_3_3_0_1.s_3 = r_3_3_0_1_3;\n }\n {\n S_25840313 memory r_3_3_0_1_4;\n {\n bytes17 r_3_3_0_1_4_0 = bytes17(0x5b5a45f9fe5c475413abe5d5c207e79c64);\n r_3_3_0_1_4.s_0 = r_3_3_0_1_4_0;\n }\n {\n int152 r_3_3_0_1_4_1 = -792160833879411119615087435813012984254121891;\n r_3_3_0_1_4.s_1 = r_3_3_0_1_4_1;\n }\n r_3_3_0_1.s_4 = r_3_3_0_1_4;\n }\n r_3_3_0[1] = r_3_3_0_1;\n }\n r_3_3[0] = r_3_3_0;\n }\n {\n S_edd44740[2] memory r_3_3_1;\n {\n S_edd44740 memory r_3_3_1_0;\n {\n address r_3_3_1_0_0 = 0x89dB1724662CE37034806ef0787d78d17422b451;\n r_3_3_1_0.s_0 = r_3_3_1_0_0;\n }\n {\n bytes32[3] memory r_3_3_1_0_1;\n {\n bytes32 r_3_3_1_0_1_0 = bytes32(0x11cbdcde8a2c6877d81e06e882d3e7afc12ad98e03ed853656c3cd79c3b55f7c);\n r_3_3_1_0_1[0] = r_3_3_1_0_1_0;\n }\n {\n bytes32 r_3_3_1_0_1_1 = bytes32(0x2daf348c7df22a81d75b6b1cd940ef4d7d4f556cbb89151e91d04e39d76e6719);\n r_3_3_1_0_1[1] = r_3_3_1_0_1_1;\n }\n {\n bytes32 r_3_3_1_0_1_2 = bytes32(0x7aca0588010f9e62b2c7486d11fb2ce02bd19c89b730db54317c8c54058632e6);\n r_3_3_1_0_1[2] = r_3_3_1_0_1_2;\n }\n r_3_3_1_0.s_1 = r_3_3_1_0_1;\n }\n {\n address r_3_3_1_0_2 = 0xAe7e4B15C1cda5de9Be87580e7BB13dA1efb7591;\n r_3_3_1_0.s_2 = r_3_3_1_0_2;\n }\n {\n bytes8 r_3_3_1_0_3 = bytes8(0xec83ccc6b0f9181f);\n r_3_3_1_0.s_3 = r_3_3_1_0_3;\n }\n {\n S_25840313 memory r_3_3_1_0_4;\n {\n bytes17 r_3_3_1_0_4_0 = bytes17(0xb68204261b7d17cf39e2f735584d6ac398);\n r_3_3_1_0_4.s_0 = r_3_3_1_0_4_0;\n }\n {\n int152 r_3_3_1_0_4_1 = -2458936244162674171091113051772615737777316744;\n r_3_3_1_0_4.s_1 = r_3_3_1_0_4_1;\n }\n r_3_3_1_0.s_4 = r_3_3_1_0_4;\n }\n r_3_3_1[0] = r_3_3_1_0;\n }\n {\n S_edd44740 memory r_3_3_1_1;\n {\n address r_3_3_1_1_0 = 0x17b3Ec6ab419d1A366914ED57F6A0b665bDA8CE9;\n r_3_3_1_1.s_0 = r_3_3_1_1_0;\n }\n {\n bytes32[3] memory r_3_3_1_1_1;\n {\n bytes32 r_3_3_1_1_1_0 = bytes32(0xb3a5f462eb343b2ba38c581558e7f397f15556d4fe7a617745c87af34d3395b0);\n r_3_3_1_1_1[0] = r_3_3_1_1_1_0;\n }\n {\n bytes32 r_3_3_1_1_1_1 = bytes32(0xd1249dde2921894ace13f5bd798507b60cd2d56f39d16bcb4414acd5530568b6);\n r_3_3_1_1_1[1] = r_3_3_1_1_1_1;\n }\n {\n bytes32 r_3_3_1_1_1_2 = bytes32(0x2ee1f1d9d38e6598dacec663e7335c697d75bc01421c2ba3889e58119da829c1);\n r_3_3_1_1_1[2] = r_3_3_1_1_1_2;\n }\n r_3_3_1_1.s_1 = r_3_3_1_1_1;\n }\n {\n address r_3_3_1_1_2 = 0x962712bAFa7CE3d91BB38012C7C17Acd92Ee34d3;\n r_3_3_1_1.s_2 = r_3_3_1_1_2;\n }\n {\n bytes8 r_3_3_1_1_3 = bytes8(0xa03a8d3e0410d3db);\n r_3_3_1_1.s_3 = r_3_3_1_1_3;\n }\n {\n S_25840313 memory r_3_3_1_1_4;\n {\n bytes17 r_3_3_1_1_4_0 = bytes17(0xbdfac2f5ea903403eefab3ad3810b20c50);\n r_3_3_1_1_4.s_0 = r_3_3_1_1_4_0;\n }\n {\n int152 r_3_3_1_1_4_1 = 2134837106943374995115965611423503188547599690;\n r_3_3_1_1_4.s_1 = r_3_3_1_1_4_1;\n }\n r_3_3_1_1.s_4 = r_3_3_1_1_4;\n }\n r_3_3_1[1] = r_3_3_1_1;\n }\n r_3_3[1] = r_3_3_1;\n }\n {\n S_edd44740[2] memory r_3_3_2;\n {\n S_edd44740 memory r_3_3_2_0;\n {\n address r_3_3_2_0_0 = 0x54a6DCC5c20704c266A715d5B7616705ab8dd897;\n r_3_3_2_0.s_0 = r_3_3_2_0_0;\n }\n {\n bytes32[3] memory r_3_3_2_0_1;\n {\n bytes32 r_3_3_2_0_1_0 = bytes32(0x96b4cecb3c9f703fde5eee9300655d04ee4553c0ca2a5a7d5caecadf2f93b7a2);\n r_3_3_2_0_1[0] = r_3_3_2_0_1_0;\n }\n {\n bytes32 r_3_3_2_0_1_1 = bytes32(0x20cdfdd8cef57177b8c89a6f0b164fdd52366bcdac703e9b3914f22eda46b1e5);\n r_3_3_2_0_1[1] = r_3_3_2_0_1_1;\n }\n {\n bytes32 r_3_3_2_0_1_2 = bytes32(0x67ed7307bc38b514b6fc42f6b2010dee17e84f26d5616a135a843e38c9d093b1);\n r_3_3_2_0_1[2] = r_3_3_2_0_1_2;\n }\n r_3_3_2_0.s_1 = r_3_3_2_0_1;\n }\n {\n address r_3_3_2_0_2 = 0x2b39D6D2b7cB289E7555fedfc96B1Ed44832028e;\n r_3_3_2_0.s_2 = r_3_3_2_0_2;\n }\n {\n bytes8 r_3_3_2_0_3 = bytes8(0x468ad872ecb06be0);\n r_3_3_2_0.s_3 = r_3_3_2_0_3;\n }\n {\n S_25840313 memory r_3_3_2_0_4;\n {\n bytes17 r_3_3_2_0_4_0 = bytes17(0xcfb24ecb1873c6d5b3809a0a0b9a747fe6);\n r_3_3_2_0_4.s_0 = r_3_3_2_0_4_0;\n }\n {\n int152 r_3_3_2_0_4_1 = -1304229747494031120009605527412148632595873471;\n r_3_3_2_0_4.s_1 = r_3_3_2_0_4_1;\n }\n r_3_3_2_0.s_4 = r_3_3_2_0_4;\n }\n r_3_3_2[0] = r_3_3_2_0;\n }\n {\n S_edd44740 memory r_3_3_2_1;\n {\n address r_3_3_2_1_0 = 0x2b57CB6E95A167d6320DDA76a18fbdB3AB97Fa2f;\n r_3_3_2_1.s_0 = r_3_3_2_1_0;\n }\n {\n bytes32[3] memory r_3_3_2_1_1;\n {\n bytes32 r_3_3_2_1_1_0 = bytes32(0xc80dbfaa35599759201f588d5dace4955090e23381d6bd5ed49df9012f41088c);\n r_3_3_2_1_1[0] = r_3_3_2_1_1_0;\n }\n {\n bytes32 r_3_3_2_1_1_1 = bytes32(0x5439259b129fea278ff17c38bd309d3ef636c65dc37e48489bc31812349b5e50);\n r_3_3_2_1_1[1] = r_3_3_2_1_1_1;\n }\n {\n bytes32 r_3_3_2_1_1_2 = bytes32(0x10a48424fc6a0e695d248ed29b561abc85b144ffbc24bb6621951033722935f0);\n r_3_3_2_1_1[2] = r_3_3_2_1_1_2;\n }\n r_3_3_2_1.s_1 = r_3_3_2_1_1;\n }\n {\n address r_3_3_2_1_2 = 0xf385efe72580AfF0A9A9fAA25d8ddB790A6a2aF1;\n r_3_3_2_1.s_2 = r_3_3_2_1_2;\n }\n {\n bytes8 r_3_3_2_1_3 = bytes8(0xea1fc724e4946a4c);\n r_3_3_2_1.s_3 = r_3_3_2_1_3;\n }\n {\n S_25840313 memory r_3_3_2_1_4;\n {\n bytes17 r_3_3_2_1_4_0 = bytes17(0xfd5d6177b05f411f08a415077e3ea2db5b);\n r_3_3_2_1_4.s_0 = r_3_3_2_1_4_0;\n }\n {\n int152 r_3_3_2_1_4_1 = 1365080883231409609352493687900635060428675967;\n r_3_3_2_1_4.s_1 = r_3_3_2_1_4_1;\n }\n r_3_3_2_1.s_4 = r_3_3_2_1_4;\n }\n r_3_3_2[1] = r_3_3_2_1;\n }\n r_3_3[2] = r_3_3_2;\n }\n {\n S_edd44740[2] memory r_3_3_3;\n {\n S_edd44740 memory r_3_3_3_0;\n {\n address r_3_3_3_0_0 = 0x8c28208eC8349F8072c06F3567734543b767D82b;\n r_3_3_3_0.s_0 = r_3_3_3_0_0;\n }\n {\n bytes32[3] memory r_3_3_3_0_1;\n {\n bytes32 r_3_3_3_0_1_0 = bytes32(0xaff17a3901f235911f59ac47a474052d28ac0e0a5f0fce3bd820208925c06aef);\n r_3_3_3_0_1[0] = r_3_3_3_0_1_0;\n }\n {\n bytes32 r_3_3_3_0_1_1 = bytes32(0xcfd10f8d7206b876cc433cee909c71959b0b8ea10f708f1ce1e71e1debf83e89);\n r_3_3_3_0_1[1] = r_3_3_3_0_1_1;\n }\n {\n bytes32 r_3_3_3_0_1_2 = bytes32(0xe6b2c205b9db529db6f2ea215116888be992f48b7f5ecf685c650728c88c6702);\n r_3_3_3_0_1[2] = r_3_3_3_0_1_2;\n }\n r_3_3_3_0.s_1 = r_3_3_3_0_1;\n }\n {\n address r_3_3_3_0_2 = 0xd3860eF07A59fd979CE006D29abE07aB8DEf6dEE;\n r_3_3_3_0.s_2 = r_3_3_3_0_2;\n }\n {\n bytes8 r_3_3_3_0_3 = bytes8(0x4bc1e3fc814f60df);\n r_3_3_3_0.s_3 = r_3_3_3_0_3;\n }\n {\n S_25840313 memory r_3_3_3_0_4;\n {\n bytes17 r_3_3_3_0_4_0 = bytes17(0xecd6702cfd26f29969e3c3f4a6f8a77c1c);\n r_3_3_3_0_4.s_0 = r_3_3_3_0_4_0;\n }\n {\n int152 r_3_3_3_0_4_1 = 10514906339889610898406899598658610492202526;\n r_3_3_3_0_4.s_1 = r_3_3_3_0_4_1;\n }\n r_3_3_3_0.s_4 = r_3_3_3_0_4;\n }\n r_3_3_3[0] = r_3_3_3_0;\n }\n {\n S_edd44740 memory r_3_3_3_1;\n {\n address r_3_3_3_1_0 = 0x010509c08C65376879f024B408751484c24593b5;\n r_3_3_3_1.s_0 = r_3_3_3_1_0;\n }\n {\n bytes32[3] memory r_3_3_3_1_1;\n {\n bytes32 r_3_3_3_1_1_0 = bytes32(0xb31de7417722d4032c56c325431843d10e01c902487fd5e6a174ecd1a1896493);\n r_3_3_3_1_1[0] = r_3_3_3_1_1_0;\n }\n {\n bytes32 r_3_3_3_1_1_1 = bytes32(0xfc81f788a1ad5404a1fc9a2d90eb2a531e94644b3f7abf70f096d127cc58ab2c);\n r_3_3_3_1_1[1] = r_3_3_3_1_1_1;\n }\n {\n bytes32 r_3_3_3_1_1_2 = bytes32(0x81933afd788a9e6973be5a2450074737eb8f3bccabb3767cc27b424d88e4b4bb);\n r_3_3_3_1_1[2] = r_3_3_3_1_1_2;\n }\n r_3_3_3_1.s_1 = r_3_3_3_1_1;\n }\n {\n address r_3_3_3_1_2 = 0x99366Bd31FC99c72A364f2270243554c89BA3167;\n r_3_3_3_1.s_2 = r_3_3_3_1_2;\n }\n {\n bytes8 r_3_3_3_1_3 = bytes8(0x0103eae73c7a9875);\n r_3_3_3_1.s_3 = r_3_3_3_1_3;\n }\n {\n S_25840313 memory r_3_3_3_1_4;\n {\n bytes17 r_3_3_3_1_4_0 = bytes17(0xd216c235c08eec4db21c42fc22c20661f2);\n r_3_3_3_1_4.s_0 = r_3_3_3_1_4_0;\n }\n {\n int152 r_3_3_3_1_4_1 = -1643049406207138164756734900448518194410292726;\n r_3_3_3_1_4.s_1 = r_3_3_3_1_4_1;\n }\n r_3_3_3_1.s_4 = r_3_3_3_1_4;\n }\n r_3_3_3[1] = r_3_3_3_1;\n }\n r_3_3[3] = r_3_3_3;\n }\n r_3.s_3 = r_3_3;\n }\n {\n S_80937532[1] memory r_3_4;\n {\n S_80937532 memory r_3_4_0;\n {\n address r_3_4_0_0 = 0xD770dFc6Ef1676De63f40927840623b8615DB2d3;\n r_3_4_0.s_0 = r_3_4_0_0;\n }\n {\n bytes2 r_3_4_0_1 = bytes2(0x2fce);\n r_3_4_0.s_1 = r_3_4_0_1;\n }\n {\n bool r_3_4_0_2 = true;\n r_3_4_0.s_2 = r_3_4_0_2;\n }\n {\n address r_3_4_0_3 = 0xCB2d87DBF4D6D9a33a0F3FfA5F0a0c84e04d0B04;\n r_3_4_0.s_3 = r_3_4_0_3;\n }\n {\n address r_3_4_0_4 = 0xd9583D04D45a8062b6217666376DbE55f6E3473f;\n r_3_4_0.s_4 = r_3_4_0_4;\n }\n r_3_4[0] = r_3_4_0;\n }\n r_3.s_4 = r_3_4;\n }\n r.s_3 = r_3;\n }\n {\n S_c1053bda memory r_4;\n {\n bool r_4_0 = false;\n r_4.s_0 = r_4_0;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000004a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a806f6ff09f9a802020206f6ff09f9a80204d6ff09f9a80f09f9a806f20206f4d4dc3a96fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000807f211f7170792e5b571a01020cd1c834766c35dc3a450000000000000000000000000000000000000000000055ea89c08d94e5f14261f3533c9c613a2732fb340000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078a1fb3d7c3f3420854c36bb10ea7fdea80ce919ffffffffffffffffffffffffffffffffffffffffffffffffffa07d8a15ae0fc8ffffffffffffffffffffffffffffffffffffffffffffffffffedbb8c559a8fa4000000000000000000000000000000000000000000000000005e9b4307f5e9b000000000000000ff6faa86b55737e78528fc985d81034ad689a45b8ebb88d38c00000000000000000000000000000000000000000000000000000000000000e01c6bda95fb3c9136aec682a6bdbcbd963f938455983189608675fd82507d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000002ab07416d67fd59e68d65c5128e385c98cc6dde4b6bdc6790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000364d6f6f20c3a9f09f9a806f4d4d6f6f6f4d6f20c3a9f09f9a806ff09f9a806f6f6ff09f9a80c3a94d4dc3a96f20c3a96ff09f9a806f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000755ed5385a0187438817d1e6ff618a30039aa810000000000000000000000000f1b386675381c89b64c5e4a41fd8e6bea47856fa000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a806fc3a96f204d6fc3a920f09f9a80206f206fc3a96fc3a94d4d20f09f9a80f09f9a806f206f4d206f6f4d6fc3a9f09f9a80c3a94d0000696e5ca8954b0f4a5bdb51c15d7674a47de75a4fdf68dc4167da0000000000000000000000000000000000000000000000000000000000000000000000000900c037000000000000000000000000000000000000000000000000000000000000000000000000000000000000d624a8878d6ee485120e8286cbdc9cf10abcbb579221edfb9018a888805a3176f013f076e5d938fbc6aa1753c7c674b950e837bddbe12eecdceb7f1f2ae6fce1d03e94756c8ff8c2bbd52679b3f04f77a7eefcf22f19f93379d6f2a20ecee5ad670612a28f27941256f446ca8bcec1a5899e76e50000000000000000000000009f8e96e3103ab52246e19a66a409cf616241e3d056089b9c940e63b6000000000000000000000000000000000000000000000000121a06299c784458456a8c84cc621a8845000000000000000000000000000000fffffffffffffffffffffffffff6a7cde1738823e688282e4323b095ec54ea60000000000000000000000000af51a9f6504ed1eeb7b8d89b50bae1de3d3da1a7fc4791965498566b26a3827759f291ed4649973d574a9f2638a17459f077b995a5d8d441d4207fbaee9b38e4d8f56f391f173f74174a824d9958120ee9aa95f896214b938c4341ffffdce7c3a3f4f3dc72a5cce3ce235864a1e316d2383d0daa0000000000000000000000000273602393dd20cf8430d7af530ab22036884b72466cffcab0e7f98b0000000000000000000000000000000000000000000000005b5a45f9fe5c475413abe5d5c207e79c64000000000000000000000000000000ffffffffffffffffffffffffffdc7a70897e1682fef0a8e9107b9ad31d74b85d00000000000000000000000089db1724662ce37034806ef0787d78d17422b45111cbdcde8a2c6877d81e06e882d3e7afc12ad98e03ed853656c3cd79c3b55f7c2daf348c7df22a81d75b6b1cd940ef4d7d4f556cbb89151e91d04e39d76e67197aca0588010f9e62b2c7486d11fb2ce02bd19c89b730db54317c8c54058632e6000000000000000000000000ae7e4b15c1cda5de9be87580e7bb13da1efb7591ec83ccc6b0f9181f000000000000000000000000000000000000000000000000b68204261b7d17cf39e2f735584d6ac398000000000000000000000000000000ffffffffffffffffffffffffff91bccbd702cd5f28c9f1347dcf7c7b295c1c7800000000000000000000000017b3ec6ab419d1a366914ed57f6a0b665bda8ce9b3a5f462eb343b2ba38c581558e7f397f15556d4fe7a617745c87af34d3395b0d1249dde2921894ace13f5bd798507b60cd2d56f39d16bcb4414acd5530568b62ee1f1d9d38e6598dacec663e7335c697d75bc01421c2ba3889e58119da829c1000000000000000000000000962712bafa7ce3d91bb38012c7c17acd92ee34d3a03a8d3e0410d3db000000000000000000000000000000000000000000000000bdfac2f5ea903403eefab3ad3810b20c50000000000000000000000000000000000000000000000000000000005fbaba65d9204c92179ef888c15e393a6bfd4a00000000000000000000000054a6dcc5c20704c266a715d5b7616705ab8dd89796b4cecb3c9f703fde5eee9300655d04ee4553c0ca2a5a7d5caecadf2f93b7a220cdfdd8cef57177b8c89a6f0b164fdd52366bcdac703e9b3914f22eda46b1e567ed7307bc38b514b6fc42f6b2010dee17e84f26d5616a135a843e38c9d093b10000000000000000000000002b39d6d2b7cb289e7555fedfc96b1ed44832028e468ad872ecb06be0000000000000000000000000000000000000000000000000cfb24ecb1873c6d5b3809a0a0b9a747fe6000000000000000000000000000000ffffffffffffffffffffffffffc5842d3fc6106f5188a91a389746cab779c1410000000000000000000000002b57cb6e95a167d6320dda76a18fbdb3ab97fa2fc80dbfaa35599759201f588d5dace4955090e23381d6bd5ed49df9012f41088c5439259b129fea278ff17c38bd309d3ef636c65dc37e48489bc31812349b5e5010a48424fc6a0e695d248ed29b561abc85b144ffbc24bb6621951033722935f0000000000000000000000000f385efe72580aff0a9a9faa25d8ddb790a6a2af1ea1fc724e4946a4c000000000000000000000000000000000000000000000000fd5d6177b05f411f08a415077e3ea2db5b000000000000000000000000000000000000000000000000000000003d365c2aa89841971fc086f8df1e1448991b7f0000000000000000000000008c28208ec8349f8072c06f3567734543b767d82baff17a3901f235911f59ac47a474052d28ac0e0a5f0fce3bd820208925c06aefcfd10f8d7206b876cc433cee909c71959b0b8ea10f708f1ce1e71e1debf83e89e6b2c205b9db529db6f2ea215116888be992f48b7f5ecf685c650728c88c6702000000000000000000000000d3860ef07a59fd979ce006d29abe07ab8def6dee4bc1e3fc814f60df000000000000000000000000000000000000000000000000ecd6702cfd26f29969e3c3f4a6f8a77c1c000000000000000000000000000000000000000000000000000000000078b488523df79780069fba3bbc8f5409de1e000000000000000000000000010509c08c65376879f024b408751484c24593b5b31de7417722d4032c56c325431843d10e01c902487fd5e6a174ecd1a1896493fc81f788a1ad5404a1fc9a2d90eb2a531e94644b3f7abf70f096d127cc58ab2c81933afd788a9e6973be5a2450074737eb8f3bccabb3767cc27b424d88e4b4bb00000000000000000000000099366bd31fc99c72a364f2270243554c89ba31670103eae73c7a9875000000000000000000000000000000000000000000000000d216c235c08eec4db21c42fc22c20661f2000000000000000000000000000000ffffffffffffffffffffffffffb652b7c31fccf0de2e6287641dae26bc8ffa0a000000000000000000000000d770dfc6ef1676de63f40927840623b8615db2d32fce0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000cb2d87dbf4d6d9a33a0f3ffa5f0a0c84e04d0b04000000000000000000000000d9583d04d45a8062b6217666376dbe55f6e3473f000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a806ff09f9a80c3a96fc3a9f09f9a806fc3a94d20f09f9a806f6f6f206f206f6f20c3a9c3a96ff09f9a80c3a94dc3a96f4dc3a9c3a9c3a9206f206f204d6f206fc3a94d0000000000000000000000000000000000000000" + }, + { + "name": "random-(bytes9,(bool,string,(int56,(bytes6,bool,string),(string,bool,int),(int104,(bytes27[1],string,(bool,address,address,address,address[2]),bool)[1]),bytes31[1]),bool,bool),(string,bool,(uint216,bytes22,(string,bool,bool[3],bytes10),string,bytes30),string,address),uint112[][4],bool)[4][2]", + "type": "(bytes9,(bool,string,(int56,(bytes6,bool,string),(string,bool,int),(int104,(bytes27[1],string,(bool,address,address,address,address[2]),bool)[1]),bytes31[1]),bool,bool),(string,bool,(uint216,bytes22,(string,bool,bool[3],bytes10),string,bytes30),string,address),uint112[][4],bool)[4][2]", + "value": [ + [ + [ + "0x38ff1d4bd09084daac", + [ + true, + "Moo é🚀", + [ + "-23752578349029843", + ["0xa3041454f737", false, "Moo é🚀"], + [ + "Moo é🚀🚀🚀 🚀é🚀Moo ", + false, + "-38425255964902292425626891154472153534872251544077286003091327836970394458335" + ], + [ + "-7117633924389681105262242214326", + [ + [ + [ + "0xafc32882a67fb6e2a12ef12e5593e8f0fee4476e3cb861b902a2ff" + ], + "Moo é🚀o éééoéM MMéo🚀 o🚀ooMoé 🚀 ooéMo Mo o🚀o éoéoooéoooooMé ", + [ + true, + "0x1F3d32b69454A0070322B60eC7426d866026C3E1", + "0x5a81cc72331fD53bfc70072ad9e17efAa54d15f8", + "0x6D23544ED1963A7626Db178130b813Db9989A5F1", + [ + "0x03DCCB8F62d73B34F5b5e6547dA3996382bf95e3", + "0x80E3a24161B435412256C4C6B7e555E1FE7674A7" + ] + ], + true + ] + ] + ], + ["0x3ee006aedc7376ecd84c916ee5223648efda9cdb16ee49a68fbeaa0972d2a5"] + ], + false, + false + ], + [ + "Moo é🚀MooM🚀🚀ooMM🚀ooé é oo🚀éo🚀éo ooo🚀M é🚀oé o oM🚀M🚀Méoo", + true, + [ + "72650037408773438030448475368216717356331248262729991183742203537", + "0x9d36abda1a703a914767eba207083d47f0a764bc0c47", + [ + "Moo é🚀ooo o éoé éééoé ooooé MMo🚀Moo", + false, + [false, true, true], + "0x7decc7fe1bccee97d17b" + ], + "Moo é🚀", + "0x7c194ace6f06432df5a7b6b88d86e9f19b397a1ab0105601fde3c1ab2efc" + ], + "Moo é🚀ooMMéo o éoééoM", + "0xae3eDD08Bee48aca623c4C39EaEcd9Fe1A6274Ca" + ], + [ + ["955372374163780864986492531553834", "3024758950298724742608742337127557"], + ["4237546721052470754390151559195610"], + ["2872211107369508497752428063678622"], + ["111355774438692695778092565387668", "2260051501091894501614819150953870"] + ], + false + ], + [ + "0x55906f3ed2d25e1f42", + [ + false, + "Moo é🚀🚀o oooéoé🚀", + [ + "-13588634728638176", + ["0x9822b712d015", true, "Moo é🚀oéoooéoMo🚀 oo éMM 🚀🚀o"], + [ + "Moo é🚀M é M🚀 o oéo", + false, + "-1381828108252282559403895635677371886389472450581672233661675869401130495396" + ], + [ + "-2301286873639017688016524054257", + [ + [ + [ + "0xb2768925b357944d0ae111562b62207a3183208c8ab4bd31f69f5e" + ], + "Moo é🚀o🚀 M🚀Mé🚀oo M 🚀ooooéoooMoéoMéM🚀o ", + [ + false, + "0x55aB8C91f89206F1f5E9b782AA29393F20e86937", + "0xAbdbF1E9feD389D4A969CED2Fa5F60f4170B74E7", + "0xcb5E46bcd1188d4BDC4A5e1252D6ed8b63fEFc50", + [ + "0x4DCEe8608f0dFE1Fb8B0f008D2e460Ec5C2Dd4ce", + "0x68CEdfA366D0cC5B894921CD966fDba4dC9fcae1" + ] + ], + false + ] + ] + ], + ["0x5556b6b433f517aad338cceb71fa66c0d0ffb00189ae3e905f90b7c9673f33"] + ], + true, + true + ], + [ + "Moo é🚀🚀MMMMo M éoMéM M🚀 oé🚀🚀🚀oéo o🚀éo é🚀éoéMoMéé🚀o🚀M oo", + false, + [ + "87276849210015664841785584752947167384195780271625904423032121664", + "0x79b8620d9fc052a643f3a29332e373ca3f8d021986e3", + [ + "Moo é🚀🚀 Moo🚀🚀ooMoM🚀éMooo🚀 o M o éo o🚀Mé🚀 ooMM Mooééo🚀🚀éo🚀é", + false, + [true, false, true], + "0x02f1a6afc51609028dc8" + ], + "Moo é🚀M 🚀o 🚀M🚀Mé éoo oo 🚀🚀é🚀MoooooéoM🚀ooo🚀oMMo ooMo ", + "0x3b291c86abe0818a70a9f010dd7acbf19e1f2bc3f021c0778f610363ad50" + ], + "Moo é🚀Mé 🚀M🚀oooo🚀 M🚀 oo é", + "0xAd230d50ED982311f04D14A5C9fa475cEBf3624B" + ], + [ + ["1669460443878462292282980670702483"], + [ + "4428941743575378706328860399569192", + "1424947952038344969869062031715935", + "4546660216598814792312695772046824" + ], + ["4296674203415129897678115575897696"], + [ + "910863371599992936801945507531803", + "2996372679197759143609789516409237", + "4003478144626770514356714911201572" + ] + ], + false + ], + [ + "0x75b5d4ce932f386ef6", + [ + true, + "Moo é🚀MééM", + [ + "-5051473243263691", + [ + "0xe58fc222ce53", + false, + "Moo é🚀o🚀é MooMo🚀🚀🚀 oo🚀éé oo o oéM🚀oo🚀M MMéo🚀oé🚀" + ], + [ + "Moo é🚀éMMo🚀oMo🚀é🚀🚀🚀", + true, + "-7449863340844524306373980804389553848035409148281865705094943558193151653578" + ], + [ + "62675005066649660926991713638", + [ + [ + [ + "0x8668d85da31504503ea9b77aef6cee6b9b87107d54a85689791c79" + ], + "Moo é🚀MoMéo MM éo", + [ + true, + "0x138A9E491D88E30E2562AADA9bB86De9931DD89f", + "0x7Ec0E8aD2B0482b1661ED6853dE7B8A0A3B54fC6", + "0x23138e20c675b781BE3f96C7992cb4FFc415E1d4", + [ + "0x4212e1bcAF5748c806952257228816e553Ce52A1", + "0xc7C1334dD1a2E8c4F7Bc5c9B0281cf01D9fB03d8" + ] + ], + true + ] + ] + ], + ["0xd39bc92ff2aedc0ca315f6f383f38067f4bd3fdcbd5553d41a05ae6121f64a"] + ], + false, + true + ], + [ + "Moo é🚀MM🚀MoM🚀 MéM🚀oM ooééMoé ooM oo éooMoéo ", + true, + [ + "30148822645983097932041779039543223497977437556495248581884214906", + "0xc2e7db0a808e4f73a557c27c7bf7b66c338b8c2b7e08", + [ + "Moo é🚀ooéMooé o oo oMéoM oMé 🚀🚀éo🚀oMM🚀o M🚀🚀", + false, + [true, false, false], + "0x89cff81cac99fdb50a4c" + ], + "Moo é🚀 Mé", + "0x1ce56dbf942e1efca45cf426cfe753dcc546c27bf04d6ba4fbdebe8d0f7d" + ], + "Moo é🚀é🚀éé🚀🚀éoo🚀Mo é o🚀 o🚀🚀🚀🚀oéé🚀 M M🚀Mo🚀MMoooo🚀oé🚀🚀🚀🚀🚀🚀éé🚀🚀", + "0x4f46eC04723d0EfF4FA143Ceb8fcb9d7cEEaCb81" + ], + [ + [ + "2883883556144974585492497403330033", + "3926707094420510728063374138913274" + ], + [ + "3069091067906313265474471043959744", + "3888745756486092218075146636410400" + ], + ["4189737722986109909039420415827510", "276646836850562282958296894968237"], + [ + "4727416100024242230698001918595878", + "2043457343155596710609380387719796", + "1394517542477882296135882479590824", + "3670692701933182797098307581191731" + ] + ], + false + ], + [ + "0x0cd7ca5805dc4b06af", + [ + true, + "Moo é🚀Méoo🚀M🚀oéoéM🚀o🚀M🚀éoéoéé MMoo", + [ + "-8290523448397740", + [ + "0x765ad85b7426", + true, + "Moo é🚀 🚀 oM🚀M🚀oo🚀Mooo éo Mo🚀Moéé é M🚀🚀 oooo🚀" + ], + [ + "Moo é🚀", + false, + "10402516873405573710396273875152332705176611010480768234745065173663786546454" + ], + [ + "5571910321032267783506139627700", + [ + [ + [ + "0x6fb989260c92e8bc966195c04f7e2fe9d9875833b429350acc0e5c" + ], + "Moo é🚀 é🚀🚀oéM🚀M Moo Mo", + [ + false, + "0x1b139e7d36FDadBcc7Df8c75AdBB6FfA292cEF45", + "0x0F5C24cFcEd9554Fd235F87285C4c5cc47A5b418", + "0x00DA6347a2a1277521bD00823C4DdCd703aEb815", + [ + "0xf5e8E208b26D7a51957f530F4764bf9894F58b54", + "0xEED761Fa1dCb2EAF8F93628fAE92acdE6c174478" + ] + ], + true + ] + ] + ], + ["0x7225a3846e77a05674dcfd69efa3437df1171f5ad40ee2d4ff13d1b47ff8c2"] + ], + true, + true + ], + [ + "Moo é🚀 é éoéoMoéé🚀éééo ", + false, + [ + "5439090432067320680194527809638087444230370463897350716633748856", + "0xaa324338c7572bf832363b06c4dbdc46a53eb6666461", + [ + "Moo é🚀Mé MéééooM🚀 éo o🚀o", + false, + [true, false, false], + "0x539d1fa27354cc2a21be" + ], + "Moo é🚀o🚀oo ", + "0xf9f34cc5c85b184dab5f73987a5e56267ce678c94d489c7f5395f6c689f4" + ], + "Moo é🚀MMoéo🚀o🚀oo ooéoé🚀M🚀ooMMM oMéoéooo🚀 oo🚀🚀o🚀🚀ooéMé🚀o é🚀oooM", + "0x41aBa07653CF095ef00019df15cB694F8a3F496C" + ], + [ + ["3501433467401227308675675358196623"], + ["4478129566979578900280158836831340"], + [ + "1354004295542064315260428212779051", + "1651940248756015948685875254008851" + ], + [] + ], + false + ] + ], + [ + [ + "0xd188f2eb918e1c3678", + [ + false, + "Moo é🚀 M Mo🚀MMoé🚀🚀 é🚀éoMMo", + [ + "19921202998329402", + [ + "0x91efc664009c", + true, + "Moo é🚀éM🚀🚀 Mo o🚀Mééoé🚀 🚀é 🚀 oooooéo🚀M🚀éooéoM oMoMéMoo🚀Mo 🚀" + ], + [ + "Moo é🚀", + true, + "-34853778802574078864607668903207415147089005813637425486660581000432795868354" + ], + [ + "-4986273949011994826117656293701", + [ + [ + [ + "0x1aab4ed8883174b501f54aeb7d0d4602c93cb428b2178d4b7e5d2a" + ], + "Moo é🚀 o🚀 oo 🚀MMo", + [ + true, + "0xB8c72E057Bd699Fb60E3d241113AFB68CaB74F7c", + "0xc28A699999EEe79100dB2911fFb44Af237efa261", + "0xbe24517fe6547CE354b911a96221e3B0Fc411A4F", + [ + "0x4018a5B4f4Eb4eFAf80f60E664C20B4619DBE3b7", + "0x43AF520CF1E78A3e5Edd906cF096C59Dab98701f" + ] + ], + true + ] + ] + ], + ["0x9362b4b7041fcc5a3082d548b8f5fbc9b6fda237d07a6bf8df941f7e15bbb4"] + ], + false, + true + ], + [ + "Moo é🚀 é🚀o Mo ooo🚀 oo éoo éM oo oMooooéo éoo o", + false, + [ + "10063822234314344704186891101443545386702886148609390173024633172", + "0xdca5466aa8187330679e5caa01d2823cfdc605447e08", + [ + "Moo é🚀éMo🚀o 🚀éooé 🚀 🚀é🚀MéoéM ooMM", + false, + [true, true, false], + "0x8d2c525bd7c61732ad6c" + ], + "Moo é🚀🚀MéooMMoéé", + "0x879267f6080428c1cf36b306026357777a4a64c5f4ce84d16a58ec1b164a" + ], + "Moo é🚀oé🚀🚀oM", + "0x4A6EDfA108dcD4DeB780d3e2ee72C8AbD7830807" + ], + [ + [ + "4351667443914206212854853018692721", + "1517345222968682662142905391693174", + "3129906759525319741443462987241790" + ], + [ + "197210087679507814586905804169353", + "515529612669684159505153039132691", + "3127533943137336830095649740682130", + "4690845167942691342852280970213394" + ], + [ + "1594614299129406019292472164413327", + "4402712699161965853857467515963280", + "2272433561112655291394457249640581", + "3693414381600129884772179742807467" + ], + ["4853646781089043191072836236813945"] + ], + true + ], + [ + "0x007db0b7bf377b23a4", + [ + true, + "Moo é🚀éo MMoMoooMoéo é", + [ + "18727119401979969", + ["0x239ec23186a3", true, "Moo é🚀ééé🚀🚀o🚀é "], + [ + "Moo é🚀MéooooMo o🚀 oé M🚀o 🚀🚀é", + false, + "-3401957032145497625429453885115310098237378753282540910148069533561081084690" + ], + [ + "9503075869253945576732871112097", + [ + [ + [ + "0x7ba786850e3be01d5374e16cb110a5f0b463c1bb6ac95ba396becd" + ], + "Moo é🚀🚀éoé🚀é o🚀🚀M ", + [ + true, + "0x9d356c7AA04A105B4634D5DF472696Fe90BA9E52", + "0x2a12DC12f44f2B527e503349578337762f01f7cb", + "0xC01011E87F0d4A5416aac0Aa45D4189123CE07AE", + [ + "0x7F1547A4b5Ee668f9ea78ADC46531c824D0fd65F", + "0x5ebD5e2ddf1AfD70aB20Da1F59552D4d6CCF6091" + ] + ], + true + ] + ] + ], + ["0x62b0dadd1b47d4900b291e875beb3f173bf1ac7a8701e78e17049242a64a96"] + ], + true, + true + ], + [ + "Moo é🚀éooMM oo MéM🚀🚀o 🚀ooo🚀M oooMoéMéMo 🚀oooo🚀🚀éo éé", + false, + [ + "61122460084730887589401861519436335256068040917044125863755700186", + "0x44673e7e80dbfcfd891d5cbc13240a6e61b2dcc66fb0", + [ + "Moo é🚀o oé oé🚀éo🚀 🚀éoo🚀MoM oé🚀 éo M🚀éé Méo🚀ooo🚀oo🚀éoo", + false, + [false, true, false], + "0xf99a38066201c0de2dbb" + ], + "Moo é🚀🚀MéMooéo o🚀M🚀éMo MoMMo🚀M🚀o🚀éoo 🚀ooMoM🚀🚀oéM🚀 é ", + "0xa66df1dddd5cacdb8773bed83e82c915556af9cfbb1cd60b9e93ba443cd7" + ], + "Moo é🚀🚀é", + "0x72D38d5e263e936b9eC9C5E9095da3fE77a7ac3e" + ], + [ + [ + "3843095391395019944319751356282358", + "3527374467356275618008227406752912" + ], + [ + "3025715916080275893188199544395876", + "4762734183378441203526413338708674" + ], + ["2248310426129254510834052394751565"], + [] + ], + true + ], + [ + "0x2d4d4e1e6fc134a99e", + [ + false, + "Moo é🚀o🚀MééoéM 🚀o éoé🚀Mé🚀 o🚀 o🚀🚀éoMéo MMooM éoM🚀éé", + [ + "-21096536789179785", + ["0x83b6e22b89b4", false, "Moo é🚀"], + [ + "Moo é🚀MéMooo🚀éo oM🚀MéMMM🚀 🚀éoé o🚀 🚀éoo M🚀é oo 🚀", + true, + "-35632596317152684293585149403061416555670184918961394017008032728655846225195" + ], + [ + "2692272154424008380290346655986", + [ + [ + [ + "0x9cda0d819f4ddcd4476fdf3cb19b4a93f51408ba361c97bcce02be" + ], + "Moo é🚀🚀éoMé oéoo oMéoooo🚀é🚀🚀 🚀🚀Mooé🚀ooéoé", + [ + true, + "0xB1f5923E517207ee2fB4b4bEe0Ab3d3d19E263FF", + "0x3E6A520EA9d8753Ce9AaA5F8749FDAAbddE23B92", + "0xdD4B72b027345BeaC2cb6315275D601200d78b15", + [ + "0x319A738EF3Fb5Aea84681A2Ede9544C1D6F1a794", + "0x839183E24C35c4358010DC838C766Db13436BeEE" + ] + ], + true + ] + ] + ], + ["0x68af47ae2029cc39b842f7c217b686583617e6040b57bcf2e4e38a24212a54"] + ], + true, + true + ], + [ + "Moo é🚀ééo éMoo🚀ooo 🚀ooééo MM 🚀MM🚀M ", + true, + [ + "25244257055884949875096069331316139460177198992542331600645463177", + "0x334780780af9905eee153d4581f16ae52561a3c50421", + ["Moo é🚀", true, [true, false, true], "0x7f77fae79b343ded5b98"], + "Moo é🚀", + "0x70998e30f82208a475df2e16226cb2c0dc2cdde5d542841a4e6af29c39cc" + ], + "Moo é🚀 é éo oo éoéo🚀 o oéMMoéo🚀MM🚀MéoooooMMM", + "0x729328D745D7280A97AABB91B2553f06d3c85a9E" + ], + [ + ["2502377143484476038673651246124084"], + ["803482201416434846728020011535020"], + ["1969084935455441007698839230581077"], + ["3698994371833325967111580429080967", "4147148449875753158786244866637883"] + ], + false + ], + [ + "0xd46fc91e0203a1e4fc", + [ + true, + "Moo é🚀🚀oo Moo 🚀o ééé🚀o🚀M🚀o🚀M🚀Mo🚀oM M🚀Moo MM", + [ + "27748990894304484", + ["0xe932414f0727", false, "Moo é🚀M🚀éo🚀 oéMooo M o éoooM"], + [ + "Moo é🚀o oéooooééMo🚀éoéMo 🚀🚀é🚀oo🚀 oMé 🚀 🚀oM 🚀 oMoo é ", + true, + "52411836837472820198293125195164928076251432430168676287052327103356919710586" + ], + [ + "1700458549325852792476907623436", + [ + [ + [ + "0x3d2b2a31720f2131dfa00e8ee3315ede5f95edd33a9018ba528d7e" + ], + "Moo é🚀o🚀oo M", + [ + true, + "0xfEa5a295aa12fBd82BAe28FEd0e00EAfBa5D4d35", + "0x21d389e6640268287eb7838576DCB3277bAD6E13", + "0x27b65f3338d28CC7f091022C3D1Bcc3Ae83B13a4", + [ + "0x5Beb62106aBDa3511dad7a32556a7eeade46B0e0", + "0x140278B84f0cd62899aBFD20D159E03460490566" + ] + ], + true + ] + ] + ], + ["0x330e49ed08cc23605e70513cd47b7ecfd406a59bd6b4c8abec201f64f41482"] + ], + false, + false + ], + [ + "Moo é🚀 oM oM MééMMoooMoooééM oooM M éMoo🚀éoMo🚀 🚀o🚀M🚀", + true, + [ + "95258903554469739649272631254932347606007506921841497299313653924", + "0x5058973cd7cb2d84fe12a3c198b1842a0bbe9ddb0ddd", + [ + "Moo é🚀MMé 🚀oooéo ooo🚀 ooMéo oo 🚀M ooM🚀🚀ééééMMMéoMM", + true, + [false, true, true], + "0xccdd6a90e30070c8d892" + ], + "Moo é🚀 éMééM🚀oéMoé éMooMo🚀ooo oéMooo o o 🚀🚀 éoéooo éé", + "0xebf347d511750a76c97ec85df0064defb2112a459ce2682f4de3ee108d74" + ], + "Moo é🚀é🚀oM🚀🚀oMéo 🚀o🚀 MMoo ooMMMo 🚀éMoéooMoM 🚀 🚀", + "0x2DDC2B97fB0F70B538412ed393aDCDc88EDD4C48" + ], + [ + ["171747982968366975167544630288517", "4364508640690874416442345556760859"], + ["3328153896153303566704371299921876"], + [], + [] + ], + false + ] + ] + ], + "verbose": { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x38ff1d4bd09084daac" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-23752578349029843" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xa3041454f737" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀🚀 🚀é🚀Moo " + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-38425255964902292425626891154472153534872251544077286003091327836970394458335" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-7117633924389681105262242214326" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xafc32882a67fb6e2a12ef12e5593e8f0fee4476e3cb861b902a2ff" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o éééoéM MMéo🚀 o🚀ooMoé 🚀 ooéMo Mo o🚀o éoéoooéoooooMé " + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x1F3d32b69454A0070322B60eC7426d866026C3E1" + }, + { + "type": "address", + "value": "0x5a81cc72331fD53bfc70072ad9e17efAa54d15f8" + }, + { + "type": "address", + "value": "0x6D23544ED1963A7626Db178130b813Db9989A5F1" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x03DCCB8F62d73B34F5b5e6547dA3996382bf95e3" + }, + { + "type": "address", + "value": "0x80E3a24161B435412256C4C6B7e555E1FE7674A7" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3ee006aedc7376ecd84c916ee5223648efda9cdb16ee49a68fbeaa0972d2a5" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MooM🚀🚀ooMM🚀ooé é oo🚀éo🚀éo ooo🚀M é🚀oé o oM🚀M🚀Méoo" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "72650037408773438030448475368216717356331248262729991183742203537" + }, + { + "type": "hexstring", + "value": "0x9d36abda1a703a914767eba207083d47f0a764bc0c47" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooo o éoé éééoé ooooé MMo🚀Moo" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x7decc7fe1bccee97d17b" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "hexstring", + "value": "0x7c194ace6f06432df5a7b6b88d86e9f19b397a1ab0105601fde3c1ab2efc" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀ooMMéo o éoééoM" + }, + { + "type": "address", + "value": "0xae3eDD08Bee48aca623c4C39EaEcd9Fe1A6274Ca" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "955372374163780864986492531553834" + }, + { + "type": "number", + "value": "3024758950298724742608742337127557" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "4237546721052470754390151559195610" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "2872211107369508497752428063678622" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "111355774438692695778092565387668" + }, + { + "type": "number", + "value": "2260051501091894501614819150953870" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x55906f3ed2d25e1f42" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀🚀o oooéoé🚀" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-13588634728638176" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x9822b712d015" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀oéoooéoMo🚀 oo éMM 🚀🚀o" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀M é M🚀 o oéo" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-1381828108252282559403895635677371886389472450581672233661675869401130495396" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-2301286873639017688016524054257" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xb2768925b357944d0ae111562b62207a3183208c8ab4bd31f69f5e" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀 M🚀Mé🚀oo M 🚀ooooéoooMoéoMéM🚀o " + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x55aB8C91f89206F1f5E9b782AA29393F20e86937" + }, + { + "type": "address", + "value": "0xAbdbF1E9feD389D4A969CED2Fa5F60f4170B74E7" + }, + { + "type": "address", + "value": "0xcb5E46bcd1188d4BDC4A5e1252D6ed8b63fEFc50" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x4DCEe8608f0dFE1Fb8B0f008D2e460Ec5C2Dd4ce" + }, + { + "type": "address", + "value": "0x68CEdfA366D0cC5B894921CD966fDba4dC9fcae1" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x5556b6b433f517aad338cceb71fa66c0d0ffb00189ae3e905f90b7c9673f33" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀MMMMo M éoMéM M🚀 oé🚀🚀🚀oéo o🚀éo é🚀éoéMoMéé🚀o🚀M oo" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "87276849210015664841785584752947167384195780271625904423032121664" + }, + { + "type": "hexstring", + "value": "0x79b8620d9fc052a643f3a29332e373ca3f8d021986e3" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀🚀 Moo🚀🚀ooMoM🚀éMooo🚀 o M o éo o🚀Mé🚀 ooMM Mooééo🚀🚀éo🚀é" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x02f1a6afc51609028dc8" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀M 🚀o 🚀M🚀Mé éoo oo 🚀🚀é🚀MoooooéoM🚀ooo🚀oMMo ooMo " + }, + { + "type": "hexstring", + "value": "0x3b291c86abe0818a70a9f010dd7acbf19e1f2bc3f021c0778f610363ad50" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Mé 🚀M🚀oooo🚀 M🚀 oo é" + }, + { + "type": "address", + "value": "0xAd230d50ED982311f04D14A5C9fa475cEBf3624B" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1669460443878462292282980670702483" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "4428941743575378706328860399569192" + }, + { + "type": "number", + "value": "1424947952038344969869062031715935" + }, + { + "type": "number", + "value": "4546660216598814792312695772046824" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "4296674203415129897678115575897696" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "910863371599992936801945507531803" + }, + { + "type": "number", + "value": "2996372679197759143609789516409237" + }, + { + "type": "number", + "value": "4003478144626770514356714911201572" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x75b5d4ce932f386ef6" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀MééM" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-5051473243263691" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xe58fc222ce53" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀o🚀é MooMo🚀🚀🚀 oo🚀éé oo o oéM🚀oo🚀M MMéo🚀oé🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éMMo🚀oMo🚀é🚀🚀🚀" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-7449863340844524306373980804389553848035409148281865705094943558193151653578" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "62675005066649660926991713638" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x8668d85da31504503ea9b77aef6cee6b9b87107d54a85689791c79" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀MoMéo MM éo" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x138A9E491D88E30E2562AADA9bB86De9931DD89f" + }, + { + "type": "address", + "value": "0x7Ec0E8aD2B0482b1661ED6853dE7B8A0A3B54fC6" + }, + { + "type": "address", + "value": "0x23138e20c675b781BE3f96C7992cb4FFc415E1d4" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x4212e1bcAF5748c806952257228816e553Ce52A1" + }, + { + "type": "address", + "value": "0xc7C1334dD1a2E8c4F7Bc5c9B0281cf01D9fB03d8" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0xd39bc92ff2aedc0ca315f6f383f38067f4bd3fdcbd5553d41a05ae6121f64a" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MM🚀MoM🚀 MéM🚀oM ooééMoé ooM oo éooMoéo " + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "30148822645983097932041779039543223497977437556495248581884214906" + }, + { + "type": "hexstring", + "value": "0xc2e7db0a808e4f73a557c27c7bf7b66c338b8c2b7e08" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ooéMooé o oo oMéoM oMé 🚀🚀éo🚀oMM🚀o M🚀🚀" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x89cff81cac99fdb50a4c" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 Mé" + }, + { + "type": "hexstring", + "value": "0x1ce56dbf942e1efca45cf426cfe753dcc546c27bf04d6ba4fbdebe8d0f7d" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀é🚀éé🚀🚀éoo🚀Mo é o🚀 o🚀🚀🚀🚀oéé🚀 M M🚀Mo🚀MMoooo🚀oé🚀🚀🚀🚀🚀🚀éé🚀🚀" + }, + { + "type": "address", + "value": "0x4f46eC04723d0EfF4FA143Ceb8fcb9d7cEEaCb81" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "2883883556144974585492497403330033" + }, + { + "type": "number", + "value": "3926707094420510728063374138913274" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3069091067906313265474471043959744" + }, + { + "type": "number", + "value": "3888745756486092218075146636410400" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "4189737722986109909039420415827510" + }, + { + "type": "number", + "value": "276646836850562282958296894968237" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "4727416100024242230698001918595878" + }, + { + "type": "number", + "value": "2043457343155596710609380387719796" + }, + { + "type": "number", + "value": "1394517542477882296135882479590824" + }, + { + "type": "number", + "value": "3670692701933182797098307581191731" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x0cd7ca5805dc4b06af" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀Méoo🚀M🚀oéoéM🚀o🚀M🚀éoéoéé MMoo" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-8290523448397740" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x765ad85b7426" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀 🚀 oM🚀M🚀oo🚀Mooo éo Mo🚀Moéé é M🚀🚀 oooo🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "10402516873405573710396273875152332705176611010480768234745065173663786546454" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "5571910321032267783506139627700" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x6fb989260c92e8bc966195c04f7e2fe9d9875833b429350acc0e5c" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 é🚀🚀oéM🚀M Moo Mo" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "address", + "value": "0x1b139e7d36FDadBcc7Df8c75AdBB6FfA292cEF45" + }, + { + "type": "address", + "value": "0x0F5C24cFcEd9554Fd235F87285C4c5cc47A5b418" + }, + { + "type": "address", + "value": "0x00DA6347a2a1277521bD00823C4DdCd703aEb815" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0xf5e8E208b26D7a51957f530F4764bf9894F58b54" + }, + { + "type": "address", + "value": "0xEED761Fa1dCb2EAF8F93628fAE92acdE6c174478" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x7225a3846e77a05674dcfd69efa3437df1171f5ad40ee2d4ff13d1b47ff8c2" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é éoéoMoéé🚀éééo " + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "5439090432067320680194527809638087444230370463897350716633748856" + }, + { + "type": "hexstring", + "value": "0xaa324338c7572bf832363b06c4dbdc46a53eb6666461" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀Mé MéééooM🚀 éo o🚀o" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x539d1fa27354cc2a21be" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀oo " + }, + { + "type": "hexstring", + "value": "0xf9f34cc5c85b184dab5f73987a5e56267ce678c94d489c7f5395f6c689f4" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀MMoéo🚀o🚀oo ooéoé🚀M🚀ooMMM oMéoéooo🚀 oo🚀🚀o🚀🚀ooéMé🚀o é🚀oooM" + }, + { + "type": "address", + "value": "0x41aBa07653CF095ef00019df15cB694F8a3F496C" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3501433467401227308675675358196623" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "4478129566979578900280158836831340" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1354004295542064315260428212779051" + }, + { + "type": "number", + "value": "1651940248756015948685875254008851" + } + ] + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd188f2eb918e1c3678" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀 M Mo🚀MMoé🚀🚀 é🚀éoMMo" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "19921202998329402" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x91efc664009c" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀éM🚀🚀 Mo o🚀Mééoé🚀 🚀é 🚀 oooooéo🚀M🚀éooéoM oMoMéMoo🚀Mo 🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-34853778802574078864607668903207415147089005813637425486660581000432795868354" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-4986273949011994826117656293701" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x1aab4ed8883174b501f54aeb7d0d4602c93cb428b2178d4b7e5d2a" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 o🚀 oo 🚀MMo" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xB8c72E057Bd699Fb60E3d241113AFB68CaB74F7c" + }, + { + "type": "address", + "value": "0xc28A699999EEe79100dB2911fFb44Af237efa261" + }, + { + "type": "address", + "value": "0xbe24517fe6547CE354b911a96221e3B0Fc411A4F" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x4018a5B4f4Eb4eFAf80f60E664C20B4619DBE3b7" + }, + { + "type": "address", + "value": "0x43AF520CF1E78A3e5Edd906cF096C59Dab98701f" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x9362b4b7041fcc5a3082d548b8f5fbc9b6fda237d07a6bf8df941f7e15bbb4" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 é🚀o Mo ooo🚀 oo éoo éM oo oMooooéo éoo o" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "10063822234314344704186891101443545386702886148609390173024633172" + }, + { + "type": "hexstring", + "value": "0xdca5466aa8187330679e5caa01d2823cfdc605447e08" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éMo🚀o 🚀éooé 🚀 🚀é🚀MéoéM ooMM" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0x8d2c525bd7c61732ad6c" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀MéooMMoéé" + }, + { + "type": "hexstring", + "value": "0x879267f6080428c1cf36b306026357777a4a64c5f4ce84d16a58ec1b164a" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀oé🚀🚀oM" + }, + { + "type": "address", + "value": "0x4A6EDfA108dcD4DeB780d3e2ee72C8AbD7830807" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "4351667443914206212854853018692721" + }, + { + "type": "number", + "value": "1517345222968682662142905391693174" + }, + { + "type": "number", + "value": "3129906759525319741443462987241790" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "197210087679507814586905804169353" + }, + { + "type": "number", + "value": "515529612669684159505153039132691" + }, + { + "type": "number", + "value": "3127533943137336830095649740682130" + }, + { + "type": "number", + "value": "4690845167942691342852280970213394" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1594614299129406019292472164413327" + }, + { + "type": "number", + "value": "4402712699161965853857467515963280" + }, + { + "type": "number", + "value": "2272433561112655291394457249640581" + }, + { + "type": "number", + "value": "3693414381600129884772179742807467" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "4853646781089043191072836236813945" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x007db0b7bf377b23a4" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀éo MMoMoooMoéo é" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "18727119401979969" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x239ec23186a3" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀ééé🚀🚀o🚀é " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MéooooMo o🚀 oé M🚀o 🚀🚀é" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "-3401957032145497625429453885115310098237378753282540910148069533561081084690" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "9503075869253945576732871112097" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x7ba786850e3be01d5374e16cb110a5f0b463c1bb6ac95ba396becd" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀éoé🚀é o🚀🚀M " + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0x9d356c7AA04A105B4634D5DF472696Fe90BA9E52" + }, + { + "type": "address", + "value": "0x2a12DC12f44f2B527e503349578337762f01f7cb" + }, + { + "type": "address", + "value": "0xC01011E87F0d4A5416aac0Aa45D4189123CE07AE" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x7F1547A4b5Ee668f9ea78ADC46531c824D0fd65F" + }, + { + "type": "address", + "value": "0x5ebD5e2ddf1AfD70aB20Da1F59552D4d6CCF6091" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x62b0dadd1b47d4900b291e875beb3f173bf1ac7a8701e78e17049242a64a96" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀éooMM oo MéM🚀🚀o 🚀ooo🚀M oooMoéMéMo 🚀oooo🚀🚀éo éé" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "61122460084730887589401861519436335256068040917044125863755700186" + }, + { + "type": "hexstring", + "value": "0x44673e7e80dbfcfd891d5cbc13240a6e61b2dcc66fb0" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o oé oé🚀éo🚀 🚀éoo🚀MoM oé🚀 éo M🚀éé Méo🚀ooo🚀oo🚀éoo" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0xf99a38066201c0de2dbb" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀MéMooéo o🚀M🚀éMo MoMMo🚀M🚀o🚀éoo 🚀ooMoM🚀🚀oéM🚀 é " + }, + { + "type": "hexstring", + "value": "0xa66df1dddd5cacdb8773bed83e82c915556af9cfbb1cd60b9e93ba443cd7" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀é" + }, + { + "type": "address", + "value": "0x72D38d5e263e936b9eC9C5E9095da3fE77a7ac3e" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3843095391395019944319751356282358" + }, + { + "type": "number", + "value": "3527374467356275618008227406752912" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3025715916080275893188199544395876" + }, + { + "type": "number", + "value": "4762734183378441203526413338708674" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "2248310426129254510834052394751565" + } + ] + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x2d4d4e1e6fc134a99e" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀o🚀MééoéM 🚀o éoé🚀Mé🚀 o🚀 o🚀🚀éoMéo MMooM éoM🚀éé" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "-21096536789179785" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x83b6e22b89b4" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MéMooo🚀éo oM🚀MéMMM🚀 🚀éoé o🚀 🚀éoo M🚀é oo 🚀" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "-35632596317152684293585149403061416555670184918961394017008032728655846225195" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "2692272154424008380290346655986" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x9cda0d819f4ddcd4476fdf3cb19b4a93f51408ba361c97bcce02be" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀éoMé oéoo oMéoooo🚀é🚀🚀 🚀🚀Mooé🚀ooéoé" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xB1f5923E517207ee2fB4b4bEe0Ab3d3d19E263FF" + }, + { + "type": "address", + "value": "0x3E6A520EA9d8753Ce9AaA5F8749FDAAbddE23B92" + }, + { + "type": "address", + "value": "0xdD4B72b027345BeaC2cb6315275D601200d78b15" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x319A738EF3Fb5Aea84681A2Ede9544C1D6F1a794" + }, + { + "type": "address", + "value": "0x839183E24C35c4358010DC838C766Db13436BeEE" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x68af47ae2029cc39b842f7c217b686583617e6040b57bcf2e4e38a24212a54" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀ééo éMoo🚀ooo 🚀ooééo MM 🚀MM🚀M " + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "25244257055884949875096069331316139460177198992542331600645463177" + }, + { + "type": "hexstring", + "value": "0x334780780af9905eee153d4581f16ae52561a3c50421" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0x7f77fae79b343ded5b98" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "hexstring", + "value": "0x70998e30f82208a475df2e16226cb2c0dc2cdde5d542841a4e6af29c39cc" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 é éo oo éoéo🚀 o oéMMoéo🚀MM🚀MéoooooMMM" + }, + { + "type": "address", + "value": "0x729328D745D7280A97AABB91B2553f06d3c85a9E" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "2502377143484476038673651246124084" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "803482201416434846728020011535020" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "1969084935455441007698839230581077" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3698994371833325967111580429080967" + }, + { + "type": "number", + "value": "4147148449875753158786244866637883" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xd46fc91e0203a1e4fc" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "string", + "value": "Moo é🚀🚀oo Moo 🚀o ééé🚀o🚀M🚀o🚀M🚀Mo🚀oM M🚀Moo MM" + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "27748990894304484" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xe932414f0727" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀M🚀éo🚀 oéMooo M o éoooM" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀o oéooooééMo🚀éoéMo 🚀🚀é🚀oo🚀 oMé 🚀 🚀oM 🚀 oMoo é " + }, + { + "type": "boolean", + "value": true + }, + { + "type": "number", + "value": "52411836837472820198293125195164928076251432430168676287052327103356919710586" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "1700458549325852792476907623436" + }, + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x3d2b2a31720f2131dfa00e8ee3315ede5f95edd33a9018ba528d7e" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀o🚀oo M" + }, + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "address", + "value": "0xfEa5a295aa12fBd82BAe28FEd0e00EAfBa5D4d35" + }, + { + "type": "address", + "value": "0x21d389e6640268287eb7838576DCB3277bAD6E13" + }, + { + "type": "address", + "value": "0x27b65f3338d28CC7f091022C3D1Bcc3Ae83B13a4" + }, + { + "type": "array", + "value": [ + { + "type": "address", + "value": "0x5Beb62106aBDa3511dad7a32556a7eeade46B0e0" + }, + { + "type": "address", + "value": "0x140278B84f0cd62899aBFD20D159E03460490566" + } + ] + } + ] + }, + { + "type": "boolean", + "value": true + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x330e49ed08cc23605e70513cd47b7ecfd406a59bd6b4c8abec201f64f41482" + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀 oM oM MééMMoooMoooééM oooM M éMoo🚀éoMo🚀 🚀o🚀M🚀" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "number", + "value": "95258903554469739649272631254932347606007506921841497299313653924" + }, + { + "type": "hexstring", + "value": "0x5058973cd7cb2d84fe12a3c198b1842a0bbe9ddb0ddd" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀MMé 🚀oooéo ooo🚀 ooMéo oo 🚀M ooM🚀🚀ééééMMMéoMM" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "hexstring", + "value": "0xccdd6a90e30070c8d892" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀 éMééM🚀oéMoé éMooMo🚀ooo oéMooo o o 🚀🚀 éoéooo éé" + }, + { + "type": "hexstring", + "value": "0xebf347d511750a76c97ec85df0064defb2112a459ce2682f4de3ee108d74" + } + ] + }, + { + "type": "string", + "value": "Moo é🚀é🚀oM🚀🚀oMéo 🚀o🚀 MMoo ooMMMo 🚀éMoéooMoM 🚀 🚀" + }, + { + "type": "address", + "value": "0x2DDC2B97fB0F70B538412ed393aDCDc88EDD4C48" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "171747982968366975167544630288517" + }, + { + "type": "number", + "value": "4364508640690874416442345556760859" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "3328153896153303566704371299921876" + } + ] + }, + { + "type": "array", + "value": [] + }, + { + "type": "array", + "value": [] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50614957806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b6040516100459190613ba3565b60405180910390f35b610056613554565b61005e613554565b610066613581565b61006e6135ae565b680e3fc752f4242136ab60ba1b81526100856135f0565b6001815260408051808201909152600a8152689adede418753e13f3560b71b6020808301919091528201526100b8613624565b665462d81afe59d219815260408051606080820183526000602080840182905283850183815265a3041454f73760d01b855285518087018752600a8152689adede418753e13f3560b71b818401529052808601939093528351808301855282815280840182905280850182905284519283019094526022808352909261419690830139825250600060208201527fab0c136a551c06ca5740fbcba98364c709ced615930af642384d74f368f9e72160408083019190915282015261017a61369a565b6c59d650ca1cfdae6f9e600cb1b51981526101936136b3565b61019b6136e0565b6101a3613707565b7fafc32882a67fb6e2a12ef12e5593e8f0fee4476e3cb861b902a2ff000000000081528152604080516080810190915260578082526000919061458960208301396020830152506101f2613725565b60018152731f3d32b69454a0070322b60ec7426d866026c3e16020820152735a81cc72331fd53bfc70072ad9e17efaa54d15f86040820152736d23544ed1963a7626db178130b813db9989a5f1606082015261024c613751565b7303dccb8f62d73b34f5b5e6547da3996382bf95e381527380e3a24161b435412256c4c6b7e555e1fe7674a76020808301919091526080830191909152604083019190915260016060808401919091529183528301919091528201526102b0613707565b7f3ee006aedc7376ecd84c916ee5223648efda9cdb16ee49a68fbeaa0972d2a500815260808281019190915260408301919091526000606083018190529082015260208201526102fe61376f565b60006040518060800160405280605e8152602001614700605e91398252506001602082015261032b6137a3565b7ab09a3ab1a5f781b6b5e1b6ca17f329af593d22d44d22a13276f6918152759d36abda1a703a914767eba207083d47f0a764bc0c4760501b60208201526103706137be565b6000604051806060016040528060348152602001614494603491398252506000602082015261039d6137da565b600081526001602080830182905260408084019290925283820192909252697decc7fe1bccee97d17b60b01b6060808501919091528482019390935280518082018252600a8152689adede418753e13f3560b71b81840152848401527f7c194ace6f06432df5a7b6b88d86e9f19b397a1ab0105601fde3c1ab2efc00006080808601919091528582019490945280518082018252601d81527f4d6f6f20c3a9f09f9a806f6f4d4dc3a96f206f20c3a96fc3a9c3a96f4d000000928101929092529184015273ae3edd08bee48aca623c4c39eaecd9fe1a6274ca918301919091528201526104886137f8565b60408051600280825260608201835260009260208301908036833701905050905060006d2f1a7ea1ad524564a187a96ab62a905080826000815181106104d0576104d0613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006d9521d34955569099d060692aa4859050808260018151811061051857610518613d63565b6001600160701b03929092166020928302919091019091015250815260408051600180825281830190925260009181602001602082028036833701905050905060006dd0ed5bec7137bb65350d98d52bda9050808260008151811061057f5761057f613d63565b6001600160701b03929092166020928302919091018201528301919091525060408051600180825281830190925260009181602001602082028036833701905050905060006d8d9c669f2ceee09cdb6bc6e2e09e905080826000815181106105e9576105e9613d63565b6001600160701b039290921660209283029190910182015260408481019390935282516002808252606082018552600094919350918301908036833701905050905060006d057d81e9b625d239a824bfebd9949050808260008151811061065257610652613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006d6f6ddc411317dee9d5e934a87d8e9050808260018151811061069a5761069a613d63565b6001600160701b039290921660209283029190910190910152506060808301919091528201526000608082015281526106d16135ae565b682ac8379f69692f0fa160b91b81526106e86135f0565b6000815260408051808201909152601c81527f4d6f6f20c3a9f09f9a80f09f9a806f206f6f6fc3a96fc3a9f09f9a800000000060208083019190915282015261072f613624565b663046ca91fba6df1981526040805160608082018352818301819052659822b712d01560d01b825260016020808401919091528351918201909352602b8082529192600092906148bb908301396040838101919091526020848101939093528051606080820183528152600081850181815282840182815284518086018652601d81527f4d6f6f20c3a9f09f9a804d2020c3a920204df09f9a80206f206fc3a96f00000097810197909752958352527ffcf1e9bad118689acaecc2bf1124b2472725a6c19d588240ccb544dfd23b925c9093528301919091525061081161369a565b6c1d0bdbe2c397020e466dee8ef019815261082a6136b3565b6108326136e0565b61083a613707565b7fb2768925b357944d0ae111562b62207a3183208c8ab4bd31f69f5e0000000000815281526040805160608101909152603d808252600091906146206020830139602083015250610889613725565b600081527355ab8c91f89206f1f5e9b782aa29393f20e86937602082015273abdbf1e9fed389d4a969ced2fa5f60f4170b74e7604082015273cb5e46bcd1188d4bdc4a5e1252d6ed8b63fefc5060608201526108e3613751565b734dcee8608f0dfe1fb8b0f008d2e460ec5c2dd4ce81527368cedfa366d0cc5b894921cd966fdba4dc9fcae1602080830191909152608083019190915260408301919091526000606080840191909152918352830191909152820152610947613707565b7f5556b6b433f517aad338cceb71fa66c0d0ffb00189ae3e905f90b7c9673f33008152608082810191909152604083019190915260016060830181905290820152602082015261099561376f565b60006040518060a00160405280606381526020016144c860639139825250600060208201526109c26137a3565b7ad428844024b7cb04d2a1d1dd3155fd3eaa4b8539c44cfd9388e94081527579b8620d9fc052a643f3a29332e373ca3f8d021986e360501b6020820152610a076137be565b60006040518060a00160405280606681526020016140ac6066913982525060006020820152610a346137da565b60018082526000602080840182905260408085019390935284830193909352685e34d5f8a2c12051b960b31b60608501528482019390935280516080810190915260568082529091613edc908301396060808401919091527f3b291c86abe0818a70a9f010dd7acbf19e1f2bc3f021c0778f610363ad5000006080840152604080850193909352825190810190925250602c808252600091906146d4602083013960608301525073ad230d50ed982311f04d14a5c9fa475cebf3624b60808201526040820152610b026137f8565b6040805160018082528183019092526000916020808301908036833701905050905060006d524f8da099b62b203f85defd039390508082600081518110610b4b57610b4b613d63565b6001600160701b0392909216602092830291909101909101525081526040805160038082526080820190925260009181602001602082028036833701905050905060006dda5d1a9869902cb7cc6974c1092890508082600081518110610bb357610bb3613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006d46415f27d2c1331ad38ee32aae5f90508082600181518110610bfb57610bfb613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006de02aeb7f0964751016f1b03e65e890508082600281518110610c4357610c43613d63565b6001600160701b03929092166020928302919091018201528301919091525060408051600180825281830190925260009181602001602082028036833701905050905060006dd3d7a71f858f66c899942b4f1e6090508082600081518110610cad57610cad613d63565b6001600160701b0392909216602092830291909101820152604084810193909352825160038082526080820190945260009390925090820160608036833701905050905060006d2ce8b649ac152ee2c2ee69bf0c1b90508082600081518110610d1857610d18613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006d93bb8a4c3749185ad87d7c00e99590508082600181518110610d6057610d60613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006dc562ff9003d90e3ac0375e26792490508082600281518110610da857610da8613d63565b6001600160701b0390921660209283029190910190910152508082600360200201525060608201526000608082015280826001602002015250610de96135ae565b683adaea6749979c377b60b91b8152610e006135f0565b6001815260408051808201909152601081526f4d6f6f20c3a9f09f9a804dc3a9c3a94d60801b602080830191909152820152610e3a613624565b6611f249c441d2ca1981526040805160608082018352600060208084018290528385019290925265e58fc222ce5360d01b83528351608081019094526054808552929390929091614011908301396040808401919091526020808501939093528051606080820183528152600093810184905290810192909252506000604051806060016040528060288152602001613e3960289139825250600160208201527fef8786dabe5bbfe995176b771343d7e0bcac14493576cf39c0060f9259f14936604080830191909152820152610f0f61369a565b6bca838c90b0a8f3a9fdb2c5668152610f266136b3565b610f2e6136e0565b610f36613707565b7f8668d85da31504503ea9b77aef6cee6b9b87107d54a85689791c7900000000008152815260408051808201909152601781527f4d6f6f20c3a9f09f9a804d6f4dc3a96f204d4d20c3a96f000000000000000000602082810191909152820152610f9e613725565b6001815273138a9e491d88e30e2562aada9bb86de9931dd89f6020820152737ec0e8ad2b0482b1661ed6853de7b8a0a3b54fc660408201527323138e20c675b781be3f96c7992cb4ffc415e1d46060820152610ff8613751565b734212e1bcaf5748c806952257228816e553ce52a1815273c7c1334dd1a2e8c4f7bc5c9b0281cf01d9fb03d860208083019190915260808301919091526040830191909152600160608084019190915291835283019190915282015261105c613707565b7fd39bc92ff2aedc0ca315f6f383f38067f4bd3fdcbd5553d41a05ae6121f64a00815260808281019190915260408301919091526000606083015260019082015260208201526110aa61376f565b60006040518060600160405280604081526020016145e060409139825250600160208201526110d76137a3565b7a4949a88c7ac4099fb9911018f6756cea01499c30c2c84044097e7a815275185cfb615011c9ee74aaf84f8f7ef6cd867171856fc160531b602082015261111c6137be565b600060405180608001604052806047815260200161406560479139825250600060208201526111496137da565b6001815260006020808301829052604080840183905284810193909352692273fe072b267f6d429360b21b6060808601919091528584019490945282518084018452600e81526d4d6f6f20c3a9f09f9a80204dc3a960901b81830152938501939093527f1ce56dbf942e1efca45cf426cfe753dcc546c27bf04d6ba4fbdebe8d0f7d0000608085015284820193909352805160c081019091526089808252909161475e90830139606083015250734f46ec04723d0eff4fa143ceb8fcb9d7ceeacb816080820152604082015261121d6137f8565b60408051600280825260608201835260009260208301908036833701905050905060006d8e2fba5680ec2eabb063c2d9bdf19050808260008151811061126557611265613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006dc19a02ebadd806a1ba38133db1fa905080826001815181106112ad576112ad613d63565b6001600160701b0392909216602092830291909101909101525081526040805160028082526060820190925260009181602001602082028036833701905050905060006d9751601588221534f0a65e068bc09050808260008151811061131557611315613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006dbfbadf38e9c461000510294abe209050808260018151811061135d5761135d613d63565b6001600160701b0392909216602092830291909101820152830191909152506040805160028082526060820190925260009181602001602082028036833701905050905060006dce91ecb822dc8beadcc4508a5e36905080826000815181106113c8576113c8613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006d0da3c623f787206aa8b5417491ad9050808260018151811061141057611410613d63565b6001600160701b03929092166020928302919091018201526040848101939093528251600480825260a0820190945260009390925090820160808036833701905050905060006de9146141693db5361b2d064813269050808260008151811061147b5761147b613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006d64c00ec8d661be9254108ac20a74905080826001815181106114c3576114c3613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006d44c1493300b755bab6568d195da89050808260028151811061150b5761150b613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006db4faa7cdadd426049a13dda926339050808260038151811061155357611553613d63565b6001600160701b0392909216602092830291909101909101525060608083019190915282015260006080820152604082015261158d6135ae565b680cd7ca5805dc4b06af60b81b81526115a46135f0565b600181526040805160608101909152603c808252600091906148e660208301396020830152506115d2613624565b661d742fe924cfab198152604080516060808201835281830152653b2d6c2dba1360d11b8152600160208083019190915282516080810190935260528084529192600092909161465d908301396040838101919091526020848101939093528051606080820183528152600081850181815282840182815284518086018652600a8152689adede418753e13f3560b71b97810197909752958352527f16ff9dabb1d50022b4bf8cfcf46fab2d80c77754ea646c58035f236436f93516909352830191909152506116a061369a565b6c4653d03143e124395e314940b481526116b86136b3565b6116c06136e0565b6116c8613707565b7f6fb989260c92e8bc966195c04f7e2fe9d9875833b429350acc0e5c00000000008152815260408051606081019091526025808252600091906146af6020830139602083015250611717613725565b60008152731b139e7d36fdadbcc7df8c75adbb6ffa292cef456020820152730f5c24cfced9554fd235f87285c4c5cc47a5b418604082015272da6347a2a1277521bd00823c4ddcd703aeb8156060820152611770613751565b73f5e8e208b26d7a51957f530f4764bf9894f58b54815273eed761fa1dcb2eaf8f93628fae92acde6c1744786020808301919091526080830191909152604083019190915260016060808401919091529183528301919091528201526117d4613707565b7f7225a3846e77a05674dcfd69efa3437df1171f5ad40ee2d4ff13d1b47ff8c2008152608082810191909152604083019190915260016060830181905290820152602082015261182261376f565b6000604051806060016040528060278152602001614894602791398252506000602082015261184f6137a3565b7a0d38c118dd25a5c38c5555e02649d877c7426bb80a665937019578815275aa324338c7572bf832363b06c4dbdc46a53eb666646160501b60208201526118946137be565b60006040518060600160405280602881526020016141dd60289139825250600060208201526118c16137da565b60018152600060208083018290526040808401839052848101939093526929ce8fd139aa661510df60b11b60608086019190915285840194909452825180840184526012815271026b7b79061d4f84fcd4037f84fcd4037b7960751b81830152938501939093527ff9f34cc5c85b184dab5f73987a5e56267ce678c94d489c7f5395f6c689f40000608085015284820193909352805160a08101909152606c8082529091613d7a908301396060830152507341aba07653cf095ef00019df15cb694f8a3f496c608082015260408201526119996137f8565b6040805160018082528183019092526000916020808301908036833701905050905060006daca24db860ed2a764031add3738f905080826000815181106119e2576119e2613d63565b6001600160701b03929092166020928302919091019091015250815260408051600180825281830190925260009181602001602082028036833701905050905060006ddcc9f1064e5588c1d8f98575346c90508082600081518110611a4957611a49613d63565b6001600160701b0392909216602092830291909101820152830191909152506040805160028082526060820190925260009181602001602082028036833701905050905060006d42c1efd695fe8e8e1d46421c382b90508082600081518110611ab457611ab4613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006d51726ad2ddf3daf20d35cd4e1c1390508082600181518110611afc57611afc613d63565b6001600160701b039290921660209283029190910182015260408481019390935282516000808252918101909352606080850193909352848301939093525060808301919091528201528152611b50613581565b611b586135ae565b681a311e5d7231c386cf60bb1b8152611b6f6135f0565b60008082526040805160608101909152602e8082526143536020830139602083015250611b9a613624565b6646c63a8436c03a815260408051606080820183528183015265247bf199002760d21b81526001602080830191909152825160a0810190935260668084529192600092909161425e908301396040838101919091526020848101939093528051606080820183528152600081850181815282840191825283518085018552600a8152689adede418753e13f3560b71b9681019690965294825260019094527fb2f175d4e86e55c5b49f8ff4e1edb93b04f86c0b7db71563395f5822424aa33e90935283019190915250611c6b61369a565b6c3eef8523b6558188f7059b3144198152611c846136b3565b611c8c6136e0565b611c94613707565b7f1aab4ed8883174b501f54aeb7d0d4602c93cb428b2178d4b7e5d2a00000000008152815260408051808201909152601c81527f4d6f6f20c3a9f09f9a80206ff09f9a80206f6f2020f09f9a804d4d6f00000000602082810191909152820152611cfc613725565b6001815273b8c72e057bd699fb60e3d241113afb68cab74f7c602082015273c28a699999eee79100db2911ffb44af237efa261604082015273be24517fe6547ce354b911a96221e3b0fc411a4f6060820152611d56613751565b734018a5b4f4eb4efaf80f60e664c20b4619dbe3b781527343af520cf1e78a3e5edd906cf096c59dab98701f602080830191909152608083019190915260408301919091526001606080840191909152918352830191909152820152611dba613707565b7f9362b4b7041fcc5a3082d548b8f5fbc9b6fda237d07a6bf8df941f7e15bbb40081526080828101919091526040830191909152600060608301526001908201526020820152611e0861376f565b60006040518060600160405280603e8152602001614381603e913982525060006020820152611e356137a3565b7a1876bb613124927972e7213e5da5b2129d9dc12bd5da150a4f41548152751b94a8cd55030e660cf3cb95403a50479fb8c0a88fc160531b6020820152611e7a6137be565b60006040518060600160405280603a815260200161440d603a913982525060006020820152611ea76137da565b600180825260208083019190915260006040808401919091528381019290925269234b1496f5f185ccab5b60b21b6060808501919091528483019390935281518083018352601a81527f4d6f6f20c3a9f09f9a80f09f9a804dc3a96f6f4d4d6fc3a9c3a900000000000081830152848401527f879267f6080428c1cf36b306026357777a4a64c5f4ce84d16a58ec1b164a00006080808601919091528583019490945281518083018352601781527f4d6f6f20c3a9f09f9a806fc3a9f09f9a80f09f9a806f4d0000000000000000009181019190915291840191909152734a6edfa108dcd4deb780d3e2ee72c8abd783080791830191909152820152611fab6137f8565b604080516003808252608082019092526000916020820160608036833701905050905060006dd68dc3dde24f3848059dcb9dac7190508082600081518110611ff557611ff5613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006d4acf96d6fd5964a893881dd2bd769050808260018151811061203d5761203d613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006d9a50fa2e93f8d91e8bcb831fd93e9050808260028151811061208557612085613d63565b6001600160701b03929092166020928302919091019091015250815260408051600480825260a0820190925260009181602001602082028036833701905050905060006d09b9242920dcf58fa812db906089905080826000815181106120ed576120ed613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006d196ae604cc1e1c1f7760860de8139050808260018151811061213557612135613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006d9a330732dd5ed588d8bf1a43f3929050808260028151811061217d5761217d613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006de746ca336905d7ba48f194557812905080826003815181106121c5576121c5613d63565b6001600160701b03929092166020928302919091018201528301919091525060408051600480825260a0820190925260009181602001602082028036833701905050905060006d4e9edcb0bd5b99f52c39586aef8f9050808260008151811061223057612230613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006dd9120bfb63461ff1bbbb19ae87909050808260018151811061227857612278613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006d700a24d911359bd234abf1bdf085905080826002815181106122c0576122c0613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006db6197182958b55f52c4a461bd5ab9050808260038151811061230857612308613d63565b6001600160701b039290921660209283029190910190910152506040808301919091528051600180825281830190925260009181602001602082028036833701905050905060006def4da2957f4ccf2fe207d28b26799050808260008151811061237457612374613d63565b6001600160701b039290921660209283029190910190910152506060808301919091528201526001608082015281526123ab6135ae565b671f6c2defcddec8e960ba1b81526123c16135f0565b6001815260408051808201909152601d81527f4d6f6f20c3a9f09f9a80c3a96f204d4d6f4d6f6f6f4d6fc3a96f20c3a9000000602080830191909152820152612408613624565b66428837439f10418152604080516060808201835281830181815265239ec23186a360d01b83526001602080850191909152845180860186528181527f4d6f6f20c3a9f09f9a80c3a9c3a9c3a9f09f9a80f09f9a806ff09f9a80c3a920818301529091528085019290925282518082018452818152600081840181905281850181905284519283019094526031808352909392613e6190830139825250600060208201527ff87a8f808519361c4278b91e7865745edaacbe63b22bf9831c2f886ca93b44ee6040808301919091528201526124e161369a565b6c77f2181e60fc2d2bc6bc9c35a181526124f96136b3565b6125016136e0565b612509613707565b7f7ba786850e3be01d5374e16cb110a5f0b463c1bb6ac95ba396becd00000000008152815260408051606081019091526025808252600091906141b86020830139602083015250612558613725565b60018152739d356c7aa04a105b4634d5df472696fe90ba9e526020820152732a12dc12f44f2b527e503349578337762f01f7cb604082015273c01011e87f0d4a5416aac0aa45d4189123ce07ae60608201526125b2613751565b737f1547a4b5ee668f9ea78adc46531c824d0fd65f8152735ebd5e2ddf1afd70ab20da1f59552d4d6ccf6091602080830191909152608083019190915260408301919091526001606080840191909152918352830191909152820152612616613707565b7f62b0dadd1b47d4900b291e875beb3f173bf1ac7a8701e78e17049242a64a96008152608082810191909152604083019190915260016060830181905290820152602082015261266461376f565b6000604051806080016040528060558152602001613fbc60559139825250600060208201526126916137a3565b7a949499acc9878d079854d2ddaa8cb994cd73fd41b2153728c4d7da815275044673e7e80dbfcfd891d5cbc13240a6e61b2dcc66fb60541b60208201526126d66137be565b60006040518060800160405280605e815260200161452b605e9139825250600060208201526127036137da565b6000808252600160208084019190915260408084018390528481019390935269f99a38066201c0de2dbb60b01b606085015284830193909352815160808101909252605c8083529092614838908301396060808401919091527fa66df1dddd5cacdb8773bed83e82c915556af9cfbb1cd60b9e93ba443cd7000060808085019190915260408086019490945283518085018552601081526f4d6f6f20c3a9f09f9a80f09f9a80c3a960801b6020820152918501919091527372d38d5e263e936b9ec9c5e9095da3fe77a7ac3e90840152508201526127df6137f8565b60408051600280825260608201835260009260208301908036833701905050905060006dbd7aaeeff42f8781ae7d3245f5f69050808260008151811061282757612827613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006dade9b99c9c96a7428a2b28c52c909050808260018151811061286f5761286f613d63565b6001600160701b0392909216602092830291909101909101525081526040805160028082526060820190925260009181602001602082028036833701905050905060006d952de768dfee2aca882015d61864905080826000815181106128d7576128d7613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006dead228233bf60a6e27c1abfa8ac29050808260018151811061291f5761291f613d63565b6001600160701b03929092166020928302919091018201528301919091525060408051600180825281830190925260009181602001602082028036833701905050905060006d6ed9aacb7eb566122e035601964d9050808260008151811061298957612989613d63565b6001600160701b03929092166020928302919091018201526040848101939093528251600081528082019093526060808501939093529184019290925260016080840152830191909152506129dc6135ae565b6816a6a70f37e09a54cf60b91b81526129f36135f0565b60008082526040805160808101909152605a8082526141126020830139602083015250612a1e613624565b664af3303d4f5d881981526040805160608082018352600060208084018290528385018381526520edb88ae26d60d21b855285518087018752600a8152689adede418753e13f3560b71b8184015290528086019390935283518083018552918252818301819052818401819052835160808101909452605380855291939092909190613de690830139825250600160208201527fb138aa49c12a635e2126c57c079d8762f3c25027e0d97ab21e57a6c6c88f4ad5604080830191909152820152612ae661369a565b6c21fb3354716fdd255c3f1a20f28152612afe6136b3565b612b066136e0565b612b0e613707565b7f9cda0d819f4ddcd4476fdf3cb19b4a93f51408ba361c97bcce02be0000000000815281526040805160808101909152604a80825260009190613e926020830139602083015250612b5d613725565b6001815273b1f5923e517207ee2fb4b4bee0ab3d3d19e263ff6020820152733e6a520ea9d8753ce9aaa5f8749fdaabdde23b92604082015273dd4b72b027345beac2cb6315275d601200d78b156060820152612bb7613751565b73319a738ef3fb5aea84681a2ede9544c1d6f1a794815273839183e24c35c4358010dc838c766db13436beee602080830191909152608083019190915260408301919091526001606080840191909152918352830191909152820152612c1b613707565b7f68af47ae2029cc39b842f7c217b686583617e6040b57bcf2e4e38a24212a540081526080828101919091526040830191909152600160608301819052908201526020820152612c6961376f565b60006040518060600160405280603a8152602001613f82603a913982525060016020820152612c966137a3565b7a3d5d8a2bfce933d2e746813506090f0194da23fe0d25606b311c89815275334780780af9905eee153d4581f16ae52561a3c5042160501b6020820152612cdb6137be565b60408051808201909152600a8152689adede418753e13f3560b71b602080830191909152908252600190820152612d106137da565b60018082526000602080840182905260408085019390935284830193909352690feeff5cf36687bdab7360b31b6060808601919091528583019490945281518083018352600a8152689adede418753e13f3560b71b81850152858501527f70998e30f82208a475df2e16226cb2c0dc2cdde5d542841a4e6af29c39cc000060808601528582019490945280519283018152808352906143139083013960608301525073729328d745d7280a97aabb91b2553f06d3c85a9e60808201526040820152612dd96137f8565b6040805160018082528183019092526000916020808301908036833701905050905060006d7b6070a262dcfd08377b58214c3490508082600081518110612e2257612e22613d63565b6001600160701b03929092166020928302919091019091015250815260408051600180825281830190925260009181602001602082028036833701905050905060006d279d5f038b08b726ebc86ab04aac90508082600081518110612e8957612e89613d63565b6001600160701b03929092166020928302919091018201528301919091525060408051600180825281830190925260009181602001602082028036833701905050905060006d6115589314376bbc62d12229895590508082600081518110612ef357612ef3613d63565b6001600160701b039290921660209283029190910182015260408481019390935282516002808252606082018552600094919350918301908036833701905050905060006db65fdf6e52c34a4bec764d38598790508082600081518110612f5c57612f5c613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006dcc785f5b1dd72eec12a72382803b90508082600181518110612fa457612fa4613d63565b6001600160701b03929092166020928302919091019091015250606080830191909152820152600060808201526040820152612fde6135ae565b68351bf2478080e8793f60ba1b8152612ff56135f0565b600181526040805160808101909152604d808252600091906144476020830139602083015250613023613624565b6662958f69216ce4815260408051606080820183526000602080840182905283850183905265e932414f072760d01b84528451928301909452602a808352929390929061416c90830139604080840191909152602080850193909352805160608082018352815260009381018490529081019290925250600060405180608001604052806059815260200161420560599139825250600160208201527f73e00c63a9eea27b43c7754f1611980edc86af7f2d1a6842463236949bb9837a6040808301919091528201526130f461369a565b6c15767a582e082d8b3de648540c815261310c6136b3565b6131146136e0565b61311c613707565b7f3d2b2a31720f2131dfa00e8ee3315ede5f95edd33a9018ba528d7e0000000000815281526040805180820190915260148152734d6f6f20c3a9f09f9a806ff09f9a806f6f20204d60601b60208281019190915282015261317b613725565b6001815273fea5a295aa12fbd82bae28fed0e00eafba5d4d3560208201527321d389e6640268287eb7838576dcb3277bad6e1360408201527327b65f3338d28cc7f091022c3d1bcc3ae83b13a460608201526131d5613751565b735beb62106abda3511dad7a32556a7eeade46b0e0815273140278b84f0cd62899abfd20d159e03460490566602080830191909152608083019190915260408301919091526001606080840191909152918352830191909152820152613239613707565b7f330e49ed08cc23605e70513cd47b7ecfd406a59bd6b4c8abec201f64f41482008152608082810191909152604083019190915260006060830181905290820152602082015261328761376f565b60006040518060800160405280605181526020016147e760519139825250600160208201526132b46137a3565b7ae78fc2df20febd331f2f845acf60009a63596675aa5dbe6b0e78a48152755058973cd7cb2d84fe12a3c198b1842a0bbe9ddb0ddd60501b60208201526132f96137be565b60006040518060800160405280604e81526020016143bf604e9139825250600160208201526133266137da565b6000808252600160208084018290526040808501929092528482019390935269666eb548718038646c4960b11b6060850152848101939093528251608081019093526050808452909291613f32908301396060830152507febf347d511750a76c97ec85df0064defb2112a459ce2682f4de3ee108d7400006080808301919091526040808401929092528151908101909152604f808252600091906142c46020830139606083015250732ddc2b97fb0f70b538412ed393adcdc88edd4c48608082015260408201526133f66137f8565b60408051600280825260608201835260009260208301908036833701905050905060006d0877c3a9c1ab582dfb7b8225a0859050808260008151811061343e5761343e613d63565b60200260200101906001600160701b031690816001600160701b0316815250505060006dd72fd802e650189420f0c2ff591b9050808260018151811061348657613486613d63565b6001600160701b03929092166020928302919091019091015250815260408051600180825281830190925260009181602001602082028036833701905050905060006da417353a7da761dd39dedcfa2fd4905080826000815181106134ed576134ed613d63565b6001600160701b03929092166020928302919091018201528381019290925250604080516000808252818401835282850191909152815181815280840190925260608085019290925284820193909352608084019290925290830191909152820152919050565b60405180604001604052806002905b61356b613581565b8152602001906001900390816135635790505090565b60405180608001604052806004905b6135986135ae565b8152602001906001900390816135905790505090565b6040805160a0810190915260008152602081016135c96135f0565b81526020016135d661376f565b81526020016135e36137f8565b8152600060209091015290565b6040805160a0810182526000815260606020820152908101613610613624565b815260006020820181905260409091015290565b6040518060a00160405280600060060b815260200161365b6040805160608082018352600080835260208301529181019190915290565b8152604080516060808201835281526000602082810182905292820152910190815260200161368861369a565b8152602001613695613707565b905290565b60405180604001604052806000600c0b81526020016136955b60405180602001604052806001905b6136ca6136e0565b8152602001906001900390816136c25790505090565b60405180608001604052806136f3613707565b8152602001606081526020016135e3613725565b60405180602001604052806001906020820280368337509192915050565b6040805160a0810182526000808252602082018190529181018290526060810191909152608081016136955b60405180604001604052806002906020820280368337509192915050565b6040805160a081018252606081526000602082015290810161378f6137a3565b815260606020820152600060409091015290565b6040805160a0810182526000808252602082015290810161378f5b6040805160808101825260608152600060208201529081016135e35b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004905b60608152602001906001900390816138075790505090565b6000815180845260005b8181101561384557602081850181015186830182015201613829565b81811115613857576000602083870101525b50601f01601f19169290920160200192915050565b6000815160608452613881606085018261381f565b9050602083015115156020850152604083015160408501528091505092915050565b600060408084018351600c0b85526020808501518382880152828390506060935083880160005b60018082106138d957506139b8565b8a8303603f1901845284518051610120908560005b8581101561391157825164ffffffffff19168252918a0191908a019085016138ee565b5050508782015181898701526139298287018261381f565b838c015180511515888e01528a8101516001600160a01b039081168d8a0152818e015181166080808b01919091528d830151821660a08b01529091015191935090915060c087019060005b600281101561399257835182168352928b0192918b01918601613974565b5050505090880151151561010094909401939093525092840192918401916001016138ca565b5098975050505050505050565b8060005b60018110156139ec57815160ff19168452602093840193909101906001016139c9565b50505050565b6000815160a08452613a0760a085018261381f565b90506020808401511515818601526040840151858303604087015260018060d81b03815116835269ffffffffffffffffffff19828201511682840152604081015160a06040850152805160c060a0860152613a6661016086018261381f565b905083820151151560c0860152604082015160e0860160005b6003811015613a9e578251151582529186019190860190600101613a7f565b50505060608201516001600160b01b031981166101408701529350606083015193508481036060860152613ad2818561381f565b9350505060808101519050613aee608084018261ffff19169052565b50606084015191508481036060860152613b08818361381f565b9150506080830151613b2560808601826001600160a01b03169052565b509392505050565b60008260808101836000805b6004811015613b97578484038852825180518086526020918201918087019190855b82811015613b805784516001600160701b031684529381019392810192600101613b5b565b509a8b019a91965050939093019250600101613b39565b50919695505050505050565b6020808252600090606083820181850186855b6002811015613d5657878303601f190184528151836080810160005b6004811015613d41578682038352835168ffffffffffffffffff60b81b81511683528a81015160a08c8501528051151560a08501528b81015160a060c0860152613c2061014086018261381f565b90506040820151609f198683030160e0870152805160060b82528d81015160a08f84015265ffffffffffff60d01b81511660a08401528e810151151560c0840152604081015190508d60e0840152613c7c61010084018261381f565b905060408201518382036040850152613c95828261386c565b9150508d8201518382038f850152613cad82826138a3565b91505060808201519150613cc460808401836139c5565b8d840151801515610100890152608090940151801515610120890152939250604085015193508681036040880152613cfc81856139f2565b93505050508a8201518482038c860152613d168282613b2d565b91505060808201519150613d2e608085018315159052565b948b0194938b0193925050600101613bd2565b50958801959450505090850190600101613bb6565b5090979650505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a804d4d6fc3a96ff09f9a806ff09f9a806f6f206f6fc3a96fc3a9f09f9a804df09f9a806f6f4d4d4d20206f4dc3a96fc3a96f6f6ff09f9a80206f6ff09f9a80f09f9a806ff09f9a80f09f9a806f6fc3a94dc3a9f09f9a806f20c3a9f09f9a806f6f6f4d4d6f6f20c3a9f09f9a804dc3a94d6f6f6ff09f9a80c3a96f20206f4df09f9a804dc3a94d4d4df09f9a8020f09f9a80c3a96fc3a9206ff09f9a8020f09f9a80c3a96f6f204df09f9a80c3a9206f6f20f09f9a804d6f6f20c3a9f09f9a80c3a94d4d6ff09f9a806f4d6ff09f9a80c3a9f09f9a80f09f9a80f09f9a804d6f6f20c3a9f09f9a804dc3a96f6f6f6f4d6f206ff09f9a802020206fc3a9204df09f9a806f20f09f9a80f09f9a80c3a94d6f6f20c3a9f09f9a80f09f9a80c3a96f4dc3a9206fc3a96f6f206f4dc3a96f6f6f6ff09f9a80c3a9f09f9a80f09f9a8020f09f9a80f09f9a804d6f6fc3a9f09f9a806f6fc3a96fc3a94d6f6f20c3a9f09f9a804d2020f09f9a806f20f09f9a804df09f9a804dc3a920c3a96f6f206f6f2020f09f9a80f09f9a80c3a9f09f9a804d6f6f6f6f6fc3a96f4df09f9a806f6f6ff09f9a806f4d4d6f206f6f4d6f204d6f6f20c3a9f09f9a8020c3a94dc3a9c3a94df09f9a806fc3a94d6fc3a920c3a94d6f6f4d6ff09f9a806f6f6f206fc3a94d6f6f6f206f206f20f09f9a80f09f9a8020c3a96fc3a96f6f6f20c3a9c3a94d6f6f20c3a9f09f9a80c3a9c3a96f20c3a94d6f6ff09f9a806f6f6f2020f09f9a806f6fc3a9c3a96f204d4d20f09f9a804d4df09f9a804d20204d6f6f20c3a9f09f9a80c3a96f6f4d4d20206f6f204dc3a94df09f9a80f09f9a806f20f09f9a806f6f6ff09f9a804d206f6f6f4d6fc3a94dc3a94d6f20f09f9a806f6f6f6ff09f9a80f09f9a80c3a96f20c3a9c3a94d6f6f20c3a9f09f9a806ff09f9a80c3a9204d6f6f4d6ff09f9a80f09f9a80f09f9a80206f6ff09f9a80c3a9c3a9206f6f206f206fc3a94df09f9a806f6ff09f9a804d204d4dc3a96ff09f9a806fc3a9f09f9a804d6f6f20c3a9f09f9a806f6fc3a94d6f6fc3a9206f206f6f20206f4dc3a96f4d206f4dc3a920f09f9a80f09f9a80c3a96ff09f9a806f4d4df09f9a806f204df09f9a80f09f9a804d6f6f20c3a9f09f9a80f09f9a80204d6f6ff09f9a80f09f9a806f6f4d6f4df09f9a80c3a94d6f6f6ff09f9a802020206f204d206f2020c3a96f206ff09f9a804dc3a9f09f9a80206f6f4d4d204d6f6fc3a9c3a96ff09f9a80f09f9a80c3a96ff09f9a80c3a94d6f6f20c3a9f09f9a806ff09f9a804dc3a9c3a96fc3a94d20f09f9a806f20c3a96fc3a9f09f9a804dc3a9f09f9a8020206ff09f9a80206ff09f9a80f09f9a80c3a96f4dc3a96f204d4d6f6f4d20c3a96f4df09f9a80c3a9c3a94d6f6f20c3a9f09f9a804df09f9a80c3a96ff09f9a80206fc3a94d6f6f6f20204d206f20c3a96f6f6f4d4d6f6f20c3a9f09f9a80f09f9a80f09f9a8020f09f9a80c3a9f09f9a804d6f6f20204d6f6f20c3a9f09f9a80f09f9a80c3a96fc3a9f09f9a80c3a9206ff09f9a80f09f9a804d204d6f6f20c3a9f09f9a804dc3a9204dc3a9c3a9c3a96f6f4df09f9a802020c3a96f206ff09f9a806f4d6f6f20c3a9f09f9a806f206fc3a96f6f6f6fc3a9c3a94d6ff09f9a80c3a96fc3a94d6f20f09f9a80f09f9a80c3a9f09f9a806f6ff09f9a80206f4dc3a920f09f9a802020f09f9a806f4d20f09f9a80206f4d6f6f20c3a9204d6f6f20c3a9f09f9a80c3a94df09f9a80f09f9a80204d6f206ff09f9a804dc3a9c3a96fc3a9f09f9a8020f09f9a80c3a920f09f9a80206f6f6f6f6fc3a96ff09f9a804df09f9a80c3a96f6fc3a96f4d20206f4d6f4dc3a94d6f6ff09f9a804d6f20f09f9a804d6f6f20c3a9f09f9a80c3a9f09f9a806f4df09f9a80f09f9a806f4dc3a96f20f09f9a806ff09f9a80204d4d6f6f206f6f4d4d4d6f20f09f9a80c3a94d6fc3a96f6f4d6f4d20f09f9a8020f09f9a804d6f6f20c3a9f09f9a8020c3a920c3a96f206f6f20c3a96fc3a96ff09f9a80206f206fc3a94d4d6fc3a96ff09f9a804d4df09f9a804dc3a96f6f6f6f6f4d4d4d4d6f6f20c3a9f09f9a80204d204d6ff09f9a804d4d6fc3a9f09f9a80f09f9a802020c3a9f09f9a80c3a96f4d4d6f4d6f6f20c3a9f09f9a8020c3a9f09f9a806f204d6f206f6f6ff09f9a80206f6f20c3a96f6f20c3a94d20206f6f206f4d6f6f6f6fc3a96f20c3a96f6f206f4d6f6f20c3a9f09f9a804d4dc3a920f09f9a806f6f6fc3a96f206f6f6ff09f9a8020206f6f4dc3a96f206f6f20f09f9a804d206f6f4df09f9a80f09f9a80c3a9c3a9c3a9c3a94d4d4dc3a96f4d4d4d6f6f20c3a9f09f9a80c3a94d6ff09f9a806f20f09f9a80c3a96f6fc3a920f09f9a8020f09f9a80c3a9f09f9a804dc3a96fc3a94d206f6f4d4d4d6f6f20c3a9f09f9a80f09f9a806f6f204d6f6f20f09f9a806f20c3a9c3a9c3a9f09f9a806ff09f9a804df09f9a806ff09f9a804df09f9a804d6ff09f9a806f4d204df09f9a804d6f6f204d4d4d6f6f20c3a9f09f9a806f6f6f206f20c3a96fc3a92020c3a9c3a9c3a96fc3a92020206f6f6f6fc3a9204d4d6ff09f9a804d6f6f4d6f6f20c3a9f09f9a80f09f9a804d4d4d4d6f20204d20c3a96f4dc3a94d204df09f9a8020206fc3a9f09f9a80f09f9a80f09f9a806fc3a96f20206ff09f9a80c3a96f20c3a9f09f9a80c3a96fc3a94d6f4dc3a9c3a9f09f9a806ff09f9a804d206f6f4d6f6f20c3a9f09f9a806f206fc3a9206fc3a9f09f9a80c3a96ff09f9a8020f09f9a80c3a96f6ff09f9a804d6f4d206fc3a9f09f9a8020c3a96f204df09f9a80c3a9c3a9204dc3a96ff09f9a806f6f6ff09f9a806f6ff09f9a80c3a96f6f4d6f6f20c3a9f09f9a806f20c3a9c3a9c3a96fc3a94d20204d4dc3a96ff09f9a80206ff09f9a806f6f4d6fc3a920f09f9a80206f6fc3a94d6f204d6f206ff09f9a806f20c3a96fc3a96f6f6fc3a96f6f6f6f6f4dc3a9204d6f6f20c3a9f09f9a804d4df09f9a804d6f4df09f9a80204dc3a94df09f9a806f4d206f6fc3a9c3a94d6fc3a920206f6f4d206f6f20c3a96f6f4d6fc3a96f204d6f6f20c3a9f09f9a806ff09f9a80204df09f9a804dc3a9f09f9a806f6f204d20f09f9a806f6f6f6fc3a96f6f6f4d6fc3a96f4dc3a94df09f9a806f204d6f6f20c3a9f09f9a8020f09f9a80206f4df09f9a804df09f9a806f6ff09f9a804d6f6f6f2020202020c3a96f204d6ff09f9a804d6fc3a9c3a920c3a920204df09f9a80f09f9a8020206f6f6f6ff09f9a804d6f6f20c3a9f09f9a8020c3a9f09f9a80f09f9a806fc3a94df09f9a804d204d6f6f204d6f4d6f6f20c3a9f09f9a804dc3a92020f09f9a804df09f9a806f6f6f6ff09f9a80204df09f9a80206f6f20c3a94d6f6f20c3a9f09f9a804d6f6f4df09f9a80f09f9a806f6f4d4df09f9a806f6fc3a920c3a92020206f6ff09f9a80c3a96ff09f9a80c3a96f206f6f6ff09f9a804d20c3a9f09f9a806fc3a9206f206f4df09f9a804df09f9a804dc3a96f6f4d6f6f20c3a9f09f9a80c3a9f09f9a80c3a9c3a9f09f9a80f09f9a80c3a96f6ff09f9a804d6f20c3a9206ff09f9a80206ff09f9a80f09f9a80f09f9a80f09f9a806fc3a9c3a9f09f9a80204d204df09f9a804d6ff09f9a804d4d6f6f6f6ff09f9a806fc3a9f09f9a80f09f9a80f09f9a80f09f9a80f09f9a80f09f9a80c3a9c3a9f09f9a80f09f9a804d6f6f20c3a9f09f9a80206f4d206f4d204dc3a9c3a94d4d6f6f6f4d6f6f6fc3a9c3a94d2020206f6f6f4d2020204d20c3a94d6f6ff09f9a80c3a96f4d6ff09f9a8020f09f9a806ff09f9a804df09f9a804d6f6f20c3a9f09f9a80f09f9a804dc3a94d6f6fc3a96f206ff09f9a804df09f9a80c3a94d6f204d6f4d4d6ff09f9a804df09f9a806ff09f9a80c3a96f6f20f09f9a806f6f4d6f4df09f9a80f09f9a806fc3a94df09f9a8020c3a9204d6f6f20c3a9f09f9a8020c3a920c3a96fc3a96f4d6fc3a9c3a9f09f9a80c3a9c3a9c3a96f20204d6f6f20c3a9f09f9a806fc3a96f6f6fc3a96f4d6ff09f9a80206f6f20c3a94d4d20f09f9a80f09f9a806f4d6f6f20c3a9f09f9a804dc3a96f6ff09f9a804df09f9a806fc3a96fc3a94df09f9a806ff09f9a804df09f9a80c3a96fc3a96fc3a9c3a9204d4d6f6fa26469706673582212206f93603547179744c5638b5701ab59c2ee9d475270b84c853cf9f9a44da293e164736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_4dc1782d {\n bytes6 s_0;\n bool s_1;\n string s_2;\n }\n\n struct S_75b95287 {\n string s_0;\n bool s_1;\n int256 s_2;\n }\n\n struct S_59e4d3e3 {\n bool s_0;\n address s_1;\n address s_2;\n address s_3;\n address[2] s_4;\n }\n\n struct S_b0e02723 {\n bytes27[1] s_0;\n string s_1;\n S_59e4d3e3 s_2;\n bool s_3;\n }\n\n struct S_8a864324 {\n int104 s_0;\n S_b0e02723[1] s_1;\n }\n\n struct S_6e8ed41f {\n int56 s_0;\n S_4dc1782d s_1;\n S_75b95287 s_2;\n S_8a864324 s_3;\n bytes31[1] s_4;\n }\n\n struct S_4cbd9404 {\n bool s_0;\n string s_1;\n S_6e8ed41f s_2;\n bool s_3;\n bool s_4;\n }\n\n struct S_8f5c69d2 {\n string s_0;\n bool s_1;\n bool[3] s_2;\n bytes10 s_3;\n }\n\n struct S_e1fe1757 {\n uint216 s_0;\n bytes22 s_1;\n S_8f5c69d2 s_2;\n string s_3;\n bytes30 s_4;\n }\n\n struct S_4f245c87 {\n string s_0;\n bool s_1;\n S_e1fe1757 s_2;\n string s_3;\n address s_4;\n }\n\n struct S_cacfb88b {\n bytes9 s_0;\n S_4cbd9404 s_1;\n S_4f245c87 s_2;\n uint112[][4] s_3;\n bool s_4;\n }\n\n function test () public pure returns (S_cacfb88b[4][2] memory) {\n S_cacfb88b[4][2] memory r;\n {\n S_cacfb88b[4] memory r_0;\n {\n S_cacfb88b memory r_0_0;\n {\n bytes9 r_0_0_0 = bytes9(0x38ff1d4bd09084daac);\n r_0_0.s_0 = r_0_0_0;\n }\n {\n S_4cbd9404 memory r_0_0_1;\n {\n bool r_0_0_1_0 = true;\n r_0_0_1.s_0 = r_0_0_1_0;\n }\n {\n string memory r_0_0_1_1 = unicode\"Moo é🚀\";\n r_0_0_1.s_1 = r_0_0_1_1;\n }\n {\n S_6e8ed41f memory r_0_0_1_2;\n {\n int56 r_0_0_1_2_0 = -23752578349029843;\n r_0_0_1_2.s_0 = r_0_0_1_2_0;\n }\n {\n S_4dc1782d memory r_0_0_1_2_1;\n {\n bytes6 r_0_0_1_2_1_0 = bytes6(0xa3041454f737);\n r_0_0_1_2_1.s_0 = r_0_0_1_2_1_0;\n }\n {\n bool r_0_0_1_2_1_1 = false;\n r_0_0_1_2_1.s_1 = r_0_0_1_2_1_1;\n }\n {\n string memory r_0_0_1_2_1_2 = unicode\"Moo é🚀\";\n r_0_0_1_2_1.s_2 = r_0_0_1_2_1_2;\n }\n r_0_0_1_2.s_1 = r_0_0_1_2_1;\n }\n {\n S_75b95287 memory r_0_0_1_2_2;\n {\n string memory r_0_0_1_2_2_0 = unicode\"Moo é🚀🚀🚀 🚀é🚀Moo \";\n r_0_0_1_2_2.s_0 = r_0_0_1_2_2_0;\n }\n {\n bool r_0_0_1_2_2_1 = false;\n r_0_0_1_2_2.s_1 = r_0_0_1_2_2_1;\n }\n {\n int r_0_0_1_2_2_2 = -38425255964902292425626891154472153534872251544077286003091327836970394458335;\n r_0_0_1_2_2.s_2 = r_0_0_1_2_2_2;\n }\n r_0_0_1_2.s_2 = r_0_0_1_2_2;\n }\n {\n S_8a864324 memory r_0_0_1_2_3;\n {\n int104 r_0_0_1_2_3_0 = -7117633924389681105262242214326;\n r_0_0_1_2_3.s_0 = r_0_0_1_2_3_0;\n }\n {\n S_b0e02723[1] memory r_0_0_1_2_3_1;\n {\n S_b0e02723 memory r_0_0_1_2_3_1_0;\n {\n bytes27[1] memory r_0_0_1_2_3_1_0_0;\n {\n bytes27 r_0_0_1_2_3_1_0_0_0 = bytes27(0xafc32882a67fb6e2a12ef12e5593e8f0fee4476e3cb861b902a2ff);\n r_0_0_1_2_3_1_0_0[0] = r_0_0_1_2_3_1_0_0_0;\n }\n r_0_0_1_2_3_1_0.s_0 = r_0_0_1_2_3_1_0_0;\n }\n {\n string memory r_0_0_1_2_3_1_0_1 = unicode\"Moo é🚀o éééoéM MMéo🚀 o🚀ooMoé 🚀 ooéMo Mo o🚀o éoéoooéoooooMé \";\n r_0_0_1_2_3_1_0.s_1 = r_0_0_1_2_3_1_0_1;\n }\n {\n S_59e4d3e3 memory r_0_0_1_2_3_1_0_2;\n {\n bool r_0_0_1_2_3_1_0_2_0 = true;\n r_0_0_1_2_3_1_0_2.s_0 = r_0_0_1_2_3_1_0_2_0;\n }\n {\n address r_0_0_1_2_3_1_0_2_1 = 0x1F3d32b69454A0070322B60eC7426d866026C3E1;\n r_0_0_1_2_3_1_0_2.s_1 = r_0_0_1_2_3_1_0_2_1;\n }\n {\n address r_0_0_1_2_3_1_0_2_2 = 0x5a81cc72331fD53bfc70072ad9e17efAa54d15f8;\n r_0_0_1_2_3_1_0_2.s_2 = r_0_0_1_2_3_1_0_2_2;\n }\n {\n address r_0_0_1_2_3_1_0_2_3 = 0x6D23544ED1963A7626Db178130b813Db9989A5F1;\n r_0_0_1_2_3_1_0_2.s_3 = r_0_0_1_2_3_1_0_2_3;\n }\n {\n address[2] memory r_0_0_1_2_3_1_0_2_4;\n {\n address r_0_0_1_2_3_1_0_2_4_0 = 0x03DCCB8F62d73B34F5b5e6547dA3996382bf95e3;\n r_0_0_1_2_3_1_0_2_4[0] = r_0_0_1_2_3_1_0_2_4_0;\n }\n {\n address r_0_0_1_2_3_1_0_2_4_1 = 0x80E3a24161B435412256C4C6B7e555E1FE7674A7;\n r_0_0_1_2_3_1_0_2_4[1] = r_0_0_1_2_3_1_0_2_4_1;\n }\n r_0_0_1_2_3_1_0_2.s_4 = r_0_0_1_2_3_1_0_2_4;\n }\n r_0_0_1_2_3_1_0.s_2 = r_0_0_1_2_3_1_0_2;\n }\n {\n bool r_0_0_1_2_3_1_0_3 = true;\n r_0_0_1_2_3_1_0.s_3 = r_0_0_1_2_3_1_0_3;\n }\n r_0_0_1_2_3_1[0] = r_0_0_1_2_3_1_0;\n }\n r_0_0_1_2_3.s_1 = r_0_0_1_2_3_1;\n }\n r_0_0_1_2.s_3 = r_0_0_1_2_3;\n }\n {\n bytes31[1] memory r_0_0_1_2_4;\n {\n bytes31 r_0_0_1_2_4_0 = bytes31(0x3ee006aedc7376ecd84c916ee5223648efda9cdb16ee49a68fbeaa0972d2a5);\n r_0_0_1_2_4[0] = r_0_0_1_2_4_0;\n }\n r_0_0_1_2.s_4 = r_0_0_1_2_4;\n }\n r_0_0_1.s_2 = r_0_0_1_2;\n }\n {\n bool r_0_0_1_3 = false;\n r_0_0_1.s_3 = r_0_0_1_3;\n }\n {\n bool r_0_0_1_4 = false;\n r_0_0_1.s_4 = r_0_0_1_4;\n }\n r_0_0.s_1 = r_0_0_1;\n }\n {\n S_4f245c87 memory r_0_0_2;\n {\n string memory r_0_0_2_0 = unicode\"Moo é🚀MooM🚀🚀ooMM🚀ooé é oo🚀éo🚀éo ooo🚀M é🚀oé o oM🚀M🚀Méoo\";\n r_0_0_2.s_0 = r_0_0_2_0;\n }\n {\n bool r_0_0_2_1 = true;\n r_0_0_2.s_1 = r_0_0_2_1;\n }\n {\n S_e1fe1757 memory r_0_0_2_2;\n {\n uint216 r_0_0_2_2_0 = 72650037408773438030448475368216717356331248262729991183742203537;\n r_0_0_2_2.s_0 = r_0_0_2_2_0;\n }\n {\n bytes22 r_0_0_2_2_1 = bytes22(0x9d36abda1a703a914767eba207083d47f0a764bc0c47);\n r_0_0_2_2.s_1 = r_0_0_2_2_1;\n }\n {\n S_8f5c69d2 memory r_0_0_2_2_2;\n {\n string memory r_0_0_2_2_2_0 = unicode\"Moo é🚀ooo o éoé éééoé ooooé MMo🚀Moo\";\n r_0_0_2_2_2.s_0 = r_0_0_2_2_2_0;\n }\n {\n bool r_0_0_2_2_2_1 = false;\n r_0_0_2_2_2.s_1 = r_0_0_2_2_2_1;\n }\n {\n bool[3] memory r_0_0_2_2_2_2;\n {\n bool r_0_0_2_2_2_2_0 = false;\n r_0_0_2_2_2_2[0] = r_0_0_2_2_2_2_0;\n }\n {\n bool r_0_0_2_2_2_2_1 = true;\n r_0_0_2_2_2_2[1] = r_0_0_2_2_2_2_1;\n }\n {\n bool r_0_0_2_2_2_2_2 = true;\n r_0_0_2_2_2_2[2] = r_0_0_2_2_2_2_2;\n }\n r_0_0_2_2_2.s_2 = r_0_0_2_2_2_2;\n }\n {\n bytes10 r_0_0_2_2_2_3 = bytes10(0x7decc7fe1bccee97d17b);\n r_0_0_2_2_2.s_3 = r_0_0_2_2_2_3;\n }\n r_0_0_2_2.s_2 = r_0_0_2_2_2;\n }\n {\n string memory r_0_0_2_2_3 = unicode\"Moo é🚀\";\n r_0_0_2_2.s_3 = r_0_0_2_2_3;\n }\n {\n bytes30 r_0_0_2_2_4 = bytes30(0x7c194ace6f06432df5a7b6b88d86e9f19b397a1ab0105601fde3c1ab2efc);\n r_0_0_2_2.s_4 = r_0_0_2_2_4;\n }\n r_0_0_2.s_2 = r_0_0_2_2;\n }\n {\n string memory r_0_0_2_3 = unicode\"Moo é🚀ooMMéo o éoééoM\";\n r_0_0_2.s_3 = r_0_0_2_3;\n }\n {\n address r_0_0_2_4 = 0xae3eDD08Bee48aca623c4C39EaEcd9Fe1A6274Ca;\n r_0_0_2.s_4 = r_0_0_2_4;\n }\n r_0_0.s_2 = r_0_0_2;\n }\n {\n uint112[][4] memory r_0_0_3;\n {\n uint112[] memory r_0_0_3_0 = new uint112[](2);\n {\n uint112 r_0_0_3_0_0 = 955372374163780864986492531553834;\n r_0_0_3_0[0] = r_0_0_3_0_0;\n }\n {\n uint112 r_0_0_3_0_1 = 3024758950298724742608742337127557;\n r_0_0_3_0[1] = r_0_0_3_0_1;\n }\n r_0_0_3[0] = r_0_0_3_0;\n }\n {\n uint112[] memory r_0_0_3_1 = new uint112[](1);\n {\n uint112 r_0_0_3_1_0 = 4237546721052470754390151559195610;\n r_0_0_3_1[0] = r_0_0_3_1_0;\n }\n r_0_0_3[1] = r_0_0_3_1;\n }\n {\n uint112[] memory r_0_0_3_2 = new uint112[](1);\n {\n uint112 r_0_0_3_2_0 = 2872211107369508497752428063678622;\n r_0_0_3_2[0] = r_0_0_3_2_0;\n }\n r_0_0_3[2] = r_0_0_3_2;\n }\n {\n uint112[] memory r_0_0_3_3 = new uint112[](2);\n {\n uint112 r_0_0_3_3_0 = 111355774438692695778092565387668;\n r_0_0_3_3[0] = r_0_0_3_3_0;\n }\n {\n uint112 r_0_0_3_3_1 = 2260051501091894501614819150953870;\n r_0_0_3_3[1] = r_0_0_3_3_1;\n }\n r_0_0_3[3] = r_0_0_3_3;\n }\n r_0_0.s_3 = r_0_0_3;\n }\n {\n bool r_0_0_4 = false;\n r_0_0.s_4 = r_0_0_4;\n }\n r_0[0] = r_0_0;\n }\n {\n S_cacfb88b memory r_0_1;\n {\n bytes9 r_0_1_0 = bytes9(0x55906f3ed2d25e1f42);\n r_0_1.s_0 = r_0_1_0;\n }\n {\n S_4cbd9404 memory r_0_1_1;\n {\n bool r_0_1_1_0 = false;\n r_0_1_1.s_0 = r_0_1_1_0;\n }\n {\n string memory r_0_1_1_1 = unicode\"Moo é🚀🚀o oooéoé🚀\";\n r_0_1_1.s_1 = r_0_1_1_1;\n }\n {\n S_6e8ed41f memory r_0_1_1_2;\n {\n int56 r_0_1_1_2_0 = -13588634728638176;\n r_0_1_1_2.s_0 = r_0_1_1_2_0;\n }\n {\n S_4dc1782d memory r_0_1_1_2_1;\n {\n bytes6 r_0_1_1_2_1_0 = bytes6(0x9822b712d015);\n r_0_1_1_2_1.s_0 = r_0_1_1_2_1_0;\n }\n {\n bool r_0_1_1_2_1_1 = true;\n r_0_1_1_2_1.s_1 = r_0_1_1_2_1_1;\n }\n {\n string memory r_0_1_1_2_1_2 = unicode\"Moo é🚀oéoooéoMo🚀 oo éMM 🚀🚀o\";\n r_0_1_1_2_1.s_2 = r_0_1_1_2_1_2;\n }\n r_0_1_1_2.s_1 = r_0_1_1_2_1;\n }\n {\n S_75b95287 memory r_0_1_1_2_2;\n {\n string memory r_0_1_1_2_2_0 = unicode\"Moo é🚀M é M🚀 o oéo\";\n r_0_1_1_2_2.s_0 = r_0_1_1_2_2_0;\n }\n {\n bool r_0_1_1_2_2_1 = false;\n r_0_1_1_2_2.s_1 = r_0_1_1_2_2_1;\n }\n {\n int r_0_1_1_2_2_2 = -1381828108252282559403895635677371886389472450581672233661675869401130495396;\n r_0_1_1_2_2.s_2 = r_0_1_1_2_2_2;\n }\n r_0_1_1_2.s_2 = r_0_1_1_2_2;\n }\n {\n S_8a864324 memory r_0_1_1_2_3;\n {\n int104 r_0_1_1_2_3_0 = -2301286873639017688016524054257;\n r_0_1_1_2_3.s_0 = r_0_1_1_2_3_0;\n }\n {\n S_b0e02723[1] memory r_0_1_1_2_3_1;\n {\n S_b0e02723 memory r_0_1_1_2_3_1_0;\n {\n bytes27[1] memory r_0_1_1_2_3_1_0_0;\n {\n bytes27 r_0_1_1_2_3_1_0_0_0 = bytes27(0xb2768925b357944d0ae111562b62207a3183208c8ab4bd31f69f5e);\n r_0_1_1_2_3_1_0_0[0] = r_0_1_1_2_3_1_0_0_0;\n }\n r_0_1_1_2_3_1_0.s_0 = r_0_1_1_2_3_1_0_0;\n }\n {\n string memory r_0_1_1_2_3_1_0_1 = unicode\"Moo é🚀o🚀 M🚀Mé🚀oo M 🚀ooooéoooMoéoMéM🚀o \";\n r_0_1_1_2_3_1_0.s_1 = r_0_1_1_2_3_1_0_1;\n }\n {\n S_59e4d3e3 memory r_0_1_1_2_3_1_0_2;\n {\n bool r_0_1_1_2_3_1_0_2_0 = false;\n r_0_1_1_2_3_1_0_2.s_0 = r_0_1_1_2_3_1_0_2_0;\n }\n {\n address r_0_1_1_2_3_1_0_2_1 = 0x55aB8C91f89206F1f5E9b782AA29393F20e86937;\n r_0_1_1_2_3_1_0_2.s_1 = r_0_1_1_2_3_1_0_2_1;\n }\n {\n address r_0_1_1_2_3_1_0_2_2 = 0xAbdbF1E9feD389D4A969CED2Fa5F60f4170B74E7;\n r_0_1_1_2_3_1_0_2.s_2 = r_0_1_1_2_3_1_0_2_2;\n }\n {\n address r_0_1_1_2_3_1_0_2_3 = 0xcb5E46bcd1188d4BDC4A5e1252D6ed8b63fEFc50;\n r_0_1_1_2_3_1_0_2.s_3 = r_0_1_1_2_3_1_0_2_3;\n }\n {\n address[2] memory r_0_1_1_2_3_1_0_2_4;\n {\n address r_0_1_1_2_3_1_0_2_4_0 = 0x4DCEe8608f0dFE1Fb8B0f008D2e460Ec5C2Dd4ce;\n r_0_1_1_2_3_1_0_2_4[0] = r_0_1_1_2_3_1_0_2_4_0;\n }\n {\n address r_0_1_1_2_3_1_0_2_4_1 = 0x68CEdfA366D0cC5B894921CD966fDba4dC9fcae1;\n r_0_1_1_2_3_1_0_2_4[1] = r_0_1_1_2_3_1_0_2_4_1;\n }\n r_0_1_1_2_3_1_0_2.s_4 = r_0_1_1_2_3_1_0_2_4;\n }\n r_0_1_1_2_3_1_0.s_2 = r_0_1_1_2_3_1_0_2;\n }\n {\n bool r_0_1_1_2_3_1_0_3 = false;\n r_0_1_1_2_3_1_0.s_3 = r_0_1_1_2_3_1_0_3;\n }\n r_0_1_1_2_3_1[0] = r_0_1_1_2_3_1_0;\n }\n r_0_1_1_2_3.s_1 = r_0_1_1_2_3_1;\n }\n r_0_1_1_2.s_3 = r_0_1_1_2_3;\n }\n {\n bytes31[1] memory r_0_1_1_2_4;\n {\n bytes31 r_0_1_1_2_4_0 = bytes31(0x5556b6b433f517aad338cceb71fa66c0d0ffb00189ae3e905f90b7c9673f33);\n r_0_1_1_2_4[0] = r_0_1_1_2_4_0;\n }\n r_0_1_1_2.s_4 = r_0_1_1_2_4;\n }\n r_0_1_1.s_2 = r_0_1_1_2;\n }\n {\n bool r_0_1_1_3 = true;\n r_0_1_1.s_3 = r_0_1_1_3;\n }\n {\n bool r_0_1_1_4 = true;\n r_0_1_1.s_4 = r_0_1_1_4;\n }\n r_0_1.s_1 = r_0_1_1;\n }\n {\n S_4f245c87 memory r_0_1_2;\n {\n string memory r_0_1_2_0 = unicode\"Moo é🚀🚀MMMMo M éoMéM M🚀 oé🚀🚀🚀oéo o🚀éo é🚀éoéMoMéé🚀o🚀M oo\";\n r_0_1_2.s_0 = r_0_1_2_0;\n }\n {\n bool r_0_1_2_1 = false;\n r_0_1_2.s_1 = r_0_1_2_1;\n }\n {\n S_e1fe1757 memory r_0_1_2_2;\n {\n uint216 r_0_1_2_2_0 = 87276849210015664841785584752947167384195780271625904423032121664;\n r_0_1_2_2.s_0 = r_0_1_2_2_0;\n }\n {\n bytes22 r_0_1_2_2_1 = bytes22(0x79b8620d9fc052a643f3a29332e373ca3f8d021986e3);\n r_0_1_2_2.s_1 = r_0_1_2_2_1;\n }\n {\n S_8f5c69d2 memory r_0_1_2_2_2;\n {\n string memory r_0_1_2_2_2_0 = unicode\"Moo é🚀🚀 Moo🚀🚀ooMoM🚀éMooo🚀 o M o éo o🚀Mé🚀 ooMM Mooééo🚀🚀éo🚀é\";\n r_0_1_2_2_2.s_0 = r_0_1_2_2_2_0;\n }\n {\n bool r_0_1_2_2_2_1 = false;\n r_0_1_2_2_2.s_1 = r_0_1_2_2_2_1;\n }\n {\n bool[3] memory r_0_1_2_2_2_2;\n {\n bool r_0_1_2_2_2_2_0 = true;\n r_0_1_2_2_2_2[0] = r_0_1_2_2_2_2_0;\n }\n {\n bool r_0_1_2_2_2_2_1 = false;\n r_0_1_2_2_2_2[1] = r_0_1_2_2_2_2_1;\n }\n {\n bool r_0_1_2_2_2_2_2 = true;\n r_0_1_2_2_2_2[2] = r_0_1_2_2_2_2_2;\n }\n r_0_1_2_2_2.s_2 = r_0_1_2_2_2_2;\n }\n {\n bytes10 r_0_1_2_2_2_3 = bytes10(0x02f1a6afc51609028dc8);\n r_0_1_2_2_2.s_3 = r_0_1_2_2_2_3;\n }\n r_0_1_2_2.s_2 = r_0_1_2_2_2;\n }\n {\n string memory r_0_1_2_2_3 = unicode\"Moo é🚀M 🚀o 🚀M🚀Mé éoo oo 🚀🚀é🚀MoooooéoM🚀ooo🚀oMMo ooMo \";\n r_0_1_2_2.s_3 = r_0_1_2_2_3;\n }\n {\n bytes30 r_0_1_2_2_4 = bytes30(0x3b291c86abe0818a70a9f010dd7acbf19e1f2bc3f021c0778f610363ad50);\n r_0_1_2_2.s_4 = r_0_1_2_2_4;\n }\n r_0_1_2.s_2 = r_0_1_2_2;\n }\n {\n string memory r_0_1_2_3 = unicode\"Moo é🚀Mé 🚀M🚀oooo🚀 M🚀 oo é\";\n r_0_1_2.s_3 = r_0_1_2_3;\n }\n {\n address r_0_1_2_4 = 0xAd230d50ED982311f04D14A5C9fa475cEBf3624B;\n r_0_1_2.s_4 = r_0_1_2_4;\n }\n r_0_1.s_2 = r_0_1_2;\n }\n {\n uint112[][4] memory r_0_1_3;\n {\n uint112[] memory r_0_1_3_0 = new uint112[](1);\n {\n uint112 r_0_1_3_0_0 = 1669460443878462292282980670702483;\n r_0_1_3_0[0] = r_0_1_3_0_0;\n }\n r_0_1_3[0] = r_0_1_3_0;\n }\n {\n uint112[] memory r_0_1_3_1 = new uint112[](3);\n {\n uint112 r_0_1_3_1_0 = 4428941743575378706328860399569192;\n r_0_1_3_1[0] = r_0_1_3_1_0;\n }\n {\n uint112 r_0_1_3_1_1 = 1424947952038344969869062031715935;\n r_0_1_3_1[1] = r_0_1_3_1_1;\n }\n {\n uint112 r_0_1_3_1_2 = 4546660216598814792312695772046824;\n r_0_1_3_1[2] = r_0_1_3_1_2;\n }\n r_0_1_3[1] = r_0_1_3_1;\n }\n {\n uint112[] memory r_0_1_3_2 = new uint112[](1);\n {\n uint112 r_0_1_3_2_0 = 4296674203415129897678115575897696;\n r_0_1_3_2[0] = r_0_1_3_2_0;\n }\n r_0_1_3[2] = r_0_1_3_2;\n }\n {\n uint112[] memory r_0_1_3_3 = new uint112[](3);\n {\n uint112 r_0_1_3_3_0 = 910863371599992936801945507531803;\n r_0_1_3_3[0] = r_0_1_3_3_0;\n }\n {\n uint112 r_0_1_3_3_1 = 2996372679197759143609789516409237;\n r_0_1_3_3[1] = r_0_1_3_3_1;\n }\n {\n uint112 r_0_1_3_3_2 = 4003478144626770514356714911201572;\n r_0_1_3_3[2] = r_0_1_3_3_2;\n }\n r_0_1_3[3] = r_0_1_3_3;\n }\n r_0_1.s_3 = r_0_1_3;\n }\n {\n bool r_0_1_4 = false;\n r_0_1.s_4 = r_0_1_4;\n }\n r_0[1] = r_0_1;\n }\n {\n S_cacfb88b memory r_0_2;\n {\n bytes9 r_0_2_0 = bytes9(0x75b5d4ce932f386ef6);\n r_0_2.s_0 = r_0_2_0;\n }\n {\n S_4cbd9404 memory r_0_2_1;\n {\n bool r_0_2_1_0 = true;\n r_0_2_1.s_0 = r_0_2_1_0;\n }\n {\n string memory r_0_2_1_1 = unicode\"Moo é🚀MééM\";\n r_0_2_1.s_1 = r_0_2_1_1;\n }\n {\n S_6e8ed41f memory r_0_2_1_2;\n {\n int56 r_0_2_1_2_0 = -5051473243263691;\n r_0_2_1_2.s_0 = r_0_2_1_2_0;\n }\n {\n S_4dc1782d memory r_0_2_1_2_1;\n {\n bytes6 r_0_2_1_2_1_0 = bytes6(0xe58fc222ce53);\n r_0_2_1_2_1.s_0 = r_0_2_1_2_1_0;\n }\n {\n bool r_0_2_1_2_1_1 = false;\n r_0_2_1_2_1.s_1 = r_0_2_1_2_1_1;\n }\n {\n string memory r_0_2_1_2_1_2 = unicode\"Moo é🚀o🚀é MooMo🚀🚀🚀 oo🚀éé oo o oéM🚀oo🚀M MMéo🚀oé🚀\";\n r_0_2_1_2_1.s_2 = r_0_2_1_2_1_2;\n }\n r_0_2_1_2.s_1 = r_0_2_1_2_1;\n }\n {\n S_75b95287 memory r_0_2_1_2_2;\n {\n string memory r_0_2_1_2_2_0 = unicode\"Moo é🚀éMMo🚀oMo🚀é🚀🚀🚀\";\n r_0_2_1_2_2.s_0 = r_0_2_1_2_2_0;\n }\n {\n bool r_0_2_1_2_2_1 = true;\n r_0_2_1_2_2.s_1 = r_0_2_1_2_2_1;\n }\n {\n int r_0_2_1_2_2_2 = -7449863340844524306373980804389553848035409148281865705094943558193151653578;\n r_0_2_1_2_2.s_2 = r_0_2_1_2_2_2;\n }\n r_0_2_1_2.s_2 = r_0_2_1_2_2;\n }\n {\n S_8a864324 memory r_0_2_1_2_3;\n {\n int104 r_0_2_1_2_3_0 = 62675005066649660926991713638;\n r_0_2_1_2_3.s_0 = r_0_2_1_2_3_0;\n }\n {\n S_b0e02723[1] memory r_0_2_1_2_3_1;\n {\n S_b0e02723 memory r_0_2_1_2_3_1_0;\n {\n bytes27[1] memory r_0_2_1_2_3_1_0_0;\n {\n bytes27 r_0_2_1_2_3_1_0_0_0 = bytes27(0x8668d85da31504503ea9b77aef6cee6b9b87107d54a85689791c79);\n r_0_2_1_2_3_1_0_0[0] = r_0_2_1_2_3_1_0_0_0;\n }\n r_0_2_1_2_3_1_0.s_0 = r_0_2_1_2_3_1_0_0;\n }\n {\n string memory r_0_2_1_2_3_1_0_1 = unicode\"Moo é🚀MoMéo MM éo\";\n r_0_2_1_2_3_1_0.s_1 = r_0_2_1_2_3_1_0_1;\n }\n {\n S_59e4d3e3 memory r_0_2_1_2_3_1_0_2;\n {\n bool r_0_2_1_2_3_1_0_2_0 = true;\n r_0_2_1_2_3_1_0_2.s_0 = r_0_2_1_2_3_1_0_2_0;\n }\n {\n address r_0_2_1_2_3_1_0_2_1 = 0x138A9E491D88E30E2562AADA9bB86De9931DD89f;\n r_0_2_1_2_3_1_0_2.s_1 = r_0_2_1_2_3_1_0_2_1;\n }\n {\n address r_0_2_1_2_3_1_0_2_2 = 0x7Ec0E8aD2B0482b1661ED6853dE7B8A0A3B54fC6;\n r_0_2_1_2_3_1_0_2.s_2 = r_0_2_1_2_3_1_0_2_2;\n }\n {\n address r_0_2_1_2_3_1_0_2_3 = 0x23138e20c675b781BE3f96C7992cb4FFc415E1d4;\n r_0_2_1_2_3_1_0_2.s_3 = r_0_2_1_2_3_1_0_2_3;\n }\n {\n address[2] memory r_0_2_1_2_3_1_0_2_4;\n {\n address r_0_2_1_2_3_1_0_2_4_0 = 0x4212e1bcAF5748c806952257228816e553Ce52A1;\n r_0_2_1_2_3_1_0_2_4[0] = r_0_2_1_2_3_1_0_2_4_0;\n }\n {\n address r_0_2_1_2_3_1_0_2_4_1 = 0xc7C1334dD1a2E8c4F7Bc5c9B0281cf01D9fB03d8;\n r_0_2_1_2_3_1_0_2_4[1] = r_0_2_1_2_3_1_0_2_4_1;\n }\n r_0_2_1_2_3_1_0_2.s_4 = r_0_2_1_2_3_1_0_2_4;\n }\n r_0_2_1_2_3_1_0.s_2 = r_0_2_1_2_3_1_0_2;\n }\n {\n bool r_0_2_1_2_3_1_0_3 = true;\n r_0_2_1_2_3_1_0.s_3 = r_0_2_1_2_3_1_0_3;\n }\n r_0_2_1_2_3_1[0] = r_0_2_1_2_3_1_0;\n }\n r_0_2_1_2_3.s_1 = r_0_2_1_2_3_1;\n }\n r_0_2_1_2.s_3 = r_0_2_1_2_3;\n }\n {\n bytes31[1] memory r_0_2_1_2_4;\n {\n bytes31 r_0_2_1_2_4_0 = bytes31(0xd39bc92ff2aedc0ca315f6f383f38067f4bd3fdcbd5553d41a05ae6121f64a);\n r_0_2_1_2_4[0] = r_0_2_1_2_4_0;\n }\n r_0_2_1_2.s_4 = r_0_2_1_2_4;\n }\n r_0_2_1.s_2 = r_0_2_1_2;\n }\n {\n bool r_0_2_1_3 = false;\n r_0_2_1.s_3 = r_0_2_1_3;\n }\n {\n bool r_0_2_1_4 = true;\n r_0_2_1.s_4 = r_0_2_1_4;\n }\n r_0_2.s_1 = r_0_2_1;\n }\n {\n S_4f245c87 memory r_0_2_2;\n {\n string memory r_0_2_2_0 = unicode\"Moo é🚀MM🚀MoM🚀 MéM🚀oM ooééMoé ooM oo éooMoéo \";\n r_0_2_2.s_0 = r_0_2_2_0;\n }\n {\n bool r_0_2_2_1 = true;\n r_0_2_2.s_1 = r_0_2_2_1;\n }\n {\n S_e1fe1757 memory r_0_2_2_2;\n {\n uint216 r_0_2_2_2_0 = 30148822645983097932041779039543223497977437556495248581884214906;\n r_0_2_2_2.s_0 = r_0_2_2_2_0;\n }\n {\n bytes22 r_0_2_2_2_1 = bytes22(0xc2e7db0a808e4f73a557c27c7bf7b66c338b8c2b7e08);\n r_0_2_2_2.s_1 = r_0_2_2_2_1;\n }\n {\n S_8f5c69d2 memory r_0_2_2_2_2;\n {\n string memory r_0_2_2_2_2_0 = unicode\"Moo é🚀ooéMooé o oo oMéoM oMé 🚀🚀éo🚀oMM🚀o M🚀🚀\";\n r_0_2_2_2_2.s_0 = r_0_2_2_2_2_0;\n }\n {\n bool r_0_2_2_2_2_1 = false;\n r_0_2_2_2_2.s_1 = r_0_2_2_2_2_1;\n }\n {\n bool[3] memory r_0_2_2_2_2_2;\n {\n bool r_0_2_2_2_2_2_0 = true;\n r_0_2_2_2_2_2[0] = r_0_2_2_2_2_2_0;\n }\n {\n bool r_0_2_2_2_2_2_1 = false;\n r_0_2_2_2_2_2[1] = r_0_2_2_2_2_2_1;\n }\n {\n bool r_0_2_2_2_2_2_2 = false;\n r_0_2_2_2_2_2[2] = r_0_2_2_2_2_2_2;\n }\n r_0_2_2_2_2.s_2 = r_0_2_2_2_2_2;\n }\n {\n bytes10 r_0_2_2_2_2_3 = bytes10(0x89cff81cac99fdb50a4c);\n r_0_2_2_2_2.s_3 = r_0_2_2_2_2_3;\n }\n r_0_2_2_2.s_2 = r_0_2_2_2_2;\n }\n {\n string memory r_0_2_2_2_3 = unicode\"Moo é🚀 Mé\";\n r_0_2_2_2.s_3 = r_0_2_2_2_3;\n }\n {\n bytes30 r_0_2_2_2_4 = bytes30(0x1ce56dbf942e1efca45cf426cfe753dcc546c27bf04d6ba4fbdebe8d0f7d);\n r_0_2_2_2.s_4 = r_0_2_2_2_4;\n }\n r_0_2_2.s_2 = r_0_2_2_2;\n }\n {\n string memory r_0_2_2_3 = unicode\"Moo é🚀é🚀éé🚀🚀éoo🚀Mo é o🚀 o🚀🚀🚀🚀oéé🚀 M M🚀Mo🚀MMoooo🚀oé🚀🚀🚀🚀🚀🚀éé🚀🚀\";\n r_0_2_2.s_3 = r_0_2_2_3;\n }\n {\n address r_0_2_2_4 = 0x4f46eC04723d0EfF4FA143Ceb8fcb9d7cEEaCb81;\n r_0_2_2.s_4 = r_0_2_2_4;\n }\n r_0_2.s_2 = r_0_2_2;\n }\n {\n uint112[][4] memory r_0_2_3;\n {\n uint112[] memory r_0_2_3_0 = new uint112[](2);\n {\n uint112 r_0_2_3_0_0 = 2883883556144974585492497403330033;\n r_0_2_3_0[0] = r_0_2_3_0_0;\n }\n {\n uint112 r_0_2_3_0_1 = 3926707094420510728063374138913274;\n r_0_2_3_0[1] = r_0_2_3_0_1;\n }\n r_0_2_3[0] = r_0_2_3_0;\n }\n {\n uint112[] memory r_0_2_3_1 = new uint112[](2);\n {\n uint112 r_0_2_3_1_0 = 3069091067906313265474471043959744;\n r_0_2_3_1[0] = r_0_2_3_1_0;\n }\n {\n uint112 r_0_2_3_1_1 = 3888745756486092218075146636410400;\n r_0_2_3_1[1] = r_0_2_3_1_1;\n }\n r_0_2_3[1] = r_0_2_3_1;\n }\n {\n uint112[] memory r_0_2_3_2 = new uint112[](2);\n {\n uint112 r_0_2_3_2_0 = 4189737722986109909039420415827510;\n r_0_2_3_2[0] = r_0_2_3_2_0;\n }\n {\n uint112 r_0_2_3_2_1 = 276646836850562282958296894968237;\n r_0_2_3_2[1] = r_0_2_3_2_1;\n }\n r_0_2_3[2] = r_0_2_3_2;\n }\n {\n uint112[] memory r_0_2_3_3 = new uint112[](4);\n {\n uint112 r_0_2_3_3_0 = 4727416100024242230698001918595878;\n r_0_2_3_3[0] = r_0_2_3_3_0;\n }\n {\n uint112 r_0_2_3_3_1 = 2043457343155596710609380387719796;\n r_0_2_3_3[1] = r_0_2_3_3_1;\n }\n {\n uint112 r_0_2_3_3_2 = 1394517542477882296135882479590824;\n r_0_2_3_3[2] = r_0_2_3_3_2;\n }\n {\n uint112 r_0_2_3_3_3 = 3670692701933182797098307581191731;\n r_0_2_3_3[3] = r_0_2_3_3_3;\n }\n r_0_2_3[3] = r_0_2_3_3;\n }\n r_0_2.s_3 = r_0_2_3;\n }\n {\n bool r_0_2_4 = false;\n r_0_2.s_4 = r_0_2_4;\n }\n r_0[2] = r_0_2;\n }\n {\n S_cacfb88b memory r_0_3;\n {\n bytes9 r_0_3_0 = bytes9(0x0cd7ca5805dc4b06af);\n r_0_3.s_0 = r_0_3_0;\n }\n {\n S_4cbd9404 memory r_0_3_1;\n {\n bool r_0_3_1_0 = true;\n r_0_3_1.s_0 = r_0_3_1_0;\n }\n {\n string memory r_0_3_1_1 = unicode\"Moo é🚀Méoo🚀M🚀oéoéM🚀o🚀M🚀éoéoéé MMoo\";\n r_0_3_1.s_1 = r_0_3_1_1;\n }\n {\n S_6e8ed41f memory r_0_3_1_2;\n {\n int56 r_0_3_1_2_0 = -8290523448397740;\n r_0_3_1_2.s_0 = r_0_3_1_2_0;\n }\n {\n S_4dc1782d memory r_0_3_1_2_1;\n {\n bytes6 r_0_3_1_2_1_0 = bytes6(0x765ad85b7426);\n r_0_3_1_2_1.s_0 = r_0_3_1_2_1_0;\n }\n {\n bool r_0_3_1_2_1_1 = true;\n r_0_3_1_2_1.s_1 = r_0_3_1_2_1_1;\n }\n {\n string memory r_0_3_1_2_1_2 = unicode\"Moo é🚀 🚀 oM🚀M🚀oo🚀Mooo éo Mo🚀Moéé é M🚀🚀 oooo🚀\";\n r_0_3_1_2_1.s_2 = r_0_3_1_2_1_2;\n }\n r_0_3_1_2.s_1 = r_0_3_1_2_1;\n }\n {\n S_75b95287 memory r_0_3_1_2_2;\n {\n string memory r_0_3_1_2_2_0 = unicode\"Moo é🚀\";\n r_0_3_1_2_2.s_0 = r_0_3_1_2_2_0;\n }\n {\n bool r_0_3_1_2_2_1 = false;\n r_0_3_1_2_2.s_1 = r_0_3_1_2_2_1;\n }\n {\n int r_0_3_1_2_2_2 = 10402516873405573710396273875152332705176611010480768234745065173663786546454;\n r_0_3_1_2_2.s_2 = r_0_3_1_2_2_2;\n }\n r_0_3_1_2.s_2 = r_0_3_1_2_2;\n }\n {\n S_8a864324 memory r_0_3_1_2_3;\n {\n int104 r_0_3_1_2_3_0 = 5571910321032267783506139627700;\n r_0_3_1_2_3.s_0 = r_0_3_1_2_3_0;\n }\n {\n S_b0e02723[1] memory r_0_3_1_2_3_1;\n {\n S_b0e02723 memory r_0_3_1_2_3_1_0;\n {\n bytes27[1] memory r_0_3_1_2_3_1_0_0;\n {\n bytes27 r_0_3_1_2_3_1_0_0_0 = bytes27(0x6fb989260c92e8bc966195c04f7e2fe9d9875833b429350acc0e5c);\n r_0_3_1_2_3_1_0_0[0] = r_0_3_1_2_3_1_0_0_0;\n }\n r_0_3_1_2_3_1_0.s_0 = r_0_3_1_2_3_1_0_0;\n }\n {\n string memory r_0_3_1_2_3_1_0_1 = unicode\"Moo é🚀 é🚀🚀oéM🚀M Moo Mo\";\n r_0_3_1_2_3_1_0.s_1 = r_0_3_1_2_3_1_0_1;\n }\n {\n S_59e4d3e3 memory r_0_3_1_2_3_1_0_2;\n {\n bool r_0_3_1_2_3_1_0_2_0 = false;\n r_0_3_1_2_3_1_0_2.s_0 = r_0_3_1_2_3_1_0_2_0;\n }\n {\n address r_0_3_1_2_3_1_0_2_1 = 0x1b139e7d36FDadBcc7Df8c75AdBB6FfA292cEF45;\n r_0_3_1_2_3_1_0_2.s_1 = r_0_3_1_2_3_1_0_2_1;\n }\n {\n address r_0_3_1_2_3_1_0_2_2 = 0x0F5C24cFcEd9554Fd235F87285C4c5cc47A5b418;\n r_0_3_1_2_3_1_0_2.s_2 = r_0_3_1_2_3_1_0_2_2;\n }\n {\n address r_0_3_1_2_3_1_0_2_3 = 0x00DA6347a2a1277521bD00823C4DdCd703aEb815;\n r_0_3_1_2_3_1_0_2.s_3 = r_0_3_1_2_3_1_0_2_3;\n }\n {\n address[2] memory r_0_3_1_2_3_1_0_2_4;\n {\n address r_0_3_1_2_3_1_0_2_4_0 = 0xf5e8E208b26D7a51957f530F4764bf9894F58b54;\n r_0_3_1_2_3_1_0_2_4[0] = r_0_3_1_2_3_1_0_2_4_0;\n }\n {\n address r_0_3_1_2_3_1_0_2_4_1 = 0xEED761Fa1dCb2EAF8F93628fAE92acdE6c174478;\n r_0_3_1_2_3_1_0_2_4[1] = r_0_3_1_2_3_1_0_2_4_1;\n }\n r_0_3_1_2_3_1_0_2.s_4 = r_0_3_1_2_3_1_0_2_4;\n }\n r_0_3_1_2_3_1_0.s_2 = r_0_3_1_2_3_1_0_2;\n }\n {\n bool r_0_3_1_2_3_1_0_3 = true;\n r_0_3_1_2_3_1_0.s_3 = r_0_3_1_2_3_1_0_3;\n }\n r_0_3_1_2_3_1[0] = r_0_3_1_2_3_1_0;\n }\n r_0_3_1_2_3.s_1 = r_0_3_1_2_3_1;\n }\n r_0_3_1_2.s_3 = r_0_3_1_2_3;\n }\n {\n bytes31[1] memory r_0_3_1_2_4;\n {\n bytes31 r_0_3_1_2_4_0 = bytes31(0x7225a3846e77a05674dcfd69efa3437df1171f5ad40ee2d4ff13d1b47ff8c2);\n r_0_3_1_2_4[0] = r_0_3_1_2_4_0;\n }\n r_0_3_1_2.s_4 = r_0_3_1_2_4;\n }\n r_0_3_1.s_2 = r_0_3_1_2;\n }\n {\n bool r_0_3_1_3 = true;\n r_0_3_1.s_3 = r_0_3_1_3;\n }\n {\n bool r_0_3_1_4 = true;\n r_0_3_1.s_4 = r_0_3_1_4;\n }\n r_0_3.s_1 = r_0_3_1;\n }\n {\n S_4f245c87 memory r_0_3_2;\n {\n string memory r_0_3_2_0 = unicode\"Moo é🚀 é éoéoMoéé🚀éééo \";\n r_0_3_2.s_0 = r_0_3_2_0;\n }\n {\n bool r_0_3_2_1 = false;\n r_0_3_2.s_1 = r_0_3_2_1;\n }\n {\n S_e1fe1757 memory r_0_3_2_2;\n {\n uint216 r_0_3_2_2_0 = 5439090432067320680194527809638087444230370463897350716633748856;\n r_0_3_2_2.s_0 = r_0_3_2_2_0;\n }\n {\n bytes22 r_0_3_2_2_1 = bytes22(0xaa324338c7572bf832363b06c4dbdc46a53eb6666461);\n r_0_3_2_2.s_1 = r_0_3_2_2_1;\n }\n {\n S_8f5c69d2 memory r_0_3_2_2_2;\n {\n string memory r_0_3_2_2_2_0 = unicode\"Moo é🚀Mé MéééooM🚀 éo o🚀o\";\n r_0_3_2_2_2.s_0 = r_0_3_2_2_2_0;\n }\n {\n bool r_0_3_2_2_2_1 = false;\n r_0_3_2_2_2.s_1 = r_0_3_2_2_2_1;\n }\n {\n bool[3] memory r_0_3_2_2_2_2;\n {\n bool r_0_3_2_2_2_2_0 = true;\n r_0_3_2_2_2_2[0] = r_0_3_2_2_2_2_0;\n }\n {\n bool r_0_3_2_2_2_2_1 = false;\n r_0_3_2_2_2_2[1] = r_0_3_2_2_2_2_1;\n }\n {\n bool r_0_3_2_2_2_2_2 = false;\n r_0_3_2_2_2_2[2] = r_0_3_2_2_2_2_2;\n }\n r_0_3_2_2_2.s_2 = r_0_3_2_2_2_2;\n }\n {\n bytes10 r_0_3_2_2_2_3 = bytes10(0x539d1fa27354cc2a21be);\n r_0_3_2_2_2.s_3 = r_0_3_2_2_2_3;\n }\n r_0_3_2_2.s_2 = r_0_3_2_2_2;\n }\n {\n string memory r_0_3_2_2_3 = unicode\"Moo é🚀o🚀oo \";\n r_0_3_2_2.s_3 = r_0_3_2_2_3;\n }\n {\n bytes30 r_0_3_2_2_4 = bytes30(0xf9f34cc5c85b184dab5f73987a5e56267ce678c94d489c7f5395f6c689f4);\n r_0_3_2_2.s_4 = r_0_3_2_2_4;\n }\n r_0_3_2.s_2 = r_0_3_2_2;\n }\n {\n string memory r_0_3_2_3 = unicode\"Moo é🚀MMoéo🚀o🚀oo ooéoé🚀M🚀ooMMM oMéoéooo🚀 oo🚀🚀o🚀🚀ooéMé🚀o é🚀oooM\";\n r_0_3_2.s_3 = r_0_3_2_3;\n }\n {\n address r_0_3_2_4 = 0x41aBa07653CF095ef00019df15cB694F8a3F496C;\n r_0_3_2.s_4 = r_0_3_2_4;\n }\n r_0_3.s_2 = r_0_3_2;\n }\n {\n uint112[][4] memory r_0_3_3;\n {\n uint112[] memory r_0_3_3_0 = new uint112[](1);\n {\n uint112 r_0_3_3_0_0 = 3501433467401227308675675358196623;\n r_0_3_3_0[0] = r_0_3_3_0_0;\n }\n r_0_3_3[0] = r_0_3_3_0;\n }\n {\n uint112[] memory r_0_3_3_1 = new uint112[](1);\n {\n uint112 r_0_3_3_1_0 = 4478129566979578900280158836831340;\n r_0_3_3_1[0] = r_0_3_3_1_0;\n }\n r_0_3_3[1] = r_0_3_3_1;\n }\n {\n uint112[] memory r_0_3_3_2 = new uint112[](2);\n {\n uint112 r_0_3_3_2_0 = 1354004295542064315260428212779051;\n r_0_3_3_2[0] = r_0_3_3_2_0;\n }\n {\n uint112 r_0_3_3_2_1 = 1651940248756015948685875254008851;\n r_0_3_3_2[1] = r_0_3_3_2_1;\n }\n r_0_3_3[2] = r_0_3_3_2;\n }\n {\n uint112[] memory r_0_3_3_3 = new uint112[](0);\n r_0_3_3[3] = r_0_3_3_3;\n }\n r_0_3.s_3 = r_0_3_3;\n }\n {\n bool r_0_3_4 = false;\n r_0_3.s_4 = r_0_3_4;\n }\n r_0[3] = r_0_3;\n }\n r[0] = r_0;\n }\n {\n S_cacfb88b[4] memory r_1;\n {\n S_cacfb88b memory r_1_0;\n {\n bytes9 r_1_0_0 = bytes9(0xd188f2eb918e1c3678);\n r_1_0.s_0 = r_1_0_0;\n }\n {\n S_4cbd9404 memory r_1_0_1;\n {\n bool r_1_0_1_0 = false;\n r_1_0_1.s_0 = r_1_0_1_0;\n }\n {\n string memory r_1_0_1_1 = unicode\"Moo é🚀 M Mo🚀MMoé🚀🚀 é🚀éoMMo\";\n r_1_0_1.s_1 = r_1_0_1_1;\n }\n {\n S_6e8ed41f memory r_1_0_1_2;\n {\n int56 r_1_0_1_2_0 = 19921202998329402;\n r_1_0_1_2.s_0 = r_1_0_1_2_0;\n }\n {\n S_4dc1782d memory r_1_0_1_2_1;\n {\n bytes6 r_1_0_1_2_1_0 = bytes6(0x91efc664009c);\n r_1_0_1_2_1.s_0 = r_1_0_1_2_1_0;\n }\n {\n bool r_1_0_1_2_1_1 = true;\n r_1_0_1_2_1.s_1 = r_1_0_1_2_1_1;\n }\n {\n string memory r_1_0_1_2_1_2 = unicode\"Moo é🚀éM🚀🚀 Mo o🚀Mééoé🚀 🚀é 🚀 oooooéo🚀M🚀éooéoM oMoMéMoo🚀Mo 🚀\";\n r_1_0_1_2_1.s_2 = r_1_0_1_2_1_2;\n }\n r_1_0_1_2.s_1 = r_1_0_1_2_1;\n }\n {\n S_75b95287 memory r_1_0_1_2_2;\n {\n string memory r_1_0_1_2_2_0 = unicode\"Moo é🚀\";\n r_1_0_1_2_2.s_0 = r_1_0_1_2_2_0;\n }\n {\n bool r_1_0_1_2_2_1 = true;\n r_1_0_1_2_2.s_1 = r_1_0_1_2_2_1;\n }\n {\n int r_1_0_1_2_2_2 = -34853778802574078864607668903207415147089005813637425486660581000432795868354;\n r_1_0_1_2_2.s_2 = r_1_0_1_2_2_2;\n }\n r_1_0_1_2.s_2 = r_1_0_1_2_2;\n }\n {\n S_8a864324 memory r_1_0_1_2_3;\n {\n int104 r_1_0_1_2_3_0 = -4986273949011994826117656293701;\n r_1_0_1_2_3.s_0 = r_1_0_1_2_3_0;\n }\n {\n S_b0e02723[1] memory r_1_0_1_2_3_1;\n {\n S_b0e02723 memory r_1_0_1_2_3_1_0;\n {\n bytes27[1] memory r_1_0_1_2_3_1_0_0;\n {\n bytes27 r_1_0_1_2_3_1_0_0_0 = bytes27(0x1aab4ed8883174b501f54aeb7d0d4602c93cb428b2178d4b7e5d2a);\n r_1_0_1_2_3_1_0_0[0] = r_1_0_1_2_3_1_0_0_0;\n }\n r_1_0_1_2_3_1_0.s_0 = r_1_0_1_2_3_1_0_0;\n }\n {\n string memory r_1_0_1_2_3_1_0_1 = unicode\"Moo é🚀 o🚀 oo 🚀MMo\";\n r_1_0_1_2_3_1_0.s_1 = r_1_0_1_2_3_1_0_1;\n }\n {\n S_59e4d3e3 memory r_1_0_1_2_3_1_0_2;\n {\n bool r_1_0_1_2_3_1_0_2_0 = true;\n r_1_0_1_2_3_1_0_2.s_0 = r_1_0_1_2_3_1_0_2_0;\n }\n {\n address r_1_0_1_2_3_1_0_2_1 = 0xB8c72E057Bd699Fb60E3d241113AFB68CaB74F7c;\n r_1_0_1_2_3_1_0_2.s_1 = r_1_0_1_2_3_1_0_2_1;\n }\n {\n address r_1_0_1_2_3_1_0_2_2 = 0xc28A699999EEe79100dB2911fFb44Af237efa261;\n r_1_0_1_2_3_1_0_2.s_2 = r_1_0_1_2_3_1_0_2_2;\n }\n {\n address r_1_0_1_2_3_1_0_2_3 = 0xbe24517fe6547CE354b911a96221e3B0Fc411A4F;\n r_1_0_1_2_3_1_0_2.s_3 = r_1_0_1_2_3_1_0_2_3;\n }\n {\n address[2] memory r_1_0_1_2_3_1_0_2_4;\n {\n address r_1_0_1_2_3_1_0_2_4_0 = 0x4018a5B4f4Eb4eFAf80f60E664C20B4619DBE3b7;\n r_1_0_1_2_3_1_0_2_4[0] = r_1_0_1_2_3_1_0_2_4_0;\n }\n {\n address r_1_0_1_2_3_1_0_2_4_1 = 0x43AF520CF1E78A3e5Edd906cF096C59Dab98701f;\n r_1_0_1_2_3_1_0_2_4[1] = r_1_0_1_2_3_1_0_2_4_1;\n }\n r_1_0_1_2_3_1_0_2.s_4 = r_1_0_1_2_3_1_0_2_4;\n }\n r_1_0_1_2_3_1_0.s_2 = r_1_0_1_2_3_1_0_2;\n }\n {\n bool r_1_0_1_2_3_1_0_3 = true;\n r_1_0_1_2_3_1_0.s_3 = r_1_0_1_2_3_1_0_3;\n }\n r_1_0_1_2_3_1[0] = r_1_0_1_2_3_1_0;\n }\n r_1_0_1_2_3.s_1 = r_1_0_1_2_3_1;\n }\n r_1_0_1_2.s_3 = r_1_0_1_2_3;\n }\n {\n bytes31[1] memory r_1_0_1_2_4;\n {\n bytes31 r_1_0_1_2_4_0 = bytes31(0x9362b4b7041fcc5a3082d548b8f5fbc9b6fda237d07a6bf8df941f7e15bbb4);\n r_1_0_1_2_4[0] = r_1_0_1_2_4_0;\n }\n r_1_0_1_2.s_4 = r_1_0_1_2_4;\n }\n r_1_0_1.s_2 = r_1_0_1_2;\n }\n {\n bool r_1_0_1_3 = false;\n r_1_0_1.s_3 = r_1_0_1_3;\n }\n {\n bool r_1_0_1_4 = true;\n r_1_0_1.s_4 = r_1_0_1_4;\n }\n r_1_0.s_1 = r_1_0_1;\n }\n {\n S_4f245c87 memory r_1_0_2;\n {\n string memory r_1_0_2_0 = unicode\"Moo é🚀 é🚀o Mo ooo🚀 oo éoo éM oo oMooooéo éoo o\";\n r_1_0_2.s_0 = r_1_0_2_0;\n }\n {\n bool r_1_0_2_1 = false;\n r_1_0_2.s_1 = r_1_0_2_1;\n }\n {\n S_e1fe1757 memory r_1_0_2_2;\n {\n uint216 r_1_0_2_2_0 = 10063822234314344704186891101443545386702886148609390173024633172;\n r_1_0_2_2.s_0 = r_1_0_2_2_0;\n }\n {\n bytes22 r_1_0_2_2_1 = bytes22(0xdca5466aa8187330679e5caa01d2823cfdc605447e08);\n r_1_0_2_2.s_1 = r_1_0_2_2_1;\n }\n {\n S_8f5c69d2 memory r_1_0_2_2_2;\n {\n string memory r_1_0_2_2_2_0 = unicode\"Moo é🚀éMo🚀o 🚀éooé 🚀 🚀é🚀MéoéM ooMM\";\n r_1_0_2_2_2.s_0 = r_1_0_2_2_2_0;\n }\n {\n bool r_1_0_2_2_2_1 = false;\n r_1_0_2_2_2.s_1 = r_1_0_2_2_2_1;\n }\n {\n bool[3] memory r_1_0_2_2_2_2;\n {\n bool r_1_0_2_2_2_2_0 = true;\n r_1_0_2_2_2_2[0] = r_1_0_2_2_2_2_0;\n }\n {\n bool r_1_0_2_2_2_2_1 = true;\n r_1_0_2_2_2_2[1] = r_1_0_2_2_2_2_1;\n }\n {\n bool r_1_0_2_2_2_2_2 = false;\n r_1_0_2_2_2_2[2] = r_1_0_2_2_2_2_2;\n }\n r_1_0_2_2_2.s_2 = r_1_0_2_2_2_2;\n }\n {\n bytes10 r_1_0_2_2_2_3 = bytes10(0x8d2c525bd7c61732ad6c);\n r_1_0_2_2_2.s_3 = r_1_0_2_2_2_3;\n }\n r_1_0_2_2.s_2 = r_1_0_2_2_2;\n }\n {\n string memory r_1_0_2_2_3 = unicode\"Moo é🚀🚀MéooMMoéé\";\n r_1_0_2_2.s_3 = r_1_0_2_2_3;\n }\n {\n bytes30 r_1_0_2_2_4 = bytes30(0x879267f6080428c1cf36b306026357777a4a64c5f4ce84d16a58ec1b164a);\n r_1_0_2_2.s_4 = r_1_0_2_2_4;\n }\n r_1_0_2.s_2 = r_1_0_2_2;\n }\n {\n string memory r_1_0_2_3 = unicode\"Moo é🚀oé🚀🚀oM\";\n r_1_0_2.s_3 = r_1_0_2_3;\n }\n {\n address r_1_0_2_4 = 0x4A6EDfA108dcD4DeB780d3e2ee72C8AbD7830807;\n r_1_0_2.s_4 = r_1_0_2_4;\n }\n r_1_0.s_2 = r_1_0_2;\n }\n {\n uint112[][4] memory r_1_0_3;\n {\n uint112[] memory r_1_0_3_0 = new uint112[](3);\n {\n uint112 r_1_0_3_0_0 = 4351667443914206212854853018692721;\n r_1_0_3_0[0] = r_1_0_3_0_0;\n }\n {\n uint112 r_1_0_3_0_1 = 1517345222968682662142905391693174;\n r_1_0_3_0[1] = r_1_0_3_0_1;\n }\n {\n uint112 r_1_0_3_0_2 = 3129906759525319741443462987241790;\n r_1_0_3_0[2] = r_1_0_3_0_2;\n }\n r_1_0_3[0] = r_1_0_3_0;\n }\n {\n uint112[] memory r_1_0_3_1 = new uint112[](4);\n {\n uint112 r_1_0_3_1_0 = 197210087679507814586905804169353;\n r_1_0_3_1[0] = r_1_0_3_1_0;\n }\n {\n uint112 r_1_0_3_1_1 = 515529612669684159505153039132691;\n r_1_0_3_1[1] = r_1_0_3_1_1;\n }\n {\n uint112 r_1_0_3_1_2 = 3127533943137336830095649740682130;\n r_1_0_3_1[2] = r_1_0_3_1_2;\n }\n {\n uint112 r_1_0_3_1_3 = 4690845167942691342852280970213394;\n r_1_0_3_1[3] = r_1_0_3_1_3;\n }\n r_1_0_3[1] = r_1_0_3_1;\n }\n {\n uint112[] memory r_1_0_3_2 = new uint112[](4);\n {\n uint112 r_1_0_3_2_0 = 1594614299129406019292472164413327;\n r_1_0_3_2[0] = r_1_0_3_2_0;\n }\n {\n uint112 r_1_0_3_2_1 = 4402712699161965853857467515963280;\n r_1_0_3_2[1] = r_1_0_3_2_1;\n }\n {\n uint112 r_1_0_3_2_2 = 2272433561112655291394457249640581;\n r_1_0_3_2[2] = r_1_0_3_2_2;\n }\n {\n uint112 r_1_0_3_2_3 = 3693414381600129884772179742807467;\n r_1_0_3_2[3] = r_1_0_3_2_3;\n }\n r_1_0_3[2] = r_1_0_3_2;\n }\n {\n uint112[] memory r_1_0_3_3 = new uint112[](1);\n {\n uint112 r_1_0_3_3_0 = 4853646781089043191072836236813945;\n r_1_0_3_3[0] = r_1_0_3_3_0;\n }\n r_1_0_3[3] = r_1_0_3_3;\n }\n r_1_0.s_3 = r_1_0_3;\n }\n {\n bool r_1_0_4 = true;\n r_1_0.s_4 = r_1_0_4;\n }\n r_1[0] = r_1_0;\n }\n {\n S_cacfb88b memory r_1_1;\n {\n bytes9 r_1_1_0 = bytes9(0x007db0b7bf377b23a4);\n r_1_1.s_0 = r_1_1_0;\n }\n {\n S_4cbd9404 memory r_1_1_1;\n {\n bool r_1_1_1_0 = true;\n r_1_1_1.s_0 = r_1_1_1_0;\n }\n {\n string memory r_1_1_1_1 = unicode\"Moo é🚀éo MMoMoooMoéo é\";\n r_1_1_1.s_1 = r_1_1_1_1;\n }\n {\n S_6e8ed41f memory r_1_1_1_2;\n {\n int56 r_1_1_1_2_0 = 18727119401979969;\n r_1_1_1_2.s_0 = r_1_1_1_2_0;\n }\n {\n S_4dc1782d memory r_1_1_1_2_1;\n {\n bytes6 r_1_1_1_2_1_0 = bytes6(0x239ec23186a3);\n r_1_1_1_2_1.s_0 = r_1_1_1_2_1_0;\n }\n {\n bool r_1_1_1_2_1_1 = true;\n r_1_1_1_2_1.s_1 = r_1_1_1_2_1_1;\n }\n {\n string memory r_1_1_1_2_1_2 = unicode\"Moo é🚀ééé🚀🚀o🚀é \";\n r_1_1_1_2_1.s_2 = r_1_1_1_2_1_2;\n }\n r_1_1_1_2.s_1 = r_1_1_1_2_1;\n }\n {\n S_75b95287 memory r_1_1_1_2_2;\n {\n string memory r_1_1_1_2_2_0 = unicode\"Moo é🚀MéooooMo o🚀 oé M🚀o 🚀🚀é\";\n r_1_1_1_2_2.s_0 = r_1_1_1_2_2_0;\n }\n {\n bool r_1_1_1_2_2_1 = false;\n r_1_1_1_2_2.s_1 = r_1_1_1_2_2_1;\n }\n {\n int r_1_1_1_2_2_2 = -3401957032145497625429453885115310098237378753282540910148069533561081084690;\n r_1_1_1_2_2.s_2 = r_1_1_1_2_2_2;\n }\n r_1_1_1_2.s_2 = r_1_1_1_2_2;\n }\n {\n S_8a864324 memory r_1_1_1_2_3;\n {\n int104 r_1_1_1_2_3_0 = 9503075869253945576732871112097;\n r_1_1_1_2_3.s_0 = r_1_1_1_2_3_0;\n }\n {\n S_b0e02723[1] memory r_1_1_1_2_3_1;\n {\n S_b0e02723 memory r_1_1_1_2_3_1_0;\n {\n bytes27[1] memory r_1_1_1_2_3_1_0_0;\n {\n bytes27 r_1_1_1_2_3_1_0_0_0 = bytes27(0x7ba786850e3be01d5374e16cb110a5f0b463c1bb6ac95ba396becd);\n r_1_1_1_2_3_1_0_0[0] = r_1_1_1_2_3_1_0_0_0;\n }\n r_1_1_1_2_3_1_0.s_0 = r_1_1_1_2_3_1_0_0;\n }\n {\n string memory r_1_1_1_2_3_1_0_1 = unicode\"Moo é🚀🚀éoé🚀é o🚀🚀M \";\n r_1_1_1_2_3_1_0.s_1 = r_1_1_1_2_3_1_0_1;\n }\n {\n S_59e4d3e3 memory r_1_1_1_2_3_1_0_2;\n {\n bool r_1_1_1_2_3_1_0_2_0 = true;\n r_1_1_1_2_3_1_0_2.s_0 = r_1_1_1_2_3_1_0_2_0;\n }\n {\n address r_1_1_1_2_3_1_0_2_1 = 0x9d356c7AA04A105B4634D5DF472696Fe90BA9E52;\n r_1_1_1_2_3_1_0_2.s_1 = r_1_1_1_2_3_1_0_2_1;\n }\n {\n address r_1_1_1_2_3_1_0_2_2 = 0x2a12DC12f44f2B527e503349578337762f01f7cb;\n r_1_1_1_2_3_1_0_2.s_2 = r_1_1_1_2_3_1_0_2_2;\n }\n {\n address r_1_1_1_2_3_1_0_2_3 = 0xC01011E87F0d4A5416aac0Aa45D4189123CE07AE;\n r_1_1_1_2_3_1_0_2.s_3 = r_1_1_1_2_3_1_0_2_3;\n }\n {\n address[2] memory r_1_1_1_2_3_1_0_2_4;\n {\n address r_1_1_1_2_3_1_0_2_4_0 = 0x7F1547A4b5Ee668f9ea78ADC46531c824D0fd65F;\n r_1_1_1_2_3_1_0_2_4[0] = r_1_1_1_2_3_1_0_2_4_0;\n }\n {\n address r_1_1_1_2_3_1_0_2_4_1 = 0x5ebD5e2ddf1AfD70aB20Da1F59552D4d6CCF6091;\n r_1_1_1_2_3_1_0_2_4[1] = r_1_1_1_2_3_1_0_2_4_1;\n }\n r_1_1_1_2_3_1_0_2.s_4 = r_1_1_1_2_3_1_0_2_4;\n }\n r_1_1_1_2_3_1_0.s_2 = r_1_1_1_2_3_1_0_2;\n }\n {\n bool r_1_1_1_2_3_1_0_3 = true;\n r_1_1_1_2_3_1_0.s_3 = r_1_1_1_2_3_1_0_3;\n }\n r_1_1_1_2_3_1[0] = r_1_1_1_2_3_1_0;\n }\n r_1_1_1_2_3.s_1 = r_1_1_1_2_3_1;\n }\n r_1_1_1_2.s_3 = r_1_1_1_2_3;\n }\n {\n bytes31[1] memory r_1_1_1_2_4;\n {\n bytes31 r_1_1_1_2_4_0 = bytes31(0x62b0dadd1b47d4900b291e875beb3f173bf1ac7a8701e78e17049242a64a96);\n r_1_1_1_2_4[0] = r_1_1_1_2_4_0;\n }\n r_1_1_1_2.s_4 = r_1_1_1_2_4;\n }\n r_1_1_1.s_2 = r_1_1_1_2;\n }\n {\n bool r_1_1_1_3 = true;\n r_1_1_1.s_3 = r_1_1_1_3;\n }\n {\n bool r_1_1_1_4 = true;\n r_1_1_1.s_4 = r_1_1_1_4;\n }\n r_1_1.s_1 = r_1_1_1;\n }\n {\n S_4f245c87 memory r_1_1_2;\n {\n string memory r_1_1_2_0 = unicode\"Moo é🚀éooMM oo MéM🚀🚀o 🚀ooo🚀M oooMoéMéMo 🚀oooo🚀🚀éo éé\";\n r_1_1_2.s_0 = r_1_1_2_0;\n }\n {\n bool r_1_1_2_1 = false;\n r_1_1_2.s_1 = r_1_1_2_1;\n }\n {\n S_e1fe1757 memory r_1_1_2_2;\n {\n uint216 r_1_1_2_2_0 = 61122460084730887589401861519436335256068040917044125863755700186;\n r_1_1_2_2.s_0 = r_1_1_2_2_0;\n }\n {\n bytes22 r_1_1_2_2_1 = bytes22(0x44673e7e80dbfcfd891d5cbc13240a6e61b2dcc66fb0);\n r_1_1_2_2.s_1 = r_1_1_2_2_1;\n }\n {\n S_8f5c69d2 memory r_1_1_2_2_2;\n {\n string memory r_1_1_2_2_2_0 = unicode\"Moo é🚀o oé oé🚀éo🚀 🚀éoo🚀MoM oé🚀 éo M🚀éé Méo🚀ooo🚀oo🚀éoo\";\n r_1_1_2_2_2.s_0 = r_1_1_2_2_2_0;\n }\n {\n bool r_1_1_2_2_2_1 = false;\n r_1_1_2_2_2.s_1 = r_1_1_2_2_2_1;\n }\n {\n bool[3] memory r_1_1_2_2_2_2;\n {\n bool r_1_1_2_2_2_2_0 = false;\n r_1_1_2_2_2_2[0] = r_1_1_2_2_2_2_0;\n }\n {\n bool r_1_1_2_2_2_2_1 = true;\n r_1_1_2_2_2_2[1] = r_1_1_2_2_2_2_1;\n }\n {\n bool r_1_1_2_2_2_2_2 = false;\n r_1_1_2_2_2_2[2] = r_1_1_2_2_2_2_2;\n }\n r_1_1_2_2_2.s_2 = r_1_1_2_2_2_2;\n }\n {\n bytes10 r_1_1_2_2_2_3 = bytes10(0xf99a38066201c0de2dbb);\n r_1_1_2_2_2.s_3 = r_1_1_2_2_2_3;\n }\n r_1_1_2_2.s_2 = r_1_1_2_2_2;\n }\n {\n string memory r_1_1_2_2_3 = unicode\"Moo é🚀🚀MéMooéo o🚀M🚀éMo MoMMo🚀M🚀o🚀éoo 🚀ooMoM🚀🚀oéM🚀 é \";\n r_1_1_2_2.s_3 = r_1_1_2_2_3;\n }\n {\n bytes30 r_1_1_2_2_4 = bytes30(0xa66df1dddd5cacdb8773bed83e82c915556af9cfbb1cd60b9e93ba443cd7);\n r_1_1_2_2.s_4 = r_1_1_2_2_4;\n }\n r_1_1_2.s_2 = r_1_1_2_2;\n }\n {\n string memory r_1_1_2_3 = unicode\"Moo é🚀🚀é\";\n r_1_1_2.s_3 = r_1_1_2_3;\n }\n {\n address r_1_1_2_4 = 0x72D38d5e263e936b9eC9C5E9095da3fE77a7ac3e;\n r_1_1_2.s_4 = r_1_1_2_4;\n }\n r_1_1.s_2 = r_1_1_2;\n }\n {\n uint112[][4] memory r_1_1_3;\n {\n uint112[] memory r_1_1_3_0 = new uint112[](2);\n {\n uint112 r_1_1_3_0_0 = 3843095391395019944319751356282358;\n r_1_1_3_0[0] = r_1_1_3_0_0;\n }\n {\n uint112 r_1_1_3_0_1 = 3527374467356275618008227406752912;\n r_1_1_3_0[1] = r_1_1_3_0_1;\n }\n r_1_1_3[0] = r_1_1_3_0;\n }\n {\n uint112[] memory r_1_1_3_1 = new uint112[](2);\n {\n uint112 r_1_1_3_1_0 = 3025715916080275893188199544395876;\n r_1_1_3_1[0] = r_1_1_3_1_0;\n }\n {\n uint112 r_1_1_3_1_1 = 4762734183378441203526413338708674;\n r_1_1_3_1[1] = r_1_1_3_1_1;\n }\n r_1_1_3[1] = r_1_1_3_1;\n }\n {\n uint112[] memory r_1_1_3_2 = new uint112[](1);\n {\n uint112 r_1_1_3_2_0 = 2248310426129254510834052394751565;\n r_1_1_3_2[0] = r_1_1_3_2_0;\n }\n r_1_1_3[2] = r_1_1_3_2;\n }\n {\n uint112[] memory r_1_1_3_3 = new uint112[](0);\n r_1_1_3[3] = r_1_1_3_3;\n }\n r_1_1.s_3 = r_1_1_3;\n }\n {\n bool r_1_1_4 = true;\n r_1_1.s_4 = r_1_1_4;\n }\n r_1[1] = r_1_1;\n }\n {\n S_cacfb88b memory r_1_2;\n {\n bytes9 r_1_2_0 = bytes9(0x2d4d4e1e6fc134a99e);\n r_1_2.s_0 = r_1_2_0;\n }\n {\n S_4cbd9404 memory r_1_2_1;\n {\n bool r_1_2_1_0 = false;\n r_1_2_1.s_0 = r_1_2_1_0;\n }\n {\n string memory r_1_2_1_1 = unicode\"Moo é🚀o🚀MééoéM 🚀o éoé🚀Mé🚀 o🚀 o🚀🚀éoMéo MMooM éoM🚀éé\";\n r_1_2_1.s_1 = r_1_2_1_1;\n }\n {\n S_6e8ed41f memory r_1_2_1_2;\n {\n int56 r_1_2_1_2_0 = -21096536789179785;\n r_1_2_1_2.s_0 = r_1_2_1_2_0;\n }\n {\n S_4dc1782d memory r_1_2_1_2_1;\n {\n bytes6 r_1_2_1_2_1_0 = bytes6(0x83b6e22b89b4);\n r_1_2_1_2_1.s_0 = r_1_2_1_2_1_0;\n }\n {\n bool r_1_2_1_2_1_1 = false;\n r_1_2_1_2_1.s_1 = r_1_2_1_2_1_1;\n }\n {\n string memory r_1_2_1_2_1_2 = unicode\"Moo é🚀\";\n r_1_2_1_2_1.s_2 = r_1_2_1_2_1_2;\n }\n r_1_2_1_2.s_1 = r_1_2_1_2_1;\n }\n {\n S_75b95287 memory r_1_2_1_2_2;\n {\n string memory r_1_2_1_2_2_0 = unicode\"Moo é🚀MéMooo🚀éo oM🚀MéMMM🚀 🚀éoé o🚀 🚀éoo M🚀é oo 🚀\";\n r_1_2_1_2_2.s_0 = r_1_2_1_2_2_0;\n }\n {\n bool r_1_2_1_2_2_1 = true;\n r_1_2_1_2_2.s_1 = r_1_2_1_2_2_1;\n }\n {\n int r_1_2_1_2_2_2 = -35632596317152684293585149403061416555670184918961394017008032728655846225195;\n r_1_2_1_2_2.s_2 = r_1_2_1_2_2_2;\n }\n r_1_2_1_2.s_2 = r_1_2_1_2_2;\n }\n {\n S_8a864324 memory r_1_2_1_2_3;\n {\n int104 r_1_2_1_2_3_0 = 2692272154424008380290346655986;\n r_1_2_1_2_3.s_0 = r_1_2_1_2_3_0;\n }\n {\n S_b0e02723[1] memory r_1_2_1_2_3_1;\n {\n S_b0e02723 memory r_1_2_1_2_3_1_0;\n {\n bytes27[1] memory r_1_2_1_2_3_1_0_0;\n {\n bytes27 r_1_2_1_2_3_1_0_0_0 = bytes27(0x9cda0d819f4ddcd4476fdf3cb19b4a93f51408ba361c97bcce02be);\n r_1_2_1_2_3_1_0_0[0] = r_1_2_1_2_3_1_0_0_0;\n }\n r_1_2_1_2_3_1_0.s_0 = r_1_2_1_2_3_1_0_0;\n }\n {\n string memory r_1_2_1_2_3_1_0_1 = unicode\"Moo é🚀🚀éoMé oéoo oMéoooo🚀é🚀🚀 🚀🚀Mooé🚀ooéoé\";\n r_1_2_1_2_3_1_0.s_1 = r_1_2_1_2_3_1_0_1;\n }\n {\n S_59e4d3e3 memory r_1_2_1_2_3_1_0_2;\n {\n bool r_1_2_1_2_3_1_0_2_0 = true;\n r_1_2_1_2_3_1_0_2.s_0 = r_1_2_1_2_3_1_0_2_0;\n }\n {\n address r_1_2_1_2_3_1_0_2_1 = 0xB1f5923E517207ee2fB4b4bEe0Ab3d3d19E263FF;\n r_1_2_1_2_3_1_0_2.s_1 = r_1_2_1_2_3_1_0_2_1;\n }\n {\n address r_1_2_1_2_3_1_0_2_2 = 0x3E6A520EA9d8753Ce9AaA5F8749FDAAbddE23B92;\n r_1_2_1_2_3_1_0_2.s_2 = r_1_2_1_2_3_1_0_2_2;\n }\n {\n address r_1_2_1_2_3_1_0_2_3 = 0xdD4B72b027345BeaC2cb6315275D601200d78b15;\n r_1_2_1_2_3_1_0_2.s_3 = r_1_2_1_2_3_1_0_2_3;\n }\n {\n address[2] memory r_1_2_1_2_3_1_0_2_4;\n {\n address r_1_2_1_2_3_1_0_2_4_0 = 0x319A738EF3Fb5Aea84681A2Ede9544C1D6F1a794;\n r_1_2_1_2_3_1_0_2_4[0] = r_1_2_1_2_3_1_0_2_4_0;\n }\n {\n address r_1_2_1_2_3_1_0_2_4_1 = 0x839183E24C35c4358010DC838C766Db13436BeEE;\n r_1_2_1_2_3_1_0_2_4[1] = r_1_2_1_2_3_1_0_2_4_1;\n }\n r_1_2_1_2_3_1_0_2.s_4 = r_1_2_1_2_3_1_0_2_4;\n }\n r_1_2_1_2_3_1_0.s_2 = r_1_2_1_2_3_1_0_2;\n }\n {\n bool r_1_2_1_2_3_1_0_3 = true;\n r_1_2_1_2_3_1_0.s_3 = r_1_2_1_2_3_1_0_3;\n }\n r_1_2_1_2_3_1[0] = r_1_2_1_2_3_1_0;\n }\n r_1_2_1_2_3.s_1 = r_1_2_1_2_3_1;\n }\n r_1_2_1_2.s_3 = r_1_2_1_2_3;\n }\n {\n bytes31[1] memory r_1_2_1_2_4;\n {\n bytes31 r_1_2_1_2_4_0 = bytes31(0x68af47ae2029cc39b842f7c217b686583617e6040b57bcf2e4e38a24212a54);\n r_1_2_1_2_4[0] = r_1_2_1_2_4_0;\n }\n r_1_2_1_2.s_4 = r_1_2_1_2_4;\n }\n r_1_2_1.s_2 = r_1_2_1_2;\n }\n {\n bool r_1_2_1_3 = true;\n r_1_2_1.s_3 = r_1_2_1_3;\n }\n {\n bool r_1_2_1_4 = true;\n r_1_2_1.s_4 = r_1_2_1_4;\n }\n r_1_2.s_1 = r_1_2_1;\n }\n {\n S_4f245c87 memory r_1_2_2;\n {\n string memory r_1_2_2_0 = unicode\"Moo é🚀ééo éMoo🚀ooo 🚀ooééo MM 🚀MM🚀M \";\n r_1_2_2.s_0 = r_1_2_2_0;\n }\n {\n bool r_1_2_2_1 = true;\n r_1_2_2.s_1 = r_1_2_2_1;\n }\n {\n S_e1fe1757 memory r_1_2_2_2;\n {\n uint216 r_1_2_2_2_0 = 25244257055884949875096069331316139460177198992542331600645463177;\n r_1_2_2_2.s_0 = r_1_2_2_2_0;\n }\n {\n bytes22 r_1_2_2_2_1 = bytes22(0x334780780af9905eee153d4581f16ae52561a3c50421);\n r_1_2_2_2.s_1 = r_1_2_2_2_1;\n }\n {\n S_8f5c69d2 memory r_1_2_2_2_2;\n {\n string memory r_1_2_2_2_2_0 = unicode\"Moo é🚀\";\n r_1_2_2_2_2.s_0 = r_1_2_2_2_2_0;\n }\n {\n bool r_1_2_2_2_2_1 = true;\n r_1_2_2_2_2.s_1 = r_1_2_2_2_2_1;\n }\n {\n bool[3] memory r_1_2_2_2_2_2;\n {\n bool r_1_2_2_2_2_2_0 = true;\n r_1_2_2_2_2_2[0] = r_1_2_2_2_2_2_0;\n }\n {\n bool r_1_2_2_2_2_2_1 = false;\n r_1_2_2_2_2_2[1] = r_1_2_2_2_2_2_1;\n }\n {\n bool r_1_2_2_2_2_2_2 = true;\n r_1_2_2_2_2_2[2] = r_1_2_2_2_2_2_2;\n }\n r_1_2_2_2_2.s_2 = r_1_2_2_2_2_2;\n }\n {\n bytes10 r_1_2_2_2_2_3 = bytes10(0x7f77fae79b343ded5b98);\n r_1_2_2_2_2.s_3 = r_1_2_2_2_2_3;\n }\n r_1_2_2_2.s_2 = r_1_2_2_2_2;\n }\n {\n string memory r_1_2_2_2_3 = unicode\"Moo é🚀\";\n r_1_2_2_2.s_3 = r_1_2_2_2_3;\n }\n {\n bytes30 r_1_2_2_2_4 = bytes30(0x70998e30f82208a475df2e16226cb2c0dc2cdde5d542841a4e6af29c39cc);\n r_1_2_2_2.s_4 = r_1_2_2_2_4;\n }\n r_1_2_2.s_2 = r_1_2_2_2;\n }\n {\n string memory r_1_2_2_3 = unicode\"Moo é🚀 é éo oo éoéo🚀 o oéMMoéo🚀MM🚀MéoooooMMM\";\n r_1_2_2.s_3 = r_1_2_2_3;\n }\n {\n address r_1_2_2_4 = 0x729328D745D7280A97AABB91B2553f06d3c85a9E;\n r_1_2_2.s_4 = r_1_2_2_4;\n }\n r_1_2.s_2 = r_1_2_2;\n }\n {\n uint112[][4] memory r_1_2_3;\n {\n uint112[] memory r_1_2_3_0 = new uint112[](1);\n {\n uint112 r_1_2_3_0_0 = 2502377143484476038673651246124084;\n r_1_2_3_0[0] = r_1_2_3_0_0;\n }\n r_1_2_3[0] = r_1_2_3_0;\n }\n {\n uint112[] memory r_1_2_3_1 = new uint112[](1);\n {\n uint112 r_1_2_3_1_0 = 803482201416434846728020011535020;\n r_1_2_3_1[0] = r_1_2_3_1_0;\n }\n r_1_2_3[1] = r_1_2_3_1;\n }\n {\n uint112[] memory r_1_2_3_2 = new uint112[](1);\n {\n uint112 r_1_2_3_2_0 = 1969084935455441007698839230581077;\n r_1_2_3_2[0] = r_1_2_3_2_0;\n }\n r_1_2_3[2] = r_1_2_3_2;\n }\n {\n uint112[] memory r_1_2_3_3 = new uint112[](2);\n {\n uint112 r_1_2_3_3_0 = 3698994371833325967111580429080967;\n r_1_2_3_3[0] = r_1_2_3_3_0;\n }\n {\n uint112 r_1_2_3_3_1 = 4147148449875753158786244866637883;\n r_1_2_3_3[1] = r_1_2_3_3_1;\n }\n r_1_2_3[3] = r_1_2_3_3;\n }\n r_1_2.s_3 = r_1_2_3;\n }\n {\n bool r_1_2_4 = false;\n r_1_2.s_4 = r_1_2_4;\n }\n r_1[2] = r_1_2;\n }\n {\n S_cacfb88b memory r_1_3;\n {\n bytes9 r_1_3_0 = bytes9(0xd46fc91e0203a1e4fc);\n r_1_3.s_0 = r_1_3_0;\n }\n {\n S_4cbd9404 memory r_1_3_1;\n {\n bool r_1_3_1_0 = true;\n r_1_3_1.s_0 = r_1_3_1_0;\n }\n {\n string memory r_1_3_1_1 = unicode\"Moo é🚀🚀oo Moo 🚀o ééé🚀o🚀M🚀o🚀M🚀Mo🚀oM M🚀Moo MM\";\n r_1_3_1.s_1 = r_1_3_1_1;\n }\n {\n S_6e8ed41f memory r_1_3_1_2;\n {\n int56 r_1_3_1_2_0 = 27748990894304484;\n r_1_3_1_2.s_0 = r_1_3_1_2_0;\n }\n {\n S_4dc1782d memory r_1_3_1_2_1;\n {\n bytes6 r_1_3_1_2_1_0 = bytes6(0xe932414f0727);\n r_1_3_1_2_1.s_0 = r_1_3_1_2_1_0;\n }\n {\n bool r_1_3_1_2_1_1 = false;\n r_1_3_1_2_1.s_1 = r_1_3_1_2_1_1;\n }\n {\n string memory r_1_3_1_2_1_2 = unicode\"Moo é🚀M🚀éo🚀 oéMooo M o éoooM\";\n r_1_3_1_2_1.s_2 = r_1_3_1_2_1_2;\n }\n r_1_3_1_2.s_1 = r_1_3_1_2_1;\n }\n {\n S_75b95287 memory r_1_3_1_2_2;\n {\n string memory r_1_3_1_2_2_0 = unicode\"Moo é🚀o oéooooééMo🚀éoéMo 🚀🚀é🚀oo🚀 oMé 🚀 🚀oM 🚀 oMoo é \";\n r_1_3_1_2_2.s_0 = r_1_3_1_2_2_0;\n }\n {\n bool r_1_3_1_2_2_1 = true;\n r_1_3_1_2_2.s_1 = r_1_3_1_2_2_1;\n }\n {\n int r_1_3_1_2_2_2 = 52411836837472820198293125195164928076251432430168676287052327103356919710586;\n r_1_3_1_2_2.s_2 = r_1_3_1_2_2_2;\n }\n r_1_3_1_2.s_2 = r_1_3_1_2_2;\n }\n {\n S_8a864324 memory r_1_3_1_2_3;\n {\n int104 r_1_3_1_2_3_0 = 1700458549325852792476907623436;\n r_1_3_1_2_3.s_0 = r_1_3_1_2_3_0;\n }\n {\n S_b0e02723[1] memory r_1_3_1_2_3_1;\n {\n S_b0e02723 memory r_1_3_1_2_3_1_0;\n {\n bytes27[1] memory r_1_3_1_2_3_1_0_0;\n {\n bytes27 r_1_3_1_2_3_1_0_0_0 = bytes27(0x3d2b2a31720f2131dfa00e8ee3315ede5f95edd33a9018ba528d7e);\n r_1_3_1_2_3_1_0_0[0] = r_1_3_1_2_3_1_0_0_0;\n }\n r_1_3_1_2_3_1_0.s_0 = r_1_3_1_2_3_1_0_0;\n }\n {\n string memory r_1_3_1_2_3_1_0_1 = unicode\"Moo é🚀o🚀oo M\";\n r_1_3_1_2_3_1_0.s_1 = r_1_3_1_2_3_1_0_1;\n }\n {\n S_59e4d3e3 memory r_1_3_1_2_3_1_0_2;\n {\n bool r_1_3_1_2_3_1_0_2_0 = true;\n r_1_3_1_2_3_1_0_2.s_0 = r_1_3_1_2_3_1_0_2_0;\n }\n {\n address r_1_3_1_2_3_1_0_2_1 = 0xfEa5a295aa12fBd82BAe28FEd0e00EAfBa5D4d35;\n r_1_3_1_2_3_1_0_2.s_1 = r_1_3_1_2_3_1_0_2_1;\n }\n {\n address r_1_3_1_2_3_1_0_2_2 = 0x21d389e6640268287eb7838576DCB3277bAD6E13;\n r_1_3_1_2_3_1_0_2.s_2 = r_1_3_1_2_3_1_0_2_2;\n }\n {\n address r_1_3_1_2_3_1_0_2_3 = 0x27b65f3338d28CC7f091022C3D1Bcc3Ae83B13a4;\n r_1_3_1_2_3_1_0_2.s_3 = r_1_3_1_2_3_1_0_2_3;\n }\n {\n address[2] memory r_1_3_1_2_3_1_0_2_4;\n {\n address r_1_3_1_2_3_1_0_2_4_0 = 0x5Beb62106aBDa3511dad7a32556a7eeade46B0e0;\n r_1_3_1_2_3_1_0_2_4[0] = r_1_3_1_2_3_1_0_2_4_0;\n }\n {\n address r_1_3_1_2_3_1_0_2_4_1 = 0x140278B84f0cd62899aBFD20D159E03460490566;\n r_1_3_1_2_3_1_0_2_4[1] = r_1_3_1_2_3_1_0_2_4_1;\n }\n r_1_3_1_2_3_1_0_2.s_4 = r_1_3_1_2_3_1_0_2_4;\n }\n r_1_3_1_2_3_1_0.s_2 = r_1_3_1_2_3_1_0_2;\n }\n {\n bool r_1_3_1_2_3_1_0_3 = true;\n r_1_3_1_2_3_1_0.s_3 = r_1_3_1_2_3_1_0_3;\n }\n r_1_3_1_2_3_1[0] = r_1_3_1_2_3_1_0;\n }\n r_1_3_1_2_3.s_1 = r_1_3_1_2_3_1;\n }\n r_1_3_1_2.s_3 = r_1_3_1_2_3;\n }\n {\n bytes31[1] memory r_1_3_1_2_4;\n {\n bytes31 r_1_3_1_2_4_0 = bytes31(0x330e49ed08cc23605e70513cd47b7ecfd406a59bd6b4c8abec201f64f41482);\n r_1_3_1_2_4[0] = r_1_3_1_2_4_0;\n }\n r_1_3_1_2.s_4 = r_1_3_1_2_4;\n }\n r_1_3_1.s_2 = r_1_3_1_2;\n }\n {\n bool r_1_3_1_3 = false;\n r_1_3_1.s_3 = r_1_3_1_3;\n }\n {\n bool r_1_3_1_4 = false;\n r_1_3_1.s_4 = r_1_3_1_4;\n }\n r_1_3.s_1 = r_1_3_1;\n }\n {\n S_4f245c87 memory r_1_3_2;\n {\n string memory r_1_3_2_0 = unicode\"Moo é🚀 oM oM MééMMoooMoooééM oooM M éMoo🚀éoMo🚀 🚀o🚀M🚀\";\n r_1_3_2.s_0 = r_1_3_2_0;\n }\n {\n bool r_1_3_2_1 = true;\n r_1_3_2.s_1 = r_1_3_2_1;\n }\n {\n S_e1fe1757 memory r_1_3_2_2;\n {\n uint216 r_1_3_2_2_0 = 95258903554469739649272631254932347606007506921841497299313653924;\n r_1_3_2_2.s_0 = r_1_3_2_2_0;\n }\n {\n bytes22 r_1_3_2_2_1 = bytes22(0x5058973cd7cb2d84fe12a3c198b1842a0bbe9ddb0ddd);\n r_1_3_2_2.s_1 = r_1_3_2_2_1;\n }\n {\n S_8f5c69d2 memory r_1_3_2_2_2;\n {\n string memory r_1_3_2_2_2_0 = unicode\"Moo é🚀MMé 🚀oooéo ooo🚀 ooMéo oo 🚀M ooM🚀🚀ééééMMMéoMM\";\n r_1_3_2_2_2.s_0 = r_1_3_2_2_2_0;\n }\n {\n bool r_1_3_2_2_2_1 = true;\n r_1_3_2_2_2.s_1 = r_1_3_2_2_2_1;\n }\n {\n bool[3] memory r_1_3_2_2_2_2;\n {\n bool r_1_3_2_2_2_2_0 = false;\n r_1_3_2_2_2_2[0] = r_1_3_2_2_2_2_0;\n }\n {\n bool r_1_3_2_2_2_2_1 = true;\n r_1_3_2_2_2_2[1] = r_1_3_2_2_2_2_1;\n }\n {\n bool r_1_3_2_2_2_2_2 = true;\n r_1_3_2_2_2_2[2] = r_1_3_2_2_2_2_2;\n }\n r_1_3_2_2_2.s_2 = r_1_3_2_2_2_2;\n }\n {\n bytes10 r_1_3_2_2_2_3 = bytes10(0xccdd6a90e30070c8d892);\n r_1_3_2_2_2.s_3 = r_1_3_2_2_2_3;\n }\n r_1_3_2_2.s_2 = r_1_3_2_2_2;\n }\n {\n string memory r_1_3_2_2_3 = unicode\"Moo é🚀 éMééM🚀oéMoé éMooMo🚀ooo oéMooo o o 🚀🚀 éoéooo éé\";\n r_1_3_2_2.s_3 = r_1_3_2_2_3;\n }\n {\n bytes30 r_1_3_2_2_4 = bytes30(0xebf347d511750a76c97ec85df0064defb2112a459ce2682f4de3ee108d74);\n r_1_3_2_2.s_4 = r_1_3_2_2_4;\n }\n r_1_3_2.s_2 = r_1_3_2_2;\n }\n {\n string memory r_1_3_2_3 = unicode\"Moo é🚀é🚀oM🚀🚀oMéo 🚀o🚀 MMoo ooMMMo 🚀éMoéooMoM 🚀 🚀\";\n r_1_3_2.s_3 = r_1_3_2_3;\n }\n {\n address r_1_3_2_4 = 0x2DDC2B97fB0F70B538412ed393aDCDc88EDD4C48;\n r_1_3_2.s_4 = r_1_3_2_4;\n }\n r_1_3.s_2 = r_1_3_2;\n }\n {\n uint112[][4] memory r_1_3_3;\n {\n uint112[] memory r_1_3_3_0 = new uint112[](2);\n {\n uint112 r_1_3_3_0_0 = 171747982968366975167544630288517;\n r_1_3_3_0[0] = r_1_3_3_0_0;\n }\n {\n uint112 r_1_3_3_0_1 = 4364508640690874416442345556760859;\n r_1_3_3_0[1] = r_1_3_3_0_1;\n }\n r_1_3_3[0] = r_1_3_3_0;\n }\n {\n uint112[] memory r_1_3_3_1 = new uint112[](1);\n {\n uint112 r_1_3_3_1_0 = 3328153896153303566704371299921876;\n r_1_3_3_1[0] = r_1_3_3_1_0;\n }\n r_1_3_3[1] = r_1_3_3_1;\n }\n {\n uint112[] memory r_1_3_3_2 = new uint112[](0);\n r_1_3_3[2] = r_1_3_3_2;\n }\n {\n uint112[] memory r_1_3_3_3 = new uint112[](0);\n r_1_3_3[3] = r_1_3_3_3;\n }\n r_1_3.s_3 = r_1_3_3;\n }\n {\n bool r_1_3_4 = false;\n r_1_3.s_4 = r_1_3_4;\n }\n r_1[3] = r_1_3;\n }\n r[1] = r_1;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000002d4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000b2000000000000000000000000000000000000000000000000000000000000016a0000000000000000000000000000000000000000000000000000000000000224038ff1d4bd09084daac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000008e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffab9d27e501a62d00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002003ee006aedc7376ecd84c916ee5223648efda9cdb16ee49a68fbeaa0972d2a500a3041454f737000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000ab0c136a551c06ca5740fbcba98364c709ced615930af642384d74f368f9e72100000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a80f09f9a80f09f9a8020f09f9a80c3a9f09f9a804d6f6f2020000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffa629af35e3025190619ff34e4a00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000020afc32882a67fb6e2a12ef12e5593e8f0fee4476e3cb861b902a2ff0000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001f3d32b69454a0070322b60ec7426d866026c3e10000000000000000000000005a81cc72331fd53bfc70072ad9e17efaa54d15f80000000000000000000000006d23544ed1963a7626db178130b813db9989a5f100000000000000000000000003dccb8f62d73b34f5b5e6547da3996382bf95e300000000000000000000000080e3a24161b435412256c4c6b7e555e1fe7674a7000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000574d6f6f20c3a9f09f9a806f20c3a9c3a9c3a96fc3a94d20204d4dc3a96ff09f9a80206ff09f9a806f6f4d6fc3a920f09f9a80206f6fc3a94d6f204d6f206ff09f9a806f20c3a96fc3a96f6f6fc3a96f6f6f6f6f4dc3a92000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000ae3edd08bee48aca623c4c39eaecd9fe1a6274ca000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a804d6f6f4df09f9a80f09f9a806f6f4d4df09f9a806f6fc3a920c3a92020206f6ff09f9a80c3a96ff09f9a80c3a96f206f6f6ff09f9a804d20c3a9f09f9a806fc3a9206f206f4df09f9a804df09f9a804dc3a96f6f00000000000000b09a3ab1a5f781b6b5e1b6ca17f329af593d22d44d22a13276f6919d36abda1a703a914767eba207083d47f0a764bc0c470000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c07c194ace6f06432df5a7b6b88d86e9f19b397a1ab0105601fde3c1ab2efc000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000017decc7fe1bccee97d17b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a806f6f6f206f20c3a96fc3a92020c3a9c3a9c3a96fc3a92020206f6f6f6fc3a9204d4d6ff09f9a804d6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a806f6f4d4dc3a96f206f20c3a96fc3a9c3a96f4d000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000002f1a7ea1ad524564a187a96ab62a0000000000000000000000000000000000009521d34955569099d060692aa4850000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000d0ed5bec7137bb65350d98d52bda00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000008d9c669f2ceee09cdb6bc6e2e09e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000057d81e9b625d239a824bfebd9940000000000000000000000000000000000006f6ddc411317dee9d5e934a87d8e55906f3ed2d25e1f42000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000009800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80f09f9a806f206f6f6fc3a96fc3a9f09f9a8000000000ffffffffffffffffffffffffffffffffffffffffffffffffffcfb9356e04592000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002005556b6b433f517aad338cceb71fa66c0d0ffb00189ae3e905f90b7c9673f33009822b712d015000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002b4d6f6f20c3a9f09f9a806fc3a96f6f6fc3a96f4d6ff09f9a80206f6f20c3a94d4d20f09f9a80f09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000fcf1e9bad118689acaecc2bf1124b2472725a6c19d588240ccb544dfd23b925c000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a804d2020c3a920204df09f9a80206f206fc3a96f000000ffffffffffffffffffffffffffffffffffffffe2f4241d3c68fdf1b99211710f00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000020b2768925b357944d0ae111562b62207a3183208c8ab4bd31f69f5e00000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055ab8c91f89206f1f5e9b782aa29393f20e86937000000000000000000000000abdbf1e9fed389d4a969ced2fa5f60f4170b74e7000000000000000000000000cb5e46bcd1188d4bdc4a5e1252d6ed8b63fefc500000000000000000000000004dcee8608f0dfe1fb8b0f008d2e460ec5c2dd4ce00000000000000000000000068cedfa366d0cc5b894921cd966fdba4dc9fcae10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d4d6f6f20c3a9f09f9a806ff09f9a80204df09f9a804dc3a9f09f9a806f6f204d20f09f9a806f6f6f6fc3a96f6f6f4d6fc3a96f4dc3a94df09f9a806f2000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000ad230d50ed982311f04d14a5c9fa475cebf3624b00000000000000000000000000000000000000000000000000000000000000634d6f6f20c3a9f09f9a80f09f9a804d4d4d4d6f20204d20c3a96f4dc3a94d204df09f9a8020206fc3a9f09f9a80f09f9a80f09f9a806fc3a96f20206ff09f9a80c3a96f20c3a9f09f9a80c3a96fc3a94d6f4dc3a9c3a9f09f9a806ff09f9a804d206f6f00000000000000000000000000000000000000000000000000000000000000000000d428844024b7cb04d2a1d1dd3155fd3eaa4b8539c44cfd9388e94079b8620d9fc052a643f3a29332e373ca3f8d021986e30000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002003b291c86abe0818a70a9f010dd7acbf19e1f2bc3f021c0778f610363ad50000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102f1a6afc51609028dc80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000664d6f6f20c3a9f09f9a80f09f9a80204d6f6ff09f9a80f09f9a806f6f4d6f4df09f9a80c3a94d6f6f6ff09f9a802020206f204d206f2020c3a96f206ff09f9a804dc3a9f09f9a80206f6f4d4d204d6f6fc3a9c3a96ff09f9a80f09f9a80c3a96ff09f9a80c3a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a804d2020f09f9a806f20f09f9a804df09f9a804dc3a920c3a96f6f206f6f2020f09f9a80f09f9a80c3a9f09f9a804d6f6f6f6f6fc3a96f4df09f9a806f6f6ff09f9a806f4d4d6f206f6f4d6f2000000000000000000000000000000000000000000000000000000000000000000000000000000000002c4d6f6f20c3a9f09f9a804dc3a92020f09f9a804df09f9a806f6f6f6ff09f9a80204df09f9a80206f6f20c3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000524f8da099b62b203f85defd03930000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000da5d1a9869902cb7cc6974c1092800000000000000000000000000000000000046415f27d2c1331ad38ee32aae5f000000000000000000000000000000000000e02aeb7f0964751016f1b03e65e80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000d3d7a71f858f66c899942b4f1e6000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000002ce8b649ac152ee2c2ee69bf0c1b00000000000000000000000000000000000093bb8a4c3749185ad87d7c00e995000000000000000000000000000000000000c562ff9003d90e3ac0375e26792475b5d4ce932f386ef6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000009600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a804dc3a9c3a94d00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffee0db63bbe2d3500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000240d39bc92ff2aedc0ca315f6f383f38067f4bd3fdcbd5553d41a05ae6121f64a00e58fc222ce5300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000544d6f6f20c3a9f09f9a806ff09f9a80c3a9204d6f6f4d6ff09f9a80f09f9a80f09f9a80206f6ff09f9a80c3a9c3a9206f6f206f206fc3a94df09f9a806f6ff09f9a804d204d4dc3a96ff09f9a806fc3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001ef8786dabe5bbfe995176b771343d7e0bcac14493576cf39c0060f9259f1493600000000000000000000000000000000000000000000000000000000000000284d6f6f20c3a9f09f9a80c3a94d4d6ff09f9a806f4d6ff09f9a80c3a9f09f9a80f09f9a80f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca838c90b0a8f3a9fdb2c566000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000208668d85da31504503ea9b77aef6cee6b9b87107d54a85689791c79000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000138a9e491d88e30e2562aada9bb86de9931dd89f0000000000000000000000007ec0e8ad2b0482b1661ed6853de7b8a0a3b54fc600000000000000000000000023138e20c675b781be3f96c7992cb4ffc415e1d40000000000000000000000004212e1bcaf5748c806952257228816e553ce52a1000000000000000000000000c7c1334dd1a2e8c4f7bc5c9b0281cf01d9fb03d8000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a804d6f4dc3a96f204d4d20c3a96f00000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003200000000000000000000000004f46ec04723d0eff4fa143ceb8fcb9d7ceeacb8100000000000000000000000000000000000000000000000000000000000000404d6f6f20c3a9f09f9a804d4df09f9a804d6f4df09f9a80204dc3a94df09f9a806f4d206f6fc3a9c3a94d6fc3a920206f6f4d206f6f20c3a96f6f4d6fc3a96f2000000000004949a88c7ac4099fb9911018f6756cea01499c30c2c84044097e7ac2e7db0a808e4f73a557c27c7bf7b66c338b8c2b7e080000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e01ce56dbf942e1efca45cf426cfe753dcc546c27bf04d6ba4fbdebe8d0f7d000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089cff81cac99fdb50a4c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000474d6f6f20c3a9f09f9a806f6fc3a94d6f6fc3a9206f206f6f20206f4dc3a96f4d206f4dc3a920f09f9a80f09f9a80c3a96ff09f9a806f4d4df09f9a806f204df09f9a80f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4d6f6f20c3a9f09f9a80204dc3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000894d6f6f20c3a9f09f9a80c3a9f09f9a80c3a9c3a9f09f9a80f09f9a80c3a96f6ff09f9a804d6f20c3a9206ff09f9a80206ff09f9a80f09f9a80f09f9a80f09f9a806fc3a9c3a9f09f9a80204d204df09f9a804d6ff09f9a804d4d6f6f6f6ff09f9a806fc3a9f09f9a80f09f9a80f09f9a80f09f9a80f09f9a80f09f9a80c3a9c3a9f09f9a80f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000008e2fba5680ec2eabb063c2d9bdf1000000000000000000000000000000000000c19a02ebadd806a1ba38133db1fa00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000009751601588221534f0a65e068bc0000000000000000000000000000000000000bfbadf38e9c461000510294abe200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000ce91ecb822dc8beadcc4508a5e360000000000000000000000000000000000000da3c623f787206aa8b5417491ad0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000e9146141693db5361b2d0648132600000000000000000000000000000000000064c00ec8d661be9254108ac20a7400000000000000000000000000000000000044c1493300b755bab6568d195da8000000000000000000000000000000000000b4faa7cdadd426049a13dda926330cd7ca5805dc4b06af000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000003c4d6f6f20c3a9f09f9a804dc3a96f6ff09f9a804df09f9a806fc3a96fc3a94df09f9a806ff09f9a804df09f9a80c3a96fc3a96fc3a9c3a9204d4d6f6f00000000ffffffffffffffffffffffffffffffffffffffffffffffffffe28bd016db305400000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002207225a3846e77a05674dcfd69efa3437df1171f5ad40ee2d4ff13d1b47ff8c200765ad85b742600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000524d6f6f20c3a9f09f9a8020f09f9a80206f4df09f9a804df09f9a806f6ff09f9a804d6f6f6f2020202020c3a96f204d6ff09f9a804d6fc3a9c3a920c3a920204df09f9a80f09f9a8020206f6f6f6ff09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000016ff9dabb1d50022b4bf8cfcf46fab2d80c77754ea646c58035f236436f93516000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000004653d03143e124395e314940b4000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000206fb989260c92e8bc966195c04f7e2fe9d9875833b429350acc0e5c0000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b139e7d36fdadbcc7df8c75adbb6ffa292cef450000000000000000000000000f5c24cfced9554fd235f87285c4c5cc47a5b41800000000000000000000000000da6347a2a1277521bd00823c4ddcd703aeb815000000000000000000000000f5e8e208b26d7a51957f530f4764bf9894f58b54000000000000000000000000eed761fa1dcb2eaf8f93628fae92acde6c174478000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a8020c3a9f09f9a80f09f9a806fc3a94df09f9a804d204d6f6f204d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000041aba07653cf095ef00019df15cb694f8a3f496c00000000000000000000000000000000000000000000000000000000000000274d6f6f20c3a9f09f9a8020c3a920c3a96fc3a96f4d6fc3a9c3a9f09f9a80c3a9c3a9c3a96f20200000000000000000000000000000000000000000000000000000000000000d38c118dd25a5c38c5555e02649d877c7426bb80a665937019578aa324338c7572bf832363b06c4dbdc46a53eb66664610000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c0f9f34cc5c85b184dab5f73987a5e56267ce678c94d489c7f5395f6c689f4000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000539d1fa27354cc2a21be0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000284d6f6f20c3a9f09f9a804dc3a9204dc3a9c3a9c3a96f6f4df09f9a802020c3a96f206ff09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124d6f6f20c3a9f09f9a806ff09f9a806f6f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c4d6f6f20c3a9f09f9a804d4d6fc3a96ff09f9a806ff09f9a806f6f206f6fc3a96fc3a9f09f9a804df09f9a806f6f4d4d4d20206f4dc3a96fc3a96f6f6ff09f9a80206f6ff09f9a80f09f9a806ff09f9a80f09f9a806f6fc3a94dc3a9f09f9a806f20c3a9f09f9a806f6f6f4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000aca24db860ed2a764031add3738f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000dcc9f1064e5588c1d8f98575346c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000042c1efd695fe8e8e1d46421c382b00000000000000000000000000000000000051726ad2ddf3daf20d35cd4e1c13000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000be000000000000000000000000000000000000000000000000000000000000016a00000000000000000000000000000000000000000000000000000000000002160d188f2eb918e1c3678000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000008e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002e4d6f6f20c3a9f09f9a80204d204d6ff09f9a804d4d6fc3a9f09f9a80f09f9a802020c3a9f09f9a80c3a96f4d4d6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000046c63a8436c03a00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002409362b4b7041fcc5a3082d548b8f5fbc9b6fda237d07a6bf8df941f7e15bbb40091efc664009c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000664d6f6f20c3a9f09f9a80c3a94df09f9a80f09f9a80204d6f206ff09f9a804dc3a9c3a96fc3a9f09f9a8020f09f9a80c3a920f09f9a80206f6f6f6f6fc3a96ff09f9a804df09f9a80c3a96f6fc3a96f4d20206f4d6f4dc3a94d6f6ff09f9a804d6f20f09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001b2f175d4e86e55c5b49f8ff4e1edb93b04f86c0b7db71563395f5822424aa33e000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffc1107adc49aa7e7708fa64cebb000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000201aab4ed8883174b501f54aeb7d0d4602c93cb428b2178d4b7e5d2a000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b8c72e057bd699fb60e3d241113afb68cab74f7c000000000000000000000000c28a699999eee79100db2911ffb44af237efa261000000000000000000000000be24517fe6547ce354b911a96221e3b0fc411a4f0000000000000000000000004018a5b4f4eb4efaf80f60e664c20b4619dbe3b700000000000000000000000043af520cf1e78a3e5edd906cf096c59dab98701f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80206ff09f9a80206f6f2020f09f9a804d4d6f0000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000004a6edfa108dcd4deb780d3e2ee72c8abd7830807000000000000000000000000000000000000000000000000000000000000003e4d6f6f20c3a9f09f9a8020c3a9f09f9a806f204d6f206f6f6ff09f9a80206f6f20c3a96f6f20c3a94d20206f6f206f4d6f6f6f6fc3a96f20c3a96f6f206f000000000000001876bb613124927972e7213e5da5b2129d9dc12bd5da150a4f4154dca5466aa8187330679e5caa01d2823cfdc605447e080000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001c0879267f6080428c1cf36b306026357777a4a64c5f4ce84d16a58ec1b164a000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000008d2c525bd7c61732ad6c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a4d6f6f20c3a9f09f9a80c3a94d6ff09f9a806f20f09f9a80c3a96f6fc3a920f09f9a8020f09f9a80c3a9f09f9a804dc3a96fc3a94d206f6f4d4d000000000000000000000000000000000000000000000000000000000000000000000000001a4d6f6f20c3a9f09f9a80f09f9a804dc3a96f6f4d4d6fc3a9c3a900000000000000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a806fc3a9f09f9a80f09f9a806f4d0000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000d68dc3dde24f3848059dcb9dac710000000000000000000000000000000000004acf96d6fd5964a893881dd2bd760000000000000000000000000000000000009a50fa2e93f8d91e8bcb831fd93e000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000009b9242920dcf58fa812db906089000000000000000000000000000000000000196ae604cc1e1c1f7760860de8130000000000000000000000000000000000009a330732dd5ed588d8bf1a43f392000000000000000000000000000000000000e746ca336905d7ba48f19455781200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000004e9edcb0bd5b99f52c39586aef8f000000000000000000000000000000000000d9120bfb63461ff1bbbb19ae8790000000000000000000000000000000000000700a24d911359bd234abf1bdf085000000000000000000000000000000000000b6197182958b55f52c4a461bd5ab0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000ef4da2957f4ccf2fe207d28b2679007db0b7bf377b23a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000009200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001d4d6f6f20c3a9f09f9a80c3a96f204d4d6f4d6f6f6f4d6fc3a96f20c3a900000000000000000000000000000000000000000000000000000000428837439f104100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000020062b0dadd1b47d4900b291e875beb3f173bf1ac7a8701e78e17049242a64a9600239ec23186a300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000204d6f6f20c3a9f09f9a80c3a9c3a9c3a9f09f9a80f09f9a806ff09f9a80c3a92000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000f87a8f808519361c4278b91e7865745edaacbe63b22bf9831c2f886ca93b44ee00000000000000000000000000000000000000000000000000000000000000314d6f6f20c3a9f09f9a804dc3a96f6f6f6f4d6f206ff09f9a802020206fc3a9204df09f9a806f20f09f9a80f09f9a80c3a90000000000000000000000000000000000000000000000000000000000000000000077f2181e60fc2d2bc6bc9c35a1000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000207ba786850e3be01d5374e16cb110a5f0b463c1bb6ac95ba396becd0000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009d356c7aa04a105b4634d5df472696fe90ba9e520000000000000000000000002a12dc12f44f2b527e503349578337762f01f7cb000000000000000000000000c01011e87f0d4a5416aac0aa45d4189123ce07ae0000000000000000000000007f1547a4b5ee668f9ea78adc46531c824d0fd65f0000000000000000000000005ebd5e2ddf1afd70ab20da1f59552d4d6ccf6091000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000254d6f6f20c3a9f09f9a80f09f9a80c3a96fc3a9f09f9a80c3a9206ff09f9a80f09f9a804d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000038000000000000000000000000072d38d5e263e936b9ec9c5e9095da3fe77a7ac3e00000000000000000000000000000000000000000000000000000000000000554d6f6f20c3a9f09f9a80c3a96f6f4d4d20206f6f204dc3a94df09f9a80f09f9a806f20f09f9a806f6f6ff09f9a804d206f6f6f4d6fc3a94dc3a94d6f20f09f9a806f6f6f6ff09f9a80f09f9a80c3a96f20c3a9c3a900000000000000000000000000000000949499acc9878d079854d2ddaa8cb994cd73fd41b2153728c4d7da44673e7e80dbfcfd891d5cbc13240a6e61b2dcc66fb00000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e0a66df1dddd5cacdb8773bed83e82c915556af9cfbb1cd60b9e93ba443cd7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000f99a38066201c0de2dbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a806f206fc3a9206fc3a9f09f9a80c3a96ff09f9a8020f09f9a80c3a96f6ff09f9a804d6f4d206fc3a9f09f9a8020c3a96f204df09f9a80c3a9c3a9204dc3a96ff09f9a806f6f6ff09f9a806f6ff09f9a80c3a96f6f0000000000000000000000000000000000000000000000000000000000000000005c4d6f6f20c3a9f09f9a80f09f9a804dc3a94d6f6fc3a96f206ff09f9a804df09f9a80c3a94d6f204d6f4d4d6ff09f9a804df09f9a806ff09f9a80c3a96f6f20f09f9a806f6f4d6f4df09f9a80f09f9a806fc3a94df09f9a8020c3a9200000000000000000000000000000000000000000000000000000000000000000000000104d6f6f20c3a9f09f9a80f09f9a80c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000bd7aaeeff42f8781ae7d3245f5f6000000000000000000000000000000000000ade9b99c9c96a7428a2b28c52c900000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000952de768dfee2aca882015d61864000000000000000000000000000000000000ead228233bf60a6e27c1abfa8ac200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000006ed9aacb7eb566122e035601964d00000000000000000000000000000000000000000000000000000000000000002d4d4e1e6fc134a99e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000005e000000000000000000000000000000000000000000000000000000000000009200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000005a4d6f6f20c3a9f09f9a806ff09f9a804dc3a9c3a96fc3a94d20f09f9a806f20c3a96fc3a9f09f9a804dc3a9f09f9a8020206ff09f9a80206ff09f9a80f09f9a80c3a96f4dc3a96f204d4d6f6f4d20c3a96f4df09f9a80c3a9c3a9000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffb50ccfc2b0a27700000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000022068af47ae2029cc39b842f7c217b686583617e6040b57bcf2e4e38a24212a540083b6e22b89b4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001b138aa49c12a635e2126c57c079d8762f3c25027e0d97ab21e57a6c6c88f4ad500000000000000000000000000000000000000000000000000000000000000534d6f6f20c3a9f09f9a804dc3a94d6f6f6ff09f9a80c3a96f20206f4df09f9a804dc3a94d4d4df09f9a8020f09f9a80c3a96fc3a9206ff09f9a8020f09f9a80c3a96f6f204df09f9a80c3a9206f6f20f09f9a80000000000000000000000000000000000000000000000000000000000000000021fb3354716fdd255c3f1a20f2000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000209cda0d819f4ddcd4476fdf3cb19b4a93f51408ba361c97bcce02be000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b1f5923e517207ee2fb4b4bee0ab3d3d19e263ff0000000000000000000000003e6a520ea9d8753ce9aaa5f8749fdaabdde23b92000000000000000000000000dd4b72b027345beac2cb6315275d601200d78b15000000000000000000000000319a738ef3fb5aea84681a2ede9544c1d6f1a794000000000000000000000000839183e24c35c4358010dc838c766db13436beee0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004a4d6f6f20c3a9f09f9a80f09f9a80c3a96f4dc3a9206fc3a96f6f206f4dc3a96f6f6f6ff09f9a80c3a9f09f9a80f09f9a8020f09f9a80f09f9a804d6f6fc3a9f09f9a806f6fc3a96fc3a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000729328d745d7280a97aabb91b2553f06d3c85a9e000000000000000000000000000000000000000000000000000000000000003a4d6f6f20c3a9f09f9a80c3a9c3a96f20c3a94d6f6ff09f9a806f6f6f2020f09f9a806f6fc3a9c3a96f204d4d20f09f9a804d4df09f9a804d202000000000000000000000003d5d8a2bfce933d2e746813506090f0194da23fe0d25606b311c89334780780af9905eee153d4581f16ae52561a3c504210000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001a070998e30f82208a475df2e16226cb2c0dc2cdde5d542841a4e6af29c39cc000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f77fae79b343ded5b9800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000404d6f6f20c3a9f09f9a8020c3a920c3a96f206f6f20c3a96fc3a96ff09f9a80206f206fc3a94d4d6fc3a96ff09f9a804d4df09f9a804dc3a96f6f6f6f6f4d4d4d000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000007b6070a262dcfd08377b58214c340000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000279d5f038b08b726ebc86ab04aac00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000006115589314376bbc62d1222989550000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000b65fdf6e52c34a4bec764d385987000000000000000000000000000000000000cc785f5b1dd72eec12a72382803bd46fc91e0203a1e4fc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000009c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d6f6f20c3a9f09f9a80f09f9a806f6f204d6f6f20f09f9a806f20c3a9c3a9c3a9f09f9a806ff09f9a804df09f9a806ff09f9a804df09f9a804d6ff09f9a806f4d204df09f9a804d6f6f204d4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062958f69216ce400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000240330e49ed08cc23605e70513cd47b7ecfd406a59bd6b4c8abec201f64f4148200e932414f0727000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002a4d6f6f20c3a9f09f9a804df09f9a80c3a96ff09f9a80206fc3a94d6f6f6f20204d206f20c3a96f6f6f4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000173e00c63a9eea27b43c7754f1611980edc86af7f2d1a6842463236949bb9837a00000000000000000000000000000000000000000000000000000000000000594d6f6f20c3a9f09f9a806f206fc3a96f6f6f6fc3a9c3a94d6ff09f9a80c3a96fc3a94d6f20f09f9a80f09f9a80c3a9f09f9a806f6ff09f9a80206f4dc3a920f09f9a802020f09f9a806f4d20f09f9a80206f4d6f6f20c3a920000000000000000000000000000000000000000000000000000015767a582e082d8b3de648540c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000203d2b2a31720f2131dfa00e8ee3315ede5f95edd33a9018ba528d7e000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fea5a295aa12fbd82bae28fed0e00eafba5d4d3500000000000000000000000021d389e6640268287eb7838576dcb3277bad6e1300000000000000000000000027b65f3338d28cc7f091022c3d1bcc3ae83b13a40000000000000000000000005beb62106abda3511dad7a32556a7eeade46b0e0000000000000000000000000140278b84f0cd62899abfd20d159e03460490566000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000144d6f6f20c3a9f09f9a806ff09f9a806f6f20204d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000003800000000000000000000000002ddc2b97fb0f70b538412ed393adcdc88edd4c4800000000000000000000000000000000000000000000000000000000000000514d6f6f20c3a9f09f9a80206f4d206f4d204dc3a9c3a94d4d6f6f6f4d6f6f6fc3a9c3a94d2020206f6f6f4d2020204d20c3a94d6f6ff09f9a80c3a96f4d6ff09f9a8020f09f9a806ff09f9a804df09f9a800000000000000000000000000000000000000000e78fc2df20febd331f2f845acf60009a63596675aa5dbe6b0e78a45058973cd7cb2d84fe12a3c198b1842a0bbe9ddb0ddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e0ebf347d511750a76c97ec85df0064defb2112a459ce2682f4de3ee108d74000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001ccdd6a90e30070c8d89200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e4d6f6f20c3a9f09f9a804d4dc3a920f09f9a806f6f6fc3a96f206f6f6ff09f9a8020206f6f4dc3a96f206f6f20f09f9a804d206f6f4df09f9a80f09f9a80c3a9c3a9c3a9c3a94d4d4dc3a96f4d4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504d6f6f20c3a9f09f9a8020c3a94dc3a9c3a94df09f9a806fc3a94d6fc3a920c3a94d6f6f4d6ff09f9a806f6f6f206fc3a94d6f6f6f206f206f20f09f9a80f09f9a8020c3a96fc3a96f6f6f20c3a9c3a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f4d6f6f20c3a9f09f9a80c3a9f09f9a806f4df09f9a80f09f9a806f4dc3a96f20f09f9a806ff09f9a80204d4d6f6f206f6f4d4d4d6f20f09f9a80c3a94d6fc3a96f6f4d6f4d20f09f9a8020f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000877c3a9c1ab582dfb7b8225a085000000000000000000000000000000000000d72fd802e650189420f0c2ff591b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000a417353a7da761dd39dedcfa2fd400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "random-((bool,bool,string,bytes3[],address),int112,string[4],bool,(address,uint32[1],(int88[3][2],string),(string,uint96,((bytes15,address,int192,bool,((string[3])))[4],bytes1,(string,(bytes20,(string,((bool,bool),address,bool,bool,int240),uint32[3],(address,uint248[1]),string)),bool),bytes19,(string[][1])),bool[2],string)))", + "type": "((bool,bool,string,bytes3[],address),int112,string[4],bool,(address,uint32[1],(int88[3][2],string),(string,uint96,((bytes15,address,int192,bool,((string[3])))[4],bytes1,(string,(bytes20,(string,((bool,bool),address,bool,bool,int240),uint32[3],(address,uint248[1]),string)),bool),bytes19,(string[][1])),bool[2],string)))", + "value": [ + [ + true, + false, + "Moo é🚀oé oMoo🚀 o 🚀o🚀o🚀🚀o🚀oéM MM🚀oooMooMM 🚀oé oé éoMo ooo", + ["0x0f921c", "0x1e0e9f", "0xd4e216"], + "0x5F62F0cDDA00Ca0058C649E24dfF47DBDCAFc99F" + ], + "229809142055791099499100764505283", + [ + "Moo é🚀é🚀🚀🚀🚀", + "Moo é🚀é🚀o🚀oM 🚀oooo", + "Moo é🚀 éé é oMééMo éM o🚀ooMo Méoo🚀 MoéM o🚀oM éMM🚀🚀🚀o oéoo o", + "Moo é🚀 oéooéé" + ], + true, + [ + "0xE972cf1fD035e5f44c17ba7B2CfE6E7006834c95", + ["2722283023"], + [ + [ + [ + "-153706940789971282110150562", + "-84948272298763788328565431", + "-12179002006932522499700625" + ], + [ + "-1153595338901722314148663", + "106025502107731607551969080", + "-92623606922103469825682763" + ] + ], + "Moo é🚀🚀 o 🚀oé 🚀🚀 🚀 ééooéoéo " + ], + [ + "Moo é🚀", + "28610939720196723693041822565", + [ + [ + [ + "0xec366485ec6d9c690515f6ffaefb77", + "0xc7a6bE0463115cf55D197A241696Bf0a278668D7", + "-1784580040333686047436184849061162100640945103813418928162", + true, + [ + [ + [ + "Moo é🚀Méo ", + "Moo é🚀MM ", + "Moo é🚀🚀🚀 oéo🚀🚀oMo🚀M🚀 🚀 🚀oMM" + ] + ] + ] + ], + [ + "0x4b20ca764fc89d49984d8828034102", + "0x546E3D2Ec295F2FdaF00A28579014eA427AD2df6", + "470943194378295996088521481971778550562517747326576357453", + false, + [ + [ + [ + "Moo é🚀oéoooMooM🚀🚀o🚀oéoM🚀oo🚀oMééooéoé🚀oo MooM🚀", + "Moo é🚀éoMé🚀 🚀🚀oMoéMoMo🚀éé🚀Mo éé éMo🚀oMMooo éoé M🚀Mo", + "Moo é🚀é🚀oM oo 🚀🚀 MMMo o🚀oMMoMMé 🚀🚀 Mo Mé🚀o M oM🚀o 🚀é🚀" + ] + ] + ] + ], + [ + "0xf61e317938a183234db405af4fe70e", + "0x28B50C1856955065Fd08D2886826ab420be4777D", + "2439801656637368195278225504651474965397153923796635030940", + true, + [ + [ + [ + "Moo é🚀oéM oé o oo MMooooMMo éé Moo MoM", + "Moo é🚀", + "Moo é🚀" + ] + ] + ] + ], + [ + "0x0fa48d7828d6719ff5ec356c9f935a", + "0xcC57056EeDfdC23fbB21c79D986a90C5F4fb9Afa", + "1799155082755164624628582667093781160445312328207140236193", + false, + [ + [ + [ + "Moo é🚀 ", + "Moo é🚀o🚀MoMM 🚀 Moéé oM🚀ééo MMoéM🚀 oMoé oo", + "Moo é🚀ooMo🚀oo o oM o🚀oM M ooMoooo é🚀oo🚀 éo🚀M🚀" + ] + ] + ] + ] + ], + "0x56", + [ + "Moo é🚀", + [ + "0x8c49432712f2798ba72867212740aa3801fa7f9c", + [ + "Moo é🚀oééooo🚀o", + [ + [false, true], + "0x5F44a768DF18779e6f48F2D648A30dd4806D3c2F", + false, + false, + "83184784606457620839490983014002600873244323012114855816796594634254944" + ], + ["2059575334", "39634417", "1311059972"], + [ + "0xdb0474Af174cdA27C222D6fa2CA36D58193C5309", + [ + "247239065641627863986524797218089651309403941954423373021184970812457668181" + ] + ], + "Moo é🚀Mo🚀 oMo o🚀oMoMM🚀oMM🚀éM oo o🚀oMoooo 🚀🚀 oMé🚀 é o " + ] + ], + false + ], + "0xfc9665e2aa3c3e5c2ee69f78700e8df696ef72", + [ + [ + [ + "Moo é🚀o ooéMMoéMMo MMoo🚀o éoé🚀o", + "Moo é🚀o🚀oMMMé oéoMé🚀MoééooM 🚀", + "Moo é🚀", + "Moo é🚀oé🚀oM" + ] + ] + ] + ], + [true, true], + "Moo é🚀🚀 o🚀ooM 🚀oMé🚀oMM" + ] + ] + ], + "verbose": { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": false + }, + { + "type": "string", + "value": "Moo é🚀oé oMoo🚀 o 🚀o🚀o🚀🚀o🚀oéM MM🚀oooMooMM 🚀oé oé éoMo ooo" + }, + { + "type": "array", + "value": [ + { + "type": "hexstring", + "value": "0x0f921c" + }, + { + "type": "hexstring", + "value": "0x1e0e9f" + }, + { + "type": "hexstring", + "value": "0xd4e216" + } + ] + }, + { + "type": "address", + "value": "0x5F62F0cDDA00Ca0058C649E24dfF47DBDCAFc99F" + } + ] + }, + { + "type": "number", + "value": "229809142055791099499100764505283" + }, + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀é🚀🚀🚀🚀" + }, + { + "type": "string", + "value": "Moo é🚀é🚀o🚀oM 🚀oooo" + }, + { + "type": "string", + "value": "Moo é🚀 éé é oMééMo éM o🚀ooMo Méoo🚀 MoéM o🚀oM éMM🚀🚀🚀o oéoo o" + }, + { + "type": "string", + "value": "Moo é🚀 oéooéé" + } + ] + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xE972cf1fD035e5f44c17ba7B2CfE6E7006834c95" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "2722283023" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-153706940789971282110150562" + }, + { + "type": "number", + "value": "-84948272298763788328565431" + }, + { + "type": "number", + "value": "-12179002006932522499700625" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "-1153595338901722314148663" + }, + { + "type": "number", + "value": "106025502107731607551969080" + }, + { + "type": "number", + "value": "-92623606922103469825682763" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀 o 🚀oé 🚀🚀 🚀 ééooéoéo " + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "number", + "value": "28610939720196723693041822565" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xec366485ec6d9c690515f6ffaefb77" + }, + { + "type": "address", + "value": "0xc7a6bE0463115cf55D197A241696Bf0a278668D7" + }, + { + "type": "number", + "value": "-1784580040333686047436184849061162100640945103813418928162" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀Méo " + }, + { + "type": "string", + "value": "Moo é🚀MM " + }, + { + "type": "string", + "value": "Moo é🚀🚀🚀 oéo🚀🚀oMo🚀M🚀 🚀 🚀oMM" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x4b20ca764fc89d49984d8828034102" + }, + { + "type": "address", + "value": "0x546E3D2Ec295F2FdaF00A28579014eA427AD2df6" + }, + { + "type": "number", + "value": "470943194378295996088521481971778550562517747326576357453" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéoooMooM🚀🚀o🚀oéoM🚀oo🚀oMééooéoé🚀oo MooM🚀" + }, + { + "type": "string", + "value": "Moo é🚀éoMé🚀 🚀🚀oMoéMoMo🚀éé🚀Mo éé éMo🚀oMMooo éoé M🚀Mo" + }, + { + "type": "string", + "value": "Moo é🚀é🚀oM oo 🚀🚀 MMMo o🚀oMMoMMé 🚀🚀 Mo Mé🚀o M oM🚀o 🚀é🚀" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0xf61e317938a183234db405af4fe70e" + }, + { + "type": "address", + "value": "0x28B50C1856955065Fd08D2886826ab420be4777D" + }, + { + "type": "number", + "value": "2439801656637368195278225504651474965397153923796635030940" + }, + { + "type": "boolean", + "value": true + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀oéM oé o oo MMooooMMo éé Moo MoM" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x0fa48d7828d6719ff5ec356c9f935a" + }, + { + "type": "address", + "value": "0xcC57056EeDfdC23fbB21c79D986a90C5F4fb9Afa" + }, + { + "type": "number", + "value": "1799155082755164624628582667093781160445312328207140236193" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀 " + }, + { + "type": "string", + "value": "Moo é🚀o🚀MoMM 🚀 Moéé oM🚀ééo MMoéM🚀 oMoé oo" + }, + { + "type": "string", + "value": "Moo é🚀ooMo🚀oo o oM o🚀oM M ooMoooo é🚀oo🚀 éo🚀M🚀" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "hexstring", + "value": "0x56" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "object", + "value": [ + { + "type": "hexstring", + "value": "0x8c49432712f2798ba72867212740aa3801fa7f9c" + }, + { + "type": "object", + "value": [ + { + "type": "string", + "value": "Moo é🚀oééooo🚀o" + }, + { + "type": "object", + "value": [ + { + "type": "object", + "value": [ + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "address", + "value": "0x5F44a768DF18779e6f48F2D648A30dd4806D3c2F" + }, + { + "type": "boolean", + "value": false + }, + { + "type": "boolean", + "value": false + }, + { + "type": "number", + "value": "83184784606457620839490983014002600873244323012114855816796594634254944" + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "2059575334" + }, + { + "type": "number", + "value": "39634417" + }, + { + "type": "number", + "value": "1311059972" + } + ] + }, + { + "type": "object", + "value": [ + { + "type": "address", + "value": "0xdb0474Af174cdA27C222D6fa2CA36D58193C5309" + }, + { + "type": "array", + "value": [ + { + "type": "number", + "value": "247239065641627863986524797218089651309403941954423373021184970812457668181" + } + ] + } + ] + }, + { + "type": "string", + "value": "Moo é🚀Mo🚀 oMo o🚀oMoMM🚀oMM🚀éM oo o🚀oMoooo 🚀🚀 oMé🚀 é o " + } + ] + } + ] + }, + { + "type": "boolean", + "value": false + } + ] + }, + { + "type": "hexstring", + "value": "0xfc9665e2aa3c3e5c2ee69f78700e8df696ef72" + }, + { + "type": "object", + "value": [ + { + "type": "array", + "value": [ + { + "type": "array", + "value": [ + { + "type": "string", + "value": "Moo é🚀o ooéMMoéMMo MMoo🚀o éoé🚀o" + }, + { + "type": "string", + "value": "Moo é🚀o🚀oMMMé oéoMé🚀MoééooM 🚀" + }, + { + "type": "string", + "value": "Moo é🚀" + }, + { + "type": "string", + "value": "Moo é🚀oé🚀oM" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "array", + "value": [ + { + "type": "boolean", + "value": true + }, + { + "type": "boolean", + "value": true + } + ] + }, + { + "type": "string", + "value": "Moo é🚀🚀 o🚀ooM 🚀oMé🚀oMM" + } + ] + } + ] + } + ] + }, + "bytecode": "0x608060405234801561001057600080fd5b50611927806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861004e565b60405161004591906113e5565b60405180910390f35b610056610b20565b61005e610b20565b610066610b60565b60018152600060208083018290526040805160808101909152605e80825290916115e3908301396040838101919091528051600380825260808201909252600092509060208201606080368337505081519192506203e48760ea1b9182915083906000906100d6576100d66114fe565b6001600160e81b031990921660209283029190910190910152508051621e0e9f60e81b9081908390600190811061010f5761010f6114fe565b6001600160e81b031990921660209283029190910190910152508051626a710b60e91b90819083906002908110610148576101486114fe565b6001600160e81b0319909216602092830291909101820152606084019290925250735f62f0cdda00ca0058c649e24dff47dbdcafc99f60808301529082526d0b549962e55fee3e17586ce604c3908201526101a1610b9c565b604080518082018252601c81527f4d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a80f09f9a80f09f9a80000000006020808301919091529083528151606081019092526022808352600092916116a59083013990508082600160200201819052505060006040518060800160405280605d81526020016117e3605d9139604080840191909152805180820190915260158152744d6f6f20c3a9f09f9a8020206fc3a96f6fc3a9c3a960581b6020820152905080826003602002015250604082015260016060820152610271610bc3565b73e972cf1fd035e5f44c17ba7b2cfe6e7006834c958152610290610c00565b63a242be0f815260208201526102a4610c1e565b6102ac610c3e565b6102b4610c6b565b6a7f24b5f4df1c11e65f77a11981526a46447f119a49ac39d2fab61960208201526a0a130105902afd31a5f79019604082015281526102f1610c6b565b69f4488754510fe0598b361981526a57b3c5fc77d4552cef87386020808301919091526a4c9dcfcadbff6d47356d4a1960408084019190915283820192909252918352805160608101909152603480825260009261164190830139602083015250604082015261035f610c89565b60408051808201909152600a8152689adede418753e13f3560b71b6020808301919091529082526b5c726a26130f7a1972c92b659082015261039f610cb6565b6103a7610d04565b6103af610d31565b6eec366485ec6d9c690515f6ffaefb7760881b815273c7a6be0463115cf55d197a241696bf0a278668d760208201527748c7e28ddc0a0f4bedf3ed51051d93970415e4080d33c8211960408201526001606082015261040c610d5d565b610414610d6c565b61041c610d7b565b604080518082018252600f81526e026b7b79061d4f84fcd4026e1d4b79608d1b60208083019190915290835281518083018352600d81526c026b7b79061d4f84fcd4026a69609d1b81830152838201528151606081019092526039808352600092916116c790830139604083015250815281526080820152815261049e610d31565b6e2590653b27e44ea4cc26c41401a08160891b815273546e3d2ec295f2fdaf00a28579014ea427ad2df66020820152771334e059b350f5c95319b550d128140e4b2587209345f04d6040820152600060608201526104fa610d5d565b610502610d6c565b61050a610d7b565b60006040518060800160405280604c8152602001611741604c91398252506040805160808101909152605680825260009190611840602083013990508082600160200201819052505060006040518060800160405280605e8152602001611585605e9139604083015250815281526080820152602082015261058a610d31565b6e7b0f18bc9c50c191a6da02d7a7f38760891b81527328b50c1856955065fd08d2886826ab420be4777d6020820152776380b7c479e2d6817be556557e585d9c6304ab117e1d159c6040820152600160608201526105e6610d5d565b6105ee610d6c565b6105f6610d7b565b60006040518060600160405280602f81526020016118c3602f9139825250604080518082018252600a808252689adede418753e13f3560b71b60208084018290528086019390935283518085019094529083529082015280826002602002015250815281526080820152604082015261066d610d31565b6e07d246bc146b38cffaf61ab64fc9ad60891b815273cc57056eedfdc23fbb21c79d986a90c5f4fb9afa60208201527749600e3692600b258c083335613e222532256b33d1c1aba16040820152600060608201526106c9610d5d565b6106d1610d6c565b6106d9610d7b565b604080518082018252600d81526c026b7b79061d4f84fcd4010101609d1b6020808301919091529083528151608081019092526041808352600092916117009083013990508082600160200201819052505060006040518060800160405280604881526020016115156048913960408301525081528152608082015260608201528152602b60f91b602082015261076e610d95565b60408051808201909152600a8152689adede418753e13f3560b71b60208201528152610798610dbc565b73231250c9c4bc9e62e9ca19c849d02a8e007e9fe760621b81526107ba610dd2565b604080518082018252601781527f4d6f6f20c3a9f09f9a806fc3a9c3a96f6f6ff09f9a806f000000000000000000602080830191909152908352815160e081018352600060a0820181815260c08301829052825281830181815282850182815260608401838152608085018481528751808901909852848852600188880152968552735f44a768df18779e6f48f2d648a30dd4806d3c2f909252829052527d0c0d7ec1f5284bfcc834ae5e1635185dac60301a21ab37e55f2953286a60909252820152610885610c6b565b637ac2a026815263025cc5f16020820152634e2530046040808301919091528201526108af610e38565b73db0474af174cda27c222d6fa2ca36d58193c530981526108ce610c00565b7e8beeaea132cc63386b43c8a606c19a55825965283f834d42b1243c43aece55815260208281019190915260608301919091526040805160808101909152605680825260009261178d908301396080830152506020808301919091528201526000604080830191909152820152727e4b32f1551e1f2e17734fbc380746fb4b77b960691b606082015261097260408051808201909152606060208201908152815290565b60408051602081019091526060815260408051600480825260a08201909252600091816020015b606081526020019060019003908161099957905050905060006040518060600160405280602d8152602001611896602d9139905080826000815181106109e1576109e16114fe565b60200260200101819052505060006040518060600160405280603081526020016116756030913990508082600181518110610a1e57610a1e6114fe565b60200260200101819052505060006040518060400160405280600a8152602001689adede418753e13f3560b71b81525090508082600281518110610a6457610a646114fe565b6020026020010181905250506000604051806040016040528060138152602001724d6f6f20c3a9f09f9a806fc3a9f09f9a806f4d60681b81525090508082600381518110610ab457610ab46114fe565b6020908102919091010152508152815260808201526040820152610ad6610e5b565b600180825260208083019190915260608084019290925260408051928301905260288083526000929161155d90830139608080840191909152606084019290925250820152919050565b6040518060a00160405280610b33610b60565b815260006020820152604001610b47610b9c565b815260006020820152604001610b5b610bc3565b905290565b6040518060a00160405280600015158152602001600015158152602001606081526020016060815260200160006001600160a01b031681525090565b60405180608001604052806004905b6060815260200190600190039081610bab5790505090565b604051806080016040528060006001600160a01b03168152602001610be6610c00565b8152602001610bf3610c1e565b8152602001610b5b610c89565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280610c31610c3e565b8152602001606081525090565b60405180604001604052806002905b610c55610c6b565b815260200190600190039081610c4d5790505090565b60405180606001604052806003906020820280368337509192915050565b6040805160a0810182526060815260006020820152908101610ca9610cb6565b8152602001610c31610e5b565b6040518060a00160405280610cc9610d04565b815260006020820152604001610cdd610d95565b815260006020820152604001610b5b60408051808201909152606060208201908152815290565b60405180608001604052806004905b610d1b610d31565b815260200190600190039081610d135790505090565b6040805160a081018252600080825260208201819052918101829052606081019190915260808101610b5b5b6040518060200160405280610b5b5b6040518060200160405280610b5b5b604080516060808201909252908152600260208201610bab565b604051806060016040528060608152602001610daf610dbc565b8152600060209091015290565b604080518082019091526000815260208101610b5b5b6040518060a0016040528060608152602001610e226040805160e081018252600060a0820181815260c0830182905282526020820181905291810182905260608101829052608081019190915290565b8152602001610e2f610c6b565b8152602001610c315b604051806040016040528060006001600160a01b03168152602001610b5b610c00565b60405180604001604052806002906020820280368337509192915050565b6000815180845260005b81811015610e9f57602081850181015186830182015201610e83565b81811115610eb1576000602083870101525b50601f01601f19169290920160200192915050565b600082608081018360005b6004811015610f00578383038752610eea838351610e79565b6020978801979093509190910190600101610ed1565b509095945050505050565b8060005b6003811015610f3457815163ffffffff16845260209384019390910190600101610f0f565b50505050565b80516001600160a01b0316825260208082015181840160005b6001811015610f795782516001600160f81b031682529183019190830190600101610f53565b505050505050565b6000815160608452610f966060850182610e79565b90506020808401518583038287015260406bffffffffffffffffffffffff198251168452828201519150808385015281516101a082860152610fdc6101e0860182610e79565b905083830151805180511515606088015285810151151560808801525060018060a01b03858201511660a087015282810151151560c08701526060810151151560e08701526080810151601d0b61010087015250818301519350611044610120860185610f0b565b60608301519350611059610180860185610f3a565b6080830151858203603f19016101c087015293506110778185610e79565b94505080860151925061108d8188018415159052565b509195945050505050565b80516020808452600091604085019085830184805b60018082106110bc5750611123565b601f198a870381018552855180518089529089019089890190600581901b8a018b01875b8281101561110b57858c83030184526110fa828651610e79565b948d0194938d0193915086016110e0565b509950505095880195505050918501916001016110ad565b5092979650505050505050565b8060005b6002811015610f345781511515845260209384019390910190600101611134565b600060c0825181855261116a82860182610e79565b905060206bffffffffffffffffffffffff8186015116818701526040808601518784038289015260a0808501825182875281829050610120880192506000805b600481101561126857898503609f190183528351805170ffffffffffffffffffffffffffffffffff19168652898101516001600160a01b03168a8701528881015160170b89870152606080820151151590870152608090810151908601879052518686018a9052518b86018a9052610140860160e08701845b60038110156112525760df19898403018252611240838551610e79565b938d01939250908c0190600101611223565b50909650505092880192918801916001016111aa565b50505050848301516001600160f81b03191686860152838301518682038588015296506112958188610f81565b965050606082015193506112bb60608601856cffffffffffffffffffffffffff19169052565b6080820151935084860360808601526112d48685611098565b9550606088015194506112ea60608a0186611130565b60808801519450888603818a0152505050506113068282610e79565b95945050505050565b80516001600160a01b031682526020808201516000916080850191818601845b600181101561135257825163ffffffff168252918301919083019060010161132f565b5050506040848101516080918701919091528051926000905b60028210156113b05784518160005b600381101561139a578251600a0b8252918601919086019060010161137a565b505050938301936001919091019060600161136b565b5050015160e061014086015290506113cc610160850182610e79565b9050606083015184820360608601526113068282611155565b60006020808352835160a0828501528051151560c085015281810151151560e0850152604081015160a0610100860152611423610160860182610e79565b606083015186820360bf1901610120880152805180835290850192506000918501905b808310156114705783516001600160e81b0319168252928501926001929092019190850190611446565b506080840151935061148e6101408801856001600160a01b03169052565b93870151936114a26040880186600d0b9052565b60408801519450601f199350838782030160608801526114c28186610ec6565b945050505060608501516114da608086018215159052565b506080850151818584030160a08601526114f4838261130f565b9695505050505050565b634e487b7160e01b600052603260045260246000fdfe4d6f6f20c3a9f09f9a806f6f4d6ff09f9a806f6f206f206f4d206ff09f9a806f4d204d20206f6f4d6f6f6f6f2020c3a9f09f9a806f6ff09f9a802020c3a96ff09f9a804df09f9a804d6f6f20c3a9f09f9a80f09f9a80206ff09f9a806f6f4d2020f09f9a806f4dc3a9f09f9a806f4d4d4d6f6f20c3a9f09f9a80c3a9f09f9a806f4d206f6f20f09f9a80f09f9a802020204d4d4d6f206ff09f9a806f4d4d6f4d4dc3a920f09f9a80f09f9a80204d6f204dc3a9f09f9a806f204d206f4df09f9a806f2020f09f9a80c3a9f09f9a804d6f6f20c3a9f09f9a806fc3a92020206f4d6f6ff09f9a80206f20f09f9a806ff09f9a806ff09f9a80f09f9a806ff09f9a806fc3a94d20204d4df09f9a806f6f6f4d6f6f4d4d20f09f9a806fc3a920206fc3a920c3a96f4d6f20206f6f6f4d6f6f20c3a9f09f9a80f09f9a80206f20f09f9a806fc3a920f09f9a80f09f9a8020f09f9a8020c3a9c3a96f6fc3a96fc3a96f204d6f6f20c3a9f09f9a806ff09f9a806f4d4d4dc3a920206fc3a96f4dc3a9f09f9a804d6fc3a9c3a96f6f4d20f09f9a804d6f6f20c3a9f09f9a80c3a9f09f9a806ff09f9a806f4d202020f09f9a806f6f6f6f4d6f6f20c3a9f09f9a80f09f9a80f09f9a80206fc3a96ff09f9a80f09f9a806f4d6ff09f9a804df09f9a8020f09f9a802020f09f9a806f4d4d4d6f6f20c3a9f09f9a806ff09f9a804d6f4d4d20f09f9a8020204d6fc3a9c3a920206f4df09f9a80c3a9c3a96f204d4d6fc3a94df09f9a80206f4d6fc3a9206f6f4d6f6f20c3a9f09f9a806fc3a96f6f6f4d6f6f4df09f9a80f09f9a806ff09f9a806fc3a96f4df09f9a806f6ff09f9a806f4dc3a9c3a96f6fc3a96fc3a9f09f9a806f6f204d6f6f4df09f9a804d6f6f20c3a9f09f9a804d6ff09f9a80206f4d6f206ff09f9a806f4d6f4d4df09f9a806f4d4df09f9a80c3a94d2020206f6f206ff09f9a806f4d6f6f6f6f20f09f9a80f09f9a80206f4dc3a9f09f9a8020c3a9206f204d6f6f20c3a9f09f9a8020c3a9c3a920c3a9206f4dc3a9c3a94d6f20c3a94d206ff09f9a806f6f4d6f204dc3a96f6ff09f9a8020204d6fc3a94d206ff09f9a806f4d20c3a94d4df09f9a80f09f9a80f09f9a806f206fc3a96f6f20206f4d6f6f20c3a9f09f9a80c3a96f4dc3a9f09f9a8020f09f9a80f09f9a806f4d6fc3a94d6f4d6ff09f9a80c3a9c3a9f09f9a804d6f20c3a9c3a920c3a94d6ff09f9a806f4d4d6f6f6f20c3a96fc3a9204df09f9a804d6f4d6f6f20c3a9f09f9a806f206f6fc3a94d4d6fc3a94d4d6f204d4d6f6ff09f9a806f20c3a96fc3a9f09f9a806f4d6f6f20c3a9f09f9a806fc3a94d206fc3a9206f206f6f204d4d6f6f6f6f4d4d6f20c3a9c3a920204d6f6f204d6f4da2646970667358221220182fa45f8edfddf276aee351d18e21f4b3b151e0733e84c2efda756896decced64736f6c634300080d0033", + "source": "// SPDX-License-Identifier: MIT-License\npragma solidity ^0.8.13;\ncontract Test {\n struct S_01fb8e5b {\n bool s_0;\n bool s_1;\n string s_2;\n bytes3[] s_3;\n address s_4;\n }\n\n struct S_34b651ea {\n int88[3][2] s_0;\n string s_1;\n }\n\n struct S_e9182f36 {\n string[3] s_0;\n }\n\n struct S_98401589 {\n S_e9182f36 s_0;\n }\n\n struct S_7acae4b9 {\n bytes15 s_0;\n address s_1;\n int192 s_2;\n bool s_3;\n S_98401589 s_4;\n }\n\n struct S_25e98821 {\n bool s_0;\n bool s_1;\n }\n\n struct S_3570cd27 {\n S_25e98821 s_0;\n address s_1;\n bool s_2;\n bool s_3;\n int240 s_4;\n }\n\n struct S_b3209696 {\n address s_0;\n uint248[1] s_1;\n }\n\n struct S_e022777e {\n string s_0;\n S_3570cd27 s_1;\n uint32[3] s_2;\n S_b3209696 s_3;\n string s_4;\n }\n\n struct S_a338f6c1 {\n bytes20 s_0;\n S_e022777e s_1;\n }\n\n struct S_867661ce {\n string s_0;\n S_a338f6c1 s_1;\n bool s_2;\n }\n\n struct S_c875c86d {\n string[][1] s_0;\n }\n\n struct S_395c3899 {\n S_7acae4b9[4] s_0;\n bytes1 s_1;\n S_867661ce s_2;\n bytes19 s_3;\n S_c875c86d s_4;\n }\n\n struct S_9a48c4c1 {\n string s_0;\n uint96 s_1;\n S_395c3899 s_2;\n bool[2] s_3;\n string s_4;\n }\n\n struct S_5a8ce5dd {\n address s_0;\n uint32[1] s_1;\n S_34b651ea s_2;\n S_9a48c4c1 s_3;\n }\n\n struct S_06b53856 {\n S_01fb8e5b s_0;\n int112 s_1;\n string[4] s_2;\n bool s_3;\n S_5a8ce5dd s_4;\n }\n\n function test () public pure returns (S_06b53856 memory) {\n S_06b53856 memory r;\n {\n S_01fb8e5b memory r_0;\n {\n bool r_0_0 = true;\n r_0.s_0 = r_0_0;\n }\n {\n bool r_0_1 = false;\n r_0.s_1 = r_0_1;\n }\n {\n string memory r_0_2 = unicode\"Moo é🚀oé oMoo🚀 o 🚀o🚀o🚀🚀o🚀oéM MM🚀oooMooMM 🚀oé oé éoMo ooo\";\n r_0.s_2 = r_0_2;\n }\n {\n bytes3[] memory r_0_3 = new bytes3[](3);\n {\n bytes3 r_0_3_0 = bytes3(0x0f921c);\n r_0_3[0] = r_0_3_0;\n }\n {\n bytes3 r_0_3_1 = bytes3(0x1e0e9f);\n r_0_3[1] = r_0_3_1;\n }\n {\n bytes3 r_0_3_2 = bytes3(0xd4e216);\n r_0_3[2] = r_0_3_2;\n }\n r_0.s_3 = r_0_3;\n }\n {\n address r_0_4 = 0x5F62F0cDDA00Ca0058C649E24dfF47DBDCAFc99F;\n r_0.s_4 = r_0_4;\n }\n r.s_0 = r_0;\n }\n {\n int112 r_1 = 229809142055791099499100764505283;\n r.s_1 = r_1;\n }\n {\n string[4] memory r_2;\n {\n string memory r_2_0 = unicode\"Moo é🚀é🚀🚀🚀🚀\";\n r_2[0] = r_2_0;\n }\n {\n string memory r_2_1 = unicode\"Moo é🚀é🚀o🚀oM 🚀oooo\";\n r_2[1] = r_2_1;\n }\n {\n string memory r_2_2 = unicode\"Moo é🚀 éé é oMééMo éM o🚀ooMo Méoo🚀 MoéM o🚀oM éMM🚀🚀🚀o oéoo o\";\n r_2[2] = r_2_2;\n }\n {\n string memory r_2_3 = unicode\"Moo é🚀 oéooéé\";\n r_2[3] = r_2_3;\n }\n r.s_2 = r_2;\n }\n {\n bool r_3 = true;\n r.s_3 = r_3;\n }\n {\n S_5a8ce5dd memory r_4;\n {\n address r_4_0 = 0xE972cf1fD035e5f44c17ba7B2CfE6E7006834c95;\n r_4.s_0 = r_4_0;\n }\n {\n uint32[1] memory r_4_1;\n {\n uint32 r_4_1_0 = 2722283023;\n r_4_1[0] = r_4_1_0;\n }\n r_4.s_1 = r_4_1;\n }\n {\n S_34b651ea memory r_4_2;\n {\n int88[3][2] memory r_4_2_0;\n {\n int88[3] memory r_4_2_0_0;\n {\n int88 r_4_2_0_0_0 = -153706940789971282110150562;\n r_4_2_0_0[0] = r_4_2_0_0_0;\n }\n {\n int88 r_4_2_0_0_1 = -84948272298763788328565431;\n r_4_2_0_0[1] = r_4_2_0_0_1;\n }\n {\n int88 r_4_2_0_0_2 = -12179002006932522499700625;\n r_4_2_0_0[2] = r_4_2_0_0_2;\n }\n r_4_2_0[0] = r_4_2_0_0;\n }\n {\n int88[3] memory r_4_2_0_1;\n {\n int88 r_4_2_0_1_0 = -1153595338901722314148663;\n r_4_2_0_1[0] = r_4_2_0_1_0;\n }\n {\n int88 r_4_2_0_1_1 = 106025502107731607551969080;\n r_4_2_0_1[1] = r_4_2_0_1_1;\n }\n {\n int88 r_4_2_0_1_2 = -92623606922103469825682763;\n r_4_2_0_1[2] = r_4_2_0_1_2;\n }\n r_4_2_0[1] = r_4_2_0_1;\n }\n r_4_2.s_0 = r_4_2_0;\n }\n {\n string memory r_4_2_1 = unicode\"Moo é🚀🚀 o 🚀oé 🚀🚀 🚀 ééooéoéo \";\n r_4_2.s_1 = r_4_2_1;\n }\n r_4.s_2 = r_4_2;\n }\n {\n S_9a48c4c1 memory r_4_3;\n {\n string memory r_4_3_0 = unicode\"Moo é🚀\";\n r_4_3.s_0 = r_4_3_0;\n }\n {\n uint96 r_4_3_1 = 28610939720196723693041822565;\n r_4_3.s_1 = r_4_3_1;\n }\n {\n S_395c3899 memory r_4_3_2;\n {\n S_7acae4b9[4] memory r_4_3_2_0;\n {\n S_7acae4b9 memory r_4_3_2_0_0;\n {\n bytes15 r_4_3_2_0_0_0 = bytes15(0xec366485ec6d9c690515f6ffaefb77);\n r_4_3_2_0_0.s_0 = r_4_3_2_0_0_0;\n }\n {\n address r_4_3_2_0_0_1 = 0xc7a6bE0463115cf55D197A241696Bf0a278668D7;\n r_4_3_2_0_0.s_1 = r_4_3_2_0_0_1;\n }\n {\n int192 r_4_3_2_0_0_2 = -1784580040333686047436184849061162100640945103813418928162;\n r_4_3_2_0_0.s_2 = r_4_3_2_0_0_2;\n }\n {\n bool r_4_3_2_0_0_3 = true;\n r_4_3_2_0_0.s_3 = r_4_3_2_0_0_3;\n }\n {\n S_98401589 memory r_4_3_2_0_0_4;\n {\n S_e9182f36 memory r_4_3_2_0_0_4_0;\n {\n string[3] memory r_4_3_2_0_0_4_0_0;\n {\n string memory r_4_3_2_0_0_4_0_0_0 = unicode\"Moo é🚀Méo \";\n r_4_3_2_0_0_4_0_0[0] = r_4_3_2_0_0_4_0_0_0;\n }\n {\n string memory r_4_3_2_0_0_4_0_0_1 = unicode\"Moo é🚀MM \";\n r_4_3_2_0_0_4_0_0[1] = r_4_3_2_0_0_4_0_0_1;\n }\n {\n string memory r_4_3_2_0_0_4_0_0_2 = unicode\"Moo é🚀🚀🚀 oéo🚀🚀oMo🚀M🚀 🚀 🚀oMM\";\n r_4_3_2_0_0_4_0_0[2] = r_4_3_2_0_0_4_0_0_2;\n }\n r_4_3_2_0_0_4_0.s_0 = r_4_3_2_0_0_4_0_0;\n }\n r_4_3_2_0_0_4.s_0 = r_4_3_2_0_0_4_0;\n }\n r_4_3_2_0_0.s_4 = r_4_3_2_0_0_4;\n }\n r_4_3_2_0[0] = r_4_3_2_0_0;\n }\n {\n S_7acae4b9 memory r_4_3_2_0_1;\n {\n bytes15 r_4_3_2_0_1_0 = bytes15(0x4b20ca764fc89d49984d8828034102);\n r_4_3_2_0_1.s_0 = r_4_3_2_0_1_0;\n }\n {\n address r_4_3_2_0_1_1 = 0x546E3D2Ec295F2FdaF00A28579014eA427AD2df6;\n r_4_3_2_0_1.s_1 = r_4_3_2_0_1_1;\n }\n {\n int192 r_4_3_2_0_1_2 = 470943194378295996088521481971778550562517747326576357453;\n r_4_3_2_0_1.s_2 = r_4_3_2_0_1_2;\n }\n {\n bool r_4_3_2_0_1_3 = false;\n r_4_3_2_0_1.s_3 = r_4_3_2_0_1_3;\n }\n {\n S_98401589 memory r_4_3_2_0_1_4;\n {\n S_e9182f36 memory r_4_3_2_0_1_4_0;\n {\n string[3] memory r_4_3_2_0_1_4_0_0;\n {\n string memory r_4_3_2_0_1_4_0_0_0 = unicode\"Moo é🚀oéoooMooM🚀🚀o🚀oéoM🚀oo🚀oMééooéoé🚀oo MooM🚀\";\n r_4_3_2_0_1_4_0_0[0] = r_4_3_2_0_1_4_0_0_0;\n }\n {\n string memory r_4_3_2_0_1_4_0_0_1 = unicode\"Moo é🚀éoMé🚀 🚀🚀oMoéMoMo🚀éé🚀Mo éé éMo🚀oMMooo éoé M🚀Mo\";\n r_4_3_2_0_1_4_0_0[1] = r_4_3_2_0_1_4_0_0_1;\n }\n {\n string memory r_4_3_2_0_1_4_0_0_2 = unicode\"Moo é🚀é🚀oM oo 🚀🚀 MMMo o🚀oMMoMMé 🚀🚀 Mo Mé🚀o M oM🚀o 🚀é🚀\";\n r_4_3_2_0_1_4_0_0[2] = r_4_3_2_0_1_4_0_0_2;\n }\n r_4_3_2_0_1_4_0.s_0 = r_4_3_2_0_1_4_0_0;\n }\n r_4_3_2_0_1_4.s_0 = r_4_3_2_0_1_4_0;\n }\n r_4_3_2_0_1.s_4 = r_4_3_2_0_1_4;\n }\n r_4_3_2_0[1] = r_4_3_2_0_1;\n }\n {\n S_7acae4b9 memory r_4_3_2_0_2;\n {\n bytes15 r_4_3_2_0_2_0 = bytes15(0xf61e317938a183234db405af4fe70e);\n r_4_3_2_0_2.s_0 = r_4_3_2_0_2_0;\n }\n {\n address r_4_3_2_0_2_1 = 0x28B50C1856955065Fd08D2886826ab420be4777D;\n r_4_3_2_0_2.s_1 = r_4_3_2_0_2_1;\n }\n {\n int192 r_4_3_2_0_2_2 = 2439801656637368195278225504651474965397153923796635030940;\n r_4_3_2_0_2.s_2 = r_4_3_2_0_2_2;\n }\n {\n bool r_4_3_2_0_2_3 = true;\n r_4_3_2_0_2.s_3 = r_4_3_2_0_2_3;\n }\n {\n S_98401589 memory r_4_3_2_0_2_4;\n {\n S_e9182f36 memory r_4_3_2_0_2_4_0;\n {\n string[3] memory r_4_3_2_0_2_4_0_0;\n {\n string memory r_4_3_2_0_2_4_0_0_0 = unicode\"Moo é🚀oéM oé o oo MMooooMMo éé Moo MoM\";\n r_4_3_2_0_2_4_0_0[0] = r_4_3_2_0_2_4_0_0_0;\n }\n {\n string memory r_4_3_2_0_2_4_0_0_1 = unicode\"Moo é🚀\";\n r_4_3_2_0_2_4_0_0[1] = r_4_3_2_0_2_4_0_0_1;\n }\n {\n string memory r_4_3_2_0_2_4_0_0_2 = unicode\"Moo é🚀\";\n r_4_3_2_0_2_4_0_0[2] = r_4_3_2_0_2_4_0_0_2;\n }\n r_4_3_2_0_2_4_0.s_0 = r_4_3_2_0_2_4_0_0;\n }\n r_4_3_2_0_2_4.s_0 = r_4_3_2_0_2_4_0;\n }\n r_4_3_2_0_2.s_4 = r_4_3_2_0_2_4;\n }\n r_4_3_2_0[2] = r_4_3_2_0_2;\n }\n {\n S_7acae4b9 memory r_4_3_2_0_3;\n {\n bytes15 r_4_3_2_0_3_0 = bytes15(0x0fa48d7828d6719ff5ec356c9f935a);\n r_4_3_2_0_3.s_0 = r_4_3_2_0_3_0;\n }\n {\n address r_4_3_2_0_3_1 = 0xcC57056EeDfdC23fbB21c79D986a90C5F4fb9Afa;\n r_4_3_2_0_3.s_1 = r_4_3_2_0_3_1;\n }\n {\n int192 r_4_3_2_0_3_2 = 1799155082755164624628582667093781160445312328207140236193;\n r_4_3_2_0_3.s_2 = r_4_3_2_0_3_2;\n }\n {\n bool r_4_3_2_0_3_3 = false;\n r_4_3_2_0_3.s_3 = r_4_3_2_0_3_3;\n }\n {\n S_98401589 memory r_4_3_2_0_3_4;\n {\n S_e9182f36 memory r_4_3_2_0_3_4_0;\n {\n string[3] memory r_4_3_2_0_3_4_0_0;\n {\n string memory r_4_3_2_0_3_4_0_0_0 = unicode\"Moo é🚀 \";\n r_4_3_2_0_3_4_0_0[0] = r_4_3_2_0_3_4_0_0_0;\n }\n {\n string memory r_4_3_2_0_3_4_0_0_1 = unicode\"Moo é🚀o🚀MoMM 🚀 Moéé oM🚀ééo MMoéM🚀 oMoé oo\";\n r_4_3_2_0_3_4_0_0[1] = r_4_3_2_0_3_4_0_0_1;\n }\n {\n string memory r_4_3_2_0_3_4_0_0_2 = unicode\"Moo é🚀ooMo🚀oo o oM o🚀oM M ooMoooo é🚀oo🚀 éo🚀M🚀\";\n r_4_3_2_0_3_4_0_0[2] = r_4_3_2_0_3_4_0_0_2;\n }\n r_4_3_2_0_3_4_0.s_0 = r_4_3_2_0_3_4_0_0;\n }\n r_4_3_2_0_3_4.s_0 = r_4_3_2_0_3_4_0;\n }\n r_4_3_2_0_3.s_4 = r_4_3_2_0_3_4;\n }\n r_4_3_2_0[3] = r_4_3_2_0_3;\n }\n r_4_3_2.s_0 = r_4_3_2_0;\n }\n {\n bytes1 r_4_3_2_1 = bytes1(0x56);\n r_4_3_2.s_1 = r_4_3_2_1;\n }\n {\n S_867661ce memory r_4_3_2_2;\n {\n string memory r_4_3_2_2_0 = unicode\"Moo é🚀\";\n r_4_3_2_2.s_0 = r_4_3_2_2_0;\n }\n {\n S_a338f6c1 memory r_4_3_2_2_1;\n {\n bytes20 r_4_3_2_2_1_0 = bytes20(0x8c49432712f2798Ba72867212740AA3801FA7f9C);\n r_4_3_2_2_1.s_0 = r_4_3_2_2_1_0;\n }\n {\n S_e022777e memory r_4_3_2_2_1_1;\n {\n string memory r_4_3_2_2_1_1_0 = unicode\"Moo é🚀oééooo🚀o\";\n r_4_3_2_2_1_1.s_0 = r_4_3_2_2_1_1_0;\n }\n {\n S_3570cd27 memory r_4_3_2_2_1_1_1;\n {\n S_25e98821 memory r_4_3_2_2_1_1_1_0;\n {\n bool r_4_3_2_2_1_1_1_0_0 = false;\n r_4_3_2_2_1_1_1_0.s_0 = r_4_3_2_2_1_1_1_0_0;\n }\n {\n bool r_4_3_2_2_1_1_1_0_1 = true;\n r_4_3_2_2_1_1_1_0.s_1 = r_4_3_2_2_1_1_1_0_1;\n }\n r_4_3_2_2_1_1_1.s_0 = r_4_3_2_2_1_1_1_0;\n }\n {\n address r_4_3_2_2_1_1_1_1 = 0x5F44a768DF18779e6f48F2D648A30dd4806D3c2F;\n r_4_3_2_2_1_1_1.s_1 = r_4_3_2_2_1_1_1_1;\n }\n {\n bool r_4_3_2_2_1_1_1_2 = false;\n r_4_3_2_2_1_1_1.s_2 = r_4_3_2_2_1_1_1_2;\n }\n {\n bool r_4_3_2_2_1_1_1_3 = false;\n r_4_3_2_2_1_1_1.s_3 = r_4_3_2_2_1_1_1_3;\n }\n {\n int240 r_4_3_2_2_1_1_1_4 = 83184784606457620839490983014002600873244323012114855816796594634254944;\n r_4_3_2_2_1_1_1.s_4 = r_4_3_2_2_1_1_1_4;\n }\n r_4_3_2_2_1_1.s_1 = r_4_3_2_2_1_1_1;\n }\n {\n uint32[3] memory r_4_3_2_2_1_1_2;\n {\n uint32 r_4_3_2_2_1_1_2_0 = 2059575334;\n r_4_3_2_2_1_1_2[0] = r_4_3_2_2_1_1_2_0;\n }\n {\n uint32 r_4_3_2_2_1_1_2_1 = 39634417;\n r_4_3_2_2_1_1_2[1] = r_4_3_2_2_1_1_2_1;\n }\n {\n uint32 r_4_3_2_2_1_1_2_2 = 1311059972;\n r_4_3_2_2_1_1_2[2] = r_4_3_2_2_1_1_2_2;\n }\n r_4_3_2_2_1_1.s_2 = r_4_3_2_2_1_1_2;\n }\n {\n S_b3209696 memory r_4_3_2_2_1_1_3;\n {\n address r_4_3_2_2_1_1_3_0 = 0xdb0474Af174cdA27C222D6fa2CA36D58193C5309;\n r_4_3_2_2_1_1_3.s_0 = r_4_3_2_2_1_1_3_0;\n }\n {\n uint248[1] memory r_4_3_2_2_1_1_3_1;\n {\n uint248 r_4_3_2_2_1_1_3_1_0 = 247239065641627863986524797218089651309403941954423373021184970812457668181;\n r_4_3_2_2_1_1_3_1[0] = r_4_3_2_2_1_1_3_1_0;\n }\n r_4_3_2_2_1_1_3.s_1 = r_4_3_2_2_1_1_3_1;\n }\n r_4_3_2_2_1_1.s_3 = r_4_3_2_2_1_1_3;\n }\n {\n string memory r_4_3_2_2_1_1_4 = unicode\"Moo é🚀Mo🚀 oMo o🚀oMoMM🚀oMM🚀éM oo o🚀oMoooo 🚀🚀 oMé🚀 é o \";\n r_4_3_2_2_1_1.s_4 = r_4_3_2_2_1_1_4;\n }\n r_4_3_2_2_1.s_1 = r_4_3_2_2_1_1;\n }\n r_4_3_2_2.s_1 = r_4_3_2_2_1;\n }\n {\n bool r_4_3_2_2_2 = false;\n r_4_3_2_2.s_2 = r_4_3_2_2_2;\n }\n r_4_3_2.s_2 = r_4_3_2_2;\n }\n {\n bytes19 r_4_3_2_3 = bytes19(0xfc9665e2aa3c3e5c2ee69f78700e8df696ef72);\n r_4_3_2.s_3 = r_4_3_2_3;\n }\n {\n S_c875c86d memory r_4_3_2_4;\n {\n string[][1] memory r_4_3_2_4_0;\n {\n string[] memory r_4_3_2_4_0_0 = new string[](4);\n {\n string memory r_4_3_2_4_0_0_0 = unicode\"Moo é🚀o ooéMMoéMMo MMoo🚀o éoé🚀o\";\n r_4_3_2_4_0_0[0] = r_4_3_2_4_0_0_0;\n }\n {\n string memory r_4_3_2_4_0_0_1 = unicode\"Moo é🚀o🚀oMMMé oéoMé🚀MoééooM 🚀\";\n r_4_3_2_4_0_0[1] = r_4_3_2_4_0_0_1;\n }\n {\n string memory r_4_3_2_4_0_0_2 = unicode\"Moo é🚀\";\n r_4_3_2_4_0_0[2] = r_4_3_2_4_0_0_2;\n }\n {\n string memory r_4_3_2_4_0_0_3 = unicode\"Moo é🚀oé🚀oM\";\n r_4_3_2_4_0_0[3] = r_4_3_2_4_0_0_3;\n }\n r_4_3_2_4_0[0] = r_4_3_2_4_0_0;\n }\n r_4_3_2_4.s_0 = r_4_3_2_4_0;\n }\n r_4_3_2.s_4 = r_4_3_2_4;\n }\n r_4_3.s_2 = r_4_3_2;\n }\n {\n bool[2] memory r_4_3_3;\n {\n bool r_4_3_3_0 = true;\n r_4_3_3[0] = r_4_3_3_0;\n }\n {\n bool r_4_3_3_1 = true;\n r_4_3_3[1] = r_4_3_3_1;\n }\n r_4_3.s_3 = r_4_3_3;\n }\n {\n string memory r_4_3_4 = unicode\"Moo é🚀🚀 o🚀ooM 🚀oMé🚀oMM\";\n r_4_3.s_4 = r_4_3_4;\n }\n r_4.s_3 = r_4_3;\n }\n r.s_4 = r_4;\n }\n return r;\n }\n}", + "encoded": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000b549962e55fee3e17586ce604c30000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000004200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001200000000000000000000000005f62f0cdda00ca0058c649e24dff47dbdcafc99f000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a806fc3a92020206f4d6f6ff09f9a80206f20f09f9a806ff09f9a806ff09f9a80f09f9a806ff09f9a806fc3a94d20204d4df09f9a806f6f6f4d6f6f4d4d20f09f9a806fc3a920206fc3a920c3a96f4d6f20206f6f6f000000000000000000000000000000000000000000000000000000000000000000030f921c00000000000000000000000000000000000000000000000000000000001e0e9f0000000000000000000000000000000000000000000000000000000000d4e2160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000001c4d6f6f20c3a9f09f9a80c3a9f09f9a80f09f9a80f09f9a80f09f9a800000000000000000000000000000000000000000000000000000000000000000000000224d6f6f20c3a9f09f9a80c3a9f09f9a806ff09f9a806f4d202020f09f9a806f6f6f6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d4d6f6f20c3a9f09f9a8020c3a9c3a920c3a9206f4dc3a9c3a94d6f20c3a94d206ff09f9a806f6f4d6f204dc3a96f6ff09f9a8020204d6fc3a94d206ff09f9a806f4d20c3a94d4df09f9a80f09f9a80f09f9a806f206fc3a96f6f20206f00000000000000000000000000000000000000000000000000000000000000000000154d6f6f20c3a9f09f9a8020206fc3a96f6fc3a9c3a90000000000000000000000000000000000000000000000e972cf1fd035e5f44c17ba7b2cfe6e7006834c9500000000000000000000000000000000000000000000000000000000a242be0f000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c0ffffffffffffffffffffffffffffffffffffffffff80db4a0b20e3ee19a0885effffffffffffffffffffffffffffffffffffffffffb9bb80ee65b653c62d0549fffffffffffffffffffffffffffffffffffffffffff5ecfefa6fd502ce5a086fffffffffffffffffffffffffffffffffffffffffffff0bb778abaef01fa674c900000000000000000000000000000000000000000057b3c5fc77d4552cef8738ffffffffffffffffffffffffffffffffffffffffffb3623035240092b8ca92b500000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000344d6f6f20c3a9f09f9a80f09f9a80206f20f09f9a806fc3a920f09f9a80f09f9a8020f09f9a8020c3a9c3a96f6fc3a96fc3a96f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000005c726a26130f7a1972c92b650000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a056000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa0fc9665e2aa3c3e5c2ee69f78700e8df696ef72000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000005600000000000000000000000000000000000000000000000000000000000000780ec366485ec6d9c690515f6ffaefb770000000000000000000000000000000000000000000000000000000000c7a6be0463115cf55d197a241696bf0a278668d7ffffffffffffffffb7381d7223f5f0b4120c12aefae26c68fbea1bf7f2cc37de000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f4d6f6f20c3a9f09f9a804dc3a96f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a804d4d200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000394d6f6f20c3a9f09f9a80f09f9a80f09f9a80206fc3a96ff09f9a80f09f9a806f4d6ff09f9a804df09f9a8020f09f9a802020f09f9a806f4d4d000000000000004b20ca764fc89d49984d88280341020000000000000000000000000000000000000000000000000000000000546e3d2ec295f2fdaf00a28579014ea427ad2df600000000000000001334e059b350f5c95319b550d128140e4b2587209345f04d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000004c4d6f6f20c3a9f09f9a806fc3a96f6f6f4d6f6f4df09f9a80f09f9a806ff09f9a806fc3a96f4df09f9a806f6ff09f9a806f4dc3a9c3a96f6fc3a96fc3a9f09f9a806f6f204d6f6f4df09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a80c3a96f4dc3a9f09f9a8020f09f9a80f09f9a806f4d6fc3a94d6f4d6ff09f9a80c3a9c3a9f09f9a804d6f20c3a9c3a920c3a94d6ff09f9a806f4d4d6f6f6f20c3a96fc3a9204df09f9a804d6f00000000000000000000000000000000000000000000000000000000000000000000000000000000005e4d6f6f20c3a9f09f9a80c3a9f09f9a806f4d206f6f20f09f9a80f09f9a802020204d4d4d6f206ff09f9a806f4d4d6f4d4dc3a920f09f9a80f09f9a80204d6f204dc3a9f09f9a806f204d206f4df09f9a806f2020f09f9a80c3a9f09f9a800000f61e317938a183234db405af4fe70e000000000000000000000000000000000000000000000000000000000028b50c1856955065fd08d2886826ab420be4777d00000000000000006380b7c479e2d6817be556557e585d9c6304ab117e1d159c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002f4d6f6f20c3a9f09f9a806fc3a94d206fc3a9206f206f6f204d4d6f6f6f6f4d4d6f20c3a9c3a920204d6f6f204d6f4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000000fa48d7828d6719ff5ec356c9f935a0000000000000000000000000000000000000000000000000000000000cc57056eedfdc23fbb21c79d986a90c5f4fb9afa000000000000000049600e3692600b258c083335613e222532256b33d1c1aba1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000d4d6f6f20c3a9f09f9a802020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000414d6f6f20c3a9f09f9a806ff09f9a804d6f4d4d20f09f9a8020204d6fc3a9c3a920206f4df09f9a80c3a9c3a96f204d4d6fc3a94df09f9a80206f4d6fc3a9206f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000484d6f6f20c3a9f09f9a806f6f4d6ff09f9a806f6f206f206f4d206ff09f9a806f4d204d20206f6f4d6f6f6f6f2020c3a9f09f9a806f6ff09f9a802020c3a96ff09f9a804df09f9a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a80000000000000000000000000000000000000000000008c49432712f2798ba72867212740aa3801fa7f9c000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005f44a768df18779e6f48f2d648a30dd4806d3c2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0d7ec1f5284bfcc834ae5e1635185dac60301a21ab37e55f2953286a60000000000000000000000000000000000000000000000000000000007ac2a02600000000000000000000000000000000000000000000000000000000025cc5f1000000000000000000000000000000000000000000000000000000004e253004000000000000000000000000db0474af174cda27c222d6fa2ca36d58193c5309008beeaea132cc63386b43c8a606c19a55825965283f834d42b1243c43aece5500000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000174d6f6f20c3a9f09f9a806fc3a9c3a96f6f6ff09f9a806f00000000000000000000000000000000000000000000000000000000000000000000000000000000564d6f6f20c3a9f09f9a804d6ff09f9a80206f4d6f206ff09f9a806f4d6f4d4df09f9a806f4d4df09f9a80c3a94d2020206f6f206ff09f9a806f4d6f6f6f6f20f09f9a80f09f9a80206f4dc3a9f09f9a8020c3a9206f2000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000002d4d6f6f20c3a9f09f9a806f206f6fc3a94d4d6fc3a94d4d6f204d4d6f6ff09f9a806f20c3a96fc3a9f09f9a806f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304d6f6f20c3a9f09f9a806ff09f9a806f4d4d4dc3a920206fc3a96f4dc3a9f09f9a804d6fc3a9c3a96f6f4d20f09f9a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d6f6f20c3a9f09f9a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134d6f6f20c3a9f09f9a806fc3a9f09f9a806f4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000284d6f6f20c3a9f09f9a80f09f9a80206ff09f9a806f6f4d2020f09f9a806f4dc3a9f09f9a806f4d4d000000000000000000000000000000000000000000000000" + } +] diff --git a/packages/web3-eth-abi/test/fixtures/coders/base/address.ts b/packages/web3-eth-abi/test/fixtures/coders/base/address.ts new file mode 100644 index 00000000000..6f41d39c597 --- /dev/null +++ b/packages/web3-eth-abi/test/fixtures/coders/base/address.ts @@ -0,0 +1,54 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const validAddressEncoderData: [string, string][] = [ + [ + '00000000219ab540356cbb839cbe05303d7705fa', + '00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa', + ], + [ + '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cC2', + '000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + ], +]; + +export const invalidAddressEncoderData: [unknown][] = [ + ['blem'], + ['--123'], + ['2'], + ['-1'], + ['0x01'], + ['0x00'], + [123], +]; + +export const validAddressDecoderData: { bytes: string; result: string; remaining: string }[] = [ + { + bytes: '0x000000000000000000000000e6004226bc1f1ba37e5c2c4689693b94b863cd58', + result: '0xe6004226BC1F1ba37E5C2c4689693b94B863cd58', + remaining: '0x', + }, + { + bytes: '0x000000000000000000000000e6004226bc1f1ba37e5c2c4689693b94b863cd580000000000000000000000000000000000000000000000000000000000000001', + result: '0xe6004226BC1F1ba37E5C2c4689693b94B863cd58', + remaining: '0x0000000000000000000000000000000000000000000000000000000000000001', + }, +]; + +export const invalidAddressDecoderData: [string][] = [ + ['0x00000000000000000000e6004226bc1f1ba37e5c2c4689693b94b863cd58'], +]; diff --git a/packages/web3-eth-abi/test/fixtures/coders/base/array.ts b/packages/web3-eth-abi/test/fixtures/coders/base/array.ts new file mode 100644 index 00000000000..25e89ba15e7 --- /dev/null +++ b/packages/web3-eth-abi/test/fixtures/coders/base/array.ts @@ -0,0 +1,104 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const validArrayEncoderData: Array<{ + type: string; + values: Array; + result: string; + dynamic: boolean; +}> = [ + { + type: 'uint[]', + values: [1, 3], + dynamic: true, + result: '0x000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003', + }, + { + type: 'uint[2]', + values: [1, 3], + dynamic: false, + result: '0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003', + }, + { + type: 'string[2]', + values: ['hello', 'web3'], + dynamic: true, + result: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000568656c6c6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047765623300000000000000000000000000000000000000000000000000000000', + }, + { + type: 'string[]', + values: ['hello', 'web3'], + dynamic: true, + result: '0x000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000568656c6c6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047765623300000000000000000000000000000000000000000000000000000000', + }, +]; + +export const invalidArrayEncoderData: Array<{ + type: string; + values: unknown; +}> = [ + { + type: 'uint[]', + values: 'dsfdf', + }, + { + type: 'uint[3]', + values: [1, 2], + }, +]; + +export const validArrayDecoderData: Array<{ + type: string; + bytes: string; + result: unknown; + remaining: string; +}> = [ + { + type: 'uint[]', + result: [BigInt(1), BigInt(3)], + bytes: '0x000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003', + remaining: '0x', + }, + { + type: 'uint[2]', + bytes: '0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003', + result: [BigInt(1), BigInt(3)], + remaining: '0x', + }, + { + type: 'string[2]', + result: ['hello', 'web3'], + bytes: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000568656c6c6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047765623300000000000000000000000000000000000000000000000000000000', + remaining: '0x', + }, + { + type: 'string[]', + result: ['hello', 'web3'], + bytes: '0x000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000568656c6c6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047765623300000000000000000000000000000000000000000000000000000000', + remaining: '0x', + }, +]; + +export const invalidArrayDecoderData: Array<{ + type: string; + bytes: string; +}> = [ + { + type: 'uint[]', + bytes: '0x', + }, +]; diff --git a/packages/web3-eth-abi/test/fixtures/coders/base/bool.ts b/packages/web3-eth-abi/test/fixtures/coders/base/bool.ts new file mode 100644 index 00000000000..8a5fa05ce46 --- /dev/null +++ b/packages/web3-eth-abi/test/fixtures/coders/base/bool.ts @@ -0,0 +1,63 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const validBoolEncoderData: [any, string][] = [ + [1, '0000000000000000000000000000000000000000000000000000000000000001'], + [0, '0000000000000000000000000000000000000000000000000000000000000000'], + [BigInt(1), '0000000000000000000000000000000000000000000000000000000000000001'], + [BigInt(0), '0000000000000000000000000000000000000000000000000000000000000000'], + ['0x1', '0000000000000000000000000000000000000000000000000000000000000001'], + ['0x0', '0000000000000000000000000000000000000000000000000000000000000000'], + [true, '0000000000000000000000000000000000000000000000000000000000000001'], + [false, '0000000000000000000000000000000000000000000000000000000000000000'], + ['false', '0000000000000000000000000000000000000000000000000000000000000000'], + ['true', '0000000000000000000000000000000000000000000000000000000000000001'], +]; + +export const invalidBoolEncoderData: [any][] = [ + ['blem'], + ['--123'], + ['2'], + ['-1'], + ['0x01'], + ['0x00'], + ['0x0000000000000000000000000000000000000000000000000000000000000002'], +]; + +export const validBoolDecoderData: { bytes: string; result: boolean; remaining: string }[] = [ + { + bytes: '0x0000000000000000000000000000000000000000000000000000000000000001', + result: true, + remaining: '0x', + }, + { + bytes: '0x0000000000000000000000000000000000000000000000000000000000000000', + result: false, + remaining: '0x', + }, + { + bytes: '0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000c', + result: true, + remaining: '0x000000000000000000000000000000000000000000000000000000000000000c', + }, +]; + +export const invalidBoolDecoderData: [string][] = [ + ['0x00000000000000000000e6004226bc1f1ba37e5c2c4689693b94b863cd58'], + ['0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9d80a8'], + ['0xffffffff'], +]; diff --git a/packages/web3-eth-abi/test/fixtures/coders/base/bytes.ts b/packages/web3-eth-abi/test/fixtures/coders/base/bytes.ts new file mode 100644 index 00000000000..3886f0c8cf8 --- /dev/null +++ b/packages/web3-eth-abi/test/fixtures/coders/base/bytes.ts @@ -0,0 +1,73 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiParameter } from 'web3-types'; + +export const validBytesEncoderData: [AbiParameter, string, string][] = [ + [ + { type: 'bytes5', name: '' }, + '0x0000001010', + '0000001010000000000000000000000000000000000000000000000000000000', + ], + [ + { type: 'bytes', name: '' }, + '0x0000001010', + '00000000000000000000000000000000000000000000000000000000000000050000001010000000000000000000000000000000000000000000000000000000', + ], + [ + { type: 'bytes', name: '' }, + '0x3a1bd524db9d52a12c4c60bb3f08e4ed34f380964a6882d46097f6fe4eff98af80552fddf116d4afb1a2676508d68eb62f13e23e1e696c2a800d384470c628c748cee4ad2260d26584cd6a06c4a0cccca37b', + '00000000000000000000000000000000000000000000000000000000000000523a1bd524db9d52a12c4c60bb3f08e4ed34f380964a6882d46097f6fe4eff98af80552fddf116d4afb1a2676508d68eb62f13e23e1e696c2a800d384470c628c748cee4ad2260d26584cd6a06c4a0cccca37b0000000000000000000000000000', + ], +]; + +export const invalidBytesEncoderData: [AbiParameter, string][] = [ + [{ type: 'bytes', name: '' }, 'blem'], + [{ type: 'bytes', name: '' }, '--123'], + [{ type: 'bytes1', name: '' }, '0x0000001010'], +]; + +export const validBytesDecoderData: [AbiParameter, string, string, string][] = [ + [ + { type: 'bytes5', name: '' }, + '0x0000001010000000000000000000000000000000000000000000000000000000', + '0x0000001010', + '0X', + ], + [ + { type: 'bytes5', name: '' }, + '0x0000001010000000000000000000000000000000000000000000000000000000', + '0x0000001010', + '0X', + ], + [ + { type: 'bytes', name: '' }, + '0x00000000000000000000000000000000000000000000000000000000000000050000001010000000000000000000000000000000000000000000000000000000', + '0x0000001010', + '0x', + ], + [ + { type: 'bytes2', name: '' }, + '0x01020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002', + '0x0102', + '0x0000000000000000000000000000000000000000000000000000000000000002', + ], +]; + +export const invalidBytesDecoderData: [AbiParameter, string][] = [ + [{ type: 'bytes32', name: '' }, '0x0000001010'], +]; diff --git a/packages/web3-eth-abi/test/fixtures/coders/base/number.ts b/packages/web3-eth-abi/test/fixtures/coders/base/number.ts new file mode 100644 index 00000000000..932e6d27551 --- /dev/null +++ b/packages/web3-eth-abi/test/fixtures/coders/base/number.ts @@ -0,0 +1,147 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiParameter, Numbers } from 'web3-types'; + +export const validNumberEncoderData: [AbiParameter, Numbers, string][] = [ + [ + { type: 'uint8', name: '' }, + 1, + '0000000000000000000000000000000000000000000000000000000000000001', + ], + [ + { type: 'uint8', name: '' }, + '8', + '0000000000000000000000000000000000000000000000000000000000000008', + ], + [ + { type: 'int8', name: '' }, + -1, + 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', + ], + [ + { type: 'int8', name: '' }, + -122, + 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86', + ], + [ + { type: 'int8', name: '' }, + -128, + 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80', + ], + [ + { type: 'int8', name: '' }, + '-122', + 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86', + ], + [ + { type: 'int', name: '' }, + -122, + 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86', + ], + [ + { type: 'int', name: '' }, + BigInt(122), + '000000000000000000000000000000000000000000000000000000000000007a', + ], + [ + { type: 'int32', name: '' }, + BigInt(-122), + 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86', + ], + [ + { type: 'int32', name: '' }, + '-0xa2', + 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5e', + ], + [ + { type: 'uint24', name: '' }, + '12312312', + '0000000000000000000000000000000000000000000000000000000000bbdef8', + ], + [ + { type: 'int24', name: '' }, + '-123123', + 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1f0d', + ], +]; + +export const invalidNumberEncoderData: [AbiParameter, Numbers][] = [ + [{ type: 'uint8', name: '' }, 'blem'], + [{ type: 'uint8', name: '' }, '--123'], + [{ type: 'uint8', name: '' }, '256'], + [{ type: 'int8', name: '' }, '128'], + [{ type: 'int8', name: '' }, '-129'], + [{ type: 'int17', name: '' }, '129'], +]; + +export const validNumberDecoderData: [AbiParameter, string, Numbers, string][] = [ + [ + { type: 'uint8', name: '' }, + '0x0000000000000000000000000000000000000000000000000000000000000012', + BigInt(18), + '0x', + ], + [ + { type: 'uint256', name: '' }, + '0x00000000000000000000003f29a33f562a1feab357509b77f71717e78667e7c1', + BigInt('92312312312312312312312312312312312303939393939393'), + '0x', + ], + [ + { type: 'int256', name: '' }, + '0xffffffffffffffffffffffc0d65cc0a9d5e0154ca8af648808e8e8187998183f', + BigInt('-92312312312312312312312312312312312303939393939393'), + '0x', + ], + [ + { type: 'int8', name: '' }, + '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7', + BigInt('-25'), + '0x', + ], + [ + { type: 'uint256', name: '' }, + '0x000000000000000000000000000000000000000000000000000000000001e0f30000000000000000000000000000000000000000000000000000000000000001', + BigInt(123123), + '0x0000000000000000000000000000000000000000000000000000000000000001', + ], + [ + { type: 'uint24', name: '' }, + '0x0000000000000000000000000000000000000000000000000000000000bbdef8', + BigInt(12312312), + '0x', + ], + [ + { type: 'int24', name: '' }, + '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1f0d', + -BigInt(123123), + '0x', + ], +]; + +export const invalidNumberDecoderData: [AbiParameter, string][] = [ + [{ type: 'uint8', name: '' }, '0x'], + [ + { type: 'uint8', name: '' }, + '0x00000000000000000000003f29a33f562a1feab357509b77f71717e78667e7c1', + ], + [ + { type: 'int17', name: '' }, + '0xffffffffffffffffffffffc0d65cc0a9d5e0154ca8af648808e8e8187998183f', + ], +]; diff --git a/packages/web3-eth-abi/test/fixtures/coders/base/string.ts b/packages/web3-eth-abi/test/fixtures/coders/base/string.ts new file mode 100644 index 00000000000..1b733e7ae17 --- /dev/null +++ b/packages/web3-eth-abi/test/fixtures/coders/base/string.ts @@ -0,0 +1,51 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const validStringEncoderData: [unknown, string][] = [ + [ + 'marin', + '00000000000000000000000000000000000000000000000000000000000000056d6172696e000000000000000000000000000000000000000000000000000000', + ], + [ + 'extraaaaaaaaaalooooooooooooooooooonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngggggggggggggggggggggggstrrrrrrrrrrrrrrrrrrrrrrrriiiiiiiiiiiinnnnnnnnng', + '000000000000000000000000000000000000000000000000000000000000008a65787472616161616161616161616c6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e676767676767676767676767676767676767676767676773747272727272727272727272727272727272727272727272726969696969696969696969696e6e6e6e6e6e6e6e6e6700000000000000000000000000000000000000000000', + ], + [ + 'šč|€-!', + '000000000000000000000000000000000000000000000000000000000000000ac5a1c48d7ce282ac2d2100000000000000000000000000000000000000000000', + ], +]; + +export const invalidStringEncoderData: [unknown][] = [[123]]; + +export const validStringDecoderData: [string, string, string][] = [ + [ + '0x00000000000000000000000000000000000000000000000000000000000000056d6172696e000000000000000000000000000000000000000000000000000000', + 'marin', + '0x', + ], + [ + '0x000000000000000000000000000000000000000000000000000000000000008a65787472616161616161616161616c6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e676767676767676767676767676767676767676767676773747272727272727272727272727272727272727272727272726969696969696969696969696e6e6e6e6e6e6e6e6e6700000000000000000000000000000000000000000000', + 'extraaaaaaaaaalooooooooooooooooooonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngggggggggggggggggggggggstrrrrrrrrrrrrrrrrrrrrrrrriiiiiiiiiiiinnnnnnnnng', + '0x', + ], + [ + '0x000000000000000000000000000000000000000000000000000000000000000ac5a1c48d7ce282ac2d2100000000000000000000000000000000000000000000', + 'šč|€-!', + '0x', + ], +]; diff --git a/packages/web3-eth-abi/test/fixtures/coders/base/tuple.ts b/packages/web3-eth-abi/test/fixtures/coders/base/tuple.ts new file mode 100644 index 00000000000..fdccee223ba --- /dev/null +++ b/packages/web3-eth-abi/test/fixtures/coders/base/tuple.ts @@ -0,0 +1,124 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiParameter } from 'web3-types'; + +export const validEncoderData: Array<{ + components: ReadonlyArray; + values: unknown; + result: string; + dynamic: boolean; +}> = [ + { + components: [ + { type: 'uint8', name: '' }, + { type: 'bool', name: '' }, + ], + values: [69, true], + dynamic: false, + result: '00000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001', + }, + { + components: [ + { type: 'bool', name: '' }, + { + type: 'tuple', + name: '', + components: [ + { type: 'uint8', name: '' }, + { type: 'bool', name: '' }, + ], + }, + ], + values: [true, [69, true]], + dynamic: false, + result: '000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001', + }, + { + components: [ + { type: 'bool', name: 'y' }, + { type: 'bool', name: 'z' }, + ], + values: { y: false, z: true }, + dynamic: false, + result: '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001', + }, +]; + +export const validDecoderData: Array<{ + components: ReadonlyArray; + bytes: string; + result: unknown; + remaining: string; +}> = [ + { + components: [ + { type: 'uint8', name: '' }, + { type: 'bool', name: '' }, + ], + result: { __length__: 2, 0: BigInt(69), 1: true }, + bytes: '0x00000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001', + remaining: '0x', + }, + { + components: [ + { type: 'bool', name: '' }, + { + type: 'tuple', + name: 'subTuple', + components: [ + { type: 'uint8', name: '' }, + { type: 'bool', name: '' }, + ], + }, + ], + result: { + __length__: 2, + 0: true, + 1: { __length__: 2, 0: BigInt(69), 1: true }, + subTuple: { __length__: 2, 0: BigInt(69), 1: true }, + }, + bytes: '000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001', + remaining: '0x', + }, + { + components: [ + { type: 'string', name: '' }, + { type: 'bool', name: '' }, + { + type: 'tuple', + name: '', + components: [ + { type: 'bool', name: '' }, + { type: 'string', name: '' }, + ], + }, + ], + result: { + __length__: 3, + 0: 'marin123123123123', + 1: true, + 2: { + __length__: 2, + 0: true, + 1: 'web3jstestinglongstriiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiing', + }, + }, + bytes: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000116d6172696e31323331323331323331323300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003c776562336a7374657374696e676c6f6e6773747269696969696969696969696969696969696969696969696969696969696969696969696969696e6700000000', + remaining: '0x', + }, +]; diff --git a/packages/web3-eth-abi/test/fixtures/coders/encode.ts b/packages/web3-eth-abi/test/fixtures/coders/encode.ts new file mode 100644 index 00000000000..9fa67ac65da --- /dev/null +++ b/packages/web3-eth-abi/test/fixtures/coders/encode.ts @@ -0,0 +1,62 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AbiInput } from 'web3-types'; + +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const validEncodeData: ReadonlyArray<{ + abiInput: ReadonlyArray; + params: unknown[]; + result: string; +}> = [ + { + abiInput: ['uint256'], + params: ['2345675643'], + result: '0x000000000000000000000000000000000000000000000000000000008bd02b7b', + }, + // {abiInput: ["uint256"], params: [], result: ""}, + // {abiInput: ["uint256"], params: [], result: ""}, + // {abiInput: ["uint256"], params: [], result: ""}, + // {abiInput: ["uint256"], params: [], result: ""}, + // {abiInput: ["uint256"], params: [], result: ""}, + // {abiInput: ["uint256"], params: [], result: ""}, + // {abiInput: ["uint256"], params: [], result: ""}, + // {abiInput: ["uint256"], params: [], result: ""}, +]; + +export const invalidEncodeData: [string][] = [ + ['blem'], + ['--123'], + ['2'], + ['-1'], + ['0x01'], + ['0x00'], +]; diff --git a/packages/web3-eth-abi/test/fixtures/data.ts b/packages/web3-eth-abi/test/fixtures/data.ts new file mode 100644 index 00000000000..a2f3b32ba20 --- /dev/null +++ b/packages/web3-eth-abi/test/fixtures/data.ts @@ -0,0 +1,1115 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { encodeParameters, decodeParameters } from '../../src/api/parameters_api'; + +// Because Jest does not support BigInt (https://github.com/facebook/jest/issues/12827) +// The BigInt values in this file is in a string format. +// And the following override is to convert BigInt to a string inside the Unit Tests that uses this file, +// i.e when serialization is needed there (because the values in this file is in a string format). +(BigInt.prototype as any).toJSON = function () { + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call + return this.toString(); +}; + +export const jsonInterfaceValidData: [any, string][] = [ + [ + { + // testing function type + name: 'myMethod', + type: 'function', + inputs: [ + { + type: 'uint256', + name: 'myNumber', + }, + { + type: 'string', + name: 'myString', + }, + ], + }, + 'myMethod(uint256,string)', + ], + [ + { + name: 'f', + type: 'function', + inputs: [ + { + name: 's', + type: 'tuple', + components: [ + { + name: 'a', + type: 'uint256', + }, + { + name: 'b', + type: 'uint256[]', + }, + { + name: 'c', + type: 'tuple[]', + components: [ + { + name: 'x', + type: 'uint256', + }, + { + name: 'y', + type: 'uint256', + }, + ], + }, + ], + }, + { + name: 't', + type: 'tuple', + components: [ + { + name: 'x', + type: 'uint256', + }, + { + name: 'y', + type: 'uint256', + }, + ], + }, + { + name: 'a', + type: 'uint256', + }, + ], + outputs: [], + }, + 'f((uint256,uint256[],(uint256,uint256)[]),(uint256,uint256),uint256)', + ], + [ + // testing event type + { + type: 'event', + inputs: [ + { name: 'a', type: 'uint256', indexed: true }, + { name: 'b', type: 'bytes32', indexed: false }, + ], + name: 'Event', + }, + 'Event(uint256,bytes32)', + ], + [ + { + name: 'myEvent', + type: 'event', + inputs: [ + { + type: 'uint256', + name: 'myNumber', + }, + { + type: 'bytes32', + name: 'myBytes', + }, + ], + }, + 'myEvent(uint256,bytes32)', + ], +]; + +export const jsonInterfaceInvalidData: [any, string][] = [ + [ + { + name: 'f', + type: 'function', + inputs: [ + { + name: 's', + type: 'notTuple', + components: [ + { + name: 'a', + type: 'uint256', + }, + { + name: 'b', + type: 'uint256[]', + }, + { + name: 'c', + type: 'tuple[]', + components: [ + { + name: 'x', + type: 'uint256', + }, + { + name: 'y', + type: 'uint256', + }, + ], + }, + ], + }, + { + name: 't', + type: 'tuple', + components: [ + { + name: 'x', + type: 'uint256', + }, + { + name: 'y', + type: 'uint256', + }, + ], + }, + { + name: 'a', + type: 'uint256', + }, + ], + outputs: [], + }, + 'Invalid value given "notTuple". Error: components found but type is not tuple.', + ], +]; + +export const validFunctionsSignatures: { input: any; output: string }[] = [ + { input: 'myMethod(uint256,string)', output: '0x24ee0097' }, + { + input: { + name: 'myMethod', + type: 'function' as const, + inputs: [ + { + type: 'uint256', + name: 'myNumber', + }, + { + type: 'string', + name: 'myString', + }, + ], + }, + output: '0x24ee0097', + }, +]; + +export const inValidFunctionsSignatures: { input: any; output: string }[] = [ + { input: 345, output: 'Invalid parameter value in encodeFunctionSignature' }, + { input: {}, output: 'Invalid parameter value in encodeFunctionSignature' }, + { input: ['mystring'], output: 'Invalid parameter value in encodeFunctionSignature' }, + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + { input: null, output: 'Invalid parameter value in encodeFunctionSignature' }, + { input: undefined, output: 'Invalid parameter value in encodeFunctionSignature' }, +]; + +export const validFunctionsCall: { input: { abi: any; params: any }; output: string }[] = [ + { + input: { + abi: { + name: 'myMethod', + type: 'function', + inputs: [ + { + type: 'uint256', + name: 'myNumber', + }, + { + type: 'string', + name: 'myString', + }, + ], + }, + params: ['2345675643', 'Hello!%'], + }, + output: '0x24ee0097000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000', + }, + { + input: { + abi: { + type: 'function', + name: 'pour', + inputs: [ + { + type: 'bytes12', + name: 'vaultId_', + }, + { + type: 'address', + name: 'to', + }, + { + type: 'int128', + name: 'ink', + }, + { + type: 'int128', + name: 'art', + }, + ], + }, + params: [ + '0x000000000000000000000000', + '0x0000000000000000000000000000000000000000', + '170141183460469231731687303715884105727', + '-170141183460469231731687303715884105727', + ], + }, + output: '0x99d4294000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000001', + }, +]; + +export const inValidFunctionsCalls: { input: any; output: string }[] = [ + { input: 345, output: 'Invalid parameter value in encodeFunctionCall' }, + { input: {}, output: 'Invalid parameter value in encodeFunctionCall' }, + { input: ['mystring'], output: 'Invalid parameter value in encodeFunctionCall' }, + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + { input: null, output: 'Invalid parameter value in encodeFunctionCall' }, + { input: undefined, output: 'Invalid parameter value in encodeFunctionCall' }, +]; + +export const validEventsSignatures: { input: any; output: string }[] = [ + { + input: 'myEvent(uint256,bytes32)', + output: '0xf2eeb729e636a8cb783be044acf6b7b1e2c5863735b60d6daae84c366ee87d97', + }, + { + input: { + name: 'myEvent', + type: 'event' as const, + inputs: [ + { + type: 'uint256', + name: 'myNumber', + }, + { + type: 'bytes32', + name: 'myBytes', + }, + ], + }, + output: '0xf2eeb729e636a8cb783be044acf6b7b1e2c5863735b60d6daae84c366ee87d97', + }, +]; + +export const invalidEventsSignatures: { input: any; output: string }[] = [ + { input: 345, output: 'Invalid parameter value in encodeEventSignature' }, + { input: {}, output: 'Invalid parameter value in encodeEventSignature' }, + { input: ['mystring'], output: 'Invalid parameter value in encodeEventSignature' }, + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + { input: null, output: 'Invalid parameter value in encodeEventSignature' }, + { input: undefined, output: 'Invalid parameter value in encodeEventSignature' }, +]; + +export const validErrorsSignatures: { input: any; output: string }[] = [ + { + input: 'Unauthorized()', + output: '0x82b4290015f7ec7256ca2a6247d3c2a89c4865c0e791456df195f40ad0a81367', + }, + { + input: { + inputs: [{ internalType: 'string', name: '', type: 'string' }], + name: 'CustomError', + type: 'error', + }, + output: '0x8d6ea8bed4afafaebcad40e72174583b8bf4969c5d3bc84536051f3939bf9d81', + }, + { + input: 'Error(string)', + output: '0x08c379a0afcc32b1a39302f7cb8073359698411ab5fd6e3edb2c02c0b5fba8aa', + }, +]; + +export const invalidErrorSignatures: { input: any; output: string }[] = [ + { input: 345, output: 'Invalid parameter value in encodeErrorSignature' }, + { input: {}, output: 'Invalid parameter value in encodeErrorSignature' }, + { input: ['mystring'], output: 'Invalid parameter value in encodeErrorSignature' }, + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + { input: null, output: 'Invalid parameter value in encodeErrorSignature' }, + { input: undefined, output: 'Invalid parameter value in encodeErrorSignature' }, +]; + +export const validDecodeLogsData: { + input: { abi: any; data: any; topics: any }; + output: Record; +}[] = [ + { + input: { + abi: [ + { + type: 'string', + name: 'myString', + }, + { + type: 'uint256', + name: 'myNumber', + indexed: true, + }, + { + type: 'uint8', + name: 'mySmallNumber', + indexed: true, + }, + ], + data: '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000748656c6c6f252100000000000000000000000000000000000000000000000000', + topics: [ + '0x000000000000000000000000000000000000000000000000000000000000f310', + '0x0000000000000000000000000000000000000000000000000000000000000010', + ], + }, + output: { + '0': 'Hello%!', + '1': '62224', + '2': '16', + __length__: 3, + myString: 'Hello%!', + myNumber: '62224', + mySmallNumber: '16', + }, + }, + { + // testing an anonymous log with 4 params + input: { + abi: [ + { + name: 'myString', + type: 'string', + }, + { + name: 'myNum', + type: 'uint8', + }, + { + name: 'str', + type: 'string', + }, + { + name: 'largerNumber', + type: 'uint256', + }, + ], + topics: [], + data: '0x0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000002307800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016200000000000000000000000000000000000000000000000000000000000000', + }, + output: { + '0': '0x', + '1': '12', + '2': 'b', + '3': '125', + __length__: 4, + myString: '0x', + myNum: '12', + largerNumber: '125', + str: 'b', + }, + }, + { + input: { + abi: [ + { + indexed: true, + name: 'from', + type: 'address', + }, + { + indexed: true, + name: 'to', + type: 'address', + }, + { + indexed: false, + name: 'value', + type: 'uint256', + }, + ], + topics: [ + '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', + '0x0000000000000000000000006e599da0bff7a6598ac1224e4985430bf16458a4', + '0x0000000000000000000000006f1df96865d09d21e8f3f9a7fba3b17a11c7c53c', + ], + data: '0x00000000000000000000000000000000000000000000000000000000000186a0', + }, + output: { + '0': '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + '1': '0x6f1DF96865D09d21e8f3f9a7fbA3b17A11c7C53C', + '2': '100000', + __length__: 3, + from: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + to: '0x6f1DF96865D09d21e8f3f9a7fbA3b17A11c7C53C', + value: '100000', + }, + }, + { + input: { + abi: [ + { indexed: true, internalType: 'address', name: 'addr', type: 'address' }, + { + components: [ + { internalType: 'string', name: 'name', type: 'string' }, + { internalType: 'address', name: 'addr', type: 'address' }, + { + components: [ + { internalType: 'string', name: 'email', type: 'string' }, + { internalType: 'string', name: 'phone', type: 'string' }, + ], + internalType: 'struct ABIV2UserDirectory.Contact', + name: 'contact', + type: 'tuple', + }, + ], + indexed: false, + internalType: 'struct ABIV2UserDirectory.User', + name: 'user', + type: 'tuple', + }, + ], + data: '0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000cb00cde33a7a0fba30c63745534f1f7ae607076b00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c5269636b2053616e6368657a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000157269636b2e63313337406369746164656c2e636663000000000000000000000000000000000000000000000000000000000000000000000000000000000000112b31202835353529203331342d31353933000000000000000000000000000000', + topics: ['0x000000000000000000000000cb00cde33a7a0fba30c63745534f1f7ae607076b'], + }, + output: { + '0': '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + '1': { + '0': 'Rick Sanchez', + '1': '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + '2': { + '0': 'rick.c137@citadel.cfc', + '1': '+1 (555) 314-1593', + __length__: 2, + email: 'rick.c137@citadel.cfc', + phone: '+1 (555) 314-1593', + }, + __length__: 3, + name: 'Rick Sanchez', + addr: '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + contact: { + '0': 'rick.c137@citadel.cfc', + '1': '+1 (555) 314-1593', + __length__: 2, + email: 'rick.c137@citadel.cfc', + phone: '+1 (555) 314-1593', + }, + }, + __length__: 2, + addr: '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + user: { + '0': 'Rick Sanchez', + '1': '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + '2': { + '0': 'rick.c137@citadel.cfc', + '1': '+1 (555) 314-1593', + __length__: 2, + email: 'rick.c137@citadel.cfc', + phone: '+1 (555) 314-1593', + }, + __length__: 3, + name: 'Rick Sanchez', + addr: '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + contact: { + '0': 'rick.c137@citadel.cfc', + '1': '+1 (555) 314-1593', + __length__: 2, + email: 'rick.c137@citadel.cfc', + phone: '+1 (555) 314-1593', + }, + }, + }, + }, +]; + +export const validEncodeDecodeParametersData: { + input: Parameters; + output: ReturnType; + outputResult: any; +}[] = [ + { + input: [ + ['uint256', 'string'], + ['2345675643', 'Hello!%'], + ], + output: '0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000', + outputResult: { + '0': '2345675643', + '1': 'Hello!%', + __length__: 2, + }, + }, + { + input: [ + ['uint8[]', 'bytes32'], + [['34', '255'], '0x324567fff0000000000000000000000000000000000000000000000000000000'], + ], + output: '0x0000000000000000000000000000000000000000000000000000000000000040324567fff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000ff', + outputResult: { + '0': ['34', '255'], + '1': '0x324567fff0000000000000000000000000000000000000000000000000000000', + __length__: 2, + }, + }, + { + input: [ + [ + 'uint8[]', + { + ParentStruct: { + propertyOne: 'uint256', + propertyTwo: 'uint256', + ChildStruct: { + propertyOne: 'uint256', + propertyTwo: 'uint256', + }, + }, + }, + ], + [ + ['34', '255'], + { + propertyOne: '42', + propertyTwo: '56', + ChildStruct: { + propertyOne: '45', + propertyTwo: '78', + }, + }, + ], + ], + output: '0x00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000ff', + outputResult: { + '0': ['34', '255'], + '1': { + '0': '42', + '1': '56', + '2': { + '0': '45', + '1': '78', + propertyOne: '45', + propertyTwo: '78', + __length__: 2, + }, + propertyOne: '42', + propertyTwo: '56', + ChildStruct: { + '0': '45', + '1': '78', + propertyOne: '45', + propertyTwo: '78', + __length__: 2, + }, + __length__: 3, + }, + ParentStruct: { + '0': '42', + '1': '56', + '2': { + '0': '45', + '1': '78', + propertyOne: '45', + propertyTwo: '78', + __length__: 2, + }, + propertyOne: '42', + propertyTwo: '56', + ChildStruct: { + '0': '45', + '1': '78', + propertyOne: '45', + propertyTwo: '78', + __length__: 2, + }, + __length__: 3, + }, + __length__: 2, + }, + }, +]; + +export const validEncodeDoesNotMutateData: { + expectedInput: unknown[]; + input: Parameters; + output: ReturnType; +}[] = [ + { + expectedInput: [ + ['34', '255'], + { + propertyOne: ['78', '124'], + propertyTwo: '56', + ChildStruct: { + propertyOne: ['16'], + propertyTwo: '78', + }, + }, + ], + + input: [ + [ + 'uint8[]', + { + ParentStruct: { + propertyOne: 'uint8[]', + propertyTwo: 'uint256', + ChildStruct: { + propertyOne: 'uint8[]', + propertyTwo: 'uint256', + }, + }, + }, + ], + [ + ['34', '255'], + { + propertyOne: ['78', '124'], + propertyTwo: '56', + ChildStruct: { + propertyOne: ['16'], + propertyTwo: '78', + }, + }, + ], + ], + output: '0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000007c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004e00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000010', + }, +]; + +export const validEncodeParametersData: { + input: Parameters; + output: ReturnType; +}[] = [ + { + input: [ + ['uint256', 'string'], + ['2345675643', 'Hello!%'], + ], + output: '0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000', + }, + { + input: [ + ['uint8[]', 'bytes32'], + [['34', '255'], '0x324567fff'], + ], + output: '0x0000000000000000000000000000000000000000000000000000000000000040324567fff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000ff', + }, + { + input: [ + [ + 'uint8[]', + { + ParentStruct: { + propertyOne: 'uint256', + propertyTwo: 'uint256', + ChildStruct: { + propertyOne: 'uint256', + propertyTwo: 'uint256', + }, + }, + }, + ], + [ + ['34', '255'], + { + propertyOne: '42', + propertyTwo: '56', + ChildStruct: { + propertyOne: '45', + propertyTwo: '78', + }, + }, + ], + ], + output: '0x00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000ff', + }, + { + input: [ + ['uint', 'tuple(uint256, string)'], + [1234, [5678, 'Hello World']], + ], + output: '0x00000000000000000000000000000000000000000000000000000000000004d20000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000162e0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000b48656c6c6f20576f726c64000000000000000000000000000000000000000000', + }, +]; + +export const inValidEncodeParametersData: { + input: any[]; + output: string; +}[] = [ + { + input: [ + ['uint8[]', 'bytes32'], + [['34', '256'], '0x324567fff'], + ], + output: 'Parameter encoding error', + }, + { + input: [345, ['2345675643', 'Hello!%']], + output: 'Parameter encoding error', + }, + { + input: [true, ['2345675643', 'Hello!%']], + output: 'Parameter encoding error', + }, + { + input: [undefined, ['2345675643', 'Hello!%']], + output: 'Parameter encoding error', + }, + { + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + input: [null, ['2345675643', 'Hello!%']], + output: 'Parameter encoding error', + }, +]; + +export const validDecodeParametersData: { + input: Parameters; + outputResult: any; +}[] = [ + { + input: [ + ['uint256', 'string'], + '0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000', + ], + outputResult: { + '0': '2345675643', + '1': 'Hello!%', + __length__: 2, + }, + }, + { + input: [ + ['uint8[]', 'bytes32'], + '0x0000000000000000000000000000000000000000000000000000000000000040324567fff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000ff', + ], + outputResult: { + '0': ['34', '255'], + '1': '0x324567fff0000000000000000000000000000000000000000000000000000000', + __length__: 2, + }, + }, + { + input: [ + [ + 'uint8[]', + { + ParentStruct: { + propertyOne: 'uint256', + propertyTwo: 'uint256', + ChildStruct: { + propertyOne: 'uint256', + propertyTwo: 'uint256', + }, + }, + }, + ], + '0x00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000ff', + ], + outputResult: { + '0': ['34', '255'], + '1': { + '0': '42', + '1': '56', + '2': { + '0': '45', + '1': '78', + propertyOne: '45', + propertyTwo: '78', + __length__: 2, + }, + propertyOne: '42', + propertyTwo: '56', + ChildStruct: { + '0': '45', + '1': '78', + propertyOne: '45', + propertyTwo: '78', + __length__: 2, + }, + __length__: 3, + }, + ParentStruct: { + '0': '42', + '1': '56', + '2': { + '0': '45', + '1': '78', + propertyOne: '45', + propertyTwo: '78', + __length__: 2, + }, + propertyOne: '42', + propertyTwo: '56', + ChildStruct: { + '0': '45', + '1': '78', + propertyOne: '45', + propertyTwo: '78', + __length__: 2, + }, + __length__: 3, + }, + __length__: 2, + }, + }, + { + input: [ + [ + { + components: [ + { internalType: 'string', name: 'name', type: 'string' }, + { internalType: 'address', name: 'addr', type: 'address' }, + { + components: [ + { internalType: 'string', name: 'email', type: 'string' }, + { internalType: 'string', name: 'phone', type: 'string' }, + ], + internalType: 'struct ABIV2UserDirectory.Contact', + name: 'contact', + type: 'tuple', + }, + ], + indexed: false, + internalType: 'struct ABIV2UserDirectory.User', + name: 'user', + type: 'tuple', + }, + ], + '0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000cb00cde33a7a0fba30c63745534f1f7ae607076b00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c5269636b2053616e6368657a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000157269636b2e63313337406369746164656c2e636663000000000000000000000000000000000000000000000000000000000000000000000000000000000000112b31202835353529203331342d31353933000000000000000000000000000000', + ], + outputResult: { + '0': { + '0': 'Rick Sanchez', + '1': '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + '2': { + '0': 'rick.c137@citadel.cfc', + '1': '+1 (555) 314-1593', + __length__: 2, + email: 'rick.c137@citadel.cfc', + phone: '+1 (555) 314-1593', + }, + __length__: 3, + addr: '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + contact: { + '0': 'rick.c137@citadel.cfc', + '1': '+1 (555) 314-1593', + __length__: 2, + email: 'rick.c137@citadel.cfc', + phone: '+1 (555) 314-1593', + }, + name: 'Rick Sanchez', + }, + __length__: 1, + user: { + '0': 'Rick Sanchez', + '1': '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + '2': { + '0': 'rick.c137@citadel.cfc', + '1': '+1 (555) 314-1593', + __length__: 2, + email: 'rick.c137@citadel.cfc', + phone: '+1 (555) 314-1593', + }, + __length__: 3, + addr: '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + contact: { + '0': 'rick.c137@citadel.cfc', + '1': '+1 (555) 314-1593', + __length__: 2, + email: 'rick.c137@citadel.cfc', + phone: '+1 (555) 314-1593', + }, + name: 'Rick Sanchez', + }, + }, + }, +]; + +export const inValidDecodeParametersData: { + input: any[]; + output: string; +}[] = [ + { + input: [['uint8[]', 'bytes32'], '0x000000000010'], + output: 'Parameter decoding error', + }, + { + input: [345, '0x000000000010'], + output: 'Parameter decoding error', + }, + { + input: [true, '0x000000000010'], + output: 'Parameter decoding error', + }, + { + input: [undefined, '0x000000000010'], + output: 'Parameter decoding error', + }, + { + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + input: [null, '0x000000000010'], + output: 'Parameter decoding error', + }, +]; + +export const validDecodeContractErrorData: { + input: any[]; + output: any; +}[] = [ + { + input: [ + [ + { inputs: [], name: 'ErrorWithNoParams', type: 'error' }, + { + inputs: [ + { name: 'code', type: 'uint256' }, + { name: 'message', type: 'string' }, + ], + name: 'ErrorWithParams', + type: 'error', + }, + ], + { + code: 12, + message: 'message', + data: '0xc85bda60000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + }, + ], + output: { + errorName: 'ErrorWithParams', + errorSignature: 'ErrorWithParams(uint256,string)', + errorArgs: { + code: 42, + message: 'This is an error with params', + }, + }, + }, + { + input: [ + [ + { inputs: [], name: 'ErrorWithNoParams', type: 'error' }, + { + inputs: [ + { name: 'code', type: 'uint256' }, + { name: 'message', type: 'string' }, + ], + name: 'ErrorWithParams', + type: 'error', + }, + ], + { + code: 12, + message: 'message', + data: { + code: -32000, + data: '0xc85bda60000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + }, + }, + ], + output: { + errorName: 'ErrorWithParams', + errorSignature: 'ErrorWithParams(uint256,string)', + errorArgs: { + code: 42, + message: 'This is an error with params', + }, + innerError: { + code: -32000, + }, + }, + }, + { + input: [ + [ + { inputs: [], name: 'ErrorWithNoParams', type: 'error' }, + { + inputs: [ + { name: 'code', type: 'uint256' }, + { name: 'message', type: 'string' }, + ], + name: 'ErrorWithParams', + type: 'error', + }, + ], + { + code: 12, + message: 'message', + data: { + originalError: { + code: 3, + data: '0xc85bda60000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + }, + }, + }, + ], + output: { + errorName: 'ErrorWithParams', + errorSignature: 'ErrorWithParams(uint256,string)', + errorArgs: { + code: 42, + message: 'This is an error with params', + }, + innerError: { + code: 3, + }, + }, + }, +]; + +export const invalidDecodeContractErrorData: { + input: any[]; +}[] = [ + { + input: [ + [ + { inputs: [], name: 'ErrorWithNoParams', type: 'error' }, + { + inputs: [ + { name: 'code', type: 'uint256' }, + { name: 'message', type: 'string' }, + ], + name: 'ErrorWithParams', + type: 'error', + }, + ], + { + code: 12, + message: 'message', + data: '0xc85bda60000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000123450000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + }, + ], + }, +]; + +export const validIsAbiConstructorFragment: { + input: any; +}[] = [ + { + input: { inputs: [], stateMutability: 'nonpayable', type: 'constructor' }, + }, +]; +export const invalidIsAbiConstructorFragment: { + input: any; +}[] = [ + { + input: { inputs: [], stateMutability: 'nonpayable', type: 'function' }, + }, +]; diff --git a/packages/web3-eth-abi/test/fixtures/get_encoded_eip712_data.ts b/packages/web3-eth-abi/test/fixtures/get_encoded_eip712_data.ts new file mode 100644 index 00000000000..ff7474aa33f --- /dev/null +++ b/packages/web3-eth-abi/test/fixtures/get_encoded_eip712_data.ts @@ -0,0 +1,758 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Eip712TypedData } from 'web3-types'; + +/** + * string is the test title + * Eip712TypedData is the entire EIP-712 typed data object + * boolean is whether the EIP-712 encoded data is keccak256 hashed + * string is the encoded data expected to be returned by getEncodedEip712Data + */ +export const testData: [string, Eip712TypedData, boolean | undefined, string][] = [ + [ + 'should get encoded message without hashing, hash = undefined', + { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + Person: [ + { + name: 'name', + type: 'string', + }, + { + name: 'wallet', + type: 'address', + }, + ], + Mail: [ + { + name: 'from', + type: 'Person', + }, + { + name: 'to', + type: 'Person', + }, + { + name: 'contents', + type: 'string', + }, + ], + }, + primaryType: 'Mail', + domain: { + name: 'Ether Mail', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + from: { + name: 'Cow', + wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + }, + to: { + name: 'Bob', + wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + }, + contents: 'Hello, Bob!', + }, + }, + undefined, + '0x1901f2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090fc52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e', + ], + [ + 'should get encoded message without hashing, hash = false', + { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + Person: [ + { + name: 'name', + type: 'string', + }, + { + name: 'wallet', + type: 'address', + }, + ], + Mail: [ + { + name: 'from', + type: 'Person', + }, + { + name: 'to', + type: 'Person', + }, + { + name: 'contents', + type: 'string', + }, + ], + }, + primaryType: 'Mail', + domain: { + name: 'Ether Mail', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + from: { + name: 'Cow', + wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + }, + to: { + name: 'Bob', + wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + }, + contents: 'Hello, Bob!', + }, + }, + false, + '0x1901f2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090fc52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e', + ], + [ + 'should get the hashed encoded message, hash = true', + { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + Person: [ + { + name: 'name', + type: 'string', + }, + { + name: 'wallet', + type: 'address', + }, + ], + Mail: [ + { + name: 'from', + type: 'Person', + }, + { + name: 'to', + type: 'Person', + }, + { + name: 'contents', + type: 'string', + }, + ], + }, + primaryType: 'Mail', + domain: { + name: 'Ether Mail', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + from: { + name: 'Cow', + wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + }, + to: { + name: 'Bob', + wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + }, + contents: 'Hello, Bob!', + }, + }, + true, + '0xbe609aee343fb3c4b28e1df9e632fca64fcfaede20f02e86244efddf30957bd2', + ], + [ + 'should get encoded message with array types', + { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + ArrayData: [ + { + name: 'array1', + type: 'string[]', + }, + { + name: 'array2', + type: 'address[]', + }, + { + name: 'array3', + type: 'uint256[]', + }, + ], + }, + primaryType: 'ArrayData', + domain: { + name: 'Array Data', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + array1: ['string', 'string2', 'string3'], + array2: [ + '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + ], + array3: [123456, 654321, 42], + }, + }, + false, + '0x1901928e4773f1f7243172cd0dd213906be49eb9d275e09c8bd0575921c51ba00058596a0bafab67b5b49cfe99456c50dd5b6294b1383e4f17c6e5c3c14afee96ac3', + ], + [ + 'should get encoded message with array types', + { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + ArrayData: [ + { + name: 'array1', + type: 'string[]', + }, + { + name: 'array2', + type: 'address[]', + }, + { + name: 'array3', + type: 'uint256[]', + }, + ], + }, + primaryType: 'ArrayData', + domain: { + name: 'Array Data', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + array1: ['string', 'string2', 'string3'], + array2: [ + '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + ], + array3: [123456, 654321, 42], + }, + }, + true, + '0x3e4d581a408c8c2fa8775017c26e0127df030593d83a8202e6c19b3380bde3da', + ], + [ + 'should get encoded message with fixed array', + { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + ArrayData: [ + { + name: 'array1', + type: 'string[]', + }, + { + name: 'array2', + type: 'address[3]', + }, + { + name: 'array3', + type: 'uint256[]', + }, + ], + }, + primaryType: 'ArrayData', + domain: { + name: 'Array Data', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + array1: ['string', 'string2', 'string3'], + array2: [ + '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + ], + array3: [123456, 654321, 42], + }, + }, + false, + '0x1901928e4773f1f7243172cd0dd213906be49eb9d275e09c8bd0575921c51ba00058b068b45d685c16bc9ef637106b4fd3a4fb9aa259f53218491a3d9eb65b1b574c', + ], + [ + 'should get encoded message with fixed array', + { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + ArrayData: [ + { + name: 'array1', + type: 'string[]', + }, + { + name: 'array2', + type: 'address[3]', + }, + { + name: 'array3', + type: 'uint256[]', + }, + ], + }, + primaryType: 'ArrayData', + domain: { + name: 'Array Data', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + array1: ['string', 'string2', 'string3'], + array2: [ + '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + ], + array3: [123456, 654321, 42], + }, + }, + true, + '0x133d00e67f2390ce846a631aeb6718a674a3923f5320b79b6d3e2f5bf146319e', + ], + [ + 'should get encoded message with bytes32', + { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + ArrayData: [ + { + name: 'bytes32', + type: 'bytes32', + }, + ], + }, + primaryType: 'ArrayData', + domain: { + name: 'Array Data', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + bytes32: '0x133d00e67f2390ce846a631aeb6718a674a3923f5320b79b6d3e2f5bf146319e', + }, + }, + false, + '0x1901928e4773f1f7243172cd0dd213906be49eb9d275e09c8bd0575921c51ba000587c9d26380d51aac5dc2ff6f794d1c043ea4259bb42068f70f79d2e4849133ac3', + ], + [ + 'should get encoded message with bytes32', + { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + ArrayData: [ + { + name: 'bytes32', + type: 'bytes', + }, + ], + }, + primaryType: 'ArrayData', + domain: { + name: 'Array Data', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + bytes32: '0x133d00e67f2390ce846a631aeb6718a674a3923f5320b79b6d3e2f5bf146319e', + }, + }, + false, + '0x1901928e4773f1f7243172cd0dd213906be49eb9d275e09c8bd0575921c51ba00058353ed034fd1df0cd409a19133f4a89f5e99ddc735ad3fbb767d0bb72c97ef175', + ], + [ + 'should get encoded message with bytes32', + { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + ArrayData: [ + { + name: 'bytes32', + type: 'bytes32', + }, + ], + }, + primaryType: 'ArrayData', + domain: { + name: 'Array Data', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + bytes32: '0x133d00e67f2390ce846a631aeb6718a674a3923f5320b79b6d3e2f5bf146319e', + }, + }, + true, + '0xa6cd048c02ef3cb70feee1bd9795decbbc8b431b976dfc86e3b09e55e0d2a3f3', + ], +]; + +/** + * string is the test title + * Eip712TypedData is the entire EIP-712 typed data object + * boolean is whether the EIP-712 encoded data is keccak256 hashed + * string is the encoded data expected to be returned by getEncodedEip712Data + */ +export const erroneousTestData: [string, Eip712TypedData, boolean | undefined, Error][] = [ + [ + 'should throw error: Cannot encode data: value is not of array type', + { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + ArrayData: [ + { + name: 'array1', + type: 'string[]', + }, + { + name: 'array2', + type: 'address[]', + }, + { + name: 'array3', + type: 'uint256[]', + }, + ], + }, + primaryType: 'ArrayData', + domain: { + name: 'Array Data', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + array1: ['string', 'string2', 'string3'], + array2: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + array3: [123456, 654321, 42], + }, + }, + false, + new Error('Cannot encode data: value is not of array type'), + ], + [ + 'should throw error: Cannot encode data: expected length of 3, but got 1', + { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + ArrayData: [ + { + name: 'array1', + type: 'string[]', + }, + { + name: 'array2', + type: 'address[3]', + }, + { + name: 'array3', + type: 'uint256[]', + }, + ], + }, + primaryType: 'ArrayData', + domain: { + name: 'Array Data', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + array1: ['string', 'string2', 'string3'], + array2: ['0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB'], + array3: [123456, 654321, 42], + }, + }, + false, + new Error('Cannot encode data: expected length of 3, but got 1'), + ], + [ + "should throw error: Cannot encode data: missing data for 'array3'", + { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + ArrayData: [ + { + name: 'array1', + type: 'string[]', + }, + { + name: 'array2', + type: 'address[]', + }, + { + name: 'array3', + type: 'uint256[]', + }, + ], + }, + primaryType: 'ArrayData', + domain: { + name: 'Array Data', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + array1: ['string', 'string2', 'string3'], + array2: ['0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB'], + array3: undefined, + }, + }, + false, + new Error("Cannot encode data: missing data for 'array3'"), + ], +]; diff --git a/packages/web3-eth-abi/test/integration/jest.config.js b/packages/web3-eth-abi/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-eth-abi/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-eth-abi/test/integration/setup.js b/packages/web3-eth-abi/test/integration/setup.js new file mode 100644 index 00000000000..339adf9ec52 --- /dev/null +++ b/packages/web3-eth-abi/test/integration/setup.js @@ -0,0 +1,23 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-eth-abi/test/tsconfig.json b/packages/web3-eth-abi/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-eth-abi/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-eth-abi/test/unit/api/errors_api.test.ts b/packages/web3-eth-abi/test/unit/api/errors_api.test.ts new file mode 100644 index 00000000000..dae7ec783a5 --- /dev/null +++ b/packages/web3-eth-abi/test/unit/api/errors_api.test.ts @@ -0,0 +1,41 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { encodeErrorSignature } from '../../../src/api/errors_api'; +import { validErrorsSignatures, invalidErrorSignatures } from '../../fixtures/data'; + +describe('errors_api', () => { + describe('encodeErrorSignature', () => { + describe('valid data', () => { + it.each(validErrorsSignatures)( + 'should pass for valid values: %s', + ({ input, output }) => { + expect(encodeErrorSignature(input)).toEqual(output); + }, + ); + }); + + describe('invalid data', () => { + it.each(invalidErrorSignatures)( + 'should pass for valid values: %s', + ({ input, output }) => { + expect(() => encodeErrorSignature(input)).toThrow(output); + }, + ); + }); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/api/events_api.test.ts b/packages/web3-eth-abi/test/unit/api/events_api.test.ts new file mode 100644 index 00000000000..f607e38c2d7 --- /dev/null +++ b/packages/web3-eth-abi/test/unit/api/events_api.test.ts @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { encodeEventSignature } from '../../../src/api/events_api'; +import { invalidEventsSignatures, validEventsSignatures } from '../../fixtures/data'; + +describe('events_api', () => { + describe('encodeEventSignature', () => { + describe('valid data', () => { + it.each(validEventsSignatures)( + 'should pass for valid values: %s', + ({ input, output }) => { + expect(encodeEventSignature(input)).toEqual(output); + }, + ); + }); + describe('invalid data', () => { + it.each(invalidEventsSignatures)( + 'should fail for invalid values: %s', + ({ input, output }) => { + expect(() => encodeEventSignature(input)).toThrow(output); + }, + ); + }); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/api/functions_api.test.ts b/packages/web3-eth-abi/test/unit/api/functions_api.test.ts new file mode 100644 index 00000000000..5a6e9479a38 --- /dev/null +++ b/packages/web3-eth-abi/test/unit/api/functions_api.test.ts @@ -0,0 +1,66 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { encodeFunctionCall, encodeFunctionSignature } from '../../../src/api/functions_api'; +import { + inValidFunctionsSignatures, + validFunctionsSignatures, + validFunctionsCall, + inValidFunctionsCalls, +} from '../../fixtures/data'; + +describe('functions_api', () => { + describe('encodeFunctionSignature', () => { + describe('valid data', () => { + it.each(validFunctionsSignatures)( + 'should pass for valid values: %s', + ({ input, output }) => { + expect(encodeFunctionSignature(input)).toEqual(output); + }, + ); + }); + + describe('invalid data', () => { + it.each(inValidFunctionsSignatures)( + 'should pass for valid values: %s', + ({ input, output }) => { + expect(() => encodeFunctionSignature(input)).toThrow(output); + }, + ); + }); + }); + + describe('encodeFunctionCall', () => { + describe('valid data', () => { + it.each(validFunctionsCall)( + 'should pass for valid values: %s', + ({ input: { abi, params }, output }) => { + expect(encodeFunctionCall(abi, params)).toEqual(output); + }, + ); + }); + + describe('invalid data', () => { + it.each(inValidFunctionsCalls)( + 'should pass for valid values: %s', + ({ input, output }) => { + expect(() => encodeFunctionCall(input, [])).toThrow(output); + }, + ); + }); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/api/logs_api.test.ts b/packages/web3-eth-abi/test/unit/api/logs_api.test.ts new file mode 100644 index 00000000000..972cec3fd3b --- /dev/null +++ b/packages/web3-eth-abi/test/unit/api/logs_api.test.ts @@ -0,0 +1,33 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { decodeLog } from '../../../src/api/logs_api'; +import { validDecodeLogsData } from '../../fixtures/data'; + +describe('logs_api', () => { + describe('decodeLog', () => { + describe('valid data', () => { + it.each(validDecodeLogsData)( + 'should pass for valid values: %j', + ({ input: { abi, data, topics }, output }) => { + const expected = decodeLog(abi, data, topics); + expect(JSON.parse(JSON.stringify(expected))).toEqual(output); + }, + ); + }); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/api/parameters_api.test.ts b/packages/web3-eth-abi/test/unit/api/parameters_api.test.ts new file mode 100644 index 00000000000..ae006ab0aee --- /dev/null +++ b/packages/web3-eth-abi/test/unit/api/parameters_api.test.ts @@ -0,0 +1,118 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiInput } from 'web3-types'; +import { decodeParameters, encodeParameters } from '../../../src/api/parameters_api'; +import { + inValidDecodeParametersData, + inValidEncodeParametersData, + validDecodeParametersData, + validEncodeParametersData, + validEncodeDecodeParametersData, + validEncodeDoesNotMutateData, +} from '../../fixtures/data'; + +describe('parameters_api', () => { + describe('encodeParameters', () => { + describe('valid data', () => { + it.each(validEncodeParametersData)( + '%#: should pass for valid values: %j', + ({ input: [abi, params], output }) => { + const expected = encodeParameters(abi, params); + expect(expected).toEqual(output); + }, + ); + }); + + describe('invalid data', () => { + it.each(inValidEncodeParametersData)( + '%#: should not pass for invalid values: %j', + ({ input: [abi, params] }) => { + expect(() => encodeParameters(abi, params)).toThrow(); + }, + ); + }); + }); + + describe('encodeParametersDoesNotMutate', () => { + describe('valid data', () => { + it.each(validEncodeDoesNotMutateData)( + '%#: should pass for valid values: %j', + ({ input: [abi, params], output, expectedInput }) => { + const expected = encodeParameters(abi, params); + expect(JSON.parse(JSON.stringify(expected))).toEqual(output); + // check that params has not been mutated + expect(JSON.parse(JSON.stringify(params))).toEqual( + JSON.parse(JSON.stringify(expectedInput)), + ); + }, + ); + }); + }); + + describe('decodeParameters', () => { + describe('valid data', () => { + it.each(validDecodeParametersData)( + '%#: should pass for valid values: %j', + ({ input: [abi, bytes], outputResult }) => { + // Output returns mix of array and object which can't be matched in + // jest, so have to use stringify+parse to match + // { + // '0': [ '34', '255' ], + // '1': [ + // '42', + // '56', + // [ '45', '78', propertyOne: '45', propertyTwo: '78' ], + // propertyOne: '42', + // propertyTwo: '56', + // ChildStruct: [ '45', '78', propertyOne: '45', propertyTwo: '78' ] + // ], + // __length__: 2 + // } + expect(JSON.parse(JSON.stringify(decodeParameters(abi, bytes)))).toEqual( + outputResult, + ); + }, + ); + }); + + describe('invalid data', () => { + it.each(inValidDecodeParametersData)( + '%#: should not pass for invalid values: %j', + ({ input: [abi, bytes] }) => { + expect(() => decodeParameters(abi, bytes)).toThrow(); + }, + ); + }); + }); + + describe('encode and decode', () => { + describe('input should be the same as returned value from encode and decode', () => { + it.each(validEncodeDecodeParametersData)( + '%#: should pass for valid values: %j', + ({ input: [abi, params], output, outputResult }) => { + const rwAbi = abi as AbiInput[]; + const encodedBytes = encodeParameters(abi, params); + expect(JSON.parse(JSON.stringify(encodedBytes))).toEqual(output); + + const decodedParams = decodeParameters(rwAbi, encodedBytes); + expect(JSON.parse(JSON.stringify(decodedParams))).toEqual(outputResult); + }, + ); + }); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/coders/base/address.test.ts b/packages/web3-eth-abi/test/unit/coders/base/address.test.ts new file mode 100644 index 00000000000..38c6096ca8e --- /dev/null +++ b/packages/web3-eth-abi/test/unit/coders/base/address.test.ts @@ -0,0 +1,59 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiError } from 'web3-errors'; +import { bytesToHex, hexToBytes } from 'web3-utils'; +import { decodeAddress, encodeAddress } from '../../../../src/coders/base/address'; +import { + invalidAddressDecoderData, + invalidAddressEncoderData, + validAddressDecoderData, + validAddressEncoderData, +} from '../../../fixtures/coders/base/address'; + +describe('abi - coder - base - address', () => { + describe('encode', () => { + it.each(validAddressEncoderData)('value %s to result in %s', (value, expected) => { + const result = encodeAddress({ type: 'address', name: '' }, value); + expect(Buffer.from(result.encoded).toString('hex')).toEqual(expected); + }); + + it.each(invalidAddressEncoderData)('value %s to throw', value => { + expect(() => encodeAddress({ type: 'address', name: '' }, value)).toThrow(AbiError); + }); + }); + + describe('decode', () => { + it.each(validAddressDecoderData)( + 'value %s to result in %s', + ({ bytes, result, remaining }) => { + const addressResult = decodeAddress( + { type: 'address', name: '' }, + hexToBytes(bytes), + ); + expect(addressResult.result).toEqual(result); + expect(bytesToHex(addressResult.encoded)).toEqual(remaining); + }, + ); + + it.each(invalidAddressDecoderData)('value %s to throw', bytes => { + expect(() => decodeAddress({ type: 'address', name: '' }, hexToBytes(bytes))).toThrow( + AbiError, + ); + }); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/coders/base/array.test.ts b/packages/web3-eth-abi/test/unit/coders/base/array.test.ts new file mode 100644 index 00000000000..e0716e44838 --- /dev/null +++ b/packages/web3-eth-abi/test/unit/coders/base/array.test.ts @@ -0,0 +1,85 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiError } from 'web3-errors'; +import { bytesToHex, hexToBytes } from 'web3-utils'; +import { decodeArray, encodeArray } from '../../../../src/coders/base'; +import { extractArrayType } from '../../../../src/coders/utils'; +import { + invalidArrayDecoderData, + invalidArrayEncoderData, + validArrayDecoderData, + validArrayEncoderData, +} from '../../../fixtures/coders/base/array'; + +describe('abi - coder - base - array', () => { + describe('extractArrayType', () => { + it('should work for dynamic array', () => { + expect(extractArrayType({ type: 'uint256[]', name: '' })).toEqual({ + param: { type: 'uint256', name: '' }, + size: -1, + }); + }); + it('should work for 2d array', () => { + expect(extractArrayType({ type: 'uint256[][]', name: '' })).toEqual({ + param: { type: 'uint256[]', name: '' }, + size: -1, + }); + }); + it('should work for fixed size array', () => { + expect(extractArrayType({ type: 'uint256[2]', name: '' })).toEqual({ + param: { type: 'uint256', name: '' }, + size: 2, + }); + expect(extractArrayType({ type: 'uint256[0]', name: '' })).toEqual({ + param: { type: 'uint256', name: '' }, + size: 0, + }); + }); + it('should fail for invalid array size', () => { + expect(() => extractArrayType({ type: 'uint256[2q]', name: '' })).toThrow(); + }); + }); + + describe('encode', () => { + it.each(validArrayEncoderData)('value %s to result in %s', value => { + const result = encodeArray({ type: value.type, name: '' }, value.values); + expect(bytesToHex(result.encoded)).toEqual(value.result); + expect(result.dynamic).toEqual(value.dynamic); + }); + + it.each(invalidArrayEncoderData)('value %s to throw', value => { + expect(() => encodeArray({ type: value.type, name: '' }, value.values)).toThrow( + AbiError, + ); + }); + }); + + describe('decode', () => { + it.each(validArrayDecoderData)('value to result', value => { + const result = decodeArray({ type: value.type, name: '' }, hexToBytes(value.bytes)); + expect(result.result).toEqual(value.result); + expect(bytesToHex(result.encoded)).toEqual(value.remaining); + }); + + it.each(invalidArrayDecoderData)('value to throw', value => { + expect(() => + decodeArray({ type: value.type, name: '' }, hexToBytes(value.bytes)), + ).toThrow(AbiError); + }); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/coders/base/bool.test.ts b/packages/web3-eth-abi/test/unit/coders/base/bool.test.ts new file mode 100644 index 00000000000..755eb097c24 --- /dev/null +++ b/packages/web3-eth-abi/test/unit/coders/base/bool.test.ts @@ -0,0 +1,56 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiError } from 'web3-errors'; +import { bytesToHex, hexToBytes } from 'web3-utils'; +import { decodeBool, encodeBoolean } from '../../../../src/coders/base/bool'; +import { + invalidBoolDecoderData, + invalidBoolEncoderData, + validBoolDecoderData, + validBoolEncoderData, +} from '../../../fixtures/coders/base/bool'; + +describe('abi - coder - base - bool', () => { + describe('encode', () => { + it.each(validBoolEncoderData)('value %s to result in %s', (value, expected) => { + const result = encodeBoolean({ type: 'boolean', name: '' }, value); + expect(Buffer.from(result.encoded).toString('hex')).toEqual(expected); + }); + + it.each(invalidBoolEncoderData)('value %s to throw', value => { + expect(() => encodeBoolean({ type: 'boolean', name: '' }, value)).toThrow(AbiError); + }); + }); + + describe('decode', () => { + it.each(validBoolDecoderData)( + 'value %s to result in %s', + ({ bytes, result, remaining }) => { + const boolResult = decodeBool({ type: 'boolean', name: '' }, hexToBytes(bytes)); + expect(boolResult.result).toEqual(result); + expect(bytesToHex(boolResult.encoded)).toEqual(remaining); + }, + ); + + it.each(invalidBoolDecoderData)('value %s to throw', value => { + expect(() => decodeBool({ type: 'boolean', name: '' }, hexToBytes(value))).toThrow( + AbiError, + ); + }); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/coders/base/bytes.test.ts b/packages/web3-eth-abi/test/unit/coders/base/bytes.test.ts new file mode 100644 index 00000000000..d9e1bdde496 --- /dev/null +++ b/packages/web3-eth-abi/test/unit/coders/base/bytes.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiError } from 'web3-errors'; +import { hexToBytes } from 'web3-utils'; +import { decodeBytes, encodeBytes } from '../../../../src/coders/base/bytes'; +import { + invalidBytesDecoderData, + invalidBytesEncoderData, + validBytesDecoderData, + validBytesEncoderData, +} from '../../../fixtures/coders/base/bytes'; + +describe('abi - coder - base - bytes', () => { + describe('encode', () => { + it.each(validBytesEncoderData)( + 'bytes%j type with value %s to result in %s', + (type, value, expected) => { + const result = encodeBytes(type, value); + expect(Buffer.from(result.encoded).toString('hex')).toEqual(expected); + const [, size] = type.type.split('bytes'); + if (size) { + // eslint-disable-next-line jest/no-conditional-expect + expect(result.dynamic).toBeFalsy(); + } else { + // eslint-disable-next-line jest/no-conditional-expect + expect(result.dynamic).toBeTruthy(); + } + }, + ); + + it.each(invalidBytesEncoderData)('bytes%j type value %s to throw', (type, value) => { + expect(() => encodeBytes(type, value)).toThrow(AbiError); + }); + }); + + describe('decode', () => { + it.each(validBytesDecoderData)( + 'bytes%j type with value %s to result in %s', + (type, value, expected, remaining) => { + const result = decodeBytes(type, hexToBytes(value)); + expect(result.result).toEqual(expected); + expect(result.encoded).toEqual(hexToBytes(remaining)); + }, + ); + + it.each(invalidBytesDecoderData)( + 'decode bytes %j type with value %s to throw', + (type, value) => { + expect(() => decodeBytes(type, hexToBytes(value))).toThrow(AbiError); + }, + ); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/coders/base/number.test.ts b/packages/web3-eth-abi/test/unit/coders/base/number.test.ts new file mode 100644 index 00000000000..914e106e5f4 --- /dev/null +++ b/packages/web3-eth-abi/test/unit/coders/base/number.test.ts @@ -0,0 +1,58 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiError } from 'web3-errors'; +import { hexToBytes } from 'web3-utils'; +import { decodeNumber, encodeNumber } from '../../../../src/coders/base/number'; +import { + invalidNumberDecoderData, + invalidNumberEncoderData, + validNumberDecoderData, + validNumberEncoderData, +} from '../../../fixtures/coders/base/number'; + +describe('abi - coder - base - number', () => { + describe('encode', () => { + it.each(validNumberEncoderData)( + '%j type with value %s to be %s', + (type, value, expected) => { + const result = encodeNumber(type, value); + expect(Buffer.from(result.encoded).toString('hex')).toEqual(expected); + }, + ); + + it.each(invalidNumberEncoderData)('%j type with value %s to throw', (type, value) => { + expect(() => encodeNumber(type, value)).toThrow(AbiError); + }); + }); + + describe('decode', () => { + it.each(validNumberDecoderData)( + '%j type with bytes %s', + (param, bytes, result, remaining) => { + const resultNumber = decodeNumber(param, hexToBytes(bytes)); + expect(typeof resultNumber.result).toEqual(typeof result); + expect(resultNumber.result.toString()).toEqual(result.toString()); + expect(resultNumber.encoded).toEqual(hexToBytes(remaining)); + }, + ); + + it.each(invalidNumberDecoderData)('%j type with bytes %s to throw', (type, value) => { + expect(() => decodeNumber(type, hexToBytes(value))).toThrow(AbiError); + }); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/coders/base/string.test.ts b/packages/web3-eth-abi/test/unit/coders/base/string.test.ts new file mode 100644 index 00000000000..22aa0f78844 --- /dev/null +++ b/packages/web3-eth-abi/test/unit/coders/base/string.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiError } from 'web3-errors'; +import { hexToBytes } from 'web3-utils'; +import { decodeString, encodeString } from '../../../../src/coders/base/string'; +import { + invalidStringEncoderData, + validStringDecoderData, + validStringEncoderData, +} from '../../../fixtures/coders/base/string'; + +describe('abi - coder - base - string', () => { + describe('encode', () => { + it.each(validStringEncoderData)( + 'string type with value %s to result in %s', + (value, expected) => { + const result = encodeString({ type: 'string', name: '' }, value); + expect(Buffer.from(result.encoded).toString('hex')).toEqual(expected); + expect(result.dynamic).toBeTruthy(); + }, + ); + it.each(invalidStringEncoderData)('string type with value %s to error', value => { + expect(() => encodeString({ type: 'string', name: '' }, value)).toThrow(AbiError); + }); + }); + + describe('decode', () => { + it.each(validStringDecoderData)( + 'string type with value %s to result in %s', + (value, expected, remaining) => { + const result = decodeString({ type: 'string', name: '' }, hexToBytes(value)); + expect(result.result).toEqual(expected); + expect(result.encoded).toEqual(hexToBytes(remaining)); + }, + ); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/coders/base/tuple.test.ts b/packages/web3-eth-abi/test/unit/coders/base/tuple.test.ts new file mode 100644 index 00000000000..a59c5d71204 --- /dev/null +++ b/packages/web3-eth-abi/test/unit/coders/base/tuple.test.ts @@ -0,0 +1,44 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { hexToBytes } from 'web3-utils'; +import { decodeTuple, encodeTuple } from '../../../../src/coders/base/tuple'; +import { validDecoderData, validEncoderData } from '../../../fixtures/coders/base/tuple'; + +describe('abi - coder - base - tuple', () => { + describe('encode', () => { + it.each(validEncoderData)('tuple type with value %s to result in %s', value => { + const result = encodeTuple( + { type: 'tuple', name: '', components: value.components }, + value.values, + ); + expect(Buffer.from(result.encoded).toString('hex')).toEqual(value.result); + expect(result.dynamic).toEqual(value.dynamic); + }); + }); + + describe('decode', () => { + it.each(validDecoderData)('tuple type with value %s to result in %s', value => { + const result = decodeTuple( + { type: 'tuple', name: '', components: value.components }, + hexToBytes(value.bytes), + ); + expect(result.result).toEqual(value.result); + expect(result.encoded).toEqual(hexToBytes(value.remaining)); + }); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/constructor.test.ts b/packages/web3-eth-abi/test/unit/constructor.test.ts new file mode 100644 index 00000000000..6116d16ef46 --- /dev/null +++ b/packages/web3-eth-abi/test/unit/constructor.test.ts @@ -0,0 +1,34 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +describe('constructs a PLACEHOLDER instance with expected properties', () => { + // let providerOptions: ProviderOptions + + beforeEach(() => { + // providerOptions = { + // providerUrl: 'http://127.0.0.1:8545' + // } + }); + + it('should construct with expected properties', () => { + // const web3ProviderBase = new Web3ProviderBase(providerOptions) + // expect(web3ProviderBase).toMatchObject({ + // _providerUrl: providerOptions.providerUrl + // }) + expect(true).toBeTruthy(); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/decodeContractErrorData.test.ts b/packages/web3-eth-abi/test/unit/decodeContractErrorData.test.ts new file mode 100644 index 00000000000..c130af64c4a --- /dev/null +++ b/packages/web3-eth-abi/test/unit/decodeContractErrorData.test.ts @@ -0,0 +1,53 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Eip838ExecutionError } from 'web3-errors'; +import { decodeContractErrorData } from '../../src/decode_contract_error_data'; + +import { validDecodeContractErrorData, invalidDecodeContractErrorData } from '../fixtures/data'; + +describe('decodeContractErrorData', () => { + describe('valid data', () => { + it.each(validDecodeContractErrorData)( + '%#: should pass for valid values: %j', + ({ input: [abi, errorData], output }) => { + const err = new Eip838ExecutionError(errorData); + + decodeContractErrorData(abi, err); + + expect(err.errorName).toEqual(output.errorName); + expect(err.errorSignature).toEqual(output.errorSignature); + expect(err.errorArgs?.message).toEqual(output.errorArgs?.message); + expect(Number(err.errorArgs?.code)).toEqual(output.errorArgs?.code); + expect(err.innerError?.code).toEqual(output.innerError?.code); + }, + ); + }); + + describe('invalid data', () => { + it.each(invalidDecodeContractErrorData)( + '%#: should throw for invalid values: %j', + ({ input: [abi, errorData] }) => { + // mock console.error + const consoleSpy = jest.spyOn(console, 'error').mockImplementation(() => 'error'); + const err = new Eip838ExecutionError(errorData); + decodeContractErrorData(abi, err); + expect(consoleSpy).toHaveBeenCalled(); + }, + ); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/encodeDecodeParams.test.ts b/packages/web3-eth-abi/test/unit/encodeDecodeParams.test.ts new file mode 100644 index 00000000000..63916a598ab --- /dev/null +++ b/packages/web3-eth-abi/test/unit/encodeDecodeParams.test.ts @@ -0,0 +1,39 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiInput } from 'web3-types'; +import { decodeParameters, encodeParameters } from '../../src'; +import testsData from '../fixtures/abitestsdata.json'; +import { deepEqualTolerateBigInt, removeKey } from './test_utils'; + +describe('encodeParameters decodeParameters tests should pass', () => { + it.each(testsData)(`unit test of encodeParameters - $name`, encoderTestObj => { + const encodedResult = encodeParameters([encoderTestObj.type], [encoderTestObj.value]); + expect(encodedResult).toEqual(encoderTestObj.encoded); + }); + + it.each(testsData)('unit test of decodeParameters - $name', decoderTestObj => { + const decodedResult = decodeParameters( + [decoderTestObj.type] as AbiInput[], + decoderTestObj.encoded, + ); + + removeKey(decodedResult[0], '__length__'); + + expect(deepEqualTolerateBigInt(decodedResult[0], decoderTestObj.value)).toBeTruthy(); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/get_encoded_eip712_data.test.ts b/packages/web3-eth-abi/test/unit/get_encoded_eip712_data.test.ts new file mode 100644 index 00000000000..f20d725010f --- /dev/null +++ b/packages/web3-eth-abi/test/unit/get_encoded_eip712_data.test.ts @@ -0,0 +1,29 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { getEncodedEip712Data } from '../../src/index'; +import { erroneousTestData, testData } from '../fixtures/get_encoded_eip712_data'; + +describe('getEncodedEip712Data', () => { + it.each(testData)('%s', (_, typedData, hashEncodedData, expectedResponse) => { + const encodedMessage = getEncodedEip712Data(typedData, hashEncodedData); + expect(encodedMessage).toBe(expectedResponse); + }); + + it.each(erroneousTestData)('%s', (_, typedData, hashEncodedData, expectedError) => { + expect(() => getEncodedEip712Data(typedData, hashEncodedData)).toThrow(expectedError); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/jest.config.js b/packages/web3-eth-abi/test/unit/jest.config.js new file mode 100644 index 00000000000..6acd2aba2ee --- /dev/null +++ b/packages/web3-eth-abi/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-eth-abi-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-eth-abi/test/unit/test_utils.ts b/packages/web3-eth-abi/test/unit/test_utils.ts new file mode 100644 index 00000000000..6f78ae7df9e --- /dev/null +++ b/packages/web3-eth-abi/test/unit/test_utils.ts @@ -0,0 +1,87 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const removeKey = (obj: any, key: any) => { + if (Array.isArray(obj)) { + for (const val of obj) { + removeKey(val, key); + } + } else if (typeof obj === 'object' && obj !== undefined) { + // eslint-disable-next-line no-restricted-syntax + for (const prop in obj) { + if (prop === key) { + // eslint-disable-next-line no-param-reassign + delete obj[prop]; + } else { + removeKey(obj[prop], key); + } + } + } +}; + +export const deepEqualTolerateBigInt = (obj1: any, obj2: any) => { + if (typeof obj1 === 'bigint') + // eslint-disable-next-line no-param-reassign + obj1 = obj1.toString(); + + if (typeof obj2 === 'bigint') + // eslint-disable-next-line no-param-reassign + obj2 = obj2.toString(); + + if (typeof obj1 !== typeof obj2) { + return false; + } + + if (Array.isArray(obj1) && Array.isArray(obj2)) { + if (obj1.length !== obj2.length) { + return false; + } + + /* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */ + for (let i = 0; i < obj1.length; i++) { + if (!deepEqualTolerateBigInt(obj1[i], obj2[i])) { + return false; + } + } + + return true; + } + + if ( + typeof obj1 === 'object' && + typeof obj2 === 'object' && + obj1 !== undefined && + obj2 !== undefined + ) { + const keys1 = Object.keys(obj1); + const keys2 = Object.keys(obj2); + + if (keys1.length !== keys2.length) { + return false; + } + + for (const key of keys1) { + if (!deepEqualTolerateBigInt(obj1[key], obj2[key])) { + return false; + } + } + + return true; + } + + return obj1 === obj2; +}; diff --git a/packages/web3-eth-abi/test/unit/types.test.ts b/packages/web3-eth-abi/test/unit/types.test.ts new file mode 100644 index 00000000000..7bcd3921258 --- /dev/null +++ b/packages/web3-eth-abi/test/unit/types.test.ts @@ -0,0 +1,262 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + Address, + ContractMethodOutputParameters, + Bytes, + MatchPrimitiveType, + Numbers, +} from 'web3-types'; +import { expectTypeOf, typecheck } from '@humeris/espresso-shot'; + +describe('types', () => { + describe('primitive types', () => { + describe('bool', () => { + typecheck('should extend the boolean type', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend the boolean type array', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend the boolean type fixed array', () => + expectTypeOf>().toExtend< + [boolean, boolean, boolean] + >(), + ); + }); + + describe('string', () => { + typecheck('should extend the string type', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend the string type array', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend the string type fixed array', () => + expectTypeOf>().toExtend< + [string, string, string] + >(), + ); + }); + + describe('address', () => { + typecheck('should extend correct type', () => + expectTypeOf>().toExtend

(), + ); + + typecheck('should extend the correct type array', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend the correct type fixed array', () => + expectTypeOf>().toExtend< + [Address, Address, Address] + >(), + ); + }); + + describe('bytes', () => { + typecheck('should extend correct type', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend correct type with size', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend the correct type array', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend the correct type fixed array', () => + expectTypeOf>().toExtend< + [Bytes, Bytes, Bytes] + >(), + ); + }); + + describe('uint', () => { + typecheck('should extend correct type', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend correct type with size', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend correct type with size array', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend the correct type array', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend the correct type fixed array', () => + expectTypeOf>().toExtend< + [Numbers, Numbers, Numbers] + >(), + ); + }); + + describe('int', () => { + typecheck('should extend correct type', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend correct type with size', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend correct type with size array', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend the correct type array', () => + expectTypeOf>().toExtend(), + ); + + typecheck('should extend the correct type fixed array', () => + expectTypeOf>().toExtend< + [Numbers, Numbers, Numbers] + >(), + ); + }); + + describe('tuple', () => { + typecheck('should extend correct type', () => + expectTypeOf< + MatchPrimitiveType<'tuple', [{ type: 'uint'; name: 'a' }]> + >().toExtend<{ a: Numbers }>(), + ); + + typecheck('should extend correct type with size array', () => + expectTypeOf< + MatchPrimitiveType<'tuple[3]', [{ type: 'uint'; name: 'a' }]> + >().toExtend<[{ a: Numbers }, { a: Numbers }, { a: Numbers }]>(), + ); + + typecheck('should extend the correct type array', () => + expectTypeOf< + MatchPrimitiveType<'tuple[]', [{ type: 'uint'; name: 'a' }]> + >().toExtend<{ a: Numbers }[]>(), + ); + }); + }); + + describe('contract', () => { + describe('outputs', () => { + typecheck('empty outputs should result in []', () => + expectTypeOf>().toExtend(), + ); + + typecheck('single outputs should result in that type', () => { + const abi = [ + { + name: '', + type: 'string', + }, + ] as const; + return expectTypeOf< + ContractMethodOutputParameters + >().toExtend(); + }); + + typecheck('multiple outputs should result in object indexed by numbers', () => { + const abi = [ + { + name: '', + type: 'string', + }, + { + name: '', + type: 'int', + }, + ] as const; + + return expectTypeOf< + ContractMethodOutputParameters[0] + >().toExtend(); + }); + + typecheck('multiple outputs should result in object indexed by numbers', () => { + const abi = [ + { + name: '', + type: 'string', + }, + { + name: '', + type: 'int', + }, + ] as const; + return expectTypeOf< + ContractMethodOutputParameters[1] + >().toExtend(); + }); + + typecheck('multiple outputs should result in object indexed by name', () => { + const abi = [ + { + name: 'first', + type: 'string', + }, + { + name: 'second', + type: 'int', + }, + ] as const; + return expectTypeOf< + ContractMethodOutputParameters['first'] + >().toExtend(); + }); + + typecheck('multiple outputs should result in object indexed by name', () => { + const abi = [ + { + name: 'first', + type: 'string', + }, + { + name: 'second', + type: 'int', + }, + ] as const; + return expectTypeOf< + ContractMethodOutputParameters['second'] + >().toExtend(); + }); + + typecheck('single output should result as in exactly one type', () => { + const abi = [ + { + name: 'first', + type: 'string', + }, + ] as const; + return expectTypeOf< + ContractMethodOutputParameters + >().toExtend(); + }); + }); + }); +}); diff --git a/packages/web3-eth-abi/test/unit/utils.test.ts b/packages/web3-eth-abi/test/unit/utils.test.ts new file mode 100644 index 00000000000..548e1b6a78a --- /dev/null +++ b/packages/web3-eth-abi/test/unit/utils.test.ts @@ -0,0 +1,63 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { jsonInterfaceMethodToString, isAbiConstructorFragment } from '../../src/utils'; +import { + jsonInterfaceInvalidData, + jsonInterfaceValidData, + validIsAbiConstructorFragment, + invalidIsAbiConstructorFragment, +} from '../fixtures/data'; + +describe('utils', () => { + describe('jsonInterfaceMethodToString', () => { + describe('valid cases', () => { + it.each(jsonInterfaceValidData)('%s', (input, output) => { + expect(jsonInterfaceMethodToString(input)).toEqual(output); + }); + }); + describe('invalid cases', () => { + // TODO: To be done after `sha3` is implemented + it.todo('should throw error for invalid cases'); + }); + }); + describe('jsonInterface', () => { + describe('valid cases', () => { + it.each(jsonInterfaceValidData)('%s', (input, output) => { + expect(jsonInterfaceMethodToString(input)).toEqual(output); + }); + }); + describe('invalid cases', () => { + it.each(jsonInterfaceInvalidData)('%s', (input, output) => { + expect(() => jsonInterfaceMethodToString(input)).toThrow(output); + }); + }); + }); + describe('isAbiConstructorFragment', () => { + describe('valid cases', () => { + it.each(validIsAbiConstructorFragment)('%s', ({ input }) => { + expect(isAbiConstructorFragment(input)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidIsAbiConstructorFragment)('%s', ({ input }) => { + expect(isAbiConstructorFragment(input)).toBeFalsy(); + }); + }); + }); +}); diff --git a/packages/web3-eth-abi/tsconfig.cjs.json b/packages/web3-eth-abi/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-eth-abi/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-eth-abi/tsconfig.esm.json b/packages/web3-eth-abi/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-eth-abi/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-eth-abi/tsconfig.json b/packages/web3-eth-abi/tsconfig.json deleted file mode 100644 index 4f8705c68af..00000000000 --- a/packages/web3-eth-abi/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ], -} \ No newline at end of file diff --git a/packages/web3-eth-abi/tsconfig.types.json b/packages/web3-eth-abi/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-eth-abi/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-eth-abi/tsdoc.json b/packages/web3-eth-abi/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-eth-abi/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-eth-abi/types/index.d.ts b/packages/web3-eth-abi/types/index.d.ts deleted file mode 100644 index 4343b578967..00000000000 --- a/packages/web3-eth-abi/types/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens - * @date 2018 - */ - -import { AbiInput, AbiItem } from 'web3-utils'; - -export class AbiCoder { - encodeFunctionSignature(functionName: string | AbiItem): string; - - encodeEventSignature(functionName: string | AbiItem): string; - - encodeParameter(type: any, parameter: any): string; - - encodeParameters(types: any[], paramaters: any[]): string; - - encodeFunctionCall(abiItem: AbiItem, params: string[]): string; - - decodeParameter(type: any, hex: string): { [key: string]: any }; - - decodeParameters(types: any[], hex: string): { [key: string]: any }; - - decodeLog( - inputs: AbiInput[], - hex: string, - topics: string[] - ): { [key: string]: string }; -} diff --git a/packages/web3-eth-abi/types/tests/abi-coder-test.ts b/packages/web3-eth-abi/types/tests/abi-coder-test.ts deleted file mode 100644 index 0ed89e58c0a..00000000000 --- a/packages/web3-eth-abi/types/tests/abi-coder-test.ts +++ /dev/null @@ -1,753 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file abi-coder-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import { AbiCoder } from 'web3-eth-abi'; - -const abiCoder = new AbiCoder(); - -// $ExpectType string -abiCoder.encodeFunctionSignature('myMethod(uint256,string)'); -// $ExpectType string -abiCoder.encodeFunctionSignature({ - name: 'myMethod', - type: 'function', - inputs: [ - { - type: 'uint256', - name: 'myNumber' - }, - { - type: 'string', - name: 'myString' - } - ] -}); - -// $ExpectError -abiCoder.encodeFunctionSignature(345); -// $ExpectError -abiCoder.encodeFunctionSignature({}); -// $ExpectError -abiCoder.encodeFunctionSignature(true); -// $ExpectError -abiCoder.encodeFunctionSignature(['string']); -// $ExpectError -abiCoder.encodeFunctionSignature([4]); -// $ExpectError -abiCoder.encodeFunctionSignature(null); -// $ExpectError -abiCoder.encodeFunctionSignature(undefined); -// $ExpectError -abiCoder.encodeFunctionSignature('myMethod(uint256,string)', { - name: 'myMethod' -}); - -// $ExpectType string -abiCoder.encodeEventSignature('myEvent(uint256,bytes32)'); -// $ExpectType string -abiCoder.encodeFunctionSignature({ - name: 'myEvent', - type: 'event', - inputs: [ - { - type: 'uint256', - name: 'myNumber' - }, - { - type: 'bytes32', - name: 'myBytes' - } - ] -}); - -// $ExpectError -abiCoder.encodeFunctionSignature(345); -// $ExpectError -abiCoder.encodeFunctionSignature({}); -// $ExpectError -abiCoder.encodeFunctionSignature(true); -// $ExpectError -abiCoder.encodeFunctionSignature(['string']); -// $ExpectError -abiCoder.encodeFunctionSignature([4]); -// $ExpectError -abiCoder.encodeFunctionSignature(null); -// $ExpectError -abiCoder.encodeFunctionSignature(undefined); -// $ExpectError -abiCoder.encodeFunctionSignature('myEvent(uint256,bytes32)', { - name: 'myEvent' -}); - -// $ExpectType string -abiCoder.encodeParameter('uint256', '2345675643'); -// $ExpectType string -abiCoder.encodeParameter('uint256', ['0xdf3234', '0xfdfd']); -// $ExpectType string -abiCoder.encodeParameter( - { - ParentStruct: { - propertyOne: 'uint256', - propertyTwo: 'uint256', - childStruct: { - propertyOne: 'uint256', - propertyTwo: 'uint256' - } - } - }, - { - propertyOne: 42, - propertyTwo: 56, - childStruct: { - propertyOne: 45, - propertyTwo: 78 - } - } -); - -// $ExpectType string -abiCoder.encodeParameters(['uint256', 'string'], ['2345675643', 'Hello!%']); -// $ExpectType string -abiCoder.encodeParameters( - ['uint8[]', 'bytes32'], - [['34', '434'], '0x324567fff'] -); -// $ExpectType string -abiCoder.encodeParameters( - [ - 'uint8[]', - { - ParentStruct: { - propertyOne: 'uint256', - propertyTwo: 'uint256', - ChildStruct: { - propertyOne: 'uint256', - propertyTwo: 'uint256' - } - } - } - ], - [ - ['34', '434'], - { - propertyOne: '42', - propertyTwo: '56', - ChildStruct: { - propertyOne: '45', - propertyTwo: '78' - } - } - ] -); - -// $ExpectError -abiCoder.encodeParameters(345, ['2345675643', 'Hello!%']); -// $ExpectError -abiCoder.encodeParameters(true, ['2345675643', 'Hello!%']); -// $ExpectError -abiCoder.encodeParameters(null, ['2345675643', 'Hello!%']); -// $ExpectError -abiCoder.encodeParameters(undefined, ['2345675643', 'Hello!%']); - -// $ExpectType string -abiCoder.encodeFunctionCall( - { - name: 'myMethod', - type: 'function', - inputs: [ - { - type: 'uint256', - name: 'myNumber' - }, - { - type: 'string', - name: 'myString' - } - ] - }, - ['2345675643', 'Hello!%'] -); - -// $ExpectError -abiCoder.encodeFunctionCall([345], ['2345675643', 'Hello!%']); -// $ExpectError -abiCoder.encodeFunctionCall(['string'], ['2345675643', 'Hello!%']); -// $ExpectError -abiCoder.encodeFunctionCall(345, ['2345675643', 'Hello!%']); -// $ExpectError -abiCoder.encodeFunctionCall(true, ['2345675643', 'Hello!%']); -// $ExpectError -abiCoder.encodeFunctionCall(null, ['2345675643', 'Hello!%']); -// $ExpectError -abiCoder.encodeFunctionCall(undefined, ['2345675643', 'Hello!%']); - -abiCoder.encodeFunctionCall( - { - name: 'myMethod', - type: 'function', - inputs: [ - { - type: 'uint256', - name: 'myNumber' - }, - { - type: 'string', - name: 'myString' - } - ] - }, - // $ExpectError - 345 -); - -abiCoder.encodeFunctionCall( - { - name: 'myMethod', - type: 'function', - inputs: [ - { - type: 'uint256', - name: 'myNumber' - }, - { - type: 'string', - name: 'myString' - } - ] - }, - // $ExpectError - [345] -); - -abiCoder.encodeFunctionCall( - { - name: 'myMethod', - type: 'function', - inputs: [ - { - type: 'uint256', - name: 'myNumber' - }, - { - type: 'string', - name: 'myString' - } - ] - }, - // $ExpectError - true -); - -abiCoder.encodeFunctionCall( - { - name: 'myMethod', - type: 'function', - inputs: [ - { - type: 'uint256', - name: 'myNumber' - }, - { - type: 'string', - name: 'myString' - } - ] - }, - // $ExpectError - null -); - -abiCoder.encodeFunctionCall( - { - name: 'myMethod', - type: 'function', - inputs: [ - { - type: 'uint256', - name: 'myNumber' - }, - { - type: 'string', - name: 'myString' - } - ] - }, - // $ExpectError - undefined -); - -// $ExpectType { [key: string]: any; } -abiCoder.decodeParameter( - 'uint256', - '0x0000000000000000000000000000000000000000000000000000000000000010' -); -// $ExpectType { [key: string]: any; } -abiCoder.decodeParameter( - 'uint256', - '0x0000000000000000000000000000000000000000000000000000000000000010' -); -// $ExpectType { [key: string]: any; } -abiCoder.decodeParameter( - 'uint256', - '0x0000000000000000000000000000000000000000000000000000000000000010' -); -// $ExpectType { [key: string]: any; } -abiCoder.decodeParameter( - { - ParentStruct: { - propertyOne: 'uint256', - propertyTwo: 'uint256', - childStruct: { - propertyOne: 'uint256', - propertyTwo: 'uint256' - } - } - }, - `0x000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000 - 00000000000038000000000000000000000000000000000000000000000000000000000000002d00000000000000000000000000000000000000 - 0000000000000000000000004e` -); - -// $ExpectError -abiCoder.decodeParameter('uint256', [345]); -// $ExpectError -abiCoder.decodeParameter('uint256', ['string']); -// $ExpectError -abiCoder.decodeParameter('uint256', 345); -// $ExpectError -abiCoder.decodeParameter('uint256', true); -// $ExpectError -abiCoder.decodeParameter('uint256', null); -// $ExpectError -abiCoder.decodeParameter('uint256', undefined); - -// $ExpectType { [key: string]: any; } -abiCoder.decodeParameters( - ['string', 'uint256'], - '0x0000000000000000000000000000000000000000000000000000000000000010' -); -// $ExpectType { [key: string]: any; } -abiCoder.decodeParameters( - [ - { - type: 'string', - name: 'myString' - }, - { - type: 'uint256', - name: 'myNumber' - } - ], - '0x0000000000000000000000000000000000000000000000000000000000000010' -); -// $ExpectType { [key: string]: any; } -abiCoder.decodeParameters( - [ - 'uint8[]', - { - ParentStruct: { - propertyOne: 'uint256', - propertyTwo: 'uint256', - childStruct: { - propertyOne: 'uint256', - propertyTwo: 'uint256' - } - } - } - ], - '0x0000000000000000000000000000000000000000000000000000000000000010' -); - -abiCoder.decodeParameters( - // $ExpectError - 'uint256', - '0x0000000000000000000000000000000000000000000000000000000000000010' -); - -abiCoder.decodeParameters( - // $ExpectError - 453, - '0x0000000000000000000000000000000000000000000000000000000000000010' -); - -abiCoder.decodeParameters( - // $ExpectError - true, - '0x0000000000000000000000000000000000000000000000000000000000000010' -); - -abiCoder.decodeParameters( - // $ExpectError - null, - '0x0000000000000000000000000000000000000000000000000000000000000010' -); - -abiCoder.decodeParameters( - // $ExpectError - undefined, - '0x0000000000000000000000000000000000000000000000000000000000000010' -); -// $ExpectError -abiCoder.decodeParameters(['string', 'uint256'], 345); -// $ExpectError -abiCoder.decodeParameters(['string', 'uint256'], ['string']); -// $ExpectError -abiCoder.decodeParameters(['string', 'uint256'], [345]); -// $ExpectError -abiCoder.decodeParameters(['string', 'uint256'], true); -// $ExpectError -abiCoder.decodeParameters(['string', 'uint256'], null); -// $ExpectError -abiCoder.decodeParameters(['string', 'uint256'], undefined); - -// $ExpectType { [key: string]: string; } -abiCoder.decodeLog( - [ - { - type: 'string', - name: 'myString' - }, - { - type: 'uint256', - name: 'myNumber', - indexed: true - }, - { - type: 'uint8', - name: 'mySmallNumber', - indexed: true - } - ], - `0x0000000000000000000000000000000000000000000000000000000000000020000000000000000 - 000000000000000000000000000000000000000000000000748656c6c6f2521000000000000000000 - 00000000000000000000000000000000`, - [ - '0x000000000000000000000000000000000000000000000000000000000000f310', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] -); - -abiCoder.decodeLog( - // $ExpectError - ['string'], - `0x0000000000000000000000000000000000000000000000000000000000000020000000000000000 - 000000000000000000000000000000000000000000000000748656c6c6f2521000000000000000000 - 00000000000000000000000000000000`, - [ - '0x000000000000000000000000000000000000000000000000000000000000f310', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] -); - -abiCoder.decodeLog( - // $ExpectError - [345], - `0x0000000000000000000000000000000000000000000000000000000000000020000000000000000 - 000000000000000000000000000000000000000000000000748656c6c6f2521000000000000000000 - 00000000000000000000000000000000`, - [ - '0x000000000000000000000000000000000000000000000000000000000000f310', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] -); - -abiCoder.decodeLog( - // $ExpectError - true, - `0x0000000000000000000000000000000000000000000000000000000000000020000000000000000 - 000000000000000000000000000000000000000000000000748656c6c6f2521000000000000000000 - 00000000000000000000000000000000`, - [ - '0x000000000000000000000000000000000000000000000000000000000000f310', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] -); - -abiCoder.decodeLog( - // $ExpectError - [undefined], - `0x0000000000000000000000000000000000000000000000000000000000000020000000000000000 - 000000000000000000000000000000000000000000000000748656c6c6f2521000000000000000000 - 00000000000000000000000000000000`, - [ - '0x000000000000000000000000000000000000000000000000000000000000f310', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] -); - -abiCoder.decodeLog( - // $ExpectError - [null], - `0x0000000000000000000000000000000000000000000000000000000000000020000000000000000 - 000000000000000000000000000000000000000000000000748656c6c6f2521000000000000000000 - 00000000000000000000000000000000`, - [ - '0x000000000000000000000000000000000000000000000000000000000000f310', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] -); - -abiCoder.decodeLog( - [ - { - type: 'string', - name: 'myString' - }, - { - type: 'uint256', - name: 'myNumber', - indexed: true - }, - { - type: 'uint8', - name: 'mySmallNumber', - indexed: true - } - ], - // $ExpectError - 345, - [ - '0x000000000000000000000000000000000000000000000000000000000000f310', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] -); - -abiCoder.decodeLog( - [ - { - type: 'string', - name: 'myString' - }, - { - type: 'uint256', - name: 'myNumber', - indexed: true - }, - { - type: 'uint8', - name: 'mySmallNumber', - indexed: true - } - ], - // $ExpectError - [345], - [ - '0x000000000000000000000000000000000000000000000000000000000000f310', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] -); - -abiCoder.decodeLog( - [ - { - type: 'string', - name: 'myString' - }, - { - type: 'uint256', - name: 'myNumber', - indexed: true - }, - { - type: 'uint8', - name: 'mySmallNumber', - indexed: true - } - ], - // $ExpectError - ['string'], - [ - '0x000000000000000000000000000000000000000000000000000000000000f310', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] -); - -abiCoder.decodeLog( - [ - { - type: 'string', - name: 'myString' - }, - { - type: 'uint256', - name: 'myNumber', - indexed: true - }, - { - type: 'uint8', - name: 'mySmallNumber', - indexed: true - } - ], - // $ExpectError - true, - [ - '0x000000000000000000000000000000000000000000000000000000000000f310', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] -); - -abiCoder.decodeLog( - [ - { - type: 'string', - name: 'myString' - }, - { - type: 'uint256', - name: 'myNumber', - indexed: true - }, - { - type: 'uint8', - name: 'mySmallNumber', - indexed: true - } - ], - // $ExpectError - null, - [ - '0x000000000000000000000000000000000000000000000000000000000000f310', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] -); - -abiCoder.decodeLog( - [ - { - type: 'string', - name: 'myString' - }, - { - type: 'uint256', - name: 'myNumber', - indexed: true - }, - { - type: 'uint8', - name: 'mySmallNumber', - indexed: true - } - ], - // $ExpectError - undefined, - [ - '0x000000000000000000000000000000000000000000000000000000000000f310', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] -); - -abiCoder.decodeLog( - [ - { - type: 'string', - name: 'myString' - }, - { - type: 'uint256', - name: 'myNumber', - indexed: true - }, - { - type: 'uint8', - name: 'mySmallNumber', - indexed: true - } - ], - `0x0000000000000000000000000000000000000000000000000000000000000020000000000000000 - 000000000000000000000000000000000000000000000000748656c6c6f2521000000000000000000 - 00000000000000000000000000000000`, - // $ExpectError - 345 -); - -abiCoder.decodeLog( - [ - { - type: 'string', - name: 'myString' - }, - { - type: 'uint256', - name: 'myNumber', - indexed: true - }, - { - type: 'uint8', - name: 'mySmallNumber', - indexed: true - } - ], - `0x0000000000000000000000000000000000000000000000000000000000000020000000000000000 - 000000000000000000000000000000000000000000000000748656c6c6f2521000000000000000000 - 00000000000000000000000000000000`, - // $ExpectError - [345] -); - -abiCoder.decodeLog( - [ - { - type: 'string', - name: 'myString' - }, - { - type: 'uint256', - name: 'myNumber', - indexed: true - }, - { - type: 'uint8', - name: 'mySmallNumber', - indexed: true - } - ], - `0x0000000000000000000000000000000000000000000000000000000000000020000000000000000 - 000000000000000000000000000000000000000000000000748656c6c6f2521000000000000000000 - 00000000000000000000000000000000`, - // $ExpectError - null -); - -abiCoder.decodeLog( - [ - { - type: 'string', - name: 'myString' - }, - { - type: 'uint256', - name: 'myNumber', - indexed: true - }, - { - type: 'uint8', - name: 'mySmallNumber', - indexed: true - } - ], - `0x0000000000000000000000000000000000000000000000000000000000000020000000000000000 - 000000000000000000000000000000000000000000000000748656c6c6f2521000000000000000000 - 00000000000000000000000000000000`, - // $ExpectError - undefined -); diff --git a/packages/web3-eth-abi/types/tsconfig.json b/packages/web3-eth-abi/types/tsconfig.json deleted file mode 100644 index 4e08e726c5b..00000000000 --- a/packages/web3-eth-abi/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-eth-abi": ["."] - } - } -} diff --git a/packages/web3-eth-abi/types/tslint.json b/packages/web3-eth-abi/types/tslint.json deleted file mode 100644 index 2b3d7bd5fb1..00000000000 --- a/packages/web3-eth-abi/types/tslint.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "typedef-whitespace": false - } -} diff --git a/packages/web3-eth-accounts/.eslintignore b/packages/web3-eth-accounts/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/packages/web3-eth-accounts/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-accounts/.eslintrc.js b/packages/web3-eth-accounts/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-eth-accounts/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth-accounts/.gitignore b/packages/web3-eth-accounts/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-eth-accounts/.npmignore b/packages/web3-eth-accounts/.npmignore new file mode 120000 index 00000000000..8a0be70f3ed --- /dev/null +++ b/packages/web3-eth-accounts/.npmignore @@ -0,0 +1 @@ +../../templates/.npmignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-accounts/.prettierignore b/packages/web3-eth-accounts/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-eth-accounts/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-accounts/.prettierrc.json b/packages/web3-eth-accounts/.prettierrc.json new file mode 120000 index 00000000000..00ecd510aaf --- /dev/null +++ b/packages/web3-eth-accounts/.prettierrc.json @@ -0,0 +1 @@ +../../templates/.prettierrc.json.tmpl \ No newline at end of file diff --git a/packages/web3-eth-accounts/CHANGELOG.md b/packages/web3-eth-accounts/CHANGELOG.md new file mode 100644 index 00000000000..5e1e9bee8c1 --- /dev/null +++ b/packages/web3-eth-accounts/CHANGELOG.md @@ -0,0 +1,152 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [4.0.1-alpha.1] + +### Changed + +- `signTransaction` and `privateKeyToAccount` will throw `TransactionSigningError` instead of `SignerError` now (#5462) + +## [4.0.1-alpha.2] + +### Removed + +- These types were moved to `web3-types` package: Cipher, CipherOptions, ScryptParams, PBKDF2SHA256Params, KeyStore (#5581) + +## [4.0.1-alpha.3] + +### Changed + +- Updated dependencies (#5725) + +## [4.0.1-alpha.4] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +## [4.0.1-alpha.5] + +### Changed + +- web3.js dependencies (#5757) + +## [4.0.1-rc.0] + +### Changed + +- Updated dependencies (#5912) + +## [4.0.1-rc.1] + +### Added + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +### Changed + +- Moved @ethereumjs/tx, @ethereumjs/common code to our source code (#5963) +- The method `signTransaction` returned by `privateKeyToAccount` is now accepting the type `Transaction` for its argument. (#5993) + +## [4.0.1-rc.2] + +### Fixed + +- Fixed ESM import bugs reported in (#6032) and (#6034) + +### Changed + +- Replaced `Buffer` for `Uint8Array` (#6004) +- The methods `recover`, `encrypt`, `privateKeyToAddress` does not support type `Buffer` but supports type `Uint8Array` (#6004) +- The method `parseAndValidatePrivateKey` returns a type `Uint8Array` instead of type `Buffer` (#6004) + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Fixed + +- Fixed "The `r` and `s` returned by `signTransaction` to does not always consist of 64 characters #6207" (#6216) + +## [4.0.3] + +### Changed + +- Dependencies updated + +## [4.0.4] + +### Changed + +- Dependencies updated + +## [4.0.5] + +### Changed + +- Dependencies updated + +## [4.0.6] + +### Fixed + +- Fixed "The `r` and `s` returned by `sign` to does not always consist of 64 characters" (#6411) + + +## [4.1.0] + +### Added + +- Added public function `privateKeyToPublicKey` +- Added exporting `BaseTransaction` from the package (#6493) +- Added exporting `txUtils` from the package (#6493) + +### Fixed + +- Fixed `recover` function, `v` will be normalized to value 0,1 (#6344) + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-eth-accounts/README.md b/packages/web3-eth-accounts/README.md index 6abe8e4cfa1..3ca18c2a460 100644 --- a/packages/web3-eth-accounts/README.md +++ b/packages/web3-eth-accounts/README.md @@ -1,46 +1,59 @@ -# web3-eth-accounts +

+ web3.js +

-[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +# web3.js - Web3 Eth Accounts -This is a sub-package of [web3.js][repo]. +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] -This is the accounts package used in the `web3-eth` package. +This is a sub-package of [web3.js][repo]. -Please read the [documentation][docs] for more. +`web3-eth-accounts` contains functionality for managing Ethereum accounts and signing. ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3-eth-accounts) or using [Yarn](https://yarnpkg.com/package/web3-eth-accounts) + +### Using NPM ```bash npm install web3-eth-accounts ``` -## Usage +### Using Yarn -```js -const Web3EthAccounts = require('web3-eth-accounts'); - -const account = new Web3EthAccounts('ws://localhost:8546'); -account.create(); -> { - address: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', - privateKey: '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', - signTransaction: function(tx){...}, - sign: function(data){...}, - encrypt: function(password){...} -} +```bash +yarn add web3-eth-accounts ``` -## Types +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts -All the TypeScript typings are placed in the `types` folder. +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-eth-accounts.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-eth-accounts +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-accounts%2Fpackage.json [npm-url]: https://npmjs.org/package/web3-eth-accounts -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-eth-accounts -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-eth-accounts -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-eth-accounts -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-eth-accounts +[downloads-image]: https://img.shields.io/npm/dm/web3-eth-accounts?label=npm%20downloads diff --git a/packages/web3-eth-accounts/assets/logo/web3js.ai b/packages/web3-eth-accounts/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-eth-accounts/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-eth-accounts/assets/logo/web3js.jpg b/packages/web3-eth-accounts/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-eth-accounts/assets/logo/web3js.jpg differ diff --git a/packages/web3-eth-accounts/assets/logo/web3js.svg b/packages/web3-eth-accounts/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-eth-accounts/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-eth-accounts/cypress b/packages/web3-eth-accounts/cypress new file mode 120000 index 00000000000..4a671a7beac --- /dev/null +++ b/packages/web3-eth-accounts/cypress @@ -0,0 +1 @@ +../../templates/cypress \ No newline at end of file diff --git a/packages/web3-eth-accounts/cypress.config.js b/packages/web3-eth-accounts/cypress.config.js new file mode 120000 index 00000000000..8cd9ba29af0 --- /dev/null +++ b/packages/web3-eth-accounts/cypress.config.js @@ -0,0 +1 @@ +../../templates/cypress.config.js \ No newline at end of file diff --git a/packages/web3-eth-accounts/package-lock.json b/packages/web3-eth-accounts/package-lock.json deleted file mode 100644 index 0f13064c5d8..00000000000 --- a/packages/web3-eth-accounts/package-lock.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "name": "web3-eth-accounts", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.0.tgz", - "integrity": "sha512-GnZbirvmqZUzMgkFn70c74OQpTTUcCzlhQliTzYjQMqg+hVKcDnxdL19Ne3UdYzdMA/+W3eb646FWn/ZaT1NfQ==" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", - "requires": { - "browserify-aes": "^1.0.6", - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4" - } - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "ethereumjs-common": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz", - "integrity": "sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ==" - }, - "ethereumjs-tx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz", - "integrity": "sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ==", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "0.1.6", - "keccak": "^2.0.0", - "rlp": "^2.2.3", - "secp256k1": "^3.0.1" - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" - }, - "keccak": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-2.1.0.tgz", - "integrity": "sha512-m1wbJRTo+gWbctZWay9i26v5fFnYkOn7D5PCxJ3fZUGUEb49dE1Pm4BREUYCt/aoO6di7jeoGmhvqN9Nzylm3Q==", - "requires": { - "bindings": "^1.5.0", - "inherits": "^2.0.4", - "nan": "^2.14.0", - "safe-buffer": "^5.2.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.4.tgz", - "integrity": "sha512-fdq2yYCWpAQBhwkZv+Z8o/Z4sPmYm1CUq6P7n6lVTOdb949CnqA0sndXal5C1NleSVSZm6q5F3iEbauyVln/iw==", - "requires": { - "bn.js": "^4.11.1" - } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" - }, - "secp256k1": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz", - "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==", - "requires": { - "bindings": "^1.5.0", - "bip66": "^1.1.5", - "bn.js": "^4.11.8", - "create-hash": "^1.2.0", - "drbg.js": "^1.0.1", - "elliptic": "^6.5.2", - "nan": "^2.14.0", - "safe-buffer": "^5.1.2" - } - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-eth-accounts/package.json b/packages/web3-eth-accounts/package.json index b907dace695..ae62345610d 100644 --- a/packages/web3-eth-accounts/package.json +++ b/packages/web3-eth-accounts/package.json @@ -1,33 +1,69 @@ { - "name": "web3-eth-accounts", - "version": "1.3.0", - "description": "Web3 module to generate Ethereum accounts and sign data and transactions.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-eth-accounts", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.3.0", - "web3-core-helpers": "1.3.0", - "web3-core-method": "1.3.0", - "web3-utils": "1.3.0" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3-eth-accounts", + "version": "4.1.0", + "description": "Package for managing Ethereum accounts and signing", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "jest-when": "^3.5.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4", + "web3-providers-ipc": "^4.0.7" + }, + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "crc-32": "^1.2.2", + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + } } diff --git a/packages/web3-eth-accounts/src/account.ts b/packages/web3-eth-accounts/src/account.ts new file mode 100644 index 00000000000..793f1f76bbc --- /dev/null +++ b/packages/web3-eth-accounts/src/account.ts @@ -0,0 +1,742 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + decrypt as createDecipheriv, + encrypt as createCipheriv, +} from 'ethereum-cryptography/aes.js'; +import { pbkdf2Sync } from 'ethereum-cryptography/pbkdf2.js'; +import { scryptSync } from 'ethereum-cryptography/scrypt.js'; +import { + InvalidKdfError, + InvalidPasswordError, + InvalidPrivateKeyError, + InvalidSignatureError, + IVLengthError, + KeyDerivationError, + KeyStoreVersionError, + PBKDF2IterationsError, + PrivateKeyLengthError, + TransactionSigningError, + UndefinedRawTransactionError, +} from 'web3-errors'; +import { + Address, + Bytes, + CipherOptions, + HexString, + KeyStore, + PBKDF2SHA256Params, + ScryptParams, + Transaction, +} from 'web3-types'; +import { + bytesToUint8Array, + bytesToHex, + fromUtf8, + hexToBytes, + numberToHex, + randomBytes, + sha3Raw, + toChecksumAddress, + uint8ArrayConcat, + utf8ToHex, + uuidV4, +} from 'web3-utils'; + +import { isHexStrict, isNullish, isString, validator } from 'web3-validator'; +import { secp256k1 } from './tx/constants.js'; +import { keyStoreSchema } from './schemas.js'; +import { TransactionFactory } from './tx/transactionFactory.js'; +import type { + SignatureObject, + SignTransactionResult, + TypedTransaction, + Web3Account, + SignResult, +} from './types.js'; + +/** + * Get the private key Uint8Array after the validation + */ +export const parseAndValidatePrivateKey = (data: Bytes, ignoreLength?: boolean): Uint8Array => { + let privateKeyUint8Array: Uint8Array; + + // To avoid the case of 1 character less in a hex string which is prefixed with '0' by using 'bytesToUint8Array' + if (!ignoreLength && typeof data === 'string' && isHexStrict(data) && data.length !== 66) { + throw new PrivateKeyLengthError(); + } + + try { + privateKeyUint8Array = data instanceof Uint8Array ? data : bytesToUint8Array(data); + } catch { + throw new InvalidPrivateKeyError(); + } + + if (!ignoreLength && privateKeyUint8Array.byteLength !== 32) { + throw new PrivateKeyLengthError(); + } + + return privateKeyUint8Array; +}; + +/** + * + * Hashes the given message. The data will be UTF-8 HEX decoded and enveloped as follows: "\\x19Ethereum Signed Message:\\n" + message.length + message and hashed using keccak256. + * + * @param message - A message to hash, if its HEX it will be UTF8 decoded. + * @returns The hashed message + * + * ```ts + * hashMessage("Hello world") + * > "0x8144a6fa26be252b86456491fbcd43c1de7e022241845ffea1c3df066f7cfede" + * hashMessage(utf8ToHex("Hello world")) // Will be hex decoded in hashMessage + * > "0x8144a6fa26be252b86456491fbcd43c1de7e022241845ffea1c3df066f7cfede" + * ``` + */ +export const hashMessage = (message: string): string => { + const messageHex = isHexStrict(message) ? message : utf8ToHex(message); + + const messageBytes = hexToBytes(messageHex); + + const preamble = hexToBytes( + fromUtf8(`\x19Ethereum Signed Message:\n${messageBytes.byteLength}`), + ); + + const ethMessage = uint8ArrayConcat(preamble, messageBytes); + + return sha3Raw(ethMessage); // using keccak in web3-utils.sha3Raw instead of SHA3 (NIST Standard) as both are different +}; + +/** + * Signs arbitrary data with a given private key. + * **_NOTE:_** The value passed as the data parameter will be UTF-8 HEX decoded and wrapped as follows: "\\x19Ethereum Signed Message:\\n" + message.length + message + * + * @param data - The data to sign + * @param privateKey - The 32 byte private key to sign with + * @returns The signature Object containing the message, messageHash, signature r, s, v + * + * ```ts + * web3.eth.accounts.sign('Some data', '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318') + * > { + * message: 'Some data', + * messageHash: '0x1da44b586eb0729ff70a73c326926f6ed5a25f5b056e7f47fbc6e58d86871655', + * v: '0x1c', + * r: '0xb91467e570a6466aa9e9876cbcd013baba02900b8979d43fe208a4a4f339f5fd', + * s: '0x6007e74cd82e037b800186422fc2da167c747ef045e5d18a5f5d4300f8e1a029', + * signature: '0xb91467e570a6466aa9e9876cbcd013baba02900b8979d43fe208a4a4f339f5fd6007e74cd82e037b800186422fc2da167c747ef045e5d18a5f5d4300f8e1a0291c' + * } + * ``` + */ +export const sign = (data: string, privateKey: Bytes): SignResult => { + const privateKeyUint8Array = parseAndValidatePrivateKey(privateKey); + + const hash = hashMessage(data); + + const signature = secp256k1.sign(hash.substring(2), privateKeyUint8Array); + const signatureBytes = signature.toCompactRawBytes(); + const r = signature.r.toString(16).padStart(64, '0'); + const s = signature.s.toString(16).padStart(64, '0'); + const v = signature.recovery! + 27; + + return { + message: data, + messageHash: hash, + v: numberToHex(v), + r: `0x${r}`, + s: `0x${s}`, + signature: `${bytesToHex(signatureBytes)}${v.toString(16)}`, + }; +}; + +/** + * Signs an Ethereum transaction with a given private key. + * + * @param transaction - The transaction, must be a legacy, EIP2930 or EIP 1559 transaction type + * @param privateKey - The private key to import. This is 32 bytes of random data. + * @returns A signTransactionResult object that contains message hash, r, s, v, transaction hash and raw transaction. + * + * This function is not stateful here. We need network access to get the account `nonce` and `chainId` to sign the transaction. + * This function will rely on user to provide the full transaction to be signed. If you want to sign a partial transaction object + * Use {@link Web3.eth.accounts.sign} instead. + * + * Signing a legacy transaction + * ```ts + * signTransaction({ + * to: '0x118C2E5F57FD62C2B5b46a5ae9216F4FF4011a07', + * value: '0x186A0', + * gasLimit: '0x520812', + * gasPrice: '0x09184e72a000', + * data: '', + * chainId: 1, + * nonce: 0, + * }, '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318')) + * } + * > { + * messageHash: '0x28b7b75f7ba48d588a902c1ff4d5d13cc0ca9ac0aaa39562368146923fb853bf', + * v: '0x25', + * r: '0x601b0017b0e20dd0eeda4b895fbc1a9e8968990953482214f880bae593e71b5', + * s: '0x690d984493560552e3ebdcc19a65b9c301ea9ddc82d3ab8cfde60485fd5722ce', + * rawTransaction: '0xf869808609184e72a0008352081294118c2e5f57fd62c2b5b46a5ae9216f4ff4011a07830186a08025a00601b0017b0e20dd0eeda4b895fbc1a9e8968990953482214f880bae593e71b5a0690d984493560552e3ebdcc19a65b9c301ea9ddc82d3ab8cfde60485fd5722ce', + * transactionHash: '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' + * ``` + * Signing an eip 1559 transaction + * ```ts + * signTransaction({ + * to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + * maxPriorityFeePerGas: '0x3B9ACA00', + * maxFeePerGas: '0xB2D05E00', + * gasLimit: '0x6A4012', + * value: '0x186A0', + * data: '', + * chainId: 1, + * nonce: 0, + * },"0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318") + * > { + * messageHash: '0x5744f24d5f0aff6c70487c8e85adf07d8564e50b08558788f00479611d7bae5f', + * v: '0x25', + * r: '0x78a5a6b2876c3985f90f82073d18d57ac299b608cc76a4ba697b8bb085048347', + * s: '0x9cfcb40cc7d505ed17ff2d3337b51b066648f10c6b7e746117de69b2eb6358d', + * rawTransaction: '0xf8638080836a401294f0109fc8df283027b6285cc889f5aa624eac1f55830186a08025a078a5a6b2876c3985f90f82073d18d57ac299b608cc76a4ba697b8bb085048347a009cfcb40cc7d505ed17ff2d3337b51b066648f10c6b7e746117de69b2eb6358d', + * transactionHash: '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' + * } + * ``` + * Signing an eip 2930 transaction + * ```ts + * signTransaction({ + * chainId: 1, + * nonce: 0, + * gasPrice: '0x09184e72a000', + * gasLimit: '0x2710321', + * to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + * value: '0x186A0', + * data: '', + * accessList: [ + * { + * address: '0x0000000000000000000000000000000000000101', + * storageKeys: [ + * '0x0000000000000000000000000000000000000000000000000000000000000000', + * '0x00000000000000000000000000000000000000000000000000000000000060a7', + * ], + * }, + * ], + * },"0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318") + * > { + * messageHash: '0xc55ea24bdb4c379550a7c9a6818ac39ca33e75bc78ddb862bd82c31cc1c7a073', + * v: '0x26', + * r: '0x27344e77871c8b2068bc998bf28e0b5f9920867a69c455b2ed0c1c150fec098e', + * s: '0x519f0130a1d662841d4a28082e9c9bb0a15e0e59bb46cfc39a52f0e285dec6b9', + * rawTransaction: '0xf86a808609184e72a000840271032194f0109fc8df283027b6285cc889f5aa624eac1f55830186a08026a027344e77871c8b2068bc998bf28e0b5f9920867a69c455b2ed0c1c150fec098ea0519f0130a1d662841d4a28082e9c9bb0a15e0e59bb46cfc39a52f0e285dec6b9', + * transactionHash: '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' + * } + * ``` + */ +export const signTransaction = async ( + transaction: TypedTransaction, + privateKey: HexString, + // To make it compatible with rest of the API, have to keep it async + // eslint-disable-next-line @typescript-eslint/require-await +): Promise => { + const signedTx = transaction.sign(hexToBytes(privateKey)); + if (isNullish(signedTx.v) || isNullish(signedTx.r) || isNullish(signedTx.s)) + throw new TransactionSigningError('Signer Error'); + + const validationErrors = signedTx.validate(true); + + if (validationErrors.length > 0) { + let errorString = 'Signer Error '; + for (const validationError of validationErrors) { + errorString += `${errorString} ${validationError}.`; + } + throw new TransactionSigningError(errorString); + } + + const rawTx = bytesToHex(signedTx.serialize()); + const txHash = sha3Raw(rawTx); // using keccak in web3-utils.sha3Raw instead of SHA3 (NIST Standard) as both are different + + return { + messageHash: bytesToHex(signedTx.getMessageToSign(true)), + v: `0x${signedTx.v.toString(16)}`, + r: `0x${signedTx.r.toString(16).padStart(64, '0')}`, + s: `0x${signedTx.s.toString(16).padStart(64, '0')}`, + rawTransaction: rawTx, + transactionHash: bytesToHex(txHash), + }; +}; + +/** + * Recovers the Ethereum address which was used to sign the given RLP encoded transaction. + * + * @param rawTransaction - The hex string having RLP encoded transaction + * @returns The Ethereum address used to sign this transaction + * ```ts + * recoverTransaction('0xf869808504e3b29200831e848094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008025a0c9cf86333bcb065d140032ecaab5d9281bde80f21b9687b3e94161de42d51895a0727a108a0b8d101465414033c3f705a9c7b826e596766046ee1183dbc8aeaa68'); + * > "0x2c7536E3605D9C16a7a3D7b1898e529396a65c23" + * ``` + */ +export const recoverTransaction = (rawTransaction: HexString): Address => { + if (isNullish(rawTransaction)) throw new UndefinedRawTransactionError(); + + const tx = TransactionFactory.fromSerializedData(hexToBytes(rawTransaction)); + + return toChecksumAddress(tx.getSenderAddress().toString()); +}; + +/** + * Recovers the Ethereum address which was used to sign the given data + * + * @param data - Either a signed message, hash, or the {@link signatureObject} + * @param signature - The raw RLP encoded signature + * @param signatureOrV - signatureOrV + * @param prefixedOrR - prefixedOrR + * @param s - s + * @param prefixed - (default: false) If the last parameter is true, the given message will NOT automatically be prefixed with "\\x19Ethereum Signed Message:\\n" + message.length + message, and assumed to be already prefixed. + * @returns The Ethereum address used to sign this data + * ```ts + * sign('Some data', '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728'); + * > { + * message: 'Some data', + * messageHash: '0x1da44b586eb0729ff70a73c326926f6ed5a25f5b056e7f47fbc6e58d86871655', + * v: '0x1b', + * r: '0xa8037a6116c176a25e6fc224947fde9e79a2deaa0dd8b67b366fbdfdbffc01f9', + * s: '0x53e41351267b20d4a89ebfe9c8f03c04de9b345add4a52f15bd026b63c8fb150', + * signature: '0xa8037a6116c176a25e6fc224947fde9e79a2deaa0dd8b67b366fbdfdbffc01f953e41351267b20d4a89ebfe9c8f03c04de9b345add4a52f15bd026b63c8fb1501b' + * } + * recover('0xa8037a6116c176a25e6fc224947fde9e79a2deaa0dd8b67b366fbdfdbffc01f953e41351267b20d4a89ebfe9c8f03c04de9b345add4a52f15bd026b63c8fb1501b'); + * > '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0' + * ``` + */ +export const recover = ( + data: string | SignatureObject, + signatureOrV?: string, + prefixedOrR?: boolean | string, + s?: string, + prefixed?: boolean, +): Address => { + if (typeof data === 'object') { + const signatureStr = `${data.r}${data.s.slice(2)}${data.v.slice(2)}`; + return recover(data.messageHash, signatureStr, prefixedOrR); + } + if (typeof signatureOrV === 'string' && typeof prefixedOrR === 'string' && !isNullish(s)) { + const signatureStr = `${prefixedOrR}${s.slice(2)}${signatureOrV.slice(2)}`; + return recover(data, signatureStr, prefixed); + } + + if (isNullish(signatureOrV)) throw new InvalidSignatureError('signature string undefined'); + + const V_INDEX = 130; // r = first 32 bytes, s = second 32 bytes, v = last byte of signature + const hashedMessage = prefixedOrR ? data : hashMessage(data); + + let v = parseInt(signatureOrV.substring(V_INDEX),16); // 0x + r + s + v + if (v > 26) { + v -= 27; + } + + const ecPublicKey = secp256k1.Signature.fromCompact(signatureOrV.slice(2, V_INDEX)) + .addRecoveryBit(v) + .recoverPublicKey(hashedMessage.replace('0x', '')) + .toRawBytes(false); + + const publicHash = sha3Raw(ecPublicKey.subarray(1)); + + const address = toChecksumAddress(`0x${publicHash.slice(-40)}`); + + return address; +}; + +/** + * Get the ethereum Address from a private key + * + * @param privateKey - String or Uint8Array of 32 bytes + * @param ignoreLength - if true, will not error check length + * @returns The Ethereum address + * @example + * ```ts + * privateKeyToAddress("0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728") + * > "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0" + * ``` + */ +export const privateKeyToAddress = (privateKey: Bytes): string => { + const privateKeyUint8Array = parseAndValidatePrivateKey(privateKey); + + // Get public key from private key in compressed format + const publicKey = secp256k1.getPublicKey(privateKeyUint8Array, false); + + // Uncompressed ECDSA public key contains the prefix `0x04` which is not used in the Ethereum public key + const publicKeyHash = sha3Raw(publicKey.slice(1)); + + // The hash is returned as 256 bits (32 bytes) or 64 hex characters + // To get the address, take the last 20 bytes of the public hash + const address = publicKeyHash.slice(-40); + + return toChecksumAddress(`0x${address}`); +}; + +/** + * Get the public key from a private key + * + * @param privateKey - String or Uint8Array of 32 bytes + * @param isCompressed - if true, will generate a 33 byte compressed public key instead of a 65 byte public key + * @returns The public key + * @example + * ```ts + * privateKeyToAddress("0x1e046a882bb38236b646c9f135cf90ad90a140810f439875f2a6dd8e50fa261f", true) + * > "0x42beb65f179720abaa3ec9a70a539629cbbc5ec65bb57e7fc78977796837e537662dd17042e6449dc843c281067a4d6d8d1a1775a13c41901670d5de7ee6503a" // uncompressed public key + * ``` + */ + export const privateKeyToPublicKey = (privateKey: Bytes, isCompressed: boolean): string => { + const privateKeyUint8Array = parseAndValidatePrivateKey(privateKey); + + // Get public key from private key in compressed format + return `0x${bytesToHex(secp256k1.getPublicKey(privateKeyUint8Array, isCompressed)).slice(4)}`; // 0x and removing compression byte +}; + +/** + * encrypt a private key with a password, returns a V3 JSON Keystore + * + * Read more: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition + * + * @param privateKey - The private key to encrypt, 32 bytes. + * @param password - The password used for encryption. + * @param options - Options to configure to encrypt the keystore either scrypt or pbkdf2 + * @returns Returns a V3 JSON Keystore + * + * + * Encrypt using scrypt options + * ```ts + * encrypt('0x67f476289210e3bef3c1c75e4de993ff0a00663df00def84e73aa7411eac18a6', + * '123', + * { + * n: 8192, + * iv: web3.utils.hexToBytes('0xbfb43120ae00e9de110f8325143a2709'), + * salt: web3.utils.hexToBytes('0x210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd'), + * ), + * }).then(console.log) + * > { + * version: 3, + * id: 'c0cb0a94-4702-4492-b6e6-eb2ac404344a', + * address: 'cda9a91875fc35c8ac1320e098e584495d66e47c', + * crypto: { + * ciphertext: 'cb3e13e3281ff3861a3f0257fad4c9a51b0eb046f9c7821825c46b210f040b8f', + * cipherparams: { iv: 'bfb43120ae00e9de110f8325143a2709' }, + * cipher: 'aes-128-ctr', + * kdf: 'scrypt', + * kdfparams: { + * n: 8192, + * r: 8, + * p: 1, + * dklen: 32, + * salt: '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd' + * }, + * mac: 'efbf6d3409f37c0084a79d5fdf9a6f5d97d11447517ef1ea8374f51e581b7efd' + * } + *} + *``` + * Encrypting using pbkdf2 options + * ```ts + * encrypt('0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', + *'123', + *{ + * iv: 'bfb43120ae00e9de110f8325143a2709', + * salt: '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd', + * c: 262144, + * kdf: 'pbkdf2', + *}).then(console.log) + * > + * { + * version: 3, + * id: '77381417-0973-4e4b-b590-8eb3ace0fe2d', + * address: 'b8ce9ab6943e0eced004cde8e3bbed6568b2fa01', + * crypto: { + * ciphertext: '76512156a34105fa6473ad040c666ae7b917d14c06543accc0d2dc28e6073b12', + * cipherparams: { iv: 'bfb43120ae00e9de110f8325143a2709' }, + * cipher: 'aes-128-ctr', + * kdf: 'pbkdf2', + * kdfparams: { + * dklen: 32, + * salt: '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd', + * c: 262144, + * prf: 'hmac-sha256' + * }, + * mac: '46eb4884e82dc43b5aa415faba53cc653b7038e9d61cc32fd643cf8c396189b7' + * } + * } + *``` + */ +export const encrypt = async ( + privateKey: Bytes, + password: string | Uint8Array, + options?: CipherOptions, +): Promise => { + const privateKeyUint8Array = parseAndValidatePrivateKey(privateKey); + + // if given salt or iv is a string, convert it to a Uint8Array + let salt; + if (options?.salt) { + salt = typeof options.salt === 'string' ? hexToBytes(options.salt) : options.salt; + } else { + salt = randomBytes(32); + } + + if (!(isString(password) || password instanceof Uint8Array)) { + throw new InvalidPasswordError(); + } + + const uint8ArrayPassword = + typeof password === 'string' ? hexToBytes(utf8ToHex(password)) : password; + + let initializationVector; + if (options?.iv) { + initializationVector = typeof options.iv === 'string' ? hexToBytes(options.iv) : options.iv; + if (initializationVector.length !== 16) { + throw new IVLengthError(); + } + } else { + initializationVector = randomBytes(16); + } + + const kdf = options?.kdf ?? 'scrypt'; + + let derivedKey; + let kdfparams: ScryptParams | PBKDF2SHA256Params; + + // derive key from key derivation function + if (kdf === 'pbkdf2') { + kdfparams = { + dklen: options?.dklen ?? 32, + salt: bytesToHex(salt).replace('0x', ''), + c: options?.c ?? 262144, + prf: 'hmac-sha256', + }; + + if (kdfparams.c < 1000) { + // error when c < 1000, pbkdf2 is less secure with less iterations + throw new PBKDF2IterationsError(); + } + derivedKey = pbkdf2Sync(uint8ArrayPassword, salt, kdfparams.c, kdfparams.dklen, 'sha256'); + } else if (kdf === 'scrypt') { + kdfparams = { + n: options?.n ?? 8192, + r: options?.r ?? 8, + p: options?.p ?? 1, + dklen: options?.dklen ?? 32, + salt: bytesToHex(salt).replace('0x', ''), + }; + derivedKey = scryptSync( + uint8ArrayPassword, + salt, + kdfparams.n, + kdfparams.p, + kdfparams.r, + kdfparams.dklen, + ); + } else { + throw new InvalidKdfError(); + } + + const cipher = await createCipheriv( + privateKeyUint8Array, + derivedKey.slice(0, 16), + initializationVector, + 'aes-128-ctr', + ); + + const ciphertext = bytesToHex(cipher).slice(2); + + const mac = sha3Raw(uint8ArrayConcat(derivedKey.slice(16, 32), cipher)).replace('0x', ''); + return { + version: 3, + id: uuidV4(), + address: privateKeyToAddress(privateKeyUint8Array).toLowerCase().replace('0x', ''), + crypto: { + ciphertext, + cipherparams: { + iv: bytesToHex(initializationVector).replace('0x', ''), + }, + cipher: 'aes-128-ctr', + kdf, + kdfparams, + mac, + }, + }; +}; + +/** + * Get an Account object from the privateKey + * + * @param privateKey - String or Uint8Array of 32 bytes + * @param ignoreLength - if true, will not error check length + * @returns A Web3Account object + * + * The `Web3Account.signTransaction` is not stateful here. We need network access to get the account `nonce` and `chainId` to sign the transaction. + * Use {@link Web3.eth.accounts.signTransaction} instead. + * + * ```ts + * privateKeyToAccount("0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709"); + * > { + * address: '0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01', + * privateKey: '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', + * sign, + * signTransaction, + * encrypt, + * } + * ``` + */ +export const privateKeyToAccount = (privateKey: Bytes, ignoreLength?: boolean): Web3Account => { + const privateKeyUint8Array = parseAndValidatePrivateKey(privateKey, ignoreLength); + + return { + address: privateKeyToAddress(privateKeyUint8Array), + privateKey: bytesToHex(privateKeyUint8Array), + // eslint-disable-next-line @typescript-eslint/no-unused-vars + signTransaction: (_tx: Transaction) => { + throw new TransactionSigningError('Do not have network access to sign the transaction'); + }, + sign: (data: Record | string) => + sign(typeof data === 'string' ? data : JSON.stringify(data), privateKeyUint8Array), + encrypt: async (password: string, options?: Record) => + encrypt(privateKeyUint8Array, password, options), + }; +}; + +/** + * + * Generates and returns a Web3Account object that includes the private and public key + * For creation of private key, it uses an audited package ethereum-cryptography/secp256k1 + * that is cryptographically secure random number with certain characteristics. + * Read more: https://www.npmjs.com/package/ethereum-cryptography#secp256k1-curve + * + * @returns A Web3Account object + * ```ts + * web3.eth.accounts.create(); + * { + * address: '0xbD504f977021b5E5DdccD8741A368b147B3B38bB', + * privateKey: '0x964ced1c69ad27a311c432fdc0d8211e987595f7eb34ab405a5f16bdc9563ec5', + * signTransaction: [Function: signTransaction], + * sign: [Function: sign], + * encrypt: [AsyncFunction: encrypt] + * } + * ``` + */ +export const create = (): Web3Account => { + const privateKey = secp256k1.utils.randomPrivateKey(); + + return privateKeyToAccount(`${bytesToHex(privateKey)}`); +}; + +/** + * Decrypts a v3 keystore JSON, and creates the account. + * + * @param keystore - the encrypted Keystore object or string to decrypt + * @param password - The password that was used for encryption + * @param nonStrict - if true and given a json string, the keystore will be parsed as lowercase. + * @returns Returns the decrypted Web3Account object + * Decrypting scrypt + * + * ```ts + * decrypt({ + * version: 3, + * id: 'c0cb0a94-4702-4492-b6e6-eb2ac404344a', + * address: 'cda9a91875fc35c8ac1320e098e584495d66e47c', + * crypto: { + * ciphertext: 'cb3e13e3281ff3861a3f0257fad4c9a51b0eb046f9c7821825c46b210f040b8f', + * cipherparams: { iv: 'bfb43120ae00e9de110f8325143a2709' }, + * cipher: 'aes-128-ctr', + * kdf: 'scrypt', + * kdfparams: { + * n: 8192, + * r: 8, + * p: 1, + * dklen: 32, + * salt: '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd' + * }, + * mac: 'efbf6d3409f37c0084a79d5fdf9a6f5d97d11447517ef1ea8374f51e581b7efd' + * } + * }, '123').then(console.log) + * > { + * address: '0xcdA9A91875fc35c8Ac1320E098e584495d66e47c', + * privateKey: '67f476289210e3bef3c1c75e4de993ff0a00663df00def84e73aa7411eac18a6', + * signTransaction: [Function: signTransaction], + * sign: [Function: sign], + * encrypt: [AsyncFunction: encrypt] + * } + * ``` + */ +export const decrypt = async ( + keystore: KeyStore | string, + password: string | Uint8Array, + nonStrict?: boolean, +): Promise => { + const json = + typeof keystore === 'object' + ? keystore + : (JSON.parse(nonStrict ? keystore.toLowerCase() : keystore) as KeyStore); + + validator.validateJSONSchema(keyStoreSchema, json); + + if (json.version !== 3) throw new KeyStoreVersionError(); + + const uint8ArrayPassword = + typeof password === 'string' ? hexToBytes(utf8ToHex(password)) : password; + + validator.validate(['bytes'], [uint8ArrayPassword]); + + let derivedKey; + if (json.crypto.kdf === 'scrypt') { + const kdfparams = json.crypto.kdfparams as ScryptParams; + const uint8ArraySalt = + typeof kdfparams.salt === 'string' ? hexToBytes(kdfparams.salt) : kdfparams.salt; + derivedKey = scryptSync( + uint8ArrayPassword, + uint8ArraySalt, + kdfparams.n, + kdfparams.p, + kdfparams.r, + kdfparams.dklen, + ); + } else if (json.crypto.kdf === 'pbkdf2') { + const kdfparams: PBKDF2SHA256Params = json.crypto.kdfparams as PBKDF2SHA256Params; + + const uint8ArraySalt = + typeof kdfparams.salt === 'string' ? hexToBytes(kdfparams.salt) : kdfparams.salt; + + derivedKey = pbkdf2Sync( + uint8ArrayPassword, + uint8ArraySalt, + kdfparams.c, + kdfparams.dklen, + 'sha256', + ); + } else { + throw new InvalidKdfError(); + } + + const ciphertext = hexToBytes(json.crypto.ciphertext); + const mac = sha3Raw(uint8ArrayConcat(derivedKey.slice(16, 32), ciphertext)).replace('0x', ''); + + if (mac !== json.crypto.mac) { + throw new KeyDerivationError(); + } + + const seed = await createDecipheriv( + hexToBytes(json.crypto.ciphertext), + derivedKey.slice(0, 16), + hexToBytes(json.crypto.cipherparams.iv), + ); + + return privateKeyToAccount(seed); +}; diff --git a/packages/web3-eth-accounts/src/common/chains/goerli.ts b/packages/web3-eth-accounts/src/common/chains/goerli.ts new file mode 100644 index 00000000000..d09be79d2cc --- /dev/null +++ b/packages/web3-eth-accounts/src/common/chains/goerli.ts @@ -0,0 +1,97 @@ +export default { + "name": "goerli", + "chainId": 5, + "networkId": 5, + "defaultHardfork": "merge", + "consensus": { + "type": "poa", + "algorithm": "clique", + "clique": { + "period": 15, + "epoch": 30000 + } + }, + "comment": "Cross-client PoA test network", + "url": "https://github.com/goerli/testnet", + "genesis": { + "timestamp": "0x5c51a607", + "gasLimit": 10485760, + "difficulty": 1, + "nonce": "0x0000000000000000", + "extraData": "0x22466c6578692069732061207468696e6722202d204166726900000000000000e0a2bd4258d2768837baa26a28fe71dc079f84c70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "hardforks": [ + { + "name": "chainstart", + "block": 0, + "forkHash": "0xa3f5ab08" + }, + { + "name": "homestead", + "block": 0, + "forkHash": "0xa3f5ab08" + }, + { + "name": "tangerineWhistle", + "block": 0, + "forkHash": "0xa3f5ab08" + }, + { + "name": "spuriousDragon", + "block": 0, + "forkHash": "0xa3f5ab08" + }, + { + "name": "byzantium", + "block": 0, + "forkHash": "0xa3f5ab08" + }, + { + "name": "constantinople", + "block": 0, + "forkHash": "0xa3f5ab08" + }, + { + "name": "petersburg", + "block": 0, + "forkHash": "0xa3f5ab08" + }, + { + "name": "istanbul", + "block": 1561651, + "forkHash": "0xc25efa5c" + }, + { + "name": "berlin", + "block": 4460644, + "forkHash": "0x757a1c47" + }, + { + "name": "london", + "block": 5062605, + "forkHash": "0xb8c6299d" + }, + { + "//_comment": "The forkHash will remain same as mergeForkIdTransition is post merge, terminal block: https://goerli.etherscan.io/block/7382818", + "name": "merge", + "ttd": "10790000", + "block": 7382819, + "forkHash": "0xb8c6299d" + }, + { + "name": "mergeForkIdTransition", + "block": null, + "forkHash": null + }, + { + "name": "shanghai", + "block": null, + "forkHash": null + } + ], + "bootstrapNodes": [], + "dnsNetworks": [ + "enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@all.goerli.ethdisco.net" + ] +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/chains/mainnet.ts b/packages/web3-eth-accounts/src/common/chains/mainnet.ts new file mode 100644 index 00000000000..d18bc733a94 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/chains/mainnet.ts @@ -0,0 +1,113 @@ +export default { + "name": "mainnet", + "chainId": 1, + "networkId": 1, + "defaultHardfork": "merge", + "consensus": { + "type": "pow", + "algorithm": "ethash", + "ethash": {} + }, + "comment": "The Ethereum main chain", + "url": "https://ethstats.net/", + "genesis": { + "gasLimit": 5000, + "difficulty": 17179869184, + "nonce": "0x0000000000000042", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa" + }, + "hardforks": [ + { + "name": "chainstart", + "block": 0, + "forkHash": "0xfc64ec04" + }, + { + "name": "homestead", + "block": 1150000, + "forkHash": "0x97c2c34c" + }, + { + "name": "dao", + "block": 1920000, + "forkHash": "0x91d1f948" + }, + { + "name": "tangerineWhistle", + "block": 2463000, + "forkHash": "0x7a64da13" + }, + { + "name": "spuriousDragon", + "block": 2675000, + "forkHash": "0x3edd5b10" + }, + { + "name": "byzantium", + "block": 4370000, + "forkHash": "0xa00bc324" + }, + { + "name": "constantinople", + "block": 7280000, + "forkHash": "0x668db0af" + }, + { + "name": "petersburg", + "block": 7280000, + "forkHash": "0x668db0af" + }, + { + "name": "istanbul", + "block": 9069000, + "forkHash": "0x879d6e30" + }, + { + "name": "muirGlacier", + "block": 9200000, + "forkHash": "0xe029e991" + }, + { + "name": "berlin", + "block": 12244000, + "forkHash": "0x0eb440f6" + }, + { + "name": "london", + "block": 12965000, + "forkHash": "0xb715077d" + }, + { + "name": "arrowGlacier", + "block": 13773000, + "forkHash": "0x20c327fc" + }, + { + "name": "grayGlacier", + "block": 15050000, + "forkHash": "0xf0afd0e3" + }, + { + "//_comment": "The forkHash will remain same as mergeForkIdTransition is post merge, terminal block: https://etherscan.io/block/15537393", + "name": "merge", + "ttd": "58750000000000000000000", + "block": 15537394, + "forkHash": "0xf0afd0e3" + }, + { + "name": "mergeForkIdTransition", + "block": null, + "forkHash": null + }, + { + "name": "shanghai", + "block": null, + "forkHash": null + } + ], + "bootstrapNodes": [], + "dnsNetworks": [ + "enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@all.mainnet.ethdisco.net" + ] +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/chains/sepolia.ts b/packages/web3-eth-accounts/src/common/chains/sepolia.ts new file mode 100644 index 00000000000..1de20e440ee --- /dev/null +++ b/packages/web3-eth-accounts/src/common/chains/sepolia.ts @@ -0,0 +1,100 @@ +export default { + "name": "sepolia", + "chainId": 11155111, + "networkId": 11155111, + "defaultHardfork": "merge", + "consensus": { + "type": "pow", + "algorithm": "ethash", + "ethash": {} + }, + "comment": "PoW test network to replace Ropsten", + "url": "https://github.com/ethereum/go-ethereum/pull/23730", + "genesis": { + "timestamp": "0x6159af19", + "gasLimit": 30000000, + "difficulty": 131072, + "nonce": "0x0000000000000000", + "extraData": "0x5365706f6c69612c20417468656e732c204174746963612c2047726565636521" + }, + "hardforks": [ + { + "name": "chainstart", + "block": 0, + "forkHash": "0xfe3366e7" + }, + { + "name": "homestead", + "block": 0, + "forkHash": "0xfe3366e7" + }, + { + "name": "tangerineWhistle", + "block": 0, + "forkHash": "0xfe3366e7" + }, + { + "name": "spuriousDragon", + "block": 0, + "forkHash": "0xfe3366e7" + }, + { + "name": "byzantium", + "block": 0, + "forkHash": "0xfe3366e7" + }, + { + "name": "constantinople", + "block": 0, + "forkHash": "0xfe3366e7" + }, + { + "name": "petersburg", + "block": 0, + "forkHash": "0xfe3366e7" + }, + { + "name": "istanbul", + "block": 0, + "forkHash": "0xfe3366e7" + }, + { + "name": "muirGlacier", + "block": 0, + "forkHash": "0xfe3366e7" + }, + { + "name": "berlin", + "block": 0, + "forkHash": "0xfe3366e7" + }, + { + "name": "london", + "block": 0, + "forkHash": "0xfe3366e7" + }, + { + "//_comment": "The forkHash will remain same as mergeForkIdTransition is post merge, terminal block: https://sepolia.etherscan.io/block/1450408", + "name": "merge", + "ttd": "17000000000000000", + "block": 1450409, + "forkHash": "0xfe3366e7" + }, + { + "name": "mergeForkIdTransition", + "block": 1735371, + "forkHash": "0xb96cbd13" + }, + { + "name": "shanghai", + "block": null, + "timestamp": "1677557088", + "forkHash": "0xf7f9bc08" + } + ], + "bootstrapNodes": [], + "dnsNetworks": [ + "enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@all.sepolia.ethdisco.net" + ] +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/common.ts b/packages/web3-eth-accounts/src/common/common.ts new file mode 100644 index 00000000000..e941338763a --- /dev/null +++ b/packages/web3-eth-accounts/src/common/common.ts @@ -0,0 +1,1207 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import pkg from 'crc-32'; +import { EventEmitter, bytesToHex, hexToBytes, uint8ArrayConcat } from 'web3-utils'; +import type { Numbers } from 'web3-types'; +import { TypeOutput } from './types.js'; +import { intToUint8Array, toType, parseGethGenesis } from './utils.js'; +import goerli from './chains/goerli.js'; +import mainnet from './chains/mainnet.js'; +import sepolia from './chains/sepolia.js'; +import { EIPs } from './eips/index.js'; +import type { ConsensusAlgorithm, ConsensusType } from './enums.js'; +import { Chain, CustomChain, Hardfork } from './enums.js'; +import { hardforks as HARDFORK_SPECS } from './hardforks/index.js'; + +import type { + BootstrapNodeConfig, + CasperConfig, + ChainConfig, + ChainName, + ChainsConfig, + CliqueConfig, + CommonOpts, + CustomCommonOpts, + EthashConfig, + GenesisBlockConfig, + GethConfigOpts, + HardforkConfig, +} from './types.js'; + +const { buf: crc32Uint8Array } = pkg; + +type HardforkSpecKeys = keyof typeof HARDFORK_SPECS; +type HardforkSpecValues = typeof HARDFORK_SPECS[HardforkSpecKeys]; +/** + * Common class to access chain and hardfork parameters and to provide + * a unified and shared view on the network and hardfork state. + * + * Use the {@link Common.custom} static constructor for creating simple + * custom chain {@link Common} objects (more complete custom chain setups + * can be created via the main constructor and the {@link CommonOpts.customChains} parameter). + */ +export class Common extends EventEmitter { + public readonly DEFAULT_HARDFORK: string | Hardfork; + + private _chainParams: ChainConfig; + private _hardfork: string | Hardfork; + private _eips: number[] = []; + private readonly _customChains: ChainConfig[]; + + private readonly HARDFORK_CHANGES: [HardforkSpecKeys, HardforkSpecValues][]; + + /** + * Creates a {@link Common} object for a custom chain, based on a standard one. + * + * It uses all the {@link Chain} parameters from the {@link baseChain} option except the ones overridden + * in a provided {@link chainParamsOrName} dictionary. Some usage example: + * + * ```javascript + * Common.custom({chainId: 123}) + * ``` + * + * There are also selected supported custom chains which can be initialized by using one of the + * {@link CustomChains} for {@link chainParamsOrName}, e.g.: + * + * ```javascript + * Common.custom(CustomChains.MaticMumbai) + * ``` + * + * Note that these supported custom chains only provide some base parameters (usually the chain and + * network ID and a name) and can only be used for selected use cases (e.g. sending a tx with + * the `web3-utils/tx` library to a Layer-2 chain). + * + * @param chainParamsOrName Custom parameter dict (`name` will default to `custom-chain`) or string with name of a supported custom chain + * @param opts Custom chain options to set the {@link CustomCommonOpts.baseChain}, selected {@link CustomCommonOpts.hardfork} and others + */ + public static custom( + chainParamsOrName: Partial | CustomChain, + opts: CustomCommonOpts = {}, + ): Common { + const baseChain = opts.baseChain ?? 'mainnet'; + const standardChainParams = { ...Common._getChainParams(baseChain) }; + standardChainParams.name = 'custom-chain'; + + if (typeof chainParamsOrName !== 'string') { + return new Common({ + chain: { + ...standardChainParams, + ...chainParamsOrName, + }, + ...opts, + }); + } + if (chainParamsOrName === CustomChain.PolygonMainnet) { + return Common.custom( + { + name: CustomChain.PolygonMainnet, + chainId: 137, + networkId: 137, + }, + opts, + ); + } + if (chainParamsOrName === CustomChain.PolygonMumbai) { + return Common.custom( + { + name: CustomChain.PolygonMumbai, + chainId: 80001, + networkId: 80001, + }, + opts, + ); + } + if (chainParamsOrName === CustomChain.ArbitrumRinkebyTestnet) { + return Common.custom( + { + name: CustomChain.ArbitrumRinkebyTestnet, + chainId: 421611, + networkId: 421611, + }, + opts, + ); + } + if (chainParamsOrName === CustomChain.ArbitrumOne) { + return Common.custom( + { + name: CustomChain.ArbitrumOne, + chainId: 42161, + networkId: 42161, + }, + opts, + ); + } + if (chainParamsOrName === CustomChain.xDaiChain) { + return Common.custom( + { + name: CustomChain.xDaiChain, + chainId: 100, + networkId: 100, + }, + opts, + ); + } + + if (chainParamsOrName === CustomChain.OptimisticKovan) { + return Common.custom( + { + name: CustomChain.OptimisticKovan, + chainId: 69, + networkId: 69, + }, + // Optimism has not implemented the London hardfork yet (targeting Q1.22) + { hardfork: Hardfork.Berlin, ...opts }, + ); + } + + if (chainParamsOrName === CustomChain.OptimisticEthereum) { + return Common.custom( + { + name: CustomChain.OptimisticEthereum, + chainId: 10, + networkId: 10, + }, + // Optimism has not implemented the London hardfork yet (targeting Q1.22) + { hardfork: Hardfork.Berlin, ...opts }, + ); + } + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + throw new Error(`Custom chain ${chainParamsOrName} not supported`); + } + + /** + * Static method to load and set common from a geth genesis json + * @param genesisJson json of geth configuration + * @param { chain, eips, genesisHash, hardfork, mergeForkIdPostMerge } to further configure the common instance + * @returns Common + */ + public static fromGethGenesis( + genesisJson: any, + { chain, eips, genesisHash, hardfork, mergeForkIdPostMerge }: GethConfigOpts, + ): Common { + const genesisParams = parseGethGenesis(genesisJson, chain, mergeForkIdPostMerge); + const common = new Common({ + chain: genesisParams.name ?? 'custom', + customChains: [genesisParams], + eips, + hardfork: hardfork ?? genesisParams.hardfork, + }); + if (genesisHash !== undefined) { + common.setForkHashes(genesisHash); + } + return common; + } + + /** + * Static method to determine if a {@link chainId} is supported as a standard chain + * @param chainId bigint id (`1`) of a standard chain + * @returns boolean + */ + public static isSupportedChainId(chainId: bigint): boolean { + const initializedChains = this._getInitializedChains(); + return Boolean((initializedChains.names as ChainName)[chainId.toString()]); + } + + private static _getChainParams( + _chain: string | number | Chain | bigint, + customChains?: ChainConfig[], + ): ChainConfig { + let chain = _chain; + const initializedChains = this._getInitializedChains(customChains); + if (typeof chain === 'number' || typeof chain === 'bigint') { + chain = chain.toString(); + + if ((initializedChains.names as ChainName)[chain]) { + const name: string = (initializedChains.names as ChainName)[chain]; + return initializedChains[name] as ChainConfig; + } + + throw new Error(`Chain with ID ${chain} not supported`); + } + + if (initializedChains[chain] !== undefined) { + return initializedChains[chain] as ChainConfig; + } + + throw new Error(`Chain with name ${chain} not supported`); + } + + public constructor(opts: CommonOpts) { + super(); + this._customChains = opts.customChains ?? []; + this._chainParams = this.setChain(opts.chain); + this.DEFAULT_HARDFORK = this._chainParams.defaultHardfork ?? Hardfork.Merge; + // Assign hardfork changes in the sequence of the applied hardforks + this.HARDFORK_CHANGES = this.hardforks().map(hf => [ + hf.name as HardforkSpecKeys, + HARDFORK_SPECS[hf.name as HardforkSpecKeys], + ]); + this._hardfork = this.DEFAULT_HARDFORK; + if (opts.hardfork !== undefined) { + this.setHardfork(opts.hardfork); + } + if (opts.eips) { + this.setEIPs(opts.eips); + } + } + + /** + * Sets the chain + * @param chain String ('mainnet') or Number (1) chain representation. + * Or, a Dictionary of chain parameters for a private network. + * @returns The dictionary with parameters set as chain + */ + public setChain(chain: string | number | Chain | bigint | object): ChainConfig { + if (typeof chain === 'number' || typeof chain === 'bigint' || typeof chain === 'string') { + this._chainParams = Common._getChainParams(chain, this._customChains); + } else if (typeof chain === 'object') { + if (this._customChains.length > 0) { + throw new Error( + 'Chain must be a string, number, or bigint when initialized with customChains passed in', + ); + } + const required = ['networkId', 'genesis', 'hardforks', 'bootstrapNodes']; + for (const param of required) { + if (!(param in chain)) { + throw new Error(`Missing required chain parameter: ${param}`); + } + } + this._chainParams = chain as ChainConfig; + } else { + throw new Error('Wrong input format'); + } + for (const hf of this.hardforks()) { + if (hf.block === undefined) { + throw new Error(`Hardfork cannot have undefined block number`); + } + } + return this._chainParams; + } + + /** + * Sets the hardfork to get params for + * @param hardfork String identifier (e.g. 'byzantium') or {@link Hardfork} enum + */ + public setHardfork(hardfork: string | Hardfork): void { + let existing = false; + for (const hfChanges of this.HARDFORK_CHANGES) { + if (hfChanges[0] === hardfork) { + if (this._hardfork !== hardfork) { + this._hardfork = hardfork; + this.emit('hardforkChanged', hardfork); + } + existing = true; + } + } + if (!existing) { + throw new Error(`Hardfork with name ${hardfork} not supported`); + } + } + + /** + * Returns the hardfork based on the block number or an optional + * total difficulty (Merge HF) provided. + * + * An optional TD takes precedence in case the corresponding HF block + * is set to `null` or otherwise needs to match (if not an error + * will be thrown). + * + * @param blockNumber + * @param td : total difficulty of the parent block (for block hf) OR of the chain latest (for chain hf) + * @param timestamp: timestamp in seconds at which block was/is to be minted + * @returns The name of the HF + */ + public getHardforkByBlockNumber( + _blockNumber: Numbers, + _td?: Numbers, + _timestamp?: Numbers, + ): string { + const blockNumber = toType(_blockNumber, TypeOutput.BigInt); + const td = toType(_td, TypeOutput.BigInt); + const timestamp = toType(_timestamp, TypeOutput.Number); + + // Filter out hardforks with no block number, no ttd or no timestamp (i.e. unapplied hardforks) + const hfs = this.hardforks().filter( + hf => + // eslint-disable-next-line no-null/no-null + hf.block !== null || + // eslint-disable-next-line no-null/no-null + (hf.ttd !== null && hf.ttd !== undefined) || + hf.timestamp !== undefined, + ); + // eslint-disable-next-line no-null/no-null + const mergeIndex = hfs.findIndex(hf => hf.ttd !== null && hf.ttd !== undefined); + const doubleTTDHF = hfs + .slice(mergeIndex + 1) + // eslint-disable-next-line no-null/no-null + .findIndex(hf => hf.ttd !== null && hf.ttd !== undefined); + if (doubleTTDHF >= 0) { + throw Error(`More than one merge hardforks found with ttd specified`); + } + + // Find the first hardfork that has a block number greater than `blockNumber` + // (skips the merge hardfork since it cannot have a block number specified). + // If timestamp is not provided, it also skips timestamps hardforks to continue + // discovering/checking number hardforks. + let hfIndex = hfs.findIndex( + hf => + // eslint-disable-next-line no-null/no-null + (hf.block !== null && hf.block > blockNumber) || + (timestamp !== undefined && Number(hf.timestamp) > timestamp), + ); + + if (hfIndex === -1) { + // all hardforks apply, set hfIndex to the last one as that's the candidate + hfIndex = hfs.length; + } else if (hfIndex === 0) { + // cannot have a case where a block number is before all applied hardforks + // since the chain has to start with a hardfork + throw Error('Must have at least one hardfork at block 0'); + } + + // If timestamp is not provided, we need to rollback to the last hf with block or ttd + if (timestamp === undefined) { + const stepBack = hfs + .slice(0, hfIndex) + .reverse() + // eslint-disable-next-line no-null/no-null + .findIndex(hf => hf.block !== null || hf.ttd !== undefined); + hfIndex -= stepBack; + } + // Move hfIndex one back to arrive at candidate hardfork + hfIndex -= 1; + + // If the timestamp was not provided, we could have skipped timestamp hardforks to look for number + // hardforks. so it will now be needed to rollback + // eslint-disable-next-line no-null/no-null + if (hfs[hfIndex].block === null && hfs[hfIndex].timestamp === undefined) { + // We're on the merge hardfork. Let's check the TTD + // eslint-disable-next-line no-null/no-null + if (td === undefined || td === null || BigInt(hfs[hfIndex].ttd!) > td) { + // Merge ttd greater than current td so we're on hardfork before merge + hfIndex -= 1; + } + // eslint-disable-next-line no-null/no-null + } else if (mergeIndex >= 0 && td !== undefined && td !== null) { + if (hfIndex >= mergeIndex && BigInt(hfs[mergeIndex].ttd!) > td) { + throw Error( + 'Maximum HF determined by total difficulty is lower than the block number HF', + ); + } else if (hfIndex < mergeIndex && BigInt(hfs[mergeIndex].ttd!) <= td) { + throw Error( + 'HF determined by block number is lower than the minimum total difficulty HF', + ); + } + } + + const hfStartIndex = hfIndex; + // Move the hfIndex to the end of the hardforks that might be scheduled on the same block/timestamp + // This won't anyway be the case with Merge hfs + for (; hfIndex < hfs.length - 1; hfIndex += 1) { + // break out if hfIndex + 1 is not scheduled at hfIndex + if ( + hfs[hfIndex].block !== hfs[hfIndex + 1].block || + hfs[hfIndex].timestamp !== hfs[hfIndex + 1].timestamp + ) { + break; + } + } + + if (timestamp) { + const minTimeStamp = hfs + .slice(0, hfStartIndex) + .reduce( + (acc: number, hf: HardforkConfig) => Math.max(Number(hf.timestamp ?? '0'), acc), + 0, + ); + if (minTimeStamp > timestamp) { + throw Error( + `Maximum HF determined by timestamp is lower than the block number/ttd HF`, + ); + } + + const maxTimeStamp = hfs + .slice(hfIndex + 1) + .reduce( + (acc: number, hf: HardforkConfig) => + Math.min(Number(hf.timestamp ?? timestamp), acc), + timestamp, + ); + if (maxTimeStamp < timestamp) { + throw Error(`Maximum HF determined by block number/ttd is lower than timestamp HF`); + } + } + const hardfork = hfs[hfIndex]; + return hardfork.name; + } + + /** + * Sets a new hardfork based on the block number or an optional + * total difficulty (Merge HF) provided. + * + * An optional TD takes precedence in case the corresponding HF block + * is set to `null` or otherwise needs to match (if not an error + * will be thrown). + * + * @param blockNumber + * @param td + * @param timestamp + * @returns The name of the HF set + */ + public setHardforkByBlockNumber( + blockNumber: Numbers, + td?: Numbers, + timestamp?: Numbers, + ): string { + const hardfork = this.getHardforkByBlockNumber(blockNumber, td, timestamp); + this.setHardfork(hardfork); + return hardfork; + } + + /** + * Internal helper function, returns the params for the given hardfork for the chain set + * @param hardfork Hardfork name + * @returns Dictionary with hardfork params or null if hardfork not on chain + */ + // eslint-disable-next-line @typescript-eslint/ban-types + public _getHardfork(hardfork: string | Hardfork): HardforkConfig | null { + const hfs = this.hardforks(); + for (const hf of hfs) { + if (hf.name === hardfork) return hf; + } + // eslint-disable-next-line no-null/no-null + return null; + } + + /** + * Sets the active EIPs + * @param eips + */ + public setEIPs(eips: number[] = []) { + for (const eip of eips) { + if (!(eip in EIPs)) { + throw new Error(`${eip} not supported`); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument + const minHF = this.gteHardfork(EIPs[eip].minimumHardfork); + if (!minHF) { + throw new Error( + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + `${eip} cannot be activated on hardfork ${this.hardfork()}, minimumHardfork: ${minHF}`, + ); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (EIPs[eip].requiredEIPs !== undefined) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + for (const elem of EIPs[eip].requiredEIPs) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + if (!(eips.includes(elem) || this.isActivatedEIP(elem))) { + throw new Error( + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + `${eip} requires EIP ${elem}, but is not included in the EIP list`, + ); + } + } + } + } + this._eips = eips; + } + + /** + * Returns a parameter for the current chain setup + * + * If the parameter is present in an EIP, the EIP always takes precedence. + * Otherwise the parameter if taken from the latest applied HF with + * a change on the respective parameter. + * + * @param topic Parameter topic ('gasConfig', 'gasPrices', 'vm', 'pow') + * @param name Parameter name (e.g. 'minGasLimit' for 'gasConfig' topic) + * @returns The value requested or `BigInt(0)` if not found + */ + public param(topic: string, name: string): bigint { + // TODO: consider the case that different active EIPs + // can change the same parameter + let value; + for (const eip of this._eips) { + value = this.paramByEIP(topic, name, eip); + if (value !== undefined) return value; + } + return this.paramByHardfork(topic, name, this._hardfork); + } + + /** + * Returns the parameter corresponding to a hardfork + * @param topic Parameter topic ('gasConfig', 'gasPrices', 'vm', 'pow') + * @param name Parameter name (e.g. 'minGasLimit' for 'gasConfig' topic) + * @param hardfork Hardfork name + * @returns The value requested or `BigInt(0)` if not found + */ + public paramByHardfork(topic: string, name: string, hardfork: string | Hardfork): bigint { + // eslint-disable-next-line no-null/no-null + let value = null; + for (const hfChanges of this.HARDFORK_CHANGES) { + // EIP-referencing HF file (e.g. berlin.json) + if ('eips' in hfChanges[1]) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment + const hfEIPs = hfChanges[1].eips; + for (const eip of hfEIPs) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + const valueEIP = this.paramByEIP(topic, name, eip); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + value = typeof valueEIP === 'bigint' ? valueEIP : value; + } + // Parameter-inlining HF file (e.g. istanbul.json) + } else { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (hfChanges[1][topic] === undefined) { + throw new Error(`Topic ${topic} not defined`); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (hfChanges[1][topic][name] !== undefined) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment + value = hfChanges[1][topic][name].v; + } + } + if (hfChanges[0] === hardfork) break; + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + return BigInt(value ?? 0); + } + + /** + * Returns a parameter corresponding to an EIP + * @param topic Parameter topic ('gasConfig', 'gasPrices', 'vm', 'pow') + * @param name Parameter name (e.g. 'minGasLimit' for 'gasConfig' topic) + * @param eip Number of the EIP + * @returns The value requested or `undefined` if not found + */ + // eslint-disable-next-line class-methods-use-this + public paramByEIP(topic: string, name: string, eip: number): bigint | undefined { + if (!(eip in EIPs)) { + throw new Error(`${eip} not supported`); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const eipParams = EIPs[eip]; + if (!(topic in eipParams)) { + throw new Error(`Topic ${topic} not defined`); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (eipParams[topic][name] === undefined) { + return undefined; + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment + const value = eipParams[topic][name].v; + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + return BigInt(value); + } + + /** + * Returns a parameter for the hardfork active on block number or + * optional provided total difficulty (Merge HF) + * @param topic Parameter topic + * @param name Parameter name + * @param blockNumber Block number + * @param td Total difficulty + * * @returns The value requested or `BigInt(0)` if not found + */ + public paramByBlock( + topic: string, + name: string, + blockNumber: Numbers, + td?: Numbers, + timestamp?: Numbers, + ): bigint { + const hardfork = this.getHardforkByBlockNumber(blockNumber, td, timestamp); + return this.paramByHardfork(topic, name, hardfork); + } + + /** + * Checks if an EIP is activated by either being included in the EIPs + * manually passed in with the {@link CommonOpts.eips} or in a + * hardfork currently being active + * + * Note: this method only works for EIPs being supported + * by the {@link CommonOpts.eips} constructor option + * @param eip + */ + public isActivatedEIP(eip: number): boolean { + if (this.eips().includes(eip)) { + return true; + } + for (const hfChanges of this.HARDFORK_CHANGES) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const hf = hfChanges[1]; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument + if (this.gteHardfork(hf.name) && 'eips' in hf) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if ((hf.eips as number[]).includes(eip)) { + return true; + } + } + } + return false; + } + + /** + * Checks if set or provided hardfork is active on block number + * @param hardfork Hardfork name or null (for HF set) + * @param blockNumber + * @returns True if HF is active on block number + */ + public hardforkIsActiveOnBlock( + // eslint-disable-next-line @typescript-eslint/ban-types + _hardfork: string | Hardfork | null, + _blockNumber: Numbers, + ): boolean { + const blockNumber = toType(_blockNumber, TypeOutput.BigInt); + const hardfork = _hardfork ?? this._hardfork; + const hfBlock = this.hardforkBlock(hardfork); + if (typeof hfBlock === 'bigint' && hfBlock !== BigInt(0) && blockNumber >= hfBlock) { + return true; + } + return false; + } + + /** + * Alias to hardforkIsActiveOnBlock when hardfork is set + * @param blockNumber + * @returns True if HF is active on block number + */ + public activeOnBlock(blockNumber: Numbers): boolean { + // eslint-disable-next-line no-null/no-null + return this.hardforkIsActiveOnBlock(null, blockNumber); + } + + /** + * Sequence based check if given or set HF1 is greater than or equal HF2 + * @param hardfork1 Hardfork name or null (if set) + * @param hardfork2 Hardfork name + * @param opts Hardfork options + * @returns True if HF1 gte HF2 + */ + public hardforkGteHardfork( + // eslint-disable-next-line @typescript-eslint/ban-types + _hardfork1: string | Hardfork | null, + hardfork2: string | Hardfork, + ): boolean { + const hardfork1 = _hardfork1 ?? this._hardfork; + const hardforks = this.hardforks(); + + let posHf1 = -1; + let posHf2 = -1; + let index = 0; + for (const hf of hardforks) { + if (hf.name === hardfork1) posHf1 = index; + if (hf.name === hardfork2) posHf2 = index; + index += 1; + } + return posHf1 >= posHf2 && posHf2 !== -1; + } + + /** + * Alias to hardforkGteHardfork when hardfork is set + * @param hardfork Hardfork name + * @returns True if hardfork set is greater than hardfork provided + */ + public gteHardfork(hardfork: string | Hardfork): boolean { + // eslint-disable-next-line no-null/no-null + return this.hardforkGteHardfork(null, hardfork); + } + + /** + * Returns the hardfork change block for hardfork provided or set + * @param hardfork Hardfork name, optional if HF set + * @returns Block number or null if unscheduled + */ + // eslint-disable-next-line @typescript-eslint/ban-types + public hardforkBlock(_hardfork?: string | Hardfork): bigint | null { + const hardfork = _hardfork ?? this._hardfork; + const block = this._getHardfork(hardfork)?.block; + // eslint-disable-next-line no-null/no-null + if (block === undefined || block === null) { + // eslint-disable-next-line no-null/no-null + return null; + } + return BigInt(block); + } + // eslint-disable-next-line @typescript-eslint/ban-types + public hardforkTimestamp(_hardfork?: string | Hardfork): bigint | null { + const hardfork = _hardfork ?? this._hardfork; + const timestamp = this._getHardfork(hardfork)?.timestamp; + // eslint-disable-next-line no-null/no-null + if (timestamp === undefined || timestamp === null) { + // eslint-disable-next-line no-null/no-null + return null; + } + return BigInt(timestamp); + } + + /** + * Returns the hardfork change block for eip + * @param eip EIP number + * @returns Block number or null if unscheduled + */ + // eslint-disable-next-line @typescript-eslint/ban-types + public eipBlock(eip: number): bigint | null { + for (const hfChanges of this.HARDFORK_CHANGES) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const hf = hfChanges[1]; + if ('eips' in hf) { + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + if (hf.eips.includes(eip)) { + return this.hardforkBlock( + typeof hfChanges[0] === 'number' ? String(hfChanges[0]) : hfChanges[0], + ); + } + } + } + // eslint-disable-next-line no-null/no-null + return null; + } + + /** + * Returns the hardfork change total difficulty (Merge HF) for hardfork provided or set + * @param hardfork Hardfork name, optional if HF set + * @returns Total difficulty or null if no set + */ + // eslint-disable-next-line @typescript-eslint/ban-types + public hardforkTTD(_hardfork?: string | Hardfork): bigint | null { + const hardfork = _hardfork ?? this._hardfork; + const ttd = this._getHardfork(hardfork)?.ttd; + // eslint-disable-next-line no-null/no-null + if (ttd === undefined || ttd === null) { + // eslint-disable-next-line no-null/no-null + return null; + } + return BigInt(ttd); + } + + /** + * True if block number provided is the hardfork (given or set) change block + * @param blockNumber Number of the block to check + * @param hardfork Hardfork name, optional if HF set + * @returns True if blockNumber is HF block + * @deprecated + */ + public isHardforkBlock(_blockNumber: Numbers, _hardfork?: string | Hardfork): boolean { + const blockNumber = toType(_blockNumber, TypeOutput.BigInt); + const hardfork = _hardfork ?? this._hardfork; + const block = this.hardforkBlock(hardfork); + return typeof block === 'bigint' && block !== BigInt(0) ? block === blockNumber : false; + } + + /** + * Returns the change block for the next hardfork after the hardfork provided or set + * @param hardfork Hardfork name, optional if HF set + * @returns Block timestamp, number or null if not available + */ + // eslint-disable-next-line @typescript-eslint/ban-types + public nextHardforkBlockOrTimestamp(_hardfork?: string | Hardfork): bigint | null { + const hardfork = _hardfork ?? this._hardfork; + const hfs = this.hardforks(); + let hfIndex = hfs.findIndex(hf => hf.name === hardfork); + // If the current hardfork is merge, go one behind as merge hf is not part of these + // calcs even if the merge hf block is set + if (hardfork === Hardfork.Merge) { + hfIndex -= 1; + } + // Hardfork not found + if (hfIndex < 0) { + // eslint-disable-next-line no-null/no-null + return null; + } + + let currHfTimeOrBlock = hfs[hfIndex].timestamp ?? hfs[hfIndex].block; + currHfTimeOrBlock = + // eslint-disable-next-line no-null/no-null + currHfTimeOrBlock !== null && currHfTimeOrBlock !== undefined + ? Number(currHfTimeOrBlock) + : // eslint-disable-next-line no-null/no-null + null; + + const nextHf = hfs.slice(hfIndex + 1).find(hf => { + let hfTimeOrBlock = hf.timestamp ?? hf.block; + hfTimeOrBlock = + // eslint-disable-next-line no-null/no-null + hfTimeOrBlock !== null && hfTimeOrBlock !== undefined + ? Number(hfTimeOrBlock) + : // eslint-disable-next-line no-null/no-null + null; + return ( + hf.name !== Hardfork.Merge && + // eslint-disable-next-line no-null/no-null + hfTimeOrBlock !== null && + hfTimeOrBlock !== undefined && + hfTimeOrBlock !== currHfTimeOrBlock + ); + }); + // If no next hf found with valid block or timestamp return null + if (nextHf === undefined) { + // eslint-disable-next-line no-null/no-null + return null; + } + + const nextHfBlock = nextHf.timestamp ?? nextHf.block; + // eslint-disable-next-line no-null/no-null + if (nextHfBlock === null || nextHfBlock === undefined) { + // eslint-disable-next-line no-null/no-null + return null; + } + + return BigInt(nextHfBlock); + } + + /** + * Returns the change block for the next hardfork after the hardfork provided or set + * @param hardfork Hardfork name, optional if HF set + * @returns Block number or null if not available + * @deprecated + */ + // eslint-disable-next-line @typescript-eslint/ban-types + public nextHardforkBlock(_hardfork?: string | Hardfork): bigint | null { + const hardfork = _hardfork ?? this._hardfork; + let hfBlock = this.hardforkBlock(hardfork); + // If this is a merge hardfork with block not set, then we fallback to previous hardfork + // to find the nextHardforkBlock + // eslint-disable-next-line no-null/no-null + if (hfBlock === null && hardfork === Hardfork.Merge) { + const hfs = this.hardforks(); + // eslint-disable-next-line no-null/no-null + const mergeIndex = hfs.findIndex(hf => hf.ttd !== null && hf.ttd !== undefined); + if (mergeIndex < 0) { + throw Error(`Merge hardfork should have been found`); + } + hfBlock = this.hardforkBlock(hfs[mergeIndex - 1].name); + } + // eslint-disable-next-line no-null/no-null + if (hfBlock === null) { + // eslint-disable-next-line no-null/no-null + return null; + } + // Next fork block number or null if none available + // Logic: if accumulator is still null and on the first occurrence of + // a block greater than the current hfBlock set the accumulator, + // pass on the accumulator as the final result from this time on + // eslint-disable-next-line no-null/no-null, @typescript-eslint/ban-types + const nextHfBlock = this.hardforks().reduce((acc: bigint | null, hf: HardforkConfig) => { + // We need to ignore the merge block in our next hardfork calc + const block = BigInt( + // eslint-disable-next-line no-null/no-null + hf.block === null || (hf.ttd !== undefined && hf.ttd !== null) ? 0 : hf.block, + ); + // Typescript can't seem to follow that the hfBlock is not null at this point + // eslint-disable-next-line no-null/no-null + return block > hfBlock! && acc === null ? block : acc; + // eslint-disable-next-line no-null/no-null + }, null); + return nextHfBlock; + } + + /** + * True if block number provided is the hardfork change block following the hardfork given or set + * @param blockNumber Number of the block to check + * @param hardfork Hardfork name, optional if HF set + * @returns True if blockNumber is HF block + * @deprecated + */ + public isNextHardforkBlock(_blockNumber: Numbers, _hardfork?: string | Hardfork): boolean { + const blockNumber = toType(_blockNumber, TypeOutput.BigInt); + const hardfork = _hardfork ?? this._hardfork; + // eslint-disable-next-line deprecation/deprecation + const nextHardforkBlock = this.nextHardforkBlock(hardfork); + // eslint-disable-next-line no-null/no-null + return nextHardforkBlock === null ? false : nextHardforkBlock === blockNumber; + } + + /** + * Internal helper function to calculate a fork hash + * @param hardfork Hardfork name + * @param genesisHash Genesis block hash of the chain + * @returns Fork hash as hex string + */ + public _calcForkHash(hardfork: string | Hardfork, genesisHash: Uint8Array) { + let hfUint8Array = new Uint8Array(); + let prevBlockOrTime = 0; + for (const hf of this.hardforks()) { + const { block, timestamp, name } = hf; + // Timestamp to be used for timestamp based hfs even if we may bundle + // block number with them retrospectively + let blockOrTime = timestamp ?? block; + // eslint-disable-next-line no-null/no-null + blockOrTime = blockOrTime !== null ? Number(blockOrTime) : null; + + // Skip for chainstart (0), not applied HFs (null) and + // when already applied on same blockOrTime HFs + // and on the merge since forkhash doesn't change on merge hf + if ( + typeof blockOrTime === 'number' && + blockOrTime !== 0 && + blockOrTime !== prevBlockOrTime && + name !== Hardfork.Merge + ) { + const hfBlockUint8Array = hexToBytes(blockOrTime.toString(16).padStart(16, '0')); + hfUint8Array = uint8ArrayConcat(hfUint8Array, hfBlockUint8Array); + prevBlockOrTime = blockOrTime; + } + + if (hf.name === hardfork) break; + } + const inputUint8Array = uint8ArrayConcat(genesisHash, hfUint8Array); + + // CRC32 delivers result as signed (negative) 32-bit integer, + // convert to hex string + // eslint-disable-next-line no-bitwise + const forkhash = bytesToHex(intToUint8Array(crc32Uint8Array(inputUint8Array) >>> 0)); + return forkhash; + } + + /** + * Returns an eth/64 compliant fork hash (EIP-2124) + * @param hardfork Hardfork name, optional if HF set + * @param genesisHash Genesis block hash of the chain, optional if already defined and not needed to be calculated + */ + public forkHash(_hardfork?: string | Hardfork, genesisHash?: Uint8Array): string { + const hardfork = _hardfork ?? this._hardfork; + const data = this._getHardfork(hardfork); + if ( + // eslint-disable-next-line no-null/no-null + data === null || + // eslint-disable-next-line no-null/no-null + (data?.block === null && data?.timestamp === undefined && data?.ttd === undefined) + ) { + const msg = 'No fork hash calculation possible for future hardfork'; + throw new Error(msg); + } + // eslint-disable-next-line no-null/no-null + if (data?.forkHash !== null && data?.forkHash !== undefined) { + return data.forkHash; + } + if (!genesisHash) throw new Error('genesisHash required for forkHash calculation'); + return this._calcForkHash(hardfork, genesisHash); + } + + /** + * + * @param forkHash Fork hash as a hex string + * @returns Array with hardfork data (name, block, forkHash) + */ + // eslint-disable-next-line @typescript-eslint/ban-types + public hardforkForForkHash(forkHash: string): HardforkConfig | null { + const resArray = this.hardforks().filter((hf: HardforkConfig) => hf.forkHash === forkHash); + // eslint-disable-next-line no-null/no-null + return resArray.length >= 1 ? resArray[resArray.length - 1] : null; + } + + /** + * Sets any missing forkHashes on the passed-in {@link Common} instance + * @param common The {@link Common} to set the forkHashes for + * @param genesisHash The genesis block hash + */ + public setForkHashes(genesisHash: Uint8Array) { + for (const hf of this.hardforks()) { + const blockOrTime = hf.timestamp ?? hf.block; + if ( + // eslint-disable-next-line no-null/no-null + (hf.forkHash === null || hf.forkHash === undefined) && + // eslint-disable-next-line no-null/no-null + ((blockOrTime !== null && blockOrTime !== undefined) || + typeof hf.ttd !== 'undefined') + ) { + hf.forkHash = this.forkHash(hf.name, genesisHash); + } + } + } + + /** + * Returns the Genesis parameters of the current chain + * @returns Genesis dictionary + */ + public genesis(): GenesisBlockConfig { + return this._chainParams.genesis; + } + + /** + * Returns the hardforks for current chain + * @returns {Array} Array with arrays of hardforks + */ + public hardforks(): HardforkConfig[] { + return this._chainParams.hardforks; + } + + /** + * Returns bootstrap nodes for the current chain + * @returns {Dictionary} Dict with bootstrap nodes + */ + public bootstrapNodes(): BootstrapNodeConfig[] | undefined { + return this._chainParams.bootstrapNodes; + } + + /** + * Returns DNS networks for the current chain + * @returns {String[]} Array of DNS ENR urls + */ + public dnsNetworks(): string[] { + return this._chainParams.dnsNetworks!; + } + + /** + * Returns the hardfork set + * @returns Hardfork name + */ + public hardfork(): string | Hardfork { + return this._hardfork; + } + + /** + * Returns the Id of current chain + * @returns chain Id + */ + public chainId(): bigint { + return BigInt(this._chainParams.chainId); + } + + /** + * Returns the name of current chain + * @returns chain name (lower case) + */ + public chainName(): string { + return this._chainParams.name; + } + + /** + * Returns the Id of current network + * @returns network Id + */ + public networkId(): bigint { + return BigInt(this._chainParams.networkId); + } + + /** + * Returns the active EIPs + * @returns List of EIPs + */ + public eips(): number[] { + return this._eips; + } + + /** + * Returns the consensus type of the network + * Possible values: "pow"|"poa"|"pos" + * + * Note: This value can update along a Hardfork. + */ + public consensusType(): string | ConsensusType { + const hardfork = this.hardfork(); + + let value; + for (const hfChanges of this.HARDFORK_CHANGES) { + if ('consensus' in hfChanges[1]) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment + value = hfChanges[1].consensus.type; + } + if (hfChanges[0] === hardfork) break; + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return value ?? this._chainParams.consensus.type; + } + + /** + * Returns the concrete consensus implementation + * algorithm or protocol for the network + * e.g. "ethash" for "pow" consensus type, + * "clique" for "poa" consensus type or + * "casper" for "pos" consensus type. + * + * Note: This value can update along a Hardfork. + */ + public consensusAlgorithm(): string | ConsensusAlgorithm { + const hardfork = this.hardfork(); + + let value; + for (const hfChanges of this.HARDFORK_CHANGES) { + if ('consensus' in hfChanges[1]) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment + value = hfChanges[1].consensus.algorithm; + } + if (hfChanges[0] === hardfork) break; + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return value ?? (this._chainParams.consensus.algorithm as ConsensusAlgorithm); + } + + /** + * Returns a dictionary with consensus configuration + * parameters based on the consensus algorithm + * + * Expected returns (parameters must be present in + * the respective chain json files): + * + * ethash: empty object + * clique: period, epoch + * casper: empty object + * + * Note: This value can update along a Hardfork. + */ + public consensusConfig(): { [key: string]: CliqueConfig | EthashConfig | CasperConfig } { + const hardfork = this.hardfork(); + + let value; + for (const hfChanges of this.HARDFORK_CHANGES) { + if ('consensus' in hfChanges[1]) { + // The config parameter is named after the respective consensus algorithm + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment + value = hfChanges[1].consensus[hfChanges[1].consensus.algorithm]; + } + if (hfChanges[0] === hardfork) break; + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return ( + value ?? + this._chainParams.consensus[this.consensusAlgorithm() as ConsensusAlgorithm] ?? + {} + ); + } + + /** + * Returns a deep copy of this {@link Common} instance. + */ + public copy(): Common { + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-assignment + const copy = Object.assign(Object.create(Object.getPrototypeOf(this)), this); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + copy.removeAllListeners(); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return copy; + } + + public static _getInitializedChains(customChains?: ChainConfig[]): ChainsConfig { + const names: ChainName = {}; + for (const [name, id] of Object.entries(Chain)) { + names[id] = name.toLowerCase(); + } + const chains = { mainnet, goerli, sepolia } as ChainsConfig; + if (customChains) { + for (const chain of customChains) { + const { name } = chain; + names[chain.chainId.toString()] = name; + chains[name] = chain; + } + } + chains.names = names; + return chains; + } +} diff --git a/packages/web3-eth-accounts/src/common/eips/1153.ts b/packages/web3-eth-accounts/src/common/eips/1153.ts new file mode 100644 index 00000000000..a7440d29d19 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/1153.ts @@ -0,0 +1,23 @@ +export default { + "name": "EIP-1153", + "number": 1153, + "comment": "Transient Storage", + "url": "https://eips.ethereum.org/EIPS/eip-1153", + "status": "Review", + "minimumHardfork": "chainstart", + "requiredEIPs": [], + "gasConfig": {}, + "gasPrices": { + "tstore": { + "v": 100, + "d": "Base fee of the TSTORE opcode" + }, + "tload": { + "v": 100, + "d": "Base fee of the TLOAD opcode" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/1559.ts b/packages/web3-eth-accounts/src/common/eips/1559.ts new file mode 100644 index 00000000000..ef3f04422e9 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/1559.ts @@ -0,0 +1,27 @@ +export default { + "name": "EIP-1559", + "number": 1559, + "comment": "Fee market change for ETH 1.0 chain", + "url": "https://eips.ethereum.org/EIPS/eip-1559", + "status": "Final", + "minimumHardfork": "berlin", + "requiredEIPs": [2930], + "gasConfig": { + "baseFeeMaxChangeDenominator": { + "v": 8, + "d": "Maximum base fee change denominator" + }, + "elasticityMultiplier": { + "v": 2, + "d": "Maximum block gas target elasticity" + }, + "initialBaseFee": { + "v": 1000000000, + "d": "Initial base fee on first EIP1559 block" + } + }, + "gasPrices": {}, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/2315.ts b/packages/web3-eth-accounts/src/common/eips/2315.ts new file mode 100644 index 00000000000..d29efa3049d --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/2315.ts @@ -0,0 +1,26 @@ +export default { + "name": "EIP-2315", + "number": 2315, + "comment": "Simple subroutines for the EVM", + "url": "https://eips.ethereum.org/EIPS/eip-2315", + "status": "Draft", + "minimumHardfork": "istanbul", + "gasConfig": {}, + "gasPrices": { + "beginsub": { + "v": 2, + "d": "Base fee of the BEGINSUB opcode" + }, + "returnsub": { + "v": 5, + "d": "Base fee of the RETURNSUB opcode" + }, + "jumpsub": { + "v": 10, + "d": "Base fee of the JUMPSUB opcode" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/2537.ts b/packages/web3-eth-accounts/src/common/eips/2537.ts new file mode 100644 index 00000000000..14fa62abdb1 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/2537.ts @@ -0,0 +1,179 @@ +export default { + "name": "EIP-2537", + "number": 2537, + "comment": "BLS12-381 precompiles", + "url": "https://eips.ethereum.org/EIPS/eip-2537", + "status": "Draft", + "minimumHardfork": "chainstart", + "gasConfig": {}, + "gasPrices": { + "Bls12381G1AddGas": { + "v": 600, + "d": "Gas cost of a single BLS12-381 G1 addition precompile-call" + }, + "Bls12381G1MulGas": { + "v": 12000, + "d": "Gas cost of a single BLS12-381 G1 multiplication precompile-call" + }, + "Bls12381G2AddGas": { + "v": 4500, + "d": "Gas cost of a single BLS12-381 G2 addition precompile-call" + }, + "Bls12381G2MulGas": { + "v": 55000, + "d": "Gas cost of a single BLS12-381 G2 multiplication precompile-call" + }, + "Bls12381PairingBaseGas": { + "v": 115000, + "d": "Base gas cost of BLS12-381 pairing check" + }, + "Bls12381PairingPerPairGas": { + "v": 23000, + "d": "Per-pair gas cost of BLS12-381 pairing check" + }, + "Bls12381MapG1Gas": { + "v": 5500, + "d": "Gas cost of BLS12-381 map field element to G1" + }, + "Bls12381MapG2Gas": { + "v": 110000, + "d": "Gas cost of BLS12-381 map field element to G2" + }, + "Bls12381MultiExpGasDiscount": { + "v": [ + [1, 1200], + [2, 888], + [3, 764], + [4, 641], + [5, 594], + [6, 547], + [7, 500], + [8, 453], + [9, 438], + [10, 423], + [11, 408], + [12, 394], + [13, 379], + [14, 364], + [15, 349], + [16, 334], + [17, 330], + [18, 326], + [19, 322], + [20, 318], + [21, 314], + [22, 310], + [23, 306], + [24, 302], + [25, 298], + [26, 294], + [27, 289], + [28, 285], + [29, 281], + [30, 277], + [31, 273], + [32, 269], + [33, 268], + [34, 266], + [35, 265], + [36, 263], + [37, 262], + [38, 260], + [39, 259], + [40, 257], + [41, 256], + [42, 254], + [43, 253], + [44, 251], + [45, 250], + [46, 248], + [47, 247], + [48, 245], + [49, 244], + [50, 242], + [51, 241], + [52, 239], + [53, 238], + [54, 236], + [55, 235], + [56, 233], + [57, 232], + [58, 231], + [59, 229], + [60, 228], + [61, 226], + [62, 225], + [63, 223], + [64, 222], + [65, 221], + [66, 220], + [67, 219], + [68, 219], + [69, 218], + [70, 217], + [71, 216], + [72, 216], + [73, 215], + [74, 214], + [75, 213], + [76, 213], + [77, 212], + [78, 211], + [79, 211], + [80, 210], + [81, 209], + [82, 208], + [83, 208], + [84, 207], + [85, 206], + [86, 205], + [87, 205], + [88, 204], + [89, 203], + [90, 202], + [91, 202], + [92, 201], + [93, 200], + [94, 199], + [95, 199], + [96, 198], + [97, 197], + [98, 196], + [99, 196], + [100, 195], + [101, 194], + [102, 193], + [103, 193], + [104, 192], + [105, 191], + [106, 191], + [107, 190], + [108, 189], + [109, 188], + [110, 188], + [111, 187], + [112, 186], + [113, 185], + [114, 185], + [115, 184], + [116, 183], + [117, 182], + [118, 182], + [119, 181], + [120, 180], + [121, 179], + [122, 179], + [123, 178], + [124, 177], + [125, 176], + [126, 176], + [127, 175], + [128, 174] + ], + "d": "Discount gas costs of calls to the MultiExp precompiles with `k` (point, scalar) pair" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/2565.ts b/packages/web3-eth-accounts/src/common/eips/2565.ts new file mode 100644 index 00000000000..1c1743e9a16 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/2565.ts @@ -0,0 +1,18 @@ +export default { + "name": "EIP-2565", + "number": 2565, + "comment": "ModExp gas cost", + "url": "https://eips.ethereum.org/EIPS/eip-2565", + "status": "Final", + "minimumHardfork": "byzantium", + "gasConfig": {}, + "gasPrices": { + "modexpGquaddivisor": { + "v": 3, + "d": "Gquaddivisor from modexp precompile for gas calculation" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/2718.ts b/packages/web3-eth-accounts/src/common/eips/2718.ts new file mode 100644 index 00000000000..f8815c6d7b1 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/2718.ts @@ -0,0 +1,12 @@ +export default { + "name": "EIP-2718", + "comment": "Typed Transaction Envelope", + "url": "https://eips.ethereum.org/EIPS/eip-2718", + "status": "Final", + "minimumHardfork": "chainstart", + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/2929.ts b/packages/web3-eth-accounts/src/common/eips/2929.ts new file mode 100644 index 00000000000..f52dc217d3f --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/2929.ts @@ -0,0 +1,85 @@ +export default { + "name": "EIP-2929", + "comment": "Gas cost increases for state access opcodes", + "url": "https://eips.ethereum.org/EIPS/eip-2929", + "status": "Final", + "minimumHardfork": "chainstart", + "gasConfig": {}, + "gasPrices": { + "coldsload": { + "v": 2100, + "d": "Gas cost of the first read of storage from a given location (per transaction)" + }, + "coldaccountaccess": { + "v": 2600, + "d": "Gas cost of the first read of a given address (per transaction)" + }, + "warmstorageread": { + "v": 100, + "d": "Gas cost of reading storage locations which have already loaded 'cold'" + }, + "sstoreCleanGasEIP2200": { + "v": 2900, + "d": "Once per SSTORE operation from clean non-zero to something else" + }, + "sstoreNoopGasEIP2200": { + "v": 100, + "d": "Once per SSTORE operation if the value doesn't change" + }, + "sstoreDirtyGasEIP2200": { + "v": 100, + "d": "Once per SSTORE operation if a dirty value is changed" + }, + "sstoreInitRefundEIP2200": { + "v": 19900, + "d": "Once per SSTORE operation for resetting to the original zero value" + }, + "sstoreCleanRefundEIP2200": { + "v": 4900, + "d": "Once per SSTORE operation for resetting to the original non-zero value" + }, + "call": { + "v": 0, + "d": "Base fee of the CALL opcode" + }, + "callcode": { + "v": 0, + "d": "Base fee of the CALLCODE opcode" + }, + "delegatecall": { + "v": 0, + "d": "Base fee of the DELEGATECALL opcode" + }, + "staticcall": { + "v": 0, + "d": "Base fee of the STATICCALL opcode" + }, + "balance": { + "v": 0, + "d": "Base fee of the BALANCE opcode" + }, + "extcodesize": { + "v": 0, + "d": "Base fee of the EXTCODESIZE opcode" + }, + "extcodecopy": { + "v": 0, + "d": "Base fee of the EXTCODECOPY opcode" + }, + "extcodehash": { + "v": 0, + "d": "Base fee of the EXTCODEHASH opcode" + }, + "sload": { + "v": 0, + "d": "Base fee of the SLOAD opcode" + }, + "sstore": { + "v": 0, + "d": "Base fee of the SSTORE opcode" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/2930.ts b/packages/web3-eth-accounts/src/common/eips/2930.ts new file mode 100644 index 00000000000..52500d0c94a --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/2930.ts @@ -0,0 +1,22 @@ +export default { + "name": "EIP-2930", + "comment": "Optional access lists", + "url": "https://eips.ethereum.org/EIPS/eip-2930", + "status": "Final", + "minimumHardfork": "istanbul", + "requiredEIPs": [2718, 2929], + "gasConfig": {}, + "gasPrices": { + "accessListStorageKeyCost": { + "v": 1900, + "d": "Gas cost per storage key in an Access List transaction" + }, + "accessListAddressCost": { + "v": 2400, + "d": "Gas cost per storage key in an Access List transaction" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/3074.ts b/packages/web3-eth-accounts/src/common/eips/3074.ts new file mode 100644 index 00000000000..538b0569819 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/3074.ts @@ -0,0 +1,26 @@ +export default { + "name": "EIP-3074", + "number": 3074, + "comment": "AUTH and AUTHCALL opcodes", + "url": "https://eips.ethereum.org/EIPS/eip-3074", + "status": "Review", + "minimumHardfork": "london", + "gasConfig": {}, + "gasPrices": { + "auth": { + "v": 3100, + "d": "Gas cost of the AUTH opcode" + }, + "authcall": { + "v": 0, + "d": "Gas cost of the AUTHCALL opcode" + }, + "authcallValueTransfer": { + "v": 6700, + "d": "Paid for CALL when the value transfer is non-zero" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/3198.ts b/packages/web3-eth-accounts/src/common/eips/3198.ts new file mode 100644 index 00000000000..d949d976359 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/3198.ts @@ -0,0 +1,18 @@ +export default { + "name": "EIP-3198", + "number": 3198, + "comment": "BASEFEE opcode", + "url": "https://eips.ethereum.org/EIPS/eip-3198", + "status": "Final", + "minimumHardfork": "london", + "gasConfig": {}, + "gasPrices": { + "basefee": { + "v": 2, + "d": "Gas cost of the BASEFEE opcode" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/3529.ts b/packages/web3-eth-accounts/src/common/eips/3529.ts new file mode 100644 index 00000000000..2e8b0e39888 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/3529.ts @@ -0,0 +1,27 @@ +export default { + "name": "EIP-3529", + "comment": "Reduction in refunds", + "url": "https://eips.ethereum.org/EIPS/eip-3529", + "status": "Final", + "minimumHardfork": "berlin", + "requiredEIPs": [2929], + "gasConfig": { + "maxRefundQuotient": { + "v": 5, + "d": "Maximum refund quotient; max tx refund is min(tx.gasUsed/maxRefundQuotient, tx.gasRefund)" + } + }, + "gasPrices": { + "selfdestructRefund": { + "v": 0, + "d": "Refunded following a selfdestruct operation" + }, + "sstoreClearRefundEIP2200": { + "v": 4800, + "d": "Once per SSTORE operation for clearing an originally existing storage slot" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/3540.ts b/packages/web3-eth-accounts/src/common/eips/3540.ts new file mode 100644 index 00000000000..39fdb91ee43 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/3540.ts @@ -0,0 +1,14 @@ +export default { + "name": "EIP-3540", + "number": 3540, + "comment": "EVM Object Format (EOF) v1", + "url": "https://eips.ethereum.org/EIPS/eip-3540", + "status": "Review", + "minimumHardfork": "london", + "requiredEIPs": [3541], + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/3541.ts b/packages/web3-eth-accounts/src/common/eips/3541.ts new file mode 100644 index 00000000000..b3e7a0ce823 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/3541.ts @@ -0,0 +1,13 @@ +export default { + "name": "EIP-3541", + "comment": "Reject new contracts starting with the 0xEF byte", + "url": "https://eips.ethereum.org/EIPS/eip-3541", + "status": "Final", + "minimumHardfork": "berlin", + "requiredEIPs": [], + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/3554.ts b/packages/web3-eth-accounts/src/common/eips/3554.ts new file mode 100644 index 00000000000..36a9d16ecf2 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/3554.ts @@ -0,0 +1,18 @@ +export default { + "name": "EIP-3554", + "comment": "Reduction in refunds", + "url": "Difficulty Bomb Delay to December 1st 2021", + "status": "Final", + "minimumHardfork": "muirGlacier", + "requiredEIPs": [], + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": { + "difficultyBombDelay": { + "v": 9500000, + "d": "the amount of blocks to delay the difficulty bomb with" + } + } +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/3607.ts b/packages/web3-eth-accounts/src/common/eips/3607.ts new file mode 100644 index 00000000000..6c122728e68 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/3607.ts @@ -0,0 +1,14 @@ +export default { + "name": "EIP-3607", + "number": 3607, + "comment": "Reject transactions from senders with deployed code", + "url": "https://eips.ethereum.org/EIPS/eip-3607", + "status": "Final", + "minimumHardfork": "chainstart", + "requiredEIPs": [], + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/3651.ts b/packages/web3-eth-accounts/src/common/eips/3651.ts new file mode 100644 index 00000000000..c6ebe81da92 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/3651.ts @@ -0,0 +1,14 @@ +export default { + "name": "EIP-3651", + "number": 3198, + "comment": "Warm COINBASE", + "url": "https://eips.ethereum.org/EIPS/eip-3651", + "status": "Review", + "minimumHardfork": "london", + "requiredEIPs": [2929], + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/3670.ts b/packages/web3-eth-accounts/src/common/eips/3670.ts new file mode 100644 index 00000000000..5b36d99b71f --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/3670.ts @@ -0,0 +1,14 @@ +export default { + "name": "EIP-3670", + "number": 3670, + "comment": "EOF - Code Validation", + "url": "https://eips.ethereum.org/EIPS/eip-3670", + "status": "Review", + "minimumHardfork": "london", + "requiredEIPs": [3540], + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/3675.ts b/packages/web3-eth-accounts/src/common/eips/3675.ts new file mode 100644 index 00000000000..a80350300c7 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/3675.ts @@ -0,0 +1,14 @@ +export default { + "name": "EIP-3675", + "number": 3675, + "comment": "Upgrade consensus to Proof-of-Stake", + "url": "https://eips.ethereum.org/EIPS/eip-3675", + "status": "Final", + "minimumHardfork": "london", + "requiredEIPs": [], + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/3855.ts b/packages/web3-eth-accounts/src/common/eips/3855.ts new file mode 100644 index 00000000000..2f5ac0641a5 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/3855.ts @@ -0,0 +1,19 @@ +export default { + "name": "EIP-3855", + "number": 3855, + "comment": "PUSH0 instruction", + "url": "https://eips.ethereum.org/EIPS/eip-3855", + "status": "Review", + "minimumHardfork": "chainstart", + "requiredEIPs": [], + "gasConfig": {}, + "gasPrices": { + "push0": { + "v": 2, + "d": "Base fee of the PUSH0 opcode" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/3860.ts b/packages/web3-eth-accounts/src/common/eips/3860.ts new file mode 100644 index 00000000000..0e1aeb999db --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/3860.ts @@ -0,0 +1,24 @@ +export default { + "name": "EIP-3860", + "number": 3860, + "comment": "Limit and meter initcode", + "url": "https://eips.ethereum.org/EIPS/eip-3860", + "status": "Review", + "minimumHardfork": "spuriousDragon", + "requiredEIPs": [], + "gasConfig": {}, + "gasPrices": { + "initCodeWordCost": { + "v": 2, + "d": "Gas to pay for each word (32 bytes) of initcode when creating a contract" + } + }, + "vm": { + "maxInitCodeSize": { + "v": 49152, + "d": "Maximum length of initialization code when creating a contract" + } + }, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/4345.ts b/packages/web3-eth-accounts/src/common/eips/4345.ts new file mode 100644 index 00000000000..0e571b327c2 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/4345.ts @@ -0,0 +1,18 @@ +export default { + "name": "EIP-4345", + "number": 4345, + "comment": "Difficulty Bomb Delay to June 2022", + "url": "https://eips.ethereum.org/EIPS/eip-4345", + "status": "Final", + "minimumHardfork": "london", + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": { + "difficultyBombDelay": { + "v": 10700000, + "d": "the amount of blocks to delay the difficulty bomb with" + } + } +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/4399.ts b/packages/web3-eth-accounts/src/common/eips/4399.ts new file mode 100644 index 00000000000..ed948d629de --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/4399.ts @@ -0,0 +1,14 @@ +export default { + "name": "EIP-4399", + "number": 4399, + "comment": "Supplant DIFFICULTY opcode with PREVRANDAO", + "url": "https://eips.ethereum.org/EIPS/eip-4399", + "status": "Review", + "minimumHardfork": "london", + "requiredEIPs": [], + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/4844.ts b/packages/web3-eth-accounts/src/common/eips/4844.ts new file mode 100644 index 00000000000..2795067c841 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/4844.ts @@ -0,0 +1,58 @@ +export default { + "name": "EIP-4844", + "number": 4844, + "comment": "Shard Blob Transactions", + "url": "https://eips.ethereum.org/EIPS/eip-4844", + "status": "Draft", + "minimumHardfork": "merge", + "requiredEIPs": [1559, 2718, 2930, 4895], + "gasConfig": { + "dataGasPerBlob": { + "v": 131072, + "d": "The base fee for data gas per blob" + }, + "targetDataGasPerBlock": { + "v": 262144, + "d": "The target data gas consumed per block" + }, + "maxDataGasPerBlock": { + "v": 524288, + "d": "The max data gas allowable per block" + }, + "dataGasPriceUpdateFraction": { + "v": 2225652, + "d": "The denominator used in the exponential when calculating a data gas price" + } + }, + "gasPrices": { + "simpleGasPerBlob": { + "v": 12000, + "d": "The basic gas fee for each blob" + }, + "minDataGasPrice": { + "v": 1, + "d": "The minimum fee per data gas" + }, + "kzgPointEvaluationGasPrecompilePrice": { + "v": 50000, + "d": "The fee associated with the point evaluation precompile" + }, + "datahash": { + "v": 3, + "d": "Base fee of the DATAHASH opcode" + } + }, + "sharding": { + "blobCommitmentVersionKzg": { + "v": 1, + "d": "The number indicated a versioned hash is a KZG commitment" + }, + "fieldElementsPerBlob": { + "v": 4096, + "d": "The number of field elements allowed per blob" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/4895.ts b/packages/web3-eth-accounts/src/common/eips/4895.ts new file mode 100644 index 00000000000..f70f2ec3b35 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/4895.ts @@ -0,0 +1,14 @@ +export default { + "name": "EIP-4895", + "number": 4895, + "comment": "Beacon chain push withdrawals as operations", + "url": "https://eips.ethereum.org/EIPS/eip-4895", + "status": "Review", + "minimumHardfork": "merge", + "requiredEIPs": [], + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/5133.ts b/packages/web3-eth-accounts/src/common/eips/5133.ts new file mode 100644 index 00000000000..de3b55c9721 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/5133.ts @@ -0,0 +1,18 @@ +export default { + "name": "EIP-5133", + "number": 5133, + "comment": "Delaying Difficulty Bomb to mid-September 2022", + "url": "https://eips.ethereum.org/EIPS/eip-5133", + "status": "Draft", + "minimumHardfork": "grayGlacier", + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": { + "difficultyBombDelay": { + "v": 11400000, + "d": "the amount of blocks to delay the difficulty bomb with" + } + } +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/eips/index.ts b/packages/web3-eth-accounts/src/common/eips/index.ts new file mode 100644 index 00000000000..eeb5d952e27 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/eips/index.ts @@ -0,0 +1,63 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import e1153 from './1153.js'; +import e1559 from './1559.js'; +import e2315 from './2315.js'; +import e2537 from './2537.js'; +import e2565 from './2565.js'; +import e2718 from './2718.js'; +import e2929 from './2929.js'; +import e2930 from './2930.js'; +import e3198 from './3198.js'; +import e3529 from './3529.js'; +import e3540 from './3540.js'; +import e3541 from './3541.js'; +import e3554 from './3554.js'; +import e3607 from './3607.js'; +import e3651 from './3651.js'; +import e3670 from './3670.js'; +import e3675 from './3675.js'; +import e3855 from './3855.js'; +import e3860 from './3860.js'; +import e4345 from './4345.js'; +import e4399 from './4399.js'; +import e5133 from './5133.js'; + +export const EIPs: { [key: number]: any } = { + 1153: e1153, + 1559: e1559, + 2315: e2315, + 2537: e2537, + 2565: e2565, + 2718: e2718, + 2929: e2929, + 2930: e2930, + 3198: e3198, + 3529: e3529, + 3540: e3540, + 3541: e3541, + 3554: e3554, + 3607: e3607, + 3651: e3651, + 3670: e3670, + 3675: e3675, + 3855: e3855, + 3860: e3860, + 4345: e4345, + 4399: e4399, + 5133: e5133, +}; diff --git a/packages/web3-eth-accounts/src/common/enums.ts b/packages/web3-eth-accounts/src/common/enums.ts new file mode 100644 index 00000000000..0661dd0519b --- /dev/null +++ b/packages/web3-eth-accounts/src/common/enums.ts @@ -0,0 +1,105 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export enum Chain { + Mainnet = 1, + Goerli = 5, + Sepolia = 11155111, +} + +export enum Hardfork { + Chainstart = 'chainstart', + Homestead = 'homestead', + Dao = 'dao', + TangerineWhistle = 'tangerineWhistle', + SpuriousDragon = 'spuriousDragon', + Byzantium = 'byzantium', + Constantinople = 'constantinople', + Petersburg = 'petersburg', + Istanbul = 'istanbul', + MuirGlacier = 'muirGlacier', + Berlin = 'berlin', + London = 'london', + ArrowGlacier = 'arrowGlacier', + GrayGlacier = 'grayGlacier', + MergeForkIdTransition = 'mergeForkIdTransition', + Merge = 'merge', + Shanghai = 'shanghai', + ShardingForkDev = 'shardingFork', +} + +export enum ConsensusType { + ProofOfStake = 'pos', + ProofOfWork = 'pow', + ProofOfAuthority = 'poa', +} + +export enum ConsensusAlgorithm { + Ethash = 'ethash', + Clique = 'clique', + Casper = 'casper', +} + +export enum CustomChain { + /** + * Polygon (Matic) Mainnet + * + * - [Documentation](https://docs.matic.network/docs/develop/network-details/network) + */ + PolygonMainnet = 'polygon-mainnet', + + /** + * Polygon (Matic) Mumbai Testnet + * + * - [Documentation](https://docs.matic.network/docs/develop/network-details/network) + */ + PolygonMumbai = 'polygon-mumbai', + + /** + * Arbitrum Rinkeby Testnet + * + * - [Documentation](https://developer.offchainlabs.com/docs/public_testnet) + */ + ArbitrumRinkebyTestnet = 'arbitrum-rinkeby-testnet', + + /** + * Arbitrum One - mainnet for Arbitrum roll-up + * + * - [Documentation](https://developer.offchainlabs.com/public-chains) + */ + ArbitrumOne = 'arbitrum-one', + + /** + * xDai EVM sidechain with a native stable token + * + * - [Documentation](https://www.xdaichain.com/) + */ + xDaiChain = 'x-dai-chain', + + /** + * Optimistic Kovan - testnet for Optimism roll-up + * + * - [Documentation](https://community.optimism.io/docs/developers/tutorials.html) + */ + OptimisticKovan = 'optimistic-kovan', + + /** + * Optimistic Ethereum - mainnet for Optimism roll-up + * + * - [Documentation](https://community.optimism.io/docs/developers/tutorials.html) + */ + OptimisticEthereum = 'optimistic-ethereum', +} diff --git a/packages/web3-eth-accounts/src/common/hardforks/arrowGlacier.ts b/packages/web3-eth-accounts/src/common/hardforks/arrowGlacier.ts new file mode 100644 index 00000000000..e38f1782855 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/arrowGlacier.ts @@ -0,0 +1,12 @@ +export default { + "name": "arrowGlacier", + "comment": "HF to delay the difficulty bomb", + "url": "https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/arrow-glacier.md", + "status": "Final", + "eips": [4345], + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/berlin.ts b/packages/web3-eth-accounts/src/common/hardforks/berlin.ts new file mode 100644 index 00000000000..df30229fb2e --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/berlin.ts @@ -0,0 +1,8 @@ +export default { + "name": "berlin", + "comment": "HF targeted for July 2020 following the Muir Glacier HF", + "url": "https://eips.ethereum.org/EIPS/eip-2070", + "status": "Final", + "eips": [2565, 2929, 2718, 2930] +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/byzantium.ts b/packages/web3-eth-accounts/src/common/hardforks/byzantium.ts new file mode 100644 index 00000000000..2c358c8f6ff --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/byzantium.ts @@ -0,0 +1,57 @@ +export default { + "name": "byzantium", + "comment": "Hardfork with new precompiles, instructions and other protocol changes", + "url": "https://eips.ethereum.org/EIPS/eip-609", + "status": "Final", + "gasConfig": {}, + "gasPrices": { + "modexpGquaddivisor": { + "v": 20, + "d": "Gquaddivisor from modexp precompile for gas calculation" + }, + "ecAdd": { + "v": 500, + "d": "Gas costs for curve addition precompile" + }, + "ecMul": { + "v": 40000, + "d": "Gas costs for curve multiplication precompile" + }, + "ecPairing": { + "v": 100000, + "d": "Base gas costs for curve pairing precompile" + }, + "ecPairingWord": { + "v": 80000, + "d": "Gas costs regarding curve pairing precompile input length" + }, + "revert": { + "v": 0, + "d": "Base fee of the REVERT opcode" + }, + "staticcall": { + "v": 700, + "d": "Base fee of the STATICCALL opcode" + }, + "returndatasize": { + "v": 2, + "d": "Base fee of the RETURNDATASIZE opcode" + }, + "returndatacopy": { + "v": 3, + "d": "Base fee of the RETURNDATACOPY opcode" + } + }, + "vm": {}, + "pow": { + "minerReward": { + "v": "3000000000000000000", + "d": "the amount a miner get rewarded for mining a block" + }, + "difficultyBombDelay": { + "v": 3000000, + "d": "the amount of blocks to delay the difficulty bomb with" + } + } +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/chainstart.ts b/packages/web3-eth-accounts/src/common/hardforks/chainstart.ts new file mode 100644 index 00000000000..32f5630b5ff --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/chainstart.ts @@ -0,0 +1,439 @@ +export default { + "name": "chainstart", + "comment": "Start of the Ethereum main chain", + "url": "", + "status": "", + "gasConfig": { + "minGasLimit": { + "v": 5000, + "d": "Minimum the gas limit may ever be" + }, + "gasLimitBoundDivisor": { + "v": 1024, + "d": "The bound divisor of the gas limit, used in update calculations" + }, + "maxRefundQuotient": { + "v": 2, + "d": "Maximum refund quotient; max tx refund is min(tx.gasUsed/maxRefundQuotient, tx.gasRefund)" + } + }, + "gasPrices": { + "base": { + "v": 2, + "d": "Gas base cost, used e.g. for ChainID opcode (Istanbul)" + }, + "tierStep": { + "v": [0, 2, 3, 5, 8, 10, 20], + "d": "Once per operation, for a selection of them" + }, + "exp": { + "v": 10, + "d": "Base fee of the EXP opcode" + }, + "expByte": { + "v": 10, + "d": "Times ceil(log256(exponent)) for the EXP instruction" + }, + "sha3": { + "v": 30, + "d": "Base fee of the SHA3 opcode" + }, + "sha3Word": { + "v": 6, + "d": "Once per word of the SHA3 operation's data" + }, + "sload": { + "v": 50, + "d": "Base fee of the SLOAD opcode" + }, + "sstoreSet": { + "v": 20000, + "d": "Once per SSTORE operation if the zeroness changes from zero" + }, + "sstoreReset": { + "v": 5000, + "d": "Once per SSTORE operation if the zeroness does not change from zero" + }, + "sstoreRefund": { + "v": 15000, + "d": "Once per SSTORE operation if the zeroness changes to zero" + }, + "jumpdest": { + "v": 1, + "d": "Base fee of the JUMPDEST opcode" + }, + "log": { + "v": 375, + "d": "Base fee of the LOG opcode" + }, + "logData": { + "v": 8, + "d": "Per byte in a LOG* operation's data" + }, + "logTopic": { + "v": 375, + "d": "Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas" + }, + "create": { + "v": 32000, + "d": "Base fee of the CREATE opcode" + }, + "call": { + "v": 40, + "d": "Base fee of the CALL opcode" + }, + "callStipend": { + "v": 2300, + "d": "Free gas given at beginning of call" + }, + "callValueTransfer": { + "v": 9000, + "d": "Paid for CALL when the value transfor is non-zero" + }, + "callNewAccount": { + "v": 25000, + "d": "Paid for CALL when the destination address didn't exist prior" + }, + "selfdestructRefund": { + "v": 24000, + "d": "Refunded following a selfdestruct operation" + }, + "memory": { + "v": 3, + "d": "Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL" + }, + "quadCoeffDiv": { + "v": 512, + "d": "Divisor for the quadratic particle of the memory cost equation" + }, + "createData": { + "v": 200, + "d": "" + }, + "tx": { + "v": 21000, + "d": "Per transaction. NOTE: Not payable on data of calls between transactions" + }, + "txCreation": { + "v": 32000, + "d": "The cost of creating a contract via tx" + }, + "txDataZero": { + "v": 4, + "d": "Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions" + }, + "txDataNonZero": { + "v": 68, + "d": "Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions" + }, + "copy": { + "v": 3, + "d": "Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added" + }, + "ecRecover": { + "v": 3000, + "d": "" + }, + "sha256": { + "v": 60, + "d": "" + }, + "sha256Word": { + "v": 12, + "d": "" + }, + "ripemd160": { + "v": 600, + "d": "" + }, + "ripemd160Word": { + "v": 120, + "d": "" + }, + "identity": { + "v": 15, + "d": "" + }, + "identityWord": { + "v": 3, + "d": "" + }, + "stop": { + "v": 0, + "d": "Base fee of the STOP opcode" + }, + "add": { + "v": 3, + "d": "Base fee of the ADD opcode" + }, + "mul": { + "v": 5, + "d": "Base fee of the MUL opcode" + }, + "sub": { + "v": 3, + "d": "Base fee of the SUB opcode" + }, + "div": { + "v": 5, + "d": "Base fee of the DIV opcode" + }, + "sdiv": { + "v": 5, + "d": "Base fee of the SDIV opcode" + }, + "mod": { + "v": 5, + "d": "Base fee of the MOD opcode" + }, + "smod": { + "v": 5, + "d": "Base fee of the SMOD opcode" + }, + "addmod": { + "v": 8, + "d": "Base fee of the ADDMOD opcode" + }, + "mulmod": { + "v": 8, + "d": "Base fee of the MULMOD opcode" + }, + "signextend": { + "v": 5, + "d": "Base fee of the SIGNEXTEND opcode" + }, + "lt": { + "v": 3, + "d": "Base fee of the LT opcode" + }, + "gt": { + "v": 3, + "d": "Base fee of the GT opcode" + }, + "slt": { + "v": 3, + "d": "Base fee of the SLT opcode" + }, + "sgt": { + "v": 3, + "d": "Base fee of the SGT opcode" + }, + "eq": { + "v": 3, + "d": "Base fee of the EQ opcode" + }, + "iszero": { + "v": 3, + "d": "Base fee of the ISZERO opcode" + }, + "and": { + "v": 3, + "d": "Base fee of the AND opcode" + }, + "or": { + "v": 3, + "d": "Base fee of the OR opcode" + }, + "xor": { + "v": 3, + "d": "Base fee of the XOR opcode" + }, + "not": { + "v": 3, + "d": "Base fee of the NOT opcode" + }, + "byte": { + "v": 3, + "d": "Base fee of the BYTE opcode" + }, + "address": { + "v": 2, + "d": "Base fee of the ADDRESS opcode" + }, + "balance": { + "v": 20, + "d": "Base fee of the BALANCE opcode" + }, + "origin": { + "v": 2, + "d": "Base fee of the ORIGIN opcode" + }, + "caller": { + "v": 2, + "d": "Base fee of the CALLER opcode" + }, + "callvalue": { + "v": 2, + "d": "Base fee of the CALLVALUE opcode" + }, + "calldataload": { + "v": 3, + "d": "Base fee of the CALLDATALOAD opcode" + }, + "calldatasize": { + "v": 2, + "d": "Base fee of the CALLDATASIZE opcode" + }, + "calldatacopy": { + "v": 3, + "d": "Base fee of the CALLDATACOPY opcode" + }, + "codesize": { + "v": 2, + "d": "Base fee of the CODESIZE opcode" + }, + "codecopy": { + "v": 3, + "d": "Base fee of the CODECOPY opcode" + }, + "gasprice": { + "v": 2, + "d": "Base fee of the GASPRICE opcode" + }, + "extcodesize": { + "v": 20, + "d": "Base fee of the EXTCODESIZE opcode" + }, + "extcodecopy": { + "v": 20, + "d": "Base fee of the EXTCODECOPY opcode" + }, + "blockhash": { + "v": 20, + "d": "Base fee of the BLOCKHASH opcode" + }, + "coinbase": { + "v": 2, + "d": "Base fee of the COINBASE opcode" + }, + "timestamp": { + "v": 2, + "d": "Base fee of the TIMESTAMP opcode" + }, + "number": { + "v": 2, + "d": "Base fee of the NUMBER opcode" + }, + "difficulty": { + "v": 2, + "d": "Base fee of the DIFFICULTY opcode" + }, + "gaslimit": { + "v": 2, + "d": "Base fee of the GASLIMIT opcode" + }, + "pop": { + "v": 2, + "d": "Base fee of the POP opcode" + }, + "mload": { + "v": 3, + "d": "Base fee of the MLOAD opcode" + }, + "mstore": { + "v": 3, + "d": "Base fee of the MSTORE opcode" + }, + "mstore8": { + "v": 3, + "d": "Base fee of the MSTORE8 opcode" + }, + "sstore": { + "v": 0, + "d": "Base fee of the SSTORE opcode" + }, + "jump": { + "v": 8, + "d": "Base fee of the JUMP opcode" + }, + "jumpi": { + "v": 10, + "d": "Base fee of the JUMPI opcode" + }, + "pc": { + "v": 2, + "d": "Base fee of the PC opcode" + }, + "msize": { + "v": 2, + "d": "Base fee of the MSIZE opcode" + }, + "gas": { + "v": 2, + "d": "Base fee of the GAS opcode" + }, + "push": { + "v": 3, + "d": "Base fee of the PUSH opcode" + }, + "dup": { + "v": 3, + "d": "Base fee of the DUP opcode" + }, + "swap": { + "v": 3, + "d": "Base fee of the SWAP opcode" + }, + "callcode": { + "v": 40, + "d": "Base fee of the CALLCODE opcode" + }, + "return": { + "v": 0, + "d": "Base fee of the RETURN opcode" + }, + "invalid": { + "v": 0, + "d": "Base fee of the INVALID opcode" + }, + "selfdestruct": { + "v": 0, + "d": "Base fee of the SELFDESTRUCT opcode" + } + }, + "vm": { + "stackLimit": { + "v": 1024, + "d": "Maximum size of VM stack allowed" + }, + "callCreateDepth": { + "v": 1024, + "d": "Maximum depth of call/create stack" + }, + "maxExtraDataSize": { + "v": 32, + "d": "Maximum size extra data may be after Genesis" + } + }, + "pow": { + "minimumDifficulty": { + "v": 131072, + "d": "The minimum that the difficulty may ever be" + }, + "difficultyBoundDivisor": { + "v": 2048, + "d": "The bound divisor of the difficulty, used in the update calculations" + }, + "durationLimit": { + "v": 13, + "d": "The decision boundary on the blocktime duration used to determine whether difficulty should go up or not" + }, + "epochDuration": { + "v": 30000, + "d": "Duration between proof-of-work epochs" + }, + "timebombPeriod": { + "v": 100000, + "d": "Exponential difficulty timebomb period" + }, + "minerReward": { + "v": "5000000000000000000", + "d": "the amount a miner get rewarded for mining a block" + }, + "difficultyBombDelay": { + "v": 0, + "d": "the amount of blocks to delay the difficulty bomb with" + } + } +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/constantinople.ts b/packages/web3-eth-accounts/src/common/hardforks/constantinople.ts new file mode 100644 index 00000000000..dd576fe1575 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/constantinople.ts @@ -0,0 +1,69 @@ +export default { + "name": "constantinople", + "comment": "Postponed hardfork including EIP-1283 (SSTORE gas metering changes)", + "url": "https://eips.ethereum.org/EIPS/eip-1013", + "status": "Final", + "gasConfig": {}, + "gasPrices": { + "netSstoreNoopGas": { + "v": 200, + "d": "Once per SSTORE operation if the value doesn't change" + }, + "netSstoreInitGas": { + "v": 20000, + "d": "Once per SSTORE operation from clean zero" + }, + "netSstoreCleanGas": { + "v": 5000, + "d": "Once per SSTORE operation from clean non-zero" + }, + "netSstoreDirtyGas": { + "v": 200, + "d": "Once per SSTORE operation from dirty" + }, + "netSstoreClearRefund": { + "v": 15000, + "d": "Once per SSTORE operation for clearing an originally existing storage slot" + }, + "netSstoreResetRefund": { + "v": 4800, + "d": "Once per SSTORE operation for resetting to the original non-zero value" + }, + "netSstoreResetClearRefund": { + "v": 19800, + "d": "Once per SSTORE operation for resetting to the original zero value" + }, + "shl": { + "v": 3, + "d": "Base fee of the SHL opcode" + }, + "shr": { + "v": 3, + "d": "Base fee of the SHR opcode" + }, + "sar": { + "v": 3, + "d": "Base fee of the SAR opcode" + }, + "extcodehash": { + "v": 400, + "d": "Base fee of the EXTCODEHASH opcode" + }, + "create2": { + "v": 32000, + "d": "Base fee of the CREATE2 opcode" + } + }, + "vm": {}, + "pow": { + "minerReward": { + "v": "2000000000000000000", + "d": "The amount a miner gets rewarded for mining a block" + }, + "difficultyBombDelay": { + "v": 5000000, + "d": "the amount of blocks to delay the difficulty bomb with" + } + } +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/dao.ts b/packages/web3-eth-accounts/src/common/hardforks/dao.ts new file mode 100644 index 00000000000..a565ec89a42 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/dao.ts @@ -0,0 +1,11 @@ +export default { + "name": "dao", + "comment": "DAO rescue hardfork", + "url": "https://eips.ethereum.org/EIPS/eip-779", + "status": "Final", + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/grayGlacier.ts b/packages/web3-eth-accounts/src/common/hardforks/grayGlacier.ts new file mode 100644 index 00000000000..3c67d73e7af --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/grayGlacier.ts @@ -0,0 +1,12 @@ +export default { + "name": "grayGlacier", + "comment": "Delaying the difficulty bomb to Mid September 2022", + "url": "https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/gray-glacier.md", + "status": "Draft", + "eips": [5133], + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/homestead.ts b/packages/web3-eth-accounts/src/common/hardforks/homestead.ts new file mode 100644 index 00000000000..e6521fc46ab --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/homestead.ts @@ -0,0 +1,16 @@ +export default { + "name": "homestead", + "comment": "Homestead hardfork with protocol and network changes", + "url": "https://eips.ethereum.org/EIPS/eip-606", + "status": "Final", + "gasConfig": {}, + "gasPrices": { + "delegatecall": { + "v": 40, + "d": "Base fee of the DELEGATECALL opcode" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/index.ts b/packages/web3-eth-accounts/src/common/hardforks/index.ts new file mode 100644 index 00000000000..6f646d19836 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/index.ts @@ -0,0 +1,53 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import chainstart from './chainstart.js'; +import dao from './dao.js'; +import homestead from './homestead.js'; +import tangerineWhistle from './tangerineWhistle.js'; +import spuriousDragon from './spuriousDragon.js'; +import byzantium from './byzantium.js'; +import constantinople from './constantinople.js'; +import petersburg from './petersburg.js'; +import istanbul from './istanbul.js'; +import muirGlacier from './muirGlacier.js'; +import berlin from './berlin.js'; +import london from './london.js'; +import shanghai from './shanghai.js'; +import arrowGlacier from './arrowGlacier.js'; +import grayGlacier from './grayGlacier.js'; +import mergeForkIdTransition from './mergeForkIdTransition.js'; +import merge from './merge.js'; + +export const hardforks: { [key: string]: any } = { + chainstart, + homestead, + dao, + tangerineWhistle, + spuriousDragon, + byzantium, + constantinople, + petersburg, + istanbul, + muirGlacier, + berlin, + london, + shanghai, + arrowGlacier, + grayGlacier, + mergeForkIdTransition, + merge, +}; diff --git a/packages/web3-eth-accounts/src/common/hardforks/istanbul.ts b/packages/web3-eth-accounts/src/common/hardforks/istanbul.ts new file mode 100644 index 00000000000..96f3a66c598 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/istanbul.ts @@ -0,0 +1,88 @@ +export default { + "name": "istanbul", + "comment": "HF targeted for December 2019 following the Constantinople/Petersburg HF", + "url": "https://eips.ethereum.org/EIPS/eip-1679", + "status": "Final", + "gasConfig": {}, + "gasPrices": { + "blake2Round": { + "v": 1, + "d": "Gas cost per round for the Blake2 F precompile" + }, + "ecAdd": { + "v": 150, + "d": "Gas costs for curve addition precompile" + }, + "ecMul": { + "v": 6000, + "d": "Gas costs for curve multiplication precompile" + }, + "ecPairing": { + "v": 45000, + "d": "Base gas costs for curve pairing precompile" + }, + "ecPairingWord": { + "v": 34000, + "d": "Gas costs regarding curve pairing precompile input length" + }, + "txDataNonZero": { + "v": 16, + "d": "Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions" + }, + "sstoreSentryGasEIP2200": { + "v": 2300, + "d": "Minimum gas required to be present for an SSTORE call, not consumed" + }, + "sstoreNoopGasEIP2200": { + "v": 800, + "d": "Once per SSTORE operation if the value doesn't change" + }, + "sstoreDirtyGasEIP2200": { + "v": 800, + "d": "Once per SSTORE operation if a dirty value is changed" + }, + "sstoreInitGasEIP2200": { + "v": 20000, + "d": "Once per SSTORE operation from clean zero to non-zero" + }, + "sstoreInitRefundEIP2200": { + "v": 19200, + "d": "Once per SSTORE operation for resetting to the original zero value" + }, + "sstoreCleanGasEIP2200": { + "v": 5000, + "d": "Once per SSTORE operation from clean non-zero to something else" + }, + "sstoreCleanRefundEIP2200": { + "v": 4200, + "d": "Once per SSTORE operation for resetting to the original non-zero value" + }, + "sstoreClearRefundEIP2200": { + "v": 15000, + "d": "Once per SSTORE operation for clearing an originally existing storage slot" + }, + "balance": { + "v": 700, + "d": "Base fee of the BALANCE opcode" + }, + "extcodehash": { + "v": 700, + "d": "Base fee of the EXTCODEHASH opcode" + }, + "chainid": { + "v": 2, + "d": "Base fee of the CHAINID opcode" + }, + "selfbalance": { + "v": 5, + "d": "Base fee of the SELFBALANCE opcode" + }, + "sload": { + "v": 800, + "d": "Base fee of the SLOAD opcode" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/london.ts b/packages/web3-eth-accounts/src/common/hardforks/london.ts new file mode 100644 index 00000000000..6d0ec4a4468 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/london.ts @@ -0,0 +1,8 @@ +export default { + "name": "london", + "comment": "HF targeted for July 2021 following the Berlin fork", + "url": "https://github.com/ethereum/eth1.0-specs/blob/master/network-upgrades/mainnet-upgrades/london.md", + "status": "Final", + "eips": [1559, 3198, 3529, 3541] +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/merge.ts b/packages/web3-eth-accounts/src/common/hardforks/merge.ts new file mode 100644 index 00000000000..db48aa32509 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/merge.ts @@ -0,0 +1,13 @@ +export default { + "name": "merge", + "comment": "Hardfork to upgrade the consensus mechanism to Proof-of-Stake", + "url": "https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/merge.md", + "status": "Final", + "consensus": { + "type": "pos", + "algorithm": "casper", + "casper": {} + }, + "eips": [3675, 4399] +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/mergeForkIdTransition.ts b/packages/web3-eth-accounts/src/common/hardforks/mergeForkIdTransition.ts new file mode 100644 index 00000000000..f4df67bd2d2 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/mergeForkIdTransition.ts @@ -0,0 +1,8 @@ +export default { + "name": "mergeForkIdTransition", + "comment": "Pre-merge hardfork to fork off non-upgraded clients", + "url": "https://eips.ethereum.org/EIPS/eip-3675", + "status": "Draft", + "eips": [] +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/muirGlacier.ts b/packages/web3-eth-accounts/src/common/hardforks/muirGlacier.ts new file mode 100644 index 00000000000..a7d02c6147e --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/muirGlacier.ts @@ -0,0 +1,16 @@ +export default { + "name": "muirGlacier", + "comment": "HF to delay the difficulty bomb", + "url": "https://eips.ethereum.org/EIPS/eip-2384", + "status": "Final", + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": { + "difficultyBombDelay": { + "v": 9000000, + "d": "the amount of blocks to delay the difficulty bomb with" + } + } +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/petersburg.ts b/packages/web3-eth-accounts/src/common/hardforks/petersburg.ts new file mode 100644 index 00000000000..cca4005f893 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/petersburg.ts @@ -0,0 +1,40 @@ +export default { + "name": "petersburg", + "comment": "Aka constantinopleFix, removes EIP-1283, activate together with or after constantinople", + "url": "https://eips.ethereum.org/EIPS/eip-1716", + "status": "Final", + "gasConfig": {}, + "gasPrices": { + "netSstoreNoopGas": { + "v": null, + "d": "Removed along EIP-1283" + }, + "netSstoreInitGas": { + "v": null, + "d": "Removed along EIP-1283" + }, + "netSstoreCleanGas": { + "v": null, + "d": "Removed along EIP-1283" + }, + "netSstoreDirtyGas": { + "v": null, + "d": "Removed along EIP-1283" + }, + "netSstoreClearRefund": { + "v": null, + "d": "Removed along EIP-1283" + }, + "netSstoreResetRefund": { + "v": null, + "d": "Removed along EIP-1283" + }, + "netSstoreResetClearRefund": { + "v": null, + "d": "Removed along EIP-1283" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/shanghai.ts b/packages/web3-eth-accounts/src/common/hardforks/shanghai.ts new file mode 100644 index 00000000000..736e331a89e --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/shanghai.ts @@ -0,0 +1,8 @@ +export default { + "name": "shanghai", + "comment": "Next feature hardfork after the merge hardfork having withdrawals, warm coinbase, push0, limit/meter initcode", + "url": "https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md", + "status": "Final", + "eips": [3651, 3855, 3860, 4895] +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/sharding.ts b/packages/web3-eth-accounts/src/common/hardforks/sharding.ts new file mode 100644 index 00000000000..e164e5f84d7 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/sharding.ts @@ -0,0 +1,8 @@ +export default { + "name": "shardingFork", + "comment": "Internal hardfork to test proto-danksharding (do not use in production)", + "url": "https://eips.ethereum.org/EIPS/eip-4844", + "status": "Experimental", + "eips": [4844] +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/spuriousDragon.ts b/packages/web3-eth-accounts/src/common/hardforks/spuriousDragon.ts new file mode 100644 index 00000000000..e1ed0eda36c --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/spuriousDragon.ts @@ -0,0 +1,21 @@ +export default { + "name": "spuriousDragon", + "comment": "HF with EIPs for simple replay attack protection, EXP cost increase, state trie clearing, contract code size limit", + "url": "https://eips.ethereum.org/EIPS/eip-607", + "status": "Final", + "gasConfig": {}, + "gasPrices": { + "expByte": { + "v": 50, + "d": "Times ceil(log256(exponent)) for the EXP instruction" + } + }, + "vm": { + "maxCodeSize": { + "v": 24576, + "d": "Maximum length of contract code" + } + }, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/hardforks/tangerineWhistle.ts b/packages/web3-eth-accounts/src/common/hardforks/tangerineWhistle.ts new file mode 100644 index 00000000000..ffb2bf43594 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/hardforks/tangerineWhistle.ts @@ -0,0 +1,44 @@ +export default { + "name": "tangerineWhistle", + "comment": "Hardfork with gas cost changes for IO-heavy operations", + "url": "https://eips.ethereum.org/EIPS/eip-608", + "status": "Final", + "gasConfig": {}, + "gasPrices": { + "sload": { + "v": 200, + "d": "Once per SLOAD operation" + }, + "call": { + "v": 700, + "d": "Once per CALL operation & message call transaction" + }, + "extcodesize": { + "v": 700, + "d": "Base fee of the EXTCODESIZE opcode" + }, + "extcodecopy": { + "v": 700, + "d": "Base fee of the EXTCODECOPY opcode" + }, + "balance": { + "v": 400, + "d": "Base fee of the BALANCE opcode" + }, + "delegatecall": { + "v": 700, + "d": "Base fee of the DELEGATECALL opcode" + }, + "callcode": { + "v": 700, + "d": "Base fee of the CALLCODE opcode" + }, + "selfdestruct": { + "v": 5000, + "d": "Base fee of the SELFDESTRUCT opcode" + } + }, + "vm": {}, + "pow": {} +} + ; \ No newline at end of file diff --git a/packages/web3-eth-accounts/src/common/index.ts b/packages/web3-eth-accounts/src/common/index.ts new file mode 100644 index 00000000000..3602a0f8f43 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/index.ts @@ -0,0 +1,21 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// @ethereumjs/common version 3.1.1 +export * from './common.js'; +export * from './enums.js'; +export * from './types.js'; +export * from './utils.js'; diff --git a/packages/web3-eth-accounts/src/common/types.ts b/packages/web3-eth-accounts/src/common/types.ts new file mode 100644 index 00000000000..9d5c0bbe261 --- /dev/null +++ b/packages/web3-eth-accounts/src/common/types.ts @@ -0,0 +1,191 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import type { Chain, ConsensusAlgorithm, ConsensusType, Hardfork } from './enums.js'; + +export interface ChainName { + [chainId: string]: string; +} + +export type CliqueConfig = { + period: number; + epoch: number; +}; + +export type EthashConfig = Record; + +export type CasperConfig = Record; + +export interface GenesisBlockConfig { + timestamp?: string; + gasLimit: number; + difficulty: number; + nonce: string; + extraData: string; + baseFeePerGas?: string; +} + +export interface HardforkConfig { + name: Hardfork | string; + // eslint-disable-next-line @typescript-eslint/ban-types + block: number | null; // null is used for hardforks that should not be applied -- since `undefined` isn't a valid value in JSON + ttd?: bigint | string; + timestamp?: number | string; + // eslint-disable-next-line @typescript-eslint/ban-types + forkHash?: string | null; +} + +export interface BootstrapNodeConfig { + ip: string; + port: number | string; + network?: string; + chainId?: number; + id: string; + location: string; + comment: string; +} + +export interface ChainConfig { + name: string; + chainId: number | bigint; + networkId: number | bigint; + defaultHardfork?: string; + comment?: string; + url?: string; + genesis: GenesisBlockConfig; + hardforks: HardforkConfig[]; + bootstrapNodes?: BootstrapNodeConfig[]; + dnsNetworks?: string[]; + consensus: { + type: ConsensusType | string; + algorithm: ConsensusAlgorithm | string; + clique?: CliqueConfig; + ethash?: EthashConfig; + casper?: CasperConfig; + }; +} +export interface ChainsConfig { + [key: string]: ChainConfig | ChainName; +} + +interface BaseOpts { + /** + * String identifier ('byzantium') for hardfork or {@link Hardfork} enum. + * + * Default: Hardfork.London + */ + hardfork?: string | Hardfork; + /** + * Selected EIPs which can be activated, please use an array for instantiation + * (e.g. `eips: [ 2537, ]`) + * + * Currently supported: + * + * - [EIP-2537](https://eips.ethereum.org/EIPS/eip-2537) - BLS12-381 precompiles + */ + eips?: number[]; +} + +/** + * Options for instantiating a {@link Common} instance. + */ +export interface CommonOpts extends BaseOpts { + /** + * Chain name ('mainnet'), id (1), or {@link Chain} enum, + * either from a chain directly supported or a custom chain + * passed in via {@link CommonOpts.customChains}. + */ + chain: string | number | Chain | bigint | object; + /** + * Initialize (in addition to the supported chains) with the selected + * custom chains. Custom genesis state should be passed to the Blockchain class if used. + * + * Usage (directly with the respective chain initialization via the {@link CommonOpts.chain} option): + * + * ```javascript + * import myCustomChain1 from '[PATH_TO_MY_CHAINS]/myCustomChain1.json' + * const common = new Common({ chain: 'myCustomChain1', customChains: [ myCustomChain1 ]}) + * ``` + */ + customChains?: ChainConfig[]; +} + +/** + * Options to be used with the {@link Common.custom} static constructor. + */ +export interface CustomCommonOpts extends BaseOpts { + /** + * The name (`mainnet`), id (`1`), or {@link Chain} enum of + * a standard chain used to base the custom chain params on. + */ + baseChain?: string | number | Chain | bigint; +} + +export interface GethConfigOpts extends BaseOpts { + chain?: string; + genesisHash?: Uint8Array; + mergeForkIdPostMerge?: boolean; +} + +/* + * A type that represents a `0x`-prefixed hex string. + */ +export type PrefixedHexString = string; + +/* + * A type that represents an input that can be converted to a Buffer. + */ +export type Uint8ArrayLike = Uint8Array | number[] | number | bigint | PrefixedHexString; + +/* + * A type that represents an input that can be converted to a BigInt. + */ +export type BigIntLike = bigint | PrefixedHexString | number | Uint8Array; + +/* + * A type that represents an object that has a `toArray()` method. + */ +export interface TransformableToArray { + toArray(): Uint8Array; +} + +export type NestedUint8Array = Array; +/** + * Type output options + */ +export enum TypeOutput { + Number, + BigInt, + Uint8Array, + PrefixedHexString, +} + +export type TypeOutputReturnType = { + [TypeOutput.Number]: number; + [TypeOutput.BigInt]: bigint; + [TypeOutput.Uint8Array]: Uint8Array; + [TypeOutput.PrefixedHexString]: PrefixedHexString; +}; +export type ToBytesInputTypes = + | PrefixedHexString + | number + | bigint + | Uint8Array + | number[] + | TransformableToArray + // eslint-disable-next-line @typescript-eslint/ban-types + | null + | undefined; diff --git a/packages/web3-eth-accounts/src/common/utils.ts b/packages/web3-eth-accounts/src/common/utils.ts new file mode 100644 index 00000000000..f243ede269d --- /dev/null +++ b/packages/web3-eth-accounts/src/common/utils.ts @@ -0,0 +1,577 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { isHexPrefixed, isHexString } from 'web3-validator'; +import { bytesToHex, hexToBytes, numberToHex } from 'web3-utils'; +import { secp256k1 } from '../tx/constants.js'; +import { Hardfork } from './enums.js'; +import { ToBytesInputTypes, TypeOutput, TypeOutputReturnType } from './types.js'; + +type ConfigHardfork = + // eslint-disable-next-line @typescript-eslint/ban-types + | { name: string; block: null; timestamp: number } + | { name: string; block: number; timestamp?: number }; + +/** + * Removes '0x' from a given `String` if present + * @param str the string value + * @returns the string without 0x prefix + */ +export const stripHexPrefix = (str: string): string => { + if (typeof str !== 'string') + throw new Error(`[stripHexPrefix] input must be type 'string', received ${typeof str}`); + + return isHexPrefixed(str) ? str.slice(2) : str; +}; +/** + * Transforms Geth formatted nonce (i.e. hex string) to 8 byte 0x-prefixed string used internally + * @param nonce string parsed from the Geth genesis file + * @returns nonce as a 0x-prefixed 8 byte string + */ +function formatNonce(nonce: string): string { + if (!nonce || nonce === '0x0') { + return '0x0000000000000000'; + } + if (isHexPrefixed(nonce)) { + return `0x${stripHexPrefix(nonce).padStart(16, '0')}`; + } + return `0x${nonce.padStart(16, '0')}`; +} + +/** + * Converts a `Number` into a hex `String` + * @param {Number} i + * @return {String} + */ +const intToHex = function (i: number) { + if (!Number.isSafeInteger(i) || i < 0) { + throw new Error(`Received an invalid integer type: ${i}`); + } + return `0x${i.toString(16)}`; +}; + +/** + * Converts Geth genesis parameters to an EthereumJS compatible `CommonOpts` object + * @param json object representing the Geth genesis file + * @param optional mergeForkIdPostMerge which clarifies the placement of MergeForkIdTransition + * hardfork, which by default is post merge as with the merged eth networks but could also come + * before merge like in kiln genesis + * @returns genesis parameters in a `CommonOpts` compliant object + */ +function parseGethParams(json: any, mergeForkIdPostMerge = true) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const { + name, + config, + difficulty, + mixHash, + gasLimit, + coinbase, + baseFeePerGas, + }: { + name: string; + config: any; + difficulty: string; + mixHash: string; + gasLimit: string; + coinbase: string; + baseFeePerGas: string; + } = json; + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + let { extraData, timestamp, nonce }: { extraData: string; timestamp: string; nonce: string } = + json; + const genesisTimestamp = Number(timestamp); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const { chainId }: { chainId: number } = config; + + // geth is not strictly putting empty fields with a 0x prefix + if (extraData === '') { + extraData = '0x'; + } + // geth may use number for timestamp + if (!isHexPrefixed(timestamp)) { + // eslint-disable-next-line radix + timestamp = intToHex(parseInt(timestamp)); + } + // geth may not give us a nonce strictly formatted to an 8 byte hex string + if (nonce.length !== 18) { + nonce = formatNonce(nonce); + } + + // EIP155 and EIP158 are both part of Spurious Dragon hardfork and must occur at the same time + // but have different configuration parameters in geth genesis parameters + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (config.eip155Block !== config.eip158Block) { + throw new Error( + 'EIP155 block number must equal EIP 158 block number since both are part of SpuriousDragon hardfork and the client only supports activating the full hardfork', + ); + } + + const params = { + name, + chainId, + networkId: chainId, + genesis: { + timestamp, + // eslint-disable-next-line radix + gasLimit: parseInt(gasLimit), // geth gasLimit and difficulty are hex strings while ours are `number`s + // eslint-disable-next-line radix + difficulty: parseInt(difficulty), + nonce, + extraData, + mixHash, + coinbase, + baseFeePerGas, + }, + hardfork: undefined as string | undefined, + hardforks: [] as ConfigHardfork[], + bootstrapNodes: [], + consensus: + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + config.clique !== undefined + ? { + type: 'poa', + algorithm: 'clique', + clique: { + // The recent geth genesis seems to be using blockperiodseconds + // and epochlength for clique specification + // see: https://hackmd.io/PqZgMpnkSWCWv5joJoFymQ + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment + period: config.clique.period ?? config.clique.blockperiodseconds, + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment + epoch: config.clique.epoch ?? config.clique.epochlength, + }, + } + : { + type: 'pow', + algorithm: 'ethash', + ethash: {}, + }, + }; + + const forkMap: { [key: string]: { name: string; postMerge?: boolean; isTimestamp?: boolean } } = + { + [Hardfork.Homestead]: { name: 'homesteadBlock' }, + [Hardfork.Dao]: { name: 'daoForkBlock' }, + [Hardfork.TangerineWhistle]: { name: 'eip150Block' }, + [Hardfork.SpuriousDragon]: { name: 'eip155Block' }, + [Hardfork.Byzantium]: { name: 'byzantiumBlock' }, + [Hardfork.Constantinople]: { name: 'constantinopleBlock' }, + [Hardfork.Petersburg]: { name: 'petersburgBlock' }, + [Hardfork.Istanbul]: { name: 'istanbulBlock' }, + [Hardfork.MuirGlacier]: { name: 'muirGlacierBlock' }, + [Hardfork.Berlin]: { name: 'berlinBlock' }, + [Hardfork.London]: { name: 'londonBlock' }, + [Hardfork.MergeForkIdTransition]: { + name: 'mergeForkBlock', + postMerge: mergeForkIdPostMerge, + }, + [Hardfork.Shanghai]: { name: 'shanghaiTime', postMerge: true, isTimestamp: true }, + [Hardfork.ShardingForkDev]: { + name: 'shardingForkTime', + postMerge: true, + isTimestamp: true, + }, + }; + + // forkMapRev is the map from config field name to Hardfork + const forkMapRev = Object.keys(forkMap).reduce<{ [key: string]: string }>((acc, elem) => { + acc[forkMap[elem].name] = elem; + return acc; + }, {}); + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + const configHardforkNames = Object.keys(config).filter( + // eslint-disable-next-line no-null/no-null, @typescript-eslint/no-unsafe-member-access + key => forkMapRev[key] !== undefined && config[key] !== undefined && config[key] !== null, + ); + + params.hardforks = configHardforkNames + .map(nameBlock => ({ + name: forkMapRev[nameBlock], + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + block: + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + forkMap[forkMapRev[nameBlock]].isTimestamp === true || + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + typeof config[nameBlock] !== 'number' + ? // eslint-disable-next-line no-null/no-null + null + : // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + config[nameBlock], + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + timestamp: + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + forkMap[forkMapRev[nameBlock]].isTimestamp === true && + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + typeof config[nameBlock] === 'number' + ? // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + config[nameBlock] + : undefined, + })) + // eslint-disable-next-line no-null/no-null + .filter(fork => fork.block !== null || fork.timestamp !== undefined) as ConfigHardfork[]; + + params.hardforks.sort( + (a: ConfigHardfork, b: ConfigHardfork) => (a.block ?? Infinity) - (b.block ?? Infinity), + ); + + params.hardforks.sort( + (a: ConfigHardfork, b: ConfigHardfork) => + (a.timestamp ?? genesisTimestamp) - (b.timestamp ?? genesisTimestamp), + ); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (config.terminalTotalDifficulty !== undefined) { + // Following points need to be considered for placement of merge hf + // - Merge hardfork can't be placed at genesis + // - Place merge hf before any hardforks that require CL participation for e.g. withdrawals + // - Merge hardfork has to be placed just after genesis if any of the genesis hardforks make CL + // necessary for e.g. withdrawals + const mergeConfig = { + name: Hardfork.Merge, + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment + ttd: config.terminalTotalDifficulty, + // eslint-disable-next-line no-null/no-null + block: null, + }; + + // Merge hardfork has to be placed before first hardfork that is dependent on merge + const postMergeIndex = params.hardforks.findIndex( + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + (hf: any) => forkMap[hf.name]?.postMerge === true, + ); + if (postMergeIndex !== -1) { + params.hardforks.splice(postMergeIndex, 0, mergeConfig as unknown as ConfigHardfork); + } else { + params.hardforks.push(mergeConfig as unknown as ConfigHardfork); + } + } + + const latestHardfork = params.hardforks.length > 0 ? params.hardforks.slice(-1)[0] : undefined; + params.hardfork = latestHardfork?.name; + params.hardforks.unshift({ name: Hardfork.Chainstart, block: 0 }); + + return params; +} + +/** + * Parses a genesis.json exported from Geth into parameters for Common instance + * @param json representing the Geth genesis file + * @param name optional chain name + * @returns parsed params + */ +export function parseGethGenesis(json: any, name?: string, mergeForkIdPostMerge?: boolean) { + try { + if (['config', 'difficulty', 'gasLimit', 'alloc'].some(field => !(field in json))) { + throw new Error('Invalid format, expected geth genesis fields missing'); + } + if (name !== undefined) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-param-reassign + json.name = name; + } + return parseGethParams(json, mergeForkIdPostMerge); + } catch (e: any) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-template-expressions + throw new Error(`Error parsing parameters file: ${e.message}`); + } +} + +/** + * Pads a `String` to have an even length + * @param value + * @return output + */ +export function padToEven(value: string): string { + let a = value; + + if (typeof a !== 'string') { + throw new Error(`[padToEven] value must be type 'string', received ${typeof a}`); + } + + if (a.length % 2) a = `0${a}`; + + return a; +} + +/** + * Converts an `Number` to a `Uint8Array` + * @param {Number} i + * @return {Uint8Array} + */ +export const intToUint8Array = function (i: number) { + const hex = intToHex(i); + return hexToBytes(`0x${padToEven(hex.slice(2))}`); +}; + +/** + * Attempts to turn a value into a `Uint8Array`. + * Inputs supported: `Uint8Array` `String` (hex-prefixed), `Number`, null/undefined, `BigInt` and other objects + * with a `toArray()` or `toUint8Array()` method. + * @param v the value + */ +export const toUint8Array = function (v: ToBytesInputTypes): Uint8Array { + // eslint-disable-next-line no-null/no-null + if (v === null || v === undefined) { + return new Uint8Array(); + } + + if (v instanceof Uint8Array) { + return v; + } + + if (Array.isArray(v)) { + return Uint8Array.from(v); + } + + if (typeof v === 'string') { + if (!isHexString(v)) { + throw new Error( + `Cannot convert string to Uint8Array. only supports 0x-prefixed hex strings and this string was given: ${v}`, + ); + } + return hexToBytes(padToEven(stripHexPrefix(v))); + } + + if (typeof v === 'number') { + return toUint8Array(numberToHex(v)); + } + + if (typeof v === 'bigint') { + if (v < BigInt(0)) { + throw new Error(`Cannot convert negative bigint to Uint8Array. Given: ${v}`); + } + let n = v.toString(16); + if (n.length % 2) n = `0${n}`; + return toUint8Array(`0x${n}`); + } + + if (v.toArray) { + // converts a BN to a Uint8Array + return Uint8Array.from(v.toArray()); + } + + throw new Error('invalid type'); +}; + +/** + * Converts a {@link Uint8Array} to a {@link bigint} + */ +export function uint8ArrayToBigInt(buf: Uint8Array) { + const hex = bytesToHex(buf); + if (hex === '0x') { + return BigInt(0); + } + return BigInt(hex); +} + +/** + * Converts a {@link bigint} to a {@link Uint8Array} + */ +export function bigIntToUint8Array(num: bigint) { + return toUint8Array(`0x${num.toString(16)}`); +} + +/** + * Returns a Uint8Array filled with 0s. + * @param bytes the number of bytes the Uint8Array should be + */ +export const zeros = function (bytes: number): Uint8Array { + return new Uint8Array(bytes).fill(0); +}; + +/** + * Pads a `Uint8Array` with zeros till it has `length` bytes. + * Truncates the beginning or end of input if its length exceeds `length`. + * @param msg the value to pad (Uint8Array) + * @param length the number of bytes the output should be + * @param right whether to start padding form the left or right + * @return (Uint8Array) + */ +const setLength = function (msg: Uint8Array, length: number, right: boolean) { + const buf = zeros(length); + if (right) { + if (msg.length < length) { + buf.set(msg); + return buf; + } + return msg.subarray(0, length); + } + if (msg.length < length) { + buf.set(msg, length - msg.length); + return buf; + } + return msg.subarray(-length); +}; + +/** + * Throws if input is not a Uint8Array + * @param {Uint8Array} input value to check + */ +export function assertIsUint8Array(input: unknown): asserts input is Uint8Array { + if (!(input instanceof Uint8Array)) { + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + const msg = `This method only supports Uint8Array but input was: ${input}`; + throw new Error(msg); + } +} +/** + * Left Pads a `Uint8Array` with leading zeros till it has `length` bytes. + * Or it truncates the beginning if it exceeds. + * @param msg the value to pad (Uint8Array) + * @param length the number of bytes the output should be + * @return (Uint8Array) + */ +export const setLengthLeft = function (msg: Uint8Array, length: number) { + assertIsUint8Array(msg); + return setLength(msg, length, false); +}; + +/** + * Trims leading zeros from a `Uint8Array`, `String` or `Number[]`. + * @param a (Uint8Array|Array|String) + * @return (Uint8Array|Array|String) + */ +export function stripZeros(a: T): T { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment + let first = a[0]; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + while (a.length > 0 && first.toString() === '0') { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, prefer-destructuring, @typescript-eslint/no-unsafe-call, no-param-reassign + a = a.slice(1) as T; + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, prefer-destructuring, @typescript-eslint/no-unsafe-member-access + first = a[0]; + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return a; +} + +/** + * Trims leading zeros from a `Uint8Array`. + * @param a (Uint8Array) + * @return (Uint8Array) + */ +export const unpadUint8Array = function (a: Uint8Array): Uint8Array { + assertIsUint8Array(a); + return stripZeros(a); +}; + +/** + * Converts a {@link bigint} to a `0x` prefixed hex string + */ +export const bigIntToHex = (num: bigint) => `0x${num.toString(16)}`; + +/** + * Convert value from bigint to an unpadded Uint8Array + * (useful for RLP transport) + * @param value value to convert + */ +export function bigIntToUnpaddedUint8Array(value: bigint): Uint8Array { + return unpadUint8Array(bigIntToUint8Array(value)); +} + +function calculateSigRecovery(v: bigint, chainId?: bigint): bigint { + if (v === BigInt(0) || v === BigInt(1)) return v; + + if (chainId === undefined) { + return v - BigInt(27); + } + return v - (chainId * BigInt(2) + BigInt(35)); +} + +function isValidSigRecovery(recovery: bigint): boolean { + return recovery === BigInt(0) || recovery === BigInt(1); +} + +/** + * ECDSA public key recovery from signature. + * NOTE: Accepts `v === 0 | v === 1` for EIP1559 transactions + * @returns Recovered public key + */ +export const ecrecover = function ( + msgHash: Uint8Array, + v: bigint, + r: Uint8Array, + s: Uint8Array, + chainId?: bigint, +): Uint8Array { + const recovery = calculateSigRecovery(v, chainId); + if (!isValidSigRecovery(recovery)) { + throw new Error('Invalid signature v value'); + } + + const senderPubKey = new secp256k1.Signature(uint8ArrayToBigInt(r), uint8ArrayToBigInt(s)) + .addRecoveryBit(Number(recovery)) + .recoverPublicKey(msgHash) + .toRawBytes(false); + return senderPubKey.slice(1); +}; + +/** + * Convert an input to a specified type. + * Input of null/undefined returns null/undefined regardless of the output type. + * @param input value to convert + * @param outputType type to output + */ +// eslint-disable-next-line @typescript-eslint/ban-types +export function toType(input: null, outputType: T): null; +export function toType(input: undefined, outputType: T): undefined; +export function toType( + input: ToBytesInputTypes, + outputType: T, +): TypeOutputReturnType[T]; +export function toType( + input: ToBytesInputTypes, + outputType: T, + // eslint-disable-next-line @typescript-eslint/ban-types +): TypeOutputReturnType[T] | undefined | null { + // eslint-disable-next-line no-null/no-null + if (input === null) { + // eslint-disable-next-line no-null/no-null + return null; + } + if (input === undefined) { + return undefined; + } + + if (typeof input === 'string' && !isHexString(input)) { + throw new Error(`A string must be provided with a 0x-prefix, given: ${input}`); + } else if (typeof input === 'number' && !Number.isSafeInteger(input)) { + throw new Error( + 'The provided number is greater than MAX_SAFE_INTEGER (please use an alternative input type)', + ); + } + + const output = toUint8Array(input); + + switch (outputType) { + case TypeOutput.Uint8Array: + return output as TypeOutputReturnType[T]; + case TypeOutput.BigInt: + return uint8ArrayToBigInt(output) as TypeOutputReturnType[T]; + case TypeOutput.Number: { + const bigInt = uint8ArrayToBigInt(output); + if (bigInt > BigInt(Number.MAX_SAFE_INTEGER)) { + throw new Error( + 'The provided number is greater than MAX_SAFE_INTEGER (please use an alternative output type)', + ); + } + return Number(bigInt) as TypeOutputReturnType[T]; + } + case TypeOutput.PrefixedHexString: + return bytesToHex(output) as TypeOutputReturnType[T]; + default: + throw new Error('unknown outputType'); + } +} diff --git a/packages/web3-eth-accounts/src/index.js b/packages/web3-eth-accounts/src/index.js deleted file mode 100644 index 6df1f8ccf1f..00000000000 --- a/packages/web3-eth-accounts/src/index.js +++ /dev/null @@ -1,640 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file accounts.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -'use strict'; - -var _ = require('underscore'); -var core = require('web3-core'); -var Method = require('web3-core-method'); -var Account = require('eth-lib/lib/account'); -var Hash = require('eth-lib/lib/hash'); -var RLP = require('eth-lib/lib/rlp');// jshint ignore:line -var Bytes = require('eth-lib/lib/bytes');// jshint ignore:line -var cryp = (typeof global === 'undefined') ? require('crypto-browserify') : require('crypto'); -var scrypt = require('scrypt-js'); -var uuid = require('uuid'); -var utils = require('web3-utils'); -var helpers = require('web3-core-helpers'); -var Transaction = require('ethereumjs-tx').Transaction; -var Common = require('ethereumjs-common').default; - - -var isNot = function(value) { - return (_.isUndefined(value) || _.isNull(value)); -}; - -var Accounts = function Accounts() { - var _this = this; - - // sets _requestmanager - core.packageInit(this, arguments); - - // remove unecessary core functions - delete this.BatchRequest; - delete this.extend; - - var _ethereumCall = [ - new Method({ - name: 'getNetworkId', - call: 'net_version', - params: 0, - outputFormatter: parseInt - }), - new Method({ - name: 'getChainId', - call: 'eth_chainId', - params: 0, - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'getGasPrice', - call: 'eth_gasPrice', - params: 0 - }), - new Method({ - name: 'getTransactionCount', - call: 'eth_getTransactionCount', - params: 2, - inputFormatter: [function(address) { - if (utils.isAddress(address)) { - return address; - } else { - throw new Error('Address ' + address + ' is not a valid address to get the "transactionCount".'); - } - }, function() { - return 'latest'; - }] - }) - ]; - // attach methods to this._ethereumCall - this._ethereumCall = {}; - _.each(_ethereumCall, function(method) { - method.attachToObject(_this._ethereumCall); - method.setRequestManager(_this._requestManager); - }); - - - this.wallet = new Wallet(this); -}; - -Accounts.prototype._addAccountFunctions = function(account) { - var _this = this; - - // add sign functions - account.signTransaction = function signTransaction(tx, callback) { - return _this.signTransaction(tx, account.privateKey, callback); - }; - account.sign = function sign(data) { - return _this.sign(data, account.privateKey); - }; - - account.encrypt = function encrypt(password, options) { - return _this.encrypt(account.privateKey, password, options); - }; - - - return account; -}; - -Accounts.prototype.create = function create(entropy) { - return this._addAccountFunctions(Account.create(entropy || utils.randomHex(32))); -}; - -Accounts.prototype.privateKeyToAccount = function privateKeyToAccount(privateKey, ignoreLength) { - if (!privateKey.startsWith('0x')) { - privateKey = '0x' + privateKey; - } - - // 64 hex characters + hex-prefix - if (!ignoreLength && privateKey.length !== 66) { - throw new Error("Private key must be 32 bytes long"); - } - - return this._addAccountFunctions(Account.fromPrivate(privateKey)); -}; - -Accounts.prototype.signTransaction = function signTransaction(tx, privateKey, callback) { - var _this = this, - error = false, - transactionOptions = {}, - hasTxSigningOptions = !!(tx && ((tx.chain && tx.hardfork) || tx.common)); - - callback = callback || function() { - }; - - if (!tx) { - error = new Error('No transaction object given!'); - - callback(error); - return Promise.reject(error); - } - - function signed(tx) { - const error = _validateTransactionForSigning(tx); - - if (error) { - callback(error); - return Promise.reject(error); - } - - try { - var transaction = helpers.formatters.inputCallFormatter(_.clone(tx)); - transaction.to = transaction.to || '0x'; - transaction.data = transaction.data || '0x'; - transaction.value = transaction.value || '0x'; - transaction.chainId = utils.numberToHex(transaction.chainId); - - // Because tx has no ethereumjs-tx signing options we use fetched vals. - if (!hasTxSigningOptions) { - transactionOptions.common = Common.forCustomChain( - 'mainnet', - { - name: 'custom-network', - networkId: transaction.networkId, - chainId: transaction.chainId - }, - 'petersburg' - ); - - delete transaction.networkId; - } else { - if (transaction.common) { - transactionOptions.common = Common.forCustomChain( - transaction.common.baseChain || 'mainnet', - { - name: transaction.common.customChain.name || 'custom-network', - networkId: transaction.common.customChain.networkId, - chainId: transaction.common.customChain.chainId - }, - transaction.common.hardfork || 'petersburg' - ); - - delete transaction.common; - } - - if (transaction.chain) { - transactionOptions.chain = transaction.chain; - delete transaction.chain; - } - - if (transaction.hardfork) { - transactionOptions.hardfork = transaction.hardfork; - delete transaction.hardfork; - } - } - - if (privateKey.startsWith('0x')) { - privateKey = privateKey.substring(2); - } - - var ethTx = new Transaction(transaction, transactionOptions); - - ethTx.sign(Buffer.from(privateKey, 'hex')); - - var validationResult = ethTx.validate(true); - - if (validationResult !== '') { - throw new Error('Signer Error: ' + validationResult); - } - - var rlpEncoded = ethTx.serialize().toString('hex'); - var rawTransaction = '0x' + rlpEncoded; - var transactionHash = utils.keccak256(rawTransaction); - - var result = { - messageHash: '0x' + Buffer.from(ethTx.hash(false)).toString('hex'), - v: '0x' + Buffer.from(ethTx.v).toString('hex'), - r: '0x' + Buffer.from(ethTx.r).toString('hex'), - s: '0x' + Buffer.from(ethTx.s).toString('hex'), - rawTransaction: rawTransaction, - transactionHash: transactionHash - }; - - callback(null, result); - return result; - - } catch (e) { - callback(e); - return Promise.reject(e); - } - } - - - // Resolve immediately if nonce, chainId, price and signing options are provided - if (tx.nonce !== undefined && tx.chainId !== undefined && tx.gasPrice !== undefined && hasTxSigningOptions) { - return Promise.resolve(signed(tx)); - } - - // Otherwise, get the missing info from the Ethereum Node - return Promise.all([ - isNot(tx.chainId) ? _this._ethereumCall.getChainId() : tx.chainId, - isNot(tx.gasPrice) ? _this._ethereumCall.getGasPrice() : tx.gasPrice, - isNot(tx.nonce) ? _this._ethereumCall.getTransactionCount(_this.privateKeyToAccount(privateKey).address) : tx.nonce, - isNot(hasTxSigningOptions) ? _this._ethereumCall.getNetworkId() : 1 - ]).then(function(args) { - if (isNot(args[0]) || isNot(args[1]) || isNot(args[2]) || isNot(args[3])) { - throw new Error('One of the values "chainId", "networkId", "gasPrice", or "nonce" couldn\'t be fetched: ' + JSON.stringify(args)); - } - return signed(_.extend(tx, {chainId: args[0], gasPrice: args[1], nonce: args[2], networkId: args[3]})); - }); -}; - -function _validateTransactionForSigning(tx) { - if (tx.common && (tx.chain && tx.hardfork)) { - return new Error( - 'Please provide the ethereumjs-common object or the chain and hardfork property but not all together.' - ); - } - - if ((tx.chain && !tx.hardfork) || (tx.hardfork && !tx.chain)) { - return new Error( - 'When specifying chain and hardfork, both values must be defined. ' + - 'Received "chain": ' + tx.chain + ', "hardfork": ' + tx.hardfork - ); - } - - if (!tx.gas && !tx.gasLimit) { - return new Error('"gas" is missing'); - } - - if (tx.nonce < 0 || - tx.gas < 0 || - tx.gasPrice < 0 || - tx.chainId < 0) { - return new Error('Gas, gasPrice, nonce or chainId is lower than 0'); - } - - return; -} - - -/* jshint ignore:start */ -Accounts.prototype.recoverTransaction = function recoverTransaction(rawTx) { - var values = RLP.decode(rawTx); - var signature = Account.encodeSignature(values.slice(6, 9)); - var recovery = Bytes.toNumber(values[6]); - var extraData = recovery < 35 ? [] : [Bytes.fromNumber((recovery - 35) >> 1), '0x', '0x']; - var signingData = values.slice(0, 6).concat(extraData); - var signingDataHex = RLP.encode(signingData); - return Account.recover(Hash.keccak256(signingDataHex), signature); -}; -/* jshint ignore:end */ - -Accounts.prototype.hashMessage = function hashMessage(data) { - var messageHex = utils.isHexStrict(data) ? data : utils.utf8ToHex(data); - var messageBytes = utils.hexToBytes(messageHex); - var messageBuffer = Buffer.from(messageBytes); - var preamble = '\x19Ethereum Signed Message:\n' + messageBytes.length; - var preambleBuffer = Buffer.from(preamble); - var ethMessage = Buffer.concat([preambleBuffer, messageBuffer]); - return Hash.keccak256s(ethMessage); -}; - -Accounts.prototype.sign = function sign(data, privateKey) { - if (!privateKey.startsWith('0x')) { - privateKey = '0x' + privateKey; - } - - // 64 hex characters + hex-prefix - if (privateKey.length !== 66) { - throw new Error("Private key must be 32 bytes long"); - } - - var hash = this.hashMessage(data); - var signature = Account.sign(hash, privateKey); - var vrs = Account.decodeSignature(signature); - return { - message: data, - messageHash: hash, - v: vrs[0], - r: vrs[1], - s: vrs[2], - signature: signature - }; -}; - -Accounts.prototype.recover = function recover(message, signature, preFixed) { - var args = [].slice.apply(arguments); - - - if (_.isObject(message)) { - return this.recover(message.messageHash, Account.encodeSignature([message.v, message.r, message.s]), true); - } - - if (!preFixed) { - message = this.hashMessage(message); - } - - if (args.length >= 4) { - preFixed = args.slice(-1)[0]; - preFixed = _.isBoolean(preFixed) ? !!preFixed : false; - - return this.recover(message, Account.encodeSignature(args.slice(1, 4)), preFixed); // v, r, s - } - return Account.recover(message, signature); -}; - -// Taken from https://github.com/ethereumjs/ethereumjs-wallet -Accounts.prototype.decrypt = function(v3Keystore, password, nonStrict) { - /* jshint maxcomplexity: 10 */ - - if (!_.isString(password)) { - throw new Error('No password given.'); - } - - var json = (_.isObject(v3Keystore)) ? v3Keystore : JSON.parse(nonStrict ? v3Keystore.toLowerCase() : v3Keystore); - - if (json.version !== 3) { - throw new Error('Not a valid V3 wallet'); - } - - var derivedKey; - var kdfparams; - if (json.crypto.kdf === 'scrypt') { - kdfparams = json.crypto.kdfparams; - - // FIXME: support progress reporting callback - derivedKey = scrypt.syncScrypt(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen); - } else if (json.crypto.kdf === 'pbkdf2') { - kdfparams = json.crypto.kdfparams; - - if (kdfparams.prf !== 'hmac-sha256') { - throw new Error('Unsupported parameters to PBKDF2'); - } - - derivedKey = cryp.pbkdf2Sync(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.c, kdfparams.dklen, 'sha256'); - } else { - throw new Error('Unsupported key derivation scheme'); - } - - var ciphertext = Buffer.from(json.crypto.ciphertext, 'hex'); - - var mac = utils.sha3(Buffer.from([...derivedKey.slice(16, 32), ...ciphertext])).replace('0x', ''); - if (mac !== json.crypto.mac) { - throw new Error('Key derivation failed - possibly wrong password'); - } - - var decipher = cryp.createDecipheriv(json.crypto.cipher, derivedKey.slice(0, 16), Buffer.from(json.crypto.cipherparams.iv, 'hex')); - var seed = '0x' + Buffer.from([...decipher.update(ciphertext), ...decipher.final()]).toString('hex'); - - return this.privateKeyToAccount(seed, true); -}; - -Accounts.prototype.encrypt = function(privateKey, password, options) { - /* jshint maxcomplexity: 20 */ - var account = this.privateKeyToAccount(privateKey, true); - - options = options || {}; - var salt = options.salt || cryp.randomBytes(32); - var iv = options.iv || cryp.randomBytes(16); - - var derivedKey; - var kdf = options.kdf || 'scrypt'; - var kdfparams = { - dklen: options.dklen || 32, - salt: salt.toString('hex') - }; - - if (kdf === 'pbkdf2') { - kdfparams.c = options.c || 262144; - kdfparams.prf = 'hmac-sha256'; - derivedKey = cryp.pbkdf2Sync(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.c, kdfparams.dklen, 'sha256'); - } else if (kdf === 'scrypt') { - // FIXME: support progress reporting callback - kdfparams.n = options.n || 8192; // 2048 4096 8192 16384 - kdfparams.r = options.r || 8; - kdfparams.p = options.p || 1; - derivedKey = scrypt.syncScrypt(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen); - } else { - throw new Error('Unsupported kdf'); - } - - var cipher = cryp.createCipheriv(options.cipher || 'aes-128-ctr', derivedKey.slice(0, 16), iv); - if (!cipher) { - throw new Error('Unsupported cipher'); - } - - - var ciphertext = Buffer.from([ - ...cipher.update(Buffer.from(account.privateKey.replace('0x', ''), 'hex')), - ...cipher.final()] - ); - - var mac = utils.sha3(Buffer.from([...derivedKey.slice(16, 32), ...ciphertext])).replace('0x', ''); - - return { - version: 3, - id: uuid.v4({random: options.uuid || cryp.randomBytes(16)}), - address: account.address.toLowerCase().replace('0x', ''), - crypto: { - ciphertext: ciphertext.toString('hex'), - cipherparams: { - iv: iv.toString('hex') - }, - cipher: options.cipher || 'aes-128-ctr', - kdf: kdf, - kdfparams: kdfparams, - mac: mac.toString('hex') - } - }; -}; - - -// Note: this is trying to follow closely the specs on -// http://web3js.readthedocs.io/en/1.0/web3-eth-accounts.html - -function Wallet(accounts) { - this._accounts = accounts; - this.length = 0; - this.defaultKeyName = 'web3js_wallet'; -} - -Wallet.prototype._findSafeIndex = function(pointer) { - pointer = pointer || 0; - if (_.has(this, pointer)) { - return this._findSafeIndex(pointer + 1); - } else { - return pointer; - } -}; - -Wallet.prototype._currentIndexes = function() { - var keys = Object.keys(this); - var indexes = keys - .map(function(key) { - return parseInt(key); - }) - .filter(function(n) { - return (n < 9e20); - }); - - return indexes; -}; - -Wallet.prototype.create = function(numberOfAccounts, entropy) { - for (var i = 0; i < numberOfAccounts; ++i) { - this.add(this._accounts.create(entropy).privateKey); - } - return this; -}; - -Wallet.prototype.add = function(account) { - - if (_.isString(account)) { - account = this._accounts.privateKeyToAccount(account); - } - if (!this[account.address]) { - account = this._accounts.privateKeyToAccount(account.privateKey); - account.index = this._findSafeIndex(); - - this[account.index] = account; - this[account.address] = account; - this[account.address.toLowerCase()] = account; - - this.length++; - - return account; - } else { - return this[account.address]; - } -}; - -Wallet.prototype.remove = function(addressOrIndex) { - var account = this[addressOrIndex]; - - if (account && account.address) { - // address - this[account.address].privateKey = null; - delete this[account.address]; - // address lowercase - this[account.address.toLowerCase()].privateKey = null; - delete this[account.address.toLowerCase()]; - // index - this[account.index].privateKey = null; - delete this[account.index]; - - this.length--; - - return true; - } else { - return false; - } -}; - -Wallet.prototype.clear = function() { - var _this = this; - var indexes = this._currentIndexes(); - - indexes.forEach(function(index) { - _this.remove(index); - }); - - return this; -}; - -Wallet.prototype.encrypt = function(password, options) { - var _this = this; - var indexes = this._currentIndexes(); - - var accounts = indexes.map(function(index) { - return _this[index].encrypt(password, options); - }); - - return accounts; -}; - - -Wallet.prototype.decrypt = function(encryptedWallet, password) { - var _this = this; - - encryptedWallet.forEach(function(keystore) { - var account = _this._accounts.decrypt(keystore, password); - - if (account) { - _this.add(account); - } else { - throw new Error('Couldn\'t decrypt accounts. Password wrong?'); - } - }); - - return this; -}; - -Wallet.prototype.save = function(password, keyName) { - localStorage.setItem(keyName || this.defaultKeyName, JSON.stringify(this.encrypt(password))); - - return true; -}; - -Wallet.prototype.load = function(password, keyName) { - var keystore = localStorage.getItem(keyName || this.defaultKeyName); - - if (keystore) { - try { - keystore = JSON.parse(keystore); - } catch (e) { - - } - } - - return this.decrypt(keystore || [], password); -}; - -if (!storageAvailable('localStorage')) { - delete Wallet.prototype.save; - delete Wallet.prototype.load; -} - -/** - * Checks whether a storage type is available or not - * For more info on how this works, please refer to MDN documentation - * https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#Feature-detecting_localStorage - * - * @method storageAvailable - * @param {String} type the type of storage ('localStorage', 'sessionStorage') - * @returns {Boolean} a boolean indicating whether the specified storage is available or not - */ -function storageAvailable(type) { - var storage; - try { - storage = window[type]; - var x = '__storage_test__'; - storage.setItem(x, x); - storage.removeItem(x); - return true; - } catch (e) { - return e && ( - // everything except Firefox - e.code === 22 || - // Firefox - e.code === 1014 || - // test name field too, because code might not be present - // everything except Firefox - e.name === 'QuotaExceededError' || - // Firefox - e.name === 'NS_ERROR_DOM_QUOTA_REACHED') && - // acknowledge QuotaExceededError only if there's something already stored - (storage && storage.length !== 0); - } -} - -module.exports = Accounts; diff --git a/packages/web3-eth-accounts/src/index.ts b/packages/web3-eth-accounts/src/index.ts new file mode 100644 index 00000000000..3d128c65de4 --- /dev/null +++ b/packages/web3-eth-accounts/src/index.ts @@ -0,0 +1,45 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * The web3.eth.accounts contains functions to generate Ethereum accounts and sign transactions and data. + * + * **_NOTE:_** This package has NOT been audited and might potentially be unsafe. Take precautions to clear memory properly, store the private keys safely, and test transaction receiving and sending functionality properly before using in production! + * + * + * To use this package standalone and use its methods use: + * ```ts + * import { create, decrypt } from 'web3-eth-accounts'; // .... + * ``` + * + * To use this package within the web3 object use: + * + * ```ts + * import Web3 from 'web3'; + * + * const web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546'); + * // now you have access to the accounts class + * web3.eth.accounts.create(); + * ``` + */ + +export * from './wallet.js'; +export * from './account.js'; +export * from './types.js'; +export * from './schemas.js'; +export * from './common/index.js'; +export * from './tx/index.js'; diff --git a/packages/web3-eth-accounts/src/schemas.ts b/packages/web3-eth-accounts/src/schemas.ts new file mode 100644 index 00000000000..3c88da71601 --- /dev/null +++ b/packages/web3-eth-accounts/src/schemas.ts @@ -0,0 +1,39 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const keyStoreSchema = { + type: 'object', + required: ['crypto', 'id', 'version', 'address'], + properties: { + crypto: { + type: 'object', + required: ['cipher', 'ciphertext', 'cipherparams', 'kdf', 'kdfparams', 'mac'], + properties: { + cipher: { type: 'string' }, + ciphertext: { type: 'string' }, + cipherparams: { type: 'object' }, + kdf: { type: 'string' }, + kdfparams: { type: 'object' }, + salt: { type: 'string' }, + mac: { type: 'string' }, + }, + }, + id: { type: 'string' }, + version: { type: 'number' }, + address: { type: 'string' }, + }, +}; diff --git a/packages/web3-eth-accounts/src/tx/address.ts b/packages/web3-eth-accounts/src/tx/address.ts new file mode 100644 index 00000000000..7d6f1ace322 --- /dev/null +++ b/packages/web3-eth-accounts/src/tx/address.ts @@ -0,0 +1,85 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { keccak256 } from 'ethereum-cryptography/keccak.js'; +import { bytesToHex, uint8ArrayEquals } from 'web3-utils'; +import { secp256k1 } from './constants.js'; +import { assertIsUint8Array, zeros } from '../common/utils.js'; + +export class Address { + public readonly buf: Uint8Array; + + public constructor(buf: Uint8Array) { + if (buf.length !== 20) { + throw new Error('Invalid address length'); + } + this.buf = buf; + } + + /** + * Returns the zero address. + */ + public static zero(): Address { + return new Address(zeros(20)); + } + + /** + * Is address equal to another. + */ + public equals(address: Address): boolean { + return uint8ArrayEquals(this.buf, address.buf); + } + + /** + * Is address zero. + */ + public isZero(): boolean { + return this.equals(Address.zero()); + } + + /** + * Returns hex encoding of address. + */ + public toString(): string { + return bytesToHex(this.buf); + } + + /** + * Returns Uint8Array representation of address. + */ + public toArray(): Uint8Array { + return this.buf; + } + + /** + * Returns the ethereum address of a given public key. + * Accepts "Ethereum public keys" and SEC1 encoded keys. + * @param pubKey The two points of an uncompressed key, unless sanitize is enabled + * @param sanitize Accept public keys in other formats + */ + public static publicToAddress(_pubKey: Uint8Array, sanitize = false): Uint8Array { + let pubKey = _pubKey; + assertIsUint8Array(pubKey); + if (sanitize && pubKey.length !== 64) { + pubKey = secp256k1.ProjectivePoint.fromHex(pubKey).toRawBytes(false).slice(1); + } + if (pubKey.length !== 64) { + throw new Error('Expected pubKey to be of length 64'); + } + // Only take the lower 160bits of the hash + return keccak256(pubKey).slice(-20); + } +} diff --git a/packages/web3-eth-accounts/src/tx/baseTransaction.ts b/packages/web3-eth-accounts/src/tx/baseTransaction.ts new file mode 100644 index 00000000000..f0cace3af4c --- /dev/null +++ b/packages/web3-eth-accounts/src/tx/baseTransaction.ts @@ -0,0 +1,581 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Numbers } from 'web3-types'; +import { bytesToHex } from 'web3-utils'; +import { MAX_INTEGER, MAX_UINT64, SECP256K1_ORDER_DIV_2, secp256k1 } from './constants.js'; +import { toUint8Array, uint8ArrayToBigInt, unpadUint8Array } from '../common/utils.js'; +import { Common } from '../common/common.js'; +import { Hardfork, Chain } from '../common/enums.js'; +import type { + AccessListEIP2930TxData, + AccessListEIP2930ValuesArray, + FeeMarketEIP1559TxData, + FeeMarketEIP1559ValuesArray, + JsonTx, + TxData, + TxOptions, + TxValuesArray, +} from './types.js'; +import { Capability, ECDSASignature } from './types.js'; +import { Address } from './address.js'; +import { checkMaxInitCodeSize } from './utils.js'; + +interface TransactionCache { + hash: Uint8Array | undefined; + dataFee?: { + value: bigint; + hardfork: string | Hardfork; + }; +} + +/** + * This base class will likely be subject to further + * refactoring along the introduction of additional tx types + * on the Ethereum network. + * + * It is therefore not recommended to use directly. + */ +export abstract class BaseTransaction { + private readonly _type: number; + + public readonly nonce: bigint; + public readonly gasLimit: bigint; + public readonly to?: Address; + public readonly value: bigint; + public readonly data: Uint8Array; + + public readonly v?: bigint; + public readonly r?: bigint; + public readonly s?: bigint; + + public readonly common!: Common; + + protected cache: TransactionCache = { + hash: undefined, + dataFee: undefined, + }; + + protected readonly txOptions: TxOptions; + + /** + * List of tx type defining EIPs, + * e.g. 1559 (fee market) and 2930 (access lists) + * for FeeMarketEIP1559Transaction objects + */ + protected activeCapabilities: number[] = []; + + /** + * The default chain the tx falls back to if no Common + * is provided and if the chain can't be derived from + * a passed in chainId (only EIP-2718 typed txs) or + * EIP-155 signature (legacy txs). + * + * @hidden + */ + protected DEFAULT_CHAIN = Chain.Mainnet; + + /** + * The default HF if the tx type is active on that HF + * or the first greater HF where the tx is active. + * + * @hidden + */ + protected DEFAULT_HARDFORK: string | Hardfork = Hardfork.Merge; + + public constructor( + txData: TxData | AccessListEIP2930TxData | FeeMarketEIP1559TxData, + opts: TxOptions, + ) { + const { nonce, gasLimit, to, value, data, v, r, s, type } = txData; + this._type = Number(uint8ArrayToBigInt(toUint8Array(type))); + + this.txOptions = opts; + + const toB = toUint8Array(to === '' ? '0x' : to); + const vB = toUint8Array(v === '' ? '0x' : v); + const rB = toUint8Array(r === '' ? '0x' : r); + const sB = toUint8Array(s === '' ? '0x' : s); + + this.nonce = uint8ArrayToBigInt(toUint8Array(nonce === '' ? '0x' : nonce)); + this.gasLimit = uint8ArrayToBigInt(toUint8Array(gasLimit === '' ? '0x' : gasLimit)); + this.to = toB.length > 0 ? new Address(toB) : undefined; + this.value = uint8ArrayToBigInt(toUint8Array(value === '' ? '0x' : value)); + this.data = toUint8Array(data === '' ? '0x' : data); + + this.v = vB.length > 0 ? uint8ArrayToBigInt(vB) : undefined; + this.r = rB.length > 0 ? uint8ArrayToBigInt(rB) : undefined; + this.s = sB.length > 0 ? uint8ArrayToBigInt(sB) : undefined; + + this._validateCannotExceedMaxInteger({ value: this.value, r: this.r, s: this.s }); + + // geth limits gasLimit to 2^64-1 + this._validateCannotExceedMaxInteger({ gasLimit: this.gasLimit }, 64); + + // EIP-2681 limits nonce to 2^64-1 (cannot equal 2^64-1) + this._validateCannotExceedMaxInteger({ nonce: this.nonce }, 64, true); + // eslint-disable-next-line no-null/no-null + const createContract = this.to === undefined || this.to === null; + const allowUnlimitedInitCodeSize = opts.allowUnlimitedInitCodeSize ?? false; + const common = opts.common ?? this._getCommon(); + if (createContract && common.isActivatedEIP(3860) && !allowUnlimitedInitCodeSize) { + checkMaxInitCodeSize(common, this.data.length); + } + } + + /** + * Returns the transaction type. + * + * Note: legacy txs will return tx type `0`. + */ + public get type() { + return this._type; + } + + /** + * Checks if a tx type defining capability is active + * on a tx, for example the EIP-1559 fee market mechanism + * or the EIP-2930 access list feature. + * + * Note that this is different from the tx type itself, + * so EIP-2930 access lists can very well be active + * on an EIP-1559 tx for example. + * + * This method can be useful for feature checks if the + * tx type is unknown (e.g. when instantiated with + * the tx factory). + * + * See `Capabilites` in the `types` module for a reference + * on all supported capabilities. + */ + public supports(capability: Capability) { + return this.activeCapabilities.includes(capability); + } + + /** + * Checks if the transaction has the minimum amount of gas required + * (DataFee + TxFee + Creation Fee). + */ + public validate(): boolean; + public validate(stringError: false): boolean; + public validate(stringError: true): string[]; + public validate(stringError = false): boolean | string[] { + const errors = []; + + if (this.getBaseFee() > this.gasLimit) { + errors.push( + `gasLimit is too low. given ${this.gasLimit}, need at least ${this.getBaseFee()}`, + ); + } + + if (this.isSigned() && !this.verifySignature()) { + errors.push('Invalid Signature'); + } + + return stringError ? errors : errors.length === 0; + } + + protected _validateYParity() { + const { v } = this; + if (v !== undefined && v !== BigInt(0) && v !== BigInt(1)) { + const msg = this._errorMsg('The y-parity of the transaction should either be 0 or 1'); + throw new Error(msg); + } + } + + /** + * EIP-2: All transaction signatures whose s-value is greater than secp256k1n/2are considered invalid. + * Reasoning: https://ethereum.stackexchange.com/a/55728 + */ + protected _validateHighS() { + const { s } = this; + if (this.common.gteHardfork('homestead') && s !== undefined && s > SECP256K1_ORDER_DIV_2) { + const msg = this._errorMsg( + 'Invalid Signature: s-values greater than secp256k1n/2 are considered invalid', + ); + throw new Error(msg); + } + } + + /** + * The minimum amount of gas the tx must have (DataFee + TxFee + Creation Fee) + */ + public getBaseFee(): bigint { + const txFee = this.common.param('gasPrices', 'tx'); + let fee = this.getDataFee(); + if (txFee) fee += txFee; + if (this.common.gteHardfork('homestead') && this.toCreationAddress()) { + const txCreationFee = this.common.param('gasPrices', 'txCreation'); + if (txCreationFee) fee += txCreationFee; + } + return fee; + } + + /** + * The amount of gas paid for the data in this tx + */ + public getDataFee(): bigint { + const txDataZero = this.common.param('gasPrices', 'txDataZero'); + const txDataNonZero = this.common.param('gasPrices', 'txDataNonZero'); + + let cost = BigInt(0); + // eslint-disable-next-line @typescript-eslint/prefer-for-of + for (let i = 0; i < this.data.length; i += 1) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions, no-unused-expressions + this.data[i] === 0 ? (cost += txDataZero) : (cost += txDataNonZero); + } + // eslint-disable-next-line no-null/no-null + if ((this.to === undefined || this.to === null) && this.common.isActivatedEIP(3860)) { + const dataLength = BigInt(Math.ceil(this.data.length / 32)); + const initCodeCost = this.common.param('gasPrices', 'initCodeWordCost') * dataLength; + cost += initCodeCost; + } + + return cost; + } + + /** + * The up front amount that an account must have for this transaction to be valid + */ + public abstract getUpfrontCost(): bigint; + + /** + * If the tx's `to` is to the creation address + */ + public toCreationAddress(): boolean { + return this.to === undefined || this.to.buf.length === 0; + } + + /** + * Returns a Uint8Array Array of the raw Uint8Arrays of this transaction, in order. + * + * Use {@link BaseTransaction.serialize} to add a transaction to a block + * with {@link Block.fromValuesArray}. + * + * For an unsigned tx this method uses the empty Uint8Array values for the + * signature parameters `v`, `r` and `s` for encoding. For an EIP-155 compliant + * representation for external signing use {@link BaseTransaction.getMessageToSign}. + */ + public abstract raw(): + | TxValuesArray + | AccessListEIP2930ValuesArray + | FeeMarketEIP1559ValuesArray; + + /** + * Returns the encoding of the transaction. + */ + public abstract serialize(): Uint8Array; + + // Returns the unsigned tx (hashed or raw), which is used to sign the transaction. + // + // Note: do not use code docs here since VS Studio is then not able to detect the + // comments from the inherited methods + public abstract getMessageToSign(hashMessage: false): Uint8Array | Uint8Array[]; + public abstract getMessageToSign(hashMessage?: true): Uint8Array; + + public abstract hash(): Uint8Array; + + public abstract getMessageToVerifySignature(): Uint8Array; + + public isSigned(): boolean { + const { v, r, s } = this; + if (v === undefined || r === undefined || s === undefined) { + return false; + } + return true; + } + + /** + * Determines if the signature is valid + */ + public verifySignature(): boolean { + try { + // Main signature verification is done in `getSenderPublicKey()` + const publicKey = this.getSenderPublicKey(); + return unpadUint8Array(publicKey).length !== 0; + } catch (e: any) { + return false; + } + } + + /** + * Returns the sender's address + */ + public getSenderAddress(): Address { + return new Address(Address.publicToAddress(this.getSenderPublicKey())); + } + + /** + * Returns the public key of the sender + */ + public abstract getSenderPublicKey(): Uint8Array; + + /** + * Signs a transaction. + * + * Note that the signed tx is returned as a new object, + * use as follows: + * ```javascript + * const signedTx = tx.sign(privateKey) + * ``` + */ + public sign(privateKey: Uint8Array): TransactionObject { + if (privateKey.length !== 32) { + const msg = this._errorMsg('Private key must be 32 bytes in length.'); + throw new Error(msg); + } + + // Hack for the constellation that we have got a legacy tx after spuriousDragon with a non-EIP155 conforming signature + // and want to recreate a signature (where EIP155 should be applied) + // Leaving this hack lets the legacy.spec.ts -> sign(), verifySignature() test fail + // 2021-06-23 + let hackApplied = false; + if ( + this.type === 0 && + this.common.gteHardfork('spuriousDragon') && + !this.supports(Capability.EIP155ReplayProtection) + ) { + this.activeCapabilities.push(Capability.EIP155ReplayProtection); + hackApplied = true; + } + + const msgHash = this.getMessageToSign(true); + const { v, r, s } = this._ecsign(msgHash, privateKey); + const tx = this._processSignature(v, r, s); + + // Hack part 2 + if (hackApplied) { + const index = this.activeCapabilities.indexOf(Capability.EIP155ReplayProtection); + if (index > -1) { + this.activeCapabilities.splice(index, 1); + } + } + + return tx; + } + + /** + * Returns an object with the JSON representation of the transaction + */ + public abstract toJSON(): JsonTx; + + // Accept the v,r,s values from the `sign` method, and convert this into a TransactionObject + protected abstract _processSignature( + v: bigint, + r: Uint8Array, + s: Uint8Array, + ): TransactionObject; + + /** + * Does chain ID checks on common and returns a common + * to be used on instantiation + * @hidden + * + * @param common - {@link Common} instance from tx options + * @param chainId - Chain ID from tx options (typed txs) or signature (legacy tx) + */ + protected _getCommon(common?: Common, chainId?: Numbers) { + // Chain ID provided + if (chainId !== undefined) { + const chainIdBigInt = uint8ArrayToBigInt(toUint8Array(chainId)); + if (common) { + if (common.chainId() !== chainIdBigInt) { + const msg = this._errorMsg( + 'The chain ID does not match the chain ID of Common', + ); + throw new Error(msg); + } + // Common provided, chain ID does match + // -> Return provided Common + return common.copy(); + } + if (Common.isSupportedChainId(chainIdBigInt)) { + // No Common, chain ID supported by Common + // -> Instantiate Common with chain ID + return new Common({ chain: chainIdBigInt, hardfork: this.DEFAULT_HARDFORK }); + } + // No Common, chain ID not supported by Common + // -> Instantiate custom Common derived from DEFAULT_CHAIN + return Common.custom( + { + name: 'custom-chain', + networkId: chainIdBigInt, + chainId: chainIdBigInt, + }, + { baseChain: this.DEFAULT_CHAIN, hardfork: this.DEFAULT_HARDFORK }, + ); + } + // No chain ID provided + // -> return Common provided or create new default Common + return ( + common?.copy() ?? + new Common({ chain: this.DEFAULT_CHAIN, hardfork: this.DEFAULT_HARDFORK }) + ); + } + + /** + * Validates that an object with BigInt values cannot exceed the specified bit limit. + * @param values Object containing string keys and BigInt values + * @param bits Number of bits to check (64 or 256) + * @param cannotEqual Pass true if the number also cannot equal one less the maximum value + */ + protected _validateCannotExceedMaxInteger( + values: { [key: string]: bigint | undefined }, + bits = 256, + cannotEqual = false, + ) { + for (const [key, value] of Object.entries(values)) { + switch (bits) { + case 64: + if (cannotEqual) { + if (value !== undefined && value >= MAX_UINT64) { + const msg = this._errorMsg( + `${key} cannot equal or exceed MAX_UINT64 (2^64-1), given ${value}`, + ); + throw new Error(msg); + } + } else if (value !== undefined && value > MAX_UINT64) { + const msg = this._errorMsg( + `${key} cannot exceed MAX_UINT64 (2^64-1), given ${value}`, + ); + throw new Error(msg); + } + break; + case 256: + if (cannotEqual) { + if (value !== undefined && value >= MAX_INTEGER) { + const msg = this._errorMsg( + `${key} cannot equal or exceed MAX_INTEGER (2^256-1), given ${value}`, + ); + throw new Error(msg); + } + } else if (value !== undefined && value > MAX_INTEGER) { + const msg = this._errorMsg( + `${key} cannot exceed MAX_INTEGER (2^256-1), given ${value}`, + ); + throw new Error(msg); + } + break; + default: { + const msg = this._errorMsg('unimplemented bits value'); + throw new Error(msg); + } + } + } + } + + protected static _validateNotArray(values: { [key: string]: any }) { + const txDataKeys = [ + 'nonce', + 'gasPrice', + 'gasLimit', + 'to', + 'value', + 'data', + 'v', + 'r', + 's', + 'type', + 'baseFee', + 'maxFeePerGas', + 'chainId', + ]; + for (const [key, value] of Object.entries(values)) { + if (txDataKeys.includes(key)) { + if (Array.isArray(value)) { + throw new Error(`${key} cannot be an array`); + } + } + } + } + + /** + * Return a compact error string representation of the object + */ + public abstract errorStr(): string; + + /** + * Internal helper function to create an annotated error message + * + * @param msg Base error message + * @hidden + */ + protected abstract _errorMsg(msg: string): string; + + /** + * Returns the shared error postfix part for _error() method + * tx type implementations. + */ + protected _getSharedErrorPostfix() { + let hash = ''; + try { + hash = this.isSigned() ? bytesToHex(this.hash()) : 'not available (unsigned)'; + } catch (e: any) { + hash = 'error'; + } + let isSigned = ''; + try { + isSigned = this.isSigned().toString(); + } catch (e: any) { + hash = 'error'; + } + let hf = ''; + try { + hf = this.common.hardfork(); + } catch (e: any) { + hf = 'error'; + } + + let postfix = `tx type=${this.type} hash=${hash} nonce=${this.nonce} value=${this.value} `; + postfix += `signed=${isSigned} hf=${hf}`; + + return postfix; + } + // eslint-disable-next-line class-methods-use-this + private _ecsign(msgHash: Uint8Array, privateKey: Uint8Array, chainId?: bigint): ECDSASignature { + const signature = secp256k1.sign(msgHash, privateKey); + const signatureBytes = signature.toCompactRawBytes(); + + const r = signatureBytes.subarray(0, 32); + const s = signatureBytes.subarray(32, 64); + + const v = + chainId === undefined + ? BigInt(signature.recovery! + 27) + : BigInt(signature.recovery! + 35) + BigInt(chainId) * BigInt(2); + + return { r, s, v }; + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + public static fromSerializedTx( + // @ts-expect-error unused variable + serialized: Uint8Array, + // @ts-expect-error unused variable + opts: TxOptions = {}, + // eslint-disable-next-line @typescript-eslint/no-empty-function + ): any {} + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + public static fromTxData( + // @ts-expect-error unused variable + txData: any, + // @ts-expect-error unused variable + opts: TxOptions = {}, + // eslint-disable-next-line @typescript-eslint/no-empty-function + ): any {} +} diff --git a/packages/web3-eth-accounts/src/tx/constants.ts b/packages/web3-eth-accounts/src/tx/constants.ts new file mode 100644 index 00000000000..3ef47cd827c --- /dev/null +++ b/packages/web3-eth-accounts/src/tx/constants.ts @@ -0,0 +1,34 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// eslint-disable-next-line import/extensions +import * as ethereumCryptography from 'ethereum-cryptography/secp256k1.js'; + +export const secp256k1 = ethereumCryptography.secp256k1 ?? ethereumCryptography; +/** + * 2^64-1 + */ +export const MAX_UINT64 = BigInt('0xffffffffffffffff'); + +/** + * The max integer that the evm can handle (2^256-1) + */ +export const MAX_INTEGER = BigInt( + '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', +); + +export const SECP256K1_ORDER = secp256k1.CURVE.n; +export const SECP256K1_ORDER_DIV_2 = SECP256K1_ORDER / BigInt(2); diff --git a/packages/web3-eth-accounts/src/tx/eip1559Transaction.ts b/packages/web3-eth-accounts/src/tx/eip1559Transaction.ts new file mode 100644 index 00000000000..eafb889220a --- /dev/null +++ b/packages/web3-eth-accounts/src/tx/eip1559Transaction.ts @@ -0,0 +1,450 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { keccak256 } from 'ethereum-cryptography/keccak.js'; +import { validateNoLeadingZeroes } from 'web3-validator'; +import { RLP } from '@ethereumjs/rlp'; +import { bytesToHex, hexToBytes, uint8ArrayConcat, uint8ArrayEquals } from 'web3-utils'; +import { MAX_INTEGER } from './constants.js'; +import { BaseTransaction } from './baseTransaction.js'; +import { + getAccessListData, + getAccessListJSON, + getDataFeeEIP2930, + verifyAccessList, +} from './utils.js'; +import { + bigIntToHex, + toUint8Array, + ecrecover, + uint8ArrayToBigInt, + bigIntToUnpaddedUint8Array, +} from '../common/utils.js'; +import type { + AccessList, + AccessListUint8Array, + FeeMarketEIP1559TxData, + FeeMarketEIP1559ValuesArray, + JsonTx, + TxOptions, +} from './types.js'; +import type { Common } from '../common/common.js'; + +const TRANSACTION_TYPE = 2; +const TRANSACTION_TYPE_UINT8ARRAY = hexToBytes(TRANSACTION_TYPE.toString(16).padStart(2, '0')); + +/** + * Typed transaction with a new gas fee market mechanism + * + * - TransactionType: 2 + * - EIP: [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) + */ +// eslint-disable-next-line no-use-before-define +export class FeeMarketEIP1559Transaction extends BaseTransaction { + public readonly chainId: bigint; + public readonly accessList: AccessListUint8Array; + public readonly AccessListJSON: AccessList; + public readonly maxPriorityFeePerGas: bigint; + public readonly maxFeePerGas: bigint; + + public readonly common: Common; + + /** + * The default HF if the tx type is active on that HF + * or the first greater HF where the tx is active. + * + * @hidden + */ + protected DEFAULT_HARDFORK = 'london'; + + /** + * Instantiate a transaction from a data dictionary. + * + * Format: { chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, + * accessList, v, r, s } + * + * Notes: + * - `chainId` will be set automatically if not provided + * - All parameters are optional and have some basic default values + */ + public static fromTxData(txData: FeeMarketEIP1559TxData, opts: TxOptions = {}) { + return new FeeMarketEIP1559Transaction(txData, opts); + } + + /** + * Instantiate a transaction from the serialized tx. + * + * Format: `0x02 || rlp([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, + * accessList, signatureYParity, signatureR, signatureS])` + */ + public static fromSerializedTx(serialized: Uint8Array, opts: TxOptions = {}) { + if (!uint8ArrayEquals(serialized.subarray(0, 1), TRANSACTION_TYPE_UINT8ARRAY)) { + throw new Error( + `Invalid serialized tx input: not an EIP-1559 transaction (wrong tx type, expected: ${TRANSACTION_TYPE}, received: ${bytesToHex( + serialized.subarray(0, 1), + )}`, + ); + } + const values = RLP.decode(serialized.subarray(1)); + + if (!Array.isArray(values)) { + throw new Error('Invalid serialized tx input: must be array'); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + return FeeMarketEIP1559Transaction.fromValuesArray(values as any, opts); + } + + /** + * Create a transaction from a values array. + * + * Format: `[chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, + * accessList, signatureYParity, signatureR, signatureS]` + */ + public static fromValuesArray(values: FeeMarketEIP1559ValuesArray, opts: TxOptions = {}) { + if (values.length !== 9 && values.length !== 12) { + throw new Error( + 'Invalid EIP-1559 transaction. Only expecting 9 values (for unsigned tx) or 12 values (for signed tx).', + ); + } + + const [ + chainId, + nonce, + maxPriorityFeePerGas, + maxFeePerGas, + gasLimit, + to, + value, + data, + accessList, + v, + r, + s, + ] = values; + + this._validateNotArray({ chainId, v }); + validateNoLeadingZeroes({ + nonce, + maxPriorityFeePerGas, + maxFeePerGas, + gasLimit, + value, + v, + r, + s, + }); + + return new FeeMarketEIP1559Transaction( + { + chainId: uint8ArrayToBigInt(chainId), + nonce, + maxPriorityFeePerGas, + maxFeePerGas, + gasLimit, + to, + value, + data, + accessList: accessList ?? [], + v: v !== undefined ? uint8ArrayToBigInt(v) : undefined, // EIP2930 supports v's with value 0 (empty Uint8Array) + r, + s, + }, + opts, + ); + } + + /** + * This constructor takes the values, validates them, assigns them and freezes the object. + * + * It is not recommended to use this constructor directly. Instead use + * the static factory methods to assist in creating a Transaction object from + * varying data types. + */ + public constructor(txData: FeeMarketEIP1559TxData, opts: TxOptions = {}) { + super({ ...txData, type: TRANSACTION_TYPE }, opts); + const { chainId, accessList, maxFeePerGas, maxPriorityFeePerGas } = txData; + + this.common = this._getCommon(opts.common, chainId); + this.chainId = this.common.chainId(); + + if (!this.common.isActivatedEIP(1559)) { + throw new Error('EIP-1559 not enabled on Common'); + } + this.activeCapabilities = this.activeCapabilities.concat([1559, 2718, 2930]); + + // Populate the access list fields + const accessListData = getAccessListData(accessList ?? []); + this.accessList = accessListData.accessList; + this.AccessListJSON = accessListData.AccessListJSON; + // Verify the access list format. + verifyAccessList(this.accessList); + + this.maxFeePerGas = uint8ArrayToBigInt( + toUint8Array(maxFeePerGas === '' ? '0x' : maxFeePerGas), + ); + this.maxPriorityFeePerGas = uint8ArrayToBigInt( + toUint8Array(maxPriorityFeePerGas === '' ? '0x' : maxPriorityFeePerGas), + ); + + this._validateCannotExceedMaxInteger({ + maxFeePerGas: this.maxFeePerGas, + maxPriorityFeePerGas: this.maxPriorityFeePerGas, + }); + + BaseTransaction._validateNotArray(txData); + + if (this.gasLimit * this.maxFeePerGas > MAX_INTEGER) { + const msg = this._errorMsg( + 'gasLimit * maxFeePerGas cannot exceed MAX_INTEGER (2^256-1)', + ); + throw new Error(msg); + } + + if (this.maxFeePerGas < this.maxPriorityFeePerGas) { + const msg = this._errorMsg( + 'maxFeePerGas cannot be less than maxPriorityFeePerGas (The total must be the larger of the two)', + ); + throw new Error(msg); + } + + this._validateYParity(); + this._validateHighS(); + + const freeze = opts?.freeze ?? true; + if (freeze) { + Object.freeze(this); + } + } + + /** + * The amount of gas paid for the data in this tx + */ + public getDataFee(): bigint { + if (this.cache.dataFee && this.cache.dataFee.hardfork === this.common.hardfork()) { + return this.cache.dataFee.value; + } + + let cost = super.getDataFee(); + cost += BigInt(getDataFeeEIP2930(this.accessList, this.common)); + + if (Object.isFrozen(this)) { + this.cache.dataFee = { + value: cost, + hardfork: this.common.hardfork(), + }; + } + + return cost; + } + + /** + * The up front amount that an account must have for this transaction to be valid + * @param baseFee The base fee of the block (will be set to 0 if not provided) + */ + public getUpfrontCost(baseFee = BigInt(0)): bigint { + const prio = this.maxPriorityFeePerGas; + const maxBase = this.maxFeePerGas - baseFee; + const inclusionFeePerGas = prio < maxBase ? prio : maxBase; + const gasPrice = inclusionFeePerGas + baseFee; + return this.gasLimit * gasPrice + this.value; + } + + /** + * Returns a Uint8Array Array of the raw Uint8Arrays of the EIP-1559 transaction, in order. + * + * Format: `[chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, + * accessList, signatureYParity, signatureR, signatureS]` + * + * Use {@link FeeMarketEIP1559Transaction.serialize} to add a transaction to a block + * with {@link Block.fromValuesArray}. + * + * For an unsigned tx this method uses the empty Uint8Array values for the + * signature parameters `v`, `r` and `s` for encoding. For an EIP-155 compliant + * representation for external signing use {@link FeeMarketEIP1559Transaction.getMessageToSign}. + */ + public raw(): FeeMarketEIP1559ValuesArray { + return [ + bigIntToUnpaddedUint8Array(this.chainId), + bigIntToUnpaddedUint8Array(this.nonce), + bigIntToUnpaddedUint8Array(this.maxPriorityFeePerGas), + bigIntToUnpaddedUint8Array(this.maxFeePerGas), + bigIntToUnpaddedUint8Array(this.gasLimit), + this.to !== undefined ? this.to.buf : Uint8Array.from([]), + bigIntToUnpaddedUint8Array(this.value), + this.data, + this.accessList, + this.v !== undefined ? bigIntToUnpaddedUint8Array(this.v) : Uint8Array.from([]), + this.r !== undefined ? bigIntToUnpaddedUint8Array(this.r) : Uint8Array.from([]), + this.s !== undefined ? bigIntToUnpaddedUint8Array(this.s) : Uint8Array.from([]), + ]; + } + + /** + * Returns the serialized encoding of the EIP-1559 transaction. + * + * Format: `0x02 || rlp([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, + * accessList, signatureYParity, signatureR, signatureS])` + * + * Note that in contrast to the legacy tx serialization format this is not + * valid RLP any more due to the raw tx type preceding and concatenated to + * the RLP encoding of the values. + */ + public serialize(): Uint8Array { + const base = this.raw(); + return uint8ArrayConcat(TRANSACTION_TYPE_UINT8ARRAY, RLP.encode(base)); + } + + /** + * Returns the serialized unsigned tx (hashed or raw), which can be used + * to sign the transaction (e.g. for sending to a hardware wallet). + * + * Note: in contrast to the legacy tx the raw message format is already + * serialized and doesn't need to be RLP encoded any more. + * + * ```javascript + * const serializedMessage = tx.getMessageToSign(false) // use this for the HW wallet input + * ``` + * + * @param hashMessage - Return hashed message if set to true (default: true) + */ + public getMessageToSign(hashMessage = true): Uint8Array { + const base = this.raw().slice(0, 9); + const message = uint8ArrayConcat(TRANSACTION_TYPE_UINT8ARRAY, RLP.encode(base)); + if (hashMessage) { + return keccak256(message); + } + return message; + } + + /** + * Computes a sha3-256 hash of the serialized tx. + * + * This method can only be used for signed txs (it throws otherwise). + * Use {@link FeeMarketEIP1559Transaction.getMessageToSign} to get a tx hash for the purpose of signing. + */ + public hash(): Uint8Array { + if (!this.isSigned()) { + const msg = this._errorMsg('Cannot call hash method if transaction is not signed'); + throw new Error(msg); + } + + if (Object.isFrozen(this)) { + if (!this.cache.hash) { + this.cache.hash = keccak256(this.serialize()); + } + return this.cache.hash; + } + + return keccak256(this.serialize()); + } + + /** + * Computes a sha3-256 hash which can be used to verify the signature + */ + public getMessageToVerifySignature(): Uint8Array { + return this.getMessageToSign(); + } + + /** + * Returns the public key of the sender + */ + public getSenderPublicKey(): Uint8Array { + if (!this.isSigned()) { + const msg = this._errorMsg('Cannot call this method if transaction is not signed'); + throw new Error(msg); + } + + const msgHash = this.getMessageToVerifySignature(); + const { v, r, s } = this; + + this._validateHighS(); + + try { + return ecrecover( + msgHash, + v! + BigInt(27), // Recover the 27 which was stripped from ecsign + bigIntToUnpaddedUint8Array(r!), + bigIntToUnpaddedUint8Array(s!), + ); + } catch (e: any) { + const msg = this._errorMsg('Invalid Signature'); + throw new Error(msg); + } + } + + public _processSignature(v: bigint, r: Uint8Array, s: Uint8Array) { + const opts = { ...this.txOptions, common: this.common }; + + return FeeMarketEIP1559Transaction.fromTxData( + { + chainId: this.chainId, + nonce: this.nonce, + maxPriorityFeePerGas: this.maxPriorityFeePerGas, + maxFeePerGas: this.maxFeePerGas, + gasLimit: this.gasLimit, + to: this.to, + value: this.value, + data: this.data, + accessList: this.accessList, + v: v - BigInt(27), // This looks extremely hacky: /util actually adds 27 to the value, the recovery bit is either 0 or 1. + r: uint8ArrayToBigInt(r), + s: uint8ArrayToBigInt(s), + }, + opts, + ); + } + + /** + * Returns an object with the JSON representation of the transaction + */ + public toJSON(): JsonTx { + const accessListJSON = getAccessListJSON(this.accessList); + + return { + chainId: bigIntToHex(this.chainId), + nonce: bigIntToHex(this.nonce), + maxPriorityFeePerGas: bigIntToHex(this.maxPriorityFeePerGas), + maxFeePerGas: bigIntToHex(this.maxFeePerGas), + gasLimit: bigIntToHex(this.gasLimit), + to: this.to !== undefined ? this.to.toString() : undefined, + value: bigIntToHex(this.value), + data: bytesToHex(this.data), + accessList: accessListJSON, + v: this.v !== undefined ? bigIntToHex(this.v) : undefined, + r: this.r !== undefined ? bigIntToHex(this.r) : undefined, + s: this.s !== undefined ? bigIntToHex(this.s) : undefined, + }; + } + + /** + * Return a compact error string representation of the object + */ + public errorStr() { + let errorStr = this._getSharedErrorPostfix(); + errorStr += ` maxFeePerGas=${this.maxFeePerGas} maxPriorityFeePerGas=${this.maxPriorityFeePerGas}`; + return errorStr; + } + + /** + * Internal helper function to create an annotated error message + * + * @param msg Base error message + * @hidden + */ + protected _errorMsg(msg: string) { + return `${msg} (${this.errorStr()})`; + } +} diff --git a/packages/web3-eth-accounts/src/tx/eip2930Transaction.ts b/packages/web3-eth-accounts/src/tx/eip2930Transaction.ts new file mode 100644 index 00000000000..7152fbee58d --- /dev/null +++ b/packages/web3-eth-accounts/src/tx/eip2930Transaction.ts @@ -0,0 +1,407 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { keccak256 } from 'ethereum-cryptography/keccak.js'; +import { validateNoLeadingZeroes } from 'web3-validator'; +import { RLP } from '@ethereumjs/rlp'; +import { bytesToHex, hexToBytes, uint8ArrayConcat, uint8ArrayEquals } from 'web3-utils'; +import { MAX_INTEGER } from './constants.js'; +import { + getAccessListData, + verifyAccessList, + getAccessListJSON, + getDataFeeEIP2930, +} from './utils.js'; +import { + bigIntToHex, + toUint8Array, + ecrecover, + uint8ArrayToBigInt, + bigIntToUnpaddedUint8Array, +} from '../common/utils.js'; +import { BaseTransaction } from './baseTransaction.js'; +import type { + AccessList, + AccessListUint8Array, + AccessListEIP2930TxData, + AccessListEIP2930ValuesArray, + JsonTx, + TxOptions, +} from './types.js'; +import type { Common } from '../common/common.js'; + +const TRANSACTION_TYPE = 1; +const TRANSACTION_TYPE_UINT8ARRAY = hexToBytes(TRANSACTION_TYPE.toString(16).padStart(2, '0')); + +/** + * Typed transaction with optional access lists + * + * - TransactionType: 1 + * - EIP: [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930) + */ +// eslint-disable-next-line no-use-before-define +export class AccessListEIP2930Transaction extends BaseTransaction { + public readonly chainId: bigint; + public readonly accessList: AccessListUint8Array; + public readonly AccessListJSON: AccessList; + public readonly gasPrice: bigint; + + public readonly common: Common; + + /** + * The default HF if the tx type is active on that HF + * or the first greater HF where the tx is active. + * + * @hidden + */ + protected DEFAULT_HARDFORK = 'berlin'; + + /** + * Instantiate a transaction from a data dictionary. + * + * Format: { chainId, nonce, gasPrice, gasLimit, to, value, data, accessList, + * v, r, s } + * + * Notes: + * - `chainId` will be set automatically if not provided + * - All parameters are optional and have some basic default values + */ + public static fromTxData(txData: AccessListEIP2930TxData, opts: TxOptions = {}) { + return new AccessListEIP2930Transaction(txData, opts); + } + + /** + * Instantiate a transaction from the serialized tx. + * + * Format: `0x01 || rlp([chainId, nonce, gasPrice, gasLimit, to, value, data, accessList, + * signatureYParity (v), signatureR (r), signatureS (s)])` + */ + public static fromSerializedTx(serialized: Uint8Array, opts: TxOptions = {}) { + if (!uint8ArrayEquals(serialized.subarray(0, 1), TRANSACTION_TYPE_UINT8ARRAY)) { + throw new Error( + `Invalid serialized tx input: not an EIP-2930 transaction (wrong tx type, expected: ${TRANSACTION_TYPE}, received: ${bytesToHex( + serialized.subarray(0, 1), + )}`, + ); + } + const values = RLP.decode(Uint8Array.from(serialized.subarray(1))); + + if (!Array.isArray(values)) { + throw new Error('Invalid serialized tx input: must be array'); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + return AccessListEIP2930Transaction.fromValuesArray(values as any, opts); + } + + /** + * Create a transaction from a values array. + * + * Format: `[chainId, nonce, gasPrice, gasLimit, to, value, data, accessList, + * signatureYParity (v), signatureR (r), signatureS (s)]` + */ + public static fromValuesArray(values: AccessListEIP2930ValuesArray, opts: TxOptions = {}) { + if (values.length !== 8 && values.length !== 11) { + throw new Error( + 'Invalid EIP-2930 transaction. Only expecting 8 values (for unsigned tx) or 11 values (for signed tx).', + ); + } + + const [chainId, nonce, gasPrice, gasLimit, to, value, data, accessList, v, r, s] = values; + + this._validateNotArray({ chainId, v }); + validateNoLeadingZeroes({ nonce, gasPrice, gasLimit, value, v, r, s }); + + const emptyAccessList: AccessList = []; + + return new AccessListEIP2930Transaction( + { + chainId: uint8ArrayToBigInt(chainId), + nonce, + gasPrice, + gasLimit, + to, + value, + data, + accessList: accessList ?? emptyAccessList, + v: v !== undefined ? uint8ArrayToBigInt(v) : undefined, // EIP2930 supports v's with value 0 (empty Uint8Array) + r, + s, + }, + opts, + ); + } + + /** + * This constructor takes the values, validates them, assigns them and freezes the object. + * + * It is not recommended to use this constructor directly. Instead use + * the static factory methods to assist in creating a Transaction object from + * varying data types. + */ + public constructor(txData: AccessListEIP2930TxData, opts: TxOptions = {}) { + super({ ...txData, type: TRANSACTION_TYPE }, opts); + const { chainId, accessList, gasPrice } = txData; + + this.common = this._getCommon(opts.common, chainId); + this.chainId = this.common.chainId(); + + // EIP-2718 check is done in Common + if (!this.common.isActivatedEIP(2930)) { + throw new Error('EIP-2930 not enabled on Common'); + } + this.activeCapabilities = this.activeCapabilities.concat([2718, 2930]); + + // Populate the access list fields + const accessListData = getAccessListData(accessList ?? []); + this.accessList = accessListData.accessList; + this.AccessListJSON = accessListData.AccessListJSON; + // Verify the access list format. + verifyAccessList(this.accessList); + + this.gasPrice = uint8ArrayToBigInt(toUint8Array(gasPrice === '' ? '0x' : gasPrice)); + + this._validateCannotExceedMaxInteger({ + gasPrice: this.gasPrice, + }); + + BaseTransaction._validateNotArray(txData); + + if (this.gasPrice * this.gasLimit > MAX_INTEGER) { + const msg = this._errorMsg('gasLimit * gasPrice cannot exceed MAX_INTEGER'); + throw new Error(msg); + } + + this._validateYParity(); + this._validateHighS(); + + const freeze = opts?.freeze ?? true; + if (freeze) { + Object.freeze(this); + } + } + + /** + * The amount of gas paid for the data in this tx + */ + public getDataFee(): bigint { + if (this.cache.dataFee && this.cache.dataFee.hardfork === this.common.hardfork()) { + return this.cache.dataFee.value; + } + + let cost = super.getDataFee(); + cost += BigInt(getDataFeeEIP2930(this.accessList, this.common)); + + if (Object.isFrozen(this)) { + this.cache.dataFee = { + value: cost, + hardfork: this.common.hardfork(), + }; + } + + return cost; + } + + /** + * The up front amount that an account must have for this transaction to be valid + */ + public getUpfrontCost(): bigint { + return this.gasLimit * this.gasPrice + this.value; + } + + /** + * Returns a Uint8Array Array of the raw Uint8Arrays of the EIP-2930 transaction, in order. + * + * Format: `[chainId, nonce, gasPrice, gasLimit, to, value, data, accessList, + * signatureYParity (v), signatureR (r), signatureS (s)]` + * + * Use {@link AccessListEIP2930Transaction.serialize} to add a transaction to a block + * with {@link Block.fromValuesArray}. + * + * For an unsigned tx this method uses the empty UINT8ARRAY values for the + * signature parameters `v`, `r` and `s` for encoding. For an EIP-155 compliant + * representation for external signing use {@link AccessListEIP2930Transaction.getMessageToSign}. + */ + public raw(): AccessListEIP2930ValuesArray { + return [ + bigIntToUnpaddedUint8Array(this.chainId), + bigIntToUnpaddedUint8Array(this.nonce), + bigIntToUnpaddedUint8Array(this.gasPrice), + bigIntToUnpaddedUint8Array(this.gasLimit), + this.to !== undefined ? this.to.buf : Uint8Array.from([]), + bigIntToUnpaddedUint8Array(this.value), + this.data, + this.accessList, + this.v !== undefined ? bigIntToUnpaddedUint8Array(this.v) : Uint8Array.from([]), + this.r !== undefined ? bigIntToUnpaddedUint8Array(this.r) : Uint8Array.from([]), + this.s !== undefined ? bigIntToUnpaddedUint8Array(this.s) : Uint8Array.from([]), + ]; + } + + /** + * Returns the serialized encoding of the EIP-2930 transaction. + * + * Format: `0x01 || rlp([chainId, nonce, gasPrice, gasLimit, to, value, data, accessList, + * signatureYParity (v), signatureR (r), signatureS (s)])` + * + * Note that in contrast to the legacy tx serialization format this is not + * valid RLP any more due to the raw tx type preceding and concatenated to + * the RLP encoding of the values. + */ + public serialize(): Uint8Array { + const base = this.raw(); + return uint8ArrayConcat(TRANSACTION_TYPE_UINT8ARRAY, RLP.encode(base)); + } + + /** + * Returns the serialized unsigned tx (hashed or raw), which can be used + * to sign the transaction (e.g. for sending to a hardware wallet). + * + * Note: in contrast to the legacy tx the raw message format is already + * serialized and doesn't need to be RLP encoded any more. + * + * ```javascript + * const serializedMessage = tx.getMessageToSign(false) // use this for the HW wallet input + * ``` + * + * @param hashMessage - Return hashed message if set to true (default: true) + */ + public getMessageToSign(hashMessage = true): Uint8Array { + const base = this.raw().slice(0, 8); + const message = uint8ArrayConcat(TRANSACTION_TYPE_UINT8ARRAY, RLP.encode(base)); + if (hashMessage) { + return keccak256(message); + } + return message; + } + + /** + * Computes a sha3-256 hash of the serialized tx. + * + * This method can only be used for signed txs (it throws otherwise). + * Use {@link AccessListEIP2930Transaction.getMessageToSign} to get a tx hash for the purpose of signing. + */ + public hash(): Uint8Array { + if (!this.isSigned()) { + const msg = this._errorMsg('Cannot call hash method if transaction is not signed'); + throw new Error(msg); + } + + if (Object.isFrozen(this)) { + if (!this.cache.hash) { + this.cache.hash = keccak256(this.serialize()); + } + return this.cache.hash; + } + + return keccak256(this.serialize()); + } + + /** + * Computes a sha3-256 hash which can be used to verify the signature + */ + public getMessageToVerifySignature(): Uint8Array { + return this.getMessageToSign(); + } + + /** + * Returns the public key of the sender + */ + public getSenderPublicKey(): Uint8Array { + if (!this.isSigned()) { + const msg = this._errorMsg('Cannot call this method if transaction is not signed'); + throw new Error(msg); + } + + const msgHash = this.getMessageToVerifySignature(); + const { v, r, s } = this; + + this._validateHighS(); + + try { + return ecrecover( + msgHash, + v! + BigInt(27), // Recover the 27 which was stripped from ecsign + bigIntToUnpaddedUint8Array(r!), + bigIntToUnpaddedUint8Array(s!), + ); + } catch (e: any) { + const msg = this._errorMsg('Invalid Signature'); + throw new Error(msg); + } + } + + public _processSignature(v: bigint, r: Uint8Array, s: Uint8Array) { + const opts = { ...this.txOptions, common: this.common }; + + return AccessListEIP2930Transaction.fromTxData( + { + chainId: this.chainId, + nonce: this.nonce, + gasPrice: this.gasPrice, + gasLimit: this.gasLimit, + to: this.to, + value: this.value, + data: this.data, + accessList: this.accessList, + v: v - BigInt(27), // This looks extremely hacky: /util actually adds 27 to the value, the recovery bit is either 0 or 1. + r: uint8ArrayToBigInt(r), + s: uint8ArrayToBigInt(s), + }, + opts, + ); + } + + /** + * Returns an object with the JSON representation of the transaction + */ + public toJSON(): JsonTx { + const accessListJSON = getAccessListJSON(this.accessList); + + return { + chainId: bigIntToHex(this.chainId), + nonce: bigIntToHex(this.nonce), + gasPrice: bigIntToHex(this.gasPrice), + gasLimit: bigIntToHex(this.gasLimit), + to: this.to !== undefined ? this.to.toString() : undefined, + value: bigIntToHex(this.value), + data: bytesToHex(this.data), + accessList: accessListJSON, + v: this.v !== undefined ? bigIntToHex(this.v) : undefined, + r: this.r !== undefined ? bigIntToHex(this.r) : undefined, + s: this.s !== undefined ? bigIntToHex(this.s) : undefined, + }; + } + + /** + * Return a compact error string representation of the object + */ + public errorStr() { + let errorStr = this._getSharedErrorPostfix(); + // Keep ? for this.accessList since this otherwise causes Hardhat E2E tests to fail + errorStr += ` gasPrice=${this.gasPrice} accessListCount=${this.accessList?.length ?? 0}`; + return errorStr; + } + + /** + * Internal helper function to create an annotated error message + * + * @param msg Base error message + * @hidden + */ + protected _errorMsg(msg: string) { + return `${msg} (${this.errorStr()})`; + } +} diff --git a/packages/web3-eth-accounts/src/tx/index.ts b/packages/web3-eth-accounts/src/tx/index.ts new file mode 100644 index 00000000000..26ead20a897 --- /dev/null +++ b/packages/web3-eth-accounts/src/tx/index.ts @@ -0,0 +1,25 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// @ethereumjs/tx version 4.1.1 +export { FeeMarketEIP1559Transaction } from './eip1559Transaction.js'; +export { AccessListEIP2930Transaction } from './eip2930Transaction.js'; +export { Transaction } from './legacyTransaction.js'; +export { TransactionFactory } from './transactionFactory.js'; +export { BaseTransaction } from './baseTransaction.js'; +export * as txUtils from './utils.js'; +export * from './types.js'; diff --git a/packages/web3-eth-accounts/src/tx/legacyTransaction.ts b/packages/web3-eth-accounts/src/tx/legacyTransaction.ts new file mode 100644 index 00000000000..a7b05b7e4f3 --- /dev/null +++ b/packages/web3-eth-accounts/src/tx/legacyTransaction.ts @@ -0,0 +1,439 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { RLP } from '@ethereumjs/rlp'; +import { keccak256 } from 'ethereum-cryptography/keccak.js'; +import { bytesToHex } from 'web3-utils'; +import { validateNoLeadingZeroes } from 'web3-validator'; +import { + bigIntToHex, + bigIntToUnpaddedUint8Array, + ecrecover, + toUint8Array, + uint8ArrayToBigInt, + unpadUint8Array, +} from '../common/utils.js'; +import { MAX_INTEGER } from './constants.js'; + +import { BaseTransaction } from './baseTransaction.js'; + +import type { Common } from '../common/common.js'; +import type { JsonTx, TxData, TxOptions, TxValuesArray } from './types.js'; +import { Capability } from './types.js'; + +const TRANSACTION_TYPE = 0; + +function meetsEIP155(_v: bigint, chainId: bigint) { + const v = Number(_v); + const chainIdDoubled = Number(chainId) * 2; + return v === chainIdDoubled + 35 || v === chainIdDoubled + 36; +} + +/** + * An Ethereum non-typed (legacy) transaction + */ +// eslint-disable-next-line no-use-before-define +export class Transaction extends BaseTransaction { + public readonly gasPrice: bigint; + + public readonly common: Common; + + /** + * Instantiate a transaction from a data dictionary. + * + * Format: { nonce, gasPrice, gasLimit, to, value, data, v, r, s } + * + * Notes: + * - All parameters are optional and have some basic default values + */ + public static fromTxData(txData: TxData, opts: TxOptions = {}) { + return new Transaction(txData, opts); + } + + /** + * Instantiate a transaction from the serialized tx. + * + * Format: `rlp([nonce, gasPrice, gasLimit, to, value, data, v, r, s])` + */ + public static fromSerializedTx(serialized: Uint8Array, opts: TxOptions = {}) { + const values = RLP.decode(serialized); + + if (!Array.isArray(values)) { + throw new Error('Invalid serialized tx input. Must be array'); + } + + return this.fromValuesArray(values as Uint8Array[], opts); + } + + /** + * Create a transaction from a values array. + * + * Format: `[nonce, gasPrice, gasLimit, to, value, data, v, r, s]` + */ + public static fromValuesArray(values: TxValuesArray, opts: TxOptions = {}) { + // If length is not 6, it has length 9. If v/r/s are empty Uint8Array, it is still an unsigned transaction + // This happens if you get the RLP data from `raw()` + if (values.length !== 6 && values.length !== 9) { + throw new Error( + 'Invalid transaction. Only expecting 6 values (for unsigned tx) or 9 values (for signed tx).', + ); + } + + const [nonce, gasPrice, gasLimit, to, value, data, v, r, s] = values; + + validateNoLeadingZeroes({ nonce, gasPrice, gasLimit, value, v, r, s }); + + return new Transaction( + { + nonce, + gasPrice, + gasLimit, + to, + value, + data, + v, + r, + s, + }, + opts, + ); + } + + /** + * This constructor takes the values, validates them, assigns them and freezes the object. + * + * It is not recommended to use this constructor directly. Instead use + * the static factory methods to assist in creating a Transaction object from + * varying data types. + */ + public constructor(txData: TxData, opts: TxOptions = {}) { + super({ ...txData, type: TRANSACTION_TYPE }, opts); + + this.common = this._validateTxV(this.v, opts.common); + + this.gasPrice = uint8ArrayToBigInt( + toUint8Array(txData.gasPrice === '' ? '0x' : txData.gasPrice), + ); + + if (this.gasPrice * this.gasLimit > MAX_INTEGER) { + const msg = this._errorMsg('gas limit * gasPrice cannot exceed MAX_INTEGER (2^256-1)'); + throw new Error(msg); + } + this._validateCannotExceedMaxInteger({ gasPrice: this.gasPrice }); + BaseTransaction._validateNotArray(txData); + + if (this.common.gteHardfork('spuriousDragon')) { + if (!this.isSigned()) { + this.activeCapabilities.push(Capability.EIP155ReplayProtection); + } else { + // EIP155 spec: + // If block.number >= 2,675,000 and v = CHAIN_ID * 2 + 35 or v = CHAIN_ID * 2 + 36 + // then when computing the hash of a transaction for purposes of signing or recovering + // instead of hashing only the first six elements (i.e. nonce, gasprice, startgas, to, value, data) + // hash nine elements, with v replaced by CHAIN_ID, r = 0 and s = 0. + // v and chain ID meet EIP-155 conditions + // eslint-disable-next-line no-lonely-if + if (meetsEIP155(this.v!, this.common.chainId())) { + this.activeCapabilities.push(Capability.EIP155ReplayProtection); + } + } + } + + const freeze = opts?.freeze ?? true; + if (freeze) { + Object.freeze(this); + } + } + + /** + * Returns a Uint8Array Array of the raw Uint8Arrays of the legacy transaction, in order. + * + * Format: `[nonce, gasPrice, gasLimit, to, value, data, v, r, s]` + * + * For legacy txs this is also the correct format to add transactions + * to a block with {@link Block.fromValuesArray} (use the `serialize()` method + * for typed txs). + * + * For an unsigned tx this method returns the empty Uint8Array values + * for the signature parameters `v`, `r` and `s`. For an EIP-155 compliant + * representation have a look at {@link Transaction.getMessageToSign}. + */ + public raw(): TxValuesArray { + return [ + bigIntToUnpaddedUint8Array(this.nonce), + bigIntToUnpaddedUint8Array(this.gasPrice), + bigIntToUnpaddedUint8Array(this.gasLimit), + this.to !== undefined ? this.to.buf : Uint8Array.from([]), + bigIntToUnpaddedUint8Array(this.value), + this.data, + this.v !== undefined ? bigIntToUnpaddedUint8Array(this.v) : Uint8Array.from([]), + this.r !== undefined ? bigIntToUnpaddedUint8Array(this.r) : Uint8Array.from([]), + this.s !== undefined ? bigIntToUnpaddedUint8Array(this.s) : Uint8Array.from([]), + ]; + } + + /** + * Returns the serialized encoding of the legacy transaction. + * + * Format: `rlp([nonce, gasPrice, gasLimit, to, value, data, v, r, s])` + * + * For an unsigned tx this method uses the empty Uint8Array values for the + * signature parameters `v`, `r` and `s` for encoding. For an EIP-155 compliant + * representation for external signing use {@link Transaction.getMessageToSign}. + */ + public serialize(): Uint8Array { + return RLP.encode(this.raw()); + } + + private _getMessageToSign() { + const values = [ + bigIntToUnpaddedUint8Array(this.nonce), + bigIntToUnpaddedUint8Array(this.gasPrice), + bigIntToUnpaddedUint8Array(this.gasLimit), + this.to !== undefined ? this.to.buf : Uint8Array.from([]), + bigIntToUnpaddedUint8Array(this.value), + this.data, + ]; + + if (this.supports(Capability.EIP155ReplayProtection)) { + values.push(toUint8Array(this.common.chainId())); + values.push(unpadUint8Array(toUint8Array(0))); + values.push(unpadUint8Array(toUint8Array(0))); + } + + return values; + } + + /** + * Returns the unsigned tx (hashed or raw), which can be used + * to sign the transaction (e.g. for sending to a hardware wallet). + * + * Note: the raw message message format for the legacy tx is not RLP encoded + * and you might need to do yourself with: + * + * ```javascript + * import { bufArrToArr } from '../util' + * import { RLP } from '../rlp' + * const message = tx.getMessageToSign(false) + * const serializedMessage = RLP.encode(message) // use this for the HW wallet input + * ``` + * + * @param hashMessage - Return hashed message if set to true (default: true) + */ + public getMessageToSign(hashMessage: false): Uint8Array[]; + public getMessageToSign(hashMessage?: true): Uint8Array; + public getMessageToSign(hashMessage = true) { + const message = this._getMessageToSign(); + if (hashMessage) { + return keccak256(RLP.encode(message)); + } + return message; + } + + /** + * The amount of gas paid for the data in this tx + */ + public getDataFee(): bigint { + if (this.cache.dataFee && this.cache.dataFee.hardfork === this.common.hardfork()) { + return this.cache.dataFee.value; + } + + if (Object.isFrozen(this)) { + this.cache.dataFee = { + value: super.getDataFee(), + hardfork: this.common.hardfork(), + }; + } + + return super.getDataFee(); + } + + /** + * The up front amount that an account must have for this transaction to be valid + */ + public getUpfrontCost(): bigint { + return this.gasLimit * this.gasPrice + this.value; + } + + /** + * Computes a sha3-256 hash of the serialized tx. + * + * This method can only be used for signed txs (it throws otherwise). + * Use {@link Transaction.getMessageToSign} to get a tx hash for the purpose of signing. + */ + public hash(): Uint8Array { + if (!this.isSigned()) { + const msg = this._errorMsg('Cannot call hash method if transaction is not signed'); + throw new Error(msg); + } + + if (Object.isFrozen(this)) { + if (!this.cache.hash) { + this.cache.hash = keccak256(RLP.encode(this.raw())); + } + return this.cache.hash; + } + + return keccak256(RLP.encode(this.raw())); + } + + /** + * Computes a sha3-256 hash which can be used to verify the signature + */ + public getMessageToVerifySignature() { + if (!this.isSigned()) { + const msg = this._errorMsg('This transaction is not signed'); + throw new Error(msg); + } + const message = this._getMessageToSign(); + return keccak256(RLP.encode(message)); + } + + /** + * Returns the public key of the sender + */ + public getSenderPublicKey(): Uint8Array { + const msgHash = this.getMessageToVerifySignature(); + + const { v, r, s } = this; + + this._validateHighS(); + + try { + return ecrecover( + msgHash, + v!, + bigIntToUnpaddedUint8Array(r!), + bigIntToUnpaddedUint8Array(s!), + this.supports(Capability.EIP155ReplayProtection) + ? this.common.chainId() + : undefined, + ); + } catch (e: any) { + const msg = this._errorMsg('Invalid Signature'); + throw new Error(msg); + } + } + + /** + * Process the v, r, s values from the `sign` method of the base transaction. + */ + protected _processSignature(_v: bigint, r: Uint8Array, s: Uint8Array) { + let v = _v; + if (this.supports(Capability.EIP155ReplayProtection)) { + v += this.common.chainId() * BigInt(2) + BigInt(8); + } + + const opts = { ...this.txOptions, common: this.common }; + + return Transaction.fromTxData( + { + nonce: this.nonce, + gasPrice: this.gasPrice, + gasLimit: this.gasLimit, + to: this.to, + value: this.value, + data: this.data, + v, + r: uint8ArrayToBigInt(r), + s: uint8ArrayToBigInt(s), + }, + opts, + ); + } + + /** + * Returns an object with the JSON representation of the transaction. + */ + public toJSON(): JsonTx { + return { + nonce: bigIntToHex(this.nonce), + gasPrice: bigIntToHex(this.gasPrice), + gasLimit: bigIntToHex(this.gasLimit), + to: this.to !== undefined ? this.to.toString() : undefined, + value: bigIntToHex(this.value), + data: bytesToHex(this.data), + v: this.v !== undefined ? bigIntToHex(this.v) : undefined, + r: this.r !== undefined ? bigIntToHex(this.r) : undefined, + s: this.s !== undefined ? bigIntToHex(this.s) : undefined, + }; + } + + /** + * Validates tx's `v` value + */ + private _validateTxV(_v?: bigint, common?: Common): Common { + let chainIdBigInt; + const v = _v !== undefined ? Number(_v) : undefined; + // Check for valid v values in the scope of a signed legacy tx + if (v !== undefined) { + // v is 1. not matching the EIP-155 chainId included case and... + // v is 2. not matching the classic v=27 or v=28 case + if (v < 37 && v !== 27 && v !== 28) { + throw new Error( + `Legacy txs need either v = 27/28 or v >= 37 (EIP-155 replay protection), got v = ${v}`, + ); + } + } + + // No unsigned tx and EIP-155 activated and chain ID included + if ( + v !== undefined && + v !== 0 && + (!common || common.gteHardfork('spuriousDragon')) && + v !== 27 && + v !== 28 + ) { + if (common) { + if (!meetsEIP155(BigInt(v), common.chainId())) { + throw new Error( + `Incompatible EIP155-based V ${v} and chain id ${common.chainId()}. See the Common parameter of the Transaction constructor to set the chain id.`, + ); + } + } else { + // Derive the original chain ID + let numSub; + if ((v - 35) % 2 === 0) { + numSub = 35; + } else { + numSub = 36; + } + // Use derived chain ID to create a proper Common + chainIdBigInt = BigInt(v - numSub) / BigInt(2); + } + } + return this._getCommon(common, chainIdBigInt); + } + + /** + * Return a compact error string representation of the object + */ + public errorStr() { + let errorStr = this._getSharedErrorPostfix(); + errorStr += ` gasPrice=${this.gasPrice}`; + return errorStr; + } + + /** + * Internal helper function to create an annotated error message + * + * @param msg Base error message + * @hidden + */ + protected _errorMsg(msg: string) { + return `${msg} (${this.errorStr()})`; + } +} diff --git a/packages/web3-eth-accounts/src/tx/transactionFactory.ts b/packages/web3-eth-accounts/src/tx/transactionFactory.ts new file mode 100644 index 00000000000..e4da9fcfe6e --- /dev/null +++ b/packages/web3-eth-accounts/src/tx/transactionFactory.ts @@ -0,0 +1,146 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Numbers } from 'web3-types'; +import { toUint8Array, uint8ArrayToBigInt } from '../common/utils.js'; +import { FeeMarketEIP1559Transaction } from './eip1559Transaction.js'; +import { AccessListEIP2930Transaction } from './eip2930Transaction.js'; +import { Transaction } from './legacyTransaction.js'; +import type { TypedTransaction } from '../types.js'; + +import type { + AccessListEIP2930TxData, + FeeMarketEIP1559TxData, + TxData, + TxOptions, +} from './types.js'; +import { BaseTransaction } from './baseTransaction.js'; + +const extraTxTypes: Map> = new Map(); + +// eslint-disable-next-line @typescript-eslint/no-extraneous-class +export class TransactionFactory { + // It is not possible to instantiate a TransactionFactory object. + // eslint-disable-next-line @typescript-eslint/no-empty-function, no-useless-constructor + private constructor() {} + + public static typeToInt(txType: Numbers) { + return Number(uint8ArrayToBigInt(toUint8Array(txType))); + } + + public static registerTransactionType>( + type: Numbers, + txClass: NewTxTypeClass, + ) { + const txType = TransactionFactory.typeToInt(type); + extraTxTypes.set(txType, txClass); + } + + /** + * Create a transaction from a `txData` object + * + * @param txData - The transaction data. The `type` field will determine which transaction type is returned (if undefined, creates a legacy transaction) + * @param txOptions - Options to pass on to the constructor of the transaction + */ + public static fromTxData( + txData: TxData | TypedTransaction, + txOptions: TxOptions = {}, + ): TypedTransaction { + if (!('type' in txData) || txData.type === undefined) { + // Assume legacy transaction + return Transaction.fromTxData(txData as TxData, txOptions); + } + const txType = TransactionFactory.typeToInt(txData.type); + if (txType === 0) { + return Transaction.fromTxData(txData as TxData, txOptions); + } + if (txType === 1) { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + return AccessListEIP2930Transaction.fromTxData( + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + txData, + txOptions, + ); + } + if (txType === 2) { + return FeeMarketEIP1559Transaction.fromTxData( + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + txData, + txOptions, + ); + } + const ExtraTransaction = extraTxTypes.get(txType); + if (ExtraTransaction?.fromTxData) { + return ExtraTransaction.fromTxData(txData, txOptions) as TypedTransaction; + } + + throw new Error(`Tx instantiation with type ${txType} not supported`); + } + + /** + * This method tries to decode serialized data. + * + * @param data - The data Uint8Array + * @param txOptions - The transaction options + */ + public static fromSerializedData( + data: Uint8Array, + txOptions: TxOptions = {}, + ): TypedTransaction { + if (data[0] <= 0x7f) { + // Determine the type. + switch (data[0]) { + case 1: + return AccessListEIP2930Transaction.fromSerializedTx(data, txOptions); + case 2: + return FeeMarketEIP1559Transaction.fromSerializedTx(data, txOptions); + default: { + const ExtraTransaction = extraTxTypes.get(Number(data[0])); + if (ExtraTransaction?.fromSerializedTx) { + return ExtraTransaction.fromSerializedTx( + data, + txOptions, + ) as TypedTransaction; + } + + throw new Error(`TypedTransaction with ID ${data[0]} unknown`); + } + } + } else { + return Transaction.fromSerializedTx(data, txOptions); + } + } + + /** + * When decoding a BlockBody, in the transactions field, a field is either: + * A Uint8Array (a TypedTransaction - encoded as TransactionType || rlp(TransactionPayload)) + * A Uint8Array[] (Legacy Transaction) + * This method returns the right transaction. + * + * @param data - A Uint8Array or Uint8Array[] + * @param txOptions - The transaction options + */ + public static fromBlockBodyData(data: Uint8Array | Uint8Array[], txOptions: TxOptions = {}) { + if (data instanceof Uint8Array) { + return this.fromSerializedData(data, txOptions); + } + if (Array.isArray(data)) { + // It is a legacy transaction + return Transaction.fromValuesArray(data, txOptions); + } + throw new Error('Cannot decode transaction: unknown type input'); + } +} diff --git a/packages/web3-eth-accounts/src/tx/types.ts b/packages/web3-eth-accounts/src/tx/types.ts new file mode 100644 index 00000000000..830c9e7582f --- /dev/null +++ b/packages/web3-eth-accounts/src/tx/types.ts @@ -0,0 +1,288 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import type { HexString, Numbers } from 'web3-types'; + +import type { Common } from '../common/common.js'; +// eslint-disable-next-line require-extensions/require-extensions +import type { Uint8ArrayLike, PrefixedHexString } from '../common/types'; +import { Address } from './address.js'; + +/** + * Can be used in conjunction with {@link Transaction.supports} + * to query on tx capabilities + */ +export enum Capability { + /** + * Tx supports EIP-155 replay protection + * See: [155](https://eips.ethereum.org/EIPS/eip-155) Replay Attack Protection EIP + */ + EIP155ReplayProtection = 155, + + /** + * Tx supports EIP-1559 gas fee market mechanism + * See: [1559](https://eips.ethereum.org/EIPS/eip-1559) Fee Market EIP + */ + EIP1559FeeMarket = 1559, + + /** + * Tx is a typed transaction as defined in EIP-2718 + * See: [2718](https://eips.ethereum.org/EIPS/eip-2718) Transaction Type EIP + */ + EIP2718TypedTransaction = 2718, + + /** + * Tx supports access list generation as defined in EIP-2930 + * See: [2930](https://eips.ethereum.org/EIPS/eip-2930) Access Lists EIP + */ + EIP2930AccessLists = 2930, +} + +/** + * The options for initializing a {@link Transaction}. + */ +export interface TxOptions { + /** + * A {@link Common} object defining the chain and hardfork for the transaction. + * + * Object will be internally copied so that tx behavior don't incidentally + * change on future HF changes. + * + * Default: {@link Common} object set to `mainnet` and the default hardfork as defined in the {@link Common} class. + * + * Current default hardfork: `istanbul` + */ + common?: Common; + /** + * A transaction object by default gets frozen along initialization. This gives you + * strong additional security guarantees on the consistency of the tx parameters. + * It also enables tx hash caching when the `hash()` method is called multiple times. + * + * If you need to deactivate the tx freeze - e.g. because you want to subclass tx and + * add additional properties - it is strongly encouraged that you do the freeze yourself + * within your code instead. + * + * Default: true + */ + freeze?: boolean; + + /** + * Allows unlimited contract code-size init while debugging. This (partially) disables EIP-3860. + * Gas cost for initcode size analysis will still be charged. Use with caution. + */ + allowUnlimitedInitCodeSize?: boolean; +} + +/* + * Access List types + */ + +export type AccessListItem = { + address: PrefixedHexString; + storageKeys: PrefixedHexString[]; +}; + +/* + * An Access List as a tuple of [address: Uint8Array, storageKeys: Uint8Array[]] + */ +export type AccessListUint8ArrayItem = [Uint8Array, Uint8Array[]]; +export type AccessListUint8Array = AccessListUint8ArrayItem[]; +export type AccessList = AccessListItem[]; + +export function isAccessListUint8Array( + input: AccessListUint8Array | AccessList, +): input is AccessListUint8Array { + if (input.length === 0) { + return true; + } + const firstItem = input[0]; + if (Array.isArray(firstItem)) { + return true; + } + return false; +} + +export function isAccessList(input: AccessListUint8Array | AccessList): input is AccessList { + return !isAccessListUint8Array(input); // This is exactly the same method, except the output is negated. +} + +export interface ECDSASignature { + v: bigint; + r: Uint8Array; + s: Uint8Array; +} + +/** + * Legacy {@link Transaction} Data + */ +export type TxData = { + /** + * The transaction's nonce. + */ + nonce?: Numbers | Uint8Array; + + /** + * The transaction's gas price. + */ + // eslint-disable-next-line @typescript-eslint/ban-types + gasPrice?: Numbers | Uint8Array | null; + + /** + * The transaction's gas limit. + */ + gasLimit?: Numbers | Uint8Array; + + /** + * The transaction's the address is sent to. + */ + to?: Address | Uint8Array | HexString; + + /** + * The amount of Ether sent. + */ + value?: Numbers | Uint8Array; + + /** + * This will contain the data of the message or the init of a contract. + */ + data?: Uint8ArrayLike; + + /** + * EC recovery ID. + */ + v?: Numbers | Uint8Array; + + /** + * EC signature parameter. + */ + r?: Numbers | Uint8Array; + + /** + * EC signature parameter. + */ + s?: Numbers | Uint8Array; + + /** + * The transaction type + */ + + type?: Numbers; +}; + +/** + * {@link AccessListEIP2930Transaction} data. + */ +export interface AccessListEIP2930TxData extends TxData { + /** + * The transaction's chain ID + */ + chainId?: Numbers; + + /** + * The access list which contains the addresses/storage slots which the transaction wishes to access + */ + // eslint-disable-next-line @typescript-eslint/ban-types + accessList?: AccessListUint8Array | AccessList | null; +} + +/** + * {@link FeeMarketEIP1559Transaction} data. + */ +export interface FeeMarketEIP1559TxData extends AccessListEIP2930TxData { + /** + * The transaction's gas price, inherited from {@link Transaction}. This property is not used for EIP1559 + * transactions and should always be undefined for this specific transaction type. + */ + // eslint-disable-next-line @typescript-eslint/ban-types + gasPrice?: never | null; + /** + * The maximum inclusion fee per gas (this fee is given to the miner) + */ + maxPriorityFeePerGas?: Numbers | Uint8Array; + /** + * The maximum total fee + */ + maxFeePerGas?: Numbers | Uint8Array; +} + +/** + * Uint8Array values array for a legacy {@link Transaction} + */ +export type TxValuesArray = Uint8Array[]; + +/** + * Uint8Array values array for an {@link AccessListEIP2930Transaction} + */ +export type AccessListEIP2930ValuesArray = [ + Uint8Array, + Uint8Array, + Uint8Array, + Uint8Array, + Uint8Array, + Uint8Array, + Uint8Array, + AccessListUint8Array, + Uint8Array?, + Uint8Array?, + Uint8Array?, +]; + +/** + * Uint8Array values array for a {@link FeeMarketEIP1559Transaction} + */ +export type FeeMarketEIP1559ValuesArray = [ + Uint8Array, + Uint8Array, + Uint8Array, + Uint8Array, + Uint8Array, + Uint8Array, + Uint8Array, + Uint8Array, + AccessListUint8Array, + Uint8Array?, + Uint8Array?, + Uint8Array?, +]; + +type JsonAccessListItem = { address: string; storageKeys: string[] }; + +/** + * Generic interface for all tx types with a + * JSON representation of a transaction. + * + * Note that all values are marked as optional + * and not all the values are present on all tx types + * (an EIP1559 tx e.g. lacks a `gasPrice`). + */ +export interface JsonTx { + nonce?: string; + gasPrice?: string; + gasLimit?: string; + to?: string; + data?: string; + v?: string; + r?: string; + s?: string; + value?: string; + chainId?: string; + accessList?: JsonAccessListItem[]; + type?: string; + maxPriorityFeePerGas?: string; + maxFeePerGas?: string; + maxFeePerDataGas?: string; + versionedHashes?: string[]; +} diff --git a/packages/web3-eth-accounts/src/tx/utils.ts b/packages/web3-eth-accounts/src/tx/utils.ts new file mode 100644 index 00000000000..3b2fabbe4ed --- /dev/null +++ b/packages/web3-eth-accounts/src/tx/utils.ts @@ -0,0 +1,150 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { HexString } from 'web3-types'; +import { bytesToHex } from 'web3-utils'; +import { setLengthLeft, toUint8Array } from '../common/utils.js'; +import type { AccessList, AccessListUint8Array, AccessListItem } from './types.js'; +import { isAccessList } from './types.js'; + +import type { Common } from '../common/common.js'; + +export const checkMaxInitCodeSize = (common: Common, length: number) => { + const maxInitCodeSize = common.param('vm', 'maxInitCodeSize'); + if (maxInitCodeSize && BigInt(length) > maxInitCodeSize) { + throw new Error( + `the initcode size of this transaction is too large: it is ${length} while the max is ${common.param( + 'vm', + 'maxInitCodeSize', + )}`, + ); + } +}; + +export const getAccessListData = (accessList: AccessListUint8Array | AccessList) => { + let AccessListJSON; + let uint8arrayAccessList; + if (isAccessList(accessList)) { + AccessListJSON = accessList; + const newAccessList: AccessListUint8Array = []; + // eslint-disable-next-line @typescript-eslint/prefer-for-of + for (let i = 0; i < accessList.length; i += 1) { + const item: AccessListItem = accessList[i]; + const addressBytes = toUint8Array(item.address); + const storageItems: Uint8Array[] = []; + // eslint-disable-next-line @typescript-eslint/prefer-for-of + for (let index = 0; index < item.storageKeys.length; index += 1) { + storageItems.push(toUint8Array(item.storageKeys[index])); + } + newAccessList.push([addressBytes, storageItems]); + } + uint8arrayAccessList = newAccessList; + } else { + uint8arrayAccessList = accessList ?? []; + // build the JSON + const json: AccessList = []; + // eslint-disable-next-line @typescript-eslint/prefer-for-of + for (let i = 0; i < uint8arrayAccessList.length; i += 1) { + const data = uint8arrayAccessList[i]; + const address = bytesToHex(data[0]); + const storageKeys: string[] = []; + // eslint-disable-next-line @typescript-eslint/prefer-for-of + for (let item = 0; item < data[1].length; item += 1) { + storageKeys.push(bytesToHex(data[1][item])); + } + const jsonItem: AccessListItem = { + address, + storageKeys, + }; + json.push(jsonItem); + } + AccessListJSON = json; + } + + return { + AccessListJSON, + accessList: uint8arrayAccessList, + }; +}; + +export const verifyAccessList = (accessList: AccessListUint8Array) => { + // eslint-disable-next-line @typescript-eslint/prefer-for-of + for (let key = 0; key < accessList.length; key += 1) { + const accessListItem = accessList[key]; + const address = accessListItem[0]; + const storageSlots = accessListItem[1]; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/consistent-type-assertions + if ((accessListItem)[2] !== undefined) { + throw new Error( + 'Access list item cannot have 3 elements. It can only have an address, and an array of storage slots.', + ); + } + if (address.length !== 20) { + throw new Error('Invalid EIP-2930 transaction: address length should be 20 bytes'); + } + // eslint-disable-next-line @typescript-eslint/prefer-for-of + for (let storageSlot = 0; storageSlot < storageSlots.length; storageSlot += 1) { + if (storageSlots[storageSlot].length !== 32) { + throw new Error( + 'Invalid EIP-2930 transaction: storage slot length should be 32 bytes', + ); + } + } + } +}; + +export const getAccessListJSON = ( + accessList: AccessListUint8Array, +): { + address: HexString; + storageKeys: HexString[]; +}[] => { + const accessListJSON: { address: HexString; storageKeys: HexString[] }[] = []; + // eslint-disable-next-line @typescript-eslint/prefer-for-of + for (let index = 0; index < accessList.length; index += 1) { + const item: any = accessList[index]; + const JSONItem: { address: HexString; storageKeys: HexString[] } = { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/consistent-type-assertions + address: bytesToHex(setLengthLeft(item[0], 20)), + storageKeys: [], + }; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/prefer-optional-chain + const storageSlots: Uint8Array[] = item && item[1]; + // eslint-disable-next-line @typescript-eslint/prefer-for-of + for (let slot = 0; slot < storageSlots.length; slot += 1) { + const storageSlot = storageSlots[slot]; + JSONItem.storageKeys.push(bytesToHex(setLengthLeft(storageSlot, 32))); + } + accessListJSON.push(JSONItem); + } + return accessListJSON; +}; + +export const getDataFeeEIP2930 = (accessList: AccessListUint8Array, common: Common): number => { + const accessListStorageKeyCost = common.param('gasPrices', 'accessListStorageKeyCost'); + const accessListAddressCost = common.param('gasPrices', 'accessListAddressCost'); + + let slots = 0; + // eslint-disable-next-line @typescript-eslint/prefer-for-of + for (let index = 0; index < accessList.length; index += 1) { + const item = accessList[index]; + const storageSlots = item[1]; + slots += storageSlots.length; + } + + const addresses = accessList.length; + return addresses * Number(accessListAddressCost) + slots * Number(accessListStorageKeyCost); +}; diff --git a/packages/web3-eth-accounts/src/types.ts b/packages/web3-eth-accounts/src/types.ts new file mode 100644 index 00000000000..ed45ad94ffb --- /dev/null +++ b/packages/web3-eth-accounts/src/types.ts @@ -0,0 +1,94 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3BaseWalletAccount, HexString } from 'web3-types'; +import { FeeMarketEIP1559TxData, AccessListEIP2930TxData, TxData } from './tx/types.js'; +import { AccessListEIP2930Transaction, FeeMarketEIP1559Transaction, Transaction } from './tx'; + +export type SignatureObject = { + messageHash: string; + r: string; + s: string; + v: string; +}; + +export type SignTransactionResult = SignatureObject & { + rawTransaction: string; + transactionHash: string; +}; + +export type SignTransactionFunction = ( + transaction: + | TxData + | AccessListEIP2930TxData + | FeeMarketEIP1559TxData + | Record, +) => SignTransactionResult; + +export type SignResult = SignatureObject & { + message?: string; + signature: string; +}; + +export type SignFunction = (data: string, privateKey: string) => SignResult; + +// https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition + +export interface Web3Account extends Web3BaseWalletAccount { + address: HexString; + privateKey: HexString; +} + +// To avoid dependency of "dom" library for TS, copying this interface within project +/** This Web Storage API interface provides access to a particular domain's session or local storage. It allows, for example, the addition, modification, or deletion of stored data items. */ +export interface WebStorage { + /** Returns the number of key/value pairs. */ + readonly length: number; + /** + * Removes all key/value pairs, if there are any. + * + * Dispatches a storage event on Window objects holding an equivalent Storage object. + */ + clear(): void; + /** Returns the current value associated with the given key, or null if the given key does not exist. */ + // eslint-disable-next-line @typescript-eslint/ban-types + getItem(key: string): string | null; + /** Returns the name of the nth key, or null if n is greater than or equal to the number of key/value pairs. */ + // eslint-disable-next-line @typescript-eslint/ban-types + key(index: number): string | null; + /** + * Removes the key/value pair with the given key, if a key/value pair with the given key exists. + * + * Dispatches a storage event on Window objects holding an equivalent Storage object. + */ + removeItem(key: string): void; + /** + * Sets the value of the pair identified by key to value, creating a new key/value pair if none existed for key previously. + * + * Throws a "QuotaExceededError" DOMException exception if the new value couldn't be set. (Setting could fail if, e.g., the user has disabled storage for the site, or if the quota has been exceeded.) + * + * Dispatches a storage event on Window objects holding an equivalent Storage object. + */ + setItem(key: string, value: string): void; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [name: string]: any; +} + +export type TypedTransaction = + | Transaction + | AccessListEIP2930Transaction + | FeeMarketEIP1559Transaction; diff --git a/packages/web3-eth-accounts/src/wallet.ts b/packages/web3-eth-accounts/src/wallet.ts new file mode 100644 index 00000000000..8d50efd557a --- /dev/null +++ b/packages/web3-eth-accounts/src/wallet.ts @@ -0,0 +1,440 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3BaseWallet, Web3BaseWalletAccount, KeyStore } from 'web3-types'; +import { isNullish } from 'web3-validator'; +import { WebStorage } from './types.js'; + +type BrowserError = { code: number; name: string }; + +/** + * Wallet is an in memory `wallet` that can hold multiple accounts. + * These accounts can be used when using web3.eth.sendTransaction(). + * + * ### Parameters + * Web3AccountProvider - AccountProvider for the wallet + * + * ```ts + * import Web3 from 'web3'; + * const web3 = new Web3("https://localhost:8454") + * web3.eth.accounts.wallet + * > Wallet(0) [ + * _accountProvider: { + * create: [Function: create], + * privateKeyToAccount: [Function: privateKeyToAccount], + * decrypt: [Function: decrypt] + * }, + * _addressMap: Map(0) {}, + * _defaultKeyName: 'web3js_wallet' + * ] + * ``` + */ +export class Wallet< + T extends Web3BaseWalletAccount = Web3BaseWalletAccount, +> extends Web3BaseWallet { + private readonly _addressMap = new Map(); + private readonly _defaultKeyName = 'web3js_wallet'; + + /** + * Get the storage object of the browser + * + * @returns the storage + */ + public static getStorage(): WebStorage | undefined { + let storage: WebStorage | undefined; + + try { + storage = window.localStorage; + const x = '__storage_test__'; + storage.setItem(x, x); + storage.removeItem(x); + + return storage; + } catch (e: unknown) { + return (e as BrowserError) && + // everything except Firefox + ((e as BrowserError).code === 22 || + // Firefox + (e as BrowserError).code === 1014 || + // test name field too, because code might not be present + // everything except Firefox + (e as BrowserError).name === 'QuotaExceededError' || + // Firefox + (e as BrowserError).name === 'NS_ERROR_DOM_QUOTA_REACHED') && + // acknowledge QuotaExceededError only if there's something already stored + !isNullish(storage) && + storage.length !== 0 + ? storage + : undefined; + } + } + /** + * Generates one or more accounts in the wallet. If wallets already exist they will not be overridden. + * + * @param numberOfAccounts - Number of accounts to create. Leave empty to create an empty wallet. + * @returns The wallet + * ```ts + * web3.eth.accounts.wallet.create(2) + * > Wallet(2) [ + * { + * address: '0xde38310a42B751AE57d30cFFF4a0A3c52A442fCE', + * privateKey: '0x6422c9d28efdcbee93c1d32a5fc6fd6fa081b985487885296cf8c9bbb5872600', + * signTransaction: [Function: signTransaction], + * sign: [Function: sign], + * encrypt: [Function: encrypt] + * }, + * { + * address: '0x766BF755246d924B1d017Fdb5390f38a60166691', + * privateKey: '0x756530f13c0eb636ebdda655335f5dea9921e3362e2e588b0ad59e556f7751f0', + * signTransaction: [Function: signTransaction], + * sign: [Function: sign], + * encrypt: [Function: encrypt] + * }, + * _accountProvider: { + * create: [Function: create], + * privateKeyToAccount: [Function: privateKeyToAccount], + * decrypt: [Function: decrypt] + * }, + * _addressMap: Map(2) { + * '0xde38310a42b751ae57d30cfff4a0a3c52a442fce' => 0, + * '0x766bf755246d924b1d017fdb5390f38a60166691' => 1 + * }, + * _defaultKeyName: 'web3js_wallet' + * ] + * + * ``` + */ + + public create(numberOfAccounts: number) { + for (let i = 0; i < numberOfAccounts; i += 1) { + this.add(this._accountProvider.create()); + } + + return this; + } + + /** + * Adds an account using a private key or account object to the wallet. + * + * @param account - A private key or account object + * @returns The wallet + * + * ```ts + * web3.eth.accounts.wallet.add('0xbce9b59981303e76c4878b1a6d7b088ec6b9dd5c966b7d5f54d7a749ff683387'); + * > Wallet(1) [ + * { + * address: '0x85D70633b90e03e0276B98880286D0D055685ed7', + * privateKey: '0xbce9b59981303e76c4878b1a6d7b088ec6b9dd5c966b7d5f54d7a749ff683387', + * signTransaction: [Function: signTransaction], + * sign: [Function: sign], + * encrypt: [Function: encrypt] + * }, + * _accountProvider: { + * create: [Function: create], + * privateKeyToAccount: [Function: privateKeyToAccount], + * decrypt: [Function: decrypt] + * }, + * _addressMap: Map(1) { '0x85d70633b90e03e0276b98880286d0d055685ed7' => 0 }, + * _defaultKeyName: 'web3js_wallet' + * ] + * ``` + */ + public add(account: T | string): this { + if (typeof account === 'string') { + return this.add(this._accountProvider.privateKeyToAccount(account)); + } + let index = this.length; + const existAccount = this.get(account.address); + if (existAccount) { + console.warn(`Account ${account.address.toLowerCase()} already exists.`); + index = this._addressMap.get(account.address.toLowerCase()) ?? index; + } + this._addressMap.set(account.address.toLowerCase(), index); + this[index] = account; + + return this; + } + /** + * Get the account of the wallet with either the index or public address. + * + * @param addressOrIndex - A string of the address or number index within the wallet. + * @returns The account object or undefined if the account doesn't exist + */ + + public get(addressOrIndex: string | number): T | undefined { + if (typeof addressOrIndex === 'string') { + const index = this._addressMap.get(addressOrIndex.toLowerCase()); + + if (!isNullish(index)) { + return this[index]; + } + + return undefined; + } + + return this[addressOrIndex]; + } + + /** + * Removes an account from the wallet. + * + * @param addressOrIndex - The account address, or index in the wallet. + * @returns true if the wallet was removed. false if it couldn't be found. + * ```ts + * web3.eth.accounts.wallet.add('0xbce9b59981303e76c4878b1a6d7b088ec6b9dd5c966b7d5f54d7a749ff683387'); + * + * web3.eth.accounts.wallet.remove('0x85D70633b90e03e0276B98880286D0D055685ed7'); + * > true + * web3.eth.accounts.wallet + * > Wallet(0) [ + * _accountProvider: { + * create: [Function: create], + * privateKeyToAccount: [Function: privateKeyToAccount], + * decrypt: [Function: decrypt] + * }, + * _addressMap: Map(0) {}, + * _defaultKeyName: 'web3js_wallet' + * ] + * ``` + */ + public remove(addressOrIndex: string | number): boolean { + if (typeof addressOrIndex === 'string') { + const index = this._addressMap.get(addressOrIndex.toLowerCase()); + if (isNullish(index)) { + return false; + } + this._addressMap.delete(addressOrIndex.toLowerCase()); + this.splice(index, 1); + + return true; + } + + if (this[addressOrIndex]) { + this.splice(addressOrIndex, 1); + return true; + } + + return false; + } + + /** + * Securely empties the wallet and removes all its accounts. + * Use this with *caution as it will remove all accounts stored in local wallet. + * + * @returns The wallet object + * ```ts + * + * web3.eth.accounts.wallet.clear(); + * > Wallet(0) [ + * _accountProvider: { + * create: [Function: create], + * privateKeyToAccount: [Function: privateKeyToAccount], + * decrypt: [Function: decrypt] + * }, + * _addressMap: Map(0) {}, + * _defaultKeyName: 'web3js_wallet' + * ] + * ``` + */ + public clear() { + this._addressMap.clear(); + + // Setting length clears the Array in JS. + this.length = 0; + + return this; + } + + /** + * Encrypts all wallet accounts to an array of encrypted keystore v3 objects. + * + * @param password - The password which will be used for encryption + * @param options - encryption options + * @returns An array of the encrypted keystore v3. + * + * ```ts + * web3.eth.accounts.wallet.create(1) + * web3.eth.accounts.wallet.encrypt("abc").then(console.log); + * > [ + * '{"version":3,"id":"fa46e213-a7c3-4844-b903-dd14d39cc7db", + * "address":"fa3e41a401609103c241431cbdee8623ae2a321a","crypto": + * {"ciphertext":"8d179a911d6146ad2924e86bf493ed89b8ff3596ffec0816e761c542016ab13c", + * "cipherparams":{"iv":"acc888c6cf4a19b86846cef0185a7164"},"cipher":"aes-128-ctr", + * "kdf":"scrypt","kdfparams":{"n":8192,"r":8,"p":1,"dklen":32,"salt":"6a743c9b367d15f4758e4f3f3378ff0fd443708d1c64854e07588ea5331823ae"}, + * "mac":"410544c8307e3691fda305eb3722d82c3431f212a87daa119a21587d96698b57"}}' + * ] + * ``` + */ + public async encrypt( + password: string, + options?: Record | undefined, + ): Promise { + return Promise.all(this.map(async (account: T) => account.encrypt(password, options))); + } + + /** + * Decrypts keystore v3 objects. + * + * @param encryptedWallets - An array of encrypted keystore v3 objects to decrypt + * @param password - The password to encrypt with + * @param options - decrypt options for the wallets + * @returns The decrypted wallet object + * + * ```ts + * web3.eth.accounts.wallet.decrypt([ + * { version: 3, + * id: '83191a81-aaca-451f-b63d-0c5f3b849289', + * address: '06f702337909c06c82b09b7a22f0a2f0855d1f68', + * crypto: + * { ciphertext: '7d34deae112841fba86e3e6cf08f5398dda323a8e4d29332621534e2c4069e8d', + * cipherparams: { iv: '497f4d26997a84d570778eae874b2333' }, + * cipher: 'aes-128-ctr', + * kdf: 'scrypt', + * kdfparams: + * { dklen: 32, + * salt: '208dd732a27aa4803bb760228dff18515d5313fd085bbce60594a3919ae2d88d', + * n: 262144, + * r: 8, + * p: 1 }, + * mac: '0062a853de302513c57bfe3108ab493733034bf3cb313326f42cf26ea2619cf9' } }, + * { version: 3, + * id: '7d6b91fa-3611-407b-b16b-396efb28f97e', + * address: 'b5d89661b59a9af0b34f58d19138baa2de48baaf', + * crypto: + * { ciphertext: 'cb9712d1982ff89f571fa5dbef447f14b7e5f142232bd2a913aac833730eeb43', + * cipherparams: { iv: '8cccb91cb84e435437f7282ec2ffd2db' }, + * cipher: 'aes-128-ctr', + * kdf: 'scrypt', + * kdfparams: + * { dklen: 32, + * salt: '08ba6736363c5586434cd5b895e6fe41ea7db4785bd9b901dedce77a1514e8b8', + * n: 262144, + * r: 8, + * p: 1 }, + * mac: 'd2eb068b37e2df55f56fa97a2bf4f55e072bef0dd703bfd917717d9dc54510f0' } } + * ], 'test').then(console.log) + * > Wallet { + * _accountProvider: { + * create: [Function: create], + * privateKeyToAccount: [Function: privateKeyToAccount], + * decrypt: [Function: decrypt] + * }, + * _defaultKeyName: 'web3js_wallet', + * _accounts: { + * '0x85d70633b90e03e0276b98880286d0d055685ed7': { + * address: '0x85D70633b90e03e0276B98880286D0D055685ed7', + * privateKey: '0xbce9b59981303e76c4878b1a6d7b088ec6b9dd5c966b7d5f54d7a749ff683387', + * signTransaction: [Function: signTransaction], + * sign: [Function: sign], + * encrypt: [Function: encrypt] + * }, + * '0x06f702337909c06c82b09b7a22f0a2f0855d1f68': { + * address: '0x06F702337909C06C82B09B7A22F0a2f0855d1F68', + * privateKey: '87a51da18900da7398b3bab03996833138f269f8f66dd1237b98df6b9ce14573', + * signTransaction: [Function: signTransaction], + * sign: [Function: sign], + * encrypt: [Function: encrypt] + * }, + * '0xb5d89661b59a9af0b34f58d19138baa2de48baaf': { + * address: '0xB5d89661B59a9aF0b34f58D19138bAa2de48BAaf', + * privateKey: '7ee61c5282979aae9dd795bb6a54e8bdc2bfe009acb64eb9a67322eec3b3da6e', + * signTransaction: [Function: signTransaction], + * sign: [Function: sign], + * encrypt: [Function: encrypt] + * } + * } + * } + * ``` + */ + public async decrypt( + encryptedWallets: KeyStore[], + password: string, + options?: Record | undefined, + ) { + const results = await Promise.all( + encryptedWallets.map(async (wallet: KeyStore) => + this._accountProvider.decrypt(wallet, password, options), + ), + ); + for (const res of results) { + this.add(res); + } + return this; + } + + /** + * Stores the wallet encrypted and as string in local storage. + * **__NOTE:__** Browser only + * + * @param password - The password to encrypt the wallet + * @param keyName - (optional) The key used for the local storage position, defaults to `"web3js_wallet"`. + * @returns Will return boolean value true if saved properly + * ```ts + * web3.eth.accounts.wallet.save('test#!$'); + * >true + * ``` + */ + public async save(password: string, keyName?: string) { + const storage = Wallet.getStorage(); + + if (!storage) { + throw new Error('Local storage not available.'); + } + + storage.setItem( + keyName ?? this._defaultKeyName, + JSON.stringify(await this.encrypt(password)), + ); + + return true; + } + + /** + * Loads a wallet from local storage and decrypts it. + * **__NOTE:__** Browser only + * + * @param password - The password to decrypt the wallet. + * @param keyName - (optional)The key used for local storage position, defaults to `web3js_wallet"` + * @returns Returns the wallet object + * + * ```ts + * web3.eth.accounts.wallet.save('test#!$'); + * > true + * web3.eth.accounts.wallet.load('test#!$'); + * { defaultKeyName: "web3js_wallet", + * length: 0, + * _accounts: Accounts {_requestManager: RequestManager, givenProvider: Proxy, providers: {…}, _provider: WebsocketProvider, …}, + * [[Prototype]]: Object + * } + * ``` + */ + public async load(password: string, keyName?: string) { + const storage = Wallet.getStorage(); + + if (!storage) { + throw new Error('Local storage not available.'); + } + + const keystore = storage.getItem(keyName ?? this._defaultKeyName); + + if (keystore) { + await this.decrypt((JSON.parse(keystore) as KeyStore[]) || [], password); + } + + return this; + } +} diff --git a/packages/web3-eth-accounts/test/.eslintrc.js b/packages/web3-eth-accounts/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-eth-accounts/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth-accounts/test/config/jest.config.js b/packages/web3-eth-accounts/test/config/jest.config.js new file mode 120000 index 00000000000..b875b48129d --- /dev/null +++ b/packages/web3-eth-accounts/test/config/jest.config.js @@ -0,0 +1 @@ +../../../../templates/jest.config.js.tmpl \ No newline at end of file diff --git a/packages/web3-eth-accounts/test/config/setup.js b/packages/web3-eth-accounts/test/config/setup.js new file mode 100644 index 00000000000..b3c35155474 --- /dev/null +++ b/packages/web3-eth-accounts/test/config/setup.js @@ -0,0 +1,28 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; + +const jestTimeout = 10000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-eth-accounts/test/fixtures/account.ts b/packages/web3-eth-accounts/test/fixtures/account.ts new file mode 100644 index 00000000000..104b5688e97 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/account.ts @@ -0,0 +1,520 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + InvalidKdfError, + InvalidPrivateKeyError, + KeyDerivationError, + PrivateKeyLengthError, + InvalidPasswordError, + IVLengthError, + PBKDF2IterationsError, +} from 'web3-errors'; +import { CipherOptions, KeyStore, Bytes } from 'web3-types'; +import { hexToBytes } from 'web3-utils'; +import { AccessListEIP2930TxData, FeeMarketEIP1559TxData, TxData } from '../../src/tx/types'; +import { sign, signTransaction, encrypt } from '../../src/account'; + +export const validPrivateKeyToAddressData: [string, string][] = [ + [ + '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', + '0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01', + ], + [ + '0x9e93921f9bca358a96aa66efcccbde12850473be95f63c1453e29656feafeb35', + '0x118C2E5F57FD62C2B5b46a5ae9216F4FF4011a07', + ], + [ + '0xf44e0436edb0afd26b09f7b9f1e7a280d2365fc530aebccf893f1158a449d20a', + '0x8824eEA7A9FF8E051e63ACAc443460151CB6fd92', + ], + [ + '0xf4a2b939592564feb35ab10a8e04f6f2fe0943579fb3c9c33505298978b74893', + '0xd5e099c71B797516c10ED0F0d895f429C2781142', + ], +]; + +export const invalidPrivateKeyToAddressData: [ + any, + PrivateKeyLengthError | InvalidPrivateKeyError, +][] = [ + ['', new InvalidPrivateKeyError()], + [new Uint8Array([]), new PrivateKeyLengthError()], +]; + +export const validPrivateKeytoAccountData: [any, any][] = [ + [ + { + address: '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', + ignoreLength: false, + }, + { + address: '0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01', + privateKey: '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', + sign, + signTransaction, + encrypt, + }, + ], + [ + { address: '0x9e93921f9bca358a96aa66efcccbde12850473be95f63c1453e29656feafeb35' }, + { + address: '0x118C2E5F57FD62C2B5b46a5ae9216F4FF4011a07', + privateKey: '0x9e93921f9bca358a96aa66efcccbde12850473be95f63c1453e29656feafeb35', + sign, + signTransaction, + encrypt, + }, + ], + [ + { + address: '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', // ignoreLength parameter set true + ignoreLength: true, + }, + { + address: '0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01', + privateKey: '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', + sign, + signTransaction, + encrypt, + }, + ], +]; + +export const signatureRecoverData: [string, any][] = [ + [ + 'Some long text with integers 1233 and special characters and unicode \u1234 as well.', + { + r: '0x2ac888726c80494b80b63996455d109aef5db27e673dd92f277ac6e48dc300db', + s: '0x3dfc7549744c2a33a03a2eaa0f2837f54c5951b80d5e05257d605bc695c2ae7f', + address: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + privateKey: '0xcb89ec4b01771c6c8272f4c0aafba2f8ee0b101afb22273b786939a8af7c1912', + data: 'Some long text with integers 1233 and special characters and unicode \u1234 as well.', + // signature done with personal_sign + signatureOrV: + '0x2ac888726c80494b80b63996455d109aef5db27e673dd92f277ac6e48dc300db3dfc7549744c2a33a03a2eaa0f2837f54c5951b80d5e05257d605bc695c2ae7f1c', + }, + ], + [ + 'Some data', + { + r: '0xa8037a6116c176a25e6fc224947fde9e79a2deaa0dd8b67b366fbdfdbffc01f9', + s: '0x53e41351267b20d4a89ebfe9c8f03c04de9b345add4a52f15bd026b63c8fb150', + address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + data: 'Some data', + // signature done with personal_sign + signatureOrV: + '0xa8037a6116c176a25e6fc224947fde9e79a2deaa0dd8b67b366fbdfdbffc01f953e41351267b20d4a89ebfe9c8f03c04de9b345add4a52f15bd026b63c8fb1501b', + }, + ], + [ + 'Some data!%$$%&@*', + { + r: '0x05252412b097c5d080c994d1ea12abcee6f1cae23feb225517a0b691a66e1286', + s: '0x6b3f54292f9cfef98f390670b4d010fc4af7fcd46e41d72870602c117b14921c', + address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + data: 'Some data!%$$%&@*', + // signature done with personal_sign + signatureOrV: + '0x05252412b097c5d080c994d1ea12abcee6f1cae23feb225517a0b691a66e12866b3f54292f9cfef98f390670b4d010fc4af7fcd46e41d72870602c117b14921c1c', + }, + ], + [ + '102', + { + r: '0x0442af06beec07a50981386c8ffb38eed2b51decd90980d8c30eda18f112339c', + s: '0x080f6f5fb41313d623971020faa2354dd6b62518b758823c03e8b87d5ea4a649', + address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + data: '102', + // signature done with personal_sign + signatureOrV: + '0x0442af06beec07a50981386c8ffb38eed2b51decd90980d8c30eda18f112339c080f6f5fb41313d623971020faa2354dd6b62518b758823c03e8b87d5ea4a6491b', + }, + ], + [ + // testcase for recover(data, V, R, S) + 'some data', + { + signatureOrV: '0x1c', + prefixedOrR: '0xb9be9700e1c7fd9c3e5e1b511de5c6f62680480a7f8c68962a74375cabe51c18', + r: '0xb9be9700e1c7fd9c3e5e1b511de5c6f62680480a7f8c68962a74375cabe51c18', + s: '0x6fcbbcf5b1bc357d3e56bef2ef8a1b3ad7e48564dd886d7636eb1c18e1e41f1b', + address: '0x54BF9ed7F22b64a5D69Beea57cFCd378763bcdc5', + privateKey: '0x03a0021a87dc354855f900fd15c063bcc9c155c33b8f2321ec294e0933ef29d2', + signature: + '0xb9be9700e1c7fd9c3e5e1b511de5c6f62680480a7f8c68962a74375cabe51c186fcbbcf5b1bc357d3e56bef2ef8a1b3ad7e48564dd886d7636eb1c18e1e41f1b1c', + }, + ], +]; + +export const transactionsTestData: [TxData | AccessListEIP2930TxData | FeeMarketEIP1559TxData][] = [ + [ + // 'TxLegacy' + { + to: '0x118C2E5F57FD62C2B5b46a5ae9216F4FF4011a07', + value: '0x186A0', + gasLimit: '0x520812', + gasPrice: '0x09184e72a000', + data: '', + chainId: 1, + nonce: 0, + }, + ], + [ + // 'Tx1559' + { + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + maxPriorityFeePerGas: '0x3B9ACA00', + maxFeePerGas: '0xB2D05E00', + gasLimit: '0x6A4012', + value: '0x186A0', + data: '', + chainId: 1, + nonce: 0, + }, + ], + [ + // 'Tx2930' + { + chainId: 1, + nonce: 0, + gasPrice: '0x09184e72a000', + gasLimit: '0x2710321', + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + value: '0x186A0', + data: '', + accessList: [ + { + address: '0x0000000000000000000000000000000000000101', + storageKeys: [ + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x00000000000000000000000000000000000000000000000000000000000060a7', + ], + }, + ], + }, + ], +]; + +export const invalidPrivateKeytoAccountData: [ + any, + PrivateKeyLengthError | InvalidPrivateKeyError, +][] = [ + ['', new InvalidPrivateKeyError()], + [new Uint8Array([]), new PrivateKeyLengthError()], +]; + +export const validPrivateKeyToPublicKeyData: [ + Bytes, boolean, string // private key, isCompressed, public key +][] = [ + [ + "0x1e046a882bb38236b646c9f135cf90ad90a140810f439875f2a6dd8e50fa261f", // test string to uncompressed publickey + false, + "0x42beb65f179720abaa3ec9a70a539629cbbc5ec65bb57e7fc78977796837e537662dd17042e6449dc843c281067a4d6d8d1a1775a13c41901670d5de7ee6503a", + ], + [ + "0x1e046a882bb38236b646c9f135cf90ad90a140810f439875f2a6dd8e50fa261f", // test string to compressed publickey + true, + "0x42beb65f179720abaa3ec9a70a539629cbbc5ec65bb57e7fc78977796837e537", + ], + [ + hexToBytes("0xd933beabed94a9f23917576596b2bc64ffeacfe5ded09a99c0feee8369bd295d"), // test uint8array to uncompressed publickey + false, + "0x7891db4ed2d26584b0fa87329c40b398c940c08e7dbeb8e3dad83f34dba284c933fb14b1edd8893fa89af3823fd827ee59044033ca068803030afc294de5f390", + ], + [ + hexToBytes("0xd933beabed94a9f23917576596b2bc64ffeacfe5ded09a99c0feee8369bd295d"), // test uint8array to compressed publickey + true, + "0x7891db4ed2d26584b0fa87329c40b398c940c08e7dbeb8e3dad83f34dba284c9", + ], +]; + +export const validEncryptData: [[any, string | Uint8Array, CipherOptions], KeyStore][] = [ + [ + [ + '0x67f476289210e3bef3c1c75e4de993ff0a00663df00def84e73aa7411eac18a6', + '123', + { + n: 8192, + iv: hexToBytes('0xbfb43120ae00e9de110f8325143a2709'), + salt: hexToBytes( + '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd', + ), + }, + ], + { + version: 3, + address: 'cda9a91875fc35c8ac1320e098e584495d66e47c', + crypto: { + ciphertext: 'cb3e13e3281ff3861a3f0257fad4c9a51b0eb046f9c7821825c46b210f040b8f', + cipherparams: { iv: 'bfb43120ae00e9de110f8325143a2709' }, + cipher: 'aes-128-ctr', + kdf: 'scrypt', + kdfparams: { + n: 8192, + r: 8, + p: 1, + dklen: 32, + salt: '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd', + }, + mac: '46eb4884e82dc43b5aa415faba53cc653b7038e9d61cc32fd643cf8c396189b7', + }, + id: '1d82a61f-2bba-4ebc-a283-56d49d877eb7', + }, + ], + [ + [ + '0x67f476289210e3bef3c1c75e4de993ff0a00663df00def84e73aa7411eac18a6', + '123', + { + n: 8192, + iv: 'bfb43120ae00e9de110f8325143a2709', + salt: '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd', + }, + ], + { + version: 3, + address: 'cda9a91875fc35c8ac1320e098e584495d66e47c', + crypto: { + ciphertext: 'cb3e13e3281ff3861a3f0257fad4c9a51b0eb046f9c7821825c46b210f040b8f', + cipherparams: { iv: 'bfb43120ae00e9de110f8325143a2709' }, + cipher: 'aes-128-ctr', + kdf: 'scrypt', + kdfparams: { + n: 8192, + r: 8, + p: 1, + dklen: 32, + salt: '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd', + }, + mac: '46eb4884e82dc43b5aa415faba53cc653b7038e9d61cc32fd643cf8c396189b7', + }, + id: '1d82a61f-2bba-4ebc-a283-56d49d877eb7', + }, + ], + [ + [ + '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', + '123', + { + iv: 'bfb43120ae00e9de110f8325143a2709', + salt: '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd', + c: 262144, + kdf: 'pbkdf2', + }, + ], + { + version: 3, + id: 'e6a68d89-b03c-4e7d-82e0-079eebaa0da7', + address: 'b8ce9ab6943e0eced004cde8e3bbed6568b2fa01', + crypto: { + ciphertext: '76512156a34105fa6473ad040c666ae7b917d14c06543accc0d2dc28e6073b12', + cipherparams: { iv: 'bfb43120ae00e9de110f8325143a2709' }, + cipher: 'aes-128-ctr', + kdf: 'pbkdf2', + kdfparams: { + dklen: 32, + salt: '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd', + c: 262144, + prf: 'hmac-sha256', + }, + mac: '46eb4884e82dc43b5aa415faba53cc653b7038e9d61cc32fd643cf8c396189b7', + }, + }, + ], +]; + +export const invalidEncryptData: [ + [any, any, any], + ( + | PrivateKeyLengthError + | InvalidKdfError + | InvalidPrivateKeyError + | InvalidPasswordError + | IVLengthError + | PBKDF2IterationsError + ), +][] = [ + [ + ['0x67f476289210e3bef3c1c75e4de993ff0a00663df00def84e73aa7411eac18a', '123', {}], + new PrivateKeyLengthError(), + ], + [ + [ + '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', + '123', + { + iv: 'bfb43120ae00e9de110f8325143a2709', + salt: '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd', + kdf: 'hkdf', + }, + ], + new InvalidKdfError(), + ], + [ + [undefined, '123', {}], // no private key provided + new InvalidPrivateKeyError(), + ], + [ + // no password provided + ['0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', undefined, {}], + new InvalidPasswordError(), + ], + [ + // iv length is not 16 bytes + [ + '0x67f476289210e3bef3c1c75e4de993ff0a00663df00def84e73aa7411eac18a6', + '123', + { + n: 8192, + iv: hexToBytes('0xbfb43120ae00e9de110f8325143a27'), + salt: undefined, + }, + ], + new IVLengthError(), + ], + [ + [ + // iterations is less than 1000, should error + '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', + '123', + { + iv: 'bfb43120ae00e9de110f8325143a2709', + salt: '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd', + c: 100, + kdf: 'pbkdf2', + }, + ], + new PBKDF2IterationsError(), + ], +]; + +export const validRecover: [string, string][] = [ + [ "I hereby confirm that I am the sole beneficial owner of the assets involved in the business relationship with Fiat24. \nI hereby undertake to inform Fiat24 proactively of any changes to the information contained herein.", "0xec4f73260ac14882e65995a09359896a0ae8f16bd0d28b0d9171655b4e85271e07cda040be059fdcbf52709e3c993eb50a89ce33f41617dc090dc80a583e3c4f00",], // v < 27 + ["test", "0xefb42c22baa0143b322e93b24b0903a0ef47a64b716fbb77debbea55a93dec3e4417aff7dce845723240916c6e34cf17c674828b3addfb0afad966334df5b6311b"] // v >= 27 +] + +export const invalidKeyStore: [[any, string]][] = [ + [ + // invalid keystore error, missing id field + [ + { + // invalid kdf + version: 3, + address: 'cda9a91875fc35c8ac1320e098e584495d66e47c', + crypto: { + ciphertext: '222f49d9cb350b0b9a16472ecb389f8128bc9404233c34ba0484db12fb47534e', + cipherparams: { iv: '8c36f74571c7aef9dd4901c9c1cc720a' }, + cipher: 'aes-128-ctr', + kdf: 'hkdf', + kdfparams: { + dklen: 32, + salt: 'ffd22eb8573fb1de0262cc133042e8fd9b193a46f20c09f25f39fae90a7a2896', + n: 8192, + r: 8, + p: 1, + }, + mac: '46162bad0ac2145ddd399bfb47b474959a2845faf69e69bd1b325ec8db3298cb', + }, + }, + '123', + ], + ], +]; + +export const validDecryptData: [[string, string, CipherOptions, string]][] = [ + [ + [ + '0x67f476289210e3bef3c1c75e4de993ff0a00663df00def84e73aa7411eac18a6', + '123', + { + iv: hexToBytes('0xbfb43120ae00e9de110f8325143a2709'), + salt: hexToBytes( + '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd', + ), + }, + '0x67f476289210e3bef3c1c75e4de993ff0a00663df00def84e73aa7411eac18a6', + ], + ], +]; + +export const invalidDecryptData: [[any, string], InvalidKdfError | KeyDerivationError][] = [ + [ + [ + { + // invalid kdf + version: 3, + id: '0e9f63f7-9e7c-4d87-bdf7-02ffe8ee6481', + address: 'cda9a91875fc35c8ac1320e098e584495d66e47c', + crypto: { + ciphertext: '222f49d9cb350b0b9a16472ecb389f8128bc9404233c34ba0484db12fb47534e', + cipherparams: { iv: '8c36f74571c7aef9dd4901c9c1cc720a' }, + cipher: 'aes-128-ctr', + kdf: 'hkdf', + kdfparams: { + dklen: 32, + salt: 'ffd22eb8573fb1de0262cc133042e8fd9b193a46f20c09f25f39fae90a7a2896', + n: 8192, + r: 8, + p: 1, + }, + mac: '46162bad0ac2145ddd399bfb47b474959a2845faf69e69bd1b325ec8db3298cb', + }, + }, + '123', + ], + new InvalidKdfError(), + ], + [ + [ + { + // wrong password + version: 3, + id: 'e6a68d89-b03c-4e7d-82e0-079eebaa0da7', + address: 'b8ce9ab6943e0eced004cde8e3bbed6568b2fa01', + crypto: { + ciphertext: '76512156a34105fa6473ad040c666ae7b917d14c06543accc0d2dc28e6073b12', + cipherparams: { iv: 'bfb43120ae00e9de110f8325143a2709' }, + cipher: 'aes-128-ctr', + kdf: 'pbkdf2', + kdfparams: { + dklen: 32, + salt: '210d0ec956787d865358ac45716e6dd42e68d48e346d795746509523aeb477dd00', + c: 262144, + prf: 'hmac-sha256', + }, + mac: '46eb4884e82dc43b5aa415faba53cc653b7038e9d61cc32fd643cf8c396189b7', + }, + }, + '12', + ], + new KeyDerivationError(), + ], +]; + +export const validHashMessageData: [string, string][] = [ + ['🤗', '0x716ce69c5d2d629c168bc02e24a961456bdc5a362d366119305aea73978a0332'], + [ + 'Some long text with integers 1233 and special characters and unicode \u1234 as well.', + '0xff21294f27c6b1e416215feb0b0b904c552c874c4e11b2314dd3afc1714ed8a8', + ], + ['non utf8 string', '0x8862c6a425a83c082216090e4f0e03b64106189e93c29b11d0112e77b477cce2'], + ['', '0x5f35dce98ba4fba25530a026ed80b2cecdaa31091ba4958b99b52ea1d068adad'], +]; diff --git a/packages/web3-eth-accounts/test/fixtures/accounts.json b/packages/web3-eth-accounts/test/fixtures/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3-eth-accounts/test/fixtures/common/geth-genesis-kiln.json b/packages/web3-eth-accounts/test/fixtures/common/geth-genesis-kiln.json new file mode 100644 index 00000000000..ecaad9b82e2 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/geth-genesis-kiln.json @@ -0,0 +1,865 @@ +{ + "config": { + "chainId": 1337802, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "mergeForkBlock": 1000, + "terminalTotalDifficulty": 20000000000000 + }, + "alloc": { + "0x0000000000000000000000000000000000000000": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000001": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000002": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000003": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000004": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000005": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000006": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000007": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000008": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000009": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000010": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000011": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000012": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000013": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000014": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000015": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000016": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000017": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000018": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000019": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000020": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000021": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000022": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000023": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000024": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000025": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000026": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000027": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000028": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000029": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000030": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000031": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000032": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000033": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000034": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000035": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000036": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000037": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000038": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000039": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000040": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000041": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000042": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000043": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000044": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000045": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000046": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000047": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000048": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000049": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000050": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000051": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000052": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000053": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000054": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000055": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000056": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000057": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000058": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000059": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000060": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000061": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000062": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000063": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000064": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000065": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000066": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000067": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000068": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000069": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000070": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000071": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000072": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000073": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000074": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000075": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000076": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000077": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000078": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000079": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000080": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000081": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000082": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000083": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000084": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000085": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000086": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000087": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000088": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000089": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000090": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000091": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000092": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000093": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000094": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000095": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000096": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000097": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000098": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000099": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009f": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000aa": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ab": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ac": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ad": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ae": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000af": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ba": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000be": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bf": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ca": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ce": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cf": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000da": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000db": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000dc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000dd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000de": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000df": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ea": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000eb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ec": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ed": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ee": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ef": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fa": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fe": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ff": { + "balance": "1" + }, + "0x4242424242424242424242424242424242424242": { + "balance": "0", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a26469706673582212201dd26f37a621703009abf16e77e69c93dc50c79db7f6cc37543e3e0e3decdc9764736f6c634300060b0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000022": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x0000000000000000000000000000000000000000000000000000000000000023": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x0000000000000000000000000000000000000000000000000000000000000024": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x0000000000000000000000000000000000000000000000000000000000000025": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x0000000000000000000000000000000000000000000000000000000000000026": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x0000000000000000000000000000000000000000000000000000000000000027": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x0000000000000000000000000000000000000000000000000000000000000028": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x0000000000000000000000000000000000000000000000000000000000000029": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x000000000000000000000000000000000000000000000000000000000000002a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x000000000000000000000000000000000000000000000000000000000000002b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x000000000000000000000000000000000000000000000000000000000000002c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x000000000000000000000000000000000000000000000000000000000000002d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x000000000000000000000000000000000000000000000000000000000000002e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x0000000000000000000000000000000000000000000000000000000000000030": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x0000000000000000000000000000000000000000000000000000000000000031": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x0000000000000000000000000000000000000000000000000000000000000035": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x0000000000000000000000000000000000000000000000000000000000000036": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x0000000000000000000000000000000000000000000000000000000000000037": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x0000000000000000000000000000000000000000000000000000000000000038": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x0000000000000000000000000000000000000000000000000000000000000039": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x000000000000000000000000000000000000000000000000000000000000003a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x000000000000000000000000000000000000000000000000000000000000003b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x000000000000000000000000000000000000000000000000000000000000003c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x000000000000000000000000000000000000000000000000000000000000003d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x000000000000000000000000000000000000000000000000000000000000003e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x000000000000000000000000000000000000000000000000000000000000003f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x0000000000000000000000000000000000000000000000000000000000000040": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0xf97e180c050e5Ab072211Ad2C213Eb5AEE4DF134": { + "balance": "10000000000000000000000000" + }, + "0x2cA5F489CC1Fd1CEC24747B64E8dE0F4A6A850E1": { + "balance": "10000000000000000000000000" + }, + "0x7203bd333a874D9d329050ecE393820fCD501eaA": { + "balance": "10000000000000000000000000" + }, + "0xA51918aA40D78Ff8be939bf0E8404252875c6aDF": { + "balance": "10000000000000000000000000" + }, + "0xAA81078e6b2121dd7A846690DFdD6b10d7658d8B": { + "balance": "10000000000000000000000000" + }, + "0xFA2d31D8f21c1D1633E9BEB641dF77D21D63ccDd": { + "balance": "10000000000000000000000000" + }, + "0xf751C9c6d60614226fE57D2cAD6e10C856a2ddA3": { + "balance": "10000000000000000000000000" + }, + "0x9cD16887f6A808AEaa65D3c840f059EeA4ca1319": { + "balance": "10000000000000000000000000" + }, + "0x2E07043584F11BFF0AC39c927665DF6c6ebaffFB": { + "balance": "10000000000000000000000000" + }, + "0x60e771E5eCA8E26690920de669520Da210D64A9B": { + "balance": "10000000000000000000000000" + }, + "0xFC4db92C2Cf77CE02fBfd7Da0346d2CbFA66aD59": { + "balance": "10000000000000000000000000" + } + }, + "coinbase": "0x0000000000000000000000000000000000000000", + "difficulty": "0x01", + "extraData": "", + "gasLimit": "0x400000", + "nonce": "0x1234", + "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0" +} diff --git a/packages/web3-eth-accounts/test/fixtures/common/invalid-spurious-dragon.json b/packages/web3-eth-accounts/test/fixtures/common/invalid-spurious-dragon.json new file mode 100644 index 00000000000..f254e2e5ed5 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/invalid-spurious-dragon.json @@ -0,0 +1,32 @@ +{ + "config": { + "chainId": 5, + "homesteadBlock": 0, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 0, + "eip158Block": 1, + "byzantiumBlock": 2, + "constantinopleBlock": 3, + "petersburgBlock": 4, + "istanbulBlock": 5, + "berlinBlock": 6, + "londonBlock": 7, + "clique": { + "period": 15, + "epoch": 30000 + } + }, + "nonce": "0x0", + "timestamp": "0x5c51a607", + "extraData": "0x22466c6578692069732061207468696e6722202d204166726900000000000000e0a2bd4258d2768837baa26a28fe71dc079f84c70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0xa00000", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": null +} diff --git a/packages/web3-eth-accounts/test/fixtures/common/merge/testnetMerge.json b/packages/web3-eth-accounts/test/fixtures/common/merge/testnetMerge.json new file mode 100644 index 00000000000..8f710633be5 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/merge/testnetMerge.json @@ -0,0 +1,81 @@ +{ + "name": "testnetMerge", + "chainId": 55555, + "networkId": 55555, + "defaultHardfork": "istanbul", + "consensus": { + "type": "poa", + "algorithm": "clique", + "clique": { + "period": 15, + "epoch": 30000 + } + }, + "comment": "Private test network", + "url": "[TESTNET_URL]", + "genesis": { + "gasLimit": 1000000, + "difficulty": 1, + "nonce": "0xbb00000000000000", + "extraData": "0xcc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "hardforks": [ + { + "name": "chainstart", + "block": 0 + }, + { + "name": "homestead", + "block": 1 + }, + { + "name": "tangerineWhistle", + "block": 2 + }, + { + "name": "spuriousDragon", + "block": 3 + }, + { + "name": "istanbul", + "block": 8 + }, + { + "name": "muirGlacier", + "block": 10 + }, + { + "name": "berlin", + "block": 12 + }, + { + "name": "london", + "block": 14 + }, + { + "name": "merge", + "block": null, + "ttd": "5000" + }, + { + "name": "shanghai", + "block": null + } + ], + "bootstrapNodes": [ + { + "ip": "10.0.0.1", + "port": 30303, + "id": "11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "location": "", + "comment": "" + }, + { + "ip": "10.0.0.2", + "port": 30303, + "id": "22000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "location": "", + "comment": "" + } + ] +} diff --git a/packages/web3-eth-accounts/test/fixtures/common/merge/testnetPOS.json b/packages/web3-eth-accounts/test/fixtures/common/merge/testnetPOS.json new file mode 100644 index 00000000000..9ed75d0566d --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/merge/testnetPOS.json @@ -0,0 +1,46 @@ +{ + "name": "testnetPOS", + "chainId": 66666, + "networkId": 66666, + "defaultHardfork": "chainstart", + "consensus": { + "type": "pos", + "algorithm": "casper", + "casper": {} + }, + "comment": "Private test network (TODO: genesis block not constructed according to POS block rules yet)", + "url": "[TESTNET_URL]", + "genesis": { + "gasLimit": 1000000, + "difficulty": 1, + "nonce": "0xbb00000000000000", + "extraData": "0xcc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "hardforks": [ + { + "name": "chainstart", + "block": 0, + "ttd": "0" + }, + { + "name": "shanghai", + "block": 5 + } + ], + "bootstrapNodes": [ + { + "ip": "10.0.0.1", + "port": 30303, + "id": "11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "location": "", + "comment": "" + }, + { + "ip": "10.0.0.2", + "port": 30303, + "id": "22000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "location": "", + "comment": "" + } + ] +} diff --git a/packages/web3-eth-accounts/test/fixtures/common/no-extra-data.json b/packages/web3-eth-accounts/test/fixtures/common/no-extra-data.json new file mode 100644 index 00000000000..c7bbc4c5af4 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/no-extra-data.json @@ -0,0 +1,37 @@ +{ + "config": { + "chainId": 1, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "clique": { + "period": 5, + "epoch": 30000 + }, + "terminalTotalDifficulty": 0 + }, + "nonce": "0x42", + "timestamp": "16", + "extraData": "", + "gasLimit": "0x1C9C380", + "difficulty": "0x400000000", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x6d6172697573766477000000" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": "0x7" +} diff --git a/packages/web3-eth-accounts/test/fixtures/common/poa.json b/packages/web3-eth-accounts/test/fixtures/common/poa.json new file mode 100644 index 00000000000..68b5a3eaef8 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/poa.json @@ -0,0 +1,804 @@ +{ + "config": { + "chainId": 15470, + "homesteadBlock": 0, + "eip150Block": 20, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 40, + "eip158Block": 40, + "byzantiumBlock": 60, + "constantinopleBlock": 80, + "petersburgBlock": 100, + "istanbulBlock": 120, + "berlinBlock": 140, + "londonBlock": 160, + "clique": { + "period": 15, + "epoch": 30000 + } + }, + "nonce": "0x0", + "timestamp": "0x61279291", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000728bb68502bfcd91ce4c7a692a0c0773ced5cff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x47b760", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "0000000000000000000000000000000000000000": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000002": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000003": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000004": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000005": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000006": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000007": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000008": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000009": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000010": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000011": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000012": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000013": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000014": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000015": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000016": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000017": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000018": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000019": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000020": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000021": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000022": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000023": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000024": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000025": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000026": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000027": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000028": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000029": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000030": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000031": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000032": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000033": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000034": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000035": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000036": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000037": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000038": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000039": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000040": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000041": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000042": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000043": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000044": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000045": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000046": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000047": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000048": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000049": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000050": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000051": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000052": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000053": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000054": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000055": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000056": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000057": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000058": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000059": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000060": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000061": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000062": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000063": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000064": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000065": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000066": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000067": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000068": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000069": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000070": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000071": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000072": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000073": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000074": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000075": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000076": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000077": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000078": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000079": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000080": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000081": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000082": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000083": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000084": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000085": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000086": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000087": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000088": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000089": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000090": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000091": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000092": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000093": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000094": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000095": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000096": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000097": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000098": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000099": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009f": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000aa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ab": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ac": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ad": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ae": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000af": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ba": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000be": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ca": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ce": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000da": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000db": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000de": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000df": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ea": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000eb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ec": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ed": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ee": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ef": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fe": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ff": { + "balance": "0x1" + }, + "728bb68502bfcd91ce4c7a692a0c0773ced5cff0": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": null +} diff --git a/packages/web3-eth-accounts/test/fixtures/common/post-merge-hardfork.json b/packages/web3-eth-accounts/test/fixtures/common/post-merge-hardfork.json new file mode 100644 index 00000000000..55748a721cd --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/post-merge-hardfork.json @@ -0,0 +1,44 @@ +{ + "config": { + "chainId": 1, + "homesteadBlock": 0, + "eip150Block": 0, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "shanghaiTime": 8, + "clique": { + "period": 5, + "epoch": 30000 + }, + "terminalTotalDifficulty": 2, + "terminalTotalDifficultyPassed": true + }, + "nonce": "0x42", + "timestamp": "0x0", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x1C9C380", + "difficulty": "0x0", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x6d6172697573766477000000" + }, + "0x8A04d14125D0FDCDc742F4A05C051De07232EDa4": { + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a714610044578063228951181461008c578063621fd130146101a2578063c5f2892f1461022c575b600080fd5b34801561005057600080fd5b506100786004803603602081101561006757600080fd5b50356001600160e01b031916610253565b604080519115158252519081900360200190f35b6101a0600480360360808110156100a257600080fd5b8101906020810181356401000000008111156100bd57600080fd5b8201836020820111156100cf57600080fd5b803590602001918460018302840111640100000000831117156100f157600080fd5b91939092909160208101903564010000000081111561010f57600080fd5b82018360208201111561012157600080fd5b8035906020019184600183028401116401000000008311171561014357600080fd5b91939092909160208101903564010000000081111561016157600080fd5b82018360208201111561017357600080fd5b8035906020019184600183028401116401000000008311171561019557600080fd5b91935091503561028a565b005b3480156101ae57600080fd5b506101b7610ce6565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f15781810151838201526020016101d9565b50505050905090810190601f16801561021e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023857600080fd5b50610241610cf8565b60408051918252519081900360200190f35b60006001600160e01b031982166301ffc9a760e01b148061028457506001600160e01b03198216638564090760e01b145b92915050565b603086146102c95760405162461bcd60e51b81526004018080602001828103825260268152602001806112516026913960400191505060405180910390fd5b602084146103085760405162461bcd60e51b81526004018080602001828103825260368152602001806111e86036913960400191505060405180910390fd5b606082146103475760405162461bcd60e51b81526004018080602001828103825260298152602001806112c46029913960400191505060405180910390fd5b670de0b6b3a764000034101561038e5760405162461bcd60e51b815260040180806020018281038252602681526020018061129e6026913960400191505060405180910390fd5b633b9aca003406156103d15760405162461bcd60e51b815260040180806020018281038252603381526020018061121e6033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff81111561041f5760405162461bcd60e51b81526004018080602001828103825260278152602001806112776027913960400191505060405180910390fd5b606061042a82610fc6565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a61045f602054610fc6565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f01601f191690910187810386528c815260200190508c8c808284376000838201819052601f909101601f191690920188810386528c5181528c51602091820193918e019250908190849084905b838110156104f65781810151838201526020016104de565b50505050905090810190601f1680156105235780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f909101601f19169092018881038452895181528951602091820193918b019250908190849084905b8381101561057f578181015183820152602001610567565b50505050905090810190601f1680156105ac5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284376fffffffffffffffffffffffffffffffff199094169190930190815260408051600f19818403018152601090920190819052815191955093508392506020850191508083835b602083106106415780518252601f199092019160209182019101610622565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610680573d6000803e3d6000fd5b5050506040513d602081101561069557600080fd5b5051905060006002806106ab6040848a8c61114a565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106107015780518252601f1990920191602091820191016106e2565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610740573d6000803e3d6000fd5b5050506040513d602081101561075557600080fd5b50516002610766896040818d61114a565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106107c15780518252601f1990920191602091820191016107a2565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610800573d6000803e3d6000fd5b5050506040513d602081101561081557600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b6020831061086b5780518252601f19909201916020918201910161084c565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa1580156108aa573d6000803e3d6000fd5b5050506040513d60208110156108bf57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b6020831061092e5780518252601f19909201916020918201910161090f565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801561096d573d6000803e3d6000fd5b5050506040513d602081101561098257600080fd5b50516040518651600291889160009188916020918201918291908601908083835b602083106109c25780518252601f1990920191602091820191016109a3565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610a495780518252601f199092019160209182019101610a2a565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610a88573d6000803e3d6000fd5b5050506040513d6020811015610a9d57600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610af35780518252601f199092019160209182019101610ad4565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610b32573d6000803e3d6000fd5b5050506040513d6020811015610b4757600080fd5b50519050858114610b895760405162461bcd60e51b81526004018080602001828103825260548152602001806111946054913960600191505060405180910390fd5b60205463ffffffff11610bcd5760405162461bcd60e51b81526004018080602001828103825260218152602001806111736021913960400191505060405180910390fd5b602080546001019081905560005b6020811015610cda578160011660011415610c0d578260008260208110610bfe57fe5b015550610cdd95505050505050565b600260008260208110610c1c57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610c745780518252601f199092019160209182019101610c55565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610cb3573d6000803e3d6000fd5b5050506040513d6020811015610cc857600080fd5b50519250600282049150600101610bdb565b50fe5b50505050505050565b6060610cf3602054610fc6565b905090565b6020546000908190815b6020811015610ea9578160011660011415610ddb57600260008260208110610d2657fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610d7e5780518252601f199092019160209182019101610d5f565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610dbd573d6000803e3d6000fd5b5050506040513d6020811015610dd257600080fd5b50519250610e9b565b60028360218360208110610deb57fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610e425780518252601f199092019160209182019101610e23565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610e81573d6000803e3d6000fd5b5050506040513d6020811015610e9657600080fd5b505192505b600282049150600101610d02565b50600282610eb8602054610fc6565b600060401b6040516020018084815260200183805190602001908083835b60208310610ef55780518252601f199092019160209182019101610ed6565b51815160209384036101000a600019018019909216911617905267ffffffffffffffff199590951692019182525060408051808303600719018152601890920190819052815191955093508392850191508083835b60208310610f695780518252601f199092019160209182019101610f4a565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610fa8573d6000803e3d6000fd5b5050506040513d6020811015610fbd57600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b8260008151811061100057fe5b60200101906001600160f81b031916908160001a9053508060061a60f81b8260018151811061102b57fe5b60200101906001600160f81b031916908160001a9053508060051a60f81b8260028151811061105657fe5b60200101906001600160f81b031916908160001a9053508060041a60f81b8260038151811061108157fe5b60200101906001600160f81b031916908160001a9053508060031a60f81b826004815181106110ac57fe5b60200101906001600160f81b031916908160001a9053508060021a60f81b826005815181106110d757fe5b60200101906001600160f81b031916908160001a9053508060011a60f81b8260068151811061110257fe5b60200101906001600160f81b031916908160001a9053508060001a60f81b8260078151811061112d57fe5b60200101906001600160f81b031916908160001a90535050919050565b60008085851115611159578182fd5b83861115611165578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a164736f6c634300060b000a", + "balance": "0x0" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": "0x7" +} diff --git a/packages/web3-eth-accounts/test/fixtures/common/post-merge.json b/packages/web3-eth-accounts/test/fixtures/common/post-merge.json new file mode 100644 index 00000000000..8b5da63e3f7 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/post-merge.json @@ -0,0 +1,35 @@ +{ + "config": { + "chainId": 1, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "clique": { + "period": 5, + "epoch": 30000 + }, + "terminalTotalDifficulty": 0 + }, + "nonce": "0x42", + "timestamp": "0x0", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x1C9C380", + "difficulty": "0x400000000", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "balance": "0x6d6172697573766477000000" } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": "0x7" +} diff --git a/packages/web3-eth-accounts/test/fixtures/common/shanghai-time.json b/packages/web3-eth-accounts/test/fixtures/common/shanghai-time.json new file mode 100644 index 00000000000..c5848d151a3 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/shanghai-time.json @@ -0,0 +1,853 @@ +{ + "config": { + "chainId": 1337803, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "mergeForkBlock": 0, + "arrowGlacierBlock": 0, + "grayGlacierBlock": 0, + "shanghaiTime": 1668699476, + "terminalTotalDifficulty": 9 + }, + "alloc": { + "0x0000000000000000000000000000000000000000": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000001": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000002": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000003": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000004": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000005": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000006": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000007": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000008": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000009": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000010": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000011": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000012": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000013": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000014": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000015": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000016": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000017": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000018": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000019": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000020": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000021": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000022": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000023": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000024": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000025": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000026": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000027": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000028": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000029": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000030": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000031": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000032": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000033": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000034": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000035": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000036": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000037": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000038": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000039": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000040": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000041": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000042": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000043": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000044": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000045": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000046": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000047": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000048": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000049": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000050": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000051": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000052": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000053": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000054": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000055": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000056": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000057": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000058": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000059": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000060": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000061": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000062": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000063": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000064": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000065": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000066": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000067": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000068": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000069": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000070": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000071": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000072": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000073": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000074": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000075": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000076": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000077": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000078": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000079": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000080": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000081": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000082": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000083": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000084": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000085": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000086": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000087": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000088": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000089": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000090": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000091": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000092": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000093": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000094": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000095": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000096": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000097": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000098": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000099": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009f": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000aa": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ab": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ac": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ad": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ae": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000af": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ba": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000be": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bf": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ca": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ce": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cf": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000da": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000db": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000dc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000dd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000de": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000df": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ea": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000eb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ec": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ed": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ee": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ef": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fa": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fe": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ff": { + "balance": "1" + }, + "0x4242424242424242424242424242424242424242": { + "balance": "0", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a26469706673582212201dd26f37a621703009abf16e77e69c93dc50c79db7f6cc37543e3e0e3decdc9764736f6c634300060b0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000022": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x0000000000000000000000000000000000000000000000000000000000000023": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x0000000000000000000000000000000000000000000000000000000000000024": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x0000000000000000000000000000000000000000000000000000000000000025": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x0000000000000000000000000000000000000000000000000000000000000026": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x0000000000000000000000000000000000000000000000000000000000000027": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x0000000000000000000000000000000000000000000000000000000000000028": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x0000000000000000000000000000000000000000000000000000000000000029": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x000000000000000000000000000000000000000000000000000000000000002a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x000000000000000000000000000000000000000000000000000000000000002b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x000000000000000000000000000000000000000000000000000000000000002c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x000000000000000000000000000000000000000000000000000000000000002d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x000000000000000000000000000000000000000000000000000000000000002e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x0000000000000000000000000000000000000000000000000000000000000030": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x0000000000000000000000000000000000000000000000000000000000000031": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x0000000000000000000000000000000000000000000000000000000000000035": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x0000000000000000000000000000000000000000000000000000000000000036": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x0000000000000000000000000000000000000000000000000000000000000037": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x0000000000000000000000000000000000000000000000000000000000000038": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x0000000000000000000000000000000000000000000000000000000000000039": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x000000000000000000000000000000000000000000000000000000000000003a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x000000000000000000000000000000000000000000000000000000000000003b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x000000000000000000000000000000000000000000000000000000000000003c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x000000000000000000000000000000000000000000000000000000000000003d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x000000000000000000000000000000000000000000000000000000000000003e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x000000000000000000000000000000000000000000000000000000000000003f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x0000000000000000000000000000000000000000000000000000000000000040": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0xE7c180eAdA8f60D63e9671867b2e0CA2649207A8": { + "balance": "1000000000000000000000000000" + }, + "0xD84044e7ba939A4a9b35aE427553F39c2B2f26A4": { + "balance": "1000000000000000000000000000" + }, + "0x90c91d6742113a07484cc1E2D4Ba1Fa3AB59aD16": { + "balance": "1000000000000000000000000000" + }, + "0xE0B1b0408471cb254a82B6367caB9c8C5A9B3795": { + "balance": "1000000000000000000000000000" + }, + "0x4ee57bc5947456eBB2E06Dd47e2614Cbed39b6Bc": { + "balance": "1000000000000000000000000000" + }, + "0x191db72a1700646167a40593e6DF44267Fd481Bf": { + "balance": "1000000000000000000000000000" + } + }, + "coinbase": "0x0000000000000000000000000000000000000000", + "difficulty": "0x01", + "extraData": "", + "gasLimit": "0x400000", + "nonce": "0x1234", + "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "1668697340" +} diff --git a/packages/web3-eth-accounts/test/fixtures/common/testnet.json b/packages/web3-eth-accounts/test/fixtures/common/testnet.json new file mode 100644 index 00000000000..5062cb7ab4e --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/testnet.json @@ -0,0 +1,56 @@ +{ + "name": "testnet", + "chainId": 12345, + "networkId": 12345, + "defaultHardfork": "byzantium", + "consensus": { + "type": "pow", + "algorithm": "ethash" + }, + "comment": "Private test network", + "url": "[TESTNET_URL]", + "genesis": { + "gasLimit": 1000000, + "difficulty": 1, + "nonce": "0xbb00000000000000", + "extraData": "0xcc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "hardforks": [ + { + "name": "chainstart", + "block": 0 + }, + { + "name": "homestead", + "block": 1 + }, + { + "name": "tangerineWhistle", + "block": 2 + }, + { + "name": "spuriousDragon", + "block": 3 + }, + { + "name": "byzantium", + "block": 4 + } + ], + "bootstrapNodes": [ + { + "ip": "10.0.0.1", + "port": 30303, + "id": "11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "location": "", + "comment": "" + }, + { + "ip": "10.0.0.2", + "port": 30303, + "id": "22000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "location": "", + "comment": "" + } + ] +} diff --git a/packages/web3-eth-accounts/test/fixtures/common/testnet2.json b/packages/web3-eth-accounts/test/fixtures/common/testnet2.json new file mode 100644 index 00000000000..44b5b2dab4d --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/testnet2.json @@ -0,0 +1,60 @@ +{ + "name": "testnet2", + "chainId": 22222, + "networkId": 22222, + "defaultHardfork": "istanbul", + "consensus": { + "type": "poa", + "algorithm": "clique", + "clique": { + "period": 15, + "epoch": 30000 + } + }, + "comment": "Private test network", + "url": "[TESTNET_URL]", + "genesis": { + "gasLimit": 1000000, + "difficulty": 1, + "nonce": "0xbb00000000000000", + "extraData": "0xcc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "hardforks": [ + { + "name": "chainstart", + "block": 0 + }, + { + "name": "homestead", + "block": 1 + }, + { + "name": "tangerineWhistle", + "block": 2 + }, + { + "name": "spuriousDragon", + "block": 3 + }, + { + "name": "istanbul", + "block": 10 + } + ], + "bootstrapNodes": [ + { + "ip": "10.0.0.1", + "port": 30303, + "id": "11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "location": "", + "comment": "" + }, + { + "ip": "10.0.0.2", + "port": 30303, + "id": "22000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "location": "", + "comment": "" + } + ] +} diff --git a/packages/web3-eth-accounts/test/fixtures/common/testnet3.json b/packages/web3-eth-accounts/test/fixtures/common/testnet3.json new file mode 100644 index 00000000000..dafaa9c32e5 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/testnet3.json @@ -0,0 +1,60 @@ +{ + "name": "testnet3", + "chainId": 33333, + "networkId": 33333, + "defaultHardfork": "istanbul", + "consensus": { + "type": "poa", + "algorithm": "clique", + "clique": { + "period": 15, + "epoch": 30000 + } + }, + "comment": "Private test network", + "url": "[TESTNET_URL]", + "genesis": { + "gasLimit": 1000000, + "difficulty": 1, + "nonce": "0xbb00000000000000", + "extraData": "0xcc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "hardforks": [ + { + "name": "chainstart", + "block": 0 + }, + { + "name": "homestead", + "block": 1 + }, + { + "name": "tangerineWhistle", + "block": 2 + }, + { + "name": "spuriousDragon", + "block": 3 + }, + { + "name": "istanbul", + "block": 10 + } + ], + "bootstrapNodes": [ + { + "ip": "10.0.0.1", + "port": 30303, + "id": "11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "location": "", + "comment": "" + }, + { + "ip": "10.0.0.2", + "port": 30303, + "id": "22000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "location": "", + "comment": "" + } + ] +} diff --git a/packages/web3-eth-accounts/test/fixtures/common/testnetValid.json b/packages/web3-eth-accounts/test/fixtures/common/testnetValid.json new file mode 100644 index 00000000000..522990e3d6d --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/testnetValid.json @@ -0,0 +1,814 @@ +{ + "config": { + "chainId": 5, + "homesteadBlock": 0, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 1561651, + "berlinBlock": 4460644, + "londonBlock": 5062605, + "clique": { + "period": 15, + "epoch": 30000 + } + }, + "nonce": "0x042", + "timestamp": "0x5c51a607", + "extraData": "0x22466c6578692069732061207468696e6722202d204166726900000000000000e0a2bd4258d2768837baa26a28fe71dc079f84c70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0xa00000", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "0000000000000000000000000000000000000000": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000002": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000003": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000004": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000005": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000006": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000007": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000008": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000009": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000010": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000011": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000012": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000013": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000014": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000015": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000016": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000017": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000018": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000019": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000020": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000021": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000022": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000023": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000024": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000025": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000026": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000027": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000028": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000029": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000030": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000031": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000032": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000033": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000034": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000035": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000036": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000037": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000038": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000039": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000040": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000041": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000042": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000043": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000044": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000045": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000046": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000047": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000048": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000049": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000050": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000051": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000052": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000053": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000054": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000055": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000056": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000057": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000058": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000059": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000060": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000061": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000062": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000063": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000064": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000065": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000066": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000067": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000068": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000069": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000070": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000071": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000072": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000073": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000074": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000075": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000076": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000077": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000078": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000079": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000080": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000081": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000082": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000083": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000084": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000085": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000086": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000087": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000088": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000089": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000090": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000091": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000092": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000093": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000094": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000095": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000096": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000097": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000098": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000099": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009f": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000aa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ab": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ac": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ad": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ae": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000af": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ba": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000be": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ca": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ce": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000da": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000db": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000de": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000df": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ea": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000eb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ec": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ed": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ee": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ef": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fe": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ff": { + "balance": "0x1" + }, + "4c2ae482593505f0163cdefc073e81c63cda4107": { + "balance": "0x152d02c7e14af6800000" + }, + "a8e8f14732658e4b51e8711931053a8a69baf2b1": { + "balance": "0x152d02c7e14af6800000" + }, + "d9a5179f091d85051d3c982785efd1455cec8699": { + "balance": "0x84595161401484a000000" + }, + "e0a2bd4258d2768837baa26a28fe71dc079f84c7": { + "balance": "0x4a47e3c12448f4ad000000" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": null +} diff --git a/packages/web3-eth-accounts/test/fixtures/common/withdrawals-devnet.json b/packages/web3-eth-accounts/test/fixtures/common/withdrawals-devnet.json new file mode 100644 index 00000000000..c5848d151a3 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/common/withdrawals-devnet.json @@ -0,0 +1,853 @@ +{ + "config": { + "chainId": 1337803, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "mergeForkBlock": 0, + "arrowGlacierBlock": 0, + "grayGlacierBlock": 0, + "shanghaiTime": 1668699476, + "terminalTotalDifficulty": 9 + }, + "alloc": { + "0x0000000000000000000000000000000000000000": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000001": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000002": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000003": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000004": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000005": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000006": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000007": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000008": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000009": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000010": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000011": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000012": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000013": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000014": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000015": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000016": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000017": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000018": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000019": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000020": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000021": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000022": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000023": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000024": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000025": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000026": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000027": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000028": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000029": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000030": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000031": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000032": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000033": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000034": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000035": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000036": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000037": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000038": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000039": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000040": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000041": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000042": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000043": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000044": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000045": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000046": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000047": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000048": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000049": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000050": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000051": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000052": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000053": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000054": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000055": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000056": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000057": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000058": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000059": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000060": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000061": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000062": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000063": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000064": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000065": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000066": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000067": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000068": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000069": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000070": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000071": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000072": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000073": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000074": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000075": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000076": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000077": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000078": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000079": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000080": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000081": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000082": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000083": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000084": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000085": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000086": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000087": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000088": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000089": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000090": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000091": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000092": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000093": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000094": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000095": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000096": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000097": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000098": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000099": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009f": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000aa": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ab": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ac": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ad": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ae": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000af": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ba": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000be": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bf": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ca": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ce": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cf": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000da": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000db": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000dc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000dd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000de": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000df": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ea": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000eb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ec": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ed": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ee": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ef": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fa": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fe": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ff": { + "balance": "1" + }, + "0x4242424242424242424242424242424242424242": { + "balance": "0", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a26469706673582212201dd26f37a621703009abf16e77e69c93dc50c79db7f6cc37543e3e0e3decdc9764736f6c634300060b0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000022": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x0000000000000000000000000000000000000000000000000000000000000023": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x0000000000000000000000000000000000000000000000000000000000000024": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x0000000000000000000000000000000000000000000000000000000000000025": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x0000000000000000000000000000000000000000000000000000000000000026": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x0000000000000000000000000000000000000000000000000000000000000027": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x0000000000000000000000000000000000000000000000000000000000000028": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x0000000000000000000000000000000000000000000000000000000000000029": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x000000000000000000000000000000000000000000000000000000000000002a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x000000000000000000000000000000000000000000000000000000000000002b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x000000000000000000000000000000000000000000000000000000000000002c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x000000000000000000000000000000000000000000000000000000000000002d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x000000000000000000000000000000000000000000000000000000000000002e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x0000000000000000000000000000000000000000000000000000000000000030": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x0000000000000000000000000000000000000000000000000000000000000031": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x0000000000000000000000000000000000000000000000000000000000000035": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x0000000000000000000000000000000000000000000000000000000000000036": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x0000000000000000000000000000000000000000000000000000000000000037": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x0000000000000000000000000000000000000000000000000000000000000038": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x0000000000000000000000000000000000000000000000000000000000000039": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x000000000000000000000000000000000000000000000000000000000000003a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x000000000000000000000000000000000000000000000000000000000000003b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x000000000000000000000000000000000000000000000000000000000000003c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x000000000000000000000000000000000000000000000000000000000000003d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x000000000000000000000000000000000000000000000000000000000000003e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x000000000000000000000000000000000000000000000000000000000000003f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x0000000000000000000000000000000000000000000000000000000000000040": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0xE7c180eAdA8f60D63e9671867b2e0CA2649207A8": { + "balance": "1000000000000000000000000000" + }, + "0xD84044e7ba939A4a9b35aE427553F39c2B2f26A4": { + "balance": "1000000000000000000000000000" + }, + "0x90c91d6742113a07484cc1E2D4Ba1Fa3AB59aD16": { + "balance": "1000000000000000000000000000" + }, + "0xE0B1b0408471cb254a82B6367caB9c8C5A9B3795": { + "balance": "1000000000000000000000000000" + }, + "0x4ee57bc5947456eBB2E06Dd47e2614Cbed39b6Bc": { + "balance": "1000000000000000000000000000" + }, + "0x191db72a1700646167a40593e6DF44267Fd481Bf": { + "balance": "1000000000000000000000000000" + } + }, + "coinbase": "0x0000000000000000000000000000000000000000", + "difficulty": "0x01", + "extraData": "", + "gasLimit": "0x400000", + "nonce": "0x1234", + "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "1668697340" +} diff --git a/packages/web3-eth-accounts/test/fixtures/json/eip1559.json b/packages/web3-eth-accounts/test/fixtures/json/eip1559.json new file mode 100644 index 00000000000..3d0285b3fb5 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/json/eip1559.json @@ -0,0 +1,102 @@ +[ + { + "nonce": 819, + "value": 43203529, + "gasLimit": 35552, + "maxPriorityFeePerGas": 75853, + "maxFeePerGas": 121212, + "to": "0x000000000000000000000000000000000000aaaa", + "privateKey": "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "signedTransactionRLP": "0xb87102f86e048203338301284d8301d97c828ae094000000000000000000000000000000000000aaaa8402933bc980c080a00f924cb68412c8f1cfd74d9b581c71eeaf94fff6abdde3e5b02ca6b2931dcf47a07dd1c50027c3e31f8b565e25ce68a5072110f61fce5eee81b195dd51273c2f83" + }, + { + "nonce": 353, + "value": 61901619, + "gasLimit": 32593, + "maxPriorityFeePerGas": 38850, + "maxFeePerGas": 136295, + "to": "0x000000000000000000000000000000000000aaaa", + "privateKey": "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "signedTransactionRLP": "0xb87002f86d048201618297c283021467827f5194000000000000000000000000000000000000aaaa8403b08b3380c080a08caf712f72489da6f1a634b651b4b1c7d9be7d1e8d05ea76c1eccee3bdfb86a5a06aecc106f588ce51e112f5e9ea7aba3e089dc7511718821d0e0cd52f52af4e45" + }, + { + "nonce": 985, + "value": 32531825, + "gasLimit": 68541, + "maxPriorityFeePerGas": 66377, + "maxFeePerGas": 136097, + "to": "0x000000000000000000000000000000000000aaaa", + "privateKey": "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "signedTransactionRLP": "0xb87202f86f048203d983010349830213a183010bbd94000000000000000000000000000000000000aaaa8401f0657180c001a08c03a86e85789ee9a1b42fa0a86d316fca262694f8c198df11f194678c2c2d35a028f8e7de02b35014a17b6d28ff8c7e7be6860e7265ac162fb721f1aeae75643c" + }, + { + "nonce": 623, + "value": 21649799, + "gasLimit": 57725, + "maxPriorityFeePerGas": 74140, + "maxFeePerGas": 81173, + "to": "0x000000000000000000000000000000000000aaaa", + "privateKey": "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "signedTransactionRLP": "0xb87102f86e0482026f8301219c83013d1582e17d94000000000000000000000000000000000000aaaa84014a598780c001a0b87c4c8c505d2d692ac77ba466547e79dd60fe7ecd303d520bf6e8c7085e3182a06dc7d00f5e68c3f3ebe8ae35a90d46051afde620ac12e43cae9560a29b13e7fb" + }, + { + "nonce": 972, + "value": 94563383, + "gasLimit": 65254, + "maxPriorityFeePerGas": 42798, + "maxFeePerGas": 103466, + "to": "0x000000000000000000000000000000000000aaaa", + "privateKey": "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "signedTransactionRLP": "0xb87002f86d048203cc82a72e8301942a82fee694000000000000000000000000000000000000aaaa8405a2ec3780c001a006cf07af78c187db104496c58d679f37fcd2d5790970cecf9a59fe4a5321b375a039f3faafc71479d283a5b1e66a86b19c4bdc516655d89dbe57d9747747c01dfe" + }, + { + "nonce": 588, + "value": 99359647, + "gasLimit": 37274, + "maxPriorityFeePerGas": 87890, + "maxFeePerGas": 130273, + "to": "0x000000000000000000000000000000000000aaaa", + "privateKey": "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "signedTransactionRLP": "0xb87102f86e0482024c830157528301fce182919a94000000000000000000000000000000000000aaaa8405ec1b9f80c080a03e2f59ac9ca852034c2c1da35a742ca19fdd910aa5d2ed49ab8ad27a2fcb2b10a03ac1c29c26723c58f91400fb6dfb5f5b837467b1c377541b47dae474dddbe469" + }, + { + "nonce": 900, + "value": 30402257, + "gasLimit": 76053, + "maxPriorityFeePerGas": 8714, + "maxFeePerGas": 112705, + "to": "0x000000000000000000000000000000000000aaaa", + "privateKey": "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "signedTransactionRLP": "0xb87102f86e0482038482220a8301b8418301291594000000000000000000000000000000000000aaaa8401cfe6d180c001a0f7ffc5bca2512860f8236360159bf303dcfab71546b6a0032df0306f3739d0c4a05d38fe2c4edebdc1edc157034f780c53a0e5ae089e57220745bd48bcb10cdf87" + }, + { + "nonce": 709, + "value": 6478043, + "gasLimit": 28335, + "maxPriorityFeePerGas": 86252, + "maxFeePerGas": 94636, + "to": "0x000000000000000000000000000000000000aaaa", + "privateKey": "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "signedTransactionRLP": "0xb87002f86d048202c5830150ec830171ac826eaf94000000000000000000000000000000000000aaaa8362d8db80c001a0a61a5710512f346c9996377f7b564ccb64c73a5fdb615499adb1250498f3e01aa002d10429572cecfaa911a58bbe05f2b26e4c3aee3402202153a93692849add11" + }, + { + "nonce": 939, + "value": 2782905, + "gasLimit": 45047, + "maxPriorityFeePerGas": 45216, + "maxFeePerGas": 91648, + "to": "0x000000000000000000000000000000000000aaaa", + "privateKey": "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "signedTransactionRLP": "0xb86f02f86c048203ab82b0a08301660082aff794000000000000000000000000000000000000aaaa832a76b980c001a0191f0f6667a20cefc0b454e344cc01108aafbdc4e4e5ed88fdd1b5d108495b31a020879042b0f8d3807609f18fe42a9820de53c8a0ea1d0a2d50f8f5e92a94f00d" + }, + { + "nonce": 119, + "value": 65456115, + "gasLimit": 62341, + "maxPriorityFeePerGas": 24721, + "maxFeePerGas": 107729, + "to": "0x000000000000000000000000000000000000aaaa", + "privateKey": "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "signedTransactionRLP": "0xb86e02f86b04778260918301a4d182f38594000000000000000000000000000000000000aaaa8403e6c7f380c001a05e40977f4064a2bc08785e422ed8a47b56aa219abe93251d2b3b4d0cf937b8c0a071e600cd15589c3607bd9627314b99e9b5976bd427b774aa685bd0d036b1771e" + } +] diff --git a/packages/web3-eth-accounts/test/fixtures/json/eip1559txs.json b/packages/web3-eth-accounts/test/fixtures/json/eip1559txs.json new file mode 100644 index 00000000000..38a0fa7b708 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/json/eip1559txs.json @@ -0,0 +1,52 @@ +[ + { + "privateKey": "e0a462586887362a18a318b128dbc1e3a0cae6d4b0739f5d0419ec25114bc722", + "sendersAddress": "d13d825eb15c87b247c4c26331d66f225a5f632e", + "type": "message", + "raw": [ + "0x01", + "0x", + "0x01", + "0x01", + "0x02625a00", + "0xcccccccccccccccccccccccccccccccccccccccc", + "0x0186a0", + "0x1a8451e600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + [ + [ + "0x0000000000000000000000000000000000000101", + [ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000000000000000000000000000000000000000060a7" + ] + ] + ], + "0x01", + "0xafb6e247b1c490e284053c87ab5f6b59e219d51f743f7a4d83e400782bc7e4b9", + "0x479a268e0e0acd4de3f1e28e4fac2a6b32a4195e8dfa9d19147abe8807aa6f64" + ], + "data": { + "data": "0x1a8451e600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x02625a00", + "maxPriorityFeePerGas": "0x01", + "maxFeePerGas": "0x01", + "nonce": "0x", + "to": "0xcccccccccccccccccccccccccccccccccccccccc", + "value": "0x0186a0", + "v": "0x01", + "r": "0xafb6e247b1c490e284053c87ab5f6b59e219d51f743f7a4d83e400782bc7e4b9", + "s": "0x479a268e0e0acd4de3f1e28e4fac2a6b32a4195e8dfa9d19147abe8807aa6f64", + "chainId": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000101", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000000000000000000000000000000000000000060a7" + ] + } + ], + "type": "0x02" + } + } +] diff --git a/packages/web3-eth-accounts/test/fixtures/json/eip2930blockRLP.json b/packages/web3-eth-accounts/test/fixtures/json/eip2930blockRLP.json new file mode 100644 index 00000000000..498ed5f7097 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/json/eip2930blockRLP.json @@ -0,0 +1,3 @@ +{ + "rlp": "f90319f90211a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0e6e49996c7ec59f7a23d22b83239a60151512c65613bf84a0d7da336399ebc4aa0cafe75574d59780665a97fbfd11365c7545aa8f1abf4e5e12e8243334ef7286bb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000820200832fefd882a410845506eb0796636f6f6c65737420626c6f636b206f6e20636861696ea0bd4472abb6659ebe3ee06ee4d7b72a00a9f4d001caca51342001075469aff49888a13a5a8c8f2bb1c4f90101f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba09bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094fa08a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b1b89e01f89b01800a8301e24194095e7baea6a6c7c4c2dfeb977efac326af552d878080f838f7940000000000000000000000000000000000000001e1a0000000000000000000000000000000000000000000000000000000000000000001a03dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335a0476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef14c0" +} diff --git a/packages/web3-eth-accounts/test/fixtures/json/eip2930txs.json b/packages/web3-eth-accounts/test/fixtures/json/eip2930txs.json new file mode 100644 index 00000000000..27dc624813b --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/json/eip2930txs.json @@ -0,0 +1,50 @@ +[ + { + "privateKey": "e0a462586887362a18a318b128dbc1e3a0cae6d4b0739f5d0419ec25114bc722", + "sendersAddress": "d13d825eb15c87b247c4c26331d66f225a5f632e", + "type": "message", + "raw": [ + "0x01", + "0x", + "0x01", + "0x02625a00", + "0xcccccccccccccccccccccccccccccccccccccccc", + "0x0186a0", + "0x1a8451e600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + [ + [ + "0x0000000000000000000000000000000000000101", + [ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000000000000000000000000000000000000000060a7" + ] + ] + ], + "0x01", + "0xafb6e247b1c490e284053c87ab5f6b59e219d51f743f7a4d83e400782bc7e4b9", + "0x479a268e0e0acd4de3f1e28e4fac2a6b32a4195e8dfa9d19147abe8807aa6f64" + ], + "data": { + "data": "0x1a8451e600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x02625a00", + "gasPrice": "0x01", + "nonce": "0x", + "to": "0xcccccccccccccccccccccccccccccccccccccccc", + "value": "0x0186a0", + "v": "0x01", + "r": "0xafb6e247b1c490e284053c87ab5f6b59e219d51f743f7a4d83e400782bc7e4b9", + "s": "0x479a268e0e0acd4de3f1e28e4fac2a6b32a4195e8dfa9d19147abe8807aa6f64", + "chainId": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000101", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000000000000000000000000000000000000000060a7" + ] + } + ], + "type": "0x01" + } + } +] diff --git a/packages/web3-eth-accounts/test/fixtures/json/rpcTx.json b/packages/web3-eth-accounts/test/fixtures/json/rpcTx.json new file mode 100644 index 00000000000..3ddd5cea98c --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/json/rpcTx.json @@ -0,0 +1,21 @@ +{ + "accessList": [], + "blockHash": "0x72c897034f7b99c69f66b3b86da59877c69fdf47367603f7abe1f0676b5e8ebe", + "blockNumber": "0xec738d", + "chainId": "0x1", + "from": "0x7b0f34615564cd976fea815d9691cc102f4058d6", + "gas": "0x5208", + "gasPrice": "0x3480a01a5", + "hash": "0xed1960aa7d0d7b567c946d94331dddb37a1c67f51f30bf51f256ea40db88cfb0", + "input": "0x", + "maxFeePerGas": "0x3c2152056", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0x2", + "r": "0x2c4f99fdc33af2979df594c8683efe57c4012a21a0b438284fb24577a666444f", + "s": "0x472eefae0813ff0d7235210e2697228aca35e68987038b9529beb27a3cfa8552", + "to": "0xcad621da75a66c7a8f4ff86d30a2bf981bfc8fdd", + "transactionIndex": "0x1a", + "type": "0x2", + "v": "0x1", + "value": "0x3c305ddbcbc1f5" +} diff --git a/packages/web3-eth-accounts/test/fixtures/json/ttTransactionTestEip155VitaliksTests.json b/packages/web3-eth-accounts/test/fixtures/json/ttTransactionTestEip155VitaliksTests.json new file mode 100644 index 00000000000..05ba913c611 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/json/ttTransactionTestEip155VitaliksTests.json @@ -0,0 +1,189 @@ +[ + { + "blocknumber": "3500000", + "hash": "0xe0be81f8d506dbe3a5549e720b51eb79492378d6638087740824f168667e5239", + "rlp": "0xf864808504a817c800825208943535353535353535353535353535353535353535808025a0044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116da0044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", + "sender": "f0f6f18bca1b28cd68e4357452947e021241e9ce", + "transaction": { + "data": "", + "gasLimit": "0x5208", + "gasPrice": "0x04a817c800", + "nonce": "0x", + "r": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", + "s": "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", + "to": "0x3535353535353535353535353535353535353535", + "v": "0x25", + "value": "0x00" + } + }, + { + "blocknumber": "3500000", + "hash": "0x50b6e7b58320c885ab7b2ee0d0b5813a697268bd2494a06de792790b13668c08", + "rlp": "0xf867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10", + "sender": "9bddad43f934d313c2b79ca28a432dd2b7281029", + "transaction": { + "data": "", + "gasLimit": "0x02e248", + "gasPrice": "0x04a817c808", + "nonce": "0x08", + "r": "0x64b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12", + "s": "0x64b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10", + "to": "0x3535353535353535353535353535353535353535", + "v": "0x25", + "value": "0x0200" + } + }, + { + "blocknumber": "3500000", + "hash": "0x24fd18c70146a2b002254810473fa26b744f7899258a1f32924cc73e7a8f4d4f", + "rlp": "0xf867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb", + "sender": "3c24d7329e92f84f08556ceb6df1cdb0104ca49f", + "transaction": { + "data": "", + "gasLimit": "0x033450", + "gasPrice": "0x04a817c809", + "nonce": "0x09", + "r": "0x52f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb", + "s": "0x52f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb", + "to": "0x3535353535353535353535353535353535353535", + "v": "0x25", + "value": "0x02d9" + } + }, + { + "blocknumber": "3500000", + "hash": "0x42973b488dbb3aa237db3d1a3bad18a8d2148af795fb6cdbbbeef5c736df97b9", + "rlp": "0xf864018504a817c80182a410943535353535353535353535353535353535353535018025a0489efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bcaa0489efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", + "sender": "23ef145a395ea3fa3deb533b8a9e1b4c6c25d112", + "transaction": { + "data": "", + "gasLimit": "0xa410", + "gasPrice": "0x04a817c801", + "nonce": "0x01", + "r": "0x489efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bca", + "s": "0x489efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", + "to": "0x3535353535353535353535353535353535353535", + "v": "0x25", + "value": "0x01" + } + }, + { + "blocknumber": "3500000", + "hash": "0xe68afed5d359c7e60a0408093da23c57b63e84acb2e368ac7c47630518d6f4d9", + "rlp": "0xf864028504a817c80282f618943535353535353535353535353535353535353535088025a02d7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5a02d7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5", + "sender": "2e485e0c23b4c3c542628a5f672eeab0ad4888be", + "transaction": { + "data": "", + "gasLimit": "0xf618", + "gasPrice": "0x04a817c802", + "nonce": "0x02", + "r": "0x2d7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5", + "s": "0x2d7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5", + "to": "0x3535353535353535353535353535353535353535", + "v": "0x25", + "value": "0x08" + } + }, + { + "blocknumber": "3500000", + "hash": "0xbcb6f653e06c276a080e9d68e5a967847a896cf52a6dc81917dc2c57ae0a31ef", + "rlp": "0xf865038504a817c803830148209435353535353535353535353535353535353535351b8025a02a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4e0a02a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de", + "sender": "82a88539669a3fd524d669e858935de5e5410cf0", + "transaction": { + "data": "", + "gasLimit": "0x014820", + "gasPrice": "0x04a817c803", + "nonce": "0x03", + "r": "0x2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4e0", + "s": "0x2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de", + "to": "0x3535353535353535353535353535353535353535", + "v": "0x25", + "value": "0x1b" + } + }, + { + "blocknumber": "3500000", + "hash": "0x244e4b57522352c3e9f93ad8ac8a47d1b46c3dcda6da2522caedad009ac9afb7", + "rlp": "0xf865048504a817c80483019a28943535353535353535353535353535353535353535408025a013600b294191fc92924bb3ce4b969c1e7e2bab8f4c93c3fc6d0a51733df3c063a013600b294191fc92924bb3ce4b969c1e7e2bab8f4c93c3fc6d0a51733df3c060", + "sender": "f9358f2538fd5ccfeb848b64a96b743fcc930554", + "transaction": { + "data": "", + "gasLimit": "0x019a28", + "gasPrice": "0x04a817c804", + "nonce": "0x04", + "r": "0x13600b294191fc92924bb3ce4b969c1e7e2bab8f4c93c3fc6d0a51733df3c063", + "s": "0x13600b294191fc92924bb3ce4b969c1e7e2bab8f4c93c3fc6d0a51733df3c060", + "to": "0x3535353535353535353535353535353535353535", + "v": "0x25", + "value": "0x40" + } + }, + { + "blocknumber": "3500000", + "hash": "0x581c0b79498b1cf1b8fa4f69bc5f21c0c60371cd08d4682b15c4334aac1cccfd", + "rlp": "0xf865058504a817c8058301ec309435353535353535353535353535353535353535357d8025a04eebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c1a04eebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c1", + "sender": "a8f7aba377317440bc5b26198a363ad22af1f3a4", + "transaction": { + "data": "", + "gasLimit": "0x01ec30", + "gasPrice": "0x04a817c805", + "nonce": "0x05", + "r": "0x4eebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c1", + "s": "0x4eebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c1", + "to": "0x3535353535353535353535353535353535353535", + "v": "0x25", + "value": "0x7d" + } + }, + { + "blocknumber": "3500000", + "hash": "0x581c0b79498b1cf1b8fa4f69bc5f21c0c60371cd08d4682b15c4334aac1cccfd", + "rlp": "0xf865058504a817c8058301ec309435353535353535353535353535353535353535357d8025a04eebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c1a04eebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c1", + "sender": "a8f7aba377317440bc5b26198a363ad22af1f3a4", + "transaction": { + "data": "", + "gasLimit": "0x01ec30", + "gasPrice": "0x04a817c805", + "nonce": "0x05", + "r": "0x4eebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c1", + "s": "0x4eebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c1", + "to": "0x3535353535353535353535353535353535353535", + "v": "0x25", + "value": "0x7d" + } + }, + { + "blocknumber": "3500000", + "hash": "0x678ae2053a840f5fe550a63d724d1c85420d2955a0ccc4f868dd59e27afdf279", + "rlp": "0xf866068504a817c80683023e3894353535353535353535353535353535353535353581d88025a06455bf8ea6e7463a1046a0b52804526e119b4bf5136279614e0b1e8e296a4e2fa06455bf8ea6e7463a1046a0b52804526e119b4bf5136279614e0b1e8e296a4e2d", + "sender": "f1f571dc362a0e5b2696b8e775f8491d3e50de35", + "transaction": { + "data": "", + "gasLimit": "0x023e38", + "gasPrice": "0x04a817c806", + "nonce": "0x06", + "r": "0x6455bf8ea6e7463a1046a0b52804526e119b4bf5136279614e0b1e8e296a4e2f", + "s": "0x6455bf8ea6e7463a1046a0b52804526e119b4bf5136279614e0b1e8e296a4e2d", + "to": "0x3535353535353535353535353535353535353535", + "v": "0x25", + "value": "0xd8" + } + }, + { + "blocknumber": "3500000", + "hash": "0x81aa03ada1474ff3ca4b86afb8e8c0f8b22791e156e706231a695ef8c51515ab", + "rlp": "0xf867078504a817c807830290409435353535353535353535353535353535353535358201578025a052f1a9b320cab38e5da8a8f97989383aab0a49165fc91c737310e4f7e9821021a052f1a9b320cab38e5da8a8f97989383aab0a49165fc91c737310e4f7e9821021", + "sender": "d37922162ab7cea97c97a87551ed02c9a38b7332", + "transaction": { + "data": "", + "gasLimit": "0x029040", + "gasPrice": "0x04a817c807", + "nonce": "0x07", + "r": "0x52f1a9b320cab38e5da8a8f97989383aab0a49165fc91c737310e4f7e9821021", + "s": "0x52f1a9b320cab38e5da8a8f97989383aab0a49165fc91c737310e4f7e9821021", + "to": "0x3535353535353535353535353535353535353535", + "v": "0x25", + "value": "0x0157" + } + } +] diff --git a/packages/web3-eth-accounts/test/fixtures/json/txs.json b/packages/web3-eth-accounts/test/fixtures/json/txs.json new file mode 100644 index 00000000000..b80abe2e23a --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/json/txs.json @@ -0,0 +1,142 @@ +[ + { + "privateKey": "164122e5d39e9814ca723a749253663bafb07f6af91704d9754c361eb315f0c1", + "sendersAddress": "1f36f546477cda21bf2296c50976f2740247906f", + "type": "contract", + "cost": 680, + "raw": [ + "0x", + "0x09184e72a000", + "0x2710", + "0x0000000000000000000000000000000000000000", + "0x", + "0x7f7465737432000000000000000000000000000000000000000000000000000000600057", + "0x1c", + "0x5e1d3a76fbf824220eafc8c79ad578ad2b67d01b0c2425eb1f1347e8f50882ab", + "0x5bd428537f05f9830e93792f90ea6a3e2d1ee84952dd96edbae9f658f831ab13" + ], + "data": { + "nonce": "0x", + "gasPrice": "0x09184e72a000", + "gasLimit": "0x2710", + "to": "0x0000000000000000000000000000000000000000", + "value": "0x", + "data": "0x7f7465737432000000000000000000000000000000000000000000000000000000600057", + "v": "0x1c", + "r": "0x5e1d3a76fbf824220eafc8c79ad578ad2b67d01b0c2425eb1f1347e8f50882ab", + "s": "0x5bd428537f05f9830e93792f90ea6a3e2d1ee84952dd96edbae9f658f831ab13" + } + }, + { + "privateKey": "4646464646464646464646464646464646464646464646464646464646464646", + "sendersAddress": "9d8a62f656a8d1615c1294fd71e9cfb3e4855a4f", + "type": "message", + "cost": 500, + "raw": [ + "0x09", + "0x04a817c800", + "0x2710", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", + "0x", + "0x25", + "0x28ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276", + "0x67cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83" + ], + "data": { + "nonce": "0x09", + "gasPrice": "0x04a817c800", + "gasLimit": "0x2710", + "to": "0x3535353535353535353535353535353535353535", + "value": "0x0de0b6b3a7640000", + "data": "0x", + "v": "0x25", + "r": "0x28ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276", + "s": "0x67cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83" + } + }, + { + "privateKey": "e0a462586887362a18a318b128dbc1e3a0cae6d4b0739f5d0419ec25114bc722", + "sendersAddress": "d13d825eb15c87b247c4c26331d66f225a5f632e", + "type": "message", + "cost": 500, + "raw": [ + "0x06", + "0x09184e72a000", + "0x01f4", + "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", + "0x016345785d8a0000", + "0x", + "0x1c", + "0x24a484bfa7380860e9fa0a9f5e4b64b985e860ca31abd36e66583f9030c2e29d", + "0x4d5ef07d9e73fa2fbfdad059591b4f13d0aa79e7634a2bb00174c9200cabb04d" + ], + "data": { + "nonce": "0x06", + "gasPrice": "0x09184e72a000", + "gasLimit": "0x01f4", + "to": "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", + "value": "0x016345785d8a0000", + "data": "0x", + "v": "0x1c", + "r": "0x24a484bfa7380860e9fa0a9f5e4b64b985e860ca31abd36e66583f9030c2e29d", + "s": "0x4d5ef07d9e73fa2fbfdad059591b4f13d0aa79e7634a2bb00174c9200cabb04d" + } + }, + { + "privateKey": "164122e5d39e9814ca723a749253663bafb07f6af91704d9754c361eb315f0c1", + "sendersAddress": "1f36f546477cda21bf2296c50976f2740247906f", + "type": "message", + "cost": 2420, + "raw": [ + "0x06", + "0x09184e72a000", + "0x0974", + "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", + "0x016345785d8a0000", + "0x00000000000000000000000000000000000000000000000000000000000000ad000000000000000000000000000000000000000000000000000000000000fafa0000000000000000000000000000000000000000000000000000000000000dfa0000000000000000000000000000000000000000000000000000000000000dfa00000000000000000000000000000000000000000000000000000000000000ad000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000df000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000df000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000d", + "0x1c", + "0x5e9361ca27e14f3af0e6b28466406ad8be026d3b0f2ae56e3c064043fb73ec77", + "0x29ae9893dac4f9afb1af743e25fbb6a63f7879a61437203cb48c997b0fcefc3a" + ], + "data": { + "nonce": "0x06", + "gasPrice": "0x09184e72a000", + "gasLimit": "0x0974", + "to": "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", + "value": "0x016345785d8a0000", + "data": "0x00000000000000000000000000000000000000000000000000000000000000ad000000000000000000000000000000000000000000000000000000000000fafa0000000000000000000000000000000000000000000000000000000000000dfa0000000000000000000000000000000000000000000000000000000000000dfa00000000000000000000000000000000000000000000000000000000000000ad000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000df000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000df000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000d", + "v": "0x1c", + "r": "0x5e9361ca27e14f3af0e6b28466406ad8be026d3b0f2ae56e3c064043fb73ec77", + "s": "0x29ae9893dac4f9afb1af743e25fbb6a63f7879a61437203cb48c997b0fcefc3a" + } + }, + { + "privateKey": "not-available", + "sendersAddress": "TODO", + "type": "message", + "cost": 12312, + "raw": [ + "0x0b", + "0x051f4d5c00", + "0x5208", + "0x656e929d6fc0cac52d3d9526d288fe02dcd56fbd", + "0x2386f26fc10000", + "0x", + "0x26", + "0xef903f6bbcb7d6214d478df27db6591d857b1063954eade1bb24e69e58511f96", + "0x5433f8e1abf886cbec64891f38a2ea6fd9f9ffe078421f5e238b9fec03eea97a" + ], + "data": { + "nonce": "0x0b", + "gasPrice": "0x051f4d5c00", + "gasLimit": "0x5208", + "to": "0x656e929d6fc0cac52d3d9526d288fe02dcd56fbd", + "value": "0x2386f26fc10000", + "data": "0x", + "v": "0x26", + "r": "0xef903f6bbcb7d6214d478df27db6591d857b1063954eade1bb24e69e58511f96", + "s": "0x5433f8e1abf886cbec64891f38a2ea6fd9f9ffe078421f5e238b9fec03eea97a" + } + } +] diff --git a/packages/web3-eth-accounts/test/fixtures/system_test_utils.ts b/packages/web3-eth-accounts/test/fixtures/system_test_utils.ts new file mode 120000 index 00000000000..2ab08a83752 --- /dev/null +++ b/packages/web3-eth-accounts/test/fixtures/system_test_utils.ts @@ -0,0 +1 @@ +../../../../scripts/system_tests_utils.ts \ No newline at end of file diff --git a/packages/web3-eth-accounts/test/integration/account.test.ts b/packages/web3-eth-accounts/test/integration/account.test.ts new file mode 100644 index 00000000000..06b703e496f --- /dev/null +++ b/packages/web3-eth-accounts/test/integration/account.test.ts @@ -0,0 +1,214 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Address } from 'web3-types'; +import { Web3ValidatorError, isHexStrict } from 'web3-validator'; +import { + create, + decrypt, + encrypt, + hashMessage, + privateKeyToAccount, + privateKeyToAddress, + recover, + recoverTransaction, + sign, + signTransaction, +} from '../../src'; +import { TransactionFactory } from '../../src/tx/transactionFactory'; +import { + invalidDecryptData, + invalidEncryptData, + invalidKeyStore, + invalidPrivateKeytoAccountData, + invalidPrivateKeyToAddressData, + signatureRecoverData, + transactionsTestData, + validDecryptData, + validEncryptData, + validHashMessageData, + validPrivateKeytoAccountData, + validPrivateKeyToAddressData, +} from '../fixtures/account'; + +describe('accounts', () => { + describe('create', () => { + describe('valid cases', () => { + it('%s', () => { + const account = create(); + expect(typeof account.privateKey).toBe('string'); + expect(typeof account.address).toBe('string'); + expect(isHexStrict(account.address)).toBe(true); + expect(typeof account.encrypt).toBe('function'); + expect(typeof account.sign).toBe('function'); + expect(typeof account.signTransaction).toBe('function'); + }); + }); + }); + describe('privateKeyToAddress', () => { + describe('valid cases', () => { + it.each(validPrivateKeyToAddressData)('%s', (input, output) => { + expect(privateKeyToAddress(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(invalidPrivateKeyToAddressData)('%s', (input, output) => { + expect(() => privateKeyToAddress(input)).toThrow(output); + }); + }); + }); + + describe('privateKeyToAccount', () => { + describe('valid cases', () => { + it.each(validPrivateKeytoAccountData)('%s', (input, output) => { + expect( + JSON.stringify(privateKeyToAccount(input.address, input.ignoreLength)), + ).toEqual(JSON.stringify(output)); + }); + }); + + describe('invalid cases', () => { + it.each(invalidPrivateKeytoAccountData)('%s', (input, output) => { + expect(() => privateKeyToAccount(input)).toThrow(output); + }); + }); + }); + + describe('Signing and Recovery of Transaction', () => { + it.each(transactionsTestData)('sign transaction', async txData => { + const account = create(); + + const signedResult = await signTransaction( + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + TransactionFactory.fromTxData(txData), + account.privateKey, + ); + expect(signedResult).toBeDefined(); + expect(signedResult.messageHash).toBeDefined(); + expect(signedResult.rawTransaction).toBeDefined(); + expect(signedResult.transactionHash).toBeDefined(); + expect(signedResult.r).toBeDefined(); + expect(signedResult.s).toBeDefined(); + expect(signedResult.v).toBeDefined(); + }); + + it.each(transactionsTestData)('Recover transaction', async txData => { + const account = create(); + const txObj = { ...txData, from: account.address }; + const signedResult = await signTransaction( + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + TransactionFactory.fromTxData(txObj), + account.privateKey, + ); + expect(signedResult).toBeDefined(); + + const address: Address = recoverTransaction(signedResult.rawTransaction); + expect(address).toEqual(account.address); + }); + }); + + describe('Hash Message', () => { + it.each(validHashMessageData)('%s', (message, hash) => { + expect(hashMessage(message)).toEqual(hash); + }); + }); + + describe('Sign Message', () => { + describe('sign', () => { + it.each(signatureRecoverData)('%s', (data, testObj) => { + const result = sign(data, testObj.privateKey); + expect(result.signature).toEqual(testObj.signature || testObj.signatureOrV); // makes sure we get signature and not V value + }); + }); + + describe('recover', () => { + it.each(signatureRecoverData)('%s', (data, testObj) => { + const address = recover(data, testObj.signatureOrV, testObj.prefixedOrR, testObj.s); + expect(address).toEqual(testObj.address); + }); + }); + }); + + describe('encrypt', () => { + describe('valid cases', () => { + it.each(validEncryptData)('%s', async (input, output) => { + const result = await encrypt(input[0], input[1], input[2]).catch(err => { + throw err; + }); + expect(result.version).toBe(output.version); + expect(result.address).toBe(output.address); + expect(result.crypto.ciphertext).toBe(output.crypto.ciphertext); + expect(result.crypto.cipherparams).toEqual(output.crypto.cipherparams); + expect(result.crypto.cipher).toEqual(output.crypto.cipher); + expect(result.crypto.kdf).toBe(output.crypto.kdf); + expect(result.crypto.kdfparams).toEqual(output.crypto.kdfparams); + expect(typeof result.version).toBe('number'); + expect(typeof result.id).toBe('string'); + expect(typeof result.crypto.mac).toBe('string'); + }); + }); + + describe('invalid cases', () => { + it.each(invalidEncryptData)('%s', async (input, output) => { + const result = encrypt(input[0], input[1], input[2]); + await expect(result).rejects.toThrow(output); + }); + }); + }); + + describe('decrypt', () => { + describe('valid cases', () => { + it.each(validDecryptData)('%s', async input => { + const keystore = await encrypt(input[0], input[1], input[2]).catch(err => { + throw err; + }); + + // make sure decrypt does not throw invalid password error + const result = await decrypt(keystore, input[1]); + + expect(JSON.stringify(result)).toEqual( + JSON.stringify(privateKeyToAccount(input[3])), + ); + + const keystoreString = JSON.stringify(keystore); + + const stringResult = await decrypt(keystoreString, input[1], true); + + expect(JSON.stringify(stringResult)).toEqual( + JSON.stringify(privateKeyToAccount(input[3])), + ); + }); + }); + + describe('invalid cases', () => { + it.each(invalidDecryptData)('%s', async (input, output) => { + const result = decrypt(input[0], input[1]); + + await expect(result).rejects.toThrow(output); + }); + }); + + describe('invalid keystore, fails validation', () => { + it.each(invalidKeyStore)('%s', async input => { + const result = decrypt(input[0], input[1]); + + await expect(result).rejects.toThrow(Web3ValidatorError); + }); + }); + }); +}); diff --git a/packages/web3-eth-accounts/test/integration/jest.config.js b/packages/web3-eth-accounts/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-eth-accounts/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-eth-accounts/test/integration/setup.js b/packages/web3-eth-accounts/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-eth-accounts/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-eth-accounts/test/integration/wallet.test.ts b/packages/web3-eth-accounts/test/integration/wallet.test.ts new file mode 100644 index 00000000000..0cbf2d8db62 --- /dev/null +++ b/packages/web3-eth-accounts/test/integration/wallet.test.ts @@ -0,0 +1,298 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable @typescript-eslint/no-magic-numbers */ + +import { Web3AccountProvider, KeyStore } from 'web3-types'; +import { isBrowser, isElectron, itIf } from '../fixtures/system_test_utils'; +import { Wallet } from '../../src'; +import * as accountProvider from '../../src/account'; + +describe('Wallet', () => { + let wallet: Wallet; + beforeEach(() => { + wallet = new Wallet(accountProvider as Web3AccountProvider); + }); + + describe('constructor', () => { + it('should create instance of the wallet', () => { + expect(wallet).toBeInstanceOf(Wallet); + }); + }); + + describe('create', () => { + it('should create given # of accounts using the account provider', () => { + const numberOfAccounts = 10; + const accounts = []; + wallet.create(numberOfAccounts); + for (let i = 0; i < numberOfAccounts; i += 1) { + accounts.push(wallet.get(i)); + } + expect(wallet).toHaveLength(numberOfAccounts); + expect(accounts).toHaveLength(numberOfAccounts); + }); + }); + + describe('add', () => { + it('should create account from private key if string value is given', () => { + const { privateKey, address } = accountProvider.create(); + const result = wallet.add(privateKey); + + expect(result).toBeTruthy(); + + expect(wallet).toHaveLength(1); + expect(wallet.get(0)?.address).toBe(address); + }); + + it('should not create account from private key if object value is given', () => { + const { address } = accountProvider.create(); + const result = wallet.add({ address } as never); + + expect(result).toBeTruthy(); + expect(wallet).toHaveLength(1); + expect(wallet.get(0)?.address).toBe(address); + }); + + it('should add account with lowercase address', () => { + const { address } = accountProvider.create(); + const result = wallet.add({ address } as never); + + expect(result).toBeTruthy(); + expect(wallet).toHaveLength(1); + expect(wallet.get(address)?.address).toBe(address); + }); + + it('should override account object for existing address', () => { + const temp1 = accountProvider.create(); + const account1 = { address: temp1.address, privateKey: temp1.privateKey } as never; + const temp2 = accountProvider.create(); + const account2 = { address: temp1.address, privateKey: temp2.privateKey } as never; + + wallet.add(account1); + expect(wallet.get(temp1.address)).toEqual(account1); + + wallet.add(account2); + expect(wallet.get(temp1.address)).toEqual(account2); + }); + }); + + describe('get', () => { + it('should get account for given index', () => { + const account = accountProvider.create(); + + wallet.add(account); + + expect(wallet.get(0)).toEqual(account); + }); + + it('should get account for given address', () => { + const account = accountProvider.create(); + + wallet.add(account); + + expect(wallet.get(account.address)).toEqual(account); + }); + + it('should get account with index', () => { + const account = accountProvider.create(); + + wallet.add(account); + + expect(wallet[0]).toEqual(account); + }); + }); + + describe('remove', () => { + it('should remove account for given index', () => { + const account = accountProvider.create(); + wallet.add(account); + expect(wallet).toHaveLength(1); + + const result = wallet.remove(0); + + expect(result).toBeTruthy(); + expect(wallet).toHaveLength(0); + expect(wallet.get(0)).toBeUndefined(); + }); + + it('should return false if index not found', () => { + const account = accountProvider.create(); + wallet.add(account); + expect(wallet).toHaveLength(1); + + const result = wallet.remove(2); + + expect(result).toBeFalsy(); + expect(wallet).toHaveLength(1); + }); + + it('should remove account for given address', () => { + const account = accountProvider.create(); + wallet.add(account); + expect(wallet).toHaveLength(1); + + const result = wallet.remove(account.address); + + expect(result).toBeTruthy(); + expect(wallet).toHaveLength(0); + expect(wallet.get(0)).toBeUndefined(); + }); + + it('should return false if given address not found', () => { + const account = accountProvider.create(); + wallet.add(account); + expect(wallet).toHaveLength(1); + + const result = wallet.remove('my_address2'); + + expect(result).toBeFalsy(); + expect(wallet).toHaveLength(1); + }); + + it('should remove account with the index', () => { + const account = accountProvider.create(); + wallet.add(account); + expect(wallet).toHaveLength(1); + + delete wallet[0]; + + // Deleting objects dees not change the length + expect(wallet).toHaveLength(1); + expect(wallet[0]).toBeUndefined(); + }); + + it('should remove account with array methods', () => { + const account = accountProvider.create(); + wallet.add(account); + expect(wallet).toHaveLength(1); + + wallet.splice(0, 1); + + expect(wallet).toHaveLength(0); + expect(wallet[0]).toBeUndefined(); + }); + + it('should remove account added with private key with array methods', () => { + const account = accountProvider.create(); + wallet.add(account.privateKey); + expect(wallet).toHaveLength(1); + + wallet.splice(0, 1); + + expect(wallet).toHaveLength(0); + expect(wallet[0]).toBeUndefined(); + }); + }); + + describe('clear', () => { + it('should remove all accounts', () => { + const account1 = accountProvider.create(); + const account2 = accountProvider.create(); + wallet.add({ address: account1.address } as never); + wallet.add({ address: account2.address } as never); + expect(wallet).toHaveLength(2); + + wallet.clear(); + + expect(wallet).toHaveLength(0); + expect(wallet.get(0)).toBeUndefined(); + }); + }); + + describe('encrypt', () => { + it('should encrypt all accounts and return array', async () => { + const account1 = accountProvider.create(); + const account2 = accountProvider.create(); + const options = { myOptions: 'myOptions' }; + wallet.add(account1); + wallet.add(account2); + + const result: KeyStore[] = await wallet.encrypt('password', options); + expect(result).toHaveLength(2); + expect(`0x${result[0]?.address.toLowerCase()}`).toBe(account1.address.toLowerCase()); + expect(`0x${result[1]?.address.toLowerCase()}`).toBe(account2.address.toLowerCase()); + }); + }); + + describe('decrypt', () => { + it('should decrypt all accounts and add to wallet', async () => { + const account1 = accountProvider.create(); + const account2 = accountProvider.create(); + const options = { myOptions: 'myOptions' }; + wallet.add(account1); + wallet.add(account2); + const result = await wallet.encrypt('password', options); + await wallet.decrypt(result, 'password', options); + + expect(wallet).toHaveLength(2); + expect(wallet.get(0)?.address).toEqual(account1.address); + expect(wallet.get(0)?.privateKey).toEqual(account1.privateKey); + expect(wallet.get(1)?.address).toEqual(account2.address); + expect(wallet.get(1)?.privateKey).toEqual(account2.privateKey); + }); + }); + + describe('save', () => { + itIf(!(isBrowser || isElectron))( + 'should throw error if local storage not present', + async () => { + // eslint-disable-next-line jest/no-standalone-expect + return expect(wallet.save('password')).rejects.toThrow( + 'Local storage not available.', + ); + }, + ); + + itIf(isBrowser || isElectron)( + 'should encrypt wallet and load it with given key', + async () => { + const account = accountProvider.create(); + wallet.add(account); + // eslint-disable-next-line jest/no-standalone-expect + expect(await wallet.save('password', 'myKey')).toBe(true); + // eslint-disable-next-line jest/no-standalone-expect + expect((await wallet.load('password', 'myKey')).get(0)?.address).toBe( + account.address, + ); + }, + ); + + itIf(isBrowser || isElectron)( + 'should encrypt wallet and load it with default key', + async () => { + const account = accountProvider.create(); + wallet.add(account); + // eslint-disable-next-line jest/no-standalone-expect + expect(await wallet.save('password')).toBe(true); + // eslint-disable-next-line jest/no-standalone-expect + expect((await wallet.load('password')).get(0)?.address).toBe(account.address); + }, + ); + }); + + describe('load', () => { + itIf(!(isBrowser || isElectron))( + 'should throw error if local storage not present', + async () => { + // eslint-disable-next-line jest/no-standalone-expect + return expect(wallet.load('password')).rejects.toThrow( + 'Local storage not available.', + ); + }, + ); + }); +}); diff --git a/packages/web3-eth-accounts/test/tsconfig.json b/packages/web3-eth-accounts/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-eth-accounts/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-eth-accounts/test/unit/__snapshots__/wallet.test.ts.snap b/packages/web3-eth-accounts/test/unit/__snapshots__/wallet.test.ts.snap new file mode 100644 index 00000000000..3634ceb8f5a --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/__snapshots__/wallet.test.ts.snap @@ -0,0 +1,36 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Wallet create should create given # of accounts using the account provider 1`] = ` +Array [ + Object { + "address": "account_create_1", + }, + Object { + "address": "account_create_2", + }, + Object { + "address": "account_create_3", + }, + Object { + "address": "account_create_4", + }, + Object { + "address": "account_create_5", + }, + Object { + "address": "account_create_6", + }, + Object { + "address": "account_create_7", + }, + Object { + "address": "account_create_8", + }, + Object { + "address": "account_create_9", + }, + Object { + "address": "account_create_10", + }, +] +`; diff --git a/packages/web3-eth-accounts/test/unit/account.test.ts b/packages/web3-eth-accounts/test/unit/account.test.ts new file mode 100644 index 00000000000..713ac9e4829 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/account.test.ts @@ -0,0 +1,235 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Address } from 'web3-types'; +import { Web3ValidatorError, isHexStrict } from 'web3-validator'; +import { + create, + decrypt, + encrypt, + hashMessage, + privateKeyToAccount, + privateKeyToAddress, + recover, + recoverTransaction, + sign, + signTransaction, + privateKeyToPublicKey, +} from '../../src/account'; +import { + invalidDecryptData, + invalidEncryptData, + invalidKeyStore, + invalidPrivateKeytoAccountData, + invalidPrivateKeyToAddressData, + signatureRecoverData, + transactionsTestData, + validDecryptData, + validEncryptData, + validHashMessageData, + validPrivateKeytoAccountData, + validPrivateKeyToAddressData, + validPrivateKeyToPublicKeyData, + validRecover, +} from '../fixtures/account'; +import { TransactionFactory } from '../../src/tx/transactionFactory'; +import { TxData } from '../../src/tx/types'; + +describe('accounts', () => { + describe('create', () => { + describe('valid cases', () => { + it('%s', () => { + const account = create(); + expect(typeof account.privateKey).toBe('string'); + expect(typeof account.address).toBe('string'); + expect(isHexStrict(account.address)).toBe(true); + expect(typeof account.encrypt).toBe('function'); + expect(typeof account.sign).toBe('function'); + expect(typeof account.signTransaction).toBe('function'); + }); + }); + }); + + describe('privateKeyToAddress', () => { + describe('valid cases', () => { + it.each(validPrivateKeyToAddressData)('%s', (input, output) => { + expect(privateKeyToAddress(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(invalidPrivateKeyToAddressData)('%s', (input, output) => { + expect(() => privateKeyToAddress(input)).toThrow(output); + }); + }); + }); + + describe('privateKeyToAccount', () => { + describe('valid cases', () => { + it.each(validPrivateKeytoAccountData)('%s', (input, output) => { + expect( + JSON.stringify(privateKeyToAccount(input.address, input.ignoreLength)), + ).toEqual(JSON.stringify(output)); + }); + }); + + describe('invalid cases', () => { + it.each(invalidPrivateKeytoAccountData)('%s', (input, output) => { + expect(() => privateKeyToAccount(input)).toThrow(output); + }); + }); + }); + describe('privateKeyToPublicKey', () => { + describe('valid cases', () => { + it.each(validPrivateKeyToPublicKeyData)('%s', (privateKey, isCompressed, output) => { + expect(privateKeyToPublicKey(privateKey, isCompressed)).toEqual(output); + }); + }); + }); + + describe('Signing and Recovery of Transaction', () => { + it.each(transactionsTestData)('sign transaction', async txData => { + const account = create(); + + const signedResult = await signTransaction( + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + TransactionFactory.fromTxData(txData as unknown as TxData), + account.privateKey, + ); + expect(signedResult).toBeDefined(); + expect(signedResult.messageHash).toBeDefined(); + expect(signedResult.rawTransaction).toBeDefined(); + expect(signedResult.transactionHash).toBeDefined(); + expect(signedResult.r).toMatch(/0[xX][0-9a-fA-F]{64}/); + expect(signedResult.s).toMatch(/0[xX][0-9a-fA-F]{64}/); + expect(signedResult.v).toMatch(/0[xX][0-9a-fA-F]+/); + }); + + it.each(transactionsTestData)('Recover transaction', async txData => { + const account = create(); + const txObj = { ...txData, from: account.address }; + const signedResult = await signTransaction( + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + TransactionFactory.fromTxData(txObj), + account.privateKey, + ); + expect(signedResult).toBeDefined(); + + const address: Address = recoverTransaction(signedResult.rawTransaction); + expect(address).toBeDefined(); + expect(address).toEqual(account.address); + }); + }); + + describe('Hash Message', () => { + it.each(validHashMessageData)('%s', (message, hash) => { + expect(hashMessage(message)).toEqual(hash); + }); + }); + + describe('Sign Message', () => { + describe('sign', () => { + it.each(signatureRecoverData)('%s', (data, testObj) => { + const result = sign(data, testObj.privateKey); + expect(result.signature).toEqual(testObj.signature || testObj.signatureOrV); // makes sure we get signature and not V value + expect(result.r).toEqual(testObj.r); + expect(result.s).toEqual(testObj.s); + }); + }); + + describe('recover', () => { + it.each(signatureRecoverData)('%s', (data, testObj) => { + const address = recover(data, testObj.signatureOrV, testObj.prefixedOrR, testObj.s); + expect(address).toEqual(testObj.address); + }); + }); + }); + + describe('encrypt', () => { + describe('valid cases', () => { + it.each(validEncryptData)('%s', async (input, output) => { + const result = await encrypt(input[0], input[1], input[2]).catch(err => { + throw err; + }); + expect(result.version).toBe(output.version); + expect(result.address).toBe(output.address); + expect(result.crypto.ciphertext).toBe(output.crypto.ciphertext); + expect(result.crypto.cipherparams).toEqual(output.crypto.cipherparams); + expect(result.crypto.cipher).toEqual(output.crypto.cipher); + expect(result.crypto.kdf).toBe(output.crypto.kdf); + expect(result.crypto.kdfparams).toEqual(output.crypto.kdfparams); + expect(typeof result.version).toBe('number'); + expect(typeof result.id).toBe('string'); + expect(typeof result.crypto.mac).toBe('string'); + }); + }); + + describe('invalid cases', () => { + it.each(invalidEncryptData)('%s', async (input, output) => { + const result = encrypt(input[0], input[1], input[2]); + await expect(result).rejects.toThrow(output); + }); + }); + }); + + describe('decrypt', () => { + describe('valid cases', () => { + it.each(validDecryptData)('%s', async input => { + const keystore = await encrypt(input[0], input[1], input[2]).catch(err => { + throw err; + }); + + // make sure decrypt does not throw invalid password error + const result = await decrypt(keystore, input[1]); + + expect(JSON.stringify(result)).toEqual( + JSON.stringify(privateKeyToAccount(input[3])), + ); + + const keystoreString = JSON.stringify(keystore); + + const stringResult = await decrypt(keystoreString, input[1], true); + + expect(JSON.stringify(stringResult)).toEqual( + JSON.stringify(privateKeyToAccount(input[3])), + ); + }); + }); + + describe('invalid cases', () => { + it.each(invalidDecryptData)('%s', async (input, output) => { + const result = decrypt(input[0], input[1]); + + await expect(result).rejects.toThrow(output); + }); + }); + + describe('invalid keystore, fails validation', () => { + it.each(invalidKeyStore)('%s', async input => { + const result = decrypt(input[0], input[1]); + + await expect(result).rejects.toThrow(Web3ValidatorError); + }); + }); + + describe('valid signatures for recover', () => { + it.each(validRecover)('&s', (data, signature) => { + recover(data, signature); + }); + }); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/common/chains.test.ts b/packages/web3-eth-accounts/test/unit/common/chains.test.ts new file mode 100644 index 00000000000..750ffd1bc4c --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/common/chains.test.ts @@ -0,0 +1,112 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Chain, Common, ConsensusAlgorithm, ConsensusType, Hardfork } from '../../../src/common'; + +describe('[Common/Chains]: Initialization / Chain params', () => { + it('Should initialize with chain provided', () => { + let c = new Common({ chain: 'mainnet' }); + expect(c.chainName()).toBe('mainnet'); + expect(c.chainId()).toEqual(BigInt(1)); + expect(c.networkId()).toEqual(BigInt(1)); + expect(c.hardfork()).toEqual(Hardfork.Merge); + expect(c.hardfork()).toEqual(c.DEFAULT_HARDFORK); + + c = new Common({ chain: 1 }); + expect(c.chainName()).toBe('mainnet'); + }); + + it('Should initialize with chain provided by Chain enum', () => { + const c = new Common({ chain: Chain.Mainnet }); + expect(c.chainName()).toBe('mainnet'); + expect(c.chainId()).toEqual(BigInt(1)); + expect(c.networkId()).toEqual(BigInt(1)); + expect(c.hardfork()).toEqual(Hardfork.Merge); + expect(c.hardfork()).toEqual(c.DEFAULT_HARDFORK); + }); + + it('Should initialize with chain and hardfork provided', () => { + const c = new Common({ chain: 'mainnet', hardfork: 'byzantium' }); + expect(c.hardfork()).toBe('byzantium'); + }); + + it('Should initialize with chain and hardfork provided by Chain and Hardfork enums', () => { + const c = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Byzantium }); + expect(c.hardfork()).toBe('byzantium'); + }); + + it('Should handle initialization errors', () => { + let f = function () { + // eslint-disable-next-line no-new + new Common({ chain: 'chainnotexisting' }); + }; + expect(f).toThrow('not supported'); // eslint-disable-line no-new + + f = function () { + // eslint-disable-next-line no-new + new Common({ chain: 'mainnet', hardfork: 'hardforknotexisting' }); + }; + expect(f).toThrow('not supported'); // eslint-disable-line no-new + }); + + it('Should provide correct access to chain parameters', () => { + let c = new Common({ chain: 'mainnet', hardfork: 'chainstart' }); + expect(c.hardforks()[3]['block']).toBe(2463000); + expect(c.consensusType()).toEqual(ConsensusType.ProofOfWork); + expect(c.consensusAlgorithm()).toEqual(ConsensusAlgorithm.Ethash); + expect(c.consensusConfig()).toEqual({}); + + c = new Common({ chain: 'goerli', hardfork: 'chainstart' }); + expect(c.hardforks()[3]['block']).toBe(0); + expect(c.consensusType()).toEqual(ConsensusType.ProofOfAuthority); + expect(c.consensusAlgorithm()).toEqual(ConsensusAlgorithm.Clique); + expect(c.consensusConfig().epoch).toBe(30000); + }); + + it('Should provide DNS network information in a uniform way', () => { + const configs = ['mainnet', 'goerli']; + for (const network of configs) { + const c = new Common({ chain: network }); + const dnsNetworks = c.dnsNetworks(); + expect(Array.isArray(dnsNetworks)).toBe(true); + expect(typeof dnsNetworks[0]).toBe('string'); + } + }); +}); + +describe('[Common]: isSupportedChainId static method', () => { + it('Should return true for supported chainId', () => { + expect(Common.isSupportedChainId(BigInt(1))).toBe(true); + }); + + it('Should return false for unsupported chainId', () => { + expect(Common.isSupportedChainId(BigInt(0))).toBe(false); + }); +}); + +describe('[Common]: copy()', () => { + it('listener tests', () => { + const common = new Common({ chain: 'mainnet' }); + // Add two listeners + // eslint-disable-next-line @typescript-eslint/no-empty-function + common.on('hardforkChanged', () => {}); + // eslint-disable-next-line @typescript-eslint/no-empty-function + common.on('hardforkChanged', () => {}); + const commonCopy = common.copy(); + expect(common.listenerCount('hardforkChanged')).toBe(2); + expect(commonCopy.listenerCount('hardforkChanged')).toBe(0); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/common/customChains.test.ts b/packages/web3-eth-accounts/test/unit/common/customChains.test.ts new file mode 100644 index 00000000000..d11094e1ed6 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/common/customChains.test.ts @@ -0,0 +1,166 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Chain, Common, ConsensusType, CustomChain, Hardfork } from '../../../src/common'; + +import * as testnet from '../../fixtures/common/testnet.json'; +import * as testnet2 from '../../fixtures/common/testnet2.json'; +import * as testnet3 from '../../fixtures/common/testnet3.json'; + +describe('[Common]: Custom chains', () => { + it('chain -> object: should provide correct access to private network chain parameters', () => { + const c = new Common({ chain: testnet, hardfork: Hardfork.Byzantium }); + expect(c.chainName()).toBe('testnet'); + expect(c.chainId()).toEqual(BigInt(12345)); + expect(c.networkId()).toEqual(BigInt(12345)); + expect(c.hardforks()[3]['block']).toBe(3); + expect(c.bootstrapNodes()![1].ip).toBe('10.0.0.2'); + }); + + it('chain -> object: should handle custom chain parameters with missing field', () => { + const chainParams = { ...testnet }; + delete (chainParams as any)['hardforks']; + expect(() => { + // eslint-disable-next-line no-new + new Common({ chain: chainParams }); + }).toThrow('Missing required'); // eslint-disable-line no-new + }); + + it('custom() -> base functionality', () => { + const mainnetCommon = new Common({ chain: Chain.Mainnet }); + + const customChainParams = { name: 'custom', chainId: 123, networkId: 678 }; + const customChainCommon = Common.custom(customChainParams, { + hardfork: Hardfork.Byzantium, + }); + + // From custom chain params + expect(customChainCommon.chainName()).toEqual(customChainParams.name); + expect(customChainCommon.chainId()).toEqual(BigInt(customChainParams.chainId)); + expect(customChainCommon.networkId()).toEqual(BigInt(customChainParams.networkId)); + + // Fallback params from mainnet + expect(customChainCommon.genesis()).toEqual(mainnetCommon.genesis()); + expect(customChainCommon.bootstrapNodes()).toEqual(mainnetCommon.bootstrapNodes()); + expect(customChainCommon.hardforks()).toEqual(mainnetCommon.hardforks()); + + // Set only to this Common + expect(customChainCommon.hardfork()).toBe('byzantium'); + }); + + it('custom() -> behavior', () => { + let common = Common.custom({ chainId: 123 }); + expect(common.networkId()).toEqual(BigInt(1)); + expect(common.chainName()).toBe('custom-chain'); + + common = Common.custom(CustomChain.PolygonMumbai); + expect(common.networkId()).toEqual(BigInt(80001)); + for (const customChain of Object.values(CustomChain)) { + common = Common.custom(customChain); + expect(common.chainName()).toEqual(customChain); + } + + common = Common.custom(CustomChain.PolygonMumbai); + expect(common.hardfork()).toEqual(common.DEFAULT_HARDFORK); + + common = Common.custom(CustomChain.OptimisticEthereum, { hardfork: Hardfork.Byzantium }); + expect(common.hardfork()).toEqual(Hardfork.Byzantium); + + expect(() => { + // @ts-expect-error TypeScript complains, nevertheless do the test for JS behavior + Common.custom('this-chain-is-not-supported'); + }).toThrow('not supported'); + }); + + it('customChains parameter: initialization exception', () => { + expect(() => { + // eslint-disable-next-line no-new + new Common({ chain: testnet, customChains: [testnet] }); + }).toThrow( + 'Chain must be a string, number, or bigint when initialized with customChains passed in', + ); + }); + + it('customChains parameter: initialization', () => { + let c = new Common({ + chain: Chain.Mainnet, + hardfork: Hardfork.Byzantium, + customChains: [testnet], + }); + expect(c.chainName()).toBe('mainnet'); + expect(c.hardforkBlock()!).toEqual(BigInt(4370000)); + + c.setChain('testnet'); + expect(c.chainName()).toBe('testnet'); + expect(c.hardforkBlock()!).toEqual(BigInt(4)); + + c = new Common({ + chain: 'testnet', + hardfork: Hardfork.Byzantium, + customChains: [testnet], + }); + expect(c.chainName()).toBe('testnet'); + expect(c.hardforkBlock()!).toEqual(BigInt(4)); + + const customChains = [testnet, testnet2, testnet3]; + c = new Common({ + chain: 'testnet2', + hardfork: Hardfork.Istanbul, + customChains, + }); + expect(c.chainName()).toBe('testnet2'); + expect(c.hardforkBlock()!).toEqual(BigInt(10)); + + c.setChain('testnet'); + expect(c.chainName()).toBe('testnet'); + expect(c.consensusType()).toEqual(ConsensusType.ProofOfWork); + }); +}); + +describe('custom chain setup with hardforks', () => { + const undefinedHardforks = [ + { + name: 'chainstart', + block: 0, + }, + { name: 'homestead' }, + // eslint-disable-next-line no-null/no-null + { name: 'byzantium', block: null }, + { name: 'tangerineWhistle', block: 10 }, + ]; + it('with undefined/null block numbers', () => { + expect( + // @ts-expect-error -- Disabling type check to verify that error is thrown + () => Common.custom({ hardforks: undefinedHardforks }), + ).toThrow(); + + const nullHardforks = [ + { + name: 'chainstart', + block: 0, + }, + // eslint-disable-next-line no-null/no-null + { name: 'homestead', block: null }, + { name: 'tangerineWhistle', block: 10 }, + ]; + + const common = Common.custom({ hardforks: nullHardforks }); + common.setHardforkByBlockNumber(10); + expect('tangerineWhistle').toEqual(common.hardfork()); + common.setHardforkByBlockNumber(3); + expect('chainstart').toEqual(common.hardfork()); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/common/eips.test.ts b/packages/web3-eth-accounts/test/unit/common/eips.test.ts new file mode 100644 index 00000000000..9266eb037b9 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/common/eips.test.ts @@ -0,0 +1,78 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { toBigInt } from 'web3-utils'; +import { Chain, Common, Hardfork } from '../../../src/common'; + +describe('[Common/EIPs]: Initialization / Chain params', () => { + it('Correct initialization', () => { + let eips = [2537, 2929]; + const c = new Common({ chain: Chain.Mainnet, eips }); + expect(c.eips()).toEqual(eips); + + eips = [2718, 2929, 2930]; + expect(() => { + // eslint-disable-next-line no-new + new Common({ chain: Chain.Mainnet, eips, hardfork: Hardfork.Istanbul }); + }).not.toThrow(); + + eips = [2930]; + expect(() => { + // eslint-disable-next-line no-new + new Common({ chain: Chain.Mainnet, eips, hardfork: Hardfork.Istanbul }); + }).toThrow(); + }); + + it('Initialization errors', () => { + const UNSUPPORTED_EIP = 1000000; + const eips = [UNSUPPORTED_EIP]; + expect(() => { + // eslint-disable-next-line no-new + new Common({ chain: Chain.Mainnet, eips }); + }).toThrow('not supported'); + + /* + // Manual test since no test triggering EIP config available + // TODO: recheck on addition of new EIP configs + // To run manually change minimumHardfork in EIP2537 config to petersburg + eips = [ 2537, ] + msg = 'should throw on not meeting minimum hardfork requirements' + f = () => { + new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Byzantium, eips }) + } + st.throws(f, /minimumHardfork/, msg) + */ + }); + + it('isActivatedEIP()', () => { + let c = new Common({ chain: Chain.Goerli, hardfork: Hardfork.Istanbul }); + expect(c.isActivatedEIP(2315)).toBe(false); + c = new Common({ chain: Chain.Goerli, hardfork: Hardfork.Istanbul, eips: [2315] }); + expect(c.isActivatedEIP(2315)).toBe(true); + c = new Common({ chain: Chain.Goerli, hardfork: Hardfork.Berlin }); + expect(c.isActivatedEIP(2929)).toBe(true); + expect(c.isActivatedEIP(2315)).toBe(false); + expect(c.isActivatedEIP(2537)).toBe(false); + }); + + it('eipBlock', () => { + const c = new Common({ chain: Chain.Mainnet }); + + expect(c.eipBlock(1559)! === toBigInt(12965000)).toBe(true); + + expect(c.eipBlock(0)).toBeNull(); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/common/hardforks.test.ts b/packages/web3-eth-accounts/test/unit/common/hardforks.test.ts new file mode 100644 index 00000000000..78229bf8d4e --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/common/hardforks.test.ts @@ -0,0 +1,335 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { hexToBytes } from 'web3-utils'; +import { Chain, Common, ConsensusAlgorithm, ConsensusType, Hardfork } from '../../../src/common'; +import gethGenesisKiln from '../../fixtures/common/geth-genesis-kiln.json'; + +describe('[Common]: Hardfork logic', () => { + it('Hardfork access', () => { + const supportedHardforks = [ + Hardfork.Chainstart, + Hardfork.Homestead, + Hardfork.Dao, + Hardfork.Chainstart, + Hardfork.SpuriousDragon, + Hardfork.Byzantium, + Hardfork.Constantinople, + Hardfork.Petersburg, + Hardfork.Istanbul, + Hardfork.Berlin, + Hardfork.London, + Hardfork.ArrowGlacier, + Hardfork.GrayGlacier, + Hardfork.Shanghai, + Hardfork.Merge, + ]; + let c; + + for (const hardfork of supportedHardforks) { + c = new Common({ chain: Chain.Mainnet, hardfork }); + expect(c.hardfork()).toEqual(hardfork); + } + }); + + it('getHardforkByBlockNumber() / setHardforkByBlockNumber()', () => { + let c = new Common({ chain: Chain.Mainnet }); + + expect(c.getHardforkByBlockNumber(0)).toEqual(Hardfork.Chainstart); + expect(c.getHardforkByBlockNumber(1149999)).toEqual(Hardfork.Chainstart); + expect(c.getHardforkByBlockNumber(1150000)).toEqual(Hardfork.Homestead); + expect(c.getHardforkByBlockNumber(1400000)).toEqual(Hardfork.Homestead); + expect(c.getHardforkByBlockNumber(9200000)).toEqual(Hardfork.MuirGlacier); + expect(c.getHardforkByBlockNumber(12244000)).toEqual(Hardfork.Berlin); + expect(c.getHardforkByBlockNumber(12965000)).toEqual(Hardfork.London); + expect(c.getHardforkByBlockNumber(13773000)).toEqual(Hardfork.ArrowGlacier); + expect(c.getHardforkByBlockNumber(15050000)).toEqual(Hardfork.GrayGlacier); + // merge is now specified at 15537394 in config + expect(c.getHardforkByBlockNumber(999999999999)).toEqual(Hardfork.Merge); + + expect(c.setHardforkByBlockNumber(0)).toEqual(Hardfork.Chainstart); + expect(c.setHardforkByBlockNumber(1149999)).toEqual(Hardfork.Chainstart); + expect(c.setHardforkByBlockNumber(1150000)).toEqual(Hardfork.Homestead); + expect(c.setHardforkByBlockNumber(1400000)).toEqual(Hardfork.Homestead); + expect(c.setHardforkByBlockNumber(12244000)).toEqual(Hardfork.Berlin); + expect(c.setHardforkByBlockNumber(12965000)).toEqual(Hardfork.London); + expect(c.setHardforkByBlockNumber(13773000)).toEqual(Hardfork.ArrowGlacier); + expect(c.setHardforkByBlockNumber(15050000)).toEqual(Hardfork.GrayGlacier); + // merge is now specified at 15537394 in config + expect(c.setHardforkByBlockNumber(999999999999)).toEqual(Hardfork.Merge); + + c = new Common({ chain: Chain.Sepolia }); + expect(c.setHardforkByBlockNumber(1735371)).toBe('mergeForkIdTransition'); + }); + + it('should throw if no hardfork qualifies', () => { + const hardforks = [ + { + name: 'homestead', + block: 3, + }, + { + name: 'tangerineWhistle', + block: 3, + }, + { + name: 'spuriousDragon', + block: 3, + }, + ]; + const c = Common.custom({ hardforks }, { baseChain: Chain.Sepolia }); + + expect(() => { + c.getHardforkByBlockNumber(0); + }).toThrow(); + + expect(c.setHardforkByBlockNumber(3)).toEqual(Hardfork.SpuriousDragon); + }); + + it('setHardfork(): hardforkChanged event', () => { + const c = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Istanbul }); + c.on('hardforkChanged', (hardfork: string) => { + expect(hardfork).toEqual(Hardfork.Byzantium); + }); + c.setHardfork(Hardfork.Byzantium); + }); + + it('hardforkBlock()', () => { + let c = new Common({ chain: Chain.Goerli }); + expect(c.hardforkBlock(Hardfork.Byzantium)!).toEqual(BigInt(0)); + + expect(c.hardforkBlock('thisHardforkDoesNotExist')).toBeNull(); + + c = new Common({ chain: Chain.Sepolia, hardfork: Hardfork.MergeForkIdTransition }); + expect(c.hardforkBlock()!).toEqual(BigInt(1735371)); + + c = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Istanbul }); + expect(c.hardforkBlock()!).toEqual(BigInt(9069000)); + + c = new Common({ chain: Chain.Mainnet }); + expect(c.hardforkBlock(Hardfork.Berlin)!).toEqual(BigInt(12244000)); + expect(c.hardforkBlock(Hardfork.Berlin)!).toEqual(BigInt(12244000)); + + // developer note: when Shanghai is set, + // update this test to next unscheduled hardfork. + expect(c.hardforkBlock(Hardfork.Shanghai)).toBeNull(); + expect(c.hardforkBlock(Hardfork.Shanghai)).toBeNull(); + expect(c.nextHardforkBlockOrTimestamp(Hardfork.Shanghai)).toBeNull(); + }); + + it('isHardforkBlock()', () => { + let c = new Common({ chain: Chain.Sepolia }); + // eslint-disable-next-line deprecation/deprecation + expect(c.isHardforkBlock(1450409)).toBe(true); + // eslint-disable-next-line deprecation/deprecation + expect(c.isHardforkBlock(1735372)).toBe(false); + + c = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Byzantium }); + // eslint-disable-next-line deprecation/deprecation + expect(c.isHardforkBlock(4370000)).toBe(true); + // eslint-disable-next-line deprecation/deprecation + expect(c.isHardforkBlock(2463001)).toBe(false); + }); + + it('nextHardforkBlockOrTimestamp()', () => { + let c = new Common({ chain: Chain.Sepolia, hardfork: Hardfork.MergeForkIdTransition }); + expect(c.nextHardforkBlockOrTimestamp()!).toEqual(BigInt(1677557088)); + + expect(c.nextHardforkBlockOrTimestamp('mergeForkIdTransition')!).toEqual( + BigInt(1677557088), + ); + expect(c.nextHardforkBlockOrTimestamp(Hardfork.Byzantium)!).toEqual(BigInt(1735371)); + expect(c.nextHardforkBlockOrTimestamp(Hardfork.London)).toEqual(BigInt(1735371)); + c = new Common({ chain: Chain.Goerli, hardfork: Hardfork.Chainstart }); + expect(c.nextHardforkBlockOrTimestamp()!).toEqual(BigInt(1561651)); + }); + + it('isNextHardforkBlock()', () => { + const c = new Common({ chain: Chain.Goerli, hardfork: Hardfork.Istanbul }); + // eslint-disable-next-line deprecation/deprecation + expect(c.isNextHardforkBlock(4460644)).toBe(true); + // eslint-disable-next-line deprecation/deprecation + expect(c.isNextHardforkBlock(5062605, 'berlin')).toBe(true); + // eslint-disable-next-line deprecation/deprecation + expect(c.isNextHardforkBlock(5062605, Hardfork.Berlin)).toBe(true); + // eslint-disable-next-line deprecation/deprecation + expect(c.isNextHardforkBlock(13773000, Hardfork.Byzantium)).toBe(false); + // eslint-disable-next-line deprecation/deprecation + expect(c.isNextHardforkBlock(13773001, Hardfork.London)).toBe(false); + }); + + it('hardforkIsActiveOnBlock() / activeOnBlock()', () => { + let c = new Common({ chain: Chain.Goerli }); + expect(c.hardforkIsActiveOnBlock(Hardfork.Istanbul, 1561651)).toBe(true); + + expect(c.hardforkIsActiveOnBlock(Hardfork.London, 5062605)).toBe(true); + + expect(c.hardforkIsActiveOnBlock(Hardfork.Byzantium, 1699999)).toBe(false); + + c = new Common({ chain: Chain.Goerli, hardfork: Hardfork.London }); + // eslint-disable-next-line no-null/no-null + expect(c.hardforkIsActiveOnBlock(null, 5062605)).toBe(true); + + expect(c.activeOnBlock(5062605)).toBe(true); + // eslint-disable-next-line no-null/no-null + expect(c.hardforkIsActiveOnBlock(null, 5062605)).toBe(true); + // eslint-disable-next-line no-null/no-null + expect(c.hardforkIsActiveOnBlock(null, 1699999)).toBe(false); + }); + + it('hardforkGteHardfork()', () => { + let c = new Common({ chain: Chain.Goerli }); + expect(c.hardforkGteHardfork(Hardfork.Constantinople, Hardfork.Byzantium)).toBe(true); + + expect(c.hardforkGteHardfork(Hardfork.Dao, Hardfork.Chainstart)).toBe(false); + + expect(c.hardforkGteHardfork(Hardfork.Byzantium, Hardfork.Byzantium)).toBe(true); + + expect(c.hardforkGteHardfork(Hardfork.SpuriousDragon, Hardfork.Byzantium)).toBe(false); + + c = new Common({ chain: Chain.Goerli, hardfork: Hardfork.Byzantium }); + // eslint-disable-next-line no-null/no-null + expect(c.hardforkGteHardfork(null, Hardfork.SpuriousDragon)).toBe(true); + + expect(c.gteHardfork(Hardfork.SpuriousDragon)).toBe(true); + // eslint-disable-next-line no-null/no-null + expect(c.hardforkGteHardfork(null, Hardfork.Byzantium)).toBe(true); + // eslint-disable-next-line no-null/no-null + expect(c.hardforkGteHardfork(null, Hardfork.Constantinople)).toBe(false); + }); + + it('hardforkGteHardfork() ropsten', () => { + const c = new Common({ chain: Chain.Goerli }); + expect(c.hardforkGteHardfork(Hardfork.SpuriousDragon, Hardfork.MuirGlacier)).toBe(false); + }); + + it('_calcForkHash()', () => { + const chains: [Chain, Uint8Array][] = [ + [ + Chain.Mainnet, + hexToBytes('d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3'), + ], + [ + Chain.Goerli, + hexToBytes('bf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a'), + ], + [ + Chain.Sepolia, + hexToBytes('25a5cc106eea7138acab33231d7160d69cb777ee0c2c553fcddf5138993e6dd9'), + ], + ]; + + let c = new Common({ chain: Chain.Mainnet }); + const mainnetGenesisHash = chains[0][1]; + expect(c._calcForkHash(Hardfork.Chainstart, mainnetGenesisHash)).toBe('0xfc64ec04'); + + expect(c._calcForkHash(Hardfork.Homestead, mainnetGenesisHash)).toBe('0x97c2c34c'); + + expect(c._calcForkHash(Hardfork.Byzantium, mainnetGenesisHash)).toBe('0xa00bc324'); + + for (const [chain, genesisHash] of chains) { + c = new Common({ chain }); + for (const hf of c.hardforks()) { + if (typeof hf.forkHash !== 'string') { + continue; + } + expect(c._calcForkHash(hf.name, genesisHash)).toEqual(hf.forkHash); + } + } + }); + + it('forkHash()', () => { + let c = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Byzantium }); + expect(c.forkHash()).toBe('0xa00bc324'); + expect(c.forkHash(Hardfork.SpuriousDragon)).toBe('0x3edd5b10'); + const genesisHash = hexToBytes( + 'd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3', + ); + expect(c.forkHash(Hardfork.SpuriousDragon, genesisHash)).toBe('0x3edd5b10'); + + c = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Shanghai }); + // unschedule shanghai on it to test + c.hardforks() + .filter(hf => hf.name === Hardfork.Shanghai) + // eslint-disable-next-line array-callback-return + .map(hf => { + // eslint-disable-next-line no-null/no-null, no-param-reassign + hf.block = null; + // eslint-disable-next-line no-param-reassign + hf.timestamp = undefined; + }); + expect(() => { + c.forkHash(Hardfork.Shanghai); + }).toThrow('No fork hash calculation possible'); + expect(() => { + c.forkHash('thisHardforkDoesNotExist'); + }).toThrow('No fork hash calculation possible'); + }); + + it('hardforkForForkHash()', () => { + const c = new Common({ chain: Chain.Mainnet }); + + const res = c.hardforkForForkHash('0x3edd5b10')!; + expect(res.name).toEqual(Hardfork.SpuriousDragon); + + expect(c.hardforkForForkHash('0x12345')).toBeNull(); + }); + + it('HF consensus updates', () => { + let c = new Common({ chain: Chain.Goerli, hardfork: Hardfork.Byzantium }); + expect(c.consensusType()).toEqual(ConsensusType.ProofOfAuthority); + expect(c.consensusAlgorithm()).toEqual(ConsensusAlgorithm.Clique); + expect(c.consensusConfig()['period']).toBe(15); + + c = new Common({ chain: Chain.Goerli, hardfork: Hardfork.Merge }); + expect(c.consensusType()).toEqual(ConsensusType.ProofOfStake); + expect(c.consensusAlgorithm()).toEqual(ConsensusAlgorithm.Casper); + expect(c.consensusConfig()).toEqual({}); + }); + + it('Should correctly apply hardfork changes', () => { + // For sepolia MergeForkIdTransition happens AFTER merge + let c = new Common({ chain: Chain.Sepolia, hardfork: Hardfork.London }); + expect(c['HARDFORK_CHANGES'][11][0]).toEqual(Hardfork.Merge); + expect(c['HARDFORK_CHANGES'][12][0]).toEqual(Hardfork.MergeForkIdTransition); + + // Should give correct ConsensusType pre and post merge + expect(c.consensusType()).toEqual(ConsensusType.ProofOfWork); + c.setHardfork(Hardfork.Merge); + expect(c.consensusType()).toEqual(ConsensusType.ProofOfStake); + c.setHardfork(Hardfork.MergeForkIdTransition); + expect(c.consensusType()).toEqual(ConsensusType.ProofOfStake); + + // For kiln MergeForkIdTransition happens BEFORE Merge + + c = Common.fromGethGenesis(gethGenesisKiln, { + chain: 'kiln', + mergeForkIdPostMerge: false, + }); + + // MergeForkIdTransition change should be before Merge + expect(c['HARDFORK_CHANGES'][10][0]).toEqual(Hardfork.MergeForkIdTransition); + expect(c['HARDFORK_CHANGES'][11][0]).toEqual(Hardfork.Merge); + + // Should give correct ConsensusType pre and post merge + c.setHardfork(Hardfork.London); + expect(c.consensusType()).toEqual(ConsensusType.ProofOfWork); + c.setHardfork(Hardfork.Merge); + expect(c.consensusType()).toEqual(ConsensusType.ProofOfStake); + c.setHardfork(Hardfork.MergeForkIdTransition); + expect(c.consensusType()).toEqual(ConsensusType.ProofOfWork); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/common/mergePOS.test.ts b/packages/web3-eth-accounts/test/unit/common/mergePOS.test.ts new file mode 100644 index 00000000000..a2337c58c32 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/common/mergePOS.test.ts @@ -0,0 +1,256 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { toBigInt } from 'web3-utils'; +import { Chain, Common, Hardfork } from '../../../src/common'; + +import * as testnetMerge from '../../fixtures/common/merge/testnetMerge.json'; +import * as testnetPOS from '../../fixtures/common/merge/testnetPOS.json'; +import postMerge from '../../fixtures/common/post-merge.json'; + +describe('[Common]: Merge/POS specific logic', () => { + it('hardforkTTD()', () => { + const customChains = [testnetMerge]; + const c = new Common({ chain: 'testnetMerge', hardfork: Hardfork.Istanbul, customChains }); + expect(c.hardforkTTD(Hardfork.Merge)).toEqual(BigInt(5000)); + expect(c.hardforkTTD('thisHardforkDoesNotExist')).toBeNull(); + }); + + it('getHardforkByBlockNumber(), merge block null, with total difficulty', () => { + const customChains = [testnetMerge]; + const c = new Common({ + chain: 'testnetMerge', + hardfork: Hardfork.Istanbul, + customChains, + }); + + expect(c.getHardforkByBlockNumber(0)).toBe('chainstart'); + expect(c.getHardforkByBlockNumber(14)).toBe('london'); + expect(c.getHardforkByBlockNumber(15, 5000)).toBe('merge'); + expect(c.getHardforkByBlockNumber(15, 5001)).toBe('merge'); + expect(c.getHardforkByBlockNumber(15, 4999)).toBe('london'); + expect(c.getHardforkByBlockNumber(12, 4999)).toBe('berlin'); + }); + + it('getHardforkByBlockNumber(), merge block set, with total difficulty', () => { + const testnetMergeWithBlockNumber = JSON.parse(JSON.stringify(testnetMerge)); + // Set Merge block to 15 + testnetMergeWithBlockNumber['hardforks'][8]['block'] = 16; + const customChains = [testnetMergeWithBlockNumber]; + const c = new Common({ + chain: 'testnetMerge', + hardfork: Hardfork.Istanbul, + customChains, + }); + + expect(c.getHardforkByBlockNumber(0)).toBe('chainstart'); + expect(c.getHardforkByBlockNumber(16)).toBe('merge'); + expect(c.getHardforkByBlockNumber(16, 5000)).toBe('merge'); + expect(c.getHardforkByBlockNumber(16, 5001)).toBe('merge'); + expect(c.getHardforkByBlockNumber(12, 4999)).toBe('berlin'); + + expect(() => { + c.getHardforkByBlockNumber(16, 4999); + }).toThrow('Maximum HF determined by total difficulty is lower than the block number HF'); + + expect(() => { + c.getHardforkByBlockNumber(14, 5000); + }).toThrow('HF determined by block number is lower than the minimum total difficulty HF'); + }); + + it('getHardforkByBlockNumber(), merge block set + subsequent HF, with total difficulty', () => { + const testnetMergeWithBlockNumber = JSON.parse(JSON.stringify(testnetMerge)); + // Set Merge block to 15 + testnetMergeWithBlockNumber['hardforks'][8]['block'] = 16; + // Set Shanghai block to 18 + testnetMergeWithBlockNumber['hardforks'][9]['block'] = 18; + const customChains = [testnetMergeWithBlockNumber]; + const c = new Common({ + chain: 'testnetMerge', + hardfork: Hardfork.Istanbul, + customChains, + }); + + expect(c.getHardforkByBlockNumber(18, 5001)).toBe('shanghai'); + }); + + it('setHardforkByBlockNumber(), merge block null, with total difficulty', () => { + const customChains = [testnetMerge]; + const c = new Common({ + chain: 'testnetMerge', + hardfork: Hardfork.Istanbul, + customChains, + }); + + expect(c.setHardforkByBlockNumber(0)).toBe('chainstart'); + expect(c.setHardforkByBlockNumber(14)).toBe('london'); + expect(c.setHardforkByBlockNumber(15, 5000)).toBe('merge'); + expect(c.setHardforkByBlockNumber(15, 5001)).toBe('merge'); + expect(c.setHardforkByBlockNumber(15, 4999)).toBe('london'); + expect(c.setHardforkByBlockNumber(12, 4999)).toBe('berlin'); + }); + + it('setHardforkByBlockNumber(), merge block set, with total difficulty', () => { + const testnetMergeWithBlockNumber = JSON.parse(JSON.stringify(testnetMerge)); + // Set Merge block to 15 + testnetMergeWithBlockNumber['hardforks'][8]['block'] = 16; + const customChains = [testnetMergeWithBlockNumber]; + const c = new Common({ + chain: 'testnetMerge', + hardfork: Hardfork.Istanbul, + customChains, + }); + + expect(c.setHardforkByBlockNumber(0)).toBe('chainstart'); + expect(c.setHardforkByBlockNumber(16)).toBe('merge'); + expect(c.setHardforkByBlockNumber(16, 5000)).toBe('merge'); + expect(c.setHardforkByBlockNumber(16, 5001)).toBe('merge'); + expect(c.setHardforkByBlockNumber(12, 4999)).toBe('berlin'); + + expect(() => { + c.setHardforkByBlockNumber(16, 4999); + }).toThrow('Maximum HF determined by total difficulty is lower than the block number HF'); + + expect(() => { + c.setHardforkByBlockNumber(14, 5000); + }).toThrow('HF determined by block number is lower than the minimum total difficulty HF'); + }); + + it('setHardforkByBlockNumber(), merge block set + subsequent HF, with total difficulty', () => { + const testnetMergeWithBlockNumber = JSON.parse(JSON.stringify(testnetMerge)); + // Set Merge block to 15 + testnetMergeWithBlockNumber['hardforks'][8]['block'] = 16; + // Set Shanghai block to 18 + testnetMergeWithBlockNumber['hardforks'][9]['block'] = 18; + const customChains = [testnetMergeWithBlockNumber]; + const c = new Common({ + chain: 'testnetMerge', + hardfork: Hardfork.Istanbul, + customChains, + }); + + expect(c.setHardforkByBlockNumber(18, 5001)).toBe('shanghai'); + }); + + it('Pure POS testnet', () => { + const customChains = [testnetPOS]; + const c = new Common({ chain: 'testnetPOS', hardfork: Hardfork.Chainstart, customChains }); + + expect(c.hardforkTTD(Hardfork.Chainstart)).toEqual(BigInt(0)); + + expect(c.getHardforkByBlockNumber(5, 0)).toBe('shanghai'); + }); + + it('Should fail setting invalid hardfork', () => { + const customChains = [testnetPOS]; + expect(() => { + // eslint-disable-next-line no-new + new Common({ chain: 'testnetPOS', hardfork: Hardfork.Istanbul, customChains }); + }).toThrow(`Hardfork with name istanbul not supported`); + }); + + it('should get the correct merge hardfork at genesis', async () => { + const c = Common.fromGethGenesis(postMerge, { chain: 'post-merge' }); + expect(c.getHardforkByBlockNumber(0)).toEqual(Hardfork.London); + expect(c.getHardforkByBlockNumber(0, BigInt(0))).toEqual(Hardfork.Merge); + }); + + it('test post merge hardforks using Sepolia with block null', () => { + const c = new Common({ chain: Chain.Sepolia }); + + expect(c.getHardforkByBlockNumber(0)).toEqual(Hardfork.London); + // Make it null manually as config could be updated later + // eslint-disable-next-line no-null/no-null + const mergeHf = c.hardforks().filter(hf => hf.ttd !== undefined && hf.ttd !== null)[0]; + const prevMergeBlockVal = mergeHf.block; + // eslint-disable-next-line no-null/no-null + mergeHf.block = null; + + // should get Hardfork.London even though happened with 1450408 as terminal as config doesn't have that info + expect(c.getHardforkByBlockNumber(1450409)).toEqual(Hardfork.London); + // however with correct td in input it should select merge + expect(c.getHardforkByBlockNumber(1450409, BigInt('17000000000000000'))).toEqual( + Hardfork.Merge, + ); + // should select MergeForkIdTransition even without td specified as the block is set for this hardfork + expect(c.getHardforkByBlockNumber(1735371)).toEqual(Hardfork.MergeForkIdTransition); + // also with td specified + expect(c.getHardforkByBlockNumber(1735371, BigInt('17000000000000000'))).toEqual( + Hardfork.MergeForkIdTransition, + ); + + // Check nextHardforkBlockOrTimestamp should be MergeForkIdTransition's block on london and merge both + expect(c.nextHardforkBlockOrTimestamp(Hardfork.Berlin)).toEqual(toBigInt(1735371)); + expect(c.nextHardforkBlockOrTimestamp(Hardfork.London)).toEqual(toBigInt(1735371)); + expect(c.nextHardforkBlockOrTimestamp(Hardfork.Merge)).toEqual(toBigInt(1735371)); + + expect(() => { + c.getHardforkByBlockNumber(1735371, BigInt('15000000000000000')); + }).toThrow('Maximum HF determined by total difficulty is lower than the block number HF'); + + expect(c.setHardforkByBlockNumber(0)).toEqual(Hardfork.London); + expect(c.setHardforkByBlockNumber(1450409)).toEqual(Hardfork.London); + expect(c.setHardforkByBlockNumber(1450409, BigInt('17000000000000000'))).toEqual( + Hardfork.Merge, + ); + expect(c.setHardforkByBlockNumber(1735371)).toEqual(Hardfork.MergeForkIdTransition); + expect(c.setHardforkByBlockNumber(1735371, BigInt('17000000000000000'))).toEqual( + Hardfork.MergeForkIdTransition, + ); + + expect(() => { + c.setHardforkByBlockNumber(1735371, BigInt('15000000000000000')); + }).toThrow('Maximum HF determined by total difficulty is lower than the block number HF'); + // restore value + mergeHf.block = prevMergeBlockVal; + }); + + it('should get correct merge and post merge hf with merge block specified', () => { + const c = new Common({ chain: Chain.Sepolia }); + // eslint-disable-next-line no-null/no-null + const mergeHf = c.hardforks().filter(hf => hf.ttd !== undefined && hf.ttd !== null)[0]; + const prevMergeBlockVal = mergeHf.block; + // the terminal block on sepolia is 1450408 + mergeHf.block = 1450409; + + // should get merge even without td supplied as the merge hf now has the block specified + expect(c.setHardforkByBlockNumber(1450409)).toEqual(Hardfork.Merge); + expect(c.setHardforkByBlockNumber(1450409, BigInt('17000000000000000'))).toEqual( + Hardfork.Merge, + ); + expect(c.setHardforkByBlockNumber(1735371)).toEqual(Hardfork.MergeForkIdTransition); + expect(c.setHardforkByBlockNumber(1735371, BigInt('17000000000000000'))).toEqual( + Hardfork.MergeForkIdTransition, + ); + + // Check nextHardforkBlockOrTimestamp should be MergeForkIdTransition's block on london and merge both + expect(c.nextHardforkBlockOrTimestamp(Hardfork.London)).toEqual(toBigInt(1735371)); + expect(c.nextHardforkBlockOrTimestamp(Hardfork.Merge)).toEqual(toBigInt(1735371)); + + // restore value + mergeHf.block = prevMergeBlockVal; + }); + + it('should throw if encounters a double ttd hardfork specification', () => { + const c = new Common({ chain: Chain.Sepolia }); + // Add the ttd to mergeForkIdTransition which occurs post merge in sepolia + c.hardforks().filter(hf => hf.name === 'mergeForkIdTransition')[0]!['ttd'] = + '17000000000000000'; + expect(() => { + c.setHardforkByBlockNumber(1735371); + }).toThrow('More than one merge hardforks found with ttd specified'); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/common/params.test.ts b/packages/web3-eth-accounts/test/unit/common/params.test.ts new file mode 100644 index 00000000000..46e8720e2db --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/common/params.test.ts @@ -0,0 +1,102 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Chain, Common, Hardfork } from '../../../src/common'; + +describe('[Common]: Parameter access for param(), paramByHardfork()', () => { + it('Basic usage', () => { + const c = new Common({ chain: Chain.Mainnet, eips: [2537] }); + expect(c.paramByHardfork('gasPrices', 'ecAdd', 'byzantium')).toEqual(BigInt(500)); + + c.setHardfork(Hardfork.Byzantium); + expect(c.param('gasPrices', 'ecAdd')).toEqual(BigInt(500)); + c.setHardfork(Hardfork.Istanbul); + expect(c.param('gasPrices', 'ecAdd')).toEqual(BigInt(150)); + c.setHardfork(Hardfork.MuirGlacier); + expect(c.param('gasPrices', 'ecAdd')).toEqual(BigInt(150)); + + expect(c.param('gasPrices', 'notexistingvalue')).toEqual(BigInt(0)); + expect(c.paramByHardfork('gasPrices', 'notexistingvalue', 'byzantium')).toEqual(BigInt(0)); + }); + + it('Error cases for param(), paramByHardfork()', () => { + const c = new Common({ chain: Chain.Mainnet }); + + expect(() => { + c.paramByHardfork('gasPrizes', 'ecAdd', 'byzantium'); + }).toThrow('Topic gasPrizes not defined'); + + c.setHardfork(Hardfork.Byzantium); + expect(c.param('gasPrices', 'ecAdd')).toEqual(BigInt(500)); + }); + + it('Parameter updates', () => { + const c = new Common({ chain: Chain.Mainnet }); + + expect(c.paramByHardfork('pow', 'minerReward', 'chainstart')).toEqual( + BigInt(5000000000000000000), + ); + + expect(c.paramByHardfork('pow', 'minerReward', 'byzantium')).toEqual( + BigInt(3000000000000000000), + ); + + expect(c.paramByHardfork('gasPrices', 'netSstoreNoopGas', 'constantinople')).toEqual( + BigInt(200), + ); + + expect(c.paramByHardfork('gasPrices', 'netSstoreNoopGas', 'petersburg')).toEqual(BigInt(0)); + }); + + it('Access by block number, paramByBlock()', () => { + const c = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Byzantium }); + expect(c.paramByBlock('pow', 'minerReward', 4370000)).toEqual(BigInt(3000000000000000000)); + expect(c.paramByBlock('pow', 'minerReward', 4369999)).toEqual(BigInt(5000000000000000000)); + + const td = BigInt('1196768507891266117779'); + expect(c.paramByBlock('pow', 'minerReward', 4370000, td)).toEqual( + BigInt(3000000000000000000), + ); + }); + + it('EIP param access, paramByEIP()', () => { + const c = new Common({ chain: Chain.Mainnet }); + + expect(c.paramByEIP('gasPrices', 'notexistingvalue', 2537)).toBeUndefined(); + + const UNSUPPORTED_EIP = 1000000; + expect(() => { + c.paramByEIP('gasPrices', 'Bls12381G1AddGas', UNSUPPORTED_EIP); + }).toThrow('not supported'); + + expect(() => { + c.paramByEIP('notExistingTopic', 'Bls12381G1AddGas', 2537); + }).toThrow('not defined'); + + expect(c.paramByEIP('gasPrices', 'Bls12381G1AddGas', 2537)).toEqual(BigInt(600)); + }); + + it('returns the right block delay for EIP3554', () => { + for (const fork of [Hardfork.MuirGlacier, Hardfork.Berlin]) { + const c = new Common({ chain: Chain.Mainnet, hardfork: fork }); + let delay = c.param('pow', 'difficultyBombDelay'); + expect(delay).toEqual(BigInt(9000000)); + c.setEIPs([3554]); + delay = c.param('pow', 'difficultyBombDelay'); + expect(delay).toEqual(BigInt(9500000)); + } + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/common/timestamp.test.ts b/packages/web3-eth-accounts/test/unit/common/timestamp.test.ts new file mode 100644 index 00000000000..6718119c349 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/common/timestamp.test.ts @@ -0,0 +1,144 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { hexToBytes } from 'web3-utils'; +import { Chain, Common, Hardfork } from '../../../src/common'; + +import * as timestampJson from '../../fixtures/common/shanghai-time.json'; + +describe('[Common]: Timestamp Hardfork logic', () => { + it('shanghai-time', () => { + const c = Common.fromGethGenesis(timestampJson, { + chain: 'withdrawals', + }); + expect(c.getHardforkByBlockNumber(1, undefined, 0)).toEqual(Hardfork.MergeForkIdTransition); + expect(c.getHardforkByBlockNumber(1, undefined, 1668699476)).toEqual(Hardfork.Shanghai); + expect(c.getHardforkByBlockNumber(1, undefined, 1668699576)).toEqual(Hardfork.Shanghai); + }); + + it('schedule sharding on shanghai-time', () => { + const config = { + ...timestampJson.config, + shardingForkTime: timestampJson.config.shanghaiTime, + }; + const modifiedJson = { ...timestampJson, config }; + const c = Common.fromGethGenesis(modifiedJson, { + chain: 'modified', + }); + expect(c.getHardforkByBlockNumber(1, undefined, 0)).toEqual(Hardfork.MergeForkIdTransition); + expect(c.nextHardforkBlockOrTimestamp(Hardfork.Shanghai)).toBeNull(); + }); + + it('schedule sharding post shanghai-time', () => { + const config = { + ...timestampJson.config, + shardingForkTime: timestampJson.config.shanghaiTime + 1000, + }; + const modifiedJson = { ...timestampJson, config }; + const c = Common.fromGethGenesis(modifiedJson, { + chain: 'modified', + }); + expect(c.getHardforkByBlockNumber(1, undefined, 0)).toEqual(Hardfork.MergeForkIdTransition); + // Should give the shanghai as sharding is schedule a bit post shanghai + expect(c.getHardforkByBlockNumber(1, undefined, 1668699476)).toEqual(Hardfork.Shanghai); + expect(c.getHardforkByBlockNumber(1, undefined, 1668699576)).toEqual(Hardfork.Shanghai); + }); + + it('forkHash', () => { + const mainnet = new Common({ chain: Chain.Mainnet }); + const hfs = mainnet.hardforks(); + const mergeIndex = hfs.findIndex(hf => hf.name === Hardfork.Merge); + const hardforks = hfs.slice(0, mergeIndex + 1).concat([ + // Add these hardforks as specified here: + // https://github.com/ethereum/EIPs/pull/6122/files + { + name: 'mergeForkIdTransition', + block: 18000000, + forkHash: '0x4fb8a872', + }, + { + name: 'shanghai', + // eslint-disable-next-line no-null/no-null + block: null, + timestamp: '1668000000', + forkHash: '0xc1fdf181', + }, + ]); + + const c = Common.custom({ hardforks }, { baseChain: Chain.Mainnet }); + const mainnetGenesisHash = hexToBytes( + 'd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3', + ); + for (const hf of c.hardforks()) { + if (typeof hf.forkHash !== 'string') { + continue; + } + expect(c._calcForkHash(hf.name, mainnetGenesisHash)).toEqual(hf.forkHash); + } + + c.setHardfork(Hardfork.MergeForkIdTransition); + expect(c.nextHardforkBlockOrTimestamp()).toEqual(BigInt(1668000000)); + + c.setHardfork(Hardfork.Shanghai); + expect(c.forkHash()).toBe('0xc1fdf181'); + expect(c.hardforkForForkHash('0xc1fdf181')?.name).toEqual(Hardfork.Shanghai); + }); + + it('setForkHashes', () => { + const mainnet = new Common({ chain: Chain.Mainnet }); + const hfs = mainnet.hardforks(); + const mergeIndex = hfs.findIndex(hf => hf.name === Hardfork.Merge); + const hardforks = hfs.slice(0, mergeIndex + 1).concat([ + // Add these hardforks as specified here: + // https://github.com/ethereum/EIPs/pull/6122/files + { + name: 'mergeForkIdTransition', + block: 18000000, + }, + { + name: 'shanghai', + // eslint-disable-next-line no-null/no-null + block: null, + timestamp: '1668000000', + }, + ]); + + const c = Common.custom({ hardforks }, { baseChain: Chain.Mainnet }); + const mainnetGenesisHash = hexToBytes( + 'd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3', + ); + + let noForkHashes = c.hardforks().reduce((acc, hf) => { + if (hf.forkHash === undefined) { + // eslint-disable-next-line no-param-reassign + acc += 1; + } + return acc; + }, 0); + expect(noForkHashes).toBe(2); + + c.setForkHashes(mainnetGenesisHash); + noForkHashes = c.hardforks().reduce((acc, hf) => { + if (hf.forkHash === undefined) { + // eslint-disable-next-line no-param-reassign + acc += 1; + } + return acc; + }, 0); + expect(noForkHashes).toBe(0); + expect(c.forkHash(Hardfork.Shanghai)).toBe('0xc1fdf181'); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/common/utils.test.ts b/packages/web3-eth-accounts/test/unit/common/utils.test.ts new file mode 100644 index 00000000000..ae1660fc591 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/common/utils.test.ts @@ -0,0 +1,173 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { hexToBytes } from 'web3-utils'; +import { Common } from '../../../src/common/common'; +import { Hardfork } from '../../../src/common'; +import { parseGethGenesis } from '../../../src/common/utils'; +import testnet from '../../fixtures/common/testnetValid.json'; +import invalidSpuriousDragon from '../../fixtures/common/invalid-spurious-dragon.json'; +import poa from '../../fixtures/common/poa.json'; +import postMerge from '../../fixtures/common/post-merge.json'; +import noExtraData from '../../fixtures/common/no-extra-data.json'; +import gethGenesisKiln from '../../fixtures/common/geth-genesis-kiln.json'; +import postMergeHardfork from '../../fixtures/common/post-merge-hardfork.json'; + +describe('[Utils/Parse]', () => { + const kilnForkHashes: any = { + chainstart: '0xbcadf543', + homestead: '0xbcadf543', + tangerineWhistle: '0xbcadf543', + spuriousDragon: '0xbcadf543', + byzantium: '0xbcadf543', + constantinople: '0xbcadf543', + petersburg: '0xbcadf543', + istanbul: '0xbcadf543', + berlin: '0xbcadf543', + london: '0xbcadf543', + mergeForkIdTransition: '0x013fd1b5', + merge: '0x013fd1b5', + }; + + it('should parse geth params file', () => { + const params = parseGethGenesis(testnet, 'rinkeby'); + expect(params.genesis.nonce).toBe('0x0000000000000042'); + }); + + it('should throw with invalid Spurious Dragon blocks', () => { + expect(() => { + parseGethGenesis(invalidSpuriousDragon, 'bad_params'); + }).toThrow(); + }); + + it('should import poa network params correctly', () => { + let params = parseGethGenesis(poa, 'poa'); + expect(params.genesis.nonce).toBe('0x0000000000000000'); + expect(params.consensus).toEqual({ + type: 'poa', + algorithm: 'clique', + clique: { period: 15, epoch: 30000 }, + }); + poa.nonce = '00'; + params = parseGethGenesis(poa, 'poa'); + expect(params.genesis.nonce).toBe('0x0000000000000000'); + expect(params.hardfork).toEqual(Hardfork.London); + }); + + it('should generate expected hash with london block zero and base fee per gas defined', () => { + const params = parseGethGenesis(postMerge, 'post-merge'); + expect(params.genesis.baseFeePerGas).toEqual(postMerge.baseFeePerGas); + }); + + it('should successfully parse genesis file with no extraData', () => { + const params = parseGethGenesis(noExtraData, 'noExtraData'); + expect(params.genesis.extraData).toBe('0x'); + expect(params.genesis.timestamp).toBe('0x10'); + }); + + it('should successfully parse kiln genesis and set forkhash', () => { + const common = Common.fromGethGenesis(gethGenesisKiln, { + chain: 'customChain', + genesisHash: hexToBytes( + '51c7fe41be669f69c45c33a56982cbde405313342d9e2b00d7c91a7b284dd4f8', + ), + mergeForkIdPostMerge: false, + }); + expect(common.hardforks().map(hf => hf.name)).toEqual([ + 'chainstart', + 'homestead', + 'tangerineWhistle', + 'spuriousDragon', + 'byzantium', + 'constantinople', + 'petersburg', + 'istanbul', + 'berlin', + 'london', + 'mergeForkIdTransition', + 'merge', + ]); + for (const hf of common.hardforks()) { + /* eslint-disable @typescript-eslint/no-use-before-define */ + expect(hf.forkHash).toEqual(kilnForkHashes[hf.name]); + } + + expect(common.hardfork()).toEqual(Hardfork.Merge); + + // Ok lets schedule shanghai at block 0, this should force merge to be scheduled at just after + // genesis if even mergeForkIdTransition is not confirmed to be post merge + // This will also check if the forks are being correctly sorted based on block + Object.assign(gethGenesisKiln.config, { shanghaiTime: Math.floor(Date.now() / 1000) }); + const common1 = Common.fromGethGenesis(gethGenesisKiln, { + chain: 'customChain', + }); + // merge hardfork is now scheduled just after shanghai even if mergeForkIdTransition is not confirmed + // to be post merge + expect(common1.hardforks().map(hf => hf.name)).toEqual([ + 'chainstart', + 'homestead', + 'tangerineWhistle', + 'spuriousDragon', + 'byzantium', + 'constantinople', + 'petersburg', + 'istanbul', + 'berlin', + 'london', + 'merge', + 'mergeForkIdTransition', + 'shanghai', + ]); + + expect(common1.hardfork()).toEqual(Hardfork.Shanghai); + }); + + it('should successfully parse genesis with hardfork scheduled post merge', async () => { + const common = Common.fromGethGenesis(postMergeHardfork, { + chain: 'customChain', + }); + expect(common.hardforks().map(hf => hf.name)).toEqual([ + 'chainstart', + 'homestead', + 'tangerineWhistle', + 'spuriousDragon', + 'byzantium', + 'constantinople', + 'petersburg', + 'istanbul', + 'muirGlacier', + 'berlin', + 'london', + 'merge', + 'shanghai', + ]); + + expect(common.getHardforkByBlockNumber(0)).toEqual(Hardfork.London); + expect(common.getHardforkByBlockNumber(1, BigInt(2))).toEqual(Hardfork.Merge); + // shanghai is at timestamp 8 + expect(common.getHardforkByBlockNumber(8)).toEqual(Hardfork.London); + expect(common.getHardforkByBlockNumber(8, BigInt(2))).toEqual(Hardfork.Merge); + expect(common.getHardforkByBlockNumber(8, undefined, 8)).toEqual(Hardfork.Shanghai); + // should be post merge at shanghai + expect(common.getHardforkByBlockNumber(8, BigInt(2), 8)).toEqual(Hardfork.Shanghai); + // if not post merge, then should error + expect(() => { + common.getHardforkByBlockNumber(8, BigInt(1), 8); + }).toThrow(); + + expect(common.hardfork()).toEqual(Hardfork.Shanghai); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/jest.config.js b/packages/web3-eth-accounts/test/unit/jest.config.js new file mode 100644 index 00000000000..a1352870672 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**/*.ts'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-eth-accounts-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-eth-accounts/test/unit/tx/base.test.ts b/packages/web3-eth-accounts/test/unit/tx/base.test.ts new file mode 100644 index 00000000000..236b0e2ded0 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/tx/base.test.ts @@ -0,0 +1,368 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { bytesToUint8Array, hexToBytes, uint8ArrayEquals } from 'web3-utils'; +import { + AccessListEIP2930Transaction, + Capability, + FeeMarketEIP1559Transaction, + Transaction, +} from '../../../src'; +import { Chain, Common, Hardfork, toUint8Array, uint8ArrayToBigInt } from '../../../src/common'; +import { MAX_INTEGER, MAX_UINT64, SECP256K1_ORDER, secp256k1 } from '../../../src/tx/constants'; + +import type { BaseTransaction } from '../../../src/tx/baseTransaction'; +import eip1559Fixtures from '../../fixtures/json/eip1559txs.json'; +import eip2930Fixtures from '../../fixtures/json/eip2930txs.json'; + +import legacyFixtures from '../../fixtures/json/txs.json'; + +const privateToPublic = function (privateKey: Uint8Array): Uint8Array { + return secp256k1.getPublicKey(privateKey, false).slice(1); +}; +const common = new Common({ + chain: 5, + hardfork: Hardfork.London, +}); +// @ts-expect-error set private property +common._chainParams.chainId = 4; +describe('[BaseTransaction]', () => { + // EIP-2930 is not enabled in Common by default (2021-03-06) + // eslint-disable-next-line @typescript-eslint/no-shadow + const common = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.London }); + + const legacyTxs: BaseTransaction[] = []; + for (const tx of legacyFixtures.slice(0, 4)) { + legacyTxs.push(Transaction.fromTxData(tx.data, { common })); + } + + const eip2930Txs: BaseTransaction[] = []; + for (const tx of eip2930Fixtures) { + eip2930Txs.push(AccessListEIP2930Transaction.fromTxData(tx.data, { common })); + } + + const eip1559Txs: BaseTransaction[] = []; + for (const tx of eip1559Fixtures) { + eip1559Txs.push(FeeMarketEIP1559Transaction.fromTxData(tx.data, { common })); + } + + const zero = new Uint8Array(0); + const txTypes = [ + { + class: Transaction, + name: 'Transaction', + type: 0, + values: Array(6).fill(zero), + txs: legacyTxs, + fixtures: legacyFixtures, + activeCapabilities: [], + notActiveCapabilities: [ + Capability.EIP1559FeeMarket, + Capability.EIP2718TypedTransaction, + Capability.EIP2930AccessLists, + 9999, + ], + }, + { + class: AccessListEIP2930Transaction, + name: 'AccessListEIP2930Transaction', + type: 1, + values: [new Uint8Array([1])].concat(Array(7).fill(zero)), + txs: eip2930Txs, + fixtures: eip2930Fixtures, + activeCapabilities: [Capability.EIP2718TypedTransaction, Capability.EIP2930AccessLists], + notActiveCapabilities: [Capability.EIP1559FeeMarket, 9999], + }, + { + class: FeeMarketEIP1559Transaction, + name: 'FeeMarketEIP1559Transaction', + type: 2, + values: [new Uint8Array([1])].concat(Array(8).fill(zero)), + txs: eip1559Txs, + fixtures: eip1559Fixtures, + activeCapabilities: [ + Capability.EIP1559FeeMarket, + Capability.EIP2718TypedTransaction, + Capability.EIP2930AccessLists, + ], + notActiveCapabilities: [9999], + }, + ]; + + it('Initialization', () => { + for (const txType of txTypes) { + let tx = txType.class.fromTxData({}, { common }); + expect(tx.common.hardfork()).toBe('london'); + expect(Object.isFrozen(tx)).toBe(true); + + const initCommon = new Common({ + chain: Chain.Mainnet, + hardfork: Hardfork.London, + }); + tx = txType.class.fromTxData({}, { common: initCommon }); + expect(tx.common.hardfork()).toBe('london'); + + initCommon.setHardfork(Hardfork.Byzantium); + expect(tx.common.hardfork()).toBe('london'); + + tx = txType.class.fromTxData({}, { common, freeze: false }); + expect(!Object.isFrozen(tx)).toBe(true); + + // Perform the same test as above, but now using a different construction method. This also implies that passing on the + // options object works as expected. + tx = txType.class.fromTxData({}, { common, freeze: false }); + const rlpData = tx.serialize(); + + tx = txType.class.fromSerializedTx(rlpData, { common }); + expect(tx.type).toEqual(txType.type); + + expect(Object.isFrozen(tx)).toBe(true); + + tx = txType.class.fromSerializedTx(rlpData, { common, freeze: false }); + expect(!Object.isFrozen(tx)).toBe(true); + + tx = txType.class.fromValuesArray(txType.values as any, { common }); + expect(Object.isFrozen(tx)).toBe(true); + + tx = txType.class.fromValuesArray(txType.values as any, { common, freeze: false }); + expect(!Object.isFrozen(tx)).toBe(true); + } + }); + + it('fromValuesArray()', () => { + let rlpData: any = legacyTxs[0].raw(); + rlpData[0] = toUint8Array('0x00'); + expect(() => { + Transaction.fromValuesArray(rlpData); + }).toThrow('nonce cannot have leading zeroes'); + rlpData[0] = toUint8Array('0x'); + rlpData[6] = toUint8Array('0x00'); + expect(() => { + Transaction.fromValuesArray(rlpData); + }).toThrow('v cannot have leading zeroes'); + rlpData = eip2930Txs[0].raw(); + rlpData[3] = toUint8Array('0x0'); + expect(() => { + AccessListEIP2930Transaction.fromValuesArray(rlpData); + }).toThrow('gasLimit cannot have leading zeroes'); + rlpData = eip1559Txs[0].raw(); + rlpData[2] = toUint8Array('0x0'); + expect(() => { + FeeMarketEIP1559Transaction.fromValuesArray(rlpData); + }).toThrow('maxPriorityFeePerGas cannot have leading zeroes'); + }); + + it('serialize()', () => { + for (const txType of txTypes) { + for (const tx of txType.txs) { + expect(txType.class.fromSerializedTx(tx.serialize(), { common })).toBeTruthy(); + expect(txType.class.fromSerializedTx(tx.serialize(), { common })).toBeTruthy(); + } + } + }); + + it('supports()', () => { + for (const txType of txTypes) { + for (const tx of txType.txs) { + for (const activeCapability of txType.activeCapabilities) { + expect(tx.supports(activeCapability)).toBe(true); + } + for (const notActiveCapability of txType.notActiveCapabilities) { + expect(tx.supports(notActiveCapability)).toBe(false); + } + } + } + }); + + it('raw()', () => { + for (const txType of txTypes) { + for (const tx of txType.txs) { + expect(txType.class.fromValuesArray(tx.raw() as any, { common })).toBeTruthy(); + } + } + }); + + it('verifySignature()', () => { + for (const txType of txTypes) { + for (const tx of txType.txs) { + expect(tx.verifySignature()).toBe(true); + } + } + }); + + it('verifySignature() -> invalid', () => { + for (const txType of txTypes) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + for (const txFixture of txType.fixtures.slice(0, 4)) { + // set `s` to a single zero + txFixture.data.s = '0x0'; + // @ts-expect-error set data + const tx = txType.class.fromTxData(txFixture.data, { common }); + expect(tx.verifySignature()).toBe(false); + expect(tx.validate(true)).toContain('Invalid Signature'); + expect(tx.validate()).toBe(false); + } + } + }); + + it('sign()', () => { + for (const txType of txTypes) { + for (const [i, tx] of txType.txs.entries()) { + const { privateKey } = txType.fixtures[i]; + if (privateKey !== undefined) { + // eslint-disable-next-line jest/no-conditional-expect + expect(tx.sign(hexToBytes(privateKey))).toBeTruthy(); + } + + expect(() => tx.sign(new Uint8Array(bytesToUint8Array('invalid')))).toThrow(); + } + } + }); + + it('isSigned() -> returns correct values', () => { + for (const txType of txTypes) { + const txs = [ + ...txType.txs, + // add unsigned variants + ...txType.txs.map(tx => + txType.class.fromTxData({ + ...tx, + v: undefined, + r: undefined, + s: undefined, + }), + ), + ]; + for (const tx of txs) { + expect(tx.isSigned()).toEqual( + tx.v !== undefined && tx.r !== undefined && tx.s !== undefined, + ); + } + } + }); + + it('getSenderAddress()', () => { + for (const txType of txTypes) { + for (const [i, tx] of txType.txs.entries()) { + const { privateKey, sendersAddress } = txType.fixtures[i]; + if (privateKey === undefined) { + continue; + } + const signedTx = tx.sign(hexToBytes(privateKey)); + expect(signedTx.getSenderAddress().toString()).toBe(`0x${sendersAddress}`); + } + } + }); + + it('getSenderPublicKey()', () => { + for (const txType of txTypes) { + for (const [i, tx] of txType.txs.entries()) { + const { privateKey } = txType.fixtures[i]; + if (privateKey === undefined) { + continue; + } + const signedTx = tx.sign(hexToBytes(privateKey)); + const txPubKey = signedTx.getSenderPublicKey(); + const pubKeyFromPriv = privateToPublic(hexToBytes(privateKey)); + expect(uint8ArrayEquals(txPubKey, pubKeyFromPriv)).toBe(true); + } + } + }); + + it('getSenderPublicKey() -> should throw if s-value is greater than secp256k1n/2', () => { + // EIP-2: All transaction signatures whose s-value is greater than secp256k1n/2 are considered invalid. + // Reasoning: https://ethereum.stackexchange.com/a/55728 + for (const txType of txTypes) { + for (const [i, tx] of txType.txs.entries()) { + const { privateKey } = txType.fixtures[i]; + if (privateKey === undefined) { + continue; + } + let signedTx = tx.sign(hexToBytes(privateKey)); + signedTx = JSON.parse(JSON.stringify(signedTx)); // deep clone + (signedTx as any).s = SECP256K1_ORDER + BigInt(1); + expect(() => { + signedTx.getSenderPublicKey(); + }).toThrow(); + } + } + }); + + it('verifySignature()->valid', () => { + for (const txType of txTypes) { + for (const [i, tx] of txType.txs.entries()) { + const { privateKey } = txType.fixtures[i]; + if (privateKey === undefined) { + continue; + } + const signedTx = tx.sign(hexToBytes(privateKey)); + expect(signedTx.verifySignature()).toBeTruthy(); + } + } + }); + + it('initialization with defaults', () => { + const uInt8ArrayZero = toUint8Array('0x'); + const tx = Transaction.fromTxData({ + nonce: '', + gasLimit: '', + gasPrice: '', + to: '', + value: '', + data: '', + v: '', + r: '', + s: '', + }); + expect(tx.v).toBeUndefined(); + expect(tx.r).toBeUndefined(); + expect(tx.s).toBeUndefined(); + expect(tx.to).toBeUndefined(); + expect(tx.value).toBe(uint8ArrayToBigInt(uInt8ArrayZero)); + expect(tx.data).toEqual(uInt8ArrayZero); + expect(tx.gasPrice).toBe(uint8ArrayToBigInt(uInt8ArrayZero)); + expect(tx.gasLimit).toBe(uint8ArrayToBigInt(uInt8ArrayZero)); + expect(tx.nonce).toBe(uint8ArrayToBigInt(uInt8ArrayZero)); + }); + + it('_validateCannotExceedMaxInteger()', () => { + const tx = FeeMarketEIP1559Transaction.fromTxData(eip1559Txs[0]); + expect(() => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + (tx as any)._validateCannotExceedMaxInteger({ a: MAX_INTEGER }, 256, true); + }).toThrow('equal or exceed MAX_INTEGER'); + + expect(() => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + (tx as any)._validateCannotExceedMaxInteger({ a: MAX_INTEGER + BigInt(1) }, 256, false); + }).toThrow('exceed MAX_INTEGER'); + + expect(() => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + (tx as any)._validateCannotExceedMaxInteger({ a: BigInt(0) }, 100, false); + }).toThrow('unimplemented bits value'); + + expect(() => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + (tx as any)._validateCannotExceedMaxInteger({ a: MAX_UINT64 + BigInt(1) }, 64, false); + }).toThrow('2^64'); + + expect(() => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + (tx as any)._validateCannotExceedMaxInteger({ a: MAX_UINT64 }, 64, true); + }).toThrow('2^64'); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/tx/eip1559.test.ts b/packages/web3-eth-accounts/test/unit/tx/eip1559.test.ts new file mode 100644 index 00000000000..d9a0d8acb92 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/tx/eip1559.test.ts @@ -0,0 +1,244 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { RLP } from '@ethereumjs/rlp'; +import { hexToBytes } from 'web3-utils'; +import { Chain, Common, Hardfork } from '../../../src/common'; + +import { FeeMarketEIP1559Transaction } from '../../../src'; + +import testdata from '../../fixtures/json/eip1559.json'; + +const common = new Common({ + chain: 5, + hardfork: Hardfork.London, +}); +// @ts-expect-error set private property +common._chainParams.chainId = 4; +const TWO_POW256 = BigInt('0x10000000000000000000000000000000000000000000000000000000000000000'); + +const validAddress = hexToBytes('01'.repeat(20)); +const validSlot = hexToBytes('01'.repeat(32)); +const chainId = BigInt(4); + +describe('[FeeMarketEIP1559Transaction]', () => { + it('cannot input decimal or negative values %s', () => { + const values = [ + 'maxFeePerGas', + 'maxPriorityFeePerGas', + 'chainId', + 'nonce', + 'gasLimit', + 'value', + 'v', + 'r', + 's', + ]; + const cases = [ + 10.1, + '10.1', + '0xaa.1', + -10.1, + -1, + BigInt(-10), + '-100', + '-10.1', + '-0xaa', + Infinity, + -Infinity, + NaN, + {}, + true, + false, + // eslint-disable-next-line @typescript-eslint/no-empty-function + () => {}, + Number.MAX_SAFE_INTEGER + 1, + ]; + for (const value of values) { + const txData: any = {}; + for (const testCase of cases) { + if ( + value === 'chainId' && + ((typeof testCase === 'number' && Number.isNaN(testCase)) || testCase === false) + ) { + continue; + } + txData[value] = testCase; + expect(() => { + FeeMarketEIP1559Transaction.fromTxData(txData); + }).toThrow(); + } + } + }); + + it('getUpfrontCost()', () => { + const tx = FeeMarketEIP1559Transaction.fromTxData( + { + maxFeePerGas: 10, + maxPriorityFeePerGas: 8, + gasLimit: 100, + value: 6, + }, + { common }, + ); + expect(tx.getUpfrontCost()).toEqual(BigInt(806)); + let baseFee = BigInt(0); + expect(tx.getUpfrontCost(baseFee)).toEqual(BigInt(806)); + baseFee = BigInt(4); + expect(tx.getUpfrontCost(baseFee)).toEqual(BigInt(1006)); + }); + + it('sign()', () => { + // eslint-disable-next-line @typescript-eslint/prefer-for-of + for (let index = 0; index < testdata.length; index += 1) { + const data = testdata[index]; + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + const pkey = hexToBytes(data.privateKey.slice(2)); + const txn = FeeMarketEIP1559Transaction.fromTxData(data, { common }); + const signed = txn.sign(pkey); + const rlpSerialized = RLP.encode(Uint8Array.from(signed.serialize())); + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + expect(rlpSerialized).toEqual(hexToBytes(data.signedTransactionRLP.slice(2))); + } + }); + + it('hash()', () => { + const data = testdata[0]; + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + const pkey = hexToBytes(data.privateKey.slice(2)); + let txn = FeeMarketEIP1559Transaction.fromTxData(data, { common }); + let signed = txn.sign(pkey); + const expectedHash = hexToBytes( + '0x2e564c87eb4b40e7f469b2eec5aa5d18b0b46a24e8bf0919439cfb0e8fcae446', + ); + expect(signed.hash()).toEqual(expectedHash); + txn = FeeMarketEIP1559Transaction.fromTxData(data, { common, freeze: false }); + signed = txn.sign(pkey); + expect(signed.hash()).toEqual(expectedHash); + }); + + it('freeze property propagates from unsigned tx to signed tx', () => { + const data = testdata[0]; + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + const pkey = hexToBytes(data.privateKey.slice(2)); + const txn = FeeMarketEIP1559Transaction.fromTxData(data, { common, freeze: false }); + expect(Object.isFrozen(txn)).toBe(false); + const signedTxn = txn.sign(pkey); + expect(Object.isFrozen(signedTxn)).toBe(false); + }); + + it('common propagates from the common of tx, not the common in TxOptions', () => { + const data = testdata[0]; + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + const pkey = hexToBytes(data.privateKey.slice(2)); + const txn = FeeMarketEIP1559Transaction.fromTxData(data, { common, freeze: false }); + const newCommon = new Common({ + chain: Chain.Goerli, + hardfork: Hardfork.London, + eips: [2537], + }); + expect(Object.isFrozen(newCommon)).not.toEqual(common); + Object.defineProperty(txn, 'common', { + get() { + return newCommon; + }, + }); + const signedTxn = txn.sign(pkey); + expect(signedTxn.common.eips()).toContain(2537); + }); + + it('unsigned tx -> getMessageToSign()', () => { + const unsignedTx = FeeMarketEIP1559Transaction.fromTxData( + { + data: hexToBytes('010200'), + to: validAddress, + accessList: [[validAddress, [validSlot]]], + chainId, + }, + { common }, + ); + const expectedHash = hexToBytes( + '0xfa81814f7dd57bad435657a05eabdba2815f41e3f15ddd6139027e7db56b0dea', + ); + expect(unsignedTx.getMessageToSign(true)).toEqual(expectedHash); + + const expectedSerialization = hexToBytes( + '0x02f85904808080809401010101010101010101010101010101010101018083010200f838f7940101010101010101010101010101010101010101e1a00101010101010101010101010101010101010101010101010101010101010101', + ); + expect(unsignedTx.getMessageToSign(false)).toEqual(expectedSerialization); + }); + + it('toJSON()', () => { + const data = testdata[0]; + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + const pkey = hexToBytes(data.privateKey.slice(2)); + const txn = FeeMarketEIP1559Transaction.fromTxData(data, { common }); + const signed = txn.sign(pkey); + + const json = signed.toJSON(); + const expectedJSON = { + chainId: '0x4', + nonce: '0x333', + maxPriorityFeePerGas: '0x1284d', + maxFeePerGas: '0x1d97c', + gasLimit: '0x8ae0', + to: '0x000000000000000000000000000000000000aaaa', + value: '0x2933bc9', + data: '0x', + accessList: [], + v: '0x0', + r: '0xf924cb68412c8f1cfd74d9b581c71eeaf94fff6abdde3e5b02ca6b2931dcf47', + s: '0x7dd1c50027c3e31f8b565e25ce68a5072110f61fce5eee81b195dd51273c2f83', + }; + expect(json).toEqual(expectedJSON); + }); + + it('Fee validation', () => { + expect(() => { + FeeMarketEIP1559Transaction.fromTxData( + { + maxFeePerGas: TWO_POW256 - BigInt(1), + maxPriorityFeePerGas: 100, + gasLimit: 1, + value: 6, + }, + { common }, + ); + }).not.toThrow(); + expect(() => { + FeeMarketEIP1559Transaction.fromTxData( + { + maxFeePerGas: TWO_POW256 - BigInt(1), + maxPriorityFeePerGas: 100, + gasLimit: 100, + value: 6, + }, + { common }, + ); + }).toThrow(); + expect(() => { + FeeMarketEIP1559Transaction.fromTxData( + { + maxFeePerGas: 1, + maxPriorityFeePerGas: 2, + gasLimit: 100, + value: 6, + }, + { common }, + ); + }).toThrow(); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/tx/eip3860.test.ts b/packages/web3-eth-accounts/test/unit/tx/eip3860.test.ts new file mode 100644 index 00000000000..94408d9a71c --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/tx/eip3860.test.ts @@ -0,0 +1,92 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Chain, Common, Hardfork } from '../../../src/common'; +import { Address } from '../../../src/tx/address'; +import { TransactionFactory } from '../../../src'; + +const common = new Common({ + chain: Chain.Mainnet, + hardfork: Hardfork.Merge, + eips: [3860], +}); + +const maxInitCodeSize = common.param('vm', 'maxInitCodeSize'); +const txTypes = [0, 1, 2]; +const addressZero = Address.zero(); + +describe('[EIP3860 tests]', () => { + it('Should instantiate create txs with MAX_INITCODE_SIZE', () => { + const data = new Uint8Array(Number(maxInitCodeSize)); + for (const txType of txTypes) { + expect(TransactionFactory.fromTxData({ data, type: txType }, { common })).toBeTruthy(); + } + }); + + it('Should instantiate txs with MAX_INITCODE_SIZE data', () => { + const data = new Uint8Array(Number(maxInitCodeSize)); + for (const txType of txTypes) { + expect( + TransactionFactory.fromTxData({ data, type: txType, to: addressZero }, { common }), + ).toBeTruthy(); + } + }); + + it('Should not instantiate create txs with MAX_INITCODE_SIZE+1 data', () => { + const data = new Uint8Array(Number(maxInitCodeSize) + 1); + for (const txType of txTypes) { + expect(() => + TransactionFactory.fromTxData({ data, type: txType }, { common }), + ).toThrow(); + } + }); + + it('Should instantiate txs with MAX_INITCODE_SIZE+1 data', () => { + const data = new Uint8Array(Number(maxInitCodeSize) + 1); + for (const txType of txTypes) { + expect( + TransactionFactory.fromTxData({ data, type: txType, to: addressZero }, { common }), + ).toBeTruthy(); + } + }); + + it('Should allow txs with MAX_INITCODE_SIZE+1 data if allowUnlimitedInitCodeSize is active', () => { + const data = new Uint8Array(Number(maxInitCodeSize) + 1); + for (const txType of txTypes) { + expect( + TransactionFactory.fromTxData( + { data, type: txType }, + { common, allowUnlimitedInitCodeSize: true }, + ), + ).toBeTruthy(); + } + }); + + it('Should charge initcode analysis gas is allowUnlimitedInitCodeSize is active', () => { + const data = new Uint8Array(Number(maxInitCodeSize)); + for (const txType of txTypes) { + const eip3860ActiveTx = TransactionFactory.fromTxData( + { data, type: txType }, + { common, allowUnlimitedInitCodeSize: true }, + ); + const eip3860DeactivedTx = TransactionFactory.fromTxData( + { data, type: txType }, + { common, allowUnlimitedInitCodeSize: false }, + ); + expect(eip3860ActiveTx.getDataFee() === eip3860DeactivedTx.getDataFee()).toBeTruthy(); + } + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/tx/inputValue.test.ts b/packages/web3-eth-accounts/test/unit/tx/inputValue.test.ts new file mode 100644 index 00000000000..e39ba839775 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/tx/inputValue.test.ts @@ -0,0 +1,289 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Bytes } from 'web3-types'; +import { hexToBytes } from 'web3-utils'; +import { Chain, Common, Hardfork, toUint8Array } from '../../../src/common'; +import { Address } from '../../../src/tx/address'; + +import { + AccessListEIP2930Transaction, + FeeMarketEIP1559Transaction, + Transaction, + TransactionFactory, +} from '../../../src'; + +import type { + AccessListEIP2930ValuesArray, + FeeMarketEIP1559ValuesArray, + TxValuesArray, +} from '../../../src'; +import type { BigIntLike, PrefixedHexString } from '../../../src/common/types'; + +type AddressLike = Address | Uint8Array | PrefixedHexString; +// @returns: Array with subtypes of the AddressLike type for a given address +function generateAddressLikeValues(address: string): AddressLike[] { + return [address, toUint8Array(address), new Address(toUint8Array(address))]; +} + +// @returns: Array with subtypes of the BigIntLike type for a given number +function generateBigIntLikeValues(value: number): BigIntLike[] { + return [value, BigInt(value), `0x${value.toString(16)}`, toUint8Array(value)]; +} + +// @returns: Array with subtypes of the BufferLike type for a given string +function generateBufferLikeValues(value: string): Bytes[] { + return [value, toUint8Array(value)]; +} + +interface GenerateCombinationsArgs { + options: { [x: string]: any }; + optionIndex?: number; + results?: { [x: string]: any }[]; + current?: { [x: string]: any }; +} + +function generateCombinations({ + options, + optionIndex = 0, + results = [], + current = {}, +}: GenerateCombinationsArgs) { + const allKeys = Object.keys(options); + const optionKey = allKeys[optionIndex]; + const values = options[optionKey]; + // eslint-disable-next-line @typescript-eslint/prefer-for-of + for (let i = 0; i < values.length; i += 1) { + // eslint-disable-next-line no-param-reassign + current[optionKey] = values[i]; + + if (optionIndex + 1 < allKeys.length) { + generateCombinations({ options, optionIndex: optionIndex + 1, results, current }); + } else { + // Clone the object + const res = { ...current }; + results.push(res); + } + } + + return results; +} + +// Deterministic pseudorandom number generator +function mulberry32(seed: number) { + // eslint-disable-next-line no-param-reassign, no-multi-assign + let t = (seed += 0x6d2b79f5); + // eslint-disable-next-line no-bitwise + t = Math.imul(t ^ (t >>> 15), t | 1); + // eslint-disable-next-line no-bitwise + t ^= t + Math.imul(t ^ (t >>> 7), t | 61); + // eslint-disable-next-line no-bitwise + return ((t ^ (t >>> 14)) >>> 0) / 4294967296; +} + +function getRandomSubarray(array: TArrayItem[], size: number) { + const shuffled = array.slice(0); + let seed = 1559; + let index: number; + let { length } = array; + let temp: TArrayItem; + while (length > 0) { + index = Math.floor((length + 1) * mulberry32(seed)); + temp = shuffled[index]; + shuffled[index] = shuffled[length]; + shuffled[length] = temp; + seed += 1; + length -= 1; + } + return shuffled.slice(0, size); +} + +const baseTxValues = { + data: generateBufferLikeValues('0x65'), + gasLimit: generateBigIntLikeValues(100000), + nonce: generateBigIntLikeValues(0), + to: generateAddressLikeValues('0x0000000000000000000000000000000000000000'), + r: generateBigIntLikeValues(100), + s: generateBigIntLikeValues(100), + value: generateBigIntLikeValues(10), +}; + +const legacyTxValues = { + gasPrice: generateBigIntLikeValues(100), +}; + +const accessListEip2930TxValues = { + chainId: generateBigIntLikeValues(4), +}; + +const eip1559TxValues = { + maxFeePerGas: generateBigIntLikeValues(100), + maxPriorityFeePerGas: generateBigIntLikeValues(50), +}; + +describe('[Transaction Input Values]', () => { + it('Legacy Transaction Values', () => { + const common = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Homestead }); + const options = { ...baseTxValues, ...legacyTxValues, type: '0' }; + const legacyTxData = generateCombinations({ + options, + }); + const randomSample = getRandomSubarray(legacyTxData, 100); + for (const txData of randomSample) { + const tx = Transaction.fromTxData(txData, { common }); + expect(() => tx.hash()).toThrow(); + } + }); + + it('EIP-1559 Transaction Values', () => { + const common = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.London }); + const options = { + ...baseTxValues, + ...accessListEip2930TxValues, + ...eip1559TxValues, + type: '2', + }; + const eip1559TxData = generateCombinations({ + options, + }); + const randomSample = getRandomSubarray(eip1559TxData, 100); + + for (const txData of randomSample) { + const tx = Transaction.fromTxData(txData, { common }); + expect(() => tx.hash()).toThrow(); + } + }); +}); + +test('[Invalid Array Input values]', () => { + const txTypes = [0x0, 0x1, 0x2]; + for (const signed of [false, true]) { + for (const txType of txTypes) { + let tx = TransactionFactory.fromTxData({ type: txType }); + if (signed) { + tx = tx.sign(hexToBytes('42'.repeat(32))); + } + const rawValues = tx.raw(); + for (let x = 0; x < rawValues.length; x += 1) { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + rawValues[x] = [1, 2, 3]; + // eslint-disable-next-line default-case + switch (txType) { + case 0: + // eslint-disable-next-line jest/no-conditional-expect + expect(() => + Transaction.fromValuesArray(rawValues as TxValuesArray), + ).toThrow(); + break; + case 1: + // eslint-disable-next-line jest/no-conditional-expect + expect(() => + AccessListEIP2930Transaction.fromValuesArray( + rawValues as AccessListEIP2930ValuesArray, + ), + ).toThrow(); + break; + case 2: + // eslint-disable-next-line jest/no-conditional-expect + expect(() => + FeeMarketEIP1559Transaction.fromValuesArray( + rawValues as FeeMarketEIP1559ValuesArray, + ), + ).toThrow(); + break; + } + } + } + } +}); + +test('[Invalid Access Lists]', () => { + const txTypes = [0x1, 0x2]; + const invalidAccessLists = [ + [[]], // does not have an address and does not have slots + [[[], []]], // the address is an array + [['0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae']], // there is no storage slot array + [ + [ + '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', + ['0x0000000000000000000000000000000000000000000000000000000000000003', []], + ], + ], // one of the slots is an array + [ + [ + '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', + ['0x0000000000000000000000000000000000000000000000000000000000000003'], + '0xab', + ], + ], // extra field + [ + '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', + ['0x0000000000000000000000000000000000000000000000000000000000000003'], + ], // account/slot needs to be encoded in a deeper array layer + ]; + for (const signed of [false, true]) { + for (const txType of txTypes) { + for (const invalidAccessListItem of invalidAccessLists) { + let tx: any; + try { + tx = TransactionFactory.fromTxData({ + type: txType, + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + accessList: invalidAccessListItem, + }); + if (signed) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + tx = tx.sign(hexToBytes('42'.repeat(32))); + } + } catch (e: any) { + tx = TransactionFactory.fromTxData({ type: txType }); + if (signed) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + tx = tx.sign(hexToBytes('42'.repeat(32))); + } + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + const rawValues = tx!.raw(); + + if (txType === 1 && rawValues[7].length === 0) { + rawValues[7] = invalidAccessListItem; + } else if (txType === 2 && rawValues[8].length === 0) { + rawValues[8] = invalidAccessListItem; + } + + // eslint-disable-next-line default-case + switch (txType) { + case 1: + // eslint-disable-next-line jest/no-conditional-expect + expect(() => + AccessListEIP2930Transaction.fromValuesArray( + rawValues as AccessListEIP2930ValuesArray, + ), + ).toThrow(); + break; + case 2: + // eslint-disable-next-line jest/no-conditional-expect + expect(() => + FeeMarketEIP1559Transaction.fromValuesArray( + rawValues as FeeMarketEIP1559ValuesArray, + ), + ).toThrow(); + break; + } + } + } + } +}); diff --git a/packages/web3-eth-accounts/test/unit/tx/legacy.test.ts b/packages/web3-eth-accounts/test/unit/tx/legacy.test.ts new file mode 100644 index 00000000000..7d9b754d0e0 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/tx/legacy.test.ts @@ -0,0 +1,472 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { RLP } from '@ethereumjs/rlp'; +import { bytesToHex, hexToBytes, uint8ArrayEquals } from 'web3-utils'; +import { + Chain, + Common, + Hardfork, + intToUint8Array, + toUint8Array, + uint8ArrayToBigInt, + unpadUint8Array, +} from '../../../src/common'; + +import { Transaction } from '../../../src'; +import type { TxData } from '../../../src'; +import txFixturesEip155 from '../../fixtures/json/ttTransactionTestEip155VitaliksTests.json'; +import txFixtures from '../../fixtures/json/txs.json'; + +describe('[Transaction]', () => { + const transactions: Transaction[] = []; + + it('cannot input decimal or negative values', () => { + const values = ['gasPrice', 'gasLimit', 'nonce', 'value', 'v', 'r', 's']; + const cases = [ + 10.1, + '10.1', + '0xaa.1', + -10.1, + -1, + BigInt(-10), + '-100', + '-10.1', + '-0xaa', + Infinity, + -Infinity, + NaN, + {}, + true, + false, + // eslint-disable-next-line @typescript-eslint/no-empty-function + () => {}, + Number.MAX_SAFE_INTEGER + 1, + ]; + for (const value of values) { + const txData: any = {}; + for (const testCase of cases) { + txData[value] = testCase; + expect(() => { + Transaction.fromTxData(txData); + }).toThrow(); + } + } + }); + + it('Initialization', () => { + const nonEIP2930Common = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Istanbul }); + expect(Transaction.fromTxData({}, { common: nonEIP2930Common })).toBeTruthy(); + + const txData = txFixtures[3].raw.map(toUint8Array); + txData[6] = intToUint8Array(45); // v with 0-parity and chain ID 5 + let tx = Transaction.fromValuesArray(txData); + expect(tx.common.chainId() === BigInt(5)).toBe(true); + + txData[6] = intToUint8Array(46); // v with 1-parity and chain ID 5 + tx = Transaction.fromValuesArray(txData); + expect(tx.common.chainId() === BigInt(5)).toBe(true); + + txData[6] = intToUint8Array(2033); // v with 0-parity and chain ID 999 + tx = Transaction.fromValuesArray(txData); + expect(tx.common.chainId()).toEqual(BigInt(999)); + + txData[6] = intToUint8Array(2034); // v with 1-parity and chain ID 999 + tx = Transaction.fromValuesArray(txData); + expect(tx.common.chainId()).toEqual(BigInt(999)); + }); + + it('Initialization -> decode with fromValuesArray()', () => { + for (const tx of txFixtures.slice(0, 4)) { + const txData = tx.raw.map(toUint8Array); + const pt = Transaction.fromValuesArray(txData); + + expect(bytesToHex(unpadUint8Array(toUint8Array(pt.nonce)))).toEqual(tx.raw[0]); + expect(bytesToHex(toUint8Array(pt.gasPrice))).toEqual(tx.raw[1]); + expect(bytesToHex(toUint8Array(pt.gasLimit))).toEqual(tx.raw[2]); + expect(pt.to?.toString()).toEqual(tx.raw[3]); + expect(bytesToHex(unpadUint8Array(toUint8Array(pt.value)))).toEqual(tx.raw[4]); + expect(bytesToHex(pt.data)).toEqual(tx.raw[5]); + expect(bytesToHex(toUint8Array(pt.v))).toEqual(tx.raw[6]); + expect(bytesToHex(toUint8Array(pt.r))).toEqual(tx.raw[7]); + expect(bytesToHex(toUint8Array(pt.s))).toEqual(tx.raw[8]); + + transactions.push(pt); + } + }); + + it('Initialization -> should accept lesser r values', () => { + const tx = Transaction.fromTxData({ r: uint8ArrayToBigInt(toUint8Array('0x0005')) }); + expect(tx.r!.toString(16)).toBe('5'); + }); + + it('Initialization -> throws when creating a a transaction with incompatible chainid and v value', () => { + let common = new Common({ chain: Chain.Goerli, hardfork: Hardfork.Petersburg }); + let tx = Transaction.fromTxData({}, { common }); + expect(tx.common.chainId()).toEqual(BigInt(5)); + const privKey = hexToBytes(txFixtures[0].privateKey); + tx = tx.sign(privKey); + const serialized = tx.serialize(); + common = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Petersburg }); + expect(() => Transaction.fromSerializedTx(serialized, { common })).toThrow(); + }); + + it('Initialization -> throws if v is set to an EIP155-encoded value incompatible with the chain id', () => { + expect(() => { + const common = new Common({ chain: 42, hardfork: Hardfork.Petersburg }); + Transaction.fromTxData({ v: BigInt(1) }, { common }); + }).toThrow(); + }); + + it('validate() -> should validate with string option', () => { + for (const tx of transactions) { + expect(typeof tx.validate(true)[0]).toBe('string'); + } + }); + + it('getBaseFee() -> should return base fee', () => { + const tx = Transaction.fromTxData({}); + expect(tx.getBaseFee()).toEqual(BigInt(53000)); + }); + + it('getDataFee() -> should return data fee', () => { + let tx = Transaction.fromTxData({}); + expect(tx.getDataFee()).toEqual(BigInt(0)); + + tx = Transaction.fromValuesArray(txFixtures[3].raw.map(toUint8Array)); + expect(tx.getDataFee()).toEqual(BigInt(1716)); + + tx = Transaction.fromValuesArray(txFixtures[3].raw.map(toUint8Array), { freeze: false }); + expect(tx.getDataFee()).toEqual(BigInt(1716)); + }); + + it('getDataFee() -> should return correct data fee for istanbul', () => { + const common = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Istanbul }); + let tx = Transaction.fromTxData({}, { common }); + expect(tx.getDataFee()).toEqual(BigInt(0)); + + tx = Transaction.fromValuesArray(txFixtures[3].raw.map(toUint8Array), { + common, + }); + expect(tx.getDataFee()).toEqual(BigInt(1716)); + }); + + it('getDataFee() -> should invalidate cached value on hardfork change', () => { + const common = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Byzantium }); + const tx = Transaction.fromValuesArray(txFixtures[0].raw.map(toUint8Array), { + common, + }); + expect(tx.getDataFee()).toEqual(BigInt(656)); + tx.common.setHardfork(Hardfork.Istanbul); + expect(tx.getDataFee()).toEqual(BigInt(240)); + }); + + it('getUpfrontCost() -> should return upfront cost', () => { + const tx = Transaction.fromTxData({ + gasPrice: 1000, + gasLimit: 10000000, + value: 42, + }); + expect(tx.getUpfrontCost()).toEqual(BigInt(10000000042)); + }); + + it('serialize()', () => { + for (const [i, tx] of transactions.entries()) { + const s1 = tx.serialize(); + const s2 = RLP.encode(txFixtures[i].raw); + expect(uint8ArrayEquals(s1, s2)).toBe(true); + } + }); + + it('serialize() -> should round trip decode a tx', () => { + const tx = Transaction.fromTxData({ value: 5000 }); + const s1 = tx.serialize(); + + const s1Rlp = toUint8Array(bytesToHex(s1)); + const tx2 = Transaction.fromSerializedTx(s1Rlp); + const s2 = tx2.serialize(); + + expect(uint8ArrayEquals(s1, s2)).toBe(true); + }); + + it('hash() / getMessageToSign(true) / getMessageToSign(false)', () => { + const common = new Common({ + chain: Chain.Mainnet, + hardfork: Hardfork.TangerineWhistle, + }); + + let tx = Transaction.fromValuesArray(txFixtures[3].raw.slice(0, 6).map(toUint8Array), { + common, + }); + expect(() => { + tx.hash(); + }).toThrow(); + tx = Transaction.fromValuesArray(txFixtures[3].raw.map(toUint8Array), { + common, + }); + expect(tx.hash()).toEqual( + hexToBytes('0x375a8983c9fc56d7cfd118254a80a8d7403d590a6c9e105532b67aca1efb97aa'), + ); + expect(tx.getMessageToSign()).toEqual( + hexToBytes('0x61e1ec33764304dddb55348e7883d4437426f44ab3ef65e6da1e025734c03ff0'), + ); + expect(tx.getMessageToSign(false)).toHaveLength(6); + expect(tx.hash()).toEqual( + hexToBytes('0x375a8983c9fc56d7cfd118254a80a8d7403d590a6c9e105532b67aca1efb97aa'), + ); + }); + + it('hash() -> with defined chainId', () => { + const tx = Transaction.fromValuesArray(txFixtures[4].raw.map(toUint8Array)); + expect(bytesToHex(tx.hash())).toBe( + '0x0f09dc98ea85b7872f4409131a790b91e7540953992886fc268b7ba5c96820e4', + ); + expect(bytesToHex(tx.getMessageToSign())).toBe( + '0xf97c73fdca079da7652dbc61a46cd5aeef804008e057be3e712c43eac389aaf0', + ); + }); + + it("getMessageToSign(), getSenderPublicKey() (implicit call) -> verify EIP155 signature based on Vitalik's tests", () => { + for (const tx of txFixturesEip155) { + const pt = Transaction.fromSerializedTx(toUint8Array(tx.rlp)); + expect(bytesToHex(pt.getMessageToSign())).toEqual(tx.hash); + expect(bytesToHex(pt.serialize())).toEqual(tx.rlp); + expect(pt.getSenderAddress().toString()).toBe(`0x${tx.sender}`); + } + }); + + it('getMessageToSign(), sign(), getSenderPublicKey() (implicit call) -> verify EIP155 signature before and after signing', () => { + // Inputs and expected results for this test are taken directly from the example in https://eips.ethereum.org/EIPS/eip-155 + const txRaw = [ + '0x09', + '0x4a817c800', + '0x5208', + '0x3535353535353535353535353535353535353535', + '0x0de0b6b3a7640000', + '0x', + ]; + const privateKey = hexToBytes( + '4646464646464646464646464646464646464646464646464646464646464646', + ); + const pt = Transaction.fromValuesArray(txRaw.map(toUint8Array)); + + // Note that Vitalik's example has a very similar value denoted "signing data". + // It's not the output of `serialize()`, but the pre-image of the hash returned by `tx.hash(false)`. + // We don't have a getter for such a value in Transaction. + expect(bytesToHex(pt.serialize())).toBe( + '0xec098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a764000080808080', + ); + const signedTx = pt.sign(privateKey); + expect(bytesToHex(signedTx.getMessageToSign())).toBe( + '0xdaf5a779ae972f972197303d7b574746c7ef83eadac0f2791ad23db92e4c8e53', + ); + expect(bytesToHex(signedTx.serialize())).toBe( + '0xf86c098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a028ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276a067cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83', + ); + }); + + it('sign(), getSenderPublicKey() (implicit call) -> EIP155 hashing when singing', () => { + const common = new Common({ chain: 1, hardfork: Hardfork.Petersburg }); + for (const txData of txFixtures.slice(0, 3)) { + const tx = Transaction.fromValuesArray(txData.raw.slice(0, 6).map(toUint8Array), { + common, + }); + + const privKey = hexToBytes(txData.privateKey); + const txSigned = tx.sign(privKey); + + expect(txSigned.getSenderAddress().toString()).toBe(`0x${txData.sendersAddress}`); + } + }); + + it('sign(), serialize(): serialize correctly after being signed with EIP155 Signature for tx created on ropsten', () => { + const txRaw = [ + '0x1', + '0x02540be400', + '0x5208', + '0xd7250824390ec5c8b71d856b5de895e271170d9d', + '0x0de0b6b3a7640000', + '0x', + ]; + const privateKey = hexToBytes( + 'DE3128752F183E8930D7F00A2AAA302DCB5E700B2CBA2D8CA5795660F07DEFD5', + ); + const common = new Common({ chain: 1 }); + const tx = Transaction.fromValuesArray(txRaw.map(toUint8Array), { common }); + const signedTx = tx.sign(privateKey); + expect(bytesToHex(signedTx.serialize())).toBe( + '0xf86c018502540be40082520894d7250824390ec5c8b71d856b5de895e271170d9d880de0b6b3a76400008026a05e5c85a426b11e1ba5d9b567e904818a33975962942f538d247cd7391f5fb27aa00c8ec23ca4a3cdc2515916e4adc89676ce124fd7d0ddbb3ddd37c441dd584c21', + ); + }); + + it('sign(), verifySignature(): should ignore any previous signature when decided if EIP155 should be used in a new one', () => { + const txData: TxData = { + data: '0x7cf5dab00000000000000000000000000000000000000000000000000000000000000005', + gasLimit: '0x15f90', + gasPrice: '0x1', + nonce: '0x01', + to: '0xd9024df085d09398ec76fbed18cac0e1149f50dc', + value: '0x0', + }; + + const privateKey = hexToBytes( + '4646464646464646464646464646464646464646464646464646464646464646', + ); + + const common = new Common({ + chain: Chain.Mainnet, + hardfork: Hardfork.TangerineWhistle, + }); + + const fixtureTxSignedWithoutEIP155 = Transaction.fromTxData(txData, { + common, + }).sign(privateKey); + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + let signedWithEIP155 = Transaction.fromTxData(txData).sign(privateKey); + + expect(signedWithEIP155.verifySignature()).toBe(true); + expect(signedWithEIP155.v?.toString(16)).not.toBe('1c'); + expect(signedWithEIP155.v?.toString(16)).not.toBe('1b'); + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + signedWithEIP155 = Transaction.fromTxData(fixtureTxSignedWithoutEIP155.toJSON()).sign( + privateKey, + ); + + expect(signedWithEIP155.verifySignature()).toBe(true); + expect(signedWithEIP155.v?.toString(16)).not.toBe('1c'); + expect(signedWithEIP155.v?.toString(16)).not.toBe('1b'); + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + let signedWithoutEIP155 = Transaction.fromTxData(txData, { + common, + }).sign(privateKey); + + expect(signedWithoutEIP155.verifySignature()).toBe(true); + expect( + signedWithoutEIP155.v?.toString(16) === '1c' || + signedWithoutEIP155.v?.toString(16) === '1b', + ).toBe(true); + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + signedWithoutEIP155 = Transaction.fromTxData(txData, { + common, + }).sign(privateKey); + + expect(signedWithoutEIP155.verifySignature()).toBe(true); + expect( + signedWithoutEIP155.v?.toString(16) === '1c' || + signedWithoutEIP155.v?.toString(16) === '1b', + ).toBe(true); + }); + + it('constructor: throw on legacy transactions which have v !== 27 and v !== 28 and v < 37', () => { + function getTxData(v: number) { + return { + v, + }; + } + for (let n = 0; n < 27; n += 1) { + expect(() => Transaction.fromTxData(getTxData(n))).toThrow(); + } + expect(() => Transaction.fromTxData(getTxData(29))).toThrow(); + expect(() => Transaction.fromTxData(getTxData(36))).toThrow(); + + expect(() => Transaction.fromTxData(getTxData(27))).not.toThrow(); + expect(() => Transaction.fromTxData(getTxData(28))).not.toThrow(); + expect(() => Transaction.fromTxData(getTxData(37))).not.toThrow(); + }); + + it('sign(), verifySignature(): sign tx with chainId specified in params', () => { + const common = new Common({ chain: Chain.Goerli, hardfork: Hardfork.Petersburg }); + let tx = Transaction.fromTxData({}, { common }); + expect(tx.common.chainId()).toEqual(BigInt(5)); + + const privKey = hexToBytes(txFixtures[0].privateKey); + tx = tx.sign(privKey); + + const serialized = tx.serialize(); + + const reTx = Transaction.fromSerializedTx(serialized, { common }); + expect(reTx.verifySignature()).toBe(true); + expect(reTx.common.chainId()).toEqual(BigInt(5)); + }); + + it('freeze property propagates from unsigned tx to signed tx', () => { + const tx = Transaction.fromTxData({}, { freeze: false }); + expect(Object.isFrozen(tx)).toBe(false); + const privKey = hexToBytes(txFixtures[0].privateKey); + const signedTxn = tx.sign(privKey); + expect(Object.isFrozen(signedTxn)).toBe(false); + }); + + it('common propagates from the common of tx, not the common in TxOptions', () => { + const common = new Common({ chain: Chain.Goerli, hardfork: Hardfork.London }); + const pkey = hexToBytes(txFixtures[0].privateKey); + const txn = Transaction.fromTxData({}, { common, freeze: false }); + const newCommon = new Common({ + chain: Chain.Goerli, + hardfork: Hardfork.London, + eips: [2537], + }); + expect(newCommon).not.toEqual(common); + Object.defineProperty(txn, 'common', { + get() { + return newCommon; + }, + }); + const signedTxn = txn.sign(pkey); + expect(signedTxn.common.eips()).toContain(2537); + }); + + it('isSigned() -> returns correct values', () => { + let tx = Transaction.fromTxData({}); + expect(tx.isSigned()).toBe(false); + + const txData: TxData = { + data: '0x7cf5dab00000000000000000000000000000000000000000000000000000000000000005', + gasLimit: '0x15f90', + gasPrice: '0x1', + nonce: '0x01', + to: '0xd9024df085d09398ec76fbed18cac0e1149f50dc', + value: '0x0', + }; + const privateKey = hexToBytes( + '4646464646464646464646464646464646464646464646464646464646464646', + ); + tx = Transaction.fromTxData(txData); + expect(tx.isSigned()).toBe(false); + tx = tx.sign(privateKey); + expect(tx.isSigned()).toBe(true); + + tx = Transaction.fromTxData(txData); + expect(tx.isSigned()).toBe(false); + const rawUnsigned = tx.serialize(); + tx = tx.sign(privateKey); + const rawSigned = tx.serialize(); + expect(tx.isSigned()).toBe(true); + + tx = Transaction.fromSerializedTx(rawUnsigned); + expect(tx.isSigned()).toBe(false); + tx = tx.sign(privateKey); + expect(tx.isSigned()).toBe(true); + tx = Transaction.fromSerializedTx(rawSigned); + expect(tx.isSigned()).toBe(true); + + const signedValues = RLP.decode(Uint8Array.from(rawSigned)); + tx = Transaction.fromValuesArray(signedValues as Uint8Array[]); + expect(tx.isSigned()).toBe(true); + tx = Transaction.fromValuesArray(signedValues.slice(0, 6) as Uint8Array[]); + expect(tx.isSigned()).toBe(false); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/tx/registerNewTx.test.ts b/packages/web3-eth-accounts/test/unit/tx/registerNewTx.test.ts new file mode 100644 index 00000000000..8b4da78a527 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/tx/registerNewTx.test.ts @@ -0,0 +1,49 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { TransactionFactory } from '../../../src/tx/transactionFactory'; +import { BaseTransaction } from '../../../src/tx/baseTransaction'; +import { TxData, TxOptions } from '../../../src/tx'; + +describe('Register new TX', () => { + it('validateCannotExceedMaxInteger()', () => { + const TYPE = 20; + // @ts-expect-error not implement all methods + class SomeNewTxType extends BaseTransaction { + public constructor(txData: TxData, opts: TxOptions = {}) { + super({ ...txData, type: TYPE }, opts); + } + public static fromTxData() { + return 'new fromTxData'; + } + public static fromSerializedTx() { + return 'new fromSerializedData'; + } + } + TransactionFactory.registerTransactionType(TYPE, SomeNewTxType); + const txData = { + from: '0x', + to: '0x', + value: '0x1', + type: TYPE, + }; + expect(TransactionFactory.fromTxData(txData)).toBe('new fromTxData'); + expect(TransactionFactory.fromSerializedData(new Uint8Array([TYPE, 10]))).toBe( + 'new fromSerializedData', + ); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/tx/staticMethods.test.ts b/packages/web3-eth-accounts/test/unit/tx/staticMethods.test.ts new file mode 100644 index 00000000000..e68893c70aa --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/tx/staticMethods.test.ts @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BaseTransaction } from '../../../src/tx/baseTransaction'; + +describe('[BaseTransaction]', () => { + it('Initialization', () => { + expect(typeof BaseTransaction.fromTxData).toBe('function'); + expect(typeof BaseTransaction.fromSerializedTx).toBe('function'); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/tx/transactionFactory.test.ts b/packages/web3-eth-accounts/test/unit/tx/transactionFactory.test.ts new file mode 100644 index 00000000000..72aa0efd955 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/tx/transactionFactory.test.ts @@ -0,0 +1,155 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { hexToBytes } from 'web3-utils'; +import { Chain, Common, Hardfork } from '../../../src/common'; + +import { + AccessListEIP2930Transaction, + FeeMarketEIP1559Transaction, + Transaction, + TransactionFactory, +} from '../../../src'; + +const common = new Common({ + chain: Chain.Mainnet, + hardfork: Hardfork.London, +}); + +const pKey = hexToBytes('4646464646464646464646464646464646464646464646464646464646464646'); + +const unsignedTx = Transaction.fromTxData({}); +const signedTx = unsignedTx.sign(pKey); + +const unsignedEIP2930Tx = AccessListEIP2930Transaction.fromTxData( + { chainId: BigInt(1) }, + { common }, +); +const signedEIP2930Tx = unsignedEIP2930Tx.sign(pKey); + +const unsignedEIP1559Tx = FeeMarketEIP1559Transaction.fromTxData( + { chainId: BigInt(1) }, + { common }, +); +const signedEIP1559Tx = unsignedEIP1559Tx.sign(pKey); + +const txTypes = [ + { + class: Transaction, + name: 'Transaction', + unsigned: unsignedTx, + signed: signedTx, + eip2718: false, + type: 0, + }, + { + class: AccessListEIP2930Transaction, + name: 'AccessListEIP2930Transaction', + unsigned: unsignedEIP2930Tx, + signed: signedEIP2930Tx, + eip2718: true, + type: 1, + }, + { + class: FeeMarketEIP1559Transaction, + name: 'FeeMarketEIP1559Transaction', + unsigned: unsignedEIP1559Tx, + signed: signedEIP1559Tx, + eip2718: true, + type: 2, + }, +]; + +describe('[TransactionFactory]: Basic functions', () => { + it('fromSerializedData() -> success cases', () => { + for (const txType of txTypes) { + const serialized = txType.unsigned.serialize(); + const factoryTx = TransactionFactory.fromSerializedData(serialized, { common }); + expect(factoryTx.constructor.name).toEqual(txType.class.name); + } + }); + + it('fromSerializedData() -> error cases', () => { + for (const txType of txTypes) { + if (!txType.eip2718) { + continue; + } + const unsupportedCommon = new Common({ + chain: Chain.Mainnet, + hardfork: Hardfork.Istanbul, + }); + expect(() => { + TransactionFactory.fromSerializedData(txType.unsigned.serialize(), { + common: unsupportedCommon, + }); + }).toThrow(); + + expect(() => { + const serialized = txType.unsigned.serialize(); + serialized[0] = 99; // edit the transaction type + TransactionFactory.fromSerializedData(serialized, { common }); + }).toThrow(); + } + }); + + it('fromBlockBodyData() -> success cases', () => { + for (const txType of txTypes) { + let rawTx; + if (txType.eip2718) { + rawTx = txType.signed.serialize(); + } else { + rawTx = txType.signed.raw() as Uint8Array[]; + } + const tx = TransactionFactory.fromBlockBodyData(rawTx, { common }); + expect(tx.constructor.name).toEqual(txType.name); + expect(txType.eip2718 ? tx.serialize() : tx.raw()).toEqual(rawTx); + } + }); + + it('fromBlockBodyData() -> error case', () => { + expect(() => { + // @ts-expect-error incorrect param type + TransactionFactory.fromBlockBodyData(''); + }).toThrow(); + }); + + it('fromTxData() -> success cases', () => { + for (const txType of txTypes) { + const tx = TransactionFactory.fromTxData({ type: txType.type }, { common }); + expect(tx.constructor.name).toEqual(txType.class.name); + if (txType.eip2718) { + continue; + } + const _tx = TransactionFactory.fromTxData({}); + expect(_tx.constructor.name).toEqual(txType.class.name); + } + }); + + it('fromTxData() -> error cases', () => { + const unsupportedCommon = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Istanbul }); + expect(() => { + TransactionFactory.fromTxData({ type: 1 }, { common: unsupportedCommon }); + }).toThrow(); + + expect(() => { + TransactionFactory.fromTxData({ type: 999 }); + }).toThrow(); + + expect(() => { + TransactionFactory.fromTxData({ value: BigInt('-100') }); + }).toThrow(); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/tx/typedTxsAndEIP2930.test.ts b/packages/web3-eth-accounts/test/unit/tx/typedTxsAndEIP2930.test.ts new file mode 100644 index 00000000000..288bc265276 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/tx/typedTxsAndEIP2930.test.ts @@ -0,0 +1,582 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { bytesToHex, hexToBytes, uint8ArrayEquals, uint8ArrayConcat } from 'web3-utils'; +import { + AccessListEIP2930Transaction, + AccessListUint8ArrayItem, + FeeMarketEIP1559Transaction, +} from '../../../src'; +import { Chain, Common, Hardfork, uint8ArrayToBigInt } from '../../../src/common'; +import { Address } from '../../../src/tx/address'; +import { + MAX_INTEGER, + MAX_UINT64, + SECP256K1_ORDER_DIV_2, + secp256k1, +} from '../../../src/tx/constants'; + +import type { AccessList } from '../../../src'; + +const privateToPublic = (privateKey: Uint8Array): Uint8Array => { + return secp256k1.getPublicKey(privateKey, false).slice(1); +}; +const pKey = hexToBytes('4646464646464646464646464646464646464646464646464646464646464646'); +const address = Address.publicToAddress(privateToPublic(pKey)); + +const common = new Common({ + chain: Chain.Mainnet, + hardfork: Hardfork.London, +}); + +const txTypes = [ + { + class: AccessListEIP2930Transaction, + name: 'AccessListEIP2930Transaction', + type: 1, + }, + { + class: FeeMarketEIP1559Transaction, + name: 'FeeMarketEIP1559Transaction', + type: 2, + }, +]; + +const validAddress = hexToBytes('01'.repeat(20)); +const validSlot = hexToBytes('01'.repeat(32)); +const chainId = BigInt(1); + +describe('[AccessListEIP2930Transaction / FeeMarketEIP1559Transaction] -> EIP-2930 Compatibility', () => { + it('Initialization / Getter -> fromTxData()', () => { + for (const txType of txTypes) { + let tx = txType.class.fromTxData({}, { common }); + expect(tx).toBeTruthy(); + + tx = txType.class.fromTxData({ + chainId: 5, + }); + expect(tx.common.chainId() === BigInt(5)).toBeTruthy(); + + tx = txType.class.fromTxData({ + chainId: 99999, + }); + expect(tx.common.chainId() === BigInt(99999)).toBeTruthy(); + + const nonEIP2930Common = new Common({ + chain: Chain.Mainnet, + hardfork: Hardfork.Istanbul, + }); + expect(() => { + txType.class.fromTxData({}, { common: nonEIP2930Common }); + }).toThrow(); + + expect(() => { + txType.class.fromTxData( + { + chainId: chainId + BigInt(1), + }, + { common }, + ); + }).toThrow(); + + expect(() => { + txType.class.fromTxData( + { + v: 2, + }, + { common }, + ); + }).toThrow(); + } + }); + + it('cannot input decimal values', () => { + const values = ['chainId', 'nonce', 'gasPrice', 'gasLimit', 'value', 'v', 'r', 's']; + const cases = [ + 10.1, + '10.1', + '0xaa.1', + -10.1, + -1, + BigInt(-10), + '-100', + '-10.1', + '-0xaa', + Infinity, + -Infinity, + NaN, + {}, + true, + false, + // eslint-disable-next-line @typescript-eslint/no-empty-function + () => {}, + Number.MAX_SAFE_INTEGER + 1, + ]; + for (const value of values) { + const txData: any = {}; + for (const testCase of cases) { + if ( + value === 'chainId' && + ((typeof testCase === 'number' && Number.isNaN(testCase)) || testCase === false) + ) { + continue; + } + txData[value] = testCase; + expect(() => { + AccessListEIP2930Transaction.fromTxData(txData); + }).toThrow(); + } + } + }); + + it('Initialization / Getter -> fromSerializedTx()', () => { + for (const txType of txTypes) { + expect(() => { + txType.class.fromSerializedTx(new Uint8Array([99]), {}); + }).toThrow('wrong tx type'); + + expect(() => { + // Correct tx type + RLP-encoded 5 + const serialized = uint8ArrayConcat( + new Uint8Array([txType.type]), + new Uint8Array([5]), + ); + txType.class.fromSerializedTx(serialized, {}); + }).toThrow('must be array'); + + expect(() => { + const serialized = uint8ArrayConcat( + new Uint8Array([txType.type]), + hexToBytes('c0'), + ); + txType.class.fromSerializedTx(serialized, {}); + }).toThrow('values (for unsigned tx)'); + } + }); + + it('Access Lists -> success cases', () => { + for (const txType of txTypes) { + const access: AccessList = [ + { + address: bytesToHex(validAddress), + storageKeys: [bytesToHex(validSlot)], + }, + ]; + const txn = txType.class.fromTxData( + { + accessList: access, + chainId: 1, + }, + { common }, + ); + + // Check if everything is converted + + const Uint8Array = txn.accessList; + const JSON = txn.AccessListJSON; + + expect(uint8ArrayEquals(Uint8Array[0][0], validAddress)).toBeTruthy(); + expect(uint8ArrayEquals(Uint8Array[0][1][0], validSlot)).toBeTruthy(); + + expect(JSON).toEqual(access); + + // also verify that we can always get the json access list, even if we don't provide one. + + const txnRaw = txType.class.fromTxData( + { + accessList: Uint8Array, + chainId: 1, + }, + { common }, + ); + + const JSONRaw = txnRaw.AccessListJSON; + + expect(JSONRaw).toEqual(access); + } + }); + + it('Access Lists -> error cases', () => { + for (const txType of txTypes) { + let accessList: any[] = [ + [ + hexToBytes('01'.repeat(21)), // Address of 21 bytes instead of 20 + [], + ], + ]; + + expect(() => { + txType.class.fromTxData({ chainId, accessList }, { common }); + }).toThrow(); + + accessList = [ + [ + validAddress, + [ + hexToBytes('01'.repeat(31)), // Slot of 31 bytes instead of 32 + ], + ], + ]; + + expect(() => { + txType.class.fromTxData({ chainId, accessList }, { common }); + }).toThrow(); + + accessList = [[]]; // Address does not exist + + expect(() => { + txType.class.fromTxData({ chainId, accessList }, { common }); + }).toThrow(); + + accessList = [[validAddress]]; // Slots does not exist + + expect(() => { + txType.class.fromTxData({ chainId, accessList }, { common }); + }).toThrow(); + + accessList = [[validAddress, validSlot]]; // Slots is not an array + + expect(() => { + txType.class.fromTxData({ chainId, accessList }, { common }); + }).toThrow(); + + accessList = [[validAddress, [], []]]; // 3 items where 2 are expected + + expect(() => { + txType.class.fromTxData({ chainId, accessList }, { common }); + }).toThrow(); + } + }); + + it('sign()', () => { + for (const txType of txTypes) { + let tx = txType.class.fromTxData( + { + data: hexToBytes('010200'), + to: validAddress, + accessList: [[validAddress, [validSlot]]], + chainId, + }, + { common }, + ); + let signed = tx.sign(pKey); + const signedAddress = signed.getSenderAddress(); + expect(uint8ArrayEquals(signedAddress.buf, address)).toBeTruthy(); + // expect(signedAddress).toEqual(Address.publicToAddress(Buffer.from(address))); + signed.verifySignature(); // If this throws, test will not end. + + tx = txType.class.fromTxData({}, { common }); + signed = tx.sign(pKey); + + expect(tx.accessList).toEqual([]); + expect(signed.accessList).toEqual([]); + + tx = txType.class.fromTxData({}, { common }); + + expect(() => { + tx.hash(); + }).toThrow(); + + expect(() => { + tx.getSenderPublicKey(); + }).toThrow(); + + expect(() => { + const high = SECP256K1_ORDER_DIV_2 + BigInt(1); + const _tx = txType.class.fromTxData({ s: high, r: 1, v: 1 }, { common }); + const _signed = _tx.sign(pKey); + _signed.getSenderPublicKey(); + }).toThrow(); + } + }); + + it('getDataFee()', () => { + for (const txType of txTypes) { + let tx = txType.class.fromTxData({}, { common }); + expect(tx.getDataFee()).toEqual(BigInt(0)); + + tx = txType.class.fromTxData({}, { common, freeze: false }); + expect(tx.getDataFee()).toEqual(BigInt(0)); + + const mutableCommon = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.London }); + tx = txType.class.fromTxData({}, { common: mutableCommon }); + tx.common.setHardfork(Hardfork.Istanbul); + expect(tx.getDataFee()).toEqual(BigInt(0)); + } + }); +}); + +describe('[AccessListEIP2930Transaction] -> Class Specific Tests', () => { + it('Initialization', () => { + const tx = AccessListEIP2930Transaction.fromTxData({}, { common }); + expect(AccessListEIP2930Transaction.fromTxData(tx, { common })).toBeTruthy(); + + const _validAddress = hexToBytes('01'.repeat(20)); + const _validSlot = hexToBytes('01'.repeat(32)); + const _chainId = BigInt(1); + expect(() => { + AccessListEIP2930Transaction.fromTxData( + { + data: hexToBytes('010200'), + to: _validAddress, + accessList: [[_validAddress, [_validSlot]]], + chainId: _chainId, + gasLimit: MAX_UINT64, + gasPrice: MAX_INTEGER, + }, + { common }, + ); + }).toThrow('gasLimit * gasPrice cannot exceed MAX_INTEGER'); + + const uint8Array = new Uint8Array([]); + const _address = new Uint8Array([]); + const storageKeys = [new Uint8Array([]), new Uint8Array([])]; + const aclBuf: AccessListUint8ArrayItem = [_address, storageKeys]; + expect(() => { + AccessListEIP2930Transaction.fromValuesArray( + [ + uint8Array, + uint8Array, + uint8Array, + uint8Array, + uint8Array, + uint8Array, + uint8Array, + [aclBuf], + uint8Array, + ], + {}, + ); + }).toThrow(); + }); + + it('should return right upfront cost', () => { + let tx = AccessListEIP2930Transaction.fromTxData( + { + data: hexToBytes('010200'), + to: validAddress, + accessList: [[validAddress, [validSlot]]], + chainId, + }, + { common }, + ); + // Cost should be: + // Base fee + 2*TxDataNonZero + TxDataZero + AccessListAddressCost + AccessListSlotCost + const txDataZero = Number(common.param('gasPrices', 'txDataZero')); + const txDataNonZero = Number(common.param('gasPrices', 'txDataNonZero')); + const accessListStorageKeyCost = Number( + common.param('gasPrices', 'accessListStorageKeyCost'), + ); + const accessListAddressCost = Number(common.param('gasPrices', 'accessListAddressCost')); + const baseFee = Number(common.param('gasPrices', 'tx')); + const creationFee = Number(common.param('gasPrices', 'txCreation')); + + expect( + tx.getBaseFee() === + BigInt( + txDataNonZero * 2 + + txDataZero + + baseFee + + accessListAddressCost + + accessListStorageKeyCost, + ), + ).toBeTruthy(); + + // In this Tx, `to` is `undefined`, so we should charge homestead creation gas. + tx = AccessListEIP2930Transaction.fromTxData( + { + data: hexToBytes('010200'), + accessList: [[validAddress, [validSlot]]], + chainId, + }, + { common }, + ); + + expect( + tx.getBaseFee() === + BigInt( + txDataNonZero * 2 + + txDataZero + + creationFee + + baseFee + + accessListAddressCost + + accessListStorageKeyCost, + ), + ).toBeTruthy(); + + // Explicitly check that even if we have duplicates in our list, we still charge for those + tx = AccessListEIP2930Transaction.fromTxData( + { + to: validAddress, + accessList: [ + [validAddress, [validSlot]], + [validAddress, [validSlot, validSlot]], + ], + chainId, + }, + { common }, + ); + + expect( + tx.getBaseFee() === + BigInt(baseFee + accessListAddressCost * 2 + accessListStorageKeyCost * 3), + ).toBeTruthy(); + }); + + it('getUpfrontCost() -> should return upfront cost', () => { + const tx = AccessListEIP2930Transaction.fromTxData( + { + gasPrice: 1000, + gasLimit: 10000000, + value: 42, + }, + { common }, + ); + expect(tx.getUpfrontCost()).toEqual(BigInt(10000000042)); + }); + + it('unsigned tx -> getMessageToSign()', () => { + const unsignedTx = AccessListEIP2930Transaction.fromTxData( + { + data: hexToBytes('010200'), + to: validAddress, + accessList: [[validAddress, [validSlot]]], + chainId, + }, + { common }, + ); + const expectedHash = hexToBytes( + '0x78528e2724aa359c58c13e43a7c467eb721ce8d410c2a12ee62943a3aaefb60b', + ); + expect(unsignedTx.getMessageToSign(true)).toEqual(expectedHash); + + const expectedSerialization = hexToBytes( + '0x01f858018080809401010101010101010101010101010101010101018083010200f838f7940101010101010101010101010101010101010101e1a00101010101010101010101010101010101010101010101010101010101010101', + ); + expect(unsignedTx.getMessageToSign(false)).toEqual(expectedSerialization); + }); + + // Data from + // https://github.com/INFURA/go-ethlibs/blob/75b2a52a39d353ed8206cffaf68d09bd1b154aae/eth/transaction_signing_test.go#L87 + + it('should sign transaction correctly and return expected JSON', () => { + const _address = hexToBytes('0000000000000000000000000000000000001337'); + const slot1 = hexToBytes( + '0000000000000000000000000000000000000000000000000000000000000000', + ); + const txData = { + data: hexToBytes(''), + gasLimit: 0x62d4, + gasPrice: 0x3b9aca00, + nonce: 0x00, + to: new Address(hexToBytes('df0a88b2b68c673713a8ec826003676f272e3573')), + value: 0x01, + chainId: uint8ArrayToBigInt(hexToBytes('796f6c6f763378')), + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + accessList: [[_address, [slot1]]], + }; + + const customChainParams = { + name: 'custom', + chainId: txData.chainId, + eips: [2718, 2929, 2930], + }; + const usedCommon = Common.custom(customChainParams, { + baseChain: Chain.Mainnet, + hardfork: Hardfork.Berlin, + }); + usedCommon.setEIPs([2718, 2929, 2930]); + + const expectedUnsignedRaw = hexToBytes( + '01f86587796f6c6f76337880843b9aca008262d494df0a88b2b68c673713a8ec826003676f272e35730180f838f7940000000000000000000000000000000000001337e1a00000000000000000000000000000000000000000000000000000000000000000808080', + ); + const pkey = hexToBytes('fad9c8855b740a0b7ed4c221dbad0f33a83a49cad6b3fe8d5817ac83d38b6a19'); + const expectedSigned = hexToBytes( + '01f8a587796f6c6f76337880843b9aca008262d494df0a88b2b68c673713a8ec826003676f272e35730180f838f7940000000000000000000000000000000000001337e1a0000000000000000000000000000000000000000000000000000000000000000080a0294ac94077b35057971e6b4b06dfdf55a6fbed819133a6c1d31e187f1bca938da00be950468ba1c25a5cb50e9f6d8aa13c8cd21f24ba909402775b262ac76d374d', + ); + const expectedHash = hexToBytes( + 'bbd570a3c6acc9bb7da0d5c0322fe4ea2a300db80226f7df4fef39b2d6649eec', + ); + const v = BigInt(0); + const r = uint8ArrayToBigInt( + hexToBytes('294ac94077b35057971e6b4b06dfdf55a6fbed819133a6c1d31e187f1bca938d'), + ); + const s = uint8ArrayToBigInt( + hexToBytes('0be950468ba1c25a5cb50e9f6d8aa13c8cd21f24ba909402775b262ac76d374d'), + ); + + const unsignedTx = AccessListEIP2930Transaction.fromTxData(txData, { common: usedCommon }); + + const serializedMessageRaw = unsignedTx.serialize(); + + expect(uint8ArrayEquals(expectedUnsignedRaw, serializedMessageRaw)).toBeTruthy(); + + const signed = unsignedTx.sign(pkey); + + expect(v === signed.v!).toBeTruthy(); + expect(r === signed.r!).toBeTruthy(); + expect(s === signed.s!).toBeTruthy(); + expect(uint8ArrayEquals(expectedSigned, signed.serialize())).toBeTruthy(); + expect(uint8ArrayEquals(expectedHash, signed.hash())).toBeTruthy(); + + const expectedJSON = { + chainId: '0x796f6c6f763378', + nonce: '0x0', + gasPrice: '0x3b9aca00', + gasLimit: '0x62d4', + to: '0xdf0a88b2b68c673713a8ec826003676f272e3573', + value: '0x1', + data: '0x', + accessList: [ + { + address: '0x0000000000000000000000000000000000001337', + storageKeys: [ + '0x0000000000000000000000000000000000000000000000000000000000000000', + ], + }, + ], + v: '0x0', + r: '0x294ac94077b35057971e6b4b06dfdf55a6fbed819133a6c1d31e187f1bca938d', + s: '0xbe950468ba1c25a5cb50e9f6d8aa13c8cd21f24ba909402775b262ac76d374d', + }; + + expect(signed.toJSON()).toEqual(expectedJSON); + }); + + it('freeze property propagates from unsigned tx to signed tx', () => { + const tx = AccessListEIP2930Transaction.fromTxData({}, { freeze: false }); + expect(Object.isFrozen(tx)).toBe(false); + const signedTxn = tx.sign(pKey); + expect(Object.isFrozen(signedTxn)).toBe(false); + }); + + it('common propagates from the common of tx, not the common in TxOptions', () => { + const txn = AccessListEIP2930Transaction.fromTxData({}, { common, freeze: false }); + const newCommon = new Common({ + chain: Chain.Mainnet, + hardfork: Hardfork.London, + eips: [2537], + }); + expect(newCommon).not.toEqual(common); + Object.defineProperty(txn, 'common', { + get() { + return newCommon; + }, + }); + const signedTxn = txn.sign(pKey); + expect(signedTxn.common.eips().includes(2537)).toBeTruthy(); + }); +}); diff --git a/packages/web3-eth-accounts/test/unit/tx/types.ts b/packages/web3-eth-accounts/test/unit/tx/types.ts new file mode 100644 index 00000000000..59579c036e5 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/tx/types.ts @@ -0,0 +1,78 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export type ForkName = + | 'London+3860' + | 'London' + | 'Berlin' + | 'Istanbul' + | 'Byzantium' + | 'ConstantinopleFix' + | 'Constantinople' + | 'EIP150' + | 'EIP158' + | 'Frontier' + | 'Homestead'; + +export type ForkNamesMap = { [forkName in ForkName]: string }; + +export interface TxData { + data: string; + gasLimit: string; + gasPrice: string; + nonce: string; + to: string; + value: string; + + v: string; + r: string; + s: string; +} + +// The type of each entry from ./ttTransactionTestEip155VitaliksTests.json +export interface VitaliksTestsDataEntry { + blocknumber: string; + hash: string; + rlp: string; + sender: string; + transaction: TxData; +} + +// The type of ./txs.json +export type TxsJsonEntry = { + privateKey: string; + sendersAddress: string; + type: string; + cost: number; + raw: string[]; + data: TxData; +}; + +export type ForksData = { + [forkName in ForkName]: { hash?: string; sender?: string; exception?: string }; +}; + +export type OfficialTransactionTestData = { + _info: { + comment: string; + filledwith: string; + lllcversion: string; + source: string; + sourceHash: string; + }; + result: ForksData; + txbytes: string; +}; diff --git a/packages/web3-eth-accounts/test/unit/wallet.test.ts b/packages/web3-eth-accounts/test/unit/wallet.test.ts new file mode 100644 index 00000000000..2bc2c97c2e9 --- /dev/null +++ b/packages/web3-eth-accounts/test/unit/wallet.test.ts @@ -0,0 +1,374 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable @typescript-eslint/no-magic-numbers */ + +import { when } from 'jest-when'; +import { Web3AccountProvider, Web3BaseWalletAccount, KeyStore } from 'web3-types'; +import { Wallet } from '../../src/wallet'; + +describe('Wallet', () => { + let wallet: Wallet; + let accountProvider: Web3AccountProvider; + let localStorageSpy: { + getItem: jest.MockedFunction<(key: string) => string>; + setItem: jest.MockedFunction<(key: string, value: string) => string>; + }; + let totalAccountsCreate = 0; + let totalPrivatekeyCreate = 0; + + beforeEach(() => { + localStorageSpy = { getItem: jest.fn(), setItem: jest.fn() }; + + jest.spyOn(Wallet, 'getStorage').mockReturnValue(localStorageSpy as never); + + accountProvider = { + privateKeyToAccount: jest.fn().mockImplementation(() => { + totalPrivatekeyCreate += 1; + return { address: `privatekey_create_${totalPrivatekeyCreate}` }; + }), + decrypt: jest.fn(), + create: jest.fn().mockImplementation(() => { + totalAccountsCreate += 1; + return { address: `account_create_${totalAccountsCreate}` }; + }), + }; + wallet = new Wallet(accountProvider); + }); + + describe('constructor', () => { + it('should create instance of the wallet', () => { + expect(wallet).toBeInstanceOf(Wallet); + }); + }); + + describe('create', () => { + it('should create given # of accounts using the account provider', () => { + const numberOfAccounts = 10; + const accounts = []; + + wallet.create(numberOfAccounts); + + for (let i = 0; i < numberOfAccounts; i += 1) { + accounts.push(wallet.get(i)); + } + + expect(wallet).toHaveLength(numberOfAccounts); + expect(accounts).toHaveLength(numberOfAccounts); + expect(accounts).toMatchSnapshot(); + expect(accountProvider.create).toHaveBeenCalledTimes(numberOfAccounts); + }); + }); + + describe('add', () => { + it('should create account from private key if string value is given', () => { + const privateKey = 'private key'; + const result = wallet.add(privateKey); + + expect(result).toBeTruthy(); + + expect(accountProvider.privateKeyToAccount).toHaveBeenCalledTimes(1); + expect(accountProvider.privateKeyToAccount).toHaveBeenCalledWith(privateKey); + expect(wallet).toHaveLength(1); + expect(wallet.get(0)).toEqual({ address: 'privatekey_create_1' }); + }); + + it('should not create account from private key if object value is given', () => { + const result = wallet.add({ address: 'my_address' } as never); + + expect(result).toBeTruthy(); + expect(accountProvider.privateKeyToAccount).toHaveBeenCalledTimes(0); + expect(wallet).toHaveLength(1); + expect(wallet.get(0)).toEqual({ address: 'my_address' }); + }); + + it('should add account with lowercase address', () => { + const result = wallet.add({ address: 'myAddress' } as never); + + expect(result).toBeTruthy(); + expect(accountProvider.privateKeyToAccount).toHaveBeenCalledTimes(0); + expect(wallet).toHaveLength(1); + expect(wallet.get('myaddress')).toEqual({ address: 'myAddress' }); + }); + + it('should override account object for existing address', () => { + const account1 = { address: 'address', privateKey: 'pkey1' } as never; + const account2 = { address: 'address', privateKey: 'pkey2' } as never; + + wallet.add(account1); + expect(wallet.get('address')).toEqual(account1); + + wallet.add(account2); + expect(wallet.get('address')).toEqual(account2); + }); + }); + + describe('get', () => { + it('should get account for given index', () => { + const account = { address: 'my_address' } as never; + + wallet.add(account); + + expect(wallet.get(0)).toEqual(account); + }); + + it('should get account for given address', () => { + const account = { address: 'my_address' } as never; + + wallet.add(account); + + expect(wallet.get('my_address')).toEqual(account); + }); + + it('should get account with index', () => { + const account = { address: 'my_Address' } as never; + + wallet.add(account); + + expect(wallet[0]).toEqual(account); + }); + }); + + describe('remove', () => { + it('should remove account for given index', () => { + const account = { address: 'my_address' } as never; + wallet.add(account); + expect(wallet).toHaveLength(1); + + const result = wallet.remove(0); + + expect(result).toBeTruthy(); + expect(wallet).toHaveLength(0); + expect(wallet.get(0)).toBeUndefined(); + }); + + it('should return false if index not found', () => { + const account = { address: 'my_address' } as never; + wallet.add(account); + expect(wallet).toHaveLength(1); + + const result = wallet.remove(2); + + expect(result).toBeFalsy(); + expect(wallet).toHaveLength(1); + }); + + it('should remove account for given address', () => { + const account = { address: 'my_address' } as never; + wallet.add(account); + expect(wallet).toHaveLength(1); + + const result = wallet.remove('my_address'); + + expect(result).toBeTruthy(); + expect(wallet).toHaveLength(0); + expect(wallet.get(0)).toBeUndefined(); + }); + + it('should return false if given address not found', () => { + const account = { address: 'my_address' } as never; + wallet.add(account); + expect(wallet).toHaveLength(1); + + const result = wallet.remove('my_address2'); + + expect(result).toBeFalsy(); + expect(wallet).toHaveLength(1); + }); + + it('should remove account with the index', () => { + const account = { address: 'my_address' } as never; + wallet.add(account); + expect(wallet).toHaveLength(1); + + delete wallet[0]; + + // Deleting objects dees not change the length + expect(wallet).toHaveLength(1); + expect(wallet[0]).toBeUndefined(); + }); + + it('should remove account with array methods', () => { + const account = { address: 'my_address' } as never; + wallet.add(account); + expect(wallet).toHaveLength(1); + + wallet.splice(0, 1); + + expect(wallet).toHaveLength(0); + expect(wallet[0]).toBeUndefined(); + }); + + it('should remove account added with private key with array methods', () => { + const privateKey = 'private_key'; + wallet.add(privateKey); + expect(wallet).toHaveLength(1); + + wallet.splice(0, 1); + + expect(wallet).toHaveLength(0); + expect(wallet[0]).toBeUndefined(); + }); + }); + + describe('clear', () => { + it('should remove all accounts', () => { + wallet.add({ address: 'my_address' } as never); + wallet.add({ address: 'my_address2' } as never); + expect(wallet).toHaveLength(2); + + wallet.clear(); + + expect(wallet).toHaveLength(0); + expect(wallet.get(0)).toBeUndefined(); + }); + }); + + describe('encrypt', () => { + it('should encrypt all accounts and return array', async () => { + const account1 = { + address: 'my_address1', + encrypt: jest.fn().mockResolvedValue('encrypted_account1'), + } as any; + const account2 = { + address: 'my_address2', + encrypt: jest.fn().mockResolvedValue('encrypted_account2'), + } as any; + const options = { myOptions: 'myOptions' }; + wallet.add(account1); + wallet.add(account2); + + const result = await wallet.encrypt('password', options); + + expect(account1.encrypt).toHaveBeenCalledTimes(1); + expect(account1.encrypt).toHaveBeenCalledWith('password', options); + expect(account2.encrypt).toHaveBeenCalledTimes(1); + expect(account2.encrypt).toHaveBeenCalledWith('password', options); + expect(result).toEqual(['encrypted_account1', 'encrypted_account2']); + }); + }); + + describe('decrypt', () => { + it('should decrypt all accounts and add to wallet', async () => { + const encryptedAccount1 = { address: 'encrypted_account1' } as KeyStore; + const encryptedAccount2 = { address: 'encrypted_account2' } as KeyStore; + const account1 = { address: 'my_address1' } as any; + const account2 = { address: 'my_address2' } as any; + const options = { myOptions: 'myOptions' }; + + when(accountProvider.decrypt) + .calledWith(encryptedAccount1, 'password', options) + .mockResolvedValue(account1); + when(accountProvider.decrypt) + .calledWith(encryptedAccount2, 'password', options) + .mockResolvedValue(account2); + + await wallet.decrypt([encryptedAccount1, encryptedAccount2], 'password', options); + + expect(accountProvider.decrypt).toHaveBeenCalledTimes(2); + expect(accountProvider.decrypt).toHaveBeenCalledWith( + encryptedAccount1, + 'password', + options, + ); + expect(accountProvider.decrypt).toHaveBeenCalledWith( + encryptedAccount2, + 'password', + options, + ); + expect(wallet).toHaveLength(2); + expect(wallet.get(0)).toEqual(account1); + expect(wallet.get(1)).toEqual(account2); + }); + }); + + describe('save', () => { + it('should throw error if local storage not present', async () => { + jest.spyOn(Wallet, 'getStorage').mockReturnValue(undefined); + + return expect(wallet.save('password')).rejects.toThrow('Local storage not available.'); + }); + + it('should encrypt wallet and store with local storage for given key', async () => { + const encryptedWallet = [{ address: 'encryptedWallet' }] as KeyStore[]; + jest.spyOn(wallet, 'encrypt').mockResolvedValue(encryptedWallet); + + await wallet.save('password', 'myKey'); + + expect(wallet.encrypt).toHaveBeenCalledTimes(1); + expect(wallet.encrypt).toHaveBeenCalledWith('password'); + expect(localStorageSpy.setItem).toHaveBeenCalledTimes(1); + expect(localStorageSpy.setItem).toHaveBeenCalledWith( + 'myKey', + JSON.stringify(encryptedWallet), + ); + }); + + it('should encrypt wallet and store with local storage with default key', async () => { + const encryptedWallet = [{ address: 'encryptedWallet' }] as KeyStore[]; + jest.spyOn(wallet, 'encrypt').mockResolvedValue(encryptedWallet); + + await wallet.save('password'); + + expect(wallet.encrypt).toHaveBeenCalledTimes(1); + expect(wallet.encrypt).toHaveBeenCalledWith('password'); + expect(localStorageSpy.setItem).toHaveBeenCalledTimes(1); + expect(localStorageSpy.setItem).toHaveBeenCalledWith( + 'web3js_wallet', + JSON.stringify(encryptedWallet), + ); + }); + }); + + describe('load', () => { + it('should throw error if local storage not present', async () => { + jest.spyOn(Wallet, 'getStorage').mockReturnValue(undefined); + + return expect(wallet.load('password')).rejects.toThrow('Local storage not available.'); + }); + + it('should load wallet from local storage for given key and decrypt', async () => { + const encryptedWallet = JSON.stringify(['encryptedWallet']); + + when(localStorageSpy.getItem).calledWith('myKey').mockReturnValue(encryptedWallet); + jest.spyOn(wallet, 'decrypt').mockResolvedValue({} as never); + + await wallet.load('password', 'myKey'); + + expect(wallet.decrypt).toHaveBeenCalledTimes(1); + expect(wallet.decrypt).toHaveBeenCalledWith(['encryptedWallet'], 'password'); + expect(localStorageSpy.getItem).toHaveBeenCalledTimes(1); + expect(localStorageSpy.getItem).toHaveBeenCalledWith('myKey'); + }); + + it('should load wallet from local storage for default key and decrypt', async () => { + const encryptedWallet = JSON.stringify(['encryptedWallet']); + + when(localStorageSpy.getItem) + .calledWith('web3js_wallet') + .mockReturnValue(encryptedWallet); + jest.spyOn(wallet, 'decrypt').mockResolvedValue({} as never); + + await wallet.load('password'); + + expect(wallet.decrypt).toHaveBeenCalledTimes(1); + expect(wallet.decrypt).toHaveBeenCalledWith(['encryptedWallet'], 'password'); + expect(localStorageSpy.getItem).toHaveBeenCalledTimes(1); + expect(localStorageSpy.getItem).toHaveBeenCalledWith('web3js_wallet'); + }); + }); +}); diff --git a/packages/web3-eth-accounts/tsconfig.cjs.json b/packages/web3-eth-accounts/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-eth-accounts/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-eth-accounts/tsconfig.esm.json b/packages/web3-eth-accounts/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-eth-accounts/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-eth-accounts/tsconfig.json b/packages/web3-eth-accounts/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-eth-accounts/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-eth-accounts/tsconfig.types.json b/packages/web3-eth-accounts/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-eth-accounts/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-eth-accounts/tsdoc.json b/packages/web3-eth-accounts/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-eth-accounts/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-eth-accounts/types/index.d.ts b/packages/web3-eth-accounts/types/index.d.ts deleted file mode 100644 index f92cdc13f7a..00000000000 --- a/packages/web3-eth-accounts/types/index.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens , Samuel Furter - * @date 2018 - */ - -import { AccountsBase, SignedTransaction, WalletBase } from 'web3-core'; - -export {SignedTransaction} from 'web3-core'; - -export class Accounts extends AccountsBase {} - -export class Wallet extends WalletBase {} - -export interface Sign extends SignedTransaction { - message: string; - signature: string; -} - -export interface SignatureObject { - messageHash: string; - r: string; - s: string; - v: string; -} diff --git a/packages/web3-eth-accounts/types/tests/accounts-tests.ts b/packages/web3-eth-accounts/types/tests/accounts-tests.ts deleted file mode 100644 index aa7c1c3f24b..00000000000 --- a/packages/web3-eth-accounts/types/tests/accounts-tests.ts +++ /dev/null @@ -1,241 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file accounts-tests.ts - * @author Josh Stevens - * @date 2018 - */ -import { Accounts, SignedTransaction } from 'web3-eth-accounts'; - -// $ExpectType Accounts -const accounts_empty = new Accounts(); - -// $ExpectType Accounts -const accounts = new Accounts('http://localhost:8545'); - -// $ExpectType provider -accounts.currentProvider; - -// $ExpectType any -accounts.givenProvider; - -// $ExpectType boolean -accounts.setProvider('https://localhost:2100'); - -// $ExpectType Account -accounts.create(); -// $ExpectType Account -accounts.create( - '2435@#@#@±±±±!!!!678543213456764321§34567543213456785432134567' -); - -// $ExpectType Account -accounts.privateKeyToAccount( - '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709' -); - -// $ExpectType Account -accounts.privateKeyToAccount( - '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', - true -); - -// $ExpectType Promise -accounts.signTransaction( - { - to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', - value: '1000000000', - gas: 2000000 - }, - '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318' -); - -// $ExpectType Promise -accounts.signTransaction( - { - to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', - value: '1000000000', - gas: 2000000 - }, - '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', - (error: Error, signedTransaction: SignedTransaction) => { - console.log('hey'); - } -); - -// $ExpectType string -accounts.recoverTransaction( - '0xf861808084aefcdfa08e7d2ee3f0b9d9ae184b2001fe0aff07603d9' -); - -// $ExpectType string -accounts.hashMessage('hello world'); - -// $ExpectType Sign -accounts.sign( - 'Some data', - '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318' -); - -// $ExpectType string -accounts.recover({ - messageHash: - '0x1da44b586eb0729ff70a73c326926f6ed5a25f5b056e7f47fbc6e58d86871655', - v: '0x1c', - r: '0xb91467e570a6466aa9e9876cbcd013baba02900b8979d43fe208a4a4f339f5fd', - s: '0x6007e74cd82e037b800186422fc2da167c747ef045e5d18a5f5d4300f8e1a029' -}); - -// $ExpectType string -accounts.recover( - 'Some data', - '0xb91467e570a6466aa9e9876cbcd013baba02900b8979d43fe208a4a4f339f5fd6007e74cd82e037b800186422fc2da167c747ef045e5d18a5f5d4300f8e1a0291c' -); - -// $ExpectType string -accounts.recover( - 'Some data', - '0x1c', - '0xb91467e570a6466aa9e9876cbcd013baba02900b8979d43fe208a4a4f339f5fd', - '0x6007e74cd82e037b800186422fc2da167c747ef045e5d18a5f5d4300f8e1a029' -); - -// $ExpectType EncryptedKeystoreV3Json -accounts.encrypt( - '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', - 'test!' -); - -// $ExpectType Account -accounts.decrypt( - { - version: 3, - id: '04e9bcbb-96fa-497b-94d1-14df4cd20af6', - address: '2c7536e3605d9c16a7a3d7b1898e529396a65c23', - crypto: { - ciphertext: - 'a1c25da3ecde4e6a24f3697251dd15d6208520efc84ad97397e906e6df24d251', - cipherparams: { iv: '2885df2b63f7ef247d753c82fa20038a' }, - cipher: 'aes-128-ctr', - kdf: 'scrypt', - kdfparams: { - dklen: 32, - salt: - '4531b3c174cc3ff32a6a7a85d6761b410db674807b2d216d022318ceee50be10', - n: 262144, - r: 8, - p: 1 - }, - mac: - 'b8b010fff37f9ae5559a352a185e86f9b9c1d7f7a9f1bd4e82a5dd35468fc7f6' - } - }, - 'test!' -); - -// $ExpectType WalletBase -accounts.wallet.create(2); - -// $ExpectType Account -accounts.wallet[0]; - -// $ExpectType WalletBase -accounts.wallet.create( - 2, - '54674321§3456764321§345674321§3453647544±±±§±±±!!!43534534534534' -); - -// $ExpectType AddedAccount -accounts.wallet.add( - '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318' -); - -// $ExpectType AddedAccount -accounts.wallet.add({ - privateKey: - '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', - address: '0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01' -}); - -// $ExpectType boolean -accounts.wallet.remove('0xF0109fC8DF283027b6285cc889F5aA624EaC1F55'); - -// $ExpectType boolean -accounts.wallet.remove(3); - -// $ExpectType WalletBase -accounts.wallet.clear(); - -// $ExpectType EncryptedKeystoreV3Json[] -accounts.wallet.encrypt('test'); - -// $ExpectType WalletBase -accounts.wallet.decrypt( - [ - { - version: 3, - id: '83191a81-aaca-451f-b63d-0c5f3b849289', - address: '06f702337909c06c82b09b7a22f0a2f0855d1f68', - crypto: { - ciphertext: - '7d34deae112841fba86e3e6cf08f5398dda323a8e4d29332621534e2c4069e8d', - cipherparams: { iv: '497f4d26997a84d570778eae874b2333' }, - cipher: 'aes-128-ctr', - kdf: 'scrypt', - kdfparams: { - dklen: 32, - salt: - '208dd732a27aa4803bb760228dff18515d5313fd085bbce60594a3919ae2d88d', - n: 262144, - r: 8, - p: 1 - }, - mac: - '0062a853de302513c57bfe3108ab493733034bf3cb313326f42cf26ea2619cf9' - } - }, - { - version: 3, - id: '7d6b91fa-3611-407b-b16b-396efb28f97e', - address: 'b5d89661b59a9af0b34f58d19138baa2de48baaf', - crypto: { - ciphertext: - 'cb9712d1982ff89f571fa5dbef447f14b7e5f142232bd2a913aac833730eeb43', - cipherparams: { iv: '8cccb91cb84e435437f7282ec2ffd2db' }, - cipher: 'aes-128-ctr', - kdf: 'scrypt', - kdfparams: { - dklen: 32, - salt: - '08ba6736363c5586434cd5b895e6fe41ea7db4785bd9b901dedce77a1514e8b8', - n: 262144, - r: 8, - p: 1 - }, - mac: - 'd2eb068b37e2df55f56fa97a2bf4f55e072bef0dd703bfd917717d9dc54510f0' - } - } - ], - 'test' -); - -// $ExpectType boolean -accounts.wallet.save('test#!$'); - -// $ExpectType WalletBase -accounts.wallet.load('test#!$'); - -// $ExpectType WalletBase -accounts.wallet.load('test#!$', 'myWalletKey'); diff --git a/packages/web3-eth-accounts/types/tsconfig.json b/packages/web3-eth-accounts/types/tsconfig.json deleted file mode 100644 index 8cc88bbb8cc..00000000000 --- a/packages/web3-eth-accounts/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-eth-accounts": ["."] - } - } -} diff --git a/packages/web3-eth-accounts/types/tslint.json b/packages/web3-eth-accounts/types/tslint.json deleted file mode 100644 index 6429b0c446e..00000000000 --- a/packages/web3-eth-accounts/types/tslint.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false - } -} diff --git a/packages/web3-eth-contract/.eslintignore b/packages/web3-eth-contract/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/packages/web3-eth-contract/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-contract/.eslintrc.js b/packages/web3-eth-contract/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-eth-contract/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth-contract/.gitignore b/packages/web3-eth-contract/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-eth-contract/.npmignore b/packages/web3-eth-contract/.npmignore new file mode 100644 index 00000000000..0b1a9d71c23 --- /dev/null +++ b/packages/web3-eth-contract/.npmignore @@ -0,0 +1,26 @@ +.babelrc +.eslintignore +.eslintrc.json +.eslintrc.js +.gitignore +.lintstagedrc.json +.nycrc +.prettierrc.json +.prettierignore +cypress.json +index.html +Jenkinsfile* +*.log + +.nyc_output/ +coverage/ +benchmark/ +.coverage/ +cypress/ +fixtures/ +tmp/ +logs/ +test/ +scripts/ +browsertest/ +examples/ diff --git a/packages/web3-eth-contract/.prettierignore b/packages/web3-eth-contract/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-eth-contract/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-contract/.prettierrc.json b/packages/web3-eth-contract/.prettierrc.json new file mode 100644 index 00000000000..7b23ef55098 --- /dev/null +++ b/packages/web3-eth-contract/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": true, + "arrowParens": "avoid" +} diff --git a/packages/web3-eth-contract/CHANGELOG.md b/packages/web3-eth-contract/CHANGELOG.md new file mode 100644 index 00000000000..08b2da7c2f7 --- /dev/null +++ b/packages/web3-eth-contract/CHANGELOG.md @@ -0,0 +1,323 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [4.0.0-alpha.0] + +### Breaking Changes + +#### Receipt Status + +The receiptInfo Status will now be be an unsigned integer instead of boolean value to comply with the specification. + + + +

1.x +

+ +```ts +myContract.methods + .MyMethod() + .send() + .on('receipt', receipt => { + console.log(receipt.status); // true | false + }); +``` + +

+
+ +
4.x +

+ +```ts +myContract.methods + .MyMethod() + .send() + .on('receipt', receipt => { + console.log(receipt.status); // BigInt(0) | BigInt(1) + }); +``` + +

+
+ +**NOTE:** The unsigned integer type is dependent on the data format you specified. Default type is `bigint`. + +#### Deploy ’sending’ and `sent` event will fire only the params + +In 1.x when following was executed `deploy().send().on(‘sending’, payload => {})`. The `payload` was the complete the JSON-RPC Payload. In 4.x it will just be the transaction which is about to be transmitted. Earlier it was accessible by from `payload.params[0]`, now will be available directly to event handler. + +
1.x +

+ +```ts +myContract + .deploy() + .send() + .on('send', payload => { + console.log(payload); + // {id: <1>, jsonrpc: '2.0', method: 'eth_sendTransaction', params: [txObject] } + }); +``` + +

+
+ +
4.x +

+ +```ts +myContract + .deploy() + .send() + .on('send', txObject => { + console.log(txObject); + // {id: <>, gas: <>,...} + }); +``` + +

+
+ +#### Deploy ’confirmations’ handler will be invoked with object + +In 1.x, the `confirmations` handler was invoked with multiple parameters. But in `4.x` there will be one parameter as object but with all the same properties. + +
1.x +

+ +```ts +myContract .send().on(‘confirmation’, (confirmations: number, receipt: object, latestBlockHash: string) => {})` +``` + +

+
+ +
4.x +

+ +```ts +myContract .send().on(‘confirmation’, ({confirmations: bigint, receipt: object, latestBlockHash: string}) => {})` +``` + +

+
+ +#### Strict validation for `encodeABI` + +`encodeABI` now have strict validation for the ABI types. It's not limited to mentioned use cases below , but applied in general. Some use cases are: + +- Earlier a `byte32` ABI type was successfully encoded even providing less bytes as input. Now it will throw error. +- Earlier a `byte32` ABI type was successfully encoded even with an empty bytes. Now it will throw error. + +#### Different error message for creating object without `new` keyword + +The error message will be different if you try to create a contract object without a `new` keyword. + +
1.x +

+ +```ts +Please use the "new" keyword to instantiate a web3.eth.Contract() object! +``` + +

+
+ +
4.x +

+ +```ts +Class constructor ContractBuilder cannot be invoked without 'new' +``` + +

+
+ +#### No warning message when `toBlock` passed to event subscription + +In `1.x` if you pass the `toBlock` as event options you would get a warning message. + +> Invalid option: toBlock. Use getPastEvents for specific range. + +In `4.x` you will not get any warning. But `toBlock` still have no effect. + +#### The contract `send` method will now resolve with the `receipt` object + +In `1.x` the contract `.send` method was always resolved with `transactionHash`. That enforces user to make an extra call to get any further information. In `4.x` the `.send` function will resolve with `receipt` object. + +
1.x +

+ +```ts +const transactionHash = await myContract.method.MyMethod().send(); +``` + +

+
+ +
4.x +

+ +```ts +const receipt = await myContract.method.MyMethod().send(); +const transactionHash = receipt.transactionHash; +``` + +

+
+ +## [4.0.1-alpha.1] + +### Added + +- Decoding error data, using Error ABI if available, according to EIP-838. (#5434) +- The class `Web3ContractError` is moved from this package to `web3-error`. (#5434) + +### Fixed + +- According to the latest change in `web3-eth-abi`, the decoded values of the large numbers, returned from function calls or events, are now available as `BigInt`. (#5435) + +## [4.0.1-alpha.2] + +### Added + +- Decoding error data, using Error ABI if available, if error was returned from a smart contract function call (#5662). +- `SpecialOutput` type was added as a generic type into the call function to support reassigning output types (#5631) +- Overloaded functions types (`ContractOverloadedMethodInputs`, `ContractOverloadedMethodOutputs`) was added (#5631) + +### Fixed + +- Emit past contract events based on `fromBlock` when passed to `contract.events.someEventName` (#5201) +- Use different types for `ContractOptions` -> `jsonInterface` setter and getter (#5474) +- An issue within the `Contract` constructor where `provider` wasn't being set when provided within the `optionsOrContextOrReturnFormat` argument (#5669) + +## [4.0.1-alpha.3] + +### Changed + +- Updated dependencies (#5725) + +## [4.0.1-alpha.4] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +## [4.0.1-alpha.5] + +### Changed + +- web3.js dependencies (#5757) + +## [4.0.1-rc.0] + +### Fixed + +- Fix contract defaults (#5756) +- Fixed getPastEventsError (#5819) + +### Changed + +- Update imports statements for objects that was moved between web3 packages (#5771) + +### Added + +- Added functionality of `createAccessList` for contracts ( #5780 ) +- An instance of `Contract` will `subscribeToContextEvents` upon instantiation if `syncWithContext` is set to `true` and the constructor is passed an instance of `Web3Context` (#5833) +- Added support of `safe` and `finalized` block tags (#5823) + +### Removed + +- `decodeErrorData` is no longer exported (method was moved to `web3-eth-abi` and renamed `decodeContractErrorData`) (#5844) + +## [4.0.1-rc.1] + +### Added + +- `input` is now an acceptable property for `ContractInitOptions` in place of `data` (either can be used, but `input` is used withing the `Contract` class) (#5915) +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +### Changed + +- `getSendTxParams` will now return `input` instead of `data` in returned transaction parameters object (#5915) +- `Contract` constructor will now thrown new `ContractTransactionDataAndInputError` if both `data` and `input` are passed in `ContractInitOptions` for `Contract` constructor (#5915) +- The types `ContractInitOptions`, `NonPayableCallOptions` and `PayableCallOptions` are moved to `web3-types`. (#5993) + +### Removed + +- `data` was removed as a property of `ContractOptions` type (#5915) + +## [4.0.1-rc.2] + +### Added + +- Added support for `getPastEvents` method to filter `allEvents` and specific event (#6010) +- Added `maxPriorityFeePerGas` and `maxFeePerGas` in `ContractOptions` type and updated function using it in utils (#6118) +- Added method's type autodetection by ABI param (#6137) + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Fixed + +- Event filtering using non-indexed and indexed string event arguments (#6167) + +## [4.0.3] + +### Changed + +- Dependencies updated + +## [4.0.4] + +### Changed + +- Dependencies updated + +## [4.0.5] + +### Fixed + +- Fixed bug in `contract.events.allEvents` + +### Added + +- In case of error events there will be inner error also available for details + +## [4.1.0] + +### Added + +- Added `dataInputFill` as a ContractInitOption, allowing users to have the choice using property `data`, `input` or `both` for contract methods to be sent to the RPC provider. (#6355) +- Added to `Web3Config` property `contractDataInputFill` allowing users to have the choice using property `data`, `input` or `both` for contract methods to be sent to the RPC provider when creating contracts. (#6377) + + +## [4.1.1] + +### Changed + +- The `events` property was added to the `receipt` object (#6410) + +## [4.1.2] + +### Changed + +- Dependencies updated + +## [Unreleased] diff --git a/packages/web3-eth-contract/README.md b/packages/web3-eth-contract/README.md index c738ac33254..9de73d9556e 100644 --- a/packages/web3-eth-contract/README.md +++ b/packages/web3-eth-contract/README.md @@ -1,48 +1,82 @@ -# web3-eth-contract +

+ web3.js +

-[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +# web3.js - Eth Contract Package -This is a sub-package of [web3.js][repo]. +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] -This is the contract package used in the `web3-eth` package. +This is a sub-package of [web3.js][repo]. -Please read the [documentation][docs] for more. +`web3-eth-contract` contains the contract package used in `web3-eth`. ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3-eth-contract) or using [Yarn](https://yarnpkg.com/package/web3-eth-contract) + +### Using NPM ```bash npm install web3-eth-contract ``` +### Using Yarn + +```bash +yarn add web3-eth-contract +``` + +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + ## Usage -```js -const Web3EthContract = require('web3-eth-contract'); +You can initialize the typesafe Contract API instance with the following. + +```ts +import { Contract } from 'web3-eth-contract'; -// Set provider for all later instances to use -Web3EthContract.setProvider('ws://localhost:8546'); +const abi = [...] as const; -const contract = new Web3EthContract(jsonInterface, address); -contract.methods.somFunc().send({from: ....}) -.on('receipt', function(){ - ... -}); +const contract = new Contract(abi); ``` -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js +- We prefer that you use `web3.eth.Contract` API in normal usage. +- The use of `as const` is necessary to have fully type-safe interface for the contract. +- As the ABIs are not extensive in size, we suggest declaring them `as const` in your TS project. +- This approach is more flexible and seamless compared to other approaches of off-line compiling ABIs to TS interfaces (such as [TypeChain](https://github.com/dethcrypto/TypeChain). + +## Compatibility + +We have tested the Typescript interface support for the ABIs compiled with solidity version `v0.4.x` and above. If you face any issue regarding the contract typing, please create an issue to report to us. + +The Typescript support for fixed length array types are supported up 30 elements. See more details [here](https://github.com/ChainSafe/web3.js/blob/nh%2F4562-contract-typing/packages/web3-eth-abi/src/number_map_type.ts#L1). This limitation is only to provide more performant developer experience in IDEs. In future we may come up with a workaround to avoid this limitation. If you have any idea feel free to share. -## Types +## Package.json Scripts -All the TypeScript typings are placed in the `types` folder. +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-eth-contract.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-eth-contract +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-contract%2Fpackage.json [npm-url]: https://npmjs.org/package/web3-eth-contract -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-eth-contract -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-eth-contract -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-eth-contract -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-eth-contract +[downloads-image]: https://img.shields.io/npm/dm/web3-eth-contract?label=npm%20downloads diff --git a/packages/web3-eth-contract/assets/logo/web3js.ai b/packages/web3-eth-contract/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-eth-contract/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-eth-contract/assets/logo/web3js.jpg b/packages/web3-eth-contract/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-eth-contract/assets/logo/web3js.jpg differ diff --git a/packages/web3-eth-contract/assets/logo/web3js.svg b/packages/web3-eth-contract/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-eth-contract/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-eth-contract/cypress b/packages/web3-eth-contract/cypress new file mode 120000 index 00000000000..4a671a7beac --- /dev/null +++ b/packages/web3-eth-contract/cypress @@ -0,0 +1 @@ +../../templates/cypress \ No newline at end of file diff --git a/packages/web3-eth-contract/cypress.config.js b/packages/web3-eth-contract/cypress.config.js new file mode 120000 index 00000000000..8cd9ba29af0 --- /dev/null +++ b/packages/web3-eth-contract/cypress.config.js @@ -0,0 +1 @@ +../../templates/cypress.config.js \ No newline at end of file diff --git a/packages/web3-eth-contract/package-lock.json b/packages/web3-eth-contract/package-lock.json deleted file mode 100644 index c0ed72d8134..00000000000 --- a/packages/web3-eth-contract/package-lock.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "web3-eth-contract", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.0.tgz", - "integrity": "sha512-GnZbirvmqZUzMgkFn70c74OQpTTUcCzlhQliTzYjQMqg+hVKcDnxdL19Ne3UdYzdMA/+W3eb646FWn/ZaT1NfQ==" - }, - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-eth-contract/package.json b/packages/web3-eth-contract/package.json index 2fdbc9c9d6b..c4d6dd5a88b 100644 --- a/packages/web3-eth-contract/package.json +++ b/packages/web3-eth-contract/package.json @@ -1,31 +1,72 @@ { - "name": "web3-eth-contract", - "version": "1.3.0", - "description": "Web3 module to interact with Ethereum smart contracts.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-eth-contract", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "@types/bn.js": "^4.11.5", - "underscore": "1.9.1", - "web3-core": "1.3.0", - "web3-core-helpers": "1.3.0", - "web3-core-method": "1.3.0", - "web3-core-promievent": "1.3.0", - "web3-core-subscriptions": "1.3.0", - "web3-eth-abi": "1.3.0", - "web3-utils": "1.3.0" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3-eth-contract", + "version": "4.1.2", + "description": "Web3 module to interact with Ethereum smart contracts.", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ethereum/web3.js/tree/4.x/packages/web3-eth-contract", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --runInBand --forceExit --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --runInBand --forceExit", + "test:e2e:electron": "npx cypress run --headless --browser electron --env grep='ignore',invert=true", + "test:e2e:chrome": "npx cypress run --headless --browser chrome --env grep='ignore',invert=true", + "test:e2e:firefox": "npx cypress run --headless --browser firefox --env grep='ignore',invert=true" + }, + "dependencies": { + "web3-core": "^4.3.0", + "web3-errors": "^1.1.3", + "web3-eth": "^4.3.1", + "web3-eth-abi": "^4.1.4", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + }, + "devDependencies": { + "@humeris/espresso-shot": "^4.0.0", + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4", + "web3-eth-accounts": "^4.1.0" + } } diff --git a/packages/web3-eth-contract/src/constant.ts b/packages/web3-eth-contract/src/constant.ts new file mode 100644 index 00000000000..6be67ffb159 --- /dev/null +++ b/packages/web3-eth-contract/src/constant.ts @@ -0,0 +1,17 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export { ALL_EVENTS, ALL_EVENTS_ABI } from 'web3-eth'; diff --git a/packages/web3-eth-contract/src/contract.ts b/packages/web3-eth-contract/src/contract.ts new file mode 100644 index 00000000000..dcf726b07e5 --- /dev/null +++ b/packages/web3-eth-contract/src/contract.ts @@ -0,0 +1,1220 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + Web3Context, + Web3EventEmitter, + Web3PromiEvent, + Web3ConfigEvent, + Web3SubscriptionManager, +} from 'web3-core'; +import { + ContractExecutionError, + ContractTransactionDataAndInputError, + SubscriptionError, + Web3ContractError, +} from 'web3-errors'; +import { + createAccessList, + call, + estimateGas, + getLogs, + sendTransaction, + decodeEventABI, + NewHeadsSubscription, + ALL_EVENTS, + ALL_EVENTS_ABI, + SendTransactionEvents, +} from 'web3-eth'; +import { + encodeEventSignature, + encodeFunctionSignature, + decodeContractErrorData, + isAbiErrorFragment, + isAbiEventFragment, + isAbiFunctionFragment, + jsonInterfaceMethodToString, +} from 'web3-eth-abi'; +import { + AbiConstructorFragment, + AbiErrorFragment, + AbiEventFragment, + AbiFragment, + AbiFunctionFragment, + ContractAbi, + ContractConstructorArgs, + ContractEvent, + ContractEvents, + ContractMethod, + ContractMethodInputParameters, + ContractMethodOutputParameters, + Address, + BlockNumberOrTag, + BlockTags, + Bytes, + EthExecutionAPI, + Filter, + FilterAbis, + HexString, + LogsInput, + Mutable, + ContractInitOptions, + NonPayableCallOptions, + PayableCallOptions, + DataFormat, + DEFAULT_RETURN_FORMAT, + Numbers, + Web3ValidationErrorObject, + EventLog, + ContractAbiWithSignature, + ContractOptions, +} from 'web3-types'; +import { format, isDataFormat, keccak256, toChecksumAddress } from 'web3-utils'; +import { + isNullish, + validator, + utils as validatorUtils, + ValidationSchemaInput, + Web3ValidatorError, +} from 'web3-validator'; +import { decodeMethodReturn, encodeEventABI, encodeMethodABI } from './encoding.js'; +import { LogsSubscription } from './log_subscription.js'; +import { + ContractEventOptions, + NonPayableMethodObject, + NonPayableTxOptions, + PayableMethodObject, + PayableTxOptions, + Web3ContractContext, +} from './types.js'; +import { + getCreateAccessListParams, + getEstimateGasParams, + getEthTxCallParams, + getSendTxParams, + isContractInitOptions, + isWeb3ContractContext, +} from './utils.js'; + +type ContractBoundMethod< + Abi extends AbiFunctionFragment, + Method extends ContractMethod = ContractMethod, +> = ( + ...args: Method['Inputs'] +) => Method['Abi']['stateMutability'] extends 'payable' | 'pure' + ? PayableMethodObject + : NonPayableMethodObject; + +export type ContractOverloadedMethodInputs> = NonNullable< + AbiArr extends readonly [] + ? undefined + : AbiArr extends readonly [infer A, ...infer R] + ? A extends AbiFunctionFragment + ? ContractMethodInputParameters | ContractOverloadedMethodInputs + : undefined + : undefined +>; + +export type ContractOverloadedMethodOutputs> = NonNullable< + AbiArr extends readonly [] + ? undefined + : AbiArr extends readonly [infer A, ...infer R] + ? A extends AbiFunctionFragment + ? ContractMethodOutputParameters | ContractOverloadedMethodOutputs + : undefined + : undefined +>; + +// To avoid circular dependency between types and encoding, declared these types here. +export type ContractMethodsInterface = { + [MethodAbi in FilterAbis< + Abi, + AbiFunctionFragment & { type: 'function' } + > as MethodAbi['name']]: ContractBoundMethod; + // To allow users to use method signatures + // eslint-disable-next-line @typescript-eslint/no-explicit-any +} & { [key: string]: ContractBoundMethod }; + +/** + * The event object can be accessed from `myContract.events.myEvent`. + * + * \> Remember: To subscribe to an event, your provider must have support for subscriptions. + * + * ```ts + * const subscription = await myContract.events.MyEvent([options]) + * ``` + * + * @param options - The options used to subscribe for the event + * @returns - A Promise resolved with {@link LogsSubscription} object + */ +export type ContractBoundEvent = (options?: ContractEventOptions) => LogsSubscription; + +// To avoid circular dependency between types and encoding, declared these types here. +export type ContractEventsInterface< + Abi extends ContractAbi, + Events extends ContractEvents = ContractEvents, +> = { + [Name in keyof Events | 'allEvents']: ContractBoundEvent; +} & { + [key: string]: ContractBoundEvent; +}; + +// To avoid circular dependency between types and encoding, declared these types here. +export type ContractEventEmitterInterface = { + [EventAbi in FilterAbis< + Abi, + AbiFunctionFragment & { type: 'event' } + > as EventAbi['name']]: ContractEvent['Inputs']; +}; + +type EventParameters = Parameters[2]; + +const contractSubscriptions = { + logs: LogsSubscription, + newHeads: NewHeadsSubscription, + newBlockHeaders: NewHeadsSubscription, +}; + +/** + * The class designed to interact with smart contracts on the Ethereum blockchain. + */ +export class Contract + extends Web3Context + implements Web3EventEmitter> +{ + /** + * The options `object` for the contract instance. `from`, `gas` and `gasPrice` are used as fallback values when sending transactions. + * + * ```ts + * myContract.options; + * > { + * address: '0x1234567890123456789012345678901234567891', + * jsonInterface: [...], + * from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', + * gasPrice: '10000000000000', + * gas: 1000000 + * } + * + * myContract.options.from = '0x1234567890123456789012345678901234567891'; // default from address + * myContract.options.gasPrice = '20000000000000'; // default gas price in wei + * myContract.options.gas = 5000000; // provide as fallback always 5M gas + * ``` + */ + + public readonly options: ContractOptions; + + /** + * Set to true if you want contracts' defaults to sync with global defaults. + */ + public syncWithContext = false; + + private _errorsInterface!: AbiErrorFragment[]; + private _jsonInterface!: ContractAbiWithSignature; + private _address?: Address; + private _functions: Record< + string, + { + signature: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + method: ContractBoundMethod; + } + > = {}; + private readonly _overloadedMethodAbis: Map; + private _methods!: ContractMethodsInterface; + private _events!: ContractEventsInterface; + /** + * Set property to `data`, `input`, or `both` to change the property of the contract being sent to the + * RPC provider when using contract methods. + * Default is `input` + */ + private readonly _dataInputFill?: 'data' | 'input' | 'both'; + + private context?: Web3Context; + /** + * Creates a new contract instance with all its methods and events defined in its {@doclink glossary/json_interface | json interface} object. + * + * ```ts + * new web3.eth.Contract(jsonInterface[, address][, options]) + * ``` + * + * @param jsonInterface - The JSON interface for the contract to instantiate. + * @param address - The address of the smart contract to call. + * @param options - The options of the contract. Some are used as fallbacks for calls and transactions. + * @param context - The context of the contract used for customizing the behavior of the contract. + * @returns - The contract instance with all its methods and events. + * + * ```ts title="Example" + * var myContract = new web3.eth.Contract([...], '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', { + * from: '0x1234567890123456789012345678901234567891', // default from address + * gasPrice: '20000000000' // default gas price in wei, 20 gwei in this case + * }); + * ``` + * + * To use the type safe interface for these contracts you have to include the ABI definitions in your Typescript project and then declare these as `const`. + * + * ```ts title="Example" + * const myContractAbi = [....] as const; // ABI definitions + * const myContract = new web3.eth.Contract(myContractAbi, '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'); + * ``` + */ + public constructor( + jsonInterface: Abi, + context?: Web3ContractContext | Web3Context, + returnFormat?: DataFormat, + ); + public constructor( + jsonInterface: Abi, + address?: Address, + contextOrReturnFormat?: Web3ContractContext | Web3Context | DataFormat, + returnFormat?: DataFormat, + ); + public constructor( + jsonInterface: Abi, + options?: ContractInitOptions, + contextOrReturnFormat?: Web3ContractContext | Web3Context | DataFormat, + returnFormat?: DataFormat, + ); + public constructor( + jsonInterface: Abi, + address: Address | undefined, + options: ContractInitOptions, + contextOrReturnFormat?: Web3ContractContext | Web3Context | DataFormat, + returnFormat?: DataFormat, + ); + public constructor( + jsonInterface: Abi, + addressOrOptionsOrContext?: + | Address + | ContractInitOptions + | Web3ContractContext + | Web3Context, + optionsOrContextOrReturnFormat?: + | ContractInitOptions + | Web3ContractContext + | Web3Context + | DataFormat, + contextOrReturnFormat?: Web3ContractContext | Web3Context | DataFormat, + returnFormat?: DataFormat, + ) { + // eslint-disable-next-line no-nested-ternary + const options = isContractInitOptions(addressOrOptionsOrContext) + ? addressOrOptionsOrContext + : isContractInitOptions(optionsOrContextOrReturnFormat) + ? optionsOrContextOrReturnFormat + : undefined; + + let contractContext; + if (isWeb3ContractContext(addressOrOptionsOrContext)) { + contractContext = addressOrOptionsOrContext; + } else if (isWeb3ContractContext(optionsOrContextOrReturnFormat)) { + contractContext = optionsOrContextOrReturnFormat; + } else { + contractContext = contextOrReturnFormat; + } + + let provider; + if ( + typeof addressOrOptionsOrContext === 'object' && + 'provider' in addressOrOptionsOrContext + ) { + provider = addressOrOptionsOrContext.provider; + } else if ( + typeof optionsOrContextOrReturnFormat === 'object' && + 'provider' in optionsOrContextOrReturnFormat + ) { + provider = optionsOrContextOrReturnFormat.provider; + } else if ( + typeof contextOrReturnFormat === 'object' && + 'provider' in contextOrReturnFormat + ) { + provider = contextOrReturnFormat.provider; + } else { + provider = Contract.givenProvider; + } + + super({ + ...contractContext, + provider, + registeredSubscriptions: contractSubscriptions, + }); + if ( + !isNullish(options) && + !isNullish(options.data) && + !isNullish(options.input) && + this.config.contractDataInputFill !== 'both' + ) + throw new ContractTransactionDataAndInputError({ + data: options.data as HexString, + input: options.input as HexString, + }); + this._overloadedMethodAbis = new Map(); + + // eslint-disable-next-line no-nested-ternary + const returnDataFormat = isDataFormat(contextOrReturnFormat) + ? contextOrReturnFormat + : isDataFormat(optionsOrContextOrReturnFormat) + ? optionsOrContextOrReturnFormat + : returnFormat ?? DEFAULT_RETURN_FORMAT; + + const address = + typeof addressOrOptionsOrContext === 'string' ? addressOrOptionsOrContext : undefined; + + if (this.config.contractDataInputFill === 'both') { + this._dataInputFill = this.config.contractDataInputFill; + } else { + this._dataInputFill = + (options as ContractInitOptions)?.dataInputFill ?? + this.config.contractDataInputFill; + } + this._parseAndSetJsonInterface(jsonInterface, returnDataFormat); + + if (!isNullish(address)) { + this._parseAndSetAddress(address, returnDataFormat); + } + + this.options = { + address, + jsonInterface: this._jsonInterface, + gas: options?.gas ?? options?.gasLimit, + gasPrice: options?.gasPrice, + from: options?.from, + input: options?.input, + data: options?.data, + }; + + this.syncWithContext = (options as ContractInitOptions)?.syncWithContext ?? false; + if (contractContext instanceof Web3Context) { + this.subscribeToContextEvents(contractContext); + } + Object.defineProperty(this.options, 'address', { + set: (value: Address) => this._parseAndSetAddress(value, returnDataFormat), + get: () => this._address, + }); + + Object.defineProperty(this.options, 'jsonInterface', { + set: (value: ContractAbi) => this._parseAndSetJsonInterface(value, returnDataFormat), + get: () => this._jsonInterface, + }); + } + + /** + * Subscribe to an event. + * + * ```ts + * await myContract.events.MyEvent([options]) + * ``` + * + * There is a special event `allEvents` that can be used to subscribe all events. + * + * ```ts + * await myContract.events.allEvents([options]) + * ``` + * + * @returns - When individual event is accessed will returns {@link ContractBoundEvent} object + */ + public get events() { + return this._events; + } + + /** + * Creates a transaction object for that method, which then can be `called`, `send`, `estimated`, `createAccessList` , or `ABI encoded`. + * + * The methods of this smart contract are available through: + * + * The name: `myContract.methods.myMethod(123)` + * The name with parameters: `myContract.methods['myMethod(uint256)'](123)` + * The signature `myContract.methods['0x58cf5f10'](123)` + * + * This allows calling functions with same name but different parameters from the JavaScript contract object. + * + * \> The method signature does not provide a type safe interface, so we recommend to use method `name` instead. + * + * ```ts + * // calling a method + * const result = await myContract.methods.myMethod(123).call({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}); + * + * // or sending and using a promise + * const receipt = await myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}); + * + * // or sending and using the events + * const sendObject = myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}); + * sendObject.on('transactionHash', function(hash){ + * ... + * }); + * sendObject.on('receipt', function(receipt){ + * ... + * }); + * sendObject.on('confirmation', function(confirmationNumber, receipt){ + * ... + * }); + * sendObject.on('error', function(error, receipt) { + * ... + * }); + * ``` + * + * @returns - Either returns {@link PayableMethodObject} or {@link NonPayableMethodObject} based on the definitions of the {@doclink glossary/json_interface | json interface} of that contract. + */ + public get methods() { + return this._methods; + } + + /** + * Clones the current contract instance. This doesn't deploy contract on blockchain and only creates a local clone. + * + * @returns - The new contract instance. + * + * ```ts + * const contract1 = new eth.Contract(abi, address, {gasPrice: '12345678', from: fromAddress}); + * + * const contract2 = contract1.clone(); + * contract2.options.address = address2; + * + * (contract1.options.address !== contract2.options.address); + * > true + * ``` + */ + public clone() { + let newContract: Contract; + if (this.options.address) { + newContract = new Contract( + [...this._jsonInterface, ...this._errorsInterface] as unknown as Abi, + this.options.address, + { + gas: this.options.gas, + gasPrice: this.options.gasPrice, + from: this.options.from, + input: this.options.input, + data: this.options.data, + provider: this.currentProvider, + syncWithContext: this.syncWithContext, + dataInputFill: this._dataInputFill, + }, + this.getContextObject(), + ); + } else { + newContract = new Contract( + [...this._jsonInterface, ...this._errorsInterface] as unknown as Abi, + { + gas: this.options.gas, + gasPrice: this.options.gasPrice, + from: this.options.from, + input: this.options.input, + data: this.options.data, + provider: this.currentProvider, + syncWithContext: this.syncWithContext, + dataInputFill: this._dataInputFill, + }, + this.getContextObject(), + ); + } + if (this.context) newContract.subscribeToContextEvents(this.context); + + return newContract; + } + + /** + * Call this function to deploy the contract to the blockchain. After successful deployment the promise will resolve with a new contract instance. + * + * ```ts + * myContract.deploy({ + * input: '0x12345...', // data keyword can be used, too. If input is used, data will be ignored. + * arguments: [123, 'My String'] + * }) + * .send({ + * from: '0x1234567890123456789012345678901234567891', + * gas: 1500000, + * gasPrice: '30000000000000' + * }, function(error, transactionHash){ ... }) + * .on('error', function(error){ ... }) + * .on('transactionHash', function(transactionHash){ ... }) + * .on('receipt', function(receipt){ + * console.log(receipt.contractAddress) // contains the new contract address + * }) + * .on('confirmation', function(confirmationNumber, receipt){ ... }) + * .then(function(newContractInstance){ + * console.log(newContractInstance.options.address) // instance with the new contract address + * }); + * + * + * // When the data is already set as an option to the contract itself + * myContract.options.data = '0x12345...'; + * + * myContract.deploy({ + * arguments: [123, 'My String'] + * }) + * .send({ + * from: '0x1234567890123456789012345678901234567891', + * gas: 1500000, + * gasPrice: '30000000000000' + * }) + * .then(function(newContractInstance){ + * console.log(newContractInstance.options.address) // instance with the new contract address + * }); + * + * + * // Simply encoding + * myContract.deploy({ + * input: '0x12345...', + * arguments: [123, 'My String'] + * }) + * .encodeABI(); + * > '0x12345...0000012345678765432' + * + * + * // Gas estimation + * myContract.deploy({ + * input: '0x12345...', + * arguments: [123, 'My String'] + * }) + * .estimateGas(function(err, gas){ + * console.log(gas); + * }); + * ``` + * + * @returns - The transaction object + */ + public deploy(deployOptions?: { + /** + * The byte code of the contract. + */ + data?: HexString; + input?: HexString; + /** + * The arguments which get passed to the constructor on deployment. + */ + arguments?: ContractConstructorArgs; + }) { + let abi = this._jsonInterface.find(j => j.type === 'constructor') as AbiConstructorFragment; + if (!abi) { + abi = { + type: 'constructor', + inputs: [], + stateMutability: '', + } as AbiConstructorFragment; + } + + const _input = format( + { format: 'bytes' }, + deployOptions?.input ?? this.options.input, + DEFAULT_RETURN_FORMAT, + ); + + const _data = format( + { format: 'bytes' }, + deployOptions?.data ?? this.options.data, + DEFAULT_RETURN_FORMAT, + ); + + if ((!_input || _input.trim() === '0x') && (!_data || _data.trim() === '0x')) { + throw new Web3ContractError('contract creation without any data provided.'); + } + + const args = deployOptions?.arguments ?? []; + + const contractOptions: ContractOptions = { ...this.options, input: _input, data: _data }; + const deployData = _input ?? _data; + return { + arguments: args, + send: ( + options?: PayableTxOptions, + ): Web3PromiEvent< + Contract, + SendTransactionEvents + > => { + const modifiedOptions = { ...options }; + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return this._contractMethodDeploySend( + abi as AbiFunctionFragment, + args as unknown[], + modifiedOptions, + contractOptions, + ); + }, + estimateGas: async ( + options?: PayableCallOptions, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) => { + const modifiedOptions = { ...options }; + return this._contractMethodEstimateGas({ + abi: abi as AbiFunctionFragment, + params: args as unknown[], + returnFormat, + options: modifiedOptions, + contractOptions, + }); + }, + encodeABI: () => + encodeMethodABI( + abi as AbiFunctionFragment, + args as unknown[], + format({ format: 'bytes' }, deployData as Bytes, DEFAULT_RETURN_FORMAT), + ), + }; + } + + /** + * Gets past events for this contract. + * + * ```ts + * const events = await myContract.getPastEvents('MyEvent', { + * filter: {myIndexedParam: [20,23], myOtherIndexedParam: '0x123456789...'}, // Using an array means OR: e.g. 20 or 23 + * fromBlock: 0, + * toBlock: 'latest' + * }); + * + * > [{ + * returnValues: { + * myIndexedParam: 20, + * myOtherIndexedParam: '0x123456789...', + * myNonIndexParam: 'My String' + * }, + * raw: { + * data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', + * topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385'] + * }, + * event: 'MyEvent', + * signature: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', + * logIndex: 0, + * transactionIndex: 0, + * transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', + * blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', + * blockNumber: 1234, + * address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' + * },{ + * ... + * }] + * ``` + * + * @param eventName - The name of the event in the contract, or `allEvents` to get all events. + * @param filter - The filter options used to get events. + * @param returnFormat - Return format + * @returns - An array with the past event `Objects`, matching the given event name and filter. + */ + public async getPastEvents( + returnFormat?: ReturnFormat, + ): Promise<(string | EventLog)[]>; + public async getPastEvents( + eventName: keyof ContractEvents | 'allEvents' | 'ALLEVENTS', + returnFormat?: ReturnFormat, + ): Promise<(string | EventLog)[]>; + public async getPastEvents( + filter: Omit, + returnFormat?: ReturnFormat, + ): Promise<(string | EventLog)[]>; + public async getPastEvents( + eventName: keyof ContractEvents | 'allEvents' | 'ALLEVENTS', + filter: Omit, + returnFormat?: ReturnFormat, + ): Promise<(string | EventLog)[]>; + public async getPastEvents( + param1?: + | keyof ContractEvents + | 'allEvents' + | 'ALLEVENTS' + | Omit + | ReturnFormat, + param2?: Omit | ReturnFormat, + param3?: ReturnFormat, + ): Promise<(string | EventLog)[]> { + const eventName = typeof param1 === 'string' ? param1 : ALL_EVENTS; + + const options = + // eslint-disable-next-line no-nested-ternary + typeof param1 !== 'string' && !isDataFormat(param1) + ? param1 + : !isDataFormat(param2) + ? param2 + : {}; + + // eslint-disable-next-line no-nested-ternary + const returnFormat = isDataFormat(param1) + ? param1 + : isDataFormat(param2) + ? param2 + : param3 ?? DEFAULT_RETURN_FORMAT; + + const abi = + eventName === 'allEvents' || eventName === ALL_EVENTS + ? ALL_EVENTS_ABI + : (this._jsonInterface.find( + j => 'name' in j && j.name === eventName, + ) as AbiEventFragment & { signature: string }); + + if (!abi) { + throw new Web3ContractError(`Event ${eventName} not found.`); + } + + const { fromBlock, toBlock, topics, address } = encodeEventABI( + this.options, + abi, + options ?? {}, + ); + + const logs = await getLogs(this, { fromBlock, toBlock, topics, address }, returnFormat); + const decodedLogs = logs.map(log => + typeof log === 'string' + ? log + : decodeEventABI(abi, log as LogsInput, this._jsonInterface, returnFormat), + ); + + const filter = options?.filter ?? {}; + const filterKeys = Object.keys(filter); + + if (filterKeys.length > 0) { + return decodedLogs.filter(log => { + if (typeof log === 'string') return true; + + return filterKeys.every((key: string) => { + if (Array.isArray(filter[key])) { + return (filter[key] as Numbers[]).some( + (v: Numbers) => + String(log.returnValues[key]).toUpperCase() === + String(v).toUpperCase(), + ); + } + + const inputAbi = abi.inputs?.filter(input => input.name === key)[0]; + if (inputAbi?.indexed && inputAbi.type === 'string') { + const hashedIndexedString = keccak256(filter[key] as string); + if (hashedIndexedString === String(log.returnValues[key])) return true; + } + + return ( + String(log.returnValues[key]).toUpperCase() === + String(filter[key]).toUpperCase() + ); + }); + }); + } + + return decodedLogs; + } + + private _parseAndSetAddress(value?: Address, returnFormat: DataFormat = DEFAULT_RETURN_FORMAT) { + this._address = value + ? toChecksumAddress(format({ format: 'address' }, value, returnFormat)) + : value; + } + + private _parseAndSetJsonInterface( + abis: ContractAbi, + returnFormat: DataFormat = DEFAULT_RETURN_FORMAT, + ) { + this._functions = {}; + this._methods = {} as ContractMethodsInterface; + this._events = {} as ContractEventsInterface; + + let result: ContractAbi = []; + + const functionsAbi = abis.filter(abi => abi.type !== 'error'); + const errorsAbi = abis.filter(abi => + isAbiErrorFragment(abi), + ) as unknown as AbiErrorFragment[]; + + for (const a of functionsAbi) { + const abi: Mutable = { + ...a, + signature: '', + }; + + if (isAbiFunctionFragment(abi)) { + const methodName = jsonInterfaceMethodToString(abi); + const methodSignature = encodeFunctionSignature(methodName); + abi.signature = methodSignature; + + // make constant and payable backwards compatible + abi.constant = + abi.stateMutability === 'view' ?? + abi.stateMutability === 'pure' ?? + abi.constant; + + abi.payable = abi.stateMutability === 'payable' ?? abi.payable; + this._overloadedMethodAbis.set(abi.name, [ + ...(this._overloadedMethodAbis.get(abi.name) ?? []), + abi, + ]); + const abiFragment = this._overloadedMethodAbis.get(abi.name) ?? []; + const contractMethod = this._createContractMethod< + typeof abiFragment, + AbiErrorFragment + >(abiFragment, errorsAbi); + + this._functions[methodName] = { + signature: methodSignature, + method: contractMethod, + }; + + // We don't know a particular type of the Abi method so can't type check + this._methods[abi.name as keyof ContractMethodsInterface] = this._functions[ + methodName + ].method as never; + + // We don't know a particular type of the Abi method so can't type check + this._methods[methodName as keyof ContractMethodsInterface] = this._functions[ + methodName + ].method as never; + + // We don't know a particular type of the Abi method so can't type check + this._methods[methodSignature as keyof ContractMethodsInterface] = this + ._functions[methodName].method as never; + } else if (isAbiEventFragment(abi)) { + const eventName = jsonInterfaceMethodToString(abi); + const eventSignature = encodeEventSignature(eventName); + const event = this._createContractEvent(abi, returnFormat); + abi.signature = eventSignature; + + if (!(eventName in this._events) || abi.name === 'bound') { + // It's a private type and we don't want to expose it and no need to check + this._events[eventName as keyof ContractEventsInterface] = event as never; + } + // It's a private type and we don't want to expose it and no need to check + this._events[abi.name as keyof ContractEventsInterface] = event as never; + // It's a private type and we don't want to expose it and no need to check + this._events[eventSignature as keyof ContractEventsInterface] = event as never; + } + + result = [...result, abi]; + } + + this._events.allEvents = this._createContractEvent(ALL_EVENTS_ABI, returnFormat); + this._jsonInterface = [...result] as unknown as ContractAbiWithSignature; + this._errorsInterface = errorsAbi; + } + + // eslint-disable-next-line class-methods-use-this + private _getAbiParams(abi: AbiFunctionFragment, params: unknown[]): Array { + try { + return validatorUtils.transformJsonDataToAbiFormat(abi.inputs ?? [], params); + } catch (error) { + throw new Web3ContractError( + `Invalid parameters for method ${abi.name}: ${(error as Error).message}`, + ); + } + } + + private _createContractMethod( + abiArr: T, + errorsAbis: E[], + ): ContractBoundMethod { + const abi = abiArr[abiArr.length - 1]; + return (...params: unknown[]) => { + let abiParams!: Array; + const abis = this._overloadedMethodAbis.get(abi.name) ?? []; + let methodAbi: AbiFunctionFragment = abis[0]; + const internalErrorsAbis = errorsAbis; + + const arrayOfAbis: AbiFunctionFragment[] = abis.filter( + _abi => (_abi.inputs ?? []).length === params.length, + ); + + if (abis.length === 1 || arrayOfAbis.length === 0) { + abiParams = this._getAbiParams(methodAbi, params); + validator.validate(abi.inputs ?? [], abiParams); + } else { + const errors: Web3ValidationErrorObject[] = []; + + for (const _abi of arrayOfAbis) { + try { + abiParams = this._getAbiParams(_abi, params); + validator.validate( + _abi.inputs as unknown as ValidationSchemaInput, + abiParams, + ); + methodAbi = _abi; + break; + } catch (e) { + errors.push(e as Web3ValidationErrorObject); + } + } + if (errors.length === arrayOfAbis.length) { + throw new Web3ValidatorError(errors); + } + } + const methods = { + arguments: abiParams, + + call: async ( + options?: PayableCallOptions | NonPayableCallOptions, + block?: BlockNumberOrTag, + ) => + this._contractMethodCall( + methodAbi, + abiParams, + internalErrorsAbis, + options, + block, + ), + + send: (options?: PayableTxOptions | NonPayableTxOptions) => + this._contractMethodSend(methodAbi, abiParams, internalErrorsAbis, options), + + estimateGas: async ( + options?: PayableCallOptions | NonPayableCallOptions, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) => + this._contractMethodEstimateGas({ + abi: methodAbi, + params: abiParams, + returnFormat, + options, + }), + + encodeABI: () => encodeMethodABI(methodAbi, abiParams), + + createAccessList: async ( + options?: PayableCallOptions | NonPayableCallOptions, + block?: BlockNumberOrTag, + ) => + this._contractMethodCreateAccessList( + methodAbi, + abiParams, + internalErrorsAbis, + options, + block, + ), + }; + + if (methodAbi.stateMutability === 'payable') { + return methods as PayableMethodObject< + ContractOverloadedMethodInputs, + ContractOverloadedMethodOutputs + >; + } + return methods as NonPayableMethodObject< + ContractOverloadedMethodInputs, + ContractOverloadedMethodOutputs + >; + }; + } + + private async _contractMethodCall( + abi: AbiFunctionFragment, + params: unknown[], + errorsAbi: AbiErrorFragment[], + options?: Options, + block?: BlockNumberOrTag, + ) { + const tx = getEthTxCallParams({ + abi, + params, + options: { + ...options, + dataInputFill: this._dataInputFill, + }, + contractOptions: { + ...this.options, + from: this.options.from ?? this.config.defaultAccount, + }, + }); + try { + const result = await call(this, tx, block, DEFAULT_RETURN_FORMAT); + return decodeMethodReturn(abi, result); + } catch (error: unknown) { + if (error instanceof ContractExecutionError) { + // this will parse the error data by trying to decode the ABI error inputs according to EIP-838 + decodeContractErrorData(errorsAbi, error.innerError); + } + throw error; + } + } + + private async _contractMethodCreateAccessList< + Options extends PayableCallOptions | NonPayableCallOptions, + >( + abi: AbiFunctionFragment, + params: unknown[], + errorsAbi: AbiErrorFragment[], + options?: Options, + block?: BlockNumberOrTag, + ) { + const tx = getCreateAccessListParams({ + abi, + params, + options: { ...options, dataInputFill: this.config.contractDataInputFill }, + contractOptions: { + ...this.options, + from: this.options.from ?? this.config.defaultAccount, + }, + }); + + try { + return createAccessList(this, tx, block, DEFAULT_RETURN_FORMAT); + } catch (error: unknown) { + if (error instanceof ContractExecutionError) { + // this will parse the error data by trying to decode the ABI error inputs according to EIP-838 + decodeContractErrorData(errorsAbi, error.innerError); + } + throw error; + } + } + + private _contractMethodSend( + abi: AbiFunctionFragment, + params: unknown[], + errorsAbi: AbiErrorFragment[], + options?: Options, + contractOptions?: ContractOptions, + ) { + let modifiedContractOptions = contractOptions ?? this.options; + modifiedContractOptions = { + ...modifiedContractOptions, + input: undefined, + from: modifiedContractOptions.from ?? this.defaultAccount ?? undefined, + }; + const tx = getSendTxParams({ + abi, + params, + options: { ...options, dataInputFill: this.config.contractDataInputFill }, + contractOptions: modifiedContractOptions, + }); + const transactionToSend = sendTransaction(this, tx, DEFAULT_RETURN_FORMAT, { + // TODO Should make this configurable by the user + checkRevertBeforeSending: false, + contractAbi: this._jsonInterface, + }); + + // eslint-disable-next-line no-void + void transactionToSend.on('error', (error: unknown) => { + if (error instanceof ContractExecutionError) { + // this will parse the error data by trying to decode the ABI error inputs according to EIP-838 + decodeContractErrorData(errorsAbi, error.innerError); + } + }); + return transactionToSend; + } + + private _contractMethodDeploySend( + abi: AbiFunctionFragment, + params: unknown[], + options?: Options, + contractOptions?: ContractOptions, + ) { + let modifiedContractOptions = contractOptions ?? this.options; + modifiedContractOptions = { + ...modifiedContractOptions, + from: modifiedContractOptions.from ?? this.defaultAccount ?? undefined, + }; + const tx = getSendTxParams({ + abi, + params, + options: { ...options, dataInputFill: this.config.contractDataInputFill }, + contractOptions: modifiedContractOptions, + }); + return sendTransaction(this, tx, DEFAULT_RETURN_FORMAT, { + transactionResolver: receipt => { + if (receipt.status === BigInt(0)) { + throw new Web3ContractError("code couldn't be stored", receipt); + } + + const newContract = this.clone(); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + newContract.options.address = receipt.contractAddress; + return newContract; + }, + contractAbi: this._jsonInterface, + // TODO Should make this configurable by the user + checkRevertBeforeSending: false, + }); + } + + private async _contractMethodEstimateGas< + Options extends PayableCallOptions | NonPayableCallOptions, + ReturnFormat extends DataFormat, + >({ + abi, + params, + returnFormat, + options, + contractOptions, + }: { + abi: AbiFunctionFragment; + params: unknown[]; + returnFormat: ReturnFormat; + options?: Options; + contractOptions?: ContractOptions; + }) { + const tx = getEstimateGasParams({ + abi, + params, + options: { ...options, dataInputFill: this.config.contractDataInputFill }, + contractOptions: contractOptions ?? this.options, + }); + return estimateGas(this, tx, BlockTags.LATEST, returnFormat); + } + + // eslint-disable-next-line class-methods-use-this + private _createContractEvent( + abi: AbiEventFragment & { signature: HexString }, + returnFormat: DataFormat = DEFAULT_RETURN_FORMAT, + ): ContractBoundEvent { + return (...params: unknown[]) => { + const { topics, fromBlock } = encodeEventABI( + this.options, + abi, + params[0] as EventParameters, + ); + const sub = new LogsSubscription( + { + address: this.options.address, + topics, + abi, + jsonInterface: this._jsonInterface, + }, + { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + subscriptionManager: this.subscriptionManager as Web3SubscriptionManager< + unknown, + any + >, + returnFormat, + }, + ); + if (!isNullish(fromBlock)) { + // emit past events when fromBlock is defined + this.getPastEvents(abi.name, { fromBlock, topics }, returnFormat) + .then(logs => { + logs.forEach(log => sub.emit('data', log as EventLog)); + }) + .catch((error: Error) => { + sub.emit( + 'error', + new SubscriptionError('Failed to get past events.', error), + ); + }); + } + this.subscriptionManager?.addSubscription(sub).catch((error: Error) => { + sub.emit('error', new SubscriptionError('Failed to subscribe.', error)); + }); + + return sub; + }; + } + + protected subscribeToContextEvents(context: T): void { + // eslint-disable-next-line @typescript-eslint/no-this-alias + const contractThis = this; + this.context = context; + + if (contractThis.syncWithContext) { + context.on(Web3ConfigEvent.CONFIG_CHANGE, event => { + contractThis.setConfig({ [event.name]: event.newValue }); + }); + } + } +} diff --git a/packages/web3-eth-contract/src/encoding.ts b/packages/web3-eth-contract/src/encoding.ts new file mode 100644 index 00000000000..aa06db45ae8 --- /dev/null +++ b/packages/web3-eth-contract/src/encoding.ts @@ -0,0 +1,174 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { format, isNullish, keccak256 } from 'web3-utils'; + +import { + AbiConstructorFragment, + AbiEventFragment, + AbiFunctionFragment, + Filter, + HexString, + Topic, + FMT_NUMBER, + FMT_BYTES, + ContractOptions, +} from 'web3-types'; + +import { + decodeParameters, + encodeEventSignature, + encodeFunctionSignature, + encodeParameter, + encodeParameters, + isAbiConstructorFragment, + jsonInterfaceMethodToString, +} from 'web3-eth-abi'; + +import { blockSchema, ALL_EVENTS } from 'web3-eth'; +import { Web3ContractError } from 'web3-errors'; + +export { decodeEventABI } from 'web3-eth'; + +type Writeable = { -readonly [P in keyof T]: T[P] }; +export const encodeEventABI = ( + { address }: ContractOptions, + event: AbiEventFragment & { signature: string }, + options?: Filter, +) => { + const topics = options?.topics; + const filter = options?.filter ?? {}; + const opts: Writeable = {}; + + if (!isNullish(options?.fromBlock)) { + opts.fromBlock = format(blockSchema.properties.number, options?.fromBlock, { + number: FMT_NUMBER.HEX, + bytes: FMT_BYTES.HEX, + }); + } + if (!isNullish(options?.toBlock)) { + opts.toBlock = format(blockSchema.properties.number, options?.toBlock, { + number: FMT_NUMBER.HEX, + bytes: FMT_BYTES.HEX, + }); + } + + if (topics && Array.isArray(topics)) { + opts.topics = [...topics] as Topic[]; + } else { + opts.topics = []; + // add event signature + if (event && !event.anonymous && ![ALL_EVENTS, 'allEvents'].includes(event.name)) { + opts.topics.push( + event.signature ?? encodeEventSignature(jsonInterfaceMethodToString(event)), + ); + } + + // add event topics (indexed arguments) + if (![ALL_EVENTS, 'allEvents'].includes(event.name) && event.inputs) { + for (const input of event.inputs) { + if (!input.indexed) { + continue; + } + + const value = filter[input.name]; + if (!value) { + // eslint-disable-next-line no-null/no-null + opts.topics.push(null); + continue; + } + + // TODO: https://github.com/ethereum/web3.js/issues/344 + // TODO: deal properly with components + if (Array.isArray(value)) { + opts.topics.push(value.map(v => encodeParameter(input.type, v))); + } else if (input.type === 'string') { + opts.topics.push(keccak256(value as string)); + } else { + opts.topics.push(encodeParameter(input.type, value)); + } + } + } + } + + if (!opts.topics.length) delete opts.topics; + + if (address) { + opts.address = address.toLowerCase(); + } + + return opts; +}; + +export const encodeMethodABI = ( + abi: AbiFunctionFragment | AbiConstructorFragment, + args: unknown[], + deployData?: HexString, +) => { + const inputLength = Array.isArray(abi.inputs) ? abi.inputs.length : 0; + if (inputLength !== args.length) { + throw new Web3ContractError( + `The number of arguments is not matching the methods required number. You need to pass ${inputLength} arguments.`, + ); + } + + const params = encodeParameters(Array.isArray(abi.inputs) ? abi.inputs : [], args).replace( + '0x', + '', + ); + + if (isAbiConstructorFragment(abi)) { + if (!deployData) + throw new Web3ContractError( + 'The contract has no contract data option set. This is necessary to append the constructor parameters.', + ); + + if (!deployData.startsWith('0x')) { + return `0x${deployData}${params}`; + } + + return `${deployData}${params}`; + } + + return `${encodeFunctionSignature(abi)}${params}`; +}; + +export const decodeMethodReturn = (abi: AbiFunctionFragment, returnValues?: HexString) => { + // If it was constructor then we need to return contract address + if (abi.type === 'constructor') { + return returnValues; + } + + if (!returnValues) { + // Using "null" value intentionally to match legacy behavior + // eslint-disable-next-line no-null/no-null + return null; + } + + const value = returnValues.length >= 2 ? returnValues.slice(2) : returnValues; + if (!abi.outputs) { + // eslint-disable-next-line no-null/no-null + return null; + } + const result = decodeParameters([...abi.outputs], value); + + if (result.__length__ === 1) { + return result[0]; + } + + return result; +}; diff --git a/packages/web3-eth-contract/src/index.js b/packages/web3-eth-contract/src/index.js deleted file mode 100644 index fd46f9be6c5..00000000000 --- a/packages/web3-eth-contract/src/index.js +++ /dev/null @@ -1,1034 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * - * To initialize a contract use: - * - * var Contract = require('web3-eth-contract'); - * Contract.setProvider('ws://localhost:8546'); - * var contract = new Contract(abi, address, ...); - * - * @author Fabian Vogelsteller - * @date 2017 - */ - - -"use strict"; - - -var _ = require('underscore'); -var core = require('web3-core'); -var Method = require('web3-core-method'); -var utils = require('web3-utils'); -var Subscription = require('web3-core-subscriptions').subscription; -var formatters = require('web3-core-helpers').formatters; -var errors = require('web3-core-helpers').errors; -var promiEvent = require('web3-core-promievent'); -var abi = require('web3-eth-abi'); - - -/** - * Should be called to create new contract instance - * - * @method Contract - * @constructor - * @param {Array} jsonInterface - * @param {String} address - * @param {Object} options - */ -var Contract = function Contract(jsonInterface, address, options) { - var _this = this, - args = Array.prototype.slice.call(arguments); - - if(!(this instanceof Contract)) { - throw new Error('Please use the "new" keyword to instantiate a web3.eth.Contract() object!'); - } - - this.setProvider = function () { - core.packageInit(_this, arguments); - - _this.clearSubscriptions = _this._requestManager.clearSubscriptions; - }; - - // sets _requestmanager - core.packageInit(this, [this.constructor]); - - this.clearSubscriptions = this._requestManager.clearSubscriptions; - - if(!jsonInterface || !(Array.isArray(jsonInterface))) { - throw errors.ContractMissingABIError(); - } - - // create the options object - this.options = {}; - - var lastArg = args[args.length - 1]; - if(_.isObject(lastArg) && !_.isArray(lastArg)) { - options = lastArg; - - this.options = _.extend(this.options, this._getOrSetDefaultOptions(options)); - if(_.isObject(address)) { - address = null; - } - } - - // set address - Object.defineProperty(this.options, 'address', { - set: function(value){ - if(value) { - _this._address = utils.toChecksumAddress(formatters.inputAddressFormatter(value)); - } - }, - get: function(){ - return _this._address; - }, - enumerable: true - }); - - // add method and event signatures, when the jsonInterface gets set - Object.defineProperty(this.options, 'jsonInterface', { - set: function(value){ - _this.methods = {}; - _this.events = {}; - - _this._jsonInterface = value.map(function(method) { - var func, - funcName; - - // make constant and payable backwards compatible - method.constant = (method.stateMutability === "view" || method.stateMutability === "pure" || method.constant); - method.payable = (method.stateMutability === "payable" || method.payable); - - - if (method.name) { - funcName = utils._jsonInterfaceMethodToString(method); - } - - - // function - if (method.type === 'function') { - method.signature = abi.encodeFunctionSignature(funcName); - func = _this._createTxObject.bind({ - method: method, - parent: _this - }); - - - // add method only if not one already exists - if(!_this.methods[method.name]) { - _this.methods[method.name] = func; - } else { - var cascadeFunc = _this._createTxObject.bind({ - method: method, - parent: _this, - nextMethod: _this.methods[method.name] - }); - _this.methods[method.name] = cascadeFunc; - } - - // definitely add the method based on its signature - _this.methods[method.signature] = func; - - // add method by name - _this.methods[funcName] = func; - - - // event - } else if (method.type === 'event') { - method.signature = abi.encodeEventSignature(funcName); - var event = _this._on.bind(_this, method.signature); - - // add method only if not already exists - if(!_this.events[method.name] || _this.events[method.name].name === 'bound ') - _this.events[method.name] = event; - - // definitely add the method based on its signature - _this.events[method.signature] = event; - - // add event by name - _this.events[funcName] = event; - } - - - return method; - }); - - // add allEvents - _this.events.allEvents = _this._on.bind(_this, 'allevents'); - - return _this._jsonInterface; - }, - get: function(){ - return _this._jsonInterface; - }, - enumerable: true - }); - - // get default account from the Class - var defaultAccount = this.constructor.defaultAccount; - var defaultBlock = this.constructor.defaultBlock || 'latest'; - - Object.defineProperty(this, 'handleRevert', { - get: function () { - if (_this.options.handleRevert === false || _this.options.handleRevert === true) { - return _this.options.handleRevert; - } - - return this.constructor.handleRevert; - }, - set: function (val) { - _this.options.handleRevert = val; - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultCommon', { - get: function () { - return _this.options.common || this.constructor.defaultCommon; - }, - set: function (val) { - _this.options.common = val; - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultHardfork', { - get: function () { - return _this.options.hardfork || this.constructor.defaultHardfork; - }, - set: function (val) { - _this.options.hardfork = val; - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultChain', { - get: function () { - return _this.options.chain || this.constructor.defaultChain; - }, - set: function (val) { - _this.options.chain = val; - }, - enumerable: true - }); - Object.defineProperty(this, 'transactionPollingTimeout', { - get: function () { - if (_this.options.transactionPollingTimeout === 0) { - return _this.options.transactionPollingTimeout; - } - - return _this.options.transactionPollingTimeout || this.constructor.transactionPollingTimeout; - }, - set: function (val) { - _this.options.transactionPollingTimeout = val; - }, - enumerable: true - }); - Object.defineProperty(this, 'transactionConfirmationBlocks', { - get: function () { - if (_this.options.transactionConfirmationBlocks === 0) { - return _this.options.transactionConfirmationBlocks; - } - - return _this.options.transactionConfirmationBlocks || this.constructor.transactionConfirmationBlocks; - }, - set: function (val) { - _this.options.transactionConfirmationBlocks = val; - }, - enumerable: true - }); - Object.defineProperty(this, 'transactionBlockTimeout', { - get: function () { - if (_this.options.transactionBlockTimeout === 0) { - return _this.options.transactionBlockTimeout; - } - - return _this.options.transactionBlockTimeout || this.constructor.transactionBlockTimeout; - }, - set: function (val) { - _this.options.transactionBlockTimeout = val; - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultAccount', { - get: function () { - return defaultAccount; - }, - set: function (val) { - if(val) { - defaultAccount = utils.toChecksumAddress(formatters.inputAddressFormatter(val)); - } - - return val; - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultBlock', { - get: function () { - return defaultBlock; - }, - set: function (val) { - defaultBlock = val; - - return val; - }, - enumerable: true - }); - - // properties - this.methods = {}; - this.events = {}; - - this._address = null; - this._jsonInterface = []; - - // set getter/setter properties - this.options.address = address; - this.options.jsonInterface = jsonInterface; - -}; - -/** - * Sets the new provider, creates a new requestManager, registers the "data" listener on the provider and sets the - * accounts module for the Contract class. - * - * @method setProvider - * - * @param {string|provider} provider - * @param {Accounts} accounts - * - * @returns void - */ -Contract.setProvider = function(provider, accounts) { - // Contract.currentProvider = provider; - core.packageInit(this, [provider]); - - this._ethAccounts = accounts; -}; - - -/** - * Get the callback and modify the array if necessary - * - * @method _getCallback - * @param {Array} args - * @return {Function} the callback - */ -Contract.prototype._getCallback = function getCallback(args) { - if (args && _.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Checks that no listener with name "newListener" or "removeListener" is added. - * - * @method _checkListener - * @param {String} type - * @param {String} event - * @return {Object} the contract instance - */ -Contract.prototype._checkListener = function(type, event){ - if(event === type) { - throw errors.ContractReservedEventError(type); - } -}; - - -/** - * Use default values, if options are not available - * - * @method _getOrSetDefaultOptions - * @param {Object} options the options gived by the user - * @return {Object} the options with gaps filled by defaults - */ -Contract.prototype._getOrSetDefaultOptions = function getOrSetDefaultOptions(options) { - var gasPrice = options.gasPrice ? String(options.gasPrice): null; - var from = options.from ? utils.toChecksumAddress(formatters.inputAddressFormatter(options.from)) : null; - - options.data = options.data || this.options.data; - - options.from = from || this.options.from; - options.gasPrice = gasPrice || this.options.gasPrice; - options.gas = options.gas || options.gasLimit || this.options.gas; - - // TODO replace with only gasLimit? - delete options.gasLimit; - - return options; -}; - - -/** - * Should be used to encode indexed params and options to one final object - * - * @method _encodeEventABI - * @param {Object} event - * @param {Object} options - * @return {Object} everything combined together and encoded - */ -Contract.prototype._encodeEventABI = function (event, options) { - options = options || {}; - var filter = options.filter || {}, - result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - // use given topics - if(_.isArray(options.topics)) { - result.topics = options.topics; - - // create topics based on filter - } else { - - result.topics = []; - - // add event signature - if (event && !event.anonymous && event.name !== 'ALLEVENTS') { - result.topics.push(event.signature); - } - - // add event topics (indexed arguments) - if (event.name !== 'ALLEVENTS') { - var indexedTopics = event.inputs.filter(function (i) { - return i.indexed === true; - }).map(function (i) { - var value = filter[i.name]; - if (!value) { - return null; - } - - // TODO: https://github.com/ethereum/web3.js/issues/344 - // TODO: deal properly with components - - if (_.isArray(value)) { - return value.map(function (v) { - return abi.encodeParameter(i.type, v); - }); - } - return abi.encodeParameter(i.type, value); - }); - - result.topics = result.topics.concat(indexedTopics); - } - - if(!result.topics.length) - delete result.topics; - } - - if(this.options.address) { - result.address = this.options.address.toLowerCase(); - } - - return result; -}; - -/** - * Should be used to decode indexed params and options - * - * @method _decodeEventABI - * @param {Object} data - * @return {Object} result object with decoded indexed && not indexed params - */ -Contract.prototype._decodeEventABI = function (data) { - var event = this; - - data.data = data.data || ''; - data.topics = data.topics || []; - var result = formatters.outputLogFormatter(data); - - // if allEvents get the right event - if(event.name === 'ALLEVENTS') { - event = event.jsonInterface.find(function (intf) { - return (intf.signature === data.topics[0]); - }) || {anonymous: true}; - } - - // create empty inputs if none are present (e.g. anonymous events on allEvents) - event.inputs = event.inputs || []; - - // Handle case where an event signature shadows the current ABI with non-identical - // arg indexing. If # of topics doesn't match, event is anon. - if (!event.anonymous){ - let indexedInputs = 0; - event.inputs.forEach(input => input.indexed ? indexedInputs++ : null); - - if (indexedInputs > 0 && (data.topics.length !== indexedInputs + 1)){ - event = { - anonymous: true, - inputs: [] - }; - } - } - - var argTopics = event.anonymous ? data.topics : data.topics.slice(1); - - result.returnValues = abi.decodeLog(event.inputs, data.data, argTopics); - delete result.returnValues.__length__; - - // add name - result.event = event.name; - - // add signature - result.signature = (event.anonymous || !data.topics[0]) ? null : data.topics[0]; - - // move the data and topics to "raw" - result.raw = { - data: result.data, - topics: result.topics - }; - delete result.data; - delete result.topics; - - - return result; -}; - -/** - * Encodes an ABI for a method, including signature or the method. - * Or when constructor encodes only the constructor parameters. - * - * @method _encodeMethodABI - * @param {Mixed} args the arguments to encode - * @param {String} the encoded ABI - */ -Contract.prototype._encodeMethodABI = function _encodeMethodABI() { - var methodSignature = this._method.signature, - args = this.arguments || []; - - var signature = false, - paramsABI = this._parent.options.jsonInterface.filter(function (json) { - return ((methodSignature === 'constructor' && json.type === methodSignature) || - ((json.signature === methodSignature || json.signature === methodSignature.replace('0x','') || json.name === methodSignature) && json.type === 'function')); - }).map(function (json) { - var inputLength = (_.isArray(json.inputs)) ? json.inputs.length : 0; - - if (inputLength !== args.length) { - throw new Error('The number of arguments is not matching the methods required number. You need to pass '+ inputLength +' arguments.'); - } - - if (json.type === 'function') { - signature = json.signature; - } - return _.isArray(json.inputs) ? json.inputs : []; - }).map(function (inputs) { - return abi.encodeParameters(inputs, args).replace('0x',''); - })[0] || ''; - - // return constructor - if(methodSignature === 'constructor') { - if(!this._deployData) - throw new Error('The contract has no contract data option set. This is necessary to append the constructor parameters.'); - - if(!this._deployData.startsWith('0x')) { - this._deployData = '0x' + this._deployData; - } - - return this._deployData + paramsABI; - - } - - // return method - var returnValue = (signature) ? signature + paramsABI : paramsABI; - - if(!returnValue) { - throw new Error('Couldn\'t find a matching contract method named "'+ this._method.name +'".'); - } - - return returnValue; -}; - - -/** - * Decode method return values - * - * @method _decodeMethodReturn - * @param {Array} outputs - * @param {String} returnValues - * @return {Object} decoded output return values - */ -Contract.prototype._decodeMethodReturn = function (outputs, returnValues) { - if (!returnValues) { - return null; - } - - returnValues = returnValues.length >= 2 ? returnValues.slice(2) : returnValues; - var result = abi.decodeParameters(outputs, returnValues); - - if (result.__length__ === 1) { - return result[0]; - } - - delete result.__length__; - return result; -}; - - -/** - * Deploys a contract and fire events based on its state: transactionHash, receipt - * - * All event listeners will be removed, once the last possible event is fired ("error", or "receipt") - * - * @method deploy - * @param {Object} options - * @param {Function} callback - * @return {Object} EventEmitter possible events are "error", "transactionHash" and "receipt" - */ -Contract.prototype.deploy = function(options, callback){ - - options = options || {}; - - options.arguments = options.arguments || []; - options = this._getOrSetDefaultOptions(options); - - - // throw error, if no "data" is specified - if(!options.data) { - if (typeof callback === 'function'){ - return callback(errors.ContractMissingDeployDataError()); - } - throw errors.ContractMissingDeployDataError(); - } - - var constructor = _.find(this.options.jsonInterface, function (method) { - return (method.type === 'constructor'); - }) || {}; - constructor.signature = 'constructor'; - - return this._createTxObject.apply({ - method: constructor, - parent: this, - deployData: options.data, - _ethAccounts: this.constructor._ethAccounts - }, options.arguments); - -}; - -/** - * Gets the event signature and outputFormatters - * - * @method _generateEventOptions - * @param {Object} event - * @param {Object} options - * @param {Function} callback - * @return {Object} the event options object - */ -Contract.prototype._generateEventOptions = function() { - var args = Array.prototype.slice.call(arguments); - - // get the callback - var callback = this._getCallback(args); - - // get the options - var options = (_.isObject(args[args.length - 1])) ? args.pop() : {}; - - var eventName = (_.isString(args[0])) ? args[0] : 'allevents'; - var event = (eventName.toLowerCase() === 'allevents') ? { - name: 'ALLEVENTS', - jsonInterface: this.options.jsonInterface - } : this.options.jsonInterface.find(function (json) { - return (json.type === 'event' && (json.name === eventName || json.signature === '0x'+ eventName.replace('0x',''))); - }); - - if (!event) { - throw errors.ContractEventDoesNotExistError(eventName); - } - - if (!utils.isAddress(this.options.address)) { - throw errors.ContractNoAddressDefinedError(); - } - - return { - params: this._encodeEventABI(event, options), - event: event, - callback: callback - }; -}; - -/** - * Adds event listeners and creates a subscription, and remove it once its fired. - * - * @method clone - * @return {Object} the event subscription - */ -Contract.prototype.clone = function() { - return new this.constructor(this.options.jsonInterface, this.options.address, this.options); -}; - - -/** - * Adds event listeners and creates a subscription, and remove it once its fired. - * - * @method once - * @param {String} event - * @param {Object} options - * @param {Function} callback - * @return {Object} the event subscription - */ -Contract.prototype.once = function(event, options, callback) { - var args = Array.prototype.slice.call(arguments); - - // get the callback - callback = this._getCallback(args); - - if (!callback) { - throw errors.ContractOnceRequiresCallbackError(); - } - - // don't allow fromBlock - if (options) - delete options.fromBlock; - - // don't return as once shouldn't provide "on" - this._on(event, options, function (err, res, sub) { - sub.unsubscribe(); - if(_.isFunction(callback)){ - callback(err, res, sub); - } - }); - - return undefined; -}; - -/** - * Adds event listeners and creates a subscription. - * - * @method _on - * - * @param {String} event - * @param {Object} options - * @param {Function} callback - * - * @return {Object} the event subscription - */ -Contract.prototype._on = function(){ - var subOptions = this._generateEventOptions.apply(this, arguments); - - if (subOptions.params && subOptions.params.toBlock) { - delete subOptions.params.toBlock; - console.warn('Invalid option: toBlock. Use getPastEvents for specific range.'); - } - - // prevent the event "newListener" and "removeListener" from being overwritten - this._checkListener('newListener', subOptions.event.name); - this._checkListener('removeListener', subOptions.event.name); - - // TODO check if listener already exists? and reuse subscription if options are the same. - - // create new subscription - var subscription = new Subscription({ - subscription: { - params: 1, - inputFormatter: [formatters.inputLogFormatter], - outputFormatter: this._decodeEventABI.bind(subOptions.event), - // DUBLICATE, also in web3-eth - subscriptionHandler: function (output) { - if(output.removed) { - this.emit('changed', output); - } else { - this.emit('data', output); - } - - if (_.isFunction(this.callback)) { - this.callback(null, output, this); - } - } - }, - type: 'eth', - requestManager: this._requestManager - }); - - subscription.subscribe('logs', subOptions.params, subOptions.callback || function () {}); - - return subscription; -}; - -/** - * Get past events from contracts - * - * @method getPastEvents - * @param {String} event - * @param {Object} options - * @param {Function} callback - * @return {Object} the promievent - */ -Contract.prototype.getPastEvents = function(){ - var subOptions = this._generateEventOptions.apply(this, arguments); - - var getPastLogs = new Method({ - name: 'getPastLogs', - call: 'eth_getLogs', - params: 1, - inputFormatter: [formatters.inputLogFormatter], - outputFormatter: this._decodeEventABI.bind(subOptions.event) - }); - getPastLogs.setRequestManager(this._requestManager); - var call = getPastLogs.buildCall(); - - getPastLogs = null; - - return call(subOptions.params, subOptions.callback); -}; - - -/** - * returns the an object with call, send, estimate functions - * - * @method _createTxObject - * @returns {Object} an object with functions to call the methods - */ -Contract.prototype._createTxObject = function _createTxObject(){ - var args = Array.prototype.slice.call(arguments); - var txObject = {}; - - if(this.method.type === 'function') { - - txObject.call = this.parent._executeMethod.bind(txObject, 'call'); - txObject.call.request = this.parent._executeMethod.bind(txObject, 'call', true); // to make batch requests - - } - - txObject.send = this.parent._executeMethod.bind(txObject, 'send'); - txObject.send.request = this.parent._executeMethod.bind(txObject, 'send', true); // to make batch requests - txObject.encodeABI = this.parent._encodeMethodABI.bind(txObject); - txObject.estimateGas = this.parent._executeMethod.bind(txObject, 'estimate'); - - if (args && this.method.inputs && args.length !== this.method.inputs.length) { - if (this.nextMethod) { - return this.nextMethod.apply(null, args); - } - throw errors.InvalidNumberOfParams(args.length, this.method.inputs.length, this.method.name); - } - - txObject.arguments = args || []; - txObject._method = this.method; - txObject._parent = this.parent; - txObject._ethAccounts = this.parent.constructor._ethAccounts || this._ethAccounts; - - if(this.deployData) { - txObject._deployData = this.deployData; - } - - return txObject; -}; - - -/** - * Generates the options for the execute call - * - * @method _processExecuteArguments - * @param {Array} args - * @param {Promise} defer - */ -Contract.prototype._processExecuteArguments = function _processExecuteArguments(args, defer) { - var processedArgs = {}; - - processedArgs.type = args.shift(); - - // get the callback - processedArgs.callback = this._parent._getCallback(args); - - // get block number to use for call - if(processedArgs.type === 'call' && args[args.length - 1] !== true && (_.isString(args[args.length - 1]) || isFinite(args[args.length - 1]))) - processedArgs.defaultBlock = args.pop(); - - // get the options - processedArgs.options = (_.isObject(args[args.length - 1])) ? args.pop() : {}; - - // get the generateRequest argument for batch requests - processedArgs.generateRequest = (args[args.length - 1] === true)? args.pop() : false; - - processedArgs.options = this._parent._getOrSetDefaultOptions(processedArgs.options); - processedArgs.options.data = this.encodeABI(); - - // add contract address - if(!this._deployData && !utils.isAddress(this._parent.options.address)) - throw errors.ContractNoAddressDefinedError(); - - if(!this._deployData) - processedArgs.options.to = this._parent.options.address; - - // return error, if no "data" is specified - if(!processedArgs.options.data) - return utils._fireError(new Error('Couldn\'t find a matching contract method, or the number of parameters is wrong.'), defer.eventEmitter, defer.reject, processedArgs.callback); - - return processedArgs; -}; - -/** - * Executes a call, transact or estimateGas on a contract function - * - * @method _executeMethod - * @param {String} type the type this execute function should execute - * @param {Boolean} makeRequest if true, it simply returns the request parameters, rather than executing it - */ -Contract.prototype._executeMethod = function _executeMethod(){ - var _this = this, - args = this._parent._processExecuteArguments.call(this, Array.prototype.slice.call(arguments), defer), - defer = promiEvent((args.type !== 'send')), - ethAccounts = _this.constructor._ethAccounts || _this._ethAccounts; - - // simple return request for batch requests - if(args.generateRequest) { - - var payload = { - params: [formatters.inputCallFormatter.call(this._parent, args.options)], - callback: args.callback - }; - - if(args.type === 'call') { - payload.params.push(formatters.inputDefaultBlockNumberFormatter.call(this._parent, args.defaultBlock)); - payload.method = 'eth_call'; - payload.format = this._parent._decodeMethodReturn.bind(null, this._method.outputs); - } else { - payload.method = 'eth_sendTransaction'; - } - - return payload; - - } - - switch (args.type) { - case 'estimate': - - var estimateGas = (new Method({ - name: 'estimateGas', - call: 'eth_estimateGas', - params: 1, - inputFormatter: [formatters.inputCallFormatter], - outputFormatter: utils.hexToNumber, - requestManager: _this._parent._requestManager, - accounts: ethAccounts, // is eth.accounts (necessary for wallet signing) - defaultAccount: _this._parent.defaultAccount, - defaultBlock: _this._parent.defaultBlock - })).createFunction(); - - return estimateGas(args.options, args.callback); - - case 'call': - - // TODO check errors: missing "from" should give error on deploy and send, call ? - - var call = (new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter], - // add output formatter for decoding - outputFormatter: function (result) { - return _this._parent._decodeMethodReturn(_this._method.outputs, result); - }, - requestManager: _this._parent._requestManager, - accounts: ethAccounts, // is eth.accounts (necessary for wallet signing) - defaultAccount: _this._parent.defaultAccount, - defaultBlock: _this._parent.defaultBlock, - handleRevert: _this._parent.handleRevert, - abiCoder: abi - })).createFunction(); - - return call(args.options, args.defaultBlock, args.callback); - - case 'send': - - // return error, if no "from" is specified - if(!utils.isAddress(args.options.from)) { - return utils._fireError(errors.ContractNoFromAddressDefinedError(), defer.eventEmitter, defer.reject, args.callback); - } - - if (_.isBoolean(this._method.payable) && !this._method.payable && args.options.value && args.options.value > 0) { - return utils._fireError(new Error('Can not send value to non-payable contract method or constructor'), defer.eventEmitter, defer.reject, args.callback); - } - - - // make sure receipt logs are decoded - var extraFormatters = { - receiptFormatter: function (receipt) { - if (_.isArray(receipt.logs)) { - - // decode logs - var events = _.map(receipt.logs, function(log) { - return _this._parent._decodeEventABI.call({ - name: 'ALLEVENTS', - jsonInterface: _this._parent.options.jsonInterface - }, log); - }); - - // make log names keys - receipt.events = {}; - var count = 0; - events.forEach(function (ev) { - if (ev.event) { - // if > 1 of the same event, don't overwrite any existing events - if (receipt.events[ev.event]) { - if (Array.isArray(receipt.events[ ev.event ])) { - receipt.events[ ev.event ].push(ev); - } else { - receipt.events[ev.event] = [receipt.events[ev.event], ev]; - } - } else { - receipt.events[ ev.event ] = ev; - } - } else { - receipt.events[count] = ev; - count++; - } - }); - - delete receipt.logs; - } - return receipt; - }, - contractDeployFormatter: function (receipt) { - var newContract = _this._parent.clone(); - newContract.options.address = receipt.contractAddress; - return newContract; - } - }; - - var sendTransaction = (new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter], - requestManager: _this._parent._requestManager, - accounts: _this.constructor._ethAccounts || _this._ethAccounts, // is eth.accounts (necessary for wallet signing) - defaultAccount: _this._parent.defaultAccount, - defaultBlock: _this._parent.defaultBlock, - transactionBlockTimeout: _this._parent.transactionBlockTimeout, - transactionConfirmationBlocks: _this._parent.transactionConfirmationBlocks, - transactionPollingTimeout: _this._parent.transactionPollingTimeout, - defaultCommon: _this._parent.defaultCommon, - defaultChain: _this._parent.defaultChain, - defaultHardfork: _this._parent.defaultHardfork, - handleRevert: _this._parent.handleRevert, - extraFormatters: extraFormatters, - abiCoder: abi - })).createFunction(); - - return sendTransaction(args.options, args.callback); - - default: - throw new Error('Method "' + args.type + '" not implemented.'); - - } - - -}; - -module.exports = Contract; diff --git a/packages/web3-eth-contract/src/index.ts b/packages/web3-eth-contract/src/index.ts new file mode 100644 index 00000000000..22937531980 --- /dev/null +++ b/packages/web3-eth-contract/src/index.ts @@ -0,0 +1,51 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * The `web3.eth.Contract` object makes it easy to interact with smart contracts on the Ethereum blockchain. + * When you create a new contract object you give it the JSON interface of the respective smart contract and + * web3 will auto convert all calls into low level ABI calls over RPC for you. + * This allows you to interact with smart contracts as if they were JavaScript objects. + * + * To use it standalone: + * + * ```ts + * const Contract = require('web3-eth-contract'); + * + * // set provider for all later instances to use + * Contract.setProvider('ws://localhost:8546'); + * + * const contract = new Contract(jsonInterface, address); + * + * contract.methods.somFunc().send({from: ....}) + * .on('receipt', function(){ + * ... + * }); + * ``` + */ +/** + * This comment _supports3_ [Markdown](https://marked.js.org/) + */ +import { Contract } from './contract.js'; + +export * from './encoding.js'; + +export * from './contract.js'; +export * from './log_subscription.js'; +export * from './types.js'; + +export default Contract; diff --git a/packages/web3-eth-contract/src/log_subscription.ts b/packages/web3-eth-contract/src/log_subscription.ts new file mode 100644 index 00000000000..6ace1e17478 --- /dev/null +++ b/packages/web3-eth-contract/src/log_subscription.ts @@ -0,0 +1,164 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + AbiEventFragment, + LogsInput, + HexString, + Topic, + DataFormat, + EventLog, + ContractAbiWithSignature, +} from 'web3-types'; +import { Web3RequestManager, Web3Subscription, Web3SubscriptionManager } from 'web3-core'; +import { decodeEventABI } from 'web3-eth'; + +/** + * LogSubscription to be used to subscribe to events logs. + * + * Following events are supported and can be accessed with either {@link LogsSubscription.once} or ${@link LogsSubscription.on} methods. + * + * - **connected**: Emitted when the subscription is connected. + * - **data**: Fires on each incoming event with the event object as argument. + * - **changed**: Fires on each event which was removed from the blockchain. The event will have the additional property `removed: true`. + * - **error**: Fires on each error. + * + * ```ts + * const subscription = await myContract.events.MyEvent({ + * filter: {myIndexedParam: [20,23], myOtherIndexedParam: '0x123456789...'}, // Using an array means OR: e.g. 20 or 23 + * fromBlock: 0 + * }); + * + * subscription.on("connected", function(subscriptionId){ + * console.log(subscriptionId); + * }); + * + * subscription.on('data', function(event){ + * console.log(event); // same results as the optional callback above + * }); + * + * subscription.on('changed', function(event){ + * // remove event from local database + * }) + * + * subscription.on('error', function(error, receipt) { // If the transaction was rejected by the network with a receipt, the second parameter will be the receipt. + * ... + * }); + * + * // event output example + * > { + * returnValues: { + * myIndexedParam: 20, + * myOtherIndexedParam: '0x123456789...', + * myNonIndexParam: 'My String' + * }, + * raw: { + * data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', + * topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385'] + * }, + * event: 'MyEvent', + * signature: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', + * logIndex: 0, + * transactionIndex: 0, + * transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', + * blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', + * blockNumber: 1234, + * address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' + * } + * ``` + */ +export class LogsSubscription extends Web3Subscription< + { + data: EventLog; + changed: EventLog & { removed: true }; + }, + // eslint-disable-next-line @typescript-eslint/ban-types + { address?: HexString; topics?: (Topic | Topic[] | null)[]; abi: AbiEventFragment } +> { + /** + * Address of tye contract + */ + public readonly address?: HexString; + + /** + * The list of topics subscribed + */ + // eslint-disable-next-line @typescript-eslint/ban-types + public readonly topics?: (Topic | Topic[] | null)[]; + + /** + * The {@doclink glossary/json_interface | JSON Interface} of the event. + */ + public readonly abi: AbiEventFragment & { signature: HexString }; + + public readonly jsonInterface: ContractAbiWithSignature; + + public constructor( + args: { + address?: HexString; + // eslint-disable-next-line @typescript-eslint/ban-types + topics?: (Topic | Topic[] | null)[]; + abi: AbiEventFragment & { signature: HexString }; + jsonInterface: ContractAbiWithSignature; + }, + options: { subscriptionManager: Web3SubscriptionManager; returnFormat?: DataFormat }, + ); + /** + * @deprecated This constructor overloading should not be used + */ + public constructor( + args: { + address?: HexString; + // eslint-disable-next-line @typescript-eslint/ban-types + topics?: (Topic | Topic[] | null)[]; + abi: AbiEventFragment & { signature: HexString }; + jsonInterface: ContractAbiWithSignature; + }, + options: { requestManager: Web3RequestManager; returnFormat?: DataFormat }, + ); + public constructor( + args: { + address?: HexString; + // eslint-disable-next-line @typescript-eslint/ban-types + topics?: (Topic | Topic[] | null)[]; + abi: AbiEventFragment & { signature: HexString }; + jsonInterface: ContractAbiWithSignature; + }, + options: ( + | { subscriptionManager: Web3SubscriptionManager } + | { requestManager: Web3RequestManager } + ) & { + returnFormat?: DataFormat; + }, + ) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + super(args, options as any); + + this.address = args.address; + this.topics = args.topics; + this.abi = args.abi; + this.jsonInterface = args.jsonInterface; + } + + protected _buildSubscriptionParams() { + return ['logs', { address: this.address, topics: this.topics }]; + } + + protected formatSubscriptionResult(data: EventLog) { + return decodeEventABI(this.abi, data as LogsInput, this.jsonInterface, super.returnFormat); + } +} diff --git a/packages/web3-eth-contract/src/types.ts b/packages/web3-eth-contract/src/types.ts new file mode 100644 index 00000000000..fc66826b2e6 --- /dev/null +++ b/packages/web3-eth-contract/src/types.ts @@ -0,0 +1,439 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3ContextInitOptions, Web3PromiEvent } from 'web3-core'; +import { + AccessListResult, + BlockNumberOrTag, + EthExecutionAPI, + HexString, + Numbers, + TransactionReceipt, + NonPayableCallOptions, + PayableCallOptions, + DataFormat, + DEFAULT_RETURN_FORMAT, + FormatType, +} from 'web3-types'; +import { NewHeadsSubscription, SendTransactionEvents } from 'web3-eth'; +import { LogsSubscription } from './log_subscription.js'; + +export type NonPayableTxOptions = NonPayableCallOptions; +export type PayableTxOptions = PayableCallOptions; +export { ContractAbiWithSignature, EventLog, ContractOptions } from 'web3-types'; + +export interface ContractEventOptions { + /** + * Let you filter events by indexed parameters, e.g. `{filter: {myNumber: [12,13]}}` means all events where `myNumber` is `12` or `13`. + */ + filter?: Record; + /** + * The block number (greater than or equal to) from which to get events on. Pre-defined block numbers as `earliest`, `latest`, `pending`, `safe` or `finalized` can also be used. For specific range use {@link Contract.getPastEvents}. + */ + fromBlock?: BlockNumberOrTag; + /** + * This allows to manually set the topics for the event filter. If given the filter property and event signature, (topic[0]) will not be set automatically. Each topic can also be a nested array of topics that behaves as `or` operation between the given nested topics. + */ + topics?: string[]; +} + +export interface NonPayableMethodObject { + arguments: Inputs; + /** + * This will call a method and execute its smart contract method in the EVM without sending any transaction. Note calling cannot alter the smart contract state. + * + * ```ts + * // using the promise + * const result = await myContract.methods.myMethod(123).call({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}); + * + * // MULTI-ARGUMENT RETURN: + * // Solidity + * contract MyContract { + * function myFunction() returns(uint256 myNumber, string myString) { + * return (23456, "Hello!%"); + * } + * } + * + * // web3.js + * var MyContract = new web3.eth.Contract(abi, address); + * const result = MyContract.methods.myFunction().call() + * console.log(result) + * > Result { + * myNumber: '23456', + * myString: 'Hello!%', + * 0: '23456', // these are here as fallbacks if the name is not know or given + * 1: 'Hello!%' + * } + * + * + * // SINGLE-ARGUMENT RETURN: + * // Solidity + * contract MyContract { + * function myFunction() returns(string myString) { + * return "Hello!%"; + * } + * } + * + * // web3.js + * const MyContract = new web3.eth.Contract(abi, address); + * const result = await MyContract.methods.myFunction().call(); + * console.log(result); + * > "Hello!%" + * ``` + * + * @param tx - The options used for calling. + * @param block - If you pass this parameter it will not use the default block set with contract.defaultBlock. Pre-defined block numbers as `earliest`, `latest`, `pending`, `safe` or `finalized can also be used. Useful for requesting data from or replaying transactions in past blocks. + * @returns - The return value(s) of the smart contract method. If it returns a single value, it’s returned as is. If it has multiple return values they are returned as an object with properties and indices. + */ + + call( + tx?: NonPayableCallOptions, + block?: BlockNumberOrTag, + ): Promise; + + /** + * This will send a transaction to the smart contract and execute its method. Note this can alter the smart contract state. + * + * ```ts + * await myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}); + * + * const receipt = await myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}); + * + * + * // using the event emitter + * const sendObj = myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}) + * sendObj.on('transactionHash', function(hash){ + * ... + * }); + * + * sendObj.on('confirmation', function(confirmationNumber, receipt){ + * ... + * }); + * + * sendObj.on('receipt', function(receipt){ + * // receipt example + * console.log(receipt); + * > { + * "transactionHash": "0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b", + * "transactionIndex": 0, + * "blockHash": "0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46", + * "blockNumber": 3, + * "contractAddress": "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", + * "cumulativeGasUsed": 314159, + * "gasUsed": 30234, + * "events": { + * "MyEvent": { + * returnValues: { + * myIndexedParam: 20, + * myOtherIndexedParam: '0x123456789...', + * myNonIndexParam: 'My String' + * }, + * raw: { + * data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', + * topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385'] + * }, + * event: 'MyEvent', + * signature: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', + * logIndex: 0, + * transactionIndex: 0, + * transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', + * blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', + * blockNumber: 1234, + * address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' + * }, + * "MyOtherEvent": { + * ... + * }, + * "MyMultipleEvent":[{...}, {...}] // If there are multiple of the same event, they will be in an array + * } + * } + * }); + * + * sendObj.on('error', function(error, receipt) { // If the transaction was rejected by the network with a receipt, the second parameter will be the receipt. + * ... + * }); + * ``` + * + * @param tx - The options used for sending. + * @returns - Returns a {@link PromiEvent} resolved with transaction receipt. + */ + send( + tx?: NonPayableTxOptions, + ): Web3PromiEvent< + FormatType, + SendTransactionEvents + >; + + /** + * Returns the amount of gas consumed by executing the method locally without creating a new transaction on the blockchain. + * The returned amount can be used as a gas estimate for executing the transaction publicly. The actual gas used can be + * different when sending the transaction later, as the state of the smart contract can be different at that time. + * + * ```ts + * const gasAmount = await myContract.methods.myMethod(123).estimateGas({gas: 5000000}); + * if(gasAmount == 5000000) { + * console.log('Method ran out of gas'); + * } + * ``` + * + * @param options - The options used for calling + * @param returnFormat - The data format you want the output in. + * @returns - The gas amount estimated. + */ + estimateGas( + options?: NonPayableCallOptions, + returnFormat?: ReturnFormat, + ): Promise>; + + /** + * Encodes the ABI for this method. The resulting hex string is 32-bit function signature hash plus the passed parameters in Solidity tightly packed format. + * This can be used to send a transaction, call a method, or pass it into another smart contract’s method as arguments. + * Set the data field on `web3.eth.sendTransaction` options as the encodeABI() result and it is the same as calling the contract method with `contract.myMethod.send()`. + * + * Some use cases for encodeABI() include: preparing a smart contract transaction for a multi signature wallet, + * working with offline wallets and cold storage and creating transaction payload for complex smart contract proxy calls. + * + * @returns - The encoded ABI byte code to send via a transaction or call. + */ + encodeABI(): string; + + /** + * This method generates an access list for a transaction. You must specify a `from` address and `gas` if it’s not specified in options. + * + * @param options - The options used for createAccessList. + * @param block - If you pass this parameter it will not use the default block set with contract.defaultBlock. Pre-defined block numbers as `earliest`, `latest`, `pending`, `safe` or `finalized can also be used. Useful for requesting data from or replaying transactions in past blocks. + * @returns The returned data of the createAccessList, e.g. The generated access list for transaction. + * + * ```ts + * const result = await MyContract.methods.myFunction().createAccessList(); + * console.log(result); + * + * > { + * "accessList": [ + * { + * "address": "0x15859bdf5aff2080a9968f6a410361e9598df62f", + * "storageKeys": [ + * "0x0000000000000000000000000000000000000000000000000000000000000000" + * ] + * } + * ], + * "gasUsed": "0x7671" + * } + * ``` + */ + createAccessList( + tx?: NonPayableCallOptions, + block?: BlockNumberOrTag, + ): Promise; +} + +export interface PayableMethodObject { + arguments: Inputs; + /** + * Will call a method and execute its smart contract method in the EVM without sending any transaction. Note calling cannot alter the smart contract state. + * + * ```ts + * // using the promise + * const result = await myContract.methods.myMethod(123).call({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}); + * + * // MULTI-ARGUMENT RETURN: + * // Solidity + * contract MyContract { + * function myFunction() returns(uint256 myNumber, string myString) { + * return (23456, "Hello!%"); + * } + * } + * + * // web3.js + * var MyContract = new web3.eth.Contract(abi, address); + * const result = MyContract.methods.myFunction().call() + * console.log(result) + * > Result { + * myNumber: '23456', + * myString: 'Hello!%', + * 0: '23456', // these are here as fallbacks if the name is not know or given + * 1: 'Hello!%' + * } + * + * + * // SINGLE-ARGUMENT RETURN: + * // Solidity + * contract MyContract { + * function myFunction() returns(string myString) { + * return "Hello!%"; + * } + * } + * + * // web3.js + * const MyContract = new web3.eth.Contract(abi, address); + * const result = await MyContract.methods.myFunction().call(); + * console.log(result); + * > "Hello!%" + * ``` + * + * @param tx - The options used for calling. + * @param block - If you pass this parameter it will not use the default block set with contract.defaultBlock. Pre-defined block numbers as `earliest`, `latest`, `pending`, `safe` or `finalized can also be used. Useful for requesting data from or replaying transactions in past blocks. + * @returns - The return value(s) of the smart contract method. If it returns a single value, it’s returned as is. If it has multiple return values they are returned as an object with properties and indices. + */ + call( + tx?: PayableCallOptions, + block?: BlockNumberOrTag, + ): Promise; + + /** + * Will send a transaction to the smart contract and execute its method. Note this can alter the smart contract state. + * + * ```ts + * await myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}); + * + * const receipt = await myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}); + * + * + * // using the event emitter + * const sendObj = myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}) + * sendObj.on('transactionHash', function(hash){ + * ... + * }); + * + * sendObj.on('confirmation', function(confirmationNumber, receipt){ + * ... + * }); + * + * sendObj.on('receipt', function(receipt){ + * // receipt example + * console.log(receipt); + * > { + * "transactionHash": "0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b", + * "transactionIndex": 0, + * "blockHash": "0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46", + * "blockNumber": 3, + * "contractAddress": "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", + * "cumulativeGasUsed": 314159, + * "gasUsed": 30234, + * "events": { + * "MyEvent": { + * returnValues: { + * myIndexedParam: 20, + * myOtherIndexedParam: '0x123456789...', + * myNonIndexParam: 'My String' + * }, + * raw: { + * data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', + * topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385'] + * }, + * event: 'MyEvent', + * signature: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', + * logIndex: 0, + * transactionIndex: 0, + * transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', + * blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', + * blockNumber: 1234, + * address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' + * }, + * "MyOtherEvent": { + * ... + * }, + * "MyMultipleEvent":[{...}, {...}] // If there are multiple of the same event, they will be in an array + * } + * } + * }); + * + * sendObj.on('error', function(error, receipt) { // If the transaction was rejected by the network with a receipt, the second parameter will be the receipt. + * ... + * }); + * ``` + * + * @param tx - The options used for sending. + * @returns - Returns a {@link PromiEvent} object resolved with transaction receipt. + */ + send( + tx?: PayableTxOptions, + ): Web3PromiEvent< + FormatType, + SendTransactionEvents + >; + + /** + * Returns the amount of gas consumed by executing the method locally without creating a new transaction on the blockchain. + * The returned amount can be used as a gas estimate for executing the transaction publicly. The actual gas used can be + * different when sending the transaction later, as the state of the smart contract can be different at that time. + * + * ```ts + * const gasAmount = await myContract.methods.myMethod(123).estimateGas({gas: 5000000}); + * if(gasAmount == 5000000) { + * console.log('Method ran out of gas'); + * } + * ``` + * + * @param options - The options used for calling + * @param returnFormat - The data format you want the output in. + * @returns - The gas amount estimated. + */ + estimateGas( + options?: PayableCallOptions, + returnFormat?: ReturnFormat, + ): Promise>; + + /** + * Encodes the ABI for this method. The resulting hex string is 32-bit function signature hash plus the passed parameters in Solidity tightly packed format. + * This can be used to send a transaction, call a method, or pass it into another smart contract’s method as arguments. + * Set the data field on `web3.eth.sendTransaction` options as the encodeABI() result and it is the same as calling the contract method with `contract.myMethod.send()`. + * + * Some use cases for encodeABI() include: preparing a smart contract transaction for a multi signature wallet, + * working with offline wallets and cold storage and creating transaction payload for complex smart contract proxy calls. + * + * @returns - The encoded ABI byte code to send via a transaction or call. + */ + encodeABI(): HexString; + + /** + * This method generates an access list for a transaction. You must specify a `from` address and `gas` if it’s not specified in options. + * + * @param options - The options used for createAccessList. + * @param block - If you pass this parameter it will not use the default block set with contract.defaultBlock. Pre-defined block numbers as `earliest`, `latest`, `pending`, `safe` or `finalized can also be used. Useful for requesting data from or replaying transactions in past blocks. + * @returns The returned data of the createAccessList, e.g. The generated access list for transaction. + * + * ```ts + * const result = await MyContract.methods.myFunction().createAccessList(); + * console.log(result); + * + * > { + * "accessList": [ + * { + * "address": "0x15859bdf5aff2080a9968f6a410361e9598df62f", + * "storageKeys": [ + * "0x0000000000000000000000000000000000000000000000000000000000000000" + * ] + * } + * ], + * "gasUsed": "0x7671" + * } + *``` + */ + createAccessList(tx?: PayableCallOptions, block?: BlockNumberOrTag): Promise; +} + +export type Web3ContractContext = Partial< + Web3ContextInitOptions< + EthExecutionAPI, + { + logs: typeof LogsSubscription; + newHeads: typeof NewHeadsSubscription; + newBlockHeaders: typeof NewHeadsSubscription; + } + > +>; diff --git a/packages/web3-eth-contract/src/utils.ts b/packages/web3-eth-contract/src/utils.ts new file mode 100644 index 00000000000..2cbe4a49715 --- /dev/null +++ b/packages/web3-eth-contract/src/utils.ts @@ -0,0 +1,227 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3ContractError } from 'web3-errors'; +import { + TransactionForAccessList, + AbiFunctionFragment, + TransactionWithSenderAPI, + TransactionCall, + HexString, + Address, + NonPayableCallOptions, + PayableCallOptions, + ContractInitOptions, + ContractOptions, +} from 'web3-types'; +import { isNullish, mergeDeep } from 'web3-utils'; +import { encodeMethodABI } from './encoding.js'; +import { Web3ContractContext } from './types.js'; + +const dataInputEncodeMethodHelper = ( + txParams: TransactionCall | TransactionForAccessList, + abi: AbiFunctionFragment, + params: unknown[], + dataInputFill?: 'data' | 'input' | 'both', +): { data?: HexString; input?: HexString } => { + const tx: { data?: HexString; input?: HexString } = {}; + if (!isNullish(txParams.data) || dataInputFill === 'both') { + tx.data = encodeMethodABI(abi, params, (txParams.data ?? txParams.input) as HexString); + } + if (!isNullish(txParams.input) || dataInputFill === 'both') { + tx.input = encodeMethodABI(abi, params, (txParams.input ?? txParams.data) as HexString); + } + // if input and data is empty, use web3config default + if (isNullish(tx.input) && isNullish(tx.data)) { + tx[dataInputFill as 'data' | 'input'] = encodeMethodABI(abi, params); + } + + return { data: tx.data as HexString, input: tx.input as HexString }; +}; + +export const getSendTxParams = ({ + abi, + params, + options, + contractOptions, +}: { + abi: AbiFunctionFragment; + params: unknown[]; + options?: (PayableCallOptions | NonPayableCallOptions) & { + input?: HexString; + data?: HexString; + to?: Address; + dataInputFill?: 'input' | 'data' | 'both'; + }; + contractOptions: ContractOptions; +}): TransactionCall => { + const deploymentCall = + options?.input ?? options?.data ?? contractOptions.input ?? contractOptions.data; + if (!deploymentCall && !options?.to && !contractOptions.address) { + throw new Web3ContractError('Contract address not specified'); + } + + if (!options?.from && !contractOptions.from) { + throw new Web3ContractError('Contract "from" address not specified'); + } + let txParams = mergeDeep( + { + to: contractOptions.address, + gas: contractOptions.gas, + gasPrice: contractOptions.gasPrice, + from: contractOptions.from, + input: contractOptions.input, + maxPriorityFeePerGas: contractOptions.maxPriorityFeePerGas, + maxFeePerGas: contractOptions.maxFeePerGas, + data: contractOptions.data, + }, + options as unknown as Record, + ) as unknown as TransactionCall; + const dataInput = dataInputEncodeMethodHelper(txParams, abi, params, options?.dataInputFill); + txParams = { ...txParams, data: dataInput.data, input: dataInput.input }; + + return txParams; +}; + +export const getEthTxCallParams = ({ + abi, + params, + options, + contractOptions, +}: { + abi: AbiFunctionFragment; + params: unknown[]; + options?: (PayableCallOptions | NonPayableCallOptions) & { + to?: Address; + dataInputFill?: 'input' | 'data' | 'both'; + }; + contractOptions: ContractOptions; +}): TransactionCall => { + if (!options?.to && !contractOptions.address) { + throw new Web3ContractError('Contract address not specified'); + } + let txParams = mergeDeep( + { + to: contractOptions.address, + gas: contractOptions.gas, + gasPrice: contractOptions.gasPrice, + from: contractOptions.from, + input: contractOptions.input, + maxPriorityFeePerGas: contractOptions.maxPriorityFeePerGas, + maxFeePerGas: contractOptions.maxFeePerGas, + data: contractOptions.data, + }, + options as unknown as Record, + ) as unknown as TransactionCall; + + const dataInput = dataInputEncodeMethodHelper(txParams, abi, params, options?.dataInputFill); + txParams = { ...txParams, data: dataInput.data, input: dataInput.input }; + + return txParams; +}; + +export const getEstimateGasParams = ({ + abi, + params, + options, + contractOptions, +}: { + abi: AbiFunctionFragment; + params: unknown[]; + options?: (PayableCallOptions | NonPayableCallOptions) & { + dataInputFill?: 'input' | 'data' | 'both'; + }; + contractOptions: ContractOptions; +}): Partial => { + let txParams = mergeDeep( + { + to: contractOptions.address, + gas: contractOptions.gas, + gasPrice: contractOptions.gasPrice, + from: contractOptions.from, + input: contractOptions.input, + data: contractOptions.data, + }, + options as unknown as Record, + ) as unknown as TransactionCall; + + const dataInput = dataInputEncodeMethodHelper(txParams, abi, params, options?.dataInputFill); + txParams = { ...txParams, data: dataInput.data, input: dataInput.input }; + + return txParams as TransactionWithSenderAPI; +}; + +export const isContractInitOptions = (options: unknown): options is ContractInitOptions => + typeof options === 'object' && + !isNullish(options) && + [ + 'input', + 'data', + 'from', + 'gas', + 'gasPrice', + 'gasLimit', + 'address', + 'jsonInterface', + 'syncWithContext', + 'dataInputFill', + ].some(key => key in options); + +export const isWeb3ContractContext = (options: unknown): options is Web3ContractContext => + typeof options === 'object' && !isNullish(options) && !isContractInitOptions(options); + +export const getCreateAccessListParams = ({ + abi, + params, + options, + contractOptions, +}: { + abi: AbiFunctionFragment; + params: unknown[]; + options?: (PayableCallOptions | NonPayableCallOptions) & { + to?: Address; + dataInputFill?: 'input' | 'data' | 'both'; + }; + contractOptions: ContractOptions; +}): TransactionForAccessList => { + if (!options?.to && !contractOptions.address) { + throw new Web3ContractError('Contract address not specified'); + } + + if (!options?.from && !contractOptions.from) { + throw new Web3ContractError('Contract "from" address not specified'); + } + + let txParams = mergeDeep( + { + to: contractOptions.address, + gas: contractOptions.gas, + gasPrice: contractOptions.gasPrice, + from: contractOptions.from, + input: contractOptions.input, + maxPriorityFeePerGas: contractOptions.maxPriorityFeePerGas, + maxFeePerGas: contractOptions.maxFeePerGas, + data: contractOptions.data, + }, + options as unknown as Record, + ) as unknown as TransactionForAccessList; + + const dataInput = dataInputEncodeMethodHelper(txParams, abi, params, options?.dataInputFill); + txParams = { ...txParams, data: dataInput.data, input: dataInput.input }; + + return txParams; +}; diff --git a/packages/web3-eth-contract/test/.eslintrc.js b/packages/web3-eth-contract/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-eth-contract/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth-contract/test/config/jest.config.js b/packages/web3-eth-contract/test/config/jest.config.js new file mode 100644 index 00000000000..c8c21e06e6a --- /dev/null +++ b/packages/web3-eth-contract/test/config/jest.config.js @@ -0,0 +1,43 @@ +module.exports = { + globals: { + 'ts-jest': { + tsconfig: './test/tsconfig.json', + }, + }, + rootDir: '../..', + testMatch: ['/test/**/?(*.)+(spec|test).+(ts|tsx|js)'], + setupFilesAfterEnv: ['/test/config/setup.js'], + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + verbose: false, + collectCoverage: false, + coverageReporters: ['json'], + coverageDirectory: '.coverage', + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, +}; diff --git a/packages/web3-eth-contract/test/config/setup.js b/packages/web3-eth-contract/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-eth-contract/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-eth-contract/test/fixtures/MyContract.json b/packages/web3-eth-contract/test/fixtures/MyContract.json new file mode 120000 index 00000000000..cdd501bfcbd --- /dev/null +++ b/packages/web3-eth-contract/test/fixtures/MyContract.json @@ -0,0 +1 @@ +../../../../fixtures/build/MyContract.json \ No newline at end of file diff --git a/packages/web3-eth-contract/test/fixtures/MyContract.ts b/packages/web3-eth-contract/test/fixtures/MyContract.ts new file mode 120000 index 00000000000..3cd9f98ecc1 --- /dev/null +++ b/packages/web3-eth-contract/test/fixtures/MyContract.ts @@ -0,0 +1 @@ +../../../../fixtures/build/MyContract.ts \ No newline at end of file diff --git a/packages/web3-eth-contract/test/fixtures/SimpleOverloaded.ts b/packages/web3-eth-contract/test/fixtures/SimpleOverloaded.ts new file mode 100644 index 00000000000..d4a9a9515d8 --- /dev/null +++ b/packages/web3-eth-contract/test/fixtures/SimpleOverloaded.ts @@ -0,0 +1,183 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const SimpleOverloadedAbi = [ + { + inputs: [], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'numToAdd', + type: 'uint256', + }, + { + internalType: 'string', + name: '_someString', + type: 'string', + }, + ], + name: 'getSecret', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'getSecret', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'numToAdd', + type: 'uint256', + }, + ], + name: 'getSecret', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'deadline', + type: 'uint256', + }, + { + internalType: 'bytes[]', + name: 'datas', + type: 'bytes[]', + }, + ], + name: 'multicall', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes[]', + name: 'datas', + type: 'bytes[]', + }, + ], + name: 'multicall', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'secret', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'numToAdd', + type: 'uint256', + }, + { + internalType: 'string', + name: '_someString', + type: 'string', + }, + ], + name: 'setSecret', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'numToAdd', + type: 'uint256', + }, + ], + name: 'setSecret', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'setSecret', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'someString', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] as const; + +export const SimpleOverloadedBytecode = + '608060405234801561001057600080fd5b50602a600081905550610da5806100286000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638d17664d116100665780638d17664d14610146578063ac9650d814610176578063b8bf4de714610192578063d1efd30d1461019c578063e7a96f6d146101ba5761009e565b806301a27378146100a35780632687b697146100d45780633b4dbf8b146100f05780635ae401dc1461010c5780635b9fdc3014610128575b600080fd5b6100bd60048036038101906100b89190610540565b6101d8565b6040516100cb92919061063f565b60405180910390f35b6100ee60048036038101906100e99190610540565b61021b565b005b61010a6004803603810190610105919061066f565b61024a565b005b610126600480360381019061012191906106f2565b610265565b005b610130610328565b60405161013d9190610752565b60405180910390f35b610160600480360381019061015b919061066f565b610331565b60405161016d9190610752565b60405180910390f35b610190600480360381019061018b919061076d565b610348565b005b61019a6103fd565b005b6101a4610407565b6040516101b19190610752565b60405180910390f35b6101c261040d565b6040516101cf91906107ba565b60405180910390f35b60006060846000546101ea919061080b565b6001858560405160200161020093929190610976565b60405160208183030381529060405291509150935093915050565b8260008082825461022c919061080b565b92505081905550818160019182610244929190610b6d565b50505050565b8060008082825461025b919061080b565b9250508190555050565b8242111561027257600080fd5b60005b82829050811015610322573073ffffffffffffffffffffffffffffffffffffffff168383838181106102aa576102a9610c3d565b5b90506020028101906102bc9190610c7b565b6040516102ca929190610d0e565b6000604051808303816000865af19150503d8060008114610307576040519150601f19603f3d011682016040523d82523d6000602084013e61030c565b606091505b505050808061031a90610d27565b915050610275565b50505050565b60008054905090565b600081600054610341919061080b565b9050919050565b60005b828290508110156103f8573073ffffffffffffffffffffffffffffffffffffffff168383838181106103805761037f610c3d565b5b90506020028101906103929190610c7b565b6040516103a0929190610d0e565b6000604051808303816000865af19150503d80600081146103dd576040519150601f19603f3d011682016040523d82523d6000602084013e6103e2565b606091505b50505080806103f090610d27565b91505061034b565b505050565b602a600081905550565b60005481565b6001805461041a9061086e565b80601f01602080910402602001604051908101604052809291908181526020018280546104469061086e565b80156104935780601f1061046857610100808354040283529160200191610493565b820191906000526020600020905b81548152906001019060200180831161047657829003601f168201915b505050505081565b600080fd5b600080fd5b6000819050919050565b6104b8816104a5565b81146104c357600080fd5b50565b6000813590506104d5816104af565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610500576104ff6104db565b5b8235905067ffffffffffffffff81111561051d5761051c6104e0565b5b602083019150836001820283011115610539576105386104e5565b5b9250929050565b6000806000604084860312156105595761055861049b565b5b6000610567868287016104c6565b935050602084013567ffffffffffffffff811115610588576105876104a0565b5b610594868287016104ea565b92509250509250925092565b6105a9816104a5565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156105e95780820151818401526020810190506105ce565b60008484015250505050565b6000601f19601f8301169050919050565b6000610611826105af565b61061b81856105ba565b935061062b8185602086016105cb565b610634816105f5565b840191505092915050565b600060408201905061065460008301856105a0565b81810360208301526106668184610606565b90509392505050565b6000602082840312156106855761068461049b565b5b6000610693848285016104c6565b91505092915050565b60008083601f8401126106b2576106b16104db565b5b8235905067ffffffffffffffff8111156106cf576106ce6104e0565b5b6020830191508360208202830111156106eb576106ea6104e5565b5b9250929050565b60008060006040848603121561070b5761070a61049b565b5b6000610719868287016104c6565b935050602084013567ffffffffffffffff81111561073a576107396104a0565b5b6107468682870161069c565b92509250509250925092565b600060208201905061076760008301846105a0565b92915050565b600080602083850312156107845761078361049b565b5b600083013567ffffffffffffffff8111156107a2576107a16104a0565b5b6107ae8582860161069c565b92509250509250929050565b600060208201905081810360008301526107d48184610606565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610816826104a5565b9150610821836104a5565b9250828201905080821115610839576108386107dc565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061088657607f821691505b6020821081036108995761089861083f565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546108cc8161086e565b6108d6818661089f565b945060018216600081146108f1576001811461090657610939565b60ff1983168652811515820286019350610939565b61090f856108aa565b60005b8381101561093157815481890152600182019150602081019050610912565b838801955050505b50505092915050565b82818337600083830152505050565b600061095d838561089f565b935061096a838584610942565b82840190509392505050565b600061098282866108bf565b915061098f828486610951565b9150819050949350505050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020601f8301049050919050565b600082821b905092915050565b600060088302610a237fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826109e6565b610a2d86836109e6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000610a6a610a65610a60846104a5565b610a45565b6104a5565b9050919050565b6000819050919050565b610a8483610a4f565b610a98610a9082610a71565b8484546109f3565b825550505050565b600090565b610aad610aa0565b610ab8818484610a7b565b505050565b5b81811015610adc57610ad1600082610aa5565b600181019050610abe565b5050565b601f821115610b2157610af2816108aa565b610afb846109d6565b81016020851015610b0a578190505b610b1e610b16856109d6565b830182610abd565b50505b505050565b600082821c905092915050565b6000610b4460001984600802610b26565b1980831691505092915050565b6000610b5d8383610b33565b9150826002028217905092915050565b610b77838361099c565b67ffffffffffffffff811115610b9057610b8f6109a7565b5b610b9a825461086e565b610ba5828285610ae0565b6000601f831160018114610bd45760008415610bc2578287013590505b610bcc8582610b51565b865550610c34565b601f198416610be2866108aa565b60005b82811015610c0a57848901358255600182019150602085019450602081019050610be5565b86831015610c275784890135610c23601f891682610b33565b8355505b6001600288020188555050505b50505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112610c9857610c97610c6c565b5b80840192508235915067ffffffffffffffff821115610cba57610cb9610c71565b5b602083019250600182023603831315610cd657610cd5610c76565b5b509250929050565b600081905092915050565b6000610cf58385610cde565b9350610d02838584610942565b82840190509392505050565b6000610d1b828486610ce9565b91508190509392505050565b6000610d32826104a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d6457610d636107dc565b5b60018201905091905056fea264697066735822122051bf349567ac5068fe1c4aeb5f09d024556608a3de408fb2ad8bee6570f865c864736f6c63430008130033'; diff --git a/packages/web3-eth-contract/test/fixtures/accounts.json b/packages/web3-eth-contract/test/fixtures/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3-eth-contract/test/fixtures/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3-eth-contract/test/fixtures/contracts/SampleStorageContract.sol b/packages/web3-eth-contract/test/fixtures/contracts/SampleStorageContract.sol new file mode 100644 index 00000000000..617c3732fdb --- /dev/null +++ b/packages/web3-eth-contract/test/fixtures/contracts/SampleStorageContract.sol @@ -0,0 +1,33 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +pragma solidity ^0.8.7; + +contract SampleStorageContract { + uint256 uintNum; + + event NEWNUM(uint256 param); + + function storeNum(uint256 param) public { + uintNum = param; + emit NEWNUM(param); + } + + function retrieveNum() public view returns (uint256) { + return uintNum; + } +} diff --git a/packages/web3-eth-contract/test/fixtures/contracts/SimpleOverloaded.sol b/packages/web3-eth-contract/test/fixtures/contracts/SimpleOverloaded.sol new file mode 100644 index 00000000000..3aa74fa05d8 --- /dev/null +++ b/packages/web3-eth-contract/test/fixtures/contracts/SimpleOverloaded.sol @@ -0,0 +1,52 @@ +pragma solidity 0.8.19; + +contract SimpleOverload { + uint256 public secret; + string public someString; + + constructor() { + secret = 42; + } + + function getSecret() public view returns (uint256) { + return secret; + } + + function getSecret(uint256 numToAdd) public view returns (uint256) { + return secret + numToAdd; + } + + function getSecret(uint256 numToAdd, string calldata _someString) + public + view + returns (uint256, string memory) + { + return (secret + numToAdd, string.concat(someString, _someString)); + } + + function setSecret() public { + secret = 42; + } + + function setSecret(uint256 numToAdd) public { + secret += numToAdd; + } + + function setSecret(uint256 numToAdd, string calldata _someString) public { + secret += numToAdd; + someString = _someString; + } + + function multicall(bytes[] calldata datas) external { + for (uint256 i = 0; i < datas.length; i++) { + address(this).call(datas[i]); + } + } + + function multicall(uint256 deadline, bytes[] calldata datas) external { + require(block.timestamp <= deadline); + for (uint256 i = 0; i < datas.length; i++) { + address(this).call(datas[i]); + } + } +} diff --git a/packages/web3-eth-contract/test/fixtures/erc20.ts b/packages/web3-eth-contract/test/fixtures/erc20.ts new file mode 100644 index 00000000000..cf4b595ec8d --- /dev/null +++ b/packages/web3-eth-contract/test/fixtures/erc20.ts @@ -0,0 +1,284 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Address, Numbers } from 'web3-types'; +import { LogsSubscription } from '../../src/log_subscription'; +import { ContractEventOptions, PayableMethodObject, NonPayableMethodObject } from '../../src/types'; + +export interface Erc20Interface { + methods: { + [key: string]: ( + ...args: ReadonlyArray + ) => + | PayableMethodObject, ReadonlyArray> + | NonPayableMethodObject, ReadonlyArray>; + + name: () => NonPayableMethodObject<[], [string]>; + + approve: ( + _spender: string, + _value: Numbers, + ) => NonPayableMethodObject<[_spender: string, _value: Numbers], [boolean]>; + totalSupply: () => NonPayableMethodObject<[], [Numbers]>; + transferFrom: ( + _from: Address, + _to: Address, + _value: Numbers, + ) => NonPayableMethodObject<[_from: Address, _to: Address, _value: Numbers], [boolean]>; + decimals: () => NonPayableMethodObject<[], [Numbers]>; + balanceOf: (_owner: Address) => NonPayableMethodObject<[_owner: Address], [Numbers]>; + symbol: () => NonPayableMethodObject<[], [string]>; + transfer: ( + _to: Address, + _value: Numbers, + ) => NonPayableMethodObject<[_to: Address, _value: Numbers], [boolean]>; + allowance: ( + _owner: Address, + _spender: Address, + ) => NonPayableMethodObject<[_owner: Address, _spender: Address], [Numbers]>; + }; + + events: { + [key: string]: (options?: ContractEventOptions) => LogsSubscription; + Approval: (options?: ContractEventOptions) => LogsSubscription; + Transfer: (options?: ContractEventOptions) => LogsSubscription; + }; +} + +// https://ethereumdev.io/abi-for-erc20-contract-on-ethereum/ +export const erc20Abi = [ + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_spender', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_from', + type: 'address', + }, + { + name: '_to', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + name: 'balance', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_to', + type: 'address', + }, + { + name: '_value', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address', + }, + { + name: '_spender', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + payable: true, + stateMutability: 'payable', + type: 'fallback', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'owner', + type: 'address', + }, + { + indexed: true, + name: 'spender', + type: 'address', + }, + { + indexed: false, + name: 'value', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'from', + type: 'address', + }, + { + indexed: true, + name: 'to', + type: 'address', + }, + { + indexed: false, + name: 'value', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, +] as const; diff --git a/packages/web3-eth-contract/test/fixtures/erc721.ts b/packages/web3-eth-contract/test/fixtures/erc721.ts new file mode 100644 index 00000000000..36c87289c24 --- /dev/null +++ b/packages/web3-eth-contract/test/fixtures/erc721.ts @@ -0,0 +1,323 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Address, Numbers } from 'web3-types'; +import { LogsSubscription } from '../../src/log_subscription'; +import { ContractEventOptions, NonPayableMethodObject, PayableMethodObject } from '../../src/types'; + +export interface Erc721Interface { + methods: { + [key: string]: ( + ...args: ReadonlyArray + ) => + | PayableMethodObject, ReadonlyArray> + | NonPayableMethodObject, ReadonlyArray>; + getApproved: (_tokenId: Numbers) => NonPayableMethodObject<[_tokenId: Numbers], [Address]>; + approve: ( + _approved: Address, + _tokenId: Numbers, + ) => PayableMethodObject<[_approved: Address, _tokenId: Numbers], []>; + transferFrom: ( + _from: Address, + _to: Address, + _tokenId: Numbers, + ) => PayableMethodObject<[_from: Address, _to: Address, _tokenId: Numbers], []>; + safeTransferFrom: ( + _from: Address, + _to: Address, + _tokenId: Numbers, + ) => PayableMethodObject<[_from: Address, _to: Address, _tokenId: Numbers], []>; + ownerOf: (_tokenId: Numbers) => NonPayableMethodObject<[_tokenId: Numbers], [Address]>; + balanceOf: (_owner: Address) => NonPayableMethodObject<[_owner: Address], [Numbers]>; + setApprovalForAll: ( + _operator: Address, + _approved: boolean, + ) => NonPayableMethodObject<[_operator: Address, _approved: boolean], []>; + + isApprovedForAll: ( + _owner: Address, + _operator: Address, + ) => NonPayableMethodObject<[_owner: Address, _operator: Address], [boolean]>; + }; + + events: { + [key: string]: (options?: ContractEventOptions) => LogsSubscription; + Transfer: (options?: ContractEventOptions) => LogsSubscription; + Approval: (options?: ContractEventOptions) => LogsSubscription; + ApprovalForAll: (options?: ContractEventOptions) => LogsSubscription; + }; +} + +// https://eips.ethereum.org/EIPS/eip-721 +// Copied interface from above link to Remix and compile +export const erc721Abi = [ + { + constant: true, + inputs: [ + { + name: '_tokenId', + type: 'uint256', + }, + ], + name: 'getApproved', + outputs: [ + { + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_approved', + type: 'address', + }, + { + name: '_tokenId', + type: 'uint256', + }, + ], + name: 'approve', + outputs: [], + payable: true, + stateMutability: 'payable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_from', + type: 'address', + }, + { + name: '_to', + type: 'address', + }, + { + name: '_tokenId', + type: 'uint256', + }, + ], + name: 'transferFrom', + outputs: [], + payable: true, + stateMutability: 'payable', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_from', + type: 'address', + }, + { + name: '_to', + type: 'address', + }, + { + name: '_tokenId', + type: 'uint256', + }, + ], + name: 'safeTransferFrom', + outputs: [], + payable: true, + stateMutability: 'payable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '_tokenId', + type: 'uint256', + }, + ], + name: 'ownerOf', + outputs: [ + { + name: '', + type: 'address', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [ + { + name: '_operator', + type: 'address', + }, + { + name: '_approved', + type: 'bool', + }, + ], + name: 'setApprovalForAll', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, + + // TODO: Need to check how to handle overloads in generics + // This is overloaded method + { + constant: false, + inputs: [ + { + name: '_from', + type: 'address', + }, + { + name: '_to', + type: 'address', + }, + { + name: '_tokenId', + type: 'uint256', + }, + { + name: 'data', + type: 'bytes', + }, + ], + name: 'safeTransferFrom', + outputs: [], + payable: true, + stateMutability: 'payable', + type: 'function', + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address', + }, + { + name: '_operator', + type: 'address', + }, + ], + name: 'isApprovedForAll', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: '_from', + type: 'address', + }, + { + indexed: true, + name: '_to', + type: 'address', + }, + { + indexed: true, + name: '_tokenId', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: '_owner', + type: 'address', + }, + { + indexed: true, + name: '_approved', + type: 'address', + }, + { + indexed: true, + name: '_tokenId', + type: 'uint256', + }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: '_owner', + type: 'address', + }, + { + indexed: true, + name: '_operator', + type: 'address', + }, + { + indexed: false, + name: '_approved', + type: 'bool', + }, + ], + name: 'ApprovalForAll', + type: 'event', + }, +] as const; diff --git a/packages/web3-eth-contract/test/fixtures/storage.ts b/packages/web3-eth-contract/test/fixtures/storage.ts new file mode 100644 index 00000000000..5ec10ed2c37 --- /dev/null +++ b/packages/web3-eth-contract/test/fixtures/storage.ts @@ -0,0 +1,59 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// sample storage contract ABI +export const sampleStorageContractABI = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint256', + name: 'param', + type: 'uint256', + }, + ], + name: 'NEWNUM', + type: 'event', + }, + { + inputs: [], + name: 'retrieveNum', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'param', + type: 'uint256', + }, + ], + name: 'storeNum', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, +]; diff --git a/packages/web3-eth-contract/test/fixtures/system_test_utils.ts b/packages/web3-eth-contract/test/fixtures/system_test_utils.ts new file mode 120000 index 00000000000..2ab08a83752 --- /dev/null +++ b/packages/web3-eth-contract/test/fixtures/system_test_utils.ts @@ -0,0 +1 @@ +../../../../scripts/system_tests_utils.ts \ No newline at end of file diff --git a/packages/web3-eth-contract/test/fixtures/unitTestFixtures.ts b/packages/web3-eth-contract/test/fixtures/unitTestFixtures.ts new file mode 100644 index 00000000000..1316e0f6e58 --- /dev/null +++ b/packages/web3-eth-contract/test/fixtures/unitTestFixtures.ts @@ -0,0 +1,142 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const getLogsData = { + request: { + fromBlock: 'earliest', + toBlock: 'latest', + topics: ['0x7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e'], + }, + + response: [ + { + logIndex: 1, + transactionIndex: 0, + transactionHash: '0xbe70733bcf87282c0ba9bf3c0e2d545084fad48bd571c314140c8dc1db882673', + blockHash: '0x78755c18c9a0a1283fa04b2f78c7794c249395b08f7f7dff304034d64d6a1607', + blockNumber: 25, + address: '0x2D029a4bd792d795f35e0583F64eD9DedeBBa849', + data: '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000548656c6c6f000000000000000000000000000000000000000000000000000000', + topics: ['0x7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e'], + type: 'mined', + id: 'log_886b29f0', + }, + ], +}; + +export const getPastEventsData = { + event: 'GREETING_CHANGED', + response: [ + { + logIndex: BigInt(1), + transactionIndex: BigInt(0), + transactionHash: '0xbe70733bcf87282c0ba9bf3c0e2d545084fad48bd571c314140c8dc1db882673', + blockHash: '0x78755c18c9a0a1283fa04b2f78c7794c249395b08f7f7dff304034d64d6a1607', + blockNumber: BigInt(25), + address: '0x2D029a4bd792d795f35e0583F64eD9DedeBBa849', + data: '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000548656c6c6f000000000000000000000000000000000000000000000000000000', + topics: ['0x7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e'], + returnValues: { + '0': 'Hello', + __length__: 1, + greeting: 'Hello', + }, + event: 'GREETING_CHANGED', + signature: '0x7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e', + raw: { + data: '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000548656c6c6f000000000000000000000000000000000000000000000000000000', + topics: ['0x7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e'], + }, + }, + ], +}; + +export const AllGetPastEventsData = { + getLogsData: [ + { + logIndex: 0, + transactionIndex: 0, + transactionHash: '0x1ba478ce1810bfa8a0725c0ca94f3cfe163a70c396037a1f3c94cad34e497959', + blockHash: '0x79eece1fb22b7109f302b65bd826b1cebf9f704642e86ae9086ed93baf44a45e', + blockNumber: 20, + address: '0x20bc23D0598b12c34cBDEf1fae439Ba8744DB426', + data: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000548656c6c6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010416e6f74686572204772656574696e6700000000000000000000000000000000', + topics: ['0x0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b75'], + type: 'mined', + id: 'log_0a03b06c', + }, + { + logIndex: 1, + transactionIndex: 0, + transactionHash: '0x1ba478ce1810bfa8a0725c0ca94f3cfe163a70c396037a1f3c94cad34e497959', + blockHash: '0x79eece1fb22b7109f302b65bd826b1cebf9f704642e86ae9086ed93baf44a45e', + blockNumber: 20, + address: '0x20bc23D0598b12c34cBDEf1fae439Ba8744DB426', + data: '0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010416e6f74686572204772656574696e6700000000000000000000000000000000', + topics: ['0x7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e'], + type: 'mined', + id: 'log_389ae161', + }, + ], + + response: [ + { + logIndex: BigInt(0), + transactionIndex: BigInt(0), + transactionHash: '0x1ba478ce1810bfa8a0725c0ca94f3cfe163a70c396037a1f3c94cad34e497959', + blockHash: '0x79eece1fb22b7109f302b65bd826b1cebf9f704642e86ae9086ed93baf44a45e', + blockNumber: BigInt(20), + address: '0x20bc23D0598b12c34cBDEf1fae439Ba8744DB426', + data: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000548656c6c6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010416e6f74686572204772656574696e6700000000000000000000000000000000', + topics: ['0x0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b75'], + returnValues: { + '0': 'Hello', + '1': 'Another Greeting', + __length__: 2, + from: 'Hello', + to: 'Another Greeting', + }, + event: 'GREETING_CHANGING', + signature: '0x0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b75', + raw: { + data: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000548656c6c6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010416e6f74686572204772656574696e6700000000000000000000000000000000', + topics: ['0x0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b75'], + }, + }, + { + logIndex: BigInt(1), + transactionIndex: BigInt(0), + transactionHash: '0x1ba478ce1810bfa8a0725c0ca94f3cfe163a70c396037a1f3c94cad34e497959', + blockHash: '0x79eece1fb22b7109f302b65bd826b1cebf9f704642e86ae9086ed93baf44a45e', + blockNumber: BigInt(20), + address: '0x20bc23D0598b12c34cBDEf1fae439Ba8744DB426', + data: '0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010416e6f74686572204772656574696e6700000000000000000000000000000000', + topics: ['0x7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e'], + returnValues: { + '0': 'Another Greeting', + __length__: 1, + greeting: 'Another Greeting', + }, + event: 'GREETING_CHANGED', + signature: '0x7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e', + raw: { + data: '0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010416e6f74686572204772656574696e6700000000000000000000000000000000', + topics: ['0x7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e'], + }, + }, + ], +}; diff --git a/packages/web3-eth-contract/test/integration/contract_accesslist.test.ts b/packages/web3-eth-contract/test/integration/contract_accesslist.test.ts new file mode 100644 index 00000000000..4f9235abcfe --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_accesslist.test.ts @@ -0,0 +1,102 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Contract } from '../../src'; +import { GreeterBytecode, GreeterAbi } from '../shared_fixtures/build/Greeter'; +import { + getSystemTestProvider, + createTempAccount, + describeIf, + getSystemTestBackend, +} from '../fixtures/system_test_utils'; + +describe('contract', () => { + describeIf(getSystemTestBackend() === 'geth')('createAccessList', () => { + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + let acc: { address: string; privateKey: string }; + + beforeEach(async () => { + contract = new Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + }); + acc = await createTempAccount(); + + deployOptions = { + data: GreeterBytecode, + arguments: ['My Greeting'], + }; + + sendOptions = { from: acc.address, gas: '1000000' }; + }); + + it('create access list for setter', async () => { + const deployedContract = await contract.deploy(deployOptions).send(sendOptions); + deployedContract.defaultAccount = acc.address; + + const receipt = await deployedContract.methods + .setGreeting('New Greeting') + .send({ gas: '1000000' }); + expect(receipt.from).toEqual(acc.address); + + const accessList = await deployedContract.methods + .setGreeting('New Greeting') + .createAccessList(); + + const accessListResult = { + accessList: [ + { + address: deployedContract.options.address?.toLowerCase(), + storageKeys: [ + '0x0000000000000000000000000000000000000000000000000000000000000001', + ], + }, + ], + gasUsed: '0x866b', + }; + + expect(accessList).toStrictEqual(accessListResult); + }); + + it('create access list for getter', async () => { + const deployedContract = await contract.deploy(deployOptions).send(sendOptions); + deployedContract.defaultAccount = acc.address; + + const receipt = await deployedContract.methods + .setGreeting('New Greeting') + .send({ gas: '1000000' }); + expect(receipt.from).toEqual(acc.address); + + const accessList = await deployedContract.methods.greet().createAccessList(); + + const accessListResult = { + accessList: [ + { + address: deployedContract.options.address?.toLowerCase(), + storageKeys: [ + '0x0000000000000000000000000000000000000000000000000000000000000001', + ], + }, + ], + gasUsed: '0x68ab', + }; + + expect(accessList).toStrictEqual(accessListResult); + }); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_clone.test.ts b/packages/web3-eth-contract/test/integration/contract_clone.test.ts new file mode 100644 index 00000000000..873ac0658ea --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_clone.test.ts @@ -0,0 +1,48 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Contract } from '../../src'; +import { GreeterBytecode, GreeterAbi } from '../shared_fixtures/build/Greeter'; +import { getSystemTestProvider, createTempAccount } from '../fixtures/system_test_utils'; + +describe('contract', () => { + describe('clone', () => { + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + beforeAll(async () => { + contract = new Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + }); + const acc = await createTempAccount(); + + deployOptions = { + data: GreeterBytecode, + arguments: ['My Greeting'], + }; + + sendOptions = { from: acc.address, gas: '1000000' }; + }); + + it('should clone the contract but with same address', async () => { + const deployedContract = await contract.deploy(deployOptions).send(sendOptions); + const newContract = deployedContract.clone(); + expect(newContract).toBeInstanceOf(Contract); + expect(newContract).not.toBe(deployedContract); + expect(newContract.options.address).toBe(deployedContract.options.address); + }); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_defaults.test.ts b/packages/web3-eth-contract/test/integration/contract_defaults.test.ts new file mode 100644 index 00000000000..b481237c739 --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_defaults.test.ts @@ -0,0 +1,127 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3BaseProvider } from 'web3-types'; +import { Web3Context } from 'web3-core'; + +import { Contract } from '../../src'; +import { GreeterBytecode, GreeterAbi } from '../shared_fixtures/build/Greeter'; +import { getSystemTestProvider, createTempAccount } from '../fixtures/system_test_utils'; + +describe('contract', () => { + describe('defaults', () => { + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + let acc: { address: string; privateKey: string }; + + beforeEach(async () => { + contract = new Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + }); + acc = await createTempAccount(); + + deployOptions = { + data: GreeterBytecode, + arguments: ['My Greeting'], + }; + + sendOptions = { from: acc.address, gas: '1000000' }; + }); + + it('should use "defaultAccount" on "instance" level instead of "from"', async () => { + const deployedContract = await contract.deploy(deployOptions).send(sendOptions); + // eslint-disable-next-line prefer-destructuring + deployedContract.defaultAccount = acc.address; + // We didn't specify "from" in this call + const receipt = await deployedContract.methods + .setGreeting('New Greeting') + .send({ gas: '1000000' }); + expect(receipt.from).toEqual(acc.address); + }); + + it('should throw error when "from" is not set on any level', () => { + contract.defaultAccount = undefined; + + expect(() => contract.deploy(deployOptions).send({ gas: '1000000' })).toThrow( + 'Contract "from" address not specified', + ); + }); + + it('should set syncWithContext from init options', async () => { + contract = new Contract(GreeterAbi, { + provider: getSystemTestProvider(), + syncWithContext: true, + }); + + contract = await contract.deploy(deployOptions).send(sendOptions); + + expect(contract.syncWithContext).toBeTruthy(); + }); + + it('should subscribe to provided context upon instantiation', () => { + const web3Context = new Web3Context('http://127.0.0.1:8545'); + const _contract = new Contract([], { syncWithContext: true }, web3Context); + expect(_contract.defaultBlock).toBe('latest'); + + web3Context.defaultBlock = 'earliest'; + expect(_contract.defaultBlock).toBe('earliest'); + }); + + describe('defaultBlock', () => { + it('should use "defaultBlock" on "instance" level', async () => { + contract = await contract.deploy(deployOptions).send(sendOptions); + + await contract.methods.setGreeting('New Greeting').send(sendOptions); + + const requestSpy = jest.spyOn( + contract.currentProvider as Web3BaseProvider, + 'request', + ); + contract.defaultBlock = 'pending'; + + await contract.methods.greet().call(); + + expect(requestSpy).toHaveBeenCalledWith( + expect.objectContaining({ params: [expect.any(Object), 'pending'] }), + ); + }); + + it('should use "defaultBlock" on "call" level', async () => { + contract = await contract.deploy(deployOptions).send(sendOptions); + + await contract.methods.setGreeting('New Greeting').send(sendOptions); + + const requestSpy = jest.spyOn( + contract.currentProvider as Web3BaseProvider, + 'request', + ); + + // Forcefully delete this property from the contract instance + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + contract.defaultBlock = undefined; + + await contract.methods.greet().call(undefined, 'pending'); + + expect(requestSpy).toHaveBeenCalledWith( + expect.objectContaining({ params: [expect.any(Object), 'pending'] }), + ); + }); + }); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_defaults_extra.test.ts b/packages/web3-eth-contract/test/integration/contract_defaults_extra.test.ts new file mode 100644 index 00000000000..b6d47be1442 --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_defaults_extra.test.ts @@ -0,0 +1,320 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ValidChains, Hardfork, TransactionReceipt } from 'web3-types'; +import * as Web3Eth from 'web3-eth'; +import { TransactionBlockTimeoutError } from 'web3-errors'; +import { Contract } from '../../src'; +import { GreeterBytecode, GreeterAbi } from '../shared_fixtures/build/Greeter'; +import { + getSystemTestProvider, + createTempAccount, + describeIf, + isWs, + isHttp, + closeOpenConnection, +} from '../fixtures/system_test_utils'; + +type Resolve = (value?: unknown) => void; +const MAX_32_SIGNED_INTEGER = 2147483647; + +jest.mock('web3-eth', () => { + const original = jest.requireActual('web3-eth'); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return { + ...original, + call: jest.fn().mockImplementation(original.call), + sendTransaction: jest.fn().mockImplementation(original.sendTransaction), + }; +}); + +describe('contract defaults (extra)', () => { + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + let acc: { address: string; privateKey: string }; + + beforeEach(async () => { + acc = await createTempAccount(); + + deployOptions = { + data: GreeterBytecode, + arguments: ['My Greeting'], + }; + + sendOptions = { from: acc.address, gas: '1000000' }; + }); + + afterEach(async () => { + await closeOpenConnection(contract); + }); + + it('should use "defaultHardfork" on "instance" level', async () => { + const hardfork = 'berlin'; + + contract = new Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + }); + + contract = await contract.deploy(deployOptions).send(sendOptions); + contract.defaultHardfork = hardfork; + + await contract.methods.setGreeting('New Greeting').send(sendOptions); + await contract.methods.greet().send(sendOptions); + + expect(contract.defaultHardfork).toBe(hardfork); + const callSpy = jest.spyOn(Web3Eth, 'call'); + + await contract.methods.greet().call(); + + expect(callSpy).toHaveBeenLastCalledWith( + expect.objectContaining({ + config: expect.objectContaining({ defaultHardfork: hardfork }), + }), + expect.any(Object), + undefined, + expect.any(Object), + ); + }); + + describe('defaultChain', () => { + it('should use "defaultChain" on "instance" level', async () => { + contract = new Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + }); + + contract = await contract.deploy(deployOptions).send(sendOptions); + + expect(contract.defaultChain).toBe('mainnet'); + + const defaultChain = 'ropsten'; + contract.defaultChain = defaultChain; + + expect(contract.defaultChain).toBe(defaultChain); + + await contract.methods.setGreeting('New Greeting').send(sendOptions); + + const callSpy = jest.spyOn(Web3Eth, 'call'); + + await contract.methods.greet().call(); + + expect(callSpy).toHaveBeenCalledWith( + expect.objectContaining({ + config: expect.objectContaining({ defaultChain }), + }), + expect.any(Object), + undefined, + expect.any(Object), + ); + }); + }); + + describe('defaultCommon', () => { + const baseChain = 'mainnet' as ValidChains; + const common = { + customChain: { name: 'testnet', networkId: '1337', chainId: '1337' }, + baseChain, + hardfork: 'london' as Hardfork, + }; + + beforeEach(async () => { + contract = new Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + }); + acc = await createTempAccount(); + + deployOptions = { + data: GreeterBytecode, + arguments: ['My Greeting'], + }; + + sendOptions = { from: acc.address, gas: '1000000' }; + + contract = await contract.deploy(deployOptions).send(sendOptions); + }); + + it('should use "defaultCommon" on "instance" level', async () => { + contract.defaultCommon = common; + const callSpy = jest.spyOn(Web3Eth, 'call'); + + await contract.methods.greet().call(); + + expect(callSpy).toHaveBeenCalledWith( + expect.objectContaining({ + config: expect.objectContaining({ defaultCommon: common }), + }), + expect.any(Object), + undefined, + expect.any(Object), + ); + }); + }); + + describeIf(isWs)('transactionBlockTimeout', () => { + it('should use "transactionBlockTimeout" on "instance" level', async () => { + contract = new Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + }); + contract = await contract.deploy(deployOptions).send(sendOptions); + + const sendTransactionSpy = jest.spyOn(Web3Eth, 'sendTransaction'); + expect(contract.transactionBlockTimeout).toBe(50); + + contract.transactionBlockTimeout = 32; + expect(contract.transactionBlockTimeout).toBe(32); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + await contract.methods.setGreeting('New Greeting').send(sendOptions); + + expect(sendTransactionSpy).toHaveBeenLastCalledWith( + expect.objectContaining({ + config: expect.objectContaining({ transactionBlockTimeout: 32 }), + }), + expect.any(Object), + expect.any(Object), + expect.any(Object), + ); + }); + + it('should fail if transaction was not mined within `transactionBlockTimeout` blocks', async () => { + contract = new Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + }); + contract = await contract.deploy(deployOptions).send(sendOptions); + + // Make the test run faster by casing the polling to start after 2 blocks + contract.transactionBlockTimeout = 1; + // Prevent transaction from stucking for a long time if the provider (like Ganache v7.4.0) + // does not respond, when raising the nonce + contract.transactionSendTimeout = MAX_32_SIGNED_INTEGER; + // Increase other timeouts + contract.transactionPollingTimeout = MAX_32_SIGNED_INTEGER; + + // Setting a high `nonce` when sending a transaction, to cause the RPC call to stuck at the Node + // The previous test has the nonce set to Number.MAX_SAFE_INTEGER. + // So, just decrease 1 from it here to not fall into another error. + const sentTx = contract.methods.setGreeting('New Greeting with high nonce').send({ + ...sendOptions, + nonce: (Number.MAX_SAFE_INTEGER - 1).toString(), + }); + + // Some providers (mostly used for development) will make blocks only when there are new transactions + // So, send 2 transactions because in this test `transactionBlockTimeout = 2`. And do nothing if an error happens. + setTimeout(() => { + (async () => { + try { + await contract.methods.setGreeting('New Greeting').send(sendOptions); + } catch (error) { + // Nothing needed to be done. + } + try { + await contract.methods.setGreeting('New Greeting').send(sendOptions); + } catch (error) { + // Nothing needed to be done. + } + })() as unknown; + }, 100); + + await expect(sentTx).rejects.toThrow(/was not mined within [0-9]+ blocks/); + + await expect(sentTx).rejects.toThrow(TransactionBlockTimeoutError); + }); + }); + + describeIf(isWs)('blockHeaderTimeout', () => { + it('should use "blockHeaderTimout" on "instance" level', async () => { + contract = new Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + }); + + contract = await contract.deploy(deployOptions).send(sendOptions); + + expect(contract.blockHeaderTimeout).toBe(10); + + const blockHeaderTimeout = 1; + contract.blockHeaderTimeout = blockHeaderTimeout; + + expect(contract.blockHeaderTimeout).toBe(blockHeaderTimeout); + + const sentTx = contract.methods.setGreeting('New Greeting').send(sendOptions); + + const confirmationPromise = new Promise((resolve: Resolve) => { + // Tx promise is handled separately + // eslint-disable-next-line no-void + void sentTx.on( + 'confirmation', + async ({ confirmations }: { confirmations: bigint }) => { + if (confirmations >= blockHeaderTimeout) { + resolve(); + } else { + // Send a transaction to cause dev providers creating new blocks to fire the 'confirmation' event again. + await contract.methods.setGreeting('New Greeting').send(sendOptions); + } + }, + ); + }); + await new Promise((resolve: Resolve) => { + // Tx promise is handled separately + // eslint-disable-next-line no-void + void sentTx.on('receipt', (params: TransactionReceipt) => { + expect(params.status).toBe(BigInt(1)); + resolve(); + }); + }); + + await sentTx; + await confirmationPromise; + sentTx.removeAllListeners(); + }); + }); + + describeIf(isHttp)('transactionPollingInterval', () => { + it('should use "transactionPollingTimeout" on "instance" level', async () => { + contract = new Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + }); + + contract = await contract.deploy(deployOptions).send(sendOptions); + + const transactionPollingInterval = 500; + contract.transactionPollingInterval = transactionPollingInterval; + + expect(contract.transactionPollingInterval).toBe(transactionPollingInterval); + }); + }); + + it('should use "handleRevert" on "instance" level', async () => { + contract = new Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + }); + + contract = await contract.deploy(deployOptions).send(sendOptions); + + expect(contract.handleRevert).toBeFalsy(); + + const handleRevert = true; + contract.handleRevert = handleRevert; + + expect(contract.handleRevert).toBe(handleRevert); + + const sendTransactionSpy = jest.spyOn(Web3Eth, 'sendTransaction'); + + await contract.methods.setGreeting('New Greeting').send(sendOptions); + + expect(sendTransactionSpy).toHaveBeenCalled(); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_deploy.test.ts b/packages/web3-eth-contract/test/integration/contract_deploy.test.ts new file mode 100644 index 00000000000..0fbafac4d0f --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_deploy.test.ts @@ -0,0 +1,286 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Eth } from 'web3-eth'; +import { Contract } from '../../src'; +import { sleep } from '../shared_fixtures/utils'; +import { ERC721TokenAbi, ERC721TokenBytecode } from '../shared_fixtures/build/ERC721Token'; +import { GreeterBytecode, GreeterAbi } from '../shared_fixtures/build/Greeter'; +import { DeployRevertAbi, DeployRevertBytecode } from '../shared_fixtures/build/DeployRevert'; +import { + getSystemTestProvider, + isWs, + createTempAccount, + createNewAccount, + signTxAndSendEIP2930, + signTxAndSendEIP1559, + sendFewSampleTxs, + closeOpenConnection, +} from '../fixtures/system_test_utils'; + +describe('contract', () => { + describe('deploy', () => { + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + let acc: { address: string; privateKey: string }; + let pkAccount: { address: string; privateKey: string }; + let web3Eth: Web3Eth; + + beforeAll(() => { + web3Eth = new Web3Eth(getSystemTestProvider()); + deployOptions = { + data: GreeterBytecode, + arguments: ['My Greeting'], + }; + }); + beforeEach(async () => { + acc = await createTempAccount(); + contract = new Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + }); + sendOptions = { from: acc.address, gas: '1000000' }; + }); + + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + describe('local account', () => { + it.each([signTxAndSendEIP1559, signTxAndSendEIP2930])( + 'should deploy the contract %p', + async signTxAndSend => { + pkAccount = await createNewAccount({ refill: true }); + + const deployData = contract.deploy(deployOptions); + + const res = await signTxAndSend( + contract.provider, + { + data: deployData.encodeABI(), + }, + pkAccount.privateKey, + ); + expect(Number(res.status)).toBe(1); + }, + ); + + it.each([signTxAndSendEIP1559, signTxAndSendEIP2930])( + 'should deploy the contract with input%p', + async signTxAndSend => { + pkAccount = await createNewAccount({ refill: true }); + + const deployData = contract.deploy(deployOptions); + + const res = await signTxAndSend( + contract.provider, + { + input: deployData.encodeABI(), + }, + pkAccount.privateKey, + ); + expect(Number(res.status)).toBe(1); + }, + ); + + it('should return estimated gas of contract constructor %p', async () => { + const estimatedGas = await new Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + }) + .deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }) + .estimateGas({ + from: acc.address, + gas: '1000000', + }); + expect(Number(estimatedGas)).toBeGreaterThan(0); + }); + it('should return estimated gas of contract constructor without arguments', async () => { + const estimatedGas = await new Contract(ERC721TokenAbi, undefined, { + provider: getSystemTestProvider(), + }) + .deploy({ + data: ERC721TokenBytecode, + arguments: [], + }) + .estimateGas({ + from: acc.address, + gas: '10000000', + }); + expect(Number(estimatedGas)).toBeGreaterThan(0); + }); + it('should return estimated gas of contract method', async () => { + const contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + + const estimatedGas = await contractDeployed.methods + .setGreeting('Hello') + .estimateGas({ + gas: '1000000', + from: acc.address, + }); + expect(Number(estimatedGas)).toBeGreaterThan(0); + }); + it('should return estimated gas of contract method without arguments', async () => { + const contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + + const estimatedGas = await contractDeployed.methods.increment().estimateGas({ + gas: '1000000', + from: acc.address, + }); + expect(Number(estimatedGas)).toBeGreaterThan(0); + }); + }); + + it('should deploy the contract', async () => { + const deployedContract = await contract.deploy(deployOptions).send(sendOptions); + + expect(deployedContract).toBeDefined(); + }); + + it('should deploy the contract if data is provided at initiation', async () => { + contract = new Contract(GreeterAbi, { + provider: getSystemTestProvider(), + data: GreeterBytecode, + from: acc.address, + gas: '1000000', + }); + const deployedContract = await contract.deploy({ arguments: ['Hello World'] }).send(); + + expect(deployedContract).toBeDefined(); + }); + + it('should return instance of the contract', async () => { + const deployedContract = await contract.deploy(deployOptions).send(sendOptions); + + expect(deployedContract).toBeInstanceOf(Contract); + }); + + it('should set contract address on new contract instance', async () => { + const deployedContract = await contract.deploy(deployOptions).send(sendOptions); + + expect(deployedContract.options.address).toBeDefined(); + }); + + it('should emit the "confirmation" event', async () => { + const confirmationHandler = jest.fn(); + contract.setConfig({ transactionConfirmationBlocks: 1 }); + await contract + .deploy(deployOptions) + .send(sendOptions) + .on('confirmation', confirmationHandler); + + // Wait for some time to allow the transaction to be processed + await sleep(500); + + // Deploy once again to trigger block mining to trigger confirmation + // We can send any other transaction as well + await contract.deploy(deployOptions).send(sendOptions); + + await sendFewSampleTxs(3); + + // Wait for some fraction of time to trigger the handler + // On http we use polling to get confirmation, so wait a bit longer + await sleep(isWs ? 500 : 2000); + + // eslint-disable-next-line jest/no-standalone-expect + expect(confirmationHandler).toHaveBeenCalled(); + }); + + it('should emit the "transactionHash" event', async () => { + const handler = jest.fn(); + + const promiEvent = contract + .deploy(deployOptions) + .send(sendOptions) + .on('transactionHash', handler); + + // Deploy the contract + await promiEvent; + + expect(handler).toHaveBeenCalled(); + }); + + it('should emit the "sending" event', async () => { + const handler = jest.fn(); + + const promiEvent = contract + .deploy(deployOptions) + .send(sendOptions) + .on('sending', handler); + + // Deploy the contract + await promiEvent; + + expect(handler).toHaveBeenCalled(); + }); + + it('should emit the "sent" event', async () => { + const handler = jest.fn(); + + const promiEvent = contract.deploy(deployOptions).send(sendOptions).on('sent', handler); + + // Deploy the contract + await promiEvent; + + expect(handler).toHaveBeenCalled(); + }); + + it('should emit the "receipt" event', async () => { + const handler = jest.fn(); + + const promiEvent = contract + .deploy(deployOptions) + .send(sendOptions) + .on('receipt', handler); + + // Deploy the contract + await promiEvent; + + expect(handler).toHaveBeenCalled(); + }); + + it('should fail with errors on "intrinsic gas too low" OOG', async () => { + await expect( + contract.deploy(deployOptions).send({ ...sendOptions, gas: '100' }), + ).rejects.toThrow('Returned error: intrinsic gas too low'); + }); + + it('should fail with errors deploying a zero length bytecode', () => { + return expect(() => + contract + .deploy({ + ...deployOptions, + data: '0x', + }) + .send(sendOptions), + ).toThrow('contract creation without any data provided.'); + }); + + it('should fail with errors on revert', async () => { + const revert = new Contract(DeployRevertAbi); + revert.provider = getSystemTestProvider(); + // eslint-disable-next-line jest/no-standalone-expect + await expect( + revert + .deploy({ + data: DeployRevertBytecode, + }) + .send(sendOptions), + ).rejects.toThrow("code couldn't be stored"); + }); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_empty_string.test.ts b/packages/web3-eth-contract/test/integration/contract_empty_string.test.ts new file mode 100644 index 00000000000..25540c2ebf4 --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_empty_string.test.ts @@ -0,0 +1,48 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Contract } from '../../src'; +import { getSystemTestProvider, createTempAccount } from '../fixtures/system_test_utils'; +import { MyContractAbi, MyContractBytecode } from '../fixtures/MyContract'; + +describe('request empty string from contract', () => { + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + beforeAll(async () => { + contract = new Contract(MyContractAbi, undefined, { + provider: getSystemTestProvider(), + }); + const acc = await createTempAccount(); + + deployOptions = { + data: MyContractBytecode, + arguments: [], + }; + + sendOptions = { from: acc.address, gas: '1000000' }; + }); + + it('should fetch empty string', async () => { + const deployedContract = await contract.deploy(deployOptions).send(sendOptions); + + const attribute = await deployedContract.methods.getAttr().call(); + + expect(attribute).toHaveLength(0); + expect(attribute).toBe(''); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_erc20.test.ts b/packages/web3-eth-contract/test/integration/contract_erc20.test.ts new file mode 100644 index 00000000000..15d1852a055 --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_erc20.test.ts @@ -0,0 +1,258 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { LogsOutput } from 'web3-types'; +import { Contract } from '../../src'; +import { ERC20TokenAbi, ERC20TokenBytecode } from '../shared_fixtures/build/ERC20Token'; +import { + getSystemTestProvider, + describeIf, + isWs, + createTempAccount, + createNewAccount, + refillAccount, + signAndSendContractMethodEIP1559, + signAndSendContractMethodEIP2930, +} from '../fixtures/system_test_utils'; +import { processAsync, toUpperCaseHex } from '../shared_fixtures/utils'; + +const initialSupply = BigInt('5000000000'); + +describe('contract', () => { + describe('erc20', () => { + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + + beforeAll(() => { + contract = new Contract(ERC20TokenAbi, undefined, { + provider: getSystemTestProvider(), + }); + + deployOptions = { + data: ERC20TokenBytecode, + arguments: [initialSupply], + }; + }); + + it('should deploy the contract', async () => { + const acc = await createTempAccount(); + const sendOptionsLocal = { from: acc.address, gas: '10000000' }; + await expect( + contract.deploy(deployOptions).send(sendOptionsLocal), + ).resolves.toBeDefined(); + }); + + describe('contract instance', () => { + let contractDeployed: Contract; + let pkAccount: { address: string; privateKey: string }; + let mainAcc: { address: string; privateKey: string }; + const prepareForTransfer = async (value: string) => { + const tempAccount = await createTempAccount(); + await contractDeployed.methods.transfer(pkAccount.address, value).send(sendOptions); + return tempAccount; + }; + + beforeAll(async () => { + mainAcc = await createTempAccount(); + pkAccount = await createNewAccount(); + await refillAccount(mainAcc.address, pkAccount.address, '20000000000000000'); + sendOptions = { from: mainAcc.address, gas: '10000000' }; + contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + }); + describe('methods', () => { + it('should return the name', async () => { + expect(await contractDeployed.methods.name().call()).toBe('Gold'); + }); + + it('should return the symbol', async () => { + expect(await contractDeployed.methods.symbol().call()).toBe('GLD'); + }); + + it('should return the decimals', async () => { + expect(await contractDeployed.methods.decimals().call()).toBe(BigInt(18)); + }); + + it('should return total supply', async () => { + expect(await contractDeployed.methods.totalSupply().call()).toBe(initialSupply); + }); + + it('should transfer tokens', async () => { + const acc2 = await createTempAccount(); + const value = BigInt(10); + const receipt = await contractDeployed.methods + .transfer(acc2.address, value) + .send(sendOptions); + + expect(receipt.events).toBeDefined(); + expect(receipt.events?.Transfer).toBeDefined(); + expect(receipt.events?.Transfer.event).toBe('Transfer'); + expect(String(receipt.events?.Transfer.returnValues.from).toLowerCase()).toBe( + mainAcc.address.toLowerCase(), + ); + expect(String(receipt.events?.Transfer.returnValues[0]).toLowerCase()).toBe( + mainAcc.address.toLowerCase(), + ); + expect(String(receipt.events?.Transfer.returnValues.to).toLowerCase()).toBe( + acc2.address.toLowerCase(), + ); + expect(String(receipt.events?.Transfer.returnValues[1]).toLowerCase()).toBe( + acc2.address.toLowerCase(), + ); + expect(receipt.events?.Transfer.returnValues.value).toBe(value); + expect(receipt.events?.Transfer.returnValues[2]).toBe(value); + + expect(await contractDeployed.methods.balanceOf(acc2.address).call()).toBe( + value, + ); + }); + it.each([signAndSendContractMethodEIP1559, signAndSendContractMethodEIP2930])( + 'should transfer tokens with local wallet %p', + async signAndSendContractMethod => { + const value = BigInt(10); + const tempAccount = await prepareForTransfer(value.toString()); + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.transfer(tempAccount.address, value), + pkAccount.privateKey, + ); + + expect( + await contractDeployed.methods.balanceOf(tempAccount.address).call(), + ).toBe(value); + }, + ); + + it.each([signAndSendContractMethodEIP1559, signAndSendContractMethodEIP2930])( + 'should approve and transferFrom tokens with local wallet %p', + async signAndSendContractMethod => { + const value = BigInt(10); + const transferFromValue = BigInt(4); + const tempAccount = await prepareForTransfer(value.toString()); + // approve + const res = await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.approve(pkAccount.address, value), + pkAccount.privateKey, + ); + + expect(res.status).toBe(BigInt(1)); + expect( + (res.logs as LogsOutput[])[0].topics[2].endsWith( + pkAccount.address.substring(2), + ), + ).toBe(true); + + // transferFrom + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.transferFrom( + pkAccount.address, + tempAccount.address, + transferFromValue, + ), + pkAccount.privateKey, + ); + expect( + await contractDeployed.methods.balanceOf(tempAccount.address).call(), + ).toBe(transferFromValue); + + // allowance + expect( + await contractDeployed.methods + .allowance(pkAccount.address, pkAccount.address) + .call(), + ).toBe(value - transferFromValue); + }, + ); + + it.each([signAndSendContractMethodEIP1559, signAndSendContractMethodEIP2930])( + 'should approve and transferFrom tokens with local wallet %p', + async signAndSendContractMethod => { + const value = BigInt(10); + const transferFromValue = BigInt(4); + const tempAccount = await prepareForTransfer(value.toString()); + // approve + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.approve( + tempAccount.address, + transferFromValue, + ), + tempAccount.privateKey, + ); + + // allowance + expect( + await contractDeployed.methods + .allowance(tempAccount.address, tempAccount.address) + .call(), + ).toBe(transferFromValue); + + // increaseAllowance + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.increaseAllowance( + tempAccount.address, + transferFromValue, + ), + tempAccount.privateKey, + ); + + // allowance + expect( + await contractDeployed.methods + .allowance(tempAccount.address, tempAccount.address) + .call(), + ).toBe(transferFromValue + transferFromValue); + }, + ); + }); + + describeIf(isWs)('events', () => { + it('should emit transfer event', async () => { + const acc2 = await createTempAccount(); + await expect( + processAsync(async resolve => { + const event = contractDeployed.events.Transfer(); + event.on('data', data => { + resolve({ + from: toUpperCaseHex(data.returnValues.from as string), + to: toUpperCaseHex(data.returnValues.to as string), + value: data.returnValues.value, + }); + }); + + await contractDeployed.methods + .transfer(acc2.address, '100') + .send(sendOptions); + }), + ).resolves.toEqual({ + from: toUpperCaseHex(sendOptions.from as string), + to: toUpperCaseHex(acc2.address), + value: BigInt(100), + }); + }); + }); + }); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_erc721.test.ts b/packages/web3-eth-contract/test/integration/contract_erc721.test.ts new file mode 100644 index 00000000000..9463a636930 --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_erc721.test.ts @@ -0,0 +1,336 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { toBigInt } from 'web3-utils'; +import { Contract } from '../../src'; +import { ERC721TokenAbi, ERC721TokenBytecode } from '../shared_fixtures/build/ERC721Token'; +import { + getSystemTestProvider, + describeIf, + isWs, + createTempAccount, + signAndSendContractMethodEIP1559, + signAndSendContractMethodEIP2930, + createNewAccount, + refillAccount, +} from '../fixtures/system_test_utils'; +import { processAsync, toUpperCaseHex } from '../shared_fixtures/utils'; + +describe('contract', () => { + describe('erc721', () => { + let contract: Contract; + let contractDeployed: Contract; + let deployOptions: Record; + let sendOptions: Record; + + beforeAll(async () => { + contract = new Contract(ERC721TokenAbi, undefined, { + provider: getSystemTestProvider(), + }); + + const acc = await createTempAccount(); + + deployOptions = { + data: ERC721TokenBytecode, + arguments: [], + }; + sendOptions = { from: acc.address, gas: '10000000' }; + }); + + it('should deploy the contract', async () => { + await expect(contract.deploy(deployOptions).send(sendOptions)).resolves.toBeDefined(); + }); + + describe('contract instance', () => { + let acc: { address: string; privateKey: string }; + let acc2: { address: string; privateKey: string }; + let pkAccount: { address: string; privateKey: string }; + beforeAll(async () => { + acc = await createTempAccount(); + pkAccount = await createNewAccount(); + await refillAccount(acc.address, pkAccount.address, '20000000000000000'); + }); + beforeEach(async () => { + acc2 = await createTempAccount(); + sendOptions = { from: acc.address, gas: '10000000' }; + contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + }); + + describe('methods', () => { + it('should return the name', async () => { + expect(await contractDeployed.methods.name().call()).toBe('GameItem'); + }); + + it('should return the symbol', async () => { + expect(await contractDeployed.methods.symbol().call()).toBe('ITM'); + }); + + it('should award item', async () => { + const tempAccount = await createTempAccount(); + const receipt = await contractDeployed.methods + .awardItem(tempAccount.address, 'http://my-nft-uri') + .send(sendOptions); + + expect(receipt.events).toBeDefined(); + expect(receipt.events?.Transfer).toBeDefined(); + expect(receipt.events?.Transfer.event).toBe('Transfer'); + expect(String(receipt.events?.Transfer.returnValues.from).toLowerCase()).toBe( + '0x0000000000000000000000000000000000000000', + ); + expect(String(receipt.events?.Transfer.returnValues[0]).toLowerCase()).toBe( + '0x0000000000000000000000000000000000000000', + ); + expect(String(receipt.events?.Transfer.returnValues.to).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + expect(String(receipt.events?.Transfer.returnValues[1]).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + const tokenId = toBigInt(0); + expect( + toUpperCaseHex( + (await contractDeployed.methods + .ownerOf(tokenId) + .call()) as unknown as string, + ), + ).toBe(toUpperCaseHex(tempAccount.address)); + }); + + it.each([signAndSendContractMethodEIP1559, signAndSendContractMethodEIP2930])( + 'should award item with local wallet %p', + async signAndSendContractMethod => { + const tempAccount = await createTempAccount(); + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.awardItem( + tempAccount.address, + 'http://my-nft-award', + ), + pkAccount.privateKey, + ); + const tokenId = toBigInt(0); + expect( + toUpperCaseHex( + (await contractDeployed.methods + .ownerOf(tokenId) + .call()) as unknown as string, + ), + ).toBe(toUpperCaseHex(tempAccount.address)); + }, + ); + + it.each([signAndSendContractMethodEIP1559, signAndSendContractMethodEIP2930])( + 'should transferFrom item with local wallet %p', + async signAndSendContractMethod => { + const tempAccount = await createTempAccount(); + const tempAccountTo = await createTempAccount(); + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.awardItem( + tempAccount.address, + 'http://my-nft-award', + ), + pkAccount.privateKey, + ); + + const tokenId = toBigInt(0); + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.transferFrom( + tempAccount.address, + tempAccountTo.address, + tokenId, + ), + tempAccount.privateKey, + ); + + expect( + toUpperCaseHex( + (await contractDeployed.methods + .ownerOf(tokenId) + .call()) as unknown as string, + ), + ).toBe(toUpperCaseHex(tempAccountTo.address)); + }, + ); + + it.each([signAndSendContractMethodEIP1559, signAndSendContractMethodEIP2930])( + 'should safeTransferFrom item with local wallet %p', + async signAndSendContractMethod => { + const tempAccount = await createTempAccount(); + const tempAccountTo = await createTempAccount(); + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.awardItem( + tempAccount.address, + 'http://my-nft-award', + ), + pkAccount.privateKey, + ); + + const tokenId = toBigInt(0); + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.approve(tempAccountTo.address, tokenId), + tempAccount.privateKey, + ); + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.safeTransferFrom( + tempAccount.address, + tempAccountTo.address, + tokenId, + ), + tempAccount.privateKey, + ); + + expect( + toUpperCaseHex( + (await contractDeployed.methods + .ownerOf(tokenId) + .call()) as unknown as string, + ), + ).toBe(toUpperCaseHex(tempAccountTo.address)); + }, + ); + + it.each([signAndSendContractMethodEIP1559, signAndSendContractMethodEIP2930])( + 'should approve item with local wallet %p', + async signAndSendContractMethod => { + const tempAccount = await createTempAccount(); + const tempAccountTo = await createTempAccount(); + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.awardItem( + tempAccount.address, + 'http://my-nft-award', + ), + pkAccount.privateKey, + ); + const tokenId = toBigInt(0); + + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.approve(tempAccountTo.address, tokenId), + tempAccount.privateKey, + ); + + const res = await contractDeployed.methods.getApproved(tokenId).call(); + expect(res.toString().toUpperCase()).toBe( + tempAccountTo.address.toUpperCase(), + ); + }, + ); + + it.each([signAndSendContractMethodEIP1559, signAndSendContractMethodEIP2930])( + 'should set approve for all item with local wallet %p', + async signAndSendContractMethod => { + const tempAccount = await createTempAccount(); + const tempAccountTo = await createTempAccount(); + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.awardItem( + tempAccount.address, + 'http://my-nft-award', + ), + pkAccount.privateKey, + ); + + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.setApprovalForAll(tempAccountTo.address, true), + tempAccount.privateKey, + ); + + expect( + await contractDeployed.methods + .isApprovedForAll(tempAccount.address, tempAccountTo.address) + .call(), + ).toBe(true); + + await signAndSendContractMethod( + contract.provider, + contractDeployed.options.address as string, + contractDeployed.methods.setApprovalForAll( + tempAccountTo.address, + false, + ), + tempAccount.privateKey, + ); + + expect( + await contractDeployed.methods + .isApprovedForAll(tempAccount.address, tempAccountTo.address) + .call(), + ).toBe(false); + }, + ); + }); + + describeIf(isWs)('events', () => { + it('should emit transfer event', async () => { + await expect( + processAsync(async resolve => { + const event = contractDeployed.events.Transfer(); + event.on('data', data => { + resolve({ + from: toUpperCaseHex(data.returnValues.from as string), + to: toUpperCaseHex(data.returnValues.to as string), + tokenId: data.returnValues.tokenId, + }); + }); + + const receipt = await contractDeployed.methods + .awardItem(acc2.address, 'http://my-nft-uri') + .send(sendOptions); + + expect(receipt.events).toBeDefined(); + expect(receipt.events?.Transfer).toBeDefined(); + expect(receipt.events?.Transfer.event).toBe('Transfer'); + expect( + String(receipt.events?.Transfer.returnValues.from).toLowerCase(), + ).toBe('0x0000000000000000000000000000000000000000'); + expect( + String(receipt.events?.Transfer.returnValues[0]).toLowerCase(), + ).toBe('0x0000000000000000000000000000000000000000'); + expect( + String(receipt.events?.Transfer.returnValues.to).toLowerCase(), + ).toBe(acc2.address.toLowerCase()); + expect( + String(receipt.events?.Transfer.returnValues[1]).toLowerCase(), + ).toBe(acc2.address.toLowerCase()); + }), + ).resolves.toEqual({ + from: '0x0000000000000000000000000000000000000000', + to: toUpperCaseHex(acc2.address), + tokenId: BigInt(0), + }); + }); + }); + }); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_estimateGas_without_0x.test.ts b/packages/web3-eth-contract/test/integration/contract_estimateGas_without_0x.test.ts new file mode 100644 index 00000000000..91d484665eb --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_estimateGas_without_0x.test.ts @@ -0,0 +1,73 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ETH_DATA_FORMAT } from 'web3-types'; +import { Contract } from '../../src'; +import { getSystemTestProvider, createTempAccount } from '../fixtures/system_test_utils'; + +describe('contract', () => { + // Create a new contract object using the ABI and bytecode + const abi = [ + { + inputs: [{ internalType: 'uint256', name: '_myNumber', type: 'uint256' }], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + inputs: [], + name: 'myNumber', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'uint256', name: '_myNumber', type: 'uint256' }], + name: 'setMyNumber', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + ]; + let acc: { address: string; privateKey: string }; + let contract: Contract; + + beforeEach(async () => { + acc = await createTempAccount(); + }); + + it('should be able to add `data` input without `0x` prefix', async () => { + contract = new Contract(abi, undefined, { + provider: getSystemTestProvider(), + }); + + const myContract = contract.deploy({ + data: '608060405234801561001057600080fd5b506040516101d93803806101d983398181016040528101906100329190610054565b806000819055505061009e565b60008151905061004e81610087565b92915050565b60006020828403121561006657600080fd5b60006100748482850161003f565b91505092915050565b6000819050919050565b6100908161007d565b811461009b57600080fd5b50565b61012c806100ad6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806323fd0e401460375780636ffd773c146051575b600080fd5b603d6069565b6040516048919060bf565b60405180910390f35b6067600480360381019060639190608c565b606f565b005b60005481565b8060008190555050565b60008135905060868160e2565b92915050565b600060208284031215609d57600080fd5b600060a9848285016079565b91505092915050565b60b98160d8565b82525050565b600060208201905060d2600083018460b2565b92915050565b6000819050919050565b60e98160d8565b811460f357600080fd5b5056fea2646970667358221220d28cf161457f7936995800eb9896635a02a559a0561bff6a09a40bfb81cd056564736f6c63430008000033', + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + arguments: [1], + }); + + const gas = await myContract.estimateGas( + { + from: acc.address, + }, + ETH_DATA_FORMAT, + ); + expect(gas).toBeDefined(); + expect(gas).toMatch(/0[xX][0-9a-fA-F]/i); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_events.test.ts b/packages/web3-eth-contract/test/integration/contract_events.test.ts new file mode 100644 index 00000000000..b84a875d173 --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_events.test.ts @@ -0,0 +1,295 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { EventLog } from 'web3-types'; +import { Contract } from '../../src'; +import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic'; +import { processAsync } from '../shared_fixtures/utils'; +import { + getSystemTestProvider, + describeIf, + isWs, + itIf, + isHttp, + createTempAccount, +} from '../fixtures/system_test_utils'; + +describe('contract', () => { + let contract: Contract; + let contractDeployed: Contract; + let deployOptions: Record; + let sendOptions: Record; + + beforeAll(() => { + contract = new Contract(BasicAbi, undefined, { + provider: getSystemTestProvider(), + }); + }); + beforeEach(async () => { + const acc = await createTempAccount(); + + deployOptions = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + + sendOptions = { from: acc.address, gas: '1000000' }; + + contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + }); + + describe('events', () => { + itIf(isWs)('should trigger the "contract.events."', async () => { + // eslint-disable-next-line jest/no-standalone-expect + return expect( + processAsync(async (resolve, reject) => { + const event = contractDeployed.events.MultiValueEvent(); + + event.on('data', resolve); + event.on('error', reject); + + // trigger event + await contractDeployed.methods + .firesMultiValueEvent('value', 12, true) + .send(sendOptions); + }), + ).resolves.toEqual( + expect.objectContaining({ + event: 'MultiValueEvent', + }), + ); + }); + + itIf(isWs)( + 'should trigger the "contract.events." for indexed parameters', + async () => { + const res = await processAsync(async (resolve, reject) => { + const event = contractDeployed.events.MultiValueIndexedEvent({ + filter: { val: 100 }, + }); + + event.on('data', resolve); + event.on('error', reject); + + // trigger event + await contractDeployed.methods + .firesMultiValueIndexedEvent('value', 12, true) + .send(sendOptions); + await contractDeployed.methods + .firesMultiValueIndexedEvent('value', 100, true) + .send(sendOptions); + }); + // eslint-disable-next-line jest/no-standalone-expect + expect((res as any)?.event).toBe('MultiValueIndexedEvent'); + // eslint-disable-next-line jest/no-standalone-expect + expect((res as any)?.returnValues.val).toBe(BigInt(100)); + }, + ); + + itIf(isWs)( + 'should trigger when "fromBlock" is passed to contract.events.', + async () => { + // eslint-disable-next-line jest/no-standalone-expect + return expect( + processAsync(async (resolve, reject) => { + const event = contractDeployed.events.MultiValueEvent({ + fromBlock: 'latest', + }); + + event.on('data', resolve); + event.on('error', reject); + + // trigger event + await contractDeployed.methods + .firesMultiValueEvent('Event Value', 11, false) + .send(sendOptions); + }), + ).resolves.toEqual( + expect.objectContaining({ + event: 'MultiValueEvent', + }), + ); + }, + ); + + itIf(isWs)( + 'should fetch past events when "fromBlock" is passed to contract.events.', + async () => { + const eventValues = [11, 12, 13, 14]; + // eslint-disable-next-line jest/no-standalone-expect + return expect( + processAsync(async resolve => { + // trigger multiple events + for (const eventValue of eventValues) { + // Wait for every transaction, before firing the next one, to prevent a possible nonce duplication. + // eslint-disable-next-line no-await-in-loop + await contractDeployed.methods + .firesMultiValueEvent('Event Value', eventValue, false) + .send(sendOptions); + } + + const event = contractDeployed.events.MultiValueEvent({ + fromBlock: 'earliest', + }); + + const pastEvents: EventLog[] = []; + event.on('data', d => { + pastEvents.push(d); + if (pastEvents.length === eventValues.length) { + resolve(pastEvents); + } + }); + }), + ).resolves.toEqual( + expect.arrayContaining([ + expect.objectContaining({ event: 'MultiValueEvent' }), + expect.objectContaining({ event: 'MultiValueEvent' }), + expect.objectContaining({ event: 'MultiValueEvent' }), + expect.objectContaining({ event: 'MultiValueEvent' }), + ]), + ); + }, + ); + }); + + describe('events subscription with HTTP', () => { + itIf(isHttp)('should fail to subscribe', async () => { + // eslint-disable-next-line no-async-promise-executor, @typescript-eslint/no-misused-promises + const failedSubscriptionPromise = new Promise((resolve, reject) => { + const event = contractDeployed.events.MultiValueEvent({ fromBlock: 'latest' }); + + event.on('data', () => { + resolve(); + }); + event.on('error', (err: Error) => { + reject(err); + }); + }); + + // eslint-disable-next-line jest/no-standalone-expect + await expect(failedSubscriptionPromise).rejects.toThrow('Failed to subscribe.'); + }); + }); + + describeIf(isWs)('getPastEvents', () => { + // TODO: Debug why this tests is hanging the websocket + it('should return all past events using earliest and latest options', async () => { + await contractDeployed.methods + .firesMultiValueEvent('New Greeting 1', 11, true) + .send(sendOptions); + await contractDeployed.methods + .firesMultiValueEvent('New Greeting 2', 12, true) + .send(sendOptions); + + expect( + await contractDeployed.getPastEvents('MultiValueEvent', { + fromBlock: 'earliest', + toBlock: 'latest', + }), + ).toHaveLength(2); + }); + it('should return all past events using number options', async () => { + await contractDeployed.methods + .firesMultiValueEvent('New Greeting 1', 11, true) + .send(sendOptions); + await contractDeployed.methods + .firesMultiValueEvent('New Greeting 2', 12, true) + .send(sendOptions); + + expect( + await contractDeployed.getPastEvents('MultiValueEvent', { + fromBlock: 0, + toBlock: 1000, + }), + ).toHaveLength(2); + }); + it('should return all past events using string options', async () => { + await contractDeployed.methods + .firesMultiValueEvent('New Greeting 1', 11, true) + .send(sendOptions); + await contractDeployed.methods + .firesMultiValueEvent('New Greeting 2', 12, true) + .send(sendOptions); + + expect( + await contractDeployed.getPastEvents('MultiValueEvent', { + fromBlock: '0', + toBlock: '1000', + }), + ).toHaveLength(2); + }); + it('should return all past events using bigint options', async () => { + await contractDeployed.methods + .firesMultiValueEvent('New Greeting 1', 11, true) + .send(sendOptions); + await contractDeployed.methods + .firesMultiValueEvent('New Greeting 2', 12, true) + .send(sendOptions); + + expect( + await contractDeployed.getPastEvents('MultiValueEvent', { + fromBlock: BigInt(0), + toBlock: BigInt(1000), + }), + ).toHaveLength(2); + }); + }); + + describeIf(isWs)('allEvents', () => { + it('should sub and get event using earliest options with allEvents()', async () => { + // eslint-disable-next-line jest/no-standalone-expect + return expect( + processAsync(async (resolve, reject) => { + const event = contractDeployed.events.allEvents({ fromBlock: 'earliest' }); + + event.on('data', resolve); + event.on('error', reject); + + // trigger event + await contractDeployed.methods + .firesMultiValueEvent('val test', 12, true) + .send(sendOptions); + }), + ).resolves.toEqual( + expect.objectContaining({ + event: 'MultiValueEvent', + }), + ); + }); + + it('should sub allEvents()', async () => { + // eslint-disable-next-line jest/no-standalone-expect + return expect( + processAsync(async (resolve, reject) => { + const event = contractDeployed.events.allEvents(); + + event.on('data', resolve); + event.on('error', reject); + + // trigger event + await contractDeployed.methods + .firesMultiValueEvent('Pak1', 12, true) + .send(sendOptions); + }), + ).resolves.toEqual( + expect.objectContaining({ + event: 'MultiValueEvent', + }), + ); + }); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_filter_events.test.ts b/packages/web3-eth-contract/test/integration/contract_filter_events.test.ts new file mode 100644 index 00000000000..338cd448c12 --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_filter_events.test.ts @@ -0,0 +1,285 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { toBigInt } from 'web3-utils'; +import { EventLog } from 'web3-types'; +import { Contract } from '../../src'; +import { ERC20TokenAbi, ERC20TokenBytecode } from '../shared_fixtures/build/ERC20Token'; +import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic'; +import { + getSystemTestProvider, + createTempAccount, + createNewAccount, +} from '../fixtures/system_test_utils'; + +const initialSupply = BigInt('5000000000'); + +describe('contract getPastEvent filter', () => { + describe('erc20', () => { + let contract: Contract; + let contractDeployed: Contract; + let deployOptions: Record; + let sendOptions: Record; + let mainAcc: Record; + let toAcc1: Record; + let toAcc2: Record; + let toAcc3: Record; + + beforeAll(async () => { + contract = new Contract(ERC20TokenAbi, undefined, { + provider: getSystemTestProvider(), + }); + + deployOptions = { + data: ERC20TokenBytecode, + arguments: [initialSupply], + }; + mainAcc = await createTempAccount(); + sendOptions = { from: mainAcc.address, gas: '10000000' }; + contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + toAcc1 = await createNewAccount(); + toAcc2 = await createNewAccount(); + toAcc3 = await createNewAccount(); + const value = BigInt(10); + await contractDeployed.methods.transfer(toAcc1.address, value).send(sendOptions); + await contractDeployed.methods.transfer(toAcc2.address, value).send(sendOptions); + await contractDeployed.methods.transfer(toAcc3.address, value).send(sendOptions); + }); + + it('should filter one event by address with event name and filter param', async () => { + const res: EventLog[] = (await contractDeployed.getPastEvents('Transfer', { + fromBlock: 'earliest', + filter: { + to: toAcc2.address, + }, + })) as unknown as EventLog[]; + expect(res[0]).toBeDefined(); + expect((res[0]?.returnValues?.to as string).toUpperCase()).toBe( + toAcc2.address.toUpperCase(), + ); + }); + it('should filter one event by address without event name and filter param', async () => { + const res: EventLog[] = (await contractDeployed.getPastEvents({ + fromBlock: 'earliest', + filter: { + to: toAcc2.address, + }, + })) as unknown as EventLog[]; + expect(res[0]).toBeDefined(); + expect((res[0]?.returnValues?.to as string).toUpperCase()).toBe( + toAcc2.address.toUpperCase(), + ); + }); + it('should filter one event by address with event name allEvents and filter param', async () => { + const res: EventLog[] = (await contractDeployed.getPastEvents('allEvents', { + fromBlock: 'earliest', + filter: { + to: toAcc2.address, + }, + })) as unknown as EventLog[]; + expect(res[0]).toBeDefined(); + expect((res[0]?.returnValues?.to as string).toUpperCase()).toBe( + toAcc2.address.toUpperCase(), + ); + }); + it('should filter few event by addresses array', async () => { + const res: EventLog[] = (await contractDeployed.getPastEvents('Transfer', { + fromBlock: 'earliest', + filter: { + to: [toAcc2.address, toAcc3.address], + }, + })) as unknown as EventLog[]; + expect(res).toHaveLength(2); + + const event2 = res.filter( + e => + String(e.returnValues.to).toUpperCase() === + String(toAcc2.address).toUpperCase(), + )[0]; + const event3 = res.filter( + e => + String(e.returnValues.to).toUpperCase() === + String(toAcc3.address).toUpperCase(), + )[0]; + + expect(event2).toBeDefined(); + expect(event3).toBeDefined(); + expect((event2?.returnValues?.to as string).toUpperCase()).toBe( + toAcc2.address.toUpperCase(), + ); + expect((event3?.returnValues?.to as string).toUpperCase()).toBe( + toAcc3.address.toUpperCase(), + ); + }); + it('should filter few event by addresses array without eventName', async () => { + const res: EventLog[] = (await contractDeployed.getPastEvents({ + fromBlock: 'earliest', + filter: { + to: [toAcc2.address, toAcc3.address], + }, + })) as unknown as EventLog[]; + expect(res).toHaveLength(2); + + const event2 = res.filter( + e => + String(e.returnValues.to).toUpperCase() === + String(toAcc2.address).toUpperCase(), + )[0]; + const event3 = res.filter( + e => + String(e.returnValues.to).toUpperCase() === + String(toAcc3.address).toUpperCase(), + )[0]; + + expect(event2).toBeDefined(); + expect(event3).toBeDefined(); + expect((event2?.returnValues?.to as string).toUpperCase()).toBe( + toAcc2.address.toUpperCase(), + ); + expect((event3?.returnValues?.to as string).toUpperCase()).toBe( + toAcc3.address.toUpperCase(), + ); + }); + }); + describe('basic', () => { + let contract: Contract; + let contractDeployed: Contract; + let deployOptions: Record; + let sendOptions: Record; + let mainAcc: Record; + + beforeAll(async () => { + contract = new Contract(BasicAbi, undefined, { + provider: getSystemTestProvider(), + }); + + deployOptions = { + data: BasicBytecode, + arguments: [123, '123'], + }; + mainAcc = await createTempAccount(); + sendOptions = { from: mainAcc.address, gas: '10000000' }; + contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + await contractDeployed.methods + .firesMultiValueIndexedEvent('str1', 1, true) + .send(sendOptions); + await contractDeployed.methods + .firesMultiValueIndexedEvent('str2', 2, false) + .send(sendOptions); + await contractDeployed.methods + .firesMultiValueIndexedEvent('str3', 3, true) + .send(sendOptions); + await contractDeployed.methods + .firesMultiValueIndexedEventWithStringIndexed('str4', 4, true) + .send(sendOptions); + }); + + it('should filter one event by address with event name and filter param', async () => { + const res: EventLog[] = (await contractDeployed.getPastEvents( + 'MultiValueIndexedEvent', + { + fromBlock: 'earliest', + filter: { + val: 2, + }, + }, + )) as unknown as EventLog[]; + expect(res[0]).toBeDefined(); + expect(res[0]?.returnValues?.val).toBe(toBigInt(2)); + }); + it('should filter few event by numbers array', async () => { + const res: EventLog[] = (await contractDeployed.getPastEvents( + 'MultiValueIndexedEvent', + { + fromBlock: 'earliest', + filter: { + val: [2, 3], + }, + }, + )) as unknown as EventLog[]; + expect(res).toHaveLength(2); + + const event2 = res.filter(e => e.returnValues.val === toBigInt(2))[0]; + const event3 = res.filter(e => e.returnValues.val === toBigInt(3))[0]; + + expect(event2).toBeDefined(); + expect(event3).toBeDefined(); + expect(event2?.returnValues?.val).toBe(toBigInt(2)); + expect(event3?.returnValues?.val).toBe(toBigInt(3)); + }); + it('should filter few event by bool array', async () => { + const res: EventLog[] = (await contractDeployed.getPastEvents( + 'MultiValueIndexedEvent', + { + fromBlock: 'earliest', + filter: { + flag: [true], + }, + }, + )) as unknown as EventLog[]; + expect(res).toHaveLength(2); + + const event1 = res.filter(e => e.returnValues.val === toBigInt(1))[0]; + const event3 = res.filter(e => e.returnValues.val === toBigInt(3))[0]; + + expect(event1).toBeDefined(); + expect(event3).toBeDefined(); + expect(event1?.returnValues?.val).toBe(toBigInt(1)); + expect(event3?.returnValues?.val).toBe(toBigInt(3)); + }); + + it('should filter events using non-indexed string', async () => { + const res: EventLog[] = (await contractDeployed.getPastEvents( + 'MultiValueIndexedEvent', + { + fromBlock: 'earliest', + filter: { + str: 'str2', + }, + }, + )) as unknown as EventLog[]; + expect(res).toHaveLength(1); + + const event = res[0]; + expect(event).toBeDefined(); + expect(event.returnValues.str).toBe('str2'); + expect(event.returnValues.val).toBe(BigInt(2)); + expect(event.returnValues.flag).toBeFalsy(); + }); + + it('should filter events using indexed string', async () => { + const res: EventLog[] = (await contractDeployed.getPastEvents( + 'MultiValueIndexedEventWithStringIndexed', + { + fromBlock: 'earliest', + filter: { + str: 'str4', + }, + }, + )) as unknown as EventLog[]; + expect(res).toHaveLength(1); + + const event = res[0]; + expect(event).toBeDefined(); + expect(event.returnValues.str).toBe( + '0x3f6d5d7b72c0059e2ecac56fd4adeefb2cff23aa41d13170f78ea6bf81e6e0ca', + ); + expect(event.returnValues.val).toBe(BigInt(4)); + expect(event.returnValues.flag).toBeTruthy(); + }); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_methods.test.ts b/packages/web3-eth-contract/test/integration/contract_methods.test.ts new file mode 100644 index 00000000000..dc28f17799a --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_methods.test.ts @@ -0,0 +1,171 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { ContractExecutionError } from 'web3-errors'; +import { Contract } from '../../src'; +import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic'; +import { getSystemTestProvider, createTempAccount } from '../fixtures/system_test_utils'; + +describe('contract', () => { + let contract: Contract; + let contractDeployed: Contract; + let deployOptions: Record; + let sendOptions: Record; + let acc: Record; + + beforeAll(async () => { + contract = new Contract(BasicAbi, undefined, { + provider: getSystemTestProvider(), + }); + acc = await createTempAccount(); + + deployOptions = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + + sendOptions = { from: acc.address, gas: '1000000' }; + + contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + }); + + describe('methods', () => { + describe('call', () => { + it('should retrieve the values', async () => { + const result = await contractDeployed.methods.getValues().call(); + + expect(result).toEqual({ + '0': BigInt(10), + '1': 'string init value', + '2': false, + __length__: 3, + }); + }); + + it('should run call method of the contract if data is provided at initiation', async () => { + const tempContract = new Contract(BasicAbi, { + provider: getSystemTestProvider(), + data: BasicBytecode, + from: acc.address, + gas: '1000000', + }); + const deployedTempContract = await tempContract + .deploy({ arguments: [10, 'string init value'] }) + .send(); + const res = await deployedTempContract.methods.getStringValue().call(); + expect(res).toBe('string init value'); + }); + + describe('revert handling', () => { + it('should returns the expected revert reason string', async () => { + let error: ContractExecutionError | undefined; + try { + await contractDeployed.methods.reverts().call(); + } catch (err: any) { + error = err; + } + + // eslint-disable-next-line jest/no-standalone-expect + expect(error).toBeDefined(); + // eslint-disable-next-line jest/no-standalone-expect + expect(error?.innerError.message).toContain('REVERTED WITH REVERT'); + }); + }); + }); + + describe('send', () => { + it('should returns a receipt', async () => { + const receipt = await contractDeployed.methods + .setValues(1, 'string value', true) + .send(sendOptions); + + expect(receipt.events).toBeUndefined(); + expect(receipt).toEqual( + expect.objectContaining({ + // status: BigInt(1), + transactionHash: expect.any(String), + }), + ); + + // To avoid issue with the `objectContaining` and `cypress` had to add + // these expectations explicitly on each attribute + expect(receipt.status).toEqual(BigInt(1)); + }); + + it('should returns a receipt (EIP-1559, maxFeePerGas and maxPriorityFeePerGas specified)', async () => { + const tempAcc = await createTempAccount(); + + const sendOptionsLocal = { from: tempAcc.address, gas: '1000000' }; + + const contractLocal = await contract.deploy(deployOptions).send(sendOptionsLocal); + const receipt = await contractLocal.methods + .setValues(1, 'string value', true) + .send({ + ...sendOptionsLocal, + maxFeePerGas: '0x59682F00', // 1.5 Gwei + maxPriorityFeePerGas: '0x1DCD6500', // .5 Gwei + type: '0x2', + }); + + expect(receipt).toEqual( + expect.objectContaining({ + // status: BigInt(1), + transactionHash: expect.any(String), + }), + ); + + // To avoid issue with the `objectContaining` and `cypress` had to add + // these expectations explicitly on each attribute + expect(receipt.status).toEqual(BigInt(1)); + }); + + it('should run send method of the contract if data is provided at initiation', async () => { + const tempContract = new Contract(BasicAbi, { + provider: getSystemTestProvider(), + input: BasicBytecode, + from: acc.address, + gas: '1000000', + }); + const deployedTempContract = await tempContract + .deploy({ arguments: [10, 'string init value'] }) + .send(); + await deployedTempContract.methods.setValues(10, 'TEST', true).send(); + + expect(await deployedTempContract.methods.getStringValue().call()).toBe('TEST'); + }); + + it('should returns errors on reverts', async () => { + await expect( + contractDeployed.methods.reverts().send(sendOptions), + ).rejects.toMatchObject({ + name: 'TransactionRevertedWithoutReasonError', + receipt: { + cumulativeGasUsed: BigInt(21543), + from: acc.address, + gasUsed: BigInt(21543), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + status: BigInt(0), + to: contractDeployed.options.address?.toLowerCase(), + transactionIndex: BigInt(0), + type: BigInt(2), + }, + }); + }); + }); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_methods_errors.test.ts b/packages/web3-eth-contract/test/integration/contract_methods_errors.test.ts new file mode 100644 index 00000000000..e51accfa09b --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_methods_errors.test.ts @@ -0,0 +1,148 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ContractExecutionError, ERR_CONTRACT_EXECUTION_REVERTED } from 'web3-errors'; +import { ErrorsContractAbi, ErrorsContractBytecode } from '../shared_fixtures/build/ErrorsContract'; +import { Contract } from '../../src'; +import { + getSystemTestProvider, + createTempAccount, + getSystemTestBackend, + describeIf, +} from '../fixtures/system_test_utils'; + +describe('contract errors', () => { + let sendOptions: Record; + let contract: Contract; + let deployOptions: Record; + + let deployedContract: Contract; + + beforeAll(async () => { + const acc = await createTempAccount(); + sendOptions = { from: acc.address }; + + contract = new Contract(ErrorsContractAbi, undefined, { + provider: getSystemTestProvider(), + }); + + deployOptions = { + data: ErrorsContractBytecode, + }; + + const sendOptionsLocal = { from: acc.address, gas: '10000000' }; + deployedContract = await contract.deploy(deployOptions).send(sendOptionsLocal); + + contract.setProvider(getSystemTestProvider()); + }); + + describeIf(getSystemTestBackend() === 'geth')('Test EIP-838 Error Codes', () => { + it('Unauthorized', async () => { + let error: ContractExecutionError | undefined; + try { + await deployedContract.methods.unauthorize().send(sendOptions); + + // execution should throw before this line, if not throw here to indicate an issue. + } catch (err: any) { + error = err; + } + + expect(error).toBeDefined(); + + expect(error).toMatchObject({ + message: expect.stringContaining( + 'Error happened while trying to execute a function inside a smart contract', + ), + code: ERR_CONTRACT_EXECUTION_REVERTED, + innerError: { + errorName: 'Unauthorized', + errorSignature: 'Unauthorized()', + }, + }); + }); + + it('should catch Unauthorized error PromiEvent.on("error")', async () => { + const expectedThrownError = { + name: 'ContractExecutionError', + code: ERR_CONTRACT_EXECUTION_REVERTED, + receipt: undefined, + innerError: { + code: 3, + data: '0x82b42900', + errorName: 'Unauthorized', + errorSignature: 'Unauthorized()', + }, + }; + + await expect( + deployedContract.methods + .unauthorize() + .send(sendOptions) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + + it('Error with parameter', async () => { + let error: ContractExecutionError | undefined; + try { + await deployedContract.methods.badRequire().send(sendOptions); + + // execution should throw before this line, if not throw here to indicate an issue. + } catch (err: any) { + error = err; + } + + expect(error).toBeDefined(); + + expect(error).toMatchObject({ + message: expect.stringContaining( + 'Error happened while trying to execute a function inside a smart contract', + ), + code: ERR_CONTRACT_EXECUTION_REVERTED, + innerError: { + errorName: 'CustomError', + errorSignature: 'CustomError(string)', + errorArgs: { + 0: 'reverted using custom Error', + }, + }, + }); + }); + + it('should catch error with parameter using PromiEvent.on("error")', async () => { + const expectedThrownError = { + name: 'ContractExecutionError', + code: ERR_CONTRACT_EXECUTION_REVERTED, + receipt: undefined, + innerError: { + code: 3, + data: '0x8d6ea8be0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001b7265766572746564207573696e6720637573746f6d204572726f720000000000', + errorName: 'CustomError', + errorSignature: 'CustomError(string)', + errorArgs: { '0': 'reverted using custom Error' }, + }, + }; + + await expect( + deployedContract.methods + .badRequire() + .send(sendOptions) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_negative_numbers.test.ts b/packages/web3-eth-contract/test/integration/contract_negative_numbers.test.ts new file mode 100644 index 00000000000..bf9283d5a4f --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_negative_numbers.test.ts @@ -0,0 +1,122 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Contract from '../../src'; +import { createTempAccount, getSystemTestProvider } from '../fixtures/system_test_utils'; +import { + NegativeNumbersAbi, + NegativeNumbersBytecode, +} from '../shared_fixtures/build/NegativeNumbers'; + +describe('Contract - NegativeNumbers.sol', () => { + const storedNegativeNumber = '-170141183460469231731687303715884105727'; + + let contract: Contract; + let contractDeployed: Contract; + let account: Record; + let sendOptions: Record; + + beforeAll(async () => { + contract = new Contract(NegativeNumbersAbi, undefined, { + provider: getSystemTestProvider(), + }); + account = await createTempAccount(); + + const deployOptions: Record = { + data: NegativeNumbersBytecode, + arguments: [storedNegativeNumber], + }; + sendOptions = { + from: account.address, + gas: '1000000', + }; + + contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + }); + + it('should retrieve storedNegativeNumber', async () => { + const response = await contractDeployed.methods.storedNegativeNumber().call(); + expect(response).toBe(BigInt(storedNegativeNumber)); + }); + + it('should return storedNegativeNumber when calling oneNegativeNumber(storedNegativeNumber)', async () => { + const transactionReceipt = await contractDeployed.methods + .oneNegativeNumber(storedNegativeNumber) + .send(sendOptions); + + expect(transactionReceipt.logs).toMatchObject([ + { + topics: ['0x5b53dc4e9e8fa2416d4e172bdad04be5a6d622643bc9ef45987b2caadd0d0c95'], + data: '0xffffffffffffffffffffffffffffffff80000000000000000000000000000001', + }, + { + topics: [ + '0x33e7dccd3899498f4408d6468e5dfad650f32574dba2ec4f13399a82e62166d5', + '0xffffffffffffffffffffffffffffffff80000000000000000000000000000001', + ], + data: '0x', + }, + ]); + }); + + it('should return storedNegativeNumber when calling twoNegativeNumbers(storedNegativeNumber, secondNegativeNumber)', async () => { + const secondNegativeNumber = + '-17014118346046923173168730371588410572712039182039812039812098312'; + + const transactionReceipt = await contractDeployed.methods + .twoNegativeNumbers(storedNegativeNumber, secondNegativeNumber) + .send(sendOptions); + + expect(transactionReceipt.logs).toMatchObject([ + { + topics: ['0xfaa997e4b16dcde196bbb99868e16fa934a0b4c1f019e494d9fbffb5abc46fc2'], + data: '0xffffffffffffffffffffffffffffffff80000000000000000000000000000001ffffffffffd6a416919bf9968e000000000000000048c26d7f0da3fa91bf56f8', + }, + { + topics: [ + '0x0204c97becd72594486cf753e30e8acfc9951ee663e404bc858e3d10b80da99b', + '0xffffffffffffffffffffffffffffffff80000000000000000000000000000001', + '0xffffffffffd6a416919bf9968e000000000000000048c26d7f0da3fa91bf56f8', + ], + data: '0x', + }, + ]); + }); + + it('should return storedNegativeNumber when calling otherNegativeNumbers(storedNegativeNumber, secondNegativeNumber)', async () => { + const secondNegativeNumber = + '-17014118346046923173168730371588410572712039182039812039812098312'; + + const transactionReceipt = await contractDeployed.methods + .otherNegativeNumbers(storedNegativeNumber, secondNegativeNumber, 'fooBar') + .send(sendOptions); + + expect(transactionReceipt.logs).toMatchObject([ + { + topics: ['0x2e1fb99ee1b27b6491b2d46a54ac8daca82f2da6810e4b8eed4d634f78fa6948'], + data: '0xffffffffffffffffffffffffffffffff80000000000000000000000000000001ffffffffffd6a416919bf9968e000000000000000048c26d7f0da3fa91bf56f800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000006666f6f4261720000000000000000000000000000000000000000000000000000', + }, + { + topics: [ + '0x0e29b573959c1b6ffd5e16886385ec1732e187cc5ac10e8faceb5e02a1c7b50b', + '0xffffffffffffffffffffffffffffffff80000000000000000000000000000001', + '0xffffffffffd6a416919bf9968e000000000000000048c26d7f0da3fa91bf56f8', + ], + data: '0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000006666f6f4261720000000000000000000000000000000000000000000000000000', + }, + ]); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/contract_simple_overloaded.test.ts b/packages/web3-eth-contract/test/integration/contract_simple_overloaded.test.ts new file mode 100644 index 00000000000..0e786b77428 --- /dev/null +++ b/packages/web3-eth-contract/test/integration/contract_simple_overloaded.test.ts @@ -0,0 +1,100 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Contract from '../../src'; +import { SimpleOverloadedAbi, SimpleOverloadedBytecode } from '../fixtures/SimpleOverloaded'; +import { createTempAccount, getSystemTestProvider } from '../fixtures/system_test_utils'; + +describe('SimpleOverloaded', () => { + let contract: Contract; + let mainAcc: { address: string; privateKey: string }; + let contractDeployed: Contract; + + beforeAll(async () => { + mainAcc = await createTempAccount(); + contract = new Contract(SimpleOverloadedAbi, undefined, { + provider: getSystemTestProvider(), + }); + contractDeployed = await contract + .deploy({ + data: SimpleOverloadedBytecode, + }) + .send({ from: mainAcc.address, gas: '10000000' }); + }); + + it('should call getSecret with no args', async () => { + const response = await contractDeployed.methods.getSecret().call(); + expect(response).toBe(BigInt(42)); + }); + + it('should call getSecret with one args', async () => { + const response = await contractDeployed.methods.getSecret(42).call(); + expect(response).toBe(BigInt(84)); + }); + + it('should call getSecret with two args', async () => { + const response = await contractDeployed.methods.getSecret(42, 'some string').call(); + expect(response).toStrictEqual({ '0': BigInt(84), '1': 'some string', __length__: 2 }); + }); + + it('should send setSecret with no args', async () => { + const transactionReceipt = await contractDeployed.methods + .setSecret() + .send({ from: mainAcc.address, gas: '10000000' }); + expect(transactionReceipt.status).toBe(BigInt(1)); + + const response = await contractDeployed.methods.getSecret(42, 'some string').call(); + expect(response).toStrictEqual({ '0': BigInt(84), '1': 'some string', __length__: 2 }); + }); + + it('should send setSecret with one args', async () => { + const transactionReceipt = await contractDeployed.methods + .setSecret(42) + .send({ from: mainAcc.address, gas: '10000000' }); + expect(transactionReceipt.status).toBe(BigInt(1)); + + const response = await contractDeployed.methods.getSecret(42, 'some string').call(); + expect(response).toStrictEqual({ '0': BigInt(126), '1': 'some string', __length__: 2 }); + }); + + it('should send setSecret with two args', async () => { + const transactionReceipt = await contractDeployed.methods + .setSecret(42, 'more string') + .send({ from: mainAcc.address, gas: '10000000' }); + expect(transactionReceipt.status).toBe(BigInt(1)); + + const response = await contractDeployed.methods.getSecret(42, 'some string').call(); + expect(response).toStrictEqual({ + '0': BigInt(168), + '1': 'more stringsome string', + __length__: 2, + }); + }); + + it('should send multicall with one arg', async () => { + const transactionReceipt = await contractDeployed.methods + .multicall(['0x5b9fdc30', '0x5b9fdc30', '0x5b9fdc30']) + .send({ from: mainAcc.address, gas: '10000000' }); + expect(transactionReceipt.status).toBe(BigInt(1)); + }); + + it('should send multicall with two args', async () => { + const transactionReceipt = await contractDeployed.methods + .multicall(99999999999, ['0x5b9fdc30', '0x5b9fdc30', '0x5b9fdc30']) + .send({ from: mainAcc.address, gas: '10000000' }); + expect(transactionReceipt.status).toBe(BigInt(1)); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/jest.config.js b/packages/web3-eth-contract/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-eth-contract/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-eth-contract/test/integration/local_account/contract_deploy.test.ts b/packages/web3-eth-contract/test/integration/local_account/contract_deploy.test.ts new file mode 100644 index 00000000000..b1418d08231 --- /dev/null +++ b/packages/web3-eth-contract/test/integration/local_account/contract_deploy.test.ts @@ -0,0 +1,167 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// eslint-disable-next-line import/no-extraneous-dependencies +import Web3 from 'web3'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Web3Account } from 'web3-eth-accounts'; +import { GreeterBytecode, GreeterAbi } from '../../shared_fixtures/build/Greeter'; +import { getSystemTestProvider, createLocalAccount, isWs } from '../../fixtures/system_test_utils'; +import { Contract } from '../../../src'; +import { sleep } from '../../shared_fixtures/utils'; + +describe('contract', () => { + describe('deploy', () => { + let contract: Contract; + let sendOptions: Record; + let deployOptions: Record; + let localAccount: Web3Account; + let web3: Web3; + + beforeEach(async () => { + web3 = new Web3(getSystemTestProvider()); + contract = new web3.eth.Contract(GreeterAbi) as unknown as Contract; + deployOptions = { + data: GreeterBytecode, + arguments: ['My Greeting'], + }; + localAccount = await createLocalAccount(web3); + sendOptions = { + from: localAccount.address, + gas: '1000000', + }; + }); + + it.each(['0x1', '0x2'])('should emit the "sending" event', async txType => { + const handler = jest.fn(); + const acc = await createLocalAccount(web3); + const promiEvent = contract + .deploy(deployOptions) + .send({ + ...sendOptions, + from: acc.address, + type: txType, + }) + .on('sending', handler); + + // Deploy the contract + await promiEvent; + + expect(handler).toHaveBeenCalled(); + }); + + it.each(['0x1', '0x2'])('should deploy contract %p', async txType => { + const acc = await createLocalAccount(web3); + const deployedContract = await contract.deploy(deployOptions).send({ + ...sendOptions, + from: acc.address, + type: txType, + }); + expect(deployedContract.options.address).toBeDefined(); + }); + + it('deploy should fail with low baseFeeGas EIP1559', async () => { + await expect( + contract.deploy(deployOptions).send({ + type: '0x2', + gas: '1000', + maxFeePerGas: '0x1', + maxPriorityFeePerGas: '0x1', + from: localAccount.address, + }), + ).rejects.toThrow('Signer Error Signer Error gasLimit is too low'); + }); + + it.each(['0x1', '0x2'])( + 'should return estimated gas of contract method %p', + async txType => { + const contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + + const estimatedGas = await contractDeployed.methods + .setGreeting('Hello') + .estimateGas({ + ...sendOptions, + type: txType, + }); + expect(Number(estimatedGas)).toBeGreaterThan(0); + }, + ); + + it('should deploy the contract if data is provided at initiation', async () => { + const contractWithParams = new web3.eth.Contract(GreeterAbi, undefined, { + provider: web3.provider, + data: GreeterBytecode, + from: localAccount.address, + gas: '1000000', + }) as unknown as Contract; + + const deployedContract = await contractWithParams + .deploy({ arguments: ['Hello World'] }) + .send(); + + expect(deployedContract.options.address).toBeDefined(); + }); + + it('should emit the "confirmation" event', async () => { + const confirmationHandler = jest.fn(); + + await contract + .deploy(deployOptions) + .send(sendOptions) + .on('confirmation', confirmationHandler); + + // Wait for sometime to allow the transaction to be processed + await sleep(500); + + // Deploy once again to trigger block mining to trigger confirmation + // We can send any other transaction as well + await contract.deploy(deployOptions).send(sendOptions); + + // Wait for some fraction of time to trigger the handler + // On http we use polling to get confirmation, so wait a bit longer + await sleep(isWs ? 500 : 2000); + + // eslint-disable-next-line jest/no-standalone-expect + expect(confirmationHandler).toHaveBeenCalled(); + }); + + it('should emit the "transactionHash" event', async () => { + const handler = jest.fn(); + + const promiEvent = contract + .deploy(deployOptions) + .send(sendOptions) + .on('transactionHash', handler); + + // Deploy the contract + await promiEvent; + + expect(handler).toHaveBeenCalled(); + }); + + it('should fail with errors deploying a zero length bytecode', () => { + return expect(() => + contract + .deploy({ + ...deployOptions, + data: '0x', + }) + .send(sendOptions), + ).toThrow('contract creation without any data provided.'); + }); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/local_account/contract_erc20.test.ts b/packages/web3-eth-contract/test/integration/local_account/contract_erc20.test.ts new file mode 100644 index 00000000000..edff03fe598 --- /dev/null +++ b/packages/web3-eth-contract/test/integration/local_account/contract_erc20.test.ts @@ -0,0 +1,228 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// eslint-disable-next-line import/no-extraneous-dependencies +import Web3 from 'web3'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Web3Account } from 'web3-eth-accounts'; +import { Contract } from '../../../src'; +import { ERC20TokenAbi, ERC20TokenBytecode } from '../../shared_fixtures/build/ERC20Token'; +import { getSystemTestProvider, createLocalAccount } from '../../fixtures/system_test_utils'; + +const initialSupply = BigInt('5000000000'); + +describe('contract', () => { + describe('erc20', () => { + let contract: Contract; + let sendOptions: Record; + let deployOptions: Record; + let localAccount: Web3Account; + let web3: Web3; + let contractDeployed: Contract; + + beforeAll(async () => { + web3 = new Web3(getSystemTestProvider()); + localAccount = await createLocalAccount(web3); + contract = new web3.eth.Contract(ERC20TokenAbi) as unknown as Contract< + typeof ERC20TokenAbi + >; + + deployOptions = { + data: ERC20TokenBytecode, + arguments: [initialSupply], + }; + + sendOptions = { + from: localAccount.address, + gas: '2000000', + }; + contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + }); + + it('should deploy the contract', () => { + expect(contractDeployed.options.address).toBeDefined(); + }); + + it.each(['0x1', '0x2'])('should transfer tokens %p', async type => { + const acc = web3.eth.accounts.create(); + const value = BigInt(10); + + const receipt = await contractDeployed.methods.transfer(acc.address, value).send({ + ...sendOptions, + type, + }); + expect(receipt.events).toBeDefined(); + expect(receipt.events?.Transfer).toBeDefined(); + expect(receipt.events?.Transfer.event).toBe('Transfer'); + expect(receipt.events).toBeDefined(); + expect(receipt.events?.Transfer).toBeDefined(); + expect(receipt.events?.Transfer.event).toBe('Transfer'); + expect(String(receipt.events?.Transfer.returnValues.from).toLowerCase()).toBe( + localAccount.address.toLowerCase(), + ); + expect(String(receipt.events?.Transfer.returnValues[0]).toLowerCase()).toBe( + localAccount.address.toLowerCase(), + ); + expect(String(receipt.events?.Transfer.returnValues.to).toLowerCase()).toBe( + acc.address.toLowerCase(), + ); + expect(String(receipt.events?.Transfer.returnValues[1]).toLowerCase()).toBe( + acc.address.toLowerCase(), + ); + expect(receipt.events?.Transfer.returnValues.value).toBe(value); + expect(receipt.events?.Transfer.returnValues[2]).toBe(value); + expect(await contractDeployed.methods.balanceOf(acc.address).call()).toBe(value); + }); + + it.each(['0x1', '0x2'])('should approve and transferFrom tokens %p', async type => { + const value = BigInt(10); + const transferFromValue = BigInt(4); + const tempAccount = await createLocalAccount(web3); + // approve + const approvalReceipt = await contractDeployed.methods + .approve(tempAccount.address, value) + .send({ ...sendOptions, type }); + expect(approvalReceipt.events).toBeDefined(); + expect(approvalReceipt.events?.Approval).toBeDefined(); + expect(approvalReceipt.events?.Approval.event).toBe('Approval'); + // transferFrom + const transferFromReceipt = await contractDeployed.methods + .transferFrom(localAccount.address, tempAccount.address, transferFromValue) + .send({ ...sendOptions, from: tempAccount.address, type }); + expect(transferFromReceipt.events).toBeDefined(); + expect(transferFromReceipt.events?.Approval).toBeDefined(); + expect(transferFromReceipt.events?.Approval.event).toBe('Approval'); + expect( + String(transferFromReceipt.events?.Approval.returnValues.owner).toLowerCase(), + ).toBe(localAccount.address.toLowerCase()); + expect(String(transferFromReceipt.events?.Approval.returnValues[0]).toLowerCase()).toBe( + localAccount.address.toLowerCase(), + ); + expect( + String(transferFromReceipt.events?.Approval.returnValues.spender).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect(String(transferFromReceipt.events?.Approval.returnValues[1]).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + expect(transferFromReceipt.events?.Approval.returnValues.value).toBe( + value - transferFromValue, + ); + expect(transferFromReceipt.events?.Approval.returnValues[2]).toBe( + value - transferFromValue, + ); + + expect(transferFromReceipt.events?.Transfer).toBeDefined(); + expect(transferFromReceipt.events?.Transfer.event).toBe('Transfer'); + expect(transferFromReceipt.events).toBeDefined(); + expect( + String(transferFromReceipt.events?.Transfer.returnValues.from).toLowerCase(), + ).toBe(localAccount.address.toLowerCase()); + expect(String(transferFromReceipt.events?.Transfer.returnValues[0]).toLowerCase()).toBe( + localAccount.address.toLowerCase(), + ); + expect(String(transferFromReceipt.events?.Transfer.returnValues.to).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + expect(String(transferFromReceipt.events?.Transfer.returnValues[1]).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + expect(transferFromReceipt.events?.Transfer.returnValues.value).toBe(transferFromValue); + expect(transferFromReceipt.events?.Transfer.returnValues[2]).toBe(transferFromValue); + + expect(await contractDeployed.methods.balanceOf(tempAccount.address).call()).toBe( + transferFromValue, + ); + + // allowance + expect( + await contractDeployed.methods + .allowance(localAccount.address, tempAccount.address) + .call(), + ).toBe(value - transferFromValue); + }); + + it.each(['0x1', '0x2'])('should increase allowance %p', async type => { + const value = BigInt(10); + const extraAmount = BigInt(4); + const tempAccount = await createLocalAccount(web3); + + // approve + const approvalReceipt = await contractDeployed.methods + .approve(tempAccount.address, value) + .send({ ...sendOptions, type }); + expect(approvalReceipt.events).toBeDefined(); + expect(approvalReceipt.events?.Approval).toBeDefined(); + expect(approvalReceipt.events?.Approval.event).toBe('Approval'); + expect(String(approvalReceipt.events?.Approval.returnValues.owner).toLowerCase()).toBe( + localAccount.address.toLowerCase(), + ); + expect(String(approvalReceipt.events?.Approval.returnValues[0]).toLowerCase()).toBe( + localAccount.address.toLowerCase(), + ); + expect( + String(approvalReceipt.events?.Approval.returnValues.spender).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect(String(approvalReceipt.events?.Approval.returnValues[1]).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + expect(approvalReceipt.events?.Approval.returnValues.value).toBe(value); + expect(approvalReceipt.events?.Approval.returnValues[2]).toBe(value); + + // allowance + expect( + await contractDeployed.methods + .allowance(localAccount.address, tempAccount.address) + .call(), + ).toBe(value); + + // increaseAllowance + const increaseAllowanceReceipt = await contractDeployed.methods + .increaseAllowance(tempAccount.address, extraAmount) + .send({ ...sendOptions, from: localAccount.address, type, gas: '2000000' }); + + expect(increaseAllowanceReceipt.events).toBeDefined(); + expect(increaseAllowanceReceipt.events?.Approval).toBeDefined(); + expect(increaseAllowanceReceipt.events?.Approval.event).toBe('Approval'); + expect( + String(increaseAllowanceReceipt.events?.Approval.returnValues.owner).toLowerCase(), + ).toBe(localAccount.address.toLowerCase()); + expect( + String(increaseAllowanceReceipt.events?.Approval.returnValues[0]).toLowerCase(), + ).toBe(localAccount.address.toLowerCase()); + expect( + String( + increaseAllowanceReceipt.events?.Approval.returnValues.spender, + ).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect( + String(increaseAllowanceReceipt.events?.Approval.returnValues[1]).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect(increaseAllowanceReceipt.events?.Approval.returnValues.value).toBe( + value + extraAmount, + ); + expect(increaseAllowanceReceipt.events?.Approval.returnValues[2]).toBe( + value + extraAmount, + ); + // check allowance + expect( + await contractDeployed.methods + .allowance(localAccount.address, tempAccount.address) + .call(), + ).toBe(value + extraAmount); + }); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/local_account/contract_erc721.test.ts b/packages/web3-eth-contract/test/integration/local_account/contract_erc721.test.ts new file mode 100644 index 00000000000..d9226c580f1 --- /dev/null +++ b/packages/web3-eth-contract/test/integration/local_account/contract_erc721.test.ts @@ -0,0 +1,355 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// eslint-disable-next-line import/no-extraneous-dependencies +import Web3 from 'web3'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Web3Account } from 'web3-eth-accounts'; +import { Contract } from '../../../src'; +import { ERC721TokenAbi, ERC721TokenBytecode } from '../../shared_fixtures/build/ERC721Token'; +import { getSystemTestProvider, createLocalAccount } from '../../fixtures/system_test_utils'; +import { toUpperCaseHex } from '../../shared_fixtures/utils'; + +describe('contract', () => { + describe('erc721', () => { + let contract: Contract; + let sendOptions: Record; + let deployOptions: Record; + let localAccount: Web3Account; + let web3: Web3; + let contractDeployed: Contract; + beforeAll(async () => { + web3 = new Web3(getSystemTestProvider()); + localAccount = await createLocalAccount(web3); + contract = new web3.eth.Contract(ERC721TokenAbi) as unknown as Contract< + typeof ERC721TokenAbi + >; + + deployOptions = { + data: ERC721TokenBytecode, + arguments: [], + }; + + sendOptions = { + from: localAccount.address, + gas: '1000000', + }; + contractDeployed = await contract + .deploy(deployOptions) + .send({ ...sendOptions, gas: '3000000' }); + }); + + it('should deploy the contract', () => { + expect(contractDeployed.options.address).toBeDefined(); + }); + + it.each(['0x1', '0x2'])('should award item %p', async type => { + const tempAccount = web3.eth.accounts.create(); + const awardReceipt = await contractDeployed.methods + .awardItem(tempAccount.address, 'http://my-nft-uri') + .send({ ...sendOptions, type }); + expect(awardReceipt.events).toBeDefined(); + expect(awardReceipt.events?.Transfer).toBeDefined(); + expect(awardReceipt.events?.Transfer.event).toBe('Transfer'); + + expect(String(awardReceipt.events?.Transfer.returnValues.from).toLowerCase()).toBe( + '0x0000000000000000000000000000000000000000', + ); + expect(String(awardReceipt.events?.Transfer.returnValues[0]).toLowerCase()).toBe( + '0x0000000000000000000000000000000000000000', + ); + expect(String(awardReceipt.events?.Transfer.returnValues.to).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + expect(String(awardReceipt.events?.Transfer.returnValues[1]).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + + const tokenId = awardReceipt.events?.Transfer.returnValues?.tokenId as string; + + expect( + toUpperCaseHex( + (await contractDeployed.methods.ownerOf(tokenId).call()) as unknown as string, + ), + ).toBe(toUpperCaseHex(tempAccount.address)); + }); + + it.each(['0x1', '0x2'])('should transferFrom item %p', async type => { + const tempAccount = await createLocalAccount(web3); + const toAccount = await createLocalAccount(web3); + const awardReceipt = await contractDeployed.methods + .awardItem(tempAccount.address, 'http://my-nft-award') + .send({ ...sendOptions, type }); + expect(awardReceipt.events).toBeDefined(); + expect(awardReceipt.events?.Transfer).toBeDefined(); + expect(awardReceipt.events?.Transfer.event).toBe('Transfer'); + + expect(String(awardReceipt.events?.Transfer.returnValues.from).toLowerCase()).toBe( + '0x0000000000000000000000000000000000000000', + ); + expect(String(awardReceipt.events?.Transfer.returnValues[0]).toLowerCase()).toBe( + '0x0000000000000000000000000000000000000000', + ); + expect(String(awardReceipt.events?.Transfer.returnValues.to).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + expect(String(awardReceipt.events?.Transfer.returnValues[1]).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + + const tokenId = awardReceipt.events?.Transfer.returnValues?.tokenId as string; + const transferFromReceipt = await contractDeployed.methods + .transferFrom(tempAccount.address, toAccount.address, tokenId) + .send({ + ...sendOptions, + type, + from: tempAccount.address, + }); + expect(transferFromReceipt.events).toBeDefined(); + expect(transferFromReceipt.events?.Transfer).toBeDefined(); + expect(transferFromReceipt.events?.Transfer.event).toBe('Transfer'); + expect( + String(transferFromReceipt.events?.Transfer.returnValues.from).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect(String(transferFromReceipt.events?.Transfer.returnValues[0]).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + expect(String(transferFromReceipt.events?.Transfer.returnValues.to).toLowerCase()).toBe( + toAccount.address.toLowerCase(), + ); + expect(String(transferFromReceipt.events?.Transfer.returnValues[1]).toLowerCase()).toBe( + toAccount.address.toLowerCase(), + ); + expect(transferFromReceipt.events?.Transfer.returnValues.tokenId).toBe(tokenId); + expect(transferFromReceipt.events?.Transfer.returnValues[2]).toBe(tokenId); + + expect(transferFromReceipt.events?.Approval).toBeDefined(); + expect(transferFromReceipt.events?.Approval.event).toBe('Approval'); + expect( + String(transferFromReceipt.events?.Approval.returnValues.owner).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect(String(transferFromReceipt.events?.Approval.returnValues[0]).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + expect( + String(transferFromReceipt.events?.Approval.returnValues.approved).toLowerCase(), + ).toBe('0x0000000000000000000000000000000000000000'); + expect(String(transferFromReceipt.events?.Approval.returnValues[1]).toLowerCase()).toBe( + '0x0000000000000000000000000000000000000000', + ); + expect(transferFromReceipt.events?.Approval.returnValues.tokenId).toBe(tokenId); + expect(transferFromReceipt.events?.Approval.returnValues[2]).toBe(tokenId); + + expect( + toUpperCaseHex( + (await contractDeployed.methods.ownerOf(tokenId).call()) as unknown as string, + ), + ).toBe(toUpperCaseHex(toAccount.address)); + }); + + it.each(['0x1', '0x2'])('should approve and then transferFrom item %p', async type => { + const tempAccount = await createLocalAccount(web3); + const toAccount = await createLocalAccount(web3); + const awardReceipt = await contractDeployed.methods + .awardItem(tempAccount.address, 'http://my-nft-award') + .send({ ...sendOptions, type }); + expect(awardReceipt.events).toBeDefined(); + expect(awardReceipt.events?.Transfer).toBeDefined(); + expect(awardReceipt.events?.Transfer.event).toBe('Transfer'); + expect(String(awardReceipt.events?.Transfer.returnValues.from).toLowerCase()).toBe( + '0x0000000000000000000000000000000000000000', + ); + expect(String(awardReceipt.events?.Transfer.returnValues[0]).toLowerCase()).toBe( + '0x0000000000000000000000000000000000000000', + ); + expect(String(awardReceipt.events?.Transfer.returnValues.to).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + expect(String(awardReceipt.events?.Transfer.returnValues[1]).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + + const tokenId = awardReceipt.events?.Transfer.returnValues?.tokenId as string; + + const approveReceipt = await contractDeployed.methods + .approve(toAccount.address, tokenId) + .send({ + ...sendOptions, + type, + from: tempAccount.address, + }); + expect(approveReceipt.events).toBeDefined(); + expect(approveReceipt.events?.Approval).toBeDefined(); + expect(approveReceipt.events?.Approval.event).toBe('Approval'); + expect(String(approveReceipt.events?.Approval.returnValues.owner).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + expect(String(approveReceipt.events?.Approval.returnValues[0]).toLowerCase()).toBe( + tempAccount.address.toLowerCase(), + ); + expect( + String(approveReceipt.events?.Approval.returnValues.approved).toLowerCase(), + ).toBe(toAccount.address.toLowerCase()); + expect(String(approveReceipt.events?.Approval.returnValues[1]).toLowerCase()).toBe( + toAccount.address.toLowerCase(), + ); + expect(approveReceipt.events?.Approval.returnValues.tokenId).toBe(tokenId); + expect(approveReceipt.events?.Approval.returnValues[2]).toBe(tokenId); + + const res = await contractDeployed.methods.getApproved(tokenId).call(); + expect(res.toString().toUpperCase()).toBe(toAccount.address.toUpperCase()); + + const safeTransferFromReceipt = await contractDeployed.methods + .safeTransferFrom(tempAccount.address, toAccount.address, tokenId) + .send({ + ...sendOptions, + type, + from: toAccount.address, + }); + + expect(safeTransferFromReceipt.events).toBeDefined(); + expect(safeTransferFromReceipt.events?.Transfer).toBeDefined(); + expect(safeTransferFromReceipt.events?.Transfer.event).toBe('Transfer'); + expect(safeTransferFromReceipt.events?.Approval).toBeDefined(); + expect(safeTransferFromReceipt.events?.Approval.event).toBe('Approval'); + + expect( + String(safeTransferFromReceipt.events?.Transfer.returnValues.from).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect( + String(safeTransferFromReceipt.events?.Transfer.returnValues[0]).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect( + String(safeTransferFromReceipt.events?.Transfer.returnValues.to).toLowerCase(), + ).toBe(toAccount.address.toLowerCase()); + expect( + String(safeTransferFromReceipt.events?.Transfer.returnValues[1]).toLowerCase(), + ).toBe(toAccount.address.toLowerCase()); + expect(safeTransferFromReceipt.events?.Transfer.returnValues.tokenId).toBe(tokenId); + expect(safeTransferFromReceipt.events?.Transfer.returnValues[2]).toBe(tokenId); + + expect( + String(safeTransferFromReceipt.events?.Approval.returnValues.owner).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect( + String(safeTransferFromReceipt.events?.Approval.returnValues[0]).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect( + String( + safeTransferFromReceipt.events?.Approval.returnValues.approved, + ).toLowerCase(), + ).toBe('0x0000000000000000000000000000000000000000'); + expect( + String(safeTransferFromReceipt.events?.Approval.returnValues[1]).toLowerCase(), + ).toBe('0x0000000000000000000000000000000000000000'); + expect(safeTransferFromReceipt.events?.Approval.returnValues.tokenId).toBe(tokenId); + expect(safeTransferFromReceipt.events?.Approval.returnValues[2]).toBe(tokenId); + + expect( + toUpperCaseHex( + (await contractDeployed.methods.ownerOf(tokenId).call()) as unknown as string, + ), + ).toBe(toUpperCaseHex(toAccount.address)); + }); + + it.each(['0x1', '0x2'])( + 'should set approve for all item with local wallet %p', + async type => { + const tempAccount = await createLocalAccount(web3); + const toAccount = await createLocalAccount(web3); + + const setApprovalReceipt = await contractDeployed.methods + .setApprovalForAll(toAccount.address, true) + .send({ + ...sendOptions, + type, + from: tempAccount.address, + }); + expect(setApprovalReceipt.events).toBeDefined(); + expect(setApprovalReceipt.events?.ApprovalForAll).toBeDefined(); + expect(setApprovalReceipt.events?.ApprovalForAll.event).toBe('ApprovalForAll'); + + expect( + String( + setApprovalReceipt.events?.ApprovalForAll.returnValues.owner, + ).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect( + String(setApprovalReceipt.events?.ApprovalForAll.returnValues[0]).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect( + String( + setApprovalReceipt.events?.ApprovalForAll.returnValues.operator, + ).toLowerCase(), + ).toBe(toAccount.address.toLowerCase()); + expect( + String(setApprovalReceipt.events?.ApprovalForAll.returnValues[1]).toLowerCase(), + ).toBe(toAccount.address.toLowerCase()); + expect(setApprovalReceipt.events?.ApprovalForAll.returnValues.approved).toBe(true); + expect(setApprovalReceipt.events?.ApprovalForAll.returnValues[2]).toBe(true); + + expect( + await contractDeployed.methods + .isApprovedForAll(tempAccount.address, toAccount.address) + .call(), + ).toBe(true); + + const setApprovalForAllReceipt = await contractDeployed.methods + .setApprovalForAll(toAccount.address, false) + .send({ + ...sendOptions, + type, + from: tempAccount.address, + }); + expect(setApprovalForAllReceipt.events).toBeDefined(); + expect(setApprovalForAllReceipt.events?.ApprovalForAll).toBeDefined(); + expect(setApprovalForAllReceipt.events?.ApprovalForAll.event).toBe( + 'ApprovalForAll', + ); + expect( + String( + setApprovalForAllReceipt.events?.ApprovalForAll.returnValues.owner, + ).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect( + String( + setApprovalForAllReceipt.events?.ApprovalForAll.returnValues[0], + ).toLowerCase(), + ).toBe(tempAccount.address.toLowerCase()); + expect( + String( + setApprovalForAllReceipt.events?.ApprovalForAll.returnValues.operator, + ).toLowerCase(), + ).toBe(toAccount.address.toLowerCase()); + expect( + String( + setApprovalForAllReceipt.events?.ApprovalForAll.returnValues[1], + ).toLowerCase(), + ).toBe(toAccount.address.toLowerCase()); + expect(setApprovalForAllReceipt.events?.ApprovalForAll.returnValues.approved).toBe( + false, + ); + expect(setApprovalForAllReceipt.events?.ApprovalForAll.returnValues[2]).toBe(false); + expect( + await contractDeployed.methods + .isApprovedForAll(tempAccount.address, toAccount.address) + .call(), + ).toBe(false); + }, + ); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/local_account/contract_overloaded_methods.test.ts b/packages/web3-eth-contract/test/integration/local_account/contract_overloaded_methods.test.ts new file mode 100644 index 00000000000..3e10c3268e4 --- /dev/null +++ b/packages/web3-eth-contract/test/integration/local_account/contract_overloaded_methods.test.ts @@ -0,0 +1,118 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// eslint-disable-next-line import/no-extraneous-dependencies +import Web3 from 'web3'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Web3Account } from 'web3-eth-accounts'; +import { utf8ToHex } from 'web3-utils'; +import { EventLog } from 'web3-types'; +import { Contract } from '../../../src'; +import { ERC721TokenAbi, ERC721TokenBytecode } from '../../shared_fixtures/build/ERC721Token'; +import { getSystemTestProvider, createLocalAccount } from '../../fixtures/system_test_utils'; +import { toUpperCaseHex } from '../../shared_fixtures/utils'; + +describe('contract ERC721 overloaded functions', () => { + let contract: Contract; + let sendOptions: Record; + let deployOptions: Record; + let localAccount: Web3Account; + let web3: Web3; + let contractDeployed: Contract; + + beforeAll(async () => { + web3 = new Web3(getSystemTestProvider()); + localAccount = await createLocalAccount(web3); + contract = new web3.eth.Contract(ERC721TokenAbi) as unknown as Contract< + typeof ERC721TokenAbi + >; + + deployOptions = { + data: ERC721TokenBytecode, + arguments: [], + }; + + sendOptions = { + from: localAccount.address, + gas: '1000000', + }; + contractDeployed = await contract + .deploy(deployOptions) + .send({ ...sendOptions, gas: '3000000' }); + }); + + it('transferFrom with 4 arguments', async () => { + const tempAccount = await createLocalAccount(web3); + const toAccount = await createLocalAccount(web3); + await contractDeployed.methods + .awardItem(tempAccount.address, 'http://my-nft-award') + .send({ ...sendOptions }); + + const logs = await contractDeployed.getPastEvents('Transfer'); + const tokenId = (logs[0] as EventLog)?.returnValues?.tokenId as string; + await contractDeployed.methods + .safeTransferFrom(tempAccount.address, toAccount.address, tokenId, utf8ToHex('1')) + .send({ + ...sendOptions, + from: tempAccount.address, + }); + + expect( + toUpperCaseHex( + (await contractDeployed.methods.ownerOf(tokenId).call()) as unknown as string, + ), + ).toBe(toUpperCaseHex(toAccount.address)); + }); + + it('transferFrom with 3 arguments', async () => { + const tempAccount = await createLocalAccount(web3); + const toAccount = await createLocalAccount(web3); + await contractDeployed.methods + .awardItem(tempAccount.address, 'http://my-nft-award') + .send({ ...sendOptions }); + + const logs = await contractDeployed.getPastEvents('Transfer'); + const tokenId = (logs[0] as EventLog)?.returnValues?.tokenId as string; + await contractDeployed.methods + .safeTransferFrom(tempAccount.address, toAccount.address, tokenId) + .send({ + ...sendOptions, + from: tempAccount.address, + }); + + expect( + toUpperCaseHex( + (await contractDeployed.methods.ownerOf(tokenId).call()) as unknown as string, + ), + ).toBe(toUpperCaseHex(toAccount.address)); + }); + + it('transferFrom with 3 invalid arguments', () => { + expect(() => + contractDeployed.methods + // @ts-expect-error-next-line + .safeTransferFrom(1, 2, 3), + ).toThrow('Web3 validator'); + }); + + it('transferFrom with 2 arguments', () => { + expect(() => + // @ts-expect-error-next-line + contractDeployed.methods.safeTransferFrom(localAccount.address, localAccount.address), + ).toThrow('Web3 validator'); + }); +}); diff --git a/packages/web3-eth-contract/test/integration/setup.js b/packages/web3-eth-contract/test/integration/setup.js new file mode 100644 index 00000000000..6170e9ca349 --- /dev/null +++ b/packages/web3-eth-contract/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = String(process.env.WEB3_SYSTEM_TEST_PROVIDER).includes('ipc') ? 35000 : 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-eth-contract/test/shared_fixtures b/packages/web3-eth-contract/test/shared_fixtures new file mode 120000 index 00000000000..729a61c9ef4 --- /dev/null +++ b/packages/web3-eth-contract/test/shared_fixtures @@ -0,0 +1 @@ +../../../fixtures \ No newline at end of file diff --git a/packages/web3-eth-contract/test/tsconfig.json b/packages/web3-eth-contract/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-eth-contract/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-eth-contract/test/unit/contract.test.ts b/packages/web3-eth-contract/test/unit/contract.test.ts new file mode 100644 index 00000000000..173ac8a5e4e --- /dev/null +++ b/packages/web3-eth-contract/test/unit/contract.test.ts @@ -0,0 +1,1548 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import * as eth from 'web3-eth'; +import { ValidChains, Hardfork, AccessListResult, Address, ETH_DATA_FORMAT } from 'web3-types'; +import { Web3ContractError } from 'web3-errors'; +import { Web3Context } from 'web3-core'; + +import { Contract } from '../../src'; +import { sampleStorageContractABI } from '../fixtures/storage'; +import { GreeterAbi, GreeterBytecode } from '../shared_fixtures/build/Greeter'; +import { AllGetPastEventsData, getLogsData, getPastEventsData } from '../fixtures/unitTestFixtures'; +import { getSystemTestProvider } from '../fixtures/system_test_utils'; +import { erc721Abi } from '../fixtures/erc721'; +import { ERC20TokenAbi } from '../shared_fixtures/build/ERC20Token'; +import { processAsync } from '../shared_fixtures/utils'; + +jest.mock('web3-eth', () => { + const allAutoMocked = jest.createMockFromModule('web3-eth'); + const actual = jest.requireActual('web3-eth'); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return { + __esModules: true, + // @ts-expect-error ignore allAutoMocked type + ...allAutoMocked, + decodeEventABI: actual.decodeEventABI, + }; +}); + +describe('Contract', () => { + describe('constructor', () => { + it('should init with only the abi', () => { + const contract = new Contract([]); + + expect(contract).toBeInstanceOf(Contract); + }); + + it('should throw if both options.data and options.input are provided', () => { + expect( + () => + new Contract([], { + data: GreeterBytecode, + input: GreeterBytecode, + }), + ).toThrow( + 'You can\'t have "data" and "input" as properties of a contract at the same time, please use either "data" or "input" instead.', + ); + }); + + it('should init with abi and address', () => { + const contract = new Contract([], '0x00000000219ab540356cBB839Cbe05303d7705Fa'); + + expect(contract).toBeInstanceOf(Contract); + }); + + it('should init with abi and options', () => { + const contract = new Contract([], { gas: '123' }); + + expect(contract).toBeInstanceOf(Contract); + }); + + it('method should have correct type by ABI', () => { + const contractInstance = new Contract([ + { + inputs: [ + { + internalType: 'uint256', + name: 'tokenId', + type: 'uint256', + }, + ], + name: 'tokenURI', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + ] as const); + + const method = contractInstance.methods.tokenURI(123); + + expect(method).toBeDefined(); + }); + + it('should init with abi, options and context', () => { + const contract = new Contract( + [], + { gas: '123' }, + { config: { defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa' } }, + ); + + expect(contract).toBeInstanceOf(Contract); + }); + + it('should init with abi, address and options', () => { + const contract = new Contract([], '0x00000000219ab540356cBB839Cbe05303d7705Fa', { + gas: '123', + }); + + expect(contract).toBeInstanceOf(Contract); + }); + + it('should init with abi, address, options and context', () => { + const contract = new Contract( + [], + '0x00000000219ab540356cBB839Cbe05303d7705Fa', + { gas: '123' }, + { config: { defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa' } }, + ); + + expect(contract).toBeInstanceOf(Contract); + }); + + it('should set the provider, from options, upon instantiation', () => { + const provider = getSystemTestProvider(); + const contract = new Contract([], '', { + provider, + }); + + expect(contract.provider).toEqual({ + clientUrl: provider, + httpProviderOptions: undefined, + }); + }); + + it('should set the provider, from context, upon instantiation', () => { + const provider = getSystemTestProvider(); + const contract = new Contract( + [], + '', + {}, + { + provider, + }, + ); + + expect(contract.provider).toEqual({ + clientUrl: provider, + httpProviderOptions: undefined, + }); + }); + + it('should pass the returnDataFormat to `_parseAndSetAddress` and `_parseAndSetJsonInterface`', () => { + const contract = new Contract([], '', ETH_DATA_FORMAT); + + // @ts-expect-error run protected method + const parseAndSetAddressSpy = jest.spyOn(contract, '_parseAndSetAddress'); + contract.options.address = '0x6e599da0bff7a6598ac1224e4985430bf16458a4'; + + expect(parseAndSetAddressSpy).toHaveBeenCalledWith( + '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + ETH_DATA_FORMAT, + ); + const parseAndSetJsonInterfaceSpy = jest.spyOn( + contract, + // @ts-expect-error run protected method + '_parseAndSetJsonInterface', + ); + contract.options.jsonInterface = []; + expect(parseAndSetJsonInterfaceSpy).toHaveBeenCalledWith([], ETH_DATA_FORMAT); + }); + + it('should pass the returnDataFormat, as the constructor forth parameter, to `_parseAndSetAddress` and `_parseAndSetJsonInterface`', () => { + const contract = new Contract([], '', {}, ETH_DATA_FORMAT); + + // @ts-expect-error run protected method + const parseAndSetAddressSpy = jest.spyOn(contract, '_parseAndSetAddress'); + contract.options.address = '0x6e599da0bff7a6598ac1224e4985430bf16458a4'; + + expect(parseAndSetAddressSpy).toHaveBeenCalledWith( + '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + ETH_DATA_FORMAT, + ); + const parseAndSetJsonInterfaceSpy = jest.spyOn( + contract, + // @ts-expect-error run protected method + '_parseAndSetJsonInterface', + ); + contract.options.jsonInterface = []; + expect(parseAndSetJsonInterfaceSpy).toHaveBeenCalledWith([], ETH_DATA_FORMAT); + }); + + it('should pass the returnDataFormat, as the constructor fifth parameter, to `_parseAndSetAddress` and `_parseAndSetJsonInterface`', () => { + const contract = new Contract([], '', {}, {}, ETH_DATA_FORMAT); + + // @ts-expect-error run protected method + const parseAndSetAddressSpy = jest.spyOn(contract, '_parseAndSetAddress'); + contract.options.address = '0x6e599da0bff7a6598ac1224e4985430bf16458a4'; + + expect(parseAndSetAddressSpy).toHaveBeenCalledWith( + '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + ETH_DATA_FORMAT, + ); + const parseAndSetJsonInterfaceSpy = jest.spyOn( + contract, + // @ts-expect-error run protected method + '_parseAndSetJsonInterface', + ); + contract.options.jsonInterface = []; + expect(parseAndSetJsonInterfaceSpy).toHaveBeenCalledWith([], ETH_DATA_FORMAT); + }); + }); + + describe('Contract functions and defaults', () => { + let sendOptions: Record; + const deployedAddr = '0x20bc23D0598b12c34cBDEf1fae439Ba8744DB426'; + + beforeEach(() => { + sendOptions = { + from: '0x12364916b10Ae90076dDa6dE756EE1395BB69ec2', + gas: '1000000', + }; + }); + + it('should deploy contract with input property', async () => { + const input = `${GreeterBytecode}0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b4d79204772656574696e67000000000000000000000000000000000000000000`; + const contract = new Contract(GreeterAbi); + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const sendTransactionSpy = jest + .spyOn(eth, 'sendTransaction') + .mockImplementation((_objInstance, tx) => { + expect(tx.to).toBeUndefined(); + expect(tx.gas).toStrictEqual(sendOptions.gas); + expect(tx.gasPrice).toBeUndefined(); + expect(tx.from).toStrictEqual(sendOptions.from); + expect(tx.input).toStrictEqual(input); // padded data + + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const deployedContract = await contract + .deploy({ + input: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + + expect(deployedContract).toBeDefined(); + expect(deployedContract.options.address).toStrictEqual(deployedAddr); + sendTransactionSpy.mockClear(); + }); + + it('should deploy contract with data property', async () => { + const data = `${GreeterBytecode}0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b4d79204772656574696e67000000000000000000000000000000000000000000`; + const contract = new Contract(GreeterAbi); + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const sendTransactionSpy = jest + .spyOn(eth, 'sendTransaction') + .mockImplementation((_objInstance, tx) => { + expect(tx.to).toBeUndefined(); + expect(tx.gas).toStrictEqual(sendOptions.gas); + expect(tx.gasPrice).toBeUndefined(); + expect(tx.from).toStrictEqual(sendOptions.from); + expect(tx.data).toStrictEqual(data); // padded data + + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const deployedContract = await contract + .deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + + expect(deployedContract).toBeDefined(); + expect(deployedContract.options.address).toStrictEqual(deployedAddr); + sendTransactionSpy.mockClear(); + }); + + // eslint-disable-next-line @typescript-eslint/require-await + it('should not deploy contract with empty data', async () => { + const contract = new Contract(GreeterAbi); + + expect(() => contract.deploy({ data: '' }).send(sendOptions)).toThrow( + 'contract creation without any data provided', + ); + }); + + // eslint-disable-next-line @typescript-eslint/require-await + it('send method on deployed contract should work using input', async () => { + const arg = 'Hello'; + const contract = new Contract(GreeterAbi); + sendOptions = { + from: '0x12364916b10Ae90076dDa6dE756EE1395BB69ec2', + gas: '1000000', + }; + const spyTx = jest + .spyOn(eth, 'sendTransaction') + .mockImplementation((_objInstance, _tx) => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + expect(_tx.input).toBeDefined(); + if ( + _tx.input === + '0xa41368620000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000548656c6c6f000000000000000000000000000000000000000000000000000000' + ) { + // eslint-disable-next-line + expect(_tx.to).toStrictEqual(deployedAddr); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-empty-function + return { status: '0x1', on: () => {} } as any; + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-empty-function + return Promise.resolve(Object.assign(newContract, { on: () => {} })) as any; + }); + + const deployedContract = await contract + .deploy({ + input: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + const receipt = await deployedContract.methods.setGreeting(arg).send(sendOptions); + expect(receipt.status).toBe('0x1'); + + spyTx.mockClear(); + }); + + it('send method on deployed contract should work using data', async () => { + const arg = 'Hello'; + const contract = new Contract(GreeterAbi); + sendOptions = { + from: '0x12364916b10Ae90076dDa6dE756EE1395BB69ec2', + gas: '1000000', + data: '0xa41368620000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000548656c6c6f000000000000000000000000000000000000000000000000000000', + }; + const spyTx = jest + .spyOn(eth, 'sendTransaction') + .mockImplementation((_objInstance, _tx) => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + expect(_tx.data).toBeDefined(); + if ( + _tx.data === + '0xa41368620000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000548656c6c6f000000000000000000000000000000000000000000000000000000' + ) { + // eslint-disable-next-line + expect(_tx.to).toStrictEqual(deployedAddr); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-empty-function + return { status: '0x1', on: () => {} } as any; + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-empty-function + return Promise.resolve(Object.assign(newContract, { on: () => {} })) as any; + }); + + const deployedContract = await contract + .deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + const receipt = await deployedContract.methods.setGreeting(arg).send(sendOptions); + expect(receipt.status).toBe('0x1'); + + spyTx.mockClear(); + }); + + it('should send method on deployed contract should work with data using web3config', async () => { + const expectedProvider = 'http://127.0.0.1:8545'; + const web3Context = new Web3Context({ + provider: expectedProvider, + config: { + contractDataInputFill: 'data', + defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa', + }, + }); + const arg = 'Hello'; + const contract = new Contract(GreeterAbi, web3Context); + sendOptions = { + from: '0x12364916b10Ae90076dDa6dE756EE1395BB69ec2', + gas: '1000000', + }; + const spyTx = jest + .spyOn(eth, 'sendTransaction') + .mockImplementation((_objInstance, _tx) => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + if ( + _tx.data === + '0xa41368620000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000548656c6c6f000000000000000000000000000000000000000000000000000000' + ) { + // eslint-disable-next-line + expect(_tx.to).toStrictEqual(deployedAddr); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-empty-function + return { status: '0x1', on: () => {} } as any; + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-empty-function + return Promise.resolve(Object.assign(newContract, { on: () => {} })) as any; + }); + + const deployedContract = await contract + .deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + const receipt = await deployedContract.methods.setGreeting(arg).send(sendOptions); + expect(receipt.status).toBe('0x1'); + + spyTx.mockClear(); + }); + + it('send method on deployed contract should work with both input and data using web3config', async () => { + const expectedProvider = 'http://127.0.0.1:8545'; + const web3Context = new Web3Context({ + provider: expectedProvider, + config: { + contractDataInputFill: 'both', + defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa', + }, + }); + const arg = 'Hello'; + const contract = new Contract(GreeterAbi, web3Context); + sendOptions = { + from: '0x12364916b10Ae90076dDa6dE756EE1395BB69ec2', + gas: '1000000', + }; + const spyTx = jest + .spyOn(eth, 'sendTransaction') + .mockImplementation((_objInstance, _tx) => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + if ( + _tx.data === + '0xa41368620000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000548656c6c6f000000000000000000000000000000000000000000000000000000' + ) { + // eslint-disable-next-line + expect(_tx.input).toStrictEqual( + '0xa41368620000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000548656c6c6f000000000000000000000000000000000000000000000000000000', + ); + // eslint-disable-next-line + expect(_tx.to).toStrictEqual(deployedAddr); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-empty-function + return { status: '0x1', on: () => {} } as any; + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-empty-function + return Promise.resolve(Object.assign(newContract, { on: () => {} })) as any; + }); + + const deployedContract = await contract + .deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + const receipt = await deployedContract.methods.setGreeting(arg).send(sendOptions); + expect(receipt.status).toBe('0x1'); + + spyTx.mockClear(); + }); + + it('should send method on deployed contract should work with input using web3config', async () => { + const expectedProvider = 'http://127.0.0.1:8545'; + const web3Context = new Web3Context({ + provider: expectedProvider, + config: { + contractDataInputFill: 'input', + defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa', + }, + }); + const arg = 'Hello'; + const contract = new Contract(GreeterAbi, web3Context); + sendOptions = { + from: '0x12364916b10Ae90076dDa6dE756EE1395BB69ec2', + gas: '1000000', + }; + const spyTx = jest + .spyOn(eth, 'sendTransaction') + .mockImplementation((_objInstance, _tx) => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + if ( + _tx.input === + '0xa41368620000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000548656c6c6f000000000000000000000000000000000000000000000000000000' + ) { + // eslint-disable-next-line + expect(_tx.to).toStrictEqual(deployedAddr); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-empty-function + return { status: '0x1', on: () => {} } as any; + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-empty-function + return Promise.resolve(Object.assign(newContract, { on: () => {} })) as any; + }); + + const deployedContract = await contract + .deploy({ + input: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + const receipt = await deployedContract.methods.setGreeting(arg).send(sendOptions); + expect(receipt.status).toBe('0x1'); + + spyTx.mockClear(); + }); + + it('call on deployed contract should decode result', async () => { + const arg = 'Hello'; + const encodedArg = + '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000548656c6c6f000000000000000000000000000000000000000000000000000000'; + const contract = new Contract(GreeterAbi); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const spyEthCall = jest.spyOn(eth, 'call').mockImplementation((_objInstance, _tx) => { + expect(_tx.to).toStrictEqual(deployedAddr); + expect(_tx.input).toBe('0xcfae3217'); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(encodedArg) as any; // contract class should decode encodedArg + }); + const deployedContract = await contract + .deploy({ + input: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + const res = await deployedContract.methods.greet().call(); + expect(res).toStrictEqual(arg); + + spyTx.mockClear(); + spyEthCall.mockClear(); + }); + + it('should clone pre deployed contract with address', () => { + const contract = new Contract( + sampleStorageContractABI, + '0x00000000219ab540356cBB839Cbe05303d7705Fa', + { gas: '0x97254' }, + ); + + const clonnedContract = contract.clone(); + + expect(JSON.stringify(contract)).toStrictEqual(JSON.stringify(clonnedContract)); + + contract.options.jsonInterface = GreeterAbi; + }); + + it('should clone new contract', () => { + const contract = new Contract(sampleStorageContractABI); + + const clonnedContract = contract.clone(); + expect(JSON.stringify(contract)).toStrictEqual(JSON.stringify(clonnedContract)); + }); + + it('should be able to update the jsonInterface', () => { + const contract = new Contract(sampleStorageContractABI); + + expect(contract.methods.retrieveNum).toBeDefined(); + expect(contract.methods.storeNum).toBeDefined(); + + expect(contract.methods.greet).toBeUndefined(); + expect(contract.methods.increment).toBeUndefined(); + expect(contract.methods.setGreeting).toBeUndefined(); + + contract.options.jsonInterface = GreeterAbi; + + expect(contract.methods.retrieveNum).toBeUndefined(); + expect(contract.methods.storeNum).toBeUndefined(); + + expect(contract.methods.greet).toBeDefined(); + expect(contract.methods.increment).toBeDefined(); + expect(contract.methods.setGreeting).toBeDefined(); + }); + + it('defaults set and get should work', () => { + const contract = new Contract([], '0x00000000219ab540356cBB839Cbe05303d7705Fa'); + + const defaultAddr = '0xd7E30ae310C1D1800F5B641Baa7af95b2e1FD98C'; + expect(contract.defaultAccount).toBeUndefined(); + contract.defaultAccount = defaultAddr; + expect(contract.defaultAccount).toStrictEqual(defaultAddr); + + const defaultBlock = '0xC43A'; + expect(contract.defaultBlock).toBe('latest'); + contract.defaultBlock = defaultBlock; + expect(contract.defaultBlock).toStrictEqual(defaultBlock); + + const defaultHardfork = 'constantinople'; + expect(contract.defaultHardfork).toBe('london'); + contract.defaultHardfork = defaultHardfork; + expect(contract.defaultHardfork).toStrictEqual(defaultHardfork); + + const baseChain = 'mainnet' as ValidChains; + contract.defaultChain = baseChain; + expect(contract.defaultChain).toBe(baseChain); + + const defaultCommonDifferentHardfork = { + customChain: { name: 'testnet', networkId: '5678', chainId: '5634' }, + baseChain, + hardfork: 'petersburg' as Hardfork, + }; + expect(contract.defaultCommon).toBeUndefined(); + + // Test that defaultcommon will error when defaulthardfork is not matching + // Has to be wrapped in another function to check Error + expect(() => { + contract.defaultCommon = defaultCommonDifferentHardfork; + }).toThrow( + new Error( + 'Web3Config hardfork doesnt match in defaultHardfork constantinople and common.hardfork petersburg', + ), + ); + + expect(contract.defaultCommon).toBeUndefined(); + + // Should error when defaultCommon has different chain than defaultChain + const defaultCommonDifferentChain = { + customChain: { name: 'testnet', networkId: '5678', chainId: '5634' }, + baseChain: 'sepolia' as ValidChains, + hardfork: 'constantinople' as Hardfork, + }; + expect(() => { + contract.defaultCommon = defaultCommonDifferentChain; + }).toThrow( + new Error( + 'Web3Config chain doesnt match in defaultHardfork mainnet and common.hardfork sepolia', + ), + ); + + expect(contract.defaultCommon).toBeUndefined(); + + const defaultCommon = { + customChain: { name: 'testnet', networkId: '5678', chainId: '5634' }, + baseChain: 'mainnet' as ValidChains, + hardfork: 'constantinople' as Hardfork, + }; + contract.defaultCommon = defaultCommon; + expect(contract.defaultCommon).toBe(defaultCommon); + + const transactionBlockTimeout = 130; + expect(contract.transactionBlockTimeout).toBe(50); + contract.transactionBlockTimeout = transactionBlockTimeout; + expect(contract.transactionBlockTimeout).toStrictEqual(transactionBlockTimeout); + + const transactionConfirmationBlocks = 30; + expect(contract.transactionConfirmationBlocks).toBe(24); + contract.transactionConfirmationBlocks = transactionConfirmationBlocks; + expect(contract.transactionConfirmationBlocks).toStrictEqual( + transactionConfirmationBlocks, + ); + + const transactionPollingInterval = 1000; + expect(contract.transactionPollingInterval).toBe(1000); + contract.transactionPollingInterval = transactionPollingInterval; + expect(contract.transactionPollingInterval).toStrictEqual(transactionPollingInterval); + + const transactionPollingTimeout = 800000; + expect(contract.transactionPollingTimeout).toBe(750000); + contract.transactionPollingTimeout = transactionPollingTimeout; + expect(contract.transactionPollingTimeout).toStrictEqual(transactionPollingTimeout); + + const transactionReceiptPollingInterval = 2000; // its new in 4.x + expect(contract.transactionReceiptPollingInterval).toBe(1000); + contract.transactionReceiptPollingInterval = transactionReceiptPollingInterval; + expect(contract.transactionReceiptPollingInterval).toStrictEqual( + transactionReceiptPollingInterval, + ); + + const transactionConfirmationPollingInterval = 2501; // its new in 4.x + expect(contract.transactionConfirmationPollingInterval).toBe(1000); + contract.transactionConfirmationPollingInterval = + transactionConfirmationPollingInterval; + expect(contract.transactionConfirmationPollingInterval).toStrictEqual( + transactionConfirmationPollingInterval, + ); + + const transactionSendTimeout = 730000; // its new in 4.x + expect(contract.transactionSendTimeout).toBe(750000); + contract.transactionSendTimeout = transactionSendTimeout; + expect(contract.transactionSendTimeout).toStrictEqual(transactionSendTimeout); + + const blockHeaderTimeout = 12; + expect(contract.blockHeaderTimeout).toBe(10); + contract.blockHeaderTimeout = blockHeaderTimeout; + expect(contract.blockHeaderTimeout).toStrictEqual(blockHeaderTimeout); + + expect(contract.handleRevert).toBe(false); + contract.handleRevert = true; + expect(contract.handleRevert).toBe(true); + }); + + it('should set and get correct address', () => { + const addr = '0x1230B93ffd14F2F022039675fA3fc3A46eE4C701'; + const contract = new Contract( + [], + '', + { gas: '123' }, + { config: { defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa' } }, + ); + + contract.options.address = addr; + expect(contract.options.address).toStrictEqual(addr); + }); + + it('should set, at the constructor, and later get jsonInterface', () => { + const contract = new Contract( + sampleStorageContractABI, + '0x1230B93ffd14F2F022039675fA3fc3A46eE4C701', + { gas: '123' }, + { config: { defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa' } }, + ); + + expect(contract.options.jsonInterface).toMatchObject(sampleStorageContractABI); + }); + + it('should set and get jsonInterface', () => { + const contract = new Contract( + sampleStorageContractABI, + '0x1230B93ffd14F2F022039675fA3fc3A46eE4C701', + { gas: '123' }, + { config: { defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa' } }, + ); + + contract.options.jsonInterface = ERC20TokenAbi; + expect(contract.options.jsonInterface).toMatchObject(ERC20TokenAbi); + }); + + it('should be able to call a payable method', async () => { + const contract = new Contract( + erc721Abi, + '0x1230B93ffd14F2F022039675fA3fc3A46eE4C701', + { gas: '123' }, + { config: { defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa' } }, + ); + + // @ts-expect-error fix-types + const spyEthCall = jest.spyOn(eth, 'call').mockImplementation((_objInstance, _tx) => { + expect(_tx.to).toBe('0x1230B93ffd14F2F022039675fA3fc3A46eE4C701'); + expect(_tx.input).toBe( + '0x095ea7b300000000000000000000000000000000219ab540356cbb839cbe05303d7705fa0000000000000000000000000000000000000000000000000000000000000001', + ); + return '0x00'; + }); + + await expect( + contract.methods.approve('0x00000000219ab540356cBB839Cbe05303d7705Fa', 1).call(), + ).resolves.toBeTruthy(); + + spyEthCall.mockClear(); + }); + + it('should be able to call a payable method with data as a contract init option', async () => { + const contract = new Contract( + erc721Abi, + '0x1230B93ffd14F2F022039675fA3fc3A46eE4C701', + { gas: '123', dataInputFill: 'data' }, + { config: { defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa' } }, + ); + + const spyEthCall = jest + .spyOn(eth, 'call') + .mockImplementation(async (_objInstance, _tx) => { + expect(_tx.to).toBe('0x1230B93ffd14F2F022039675fA3fc3A46eE4C701'); + expect(_tx.data).toBe( + '0x095ea7b300000000000000000000000000000000219ab540356cbb839cbe05303d7705fa0000000000000000000000000000000000000000000000000000000000000001', + ); + return '0x00'; + }); + + await expect( + contract.methods.approve('0x00000000219ab540356cBB839Cbe05303d7705Fa', 1).call(), + ).resolves.toBeTruthy(); + + spyEthCall.mockClear(); + }); + + it('should be able to call a payable method with input as a contract init option', async () => { + const contract = new Contract( + erc721Abi, + '0x1230B93ffd14F2F022039675fA3fc3A46eE4C701', + { gas: '123', dataInputFill: 'input' }, + { config: { defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa' } }, + ); + + const spyEthCall = jest + .spyOn(eth, 'call') + .mockImplementation(async (_objInstance, _tx) => { + expect(_tx.to).toBe('0x1230B93ffd14F2F022039675fA3fc3A46eE4C701'); + expect(_tx.input).toBe( + '0x095ea7b300000000000000000000000000000000219ab540356cbb839cbe05303d7705fa0000000000000000000000000000000000000000000000000000000000000001', + ); + return '0x00'; + }); + + await expect( + contract.methods.approve('0x00000000219ab540356cBB839Cbe05303d7705Fa', 1).call(), + ).resolves.toBeTruthy(); + + spyEthCall.mockClear(); + }); + + it('should be able to call a payable method with data as a web3Context option', async () => { + const expectedProvider = 'http://127.0.0.1:8545'; + const web3Context = new Web3Context({ + provider: expectedProvider, + config: { + contractDataInputFill: 'data', + defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa', + }, + }); + const contract = new Contract( + erc721Abi, + '0x1230B93ffd14F2F022039675fA3fc3A46eE4C701', + { gas: '123' }, + web3Context, + ); + + const spyEthCall = jest + .spyOn(eth, 'call') + .mockImplementation(async (_objInstance, _tx) => { + expect(_tx.to).toBe('0x1230B93ffd14F2F022039675fA3fc3A46eE4C701'); + expect(_tx.data).toBe( + '0x095ea7b300000000000000000000000000000000219ab540356cbb839cbe05303d7705fa0000000000000000000000000000000000000000000000000000000000000001', + ); + return '0x00'; + }); + + await expect( + contract.methods.approve('0x00000000219ab540356cBB839Cbe05303d7705Fa', 1).call(), + ).resolves.toBeTruthy(); + + spyEthCall.mockClear(); + }); + + it('should be able to call a payable method with both data and input as a web3Context option', async () => { + const expectedProvider = 'http://127.0.0.1:8545'; + const web3Context = new Web3Context({ + provider: expectedProvider, + config: { + contractDataInputFill: 'both', + defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa', + }, + }); + const contract = new Contract( + erc721Abi, + '0x1230B93ffd14F2F022039675fA3fc3A46eE4C701', + { gas: '123' }, + web3Context, + ); + + const spyEthCall = jest + .spyOn(eth, 'call') + .mockImplementation(async (_objInstance, _tx) => { + expect(_tx.to).toBe('0x1230B93ffd14F2F022039675fA3fc3A46eE4C701'); + expect(_tx.data).toBe( + '0x095ea7b300000000000000000000000000000000219ab540356cbb839cbe05303d7705fa0000000000000000000000000000000000000000000000000000000000000001', + ); + expect(_tx.input).toBe( + '0x095ea7b300000000000000000000000000000000219ab540356cbb839cbe05303d7705fa0000000000000000000000000000000000000000000000000000000000000001', + ); + return '0x00'; + }); + + await expect( + contract.methods.approve('0x00000000219ab540356cBB839Cbe05303d7705Fa', 1).call(), + ).resolves.toBeTruthy(); + + spyEthCall.mockClear(); + }); + + it('getPastEvents with filter should work', async () => { + const contract = new Contract(GreeterAbi); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const spyGetLogs = jest + .spyOn(eth, 'getLogs') + .mockImplementation((_objInstance, _params) => { + expect(_params.address).toStrictEqual(deployedAddr.toLocaleLowerCase()); + expect(_params.fromBlock).toStrictEqual(getLogsData.request.fromBlock); + expect(_params.toBlock).toStrictEqual(getLogsData.request.toBlock); + expect(_params.topics).toStrictEqual(getLogsData.request.topics); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(getLogsData.response) as any; + }); + + const deployedContract = await contract + .deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + + const fromBlock = 'earliest'; + const toBlock = 'latest'; + const pastEvent = await deployedContract.getPastEvents(getPastEventsData.event as any, { + fromBlock, + toBlock, + }); + + expect(pastEvent).toStrictEqual(getPastEventsData.response); + spyTx.mockClear(); + spyGetLogs.mockClear(); + }); + + it('getPastEvents with filter by topics should work', async () => { + const contract = new Contract(GreeterAbi); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const spyGetLogs = jest + .spyOn(eth, 'getLogs') + .mockImplementation((_objInstance, _params) => { + expect(_params.address).toStrictEqual(deployedAddr.toLocaleLowerCase()); + expect(_params.fromBlock).toStrictEqual(getLogsData.request.fromBlock); + expect(_params.toBlock).toStrictEqual(getLogsData.request.toBlock); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve([getLogsData.response[0]]) as any; + }); + + const deployedContract = await contract + .deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + + const fromBlock = 'earliest'; + const toBlock = 'latest'; + const pastEvent = await deployedContract.getPastEvents(getPastEventsData.event as any, { + fromBlock, + toBlock, + topics: ['0x7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e'], + }); + + expect(pastEvent).toStrictEqual(getPastEventsData.response); + spyTx.mockClear(); + spyGetLogs.mockClear(); + }); + + it('getPastEvents for all events should work', async () => { + const contract = new Contract(GreeterAbi); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const spyGetLogs = jest + .spyOn(eth, 'getLogs') + .mockImplementation((_objInstance, _params) => { + expect(_params.address).toStrictEqual(deployedAddr.toLocaleLowerCase()); + expect(_params.fromBlock).toBeUndefined(); + expect(_params.toBlock).toBeUndefined(); + expect(_params.topics).toBeUndefined(); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(AllGetPastEventsData.getLogsData) as any; // AllGetPastEventsData.getLogsData data test is for: assume two transactions sent to contract with contractInstance.methods.setGreeting("Hello") and contractInstance.methods.setGreeting("Another Greeting") + }); + + const deployedContract = await contract + .deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + + const pastEvent = await deployedContract.getPastEvents('allEvents'); + + expect(pastEvent).toStrictEqual(AllGetPastEventsData.response); + spyTx.mockClear(); + spyGetLogs.mockClear(); + }); + + it('getPastEvents for all events with filter should work', async () => { + const contract = new Contract(GreeterAbi); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const spyGetLogs = jest + .spyOn(eth, 'getLogs') + .mockImplementation((_objInstance, _params) => { + expect(_params.address).toStrictEqual(deployedAddr.toLocaleLowerCase()); + expect(_params.fromBlock).toBeUndefined(); + expect(_params.toBlock).toBeUndefined(); + expect(_params.topics).toBeUndefined(); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(AllGetPastEventsData.getLogsData) as any; // AllGetPastEventsData.getLogsData data test is for: assume two transactions sent to contract with contractInstance.methods.setGreeting("Hello") and contractInstance.methods.setGreeting("Another Greeting") + }); + + const deployedContract = await contract + .deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + + const pastEvent = await deployedContract.getPastEvents('allEvents', { + filter: { + greeting: 'Another Greeting', + }, + }); + + expect(pastEvent).toHaveLength(1); + expect(pastEvent[0]).toStrictEqual(AllGetPastEventsData.response[1]); + + const pastEventWithoutEventName = await deployedContract.getPastEvents({ + filter: { + greeting: 'Another Greeting', + }, + }); + + expect(pastEventWithoutEventName).toHaveLength(1); + expect(pastEventWithoutEventName[0]).toStrictEqual(AllGetPastEventsData.response[1]); + + const pastEventFilterArray = await deployedContract.getPastEvents({ + filter: { + greeting: ['Another Greeting'], + }, + }); + + expect(pastEventFilterArray).toHaveLength(1); + expect(pastEventFilterArray[0]).toStrictEqual(AllGetPastEventsData.response[1]); + + const pastEventFilterWithIncorrectParam = await deployedContract.getPastEvents({ + filter: { + incorrectParam: 'test', + }, + }); + expect(pastEventFilterWithIncorrectParam).toHaveLength(0); + + spyTx.mockClear(); + spyGetLogs.mockClear(); + }); + + it('getPastEvents for all events with filter by topics should work', async () => { + const contract = new Contract(GreeterAbi); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const spyGetLogs = jest + .spyOn(eth, 'getLogs') + .mockImplementation((_objInstance, _params) => { + expect(_params.address).toStrictEqual(deployedAddr.toLocaleLowerCase()); + expect(_params.fromBlock).toBeUndefined(); + expect(_params.toBlock).toBeUndefined(); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve([AllGetPastEventsData.getLogsData[1]]) as any; // AllGetPastEventsData.getLogsData data test is for: assume two transactions sent to contract with contractInstance.methods.setGreeting("Hello") and contractInstance.methods.setGreeting("Another Greeting") + }); + + const deployedContract = await contract + .deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + + const pastEvent = await deployedContract.getPastEvents({ + topics: ['0x7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e'], + }); + expect(pastEvent).toHaveLength(1); + expect(pastEvent[0]).toStrictEqual(AllGetPastEventsData.response[1]); + + spyTx.mockClear(); + spyGetLogs.mockClear(); + }); + + it('allEvents() should throw error with inner error', async () => { + const contract = new Contract(GreeterAbi); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const spyGetLogs = jest + .spyOn(eth, 'getLogs') + .mockImplementation((_objInstance, _params) => { + throw new Error('Inner error'); + }); + + const deployedContract = await contract + .deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }) + .send(sendOptions); + + await expect( + processAsync((resolve, reject) => { + const event = deployedContract.events.allEvents({ fromBlock: 'earliest' }); + + event.on('error', reject); + event.on('data', resolve); + }), + ).rejects.toThrow( + expect.objectContaining({ + innerError: expect.any(Error), + }), + ); + + spyTx.mockClear(); + spyGetLogs.mockClear(); + }); + + it('encodeABI should work for the deploy function using data', () => { + const contract = new Contract(GreeterAbi); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const deploy = contract.deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }); + + const result = deploy.encodeABI(); + expect(result).toBe( + '0x60806040523480156200001157600080fd5b5060405162000ed038038062000ed08339818101604052810190620000379190620001ea565b806001908162000048919062000486565b5060008081905550506200056d565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000c08262000075565b810181811067ffffffffffffffff82111715620000e257620000e162000086565b5b80604052505050565b6000620000f762000057565b9050620001058282620000b5565b919050565b600067ffffffffffffffff82111562000128576200012762000086565b5b620001338262000075565b9050602081019050919050565b60005b838110156200016057808201518184015260208101905062000143565b60008484015250505050565b6000620001836200017d846200010a565b620000eb565b905082815260208101848484011115620001a257620001a162000070565b5b620001af84828562000140565b509392505050565b600082601f830112620001cf57620001ce6200006b565b5b8151620001e18482602086016200016c565b91505092915050565b60006020828403121562000203576200020262000061565b5b600082015167ffffffffffffffff81111562000224576200022362000066565b5b6200023284828501620001b7565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028e57607f821691505b602082108103620002a457620002a362000246565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200030e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002cf565b6200031a8683620002cf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000367620003616200035b8462000332565b6200033c565b62000332565b9050919050565b6000819050919050565b620003838362000346565b6200039b62000392826200036e565b848454620002dc565b825550505050565b600090565b620003b2620003a3565b620003bf81848462000378565b505050565b5b81811015620003e757620003db600082620003a8565b600181019050620003c5565b5050565b601f82111562000436576200040081620002aa565b6200040b84620002bf565b810160208510156200041b578190505b620004336200042a85620002bf565b830182620003c4565b50505b505050565b600082821c905092915050565b60006200045b600019846008026200043b565b1980831691505092915050565b600062000476838362000448565b9150826002028217905092915050565b62000491826200023b565b67ffffffffffffffff811115620004ad57620004ac62000086565b5b620004b9825462000275565b620004c6828285620003eb565b600060209050601f831160018114620004fe5760008415620004e9578287015190505b620004f5858262000468565b86555062000565565b601f1984166200050e86620002aa565b60005b82811015620005385784890151825560018201915060208501945060208101905062000511565b8683101562000558578489015162000554601f89168262000448565b8355505b6001600288020188555050505b505050505050565b610953806200057d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063a413686214610046578063cfae321714610077578063d09de08a14610095575b600080fd5b610060600480360381019061005b91906103c0565b61009f565b60405161006e9291906104a3565b60405180910390f35b61007f6101bd565b60405161008c91906104d3565b60405180910390f35b61009d61024f565b005b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756001846040516100d59291906105ee565b60405180910390a182600190816100ec91906107c6565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600160405161011d9190610898565b60405180910390a160018080805461013490610524565b80601f016020809104026020016040519081016040528092919081815260200182805461016090610524565b80156101ad5780601f10610182576101008083540402835291602001916101ad565b820191906000526020600020905b81548152906001019060200180831161019057829003601f168201915b5050505050905091509150915091565b6060600180546101cc90610524565b80601f01602080910402602001604051908101604052809291908181526020018280546101f890610524565b80156102455780601f1061021a57610100808354040283529160200191610245565b820191906000526020600020905b81548152906001019060200180831161022857829003601f168201915b5050505050905090565b600160005461025e91906108e9565b600081905550565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6102cd82610284565b810181811067ffffffffffffffff821117156102ec576102eb610295565b5b80604052505050565b60006102ff610266565b905061030b82826102c4565b919050565b600067ffffffffffffffff82111561032b5761032a610295565b5b61033482610284565b9050602081019050919050565b82818337600083830152505050565b600061036361035e84610310565b6102f5565b90508281526020810184848401111561037f5761037e61027f565b5b61038a848285610341565b509392505050565b600082601f8301126103a7576103a661027a565b5b81356103b7848260208601610350565b91505092915050565b6000602082840312156103d6576103d5610270565b5b600082013567ffffffffffffffff8111156103f4576103f3610275565b5b61040084828501610392565b91505092915050565b60008115159050919050565b61041e81610409565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561045e578082015181840152602081019050610443565b60008484015250505050565b600061047582610424565b61047f818561042f565b935061048f818560208601610440565b61049881610284565b840191505092915050565b60006040820190506104b86000830185610415565b81810360208301526104ca818461046a565b90509392505050565b600060208201905081810360008301526104ed818461046a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061053c57607f821691505b60208210810361054f5761054e6104f5565b5b50919050565b60008190508160005260206000209050919050565b6000815461057781610524565b610581818661042f565b9450600182166000811461059c57600181146105b2576105e5565b60ff1983168652811515602002860193506105e5565b6105bb85610555565b60005b838110156105dd578154818901526001820191506020810190506105be565b808801955050505b50505092915050565b60006040820190508181036000830152610608818561056a565b9050818103602083015261061c818461046a565b90509392505050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026106727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610635565b61067c8683610635565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006106c36106be6106b984610694565b61069e565b610694565b9050919050565b6000819050919050565b6106dd836106a8565b6106f16106e9826106ca565b848454610642565b825550505050565b600090565b6107066106f9565b6107118184846106d4565b505050565b5b818110156107355761072a6000826106fe565b600181019050610717565b5050565b601f82111561077a5761074b81610555565b61075484610625565b81016020851015610763578190505b61077761076f85610625565b830182610716565b50505b505050565b600082821c905092915050565b600061079d6000198460080261077f565b1980831691505092915050565b60006107b6838361078c565b9150826002028217905092915050565b6107cf82610424565b67ffffffffffffffff8111156107e8576107e7610295565b5b6107f28254610524565b6107fd828285610739565b600060209050601f831160018114610830576000841561081e578287015190505b61082885826107aa565b865550610890565b601f19841661083e86610555565b60005b8281101561086657848901518255600182019150602085019450602081019050610841565b86831015610883578489015161087f601f89168261078c565b8355505b6001600288020188555050505b505050505050565b600060208201905081810360008301526108b2818461056a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006108f482610694565b91506108ff83610694565b9250828201905080821115610917576109166108ba565b5b9291505056fea26469706673582212207e5ba44159ffb37af8e8a9e7c5b6fb5ce81ea195b62ae3ac36288f2cf72c18a764736f6c634300081000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b4d79204772656574696e67000000000000000000000000000000000000000000', + ); + + spyTx.mockClear(); + }); + + it('estimateGas should work for the deploy function using input', async () => { + const contract = new Contract(GreeterAbi); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const spyEstimateGas = jest + .spyOn(eth, 'estimateGas') + .mockImplementationOnce((_objInstance, _tx, _block, returnFormat) => { + expect(_block).toBe('latest'); + expect(_tx.to).toBeUndefined(); + expect(_tx.from).toStrictEqual(sendOptions.from); + expect(_tx.input).toBe( + '0x60806040523480156200001157600080fd5b5060405162000ed038038062000ed08339818101604052810190620000379190620001ea565b806001908162000048919062000486565b5060008081905550506200056d565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000c08262000075565b810181811067ffffffffffffffff82111715620000e257620000e162000086565b5b80604052505050565b6000620000f762000057565b9050620001058282620000b5565b919050565b600067ffffffffffffffff82111562000128576200012762000086565b5b620001338262000075565b9050602081019050919050565b60005b838110156200016057808201518184015260208101905062000143565b60008484015250505050565b6000620001836200017d846200010a565b620000eb565b905082815260208101848484011115620001a257620001a162000070565b5b620001af84828562000140565b509392505050565b600082601f830112620001cf57620001ce6200006b565b5b8151620001e18482602086016200016c565b91505092915050565b60006020828403121562000203576200020262000061565b5b600082015167ffffffffffffffff81111562000224576200022362000066565b5b6200023284828501620001b7565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028e57607f821691505b602082108103620002a457620002a362000246565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200030e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002cf565b6200031a8683620002cf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000367620003616200035b8462000332565b6200033c565b62000332565b9050919050565b6000819050919050565b620003838362000346565b6200039b62000392826200036e565b848454620002dc565b825550505050565b600090565b620003b2620003a3565b620003bf81848462000378565b505050565b5b81811015620003e757620003db600082620003a8565b600181019050620003c5565b5050565b601f82111562000436576200040081620002aa565b6200040b84620002bf565b810160208510156200041b578190505b620004336200042a85620002bf565b830182620003c4565b50505b505050565b600082821c905092915050565b60006200045b600019846008026200043b565b1980831691505092915050565b600062000476838362000448565b9150826002028217905092915050565b62000491826200023b565b67ffffffffffffffff811115620004ad57620004ac62000086565b5b620004b9825462000275565b620004c6828285620003eb565b600060209050601f831160018114620004fe5760008415620004e9578287015190505b620004f5858262000468565b86555062000565565b601f1984166200050e86620002aa565b60005b82811015620005385784890151825560018201915060208501945060208101905062000511565b8683101562000558578489015162000554601f89168262000448565b8355505b6001600288020188555050505b505050505050565b610953806200057d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063a413686214610046578063cfae321714610077578063d09de08a14610095575b600080fd5b610060600480360381019061005b91906103c0565b61009f565b60405161006e9291906104a3565b60405180910390f35b61007f6101bd565b60405161008c91906104d3565b60405180910390f35b61009d61024f565b005b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756001846040516100d59291906105ee565b60405180910390a182600190816100ec91906107c6565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600160405161011d9190610898565b60405180910390a160018080805461013490610524565b80601f016020809104026020016040519081016040528092919081815260200182805461016090610524565b80156101ad5780601f10610182576101008083540402835291602001916101ad565b820191906000526020600020905b81548152906001019060200180831161019057829003601f168201915b5050505050905091509150915091565b6060600180546101cc90610524565b80601f01602080910402602001604051908101604052809291908181526020018280546101f890610524565b80156102455780601f1061021a57610100808354040283529160200191610245565b820191906000526020600020905b81548152906001019060200180831161022857829003601f168201915b5050505050905090565b600160005461025e91906108e9565b600081905550565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6102cd82610284565b810181811067ffffffffffffffff821117156102ec576102eb610295565b5b80604052505050565b60006102ff610266565b905061030b82826102c4565b919050565b600067ffffffffffffffff82111561032b5761032a610295565b5b61033482610284565b9050602081019050919050565b82818337600083830152505050565b600061036361035e84610310565b6102f5565b90508281526020810184848401111561037f5761037e61027f565b5b61038a848285610341565b509392505050565b600082601f8301126103a7576103a661027a565b5b81356103b7848260208601610350565b91505092915050565b6000602082840312156103d6576103d5610270565b5b600082013567ffffffffffffffff8111156103f4576103f3610275565b5b61040084828501610392565b91505092915050565b60008115159050919050565b61041e81610409565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561045e578082015181840152602081019050610443565b60008484015250505050565b600061047582610424565b61047f818561042f565b935061048f818560208601610440565b61049881610284565b840191505092915050565b60006040820190506104b86000830185610415565b81810360208301526104ca818461046a565b90509392505050565b600060208201905081810360008301526104ed818461046a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061053c57607f821691505b60208210810361054f5761054e6104f5565b5b50919050565b60008190508160005260206000209050919050565b6000815461057781610524565b610581818661042f565b9450600182166000811461059c57600181146105b2576105e5565b60ff1983168652811515602002860193506105e5565b6105bb85610555565b60005b838110156105dd578154818901526001820191506020810190506105be565b808801955050505b50505092915050565b60006040820190508181036000830152610608818561056a565b9050818103602083015261061c818461046a565b90509392505050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026106727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610635565b61067c8683610635565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006106c36106be6106b984610694565b61069e565b610694565b9050919050565b6000819050919050565b6106dd836106a8565b6106f16106e9826106ca565b848454610642565b825550505050565b600090565b6107066106f9565b6107118184846106d4565b505050565b5b818110156107355761072a6000826106fe565b600181019050610717565b5050565b601f82111561077a5761074b81610555565b61075484610625565b81016020851015610763578190505b61077761076f85610625565b830182610716565b50505b505050565b600082821c905092915050565b600061079d6000198460080261077f565b1980831691505092915050565b60006107b6838361078c565b9150826002028217905092915050565b6107cf82610424565b67ffffffffffffffff8111156107e8576107e7610295565b5b6107f28254610524565b6107fd828285610739565b600060209050601f831160018114610830576000841561081e578287015190505b61082885826107aa565b865550610890565b601f19841661083e86610555565b60005b8281101561086657848901518255600182019150602085019450602081019050610841565b86831015610883578489015161087f601f89168261078c565b8355505b6001600288020188555050505b505050505050565b600060208201905081810360008301526108b2818461056a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006108f482610694565b91506108ff83610694565b9250828201905080821115610917576109166108ba565b5b9291505056fea26469706673582212207e5ba44159ffb37af8e8a9e7c5b6fb5ce81ea195b62ae3ac36288f2cf72c18a764736f6c634300081000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b4d79204772656574696e67000000000000000000000000000000000000000000', + ); + expect(returnFormat).toBe(ETH_DATA_FORMAT); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(BigInt(36916)) as any; + }); + + const deploy = contract.deploy({ + input: GreeterBytecode, + arguments: ['My Greeting'], + }); + + const result = await deploy.estimateGas(sendOptions, ETH_DATA_FORMAT); + expect(result).toStrictEqual(BigInt(36916)); + + spyTx.mockClear(); + spyEstimateGas.mockClear(); + }); + + it('estimateGas should work for the deploy function using data', async () => { + const contract = new Contract(GreeterAbi); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const spyEstimateGas = jest + .spyOn(eth, 'estimateGas') + .mockImplementationOnce((_objInstance, _tx, _block, returnFormat) => { + expect(_block).toBe('latest'); + expect(_tx.to).toBeUndefined(); + expect(_tx.from).toStrictEqual(sendOptions.from); + expect(_tx.data).toBe( + '0x60806040523480156200001157600080fd5b5060405162000ed038038062000ed08339818101604052810190620000379190620001ea565b806001908162000048919062000486565b5060008081905550506200056d565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000c08262000075565b810181811067ffffffffffffffff82111715620000e257620000e162000086565b5b80604052505050565b6000620000f762000057565b9050620001058282620000b5565b919050565b600067ffffffffffffffff82111562000128576200012762000086565b5b620001338262000075565b9050602081019050919050565b60005b838110156200016057808201518184015260208101905062000143565b60008484015250505050565b6000620001836200017d846200010a565b620000eb565b905082815260208101848484011115620001a257620001a162000070565b5b620001af84828562000140565b509392505050565b600082601f830112620001cf57620001ce6200006b565b5b8151620001e18482602086016200016c565b91505092915050565b60006020828403121562000203576200020262000061565b5b600082015167ffffffffffffffff81111562000224576200022362000066565b5b6200023284828501620001b7565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028e57607f821691505b602082108103620002a457620002a362000246565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200030e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002cf565b6200031a8683620002cf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000367620003616200035b8462000332565b6200033c565b62000332565b9050919050565b6000819050919050565b620003838362000346565b6200039b62000392826200036e565b848454620002dc565b825550505050565b600090565b620003b2620003a3565b620003bf81848462000378565b505050565b5b81811015620003e757620003db600082620003a8565b600181019050620003c5565b5050565b601f82111562000436576200040081620002aa565b6200040b84620002bf565b810160208510156200041b578190505b620004336200042a85620002bf565b830182620003c4565b50505b505050565b600082821c905092915050565b60006200045b600019846008026200043b565b1980831691505092915050565b600062000476838362000448565b9150826002028217905092915050565b62000491826200023b565b67ffffffffffffffff811115620004ad57620004ac62000086565b5b620004b9825462000275565b620004c6828285620003eb565b600060209050601f831160018114620004fe5760008415620004e9578287015190505b620004f5858262000468565b86555062000565565b601f1984166200050e86620002aa565b60005b82811015620005385784890151825560018201915060208501945060208101905062000511565b8683101562000558578489015162000554601f89168262000448565b8355505b6001600288020188555050505b505050505050565b610953806200057d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063a413686214610046578063cfae321714610077578063d09de08a14610095575b600080fd5b610060600480360381019061005b91906103c0565b61009f565b60405161006e9291906104a3565b60405180910390f35b61007f6101bd565b60405161008c91906104d3565b60405180910390f35b61009d61024f565b005b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756001846040516100d59291906105ee565b60405180910390a182600190816100ec91906107c6565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600160405161011d9190610898565b60405180910390a160018080805461013490610524565b80601f016020809104026020016040519081016040528092919081815260200182805461016090610524565b80156101ad5780601f10610182576101008083540402835291602001916101ad565b820191906000526020600020905b81548152906001019060200180831161019057829003601f168201915b5050505050905091509150915091565b6060600180546101cc90610524565b80601f01602080910402602001604051908101604052809291908181526020018280546101f890610524565b80156102455780601f1061021a57610100808354040283529160200191610245565b820191906000526020600020905b81548152906001019060200180831161022857829003601f168201915b5050505050905090565b600160005461025e91906108e9565b600081905550565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6102cd82610284565b810181811067ffffffffffffffff821117156102ec576102eb610295565b5b80604052505050565b60006102ff610266565b905061030b82826102c4565b919050565b600067ffffffffffffffff82111561032b5761032a610295565b5b61033482610284565b9050602081019050919050565b82818337600083830152505050565b600061036361035e84610310565b6102f5565b90508281526020810184848401111561037f5761037e61027f565b5b61038a848285610341565b509392505050565b600082601f8301126103a7576103a661027a565b5b81356103b7848260208601610350565b91505092915050565b6000602082840312156103d6576103d5610270565b5b600082013567ffffffffffffffff8111156103f4576103f3610275565b5b61040084828501610392565b91505092915050565b60008115159050919050565b61041e81610409565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561045e578082015181840152602081019050610443565b60008484015250505050565b600061047582610424565b61047f818561042f565b935061048f818560208601610440565b61049881610284565b840191505092915050565b60006040820190506104b86000830185610415565b81810360208301526104ca818461046a565b90509392505050565b600060208201905081810360008301526104ed818461046a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061053c57607f821691505b60208210810361054f5761054e6104f5565b5b50919050565b60008190508160005260206000209050919050565b6000815461057781610524565b610581818661042f565b9450600182166000811461059c57600181146105b2576105e5565b60ff1983168652811515602002860193506105e5565b6105bb85610555565b60005b838110156105dd578154818901526001820191506020810190506105be565b808801955050505b50505092915050565b60006040820190508181036000830152610608818561056a565b9050818103602083015261061c818461046a565b90509392505050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026106727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610635565b61067c8683610635565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006106c36106be6106b984610694565b61069e565b610694565b9050919050565b6000819050919050565b6106dd836106a8565b6106f16106e9826106ca565b848454610642565b825550505050565b600090565b6107066106f9565b6107118184846106d4565b505050565b5b818110156107355761072a6000826106fe565b600181019050610717565b5050565b601f82111561077a5761074b81610555565b61075484610625565b81016020851015610763578190505b61077761076f85610625565b830182610716565b50505b505050565b600082821c905092915050565b600061079d6000198460080261077f565b1980831691505092915050565b60006107b6838361078c565b9150826002028217905092915050565b6107cf82610424565b67ffffffffffffffff8111156107e8576107e7610295565b5b6107f28254610524565b6107fd828285610739565b600060209050601f831160018114610830576000841561081e578287015190505b61082885826107aa565b865550610890565b601f19841661083e86610555565b60005b8281101561086657848901518255600182019150602085019450602081019050610841565b86831015610883578489015161087f601f89168261078c565b8355505b6001600288020188555050505b505050505050565b600060208201905081810360008301526108b2818461056a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006108f482610694565b91506108ff83610694565b9250828201905080821115610917576109166108ba565b5b9291505056fea26469706673582212207e5ba44159ffb37af8e8a9e7c5b6fb5ce81ea195b62ae3ac36288f2cf72c18a764736f6c634300081000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b4d79204772656574696e67000000000000000000000000000000000000000000', + ); + expect(returnFormat).toBe(ETH_DATA_FORMAT); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(BigInt(36916)) as any; + }); + + const deploy = contract.deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }); + + const result = await deploy.estimateGas(sendOptions, ETH_DATA_FORMAT); + expect(result).toStrictEqual(BigInt(36916)); + + spyTx.mockClear(); + spyEstimateGas.mockClear(); + }); + + it('estimateGas should work for the deploy function using both data and input web3config', async () => { + const expectedProvider = 'http://127.0.0.1:8545'; + const web3Context = new Web3Context({ + provider: expectedProvider, + config: { contractDataInputFill: 'both' }, + }); + + const contract = new Contract(GreeterAbi, web3Context); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const spyEstimateGas = jest + .spyOn(eth, 'estimateGas') + .mockImplementationOnce((_objInstance, _tx, _block, returnFormat) => { + expect(_block).toBe('latest'); + expect(_tx.to).toBeUndefined(); + expect(_tx.from).toStrictEqual(sendOptions.from); + expect(_tx.data).toBe( + '0x60806040523480156200001157600080fd5b5060405162000ed038038062000ed08339818101604052810190620000379190620001ea565b806001908162000048919062000486565b5060008081905550506200056d565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000c08262000075565b810181811067ffffffffffffffff82111715620000e257620000e162000086565b5b80604052505050565b6000620000f762000057565b9050620001058282620000b5565b919050565b600067ffffffffffffffff82111562000128576200012762000086565b5b620001338262000075565b9050602081019050919050565b60005b838110156200016057808201518184015260208101905062000143565b60008484015250505050565b6000620001836200017d846200010a565b620000eb565b905082815260208101848484011115620001a257620001a162000070565b5b620001af84828562000140565b509392505050565b600082601f830112620001cf57620001ce6200006b565b5b8151620001e18482602086016200016c565b91505092915050565b60006020828403121562000203576200020262000061565b5b600082015167ffffffffffffffff81111562000224576200022362000066565b5b6200023284828501620001b7565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028e57607f821691505b602082108103620002a457620002a362000246565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200030e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002cf565b6200031a8683620002cf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000367620003616200035b8462000332565b6200033c565b62000332565b9050919050565b6000819050919050565b620003838362000346565b6200039b62000392826200036e565b848454620002dc565b825550505050565b600090565b620003b2620003a3565b620003bf81848462000378565b505050565b5b81811015620003e757620003db600082620003a8565b600181019050620003c5565b5050565b601f82111562000436576200040081620002aa565b6200040b84620002bf565b810160208510156200041b578190505b620004336200042a85620002bf565b830182620003c4565b50505b505050565b600082821c905092915050565b60006200045b600019846008026200043b565b1980831691505092915050565b600062000476838362000448565b9150826002028217905092915050565b62000491826200023b565b67ffffffffffffffff811115620004ad57620004ac62000086565b5b620004b9825462000275565b620004c6828285620003eb565b600060209050601f831160018114620004fe5760008415620004e9578287015190505b620004f5858262000468565b86555062000565565b601f1984166200050e86620002aa565b60005b82811015620005385784890151825560018201915060208501945060208101905062000511565b8683101562000558578489015162000554601f89168262000448565b8355505b6001600288020188555050505b505050505050565b610953806200057d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063a413686214610046578063cfae321714610077578063d09de08a14610095575b600080fd5b610060600480360381019061005b91906103c0565b61009f565b60405161006e9291906104a3565b60405180910390f35b61007f6101bd565b60405161008c91906104d3565b60405180910390f35b61009d61024f565b005b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756001846040516100d59291906105ee565b60405180910390a182600190816100ec91906107c6565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600160405161011d9190610898565b60405180910390a160018080805461013490610524565b80601f016020809104026020016040519081016040528092919081815260200182805461016090610524565b80156101ad5780601f10610182576101008083540402835291602001916101ad565b820191906000526020600020905b81548152906001019060200180831161019057829003601f168201915b5050505050905091509150915091565b6060600180546101cc90610524565b80601f01602080910402602001604051908101604052809291908181526020018280546101f890610524565b80156102455780601f1061021a57610100808354040283529160200191610245565b820191906000526020600020905b81548152906001019060200180831161022857829003601f168201915b5050505050905090565b600160005461025e91906108e9565b600081905550565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6102cd82610284565b810181811067ffffffffffffffff821117156102ec576102eb610295565b5b80604052505050565b60006102ff610266565b905061030b82826102c4565b919050565b600067ffffffffffffffff82111561032b5761032a610295565b5b61033482610284565b9050602081019050919050565b82818337600083830152505050565b600061036361035e84610310565b6102f5565b90508281526020810184848401111561037f5761037e61027f565b5b61038a848285610341565b509392505050565b600082601f8301126103a7576103a661027a565b5b81356103b7848260208601610350565b91505092915050565b6000602082840312156103d6576103d5610270565b5b600082013567ffffffffffffffff8111156103f4576103f3610275565b5b61040084828501610392565b91505092915050565b60008115159050919050565b61041e81610409565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561045e578082015181840152602081019050610443565b60008484015250505050565b600061047582610424565b61047f818561042f565b935061048f818560208601610440565b61049881610284565b840191505092915050565b60006040820190506104b86000830185610415565b81810360208301526104ca818461046a565b90509392505050565b600060208201905081810360008301526104ed818461046a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061053c57607f821691505b60208210810361054f5761054e6104f5565b5b50919050565b60008190508160005260206000209050919050565b6000815461057781610524565b610581818661042f565b9450600182166000811461059c57600181146105b2576105e5565b60ff1983168652811515602002860193506105e5565b6105bb85610555565b60005b838110156105dd578154818901526001820191506020810190506105be565b808801955050505b50505092915050565b60006040820190508181036000830152610608818561056a565b9050818103602083015261061c818461046a565b90509392505050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026106727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610635565b61067c8683610635565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006106c36106be6106b984610694565b61069e565b610694565b9050919050565b6000819050919050565b6106dd836106a8565b6106f16106e9826106ca565b848454610642565b825550505050565b600090565b6107066106f9565b6107118184846106d4565b505050565b5b818110156107355761072a6000826106fe565b600181019050610717565b5050565b601f82111561077a5761074b81610555565b61075484610625565b81016020851015610763578190505b61077761076f85610625565b830182610716565b50505b505050565b600082821c905092915050565b600061079d6000198460080261077f565b1980831691505092915050565b60006107b6838361078c565b9150826002028217905092915050565b6107cf82610424565b67ffffffffffffffff8111156107e8576107e7610295565b5b6107f28254610524565b6107fd828285610739565b600060209050601f831160018114610830576000841561081e578287015190505b61082885826107aa565b865550610890565b601f19841661083e86610555565b60005b8281101561086657848901518255600182019150602085019450602081019050610841565b86831015610883578489015161087f601f89168261078c565b8355505b6001600288020188555050505b505050505050565b600060208201905081810360008301526108b2818461056a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006108f482610694565b91506108ff83610694565b9250828201905080821115610917576109166108ba565b5b9291505056fea26469706673582212207e5ba44159ffb37af8e8a9e7c5b6fb5ce81ea195b62ae3ac36288f2cf72c18a764736f6c634300081000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b4d79204772656574696e67000000000000000000000000000000000000000000', + ); + expect(_tx.input).toBe( + '0x60806040523480156200001157600080fd5b5060405162000ed038038062000ed08339818101604052810190620000379190620001ea565b806001908162000048919062000486565b5060008081905550506200056d565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000c08262000075565b810181811067ffffffffffffffff82111715620000e257620000e162000086565b5b80604052505050565b6000620000f762000057565b9050620001058282620000b5565b919050565b600067ffffffffffffffff82111562000128576200012762000086565b5b620001338262000075565b9050602081019050919050565b60005b838110156200016057808201518184015260208101905062000143565b60008484015250505050565b6000620001836200017d846200010a565b620000eb565b905082815260208101848484011115620001a257620001a162000070565b5b620001af84828562000140565b509392505050565b600082601f830112620001cf57620001ce6200006b565b5b8151620001e18482602086016200016c565b91505092915050565b60006020828403121562000203576200020262000061565b5b600082015167ffffffffffffffff81111562000224576200022362000066565b5b6200023284828501620001b7565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028e57607f821691505b602082108103620002a457620002a362000246565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200030e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002cf565b6200031a8683620002cf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000367620003616200035b8462000332565b6200033c565b62000332565b9050919050565b6000819050919050565b620003838362000346565b6200039b62000392826200036e565b848454620002dc565b825550505050565b600090565b620003b2620003a3565b620003bf81848462000378565b505050565b5b81811015620003e757620003db600082620003a8565b600181019050620003c5565b5050565b601f82111562000436576200040081620002aa565b6200040b84620002bf565b810160208510156200041b578190505b620004336200042a85620002bf565b830182620003c4565b50505b505050565b600082821c905092915050565b60006200045b600019846008026200043b565b1980831691505092915050565b600062000476838362000448565b9150826002028217905092915050565b62000491826200023b565b67ffffffffffffffff811115620004ad57620004ac62000086565b5b620004b9825462000275565b620004c6828285620003eb565b600060209050601f831160018114620004fe5760008415620004e9578287015190505b620004f5858262000468565b86555062000565565b601f1984166200050e86620002aa565b60005b82811015620005385784890151825560018201915060208501945060208101905062000511565b8683101562000558578489015162000554601f89168262000448565b8355505b6001600288020188555050505b505050505050565b610953806200057d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063a413686214610046578063cfae321714610077578063d09de08a14610095575b600080fd5b610060600480360381019061005b91906103c0565b61009f565b60405161006e9291906104a3565b60405180910390f35b61007f6101bd565b60405161008c91906104d3565b60405180910390f35b61009d61024f565b005b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756001846040516100d59291906105ee565b60405180910390a182600190816100ec91906107c6565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600160405161011d9190610898565b60405180910390a160018080805461013490610524565b80601f016020809104026020016040519081016040528092919081815260200182805461016090610524565b80156101ad5780601f10610182576101008083540402835291602001916101ad565b820191906000526020600020905b81548152906001019060200180831161019057829003601f168201915b5050505050905091509150915091565b6060600180546101cc90610524565b80601f01602080910402602001604051908101604052809291908181526020018280546101f890610524565b80156102455780601f1061021a57610100808354040283529160200191610245565b820191906000526020600020905b81548152906001019060200180831161022857829003601f168201915b5050505050905090565b600160005461025e91906108e9565b600081905550565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6102cd82610284565b810181811067ffffffffffffffff821117156102ec576102eb610295565b5b80604052505050565b60006102ff610266565b905061030b82826102c4565b919050565b600067ffffffffffffffff82111561032b5761032a610295565b5b61033482610284565b9050602081019050919050565b82818337600083830152505050565b600061036361035e84610310565b6102f5565b90508281526020810184848401111561037f5761037e61027f565b5b61038a848285610341565b509392505050565b600082601f8301126103a7576103a661027a565b5b81356103b7848260208601610350565b91505092915050565b6000602082840312156103d6576103d5610270565b5b600082013567ffffffffffffffff8111156103f4576103f3610275565b5b61040084828501610392565b91505092915050565b60008115159050919050565b61041e81610409565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561045e578082015181840152602081019050610443565b60008484015250505050565b600061047582610424565b61047f818561042f565b935061048f818560208601610440565b61049881610284565b840191505092915050565b60006040820190506104b86000830185610415565b81810360208301526104ca818461046a565b90509392505050565b600060208201905081810360008301526104ed818461046a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061053c57607f821691505b60208210810361054f5761054e6104f5565b5b50919050565b60008190508160005260206000209050919050565b6000815461057781610524565b610581818661042f565b9450600182166000811461059c57600181146105b2576105e5565b60ff1983168652811515602002860193506105e5565b6105bb85610555565b60005b838110156105dd578154818901526001820191506020810190506105be565b808801955050505b50505092915050565b60006040820190508181036000830152610608818561056a565b9050818103602083015261061c818461046a565b90509392505050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026106727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610635565b61067c8683610635565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006106c36106be6106b984610694565b61069e565b610694565b9050919050565b6000819050919050565b6106dd836106a8565b6106f16106e9826106ca565b848454610642565b825550505050565b600090565b6107066106f9565b6107118184846106d4565b505050565b5b818110156107355761072a6000826106fe565b600181019050610717565b5050565b601f82111561077a5761074b81610555565b61075484610625565b81016020851015610763578190505b61077761076f85610625565b830182610716565b50505b505050565b600082821c905092915050565b600061079d6000198460080261077f565b1980831691505092915050565b60006107b6838361078c565b9150826002028217905092915050565b6107cf82610424565b67ffffffffffffffff8111156107e8576107e7610295565b5b6107f28254610524565b6107fd828285610739565b600060209050601f831160018114610830576000841561081e578287015190505b61082885826107aa565b865550610890565b601f19841661083e86610555565b60005b8281101561086657848901518255600182019150602085019450602081019050610841565b86831015610883578489015161087f601f89168261078c565b8355505b6001600288020188555050505b505050505050565b600060208201905081810360008301526108b2818461056a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006108f482610694565b91506108ff83610694565b9250828201905080821115610917576109166108ba565b5b9291505056fea26469706673582212207e5ba44159ffb37af8e8a9e7c5b6fb5ce81ea195b62ae3ac36288f2cf72c18a764736f6c634300081000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b4d79204772656574696e67000000000000000000000000000000000000000000', + ); + expect(returnFormat).toBe(ETH_DATA_FORMAT); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(BigInt(36916)) as any; + }); + + const deploy = contract.deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }); + + const result = await deploy.estimateGas(sendOptions, ETH_DATA_FORMAT); + expect(result).toStrictEqual(BigInt(36916)); + + spyTx.mockClear(); + spyEstimateGas.mockClear(); + }); + it('estimateGas should work for the deploy function using data web3config', async () => { + const expectedProvider = 'http://127.0.0.1:8545'; + const web3Context = new Web3Context({ + provider: expectedProvider, + config: { contractDataInputFill: 'data' }, + }); + + const contract = new Contract(GreeterAbi, web3Context); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const spyEstimateGas = jest + .spyOn(eth, 'estimateGas') + .mockImplementationOnce((_objInstance, _tx, _block, returnFormat) => { + expect(_block).toBe('latest'); + expect(_tx.to).toBeUndefined(); + expect(_tx.from).toStrictEqual(sendOptions.from); + expect(_tx.data).toBe( + '0x60806040523480156200001157600080fd5b5060405162000ed038038062000ed08339818101604052810190620000379190620001ea565b806001908162000048919062000486565b5060008081905550506200056d565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000c08262000075565b810181811067ffffffffffffffff82111715620000e257620000e162000086565b5b80604052505050565b6000620000f762000057565b9050620001058282620000b5565b919050565b600067ffffffffffffffff82111562000128576200012762000086565b5b620001338262000075565b9050602081019050919050565b60005b838110156200016057808201518184015260208101905062000143565b60008484015250505050565b6000620001836200017d846200010a565b620000eb565b905082815260208101848484011115620001a257620001a162000070565b5b620001af84828562000140565b509392505050565b600082601f830112620001cf57620001ce6200006b565b5b8151620001e18482602086016200016c565b91505092915050565b60006020828403121562000203576200020262000061565b5b600082015167ffffffffffffffff81111562000224576200022362000066565b5b6200023284828501620001b7565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028e57607f821691505b602082108103620002a457620002a362000246565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200030e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002cf565b6200031a8683620002cf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000367620003616200035b8462000332565b6200033c565b62000332565b9050919050565b6000819050919050565b620003838362000346565b6200039b62000392826200036e565b848454620002dc565b825550505050565b600090565b620003b2620003a3565b620003bf81848462000378565b505050565b5b81811015620003e757620003db600082620003a8565b600181019050620003c5565b5050565b601f82111562000436576200040081620002aa565b6200040b84620002bf565b810160208510156200041b578190505b620004336200042a85620002bf565b830182620003c4565b50505b505050565b600082821c905092915050565b60006200045b600019846008026200043b565b1980831691505092915050565b600062000476838362000448565b9150826002028217905092915050565b62000491826200023b565b67ffffffffffffffff811115620004ad57620004ac62000086565b5b620004b9825462000275565b620004c6828285620003eb565b600060209050601f831160018114620004fe5760008415620004e9578287015190505b620004f5858262000468565b86555062000565565b601f1984166200050e86620002aa565b60005b82811015620005385784890151825560018201915060208501945060208101905062000511565b8683101562000558578489015162000554601f89168262000448565b8355505b6001600288020188555050505b505050505050565b610953806200057d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063a413686214610046578063cfae321714610077578063d09de08a14610095575b600080fd5b610060600480360381019061005b91906103c0565b61009f565b60405161006e9291906104a3565b60405180910390f35b61007f6101bd565b60405161008c91906104d3565b60405180910390f35b61009d61024f565b005b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756001846040516100d59291906105ee565b60405180910390a182600190816100ec91906107c6565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600160405161011d9190610898565b60405180910390a160018080805461013490610524565b80601f016020809104026020016040519081016040528092919081815260200182805461016090610524565b80156101ad5780601f10610182576101008083540402835291602001916101ad565b820191906000526020600020905b81548152906001019060200180831161019057829003601f168201915b5050505050905091509150915091565b6060600180546101cc90610524565b80601f01602080910402602001604051908101604052809291908181526020018280546101f890610524565b80156102455780601f1061021a57610100808354040283529160200191610245565b820191906000526020600020905b81548152906001019060200180831161022857829003601f168201915b5050505050905090565b600160005461025e91906108e9565b600081905550565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6102cd82610284565b810181811067ffffffffffffffff821117156102ec576102eb610295565b5b80604052505050565b60006102ff610266565b905061030b82826102c4565b919050565b600067ffffffffffffffff82111561032b5761032a610295565b5b61033482610284565b9050602081019050919050565b82818337600083830152505050565b600061036361035e84610310565b6102f5565b90508281526020810184848401111561037f5761037e61027f565b5b61038a848285610341565b509392505050565b600082601f8301126103a7576103a661027a565b5b81356103b7848260208601610350565b91505092915050565b6000602082840312156103d6576103d5610270565b5b600082013567ffffffffffffffff8111156103f4576103f3610275565b5b61040084828501610392565b91505092915050565b60008115159050919050565b61041e81610409565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561045e578082015181840152602081019050610443565b60008484015250505050565b600061047582610424565b61047f818561042f565b935061048f818560208601610440565b61049881610284565b840191505092915050565b60006040820190506104b86000830185610415565b81810360208301526104ca818461046a565b90509392505050565b600060208201905081810360008301526104ed818461046a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061053c57607f821691505b60208210810361054f5761054e6104f5565b5b50919050565b60008190508160005260206000209050919050565b6000815461057781610524565b610581818661042f565b9450600182166000811461059c57600181146105b2576105e5565b60ff1983168652811515602002860193506105e5565b6105bb85610555565b60005b838110156105dd578154818901526001820191506020810190506105be565b808801955050505b50505092915050565b60006040820190508181036000830152610608818561056a565b9050818103602083015261061c818461046a565b90509392505050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026106727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610635565b61067c8683610635565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006106c36106be6106b984610694565b61069e565b610694565b9050919050565b6000819050919050565b6106dd836106a8565b6106f16106e9826106ca565b848454610642565b825550505050565b600090565b6107066106f9565b6107118184846106d4565b505050565b5b818110156107355761072a6000826106fe565b600181019050610717565b5050565b601f82111561077a5761074b81610555565b61075484610625565b81016020851015610763578190505b61077761076f85610625565b830182610716565b50505b505050565b600082821c905092915050565b600061079d6000198460080261077f565b1980831691505092915050565b60006107b6838361078c565b9150826002028217905092915050565b6107cf82610424565b67ffffffffffffffff8111156107e8576107e7610295565b5b6107f28254610524565b6107fd828285610739565b600060209050601f831160018114610830576000841561081e578287015190505b61082885826107aa565b865550610890565b601f19841661083e86610555565b60005b8281101561086657848901518255600182019150602085019450602081019050610841565b86831015610883578489015161087f601f89168261078c565b8355505b6001600288020188555050505b505050505050565b600060208201905081810360008301526108b2818461056a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006108f482610694565b91506108ff83610694565b9250828201905080821115610917576109166108ba565b5b9291505056fea26469706673582212207e5ba44159ffb37af8e8a9e7c5b6fb5ce81ea195b62ae3ac36288f2cf72c18a764736f6c634300081000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b4d79204772656574696e67000000000000000000000000000000000000000000', + ); + expect(returnFormat).toBe(ETH_DATA_FORMAT); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(BigInt(36916)) as any; + }); + + const deploy = contract.deploy({ + data: GreeterBytecode, + arguments: ['My Greeting'], + }); + + const result = await deploy.estimateGas(sendOptions, ETH_DATA_FORMAT); + expect(result).toStrictEqual(BigInt(36916)); + + spyTx.mockClear(); + spyEstimateGas.mockClear(); + }); + + it('estimateGas should work for contract method', async () => { + const arg = 'Hello'; + + const contract = new Contract(GreeterAbi, { data: GreeterBytecode }); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const spyEstimateGas = jest + .spyOn(eth, 'estimateGas') + .mockImplementationOnce((_objInstance, _tx, _block) => { + expect(_block).toBe('latest'); + expect(_tx.to).toStrictEqual(deployedAddr); + expect(_tx.from).toStrictEqual(sendOptions.from); + expect(_tx.data).toBe( + '0xa41368620000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000548656c6c6f000000000000000000000000000000000000000000000000000000', + ); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(BigInt(36916)) as any; + }); + + const deployedContract = await contract + .deploy({ + arguments: ['My Greeting'], + }) + .send(sendOptions); + + const result = await deployedContract.methods.setGreeting(arg).estimateGas(sendOptions); + expect(result).toStrictEqual(BigInt(36916)); + + spyTx.mockClear(); + spyEstimateGas.mockClear(); + }); + + it('encodeABI should work for contract method', async () => { + const arg = 'Hello'; + + const contract = new Contract(GreeterAbi, { data: GreeterBytecode }); + + const spyTx = jest.spyOn(eth, 'sendTransaction').mockImplementation(() => { + const newContract = contract.clone(); + newContract.options.address = deployedAddr; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(newContract) as any; + }); + + const deployedContract = await contract + .deploy({ + arguments: ['My Greeting'], + }) + .send(sendOptions); + + const result = deployedContract.methods.setGreeting(arg).encodeABI(); + + expect(result).toBe( + '0xa41368620000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000548656c6c6f000000000000000000000000000000000000000000000000000000', + ); + + spyTx.mockClear(); + }); + + it('contract method send without contract address should throw error', async () => { + const arg = 'Hello'; + + const contract = new Contract(GreeterAbi); + + await expect(async () => { + await contract.methods.setGreeting(arg).send(sendOptions); + }).rejects.toThrow(new Web3ContractError('Contract address not specified')); + }); + + it('contract method send without from address should throw error', async () => { + const gas = '1000000'; + const sendOptionsSpecial = { gas }; + const arg = 'Hello'; + + const contract = new Contract(GreeterAbi); + contract.options.address = '0x12364916b10Ae90076dDa6dE756EE1395BB69ec2'; + + /* eslint-disable no-useless-escape */ + await expect(async () => { + await contract.methods.setGreeting(arg).send(sendOptionsSpecial); + }).rejects.toThrow('Contract "from" address not specified'); + }); + + it('contract method createAccessList should work', async () => { + const fromAddr: Address = '0x20bc23D0598b12c34cBDEf1fae439Ba8744DB426'; + const result: AccessListResult = { + accessList: [ + { + address: deployedAddr, + storageKeys: [ + '0x0000000000000000000000000000000000000000000000000000000000000001', + ], + }, + ], + gasUsed: '0x644e', + }; + + const contract = new Contract(GreeterAbi, deployedAddr); + + const spyEthCall = jest + .spyOn(eth, 'createAccessList') + .mockImplementation((_objInstance, _tx) => { + expect(_tx.to).toStrictEqual(deployedAddr); + expect(_tx.input).toBe('0xcfae3217'); + expect(_tx.from).toBe(fromAddr); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(result) as any; // contract class should decode encodedArg + }); + + const res = await contract.methods.greet().createAccessList({ from: fromAddr }); + expect(res).toStrictEqual(result); + + spyEthCall.mockClear(); + }); + + it('contract method createAccessList should work using data with web3config', async () => { + const expectedProvider = 'http://127.0.0.1:8545'; + const web3Context = new Web3Context({ + provider: expectedProvider, + config: { contractDataInputFill: 'data' }, + }); + const fromAddr: Address = '0x20bc23D0598b12c34cBDEf1fae439Ba8744DB426'; + const result: AccessListResult = { + accessList: [ + { + address: deployedAddr, + storageKeys: [ + '0x0000000000000000000000000000000000000000000000000000000000000001', + ], + }, + ], + gasUsed: '0x644e', + }; + + const contract = new Contract(GreeterAbi, deployedAddr, web3Context); + + const spyEthCall = jest + .spyOn(eth, 'createAccessList') + .mockImplementation((_objInstance, _tx) => { + expect(_tx.to).toStrictEqual(deployedAddr); + expect(_tx.data).toBe('0xcfae3217'); + expect(_tx.from).toBe(fromAddr); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(result) as any; // contract class should decode encodedArg + }); + + const res = await contract.methods.greet().createAccessList({ from: fromAddr }); + expect(res).toStrictEqual(result); + + spyEthCall.mockClear(); + }); + it('contract method createAccessList should work using data with web3config with both input and data', async () => { + const expectedProvider = 'http://127.0.0.1:8545'; + const web3Context = new Web3Context({ + provider: expectedProvider, + config: { contractDataInputFill: 'both' }, + }); + const fromAddr: Address = '0x20bc23D0598b12c34cBDEf1fae439Ba8744DB426'; + const result: AccessListResult = { + accessList: [ + { + address: deployedAddr, + storageKeys: [ + '0x0000000000000000000000000000000000000000000000000000000000000001', + ], + }, + ], + gasUsed: '0x644e', + }; + + const contract = new Contract(GreeterAbi, deployedAddr, web3Context); + + const spyEthCall = jest + .spyOn(eth, 'createAccessList') + .mockImplementation((_objInstance, _tx) => { + expect(_tx.to).toStrictEqual(deployedAddr); + expect(_tx.data).toBe('0xcfae3217'); + expect(_tx.input).toBe('0xcfae3217'); + expect(_tx.from).toBe(fromAddr); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Promise.resolve(result) as any; // contract class should decode encodedArg + }); + + const res = await contract.methods.greet().createAccessList({ from: fromAddr }); + expect(res).toStrictEqual(result); + + spyEthCall.mockClear(); + }); + + it('should correctly apply provided Web3Context to new Contract instance', () => { + const expectedProvider = 'http://127.0.0.1:8545'; + const web3Context = new Web3Context({ + provider: expectedProvider, + config: { handleRevert: true, defaultTransactionType: '0x2' }, + }); + const contract = new Contract(GreeterAbi, web3Context); + expect(contract.config).toStrictEqual(web3Context.config); + }); + }); +}); diff --git a/packages/web3-eth-contract/test/unit/contract_typing.test.ts b/packages/web3-eth-contract/test/unit/contract_typing.test.ts new file mode 100644 index 00000000000..47ec3b88e15 --- /dev/null +++ b/packages/web3-eth-contract/test/unit/contract_typing.test.ts @@ -0,0 +1,102 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable jest/expect-expect */ + +import { expectTypeOf, typecheck } from '@humeris/espresso-shot'; +import { Numbers } from 'web3-types'; +import { Contract } from '../../src/contract'; +import { erc20Abi, Erc20Interface } from '../fixtures/erc20'; +import { erc721Abi, Erc721Interface } from '../fixtures/erc721'; +import { NonPayableMethodObject, PayableMethodObject } from '../../src'; + +describe('contract typing', () => { + describe('custom abi', () => { + const abi = [ + { + inputs: [ + { + internalType: 'string', + name: 'tokenId', + type: 'string', + }, + ], + name: 'tokenURI', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + ] as const; + const contractInstance = new Contract(abi); + interface CustomInterface { + methods: { + [key: string]: ( + ...args: ReadonlyArray + ) => + | PayableMethodObject, ReadonlyArray> + | NonPayableMethodObject, ReadonlyArray>; + tokenURI: (tokenId: Numbers) => NonPayableMethodObject<[Numbers], [string]>; + }; + } + + typecheck('should contain all methods', () => + expectTypeOf().toBe< + keyof CustomInterface['methods'] + >(), + ); + }); + describe('erc20', () => { + const contract = new Contract(erc20Abi); + + typecheck('should contain all methods', () => + expectTypeOf().toBe(), + ); + + typecheck('should have interface compliance methods', () => + expectTypeOf(contract.methods).toExtend(), + ); + + typecheck('should have all events', () => + expectTypeOf().toBe(), + ); + + typecheck('should have interface compliance events', () => + expectTypeOf(contract.events).toExtend(), + ); + }); + + describe('erc721', () => { + const contract = new Contract(erc721Abi); + + typecheck('should contain all methods', () => + expectTypeOf().toBe(), + ); + + // TODO: It's not matching types for `safeTransferFrom` because of overloaded method + // typecheck('should have interface compliance methods', () => + // expectTypeOf(contract.methods).toExtend(), + // ); + + typecheck('should have all events', () => + expectTypeOf().toBe(), + ); + + typecheck('should have interface compliance events', () => + expectTypeOf(contract.events).toExtend(), + ); + }); +}); diff --git a/packages/web3-eth-contract/test/unit/encode_event_abi.test.ts b/packages/web3-eth-contract/test/unit/encode_event_abi.test.ts new file mode 100644 index 00000000000..c4353806ba9 --- /dev/null +++ b/packages/web3-eth-contract/test/unit/encode_event_abi.test.ts @@ -0,0 +1,205 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AbiEventFragment, ContractOptions } from 'web3-types'; +import { encodeEventABI } from '../../src'; + +const contractOptions: ContractOptions = { + address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', +} as ContractOptions; +const abiEventFragment: AbiEventFragment & { signature: string } = { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'string', + name: 'str', + type: 'string', + }, + { + indexed: true, + internalType: 'uint256', + name: 'val', + type: 'uint256', + }, + { + indexed: true, + internalType: 'bool', + name: 'flag', + type: 'bool', + }, + ], + name: 'MultiValueIndexedEventWithStringIndexed', + type: 'event', + signature: '0x5b5730af07e266d8b4845f404beb3b193085c686b0edd8e8e20cd4b3fc2b6cd5', +}; + +describe('encodeEventAbi', () => { + it('should format fromBlock for filter', () => { + const encodedEventFilter = encodeEventABI(contractOptions, abiEventFragment, { + fromBlock: 10, + }); + + expect(encodedEventFilter).toMatchObject({ + fromBlock: '0xa', + address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', + }); + }); + + it('should format toBlock for filter', () => { + const encodedEventFilter = encodeEventABI(contractOptions, abiEventFragment, { + toBlock: 10, + }); + + expect(encodedEventFilter).toMatchObject({ + toBlock: '0xa', + address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', + }); + }); + + it('should set topics array for filter to given topics array', () => { + const encodedEventFilter = encodeEventABI(contractOptions, abiEventFragment, { + topics: ['0x3f6d5d7b72c0059e2ecac56fd4adeefb2cff23aa41d13170f78ea6bf81e6e0ca'], + }); + + expect(encodedEventFilter).toMatchObject({ + topics: ['0x3f6d5d7b72c0059e2ecac56fd4adeefb2cff23aa41d13170f78ea6bf81e6e0ca'], + address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', + }); + }); + + it('should set filter to get all events for address starting at fromBlock', () => { + const encodedEventFilter = encodeEventABI( + contractOptions, + { + anonymous: false, + name: 'ALLEVENTS', + type: 'event', + signature: '0x5b5730af07e266d8b4845f404beb3b193085c686b0edd8e8e20cd4b3fc2b6cd5', + }, + { + fromBlock: 1000, + }, + ); + + expect(encodedEventFilter).toMatchObject({ + fromBlock: '0x3e8', + address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', + }); + }); + + // This test fails because encoding of a dynamic sized array is not current supported + // Received error: AbiError: Parameter encoding error + it.skip('should set the filter topics to the keccak256 hash of the provided filter value', () => { + const _abiEventFragment: AbiEventFragment & { signature: string } = { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'uint256[]', + name: 'vals', + type: 'uint256[]', + }, + ], + name: 'IndexedArrayEvent', + type: 'event', + signature: '0x71aefd401e4886a78931d42be506247958b9751348fa91aa2f9dbbd557e9208e', + }; + + encodeEventABI(contractOptions, _abiEventFragment, { + filter: { + vals: [1, 2, 3], + }, + }); + }); + + // This test fails because encoding of a dynamic sized array is not current supported + // Received error: AbiError: Parameter encoding error + it.skip('should set the filter topics', () => { + const _abiEventFragment: AbiEventFragment & { signature: string } = { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'uint256[]', + name: 'vals', + type: 'uint256[]', + }, + { + indexed: true, + internalType: 'string[]', + name: 'strs', + type: 'string[]', + }, + { + indexed: true, + internalType: 'bool[]', + name: 'flags', + type: 'bool[]', + }, + ], + name: 'IndexedMultiValArrayEvent', + type: 'event', + signature: '0x9b5a12617e7ca791109ef5e09b8cc23cb4034e0e3dfb4aadac37b55fd28718f6', + }; + + encodeEventABI(contractOptions, _abiEventFragment, { + filter: { + vals: [1, 2, 3], + }, + }); + }); + + it('should filter by the keccak256 of the provided indexed string filter', () => { + const encodedEventFilter = encodeEventABI(contractOptions, abiEventFragment, { + filter: { + str: 'str4', + }, + }); + + expect(encodedEventFilter).toMatchObject({ + topics: [ + '0x5b5730af07e266d8b4845f404beb3b193085c686b0edd8e8e20cd4b3fc2b6cd5', + '0x3f6d5d7b72c0059e2ecac56fd4adeefb2cff23aa41d13170f78ea6bf81e6e0ca', + // eslint-disable-next-line no-null/no-null + null, + // eslint-disable-next-line no-null/no-null + null, + ], + address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', + }); + }); + + it('should filter by the provided bool filter', () => { + const encodedEventFilter = encodeEventABI(contractOptions, abiEventFragment, { + filter: { + flag: true, + }, + }); + + expect(encodedEventFilter).toMatchObject({ + topics: [ + '0x5b5730af07e266d8b4845f404beb3b193085c686b0edd8e8e20cd4b3fc2b6cd5', + // eslint-disable-next-line no-null/no-null + null, + // eslint-disable-next-line no-null/no-null + null, + '0x0000000000000000000000000000000000000000000000000000000000000001', + ], + address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', + }); + }); +}); diff --git a/packages/web3-eth-contract/test/unit/jest.config.js b/packages/web3-eth-contract/test/unit/jest.config.js new file mode 100644 index 00000000000..06b5f59117a --- /dev/null +++ b/packages/web3-eth-contract/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-eth-contract-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-eth-contract/tsconfig.cjs.json b/packages/web3-eth-contract/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-eth-contract/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-eth-contract/tsconfig.esm.json b/packages/web3-eth-contract/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-eth-contract/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-eth-contract/tsconfig.json b/packages/web3-eth-contract/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-eth-contract/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-eth-contract/tsconfig.types.json b/packages/web3-eth-contract/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-eth-contract/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-eth-contract/tsdoc.json b/packages/web3-eth-contract/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-eth-contract/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-eth-contract/types/index.d.ts b/packages/web3-eth-contract/types/index.d.ts deleted file mode 100644 index 3b8485e7ce9..00000000000 --- a/packages/web3-eth-contract/types/index.d.ts +++ /dev/null @@ -1,175 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {Common, PromiEvent, provider, hardfork, chain, BlockNumber, PastLogsOptions, LogsOptions} from 'web3-core'; -import {AbiItem} from 'web3-utils'; - -// TODO: Add generic type! -export class Contract { - constructor( - jsonInterface: AbiItem[], - address?: string, - options?: ContractOptions - ); - - private _address: string; - private _jsonInterface: AbiItem[]; - defaultAccount: string | null; - defaultBlock: BlockNumber; - defaultCommon: Common; - defaultHardfork: hardfork; - defaultChain: chain; - transactionPollingTimeout: number; - transactionConfirmationBlocks: number; - transactionBlockTimeout: number; - handleRevert: boolean; - - options: Options; - - clone(): Contract; - - deploy(options: DeployOptions): ContractSendMethod; - - methods: any; - - once( - event: string, - callback: (error: Error, event: EventData) => void - ): void; - once( - event: string, - options: EventOptions, - callback: (error: Error, event: EventData) => void - ): void; - - events: any; - - getPastEvents(event: string): Promise; - getPastEvents( - event: string, - options: PastEventOptions, - callback: (error: Error, event: EventData) => void - ): Promise; - getPastEvents(event: string, options: PastEventOptions): Promise; - getPastEvents( - event: string, - callback: (error: Error, event: EventData) => void - ): Promise; -} - -export interface Options extends ContractOptions { - address: string; - jsonInterface: AbiItem[]; -} - -export interface DeployOptions { - data: string; - arguments?: any[]; -} - -export interface ContractSendMethod { - send( - options: SendOptions, - callback?: (err: Error, transactionHash: string) => void - ): PromiEvent; - - call( - options?: CallOptions, - callback?: (err: Error, result: any) => void - ): Promise; - - estimateGas( - options: EstimateGasOptions, - callback?: (err: Error, gas: number) => void - ): Promise; - - estimateGas(callback: (err: Error, gas: number) => void): Promise; - - estimateGas( - options: EstimateGasOptions, - callback: (err: Error, gas: number) => void - ): Promise; - - estimateGas(options: EstimateGasOptions): Promise; - - estimateGas(): Promise; - - encodeABI(): string; -} - -export interface CallOptions { - from?: string; - gasPrice?: string; - gas?: number; -} - -export interface SendOptions { - from: string; - gasPrice?: string; - gas?: number; - value?: number | string | BN; -} - -export interface EstimateGasOptions { - from?: string; - gas?: number; - value?: number | string | BN; -} - -export interface ContractOptions { - // Sender to use for contract calls - from?: string; - // Gas price to use for contract calls - gasPrice?: string; - // Gas to use for contract calls - gas?: number; - // Contract code - data?: string; -} - -export interface PastEventOptions extends PastLogsOptions { - filter?: Filter; -} - -export interface EventOptions extends LogsOptions { - filter?: Filter; -} - -export interface Filter { - [key: string]: number | string | string[] | number[]; -} - -export interface EventData { - returnValues: { - [key: string]: any; - }; - raw: { - data: string; - topics: string[]; - }; - event: string; - signature: string; - logIndex: number; - transactionIndex: number; - transactionHash: string; - blockHash: string; - blockNumber: number; - address: string; -} diff --git a/packages/web3-eth-contract/types/tests/contract-test.ts b/packages/web3-eth-contract/types/tests/contract-test.ts deleted file mode 100644 index 56657810b37..00000000000 --- a/packages/web3-eth-contract/types/tests/contract-test.ts +++ /dev/null @@ -1,174 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract-tests.ts - * @author Josh Stevens - * @author Samuel Furter - * @date 2018 - */ - -import { Contract } from 'web3-eth-contract'; - -const contract = new Contract([]); - -// $ExpectType string | null -contract.defaultAccount; - -// $ExpectType BlockNumber -contract.defaultBlock; - -// $ExpectType Common -contract.defaultCommon; - -// $ExpectType hardfork -contract.defaultHardfork; - -// $ExpectType chain -contract.defaultChain; - -// $ExpectType number -contract.transactionPollingTimeout; - -// $ExpectType number -contract.transactionConfirmationBlocks; - -// $ExpectType number -contract.transactionBlockTimeout; - -// $ExpectType boolean -contract.handleRevert; - -// $ExpectType string -contract.options.address; - -// $ExpectType AbiItem[] -contract.options.jsonInterface; - -// $ExpectType string | undefined -contract.options.from; - -// $ExpectType number | undefined -contract.options.gas; - -// $ExpectType string | undefined -contract.options.gasPrice; - -// $ExpectType string | undefined -contract.options.data; - -// $ExpectType Contract -contract.clone(); - -// $ExpectType ContractSendMethod -contract.deploy({ - data: '0x12345...', - arguments: [123, 'My String'] -}); - -// $ExpectType void -contract.once( - 'MyEvent', - { - filter: { - myIndexedParam: [20, 23], - myOtherIndexedParam: '0x123456789...' - }, - fromBlock: 0 - }, - (error, event) => {} -); - -// $ExpectType void -contract.once('MyEvent', (error, event) => {}); - -// $ExpectType Promise -contract.getPastEvents('MyEvent'); - -// $ExpectType Promise -contract.getPastEvents('MyEvent', { - filter: { myIndexedParam: [20, 23], myOtherIndexedParam: '0x123456789...' }, - fromBlock: 0, - toBlock: 'latest' -}); - -// $ExpectType Promise -contract.getPastEvents('MyEvent', {}); - -// $ExpectType Promise -contract.getPastEvents( - 'MyEvent', - { - filter: { - myIndexedParam: [20, 23], - myOtherIndexedParam: '0x123456789...' - }, - fromBlock: 0, - toBlock: 'latest' - }, - (error, events) => {} -); - -// $ExpectType Promise -contract.getPastEvents('MyEvent', (error, events) => {}); - -// $ExpectType Promise -contract - .deploy({ - data: '0x12345...', - arguments: [123, 'My String'] - }) - .estimateGas(); - -// $ExpectType Promise -contract - .deploy({ - data: '0x12345...', - arguments: [123, 'My String'] - }) - .estimateGas({ from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' }); - -// $ExpectType Promise -contract - .deploy({ - data: '0x12345...', - arguments: [123, 'My String'] - }) - .estimateGas((err: Error, gas: number) => {}); - -// $ExpectType string -contract - .deploy({ - data: '0x12345...', - arguments: [123, 'My String'] - }) - .encodeABI(); - -// $ExpectType PromiEvent -contract - .deploy({ - data: '0x12345...', - arguments: [123, 'My String'] - }) - .send({ from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' }); - -// $ExpectType PromiEvent -contract - .deploy({ - data: '0x12345...', - arguments: [123, 'My String'] - }) - .send( - { from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' }, - (err: Error, transactionHash: string) => {} - ); diff --git a/packages/web3-eth-contract/types/tsconfig.json b/packages/web3-eth-contract/types/tsconfig.json deleted file mode 100644 index 906dd3fd159..00000000000 --- a/packages/web3-eth-contract/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-eth-contract": ["."] - } - } -} diff --git a/packages/web3-eth-contract/types/tslint.json b/packages/web3-eth-contract/types/tslint.json deleted file mode 100644 index 383b159dc72..00000000000 --- a/packages/web3-eth-contract/types/tslint.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false, - "no-empty-interface": false, - "unified-signatures": false, - "no-redundant-jsdoc": false - } -} diff --git a/packages/web3-eth-ens/.eslintignore b/packages/web3-eth-ens/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/packages/web3-eth-ens/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-ens/.eslintrc.js b/packages/web3-eth-ens/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-eth-ens/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth-ens/.gitignore b/packages/web3-eth-ens/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-eth-ens/.npmignore b/packages/web3-eth-ens/.npmignore new file mode 120000 index 00000000000..8a0be70f3ed --- /dev/null +++ b/packages/web3-eth-ens/.npmignore @@ -0,0 +1 @@ +../../templates/.npmignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-ens/.prettierignore b/packages/web3-eth-ens/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-eth-ens/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-ens/.prettierrc.json b/packages/web3-eth-ens/.prettierrc.json new file mode 120000 index 00000000000..00ecd510aaf --- /dev/null +++ b/packages/web3-eth-ens/.prettierrc.json @@ -0,0 +1 @@ +../../templates/.prettierrc.json.tmpl \ No newline at end of file diff --git a/packages/web3-eth-ens/CHANGELOG.md b/packages/web3-eth-ens/CHANGELOG.md new file mode 100644 index 00000000000..f47355882dd --- /dev/null +++ b/packages/web3-eth-ens/CHANGELOG.md @@ -0,0 +1,144 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [4.0.1-alpha.1] + +### Changed + +- `Web3NetAPI` is now imported from `web3-types` instead of `web3-net` (#5441) + +## [4.0.1-alpha.2] + +### Changed + +- Updated Web3.js dependencies (#5664) + +## [4.0.1-alpha.3] + +### Changed + +- Updated dependencies (#5725) + +## [4.0.1-alpha.4] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +## [4.0.1-alpha.5] + +### Changed + +- web3.js dependencies (#5757) + +## [4.0.1-rc.0] + +### Changed + +- Updated dependencies (#5912) + +## [4.0.1-rc.1] + +### Added + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +### Fixed + +- Bug fix of `checkNetwork` in ENS (#5988) + +## [4.0.1-rc.2] + +### Removed + +- Removed non read-only methods (#6084) + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Fixed + +- Fixed bug #6185, now web3.js compiles on typescript v5 (#6195) + +## [4.0.3] + +### Changed + +- Dependencies updated + +## [4.0.4] + +### Changed + +- Dependencies updated + +## [4.0.5] + +### Changed + +- Dependencies updated + +## [4.0.6] + +### Changed + +- Dependencies updated + +## [4.0.7] + +### Changed + +- Dependencies updated + +## [4.0.8] + +### Changed + +- Dependencies updated + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-eth-ens/README.md b/packages/web3-eth-ens/README.md index b96d2b458b4..ea4f306a767 100644 --- a/packages/web3-eth-ens/README.md +++ b/packages/web3-eth-ens/README.md @@ -1,41 +1,59 @@ -# web3-eth-ens +

+ web3.js +

-[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +# web3.js - ENS -This is a sub-package of [web3.js][repo]. +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] -This is the contract package to be used in the `web3-eth` package. +This is a sub-package of [web3.js][repo]. -Please read the [documentation][docs] for more. +`web3-eth-ens` This package has ENS functions for interacting with Ethereum Name Service. ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3-eth-ens) or using [Yarn](https://yarnpkg.com/package/web3-eth-ens) + +### Using NPM ```bash npm install web3-eth-ens ``` -## Usage +### Using Yarn -```js -const eth = new Web3Eth(web3.currentProvider); -const ens = new EthEns(eth); - -ens.getAddress('ethereum.eth').then(function(result) { - console.log(result); -}); +```bash +yarn add web3-eth-ens ``` -## Types +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts -All the TypeScript typings are placed in the `types` folder. +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-eth-ens.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-eth-ens +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-ens%2Fpackage.json [npm-url]: https://npmjs.org/package/web3-eth-ens -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-eth-ens -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-eth-ens -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-eth-ens -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-eth-ens \ No newline at end of file +[downloads-image]: https://img.shields.io/npm/dm/web3-eth-ens?label=npm%20downloads diff --git a/packages/web3-eth-ens/assets/logo/web3js.ai b/packages/web3-eth-ens/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-eth-ens/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-eth-ens/assets/logo/web3js.jpg b/packages/web3-eth-ens/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-eth-ens/assets/logo/web3js.jpg differ diff --git a/packages/web3-eth-ens/assets/logo/web3js.svg b/packages/web3-eth-ens/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-eth-ens/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-eth-ens/package-lock.json b/packages/web3-eth-ens/package-lock.json deleted file mode 100644 index a75c113fde8..00000000000 --- a/packages/web3-eth-ens/package-lock.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "web3-eth-ens", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-eth-ens/package.json b/packages/web3-eth-ens/package.json index 7da40c41877..6d38e795878 100644 --- a/packages/web3-eth-ens/package.json +++ b/packages/web3-eth-ens/package.json @@ -1,31 +1,71 @@ { - "name": "web3-eth-ens", - "version": "1.3.0", - "description": "ENS support for web3.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-eth-ens", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.3.0", - "web3-core-helpers": "1.3.0", - "web3-core-promievent": "1.3.0", - "web3-eth-abi": "1.3.0", - "web3-eth-contract": "1.3.0", - "web3-utils": "1.3.0" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3-eth-ens", + "version": "4.0.8", + "description": "This package has ENS functions for interacting with Ethereum Name Service.", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js", + "ens:download:registry": "curl -L -o test/fixtures/ens/registry.json 'https://api.etherscan.io/api?module=contract&action=getabi&address=0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'", + "ens:download:reverse_registrar": "curl -L -o test/fixtures/ens/reverse_registrar.json 'https://api.etherscan.io/api?module=contract&action=getabi&address=0x084b1c3c81545d370f3634392de611caabff8148'" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + }, + "dependencies": { + "@adraffy/ens-normalize": "^1.8.8", + "web3-core": "^4.3.0", + "web3-errors": "^1.1.3", + "web3-eth": "^4.3.1", + "web3-eth-contract": "^4.1.2", + "web3-net": "^4.0.7", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + } } diff --git a/packages/web3-eth-ens/src/ENS.js b/packages/web3-eth-ens/src/ENS.js deleted file mode 100644 index 604df14329d..00000000000 --- a/packages/web3-eth-ens/src/ENS.js +++ /dev/null @@ -1,538 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file ENS.js - * - * @author Samuel Furter - * @date 2018 - */ - -"use strict"; - -var _ = require('underscore'); -var config = require('./config'); -var formatters = require('web3-core-helpers').formatters; -var utils = require('web3-utils'); -var Registry = require('./contracts/Registry'); -var ResolverMethodHandler = require('./lib/ResolverMethodHandler'); -var contenthash = require('./lib/contentHash'); - -/** - * Constructs a new instance of ENS - * - * @param {Eth} eth - * - * @constructor - */ -function ENS(eth) { - this.eth = eth; - var registryAddress = null; - this._detectedAddress = null; - this._lastSyncCheck = null; - - Object.defineProperty(this, 'registry', { - get: function () { - return new Registry(this); - }, - enumerable: true - }); - - Object.defineProperty(this, 'resolverMethodHandler', { - get: function () { - return new ResolverMethodHandler(this.registry); - }, - enumerable: true - }); - - Object.defineProperty(this, 'registryAddress', { - get: function () { - return registryAddress; - }, - set: function (value) { - if (value === null) { - registryAddress = value; - - return; - } - - registryAddress = formatters.inputAddressFormatter(value); - }, - enumerable: true - }); -} - -/** - * Returns true if the given interfaceId is supported and otherwise false. - * - * @method supportsInterface - * - * @param {string} name - * @param {string} interfaceId - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {Promise} - */ -ENS.prototype.supportsInterface = function (name, interfaceId, callback) { - return this.getResolver(name).then(function (resolver) { - if (!utils.isHexStrict(interfaceId)) { - interfaceId = utils.sha3(interfaceId).slice(0,10); - } - - return resolver.methods.supportsInterface(interfaceId).call(callback); - }).catch(function(error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - throw error; - }); -}; - -/** - * Returns the Resolver by the given address - * - * @deprecated Please use the "getResolver" method instead of "resolver" - * - * @method resolver - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {Promise} - */ -ENS.prototype.resolver = function (name, callback) { - return this.registry.resolver(name, callback); -}; - -/** - * Returns the Resolver by the given address - * - * @method getResolver - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {Promise} - */ -ENS.prototype.getResolver = function (name, callback) { - return this.registry.getResolver(name, callback); -}; - -/** - * Does set the resolver of the given name - * - * @method setResolver - * - * @param {string} name - * @param {string} address - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.setResolver = function (name, address, txConfig, callback) { - return this.registry.setResolver(name, address, txConfig, callback); -}; - -/** - * Sets the owner, resolver, and TTL for an ENS record in a single operation. - * - * @method setRecord - * - * @param {string} name - * @param {string} owner - * @param {string} resolver - * @param {string | number} ttl - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.setRecord = function (name, owner, resolver, ttl, txConfig, callback) { - return this.registry.setRecord(name, owner, resolver, ttl, txConfig, callback); -}; - -/** - * Sets the owner, resolver and TTL for a subdomain, creating it if necessary. - * - * @method setSubnodeRecord - * - * @param {string} name - * @param {string} label - * @param {string} owner - * @param {string} resolver - * @param {string | number} ttl - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.setSubnodeRecord = function (name, label, owner, resolver, ttl, txConfig, callback) { - return this.registry.setSubnodeRecord(name, label, owner, resolver, ttl, txConfig, callback); -}; - -/** - * Sets or clears an approval by the given operator. - * - * @method setApprovalForAll - * - * @param {string} operator - * @param {boolean} approved - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.setApprovalForAll = function (operator, approved, txConfig, callback) { - return this.registry.setApprovalForAll(operator, approved, txConfig, callback); -}; - -/** - * Returns true if the operator is approved - * - * @method isApprovedForAll - * - * @param {string} owner - * @param {string} operator - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {Promise} - */ -ENS.prototype.isApprovedForAll = function (owner, operator, callback) { - return this.registry.isApprovedForAll(owner, operator, callback); -}; - -/** - * Returns true if the record exists - * - * @method recordExists - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {Promise} - */ -ENS.prototype.recordExists = function (name, callback) { - return this.registry.recordExists(name, callback); -}; - -/** - * Returns the address of the owner of an ENS name. - * - * @method setSubnodeOwner - * - * @param {string} name - * @param {string} label - * @param {string} address - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.setSubnodeOwner = function (name, label, address, txConfig, callback) { - return this.registry.setSubnodeOwner(name, label, address, txConfig, callback); -}; - -/** - * Returns the address of the owner of an ENS name. - * - * @method getTTL - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.getTTL = function (name, callback) { - return this.registry.getTTL(name, callback); -}; - -/** - * Returns the address of the owner of an ENS name. - * - * @method setTTL - * - * @param {string} name - * @param {number} ttl - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.setTTL = function (name, ttl, txConfig, callback) { - return this.registry.setTTL(name, ttl, txConfig, callback); -}; - -/** - * Returns the owner by the given name and current configured or detected Registry - * - * @method getOwner - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.getOwner = function (name, callback) { - return this.registry.getOwner(name, callback); -}; - -/** - * Returns the address of the owner of an ENS name. - * - * @method setOwner - * - * @param {string} name - * @param {string} address - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.setOwner = function (name, address, txConfig, callback) { - return this.registry.setOwner(name, address, txConfig, callback); -}; - -/** - * Returns the address record associated with a name. - * - * @method getAddress - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.getAddress = function (name, callback) { - return this.resolverMethodHandler.method(name, 'addr', []).call(callback); -}; - -/** - * Sets a new address - * - * @method setAddress - * - * @param {string} name - * @param {string} address - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.setAddress = function (name, address, txConfig, callback) { - return this.resolverMethodHandler.method(name, 'setAddr', [address]).send(txConfig, callback); -}; - -/** - * Returns the public key - * - * @method getPubkey - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.getPubkey = function (name, callback) { - return this.resolverMethodHandler.method(name, 'pubkey', [], null, callback).call(callback); -}; - -/** - * Set the new public key - * - * @method setPubkey - * - * @param {string} name - * @param {string} x - * @param {string} y - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.setPubkey = function (name, x, y, txConfig, callback) { - return this.resolverMethodHandler.method(name, 'setPubkey', [x, y]).send(txConfig, callback); -}; - -/** - * Returns the content - * - * @method getContent - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.getContent = function (name, callback) { - return this.resolverMethodHandler.method(name, 'content', []).call(callback); -}; - -/** - * Set the content - * - * @method setContent - * - * @param {string} name - * @param {string} hash - * @param {function} callback - * @param {TransactionConfig} txConfig - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.setContent = function (name, hash, txConfig, callback) { - return this.resolverMethodHandler.method(name, 'setContent', [hash]).send(txConfig, callback); -}; - -/** - * Returns the contenthash - * - * @method getContenthash - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.getContenthash = function (name, callback) { - return this.resolverMethodHandler.method(name, 'contenthash', [], contenthash.decode).call(callback); -}; - -/** - * Set the contenthash - * - * @method setContent - * - * @param {string} name - * @param {string} hash - * @param {function} callback - * @param {TransactionConfig} txConfig - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.setContenthash = function (name, hash, txConfig, callback) { - var encoded; - try { - encoded = contenthash.encode(hash); - } catch(err){ - var error = new Error('Could not encode ' + hash + '. See docs for supported hash protocols.'); - - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - throw error; - } - return this.resolverMethodHandler.method(name, 'setContenthash', [encoded]).send(txConfig, callback); -}; - -/** - * Get the multihash - * - * @method getMultihash - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.getMultihash = function (name, callback) { - return this.resolverMethodHandler.method(name, 'multihash', []).call(callback); -}; - -/** - * Set the multihash - * - * @method setMultihash - * - * @param {string} name - * @param {string} hash - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -ENS.prototype.setMultihash = function (name, hash, txConfig, callback) { - return this.resolverMethodHandler.method(name, 'multihash', [hash]).send(txConfig, callback); -}; - -/** - * Checks if the current used network is synced and looks for ENS support there. - * Throws an error if not. - * - * @returns {Promise} - */ -ENS.prototype.checkNetwork = async function () { - var now = new Date() / 1000; - - if (!this._lastSyncCheck || (now - this._lastSyncCheck) > 3600) { - var block = await this.eth.getBlock('latest'); - var headAge = now - block.timestamp; - - if (headAge > 3600) { - throw new Error("Network not synced; last block was " + headAge + " seconds ago"); - } - - this._lastSyncCheck = now; - } - - if (this.registryAddress) { - return this.registryAddress; - } - - if (!this._detectedAddress) { - var networkType = await this.eth.net.getNetworkType(); - var addr = config.addresses[networkType]; - - if (typeof addr === 'undefined') { - throw new Error("ENS is not supported on network " + networkType); - } - - this._detectedAddress = addr; - - return this._detectedAddress; - } - - return this._detectedAddress; -}; - -module.exports = ENS; diff --git a/packages/web3-eth-ens/src/abi/ens/ENSRegistry.ts b/packages/web3-eth-ens/src/abi/ens/ENSRegistry.ts new file mode 100644 index 00000000000..bcac4c53170 --- /dev/null +++ b/packages/web3-eth-ens/src/abi/ens/ENSRegistry.ts @@ -0,0 +1,183 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// https://github.com/ensdomains/ens-contracts/blob/master/contracts/registry/ENSRegistry.sol +export const ENSRegistryAbi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'NewOwner', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'resolver', + type: 'address', + }, + ], + name: 'NewResolver', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + ], + name: 'isApprovedForAll', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'owner', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'recordExists', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'ttl', + outputs: [ + { + internalType: 'uint64', + name: '', + type: 'uint64', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] as const; diff --git a/packages/web3-eth-ens/src/abi/ens/PublicResolver.ts b/packages/web3-eth-ens/src/abi/ens/PublicResolver.ts new file mode 100644 index 00000000000..83b927bfb69 --- /dev/null +++ b/packages/web3-eth-ens/src/abi/ens/PublicResolver.ts @@ -0,0 +1,593 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// https://github.com/ensdomains/ens-contracts/blob/master/contracts/resolvers/PublicResolver.sol +export const PublicResolverAbi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'a', + type: 'address', + }, + ], + name: 'AddrChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + { + indexed: false, + internalType: 'bytes', + name: 'newAddress', + type: 'bytes', + }, + ], + name: 'AddressChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'operator', + type: 'address', + }, + { + indexed: false, + internalType: 'bool', + name: 'approved', + type: 'bool', + }, + ], + name: 'ApprovalForAll', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'hash', + type: 'bytes', + }, + ], + name: 'ContenthashChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'name', + type: 'bytes', + }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + { + indexed: false, + internalType: 'bytes', + name: 'record', + type: 'bytes', + }, + ], + name: 'DNSRecordChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'name', + type: 'bytes', + }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + ], + name: 'DNSRecordDeleted', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'DNSZoneCleared', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'lastzonehash', + type: 'bytes', + }, + { + indexed: false, + internalType: 'bytes', + name: 'zonehash', + type: 'bytes', + }, + ], + name: 'DNSZonehashChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + { + indexed: false, + internalType: 'address', + name: 'implementer', + type: 'address', + }, + ], + name: 'InterfaceChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'string', + name: 'name', + type: 'string', + }, + ], + name: 'NameChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + name: 'PubkeyChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'string', + name: 'indexedKey', + type: 'string', + }, + { + indexed: false, + internalType: 'string', + name: 'key', + type: 'string', + }, + ], + name: 'TextChanged', + type: 'event', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'contentTypes', + type: 'uint256', + }, + ], + name: 'ABI', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'addr', + outputs: [ + { + internalType: 'address payable', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + ], + name: 'addr', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'name', + type: 'bytes32', + }, + { + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + ], + name: 'dnsRecord', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'name', + type: 'bytes32', + }, + ], + name: 'hasDNSRecords', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + ], + name: 'interfaceImplementer', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'account', + type: 'address', + }, + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + ], + name: 'isApprovedForAll', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'name', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'pubkey', + outputs: [ + { + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + ], + name: 'supportsInterface', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'key', + type: 'string', + }, + ], + name: 'text', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'zonehash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] as const; diff --git a/packages/web3-eth-ens/src/config.js b/packages/web3-eth-ens/src/config.js deleted file mode 100644 index b12e5f5b717..00000000000 --- a/packages/web3-eth-ens/src/config.js +++ /dev/null @@ -1,49 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file config.js - * - * @author Samuel Furter - * @date 2017 - */ - -"use strict"; - -/** - * Source: https://docs.ens.domains/ens-deployments - * - * @type {{addresses: {main: string, rinkeby: string, goerli: string, ropsten: string}}} - */ -var config = { - addresses: { - main: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", - ropsten: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", - rinkeby: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", - goerli: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" - }, - // These ids obtained at ensdomains docs: - // https://docs.ens.domains/contract-developer-guide/writing-a-resolver - interfaceIds: { - addr: "0x3b3b57de", - setAddr: "0x3b3b57de", - pubkey: "0xc8690233", - setPubkey: "0xc8690233", - contenthash: "0xbc1c58d1", - setContenthash: "0xbc1c58d1", - content: "0xd8389dc5", - setContent: "0xd8389dc5" - } -}; - -module.exports = config; diff --git a/packages/web3-eth-ens/src/config.ts b/packages/web3-eth-ens/src/config.ts new file mode 100644 index 00000000000..1437c9746ee --- /dev/null +++ b/packages/web3-eth-ens/src/config.ts @@ -0,0 +1,54 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// +/** + * An object holding the interface Ids of the ENS resolver contracts. Please see [how to write a resolver](https://docs.ens.domains/contract-developer-guide/writing-a-resolver). + */ +export const interfaceIds: { [T: string]: string } = { + addr: '0x3b3b57de', + name: '0x691f3431', + abi: '0x2203ab56', + pubkey: '0xc8690233', + text: '0x59d1d43c', + contenthash: '0xbc1c58d1', +}; + +/** + * An object holding the functionsthat are supported by the ENS resolver contracts/interfaces. + */ +export const methodsInInterface: { [T: string]: string } = { + setAddr: 'addr', + addr: 'addr', + setPubkey: 'pubkey', + pubkey: 'pubkey', + setContenthash: 'contenthash', + contenthash: 'contenthash', +}; + +/** + * An object holding the addressed of the ENS registries on the different networks (mainnet, goerli). + */ +export const registryAddresses: { [T: string]: string } = { + main: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + goerli: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', +}; + +export const networkIds: { [T: string]: string } = { + '0x1': 'main', + '0x5': 'goerli', +}; diff --git a/packages/web3-eth-ens/src/contracts/Registry.js b/packages/web3-eth-ens/src/contracts/Registry.js deleted file mode 100644 index d0119e09d75..00000000000 --- a/packages/web3-eth-ens/src/contracts/Registry.js +++ /dev/null @@ -1,593 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file Registry.js - * - * @author Samuel Furter - * @date 2018 - */ - -"use strict"; - -var _ = require('underscore'); -var Contract = require('web3-eth-contract'); -var namehash = require('eth-ens-namehash'); -var PromiEvent = require('web3-core-promievent'); -var formatters = require('web3-core-helpers').formatters; -var utils = require('web3-utils'); -var REGISTRY_ABI = require('../resources/ABI/Registry'); -var RESOLVER_ABI = require('../resources/ABI/Resolver'); - - -/** - * A wrapper around the ENS registry contract. - * - * @method Registry - * @param {Ens} ens - * @constructor - */ -function Registry(ens) { - var self = this; - this.ens = ens; - this.contract = ens.checkNetwork().then(function (address) { - var contract = new Contract(REGISTRY_ABI, address); - contract.setProvider(self.ens.eth.currentProvider); - - return contract; - }); -} - -/** - * Returns the address of the owner of an ENS name. - * - * @deprecated Please use the "getOwner" method instead of "owner" - * - * @method owner - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {Promise} - */ -Registry.prototype.owner = function (name, callback) { - console.warn('Deprecated: Please use the "getOwner" method instead of "owner".'); - - return this.getOwner(name, callback); -}; - -/** - * Returns the address of the owner of an ENS name. - * - * @method getOwner - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {Promise} - */ -Registry.prototype.getOwner = function (name, callback) { - var promiEvent = new PromiEvent(true); - - this.contract.then(function (contract) { - return contract.methods.owner(namehash.hash(name)).call(); - }).then(function (receipt) { - if (_.isFunction(callback)) { - // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency - callback(receipt, receipt); - - return; - } - - promiEvent.resolve(receipt); - }).catch(function (error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - -/** - * Returns the address of the owner of an ENS name. - * - * @method setOwner - * - * @param {string} name - * @param {string} address - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -Registry.prototype.setOwner = function (name, address, txConfig, callback) { - var promiEvent = new PromiEvent(true); - - this.contract.then(function (contract) { - return contract.methods.setOwner(namehash.hash(name), formatters.inputAddressFormatter(address)).send(txConfig); - }).then(function (receipt) { - if (_.isFunction(callback)) { - // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency - callback(receipt, receipt); - - return; - } - - promiEvent.resolve(receipt); - }).catch(function (error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - -/** - * Returns the TTL of the given node by his name - * - * @method getTTL - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returnss {Promise} - */ -Registry.prototype.getTTL = function (name, callback) { - var promiEvent = new PromiEvent(true); - - this.contract.then(function (contract) { - return contract.methods.ttl(namehash.hash(name)).call(); - }).then(function (receipt) { - if (_.isFunction(callback)) { - // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency - callback(receipt, receipt); - - return; - } - - promiEvent.resolve(receipt); - }).catch(function (error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - -/** - * Returns the address of the owner of an ENS name. - * - * @method setTTL - * - * @param {string} name - * @param {number} ttl - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -Registry.prototype.setTTL = function (name, ttl, txConfig, callback) { - var promiEvent = new PromiEvent(true); - - this.contract.then(function (contract) { - return contract.methods.setTTL(namehash.hash(name), ttl).send(txConfig); - }).then(function (receipt) { - if (_.isFunction(callback)) { - // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency - callback(receipt, receipt); - - return; - } - - promiEvent.resolve(receipt); - }).catch(function (error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - -/** - * Returns the address of the owner of an ENS name. - * - * @method setSubnodeOwner - * - * @param {string} name - * @param {string} label - * @param {string} address - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -Registry.prototype.setSubnodeOwner = function (name, label, address, txConfig, callback) { - var promiEvent = new PromiEvent(true); - - if (!utils.isHexStrict(label)) { - label = utils.sha3(label); - } - - this.contract.then(function (contract) { - return contract.methods.setSubnodeOwner( - namehash.hash(name), - label, - formatters.inputAddressFormatter(address) - ).send(txConfig); - }).then(function (receipt) { - if (_.isFunction(callback)) { - // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency - callback(receipt, receipt); - - return; - } - - promiEvent.resolve(receipt); - }).catch(function (error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - -/** - * Sets the owner, resolver, and TTL for an ENS record in a single operation. - * - * @method setRecord - * - * @param {string} name - * @param {string} owner - * @param {string} resolver - * @param {string | number} ttl - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -Registry.prototype.setRecord = function (name, owner, resolver, ttl, txConfig, callback) { - var promiEvent = new PromiEvent(true); - - this.contract.then(function (contract) { - return contract.methods.setRecord( - namehash.hash(name), - formatters.inputAddressFormatter(owner), - formatters.inputAddressFormatter(resolver), - ttl - ).send(txConfig); - }).then(function (receipt) { - if (_.isFunction(callback)) { - // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency - callback(receipt, receipt); - - return; - } - - promiEvent.resolve(receipt); - }).catch(function (error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - -/** - * Sets the owner, resolver and TTL for a subdomain, creating it if necessary. - * - * @method setSubnodeRecord - * - * @param {string} name - * @param {string} label - * @param {string} owner - * @param {string} resolver - * @param {string | number} ttl - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -Registry.prototype.setSubnodeRecord = function (name, label, owner, resolver, ttl, txConfig, callback) { - var promiEvent = new PromiEvent(true); - - if (!utils.isHexStrict(label)) { - label = utils.sha3(label); - } - - this.contract.then(function (contract) { - return contract.methods.setSubnodeRecord( - namehash.hash(name), - label, - formatters.inputAddressFormatter(owner), - formatters.inputAddressFormatter(resolver), - ttl - ).send(txConfig); - }).then(function (receipt) { - if (_.isFunction(callback)) { - // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency - callback(receipt, receipt); - - return; - } - - promiEvent.resolve(receipt); - }).catch(function (error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - -/** - * Sets or clears an approval by the given operator. - * - * @method setApprovalForAll - * - * @param {string} operator - * @param {boolean} approved - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -Registry.prototype.setApprovalForAll = function (operator, approved, txConfig, callback) { - var promiEvent = new PromiEvent(true); - - this.contract.then(function (contract) { - return contract.methods.setApprovalForAll(formatters.inputAddressFormatter(operator), approved).send(txConfig); - }).then(function (receipt) { - if (_.isFunction(callback)) { - // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency - callback(receipt, receipt); - - return; - } - - promiEvent.resolve(receipt); - }).catch(function (error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - -/** - * Returns true if the operator is approved - * - * @method isApprovedForAll - * - * @param {string} owner - * @param {string} operator - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {Promise} - */ -Registry.prototype.isApprovedForAll = function (owner, operator, callback) { - var promiEvent = new PromiEvent(true); - - this.contract.then(function (contract) { - return contract.methods.isApprovedForAll( - formatters.inputAddressFormatter(owner), - formatters.inputAddressFormatter(operator) - ).call(); - }).then(function (receipt) { - if (_.isFunction(callback)) { - // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency - callback(receipt, receipt); - - return; - } - - promiEvent.resolve(receipt); - }).catch(function (error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - -/** - * Returns true if the record exists - * - * @method recordExists - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {Promise} - */ -Registry.prototype.recordExists = function (name, callback) { - var promiEvent = new PromiEvent(true); - - this.contract.then(function (contract) { - return contract.methods.recordExists(namehash.hash(name)).call(); - }).then(function (receipt) { - if (_.isFunction(callback)) { - // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency - callback(receipt, receipt); - - return; - } - - promiEvent.resolve(receipt); - }).catch(function (error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - -/** - * Returns the resolver contract associated with a name. - * - * @deprecated Please use the "getResolver" method instead of "resolver" - * - * @method resolver - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {Promise} - */ -Registry.prototype.resolver = function (name, callback) { - console.warn('Deprecated: Please use the "getResolver" method instead of "resolver".'); - - return this.getResolver(name, callback); -}; - -/** - * Returns the resolver contract associated with a name. - * - * @method getResolver - * - * @param {string} name - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {Promise} - */ -Registry.prototype.getResolver = function (name, callback) { - var self = this; - - return this.contract.then(function (contract) { - return contract.methods.resolver(namehash.hash(name)).call(); - }).then(function (address) { - var contract = new Contract(RESOLVER_ABI, address); - contract.setProvider(self.ens.eth.currentProvider); - - if (_.isFunction(callback)) { - // It's required to pass the contract to the first argument to be backward compatible and to have the required consistency - callback(contract, contract); - - return; - } - - return contract; - }).catch(function (error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - throw error; - }); -}; - -/** - * Returns the address of the owner of an ENS name. - * - * @method setResolver - * - * @param {string} name - * @param {string} address - * @param {TransactionConfig} txConfig - * @param {function} callback - * - * @callback callback callback(error, result) - * @returns {PromiEvent} - */ -Registry.prototype.setResolver = function (name, address, txConfig, callback) { - var promiEvent = new PromiEvent(true); - - this.contract.then(function (contract) { - return contract.methods.setResolver(namehash.hash(name), formatters.inputAddressFormatter(address)).send(txConfig); - }).then(function (receipt) { - if (_.isFunction(callback)) { - // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency - callback(receipt, receipt); - - return; - } - - promiEvent.resolve(receipt); - }).catch(function (error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - -module.exports = Registry; diff --git a/packages/web3-eth-ens/src/ens.ts b/packages/web3-eth-ens/src/ens.ts new file mode 100644 index 00000000000..26c642efc13 --- /dev/null +++ b/packages/web3-eth-ens/src/ens.ts @@ -0,0 +1,244 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Context, Web3ContextObject } from 'web3-core'; +import { ENSNetworkNotSyncedError, ENSUnsupportedNetworkError } from 'web3-errors'; +import { isSyncing } from 'web3-eth'; +import { Contract } from 'web3-eth-contract'; +import { getId } from 'web3-net'; +import { + DEFAULT_RETURN_FORMAT, + EthExecutionAPI, + FMT_NUMBER, + SupportedProviders, + Web3NetAPI, +} from 'web3-types'; +import { PublicResolverAbi } from './abi/ens/PublicResolver.js'; +import { networkIds, registryAddresses } from './config.js'; +import { Registry } from './registry.js'; +import { Resolver } from './resolver.js'; + +/** + * This class is designed to interact with the ENS system on the Ethereum blockchain. + * + */ +export class ENS extends Web3Context { + /** + * The registryAddress property can be used to define a custom registry address when you are connected to an unknown chain. It defaults to the main registry address. + */ + public registryAddress: string; + private readonly _registry: Registry; + private readonly _resolver: Resolver; + private _detectedAddress?: string; + private _lastSyncCheck?: number; + + /** + * Use to create an instance of ENS + * @param registryAddr - (Optional) The address of the ENS registry (default: mainnet registry address) + * @param provider - (Optional) The provider to use for the ENS instance + * @example + * ```ts + * const ens = new ENS( + * "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", + * "http://localhost:8545" + * ); + * + * console.log( ens.defaultChain); + * > mainnet + * ``` + */ + public constructor( + registryAddr?: string, + provider?: + | SupportedProviders + | Web3ContextObject + | string, + ) { + super(provider ?? ''); + this.registryAddress = registryAddr ?? registryAddresses.main; // will default to main registry address + this._registry = new Registry(this.getContextObject(), registryAddr); + this._resolver = new Resolver(this._registry); + } + + /** + * Returns the Resolver by the given address + * @param name - The name of the ENS domain + * @returns - An contract instance of the resolver + * + * @example + * ```ts + * const resolver = await ens.getResolver('resolver'); + * + * console.log(resolver.options.address); + * > '0x1234567890123456789012345678901234567890' + * ``` + */ + public async getResolver(name: string): Promise> { + return this._registry.getResolver(name); + } + + /** + * Returns true if the record exists + * @param name - The ENS name + * @returns - Returns `true` if node exists in this ENS registry. This will return `false` for records that are in the legacy ENS registry but have not yet been migrated to the new one. + * @example + * ```ts + * const exists = await web3.eth.ens.recordExists('ethereum.eth'); + * ``` + */ + public async recordExists(name: string): Promise { + return this._registry.recordExists(name); + } + + /** + * Returns the caching TTL (time-to-live) of an ENS name. + * @param name - The ENS name + * @returns - Returns the caching TTL (time-to-live) of a name. + * @example + * ```ts + * const owner = await web3.eth.ens.getTTL('ethereum.eth'); + * ``` + */ + public async getTTL(name: string): Promise { + return this._registry.getTTL(name); + } + + /** + * Returns the owner by the given name and current configured or detected Registry + * @param name - The ENS name + * @returns - Returns the address of the owner of the name. + * @example + * ```ts + * const owner = await web3.eth.ens.getOwner('ethereum.eth'); + * ``` + */ + public async getOwner(name: string): Promise { + return this._registry.getOwner(name); + } + + /** + * Resolves an ENS name to an Ethereum address. + * @param ENSName - The ENS name to resolve + * @param coinType - (Optional) The coin type, defaults to 60 (ETH) + * @returns - The Ethereum address of the given name + * ```ts + * const address = await web3.eth.ens.getAddress('ethereum.eth'); + * console.log(address); + * > '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359' + * ``` + */ + public async getAddress(ENSName: string, coinType = 60) { + return this._resolver.getAddress(ENSName, coinType); + } + + /** + * Returns the X and Y coordinates of the curve point for the public key. + * @param ENSName - The ENS name + * @returns - The X and Y coordinates of the curve point for the public key + * @example + * ```ts + * const key = await web3.eth.ens.getPubkey('ethereum.eth'); + * console.log(key); + * > { + * "0": "0x0000000000000000000000000000000000000000000000000000000000000000", + * "1": "0x0000000000000000000000000000000000000000000000000000000000000000", + * "x": "0x0000000000000000000000000000000000000000000000000000000000000000", + * "y": "0x0000000000000000000000000000000000000000000000000000000000000000" + * } + * ``` + */ + public async getPubkey(ENSName: string) { + return this._resolver.getPubkey(ENSName); + } + + /** + * Returns the content hash object associated with an ENS node. + * @param ENSName - The ENS name + * @returns - The content hash object associated with an ENS node + * @example + * ```ts + * const hash = await web3.eth.ens.getContenthash('ethereum.eth'); + * console.log(hash); + * > 'QmaEBknbGT4bTQiQoe2VNgBJbRfygQGktnaW5TbuKixjYL' + * ``` + */ + public async getContenthash(ENSName: string) { + return this._resolver.getContenthash(ENSName); + } + + /** + * Checks if the current used network is synced and looks for ENS support there. + * Throws an error if not. + * @returns - The address of the ENS registry if the network has been detected successfully + * @example + * ```ts + * console.log(await web3.eth.ens.checkNetwork()); + * > '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' + * ``` + */ + public async checkNetwork() { + const now = Date.now() / 1000; + if (!this._lastSyncCheck || now - this._lastSyncCheck > 3600) { + const syncInfo = await isSyncing(this); + + if (!(typeof syncInfo === 'boolean' && !syncInfo)) { + throw new ENSNetworkNotSyncedError(); + } + + this._lastSyncCheck = now; + } + + if (this._detectedAddress) { + return this._detectedAddress; + } + const networkType = await getId(this, { + ...DEFAULT_RETURN_FORMAT, + number: FMT_NUMBER.HEX, + }); // get the network from provider + const addr = registryAddresses[networkIds[networkType]]; + + if (typeof addr === 'undefined') { + throw new ENSUnsupportedNetworkError(networkType); + } + + this._detectedAddress = addr; + return this._detectedAddress; + } + + /** + * Returns true if the related Resolver does support the given signature or interfaceId. + * @param ENSName - The ENS name + * @param interfaceId - The signature of the function or the interfaceId as described in the ENS documentation + * @returns - `true` if the related Resolver does support the given signature or interfaceId. + * @example + * ```ts + * const supports = await web3.eth.ens.supportsInterface('ethereum.eth', 'addr(bytes32'); + * console.log(supports); + * > true + * ``` + */ + public async supportsInterface(ENSName: string, interfaceId: string) { + return this._resolver.supportsInterface(ENSName, interfaceId); + } + + /** + * @returns - Returns all events that can be emitted by the ENS registry. + */ + public get events() { + return this._registry.events; + } +} diff --git a/packages/web3-eth-ens/src/index.js b/packages/web3-eth-ens/src/index.js deleted file mode 100644 index cb39092a827..00000000000 --- a/packages/web3-eth-ens/src/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * - * @author Samuel Furter - * @date 2018 - */ - -"use strict"; - -var ENS = require('./ENS'); - -module.exports = ENS; diff --git a/packages/web3-eth-ens/src/index.ts b/packages/web3-eth-ens/src/index.ts new file mode 100644 index 00000000000..b57e6714f20 --- /dev/null +++ b/packages/web3-eth-ens/src/index.ts @@ -0,0 +1,34 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * The `web3.eth.ens` functions let you interact with ENS. We recommend reading the [ENS documentation](https://docs.ens.domains/) to get deeper insights about the internals of the name service. + * + * ## Breaking Changes + * + * - All the API level interfaces returning or accepting `null` in 1.x, use `undefined` in 4.x. + * - Functions don't accept a callback anymore. + * - Functions that accepted an optional `TransactionConfig` as the last argument, now accept an optional `NonPayableCallOptions`. See `web3-eth-contract` package for more details. + * - Removed all non-read methods. If you need modifing resolver or registry, please use https://www.npmjs.com/package/@ensdomains/ensjs + */ +/** + * This comment _supports3_ [Markdown](https://marked.js.org/) + */ +import { registryAddresses } from './config.js'; + +export * from './ens.js'; +export { registryAddresses }; diff --git a/packages/web3-eth-ens/src/lib/ResolverMethodHandler.js b/packages/web3-eth-ens/src/lib/ResolverMethodHandler.js deleted file mode 100644 index a07d8e89fe4..00000000000 --- a/packages/web3-eth-ens/src/lib/ResolverMethodHandler.js +++ /dev/null @@ -1,254 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file ResolverMethodHandler.js - * - * @author Samuel Furter - * @date 2018 - */ - -"use strict"; - -var PromiEvent = require('web3-core-promievent'); -var namehash = require('eth-ens-namehash'); -var errors = require('web3-core-helpers').errors; -var _ = require('underscore'); -var interfaceIds = require('../config').interfaceIds; - -/** - * @param {Registry} registry - * @constructor - */ -function ResolverMethodHandler(registry) { - this.registry = registry; -} - -/** - * Executes an resolver method and returns an eventifiedPromise - * - * @param {string} ensName - * @param {string} methodName - * @param {array} methodArguments - * @param {function} callback - * @returns {Object} - */ -ResolverMethodHandler.prototype.method = function (ensName, methodName, methodArguments, outputFormatter, callback) { - return { - call: this.call.bind({ - ensName: ensName, - methodName: methodName, - methodArguments: methodArguments, - callback: callback, - parent: this, - outputFormatter: outputFormatter - }), - send: this.send.bind({ - ensName: ensName, - methodName: methodName, - methodArguments: methodArguments, - callback: callback, - parent: this - }) - }; -}; - -/** - * Executes call - * - * @returns {eventifiedPromise} - */ -ResolverMethodHandler.prototype.call = function (callback) { - var self = this; - var promiEvent = new PromiEvent(); - var preparedArguments = this.parent.prepareArguments(this.ensName, this.methodArguments); - var outputFormatter = this.outputFormatter || null; - - this.parent.registry.getResolver(this.ensName).then(async function (resolver) { - await self.parent.checkInterfaceSupport(resolver, self.methodName); - self.parent.handleCall(promiEvent, resolver.methods[self.methodName], preparedArguments, outputFormatter, callback); - }).catch(function(error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - - -/** - * Executes send - * - * @param {Object} sendOptions - * @param {function} callback - * @returns {eventifiedPromise} - */ -ResolverMethodHandler.prototype.send = function (sendOptions, callback) { - var self = this; - var promiEvent = new PromiEvent(); - var preparedArguments = this.parent.prepareArguments(this.ensName, this.methodArguments); - - this.parent.registry.getResolver(this.ensName).then(async function (resolver) { - await self.parent.checkInterfaceSupport(resolver, self.methodName); - self.parent.handleSend(promiEvent, resolver.methods[self.methodName], preparedArguments, sendOptions, callback); - }).catch(function(error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - -/** - * Handles a call method - * - * @param {eventifiedPromise} promiEvent - * @param {function} method - * @param {array} preparedArguments - * @param {function} callback - * @returns {eventifiedPromise} - */ -ResolverMethodHandler.prototype.handleCall = function (promiEvent, method, preparedArguments, outputFormatter, callback) { - method.apply(this, preparedArguments).call() - .then(function (result) { - if (outputFormatter){ - result = outputFormatter(result); - } - - if (_.isFunction(callback)) { - // It's required to pass the receipt to the second argument to be backwards compatible and to have the required consistency - callback(result, result); - - return; - } - - promiEvent.resolve(result); - }).catch(function (error) { - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent; -}; - -/** - * Handles a send method - * - * @param {eventifiedPromise} promiEvent - * @param {function} method - * @param {array} preparedArguments - * @param {Object} sendOptions - * @param {function} callback - * @returns {eventifiedPromise} - */ -ResolverMethodHandler.prototype.handleSend = function (promiEvent, method, preparedArguments, sendOptions, callback) { - method.apply(this, preparedArguments).send(sendOptions) - .on('sending', function () { - promiEvent.eventEmitter.emit('sending'); - }) - .on('sent', function () { - promiEvent.eventEmitter.emit('sent'); - }) - .on('transactionHash', function (hash) { - promiEvent.eventEmitter.emit('transactionHash', hash); - }) - .on('confirmation', function (confirmationNumber, receipt) { - promiEvent.eventEmitter.emit('confirmation', confirmationNumber, receipt); - }) - .on('receipt', function (receipt) { - promiEvent.eventEmitter.emit('receipt', receipt); - promiEvent.resolve(receipt); - - if (_.isFunction(callback)) { - // It's required to pass the receipt to the second argument to be backwards compatible and to have the required consistency - callback(receipt, receipt); - } - }) - .on('error', function (error) { - promiEvent.eventEmitter.emit('error', error); - - if (_.isFunction(callback)) { - callback(error, null); - - return; - } - - promiEvent.reject(error); - }); - - return promiEvent; -}; - -/** - * Adds the ENS node to the arguments - * - * @param {string} name - * @param {array} methodArguments - * - * @returns {array} - */ -ResolverMethodHandler.prototype.prepareArguments = function (name, methodArguments) { - var node = namehash.hash(name); - - if (methodArguments.length > 0) { - methodArguments.unshift(node); - - return methodArguments; - } - - return [node]; -}; - -/** - * - * - * @param {Contract} resolver - * @param {string} methodName - * - * @returns {Promise} - */ -ResolverMethodHandler.prototype.checkInterfaceSupport = async function (resolver, methodName) { - // Skip validation for undocumented interface ids (ex: multihash) - if (!interfaceIds[methodName]) return; - - var supported = false; - try { - supported = await resolver - .methods - .supportsInterface(interfaceIds[methodName]) - .call(); - } catch(err) { - console.warn('Could not verify interface of resolver contract at "' + resolver.options.address + '". '); - } - - if (!supported){ - throw errors.ResolverMethodMissingError(resolver.options.address, methodName); - } -}; - -module.exports = ResolverMethodHandler; diff --git a/packages/web3-eth-ens/src/lib/contentHash.js b/packages/web3-eth-ens/src/lib/contentHash.js deleted file mode 100644 index bd0cbc8486d..00000000000 --- a/packages/web3-eth-ens/src/lib/contentHash.js +++ /dev/null @@ -1,111 +0,0 @@ -/* -Adapted from ensdomains/ui -https://github.com/ensdomains/ui/blob/3e62e440b53466eeec9dd1c63d73924eefbd88c1/src/utils/contents.js#L1-L85 - -BSD 2-Clause License - -Copyright (c) 2019, Ethereum Name Service -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -var contentHash = require('content-hash'); - -function decode(encoded) { - var decoded = null; - var protocolType = null; - var error = null; - - if (encoded && encoded.error) { - return { - protocolType: null, - decoded: encoded.error - }; - } - if (encoded) { - try { - decoded = contentHash.decode(encoded); - var codec = contentHash.getCodec(encoded); - if (codec === 'ipfs-ns') { - protocolType = 'ipfs'; - } else if (codec === 'swarm-ns') { - protocolType = 'bzz'; - } else if (codec === 'onion') { - protocolType = 'onion'; - } else if (codec === 'onion3') { - protocolType = 'onion3'; - } else { - decoded = encoded; - } - } catch (e) { - error = e.message; - } - } - return { - protocolType: protocolType, - decoded: decoded, - error: error - }; -} - -function encode(text) { - var content, contentType; - var encoded = false; - if (!!text) { - var matched = text.match(/^(ipfs|bzz|onion|onion3):\/\/(.*)/) || text.match(/\/(ipfs)\/(.*)/); - if (matched) { - contentType = matched[1]; - content = matched[2]; - } - - try { - if (contentType === 'ipfs') { - if(content.length >= 4) { - encoded = '0x' + contentHash.fromIpfs(content); - } - } else if (contentType === 'bzz') { - if(content.length >= 4) { - encoded = '0x' + contentHash.fromSwarm(content); - } - } else if (contentType === 'onion') { - if(content.length === 16) { - encoded = '0x' + contentHash.encode('onion', content); - } - } else if (contentType === 'onion3') { - if(content.length === 56) { - encoded = '0x' + contentHash.encode('onion3', content); - } - } else { - throw new Error('Could not encode content hash: unsupported content type'); - } - } catch (err) { - throw err; - } - } - return encoded; -} - -module.exports = { - decode: decode, - encode: encode -}; diff --git a/packages/web3-eth-ens/src/registry.ts b/packages/web3-eth-ens/src/registry.ts new file mode 100644 index 00000000000..1c41435e54b --- /dev/null +++ b/packages/web3-eth-ens/src/registry.ts @@ -0,0 +1,90 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3ContextObject } from 'web3-core'; +import { Contract } from 'web3-eth-contract'; +import { Address } from 'web3-types'; +import { ENSRegistryAbi } from './abi/ens/ENSRegistry.js'; +import { PublicResolverAbi } from './abi/ens/PublicResolver.js'; +import { registryAddresses } from './config.js'; +import { namehash } from './utils.js'; + +export class Registry { + private readonly contract: Contract; + private readonly context: Web3ContextObject; + + public constructor(context: Web3ContextObject, customRegistryAddress?: Address) { + this.contract = new Contract( + ENSRegistryAbi, + customRegistryAddress ?? registryAddresses.main, + context, + ); + + this.context = context; + } + + public async getOwner(name: string) { + try { + const result = this.contract.methods.owner(namehash(name)).call(); + + return result; + } catch (error) { + throw new Error(); // TODO: TransactionRevertInstructionError Needs to be added after web3-eth call method is implemented + } + } + + public async getTTL(name: string) { + try { + return this.contract.methods.ttl(namehash(name)).call(); + } catch (error) { + throw new Error(); // TODO: TransactionRevertInstructionError Needs to be added after web3-eth call method is implemented + } + } + + public async recordExists(name: string) { + try { + const promise = this.contract.methods.recordExists(namehash(name)).call(); + + return promise; + } catch (error) { + throw new Error(); // TODO: TransactionRevertInstructionError Needs to be added after web3-eth call method is implemented + } + } + + public async getResolver(name: string) { + try { + return this.contract.methods + .resolver(namehash(name)) + .call() + .then(address => { + // address type is unknown, not sure why + if (typeof address === 'string') { + const contract = new Contract(PublicResolverAbi, address, this.context); + // TODO: set contract provider needs to be added when ens current provider + return contract; + } + throw new Error(); + }); + } catch (error) { + throw new Error(); // TODO: TransactionRevertInstructionError Needs to be added after web3-eth call method is implemented + } + } + + public get events() { + return this.contract.events; + } +} diff --git a/packages/web3-eth-ens/src/resolver.ts b/packages/web3-eth-ens/src/resolver.ts new file mode 100644 index 00000000000..3540455f3d5 --- /dev/null +++ b/packages/web3-eth-ens/src/resolver.ts @@ -0,0 +1,105 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ResolverMethodMissingError } from 'web3-errors'; +import { Contract } from 'web3-eth-contract'; +import { isNullish, sha3 } from 'web3-utils'; +import { isHexStrict } from 'web3-validator'; +import { PublicResolverAbi } from './abi/ens/PublicResolver.js'; +import { interfaceIds, methodsInInterface } from './config.js'; +import { Registry } from './registry.js'; +import { namehash } from './utils.js'; + +// Default public resolver +// https://github.com/ensdomains/resolvers/blob/master/contracts/PublicResolver.sol + +export class Resolver { + private readonly registry: Registry; + + public constructor(registry: Registry) { + this.registry = registry; + } + + private async getResolverContractAdapter(ENSName: string) { + // TODO : (Future 4.1.0 TDB) cache resolver contract if frequently queried same ENS name, refresh cache based on TTL and usage, also limit cache size, optional cache with a flag + return this.registry.getResolver(ENSName); + } + + // https://eips.ethereum.org/EIPS/eip-165 + // eslint-disable-next-line class-methods-use-this + public async checkInterfaceSupport( + resolverContract: Contract, + methodName: string, + ) { + if (isNullish(interfaceIds[methodName])) + throw new ResolverMethodMissingError( + resolverContract.options.address ?? '', + methodName, + ); + + const supported = await resolverContract.methods + .supportsInterface(interfaceIds[methodName]) + .call(); + + if (!supported) + throw new ResolverMethodMissingError( + resolverContract.options.address ?? '', + methodName, + ); + } + + public async supportsInterface(ENSName: string, interfaceId: string) { + const resolverContract = await this.getResolverContractAdapter(ENSName); + + let interfaceIdParam = interfaceId; + + if (!isHexStrict(interfaceIdParam)) { + interfaceIdParam = sha3(interfaceId) ?? ''; + + if (interfaceId === '') throw new Error('Invalid interface Id'); + + interfaceIdParam = interfaceIdParam.slice(0, 10); + } + + return resolverContract.methods.supportsInterface(interfaceIdParam).call(); + } + + // eslint-disable-next-line @typescript-eslint/no-inferrable-types + public async getAddress(ENSName: string, coinType: number = 60) { + const resolverContract = await this.getResolverContractAdapter(ENSName); + + await this.checkInterfaceSupport(resolverContract, methodsInInterface.addr); + + return resolverContract.methods.addr(namehash(ENSName), coinType).call(); + } + + public async getPubkey(ENSName: string) { + const resolverContract = await this.getResolverContractAdapter(ENSName); + + await this.checkInterfaceSupport(resolverContract, methodsInInterface.pubkey); + + return resolverContract.methods.pubkey(namehash(ENSName)).call(); + } + + public async getContenthash(ENSName: string) { + const resolverContract = await this.getResolverContractAdapter(ENSName); + + await this.checkInterfaceSupport(resolverContract, methodsInInterface.contenthash); + + return resolverContract.methods.contenthash(namehash(ENSName)).call(); + } +} diff --git a/packages/web3-eth-ens/src/resources/ABI/Registry.js b/packages/web3-eth-ens/src/resources/ABI/Registry.js deleted file mode 100644 index 092788a55b3..00000000000 --- a/packages/web3-eth-ens/src/resources/ABI/Registry.js +++ /dev/null @@ -1,362 +0,0 @@ -"use strict"; - -var REGISTRY = [ - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "resolver", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "label", - "type": "bytes32" - }, - { - "name": "owner", - "type": "address" - } - ], - "name": "setSubnodeOwner", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "ttl", - "type": "uint64" - } - ], - "name": "setTTL", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "ttl", - "outputs": [ - { - "name": "", - "type": "uint64" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "resolver", - "type": "address" - } - ], - "name": "setResolver", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "owner", - "type": "address" - } - ], - "name": "setOwner", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "owner", - "type": "address" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": true, - "name": "label", - "type": "bytes32" - }, - { - "indexed": false, - "name": "owner", - "type": "address" - } - ], - "name": "NewOwner", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "resolver", - "type": "address" - } - ], - "name": "NewResolver", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "ttl", - "type": "uint64" - } - ], - "name": "NewTTL", - "type": "event" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "bytes32", - "name": "node", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "resolver", - "type": "address" - }, - { - "internalType": "uint64", - "name": "ttl", - "type": "uint64" - } - ], - "name": "setRecord", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "bytes32", - "name": "node", - "type": "bytes32" - } - ], - "name": "recordExists", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "bytes32", - "name": "node", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "label", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "resolver", - "type": "address" - }, - { - "internalType": "uint64", - "name": "ttl", - "type": "uint64" - } - ], - "name": "setSubnodeRecord", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } -]; - -module.exports = REGISTRY; diff --git a/packages/web3-eth-ens/src/resources/ABI/Resolver.js b/packages/web3-eth-ens/src/resources/ABI/Resolver.js deleted file mode 100644 index 1d897391299..00000000000 --- a/packages/web3-eth-ens/src/resources/ABI/Resolver.js +++ /dev/null @@ -1,410 +0,0 @@ -"use strict"; - -var RESOLVER = [ - { - "constant": true, - "inputs": [ - { - "name": "interfaceID", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "contentTypes", - "type": "uint256" - } - ], - "name": "ABI", - "outputs": [ - { - "name": "contentType", - "type": "uint256" - }, - { - "name": "data", - "type": "bytes" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "hash", - "type": "bytes" - } - ], - "name": "setMultihash", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "multihash", - "outputs": [ - { - "name": "", - "type": "bytes" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "x", - "type": "bytes32" - }, - { - "name": "y", - "type": "bytes32" - } - ], - "name": "setPubkey", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "content", - "outputs": [ - { - "name": "ret", - "type": "bytes32" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "addr", - "outputs": [ - { - "name": "ret", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "contentType", - "type": "uint256" - }, - { - "name": "data", - "type": "bytes" - } - ], - "name": "setABI", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "name", - "outputs": [ - { - "name": "ret", - "type": "string" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "name", - "type": "string" - } - ], - "name": "setName", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "hash", - "type": "bytes32" - } - ], - "name": "setContent", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "pubkey", - "outputs": [ - { - "name": "x", - "type": "bytes32" - }, - { - "name": "y", - "type": "bytes32" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "addr", - "type": "address" - } - ], - "name": "setAddr", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "inputs": [ - { - "name": "ensAddr", - "type": "address" - } - ], - "payable": false, - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "a", - "type": "address" - } - ], - "name": "AddrChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "hash", - "type": "bytes32" - } - ], - "name": "ContentChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "name", - "type": "string" - } - ], - "name": "NameChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": true, - "name": "contentType", - "type": "uint256" - } - ], - "name": "ABIChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "x", - "type": "bytes32" - }, - { - "indexed": false, - "name": "y", - "type": "bytes32" - } - ], - "name": "PubkeyChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "hash", - "type": "bytes" - } - ], - "name": "ContenthashChanged", - "type": "event" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "contenthash", - "outputs": [ - { - "name": "", - "type": "bytes" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "hash", - "type": "bytes" - } - ], - "name": "setContenthash", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } -]; - -module.exports = RESOLVER; \ No newline at end of file diff --git a/packages/web3-eth-ens/src/utils.ts b/packages/web3-eth-ens/src/utils.ts new file mode 100644 index 00000000000..0184929790c --- /dev/null +++ b/packages/web3-eth-ens/src/utils.ts @@ -0,0 +1,42 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { sha3Raw } from 'web3-utils'; +// eslint-disable-next-line camelcase +import { ens_normalize } from '@adraffy/ens-normalize'; + +export const normalize = (name: string) => ens_normalize(name); + +export const namehash = (inputName: string) => { + // Reject empty names: + let node = ''; + for (let i = 0; i < 32; i += 1) { + node += '00'; + } + + if (inputName) { + const name = normalize(inputName); + const labels = name.split('.'); + + for (let i = labels.length - 1; i >= 0; i -= 1) { + const labelSha = sha3Raw(labels[i]).slice(2); + node = sha3Raw(`0x${node}${labelSha}`).slice(2); + } + } + + return `0x${node}`; +}; diff --git a/packages/web3-eth-ens/test/.eslintrc.js b/packages/web3-eth-ens/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-eth-ens/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth-ens/test/config/jest.config.js b/packages/web3-eth-ens/test/config/jest.config.js new file mode 120000 index 00000000000..b875b48129d --- /dev/null +++ b/packages/web3-eth-ens/test/config/jest.config.js @@ -0,0 +1 @@ +../../../../templates/jest.config.js.tmpl \ No newline at end of file diff --git a/packages/web3-eth-ens/test/config/setup.js b/packages/web3-eth-ens/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-eth-ens/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-eth-ens/test/fixtures/accounts.json b/packages/web3-eth-ens/test/fixtures/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3-eth-ens/test/fixtures/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3-eth-ens/test/fixtures/ens/ENSRegistry.json b/packages/web3-eth-ens/test/fixtures/ens/ENSRegistry.json new file mode 100644 index 00000000000..b73563f066c --- /dev/null +++ b/packages/web3-eth-ens/test/fixtures/ens/ENSRegistry.json @@ -0,0 +1,385 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ENSRegistry", + "sourceName": "contracts/registry/ENSRegistry.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "label", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "resolver", + "type": "address" + } + ], + "name": "NewResolver", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "ttl", + "type": "uint64" + } + ], + "name": "NewTTL", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + } + ], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + } + ], + "name": "recordExists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + } + ], + "name": "resolver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "resolver", + "type": "address" + }, + { + "internalType": "uint64", + "name": "ttl", + "type": "uint64" + } + ], + "name": "setRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "resolver", + "type": "address" + } + ], + "name": "setResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "label", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "setSubnodeOwner", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "label", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "resolver", + "type": "address" + }, + { + "internalType": "uint64", + "name": "ttl", + "type": "uint64" + } + ], + "name": "setSubnodeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "ttl", + "type": "uint64" + } + ], + "name": "setTTL", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + } + ], + "name": "ttl", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060008080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb580546001600160a01b03191633179055610c1a806100596000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635b0fc9c311610081578063cf4088231161005b578063cf4088231461022f578063e985e9c514610242578063f79fe5381461029b57600080fd5b80635b0fc9c3146101f65780635ef2c7f014610209578063a22cb4651461021c57600080fd5b806314ab9038116100b257806314ab90381461017057806316a25cbd146101855780631896f70a146101e357600080fd5b80630178b8bf146100d957806302571be31461013c57806306ab59231461014f575b600080fd5b6101126100e73660046109fc565b60009081526020819052604090206001015473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61011261014a3660046109fc565b6102d3565b61016261015d366004610a3e565b61030e565b604051908152602001610133565b61018361017e366004610a8b565b61046b565b005b6101ca6101933660046109fc565b60009081526020819052604090206001015474010000000000000000000000000000000000000000900467ffffffffffffffff1690565b60405167ffffffffffffffff9091168152602001610133565b6101836101f1366004610ab7565b61057d565b610183610204366004610ab7565b61068e565b610183610217366004610ada565b610799565b61018361022a366004610b31565b6107bb565b61018361023d366004610b6d565b610852565b61028b610250366004610bba565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b6040519015158152602001610133565b61028b6102a93660046109fc565b60009081526020819052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b60008181526020819052604081205473ffffffffffffffffffffffffffffffffffffffff163081036103085750600092915050565b92915050565b600083815260208190526040812054849073ffffffffffffffffffffffffffffffffffffffff1633811480610373575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832033845290915290205460ff165b61037c57600080fd5b6040805160208101889052908101869052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120600081815292839052912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055905060405173ffffffffffffffffffffffffffffffffffffffff86168152869088907fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e829060200160405180910390a39695505050505050565b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16338114806104d0575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832033845290915290205460ff165b6104d957600080fd5b60405167ffffffffffffffff8416815284907f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa689060200160405180910390a25050600091825260208290526040909120600101805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16338114806105e2575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832033845290915290205460ff165b6105eb57600080fd5b60405173ffffffffffffffffffffffffffffffffffffffff8416815284907f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a09060200160405180910390a2505060009182526020829052604090912060010180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16338114806106f3575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832033845290915290205460ff165b6106fc57600080fd5b600084815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851617905560405173ffffffffffffffffffffffffffffffffffffffff8416815284907fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d2669060200160405180910390a250505050565b60006107a686868661030e565b90506107b381848461086d565b505050505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61085c848461068e565b61086784838361086d565b50505050565b60008381526020819052604090206001015473ffffffffffffffffffffffffffffffffffffffff838116911614610925576000838152602081815260409182902060010180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155915191825284917f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0910160405180910390a25b60008381526020819052604090206001015467ffffffffffffffff8281167401000000000000000000000000000000000000000090920416146109f7576000838152602081815260409182902060010180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff861690810291909117909155915191825284917f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68910160405180910390a25b505050565b600060208284031215610a0e57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a3957600080fd5b919050565b600080600060608486031215610a5357600080fd5b8335925060208401359150610a6a60408501610a15565b90509250925092565b803567ffffffffffffffff81168114610a3957600080fd5b60008060408385031215610a9e57600080fd5b82359150610aae60208401610a73565b90509250929050565b60008060408385031215610aca57600080fd5b82359150610aae60208401610a15565b600080600080600060a08688031215610af257600080fd5b8535945060208601359350610b0960408701610a15565b9250610b1760608701610a15565b9150610b2560808701610a73565b90509295509295909350565b60008060408385031215610b4457600080fd5b610b4d83610a15565b915060208301358015158114610b6257600080fd5b809150509250929050565b60008060008060808587031215610b8357600080fd5b84359350610b9360208601610a15565b9250610ba160408601610a15565b9150610baf60608601610a73565b905092959194509250565b60008060408385031215610bcd57600080fd5b610bd683610a15565b9150610aae60208401610a1556fea26469706673582212207e08237bee1508846e20a29f454fa362e24c1e230661c644bfadeca9eeed8be964736f6c634300080d0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80635b0fc9c311610081578063cf4088231161005b578063cf4088231461022f578063e985e9c514610242578063f79fe5381461029b57600080fd5b80635b0fc9c3146101f65780635ef2c7f014610209578063a22cb4651461021c57600080fd5b806314ab9038116100b257806314ab90381461017057806316a25cbd146101855780631896f70a146101e357600080fd5b80630178b8bf146100d957806302571be31461013c57806306ab59231461014f575b600080fd5b6101126100e73660046109fc565b60009081526020819052604090206001015473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61011261014a3660046109fc565b6102d3565b61016261015d366004610a3e565b61030e565b604051908152602001610133565b61018361017e366004610a8b565b61046b565b005b6101ca6101933660046109fc565b60009081526020819052604090206001015474010000000000000000000000000000000000000000900467ffffffffffffffff1690565b60405167ffffffffffffffff9091168152602001610133565b6101836101f1366004610ab7565b61057d565b610183610204366004610ab7565b61068e565b610183610217366004610ada565b610799565b61018361022a366004610b31565b6107bb565b61018361023d366004610b6d565b610852565b61028b610250366004610bba565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b6040519015158152602001610133565b61028b6102a93660046109fc565b60009081526020819052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b60008181526020819052604081205473ffffffffffffffffffffffffffffffffffffffff163081036103085750600092915050565b92915050565b600083815260208190526040812054849073ffffffffffffffffffffffffffffffffffffffff1633811480610373575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832033845290915290205460ff165b61037c57600080fd5b6040805160208101889052908101869052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120600081815292839052912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055905060405173ffffffffffffffffffffffffffffffffffffffff86168152869088907fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e829060200160405180910390a39695505050505050565b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16338114806104d0575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832033845290915290205460ff165b6104d957600080fd5b60405167ffffffffffffffff8416815284907f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa689060200160405180910390a25050600091825260208290526040909120600101805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16338114806105e2575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832033845290915290205460ff165b6105eb57600080fd5b60405173ffffffffffffffffffffffffffffffffffffffff8416815284907f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a09060200160405180910390a2505060009182526020829052604090912060010180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16338114806106f3575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832033845290915290205460ff165b6106fc57600080fd5b600084815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851617905560405173ffffffffffffffffffffffffffffffffffffffff8416815284907fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d2669060200160405180910390a250505050565b60006107a686868661030e565b90506107b381848461086d565b505050505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61085c848461068e565b61086784838361086d565b50505050565b60008381526020819052604090206001015473ffffffffffffffffffffffffffffffffffffffff838116911614610925576000838152602081815260409182902060010180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155915191825284917f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0910160405180910390a25b60008381526020819052604090206001015467ffffffffffffffff8281167401000000000000000000000000000000000000000090920416146109f7576000838152602081815260409182902060010180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff861690810291909117909155915191825284917f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68910160405180910390a25b505050565b600060208284031215610a0e57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a3957600080fd5b919050565b600080600060608486031215610a5357600080fd5b8335925060208401359150610a6a60408501610a15565b90509250925092565b803567ffffffffffffffff81168114610a3957600080fd5b60008060408385031215610a9e57600080fd5b82359150610aae60208401610a73565b90509250929050565b60008060408385031215610aca57600080fd5b82359150610aae60208401610a15565b600080600080600060a08688031215610af257600080fd5b8535945060208601359350610b0960408701610a15565b9250610b1760608701610a15565b9150610b2560808701610a73565b90509295509295909350565b60008060408385031215610b4457600080fd5b610b4d83610a15565b915060208301358015158114610b6257600080fd5b809150509250929050565b60008060008060808587031215610b8357600080fd5b84359350610b9360208601610a15565b9250610ba160408601610a15565b9150610baf60608601610a73565b905092959194509250565b60008060408385031215610bcd57600080fd5b610bd683610a15565b9150610aae60208401610a1556fea26469706673582212207e08237bee1508846e20a29f454fa362e24c1e230661c644bfadeca9eeed8be964736f6c634300080d0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/packages/web3-eth-ens/test/fixtures/ens/abi/ENSRegistry.ts b/packages/web3-eth-ens/test/fixtures/ens/abi/ENSRegistry.ts new file mode 100644 index 00000000000..99730866873 --- /dev/null +++ b/packages/web3-eth-ens/test/fixtures/ens/abi/ENSRegistry.ts @@ -0,0 +1,394 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// https://github.com/ensdomains/ens-contracts/blob/master/contracts/registry/ENSRegistry.sol +export const ENSRegistryAbi = [ + { + inputs: [], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'operator', + type: 'address', + }, + { + indexed: false, + internalType: 'bool', + name: 'approved', + type: 'bool', + }, + ], + name: 'ApprovalForAll', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'NewOwner', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'resolver', + type: 'address', + }, + ], + name: 'NewResolver', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'NewTTL', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + inputs: [ + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + ], + name: 'isApprovedForAll', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'owner', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'recordExists', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'resolver', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + { + internalType: 'bool', + name: 'approved', + type: 'bool', + }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'setOwner', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setRecord', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + ], + name: 'setResolver', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'setSubnodeOwner', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + internalType: 'address', + name: 'resolver', + type: 'address', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setSubnodeRecord', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint64', + name: 'ttl', + type: 'uint64', + }, + ], + name: 'setTTL', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'ttl', + outputs: [ + { + internalType: 'uint64', + name: '', + type: 'uint64', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] as const; diff --git a/packages/web3-eth-ens/test/fixtures/ens/abi/NameWrapper.ts b/packages/web3-eth-ens/test/fixtures/ens/abi/NameWrapper.ts new file mode 100644 index 00000000000..cdbc7ba71e8 --- /dev/null +++ b/packages/web3-eth-ens/test/fixtures/ens/abi/NameWrapper.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// https://github.com/ensdomains/ens-contracts/blob/master/contracts/resolvers/mocks/DummyNameWrapper.sol +export const NameWrapperAbi = [ + { + inputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + name: 'ownerOf', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] as const; diff --git a/packages/web3-eth-ens/test/fixtures/ens/abi/PublicResolver.ts b/packages/web3-eth-ens/test/fixtures/ens/abi/PublicResolver.ts new file mode 100644 index 00000000000..b666d4f4d67 --- /dev/null +++ b/packages/web3-eth-ens/test/fixtures/ens/abi/PublicResolver.ts @@ -0,0 +1,893 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// https://github.com/ensdomains/ens-contracts/blob/master/contracts/resolvers/PublicResolver.sol +export const PublicResolverAbi = [ + { + inputs: [ + { + internalType: 'contract ENS', + name: '_ens', + type: 'address', + }, + { + internalType: 'contract INameWrapper', + name: 'wrapperAddress', + type: 'address', + }, + { + internalType: 'address', + name: '_trustedETHController', + type: 'address', + }, + { + internalType: 'address', + name: '_trustedReverseRegistrar', + type: 'address', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'uint256', + name: 'contentType', + type: 'uint256', + }, + ], + name: 'ABIChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'a', + type: 'address', + }, + ], + name: 'AddrChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + { + indexed: false, + internalType: 'bytes', + name: 'newAddress', + type: 'bytes', + }, + ], + name: 'AddressChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'operator', + type: 'address', + }, + { + indexed: false, + internalType: 'bool', + name: 'approved', + type: 'bool', + }, + ], + name: 'ApprovalForAll', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'hash', + type: 'bytes', + }, + ], + name: 'ContenthashChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'name', + type: 'bytes', + }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + { + indexed: false, + internalType: 'bytes', + name: 'record', + type: 'bytes', + }, + ], + name: 'DNSRecordChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'name', + type: 'bytes', + }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + ], + name: 'DNSRecordDeleted', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'DNSZoneCleared', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes', + name: 'lastzonehash', + type: 'bytes', + }, + { + indexed: false, + internalType: 'bytes', + name: 'zonehash', + type: 'bytes', + }, + ], + name: 'DNSZonehashChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + { + indexed: false, + internalType: 'address', + name: 'implementer', + type: 'address', + }, + ], + name: 'InterfaceChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'string', + name: 'name', + type: 'string', + }, + ], + name: 'NameChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + name: 'PubkeyChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + indexed: true, + internalType: 'string', + name: 'indexedKey', + type: 'string', + }, + { + indexed: false, + internalType: 'string', + name: 'key', + type: 'string', + }, + ], + name: 'TextChanged', + type: 'event', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'contentTypes', + type: 'uint256', + }, + ], + name: 'ABI', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'addr', + outputs: [ + { + internalType: 'address payable', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + ], + name: 'addr', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'clearDNSZone', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'contenthash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'name', + type: 'bytes32', + }, + { + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + ], + name: 'dnsRecord', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'name', + type: 'bytes32', + }, + ], + name: 'hasDNSRecords', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + ], + name: 'interfaceImplementer', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'account', + type: 'address', + }, + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + ], + name: 'isApprovedForAll', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes[]', + name: 'data', + type: 'bytes[]', + }, + ], + name: 'multicall', + outputs: [ + { + internalType: 'bytes[]', + name: 'results', + type: 'bytes[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'name', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'pubkey', + outputs: [ + { + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'contentType', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'setABI', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'a', + type: 'bytes', + }, + ], + name: 'setAddr', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'a', + type: 'address', + }, + ], + name: 'setAddr', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: 'operator', + type: 'address', + }, + { + internalType: 'bool', + name: 'approved', + type: 'bool', + }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes', + name: 'hash', + type: 'bytes', + }, + ], + name: 'setContenthash', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'setDNSRecords', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + { + internalType: 'address', + name: 'implementer', + type: 'address', + }, + ], + name: 'setInterface', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'newName', + type: 'string', + }, + ], + name: 'setName', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'x', + type: 'bytes32', + }, + { + internalType: 'bytes32', + name: 'y', + type: 'bytes32', + }, + ], + name: 'setPubkey', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'key', + type: 'string', + }, + { + internalType: 'string', + name: 'value', + type: 'string', + }, + ], + name: 'setText', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'bytes', + name: 'hash', + type: 'bytes', + }, + ], + name: 'setZonehash', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + ], + name: 'supportsInterface', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'key', + type: 'string', + }, + ], + name: 'text', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'node', + type: 'bytes32', + }, + ], + name: 'zonehash', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + stateMutability: 'view', + type: 'function', + }, +] as const; diff --git a/packages/web3-eth-ens/test/fixtures/ens/bytecode/ENSRegistryBytecode.ts b/packages/web3-eth-ens/test/fixtures/ens/bytecode/ENSRegistryBytecode.ts new file mode 100644 index 00000000000..2fdf02f8189 --- /dev/null +++ b/packages/web3-eth-ens/test/fixtures/ens/bytecode/ENSRegistryBytecode.ts @@ -0,0 +1,20 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// https://github.com/ensdomains/ens-contracts/blob/master/contracts/resolvers/PublicResolver.sol +export const ENSRegistryBytecode = + '0x608060405234801561001057600080fd5b5060008080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb580546001600160a01b0319163317905561192c806100596000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80635b0fc9c31161008c578063a22cb46511610066578063a22cb46514610247578063cf4088231461025a578063e985e9c51461026d578063f79fe538146102c657600080fd5b80635b0fc9c3146102015780635ef2c7f0146102145780639201de551461022757600080fd5b806314ab9038116100bd57806314ab90381461017b57806316a25cbd146101905780631896f70a146101ee57600080fd5b80630178b8bf146100e457806302571be31461014757806306ab59231461015a575b600080fd5b61011d6100f2366004611258565b60009081526020819052604090206001015473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61011d610155366004611258565b6102fe565b61016d610168366004611295565b610339565b60405190815260200161013e565b61018e6101893660046112e2565b6105c3565b005b6101d561019e366004611258565b60009081526020819052604090206001015474010000000000000000000000000000000000000000900467ffffffffffffffff1690565b60405167ffffffffffffffff909116815260200161013e565b61018e6101fc36600461130e565b610817565b61018e61020f36600461130e565b610a6a565b61018e610222366004611331565b610cb7565b61023a610235366004611258565b610cd9565b60405161013e91906113b4565b61018e6102553660046113e7565b610e58565b61018e610268366004611423565b610eef565b6102b661027b366004611470565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b604051901515815260200161013e565b6102b66102d4366004611258565b60009081526020819052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b60008181526020819052604081205473ffffffffffffffffffffffffffffffffffffffff163081036103335750600092915050565b92915050565b600083815260208190526040812054849073ffffffffffffffffffffffffffffffffffffffff163381148061039e575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832033845290915290205460ff165b6103a782610f0a565b6040516020016103b7919061149a565b60408051601f19818403018152908290526103d4916020016114df565b6040516020818303038152906040526103ec33610f0a565b6040516020016103fd929190611520565b60408051601f198184030181529082905261041a9160200161154f565b60408051601f19818403018152908290526104379160200161156b565b60408051601f1981840301815291905260008080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5546104909073ffffffffffffffffffffffffffffffffffffffff16610f0a565b6040516020016104a1929190611520565b604051602081830303815290604052906104f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e891906113b4565b60405180910390fd5b50604080516020810188905290810186905260009060600160408051601f198184030181529181528151602092830120600081815292839052912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055905060405173ffffffffffffffffffffffffffffffffffffffff86168152869088907fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e829060200160405180910390a39695505050505050565b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff1633811480610628575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832033845290915290205460ff165b61063182610f0a565b604051602001610641919061149a565b60408051601f198184030181529082905261065e916020016114df565b60405160208183030381529060405261067633610f0a565b604051602001610687929190611520565b60408051601f19818403018152908290526106a49160200161154f565b60408051601f19818403018152908290526106c19160200161156b565b60408051601f1981840301815291905260008080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461071a9073ffffffffffffffffffffffffffffffffffffffff16610f0a565b60405160200161072b929190611520565b60405160208183030381529060405290610772576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e891906113b4565b5060405167ffffffffffffffff8416815284907f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa689060200160405180910390a25050600091825260208290526040909120600101805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff163381148061087c575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832033845290915290205460ff165b61088582610f0a565b604051602001610895919061149a565b60408051601f19818403018152908290526108b2916020016114df565b6040516020818303038152906040526108ca33610f0a565b6040516020016108db929190611520565b60408051601f19818403018152908290526108f89160200161154f565b60408051601f19818403018152908290526109159160200161156b565b60408051601f1981840301815291905260008080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461096e9073ffffffffffffffffffffffffffffffffffffffff16610f0a565b60405160200161097f929190611520565b604051602081830303815290604052906109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e891906113b4565b5060405173ffffffffffffffffffffffffffffffffffffffff8416815284907f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a09060200160405180910390a2505060009182526020829052604090912060010180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff1633811480610acf575073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832033845290915290205460ff165b610ad882610f0a565b604051602001610ae8919061149a565b60408051601f1981840301815290829052610b05916020016114df565b604051602081830303815290604052610b1d33610f0a565b604051602001610b2e929190611520565b60408051601f1981840301815290829052610b4b9160200161154f565b60408051601f1981840301815290829052610b689160200161156b565b60408051601f1981840301815291905260008080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb554610bc19073ffffffffffffffffffffffffffffffffffffffff16610f0a565b604051602001610bd2929190611520565b60405160208183030381529060405290610c19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e891906113b4565b50600084815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851617905560405173ffffffffffffffffffffffffffffffffffffffff8416815284907fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d2669060200160405180910390a250505050565b6000610cc4868686610339565b9050610cd181848461108e565b505050505050565b606060005b60208160ff16108015610d2a5750828160ff1660208110610d0157610d016115ac565b1a60f81b7fff000000000000000000000000000000000000000000000000000000000000001615155b15610d415780610d398161160a565b915050610cde565b60008160ff1667ffffffffffffffff811115610d5f57610d5f611629565b6040519080825280601f01601f191660200182016040528015610d89576020820181803683370190505b509050600091505b60208260ff16108015610ddd5750838260ff1660208110610db457610db46115ac565b1a60f81b7fff000000000000000000000000000000000000000000000000000000000000001615155b15610e5157838260ff1660208110610df757610df76115ac565b1a60f81b818360ff1681518110610e1057610e106115ac565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081610e498161160a565b925050610d91565b9392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ef98484610a6a565b610f0484838361108e565b50505050565b60408051602880825260608281019093526000919060208201818036833701905050905060005b6014811015611087576000610f47826013611658565b610f5290600861166f565b610f5d9060026117cc565b610f7d9073ffffffffffffffffffffffffffffffffffffffff8716611807565b60f81b9050600060108260f81c610f94919061181b565b60f81b905060008160f81c6010610fab919061183d565b8360f81c610fb9919061185e565b60f81b9050610fc78261121d565b85610fd386600261166f565b81518110610fe357610fe36115ac565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061101b8161121d565b8561102786600261166f565b611032906001611881565b81518110611042576110426115ac565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350505050808061107f90611899565b915050610f31565b5092915050565b60008381526020819052604090206001015473ffffffffffffffffffffffffffffffffffffffff838116911614611146576000838152602081815260409182902060010180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155915191825284917f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0910160405180910390a25b60008381526020819052604090206001015467ffffffffffffffff828116740100000000000000000000000000000000000000009092041614611218576000838152602081815260409182902060010180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff861690810291909117909155915191825284917f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68910160405180910390a25b505050565b6000600a60f883901c10156112445761123b60f883901c60306118d1565b60f81b92915050565b61123b60f883901c60576118d1565b919050565b60006020828403121561126a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125357600080fd5b6000806000606084860312156112aa57600080fd5b83359250602084013591506112c160408501611271565b90509250925092565b803567ffffffffffffffff8116811461125357600080fd5b600080604083850312156112f557600080fd5b82359150611305602084016112ca565b90509250929050565b6000806040838503121561132157600080fd5b8235915061130560208401611271565b600080600080600060a0868803121561134957600080fd5b853594506020860135935061136060408701611271565b925061136e60608701611271565b915061137c608087016112ca565b90509295509295909350565b60005b838110156113a357818101518382015260200161138b565b83811115610f045750506000910152565b60208152600082518060208401526113d3816040850160208701611388565b601f01601f19169190910160400192915050565b600080604083850312156113fa57600080fd5b61140383611271565b91506020830135801515811461141857600080fd5b809150509250929050565b6000806000806080858703121561143957600080fd5b8435935061144960208601611271565b925061145760408601611271565b9150611465606086016112ca565b905092959194509250565b6000806040838503121561148357600080fd5b61148c83611271565b915061130560208401611271565b7f596f7520617265206e6f7420746865206f776e657220000000000000000000008152600082516114d2816016850160208701611388565b9190910160160192915050565b600082516114f1818460208701611388565b7f206d736773656e6465723a000000000000000000000000000000000000000000920191825250600b01919050565b60008351611532818460208801611388565b835190830190611546818360208801611388565b01949350505050565b60008251611561818460208701611388565b9190910192915050565b6000825161157d818460208701611388565b7f206e6f64653a2000000000000000000000000000000000000000000000000000920191825250600701919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103611620576116206115db565b60010192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008282101561166a5761166a6115db565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156116a7576116a76115db565b500290565b600181815b8085111561170557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156116eb576116eb6115db565b808516156116f857918102915b93841c93908002906116b1565b509250929050565b60008261171c57506001610333565b8161172957506000610333565b816001811461173f576002811461174957611765565b6001915050610333565b60ff84111561175a5761175a6115db565b50506001821b610333565b5060208310610133831016604e8410600b8410161715611788575081810a610333565b61179283836116ac565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156117c4576117c46115db565b029392505050565b6000610e51838361170d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611816576118166117d8565b500490565b600060ff83168061182e5761182e6117d8565b8060ff84160491505092915050565b600060ff821660ff84168160ff04811182151516156117c4576117c46115db565b600060ff821660ff841680821015611878576118786115db565b90039392505050565b60008219821115611894576118946115db565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118ca576118ca6115db565b5060010190565b600060ff821660ff84168060ff038211156118ee576118ee6115db565b01939250505056fea2646970667358221220504e59c82907e2f23b970e6f59e61282809e57a5d52d051976f95421d183cfc764736f6c634300080d0033'; diff --git a/packages/web3-eth-ens/test/fixtures/ens/bytecode/NameWrapperBytecode.ts b/packages/web3-eth-ens/test/fixtures/ens/bytecode/NameWrapperBytecode.ts new file mode 100644 index 00000000000..0dd1589288c --- /dev/null +++ b/packages/web3-eth-ens/test/fixtures/ens/bytecode/NameWrapperBytecode.ts @@ -0,0 +1,20 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// https://github.com/ensdomains/ens-contracts/blob/1b6b4b59003cceb045634d84ab63ae9bc2c0f8c2/contracts/resolvers/mocks/DummyNameWrapper.sol +export const NameWrapperBytecode = + '0x608060405234801561001057600080fd5b5060b48061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80636352211e14602d575b600080fd5b603d60383660046066565b503290565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b600060208284031215607757600080fd5b503591905056fea2646970667358221220b67fcd4e2e3ba377840d17d946ec7bb7d98ab1f95fb8806d831190a194af0f7964736f6c634300080d0033'; diff --git a/packages/web3-eth-ens/test/fixtures/ens/bytecode/PublicResolverBytecode.ts b/packages/web3-eth-ens/test/fixtures/ens/bytecode/PublicResolverBytecode.ts new file mode 100644 index 00000000000..9fe1ad0693b --- /dev/null +++ b/packages/web3-eth-ens/test/fixtures/ens/bytecode/PublicResolverBytecode.ts @@ -0,0 +1,20 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// https://github.com/ensdomains/ens-contracts/blob/master/contracts/resolvers/PublicResolver.sol +export const PublicResolverBytecode = + '0x6101006040523480156200001257600080fd5b5060405162002e9838038062002e98833981016040819052620000359162000071565b6001600160a01b0393841660805291831660a052821660c0521660e052620000d9565b6001600160a01b03811681146200006e57600080fd5b50565b600080600080608085870312156200008857600080fd5b8451620000958162000058565b6020860151909450620000a88162000058565b6040860151909350620000bb8162000058565b6060860151909250620000ce8162000058565b939692955090935050565b60805160a05160c05160e051612d7e6200011a60003960006116980152600061165901526000818161177d01526117fd015260006116f90152612d7e6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806377372213116100ee578063bc1c58d111610097578063d5fa2b0011610071578063d5fa2b0014610410578063e59d895d14610423578063e985e9c514610436578063f1cb7e061461047f57600080fd5b8063bc1c58d1146103ad578063c8690233146103c0578063ce3decdc146103fd57600080fd5b8063a8fa5682116100c8578063a8fa568214610367578063ac9650d81461037a578063ad5780af1461039a57600080fd5b8063773722131461032e5780638b95dd7114610341578063a22cb4651461035457600080fd5b8063304e6ade1161015b57806359d1d43c1161013557806359d1d43c146102d55780635c98042b146102f5578063623195b014610308578063691f34311461031b57600080fd5b8063304e6ade1461026f5780633b3b57de146102825780634cbf6ba41461029557600080fd5b8063124a319c1161018c578063124a319c146102035780632203ab561461023b57806329cd62ea1461025c57600080fd5b806301ffc9a7146101b35780630af179d7146101db57806310f13a8c146101f0575b600080fd5b6101c66101c1366004612437565b610492565b60405190151581526020015b60405180910390f35b6101ee6101e9366004612494565b6104a3565b005b6101ee6101fe3660046124e0565b610691565b61021661021136600461255a565b61073e565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b61024e610249366004612586565b610abb565b6040516101d2929190612622565b6101ee61026a36600461263b565b610bd6565b6101ee61027d366004612494565b610c56565b610216610290366004612667565b610cb5565b6101c66102a3366004612586565b600091825260066020908152604080842060048352818520548552825280842092845291905290205461ffff16151590565b6102e86102e3366004612494565b610ce7565b6040516101d29190612680565b6102e8610303366004612667565b610dac565b6101ee610316366004612693565b610e4e565b6102e8610329366004612667565b610ecf565b6101ee61033c366004612494565b610eec565b6101ee61034f366004612715565b610f4b565b6101ee610362366004612819565b611022565b6102e8610375366004612857565b611162565b61038d610388366004612897565b6111a5565b6040516101d2919061290c565b6101ee6103a8366004612667565b6112c0565b6102e86103bb366004612667565b611321565b6103e86103ce366004612667565b600090815260096020526040902080546001909101549091565b604080519283526020830191909152016101d2565b6101ee61040b366004612494565b61133e565b6101ee61041e36600461298c565b61144a565b6101ee6104313660046129b1565b611471565b6101c66104443660046129e6565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600b6020908152604080832093909416825291909152205460ff1690565b6102e861048d366004612586565b61153b565b600061049d826115e9565b92915050565b826104ad8161163f565b6104b657600080fd5b60008060608060008061050360008a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506118d89050565b90505b8051516020820151101561062c578561ffff1660000361056b578060400151955061053081611939565b9350836040516020016105439190612a14565b6040516020818303038152906040528051906020012091506105648161195a565b925061061e565b600061057682611939565b9050816040015161ffff168761ffff1614158061059a57506105988582611976565b155b1561061c576105f58b86898d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208801518c91506105ed908290612a5f565b8a5115611994565b8160400151965081602001519550809450848051906020012092506106198261195a565b93505b505b61062781611bd7565b610506565b50825115610686576106868984878b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b925061067e91508290508e612a5f565b885115611994565b505050505050505050565b8461069b8161163f565b6106a457600080fd5b8282600a600089815260200190815260200160002087876040516106c9929190612a76565b9081526040519081900360200190206106e392909161229a565b5084846040516106f4929190612a76565b6040518091039020867fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550878760405161072e929190612acf565b60405180910390a3505050505050565b60008281526007602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008516845290915281205473ffffffffffffffffffffffffffffffffffffffff16801561079d57905061049d565b60006107a885610cb5565b905073ffffffffffffffffffffffffffffffffffffffff81166107d05760009250505061049d565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000006024820152600090819073ffffffffffffffffffffffffffffffffffffffff841690604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790525161089a9190612a14565b600060405180830381855afa9150503d80600081146108d5576040519150601f19603f3d011682016040523d82523d6000602084013e6108da565b606091505b50915091508115806108ed575060208151105b8061092f575080601f8151811061090657610906612ae3565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016155b1561094157600094505050505061049d565b6040517fffffffff000000000000000000000000000000000000000000000000000000008716602482015273ffffffffffffffffffffffffffffffffffffffff841690604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a70000000000000000000000000000000000000000000000000000000017905251610a089190612a14565b600060405180830381855afa9150503d8060008114610a43576040519150601f19603f3d011682016040523d82523d6000602084013e610a48565b606091505b509092509050811580610a5c575060208151105b80610a9e575080601f81518110610a7557610a75612ae3565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016155b15610ab057600094505050505061049d565b509095945050505050565b600082815260208190526040812060609060015b848111610bb65780851615801590610aff575060008181526020839052604081208054610afb90612b12565b9050115b15610bae5780826000838152602001908152602001600020808054610b2390612b12565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4f90612b12565b8015610b9c5780601f10610b7157610100808354040283529160200191610b9c565b820191906000526020600020905b815481529060010190602001808311610b7f57829003601f168201915b50505050509050935093505050610bcf565b60011b610acf565b5060006040518060200160405280600081525092509250505b9250929050565b82610be08161163f565b610be957600080fd5b60408051808201825284815260208082018581526000888152600983528490209251835551600190920191909155815185815290810184905285917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a250505050565b82610c608161163f565b610c6957600080fd5b6000848152600260205260409020610c8290848461229a565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484604051610c48929190612acf565b600080610cc383603c61153b565b90508051600003610cd75750600092915050565b610ce081611cbf565b9392505050565b6060600a60008581526020019081526020016000208383604051610d0c929190612a76565b90815260200160405180910390208054610d2590612b12565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5190612b12565b8015610d9e5780601f10610d7357610100808354040283529160200191610d9e565b820191906000526020600020905b815481529060010190602001808311610d8157829003601f168201915b505050505090509392505050565b6000818152600360205260409020805460609190610dc990612b12565b80601f0160208091040260200160405190810160405280929190818152602001828054610df590612b12565b8015610e425780601f10610e1757610100808354040283529160200191610e42565b820191906000526020600020905b815481529060010190602001808311610e2557829003601f168201915b50505050509050919050565b83610e588161163f565b610e6157600080fd5b83610e6d600182612a5f565b1615610e7857600080fd5b6000858152602081815260408083208784529091529020610e9a90848461229a565b50604051849086907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe390600090a35050505050565b6000818152600860205260409020805460609190610dc990612b12565b82610ef68161163f565b610eff57600080fd5b6000848152600860205260409020610f1890848461229a565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f78484604051610c48929190612acf565b82610f558161163f565b610f5e57600080fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af7528484604051610f90929190612622565b60405180910390a2603c8303610ff457837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2610fcb84611cbf565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a25b60008481526001602090815260408083208684528252909120835161101b9285019061233c565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff821633036110cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c660000000000000000000000000000000000000000000000606482015260840160405180910390fd5b336000818152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000838152600560209081526040808320600483528184205484528252808320858452825280832061ffff851684529091529020805460609190610d2590612b12565b60608167ffffffffffffffff8111156111c0576111c06126e6565b6040519080825280602002602001820160405280156111f357816020015b60608152602001906001900390816111de5790505b50905060005b828110156112b9576000803086868581811061121757611217612ae3565b90506020028101906112299190612b65565b604051611237929190612a76565b600060405180830381855af49150503d8060008114611272576040519150601f19603f3d011682016040523d82523d6000602084013e611277565b606091505b50915091508161128657600080fd5b8084848151811061129957611299612ae3565b6020026020010181905250505080806112b190612bca565b9150506111f9565b5092915050565b806112ca8161163f565b6112d357600080fd5b60008281526004602052604081208054916112ed83612bca565b909155505060405182907fb757169b8492ca2f1c6619d9d76ce22803035c3b1d5f6930dffe7b127c1a198390600090a25050565b6000818152600260205260409020805460609190610dc990612b12565b826113488161163f565b61135157600080fd5b6000848152600360205260408120805461136a90612b12565b80601f016020809104026020016040519081016040528092919081815260200182805461139690612b12565b80156113e35780601f106113b8576101008083540402835291602001916113e3565b820191906000526020600020905b8154815290600101906020018083116113c657829003601f168201915b50505060008881526003602052604090209293506114069291508690508561229a565b50847f8f15ed4b723ef428f250961da8315675b507046737e19319fc1a4d81bfe87f8582868660405161143b93929190612c02565b60405180910390a25050505050565b816114548161163f565b61145d57600080fd5b61146c83603c61034f85611ce7565b505050565b8261147b8161163f565b61148457600080fd5b60008481526007602090815260408083207fffffffff0000000000000000000000000000000000000000000000000000000087168085529083529281902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716908117909155905190815286917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a350505050565b6000828152600160209081526040808320848452909152902080546060919061156390612b12565b80601f016020809104026020016040519081016040528092919081815260200182805461158f90612b12565b80156115dc5780601f106115b1576101008083540402835291602001916115dc565b820191906000526020600020905b8154815290600101906020018083116115bf57829003601f168201915b5050505050905092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f59d1d43c00000000000000000000000000000000000000000000000000000000148061049d575061049d82611d20565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806116ba57503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016145b156116c757506001919050565b6040517f02571be3000000000000000000000000000000000000000000000000000000008152600481018390526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906302571be390602401602060405180830381865afa158015611755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117799190612c32565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611880576040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636352211e90602401602060405180830381865afa158015611859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187d9190612c32565b90505b73ffffffffffffffffffffffffffffffffffffffff8116331480610ce0575073ffffffffffffffffffffffffffffffffffffffff81166000908152600b6020908152604080832033845290915290205460ff16610ce0565b6119266040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c0810182905261049d81611bd7565b6020810151815160609161049d916119519082611d76565b84519190611dd8565b60a081015160c082015160609161049d91611951908290612a5f565b600081518351148015610ce05750610ce08360008460008751611e4f565b600087815260046020908152604082205488519189019190912090916119bb878787611dd8565b90508315611ac45760008a81526005602090815260408083208684528252808320858452825280832061ffff8c168452909152902080546119fb90612b12565b159050611a4f5760008a815260066020908152604080832086845282528083208584529091528120805461ffff1691611a3383612c4f565b91906101000a81548161ffff021916908361ffff160217905550505b60008a81526005602090815260408083208684528252808320858452825280832061ffff8c1684529091528120611a85916123b0565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611ab7929190612c8b565b60405180910390a2611bcb565b60008a81526005602090815260408083208684528252808320858452825280832061ffff8c16845290915290208054611afc90612b12565b9050600003611b525760008a815260066020908152604080832086845282528083208584529091528120805461ffff1691611b3683612cb1565b91906101000a81548161ffff021916908361ffff160217905550505b60008a81526005602090815260408083208684528252808320858452825280832061ffff8c16845282529091208251611b8d9284019061233c565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611bc293929190612cd2565b60405180910390a25b50505050505050505050565b60c08101516020820181905281515111611bee5750565b6000611c0282600001518360200151611d76565b8260200151611c119190612d01565b8251909150611c209082611e72565b61ffff166040830152611c34600282612d01565b8251909150611c439082611e72565b61ffff166060830152611c57600282612d01565b8251909150611c669082611e9a565b63ffffffff166080830152611c7c600482612d01565b8251909150600090611c8e9083611e72565b61ffff169050611c9f600283612d01565b60a084018190529150611cb28183612d01565b60c0909301929092525050565b60008151601414611ccf57600080fd5b50602001516c01000000000000000000000000900490565b6040805160148082528183019092526060916020820181803683375050506c010000000000000000000000009290920260208301525090565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fc869023300000000000000000000000000000000000000000000000000000000148061049d575061049d82611ec4565b6000815b83518110611d8a57611d8a612d19565b6000611d968583611f1a565b60ff169050611da6816001612d01565b611db09083612d01565b915080600003611dc05750611dc6565b50611d7a565b611dd08382612a5f565b949350505050565b8251606090611de78385612d01565b1115611df257600080fd5b60008267ffffffffffffffff811115611e0d57611e0d6126e6565b6040519080825280601f01601f191660200182016040528015611e37576020820181803683370190505b50905060208082019086860101610ab0828287611f3e565b6000611e5c848484611fb2565b611e67878785611fb2565b149695505050505050565b8151600090611e82836002612d01565b1115611e8d57600080fd5b50016002015161ffff1690565b8151600090611eaa836004612d01565b1115611eb557600080fd5b50016004015163ffffffff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f691f343100000000000000000000000000000000000000000000000000000000148061049d575061049d82611fd6565b6000828281518110611f2e57611f2e612ae3565b016020015160f81c905092915050565b60208110611f765781518352611f55602084612d01565b9250611f62602083612d01565b9150611f6f602082612a5f565b9050611f3e565b905182516020929092036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169116179052565b8251600090611fc18385612d01565b1115611fcc57600080fd5b5091016020012090565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f124a319c00000000000000000000000000000000000000000000000000000000148061049d575061049d8260007fffffffff0000000000000000000000000000000000000000000000000000000082167fa8fa56820000000000000000000000000000000000000000000000000000000014806120ba57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5c98042b00000000000000000000000000000000000000000000000000000000145b8061049d575061049d8260007fffffffff0000000000000000000000000000000000000000000000000000000082167fbc1c58d100000000000000000000000000000000000000000000000000000000148061049d575061049d8260007fffffffff0000000000000000000000000000000000000000000000000000000082167f3b3b57de0000000000000000000000000000000000000000000000000000000014806121a857507fffffffff0000000000000000000000000000000000000000000000000000000082167ff1cb7e0600000000000000000000000000000000000000000000000000000000145b8061049d575061049d8260007fffffffff0000000000000000000000000000000000000000000000000000000082167f2203ab5600000000000000000000000000000000000000000000000000000000148061049d575061049d8260007fffffffff0000000000000000000000000000000000000000000000000000000082167fac9650d800000000000000000000000000000000000000000000000000000000148061049d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461049d565b8280546122a690612b12565b90600052602060002090601f0160209004810192826122c8576000855561232c565b82601f106122ff578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082351617855561232c565b8280016001018555821561232c579182015b8281111561232c578235825591602001919060010190612311565b506123389291506123ed565b5090565b82805461234890612b12565b90600052602060002090601f01602090048101928261236a576000855561232c565b82601f1061238357805160ff191683800117855561232c565b8280016001018555821561232c579182015b8281111561232c578251825591602001919060010190612395565b5080546123bc90612b12565b6000825580601f106123cc575050565b601f0160209004906000526020600020908101906123ea91906123ed565b50565b5b8082111561233857600081556001016123ee565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461243257600080fd5b919050565b60006020828403121561244957600080fd5b610ce082612402565b60008083601f84011261246457600080fd5b50813567ffffffffffffffff81111561247c57600080fd5b602083019150836020828501011115610bcf57600080fd5b6000806000604084860312156124a957600080fd5b83359250602084013567ffffffffffffffff8111156124c757600080fd5b6124d386828701612452565b9497909650939450505050565b6000806000806000606086880312156124f857600080fd5b85359450602086013567ffffffffffffffff8082111561251757600080fd5b61252389838a01612452565b9096509450604088013591508082111561253c57600080fd5b5061254988828901612452565b969995985093965092949392505050565b6000806040838503121561256d57600080fd5b8235915061257d60208401612402565b90509250929050565b6000806040838503121561259957600080fd5b50508035926020909101359150565b60005b838110156125c35781810151838201526020016125ab565b838111156125d2576000848401525b50505050565b600081518084526125f08160208601602086016125a8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b828152604060208201526000611dd060408301846125d8565b60008060006060848603121561265057600080fd5b505081359360208301359350604090920135919050565b60006020828403121561267957600080fd5b5035919050565b602081526000610ce060208301846125d8565b600080600080606085870312156126a957600080fd5b8435935060208501359250604085013567ffffffffffffffff8111156126ce57600080fd5b6126da87828801612452565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561272a57600080fd5b8335925060208401359150604084013567ffffffffffffffff8082111561275057600080fd5b818601915086601f83011261276457600080fd5b813581811115612776576127766126e6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156127bc576127bc6126e6565b816040528281528960208487010111156127d557600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b73ffffffffffffffffffffffffffffffffffffffff811681146123ea57600080fd5b6000806040838503121561282c57600080fd5b8235612837816127f7565b91506020830135801515811461284c57600080fd5b809150509250929050565b60008060006060848603121561286c57600080fd5b8335925060208401359150604084013561ffff8116811461288c57600080fd5b809150509250925092565b600080602083850312156128aa57600080fd5b823567ffffffffffffffff808211156128c257600080fd5b818501915085601f8301126128d657600080fd5b8135818111156128e557600080fd5b8660208260051b85010111156128fa57600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561297f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261296d8583516125d8565b94509285019290850190600101612933565b5092979650505050505050565b6000806040838503121561299f57600080fd5b82359150602083013561284c816127f7565b6000806000606084860312156129c657600080fd5b833592506129d660208501612402565b9150604084013561288c816127f7565b600080604083850312156129f957600080fd5b8235612a04816127f7565b9150602083013561284c816127f7565b60008251612a268184602087016125a8565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612a7157612a71612a30565b500390565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000611dd0602083018486612a86565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c90821680612b2657607f821691505b602082108103612b5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b9a57600080fd5b83018035915067ffffffffffffffff821115612bb557600080fd5b602001915036819003821315610bcf57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612bfb57612bfb612a30565b5060010190565b604081526000612c1560408301866125d8565b8281036020840152612c28818587612a86565b9695505050505050565b600060208284031215612c4457600080fd5b8151610ce0816127f7565b600061ffff821680612c6357612c63612a30565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b604081526000612c9e60408301856125d8565b905061ffff831660208301529392505050565b600061ffff808316818103612cc857612cc8612a30565b6001019392505050565b606081526000612ce560608301866125d8565b61ffff851660208401528281036040840152612c2881856125d8565b60008219821115612d1457612d14612a30565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea264697066735822122017b3e680dc23d712e3971f2217d550695e594a6f174f0ed1adabba4ba578aac564736f6c634300080d0033'; diff --git a/packages/web3-eth-ens/test/fixtures/ens/reverse_registrar.json b/packages/web3-eth-ens/test/fixtures/ens/reverse_registrar.json new file mode 100644 index 00000000000..a878744a3a6 --- /dev/null +++ b/packages/web3-eth-ens/test/fixtures/ens/reverse_registrar.json @@ -0,0 +1,5 @@ +{ + "status": "1", + "message": "OK-Missing/Invalid API Key, rate limit of 1/5sec applied", + "result": "[{\"inputs\":[{\"internalType\":\"contract ENS\",\"name\":\"ensAddr\",\"type\":\"address\"},{\"internalType\":\"contract Resolver\",\"name\":\"resolverAddr\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[],\"name\":\"ADDR_REVERSE_NODE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"claimWithResolver\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"defaultResolver\",\"outputs\":[{\"internalType\":\"contract Resolver\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ens\",\"outputs\":[{\"internalType\":\"contract ENS\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"node\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" +} diff --git a/packages/web3-eth-ens/test/fixtures/system_tests_utils.ts b/packages/web3-eth-ens/test/fixtures/system_tests_utils.ts new file mode 120000 index 00000000000..2ab08a83752 --- /dev/null +++ b/packages/web3-eth-ens/test/fixtures/system_tests_utils.ts @@ -0,0 +1 @@ +../../../../scripts/system_tests_utils.ts \ No newline at end of file diff --git a/packages/web3-eth-ens/test/fixtures/utils.ts b/packages/web3-eth-ens/test/fixtures/utils.ts new file mode 100644 index 00000000000..b972253f988 --- /dev/null +++ b/packages/web3-eth-ens/test/fixtures/utils.ts @@ -0,0 +1,31 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const namehashValidData: [string, string][] = [ + ['', '0x0000000000000000000000000000000000000000000000000000000000000000'], + ['eth', '0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae'], + ['foo.eth', '0xde9b09fd7c5f901e23a3f19fecc54828e9c848539801e86591bd9801b019f84f'], + ['FOO.eth', '0xde9b09fd7c5f901e23a3f19fecc54828e9c848539801e86591bd9801b019f84f'], +]; + +export const normalizeValidData: [string, string][] = [ + ['Öbb.at', 'öbb.at'], + ['Ⓜ', 'm'], + ['foo.eth', 'foo.eth'], + ['Foo.eth', 'foo.eth'], + ['🦚.eth', '🦚.eth'], +]; diff --git a/packages/web3-eth-ens/test/integration/ens.events.test.ts b/packages/web3-eth-ens/test/integration/ens.events.test.ts new file mode 100644 index 00000000000..79e37c212cb --- /dev/null +++ b/packages/web3-eth-ens/test/integration/ens.events.test.ts @@ -0,0 +1,168 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { Contract, PayableTxOptions } from 'web3-eth-contract'; +import { sha3 } from 'web3-utils'; +import { getBlock } from 'web3-eth'; + +import { Address, Bytes, DEFAULT_RETURN_FORMAT } from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { IpcProvider } from 'web3-providers-ipc'; +import { ENS } from '../../src'; +import { namehash } from '../../src/utils'; + +import { + getSystemTestAccounts, + getSystemTestProvider, + isWs, + isIpc, + closeOpenConnection, + isSocket, + describeIf, + getSystemTestProviderUrl, +} from '../fixtures/system_tests_utils'; + +import { ENSRegistryAbi } from '../fixtures/ens/abi/ENSRegistry'; +import { ENSRegistryBytecode } from '../fixtures/ens/bytecode/ENSRegistryBytecode'; +import { NameWrapperAbi } from '../fixtures/ens/abi/NameWrapper'; +import { NameWrapperBytecode } from '../fixtures/ens/bytecode/NameWrapperBytecode'; +import { PublicResolverAbi } from '../fixtures/ens/abi/PublicResolver'; +import { PublicResolverBytecode } from '../fixtures/ens/bytecode/PublicResolverBytecode'; + +describeIf(isSocket)('ens events', () => { + let registry: Contract; + let resolver: Contract; + let nameWrapper: Contract; + + type ResolverContract = Contract; + + let Resolver: ResolverContract; + let setEnsResolver: ResolverContract; + let getEnsResolver: ResolverContract; + + let sendOptions: PayableTxOptions; + + const domain = 'test'; + const domainNode = namehash(domain); + const node = namehash('resolver'); + const label = sha3('resolver') as string; + + let accounts: string[]; + let ens: ENS; + let defaultAccount: string; + let accountOne: string; + + const ZERO_NODE: Bytes = '0x0000000000000000000000000000000000000000000000000000000000000000'; + const addressOne: Address = '0x0000000000000000000000000000000000000001'; + + beforeAll(async () => { + accounts = await getSystemTestAccounts(); + + [defaultAccount, accountOne] = accounts; + + sendOptions = { from: defaultAccount, gas: '10000000' }; + + const Registry = new Contract(ENSRegistryAbi, undefined, { + provider: getSystemTestProvider(), + }); + + const NameWrapper = new Contract(NameWrapperAbi, undefined, { + provider: getSystemTestProvider(), + }); + + Resolver = new Contract(PublicResolverAbi, undefined, { + provider: getSystemTestProvider(), + }); + + registry = await Registry.deploy({ data: ENSRegistryBytecode }).send(sendOptions); + + nameWrapper = await NameWrapper.deploy({ data: NameWrapperBytecode }).send(sendOptions); + + resolver = await Resolver.deploy({ + data: PublicResolverBytecode, + arguments: [ + registry.options.address as string, + nameWrapper.options.address as string, + accountOne, + defaultAccount, + ], + }).send(sendOptions); + + await registry.methods.setSubnodeOwner(ZERO_NODE, label, defaultAccount).send(sendOptions); + await registry.methods + .setResolver(node, resolver.options.address as string) + .send(sendOptions); + await resolver.methods.setAddr(node, addressOne).send(sendOptions); + + await registry.methods + .setSubnodeOwner(ZERO_NODE, sha3(domain) as string, defaultAccount) + .send(sendOptions); + + const clientUrl = getSystemTestProviderUrl(); + let provider; + if (isIpc) provider = new IpcProvider(clientUrl); + else if (isWs) provider = new ENS.providers.WebsocketProvider(clientUrl); + else provider = new ENS.providers.HttpProvider(clientUrl); + + ens = new ENS(registry.options.address, provider); + + const block = await getBlock(ens, 'latest', false, DEFAULT_RETURN_FORMAT); + const gas = block.gasLimit.toString(); + + // Increase gas for contract calls + sendOptions = { + ...sendOptions, + gas, + }; + }); + + afterAll(async () => { + await closeOpenConnection(ens); + // @ts-expect-error @typescript-eslint/ban-ts-comment + await closeOpenConnection(ens?._registry?.contract); + await closeOpenConnection(getEnsResolver); + await closeOpenConnection(setEnsResolver); + await closeOpenConnection(registry); + await closeOpenConnection(resolver); + await closeOpenConnection(nameWrapper); + }); + + beforeEach(async () => { + // set up subnode + await registry.methods + .setSubnodeOwner(namehash(domain), sha3('web3js') as string, defaultAccount) + .send(sendOptions); + }); + + // eslint-disable-next-line jest/expect-expect, jest/no-done-callback, jest/consistent-test-it + it('NewResolver event', async () => { + // eslint-disable-next-line @typescript-eslint/no-misused-promises, no-async-promise-executor + await new Promise(async resolve => { + const event = ens.events.NewResolver(); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + event.on('data', () => { + resolve(); + }); + + await registry.methods + .setResolver(domainNode, resolver.options.address as string) + .send(sendOptions); + }); + }); +}); diff --git a/packages/web3-eth-ens/test/integration/ens.test.ts b/packages/web3-eth-ens/test/integration/ens.test.ts new file mode 100644 index 00000000000..bd978461e59 --- /dev/null +++ b/packages/web3-eth-ens/test/integration/ens.test.ts @@ -0,0 +1,187 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { getBlock } from 'web3-eth'; +import { Contract, PayableTxOptions } from 'web3-eth-contract'; +import { Address, Bytes, DEFAULT_RETURN_FORMAT } from 'web3-types'; +import { sha3, toChecksumAddress } from 'web3-utils'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { IpcProvider } from 'web3-providers-ipc'; +import { ENS } from '../../src'; +import { namehash } from '../../src/utils'; + +import { + closeOpenConnection, + getSystemTestAccounts, + getSystemTestProvider, + getSystemTestProviderUrl, + isIpc, + isSocket, + isWs, +} from '../fixtures/system_tests_utils'; + +import { PublicResolverAbi as PublicResolver } from '../../src/abi/ens/PublicResolver'; +import { ENSRegistryAbi } from '../fixtures/ens/abi/ENSRegistry'; +import { NameWrapperAbi } from '../fixtures/ens/abi/NameWrapper'; +import { PublicResolverAbi } from '../fixtures/ens/abi/PublicResolver'; +import { ENSRegistryBytecode } from '../fixtures/ens/bytecode/ENSRegistryBytecode'; +import { NameWrapperBytecode } from '../fixtures/ens/bytecode/NameWrapperBytecode'; +import { PublicResolverBytecode } from '../fixtures/ens/bytecode/PublicResolverBytecode'; + +describe('ens', () => { + let registry: Contract; + let resolver: Contract; + let nameWrapper: Contract; + + type ResolverContract = Contract; + + let Resolver: ResolverContract; + let getEnsResolver: Contract; + + let sendOptions: PayableTxOptions; + + const domain = 'test'; + const node = namehash('resolver'); + const label = sha3('resolver') as string; + + const subdomain = 'subdomain'; + const fullDomain = `${subdomain}.${domain}`; + const web3jsName = 'web3js.test'; + + let accounts: string[]; + let ens: ENS; + let defaultAccount: string; + let accountOne: string; + + const ZERO_NODE: Bytes = '0x0000000000000000000000000000000000000000000000000000000000000000'; + const addressOne: Address = '0x0000000000000000000000000000000000000001'; + + beforeAll(async () => { + accounts = await getSystemTestAccounts(); + + [defaultAccount, accountOne] = accounts; + + sendOptions = { from: defaultAccount, gas: '10000000' }; + + const Registry = new Contract(ENSRegistryAbi, undefined, { + provider: getSystemTestProvider(), + }); + + const NameWrapper = new Contract(NameWrapperAbi, undefined, { + provider: getSystemTestProvider(), + }); + + Resolver = new Contract(PublicResolverAbi, undefined, { + provider: getSystemTestProvider(), + }); + + registry = await Registry.deploy({ data: ENSRegistryBytecode }).send(sendOptions); + + nameWrapper = await NameWrapper.deploy({ data: NameWrapperBytecode }).send(sendOptions); + + resolver = await Resolver.deploy({ + data: PublicResolverBytecode, + arguments: [ + registry.options.address as string, + nameWrapper.options.address as string, + accountOne, + defaultAccount, + ], + }).send(sendOptions); + + await registry.methods.setSubnodeOwner(ZERO_NODE, label, defaultAccount).send(sendOptions); + await registry.methods + .setResolver(node, resolver.options.address as string) + .send(sendOptions); + await resolver.methods.setAddr(node, addressOne).send(sendOptions); + + await registry.methods + .setSubnodeOwner(ZERO_NODE, sha3(domain) as string, defaultAccount) + .send(sendOptions); + + const clientUrl = getSystemTestProviderUrl(); + let provider; + if (isIpc) provider = new IpcProvider(clientUrl); + else if (isWs) provider = new ENS.providers.WebsocketProvider(clientUrl); + else provider = new ENS.providers.HttpProvider(clientUrl); + + ens = new ENS(registry.options.address, provider); + + const block = await getBlock(ens, 'latest', false, DEFAULT_RETURN_FORMAT); + const gas = block.gasLimit.toString(); + + // Increase gas for contract calls + sendOptions = { + ...sendOptions, + gas, + }; + }); + + afterAll(async () => { + if (isSocket) { + await closeOpenConnection(ens); + // @ts-expect-error @typescript-eslint/ban-ts-comment + await closeOpenConnection(ens?._registry?.contract); + await closeOpenConnection(getEnsResolver); + await closeOpenConnection(registry); + await closeOpenConnection(resolver); + await closeOpenConnection(nameWrapper); + } + }); + + beforeEach(async () => { + // set up subnode + await registry.methods + .setSubnodeOwner(namehash(domain), sha3('web3js') as string, defaultAccount) + .send(sendOptions); + }); + + it('should return the subnode owner of "resolver"', async () => { + const owner = await ens.getOwner('resolver'); + + expect(owner).toEqual(toChecksumAddress(defaultAccount)); + }); + + it('should return the registered resolver for the subnode "resolver"', async () => { + getEnsResolver = await ens.getResolver('resolver'); + + expect(getEnsResolver.options.address).toEqual(resolver.options.address); + }); + + it('should get the owner record for a name', async () => { + const web3jsOwner = await ens.getOwner(web3jsName); + + expect(web3jsOwner).toEqual(toChecksumAddress(defaultAccount)); + }); + + it('should get TTL', async () => { + const TTL = await ens.getTTL(web3jsName); + + expect(TTL).toBe(BigInt(0)); + }); + + it('shoud record exists', async () => { + await registry.methods + .setSubnodeOwner(namehash(domain), sha3(subdomain) as string, defaultAccount) + .send(sendOptions); + + const exists = await ens.recordExists(fullDomain); + + expect(exists).toBeTruthy(); + }); +}); diff --git a/packages/web3-eth-ens/test/integration/jest.config.js b/packages/web3-eth-ens/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-eth-ens/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-eth-ens/test/integration/resolver.test.ts b/packages/web3-eth-ens/test/integration/resolver.test.ts new file mode 100644 index 00000000000..d34aaaffc72 --- /dev/null +++ b/packages/web3-eth-ens/test/integration/resolver.test.ts @@ -0,0 +1,242 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable @typescript-eslint/no-unused-vars */ +import Web3Eth from 'web3-eth'; +import { Contract, PayableTxOptions } from 'web3-eth-contract'; +import { sha3 } from 'web3-utils'; + +import { Address, Bytes, DEFAULT_RETURN_FORMAT } from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { IpcProvider } from 'web3-providers-ipc'; +import { ENS } from '../../src'; +import { namehash } from '../../src/utils'; + +import { + closeOpenConnection, + getSystemTestAccounts, + getSystemTestProvider, + getSystemTestProviderUrl, + isIpc, + isSocket, + isWs, + itIf, +} from '../fixtures/system_tests_utils'; + +import { ENSRegistryAbi } from '../fixtures/ens/abi/ENSRegistry'; +import { PublicResolverAbi } from '../fixtures/ens/abi/PublicResolver'; +import { NameWrapperAbi } from '../fixtures/ens/abi/NameWrapper'; +import { ENSRegistryBytecode } from '../fixtures/ens/bytecode/ENSRegistryBytecode'; +import { NameWrapperBytecode } from '../fixtures/ens/bytecode/NameWrapperBytecode'; +import { PublicResolverBytecode } from '../fixtures/ens/bytecode/PublicResolverBytecode'; + +describe('ens', () => { + let registry: Contract; + let resolver: Contract; + let nameWrapper: Contract; + + let Resolver: Contract; + + let sendOptions: PayableTxOptions; + + const domain = 'test'; + const domainNode = namehash(domain); + const node = namehash('resolver'); + const label = sha3('resolver') as string; + + let web3Eth: Web3Eth; + + let accounts: string[]; + let ens: ENS; + let defaultAccount: string; + let accountOne: string; + + const ZERO_NODE: Bytes = '0x0000000000000000000000000000000000000000000000000000000000000000'; + const addressOne: Address = '0x0000000000000000000000000000000000000001'; + + const contentHash = '0x0000000000000000000000000000000000000000000000000000000000000001'; + + const DEFAULT_COIN_TYPE = 60; + + beforeAll(async () => { + accounts = await getSystemTestAccounts(); + + [defaultAccount, accountOne] = accounts; + + sendOptions = { from: defaultAccount, gas: '10000000' }; + + const Registry = new Contract(ENSRegistryAbi, undefined, { + provider: getSystemTestProvider(), + }); + + const NameWrapper = new Contract(NameWrapperAbi, undefined, { + provider: getSystemTestProvider(), + }); + + Resolver = new Contract(PublicResolverAbi, undefined, { + provider: getSystemTestProvider(), + }); + + registry = await Registry.deploy({ data: ENSRegistryBytecode }).send(sendOptions); + + nameWrapper = await NameWrapper.deploy({ data: NameWrapperBytecode }).send(sendOptions); + + resolver = await Resolver.deploy({ + data: PublicResolverBytecode, + arguments: [ + registry.options.address as string, + nameWrapper.options.address as string, + accountOne, + defaultAccount, + ], + }).send(sendOptions); + + await registry.methods.setSubnodeOwner(ZERO_NODE, label, defaultAccount).send(sendOptions); + await registry.methods + .setResolver(node, resolver.options.address as string) + .send(sendOptions); + await resolver.methods.setAddr(node, addressOne).send(sendOptions); + + await registry.methods + .setSubnodeOwner(ZERO_NODE, sha3(domain) as string, defaultAccount) + .send(sendOptions); + + const clientUrl = getSystemTestProviderUrl(); + let provider; + if (isIpc) provider = new IpcProvider(clientUrl); + else if (isWs) provider = new ENS.providers.WebsocketProvider(clientUrl); + else provider = new ENS.providers.HttpProvider(clientUrl); + + ens = new ENS(registry.options.address, provider); + + web3Eth = new Web3Eth(provider); + const block = await web3Eth.getBlock('latest', false, DEFAULT_RETURN_FORMAT); + const gas = block.gasLimit.toString(); + + // Increase gas for contract calls + sendOptions = { + ...sendOptions, + gas, + }; + }); + + afterAll(async () => { + if (isSocket) { + await closeOpenConnection(ens); + // @ts-expect-error @typescript-eslint/ban-ts-comment + await closeOpenConnection(ens?._registry?.contract); + await closeOpenConnection(registry); + await closeOpenConnection(resolver); + await closeOpenConnection(nameWrapper); + } + }); + beforeEach(async () => { + // set up subnode + await registry.methods + .setSubnodeOwner(ZERO_NODE, sha3('eth') as string, defaultAccount) + .send(sendOptions); + }); + + it('supports known interfaces', async () => { + await expect(ens.supportsInterface('resolver', '0x3b3b57de')).resolves.toBeTruthy(); // IAddrResolver + await expect(ens.supportsInterface('resolver', '0xf1cb7e06')).resolves.toBeTruthy(); // IAddressResolver + await expect(ens.supportsInterface('resolver', '0x691f3431')).resolves.toBeTruthy(); // INameResolver + await expect(ens.supportsInterface('resolver', '0x2203ab56')).resolves.toBeTruthy(); // IABIResolver + await expect(ens.supportsInterface('resolver', '0xc8690233')).resolves.toBeTruthy(); // IPubkeyResolver + await expect(ens.supportsInterface('resolver', '0x59d1d43c')).resolves.toBeTruthy(); // ITextResolver + await expect(ens.supportsInterface('resolver', '0xbc1c58d1')).resolves.toBeTruthy(); // IContentHashResolver + await expect(ens.supportsInterface('resolver', '0xa8fa5682')).resolves.toBeTruthy(); // IDNSRecordResolver + await expect(ens.supportsInterface('resolver', '0x5c98042b')).resolves.toBeTruthy(); // IDNSZoneResolver + await expect(ens.supportsInterface('resolver', '0x01ffc9a7')).resolves.toBeTruthy(); // IInterfaceResolver + }); + + it('does not support a random interface', async () => { + await expect(ens.supportsInterface('resolver', '0x3b3b57df')).resolves.toBeFalsy(); + }); + + it('fetch pubkey', async () => { + await registry.methods + .setResolver(domainNode, resolver.options.address as string) + .send(sendOptions); + + const res = await ens.getPubkey(domain); + expect(res.x).toBe('0x0000000000000000000000000000000000000000000000000000000000000000'); + expect(res.y).toBe('0x0000000000000000000000000000000000000000000000000000000000000000'); + }); + + it('permits setting public key by owner', async () => { + const x = '0x1000000000000000000000000000000000000000000000000000000000000000'; + const y = '0x2000000000000000000000000000000000000000000000000000000000000000'; + + await resolver.methods.setPubkey(domainNode, x, y).send(sendOptions); + + const result = await ens.getPubkey(domain); + + expect(result[0]).toBe(x); + expect(result[1]).toBe(y); + }); + + it('sets contenthash', async () => { + await resolver.methods.setContenthash(domainNode, contentHash).send(sendOptions); + + const res = await resolver.methods.contenthash(domainNode).call(sendOptions); + expect(res).toBe(contentHash); + }); + + // eslint-disable-next-line jest/expect-expect + itIf(isSocket)('ContenthashChanged event', async () => { + // eslint-disable-next-line @typescript-eslint/no-misused-promises, no-async-promise-executor + await new Promise(async resolve => { + const resolver2 = await ens.getResolver('resolver'); + const event = resolver2.events.ContenthashChanged(); + + event.on('data', () => { + resolve(); + }); + await resolver.methods.setContenthash(domainNode, contentHash).send(sendOptions); + }); + }); + + it('fetches contenthash', async () => { + await resolver.methods.setContenthash(domainNode, contentHash).call(sendOptions); + + const res = await ens.getContenthash(domain); + expect(res).toBe(contentHash); + }); + + it('sets address', async () => { + await registry.methods + .setResolver(domainNode, resolver.options.address as string) + .send(sendOptions); + + await resolver.methods.setAddr(domainNode, accounts[1]).send(sendOptions); + + const res = await resolver.methods.addr(domainNode, DEFAULT_COIN_TYPE).call(sendOptions); + expect(res).toBe(accounts[1]); + }); + + it('fetches address', async () => { + await registry.methods + .setResolver(domainNode, resolver.options.address as string) + .send(sendOptions); + + await resolver.methods.setAddr(domainNode, accountOne).send(sendOptions); + + const resultAddress = await ens.getAddress(domain); + expect(resultAddress).toBe(accountOne); + }); +}); diff --git a/packages/web3-eth-ens/test/integration/setup.js b/packages/web3-eth-ens/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-eth-ens/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-eth-ens/test/tsconfig.json b/packages/web3-eth-ens/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-eth-ens/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-eth-ens/test/unit/constructor.test.ts b/packages/web3-eth-ens/test/unit/constructor.test.ts new file mode 100644 index 00000000000..8bb4ec2230d --- /dev/null +++ b/packages/web3-eth-ens/test/unit/constructor.test.ts @@ -0,0 +1,64 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Context, Web3ContextObject } from 'web3-core'; +import { Registry } from '../../src/registry'; +import { Resolver } from '../../src/resolver'; +import { ENS } from '../../src/ens'; +import { registryAddresses } from '../../src/config'; + +describe('ens', () => { + let object: Web3ContextObject; + + beforeAll(() => { + const context = new Web3Context('http://test.com'); + object = context.getContextObject(); + }); + it('should construct registry with expected methods', () => { + const registry = new Registry(object); + + expect(registry.getOwner).toBeDefined(); + expect(registry.getResolver).toBeDefined(); + expect(registry.getTTL).toBeDefined(); + expect(registry.recordExists).toBeDefined(); + }); + + it('should construct resolver with expected methods', () => { + const registry = new Registry(object); + const resolver = new Resolver(registry); + + expect(resolver.getAddress).toBeDefined(); + expect(resolver.checkInterfaceSupport).toBeDefined(); + expect(resolver.supportsInterface).toBeDefined(); + expect(resolver.getPubkey).toBeDefined(); + expect(resolver.getContenthash).toBeDefined(); + }); + + it('should construct main ens class with expected methods', () => { + const ens = new ENS(registryAddresses.main, 'http://127.0.0.1:8545'); + + expect(ens.getResolver).toBeDefined(); + expect(ens.recordExists).toBeDefined(); + expect(ens.getTTL).toBeDefined(); + expect(ens.getOwner).toBeDefined(); + expect(ens.getAddress).toBeDefined(); + expect(ens.getPubkey).toBeDefined(); + expect(ens.getContenthash).toBeDefined(); + expect(ens.checkNetwork).toBeDefined(); + expect(ens.supportsInterface).toBeDefined(); + }); +}); diff --git a/packages/web3-eth-ens/test/unit/ens.test.ts b/packages/web3-eth-ens/test/unit/ens.test.ts new file mode 100644 index 00000000000..9f6f4dd7efe --- /dev/null +++ b/packages/web3-eth-ens/test/unit/ens.test.ts @@ -0,0 +1,252 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Context, Web3ContextObject, Web3PromiEvent } from 'web3-core'; +import { ENSNetworkNotSyncedError, ENSUnsupportedNetworkError } from 'web3-errors'; +import { Contract } from 'web3-eth-contract'; +import { PublicResolverAbi } from '../../src/abi/ens/PublicResolver'; +import { registryAddresses } from '../../src/config'; + +import { ENS } from '../../src/ens'; + +jest.useFakeTimers().setSystemTime(new Date('2020-01-01')); + +jest.mock('web3-eth', () => ({ + __esModule: true, + isSyncing: jest.fn(), +})); + +// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires +const { isSyncing } = require('web3-eth'); + +const expectedNetworkId = '0x1'; +jest.mock('web3-net', () => ({ + getId: jest.fn(), +})); +// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires +const { getId } = require('web3-net'); + +describe('ens', () => { + let object: Web3ContextObject; + let resolverContract: Contract; + const mockAddress = '0x0000000000000000000000000000000000000000'; + const ENS_NAME = 'web3js.eth'; + let ens: ENS; + + beforeAll(() => { + const context = new Web3Context('http://test.com'); + object = context.getContextObject(); + + resolverContract = new Contract(PublicResolverAbi, mockAddress); + ens = new ENS(registryAddresses.main, object); + }); + + describe('Resolver', () => { + it('getResolver', async () => { + const getResolverMock = jest + .spyOn(ens['_registry'], 'getResolver') + .mockResolvedValue(resolverContract); + + await ens.getResolver(ENS_NAME); + + expect(getResolverMock).toHaveBeenCalledWith(ENS_NAME); + }); + }); + + describe('Record', () => { + it('recordExists', async () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest.spyOn({ call: () => {} }, 'call'); + + const recordExistsMock = jest.spyOn(ens['_registry'], 'recordExists').mockReturnValue({ + call, + } as unknown as Web3PromiEvent); + await ens.recordExists(ENS_NAME); + + expect(recordExistsMock).toHaveBeenCalledWith(ENS_NAME); + }); + }); + + describe('ttl', () => { + it('getTTL', async () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest.spyOn({ call: () => {} }, 'call'); + + const getTTLMock = jest.spyOn(ens['_registry'], 'getTTL').mockReturnValue({ + call, + } as unknown as Web3PromiEvent); + + await ens.getTTL(ENS_NAME); + expect(getTTLMock).toHaveBeenCalledWith(ENS_NAME); + }); + }); + + describe('owner', () => { + it('getOwner', async () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest.spyOn({ call: () => {} }, 'call'); + + const getOwnerMock = jest.spyOn(ens['_registry'], 'getOwner').mockReturnValue({ + call, + } as unknown as Web3PromiEvent); + + await ens.getOwner(ENS_NAME); + expect(getOwnerMock).toHaveBeenCalledWith(ENS_NAME); + }); + }); + + describe('addr', () => { + it('getAddress', async () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest.spyOn({ call: () => {} }, 'call'); + + const addrMock = jest.spyOn(ens['_resolver'], 'getAddress').mockReturnValue({ + call, + } as unknown as Web3PromiEvent); + + await ens.getAddress(ENS_NAME); + + expect(addrMock).toHaveBeenCalledWith(ENS_NAME, 60); + }); + }); + + describe('events', () => { + it('get events', async () => { + const { events } = ens; + expect(typeof events.NewOwner).toBe('function'); + expect(typeof events.allEvents).toBe('function'); + expect(typeof events.NewResolver).toBe('function'); + expect(typeof events.Transfer).toBe('function'); + }); + }); + + describe('constructor', () => { + it('default params', async () => { + const localEns = new ENS(); + expect(localEns.provider).toBeUndefined(); + expect(localEns.registryAddress).toBe(registryAddresses.main); + }); + it('set params', async () => { + const localEns = new ENS(registryAddresses.goerli, 'http://127.0.0.1:8545'); + // @ts-expect-error check clientUrl field + expect(localEns.provider?.clientUrl).toBe('http://127.0.0.1:8545'); + expect(localEns.registryAddress).toBe(registryAddresses.goerli); + }); + }); + + describe('pubkey', () => { + it('getPubkey', async () => { + const pubkeyMock = jest.spyOn(ens['_resolver'], 'getPubkey').mockReturnValue({ + call: jest.fn(), + } as unknown as Web3PromiEvent); + + await ens.getPubkey(ENS_NAME); + expect(pubkeyMock).toHaveBeenCalledWith(ENS_NAME); + }); + + describe('Contenthash', () => { + it('getContenthash', async () => { + const contenthashMock = jest + .spyOn(ens['_resolver'], 'getContenthash') + .mockReturnValue({ + call: jest.fn(), + } as unknown as Web3PromiEvent); + + await ens.getContenthash(ENS_NAME); + + expect(contenthashMock).toHaveBeenCalledWith(ENS_NAME); + }); + }); + }); + + it('supportsInterface', async () => { + const interfaceId = 'setAddr'; + const supportsInterfaceMock = jest + .spyOn(ens['_resolver'], 'supportsInterface') + .mockReturnValue({ + call: jest.fn(), + } as unknown as Web3PromiEvent); + + await ens.supportsInterface(ENS_NAME, interfaceId); + + expect(supportsInterfaceMock).toHaveBeenCalledWith(ENS_NAME, interfaceId); + }); + + describe('CheckNetwork', () => { + beforeEach(() => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + getId.mockReset(); + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + isSyncing.mockReset(); + }); + it('Not last sync/ENSNetworkNotSyncedError', async () => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + getId.mockImplementation(() => expectedNetworkId); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + isSyncing.mockImplementation(() => { + return { + startingBlock: 100, + currentBlock: 312, + highestBlock: 51266, + } as unknown; + }); + await expect(ens.checkNetwork()).rejects.toThrow(new ENSNetworkNotSyncedError()); + }); + + it('Threshold exceeded from previous check/ENSNetworkNotSyncedError', async () => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + getId.mockImplementation(() => expectedNetworkId); + + // An initial check, in order to update `_lastSyncCheck` + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + isSyncing.mockImplementation(() => { + return false; + }); + // update `_lastSyncCheck` + await ens.checkNetwork(); + + // now - this._lastSyncCheck > 3600) + jest.useFakeTimers().setSystemTime(new Date('2020-01-01').getTime() + 3601000); // (3600 + 1) * 1000 + await expect(ens.checkNetwork()).resolves.not.toThrow(); + }); + + it('ENSUnsupportedNetworkError', async () => { + // reset from previous check + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + ens['_detectedAddress'] = undefined; + + const network = 'AnUnsupportedNetwork'; + + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + getId.mockImplementation(() => network); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + isSyncing.mockImplementation(() => { + return { + startingBlock: 100, + currentBlock: 312, + highestBlock: 51266, + } as unknown; + }); + + await expect(ens.checkNetwork()).rejects.toThrow( + new ENSUnsupportedNetworkError(network), + ); + }); + }); +}); diff --git a/packages/web3-eth-ens/test/unit/index.test.ts b/packages/web3-eth-ens/test/unit/index.test.ts new file mode 100644 index 00000000000..ec6df8f7d5e --- /dev/null +++ b/packages/web3-eth-ens/test/unit/index.test.ts @@ -0,0 +1,25 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import * as ens from '../../src'; +import { registryAddresses } from '../../src'; + +describe('main package', () => { + it('should import', () => { + expect(registryAddresses).toBeDefined(); + expect(ens.ENS).toBeDefined(); + }); +}); diff --git a/packages/web3-eth-ens/test/unit/jest.config.js b/packages/web3-eth-ens/test/unit/jest.config.js new file mode 100644 index 00000000000..c88b5aeb17d --- /dev/null +++ b/packages/web3-eth-ens/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-eth-ens-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-eth-ens/test/unit/registry.test.ts b/packages/web3-eth-ens/test/unit/registry.test.ts new file mode 100644 index 00000000000..d0b4f1ce751 --- /dev/null +++ b/packages/web3-eth-ens/test/unit/registry.test.ts @@ -0,0 +1,212 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Context, Web3ContextObject } from 'web3-core'; +import { NonPayableMethodObject } from 'web3-eth-contract'; +import { Registry } from '../../src/registry'; +import { namehash } from '../../src/utils'; + +describe('registry', () => { + let object: Web3ContextObject; + let registry: Registry; + const mockAddress = '0x0000000000000000000000000000000000000000'; + const ENS_NAME = 'web3js.eth'; + + beforeAll(() => { + const context = new Web3Context('http://test.com'); + object = context.getContextObject(); + + registry = new Registry(object); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('constructor with custom address', async () => { + const tempRegistry = new Registry(object, mockAddress); + + expect(tempRegistry).toBeInstanceOf(Registry); + }); + + describe('owner', () => { + it('getOwner', async () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest.spyOn({ call: () => {} }, 'call'); + + const getOwnerMock = jest.spyOn(registry['contract'].methods, 'owner').mockReturnValue({ + call, + } as unknown as NonPayableMethodObject); + + await registry.getOwner(ENS_NAME); + expect(getOwnerMock).toHaveBeenCalledWith(namehash(ENS_NAME)); + expect(call).toHaveBeenCalled(); + }); + it('getOwner throw (transaction reverted)', async () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest.spyOn({ call: () => {} }, 'call').mockImplementation(() => { + throw new Error(); + }); + + const getOwnerMock = jest + .spyOn(registry['contract'].methods, 'owner') + .mockReturnValue({ call } as unknown as NonPayableMethodObject); + + await expect(async () => { + await registry.getOwner(ENS_NAME); + }).rejects.toThrow(new Error()); + expect(getOwnerMock).toHaveBeenCalledWith(namehash(ENS_NAME)); + expect(call).toHaveBeenCalled(); + }); + }); + + describe('ttl', () => { + it('getTTL', async () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest.spyOn({ call: () => {} }, 'call'); + + const getTTLMock = jest.spyOn(registry['contract'].methods, 'ttl').mockReturnValue({ + call, + } as unknown as NonPayableMethodObject); + + await registry.getTTL(ENS_NAME); + expect(getTTLMock).toHaveBeenCalledWith(namehash(ENS_NAME)); + expect(call).toHaveBeenCalled(); + }); + it('getTTL throw (transaction reverted)', async () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest.spyOn({ call: () => {} }, 'call').mockImplementation(() => { + throw new Error(); + }); + + const getTTLMock = jest + .spyOn(registry['contract'].methods, 'ttl') + .mockReturnValue({ call } as unknown as NonPayableMethodObject); + + await expect(async () => { + await registry.getTTL(ENS_NAME); + }).rejects.toThrow(new Error()); + expect(getTTLMock).toHaveBeenCalledWith(namehash(ENS_NAME)); + expect(call).toHaveBeenCalled(); + }); + }); + + describe('record', () => { + it('recordExists', async () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest.spyOn({ call: () => {} }, 'call'); + + const setRecordMock = jest + .spyOn(registry['contract'].methods, 'recordExists') + .mockReturnValue({ + call, + } as unknown as NonPayableMethodObject); + + await registry.recordExists(ENS_NAME); + expect(setRecordMock).toHaveBeenCalledWith(namehash(ENS_NAME)); + expect(call).toHaveBeenCalled(); + }); + it('recordExists throw (transaction reverted)', async () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest.spyOn({ call: () => {} }, 'call').mockImplementation(() => { + throw new Error(); + }); + + const setRecordMock = jest + .spyOn(registry['contract'].methods, 'recordExists') + .mockReturnValue({ + call, + } as unknown as NonPayableMethodObject); + + await expect(async () => { + await registry.recordExists(ENS_NAME); + }).rejects.toThrow(new Error()); + expect(setRecordMock).toHaveBeenCalledWith(namehash(ENS_NAME)); + expect(call).toHaveBeenCalled(); + }); + }); + + describe('resolver', () => { + it('resolver', async () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest + .spyOn( + { + call: async () => { + return mockAddress; + }, + }, + 'call', + ) + .mockReturnValue(Promise.resolve(mockAddress)); + + const resolverMock = jest + .spyOn(registry['contract'].methods, 'resolver') + .mockReturnValue({ + call, + } as unknown as NonPayableMethodObject); + + await registry.getResolver(ENS_NAME); + expect(resolverMock).toHaveBeenCalledWith(namehash(ENS_NAME)); + expect(call).toHaveBeenCalled(); + }); + + it('resolver (return non string)', async () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest + .spyOn( + { + call: async () => { + return 5; // something that is not string + }, + }, + 'call', + ) + .mockReturnValue(Promise.resolve(5)); // something that is not string + + const resolverMock = jest + .spyOn(registry['contract'].methods, 'resolver') + .mockReturnValue({ + call, + } as unknown as NonPayableMethodObject); + + await expect(async () => { + await registry.getResolver(ENS_NAME); + }).rejects.toThrow(new Error()); + expect(resolverMock).toHaveBeenCalledWith(namehash(ENS_NAME)); + expect(call).toHaveBeenCalled(); + }); + + it('resolver throw (transaction reverted)', async () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest.spyOn({ call: () => {} }, 'call').mockImplementation(() => { + throw new Error(); + }); + const resolverMock = jest + .spyOn(registry['contract'].methods, 'resolver') + .mockReturnValue({ + call, + } as unknown as NonPayableMethodObject); + + await expect(async () => { + await registry.getResolver(ENS_NAME); + }).rejects.toThrow(new Error()); + expect(resolverMock).toHaveBeenCalledWith(namehash(ENS_NAME)); + expect(call).toHaveBeenCalled(); + }); + }); +}); diff --git a/packages/web3-eth-ens/test/unit/resolver.test.ts b/packages/web3-eth-ens/test/unit/resolver.test.ts new file mode 100644 index 00000000000..97cf6e2d0b3 --- /dev/null +++ b/packages/web3-eth-ens/test/unit/resolver.test.ts @@ -0,0 +1,260 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Context, Web3ContextObject } from 'web3-core'; +import { ResolverMethodMissingError } from 'web3-errors'; +import { Contract, NonPayableMethodObject } from 'web3-eth-contract'; +import { sha3 } from 'web3-utils'; +import { PublicResolverAbi } from '../../src/abi/ens/PublicResolver'; +import { interfaceIds, methodsInInterface } from '../../src/config'; +import { Registry } from '../../src/registry'; +import { Resolver } from '../../src/resolver'; +import { namehash } from '../../src/utils'; + +describe('resolver', () => { + let object: Web3ContextObject; + let registry: Registry; + let resolver: Resolver; + let contract: Contract; + const mockAddress = '0x0000000000000000000000000000000000000000'; + const ENS_NAME = 'web3js.eth'; + + beforeAll(() => { + const context = new Web3Context('http://test.com'); + object = context.getContextObject(); + + registry = new Registry(object); + resolver = new Resolver(registry); + contract = new Contract(PublicResolverAbi, mockAddress); + }); + + describe('checkInterfaceSupport', () => { + it('isNullish interface', async () => { + const methodName = 'nullish'; + await expect(resolver.checkInterfaceSupport(contract, methodName)).rejects.toThrow( + new ResolverMethodMissingError(mockAddress, methodName), + ); + }); + it('isNullish interface with no address', async () => { + const methodName = 'nullish'; + const localContract = new Contract(PublicResolverAbi); + await expect(resolver.checkInterfaceSupport(localContract, methodName)).rejects.toThrow( + new ResolverMethodMissingError('', methodName), + ); + }); + + it('Doesn"t support interface', async () => { + const methodName = methodsInInterface.setAddr; // Just a method to pass first check + + const supportsInterfaceMock = jest + .spyOn(contract.methods, 'supportsInterface') + .mockReturnValue({ + call: jest.fn().mockReturnValue(false), + } as unknown as NonPayableMethodObject); + + await expect(resolver.checkInterfaceSupport(contract, methodName)).rejects.toThrow( + new ResolverMethodMissingError(mockAddress, methodName), + ); + + expect(supportsInterfaceMock).toHaveBeenCalledWith(interfaceIds[methodName]); + }); + it('Doesn"t support interface with no address', async () => { + const methodName = methodsInInterface.setAddr; // Just a method to pass first check + const localContract = new Contract(PublicResolverAbi); + const supportsInterfaceMock = jest + .spyOn(localContract.methods, 'supportsInterface') + .mockReturnValue({ + call: jest.fn().mockReturnValue(false), + } as unknown as NonPayableMethodObject); + + await expect(resolver.checkInterfaceSupport(localContract, methodName)).rejects.toThrow( + new ResolverMethodMissingError('', methodName), + ); + expect(supportsInterfaceMock).toHaveBeenCalledWith(interfaceIds[methodName]); + }); + + it.each(Object.values(methodsInInterface))( + 'supported interface for %s', + async methodName => { + const supportsInterfaceMock = jest + .spyOn(contract.methods, 'supportsInterface') + .mockReturnValue({ + call: jest.fn().mockReturnValue(true), + } as unknown as NonPayableMethodObject); + + await expect( + resolver.checkInterfaceSupport(contract, methodName), + ).resolves.not.toThrow(); + + expect(supportsInterfaceMock).toHaveBeenCalledWith(interfaceIds[methodName]); + }, + ); + }); + describe('addr', () => { + it('getAddress', async () => { + const supportsInterfaceMock = jest + .spyOn(contract.methods, 'supportsInterface') + .mockReturnValue({ + call: async () => Promise.resolve(true), + } as unknown as NonPayableMethodObject); + + const addrMock = jest.spyOn(contract.methods, 'addr').mockReturnValue({ + call: async () => Promise.resolve(true), + } as unknown as NonPayableMethodObject); + + // todo when moving this mock in beforeAll, jest calls the actual implementation, how to fix that + // I use this in many places + jest.spyOn(registry, 'getResolver').mockImplementation(async () => { + return new Promise(resolve => { + resolve(contract); + }); + }); + + await resolver.getAddress(ENS_NAME); + expect(supportsInterfaceMock).toHaveBeenCalledWith( + interfaceIds[methodsInInterface.addr], + ); + expect(addrMock).toHaveBeenCalledWith(namehash(ENS_NAME), 60); + }); + }); + + describe('pubkey', () => { + it('getPubkey', async () => { + const supportsInterfaceMock = jest + .spyOn(contract.methods, 'supportsInterface') + .mockReturnValue({ + call: async () => Promise.resolve(true), + } as unknown as NonPayableMethodObject); + + const pubkeyMock = jest.spyOn(contract.methods, 'pubkey').mockReturnValue({ + call: jest.fn(), + } as unknown as NonPayableMethodObject); + + // todo when moving this mock in beforeAll, jest calls the actual implementation, how to fix that + // I use this in many places + jest.spyOn(registry, 'getResolver').mockImplementation(async () => { + return new Promise(resolve => { + resolve(contract); + }); + }); + + await resolver.getPubkey(ENS_NAME); + expect(supportsInterfaceMock).toHaveBeenCalledWith( + interfaceIds[methodsInInterface.pubkey], + ); + expect(pubkeyMock).toHaveBeenCalledWith(namehash(ENS_NAME)); + }); + }); + + describe('Contenthash', () => { + it('getContenthash', async () => { + const supportsInterfaceMock = jest + .spyOn(contract.methods, 'supportsInterface') + .mockReturnValue({ + call: async () => Promise.resolve(true), + } as unknown as NonPayableMethodObject); + + const contenthashMock = jest.spyOn(contract.methods, 'contenthash').mockReturnValue({ + call: jest.fn(), + } as unknown as NonPayableMethodObject); + + // todo when moving this mock in beforeAll, jest calls the actual implementation, how to fix that + // I use this in many places + jest.spyOn(registry, 'getResolver').mockImplementation(async () => { + return new Promise(resolve => { + resolve(contract); + }); + }); + + await resolver.getContenthash(ENS_NAME); + expect(supportsInterfaceMock).toHaveBeenCalledWith( + interfaceIds[methodsInInterface.contenthash], + ); + expect(contenthashMock).toHaveBeenCalledWith(namehash(ENS_NAME)); + }); + }); + + describe('supportsInterface', () => { + it('check supportsInterface for non strict hex id', async () => { + const interfaceId = 'setAddr'; + jest.spyOn(registry, 'getResolver').mockImplementation(async () => { + return new Promise(resolve => { + resolve(contract); + }); + }); + + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest.spyOn({ call: () => {} }, 'call'); + + const supportsInterfaceMock = jest + .spyOn(contract.methods, 'supportsInterface') + .mockReturnValue({ + call, + } as unknown as NonPayableMethodObject); + + await expect(resolver.supportsInterface(ENS_NAME, interfaceId)).resolves.not.toThrow(); + + // expect(setContenthashMock).toHaveBeenCalledWith(namehash(ENS_NAME), hash); + expect(supportsInterfaceMock).toHaveBeenCalledWith(sha3(interfaceId)?.substring(0, 10)); + expect(call).toHaveBeenCalled(); + }); + + it('check supportsInterface for empty non strict hex id', async () => { + const interfaceId = ''; // empty + jest.spyOn(registry, 'getResolver').mockImplementation(async () => { + return new Promise(resolve => { + resolve(contract); + }); + }); + + await expect(resolver.supportsInterface(ENS_NAME, interfaceId)).rejects.toThrow( + new Error('Invalid interface Id'), + ); + }); + + it.each(Object.values(interfaceIds))( + 'check supportsInterface for valid hex ids', + async () => { + const interfaceId = 'setAddr'; + jest.spyOn(registry, 'getResolver').mockImplementation(async () => { + return new Promise(resolve => { + resolve(contract); + }); + }); + + // eslint-disable-next-line @typescript-eslint/no-empty-function + const call = jest.spyOn({ call: () => {} }, 'call'); + + const supportsInterfaceMock = jest + .spyOn(contract.methods, 'supportsInterface') + .mockReturnValue({ + call, + } as unknown as NonPayableMethodObject); + + await expect( + resolver.supportsInterface(ENS_NAME, interfaceId), + ).resolves.not.toThrow(); + + // expect(setContenthashMock).toHaveBeenCalledWith(namehash(ENS_NAME), hash); + expect(supportsInterfaceMock).toHaveBeenCalledWith( + sha3(interfaceId)?.substring(0, 10), + ); + expect(call).toHaveBeenCalled(); + }, + ); + }); +}); diff --git a/packages/web3-eth-ens/test/unit/utils.test.ts b/packages/web3-eth-ens/test/unit/utils.test.ts new file mode 100644 index 00000000000..e7cce3ed581 --- /dev/null +++ b/packages/web3-eth-ens/test/unit/utils.test.ts @@ -0,0 +1,35 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { namehash, normalize } from '../../src/utils'; +import { namehashValidData, normalizeValidData } from '../fixtures/utils'; + +describe('ens utils', () => { + describe('namehash', () => { + describe('valid cases', () => { + it.each(namehashValidData)('%s', (input, output) => { + expect(namehash(input)).toEqual(output); + }); + }); + }); + + describe('toAscii', () => { + it.each(normalizeValidData)('should normalize %s', (input, output) => { + expect(normalize(input)).toEqual(output); + }); + }); +}); diff --git a/packages/web3-eth-ens/tsconfig.cjs.json b/packages/web3-eth-ens/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-eth-ens/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-eth-ens/tsconfig.esm.json b/packages/web3-eth-ens/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-eth-ens/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-eth-ens/tsconfig.json b/packages/web3-eth-ens/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-eth-ens/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-eth-ens/tsconfig.types.json b/packages/web3-eth-ens/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-eth-ens/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-eth-ens/tsdoc.json b/packages/web3-eth-ens/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-eth-ens/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-eth-ens/types/index.d.ts b/packages/web3-eth-ens/types/index.d.ts deleted file mode 100644 index c47f21fac03..00000000000 --- a/packages/web3-eth-ens/types/index.d.ts +++ /dev/null @@ -1,404 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Samuel Furter , Josh Stevens - * @date 2018 - */ - -import { PromiEvent, TransactionConfig, TransactionReceipt } from 'web3-core'; -import { TransactionRevertInstructionError } from 'web3-core-helpers'; -import { Eth } from 'web3-eth'; -import { Contract } from 'web3-eth-contract'; - -export interface ContentHash { - protocolType: 'ipfs' | 'bzz' | 'onion' | 'onion3' | null, - decoded: string | null, - error?: Error | null -} - -// TODO: Define as soon as implemented the generic contract -export class Ens { - constructor(eth: Eth); - - registryAddress: string | null; - registry: Registry; - - /** - * @deprecated This callback signature is deprecated - */ - supportsInterface( - name: string, - interfaceId: string, - callback?: (value: any) => void - ): Promise; - supportsInterface( - name: string, - interfaceId: string, - callback?: (error: Error, supported: boolean) => void - ): Promise; - - /** - * @deprecated Please use the "getResolver" method instead of "resolver" - */ - resolver( - name: string, - callback?: (error: Error, contract: Contract) => void - ): Promise; - /** - * @deprecated Please use the "getResolver" method instead of "resolver" - */ - resolver( - name: string, - callback?: (value: any) => void - ): Promise; - - /** - * @deprecated This callback signature is deprecated - */ - getResolver( - name: string, - callback?: (value: any) => void - ): Promise; - getResolver( - name: string, - callback?: (error: Error, contract: Contract) => void - ): Promise; - - setResolver( - name: string, - address: string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent - - setSubnodeOwner( - name: string, - label: string, - address: string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent - - setRecord( - name: string, - owner: string, - resolver: string, - ttl: number | string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent - - setSubnodeRecord( - name: string, - label: string, - owner: string, - resolver: string, - ttl: number | string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent - - setApprovalForAll( - operator: string, - approved: boolean, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent - - /** - * @deprecated This callback signature is deprecated - */ - isApprovedForAll( - owner: string, - operator: string, - callback?: (value: any) => void - ): Promise; - isApprovedForAll( - owner: string, - operator: string, - callback?: (error: Error, result: boolean) => void - ): Promise; - - /** - * @deprecated This callback signature is deprecated - */ - recordExists( - name: string, - callback?: (value: any) => void - ): Promise; - recordExists( - name: string, - callback?: (error: Error, result: boolean) => void - ): Promise; - - /** - * @deprecated This callback signature is deprecated - */ - getTTL( - name: string, - callback?: (value: any) => void - ): Promise; - getTTL( - name: string, - callback?: (error: Error, ttl: string) => void - ): Promise; - - setTTL( - name: string, - ttl: string | number, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent; - - /** - * @deprecated This callback signature is deprecated - */ - getOwner( - name: string, - callback?: (value: any) => void - ): Promise; - getOwner( - name: string, - callback?: (error: Error, owner: string) => void - ): Promise; - - setOwner( - name: string, - address: string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent; - - /** - * @deprecated This callback signature is deprecated - */ - getAddress( - name: string, - callback?: (value: any) => void - ): Promise; - getAddress( - name: string, - callback?: (error: Error, address: string) => void - ): Promise; - - setAddress( - name: string, - address: string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent; - - /** - * @deprecated This callback signature is deprecated - */ - getPubkey( - name: string, - callback?: (value: any) => void - ): Promise<{ [x: string]: string }>; - getPubkey( - name: string, - callback?: (error: Error, result: { [x: string]: string }) => void - ): Promise<{ [x: string]: string }>; - - setPubkey( - name: string, - x: string, - y: string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent; - - /** - * @deprecated This callback signature is deprecated - */ - getText( - name: string, - key: string, - callback?: (value: any) => void - ): Promise; - getText( - name: string, - key: string, - callback?: (error: Error, ensName: string) => void - ): Promise; - - setText( - name: string, - key: string, - value: string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent; - - /** - * @deprecated This callback signature is deprecated - */ - getContent( - name: string, - callback?: (value: any) => void - ): Promise; - getContent( - name: string, - callback?: (error: Error, contentHash: string) => void - ): Promise; - - setContent( - name: string, - hash: string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent; - - /** - * @deprecated This callback signature is deprecated - */ - getMultihash( - name: string, - callback?: (value: any) => void - ): Promise; - getMultihash( - name: string, - callback?: (error: Error, multihash: string) => void - ): Promise; - - setMultihash( - name: string, - hash: string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent; - - /** - * @deprecated This callback signature is deprecated - */ - getContenthash( - name: string, - callback?: (value: ContentHash) => void - ): Promise; - getContenthash( - name: string, - callback?: (error: Error, contenthash: ContentHash) => void - ): Promise; - - setContenthash( - name: string, - hash: string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent; -} - -export class Registry { - constructor(ens: Ens); - - ens: Ens; - - contract: Contract | null; - - /** - * @deprecated Please use the "getOwner" method instead of "owner" - */ - owner( - name: string, - callback?: (error: Error, address: string) => void - ): Promise; - /** - * @deprecated Please use the "getOwner" method instead of "owner" - */ - owner( - name: string, - callback?: (value: any) => void - ): Promise; - - /** - * @deprecated This callback signature is deprecated - */ - getOwner( - name: string, - callback?: (value: any) => void - ): Promise; - getOwner( - name: string, - callback?: (error: Error, address: string) => void - ): Promise; - - setOwner( - name: string, - address: string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent; - - /** - * @deprecated This callback signature is deprecated - */ - getTTl( - name: string, - callback?: (value: any) => void - ): Promise; - getTTl( - name: string, - callback?: (error: Error, ttl: string) => void - ): Promise; - - setTTL( - name: string, - ttl: string | number, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent; - - setSubnodeOwner( - name: string, - label: string, - address: string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent - - /** - * @deprecated Please use the "getResolver" method instead of "resolver" - */ - resolver( - name: string, - callback?: (error: Error, contract: Contract) => void - ): Promise; - /** - * @deprecated Please use the "getResolver" method instead of "resolver" - */ - resolver( - name: string, - callback?: (value: any) => void - ): Promise; - - /** - * @deprecated This callback signature is deprecated - */ - getResolver( - name: string, - callback?: (value: any) => void - ): Promise; - getResolver( - name: string, - callback?: (error: Error, contract: Contract) => void - ): Promise; - - setResolver( - name: string, - address: string, - txConfig?: TransactionConfig, - callback?: (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => void - ): PromiEvent -} diff --git a/packages/web3-eth-ens/types/tests/ens-test.ts b/packages/web3-eth-ens/types/tests/ens-test.ts deleted file mode 100644 index 17d0af5bcdd..00000000000 --- a/packages/web3-eth-ens/types/tests/ens-test.ts +++ /dev/null @@ -1,225 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file ens-test.ts - * @author Samuel Furter , Josh Stevens - * @date 2018 - */ - -import { TransactionRevertInstructionError } from 'web3-core-helpers'; -import { TransactionReceipt } from 'web3-core'; -import { Contract } from 'web3-eth-contract'; -import { Ens, ContentHash } from 'web3-eth-ens'; -import { Eth } from 'web3-eth'; - -const ens = new Ens(new Eth('http://localhost:8545')); - -// $ExpectType string | null -ens.registryAddress; - -// $ExpectType Registry -ens.registry; - -// $ExpectType Promise -ens.resolver('name'); -// $ExpectType Promise -ens.resolver('name', (value: any) => {}); -// $ExpectType Promise -ens.resolver('name', (error: Error, contract: Contract) => {}); -// $ExpectType Promise -ens.getResolver('name'); -// $ExpectType Promise -ens.getResolver('name', (error: Error, contract: Contract) => {}); -// $ExpectType Promise -ens.getResolver('name', (value: any) => {}); - -// $ExpectType PromiEvent -ens.setResolver('name', '0x0...'); -// $ExpectType PromiEvent -ens.setResolver('name', '0x0...', {}); -// $ExpectType PromiEvent -ens.setResolver('name', '0x0...', {}, (error: Error, receipt: TransactionReceipt) => {}); - -// $ExpectType PromiEvent -ens.setSubnodeOwner('name', 'label', '0x...'); -// $ExpectType PromiEvent -ens.setSubnodeOwner('name', 'label', '0x...', {}); -// $ExpectType PromiEvent -ens.setSubnodeOwner('name', 'label', '0x...', {}, (error: Error, receipt: TransactionReceipt) => {}); - -// $ExpectType PromiEvent -ens.setRecord('name', 'owner', 'resolver', '100000'); -// $ExpectType PromiEvent -ens.setRecord('name', 'owner', 'resolver', 100000); -// $ExpectType PromiEvent -ens.setRecord('name', 'owner', 'resolver', 100000, {}); -// $ExpectType PromiEvent -ens.setRecord('name', 'owner', 'resolver', 100000, {}, (error: Error, receipt: TransactionReceipt) => {}); - -// $ExpectType PromiEvent -ens.setSubnodeRecord('name', 'label', 'owner', 'resolver', '100000'); -// $ExpectType PromiEvent -ens.setSubnodeRecord('name', 'label', 'owner', 'resolver', 100000); -// $ExpectType PromiEvent -ens.setSubnodeRecord('name', 'label', 'owner', 'resolver', 100000, {}); -// $ExpectType PromiEvent -ens.setSubnodeRecord('name', 'label', 'owner', 'resolver', 100000, {}, (error: Error, receipt: TransactionReceipt) => {}); - -// $ExpectType PromiEvent -ens.setApprovalForAll('name', true); -// $ExpectType PromiEvent -ens.setApprovalForAll('name', false, {}); -// $ExpectType PromiEvent -ens.setApprovalForAll('name', true, {}, (error: Error, receipt: TransactionReceipt) => {}); - -// $ExpectType Promise -ens.isApprovedForAll('owner', 'operator'); -// $ExpectType Promise -ens.isApprovedForAll('owner', 'operator', (error: Error, result: boolean) => {}); -// $ExpectType Promise -ens.isApprovedForAll('owner', 'operator', (value: any) => {}); - -// $ExpectType Promise -ens.recordExists('name'); -// $ExpectType Promise -ens.recordExists('name', (error: Error, result: boolean) => {}); -// $ExpectType Promise -ens.recordExists('name', (value: any) => {}); - -// $ExpectType Promise -ens.getTTL('name'); -// $ExpectType Promise -ens.getTTL('name', (error: Error, ttl: string) => {}); -// $ExpectType Promise -ens.getTTL('name', (value: any) => {}); - -// $ExpectType PromiEvent -ens.setTTL('name', 10000); -// $ExpectType PromiEvent -ens.setTTL('name', 10000, {}); -// $ExpectType PromiEvent -ens.setTTL('name', '0xa', {}, (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => {}); - -// $ExpectType Promise -ens.getOwner('name'); -// $ExpectType Promise -ens.getOwner('name', (value: any) => {}); -// $ExpectType Promise -ens.getOwner('name', (error: Error, owner: string) => {}); - -// $ExpectType PromiEvent -ens.setOwner('name', '0x...'); -// $ExpectType PromiEvent -ens.setOwner('name', '0x...', {}); -// $ExpectType PromiEvent -ens.setOwner('name', '0x...', {}, (error: Error | TransactionRevertInstructionError, receipt: TransactionReceipt) => {}); - -// $ExpectType Promise -ens.supportsInterface('name', 'interfaceId'); -// $ExpectType Promise -ens.supportsInterface( - 'name', - 'interfaceId', - (error: Error, supportsInterface: boolean) => {} -); -// $ExpectType Promise -ens.supportsInterface( - 'name', - 'interfaceId', - (value: any) => {} -); - -// $ExpectType Promise -ens.getAddress('name'); -// $ExpectType Promise -ens.getAddress('name', (error: Error, address: string) => {}); -// $ExpectType Promise -ens.getAddress('name', (value: any) => {}); - -// $ExpectType PromiEvent -ens.setAddress('name', 'address'); -// $ExpectType PromiEvent -ens.setAddress('name', 'address', {}); -// $ExpectType PromiEvent -ens.setAddress('name', 'address', {}, (error: Error, result: any) => {}); - -// $ExpectType Promise<{ [x: string]: string; }> -ens.getPubkey('name'); -// $ExpectType Promise<{ [x: string]: string; }> -ens.getPubkey('name', (error: Error, result: { [x: string]: string }) => {}); -// $ExpectType Promise<{ [x: string]: string; }> -ens.getPubkey('name', (value: any) => {}); - -// $ExpectType PromiEvent -ens.setPubkey('name', 'x', 'y'); -// $ExpectType PromiEvent -ens.setPubkey('name', 'x', 'y', {}); -// $ExpectType PromiEvent -ens.setPubkey('name', 'x', 'y', {}, (error: Error, result: any) => {}); - -// $ExpectType Promise -ens.getText('name', 'key'); -// $ExpectType Promise -ens.getText('name', 'key', (error: Error, ensName: string) => {}); -// $ExpectType Promise -ens.getText('name', 'key', (value: any) => {}); - -// $ExpectType PromiEvent -ens.setText('name', 'key', 'value'); -// $ExpectType PromiEvent -ens.setText('name', 'key', 'value', {}); -// $ExpectType PromiEvent -ens.setText('name', 'key', 'value', {}, (error: Error, result: any) => {}); - -// $ExpectType Promise -ens.getContent('name'); -// $ExpectType Promise -ens.getContent('name', (error: Error, contentHash: string) => {}); -// $ExpectType Promise -ens.getContent('name', (value: any) => {}); - -// $ExpectType PromiEvent -ens.setContent('name', 'hash'); -// $ExpectType PromiEvent -ens.setContent('name', 'hash', {}); -// $ExpectType PromiEvent -ens.setContent('name', 'hash', {}, (error: Error, result: any) => {}); - -// $ExpectType Promise -ens.getMultihash('name'); -// $ExpectType Promise -ens.getMultihash('name', (error: Error, multihash: string) => {}); -// $ExpectType Promise -ens.getMultihash('name', (value: any) => {}); - -// $ExpectType PromiEvent -ens.setMultihash('name', 'hash'); -// $ExpectType PromiEvent -ens.setMultihash('name', 'hash', {}, (error: Error, result: any) => {}); -// $ExpectType PromiEvent -ens.setMultihash('name', 'hash', {}); - -// $ExpectType Promise -ens.getContenthash('name'); -// $ExpectType Promise -ens.getContenthash('name', (error: Error, contenthash: ContentHash) => {}); -// $ExpectType Promise -ens.getContenthash('name', (value: ContentHash) => {}); - -// $ExpectType PromiEvent -ens.setContenthash('name', 'hash'); -// $ExpectType PromiEvent -ens.setContenthash('name', 'hash', {}); -// $ExpectType PromiEvent -ens.setContenthash('name', 'hash', {}, (error: Error, result: any) => {}); diff --git a/packages/web3-eth-ens/types/tsconfig.json b/packages/web3-eth-ens/types/tsconfig.json deleted file mode 100644 index 212c71253ba..00000000000 --- a/packages/web3-eth-ens/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-eth-ens": ["."] - } - } -} diff --git a/packages/web3-eth-ens/types/tslint.json b/packages/web3-eth-ens/types/tslint.json deleted file mode 100644 index 30e95b7bca5..00000000000 --- a/packages/web3-eth-ens/types/tslint.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false, - "no-empty-interface": false, - "unified-signatures": false - } -} diff --git a/packages/web3-eth-iban/.eslintignore b/packages/web3-eth-iban/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/packages/web3-eth-iban/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-iban/.eslintrc.js b/packages/web3-eth-iban/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-eth-iban/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth-iban/.gitignore b/packages/web3-eth-iban/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-eth-iban/.npmignore b/packages/web3-eth-iban/.npmignore new file mode 120000 index 00000000000..8a0be70f3ed --- /dev/null +++ b/packages/web3-eth-iban/.npmignore @@ -0,0 +1 @@ +../../templates/.npmignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-iban/.prettierignore b/packages/web3-eth-iban/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-eth-iban/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-iban/.prettierrc.json b/packages/web3-eth-iban/.prettierrc.json new file mode 120000 index 00000000000..00ecd510aaf --- /dev/null +++ b/packages/web3-eth-iban/.prettierrc.json @@ -0,0 +1 @@ +../../templates/.prettierrc.json.tmpl \ No newline at end of file diff --git a/packages/web3-eth-iban/CHANGELOG.md b/packages/web3-eth-iban/CHANGELOG.md new file mode 100644 index 00000000000..797f4ffe29f --- /dev/null +++ b/packages/web3-eth-iban/CHANGELOG.md @@ -0,0 +1,128 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [4.0.1-alpha.2] + +### Changed + +- Updated Web3.js dependencies (#5664) + +## [4.0.1-alpha.3] + +### Changed + +- Updated dependencies (#5725) + +## [4.0.1-alpha.4] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +## [4.0.1-alpha.5] + +### Changed + +- web3.js dependencies (#5757) + +## [4.0.1-rc.0] + +### Changed + +- Updated dependencies (#5912) + +## [4.0.1-rc.1] + +### Added + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +## [4.0.1-rc.2] + +### Changed + +- Dependencies updated + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Changed + +- Dependencies updated + +## [4.0.3] + +### Changed + +- Dependencies updated + +## [4.0.4] + +### Changed + +- Dependencies updated + +## [4.0.5] + +### Changed + +- Dependencies updated + +## [4.0.6] + +### Changed + +- Dependencies updated + +## [4.0.7] + +### Changed + +- Dependencies updated + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-eth-iban/README.md b/packages/web3-eth-iban/README.md index 79dfdcca83d..11c7e52305b 100644 --- a/packages/web3-eth-iban/README.md +++ b/packages/web3-eth-iban/README.md @@ -1,42 +1,59 @@ -# web3-eth-iban +

+ web3.js +

-[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +# web3.js - IBAN -This is a sub package of [web3.js][repo] +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] -This is the IBAN package to be used in the `web3-eth` package. +This is a sub-package of [web3.js][repo]. -Please read the [documentation][docs] for more. +`web3-eth-iban` This package converts Ethereum addresses to IBAN addresses a vice versa. ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3-eth-iban) or using [Yarn](https://yarnpkg.com/package/web3-eth-iban) + +### Using NPM ```bash npm install web3-eth-iban ``` -## Usage - -```js -const Web3EthIban = require('web3-eth-iban'); +### Using Yarn -const iban = new Web3EthIban('XE75JRZCTTLBSYEQBGAS7GID8DKR7QY0QA3'); -iban.toAddress() > '0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B'; +```bash +yarn add web3-eth-iban ``` -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) -## Types +## Package.json Scripts -All the TypeScript typings are placed in the `types` folder. +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-eth-iban.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-eth-iban +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-iban%2Fpackage.json [npm-url]: https://npmjs.org/package/web3-eth-iban -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-eth-iban -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-eth-iban -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-eth-iban -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=web3-eth-iban +[downloads-image]: https://img.shields.io/npm/dm/web3-eth-iban?label=npm%20downloads diff --git a/packages/web3-eth-iban/assets/logo/web3js.ai b/packages/web3-eth-iban/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-eth-iban/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-eth-iban/assets/logo/web3js.jpg b/packages/web3-eth-iban/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-eth-iban/assets/logo/web3js.jpg differ diff --git a/packages/web3-eth-iban/assets/logo/web3js.svg b/packages/web3-eth-iban/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-eth-iban/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-eth-iban/logo/web3js.ai b/packages/web3-eth-iban/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-eth-iban/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-eth-iban/logo/web3js.jpg b/packages/web3-eth-iban/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-eth-iban/logo/web3js.jpg differ diff --git a/packages/web3-eth-iban/logo/web3js.svg b/packages/web3-eth-iban/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-eth-iban/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-eth-iban/package-lock.json b/packages/web3-eth-iban/package-lock.json deleted file mode 100644 index ae1ded5a6c5..00000000000 --- a/packages/web3-eth-iban/package-lock.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "web3-eth-iban", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", - "dev": true - } - } -} diff --git a/packages/web3-eth-iban/package.json b/packages/web3-eth-iban/package.json index 37c23da76d7..c04c1b0476c 100644 --- a/packages/web3-eth-iban/package.json +++ b/packages/web3-eth-iban/package.json @@ -1,24 +1,64 @@ { - "name": "web3-eth-iban", - "version": "1.3.0", - "description": "This package converts Ethereum addresses to IBAN addresses a vice versa.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-eth-iban", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.0" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3-eth-iban", + "version": "4.0.7", + "description": "This package converts Ethereum addresses to IBAN addresses and vice versa.", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests --runInBand --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests --runInBand" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + }, + "dependencies": { + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + } } diff --git a/packages/web3-eth-iban/src/iban.ts b/packages/web3-eth-iban/src/iban.ts new file mode 100644 index 00000000000..db7e024e3cf --- /dev/null +++ b/packages/web3-eth-iban/src/iban.ts @@ -0,0 +1,397 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { HexString } from 'web3-types'; +import { toChecksumAddress, leftPad, hexToNumber } from 'web3-utils'; +import { isAddress } from 'web3-validator'; +import { InvalidAddressError } from 'web3-errors'; +import { IbanOptions } from './types.js'; + +/** + * Converts Ethereum addresses to IBAN or BBAN addresses and vice versa. + */ +export class Iban { + private readonly _iban: string; + + /** + * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to + * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616. + */ + private static readonly _iso13616Prepare = (iban: string): string => { + const A = 'A'.charCodeAt(0); + const Z = 'Z'.charCodeAt(0); + + const upperIban = iban.toUpperCase(); + const modifiedIban = `${upperIban.slice(4)}${upperIban.slice(0, 4)}`; + + return modifiedIban + .split('') + .map(n => { + const code = n.charCodeAt(0); + if (code >= A && code <= Z) { + // A = 10, B = 11, ... Z = 35 + return code - A + 10; + } + return n; + }) + .join(''); + }; + + /** + * return the bigint of the given string with the specified base + */ + private static readonly _parseInt = (str: string, base: number): bigint => + [...str].reduce( + (acc, curr) => BigInt(parseInt(curr, base)) + BigInt(base) * acc, + BigInt(0), + ); + + /** + * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064. + */ + private static readonly _mod9710 = (iban: string): number => { + let remainder = iban; + let block; + + while (remainder.length > 2) { + block = remainder.slice(0, 9); + remainder = `${(parseInt(block, 10) % 97).toString()}${remainder.slice(block.length)}`; + } + + return parseInt(remainder, 10) % 97; + }; + + /** + * A static method that checks if an IBAN is Direct. + * It actually check the length of the provided variable and, only if it is 34 or 35, it returns true. + * Note: this is also available as a method at an Iban instance. + * @param iban - an IBAN to be checked + * @returns - `true` if the provided `iban` is a Direct IBAN, and `false` otherwise. + * + * @example + * ```ts + * web3.eth.Iban.isDirect("XE81ETHXREGGAVOFYORK"); + * > false + * ``` + */ + public static isDirect(iban: string): boolean { + return iban.length === 34 || iban.length === 35; + } + + /** + * An instance method that checks if iban number is Direct. + * It actually check the length of the provided variable and, only if it is 34 or 35, it returns true. + * Note: this is also available as a static method. + * @param iban - an IBAN to be checked + * @returns - `true` if the provided `iban` is a Direct IBAN, and `false` otherwise. + * + * @example + * ```ts + * const iban = new web3.eth.Iban("XE81ETHXREGGAVOFYORK"); + * iban.isDirect(); + * > false + * ``` + */ + public isDirect(): boolean { + return Iban.isDirect(this._iban); + } + + /** + * A static method that checks if an IBAN is Indirect. + * It actually check the length of the provided variable and, only if it is 20, it returns true. + * Note: this is also available as a method at an Iban instance. + * @param iban - an IBAN to be checked + * @returns - `true` if the provided `iban` is an Indirect IBAN, and `false` otherwise. + * + * @example + * ```ts + * web3.eth.Iban.isIndirect("XE81ETHXREGGAVOFYORK"); + * > true + * ``` + */ + public static isIndirect(iban: string): boolean { + return iban.length === 20; + } + + /** + * check if iban number if indirect + * It actually check the length of the provided variable and, only if it is 20, it returns true. + * Note: this is also available as a static method. + * @param iban - an IBAN to be checked + * @returns - `true` if the provided `iban` is an Indirect IBAN, and `false` otherwise. + * + * @example + * ```ts + * const iban = new web3.eth.Iban("XE81ETHXREGGAVOFYORK"); + * iban.isIndirect(); + * > true + * ``` + */ + public isIndirect(): boolean { + return Iban.isIndirect(this._iban); + } + + /** + * This method could be used to check if a given string is valid IBAN object. + * Note: this is also available as a method at an Iban instance. + * + * @param iban - a string to be checked if it is in IBAN + * @returns - true if it is valid IBAN + * + * @example + * ```ts + * web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK"); + * > true + * + * web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK"); + * > false // because the checksum is incorrect + * ``` + */ + public static isValid(iban: string) { + return ( + /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(iban) && + Iban._mod9710(Iban._iso13616Prepare(iban)) === 1 + ); + } + + /** + * Should be called to check if the early provided IBAN is correct. + * Note: this is also available as a static method. + * + * @example + * ```ts + * const iban = new web3.eth.Iban("XE81ETHXREGGAVOFYORK"); + * iban.isValid(); + * > true + * + * const iban = new web3.eth.Iban("XE82ETHXREGGAVOFYORK"); + * iban.isValid(); + * > false // because the checksum is incorrect + * ``` + */ + public isValid(): boolean { + return Iban.isValid(this._iban); + } + + /** + * Construct a direct or indirect IBAN that has conversion methods and validity checks. + * If the provided string was not of either the length of a direct IBAN (34 or 35), + * nor the length of an indirect IBAN (20), an Error will be thrown ('Invalid IBAN was provided'). + * + * @param iban - a Direct or an Indirect IBAN + * @returns - Iban instance + * + * @example + * ```ts + * const iban = new web3.eth.Iban("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"); + * > Iban { _iban: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS' } + * ``` + */ + public constructor(iban: string) { + if (Iban.isIndirect(iban) || Iban.isDirect(iban)) { + this._iban = iban; + } else { + throw new Error('Invalid IBAN was provided'); + } + } + + /** + * Convert the passed BBAN to an IBAN for this country specification. + * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account". + * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits + * + * @param bban - the BBAN to convert to IBAN + * @returns an Iban class instance that holds the equivalent IBAN + * + * @example + * ```ts + * web3.eth.Iban.fromBban('ETHXREGGAVOFYORK'); + * > Iban {_iban: "XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"} + * ``` + */ + public static fromBban(bban: string): Iban { + const countryCode = 'XE'; + + const remainder = this._mod9710(this._iso13616Prepare(`${countryCode}00${bban}`)); + const checkDigit = `0${(98 - remainder).toString()}`.slice(-2); + + return new Iban(`${countryCode}${checkDigit}${bban}`); + } + + /** + * Should be used to create IBAN object for given institution and identifier + * + * @param options - an object holds the `institution` and the `identifier` which will be composed to create an `Iban` object from. + * @returns an Iban class instance that holds the equivalent IBAN + * + * @example + * ```ts + * web3.eth.Iban.createIndirect({ + * institution: "XREG", + * identifier: "GAVOFYORK" + * }); + * > Iban {_iban: "XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"} + * ``` + */ + public static createIndirect(options: IbanOptions): Iban { + return Iban.fromBban(`ETH${options.institution}${options.identifier}`); + } + + /** + * This method should be used to create iban object from an Ethereum address. + * + * @param address - an Ethereum address + * @returns an Iban class instance that holds the equivalent IBAN + * + * @example + * ```ts + * web3.eth.Iban.fromAddress("0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8"); + * > Iban {_iban: "XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"} + * ``` + */ + public static fromAddress(address: HexString): Iban { + if (!isAddress(address)) { + throw new InvalidAddressError(address); + } + + const num = BigInt(hexToNumber(address)); + const base36 = num.toString(36); + const padded = leftPad(base36, 15); + return Iban.fromBban(padded.toUpperCase()); + } + + /** + * This method should be used to create an ethereum address from a Direct IBAN address. + * If the provided string was not a direct IBAN (has the length of 34 or 35), an Error will be thrown: + * ('Iban is indirect and cannot be converted. Must be length of 34 or 35'). + * Note: this is also available as a method at an Iban instance. + * + * @param iban - a Direct IBAN address + * @return the equivalent ethereum address + * + * @example + * ```ts + * web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"); + * > "0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8" + * ``` + */ + public static toAddress = (iban: string): HexString => { + const ibanObject = new Iban(iban); + return ibanObject.toAddress(); + }; + + /** + * This method should be used to create the equivalent ethereum address for the early provided Direct IBAN address. + * If the provided string was not a direct IBAN (has the length of 34 or 35), an Error will be thrown: + * ('Iban is indirect and cannot be converted. Must be length of 34 or 35'). + * Note: this is also available as a static method. + * + * @return the equivalent ethereum address + * + * @example + * ```ts + * const iban = new web3.eth.Iban("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"); + * iban.toAddress(); + * > "0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8" + * ``` + */ + public toAddress = (): HexString => { + if (this.isDirect()) { + // check if Iban can be converted to an address + const base36 = this._iban.slice(4); + const parsedBigInt = Iban._parseInt(base36, 36); // convert the base36 string to a bigint + const paddedBigInt = leftPad(parsedBigInt, 40); + return toChecksumAddress(paddedBigInt); + } + throw new Error('Iban is indirect and cannot be converted. Must be length of 34 or 35'); + }; + + /** + * This method should be used to create IBAN address from an Ethereum address + * + * @param address - an Ethereum address + * @return the equivalent IBAN address + * + * @example + * ```ts + * web3.eth.Iban.toIban("0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8"); + * > "XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS" + * ``` + */ + public static toIban(address: HexString): string { + return Iban.fromAddress(address).toString(); + } + + /** + * Should be called to get client identifier within institution + * + * @return the client of the IBAN instance. + * + * @example + * ```ts + * const iban = new web3.eth.Iban("XE81ETHXREGGAVOFYORK"); + * iban.client(); + * > 'GAVOFYORK' + * ``` + */ + public client(): string { + return this.isIndirect() ? this._iban.slice(11) : ''; + } + + /** + * Returns the IBAN checksum of the early provided IBAN + * + * @example + * ```ts + * const iban = new web3.eth.Iban("XE81ETHXREGGAVOFYORK"); + * iban.checksum(); + * > "81" + * ``` + * + */ + public checksum(): string { + return this._iban.slice(2, 4); + } + + /** + * Returns institution identifier from the early provided IBAN + * + * @example + * ```ts + * const iban = new web3.eth.Iban("XE81ETHXREGGAVOFYORK"); + * iban.institution(); + * > 'XREG' + * ``` + */ + public institution(): string { + return this.isIndirect() ? this._iban.slice(7, 11) : ''; + } + + /** + * Simply returns the early provided IBAN + * + * @example + * ```ts + * const iban = new web3.eth.Iban('XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'); + * iban.toString(); + * > 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS' + * ``` + */ + public toString(): string { + return this._iban; + } +} diff --git a/packages/web3-eth-iban/src/index.js b/packages/web3-eth-iban/src/index.js deleted file mode 100644 index 6fdbc99fcb8..00000000000 --- a/packages/web3-eth-iban/src/index.js +++ /dev/null @@ -1,267 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file iban.js - * - * Details: https://github.com/ethereum/wiki/wiki/ICAP:-Inter-exchange-Client-Address-Protocol - * - * @author Marek Kotewicz - * @date 2015 - */ - -"use strict"; - -var utils = require('web3-utils'); -var BigNumber = require('bn.js'); - - -var leftPad = function (string, bytes) { - var result = string; - while (result.length < bytes * 2) { - result = '0' + result; - } - return result; -}; - -/** - * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to - * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616. - * - * @method iso13616Prepare - * @param {String} iban the IBAN - * @returns {String} the prepared IBAN - */ -var iso13616Prepare = function (iban) { - var A = 'A'.charCodeAt(0); - var Z = 'Z'.charCodeAt(0); - - iban = iban.toUpperCase(); - iban = iban.substr(4) + iban.substr(0,4); - - return iban.split('').map(function(n){ - var code = n.charCodeAt(0); - if (code >= A && code <= Z){ - // A = 10, B = 11, ... Z = 35 - return code - A + 10; - } else { - return n; - } - }).join(''); -}; - -/** - * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064. - * - * @method mod9710 - * @param {String} iban - * @returns {Number} - */ -var mod9710 = function (iban) { - var remainder = iban, - block; - - while (remainder.length > 2){ - block = remainder.slice(0, 9); - remainder = parseInt(block, 10) % 97 + remainder.slice(block.length); - } - - return parseInt(remainder, 10) % 97; -}; - -/** - * This prototype should be used to create iban object from iban correct string - * - * @param {String} iban - */ -var Iban = function Iban(iban) { - this._iban = iban; -}; - -/** - * This method should be used to create an ethereum address from a direct iban address - * - * @method toAddress - * @param {String} iban address - * @return {String} the ethereum address - */ -Iban.toAddress = function (ib) { - ib = new Iban(ib); - - if(!ib.isDirect()) { - throw new Error('IBAN is indirect and can\'t be converted'); - } - - return ib.toAddress(); -}; - -/** - * This method should be used to create iban address from an ethereum address - * - * @method toIban - * @param {String} address - * @return {String} the IBAN address - */ -Iban.toIban = function (address) { - return Iban.fromAddress(address).toString(); -}; - -/** - * This method should be used to create iban object from an ethereum address - * - * @method fromAddress - * @param {String} address - * @return {Iban} the IBAN object - */ -Iban.fromAddress = function (address) { - if(!utils.isAddress(address)){ - throw new Error('Provided address is not a valid address: '+ address); - } - - address = address.replace('0x','').replace('0X',''); - - var asBn = new BigNumber(address, 16); - var base36 = asBn.toString(36); - var padded = leftPad(base36, 15); - return Iban.fromBban(padded.toUpperCase()); -}; - -/** - * Convert the passed BBAN to an IBAN for this country specification. - * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account". - * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits - * - * @method fromBban - * @param {String} bban the BBAN to convert to IBAN - * @returns {Iban} the IBAN object - */ -Iban.fromBban = function (bban) { - var countryCode = 'XE'; - - var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban)); - var checkDigit = ('0' + (98 - remainder)).slice(-2); - - return new Iban(countryCode + checkDigit + bban); -}; - -/** - * Should be used to create IBAN object for given institution and identifier - * - * @method createIndirect - * @param {Object} options, required options are "institution" and "identifier" - * @return {Iban} the IBAN object - */ -Iban.createIndirect = function (options) { - return Iban.fromBban('ETH' + options.institution + options.identifier); -}; - -/** - * This method should be used to check if given string is valid iban object - * - * @method isValid - * @param {String} iban string - * @return {Boolean} true if it is valid IBAN - */ -Iban.isValid = function (iban) { - var i = new Iban(iban); - return i.isValid(); -}; - -/** - * Should be called to check if iban is correct - * - * @method isValid - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isValid = function () { - return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) && - mod9710(iso13616Prepare(this._iban)) === 1; -}; - -/** - * Should be called to check if iban number is direct - * - * @method isDirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isDirect = function () { - return this._iban.length === 34 || this._iban.length === 35; -}; - -/** - * Should be called to check if iban number if indirect - * - * @method isIndirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isIndirect = function () { - return this._iban.length === 20; -}; - -/** - * Should be called to get iban checksum - * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003) - * - * @method checksum - * @returns {String} checksum - */ -Iban.prototype.checksum = function () { - return this._iban.substr(2, 2); -}; - -/** - * Should be called to get institution identifier - * eg. XREG - * - * @method institution - * @returns {String} institution identifier - */ -Iban.prototype.institution = function () { - return this.isIndirect() ? this._iban.substr(7, 4) : ''; -}; - -/** - * Should be called to get client identifier within institution - * eg. GAVOFYORK - * - * @method client - * @returns {String} client identifier - */ -Iban.prototype.client = function () { - return this.isIndirect() ? this._iban.substr(11) : ''; -}; - -/** - * Should be called to get client direct address - * - * @method toAddress - * @returns {String} ethereum address - */ -Iban.prototype.toAddress = function () { - if (this.isDirect()) { - var base36 = this._iban.substr(4); - var asBn = new BigNumber(base36, 36); - return utils.toChecksumAddress(asBn.toString(16, 20)); - } - - return ''; -}; - -Iban.prototype.toString = function () { - return this._iban; -}; - -module.exports = Iban; diff --git a/packages/web3-eth-iban/src/index.ts b/packages/web3-eth-iban/src/index.ts new file mode 100644 index 00000000000..bda252d4eb0 --- /dev/null +++ b/packages/web3-eth-iban/src/index.ts @@ -0,0 +1,23 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Iban } from './iban.js'; + +export * from './iban.js'; +export * from './types.js'; + +export default Iban; diff --git a/packages/web3-eth-iban/src/types.ts b/packages/web3-eth-iban/src/types.ts new file mode 100644 index 00000000000..b563c1ce3c4 --- /dev/null +++ b/packages/web3-eth-iban/src/types.ts @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * An object that could hold the components for an Indirect IBAN (BBAN) + */ +export type IbanOptions = { + institution: string; + identifier: string; +}; diff --git a/packages/web3-eth-iban/test/.eslintrc.js b/packages/web3-eth-iban/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-eth-iban/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth-iban/test/config/jest.config.js b/packages/web3-eth-iban/test/config/jest.config.js new file mode 120000 index 00000000000..b875b48129d --- /dev/null +++ b/packages/web3-eth-iban/test/config/jest.config.js @@ -0,0 +1 @@ +../../../../templates/jest.config.js.tmpl \ No newline at end of file diff --git a/packages/web3-eth-iban/test/config/setup.js b/packages/web3-eth-iban/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-eth-iban/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-eth-iban/test/fixtures/iban.ts b/packages/web3-eth-iban/test/fixtures/iban.ts new file mode 100644 index 00000000000..a62ba914c62 --- /dev/null +++ b/packages/web3-eth-iban/test/fixtures/iban.ts @@ -0,0 +1,103 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { IbanOptions } from '../../src/types'; + +export const validIbanToAddressData: [string, string][] = [ + ['XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36', '0x8ba1f109551bD432803012645Ac136ddd64DBA72'], + ['XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', '0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8'], + ['XE76LL5FJYLSMDVW5J02HWU6R5ZVPHURYM9', '0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01'], + ['XE76LL5FJYLSMDVW5J02HWU6R5ZVPHURYM9', '0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01'], +]; + +export const invalidIbanToAddressData: [string, Error][] = [ + [ + 'XE81ETHXREGGAVOFYORK', + new Error('Iban is indirect and cannot be converted. Must be length of 34 or 35'), + ], +]; + +export const invalidAddressData: [string][] = [ + ['0x1'], + ['0xE247a45c287191d435A8a5D72A7C8dc030451E9F'], // Invalid checksum + ['-0x407d73d8a49eeb85d32cf465507dd71d507100c1'], +]; + +export const validFromBbanData: [string, string][] = [['ETHXREGGAVOFYORK', 'XE81ETHXREGGAVOFYORK']]; + +export const validCreateIndirectData: [IbanOptions, string][] = [ + [ + { + institution: 'XREG', + identifier: 'GAVOFYORK', + }, + 'XE81ETHXREGGAVOFYORK', + ], + [ + { + institution: 'XREG', + identifier: 'HELLOWORL', + }, + 'XE48ETHXREGHELLOWORL', + ], +]; + +export const isValidData: [any, boolean][] = [ + ['XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36', true], + ['XE81ETHXREGGAVOFYORK', true], + ['XE48ETHXREGHELLOWORL', true], +]; + +export const isValidStaticData: [any, boolean][] = [ + ...isValidData, + [1, false], // anything that is not a string should return false + [[], false], + [true, false], + [{}, false], + ['ZZ68539007547034', false], // iban must start with the XE + ['BE68539007547034', false], + ['LC55HEMM000100010012001200023015', false], +]; + +export const validIsDirectData: [string, boolean][] = [ + ['XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36', true], + ['XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', true], + ['ZZ68539007547034', false], + ['BE68539007547034', false], +]; + +export const validIsIndirectData: [string, boolean][] = [ + ['XE81ETHXREGGAVOFYORK', true], + ['XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', false], + ['XE81ETHXREGGAVOFYO', false], + ['XE48ETHXREGHELLOWORL', true], +]; + +export const validClientData: [string, string][] = [ + ['XE81ETHXREGGAVOFYORK', 'GAVOFYORK'], + ['XE48ETHXREGHELLOWORL', 'HELLOWORL'], +]; + +export const validChecksumData: [string, string][] = [ + ['XE81ETHXREGGAVOFYORK', '81'], + ['XE48ETHXREGHELLOWORL', '48'], +]; + +export const validInstitutionData: [string, string][] = [ + ['XE81ETHXREGGAVOFYORK', 'XREG'], + ['XE48ETHXREGHELLOWORL', 'XREG'], +]; diff --git a/packages/web3-eth-iban/test/integration/jest.config.js b/packages/web3-eth-iban/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-eth-iban/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-eth-iban/test/integration/setup.js b/packages/web3-eth-iban/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-eth-iban/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-eth-iban/test/tsconfig.json b/packages/web3-eth-iban/test/tsconfig.json new file mode 120000 index 00000000000..c73c54e77b4 --- /dev/null +++ b/packages/web3-eth-iban/test/tsconfig.json @@ -0,0 +1 @@ +../../../templates/test/tsconfig.json.tmpl \ No newline at end of file diff --git a/packages/web3-eth-iban/test/unit/constructor.test.ts b/packages/web3-eth-iban/test/unit/constructor.test.ts new file mode 100644 index 00000000000..5d08d50bebc --- /dev/null +++ b/packages/web3-eth-iban/test/unit/constructor.test.ts @@ -0,0 +1,37 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// import Web3ProviderBase from '../../src/index' +// import {ProviderOptions} from '../../types' + +describe('constructs a PLACEHOLDER instance with expected properties', () => { + // let providerOptions: ProviderOptions + + beforeEach(() => { + // providerOptions = { + // providerUrl: 'http://127.0.0.1:8545' + // } + }); + + it('should construct with expected properties', () => { + // const web3ProviderBase = new Web3ProviderBase(providerOptions) + // expect(web3ProviderBase).toMatchObject({ + // _providerUrl: providerOptions.providerUrl + // }) + expect(true).toBeTruthy(); + }); +}); diff --git a/packages/web3-eth-iban/test/unit/iban.test.ts b/packages/web3-eth-iban/test/unit/iban.test.ts new file mode 100644 index 00000000000..d7f3f63b90b --- /dev/null +++ b/packages/web3-eth-iban/test/unit/iban.test.ts @@ -0,0 +1,161 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Iban } from '../../src/iban'; +import { + validIbanToAddressData, + validFromBbanData, + invalidIbanToAddressData, + validCreateIndirectData, + isValidData, + validIsDirectData, + validIsIndirectData, + validClientData, + validChecksumData, + validInstitutionData, +} from '../fixtures/iban'; + +describe('iban', () => { + describe('create', () => { + describe('valid cases', () => { + it.each(validIbanToAddressData)('%s', () => { + const iban = new Iban('XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'); + expect(typeof iban).toBe('object'); + }); + }); + }); + + describe('toAddress', () => { + describe('valid cases', () => { + it.each(validIbanToAddressData)('%s', (input, output) => { + const iban = new Iban(input); + expect(iban.toAddress()).toBe(output); + }); + }); + describe('invalid cases', () => { + it.each(invalidIbanToAddressData)('%s', (input, output) => { + const iban = new Iban(input); + expect(() => iban.toAddress()).toThrow(output); + }); + }); + }); + + describe('toAddress static method', () => { + describe('valid cases', () => { + it.each(validIbanToAddressData)('%s', (input, output) => { + expect(Iban.toAddress(input)).toBe(output); + }); + }); + describe('invalid cases', () => { + it.each(invalidIbanToAddressData)('%s', (input, output) => { + expect(() => Iban.toAddress(input)).toThrow(output); + }); + }); + }); + + describe('toIban', () => { + describe('valid cases', () => { + it.each(validIbanToAddressData)('%s', (output, input) => { + expect(Iban.toIban(input)).toBe(output); + }); + }); + }); + + describe('fromAddress', () => { + describe('valid cases', () => { + it.each(validIbanToAddressData)('%s', (output, input) => { + expect(Iban.fromAddress(input).toString()).toBe(output); + }); + }); + }); + + describe('fromBban', () => { + describe('valid cases', () => { + it.each(validFromBbanData)('%s', (input, output) => { + expect(Iban.fromBban(input).toString()).toBe(output); + }); + }); + }); + + describe('createIndirect', () => { + describe('valid cases', () => { + it.each(validCreateIndirectData)('%s', (input, output) => { + expect(Iban.createIndirect(input).toString()).toBe(output); + }); + }); + }); + + describe('isValid', () => { + describe('valid cases', () => { + it.each(isValidData)('%s', (input, output) => { + const iban = new Iban(input); + expect(iban.isValid()).toBe(output); + }); + }); + }); + + describe('isValid static', () => { + describe('valid cases', () => { + it.each(isValidData)('%s', (input, output) => { + expect(Iban.isValid(input)).toBe(output); + }); + }); + }); + + describe('isDirect', () => { + describe('valid cases', () => { + it.each(validIsDirectData)('%s', (input, output) => { + expect(Iban.isValid(input)).toBe(output); + }); + }); + }); + + describe('isIndirect', () => { + describe('valid cases', () => { + it.each(validIsIndirectData)('%s', (input, output) => { + expect(Iban.isIndirect(input)).toBe(output); + }); + }); + }); + + describe('client', () => { + describe('valid cases', () => { + it.each(validClientData)('%s', (input, output) => { + const iban = new Iban(input); + expect(iban.client()).toBe(output); + }); + }); + }); + + describe('institution', () => { + describe('valid cases', () => { + it.each(validInstitutionData)('%s', (input, output) => { + const iban = new Iban(input); + expect(iban.institution()).toBe(output); + }); + }); + }); + + describe('checksum', () => { + describe('valid cases', () => { + it.each(validChecksumData)('%s', (input, output) => { + const iban = new Iban(input); + expect(iban.checksum()).toBe(output); + }); + }); + }); +}); diff --git a/packages/web3-eth-iban/test/unit/jest.config.js b/packages/web3-eth-iban/test/unit/jest.config.js new file mode 100644 index 00000000000..7e869778053 --- /dev/null +++ b/packages/web3-eth-iban/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-eth-iban-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-eth-iban/tsconfig.cjs.json b/packages/web3-eth-iban/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-eth-iban/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-eth-iban/tsconfig.esm.json b/packages/web3-eth-iban/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-eth-iban/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-eth-iban/tsconfig.json b/packages/web3-eth-iban/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-eth-iban/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-eth-iban/tsconfig.types.json b/packages/web3-eth-iban/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-eth-iban/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-eth-iban/tsdoc.json b/packages/web3-eth-iban/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-eth-iban/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-eth-iban/types/index.d.ts b/packages/web3-eth-iban/types/index.d.ts deleted file mode 100644 index 6890787f65a..00000000000 --- a/packages/web3-eth-iban/types/index.d.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens - * @date 2018 - */ - -export class Iban { - constructor( - iban: string - ) - - static toAddress(iban: string): string; - - static toIban(address: string): string; - - static fromAddress(address: string): Iban; - - static fromBban(bban: string): Iban; - - static createIndirect(options: IndirectOptions): Iban; - - static isValid(iban: string): boolean; - - isValid(): boolean; - - isDirect(): boolean; - - isIndirect(): boolean; - - checksum(): string; - - institution(): string; - - client(): string; - - toAddress(): string; - - toString(): string; -} - -export interface IndirectOptions { - institution: string; - identifier: string; -} diff --git a/packages/web3-eth-iban/types/tests/iban-tests.ts b/packages/web3-eth-iban/types/tests/iban-tests.ts deleted file mode 100644 index 41c921d900b..00000000000 --- a/packages/web3-eth-iban/types/tests/iban-tests.ts +++ /dev/null @@ -1,154 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file iban-tests.ts - * @author Josh Stevens - * @date 2018 - */ - -import { Iban, IndirectOptions } from 'web3-eth-iban'; - -const iban = 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'; -const address = '0x45cd08334aeedd8a06265b2ae302e3597d8faa28'; - -// $ExpectType Iban -const ibanClass = new Iban(iban); - -// $ExpectType boolean -ibanClass.isDirect(); -// $ExpectType boolean -ibanClass.isIndirect(); -// $ExpectType string -ibanClass.checksum(); -// $ExpectType string -ibanClass.institution(); -// $ExpectType string -ibanClass.client(); -// $ExpectType string -ibanClass.toAddress(); -// $ExpectType string -Iban.toAddress(iban); - -// $ExpectError -Iban.toAddress(345); -// $ExpectError -Iban.toAddress({}); -// $ExpectError -Iban.toAddress(true); -// $ExpectError -Iban.toAddress(['string']); -// $ExpectError -Iban.toAddress([4]); -// $ExpectError -Iban.toAddress(null); -// $ExpectError -Iban.toAddress(undefined); - -// $ExpectType string -Iban.toIban(address); - -// $ExpectError -Iban.toIban(345); -// $ExpectError -Iban.toIban({}); -// $ExpectError -Iban.toIban(true); -// $ExpectError -Iban.toIban(['string']); -// $ExpectError -Iban.toIban([4]); -// $ExpectError -Iban.toIban(null); -// $ExpectError -Iban.toIban(undefined); - -// $ExpectType Iban -Iban.fromAddress(address); - -// $ExpectError -Iban.fromAddress(345); -// $ExpectError -Iban.fromAddress({}); -// $ExpectError -Iban.fromAddress(true); -// $ExpectError -Iban.fromAddress(['string']); -// $ExpectError -Iban.fromAddress([4]); -// $ExpectError -Iban.fromAddress(null); -// $ExpectError -Iban.fromAddress(undefined); - -// $ExpectType Iban -Iban.fromBban('ETHXREGGAVOFYORK'); - -// $ExpectError -Iban.fromBban(345); -// $ExpectError -Iban.fromBban({}); -// $ExpectError -Iban.fromBban(true); -// $ExpectError -Iban.fromBban(['string']); -// $ExpectError -Iban.fromBban([4]); -// $ExpectError -Iban.fromBban(null); -// $ExpectError -Iban.fromBban(undefined); - -const indirectOptions: IndirectOptions = { - institution: 'XREG', - identifier: 'GAVOFYORK' -}; - -// $ExpectType Iban -Iban.createIndirect(indirectOptions); - -// $ExpectError -Iban.createIndirect(345); -// $ExpectError -Iban.createIndirect('string'); -// $ExpectError -Iban.createIndirect(true); -// $ExpectError -Iban.createIndirect(['string']); -// $ExpectError -Iban.createIndirect([4]); -// $ExpectError -Iban.createIndirect(null); -// $ExpectError -Iban.createIndirect(undefined); - -// $ExpectType boolean -Iban.isValid(iban); - -// $ExpectError -Iban.isValid(345); -// $ExpectError -Iban.isValid({}); -// $ExpectError -Iban.isValid(true); -// $ExpectError -Iban.isValid(['string']); -// $ExpectError -Iban.isValid([4]); -// $ExpectError -Iban.isValid(null); -// $ExpectError -Iban.isValid(undefined); diff --git a/packages/web3-eth-iban/types/tsconfig.json b/packages/web3-eth-iban/types/tsconfig.json deleted file mode 100644 index 306c438b694..00000000000 --- a/packages/web3-eth-iban/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-eth-iban": ["."] - } - } -} diff --git a/packages/web3-eth-iban/types/tslint.json b/packages/web3-eth-iban/types/tslint.json deleted file mode 100644 index dc95ea202b8..00000000000 --- a/packages/web3-eth-iban/types/tslint.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false - } -} diff --git a/packages/web3-eth-personal/.eslintignore b/packages/web3-eth-personal/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/packages/web3-eth-personal/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-personal/.eslintrc.js b/packages/web3-eth-personal/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-eth-personal/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth-personal/.gitignore b/packages/web3-eth-personal/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-eth-personal/.npmignore b/packages/web3-eth-personal/.npmignore new file mode 100644 index 00000000000..0b1a9d71c23 --- /dev/null +++ b/packages/web3-eth-personal/.npmignore @@ -0,0 +1,26 @@ +.babelrc +.eslintignore +.eslintrc.json +.eslintrc.js +.gitignore +.lintstagedrc.json +.nycrc +.prettierrc.json +.prettierignore +cypress.json +index.html +Jenkinsfile* +*.log + +.nyc_output/ +coverage/ +benchmark/ +.coverage/ +cypress/ +fixtures/ +tmp/ +logs/ +test/ +scripts/ +browsertest/ +examples/ diff --git a/packages/web3-eth-personal/.prettierignore b/packages/web3-eth-personal/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-eth-personal/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth-personal/.prettierrc.json b/packages/web3-eth-personal/.prettierrc.json new file mode 100644 index 00000000000..7b23ef55098 --- /dev/null +++ b/packages/web3-eth-personal/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": true, + "arrowParens": "avoid" +} diff --git a/packages/web3-eth-personal/CHANGELOG.md b/packages/web3-eth-personal/CHANGELOG.md new file mode 100644 index 00000000000..aba75cae036 --- /dev/null +++ b/packages/web3-eth-personal/CHANGELOG.md @@ -0,0 +1,150 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [4.0.1-alpha.1] + +### Added + +- `web3-rpc-methods` dependency (#5441) + +### Changed + +- Import `EthPersonalAPI` from `web3-types` instead of local import (#5441) +- Replace the imported methods from `rcp_methods.ts` with `personalRpcMethods` imports from `web3-rpc-methods` (#5441) +- Replace use of `EthPersonalAPIManager` with `Web3RequestManager` (#5441) + +### Removed + +- Exported type `EthPersonalAPIManager`, `EthPersonalAPI` is not exported via `web3-types` (#5441) + +## [4.0.1-alpha.2] + +### Changed + +- Updated Web3.js dependencies (#5664) + +## [4.0.1-alpha.3] + +### Changed + +- Updated dependencies (#5725) + +## [4.0.1-alpha.4] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +## [4.0.1-alpha.5] + +### Changed + +- web3.js dependencies (#5757) + +## [4.0.1-rc.0] + +### Changed + +- Updated dependencies (#5912) + +## [4.0.1-rc.1] + +### Added + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +## [4.0.1-rc.2] + +### Changed + +- Dependencies updated + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Changed + +- Dependencies updated + +## [4.0.3] + +### Changed + +- Dependencies updated + +## [4.0.4] + +### Changed + +- Dependencies updated + +## [4.0.5] + +### Changed + +- Dependencies updated + +## [4.0.6] + +### Changed + +- Dependencies updated + +## [4.0.7] + +### Changed + +- Dependencies updated + +## [4.0.8] + +### Changed + +- Dependencies updated + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-eth-personal/README.md b/packages/web3-eth-personal/README.md index 1ff2a56a424..857d97d88f2 100644 --- a/packages/web3-eth-personal/README.md +++ b/packages/web3-eth-personal/README.md @@ -1,38 +1,59 @@ -# web3-eth-personal +

+ web3.js +

-[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +# web3.js - Web3-Eth-Personal -This is a sub-package of [web3.js][repo]. +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] -This is the personal package used in the `web3-eth` package. +This is a sub-package of [web3.js][repo]. -Please read the [documentation][docs] for more. +`web3-eth-personal` Web3 module to interact with the Ethereum blockchain accounts stored in the node. ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3-eth-personal) or using [Yarn](https://yarnpkg.com/package/web3-eth-personal) + +### Using NPM ```bash npm install web3-eth-personal ``` -## Usage +### Using Yarn -```js -const Web3EthPersonal = require('web3-eth-personal'); - -const personal = new Web3EthPersonal('ws://localhost:8546'); +```bash +yarn add web3-eth-personal ``` -## Types +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts -All the TypeScript typings are placed in the `types` folder. +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-eth-personal.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-eth-personal +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-personal%2Fpackage.json [npm-url]: https://npmjs.org/package/web3-eth-personal -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-eth-personal -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-eth-personal -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-eth-personal -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-eth-personal +[downloads-image]: https://img.shields.io/npm/dm/web3-eth-personal?label=npm%20downloads diff --git a/packages/web3-eth-personal/assets/logo/web3js.ai b/packages/web3-eth-personal/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-eth-personal/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-eth-personal/assets/logo/web3js.jpg b/packages/web3-eth-personal/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-eth-personal/assets/logo/web3js.jpg differ diff --git a/packages/web3-eth-personal/assets/logo/web3js.svg b/packages/web3-eth-personal/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-eth-personal/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-eth-personal/package-lock.json b/packages/web3-eth-personal/package-lock.json deleted file mode 100644 index 07a67fb6ee9..00000000000 --- a/packages/web3-eth-personal/package-lock.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "web3-eth-personal", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/node": { - "version": "12.12.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.26.tgz", - "integrity": "sha512-UmUm94/QZvU5xLcUlNR8hA7Ac+fGpO1EG/a8bcWVz0P0LqtxFmun9Y2bbtuckwGboWJIT70DoWq1r3hb56n3DA==" - }, - "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", - "dev": true - } - } -} diff --git a/packages/web3-eth-personal/package.json b/packages/web3-eth-personal/package.json index a1ab1d9a038..ad0c3088cb1 100644 --- a/packages/web3-eth-personal/package.json +++ b/packages/web3-eth-personal/package.json @@ -1,28 +1,67 @@ { - "name": "web3-eth-personal", - "version": "1.3.0", - "description": "Web3 module to interact with the Ethereum blockchain accounts stored in the node.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-eth-personal", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.3.0", - "web3-core-helpers": "1.3.0", - "web3-core-method": "1.3.0", - "web3-net": "1.3.0", - "web3-utils": "1.3.0" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3-eth-personal", + "version": "4.0.8", + "description": "Web3 module to interact with the Ethereum blockchain accounts stored in the node.", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js" + }, + "dependencies": { + "web3-core": "^4.3.0", + "web3-eth": "^4.3.1", + "web3-rpc-methods": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4", + "web3-providers-ws": "^4.0.7" + } } diff --git a/packages/web3-eth-personal/src/index.js b/packages/web3-eth-personal/src/index.js deleted file mode 100644 index ab27b1ef4aa..00000000000 --- a/packages/web3-eth-personal/src/index.js +++ /dev/null @@ -1,150 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var core = require('web3-core'); -var Method = require('web3-core-method'); -var utils = require('web3-utils'); -var Net = require('web3-net'); - -var formatters = require('web3-core-helpers').formatters; - - -var Personal = function Personal() { - var _this = this; - - // sets _requestmanager - core.packageInit(this, arguments); - - this.net = new Net(this); - - var defaultAccount = null; - var defaultBlock = 'latest'; - - Object.defineProperty(this, 'defaultAccount', { - get: function () { - return defaultAccount; - }, - set: function (val) { - if(val) { - defaultAccount = utils.toChecksumAddress(formatters.inputAddressFormatter(val)); - } - - // update defaultBlock - methods.forEach(function(method) { - method.defaultAccount = defaultAccount; - }); - - return val; - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultBlock', { - get: function () { - return defaultBlock; - }, - set: function (val) { - defaultBlock = val; - - // update defaultBlock - methods.forEach(function(method) { - method.defaultBlock = defaultBlock; - }); - - return val; - }, - enumerable: true - }); - - - var methods = [ - new Method({ - name: 'getAccounts', - call: 'personal_listAccounts', - params: 0, - outputFormatter: utils.toChecksumAddress - }), - new Method({ - name: 'newAccount', - call: 'personal_newAccount', - params: 1, - inputFormatter: [null], - outputFormatter: utils.toChecksumAddress - }), - new Method({ - name: 'unlockAccount', - call: 'personal_unlockAccount', - params: 3, - inputFormatter: [formatters.inputAddressFormatter, null, null] - }), - new Method({ - name: 'lockAccount', - call: 'personal_lockAccount', - params: 1, - inputFormatter: [formatters.inputAddressFormatter] - }), - new Method({ - name: 'importRawKey', - call: 'personal_importRawKey', - params: 2 - }), - new Method({ - name: 'sendTransaction', - call: 'personal_sendTransaction', - params: 2, - inputFormatter: [formatters.inputTransactionFormatter, null] - }), - new Method({ - name: 'signTransaction', - call: 'personal_signTransaction', - params: 2, - inputFormatter: [formatters.inputTransactionFormatter, null] - }), - new Method({ - name: 'sign', - call: 'personal_sign', - params: 3, - inputFormatter: [formatters.inputSignFormatter, formatters.inputAddressFormatter, null] - }), - new Method({ - name: 'ecRecover', - call: 'personal_ecRecover', - params: 2, - inputFormatter: [formatters.inputSignFormatter, null] - }) - ]; - methods.forEach(function(method) { - method.attachToObject(_this); - method.setRequestManager(_this._requestManager); - method.defaultBlock = _this.defaultBlock; - method.defaultAccount = _this.defaultAccount; - }); -}; - -core.addProviders(Personal); - - - -module.exports = Personal; - - diff --git a/packages/web3-eth-personal/src/index.ts b/packages/web3-eth-personal/src/index.ts new file mode 100644 index 00000000000..62576d7bae1 --- /dev/null +++ b/packages/web3-eth-personal/src/index.ts @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * The `web3-eth-personal` package allows you to interact with the Ethereum node’s accounts. + * + * **_NOTE:_** Many of these functions send sensitive information like passwords. Never call these functions over a unsecured Websocket or HTTP provider, as your password will be sent in plain text! + * + * import Personal from 'web3-eth-personal'; + * + * const personal = new Personal('http://localhost:8545'); + * + * or using the web3 umbrella package + * + * import Personal from 'web3-eth-personal'; + * const web3 = new Web3('http://localhost:8545'); + * // web3.eth.personal + */ +/** + * This comment _supports3_ [Markdown](https://marked.js.org/) + */ +import { Personal } from './personal.js'; + +export * from './personal.js'; + +export default Personal; diff --git a/packages/web3-eth-personal/src/personal.ts b/packages/web3-eth-personal/src/personal.ts new file mode 100644 index 00000000000..f89f6fa1d0c --- /dev/null +++ b/packages/web3-eth-personal/src/personal.ts @@ -0,0 +1,228 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Context } from 'web3-core'; +import { Address, EthPersonalAPI, HexString, Transaction } from 'web3-types'; + +import * as rpcWrappers from './rpc_method_wrappers.js'; + +export class Personal extends Web3Context { + /** + *Returns a list of accounts the node controls by using the provider and calling the RPC method personal_listAccounts. Using `web3.eth.accounts.create()` will not add accounts into this list. For that use `web3.eth.personal.newAccount()`. + * @returns - An array of addresses controlled by the node. + * @example + * ```ts + * const accounts = await personal.getAccounts(); + * console.log(accounts); + * > + * [ + * '0x79D7BbaC53C9aF700d0B250e9AE789E503Fcd6AE', + * '0xe2597eB05CF9a87eB1309e86750C903EC38E527e', + * '0x7eD0e85B8E1E925600B4373e6d108F34AB38a401', + * '0xE4bEEf667408b99053dC147Ed19592aDa0d77F59', + * '0x7AB80aeB6bb488B7f6c41c58e83Ef248eB39c882', + * '0x12B1D9d74d73b1C3A245B19C1C5501c653aF1af9', + * '0x1a6075A263Ee140e00Dbf8E374Fc5A443d097894', + * '0x4FEC0A51024B13030D26E70904B066C6d41157A5', + * '0x03095dc4857BB26f3a4550c5651Df8b7f6b6B1Ef', + * '0xac0B9b6e8A17991cb172B2ABAF45Fb5eb769E540' + * ] + * ``` + */ + public async getAccounts() { + return rpcWrappers.getAccounts(this.requestManager); + } + + /** + * Creates a new account and returns its address. + * **_NOTE:_** This function sends a sensitive information like password. Never call this function over a unsecured Websocket or HTTP provider, as your password will be sent in plain text! + * @param password - The password to encrypt the account with. + * @returns - The address of the new account. + * @example + * ```ts + * const addr = await web3.eth.personal.newAccount('password'); + * console.log(addr); + * > '0x1234567891011121314151617181920212223456' + * ``` + */ + public async newAccount(password: string) { + return rpcWrappers.newAccount(this.requestManager, password); + } + + /** + * Unlocks an account for a given duration. + * @param address - The address of the account to unlock. + * @param password - The password of the account to unlock. + * @param unlockDuration - The duration in seconds to unlock the account for. + * @example + * ```ts + * await personal.unlockAccount( + * "0x0d4aa485ecbc499c70860feb7e5aaeaf5fd8172e", + * "123456", + * 600 + * ); + * ``` + */ + public async unlockAccount(address: Address, password: string, unlockDuration: number) { + return rpcWrappers.unlockAccount(this.requestManager, address, password, unlockDuration); + } + /** + * Locks the given account + * @param address - The address of the account to lock. + * @returns - `true` if the account was locked, otherwise `false`. + * @example + * ```ts + * await personal.lockAccount( + * "0x0d4aa485ecbc499c70860feb7e5aaeaf5fd8172e" + * ); + */ + public async lockAccount(address: Address) { + return rpcWrappers.lockAccount(this.requestManager, address); + } + /** + * Imports the given private key into the key store, encrypting it with the passphrase. + * @param keyData - An unencrypted private key (hex string). + * @param passphrase - The password of the account + * @returns - The address of the new account. + * @example + * ```ts + * const accountAddress = await personal.importRawKey( + * "abe40cb08850da918ee951b237fa87946499b2d8643e4aa12b0610b050c731f6", + * "123456" + * ); + * + * console.log(unlockTx); + * > 0x8727a8b34ec833154b72b62cac05d69f86eb6556 + * ``` + */ + public async importRawKey(keyData: HexString, passphrase: string) { + return rpcWrappers.importRawKey(this.requestManager, keyData, passphrase); + } + + /** + * This method sends a transaction over the management API. + * **_NOTE:_** Sending your account password over an unsecured HTTP RPC connection is highly unsecure. + * @param tx - The transaction options + * @param passphrase - The passphrase of the current account + * @returns - The transaction hash + * @example + * ```ts + * const txHash = personal + * .sendTransaction({ + * from: "0x0d4aa485ecbc499c70860feb7e5aaeaf5fd8172e", + * gasPrice: "20000000000", + * gas: "21000", + * to: "0x3535353535353535353535353535353535353535", + * value: "1000000", + * data: "", + * nonce: 0, + * }, + * "123456"); + * + * console.log(txHash); + * > 0x9445325c3c5638c9fe425b003b8c32f03e9f99d409555a650a6838ba712bb51b + * ``` + */ + public async sendTransaction(tx: Transaction, passphrase: string) { + return rpcWrappers.sendTransaction(this.requestManager, tx, passphrase); + } + /** + * Signs a transaction. This account needs to be unlocked. + * **_NOTE:_** Sending your account password over an unsecured HTTP RPC connection is highly unsecure. + * @param tx - The transaction data to sign. See {@link sendTransaction} for more information. + * @param passphrase - The password of the `from` account, to sign the transaction with. + * @returns - The RLP encoded transaction. The `raw` property can be used to send the transaction using {@link sendSignedTransaction}. + * @example + * ```ts + * const tx = personal + * .signTransaction({ + * from: "0x0d4aa485ecbc499c70860feb7e5aaeaf5fd8172e", + * gasPrice: "20000000000", + * gas: "21000", + * to: "0x3535353535353535353535353535353535353535", + * value: "1000000000000000000", + * data: "", + * nonce: 0, + * }, + * "123456"); + * + * console.log(tx); + * + * > { + * raw: '0xf86e808504a817c800825208943535353535353535353535353535353535353535880de0b6b3a764000080820a95a0c951c03238fe930e6e69ab9d6af9f29248a514048e44884f0e60c4de40de3526a038b71399bf0c8925749ab79e91ce6cd2fc068c84c18ff6a197b48c4cbef01e00', + * tx: { + * type: '0x0', + * nonce: '0x0', + * gasPrice: '0x4a817c800', + * maxPriorityFeePerGas: null, + * maxFeePerGas: null, + * gas: '0x5208', + * value: '0xde0b6b3a7640000', + * input: '0x', + * v: '0xa95', + * r: '0xc951c03238fe930e6e69ab9d6af9f29248a514048e44884f0e60c4de40de3526', + * s: '0x38b71399bf0c8925749ab79e91ce6cd2fc068c84c18ff6a197b48c4cbef01e00', + * to: '0x3535353535353535353535353535353535353535', + * hash: '0x65e3df790ab2a32068b13cff970b26445b8995229ae4abbed61bd996f09fce69' + * } + * } + * ``` + */ + public async signTransaction(tx: Transaction, passphrase: string) { + return rpcWrappers.signTransaction(this.requestManager, tx, passphrase); + } + /** + * Calculates an Ethereum specific signature with: + * sign(keccak256("\x19Ethereum Signed Message:\n" + dataToSign.length + dataToSign))) + * Adding a prefix to the message makes the calculated signature recognisable as an Ethereum specific signature. + * + * If you have the original message and the signed message, you can discover the signing account address using web3.eth.personal.ecRecover + * **_NOTE:_** Sending your account password over an unsecured HTTP RPC connection is highly unsecure. + * @param data - The data to sign. + * @param address - The address to sign with. + * @param passphrase - The passphrase to decrypt the account with. + * @returns - The signature. + * @example + * ```ts + * const sig = await personal .sign("Hello world", "0x0D4Aa485ECbC499c70860fEb7e5AaeAf5fd8172E", "123456") + * console.log(sig) + * > 0x5d21d01b3198ac34d0585a9d76c4d1c8123e5e06746c8962318a1c08ffb207596e6fce4a6f377b7c0fc98c5f646cd73438c80e8a1a95cbec55a84c2889dca0301b + * ``` + */ + public async sign(data: HexString, address: Address, passphrase: string) { + return rpcWrappers.sign(this.requestManager, data, address, passphrase); + } + + /** + * Recovers the account that signed the data. + * @param signedData - Data that was signed. If String it will be converted using {@link utf8ToHex} + * @param signature - The signature + * @returns - The address of the account that signed the data. + * @example + * ```ts + * const address = await personal.ecRecover( + * "Hello world", + * "0x5d21d01b3198ac34d0585a9d76c4d1c8123e5e06746c8962318a1c08ffb207596e6fce4a6f377b7c0fc98c5f646cd73438c80e8a1a95cbec55a84c2889dca0301b" + * ); + * console.log(address); + * > 0x0d4aa485ecbc499c70860feb7e5aaeaf5fd8172e + * ``` + */ + public async ecRecover(signedData: HexString, signature: string) { + return rpcWrappers.ecRecover(this.requestManager, signedData, signature); + } +} diff --git a/packages/web3-eth-personal/src/rpc_method_wrappers.ts b/packages/web3-eth-personal/src/rpc_method_wrappers.ts new file mode 100644 index 00000000000..51491714881 --- /dev/null +++ b/packages/web3-eth-personal/src/rpc_method_wrappers.ts @@ -0,0 +1,114 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3RequestManager } from 'web3-core'; +import { toChecksumAddress, utf8ToHex } from 'web3-utils'; +import { formatTransaction } from 'web3-eth'; +import { Address, EthPersonalAPI, ETH_DATA_FORMAT, HexString, Transaction } from 'web3-types'; +import { validator, isHexStrict } from 'web3-validator'; +import { personalRpcMethods } from 'web3-rpc-methods'; + +export const getAccounts = async (requestManager: Web3RequestManager) => { + const result = await personalRpcMethods.getAccounts(requestManager); + + return result.map(toChecksumAddress); +}; + +export const newAccount = async ( + requestManager: Web3RequestManager, + password: string, +) => { + validator.validate(['string'], [password]); + + const result = await personalRpcMethods.newAccount(requestManager, password); + + return toChecksumAddress(result); +}; + +export const unlockAccount = async ( + requestManager: Web3RequestManager, + address: Address, + password: string, + unlockDuration: number, +) => { + validator.validate(['address', 'string', 'uint'], [address, password, unlockDuration]); + + return personalRpcMethods.unlockAccount(requestManager, address, password, unlockDuration); +}; + +export const lockAccount = async ( + requestManager: Web3RequestManager, + address: Address, +) => { + validator.validate(['address'], [address]); + + return personalRpcMethods.lockAccount(requestManager, address); +}; + +export const importRawKey = async ( + requestManager: Web3RequestManager, + keyData: HexString, + passphrase: string, +) => { + validator.validate(['string', 'string'], [keyData, passphrase]); + + return personalRpcMethods.importRawKey(requestManager, keyData, passphrase); +}; + +export const sendTransaction = async ( + requestManager: Web3RequestManager, + tx: Transaction, + passphrase: string, +) => { + const formattedTx = formatTransaction(tx, ETH_DATA_FORMAT); + + return personalRpcMethods.sendTransaction(requestManager, formattedTx, passphrase); +}; + +export const signTransaction = async ( + requestManager: Web3RequestManager, + tx: Transaction, + passphrase: string, +) => { + const formattedTx = formatTransaction(tx, ETH_DATA_FORMAT); + + return personalRpcMethods.signTransaction(requestManager, formattedTx, passphrase); +}; + +export const sign = async ( + requestManager: Web3RequestManager, + data: HexString, + address: Address, + passphrase: string, +) => { + validator.validate(['string', 'address', 'string'], [data, address, passphrase]); + + const dataToSign = isHexStrict(data) ? data : utf8ToHex(data); + + return personalRpcMethods.sign(requestManager, dataToSign, address, passphrase); +}; + +export const ecRecover = async ( + requestManager: Web3RequestManager, + signedData: HexString, + signature: string, +) => { + validator.validate(['string', 'string'], [signedData, signature]); + + const signedDataString = isHexStrict(signedData) ? signedData : utf8ToHex(signedData); + + return personalRpcMethods.ecRecover(requestManager, signedDataString, signature); +}; diff --git a/packages/web3-eth-personal/test/.eslintrc.js b/packages/web3-eth-personal/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-eth-personal/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth-personal/test/config/jest.config.js b/packages/web3-eth-personal/test/config/jest.config.js new file mode 100644 index 00000000000..c8c21e06e6a --- /dev/null +++ b/packages/web3-eth-personal/test/config/jest.config.js @@ -0,0 +1,43 @@ +module.exports = { + globals: { + 'ts-jest': { + tsconfig: './test/tsconfig.json', + }, + }, + rootDir: '../..', + testMatch: ['/test/**/?(*.)+(spec|test).+(ts|tsx|js)'], + setupFilesAfterEnv: ['/test/config/setup.js'], + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + verbose: false, + collectCoverage: false, + coverageReporters: ['json'], + coverageDirectory: '.coverage', + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, +}; diff --git a/packages/web3-eth-personal/test/config/setup.js b/packages/web3-eth-personal/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-eth-personal/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-eth-personal/test/fixtures/accounts.json b/packages/web3-eth-personal/test/fixtures/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3-eth-personal/test/fixtures/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3-eth-personal/test/fixtures/system_test_utils.ts b/packages/web3-eth-personal/test/fixtures/system_test_utils.ts new file mode 120000 index 00000000000..2ab08a83752 --- /dev/null +++ b/packages/web3-eth-personal/test/fixtures/system_test_utils.ts @@ -0,0 +1 @@ +../../../../scripts/system_tests_utils.ts \ No newline at end of file diff --git a/packages/web3-eth-personal/test/integration/jest.config.js b/packages/web3-eth-personal/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-eth-personal/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-eth-personal/test/integration/personal.test.ts b/packages/web3-eth-personal/test/integration/personal.test.ts new file mode 100644 index 00000000000..ed2fe1311a2 --- /dev/null +++ b/packages/web3-eth-personal/test/integration/personal.test.ts @@ -0,0 +1,162 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { EthPersonalAPI, SupportedProviders } from 'web3-types'; +import { toChecksumAddress } from 'web3-utils'; +import { isHexStrict } from 'web3-validator'; +import { Personal } from '../../src/index'; +import { + closeOpenConnection, + createAccount, + createNewAccount, + createTempAccount, + getSystemTestBackend, + getSystemTestProvider, + itIf, +} from '../fixtures/system_test_utils'; + +describe('personal integration tests', () => { + let ethPersonal: Personal; + let clientUrl: string | SupportedProviders; + + beforeAll(() => { + clientUrl = getSystemTestProvider(); + ethPersonal = new Personal(clientUrl); + }); + + afterAll(async () => { + await closeOpenConnection(ethPersonal); + }); + + it('new account', async () => { + const newAccount = await ethPersonal.newAccount('!@superpassword'); + expect(isHexStrict(newAccount)).toBe(true); + }); + + itIf(getSystemTestBackend() === 'geth')('ecRecover', async () => { + const password = '123456'; + const acc = (await createTempAccount({ password })).address; + // ganache does not support ecRecover + const signature = await ethPersonal.sign('0x2313', acc, password); + const publicKey = await ethPersonal.ecRecover('0x2313', signature); // ecRecover is returning all lowercase + // eslint-disable-next-line jest/no-standalone-expect + expect(toChecksumAddress(publicKey)).toBe(toChecksumAddress(acc)); + }); + + it('lock account', async () => { + const { address } = await createTempAccount(); + const lockAccount = await ethPersonal.lockAccount(address); + expect(lockAccount).toBe(true); + + const from = address; + const tx = { + from, + to: '0x1337C75FdF978ABABaACC038A1dCd580FeC28ab2', + value: `0`, + gas: '21000', + maxFeePerGas: '0x59682F00', + maxPriorityFeePerGas: '0x1DCD6500', + }; + // locked accounts will error + await expect(ethPersonal.sendTransaction(tx, '')).rejects.toThrow(); + }); + + it('unlock account', async () => { + const { address } = await createTempAccount(); + const unlockedAccount = await ethPersonal.unlockAccount(address, '123456', 1000); + expect(unlockedAccount).toBe(true); + + const tx = { + from: address, + to: '0x1337C75FdF978ABABaACC038A1dCd580FeC28ab2', + value: `0`, + gas: '21000', + maxFeePerGas: '0x59682F00', + maxPriorityFeePerGas: '0x1DCD6500', + }; + const receipt = await ethPersonal.sendTransaction(tx, '123456'); + + expect(isHexStrict(receipt)).toBe(true); + }); + + // ganache does not support sign + itIf(getSystemTestBackend() === 'geth')('sign', async () => { + const password = '123456'; + const key = (await createTempAccount({ password })).address; + await ethPersonal.unlockAccount(key, password, 100000); + const signature = await ethPersonal.sign('0xdeadbeaf', key, password); + const address = await ethPersonal.ecRecover('0xdeadbeaf', signature); + // eslint-disable-next-line jest/no-standalone-expect + expect(key).toBe(address); + }); + + it('getAccounts', async () => { + const accountList = await ethPersonal.getAccounts(); + // create a new account + await ethPersonal.newAccount('cde'); + const updatedAccountList = await ethPersonal.getAccounts(); + expect(updatedAccountList.length).toBeGreaterThan(accountList.length); + }); + + it('importRawKey', async () => { + const { address, privateKey } = createAccount(); + const rawKey = getSystemTestBackend() === 'geth' ? privateKey.slice(2) : privateKey; + const key = await ethPersonal.importRawKey(rawKey, '123456'); + expect(toChecksumAddress(key).toLowerCase()).toBe(address.toLowerCase()); + }); + + // geth doesn't have signTransaction method + itIf(getSystemTestBackend() === 'ganache')('signTransaction', async () => { + const acc = await createNewAccount({ + privateKey: '0x43c74e0b52c754285db6fc52cc98353804e5025e38ab80d7d9e2fd53d456de84', + unlock: true, + refill: true, + }); + const tx = { + from: acc.address, + to: '0x1337C75FdF978ABABaACC038A1dCd580FeC28ab2', + value: '10000', + gas: '21000', + maxFeePerGas: '0x59682F00', + maxPriorityFeePerGas: '0x1DCD6500', + nonce: 0, + }; + const signedTx = await ethPersonal.signTransaction(tx, '123456'); + const expectedResult = + '0x02f86e82053980841dcd65008459682f00825208941337c75fdf978ababaacc038a1dcd580fec28ab282271080c001a0fef20ce4d8dd7e129bd52d08599988e74b0baad0692b9e316368896b22544162a07d69fac7625a925286dcf1be61d35c787f467b2b7e911181098d49c1ae041deb'; + // eslint-disable-next-line jest/no-standalone-expect + expect(signedTx).toEqual(expectedResult); + }); + + it('sendTransaction', async () => { + const from = (await createNewAccount({ unlock: true, refill: true })).address; + + const unlockedAccount = await ethPersonal.unlockAccount(from, '123456', 1000); + expect(unlockedAccount).toBe(true); + + const tx = { + from, + to: '0x1337C75FdF978ABABaACC038A1dCd580FeC28ab2', + value: `0`, + gas: '21000', + maxFeePerGas: '0x59682F00', + maxPriorityFeePerGas: '0x1DCD6500', + }; + const receipt = await ethPersonal.sendTransaction(tx, '123456'); + + expect(isHexStrict(receipt)).toBe(true); + }); +}); diff --git a/packages/web3-eth-personal/test/integration/setup.js b/packages/web3-eth-personal/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-eth-personal/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-eth-personal/test/tsconfig.json b/packages/web3-eth-personal/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-eth-personal/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-eth-personal/test/unit/eth_personal.test.ts b/packages/web3-eth-personal/test/unit/eth_personal.test.ts new file mode 100644 index 00000000000..fc2d545da10 --- /dev/null +++ b/packages/web3-eth-personal/test/unit/eth_personal.test.ts @@ -0,0 +1,320 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ETH_DATA_FORMAT } from 'web3-types'; +import * as utils from 'web3-utils'; +import * as eth from 'web3-eth'; +import * as validator from 'web3-validator'; +import { Personal } from '../../src/index'; + +jest.mock('web3-utils'); +jest.mock('web3-eth'); +jest.mock('web3-validator'); +describe('Personal', () => { + let personal: Personal; + let sendSpy: jest.SpyInstance; + let validateSpy: jest.SpyInstance; + beforeEach(() => { + personal = new Personal('http://localhost:8545'); + + sendSpy = jest.spyOn(personal.requestManager, 'send').mockImplementation(async () => { + return Promise.resolve('0x0'); + }); + + validateSpy = jest.spyOn(validator.validator, 'validate').mockReturnValue(undefined); + + jest.resetAllMocks(); + }); + + describe('getAccounts', () => { + it('should call the correct method for request manager', async () => { + sendSpy.mockResolvedValue(['0x528ABBBa47c33600245066398072799A9b7e2d9E']); + + await personal.getAccounts(); + + expect(sendSpy).toHaveBeenCalledWith({ method: 'personal_listAccounts', params: [] }); + }); + + it('should format return with toChecksumAddress', async () => { + const result = ['0x528ABBBa47c33600245066398072799A9b7e2d9E']; + sendSpy.mockResolvedValue(result); + + await personal.getAccounts(); + + expect(utils.toChecksumAddress).toHaveBeenCalledTimes(1); + expect(utils.toChecksumAddress).toHaveBeenCalledWith(result[0], 0, result); + }); + }); + + describe('newAccount', () => { + it('should call the correct method for request manager', async () => { + await personal.newAccount('password'); + + expect(sendSpy).toHaveBeenCalledWith({ + method: 'personal_newAccount', + params: ['password'], + }); + }); + + it('should validate user input', async () => { + await personal.newAccount('password'); + + expect(validateSpy).toHaveBeenCalledTimes(1); + expect(validateSpy).toHaveBeenCalledWith(['string'], ['password']); + }); + + it('should format return with toChecksumAddress', async () => { + const result = '0x528ABBBa47c33600245066398072799A9b7e2d9E'; + sendSpy.mockResolvedValue(result); + + await personal.newAccount('password'); + + expect(utils.toChecksumAddress).toHaveBeenCalledTimes(1); + expect(utils.toChecksumAddress).toHaveBeenCalledWith(result); + }); + }); + + describe('unlockAccount', () => { + it('should call the correct method for request manager', async () => { + await personal.unlockAccount( + '0x528ABBBa47c33600245066398072799A9b7e2d9E', + 'password', + 30, + ); + + expect(sendSpy).toHaveBeenCalledWith({ + method: 'personal_unlockAccount', + params: ['0x528ABBBa47c33600245066398072799A9b7e2d9E', 'password', 30], + }); + }); + + it('should validate user input', async () => { + await personal.unlockAccount( + '0x528ABBBa47c33600245066398072799A9b7e2d9E', + 'password', + 30, + ); + + expect(validateSpy).toHaveBeenCalledTimes(1); + expect(validateSpy).toHaveBeenCalledWith( + ['address', 'string', 'uint'], + ['0x528ABBBa47c33600245066398072799A9b7e2d9E', 'password', 30], + ); + }); + }); + + describe('lockAccount', () => { + it('should call the correct method for request manager', async () => { + await personal.lockAccount('0x528ABBBa47c33600245066398072799A9b7e2d9E'); + + expect(sendSpy).toHaveBeenCalledWith({ + method: 'personal_lockAccount', + params: ['0x528ABBBa47c33600245066398072799A9b7e2d9E'], + }); + }); + + it('should validate user input', async () => { + await personal.lockAccount('0x528ABBBa47c33600245066398072799A9b7e2d9E'); + + expect(validateSpy).toHaveBeenCalledTimes(1); + expect(validateSpy).toHaveBeenCalledWith( + ['address'], + ['0x528ABBBa47c33600245066398072799A9b7e2d9E'], + ); + }); + }); + + describe('importRawKey', () => { + it('should call the correct method for request manager', async () => { + await personal.importRawKey('0x528ABBBa47c33600245066398072799A9b7e2d9E', 'password'); + + expect(sendSpy).toHaveBeenCalledWith({ + method: 'personal_importRawKey', + params: ['0x528ABBBa47c33600245066398072799A9b7e2d9E', 'password'], + }); + }); + + it('should validate user input', async () => { + await personal.importRawKey('0x528ABBBa47c33600245066398072799A9b7e2d9E', 'password'); + + expect(validateSpy).toHaveBeenCalledTimes(1); + expect(validateSpy).toHaveBeenCalledWith( + ['string', 'string'], + ['0x528ABBBa47c33600245066398072799A9b7e2d9E', 'password'], + ); + }); + }); + + describe('sendTransaction', () => { + it('should call the correct method for request manager', async () => { + const tx = { + from: '0x528ABBBa47c33600245066398072799A9b7e2d9E', + to: '0x9988BBBa47c33600245066398072799A9b7e2d9E', + }; + jest.spyOn(eth, 'formatTransaction').mockReturnValue(tx); + + await personal.sendTransaction(tx, 'password'); + + expect(sendSpy).toHaveBeenCalledWith({ + method: 'personal_sendTransaction', + params: [tx, 'password'], + }); + }); + + it('should format user input', async () => { + const tx = { + from: '0x528ABBBa47c33600245066398072799A9b7e2d9E', + to: '0x9988BBBa47c33600245066398072799A9b7e2d9E', + }; + jest.spyOn(eth, 'formatTransaction').mockReturnValue(tx); + + await personal.sendTransaction(tx, 'password'); + + expect(eth.formatTransaction).toHaveBeenCalledTimes(1); + expect(eth.formatTransaction).toHaveBeenCalledWith(tx, ETH_DATA_FORMAT); + }); + }); + + describe('signTransaction', () => { + it('should call the correct method for request manager', async () => { + const tx = { + from: '0x528ABBBa47c33600245066398072799A9b7e2d9E', + to: '0x9988BBBa47c33600245066398072799A9b7e2d9E', + }; + jest.spyOn(eth, 'formatTransaction').mockReturnValue(tx); + + await personal.signTransaction(tx, 'password'); + + expect(sendSpy).toHaveBeenCalledWith({ + method: 'personal_signTransaction', + params: [tx, 'password'], + }); + }); + + it('should format user input', async () => { + const tx = { + from: '0x528ABBBa47c33600245066398072799A9b7e2d9E', + to: '0x9988BBBa47c33600245066398072799A9b7e2d9E', + }; + jest.spyOn(eth, 'formatTransaction').mockReturnValue(tx); + + await personal.signTransaction(tx, 'password'); + + expect(eth.formatTransaction).toHaveBeenCalledTimes(1); + expect(eth.formatTransaction).toHaveBeenCalledWith(tx, ETH_DATA_FORMAT); + }); + }); + + describe('sign', () => { + it('should call the correct method for request manager', async () => { + const data = '0x1234'; + + jest.spyOn(validator, 'isHexStrict').mockReturnValue(true); + + await personal.sign(data, '0x528ABBBa47c33600245066398072799A9b7e2d9E', 'password'); + + expect(sendSpy).toHaveBeenCalledWith({ + method: 'personal_sign', + params: ['0x1234', '0x528ABBBa47c33600245066398072799A9b7e2d9E', 'password'], + }); + }); + + it('should convert input if not hex', async () => { + const data = '0x1234'; + + jest.spyOn(validator, 'isHexStrict').mockReturnValue(false); + jest.spyOn(utils, 'utf8ToHex').mockReturnValue(data); + + await personal.sign(data, '0x528ABBBa47c33600245066398072799A9b7e2d9E', 'password'); + + expect(utils.utf8ToHex).toHaveBeenCalledTimes(1); + expect(utils.utf8ToHex).toHaveBeenCalledWith(data); + }); + + it('should not convert input if data is already hex', async () => { + const data = '0x1234'; + + jest.spyOn(validator, 'isHexStrict').mockReturnValue(true); + + await personal.sign(data, '0x528ABBBa47c33600245066398072799A9b7e2d9E', 'password'); + + expect(utils.utf8ToHex).toHaveBeenCalledTimes(0); + }); + + it('should validate user input', async () => { + const data = '0x1234'; + + jest.spyOn(validator, 'isHexStrict').mockReturnValue(true); + + await personal.sign(data, '0x528ABBBa47c33600245066398072799A9b7e2d9E', 'password'); + + expect(validateSpy).toHaveBeenCalledTimes(1); + expect(validateSpy).toHaveBeenCalledWith( + ['string', 'address', 'string'], + [data, '0x528ABBBa47c33600245066398072799A9b7e2d9E', 'password'], + ); + }); + }); + + describe('ecRecover', () => { + it('should call the correct method for request manager', async () => { + const data = '0x1234'; + + jest.spyOn(validator, 'isHexStrict').mockReturnValue(true); + + await personal.ecRecover(data, '0x000000'); + + expect(sendSpy).toHaveBeenCalledWith({ + method: 'personal_ecRecover', + params: [data, '0x000000'], + }); + }); + + it('should convert input if not hex', async () => { + const data = '0x1234'; + + jest.spyOn(validator, 'isHexStrict').mockReturnValue(false); + jest.spyOn(utils, 'utf8ToHex').mockReturnValue(data); + + await personal.ecRecover(data, 'password'); + + expect(utils.utf8ToHex).toHaveBeenCalledTimes(1); + expect(utils.utf8ToHex).toHaveBeenCalledWith(data); + }); + + it('should not convert input if data is already hex', async () => { + const data = '0x1234'; + + jest.spyOn(validator, 'isHexStrict').mockReturnValue(true); + + await personal.ecRecover(data, 'password'); + + expect(utils.utf8ToHex).toHaveBeenCalledTimes(0); + }); + + it('should validate user input', async () => { + const data = '0x1234'; + + jest.spyOn(validator, 'isHexStrict').mockReturnValue(true); + + await personal.ecRecover(data, 'password'); + + expect(validateSpy).toHaveBeenCalledTimes(1); + expect(validateSpy).toHaveBeenCalledWith(['string', 'string'], [data, 'password']); + }); + }); +}); diff --git a/packages/web3-eth-personal/test/unit/jest.config.js b/packages/web3-eth-personal/test/unit/jest.config.js new file mode 100644 index 00000000000..3815ba858d7 --- /dev/null +++ b/packages/web3-eth-personal/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-eth-personal-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-eth-personal/tsconfig.cjs.json b/packages/web3-eth-personal/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-eth-personal/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-eth-personal/tsconfig.esm.json b/packages/web3-eth-personal/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-eth-personal/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-eth-personal/tsconfig.json b/packages/web3-eth-personal/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-eth-personal/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-eth-personal/tsconfig.types.json b/packages/web3-eth-personal/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-eth-personal/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-eth-personal/tsdoc.json b/packages/web3-eth-personal/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-eth-personal/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-eth-personal/types/index.d.ts b/packages/web3-eth-personal/types/index.d.ts deleted file mode 100644 index 8d52ff9477d..00000000000 --- a/packages/web3-eth-personal/types/index.d.ts +++ /dev/null @@ -1,95 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Huan Zhang , - * @author Josh Stevens - * @date 2018 - */ - -import * as net from 'net'; -import { provider, RLPEncodedTransaction, TransactionConfig, BatchRequest, Providers, Extension } from 'web3-core'; - -export class Personal { - constructor(); - constructor(provider: provider); - constructor(provider: provider, net: net.Socket); - - readonly givenProvider: any; - static readonly givenProvider: any; - static readonly providers: Providers; - readonly currentProvider: provider; - defaultAccount: string | null; - defaultBlock: string | number; - BatchRequest: new () => BatchRequest; - - setProvider(provider: provider): boolean; - - extend(extension: Extension): any; - - newAccount( - password: string, - callback?: (error: Error, address: string) => void - ): Promise; - - sign( - dataToSign: string, - address: string, - password: string, - callback?: (error: Error, signature: string) => void - ): Promise; - - ecRecover( - dataThatWasSigned: string, - signature: string, - callback?: (error: Error, address: string) => void - ): Promise; - - signTransaction( - transactionConfig: TransactionConfig, - password: string, - callback?: ( - error: Error, - RLPEncodedTransaction: RLPEncodedTransaction - ) => void - ): Promise; - - sendTransaction( - transactionConfig: TransactionConfig, - password: string, - callback?: (error: Error, transactionHash: string) => void - ): Promise; - - unlockAccount( - address: string, - password: string, - unlockDuration: number, - callback?: (error: Error) => void - ): Promise; - - lockAccount( - address: string, - callback?: (error: Error, success: boolean) => void - ): Promise; - - getAccounts( - callback?: (error: Error, accounts: string[]) => void - ): Promise; - - importRawKey( - privateKey: string, - password: string, - callback?: (error: Error, result: string) => void - ): Promise; -} diff --git a/packages/web3-eth-personal/types/tests/personal-tests.ts b/packages/web3-eth-personal/types/tests/personal-tests.ts deleted file mode 100644 index 556e6aa2848..00000000000 --- a/packages/web3-eth-personal/types/tests/personal-tests.ts +++ /dev/null @@ -1,164 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file personal-tests.ts - * @author Huan Zhang - * @author Samuel Furter - * @author Josh Stevens - * @date 2018 - */ - -import { RLPEncodedTransaction } from 'web3-core'; -import { Personal } from 'web3-eth-personal'; - -// $ExpectType Personal -const personal_empty = new Personal(); - -// $ExpectType Personal -const personal = new Personal('http://localhost:7545'); - -// $ExpectType string | null -personal.defaultAccount; - -// $ExpectType string | number -personal.defaultBlock; - -// $ExpectType provider -personal.currentProvider; - -// $ExpectType any -Personal.givenProvider; - -// $ExpectType any -personal.givenProvider; - -// $ExpectType boolean -personal.setProvider('https://localhost:2100'); - -// $ExpectType BatchRequest -new personal.BatchRequest(); - -// $ExpectType any -personal.extend({property: 'test', methods: [{name: 'method', call: 'method'}]}); - -// $ExpectType Promise -personal.newAccount('test password'); -// $ExpectType Promise -personal.newAccount('test password', (error: Error, address: string) => {}); - -// $ExpectType Promise -personal.sign( - 'Hello world', - '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - 'test password!' -); -// $ExpectType Promise -personal.sign( - 'Hello world', - '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - 'test password!', - (error: Error, signature: string) => {} -); - -// $ExpectType Promise -personal.ecRecover('Hello world', '0x30755ed65396facf86c53e6217c52b4daebe72aa'); -// $ExpectType Promise -personal.ecRecover( - 'Hello world', - '0x30755ed65396facf86c53e6217c52b4daebe72aa', - (error: Error, address: string) => {} -); - -// $ExpectType Promise -personal.signTransaction( - { - from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - gasPrice: '20000000000', - gas: '21000', - to: '0x3535353535353535353535353535353535353535', - value: '1000000000000000000', - data: '' - }, - 'test password' -); -// $ExpectType Promise -personal.signTransaction( - { - from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - gasPrice: '20000000000', - gas: '21000', - to: '0x3535353535353535353535353535353535353535', - value: '1000000000000000000', - data: '' - }, - 'test password', - (error: Error, RLPEncodedTransaction: RLPEncodedTransaction) => {} -); - -// $ExpectType Promise -personal.sendTransaction( - { - from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - gasPrice: '20000000000', - gas: '21000', - to: '0x3535353535353535353535353535353535353535', - value: '1000000000000000000', - data: '' - }, - 'test password' -); - -// $ExpectType Promise -personal.sendTransaction( - { - from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - gasPrice: '20000000000', - gas: '21000', - to: '0x3535353535353535353535353535353535353535', - value: '1000000000000000000', - data: '' - }, - 'test password', - (error: Error, transactionHash: string) => {} -); - -// $ExpectType Promise -personal.unlockAccount( - '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - 'test password!', - 600 -); -// $ExpectType Promise -personal.unlockAccount( - '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - 'test password!', - 600, - (error: Error) => {} -); - -// $ExpectType Promise -personal.lockAccount('0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe'); -// $ExpectType Promise -personal.lockAccount( - '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - (error: Error, sucess: boolean) => {} -); - -// $ExpectType Promise -personal.getAccounts(); -// $ExpectType Promise -personal.getAccounts((error: Error, accounts: string[]) => {}); - -// $ExpectType Promise -personal.importRawKey('privateKey', 'blah2'); diff --git a/packages/web3-eth-personal/types/tsconfig.json b/packages/web3-eth-personal/types/tsconfig.json deleted file mode 100644 index 8d56df7eb4f..00000000000 --- a/packages/web3-eth-personal/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-eth-personal": ["."] - } - } -} diff --git a/packages/web3-eth-personal/types/tslint.json b/packages/web3-eth-personal/types/tslint.json deleted file mode 100644 index 871d605704b..00000000000 --- a/packages/web3-eth-personal/types/tslint.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false, - "unified-signatures": false - } -} diff --git a/packages/web3-eth/.eslintignore b/packages/web3-eth/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/packages/web3-eth/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth/.eslintrc.js b/packages/web3-eth/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-eth/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth/.gitignore b/packages/web3-eth/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-eth/.npmignore b/packages/web3-eth/.npmignore new file mode 120000 index 00000000000..8a0be70f3ed --- /dev/null +++ b/packages/web3-eth/.npmignore @@ -0,0 +1 @@ +../../templates/.npmignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth/.prettierignore b/packages/web3-eth/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-eth/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-eth/.prettierrc.json b/packages/web3-eth/.prettierrc.json new file mode 120000 index 00000000000..00ecd510aaf --- /dev/null +++ b/packages/web3-eth/.prettierrc.json @@ -0,0 +1 @@ +../../templates/.prettierrc.json.tmpl \ No newline at end of file diff --git a/packages/web3-eth/CHANGELOG.md b/packages/web3-eth/CHANGELOG.md new file mode 100644 index 00000000000..aac5c9d1097 --- /dev/null +++ b/packages/web3-eth/CHANGELOG.md @@ -0,0 +1,216 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [4.0.1-alpha.1] + +### Added + +- `web3-rpc-methods` dependency (#5441) +- Added chain and hardfork validation for transaction and transaction.common object in `validateTransactionForSigning` + +### Changed + +- `Web3EthExecutionAPI` is now imported via `web3-types` instead of `web3_eth_execution_api.ts` (#5441) +- Replace the imported methods from `rpc_methods.ts` with `ethRpcMethods` imports from `web3-rpc-methods` (#5441) +- `Web3NetAPI` is now imported from `web3-types` instead of `web3-net` (#5441) +- Moved `rpc_methods` tests to `web3-rpc-methods` (#5441) +- Implemented the logic for `transactionBlockTimeout` (#5294) +- Use subscription at `rejectIfBlockTimeout` when the provider supports subscription. Implement this as an experimental feature (if `useSubscriptionWhenCheckingBlockTimeout` at `enableExperimentalFeatures` is `true`). (#5481) +- At some test cases, optimized some codes. (#5481) + +### Removed + +- Moved the errors' classes from `web3-eth/src/errors.ts` to `web3-errors/src/errors/transaction_errors.ts` (#5462) + +### Fixed + +- Fix `getBlock` returning empty transactions object on `hydrated` true (#5556) +- [setimmediate](https://github.com/yuzujs/setImmediate) package to polyfill [setImmediate](https://nodejs.org/api/timers.html#setimmediatecallback-args) for browsers (#5450) + +## [4.0.1-alpha.2] + +### Changed + +- Updated Web3.js dependencies (#5664) + +## [4.0.1-alpha.3] + +### Changed + +- Updated dependencies (#5725) + +## [4.0.1-alpha.4] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +## [4.0.1-alpha.5] + +### Changed + +- web3.js dependencies (#5757) + +### Fixed + +- Enable transaction with local wallet index in the `to` field (#5731) + +## [4.0.1-rc.0] + +### Changed + +- Update imports statements for objects that was moved between web3 packages (#5771) +- `sendTransaction` and `sendSignedTransaction` now errors with (and `error` event emits) the following possible errors: `TransactionRevertedWithoutReasonError`, `TransactionRevertInstructionError`, `TransactionRevertWithCustomError`, `InvalidResponseError`, or `ContractExecutionError` (#5854) + +### Added + +- Added `createAccessList` functionality ( #5780 ) +- Added support of `safe` and `finalized` block tags (#5823) +- `contractAbi` option to `SendTransactionOptions` and `SendSignedTransactionOptions` to added the ability to parse custom solidity errors (#5854) + +### Removed + +- `getRevertReason` is no longer exported (#5844) + +## [4.0.1-rc.1] + +### Added + +- Added hybrid build (ESM and CJS) of library (#5904) +- Added source files (#5956) + +### Changed + +- `signTransaction` will now return `gas` instead of `gasLimit` for returned transaction object regardless of what property name the provider uses (#5915) +- `formatTransaction` will now replace `data` transaction property with `input` (#5915) +- `isTransactionCall` will now check if `value.input` `isHexStrict` if provided (#5915) +- The functions `defaultTransactionBuilder` and `transactionBuilder` are now utilizing the type `Transaction` for the transaction object. (#5993) + +### Removed + +- Removed dependencies @ethereumjs/tx, @ethereumjs/common (#5963) + +## [4.0.1-rc.2] + +### Fixed + +- Fixed `ignoreGasPricing` bug with wallet in context (#6071) + +### Changed + +- `formatTransaction` no longer throws a `TransactionDataAndInputError` if it's passed a transaction object with both `data` and `input` properties set (as long as they are the same value) (#6064) +- Refactored documentation for `rpc_method_wrappers` to point to the previously duplicated documentation found under the `Web3Eth` class documentation (#6054) +- Replaced Buffer for Uint8Array (#6004) +- Refactored `defaultTransactionTypeParser` to return correct EIP-2718 types, prior implementation was prioritizing `transaction.hardfork` and ignoring the use of `transaction.gasLimit`. `defaultTransactionTypeParser` will now throw `InvalidPropertiesForTransactionTypeError`s for properties are used that are incompatible with `transaction.type` (#6102) +- `prepareTransactionForSigning` and `defaultTransactionBuilder` now accepts optional `fillGasPrice` flag and by default will not fill gas(#6071) + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Changed + +- Dependencies updated + +## [4.0.3] + +### Changed + +- Dependencies updated + +## [4.1.0] + +### Fixed + +- sendTransaction will have gas filled by default using method `estimateGas` unless transaction builder `options.fillGas` is false. (#6249) +- Missing `blockHeaderSchema` properties causing some properties to not appear in response of `newHeads` subscription (#6243) +- Missing `blockHeaderSchema` properties causing some properties to not appear in response of `newHeads` subscription (#6243) + +### Changed + +- `MissingGasError` error message changed for clarity (#6215) +- `input` and `data` are no longer auto populated for transaction objects if they are not present. Instead, whichever property is provided by the user is formatted and sent to the RPC provider. Transaction objects returned from RPC responses are still formatted to contain both `input` and `data` properties (#6294) + +### Added + +- A `rpc_method_wrapper` (`signTypedData`) for the rpc calls `eth_signTypedData` and `eth_signTypedData_v4` (#6286) +- A `signTypedData` method to the `Web3Eth` class (#6286) + +## [4.1.1] + +### Fixed + +- Added return type for `formatSubscriptionResult` in class `NewHeadsSubscription` (#6368) + +## [4.2.0] + +### Added + +- Added to `Web3Config` property `contractDataInputFill` allowing users to have the choice using property `data`, `input` or `both` for contract methods to be sent to the RPC provider when creating contracts. (#6377) (#6400) + +## [4.3.0] + +### Changed + +- Transactions will now default to type 2 transactions instead of type 0, similar to 1.x version. (#6282) + +### Fixed + +- Ensure provider.supportsSubscriptions exists before watching by subscription (#6440) +- Fixed param sent to `checkRevertBeforeSending` in `sendSignedTransaction` +- Fixed `defaultTransactionBuilder` for value issue (#6509) + +### Added + +- Added `ALL_EVENTS` and `ALL_EVENTS_ABI` constants, `SendTransactionEventsBase` type, `decodeEventABI` method (#6410) + +## [4.3.1] + +### Changed + +- Dependencies updated + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-eth/README.md b/packages/web3-eth/README.md index c229af4e846..a7d675b599c 100644 --- a/packages/web3-eth/README.md +++ b/packages/web3-eth/README.md @@ -1,38 +1,59 @@ -# web3-eth +

+ web3.js +

-[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +# web3.js - Eth -This is a sub-package of [web3.js][repo]. +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] -This Eth package is used within some [web3.js][repo] packages. +This is a sub-package of [web3.js][repo]. -Please read the [documentation][docs] for more. +`web3-eth` contains modules to interact with the Ethereum blockchain and smart contracts. ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3-eth) or using [Yarn](https://yarnpkg.com/package/web3-eth) + +### Using NPM ```bash npm install web3-eth ``` -## Usage +### Using Yarn -```js -const Web3Eth = require('web3-eth'); - -const eth = new Web3Eth('ws://localhost:8546'); +```bash +yarn add web3-eth ``` -## Types +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts -All the TypeScript typings are placed in the `types` folder. +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3-eth.js -[npm-image]: https://img.shields.io/npm/v/web3-eth.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-eth +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth%2Fpackage.json [npm-url]: https://npmjs.org/package/web3-eth -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-eth -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-eth -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-eth -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-eth +[downloads-image]: https://img.shields.io/npm/dm/web3-eth?label=npm%20downloads diff --git a/packages/web3-eth/assets/logo/web3js.ai b/packages/web3-eth/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-eth/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-eth/assets/logo/web3js.jpg b/packages/web3-eth/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-eth/assets/logo/web3js.jpg differ diff --git a/packages/web3-eth/assets/logo/web3js.svg b/packages/web3-eth/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-eth/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-eth/cypress b/packages/web3-eth/cypress new file mode 120000 index 00000000000..4a671a7beac --- /dev/null +++ b/packages/web3-eth/cypress @@ -0,0 +1 @@ +../../templates/cypress \ No newline at end of file diff --git a/packages/web3-eth/cypress.config.js b/packages/web3-eth/cypress.config.js new file mode 120000 index 00000000000..8cd9ba29af0 --- /dev/null +++ b/packages/web3-eth/cypress.config.js @@ -0,0 +1 @@ +../../templates/cypress.config.js \ No newline at end of file diff --git a/packages/web3-eth/package-lock.json b/packages/web3-eth/package-lock.json deleted file mode 100644 index 846ea5088f3..00000000000 --- a/packages/web3-eth/package-lock.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "web3-eth", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-eth/package.json b/packages/web3-eth/package.json index 60ed3d1108f..4cfb96130fb 100644 --- a/packages/web3-eth/package.json +++ b/packages/web3-eth/package.json @@ -1,35 +1,77 @@ { - "name": "web3-eth", - "version": "1.3.0", - "description": "Web3 module to interact with the Ethereum blockchain and smart contracts.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-eth", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.3.0", - "web3-core-helpers": "1.3.0", - "web3-core-method": "1.3.0", - "web3-core-subscriptions": "1.3.0", - "web3-eth-abi": "1.3.0", - "web3-eth-accounts": "1.3.0", - "web3-eth-contract": "1.3.0", - "web3-eth-ens": "1.3.0", - "web3-eth-iban": "1.3.0", - "web3-eth-personal": "1.3.0", - "web3-net": "1.3.0", - "web3-utils": "1.3.0" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3-eth", + "version": "4.3.1", + "description": "Web3 module to interact with the Ethereum blockchain and smart contracts.", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:e2e:mainnet": "jest --config=./test/e2e/jest.config.js --forceExit", + "test:e2e:sepolia": "jest --config=./test/e2e/jest.config.js --forceExit", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --runInBand --forceExit", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --runInBand --forceExit --coverage=true --coverage-reporters=text", + "test:e2e:electron": "npx cypress run --headless --browser electron", + "test:e2e:chrome": "npx cypress run --headless --browser chrome", + "test:e2e:firefox": "npx cypress run --headless --browser firefox" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4", + "web3-providers-http": "^4.1.0" + }, + "dependencies": { + "setimmediate": "^1.0.5", + "web3-core": "^4.3.0", + "web3-errors": "^1.1.3", + "web3-eth-abi": "^4.1.4", + "web3-eth-accounts": "^4.1.0", + "web3-net": "^4.0.7", + "web3-providers-ws": "^4.0.7", + "web3-rpc-methods": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + } } diff --git a/packages/web3-eth/src/constants.ts b/packages/web3-eth/src/constants.ts new file mode 100644 index 00000000000..13a485719a0 --- /dev/null +++ b/packages/web3-eth/src/constants.ts @@ -0,0 +1,27 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AbiEventFragment, FMT_BYTES, FMT_NUMBER } from 'web3-types'; + +export const ALL_EVENTS = 'ALLEVENTS'; +export const ALL_EVENTS_ABI = { + name: ALL_EVENTS, + signature: '', + type: 'event', + inputs: [], +} as AbiEventFragment & { signature: string }; + +export const NUMBER_DATA_FORMAT = { bytes: FMT_BYTES.HEX, number: FMT_NUMBER.NUMBER } as const; diff --git a/packages/web3-eth/src/getNetworkType.js b/packages/web3-eth/src/getNetworkType.js deleted file mode 100644 index 3be3a2027e6..00000000000 --- a/packages/web3-eth/src/getNetworkType.js +++ /dev/null @@ -1,82 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file getNetworkType.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var _ = require('underscore'); - -var getNetworkType = function (callback) { - var _this = this, - id; - - - return this.net.getId() - .then(function (givenId) { - - id = givenId; - - return _this.getBlock(0); - }) - .then(function (genesis) { - var returnValue = 'private'; - - if (genesis.hash === '0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3' && - id === 1) { - returnValue = 'main'; - } - if (genesis.hash === '0cd786a2425d16f152c658316c423e6ce1181e15c3295826d7c9904cba9ce303' && - id === 2) { - returnValue = 'morden'; - } - if (genesis.hash === '0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d' && - id === 3) { - returnValue = 'ropsten'; - } - if (genesis.hash === '0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177' && - id === 4) { - returnValue = 'rinkeby'; - } - if (genesis.hash === '0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a' && - id === 5) { - returnValue = 'goerli'; - } - if (genesis.hash === '0xa3c565fc15c7478862d50ccd6561e3c06b24cc509bf388941c25ea985ce32cb9' && - id === 42) { - returnValue = 'kovan'; - } - - if (_.isFunction(callback)) { - callback(null, returnValue); - } - - return returnValue; - }) - .catch(function (err) { - if (_.isFunction(callback)) { - callback(err); - } else { - throw err; - } - }); -}; - -module.exports = getNetworkType; diff --git a/packages/web3-eth/src/index.js b/packages/web3-eth/src/index.js deleted file mode 100644 index 469c149eca8..00000000000 --- a/packages/web3-eth/src/index.js +++ /dev/null @@ -1,661 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var _ = require('underscore'); -var core = require('web3-core'); -var helpers = require('web3-core-helpers'); -var Subscriptions = require('web3-core-subscriptions').subscriptions; -var Method = require('web3-core-method'); -var utils = require('web3-utils'); -var Net = require('web3-net'); - -var ENS = require('web3-eth-ens'); -var Personal = require('web3-eth-personal'); -var BaseContract = require('web3-eth-contract'); -var Iban = require('web3-eth-iban'); -var Accounts = require('web3-eth-accounts'); -var abi = require('web3-eth-abi'); - -var getNetworkType = require('./getNetworkType.js'); -var formatter = helpers.formatters; - - -var blockCall = function (args) { - return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber"; -}; - -var transactionFromBlockCall = function (args) { - return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex'; -}; - -var uncleCall = function (args) { - return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex'; -}; - -var getBlockTransactionCountCall = function (args) { - return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber'; -}; - -var uncleCountCall = function (args) { - return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber'; -}; - - -var Eth = function Eth() { - var _this = this; - - // sets _requestmanager - core.packageInit(this, arguments); - - // overwrite package setRequestManager - var setRequestManager = this.setRequestManager; - this.setRequestManager = function (manager) { - setRequestManager(manager); - - _this.net.setRequestManager(manager); - _this.personal.setRequestManager(manager); - _this.accounts.setRequestManager(manager); - _this.Contract._requestManager = _this._requestManager; - _this.Contract.currentProvider = _this._provider; - - return true; - }; - - // overwrite setProvider - var setProvider = this.setProvider; - this.setProvider = function () { - setProvider.apply(_this, arguments); - - _this.setRequestManager(_this._requestManager); - - // Set detectedAddress/lastSyncCheck back to null because the provider could be connected to a different chain now - _this.ens._detectedAddress = null; - _this.ens._lastSyncCheck = null; - }; - - - var handleRevert = false; - var defaultAccount = null; - var defaultBlock = 'latest'; - var transactionBlockTimeout = 50; - var transactionConfirmationBlocks = 24; - var transactionPollingTimeout = 750; - var maxListenersWarningThreshold = 100; - var defaultChain, defaultHardfork, defaultCommon; - - Object.defineProperty(this, 'handleRevert', { - get: function () { - return handleRevert; - }, - set: function (val) { - handleRevert = val; - - // also set on the Contract object - _this.Contract.handleRevert = handleRevert; - - // update handleRevert - methods.forEach(function(method) { - method.handleRevert = handleRevert; - }); - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultCommon', { - get: function () { - return defaultCommon; - }, - set: function (val) { - defaultCommon = val; - - // also set on the Contract object - _this.Contract.defaultCommon = defaultCommon; - - // update defaultBlock - methods.forEach(function(method) { - method.defaultCommon = defaultCommon; - }); - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultHardfork', { - get: function () { - return defaultHardfork; - }, - set: function (val) { - defaultHardfork = val; - - // also set on the Contract object - _this.Contract.defaultHardfork = defaultHardfork; - - // update defaultBlock - methods.forEach(function(method) { - method.defaultHardfork = defaultHardfork; - }); - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultChain', { - get: function () { - return defaultChain; - }, - set: function (val) { - defaultChain = val; - - // also set on the Contract object - _this.Contract.defaultChain = defaultChain; - - // update defaultBlock - methods.forEach(function(method) { - method.defaultChain = defaultChain; - }); - }, - enumerable: true - }); - Object.defineProperty(this, 'transactionPollingTimeout', { - get: function () { - return transactionPollingTimeout; - }, - set: function (val) { - transactionPollingTimeout = val; - - // also set on the Contract object - _this.Contract.transactionPollingTimeout = transactionPollingTimeout; - - // update defaultBlock - methods.forEach(function(method) { - method.transactionPollingTimeout = transactionPollingTimeout; - }); - }, - enumerable: true - }); - Object.defineProperty(this, 'transactionConfirmationBlocks', { - get: function () { - return transactionConfirmationBlocks; - }, - set: function (val) { - transactionConfirmationBlocks = val; - - // also set on the Contract object - _this.Contract.transactionConfirmationBlocks = transactionConfirmationBlocks; - - // update defaultBlock - methods.forEach(function(method) { - method.transactionConfirmationBlocks = transactionConfirmationBlocks; - }); - }, - enumerable: true - }); - Object.defineProperty(this, 'transactionBlockTimeout', { - get: function () { - return transactionBlockTimeout; - }, - set: function (val) { - transactionBlockTimeout = val; - - // also set on the Contract object - _this.Contract.transactionBlockTimeout = transactionBlockTimeout; - - // update defaultBlock - methods.forEach(function(method) { - method.transactionBlockTimeout = transactionBlockTimeout; - }); - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultAccount', { - get: function () { - return defaultAccount; - }, - set: function (val) { - if(val) { - defaultAccount = utils.toChecksumAddress(formatter.inputAddressFormatter(val)); - } - - // also set on the Contract object - _this.Contract.defaultAccount = defaultAccount; - _this.personal.defaultAccount = defaultAccount; - - // update defaultBlock - methods.forEach(function(method) { - method.defaultAccount = defaultAccount; - }); - - return val; - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultBlock', { - get: function () { - return defaultBlock; - }, - set: function (val) { - defaultBlock = val; - // also set on the Contract object - _this.Contract.defaultBlock = defaultBlock; - _this.personal.defaultBlock = defaultBlock; - - // update defaultBlock - methods.forEach(function(method) { - method.defaultBlock = defaultBlock; - }); - - return val; - }, - enumerable: true - }); - Object.defineProperty(this, 'maxListenersWarningThreshold', { - get: function () { - return maxListenersWarningThreshold; - }, - set: function (val) { - if (_this.currentProvider && _this.currentProvider.setMaxListeners){ - maxListenersWarningThreshold = val; - _this.currentProvider.setMaxListeners(val); - } - }, - enumerable: true - }); - - - this.clearSubscriptions = _this._requestManager.clearSubscriptions.bind(_this._requestManager); - - // add net - this.net = new Net(this); - // add chain detection - this.net.getNetworkType = getNetworkType.bind(this); - - // add accounts - this.accounts = new Accounts(this); - - // add personal - this.personal = new Personal(this); - this.personal.defaultAccount = this.defaultAccount; - - // set warnings threshold - this.maxListenersWarningThreshold = maxListenersWarningThreshold; - - // create a proxy Contract type for this instance, as a Contract's provider - // is stored as a class member rather than an instance variable. If we do - // not create this proxy type, changing the provider in one instance of - // web3-eth would subsequently change the provider for _all_ contract - // instances! - var self = this; - var Contract = function Contract() { - BaseContract.apply(this, arguments); - - // when Eth.setProvider is called, call packageInit - // on all contract instances instantiated via this Eth - // instances. This will update the currentProvider for - // the contract instances - var _this = this; - var setProvider = self.setProvider; - self.setProvider = function() { - setProvider.apply(self, arguments); - core.packageInit(_this, [self]); - }; - }; - - Contract.setProvider = function() { - BaseContract.setProvider.apply(this, arguments); - }; - - // make our proxy Contract inherit from web3-eth-contract so that it has all - // the right functionality and so that instanceof and friends work properly - Contract.prototype = Object.create(BaseContract.prototype); - Contract.prototype.constructor = Contract; - - // add contract - this.Contract = Contract; - this.Contract.defaultAccount = this.defaultAccount; - this.Contract.defaultBlock = this.defaultBlock; - this.Contract.transactionBlockTimeout = this.transactionBlockTimeout; - this.Contract.transactionConfirmationBlocks = this.transactionConfirmationBlocks; - this.Contract.transactionPollingTimeout = this.transactionPollingTimeout; - this.Contract.handleRevert = this.handleRevert; - this.Contract._requestManager = this._requestManager; - this.Contract._ethAccounts = this.accounts; - this.Contract.currentProvider = this._requestManager.provider; - - // add IBAN - this.Iban = Iban; - - // add ABI - this.abi = abi; - - // add ENS - this.ens = new ENS(this); - - var methods = [ - new Method({ - name: 'getNodeInfo', - call: 'web3_clientVersion' - }), - new Method({ - name: 'getProtocolVersion', - call: 'eth_protocolVersion', - params: 0 - }), - new Method({ - name: 'getCoinbase', - call: 'eth_coinbase', - params: 0 - }), - new Method({ - name: 'isMining', - call: 'eth_mining', - params: 0 - }), - new Method({ - name: 'getHashrate', - call: 'eth_hashrate', - params: 0, - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'isSyncing', - call: 'eth_syncing', - params: 0, - outputFormatter: formatter.outputSyncingFormatter - }), - new Method({ - name: 'getGasPrice', - call: 'eth_gasPrice', - params: 0, - outputFormatter: formatter.outputBigNumberFormatter - }), - new Method({ - name: 'getAccounts', - call: 'eth_accounts', - params: 0, - outputFormatter: utils.toChecksumAddress - }), - new Method({ - name: 'getBlockNumber', - call: 'eth_blockNumber', - params: 0, - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter], - outputFormatter: formatter.outputBigNumberFormatter - }), - new Method({ - name: 'getStorageAt', - call: 'eth_getStorageAt', - params: 3, - inputFormatter: [formatter.inputAddressFormatter, utils.numberToHex, formatter.inputDefaultBlockNumberFormatter] - }), - new Method({ - name: 'getCode', - call: 'eth_getCode', - params: 2, - inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter] - }), - new Method({ - name: 'getBlock', - call: blockCall, - params: 2, - inputFormatter: [formatter.inputBlockNumberFormatter, function (val) { return !!val; }], - outputFormatter: formatter.outputBlockFormatter - }), - new Method({ - name: 'getUncle', - call: uncleCall, - params: 2, - inputFormatter: [formatter.inputBlockNumberFormatter, utils.numberToHex], - outputFormatter: formatter.outputBlockFormatter, - - }), - new Method({ - name: 'getBlockTransactionCount', - call: getBlockTransactionCountCall, - params: 1, - inputFormatter: [formatter.inputBlockNumberFormatter], - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'getBlockUncleCount', - call: uncleCountCall, - params: 1, - inputFormatter: [formatter.inputBlockNumberFormatter], - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'getTransaction', - call: 'eth_getTransactionByHash', - params: 1, - inputFormatter: [null], - outputFormatter: formatter.outputTransactionFormatter - }), - new Method({ - name: 'getTransactionFromBlock', - call: transactionFromBlockCall, - params: 2, - inputFormatter: [formatter.inputBlockNumberFormatter, utils.numberToHex], - outputFormatter: formatter.outputTransactionFormatter - }), - new Method({ - name: 'getTransactionReceipt', - call: 'eth_getTransactionReceipt', - params: 1, - inputFormatter: [null], - outputFormatter: formatter.outputTransactionReceiptFormatter - }), - new Method({ - name: 'getTransactionCount', - call: 'eth_getTransactionCount', - params: 2, - inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter], - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'sendSignedTransaction', - call: 'eth_sendRawTransaction', - params: 1, - inputFormatter: [null], - abiCoder: abi - }), - new Method({ - name: 'signTransaction', - call: 'eth_signTransaction', - params: 1, - inputFormatter: [formatter.inputTransactionFormatter] - }), - new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatter.inputTransactionFormatter], - abiCoder: abi - }), - new Method({ - name: 'sign', - call: 'eth_sign', - params: 2, - inputFormatter: [formatter.inputSignFormatter, formatter.inputAddressFormatter], - transformPayload: function (payload) { - payload.params.reverse(); - return payload; - } - }), - new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatter.inputCallFormatter, formatter.inputDefaultBlockNumberFormatter], - abiCoder: abi - }), - new Method({ - name: 'estimateGas', - call: 'eth_estimateGas', - params: 1, - inputFormatter: [formatter.inputCallFormatter], - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'submitWork', - call: 'eth_submitWork', - params: 3 - }), - new Method({ - name: 'getWork', - call: 'eth_getWork', - params: 0 - }), - new Method({ - name: 'getPastLogs', - call: 'eth_getLogs', - params: 1, - inputFormatter: [formatter.inputLogFormatter], - outputFormatter: formatter.outputLogFormatter - }), - new Method({ - name: 'getChainId', - call: 'eth_chainId', - params: 0, - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'requestAccounts', - call: 'eth_requestAccounts', - params: 0, - outputFormatter: utils.toChecksumAddress - }), - new Method({ - name: 'getProof', - call: 'eth_getProof', - params: 3, - inputFormatter: [formatter.inputAddressFormatter, formatter.inputStorageKeysFormatter, formatter.inputDefaultBlockNumberFormatter], - outputFormatter: formatter.outputProofFormatter - }), - new Method({ - name: 'getPendingTransactions', - call: 'eth_pendingTransactions', - params: 0, - outputFormatter: formatter.outputTransactionFormatter - }), - - // subscriptions - new Subscriptions({ - name: 'subscribe', - type: 'eth', - subscriptions: { - 'newBlockHeaders': { - // TODO rename on RPC side? - subscriptionName: 'newHeads', // replace subscription with this name - params: 0, - outputFormatter: formatter.outputBlockFormatter - }, - 'pendingTransactions': { - subscriptionName: 'newPendingTransactions', // replace subscription with this name - params: 0 - }, - 'logs': { - params: 1, - inputFormatter: [formatter.inputLogFormatter], - outputFormatter: formatter.outputLogFormatter, - // DUBLICATE, also in web3-eth-contract - subscriptionHandler: function (output) { - if(output.removed) { - this.emit('changed', output); - } else { - this.emit('data', output); - } - - if (_.isFunction(this.callback)) { - this.callback(null, output, this); - } - } - }, - 'syncing': { - params: 0, - outputFormatter: formatter.outputSyncingFormatter, - subscriptionHandler: function (output) { - var _this = this; - - // fire TRUE at start - if(this._isSyncing !== true) { - this._isSyncing = true; - this.emit('changed', _this._isSyncing); - - if (_.isFunction(this.callback)) { - this.callback(null, _this._isSyncing, this); - } - - setTimeout(function () { - _this.emit('data', output); - - if (_.isFunction(_this.callback)) { - _this.callback(null, output, _this); - } - }, 0); - - // fire sync status - } else { - this.emit('data', output); - if (_.isFunction(_this.callback)) { - this.callback(null, output, this); - } - - // wait for some time before fireing the FALSE - clearTimeout(this._isSyncingTimeout); - this._isSyncingTimeout = setTimeout(function () { - if(output.currentBlock > output.highestBlock - 200) { - _this._isSyncing = false; - _this.emit('changed', _this._isSyncing); - - if (_.isFunction(_this.callback)) { - _this.callback(null, _this._isSyncing, _this); - } - } - }, 500); - } - } - } - } - }) - ]; - - methods.forEach(function(method) { - method.attachToObject(_this); - method.setRequestManager(_this._requestManager, _this.accounts); // second param is the eth.accounts module (necessary for signing transactions locally) - method.defaultBlock = _this.defaultBlock; - method.defaultAccount = _this.defaultAccount; - method.transactionBlockTimeout = _this.transactionBlockTimeout; - method.transactionConfirmationBlocks = _this.transactionConfirmationBlocks; - method.transactionPollingTimeout = _this.transactionPollingTimeout; - method.handleRevert = _this.handleRevert; - }); - -}; - -// Adds the static givenProvider and providers property to the Eth module -core.addProviders(Eth); - - -module.exports = Eth; - diff --git a/packages/web3-eth/src/index.ts b/packages/web3-eth/src/index.ts new file mode 100644 index 00000000000..d1f1d326832 --- /dev/null +++ b/packages/web3-eth/src/index.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * The `web3-eth` package allows you to interact with an Ethereum blockchain and Ethereum smart contracts. + * + * To use this package standalone and use its methods use: + * ```ts + * import { Web3Context } from 'web3-core'; + * import { BlockTags } from 'web3-types'; + * import { DEFAULT_RETURN_FORMAT } from 'web3-types'; + * import { getBalance} from 'web3-eth'; + * + * getBalance( + * new Web3Context('http://127.0.0.1:8545'), + * '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + * BlockTags.LATEST, + * DEFAULT_RETURN_FORMAT + * ).then(console.log); + * > 1000000000000n + * ``` + * + * To use this package within the `web3` object use: + * ```ts + * import Web3 from 'web3'; + * + * const web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546'); + * web3.eth.getBalance('0x407d73d8a49eeb85d32cf465507dd71d507100c1').then(console.log); + * > 1000000000000n + *``` + * + * With `web3-eth` you can also subscribe (if supported by provider) to events in the Ethereum Blockchain, using the `subscribe` function. See more at the {@link Web3Eth.subscribe} function. + */ +/** + * + */ +import 'setimmediate'; + +import { Web3Eth } from './web3_eth.js'; + +export * from './web3_eth.js'; +export * from './utils/decoding.js'; +export * from './schemas.js'; +export * from './constants.js'; +export * from './types.js'; +export * from './validation.js'; +export * from './rpc_method_wrappers.js'; +export * from './utils/format_transaction.js'; +export * from './utils/prepare_transaction_for_signing.js'; +export * from './web3_subscriptions.js'; +export { detectTransactionType } from './utils/detect_transaction_type.js'; +export { transactionBuilder } from './utils/transaction_builder.js'; + +export default Web3Eth; diff --git a/packages/web3-eth/src/rpc_method_wrappers.ts b/packages/web3-eth/src/rpc_method_wrappers.ts new file mode 100644 index 00000000000..9a36f2dc405 --- /dev/null +++ b/packages/web3-eth/src/rpc_method_wrappers.ts @@ -0,0 +1,980 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Disabling because returnTypes must be last param to match 1.x params +/* eslint-disable default-param-last */ +import { + ETH_DATA_FORMAT, + FormatType, + DataFormat, + DEFAULT_RETURN_FORMAT, + EthExecutionAPI, + SignedTransactionInfoAPI, + Web3BaseWalletAccount, + Address, + BlockTag, + BlockNumberOrTag, + Bytes, + Filter, + HexString, + Numbers, + HexStringBytes, + AccountObject, + Block, + FeeHistory, + Log, + TransactionReceipt, + Transaction, + TransactionCall, + Web3EthExecutionAPI, + TransactionWithFromLocalWalletIndex, + TransactionWithToLocalWalletIndex, + TransactionWithFromAndToLocalWalletIndex, + TransactionForAccessList, + AccessListResult, + Eip712TypedData, +} from 'web3-types'; +import { Web3Context, Web3PromiEvent } from 'web3-core'; +import { format, hexToBytes, bytesToUint8Array, numberToHex } from 'web3-utils'; +import { TransactionFactory } from 'web3-eth-accounts'; +import { isBlockTag, isBytes, isNullish, isString } from 'web3-validator'; +import { SignatureError } from 'web3-errors'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { decodeSignedTransaction } from './utils/decode_signed_transaction.js'; +import { + accountSchema, + blockSchema, + feeHistorySchema, + logSchema, + transactionReceiptSchema, + accessListResultSchema, + SignatureObjectSchema, +} from './schemas.js'; +import { + SendSignedTransactionEvents, + SendSignedTransactionOptions, + SendTransactionEvents, + SendTransactionOptions, +} from './types.js'; +// eslint-disable-next-line import/no-cycle +import { getTransactionFromOrToAttr } from './utils/transaction_builder.js'; +import { formatTransaction } from './utils/format_transaction.js'; +// eslint-disable-next-line import/no-cycle +import { trySendTransaction } from './utils/try_send_transaction.js'; +// eslint-disable-next-line import/no-cycle +import { waitForTransactionReceipt } from './utils/wait_for_transaction_receipt.js'; +import { NUMBER_DATA_FORMAT } from './constants.js'; +// eslint-disable-next-line import/no-cycle +import { SendTxHelper } from './utils/send_tx_helper.js'; + +/** + * View additional documentations here: {@link Web3Eth.getProtocolVersion} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export const getProtocolVersion = async (web3Context: Web3Context) => + ethRpcMethods.getProtocolVersion(web3Context.requestManager); + +// TODO Add returnFormat parameter +/** + * View additional documentations here: {@link Web3Eth.isSyncing} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export const isSyncing = async (web3Context: Web3Context) => + ethRpcMethods.getSyncing(web3Context.requestManager); + +// TODO consider adding returnFormat parameter (to format address as bytes) +/** + * View additional documentations here: {@link Web3Eth.getCoinbase} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export const getCoinbase = async (web3Context: Web3Context) => + ethRpcMethods.getCoinbase(web3Context.requestManager); + +/** + * View additional documentations here: {@link Web3Eth.isMining} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export const isMining = async (web3Context: Web3Context) => + ethRpcMethods.getMining(web3Context.requestManager); + +/** + * View additional documentations here: {@link Web3Eth.getHashRate} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getHashRate( + web3Context: Web3Context, + returnFormat: ReturnFormat, +) { + const response = await ethRpcMethods.getHashRate(web3Context.requestManager); + + return format({ format: 'uint' }, response as Numbers, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.getGasPrice} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getGasPrice( + web3Context: Web3Context, + returnFormat: ReturnFormat, +) { + const response = await ethRpcMethods.getGasPrice(web3Context.requestManager); + + return format({ format: 'uint' }, response as Numbers, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.getBlockNumber} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getBlockNumber( + web3Context: Web3Context, + returnFormat: ReturnFormat, +) { + const response = await ethRpcMethods.getBlockNumber(web3Context.requestManager); + + return format({ format: 'uint' }, response as Numbers, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.getBalance} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getBalance( + web3Context: Web3Context, + address: Address, + blockNumber: BlockNumberOrTag = web3Context.defaultBlock, + returnFormat: ReturnFormat, +) { + const blockNumberFormatted = isBlockTag(blockNumber as string) + ? (blockNumber as BlockTag) + : format({ format: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); + const response = await ethRpcMethods.getBalance( + web3Context.requestManager, + address, + blockNumberFormatted, + ); + return format({ format: 'uint' }, response as Numbers, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.getStorageAt} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getStorageAt( + web3Context: Web3Context, + address: Address, + storageSlot: Numbers, + blockNumber: BlockNumberOrTag = web3Context.defaultBlock, + returnFormat: ReturnFormat, +) { + const storageSlotFormatted = format({ format: 'uint' }, storageSlot, ETH_DATA_FORMAT); + const blockNumberFormatted = isBlockTag(blockNumber as string) + ? (blockNumber as BlockTag) + : format({ format: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); + const response = await ethRpcMethods.getStorageAt( + web3Context.requestManager, + address, + storageSlotFormatted, + blockNumberFormatted, + ); + return format({ format: 'bytes' }, response as Bytes, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.getCode} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getCode( + web3Context: Web3Context, + address: Address, + blockNumber: BlockNumberOrTag = web3Context.defaultBlock, + returnFormat: ReturnFormat, +) { + const blockNumberFormatted = isBlockTag(blockNumber as string) + ? (blockNumber as BlockTag) + : format({ format: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); + const response = await ethRpcMethods.getCode( + web3Context.requestManager, + address, + blockNumberFormatted, + ); + return format({ format: 'bytes' }, response as Bytes, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.getBlock} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getBlock( + web3Context: Web3Context, + block: Bytes | BlockNumberOrTag = web3Context.defaultBlock, + hydrated = false, + returnFormat: ReturnFormat, +) { + let response; + if (isBytes(block)) { + const blockHashFormatted = format({ format: 'bytes32' }, block, ETH_DATA_FORMAT); + response = await ethRpcMethods.getBlockByHash( + web3Context.requestManager, + blockHashFormatted as HexString, + hydrated, + ); + } else { + const blockNumberFormatted = isBlockTag(block as string) + ? (block as BlockTag) + : format({ format: 'uint' }, block as Numbers, ETH_DATA_FORMAT); + response = await ethRpcMethods.getBlockByNumber( + web3Context.requestManager, + blockNumberFormatted, + hydrated, + ); + } + return format(blockSchema, response as unknown as Block, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.getBlockTransactionCount} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getBlockTransactionCount( + web3Context: Web3Context, + block: Bytes | BlockNumberOrTag = web3Context.defaultBlock, + returnFormat: ReturnFormat, +) { + let response; + if (isBytes(block)) { + const blockHashFormatted = format({ format: 'bytes32' }, block, ETH_DATA_FORMAT); + response = await ethRpcMethods.getBlockTransactionCountByHash( + web3Context.requestManager, + blockHashFormatted as HexString, + ); + } else { + const blockNumberFormatted = isBlockTag(block as string) + ? (block as BlockTag) + : format({ format: 'uint' }, block as Numbers, ETH_DATA_FORMAT); + response = await ethRpcMethods.getBlockTransactionCountByNumber( + web3Context.requestManager, + blockNumberFormatted, + ); + } + + return format({ format: 'uint' }, response as Numbers, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.getBlockUncleCount} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getBlockUncleCount( + web3Context: Web3Context, + block: Bytes | BlockNumberOrTag = web3Context.defaultBlock, + returnFormat: ReturnFormat, +) { + let response; + if (isBytes(block)) { + const blockHashFormatted = format({ format: 'bytes32' }, block, ETH_DATA_FORMAT); + response = await ethRpcMethods.getUncleCountByBlockHash( + web3Context.requestManager, + blockHashFormatted as HexString, + ); + } else { + const blockNumberFormatted = isBlockTag(block as string) + ? (block as BlockTag) + : format({ format: 'uint' }, block as Numbers, ETH_DATA_FORMAT); + response = await ethRpcMethods.getUncleCountByBlockNumber( + web3Context.requestManager, + blockNumberFormatted, + ); + } + + return format({ format: 'uint' }, response as Numbers, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.getUncle} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getUncle( + web3Context: Web3Context, + block: Bytes | BlockNumberOrTag = web3Context.defaultBlock, + uncleIndex: Numbers, + returnFormat: ReturnFormat, +) { + const uncleIndexFormatted = format({ format: 'uint' }, uncleIndex, ETH_DATA_FORMAT); + + let response; + if (isBytes(block)) { + const blockHashFormatted = format({ format: 'bytes32' }, block, ETH_DATA_FORMAT); + response = await ethRpcMethods.getUncleByBlockHashAndIndex( + web3Context.requestManager, + blockHashFormatted as HexString, + uncleIndexFormatted, + ); + } else { + const blockNumberFormatted = isBlockTag(block as string) + ? (block as BlockTag) + : format({ format: 'uint' }, block as Numbers, ETH_DATA_FORMAT); + response = await ethRpcMethods.getUncleByBlockNumberAndIndex( + web3Context.requestManager, + blockNumberFormatted, + uncleIndexFormatted, + ); + } + + return format(blockSchema, response as unknown as Block, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.getTransaction} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getTransaction( + web3Context: Web3Context, + transactionHash: Bytes, + returnFormat: ReturnFormat, +) { + const transactionHashFormatted = format( + { format: 'bytes32' }, + transactionHash, + DEFAULT_RETURN_FORMAT, + ); + const response = await ethRpcMethods.getTransactionByHash( + web3Context.requestManager, + transactionHashFormatted, + ); + + return isNullish(response) + ? response + : formatTransaction(response, returnFormat, { fillInputAndData: true }); +} + +/** + * View additional documentations here: {@link Web3Eth.getPendingTransactions} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getPendingTransactions( + web3Context: Web3Context, + returnFormat: ReturnFormat, +) { + const response = await ethRpcMethods.getPendingTransactions(web3Context.requestManager); + + return response.map(transaction => + formatTransaction(transaction as unknown as Transaction, returnFormat, { + fillInputAndData: true, + }), + ); +} + +/** + * View additional documentations here: {@link Web3Eth.getTransactionFromBlock} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getTransactionFromBlock( + web3Context: Web3Context, + block: Bytes | BlockNumberOrTag = web3Context.defaultBlock, + transactionIndex: Numbers, + returnFormat: ReturnFormat, +) { + const transactionIndexFormatted = format({ format: 'uint' }, transactionIndex, ETH_DATA_FORMAT); + + let response; + if (isBytes(block)) { + const blockHashFormatted = format({ format: 'bytes32' }, block, ETH_DATA_FORMAT); + response = await ethRpcMethods.getTransactionByBlockHashAndIndex( + web3Context.requestManager, + blockHashFormatted as HexString, + transactionIndexFormatted, + ); + } else { + const blockNumberFormatted = isBlockTag(block as string) + ? (block as BlockTag) + : format({ format: 'uint' }, block as Numbers, ETH_DATA_FORMAT); + response = await ethRpcMethods.getTransactionByBlockNumberAndIndex( + web3Context.requestManager, + blockNumberFormatted, + transactionIndexFormatted, + ); + } + + return isNullish(response) + ? response + : formatTransaction(response, returnFormat, { fillInputAndData: true }); +} + +/** + * View additional documentations here: {@link Web3Eth.getTransactionReceipt} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getTransactionReceipt( + web3Context: Web3Context, + transactionHash: Bytes, + returnFormat: ReturnFormat, +) { + const transactionHashFormatted = format( + { format: 'bytes32' }, + transactionHash, + DEFAULT_RETURN_FORMAT, + ); + const response = await ethRpcMethods.getTransactionReceipt( + web3Context.requestManager, + transactionHashFormatted, + ); + + return isNullish(response) + ? response + : (format( + transactionReceiptSchema, + response as unknown as TransactionReceipt, + returnFormat, + ) as TransactionReceipt); +} + +/** + * View additional documentations here: {@link Web3Eth.getTransactionCount} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getTransactionCount( + web3Context: Web3Context, + address: Address, + blockNumber: BlockNumberOrTag = web3Context.defaultBlock, + returnFormat: ReturnFormat, +) { + const blockNumberFormatted = isBlockTag(blockNumber as string) + ? (blockNumber as BlockTag) + : format({ format: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); + const response = await ethRpcMethods.getTransactionCount( + web3Context.requestManager, + address, + blockNumberFormatted, + ); + + return format({ format: 'uint' }, response as Numbers, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.sendTransaction} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export function sendTransaction< + ReturnFormat extends DataFormat, + ResolveType = FormatType, +>( + web3Context: Web3Context, + transaction: + | Transaction + | TransactionWithFromLocalWalletIndex + | TransactionWithToLocalWalletIndex + | TransactionWithFromAndToLocalWalletIndex, + returnFormat: ReturnFormat, + options: SendTransactionOptions = { checkRevertBeforeSending: true }, +): Web3PromiEvent> { + const promiEvent = new Web3PromiEvent>( + (resolve, reject) => { + setImmediate(() => { + (async () => { + const sendTxHelper = new SendTxHelper({ + web3Context, + promiEvent, + options, + returnFormat, + }); + + let transactionFormatted: + | Transaction + | TransactionWithFromLocalWalletIndex + | TransactionWithToLocalWalletIndex + | TransactionWithFromAndToLocalWalletIndex = formatTransaction( + { + ...transaction, + from: getTransactionFromOrToAttr('from', web3Context, transaction), + to: getTransactionFromOrToAttr('to', web3Context, transaction), + }, + ETH_DATA_FORMAT, + ); + + try { + transactionFormatted = await sendTxHelper.populateGasPrice({ + transaction, + transactionFormatted, + }); + + await sendTxHelper.checkRevertBeforeSending( + transactionFormatted as TransactionCall, + ); + + sendTxHelper.emitSending(transactionFormatted); + + let wallet: Web3BaseWalletAccount | undefined; + + if (web3Context.wallet && !isNullish(transactionFormatted.from)) { + wallet = web3Context.wallet.get( + (transactionFormatted as Transaction).from as string, + ); + } + + const transactionHash: HexString = await sendTxHelper.signAndSend({ + wallet, + tx: transactionFormatted, + }); + + const transactionHashFormatted = format( + { format: 'bytes32' }, + transactionHash as Bytes, + returnFormat, + ); + sendTxHelper.emitSent(transactionFormatted); + sendTxHelper.emitTransactionHash( + transactionHashFormatted as string & Uint8Array, + ); + + const transactionReceipt = await waitForTransactionReceipt( + web3Context, + transactionHash, + returnFormat, + ); + + const transactionReceiptFormatted = sendTxHelper.getReceiptWithEvents( + format(transactionReceiptSchema, transactionReceipt, returnFormat), + ); + + sendTxHelper.emitReceipt(transactionReceiptFormatted); + + resolve( + await sendTxHelper.handleResolve({ + receipt: transactionReceiptFormatted, + tx: transactionFormatted as TransactionCall, + }), + ); + + sendTxHelper.emitConfirmation({ + receipt: transactionReceiptFormatted, + transactionHash, + }); + } catch (error) { + reject( + await sendTxHelper.handleError({ + error, + tx: transactionFormatted as TransactionCall, + }), + ); + } + })() as unknown; + }); + }, + ); + + return promiEvent; +} + +/** + * View additional documentations here: {@link Web3Eth.sendSignedTransaction} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export function sendSignedTransaction< + ReturnFormat extends DataFormat, + ResolveType = FormatType, +>( + web3Context: Web3Context, + signedTransaction: Bytes, + returnFormat: ReturnFormat, + options: SendSignedTransactionOptions = { checkRevertBeforeSending: true }, +): Web3PromiEvent> { + // TODO - Promise returned in function argument where a void return was expected + // eslint-disable-next-line @typescript-eslint/no-misused-promises + const promiEvent = new Web3PromiEvent>( + (resolve, reject) => { + setImmediate(() => { + (async () => { + const sendTxHelper = new SendTxHelper({ + web3Context, + promiEvent, + options, + returnFormat, + }); + // Formatting signedTransaction to be send to RPC endpoint + const signedTransactionFormattedHex = format( + { format: 'bytes' }, + signedTransaction, + ETH_DATA_FORMAT, + ); + const unSerializedTransaction = TransactionFactory.fromSerializedData( + bytesToUint8Array(hexToBytes(signedTransactionFormattedHex)), + ); + const unSerializedTransactionWithFrom = { + ...unSerializedTransaction.toJSON(), + // Some providers will default `from` to address(0) causing the error + // reported from `eth_call` to not be the reason the user's tx failed + // e.g. `eth_call` will return an Out of Gas error for a failed + // smart contract execution contract, because the sender, address(0), + // has no balance to pay for the gas of the transaction execution + from: unSerializedTransaction.getSenderAddress().toString(), + }; + + try { + const { v , r , s, + ...txWithoutSigParams} = unSerializedTransactionWithFrom; + + await sendTxHelper.checkRevertBeforeSending( + txWithoutSigParams as TransactionCall, + ); + + sendTxHelper.emitSending(signedTransactionFormattedHex); + + const transactionHash = await trySendTransaction( + web3Context, + async (): Promise => + ethRpcMethods.sendRawTransaction( + web3Context.requestManager, + signedTransactionFormattedHex, + ), + ); + + sendTxHelper.emitSent(signedTransactionFormattedHex); + + const transactionHashFormatted = format( + { format: 'bytes32' }, + transactionHash as Bytes, + returnFormat, + ); + + sendTxHelper.emitTransactionHash( + transactionHashFormatted as string & Uint8Array, + ); + + const transactionReceipt = await waitForTransactionReceipt( + web3Context, + transactionHash, + returnFormat, + ); + + const transactionReceiptFormatted = sendTxHelper.getReceiptWithEvents( + format(transactionReceiptSchema, transactionReceipt, returnFormat), + ); + + sendTxHelper.emitReceipt(transactionReceiptFormatted); + + resolve( + await sendTxHelper.handleResolve({ + receipt: transactionReceiptFormatted, + tx: unSerializedTransactionWithFrom as TransactionCall, + }), + ); + + sendTxHelper.emitConfirmation({ + receipt: transactionReceiptFormatted, + transactionHash, + }); + } catch (error) { + reject( + await sendTxHelper.handleError({ + error, + tx: unSerializedTransactionWithFrom as TransactionCall, + }), + ); + } + })() as unknown; + }); + }, + ); + + return promiEvent; +} + +/** + * View additional documentations here: {@link Web3Eth.sign} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function sign( + web3Context: Web3Context, + message: Bytes, + addressOrIndex: Address | number, + returnFormat: ReturnFormat, +) { + const messageFormatted = format({ format: 'bytes' }, message, DEFAULT_RETURN_FORMAT); + if (web3Context.wallet?.get(addressOrIndex)) { + const wallet = web3Context.wallet.get(addressOrIndex) as Web3BaseWalletAccount; + const signed = wallet.sign(messageFormatted); + return format(SignatureObjectSchema, signed, returnFormat); + } + + if (typeof addressOrIndex === 'number') { + throw new SignatureError( + message, + 'RPC method "eth_sign" does not support index signatures', + ); + } + + const response = await ethRpcMethods.sign( + web3Context.requestManager, + addressOrIndex, + messageFormatted, + ); + + return format({ format: 'bytes' }, response as Bytes, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.signTransaction} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function signTransaction( + web3Context: Web3Context, + transaction: Transaction, + returnFormat: ReturnFormat, +) { + const response = await ethRpcMethods.signTransaction( + web3Context.requestManager, + formatTransaction(transaction, ETH_DATA_FORMAT), + ); + // Some clients only return the encoded signed transaction (e.g. Ganache) + // while clients such as Geth return the desired SignedTransactionInfoAPI object + return isString(response as HexStringBytes) + ? decodeSignedTransaction(response as HexStringBytes, returnFormat, { + fillInputAndData: true, + }) + : { + raw: format( + { format: 'bytes' }, + (response as SignedTransactionInfoAPI).raw, + returnFormat, + ), + tx: formatTransaction((response as SignedTransactionInfoAPI).tx, returnFormat, { + fillInputAndData: true, + }), + }; +} + +// TODO Decide what to do with transaction.to +// https://github.com/ChainSafe/web3.js/pull/4525#issuecomment-982330076 +/** + * View additional documentations here: {@link Web3Eth.call} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function call( + web3Context: Web3Context, + transaction: TransactionCall, + blockNumber: BlockNumberOrTag = web3Context.defaultBlock, + returnFormat: ReturnFormat, +) { + const blockNumberFormatted = isBlockTag(blockNumber as string) + ? (blockNumber as BlockTag) + : format({ format: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); + + const response = await ethRpcMethods.call( + web3Context.requestManager, + formatTransaction(transaction, ETH_DATA_FORMAT), + blockNumberFormatted, + ); + + return format({ format: 'bytes' }, response as Bytes, returnFormat); +} + +// TODO - Investigate whether response is padded as 1.x docs suggest +/** + * View additional documentations here: {@link Web3Eth.estimateGas} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function estimateGas( + web3Context: Web3Context, + transaction: Transaction, + blockNumber: BlockNumberOrTag = web3Context.defaultBlock, + returnFormat: ReturnFormat, +) { + const transactionFormatted = formatTransaction(transaction, ETH_DATA_FORMAT); + const blockNumberFormatted = isBlockTag(blockNumber as string) + ? (blockNumber as BlockTag) + : format({ format: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); + + const response = await ethRpcMethods.estimateGas( + web3Context.requestManager, + transactionFormatted, + blockNumberFormatted, + ); + + return format({ format: 'uint' }, response as Numbers, returnFormat); +} + +// TODO - Add input formatting to filter +/** + * View additional documentations here: {@link Web3Eth.getPastLogs} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getLogs( + web3Context: Web3Context, + filter: Filter, + returnFormat: ReturnFormat, +) { + // format type bigint or number toBlock and fromBlock to hexstring. + let { toBlock, fromBlock } = filter; + if (!isNullish(toBlock)) { + if (typeof toBlock === 'number' || typeof toBlock === 'bigint') { + toBlock = numberToHex(toBlock); + } + } + if (!isNullish(fromBlock)) { + if (typeof fromBlock === 'number' || typeof fromBlock === 'bigint') { + fromBlock = numberToHex(fromBlock); + } + } + + const formattedFilter = { ...filter, fromBlock, toBlock }; + + const response = await ethRpcMethods.getLogs(web3Context.requestManager, formattedFilter); + + const result = response.map(res => { + if (typeof res === 'string') { + return res; + } + + return format(logSchema, res as unknown as Log, returnFormat); + }); + + return result; +} + +/** + * View additional documentations here: {@link Web3Eth.getChainId} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getChainId( + web3Context: Web3Context, + returnFormat: ReturnFormat, +) { + const response = await ethRpcMethods.getChainId(web3Context.requestManager); + + return format( + { format: 'uint' }, + // Response is number in hex formatted string + response as unknown as number, + returnFormat, + ); +} + +/** + * View additional documentations here: {@link Web3Eth.getProof} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getProof( + web3Context: Web3Context, + address: Address, + storageKeys: Bytes[], + blockNumber: BlockNumberOrTag = web3Context.defaultBlock, + returnFormat: ReturnFormat, +) { + const storageKeysFormatted = storageKeys.map(storageKey => + format({ format: 'bytes' }, storageKey, ETH_DATA_FORMAT), + ); + + const blockNumberFormatted = isBlockTag(blockNumber as string) + ? (blockNumber as BlockTag) + : format({ format: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); + + const response = await ethRpcMethods.getProof( + web3Context.requestManager, + address, + storageKeysFormatted, + blockNumberFormatted, + ); + + return format(accountSchema, response as unknown as AccountObject, returnFormat); +} + +// TODO Throwing an error with Geth, but not Infura +// TODO gasUsedRatio and reward not formatting +/** + * View additional documentations here: {@link Web3Eth.getFeeHistory} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function getFeeHistory( + web3Context: Web3Context, + blockCount: Numbers, + newestBlock: BlockNumberOrTag = web3Context.defaultBlock, + rewardPercentiles: Numbers[], + returnFormat: ReturnFormat, +) { + const blockCountFormatted = format({ format: 'uint' }, blockCount, ETH_DATA_FORMAT); + + const newestBlockFormatted = isBlockTag(newestBlock as string) + ? (newestBlock as BlockTag) + : format({ format: 'uint' }, newestBlock as Numbers, ETH_DATA_FORMAT); + + const rewardPercentilesFormatted = format( + { + type: 'array', + items: { + format: 'uint', + }, + }, + rewardPercentiles, + NUMBER_DATA_FORMAT, + ); + + const response = await ethRpcMethods.getFeeHistory( + web3Context.requestManager, + blockCountFormatted, + newestBlockFormatted, + rewardPercentilesFormatted, + ); + + return format(feeHistorySchema, response as unknown as FeeHistory, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.createAccessList} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function createAccessList( + web3Context: Web3Context, + transaction: TransactionForAccessList, + blockNumber: BlockNumberOrTag = web3Context.defaultBlock, + returnFormat: ReturnFormat, +) { + const blockNumberFormatted = isBlockTag(blockNumber as string) + ? (blockNumber as BlockTag) + : format({ format: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); + + const response = (await ethRpcMethods.createAccessList( + web3Context.requestManager, + formatTransaction(transaction, ETH_DATA_FORMAT), + blockNumberFormatted, + )) as unknown as AccessListResult; + + return format(accessListResultSchema, response, returnFormat); +} + +/** + * View additional documentations here: {@link Web3Eth.signTypedData} + * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + */ +export async function signTypedData( + web3Context: Web3Context, + address: Address, + typedData: Eip712TypedData, + useLegacy: boolean, + returnFormat: ReturnFormat, +) { + const response = await ethRpcMethods.signTypedData( + web3Context.requestManager, + address, + typedData, + useLegacy, + ); + + return format({ format: 'bytes' }, response, returnFormat); +} diff --git a/packages/web3-eth/src/schemas.ts b/packages/web3-eth/src/schemas.ts new file mode 100644 index 00000000000..89e23459fac --- /dev/null +++ b/packages/web3-eth/src/schemas.ts @@ -0,0 +1,641 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const accessListItemSchema = { + type: 'object', + properties: { + address: { + format: 'address', + }, + storageKeys: { + type: 'array', + items: { + format: 'bytes32', + }, + }, + }, +}; + +export const accessListSchema = { + type: 'array', + items: { + ...accessListItemSchema, + }, +}; + +export const accessListResultSchema = { + type: 'object', + properties: { + accessList: { + ...accessListSchema, + }, + gasUsed: { + type: 'string', + }, + }, +}; + +export const chainSchema = { + type: 'string', + enum: ['goerli', 'kovan', 'mainnet', 'rinkeby', 'ropsten', 'sepolia'], +}; + +export const hardforkSchema = { + type: 'string', + enum: [ + 'arrowGlacier', + 'berlin', + 'byzantium', + 'chainstart', + 'constantinople', + 'dao', + 'homestead', + 'istanbul', + 'london', + 'merge', + 'muirGlacier', + 'petersburg', + 'shanghai', + 'spuriousDragon', + 'tangerineWhistle', + ], +}; + +export const customChainSchema = { + type: 'object', + properties: { + name: { + format: 'string', + }, + networkId: { + format: 'uint', + }, + chainId: { + format: 'uint', + }, + }, +}; + +export const transactionSchema = { + type: 'object', + properties: { + from: { + format: 'address', + }, + to: { + oneOf: [{ format: 'address' }, { type: 'null' }], + }, + value: { + format: 'uint', + }, + gas: { + format: 'uint', + }, + gasPrice: { + format: 'uint', + }, + effectiveGasPrice: { + format: 'uint', + }, + type: { + format: 'uint', + }, + maxFeePerGas: { + format: 'uint', + }, + maxPriorityFeePerGas: { + format: 'uint', + }, + accessList: { + ...accessListSchema, + }, + data: { + format: 'bytes', + }, + input: { + format: 'bytes', + }, + nonce: { + format: 'uint', + }, + chain: { ...chainSchema }, + hardfork: { ...hardforkSchema }, + chainId: { + format: 'uint', + }, + networkId: { + format: 'uint', + }, + common: { + type: 'object', + properties: { + customChain: { ...customChainSchema }, + baseChain: { + ...chainSchema, + }, + hardfork: { + ...hardforkSchema, + }, + }, + }, + gasLimit: { + format: 'uint', + }, + v: { + format: 'uint', + }, + r: { + format: 'bytes32', + }, + s: { + format: 'bytes32', + }, + }, +}; + +export const transactionInfoSchema = { + type: 'object', + properties: { + ...transactionSchema.properties, + blockHash: { + format: 'bytes32', + }, + blockNumber: { + format: 'uint', + }, + hash: { + format: 'bytes32', + }, + transactionIndex: { + format: 'uint', + }, + from: { + format: 'address', + }, + to: { + oneOf: [{ format: 'address' }, { type: 'null' }], + }, + value: { + format: 'uint', + }, + gas: { + format: 'uint', + }, + gasPrice: { + format: 'uint', + }, + effectiveGasPrice: { + format: 'uint', + }, + type: { + format: 'uint', + }, + maxFeePerGas: { + format: 'uint', + }, + maxPriorityFeePerGas: { + format: 'uint', + }, + accessList: { + ...accessListSchema, + }, + data: { + format: 'bytes', + }, + input: { + format: 'bytes', + }, + nonce: { + format: 'uint', + }, + gasLimit: { + format: 'uint', + }, + v: { + format: 'uint', + }, + r: { + format: 'bytes32', + }, + s: { + format: 'bytes32', + }, + }, +}; + +export const blockSchema = { + type: 'object', + properties: { + parentHash: { + format: 'bytes32', + }, + sha3Uncles: { + format: 'bytes32', + }, + miner: { + format: 'bytes', + }, + stateRoot: { + format: 'bytes32', + }, + transactionsRoot: { + format: 'bytes32', + }, + receiptsRoot: { + format: 'bytes32', + }, + logsBloom: { + format: 'bytes256', + }, + difficulty: { + format: 'uint', + }, + number: { + format: 'uint', + }, + gasLimit: { + format: 'uint', + }, + gasUsed: { + format: 'uint', + }, + timestamp: { + format: 'uint', + }, + extraData: { + format: 'bytes', + }, + mixHash: { + format: 'bytes32', + }, + nonce: { + format: 'uint', + }, + totalDifficulty: { + format: 'uint', + }, + baseFeePerGas: { + format: 'uint', + }, + size: { + format: 'uint', + }, + transactions: { + oneOf: [ + { + type: 'array', + items: { + ...transactionInfoSchema, + }, + }, + { + type: 'array', + items: { + format: 'bytes32', + }, + }, + ], + }, + uncles: { + type: 'array', + items: { + format: 'bytes32', + }, + }, + hash: { + format: 'bytes32', + }, + }, +}; + +export const withdrawalsSchema = { + type: 'object', + properties: { + index: { + format: 'uint', + }, + validatorIndex: { + format: 'uint', + }, + address: { + format: 'address', + }, + amount: { + format: 'uint', + }, + }, +}; + +export const blockHeaderSchema = { + type: 'object', + properties: { + author: { + format: 'bytes32', + }, + hash: { + format: 'bytes32', + }, + parentHash: { + format: 'bytes32', + }, + receiptsRoot: { + format: 'bytes32', + }, + miner: { + format: 'bytes', + }, + stateRoot: { + format: 'bytes32', + }, + transactionsRoot: { + format: 'bytes32', + }, + withdrawalsRoot: { + format: 'bytes32', + }, + logsBloom: { + format: 'bytes256', + }, + difficulty: { + format: 'uint', + }, + totalDifficulty: { + format: 'uint', + }, + number: { + format: 'uint', + }, + gasLimit: { + format: 'uint', + }, + gasUsed: { + format: 'uint', + }, + timestamp: { + format: 'uint', + }, + extraData: { + format: 'bytes', + }, + nonce: { + format: 'uint', + }, + sha3Uncles: { + format: 'bytes32', + }, + size: { + format: 'uint', + }, + baseFeePerGas: { + format: 'uint', + }, + excessDataGas: { + format: 'uint', + }, + mixHash: { + format: 'bytes32', + }, + transactions: { + type: 'array', + items: { + format: 'bytes32', + }, + }, + uncles: { + type: 'array', + items: { + format: 'bytes32', + }, + }, + withdrawals: { + type: 'array', + items: { + ...withdrawalsSchema, + }, + }, + }, +}; + +export const logSchema = { + type: 'object', + properties: { + removed: { + format: 'bool', + }, + logIndex: { + format: 'uint', + }, + transactionIndex: { + format: 'uint', + }, + transactionHash: { + format: 'bytes32', + }, + blockHash: { + format: 'bytes32', + }, + blockNumber: { + format: 'uint', + }, + address: { + format: 'address', + }, + data: { + format: 'bytes', + }, + topics: { + type: 'array', + items: { + format: 'bytes32', + }, + }, + }, +}; +export const syncSchema = { + type: 'object', + properties: { + startingBlock: { + format: 'string', + }, + currentBlock: { + format: 'string', + }, + highestBlock: { + format: 'string', + }, + knownStates: { + format: 'string', + }, + pulledStates: { + format: 'string', + }, + }, +}; + +export const transactionReceiptSchema = { + type: 'object', + properties: { + transactionHash: { + format: 'bytes32', + }, + transactionIndex: { + format: 'uint', + }, + blockHash: { + format: 'bytes32', + }, + blockNumber: { + format: 'uint', + }, + from: { + format: 'address', + }, + to: { + format: 'address', + }, + cumulativeGasUsed: { + format: 'uint', + }, + gasUsed: { + format: 'uint', + }, + effectiveGasPrice: { + format: 'uint', + }, + contractAddress: { + format: 'address', + }, + logs: { + type: 'array', + items: { + ...logSchema, + }, + }, + logsBloom: { + format: 'bytes', + }, + root: { + format: 'bytes', + }, + status: { + format: 'uint', + }, + type: { + format: 'uint', + }, + }, +}; + +export const SignatureObjectSchema = { + type: 'object', + properties: { + messageHash: { + format: 'bytes', + }, + r: { + format: 'bytes32', + }, + s: { + format: 'bytes32', + }, + v: { + format: 'bytes', + }, + message: { + format: 'bytes', + }, + signature: { + format: 'bytes', + }, + }, +}; +export const feeHistorySchema = { + type: 'object', + properties: { + oldestBlock: { + format: 'uint', + }, + baseFeePerGas: { + type: 'array', + items: { + format: 'uint', + }, + }, + reward: { + type: 'array', + items: { + type: 'array', + items: { + format: 'uint', + }, + }, + }, + gasUsedRatio: { + type: 'array', + items: { + type: 'number', + }, + }, + }, +}; + +export const storageProofSchema = { + type: 'object', + properties: { + key: { + format: 'bytes32', + }, + value: { + format: 'uint', + }, + proof: { + type: 'array', + items: { + format: 'bytes32', + }, + }, + }, +}; + +export const accountSchema = { + type: 'object', + properties: { + balance: { + format: 'uint', + }, + codeHash: { + format: 'bytes32', + }, + nonce: { + format: 'uint', + }, + storageHash: { + format: 'bytes32', + }, + accountProof: { + type: 'array', + items: { + format: 'bytes32', + }, + }, + storageProof: { + type: 'array', + items: { + ...storageProofSchema, + }, + }, + }, +}; diff --git a/packages/web3-eth/src/types.ts b/packages/web3-eth/src/types.ts new file mode 100644 index 00000000000..ae97084ea72 --- /dev/null +++ b/packages/web3-eth/src/types.ts @@ -0,0 +1,88 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + ContractExecutionError, + TransactionRevertedWithoutReasonError, + TransactionRevertInstructionError, + TransactionRevertWithCustomError, + InvalidResponseError, +} from 'web3-errors'; +import { + FormatType, + ETH_DATA_FORMAT, + DataFormat, + Bytes, + ContractAbi, + HexString, + Numbers, + Transaction, + TransactionReceipt, +} from 'web3-types'; + +export type InternalTransaction = FormatType; + +export type SendTransactionEventsBase = { + sending: FormatType; + sent: FormatType; + transactionHash: FormatType; + receipt: FormatType; + confirmation: { + confirmations: FormatType; + receipt: FormatType; + latestBlockHash: FormatType; + }; + error: + | TransactionRevertedWithoutReasonError> + | TransactionRevertInstructionError> + | TransactionRevertWithCustomError> + | InvalidResponseError + | ContractExecutionError; +}; + +export type SendTransactionEvents = SendTransactionEventsBase< + ReturnFormat, + Transaction +>; +export type SendSignedTransactionEvents = + SendTransactionEventsBase; + +export interface SendTransactionOptions { + ignoreGasPricing?: boolean; + transactionResolver?: (receipt: TransactionReceipt) => ResolveType; + contractAbi?: ContractAbi; + checkRevertBeforeSending?: boolean; + ignoreFillingGasLimit?: boolean; +} + +export interface SendSignedTransactionOptions { + transactionResolver?: (receipt: TransactionReceipt) => ResolveType; + contractAbi?: ContractAbi; + checkRevertBeforeSending?: boolean; +} + +export interface RevertReason { + reason: string; + signature?: HexString; + data?: HexString; +} + +export interface RevertReasonWithCustomError extends RevertReason { + customErrorName: string; + customErrorDecodedSignature: string; + customErrorArguments: Record; +} diff --git a/packages/web3-eth/src/utils/decode_signed_transaction.ts b/packages/web3-eth/src/utils/decode_signed_transaction.ts new file mode 100644 index 00000000000..943ea188e2c --- /dev/null +++ b/packages/web3-eth/src/utils/decode_signed_transaction.ts @@ -0,0 +1,54 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + DataFormat, + HexStringBytes, + SignedTransactionInfoAPI, + TransactionSignedAPI, +} from 'web3-types'; +import { bytesToHex, format, hexToBytes, keccak256 } from 'web3-utils'; +import { TransactionFactory } from 'web3-eth-accounts'; +import { detectRawTransactionType } from './detect_transaction_type.js'; +import { formatTransaction } from './format_transaction.js'; + +/** + * Decodes an [RLP](https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/#top) encoded transaction. + * + * @param encodedSignedTransaction The RLP encoded transaction. + * @param returnFormat ({@link DataFormat} Specifies how the return data should be formatted. + * @returns {@link SignedTransactionInfoAPI}, an object containing the RLP encoded signed transaction (accessed via the `raw` property) and the signed transaction object (accessed via the `tx` property). + */ +export function decodeSignedTransaction( + encodedSignedTransaction: HexStringBytes, + returnFormat: ReturnFormat, + options: { fillInputAndData?: boolean } = { fillInputAndData: false }, +): SignedTransactionInfoAPI { + return { + raw: format({ format: 'bytes' }, encodedSignedTransaction, returnFormat), + tx: formatTransaction( + { + ...TransactionFactory.fromSerializedData( + hexToBytes(encodedSignedTransaction), + ).toJSON(), + hash: bytesToHex(keccak256(hexToBytes(encodedSignedTransaction))), + type: detectRawTransactionType(hexToBytes(encodedSignedTransaction)), + } as TransactionSignedAPI, + returnFormat, + { fillInputAndData: options.fillInputAndData }, + ), + }; +} diff --git a/packages/web3-eth/src/utils/decoding.ts b/packages/web3-eth/src/utils/decoding.ts new file mode 100644 index 00000000000..f4b61c0a5ac --- /dev/null +++ b/packages/web3-eth/src/utils/decoding.ts @@ -0,0 +1,95 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { format } from 'web3-utils'; + +import { + AbiEventFragment, + LogsInput, + DataFormat, + DEFAULT_RETURN_FORMAT, + EventLog, + ContractAbiWithSignature, +} from 'web3-types'; + +import { decodeLog } from 'web3-eth-abi'; + +import { logSchema } from '../schemas.js'; +import { ALL_EVENTS } from '../constants.js'; + +export const decodeEventABI = ( + event: AbiEventFragment & { signature: string }, + data: LogsInput, + jsonInterface: ContractAbiWithSignature, + returnFormat: DataFormat = DEFAULT_RETURN_FORMAT, +): EventLog => { + let modifiedEvent = { ...event }; + + const result = format(logSchema, data, returnFormat); + + // if allEvents get the right event + if ([ALL_EVENTS, 'allEvents'].includes(modifiedEvent.name)) { + const matchedEvent = jsonInterface.find(j => j.signature === data.topics[0]); + if (matchedEvent) { + modifiedEvent = matchedEvent as AbiEventFragment & { signature: string }; + } else { + modifiedEvent = { anonymous: true } as unknown as AbiEventFragment & { + signature: string; + }; + } + } + + // create empty inputs if none are present (e.g. anonymous events on allEvents) + modifiedEvent.inputs = modifiedEvent.inputs ?? event.inputs ?? []; + + // Handle case where an event signature shadows the current ABI with non-identical + // arg indexing. If # of topics doesn't match, event is anon. + if (!modifiedEvent.anonymous) { + let indexedInputs = 0; + (modifiedEvent.inputs ?? []).forEach(input => { + if (input.indexed) { + indexedInputs += 1; + } + }); + + if (indexedInputs > 0 && data?.topics && data?.topics.length !== indexedInputs + 1) { + // checks if event is anonymous + modifiedEvent = { + ...modifiedEvent, + anonymous: true, + inputs: [], + }; + } + } + + const argTopics = modifiedEvent.anonymous ? data.topics : (data.topics ?? []).slice(1); + + return { + ...result, + returnValues: decodeLog([...(modifiedEvent.inputs ?? [])], data.data, argTopics), + event: modifiedEvent.name, + signature: + modifiedEvent.anonymous || !data.topics || data.topics.length === 0 || !data.topics[0] + ? undefined + : data.topics[0], + + raw: { + data: data.data, + topics: data.topics, + }, + }; +}; diff --git a/packages/web3-eth/src/utils/detect_transaction_type.ts b/packages/web3-eth/src/utils/detect_transaction_type.ts new file mode 100644 index 00000000000..ec5539b375a --- /dev/null +++ b/packages/web3-eth/src/utils/detect_transaction_type.ts @@ -0,0 +1,146 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { format, toHex } from 'web3-utils'; +import { TransactionTypeParser, Web3Context } from 'web3-core'; +import { EthExecutionAPI, HardforksOrdered, Transaction, ETH_DATA_FORMAT } from 'web3-types'; +import { Web3ValidatorError, isNullish, validator } from 'web3-validator'; +import { InvalidPropertiesForTransactionTypeError } from 'web3-errors'; + +import { InternalTransaction } from '../types.js'; + +// undefined is treated as null for JSON schema validator +const transactionType0x0Schema = { + type: 'object', + properties: { + accessList: { + type: 'null', + }, + maxFeePerGas: { + type: 'null', + }, + maxPriorityFeePerGas: { + type: 'null', + }, + }, +}; +const transactionType0x1Schema = { + type: 'object', + properties: { + maxFeePerGas: { + type: 'null', + }, + maxPriorityFeePerGas: { + type: 'null', + }, + }, +}; +const transactionType0x2Schema = { + type: 'object', + properties: { + gasPrice: { + type: 'null', + }, + }, +}; + +const validateTxTypeAndHandleErrors = ( + txSchema: object, + tx: Transaction, + txType: '0x0' | '0x1' | '0x2', +) => { + try { + validator.validateJSONSchema(txSchema, tx); + } catch (error) { + if (error instanceof Web3ValidatorError) + // Erroneously reported error + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + throw new InvalidPropertiesForTransactionTypeError(error.errors, txType); + + throw error; + } +}; + +export const defaultTransactionTypeParser: TransactionTypeParser = ( + transaction +) => { + const tx = transaction as unknown as Transaction; + if (!isNullish(tx.type)) { + let txSchema; + switch (tx.type) { + case '0x0': + txSchema = transactionType0x0Schema; + break; + case '0x1': + txSchema = transactionType0x1Schema; + break; + case '0x2': + txSchema = transactionType0x2Schema; + break; + + default: + return format({ format: 'uint' }, tx.type, ETH_DATA_FORMAT); + } + + validateTxTypeAndHandleErrors(txSchema, tx, tx.type); + + return format({ format: 'uint' }, tx.type, ETH_DATA_FORMAT); + } + + if (!isNullish(tx.maxFeePerGas) || !isNullish(tx.maxPriorityFeePerGas)) { + validateTxTypeAndHandleErrors(transactionType0x2Schema, tx, '0x2'); + return '0x2'; + } + + if (!isNullish(tx.accessList)) { + validateTxTypeAndHandleErrors(transactionType0x1Schema, tx, '0x1'); + return '0x1'; + } + + const givenHardfork = tx.hardfork ?? tx.common?.hardfork; + + if (!isNullish(givenHardfork)) { + const hardforkIndex = Object.keys(HardforksOrdered).indexOf(givenHardfork); + + // givenHardfork is London or later, so EIP-2718 is supported + if (hardforkIndex >= Object.keys(HardforksOrdered).indexOf('london')) + return !isNullish(tx.gasPrice) ? '0x0' : '0x2'; + + // givenHardfork is Berlin, tx.accessList is undefined, assume type is 0x0 + if (hardforkIndex === Object.keys(HardforksOrdered).indexOf('berlin')) return '0x0'; + } + + // gasprice is defined + if (!isNullish(tx.gasPrice)) { + validateTxTypeAndHandleErrors(transactionType0x0Schema, tx, '0x0'); + return '0x0'; + } + + // no transaction type can be inferred from properties, use default transaction type + return undefined; +}; + +export const detectTransactionType = ( + transaction: InternalTransaction, + web3Context?: Web3Context, +) => + (web3Context?.transactionTypeParser ?? defaultTransactionTypeParser)( + transaction as unknown as Record + ); + +export const detectRawTransactionType = (transaction: Uint8Array) => + transaction[0] > 0x7f ? '0x0' : toHex(transaction[0]); diff --git a/packages/web3-eth/src/utils/format_transaction.ts b/packages/web3-eth/src/utils/format_transaction.ts new file mode 100644 index 00000000000..5333254db60 --- /dev/null +++ b/packages/web3-eth/src/utils/format_transaction.ts @@ -0,0 +1,76 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Transaction, DataFormat, DEFAULT_RETURN_FORMAT, FormatType } from 'web3-types'; +import { isNullish, ValidationSchemaInput } from 'web3-validator'; +import { mergeDeep, format, bytesToHex, toHex } from 'web3-utils'; +import { TransactionDataAndInputError } from 'web3-errors'; + +import { transactionInfoSchema, transactionSchema } from '../schemas.js'; + +export function formatTransaction< + ReturnFormat extends DataFormat = typeof DEFAULT_RETURN_FORMAT, + TransactionType extends Transaction = Transaction, +>( + transaction: TransactionType, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + options: { + transactionSchema?: ValidationSchemaInput | typeof transactionSchema; + fillInputAndData?: boolean; + } = { + transactionSchema: transactionInfoSchema, + fillInputAndData: false, + }, +): FormatType { + let formattedTransaction = mergeDeep({}, transaction as Record) as Transaction; + if (!isNullish(transaction?.common)) { + formattedTransaction.common = { ...transaction.common }; + if (!isNullish(transaction.common?.customChain)) + formattedTransaction.common.customChain = { ...transaction.common.customChain }; + } + formattedTransaction = format( + options.transactionSchema ?? transactionInfoSchema, + formattedTransaction, + returnFormat, + ); + if ( + !isNullish(formattedTransaction.data) && + !isNullish(formattedTransaction.input) && + // Converting toHex is accounting for data and input being Uint8Arrays + // since comparing Uint8Array is not as straightforward as comparing strings + toHex(formattedTransaction.data) !== toHex(formattedTransaction.input) + ) + throw new TransactionDataAndInputError({ + data: bytesToHex(formattedTransaction.data), + input: bytesToHex(formattedTransaction.input), + }); + + if (options.fillInputAndData) { + if (!isNullish(formattedTransaction.data)) { + formattedTransaction.input = formattedTransaction.data; + } else if (!isNullish(formattedTransaction.input)) { + formattedTransaction.data = formattedTransaction.input; + } + } + + if (!isNullish(formattedTransaction.gasLimit)) { + formattedTransaction.gas = formattedTransaction.gasLimit; + delete formattedTransaction.gasLimit; + } + + return formattedTransaction as FormatType; +} diff --git a/packages/web3-eth/src/utils/get_revert_reason.ts b/packages/web3-eth/src/utils/get_revert_reason.ts new file mode 100644 index 00000000000..4b4b7d596a9 --- /dev/null +++ b/packages/web3-eth/src/utils/get_revert_reason.ts @@ -0,0 +1,94 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Context } from 'web3-core'; +import { ContractExecutionError, Eip838ExecutionError, InvalidResponseError } from 'web3-errors'; +import { decodeContractErrorData, isAbiErrorFragment } from 'web3-eth-abi'; +import { + AbiErrorFragment, + ContractAbi, + DataFormat, + DEFAULT_RETURN_FORMAT, + EthExecutionAPI, + TransactionCall, +} from 'web3-types'; + +// eslint-disable-next-line import/no-cycle +import { call } from '../rpc_method_wrappers.js'; +import { RevertReason, RevertReasonWithCustomError } from '../types.js'; + +export const parseTransactionError = (error: unknown, contractAbi?: ContractAbi) => { + if ( + error instanceof ContractExecutionError && + error.innerError instanceof Eip838ExecutionError + ) { + if (contractAbi !== undefined) { + const errorsAbi = contractAbi.filter(abi => + isAbiErrorFragment(abi), + ) as unknown as AbiErrorFragment[]; + decodeContractErrorData(errorsAbi, error.innerError); + + return { + reason: error.innerError.message, + signature: error.innerError.data?.slice(0, 10), + data: error.innerError.data?.substring(10), + customErrorName: error.innerError.errorName, + customErrorDecodedSignature: error.innerError.errorSignature, + customErrorArguments: error.innerError.errorArgs, + } as RevertReasonWithCustomError; + } + + return { + reason: error.innerError.message, + signature: error.innerError.data?.slice(0, 10), + data: error.innerError.data?.substring(10), + } as RevertReason; + } + + if ( + error instanceof InvalidResponseError && + !Array.isArray(error.innerError) && + error.innerError !== undefined + ) { + return error.innerError.message; + } + + throw error; +}; + +/** + * Returns the revert reason generated by the EVM if the transaction were to be executed. + * + * @param web3Context - ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. + * @param transaction - A transaction object where all properties are optional except `to`, however it's recommended to include the `from` property or it may default to `0x0000000000000000000000000000000000000000` depending on your node or provider. + * @returns `undefined` if no revert reason was given, a revert reason object, a revert reason string, or an `unknown` error + */ +export async function getRevertReason< + ReturnFormat extends DataFormat = typeof DEFAULT_RETURN_FORMAT, +>( + web3Context: Web3Context, + transaction: TransactionCall, + contractAbi?: ContractAbi, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, +): Promise { + try { + await call(web3Context, transaction, web3Context.defaultBlock, returnFormat); + return undefined; + } catch (error) { + return parseTransactionError(error, contractAbi); + } +} diff --git a/packages/web3-eth/src/utils/get_transaction_error.ts b/packages/web3-eth/src/utils/get_transaction_error.ts new file mode 100644 index 00000000000..4cb0f520937 --- /dev/null +++ b/packages/web3-eth/src/utils/get_transaction_error.ts @@ -0,0 +1,93 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Context } from 'web3-core'; +import { + TransactionRevertedWithoutReasonError, + TransactionRevertInstructionError, + TransactionRevertWithCustomError, +} from 'web3-errors'; +import { + DataFormat, + FormatType, + ContractAbi, + TransactionCall, + TransactionReceipt, +} from 'web3-types'; +import { RevertReason, RevertReasonWithCustomError } from '../types.js'; +// eslint-disable-next-line import/no-cycle +import { getRevertReason, parseTransactionError } from './get_revert_reason.js'; + +export async function getTransactionError( + web3Context: Web3Context, + transactionFormatted?: TransactionCall, + transactionReceiptFormatted?: FormatType, + receivedError?: unknown, + contractAbi?: ContractAbi, + knownReason?: string | RevertReason | RevertReasonWithCustomError, +) { + let _reason: string | RevertReason | RevertReasonWithCustomError | undefined = knownReason; + + if (_reason === undefined) { + if (receivedError !== undefined) { + _reason = parseTransactionError(receivedError); + } else if (web3Context.handleRevert && transactionFormatted !== undefined) { + _reason = await getRevertReason(web3Context, transactionFormatted, contractAbi); + } + } + + let error: + | TransactionRevertedWithoutReasonError> + | TransactionRevertInstructionError> + | TransactionRevertWithCustomError>; + if (_reason === undefined) { + error = new TransactionRevertedWithoutReasonError< + FormatType + >(transactionReceiptFormatted); + } else if (typeof _reason === 'string') { + error = new TransactionRevertInstructionError>( + _reason, + undefined, + transactionReceiptFormatted, + ); + } else if ( + (_reason as RevertReasonWithCustomError).customErrorName !== undefined && + (_reason as RevertReasonWithCustomError).customErrorDecodedSignature !== undefined && + (_reason as RevertReasonWithCustomError).customErrorArguments !== undefined + ) { + const reasonWithCustomError: RevertReasonWithCustomError = + _reason as RevertReasonWithCustomError; + error = new TransactionRevertWithCustomError>( + reasonWithCustomError.reason, + reasonWithCustomError.customErrorName, + reasonWithCustomError.customErrorDecodedSignature, + reasonWithCustomError.customErrorArguments, + reasonWithCustomError.signature, + transactionReceiptFormatted, + reasonWithCustomError.data, + ); + } else { + error = new TransactionRevertInstructionError>( + _reason.reason, + _reason.signature, + transactionReceiptFormatted, + _reason.data, + ); + } + + return error; +} diff --git a/packages/web3-eth/src/utils/get_transaction_gas_pricing.ts b/packages/web3-eth/src/utils/get_transaction_gas_pricing.ts new file mode 100644 index 00000000000..e5bbcdedfd4 --- /dev/null +++ b/packages/web3-eth/src/utils/get_transaction_gas_pricing.ts @@ -0,0 +1,114 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Context } from 'web3-core'; +import { + EthExecutionAPI, + Numbers, + Transaction, + DataFormat, + FormatType, + ETH_DATA_FORMAT, +} from 'web3-types'; +import { isNullish } from 'web3-validator'; +import { Eip1559NotSupportedError, UnsupportedTransactionTypeError } from 'web3-errors'; +import { format } from 'web3-utils'; +// eslint-disable-next-line import/no-cycle +import { getBlock, getGasPrice } from '../rpc_method_wrappers.js'; +import { InternalTransaction } from '../types.js'; +// eslint-disable-next-line import/no-cycle +import { getTransactionType } from './transaction_builder.js'; + +async function getEip1559GasPricing( + transaction: FormatType, + web3Context: Web3Context, + returnFormat: ReturnFormat, +): Promise> { + const block = await getBlock(web3Context, web3Context.defaultBlock, false, returnFormat); + + if (isNullish(block.baseFeePerGas)) throw new Eip1559NotSupportedError(); + + if (!isNullish(transaction.gasPrice)) { + const convertedTransactionGasPrice = format( + { format: 'uint' }, + transaction.gasPrice as Numbers, + returnFormat, + ); + + return { + maxPriorityFeePerGas: convertedTransactionGasPrice, + maxFeePerGas: convertedTransactionGasPrice, + }; + } + return { + maxPriorityFeePerGas: format( + { format: 'uint' }, + transaction.maxPriorityFeePerGas ?? web3Context.defaultMaxPriorityFeePerGas, + returnFormat, + ), + maxFeePerGas: format( + { format: 'uint' }, + (transaction.maxFeePerGas ?? + BigInt(block.baseFeePerGas) * BigInt(2) + + BigInt( + transaction.maxPriorityFeePerGas ?? web3Context.defaultMaxPriorityFeePerGas, + )) as Numbers, + returnFormat, + ), + }; +} + +export async function getTransactionGasPricing( + transaction: InternalTransaction, + web3Context: Web3Context, + returnFormat: ReturnFormat, +): Promise< + | FormatType< + { gasPrice?: Numbers; maxPriorityFeePerGas?: Numbers; maxFeePerGas?: Numbers }, + ReturnFormat + > + | undefined +> { + const transactionType = getTransactionType(transaction, web3Context); + if (!isNullish(transactionType)) { + if (transactionType.startsWith('-')) + throw new UnsupportedTransactionTypeError(transactionType); + + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2718.md#transactions + if (Number(transactionType) < 0 || Number(transactionType) > 127) + throw new UnsupportedTransactionTypeError(transactionType); + + if ( + isNullish(transaction.gasPrice) && + (transactionType === '0x0' || transactionType === '0x1') + ) + return { + gasPrice: await getGasPrice(web3Context, returnFormat), + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + + if (transactionType === '0x2') { + return { + gasPrice: undefined, + ...(await getEip1559GasPricing(transaction, web3Context, returnFormat)), + }; + } + } + + return undefined; +} diff --git a/packages/web3-eth/src/utils/index.ts b/packages/web3-eth/src/utils/index.ts new file mode 100644 index 00000000000..1251c4a6cc9 --- /dev/null +++ b/packages/web3-eth/src/utils/index.ts @@ -0,0 +1,21 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export * from './detect_transaction_type.js'; +export * from './format_transaction.js'; +export * from './prepare_transaction_for_signing.js'; +export * from './transaction_builder.js'; diff --git a/packages/web3-eth/src/utils/prepare_transaction_for_signing.ts b/packages/web3-eth/src/utils/prepare_transaction_for_signing.ts new file mode 100644 index 00000000000..42072d2d9a9 --- /dev/null +++ b/packages/web3-eth/src/utils/prepare_transaction_for_signing.ts @@ -0,0 +1,149 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + EthExecutionAPI, + HexString, + PopulatedUnsignedEip1559Transaction, + PopulatedUnsignedEip2930Transaction, + PopulatedUnsignedTransaction, + Transaction, + ValidChains, + FormatType, + ETH_DATA_FORMAT, +} from 'web3-types'; +import { Web3Context } from 'web3-core'; +import { toNumber } from 'web3-utils'; +import { TransactionFactory, TxOptions, Common } from 'web3-eth-accounts'; +import { isNullish } from 'web3-validator'; +import { validateTransactionForSigning } from '../validation.js'; +import { formatTransaction } from './format_transaction.js'; +import { transactionBuilder } from './transaction_builder.js'; + +const getEthereumjsTxDataFromTransaction = ( + transaction: FormatType, +) => ({ + nonce: transaction.nonce, + gasPrice: transaction.gasPrice, + gasLimit: transaction.gasLimit ?? transaction.gas, + to: transaction.to, + value: transaction.value, + data: transaction.data ?? transaction.input, + type: transaction.type, + chainId: transaction.chainId, + accessList: ( + transaction as FormatType + ).accessList, + maxPriorityFeePerGas: ( + transaction as FormatType + ).maxPriorityFeePerGas, + maxFeePerGas: ( + transaction as FormatType + ).maxFeePerGas, +}); + +const getEthereumjsTransactionOptions = ( + transaction: FormatType, + web3Context: Web3Context, +) => { + const hasTransactionSigningOptions = + (!isNullish(transaction.chain) && !isNullish(transaction.hardfork)) || + !isNullish(transaction.common); + + let common; + if (!hasTransactionSigningOptions) { + // if defaultcommon is specified, use that. + if (web3Context.defaultCommon) { + common = web3Context.defaultCommon; + + if (isNullish(common.hardfork)) + common.hardfork = transaction.hardfork ?? web3Context.defaultHardfork; + if (isNullish(common.baseChain)) + common.baseChain = web3Context.defaultChain as ValidChains; + } else { + common = Common.custom( + { + name: 'custom-network', + chainId: toNumber(transaction.chainId) as number, + networkId: !isNullish(transaction.networkId) + ? (toNumber(transaction.networkId) as number) + : undefined, + defaultHardfork: transaction.hardfork ?? web3Context.defaultHardfork, + }, + { + baseChain: web3Context.defaultChain, + }, + ); + } + } else { + const name = + transaction?.common?.customChain?.name ?? transaction.chain ?? 'custom-network'; + const chainId = toNumber( + transaction?.common?.customChain?.chainId ?? transaction?.chainId, + ) as number; + const networkId = toNumber( + transaction?.common?.customChain?.networkId ?? transaction?.networkId, + ) as number; + const defaultHardfork = + transaction?.common?.hardfork ?? transaction?.hardfork ?? web3Context.defaultHardfork; + const baseChain = + transaction.common?.baseChain ?? transaction.chain ?? web3Context.defaultChain; + + if (chainId && networkId && name) { + common = Common.custom( + { + name, + chainId, + networkId, + defaultHardfork, + }, + { + baseChain, + }, + ); + } + } + return { common } as TxOptions; +}; + +export const prepareTransactionForSigning = async ( + transaction: Transaction, + web3Context: Web3Context, + privateKey?: HexString | Uint8Array, + fillGasPrice = false, + fillGasLimit = true, +) => { + const populatedTransaction = (await transactionBuilder({ + transaction, + web3Context, + privateKey, + fillGasPrice, + fillGasLimit, + })) as unknown as PopulatedUnsignedTransaction; + const formattedTransaction = formatTransaction( + populatedTransaction, + ETH_DATA_FORMAT, + ) as unknown as FormatType; + validateTransactionForSigning( + formattedTransaction as unknown as FormatType, + ); + + return TransactionFactory.fromTxData( + getEthereumjsTxDataFromTransaction(formattedTransaction), + getEthereumjsTransactionOptions(formattedTransaction, web3Context), + ); +}; diff --git a/packages/web3-eth/src/utils/reject_if_block_timeout.ts b/packages/web3-eth/src/utils/reject_if_block_timeout.ts new file mode 100644 index 00000000000..2019ce3380d --- /dev/null +++ b/packages/web3-eth/src/utils/reject_if_block_timeout.ts @@ -0,0 +1,177 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { EthExecutionAPI, Bytes, Web3BaseProvider, BlockHeaderOutput } from 'web3-types'; +import { Web3Context } from 'web3-core'; +import { rejectIfConditionAtInterval } from 'web3-utils'; + +import { TransactionBlockTimeoutError } from 'web3-errors'; +import { NUMBER_DATA_FORMAT } from '../constants.js'; +// eslint-disable-next-line import/no-cycle +import { getBlockNumber } from '../rpc_method_wrappers.js'; +import { NewHeadsSubscription } from '../web3_subscriptions.js'; + +export interface ResourceCleaner { + clean: () => void; +} + +function resolveByPolling( + web3Context: Web3Context, + starterBlockNumber: number, + transactionHash?: Bytes, +): [Promise, ResourceCleaner] { + const pollingInterval = web3Context.transactionPollingInterval; + const [intervalId, promiseToError] = + rejectIfConditionAtInterval(async () => { + let lastBlockNumber; + try { + lastBlockNumber = await getBlockNumber(web3Context, NUMBER_DATA_FORMAT); + } catch (error) { + console.warn('An error happen while trying to get the block number', error); + return undefined; + } + const numberOfBlocks = lastBlockNumber - starterBlockNumber; + if (numberOfBlocks >= web3Context.transactionBlockTimeout) { + return new TransactionBlockTimeoutError({ + starterBlockNumber, + numberOfBlocks, + transactionHash, + }); + } + return undefined; + }, pollingInterval); + + const clean = () => { + clearInterval(intervalId); + }; + + return [promiseToError, { clean }]; +} + +async function resolveBySubscription( + web3Context: Web3Context, + starterBlockNumber: number, + transactionHash?: Bytes, +): Promise<[Promise, ResourceCleaner]> { + // The following variable will stay true except if the data arrived, + // or if watching started after an error had occurred. + let needToWatchLater = true; + + let subscription: NewHeadsSubscription; + let resourceCleaner: ResourceCleaner; + // internal helper function + function revertToPolling( + reject: (value: Error | PromiseLike) => void, + previousError?: Error, + ) { + if (previousError) { + console.warn('error happened at subscription. So revert to polling...', previousError); + } + resourceCleaner.clean(); + + needToWatchLater = false; + const [promiseToError, newResourceCleaner] = resolveByPolling( + web3Context, + starterBlockNumber, + transactionHash, + ); + resourceCleaner.clean = newResourceCleaner.clean; + promiseToError.catch(error => reject(error as Error)); + } + try { + subscription = (await web3Context.subscriptionManager?.subscribe( + 'newHeads', + )) as unknown as NewHeadsSubscription; + resourceCleaner = { + clean: () => { + // Remove the subscription, if it was not removed somewhere + // else by calling, for example, subscriptionManager.clear() + if (subscription.id) { + web3Context.subscriptionManager + ?.removeSubscription(subscription) + .then(() => { + // Subscription ended successfully + }) + .catch(() => { + // An error happened while ending subscription. But no need to take any action. + }); + } + }, + }; + } catch (error) { + return resolveByPolling(web3Context, starterBlockNumber, transactionHash); + } + const promiseToError: Promise = new Promise((_, reject) => { + try { + subscription.on('data', (lastBlockHeader: BlockHeaderOutput) => { + needToWatchLater = false; + if (!lastBlockHeader?.number) { + return; + } + const numberOfBlocks = Number( + BigInt(lastBlockHeader.number) - BigInt(starterBlockNumber), + ); + + if (numberOfBlocks >= web3Context.transactionBlockTimeout) { + // Transaction Block Timeout is known to be reached by subscribing to new heads + reject( + new TransactionBlockTimeoutError({ + starterBlockNumber, + numberOfBlocks, + transactionHash, + }), + ); + } + }); + subscription.on('error', error => { + revertToPolling(reject, error); + }); + } catch (error) { + revertToPolling(reject, error as Error); + } + + // Fallback to polling if tx receipt didn't arrived in "blockHeaderTimeout" [10 seconds] + setTimeout(() => { + if (needToWatchLater) { + revertToPolling(reject); + } + }, web3Context.blockHeaderTimeout * 1000); + }); + + return [promiseToError, resourceCleaner]; +} + +/* TODO: After merge, there will be constant block mining time (exactly 12 second each block, except slot missed that currently happens in <1% of slots. ) so we can optimize following function +for POS NWs, we can skip checking getBlockNumber(); after interval and calculate only based on time that certain num of blocked are mined after that for internal double check, can do one getBlockNumber() call and timeout. +*/ +export async function rejectIfBlockTimeout( + web3Context: Web3Context, + transactionHash?: Bytes, +): Promise<[Promise, ResourceCleaner]> { + const { provider } = web3Context.requestManager; + let callingRes: [Promise, ResourceCleaner]; + const starterBlockNumber = await getBlockNumber(web3Context, NUMBER_DATA_FORMAT); + // TODO: once https://github.com/web3/web3.js/issues/5521 is implemented, remove checking for `enableExperimentalFeatures.useSubscriptionWhenCheckingBlockTimeout` + if ( + (provider as Web3BaseProvider).supportsSubscriptions?.() && + web3Context.enableExperimentalFeatures.useSubscriptionWhenCheckingBlockTimeout + ) { + callingRes = await resolveBySubscription(web3Context, starterBlockNumber, transactionHash); + } else { + callingRes = resolveByPolling(web3Context, starterBlockNumber, transactionHash); + } + return callingRes; +} diff --git a/packages/web3-eth/src/utils/send_tx_helper.ts b/packages/web3-eth/src/utils/send_tx_helper.ts new file mode 100644 index 00000000000..3cc767449b6 --- /dev/null +++ b/packages/web3-eth/src/utils/send_tx_helper.ts @@ -0,0 +1,299 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + ETH_DATA_FORMAT, + FormatType, + DataFormat, + EthExecutionAPI, + TransactionWithSenderAPI, + Web3BaseWalletAccount, + HexString, + TransactionReceipt, + Transaction, + TransactionCall, + TransactionWithFromLocalWalletIndex, + TransactionWithToLocalWalletIndex, + TransactionWithFromAndToLocalWalletIndex, + LogsInput, + TransactionHash, + ContractAbiWithSignature, +} from 'web3-types'; +import { Web3Context, Web3EventEmitter, Web3PromiEvent } from 'web3-core'; +import { isNullish } from 'web3-validator'; +import { + ContractExecutionError, + InvalidResponseError, + TransactionRevertedWithoutReasonError, + TransactionRevertInstructionError, + TransactionRevertWithCustomError, +} from 'web3-errors'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { + SendSignedTransactionEvents, + SendTransactionEvents, + SendTransactionOptions, +} from '../types.js'; +// eslint-disable-next-line import/no-cycle +import { getTransactionGasPricing } from './get_transaction_gas_pricing.js'; +// eslint-disable-next-line import/no-cycle +import { trySendTransaction } from './try_send_transaction.js'; +// eslint-disable-next-line import/no-cycle +import { watchTransactionForConfirmations } from './watch_transaction_for_confirmations.js'; +import { ALL_EVENTS_ABI } from '../constants.js'; +// eslint-disable-next-line import/no-cycle +import { getTransactionError } from './get_transaction_error.js'; +// eslint-disable-next-line import/no-cycle +import { getRevertReason } from './get_revert_reason.js'; +import { decodeEventABI } from './decoding.js'; + +export class SendTxHelper< + ReturnFormat extends DataFormat, + ResolveType = FormatType, + TxType = + | Transaction + | TransactionWithFromLocalWalletIndex + | TransactionWithToLocalWalletIndex + | TransactionWithFromAndToLocalWalletIndex, +> { + private readonly web3Context: Web3Context; + private readonly promiEvent: Web3PromiEvent< + ResolveType, + SendSignedTransactionEvents | SendTransactionEvents + >; + private readonly options: SendTransactionOptions = { + checkRevertBeforeSending: true, + }; + private readonly returnFormat: ReturnFormat; + public constructor({ + options, + web3Context, + promiEvent, + returnFormat, + }: { + web3Context: Web3Context; + options: SendTransactionOptions; + promiEvent: Web3PromiEvent< + ResolveType, + SendSignedTransactionEvents | SendTransactionEvents + >; + returnFormat: ReturnFormat; + }) { + this.options = options; + this.web3Context = web3Context; + this.promiEvent = promiEvent; + this.returnFormat = returnFormat; + } + + public getReceiptWithEvents(data: TransactionReceipt): ResolveType { + const result = { ...(data ?? {}) }; + if (this.options?.contractAbi && result.logs && result.logs.length > 0) { + result.events = {}; + for (const log of result.logs) { + const event = decodeEventABI( + ALL_EVENTS_ABI, + log as LogsInput, + this.options?.contractAbi as ContractAbiWithSignature, + this.returnFormat, + ); + if (event.event) { + result.events[event.event] = event; + } + } + } + + return result as unknown as ResolveType; + } + + public async checkRevertBeforeSending(tx: TransactionCall) { + if (this.options.checkRevertBeforeSending !== false) { + const reason = await getRevertReason(this.web3Context, tx, this.options.contractAbi); + if (reason !== undefined) { + throw await getTransactionError( + this.web3Context, + tx, + undefined, + undefined, + this.options.contractAbi, + reason, + ); + } + } + } + + public emitSending(tx: TxType | HexString) { + if (this.promiEvent.listenerCount('sending') > 0) { + this.promiEvent.emit('sending', tx); + } + } + + public async populateGasPrice({ + transactionFormatted, + transaction, + }: { + transactionFormatted: TxType; + transaction: TxType; + }): Promise { + let result = transactionFormatted; + if ( + !this.options?.ignoreGasPricing && + isNullish((transactionFormatted as Transaction).gasPrice) && + (isNullish((transaction as Transaction).maxPriorityFeePerGas) || + isNullish((transaction as Transaction).maxFeePerGas)) + ) { + result = { + ...transactionFormatted, + // TODO gasPrice, maxPriorityFeePerGas, maxFeePerGas + // should not be included if undefined, but currently are + ...(await getTransactionGasPricing( + transactionFormatted, + this.web3Context, + ETH_DATA_FORMAT, + )), + }; + } + + return result; + } + + public async signAndSend({ + wallet, + tx, + }: { + wallet: Web3BaseWalletAccount | undefined; + tx: TxType; + }) { + if (wallet) { + const signedTransaction = await wallet.signTransaction(tx); + + return trySendTransaction( + this.web3Context, + async (): Promise => + ethRpcMethods.sendRawTransaction( + this.web3Context.requestManager, + signedTransaction.rawTransaction, + ), + signedTransaction.transactionHash, + ); + } + return trySendTransaction( + this.web3Context, + async (): Promise => + ethRpcMethods.sendTransaction( + this.web3Context.requestManager, + tx as Partial, + ), + ); + } + + public emitSent(tx: TxType | HexString) { + if (this.promiEvent.listenerCount('sent') > 0) { + this.promiEvent.emit('sent', tx); + } + } + public emitTransactionHash(hash: string & Uint8Array) { + if (this.promiEvent.listenerCount('transactionHash') > 0) { + this.promiEvent.emit('transactionHash', hash); + } + } + + public emitReceipt(receipt: ResolveType) { + if (this.promiEvent.listenerCount('receipt') > 0) { + ( + this.promiEvent as Web3EventEmitter< + SendTransactionEvents | SendSignedTransactionEvents + > + ).emit( + 'receipt', + // @ts-expect-error unknown type fix + receipt, + ); + } + } + + public async handleError({ error, tx }: { error: unknown; tx: TransactionCall }) { + let _error = error; + + if (_error instanceof ContractExecutionError && this.web3Context.handleRevert) { + _error = await getTransactionError( + this.web3Context, + tx, + undefined, + undefined, + this.options?.contractAbi, + ); + } + + if ( + (_error instanceof InvalidResponseError || + _error instanceof ContractExecutionError || + _error instanceof TransactionRevertWithCustomError || + _error instanceof TransactionRevertedWithoutReasonError || + _error instanceof TransactionRevertInstructionError) && + this.promiEvent.listenerCount('error') > 0 + ) { + this.promiEvent.emit('error', _error); + } + + return _error; + } + + public emitConfirmation({ + receipt, + transactionHash, + }: { + receipt: ResolveType; + transactionHash: TransactionHash; + }) { + if (this.promiEvent.listenerCount('confirmation') > 0) { + watchTransactionForConfirmations< + ReturnFormat, + SendSignedTransactionEvents | SendTransactionEvents, + ResolveType + >( + this.web3Context, + this.promiEvent, + receipt as unknown as TransactionReceipt, + transactionHash, + this.returnFormat, + ); + } + } + + public async handleResolve({ receipt, tx }: { receipt: ResolveType; tx: TransactionCall }) { + if (this.options?.transactionResolver) { + return this.options?.transactionResolver(receipt as unknown as TransactionReceipt); + } + if ((receipt as unknown as TransactionReceipt).status === BigInt(0)) { + const error = await getTransactionError( + this.web3Context, + tx, + // @ts-expect-error unknown type fix + receipt, + undefined, + this.options?.contractAbi, + ); + if (this.promiEvent.listenerCount('error') > 0) { + this.promiEvent.emit('error', error); + } + + throw error; + } else { + return receipt; + } + } +} diff --git a/packages/web3-eth/src/utils/transaction_builder.ts b/packages/web3-eth/src/utils/transaction_builder.ts new file mode 100644 index 00000000000..13edd253330 --- /dev/null +++ b/packages/web3-eth/src/utils/transaction_builder.ts @@ -0,0 +1,265 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + EthExecutionAPI, + Address, + HexString, + ValidChains, + Hardfork, + Transaction, + TransactionWithFromLocalWalletIndex, + TransactionWithToLocalWalletIndex, + TransactionWithFromAndToLocalWalletIndex, + Common, + Web3NetAPI, + Numbers, + DataFormat, + DEFAULT_RETURN_FORMAT, + FormatType, + ETH_DATA_FORMAT, +} from 'web3-types'; +import { Web3Context } from 'web3-core'; +import { privateKeyToAddress } from 'web3-eth-accounts'; +import { getId } from 'web3-net'; +import { isNullish, isNumber, isHexStrict, isAddress } from 'web3-validator'; +import { + InvalidTransactionWithSender, + InvalidTransactionWithReceiver, + LocalWalletNotAvailableError, + TransactionDataAndInputError, + UnableToPopulateNonceError, +} from 'web3-errors'; +import { bytesToHex, format } from 'web3-utils'; +import { NUMBER_DATA_FORMAT } from '../constants.js'; +// eslint-disable-next-line import/no-cycle +import { getChainId, getTransactionCount, estimateGas } from '../rpc_method_wrappers.js'; +import { detectTransactionType } from './detect_transaction_type.js'; +import { transactionSchema } from '../schemas.js'; +import { InternalTransaction } from '../types.js'; +// eslint-disable-next-line import/no-cycle +import { getTransactionGasPricing } from './get_transaction_gas_pricing.js'; + +export const getTransactionFromOrToAttr = ( + attr: 'from' | 'to', + web3Context: Web3Context, + transaction?: + | Transaction + | TransactionWithFromLocalWalletIndex + | TransactionWithToLocalWalletIndex + | TransactionWithFromAndToLocalWalletIndex, + privateKey?: HexString | Uint8Array, +): Address | undefined => { + if (transaction !== undefined && attr in transaction && transaction[attr] !== undefined) { + if (typeof transaction[attr] === 'string' && isAddress(transaction[attr] as string)) { + return transaction[attr] as Address; + } + if (!isHexStrict(transaction[attr] as string) && isNumber(transaction[attr] as Numbers)) { + if (web3Context.wallet) { + const account = web3Context.wallet.get( + format({ format: 'uint' }, transaction[attr] as Numbers, NUMBER_DATA_FORMAT), + ); + + if (!isNullish(account)) { + return account.address; + } + + throw new LocalWalletNotAvailableError(); + } + throw new LocalWalletNotAvailableError(); + } else { + throw attr === 'from' + ? new InvalidTransactionWithSender(transaction.from) + : // eslint-disable-next-line @typescript-eslint/no-unsafe-call + new InvalidTransactionWithReceiver(transaction.to); + } + } + if (attr === 'from') { + if (!isNullish(privateKey)) return privateKeyToAddress(privateKey); + if (!isNullish(web3Context.defaultAccount)) return web3Context.defaultAccount; + } + + return undefined; +}; + +export const getTransactionNonce = async ( + web3Context: Web3Context, + address?: Address, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, +) => { + if (isNullish(address)) { + // TODO if (web3.eth.accounts.wallet) use address from local wallet + throw new UnableToPopulateNonceError(); + } + + return getTransactionCount(web3Context, address, web3Context.defaultBlock, returnFormat); +}; + +export const getTransactionType = ( + transaction: FormatType, + web3Context: Web3Context, +) => { + const inferredType = detectTransactionType(transaction, web3Context); + if (!isNullish(inferredType)) return inferredType; + if (!isNullish(web3Context.defaultTransactionType)) + return format({ format: 'uint' }, web3Context.defaultTransactionType, ETH_DATA_FORMAT); + + return undefined; +}; + +// Keep in mind that the order the properties of populateTransaction get populated matters +// as some of the properties are dependent on others +export async function defaultTransactionBuilder(options: { + transaction: Transaction; + web3Context: Web3Context; + privateKey?: HexString | Uint8Array; + fillGasPrice?: boolean; + fillGasLimit?: boolean; +}): Promise { + let populatedTransaction = format( + transactionSchema, + options.transaction, + DEFAULT_RETURN_FORMAT, + ) as InternalTransaction; + + if (isNullish(populatedTransaction.from)) { + populatedTransaction.from = getTransactionFromOrToAttr( + 'from', + options.web3Context, + undefined, + options.privateKey, + ); + } + + // TODO: Debug why need to typecase getTransactionNonce + if (isNullish(populatedTransaction.nonce)) { + populatedTransaction.nonce = await getTransactionNonce( + options.web3Context, + populatedTransaction.from, + ETH_DATA_FORMAT, + ); + } + + if (isNullish(populatedTransaction.value)) { + populatedTransaction.value = '0x0'; + } + + if (!isNullish(populatedTransaction.data)) { + if ( + !isNullish(populatedTransaction.input) && + populatedTransaction.data !== populatedTransaction.input + ) + throw new TransactionDataAndInputError({ + data: bytesToHex(populatedTransaction.data), + input: bytesToHex(populatedTransaction.input), + }); + + if (!populatedTransaction.data.startsWith('0x')) + populatedTransaction.data = `0x${populatedTransaction.data}`; + } else if (!isNullish(populatedTransaction.input)) { + if (!populatedTransaction.input.startsWith('0x')) + populatedTransaction.input = `0x${populatedTransaction.input}`; + } else { + populatedTransaction.input = '0x'; + } + + if (isNullish(populatedTransaction.common)) { + if (options.web3Context.defaultCommon) { + const common = options.web3Context.defaultCommon as unknown as Common; + const chainId = common.customChain.chainId as string; + const networkId = common.customChain.networkId as string; + const name = common.customChain.name as string; + populatedTransaction.common = { + ...common, + customChain: { chainId, networkId, name }, + }; + } + + if (isNullish(populatedTransaction.chain)) { + populatedTransaction.chain = options.web3Context.defaultChain as ValidChains; + } + if (isNullish(populatedTransaction.hardfork)) { + populatedTransaction.hardfork = options.web3Context.defaultHardfork as Hardfork; + } + } + + if ( + isNullish(populatedTransaction.chainId) && + isNullish(populatedTransaction.common?.customChain.chainId) + ) { + populatedTransaction.chainId = await getChainId(options.web3Context, ETH_DATA_FORMAT); + } + + if (isNullish(populatedTransaction.networkId)) { + populatedTransaction.networkId = + (options.web3Context.defaultNetworkId as string) ?? + (await getId(options.web3Context, ETH_DATA_FORMAT)); + } + + if (isNullish(populatedTransaction.gasLimit) && !isNullish(populatedTransaction.gas)) { + populatedTransaction.gasLimit = populatedTransaction.gas; + } + + populatedTransaction.type = getTransactionType(populatedTransaction, options.web3Context); + if ( + isNullish(populatedTransaction.accessList) && + (populatedTransaction.type === '0x1' || populatedTransaction.type === '0x2') + ) { + populatedTransaction.accessList = []; + } + if (options.fillGasPrice) + populatedTransaction = { + ...populatedTransaction, + ...(await getTransactionGasPricing( + populatedTransaction, + options.web3Context, + ETH_DATA_FORMAT, + )), + }; + if ( + isNullish(populatedTransaction.gas) && + isNullish(populatedTransaction.gasLimit) && + options.fillGasLimit + ) { + const fillGasLimit = await estimateGas( + options.web3Context, + populatedTransaction, + 'latest', + ETH_DATA_FORMAT, + ); + populatedTransaction = { + ...populatedTransaction, + gas: format({ format: 'uint' }, fillGasLimit as Numbers, ETH_DATA_FORMAT), + }; + } + return populatedTransaction as ReturnType; +} + +export const transactionBuilder = async ( + options: { + transaction: Transaction; + web3Context: Web3Context; + privateKey?: HexString | Uint8Array; + fillGasPrice?: boolean; + fillGasLimit?: boolean; + }, + // eslint-disable-next-line @typescript-eslint/require-await +) => + (options.web3Context.transactionBuilder ?? defaultTransactionBuilder)({ + ...options, + transaction: options.transaction, + }) as unknown as ReturnType; diff --git a/packages/web3-eth/src/utils/try_send_transaction.ts b/packages/web3-eth/src/utils/try_send_transaction.ts new file mode 100644 index 00000000000..b3a677c6270 --- /dev/null +++ b/packages/web3-eth/src/utils/try_send_transaction.ts @@ -0,0 +1,61 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { EthExecutionAPI, Bytes } from 'web3-types'; +import { AsyncFunction, rejectIfTimeout } from 'web3-utils'; +import { TransactionSendTimeoutError } from 'web3-errors'; + +// eslint-disable-next-line import/no-cycle +import { rejectIfBlockTimeout } from './reject_if_block_timeout.js'; + +/** + * An internal function to send a transaction or throws if sending did not finish during the timeout during the blocks-timeout. + * @param web3Context - the context to read the configurations from + * @param sendTransactionFunc - the function that will send the transaction (could be sendTransaction or sendRawTransaction) + * @param transactionHash - to be used inside the exception message if there will be any exceptions. + * @returns the Promise returned by the `sendTransactionFunc`. + */ +export async function trySendTransaction( + web3Context: Web3Context, + sendTransactionFunc: AsyncFunction, + transactionHash?: Bytes, +): Promise { + const [timeoutId, rejectOnTimeout] = rejectIfTimeout( + web3Context.transactionSendTimeout, + new TransactionSendTimeoutError({ + numberOfSeconds: web3Context.transactionSendTimeout / 1000, + transactionHash, + }), + ); + + const [rejectOnBlockTimeout, blockTimeoutResourceCleaner] = await rejectIfBlockTimeout( + web3Context, + transactionHash, + ); + + try { + // If an error happened here, do not catch it, just clear the resources before raising it to the caller function. + return await Promise.race([ + sendTransactionFunc(), // this is the function that will send the transaction + rejectOnTimeout, // this will throw an error on Transaction Send Timeout + rejectOnBlockTimeout, // this will throw an error on Transaction Block Timeout + ]); + } finally { + clearTimeout(timeoutId); + blockTimeoutResourceCleaner.clean(); + } +} diff --git a/packages/web3-eth/src/utils/wait_for_transaction_receipt.ts b/packages/web3-eth/src/utils/wait_for_transaction_receipt.ts new file mode 100644 index 00000000000..d335683391e --- /dev/null +++ b/packages/web3-eth/src/utils/wait_for_transaction_receipt.ts @@ -0,0 +1,74 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Context } from 'web3-core'; +import { TransactionPollingTimeoutError } from 'web3-errors'; +import { EthExecutionAPI, Bytes, TransactionReceipt, DataFormat } from 'web3-types'; + +// eslint-disable-next-line import/no-cycle +import { pollTillDefinedAndReturnIntervalId, rejectIfTimeout } from 'web3-utils'; +// eslint-disable-next-line import/no-cycle +import { rejectIfBlockTimeout } from './reject_if_block_timeout.js'; +// eslint-disable-next-line import/no-cycle +import { getTransactionReceipt } from '../rpc_method_wrappers.js'; + +export async function waitForTransactionReceipt( + web3Context: Web3Context, + transactionHash: Bytes, + returnFormat: ReturnFormat, +): Promise { + + const pollingInterval = + web3Context.transactionReceiptPollingInterval ?? web3Context.transactionPollingInterval; + + const [awaitableTransactionReceipt, IntervalId] = pollTillDefinedAndReturnIntervalId(async () => { + try { + return getTransactionReceipt(web3Context, transactionHash, returnFormat); + } catch (error) { + console.warn('An error happen while trying to get the transaction receipt', error); + return undefined; + } + }, pollingInterval); + + const [timeoutId, rejectOnTimeout] = rejectIfTimeout( + web3Context.transactionPollingTimeout, + new TransactionPollingTimeoutError({ + numberOfSeconds: web3Context.transactionPollingTimeout / 1000, + transactionHash, + }), + ); + + const [rejectOnBlockTimeout, blockTimeoutResourceCleaner] = await rejectIfBlockTimeout( + web3Context, + transactionHash, + ); + + try { + // If an error happened here, do not catch it, just clear the resources before raising it to the caller function. + return await Promise.race([ + awaitableTransactionReceipt, + rejectOnTimeout, // this will throw an error on Transaction Polling Timeout + rejectOnBlockTimeout, // this will throw an error on Transaction Block Timeout + ]); + } finally { + if(timeoutId) + clearTimeout(timeoutId); + if(IntervalId) + clearInterval(IntervalId); + blockTimeoutResourceCleaner.clean(); + } +} diff --git a/packages/web3-eth/src/utils/watch_transaction_by_pooling.ts b/packages/web3-eth/src/utils/watch_transaction_by_pooling.ts new file mode 100644 index 00000000000..6be3c572742 --- /dev/null +++ b/packages/web3-eth/src/utils/watch_transaction_by_pooling.ts @@ -0,0 +1,80 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Bytes, EthExecutionAPI, TransactionReceipt } from 'web3-types'; +import { Web3Context, Web3PromiEvent } from 'web3-core'; +import { format, numberToHex } from 'web3-utils'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { DataFormat } from 'web3-types'; +import { SendSignedTransactionEvents, SendTransactionEvents } from '../types.js'; +import { transactionReceiptSchema } from '../schemas.js'; + +export type Web3PromiEventEventTypeBase = + | SendTransactionEvents + | SendSignedTransactionEvents; + +export type WaitProps = { + web3Context: Web3Context; + transactionReceipt: TransactionReceipt; + transactionPromiEvent: Web3PromiEvent>; + returnFormat: ReturnFormat; +}; + +/** + * This function watches a Transaction by subscribing to new heads. + * It is used by `watchTransactionForConfirmations`, in case the provider does not support subscription. + * And it is also used by `watchTransactionBySubscription`, as a fallback, if the subscription failed for any reason. + */ +export const watchTransactionByPolling = < + ReturnFormat extends DataFormat, + ResolveType = TransactionReceipt, +>({ + web3Context, + transactionReceipt, + transactionPromiEvent, + returnFormat, +}: WaitProps) => { + // Having a transactionReceipt means that the transaction has already been included + // in at least one block, so we start with 1 + let confirmations = 1; + const intervalId = setInterval(() => { + (async () => { + if (confirmations >= web3Context.transactionConfirmationBlocks) + clearInterval(intervalId); + + const nextBlock = await ethRpcMethods.getBlockByNumber( + web3Context.requestManager, + numberToHex(BigInt(transactionReceipt.blockNumber) + BigInt(confirmations)), + false, + ); + + if (nextBlock?.hash) { + confirmations += 1; + + transactionPromiEvent.emit('confirmation', { + confirmations: format({ format: 'uint' }, confirmations, returnFormat), + receipt: format(transactionReceiptSchema, transactionReceipt, returnFormat), + latestBlockHash: format( + { format: 'bytes32' }, + nextBlock.hash as Bytes, + returnFormat, + ), + }); + } + })() as unknown; + }, web3Context.transactionReceiptPollingInterval ?? web3Context.transactionPollingInterval); +}; diff --git a/packages/web3-eth/src/utils/watch_transaction_by_subscription.ts b/packages/web3-eth/src/utils/watch_transaction_by_subscription.ts new file mode 100644 index 00000000000..8cdaa8fc214 --- /dev/null +++ b/packages/web3-eth/src/utils/watch_transaction_by_subscription.ts @@ -0,0 +1,114 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Bytes, Numbers, BlockHeaderOutput, TransactionReceipt } from 'web3-types'; +import { format } from 'web3-utils'; + +import { DataFormat } from 'web3-types'; +import { NewHeadsSubscription } from '../web3_subscriptions.js'; +import { transactionReceiptSchema } from '../schemas.js'; +import { WaitProps, watchTransactionByPolling } from './watch_transaction_by_pooling.js'; + +/** + * This function watches a Transaction by subscribing to new heads. + * It is used by `watchTransactionForConfirmations`, in case the provider supports subscription. + */ +export const watchTransactionBySubscription = < + ReturnFormat extends DataFormat, + ResolveType = TransactionReceipt, +>({ + web3Context, + transactionReceipt, + transactionPromiEvent, + returnFormat, +}: WaitProps) => { + // The following variable will stay true except if the data arrived, + // or if watching started after an error had occurred. + let needToWatchLater = true; + let lastCaughtBlockHash: string; + setImmediate(() => { + web3Context.subscriptionManager + ?.subscribe('newHeads') + .then((subscription: NewHeadsSubscription) => { + subscription.on('data', async (newBlockHeader: BlockHeaderOutput) => { + needToWatchLater = false; + if ( + !newBlockHeader?.number || + // For some cases, the on-data event is fired couple times for the same block! + // This needs investigation but seems to be because of multiple `subscription.on('data'...)` even this should not cause that. + lastCaughtBlockHash === newBlockHeader?.parentHash + ) { + return; + } + lastCaughtBlockHash = newBlockHeader?.parentHash as string; + + const confirmations = + BigInt(newBlockHeader.number) - + BigInt(transactionReceipt.blockNumber) + + BigInt(1); + + transactionPromiEvent.emit('confirmation', { + confirmations: format( + { format: 'uint' }, + confirmations as Numbers, + returnFormat, + ), + receipt: format(transactionReceiptSchema, transactionReceipt, returnFormat), + latestBlockHash: format( + { format: 'bytes32' }, + newBlockHeader.parentHash as Bytes, + returnFormat, + ), + }); + if (confirmations >= web3Context.transactionConfirmationBlocks) { + await web3Context.subscriptionManager?.removeSubscription(subscription); + } + }); + subscription.on('error', async () => { + await web3Context.subscriptionManager?.removeSubscription(subscription); + + needToWatchLater = false; + watchTransactionByPolling({ + web3Context, + transactionReceipt, + transactionPromiEvent, + returnFormat, + }); + }); + }) + .catch(() => { + needToWatchLater = false; + watchTransactionByPolling({ + web3Context, + transactionReceipt, + transactionPromiEvent, + returnFormat, + }); + }); + }); + + // Fallback to polling if tx receipt didn't arrived in "blockHeaderTimeout" [10 seconds] + setTimeout(() => { + if (needToWatchLater) { + watchTransactionByPolling({ + web3Context, + transactionReceipt, + transactionPromiEvent, + returnFormat, + }); + } + }, web3Context.blockHeaderTimeout * 1000); +}; diff --git a/packages/web3-eth/src/utils/watch_transaction_for_confirmations.ts b/packages/web3-eth/src/utils/watch_transaction_for_confirmations.ts new file mode 100644 index 00000000000..e6826fea10d --- /dev/null +++ b/packages/web3-eth/src/utils/watch_transaction_for_confirmations.ts @@ -0,0 +1,79 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Bytes, EthExecutionAPI, Web3BaseProvider, TransactionReceipt } from 'web3-types'; +import { Web3Context, Web3PromiEvent } from 'web3-core'; +import { format } from 'web3-utils'; +import { isNullish } from 'web3-validator'; + +import { + TransactionMissingReceiptOrBlockHashError, + TransactionReceiptMissingBlockNumberError, +} from 'web3-errors'; +import { DataFormat } from 'web3-types'; +import { transactionReceiptSchema } from '../schemas.js'; +import { + watchTransactionByPolling, + Web3PromiEventEventTypeBase, +} from './watch_transaction_by_pooling.js'; +import { watchTransactionBySubscription } from './watch_transaction_by_subscription.js'; + +export function watchTransactionForConfirmations< + ReturnFormat extends DataFormat, + Web3PromiEventEventType extends Web3PromiEventEventTypeBase, + ResolveType = TransactionReceipt, +>( + web3Context: Web3Context, + transactionPromiEvent: Web3PromiEvent, + transactionReceipt: TransactionReceipt, + transactionHash: Bytes, + returnFormat: ReturnFormat, +) { + if (isNullish(transactionReceipt) || isNullish(transactionReceipt.blockHash)) + throw new TransactionMissingReceiptOrBlockHashError({ + receipt: transactionReceipt, + blockHash: format({ format: 'bytes32' }, transactionReceipt?.blockHash, returnFormat), + transactionHash: format({ format: 'bytes32' }, transactionHash, returnFormat), + }); + + if (!transactionReceipt.blockNumber) + throw new TransactionReceiptMissingBlockNumberError({ receipt: transactionReceipt }); + + // As we have the receipt, it's the first confirmation that tx is accepted. + transactionPromiEvent.emit('confirmation', { + confirmations: format({ format: 'uint' }, 1, returnFormat), + receipt: format(transactionReceiptSchema, transactionReceipt, returnFormat), + latestBlockHash: format({ format: 'bytes32' }, transactionReceipt.blockHash, returnFormat), + }); + + // so a subscription for newBlockHeaders can be made instead of polling + const provider: Web3BaseProvider = web3Context.requestManager.provider as Web3BaseProvider; + if (provider && 'supportsSubscriptions' in provider && provider.supportsSubscriptions()) { + watchTransactionBySubscription({ + web3Context, + transactionReceipt, + transactionPromiEvent, + returnFormat, + }); + } else { + watchTransactionByPolling({ + web3Context, + transactionReceipt, + transactionPromiEvent, + returnFormat, + }); + } +} diff --git a/packages/web3-eth/src/validation.ts b/packages/web3-eth/src/validation.ts new file mode 100644 index 00000000000..a818cc66c10 --- /dev/null +++ b/packages/web3-eth/src/validation.ts @@ -0,0 +1,312 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + AccessList, + AccessListEntry, + BaseTransactionAPI, + Transaction1559UnsignedAPI, + Transaction2930UnsignedAPI, + TransactionCall, + TransactionLegacyUnsignedAPI, + Transaction, + TransactionWithSenderAPI, + ETH_DATA_FORMAT, +} from 'web3-types'; +import { isAddress, isHexStrict, isHexString32Bytes, isNullish, isUInt } from 'web3-validator'; +import { + ChainMismatchError, + HardforkMismatchError, + ChainIdMismatchError, + CommonOrChainAndHardforkError, + Eip1559GasPriceError, + InvalidGasOrGasPrice, + InvalidMaxPriorityFeePerGasOrMaxFeePerGas, + InvalidNonceOrChainIdError, + InvalidTransactionCall, + InvalidTransactionObjectError, + InvalidTransactionWithSender, + MissingChainOrHardforkError, + MissingCustomChainError, + MissingCustomChainIdError, + MissingGasError, + TransactionGasMismatchError, + UnsupportedFeeMarketError, +} from 'web3-errors'; +import { formatTransaction } from './utils/format_transaction.js'; +import { InternalTransaction } from './types.js'; + +export function isBaseTransaction(value: BaseTransactionAPI): boolean { + if (!isNullish(value.to) && !isAddress(value.to)) return false; + if (!isHexStrict(value.type) && !isNullish(value.type) && value.type.length !== 2) return false; + if (!isHexStrict(value.nonce)) return false; + if (!isHexStrict(value.gas)) return false; + if (!isHexStrict(value.value)) return false; + if (!isHexStrict(value.input)) return false; + if (value.chainId && !isHexStrict(value.chainId)) return false; + + return true; +} + +export function isAccessListEntry(value: AccessListEntry): boolean { + if (!isNullish(value.address) && !isAddress(value.address)) return false; + if ( + !isNullish(value.storageKeys) && + !value.storageKeys.every(storageKey => isHexString32Bytes(storageKey)) + ) + return false; + + return true; +} + +export function isAccessList(value: AccessList): boolean { + if ( + !Array.isArray(value) || + !value.every(accessListEntry => isAccessListEntry(accessListEntry)) + ) + return false; + + return true; +} + +export function isTransaction1559Unsigned(value: Transaction1559UnsignedAPI): boolean { + if (!isBaseTransaction(value)) return false; + if (!isHexStrict(value.maxFeePerGas)) return false; + if (!isHexStrict(value.maxPriorityFeePerGas)) return false; + if (!isAccessList(value.accessList)) return false; + + return true; +} + +export function isTransaction2930Unsigned(value: Transaction2930UnsignedAPI): boolean { + if (!isBaseTransaction(value)) return false; + if (!isHexStrict(value.gasPrice)) return false; + if (!isAccessList(value.accessList)) return false; + + return true; +} + +export function isTransactionLegacyUnsigned(value: TransactionLegacyUnsignedAPI): boolean { + if (!isBaseTransaction(value)) return false; + if (!isHexStrict(value.gasPrice)) return false; + + return true; +} + +export function isTransactionWithSender(value: TransactionWithSenderAPI): boolean { + if (!isAddress(value.from)) return false; + if (!isBaseTransaction(value)) return false; + if ( + !isTransaction1559Unsigned(value as Transaction1559UnsignedAPI) && + !isTransaction2930Unsigned(value as Transaction2930UnsignedAPI) && + !isTransactionLegacyUnsigned(value as TransactionLegacyUnsignedAPI) + ) + return false; + + return true; +} + +export function validateTransactionWithSender(value: TransactionWithSenderAPI) { + if (!isTransactionWithSender(value)) throw new InvalidTransactionWithSender(value); +} + +export function isTransactionCall(value: TransactionCall): boolean { + if (!isNullish(value.from) && !isAddress(value.from)) return false; + if (!isAddress(value.to)) return false; + if (!isNullish(value.gas) && !isHexStrict(value.gas)) return false; + if (!isNullish(value.gasPrice) && !isHexStrict(value.gasPrice)) return false; + if (!isNullish(value.value) && !isHexStrict(value.value)) return false; + if (!isNullish(value.data) && !isHexStrict(value.data)) return false; + if (!isNullish(value.input) && !isHexStrict(value.input)) return false; + if (!isNullish(value.type)) return false; + if (isTransaction1559Unsigned(value as Transaction1559UnsignedAPI)) return false; + if (isTransaction2930Unsigned(value as Transaction2930UnsignedAPI)) return false; + + return true; +} + +export function validateTransactionCall(value: TransactionCall) { + if (!isTransactionCall(value)) throw new InvalidTransactionCall(value); +} + +export const validateCustomChainInfo = (transaction: InternalTransaction) => { + if (!isNullish(transaction.common)) { + if (isNullish(transaction.common.customChain)) throw new MissingCustomChainError(); + if (isNullish(transaction.common.customChain.chainId)) + throw new MissingCustomChainIdError(); + if ( + !isNullish(transaction.chainId) && + transaction.chainId !== transaction.common.customChain.chainId + ) + throw new ChainIdMismatchError({ + txChainId: transaction.chainId, + customChainId: transaction.common.customChain.chainId, + }); + } +}; +export const validateChainInfo = (transaction: InternalTransaction) => { + if ( + !isNullish(transaction.common) && + !isNullish(transaction.chain) && + !isNullish(transaction.hardfork) + ) { + throw new CommonOrChainAndHardforkError(); + } + if ( + (!isNullish(transaction.chain) && isNullish(transaction.hardfork)) || + (!isNullish(transaction.hardfork) && isNullish(transaction.chain)) + ) + throw new MissingChainOrHardforkError({ + chain: transaction.chain, + hardfork: transaction.hardfork, + }); +}; +export const validateBaseChain = (transaction: InternalTransaction) => { + if (!isNullish(transaction.common)) + if (!isNullish(transaction.common.baseChain)) + if ( + !isNullish(transaction.chain) && + transaction.chain !== transaction.common.baseChain + ) { + throw new ChainMismatchError({ + txChain: transaction.chain, + baseChain: transaction.common.baseChain, + }); + } +}; +export const validateHardfork = (transaction: InternalTransaction) => { + if (!isNullish(transaction.common)) + if (!isNullish(transaction.common.hardfork)) + if ( + !isNullish(transaction.hardfork) && + transaction.hardfork !== transaction.common.hardfork + ) { + throw new HardforkMismatchError({ + txHardfork: transaction.hardfork, + commonHardfork: transaction.common.hardfork, + }); + } +}; + +export const validateLegacyGas = (transaction: InternalTransaction) => { + if ( + // This check is verifying gas and gasPrice aren't less than 0. + isNullish(transaction.gas) || + !isUInt(transaction.gas) || + isNullish(transaction.gasPrice) || + !isUInt(transaction.gasPrice) + ) + throw new InvalidGasOrGasPrice({ + gas: transaction.gas, + gasPrice: transaction.gasPrice, + }); + if (!isNullish(transaction.maxFeePerGas) || !isNullish(transaction.maxPriorityFeePerGas)) + throw new UnsupportedFeeMarketError({ + maxFeePerGas: transaction.maxFeePerGas, + maxPriorityFeePerGas: transaction.maxPriorityFeePerGas, + }); +}; + +export const validateFeeMarketGas = (transaction: InternalTransaction) => { + // These errors come from 1.x, so they must be checked before + // InvalidMaxPriorityFeePerGasOrMaxFeePerGas to throw the same error + // for the same code executing in 1.x + if (!isNullish(transaction.gasPrice) && transaction.type === '0x2') + throw new Eip1559GasPriceError(transaction.gasPrice); + if (transaction.type === '0x0' || transaction.type === '0x1') + throw new UnsupportedFeeMarketError({ + maxFeePerGas: transaction.maxFeePerGas, + maxPriorityFeePerGas: transaction.maxPriorityFeePerGas, + }); + + if ( + isNullish(transaction.maxFeePerGas) || + !isUInt(transaction.maxFeePerGas) || + isNullish(transaction.maxPriorityFeePerGas) || + !isUInt(transaction.maxPriorityFeePerGas) + ) + throw new InvalidMaxPriorityFeePerGasOrMaxFeePerGas({ + maxPriorityFeePerGas: transaction.maxPriorityFeePerGas, + maxFeePerGas: transaction.maxFeePerGas, + }); +}; + +/** + * This method checks if all required gas properties are present for either + * legacy gas (type 0x0 and 0x1) OR fee market transactions (0x2) + */ +export const validateGas = (transaction: InternalTransaction) => { + const gasPresent = !isNullish(transaction.gas) || !isNullish(transaction.gasLimit); + const legacyGasPresent = gasPresent && !isNullish(transaction.gasPrice); + const feeMarketGasPresent = + gasPresent && + !isNullish(transaction.maxPriorityFeePerGas) && + !isNullish(transaction.maxFeePerGas); + + if (!legacyGasPresent && !feeMarketGasPresent) + throw new MissingGasError({ + gas: transaction.gas, + gasPrice: transaction.gasPrice, + maxPriorityFeePerGas: transaction.maxPriorityFeePerGas, + maxFeePerGas: transaction.maxFeePerGas, + }); + + if (legacyGasPresent && feeMarketGasPresent) + throw new TransactionGasMismatchError({ + gas: transaction.gas, + gasPrice: transaction.gasPrice, + maxPriorityFeePerGas: transaction.maxPriorityFeePerGas, + maxFeePerGas: transaction.maxFeePerGas, + }); + + (legacyGasPresent ? validateLegacyGas : validateFeeMarketGas)(transaction); + (!isNullish(transaction.type) && transaction.type > '0x1' + ? validateFeeMarketGas + : validateLegacyGas)(transaction); +}; + +export const validateTransactionForSigning = ( + transaction: InternalTransaction, + overrideMethod?: (transaction: InternalTransaction) => void, +) => { + if (!isNullish(overrideMethod)) { + overrideMethod(transaction); + return; + } + + if (typeof transaction !== 'object' || isNullish(transaction)) + throw new InvalidTransactionObjectError(transaction); + + validateCustomChainInfo(transaction); + validateChainInfo(transaction); + validateBaseChain(transaction); + validateHardfork(transaction); + + const formattedTransaction = formatTransaction(transaction as Transaction, ETH_DATA_FORMAT); + validateGas(formattedTransaction); + + if ( + isNullish(formattedTransaction.nonce) || + isNullish(formattedTransaction.chainId) || + formattedTransaction.nonce.startsWith('-') || + formattedTransaction.chainId.startsWith('-') + ) + throw new InvalidNonceOrChainIdError({ + nonce: transaction.nonce, + chainId: transaction.chainId, + }); +}; diff --git a/packages/web3-eth/src/web3_eth.ts b/packages/web3-eth/src/web3_eth.ts new file mode 100644 index 00000000000..c4b3b6a92f8 --- /dev/null +++ b/packages/web3-eth/src/web3_eth.ts @@ -0,0 +1,1656 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Disabling because returnTypes must be last param to match 1.x params +/* eslint-disable default-param-last */ + +import { + SupportedProviders, + Address, + Bytes, + Filter, + HexString32Bytes, + HexString8Bytes, + Numbers, + BlockNumberOrTag, + LogsOutput, + Transaction, + TransactionCall, + Web3EthExecutionAPI, + TransactionWithFromLocalWalletIndex, + TransactionWithToLocalWalletIndex, + TransactionWithFromAndToLocalWalletIndex, + TransactionForAccessList, + DataFormat, + DEFAULT_RETURN_FORMAT, + Eip712TypedData, +} from 'web3-types'; +import { isSupportedProvider, Web3Context, Web3ContextInitOptions } from 'web3-core'; +import { TransactionNotFound } from 'web3-errors'; +import { toChecksumAddress, isNullish } from 'web3-utils'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import * as rpcMethodsWrappers from './rpc_method_wrappers.js'; +import { SendTransactionOptions } from './types.js'; +import { + LogsSubscription, + NewPendingTransactionsSubscription, + NewHeadsSubscription, + SyncingSubscription, +} from './web3_subscriptions.js'; + +export type RegisteredSubscription = { + logs: typeof LogsSubscription; + newPendingTransactions: typeof NewPendingTransactionsSubscription; + pendingTransactions: typeof NewPendingTransactionsSubscription; + newHeads: typeof NewHeadsSubscription; + newBlockHeaders: typeof NewHeadsSubscription; + syncing: typeof SyncingSubscription; +}; + +export const registeredSubscriptions = { + logs: LogsSubscription, + newPendingTransactions: NewPendingTransactionsSubscription, + newHeads: NewHeadsSubscription, + syncing: SyncingSubscription, + pendingTransactions: NewPendingTransactionsSubscription, // the same as newPendingTransactions. just for support API like in version 1.x + newBlockHeaders: NewHeadsSubscription, // the same as newHeads. just for support API like in version 1.x +}; + +export class Web3Eth extends Web3Context { + public constructor( + providerOrContext?: SupportedProviders | Web3ContextInitOptions | string, + ) { + if ( + typeof providerOrContext === 'string' || + isSupportedProvider(providerOrContext as SupportedProviders) + ) { + super({ + provider: providerOrContext as SupportedProviders, + registeredSubscriptions, + }); + + return; + } + + if ((providerOrContext as Web3ContextInitOptions).registeredSubscriptions) { + super(providerOrContext as Web3ContextInitOptions); + return; + } + + super({ + ...(providerOrContext as Web3ContextInitOptions), + registeredSubscriptions, + }); + } + + /** + * @returns Returns the ethereum protocol version of the node. + * + * ```ts + * web3.eth.getProtocolVersion().then(console.log); + * > "63" + * ``` + */ + public async getProtocolVersion() { + return ethRpcMethods.getProtocolVersion(this.requestManager); + } + + // TODO Add returnFormat parameter + /** + * Checks if the node is currently syncing. + * + * @returns Either a {@link SyncingStatusAPI}, or `false`. + * + * ```ts + * web3.eth.isSyncing().then(console.log); + * > { + * startingBlock: 100, + * currentBlock: 312, + * highestBlock: 512, + * knownStates: 234566, + * pulledStates: 123455 + * } + * ``` + */ + public async isSyncing() { + return ethRpcMethods.getSyncing(this.requestManager); + } + + // TODO consider adding returnFormat parameter (to format address as bytes) + /** + * @returns Returns the coinbase address to which mining rewards will go. + * + * ```ts + * web3.eth.getCoinbase().then(console.log); + * > "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe" + * ``` + */ + public async getCoinbase() { + return ethRpcMethods.getCoinbase(this.requestManager); + } + + /** + * Checks whether the node is mining or not. + * + * @returns `true` if the node is mining, otherwise `false`. + * + * ```ts + * web3.eth.isMining().then(console.log); + * > true + * ``` + */ + public async isMining() { + return ethRpcMethods.getMining(this.requestManager); + } + + /** + * @deprecated Will be removed in the future, please use {@link Web3Eth.getHashRate} method instead. + * + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The number of hashes per second that the node is mining with. + * + * ```ts + * web3.eth.getHashrate().then(console.log); + * > 493736n + * + * web3.eth.getHashrate({ number: FMT_NUMBER.HEX , bytes: FMT_BYTES.HEX }).then(console.log); + * > "0x788a8" + * ``` + */ + public async getHashrate( + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return this.getHashRate(returnFormat); + } + + /** + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The number of hashes per second that the node is mining with. + * + * ```ts + * web3.eth.getHashRate().then(console.log); + * > 493736n + * + * web3.eth.getHashRate({ number: FMT_NUMBER.HEX , bytes: FMT_BYTES.HEX }).then(console.log); + * > "0x788a8" + * ``` + */ + public async getHashRate( + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getHashRate(this, returnFormat); + } + + /** + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The gas price determined by the last few blocks median gas price. + * + * ```ts + * web3.eth.getGasPrice().then(console.log); + * > 20000000000n + * + * web3.eth.getGasPrice({ number: FMT_NUMBER.HEX , bytes: FMT_BYTES.HEX }).then(console.log); + * > "0x4a817c800" + * ``` + */ + public async getGasPrice( + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getGasPrice(this, returnFormat); + } + + /** + * @returns A list of accounts the node controls (addresses are checksummed). + * + * ```ts + * web3.eth.getAccounts().then(console.log); + * > ["0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", "0xDCc6960376d6C6dEa93647383FfB245CfCed97Cf"] + * ``` + */ + public async getAccounts() { + const hexAddresses = (await ethRpcMethods.getAccounts(this.requestManager)) ?? []; + return hexAddresses.map(address => toChecksumAddress(address)); + } + + /** + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The current block number. + * + * ```ts + * web3.eth.getBlockNumber().then(console.log); + * > 2744n + * + * web3.eth.getBlockNumber({ number: FMT_NUMBER.HEX , bytes: FMT_BYTES.HEX }).then(console.log); + * > "0xab8" + * ``` + */ + public async getBlockNumber( + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getBlockNumber(this, returnFormat); + } + + /** + * Get the balance of an address at a given block. + * + * @param address The address to get the balance of. + * @param blockNumber ({@link BlockNumberOrTag} defaults to {@link Web3Eth.defaultBlock}) Specifies what block to use as the current state for the balance query. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The current balance for the given address in `wei`. + * + * ```ts + * web3.eth.getBalance("0x407d73d8a49eeb85d32cf465507dd71d507100c1").then(console.log); + * > 1000000000000n + * + * web3.eth.getBalance("0x407d73d8a49eeb85d32cf465507dd71d507100c1").then(console.log); + * > "0xe8d4a51000" + * ``` + */ + public async getBalance( + address: Address, + blockNumber: BlockNumberOrTag = this.defaultBlock, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getBalance(this, address, blockNumber, returnFormat); + } + + /** + * Get the storage at a specific position of an address. + * + * @param address The address to get the storage from. + * @param storageSlot The index position of the storage. + * @param blockNumber ({@link BlockNumberOrTag} defaults to {@link Web3Eth.defaultBlock}) Specifies what block to use as the current state for the storage query. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The value in storage at the given position. + * + * ```ts + * web3.eth.getStorageAt("0x033456732123ffff2342342dd12342434324234234fd234fd23fd4f23d4234", 0).then(console.log); + * > "0x033456732123ffff2342342dd12342434324234234fd234fd23fd4f23d4234" + * + * web3.eth.getStorageAt( + * "0x033456732123ffff2342342dd12342434324234234fd234fd23fd4f23d4234", + * 0, + * undefined, + * { number: FMT_NUMBER.HEX , bytes: FMT_BYTES.UINT8ARRAY } + * ).then(console.log); + * > Uint8Array(31) [ + * 3, 52, 86, 115, 33, 35, 255, 255, + * 35, 66, 52, 45, 209, 35, 66, 67, + * 67, 36, 35, 66, 52, 253, 35, 79, + * 210, 63, 212, 242, 61, 66, 52 + * ] + * ``` + */ + public async getStorageAt( + address: Address, + storageSlot: Numbers, + blockNumber: BlockNumberOrTag = this.defaultBlock, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getStorageAt( + this, + address, + storageSlot, + blockNumber, + returnFormat, + ); + } + + /** + * Get the code at a specific address. + * + * @param address The address to get the code from. + * @param blockNumber ({@link BlockNumberOrTag} defaults to {@link Web3Eth.defaultBlock}) Specifies what block to use as the current state for the code query. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The [data](https://ethereum.org/en/developers/docs/transactions/#the-data-field) at the provided `address`. + * + * ```ts + * web3.eth.getCode("0x033456732123ffff2342342dd12342434324234234fd234fd23fd4f23d4234").then(console.log); + * > "0x600160008035811a818181146012578301005b601b6001356025565b8060005260206000f25b600060078202905091905056" + * + * web3.eth.getCode( + * "0x407d73d8a49eeb85d32cf465507dd71d507100c1", + * undefined, + * { number: FMT_NUMBER.HEX , bytes: FMT_BYTES.UINT8ARRAY } + * ).then(console.log); + * > Uint8Array(50) [ + * 96, 1, 96, 0, 128, 53, 129, 26, 129, 129, 129, + * 20, 96, 18, 87, 131, 1, 0, 91, 96, 27, 96, + * 1, 53, 96, 37, 86, 91, 128, 96, 0, 82, 96, + * 32, 96, 0, 242, 91, 96, 0, 96, 7, 130, 2, + * 144, 80, 145, 144, 80, 86 + * ] + * ``` + */ + public async getCode( + address: Address, + blockNumber: BlockNumberOrTag = this.defaultBlock, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getCode(this, address, blockNumber, returnFormat); + } + + /** + * Retrieves a {@link Block} matching the provided block number, block hash or block tag. + * + * @param block The {@link BlockNumberOrTag} (defaults to {@link Web3Eth.defaultBlock}) or block hash of the desired block. + * @param hydrated If specified `true`, the returned block will contain all transactions as objects. If `false` it will only contain transaction hashes. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted (does not format transaction objects or hashes). + * @returns A {@link Block} object matching the provided block number or block hash. + * + * ```ts + * web3.eth.getBlock(0).then(console.log); + * > { + * hash: '0x7dbfdc6a7a67a670cb9b0c3f81ca60c007762f1e4e598cb027a470678ff26d0d', + * parentHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + * sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + * miner: '0x0000000000000000000000000000000000000000', + * stateRoot: '0x5ed9882897d363c4632a6e67fba6203df61bd994813dcf048da59be442a9c6c4', + * transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + * receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + * logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + * difficulty: 1n, + * number: 0n, + * gasLimit: 30000000n, + * gasUsed: 0n, + * timestamp: 1658281638n, + * extraData: '0x', + * mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + * nonce: 0n, + * totalDifficulty: 1n, + * baseFeePerGas: 1000000000n, + * size: 514n, + * transactions: [], + * uncles: [] + * } + * + * web3.eth.getBlock( + * "0x7dbfdc6a7a67a670cb9b0c3f81ca60c007762f1e4e598cb027a470678ff26d0d", + * false, + * { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX } + * ).then(console.log); + * > { + * hash: '0x7dbfdc6a7a67a670cb9b0c3f81ca60c007762f1e4e598cb027a470678ff26d0d', + * parentHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + * sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + * miner: '0x0000000000000000000000000000000000000000', + * stateRoot: '0x5ed9882897d363c4632a6e67fba6203df61bd994813dcf048da59be442a9c6c4', + * transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + * receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + * logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + * difficulty: 1, + * number: 0, + * gasLimit: 30000000, + * gasUsed: 0, + * timestamp: 1658281638, + * extraData: '0x', + * mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + * nonce: 0, + * totalDifficulty: 1, + * baseFeePerGas: 1000000000, + * size: 514, + * transactions: [], + * uncles: [] + * } + * ``` + */ + public async getBlock( + block: HexString32Bytes | BlockNumberOrTag = this.defaultBlock, + hydrated = false, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getBlock(this, block, hydrated, returnFormat); + } + + /** + * @param block The {@link BlockNumberOrTag} (defaults to {@link Web3Eth.defaultBlock}) or block hash of the desired block. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The number of transactions in the provided block. + * + * ```ts + * web3.eth.getBlockTransactionCount("0x407d73d8a49eeb85d32cf465507dd71d507100c1").then(console.log); + * > 1n + * + * web3.eth.getBlockTransactionCount( + * "0x407d73d8a49eeb85d32cf465507dd71d507100c1", + * { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX } + * ).then(console.log); + * > 1 + * ``` + */ + public async getBlockTransactionCount< + ReturnFormat extends DataFormat = typeof DEFAULT_RETURN_FORMAT, + >( + block: HexString32Bytes | BlockNumberOrTag = this.defaultBlock, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getBlockTransactionCount(this, block, returnFormat); + } + + /** + * @param block The {@link BlockNumberOrTag} (defaults to {@link Web3Eth.defaultBlock}) or block hash of the desired block. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The number of [uncles](https://ethereum.org/en/glossary/#ommer) in the provided block. + * + * ```ts + * web3.eth.getBlockUncleCount("0x407d73d8a49eeb85d32cf465507dd71d507100c1").then(console.log); + * > 1n + * + * web3.eth.getBlockUncleCount( + * "0x407d73d8a49eeb85d32cf465507dd71d507100c1", + * { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX } + * ).then(console.log); + * > 1 + * ``` + */ + public async getBlockUncleCount( + block: HexString32Bytes | BlockNumberOrTag = this.defaultBlock, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getBlockUncleCount(this, block, returnFormat); + } + + /** + * + * @param block The {@link BlockNumberOrTag} (defaults to {@link Web3Eth.defaultBlock}) or block hash of the desired block. + * @param uncleIndex The index position of the uncle. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns A blocks [uncle](https://ethereum.org/en/glossary/#ommer) by a given uncle index position. + * + * ```ts + * web3.eth.getUncle(0, 1).then(console.log); + * > { + * hash: '0x7dbfdc6a7a67a670cb9b0c3f81ca60c007762f1e4e598cb027a470678ff26d0d', + * parentHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + * sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + * miner: '0x0000000000000000000000000000000000000000', + * stateRoot: '0x5ed9882897d363c4632a6e67fba6203df61bd994813dcf048da59be442a9c6c4', + * transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + * receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + * logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + * difficulty: 1n, + * number: 0n, + * gasLimit: 30000000n, + * gasUsed: 0n, + * timestamp: 1658281638n, + * extraData: '0x', + * mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + * nonce: 0n, + * totalDifficulty: 1n, + * baseFeePerGas: 1000000000n, + * size: 514n, + * transactions: [], + * uncles: [] + * } + * + * web3.eth.getUncle( + * "0x7dbfdc6a7a67a670cb9b0c3f81ca60c007762f1e4e598cb027a470678ff26d0d", + * 1, + * { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX } + * ).then(console.log); + * > { + * hash: '0x7dbfdc6a7a67a670cb9b0c3f81ca60c007762f1e4e598cb027a470678ff26d0d', + * parentHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + * sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + * miner: '0x0000000000000000000000000000000000000000', + * stateRoot: '0x5ed9882897d363c4632a6e67fba6203df61bd994813dcf048da59be442a9c6c4', + * transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + * receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + * logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + * difficulty: 1, + * number: 0, + * gasLimit: 30000000, + * gasUsed: 0, + * timestamp: 1658281638, + * extraData: '0x', + * mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + * nonce: 0, + * totalDifficulty: 1, + * baseFeePerGas: 1000000000, + * size: 514, + * transactions: [], + * uncles: [] + * } + * ``` + */ + public async getUncle( + block: HexString32Bytes | BlockNumberOrTag = this.defaultBlock, + uncleIndex: Numbers, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getUncle(this, block, uncleIndex, returnFormat); + } + + /** + * @param transactionHash The hash of the desired transaction. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The desired transaction object. + * + * ```ts + * web3.eth.getTransaction('0x73aea70e969941f23f9d24103e91aa1f55c7964eb13daf1c9360c308a72686dc').then(console.log); + * { + * hash: '0x73aea70e969941f23f9d24103e91aa1f55c7964eb13daf1c9360c308a72686dc', + * type: 0n, + * nonce: 0n, + * blockHash: '0x43202bd16b6bd54bea1b310736bd78bdbe93a64ad940f7586739d9eb25ad8d00', + * blockNumber: 1n, + * transactionIndex: 0n, + * from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + * to: '0x6f1df96865d09d21e8f3f9a7fba3b17a11c7c53c', + * value: 1n, + * gas: 90000n, + * gasPrice: 2000000000n, + * input: '0x', + * v: 2709n, + * r: '0x8b336c290f6d7b2af3ccb2c02203a8356cc7d5b150ab19cce549d55636a3a78c', + * s: '0x5a83c6f816befc5cd4b0c997a347224a8aa002e5799c4b082a3ec726d0e9531d' + * } + * + * web3.eth.getTransaction( + * web3.utils.hexToBytes("0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400"), + * { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX } + * ).then(console.log); + * { + * hash: '0x73aea70e969941f23f9d24103e91aa1f55c7964eb13daf1c9360c308a72686dc', + * type: 0, + * nonce: 0, + * blockHash: '0x43202bd16b6bd54bea1b310736bd78bdbe93a64ad940f7586739d9eb25ad8d00', + * blockNumber: 1, + * transactionIndex: 0, + * from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + * to: '0x6f1df96865d09d21e8f3f9a7fba3b17a11c7c53c', + * value: 1, + * gas: 90000, + * gasPrice: 2000000000, + * input: '0x', + * v: 2709, + * r: '0x8b336c290f6d7b2af3ccb2c02203a8356cc7d5b150ab19cce549d55636a3a78c', + * s: '0x5a83c6f816befc5cd4b0c997a347224a8aa002e5799c4b082a3ec726d0e9531d' + * } + * ``` + */ + public async getTransaction( + transactionHash: Bytes, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + const response = await rpcMethodsWrappers.getTransaction( + this, + transactionHash, + returnFormat, + ); + + if (!response) throw new TransactionNotFound(); + + return response; + } + + /** + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns A list of pending transactions. + * + * ```ts + * web3.eth.getPendingTransactions().then(console.log); + * > [ + * { + * hash: '0x73aea70e969941f23f9d24103e91aa1f55c7964eb13daf1c9360c308a72686dc', + * type: 0n, + * nonce: 0n, + * blockHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + * blockNumber: null, + * transactionIndex: 0n, + * from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + * to: '0x6f1df96865d09d21e8f3f9a7fba3b17a11c7c53c', + * value: 1n, + * gas: 90000n, + * gasPrice: 2000000000n, + * input: '0x', + * v: 2709n, + * r: '0x8b336c290f6d7b2af3ccb2c02203a8356cc7d5b150ab19cce549d55636a3a78c', + * s: '0x5a83c6f816befc5cd4b0c997a347224a8aa002e5799c4b082a3ec726d0e9531d' + * }, + * { + * hash: '0xdf7756865c2056ce34c4eabe4eff42ad251a9f920a1c620c00b4ea0988731d3f', + * type: 0n, + * nonce: 1n, + * blockHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + * blockNumber: null, + * transactionIndex: 0n, + * from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + * to: '0x6f1df96865d09d21e8f3f9a7fba3b17a11c7c53c', + * value: 1n, + * gas: 90000n, + * gasPrice: 2000000000n, + * input: '0x', + * v: 2710n, + * r: '0x55ac19fade21db035a1b7ea0a8d49e265e05dbb926e75f273f836ad67ce5c96a', + * s: '0x6550036a7c3fd426d5c3d35d96a7075cd673957620b7889846a980d2d017ec08' + * } + * ] + * + * * web3.eth.getPendingTransactions({ number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX }).then(console.log); + * > [ + * { + * hash: '0x73aea70e969941f23f9d24103e91aa1f55c7964eb13daf1c9360c308a72686dc', + * type: 0, + * nonce: 0, + * blockHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + * blockNumber: null, + * transactionIndex: 0, + * from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + * to: '0x6f1df96865d09d21e8f3f9a7fba3b17a11c7c53c', + * value: 1, + * gas: 90000, + * gasPrice: 2000000000, + * input: '0x', + * v: 2709, + * r: '0x8b336c290f6d7b2af3ccb2c02203a8356cc7d5b150ab19cce549d55636a3a78c', + * s: '0x5a83c6f816befc5cd4b0c997a347224a8aa002e5799c4b082a3ec726d0e9531d' + * }, + * { + * hash: '0xdf7756865c2056ce34c4eabe4eff42ad251a9f920a1c620c00b4ea0988731d3f', + * type: 0, + * nonce: 1, + * blockHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + * blockNumber: null, + * transactionIndex: 0, + * from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + * to: '0x6f1df96865d09d21e8f3f9a7fba3b17a11c7c53c', + * value: 1, + * gas: 90000, + * gasPrice: 2000000000, + * input: '0x', + * v: 2710, + * r: '0x55ac19fade21db035a1b7ea0a8d49e265e05dbb926e75f273f836ad67ce5c96a', + * s: '0x6550036a7c3fd426d5c3d35d96a7075cd673957620b7889846a980d2d017ec08' + * } + * ] + * ``` + */ + public async getPendingTransactions< + ReturnFormat extends DataFormat = typeof DEFAULT_RETURN_FORMAT, + >(returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat) { + return rpcMethodsWrappers.getPendingTransactions(this, returnFormat); + } + + /** + * @param block The {@link BlockNumberOrTag} (defaults to {@link Web3Eth.defaultBlock}) or block hash of the desired block. + * @param transactionIndex The index position of the transaction. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The desired transaction object. + * + * ```ts + * web3.eth.getTransactionFromBlock('0x43202bd16b6bd54bea1b310736bd78bdbe93a64ad940f7586739d9eb25ad8d00', 0).then(console.log); + * { + * hash: '0x73aea70e969941f23f9d24103e91aa1f55c7964eb13daf1c9360c308a72686dc', + * type: 0n, + * nonce: 0n, + * blockHash: '0x43202bd16b6bd54bea1b310736bd78bdbe93a64ad940f7586739d9eb25ad8d00', + * blockNumber: 1n, + * transactionIndex: 0n, + * from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + * to: '0x6f1df96865d09d21e8f3f9a7fba3b17a11c7c53c', + * value: 1n, + * gas: 90000n, + * gasPrice: 2000000000n, + * input: '0x', + * v: 2709n, + * r: '0x8b336c290f6d7b2af3ccb2c02203a8356cc7d5b150ab19cce549d55636a3a78c', + * s: '0x5a83c6f816befc5cd4b0c997a347224a8aa002e5799c4b082a3ec726d0e9531d' + * } + * + * web3.eth.getTransactionFromBlock( + * hexToBytes("0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400"), + * 0, + * { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX } + * ).then(console.log); + * { + * hash: '0x73aea70e969941f23f9d24103e91aa1f55c7964eb13daf1c9360c308a72686dc', + * type: 0, + * nonce: 0, + * blockHash: '0x43202bd16b6bd54bea1b310736bd78bdbe93a64ad940f7586739d9eb25ad8d00', + * blockNumber: 1, + * transactionIndex: 0, + * from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + * to: '0x6f1df96865d09d21e8f3f9a7fba3b17a11c7c53c', + * value: 1, + * gas: 90000, + * gasPrice: 2000000000, + * input: '0x', + * v: 2709, + * r: '0x8b336c290f6d7b2af3ccb2c02203a8356cc7d5b150ab19cce549d55636a3a78c', + * s: '0x5a83c6f816befc5cd4b0c997a347224a8aa002e5799c4b082a3ec726d0e9531d' + * } + * ``` + */ + public async getTransactionFromBlock< + ReturnFormat extends DataFormat = typeof DEFAULT_RETURN_FORMAT, + >( + block: HexString32Bytes | BlockNumberOrTag = this.defaultBlock, + transactionIndex: Numbers, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getTransactionFromBlock( + this, + block, + transactionIndex, + returnFormat, + ); + } + + /** + * @param transactionHash Hash of the transaction to retrieve the receipt for. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The desired {@link TransactionReceipt} object. + * + * ```ts + * web3.eth.getTransactionReceipt("0xdf7756865c2056ce34c4eabe4eff42ad251a9f920a1c620c00b4ea0988731d3f").then(console.log); + * > { + * transactionHash: '0xdf7756865c2056ce34c4eabe4eff42ad251a9f920a1c620c00b4ea0988731d3f', + * transactionIndex: 0n, + * blockNumber: 2n, + * blockHash: '0xeb1565a08b23429552dafa92e32409f42eb43944f7611963c63ce40e7243941a', + * from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + * to: '0x6f1df96865d09d21e8f3f9a7fba3b17a11c7c53c', + * cumulativeGasUsed: 21000n, + * gasUsed: 21000n, + * logs: [], + * logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + * status: 1n, + * effectiveGasPrice: 2000000000n, + * type: 0n + * } + * + * web3.eth.getTransactionReceipt( + * "0xdf7756865c2056ce34c4eabe4eff42ad251a9f920a1c620c00b4ea0988731d3f", + * { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX } + * ).then(console.log); + * > { + * transactionHash: '0xdf7756865c2056ce34c4eabe4eff42ad251a9f920a1c620c00b4ea0988731d3f', + * transactionIndex: 0, + * blockNumber: 2, + * blockHash: '0xeb1565a08b23429552dafa92e32409f42eb43944f7611963c63ce40e7243941a', + * from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + * to: '0x6f1df96865d09d21e8f3f9a7fba3b17a11c7c53c', + * cumulativeGasUsed: 21000, + * gasUsed: 21000, + * logs: [], + * logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + * status: 1, + * effectiveGasPrice: 2000000000, + * type: 0n + * } + * ``` + */ + public async getTransactionReceipt< + ReturnFormat extends DataFormat = typeof DEFAULT_RETURN_FORMAT, + >(transactionHash: Bytes, returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat) { + const response = await rpcMethodsWrappers.getTransactionReceipt( + this, + transactionHash, + returnFormat, + ); + + if (!response) throw new TransactionNotFound(); + + return response; + } + + /** + * @param address The address to get the number of transactions for. + * @param blockNumber ({@link BlockNumberOrTag} defaults to {@link Web3Eth.defaultBlock}) Specifies what block to use as the current state for the query. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The number of transactions sent from the provided address. + * + * ```ts + * web3.eth.getTransactionCount("0x407d73d8a49eeb85d32cf465507dd71d507100c1").then(console.log); + * > 1n + * + * web3.eth.getTransactionCount( + * "0x407d73d8a49eeb85d32cf465507dd71d507100c1", + * undefined, + * { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX } + * ).then(console.log); + * > 1 + * ``` + */ + public async getTransactionCount< + ReturnFormat extends DataFormat = typeof DEFAULT_RETURN_FORMAT, + >( + address: Address, + blockNumber: BlockNumberOrTag = this.defaultBlock, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getTransactionCount(this, address, blockNumber, returnFormat); + } + + /** + * @param transaction The {@link Transaction}, {@link TransactionWithFromLocalWalletIndex}, {@link TransactionWithToLocalWalletIndex} or {@link TransactionWithFromAndToLocalWalletIndex} to send. __Note:__ In the `to` and `from` fields when hex strings are used, it is assumed they are addresses, for any other form (number, string number, etc.) it is assumed they are wallet indexes. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @param options A configuration object used to change the behavior of the `sendTransaction` method. + * @returns If `await`ed or `.then`d (i.e. the promise resolves), the transaction hash is returned. + * ```ts + * const transaction = { + * from: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + * to: '0x6f1DF96865D09d21e8f3f9a7fbA3b17A11c7C53C', + * value: '0x1' + * } + * + * const transactionHash = await web3.eth.sendTransaction(transaction); + * console.log(transactionHash); + * > 0xdf7756865c2056ce34c4eabe4eff42ad251a9f920a1c620c00b4ea0988731d3f + * + * web3.eth.sendTransaction(transaction).then(console.log); + * > 0xdf7756865c2056ce34c4eabe4eff42ad251a9f920a1c620c00b4ea0988731d3f + * + * web3.eth.sendTransaction(transaction).catch(console.log); + * > + * + * // Example using options.ignoreGasPricing = true + * web3.eth.sendTransaction(transaction, undefined, { ignoreGasPricing: true }).then(console.log); + * > 0xdf7756865c2056ce34c4eabe4eff42ad251a9f920a1c620c00b4ea0988731d3f + * ``` + * + * + * Otherwise, a {@link Web3PromiEvent} is returned which has several events than can be listened to using the `.on` syntax, such as: + * - `sending` + * ```ts + * web3.eth.sendTransaction(transaction).on('sending', transactionToBeSent => console.log(transactionToBeSent)); + * > { + * from: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + * to: '0x6f1DF96865D09d21e8f3f9a7fbA3b17A11c7C53C', + * value: '0x1', + * gasPrice: '0x77359400', + * maxPriorityFeePerGas: undefined, + * maxFeePerGas: undefined + * } + * ``` + * - `sent` + * ```ts + * web3.eth.sendTransaction(transaction).on('sent', sentTransaction => console.log(sentTransaction)); + * > { + * from: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + * to: '0x6f1DF96865D09d21e8f3f9a7fbA3b17A11c7C53C', + * value: '0x1', + * gasPrice: '0x77359400', + * maxPriorityFeePerGas: undefined, + * maxFeePerGas: undefined + * } + * ``` + * - `transactionHash` + * ```ts + * web3.eth.sendTransaction(transaction).on('transactionHash', transactionHash => console.log(transactionHash)); + * > 0xdf7756865c2056ce34c4eabe4eff42ad251a9f920a1c620c00b4ea0988731d3f + * ``` + * - `receipt` + * ```ts + * web3.eth.sendTransaction(transaction).on('receipt', receipt => console.log(receipt)); + * > { + * transactionHash: '0xdf7756865c2056ce34c4eabe4eff42ad251a9f920a1c620c00b4ea0988731d3f', + * transactionIndex: 0n, + * blockNumber: 2n, + * blockHash: '0xeb1565a08b23429552dafa92e32409f42eb43944f7611963c63ce40e7243941a', + * from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + * to: '0x6f1df96865d09d21e8f3f9a7fba3b17a11c7c53c', + * cumulativeGasUsed: 21000n, + * gasUsed: 21000n, + * logs: [], + * logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + * status: 1n, + * effectiveGasPrice: 2000000000n, + * type: 0n + * } + * ``` + * - `confirmation` + * ```ts + * web3.eth.sendTransaction(transaction).on('confirmation', confirmation => console.log(confirmation)); + * > { + * confirmations: 1n, + * receipt: { + * transactionHash: '0xb4a3a35ae0f3e77ef0ff7be42010d948d011b21a4e341072ee18717b67e99ab8', + * transactionIndex: 0n, + * blockNumber: 5n, + * blockHash: '0xb57fbe6f145cefd86a305a9a024a4351d15d4d39607d7af53d69a319bc3b5548', + * from: '0x6e599da0bff7a6598ac1224e4985430bf16458a4', + * to: '0x6f1df96865d09d21e8f3f9a7fba3b17a11c7c53c', + * cumulativeGasUsed: 21000n, + * gasUsed: 21000n, + * logs: [], + * logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + * status: 1n, + * effectiveGasPrice: 2000000000n, + * type: 0n + * }, + * latestBlockHash: '0xb57fbe6f145cefd86a305a9a024a4351d15d4d39607d7af53d69a319bc3b5548' + * } + * ``` + * - `error` + * ```ts + * web3.eth.sendTransaction(transaction).on('error', error => console.log); + * > + * ``` + */ + public sendTransaction( + transaction: + | Transaction + | TransactionWithFromLocalWalletIndex + | TransactionWithToLocalWalletIndex + | TransactionWithFromAndToLocalWalletIndex, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + options?: SendTransactionOptions, + ) { + return rpcMethodsWrappers.sendTransaction(this, transaction, returnFormat, options); + } + + /** + * @param transaction Signed transaction in one of the valid {@link Bytes} format. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns If `await`ed or `.then`d (i.e. the promise resolves), the transaction hash is returned. + * ```ts + * const signedTransaction = "0xf86580843b9aca0182520894e899f0130fd099c0b896b2ce4e5e15a25b23139a0180820a95a03a42d53ca5b71f845e1cd4c65359b05446a85d16881372d3bfaab8980935cb04a0711497bc8dd3b541152e2fed14fe650a647f1f0edab0d386ad9506f0e642410f" + * + * const transactionHash = await web3.eth.sendSignedTransaction(signedTransaction); + * console.log(transactionHash); + * > 0xed8c241ea44d57f4605dc22c63500de46254d6c7844fd65fa438b128c80cf700 + * + * web3.eth.sendSignedTransaction(signedTransaction).then(console.log); + * > 0xed8c241ea44d57f4605dc22c63500de46254d6c7844fd65fa438b128c80cf700 + * + * web3.eth.sendSignedTransaction(signedTransaction).catch(console.log); + * > + * ``` + * + * + * Otherwise, a {@link Web3PromiEvent} is returned which has several events than can be listened to using the `.on` syntax, such as: + * - `sending` + * ```ts + * web3.eth.sendSignedTransaction(signedTransaction).on('sending', transactionToBeSent => console.log(transactionToBeSent)); + * > "0xf86580843b9aca0182520894e899f0130fd099c0b896b2ce4e5e15a25b23139a0180820a95a03a42d53ca5b71f845e1cd4c65359b05446a85d16881372d3bfaab8980935cb04a0711497bc8dd3b541152e2fed14fe650a647f1f0edab0d386ad9506f0e642410f" + * ``` + * - `sent` + * ```ts + * web3.eth.sendSignedTransaction(signedTransaction).on('sent', sentTransaction => console.log(sentTransaction)); + * > "0xf86580843b9aca0182520894e899f0130fd099c0b896b2ce4e5e15a25b23139a0180820a95a03a42d53ca5b71f845e1cd4c65359b05446a85d16881372d3bfaab8980935cb04a0711497bc8dd3b541152e2fed14fe650a647f1f0edab0d386ad9506f0e642410f" + * ``` + * - `transactionHash` + * ```ts + * web3.eth.sendSignedTransaction(signedTransaction).on('transactionHash', transactionHash => console.log(transactionHash)); + * > 0xed8c241ea44d57f4605dc22c63500de46254d6c7844fd65fa438b128c80cf700 + * ``` + * - `receipt` + * ```ts + * web3.eth.sendSignedTransaction(signedTransaction).on('receipt', receipt => console.log(receipt)); + * > { + * blockHash: '0xff2b1687995d81066361bc6affe4455746120a7d4bb75fc938211a2692a50081', + * blockNumber: 1n, + * cumulativeGasUsed: 21000n, + * effectiveGasPrice: 1000000001n, + * from: '0xe899f0130fd099c0b896b2ce4e5e15a25b23139a', + * gasUsed: 21000n, + * logs: [], + * logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + * status: 1n, + * to: '0xe899f0130fd099c0b896b2ce4e5e15a25b23139a', + * transactionHash: '0xed8c241ea44d57f4605dc22c63500de46254d6c7844fd65fa438b128c80cf700', + * transactionIndex: 0n, + * type: 0n + * } + * ``` + * - `confirmation` + * ```ts + * web3.eth.sendSignedTransaction(signedTransaction).on('confirmation', confirmation => console.log(confirmation)); + * > { + * confirmations: 1n, + * receipt: { + * blockHash: '0xff2b1687995d81066361bc6affe4455746120a7d4bb75fc938211a2692a50081', + * blockNumber: 1n, + * cumulativeGasUsed: 21000n, + * effectiveGasPrice: 1000000001n, + * from: '0xe899f0130fd099c0b896b2ce4e5e15a25b23139a', + * gasUsed: 21000n, + * logs: [], + * logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + * status: 1n, + * to: '0xe899f0130fd099c0b896b2ce4e5e15a25b23139a', + * transactionHash: '0xed8c241ea44d57f4605dc22c63500de46254d6c7844fd65fa438b128c80cf700', + * transactionIndex: 0n, + * type: 0n + * }, + * latestBlockHash: '0xff2b1687995d81066361bc6affe4455746120a7d4bb75fc938211a2692a50081' + * } + * ``` + * - `error` + * ```ts + * web3.eth.sendSignedTransaction(signedTransaction).on('error', error => console.log(error)); + * > + * ``` + */ + public sendSignedTransaction( + transaction: Bytes, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + options?: SendTransactionOptions, + ) { + return rpcMethodsWrappers.sendSignedTransaction(this, transaction, returnFormat, options); + } + + /** + * @param message Data to sign in one of the valid {@link Bytes} format. + * @param address Address to sign data with, can be an address or the index of a local wallet. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns The signed `message`. + * + * ```ts + * // Using an unlocked account managed by connected RPC client + * web3.eth.sign("0x48656c6c6f20776f726c64", "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe").then(console.log); + * > "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400" + * + * // Using an unlocked account managed by connected RPC client + * web3.eth.sign("0x48656c6c6f20776f726c64", "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.UINT8ARRAY }).then(console.log); + * > Uint8Array(65) [ + * 48, 117, 94, 214, 83, 150, 250, 207, 134, 197, 62, + * 98, 23, 197, 43, 77, 174, 190, 114, 170, 73, 65, + * 216, 150, 53, 64, 157, 228, 201, 199, 249, 70, 109, + * 78, 154, 174, 199, 151, 127, 5, 233, 35, 136, 155, + * 51, 192, 208, 221, 39, 215, 34, 107, 110, 111, 86, + * 206, 115, 116, 101, 197, 207, 208, 75, 228, 0 + * ] + * ``` + * + * // Using an indexed account managed by local Web3 wallet + * web3.eth.sign("0x48656c6c6f20776f726c64", 0).then(console.log); + * > "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400" + */ + public async sign( + message: Bytes, + address: Address, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.sign(this, message, address, returnFormat); + } + + /** + * @param transaction The transaction object to sign. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) Specifies how the return data should be formatted. + * @returns {@link SignedTransactionInfoAPI}, an object containing the [RLP](https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/#top) encoded signed transaction (accessed via the `raw` property) and the signed transaction object (accessed via the `tx` property). + * + * ```ts + * const transaction = { + * from: '0xe899f0130FD099c0b896B2cE4E5E15A25b23139a', + * to: '0xe899f0130FD099c0b896B2cE4E5E15A25b23139a', + * value: '0x1', + * gas: '21000', + * gasPrice: await web3Eth.getGasPrice(), + * nonce: '0x1', + * type: '0x0' + * } + * + * web3.eth.signTransaction(transaction).then(console.log); + * > { + * raw: '0xf86501843b9aca0182520894e899f0130fd099c0b896b2ce4e5e15a25b23139a0180820a96a0adb3468dbb4dce89fe1785ea9182e85fb56b399b378f82b93af7a8a12a4f9679a027d37d736e9bcf00121f78b2d10e4404fa5c45856d62b746574345f5cd278097', + * tx: { + * type: 0n, + * nonce: 1n, + * gasPrice: 1000000001n, + * gas: 21000n, + * value: 1n, + * v: 2710n, + * r: '0xadb3468dbb4dce89fe1785ea9182e85fb56b399b378f82b93af7a8a12a4f9679', + * s: '0x27d37d736e9bcf00121f78b2d10e4404fa5c45856d62b746574345f5cd278097', + * to: '0xe899f0130fd099c0b896b2ce4e5e15a25b23139a', + * data: '0x' + * } + * } + * + * web3.eth.signTransaction(transaction, { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX }).then(console.log); + * > { + * raw: '0xf86501843b9aca0182520894e899f0130fd099c0b896b2ce4e5e15a25b23139a0180820a96a0adb3468dbb4dce89fe1785ea9182e85fb56b399b378f82b93af7a8a12a4f9679a027d37d736e9bcf00121f78b2d10e4404fa5c45856d62b746574345f5cd278097', + * tx: { + * type: 0, + * nonce: 1, + * gasPrice: 1000000001, + * gas: 21000, + * value: 1, + * v: 2710, + * r: '0xadb3468dbb4dce89fe1785ea9182e85fb56b399b378f82b93af7a8a12a4f9679', + * s: '0x27d37d736e9bcf00121f78b2d10e4404fa5c45856d62b746574345f5cd278097', + * to: '0xe899f0130fd099c0b896b2ce4e5e15a25b23139a', + * data: '0x' + * } + * } + * ``` + */ + public async signTransaction( + transaction: Transaction, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.signTransaction(this, transaction, returnFormat); + } + + // TODO Decide what to do with transaction.to + // https://github.com/ChainSafe/web3.js/pull/4525#issuecomment-982330076 + /** + * Executes a message call within the EVM without creating a transaction. + * It does not publish anything to the blockchain and does not consume any gas. + * + * @param transaction - A transaction object where all properties are optional except `to`, however it's recommended to include the `from` property or it may default to `0x0000000000000000000000000000000000000000` depending on your node or provider. + * @param blockNumber ({@link BlockNumberOrTag} defaults to {@link Web3Eth.defaultBlock}) - Specifies what block to use as the current state of the blockchain while processing the transaction. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) - Specifies how the return data from the call should be formatted. + * @returns The returned data of the call, e.g. a smart contract function's return value. + */ + public async call( + transaction: TransactionCall, + blockNumber: BlockNumberOrTag = this.defaultBlock, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.call(this, transaction, blockNumber, returnFormat); + } + + /** + * Simulates the transaction within the EVM to estimate the amount of gas to be used by the transaction. + * The transaction will not be added to the blockchain, and actual gas usage can vary when interacting + * with a contract as a result of updating the contract's state. + * + * @param transaction The {@link Transaction} object to estimate the gas for. + * @param blockNumber ({@link BlockNumberOrTag} defaults to {@link Web3Eth.defaultBlock}) - Specifies what block to use as the current state of the blockchain while processing the gas estimation. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) - Specifies how the return data from the call should be formatted. + * @returns The used gas for the simulated transaction execution. + * + * ```ts + * const transaction = { + * from: '0xe899f0130FD099c0b896B2cE4E5E15A25b23139a', + * to: '0xe899f0130FD099c0b896B2cE4E5E15A25b23139a', + * value: '0x1', + * nonce: '0x1', + * type: '0x0' + * } + * + * web3.eth.estimateGas(transaction).then(console.log); + * > 21000n + * + * web3.eth.estimateGas(transaction, { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX }).then(console.log); + * > 21000 + * ``` + */ + public async estimateGas( + transaction: Transaction, + blockNumber: BlockNumberOrTag = this.defaultBlock, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.estimateGas(this, transaction, blockNumber, returnFormat); + } + + /** + * Gets past logs, matching the provided `filter`. + * + * @param filter A {@link Filter} object containing the properties for the desired logs. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) - Specifies how the return data from the call should be formatted. + * @returns {@link FilterResultsAPI}, an array of {@link Log} objects. + * + * ```ts + * web3.eth.getPastLogs({ + * address: "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", + * topics: ["0x033456732123ffff2342342dd12342434324234234fd234fd23fd4f23d4234"] + * }).then(console.log); + * > [{ + * data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', + * topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385'] + * logIndex: 0n, + * transactionIndex: 0n, + * transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', + * blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', + * blockNumber: 1234n, + * address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' + * }, + * {...}] + * + * web3.eth.getPastLogs( + * { + * address: "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", + * topics: ["0x033456732123ffff2342342dd12342434324234234fd234fd23fd4f23d4234"] + * }, + * { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX } + * ).then(console.log); + * > [{ + * data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', + * topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385'] + * logIndex: 0, + * transactionIndex: 0, + * transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', + * blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', + * blockNumber: 1234, + * address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' + * }, + * {...}] + * ``` + */ + public async getPastLogs( + filter: Filter, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getLogs(this, filter, returnFormat); + } + + /** + * Gets work for miners to mine on. Returns the hash of the current block, the seedHash, and the boundary condition to be met ('target'). + * + * @returns The mining work as an array of strings with the following structure: + * + * String 32 Bytes - at index 0: current block header pow-hash + * String 32 Bytes - at index 1: the seed hash used for the DAG. + * String 32 Bytes - at index 2: the boundary condition ('target'), 2^256 / difficulty. + * + * ```ts + * web3.eth.getWork().then(console.log); + * > [ + * "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", + * "0x5EED00000000000000000000000000005EED0000000000000000000000000000", + * "0xd1ff1c01710000000000000000000000d1ff1c01710000000000000000000000" + * ] + * ``` + */ + public async getWork() { + return ethRpcMethods.getWork(this.requestManager); + } + + /** + * Used for submitting a proof-of-work solution. + * + * @param nonce The nonce found (8 bytes). + * @param hash The header’s pow-hash (32 bytes). + * @param digest The mix digest (32 bytes). + * @returns Returns `true` if the provided solution is valid, otherwise `false`. + * + * ```ts + * web3.eth.submitWork([ + * "0x0000000000000001", + * "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", + * "0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000" + * ]).then(console.log); + * > true + * ``` + */ + public async submitWork( + nonce: HexString8Bytes, + hash: HexString32Bytes, + digest: HexString32Bytes, + ) { + return ethRpcMethods.submitWork(this.requestManager, nonce, hash, digest); + } + + // TODO - Format addresses + /** + * This method will request/enable the accounts from the current environment and for supporting [EIP 1102](https://eips.ethereum.org/EIPS/eip-1102) + * This method will only work if you’re using the injected provider from a application like Metamask, Status or TrustWallet. + * It doesn’t work if you’re connected to a node with a default Web3.js provider (WebsocketProvider, HttpProvider and IpcProvider). + * For more information about the behavior of this method please read [EIP-1102](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1102.md): Opt-in account exposure. + * + * @returns An array of enabled accounts. + * + * ```ts + * web3.eth.requestAccounts().then(console.log); + * > ['0aae0B295369a9FD31d5F28D9Ec85E40f4cb692BAf', '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'] + * ``` + */ + public async requestAccounts() { + return ethRpcMethods.requestAccounts(this.requestManager); + } + + /** + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) - Specifies how the return data from the call should be formatted. + * @returns The chain ID of the current connected node as described in the [EIP-695](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-695.md). + * + * ```ts + * web3.eth.getChainId().then(console.log); + * > 61n + * + * web3.eth.getChainId({ number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX }).then(console.log); + * > 61 + * ``` + */ + public async getChainId( + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getChainId(this, returnFormat); + } + + /** + * @returns The current client version. + * + * ```ts + * web3.eth.getNodeInfo().then(console.log); + * > "Mist/v0.9.3/darwin/go1.4.1" + * ``` + */ + public async getNodeInfo() { + return ethRpcMethods.getNodeInfo(this.requestManager); + } + + /** + * @param address The Address of the account or contract. + * @param storageKeys Array of storage-keys which should be proofed and included. See {@link web3.getStorageAt}. + * @param blockNumber ({@link BlockNumberOrTag} defaults to {@link Web3Eth.defaultBlock}) - Specifies what block to use as the current state of the blockchain while processing the gas estimation. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) - Specifies how the return data from the call should be formatted. + * @returns The account and storage-values of the specified account including the Merkle-proof as described in [EIP-1186](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1186.md). + * + * ```ts + * web3.eth.getProof( + * "0x1234567890123456789012345678901234567890", + * ["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001"], + * "latest" + * ).then(console.log); + * > { + * "address": "0x1234567890123456789012345678901234567890", + * "accountProof": [ + * "0xf90211a090dcaf88c40c7bbc95a912cbdde67c175767b31173df9ee4b0d733bfdd511c43a0babe369f6b12092f49181ae04ca173fb68d1a5456f18d20fa32cba73954052bda0473ecf8a7e36a829e75039a3b055e51b8332cbf03324ab4af2066bbd6fbf0021a0bbda34753d7aa6c38e603f360244e8f59611921d9e1f128372fec0d586d4f9e0a04e44caecff45c9891f74f6a2156735886eedf6f1a733628ebc802ec79d844648a0a5f3f2f7542148c973977c8a1e154c4300fec92f755f7846f1b734d3ab1d90e7a0e823850f50bf72baae9d1733a36a444ab65d0a6faaba404f0583ce0ca4dad92da0f7a00cbe7d4b30b11faea3ae61b7f1f2b315b61d9f6bd68bfe587ad0eeceb721a07117ef9fc932f1a88e908eaead8565c19b5645dc9e5b1b6e841c5edbdfd71681a069eb2de283f32c11f859d7bcf93da23990d3e662935ed4d6b39ce3673ec84472a0203d26456312bbc4da5cd293b75b840fc5045e493d6f904d180823ec22bfed8ea09287b5c21f2254af4e64fca76acc5cd87399c7f1ede818db4326c98ce2dc2208a06fc2d754e304c48ce6a517753c62b1a9c1d5925b89707486d7fc08919e0a94eca07b1c54f15e299bd58bdfef9741538c7828b5d7d11a489f9c20d052b3471df475a051f9dd3739a927c89e357580a4c97b40234aa01ed3d5e0390dc982a7975880a0a089d613f26159af43616fd9455bb461f4869bfede26f2130835ed067a8b967bfb80", + * "0xf90211a0395d87a95873cd98c21cf1df9421af03f7247880a2554e20738eec2c7507a494a0bcf6546339a1e7e14eb8fb572a968d217d2a0d1f3bc4257b22ef5333e9e4433ca012ae12498af8b2752c99efce07f3feef8ec910493be749acd63822c3558e6671a0dbf51303afdc36fc0c2d68a9bb05dab4f4917e7531e4a37ab0a153472d1b86e2a0ae90b50f067d9a2244e3d975233c0a0558c39ee152969f6678790abf773a9621a01d65cd682cc1be7c5e38d8da5c942e0a73eeaef10f387340a40a106699d494c3a06163b53d956c55544390c13634ea9aa75309f4fd866f312586942daf0f60fb37a058a52c1e858b1382a8893eb9c1f111f266eb9e21e6137aff0dddea243a567000a037b4b100761e02de63ea5f1fcfcf43e81a372dafb4419d126342136d329b7a7ba032472415864b08f808ba4374092003c8d7c40a9f7f9fe9cc8291f62538e1cc14a074e238ff5ec96b810364515551344100138916594d6af966170ff326a092fab0a0d31ac4eef14a79845200a496662e92186ca8b55e29ed0f9f59dbc6b521b116fea090607784fe738458b63c1942bba7c0321ae77e18df4961b2bc66727ea996464ea078f757653c1b63f72aff3dcc3f2a2e4c8cb4a9d36d1117c742833c84e20de994a0f78407de07f4b4cb4f899dfb95eedeb4049aeb5fc1635d65cf2f2f4dfd25d1d7a0862037513ba9d45354dd3e36264aceb2b862ac79d2050f14c95657e43a51b85c80", + * "0xf90171a04ad705ea7bf04339fa36b124fa221379bd5a38ffe9a6112cb2d94be3a437b879a08e45b5f72e8149c01efcb71429841d6a8879d4bbe27335604a5bff8dfdf85dcea00313d9b2f7c03733d6549ea3b810e5262ed844ea12f70993d87d3e0f04e3979ea0b59e3cdd6750fa8b15164612a5cb6567cdfb386d4e0137fccee5f35ab55d0efda0fe6db56e42f2057a071c980a778d9a0b61038f269dd74a0e90155b3f40f14364a08538587f2378a0849f9608942cf481da4120c360f8391bbcc225d811823c6432a026eac94e755534e16f9552e73025d6d9c30d1d7682a4cb5bd7741ddabfd48c50a041557da9a74ca68da793e743e81e2029b2835e1cc16e9e25bd0c1e89d4ccad6980a041dda0a40a21ade3a20fcd1a4abb2a42b74e9a32b02424ff8db4ea708a5e0fb9a09aaf8326a51f613607a8685f57458329b41e938bb761131a5747e066b81a0a16808080a022e6cef138e16d2272ef58434ddf49260dc1de1f8ad6dfca3da5d2a92aaaadc58080", + * "0xf851808080a009833150c367df138f1538689984b8a84fc55692d3d41fe4d1e5720ff5483a6980808080808080808080a0a319c1c415b271afc0adcb664e67738d103ac168e0bc0b7bd2da7966165cb9518080" + * ], + * "balance": 0n, + * "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + * "nonce": 0n, + * "storageHash": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + * "storageProof": [ + * { + * "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + * "value": 0n, + * "proof": [] + * }, + * { + * "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + * "value": 0n, + * "proof": [] + * } + * ] + * } + * + * web3.eth.getProof( + * "0x1234567890123456789012345678901234567890", + * ["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001"], + * undefined, + * { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX } + * ).then(console.log); + * > { + * "address": "0x1234567890123456789012345678901234567890", + * "accountProof": [ + * "0xf90211a090dcaf88c40c7bbc95a912cbdde67c175767b31173df9ee4b0d733bfdd511c43a0babe369f6b12092f49181ae04ca173fb68d1a5456f18d20fa32cba73954052bda0473ecf8a7e36a829e75039a3b055e51b8332cbf03324ab4af2066bbd6fbf0021a0bbda34753d7aa6c38e603f360244e8f59611921d9e1f128372fec0d586d4f9e0a04e44caecff45c9891f74f6a2156735886eedf6f1a733628ebc802ec79d844648a0a5f3f2f7542148c973977c8a1e154c4300fec92f755f7846f1b734d3ab1d90e7a0e823850f50bf72baae9d1733a36a444ab65d0a6faaba404f0583ce0ca4dad92da0f7a00cbe7d4b30b11faea3ae61b7f1f2b315b61d9f6bd68bfe587ad0eeceb721a07117ef9fc932f1a88e908eaead8565c19b5645dc9e5b1b6e841c5edbdfd71681a069eb2de283f32c11f859d7bcf93da23990d3e662935ed4d6b39ce3673ec84472a0203d26456312bbc4da5cd293b75b840fc5045e493d6f904d180823ec22bfed8ea09287b5c21f2254af4e64fca76acc5cd87399c7f1ede818db4326c98ce2dc2208a06fc2d754e304c48ce6a517753c62b1a9c1d5925b89707486d7fc08919e0a94eca07b1c54f15e299bd58bdfef9741538c7828b5d7d11a489f9c20d052b3471df475a051f9dd3739a927c89e357580a4c97b40234aa01ed3d5e0390dc982a7975880a0a089d613f26159af43616fd9455bb461f4869bfede26f2130835ed067a8b967bfb80", + * "0xf90211a0395d87a95873cd98c21cf1df9421af03f7247880a2554e20738eec2c7507a494a0bcf6546339a1e7e14eb8fb572a968d217d2a0d1f3bc4257b22ef5333e9e4433ca012ae12498af8b2752c99efce07f3feef8ec910493be749acd63822c3558e6671a0dbf51303afdc36fc0c2d68a9bb05dab4f4917e7531e4a37ab0a153472d1b86e2a0ae90b50f067d9a2244e3d975233c0a0558c39ee152969f6678790abf773a9621a01d65cd682cc1be7c5e38d8da5c942e0a73eeaef10f387340a40a106699d494c3a06163b53d956c55544390c13634ea9aa75309f4fd866f312586942daf0f60fb37a058a52c1e858b1382a8893eb9c1f111f266eb9e21e6137aff0dddea243a567000a037b4b100761e02de63ea5f1fcfcf43e81a372dafb4419d126342136d329b7a7ba032472415864b08f808ba4374092003c8d7c40a9f7f9fe9cc8291f62538e1cc14a074e238ff5ec96b810364515551344100138916594d6af966170ff326a092fab0a0d31ac4eef14a79845200a496662e92186ca8b55e29ed0f9f59dbc6b521b116fea090607784fe738458b63c1942bba7c0321ae77e18df4961b2bc66727ea996464ea078f757653c1b63f72aff3dcc3f2a2e4c8cb4a9d36d1117c742833c84e20de994a0f78407de07f4b4cb4f899dfb95eedeb4049aeb5fc1635d65cf2f2f4dfd25d1d7a0862037513ba9d45354dd3e36264aceb2b862ac79d2050f14c95657e43a51b85c80", + * "0xf90171a04ad705ea7bf04339fa36b124fa221379bd5a38ffe9a6112cb2d94be3a437b879a08e45b5f72e8149c01efcb71429841d6a8879d4bbe27335604a5bff8dfdf85dcea00313d9b2f7c03733d6549ea3b810e5262ed844ea12f70993d87d3e0f04e3979ea0b59e3cdd6750fa8b15164612a5cb6567cdfb386d4e0137fccee5f35ab55d0efda0fe6db56e42f2057a071c980a778d9a0b61038f269dd74a0e90155b3f40f14364a08538587f2378a0849f9608942cf481da4120c360f8391bbcc225d811823c6432a026eac94e755534e16f9552e73025d6d9c30d1d7682a4cb5bd7741ddabfd48c50a041557da9a74ca68da793e743e81e2029b2835e1cc16e9e25bd0c1e89d4ccad6980a041dda0a40a21ade3a20fcd1a4abb2a42b74e9a32b02424ff8db4ea708a5e0fb9a09aaf8326a51f613607a8685f57458329b41e938bb761131a5747e066b81a0a16808080a022e6cef138e16d2272ef58434ddf49260dc1de1f8ad6dfca3da5d2a92aaaadc58080", + * "0xf851808080a009833150c367df138f1538689984b8a84fc55692d3d41fe4d1e5720ff5483a6980808080808080808080a0a319c1c415b271afc0adcb664e67738d103ac168e0bc0b7bd2da7966165cb9518080" + * ], + * "balance": 0, + * "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + * "nonce": 0, + * "storageHash": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + * "storageProof": [ + * { + * "key": "0x0000000000000000000000000000000000000000000000000000000000000000", + * "value": 0, + * "proof": [] + * }, + * { + * "key": "0x0000000000000000000000000000000000000000000000000000000000000001", + * "value": 0, + * "proof": [] + * } + * ] + * } + * ``` + */ + public async getProof( + address: Address, + storageKeys: Bytes[], + blockNumber: BlockNumberOrTag = this.defaultBlock, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getProof(this, address, storageKeys, blockNumber, returnFormat); + } + + // TODO Throwing an error with Geth, but not Infura + // TODO gasUsedRatio and reward not formatting + /** + * @param blockCount Number of blocks in the requested range. Between `1` and `1024` blocks can be requested in a single query. Less than requested may be returned if not all blocks are available. + * @param newestBlock Highest number block of the requested range. + * @param rewardPercentiles A monotonically increasing list of percentile values to sample from each block’s effective priority fees per gas in ascending order, weighted by gas used. Example: `['0', '25', '50', '75', '100']` or `['0', '0.5', '1', '1.5', '3', '80']` + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) - Specifies how the return data from the call should be formatted. + * @returns `baseFeePerGas` and transaction effective `priorityFeePerGas` history for the requested block range if available. + * The range between `headBlock - 4` and `headBlock` is guaranteed to be available while retrieving data from the `pending` block and older history are optional to support. + * For pre-EIP-1559 blocks the `gasPrice`s are returned as `rewards` and zeroes are returned for the `baseFeePerGas`. + * + * ```ts + * web3.eth.getFeeHistory(4, 'pending', [0, 25, 75, 100]).then(console.log); + * > { + * baseFeePerGas: [ + * 22983878621n, + * 21417903463n, + * 19989260230n, + * 17770954829n, + * 18850641304n + * ], + * gasUsedRatio: [ + * 0.22746546666666667, + * 0.2331871, + * 0.05610054885262125, + * 0.7430227268212117 + * ], + * oldestBlock: 15216343n, + * reward: [ + * [ '0x3b9aca00', '0x53724e00', '0x77359400', '0x1d92c03423' ], + * [ '0x3b9aca00', '0x3b9aca00', '0x3b9aca00', '0xee6b2800' ], + * [ '0x3b9aca00', '0x4f86a721', '0x77d9743a', '0x9502f900' ], + * [ '0xcc8ff9e', '0x53724e00', '0x77359400', '0x1ec9771bb3' ] + * ] + * } + * + * web3.eth.getFeeHistory(4, BlockTags.LATEST, [0, 25, 75, 100], { number: FMT_NUMBER.NUMBER , bytes: FMT_BYTES.HEX }).then(console.log); + * > { + * baseFeePerGas: [ + * 22983878621, + * 21417903463, + * 19989260230, + * 17770954829, + * 18850641304 + * ], + * gasUsedRatio: [ + * 0.22746546666666667, + * 0.2331871, + * 0.05610054885262125, + * 0.7430227268212117 + * ], + * oldestBlock: 15216343, + * reward: [ + * [ '0x3b9aca00', '0x53724e00', '0x77359400', '0x1d92c03423' ], + * [ '0x3b9aca00', '0x3b9aca00', '0x3b9aca00', '0xee6b2800' ], + * [ '0x3b9aca00', '0x4f86a721', '0x77d9743a', '0x9502f900' ], + * [ '0xcc8ff9e', '0x53724e00', '0x77359400', '0x1ec9771bb3' ] + * ] + * } + * ``` + */ + public async getFeeHistory( + blockCount: Numbers, + newestBlock: BlockNumberOrTag = this.defaultBlock, + rewardPercentiles: Numbers[], + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getFeeHistory( + this, + blockCount, + newestBlock, + rewardPercentiles, + returnFormat, + ); + } + + /** + * This method generates an access list for a transaction. + * + * @param transaction - A transaction object where all properties are optional except `from`, however it's recommended to include the `to` property. + * @param blockNumber ({@link BlockNumberOrTag} defaults to {@link Web3Eth.defaultBlock}) - Specifies what block to use as the current state of the blockchain while processing the transaction. + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) - Specifies how the return data from the createAccessList should be formatted. + * @returns The returned data of the createAccessList, e.g. The generated access list for transaction. + * @example + * ```ts + * web3.eth.createAccessList({ + * from: '0xDe95305a63302C3aa4d3A9B42654659AeA72b694', + * data: '0x9a67c8b100000000000000000000000000000000000000000000000000000000000004d0', + * gasPrice: '0x3b9aca00', + * gas: '0x3d0900', + * to: '0x940b25304947ae863568B3804434EC77E2160b87' + * }) + * .then(console.log); + * + * > { + * "accessList": [ + * { + * "address": "0x15859bdf5aff2080a9968f6a410361e9598df62f", + * "storageKeys": [ + * "0x0000000000000000000000000000000000000000000000000000000000000000" + * ] + * } + * ], + * "gasUsed": "0x7671" + * } + * ``` + */ + public async createAccessList( + transaction: TransactionForAccessList, + blockNumber: BlockNumberOrTag = this.defaultBlock, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.createAccessList(this, transaction, blockNumber, returnFormat); + } + + /** + * This method sends EIP-712 typed data to the RPC provider to be signed. + * + * @param address The address that corresponds with the private key used to sign the typed data. + * @param typedData The EIP-712 typed data object. + * @param useLegacy A boolean flag determining whether the RPC call uses the legacy method `eth_signTypedData` or the newer method `eth_signTypedData_v4` + * @param returnFormat ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) - Specifies how the signed typed data should be formatted. + * @returns The signed typed data. + */ + public async signTypedData( + address: Address, + typedData: Eip712TypedData, + useLegacy = false, + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.signTypedData(this, address, typedData, useLegacy, returnFormat); + } + + /** + * Lets you subscribe to specific events in the blockchain. + * + * @param name - The subscription you want to subscribe to. + * @param args - Optional additional parameters, depending on the subscription type. + * @returns A subscription object of type {@link RegisteredSubscription}. The object contains: + * - subscription.id: The subscription id, used to identify and unsubscribing the subscription. + * - subscription.subscribe(): Can be used to re-subscribe with the same parameters. + * - subscription.unsubscribe(): Unsubscribes the subscription and returns TRUE in the callback if successful. + * - subscription.args: The subscription arguments, used when re-subscribing. + * + * + * You can use the subscription object to listen on: + * + * - on("data") - Fires on each incoming log with the log object as argument. + * - on("changed") - Fires on each log which was removed from the blockchain. The log will have the additional property "removed: true". + * - on("error") - Fires when an error in the subscription occurs. + * - on("connected") - Fires once after the subscription successfully connected. Returns the subscription id. + * + * @example **Subscribe to Smart Contract events** + * ```ts + * // Subscribe to `logs` + * const logSubscription = web3.eth.subscribe('logs', { + * address: '0x1234567890123456789012345678901234567890', + * topics: ['0x033456732123ffff2342342dd12342434324234234fd234fd23fd4f23d4234'] + * }); + * logSubscription.on('data', (data: any) => console.log(data)); + * logSubscription.on('error', (error: any) => console.log(error)); + * + * ``` + * + * @example **Subscribe to new block headers** + * ```ts + * // Subscribe to `newBlockHeaders` + * const newBlocksSubscription = await web3.eth.subscribe('newBlockHeaders'); + * + * newBlocksSubscription.on('data', async blockhead => { + * console.log('New block header: ', blockhead); + * + * // You do not need the next line, if you like to keep notified for every new block + * await newBlocksSubscription.unsubscribe(); + * console.log('Unsubscribed from new block headers.'); + * }); + * newBlocksSubscription.on('error', error => + * console.log('Error when subscribing to New block header: ', error), + * ); + * ``` + */ + public async subscribe< + T extends keyof RegisteredSubscription, + ReturnType extends DataFormat = DataFormat, + >( + name: T, + args?: ConstructorParameters[0], + returnFormat: ReturnType = DEFAULT_RETURN_FORMAT as ReturnType, + ): Promise> { + const subscription = await this.subscriptionManager?.subscribe(name, args, returnFormat); + if ( + subscription instanceof LogsSubscription && + name === 'logs' && + typeof args === 'object' && + !isNullish(args.fromBlock) && + Number.isFinite(Number(args.fromBlock)) + ) { + setImmediate(() => { + this.getPastLogs(args) + .then(logs => { + for (const log of logs) { + subscription._processSubscriptionResult(log as LogsOutput); + } + }) + .catch(e => { + subscription._processSubscriptionError(e as Error); + }); + }); + } + return subscription; + } + + private static shouldClearSubscription({ sub }: { sub: unknown }): boolean { + return !(sub instanceof SyncingSubscription); + } + + /** + * Resets subscriptions. + * + * @param notClearSyncing If `true` it keeps the `syncing` subscription. + * @returns A promise to an array of subscription ids that were cleared. + * + * ```ts + * web3.eth.clearSubscriptions().then(console.log); + * > [...] An array of subscription ids that were cleared + * ``` + */ + public clearSubscriptions(notClearSyncing = false): Promise | undefined { + return this.subscriptionManager?.unsubscribe( + // eslint-disable-next-line + notClearSyncing ? Web3Eth.shouldClearSubscription : undefined, + ); + } +} diff --git a/packages/web3-eth/src/web3_subscriptions.ts b/packages/web3-eth/src/web3_subscriptions.ts new file mode 100644 index 00000000000..5838aa9ce2d --- /dev/null +++ b/packages/web3-eth/src/web3_subscriptions.ts @@ -0,0 +1,176 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +/* eslint-disable-next-line max-classes-per-file */ +import { format } from 'web3-utils'; + +import { + SyncOutput, + Address, + BlockNumberOrTag, + HexString, + Topic, + BlockHeaderOutput, + LogsOutput, +} from 'web3-types'; +import { Web3Subscription } from 'web3-core'; +import { blockHeaderSchema, logSchema, syncSchema } from './schemas.js'; + +/** + * ## subscribe('logs') + * Subscribes to incoming logs, filtered by the given options. If a valid numerical fromBlock options property is set, web3.js will retrieve logs beginning from this point, backfilling the response as necessary. + * + * You can subscribe to logs matching a given filter object, which can take the following parameters: + * - `fromBlock`: (optional, default: 'latest') Integer block number, or `'latest'` for the last mined block or `'pending'`, `'earliest'` for not yet mined transactions. + * - `address`: (optional) Contract address or a list of addresses from which logs should originate. + * - `topics`: (optional) Array of 32 Bytes DATA topics. Topics are order-dependent. Each topic can also be an array of DATA with `or` options. + * + */ +export class LogsSubscription extends Web3Subscription< + { + data: LogsOutput; + }, + { + readonly fromBlock?: BlockNumberOrTag; + readonly address?: Address | Address[]; + readonly topics?: Topic[]; + } +> { + protected _buildSubscriptionParams() { + return ['logs', this.args]; + } + + protected formatSubscriptionResult(data: LogsOutput) { + return format(logSchema, data, super.returnFormat); + } +} + +/** + * ## subscribe('pendingTransactions') + * Subscribes to incoming pending transactions. + * + * You can subscribe to pending transactions by calling web3.eth.subscribe('pendingTransactions'). + * @example + * ```ts + * (await web3.eth.subscribe('pendingTransactions')).on('data', console.log); + * ``` + */ +export class NewPendingTransactionsSubscription extends Web3Subscription<{ + data: HexString; +}> { + // eslint-disable-next-line + protected _buildSubscriptionParams() { + return ['newPendingTransactions']; + } + + protected formatSubscriptionResult(data: string) { + return format({ format: 'string' }, data, super.returnFormat); + } +} + +/** + * ## subscribe('newHeads') ( same as subscribe('newBlockHeaders')) + * + * Subscribes to incoming block headers. This can be used as timer to check for changes on the blockchain. + * + * The structure of a returned block header is {@link BlockHeaderOutput}: + * @example + * ```ts + * (await web3.eth.subscribe('newHeads')).on( // 'newBlockHeaders' would work as well + * 'data', + * console.log + * ); + * >{ + * parentHash: '0x9e746a1d906b299def98c75b06f714d62dacadd567c7515d76eeaa8c8074c738', + * sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + * miner: '0x0000000000000000000000000000000000000000', + * stateRoot: '0xe0f04b04861ecfa95e82a9310d6a7ef7aef8d7417f5209c182582bfb98a8e307', + * transactionsRoot: '0x31ab4ea571a9e10d3a19aaed07d190595b1dfa34e03960c04293fec565dea536', + * logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + * difficulty: 2n, + * number: 21n, + * gasLimit: 11738125n, + * gasUsed: 830006n, + * timestamp: 1678797237n, + * extraData: '0xd883010b02846765746888676f312e32302e31856c696e757800000000000000e0a6e93cf40e2e71a72e493272210c3f43738ccc7e7d7b14ffd51833797d896c09117e8dc4fbcbc969bd21b42e5af3e276a911524038c001b2109b63b8e0352601', + * nonce: 0n + * } + * ``` + */ +export class NewHeadsSubscription extends Web3Subscription<{ + data: BlockHeaderOutput; +}> { + // eslint-disable-next-line + protected _buildSubscriptionParams() { + return ['newHeads']; + } + + protected formatSubscriptionResult(data: BlockHeaderOutput): BlockHeaderOutput { + return format(blockHeaderSchema, data, super.returnFormat); + } +} + +/** + * ## subscribe('syncing') + * + * Subscribe to syncing events. This will return `true` when the node is syncing and when it’s finished syncing will return `false`, for the `changed` event. + * @example + * ```ts + * (await web3.eth.subscribe('syncing')).on('changed', console.log); + * > `true` // when syncing + * + * (await web3.eth.subscribe('syncing')).on('data', console.log); + * > { + * startingBlock: 0, + * currentBlock: 0, + * highestBlock: 0, + * pulledStates: 0, + * knownStates: 0 + * } + * ``` + */ +export class SyncingSubscription extends Web3Subscription<{ + data: SyncOutput; + changed: boolean; +}> { + // eslint-disable-next-line + protected _buildSubscriptionParams() { + return ['syncing']; + } + + public _processSubscriptionResult( + data: + | { + syncing: boolean; + status: SyncOutput; + } + | boolean, + ) { + if (typeof data === 'boolean') { + this.emit('changed', data); + } else { + const mappedData: SyncOutput = Object.fromEntries( + Object.entries(data.status).map(([key, value]) => [ + key.charAt(0).toLowerCase() + key.substring(1), + value, + ]), + ) as SyncOutput; + + this.emit('changed', data.syncing); + this.emit('data', format(syncSchema, mappedData, super.returnFormat)); + } + } +} diff --git a/packages/web3-eth/test/.eslintrc.js b/packages/web3-eth/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-eth/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-eth/test/config/jest.config.js b/packages/web3-eth/test/config/jest.config.js new file mode 120000 index 00000000000..b875b48129d --- /dev/null +++ b/packages/web3-eth/test/config/jest.config.js @@ -0,0 +1 @@ +../../../../templates/jest.config.js.tmpl \ No newline at end of file diff --git a/packages/web3-eth/test/config/setup.js b/packages/web3-eth/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-eth/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-eth/test/e2e/accounts.json b/packages/web3-eth/test/e2e/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3-eth/test/e2e/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3-eth/test/e2e/e2e_utils.ts b/packages/web3-eth/test/e2e/e2e_utils.ts new file mode 100644 index 00000000000..56989fc927d --- /dev/null +++ b/packages/web3-eth/test/e2e/e2e_utils.ts @@ -0,0 +1,85 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * @NOTE This Util method is kept seperate from shared system_test_utils.ts file because + * of it's import of .secrets.json. For this method to exist in shared system_test_utils.ts + * file, the import path would be ../.secrets.json which doesn't resolve when the file is + * copied over to each package's test directory. Because web3 package is the only package + * running these E2E tests that use Sepolia and Mainnet, this util exists here for now. + */ + +import { getSystemTestBackend } from '../fixtures/system_test_utils'; +// eslint-disable-next-line import/no-relative-packages +import secrets from '../../../../.secrets.json'; + +export const getSystemE2ETestProvider = (): string => { + if (process.env.WEB3_SYSTEM_TEST_MODE === 'http') { + return getSystemTestBackend() === 'sepolia' + ? process.env.INFURA_SEPOLIA_HTTP ?? secrets.SEPOLIA.HTTP + : process.env.INFURA_MAINNET_HTTP ?? secrets.MAINNET.HTTP; + } + return getSystemTestBackend() === 'sepolia' + ? process.env.INFURA_SEPOLIA_WS ?? secrets.SEPOLIA.WS + : process.env.INFURA_MAINNET_WS ?? secrets.MAINNET.WS; +}; + +export const getE2ETestAccountAddress = (): string => { + if (process.env.TEST_ACCOUNT_ADDRESS !== undefined) { + return process.env.TEST_ACCOUNT_ADDRESS; + // eslint-disable-next-line no-else-return + } else if (getSystemTestBackend() === 'sepolia' || getSystemTestBackend() === 'mainnet') { + return secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'].ACCOUNT + .address; + } + + throw new Error('Unable to get test account address'); +}; + +export const getE2ETestContractAddress = () => + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'] + .DEPLOYED_TEST_CONTRACT_ADDRESS as string; + +export const getAllowedSendTransaction = (): boolean => { + if (process.env.ALLOWED_SEND_TRANSACTION !== undefined) { + // https://github.com/actions/runner/issues/1483 + if (process.env.ALLOWED_SEND_TRANSACTION === 'false') { + return false; + } + + return Boolean(process.env.ALLOWED_SEND_TRANSACTION); + // eslint-disable-next-line no-else-return + } else if (getSystemTestBackend() === 'sepolia' || getSystemTestBackend() === 'mainnet') { + return secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'] + .ALLOWED_SEND_TRANSACTION; + } + + return false; +}; + +export const getE2ETestAccountPrivateKey = (): string => { + if (process.env.TEST_ACCOUNT_PRIVATE_KEY !== undefined) { + return process.env.TEST_ACCOUNT_PRIVATE_KEY; + // eslint-disable-next-line no-else-return + } else if (getSystemTestBackend() === 'sepolia' || getSystemTestBackend() === 'mainnet') { + return secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'].ACCOUNT + .privateKey; + } + + throw new Error('Unable to get test account private key'); +}; diff --git a/packages/web3-eth/test/e2e/jest.config.js b/packages/web3-eth/test/e2e/jest.config.js new file mode 100644 index 00000000000..cc3c69f72ff --- /dev/null +++ b/packages/web3-eth/test/e2e/jest.config.js @@ -0,0 +1,36 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/e2e/setup.js'], + testMatch: [ + `/test/e2e/*.(spec|test).(js|ts)`, + `/test/e2e/${process.env.WEB3_SYSTEM_TEST_BACKEND}/**/*.(spec|test).(js|ts)`, + ], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: `.coverage/e2e/${process.env.WEB3_SYSTEM_TEST_BACKEND}`, +}; diff --git a/packages/web3-eth/test/e2e/setup.js b/packages/web3-eth/test/e2e/setup.js new file mode 100644 index 00000000000..fddbec59a1e --- /dev/null +++ b/packages/web3-eth/test/e2e/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 30000; // Sometimes `in3` takes long time because of its decentralized nature. + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-eth/test/e2e/subscription_new_heads.test.ts b/packages/web3-eth/test/e2e/subscription_new_heads.test.ts new file mode 100644 index 00000000000..01bb6b5fc4e --- /dev/null +++ b/packages/web3-eth/test/e2e/subscription_new_heads.test.ts @@ -0,0 +1,88 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// eslint-disable-next-line import/no-extraneous-dependencies +import Web3, { BlockHeaderOutput } from 'web3'; + +import { + closeOpenConnection, + getSystemTestBackend, + itIf, + waitForOpenConnection, +} from '../fixtures/system_test_utils'; +import { getSystemE2ETestProvider } from './e2e_utils'; + +describe(`${getSystemTestBackend()} tests - subscription newHeads`, () => { + const provider = getSystemE2ETestProvider(); + const expectedNumberOfNewHeads = 1; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + itIf(provider.startsWith('ws'))( + `should subscribe to newHeads and receive ${expectedNumberOfNewHeads}`, + async () => { + const newHeadsSubscription = await web3.eth.subscribe('newHeads'); + + let numberOfNewHeadsReceived = 0; + + await waitForOpenConnection(web3.eth); + const assertionPromise = new Promise((resolve, reject) => { + newHeadsSubscription.on('data', (data: BlockHeaderOutput) => { + try { + expect(data).toMatchObject({ + hash: expect.any(String), + parentHash: expect.any(String), + receiptsRoot: expect.any(String), + miner: expect.any(String), + stateRoot: expect.any(String), + transactionsRoot: expect.any(String), + logsBloom: expect.any(String), + difficulty: expect.any(BigInt), + number: expect.any(BigInt), + gasLimit: expect.any(BigInt), + gasUsed: expect.any(BigInt), + timestamp: expect.any(BigInt), + extraData: expect.any(String), + nonce: expect.any(BigInt), + sha3Uncles: expect.any(String), + baseFeePerGas: expect.any(BigInt), + mixHash: expect.any(String), + withdrawalsRoot: expect.any(String), + }); + } catch (error) { + reject(error); + } + + numberOfNewHeadsReceived += 1; + if (numberOfNewHeadsReceived === expectedNumberOfNewHeads) resolve(undefined); + }); + + newHeadsSubscription.on('error', error => reject(error)); + }); + + await assertionPromise; + await web3.eth.subscriptionManager?.removeSubscription(newHeadsSubscription); + }, + ); +}); diff --git a/packages/web3-eth/test/fixtures/accounts.json b/packages/web3-eth/test/fixtures/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3-eth/test/fixtures/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3-eth/test/fixtures/decoding.ts b/packages/web3-eth/test/fixtures/decoding.ts new file mode 100644 index 00000000000..e548f33acc6 --- /dev/null +++ b/packages/web3-eth/test/fixtures/decoding.ts @@ -0,0 +1,263 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AbiEventFragment, LogsInput } from 'web3-types'; + +export const decodeEventABIData: [AbiEventFragment & { signature: string }, LogsInput, any][] = [ + [ + { + // unindexed event with some indexed + type: 'event', + inputs: [ + { name: 'a', type: 'string', indexed: true }, + { name: 'b', type: 'uint', indexed: false }, + { name: 'a', type: 'string', indexed: false }, + ], + name: 'EventNotAnonymous', + signature: '0x7bbee60e68739c7319c204bae2f54caab4114edf476c64bfc5be98af25f446f5', + }, + { + address: '', + topics: ['0x7bbee60e68739c7319c204bae2f54caab4114edf476c64bfc5be98af25f446f5'], + data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016300000000000000000000000000000000000000000000000000000000000000', + }, + { + address: '', + topics: ['0x7bbee60e68739c7319c204bae2f54caab4114edf476c64bfc5be98af25f446f5'], + data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016300000000000000000000000000000000000000000000000000000000000000', + returnValues: { + __length__: 0, + }, + event: 'EventNotAnonymous', + signature: undefined, + raw: { + data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016300000000000000000000000000000000000000000000000000000000000000', + topics: ['0x7bbee60e68739c7319c204bae2f54caab4114edf476c64bfc5be98af25f446f5'], + }, + }, + ], + [ + { + // unindexed event + type: 'event', + inputs: [ + { name: 'a', type: 'string', indexed: false }, + { name: 'b', type: 'uint', indexed: false }, + { name: 'a', type: 'string', indexed: false }, + ], + name: 'EventNotAnonymous', + signature: '0x7bbee60e68739c7319c204bae2f54caab4114edf476c64bfc5be98af25f446f5', + }, + { + address: '', + topics: ['0x7bbee60e68739c7319c204bae2f54caab4114edf476c64bfc5be98af25f446f5'], + data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016300000000000000000000000000000000000000000000000000000000000000', + }, + { + address: '', + topics: ['0x7bbee60e68739c7319c204bae2f54caab4114edf476c64bfc5be98af25f446f5'], + data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016300000000000000000000000000000000000000000000000000000000000000', + returnValues: { + '0': 'a', + '1': BigInt(24), + '2': 'c', + __length__: 3, + a: 'c', + b: BigInt(24), + }, + event: 'EventNotAnonymous', + signature: '0x7bbee60e68739c7319c204bae2f54caab4114edf476c64bfc5be98af25f446f5', + raw: { + data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016300000000000000000000000000000000000000000000000000000000000000', + topics: ['0x7bbee60e68739c7319c204bae2f54caab4114edf476c64bfc5be98af25f446f5'], + }, + }, + ], + [ + { + // all events + type: 'event', + name: 'allEvents', + signature: '', + }, + { + address: '', + topics: ['0x7bbee60e68739c7319c204bae2f54caab4114edf476c64bfc5be98af25f446f5'], + data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016300000000000000000000000000000000000000000000000000000000000000', + }, + { + address: '', + topics: ['0x7bbee60e68739c7319c204bae2f54caab4114edf476c64bfc5be98af25f446f5'], + data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016300000000000000000000000000000000000000000000000000000000000000', + returnValues: { + __length__: 0, + }, + event: undefined, + signature: undefined, + raw: { + data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016300000000000000000000000000000000000000000000000000000000000000', + topics: ['0x7bbee60e68739c7319c204bae2f54caab4114edf476c64bfc5be98af25f446f5'], + }, + }, + ], + [ + { + // indexed event + type: 'event', + inputs: [{ name: 'a', type: 'uint256', indexed: true }], + name: 'EventIndexed', + signature: '0xdd64d7f331676de21d95ea9f7eb8585b688f72afec29a51ff4502fd5a6ae19e7', + }, + { + address: '', + topics: [ + '0xdd64d7f331676de21d95ea9f7eb8585b688f72afec29a51ff4502fd5a6ae19e7', + '0x000000000000000000000000000000000000000000000000000000000000007b', + ], + data: '', + }, + { + address: '', + topics: [ + '0xdd64d7f331676de21d95ea9f7eb8585b688f72afec29a51ff4502fd5a6ae19e7', + '0x000000000000000000000000000000000000000000000000000000000000007b', + ], + data: '', + returnValues: { '0': BigInt(123), __length__: 1, a: BigInt(123) }, + event: 'EventIndexed', + signature: '0xdd64d7f331676de21d95ea9f7eb8585b688f72afec29a51ff4502fd5a6ae19e7', + raw: { + data: '', + topics: [ + '0xdd64d7f331676de21d95ea9f7eb8585b688f72afec29a51ff4502fd5a6ae19e7', + '0x000000000000000000000000000000000000000000000000000000000000007b', + ], + }, + }, + ], + [ + { + // indexed all events + type: 'event', + inputs: [{ name: 'a', type: 'uint256', indexed: true }], + name: 'allEvents', + signature: '0xdd64d7f331676de21d95ea9f7eb8585b688f72afec29a51ff4502fd5a6ae19e7', + }, + { + address: '', + topics: [ + '0xdd64d7f331676de21d95ea9f7eb8585b688f72afec29a51ff4502fd5a6ae19e7', + '0x000000000000000000000000000000000000000000000000000000000000007b', + ], + data: '', + }, + { + address: '', + topics: [ + '0xdd64d7f331676de21d95ea9f7eb8585b688f72afec29a51ff4502fd5a6ae19e7', + '0x000000000000000000000000000000000000000000000000000000000000007b', + ], + data: '', + returnValues: { '0': BigInt(123), __length__: 1, a: BigInt(123) }, + event: undefined, + signature: '0xdd64d7f331676de21d95ea9f7eb8585b688f72afec29a51ff4502fd5a6ae19e7', + raw: { + data: '', + topics: [ + '0xdd64d7f331676de21d95ea9f7eb8585b688f72afec29a51ff4502fd5a6ae19e7', + '0x000000000000000000000000000000000000000000000000000000000000007b', + ], + }, + }, + ], + [ + { + // anonymous event + type: 'event', + inputs: [ + { name: 'a', type: 'string', indexed: false }, + { name: 'b', type: 'uint8', indexed: false }, + { name: 'c', type: 'uint256', indexed: false }, + ], + name: '', + signature: '0xdd64d7f331676de21d95ea9f7eb8585b688f72afec29a51ff4502fd5a6ae19e7', + anonymous: true, + }, + { + address: '', + topics: [], + data: '0x0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000002307800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016200000000000000000000000000000000000000000000000000000000000000', + }, + { + address: '', + topics: [], + data: '0x0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000002307800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016200000000000000000000000000000000000000000000000000000000000000', + returnValues: { + '0': '0x', + '1': BigInt(12), + '2': BigInt(192), + __length__: 3, + a: '0x', + b: BigInt(12), + c: BigInt(192), + }, + event: '', + signature: undefined, + raw: { + data: '0x0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000002307800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016200000000000000000000000000000000000000000000000000000000000000', + topics: [], + }, + }, + ], + [ + { + // anonymous event without anonymous flag + type: 'event', + inputs: [ + { name: 'a', type: 'string', indexed: false }, + { name: 'b', type: 'uint8', indexed: false }, + { name: 'c', type: 'uint256', indexed: false }, + ], + name: '', + signature: '0xdd64d7f331676de21d95ea9f7eb8585b688f72afec29a51ff4502fd5a6ae19e7', + }, + { + address: '', + topics: [], + data: '0x0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000002307800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016200000000000000000000000000000000000000000000000000000000000000', + }, + { + address: '', + topics: [], + data: '0x0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000002307800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016200000000000000000000000000000000000000000000000000000000000000', + returnValues: { + '0': '0x', + '1': BigInt(12), + '2': BigInt(192), + __length__: 3, + a: '0x', + b: BigInt(12), + c: BigInt(192), + }, + event: '', + signature: undefined, + raw: { + data: '0x0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000002307800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016200000000000000000000000000000000000000000000000000000000000000', + topics: [], + }, + }, + ], +]; diff --git a/packages/web3-eth/test/fixtures/detect_transaction_type.ts b/packages/web3-eth/test/fixtures/detect_transaction_type.ts new file mode 100644 index 00000000000..bd957462cfb --- /dev/null +++ b/packages/web3-eth/test/fixtures/detect_transaction_type.ts @@ -0,0 +1,391 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ETH_DATA_FORMAT, FormatType, Transaction } from 'web3-types'; + +export const transactionType0x0: FormatType[] = [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + data: '0x', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + }, + { + to: '0x8f3e9c1Bd65EB267d19B176A73217524DC21A5ca', + nonce: '0x3B7', + gasPrice: '0x4617EE7C40', + from: '0x76D43E68c2aE1084B340f0eDC04C325DD341039B', + gas: '0x67B8BF', + value: '0x', + input: '0x', + chain: 'mainnet', + hardfork: 'london', + chainId: '0x1', + networkId: '0x1', + gasLimit: '0x67B8BF', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + hardfork: 'berlin', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + common: { + customChain: { + networkId: '0x42', + chainId: '0x42', + }, + hardfork: 'berlin', + }, + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + common: { + customChain: { + networkId: '0x42', + chainId: '0x42', + }, + hardfork: 'london', + }, + }, +]; + +export const transactionType0x1: FormatType[] = [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x1', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x1', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + accessList: [], + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + accessList: [], + }, +]; + +export const transactionType0x2: FormatType[] = [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + type: '0x2', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + maxFeePerGas: '0x1229298c00', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + maxPriorityFeePerGas: '0x49504f80', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + common: { + customChain: { + networkId: '0x42', + chainId: '0x42', + }, + hardfork: 'london', + }, + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + hardfork: 'london', + }, +]; + +export const transactionTypeUndefined: FormatType[] = [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + // @ts-expect-error Hardfork doesn't exist + hardfork: 'nonExistent', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + common: { + customChain: { + networkId: '0x42', + chainId: '0x42', + }, + // @ts-expect-error Hardfork doesn't exist + hardfork: 'nonExistent', + }, + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + }, +]; + +export const transactionTypeValidationError: FormatType[] = [ + // Invalid type 0x0 txs + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + maxPriorityFeePerGas: '0x49504f80', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + gasPrice: '0x12', + type: '0x0', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + maxFeePerGas: '0x49504f80', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + type: '0x0', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + accessList: [], + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + type: '0x0', + }, + // Invalid type 0x1 txs + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + maxPriorityFeePerGas: '0x49504f80', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + gasPrice: '0x12', + type: '0x1', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + maxFeePerGas: '0x49504f80', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + type: '0x1', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + maxFeePerGas: '0x49504f80', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + type: '0x1', + accessList: [], + }, + // Invalid type 0x2 txs + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + maxPriorityFeePerGas: '0x49504f80', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + gasPrice: '0x12', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + maxFeePerGas: '0x49504f80', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + gasPrice: '0x12', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + maxPriorityFeePerGas: '0x49504f80', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + gasPrice: '0x12', + type: '0x2', + }, + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + gasPrice: '0x123', + type: '0x2', + }, +]; diff --git a/packages/web3-eth/test/fixtures/erc20.ts b/packages/web3-eth/test/fixtures/erc20.ts new file mode 100644 index 00000000000..17ce176c7d8 --- /dev/null +++ b/packages/web3-eth/test/fixtures/erc20.ts @@ -0,0 +1,175 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const ERC20TokenAbi = [ + { + inputs: [{ internalType: 'uint256', name: 'initialSupply', type: 'uint256' }], + stateMutability: 'nonpayable', + type: 'constructor', + signature: '', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'owner', type: 'address' }, + { indexed: true, internalType: 'address', name: 'spender', type: 'address' }, + { indexed: false, internalType: 'uint256', name: 'value', type: 'uint256' }, + ], + name: 'Approval', + type: 'event', + signature: '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'from', type: 'address' }, + { indexed: true, internalType: 'address', name: 'to', type: 'address' }, + { indexed: false, internalType: 'uint256', name: 'value', type: 'uint256' }, + ], + name: 'Transfer', + type: 'event', + signature: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', + }, + { + inputs: [ + { internalType: 'address', name: 'owner', type: 'address' }, + { internalType: 'address', name: 'spender', type: 'address' }, + ], + name: 'allowance', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + signature: '0xdd62ed3e', + constant: true, + payable: false, + }, + { + inputs: [ + { internalType: 'address', name: 'spender', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'approve', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + signature: '0x095ea7b3', + constant: false, + payable: false, + }, + { + inputs: [{ internalType: 'address', name: 'account', type: 'address' }], + name: 'balanceOf', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + signature: '0x70a08231', + constant: true, + payable: false, + }, + { + inputs: [], + name: 'decimals', + outputs: [{ internalType: 'uint8', name: '', type: 'uint8' }], + stateMutability: 'view', + type: 'function', + signature: '0x313ce567', + constant: true, + payable: false, + }, + { + inputs: [ + { internalType: 'address', name: 'spender', type: 'address' }, + { internalType: 'uint256', name: 'subtractedValue', type: 'uint256' }, + ], + name: 'decreaseAllowance', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + signature: '0xa457c2d7', + constant: false, + payable: false, + }, + { + inputs: [ + { internalType: 'address', name: 'spender', type: 'address' }, + { internalType: 'uint256', name: 'addedValue', type: 'uint256' }, + ], + name: 'increaseAllowance', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + signature: '0x39509351', + constant: false, + payable: false, + }, + { + inputs: [], + name: 'name', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + signature: '0x06fdde03', + constant: true, + payable: false, + }, + { + inputs: [], + name: 'symbol', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + signature: '0x95d89b41', + constant: true, + payable: false, + }, + { + inputs: [], + name: 'totalSupply', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + signature: '0x18160ddd', + constant: true, + payable: false, + }, + { + inputs: [ + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'transfer', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + signature: '0xa9059cbb', + constant: false, + payable: false, + }, + { + inputs: [ + { internalType: 'address', name: 'from', type: 'address' }, + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + signature: '0x23b872dd', + constant: false, + payable: false, + }, +] as const; diff --git a/packages/web3-eth/test/fixtures/errors.ts b/packages/web3-eth/test/fixtures/errors.ts new file mode 100644 index 00000000000..c69551e24d5 --- /dev/null +++ b/packages/web3-eth/test/fixtures/errors.ts @@ -0,0 +1,39 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const InvalidTransactionWithSenderData: [unknown, string][] = [ + [ + BigInt(9007199254740991), + 'Invalid value given "9007199254740991". Error: invalid transaction with invalid sender.', + ], + [ + 'Invalid data', + 'Invalid value given "Invalid data". Error: invalid transaction with invalid sender.', + ], + ['0x0', 'Invalid value given "0x0". Error: invalid transaction with invalid sender.'], + [0, 'Invalid value given "0". Error: invalid transaction with invalid sender.'], +]; + +export const InvalidTransactionCallData: [unknown, string][] = [ + [ + BigInt(9007199254740991), + 'Invalid value given "9007199254740991". Error: invalid transaction call', + ], + ['Invalid data', 'Invalid value given "Invalid data". Error: invalid transaction call'], + ['0x0', 'Invalid value given "0x0". Error: invalid transaction call'], + [0, 'Invalid value given "0". Error: invalid transaction call'], +]; diff --git a/packages/web3-eth/test/fixtures/example_subscription.ts b/packages/web3-eth/test/fixtures/example_subscription.ts new file mode 100644 index 00000000000..ceb1f101469 --- /dev/null +++ b/packages/web3-eth/test/fixtures/example_subscription.ts @@ -0,0 +1,28 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Subscription } from 'web3-core'; + +export class NewHeadsSubscription extends Web3Subscription< + { data: string }, + { param1: string }, + { eth_subscribe: (newHeads: string) => void } +> { + // eslint-disable-next-line class-methods-use-this + protected _buildSubscriptionParams() { + return ['newHeads']; + } +} diff --git a/packages/web3-eth/test/fixtures/format_transaction.ts b/packages/web3-eth/test/fixtures/format_transaction.ts new file mode 100644 index 00000000000..dc91dc7c823 --- /dev/null +++ b/packages/web3-eth/test/fixtures/format_transaction.ts @@ -0,0 +1,301 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { FormatType, Transaction, DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER } from 'web3-types'; +import { hexToBytes } from 'web3-utils'; + +export const bytesAsHexStringTransaction: FormatType< + Transaction, + { number: typeof DEFAULT_RETURN_FORMAT.number; bytes: FMT_BYTES.HEX } +> = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: BigInt('100000000000'), + gas: BigInt('21000'), + gasPrice: BigInt('20000000000'), + type: BigInt(0), + maxFeePerGas: BigInt('78000000000'), + maxPriorityFeePerGas: BigInt('1230000000'), + data: '0x', + nonce: BigInt(4), + chain: 'mainnet', + hardfork: 'berlin', + chainId: BigInt(1), + common: { + customChain: { + name: 'foo', + networkId: BigInt(4), + chainId: BigInt(66), + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: BigInt('21000'), + v: BigInt('37'), + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', +}; + +export const bytesAsUint8ArrayTransaction: FormatType< + Transaction, + { number: typeof DEFAULT_RETURN_FORMAT.number; bytes: FMT_BYTES.UINT8ARRAY } +> = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: BigInt('100000000000'), + gas: BigInt('21000'), + gasPrice: BigInt('20000000000'), + type: BigInt('0'), + maxFeePerGas: BigInt('78000000000'), + maxPriorityFeePerGas: BigInt('1230000000'), + data: new Uint8Array(), + nonce: BigInt(4), + chain: 'mainnet', + hardfork: 'berlin', + chainId: BigInt(1), + common: { + customChain: { + name: 'foo', + networkId: BigInt(4), + chainId: BigInt(66), + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: BigInt('21000'), + v: BigInt('37'), + r: hexToBytes('0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d'), + s: hexToBytes('7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0'), +}; + +export const numbersAsHexStringTransaction: FormatType< + Transaction, + { number: FMT_NUMBER.HEX; bytes: typeof DEFAULT_RETURN_FORMAT.bytes } +> = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + data: '0x', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + common: { + customChain: { + name: 'foo', + networkId: '0x4', + chainId: '0x42', + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', +}; + +export const numbersAsNumberTransaction: FormatType< + Transaction, + { number: FMT_NUMBER.NUMBER; bytes: typeof DEFAULT_RETURN_FORMAT.bytes } +> = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: 100000000000, + gas: 21000, + gasPrice: 20000000000, + type: 0, + maxFeePerGas: 78000000000, + maxPriorityFeePerGas: 1230000000, + data: '0x', + nonce: 4, + chain: 'mainnet', + hardfork: 'berlin', + chainId: 1, + common: { + customChain: { + name: 'foo', + networkId: 4, + chainId: 66, + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: 21000, + v: 37, + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', +}; + +export const numbersAsStringTransaction: FormatType< + Transaction, + { number: FMT_NUMBER.STR; bytes: typeof DEFAULT_RETURN_FORMAT.bytes } +> = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '100000000000', + gas: '21000', + gasPrice: '20000000000', + type: '0', + maxFeePerGas: '78000000000', + maxPriorityFeePerGas: '1230000000', + data: '0x', + nonce: '4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '1', + common: { + customChain: { + name: 'foo', + networkId: '4', + chainId: '66', + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: '21000', + v: '37', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', +}; + +export const numbersAsBigIntTransaction: FormatType< + Transaction, + { number: FMT_NUMBER.BIGINT; bytes: typeof DEFAULT_RETURN_FORMAT.bytes } +> = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: BigInt(100000000000), + gas: BigInt(21000), + gasPrice: BigInt(20000000000), + type: BigInt(0), + maxFeePerGas: BigInt(78000000000), + maxPriorityFeePerGas: BigInt(1230000000), + data: '0x', + nonce: BigInt(4), + chain: 'mainnet', + hardfork: 'berlin', + chainId: BigInt(1), + common: { + customChain: { + name: 'foo', + networkId: BigInt(4), + chainId: BigInt(66), + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: BigInt(21000), + v: BigInt(37), + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', +}; + +const dummyTransaction: Transaction = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', +}; +export const validGetTransactionFromOrToAttrData: { input: any; output: any }[] = [ + { + input: { + role: 'from', + transaction: { + ...dummyTransaction, + from: '0x58422b64d0e95ab4e93a9d95b755d9b53545c9ef', + }, + }, + output: '0x58422b64d0e95ab4e93a9d95b755d9b53545c9ef', + }, +]; +export const invalidGetTransactionFromOrToAttrData: { input: any; output: any }[] = [ + { + input: { + role: 'from', + transaction: { + ...dummyTransaction, + from: '0x58422b64d0e95ab4e93a9d95b755d9b53545c9eff', + }, + }, + output: 'Invalid value given "0x58422b64d0e95ab4e93a9d95b755d9b53545c9eff". Error: invalid transaction with invalid sender', + }, + { + input: { + role: 'to', + transaction: { + ...dummyTransaction, + to: '0x58422b64d0e95ab4e93a9d95b755d9b53545c9eff', + }, + }, + output: 'Invalid value given "0x58422b64d0e95ab4e93a9d95b755d9b53545c9eff". Error: invalid transaction with invalid receiver', + }, + { + input: { + role: 'from', + transaction: { + ...dummyTransaction, + from: '0x1', + }, + }, + output: 'Invalid value given "0x1". Error: invalid transaction with invalid sender', + }, + { + input: { + role: 'from', + transaction: { + ...dummyTransaction, + from: 1, + }, + }, + output: 'Invalid value given "LocalWalletNotAvailableError". Error: Attempted to index account in local wallet, but no wallet is available.', + }, +]; + +export const invalidGetTransactionFromOrToAttrDataForWallet: { input: any; output: any }[] = [ + { + input: { + role: 'from', + transaction: { + ...dummyTransaction, + from: 1, + }, + }, + output: 'Invalid value given "LocalWalletNotAvailableError". Error: Attempted to index account in local wallet, but no wallet is available.', + }, + { + input: { + role: 'from', + transaction: { + ...dummyTransaction, + from: 10, + }, + }, + output: 'Invalid value given "LocalWalletNotAvailableError". Error: Attempted to index account in local wallet, but no wallet is available.', + }, +]; diff --git a/packages/web3-eth/test/fixtures/prepare_transaction_for_signing.ts b/packages/web3-eth/test/fixtures/prepare_transaction_for_signing.ts new file mode 100644 index 00000000000..dd03a74bcde --- /dev/null +++ b/packages/web3-eth/test/fixtures/prepare_transaction_for_signing.ts @@ -0,0 +1,898 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AccessList, Block, HexString, Common, Transaction } from 'web3-types'; + +export const preEip1559Block: Block = { + parentHash: '0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54', + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + miner: '0xbb7b8287f3f0a933474a79eae42cbca977791171', + stateRoot: '0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d', + transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + difficulty: '0x4ea3f27bc', + number: '0x1b4', + gasLimit: '0x1388', + gasUsed: '0x0', + timestamp: '0x55ba467c', + extraData: '0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32', + mixHash: '0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843', + nonce: '0x689056015818adbe', + totalDifficulty: '0x78ed983323d', + size: '0x220', + transactions: [], + uncles: [], + hash: '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', +}; +export const postEip1559Block: Block = { + parentHash: '0x28f49150e1fe6f245655925b290f59e707d1e5c646dadaa22937169433b30294', + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + miner: '0x86864f1edf10eaf105b1bdc6e9aa8232b4c6aa00', + stateRoot: '0x116981b10423133ade5bd44f03c54cc3c57f4467a1c3d4b0c6d8d33a76c361ad', + transactionsRoot: '0x738f53f745d58169da93ebbd52cc49e0c979d6ca68a6513007b546b19ab78ba4', + receiptsRoot: '0xc97d4f9980d680053606318a5820261a1dccb556d1056b70f0d48fb384986be5', + logsBloom: + '0x4020001000000000000000008000010000000000400200000001002140000008000000010000810020000840000204304000081000000b00400010000822200004200020020140000001000882000064000021303200020000400008800000000002202102000084010000090020a8000800002000000010000030300000000000000006001005000040080001010000010040018100004c0050004000000000420000000021000200000010020008100000004000080000000000000040000900080102004002000080210201081014004030200148101000002020108025000018020020102040000204240500010000002200048000401300080088000002', + difficulty: '0x6cd6be3a', + number: '0xa0d600', + gasLimit: '0x1c9c381', + gasUsed: '0x8dc073', + timestamp: '0x60dc24ec', + extraData: '0x796f75747562652e636f6d2f77617463683f763d6451773477395767586351', + mixHash: '0xa29afb1fa1aea9eeac72ff435a8fc420bbc1fa1be08223eb61f294ee32250bde', + nonce: '0x122af1a5ccd78f3b', + totalDifficulty: '0x78828f2d886cbb', + size: '0x2042', + transactions: [], + uncles: [], + hash: '0x846880b1158f434884f3637802ed09bac77eafc35b5f03b881ac88ce38a54907', + baseFeePerGas: '0x7', +}; + +const common: Common = { + baseChain: 'mainnet', + customChain: { + name: 'custom-network', + networkId: 1, + chainId: 1, + }, + hardfork: 'istanbul', +}; +const commonBerlin: Common = { + baseChain: 'mainnet', + customChain: { + name: 'custom-network', + networkId: 1, + chainId: 1, + }, + hardfork: 'berlin', +}; +const commonLondon: Common = { + baseChain: 'mainnet', + customChain: { + name: 'custom-network', + networkId: 1, + chainId: 1, + }, + hardfork: 'london', +}; + +const accessList: AccessList = [ + { + address: '0x0000000000000000000000000000000000000101', + storageKeys: [ + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x00000000000000000000000000000000000000000000000000000000000060a7', + ], + }, +]; + +/** + * Array consists of: + * - pre/post EIP1559 block + * - transaction data + * - private key + * - RLP encoded signed transaction + * - v + * - r + * - s + * + * Each test runs with from specified, and without (will use private key to get from) + */ +export const validTransactions: [ + Block, + Transaction, + HexString, + HexString, + HexString, + HexString, + HexString, + HexString, + HexString, + HexString, +][] = [ + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '20000000000', + gas: 21000, + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + from: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + value: '1000000000', + input: '', + common, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0xf868808504a817c80082520894f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008026a0afa02d193471bb974081585daabf8a751d4decbb519604ac7df612cc11e9226da04bf1bd55e82cebb2b09ed39bbffe35107ea611fa212c2d9a1f1ada4952077118', + '0xab0f71614c37231d71ae521ce188a9c7c9d5e976124a91f62f9f125348dd0326', + '0x2c7903a33b55caf582d170f21595f1a7e598df3fa61b103ea0cd9d6b2a92565d', + '0x26', + '0xafa02d193471bb974081585daabf8a751d4decbb519604ac7df612cc11e9226d', + '0x4bf1bd55e82cebb2b09ed39bbffe35107ea611fa212c2d9a1f1ada4952077118', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '20000000000', + gas: 21000, + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + value: '1000000000', + input: '', + common, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0xf868808504a817c80082520894f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008026a0afa02d193471bb974081585daabf8a751d4decbb519604ac7df612cc11e9226da04bf1bd55e82cebb2b09ed39bbffe35107ea611fa212c2d9a1f1ada4952077118', + '0xab0f71614c37231d71ae521ce188a9c7c9d5e976124a91f62f9f125348dd0326', + '0x2c7903a33b55caf582d170f21595f1a7e598df3fa61b103ea0cd9d6b2a92565d', + '0x26', + '0xafa02d193471bb974081585daabf8a751d4decbb519604ac7df612cc11e9226d', + '0x4bf1bd55e82cebb2b09ed39bbffe35107ea611fa212c2d9a1f1ada4952077118', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '1', + gas: 31853, + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + from: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + value: '0', + input: '', + common, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0xf85f8001827c6d94f0109fc8df283027b6285cc889f5aa624eac1f55808026a074dcecc6b8ad09ca09882ac1088eac145e799f56ea3f5b5fe8fcb52bbd3ea4f7a03d49e02af9c239b1b8aea8a7ac9162862dec03207f9f59bc38a4f2b9e42077a9', + '0xfe1f3da48513409d62210b76d3493190fed19e4d54f0aa4283715184bff68e0b', + '0xce07a6c829c9a7d0a11d5ce7120bfdae769b75ba2c20961a00738d540267a975', + '0x26', + '0x74dcecc6b8ad09ca09882ac1088eac145e799f56ea3f5b5fe8fcb52bbd3ea4f7', + '0x3d49e02af9c239b1b8aea8a7ac9162862dec03207f9f59bc38a4f2b9e42077a9', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '1', + gas: 31853, + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + value: '0', + input: '', + common, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0xf85f8001827c6d94f0109fc8df283027b6285cc889f5aa624eac1f55808026a074dcecc6b8ad09ca09882ac1088eac145e799f56ea3f5b5fe8fcb52bbd3ea4f7a03d49e02af9c239b1b8aea8a7ac9162862dec03207f9f59bc38a4f2b9e42077a9', + '0xfe1f3da48513409d62210b76d3493190fed19e4d54f0aa4283715184bff68e0b', + '0xce07a6c829c9a7d0a11d5ce7120bfdae769b75ba2c20961a00738d540267a975', + '0x26', + '0x74dcecc6b8ad09ca09882ac1088eac145e799f56ea3f5b5fe8fcb52bbd3ea4f7', + '0x3d49e02af9c239b1b8aea8a7ac9162862dec03207f9f59bc38a4f2b9e42077a9', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '234567897654321', + gas: 2000000, + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + from: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + value: '1000000000', + input: '', + common, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0xf86a8086d55698372431831e848094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008025a009ebb6ca057a0535d6186462bc0b465b561c94a295bdb0621fc19208ab149a9ca0440ffd775ce91a833ab410777204d5341a6f9fa91216a6f3ee2c051fea6a0428', + '0xd8f64a42b57be0d565f385378db2f6bf324ce14a594afc05de90436e9ce01f60', + '0x6893a6ee8df79b0f5d64a180cd1ef35d030f3e296a5361cf04d02ce720d32ec5', + '0x25', + '0x9ebb6ca057a0535d6186462bc0b465b561c94a295bdb0621fc19208ab149a9c', + '0x440ffd775ce91a833ab410777204d5341a6f9fa91216a6f3ee2c051fea6a0428', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '234567897654321', + gas: 2000000, + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + value: '1000000000', + input: '', + common, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0xf86a8086d55698372431831e848094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008025a009ebb6ca057a0535d6186462bc0b465b561c94a295bdb0621fc19208ab149a9ca0440ffd775ce91a833ab410777204d5341a6f9fa91216a6f3ee2c051fea6a0428', + '0xd8f64a42b57be0d565f385378db2f6bf324ce14a594afc05de90436e9ce01f60', + '0x6893a6ee8df79b0f5d64a180cd1ef35d030f3e296a5361cf04d02ce720d32ec5', + '0x25', + '0x9ebb6ca057a0535d6186462bc0b465b561c94a295bdb0621fc19208ab149a9c', + '0x440ffd775ce91a833ab410777204d5341a6f9fa91216a6f3ee2c051fea6a0428', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '10', + gas: 31853, + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + from: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + value: '0', + input: '', + common, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0xf85f800a827c6d94f0109fc8df283027b6285cc889f5aa624eac1f55808025a03cbfff5b8ef4588b930ecbf9b85388795875edf814dfc6c71884f99b6d7555cca057142e729c1c83bfccb2785e629fc32dffb2e613df565e78e119aa4694cb1df9', + '0x247533e8b3d12185a871fca5503b7e86f2fecef4a43ded244d5c18ec6b6b057f', + '0xf5932468728558772f9422155ef1d7de7f8daf41542da16f1c1063cb98299953', + '0x25', + '0x3cbfff5b8ef4588b930ecbf9b85388795875edf814dfc6c71884f99b6d7555cc', + '0x57142e729c1c83bfccb2785e629fc32dffb2e613df565e78e119aa4694cb1df9', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '10', + gas: 31853, + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + value: '0', + input: '', + common, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0xf85f800a827c6d94f0109fc8df283027b6285cc889f5aa624eac1f55808025a03cbfff5b8ef4588b930ecbf9b85388795875edf814dfc6c71884f99b6d7555cca057142e729c1c83bfccb2785e629fc32dffb2e613df565e78e119aa4694cb1df9', + '0x247533e8b3d12185a871fca5503b7e86f2fecef4a43ded244d5c18ec6b6b057f', + '0xf5932468728558772f9422155ef1d7de7f8daf41542da16f1c1063cb98299953', + '0x25', + '0x3cbfff5b8ef4588b930ecbf9b85388795875edf814dfc6c71884f99b6d7555cc', + '0x57142e729c1c83bfccb2785e629fc32dffb2e613df565e78e119aa4694cb1df9', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '20000000000', + gas: 21000, + to: '0x3535353535353535353535353535353535353535', + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + value: '1000000000000000000', + input: '', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf86c808504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a04f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88da07e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + '0xda3be87732110de6c1354c83770aae630ede9ac308d9f7b399ecfba23d923384', + '0x7dbc5644b83abd32d014d170ba9bdc855c126328c0cb41af0ed6422bef0bb32e', + '0x25', + '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '20000000000', + gas: 21000, + to: '0x3535353535353535353535353535353535353535', + value: '1000000000000000000', + input: '', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf86c808504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a04f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88da07e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + '0xda3be87732110de6c1354c83770aae630ede9ac308d9f7b399ecfba23d923384', + '0x7dbc5644b83abd32d014d170ba9bdc855c126328c0cb41af0ed6422bef0bb32e', + '0x25', + '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8708085358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd26a031bb05bd1535150d312dcaa870a4a69c130a51aa80537659c1f308bf1f180ac6a012c938a8e04ac4e279d0b7c29811609031a96e949ad98f1ca74ca6078910bede', + '0xe86ab542020b3f386af1a1c79881d5db06f5fac58da79f697308f1d1e1799f2c', + '0x044d45bc28c2126e98c9cd0103a6559f5a92e01ecc201f48472f1e10a4c3ae27', + '0x26', + '0x31bb05bd1535150d312dcaa870a4a69c130a51aa80537659c1f308bf1f180ac6', + '0x12c938a8e04ac4e279d0b7c29811609031a96e949ad98f1ca74ca6078910bede', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8708085358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd26a031bb05bd1535150d312dcaa870a4a69c130a51aa80537659c1f308bf1f180ac6a012c938a8e04ac4e279d0b7c29811609031a96e949ad98f1ca74ca6078910bede', + '0xe86ab542020b3f386af1a1c79881d5db06f5fac58da79f697308f1d1e1799f2c', + '0x044d45bc28c2126e98c9cd0103a6559f5a92e01ecc201f48472f1e10a4c3ae27', + '0x26', + '0x31bb05bd1535150d312dcaa870a4a69c130a51aa80537659c1f308bf1f180ac6', + '0x12c938a8e04ac4e279d0b7c29811609031a96e949ad98f1ca74ca6078910bede', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 10, + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8700a85358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a0496e628e8348a24312ded09ee3d99d85b1b8f947725aa382dcf4003b7389d5aaa00c1b1cfdd66c510fd708d33279a1a61e53dff3c6ced67cf7f7b830862d6e2029', + '0x42fb18cc20b10438c6b4bcb4f3fc777a72195caf3e8b6ddc671df4a249e84ba7', + '0xa75c245723fedf4b739771f5eeedeb3dc6ecd3b9ea79277a33dc5ab27be0c911', + '0x25', + '0x496e628e8348a24312ded09ee3d99d85b1b8f947725aa382dcf4003b7389d5aa', + '0xc1b1cfdd66c510fd708d33279a1a61e53dff3c6ced67cf7f7b830862d6e2029', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 10, + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8700a85358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a0496e628e8348a24312ded09ee3d99d85b1b8f947725aa382dcf4003b7389d5aaa00c1b1cfdd66c510fd708d33279a1a61e53dff3c6ced67cf7f7b830862d6e2029', + '0x42fb18cc20b10438c6b4bcb4f3fc777a72195caf3e8b6ddc671df4a249e84ba7', + '0xa75c245723fedf4b739771f5eeedeb3dc6ecd3b9ea79277a33dc5ab27be0c911', + '0x25', + '0x496e628e8348a24312ded09ee3d99d85b1b8f947725aa382dcf4003b7389d5aa', + '0xc1b1cfdd66c510fd708d33279a1a61e53dff3c6ced67cf7f7b830862d6e2029', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: '0xa', + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8700a85358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a0496e628e8348a24312ded09ee3d99d85b1b8f947725aa382dcf4003b7389d5aaa00c1b1cfdd66c510fd708d33279a1a61e53dff3c6ced67cf7f7b830862d6e2029', + '0x42fb18cc20b10438c6b4bcb4f3fc777a72195caf3e8b6ddc671df4a249e84ba7', + '0xa75c245723fedf4b739771f5eeedeb3dc6ecd3b9ea79277a33dc5ab27be0c911', + '0x25', + '0x496e628e8348a24312ded09ee3d99d85b1b8f947725aa382dcf4003b7389d5aa', + '0xc1b1cfdd66c510fd708d33279a1a61e53dff3c6ced67cf7f7b830862d6e2029', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: '0xa', + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8700a85358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a0496e628e8348a24312ded09ee3d99d85b1b8f947725aa382dcf4003b7389d5aaa00c1b1cfdd66c510fd708d33279a1a61e53dff3c6ced67cf7f7b830862d6e2029', + '0x42fb18cc20b10438c6b4bcb4f3fc777a72195caf3e8b6ddc671df4a249e84ba7', + '0xa75c245723fedf4b739771f5eeedeb3dc6ecd3b9ea79277a33dc5ab27be0c911', + '0x25', + '0x496e628e8348a24312ded09ee3d99d85b1b8f947725aa382dcf4003b7389d5aa', + '0xc1b1cfdd66c510fd708d33279a1a61e53dff3c6ced67cf7f7b830862d6e2029', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: '16', + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8701085358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a04ba217e16f62ac277698e8853bcc010db07285b457606e9f3487c70ccc5e6508a05c6cfaa17fc1a52bede0cf25c8bd2e024b4fb89ed205f62cb3e177a83654f29d', + '0xa2db7be5398c250e3ecf569c573f222255d46c509199ff649cca5e806edf5212', + '0x9c8c1fb88a95974c5ac75b6c58af2b5a62d9ccb9dffad7552a3182344bf37c27', + '0x25', + '0x4ba217e16f62ac277698e8853bcc010db07285b457606e9f3487c70ccc5e6508', + '0x5c6cfaa17fc1a52bede0cf25c8bd2e024b4fb89ed205f62cb3e177a83654f29d', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: '16', + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8701085358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a04ba217e16f62ac277698e8853bcc010db07285b457606e9f3487c70ccc5e6508a05c6cfaa17fc1a52bede0cf25c8bd2e024b4fb89ed205f62cb3e177a83654f29d', + '0xa2db7be5398c250e3ecf569c573f222255d46c509199ff649cca5e806edf5212', + '0x9c8c1fb88a95974c5ac75b6c58af2b5a62d9ccb9dffad7552a3182344bf37c27', + '0x25', + '0x4ba217e16f62ac277698e8853bcc010db07285b457606e9f3487c70ccc5e6508', + '0x5c6cfaa17fc1a52bede0cf25c8bd2e024b4fb89ed205f62cb3e177a83654f29d', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 16, + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8701085358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a04ba217e16f62ac277698e8853bcc010db07285b457606e9f3487c70ccc5e6508a05c6cfaa17fc1a52bede0cf25c8bd2e024b4fb89ed205f62cb3e177a83654f29d', + '0xa2db7be5398c250e3ecf569c573f222255d46c509199ff649cca5e806edf5212', + '0x9c8c1fb88a95974c5ac75b6c58af2b5a62d9ccb9dffad7552a3182344bf37c27', + '0x25', + '0x4ba217e16f62ac277698e8853bcc010db07285b457606e9f3487c70ccc5e6508', + '0x5c6cfaa17fc1a52bede0cf25c8bd2e024b4fb89ed205f62cb3e177a83654f29d', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 16, + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8701085358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a04ba217e16f62ac277698e8853bcc010db07285b457606e9f3487c70ccc5e6508a05c6cfaa17fc1a52bede0cf25c8bd2e024b4fb89ed205f62cb3e177a83654f29d', + '0xa2db7be5398c250e3ecf569c573f222255d46c509199ff649cca5e806edf5212', + '0x9c8c1fb88a95974c5ac75b6c58af2b5a62d9ccb9dffad7552a3182344bf37c27', + '0x25', + '0x4ba217e16f62ac277698e8853bcc010db07285b457606e9f3487c70ccc5e6508', + '0x5c6cfaa17fc1a52bede0cf25c8bd2e024b4fb89ed205f62cb3e177a83654f29d', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: '0x16', + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8701685358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd26a0e027ec9e9921975678b73de44f7d2cd6b987a6655b9d0291b2cdff15836c6efba051b4e20835793bf0cdf268339111a24d80a4a7bb141e975a66d0edbcc20542d0', + '0x3135f97ac8d534b4b487cc2965fb1dcf427b92fd233577900dab3420e7afca13', + '0x77fd104f011a0085a9fa80f6f77cb213bce71fe8b4585d6fa9e3217117263a5b', + '0x26', + '0xe027ec9e9921975678b73de44f7d2cd6b987a6655b9d0291b2cdff15836c6efb', + '0x51b4e20835793bf0cdf268339111a24d80a4a7bb141e975a66d0edbcc20542d0', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: '0x16', + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8701685358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd26a0e027ec9e9921975678b73de44f7d2cd6b987a6655b9d0291b2cdff15836c6efba051b4e20835793bf0cdf268339111a24d80a4a7bb141e975a66d0edbcc20542d0', + '0x3135f97ac8d534b4b487cc2965fb1dcf427b92fd233577900dab3420e7afca13', + '0x77fd104f011a0085a9fa80f6f77cb213bce71fe8b4585d6fa9e3217117263a5b', + '0x26', + '0xe027ec9e9921975678b73de44f7d2cd6b987a6655b9d0291b2cdff15836c6efb', + '0x51b4e20835793bf0cdf268339111a24d80a4a7bb141e975a66d0edbcc20542d0', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: '0x16', + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8701685358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd26a0e027ec9e9921975678b73de44f7d2cd6b987a6655b9d0291b2cdff15836c6efba051b4e20835793bf0cdf268339111a24d80a4a7bb141e975a66d0edbcc20542d0', + '0x3135f97ac8d534b4b487cc2965fb1dcf427b92fd233577900dab3420e7afca13', + '0x77fd104f011a0085a9fa80f6f77cb213bce71fe8b4585d6fa9e3217117263a5b', + '0x26', + '0xe027ec9e9921975678b73de44f7d2cd6b987a6655b9d0291b2cdff15836c6efb', + '0x51b4e20835793bf0cdf268339111a24d80a4a7bb141e975a66d0edbcc20542d0', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: '0x16', + gasPrice: '230000000000', + gas: 50000, + to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', + value: '1000000000000000000', + input: '0x0123abcd', + common, + }, + '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', + '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + '0xf8701685358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd26a0e027ec9e9921975678b73de44f7d2cd6b987a6655b9d0291b2cdff15836c6efba051b4e20835793bf0cdf268339111a24d80a4a7bb141e975a66d0edbcc20542d0', + '0x3135f97ac8d534b4b487cc2965fb1dcf427b92fd233577900dab3420e7afca13', + '0x77fd104f011a0085a9fa80f6f77cb213bce71fe8b4585d6fa9e3217117263a5b', + '0x26', + '0xe027ec9e9921975678b73de44f7d2cd6b987a6655b9d0291b2cdff15836c6efb', + '0x51b4e20835793bf0cdf268339111a24d80a4a7bb141e975a66d0edbcc20542d0', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '20000000000', + gas: 27200, + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + from: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + value: '1000000000', + input: '', + common: commonBerlin, + accessList, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0x01f8c601808504a817c800826a4094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca0080f85bf859940000000000000000000000000000000000000101f842a00000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000060a701a07a49fff8f639e42af36704b16e30fd95823d9ab7e71bf7c231e397dec2c5427ca0773bfdc5e911eedc0470325727426cff3c65329be4701005cd4ea620aacfa335', + '0xbac5b9b1d381034a2eaee9d574acaff42b39dc3bc236a6022928828bdb189b92', + '0x19920e15ec80c033dec688ccc2cb414144a0dac23f6f36f503390228cc4672eb', + '0x1', + '0x7a49fff8f639e42af36704b16e30fd95823d9ab7e71bf7c231e397dec2c5427c', + '0x773bfdc5e911eedc0470325727426cff3c65329be4701005cd4ea620aacfa335', + ], + [ + preEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '20000000000', + gas: 27200, + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + value: '1000000000', + input: '', + common: commonBerlin, + accessList, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0x01f8c601808504a817c800826a4094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca0080f85bf859940000000000000000000000000000000000000101f842a00000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000060a701a07a49fff8f639e42af36704b16e30fd95823d9ab7e71bf7c231e397dec2c5427ca0773bfdc5e911eedc0470325727426cff3c65329be4701005cd4ea620aacfa335', + '0xbac5b9b1d381034a2eaee9d574acaff42b39dc3bc236a6022928828bdb189b92', + '0x19920e15ec80c033dec688ccc2cb414144a0dac23f6f36f503390228cc4672eb', + '0x1', + '0x7a49fff8f639e42af36704b16e30fd95823d9ab7e71bf7c231e397dec2c5427c', + '0x773bfdc5e911eedc0470325727426cff3c65329be4701005cd4ea620aacfa335', + ], + [ + postEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '0x3B9ACA00', + gas: 27200, + gasLimit: '0x6A40', + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + from: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + value: '1000000000', + input: '', + common: commonLondon, + accessList, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0x01f8c50180843b9aca00826a4094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca0080f85bf859940000000000000000000000000000000000000101f842a00000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000060a701a0cd7afd026299f679957b6f4d3be71e38c7724f32b123323d27e37c8ed6dba143a07bbf3c9ef4ea21a59d77dbad3509502f620dd98f21e66a11b9dc0cd9400b878d', + '0xb2d28b9d250189dfb5cd8c916833456f05b57f47567ac858786764689cb32c94', + '0x124b9f59e10f30ccf7c5b08ddb9484f5092b38f3a8d5fc0168b0e583dbd3d244', + '0x1', + '0xcd7afd026299f679957b6f4d3be71e38c7724f32b123323d27e37c8ed6dba143', + '0x7bbf3c9ef4ea21a59d77dbad3509502f620dd98f21e66a11b9dc0cd9400b878d', + ], + [ + postEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '0x3B9ACA00', + gas: 27200, + gasLimit: '0x6A40', + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + value: '1000000000', + input: '', + common: commonLondon, + accessList, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0x01f8c50180843b9aca00826a4094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca0080f85bf859940000000000000000000000000000000000000101f842a00000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000060a701a0cd7afd026299f679957b6f4d3be71e38c7724f32b123323d27e37c8ed6dba143a07bbf3c9ef4ea21a59d77dbad3509502f620dd98f21e66a11b9dc0cd9400b878d', + '0xb2d28b9d250189dfb5cd8c916833456f05b57f47567ac858786764689cb32c94', + '0x124b9f59e10f30ccf7c5b08ddb9484f5092b38f3a8d5fc0168b0e583dbd3d244', + '0x1', + '0xcd7afd026299f679957b6f4d3be71e38c7724f32b123323d27e37c8ed6dba143', + '0x7bbf3c9ef4ea21a59d77dbad3509502f620dd98f21e66a11b9dc0cd9400b878d', + ], + [ + postEip1559Block, + { + chainId: 1, + nonce: 0, + gas: 27200, + maxPriorityFeePerGas: '0x3B9ACA00', + gasLimit: '0x6A40', + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + from: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + value: '1000000000', + input: '', + common: commonLondon, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0x02f86e0180843b9aca00843b9aca0e826a4094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca0080c080a0eb8ca6017e6926503ce11c404ba9b61f30d53ea934857e4f4489f43a6c189cf8a03655ba42b2fdcabdb3363cb39e7f672baa91455632e02bab27f92e1a275ca833', + '0x488a813f2286f7c015947aa13133bdae49ec75ae1c8f5eba80034d71a038dca8', + '0xcd6d6dee80ecc38f1b22f2d128bf6043dc41079fc913183a8995b5b3e187df61', + '0x0', + '0xeb8ca6017e6926503ce11c404ba9b61f30d53ea934857e4f4489f43a6c189cf8', + '0x3655ba42b2fdcabdb3363cb39e7f672baa91455632e02bab27f92e1a275ca833', + ], + [ + postEip1559Block, + { + chainId: 1, + nonce: 0, + maxPriorityFeePerGas: '0x3B9ACA00', + gas: 27200, + gasLimit: '0x6A40', + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + value: '1000000000', + input: '', + common: commonLondon, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0x02f86e0180843b9aca00843b9aca0e826a4094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca0080c080a0eb8ca6017e6926503ce11c404ba9b61f30d53ea934857e4f4489f43a6c189cf8a03655ba42b2fdcabdb3363cb39e7f672baa91455632e02bab27f92e1a275ca833', + '0x488a813f2286f7c015947aa13133bdae49ec75ae1c8f5eba80034d71a038dca8', + '0xcd6d6dee80ecc38f1b22f2d128bf6043dc41079fc913183a8995b5b3e187df61', + '0x0', + '0xeb8ca6017e6926503ce11c404ba9b61f30d53ea934857e4f4489f43a6c189cf8', + '0x3655ba42b2fdcabdb3363cb39e7f672baa91455632e02bab27f92e1a275ca833', + ], + [ + postEip1559Block, + { + chainId: 1, + nonce: 0, + gas: 27200, + gasPrice: '0x3B9ACA00', + gasLimit: '0x6A40', + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + from: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + value: '1000000000', + input: '', + common: commonLondon, + accessList, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0x01f8c50180843b9aca00826a4094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca0080f85bf859940000000000000000000000000000000000000101f842a00000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000060a701a0cd7afd026299f679957b6f4d3be71e38c7724f32b123323d27e37c8ed6dba143a07bbf3c9ef4ea21a59d77dbad3509502f620dd98f21e66a11b9dc0cd9400b878d', + '0xb2d28b9d250189dfb5cd8c916833456f05b57f47567ac858786764689cb32c94', + '0x124b9f59e10f30ccf7c5b08ddb9484f5092b38f3a8d5fc0168b0e583dbd3d244', + '0x1', + '0xcd7afd026299f679957b6f4d3be71e38c7724f32b123323d27e37c8ed6dba143', + '0x7bbf3c9ef4ea21a59d77dbad3509502f620dd98f21e66a11b9dc0cd9400b878d', + ], + [ + postEip1559Block, + { + chainId: 1, + nonce: 0, + gasPrice: '0x3B9ACA00', + gas: 27200, + gasLimit: '0x6A40', + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + value: '1000000000', + input: '', + common: commonLondon, + accessList, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0x01f8c50180843b9aca00826a4094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca0080f85bf859940000000000000000000000000000000000000101f842a00000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000060a701a0cd7afd026299f679957b6f4d3be71e38c7724f32b123323d27e37c8ed6dba143a07bbf3c9ef4ea21a59d77dbad3509502f620dd98f21e66a11b9dc0cd9400b878d', + '0xb2d28b9d250189dfb5cd8c916833456f05b57f47567ac858786764689cb32c94', + '0x124b9f59e10f30ccf7c5b08ddb9484f5092b38f3a8d5fc0168b0e583dbd3d244', + '0x1', + '0xcd7afd026299f679957b6f4d3be71e38c7724f32b123323d27e37c8ed6dba143', + '0x7bbf3c9ef4ea21a59d77dbad3509502f620dd98f21e66a11b9dc0cd9400b878d', + ], + [ + postEip1559Block, + { + chainId: 1, + nonce: 0, + maxPriorityFeePerGas: '0x3B9ACA00', + maxFeePerGas: '0xB2D05E00', + gasLimit: '0x6A40', + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + from: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + value: '1000000000', + input: '', + common: commonLondon, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0x02f86e0180843b9aca0084b2d05e00826a4094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca0080c080a0d1290a118d51918c1ca17e3af0267c45efcd745cf42e78eabc444c424d6bcf37a003c81e1fda169575023a94200ee034128747f91020e704abaee30dbcfc785c36', + '0x82c19b39a6b7eaa0492863a8b236fad5018f267b4977c270ddd5228c4cbda60e', + '0xe3beea0918f445c21eb2f42e3cbc3c5d54321ec642f47d12c473b2765df97f2b', + '0x0', + '0xd1290a118d51918c1ca17e3af0267c45efcd745cf42e78eabc444c424d6bcf37', + '0x3c81e1fda169575023a94200ee034128747f91020e704abaee30dbcfc785c36', + ], + [ + postEip1559Block, + { + chainId: 1, + nonce: 0, + maxPriorityFeePerGas: '1000000000', + maxFeePerGas: '3000000000', + gasLimit: '0x6A40', + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + from: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + value: '1000000000', + input: '', + common: commonLondon, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0x02f86e0180843b9aca0084b2d05e00826a4094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca0080c080a0d1290a118d51918c1ca17e3af0267c45efcd745cf42e78eabc444c424d6bcf37a003c81e1fda169575023a94200ee034128747f91020e704abaee30dbcfc785c36', + '0x82c19b39a6b7eaa0492863a8b236fad5018f267b4977c270ddd5228c4cbda60e', + '0xe3beea0918f445c21eb2f42e3cbc3c5d54321ec642f47d12c473b2765df97f2b', + '0x0', + '0xd1290a118d51918c1ca17e3af0267c45efcd745cf42e78eabc444c424d6bcf37', + '0x3c81e1fda169575023a94200ee034128747f91020e704abaee30dbcfc785c36', + ], + [ + postEip1559Block, + { + chainId: 1, + nonce: 0, + maxPriorityFeePerGas: '1000000000', + maxFeePerGas: '3000000000', + gasLimit: '0x6A40', + to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', + value: '1000000000', + input: '', + common: commonLondon, + }, + '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', + '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', + '0x02f86e0180843b9aca0084b2d05e00826a4094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca0080c080a0d1290a118d51918c1ca17e3af0267c45efcd745cf42e78eabc444c424d6bcf37a003c81e1fda169575023a94200ee034128747f91020e704abaee30dbcfc785c36', + '0x82c19b39a6b7eaa0492863a8b236fad5018f267b4977c270ddd5228c4cbda60e', + '0xe3beea0918f445c21eb2f42e3cbc3c5d54321ec642f47d12c473b2765df97f2b', + '0x0', + '0xd1290a118d51918c1ca17e3af0267c45efcd745cf42e78eabc444c424d6bcf37', + '0x3c81e1fda169575023a94200ee034128747f91020e704abaee30dbcfc785c36', + ], +]; diff --git a/packages/web3-eth/test/fixtures/rpc_methods_wrappers.ts b/packages/web3-eth/test/fixtures/rpc_methods_wrappers.ts new file mode 100644 index 00000000000..02f877d9988 --- /dev/null +++ b/packages/web3-eth/test/fixtures/rpc_methods_wrappers.ts @@ -0,0 +1,71 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + DataFormat, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + Numbers, + Uint, + TransactionWithSenderAPI, +} from 'web3-types'; + +// Array consists of: returnType parameter, mock RPC result, expected output +export const getHashRateValidData: [DataFormat, Numbers, Numbers][] = [ + [DEFAULT_RETURN_FORMAT, '0x38a', '0x38a'], + [{ ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, '0x38a', '906'], + [{ ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, '0x38a', 906], + [{ ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, '0x38a', BigInt('0x38a')], +]; + +// Array consists of: returnType parameter, mock RPC result, expected output +export const getGasPriceValidData: [DataFormat, any, any][] = [ + [DEFAULT_RETURN_FORMAT, '0x1dfd14000', '0x1dfd14000'], + [{ ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, '0x1dfd14000', '8049999872'], + [{ ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, '0x1dfd14000', 8049999872], + [{ ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, '0x1dfd14000', BigInt('0x1dfd14000')], +]; + +// Array consists of: returnType parameter, mock RPC result, expected output +export const getBlockNumberValidData: [DataFormat, any, any][] = [ + [DEFAULT_RETURN_FORMAT, '0x4b7', '0x4b7'], + [{ ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, '0x4b7', '1207'], + [{ ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, '0x4b7', 1207], + [{ ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, '0x4b7', BigInt('0x4b7')], +]; + +export const transactionWithSender: TransactionWithSenderAPI = { + to: '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + type: '0x0', + nonce: '0x1', + gas: '0xc350', + value: '0x1', + input: '0x0', + maxFeePerGas: '0x1475505aab', + maxPriorityFeePerGas: '0x7f324180', + accessList: [], + gasPrice: '0x4a817c800', + from: '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + chainId: '0x1', +}; + +export const getChainIdValidData: [DataFormat, Uint, Numbers][] = [ + [DEFAULT_RETURN_FORMAT, '0x3d', '0x3d'], + [{ ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, '0x3d', 61], + [{ ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, '0x3d', '61'], + [{ ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, '0x3d', BigInt('0x3d')], +]; diff --git a/packages/web3-eth/test/fixtures/simple_revert.ts b/packages/web3-eth/test/fixtures/simple_revert.ts new file mode 100644 index 00000000000..4a942522678 --- /dev/null +++ b/packages/web3-eth/test/fixtures/simple_revert.ts @@ -0,0 +1,100 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const SimpleRevertAbi = [ + { + inputs: [], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + inputs: [], + name: 'ErrorWithNoParams', + type: 'error', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'code', + type: 'uint256', + }, + { + internalType: 'string', + name: 'message', + type: 'string', + }, + ], + name: 'ErrorWithParams', + type: 'error', + }, + { + inputs: [], + name: 'revertCall', + outputs: [], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [], + name: 'revertErrorWithNoParams', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'revertErrorWithParams', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'string', + name: 'revertString', + type: 'string', + }, + ], + name: 'revertSend', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, +]; + +export const SimpleRevertBytecode = { + functionDebugData: { + '@_5': { + // eslint-disable-next-line no-null/no-null + entryPoint: null, + id: 5, + parameterSlots: 0, + returnSlots: 0, + }, + }, + generatedSources: [], + linkReferences: {}, + object: '608060405234801561001057600080fd5b50610639806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80633ebf4d9c14610051578063819f48fe1461005b578063ba57a51114610065578063f38fb65b14610081575b600080fd5b61005961008b565b005b6100636100bd565b005b61007f600480360381019061007a919061031f565b6100fb565b005b61008961018a565b005b6040517f72090e4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602a6040517fc85bda600000000000000000000000000000000000000000000000000000000081526004016100f29190610414565b60405180910390fd5b60405160200161010a90610499565b60405160208183030381529060405280519060200120816040516020016101319190610514565b6040516020818303038152906040528051906020012003610187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017e90610577565b60405180910390fd5b50565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101bc906105e3565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61022c826101e3565b810181811067ffffffffffffffff8211171561024b5761024a6101f4565b5b80604052505050565b600061025e6101c5565b905061026a8282610223565b919050565b600067ffffffffffffffff82111561028a576102896101f4565b5b610293826101e3565b9050602081019050919050565b82818337600083830152505050565b60006102c26102bd8461026f565b610254565b9050828152602081018484840111156102de576102dd6101de565b5b6102e98482856102a0565b509392505050565b600082601f830112610306576103056101d9565b5b81356103168482602086016102af565b91505092915050565b600060208284031215610335576103346101cf565b5b600082013567ffffffffffffffff811115610353576103526101d4565b5b61035f848285016102f1565b91505092915050565b6000819050919050565b6000819050919050565b6000819050919050565b60006103a161039c61039784610368565b61037c565b610372565b9050919050565b6103b181610386565b82525050565b600082825260208201905092915050565b7f5468697320697320616e206572726f72207769746820706172616d7300000000600082015250565b60006103fe601c836103b7565b9150610409826103c8565b602082019050919050565b600060408201905061042960008301846103a8565b818103602083015261043a816103f1565b905092915050565b600081905092915050565b7f7265766572740000000000000000000000000000000000000000000000000000600082015250565b6000610483600683610442565b915061048e8261044d565b600682019050919050565b60006104a482610476565b9150819050919050565b600081519050919050565b60005b838110156104d75780820151818401526020810190506104bc565b60008484015250505050565b60006104ee826104ae565b6104f88185610442565b93506105088185602086016104b9565b80840191505092915050565b600061052082846104e3565b915081905092915050565b7f5468697320697320612073656e64207265766572740000000000000000000000600082015250565b60006105616015836103b7565b915061056c8261052b565b602082019050919050565b6000602082019050818103600083015261059081610554565b9050919050565b7f5468697320697320612063616c6c207265766572740000000000000000000000600082015250565b60006105cd6015836103b7565b91506105d882610597565b602082019050919050565b600060208201905081810360008301526105fc816105c0565b905091905056fea2646970667358221220b588b01905b37b3ca19aa18f84e1211506d00be5ba2a3d089b964cf0698b3ee564736f6c63430008110033', + opcodes: + 'PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x639 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3EBF4D9C EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x819F48FE EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xBA57A511 EQ PUSH2 0x65 JUMPI DUP1 PUSH4 0xF38FB65B EQ PUSH2 0x81 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x8B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x63 PUSH2 0xBD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x7A SWAP2 SWAP1 PUSH2 0x31F JUMP JUMPDEST PUSH2 0xFB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x89 PUSH2 0x18A JUMP JUMPDEST STOP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x72090E4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2A PUSH1 0x40 MLOAD PUSH32 0xC85BDA6000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF2 SWAP2 SWAP1 PUSH2 0x414 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x10A SWAP1 PUSH2 0x499 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x131 SWAP2 SWAP1 PUSH2 0x514 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SUB PUSH2 0x187 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17E SWAP1 PUSH2 0x577 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1BC SWAP1 PUSH2 0x5E3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x22C DUP3 PUSH2 0x1E3 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x24B JUMPI PUSH2 0x24A PUSH2 0x1F4 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25E PUSH2 0x1C5 JUMP JUMPDEST SWAP1 POP PUSH2 0x26A DUP3 DUP3 PUSH2 0x223 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x28A JUMPI PUSH2 0x289 PUSH2 0x1F4 JUMP JUMPDEST JUMPDEST PUSH2 0x293 DUP3 PUSH2 0x1E3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C2 PUSH2 0x2BD DUP5 PUSH2 0x26F JUMP JUMPDEST PUSH2 0x254 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x2DE JUMPI PUSH2 0x2DD PUSH2 0x1DE JUMP JUMPDEST JUMPDEST PUSH2 0x2E9 DUP5 DUP3 DUP6 PUSH2 0x2A0 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x306 JUMPI PUSH2 0x305 PUSH2 0x1D9 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x316 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x2AF JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x335 JUMPI PUSH2 0x334 PUSH2 0x1CF JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x353 JUMPI PUSH2 0x352 PUSH2 0x1D4 JUMP JUMPDEST JUMPDEST PUSH2 0x35F DUP5 DUP3 DUP6 ADD PUSH2 0x2F1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A1 PUSH2 0x39C PUSH2 0x397 DUP5 PUSH2 0x368 JUMP JUMPDEST PUSH2 0x37C JUMP JUMPDEST PUSH2 0x372 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x3B1 DUP2 PUSH2 0x386 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x5468697320697320616E206572726F72207769746820706172616D7300000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FE PUSH1 0x1C DUP4 PUSH2 0x3B7 JUMP JUMPDEST SWAP2 POP PUSH2 0x409 DUP3 PUSH2 0x3C8 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x429 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x3A8 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x43A DUP2 PUSH2 0x3F1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x7265766572740000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x483 PUSH1 0x6 DUP4 PUSH2 0x442 JUMP JUMPDEST SWAP2 POP PUSH2 0x48E DUP3 PUSH2 0x44D JUMP JUMPDEST PUSH1 0x6 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4A4 DUP3 PUSH2 0x476 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4D7 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x4BC JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EE DUP3 PUSH2 0x4AE JUMP JUMPDEST PUSH2 0x4F8 DUP2 DUP6 PUSH2 0x442 JUMP JUMPDEST SWAP4 POP PUSH2 0x508 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x4B9 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x520 DUP3 DUP5 PUSH2 0x4E3 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x5468697320697320612073656E64207265766572740000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x561 PUSH1 0x15 DUP4 PUSH2 0x3B7 JUMP JUMPDEST SWAP2 POP PUSH2 0x56C DUP3 PUSH2 0x52B JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x590 DUP2 PUSH2 0x554 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x5468697320697320612063616C6C207265766572740000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5CD PUSH1 0x15 DUP4 PUSH2 0x3B7 JUMP JUMPDEST SWAP2 POP PUSH2 0x5D8 DUP3 PUSH2 0x597 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x5FC DUP2 PUSH2 0x5C0 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 DUP9 0xB0 NOT SDIV 0xB3 PUSH28 0x3CA19AA18F84E1211506D00BE5BA2A3D089B964CF0698B3EE564736F PUSH13 0x63430008110033000000000000 ', + sourceMap: '59:575:0:-:0;;;87:16;;;;;;;;;;59:575;;;;;;', +}; + +export const SimpleRevertDeploymentData = + '0x608060405234801561001057600080fd5b50610639806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80633ebf4d9c14610051578063819f48fe1461005b578063ba57a51114610065578063f38fb65b14610081575b600080fd5b61005961008b565b005b6100636100bd565b005b61007f600480360381019061007a919061031f565b6100fb565b005b61008961018a565b005b6040517f72090e4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602a6040517fc85bda600000000000000000000000000000000000000000000000000000000081526004016100f29190610414565b60405180910390fd5b60405160200161010a90610499565b60405160208183030381529060405280519060200120816040516020016101319190610514565b6040516020818303038152906040528051906020012003610187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017e90610577565b60405180910390fd5b50565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101bc906105e3565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61022c826101e3565b810181811067ffffffffffffffff8211171561024b5761024a6101f4565b5b80604052505050565b600061025e6101c5565b905061026a8282610223565b919050565b600067ffffffffffffffff82111561028a576102896101f4565b5b610293826101e3565b9050602081019050919050565b82818337600083830152505050565b60006102c26102bd8461026f565b610254565b9050828152602081018484840111156102de576102dd6101de565b5b6102e98482856102a0565b509392505050565b600082601f830112610306576103056101d9565b5b81356103168482602086016102af565b91505092915050565b600060208284031215610335576103346101cf565b5b600082013567ffffffffffffffff811115610353576103526101d4565b5b61035f848285016102f1565b91505092915050565b6000819050919050565b6000819050919050565b6000819050919050565b60006103a161039c61039784610368565b61037c565b610372565b9050919050565b6103b181610386565b82525050565b600082825260208201905092915050565b7f5468697320697320616e206572726f72207769746820706172616d7300000000600082015250565b60006103fe601c836103b7565b9150610409826103c8565b602082019050919050565b600060408201905061042960008301846103a8565b818103602083015261043a816103f1565b905092915050565b600081905092915050565b7f7265766572740000000000000000000000000000000000000000000000000000600082015250565b6000610483600683610442565b915061048e8261044d565b600682019050919050565b60006104a482610476565b9150819050919050565b600081519050919050565b60005b838110156104d75780820151818401526020810190506104bc565b60008484015250505050565b60006104ee826104ae565b6104f88185610442565b93506105088185602086016104b9565b80840191505092915050565b600061052082846104e3565b915081905092915050565b7f5468697320697320612073656e64207265766572740000000000000000000000600082015250565b60006105616015836103b7565b915061056c8261052b565b602082019050919050565b6000602082019050818103600083015261059081610554565b9050919050565b7f5468697320697320612063616c6c207265766572740000000000000000000000600082015250565b60006105cd6015836103b7565b91506105d882610597565b602082019050919050565b600060208201905081810360008301526105fc816105c0565b905091905056fea2646970667358221220b588b01905b37b3ca19aa18f84e1211506d00be5ba2a3d089b964cf0698b3ee564736f6c63430008110033'; diff --git a/packages/web3-eth/test/fixtures/system_test_utils.ts b/packages/web3-eth/test/fixtures/system_test_utils.ts new file mode 120000 index 00000000000..2ab08a83752 --- /dev/null +++ b/packages/web3-eth/test/fixtures/system_test_utils.ts @@ -0,0 +1 @@ +../../../../scripts/system_tests_utils.ts \ No newline at end of file diff --git a/packages/web3-eth/test/fixtures/validate_transaction_for_signing.ts b/packages/web3-eth/test/fixtures/validate_transaction_for_signing.ts new file mode 100644 index 00000000000..f22d5ac60cc --- /dev/null +++ b/packages/web3-eth/test/fixtures/validate_transaction_for_signing.ts @@ -0,0 +1,899 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Transaction, FMT_BYTES, FMT_NUMBER, FormatType } from 'web3-types'; +import { + ChainIdMismatchError, + CommonOrChainAndHardforkError, + Eip1559GasPriceError, + InvalidGasOrGasPrice, + InvalidMaxPriorityFeePerGasOrMaxFeePerGas, + InvalidNonceOrChainIdError, + MissingChainOrHardforkError, + MissingCustomChainError, + MissingCustomChainIdError, + MissingGasError, + TransactionGasMismatchError, + UnsupportedFeeMarketError, +} from 'web3-errors'; + +// eslint-disable-next-line @typescript-eslint/no-empty-function +export const invalidTransactionObject: any[] = ['42', false, '0x0', BigInt(42), () => {}]; + +export const validateCustomChainInfoData: [ + FormatType | any, + undefined | MissingCustomChainError | MissingCustomChainIdError | ChainIdMismatchError, +][] = [ + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + common: { + customChain: { + name: 'foo', + networkId: '0x4', + chainId: '0x1', + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + undefined, + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + undefined, + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + common: { + customChain: { + networkId: '0x4', + chainId: '0x1', + }, + }, + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + undefined, + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + common: {}, + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new MissingCustomChainError(), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + common: { + customChain: { + networkId: '0x4', + }, + }, + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new MissingCustomChainIdError(), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + common: { + customChain: { + networkId: '0x4', + chainId: '0x42', + }, + }, + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new ChainIdMismatchError({ txChainId: '0x1', customChainId: '0x42' }), + ], +]; + +export const validateChainInfoData: [ + FormatType | any, + undefined | CommonOrChainAndHardforkError | MissingChainOrHardforkError, +][] = [ + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + common: { + customChain: { + name: 'foo', + networkId: '0x4', + chainId: '0x1', + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + undefined, + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + undefined, + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + chain: 'mainnet', + hardfork: 'berlin', + common: { + customChain: { + name: 'foo', + networkId: '0x4', + chainId: '0x1', + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new CommonOrChainAndHardforkError(), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + chain: 'mainnet', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new MissingChainOrHardforkError({ + chain: 'mainnet', + hardfork: undefined, + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + hardfork: 'berlin', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new MissingChainOrHardforkError({ + chain: undefined, + hardfork: 'berlin', + }), + ], +]; + +export const validateGasData: [ + FormatType | any, + ( + | undefined + | MissingGasError + | InvalidGasOrGasPrice + | InvalidMaxPriorityFeePerGasOrMaxFeePerGas + | Eip1559GasPriceError + | UnsupportedFeeMarketError + ), +][] = [ + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + undefined, + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + type: '0x2', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + undefined, + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + type: '0x2', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new MissingGasError({ + gas: undefined, + gasPrice: undefined, + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + type: '0x0', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new MissingGasError({ + gas: '0x5208', + gasPrice: undefined, + maxFeePerGas: undefined, + maxPriorityFeePerGas: undefined, + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new MissingGasError({ + gas: '0x5208', + gasPrice: undefined, + maxFeePerGas: undefined, + maxPriorityFeePerGas: undefined, + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '-0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new InvalidGasOrGasPrice({ gas: '-0x5208', gasPrice: '0x4a817c800' }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '-0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new InvalidGasOrGasPrice({ gas: '0x5208', gasPrice: '-0x4a817c800' }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + maxFeePerGas: '0x1229298c00', + type: '0x2', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new MissingGasError({ + gas: '0x5208', + gasPrice: undefined, + maxPriorityFeePerGas: undefined, + maxFeePerGas: '0x1229298c00', + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + maxPriorityFeePerGas: '0x49504f80', + type: '0x2', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new MissingGasError({ + gas: '0x5208', + gasPrice: undefined, + maxPriorityFeePerGas: '0x49504f80', + maxFeePerGas: undefined, + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + type: '0x2', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new TransactionGasMismatchError({ + gas: '0x5208', + gasPrice: '0x4a817c800', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + type: '0x0', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new TransactionGasMismatchError({ + gas: '0x5208', + gasPrice: '0x4a817c800', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + maxFeePerGas: '-0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + type: '0x2', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new InvalidMaxPriorityFeePerGasOrMaxFeePerGas({ + maxPriorityFeePerGas: '0x49504f80', + maxFeePerGas: '-0x1229298c00', + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '-0x49504f80', + type: '0x2', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new InvalidMaxPriorityFeePerGasOrMaxFeePerGas({ + maxPriorityFeePerGas: '-0x49504f80', + maxFeePerGas: '0x1229298c00', + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x2', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new Eip1559GasPriceError('0x4a817c800'), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + type: '0x0', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new UnsupportedFeeMarketError({ + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + type: '0x1', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new UnsupportedFeeMarketError({ + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + maxPriorityFeePerGas: '0x49504f80', + type: '0x0', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new UnsupportedFeeMarketError({ + maxFeePerGas: undefined, + maxPriorityFeePerGas: '0x49504f80', + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + maxFeePerGas: '0x1229298c00', + type: '0x0', + data: '0x0', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new UnsupportedFeeMarketError({ + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: undefined, + }), + ], +]; + +export const invalidNonceOrChainIdData: [ + FormatType | any, + undefined | InvalidNonceOrChainIdError, +][] = [ + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + common: { + customChain: { + name: 'foo', + networkId: '0x4', + chainId: '0x1', + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + undefined, + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + chainId: '0x1', + common: { + customChain: { + name: 'foo', + networkId: '0x4', + chainId: '0x1', + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new InvalidNonceOrChainIdError({ + nonce: undefined, + chainId: '0x1', + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + common: { + customChain: { + name: 'foo', + networkId: '0x4', + chainId: '0x1', + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new InvalidNonceOrChainIdError({ + nonce: '0x4', + chainId: undefined, + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '-0x4', + chainId: '0x1', + common: { + customChain: { + name: 'foo', + networkId: '0x4', + chainId: '0x1', + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new InvalidNonceOrChainIdError({ + nonce: '-0x4', + chainId: '0x1', + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chainId: '-0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new InvalidNonceOrChainIdError({ + nonce: '0x4', + chainId: '-0x1', + }), + ], + [ + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + data: '0x0', + nonce: '0x4', + chainId: '-0x1', + common: { + customChain: { + name: 'foo', + networkId: '0x4', + chainId: '-0x1', + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', + }, + new InvalidNonceOrChainIdError({ + nonce: '0x4', + chainId: '-0x1', + }), + ], +]; diff --git a/packages/web3-eth/test/fixtures/validation.ts b/packages/web3-eth/test/fixtures/validation.ts new file mode 100644 index 00000000000..6644167f25a --- /dev/null +++ b/packages/web3-eth/test/fixtures/validation.ts @@ -0,0 +1,181 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + AccessList, + AccessListEntry, + BaseTransactionAPI, + Transaction1559UnsignedAPI, + Transaction2930UnsignedAPI, + TransactionLegacyUnsignedAPI, + TransactionCall, + TransactionWithSenderAPI, +} from 'web3-types'; +import { InvalidTransactionCall, InvalidTransactionWithSender } from 'web3-errors'; + +export const isBaseTransactionValidData: [BaseTransactionAPI, true][] = [ + [ + { + type: '0x0', + nonce: '0x0', + gas: '0x5208', + value: '0x1', + input: '0x0', + chainId: '0x1', + }, + true, + ], + [ + { + to: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + type: '0x1', + nonce: '0x1', + gas: '0x5208', + value: '0x1', + input: '0x1', + }, + true, + ], +]; + +export const isAccessListEntryValidData: [AccessListEntry, true][] = [ + [{}, true], + [ + { + address: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + }, + true, + ], + [ + { + storageKeys: [ + '0x22f30f0608f88c510de0016370f1525b330e5839026bdff93f9ceef24d2275e6', + '0x63a01bba0d4f0ad913a241aed52f5c55807be35f554536abd1e451d4e6515b29', + ], + }, + true, + ], + [ + { + address: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + storageKeys: [ + '0x22f30f0608f88c510de0016370f1525b330e5839026bdff93f9ceef24d2275e6', + '0x63a01bba0d4f0ad913a241aed52f5c55807be35f554536abd1e451d4e6515b29', + ], + }, + true, + ], +]; + +export const isAccessListValidData = (): [AccessList, true][] => [ + [isAccessListEntryValidData.map(entry => entry[0]), true], +]; + +export const isTransaction1559UnsignedValidData = (): [Transaction1559UnsignedAPI, true][] => + isBaseTransactionValidData.map(transaction => { + return [ + { + ...transaction[0], + maxFeePerGas: '0x1', + maxPriorityFeePerGas: '0x1', + accessList: [], + }, + true, + ]; + }); + +export const isTransactionLegacyUnsignedValidData = (): [TransactionLegacyUnsignedAPI, true][] => + isBaseTransactionValidData.map(transaction => { + return [ + { + ...transaction[0], + gasPrice: '0x1', + }, + true, + ]; + }); + +export const isTransaction2930UnsignedValidData = (): [Transaction2930UnsignedAPI, true][] => + isTransactionLegacyUnsignedValidData().map(transaction => { + return [ + { + ...transaction[0], + accessList: [], + }, + true, + ]; + }); + +export const isTransactionWithSenderValidData = (): [TransactionWithSenderAPI, true][] => { + const transactions = [ + ...isTransaction1559UnsignedValidData(), + ...isTransactionLegacyUnsignedValidData(), + ...isTransaction2930UnsignedValidData(), + ]; + return transactions.map(transaction => { + return [ + { + ...transaction[0], + from: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + }, + true, + ]; + }); +}; + +export const validateTransactionWithSenderInvalidData = (): [ + any, + InvalidTransactionWithSender, +][] => { + const transactions = [ + ...isTransaction1559UnsignedValidData(), + ...isTransactionLegacyUnsignedValidData(), + ...isTransaction2930UnsignedValidData(), + ]; + return transactions.map(transaction => { + return [transaction[0], new InvalidTransactionWithSender(transaction[0])]; + }); +}; + +export const isTransactionCallValidData: [TransactionCall, true][] = [ + [{ to: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4' }, true], + [ + { + from: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + to: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + gas: '0x5208', + value: '0x1', + }, + true, + ], + [ + { + from: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + to: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + gas: '0x5208', + gasPrice: '0x5208', + value: '0x1', + data: '0x0', + }, + true, + ], +]; + +export const validateTransactionCallInvalidData = (): [any, InvalidTransactionCall][] => + validateTransactionWithSenderInvalidData().map(transaction => { + return [transaction[0], new InvalidTransactionCall(transaction[0])]; + }); diff --git a/packages/web3-eth/test/fixtures/web3_eth_methods_with_parameters.ts b/packages/web3-eth/test/fixtures/web3_eth_methods_with_parameters.ts new file mode 100644 index 00000000000..17d9c204f21 --- /dev/null +++ b/packages/web3-eth/test/fixtures/web3_eth_methods_with_parameters.ts @@ -0,0 +1,2304 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + DataFormat, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + Address, + BlockNumberOrTag, + BlockTags, + Filter, + HexString32Bytes, + HexString8Bytes, + HexStringBytes, + Uint, + Uint256, + TransactionWithSenderAPI, + TransactionReceipt, +} from 'web3-types'; +import { transactionWithSender } from './rpc_methods_wrappers'; + +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const getBalanceValidData: [ + [Address, BlockNumberOrTag | undefined, DataFormat | undefined], + [Address, BlockNumberOrTag, DataFormat | undefined], +][] = [ + // All possible undefined values + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', undefined, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + // Defined blockNumber, undefined returnType + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.EARLIEST, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.PENDING, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.SAFE, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.SAFE, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.FINALIZED, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.FINALIZED, DEFAULT_RETURN_FORMAT], + ], + // Undefined blockNumber, returnType = DEFAULT_RETURN_FORMAT + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', undefined, DEFAULT_RETURN_FORMAT], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + // Defined blockNumber, returnType = DEFAULT_RETURN_FORMAT + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.SAFE, DEFAULT_RETURN_FORMAT], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.SAFE, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.FINALIZED, DEFAULT_RETURN_FORMAT], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.FINALIZED, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', '0x4b7', DEFAULT_RETURN_FORMAT], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', '0x4b7', DEFAULT_RETURN_FORMAT], + ], + // Undefined blockNumber, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR} + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + undefined, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + // Defined blockNumber, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR} + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.SAFE, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.SAFE, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.FINALIZED, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.FINALIZED, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x4b7', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x4b7', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + // Undefined blockNumber, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER} + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + undefined, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + // Defined blockNumber, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER} + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.SAFE, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.SAFE, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.FINALIZED, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.FINALIZED, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x4b7', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x4b7', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + // Undefined blockNumber, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT} + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + undefined, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + // Defined blockNumber, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT} + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.SAFE, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.SAFE, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.FINALIZED, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.FINALIZED, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x4b7', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x4b7', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], +]; + +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const getBlockValidData: [ + [HexString32Bytes | BlockNumberOrTag | undefined, boolean | undefined, DataFormat | undefined], + [HexString32Bytes | BlockNumberOrTag, boolean, DataFormat | undefined], +][] = [ + // All possible undefined values + [ + [undefined, undefined, undefined], + [BlockTags.LATEST, false, DEFAULT_RETURN_FORMAT], + ], + // Defined block, undefined hydrated and returnType + [ + [ + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + undefined, + undefined, + ], + [ + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + false, + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [BlockTags.LATEST, undefined, undefined], + [BlockTags.LATEST, false, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, undefined, undefined], + [BlockTags.EARLIEST, false, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.SAFE, undefined, undefined], + [BlockTags.SAFE, false, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.FINALIZED, undefined, undefined], + [BlockTags.FINALIZED, false, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, undefined, undefined], + [BlockTags.PENDING, false, DEFAULT_RETURN_FORMAT], + ], + // Defined block, hydrated = true, and undefined returnType + [ + [BlockTags.LATEST, true, undefined], + [BlockTags.LATEST, true, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, true, undefined], + [BlockTags.EARLIEST, true, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, true, undefined], + [BlockTags.PENDING, true, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.SAFE, true, undefined], + [BlockTags.SAFE, true, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.FINALIZED, true, undefined], + [BlockTags.FINALIZED, true, DEFAULT_RETURN_FORMAT], + ], + // Defined block, hydrated = false, and undefined returnType + [ + [BlockTags.LATEST, false, undefined], + [BlockTags.LATEST, false, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, false, undefined], + [BlockTags.EARLIEST, false, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, false, undefined], + [BlockTags.PENDING, false, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.SAFE, false, undefined], + [BlockTags.SAFE, false, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.FINALIZED, false, undefined], + [BlockTags.FINALIZED, false, DEFAULT_RETURN_FORMAT], + ], + // Defined block, hydrated = true, and returnType = DEFAULT_RETURN_FORMAT + [ + [BlockTags.LATEST, true, DEFAULT_RETURN_FORMAT], + [BlockTags.LATEST, true, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, true, DEFAULT_RETURN_FORMAT], + [BlockTags.EARLIEST, true, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, true, DEFAULT_RETURN_FORMAT], + [BlockTags.PENDING, true, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.SAFE, true, DEFAULT_RETURN_FORMAT], + [BlockTags.SAFE, true, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.FINALIZED, true, DEFAULT_RETURN_FORMAT], + [BlockTags.FINALIZED, true, DEFAULT_RETURN_FORMAT], + ], + // Defined block, hydrated = true, and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR} + [ + [BlockTags.LATEST, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.LATEST, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.EARLIEST, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.EARLIEST, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.PENDING, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.PENDING, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.SAFE, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.SAFE, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.FINALIZED, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.FINALIZED, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + // Defined block, hydrated = true, and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER} + [ + [BlockTags.LATEST, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.LATEST, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.EARLIEST, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.EARLIEST, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.PENDING, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.PENDING, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.SAFE, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.SAFE, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.FINALIZED, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.FINALIZED, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + // Defined block, hydrated = true, and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT} + [ + [BlockTags.LATEST, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.LATEST, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.EARLIEST, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.EARLIEST, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.PENDING, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.PENDING, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.SAFE, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.SAFE, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.FINALIZED, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.FINALIZED, true, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], +]; + +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const getBlockTransactionCountValidData: [ + [HexString32Bytes | BlockNumberOrTag | undefined, DataFormat | undefined], + [HexString32Bytes | BlockNumberOrTag, DataFormat | undefined], +][] = [ + // All possible undefined values + [ + [undefined, undefined], + [BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + // Defined block, undefined returnType + [ + ['0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', undefined], + [ + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [BlockTags.LATEST, undefined], + [BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, undefined], + [BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, undefined], + [BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.SAFE, undefined], + [BlockTags.SAFE, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.FINALIZED, undefined], + [BlockTags.FINALIZED, DEFAULT_RETURN_FORMAT], + ], + // Defined block and returnType = DEFAULT_RETURN_FORMAT + [ + [BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + [BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + [BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + [BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.SAFE, DEFAULT_RETURN_FORMAT], + [BlockTags.SAFE, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.FINALIZED, DEFAULT_RETURN_FORMAT], + [BlockTags.FINALIZED, DEFAULT_RETURN_FORMAT], + ], + // Defined block and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR} + [ + [BlockTags.LATEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.LATEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.EARLIEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.EARLIEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.PENDING, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.PENDING, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.SAFE, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.SAFE, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.FINALIZED, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.FINALIZED, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + // Defined block, hydrated = true, and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER} + [ + [BlockTags.LATEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.LATEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.EARLIEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.EARLIEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.PENDING, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.PENDING, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + // Defined block and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT} + [ + [BlockTags.LATEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.LATEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.EARLIEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.EARLIEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.PENDING, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.PENDING, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.SAFE, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.SAFE, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.FINALIZED, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.FINALIZED, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], +]; + +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const getBlockUncleCountValidData: [ + [HexString32Bytes | BlockNumberOrTag | undefined, DataFormat | undefined], + [HexString32Bytes | BlockNumberOrTag, DataFormat | undefined], +][] = [ + // All possible undefined values + [ + [undefined, undefined], + [BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + // Defined block, undefined returnType + [ + ['0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', undefined], + [ + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [BlockTags.LATEST, undefined], + [BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, undefined], + [BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, undefined], + [BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.SAFE, undefined], + [BlockTags.SAFE, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.FINALIZED, undefined], + [BlockTags.FINALIZED, DEFAULT_RETURN_FORMAT], + ], + // Defined block and returnType = DEFAULT_RETURN_FORMAT + [ + [BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + [BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + [BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + [BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ], + // Defined block and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR} + [ + [BlockTags.LATEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.LATEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.EARLIEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.EARLIEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.PENDING, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.PENDING, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + // Defined block, hydrated = true, and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER} + [ + [BlockTags.LATEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.LATEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.EARLIEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.EARLIEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.PENDING, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.PENDING, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.SAFE, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.SAFE, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.FINALIZED, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.FINALIZED, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + // Defined block and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT} + [ + [BlockTags.LATEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.LATEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.EARLIEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.EARLIEST, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.PENDING, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.PENDING, { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], +]; + +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const getUncleValidData: [ + [HexString32Bytes | BlockNumberOrTag | undefined, Uint, DataFormat | undefined], + [HexString32Bytes | BlockNumberOrTag, Uint, DataFormat | undefined], +][] = [ + // All possible undefined values + [ + [undefined, '0x0', undefined], + [BlockTags.LATEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + // Defined block, uncleIndex = '0x0', and undefined returnType + [ + ['0xc3073501c72f0d9372a18015637c86a394c7d52b633ced791d64e88969cfa3e2', '0x0', undefined], + [ + '0xc3073501c72f0d9372a18015637c86a394c7d52b633ced791d64e88969cfa3e2', + '0x0', + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [BlockTags.LATEST, '0x0', undefined], + [BlockTags.LATEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, '0x0', undefined], + [BlockTags.EARLIEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.SAFE, '0x0', undefined], + [BlockTags.SAFE, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.FINALIZED, '0x0', undefined], + [BlockTags.FINALIZED, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, '0x0', undefined], + [BlockTags.PENDING, '0x0', DEFAULT_RETURN_FORMAT], + ], + // Defined block, uncleIndex = '0x0', and undefined returnType + [ + [BlockTags.LATEST, '0x0', undefined], + [BlockTags.LATEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, '0x0', undefined], + [BlockTags.EARLIEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, '0x0', undefined], + [BlockTags.PENDING, '0x0', DEFAULT_RETURN_FORMAT], + ], + // Defined block, uncleIndex = true, and returnType = DEFAULT_RETURN_FORMAT + [ + [BlockTags.LATEST, '0x0', DEFAULT_RETURN_FORMAT], + [BlockTags.LATEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, '0x0', DEFAULT_RETURN_FORMAT], + [BlockTags.EARLIEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, '0x0', DEFAULT_RETURN_FORMAT], + [BlockTags.PENDING, '0x0', DEFAULT_RETURN_FORMAT], + ], + // Defined block, uncleIndex = '0x0', and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR} + [ + [BlockTags.LATEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.LATEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.EARLIEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.EARLIEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.PENDING, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.PENDING, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + // Defined block, uncleIndex = '0x0', and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER} + [ + [BlockTags.LATEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.LATEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.EARLIEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.EARLIEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.PENDING, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.PENDING, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + // Defined block, uncleIndex = '0x0', and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT} + [ + [BlockTags.LATEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.LATEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.EARLIEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.EARLIEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.PENDING, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.PENDING, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], +]; + +/** + * Array consists of: + * - array of inputs + * - mock RPC result + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + * - expected output + */ +export const getTransactionValidData: [ + [HexString32Bytes, DataFormat | undefined], + [HexString32Bytes, DataFormat | undefined], +][] = [ + // Defined transactionHash, undefined returnType + [ + ['0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', undefined], + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + DEFAULT_RETURN_FORMAT, + ], + ], + // Defined transactionHash and returnType = DEFAULT_RETURN_FORMAT + [ + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + DEFAULT_RETURN_FORMAT, + ], + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + DEFAULT_RETURN_FORMAT, + ], + ], + // Defined transactionHash and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR} + [ + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + // Defined block, hydrated = true, and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER} + [ + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + // Defined block and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT} + [ + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], +]; + +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const getTransactionFromBlockValidData: [ + [HexString32Bytes | BlockNumberOrTag | undefined, Uint, DataFormat | undefined], + [HexString32Bytes | BlockNumberOrTag, Uint, DataFormat | undefined], +][] = [ + // All possible undefined values + [ + [undefined, '0x0', undefined], + [BlockTags.LATEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + // Defined block, uncleIndex = '0x0', and undefined returnType + [ + ['0xc3073501c72f0d9372a18015637c86a394c7d52b633ced791d64e88969cfa3e2', '0x0', undefined], + [ + '0xc3073501c72f0d9372a18015637c86a394c7d52b633ced791d64e88969cfa3e2', + '0x0', + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [BlockTags.LATEST, '0x0', undefined], + [BlockTags.LATEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, '0x0', undefined], + [BlockTags.EARLIEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, '0x0', undefined], + [BlockTags.PENDING, '0x0', DEFAULT_RETURN_FORMAT], + ], + // Defined block, uncleIndex = '0x0', and undefined returnType + [ + [BlockTags.LATEST, '0x0', undefined], + [BlockTags.LATEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, '0x0', undefined], + [BlockTags.EARLIEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, '0x0', undefined], + [BlockTags.PENDING, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.SAFE, '0x0', undefined], + [BlockTags.SAFE, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.FINALIZED, '0x0', undefined], + [BlockTags.FINALIZED, '0x0', DEFAULT_RETURN_FORMAT], + ], + // Defined block, uncleIndex = true, and returnType = DEFAULT_RETURN_FORMAT + [ + [BlockTags.LATEST, '0x0', DEFAULT_RETURN_FORMAT], + [BlockTags.LATEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.EARLIEST, '0x0', DEFAULT_RETURN_FORMAT], + [BlockTags.EARLIEST, '0x0', DEFAULT_RETURN_FORMAT], + ], + [ + [BlockTags.PENDING, '0x0', DEFAULT_RETURN_FORMAT], + [BlockTags.PENDING, '0x0', DEFAULT_RETURN_FORMAT], + ], + // Defined block, uncleIndex = '0x0', and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR} + [ + [BlockTags.LATEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.LATEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.EARLIEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.EARLIEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + [BlockTags.PENDING, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + [BlockTags.PENDING, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + // Defined block, uncleIndex = '0x0', and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER} + [ + [BlockTags.LATEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.LATEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.EARLIEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.EARLIEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + [BlockTags.PENDING, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + [BlockTags.PENDING, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + // Defined block, uncleIndex = '0x0', and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT} + [ + [BlockTags.LATEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.LATEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.EARLIEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.EARLIEST, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + [BlockTags.PENDING, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + [BlockTags.PENDING, '0x0', { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], +]; + +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const getTransactionReceiptValidData: [ + [HexString32Bytes, DataFormat | undefined], + [HexString32Bytes, DataFormat | undefined], +][] = [ + // Defined block, undefined returnType + [ + ['0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', undefined], + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + DEFAULT_RETURN_FORMAT, + ], + ], + // Defined block and returnType = DEFAULT_RETURN_FORMAT + [ + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + DEFAULT_RETURN_FORMAT, + ], + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + DEFAULT_RETURN_FORMAT, + ], + ], + // Defined block and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR} + [ + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + // Defined block, hydrated = true, and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER} + [ + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + // Defined block and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT} + [ + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], +]; + +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const getTransactionCountValidData: [ + [Address, HexString32Bytes | BlockNumberOrTag | undefined, DataFormat | undefined], + [Address, HexString32Bytes | BlockNumberOrTag, DataFormat | undefined], +][] = [ + // All possible undefined values + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', undefined, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + // Defined address and block number, undefined returnType + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0xc3073501c72f0d9372a18015637c86a394c7d52b633ced791d64e88969cfa3e2', + undefined, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0xc3073501c72f0d9372a18015637c86a394c7d52b633ced791d64e88969cfa3e2', + DEFAULT_RETURN_FORMAT, + ], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.EARLIEST, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.PENDING, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.SAFE, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.SAFE, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.FINALIZED, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.FINALIZED, DEFAULT_RETURN_FORMAT], + ], + // Defined block, uncleIndex = and undefined returnType + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.EARLIEST, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.PENDING, undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ], + // Defined block, uncleIndex = true, and returnType = DEFAULT_RETURN_FORMAT + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ], + // Defined block, uncleIndex = and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR} + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + // Defined block, uncleIndex = and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER} + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + // Defined block, uncleIndex = and returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT} + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], +]; + +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const estimateGasValidData: [ + [ + Partial, + HexString32Bytes | BlockNumberOrTag | undefined, + DataFormat | undefined, + ], + [ + Partial, + HexString32Bytes | BlockNumberOrTag, + DataFormat | undefined, + ], +][] = [ + // All possible undefined values + [ + [transactionWithSender, undefined, undefined], + [transactionWithSender, BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + // Defined transaction and block number, undefined returnType + [ + [ + transactionWithSender, + '0xc3073501c72f0d9372a18015637c86a394c7d52b633ced791d64e88969cfa3e2', + undefined, + ], + [ + transactionWithSender, + '0xc3073501c72f0d9372a18015637c86a394c7d52b633ced791d64e88969cfa3e2', + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [transactionWithSender, BlockTags.LATEST, undefined], + [transactionWithSender, BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + [transactionWithSender, BlockTags.EARLIEST, undefined], + [transactionWithSender, BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ], + [ + [transactionWithSender, BlockTags.PENDING, undefined], + [transactionWithSender, BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ], + [ + [transactionWithSender, BlockTags.SAFE, undefined], + [transactionWithSender, BlockTags.SAFE, DEFAULT_RETURN_FORMAT], + ], + [ + [transactionWithSender, BlockTags.FINALIZED, undefined], + [transactionWithSender, BlockTags.FINALIZED, DEFAULT_RETURN_FORMAT], + ], + // Defined transaction and block number, undefined returnType + [ + [transactionWithSender, BlockTags.LATEST, undefined], + [transactionWithSender, BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + [transactionWithSender, BlockTags.EARLIEST, undefined], + [transactionWithSender, BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ], + [ + [transactionWithSender, BlockTags.PENDING, undefined], + [transactionWithSender, BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ], + // Defined transaction and block number, returnType = DEFAULT_RETURN_FORMAT + [ + [transactionWithSender, BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + [transactionWithSender, BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + [transactionWithSender, BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + [transactionWithSender, BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ], + [ + [transactionWithSender, BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + [transactionWithSender, BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ], + // Defined transaction and block number, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR} + [ + [ + transactionWithSender, + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + transactionWithSender, + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + [ + [ + transactionWithSender, + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + transactionWithSender, + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + [ + [ + transactionWithSender, + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + transactionWithSender, + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + // Defined transaction and block number, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER} + [ + [ + transactionWithSender, + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + transactionWithSender, + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + [ + [ + transactionWithSender, + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + transactionWithSender, + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + [ + [ + transactionWithSender, + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + transactionWithSender, + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + // Defined transaction and block number, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT} + [ + [ + transactionWithSender, + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + transactionWithSender, + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + transactionWithSender, + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + transactionWithSender, + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + transactionWithSender, + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + transactionWithSender, + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], +]; + +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const getFeeHistoryValidData: [ + [Uint, HexString32Bytes | BlockNumberOrTag | undefined, number[], DataFormat | undefined], + [Uint, HexString32Bytes | BlockNumberOrTag, number[], DataFormat | undefined], +][] = [ + // All possible undefined values + [ + ['0x4', undefined, [], undefined], + ['0x4', BlockTags.LATEST, [], DEFAULT_RETURN_FORMAT], + ], + // Defined transaction and block number, undefined returnType + [ + [ + '0x4', + '0xc3073501c72f0d9372a18015637c86a394c7d52b633ced791d64e88969cfa3e2', + [], + undefined, + ], + [ + '0x4', + '0xc3073501c72f0d9372a18015637c86a394c7d52b633ced791d64e88969cfa3e2', + [], + DEFAULT_RETURN_FORMAT, + ], + ], + [ + ['0x4', BlockTags.LATEST, [], undefined], + ['0x4', BlockTags.LATEST, [], DEFAULT_RETURN_FORMAT], + ], + [ + ['0x4', BlockTags.EARLIEST, [], undefined], + ['0x4', BlockTags.EARLIEST, [], DEFAULT_RETURN_FORMAT], + ], + [ + ['0x4', BlockTags.PENDING, [], undefined], + ['0x4', BlockTags.PENDING, [], DEFAULT_RETURN_FORMAT], + ], + [ + ['0x4', BlockTags.SAFE, [], undefined], + ['0x4', BlockTags.SAFE, [], DEFAULT_RETURN_FORMAT], + ], + [ + ['0x4', BlockTags.FINALIZED, [], undefined], + ['0x4', BlockTags.FINALIZED, [], DEFAULT_RETURN_FORMAT], + ], + // Defined transaction and block number, undefined returnType + [ + ['0x4', BlockTags.LATEST, [], undefined], + ['0x4', BlockTags.LATEST, [], DEFAULT_RETURN_FORMAT], + ], + [ + ['0x4', BlockTags.EARLIEST, [], undefined], + ['0x4', BlockTags.EARLIEST, [], DEFAULT_RETURN_FORMAT], + ], + [ + ['0x4', BlockTags.PENDING, [], undefined], + ['0x4', BlockTags.PENDING, [], DEFAULT_RETURN_FORMAT], + ], + // Defined transaction and block number, returnType = DEFAULT_RETURN_FORMAT + [ + ['0x4', BlockTags.LATEST, [], DEFAULT_RETURN_FORMAT], + ['0x4', BlockTags.LATEST, [], DEFAULT_RETURN_FORMAT], + ], + [ + ['0x4', BlockTags.EARLIEST, [], DEFAULT_RETURN_FORMAT], + ['0x4', BlockTags.EARLIEST, [], DEFAULT_RETURN_FORMAT], + ], + [ + ['0x4', BlockTags.PENDING, [], DEFAULT_RETURN_FORMAT], + ['0x4', BlockTags.PENDING, [], DEFAULT_RETURN_FORMAT], + ], + // Defined transaction and block number, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR} + [ + ['0x4', BlockTags.LATEST, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ['0x4', BlockTags.LATEST, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + ['0x4', BlockTags.EARLIEST, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ['0x4', BlockTags.EARLIEST, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + [ + ['0x4', BlockTags.PENDING, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ['0x4', BlockTags.PENDING, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }], + ], + // Defined transaction and block number, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER} + [ + ['0x4', BlockTags.LATEST, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ['0x4', BlockTags.LATEST, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + ['0x4', BlockTags.EARLIEST, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ['0x4', BlockTags.EARLIEST, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + [ + ['0x4', BlockTags.PENDING, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ['0x4', BlockTags.PENDING, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }], + ], + // Defined transaction and block number, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT} + [ + ['0x4', BlockTags.LATEST, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ['0x4', BlockTags.LATEST, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + ['0x4', BlockTags.EARLIEST, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ['0x4', BlockTags.EARLIEST, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], + [ + ['0x4', BlockTags.PENDING, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ['0x4', BlockTags.PENDING, [], { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }], + ], +]; + +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const getStorageAtValidData: [ + [Address, Uint256, BlockNumberOrTag | undefined, DataFormat], + [Address, Uint256, BlockNumberOrTag, DataFormat], +][] = [ + // All possible undefined values + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x0', + undefined, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x0', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + // Defined address, storageSlot, and blockNumber + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x0', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x0', + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x0', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x0', + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x0', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x0', + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x0', + BlockTags.SAFE, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x0', + BlockTags.SAFE, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x0', + BlockTags.FINALIZED, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + '0x0', + BlockTags.FINALIZED, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], +]; + +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const getCodeValidData: [ + [Address, BlockNumberOrTag | undefined], + [Address, BlockNumberOrTag, DataFormat], +][] = [ + // All possible undefined values + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', undefined], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + // Defined address and blockNumber + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.EARLIEST], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.PENDING], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.SAFE], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.SAFE, DEFAULT_RETURN_FORMAT], + ], + [ + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.FINALIZED], + ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', BlockTags.FINALIZED, DEFAULT_RETURN_FORMAT], + ], +]; + +/** + * Array consists of: + * - input + * - mock RPC result + */ +export const sendSignedTransactionValidData: [[string], [string, DataFormat, undefined]][] = [ + [ + ['signedTransaction = HexString'], + ['signedTransaction = HexString', DEFAULT_RETURN_FORMAT, undefined], + ], + [ + ['0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675'], + [ + '0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675', + DEFAULT_RETURN_FORMAT, + undefined, + ], + ], +]; + +/** + * Array consists of: + * - array of inputs + */ +export const signValidData: [ + [HexStringBytes, Address, DataFormat | undefined], + [HexStringBytes, Address, DataFormat | undefined], +][] = [ + [ + ['0xdeadbeaf', '0x407d73d8a49eeb85d32cf465507dd71d507100c1', undefined], + ['0xdeadbeaf', '0x407d73d8a49eeb85d32cf465507dd71d507100c1', DEFAULT_RETURN_FORMAT], + ], +]; + +/** + * Array tests getPastLogs and formats valid fromBlock and toBlock + */ +export const getPastLogsValidFormatData: [Filter][] = [ + [{ fromBlock: 0, toBlock: 100 }], + [{ fromBlock: BigInt(0), toBlock: BigInt(100) }], + [{ fromBlock: '0x0', toBlock: '0x10' }], + [{ blockHash: '0x19e54b41ac6ed5eb5045aab59967489bbab1852e742857b1987f62290a4b89af' }], +]; +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const getPastLogsValidData: [[Filter, DataFormat | undefined], [Filter, DataFormat]][] = [ + [ + [{}, undefined], + [{}, DEFAULT_RETURN_FORMAT], + ], + [ + [ + { blockHash: '0x19e54b41ac6ed5eb5045aab59967489bbab1852e742857b1987f62290a4b89af' }, + undefined, + ], + [ + { blockHash: '0x19e54b41ac6ed5eb5045aab59967489bbab1852e742857b1987f62290a4b89af' }, + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + { + address: '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + topics: [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + '0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc', + ], + ], + }, + undefined, + ], + [ + { + address: '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + topics: [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + '0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc', + ], + ], + }, + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + { + fromBlock: BlockTags.LATEST, + toBlock: BlockTags.LATEST, + }, + undefined, + ], + [ + { + fromBlock: BlockTags.LATEST, + toBlock: BlockTags.LATEST, + }, + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + { + fromBlock: BlockTags.PENDING, + toBlock: BlockTags.PENDING, + }, + undefined, + ], + [ + { + fromBlock: BlockTags.PENDING, + toBlock: BlockTags.PENDING, + }, + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + { + fromBlock: BlockTags.EARLIEST, + toBlock: BlockTags.EARLIEST, + }, + undefined, + ], + [ + { + fromBlock: BlockTags.EARLIEST, + toBlock: BlockTags.EARLIEST, + }, + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + { + fromBlock: BlockTags.SAFE, + toBlock: BlockTags.SAFE, + }, + undefined, + ], + [ + { + fromBlock: BlockTags.SAFE, + toBlock: BlockTags.SAFE, + }, + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + { + fromBlock: BlockTags.FINALIZED, + toBlock: BlockTags.FINALIZED, + }, + undefined, + ], + [ + { + fromBlock: BlockTags.FINALIZED, + toBlock: BlockTags.FINALIZED, + }, + DEFAULT_RETURN_FORMAT, + ], + ], +]; + +/** + * Array consists of: + * - array of inputs + */ +export const submitWorkValidData: [[HexString8Bytes, HexString32Bytes, HexString32Bytes]][] = [ + [ + [ + '0x0000000000000001', + '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', + '0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000', + ], + ], +]; + +/** + * Array consists of: + * - array of inputs + * - array of passed RPC parameters (excluding Web3Context) - This is to account for any defaults set by the method + */ +export const getProofValidData: [ + [Address, HexString32Bytes[], BlockNumberOrTag | undefined, DataFormat | undefined], + [Address, HexString32Bytes[], BlockNumberOrTag, DataFormat | undefined], +][] = [ + // All possible undefined values + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + undefined, + undefined, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.LATEST, + DEFAULT_RETURN_FORMAT, + ], + ], + // Defined block number, undefined returnType + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + '0x1', + undefined, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + '0x1', + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.EARLIEST, + undefined, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.EARLIEST, + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.LATEST, + undefined, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.LATEST, + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.PENDING, + undefined, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.PENDING, + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.SAFE, + undefined, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.SAFE, + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.FINALIZED, + undefined, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.FINALIZED, + DEFAULT_RETURN_FORMAT, + ], + ], + // Defined block number, returnType = DEFAULT_RETURN_FORMAT + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + '0x1', + DEFAULT_RETURN_FORMAT, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + '0x1', + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.EARLIEST, + DEFAULT_RETURN_FORMAT, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.EARLIEST, + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.LATEST, + DEFAULT_RETURN_FORMAT, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.LATEST, + DEFAULT_RETURN_FORMAT, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.PENDING, + DEFAULT_RETURN_FORMAT, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.PENDING, + DEFAULT_RETURN_FORMAT, + ], + ], + // Defined block number, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR} + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + '0x1', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + '0x1', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.STR }, + ], + ], + // Defined block number, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER} + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + '0x1', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + '0x1', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.NUMBER }, + ], + ], + // Defined block number, returnType = {...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT} + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + '0x1', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + '0x1', + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.EARLIEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.LATEST, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], + [ + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + [ + '0x1234567890123456789012345678901234567890', + ['0x295a70b2de5e3953354a6a8344e616ed314d7251'], + BlockTags.PENDING, + { ...DEFAULT_RETURN_FORMAT, number: FMT_NUMBER.BIGINT }, + ], + ], +]; + +export const tx = { + blockHash: '0xb3a667f84f58c90ab87476073e06c5d1186a0f0b0b69aa3033bfe0e4df264350', + blockNumber: '123', + from: '0x01ada9d3470eb9eb3875d9e7948c674804ca43ae', + gas: '21000', + gasPrice: '10000', + hash: '0x84f44dffc3cd90a1b66ad0219a97680308e5e7a77299fbf1e2ebb572cf02cc2d', + input: '0x', + nonce: '61', + to: '0x0000000000000000000000000000000000000000', + transactionIndex: '0', + value: '1', + type: '0x01', + v: '2710', + r: '0xbefb00433ef79b2609dc560c28963c2e954370792671f71ab99665b8807b7feb', + s: '0x6bebe5e2c9f839d3ce0264dc5c7cc521f902e86705c69f5fddffaa3de5aac6d3', +}; + +export const txReceipt: TransactionReceipt = { + blockHash: '0xb3a667f84f58c90ab87476073e06c5d1186a0f0b0b69aa3033bfe0e4df264350', + blockNumber: BigInt(123), + cumulativeGasUsed: BigInt(21000), + effectiveGasPrice: BigInt(10000), + from: '0x01ada9d3470eb9eb3875d9e7948c674804ca43ae', + gasUsed: BigInt(21000), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + status: BigInt(1), + to: '0x0000000000000000000000000000000000000000', + transactionHash: '0x84f44dffc3cd90a1b66ad0219a97680308e5e7a77299fbf1e2ebb572cf02cc2d', + transactionIndex: BigInt(0), + type: BigInt(0), + root: '', +}; diff --git a/packages/web3-eth/test/integration/batch.test.ts b/packages/web3-eth/test/integration/batch.test.ts new file mode 100644 index 00000000000..a71f02be43b --- /dev/null +++ b/packages/web3-eth/test/integration/batch.test.ts @@ -0,0 +1,97 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// eslint-disable-next-line import/no-extraneous-dependencies +import { SupportedProviders } from 'web3-types'; +import { hexToNumber } from 'web3-utils'; +import { Web3Eth } from '../../src'; + +import { + closeOpenConnection, + createTempAccount, + getSystemTestProvider, + waitForOpenConnection, +} from '../fixtures/system_test_utils'; + +describe('eth', () => { + let web3Eth: Web3Eth; + + let clientUrl: string | SupportedProviders; + + beforeAll(async () => { + clientUrl = getSystemTestProvider(); + web3Eth = new Web3Eth(clientUrl); + await waitForOpenConnection(web3Eth); + }); + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + describe('methods', () => { + it('executes one batch request', async () => { + const acc1 = await createTempAccount(); + + const batch = new web3Eth.BatchRequest(); + const request1 = { + id: 10, + method: 'eth_getBalance', + params: [acc1.address, 'latest'], + }; + const r1 = batch.add(request1).catch(console.error); + const [response1] = await batch.execute(); + + // eslint-disable-next-line jest/no-standalone-expect + expect(response1.result).toBeDefined(); + // TODO: in future release add test for validation of returned results , ( match balance ) + // eslint-disable-next-line jest/no-standalone-expect + expect(Number(hexToNumber(String(response1.result)))).toBeGreaterThan(0); + const [res1] = await Promise.all([r1]); + expect(res1).toBe(response1.result); + }); + it('BatchRequest', async () => { + const acc1 = await createTempAccount(); + const acc2 = await createTempAccount(); + + const batch = new web3Eth.BatchRequest(); + const request1 = { + id: 10, + method: 'eth_getBalance', + params: [acc1.address, 'latest'], + }; + const request2 = { + id: 11, + method: 'eth_getBalance', + params: [acc2.address, 'latest'], + }; + const r1 = batch.add(request1).catch(console.error); + const r2 = batch.add(request2).catch(console.error); + const [response1, response2] = await batch.execute(); + + // eslint-disable-next-line jest/no-standalone-expect + expect(response1.result).toBeDefined(); + // eslint-disable-next-line jest/no-standalone-expect + expect(response2.result).toBeDefined(); + // TODO: in future release add test for validation of returned results , ( match balance ) + // eslint-disable-next-line jest/no-standalone-expect + expect(Number(hexToNumber(String(response1.result)))).toBeGreaterThan(0); + // eslint-disable-next-line jest/no-standalone-expect + expect(Number(hexToNumber(String(response2.result)))).toBeGreaterThan(0); + const [res1, res2] = await Promise.all([r1, r2]); + expect(res1).toBe(response1.result); + expect(res2).toBe(response2.result); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/block/rpc.getBlock.test.ts b/packages/web3-eth/test/integration/block/rpc.getBlock.test.ts new file mode 100644 index 00000000000..ff1bf928f17 --- /dev/null +++ b/packages/web3-eth/test/integration/block/rpc.getBlock.test.ts @@ -0,0 +1,157 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + TransactionReceipt, + Transaction, + FMT_BYTES, + FMT_NUMBER, + SupportedProviders, +} from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Contract } from 'web3-eth-contract'; +import { validator } from 'web3-validator'; +import { Web3Eth } from '../../../src'; +import { + getSystemTestProvider, + createTempAccount, + closeOpenConnection, + getSystemTestBackend, + describeIf, + createNewAccount, + refillAccount, +} from '../../fixtures/system_test_utils'; +import { BasicAbi, BasicBytecode } from '../../shared_fixtures/build/Basic'; +import { toAllVariants } from '../../shared_fixtures/utils'; +import { sendFewTxes } from '../helper'; +import { blockSchema } from '../../../src/schemas'; + +describe('rpc with block', () => { + let web3Eth: Web3Eth; + let clientUrl: string | SupportedProviders; + + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + + let blockData: { + earliest: 'earliest'; + latest: 'latest'; + pending: 'pending'; + blockNumber: number | bigint; + blockHash: string; + transactionHash: string; + transactionIndex: number | bigint; + }; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(async () => { + clientUrl = getSystemTestProvider(); + web3Eth = new Web3Eth({ + provider: clientUrl, + config: { + transactionPollingTimeout: 2000, + }, + }); + + contract = new Contract(BasicAbi, undefined, { + provider: clientUrl, + }); + + deployOptions = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + tempAcc = await createNewAccount({ unlock: true }); + await refillAccount( + ( + await createTempAccount() + ).address, + tempAcc.address, + '10000000000000000', + ); + sendOptions = { from: tempAcc.address, gas: '1000000' }; + + await contract.deploy(deployOptions).send(sendOptions); + const [receipt]: TransactionReceipt[] = await sendFewTxes({ + from: tempAcc.address, + value: '0x1', + times: 1, + }); + blockData = { + pending: 'pending', + latest: 'latest', + earliest: 'earliest', + blockNumber: Number(receipt.blockNumber), + blockHash: String(receipt.blockHash), + transactionHash: String(receipt.transactionHash), + transactionIndex: Number(receipt.transactionIndex), + }; + }); + + afterAll(async () => { + await closeOpenConnection(web3Eth); + await closeOpenConnection(contract); + }); + + describe('methods', () => { + it.each( + toAllVariants<{ + block: 'earliest' | 'latest' | 'pending' | 'blockHash' | 'blockNumber'; + hydrated: boolean; + format: string; + }>({ + block: ['earliest', 'latest', 'blockHash', 'blockNumber'], + hydrated: [true, false], + format: Object.values(FMT_NUMBER), + }), + )('getBlock', async ({ hydrated, block, format }) => { + const b = { + ...(await web3Eth.getBlock(blockData[block], hydrated, { + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + })), + }; + if (blockData[block] === 'pending') { + b.nonce = '0x0'; + b.miner = '0x0000000000000000000000000000000000000000'; + b.totalDifficulty = '0x0'; + } + + expect(validator.validateJSONSchema(blockSchema, b)).toBeUndefined(); + if (hydrated && b.transactions?.length > 0) { + // eslint-disable-next-line jest/no-conditional-expect + expect(b.transactions).toBeInstanceOf(Array); + } + }); + }); + + describeIf(getSystemTestBackend() === 'geth')( + 'getBlock calls with POS tags in POA node', + () => { + it.each(['safe', 'finalized'])( + // only geth throws this error + 'getBlock', + async blockTag => { + const request = await web3Eth.getBlock(blockTag); + + expect(request).toBeDefined(); + expect(validator.validateJSONSchema(blockSchema, request)).toBeUndefined(); + }, + ); + }, + ); +}); diff --git a/packages/web3-eth/test/integration/block/rpc.getBlockTransactionCount.test.ts b/packages/web3-eth/test/integration/block/rpc.getBlockTransactionCount.test.ts new file mode 100644 index 00000000000..0782d5b02ed --- /dev/null +++ b/packages/web3-eth/test/integration/block/rpc.getBlockTransactionCount.test.ts @@ -0,0 +1,111 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { SupportedProviders, TransactionReceipt } from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Contract } from 'web3-eth-contract'; +import { Web3Eth } from '../../../src'; +import { + getSystemTestBackend, + getSystemTestProvider, + createTempAccount, + closeOpenConnection, +} from '../../fixtures/system_test_utils'; +import { BasicAbi, BasicBytecode } from '../../shared_fixtures/build/Basic'; +import { toAllVariants } from '../../shared_fixtures/utils'; +import { sendFewTxes } from '../helper'; + +describe('rpc with block', () => { + let web3Eth: Web3Eth; + let clientUrl: string | SupportedProviders; + + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + + let blockData: { + earliest: 'earliest'; + latest: 'latest'; + pending: 'pending'; + blockNumber: number | bigint; + blockHash: string; + transactionHash: string; + transactionIndex: number | bigint; + }; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(() => { + clientUrl = getSystemTestProvider(); + web3Eth = new Web3Eth({ + provider: clientUrl, + config: { + transactionPollingTimeout: 2000, + }, + }); + + contract = new Contract(BasicAbi, undefined, { + provider: clientUrl, + }); + + deployOptions = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + }); + beforeAll(async () => { + tempAcc = await createTempAccount(); + sendOptions = { from: tempAcc.address, gas: '1000000' }; + + await contract.deploy(deployOptions).send(sendOptions); + const [receipt]: TransactionReceipt[] = await sendFewTxes({ + from: tempAcc.address, + value: '0x1', + times: 1, + }); + blockData = { + pending: 'pending', + latest: 'latest', + earliest: 'earliest', + blockNumber: Number(receipt.blockNumber), + blockHash: String(receipt.blockHash), + transactionHash: String(receipt.transactionHash), + transactionIndex: Number(receipt.transactionIndex), + }; + }); + afterAll(async () => { + await closeOpenConnection(web3Eth); + await closeOpenConnection(contract); + }); + + describe('methods', () => { + it.each( + toAllVariants<{ + block: 'earliest' | 'latest' | 'pending' | 'blockHash' | 'blockNumber'; + }>({ + block: ['earliest', 'latest', 'pending', 'blockHash', 'blockNumber'], + }), + )('getBlockTransactionCount', async ({ block }) => { + const res = await web3Eth.getBlockTransactionCount(blockData[block]); + let shouldBe: number; + if (getSystemTestBackend() === 'ganache') { + shouldBe = blockData[block] === 'earliest' ? 0 : 1; + } else { + shouldBe = ['earliest', 'pending'].includes(String(blockData[block])) ? 0 : 1; + } + expect(Number(res)).toBe(shouldBe); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/block/rpc.getBlockUncleCount.test.ts b/packages/web3-eth/test/integration/block/rpc.getBlockUncleCount.test.ts new file mode 100644 index 00000000000..3c8902665fc --- /dev/null +++ b/packages/web3-eth/test/integration/block/rpc.getBlockUncleCount.test.ts @@ -0,0 +1,104 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { SupportedProviders, TransactionReceipt } from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Contract } from 'web3-eth-contract'; +import { Web3Eth } from '../../../src'; +import { + getSystemTestProvider, + createTempAccount, + closeOpenConnection, +} from '../../fixtures/system_test_utils'; +import { BasicAbi, BasicBytecode } from '../../shared_fixtures/build/Basic'; +import { toAllVariants } from '../../shared_fixtures/utils'; +import { sendFewTxes } from '../helper'; + +describe('rpc with block', () => { + let web3Eth: Web3Eth; + let clientUrl: string | SupportedProviders; + + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + + let blockData: { + earliest: 'earliest'; + latest: 'latest'; + pending: 'pending'; + blockNumber: number | bigint; + blockHash: string; + transactionHash: string; + transactionIndex: number | bigint; + }; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(() => { + clientUrl = getSystemTestProvider(); + web3Eth = new Web3Eth({ + provider: clientUrl, + config: { + transactionPollingTimeout: 2000, + }, + }); + + contract = new Contract(BasicAbi, undefined, { + provider: clientUrl, + }); + + deployOptions = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + }); + beforeAll(async () => { + tempAcc = await createTempAccount(); + sendOptions = { from: tempAcc.address, gas: '1000000' }; + + await contract.deploy(deployOptions).send(sendOptions); + const [receipt]: TransactionReceipt[] = await sendFewTxes({ + from: tempAcc.address, + value: '0x1', + times: 1, + }); + blockData = { + pending: 'pending', + latest: 'latest', + earliest: 'earliest', + blockNumber: Number(receipt.blockNumber), + blockHash: String(receipt.blockHash), + transactionHash: String(receipt.transactionHash), + transactionIndex: Number(receipt.transactionIndex), + }; + }); + afterAll(async () => { + await closeOpenConnection(web3Eth); + await closeOpenConnection(contract); + }); + + describe('methods', () => { + it.each( + toAllVariants<{ + block: 'earliest' | 'latest' | 'pending' | 'blockHash' | 'blockNumber'; + }>({ + block: ['earliest', 'latest', 'pending', 'blockHash', 'blockNumber'], + }), + )('getBlockUncleCount', async ({ block }) => { + const res = await web3Eth.getBlockUncleCount(blockData[block]); + expect(Number(res)).toBe(0); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/block/rpc.getTransactionCount.test.ts b/packages/web3-eth/test/integration/block/rpc.getTransactionCount.test.ts new file mode 100644 index 00000000000..26bf386dba9 --- /dev/null +++ b/packages/web3-eth/test/integration/block/rpc.getTransactionCount.test.ts @@ -0,0 +1,148 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { SupportedProviders, TransactionReceipt, FMT_BYTES, FMT_NUMBER } from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Contract } from 'web3-eth-contract'; +import { Web3Eth } from '../../../src'; +import { + getSystemTestProvider, + createNewAccount, + createTempAccount, + closeOpenConnection, +} from '../../fixtures/system_test_utils'; +import { BasicAbi, BasicBytecode } from '../../shared_fixtures/build/Basic'; +import { toAllVariants } from '../../shared_fixtures/utils'; +import { sendFewTxes } from '../helper'; + +describe('rpc with block', () => { + let web3Eth: Web3Eth; + let clientUrl: string | SupportedProviders; + + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + + let blockData: { + earliest: 'earliest'; + latest: 'latest'; + pending: 'pending'; + blockNumber: number | bigint; + blockHash: string; + transactionHash: string; + transactionIndex: number | bigint; + }; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(() => { + clientUrl = getSystemTestProvider(); + web3Eth = new Web3Eth({ + provider: clientUrl, + config: { + transactionPollingTimeout: 2000, + }, + }); + + contract = new Contract(BasicAbi, undefined, { + provider: clientUrl, + }); + + deployOptions = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + }); + beforeAll(async () => { + tempAcc = await createTempAccount(); + sendOptions = { from: tempAcc.address, gas: '1000000' }; + + await contract.deploy(deployOptions).send(sendOptions); + const [receipt]: TransactionReceipt[] = await sendFewTxes({ + from: tempAcc.address, + value: '0x1', + times: 1, + }); + blockData = { + pending: 'pending', + latest: 'latest', + earliest: 'earliest', + blockNumber: Number(receipt.blockNumber), + blockHash: String(receipt.blockHash), + transactionHash: String(receipt.transactionHash), + transactionIndex: Number(receipt.transactionIndex), + }; + }); + afterAll(async () => { + await closeOpenConnection(web3Eth); + await closeOpenConnection(contract); + }); + + describe('methods', () => { + it.each( + toAllVariants<{ + block: 'earliest' | 'latest' | 'pending' | 'blockHash' | 'blockNumber'; + format: string; + }>({ + block: ['earliest', 'latest', 'pending', 'blockNumber'], + format: Object.values(FMT_NUMBER), + }), + )('getTransactionCount', async ({ block, format }) => { + const acc = await createNewAccount({ unlock: true, refill: true }); + const [receipt] = await sendFewTxes({ + from: acc.address, + value: '0x1', + times: 1, + }); + const data = { + pending: 'pending', + latest: 'latest', + earliest: 'earliest', + blockNumber: Number(receipt.blockNumber), + blockHash: String(receipt.blockHash), + transactionHash: String(receipt.transactionHash), + transactionIndex: Number(receipt.transactionIndex), + }; + const countBefore = await web3Eth.getTransactionCount(acc.address, data[block], { + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + const count = 2; + const res = await sendFewTxes({ + from: acc.address, + value: '0x1', + times: count, + }); + const receiptAfter = res[res.length - 1]; + const dataAfter = { + pending: 'pending', + latest: 'latest', + earliest: 'earliest', + blockNumber: Number(receiptAfter.blockNumber), + blockHash: String(receiptAfter.blockHash), + transactionHash: String(receiptAfter.transactionHash), + transactionIndex: Number(receiptAfter.transactionIndex), + }; + const countAfter = await web3Eth.getTransactionCount(acc.address, dataAfter[block], { + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + // eslint-disable-next-line jest/no-standalone-expect + expect(Number(countAfter) - Number(countBefore)).toBe( + blockData[block] === 'earliest' ? 0 : count, + ); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/block/rpc.getTransactionFromBlock.test.ts b/packages/web3-eth/test/integration/block/rpc.getTransactionFromBlock.test.ts new file mode 100644 index 00000000000..13777425e8c --- /dev/null +++ b/packages/web3-eth/test/integration/block/rpc.getTransactionFromBlock.test.ts @@ -0,0 +1,102 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { SupportedProviders, TransactionInfo, TransactionReceipt } from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Contract } from 'web3-eth-contract'; +import { Web3Eth } from '../../../src'; +import { + getSystemTestProvider, + createTempAccount, + closeOpenConnection, +} from '../../fixtures/system_test_utils'; +import { BasicAbi, BasicBytecode } from '../../shared_fixtures/build/Basic'; +import { sendFewTxes, validateTransaction } from '../helper'; + +describe('rpc with block', () => { + let web3Eth: Web3Eth; + let clientUrl: string | SupportedProviders; + + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + + let blockData: { + earliest: 'earliest'; + latest: 'latest'; + pending: 'pending'; + blockNumber: number | bigint; + blockHash: string; + transactionHash: string; + transactionIndex: number | bigint; + }; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(() => { + clientUrl = getSystemTestProvider(); + web3Eth = new Web3Eth({ + provider: clientUrl, + config: { + transactionPollingTimeout: 2000, + }, + }); + + contract = new Contract(BasicAbi, undefined, { + provider: clientUrl, + }); + + deployOptions = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + }); + beforeAll(async () => { + tempAcc = await createTempAccount(); + sendOptions = { from: tempAcc.address, gas: '1000000' }; + + await contract.deploy(deployOptions).send(sendOptions); + const [receipt]: TransactionReceipt[] = await sendFewTxes({ + from: tempAcc.address, + value: '0x1', + times: 1, + }); + blockData = { + pending: 'pending', + latest: 'latest', + earliest: 'earliest', + blockNumber: Number(receipt.blockNumber), + blockHash: String(receipt.blockHash), + transactionHash: String(receipt.transactionHash), + transactionIndex: Number(receipt.transactionIndex), + }; + }); + afterAll(async () => { + await closeOpenConnection(web3Eth); + await closeOpenConnection(contract); + }); + + describe('methods', () => { + it('getTransactionFromBlock', async () => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const tx = (await web3Eth.getTransactionFromBlock( + blockData.blockNumber, + blockData.transactionIndex, + ))!; + validateTransaction(tx as TransactionInfo); + expect(tx?.hash).toBe(blockData.transactionHash); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/block/rpc.getUncle.test.ts b/packages/web3-eth/test/integration/block/rpc.getUncle.test.ts new file mode 100644 index 00000000000..4ba7f08a91d --- /dev/null +++ b/packages/web3-eth/test/integration/block/rpc.getUncle.test.ts @@ -0,0 +1,107 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { SupportedProviders, TransactionReceipt } from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Contract } from 'web3-eth-contract'; + +import { Web3Eth } from '../../../src'; + +import { + getSystemTestProvider, + createTempAccount, + closeOpenConnection, +} from '../../fixtures/system_test_utils'; +import { BasicAbi, BasicBytecode } from '../../shared_fixtures/build/Basic'; +import { toAllVariants } from '../../shared_fixtures/utils'; +import { sendFewTxes } from '../helper'; + +describe('rpc with block', () => { + let web3Eth: Web3Eth; + let clientUrl: string | SupportedProviders; + + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + + let blockData: { + earliest: 'earliest'; + latest: 'latest'; + pending: 'pending'; + blockNumber: number | bigint; + blockHash: string; + transactionHash: string; + transactionIndex: number | bigint; + }; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(() => { + clientUrl = getSystemTestProvider(); + web3Eth = new Web3Eth({ + provider: clientUrl, + config: { + transactionPollingTimeout: 2000, + }, + }); + + contract = new Contract(BasicAbi, undefined, { + provider: clientUrl, + }); + + deployOptions = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + }); + beforeAll(async () => { + tempAcc = await createTempAccount(); + sendOptions = { from: tempAcc.address, gas: '1000000' }; + + await contract.deploy(deployOptions).send(sendOptions); + const [receipt]: TransactionReceipt[] = await sendFewTxes({ + from: tempAcc.address, + value: '0x1', + times: 1, + }); + blockData = { + pending: 'pending', + latest: 'latest', + earliest: 'earliest', + blockNumber: Number(receipt.blockNumber), + blockHash: String(receipt.blockHash), + transactionHash: String(receipt.transactionHash), + transactionIndex: Number(receipt.transactionIndex), + }; + }); + afterAll(async () => { + await closeOpenConnection(web3Eth); + await closeOpenConnection(contract); + }); + + describe('methods', () => { + it.each( + toAllVariants<{ + block: 'earliest' | 'latest' | 'pending' | 'blockNumber'; + }>({ + block: ['earliest', 'latest', 'pending', 'blockNumber'], + }), + )('getUncle', async ({ block }) => { + const res = await web3Eth.getUncle(blockData[block], 0); + // eslint-disable-next-line jest/no-standalone-expect + expect(res).toBeNull(); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/defaults.test.ts b/packages/web3-eth/test/integration/defaults.test.ts new file mode 100644 index 00000000000..3a17d9449de --- /dev/null +++ b/packages/web3-eth/test/integration/defaults.test.ts @@ -0,0 +1,1053 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// eslint-disable-next-line import/no-extraneous-dependencies +import { Contract } from 'web3-eth-contract'; +import { hexToNumber, numberToHex } from 'web3-utils'; +import { TransactionBuilder, TransactionTypeParser, Web3Context, Web3PromiEvent } from 'web3-core'; +import { + Hardfork, + SupportedProviders, + TransactionReceipt, + ValidChains, + Web3BaseProvider, + DEFAULT_RETURN_FORMAT, +} from 'web3-types'; +import { + detectTransactionType, + prepareTransactionForSigning, + SendTransactionEvents, + transactionBuilder, + Web3Eth, +} from '../../src'; + +import { + closeOpenConnection, + createNewAccount, + createTempAccount, + getSystemTestProvider, + isIpc, + sendFewSampleTxs, +} from '../fixtures/system_test_utils'; + +import { + defaultTransactionBuilder, + getTransactionFromOrToAttr, + getTransactionType, +} from '../../src/utils'; +import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic'; +import { MsgSenderAbi, MsgSenderBytecode } from '../shared_fixtures/build/MsgSender'; +import { getTransactionGasPricing } from '../../src/utils/get_transaction_gas_pricing'; +import { Resolve, sendFewTxes } from './helper'; + +describe('defaults', () => { + let web3Eth: Web3Eth; + let eth2: Web3Eth; + let clientUrl: string | SupportedProviders; + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + let tempAcc: { address: string; privateKey: string }; + + beforeEach(async () => { + clientUrl = getSystemTestProvider(); + web3Eth = new Web3Eth(clientUrl); + tempAcc = await createTempAccount(); + contract = new Contract(BasicAbi, web3Eth.getContextObject() as any); + deployOptions = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + sendOptions = { from: tempAcc.address, gas: '1000000' }; + }); + + afterEach(async () => { + await closeOpenConnection(web3Eth); + await closeOpenConnection(eth2); + }); + + describe('defaults', () => { + it('defaultAccount', async () => { + const tempAcc2 = await createTempAccount(); + const tempAcc3 = await createTempAccount(); + const contractMsgFrom = await new Contract( + MsgSenderAbi, + web3Eth.getContextObject() as any, + ) + .deploy({ + data: MsgSenderBytecode, + arguments: ['test'], + }) + .send({ from: tempAcc2.address, gas: '2700000' }); + // default + expect(web3Eth.defaultAccount).toBeUndefined(); + + // after set + web3Eth.setConfig({ + defaultAccount: tempAcc.address, + }); + expect(web3Eth.defaultAccount).toBe(tempAcc.address); + + // set by create new instance + eth2 = new Web3Eth({ + config: { + defaultAccount: tempAcc3.address, + }, + }); + expect(eth2.defaultAccount).toBe(tempAcc3.address); + + // check utils + expect(getTransactionFromOrToAttr('from', eth2)).toBe(tempAcc3.address); + // TODO: after handleRevert implementation https://github.com/ChainSafe/web3.js/issues/5069 add following tests in future release + // set handleRevert true and test following functions with invalid input tx data and see revert reason present in error details: + contractMsgFrom.setConfig({ + defaultAccount: tempAcc.address, + }); + + const tx = await contractMsgFrom.methods + .setTestString('test2') + .send({ gas: '1000000' }); + const txSend = await web3Eth.sendTransaction({ + to: tempAcc2.address, + value: '0x1', + }); + expect(tx.from).toBe(tempAcc.address.toLowerCase()); + expect(txSend.from).toBe(tempAcc.address.toLowerCase()); + + const tx2 = await contractMsgFrom.methods.setTestString('test3').send({ + from: tempAcc2.address, + }); + const tx2Send = await web3Eth.sendTransaction({ + to: tempAcc.address, + value: '0x1', + from: tempAcc2.address, + }); + expect(tx2.from).toBe(tempAcc2.address.toLowerCase()); + expect(tx2Send.from).toBe(tempAcc2.address.toLowerCase()); + + const fromDefault = await contractMsgFrom.methods?.from().call(); + const fromPass = await contractMsgFrom.methods?.from().call({ from: tempAcc.address }); + const fromPass2 = await contractMsgFrom.methods + ?.from() + .call({ from: tempAcc2.address }); + expect((fromDefault as unknown as string).toLowerCase()).toBe( + tempAcc.address.toLowerCase(), + ); + expect((fromPass as unknown as string).toLowerCase()).toBe( + tempAcc.address.toLowerCase(), + ); + expect((fromPass2 as unknown as string).toLowerCase()).toBe( + tempAcc2.address.toLowerCase(), + ); + }); + it('handleRevert', () => { + /* + //TO DO: after handleRevert implementation https://github.com/ChainSafe/web3.js/issues/5069 add following tests in future release + /* set handleRevert true and test following functions with invalid input tx data and see revert reason present in error details: + + web3.eth.call() + web3.eth.sendTransaction() + contract.methods.myMethod(…).send(…) + contract.methods.myMethod(…).call(…) + + */ + // default + expect(web3Eth.handleRevert).toBe(false); + + // after set + web3Eth.setConfig({ + handleRevert: true, + }); + expect(web3Eth.handleRevert).toBe(true); + + // set by create new instance + eth2 = new Web3Eth({ + config: { + handleRevert: true, + }, + }); + expect(eth2.handleRevert).toBe(true); + }); + it('defaultBlock', async () => { + const contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + // default + expect(web3Eth.defaultBlock).toBe('latest'); + + web3Eth.setConfig({ + defaultBlock: 'safe', + }); + expect(web3Eth.defaultBlock).toBe('safe'); + + web3Eth.setConfig({ + defaultBlock: 'finalized', + }); + expect(web3Eth.defaultBlock).toBe('finalized'); + + // after set + web3Eth.setConfig({ + defaultBlock: 'earliest', + }); + expect(web3Eth.defaultBlock).toBe('earliest'); + + // set by create new instance + eth2 = new Web3Eth({ + provider: web3Eth.provider, + config: { + defaultBlock: 'earliest', + }, + }); + expect(eth2.defaultBlock).toBe('earliest'); + + // check implementation + const acc = await createNewAccount({ refill: true, unlock: true }); + + await sendFewTxes({ + from: acc.address, + times: 1, + value: '0x1', + }); + const balance = await eth2.getBalance(acc.address); + const code = await eth2.getCode(contractDeployed?.options?.address as string); + const storage = await eth2.getStorageAt( + contractDeployed?.options?.address as string, + 0, + ); + const transactionCount = await eth2.getTransactionCount(acc.address); + expect(storage === '0x' ? 0 : Number(hexToNumber(storage))).toBe(0); + expect(code).toBe('0x'); + expect(balance).toBe(BigInt(0)); + expect(transactionCount).toBe(BigInt(0)); + + // pass blockNumber to rewrite defaultBlockNumber + const balanceWithBlockNumber = await eth2.getBalance(acc.address, 'latest'); + const transactionCountWithBlockNumber = await eth2.getTransactionCount( + acc.address, + 'latest', + ); + const codeWithBlockNumber = await eth2.getCode( + contractDeployed?.options?.address as string, + 'latest', + ); + const storageWithBlockNumber = await eth2.getStorageAt( + contractDeployed?.options?.address as string, + 0, + 'latest', + ); + expect(Number(hexToNumber(storageWithBlockNumber))).toBe(10); + expect(transactionCountWithBlockNumber).toBe(BigInt(1)); + expect(Number(balanceWithBlockNumber)).toBeGreaterThan(0); + expect(codeWithBlockNumber.startsWith(BasicBytecode.slice(0, 10))).toBe(true); + + // set new default block to config + eth2.setConfig({ + defaultBlock: 'latest', + }); + const balanceLatest = await eth2.getBalance(acc.address); + const codeLatest = await eth2.getCode(contractDeployed?.options?.address as string); + const storageLatest = await eth2.getStorageAt( + contractDeployed?.options?.address as string, + 0, + ); + const transactionCountLatest = await eth2.getTransactionCount(acc.address); + expect(codeLatest.startsWith(BasicBytecode.slice(0, 10))).toBe(true); + expect(Number(hexToNumber(storageLatest))).toBe(10); + expect(transactionCountLatest).toBe(BigInt(1)); + expect(Number(balanceLatest)).toBeGreaterThan(0); + }); + it('transactionSendTimeout', () => { + // default + expect(web3Eth.transactionSendTimeout).toBe(750 * 1000); + + // after set + web3Eth.setConfig({ + transactionSendTimeout: 1, + }); + expect(web3Eth.transactionSendTimeout).toBe(1); + + // set by create new instance + eth2 = new Web3Eth({ + provider: web3Eth.provider, + config: { + transactionSendTimeout: 120, + }, + }); + expect(eth2.transactionSendTimeout).toBe(120); + }); + it('transactionBlockTimeout', () => { + // default + expect(web3Eth.transactionBlockTimeout).toBe(50); + + // after set + web3Eth.setConfig({ + transactionBlockTimeout: 1, + }); + expect(web3Eth.transactionBlockTimeout).toBe(1); + + // set by create new instance + eth2 = new Web3Eth({ + config: { + transactionBlockTimeout: 120, + }, + }); + expect(eth2.transactionBlockTimeout).toBe(120); + }); + it('transactionConfirmationBlocks', () => { + // default + // eslint-disable-next-line jest/no-standalone-expect + expect(web3Eth.transactionConfirmationBlocks).toBe(24); + + // after set + web3Eth.setConfig({ + transactionConfirmationBlocks: 3, + }); + // eslint-disable-next-line jest/no-standalone-expect + expect(web3Eth.transactionConfirmationBlocks).toBe(3); + + // set by create new instance + eth2 = new Web3Eth({ + config: { + transactionConfirmationBlocks: 4, + }, + }); + // eslint-disable-next-line jest/no-standalone-expect + expect(eth2.transactionConfirmationBlocks).toBe(4); + }); + it('transactionConfirmationBlocks implementation', async () => { + const tempAcc2 = await createTempAccount(); + const waitConfirmations = 1; + const eth = new Web3Eth(web3Eth.provider); + eth.setConfig({ transactionConfirmationBlocks: waitConfirmations }); + + const from = tempAcc.address; + const to = tempAcc2.address; + const value = `0x1`; + const sentTx: Web3PromiEvent< + TransactionReceipt, + SendTransactionEvents + > = eth.sendTransaction({ + to, + value, + from, + }); + + const receiptPromise = new Promise((resolve: Resolve) => { + // Tx promise is handled separately + // eslint-disable-next-line no-void + void sentTx.on('receipt', (params: TransactionReceipt) => { + expect(Number(params.status)).toBe(1); + resolve(); + }); + }); + let shouldBe = 1; + const confirmationPromise = new Promise((resolve: Resolve) => { + // Tx promise is handled separately + // eslint-disable-next-line no-void + void sentTx.on('confirmation', ({ confirmations }) => { + expect(Number(confirmations)).toBeGreaterThanOrEqual(shouldBe); + shouldBe += 1; + if (shouldBe > waitConfirmations) { + resolve(); + } + }); + }); + await sentTx; + await receiptPromise; + await sendFewSampleTxs(isIpc ? 2 * waitConfirmations : waitConfirmations); + await confirmationPromise; + await closeOpenConnection(eth); + }); + it('transactionPollingInterval and transactionPollingTimeout', () => { + // default + expect(web3Eth.transactionPollingInterval).toBe(1000); + expect(web3Eth.transactionPollingTimeout).toBe(750 * 1000); + + // after set + web3Eth.setConfig({ + transactionPollingInterval: 3, + transactionPollingTimeout: 10, + }); + expect(web3Eth.transactionPollingInterval).toBe(3); + expect(web3Eth.transactionPollingTimeout).toBe(10); + + // set by create new instance + eth2 = new Web3Eth({ + config: { + transactionPollingInterval: 400, + transactionPollingTimeout: 10, + }, + }); + expect(eth2.transactionPollingInterval).toBe(400); + expect(eth2.transactionPollingTimeout).toBe(10); + }); + // todo will work with not instance mining + // itIf(isHttp)('transactionReceiptPollingInterval and transactionConfirmationPollingInterval implementation', async () => { + // eth2 = new Web3Eth({ + // provider: web3Eth.provider, + // config: { + // transactionPollingInterval: 400, + // transactionPollingTimeout: 10, + // }, + // }); + // + // const sentTx: Web3PromiEvent = eth2.sendTransaction({ + // to: tempAcc2.address, + // value: '0x1', + // from: tempAcc.address, + // }); + // + // const res = await Promise.race([ + // new Promise((resolve) => setTimeout(resolve, 410)), + // new Promise((resolve: Resolve) => { + // sentTx.on('receipt', (params: TransactionReceipt) => { + // expect(params.status).toBe(BigInt(1)); + // resolve(params); + // }); + // }), + // ]); + // expect((res as TransactionReceipt).status).toBe(BigInt(1)); + // + // const sentTx2: Web3PromiEvent = eth2.sendTransaction({ + // to: tempAcc2.address, + // value: '0x1', + // from: tempAcc.address, + // }); + // const res2 = await Promise.race([ + // new Promise((resolve) => setTimeout(()=>resolve(false), 300)), + // new Promise((resolve: Resolve) => { + // sentTx2.on('receipt', (params: TransactionReceipt) => { + // expect(params.status).toBe(BigInt(1)); + // resolve(params); + // }); + // }), + // ]); + // expect((res2 as boolean)).toBe(false); + // + // + // }); + it('transactionReceiptPollingInterval and transactionConfirmationPollingInterval', () => { + // default + expect(web3Eth.transactionReceiptPollingInterval).toBeUndefined(); + expect(web3Eth.transactionConfirmationPollingInterval).toBeUndefined(); + + // after set + web3Eth.setConfig({ + transactionReceiptPollingInterval: 3, + transactionConfirmationPollingInterval: 10, + }); + expect(web3Eth.transactionReceiptPollingInterval).toBe(3); + expect(web3Eth.transactionConfirmationPollingInterval).toBe(10); + + // set by create new instance + eth2 = new Web3Eth({ + config: { + transactionReceiptPollingInterval: 400, + transactionConfirmationPollingInterval: 10, + }, + }); + expect(eth2.transactionReceiptPollingInterval).toBe(400); + expect(eth2.transactionConfirmationPollingInterval).toBe(10); + }); + it('blockHeaderTimeout', () => { + // default + expect(web3Eth.blockHeaderTimeout).toBe(10); + + // after set + web3Eth.setConfig({ + blockHeaderTimeout: 3, + }); + expect(web3Eth.blockHeaderTimeout).toBe(3); + + // set by create new instance + eth2 = new Web3Eth({ + config: { + blockHeaderTimeout: 4, + }, + }); + expect(eth2.blockHeaderTimeout).toBe(4); + }); + + it('enableExperimentalFeatures useSubscriptionWhenCheckingBlockTimeout', () => { + // default + expect(web3Eth.enableExperimentalFeatures.useSubscriptionWhenCheckingBlockTimeout).toBe( + false, + ); + + // after set + web3Eth.setConfig({ + enableExperimentalFeatures: { + useSubscriptionWhenCheckingBlockTimeout: true, + useRpcCallSpecification: false, + }, + }); + expect(web3Eth.enableExperimentalFeatures.useSubscriptionWhenCheckingBlockTimeout).toBe( + true, + ); + + // set by create new instance + eth2 = new Web3Eth({ + config: { + enableExperimentalFeatures: { + useSubscriptionWhenCheckingBlockTimeout: true, + useRpcCallSpecification: false, + }, + }, + }); + expect(eth2.enableExperimentalFeatures.useSubscriptionWhenCheckingBlockTimeout).toBe( + true, + ); + }); + + it('enableExperimentalFeatures useRpcCallSpecification', () => { + // default + expect(web3Eth.enableExperimentalFeatures.useRpcCallSpecification).toBe(false); + + // after set + web3Eth.setConfig({ + enableExperimentalFeatures: { + useSubscriptionWhenCheckingBlockTimeout: false, + useRpcCallSpecification: true, + }, + }); + expect(web3Eth.enableExperimentalFeatures.useRpcCallSpecification).toBe(true); + + // set by create new instance + eth2 = new Web3Eth({ + config: { + enableExperimentalFeatures: { + useSubscriptionWhenCheckingBlockTimeout: false, + useRpcCallSpecification: true, + }, + }, + }); + expect(eth2.enableExperimentalFeatures.useRpcCallSpecification).toBe(true); + }); + + it('should fallback to polling if provider support `on` but `newBlockHeaders` does not arrive in `blockHeaderTimeout` seconds', async () => { + const tempAcc2 = await createTempAccount(); + + const tempEth: Web3Eth = new Web3Eth(clientUrl); + // Ensure the provider supports subscriptions to simulate the test scenario + // It will cause providers that does not support subscriptions (like http) to throw exception when subscribing. + // This case is tested to ensure that even if an error happen at subscription, + // polling will still get the data from next blocks. + (tempEth.provider as Web3BaseProvider).supportsSubscriptions = () => true; + + // Cause the events to take a long time (more than blockHeaderTimeout), + // to ensure that polling of new blocks works in such cases. + // This will cause the providers that supports subscription (like WebSocket) + // to never return data through listening to new events + + // eslint-disable-next-line @typescript-eslint/no-misused-promises + (tempEth.provider as Web3BaseProvider).on = async () => { + await new Promise(res => { + setTimeout(res, 1000000); + }); + }; + + // Make the test run faster by casing the polling to start after 1 second + tempEth.blockHeaderTimeout = 1; + const from = tempAcc2.address; + const to = tempAcc.address; + const value = `0x1`; + + const sentTx: Web3PromiEvent< + TransactionReceipt, + SendTransactionEvents + > = tempEth.sendTransaction({ + from, + to, + value, + }); + + const confirmationPromise = new Promise((resolve: (status: bigint) => void) => { + // Tx promise is handled separately + // eslint-disable-next-line no-void + void sentTx.on( + 'confirmation', + async ({ + confirmations, + receipt: { status }, + }: { + confirmations: bigint; + receipt: { status: bigint }; + }) => { + // Being able to get 2 confirmations means the pooling for new blocks works + if (confirmations >= 2) { + sentTx.removeAllListeners(); + resolve(status); + } else { + // Send a transaction to cause dev providers creating new blocks to fire the 'confirmation' event again. + await tempEth.sendTransaction({ + from, + to, + value, + }); + } + }, + ); + }); + await sentTx; + + // Ensure the promise the get the confirmations resolves with no error + const status = await confirmationPromise; + expect(status).toBe(BigInt(1)); + await closeOpenConnection(tempEth); + }); + it('maxListenersWarningThreshold test default config', () => { + // default + expect(web3Eth.maxListenersWarningThreshold).toBe(100); + }); + it('maxListenersWarningThreshold set maxListeners through variable', () => { + eth2 = new Web3Eth({}); + eth2.maxListenersWarningThreshold = 3; + expect(eth2.maxListenersWarningThreshold).toBe(3); + expect(eth2.getMaxListeners()).toBe(3); + }); + it('maxListenersWarningThreshold set config', () => { + const eth = new Web3Eth({}); + eth.setConfig({ + maxListenersWarningThreshold: 3, + }); + expect(eth2.maxListenersWarningThreshold).toBe(3); + expect(eth2.getMaxListeners()).toBe(3); + }); + it('defaultNetworkId', async () => { + // default + expect(web3Eth.defaultNetworkId).toBeUndefined(); + + // after set + web3Eth.setConfig({ + defaultNetworkId: 3, + }); + expect(web3Eth.defaultNetworkId).toBe(3); + + // set by create new instance + eth2 = new Web3Eth({ + provider: web3Eth.provider, + config: { + defaultNetworkId: 4, + }, + }); + expect(eth2.defaultNetworkId).toBe(4); + const res = await defaultTransactionBuilder({ + transaction: { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + }, + web3Context: eth2 as Web3Context, + }); + expect(res.networkId).toBe(4); + + // pass network id + const resWithPassNetworkId = await defaultTransactionBuilder({ + transaction: { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + networkId: 5, + }, + web3Context: eth2 as Web3Context, + }); + + expect(resWithPassNetworkId.networkId).toBe(BigInt(5)); + }); + it('defaultChain', async () => { + // default + expect(web3Eth.defaultChain).toBe('mainnet'); + + // after set + web3Eth.setConfig({ + defaultChain: 'ropsten', + }); + expect(web3Eth.defaultChain).toBe('ropsten'); + + // set by create new instance + eth2 = new Web3Eth({ + provider: web3Eth.provider, + config: { + defaultChain: 'rinkeby', + }, + }); + expect(eth2.defaultChain).toBe('rinkeby'); + const res = await defaultTransactionBuilder({ + transaction: { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + }, + web3Context: eth2 as Web3Context, + }); + expect(res.chain).toBe('rinkeby'); + }); + it('defaultHardfork', async () => { + // default + expect(web3Eth.defaultHardfork).toBe('london'); + + // after set + web3Eth.setConfig({ + defaultHardfork: 'dao', + }); + expect(web3Eth.defaultHardfork).toBe('dao'); + + // set by create new instance + eth2 = new Web3Eth({ + provider: web3Eth.provider, + config: { + defaultHardfork: 'istanbul', + defaultTransactionType: '0x0', + }, + }); + expect(eth2.defaultHardfork).toBe('istanbul'); + expect(eth2.defaultTransactionType).toBe('0x0'); + + const res = await prepareTransactionForSigning( + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + }, + eth2, + ); + expect(res.common.hardfork()).toBe('istanbul'); + }); + it('defaultCommon', () => { + // default + expect(web3Eth.defaultCommon).toBeUndefined(); + const baseChain: ValidChains = 'mainnet'; + const hardfork: Hardfork = 'dao'; + const common = { + customChain: { + name: 'test', + networkId: 123, + chainId: 1234, + }, + baseChain, + hardfork, + }; + // after set + web3Eth.setConfig({ + defaultCommon: common, + }); + expect(web3Eth.defaultCommon).toBe(common); + + // set by create new instance + eth2 = new Web3Eth({ + config: { + defaultCommon: common, + }, + }); + expect(eth2.defaultCommon).toBe(common); + }); + it('defaultTransactionType', async () => { + // default + expect(web3Eth.defaultTransactionType).toBe('0x2'); + // after set + web3Eth.setConfig({ + defaultTransactionType: '0x3', + }); + expect(web3Eth.defaultTransactionType).toBe('0x3'); + + // set by create new instance + eth2 = new Web3Eth({ + provider: clientUrl, + config: { + defaultTransactionType: '0x4444', + }, + }); + + expect(eth2.defaultTransactionType).toBe('0x4444'); + + const res = getTransactionType( + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + }, + eth2, + ); + expect(res).toBe('0x4444'); + + // test override to 0x2 if: + // tx.maxFeePerGas !== undefined || + // tx.maxPriorityFeePerGas !== undefined || + // tx.hardfork === 'london' || + // tx.common?.hardfork === 'london' + const maxFeePerGasOverride = getTransactionType( + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + maxFeePerGas: '0x32', + }, + eth2, + ); + expect(maxFeePerGasOverride).toBe('0x2'); + const maxPriorityFeePerGasOverride = getTransactionType( + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + maxPriorityFeePerGas: '0x32', + }, + eth2, + ); + expect(maxPriorityFeePerGasOverride).toBe('0x2'); + const hardforkOverride = getTransactionType( + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + hardfork: 'london', + }, + eth2, + ); + expect(hardforkOverride).toBe('0x2'); + const commonOverride = getTransactionType( + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + common: { + customChain: { name: 'ropsten', networkId: '2', chainId: '0x1' }, + hardfork: 'london', + }, + }, + eth2, + ); + expect(commonOverride).toBe('0x2'); + + // override to 0x1 if: + // tx.accessList !== undefined || tx.hardfork === 'berlin' || tx.common?.hardfork === 'berlin' + + const accessListOverride = getTransactionType( + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + accessList: [ + { + address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + storageKeys: ['0x3535353535353535353535353535353535353535'], + }, + ], + }, + eth2, + ); + expect(accessListOverride).toBe('0x1'); + + const hardforkBerlinOverride = getTransactionType( + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + hardfork: 'berlin', + }, + eth2, + ); + expect(hardforkBerlinOverride).toBe('0x0'); + + const commonBerlinOverride = getTransactionType( + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + common: { + customChain: { name: 'ropsten', networkId: '2', chainId: '0x1' }, + hardfork: 'berlin', + }, + }, + eth2, + ); + expect(commonBerlinOverride).toBe('0x0'); + }); + it('defaultMaxPriorityFeePerGas', async () => { + // default + expect(web3Eth.defaultMaxPriorityFeePerGas).toBe(numberToHex(2500000000)); + // after set + web3Eth.setConfig({ + defaultMaxPriorityFeePerGas: numberToHex(2100000000), + }); + expect(web3Eth.defaultMaxPriorityFeePerGas).toBe(numberToHex(2100000000)); + + // set by create new instance + eth2 = new Web3Eth({ + provider: web3Eth.provider, + config: { + defaultMaxPriorityFeePerGas: numberToHex(1200000000), + }, + }); + expect(eth2.defaultMaxPriorityFeePerGas).toBe(numberToHex(1200000000)); + + const res = await getTransactionGasPricing( + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + type: '0x2', + gas: '0x5208', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + }, + eth2, + DEFAULT_RETURN_FORMAT, + ); + expect(res?.maxPriorityFeePerGas).toBe(BigInt(1200000000)); + + // override test + const resOverride = await getTransactionGasPricing( + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + type: '0x2', + gas: '0x5208', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + maxPriorityFeePerGas: '0x123123123', + }, + eth2, + DEFAULT_RETURN_FORMAT, + ); + expect(resOverride?.maxPriorityFeePerGas).toBe(BigInt('4883362083')); + }); + it('transactionBuilder', async () => { + // default + expect(web3Eth.transactionBuilder).toBeUndefined(); + + // default + expect(web3Eth.transactionBuilder).toBeUndefined(); + + const newBuilderMock = jest.fn() as unknown as TransactionBuilder; + + web3Eth.setConfig({ + transactionBuilder: newBuilderMock, + }); + expect(web3Eth.transactionBuilder).toBe(newBuilderMock); + + // set by create new instance + eth2 = new Web3Eth({ + config: { + transactionBuilder: newBuilderMock, + }, + }); + expect(eth2.transactionBuilder).toBe(newBuilderMock); + + await transactionBuilder({ + transaction: { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + }, + web3Context: eth2, + }); + expect(newBuilderMock).toHaveBeenCalled(); + }); + it('transactionTypeParser', () => { + // default + expect(web3Eth.transactionTypeParser).toBeUndefined(); + + const newParserMock = jest.fn() as unknown as TransactionTypeParser; + + web3Eth.setConfig({ + transactionTypeParser: newParserMock, + }); + expect(web3Eth.transactionTypeParser).toBe(newParserMock); + + // set by create new instance + eth2 = new Web3Eth({ + config: { + transactionTypeParser: newParserMock, + }, + }); + expect(eth2.transactionTypeParser).toBe(newParserMock); + detectTransactionType( + { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + data: '0x0', + nonce: '0x4', + chainId: '0x1', + gasLimit: '0x5208', + }, + eth2, + ); + expect(newParserMock).toHaveBeenCalled(); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/defaults.transactionBlockTimeout.test.ts b/packages/web3-eth/test/integration/defaults.transactionBlockTimeout.test.ts new file mode 100644 index 00000000000..d547c2bc551 --- /dev/null +++ b/packages/web3-eth/test/integration/defaults.transactionBlockTimeout.test.ts @@ -0,0 +1,135 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { DEFAULT_RETURN_FORMAT } from 'web3-types'; +import { Web3PromiEvent } from 'web3-core'; +import { SupportedProviders, TransactionReceipt } from 'web3-types'; +import { TransactionBlockTimeoutError } from 'web3-errors'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Web3 } from 'web3'; +import { Web3Account } from 'web3-eth-accounts'; +import { SendTransactionEvents } from '../../src'; + +import { + closeOpenConnection, + getSystemTestProvider, + isSocket, + itIf, + waitForOpenConnection, + createLocalAccount, + sendFewSampleTxs, +} from '../fixtures/system_test_utils'; + +const MAX_32_SIGNED_INTEGER = 2147483647; +const gas = 21000; +/* eslint-disable jest/no-standalone-expect */ +describe('defaults', () => { + let web3: Web3; + let clientUrl: string | SupportedProviders; + let account1: Web3Account; + let account2: Web3Account; + + beforeEach(() => { + clientUrl = getSystemTestProvider(); + web3 = new Web3(clientUrl); + + // Increase other timeouts so only `transactionBlockTimeout` would be reached + web3.eth.transactionSendTimeout = MAX_32_SIGNED_INTEGER; + web3.eth.transactionPollingTimeout = MAX_32_SIGNED_INTEGER; + web3.eth.blockHeaderTimeout = MAX_32_SIGNED_INTEGER / 1000; + }); + + afterEach(async () => { + web3.eth.transactionBlockTimeout = 50; + await closeOpenConnection(web3.eth); + }); + + describe('defaults', () => { + it('should fail if transaction was not mined within `transactionBlockTimeout` blocks', async () => { + account1 = await createLocalAccount(web3); + account2 = await createLocalAccount(web3); + // Setting a high `nonce` when sending a transaction, to cause the RPC call to stuck at the Node + + const sentTx: Web3PromiEvent< + TransactionReceipt, + SendTransactionEvents + > = web3.eth.sendTransaction({ + from: account1.address, + to: account2.address, + gas, + value: '0x1', + // Give a high nonce so the transaction stuck forever. + // However, make this random to be able to run the test many times without receiving an error that indicate submitting the same transaction twice. + nonce: Number.MAX_SAFE_INTEGER, + }); + + // Some providers (mostly used for development) will make blocks only when there are new transactions + // So, send 2 transactions, one after another, because in this test `transactionBlockTimeout = 2`. + // eslint-disable-next-line no-void + await sendFewSampleTxs(2); + + web3.eth.transactionBlockTimeout = 2; + + await expect(sentTx).rejects.toThrow(/was not mined within [0-9]+ blocks/); + + await expect(sentTx).rejects.toThrow(TransactionBlockTimeoutError); + + await closeOpenConnection(web3.eth); + }); + + // The code of this test case is identical to the pervious one except for `eth.enableExperimentalFeatures = true` + // TODO: And this test case will be removed once https://github.com/web3/web3.js/issues/5521 is implemented. + itIf(isSocket)( + 'should fail if transaction was not mined within `transactionBlockTimeout` blocks - when subscription is used', + async () => { + account1 = await createLocalAccount(web3); + account2 = await createLocalAccount(web3); + await waitForOpenConnection(web3.eth); + // using subscription to get the new blocks and fire `TransactionBlockTimeoutError` is currently supported only + // with `enableExperimentalFeatures.useSubscriptionWhenCheckingBlockTimeout` equal true. + web3.eth.enableExperimentalFeatures.useSubscriptionWhenCheckingBlockTimeout = true; + + // Setting a high `nonce` when sending a transaction, to cause the RPC call to stuck at the Node + const sentTx: Web3PromiEvent< + TransactionReceipt, + SendTransactionEvents + > = web3.eth.sendTransaction({ + from: account1.address, + to: account2.address, + gas, + value: '0x1', + type: '0x1', + // Give a high nonce so the transaction stuck forever. + // However, make this random to be able to run the test many times without receiving an error that indicate submitting the same transaction twice. + nonce: Number.MAX_SAFE_INTEGER, + }); + + // Some providers (mostly used for development) will make blocks only when there are new transactions + // So, send 2 transactions, one after another, because in this test `transactionBlockTimeout = 2`. + // eslint-disable-next-line no-void, @typescript-eslint/no-unsafe-call + void sendFewSampleTxs(2); + + web3.eth.transactionBlockTimeout = 2; + + await expect(sentTx).rejects.toThrow(/was not mined within [0-9]+ blocks/); + + await expect(sentTx).rejects.toThrow(TransactionBlockTimeoutError); + + await closeOpenConnection(web3.eth); + }, + ); + }); +}); diff --git a/packages/web3-eth/test/integration/eth.test.ts b/packages/web3-eth/test/integration/eth.test.ts new file mode 100644 index 00000000000..99a096b40aa --- /dev/null +++ b/packages/web3-eth/test/integration/eth.test.ts @@ -0,0 +1,99 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import WebSocketProvider from 'web3-providers-ws'; +import HttpProvider from 'web3-providers-http'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Contract } from 'web3-eth-contract'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { SupportedProviders } from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { IpcProvider } from 'web3-providers-ipc'; +import { Web3Eth } from '../../src'; + +import { + closeOpenConnection, + createTempAccount, + getSystemTestProvider, + isHttp, + isWs, +} from '../fixtures/system_test_utils'; +import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic'; + +describe('eth', () => { + let web3Eth: Web3Eth; + let clientUrl: string | SupportedProviders; + + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(() => { + clientUrl = getSystemTestProvider(); + web3Eth = new Web3Eth(clientUrl); + contract = new Contract(BasicAbi, { + provider: clientUrl, + }); + }); + beforeEach(async () => { + tempAcc = await createTempAccount(); + }); + afterAll(async () => { + await closeOpenConnection(web3Eth); + await closeOpenConnection(contract); + }); + + describe('methods', () => { + it('setProvider', async () => { + deployOptions = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + + sendOptions = { from: tempAcc.address, gas: '1000000' }; + + const deployedContract = await contract.deploy(deployOptions).send(sendOptions); + const { provider } = web3Eth; + web3Eth.setProvider(deployedContract.provider as SupportedProviders); + + expect(web3Eth.provider).toBe(deployedContract.provider); + web3Eth.setProvider(provider as SupportedProviders); + }); + it('providers', () => { + const res = web3Eth.providers; + + expect(res.HttpProvider).toBeDefined(); + expect(res.WebsocketProvider).toBeDefined(); + }); + it('currentProvider', () => { + const { currentProvider } = web3Eth; + let checkWithClass; + if (isWs) { + checkWithClass = WebSocketProvider; + } else if (isHttp) { + checkWithClass = HttpProvider; + } else { + checkWithClass = IpcProvider; + } + expect(currentProvider).toBeInstanceOf(checkWithClass); + }); + it('givenProvider', () => { + const { givenProvider } = web3Eth; + expect(givenProvider).toBeUndefined(); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/get_revert_reason.test.ts b/packages/web3-eth/test/integration/get_revert_reason.test.ts new file mode 100644 index 00000000000..9c7977c0fe4 --- /dev/null +++ b/packages/web3-eth/test/integration/get_revert_reason.test.ts @@ -0,0 +1,226 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable jest/no-conditional-expect */ + +import { Address, Transaction, TransactionCall } from 'web3-types'; + +import Web3Eth from '../../src'; +import { getRevertReason } from '../../src/utils/get_revert_reason'; +import { SimpleRevertAbi, SimpleRevertDeploymentData } from '../fixtures/simple_revert'; +import { + createTempAccount, + getSystemTestBackend, + getSystemTestProvider, +} from '../fixtures/system_test_utils'; + +describe('Web3Eth.getRevertReason', () => { + let tempAccount: { address: string; privateKey: string }; + let web3Eth: Web3Eth; + let simpleRevertContractAddress: Address; + + beforeAll(async () => { + tempAccount = await createTempAccount(); + web3Eth = new Web3Eth(getSystemTestProvider()); + + const simpleRevertDeployTransaction: Transaction = { + from: tempAccount.address, + data: SimpleRevertDeploymentData, + }; + simpleRevertDeployTransaction.gas = await web3Eth.estimateGas( + simpleRevertDeployTransaction, + ); + simpleRevertContractAddress = (await web3Eth.sendTransaction(simpleRevertDeployTransaction)) + .contractAddress as Address; + }); + + it('should return reason for a contract call', async () => { + const transaction: TransactionCall = { + from: tempAccount.address, + to: simpleRevertContractAddress, + data: '0xf38fb65b', + }; + + const response = await getRevertReason(web3Eth, transaction); + + switch (getSystemTestBackend()) { + case 'geth': + expect(response).toMatchObject({ + reason: 'execution reverted: This is a call revert', + signature: '0x08c379a0', + data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612063616c6c207265766572740000000000000000000000', + }); + break; + case 'ganache': + expect(response).toMatchObject({ + reason: 'VM Exception while processing transaction: revert This is a call revert', + signature: '0x08c379a0', + data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612063616c6c207265766572740000000000000000000000', + }); + break; + default: + throw new Error( + `Unable to finish test, unknown backend: ${getSystemTestBackend()}`, + ); + } + }); + + it('should return reason for a contract send', async () => { + const transaction: TransactionCall = { + from: tempAccount.address, + to: simpleRevertContractAddress, + data: '0xba57a511000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000067265766572740000000000000000000000000000000000000000000000000000', + }; + + const response = await getRevertReason(web3Eth, transaction); + + switch (getSystemTestBackend()) { + case 'geth': + expect(response).toMatchObject({ + reason: 'execution reverted: This is a send revert', + signature: '0x08c379a0', + data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612073656e64207265766572740000000000000000000000', + }); + break; + case 'ganache': + expect(response).toMatchObject({ + reason: 'VM Exception while processing transaction: revert This is a send revert', + signature: '0x08c379a0', + data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612073656e64207265766572740000000000000000000000', + }); + break; + default: + throw new Error( + `Unable to finish test, unknown backend: ${getSystemTestBackend()}`, + ); + } + }); + + it('should return out of gas reason', async () => { + const transaction: TransactionCall = { + from: tempAccount.address, + to: simpleRevertContractAddress, + gas: '0x0', + data: '0xba57a511000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000067265766572740000000000000000000000000000000000000000000000000000', + }; + + const response = await getRevertReason(web3Eth, transaction); + switch (getSystemTestBackend()) { + case 'geth': + expect(response).toBe( + 'err: intrinsic gas too low: have 0, want 21544 (supplied gas 0)', + ); + break; + case 'ganache': + expect(response).toBe('VM Exception while processing transaction: out of gas'); + break; + default: + throw new Error( + `Unable to finish test, unknown backend: ${getSystemTestBackend()}`, + ); + } + }); + + it('should revert with custom error with no params', async () => { + const transaction: TransactionCall = { + from: tempAccount.address, + to: simpleRevertContractAddress, + data: '0x3ebf4d9c', + }; + + const response = await getRevertReason(web3Eth, transaction, SimpleRevertAbi); + switch (getSystemTestBackend()) { + case 'geth': + expect(response).toMatchObject({ + data: '', + reason: 'execution reverted', + signature: '0x72090e4d', + customErrorName: 'ErrorWithNoParams', + customErrorDecodedSignature: 'ErrorWithNoParams()', + customErrorArguments: {}, + }); + break; + case 'ganache': + expect(response).toMatchObject({ + data: '', + reason: 'VM Exception while processing transaction: revert', + signature: '0x72090e4d', + customErrorName: 'ErrorWithNoParams', + customErrorDecodedSignature: 'ErrorWithNoParams()', + customErrorArguments: {}, + }); + break; + default: + throw new Error( + `Unable to finish test, unknown backend: ${getSystemTestBackend()}`, + ); + } + }); + + it('should revert with custom error with params', async () => { + const transaction: TransactionCall = { + from: tempAccount.address, + to: simpleRevertContractAddress, + data: '0x819f48fe', + }; + + const response = await getRevertReason(web3Eth, transaction, SimpleRevertAbi); + switch (getSystemTestBackend()) { + case 'geth': + expect(response).toMatchObject({ + data: '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + reason: 'execution reverted', + signature: '0xc85bda60', + customErrorName: 'ErrorWithParams', + customErrorDecodedSignature: 'ErrorWithParams(uint256,string)', + customErrorArguments: { + code: BigInt(42), + message: 'This is an error with params', + }, + }); + break; + case 'ganache': + expect(response).toMatchObject({ + data: '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + reason: 'VM Exception while processing transaction: revert', + signature: '0xc85bda60', + customErrorName: 'ErrorWithParams', + customErrorDecodedSignature: 'ErrorWithParams(uint256,string)', + customErrorArguments: { + code: BigInt(42), + message: 'This is an error with params', + }, + }); + break; + default: + throw new Error( + `Unable to finish test, unknown backend: ${getSystemTestBackend()}`, + ); + } + }); + + it("shouldn't return a revert reason", async () => { + const transaction: TransactionCall = { + from: tempAccount.address, + to: simpleRevertContractAddress, + data: '0xba57a51100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000', + }; + + const response = await getRevertReason(web3Eth, transaction); + expect(response).toBeUndefined(); + }); +}); diff --git a/packages/web3-eth/test/integration/helper.ts b/packages/web3-eth/test/integration/helper.ts new file mode 100644 index 00000000000..46063294702 --- /dev/null +++ b/packages/web3-eth/test/integration/helper.ts @@ -0,0 +1,142 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + AbiEventFragment, + Block, + TransactionInfo, + TransactionReceipt, + FMT_NUMBER, +} from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import Web3 from 'web3'; +import { BasicAbi } from '../shared_fixtures/build/Basic'; +import { + closeOpenConnection, + createAccount, + getSystemTestProvider, +} from '../fixtures/system_test_utils'; + +type SendFewTxParams = { + to?: string; + from: string; + value: string; + times?: number; + waitReceipt?: boolean; + gas?: string | number; +}; +export type Resolve = (value?: TransactionReceipt) => void; +export const sendFewTxes = async ({ + to, + value, + from, + times = 3, + gas, +}: SendFewTxParams): Promise => { + const res: TransactionReceipt[] = []; + const toAddress = to ?? createAccount().address; + const web3 = new Web3(getSystemTestProvider()); + for (let i = 0; i < times; i += 1) { + res.push( + // eslint-disable-next-line no-await-in-loop + await web3.eth.sendTransaction({ + to: toAddress, + value, + from, + gas: gas ?? '300000', + }), + ); + } + await closeOpenConnection(web3); + + return res; +}; + +const regexHex20 = /0[xX][0-9a-fA-F]{40}/i; +const regexHex32 = /0[xX][0-9a-fA-F]{64}/i; + +type ExpectOptions = { + type?: number; +}; +export const validateTransaction = ( + tx: TransactionInfo, + expectOptions: ExpectOptions = { type: 2 }, +) => { + expect(tx.nonce).toBeDefined(); + expect(tx.hash).toMatch(regexHex32); + expect(Number(tx.type)).toBe(expectOptions.type); + expect(tx.blockHash).toMatch(regexHex32); + expect(Number(tx.blockNumber)).toBeGreaterThan(0); + expect(tx.transactionIndex).toBeDefined(); + expect(tx.from).toMatch(regexHex20); + expect(tx.to).toMatch(regexHex20); + expect(Number(tx.value)).toBe(1); + expect(tx.input).toBe('0x'); + expect(tx.r).toBeDefined(); + expect(tx.s).toBeDefined(); + expect(Number(tx.gas)).toBeGreaterThan(0); +}; +export const validateBlock = (b: Block) => { + expect(b.nonce).toBeDefined(); + expect(Number(b.baseFeePerGas)).toBeGreaterThan(0); + expect(b.number).toBeDefined(); + expect(b.hash).toMatch(regexHex32); + expect(b.parentHash).toMatch(regexHex32); + expect(b.sha3Uncles).toMatch(regexHex32); + expect(b.transactionsRoot).toMatch(regexHex32); + expect(b.receiptsRoot).toMatch(regexHex32); + expect(b.logsBloom).toBeDefined(); + expect(b.miner).toMatch(regexHex20); + expect(b.difficulty).toBeDefined(); + expect(b.stateRoot).toMatch(regexHex32); + expect(b.gasLimit).toBeDefined(); + expect(b.gasUsed).toBeDefined(); + expect(b.timestamp).toBeDefined(); + expect(b.extraData).toBeDefined(); + expect(b.mixHash).toMatch(regexHex32); + expect(b.totalDifficulty).toBeDefined(); + expect(b.baseFeePerGas).toBeDefined(); + expect(b.size).toBeDefined(); + expect(Array.isArray(b.transactions)).toBe(true); + expect(Array.isArray(b.uncles)).toBe(true); +}; +export const validateReceipt = (r: TransactionReceipt) => { + expect(r.transactionHash).toMatch(regexHex32); + expect(r.transactionIndex).toBeDefined(); + expect(r.blockHash).toMatch(regexHex32); + expect(r.blockNumber).toBeDefined(); + expect(r.from).toMatch(regexHex20); + expect(r.to).toMatch(regexHex20); + expect(r.cumulativeGasUsed).toBeDefined(); + expect(r.gasUsed).toBeDefined(); + expect(r.effectiveGasPrice).toBeDefined(); + expect(r.logs).toBeDefined(); + expect(r.logsBloom).toBeDefined(); + expect(r.status).toBeDefined(); + expect(r.transactionHash).toMatch(regexHex32); + expect(Number(r.gasUsed)).toBeGreaterThan(0); +}; + +export const mapFormatToType: { [key: string]: string } = { + [FMT_NUMBER.NUMBER]: 'number', + [FMT_NUMBER.HEX]: 'string', + [FMT_NUMBER.STR]: 'string', + [FMT_NUMBER.BIGINT]: 'bigint', +}; +// eslint-disable-next-line @typescript-eslint/no-non-null-assertion +export const eventAbi: AbiEventFragment = BasicAbi.find((e: any) => { + return e.name === 'StringEvent' && (e as AbiEventFragment).type === 'event'; +})! as AbiEventFragment; diff --git a/packages/web3-eth/test/integration/jest.config.js b/packages/web3-eth/test/integration/jest.config.js new file mode 100644 index 00000000000..4e807a7b1fb --- /dev/null +++ b/packages/web3-eth/test/integration/jest.config.js @@ -0,0 +1,49 @@ +'use strict'; +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-eth/test/integration/nonce.test.ts b/packages/web3-eth/test/integration/nonce.test.ts new file mode 100644 index 00000000000..806db34985f --- /dev/null +++ b/packages/web3-eth/test/integration/nonce.test.ts @@ -0,0 +1,93 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { TransactionPollingTimeoutError, TransactionSendTimeoutError } from 'web3-errors'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { SupportedProviders, Web3 } from 'web3'; +import { Web3Account } from 'web3-eth-accounts'; +import { Web3Eth } from '../../src'; + +import { + closeOpenConnection, + createAccount, + createLocalAccount, + getSystemTestProvider, +} from '../fixtures/system_test_utils'; + +const gas = 30000; + +describe('defaults', () => { + let web3Eth: Web3Eth; + let clientUrl: string | SupportedProviders; + let tempAcc: Web3Account; + beforeEach(async () => { + clientUrl = getSystemTestProvider(); + const web3 = new Web3(clientUrl); + tempAcc = await createLocalAccount(web3); + web3Eth = web3.eth as unknown as Web3Eth; + }); + + afterEach(async () => { + await closeOpenConnection(web3Eth); + }); + + describe('defaults', () => { + it('should fail if Ethereum Node did not respond because of a high nonce', async () => { + // Make the test run faster by causing the timeout to happen after 0.2 second + web3Eth.transactionSendTimeout = 200; + web3Eth.transactionPollingTimeout = 200; + + const from = tempAcc.address; + const to = createAccount().address; + const value = `0x1`; + + try { + // Setting a high `nonce` when sending a transaction, to cause the RPC call to stuck at the Node + await web3Eth.sendTransaction({ + to, + value, + from, + gas, + // Give a high nonce so the transaction stuck forever. + // However, make this random to be able to run the test many times without receiving an error that indicate submitting the same transaction twice. + nonce: Number.MAX_SAFE_INTEGER, + }); + expect(true).toBe(false); // the test should fail if there is no exception + } catch (error) { + // Some providers would not respond to the RPC request when sending a transaction (like Ganache v7.4.0) + if (error instanceof TransactionSendTimeoutError) { + // eslint-disable-next-line jest/no-conditional-expect + expect(error.message).toContain( + `connected Ethereum Node did not respond within ${ + web3Eth.transactionSendTimeout / 1000 + } seconds`, + ); + } + // Some other providers would not respond when trying to get the transaction receipt (like Geth v1.10.22-unstable) + else if (error instanceof TransactionPollingTimeoutError) { + // eslint-disable-next-line jest/no-conditional-expect + expect(error.message).toContain( + `Transaction was not mined within ${ + web3Eth.transactionPollingTimeout / 1000 + } seconds`, + ); + } else { + throw error; + } + } + }); + }); +}); diff --git a/packages/web3-eth/test/integration/rpc.test.ts b/packages/web3-eth/test/integration/rpc.test.ts new file mode 100644 index 00000000000..7cc88dab2d7 --- /dev/null +++ b/packages/web3-eth/test/integration/rpc.test.ts @@ -0,0 +1,394 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + AbiEventFragment, + TransactionReceipt, + TransactionInfo, + SupportedProviders, + FMT_BYTES, + FMT_NUMBER, +} from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Contract, decodeEventABI } from 'web3-eth-contract'; +import { hexToNumber, hexToString, numberToHex, getStorageSlotNumForLongString } from 'web3-utils'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Web3Eth } from '../../src'; + +import { + closeOpenConnection, + getSystemTestBackend, + getSystemTestProvider, + createNewAccount, + itIf, + createTempAccount, +} from '../fixtures/system_test_utils'; +import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic'; +import { + eventAbi, + mapFormatToType, + sendFewTxes, + validateReceipt, + validateTransaction, +} from './helper'; + +describe('rpc', () => { + let web3Eth: Web3Eth; + let clientUrl: string | SupportedProviders; + let contractDeployed: Contract; + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + let tempAcc: { address: string; privateKey: string }; + let tempAcc2: { address: string; privateKey: string }; + beforeAll(async () => { + clientUrl = getSystemTestProvider(); + web3Eth = new Web3Eth({ + provider: clientUrl, + config: { + transactionPollingTimeout: 2000, + }, + }); + contract = new Contract(BasicAbi, undefined, { + provider: clientUrl, + }); + + deployOptions = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + tempAcc = await createTempAccount(); + tempAcc2 = await createTempAccount(); + sendOptions = { from: tempAcc.address, gas: '1000000' }; + + contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + }); + + afterAll(async () => { + await closeOpenConnection(web3Eth); + await closeOpenConnection(contract); + }); + + describe('methods', () => { + itIf(!['geth'].includes(getSystemTestBackend()))('getProtocolVersion', async () => { + const version = await web3Eth.getProtocolVersion(); + // eslint-disable-next-line jest/no-standalone-expect + expect(parseInt(version, 16)).toBeGreaterThan(0); + }); + + // TODO:in beta, test eth_syncing during sync mode with return obj having ( startingblock, currentBlock, heighestBlock ) + it('isSyncing', async () => { + const isSyncing = await web3Eth.isSyncing(); + expect(isSyncing).toBe(false); + }); + + // TODO: in future release, set coinbase account in node and match actual address here + it('getCoinbase', async () => { + const coinbase = await web3Eth.getCoinbase(); + expect(coinbase.startsWith('0x')).toBe(true); + expect(coinbase).toHaveLength(42); + }); + + it('isMining', async () => { + const isMining = await web3Eth.isMining(); + + if (getSystemTestBackend() !== 'geth') + // eslint-disable-next-line jest/no-conditional-expect + expect(isMining).toBe(true); + }); + + it.each(Object.values(FMT_NUMBER))('getHashRate', async format => { + const hashRate = await web3Eth.getHashRate({ + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + expect(typeof hashRate).toBe(mapFormatToType[format as string]); + }); + + it('getAccounts', async () => { + const account = await createNewAccount({ unlock: true }); + const accList = await web3Eth.getAccounts(); + const accListLowerCase = accList.map((add: string) => add.toLowerCase()); + expect(accListLowerCase).toContain(account.address.toLowerCase()); + }); + + it.each(Object.values(FMT_NUMBER))('getBlockNumber', async format => { + const res = await web3Eth.getBlockNumber({ + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + expect(typeof res).toBe(mapFormatToType[format as string]); + expect(parseInt(String(res), 16)).toBeGreaterThan(0); + }); + + it.each(Object.values(FMT_NUMBER))('getGasPrice', async format => { + const res = await web3Eth.getGasPrice({ + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + expect(typeof res).toBe(mapFormatToType[format as string]); + expect(parseInt(String(res), 16)).toBeGreaterThan(0); + }); + + it.each(Object.values(FMT_NUMBER))('getBalance', async format => { + const value = '0xa'; + const newAccount = await createNewAccount(); + await web3Eth.sendTransaction({ + to: newAccount.address, + value, + from: tempAcc.address, + }); + const res = await web3Eth.getBalance(newAccount.address, undefined, { + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + expect(typeof res).toBe(mapFormatToType[format as string]); + + expect(numberToHex(res)).toBe(value); + }); + + it('getStorageAt', async () => { + const numberData = 10; + const stringData = 'str'; + const boolData = true; + await contractDeployed.methods + ?.setValues(numberData, stringData, boolData) + .send(sendOptions); + const resNumber = await web3Eth.getStorageAt( + contractDeployed.options.address as string, + '0x0', + undefined, + ); + const resString = await web3Eth.getStorageAt( + contractDeployed.options.address as string, + '0x1', + undefined, + ); + const resBool = await web3Eth.getStorageAt( + contractDeployed.options.address as string, + '0x2', + undefined, + ); + + expect(Number(resNumber)).toBe(numberData); + + const rString = hexToString(resString.slice(0, resString.length / 2 + 1)) + .split('') + .filter(d => d !== '\x00') + .join(''); + + expect(rString).toHaveLength(stringData.length); + expect(rString).toEqual(stringData); + expect(Boolean(hexToNumber(resBool))).toBe(boolData); + + // long string data test + const stringDataLong = + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In in interdum nibh, in viverra diam. Morbi eleifend diam sed erat malesuada molestie. Donec ultricies, mi et porta viverra, est magna tempus lorem, sit amet tempus mauris sapien vitae lacus. Duis at est quis nisl dictum accumsan eget et libero. Phasellus semper nibh et varius accumsan. Cras fringilla egestas dui, vitae bibendum enim tincidunt id. Donec condimentum lacinia nulla, eget elementum tortor tristique vel. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut ac risus tellus. Etiam nec neque et erat efficitur laoreet. Maecenas fermentum feugiat diam, ut ultricies ipsum mollis at. In in velit turpis. Vestibulum urna ipsum, vestibulum ut cursus ut, ullamcorper quis est.'; + await contractDeployed.methods + ?.setValues(numberData, stringDataLong, boolData) + .send(sendOptions); + + const resStringLong = await web3Eth.getStorageAt( + contractDeployed.options.address as string, + 1, + undefined, + { + number: FMT_NUMBER.STR, + bytes: FMT_BYTES.HEX, + }, + ); + + const slotCount = Math.ceil((Number(hexToNumber(resStringLong)) - 1) / 64); + const slotDataNum = getStorageSlotNumForLongString(1); + const prs = []; + for (let i = 0; i < slotCount; i += 1) { + prs.push( + // eslint-disable-next-line no-await-in-loop + web3Eth.getStorageAt( + contractDeployed.options.address as string, + `0x${( + BigInt(String(hexToNumber(slotDataNum as string))) + BigInt(i) + ).toString(16)}`, + ), + ); + } + const str = (await Promise.all(prs)) + .map(t => hexToString(t)) + .join('') + .split('') + .filter(d => d !== '\x00') + .join(''); + expect(stringDataLong).toBe(str); + }); + + it.each(Object.values(FMT_NUMBER))('getCode', async format => { + const code = await web3Eth.getCode( + contractDeployed?.options?.address as string, + undefined, + { + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }, + ); + expect(code).toBeDefined(); + expect(BasicBytecode.slice(-100)).toBe(code.slice(-100)); + }); + + it('getTransaction', async () => { + const [receipt] = await sendFewTxes({ + from: tempAcc.address, + value: '0x1', + times: 1, + }); + + const res = await web3Eth.getTransaction(receipt.transactionHash); + // TODO: after alpha release add tests for matching following (first get nonce of account sending tx and validate nonce with tx is incremented) + // TODO: after alpha release add tests for matching following (from and to addresses) + // TODO: after alpha release add tests for matching following (value transferred) + // TODO: after alpha release add tests for matching following (specify some random inputData in tx and validate in test with getTransaction) + + validateTransaction(res as TransactionInfo); + expect(res?.hash).toBe(receipt.transactionHash); + }); + + itIf(getSystemTestBackend() !== 'ganache')('getPendingTransactions', async () => { + const tx = web3Eth.sendTransaction({ + to: tempAcc2.address, + value: '0x1', + from: tempAcc.address, + }); + + const res = await web3Eth.getPendingTransactions(); + await tx; + // TODO: validate pending tx fields match with submitted tx + // TODO: investigate why res always is empty array + // eslint-disable-next-line jest/no-standalone-expect + expect(res).toBeDefined(); + }); + + it('getTransactionReceipt', async () => { + const [receipt] = await sendFewTxes({ + from: tempAcc.address, + value: '0x1', + times: 1, + }); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const res: TransactionReceipt = (await web3Eth.getTransactionReceipt( + // TODO: add more scenarios in future release with block number + receipt.transactionHash as string, + ))!; + validateReceipt(res); + expect(res?.transactionHash).toBe(receipt.transactionHash); + }); + + it('getChainId', async () => { + const res = await web3Eth.getChainId({ + number: FMT_NUMBER.NUMBER, + bytes: FMT_BYTES.HEX, + }); + // TODO: in next release validate chain ID , it should match with chain id of connected client + expect(Number(res)).toBeGreaterThan(0); + }); + + it('getNodeInfo', async () => { + const res = await web3Eth.getNodeInfo(); + // TODO: in next release, it should also be validated + expect(res).toBeDefined(); + }); + + itIf(!['ganache', 'geth'].includes(getSystemTestBackend()))('getWork', async () => { + const res = await web3Eth.getWork(); + // eslint-disable-next-line jest/no-standalone-expect + expect(res[0]).toBeDefined(); + }); + + itIf(!['geth', 'ganache'].includes(getSystemTestBackend()))('requestAccounts', () => { + // const res = await web3Eth.requestAccounts(); + // eslint-disable-next-line jest/no-standalone-expect + expect(true).toBe(true); + // expect(res[0]).toEqual(tempAcc.address); + }); + + itIf(getSystemTestBackend() !== 'ganache')('getProof', async () => { + const numberData = BigInt(10); + const stringData = 'str'; + const boolData = true; + const sendRes = await contractDeployed.methods + .setValues(numberData, stringData, boolData) + .send(sendOptions); + await web3Eth.getStorageAt(contractDeployed.options.address as string, 0, undefined); + const res = await web3Eth.getProof( + contractDeployed.options.address as string, + ['0x0000000000000000000000000000000000000000000000000000000000000000'], + sendRes?.blockNumber, + ); + // eslint-disable-next-line jest/no-standalone-expect + expect(res.storageProof).toBeDefined(); + // eslint-disable-next-line jest/no-standalone-expect + expect(res.storageProof[0].value).toBe(numberData); + }); + + it('getPastLogs', async () => { + const listOfStrings = ['t1', 't2', 't3']; + const resTx = []; + for (const l of listOfStrings) { + // eslint-disable-next-line no-await-in-loop + resTx.push(await contractDeployed.methods?.firesStringEvent(l).send(sendOptions)); + } + + // test type hexstring + const res: Array = await web3Eth.getPastLogs({ + address: contractDeployed.options.address as string, + fromBlock: numberToHex(Math.min(...resTx.map(d => Number(d.blockNumber)))), + toBlock: numberToHex(1000), + }); + const results = res.map( + r => + decodeEventABI(eventAbi as AbiEventFragment & { signature: string }, r, []) + .returnValues[0], + ); + + // test type number + const res2: Array = await web3Eth.getPastLogs({ + address: contractDeployed.options.address as string, + fromBlock: Math.min(...resTx.map(d => Number(d.blockNumber))), + toBlock: 1000, + }); + const results2 = res2.map( + r => + decodeEventABI(eventAbi as AbiEventFragment & { signature: string }, r, []) + .returnValues[0], + ); + // test type BigInt + const res3: Array = await web3Eth.getPastLogs({ + address: contractDeployed.options.address as string, + fromBlock: BigInt(Math.min(...resTx.map(d => Number(d.blockNumber)))), + toBlock: BigInt(1000), + }); + const results3 = res3.map( + r => + decodeEventABI(eventAbi as AbiEventFragment & { signature: string }, r, []) + .returnValues[0], + ); + for (const l of listOfStrings) { + expect(results).toContain(l); + expect(results2).toContain(l); + expect(results3).toContain(l); + } + }); + }); +}); diff --git a/packages/web3-eth/test/integration/setup.js b/packages/web3-eth/test/integration/setup.js new file mode 100644 index 00000000000..19e711c511e --- /dev/null +++ b/packages/web3-eth/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = process.env.WEB3_SYSTEM_TEST_PROVIDER.includes('ipc') ? 60000 : 50000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-eth/test/integration/subscribe.test.ts b/packages/web3-eth/test/integration/subscribe.test.ts new file mode 100644 index 00000000000..9c6fc04b05b --- /dev/null +++ b/packages/web3-eth/test/integration/subscribe.test.ts @@ -0,0 +1,88 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import WebSocketProvider from 'web3-providers-ws'; +import { Web3BaseProvider } from 'web3-types'; +/* eslint-disable import/no-named-as-default */ +// eslint-disable-next-line import/no-extraneous-dependencies +import { IpcProvider } from 'web3-providers-ipc'; +import Web3Eth, { + LogsSubscription, + NewHeadsSubscription, + NewPendingTransactionsSubscription, + SyncingSubscription, +} from '../../src/index'; +import { + closeOpenConnection, + createTempAccount, + describeIf, + getSystemTestProviderUrl, + isSocket, + isWs, +} from '../fixtures/system_test_utils'; + +describeIf(isSocket)('subscribe', () => { + let web3Eth: Web3Eth; + let provider: WebSocketProvider | IpcProvider; + + beforeAll(() => { + provider = isWs + ? new WebSocketProvider(getSystemTestProviderUrl()) + : new IpcProvider(getSystemTestProviderUrl()); + }); + + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + afterEach(async () => { + await web3Eth.clearSubscriptions(); + }); + + describe('subscribe to', () => { + it('newHeads', async () => { + web3Eth = new Web3Eth(provider as Web3BaseProvider); + await web3Eth.subscribe('newHeads'); + const subs = web3Eth?.subscriptionManager?.subscriptions; + const inst = subs?.get(Array.from(subs.keys())[0]); + expect(inst).toBeInstanceOf(NewHeadsSubscription); + }); + it('syncing', async () => { + web3Eth = new Web3Eth(provider as Web3BaseProvider); + await web3Eth.subscribe('syncing'); + const subs = web3Eth?.subscriptionManager?.subscriptions; + const inst = subs?.get(Array.from(subs.keys())[0]); + expect(inst).toBeInstanceOf(SyncingSubscription); + }); + it('newPendingTransactions', async () => { + web3Eth = new Web3Eth(provider as Web3BaseProvider); + await web3Eth.subscribe('newPendingTransactions'); + const subs = web3Eth?.subscriptionManager?.subscriptions; + const inst = subs?.get(Array.from(subs.keys())[0]); + expect(inst).toBeInstanceOf(NewPendingTransactionsSubscription); + }); + it('logs', async () => { + const tempAcc = await createTempAccount(); + web3Eth = new Web3Eth(provider as Web3BaseProvider); + await web3Eth.subscribe('logs', { + address: tempAcc.address, + }); + const subs = web3Eth?.subscriptionManager?.subscriptions; + const inst = subs?.get(Array.from(subs.keys())[0]); + expect(inst).toBeInstanceOf(LogsSubscription); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/subscription_heads.test.ts b/packages/web3-eth/test/integration/subscription_heads.test.ts new file mode 100644 index 00000000000..c801e5e83ef --- /dev/null +++ b/packages/web3-eth/test/integration/subscription_heads.test.ts @@ -0,0 +1,111 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockHeaderOutput, SupportedProviders } from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Web3 } from 'web3'; +import { Web3Eth, NewHeadsSubscription } from '../../src'; +import { Resolve } from './helper'; +import { + closeOpenConnection, + describeIf, + getSystemTestProvider, + isSocket, + sendFewSampleTxs, + waitForOpenConnection, +} from '../fixtures/system_test_utils'; + +const checkTxCount = 2; +describeIf(isSocket)('subscription', () => { + let clientUrl: string | SupportedProviders; + let web3: Web3; + beforeEach(() => { + clientUrl = getSystemTestProvider(); + }); + describe('heads', () => { + it(`wait for ${checkTxCount} newHeads`, async () => { + web3 = new Web3(clientUrl); + const sub = await web3.eth.subscribe('newHeads'); + await waitForOpenConnection(web3.eth); + let times = 0; + const pr = new Promise((resolve: Resolve, reject) => { + sub.on('data', (data: BlockHeaderOutput) => { + try { + expect(typeof data.hash).toBe('string'); + expect(typeof data.parentHash).toBe('string'); + expect(typeof data.receiptsRoot).toBe('string'); + expect(typeof data.miner).toBe('string'); + expect(typeof data.stateRoot).toBe('string'); + expect(typeof data.transactionsRoot).toBe('string'); + expect(typeof data.logsBloom).toBe('string'); + expect(typeof data.difficulty).toBe('bigint'); + expect(typeof data.number).toBe('bigint'); + expect(typeof data.gasLimit).toBe('bigint'); + expect(typeof data.gasUsed).toBe('bigint'); + expect(typeof data.timestamp).toBe('bigint'); + expect(typeof data.extraData).toBe('string'); + expect(typeof data.nonce).toBe('bigint'); + expect(typeof data.sha3Uncles).toBe('string'); + expect(typeof data.baseFeePerGas).toBe('bigint'); + expect(typeof data.mixHash).toBe('string'); + } catch (error) { + reject(error); + } + + times += 1; + expect(times).toBeGreaterThanOrEqual(times); + if (times >= checkTxCount) { + resolve(); + } + }); + sub.on('error', error => { + reject(error); + }); + }); + // eslint-disable-next-line no-void + void sendFewSampleTxs(checkTxCount); + + await pr; + sub.off('data', () => { + // do nothing + }); + await web3.eth.subscriptionManager?.removeSubscription(sub); + await closeOpenConnection(web3.eth); + }); + it(`remove at subscriptionManager`, async () => { + const web3Eth = new Web3Eth(clientUrl); + await waitForOpenConnection(web3Eth); + const sub: NewHeadsSubscription = await web3Eth.subscribe('newHeads'); + expect(sub.id).toBeDefined(); + const subId = sub.id as string; + await web3Eth.subscriptionManager?.removeSubscription(sub); + expect(web3Eth.subscriptionManager.subscriptions.has(subId)).toBe(false); + expect(sub.id).toBeUndefined(); + await closeOpenConnection(web3Eth); + }); + it(`remove at subscribe object`, async () => { + const web3Eth = new Web3Eth(clientUrl); + await waitForOpenConnection(web3Eth); + const sub: NewHeadsSubscription = await web3Eth.subscribe('newHeads'); + expect(sub.id).toBeDefined(); + const subId = sub.id as string; + await sub.unsubscribe(); + expect(web3Eth.subscriptionManager.subscriptions.has(subId)).toBe(false); + expect(sub.id).toBeUndefined(); + await closeOpenConnection(web3Eth); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/subscription_logs.test.ts b/packages/web3-eth/test/integration/subscription_logs.test.ts new file mode 100644 index 00000000000..469f3bb88eb --- /dev/null +++ b/packages/web3-eth/test/integration/subscription_logs.test.ts @@ -0,0 +1,122 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import WebSocketProvider from 'web3-providers-ws'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Contract, decodeEventABI } from 'web3-eth-contract'; +import { AbiEventFragment, Web3BaseProvider } from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { IpcProvider } from 'web3-providers-ipc'; +import { Web3Eth } from '../../src'; +import { LogsSubscription } from '../../src/web3_subscriptions'; +import { + closeOpenConnection, + createTempAccount, + describeIf, + getSystemTestProviderUrl, + isSocket, + isWs, +} from '../fixtures/system_test_utils'; +import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic'; +import { eventAbi, Resolve } from './helper'; + +const checkEventCount = 2; + +type MakeFewTxToContract = { + sendOptions: Record; + contract: Contract; + testDataString: string; +}; +const makeFewTxToContract = async ({ + contract, + sendOptions, + testDataString, +}: MakeFewTxToContract): Promise => { + const prs = []; + for (let i = 0; i < checkEventCount; i += 1) { + // eslint-disable-next-line no-await-in-loop + prs.push(await contract.methods?.firesStringEvent(testDataString).send(sendOptions)); + } +}; +describeIf(isSocket)('subscription', () => { + let clientUrl: string; + let web3Eth: Web3Eth; + let provider: WebSocketProvider | IpcProvider; + let contract: Contract; + let contractDeployed: Contract; + let deployOptions: Record; + let sendOptions: Record; + const testDataString = 'someTestString'; + let tempAcc: { address: string; privateKey: string }; + + beforeEach(async () => { + tempAcc = await createTempAccount(); + clientUrl = getSystemTestProviderUrl(); + provider = isWs ? new WebSocketProvider(clientUrl) : new IpcProvider(clientUrl); + contract = new Contract(BasicAbi, undefined, { + provider, + }); + }); + afterEach(async () => { + provider.disconnect(); + await closeOpenConnection(web3Eth); + }); + + describe('logs', () => { + it(`wait for ${checkEventCount} logs`, async () => { + web3Eth = new Web3Eth(provider as Web3BaseProvider); + const from = tempAcc.address; + deployOptions = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + + sendOptions = { from, gas: '1000000' }; + contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + + const sub: LogsSubscription = await web3Eth.subscribe('logs', { + address: contractDeployed.options.address, + }); + + let count = 0; + + const pr = new Promise((resolve: Resolve, reject) => { + sub.on('data', (data: any) => { + count += 1; + const decodedData = decodeEventABI( + eventAbi as AbiEventFragment & { signature: string }, + data, + [], + ); + expect(decodedData.returnValues['0']).toBe(testDataString); + if (count >= checkEventCount) { + resolve(); + } + }); + sub.on('error', reject); + + makeFewTxToContract({ + contract: contractDeployed, + sendOptions, + testDataString, + }).catch(e => reject(e)); + }); + + await pr; + await web3Eth.clearSubscriptions(); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/subscription_logs_block.test.ts b/packages/web3-eth/test/integration/subscription_logs_block.test.ts new file mode 100644 index 00000000000..0509224d90e --- /dev/null +++ b/packages/web3-eth/test/integration/subscription_logs_block.test.ts @@ -0,0 +1,117 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import WebSocketProvider from 'web3-providers-ws'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Contract, decodeEventABI } from 'web3-eth-contract'; +import { AbiEventFragment, Web3BaseProvider } from 'web3-types'; +import { numberToHex } from 'web3-utils'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { IpcProvider } from 'web3-providers-ipc'; +import { Web3Eth } from '../../src'; +import { LogsSubscription } from '../../src/web3_subscriptions'; +import { + closeOpenConnection, + createTempAccount, + describeIf, + getSystemTestProviderUrl, + isSocket, + isWs, +} from '../fixtures/system_test_utils'; +import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic'; +import { eventAbi, Resolve } from './helper'; + +const checkEventCount = 2; + +type MakeFewTxToContract = { + sendOptions: Record; + contract: Contract; + testDataString: string; +}; +const makeFewTxToContract = async ({ + contract, + sendOptions, + testDataString, +}: MakeFewTxToContract): Promise => { + const prs = []; + for (let i = 0; i < checkEventCount; i += 1) { + // eslint-disable-next-line no-await-in-loop + prs.push(await contract.methods?.firesStringEvent(testDataString).send(sendOptions)); + } +}; +describeIf(isSocket)('subscription', () => { + let clientUrl: string; + let providerWs: WebSocketProvider | IpcProvider; + let contract: Contract; + const testDataString = 'someTestString'; + + beforeAll(() => { + clientUrl = getSystemTestProviderUrl(); + providerWs = isWs ? new WebSocketProvider(clientUrl) : new IpcProvider(clientUrl); + contract = new Contract(BasicAbi, undefined, { + provider: providerWs, + }); + }); + afterAll(async () => { + providerWs.disconnect(); + await closeOpenConnection(contract); + }); + + describe('logs', () => { + it(`wait for ${checkEventCount} logs with from block`, async () => { + const tempAcc = await createTempAccount(); + const from = tempAcc.address; + const deployOptions: Record = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + + const sendOptions = { from, gas: '1000000' }; + const contractDeployed = await contract.deploy(deployOptions).send(sendOptions); + const web3Eth = new Web3Eth(providerWs as Web3BaseProvider); + const fromBlock = await web3Eth.getTransactionCount( + String(contractDeployed.options.address), + ); + + await makeFewTxToContract({ contract: contractDeployed, sendOptions, testDataString }); + + const sub: LogsSubscription = await web3Eth.subscribe('logs', { + fromBlock: numberToHex(fromBlock), + address: contractDeployed.options.address, + }); + + let count = 0; + + const pr = new Promise((resolve: Resolve) => { + sub.on('data', (data: any) => { + count += 1; + const decodedData = decodeEventABI( + eventAbi as AbiEventFragment & { signature: string }, + data, + [], + ); + expect(decodedData.returnValues['0']).toBe(testDataString); + if (count >= checkEventCount) { + resolve(); + } + }); + }); + + await pr; + await web3Eth.clearSubscriptions(); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/subscription_logs_clear.test.ts b/packages/web3-eth/test/integration/subscription_logs_clear.test.ts new file mode 100644 index 00000000000..798d45c60d3 --- /dev/null +++ b/packages/web3-eth/test/integration/subscription_logs_clear.test.ts @@ -0,0 +1,43 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Eth } from '../../src'; +import { + closeOpenConnection, + describeIf, + getSystemTestProvider, + isSocket, +} from '../fixtures/system_test_utils'; +import { LogsSubscription } from '../../src/web3_subscriptions'; + +describeIf(isSocket)('subscription', () => { + let web3Eth: Web3Eth; + beforeAll(() => { + web3Eth = new Web3Eth(getSystemTestProvider()); + }); + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + describe('logs', () => { + it(`clear`, async () => { + const sub: LogsSubscription = await web3Eth.subscribe('logs'); + expect(sub.id).toBeDefined(); + await web3Eth.clearSubscriptions(); + expect(sub.id).toBeUndefined(); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/subscription_new_pending_tx.test.ts b/packages/web3-eth/test/integration/subscription_new_pending_tx.test.ts new file mode 100644 index 00000000000..86e20626d6f --- /dev/null +++ b/packages/web3-eth/test/integration/subscription_new_pending_tx.test.ts @@ -0,0 +1,104 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// eslint-disable-next-line import/no-extraneous-dependencies +import { Web3 } from 'web3'; +import { Web3Eth, NewPendingTransactionsSubscription } from '../../src'; +import { + closeOpenConnection, + describeIf, + getSystemTestProvider, + isSocket, + sendFewSampleTxs, + waitForOpenConnection, +} from '../fixtures/system_test_utils'; + +const checkTxCount = 2; +describeIf(isSocket)('subscription', () => { + describe('new pending transaction', () => { + it(`wait ${checkTxCount} transaction`, async () => { + const web3 = new Web3(getSystemTestProvider()); + const web3Eth = web3.eth; + await waitForOpenConnection(web3Eth); + const sub = await web3Eth.subscribe('pendingTransactions'); + + let times = 0; + const txHashes: string[] = []; + let receipts: string[] = []; + const pr = new Promise((resolve: (s?: string) => void) => { + // eslint-disable-next-line @typescript-eslint/no-floating-promises + (async () => { + let waitList: string[] = []; + sub.on('data', (data: string) => { + if (receipts.length > 0 && waitList.length > 0) { + for (const hash of waitList) { + if (receipts.includes(hash)) { + txHashes.push(hash); + times += 1; + } + } + waitList = []; + } + if (receipts.length > 0 && receipts.includes(data)) { + txHashes.push(data); + times += 1; + } else { + waitList.push(data); + } + + if (times >= checkTxCount) { + resolve(); + } + }); + receipts = (await sendFewSampleTxs(checkTxCount)).map(r => + String(r?.transactionHash), + ); + if (receipts.length > 0 && waitList.length > 0) { + for (const hash of waitList) { + if (receipts.includes(hash)) { + txHashes.push(hash); + times += 1; + } + } + waitList = []; + } + if (times >= checkTxCount) { + sub.off('data', () => { + // no need to do anything + }); + resolve(); + } + })(); + }); + await pr; + for (const hash of txHashes) { + expect(receipts).toContain(hash); + } + await closeOpenConnection(web3Eth); + }); + it(`clear`, async () => { + const web3Eth = new Web3Eth(getSystemTestProvider()); + await waitForOpenConnection(web3Eth); + const sub: NewPendingTransactionsSubscription = await web3Eth.subscribe( + 'pendingTransactions', + ); + expect(sub.id).toBeDefined(); + await web3Eth.subscriptionManager?.removeSubscription(sub); + expect(sub.id).toBeUndefined(); + await closeOpenConnection(web3Eth); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/subscription_on_2_events.test.ts b/packages/web3-eth/test/integration/subscription_on_2_events.test.ts new file mode 100644 index 00000000000..bfcfb99da92 --- /dev/null +++ b/packages/web3-eth/test/integration/subscription_on_2_events.test.ts @@ -0,0 +1,114 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// eslint-disable-next-line import/no-extraneous-dependencies +import { BlockHeaderOutput, Web3 } from 'web3'; +import { + closeOpenConnection, + describeIf, + getSystemTestProvider, + isSocket, + sendFewSampleTxs, + waitForOpenConnection, +} from '../fixtures/system_test_utils'; +import { Resolve } from './helper'; + +const checkTxCount = 2; +describeIf(isSocket)('subscription on multiple events', () => { + test(`catch the data of pendingTransactions and newHeads`, async () => { + const web3 = new Web3(getSystemTestProvider()); + const web3Eth = web3.eth; + await waitForOpenConnection(web3Eth); + const pendingTransactionsSub = await web3Eth.subscribe('pendingTransactions'); + + let pendingTransactionsCount = 0; + const pendingTransactionsData = new Promise((resolve: Resolve, reject) => { + (() => { + pendingTransactionsSub.on('data', (data: string) => { + expect(typeof data).toBe('string'); + + pendingTransactionsCount += 1; + if (pendingTransactionsCount >= checkTxCount) { + resolve(); + } + }); + pendingTransactionsSub.on('error', error => { + reject(error); + }); + })(); + }); + + const newHeadsSub = await web3.eth.subscribe('newHeads'); + let newHeadsCount = 0; + const newHeadsData = new Promise((resolve: Resolve, reject) => { + newHeadsSub.on('data', (data: BlockHeaderOutput) => { + expect(typeof data.parentHash).toBe('string'); + + newHeadsCount += 1; + if (newHeadsCount >= checkTxCount) { + resolve(); + } + }); + newHeadsSub.on('error', error => { + reject(error); + }); + }); + + await sendFewSampleTxs(2); + + await pendingTransactionsData; + await newHeadsData; + + await closeOpenConnection(web3Eth); + }); + + test(`catch the data of an event even after subscribing off another one`, async () => { + const web3 = new Web3(getSystemTestProvider()); + const web3Eth = web3.eth; + await waitForOpenConnection(web3Eth); + const pendingTransactionsSub = await web3Eth.subscribe('pendingTransactions'); + + // eslint-disable-next-line @typescript-eslint/no-empty-function + pendingTransactionsSub.on('data', () => {}); + pendingTransactionsSub.on('error', error => { + throw error; + }); + + const newHeadsSub = await web3.eth.subscribe('newHeads'); + let times = 0; + const newHeadsData = new Promise((resolve: Resolve, reject) => { + newHeadsSub.on('data', (data: BlockHeaderOutput) => { + expect(typeof data.parentHash).toBe('string'); + + times += 1; + if (times >= checkTxCount) { + resolve(); + } + }); + newHeadsSub.on('error', error => { + reject(error); + }); + }); + + await pendingTransactionsSub.unsubscribe(); + + await sendFewSampleTxs(2); + + await newHeadsData; + + await closeOpenConnection(web3Eth); + }); +}); diff --git a/packages/web3-eth/test/integration/unsubscribe.test.ts b/packages/web3-eth/test/integration/unsubscribe.test.ts new file mode 100644 index 00000000000..4c74e10eb25 --- /dev/null +++ b/packages/web3-eth/test/integration/unsubscribe.test.ts @@ -0,0 +1,77 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import WebSocketProvider from 'web3-providers-ws'; +import { Web3BaseProvider } from 'web3-types'; +/* eslint-disable import/no-extraneous-dependencies */ +import { IpcProvider } from 'web3-providers-ipc'; +import Web3Eth from '../../src/index'; +import { NewHeadsSubscription, SyncingSubscription } from '../../src/web3_subscriptions'; +import { + getSystemTestProviderUrl, + describeIf, + isWs, + isSocket, + closeOpenConnection, + waitForOpenConnection, +} from '../fixtures/system_test_utils'; + +describeIf(isSocket)('unsubscribe', () => { + let web3Eth: Web3Eth; + let provider: WebSocketProvider | IpcProvider; + beforeAll(() => { + provider = isWs + ? new WebSocketProvider(getSystemTestProviderUrl()) + : new IpcProvider(getSystemTestProviderUrl()); + }); + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + describe('unsubscribe from', () => { + it('should clearSubscriptions', async () => { + web3Eth = new Web3Eth(provider as Web3BaseProvider); + await web3Eth.subscribe('newHeads'); + const subs = web3Eth?.subscriptionManager?.subscriptions; + const inst = subs?.get(Array.from(subs.keys())[0]); + expect(inst).toBeInstanceOf(NewHeadsSubscription); + await waitForOpenConnection(web3Eth); + await web3Eth.clearSubscriptions(); + expect(web3Eth?.subscriptionManager?.subscriptions?.size).toBe(0); + }); + + it('subscribe to all and clear all except syncing', async () => { + web3Eth = new Web3Eth(provider as Web3BaseProvider); + await web3Eth.subscribe('newHeads'); + await web3Eth.subscribe('newPendingTransactions'); + await web3Eth.subscribe('syncing'); + await web3Eth.subscribe('logs', { + address: '0x8320fe7702b96808f7bbc0d4a888ed1468216cfd', + topics: ['0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902'], + }); + expect(web3Eth?.subscriptionManager?.subscriptions.size).toBe(4); + + await waitForOpenConnection(web3Eth); + + await web3Eth.clearSubscriptions(true); + + const subs = web3Eth?.subscriptionManager?.subscriptions; + const inst = subs?.get(Array.from(subs.keys())[0]); + expect(inst).toBeInstanceOf(SyncingSubscription); + expect(web3Eth?.subscriptionManager?.subscriptions.size).toBe(1); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/watch_transaction.test.ts b/packages/web3-eth/test/integration/watch_transaction.test.ts new file mode 100644 index 00000000000..4aa607c8fdd --- /dev/null +++ b/packages/web3-eth/test/integration/watch_transaction.test.ts @@ -0,0 +1,92 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { SupportedProviders, TransactionReceipt, DEFAULT_RETURN_FORMAT } from 'web3-types'; +import { Web3PromiEvent } from 'web3-core'; +import { Web3Account } from 'web3-eth-accounts'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Web3 } from 'web3'; +import { SendTransactionEvents } from '../../src'; +import { + getSystemTestProvider, + describeIf, + closeOpenConnection, + isSocket, + waitForOpenConnection, + createLocalAccount, + isIpc, + sendFewSampleTxs, + createAccount, +} from '../fixtures/system_test_utils'; + +const waitConfirmations = 2; +const gas = 30000; +type Resolve = (value?: unknown) => void; + +describeIf(isSocket)('watch subscription transaction', () => { + let web3: Web3; + let clientUrl: string | SupportedProviders; + let account1: Web3Account; + let account2: Web3Account; + beforeEach(async () => { + clientUrl = getSystemTestProvider(); + web3 = new Web3(clientUrl); + account1 = await createLocalAccount(web3); + account2 = createAccount(); + await waitForOpenConnection(web3.eth); + }); + describe('wait for confirmation subscription', () => { + it('subscription to heads', async () => { + web3.eth.setConfig({ transactionConfirmationBlocks: waitConfirmations }); + + const sentTx: Web3PromiEvent< + TransactionReceipt, + SendTransactionEvents + > = web3.eth.sendTransaction({ + from: account1.address, + to: account2.address, + value: '0x1', + gas, + }); + + const receiptPromise = new Promise((resolve: Resolve) => { + // Tx promise is handled separately + // eslint-disable-next-line no-void + void sentTx.on('receipt', (params: TransactionReceipt) => { + expect(params.status).toBe(BigInt(1)); + resolve(); + }); + }); + + let shouldBe = 1; + const confirmationPromise = new Promise((resolve: Resolve) => { + // Tx promise is handled separately + // eslint-disable-next-line no-void + void sentTx.on('confirmation', ({ confirmations }) => { + expect(Number(confirmations)).toBeGreaterThanOrEqual(shouldBe); + shouldBe += 1; + if (shouldBe >= waitConfirmations) { + resolve(); + } + }); + }); + await receiptPromise; + await sendFewSampleTxs(isIpc ? 2 * waitConfirmations : waitConfirmations); + await confirmationPromise; + await closeOpenConnection(web3.eth); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/watch_transaction_polling.test.ts b/packages/web3-eth/test/integration/watch_transaction_polling.test.ts new file mode 100644 index 00000000000..3677120e125 --- /dev/null +++ b/packages/web3-eth/test/integration/watch_transaction_polling.test.ts @@ -0,0 +1,98 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { DEFAULT_RETURN_FORMAT } from 'web3-types'; +import { Web3PromiEvent } from 'web3-core'; +import { SupportedProviders, TransactionReceipt } from 'web3-types'; +import { Web3Eth, SendTransactionEvents } from '../../src'; + +import { + closeOpenConnection, + createTempAccount, + describeIf, + getSystemTestProvider, + isHttp, +} from '../fixtures/system_test_utils'; + +const waitConfirmations = 3; + +type Resolve = (value?: unknown) => void; + +describeIf(isHttp)('watch polling transaction', () => { + let clientUrl: string | SupportedProviders; + let tempAcc: { address: string; privateKey: string }; + let tempAcc2: { address: string; privateKey: string }; + + beforeEach(async () => { + tempAcc = await createTempAccount(); + tempAcc2 = await createTempAccount(); + }); + beforeAll(() => { + clientUrl = getSystemTestProvider(); + }); + + describe('wait for confirmation polling', () => { + it('polling', async () => { + const web3Eth = new Web3Eth(clientUrl); + web3Eth.setConfig({ transactionConfirmationBlocks: waitConfirmations }); + + const from = tempAcc.address; + const to = tempAcc2.address; + const value = `0x1`; + + const sentTx: Web3PromiEvent< + TransactionReceipt, + SendTransactionEvents + > = web3Eth.sendTransaction({ + to, + value, + from, + }); + const confirmationPromise = new Promise((resolve: Resolve) => { + // Tx promise is handled separately + // eslint-disable-next-line no-void + void sentTx.on( + 'confirmation', + async ({ confirmations }: { confirmations: bigint }) => { + if (confirmations >= waitConfirmations) { + resolve(); + } else { + // Send a transaction to cause dev providers creating new blocks to fire the 'confirmation' event again. + await web3Eth.sendTransaction({ + to, + value, + from, + }); + } + }, + ); + }); + await new Promise((resolve: Resolve) => { + // Tx promise is handled separately + // eslint-disable-next-line no-void + void sentTx.on('receipt', (params: TransactionReceipt) => { + expect(params.status).toBe(BigInt(1)); + resolve(); + }); + }); + + await sentTx; + await confirmationPromise; + sentTx.removeAllListeners(); + await closeOpenConnection(web3Eth); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/web3_eth/call.test.ts b/packages/web3-eth/test/integration/web3_eth/call.test.ts new file mode 100644 index 00000000000..4f22a29876e --- /dev/null +++ b/packages/web3-eth/test/integration/web3_eth/call.test.ts @@ -0,0 +1,136 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { TransactionCall, BlockTags, Transaction } from 'web3-types'; +import { decodeParameters } from 'web3-eth-abi'; +import { Web3Eth } from '../../../src'; +import { + closeOpenConnection, + createTempAccount, + getSystemTestProvider, +} from '../../fixtures/system_test_utils'; + +describe('Web3Eth.call', () => { + const expectedEncodedGreet = + '0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017736f6c79656e7420677265656e2069732070656f706c65000000000000000000'; + const expectedDecodedGreet = 'solyent green is people'; + const greetCallData = '0xcfae3217'; + const greeterAbiFragment = { + inputs: [], + name: 'greet', + outputs: [ + { + name: '', + type: 'string', + }, + ], + stateMutability: 'view', + type: 'function', + }; + + let web3Eth: Web3Eth; + let greeterContractAddress: string; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(async () => { + web3Eth = new Web3Eth(getSystemTestProvider()); + const greeterContractDeploymentData = + '0x60806040523480156200001157600080fd5b5060405162000a6a38038062000a6a8339818101604052810190620000379190620002a4565b80600090805190602001906200004f92919062000057565b505062000359565b828054620000659062000324565b90600052602060002090601f016020900481019282620000895760008555620000d5565b82601f10620000a457805160ff1916838001178555620000d5565b82800160010185558215620000d5579182015b82811115620000d4578251825591602001919060010190620000b7565b5b509050620000e49190620000e8565b5090565b5b8082111562000103576000816000905550600101620000e9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001708262000125565b810181811067ffffffffffffffff8211171562000192576200019162000136565b5b80604052505050565b6000620001a762000107565b9050620001b5828262000165565b919050565b600067ffffffffffffffff821115620001d857620001d762000136565b5b620001e38262000125565b9050602081019050919050565b60005b8381101562000210578082015181840152602081019050620001f3565b8381111562000220576000848401525b50505050565b60006200023d6200023784620001ba565b6200019b565b9050828152602081018484840111156200025c576200025b62000120565b5b62000269848285620001f0565b509392505050565b600082601f8301126200028957620002886200011b565b5b81516200029b84826020860162000226565b91505092915050565b600060208284031215620002bd57620002bc62000111565b5b600082015167ffffffffffffffff811115620002de57620002dd62000116565b5b620002ec8482850162000271565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033d57607f821691505b602082108103620003535762000352620002f5565b5b50919050565b61070180620003696000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a41368621461003b578063cfae32171461006c575b600080fd5b6100556004803603810190610050919061043f565b61008a565b60405161006392919061052b565b60405180910390f35b6100746101b0565b604051610081919061055b565b60405180910390f35b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756000846040516100c0929190610672565b60405180910390a182600090805190602001906100de929190610242565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600060405161010f91906106a9565b60405180910390a160016000808054610127906105ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610153906105ac565b80156101a05780601f10610175576101008083540402835291602001916101a0565b820191906000526020600020905b81548152906001019060200180831161018357829003601f168201915b5050505050905091509150915091565b6060600080546101bf906105ac565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb906105ac565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b5050505050905090565b82805461024e906105ac565b90600052602060002090601f01602090048101928261027057600085556102b7565b82601f1061028957805160ff19168380011785556102b7565b828001600101855582156102b7579182015b828111156102b657825182559160200191906001019061029b565b5b5090506102c491906102c8565b5090565b5b808211156102e15760008160009055506001016102c9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61034c82610303565b810181811067ffffffffffffffff8211171561036b5761036a610314565b5b80604052505050565b600061037e6102e5565b905061038a8282610343565b919050565b600067ffffffffffffffff8211156103aa576103a9610314565b5b6103b382610303565b9050602081019050919050565b82818337600083830152505050565b60006103e26103dd8461038f565b610374565b9050828152602081018484840111156103fe576103fd6102fe565b5b6104098482856103c0565b509392505050565b600082601f830112610426576104256102f9565b5b81356104368482602086016103cf565b91505092915050565b600060208284031215610455576104546102ef565b5b600082013567ffffffffffffffff811115610473576104726102f4565b5b61047f84828501610411565b91505092915050565b60008115159050919050565b61049d81610488565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104dd5780820151818401526020810190506104c2565b838111156104ec576000848401525b50505050565b60006104fd826104a3565b61050781856104ae565b93506105178185602086016104bf565b61052081610303565b840191505092915050565b60006040820190506105406000830185610494565b818103602083015261055281846104f2565b90509392505050565b6000602082019050818103600083015261057581846104f2565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806105c457607f821691505b6020821081036105d7576105d661057d565b5b50919050565b60008190508160005260206000209050919050565b600081546105ff816105ac565b61060981866104ae565b94506001821660008114610624576001811461063657610669565b60ff1983168652602086019350610669565b61063f856105dd565b60005b8381101561066157815481890152600182019150602081019050610642565b808801955050505b50505092915050565b6000604082019050818103600083015261068c81856105f2565b905081810360208301526106a081846104f2565b90509392505050565b600060208201905081810360008301526106c381846105f2565b90509291505056fea2646970667358221220fe0f28c9f8ef0a13a95934b974e7bc2ca6762b40a5b93ccd6ca2038f454bf52764736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017736f6c79656e7420677265656e2069732070656f706c65000000000000000000'; + tempAcc = await createTempAccount(); + const transaction: Transaction = { + from: tempAcc.address, + data: greeterContractDeploymentData, + gas: '0x742b8', + }; + const response = await web3Eth.sendTransaction(transaction); + greeterContractAddress = response.contractAddress as string; + }); + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + it('should make a call to deployed Greeter contract', async () => { + const transaction: TransactionCall = { + from: tempAcc.address, + to: greeterContractAddress, + data: greetCallData, + }; + const response = await web3Eth.call(transaction); + expect(response).toBe(expectedEncodedGreet); + const decodedResult = decodeParameters([...greeterAbiFragment.outputs], response)[0]; + expect(decodedResult).toBe(expectedDecodedGreet); + }); + + describe('blockNumber parameter', () => { + it('should return no data (0x) for call to deployed Greeter contract with blockNumber = EARLIEST', async () => { + const transaction: TransactionCall = { + from: tempAcc.address, + to: greeterContractAddress, + data: greetCallData, + }; + const response = await web3Eth.call(transaction, BlockTags.EARLIEST); + expect(response).toBe('0x'); + }); + + it('should return expectedDecodedGreet for call to deployed Greeter contract with blockNumber = LATEST', async () => { + const transaction: TransactionCall = { + from: tempAcc.address, + to: greeterContractAddress, + data: greetCallData, + }; + const response = await web3Eth.call(transaction, BlockTags.LATEST); + expect(response).toBe(expectedEncodedGreet); + const decodedResult = decodeParameters([...greeterAbiFragment.outputs], response)[0]; + expect(decodedResult).toBe(expectedDecodedGreet); + }); + + // TODO - Not sure if there is a better way to test PENDING BlockTag, + // but interacting with a contract that hasn't been mined yet doesn't make sense + it('should return expectedDecodedGreet for call to deployed Greeter contract with blockNumber = PENDING', async () => { + const transaction: TransactionCall = { + from: tempAcc.address, + to: greeterContractAddress, + data: greetCallData, + }; + const response = await web3Eth.call(transaction, BlockTags.PENDING); + expect(response).toBe(expectedEncodedGreet); + const decodedResult = decodeParameters([...greeterAbiFragment.outputs], response)[0]; + expect(decodedResult).toBe(expectedDecodedGreet); + }); + + it('should return no data (0x) for call to deployed Greeter contract with blockNumber = 0x0', async () => { + const transaction: TransactionCall = { + from: tempAcc.address, + to: greeterContractAddress, + data: greetCallData, + }; + const response = await web3Eth.call(transaction, '0x0'); + expect(response).toBe('0x'); + }); + + it('should return no data (0x) for call to deployed Greeter contract with web3Context.defaultBlock = EARLIEST', async () => { + web3Eth.defaultBlock = BlockTags.EARLIEST; + + const transaction: TransactionCall = { + from: tempAcc.address, + to: greeterContractAddress, + data: greetCallData, + }; + const response = await web3Eth.call(transaction); + expect(response).toBe('0x'); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/web3_eth/createAccessList.test.ts b/packages/web3-eth/test/integration/web3_eth/createAccessList.test.ts new file mode 100644 index 00000000000..ae8ecc64f50 --- /dev/null +++ b/packages/web3-eth/test/integration/web3_eth/createAccessList.test.ts @@ -0,0 +1,73 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AccessListResult, Transaction, TransactionForAccessList } from 'web3-types'; +import { Web3Eth } from '../../../src'; +import { + closeOpenConnection, + createTempAccount, + describeIf, + getSystemTestBackend, + getSystemTestProvider, +} from '../../fixtures/system_test_utils'; + +describeIf(getSystemTestBackend() === 'geth')('Web3Eth.createAccessList', () => { + let web3Eth: Web3Eth; + let greeterContractAddress: string; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(async () => { + web3Eth = new Web3Eth(getSystemTestProvider()); + const greeterContractDeploymentData = + '0x60806040523480156200001157600080fd5b5060405162000a6a38038062000a6a8339818101604052810190620000379190620002a4565b80600090805190602001906200004f92919062000057565b505062000359565b828054620000659062000324565b90600052602060002090601f016020900481019282620000895760008555620000d5565b82601f10620000a457805160ff1916838001178555620000d5565b82800160010185558215620000d5579182015b82811115620000d4578251825591602001919060010190620000b7565b5b509050620000e49190620000e8565b5090565b5b8082111562000103576000816000905550600101620000e9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001708262000125565b810181811067ffffffffffffffff8211171562000192576200019162000136565b5b80604052505050565b6000620001a762000107565b9050620001b5828262000165565b919050565b600067ffffffffffffffff821115620001d857620001d762000136565b5b620001e38262000125565b9050602081019050919050565b60005b8381101562000210578082015181840152602081019050620001f3565b8381111562000220576000848401525b50505050565b60006200023d6200023784620001ba565b6200019b565b9050828152602081018484840111156200025c576200025b62000120565b5b62000269848285620001f0565b509392505050565b600082601f8301126200028957620002886200011b565b5b81516200029b84826020860162000226565b91505092915050565b600060208284031215620002bd57620002bc62000111565b5b600082015167ffffffffffffffff811115620002de57620002dd62000116565b5b620002ec8482850162000271565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033d57607f821691505b602082108103620003535762000352620002f5565b5b50919050565b61070180620003696000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a41368621461003b578063cfae32171461006c575b600080fd5b6100556004803603810190610050919061043f565b61008a565b60405161006392919061052b565b60405180910390f35b6100746101b0565b604051610081919061055b565b60405180910390f35b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756000846040516100c0929190610672565b60405180910390a182600090805190602001906100de929190610242565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600060405161010f91906106a9565b60405180910390a160016000808054610127906105ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610153906105ac565b80156101a05780601f10610175576101008083540402835291602001916101a0565b820191906000526020600020905b81548152906001019060200180831161018357829003601f168201915b5050505050905091509150915091565b6060600080546101bf906105ac565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb906105ac565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b5050505050905090565b82805461024e906105ac565b90600052602060002090601f01602090048101928261027057600085556102b7565b82601f1061028957805160ff19168380011785556102b7565b828001600101855582156102b7579182015b828111156102b657825182559160200191906001019061029b565b5b5090506102c491906102c8565b5090565b5b808211156102e15760008160009055506001016102c9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61034c82610303565b810181811067ffffffffffffffff8211171561036b5761036a610314565b5b80604052505050565b600061037e6102e5565b905061038a8282610343565b919050565b600067ffffffffffffffff8211156103aa576103a9610314565b5b6103b382610303565b9050602081019050919050565b82818337600083830152505050565b60006103e26103dd8461038f565b610374565b9050828152602081018484840111156103fe576103fd6102fe565b5b6104098482856103c0565b509392505050565b600082601f830112610426576104256102f9565b5b81356104368482602086016103cf565b91505092915050565b600060208284031215610455576104546102ef565b5b600082013567ffffffffffffffff811115610473576104726102f4565b5b61047f84828501610411565b91505092915050565b60008115159050919050565b61049d81610488565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104dd5780820151818401526020810190506104c2565b838111156104ec576000848401525b50505050565b60006104fd826104a3565b61050781856104ae565b93506105178185602086016104bf565b61052081610303565b840191505092915050565b60006040820190506105406000830185610494565b818103602083015261055281846104f2565b90509392505050565b6000602082019050818103600083015261057581846104f2565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806105c457607f821691505b6020821081036105d7576105d661057d565b5b50919050565b60008190508160005260206000209050919050565b600081546105ff816105ac565b61060981866104ae565b94506001821660008114610624576001811461063657610669565b60ff1983168652602086019350610669565b61063f856105dd565b60005b8381101561066157815481890152600182019150602081019050610642565b808801955050505b50505092915050565b6000604082019050818103600083015261068c81856105f2565b905081810360208301526106a081846104f2565b90509392505050565b600060208201905081810360008301526106c381846105f2565b90509291505056fea2646970667358221220fe0f28c9f8ef0a13a95934b974e7bc2ca6762b40a5b93ccd6ca2038f454bf52764736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017736f6c79656e7420677265656e2069732070656f706c65000000000000000000'; + tempAcc = await createTempAccount(); + const transaction: Transaction = { + from: tempAcc.address, + data: greeterContractDeploymentData, + gas: '0x744A0', + }; + const response = await web3Eth.sendTransaction(transaction); + greeterContractAddress = response.contractAddress as string; + }); + + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + test('should return access list for provided transaction', async () => { + const transaction: TransactionForAccessList = { + from: tempAcc.address, + to: greeterContractAddress, + data: '0xcfae3217', // greet function call data encoded + }; + + const response = await web3Eth.createAccessList(transaction); + + const expectedResponse: AccessListResult = { + accessList: [ + { + address: greeterContractAddress, + storageKeys: [ + '0x0000000000000000000000000000000000000000000000000000000000000000', + ], + }, + ], + gasUsed: '0x68c5', + }; + + expect(response).toStrictEqual(expectedResponse); + }); +}); diff --git a/packages/web3-eth/test/integration/web3_eth/estimate_gas.test.ts b/packages/web3-eth/test/integration/web3_eth/estimate_gas.test.ts new file mode 100644 index 00000000000..6e2b8fd67c7 --- /dev/null +++ b/packages/web3-eth/test/integration/web3_eth/estimate_gas.test.ts @@ -0,0 +1,61 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Transaction } from 'web3-types'; +import { Web3Eth } from '../../../src'; +import { + closeOpenConnection, + createTempAccount, + getSystemTestProvider, +} from '../../fixtures/system_test_utils'; + +describe('Web3Eth.estimateGas', () => { + let web3Eth: Web3Eth; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(async () => { + web3Eth = new Web3Eth(getSystemTestProvider()); + tempAcc = await createTempAccount(); + }); + + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + it('should estimate a simple value transfer', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: '0x1', + }; + const response = await web3Eth.estimateGas(transaction); + expect(response).toBe(BigInt(21000)); + }); + + it('should estimate a contract deployment', async () => { + const greeterContractDeploymentData = + '0x60806040523480156200001157600080fd5b5060405162000a6a38038062000a6a8339818101604052810190620000379190620002a4565b80600090805190602001906200004f92919062000057565b505062000359565b828054620000659062000324565b90600052602060002090601f016020900481019282620000895760008555620000d5565b82601f10620000a457805160ff1916838001178555620000d5565b82800160010185558215620000d5579182015b82811115620000d4578251825591602001919060010190620000b7565b5b509050620000e49190620000e8565b5090565b5b8082111562000103576000816000905550600101620000e9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001708262000125565b810181811067ffffffffffffffff8211171562000192576200019162000136565b5b80604052505050565b6000620001a762000107565b9050620001b5828262000165565b919050565b600067ffffffffffffffff821115620001d857620001d762000136565b5b620001e38262000125565b9050602081019050919050565b60005b8381101562000210578082015181840152602081019050620001f3565b8381111562000220576000848401525b50505050565b60006200023d6200023784620001ba565b6200019b565b9050828152602081018484840111156200025c576200025b62000120565b5b62000269848285620001f0565b509392505050565b600082601f8301126200028957620002886200011b565b5b81516200029b84826020860162000226565b91505092915050565b600060208284031215620002bd57620002bc62000111565b5b600082015167ffffffffffffffff811115620002de57620002dd62000116565b5b620002ec8482850162000271565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033d57607f821691505b602082108103620003535762000352620002f5565b5b50919050565b61070180620003696000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a41368621461003b578063cfae32171461006c575b600080fd5b6100556004803603810190610050919061043f565b61008a565b60405161006392919061052b565b60405180910390f35b6100746101b0565b604051610081919061055b565b60405180910390f35b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756000846040516100c0929190610672565b60405180910390a182600090805190602001906100de929190610242565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600060405161010f91906106a9565b60405180910390a160016000808054610127906105ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610153906105ac565b80156101a05780601f10610175576101008083540402835291602001916101a0565b820191906000526020600020905b81548152906001019060200180831161018357829003601f168201915b5050505050905091509150915091565b6060600080546101bf906105ac565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb906105ac565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b5050505050905090565b82805461024e906105ac565b90600052602060002090601f01602090048101928261027057600085556102b7565b82601f1061028957805160ff19168380011785556102b7565b828001600101855582156102b7579182015b828111156102b657825182559160200191906001019061029b565b5b5090506102c491906102c8565b5090565b5b808211156102e15760008160009055506001016102c9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61034c82610303565b810181811067ffffffffffffffff8211171561036b5761036a610314565b5b80604052505050565b600061037e6102e5565b905061038a8282610343565b919050565b600067ffffffffffffffff8211156103aa576103a9610314565b5b6103b382610303565b9050602081019050919050565b82818337600083830152505050565b60006103e26103dd8461038f565b610374565b9050828152602081018484840111156103fe576103fd6102fe565b5b6104098482856103c0565b509392505050565b600082601f830112610426576104256102f9565b5b81356104368482602086016103cf565b91505092915050565b600060208284031215610455576104546102ef565b5b600082013567ffffffffffffffff811115610473576104726102f4565b5b61047f84828501610411565b91505092915050565b60008115159050919050565b61049d81610488565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104dd5780820151818401526020810190506104c2565b838111156104ec576000848401525b50505050565b60006104fd826104a3565b61050781856104ae565b93506105178185602086016104bf565b61052081610303565b840191505092915050565b60006040820190506105406000830185610494565b818103602083015261055281846104f2565b90509392505050565b6000602082019050818103600083015261057581846104f2565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806105c457607f821691505b6020821081036105d7576105d661057d565b5b50919050565b60008190508160005260206000209050919050565b600081546105ff816105ac565b61060981866104ae565b94506001821660008114610624576001811461063657610669565b60ff1983168652602086019350610669565b61063f856105dd565b60005b8381101561066157815481890152600182019150602081019050610642565b808801955050505b50505092915050565b6000604082019050818103600083015261068c81856105f2565b905081810360208301526106a081846104f2565b90509392505050565b600060208201905081810360008301526106c381846105f2565b90509291505056fea2646970667358221220fe0f28c9f8ef0a13a95934b974e7bc2ca6762b40a5b93ccd6ca2038f454bf52764736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017736f6c79656e7420677265656e2069732070656f706c65000000000000000000'; + const transaction: Transaction = { + from: tempAcc.address, + data: greeterContractDeploymentData, + gas: '0x742b8', + }; + const response = await web3Eth.estimateGas(transaction); + + expect(response).toBe(BigInt(475494)); + }); +}); diff --git a/packages/web3-eth/test/integration/web3_eth/getFeeHistory.test.ts b/packages/web3-eth/test/integration/web3_eth/getFeeHistory.test.ts new file mode 100644 index 00000000000..c33eab71452 --- /dev/null +++ b/packages/web3-eth/test/integration/web3_eth/getFeeHistory.test.ts @@ -0,0 +1,58 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, Numbers, SupportedProviders } from 'web3-types'; + +import Web3Eth from '../../../src'; +import { + getSystemTestProvider, + describeIf, + getSystemTestBackend, + closeOpenConnection, +} from '../../fixtures/system_test_utils'; +import { feeHistorySchema } from '../../../src/schemas'; + +describeIf(getSystemTestBackend().includes('geth'))('Web3Eth.getFeeHistory', () => { + let web3Eth: Web3Eth; + let systemProvider: string | SupportedProviders; + + beforeAll(() => { + systemProvider = getSystemTestProvider(); + web3Eth = new Web3Eth(systemProvider); + }); + + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + test('should return fee history with right data', async () => { + const blockCount: Numbers = '0x1'; + const newestBlock: BlockNumberOrTag = 'latest'; + const rewardPercentiles: number[] = []; + + const functionResponse = await web3Eth.getFeeHistory( + blockCount, + newestBlock, + rewardPercentiles, + ); + + const functionResponseKeys = Object.keys(functionResponse); + + const schemaProperties = Object.keys(feeHistorySchema.properties); + + functionResponseKeys.forEach(prop => expect(schemaProperties).toContain(prop)); + }); +}); diff --git a/packages/web3-eth/test/integration/web3_eth/send_signed_transaction.test.ts b/packages/web3-eth/test/integration/web3_eth/send_signed_transaction.test.ts new file mode 100644 index 00000000000..550e59f9bc8 --- /dev/null +++ b/packages/web3-eth/test/integration/web3_eth/send_signed_transaction.test.ts @@ -0,0 +1,552 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// TODO Seems to be an issue with linter falsely reporting this +// error for Transaction Error Scenarios tests +/* eslint-disable jest/no-conditional-expect */ + +import { + Address, + Bytes, + SignedTransactionInfoAPI, + Transaction, + FMT_BYTES, + FMT_NUMBER, + DEFAULT_RETURN_FORMAT, +} from 'web3-types'; +import { format, hexToNumber } from 'web3-utils'; +import { isHexStrict } from 'web3-validator'; +import { Web3Eth, InternalTransaction, transactionSchema } from '../../../src'; +import { + closeOpenConnection, + createTempAccount, + getSystemTestBackend, + getSystemTestProvider, +} from '../../fixtures/system_test_utils'; +import { getTransactionGasPricing } from '../../../src/utils/get_transaction_gas_pricing'; +import { SimpleRevertAbi, SimpleRevertDeploymentData } from '../../fixtures/simple_revert'; + +const HEX_NUMBER_DATA_FORMAT = { bytes: FMT_BYTES.HEX, number: FMT_NUMBER.HEX } as const; + +describe('Web3Eth.sendSignedTransaction', () => { + let web3Eth: Web3Eth; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(async () => { + web3Eth = new Web3Eth(getSystemTestProvider()); + tempAcc = await createTempAccount(); + }); + + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + describe('Transaction Types', () => { + it('should send a signed simple value transfer - type 0x0', async () => { + const temp = await createTempAccount(); + const accountNonce = await web3Eth.getTransactionCount( + temp.address, + undefined, + HEX_NUMBER_DATA_FORMAT, + ); + const transaction: InternalTransaction = { + nonce: accountNonce, + from: temp.address, + to: '0x0000000000000000000000000000000000000000', + value: '0x1', + type: '0x0', + gas: '0x5208', + }; + const gasPricing = await getTransactionGasPricing( + transaction, + web3Eth, + DEFAULT_RETURN_FORMAT, + ); + const signedTransaction = await web3Eth.signTransaction({ + ...transaction, + ...gasPricing, + }); + const response = await web3Eth.sendSignedTransaction(signedTransaction.raw); + expect(response.status).toBe(BigInt(1)); + + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject( + format(transactionSchema, transaction, DEFAULT_RETURN_FORMAT), + ); + }); + + it('should send a signed simple value transfer - type 0x1', async () => { + const temp = await createTempAccount(); + const accountNonce = await web3Eth.getTransactionCount( + temp.address, + undefined, + HEX_NUMBER_DATA_FORMAT, + ); + const transaction: InternalTransaction = { + nonce: accountNonce, + from: temp.address, + to: '0x0000000000000000000000000000000000000000', + value: '0x1', + type: '0x1', + gas: '0x5208', + accessList: [], + }; + const gasPricing = await getTransactionGasPricing( + transaction, + web3Eth, + DEFAULT_RETURN_FORMAT, + ); + const signedTransaction = await web3Eth.signTransaction({ + ...transaction, + ...gasPricing, + }); + const response = await web3Eth.sendSignedTransaction(signedTransaction.raw); + expect(response.status).toBe(BigInt(1)); + + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject( + format(transactionSchema, transaction, DEFAULT_RETURN_FORMAT), + ); + }); + + it('should send a signed simple value transfer - type 0x2', async () => { + const temp = await createTempAccount(); + const accountNonce = await web3Eth.getTransactionCount( + temp.address, + undefined, + HEX_NUMBER_DATA_FORMAT, + ); + const transaction: InternalTransaction = { + nonce: accountNonce, + from: temp.address, + to: '0x0000000000000000000000000000000000000000', + value: '0x1', + type: '0x2', + gas: '0x5208', + }; + const gasPricing = await getTransactionGasPricing( + transaction, + web3Eth, + DEFAULT_RETURN_FORMAT, + ); + const signedTransaction = await web3Eth.signTransaction({ + ...transaction, + ...gasPricing, + }); + const response = await web3Eth.sendSignedTransaction(signedTransaction.raw); + expect(response.status).toBe(BigInt(1)); + + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject( + format(transactionSchema, transaction, DEFAULT_RETURN_FORMAT), + ); + }); + }); + + it('should send a signed contract deployment', async () => { + const greeterContractDeploymentData = + '0x60806040523480156200001157600080fd5b5060405162000a6a38038062000a6a8339818101604052810190620000379190620002a4565b80600090805190602001906200004f92919062000057565b505062000359565b828054620000659062000324565b90600052602060002090601f016020900481019282620000895760008555620000d5565b82601f10620000a457805160ff1916838001178555620000d5565b82800160010185558215620000d5579182015b82811115620000d4578251825591602001919060010190620000b7565b5b509050620000e49190620000e8565b5090565b5b8082111562000103576000816000905550600101620000e9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001708262000125565b810181811067ffffffffffffffff8211171562000192576200019162000136565b5b80604052505050565b6000620001a762000107565b9050620001b5828262000165565b919050565b600067ffffffffffffffff821115620001d857620001d762000136565b5b620001e38262000125565b9050602081019050919050565b60005b8381101562000210578082015181840152602081019050620001f3565b8381111562000220576000848401525b50505050565b60006200023d6200023784620001ba565b6200019b565b9050828152602081018484840111156200025c576200025b62000120565b5b62000269848285620001f0565b509392505050565b600082601f8301126200028957620002886200011b565b5b81516200029b84826020860162000226565b91505092915050565b600060208284031215620002bd57620002bc62000111565b5b600082015167ffffffffffffffff811115620002de57620002dd62000116565b5b620002ec8482850162000271565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033d57607f821691505b602082108103620003535762000352620002f5565b5b50919050565b61070180620003696000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a41368621461003b578063cfae32171461006c575b600080fd5b6100556004803603810190610050919061043f565b61008a565b60405161006392919061052b565b60405180910390f35b6100746101b0565b604051610081919061055b565b60405180910390f35b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756000846040516100c0929190610672565b60405180910390a182600090805190602001906100de929190610242565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600060405161010f91906106a9565b60405180910390a160016000808054610127906105ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610153906105ac565b80156101a05780601f10610175576101008083540402835291602001916101a0565b820191906000526020600020905b81548152906001019060200180831161018357829003601f168201915b5050505050905091509150915091565b6060600080546101bf906105ac565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb906105ac565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b5050505050905090565b82805461024e906105ac565b90600052602060002090601f01602090048101928261027057600085556102b7565b82601f1061028957805160ff19168380011785556102b7565b828001600101855582156102b7579182015b828111156102b657825182559160200191906001019061029b565b5b5090506102c491906102c8565b5090565b5b808211156102e15760008160009055506001016102c9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61034c82610303565b810181811067ffffffffffffffff8211171561036b5761036a610314565b5b80604052505050565b600061037e6102e5565b905061038a8282610343565b919050565b600067ffffffffffffffff8211156103aa576103a9610314565b5b6103b382610303565b9050602081019050919050565b82818337600083830152505050565b60006103e26103dd8461038f565b610374565b9050828152602081018484840111156103fe576103fd6102fe565b5b6104098482856103c0565b509392505050565b600082601f830112610426576104256102f9565b5b81356104368482602086016103cf565b91505092915050565b600060208284031215610455576104546102ef565b5b600082013567ffffffffffffffff811115610473576104726102f4565b5b61047f84828501610411565b91505092915050565b60008115159050919050565b61049d81610488565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104dd5780820151818401526020810190506104c2565b838111156104ec576000848401525b50505050565b60006104fd826104a3565b61050781856104ae565b93506105178185602086016104bf565b61052081610303565b840191505092915050565b60006040820190506105406000830185610494565b818103602083015261055281846104f2565b90509392505050565b6000602082019050818103600083015261057581846104f2565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806105c457607f821691505b6020821081036105d7576105d661057d565b5b50919050565b60008190508160005260206000209050919050565b600081546105ff816105ac565b61060981866104ae565b94506001821660008114610624576001811461063657610669565b60ff1983168652602086019350610669565b61063f856105dd565b60005b8381101561066157815481890152600182019150602081019050610642565b808801955050505b50505092915050565b6000604082019050818103600083015261068c81856105f2565b905081810360208301526106a081846104f2565b90509392505050565b600060208201905081810360008301526106c381846105f2565b90509291505056fea2646970667358221220fe0f28c9f8ef0a13a95934b974e7bc2ca6762b40a5b93ccd6ca2038f454bf52764736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017736f6c79656e7420677265656e2069732070656f706c65000000000000000000'; + const accountNonce = await web3Eth.getTransactionCount( + tempAcc.address, + undefined, + HEX_NUMBER_DATA_FORMAT, + ); + const transaction: InternalTransaction = { + nonce: accountNonce, + from: tempAcc.address, + data: greeterContractDeploymentData, + type: '0x0', + gas: '0x745b8', + }; + const gasPricing = await getTransactionGasPricing( + transaction, + web3Eth, + DEFAULT_RETURN_FORMAT, + ); + const signedTransaction = await web3Eth.signTransaction({ ...transaction, ...gasPricing }); + const response = await web3Eth.sendSignedTransaction(signedTransaction.raw as Bytes); + // eslint-disable-next-line jest/no-standalone-expect + expect(response.status).toBe(BigInt(1)); + + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + // eslint-disable-next-line jest/no-standalone-expect + expect(minedTransactionData).toMatchObject({ + nonce: BigInt(hexToNumber(accountNonce)), + from: tempAcc.address, + input: greeterContractDeploymentData, + type: BigInt(0), + gas: BigInt(476600), + }); + }); + + describe('Transaction PromiEvents', () => { + let transaction: Transaction; + let signedTransaction: SignedTransactionInfoAPI; + + beforeEach(async () => { + tempAcc = await createTempAccount(); + const accountNonce = await web3Eth.getTransactionCount(tempAcc.address); + transaction = { + nonce: accountNonce, + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: '0x1', + type: '0x0', + gas: '0x5208', + }; + const gasPricing = await getTransactionGasPricing( + transaction as InternalTransaction, + web3Eth, + DEFAULT_RETURN_FORMAT, + ); + signedTransaction = await web3Eth.signTransaction({ ...transaction, ...gasPricing }); + }); + + it('should listen to the sending event', async () => { + await web3Eth.sendSignedTransaction(signedTransaction.raw).on('sending', data => { + expect(data).toBe(signedTransaction.raw); + }); + expect.assertions(1); + }); + + it('should listen to the sent event', async () => { + await web3Eth.sendSignedTransaction(signedTransaction.raw).on('sent', data => { + expect(data).toBe(signedTransaction.raw); + }); + expect.assertions(1); + }); + + it('should listen to the transactionHash event', async () => { + await web3Eth + .sendSignedTransaction(signedTransaction.raw) + .on('transactionHash', data => { + expect(isHexStrict(data)).toBe(true); + }); + expect.assertions(1); + }); + + it('should listen to the receipt event', async () => { + const expectedTransactionReceipt = { + blockHash: expect.any(String), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + from: transaction.from, + to: transaction.to, + transactionHash: expect.any(String), + }; + + await web3Eth.sendSignedTransaction(signedTransaction.raw).on('receipt', data => { + expect(data).toEqual(expect.objectContaining(expectedTransactionReceipt)); + + // To avoid issue with the `objectContaining` and `cypress` had to add + // these expectations explicitly on each attribute + expect(typeof data.blockNumber).toBe('bigint'); + expect(typeof data.cumulativeGasUsed).toBe('bigint'); + expect(typeof data.effectiveGasPrice).toBe('bigint'); + expect(typeof data.gasUsed).toBe('bigint'); + expect(typeof data.transactionIndex).toBe('bigint'); + expect(data.status).toBe(BigInt(1)); + expect(data.type).toBe(BigInt(0)); + }); + expect.assertions(8); + }); + + it('should listen to the confirmation event', async () => { + const expectedTransactionConfirmation = { + confirmationNumber: expect.any(BigInt), + receipt: { + blockHash: expect.any(String), + blockNumber: expect.any(BigInt), + cumulativeGasUsed: expect.any(BigInt), + effectiveGasPrice: expect.any(BigInt), + gasUsed: expect.any(BigInt), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + status: BigInt(1), + from: transaction.from, + to: transaction.to, + transactionHash: expect.any(String), + transactionIndex: BigInt(0), + type: BigInt(0), + }, + latestBlockHash: expect.any(String), + }; + + await web3Eth.sendSignedTransaction(signedTransaction.raw).on('confirmation', data => { + expect(data).toEqual(expect.objectContaining(expectedTransactionConfirmation)); + }); + + // TODO Confirmations are dependent on the next block being mined, + // this is manually triggering the next block to be created since both + // Geth and Ganache wait for transaction before mining a block. + // This should be revisited to implement a better solution + await web3Eth.sendTransaction({ + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: '0x1', + type: '0x0', + gas: '0x5208', + }); + + expect.assertions(1); + }); + }); + + describe('Transaction Error Scenarios', () => { + let simpleRevertContractAddress: Address; + + beforeAll(async () => { + const simpleRevertDeployTransaction: Transaction = { + from: tempAcc.address, + data: SimpleRevertDeploymentData, + }; + simpleRevertDeployTransaction.gas = await web3Eth.estimateGas( + simpleRevertDeployTransaction, + ); + simpleRevertContractAddress = ( + await web3Eth.sendTransaction(simpleRevertDeployTransaction) + ).contractAddress as Address; + }); + + it('Should throw TransactionRevertInstructionError because gas too low', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: BigInt(1), + gas: 1, + gasPrice: 1, + nonce: await web3Eth.getTransactionCount(tempAcc.address), + }; + const signedTransaction = await web3Eth.signTransaction(transaction, { + number: FMT_NUMBER.BIGINT, + bytes: FMT_BYTES.UINT8ARRAY, + }); + + const expectedThrownError = { + name: 'TransactionRevertInstructionError', + innerError: undefined, + reason: + getSystemTestBackend() === 'geth' + ? expect.stringContaining( + 'err: max fee per gas less than block base fee: address 0x', + ) + : 'VM Exception while processing transaction: out of gas', + signature: undefined, + receipt: undefined, + data: undefined, + code: 402, + }; + + await expect( + web3Eth + .sendSignedTransaction(signedTransaction.raw) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + it('Should throw InvalidResponseError because insufficient funds', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: BigInt('999999999999999999999999999999999999999999999999999999999'), + gas: 21000, + nonce: await web3Eth.getTransactionCount(tempAcc.address), + }; + transaction.gasPrice = await web3Eth.getGasPrice(); + const signedTransaction = await web3Eth.signTransaction(transaction, { + number: FMT_NUMBER.BIGINT, + bytes: FMT_BYTES.UINT8ARRAY, + }); + + const expectedThrownError = { + name: 'TransactionRevertInstructionError', + message: 'Transaction has been reverted by the EVM', + innerError: undefined, + reason: + getSystemTestBackend() === 'geth' + ? expect.stringContaining( + 'err: insufficient funds for gas * price + value: address 0x', + ) + : 'VM Exception while processing transaction: insufficient balance', + signature: undefined, + receipt: undefined, + data: undefined, + code: 402, + }; + + await expect( + web3Eth + .sendSignedTransaction(signedTransaction.raw) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + + it('Should throw TransactionRevertInstructionError because of contract revert and return revert reason', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: simpleRevertContractAddress, + data: '0xba57a511000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000067265766572740000000000000000000000000000000000000000000000000000', + gasPrice: 2000000000, + gas: 23605, + nonce: await web3Eth.getTransactionCount(tempAcc.address), + }; + const signedTransaction = await web3Eth.signTransaction(transaction, { + number: FMT_NUMBER.BIGINT, + bytes: FMT_BYTES.UINT8ARRAY, + }); + + web3Eth.handleRevert = true; + + const expectedThrownError = { + name: 'TransactionRevertInstructionError', + code: 402, + reason: + getSystemTestBackend() === 'geth' + ? 'execution reverted: This is a send revert' + : 'VM Exception while processing transaction: revert This is a send revert', + signature: '0x08c379a0', + data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612073656e64207265766572740000000000000000000000', + receipt: undefined, + }; + + await expect( + web3Eth + .sendSignedTransaction(signedTransaction.raw) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + + it('Should throw TransactionRevertWithCustomError because of contract revert and return custom error ErrorWithNoParams', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: simpleRevertContractAddress, + data: '0x3ebf4d9c', + gasPrice: 2000000000, + gas: 21222, + nonce: await web3Eth.getTransactionCount(tempAcc.address), + }; + const signedTransaction = await web3Eth.signTransaction(transaction, { + number: FMT_NUMBER.BIGINT, + bytes: FMT_BYTES.UINT8ARRAY, + }); + + web3Eth.handleRevert = true; + + const expectedThrownError = { + name: 'TransactionRevertWithCustomError', + code: 438, + reason: + getSystemTestBackend() === 'geth' + ? 'execution reverted' + : 'VM Exception while processing transaction: revert', + signature: '0x72090e4d', + customErrorName: 'ErrorWithNoParams', + customErrorDecodedSignature: 'ErrorWithNoParams()', + customErrorArguments: {}, + receipt: undefined, + }; + + await expect( + web3Eth + .sendSignedTransaction(signedTransaction.raw, undefined, { + contractAbi: SimpleRevertAbi, + }) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + + it('Should throw TransactionRevertWithCustomError because of contract revert and return custom error ErrorWithParams', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: simpleRevertContractAddress, + data: '0x819f48fe', + gasPrice: 2000000000, + gas: 21730, + nonce: await web3Eth.getTransactionCount(tempAcc.address), + }; + const signedTransaction = await web3Eth.signTransaction(transaction, { + number: FMT_NUMBER.BIGINT, + bytes: FMT_BYTES.UINT8ARRAY, + }); + + web3Eth.handleRevert = true; + + const expectedThrownError = { + name: 'TransactionRevertWithCustomError', + code: 438, + reason: + getSystemTestBackend() === 'geth' + ? 'execution reverted' + : 'VM Exception while processing transaction: revert', + signature: '0xc85bda60', + data: '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + customErrorName: 'ErrorWithParams', + customErrorDecodedSignature: 'ErrorWithParams(uint256,string)', + customErrorArguments: { + code: BigInt(42), + message: 'This is an error with params', + }, + receipt: undefined, + }; + + await expect( + web3Eth + .sendSignedTransaction(signedTransaction.raw, undefined, { + contractAbi: SimpleRevertAbi, + }) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + + it('Should throw TransactionRevertInstructionError because of contract revert', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: simpleRevertContractAddress, + data: '0xba57a511000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000067265766572740000000000000000000000000000000000000000000000000000', + gasPrice: 2000000000, + gas: 23605, + nonce: await web3Eth.getTransactionCount(tempAcc.address), + }; + const signedTransaction = await web3Eth.signTransaction(transaction, { + number: FMT_NUMBER.BIGINT, + bytes: FMT_BYTES.UINT8ARRAY, + }); + + web3Eth.handleRevert = false; + + const expectedThrownError = { + name: 'TransactionRevertInstructionError', + innerError: undefined, + reason: + getSystemTestBackend() === 'geth' + ? 'execution reverted: This is a send revert' + : 'VM Exception while processing transaction: revert This is a send revert', + signature: '0x08c379a0', + receipt: undefined, + data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612073656e64207265766572740000000000000000000000', + code: 402, + }; + + await expect( + web3Eth + .sendSignedTransaction(signedTransaction.raw) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/web3_eth/send_transaction.test.ts b/packages/web3-eth/test/integration/web3_eth/send_transaction.test.ts new file mode 100644 index 00000000000..27be74bc7a9 --- /dev/null +++ b/packages/web3-eth/test/integration/web3_eth/send_transaction.test.ts @@ -0,0 +1,653 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// TODO Seems to be an issue with linter falsely reporting this +// error for Transaction Error Scenarios tests +/* eslint-disable jest/no-conditional-expect */ + +import { + Transaction, + TransactionWithFromLocalWalletIndex, + TransactionWithToLocalWalletIndex, + TransactionWithFromAndToLocalWalletIndex, + Address, + DEFAULT_RETURN_FORMAT, +} from 'web3-types'; +import { Wallet } from 'web3-eth-accounts'; +import { isHexStrict } from 'web3-validator'; + +import Web3Eth from '../../../src'; +import { + closeOpenConnection, + createAccountProvider, + createTempAccount, + getSystemTestBackend, + getSystemTestProvider, +} from '../../fixtures/system_test_utils'; +import { SimpleRevertAbi, SimpleRevertDeploymentData } from '../../fixtures/simple_revert'; + +describe('Web3Eth.sendTransaction', () => { + let web3Eth: Web3Eth; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(async () => { + web3Eth = new Web3Eth(getSystemTestProvider()); + tempAcc = await createTempAccount(); + }); + + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + it('should make a simple value transfer', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: BigInt(1), + }; + const response = await web3Eth.sendTransaction(transaction); + expect(response.status).toBe(BigInt(1)); + expect(response.events).toBeUndefined(); + + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject(transaction); + }); + + it('should make a simple value transfer - with local wallet indexed sender', async () => { + const web3EthWithWallet = new Web3Eth(getSystemTestProvider()); + const accountProvider = createAccountProvider(web3Eth); + const wallet = new Wallet(accountProvider); + + web3EthWithWallet['_accountProvider'] = accountProvider; + web3EthWithWallet['_wallet'] = wallet; + + web3EthWithWallet.wallet?.add(tempAcc.privateKey); + + const transaction: TransactionWithFromLocalWalletIndex = { + from: 0, + to: '0x0000000000000000000000000000000000000000', + gas: 21000, + value: BigInt(1), + }; + const response = await web3EthWithWallet.sendTransaction(transaction); + expect(response.status).toBe(BigInt(1)); + expect(response.events).toBeUndefined(); + + const minedTransactionData = await web3EthWithWallet.getTransaction( + response.transactionHash, + ); + + expect(minedTransactionData).toMatchObject({ + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: BigInt(1), + }); + }); + + it('should make a simple value transfer - with local wallet indexed receiver', async () => { + const web3EthWithWallet = new Web3Eth(getSystemTestProvider()); + const accountProvider = createAccountProvider(web3Eth); + const wallet = new Wallet(accountProvider); + + web3EthWithWallet['_accountProvider'] = accountProvider; + web3EthWithWallet['_wallet'] = wallet; + + web3EthWithWallet.wallet?.add(tempAcc.privateKey); + + const transaction: TransactionWithToLocalWalletIndex = { + from: tempAcc.address, + to: 0, + gas: 21000, + value: BigInt(1), + }; + const response = await web3EthWithWallet.sendTransaction(transaction); + expect(response.status).toBe(BigInt(1)); + expect(response.events).toBeUndefined(); + + const minedTransactionData = await web3EthWithWallet.getTransaction( + response.transactionHash, + ); + + expect(minedTransactionData).toMatchObject({ + from: tempAcc.address, + to: wallet.get(0)?.address.toLowerCase(), + value: BigInt(1), + }); + }); + + it('should make a simple value transfer - with local wallet indexed sender and receiver', async () => { + const web3EthWithWallet = new Web3Eth(getSystemTestProvider()); + const accountProvider = createAccountProvider(web3Eth); + const wallet = new Wallet(accountProvider); + + web3EthWithWallet['_accountProvider'] = accountProvider; + web3EthWithWallet['_wallet'] = wallet; + + const tempAcc2 = await createTempAccount(); + + web3EthWithWallet.wallet?.add(tempAcc.privateKey); + + web3EthWithWallet.wallet?.add(tempAcc2.privateKey); + + const transaction: TransactionWithFromAndToLocalWalletIndex = { + from: 0, + to: 1, + gas: 21000, + value: BigInt(1), + }; + const response = await web3EthWithWallet.sendTransaction(transaction); + expect(response.status).toBe(BigInt(1)); + expect(response.events).toBeUndefined(); + + const minedTransactionData = await web3EthWithWallet.getTransaction( + response.transactionHash, + ); + + expect(minedTransactionData).toMatchObject({ + from: tempAcc.address, + to: wallet.get(1)?.address.toLowerCase(), + value: BigInt(1), + }); + }); + it('should make a transaction with no value transfer', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: BigInt(0), + }; + const response = await web3Eth.sendTransaction(transaction); + expect(response.status).toBe(BigInt(1)); + expect(response.events).toBeUndefined(); + + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject(transaction); + }); + it('should send a transaction with data', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + data: '0x64edfbf0e2c706ba4a09595315c45355a341a576cc17f3a19f43ac1c02f814ee', + value: BigInt(0), + }; + const response = await web3Eth.sendTransaction(transaction); + expect(response.status).toBe(BigInt(1)); + expect(response.events).toBeUndefined(); + + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject(transaction); + }); + + describe('Deploy and interact with contract', () => { + let greeterContractAddress: string; + + it('should deploy a contract', async () => { + const greeterContractDeploymentData = + '0x60806040523480156200001157600080fd5b5060405162000a6a38038062000a6a8339818101604052810190620000379190620002a4565b80600090805190602001906200004f92919062000057565b505062000359565b828054620000659062000324565b90600052602060002090601f016020900481019282620000895760008555620000d5565b82601f10620000a457805160ff1916838001178555620000d5565b82800160010185558215620000d5579182015b82811115620000d4578251825591602001919060010190620000b7565b5b509050620000e49190620000e8565b5090565b5b8082111562000103576000816000905550600101620000e9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001708262000125565b810181811067ffffffffffffffff8211171562000192576200019162000136565b5b80604052505050565b6000620001a762000107565b9050620001b5828262000165565b919050565b600067ffffffffffffffff821115620001d857620001d762000136565b5b620001e38262000125565b9050602081019050919050565b60005b8381101562000210578082015181840152602081019050620001f3565b8381111562000220576000848401525b50505050565b60006200023d6200023784620001ba565b6200019b565b9050828152602081018484840111156200025c576200025b62000120565b5b62000269848285620001f0565b509392505050565b600082601f8301126200028957620002886200011b565b5b81516200029b84826020860162000226565b91505092915050565b600060208284031215620002bd57620002bc62000111565b5b600082015167ffffffffffffffff811115620002de57620002dd62000116565b5b620002ec8482850162000271565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033d57607f821691505b602082108103620003535762000352620002f5565b5b50919050565b61070180620003696000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a41368621461003b578063cfae32171461006c575b600080fd5b6100556004803603810190610050919061043f565b61008a565b60405161006392919061052b565b60405180910390f35b6100746101b0565b604051610081919061055b565b60405180910390f35b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756000846040516100c0929190610672565b60405180910390a182600090805190602001906100de929190610242565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600060405161010f91906106a9565b60405180910390a160016000808054610127906105ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610153906105ac565b80156101a05780601f10610175576101008083540402835291602001916101a0565b820191906000526020600020905b81548152906001019060200180831161018357829003601f168201915b5050505050905091509150915091565b6060600080546101bf906105ac565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb906105ac565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b5050505050905090565b82805461024e906105ac565b90600052602060002090601f01602090048101928261027057600085556102b7565b82601f1061028957805160ff19168380011785556102b7565b828001600101855582156102b7579182015b828111156102b657825182559160200191906001019061029b565b5b5090506102c491906102c8565b5090565b5b808211156102e15760008160009055506001016102c9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61034c82610303565b810181811067ffffffffffffffff8211171561036b5761036a610314565b5b80604052505050565b600061037e6102e5565b905061038a8282610343565b919050565b600067ffffffffffffffff8211156103aa576103a9610314565b5b6103b382610303565b9050602081019050919050565b82818337600083830152505050565b60006103e26103dd8461038f565b610374565b9050828152602081018484840111156103fe576103fd6102fe565b5b6104098482856103c0565b509392505050565b600082601f830112610426576104256102f9565b5b81356104368482602086016103cf565b91505092915050565b600060208284031215610455576104546102ef565b5b600082013567ffffffffffffffff811115610473576104726102f4565b5b61047f84828501610411565b91505092915050565b60008115159050919050565b61049d81610488565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104dd5780820151818401526020810190506104c2565b838111156104ec576000848401525b50505050565b60006104fd826104a3565b61050781856104ae565b93506105178185602086016104bf565b61052081610303565b840191505092915050565b60006040820190506105406000830185610494565b818103602083015261055281846104f2565b90509392505050565b6000602082019050818103600083015261057581846104f2565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806105c457607f821691505b6020821081036105d7576105d661057d565b5b50919050565b60008190508160005260206000209050919050565b600081546105ff816105ac565b61060981866104ae565b94506001821660008114610624576001811461063657610669565b60ff1983168652602086019350610669565b61063f856105dd565b60005b8381101561066157815481890152600182019150602081019050610642565b808801955050505b50505092915050565b6000604082019050818103600083015261068c81856105f2565b905081810360208301526106a081846104f2565b90509392505050565b600060208201905081810360008301526106c381846105f2565b90509291505056fea2646970667358221220fe0f28c9f8ef0a13a95934b974e7bc2ca6762b40a5b93ccd6ca2038f454bf52764736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017736f6c79656e7420677265656e2069732070656f706c65000000000000000000'; + const transaction: Transaction = { + from: tempAcc.address, + data: greeterContractDeploymentData, + input: greeterContractDeploymentData, + gas: BigInt('475520'), + }; + const response = await web3Eth.sendTransaction(transaction); + expect(response.status).toBe(BigInt(1)); + expect(response.events).toBeUndefined(); + expect(response.contractAddress).toBeDefined(); + + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject({ + from: tempAcc.address, + input: greeterContractDeploymentData, + gas: BigInt('475520'), + }); + + greeterContractAddress = response.contractAddress as string; + }); + + it('should update greet in contract', async () => { + const contractFunctionCall = + '0xa4136862000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000023432000000000000000000000000000000000000000000000000000000000000'; + const transaction: Transaction = { + from: tempAcc.address, + to: greeterContractAddress, + data: contractFunctionCall, + input: contractFunctionCall, + }; + const response = await web3Eth.sendTransaction(transaction); + expect(response.events).toBeUndefined(); + expect(response.status).toBe(BigInt(1)); + + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject({ + from: tempAcc.address, + to: greeterContractAddress, + input: contractFunctionCall, + }); + }); + }); + + describe('Transaction Types', () => { + it('should send a successful type 0x0 transaction', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: BigInt(1), + type: BigInt(0), + }; + const response = await web3Eth.sendTransaction(transaction); + expect(response.events).toBeUndefined(); + expect(response.type).toBe(BigInt(0)); + expect(response.status).toBe(BigInt(1)); + + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject(transaction); + }); + + it('should send a successful type 0x1 transaction', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: BigInt(1), + type: BigInt(1), + // TODO If this property is not included, tx gets default to type: 0x0 + // from what I can tell our library isn't doing this, but it happens + // with both Geth and Ganache, so I'm not sure + accessList: [], + }; + const response = await web3Eth.sendTransaction(transaction); + expect(response.events).toBeUndefined(); + expect(response.type).toBe(BigInt(1)); + expect(response.status).toBe(BigInt(1)); + + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject(transaction); + }); + + it('should send a successful type 0x2 transaction', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: BigInt(1), + type: BigInt(2), + }; + const response = await web3Eth.sendTransaction(transaction); + expect(response.events).toBeUndefined(); + expect(response.type).toBe(BigInt(2)); + expect(response.status).toBe(BigInt(1)); + + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject(transaction); + }); + + it('should send a successful type 0x0 transaction with data', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + data: '0x64edfbf0e2c706ba4a09595315c45355a341a576cc17f3a19f43ac1c02f814ee', + value: BigInt(1), + type: BigInt(0), + }; + const response = await web3Eth.sendTransaction(transaction, DEFAULT_RETURN_FORMAT); + expect(response.type).toBe(BigInt(0)); + expect(response.events).toBeUndefined(); + expect(response.status).toBe(BigInt(1)); + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject(transaction); + }); + + it('should send a successful autodetected type 0x0 gasprice as data', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + data: '0x64edfbf0e2c706ba4a09595315c45355a341a576cc17f3a19f43ac1c02f814ee', + value: BigInt(1), + gasPrice: BigInt(2500000008), + }; + const response = await web3Eth.sendTransaction(transaction, DEFAULT_RETURN_FORMAT); + expect(response.type).toBe(BigInt(0)); + expect(response.status).toBe(BigInt(1)); + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject(transaction); + }); + + it('should send a successful default type 0x2 transaction with data', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + data: '0x64edfbf0e2c706ba4a09595315c45355a341a576cc17f3a19f43ac1c02f814ee', + value: BigInt(1), + gas: BigInt(30000), + }; + const response = await web3Eth.sendTransaction(transaction, DEFAULT_RETURN_FORMAT); + expect(response.type).toBe(BigInt(2)); + expect(response.status).toBe(BigInt(1)); + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject(transaction); + }); + }); + it('should autofill a successful type 0x2 transaction with only maxFeePerGas passed', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: BigInt(1), + maxFeePerGas: BigInt(2500000016), + }; + const response = await web3Eth.sendTransaction(transaction); + expect(response.events).toBeUndefined(); + expect(response.type).toBe(BigInt(2)); + expect(response.status).toBe(BigInt(1)); + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject(transaction); + }); + + it('should autofill a successful type 0x2 transaction with only maxPriorityFeePerGas passed', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: BigInt(1), + maxPriorityFeePerGas: BigInt(100), + }; + const response = await web3Eth.sendTransaction(transaction); + expect(response.events).toBeUndefined(); + expect(response.type).toBe(BigInt(2)); + expect(response.status).toBe(BigInt(1)); + const minedTransactionData = await web3Eth.getTransaction(response.transactionHash); + expect(minedTransactionData).toMatchObject(transaction); + }); + + describe('Transaction PromiEvents', () => { + let transaction: Transaction; + + beforeEach(async () => { + tempAcc = await createTempAccount(); + transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: '0x1', + }; + }); + + it('should listen to the sending event', async () => { + await web3Eth.sendTransaction(transaction).on('sending', data => { + expect(data).toMatchObject(transaction); + }); + expect.assertions(1); + }); + + it('should listen to the sent event', async () => { + await web3Eth.sendTransaction(transaction).on('sent', data => { + expect(data).toMatchObject(transaction); + }); + expect.assertions(1); + }); + + it('should listen to the transactionHash event', async () => { + await web3Eth.sendTransaction(transaction).on('transactionHash', data => { + expect(isHexStrict(data)).toBe(true); + }); + expect.assertions(1); + }); + + it('should listen to the receipt event', async () => { + const expectedTransactionReceipt = { + blockHash: expect.any(String), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + from: transaction.from, + to: transaction.to, + transactionHash: expect.any(String), + }; + await web3Eth.sendTransaction(transaction).on('receipt', data => { + expect(data).toEqual(expect.objectContaining(expectedTransactionReceipt)); + + // To avoid issue with the `objectContaining` and `cypress` had to add + // these expectations explicitly on each attribute + expect(typeof data.blockNumber).toBe('bigint'); + expect(typeof data.cumulativeGasUsed).toBe('bigint'); + expect(typeof data.effectiveGasPrice).toBe('bigint'); + expect(typeof data.gasUsed).toBe('bigint'); + expect(typeof data.transactionIndex).toBe('bigint'); + expect(data.status).toBe(BigInt(1)); + expect(data.type).toBe(BigInt(2)); + expect(data.events).toBeUndefined(); + }); + expect.assertions(9); + }); + + it('should listen to the confirmation event', async () => { + const expectedTransactionConfirmation = { + confirmationNumber: expect.any(BigInt), + receipt: { + blockHash: expect.any(String), + blockNumber: expect.any(BigInt), + cumulativeGasUsed: expect.any(BigInt), + effectiveGasPrice: expect.any(BigInt), + gasUsed: expect.any(BigInt), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + status: BigInt(1), + from: transaction.from, + to: transaction.to, + transactionHash: expect.any(String), + transactionIndex: BigInt(0), + type: BigInt(0), + }, + latestBlockHash: expect.any(String), + }; + + await web3Eth.sendTransaction(transaction).on('confirmation', data => { + expect(data).toEqual(expect.objectContaining(expectedTransactionConfirmation)); + }); + + // TODO Confirmations are dependent on the next block being mined, + // this is manually triggering the next block to be created since both + // Geth and Ganache wait for transaction before mining a block. + // This should be revisted to implement a better solution + await web3Eth.sendTransaction(transaction); + + // TODO: Debug why the assertions are not being called + // expect.assertions(1); + }); + }); + + describe('Transaction Error Scenarios', () => { + let simpleRevertContractAddress: Address; + + beforeAll(async () => { + const simpleRevertDeployTransaction: Transaction = { + from: tempAcc.address, + data: SimpleRevertDeploymentData, + }; + simpleRevertDeployTransaction.gas = await web3Eth.estimateGas( + simpleRevertDeployTransaction, + ); + simpleRevertContractAddress = ( + await web3Eth.sendTransaction(simpleRevertDeployTransaction) + ).contractAddress as Address; + }); + + it('Should throw TransactionRevertInstructionError because gas too low', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: BigInt(1), + gas: 1, + }; + + const expectedThrownError = { + name: 'TransactionRevertInstructionError', + code: 402, + reason: + getSystemTestBackend() === 'geth' + ? 'err: intrinsic gas too low: have 1, want 21000 (supplied gas 1)' + : 'VM Exception while processing transaction: out of gas', + }; + + await expect( + web3Eth + .sendTransaction(transaction) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + it('Should throw TransactionRevertInstructionError because insufficient funds', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: '0x0000000000000000000000000000000000000000', + value: BigInt('999999999999999999999999999999999999999999999999999999999'), + }; + + const expectedThrownError = { + name: 'TransactionRevertInstructionError', + message: 'Transaction has been reverted by the EVM', + code: 402, + reason: + getSystemTestBackend() === 'geth' + ? expect.stringContaining( + 'err: insufficient funds for gas * price + value: address', + ) + : 'VM Exception while processing transaction: insufficient balance', + }; + + await expect( + web3Eth + .sendTransaction(transaction) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + + it('Should throw TransactionRevertInstructionError because of contract revert and return revert reason', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: simpleRevertContractAddress, + data: '0xba57a511000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000067265766572740000000000000000000000000000000000000000000000000000', + }; + + web3Eth.handleRevert = true; + + const expectedThrownError = { + name: 'TransactionRevertInstructionError', + code: 402, + reason: + getSystemTestBackend() === 'geth' + ? 'execution reverted: This is a send revert' + : 'VM Exception while processing transaction: revert This is a send revert', + signature: '0x08c379a0', + data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612073656e64207265766572740000000000000000000000', + receipt: undefined, + }; + + await expect( + web3Eth + .sendTransaction(transaction) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + + it('Should throw TransactionRevertWithCustomError because of contract revert and return custom error ErrorWithNoParams', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: simpleRevertContractAddress, + data: '0x3ebf4d9c', + }; + + web3Eth.handleRevert = true; + + const expectedThrownError = { + name: 'TransactionRevertWithCustomError', + code: 438, + reason: + getSystemTestBackend() === 'geth' + ? 'execution reverted' + : 'VM Exception while processing transaction: revert', + signature: '0x72090e4d', + customErrorName: 'ErrorWithNoParams', + customErrorDecodedSignature: 'ErrorWithNoParams()', + customErrorArguments: {}, + receipt: undefined, + }; + + await expect( + web3Eth + .sendTransaction(transaction, undefined, { contractAbi: SimpleRevertAbi }) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + + it('Should throw TransactionRevertWithCustomError because of contract revert and return custom error ErrorWithParams', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: simpleRevertContractAddress, + data: '0x819f48fe', + }; + + web3Eth.handleRevert = true; + + const expectedThrownError = { + name: 'TransactionRevertWithCustomError', + code: 438, + reason: + getSystemTestBackend() === 'geth' + ? 'execution reverted' + : 'VM Exception while processing transaction: revert', + signature: '0xc85bda60', + data: '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + customErrorName: 'ErrorWithParams', + customErrorDecodedSignature: 'ErrorWithParams(uint256,string)', + customErrorArguments: { + code: BigInt(42), + message: 'This is an error with params', + }, + receipt: undefined, + }; + + await expect( + web3Eth + .sendTransaction(transaction, undefined, { contractAbi: SimpleRevertAbi }) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + + it('Should throw TransactionRevertInstructionError because of contract revert', async () => { + const transaction: Transaction = { + from: tempAcc.address, + to: simpleRevertContractAddress, + data: '0xba57a511000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000067265766572740000000000000000000000000000000000000000000000000000', + }; + + web3Eth.handleRevert = false; + + const expectedThrownError = { + name: 'TransactionRevertInstructionError', + code: 402, + reason: + getSystemTestBackend() === 'geth' + ? 'execution reverted: This is a send revert' + : 'VM Exception while processing transaction: revert This is a send revert', + signature: '0x08c379a0', + data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612073656e64207265766572740000000000000000000000', + }; + + await expect( + web3Eth + .sendTransaction(transaction) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + }); + }); +}); diff --git a/packages/web3-eth/test/integration/web3_eth/sign.test.ts b/packages/web3-eth/test/integration/web3_eth/sign.test.ts new file mode 100644 index 00000000000..d07ed4273b6 --- /dev/null +++ b/packages/web3-eth/test/integration/web3_eth/sign.test.ts @@ -0,0 +1,45 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { isHexStrict } from 'web3-validator'; + +import { Web3Eth } from '../../../src'; +import { + closeOpenConnection, + createTempAccount, + getSystemTestProvider, +} from '../../fixtures/system_test_utils'; + +describe('Web3Eth.sign', () => { + let web3Eth: Web3Eth; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(async () => { + web3Eth = new Web3Eth(getSystemTestProvider()); + tempAcc = await createTempAccount(); + }); + + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + it('should sign message', async () => { + const message = '0x736f796c656e7420677265656e2069732070656f706c65'; + const response = await web3Eth.sign(message, tempAcc.address); + expect(isHexStrict(response as string)).toBe(true); + }); +}); diff --git a/packages/web3-eth/test/integration/web3_eth/sign_transaction.test.ts b/packages/web3-eth/test/integration/web3_eth/sign_transaction.test.ts new file mode 100644 index 00000000000..be0e09c1782 --- /dev/null +++ b/packages/web3-eth/test/integration/web3_eth/sign_transaction.test.ts @@ -0,0 +1,103 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Transaction, TransactionLegacySignedAPI } from 'web3-types'; +import { Web3Eth } from '../../../src'; +import { + closeOpenConnection, + createTempAccount, + getSystemTestProvider, +} from '../../fixtures/system_test_utils'; + +describe('Web3Eth.signTransaction', () => { + let web3Eth: Web3Eth; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(async () => { + web3Eth = new Web3Eth(getSystemTestProvider()); + tempAcc = await createTempAccount(); + }); + + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + it('should sign a simple value transfer', async () => { + const nonce = await web3Eth.getTransactionCount(tempAcc.address); + const transaction: Transaction = { + from: tempAcc.address, + nonce, + to: '0x0000000000000000000000000000000000000000', + value: '0x1', + gas: '0x5208', + gasPrice: '0x3b9aca01', + }; + const response = await web3Eth.signTransaction(transaction); + const expectedResponse: { tx: Transaction } = { + tx: { + type: BigInt(0), + nonce: BigInt(nonce), + gasPrice: BigInt(1000000001), + gas: BigInt(21000), + value: BigInt(1), + to: transaction.to, + input: '0x', + data: '0x', + }, + }; + + expect(response).toMatchObject(expectedResponse); + + // Pulling out of toMatchObject to be compatiable with Cypress + expect(response.raw).toMatch(/0[xX][0-9a-fA-F]+/); + expect(typeof (response.tx as TransactionLegacySignedAPI).v).toBe('bigint'); + expect(response.tx.r).toMatch(/0[xX][0-9a-fA-F]{64}/); + expect(response.tx.s).toMatch(/0[xX][0-9a-fA-F]{64}/); + }); + + it('should sign a contract deployment', async () => { + const greeterContractDeploymentData = + '0x60806040523480156200001157600080fd5b5060405162000a6a38038062000a6a8339818101604052810190620000379190620002a4565b80600090805190602001906200004f92919062000057565b505062000359565b828054620000659062000324565b90600052602060002090601f016020900481019282620000895760008555620000d5565b82601f10620000a457805160ff1916838001178555620000d5565b82800160010185558215620000d5579182015b82811115620000d4578251825591602001919060010190620000b7565b5b509050620000e49190620000e8565b5090565b5b8082111562000103576000816000905550600101620000e9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001708262000125565b810181811067ffffffffffffffff8211171562000192576200019162000136565b5b80604052505050565b6000620001a762000107565b9050620001b5828262000165565b919050565b600067ffffffffffffffff821115620001d857620001d762000136565b5b620001e38262000125565b9050602081019050919050565b60005b8381101562000210578082015181840152602081019050620001f3565b8381111562000220576000848401525b50505050565b60006200023d6200023784620001ba565b6200019b565b9050828152602081018484840111156200025c576200025b62000120565b5b62000269848285620001f0565b509392505050565b600082601f8301126200028957620002886200011b565b5b81516200029b84826020860162000226565b91505092915050565b600060208284031215620002bd57620002bc62000111565b5b600082015167ffffffffffffffff811115620002de57620002dd62000116565b5b620002ec8482850162000271565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033d57607f821691505b602082108103620003535762000352620002f5565b5b50919050565b61070180620003696000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a41368621461003b578063cfae32171461006c575b600080fd5b6100556004803603810190610050919061043f565b61008a565b60405161006392919061052b565b60405180910390f35b6100746101b0565b604051610081919061055b565b60405180910390f35b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756000846040516100c0929190610672565b60405180910390a182600090805190602001906100de929190610242565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600060405161010f91906106a9565b60405180910390a160016000808054610127906105ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610153906105ac565b80156101a05780601f10610175576101008083540402835291602001916101a0565b820191906000526020600020905b81548152906001019060200180831161018357829003601f168201915b5050505050905091509150915091565b6060600080546101bf906105ac565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb906105ac565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b5050505050905090565b82805461024e906105ac565b90600052602060002090601f01602090048101928261027057600085556102b7565b82601f1061028957805160ff19168380011785556102b7565b828001600101855582156102b7579182015b828111156102b657825182559160200191906001019061029b565b5b5090506102c491906102c8565b5090565b5b808211156102e15760008160009055506001016102c9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61034c82610303565b810181811067ffffffffffffffff8211171561036b5761036a610314565b5b80604052505050565b600061037e6102e5565b905061038a8282610343565b919050565b600067ffffffffffffffff8211156103aa576103a9610314565b5b6103b382610303565b9050602081019050919050565b82818337600083830152505050565b60006103e26103dd8461038f565b610374565b9050828152602081018484840111156103fe576103fd6102fe565b5b6104098482856103c0565b509392505050565b600082601f830112610426576104256102f9565b5b81356104368482602086016103cf565b91505092915050565b600060208284031215610455576104546102ef565b5b600082013567ffffffffffffffff811115610473576104726102f4565b5b61047f84828501610411565b91505092915050565b60008115159050919050565b61049d81610488565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104dd5780820151818401526020810190506104c2565b838111156104ec576000848401525b50505050565b60006104fd826104a3565b61050781856104ae565b93506105178185602086016104bf565b61052081610303565b840191505092915050565b60006040820190506105406000830185610494565b818103602083015261055281846104f2565b90509392505050565b6000602082019050818103600083015261057581846104f2565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806105c457607f821691505b6020821081036105d7576105d661057d565b5b50919050565b60008190508160005260206000209050919050565b600081546105ff816105ac565b61060981866104ae565b94506001821660008114610624576001811461063657610669565b60ff1983168652602086019350610669565b61063f856105dd565b60005b8381101561066157815481890152600182019150602081019050610642565b808801955050505b50505092915050565b6000604082019050818103600083015261068c81856105f2565b905081810360208301526106a081846104f2565b90509392505050565b600060208201905081810360008301526106c381846105f2565b90509291505056fea2646970667358221220fe0f28c9f8ef0a13a95934b974e7bc2ca6762b40a5b93ccd6ca2038f454bf52764736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017736f6c79656e7420677265656e2069732070656f706c65000000000000000000'; + const nonce = await web3Eth.getTransactionCount(tempAcc.address); + const transaction: Transaction = { + from: tempAcc.address, + nonce, + data: greeterContractDeploymentData, + gas: '0x740b8', + gasPrice: '0x3b9aca01', + }; + const response = await web3Eth.signTransaction(transaction); + const expectedResponse: { tx: Transaction } = { + tx: { + type: BigInt(0), + nonce: BigInt(nonce), + gasPrice: BigInt(1000000001), + gas: BigInt(475320), + input: greeterContractDeploymentData, + data: greeterContractDeploymentData, + }, + }; + + // eslint-disable-next-line jest/no-standalone-expect + expect(response).toMatchObject(expectedResponse); + // Pulling out of toMatchObject to be compatiable with Cypress + expect(response.raw).toMatch(/0[xX][0-9a-fA-F]+/); + expect(typeof (response.tx as TransactionLegacySignedAPI).v).toBe('bigint'); + expect(response.tx.r).toMatch(/0[xX][0-9a-fA-F]{64}/); + expect(response.tx.s).toMatch(/0[xX][0-9a-fA-F]{64}/); + }); +}); diff --git a/packages/web3-eth/test/integration/web3_eth/sign_typed_data.test.ts b/packages/web3-eth/test/integration/web3_eth/sign_typed_data.test.ts new file mode 100644 index 00000000000..741690bc47f --- /dev/null +++ b/packages/web3-eth/test/integration/web3_eth/sign_typed_data.test.ts @@ -0,0 +1,206 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { getEncodedEip712Data } from 'web3-eth-abi'; +import { ecrecover, toUint8Array } from 'web3-eth-accounts'; +import { bytesToHex, hexToNumber, keccak256 } from 'web3-utils'; + +import Web3Eth from '../../../src'; +import { + closeOpenConnection, + createTempAccount, + getSystemTestBackend, + getSystemTestProvider, + itIf, +} from '../../fixtures/system_test_utils'; + +describe('Web3Eth.signTypedData', () => { + let web3Eth: Web3Eth; + let tempAcc: { address: string; privateKey: string }; + + beforeAll(async () => { + web3Eth = new Web3Eth(getSystemTestProvider()); + tempAcc = await createTempAccount(); + }); + + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + itIf(getSystemTestBackend() === 'ganache')( + 'should sign the typed data, return the signature, and recover the correct ETH address', + async () => { + const typedData = { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + Person: [ + { + name: 'name', + type: 'string', + }, + { + name: 'wallet', + type: 'address', + }, + ], + Mail: [ + { + name: 'from', + type: 'Person', + }, + { + name: 'to', + type: 'Person', + }, + { + name: 'contents', + type: 'string', + }, + ], + }, + primaryType: 'Mail', + domain: { + name: 'Ether Mail', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + from: { + name: 'Cow', + wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + }, + to: { + name: 'Bob', + wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + }, + contents: 'Hello, Bob!', + }, + }; + const encodedTypedDataHash = getEncodedEip712Data(typedData, true); + const signature = await web3Eth.signTypedData(tempAcc.address, typedData); + const r = toUint8Array(signature.slice(0, 66)); + const s = toUint8Array(`0x${signature.slice(66, 130)}`); + const v = BigInt(hexToNumber(`0x${signature.slice(130, 132)}`)); + const recoveredPublicKey = bytesToHex( + ecrecover(toUint8Array(encodedTypedDataHash), v, r, s), + ); + + const recoveredAddress = `0x${keccak256(bytesToHex(recoveredPublicKey)).slice(-40)}`; + // eslint-disable-next-line jest/no-standalone-expect + expect(recoveredAddress).toBe(tempAcc.address); + }, + ); + + itIf(getSystemTestBackend() === 'ganache')( + 'should sign the typed data (using legacy RPC method), return the signature, and recover the correct ETH address', + async () => { + const typedData = { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + Person: [ + { + name: 'name', + type: 'string', + }, + { + name: 'wallet', + type: 'address', + }, + ], + Mail: [ + { + name: 'from', + type: 'Person', + }, + { + name: 'to', + type: 'Person', + }, + { + name: 'contents', + type: 'string', + }, + ], + }, + primaryType: 'Mail', + domain: { + name: 'Ether Mail', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + from: { + name: 'Cow', + wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + }, + to: { + name: 'Bob', + wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + }, + contents: 'Hello, Bob!', + }, + }; + const encodedTypedDataHash = getEncodedEip712Data(typedData, true); + const signature = await web3Eth.signTypedData(tempAcc.address, typedData, true); + const r = toUint8Array(signature.slice(0, 66)); + const s = toUint8Array(`0x${signature.slice(66, 130)}`); + const v = BigInt(hexToNumber(`0x${signature.slice(130, 132)}`)); + const recoveredPublicKey = bytesToHex( + ecrecover(toUint8Array(encodedTypedDataHash), v, r, s), + ); + + const recoveredAddress = `0x${keccak256(bytesToHex(recoveredPublicKey)).slice(-40)}`; + // eslint-disable-next-line jest/no-standalone-expect + expect(recoveredAddress).toBe(tempAcc.address); + }, + ); +}); diff --git a/packages/web3-eth/test/integration/web3_eth/submit_work.test.ts b/packages/web3-eth/test/integration/web3_eth/submit_work.test.ts new file mode 100644 index 00000000000..e8541bb60ca --- /dev/null +++ b/packages/web3-eth/test/integration/web3_eth/submit_work.test.ts @@ -0,0 +1,47 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Eth } from '../../../src'; +import { + closeOpenConnection, + getSystemTestBackend, + getSystemTestProvider, + itIf, +} from '../../fixtures/system_test_utils'; + +describe('Web3Eth.submitWork', () => { + let web3Eth: Web3Eth; + + beforeAll(() => { + web3Eth = new Web3Eth(getSystemTestProvider()); + }); + + afterAll(async () => { + await closeOpenConnection(web3Eth); + }); + + // Geth doesn't support eth_submitWork + itIf(getSystemTestBackend() !== 'geth')('should submit work', async () => { + const response = await web3Eth.submitWork( + '0x0000000000000001', + '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', + '0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000', + ); + // eslint-disable-next-line jest/no-standalone-expect + expect(response).toBe(false); + }); +}); diff --git a/packages/web3-eth/test/shared_fixtures b/packages/web3-eth/test/shared_fixtures new file mode 120000 index 00000000000..729a61c9ef4 --- /dev/null +++ b/packages/web3-eth/test/shared_fixtures @@ -0,0 +1 @@ +../../../fixtures \ No newline at end of file diff --git a/packages/web3-eth/test/tsconfig.json b/packages/web3-eth/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-eth/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-eth/test/unit/constructor.test.ts b/packages/web3-eth/test/unit/constructor.test.ts new file mode 100644 index 00000000000..5d08d50bebc --- /dev/null +++ b/packages/web3-eth/test/unit/constructor.test.ts @@ -0,0 +1,37 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// import Web3ProviderBase from '../../src/index' +// import {ProviderOptions} from '../../types' + +describe('constructs a PLACEHOLDER instance with expected properties', () => { + // let providerOptions: ProviderOptions + + beforeEach(() => { + // providerOptions = { + // providerUrl: 'http://127.0.0.1:8545' + // } + }); + + it('should construct with expected properties', () => { + // const web3ProviderBase = new Web3ProviderBase(providerOptions) + // expect(web3ProviderBase).toMatchObject({ + // _providerUrl: providerOptions.providerUrl + // }) + expect(true).toBeTruthy(); + }); +}); diff --git a/packages/web3-eth/test/unit/decoding.test.ts b/packages/web3-eth/test/unit/decoding.test.ts new file mode 100644 index 00000000000..94627d84575 --- /dev/null +++ b/packages/web3-eth/test/unit/decoding.test.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { AbiEventFragment, LogsInput } from 'web3-types'; +import { decodeEventABI } from '../../src'; +import { decodeEventABIData } from '../fixtures/decoding'; + +describe('decoding functions', () => { + describe('decode', () => { + describe('decodeEventABI', () => { + it.each(decodeEventABIData)( + '%s', + (event: AbiEventFragment & { signature: string }, inputs: LogsInput, output) => { + expect( + decodeEventABI(event, inputs, [ + { signature: event.signature } as unknown as AbiEventFragment & { + signature: string; + }, + ]), + ).toStrictEqual(output); + }, + ); + }); + }); +}); diff --git a/packages/web3-eth/test/unit/default_transaction_builder.test.ts b/packages/web3-eth/test/unit/default_transaction_builder.test.ts new file mode 100644 index 00000000000..0e065806393 --- /dev/null +++ b/packages/web3-eth/test/unit/default_transaction_builder.test.ts @@ -0,0 +1,721 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + EthExecutionAPI, + PopulatedUnsignedEip1559Transaction, + PopulatedUnsignedEip2930Transaction, + Transaction, + ValidChains, + Hardfork, +} from 'web3-types'; +import { Web3Context } from 'web3-core'; +import HttpProvider from 'web3-providers-http'; +import { isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; +import { + Eip1559NotSupportedError, + TransactionDataAndInputError, + UnableToPopulateNonceError, + UnsupportedTransactionTypeError, +} from 'web3-errors'; +import { defaultTransactionBuilder } from '../../src/utils/transaction_builder'; + +jest.mock('web3-rpc-methods'); +const expectedNetworkId = '0x4'; +jest.mock('web3-net', () => ({ + getId: jest.fn().mockImplementation(() => expectedNetworkId), +})); + +describe('defaultTransactionBuilder', () => { + const expectedFrom = '0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01'; + const expectedNonce = '0x42'; + const expectedGas = BigInt(21000); + const expectedGasLimit = expectedGas; + const expectedGasPrice = '0x4a817c800'; + const expectedBaseFeePerGas = '0x13afe8b904'; + const expectedMaxPriorityFeePerGas = '0x9502f900'; + const expectedMaxFeePerGas = '0x27f4d46b08'; + const expectedChainId = '0x1'; + const defaultTransactionType = '0x0'; + const transaction: Transaction = { + from: expectedFrom, + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: expectedGas, + gasLimit: expectedGasLimit, + gasPrice: expectedGasPrice, + type: '0x0', + maxFeePerGas: expectedMaxFeePerGas, + maxPriorityFeePerGas: expectedMaxPriorityFeePerGas, + data: '0x', + nonce: expectedNonce, + chain: 'mainnet', + hardfork: 'berlin', + chainId: expectedChainId, + networkId: expectedNetworkId, + common: { + customChain: { + name: 'foo', + networkId: expectedNetworkId, + chainId: expectedChainId, + }, + baseChain: 'mainnet', + hardfork: 'berlin', + }, + }; + const mockBlockData = { + parentHash: '0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54', + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + miner: '0xbb7b8287f3f0a933474a79eae42cbca977791171', + stateRoot: '0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d', + transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + difficulty: '0x4ea3f27bc', + number: '0x1b4', + gasLimit: '0x1388', + gasUsed: '0x1c96e73', + timestamp: '0x55ba467c', + extraData: '0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32', + mixHash: '0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843', + nonce: '0x1c11920a4', + totalDifficulty: '0x78ed983323d', + size: '0x220', + transactions: [ + '0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', + '0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', + '0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', + ], + uncles: [ + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + ], + hash: '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + baseFeePerGas: expectedBaseFeePerGas, + }; + let web3Context: Web3Context; + let getTransactionCountSpy: jest.SpyInstance; + + beforeEach(() => { + jest.spyOn(ethRpcMethods, 'getBlockByNumber').mockResolvedValue(mockBlockData); + getTransactionCountSpy = jest + .spyOn(ethRpcMethods, 'getTransactionCount') + .mockResolvedValue(expectedNonce); + jest.spyOn(ethRpcMethods, 'getGasPrice').mockResolvedValue(expectedGasPrice); + jest.spyOn(ethRpcMethods, 'getChainId').mockResolvedValue(expectedChainId); + + web3Context = new Web3Context(new HttpProvider('http://127.0.0.1')); + }); + + it.skip('should call override method', async () => { + const overrideFunction = jest.fn(); + const input = { ...transaction }; + await defaultTransactionBuilder({ + transaction: input, + web3Context, + // VALID_ETH_BASE_TYPES.HexString, + // '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', + // overrideFunction, + fillGasPrice: true, + }); + expect(overrideFunction).toHaveBeenCalledWith(input); + }); + + describe('should populate from', () => { + it('should use privateKey to populate', async () => { + const input = { ...transaction }; + delete input.from; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + privateKey: '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709', + fillGasPrice: true, + }); + expect(result.from).toBe(expectedFrom); + }); + + it('should use web3Context.defaultAccount to populate', async () => { + web3Context = new Web3Context({ + provider: new HttpProvider('http://127.0.0.1'), + config: { + defaultAccount: expectedFrom, + }, + }); + + const input = { ...transaction }; + delete input.from; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.from).toBe(expectedFrom); + }); + }); + + describe('should populate nonce', () => { + it('should throw UnableToPopulateNonceError', async () => { + const input = { ...transaction }; + delete input.from; + delete input.nonce; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + await expect( + defaultTransactionBuilder({ transaction: input, web3Context, fillGasPrice: true }), + ).rejects.toThrow(new UnableToPopulateNonceError()); + }); + + it('should use web3Eth.getTransactionCount to populate nonce', async () => { + const input = { ...transaction }; + delete input.nonce; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.nonce).toBe(expectedNonce); + expect(getTransactionCountSpy).toHaveBeenCalledWith( + web3Context.requestManager, + expectedFrom, + web3Context.defaultBlock, + ); + }); + + it('should use web3Eth.getTransactionCount to populate nonce without gas fill', async () => { + const input = { ...transaction }; + delete input.nonce; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: false, + }); + expect(result.nonce).toBe(expectedNonce); + expect(getTransactionCountSpy).toHaveBeenCalledWith( + web3Context.requestManager, + expectedFrom, + web3Context.defaultBlock, + ); + }); + }); + + describe('should populate value', () => { + it('should populate with 0x0 if not provided', async () => { + const input = { ...transaction }; + delete input.value; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.value).toBe('0x0'); + }); + + + it('should not populate with 0x0 if provided', async () => { + const input = { ...transaction }; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.value).not.toBe('0x0'); + }); + }); + + describe('should populate input/data', () => { + it('should populate input with 0x', async () => { + const input = { ...transaction }; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + delete input.data; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.input).toBe('0x'); + expect(result.data).toBeUndefined(); + }); + + it('should prefix input with 0x', async () => { + const input = { ...transaction }; + input.input = '123'; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + delete input.data; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.input).toBe('0x123'); + expect(result.data).toBeUndefined(); + }); + + it('should prefix data with 0x', async () => { + const input = { ...transaction }; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + input.data = '123'; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.input).toBeUndefined(); + expect(result.data).toBe('0x123'); + }); + + it('should throw TransactionDataAndInputError', async () => { + const input = { ...transaction }; + input.data = '0x3211'; + input.input = '0x1233'; + + await expect( + defaultTransactionBuilder({ + transaction: input, + web3Context, + }), + ).rejects.toThrow(TransactionDataAndInputError); + }); + }); + + describe('should populate chain', () => { + it('should populate with mainnet', async () => { + const input = { ...transaction }; + delete input.chain; + delete input.common; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.chain).toBe('mainnet'); + }); + + it('should use web3Context.defaultChain to populate', async () => { + web3Context = new Web3Context(new HttpProvider('http://127.0.0.1')); + + const input = { ...transaction }; + delete input.chain; + delete input.common; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.chain).toBe(web3Context.defaultChain); + }); + }); + + describe('should populate hardfork', () => { + it('should populate with london', async () => { + const input = { ...transaction }; + delete input.hardfork; + delete input.common; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.hardfork).toBe('london'); + }); + + it('should use web3Context.defaultHardfork to populate', async () => { + web3Context = new Web3Context(new HttpProvider('http://127.0.0.1')); + + const input = { ...transaction }; + delete input.hardfork; + delete input.common; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.hardfork).toBe(web3Context.defaultHardfork); + }); + + it('should use web3Context.defaultCommon to populate', async () => { + const baseChain: ValidChains = 'mainnet'; + const hardfork: Hardfork = 'berlin'; + const customCommon = { + customChain: { + name: 'custom', + networkId: '0x3', + chainId: '0x1', + }, + baseChain, + hardfork, + }; + + web3Context = new Web3Context({ + provider: new HttpProvider('http://127.0.0.1'), + config: { + defaultCommon: customCommon, + }, + }); + + const input = { ...transaction }; + delete input.common; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.common).toStrictEqual(customCommon); + }); + }); + + describe('should populate chainId', () => { + it('should populate with web3Eth.getChainId', async () => { + const input = { ...transaction }; + delete input.chainId; + delete input.common; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.chainId).toBe(expectedChainId); + }); + }); + + describe('should populate networkId', () => { + it('should populate with web3Net.getId', async () => { + const input = { ...transaction }; + delete input.networkId; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.networkId).toBe(expectedNetworkId); + }); + }); + + describe('should populate gasLimit', () => { + it('should populate with gas', async () => { + const input = { ...transaction }; + delete input.gasLimit; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.gasLimit).toBe(expectedGasLimit); + }); + }); + + describe('should populate type', () => { + it('should throw UnsupportedTransactionTypeError', async () => { + const input = { ...transaction }; + input.type = '0x80'; // // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2718.md#transactions + + await expect( + defaultTransactionBuilder({ transaction: input, web3Context, fillGasPrice: true }), + ).rejects.toThrow(new UnsupportedTransactionTypeError(input.type)); + }); + + it('should use web3Context.defaultTransactionType to populate', async () => { + web3Context = new Web3Context({ + provider: new HttpProvider('http://127.0.0.1'), + config: { + defaultTransactionType, + }, + }); + + const input = { ...transaction }; + delete input.gas; + delete input.gasLimit; + delete input.gasPrice; + delete input.maxFeePerGas; + delete input.maxPriorityFeePerGas; + delete input.accessList; + delete input.type; + + input.hardfork = 'istanbul'; + if (!isNullish(input.common)) input.common.hardfork = 'istanbul'; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.type).toBe(web3Context.defaultTransactionType); + }); + }); + + describe('should populate gasPrice', () => { + it('should populate with web3Eth.getGasPrice (tx.type 0x0)', async () => { + const input = { ...transaction }; + delete input.gasPrice; + delete input.maxFeePerGas; + delete input.maxPriorityFeePerGas; + input.type = '0x0'; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.gasPrice).toBe(expectedGasPrice); + }); + + it('should populate with web3Eth.getGasPrice (tx.type 0x1)', async () => { + const input = { ...transaction }; + delete input.gasPrice; + delete input.maxFeePerGas; + delete input.maxPriorityFeePerGas; + input.type = '0x1'; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.gasPrice).toBe(expectedGasPrice); + }); + }); + + describe('should populate accessList', () => { + it('should populate with [] (tx.type 0x1)', async () => { + const input = { ...transaction }; + delete input.accessList; + delete input.maxFeePerGas; + delete input.maxPriorityFeePerGas; + input.type = '0x1'; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.accessList).toStrictEqual([]); + }); + + it('should populate with [] (tx.type 0x2)', async () => { + const input = { ...transaction }; + delete input.accessList; + delete input.gasPrice; + input.type = '0x2'; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.accessList).toStrictEqual([]); + }); + }); + + describe('should populate maxPriorityFeePerGas and maxFeePerGas', () => { + it('should throw Eip1559NotSupportedError', async () => { + const mockBlockDataNoBaseFeePerGas = { ...mockBlockData, baseFeePerGas: undefined }; + jest.spyOn(ethRpcMethods, 'getBlockByNumber').mockImplementation( + // @ts-expect-error - Mocked implementation doesn't have correct method signature + // (i.e. requestManager, blockNumber, hydrated params), but that doesn't matter for the test + () => mockBlockDataNoBaseFeePerGas, + ); + + const input = { ...transaction }; + delete input.gasPrice; + input.type = '0x2'; + + await expect( + defaultTransactionBuilder({ transaction: input, web3Context, fillGasPrice: true }), + ).rejects.toThrow(new Eip1559NotSupportedError()); + }); + + it('should populate with gasPrice', async () => { + const input = { ...transaction }; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + delete input.gasPrice; + input.type = '0x2'; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + + expect(result.maxPriorityFeePerGas).toBeDefined(); + expect(result.gasPrice).toBeUndefined(); + }); + + it('should populate with default maxPriorityFeePerGas and calculated maxFeePerGas (no maxPriorityFeePerGas and maxFeePerGas)', async () => { + const input = { ...transaction }; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + delete input.gasPrice; + input.type = '0x2'; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.maxPriorityFeePerGas).toBe(expectedMaxPriorityFeePerGas); // 2.5 Gwei, hardcoded in defaultTransactionBuilder; + expect(result.maxFeePerGas).toBe(expectedMaxFeePerGas); + }); + + it('should populate with default maxPriorityFeePerGas and calculated maxFeePerGas (no maxFeePerGas)', async () => { + const input = { ...transaction }; + delete input.maxFeePerGas; + delete input.gasPrice; + input.type = '0x2'; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.maxPriorityFeePerGas).toBe(expectedMaxPriorityFeePerGas); // 2.5 Gwei, hardcoded in defaultTransactionBuilder; + expect(result.maxFeePerGas).toBe(expectedMaxFeePerGas); + }); + + it('should populate with default maxPriorityFeePerGas and calculated maxFeePerGas (no maxPriorityFeePerGas)', async () => { + const input = { ...transaction }; + delete input.maxPriorityFeePerGas; + delete input.gasPrice; + input.type = '0x2'; + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.maxPriorityFeePerGas).toBe(expectedMaxPriorityFeePerGas); // 2.5 Gwei, hardcoded in defaultTransactionBuilder; + expect(result.maxFeePerGas).toBe(expectedMaxFeePerGas); + }); + + it('should populate with web3Context.defaultMaxPriorityFeePerGas and calculated maxFeePerGas (no maxPriorityFeePerGas and maxFeePerGas)', async () => { + const input = { ...transaction }; + delete input.maxPriorityFeePerGas; + delete input.maxFeePerGas; + delete input.gasPrice; + input.type = '0x2'; + + web3Context = new Web3Context({ + provider: new HttpProvider('http://127.0.0.1'), + config: { + defaultMaxPriorityFeePerGas: expectedMaxPriorityFeePerGas, + }, + }); + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.maxPriorityFeePerGas).toBe(web3Context.defaultMaxPriorityFeePerGas); // 2.5 Gwei, hardcoded in defaultTransactionBuilder; + expect(result.maxFeePerGas).toBe(expectedMaxFeePerGas); + }); + + it('should populate with web3Context.defaultMaxPriorityFeePerGas and calculated maxFeePerGas (no maxFeePerGas)', async () => { + const input = { ...transaction }; + delete input.maxFeePerGas; + delete input.gasPrice; + input.type = '0x2'; + + web3Context = new Web3Context({ + provider: new HttpProvider('http://127.0.0.1'), + config: { + defaultMaxPriorityFeePerGas: expectedMaxPriorityFeePerGas, + }, + }); + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.maxPriorityFeePerGas).toBe(web3Context.defaultMaxPriorityFeePerGas); // 2.5 Gwei, hardcoded in defaultTransactionBuilder; + expect(result.maxFeePerGas).toBe(expectedMaxFeePerGas); + }); + + it('should populate with web3Context.defaultMaxPriorityFeePerGas and calculated maxFeePerGas (no maxPriorityFeePerGas)', async () => { + const input = { ...transaction }; + delete input.maxPriorityFeePerGas; + delete input.gasPrice; + input.type = '0x2'; + + web3Context = new Web3Context({ + provider: new HttpProvider('http://127.0.0.1'), + config: { + defaultMaxPriorityFeePerGas: expectedMaxPriorityFeePerGas, + }, + }); + + const result = await defaultTransactionBuilder({ + transaction: input, + web3Context, + fillGasPrice: true, + }); + expect(result.maxPriorityFeePerGas).toBe(web3Context.defaultMaxPriorityFeePerGas); // 2.5 Gwei, hardcoded in defaultTransactionBuilder; + expect(result.maxFeePerGas).toBe(expectedMaxFeePerGas); + }); + }); +}); diff --git a/packages/web3-eth/test/unit/detect_transaction_type.test.ts b/packages/web3-eth/test/unit/detect_transaction_type.test.ts new file mode 100644 index 00000000000..4d583bbad17 --- /dev/null +++ b/packages/web3-eth/test/unit/detect_transaction_type.test.ts @@ -0,0 +1,89 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { InvalidPropertiesForTransactionTypeError } from 'web3-errors'; +import { Web3Context } from 'web3-core'; +import { EthExecutionAPI } from 'web3-types'; +import HttpProvider from 'web3-providers-http'; + +import { detectTransactionType } from '../../src/utils/detect_transaction_type'; +import { + transactionType0x0, + transactionType0x1, + transactionType0x2, + transactionTypeUndefined, + transactionTypeValidationError, +} from '../fixtures/detect_transaction_type'; + + +jest.mock('../../src/rpc_method_wrappers'); + +describe('detectTransactionType', () => { + afterAll(() => { + jest.resetAllMocks(); + }); + + describe('should detect transaction type 0x0', () => { + const web3Context = new Web3Context({ + provider: new HttpProvider('http://127.0.0.1:80'), + }); + it.each(transactionType0x0)('%s', async transaction => { + expect(detectTransactionType(transaction, web3Context)).toBe('0x0'); + }); + }); + + describe('should detect transaction type 0x1', () => { + const web3Context = new Web3Context({ + provider: new HttpProvider('http://127.0.0.1:80'), + }); + it.each(transactionType0x1)('%s', async transaction => { + expect(detectTransactionType(transaction, web3Context)).toBe('0x1'); + }); + }); + + describe('should detect transaction type 0x2', () => { + const web3Context = new Web3Context({ + provider: new HttpProvider('http://127.0.0.1:80'), + }); + it.each(transactionType0x2)('%s', async transaction => { + expect(detectTransactionType(transaction, web3Context)).toBe('0x2'); + }); + }); + + describe('should not be able to detect transaction type, returning undefined', () => { + const web3Context = new Web3Context({ + provider: new HttpProvider('http://127.0.0.1:80'), + }); + it.each(transactionTypeUndefined)('%s', async transaction => { + expect(detectTransactionType(transaction, web3Context)).toBeUndefined(); + }); + }); + + describe('should throw validation error', () => { + const web3Context = new Web3Context({ + provider: new HttpProvider('http://127.0.0.1:80'), + }); + it.each(transactionTypeValidationError)('%s', async transaction => { + let err; + try { + detectTransactionType(transaction, web3Context); + } catch (error) { + err = error; + } + expect(err).toBeInstanceOf(InvalidPropertiesForTransactionTypeError); + }); + }); +}); diff --git a/packages/web3-eth/test/unit/errors.test.ts b/packages/web3-eth/test/unit/errors.test.ts new file mode 100644 index 00000000000..e51cb8764a8 --- /dev/null +++ b/packages/web3-eth/test/unit/errors.test.ts @@ -0,0 +1,33 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { InvalidTransactionCall, InvalidTransactionWithSender } from 'web3-errors'; +import { InvalidTransactionWithSenderData, InvalidTransactionCallData } from '../fixtures/errors'; + +describe('errors', () => { + it.each(InvalidTransactionWithSenderData)('%s', (input, output) => { + expect(() => { + throw new InvalidTransactionWithSender(input); + }).toThrow(output); + }); + + it.each(InvalidTransactionCallData)('%s', (input, output) => { + expect(() => { + throw new InvalidTransactionCall(input); + }).toThrow(output); + }); +}); diff --git a/packages/web3-eth/test/unit/format_rpc_methods.test.ts b/packages/web3-eth/test/unit/format_rpc_methods.test.ts new file mode 100644 index 00000000000..23156d96d28 --- /dev/null +++ b/packages/web3-eth/test/unit/format_rpc_methods.test.ts @@ -0,0 +1,55 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ethRpcMethods } from 'web3-rpc-methods'; +import { DEFAULT_RETURN_FORMAT } from 'web3-types'; +import { numberToHex, isNullish } from 'web3-utils'; +import * as rpcMethodWrappers from '../../src/rpc_method_wrappers'; +import { getPastLogsValidFormatData } from '../fixtures/web3_eth_methods_with_parameters'; +import Web3Eth from '../../src/index'; + +jest.mock('web3-rpc-methods'); +describe('web3_eth_methods formatting', () => { + let web3Eth: Web3Eth; + + beforeAll(() => { + web3Eth = new Web3Eth('http://127.0.0.1:8545'); + }); + + describe('getPastLogs makes sure data is prepared properly', () => { + it.each(getPastLogsValidFormatData)('input: %s\nrpcMethodParameters: %s', async filter => { + jest.spyOn(ethRpcMethods, 'getLogs').mockResolvedValue(['']); + await rpcMethodWrappers.getLogs(web3Eth, filter, DEFAULT_RETURN_FORMAT); + let { fromBlock, toBlock } = filter; + if ( + !isNullish(filter.fromBlock) && + (typeof filter.fromBlock === 'bigint' || typeof filter.fromBlock === 'number') + ) + fromBlock = numberToHex(filter.fromBlock); + if ( + !isNullish(filter.toBlock) && + (typeof filter.toBlock === 'bigint' || typeof filter.toBlock === 'number') + ) + toBlock = numberToHex(filter.toBlock); + expect(ethRpcMethods.getLogs).toHaveBeenCalledWith(web3Eth.requestManager, { + ...filter, + toBlock, + fromBlock, + }); + }); + }); +}); diff --git a/packages/web3-eth/test/unit/format_transaction.test.ts b/packages/web3-eth/test/unit/format_transaction.test.ts new file mode 100644 index 00000000000..028ac043b20 --- /dev/null +++ b/packages/web3-eth/test/unit/format_transaction.test.ts @@ -0,0 +1,111 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, Transaction } from 'web3-types'; +import { TransactionDataAndInputError } from 'web3-errors'; + +import { formatTransaction } from '../../src/utils/format_transaction'; +import { + bytesAsHexStringTransaction, + numbersAsBigIntTransaction, + numbersAsHexStringTransaction, + numbersAsStringTransaction, + numbersAsNumberTransaction, + bytesAsUint8ArrayTransaction, +} from '../fixtures/format_transaction'; + +const transactionsDataForNumberTypes: Record> = { + [FMT_NUMBER.BIGINT]: numbersAsBigIntTransaction, + [FMT_NUMBER.HEX]: numbersAsHexStringTransaction, + [FMT_NUMBER.NUMBER]: numbersAsNumberTransaction, + [FMT_NUMBER.STR]: numbersAsStringTransaction, +}; + +const transactionsDataForByteTypes: Record> = { + [FMT_BYTES.HEX]: bytesAsHexStringTransaction, + [FMT_BYTES.UINT8ARRAY]: bytesAsUint8ArrayTransaction, +}; + +describe('formatTransaction', () => { + it.skip('should call override method', () => { + const overrideFunction = jest.fn(); + formatTransaction(numbersAsHexStringTransaction, DEFAULT_RETURN_FORMAT); + expect(overrideFunction).toHaveBeenCalledWith(numbersAsHexStringTransaction); + }); + + describe('numbers fields', () => { + for (const sourceType of Object.keys(transactionsDataForNumberTypes)) { + for (const destinationType of Object.keys(transactionsDataForNumberTypes)) { + it(`should convert "${sourceType}" properties to "${destinationType}"`, () => { + // formatTransaction replaces gasLimit with gas property to follow ETH spec + // https://github.com/ethereum/execution-apis/issues/283 + const expectedFormattedTransaction = + transactionsDataForNumberTypes[destinationType as FMT_NUMBER]; + delete expectedFormattedTransaction.gasLimit; + // formatTransaction replaces data with input to follow ETH spec + delete expectedFormattedTransaction.data; + + expect( + formatTransaction( + transactionsDataForNumberTypes[sourceType as FMT_NUMBER], + { + ...DEFAULT_RETURN_FORMAT, + number: destinationType as FMT_NUMBER, + }, + ), + ).toStrictEqual(expectedFormattedTransaction); + }); + } + } + }); + + describe('bytes fields', () => { + for (const sourceType of Object.keys(transactionsDataForByteTypes)) { + for (const destinationType of Object.keys(transactionsDataForByteTypes)) { + it(`should convert "${sourceType}" properties to "${destinationType}"`, () => { + // formatTransaction replaces gasLimit with gas property to follow ETH spec + // https://github.com/ethereum/execution-apis/issues/283 + const expectedFormattedTransaction = + transactionsDataForByteTypes[destinationType as FMT_BYTES]; + delete expectedFormattedTransaction.gasLimit; + // formatTransaction replaces data with input to follow ETH spec + delete expectedFormattedTransaction.data; + + expect( + formatTransaction(transactionsDataForByteTypes[sourceType as FMT_BYTES], { + ...DEFAULT_RETURN_FORMAT, + bytes: destinationType as FMT_BYTES, + }), + ).toStrictEqual(expectedFormattedTransaction); + }); + } + } + }); + + it('Should throw a TransactionDataAndInputError error', () => { + const transaction: Transaction = { + data: '0x00', + input: '0x01', + }; + + expect(() => formatTransaction(transaction)).toThrow( + new TransactionDataAndInputError({ + data: transaction.data as string, + input: transaction.input as string, + }), + ); + }); +}); diff --git a/packages/web3-eth/test/unit/jest.config.js b/packages/web3-eth/test/unit/jest.config.js new file mode 100644 index 00000000000..a69a1a92811 --- /dev/null +++ b/packages/web3-eth/test/unit/jest.config.js @@ -0,0 +1,34 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-eth-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-eth/test/unit/prepare_transaction_for_signing.test.ts b/packages/web3-eth/test/unit/prepare_transaction_for_signing.test.ts new file mode 100644 index 00000000000..cf301264407 --- /dev/null +++ b/packages/web3-eth/test/unit/prepare_transaction_for_signing.test.ts @@ -0,0 +1,112 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { EthExecutionAPI } from 'web3-types'; +import { Web3Context } from 'web3-core'; +import HttpProvider from 'web3-providers-http'; +import { isNullish } from 'web3-validator'; +import { + AccessListEIP2930Transaction, + FeeMarketEIP1559Transaction, + Transaction, +} from 'web3-eth-accounts'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { bytesToHex, hexToBytes } from 'web3-utils'; +import { prepareTransactionForSigning } from '../../src/utils/prepare_transaction_for_signing'; +import { validTransactions } from '../fixtures/prepare_transaction_for_signing'; + +describe('prepareTransactionForSigning', () => { + const web3Context = new Web3Context({ + provider: new HttpProvider('http://127.0.0.1'), + config: { defaultNetworkId: '0x1' }, + }); + + describe('should return an web3-utils/tx instance with expected properties', () => { + it.each(validTransactions)( + 'mockBlock: %s\nexpectedTransaction: %s\nexpectedPrivateKey: %s\nexpectedAddress: %s\nexpectedRlpEncodedTransaction: %s\nexpectedTransactionHash: %s\nexpectedMessageToSign: %s\nexpectedV: %s\nexpectedR: %s\nexpectedS: %s', + async ( + mockBlock, + expectedTransaction, + expectedPrivateKey, + expectedAddress, + expectedRlpEncodedTransaction, + expectedTransactionHash, + expectedMessageToSign, + expectedV, + expectedR, + expectedS, + ) => { + // (i.e. requestManager, blockNumber, hydrated params), but that doesn't matter for the test + jest.spyOn(ethRpcMethods, 'estimateGas').mockImplementation( + // @ts-expect-error - Mocked implementation doesn't have correct method signature + () => expectedTransaction.gas, + ); + // @ts-expect-error - Mocked implementation doesn't have correct method signature + jest.spyOn(ethRpcMethods, 'getBlockByNumber').mockImplementation(() => mockBlock); + + const ethereumjsTx = await prepareTransactionForSigning( + expectedTransaction, + web3Context, + expectedPrivateKey, + true, + ); + + // should produce an web3-utils/tx instance + expect( + ethereumjsTx instanceof Transaction || + ethereumjsTx instanceof AccessListEIP2930Transaction || + ethereumjsTx instanceof FeeMarketEIP1559Transaction, + ).toBeTruthy(); + expect(ethereumjsTx.sign).toBeDefined(); + + // should sign transaction + const signedTransaction = ethereumjsTx.sign( + hexToBytes(expectedPrivateKey.substring(2)), + ); + + const senderAddress = signedTransaction.getSenderAddress().toString(); + expect(senderAddress).toBe(expectedAddress.toLowerCase()); + + // should be able to obtain expectedRlpEncodedTransaction + const rlpEncodedTransaction = bytesToHex(signedTransaction.serialize()); + expect(rlpEncodedTransaction).toBe(expectedRlpEncodedTransaction); + + // should be able to obtain expectedTransactionHash + const transactionHash = bytesToHex(signedTransaction.hash()); + expect(transactionHash).toBe(expectedTransactionHash); + + // should be able to obtain expectedMessageToSign + const messageToSign = bytesToHex(signedTransaction.getMessageToSign()); + expect(messageToSign).toBe(expectedMessageToSign); + // should have expected v, r, and s + const v = !isNullish(signedTransaction.v) + ? `0x${signedTransaction.v.toString(16)}` + : ''; + const r = !isNullish(signedTransaction.r) + ? `0x${signedTransaction.r.toString(16)}` + : ''; + const s = !isNullish(signedTransaction.s) + ? `0x${signedTransaction.s.toString(16)}` + : ''; + expect(v).toBe(expectedV); + expect(r).toBe(expectedR); + expect(s).toBe(expectedS); + }, + ); + }); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/call.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/call.test.ts new file mode 100644 index 00000000000..e981aef6a10 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/call.test.ts @@ -0,0 +1,84 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { + Web3EthExecutionAPI, + ETH_DATA_FORMAT, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + FMT_BYTES, +} from 'web3-types'; +import { isNullish } from 'web3-validator'; +import { format } from 'web3-utils'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { call } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/call'; +import { formatTransaction } from '../../../src'; + +jest.mock('web3-rpc-methods'); + +describe('call', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.call with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputTransaction, inputBlockNumber] = inputParameters; + const inputTransactionFormatted = formatTransaction(inputTransaction, ETH_DATA_FORMAT); + + let inputBlockNumberFormatted; + + if (isNullish(inputBlockNumber)) { + inputBlockNumberFormatted = web3Context.defaultBlock; + } else { + inputBlockNumberFormatted = format( + { format: 'uint' }, + inputBlockNumber, + ETH_DATA_FORMAT, + ); + } + + await call(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.call).toHaveBeenCalledWith( + web3Context.requestManager, + inputTransactionFormatted, + inputBlockNumberFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'bytes' }, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.call as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await call(web3Context, ...inputParameters, expectedReturnFormat); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/createAccessList.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/createAccessList.test.ts new file mode 100644 index 00000000000..0ffeb0dcad6 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/createAccessList.test.ts @@ -0,0 +1,83 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { Web3EthExecutionAPI, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER } from 'web3-types'; +import { isNullish } from 'web3-validator'; +import { format } from 'web3-utils'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { createAccessList } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/createAccessList'; +import { formatTransaction } from '../../../src'; + +jest.mock('web3-rpc-methods'); + +describe('createAccessList', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.createAccessList with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputTransaction, inputBlockNumber] = inputParameters; + const inputTransactionFormatted = formatTransaction(inputTransaction, ETH_DATA_FORMAT); + + let inputBlockNumberFormatted; + + if (isNullish(inputBlockNumber)) { + inputBlockNumberFormatted = web3Context.defaultBlock; + } else { + inputBlockNumberFormatted = format( + { format: 'uint' }, + inputBlockNumber, + ETH_DATA_FORMAT, + ); + } + + await createAccessList(web3Context, ...inputParameters); + expect(ethRpcMethods.createAccessList).toHaveBeenCalledWith( + web3Context.requestManager, + inputTransactionFormatted, + inputBlockNumberFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'bytes' }, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.createAccessList as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await createAccessList( + web3Context, + inputParameters[0], + inputParameters[1], + expectedReturnFormat, + ); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/estimate_gas.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/estimate_gas.test.ts new file mode 100644 index 00000000000..6dc605b67e3 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/estimate_gas.test.ts @@ -0,0 +1,84 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { isNullish } from 'web3-validator'; +import { format } from 'web3-utils'; +import { + ETH_DATA_FORMAT, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + FMT_BYTES, + Web3EthExecutionAPI, +} from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { estimateGas } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/estimate_gas'; +import { formatTransaction } from '../../../src'; + +jest.mock('web3-rpc-methods'); + +describe('call', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.estimateGas with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputTransaction, inputBlockNumber] = inputParameters; + const inputTransactionFormatted = formatTransaction(inputTransaction, ETH_DATA_FORMAT); + + let inputBlockNumberFormatted; + + if (isNullish(inputBlockNumber)) { + inputBlockNumberFormatted = web3Context.defaultBlock; + } else { + inputBlockNumberFormatted = format( + { format: 'uint' }, + inputBlockNumber, + ETH_DATA_FORMAT, + ); + } + + await estimateGas(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.estimateGas).toHaveBeenCalledWith( + web3Context.requestManager, + inputTransactionFormatted, + inputBlockNumberFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'uint' }, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.estimateGas as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await estimateGas(web3Context, ...inputParameters, expectedReturnFormat); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/call.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/call.ts new file mode 100644 index 00000000000..e8949e97eab --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/call.ts @@ -0,0 +1,79 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, BlockTags, TransactionCall } from 'web3-types'; + +export const mockRpcResponse = '0x000000000000000000000000000000000000000000000000000000000000000a'; + +const transaction: TransactionCall = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + data: '0x', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockNumber + * - uncleIndex + * - returnFormat + * - mockRpcResponse + */ +type TestData = [string, [TransactionCall, BlockNumberOrTag | undefined]]; +export const testData: TestData[] = [ + // blockNumber = BlockTag + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.LATEST`, + [transaction, BlockTags.LATEST], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.EARLIEST`, + [transaction, BlockTags.EARLIEST], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.PENDING`, + [transaction, BlockTags.PENDING], + ], + [`${JSON.stringify(transaction)}\nblockNumber = BlockTags.SAFE`, [transaction, BlockTags.SAFE]], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.FINALIZED`, + [transaction, BlockTags.FINALIZED], + ], + // blockNumber = Numbers + [`${JSON.stringify(transaction)}\nblockNumber = "0x4b7"`, [transaction, '0x4b7']], + [`${JSON.stringify(transaction)}\nblockNumber = 1207`, [transaction, 1207]], + [`${JSON.stringify(transaction)}\nblockNumber = "1207"`, [transaction, '1207']], + [ + `${JSON.stringify(transaction)}\nblockNumber = BigInt("0x4b7")`, + [transaction, BigInt('0x4b7')], + ], + [`${JSON.stringify(transaction)}\nblockNumber = undefined`, [transaction, undefined]], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/createAccessList.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/createAccessList.ts new file mode 100644 index 00000000000..1984c34c50a --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/createAccessList.ts @@ -0,0 +1,89 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + BlockNumberOrTag, + BlockTags, + DataFormat, + DEFAULT_RETURN_FORMAT, + TransactionForAccessList, +} from 'web3-types'; + +export const mockRpcResponse = + '{"accessList":[{"address":"0x15859bdf5aff2080a9968f6a410361e9598df62f","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]}],"gasUsed":"0x7671"}'; + +const transaction: TransactionForAccessList = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x940b25304947ae863568B3804434EC77E2160b87', + value: '0x0', + gas: '0x5208', + gasPrice: '0x4a817c800', + data: '0x9a67c8b100000000000000000000000000000000000000000000000000000000000004d0', +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - transaction + * - blocknumberortag + * - mockRpcResponse + */ +type TestData = [string, [TransactionForAccessList, BlockNumberOrTag | undefined, DataFormat]]; +export const testData: TestData[] = [ + // blockNumber = BlockTag + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.LATEST`, + [transaction, BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.EARLIEST`, + [transaction, BlockTags.EARLIEST, DEFAULT_RETURN_FORMAT], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.PENDING`, + [transaction, BlockTags.PENDING, DEFAULT_RETURN_FORMAT], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.SAFE`, + [transaction, BlockTags.SAFE, DEFAULT_RETURN_FORMAT], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.FINALIZED`, + [transaction, BlockTags.FINALIZED, DEFAULT_RETURN_FORMAT], + ], + // blockNumber = Numbers + [ + `${JSON.stringify(transaction)}\nblockNumber = "0x4b7"`, + [transaction, '0x4b7', DEFAULT_RETURN_FORMAT], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = 1207`, + [transaction, 1207, DEFAULT_RETURN_FORMAT], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = "1207"`, + [transaction, '1207', DEFAULT_RETURN_FORMAT], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = BigInt("0x4b7")`, + [transaction, BigInt('0x4b7'), DEFAULT_RETURN_FORMAT], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = undefined`, + [transaction, BlockTags.LATEST, DEFAULT_RETURN_FORMAT], + ], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/estimate_gas.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/estimate_gas.ts new file mode 100644 index 00000000000..2dfc07e11fd --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/estimate_gas.ts @@ -0,0 +1,79 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, BlockTags, Transaction } from 'web3-types'; + +export const mockRpcResponse = '0x5208'; + +const transaction: Transaction = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + data: '0x', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockNumber + * - uncleIndex + * - returnFormat + * - mockRpcResponse + */ +type TestData = [string, [Transaction, BlockNumberOrTag | undefined]]; +export const testData: TestData[] = [ + // blockNumber = BlockTag + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.LATEST`, + [transaction, BlockTags.LATEST], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.EARLIEST`, + [transaction, BlockTags.EARLIEST], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.PENDING`, + [transaction, BlockTags.PENDING], + ], + [`${JSON.stringify(transaction)}\nblockNumber = BlockTags.SAFE`, [transaction, BlockTags.SAFE]], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.FINALIZED`, + [transaction, BlockTags.FINALIZED], + ], + // blockNumber = Numbers + [`${JSON.stringify(transaction)}\nblockNumber = "0x4b7"`, [transaction, '0x4b7']], + [`${JSON.stringify(transaction)}\nblockNumber = 1207`, [transaction, 1207]], + [`${JSON.stringify(transaction)}\nblockNumber = "1207"`, [transaction, '1207']], + [ + `${JSON.stringify(transaction)}\nblockNumber = BigInt("0x4b7")`, + [transaction, BigInt('0x4b7')], + ], + [`${JSON.stringify(transaction)}\nblockNumber = undefined`, [transaction, undefined]], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_balance.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_balance.ts new file mode 100644 index 00000000000..6c933d470ea --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_balance.ts @@ -0,0 +1,42 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Address, BlockNumberOrTag, BlockTags } from 'web3-types'; + +export const mockRpcResponse = '0xe8d4a51000'; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - address + * - blockNumber + */ +type TestData = [string, [Address, BlockNumberOrTag | undefined]]; +export const testData: TestData[] = [ + ['blockNumber = BlockTags.LATEST', [address, BlockTags.LATEST]], + ['blockNumber = BlockTags.EARLIEST', [address, BlockTags.EARLIEST]], + ['blockNumber = BlockTags.PENDING', [address, BlockTags.PENDING]], + ['blockNumber = BlockTags.SAFE', [address, BlockTags.SAFE]], + ['blockNumber = BlockTags.FINALIZED', [address, BlockTags.FINALIZED]], + ['blockNumber = "0x4b7"', [address, '0x4b7']], + ['blockNumber = 1207', [address, 1207]], + ['blockNumber = "1207"', [address, '1207']], + ['blockNumber = BigInt("0x4b7")', [address, BigInt('0x4b7')]], + ['blockNumber = undefined', [address, undefined]], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_block.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_block.ts new file mode 100644 index 00000000000..4474bec4972 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_block.ts @@ -0,0 +1,146 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Block, TransactionInfo, BlockNumberOrTag, BlockTags, Bytes } from 'web3-types'; +import { hexToBytes } from 'web3-utils'; + +export const mockRpcResponse: Block = { + parentHash: '0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54', + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + miner: '0xbb7b8287f3f0a933474a79eae42cbca977791171', + stateRoot: '0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d', + transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + difficulty: '0x4ea3f27bc', + number: '0x1b4', + gasLimit: '0x1388', + gasUsed: '0x1c96e73', + timestamp: '0x55ba467c', + extraData: '0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32', + mixHash: '0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843', + nonce: '0x1c11920a4', + totalDifficulty: '0x78ed983323d', + size: '0x220', + transactions: [ + '0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', + '0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', + '0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', + ], + uncles: [ + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + ], + hash: '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + baseFeePerGas: '0x13afe8b904', +}; +const hydratedTransaction: TransactionInfo = { + blockHash: '0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2', + blockNumber: '0x5daf3b', + from: '0xa7d9ddbe1f17865597fbd27ec712455208b6b76d', + gas: '0xc350', + gasPrice: '0x4a817c800', + hash: '0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', + input: '0x68656c6c6f21', + nonce: '0x15', + to: '0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb', + transactionIndex: '0x41', + value: '0xf3dbb76162000', + v: '0x25', + r: '0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea', + s: '0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c', + type: '0x0', +}; +export const mockRpcResponseHydrated: Block = { + ...mockRpcResponse, + transactions: [hydratedTransaction, hydratedTransaction, hydratedTransaction], +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockNumber + * - hydrated + */ +type TestData = [string, [Bytes | BlockNumberOrTag | undefined, boolean]]; +export const testData: TestData[] = [ + // Testing block cases, hydrated = false + // blockNumber = bytes + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8", hydrated = false', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', false], + ], + [ + 'blockNumber = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"), hydrated = false', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'), false], + ], + [ + 'blockNumber = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8"), hydrated = false', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + false, + ], + ], + // blockNumber = BlockTag + ['blockNumber = BlockTags.LATEST, hydrated = false', [BlockTags.LATEST, false]], + ['blockNumber = BlockTags.EARLIEST, hydrated = false', [BlockTags.EARLIEST, false]], + ['blockNumber = BlockTags.PENDING, hydrated = false', [BlockTags.PENDING, false]], + ['blockNumber = BlockTags.SAFE, hydrated = false', [BlockTags.SAFE, false]], + ['blockNumber = BlockTags.FINALIZED, hydrated = false', [BlockTags.FINALIZED, false]], + // blockNumber = Numbers + ['blockNumber = "0x4b7", hydrated = false', ['0x4b7', false]], + ['blockNumber = 1207, hydrated = false', [1207, false]], + ['blockNumber = "1207", hydrated = false', ['1207', false]], + ['blockNumber = BigInt("0x4b7"), hydrated = false', [BigInt('0x4b7'), false]], + ['blockNumber = undefined, hydrated = false', [undefined, false]], + + // Testing block cases, hydrated = true + // blockNumber = bytes + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8", hydrated = true', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', true], + ], + [ + 'blockNumber = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"), hydrated = true', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'), true], + ], + [ + 'blockNumber = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8"), hydrated = true', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + true, + ], + ], + // blockNumber = BlockTag + ['blockNumber = BlockTags.LATEST, hydrated = true', [BlockTags.LATEST, true]], + ['blockNumber = BlockTags.EARLIEST, hydrated = true', [BlockTags.EARLIEST, true]], + ['blockNumber = BlockTags.PENDING, hydrated = true', [BlockTags.PENDING, true]], + // // blockNumber = Numbers + ['blockNumber = "0x4b7", hydrated = true', ['0x4b7', true]], + ['blockNumber = 1207, hydrated = true', [1207, true]], + ['blockNumber = "1207", hydrated = true', ['1207', true]], + ['blockNumber = BigInt("0x4b7"), hydrated = true', [BigInt('0x4b7'), true]], + ['blockNumber = undefined, hydrated = true', [undefined, true]], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_block_transaction_count.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_block_transaction_count.ts new file mode 100644 index 00000000000..db0f08c701b --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_block_transaction_count.ts @@ -0,0 +1,61 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, BlockTags, Bytes } from 'web3-types'; +import { hexToBytes } from 'web3-utils'; + +export const mockRpcResponse = '0xb'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockNumber + */ +type TestData = [string, [Bytes | BlockNumberOrTag | undefined]]; +export const testData: TestData[] = [ + // Testing block cases + // blockNumber = bytes + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], + ], + [ + 'blockNumber = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8")', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8')], + ], + [ + 'blockNumber = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8")', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + ], + ], + // blockNumber = BlockTag + ['blockNumber = BlockTags.LATEST', [BlockTags.LATEST]], + ['blockNumber = BlockTags.EARLIEST', [BlockTags.EARLIEST]], + ['blockNumber = BlockTags.PENDING', [BlockTags.PENDING]], + ['blockNumber = BlockTags.SAFE', [BlockTags.SAFE]], + ['blockNumber = BlockTags.FINALIZED', [BlockTags.FINALIZED]], + // blockNumber = Numbers + ['blockNumber = "0x4b7"', ['0x4b7']], + ['blockNumber = 1207', [1207]], + ['blockNumber = "1207"', ['1207']], + ['blockNumber = BigInt("0x4b7")', [BigInt('0x4b7')]], + ['blockNumber = undefined', [undefined]], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_block_uncle_count.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_block_uncle_count.ts new file mode 100644 index 00000000000..db0f08c701b --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_block_uncle_count.ts @@ -0,0 +1,61 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, BlockTags, Bytes } from 'web3-types'; +import { hexToBytes } from 'web3-utils'; + +export const mockRpcResponse = '0xb'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockNumber + */ +type TestData = [string, [Bytes | BlockNumberOrTag | undefined]]; +export const testData: TestData[] = [ + // Testing block cases + // blockNumber = bytes + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], + ], + [ + 'blockNumber = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8")', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8')], + ], + [ + 'blockNumber = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8")', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + ], + ], + // blockNumber = BlockTag + ['blockNumber = BlockTags.LATEST', [BlockTags.LATEST]], + ['blockNumber = BlockTags.EARLIEST', [BlockTags.EARLIEST]], + ['blockNumber = BlockTags.PENDING', [BlockTags.PENDING]], + ['blockNumber = BlockTags.SAFE', [BlockTags.SAFE]], + ['blockNumber = BlockTags.FINALIZED', [BlockTags.FINALIZED]], + // blockNumber = Numbers + ['blockNumber = "0x4b7"', ['0x4b7']], + ['blockNumber = 1207', [1207]], + ['blockNumber = "1207"', ['1207']], + ['blockNumber = BigInt("0x4b7")', [BigInt('0x4b7')]], + ['blockNumber = undefined', [undefined]], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_code.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_code.ts new file mode 100644 index 00000000000..d23918f3efa --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_code.ts @@ -0,0 +1,44 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Address, BlockNumberOrTag, BlockTags } from 'web3-types'; + +export const mockRpcResponse = + '0x600160008035811a818181146012578301005b601b6001356025565b8060005260206000f25b600060078202905091905056'; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - address + * - blockNumber + */ +type TestData = [string, [Address, BlockNumberOrTag | undefined]]; +export const testData: TestData[] = [ + // Testing blockNumber cases + ['blockNumber = BlockTags.LATEST', [address, BlockTags.LATEST]], + ['blockNumber = BlockTags.EARLIEST', [address, BlockTags.EARLIEST]], + ['blockNumber = BlockTags.PENDING', [address, BlockTags.PENDING]], + ['blockNumber = BlockTags.SAFE', [address, BlockTags.SAFE]], + ['blockNumber = BlockTags.FINALIZED', [address, BlockTags.FINALIZED]], + ['blockNumber = "0x4b7"', [address, '0x4b7']], + ['blockNumber = 1207', [address, 1207]], + ['blockNumber = "1207"', [address, '1207']], + ['blockNumber = BigInt("0x4b7")', [address, BigInt('0x4b7')]], + ['blockNumber = undefined', [address, undefined]], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_fee_history.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_fee_history.ts new file mode 100644 index 00000000000..54ea874c610 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_fee_history.ts @@ -0,0 +1,107 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { FeeHistoryResultAPI, BlockNumberOrTag, BlockTags, Numbers } from 'web3-types'; + +export const mockRpcResponse: FeeHistoryResultAPI = { + oldestBlock: '0xa30950', + baseFeePerGas: '0x9', + reward: [], + gasUsedRatio: ['0'], +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockCount + * - newestBlock + * - rewardPercentiles + */ +type TestData = [string, [Numbers, BlockNumberOrTag | undefined, Numbers[]]]; +export const testData: TestData[] = [ + // Testing blockCount cases + [ + 'blockCount = "0x4b7", newestBlock = "0xa30950", rewardPercentiles = ["0x0"]', + ['0x4b7', '0xa30950', ['0x0']], + ], + [ + 'blockCount = 1207, newestBlock = "0xa30950", rewardPercentiles = ["0x0"]', + [1207, '0xa30950', ['0x0']], + ], + [ + 'blockCount = "1207", newestBlock = "0xa30950", rewardPercentiles = ["0x0"]', + ['1207', '0xa30950', ['0x0']], + ], + [ + 'blockCount = BigInt("0x4b7"), newestBlock = "0xa30950", rewardPercentiles = ["0x0"]', + [BigInt('0x4b7'), '0xa30950', ['0x0']], + ], + + // Testing newestBlock cases + // blockNumber = BlockTag + [ + 'blockCount = "0x4b7", newestBlock = BlockTags.LATEST, rewardPercentiles = ["0x0"]', + ['0x4b7', BlockTags.LATEST, ['0x0']], + ], + [ + 'blockCount = "0x4b7", newestBlock = BlockTags.EARLIEST, rewardPercentiles = ["0x0"]', + ['0x4b7', BlockTags.EARLIEST, ['0x0']], + ], + [ + 'blockCount = "0x4b7", newestBlock = BlockTags.PENDING, rewardPercentiles = ["0x0"]', + ['0x4b7', BlockTags.PENDING, ['0x0']], + ], + [ + 'blockCount = "0x4b7", newestBlock = BlockTags.SAFE, rewardPercentiles = ["0x0"]', + ['0x4b7', BlockTags.SAFE, ['0x0']], + ], + [ + 'blockCount = "0x4b7", newestBlock = BlockTags.FINALIZED, rewardPercentiles = ["0x0"]', + ['0x4b7', BlockTags.FINALIZED, ['0x0']], + ], + // blockNumber = Numbers + [ + 'blockCount = "0x4b7", newestBlock = 1207, rewardPercentiles = ["0x0"]', + ['0x4b7', 1207, ['0x0']], + ], + [ + 'blockCount = "0x4b7", newestBlock = "1207", rewardPercentiles = ["0x0"]', + ['0x4b7', '1207', ['0x0']], + ], + [ + 'blockCount = "0x4b7", newestBlock = BigInt("0x4b7"), rewardPercentiles = ["0x0"]', + ['0x4b7', BigInt('0x4b7'), ['0x0']], + ], + [ + 'blockCount = "0x4b7", newestBlock = undefined, rewardPercentiles = ["0x0"]', + ['0x4b7', undefined, ['0x0']], + ], + + // Testing rewardPercentiles cases + [ + 'blockCount = "0x4b7", newestBlock = "0xa30950", rewardPercentiles = [0]', + ['0x4b7', '0xa30950', [0]], + ], + [ + 'blockCount = "0x4b7", newestBlock = "0xa30950", rewardPercentiles = ["0"]', + ['0x4b7', '0xa30950', ['0']], + ], + [ + 'blockCount = "0x4b7", newestBlock = "0xa30950", rewardPercentiles = [BigInt("0x0")]', + ['0x4b7', '0xa30950', [BigInt('0x0')]], + ], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_logs.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_logs.ts new file mode 100644 index 00000000000..e38527f2b9a --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_logs.ts @@ -0,0 +1,53 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { FilterResultsAPI, Filter } from 'web3-types'; + +export const mockRpcResponse: FilterResultsAPI = [ + { + logIndex: '0x1', + blockNumber: '0x1b4', + blockHash: '0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d', + transactionHash: '0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf', + transactionIndex: '0x0', + address: '0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d', + data: '0x0000000000000000000000000000000000000000000000000000000000000000', + topics: ['0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5'], + }, +]; + +const filter: Filter = { + address: '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + topics: [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + '0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc', + ], + ], +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - filter + */ +type TestData = [string, [Filter]]; +export const testData: TestData[] = [[JSON.stringify(filter), [filter]]]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_pending_transactions.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_pending_transactions.ts new file mode 100644 index 00000000000..5ee9d3fd070 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_pending_transactions.ts @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Transaction } from 'web3-types'; + +const transaction: Transaction = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + data: '0x', + input: '0x', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', +}; + +export const mockRpcResponse: Transaction[] = [transaction, transaction, transaction]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_proof.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_proof.ts new file mode 100644 index 00000000000..ce0f4c7df4a --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_proof.ts @@ -0,0 +1,117 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Address, BlockNumberOrTag, BlockTags, Bytes } from 'web3-types'; +import { hexToBytes } from 'web3-utils'; + +export const mockRpcResponse = { + accountProof: [ + '0xf90211a090dcaf88c40c7bbc95a912cbdde67c175767b31173df9ee4b0d733bfdd511c43a0babe369f6b12092f49181ae04ca173fb68d1a5456f18d20fa32cba73954052bda0473ecf8a7e36a829e75039a3b055e51b8332cbf03324ab4af2066bbd6fbf0021a0bbda34753d7aa6c38e603f360244e8f59611921d9e1f128372fec0d586d4f9e0a04e44caecff45c9891f74f6a2156735886eedf6f1a733628ebc802ec79d844648a0a5f3f2f7542148c973977c8a1e154c4300fec92f755f7846f1b734d3ab1d90e7a0e823850f50bf72baae9d1733a36a444ab65d0a6faaba404f0583ce0ca4dad92da0f7a00cbe7d4b30b11faea3ae61b7f1f2b315b61d9f6bd68bfe587ad0eeceb721a07117ef9fc932f1a88e908eaead8565c19b5645dc9e5b1b6e841c5edbdfd71681a069eb2de283f32c11f859d7bcf93da23990d3e662935ed4d6b39ce3673ec84472a0203d26456312bbc4da5cd293b75b840fc5045e493d6f904d180823ec22bfed8ea09287b5c21f2254af4e64fca76acc5cd87399c7f1ede818db4326c98ce2dc2208a06fc2d754e304c48ce6a517753c62b1a9c1d5925b89707486d7fc08919e0a94eca07b1c54f15e299bd58bdfef9741538c7828b5d7d11a489f9c20d052b3471df475a051f9dd3739a927c89e357580a4c97b40234aa01ed3d5e0390dc982a7975880a0a089d613f26159af43616fd9455bb461f4869bfede26f2130835ed067a8b967bfb80', + '0xf90211a0395d87a95873cd98c21cf1df9421af03f7247880a2554e20738eec2c7507a494a0bcf6546339a1e7e14eb8fb572a968d217d2a0d1f3bc4257b22ef5333e9e4433ca012ae12498af8b2752c99efce07f3feef8ec910493be749acd63822c3558e6671a0dbf51303afdc36fc0c2d68a9bb05dab4f4917e7531e4a37ab0a153472d1b86e2a0ae90b50f067d9a2244e3d975233c0a0558c39ee152969f6678790abf773a9621a01d65cd682cc1be7c5e38d8da5c942e0a73eeaef10f387340a40a106699d494c3a06163b53d956c55544390c13634ea9aa75309f4fd866f312586942daf0f60fb37a058a52c1e858b1382a8893eb9c1f111f266eb9e21e6137aff0dddea243a567000a037b4b100761e02de63ea5f1fcfcf43e81a372dafb4419d126342136d329b7a7ba032472415864b08f808ba4374092003c8d7c40a9f7f9fe9cc8291f62538e1cc14a074e238ff5ec96b810364515551344100138916594d6af966170ff326a092fab0a0d31ac4eef14a79845200a496662e92186ca8b55e29ed0f9f59dbc6b521b116fea090607784fe738458b63c1942bba7c0321ae77e18df4961b2bc66727ea996464ea078f757653c1b63f72aff3dcc3f2a2e4c8cb4a9d36d1117c742833c84e20de994a0f78407de07f4b4cb4f899dfb95eedeb4049aeb5fc1635d65cf2f2f4dfd25d1d7a0862037513ba9d45354dd3e36264aceb2b862ac79d2050f14c95657e43a51b85c80', + '0xf90171a04ad705ea7bf04339fa36b124fa221379bd5a38ffe9a6112cb2d94be3a437b879a08e45b5f72e8149c01efcb71429841d6a8879d4bbe27335604a5bff8dfdf85dcea00313d9b2f7c03733d6549ea3b810e5262ed844ea12f70993d87d3e0f04e3979ea0b59e3cdd6750fa8b15164612a5cb6567cdfb386d4e0137fccee5f35ab55d0efda0fe6db56e42f2057a071c980a778d9a0b61038f269dd74a0e90155b3f40f14364a08538587f2378a0849f9608942cf481da4120c360f8391bbcc225d811823c6432a026eac94e755534e16f9552e73025d6d9c30d1d7682a4cb5bd7741ddabfd48c50a041557da9a74ca68da793e743e81e2029b2835e1cc16e9e25bd0c1e89d4ccad6980a041dda0a40a21ade3a20fcd1a4abb2a42b74e9a32b02424ff8db4ea708a5e0fb9a09aaf8326a51f613607a8685f57458329b41e938bb761131a5747e066b81a0a16808080a022e6cef138e16d2272ef58434ddf49260dc1de1f8ad6dfca3da5d2a92aaaadc58080', + '0xf851808080a009833150c367df138f1538689984b8a84fc55692d3d41fe4d1e5720ff5483a6980808080808080808080a0a319c1c415b271afc0adcb664e67738d103ac168e0bc0b7bd2da7966165cb9518080', + ], + balance: '0x0', + codeHash: '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', + nonce: '0x0', + storageHash: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + storageProof: [ + { + key: '0x0000000000000000000000000000000000000000000000000000000000000000', + value: '0x0', + proof: [], + }, + { + key: '0x0000000000000000000000000000000000000000000000000000000000000001', + value: '0x0', + proof: [], + }, + ], +}; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - address + * - storageKey + * - blockNumber + */ +type TestData = [string, [Address, Bytes[] | Uint8Array[], BlockNumberOrTag | undefined]]; +export const testData: TestData[] = [ + // Testing storageKey cases + // storageKey = HexString + [ + 'storageKey = ["0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"], blockNumber = "0x1"', + [address, ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], '0x1'], + ], + // storageKey = Uint8Array + [ + 'storageKey = [hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8")], blockNumber = "0x1"', + [address, [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8')], '0x1'], + ], + // storageKey = Uint8Array + [ + 'storageKey = [hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8")], blockNumber = "0x1"', + [ + address, + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, + 124, 251, 248, + ]), + ], + '0x1', + ], + ], + + // Testing blockNumber cases + // blockNumber = BlockTag + [ + 'blockNumber = BlockTags.LATEST', + [address, ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], BlockTags.LATEST], + ], + [ + 'blockNumber = BlockTags.EARLIEST', + [address, ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], BlockTags.EARLIEST], + ], + [ + 'blockNumber = BlockTags.PENDING', + [address, ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], BlockTags.PENDING], + ], + [ + 'blockNumber = BlockTags.SAFE', + [address, ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], BlockTags.SAFE], + ], + [ + 'blockNumber = BlockTags.FINALIZED', + [address, ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], BlockTags.FINALIZED], + ], + // blockNumber = Numbers + ['blockNumber = "0x4b7"', [address, ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], '0x4b7']], + ['blockNumber = 1207', [address, ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], 1207]], + ['blockNumber = "1207"', [address, ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], '1207']], + [ + 'blockNumber = BigInt("0x4b7")', + [address, ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], BigInt('0x4b7')], + ], + [ + 'blockNumber = undefined', + [address, ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], undefined], + ], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_storage_at.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_storage_at.ts new file mode 100644 index 00000000000..9afd4c3934c --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_storage_at.ts @@ -0,0 +1,61 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Address, BlockNumberOrTag, BlockTags, Numbers } from 'web3-types'; + +export const mockRpcResponse = '0x033456732123ffff2342342dd12342434324234234fd234fd23fd4f23d4234'; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - address + * - storageSlot + * - blockNumber + */ +type TestData = [string, [Address, Numbers, BlockNumberOrTag | undefined]]; +export const testData: TestData[] = [ + // Testing storageSlot cases + ['storageSlot = "0x4b7", blockNumber = undefined', [address, '0x4b7', undefined]], + ['storageSlot = 1207, blockNumber = undefined', [address, 1207, undefined]], + ['storageSlot = "1207", blockNumber = undefined', [address, '1207', undefined]], + [ + 'storageSlot = BigInt("0x4b7"), blockNumber = undefined', + [address, BigInt('0x4b7'), undefined], + ], + // Testing blockNumber cases + ['storageSlot = "0x4b7", blockNumber = BlockTags.LATEST', [address, '0x4b7', BlockTags.LATEST]], + [ + 'storageSlot = "0x4b7", blockNumber = BlockTags.EARLIEST', + [address, '0x4b7', BlockTags.EARLIEST], + ], + [ + 'storageSlot = "0x4b7", blockNumber = BlockTags.PENDING', + [address, '0x4b7', BlockTags.PENDING], + ], + ['storageSlot = "0x4b7", blockNumber = BlockTags.SAFE', [address, '0x4b7', BlockTags.SAFE]], + [ + 'storageSlot = "0x4b7", blockNumber = BlockTags.FINALIZED', + [address, '0x4b7', BlockTags.FINALIZED], + ], + ['storageSlot = "0x4b7", blockNumber = "0x4b7"', [address, '0x4b7', '0x4b7']], + ['storageSlot = "0x4b7", blockNumber = 1207', [address, '0x4b7', 1207]], + ['storageSlot = "0x4b7", blockNumber = "1207"', [address, '0x4b7', '1207']], + ['storageSlot = "0x4b7", blockNumber = BigInt("0x4b7")', [address, '0x4b7', BigInt('0x4b7')]], + ['storageSlot = "0x4b7", blockNumber = undefined', [address, '0x4b7', undefined]], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_transaction.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_transaction.ts new file mode 100644 index 00000000000..cfc2e81942a --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_transaction.ts @@ -0,0 +1,69 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Bytes, TransactionInfo } from 'web3-types'; +import { hexToBytes } from 'web3-utils'; + +export const mockRpcResponse: TransactionInfo = { + accessList: [], + blockHash: '0xc9e87d2d1aa23d241fe281b8db7856c497320aa4f1f582a7fcd4fab7d2addf74', + blockNumber: '0xc66332', + chainId: '0x1', + from: '0xcfb162c6de7ee2b49048b270cb5e297da5b6e6c3', + gas: '0x31d00', + gasPrice: '0xa83613262', + hash: '0x5f67b495f9c53b942cb1bfacaf175ad887372d7227454a971f15f5e6a7639ad1', + input: '0x38ed17390000000000000000000000000000000000000000000000147ebc6d689cc81c8c0000000000000000000000000000000000000000000000005b7471df733ea75c00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000cfb162c6de7ee2b49048b270cb5e297da5b6e6c30000000000000000000000000000000000000000000000000000000061134c8f0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000d084b83c305dafd76ae3e1b4e1f1fe2ecccb3988000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000d2877702675e6ceb975b4a1dff9fb7baf4c91ea9', + data: '0x38ed17390000000000000000000000000000000000000000000000147ebc6d689cc81c8c0000000000000000000000000000000000000000000000005b7471df733ea75c00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000cfb162c6de7ee2b49048b270cb5e297da5b6e6c30000000000000000000000000000000000000000000000000000000061134c8f0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000d084b83c305dafd76ae3e1b4e1f1fe2ecccb3988000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000d2877702675e6ceb975b4a1dff9fb7baf4c91ea9', + maxFeePerGas: '0xf2cec3661', + maxPriorityFeePerGas: '0xb2d05e00', + nonce: '0xb8', + r: '0x9d201db7621ee0e204841ea374cca3397c7f1a880c5f83207d8cd7e5b4b9e984', + s: '0x391b00b10782665d8c5138aef912ea77a59024bf7962f4d1faedcc45bf91d568', + to: '0x7a250d5630b4cf539739df2c5dacb4c659f2488d', + transactionIndex: '0xc8', + type: '0x2', + v: '0x0', + value: '0x0', +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - transactionHash + */ +type TestData = [string, [Bytes]]; +export const testData: TestData[] = [ + // transactionHash = Bytes + [ + 'transactionHash = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], + ], + [ + 'transactionHash = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8")', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8')], + ], + [ + 'transactionHash = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8")', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + ], + ], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_transaction_count.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_transaction_count.ts new file mode 100644 index 00000000000..6c933d470ea --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_transaction_count.ts @@ -0,0 +1,42 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Address, BlockNumberOrTag, BlockTags } from 'web3-types'; + +export const mockRpcResponse = '0xe8d4a51000'; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - address + * - blockNumber + */ +type TestData = [string, [Address, BlockNumberOrTag | undefined]]; +export const testData: TestData[] = [ + ['blockNumber = BlockTags.LATEST', [address, BlockTags.LATEST]], + ['blockNumber = BlockTags.EARLIEST', [address, BlockTags.EARLIEST]], + ['blockNumber = BlockTags.PENDING', [address, BlockTags.PENDING]], + ['blockNumber = BlockTags.SAFE', [address, BlockTags.SAFE]], + ['blockNumber = BlockTags.FINALIZED', [address, BlockTags.FINALIZED]], + ['blockNumber = "0x4b7"', [address, '0x4b7']], + ['blockNumber = 1207', [address, 1207]], + ['blockNumber = "1207"', [address, '1207']], + ['blockNumber = BigInt("0x4b7")', [address, BigInt('0x4b7')]], + ['blockNumber = undefined', [address, undefined]], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_transaction_from_block.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_transaction_from_block.ts new file mode 100644 index 00000000000..b9d768e4664 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_transaction_from_block.ts @@ -0,0 +1,197 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, BlockTags, Bytes, Numbers, Transaction } from 'web3-types'; +import { hexToBytes } from 'web3-utils'; + +export const mockRpcResponse: Transaction = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + data: '0x', + input: '0x', + nonce: '0x4', + chain: 'mainnet', + hardfork: 'berlin', + chainId: '0x1', + gasLimit: '0x5208', + v: '0x25', + r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d', + s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0', +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockNumber + * - uncleIndex + * - returnFormat + * - mockRpcResponse + */ +type TestData = [string, [Bytes | BlockNumberOrTag | undefined, Numbers]]; +export const testData: TestData[] = [ + // blockNumber = Bytes, transactionIndex = HexString + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8", transactionIndex = "0x0"', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', '0x0'], + ], + [ + 'blockNumber = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"), transactionIndex = "0x0"', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'), '0x0'], + ], + [ + 'blockNumber = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8"), transactionIndex = "0x0"', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + '0x0', + ], + ], + // blockNumber = BlockTag, transactionIndex = HexString + ['blockNumber = BlockTags.LATEST, transactionIndex = "0x0"', [BlockTags.LATEST, '0x0']], + ['blockNumber = BlockTags.EARLIEST, transactionIndex = "0x0"', [BlockTags.EARLIEST, '0x0']], + ['blockNumber = BlockTags.PENDING, transactionIndex = "0x0"', [BlockTags.PENDING, '0x0']], + ['blockNumber = BlockTags.SAFE, transactionIndex = "0x0"', [BlockTags.SAFE, '0x0']], + ['blockNumber = BlockTags.FINALIZED, transactionIndex = "0x0"', [BlockTags.FINALIZED, '0x0']], + // blockNumber = Numbers, transactionIndex = HexString + ['blockNumber = "0x4b7", transactionIndex = "0x0"', ['0x4b7', '0x0']], + ['blockNumber = 1207, transactionIndex = "0x0"', [1207, '0x0']], + ['blockNumber = "1207", transactionIndex = "0x0"', ['1207', '0x0']], + ['blockNumber = BigInt("0x4b7"), transactionIndex = "0x0"', [BigInt('0x4b7'), '0x0']], + ['blockNumber = undefined, transactionIndex = "0x0"', [undefined, '0x0']], + + // blockNumber = Bytes, transactionIndex = number + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8", transactionIndex = 0', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8, transactionIndex = 0', 0], + ], + [ + 'blockNumber = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"), transactionIndex = 0', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'), 0], + ], + [ + 'blockNumber = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8"), transactionIndex = 0', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + 0, + ], + ], + // blockNumber = BlockTag, transactionIndex = number + ['blockNumber = BlockTags.LATEST, transactionIndex = 0', [BlockTags.LATEST, 0]], + ['blockNumber = BlockTags.EARLIEST, transactionIndex = 0', [BlockTags.EARLIEST, 0]], + ['blockNumber = BlockTags.PENDING, transactionIndex = 0', [BlockTags.PENDING, 0]], + ['blockNumber = BlockTags.SAFE, transactionIndex = "0x0"', [BlockTags.SAFE, 0]], + ['blockNumber = BlockTags.FINALIZED, transactionIndex = "0x0"', [BlockTags.FINALIZED, 0]], + // blockNumber = Numbers, transactionIndex = number + ['blockNumber = "0x4b7"', ['0x4b7, transactionIndex = 0', 0]], + ['blockNumber = 1207, transactionIndex = 0', [1207, 0]], + ['blockNumber = "1207", transactionIndex = 0', ['1207', 0]], + ['blockNumber = BigInt("0x4b7"), transactionIndex = 0', [BigInt('0x4b7'), 0]], + ['blockNumber = undefined, transactionIndex = 0', [undefined, 0]], + + // blockNumber = Bytes, transactionIndex = NumberString + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8", transactionIndex = "0"', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', '0'], + ], + [ + 'blockNumber = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"), transactionIndex = "0"', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'), '0'], + ], + [ + 'blockNumber = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8"), transactionIndex = "0"', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + '0', + ], + ], + // blockNumber = BlockTag, transactionIndex = NumberString + ['blockNumber = BlockTags.LATEST, transactionIndex = "0"', [BlockTags.LATEST, '0']], + ['blockNumber = BlockTags.EARLIEST, transactionIndex = "0"', [BlockTags.EARLIEST, '0']], + ['blockNumber = BlockTags.PENDING, transactionIndex = "0"', [BlockTags.PENDING, '0']], + ['blockNumber = BlockTags.SAFE, transactionIndex = "0x0"', [BlockTags.SAFE, '0']], + ['blockNumber = BlockTags.FINALIZED, transactionIndex = "0x0"', [BlockTags.FINALIZED, '0']], + // blockNumber = Numbers, transactionIndex = NumberString + ['blockNumber = "0x4b7", transactionIndex = "0"', ['0x4b7', '0']], + ['blockNumber = 1207, transactionIndex = "0"', [1207, '0']], + ['blockNumber = "1207", transactionIndex = "0"', ['1207', '0']], + ['blockNumber = BigInt("0x4b7"), transactionIndex = "0"', [BigInt('0x4b7'), '0']], + ['blockNumber = undefined, transactionIndex = "0"', [undefined, '0']], + + // blockNumber = Bytes, transactionIndex = BigInt + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8", transactionIndex = BigInt("0x0")', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', BigInt('0x0')], + ], + [ + 'blockNumber = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"), transactionIndex = BigInt("0x0")', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'), BigInt('0x0')], + ], + [ + 'blockNumber = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8"), transactionIndex = BigInt("0x0")', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + BigInt('0x0'), + ], + ], + // blockNumber = BlockTag, transactionIndex = BigInt + [ + 'blockNumber = BlockTags.LATEST, transactionIndex = BigInt("0x0")', + [BlockTags.LATEST, BigInt('0x0')], + ], + [ + 'blockNumber = BlockTags.EARLIEST, transactionIndex = BigInt("0x0")', + [BlockTags.EARLIEST, BigInt('0x0')], + ], + [ + 'blockNumber = BlockTags.PENDING, transactionIndex = BigInt("0x0")', + [BlockTags.PENDING, BigInt('0x0')], + ], + [ + 'blockNumber = BlockTags.SAFE, transactionIndex = BigInt("0x0")', + [BlockTags.SAFE, BigInt('0x0')], + ], + [ + 'blockNumber = BlockTags.FINALIZED, transactionIndex = BigInt("0x0")', + [BlockTags.FINALIZED, BigInt('0x0')], + ], + // blockNumber = Numbers, transactionIndex = BigInt + ['blockNumber = "0x4b7", transactionIndex = BigInt("0x0")', ['0x4b7', BigInt('0x0')]], + ['blockNumber = 1207, transactionIndex = BigInt("0x0")', [1207, BigInt('0x0')]], + ['blockNumber = "1207", transactionIndex = BigInt("0x0")', ['1207', BigInt('0x0')]], + [ + 'blockNumber = BigInt("0x4b7"), transactionIndex = BigInt("0x0")', + [BigInt('0x4b7'), BigInt('0x0')], + ], + ['blockNumber = undefined, transactionIndex = BigInt("0x0")', [undefined, BigInt('0x0')]], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_transaction_receipt.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_transaction_receipt.ts new file mode 100644 index 00000000000..2fbc413630a --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_transaction_receipt.ts @@ -0,0 +1,65 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { TransactionReceipt, Bytes } from 'web3-types'; +import { hexToBytes } from 'web3-utils'; + +export const mockRpcResponse: TransactionReceipt = { + transactionHash: '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + transactionIndex: '0x41', + blockHash: '0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2', + blockNumber: '0x5daf3b', + from: '0xa7d9ddbe1f17865597fbd27ec712455208b6b76d', + to: '0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb', + cumulativeGasUsed: '0x33bc', // 13244 + gasUsed: '0x4dc', // 1244 + contractAddress: '0xb60e8dd61c5d32be8058bb8eb970870f07233155', + logs: [], + logsBloom: '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + root: '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + status: '0x1', + effectiveGasPrice: '0x4dc4', // 19908 +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - transactionHash + * - returnFormat + * - mockRpcResponse + */ +type TestData = [string, [Bytes]]; +export const testData: TestData[] = [ + // transactionHash = Bytes + [ + 'transactionHash = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'], + ], + [ + 'transactionHash = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8")', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8')], + ], + [ + 'transactionHash = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8")', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + ], + ], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_uncle.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_uncle.ts new file mode 100644 index 00000000000..95886e7940a --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/get_uncle.ts @@ -0,0 +1,201 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, BlockTags, Bytes, Numbers, Block } from 'web3-types'; +import { hexToBytes } from 'web3-utils'; + +export const mockRpcResponse: Block = { + parentHash: '0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54', + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + miner: '0xbb7b8287f3f0a933474a79eae42cbca977791171', + stateRoot: '0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d', + transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + difficulty: '0x4ea3f27bc', + number: '0x1b4', + gasLimit: '0x1388', + gasUsed: '0x1c96e73', + timestamp: '0x55ba467c', + extraData: '0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32', + mixHash: '0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843', + nonce: '0x1c11920a4', + totalDifficulty: '0x78ed983323d', + size: '0x220', + transactions: [ + '0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', + '0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', + '0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', + ], + uncles: [ + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + ], + hash: '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + baseFeePerGas: '0x13afe8b904', +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockNumber + * - uncleIndex + */ +type TestData = [string, [Bytes | BlockNumberOrTag | undefined, Numbers]]; +export const testData: TestData[] = [ + // blockNumber = Bytes, uncleIndex = HexString + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8", uncleIndex = "0x0"', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', '0x0'], + ], + [ + 'blockNumber = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"), uncleIndex = "0x0"', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'), '0x0'], + ], + [ + 'blockNumber = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8"), uncleIndex = "0x0"', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + '0x0', + ], + ], + // blockNumber = BlockTag, uncleIndex = HexString + ['blockNumber = BlockTags.LATEST, uncleIndex = "0x0"', [BlockTags.LATEST, '0x0']], + ['blockNumber = BlockTags.EARLIEST, uncleIndex = "0x0"', [BlockTags.EARLIEST, '0x0']], + ['blockNumber = BlockTags.PENDING, uncleIndex = "0x0"', [BlockTags.PENDING, '0x0']], + ['blockNumber = BlockTags.SAFE, uncleIndex = "0x0"', [BlockTags.SAFE, '0x0']], + ['blockNumber = BlockTags.FINALIZED, uncleIndex = "0x0"', [BlockTags.FINALIZED, '0x0']], + // blockNumber = Numbers, uncleIndex = HexString + ['blockNumber = "0x4b7", uncleIndex = "0x0"', ['0x4b7', '0x0']], + ['blockNumber = 1207, uncleIndex = "0x0"', [1207, '0x0']], + ['blockNumber = "1207", uncleIndex = "0x0"', ['1207', '0x0']], + ['blockNumber = BigInt("0x4b7"), uncleIndex = "0x0"', [BigInt('0x4b7'), '0x0']], + ['blockNumber = undefined, uncleIndex = "0x0"', [undefined, '0x0']], + + // blockNumber = Bytes, uncleIndex = number + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8", uncleIndex = 0', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8, uncleIndex = 0', 0], + ], + [ + 'blockNumber = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"), uncleIndex = 0', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'), 0], + ], + [ + 'blockNumber = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8"), uncleIndex = 0', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + 0, + ], + ], + // blockNumber = BlockTag, uncleIndex = number + ['blockNumber = BlockTags.LATEST, uncleIndex = 0', [BlockTags.LATEST, 0]], + ['blockNumber = BlockTags.EARLIEST, uncleIndex = 0', [BlockTags.EARLIEST, 0]], + ['blockNumber = BlockTags.PENDING, uncleIndex = 0', [BlockTags.PENDING, 0]], + ['blockNumber = BlockTags.SAFE, uncleIndex = 0', [BlockTags.SAFE, 0]], + ['blockNumber = BlockTags.FINALIZED, uncleIndex = 0', [BlockTags.FINALIZED, 0]], + // blockNumber = Numbers, uncleIndex = number + ['blockNumber = "0x4b7"', ['0x4b7, uncleIndex = 0', 0]], + ['blockNumber = 1207, uncleIndex = 0', [1207, 0]], + ['blockNumber = "1207", uncleIndex = 0', ['1207', 0]], + ['blockNumber = BigInt("0x4b7"), uncleIndex = 0', [BigInt('0x4b7'), 0]], + ['blockNumber = undefined, uncleIndex = 0', [undefined, 0]], + + // blockNumber = Bytes, uncleIndex = NumberString + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8", uncleIndex = "0"', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', '0'], + ], + [ + 'blockNumber = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"), uncleIndex = "0"', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'), '0'], + ], + [ + 'blockNumber = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8"), uncleIndex = "0"', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + '0', + ], + ], + // blockNumber = BlockTag, uncleIndex = NumberString + ['blockNumber = BlockTags.LATEST, uncleIndex = "0"', [BlockTags.LATEST, '0']], + ['blockNumber = BlockTags.EARLIEST, uncleIndex = "0"', [BlockTags.EARLIEST, '0']], + ['blockNumber = BlockTags.PENDING, uncleIndex = "0"', [BlockTags.PENDING, '0']], + ['blockNumber = BlockTags.SAFE, uncleIndex = "0"', [BlockTags.SAFE, '0']], + ['blockNumber = BlockTags.FINALIZED, uncleIndex = "0"', [BlockTags.FINALIZED, '0']], + // blockNumber = Numbers, uncleIndex = NumberString + ['blockNumber = "0x4b7", uncleIndex = "0"', ['0x4b7', '0']], + ['blockNumber = 1207, uncleIndex = "0"', [1207, '0']], + ['blockNumber = "1207", uncleIndex = "0"', ['1207', '0']], + ['blockNumber = BigInt("0x4b7"), uncleIndex = "0"', [BigInt('0x4b7'), '0']], + ['blockNumber = undefined, uncleIndex = "0"', [undefined, '0']], + + // blockNumber = Bytes, uncleIndex = BigInt + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8", uncleIndex = BigInt("0x0")', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', BigInt('0x0')], + ], + [ + 'blockNumber = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"), uncleIndex = BigInt("0x0")', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'), BigInt('0x0')], + ], + [ + 'blockNumber = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8"), uncleIndex = BigInt("0x0")', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + BigInt('0x0'), + ], + ], + // blockNumber = BlockTag, uncleIndex = BigInt + [ + 'blockNumber = BlockTags.LATEST, uncleIndex = BigInt("0x0")', + [BlockTags.LATEST, BigInt('0x0')], + ], + [ + 'blockNumber = BlockTags.EARLIEST, uncleIndex = BigInt("0x0")', + [BlockTags.EARLIEST, BigInt('0x0')], + ], + [ + 'blockNumber = BlockTags.PENDING, uncleIndex = BigInt("0x0")', + [BlockTags.PENDING, BigInt('0x0')], + ], + ['blockNumber = BlockTags.SAFE, uncleIndex = BigInt("0x0")', [BlockTags.SAFE, BigInt('0x0')]], + [ + 'blockNumber = BlockTags.FINALIZED, uncleIndex = BigInt("0x0")', + [BlockTags.FINALIZED, BigInt('0x0')], + ], + // blockNumber = Numbers, uncleIndex = BigInt + ['blockNumber = "0x4b7", uncleIndex = BigInt("0x0")', ['0x4b7', BigInt('0x0')]], + ['blockNumber = 1207, uncleIndex = BigInt("0x0")', [1207, BigInt('0x0')]], + ['blockNumber = "1207", uncleIndex = BigInt("0x0")', ['1207', BigInt('0x0')]], + ['blockNumber = BigInt("0x4b7"), uncleIndex = BigInt("0x0")', [BigInt('0x4b7'), BigInt('0x0')]], + ['blockNumber = undefined, uncleIndex = BigInt("0x0")', [undefined, BigInt('0x0')]], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/return_formats.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/return_formats.ts new file mode 100644 index 00000000000..4796ab8736c --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/return_formats.ts @@ -0,0 +1,34 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { DataFormat, FMT_BYTES, FMT_NUMBER } from 'web3-types'; + +export const returnFormats: DataFormat[] = [ + { number: FMT_NUMBER.NUMBER, bytes: FMT_BYTES.HEX }, + { number: FMT_NUMBER.HEX, bytes: FMT_BYTES.HEX }, + { number: FMT_NUMBER.STR, bytes: FMT_BYTES.HEX }, + { number: FMT_NUMBER.BIGINT, bytes: FMT_BYTES.HEX }, + + { number: FMT_NUMBER.NUMBER, bytes: FMT_BYTES.UINT8ARRAY }, + { number: FMT_NUMBER.HEX, bytes: FMT_BYTES.UINT8ARRAY }, + { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }, + { number: FMT_NUMBER.BIGINT, bytes: FMT_BYTES.UINT8ARRAY }, + + { number: FMT_NUMBER.NUMBER, bytes: FMT_BYTES.UINT8ARRAY }, + { number: FMT_NUMBER.HEX, bytes: FMT_BYTES.UINT8ARRAY }, + { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }, + { number: FMT_NUMBER.BIGINT, bytes: FMT_BYTES.UINT8ARRAY }, +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/send_signed_transaction.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/send_signed_transaction.ts new file mode 100644 index 00000000000..f6e41600d12 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/send_signed_transaction.ts @@ -0,0 +1,50 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Bytes, TransactionReceipt } from 'web3-types'; +import { hexToBytes } from 'web3-utils'; + +export const expectedTransactionHash = + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547'; +export const expectedTransactionReceipt: TransactionReceipt = { + transactionHash: '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + transactionIndex: '0x41', + blockHash: '0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2', + blockNumber: '0x5daf3b', + from: '0x7ed0e85b8e1e925600b4373e6d108f34ab38a401', + to: '0x0000000000000000000000000000000000000000', + cumulativeGasUsed: '0x33bc', // 13244 + effectiveGasPrice: '0x13a21bc946', // 84324108614 + gasUsed: '0x4dc', // 1244 + contractAddress: '0xb60e8dd61c5d32be8058bb8eb970870f07233155', + logs: [], + logsBloom: '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + root: '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + status: '0x1', +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - signedTransaction + */ +const signedTransaction = + '0xf8650f8415aa14088252089400000000000000000000000000000000000000000180820a95a0e6d6bc9c7af306733eb44b2a8a4a4efed5db2fbff947e21521fe81dfb144a00aa01a8a87c872f59564abbbe60e9d4e54dee5e1f1647477ab170ecd7e2704d3c94d'; +export const testData: [string, Bytes][] = [ + ['signedTransaction = HexString', signedTransaction], + ['signedTransaction = Uint8Array', hexToBytes(signedTransaction)], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/send_transaction.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/send_transaction.ts new file mode 100644 index 00000000000..05bc02d2c31 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/send_transaction.ts @@ -0,0 +1,112 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Transaction, TransactionReceipt } from 'web3-types'; +import { SendTransactionOptions } from '../../../../src/types'; + +export const expectedTransactionHash = + '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547'; +export const expectedTransactionReceipt: TransactionReceipt = { + transactionHash: '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + transactionIndex: '0x41', + blockHash: '0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2', + blockNumber: '0x5daf3b', + from: '0xa7d9ddbe1f17865597fbd27ec712455208b6b76d', + to: '0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb', + cumulativeGasUsed: '0x33bc', // 13244 + effectiveGasPrice: '0x13a21bc946', // 84324108614 + gasUsed: '0x4dc', // 1244 + contractAddress: '0xb60e8dd61c5d32be8058bb8eb970870f07233155', + logs: [], + logsBloom: '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + root: '0xe21194c9509beb01be7e90c2bcefff2804cd85836ae12134f22ad4acda0fc547', + status: '0x1', +}; + +const inputTransaction = { + from: '0xa7d9ddbe1f17865597fbd27ec712455208b6b76d', + gas: '0xc350', + gasPrice: '0x4a817c800', + input: '0x68656c6c6f21', + nonce: '0x15', + to: '0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb', + value: '0xf3dbb76162000', + type: '0x0', + maxFeePerGas: '0x1475505aab', + maxPriorityFeePerGas: '0x7f324180', + chainId: '0x1', +}; + +/** + * Array consists of: + * - Test title + * - Input transaction + * - SendTransactionOptions + * - Expected transaction hash + * - Expected receipt info + */ +export const testData: [string, Transaction, SendTransactionOptions | undefined][] = [ + ['Transaction with all hex string values', inputTransaction, undefined], + [ + 'Transaction with all hex string values and SendTransactionOptions.ignoreGasPricing = true', + inputTransaction, + { ignoreGasPricing: true }, + ], + [ + 'Transaction with all hex string values, inputTransaction.gasPrice !== undefined; inputTransaction.maxPriorityFeePerGas === undefined; inputTransaction.maxFeePerGas === undefined', + { + ...inputTransaction, + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }, + { ignoreGasPricing: true }, + ], + [ + 'Transaction with all hex string values, inputTransaction.gasPrice === undefined; inputTransaction.maxPriorityFeePerGas !== undefined; inputTransaction.maxFeePerGas !== undefined', + { + ...inputTransaction, + gasPrice: undefined, + }, + { ignoreGasPricing: true }, + ], + [ + 'Transaction with all hex string values, inputTransaction.gasPrice === undefined; inputTransaction.maxPriorityFeePerGas === undefined; inputTransaction.maxFeePerGas !== undefined', + { + ...inputTransaction, + maxPriorityFeePerGas: undefined, + }, + { ignoreGasPricing: true }, + ], + [ + 'Transaction with all hex string values, inputTransaction.gasPrice === undefined; inputTransaction.maxPriorityFeePerGas !== undefined; inputTransaction.maxFeePerGas === undefined', + { + ...inputTransaction, + maxFeePerGas: undefined, + }, + { ignoreGasPricing: true }, + ], + [ + 'Transaction with all hex string values, inputTransaction.gasPrice === undefined; inputTransaction.maxPriorityFeePerGas === undefined; inputTransaction.maxFeePerGas === undefined', + { + ...inputTransaction, + gasPrice: undefined, + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }, + { ignoreGasPricing: true }, + ], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/sign.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/sign.ts new file mode 100644 index 00000000000..fa3f475d802 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/sign.ts @@ -0,0 +1,63 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Address, Bytes, FMT_BYTES, FMT_NUMBER } from 'web3-types'; +import { hexToBytes } from 'web3-utils'; + +export const mockRpcResponse = '0x736f796c656e7420677265656e2069732070656f706c65'; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - message + * - address + */ +type TestData = [string, [Bytes, Address]]; +export const testData: TestData[] = [ + [ + 'message = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', address], + ], + [ + 'message = hexToBytes("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8")', + [hexToBytes('0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8'), address], + ], + [ + 'message = hexToBytes("d5677cf67b5aa051bb40496e68ad359eb97cfbf8")', + [ + new Uint8Array([ + 213, 103, 124, 246, 123, 90, 160, 81, 187, 64, 73, 110, 104, 173, 53, 158, 185, 124, + 251, 248, + ]), + address, + ], + ], +]; +export const walletTestData: [string, [Bytes, Address | number], any][] = [ + [ + 'message = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', 0], + { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }, + ], + [ + 'message = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', 0], + { number: FMT_NUMBER.STR, bytes: FMT_BYTES.HEX }, + ], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/sign_transaction.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/sign_transaction.ts new file mode 100644 index 00000000000..c95fd9b3275 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/sign_transaction.ts @@ -0,0 +1,190 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + HexStringBytes, + SignedTransactionInfoAPI, + Transaction, + TransactionSignedAPI, + FMT_BYTES, + FMT_NUMBER, +} from 'web3-types'; +import { decodeSignedTransaction } from '../../../../src/utils/decode_signed_transaction'; + +const rawLegacyTransaction: Transaction = { + type: '0x0', + nonce: '0x0', + gasPrice: '0x3b9aca01', + gasLimit: '0x5208', + value: '0x1', + input: '0x', + to: '0x0000000000000000000000000000000000000000', +}; +const signedLegacyTransaction: Transaction = { + ...rawLegacyTransaction, + v: '0xa95', + r: '0xddb601f46a2232d9863f96bf8dabc8fd29d96c880d99f6c763465446f75a71e5', + s: '0x28e3bd580f589a75a3d8d6cf85283692bb52830baba879f153266fda0182882c', +}; +const legacySignedTransactionInfo = { + raw: '0xf86580843b9aca018252089400000000000000000000000000000000000000000180820a95a0ddb601f46a2232d9863f96bf8dabc8fd29d96c880d99f6c763465446f75a71e5a028e3bd580f589a75a3d8d6cf85283692bb52830baba879f153266fda0182882c', + tx: signedLegacyTransaction as TransactionSignedAPI, +}; + +const rawType0x1Transaction: Transaction = { + from: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + type: '0x1', + nonce: '0x0', + gasPrice: '0x3b9aca01', + gasLimit: '0x5208', + value: '0x1', + input: '0x', + to: '0x0000000000000000000000000000000000000000', + accessList: [ + { + address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', + storageKeys: [ + '0x0000000000000000000000000000000000000000000000000000000000000003', + '0x0000000000000000000000000000000000000000000000000000000000000007', + ], + }, + { + address: '0xbb9bc244d798123fde783fcc1c72d3bb8c189413', + storageKeys: [], + }, + ], +}; +const signedType0x1Transaction: Transaction = { + ...rawType0x1Transaction, + v: '0x0', + r: '0xecfaaf5659c3d126d5cdf537bb29fa0a28c1fce7651b64cf3106e4a156549b3e', + s: '0x75b26402a0c72d108cade9c641889ee21189129d5495964e3f42267db4aa837b', +}; +const type0x1SignedTransactionInfo = { + raw: '0x01f8da82053980843b9aca018252089400000000000000000000000000000000000000000180f872f85994de0b295669a9fd93d5f28d9ec85e40f4cb697baef842a00000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000007d694bb9bc244d798123fde783fcc1c72d3bb8c189413c080a0ecfaaf5659c3d126d5cdf537bb29fa0a28c1fce7651b64cf3106e4a156549b3ea075b26402a0c72d108cade9c641889ee21189129d5495964e3f42267db4aa837b', + tx: signedType0x1Transaction as TransactionSignedAPI, +}; + +const rawType0x2Transaction: Transaction = { + from: '0x6E599DA0bfF7A6598AC1224E4985430Bf16458a4', + type: '0x2', + nonce: '0x0', + gasPrice: '0x3b9aca01', + gasLimit: '0x5208', + value: '0x1', + input: '0x', + to: '0x0000000000000000000000000000000000000000', + accessList: [ + { + address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', + storageKeys: [ + '0x0000000000000000000000000000000000000000000000000000000000000003', + '0x0000000000000000000000000000000000000000000000000000000000000007', + ], + }, + { + address: '0xbb9bc244d798123fde783fcc1c72d3bb8c189413', + storageKeys: [], + }, + ], +}; +const signedType0x2Transaction: Transaction = { + ...rawType0x2Transaction, + v: '0x0', + r: '0xcee64249a5d244614de658ac37c2c2e9e3ba232814401d29d234c57a79ff24a7', + s: '0x2cb0a134943392ebc71c3ff2b8d8d3defaa1d2f0cb5f65311119bcaeff546034', +}; +const type0x2SignedTransactionInfo = { + raw: '0x02f8db820539808252088252088252089400000000000000000000000000000000000000000180f872f85994de0b295669a9fd93d5f28d9ec85e40f4cb697baef842a00000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000007d694bb9bc244d798123fde783fcc1c72d3bb8c189413c080a0b2c321d81024278c17476072d576450a415179e355a247bab30f24052210f20ea066878fda7e04c5993c80cab324456a3c90ad0f8953fe2e64c91255f75ba2b540', + tx: signedType0x2Transaction as TransactionSignedAPI, +}; + +export const returnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - transaction + * - SignedTransactionInfoAPI or HexStringBytes (i.e. SignedTransactionInfoAPI.raw) + * - Formatted SignedTransactionInfoAPI + */ +type TestData = [ + string, + [Transaction, SignedTransactionInfoAPI | HexStringBytes, SignedTransactionInfoAPI], +]; +export const testData: TestData[] = [ + [ + JSON.stringify(rawLegacyTransaction), + [ + rawLegacyTransaction, + legacySignedTransactionInfo, + decodeSignedTransaction(legacySignedTransactionInfo.raw, returnFormat, { + fillInputAndData: true, + }), + ], + ], + [ + JSON.stringify(rawLegacyTransaction), + [ + rawLegacyTransaction, + legacySignedTransactionInfo.raw, + decodeSignedTransaction(legacySignedTransactionInfo.raw, returnFormat, { + fillInputAndData: true, + }), + ], + ], + [ + JSON.stringify(rawType0x1Transaction), + [ + rawType0x1Transaction, + type0x1SignedTransactionInfo, + decodeSignedTransaction(type0x1SignedTransactionInfo.raw, returnFormat, { + fillInputAndData: true, + }), + ], + ], + [ + JSON.stringify(rawType0x1Transaction), + [ + rawType0x1Transaction, + type0x1SignedTransactionInfo.raw, + decodeSignedTransaction(type0x1SignedTransactionInfo.raw, returnFormat, { + fillInputAndData: true, + }), + ], + ], + [ + JSON.stringify(rawType0x2Transaction), + [ + rawType0x2Transaction, + type0x2SignedTransactionInfo, + decodeSignedTransaction(type0x2SignedTransactionInfo.raw, returnFormat, { + fillInputAndData: true, + }), + ], + ], + [ + JSON.stringify(rawType0x2Transaction), + [ + rawType0x2Transaction, + type0x2SignedTransactionInfo.raw, + decodeSignedTransaction(type0x2SignedTransactionInfo.raw, returnFormat, { + fillInputAndData: true, + }), + ], + ], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/sign_typed_data.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/sign_typed_data.ts new file mode 100644 index 00000000000..b01f33f698e --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/fixtures/sign_typed_data.ts @@ -0,0 +1,100 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Address, Eip712TypedData } from 'web3-types'; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +const typedData = { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + Person: [ + { + name: 'name', + type: 'string', + }, + { + name: 'wallet', + type: 'address', + }, + ], + Mail: [ + { + name: 'from', + type: 'Person', + }, + { + name: 'to', + type: 'Person', + }, + { + name: 'contents', + type: 'string', + }, + ], + }, + primaryType: 'Mail', + domain: { + name: 'Ether Mail', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + from: { + name: 'Cow', + wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + }, + to: { + name: 'Bob', + wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + }, + contents: 'Hello, Bob!', + }, +}; + +export const mockRpcResponse = + '0xf326421b6b34e1e59a8a34c986861e8790a9402a9e51e012718872cd51dad4e23c590bd170be23c51cff4b44d8d4eba54120431ca6a04940098dae62d97677da1c'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - address + * - message + */ +type TestData = [string, [Address, Eip712TypedData, boolean]]; +export const testData: TestData[] = [ + ['useLegacy = false', [address, typedData, false]], + ['useLegacy = true', [address, typedData, true]], +]; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_balance.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_balance.test.ts new file mode 100644 index 00000000000..5d9f8935f0b --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_balance.test.ts @@ -0,0 +1,82 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { + ETH_DATA_FORMAT, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + FMT_BYTES, + Web3EthExecutionAPI, +} from 'web3-types'; +import { isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getBalance } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/get_balance'; + +jest.mock('web3-rpc-methods'); + +describe('getBalance', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getBalance with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputAddress, inputBlockNumber] = inputParameters; + + let inputBlockNumberFormatted; + + if (isNullish(inputBlockNumber)) { + inputBlockNumberFormatted = web3Context.defaultBlock; + } else { + inputBlockNumberFormatted = format( + { format: 'uint' }, + inputBlockNumber, + ETH_DATA_FORMAT, + ); + } + + await getBalance(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getBalance).toHaveBeenCalledWith( + web3Context.requestManager, + inputAddress, + inputBlockNumberFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'uint' }, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.getBalance as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await getBalance(web3Context, ...inputParameters, expectedReturnFormat); + expect(result).toBe(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block.test.ts new file mode 100644 index 00000000000..778c6d4d000 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block.test.ts @@ -0,0 +1,87 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { + ETH_DATA_FORMAT, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + FMT_BYTES, + Bytes, + Web3EthExecutionAPI, +} from 'web3-types'; +import { isBytes, isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getBlock } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, mockRpcResponseHydrated, testData } from './fixtures/get_block'; +import { blockSchema } from '../../../src/schemas'; + +jest.mock('web3-rpc-methods'); + +describe('getBlock', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getBlock with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputBlock, hydrated] = inputParameters; + const inputBlockIsBytes = isBytes(inputBlock as Bytes); + + let inputBlockFormatted; + + if (inputBlockIsBytes) { + inputBlockFormatted = format({ format: 'bytes32' }, inputBlock, ETH_DATA_FORMAT); + } else if (isNullish(inputBlock)) { + inputBlockFormatted = web3Context.defaultBlock; + } else { + inputBlockFormatted = format({ format: 'uint' }, inputBlock, ETH_DATA_FORMAT); + } + await getBlock(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect( + inputBlockIsBytes ? ethRpcMethods.getBlockByHash : ethRpcMethods.getBlockByNumber, + ).toHaveBeenCalledWith(web3Context.requestManager, inputBlockFormatted, hydrated); + }, + ); + + it.each(testData)( + `should format expectedMockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputBlock, hydrated] = inputParameters; + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedMockRpcResponse = hydrated ? mockRpcResponseHydrated : mockRpcResponse; + const expectedFormattedResult = format( + blockSchema, + expectedMockRpcResponse, + expectedReturnFormat, + ); + const inputBlockIsBytes = isBytes(inputBlock as Bytes); + ( + (inputBlockIsBytes + ? ethRpcMethods.getBlockByHash + : ethRpcMethods.getBlockByNumber) as jest.Mock + ).mockResolvedValueOnce(expectedMockRpcResponse); + + const result = await getBlock(web3Context, ...inputParameters, expectedReturnFormat); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_number.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_number.test.ts new file mode 100644 index 00000000000..71babcb4bf4 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_number.test.ts @@ -0,0 +1,51 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getBlockNumber } from '../../../src/rpc_method_wrappers'; + +jest.mock('web3-rpc-methods'); + +describe('getBlockNumber', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it('should call rpcMethods.getBlockNumber with expected parameters', async () => { + await getBlockNumber(web3Context, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getBlockNumber).toHaveBeenCalledWith(web3Context.requestManager); + }); + + it('should format mockRpcResponse using provided return format', async () => { + const mockRpcResponse = '0x4b7'; + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'uint' }, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.getBlockNumber as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await getBlockNumber(web3Context, expectedReturnFormat); + expect(result).toBe(expectedFormattedResult); + }); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_transaction_count.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_transaction_count.test.ts new file mode 100644 index 00000000000..82392e47d9b --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_transaction_count.test.ts @@ -0,0 +1,92 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { + ETH_DATA_FORMAT, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + FMT_BYTES, + Bytes, + Web3EthExecutionAPI, +} from 'web3-types'; +import { isBytes, isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getBlockTransactionCount } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/get_block_transaction_count'; + +jest.mock('web3-rpc-methods'); + +describe('getBlockTransactionCount', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getBlock with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputBlock] = inputParameters; + const inputBlockIsBytes = isBytes(inputBlock as Bytes); + + let inputBlockFormatted; + + if (inputBlockIsBytes) { + inputBlockFormatted = format({ format: 'bytes32' }, inputBlock, ETH_DATA_FORMAT); + } else if (isNullish(inputBlock)) { + inputBlockFormatted = web3Context.defaultBlock; + } else { + inputBlockFormatted = format({ format: 'uint' }, inputBlock, ETH_DATA_FORMAT); + } + + await getBlockTransactionCount(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect( + inputBlockIsBytes + ? ethRpcMethods.getBlockTransactionCountByHash + : ethRpcMethods.getBlockTransactionCountByNumber, + ).toHaveBeenCalledWith(web3Context.requestManager, inputBlockFormatted); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputBlock] = inputParameters; + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'uint' }, + mockRpcResponse, + expectedReturnFormat, + ); + const inputBlockIsBytes = isBytes(inputBlock as Bytes); + ( + (inputBlockIsBytes + ? ethRpcMethods.getBlockTransactionCountByHash + : ethRpcMethods.getBlockTransactionCountByNumber) as jest.Mock + ).mockResolvedValueOnce(mockRpcResponse); + + const result = await getBlockTransactionCount( + web3Context, + inputBlock, + expectedReturnFormat, + ); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_uncle_count.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_uncle_count.test.ts new file mode 100644 index 00000000000..3556234315f --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_uncle_count.test.ts @@ -0,0 +1,88 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { + ETH_DATA_FORMAT, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + FMT_BYTES, + Bytes, + Web3EthExecutionAPI, +} from 'web3-types'; +import { isBytes, isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getBlockUncleCount } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/get_block_uncle_count'; + +jest.mock('web3-rpc-methods'); + +describe('getBlockUncleCount', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getBlockUncleCount with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputBlock] = inputParameters; + const inputBlockIsBytes = isBytes(inputBlock as Bytes); + + let inputBlockFormatted; + + if (inputBlockIsBytes) { + inputBlockFormatted = format({ format: 'bytes32' }, inputBlock, ETH_DATA_FORMAT); + } else if (isNullish(inputBlock)) { + inputBlockFormatted = web3Context.defaultBlock; + } else { + inputBlockFormatted = format({ format: 'uint' }, inputBlock, ETH_DATA_FORMAT); + } + + await getBlockUncleCount(web3Context, inputBlock, DEFAULT_RETURN_FORMAT); + expect( + inputBlockIsBytes + ? ethRpcMethods.getUncleCountByBlockHash + : ethRpcMethods.getUncleCountByBlockNumber, + ).toHaveBeenCalledWith(web3Context.requestManager, inputBlockFormatted); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputBlock] = inputParameters; + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'uint' }, + mockRpcResponse, + expectedReturnFormat, + ); + const inputBlockIsBytes = isBytes(inputBlock as Bytes); + ( + (inputBlockIsBytes + ? ethRpcMethods.getUncleCountByBlockHash + : ethRpcMethods.getUncleCountByBlockNumber) as jest.Mock + ).mockResolvedValueOnce(mockRpcResponse); + + const result = await getBlockUncleCount(web3Context, inputBlock, expectedReturnFormat); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_chain_id.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_chain_id.test.ts new file mode 100644 index 00000000000..e753bf13804 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_chain_id.test.ts @@ -0,0 +1,51 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getChainId } from '../../../src/rpc_method_wrappers'; + +jest.mock('web3-rpc-methods'); + +describe('getChainId', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it('should call rpcMethods.getBlockNumber with expected parameters', async () => { + await getChainId(web3Context, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getChainId).toHaveBeenCalledWith(web3Context.requestManager); + }); + + it('should format mockRpcResponse using provided return format', async () => { + const mockRpcResponse = '0x4b7'; + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'uint' }, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.getChainId as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await getChainId(web3Context, expectedReturnFormat); + expect(result).toBe(expectedFormattedResult); + }); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_code.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_code.test.ts new file mode 100644 index 00000000000..51f63db815f --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_code.test.ts @@ -0,0 +1,82 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { + ETH_DATA_FORMAT, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + FMT_BYTES, + Web3EthExecutionAPI, +} from 'web3-types'; +import { isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getCode } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/get_code'; + +jest.mock('web3-rpc-methods'); + +describe('getCode', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getCode with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputAddress, inputBlockNumber] = inputParameters; + + let inputBlockNumberFormatted; + + if (isNullish(inputBlockNumber)) { + inputBlockNumberFormatted = web3Context.defaultBlock; + } else { + inputBlockNumberFormatted = format( + { format: 'uint' }, + inputBlockNumber, + ETH_DATA_FORMAT, + ); + } + + await getCode(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getCode).toHaveBeenCalledWith( + web3Context.requestManager, + inputAddress, + inputBlockNumberFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'bytes' }, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.getCode as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await getCode(web3Context, ...inputParameters, expectedReturnFormat); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_coinbase.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_coinbase.test.ts new file mode 100644 index 00000000000..6a896c33763 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_coinbase.test.ts @@ -0,0 +1,36 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getCoinbase } from '../../../src/rpc_method_wrappers'; + +jest.mock('web3-rpc-methods'); + +describe('getCoinbase', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it('should call rpcMethods.getCoinbase with expected parameters', async () => { + await getCoinbase(web3Context); + expect(ethRpcMethods.getCoinbase).toHaveBeenCalledWith(web3Context.requestManager); + }); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_fee_history.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_fee_history.test.ts new file mode 100644 index 00000000000..8a89aa75369 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_fee_history.test.ts @@ -0,0 +1,104 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { + ETH_DATA_FORMAT, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + FMT_BYTES, + Web3EthExecutionAPI, +} from 'web3-types'; +import { isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getFeeHistory } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/get_fee_history'; +import { feeHistorySchema } from '../../../src/schemas'; +import { NUMBER_DATA_FORMAT } from '../../../src/constants'; + +jest.mock('web3-rpc-methods'); + +describe('getFeeHistory', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getProof with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputBlockCount, inputNewestBlock, inputRewardPercentiles] = inputParameters; + const inputBlockCountFormatted = format( + { format: 'uint' }, + inputBlockCount, + ETH_DATA_FORMAT, + ); + const inputRewardPercentilesFormatted = format( + { + type: 'array', + items: { + format: 'uint', + }, + }, + inputRewardPercentiles, + NUMBER_DATA_FORMAT, + ); + + let inputNewestBlockFormatted; + + if (isNullish(inputNewestBlock)) { + inputNewestBlockFormatted = web3Context.defaultBlock; + } else { + inputNewestBlockFormatted = format( + { format: 'uint' }, + inputNewestBlock, + ETH_DATA_FORMAT, + ); + } + + await getFeeHistory(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getFeeHistory).toHaveBeenCalledWith( + web3Context.requestManager, + inputBlockCountFormatted, + inputNewestBlockFormatted, + inputRewardPercentilesFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + feeHistorySchema, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.getFeeHistory as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await getFeeHistory( + web3Context, + ...inputParameters, + expectedReturnFormat, + ); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_gas_price.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_gas_price.test.ts new file mode 100644 index 00000000000..3053e2623ac --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_gas_price.test.ts @@ -0,0 +1,51 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getGasPrice } from '../../../src/rpc_method_wrappers'; + +jest.mock('web3-rpc-methods'); + +describe('getGasPrice', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it('should call rpcMethods.getGasPrice with expected parameters', async () => { + await getGasPrice(web3Context, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getGasPrice).toHaveBeenCalledWith(web3Context.requestManager); + }); + + it('should format mockRpcResponse using provided return format', async () => { + const mockRpcResponse = '0x1dfd14000'; + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'uint' }, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.getGasPrice as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await getGasPrice(web3Context, expectedReturnFormat); + expect(result).toBe(expectedFormattedResult); + }); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_hash_rate.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_hash_rate.test.ts new file mode 100644 index 00000000000..8d8c7a04702 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_hash_rate.test.ts @@ -0,0 +1,51 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getHashRate } from '../../../src/rpc_method_wrappers'; + +jest.mock('web3-rpc-methods'); + +describe('getHashRate', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it('should call rpcMethods.getHashRate with expected parameters', async () => { + await getHashRate(web3Context, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getHashRate).toHaveBeenCalledWith(web3Context.requestManager); + }); + + it('should format return value using provided return format', async () => { + const mockRpcResponse = '0x38a'; + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'uint' }, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.getHashRate as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await getHashRate(web3Context, expectedReturnFormat); + expect(result).toBe(expectedFormattedResult); + }); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_logs.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_logs.test.ts new file mode 100644 index 00000000000..903ddf61b10 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_logs.test.ts @@ -0,0 +1,64 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getLogs } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/get_logs'; +import { logSchema } from '../../../src/schemas'; + +jest.mock('web3-rpc-methods'); + +describe('getLogs', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getLogs with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + (ethRpcMethods.getLogs as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + await getLogs(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getLogs).toHaveBeenCalledWith( + web3Context.requestManager, + ...inputParameters, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = mockRpcResponse.map(res => { + if (typeof res === 'string') { + return res; + } + + return format(logSchema, res, expectedReturnFormat); + }); + (ethRpcMethods.getLogs as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await getLogs(web3Context, ...inputParameters, expectedReturnFormat); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_pending_transactions.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_pending_transactions.test.ts new file mode 100644 index 00000000000..211295389c7 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_pending_transactions.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getPendingTransactions } from '../../../src/rpc_method_wrappers'; +import { formatTransaction } from '../../../src'; +import { mockRpcResponse } from './fixtures/get_pending_transactions'; + +jest.mock('web3-rpc-methods'); + +describe('getPendingTransactions', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it('should call rpcMethods.getPendingTransactions with expected parameters', async () => { + (ethRpcMethods.getPendingTransactions as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + await getPendingTransactions(web3Context, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getPendingTransactions).toHaveBeenCalledWith( + web3Context.requestManager, + ); + }); + + it('should format return value using provided return format', async () => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = mockRpcResponse.map(transaction => + formatTransaction(transaction, expectedReturnFormat), + ); + (ethRpcMethods.getPendingTransactions as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await getPendingTransactions(web3Context, expectedReturnFormat); + expect(result).toStrictEqual(expectedFormattedResult); + }); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_proof.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_proof.test.ts new file mode 100644 index 00000000000..65960a791e5 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_proof.test.ts @@ -0,0 +1,87 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { + ETH_DATA_FORMAT, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + FMT_BYTES, + Web3EthExecutionAPI, +} from 'web3-types'; +import { isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getProof } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/get_proof'; +import { accountSchema } from '../../../src/schemas'; + +jest.mock('web3-rpc-methods'); + +describe('getProof', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getProof with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputAddress, inputStorageKey, inputBlockNumber] = inputParameters; + const inputStorageKeyFormatted = inputStorageKey.map(s => + format({ format: 'bytes' }, s, ETH_DATA_FORMAT), + ); + + let inputBlockNumberFormatted; + + if (isNullish(inputBlockNumber)) { + inputBlockNumberFormatted = web3Context.defaultBlock; + } else { + inputBlockNumberFormatted = format( + { format: 'uint' }, + inputBlockNumber, + ETH_DATA_FORMAT, + ); + } + + await getProof(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getProof).toHaveBeenCalledWith( + web3Context.requestManager, + inputAddress, + inputStorageKeyFormatted, + inputBlockNumberFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + accountSchema, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.getProof as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await getProof(web3Context, ...inputParameters, expectedReturnFormat); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_protocol_version.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_protocol_version.test.ts new file mode 100644 index 00000000000..5ebe9c200e9 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_protocol_version.test.ts @@ -0,0 +1,36 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getProtocolVersion } from '../../../src/rpc_method_wrappers'; + +jest.mock('web3-rpc-methods'); + +describe('getProtocolVersion', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it('should call rpcMethods.getProtocolVersion with expected parameters', async () => { + await getProtocolVersion(web3Context); + expect(ethRpcMethods.getProtocolVersion).toHaveBeenCalledWith(web3Context.requestManager); + }); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_storage_at.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_storage_at.test.ts new file mode 100644 index 00000000000..6006cd8334c --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_storage_at.test.ts @@ -0,0 +1,92 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { + ETH_DATA_FORMAT, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + FMT_BYTES, + Web3EthExecutionAPI, +} from 'web3-types'; +import { isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getStorageAt } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/get_storage_at'; + +jest.mock('web3-rpc-methods'); + +describe('getStorageAt', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getStorageAt with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputAddress, inputStorageSlot, inputBlockNumber] = inputParameters; + const inputStorageSlotFormatted = format( + { format: 'uint' }, + inputStorageSlot, + ETH_DATA_FORMAT, + ); + + let inputBlockNumberFormatted; + + if (isNullish(inputBlockNumber)) { + inputBlockNumberFormatted = web3Context.defaultBlock; + } else { + inputBlockNumberFormatted = format( + { format: 'uint' }, + inputBlockNumber, + ETH_DATA_FORMAT, + ); + } + + await getStorageAt(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getStorageAt).toHaveBeenCalledWith( + web3Context.requestManager, + inputAddress, + inputStorageSlotFormatted, + inputBlockNumberFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\nMock Rpc Response: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'bytes' }, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.getStorageAt as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await getStorageAt( + web3Context, + ...inputParameters, + expectedReturnFormat, + ); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction.test.ts new file mode 100644 index 00000000000..225a9e106ef --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction.test.ts @@ -0,0 +1,74 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getTransaction } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/get_transaction'; +import { formatTransaction, transactionInfoSchema } from '../../../src'; + +jest.mock('web3-rpc-methods'); + +describe('getTransaction', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getTransaction with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputTransactionHash] = inputParameters; + const inputTransactionHashFormatted = format( + { format: 'bytes32' }, + inputTransactionHash, + DEFAULT_RETURN_FORMAT, + ); + + await getTransaction(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getTransactionByHash).toHaveBeenCalledWith( + web3Context.requestManager, + inputTransactionHashFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\nMock Rpc Response: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = formatTransaction( + mockRpcResponse, + expectedReturnFormat, + { transactionSchema: transactionInfoSchema }, + ); + (ethRpcMethods.getTransactionByHash as jest.Mock).mockResolvedValueOnce( + mockRpcResponse, + ); + + const result = await getTransaction( + web3Context, + ...inputParameters, + expectedReturnFormat, + ); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_count.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_count.test.ts new file mode 100644 index 00000000000..2907477aef1 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_count.test.ts @@ -0,0 +1,86 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { + ETH_DATA_FORMAT, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + FMT_BYTES, + Web3EthExecutionAPI, +} from 'web3-types'; +import { isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getTransactionCount } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/get_transaction_count'; + +jest.mock('web3-rpc-methods'); + +describe('getTransactionCount', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getBalance with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputAddress, inputBlockNumber] = inputParameters; + + let inputBlockNumberFormatted; + + if (isNullish(inputBlockNumber)) { + inputBlockNumberFormatted = web3Context.defaultBlock; + } else { + inputBlockNumberFormatted = format( + { format: 'uint' }, + inputBlockNumber, + ETH_DATA_FORMAT, + ); + } + + await getTransactionCount(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getTransactionCount).toHaveBeenCalledWith( + web3Context.requestManager, + inputAddress, + inputBlockNumberFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'uint' }, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.getTransactionCount as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await getTransactionCount( + web3Context, + ...inputParameters, + expectedReturnFormat, + ); + expect(result).toBe(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_from_block.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_from_block.test.ts new file mode 100644 index 00000000000..8f0a231da01 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_from_block.test.ts @@ -0,0 +1,102 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { + ETH_DATA_FORMAT, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + FMT_BYTES, + Bytes, + Web3EthExecutionAPI, +} from 'web3-types'; +import { isBytes, isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getTransactionFromBlock } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/get_transaction_from_block'; +import { formatTransaction, transactionInfoSchema } from '../../../src'; + +jest.mock('web3-rpc-methods'); + +describe('getTransactionFromBlock', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getTransactionFromBlock with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputBlock, inputTransactionIndex] = inputParameters; + const inputBlockIsBytes = isBytes(inputBlock as Bytes); + const inputTransactionIndexFormatted = format( + { format: 'uint' }, + inputTransactionIndex, + ETH_DATA_FORMAT, + ); + + let inputBlockFormatted; + + if (inputBlockIsBytes) { + inputBlockFormatted = format({ format: 'bytes32' }, inputBlock, ETH_DATA_FORMAT); + } else if (isNullish(inputBlock)) { + inputBlockFormatted = web3Context.defaultBlock; + } else { + inputBlockFormatted = format({ format: 'uint' }, inputBlock, ETH_DATA_FORMAT); + } + + await getTransactionFromBlock(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect( + inputBlockIsBytes + ? ethRpcMethods.getTransactionByBlockHashAndIndex + : ethRpcMethods.getTransactionByBlockNumberAndIndex, + ).toHaveBeenCalledWith( + web3Context.requestManager, + inputBlockFormatted, + inputTransactionIndexFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputBlock] = inputParameters; + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = formatTransaction( + mockRpcResponse, + expectedReturnFormat, + { transactionSchema: transactionInfoSchema }, + ); + const inputBlockIsBytes = isBytes(inputBlock as Bytes); + ( + (inputBlockIsBytes + ? ethRpcMethods.getTransactionByBlockHashAndIndex + : ethRpcMethods.getTransactionByBlockNumberAndIndex) as jest.Mock + ).mockResolvedValueOnce(mockRpcResponse); + + const result = await getTransactionFromBlock( + web3Context, + ...inputParameters, + expectedReturnFormat, + ); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_receipt.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_receipt.test.ts new file mode 100644 index 00000000000..f9d5d2ef462 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_receipt.test.ts @@ -0,0 +1,74 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getTransactionReceipt } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/get_transaction_receipt'; +import { transactionReceiptSchema } from '../../../src/schemas'; + +jest.mock('web3-rpc-methods'); + +describe('getTransactionReceipt', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getTransaction with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputTransactionHash] = inputParameters; + const inputTransactionHashFormatted = format( + { format: 'bytes32' }, + inputTransactionHash, + DEFAULT_RETURN_FORMAT, + ); + + await getTransactionReceipt(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.getTransactionReceipt).toHaveBeenCalledWith( + web3Context.requestManager, + inputTransactionHashFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + transactionReceiptSchema, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( + mockRpcResponse, + ); + + const result = await getTransactionReceipt( + web3Context, + ...inputParameters, + expectedReturnFormat, + ); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_uncle.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_uncle.test.ts new file mode 100644 index 00000000000..fbbfa1ca510 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_uncle.test.ts @@ -0,0 +1,98 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { + ETH_DATA_FORMAT, + DEFAULT_RETURN_FORMAT, + FMT_NUMBER, + FMT_BYTES, + Bytes, + Web3EthExecutionAPI, +} from 'web3-types'; +import { isBytes, isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { getUncle } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData } from './fixtures/get_uncle'; +import { blockSchema } from '../../../src/schemas'; + +jest.mock('web3-rpc-methods'); + +describe('getUncle', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.getUncle with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputBlock, inputUncleIndex] = inputParameters; + const inputBlockIsBytes = isBytes(inputBlock as Bytes); + const inputUncleIndexFormatted = format( + { format: 'uint' }, + inputUncleIndex, + ETH_DATA_FORMAT, + ); + + let inputBlockFormatted; + + if (inputBlockIsBytes) { + inputBlockFormatted = format({ format: 'bytes32' }, inputBlock, ETH_DATA_FORMAT); + } else if (isNullish(inputBlock)) { + inputBlockFormatted = web3Context.defaultBlock; + } else { + inputBlockFormatted = format({ format: 'uint' }, inputBlock, ETH_DATA_FORMAT); + } + + await getUncle(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect( + inputBlockIsBytes + ? ethRpcMethods.getUncleByBlockHashAndIndex + : ethRpcMethods.getUncleByBlockNumberAndIndex, + ).toHaveBeenCalledWith( + web3Context.requestManager, + inputBlockFormatted, + inputUncleIndexFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\nMock Rpc Response: %s\n`, + async (_, inputParameters) => { + const [inputBlock] = inputParameters; + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + blockSchema, + mockRpcResponse, + expectedReturnFormat, + ); + const inputBlockIsBytes = isBytes(inputBlock as Bytes); + ( + (inputBlockIsBytes + ? ethRpcMethods.getUncleByBlockHashAndIndex + : ethRpcMethods.getUncleByBlockNumberAndIndex) as jest.Mock + ).mockResolvedValueOnce(mockRpcResponse); + + const result = await getUncle(web3Context, ...inputParameters, expectedReturnFormat); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/is_mining.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/is_mining.test.ts new file mode 100644 index 00000000000..e782aa321d4 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/is_mining.test.ts @@ -0,0 +1,36 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { isMining } from '../../../src/rpc_method_wrappers'; + +jest.mock('web3-rpc-methods'); + +describe('isMining', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it('should call rpcMethods.getMining with expected parameters', async () => { + await isMining(web3Context); + expect(ethRpcMethods.getMining).toHaveBeenCalledWith(web3Context.requestManager); + }); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/is_syncing.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/is_syncing.test.ts new file mode 100644 index 00000000000..5920db0129b --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/is_syncing.test.ts @@ -0,0 +1,36 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { isSyncing } from '../../../src/rpc_method_wrappers'; + +jest.mock('web3-rpc-methods'); + +describe('isSyncing', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it('should call rpcMethods.getSyncing with expected parameters', async () => { + await isSyncing(web3Context); + expect(ethRpcMethods.getSyncing).toHaveBeenCalledWith(web3Context.requestManager); + }); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/send_signed_transaction.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/send_signed_transaction.test.ts new file mode 100644 index 00000000000..4a741c46646 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/send_signed_transaction.test.ts @@ -0,0 +1,306 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { DEFAULT_RETURN_FORMAT, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { sendSignedTransaction } from '../../../src/rpc_method_wrappers'; +import * as WaitForTransactionReceipt from '../../../src/utils/wait_for_transaction_receipt'; +import * as WatchTransactionForConfirmations from '../../../src/utils/watch_transaction_for_confirmations'; +import { + expectedTransactionReceipt, + expectedTransactionHash, + testData, +} from './fixtures/send_signed_transaction'; +import { transactionReceiptSchema } from '../../../src/schemas'; +import { SendTxHelper } from '../../../src/utils/send_tx_helper'; + +jest.mock('web3-rpc-methods'); +jest.mock('../../../src/utils/wait_for_transaction_receipt'); +jest.mock('../../../src/utils/watch_transaction_for_confirmations'); + +describe('sendTransaction', () => { + const testMessage = + 'Title: %s\ninputSignedTransaction: %s\nexpectedTransactionHash: %s\nexpectedTransactionReceipt: %s\n'; + + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + afterEach(() => jest.resetAllMocks()); + + it.each(testData)( + `should remove signature part in transaction before checkRevertBeforeSending`, + async (_, inputSignedTransaction) => { + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(expectedTransactionReceipt); + + const checkRevertBeforeSendingSpy = jest.fn().mockImplementation((transaction) => { + expect(transaction).toBeDefined(); + + // verify signature part is removed before sending to revert check function + expect(transaction).not.toHaveProperty('v'); + expect(transaction).not.toHaveProperty('r'); + expect(transaction).not.toHaveProperty('s'); + }); + + SendTxHelper.prototype.checkRevertBeforeSending = checkRevertBeforeSendingSpy; + + const inputSignedTransactionFormatted = format( + { format: 'bytes' }, + inputSignedTransaction, + DEFAULT_RETURN_FORMAT, + ); + await sendSignedTransaction(web3Context, inputSignedTransaction, DEFAULT_RETURN_FORMAT); + + // verify original tx params are intact + expect(ethRpcMethods.sendRawTransaction).toHaveBeenCalledWith( + web3Context.requestManager, + inputSignedTransactionFormatted, + ); + + expect(checkRevertBeforeSendingSpy).toHaveBeenCalledTimes(1); + + }, + ); + + it.each(testData)( + `sending event should emit with inputSignedTransaction\n ${testMessage}`, + async (_, inputSignedTransaction) => { + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(expectedTransactionReceipt); + + const inputSignedTransactionFormatted = format( + { format: 'bytes' }, + inputSignedTransaction, + DEFAULT_RETURN_FORMAT, + ); + await sendSignedTransaction( + web3Context, + inputSignedTransaction, + DEFAULT_RETURN_FORMAT, + ).on('sending', signedTransaction => { + expect(signedTransaction).toStrictEqual(inputSignedTransactionFormatted); + }); + + expect.assertions(1); + }, + ); + + it.each(testData)( + `should call ethRpcMethods.sendRawTransaction with expected parameters\n ${testMessage}`, + async (_, inputSignedTransaction) => { + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(expectedTransactionReceipt); + + const inputSignedTransactionFormatted = format( + { format: 'bytes' }, + inputSignedTransaction, + DEFAULT_RETURN_FORMAT, + ); + await sendSignedTransaction(web3Context, inputSignedTransaction, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.sendRawTransaction).toHaveBeenCalledWith( + web3Context.requestManager, + inputSignedTransactionFormatted, + ); + }, + ); + + it.each(testData)( + `sent event should emit with inputSignedTransaction\n ${testMessage}`, + async (_, inputSignedTransaction) => { + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(expectedTransactionReceipt); + + const inputSignedTransactionFormatted = format( + { format: 'bytes' }, + inputSignedTransaction, + DEFAULT_RETURN_FORMAT, + ); + + await sendSignedTransaction( + web3Context, + inputSignedTransaction, + DEFAULT_RETURN_FORMAT, + ).on('sent', signedTransaction => { + expect(signedTransaction).toStrictEqual(inputSignedTransactionFormatted); + }); + + expect.assertions(1); + }, + ); + + it.each(testData)( + `transactionHash event should emit with inputSignedTransaction\n ${testMessage}`, + async (_, inputSignedTransaction) => { + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(expectedTransactionReceipt); + + (ethRpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( + expectedTransactionHash, + ); + + await sendSignedTransaction( + web3Context, + inputSignedTransaction, + DEFAULT_RETURN_FORMAT, + ).on('transactionHash', transactionHash => { + expect(transactionHash).toStrictEqual(expectedTransactionHash); + }); + + expect.assertions(1); + }, + ); + + it.each(testData)( + `should call WaitForTransactionReceipt.waitForTransactionReceipt with expected parameters\n ${testMessage}`, + async (_, inputSignedTransaction) => { + (ethRpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( + expectedTransactionHash, + ); + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(expectedTransactionReceipt); + + await sendSignedTransaction(web3Context, inputSignedTransaction, DEFAULT_RETURN_FORMAT); + expect(WaitForTransactionReceipt.waitForTransactionReceipt).toHaveBeenCalledWith( + web3Context, + expectedTransactionHash, + DEFAULT_RETURN_FORMAT, + ); + }, + ); + + it.each(testData)( + `waitForTransactionReceipt is called when expected\n ${testMessage}`, + async (_, inputSignedTransaction) => { + const waitForTransactionReceiptSpy = jest + .spyOn(WaitForTransactionReceipt, 'waitForTransactionReceipt') + .mockResolvedValueOnce(expectedTransactionReceipt); + + (ethRpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( + expectedTransactionHash, + ); + + await sendSignedTransaction(web3Context, inputSignedTransaction, DEFAULT_RETURN_FORMAT); + + expect(waitForTransactionReceiptSpy).toHaveBeenCalledWith( + web3Context, + expectedTransactionHash, + DEFAULT_RETURN_FORMAT, + ); + }, + ); + + it.each(testData)( + `receipt event should emit with inputSignedTransaction\n ${testMessage}`, + async (_, inputSignedTransaction) => { + const formattedTransactionReceipt = format( + transactionReceiptSchema, + expectedTransactionReceipt, + DEFAULT_RETURN_FORMAT, + ); + + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(expectedTransactionReceipt); + + await sendSignedTransaction( + web3Context, + inputSignedTransaction, + DEFAULT_RETURN_FORMAT, + ).on('receipt', receiptInfo => { + expect(receiptInfo).toStrictEqual(formattedTransactionReceipt); + }); + + expect.assertions(1); + }, + ); + + it.each(testData)( + `should resolve Web3PromiEvent with expectedTransactionReceipt\n ${testMessage}`, + async (_, inputSignedTransaction) => { + const formattedTransactionReceipt = format( + transactionReceiptSchema, + expectedTransactionReceipt, + DEFAULT_RETURN_FORMAT, + ); + + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(expectedTransactionReceipt); + expect( + await sendSignedTransaction( + web3Context, + inputSignedTransaction, + DEFAULT_RETURN_FORMAT, + ), + ).toStrictEqual(formattedTransactionReceipt); + }, + ); + + it.each(testData)( + `watchTransactionForConfirmations is called when expected\n ${testMessage}`, + async (_, inputTransaction) => { + const watchTransactionForConfirmationsSpy = jest.spyOn( + WatchTransactionForConfirmations, + 'watchTransactionForConfirmations', + ); + const formattedTransactionReceipt = format( + transactionReceiptSchema, + expectedTransactionReceipt, + DEFAULT_RETURN_FORMAT, + ); + + (ethRpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( + expectedTransactionHash, + ); + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(expectedTransactionReceipt); + + const promiEvent = sendSignedTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + ).on('confirmation', () => undefined); + + await promiEvent; + + expect(WaitForTransactionReceipt.waitForTransactionReceipt).toHaveBeenCalledWith( + web3Context, + expectedTransactionHash, + DEFAULT_RETURN_FORMAT, + ); + expect(watchTransactionForConfirmationsSpy).toHaveBeenCalledWith( + web3Context, + promiEvent, + formattedTransactionReceipt, + expectedTransactionHash, + DEFAULT_RETURN_FORMAT, + ); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/send_transaction.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/send_transaction.test.ts new file mode 100644 index 00000000000..3be8182cd33 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/send_transaction.test.ts @@ -0,0 +1,305 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, Web3EthExecutionAPI } from 'web3-types'; +import { isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { sendTransaction } from '../../../src/rpc_method_wrappers'; +import { formatTransaction } from '../../../src'; +import * as GetTransactionGasPricing from '../../../src/utils/get_transaction_gas_pricing'; +import * as WaitForTransactionReceipt from '../../../src/utils/wait_for_transaction_receipt'; +import * as WatchTransactionForConfirmations from '../../../src/utils/watch_transaction_for_confirmations'; +import { + expectedTransactionReceipt, + expectedTransactionHash, + testData, +} from './fixtures/send_transaction'; +import { transactionReceiptSchema } from '../../../src/schemas'; + +jest.mock('web3-rpc-methods'); +jest.mock('../../../src/utils/wait_for_transaction_receipt'); +jest.mock('../../../src/utils/watch_transaction_for_confirmations'); + +describe('sendTransaction', () => { + const testMessage = + 'Title: %s\ninputTransaction: %s\nsendTransactionOptions: %s\nexpectedTransactionHash: %s\nexpectedTransactionReceipt: %s\n'; + + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + afterEach(() => jest.resetAllMocks()); + + it.each(testData)( + `getTransactionGasPricing is called only when expected\n ${testMessage}`, + async (_, inputTransaction, sendTransactionOptions) => { + const getTransactionGasPricingSpy = jest.spyOn( + GetTransactionGasPricing, + 'getTransactionGasPricing', + ); + (WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock).mockResolvedValue( + expectedTransactionReceipt, + ); + await sendTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + sendTransactionOptions, + ); + + if ( + sendTransactionOptions?.ignoreGasPricing || + !isNullish(inputTransaction.gasPrice) || + (!isNullish(inputTransaction.maxPriorityFeePerGas) && + !isNullish(inputTransaction.maxFeePerGas)) + ) + // eslint-disable-next-line jest/no-conditional-expect + expect(getTransactionGasPricingSpy).not.toHaveBeenCalled(); + // eslint-disable-next-line jest/no-conditional-expect + else expect(getTransactionGasPricingSpy).toHaveBeenCalled(); + }, + ); + + it.each(testData)( + `sending event should emit with formattedTransaction\n ${testMessage}`, + async (_, inputTransaction, sendTransactionOptions) => { + const formattedTransaction = formatTransaction(inputTransaction, ETH_DATA_FORMAT); + (WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock).mockResolvedValue( + expectedTransactionReceipt, + ); + await sendTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + sendTransactionOptions, + ).on('sending', transaction => { + expect(transaction).toStrictEqual(formattedTransaction); + }); + + expect.assertions(1); + }, + ); + + it.each(testData)( + `should call ethRpcMethods.sendTransaction with expected parameters\n ${testMessage}`, + async (_, inputTransaction, sendTransactionOptions) => { + const formattedTransaction = formatTransaction(inputTransaction, ETH_DATA_FORMAT); + (WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock).mockResolvedValue( + expectedTransactionReceipt, + ); + await sendTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + sendTransactionOptions, + ); + expect(ethRpcMethods.sendTransaction).toHaveBeenCalledWith( + web3Context.requestManager, + formattedTransaction, + ); + }, + ); + + it.each(testData)( + `sent event should emit with formattedTransaction\n ${testMessage}`, + async (_, inputTransaction, sendTransactionOptions) => { + const formattedTransaction = formatTransaction(inputTransaction, ETH_DATA_FORMAT); + (WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock).mockResolvedValue( + expectedTransactionReceipt, + ); + + await sendTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + sendTransactionOptions, + ).on('sent', transaction => { + expect(transaction).toStrictEqual(formattedTransaction); + }); + + expect.assertions(1); + }, + ); + + it.each(testData)( + `transactionHash event should emit with expectedTransactionHash\n ${testMessage}`, + async (_, inputTransaction, sendTransactionOptions) => { + (ethRpcMethods.sendTransaction as jest.Mock).mockResolvedValueOnce( + expectedTransactionHash, + ); + (WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock).mockResolvedValue( + expectedTransactionReceipt, + ); + + await sendTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + sendTransactionOptions, + ).on('transactionHash', transactionHash => { + expect(transactionHash).toStrictEqual(expectedTransactionHash); + }); + + expect.assertions(1); + }, + ); + + it.each(testData)( + `should call WaitForTransactionReceipt.waitForTransactionReceipt with expected parameters\n ${testMessage}`, + async (_, inputTransaction, sendTransactionOptions) => { + (ethRpcMethods.sendTransaction as jest.Mock).mockResolvedValueOnce( + expectedTransactionHash, + ); + (WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock).mockResolvedValue( + expectedTransactionReceipt, + ); + + await sendTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + sendTransactionOptions, + ); + expect(WaitForTransactionReceipt.waitForTransactionReceipt).toHaveBeenCalledWith( + web3Context, + expectedTransactionHash, + DEFAULT_RETURN_FORMAT, + ); + }, + ); + + it.each(testData)( + `waitForTransactionReceipt is called when expected\n ${testMessage}`, + async (_, inputTransaction, sendTransactionOptions) => { + const waitForTransactionReceiptSpy = jest + .spyOn(WaitForTransactionReceipt, 'waitForTransactionReceipt') + .mockResolvedValueOnce(expectedTransactionReceipt); + + (ethRpcMethods.sendTransaction as jest.Mock).mockResolvedValueOnce( + expectedTransactionHash, + ); + + await sendTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + sendTransactionOptions, + ); + + expect(waitForTransactionReceiptSpy).toHaveBeenCalledWith( + web3Context, + expectedTransactionHash, + DEFAULT_RETURN_FORMAT, + ); + }, + ); + + it.each(testData)( + `receipt event should emit with expectedTransactionReceipt\n ${testMessage}`, + async (_, inputTransaction, sendTransactionOptions) => { + const formattedTransactionReceipt = format( + transactionReceiptSchema, + expectedTransactionReceipt, + DEFAULT_RETURN_FORMAT, + ); + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(formattedTransactionReceipt); + + await sendTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + sendTransactionOptions, + ).on('receipt', receiptInfo => { + expect(receiptInfo).toStrictEqual(formattedTransactionReceipt); + }); + + expect.assertions(1); + }, + ); + + it.each(testData)( + `should resolve Web3PromiEvent with expectedTransactionReceipt\n ${testMessage}`, + async (_, inputTransaction, sendTransactionOptions) => { + const formattedTransactionReceipt = format( + transactionReceiptSchema, + expectedTransactionReceipt, + DEFAULT_RETURN_FORMAT, + ); + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(formattedTransactionReceipt); + expect( + await sendTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + sendTransactionOptions, + ), + ).toStrictEqual(formattedTransactionReceipt); + }, + ); + + it.each(testData)( + `watchTransactionForConfirmations is called when expected\n ${testMessage}`, + async (_, inputTransaction, sendTransactionOptions) => { + const watchTransactionForConfirmationsSpy = jest.spyOn( + WatchTransactionForConfirmations, + 'watchTransactionForConfirmations', + ); + const formattedTransactionReceipt = format( + transactionReceiptSchema, + expectedTransactionReceipt, + DEFAULT_RETURN_FORMAT, + ); + + (ethRpcMethods.sendTransaction as jest.Mock).mockResolvedValueOnce( + expectedTransactionHash, + ); + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(expectedTransactionReceipt); + + const promiEvent = sendTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + sendTransactionOptions, + ).on('confirmation', () => undefined); + + await promiEvent; + + expect(WaitForTransactionReceipt.waitForTransactionReceipt).toHaveBeenCalledWith( + web3Context, + expectedTransactionHash, + DEFAULT_RETURN_FORMAT, + ); + expect(watchTransactionForConfirmationsSpy).toHaveBeenCalledWith( + web3Context, + promiEvent, + formattedTransactionReceipt, + expectedTransactionHash, + DEFAULT_RETURN_FORMAT, + ); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/sign.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/sign.test.ts new file mode 100644 index 00000000000..ebbbc16955c --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/sign.test.ts @@ -0,0 +1,88 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; +import { Wallet } from 'web3-eth-accounts'; +import { sign } from '../../../src/rpc_method_wrappers'; +import { mockRpcResponse, testData, walletTestData } from './fixtures/sign'; +import { createAccountProvider } from '../../fixtures/system_test_utils'; +import { SignatureObjectSchema } from '../../../src/schemas'; + +jest.mock('web3-rpc-methods'); + +describe('sign', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.sign with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputMessage, inputAddress] = inputParameters; + const inputMessageFormatted = format( + { format: 'bytes' }, + inputMessage, + DEFAULT_RETURN_FORMAT, + ); + await sign(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.sign).toHaveBeenCalledWith( + web3Context.requestManager, + inputAddress, + inputMessageFormatted, + ); + }, + ); + it.each(walletTestData)( + `should call rpcMethods.sign using the context wallet with expected parameters\nTitle: %s\nInput parameters: %s\n and return with expected format`, + async (_, inputParameters, expectedReturnFormat) => { + // set up wallet for signing + const localContext = new Web3Context('http://127.0.0.1:8545'); + const accountProvider = createAccountProvider(localContext); + const wallet = new Wallet(accountProvider); + wallet.create(1); + localContext['_wallet'] = wallet; + + const result = await sign(localContext, ...inputParameters, expectedReturnFormat); + const expectedFormattedResult = format( + SignatureObjectSchema, + result, + expectedReturnFormat, + ); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'bytes' }, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.sign as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await sign(web3Context, ...inputParameters, expectedReturnFormat); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/sign_transaction.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/sign_transaction.test.ts new file mode 100644 index 00000000000..68364142d32 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/sign_transaction.test.ts @@ -0,0 +1,75 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { + DEFAULT_RETURN_FORMAT, + ETH_DATA_FORMAT, + SignedTransactionInfoAPI, + Web3EthExecutionAPI, +} from 'web3-types'; +import { isString } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + +import { signTransaction } from '../../../src/rpc_method_wrappers'; +import { returnFormat, testData } from './fixtures/sign_transaction'; +import { formatTransaction } from '../../../src'; + +jest.mock('web3-rpc-methods'); + +describe('signTransaction', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.signTransaction with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputTransaction, signedTransactionInfo] = inputParameters; + const inputTransactionFormatted = formatTransaction(inputTransaction, ETH_DATA_FORMAT); + + (ethRpcMethods.signTransaction as jest.Mock).mockResolvedValueOnce( + isString(signedTransactionInfo as string) + ? signedTransactionInfo + : (signedTransactionInfo as SignedTransactionInfoAPI).raw, + ); + + await signTransaction(web3Context, inputTransaction, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.signTransaction).toHaveBeenCalledWith( + web3Context.requestManager, + inputTransactionFormatted, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const [inputTransaction, signedTransactionInfo, expectedFormattedResult] = + inputParameters; + (ethRpcMethods.signTransaction as jest.Mock).mockResolvedValueOnce( + isString(signedTransactionInfo as string) + ? signedTransactionInfo + : (signedTransactionInfo as SignedTransactionInfoAPI).raw, + ); + + const result = await signTransaction(web3Context, inputTransaction, returnFormat); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/sign_typed_data.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/sign_typed_data.test.ts new file mode 100644 index 00000000000..8256beb7f78 --- /dev/null +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/sign_typed_data.test.ts @@ -0,0 +1,64 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; +import { format } from 'web3-utils'; + +import { signTypedData } from '../../../src/rpc_method_wrappers'; +import { testData, mockRpcResponse } from './fixtures/sign_typed_data'; + +jest.mock('web3-rpc-methods'); + +describe('signTypedData', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it.each(testData)( + `should call rpcMethods.signTypedData with expected parameters\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + await signTypedData(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); + expect(ethRpcMethods.signTypedData).toHaveBeenCalledWith( + web3Context.requestManager, + ...inputParameters, + ); + }, + ); + + it.each(testData)( + `should format mockRpcResponse using provided return format\nTitle: %s\nInput parameters: %s\n`, + async (_, inputParameters) => { + const expectedReturnFormat = { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }; + const expectedFormattedResult = format( + { format: 'bytes' }, + mockRpcResponse, + expectedReturnFormat, + ); + (ethRpcMethods.signTypedData as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + + const result = await signTypedData( + web3Context, + ...inputParameters, + expectedReturnFormat, + ); + expect(result).toStrictEqual(expectedFormattedResult); + }, + ); +}); diff --git a/packages/web3-eth/test/unit/send_tx_helper.test.ts b/packages/web3-eth/test/unit/send_tx_helper.test.ts new file mode 100644 index 00000000000..55a482395b8 --- /dev/null +++ b/packages/web3-eth/test/unit/send_tx_helper.test.ts @@ -0,0 +1,248 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + DataFormat, + DEFAULT_RETURN_FORMAT, + EthExecutionAPI, + JsonRpcResponse, + TransactionReceipt, + Web3BaseWalletAccount, +} from 'web3-types'; +import { Web3Context, Web3EventMap, Web3PromiEvent } from 'web3-core'; +import { + ContractExecutionError, + InvalidResponseError, + TransactionRevertInstructionError, +} from 'web3-errors'; +import { SendTxHelper } from '../../src/utils/send_tx_helper'; +import { getTransactionError } from '../../src/utils/get_transaction_error'; +import { getTransactionGasPricing } from '../../src/utils/get_transaction_gas_pricing'; +import { getRevertReason } from '../../src/utils/get_revert_reason'; +import { trySendTransaction } from '../../src/utils/try_send_transaction'; +import { ERC20TokenAbi } from '../fixtures/erc20'; +import { SendSignedTransactionEvents, SendTransactionEvents } from '../../src'; + +const utils = { + getTransactionError, + getRevertReason, + trySendTransaction, + getTransactionGasPricing, +}; +jest.mock('../../src/utils/get_transaction_gas_pricing'); +jest.mock('../../src/utils/try_send_transaction'); +jest.mock('../../src/utils/get_transaction_error'); +jest.mock('../../src/utils/get_revert_reason'); + +type PromiEvent = Web3PromiEvent< + TransactionReceipt, + SendSignedTransactionEvents | SendTransactionEvents +>; +const receipt = { + transactionHash: '0x559e12c4d679f66ff234ad2075a0953793692bdd3a9d9f12def5edc5d7cc2eec', + transactionIndex: BigInt(0), + blockNumber: BigInt(38), + blockHash: '0xc238b3b27edd12846afc824e4f36ebd7e6dcf35914af631f181ebc05127dd553', + from: '0x53a179dfe130c7b4054f7e6e7f1928777d7e7bbd', + to: '0xead2356c468ce5443bd7cbb2caaeb48266b7f31f', + cumulativeGasUsed: BigInt(47521), + gasUsed: BigInt(47521), + logs: [ + { + address: '0xead2356c468ce5443bd7cbb2caaeb48266b7f31f', + blockHash: '0xc238b3b27edd12846afc824e4f36ebd7e6dcf35914af631f181ebc05127dd553', + blockNumber: BigInt(38), + data: '0x000000000000000000000000000000000000000000000000000000000000000a', + logIndex: BigInt(0), + removed: false, + topics: [ + '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', + '0x00000000000000000000000051623651024932936d00d36a93594db5684fbbb3', + '0x00000000000000000000000003095dc4857bb26f3a4550c5651df8b7f6b6b1ef', + ], + transactionHash: '0x559e12c4d679f66ff234ad2075a0953793692bdd3a9d9f12def5edc5d7cc2eec', + transactionIndex: BigInt(0), + }, + ], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000800000000000008000000000000000000020000001000000002000000000000000000000000000200000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000008000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000', + status: BigInt(1), + effectiveGasPrice: BigInt(2506532645), + type: BigInt(2), +}; + +describe('sendTxHelper class', () => { + let sendTxHelper: SendTxHelper; + let promiEvent: Web3PromiEvent; + let web3Context: Web3Context; + beforeAll(() => { + web3Context = new Web3Context(); + promiEvent = new Web3PromiEvent(resolve => { + resolve({} as unknown as TransactionReceipt); + }); + sendTxHelper = new SendTxHelper({ + web3Context, + promiEvent: promiEvent as PromiEvent, + options: { + contractAbi: ERC20TokenAbi, + }, + returnFormat: DEFAULT_RETURN_FORMAT, + }); + }); + it('constructor', () => { + expect(sendTxHelper).toBeDefined(); + // @ts-expect-error get private property + expect(sendTxHelper.promiEvent).toBe(promiEvent); + // @ts-expect-error get private property + expect(sendTxHelper.web3Context).toBe(web3Context); + // @ts-expect-error get private property + expect(sendTxHelper.returnFormat).toBe(DEFAULT_RETURN_FORMAT); + }); + it('getReceiptWithEvents', () => { + const res = sendTxHelper.getReceiptWithEvents(receipt as unknown as TransactionReceipt); + expect(res?.events?.Transfer.address).toBeDefined(); + }); + it('emit sending', async () => { + const f = jest.fn(); + await promiEvent.on('sending', f); + sendTxHelper.emitSending(receipt); + expect(f).toHaveBeenCalledWith(receipt); + promiEvent.off('sending', f); + }); + it('emit emitSent', async () => { + const f = jest.fn(); + await promiEvent.on('sent', f); + sendTxHelper.emitSent(receipt); + expect(f).toHaveBeenCalledWith(receipt); + promiEvent.off('sent', f); + }); + it('emit emitTransactionHash', async () => { + const f = jest.fn(); + await promiEvent.on('transactionHash', f); + sendTxHelper.emitTransactionHash(receipt.transactionHash as string & Uint8Array); + expect(f).toHaveBeenCalledWith(receipt.transactionHash); + promiEvent.off('transactionHash', f); + }); + it('emit emitReceipt', async () => { + const f = jest.fn(); + await promiEvent.on('receipt', f); + sendTxHelper.emitReceipt(receipt as TransactionReceipt); + expect(f).toHaveBeenCalledWith(receipt); + promiEvent.off('receipt', f); + }); + it('emit handleError', async () => { + const f = jest.fn(); + await promiEvent.on('error', f); + const error = new InvalidResponseError({} as JsonRpcResponse); + await sendTxHelper.handleError({ error, tx: receipt }); + expect(f).toHaveBeenCalledWith(error); + promiEvent.off('error', f); + }); + it('emit handleError with handleRevert', async () => { + const error = new ContractExecutionError({ code: 1, message: 'error' }); + web3Context.handleRevert = true; + jest.spyOn(utils, 'getTransactionError').mockResolvedValue( + error as unknown as TransactionRevertInstructionError, + ); + await sendTxHelper.handleError({ error, tx: receipt }); + expect(utils.getTransactionError).toHaveBeenCalled(); + }); + it('emit handleResolve', async () => { + const f = jest.fn(); + const error = new TransactionRevertInstructionError('error'); + jest.spyOn(utils, 'getTransactionError').mockResolvedValue(error); + await promiEvent.on('error', f); + + await expect(async () => { + await sendTxHelper.handleResolve({ + receipt: { ...receipt, status: BigInt(0) } as TransactionReceipt, + tx: receipt, + }); + expect(utils.getTransactionError).toHaveBeenCalled(); + expect(f).toHaveBeenCalledWith(error); + promiEvent.off('error', f); + }).rejects.toThrow(); + }); + it('emit checkRevertBeforeSending', async () => { + const _sendTxHelper = new SendTxHelper({ + web3Context, + promiEvent: promiEvent as PromiEvent, + options: { + checkRevertBeforeSending: true, + }, + returnFormat: DEFAULT_RETURN_FORMAT, + }); + const error = new TransactionRevertInstructionError('error'); + jest.spyOn(utils, 'getRevertReason').mockResolvedValue(error); + await expect(_sendTxHelper.checkRevertBeforeSending(receipt)).rejects.toThrow(); + expect(utils.getRevertReason).toHaveBeenCalled(); + }); + it('emit handleResolve with transactionResolver', async () => { + const f = jest.fn(); + + const _sendTxHelper = new SendTxHelper({ + web3Context, + promiEvent: promiEvent as PromiEvent, + options: { + transactionResolver: f, + }, + returnFormat: DEFAULT_RETURN_FORMAT, + }); + + await _sendTxHelper.handleResolve({ receipt: receipt as TransactionReceipt, tx: receipt }); + expect(f).toHaveBeenCalledWith(receipt); + }); + it('emit populateGasPrice', async () => { + const _sendTxHelper = new SendTxHelper({ + web3Context, + promiEvent: promiEvent as PromiEvent, + options: { + ignoreGasPricing: false, + }, + returnFormat: DEFAULT_RETURN_FORMAT, + }); + const receiptWithoutGas = { + ...receipt, + gasPrice: undefined, + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + const populatedReceipt = { ...receiptWithoutGas, gasPrice: 1 }; + jest.spyOn(utils, 'getTransactionGasPricing').mockResolvedValue(populatedReceipt); + const result = await _sendTxHelper.populateGasPrice({ + transaction: receiptWithoutGas, + transactionFormatted: receiptWithoutGas, + }); + expect(result).toStrictEqual(populatedReceipt); + expect(utils.getTransactionGasPricing).toHaveBeenCalled(); + }); + it('emit signAndSend', async () => { + jest.spyOn(utils, 'trySendTransaction').mockResolvedValue('success'); + const wallet = { + signTransaction: jest.fn(() => ({ + transactionHash: receipt.transactionHash, + rawTransaction: receipt, + })), + }; + const result = await sendTxHelper.signAndSend({ + tx: receipt, + wallet: wallet as unknown as Web3BaseWalletAccount, + }); + expect(result).toBe('success'); + expect(utils.trySendTransaction).toHaveBeenCalled(); + expect(wallet.signTransaction).toHaveBeenCalledWith(receipt); + }); +}); diff --git a/packages/web3-eth/test/unit/utils/getTransactionFromOrToAttr.test.ts b/packages/web3-eth/test/unit/utils/getTransactionFromOrToAttr.test.ts new file mode 100644 index 00000000000..879ff57f11f --- /dev/null +++ b/packages/web3-eth/test/unit/utils/getTransactionFromOrToAttr.test.ts @@ -0,0 +1,70 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Context } from 'web3-core'; + +import { Wallet } from 'web3-eth-accounts'; +import { getTransactionFromOrToAttr } from '../../../src/utils/transaction_builder'; +import { + validGetTransactionFromOrToAttrData, + invalidGetTransactionFromOrToAttrData, + invalidGetTransactionFromOrToAttrDataForWallet, +} from '../../fixtures/format_transaction'; +import { createAccountProvider } from '../../fixtures/system_test_utils'; + +import Web3Eth from '../../../src'; + +describe('getTransactionFromOrToAttr', () => { + const web3Context = new Web3Context(); + + describe('valid data', () => { + it.each(validGetTransactionFromOrToAttrData)('$title', ({ input, output }) => { + const { role, transaction } = input; + + expect(getTransactionFromOrToAttr(role, web3Context, transaction)).toEqual(output); + }); + }); + + describe('invalid data', () => { + it.each(invalidGetTransactionFromOrToAttrData)('$title', ({ input, output }) => { + const { role, transaction } = input; + expect(() => getTransactionFromOrToAttr(role, web3Context, transaction)).toThrow( + output, + ); + }); + + it.each(invalidGetTransactionFromOrToAttrDataForWallet)( + '$title with wallet', + ({ input, output }) => { + const privateKey = + '0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709'; + + // setup wallet + const web3Eth = new Web3Eth('http://localhost:8545'); + const accountProvider = createAccountProvider(web3Eth); + const wallet = new Wallet(accountProvider); + web3Eth.wallet?.add(privateKey); + web3Eth['_wallet'] = wallet; + + const { role, transaction } = input; + expect(() => getTransactionFromOrToAttr(role, web3Eth, transaction)).toThrow( + output, + ); + }, + ); + }); +}); diff --git a/packages/web3-eth/test/unit/utils/get_revert_reason.test.ts b/packages/web3-eth/test/unit/utils/get_revert_reason.test.ts new file mode 100644 index 00000000000..061837f4c54 --- /dev/null +++ b/packages/web3-eth/test/unit/utils/get_revert_reason.test.ts @@ -0,0 +1,125 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { DEFAULT_RETURN_FORMAT } from 'web3-types'; + +import * as RpcMethodWrappers from '../../../src/rpc_method_wrappers'; +import * as GetRevertReason from '../../../src/utils/get_revert_reason'; +import { SimpleRevertAbi } from '../../fixtures/simple_revert'; + +describe('getRevertReason', () => { + const web3Context = new Web3Context(); + + it('should use the call rpc wrapper', async () => { + const callSpy = jest.spyOn(RpcMethodWrappers, 'call').mockImplementation(); + + const transaction = { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + data: '0x819f48fe', + gasPrice: '0x15ab8f14', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + + await GetRevertReason.getRevertReason(web3Context, transaction); + + expect(callSpy).toHaveBeenCalledWith( + web3Context, + transaction, + web3Context.defaultBlock, + DEFAULT_RETURN_FORMAT, + ); + }); + + it('should return undefined', async () => { + jest.spyOn(RpcMethodWrappers, 'call').mockResolvedValueOnce( + '0x000000000000000000000000000000000000000000000000000000000000000a', + ); + + const transaction = { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + data: '0x819f48fe', + gasPrice: '0x15ab8f14', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + + const result = await GetRevertReason.getRevertReason(web3Context, transaction); + + expect(result).toBeUndefined(); + }); + + it('should call parseTransactionError without contractAbi', async () => { + const expectedError = { + jsonrpc: '2.0', + id: 1, + error: { + code: -32000, + message: + 'err: insufficient funds for gas * price + value: address 0x0000000000000000000000000000000000000000 have 66 want 9983799287684 (supplied gas 26827)', + }, + }; + const parseTransactionErrorSpy = jest + .spyOn(GetRevertReason, 'parseTransactionError') + .mockImplementation(); + jest.spyOn(RpcMethodWrappers, 'call').mockRejectedValueOnce(expectedError); + + const transaction = { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + data: '0x819f48fe', + gasPrice: '0x15ab8f14', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + + await GetRevertReason.getRevertReason(web3Context, transaction); + + expect(parseTransactionErrorSpy).toHaveBeenCalledWith(expectedError, undefined); + }); + + it('should call parseTransactionError with contractAbi', async () => { + const expectedError = { + jsonrpc: '2.0', + id: 1, + error: { + code: -32000, + message: + 'err: insufficient funds for gas * price + value: address 0x0000000000000000000000000000000000000000 have 66 want 9983799287684 (supplied gas 26827)', + }, + }; + const parseTransactionErrorSpy = jest + .spyOn(GetRevertReason, 'parseTransactionError') + .mockImplementation(); + jest.spyOn(RpcMethodWrappers, 'call').mockRejectedValueOnce(expectedError); + + const transaction = { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + data: '0x819f48fe', + gasPrice: '0x15ab8f14', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + + await GetRevertReason.getRevertReason(web3Context, transaction, SimpleRevertAbi); + + expect(parseTransactionErrorSpy).toHaveBeenCalledWith(expectedError, SimpleRevertAbi); + }); +}); diff --git a/packages/web3-eth/test/unit/utils/get_transaction_error.test.ts b/packages/web3-eth/test/unit/utils/get_transaction_error.test.ts new file mode 100644 index 00000000000..898947f4889 --- /dev/null +++ b/packages/web3-eth/test/unit/utils/get_transaction_error.test.ts @@ -0,0 +1,446 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Context } from 'web3-core'; +import { + InvalidResponseError, + TransactionRevertedWithoutReasonError, + TransactionRevertInstructionError, + TransactionRevertWithCustomError, +} from 'web3-errors'; + +import * as GetRevertReasonUtils from '../../../src/utils/get_revert_reason'; +import { getTransactionError } from '../../../src/utils/get_transaction_error'; +import { SimpleRevertAbi } from '../../fixtures/simple_revert'; + +describe('getTransactionError', () => { + let web3Context: Web3Context; + + beforeEach(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + }); + + it('should call parseTransactionError to get error from receivedError', async () => { + const parseTransactionErrorSpy = jest.spyOn(GetRevertReasonUtils, 'parseTransactionError'); + + const receivedError = new InvalidResponseError( + { + jsonrpc: '2.0', + id: '3f839900-afdd-4553-bca7-b4e2b835c687', + error: { code: -32000, message: 'intrinsic gas too low' }, + }, + { + jsonrpc: '2.0', + id: '2568856d-8ee5-43f4-a8db-dbd22cf97a53', + method: 'eth_sendTransaction', + params: [ + { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x0000000000000000000000000000000000000000', + value: '0x1', + gas: '0x1', + gasPrice: '0x15b61074', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }, + ], + }, + ); + await getTransactionError(web3Context, undefined, undefined, receivedError); + expect(parseTransactionErrorSpy).toHaveBeenCalledWith(receivedError); + }); + + it('should call getRevertReason to get error from transactionFormatted without contractAbi', async () => { + const getRevertReasonSpy = jest + .spyOn(GetRevertReasonUtils, 'getRevertReason') + .mockImplementation(); + + const transaction = { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + data: '0x819f48fe', + gasPrice: '0x15ab8f14', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + + web3Context.handleRevert = true; + await getTransactionError(web3Context, transaction); + expect(getRevertReasonSpy).toHaveBeenCalledWith(web3Context, transaction, undefined); + }); + + it('should call getRevertReason to get error from transactionFormatted with contractAbi', async () => { + const getRevertReasonSpy = jest + .spyOn(GetRevertReasonUtils, 'getRevertReason') + .mockImplementation(); + + const transaction = { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + data: '0x819f48fe', + gasPrice: '0x15ab8f14', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + + web3Context.handleRevert = true; + await getTransactionError(web3Context, transaction, undefined, undefined, SimpleRevertAbi); + expect(getRevertReasonSpy).toHaveBeenCalledWith(web3Context, transaction, SimpleRevertAbi); + }); + + describe('TransactionRevertedWithoutReasonError', () => { + it('should throw TransactionRevertedWithoutReasonError without receipt', async () => { + const transaction = { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + data: '0x819f48fe', + gasPrice: '0x15ab8f14', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + + expect(await getTransactionError(web3Context, transaction)).toMatchObject( + new TransactionRevertedWithoutReasonError(), + ); + }); + + it('should throw TransactionRevertedWithoutReasonError with receipt', async () => { + const transaction = { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + data: '0x819f48fe', + gasPrice: '0x15ab8f14', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + const receipt = { + transactionHash: + '0x55de60905fb9efdaa5dc5ac6a2e05736e92067d44b8a3077c80ec849545cbcf0', + transactionIndex: BigInt(0), + blockHash: '0xc150c0a7f7f5c9014ea965d19b1be5f5ced07a6b17ea3b1126769d745dde9b2d', + blockNumber: BigInt(16738176), + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + cumulativeGasUsed: BigInt(23605), + gasUsed: BigInt(23605), + effectiveGasPrice: BigInt(2000000000), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + root: '', + status: BigInt(0), + type: BigInt(0), + }; + + expect(await getTransactionError(web3Context, transaction, receipt)).toMatchObject( + new TransactionRevertedWithoutReasonError(receipt), + ); + }); + }); + + describe('TransactionRevertInstructionError', () => { + it('should throw TransactionRevertInstructionError without transaction and receipt', async () => { + const receivedError = new InvalidResponseError( + { + jsonrpc: '2.0', + id: '3f839900-afdd-4553-bca7-b4e2b835c687', + error: { code: -32000, message: 'intrinsic gas too low' }, + }, + { + jsonrpc: '2.0', + id: '2568856d-8ee5-43f4-a8db-dbd22cf97a53', + method: 'eth_sendTransaction', + params: [ + { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x0000000000000000000000000000000000000000', + value: '0x1', + gas: '0x1', + gasPrice: '0x15b61074', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }, + ], + }, + ); + + expect( + await getTransactionError(web3Context, undefined, undefined, receivedError), + ).toMatchObject(new TransactionRevertInstructionError('intrinsic gas too low')); + }); + + it('should throw TransactionRevertInstructionError without transaction and with receipt', async () => { + const transaction = { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + data: '0x819f48fe', + gasPrice: '0x15ab8f14', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + const receipt = { + transactionHash: + '0x55de60905fb9efdaa5dc5ac6a2e05736e92067d44b8a3077c80ec849545cbcf0', + transactionIndex: BigInt(0), + blockHash: '0xc150c0a7f7f5c9014ea965d19b1be5f5ced07a6b17ea3b1126769d745dde9b2d', + blockNumber: BigInt(16738176), + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + cumulativeGasUsed: BigInt(23605), + gasUsed: BigInt(23605), + effectiveGasPrice: BigInt(2000000000), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + root: '', + status: BigInt(0), + type: BigInt(0), + }; + const receivedError = new InvalidResponseError( + { + jsonrpc: '2.0', + id: '3f839900-afdd-4553-bca7-b4e2b835c687', + error: { code: -32000, message: 'intrinsic gas too low' }, + }, + { + jsonrpc: '2.0', + id: '2568856d-8ee5-43f4-a8db-dbd22cf97a53', + method: 'eth_sendTransaction', + params: [ + { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x0000000000000000000000000000000000000000', + value: '0x1', + gas: '0x1', + gasPrice: '0x15b61074', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }, + ], + }, + ); + + expect( + await getTransactionError(web3Context, transaction, receipt, receivedError), + ).toMatchObject( + new TransactionRevertInstructionError('intrinsic gas too low', undefined, receipt), + ); + }); + + it('should throw TransactionRevertInstructionError without receipt', async () => { + jest.spyOn(GetRevertReasonUtils, 'getRevertReason').mockResolvedValueOnce({ + reason: 'execution reverted', + signature: '0xc85bda60', + data: '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + }); + + const transaction = { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + data: '0x819f48fe', + gasPrice: '0x15ab8f14', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + + web3Context.handleRevert = true; + expect( + await getTransactionError( + web3Context, + transaction, + undefined, + undefined, + SimpleRevertAbi, + ), + ).toMatchObject( + new TransactionRevertInstructionError( + 'execution reverted', + '0xc85bda60', + undefined, + '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + ), + ); + }); + + it('should throw TransactionRevertInstructionError with receipt', async () => { + jest.spyOn(GetRevertReasonUtils, 'getRevertReason').mockResolvedValueOnce({ + reason: 'execution reverted', + signature: '0xc85bda60', + data: '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + }); + + const transaction = { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + data: '0x819f48fe', + gasPrice: '0x15ab8f14', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + const receipt = { + transactionHash: + '0x55de60905fb9efdaa5dc5ac6a2e05736e92067d44b8a3077c80ec849545cbcf0', + transactionIndex: BigInt(0), + blockHash: '0xc150c0a7f7f5c9014ea965d19b1be5f5ced07a6b17ea3b1126769d745dde9b2d', + blockNumber: BigInt(16738176), + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + cumulativeGasUsed: BigInt(23605), + gasUsed: BigInt(23605), + effectiveGasPrice: BigInt(2000000000), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + root: '', + status: BigInt(0), + type: BigInt(0), + }; + + web3Context.handleRevert = true; + expect( + await getTransactionError( + web3Context, + transaction, + receipt, + undefined, + SimpleRevertAbi, + ), + ).toMatchObject( + new TransactionRevertInstructionError( + 'execution reverted', + '0xc85bda60', + receipt, + '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + ), + ); + }); + }); + + describe('TransactionRevertWithCustomError', () => { + it('should throw TransactionRevertWithCustomError without receipt', async () => { + jest.spyOn(GetRevertReasonUtils, 'getRevertReason').mockResolvedValueOnce({ + reason: 'execution reverted', + signature: '0xc85bda60', + data: '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + customErrorName: 'ErrorWithParams', + customErrorDecodedSignature: 'ErrorWithParams(uint256,string)', + customErrorArguments: { + code: BigInt(42), + message: 'This is an error with params', + }, + }); + + const transaction = { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + data: '0x819f48fe', + gasPrice: '0x15ab8f14', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + + web3Context.handleRevert = true; + expect( + await getTransactionError( + web3Context, + transaction, + undefined, + undefined, + SimpleRevertAbi, + ), + ).toMatchObject( + new TransactionRevertWithCustomError( + 'execution reverted', + 'ErrorWithParams', + 'ErrorWithParams(uint256,string)', + { + code: BigInt(42), + message: 'This is an error with params', + }, + '0xc85bda60', + undefined, + '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + ), + ); + }); + + it('should throw TransactionRevertWithCustomError with receipt', async () => { + jest.spyOn(GetRevertReasonUtils, 'getRevertReason').mockResolvedValueOnce({ + reason: 'execution reverted', + signature: '0xc85bda60', + data: '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + customErrorName: 'ErrorWithParams', + customErrorDecodedSignature: 'ErrorWithParams(uint256,string)', + customErrorArguments: { + code: BigInt(42), + message: 'This is an error with params', + }, + }); + + const transaction = { + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + data: '0x819f48fe', + gasPrice: '0x15ab8f14', + maxPriorityFeePerGas: undefined, + maxFeePerGas: undefined, + }; + const receipt = { + transactionHash: + '0x55de60905fb9efdaa5dc5ac6a2e05736e92067d44b8a3077c80ec849545cbcf0', + transactionIndex: BigInt(0), + blockHash: '0xc150c0a7f7f5c9014ea965d19b1be5f5ced07a6b17ea3b1126769d745dde9b2d', + blockNumber: BigInt(16738176), + from: '0x4fec0a51024b13030d26e70904b066c6d41157a5', + to: '0x36361143b7e2c676f8ccd67743a89d26437f0529', + cumulativeGasUsed: BigInt(23605), + gasUsed: BigInt(23605), + effectiveGasPrice: BigInt(2000000000), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + root: '', + status: BigInt(0), + type: BigInt(0), + }; + + web3Context.handleRevert = true; + expect( + await getTransactionError( + web3Context, + transaction, + receipt, + undefined, + SimpleRevertAbi, + ), + ).toMatchObject( + new TransactionRevertWithCustomError( + 'execution reverted', + 'ErrorWithParams', + 'ErrorWithParams(uint256,string)', + { + code: BigInt(42), + message: 'This is an error with params', + }, + '0xc85bda60', + receipt, + '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + ), + ); + }); + }); +}); diff --git a/packages/web3-eth/test/unit/utils/get_transaction_type.test.ts b/packages/web3-eth/test/unit/utils/get_transaction_type.test.ts new file mode 100644 index 00000000000..73111b42067 --- /dev/null +++ b/packages/web3-eth/test/unit/utils/get_transaction_type.test.ts @@ -0,0 +1,55 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { EthExecutionAPI, Transaction, ETH_DATA_FORMAT } from 'web3-types'; +import HttpProvider from 'web3-providers-http'; +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; + +import { transactionSchema } from '../../../src/schemas'; +import { getTransactionType } from '../../../src/utils/transaction_builder'; + + +describe('getTransactionType', () => { + const expectedFrom = '0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01'; + + const transaction: Transaction = { + from: expectedFrom, + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: BigInt(21000), + data: '0x', + nonce: 0x42, + chain: 'mainnet', + chainId: 0x1, + networkId: 0x4, + }; + const formattedTransaction = format(transactionSchema, transaction, ETH_DATA_FORMAT); + + const web3Context = new Web3Context({ + provider: new HttpProvider('http://127.0.0.1:80'), + config: { + defaultAccount: expectedFrom, + }, + }); + + it('should default to 0x2 when transaction type cannot be inferred and use default transaction type', async () => { + + const transactionType = getTransactionType(formattedTransaction, web3Context); + expect(transactionType).toBe('0x2'); + }); +}); diff --git a/packages/web3-eth/test/unit/utils/parse_transaction_error.test.ts b/packages/web3-eth/test/unit/utils/parse_transaction_error.test.ts new file mode 100644 index 00000000000..0aa638597fe --- /dev/null +++ b/packages/web3-eth/test/unit/utils/parse_transaction_error.test.ts @@ -0,0 +1,89 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { ContractExecutionError, InvalidResponseError } from 'web3-errors'; + +import { parseTransactionError } from '../../../src/utils/get_revert_reason'; +import { SimpleRevertAbi } from '../../fixtures/simple_revert'; + +describe('parseTransactionError', () => { + it('should return object of type RevertReason', () => { + const error = new ContractExecutionError({ + code: 3, + message: 'execution reverted: This is a send revert', + data: '0x08c379a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612073656e64207265766572740000000000000000000000', + }); + + const result = parseTransactionError(error); + expect(result).toStrictEqual({ + reason: 'execution reverted: This is a send revert', + signature: '0x08c379a0', + data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612073656e64207265766572740000000000000000000000', + }); + }); + + it('should return object of type RevertReasonWithCustomError', () => { + const error = new ContractExecutionError({ + code: 3, + message: 'execution reverted', + data: '0xc85bda60000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + }); + + const result = parseTransactionError(error, SimpleRevertAbi); + expect(result).toStrictEqual({ + reason: 'execution reverted', + signature: '0xc85bda60', + data: '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', + customErrorName: 'ErrorWithParams', + customErrorDecodedSignature: 'ErrorWithParams(uint256,string)', + customErrorArguments: { + '0': BigInt(42), + '1': 'This is an error with params', + __length__: 2, + code: BigInt(42), + message: 'This is an error with params', + }, + }); + }); + + it('should return object of type string', () => { + const error = new InvalidResponseError({ + jsonrpc: '2.0', + id: '3f839900-afdd-4553-bca7-b4e2b835c687', + error: { code: -32000, message: 'intrinsic gas too low' }, + }); + + const result = parseTransactionError(error); + expect(result).toBe('intrinsic gas too low'); + }); + + it('should throw an error', () => { + const error = new InvalidResponseError([ + { + jsonrpc: '2.0', + id: '3f839900-afdd-4553-bca7-b4e2b835c687', + error: { code: -32000, message: 'intrinsic gas too low' }, + }, + { + jsonrpc: '2.0', + id: '3f839900-afdd-4553-bca7-b4e2b835c687', + error: { code: -32000, message: 'intrinsic gas too low' }, + }, + ]); + + expect(() => parseTransactionError(error)).toThrow(error); + }); +}); diff --git a/packages/web3-eth/test/unit/utils/wait_for_transaction_receipt.test.ts b/packages/web3-eth/test/unit/utils/wait_for_transaction_receipt.test.ts new file mode 100644 index 00000000000..8b70dcdd3b2 --- /dev/null +++ b/packages/web3-eth/test/unit/utils/wait_for_transaction_receipt.test.ts @@ -0,0 +1,126 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { DEFAULT_RETURN_FORMAT, Web3EthExecutionAPI } from 'web3-types'; +import { TransactionBlockTimeoutError } from 'web3-errors'; +import { waitForTransactionReceipt } from '../../../src/utils/wait_for_transaction_receipt'; + +describe('waitForTransactionReceipt unit test', () => { + let web3Context: Web3Context; + + it(`waitForTransactionReceipt should throw error after block timeout`, async () => { + let blockNum = 1; + + web3Context = new Web3Context( + { + request: async (payload: any) => { + let response: { jsonrpc: string; id: any; result: string } | undefined; + + switch (payload.method) { + case 'eth_blockNumber': + blockNum += 50; + response = { + jsonrpc: '2.0', + id: payload.id, + result: `0x${blockNum.toString(16)}`, + }; + break; + + case 'eth_getTransactionReceipt': + response = undefined; + break; + + default: + throw new Error(`Unknown payload ${payload}`); + } + + return new Promise(resolve => { + resolve(response as any); + }); + }, + supportsSubscriptions: () => false, + }, + ); + + await expect(async () => + waitForTransactionReceipt( + web3Context, + '0x0430b701e657e634a9d5480eae0387a473913ef29af8e60c38a3cee24494ed54', + DEFAULT_RETURN_FORMAT + ) + ).rejects.toThrow(TransactionBlockTimeoutError); + + }); + + it(`waitForTransactionReceipt should resolve immediatly if receipt is avalible`, async () => { + let blockNum = 1; + const txHash = '0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5'; + const blockHash = '0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3'; + + web3Context = new Web3Context( + { + request: async (payload: any) => { + const response = { + jsonrpc: '2.0', + id: payload.id, + result: {}, + }; + + switch (payload.method) { + case 'eth_blockNumber': + blockNum += 10; + response.result = `0x${blockNum.toString(16)}`; + break; + + case 'eth_getTransactionReceipt': + response.result = { + blockHash, + blockNumber: `0x1`, + cumulativeGasUsed: '0xa12515', + from: payload.from, + gasUsed: payload.gasLimit, + status: '0x1', + to: payload.to, + transactionHash: txHash, + transactionIndex: '0x66', + + }; + break; + + default: + throw new Error(`Unknown payload ${payload}`); + } + + return new Promise(resolve => { + resolve(response as any); + }); + }, + supportsSubscriptions: () => false, + }, + ); + + const res = await waitForTransactionReceipt( + web3Context, + '0x0430b701e657e634a9d5480eae0387a473913ef29af8e60c38a3cee24494ed54', + DEFAULT_RETURN_FORMAT + ); + + expect(res).toBeDefined(); + expect(res.transactionHash).toStrictEqual(txHash); + expect(res.blockHash).toStrictEqual(blockHash); + }); +}) \ No newline at end of file diff --git a/packages/web3-eth/test/unit/utils/watch_transaction_by_polling.test.ts b/packages/web3-eth/test/unit/utils/watch_transaction_by_polling.test.ts new file mode 100644 index 00000000000..5a44db457e8 --- /dev/null +++ b/packages/web3-eth/test/unit/utils/watch_transaction_by_polling.test.ts @@ -0,0 +1,95 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { format } from 'web3-utils'; +import { DEFAULT_RETURN_FORMAT, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; +import * as rpcMethodWrappers from '../../../src/rpc_method_wrappers'; +import * as WaitForTransactionReceipt from '../../../src/utils/wait_for_transaction_receipt'; + +import * as WatchTransactionByPolling from '../../../src/utils/watch_transaction_by_pooling'; +import { + expectedTransactionReceipt, + expectedTransactionHash, + testData, +} from '../rpc_method_wrappers/fixtures/send_signed_transaction'; +import { transactionReceiptSchema } from '../../../src/schemas'; +import { sleep } from '../../shared_fixtures/utils'; + +jest.mock('web3-rpc-methods'); +jest.mock('../../../src/utils/wait_for_transaction_receipt'); + +const mockBlockData = { + hash: '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', +}; + +const testMessage = + 'Title: %s\ninputSignedTransaction: %s\nexpectedTransactionHash: %s\nexpectedTransactionReceipt: %s\n'; +describe('watchTransactionByPolling', () => { + describe('should call getBlockByNumber', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context( + // dummy provider that does not supports subscription + { + request: jest.fn(), + }, + ); + + jest.spyOn(ethRpcMethods, 'getBlockByNumber').mockResolvedValue(mockBlockData as any); + }); + + it.each(testData)( + `watchTransactionByPolling logic\n ${testMessage}`, + async (_, inputTransaction) => { + const formattedTransactionReceipt = format( + transactionReceiptSchema, + expectedTransactionReceipt, + DEFAULT_RETURN_FORMAT, + ); + + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(expectedTransactionReceipt); + + (ethRpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( + expectedTransactionHash, + ); + + const promiEvent = rpcMethodWrappers.sendSignedTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + ); + await promiEvent; + WatchTransactionByPolling.watchTransactionByPolling({ + web3Context, + transactionReceipt: formattedTransactionReceipt, + transactionPromiEvent: promiEvent, + returnFormat: DEFAULT_RETURN_FORMAT, + }); + + await sleep(1000); + expect(ethRpcMethods.getBlockByNumber).toHaveBeenCalled(); + + // to clear the interval inside the polling function: + web3Context.transactionConfirmationBlocks = 0; + }, + ); + }); +}); diff --git a/packages/web3-eth/test/unit/utils/watch_transaction_for_confirmations.test.ts b/packages/web3-eth/test/unit/utils/watch_transaction_for_confirmations.test.ts new file mode 100644 index 00000000000..21f630c8bd1 --- /dev/null +++ b/packages/web3-eth/test/unit/utils/watch_transaction_for_confirmations.test.ts @@ -0,0 +1,229 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context, Web3PromiEvent } from 'web3-core'; +import { format } from 'web3-utils'; +import { DEFAULT_RETURN_FORMAT, TransactionReceipt, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; +import { + TransactionMissingReceiptOrBlockHashError, + TransactionReceiptMissingBlockNumberError, +} from 'web3-errors'; +import * as rpcMethodWrappers from '../../../src/rpc_method_wrappers'; +import * as WaitForTransactionReceipt from '../../../src/utils/wait_for_transaction_receipt'; + +import * as WatchTransactionForConfirmations from '../../../src/utils/watch_transaction_for_confirmations'; +import * as WatchTransactionByPolling from '../../../src/utils/watch_transaction_by_pooling'; +import * as WatchTransactionBySubscription from '../../../src/utils/watch_transaction_by_subscription'; +import { + expectedTransactionReceipt, + expectedTransactionHash, + testData, +} from '../rpc_method_wrappers/fixtures/send_signed_transaction'; +import { transactionReceiptSchema } from '../../../src/schemas'; +import { SendSignedTransactionEvents } from '../../../src/types'; + +jest.mock('web3-rpc-methods'); +jest.mock('../../../src/utils/wait_for_transaction_receipt'); +jest.mock('../../../src/utils/watch_transaction_by_pooling'); +jest.mock('../../../src/utils/watch_transaction_by_subscription'); + +const testMessage = + 'Title: %s\ninputSignedTransaction: %s\nexpectedTransactionHash: %s\nexpectedTransactionReceipt: %s\n'; +describe('watchTransactionForConfirmations', () => { + describe('should throw when transaction receipt has something wrong', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context( + // dummy provider that does not supports subscription + { + request: jest.fn(), + supportsSubscriptions: () => false, + }, + ); + }); + + afterEach(() => jest.resetAllMocks()); + + it(`should throw when transactionReceipt is undefined`, () => { + expect(() => + WatchTransactionForConfirmations.watchTransactionForConfirmations( + web3Context, + undefined as unknown as Web3PromiEvent< + TransactionReceipt, + SendSignedTransactionEvents + >, + undefined as unknown as TransactionReceipt, + expectedTransactionHash, + DEFAULT_RETURN_FORMAT, + ), + ).toThrow(TransactionMissingReceiptOrBlockHashError); + }); + + it(`should throw when transactionReceipt does not have a blockHash`, () => { + expect(() => + WatchTransactionForConfirmations.watchTransactionForConfirmations( + web3Context, + undefined as any, + { blockHash: undefined } as unknown as TransactionReceipt, + expectedTransactionHash, + DEFAULT_RETURN_FORMAT, + ), + ).toThrow(TransactionMissingReceiptOrBlockHashError); + }); + + it(`should throw when transactionReceipt does not have a blockNumber`, () => { + expect(() => + WatchTransactionForConfirmations.watchTransactionForConfirmations( + web3Context, + undefined as any, + { blockHash: '0x', blockNumber: undefined } as unknown as TransactionReceipt, + expectedTransactionHash, + DEFAULT_RETURN_FORMAT, + ), + ).toThrow(TransactionReceiptMissingBlockNumberError); + }); + }); + + describe('should call watchTransactionBySubscription when the provider supports subscription', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context( + // dummy provider that supports subscription + { + request: jest.fn(), + supportsSubscriptions: () => true, + }, + ); + }); + + afterEach(() => jest.resetAllMocks()); + + it.each(testData)( + `watchTransactionForConfirmations logic\n ${testMessage}`, + async (_, inputTransaction) => { + const formattedTransactionReceipt = format( + transactionReceiptSchema, + expectedTransactionReceipt, + DEFAULT_RETURN_FORMAT, + ); + + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(expectedTransactionReceipt); + + (ethRpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( + expectedTransactionHash, + ); + + const promiEvent = rpcMethodWrappers.sendSignedTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + ); + + jest.spyOn( + WatchTransactionBySubscription, + 'watchTransactionBySubscription', + ).mockResolvedValueOnce(undefined as never); + + WatchTransactionForConfirmations.watchTransactionForConfirmations( + web3Context, + promiEvent, + formattedTransactionReceipt, + expectedTransactionHash, + DEFAULT_RETURN_FORMAT, + ); + + await promiEvent; + + expect( + WatchTransactionBySubscription.watchTransactionBySubscription, + ).toHaveBeenCalledWith({ + web3Context, + transactionReceipt: formattedTransactionReceipt, + transactionPromiEvent: promiEvent, + returnFormat: DEFAULT_RETURN_FORMAT, + }); + }, + ); + }); + + describe('should call watchTransactionByPooling when the provider does not support subscription', () => { + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context( + // dummy provider that does not supports subscription + { + request: jest.fn(), + supportsSubscriptions: () => false, + }, + ); + }); + + afterEach(() => jest.resetAllMocks()); + + it.each(testData)( + `watchTransactionForConfirmations logic\n ${testMessage}`, + async (_, inputTransaction) => { + const formattedTransactionReceipt = format( + transactionReceiptSchema, + expectedTransactionReceipt, + DEFAULT_RETURN_FORMAT, + ); + + ( + WaitForTransactionReceipt.waitForTransactionReceipt as jest.Mock + ).mockResolvedValueOnce(expectedTransactionReceipt); + + (ethRpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( + expectedTransactionHash, + ); + + const promiEvent = rpcMethodWrappers.sendSignedTransaction( + web3Context, + inputTransaction, + DEFAULT_RETURN_FORMAT, + ); + + jest.spyOn( + WatchTransactionByPolling, + 'watchTransactionByPolling', + ).mockResolvedValueOnce(undefined as never); + + WatchTransactionForConfirmations.watchTransactionForConfirmations( + web3Context, + promiEvent, + formattedTransactionReceipt, + expectedTransactionHash, + DEFAULT_RETURN_FORMAT, + ); + + await promiEvent; + + expect(WatchTransactionByPolling.watchTransactionByPolling).toHaveBeenCalledWith({ + web3Context, + transactionReceipt: formattedTransactionReceipt, + transactionPromiEvent: promiEvent, + returnFormat: DEFAULT_RETURN_FORMAT, + }); + }, + ); + }); +}); diff --git a/packages/web3-eth/test/unit/validate_transaction_for_signing.test.ts b/packages/web3-eth/test/unit/validate_transaction_for_signing.test.ts new file mode 100644 index 00000000000..b2546dd5f3f --- /dev/null +++ b/packages/web3-eth/test/unit/validate_transaction_for_signing.test.ts @@ -0,0 +1,86 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable jest/no-conditional-expect */ + +import { InvalidTransactionObjectError } from 'web3-errors'; +import { validateTransactionForSigning } from '../../src/validation'; +import { + invalidNonceOrChainIdData, + invalidTransactionObject, + validateChainInfoData, + validateCustomChainInfoData, + validateGasData, +} from '../fixtures/validate_transaction_for_signing'; + +describe('validateTransactionForSigning', () => { + describe('should override validateTransactionForSigning method', () => { + it('should call override method', () => { + const overrideFunction = jest.fn(); + validateTransactionForSigning(invalidTransactionObject[0], overrideFunction); + expect(overrideFunction).toHaveBeenCalledWith(invalidTransactionObject[0]); + }); + }); + + describe('should throw InvalidTransactionObjectError', () => { + it.each(invalidTransactionObject)('%s', transaction => { + expect(() => validateTransactionForSigning(transaction)).toThrow( + new InvalidTransactionObjectError(transaction), + ); + }); + }); + + describe('validateCustomChainInfo', () => { + it.each(validateCustomChainInfoData)('%s should return %s', (transaction, output) => { + if (output instanceof Error) { + expect(() => validateTransactionForSigning(transaction)).toThrow(output); + } else { + expect(validateTransactionForSigning(transaction)).toBeUndefined(); + } + }); + }); + + describe('validateChainInfo', () => { + it.each(validateChainInfoData)('%s should return %s', (transaction, output) => { + if (output instanceof Error) { + expect(() => validateTransactionForSigning(transaction)).toThrow(output); + } else { + expect(validateTransactionForSigning(transaction)).toBeUndefined(); + } + }); + }); + + describe('validateGas', () => { + it.each(validateGasData)('%s should return %s', (transaction, output) => { + if (output instanceof Error) { + expect(() => validateTransactionForSigning(transaction)).toThrow(output); + } else { + expect(validateTransactionForSigning(transaction)).toBeUndefined(); + } + }); + }); + + describe('should throw InvalidNonceOrChainIdError', () => { + it.each(invalidNonceOrChainIdData)('%s', (transaction, output) => { + if (output instanceof Error) { + expect(() => validateTransactionForSigning(transaction)).toThrow(output); + } else { + expect(validateTransactionForSigning(transaction)).toBeUndefined(); + } + }); + }); +}); diff --git a/packages/web3-eth/test/unit/validation.test.ts b/packages/web3-eth/test/unit/validation.test.ts new file mode 100644 index 00000000000..c805cdd75d7 --- /dev/null +++ b/packages/web3-eth/test/unit/validation.test.ts @@ -0,0 +1,111 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable jest/no-conditional-expect */ + +import { InvalidTransactionCall, InvalidTransactionWithSender } from 'web3-errors'; +import { + isAccessList, + isAccessListEntry, + isBaseTransaction, + isTransaction1559Unsigned, + isTransaction2930Unsigned, + isTransactionCall, + isTransactionLegacyUnsigned, + isTransactionWithSender, + validateTransactionCall, + validateTransactionWithSender, +} from '../../src/validation'; +import { + isAccessListEntryValidData, + isAccessListValidData, + isBaseTransactionValidData, + isTransaction1559UnsignedValidData, + isTransaction2930UnsignedValidData, + isTransactionCallValidData, + isTransactionLegacyUnsignedValidData, + isTransactionWithSenderValidData, + validateTransactionCallInvalidData, + validateTransactionWithSenderInvalidData, +} from '../fixtures/validation'; + +describe('validation', () => { + describe('isBaseTransaction', () => { + it.each(isBaseTransactionValidData)('%s', (input, output) => { + expect(isBaseTransaction(input)).toEqual(output); + }); + }); + describe('isAccessListEntry', () => { + it.each(isAccessListEntryValidData)('%s', (input, output) => { + expect(isAccessListEntry(input)).toEqual(output); + }); + }); + describe('isAccessList', () => { + it.each(isAccessListValidData())('%s', (input, output) => { + expect(isAccessList(input)).toEqual(output); + }); + }); + describe('isTransaction1559Unsigned', () => { + it.each(isTransaction1559UnsignedValidData())('%s', (input, output) => { + expect(isTransaction1559Unsigned(input)).toEqual(output); + }); + }); + describe('isTransactionLegacyUnsigned', () => { + it.each(isTransactionLegacyUnsignedValidData())('%s', (input, output) => { + expect(isTransactionLegacyUnsigned(input)).toEqual(output); + }); + }); + describe('isTransaction2930Unsigned', () => { + it.each(isTransaction2930UnsignedValidData())('%s', (input, output) => { + expect(isTransaction2930Unsigned(input)).toEqual(output); + }); + }); + describe('isTransactionWithSender', () => { + it.each(isTransactionWithSenderValidData())('%s', (input, output) => { + expect(isTransactionWithSender(input)).toEqual(output); + }); + }); + describe('validateTransactionWithSender', () => { + it.each([ + ...validateTransactionWithSenderInvalidData(), + ...isTransactionWithSenderValidData(), + ])('%s', (input, output) => { + if (output instanceof InvalidTransactionWithSender) { + expect(() => validateTransactionWithSender(input)).toThrow(output); + } else { + expect(() => validateTransactionWithSender(input)).not.toThrow(); + } + }); + }); + describe('isTransactionCall', () => { + it.each(isTransactionCallValidData)('%s', (input, output) => { + expect(isTransactionCall(input)).toEqual(output); + }); + }); + describe('validateTransactionCall', () => { + it.each([...validateTransactionCallInvalidData(), ...isTransactionCallValidData])( + '%s', + (input, output) => { + if (output instanceof InvalidTransactionCall) { + expect(() => validateTransactionCall(input)).toThrow(output); + } else { + expect(() => validateTransactionCall(input)).not.toThrow(); + } + }, + ); + }); +}); diff --git a/packages/web3-eth/test/unit/web3_eth_methods_no_parameters.test.ts b/packages/web3-eth/test/unit/web3_eth_methods_no_parameters.test.ts new file mode 100644 index 00000000000..6865188b456 --- /dev/null +++ b/packages/web3-eth/test/unit/web3_eth_methods_no_parameters.test.ts @@ -0,0 +1,80 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { ethRpcMethods } from 'web3-rpc-methods'; + +import Web3Eth from '../../src/index'; + +jest.mock('web3-rpc-methods'); + +describe('web3_eth_methods_no_parameters', () => { + let web3Eth: Web3Eth; + + beforeAll(() => { + web3Eth = new Web3Eth('http://127.0.0.1:8545'); + }); + + describe('should call RPC method with only request manager parameter', () => { + it('getProtocolVersion', async () => { + await web3Eth.getProtocolVersion(); + expect(ethRpcMethods.getProtocolVersion).toHaveBeenCalledWith(web3Eth.requestManager); + }); + + it('isSyncing', async () => { + await web3Eth.isSyncing(); + expect(ethRpcMethods.getSyncing).toHaveBeenCalledWith(web3Eth.requestManager); + }); + + it('getCoinbase', async () => { + await web3Eth.getCoinbase(); + expect(ethRpcMethods.getCoinbase).toHaveBeenCalledWith(web3Eth.requestManager); + }); + + it('isMining', async () => { + await web3Eth.isMining(); + expect(ethRpcMethods.getMining).toHaveBeenCalledWith(web3Eth.requestManager); + }); + + it('getAccounts', async () => { + await web3Eth.getAccounts(); + expect(ethRpcMethods.getAccounts).toHaveBeenCalledWith(web3Eth.requestManager); + }); + + it('getWork', async () => { + await web3Eth.getWork(); + expect(ethRpcMethods.getWork).toHaveBeenCalledWith(web3Eth.requestManager); + }); + + it('getPendingTransactions', async () => { + (ethRpcMethods.getPendingTransactions as jest.Mock).mockResolvedValueOnce([]); + + await web3Eth.getPendingTransactions(); + expect(ethRpcMethods.getPendingTransactions).toHaveBeenCalledWith( + web3Eth.requestManager, + ); + }); + + it('requestAccounts', async () => { + await web3Eth.requestAccounts(); + expect(ethRpcMethods.requestAccounts).toHaveBeenCalledWith(web3Eth.requestManager); + }); + + it('getNodeInfo', async () => { + await web3Eth.getNodeInfo(); + expect(ethRpcMethods.getNodeInfo).toHaveBeenCalledWith(web3Eth.requestManager); + }); + }); +}); diff --git a/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts b/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts new file mode 100644 index 00000000000..ace9df829cd --- /dev/null +++ b/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts @@ -0,0 +1,381 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { ethRpcMethods } from 'web3-rpc-methods'; + +import Web3Eth from '../../src/index'; +import * as rpcMethodWrappers from '../../src/rpc_method_wrappers'; +import { + getBlockNumberValidData, + getChainIdValidData, + getGasPriceValidData, + getHashRateValidData, +} from '../fixtures/rpc_methods_wrappers'; +import { + estimateGasValidData, + getBalanceValidData, + getBlockTransactionCountValidData, + getBlockUncleCountValidData, + getBlockValidData, + getCodeValidData, + getFeeHistoryValidData, + getPastLogsValidData, + getProofValidData, + getStorageAtValidData, + getTransactionCountValidData, + getTransactionFromBlockValidData, + getTransactionReceiptValidData, + getTransactionValidData, + getUncleValidData, + sendSignedTransactionValidData, + signValidData, + submitWorkValidData, + tx, + txReceipt, +} from '../fixtures/web3_eth_methods_with_parameters'; + +import { testData as createAccessListTestData } from './rpc_method_wrappers/fixtures/createAccessList'; + +jest.mock('web3-rpc-methods'); +jest.mock('../../src/rpc_method_wrappers'); +// eslint-disable-next-line @typescript-eslint/no-unsafe-call +jest.spyOn(rpcMethodWrappers, 'getTransaction').mockResolvedValue(tx); +jest.spyOn(rpcMethodWrappers, 'getTransactionReceipt').mockResolvedValue(txReceipt); + +describe('web3_eth_methods_with_parameters', () => { + let web3Eth: Web3Eth; + + beforeAll(() => { + web3Eth = new Web3Eth('http://127.0.0.1:8545'); + }); + + describe('should call RPC method with expected parameters', () => { + describe('only has returnFormat parameter', () => { + describe('getHashRate', () => { + it.each(getHashRateValidData)('returnFormat: %s', async returnFormat => { + await web3Eth.getHashRate(returnFormat); + expect(rpcMethodWrappers.getHashRate).toHaveBeenCalledWith( + web3Eth, + returnFormat, + ); + }); + }); + + describe('getHashrate', () => { + it.each(getHashRateValidData)('returnFormat: %s', async returnFormat => { + // eslint-disable-next-line deprecation/deprecation + await web3Eth.getHashrate(returnFormat); + expect(rpcMethodWrappers.getHashRate).toHaveBeenCalledWith( + web3Eth, + returnFormat, + ); + }); + }); + + describe('getGasPrice', () => { + it.each(getGasPriceValidData)('returnFormat: %s', async returnFormat => { + await web3Eth.getGasPrice(returnFormat); + expect(rpcMethodWrappers.getGasPrice).toHaveBeenCalledWith( + web3Eth, + returnFormat, + ); + }); + }); + + describe('getBlockNumber', () => { + it.each(getBlockNumberValidData)('returnFormat: %s', async returnFormat => { + await web3Eth.getBlockNumber(returnFormat); + expect(rpcMethodWrappers.getBlockNumber).toHaveBeenCalledWith( + web3Eth, + returnFormat, + ); + }); + }); + + describe('getChainId', () => { + it.each(getChainIdValidData)('returnFormat: %s', async returnFormat => { + await web3Eth.getChainId(returnFormat); + expect(rpcMethodWrappers.getChainId).toHaveBeenCalledWith( + web3Eth, + returnFormat, + ); + }); + }); + }); + + describe('has multiple parameters', () => { + describe('has returnFormat parameter', () => { + describe('getBalance', () => { + it.each(getBalanceValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getBalance(...input); + expect(rpcMethodWrappers.getBalance).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('getBlock', () => { + it.each(getBlockValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getBlock(...input); + expect(rpcMethodWrappers.getBlock).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('getBlockTransactionCount', () => { + it.each(getBlockTransactionCountValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getBlockTransactionCount(...input); + expect(rpcMethodWrappers.getBlockTransactionCount).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('getBlockUncleCount', () => { + it.each(getBlockUncleCountValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getBlockUncleCount(...input); + expect(rpcMethodWrappers.getBlockUncleCount).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('getUncle', () => { + it.each(getUncleValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getUncle(...input); + expect(rpcMethodWrappers.getUncle).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('getTransaction', () => { + it.each(getTransactionValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getTransaction(...input); + expect(rpcMethodWrappers.getTransaction).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('getTransactionFromBlock', () => { + it.each(getTransactionFromBlockValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getTransactionFromBlock(...input); + expect(rpcMethodWrappers.getTransactionFromBlock).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('getTransactionReceipt', () => { + it.each(getTransactionReceiptValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getTransactionReceipt(...input); + expect(rpcMethodWrappers.getTransactionReceipt).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('getTransactionCount', () => { + it.each(getTransactionCountValidData)( + 'input: %s\rpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getTransactionCount(...input); + expect(rpcMethodWrappers.getTransactionCount).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('estimateGas', () => { + it.each(estimateGasValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.estimateGas(...input); + expect(rpcMethodWrappers.estimateGas).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('getFeeHistory', () => { + it.each(getFeeHistoryValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getFeeHistory(...input); + expect(rpcMethodWrappers.getFeeHistory).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('getProof', () => { + it.each(getProofValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getProof(...input); + expect(rpcMethodWrappers.getProof).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('getStorageAt', () => { + it.each(getStorageAtValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getStorageAt(...input); + expect(rpcMethodWrappers.getStorageAt).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('getCode', () => { + it.each(getCodeValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getCode(...input); + expect(rpcMethodWrappers.getCode).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('sendSignedTransaction', () => { + it.each(sendSignedTransactionValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.sendSignedTransaction(...input); + expect(rpcMethodWrappers.sendSignedTransaction).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('sign', () => { + it.each(signValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.sign(...input); + expect(rpcMethodWrappers.sign).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('getPastLogs', () => { + it.each(getPastLogsValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (input, rpcMethodParameters) => { + await web3Eth.getPastLogs(...input); + expect(rpcMethodWrappers.getLogs).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + describe('getPastLogs called with rpcMethodWrappers', () => { + it.each(getPastLogsValidData)( + 'input: %s\nrpcMethodParameters: %s', + async (_, rpcMethodParameters) => { + await rpcMethodWrappers.getLogs(web3Eth, ...rpcMethodParameters); + expect(rpcMethodWrappers.getLogs).toHaveBeenCalledWith( + web3Eth, + ...rpcMethodParameters, + ); + }, + ); + }); + + describe('createAccessList', () => { + it.each(createAccessListTestData)( + 'input: %s\nrpcMethodParameters: %s', + async (_, input) => { + await web3Eth.createAccessList(...input); + expect(rpcMethodWrappers.createAccessList).toHaveBeenCalledWith( + web3Eth, + ...input, + ); + }, + ); + }); + }); + + describe("doesn't have returnFormat parameter", () => { + describe('submitWork', () => { + it.each(submitWorkValidData)('input: %s', async input => { + await web3Eth.submitWork(...input); + expect(ethRpcMethods.submitWork).toHaveBeenCalledWith( + web3Eth.requestManager, + ...input, + ); + }); + }); + }); + }); + }); +}); diff --git a/packages/web3-eth/test/unit/web3_eth_subscription.test.ts b/packages/web3-eth/test/unit/web3_eth_subscription.test.ts new file mode 100644 index 00000000000..edbf28d215f --- /dev/null +++ b/packages/web3-eth/test/unit/web3_eth_subscription.test.ts @@ -0,0 +1,108 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3SubscriptionManager } from 'web3-core'; +import { Web3BaseProvider } from 'web3-types'; +import * as rpcMethodWrappers from '../../src/rpc_method_wrappers'; +import { LogsSubscription } from '../../src'; +import { Web3Eth } from '../../src/web3_eth'; +import { mockRpcResponse as mockGetLogsRpcResponse } from './rpc_method_wrappers/fixtures/get_logs'; +import { sleep } from '../shared_fixtures/utils'; + +jest.mock('../../src/rpc_method_wrappers'); + +describe('Web3Eth subscribe and clear subscriptions', () => { + let web3Eth: Web3Eth; + + it('should return the subscription data provided by the Subscription Manager', async () => { + const requestManager = { send: jest.fn(), on: jest.fn(), provider: { on: jest.fn() } }; + + const subManager = new Web3SubscriptionManager(requestManager as any, undefined as any); + const dummyLogs = { logs: { test1: 'test1' } }; + + jest.spyOn(subManager, 'subscribe').mockResolvedValueOnce(dummyLogs); + web3Eth = new Web3Eth({ + provider: { + on: jest.fn(), + } as unknown as Web3BaseProvider, + subscriptionManager: subManager, + }); + + const logs = await web3Eth.subscribe('logs'); + expect(logs).toStrictEqual(dummyLogs); + }); + + it('should call `_processSubscriptionResult` when the logs are of type LogsSubscription and the `fromBlock` is provided', async () => { + const requestManager = { send: jest.fn(), on: jest.fn(), provider: { on: jest.fn() } }; + const subManager = new Web3SubscriptionManager(requestManager as any, undefined as any); + + const dummyLogs = new LogsSubscription({}, { subscriptionManager: subManager }); + jest.spyOn(subManager, 'subscribe').mockResolvedValueOnce(dummyLogs); + jest.spyOn(rpcMethodWrappers, 'getLogs').mockResolvedValueOnce(mockGetLogsRpcResponse); + + web3Eth = new Web3Eth({ + provider: { + on: jest.fn(), + } as unknown as Web3BaseProvider, + subscriptionManager: subManager, + }); + jest.spyOn(dummyLogs, '_processSubscriptionResult'); + + const logs = await web3Eth.subscribe('logs', { + fromBlock: 0, + }); + await sleep(100); + + expect(logs).toStrictEqual(dummyLogs); + expect(dummyLogs._processSubscriptionResult).toHaveBeenCalled(); + }); + + it('should be able to clear subscriptions', async () => { + const requestManager = { send: jest.fn(), on: jest.fn(), provider: { on: jest.fn() } }; + const subManager = new Web3SubscriptionManager(requestManager as any, undefined as any); + + jest.spyOn(subManager, 'unsubscribe'); + + web3Eth = new Web3Eth({ + provider: { + on: jest.fn(), + } as unknown as Web3BaseProvider, + subscriptionManager: subManager, + }); + + await web3Eth.clearSubscriptions(); + + expect(subManager.unsubscribe).toHaveBeenCalledWith(undefined); + }); + + it('should be able to clear subscriptions and pass `shouldClearSubscription` when passing `notClearSyncing`', async () => { + const requestManager = { send: jest.fn(), on: jest.fn(), provider: { on: jest.fn() } }; + const subManager = new Web3SubscriptionManager(requestManager as any, undefined as any); + + jest.spyOn(subManager, 'unsubscribe'); + + web3Eth = new Web3Eth({ + provider: { + on: jest.fn(), + } as unknown as Web3BaseProvider, + subscriptionManager: subManager, + }); + + await web3Eth.clearSubscriptions(true); + + expect(subManager.unsubscribe).toHaveBeenCalledWith(Web3Eth['shouldClearSubscription']); + }); +}); diff --git a/packages/web3-eth/tsconfig.cjs.json b/packages/web3-eth/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-eth/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-eth/tsconfig.esm.json b/packages/web3-eth/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-eth/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-eth/tsconfig.json b/packages/web3-eth/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-eth/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-eth/tsconfig.types.json b/packages/web3-eth/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-eth/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-eth/tsdoc.json b/packages/web3-eth/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-eth/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-eth/types/index.d.ts b/packages/web3-eth/types/index.d.ts deleted file mode 100644 index c018c2dbcac..00000000000 --- a/packages/web3-eth/types/index.d.ts +++ /dev/null @@ -1,441 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens - * @author Samuel Furter - * @author Prince Sinha - * @date 2018 - */ - -import * as net from 'net'; -import { - BatchRequest, - Extension, - Log, - PromiEvent, - provider, - Providers, - RLPEncodedTransaction, - Transaction, - TransactionConfig, - TransactionReceipt, - Common, - hardfork, - chain, - BlockNumber, - LogsOptions, - PastLogsOptions -} from 'web3-core'; -import {Subscription} from 'web3-core-subscriptions'; -import {AbiCoder} from 'web3-eth-abi'; -import {Accounts} from 'web3-eth-accounts'; -import {Contract, ContractOptions} from 'web3-eth-contract'; -import {Ens} from 'web3-eth-ens'; -import {Iban} from 'web3-eth-iban'; -import {Personal} from 'web3-eth-personal'; -import {Network} from 'web3-net'; -import {AbiItem} from 'web3-utils'; -import {BigNumber} from 'bignumber.js'; -import BN = require('bn.js'); - -export { - TransactionConfig, - RLPEncodedTransaction, - Transaction, - TransactionReceipt, - hardfork, - Common, - chain -} from 'web3-core'; - -export class Eth { - constructor(); - constructor(provider: provider); - constructor(provider: provider, net: net.Socket); - - Contract: new ( - jsonInterface: AbiItem[] | AbiItem, - address?: string, - options?: ContractOptions - ) => Contract; - Iban: new (iban: string) => Iban; - personal: Personal; - accounts: Accounts; - ens: Ens; - abi: AbiCoder; - net: Network; - - readonly givenProvider: any; - static readonly givenProvider: any; - defaultAccount: string | null; - defaultBlock: BlockNumber; - defaultCommon: Common; - defaultHardfork: hardfork; - defaultChain: chain; - transactionPollingTimeout: number; - transactionConfirmationBlocks: number; - transactionBlockTimeout: number; - handleRevert: boolean; - readonly currentProvider: provider; - - setProvider(provider: provider): boolean; - - BatchRequest: new () => BatchRequest; - static readonly providers: Providers; - - extend(extension: Extension): any; - - clearSubscriptions(callback: (error: Error, result: boolean) => void): void; - - subscribe( - type: 'logs', - options: LogsOptions, - callback?: (error: Error, log: Log) => void - ): Subscription; - subscribe( - type: 'syncing', - callback?: (error: Error, result: Syncing) => void - ): Subscription; - subscribe( - type: 'newBlockHeaders', - callback?: (error: Error, blockHeader: BlockHeader) => void - ): Subscription; - subscribe( - type: 'pendingTransactions', - callback?: (error: Error, transactionHash: string) => void - ): Subscription; - - getProtocolVersion( - callback?: (error: Error, protocolVersion: string) => void - ): Promise; - - isSyncing( - callback?: (error: Error, syncing: Syncing) => void - ): Promise; - - getCoinbase( - callback?: (error: Error, coinbaseAddress: string) => void - ): Promise; - - isMining( - callback?: (error: Error, mining: boolean) => void - ): Promise; - - getHashrate( - callback?: (error: Error, hashes: number) => void - ): Promise; - - getNodeInfo( - callback?: (error: Error, version: string) => void - ): Promise; - - getChainId( - callback?: (error: Error, version: number) => void - ): Promise; - - getGasPrice( - callback?: (error: Error, gasPrice: string) => void - ): Promise; - - getAccounts( - callback?: (error: Error, accounts: string[]) => void - ): Promise; - - getBlockNumber( - callback?: (error: Error, blockNumber: number) => void - ): Promise; - - getBalance( - address: string - ): Promise; - getBalance( - address: string, - defaultBlock: BlockNumber): Promise; - getBalance( - address: string, - callback?: (error: Error, balance: string) => void - ): Promise; - getBalance( - address: string, - defaultBlock: BlockNumber, - callback?: (error: Error, balance: string) => void - ): Promise; - - getStorageAt(address: string, position: number | BigNumber | BN | string): Promise; - getStorageAt( - address: string, - position: number | BigNumber | BN | string, - defaultBlock: BlockNumber - ): Promise; - getStorageAt( - address: string, - position: number | BigNumber | BN | string, - callback?: (error: Error, storageAt: string) => void - ): Promise; - getStorageAt( - address: string, - position: number | BigNumber | BN | string, - defaultBlock: BlockNumber, - callback?: (error: Error, storageAt: string) => void - ): Promise; - - getCode( - address: string - ): Promise; - getCode( - address: string, - defaultBlock: BlockNumber - ): Promise; - getCode( - address: string, - callback?: (error: Error, code: string) => void - ): Promise; - getCode( - address: string, - defaultBlock: BlockNumber, - callback?: (error: Error, code: string) => void - ): Promise; - - getBlock(blockHashOrBlockNumber: BlockNumber | string): Promise; - getBlock( - blockHashOrBlockNumber: BlockNumber | string, - returnTransactionObjects: boolean - ): Promise; - getBlock( - blockHashOrBlockNumber: BlockNumber | string, - callback?: (error: Error, block: BlockTransactionString) => void - ): Promise; - getBlock( - blockHashOrBlockNumber: BlockNumber | string, - returnTransactionObjects: boolean, - callback?: (error: Error, block: BlockTransactionObject) => void - ): Promise; - - getBlockTransactionCount( - blockHashOrBlockNumber: BlockNumber | string, - callback?: (error: Error, numberOfTransactions: number) => void - ): Promise; - - getBlockUncleCount( - blockHashOrBlockNumber: BlockNumber | string, - callback?: (error: Error, numberOfTransactions: number) => void - ): Promise; - - getUncle( - blockHashOrBlockNumber: BlockNumber | string, - uncleIndex: number | string | BN - ): Promise; - getUncle( - blockHashOrBlockNumber: BlockNumber | string, - uncleIndex: number | string | BN, - returnTransactionObjects: boolean - ): Promise; - getUncle( - blockHashOrBlockNumber: BlockNumber | string, - uncleIndex: number | string | BN, - callback?: (error: Error, uncle: any) => void - ): Promise; - getUncle( - blockHashOrBlockNumber: BlockNumber | string, - uncleIndex: number | string | BN, - returnTransactionObjects: boolean, - callback?: (error: Error, uncle: any) => void - ): Promise; - - getTransaction( - transactionHash: string, - callback?: (error: Error, transaction: Transaction) => void - ): Promise; - - getPendingTransactions( - callback?: (error: Error, result: Transaction[]) => void - ): Promise; - - getTransactionFromBlock( - blockHashOrBlockNumber: BlockNumber | string, - indexNumber: number | string | BN, - callback?: (error: Error, transaction: Transaction) => void - ): Promise; - - getTransactionReceipt( - hash: string, - callback?: ( - error: Error, - transactionReceipt: TransactionReceipt - ) => void - ): Promise; - - getTransactionCount(address: string): Promise; - getTransactionCount( - address: string, - defaultBlock: BlockNumber - ): Promise; - getTransactionCount( - address: string, - callback?: (error: Error, count: number) => void - ): Promise; - getTransactionCount( - address: string, - defaultBlock: BlockNumber, - callback?: (error: Error, count: number) => void - ): Promise; - - sendTransaction( - transactionConfig: TransactionConfig, - callback?: (error: Error, hash: string) => void - ): PromiEvent; - - sendSignedTransaction( - signedTransactionData: string, - callback?: (error: Error, hash: string) => void - ): PromiEvent; - - sign( - dataToSign: string, - address: string | number, - callback?: (error: Error, signature: string) => void - ): Promise; - - signTransaction( - transactionConfig: TransactionConfig, - callback?: ( - error: Error, - signedTransaction: RLPEncodedTransaction - ) => void - ): Promise; - signTransaction( - transactionConfig: TransactionConfig, - address: string - ): Promise; - signTransaction( - transactionConfig: TransactionConfig, - address: string, - callback: ( - error: Error, - signedTransaction: RLPEncodedTransaction - ) => void - ): Promise; - - call(transactionConfig: TransactionConfig): Promise; - call( - transactionConfig: TransactionConfig, - defaultBlock?: BlockNumber - ): Promise; - call( - transactionConfig: TransactionConfig, - callback?: (error: Error, data: string) => void - ): Promise; - call( - transactionConfig: TransactionConfig, - defaultBlock: BlockNumber, - callback: (error: Error, data: string) => void - ): Promise; - - estimateGas( - transactionConfig: TransactionConfig, - callback?: (error: Error, gas: number) => void - ): Promise; - - getPastLogs( - options: PastLogsOptions, - callback?: (error: Error, logs: Log[]) => void - ): Promise; - - getWork( - callback?: (error: Error, result: string[]) => void - ): Promise; - - submitWork( - data: [string, string, string], - callback?: (error: Error, result: boolean) => void - ): Promise; - - getProof( - address: string, - storageKey: number[] | BigNumber[] | BN[] | string[], - blockNumber: BlockNumber, - callback?: (error: Error, result: GetProof) => void - ): Promise; - - getProof( - address: string, - storageKey: number[] | BigNumber[] | BN[] | string[], - blockNumber: BlockNumber, - ): Promise; - - requestAccounts(): Promise - requestAccounts(callback: (error: Error, result: string[]) => void): Promise -} - -export interface Syncing { - StartingBlock: number; - CurrentBlock: number; - HighestBlock: number; - KnownStates: number; - PulledStates: number; -} - -export interface BlockHeader { - number: number; - hash: string; - parentHash: string; - nonce: string; - sha3Uncles: string; - logsBloom: string; - transactionRoot: string; - stateRoot: string; - receiptRoot: string; - miner: string; - extraData: string; - gasLimit: number; - gasUsed: number; - timestamp: number | string; -} - -// TODO: This interface does exist to provide backwards-compatibility and can get removed on a minor release -export interface Block extends BlockTransactionBase { - transactions: Transaction[] | string[]; -} - -export interface BlockTransactionBase extends BlockHeader { - size: number; - difficulty: number; - totalDifficulty: number; - uncles: string[]; -} - -export interface BlockTransactionObject extends BlockTransactionBase { - transactions: Transaction[]; -} - -export interface BlockTransactionString extends BlockTransactionBase { - transactions: string[]; -} - -export interface GetProof { - address: string; - balance: string; - codeHash: string; - nonce: string; - storageHash: string; - accountProof: string[]; - storageProof: StorageProof[]; -} - -export interface StorageProof { - key: string; - value: string; - proof: string[]; -} diff --git a/packages/web3-eth/types/tests/eth.tests.ts b/packages/web3-eth/types/tests/eth.tests.ts deleted file mode 100644 index 43475e0208c..00000000000 --- a/packages/web3-eth/types/tests/eth.tests.ts +++ /dev/null @@ -1,632 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file eth-tests.ts - * @author Josh Stevens - * @author Prince Sinha - * @date 2018 - */ - -import {Log} from 'web3-core'; -import { - BlockTransactionObject, - BlockTransactionString, - BlockHeader, - Eth, - GetProof, - Syncing, - RLPEncodedTransaction, - Transaction, - TransactionReceipt, - TransactionConfig, - hardfork, - Common, - chain -} from 'web3-eth'; -import BN = require('bn.js'); -import BigNumber from 'bignumber.js'; - -// $ExpectType Eth -const eth_empty = new Eth(); - -// $ExpectType Eth -const eth = new Eth('http://localhost:8545'); - -// $ExpectType provider -eth.currentProvider; - -// $ExpectType any -eth.givenProvider; - -// $ExpectType string | null -eth.defaultAccount; - -// $ExpectType BlockNumber -eth.defaultBlock; - -// $ExpectType Common -eth.defaultCommon; - -// $ExpectType hardfork -eth.defaultHardfork; - -// $ExpectType chain -eth.defaultChain; - -// $ExpectType number -eth.transactionPollingTimeout; - -// $ExpectType number -eth.transactionConfirmationBlocks; - -// $ExpectType number -eth.transactionBlockTimeout; - -// $ExpectType boolean -eth.handleRevert; - -// $ExpectType new (jsonInterface: AbiItem | AbiItem[], address?: string | undefined, options?: ContractOptions | undefined) => Contract -eth.Contract; - -// $ExpectType new (iban: string) => Iban -eth.Iban; - -// $ExpectType Personal -eth.personal; - -// $ExpectType Accounts -eth.accounts; - -// $ExpectType any -eth.extend({property: 'test', methods: [{name: 'method', call: 'method'}]}); - -// $ExpectType Ens -eth.ens; - -// $ExpectType AbiCoder -eth.abi; - -// $ExpectType Network -eth.net; - -// $ExpectType void -eth.clearSubscriptions(() => {}); - -// $ExpectType Subscription -eth.subscribe('logs', {}); -// $ExpectType Subscription -eth.subscribe('logs', {}, (error: Error, log: Log) => {}); - -// $ExpectType Subscription -eth.subscribe('syncing'); -// $ExpectType Subscription -eth.subscribe( - 'syncing', - (error: Error, result: Syncing) => {} -); - -// $ExpectType Subscription -eth.subscribe('newBlockHeaders'); -// $ExpectType Subscription -eth.subscribe( - 'newBlockHeaders', - (error: Error, blockHeader: BlockHeader) => {} -); - -// $ExpectType Subscription -eth.subscribe('pendingTransactions'); -// $ExpectType Subscription -eth.subscribe( - 'pendingTransactions', - (error: Error, transactionHash: string) => {} -); - -// $ExpectType boolean -eth.setProvider('https://localhost:2100'); - -// $ExpectType BatchRequest -new eth.BatchRequest(); - -// $ExpectType Promise -eth.getProtocolVersion(); -// $ExpectType Promise -eth.getProtocolVersion((error: Error, protocolVersion: string) => {}); - -// $ExpectType Promise -eth.isSyncing(); -// $ExpectType Promise -eth.isSyncing((error: Error, syncing: Syncing) => {}); - -// $ExpectType Promise -eth.getCoinbase(); -// $ExpectType Promise -eth.getCoinbase((error: Error, coinbaseAddress: string) => {}); - -// $ExpectType Promise -eth.isMining(); -// $ExpectType Promise -eth.isMining((error: Error, mining: boolean) => {}); - -// $ExpectType Promise -eth.getHashrate(); -// $ExpectType Promise -eth.getHashrate((error: Error, hashes: number) => {}); - -// $ExpectType Promise -eth.getNodeInfo(); -// $ExpectType Promise -eth.getNodeInfo((error: Error, version: string) => {}); - -// $ExpectType Promise -eth.getChainId(); -// $ExpectType Promise -eth.getChainId((error: Error, chainId: number) => {}); - -// $ExpectType Promise -eth.getGasPrice(); -// $ExpectType Promise -eth.getGasPrice((error: Error, gasPrice: string) => {}); - -// $ExpectType Promise -eth.getAccounts(); -// $ExpectType Promise -eth.getAccounts((error: Error, accounts: string[]) => {}); - -// $ExpectType Promise -eth.getBlockNumber(); -// $ExpectType Promise -eth.getBlockNumber((error: Error, blockNumber: number) => {}); - -// $ExpectType Promise -eth.getBalance('0x407d73d8a49eeb85d32cf465507dd71d507100c1'); -// $ExpectType Promise -eth.getBalance('0x407d73d8a49eeb85d32cf465507dd71d507100c1', '1000'); -// $ExpectType Promise -eth.getBalance( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - '1000', - (error: Error, balance: string) => {} -); -// $ExpectType Promise -eth.getBalance('0x407d73d8a49eeb85d32cf465507dd71d507100c1', 1000); -// $ExpectType Promise -eth.getBalance( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - 1000, - (error: Error, balance: string) => {} -); - -// $ExpectType Promise -eth.getStorageAt('0x407d73d8a49eeb85d32cf465507dd71d507100c1', 2); -// $ExpectType Promise -eth.getStorageAt('0x407d73d8a49eeb85d32cf465507dd71d507100c1', new BN(2)); -// $ExpectType Promise -eth.getStorageAt('0x407d73d8a49eeb85d32cf465507dd71d507100c1', new BigNumber(2)); -// $ExpectType Promise -eth.getStorageAt('0x407d73d8a49eeb85d32cf465507dd71d507100c1', 2, '1000'); -// $ExpectType Promise -eth.getStorageAt( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - 2, - '1000', - (error: Error, balance: string) => {} -); -// $ExpectType Promise -eth.getStorageAt('0x407d73d8a49eeb85d32cf465507dd71d507100c1', 2, 1000); -// $ExpectType Promise -eth.getStorageAt( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - 2, - 1000, - (error: Error, balance: string) => {} -); - -// $ExpectType Promise -eth.getCode('0x407d73d8a49eeb85d32cf465507dd71d507100c1'); -// $ExpectType Promise -eth.getCode('0x407d73d8a49eeb85d32cf465507dd71d507100c1', '1000'); -// $ExpectType Promise -eth.getCode( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - '1000', - (error: Error, balance: string) => {} -); -// $ExpectType Promise -eth.getCode('0x407d73d8a49eeb85d32cf465507dd71d507100c1', 1000); -// $ExpectType Promise -eth.getCode( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - 1000, - (error: Error, balance: string) => {} -); - -// $ExpectType Promise -eth.getBlock('0x407d73d8a49eeb85d32cf465507dd71d507100c1'); -// $ExpectType Promise -eth.getBlock(345); -// $ExpectType Promise -eth.getBlock('0x407d73d8a49eeb85d32cf465507dd71d507100c1', true); -// $ExpectType Promise -eth.getBlock(345); -// $ExpectType Promise -eth.getBlock(345, true); -// $ExpectType Promise -eth.getBlock( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - (error: Error, block: BlockTransactionString) => {} -); -// $ExpectType Promise -eth.getBlock(345, (error: Error, block: BlockTransactionString) => {}); -// $ExpectType Promise -eth.getBlock(345, true, (error: Error, block: BlockTransactionObject) => {}); -// $ExpectType Promise -eth.getBlock( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - true, - (error: Error, block: BlockTransactionObject) => {} -); - -// $ExpectType Promise -eth.getBlockTransactionCount( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - (error: Error, numberOfTransactions: number) => {} -); -// $ExpectType Promise -eth.getBlockTransactionCount(345); -// $ExpectType Promise -eth.getBlockTransactionCount( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - (error: Error, numberOfTransactions: number) => {} -); -// $ExpectType Promise -eth.getBlockTransactionCount(345); - -// $ExpectType Promise -eth.getUncle('0x407d73d8a49eeb85d32cf465507dd71d507100c1', 4); -// $ExpectType Promise -eth.getUncle(345, 4); -// $ExpectType Promise -eth.getUncle('0x407d73d8a49eeb85d32cf465507dd71d507100c1', 4, true); -// $ExpectType Promise -eth.getUncle( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - 4, - (error: Error, uncle: {}) => {} -); -// $ExpectType Promise -eth.getUncle(345, 4, (error: Error, uncle: {}) => {}); -// $ExpectType Promise -eth.getUncle(345, 4, true); -// $ExpectType Promise -eth.getUncle( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - 4, - true, - (error: Error, uncle: {}) => {} -); -// $ExpectType Promise -eth.getUncle(345, 4, true, (error: Error, uncle: {}) => {}); - -// $ExpectType Promise -eth.getTransaction('0x407d73d8a49eeb85d32cf465507dd71d507100c1'); -// $ExpectType Promise -eth.getTransaction( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - (error: Error, transaction: Transaction) => {} -); - -// $ExpectType Promise -eth.getTransactionFromBlock('0x407d73d8a49eeb85d32cf465507dd71d507100c1', 2); -// $ExpectType Promise -eth.getTransactionFromBlock(345, 2); -// $ExpectType Promise -eth.getTransactionFromBlock( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - 2, - (error: Error, transaction: Transaction) => {} -); -// $ExpectType Promise -eth.getTransactionFromBlock( - 345, - 2, - (error: Error, transaction: Transaction) => {} -); - -// $ExpectType Promise -eth.getTransactionReceipt('0x407d73d8a49eeb85d32cf465507dd71d507100c1'); -// $ExpectType Promise -eth.getTransactionReceipt( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - (error: Error, transactionReceipt: TransactionReceipt) => {} -); - -// $ExpectType Promise -eth.getTransactionCount('0x407d73d8a49eeb85d32cf465507dd71d507100c1'); -// $ExpectType Promise -eth.getTransactionCount('0x407d73d8a49eeb85d32cf465507dd71d507100c1', 1000); -// $ExpectType Promise -eth.getTransactionCount('0x407d73d8a49eeb85d32cf465507dd71d507100c1', '1000'); -// $ExpectType Promise -eth.getTransactionCount( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - (error: Error, count: number) => {} -); -// $ExpectType Promise -eth.getTransactionCount( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - (error: Error, count: number) => {} -); -// $ExpectType Promise -eth.getTransactionCount( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - 1000, - (error: Error, count: number) => {} -); -// $ExpectType Promise -eth.getTransactionCount( - '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - '1000', - (error: Error, count: number) => {} -); - -const code = '603d80600c6000396000f3007c0'; - -// $ExpectType PromiEvent -eth.sendTransaction({ - from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', - data: 'code' -}); -// $ExpectType PromiEvent -eth.sendTransaction( - { - from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', - data: 'code' - }, - (error: Error, hash: string) => {} -); - -// $ExpectType PromiEvent -eth.sendSignedTransaction('0xf889808609184e72a0008227109'); -// $ExpectType PromiEvent -eth.sendSignedTransaction( - '0xf889808609184e72a0008227109', - (error: Error, hash: string) => {} -); - -// $ExpectType Promise -eth.sign('Hello world', '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe'); -// $ExpectType Promise -eth.sign('Hello world', 3); -// $ExpectType Promise -eth.sign( - 'Hello world', - '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - (error: Error, signature: string) => {} -); -// $ExpectType Promise -eth.sign('Hello world', 3, (error: Error, signature: string) => {}); - -// $ExpectType Promise -eth.signTransaction({ - from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - gasPrice: '20000000000', - gas: '21000', - to: '0x3535353535353535353535353535353535353535', - value: '1000000000000000000', - data: '' -}); -// $ExpectType Promise -eth.signTransaction( - { - from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - gasPrice: '20000000000', - gas: '21000', - to: '0x3535353535353535353535353535353535353535', - value: '1000000000000000000', - data: '' - }, - '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0' -); -// $ExpectType Promise -eth.signTransaction( - { - from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - gasPrice: '20000000000', - gas: '21000', - to: '0x3535353535353535353535353535353535353535', - value: '1000000000000000000', - data: '' - }, - (error: Error, signedTransaction: RLPEncodedTransaction) => {} -); -// $ExpectType Promise -eth.signTransaction( - { - from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - gasPrice: '20000000000', - gas: '21000', - to: '0x3535353535353535353535353535353535353535', - value: '1000000000000000000', - data: '' - }, - '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - (error: Error, signedTransaction: RLPEncodedTransaction) => {} -); - -// $ExpectType Promise -eth.call({ - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', // contract address - data: - '0xc6888fa10000000000000000000000000000000000000000000000000000000000000003' -}); -// $ExpectType Promise -eth.call( - { - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', // contract address - data: - '0xc6888fa10000000000000000000000000000000000000000000000000000000000000003' - }, - 100 -); -// $ExpectType Promise -eth.call( - { - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', // contract address - data: - '0xc6888fa10000000000000000000000000000000000000000000000000000000000000003' - }, - '100' -); -// $ExpectType Promise -eth.call( - { - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', // contract address - data: - '0xc6888fa10000000000000000000000000000000000000000000000000000000000000003' - }, - (error: Error, data: string) => {} -); -// $ExpectType Promise -eth.call( - { - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', // contract address - data: - '0xc6888fa10000000000000000000000000000000000000000000000000000000000000003' - }, - '100', - (error: Error, data: string) => {} -); -// $ExpectType Promise -eth.call( - { - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', // contract address - data: - '0xc6888fa10000000000000000000000000000000000000000000000000000000000000003' - }, - 100, - (error: Error, data: string) => {} -); - -// $ExpectType Promise -eth.call( - { - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', // contract address - data: - '0xc6888fa10000000000000000000000000000000000000000000000000000000000000003' - }, - 100, - (error: Error, data: string) => {} -); - -// $ExpectType Promise -eth.estimateGas({ - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: - '0xc6888fa10000000000000000000000000000000000000000000000000000000000000003' -}); -// $ExpectType Promise -eth.estimateGas( - { - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: - '0xc6888fa10000000000000000000000000000000000000000000000000000000000000003' - }, - (error: Error, gas: number) => {} -); - -// $ExpectType Promise -eth.getPastLogs({ - address: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - topics: ['0x033456732123ffff2342342dd12342434324234234fd234fd23fd4f23d4234'] -}); -// $ExpectType Promise -eth.getPastLogs( - { - address: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - topics: [ - '0x033456732123ffff2342342dd12342434324234234fd234fd23fd4f23d4234' - ] - }, - (error: Error, logs: Log[]) => {} -); - -// $ExpectType Promise -eth.getWork(); -// $ExpectType Promise -eth.getWork((error: Error, result: string[]) => {}); - -// $ExpectType Promise -eth.submitWork([ - '0x0000000000000001', - '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', - '0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000' -]); - -// $ExpectType Promise -eth.submitWork( - [ - '0x0000000000000001', - '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', - '0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000' - ], - (error: Error, result: boolean) => {} -); - -// $ExpectType Promise -eth.getPendingTransactions(); - -// $ExpectType Promise -eth.getPendingTransactions((error: Error, result: Transaction[]) => {}); - -// $ExpectType Promise -eth.getProof( - '0x1234567890123456789012345678901234567890', - [ - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - 'latest' -); - -// $ExpectType Promise -eth.getProof( - '0x1234567890123456789012345678901234567890', - [ - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - 'latest', - (error: Error, result: GetProof) => {} -); - -// $ExpectType Promise -eth.getProof( - '0x1234567890123456789012345678901234567890', - [ - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - 10 -); - -// $ExpectType Promise -eth.getProof( - '0x1234567890123456789012345678901234567890', - [ - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - 10, - (error: Error, result: GetProof) => {} -); diff --git a/packages/web3-eth/types/tsconfig.json b/packages/web3-eth/types/tsconfig.json deleted file mode 100644 index e9ea79fb47a..00000000000 --- a/packages/web3-eth/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-eth": ["."] - } - } -} diff --git a/packages/web3-eth/types/tslint.json b/packages/web3-eth/types/tslint.json deleted file mode 100644 index 871d605704b..00000000000 --- a/packages/web3-eth/types/tslint.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false, - "unified-signatures": false - } -} diff --git a/packages/web3-eth2-beaconchain/.babelrc b/packages/web3-eth2-beaconchain/.babelrc deleted file mode 100644 index aecdb01cc4c..00000000000 --- a/packages/web3-eth2-beaconchain/.babelrc +++ /dev/null @@ -1,8 +0,0 @@ - -{ - "presets": ["@babel/env", "@babel/typescript"], - "plugins": [ - "@babel/proposal-class-properties", - "@babel/proposal-object-rest-spread" - ] - } \ No newline at end of file diff --git a/packages/web3-eth2-beaconchain/Makefile b/packages/web3-eth2-beaconchain/Makefile deleted file mode 100644 index 3d6b7bc8ef5..00000000000 --- a/packages/web3-eth2-beaconchain/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -.PHONY: lodestar-docker lighthouse-docker - -lodestar-docker: - docker run --network host chainsafe/lodestar beacon --testnet medalla --api.rest.enabled true - -lighthouse-docker: - docker run -p 9000:9000 -p 127.0.0.1:5052:5052 -v ${HOME}/.lighthouse:/root/.lighthouse sigp/lighthouse lighthouse --network mainnet beacon --http --http-address 0.0.0.0 diff --git a/packages/web3-eth2-beaconchain/jest.config.js b/packages/web3-eth2-beaconchain/jest.config.js deleted file mode 100644 index a5586a60e26..00000000000 --- a/packages/web3-eth2-beaconchain/jest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - roots: ['/test'], - transform: { - '^.+\\.tsx?$': 'ts-jest', - }, - testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$', - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], - } \ No newline at end of file diff --git a/packages/web3-eth2-beaconchain/package-lock.json b/packages/web3-eth2-beaconchain/package-lock.json deleted file mode 100644 index b0bf67a955a..00000000000 --- a/packages/web3-eth2-beaconchain/package-lock.json +++ /dev/null @@ -1,5349 +0,0 @@ -{ - "name": "web3-eth2-beaconchain", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", - "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", - "dev": true, - "requires": { - "@babel/types": "^7.11.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/template": "^7.10.4", - "@babel/types": "^7.11.0", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "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 - } - } - }, - "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", - "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.5", - "@babel/types": "^7.11.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.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 - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", - "dev": true - }, - "@jest/console": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.3.0.tgz", - "integrity": "sha512-/5Pn6sJev0nPUcAdpJHMVIsA8sKizL2ZkcKPE5+dJrCccks7tcM7c9wbgHudBJbxXLoTbqsHkG1Dofoem4F09w==", - "dev": true, - "requires": { - "@jest/types": "^26.3.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.3.0", - "jest-util": "^26.3.0", - "slash": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "@jest/core": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.4.2.tgz", - "integrity": "sha512-sDva7YkeNprxJfepOctzS8cAk9TOekldh+5FhVuXS40+94SHbiicRO1VV2tSoRtgIo+POs/Cdyf8p76vPTd6dg==", - "dev": true, - "requires": { - "@jest/console": "^26.3.0", - "@jest/reporters": "^26.4.1", - "@jest/test-result": "^26.3.0", - "@jest/transform": "^26.3.0", - "@jest/types": "^26.3.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.3.0", - "jest-config": "^26.4.2", - "jest-haste-map": "^26.3.0", - "jest-message-util": "^26.3.0", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.4.0", - "jest-resolve-dependencies": "^26.4.2", - "jest-runner": "^26.4.2", - "jest-runtime": "^26.4.2", - "jest-snapshot": "^26.4.2", - "jest-util": "^26.3.0", - "jest-validate": "^26.4.2", - "jest-watcher": "^26.3.0", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "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" - } - } - } - }, - "@jest/environment": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.3.0.tgz", - "integrity": "sha512-EW+MFEo0DGHahf83RAaiqQx688qpXgl99wdb8Fy67ybyzHwR1a58LHcO376xQJHfmoXTu89M09dH3J509cx2AA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^26.3.0", - "@jest/types": "^26.3.0", - "@types/node": "*", - "jest-mock": "^26.3.0" - } - }, - "@jest/fake-timers": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.3.0.tgz", - "integrity": "sha512-ZL9ytUiRwVP8ujfRepffokBvD2KbxbqMhrXSBhSdAhISCw3gOkuntisiSFv+A6HN0n0fF4cxzICEKZENLmW+1A==", - "dev": true, - "requires": { - "@jest/types": "^26.3.0", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.3.0", - "jest-mock": "^26.3.0", - "jest-util": "^26.3.0" - } - }, - "@jest/globals": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.4.2.tgz", - "integrity": "sha512-Ot5ouAlehhHLRhc+sDz2/9bmNv9p5ZWZ9LE1pXGGTCXBasmi5jnYjlgYcYt03FBwLmZXCZ7GrL29c33/XRQiow==", - "dev": true, - "requires": { - "@jest/environment": "^26.3.0", - "@jest/types": "^26.3.0", - "expect": "^26.4.2" - } - }, - "@jest/reporters": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.4.1.tgz", - "integrity": "sha512-aROTkCLU8++yiRGVxLsuDmZsQEKO6LprlrxtAuzvtpbIFl3eIjgIf3EUxDKgomkS25R9ZzwGEdB5weCcBZlrpQ==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.3.0", - "@jest/test-result": "^26.3.0", - "@jest/transform": "^26.3.0", - "@jest/types": "^26.3.0", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.3.0", - "jest-resolve": "^26.4.0", - "jest-util": "^26.3.0", - "jest-worker": "^26.3.0", - "node-notifier": "^8.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^5.0.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "@jest/source-map": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.3.0.tgz", - "integrity": "sha512-hWX5IHmMDWe1kyrKl7IhFwqOuAreIwHhbe44+XH2ZRHjrKIh0LO5eLQ/vxHFeAfRwJapmxuqlGAEYLadDq6ZGQ==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.3.0.tgz", - "integrity": "sha512-a8rbLqzW/q7HWheFVMtghXV79Xk+GWwOK1FrtimpI5n1la2SY0qHri3/b0/1F0Ve0/yJmV8pEhxDfVwiUBGtgg==", - "dev": true, - "requires": { - "@jest/console": "^26.3.0", - "@jest/types": "^26.3.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.4.2.tgz", - "integrity": "sha512-83DRD8N3M0tOhz9h0bn6Kl6dSp+US6DazuVF8J9m21WAp5x7CqSMaNycMP0aemC/SH/pDQQddbsfHRTBXVUgog==", - "dev": true, - "requires": { - "@jest/test-result": "^26.3.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.3.0", - "jest-runner": "^26.4.2", - "jest-runtime": "^26.4.2" - } - }, - "@jest/transform": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.3.0.tgz", - "integrity": "sha512-Isj6NB68QorGoFWvcOjlUhpkT56PqNIsXKR7XfvoDlCANn/IANlh8DrKAA2l2JKC3yWSMH5wS0GwuQM20w3b2A==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.3.0", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.3.0", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.3.0", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "@jest/types": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.3.0.tgz", - "integrity": "sha512-BDPG23U0qDeAvU4f99haztXwdAg3hz4El95LkAM+tHAqqhiVzRpEGHHU8EDxT/AnxOrA65YjLBwDahdJ9pTLJQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@types/babel__core": { - "version": "7.1.10", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.10.tgz", - "integrity": "sha512-x8OM8XzITIMyiwl5Vmo2B1cR1S1Ipkyv4mdlbJjMa1lmuKvKY9FrBbEANIaMlnWn5Rf7uO+rC/VgYabNkE17Hw==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.3.tgz", - "integrity": "sha512-uCoznIPDmnickEi6D0v11SBpW0OuVqHJCa7syXqQHy5uktSCreIlt0iglsCnmvz8yCb38hGcWeseA8cWJSwv5Q==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", - "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/graceful-fs": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.3.tgz", - "integrity": "sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/node": { - "version": "14.11.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.2.tgz", - "integrity": "sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "@types/prettier": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.1.tgz", - "integrity": "sha512-2zs+O+UkDsJ1Vcp667pd3f8xearMdopz/z54i99wtRDI5KLmngk7vlrYZD0ZjKHaROR03EznlBbVY9PfAEyJIQ==", - "dev": true - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "@types/yargs": { - "version": "15.0.7", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.7.tgz", - "integrity": "sha512-Gf4u3EjaPNcC9cTu4/j2oN14nSVhr8PQ+BvBcBQHAhDZfl0bVIiLgvnRXv/dn58XhTm9UXvBpvJpDlwV65QxOA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "ajv": { - "version": "6.12.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", - "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } - } - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", - "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", - "dev": true - }, - "babel-jest": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.3.0.tgz", - "integrity": "sha512-sxPnQGEyHAOPF8NcUsD0g7hDCnvLL2XyblRBcgrzTWBB/mAIpWow3n1bEL+VghnnZfreLhFSBsFluRoK2tRK4g==", - "dev": true, - "requires": { - "@jest/transform": "^26.3.0", - "@jest/types": "^26.3.0", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.3.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "26.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.2.0.tgz", - "integrity": "sha512-B/hVMRv8Nh1sQ1a3EY8I0n4Y1Wty3NrR5ebOyVT302op+DOAau+xNEImGMsUWOC3++ZlMooCytKz+NgN8aKGbA==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz", - "integrity": "sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.3.0.tgz", - "integrity": "sha512-5WPdf7nyYi2/eRxCbVrE1kKCWxgWY4RsPEbdJWFm7QsesFGqjdkyLeu1zRkwM1cxK6EPIlNd6d2AxLk7J+t4pw==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^26.2.0", - "babel-preset-current-node-syntax": "^0.1.3" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "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-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "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" - }, - "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" - } - }, - "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 - }, - "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" - } - } - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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 - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.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 - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "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.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "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 - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "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 - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff-sequences": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.3.0.tgz", - "integrity": "sha512-5j5vdRcw3CNctePNYN0Wy2e/JbWT6cAYnXv5OuqPhDpyCGc0uLu2TK0zOCJWNB9kOIfYMSpIulRaDgIi4HJ6Ig==", - "dev": true - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emittery": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.1.tgz", - "integrity": "sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ==", - "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 - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "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 - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expect": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.4.2.tgz", - "integrity": "sha512-IlJ3X52Z0lDHm7gjEp+m76uX46ldH5VpqmU0006vqDju/285twh7zaWMRhs67VpQhBwjjMchk+p5aA0VkERCAA==", - "dev": true, - "requires": { - "@jest/types": "^26.3.0", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.4.2", - "jest-message-util": "^26.3.0", - "jest-regex-util": "^26.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "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": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "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.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "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 - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "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-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^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 - }, - "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-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "dev": true, - "optional": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "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-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "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 - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "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" - }, - "dependencies": { - "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 - }, - "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" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.4.2.tgz", - "integrity": "sha512-LLCjPrUh98Ik8CzW8LLVnSCfLaiY+wbK53U7VxnFSX7Q+kWC4noVeDvGWIFw0Amfq1lq2VfGm7YHWSLBV62MJw==", - "dev": true, - "requires": { - "@jest/core": "^26.4.2", - "import-local": "^3.0.2", - "jest-cli": "^26.4.2" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "jest-cli": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.4.2.tgz", - "integrity": "sha512-zb+lGd/SfrPvoRSC/0LWdaWCnscXc1mGYW//NP4/tmBvRPT3VntZ2jtKUONsRi59zc5JqmsSajA9ewJKFYp8Cw==", - "dev": true, - "requires": { - "@jest/core": "^26.4.2", - "@jest/test-result": "^26.3.0", - "@jest/types": "^26.3.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.4.2", - "jest-util": "^26.3.0", - "jest-validate": "^26.4.2", - "prompts": "^2.0.1", - "yargs": "^15.3.1" - } - }, - "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" - } - } - } - }, - "jest-changed-files": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.3.0.tgz", - "integrity": "sha512-1C4R4nijgPltX6fugKxM4oQ18zimS7LqQ+zTTY8lMCMFPrxqBFb7KJH0Z2fRQJvw2Slbaipsqq7s1mgX5Iot+g==", - "dev": true, - "requires": { - "@jest/types": "^26.3.0", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "dependencies": { - "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" - } - }, - "execa": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz", - "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "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 - }, - "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 - }, - "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" - } - } - } - }, - "jest-config": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.4.2.tgz", - "integrity": "sha512-QBf7YGLuToiM8PmTnJEdRxyYy3mHWLh24LJZKVdXZ2PNdizSe1B/E8bVm+HYcjbEzGuVXDv/di+EzdO/6Gq80A==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.4.2", - "@jest/types": "^26.3.0", - "babel-jest": "^26.3.0", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.3.0", - "jest-environment-node": "^26.3.0", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.4.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.4.0", - "jest-util": "^26.3.0", - "jest-validate": "^26.4.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.4.2" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "jest-diff": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.4.2.tgz", - "integrity": "sha512-6T1XQY8U28WH0Z5rGpQ+VqZSZz8EN8rZcBtfvXaOkbwxIEeRre6qnuZQlbY1AJ4MKDxQF8EkrCvK+hL/VkyYLQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.3.0", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.4.2" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.4.2.tgz", - "integrity": "sha512-p15rt8r8cUcRY0Mvo1fpkOGYm7iI8S6ySxgIdfh3oOIv+gHwrHTy5VWCGOecWUhDsit4Nz8avJWdT07WLpbwDA==", - "dev": true, - "requires": { - "@jest/types": "^26.3.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.3.0", - "pretty-format": "^26.4.2" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "jest-environment-jsdom": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.3.0.tgz", - "integrity": "sha512-zra8He2btIMJkAzvLaiZ9QwEPGEetbxqmjEBQwhH3CA+Hhhu0jSiEJxnJMbX28TGUvPLxBt/zyaTLrOPF4yMJA==", - "dev": true, - "requires": { - "@jest/environment": "^26.3.0", - "@jest/fake-timers": "^26.3.0", - "@jest/types": "^26.3.0", - "@types/node": "*", - "jest-mock": "^26.3.0", - "jest-util": "^26.3.0", - "jsdom": "^16.2.2" - } - }, - "jest-environment-node": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.3.0.tgz", - "integrity": "sha512-c9BvYoo+FGcMj5FunbBgtBnbR5qk3uky8PKyRVpSfe2/8+LrNQMiXX53z6q2kY+j15SkjQCOSL/6LHnCPLVHNw==", - "dev": true, - "requires": { - "@jest/environment": "^26.3.0", - "@jest/fake-timers": "^26.3.0", - "@jest/types": "^26.3.0", - "@types/node": "*", - "jest-mock": "^26.3.0", - "jest-util": "^26.3.0" - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true - }, - "jest-haste-map": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.3.0.tgz", - "integrity": "sha512-DHWBpTJgJhLLGwE5Z1ZaqLTYqeODQIZpby0zMBsCU9iRFHYyhklYqP4EiG73j5dkbaAdSZhgB938mL51Q5LeZA==", - "dev": true, - "requires": { - "@jest/types": "^26.3.0", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.3.0", - "jest-util": "^26.3.0", - "jest-worker": "^26.3.0", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.4.2.tgz", - "integrity": "sha512-z7H4EpCldHN1J8fNgsja58QftxBSL+JcwZmaXIvV9WKIM+x49F4GLHu/+BQh2kzRKHAgaN/E82od+8rTOBPyPA==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.3.0", - "@jest/source-map": "^26.3.0", - "@jest/test-result": "^26.3.0", - "@jest/types": "^26.3.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.4.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.4.2", - "jest-matcher-utils": "^26.4.2", - "jest-message-util": "^26.3.0", - "jest-runtime": "^26.4.2", - "jest-snapshot": "^26.4.2", - "jest-util": "^26.3.0", - "pretty-format": "^26.4.2", - "throat": "^5.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "jest-leak-detector": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.4.2.tgz", - "integrity": "sha512-akzGcxwxtE+9ZJZRW+M2o+nTNnmQZxrHJxX/HjgDaU5+PLmY1qnQPnMjgADPGCRPhB+Yawe1iij0REe+k/aHoA==", - "dev": true, - "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.4.2" - } - }, - "jest-matcher-utils": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.4.2.tgz", - "integrity": "sha512-KcbNqWfWUG24R7tu9WcAOKKdiXiXCbMvQYT6iodZ9k1f7065k0keUOW6XpJMMvah+hTfqkhJhRXmA3r3zMAg0Q==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.4.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.4.2" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "jest-message-util": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.3.0.tgz", - "integrity": "sha512-xIavRYqr4/otGOiLxLZGj3ieMmjcNE73Ui+LdSW/Y790j5acqCsAdDiLIbzHCZMpN07JOENRWX5DcU+OQ+TjTA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.3.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "jest-mock": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.3.0.tgz", - "integrity": "sha512-PeaRrg8Dc6mnS35gOo/CbZovoDPKAeB1FICZiuagAgGvbWdNNyjQjkOaGUa/3N3JtpQ/Mh9P4A2D4Fv51NnP8Q==", - "dev": true, - "requires": { - "@jest/types": "^26.3.0", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true - }, - "jest-resolve": { - "version": "26.4.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.4.0.tgz", - "integrity": "sha512-bn/JoZTEXRSlEx3+SfgZcJAVuTMOksYq9xe9O6s4Ekg84aKBObEaVXKOEilULRqviSLAYJldnoWV9c07kwtiCg==", - "dev": true, - "requires": { - "@jest/types": "^26.3.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.3.0", - "read-pkg-up": "^7.0.1", - "resolve": "^1.17.0", - "slash": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.4.2.tgz", - "integrity": "sha512-ADHaOwqEcVc71uTfySzSowA/RdxUpCxhxa2FNLiin9vWLB1uLPad3we+JSSROq5+SrL9iYPdZZF8bdKM7XABTQ==", - "dev": true, - "requires": { - "@jest/types": "^26.3.0", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.4.2" - } - }, - "jest-runner": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.4.2.tgz", - "integrity": "sha512-FgjDHeVknDjw1gRAYaoUoShe1K3XUuFMkIaXbdhEys+1O4bEJS8Avmn4lBwoMfL8O5oFTdWYKcf3tEJyyYyk8g==", - "dev": true, - "requires": { - "@jest/console": "^26.3.0", - "@jest/environment": "^26.3.0", - "@jest/test-result": "^26.3.0", - "@jest/types": "^26.3.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.4.2", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.3.0", - "jest-leak-detector": "^26.4.2", - "jest-message-util": "^26.3.0", - "jest-resolve": "^26.4.0", - "jest-runtime": "^26.4.2", - "jest-util": "^26.3.0", - "jest-worker": "^26.3.0", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "jest-runtime": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.4.2.tgz", - "integrity": "sha512-4Pe7Uk5a80FnbHwSOk7ojNCJvz3Ks2CNQWT5Z7MJo4tX0jb3V/LThKvD9tKPNVNyeMH98J/nzGlcwc00R2dSHQ==", - "dev": true, - "requires": { - "@jest/console": "^26.3.0", - "@jest/environment": "^26.3.0", - "@jest/fake-timers": "^26.3.0", - "@jest/globals": "^26.4.2", - "@jest/source-map": "^26.3.0", - "@jest/test-result": "^26.3.0", - "@jest/transform": "^26.3.0", - "@jest/types": "^26.3.0", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.4.2", - "jest-haste-map": "^26.3.0", - "jest-message-util": "^26.3.0", - "jest-mock": "^26.3.0", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.4.0", - "jest-snapshot": "^26.4.2", - "jest-util": "^26.3.0", - "jest-validate": "^26.4.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.3.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "jest-serializer": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.3.0.tgz", - "integrity": "sha512-IDRBQBLPlKa4flg77fqg0n/pH87tcRKwe8zxOVTWISxGpPHYkRZ1dXKyh04JOja7gppc60+soKVZ791mruVdow==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.4.2.tgz", - "integrity": "sha512-N6Uub8FccKlf5SBFnL2Ri/xofbaA68Cc3MGjP/NuwgnsvWh+9hLIR/DhrxbSiKXMY9vUW5dI6EW1eHaDHqe9sg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.3.0", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.4.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.4.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.3.0", - "jest-matcher-utils": "^26.4.2", - "jest-message-util": "^26.3.0", - "jest-resolve": "^26.4.0", - "natural-compare": "^1.4.0", - "pretty-format": "^26.4.2", - "semver": "^7.3.2" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "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" - } - } - } - }, - "jest-util": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.3.0.tgz", - "integrity": "sha512-4zpn6bwV0+AMFN0IYhH/wnzIQzRaYVrz1A8sYnRnj4UXDXbOVtWmlaZkO9mipFqZ13okIfN87aDoJWB7VH6hcw==", - "dev": true, - "requires": { - "@jest/types": "^26.3.0", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "jest-validate": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.4.2.tgz", - "integrity": "sha512-blft+xDX7XXghfhY0mrsBCYhX365n8K5wNDC4XAcNKqqjEzsRUSXP44m6PL0QJEW2crxQFLLztVnJ4j7oPlQrQ==", - "dev": true, - "requires": { - "@jest/types": "^26.3.0", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.4.2" - }, - "dependencies": { - "camelcase": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz", - "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==", - "dev": true - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "jest-watcher": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.3.0.tgz", - "integrity": "sha512-XnLdKmyCGJ3VoF6G/p5ohbJ04q/vv5aH9ENI+i6BL0uu9WWB6Z7Z2lhQQk0d2AVZcRGp1yW+/TsoToMhBFPRdQ==", - "dev": true, - "requires": { - "@jest/test-result": "^26.3.0", - "@jest/types": "^26.3.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.3.0", - "string-length": "^4.0.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "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" - } - } - } - }, - "jest-worker": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz", - "integrity": "sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "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 - }, - "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" - } - } - } - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "acorn": "^7.1.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.2.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", - "domexception": "^2.0.1", - "escodegen": "^1.14.1", - "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", - "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0", - "ws": "^7.2.3", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "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" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.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 - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "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 - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", - "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", - "dev": true, - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true, - "optional": true - }, - "uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==", - "dev": true, - "optional": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "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-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "p-each-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", - "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "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": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "pretty-format": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.4.2.tgz", - "integrity": "sha512-zK6Gd8zDsEiVydOCGLkoBoZuqv8VTiHyAbKznXe/gaph/DAeZOmit9yMfgIz5adIgAMMs5XfoYSwAX3jcCO1tA==", - "dev": true, - "requires": { - "@jest/types": "^26.3.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - } - } - }, - "prompts": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", - "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.4" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "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 - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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 - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "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.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.2.tgz", - "integrity": "sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "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 - }, - "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" - } - } - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "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" - } - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "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" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", - "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-to-istanbul": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-5.0.1.tgz", - "integrity": "sha512-mbDNjuDajqYe3TXFk5qxcQy8L1msXNE37WTlLoqqpBfRsimbNcrlhQlDPntmECEcUvdC+AQ8CyMMf6EUx1r74Q==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "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 - } - } - }, - "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" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.3.0.tgz", - "integrity": "sha512-BQRf/ej5Rp3+n7k0grQXZj9a1cHtsp4lqj01p59xBWFKdezR8sO37XnpafwNqiFac/v2Il12EIMjX/Y4VZtT8Q==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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 - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", - "dev": true - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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 - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } -} diff --git a/packages/web3-eth2-beaconchain/package.json b/packages/web3-eth2-beaconchain/package.json deleted file mode 100644 index f25f8416ffb..00000000000 --- a/packages/web3-eth2-beaconchain/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "web3-eth2-beaconchain", - "version": "1.3.0", - "description": "Web3 ETH2 Beacon chain API wrappers.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-eth2-beaconchain", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types", - "test": "jest", - "tsc": "babel src --out-dir lib --extensions \".ts,.tsx\" --source-maps inline" - }, - "main": "lib/index.js", - "dependencies": { - "web3-eth2-core": "^1.3.0" - }, - "devDependencies": { - "@chainsafe/lodestar-types": "^0.11.0", - "@types/jest": "^26.0.14", - "@types/node": "^14.11.2", - "dtslint": "^3.4.1", - "jest": "^26.4.2", - "ts-jest": "^26.4.1", - "typescript": "^4.0.3" - } -} diff --git a/packages/web3-eth2-beaconchain/src/index.ts b/packages/web3-eth2-beaconchain/src/index.ts deleted file mode 100644 index 7859a21ddc1..00000000000 --- a/packages/web3-eth2-beaconchain/src/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -// @ts-ignore - types not full implemented yet -import { ETH2Core } from 'web3-eth2-core' -import { DefaultSchema } from './schema' - -import { IETH2BeaconChain } from '../types/index' -// @ts-ignore - types not full implemented yet -import { IBaseAPISchema } from 'web3-eth2-core' -// @ts-ignore - types not full implemented yet -import { ETH2BaseOpts } from 'web3-eth2-core' - -// @ts-ignore - ETH2BeaconChain incorrectly implements interface IETH2BeaconChain -export class ETH2BeaconChain extends ETH2Core implements IETH2BeaconChain { - constructor( - provider: string, - schema: IBaseAPISchema = DefaultSchema, - opts: ETH2BaseOpts = { protectProvider: true }) { - super(provider, schema, opts) - } -} diff --git a/packages/web3-eth2-beaconchain/src/schema.ts b/packages/web3-eth2-beaconchain/src/schema.ts deleted file mode 100644 index 5e63aabe1a0..00000000000 --- a/packages/web3-eth2-beaconchain/src/schema.ts +++ /dev/null @@ -1,206 +0,0 @@ -import { IBaseAPISchema } from '../../web3-eth2-core/src/schema' - -export const DefaultSchema: IBaseAPISchema = { - packageName: 'eth2-beaconchain', - routePrefix: '/eth/v1/beacon/', - methods: [ - { - name: 'getGenesis', - route: 'genesis', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to get genesis block:' - }, - { - name: 'getHashRoot', - route: 'states/${stateId}/root', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to get state hash tree root:' - }, - { - name: 'getForkData', - route: 'states/${stateId}/fork', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to get fork object for state:' - }, - { - name: 'getFinalityCheckpoint', - route: 'states/${stateId}/finality_checkpoints', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to get state finality checkpoints:' - }, - { - name: 'getValidators', - route: 'states/${stateId}/validators', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to get state validators:' - }, - { - name: 'getValidatorById', - route: 'states/${stateId}/validators/${validatorId}', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to validator from state by id:' - }, - { - name: 'getValidatorBalances', - route: 'states/${stateId}/validator_balances', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to validator balances from state:' - }, - { - name: 'getEpochCommittees', - route: 'states/${stateId}/committees/${epoch}', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to committees for epoch:' - }, - { - name: 'getBlockHeaders', - route: 'headers', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to block headers:' - }, - { - name: 'getBlockHeader', - route: 'headers/${blockId}', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to get block header:' - }, - { - name: 'publishSignedBlock', - route: 'blocks', - restMethod: 'post', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to publish signed block:' - }, - { - name: 'getBlock', - route: 'blocks/${blockId}', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to get block:' - }, - { - name: 'getBlockRoot', - route: 'blocks/${blockId}/root', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to get block root:' - }, - { - name: 'getBlockAttestations', - route: 'blocks/${blockId}/attestations', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to block attestations:' - }, - { - name: 'getAttestationsFromPool', - route: 'pool/attestations', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to attestations from operations pool:' - }, - { - name: 'submitAttestation', - route: 'pool/attestations', - restMethod: 'post', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to submit attestations to operations pool:' - }, - { - name: 'getAttesterSlashings', - route: 'pool/attester_slashings', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to get attester slashings from operations pool:' - }, - { - name: 'submitAttesterSlashings', - route: 'pool/attester_slashings', - restMethod: 'post', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to submit attester slashings to operations pool:' - }, - { - name: 'getProposerSlashings', - route: 'pool/proposer_slashings', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to get proposer slashings from operations pool:' - }, - { - name: 'submitProposerSlashings', - route: 'pool/proposer_slashings', - restMethod: 'post', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to submit proposer slashings to operations pool:' - }, - { - name: 'getSignedVoluntaryExits', - route: 'pool/voluntary_exits', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to get signed voluntary exits from operations pool' - }, - { - name: 'submitVoluntaryExit', - route: 'pool/voluntary_exits', - restMethod: 'post', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Failed to submit voluntary exit to operations pool:' - }, - ] -} diff --git a/packages/web3-eth2-beaconchain/test/axiosMock.ts b/packages/web3-eth2-beaconchain/test/axiosMock.ts deleted file mode 100644 index 8549f501e7f..00000000000 --- a/packages/web3-eth2-beaconchain/test/axiosMock.ts +++ /dev/null @@ -1,3 +0,0 @@ -import jest from 'jest' - -export const get = jest.fn(() => Promise.resolve({ data: {} })) diff --git a/packages/web3-eth2-beaconchain/test/constructor.test.ts b/packages/web3-eth2-beaconchain/test/constructor.test.ts deleted file mode 100644 index 2ccc4ac2f7c..00000000000 --- a/packages/web3-eth2-beaconchain/test/constructor.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ETH2BeaconChain } from '../src/index' - -const provider = 'http://127.0.0.1:9596' -const providerSuffix = '/eth/v1/beacon/' - -it('constructs a ETH2BeaconChain instance with expected properties', () => { - const eth2BeaconChain = new ETH2BeaconChain(provider) - - // @ts-ignore - types not full implemented yet - expect(eth2BeaconChain.name).toBe('eth2-beaconchain') - // @ts-ignore - types not full implemented yet - expect(eth2BeaconChain.provider).toBe(`${provider}${providerSuffix}`) - // @ts-ignore - types not full implemented yet - expect(eth2BeaconChain.protectProvider) -}) diff --git a/packages/web3-eth2-beaconchain/test/schemaMethods.test.ts b/packages/web3-eth2-beaconchain/test/schemaMethods.test.ts deleted file mode 100644 index 6df3f5c55f1..00000000000 --- a/packages/web3-eth2-beaconchain/test/schemaMethods.test.ts +++ /dev/null @@ -1,358 +0,0 @@ -import { ETH2BeaconChain } from '../src/index' - -// Jest doesn't have a native method to test if value is boolean -expect.extend({ - toBeBoolean(received) { - return typeof received === 'boolean' ? { - message: () => `expected ${received} to be boolean`, - pass: true - } : { - message: () => `expected ${received} to be boolean`, - pass: false - } - } -}) - -let eth2BeaconChain: any // should be ETH2BeaconChain but types aren't implemented yet - -beforeAll(() => { - // const provider = 'http://127.0.0.1:9596' // default port for Lodestar - const provider = 'http://127.0.0.1:5052' // default port for Lighthouse - eth2BeaconChain = new ETH2BeaconChain(provider) -}) - -it('getGenesis', async () => { - const expectedResponse = { - genesis_validators_root: expect.stringMatching(/0x[a-f|A-F|\d]{64}/), - genesis_time: expect.stringMatching(/\d{10}/), - genesis_fork_version: expect.stringMatching(/0x[a-f|A-F|\d]{8}/) - } - - const response = await eth2BeaconChain.getGenesis() - expect(response).toMatchObject(expectedResponse) -}) - -it('getHashRoot', async () => { - const routeParameters = { stateId: 'head' } - const expectedResponse = { - root: expect.stringMatching(/0x[a-f|A-F|\d]{64}/), - } - - const response = await eth2BeaconChain.getHashRoot(routeParameters) - expect(response).toMatchObject(expectedResponse) -}) - -it('getForkData', async () => { - const routeParameters = { stateId: 'head' } - const expectedResponse = { - current_version: expect.stringMatching(/0x[a-f|A-F|\d]{8}/), - epoch: expect.stringMatching(/\d/), - previous_version: expect.stringMatching(/0x[a-f|A-F|\d]{8}/), - } - - const response = await eth2BeaconChain.getForkData(routeParameters) - expect(response).toMatchObject(expectedResponse) -}) - -it('getFinalityCheckpoint', async () => { - const routeParameters = { stateId: 'head' } - const expectedResponse = { - current_justified: { - epoch: expect.stringMatching(/\d+/), - root: expect.stringMatching(/0x[a-f|A-F|\d]{64}/), - }, - finalized: { - epoch: expect.stringMatching(/\d+/), - root: expect.stringMatching(/0x[a-f|A-F|\d]{64}/), - }, - previous_justified: { - epoch: expect.stringMatching(/\d+/), - root: expect.stringMatching(/0x[a-f|A-F|\d]{64}/), - }, - } - - const response = await eth2BeaconChain.getFinalityCheckpoint(routeParameters) - expect(response).toMatchObject(expectedResponse) -}) - -it('getValidators', async () => { - const routeParameters = { stateId: 'genesis' } - const expectedResponse = { - balance: expect.stringMatching(/\d+/), - index: expect.stringMatching(/\d+/), - status: expect.stringMatching(/pending_initialized|pending_queued|active_ongoing|active_exiting|active_slashed|exited_unslashed|exited_slashed|withdrawal_possible|withdrawal_done|active|pending|exited|withdrawal/), - validator: { - activation_eligibility_epoch: expect.stringMatching(/\d+/), - activation_epoch: expect.stringMatching(/\d+/), - effective_balance: expect.stringMatching(/\d+/), - exit_epoch: expect.stringMatching(/\d+/), - pubkey: expect.stringMatching(/0x[a-f|A-F|\d]{96}/), - slashed: false, - withdrawable_epoch: expect.stringMatching(/\d+/), - withdrawal_credentials: expect.stringMatching(/0x[a-f|A-F|\d]{64}/), - } - } - - const response = await eth2BeaconChain.getValidators(routeParameters) - expect(response[0]).toMatchObject(expectedResponse) -}) - -it('getValidatorById', async () => { - const routeParameters = { - stateId: 'head', - validatorId: '0x96fb9db98b540d8500711c45fcb3608cc3fd75212457976f5b11f9f93c26701e68f846a9751e3dc2d92fa3d972a8c6b0' - } - const expectedResponse = { - balance: expect.stringMatching(/\d+/), - index: expect.stringMatching(/\d+/), - status: expect.stringMatching(/pending_initialized|pending_queued|active_ongoing|active_exiting|active_slashed|exited_unslashed|exited_slashed|withdrawal_possible|withdrawal_done|active|pending|exited|withdrawal/), - validator: { - activation_eligibility_epoch: expect.stringMatching(/\d+/), - activation_epoch: expect.stringMatching(/\d+/), - effective_balance: expect.stringMatching(/\d+/), - exit_epoch: expect.stringMatching(/\d+/), - pubkey: expect.stringMatching(/0x[a-f|A-F|\d]{96}/), - slashed: false, - withdrawable_epoch: expect.stringMatching(/\d+/), - withdrawal_credentials: expect.stringMatching(/0x[a-f|A-F|\d]{64}/), - } - } - - const response = await eth2BeaconChain.getValidatorById(routeParameters) - expect(response).toMatchObject(expectedResponse) -}) - -it('getValidatorBalances', async () => { - const routeParameters = { - stateId: 'head', - } - const expectedResponse = { - balance: expect.stringMatching(/\d+/), - index: expect.stringMatching(/\d+/) - } - - const response = await eth2BeaconChain.getValidatorBalances(routeParameters) - expect(response[0]).toMatchObject(expectedResponse) -}) - -it('getEpochCommittees', async () => { - const routeParameters = { - stateId: 'head', - epoch: '' - } - const queryParameters = { - index: '1', - slot: '1' - } - const expectedResponse = { - index: expect.stringMatching(/\d+/), - slot: expect.stringMatching(/\d+/), - validators: expect.anything() // Only tests if not null or undefined - } - - const response = await eth2BeaconChain.getEpochCommittees(routeParameters, queryParameters) - expect(response[0]).toMatchObject(expectedResponse) -}) - -it('getBlockHeaders', async () => { - const expectedResponse = [ - { - root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - // @ts-ignore - method is added at top of file - canonical: expect.toBeBoolean(), - header: { - message: { - slot: expect.stringMatching(/\d/), - proposer_index: expect.stringMatching(/\d/), - parent_root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - state_root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - body_root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - }, - signature: expect.stringMatching(/0x[a-f|A-F|\d]{192}/), - } - } - ] - - const response = await eth2BeaconChain.getBlockHeaders() - expect(response).toMatchObject(expectedResponse) -}) - -it('getBlockHeader', async () => { - const routeParameters = { - blockId: 'head', - } - const expectedResponse = { - root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - // @ts-ignore - method is added at top of file - canonical: expect.toBeBoolean(), - header: { - message: { - slot: expect.stringMatching(/\d/), - proposer_index: expect.stringMatching(/\d/), - parent_root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - state_root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - body_root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - }, - signature: expect.stringMatching(/0x[a-f|A-F|\d]{192}/), - } - } - - const response = await eth2BeaconChain.getBlockHeader(routeParameters) - expect(response).toMatchObject(expectedResponse) -}) - -/** - * @TODO Doesn't actually test publishing signed block, but not sure how to go about - * setting this up in a test environment to test actual publishing of blocks - */ -it('publishSignedBlock', async () => { - const response = eth2BeaconChain.publishSignedBlock() - await expect(response).rejects.toThrow('Failed to publish signed block: Request failed with status code 400') -}) - -it('getBlock', async () => { - const routeParameters = { - blockId: 'head', - } - const expectedResponse = { - root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - // @ts-ignore - method is added at top of file - canonical: expect.toBeBoolean(), - header: { - message: { - slot: expect.stringMatching(/\d/), - proposer_index: expect.stringMatching(/\d/), - parent_root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - state_root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - body_root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - }, - signature: expect.stringMatching(/0x[a-f|A-F|\d]{192}/), - } - } - - const response = await eth2BeaconChain.getBlockHeader(routeParameters) - expect(response).toMatchObject(expectedResponse) -}) - -it('getBlockRoot', async () => { - const routeParameters = { - blockId: 'head', - } - const expectedResponse = { - root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/) - } - - const response = await eth2BeaconChain.getBlockRoot(routeParameters) - expect(response).toMatchObject(expectedResponse) -}) - -it('getBlockAttestations', async () => { - const routeParameters = { - blockId: 'head', - } - const expectedResponse = { - aggregation_bits: expect.stringMatching(/0x[a-f|A-F|\d]{2}/), - signature: expect.stringMatching(/0x[a-f|A-F|\d]{192}/), - data: { - slot: expect.stringMatching(/\d/), - index: expect.stringMatching(/\d/), - beacon_block_root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - source: { - epoch: expect.stringMatching(/\d/), - root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/) - }, - target: { - epoch: expect.stringMatching(/\d/), - root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/) - } - } - } - - const response = await eth2BeaconChain.getBlockAttestations(routeParameters) - expect(response[0]).toMatchObject(expectedResponse) -}) - -/** - * @TODO queryParameters don't seem to be taken into consideration - */ -it('getAttestationsFromPool', async () => { - const queryParameters = { - slot: 1, - committee_index: 1 - } - // const expectedResponse = { - // aggregation_bits: expect.stringMatching(/0x[a-f|A-F|\d]{2}/), - // signature: expect.stringMatching(/0x[a-f|A-F|\d]{192}/), - // data: { - // slot: expect.stringMatching(/\d/), - // index: expect.stringMatching(/\d/), - // beacon_block_root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/), - // source: { - // epoch: expect.stringMatching(/\d/), - // root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/) - // }, - // target: { - // epoch: expect.stringMatching(/\d/), - // root: expect.stringMatching(/0x[a-f|A-F|\d]{62}/) - // } - // } - // } - const expectedResponse: any[] = [] - - const response = await eth2BeaconChain.getAttestationsFromPool(null, queryParameters) - expect(response).toMatchObject(expectedResponse) -}) - -/** - * @TODO Doesn't actually test submitting attestation, but not sure how to go about - * setting this up in a test environment to test actual submission - */ -it('submitAttestation', async () => { - const response = eth2BeaconChain.submitAttestation() - await expect(response).rejects.toThrow('Failed to submit attestations to operations pool: Request failed with status code 400') -}) - -it('getAttesterSlashings', async () => { - const expectedResponse: any[] = [] - const response = await eth2BeaconChain.getAttesterSlashings() - expect(response).toMatchObject(expectedResponse) -}) - -/** - * @TODO Doesn't actually test submitting attester slashings, but not sure how to go about - * setting this up in a test environment to test actual submission - */ -it('submitAttesterSlashings', async () => { - const response = eth2BeaconChain.submitAttesterSlashings() - await expect(response).rejects.toThrow('Failed to submit attester slashings to operations pool: Request failed with status code 400') -}) - -it('getProposerSlashings', async () => { - const expectedResponse: any[] = [] - const response = await eth2BeaconChain.getProposerSlashings() - expect(response).toMatchObject(expectedResponse) -}) - -/** - * @TODO Doesn't actually test submitting proposer slashings, but not sure how to go about - * setting this up in a test environment to test actual submission - */ -it('submitProposerSlashings', async () => { - const response = eth2BeaconChain.submitProposerSlashings() - await expect(response).rejects.toThrow('Failed to submit proposer slashings to operations pool: Request failed with status code 400') -}) - -it('getSignedVoluntaryExits', async () => { - const expectedResponse: any[] = [] - const response = await eth2BeaconChain.getSignedVoluntaryExits() - expect(response).toMatchObject(expectedResponse) -}) - -/** - * @TODO Doesn't actually test submitting exit, but not sure how to go about - * setting this up in a test environment to test actual submission - */ -it('submitVoluntaryExit', async () => { - const response = eth2BeaconChain.submitVoluntaryExit() - await expect(response).rejects.toThrow('Failed to submit voluntary exit to operations pool: Request failed with status code 400') -}) diff --git a/packages/web3-eth2-beaconchain/tsconfig.json b/packages/web3-eth2-beaconchain/tsconfig.json deleted file mode 100644 index 68084889aeb..00000000000 --- a/packages/web3-eth2-beaconchain/tsconfig.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "compilerOptions": { - /* Basic Options */ - "target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ - // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "lib", /* Redirect output structure to the directory. */ - // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ - "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - - /* Source Map Options */ - // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - /* Advanced Options */ - // "declarationDir": "lib" /* Output directory for generated declaration files. */ - } -} \ No newline at end of file diff --git a/packages/web3-eth2-beaconchain/types/index.d.ts b/packages/web3-eth2-beaconchain/types/index.d.ts deleted file mode 100644 index 51356bca690..00000000000 --- a/packages/web3-eth2-beaconchain/types/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Genesis } from '@chainsafe/lodestar-types' - -export interface IETH2BeaconChain { - getGenesis(): Promise - getBlockHeader(): Promise -} diff --git a/packages/web3-eth2-beaconchain/types/tsconfig.json b/packages/web3-eth2-beaconchain/types/tsconfig.json deleted file mode 100644 index 812242a77b5..00000000000 --- a/packages/web3-eth2-beaconchain/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-eth2-beaconchain": ["."] - } - } -} diff --git a/packages/web3-eth2-beaconchain/types/tslint.json b/packages/web3-eth2-beaconchain/types/tslint.json deleted file mode 100644 index 0f8b285b7e7..00000000000 --- a/packages/web3-eth2-beaconchain/types/tslint.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false, - "unified-signatures": false, - "no-redundant-jsdoc": false, - "interface-name": [true, "always-prefix"] - } -} diff --git a/packages/web3-eth2-core/jest.config.js b/packages/web3-eth2-core/jest.config.js deleted file mode 100644 index a5586a60e26..00000000000 --- a/packages/web3-eth2-core/jest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - roots: ['/test'], - transform: { - '^.+\\.tsx?$': 'ts-jest', - }, - testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$', - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], - } \ No newline at end of file diff --git a/packages/web3-eth2-core/package-lock.json b/packages/web3-eth2-core/package-lock.json deleted file mode 100644 index f3301960bda..00000000000 --- a/packages/web3-eth2-core/package-lock.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "web3-eth2-core", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/node": { - "version": "14.11.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.8.tgz", - "integrity": "sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw==", - "dev": true - }, - "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", - "dev": true - } - } -} diff --git a/packages/web3-eth2-core/package.json b/packages/web3-eth2-core/package.json deleted file mode 100644 index 5b78115d8d8..00000000000 --- a/packages/web3-eth2-core/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "web3-eth2-core", - "version": "1.3.0", - "description": "Web3 ETH2 core tools for sub-packages. This is an internal package.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-eth2-core", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types", - "test": "jest", - "tsc": "tsc -b tsconfig.json" - }, - "main": "lib/index.js", - "dependencies": { - "axios": "^0.20.0" - }, - "devDependencies": { - "@types/jest": "^26.0.14", - "@types/node": "^14.11.8", - "dtslint": "^3.4.1", - "jest": "^26.5.3", - "ts-jest": "^26.4.1", - "typescript": "^3.9.5" - } -} diff --git a/packages/web3-eth2-core/src/index.ts b/packages/web3-eth2-core/src/index.ts deleted file mode 100644 index 921b03bd370..00000000000 --- a/packages/web3-eth2-core/src/index.ts +++ /dev/null @@ -1,84 +0,0 @@ -import Axios, {AxiosInstance} from 'axios' - -Axios.defaults.adapter = require('axios/lib/adapters/http'); - -import { ETH2BaseOpts, ETH2Function } from '../types/index' -import { IBaseAPISchema } from './schema' - -export class ETH2Core { - private _httpClient: AxiosInstance - - [ key: string ]: ETH2Function | any; - - name: string - provider: string - protectProvider: boolean // Protects from global overwrite when using .use functionality - - constructor(provider: string, schema: IBaseAPISchema, opts: ETH2BaseOpts = {}) { - this.name = schema.packageName - this.setProvider(`${provider}${schema.routePrefix}`) - this.protectProvider = opts.protectProvider || false - this.buildAPIWrappersFromSchema(schema) - } - - static createHttpClient(baseUrl: string): AxiosInstance { - try { - return Axios.create({ - baseURL: baseUrl - }) - } catch (error) { - throw new Error(`Failed to create HTTP client: ${error.message}`) - } - } - - setProvider(provider: string) { - try { - if (!provider || typeof provider !== 'string' || !/^http(s)?:\/\//i.test(provider)) { - throw new Error(`Invalid HTTP(S) provider: ${provider}`) - } - - this._httpClient = ETH2Core.createHttpClient(provider) - this.provider = provider - } catch (error) { - throw new Error(`Failed to set provider: ${error.message}`) - } - } - - private routeBuilder(rawUrl: string, parameters: { [ key: string]: string }): string { - try { - let computedRoute = rawUrl - - // Find all: ${valuesWeWant} in rawUrl, returns array with only valuesWeWant - const foundIdentifiers = rawUrl.match(/(?<=\$\{).*?(?=\})/gm) // Matches ${valueWeWant}, but doesn't include ${} - if (foundIdentifiers !== null) { - for (const foundIdentifier of foundIdentifiers) { - if (parameters[foundIdentifier] === undefined) throw new Error(`The parameter ${foundIdentifier} was not provided`) - computedRoute = computedRoute.replace(`\${${foundIdentifier}}`, parameters[foundIdentifier]) - } - } - - return computedRoute - } catch (error) { - throw new Error(`Failed to build route: ${error.message}`) - } - } - - private buildAPIWrappersFromSchema(schema: IBaseAPISchema) { - for (const method of schema.methods) { - this[method.name] = async (routeParameters: any, queryParameters: any = {}): Promise => { - try { - if (method.inputFormatter) queryParameters = method.inputFormatter(queryParameters) - - const computedRoute = this.routeBuilder(method.route, routeParameters) - let {data} = await this._httpClient[method.restMethod](computedRoute, { params: queryParameters }) - if (data.data) data = data.data - - if (method.outputFormatter) data = method.outputFormatter(data) - return data - } catch (error) { - throw new Error(`${method.errorPrefix} ${error.message}`) - } - } - } - } -} diff --git a/packages/web3-eth2-core/src/schema.ts b/packages/web3-eth2-core/src/schema.ts deleted file mode 100644 index 1378ea4d1b1..00000000000 --- a/packages/web3-eth2-core/src/schema.ts +++ /dev/null @@ -1,16 +0,0 @@ -export interface IBaseAPISchema { - packageName: string, - routePrefix: string, - methods: IBaseAPIMethodSchema[] -} - -export interface IBaseAPIMethodSchema { - notImplemented?: true, - name: string, - route: string, - restMethod: string - inputFormatter: any, - outputFormatter: any, - errors: any - errorPrefix: string -} diff --git a/packages/web3-eth2-core/test/constructor.test.ts b/packages/web3-eth2-core/test/constructor.test.ts deleted file mode 100644 index 598a49faebb..00000000000 --- a/packages/web3-eth2-core/test/constructor.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { ETH2Core } from '../src/index' - -const provider = 'http://127.0.0.1:9596' -const testAPISchema = { - packageName: 'testValue', - routePrefix: '/test/route/', - methods: [ - { - name: 'testMethod', - route: 'additional/route', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Test error prefix:' - } - ] -} - -it('constructs a ETH2Core instance with expected properties', () => { - const eth2Core = new ETH2Core(provider, testAPISchema, { protectProvider: true }) - - expect(eth2Core.name).toBe(testAPISchema.packageName) - expect(eth2Core.provider).toBe(`${provider}${testAPISchema.routePrefix}`) - expect(eth2Core.protectProvider) - expect(eth2Core.testMethod).toBeDefined() -}) diff --git a/packages/web3-eth2-core/test/routeBuild.test.ts b/packages/web3-eth2-core/test/routeBuild.test.ts deleted file mode 100644 index 829dc4d7cb2..00000000000 --- a/packages/web3-eth2-core/test/routeBuild.test.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { ETH2Core } from '../src/index' - -const provider = 'http://127.0.0.1:9596' -const testAPISchema = { - packageName: 'testValue', - routePrefix: '/test/route/', - methods: [ - { - name: 'testMethod', - route: 'additional/route/${replaceMe}', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Test error prefix:' - }, - { - name: 'testMethod2', - route: 'additional/route', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Test error prefix:' - }, - { - name: 'testMethod3', - route: '${replaceMe1}/foo/${replaceMe2}/${replaceMe3}/bar/${replaceMe4}', - restMethod: 'get', - inputFormatter: null, - outputFormatter: null, - errors: null, - errorPrefix: 'Test error prefix:' - } - ] -} - -let eth2Core - -beforeAll(() => { - eth2Core = new ETH2Core(provider, testAPISchema, { protectProvider: true }) -}) - -it('Should build expectedComputedRoute with 1 parameter', () => { - const routeParameter = { replaceMe: 'testValue' } - const expectedComputedRoute = `additional/route/${routeParameter.replaceMe}` - const computedRoute = eth2Core.routeBuilder(testAPISchema.methods[0].route, routeParameter) - expect(computedRoute).toBe(expectedComputedRoute) -}) - -it('Should throw missing parameter error', () => { - const routeParameter = {} - expect(() => { - eth2Core.routeBuilder(testAPISchema.methods[0].route, routeParameter) - }).toThrow('Failed to build route: The parameter replaceMe was not provided') -}) - -it('Should build expectedComputedRoute with 0 parameters', () => { - const routeParameter = {} - const expectedComputedRoute = testAPISchema.methods[1].route - const computedRoute = eth2Core.routeBuilder(testAPISchema.methods[1].route, routeParameter) - expect(computedRoute).toBe(expectedComputedRoute) -}) - -it('Should build expectedComputedRoute with 4 parameters', () => { - const routeParameters = { - replaceMe1: 'testValue', - replaceMe2: 'testValue2', - replaceMe3: 'testValue3', - replaceMe4: 'testValue4' - } - const expectedComputedRoute = `${routeParameters.replaceMe1}/foo/${routeParameters.replaceMe2}/${routeParameters.replaceMe3}/bar/${routeParameters.replaceMe4}` - const computedRoute = eth2Core.routeBuilder(testAPISchema.methods[2].route, routeParameters) - expect(computedRoute).toBe(expectedComputedRoute) -}) diff --git a/packages/web3-eth2-core/tsconfig.json b/packages/web3-eth2-core/tsconfig.json deleted file mode 100644 index f766506b599..00000000000 --- a/packages/web3-eth2-core/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "src" - ] - } \ No newline at end of file diff --git a/packages/web3-eth2-core/types/index.d.ts b/packages/web3-eth2-core/types/index.d.ts deleted file mode 100644 index 0d190b4f52c..00000000000 --- a/packages/web3-eth2-core/types/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface ETH2BaseOpts { - protectProvider?: boolean -} - -export type ETH2Function = (...args: any[]) => Promise; diff --git a/packages/web3-eth2-core/types/tsconfig.json b/packages/web3-eth2-core/types/tsconfig.json deleted file mode 100644 index 8515b4d84ea..00000000000 --- a/packages/web3-eth2-core/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-eth2-core": ["."] - } - } -} diff --git a/packages/web3-eth2-core/types/tslint.json b/packages/web3-eth2-core/types/tslint.json deleted file mode 100644 index 2a4469808b0..00000000000 --- a/packages/web3-eth2-core/types/tslint.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false, - "unified-signatures": false, - "no-redundant-jsdoc": false - } -} diff --git a/packages/web3-net/.eslintignore b/packages/web3-net/.eslintignore new file mode 100644 index 00000000000..e3d7e665285 --- /dev/null +++ b/packages/web3-net/.eslintignore @@ -0,0 +1,4 @@ +dist +lib +jest.config.js +.eslintrc.js diff --git a/packages/web3-net/.eslintrc.js b/packages/web3-net/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-net/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-net/.gitignore b/packages/web3-net/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-net/.npmignore b/packages/web3-net/.npmignore new file mode 100644 index 00000000000..0b1a9d71c23 --- /dev/null +++ b/packages/web3-net/.npmignore @@ -0,0 +1,26 @@ +.babelrc +.eslintignore +.eslintrc.json +.eslintrc.js +.gitignore +.lintstagedrc.json +.nycrc +.prettierrc.json +.prettierignore +cypress.json +index.html +Jenkinsfile* +*.log + +.nyc_output/ +coverage/ +benchmark/ +.coverage/ +cypress/ +fixtures/ +tmp/ +logs/ +test/ +scripts/ +browsertest/ +examples/ diff --git a/packages/web3-net/.prettierignore b/packages/web3-net/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-net/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-net/.prettierrc.json b/packages/web3-net/.prettierrc.json new file mode 100644 index 00000000000..7b23ef55098 --- /dev/null +++ b/packages/web3-net/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": true, + "arrowParens": "avoid" +} diff --git a/packages/web3-net/CHANGELOG.md b/packages/web3-net/CHANGELOG.md new file mode 100644 index 00000000000..dd6227ecdd8 --- /dev/null +++ b/packages/web3-net/CHANGELOG.md @@ -0,0 +1,144 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [4.0.1-alpha.1] + +### Added + +- `web3-rpc-methods` dependency (#5441) + +### Changed + +- `Web3NetAPI` is now imported from `web3-types` instead of `web3_net_api.ts` (#5441) +- Replace the imported methods from `rpc_methods.ts` with `netRpcMethods` imports from `web3-rpc-methods` (#5441) + +### Removed + +- `rpcMethods` export, these methods are now exported via `web3-rpc-methods` as `netRpcMethods` (#5441) +- `Web3NetAPI` export, now exported via `web3-types` as `Web3NetAPI` (#5441) + +## [4.0.1-alpha.2] + +### Changed + +- Updated Web3.js dependencies (#5664) + +## [4.0.1-alpha.3] + +### Changed + +- Updated dependencies (#5725) + +## [4.0.1-alpha.4] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +## [4.0.1-alpha.5] + +### Changed + +- web3.js dependencies (#5757) + +## [4.0.1-rc.0] + +### Changed + +- Updated dependencies (#5912) + +## [4.0.1-rc.1] + +### Added + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +## [4.0.1-rc.2] + +### Changed + +- Dependencies updated + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Changed + +- Dependencies updated + +## [4.0.3] + +### Changed + +- Dependencies updated + +## [4.0.4] + +### Changed + +- Dependencies updated + +## [4.0.5] + +### Changed + +- Dependencies updated + +## [4.0.6] + +### Changed + +- Dependencies updated + +## [4.0.7] + +### Changed + +- Dependencies updated + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-net/README.md b/packages/web3-net/README.md index 22d4dec312f..6e19cf6a079 100644 --- a/packages/web3-net/README.md +++ b/packages/web3-net/README.md @@ -1,38 +1,59 @@ -# web3-net +

+ web3.js +

-[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +# web3.js - Net -This is a sub-package of [web3.js][repo]. +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] -This is the net package used in other [web3.js][repo] packages. +This is a sub-package of [web3.js][repo]. -Please read the [documentation][docs] for more. +`web3-net` package allows to interact with an Ethereum node’s network properties. ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3-net) or using [Yarn](https://yarnpkg.com/package/web3-net) + +### Using NPM ```bash npm install web3-net ``` -## Usage +### Using Yarn -```js -const Web3Net = require('web3-net'); - -const net = new Web3Net('ws://localhost:8546'); +```bash +yarn add web3-net ``` -## Types +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts -All the TypeScript typings are placed in the `types` folder. +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-net.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-net +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-net%2Fpackage.json [npm-url]: https://npmjs.org/package/web3-net -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-net -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-net -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-net -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-net +[downloads-image]: https://img.shields.io/npm/dm/web3-net?label=npm%20downloads diff --git a/packages/web3-net/assets/logo/web3js.ai b/packages/web3-net/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-net/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-net/assets/logo/web3js.jpg b/packages/web3-net/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-net/assets/logo/web3js.jpg differ diff --git a/packages/web3-net/assets/logo/web3js.svg b/packages/web3-net/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-net/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-net/package-lock.json b/packages/web3-net/package-lock.json deleted file mode 100644 index 70f26f734dd..00000000000 --- a/packages/web3-net/package-lock.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "web3-net", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-net/package.json b/packages/web3-net/package.json index 57d72e521a9..f6ddefca6ee 100644 --- a/packages/web3-net/package.json +++ b/packages/web3-net/package.json @@ -1,25 +1,64 @@ { - "name": "web3-net", - "version": "1.3.0", - "description": "Web3 module to interact with the Ethereum nodes networking properties.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-net", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "web3-core": "1.3.0", - "web3-core-method": "1.3.0", - "web3-utils": "1.3.0" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3-net", + "version": "4.0.7", + "description": "Web3 module to interact with the Ethereum nodes networking properties.", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + }, + "dependencies": { + "web3-core": "^4.3.0", + "web3-rpc-methods": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" + } } diff --git a/packages/web3-net/src/index.js b/packages/web3-net/src/index.js deleted file mode 100644 index cdca9d6f980..00000000000 --- a/packages/web3-net/src/index.js +++ /dev/null @@ -1,67 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var core = require('web3-core'); -var Method = require('web3-core-method'); -var utils = require('web3-utils'); - - -var Net = function () { - var _this = this; - - // sets _requestmanager - core.packageInit(this, arguments); - - - [ - new Method({ - name: 'getId', - call: 'net_version', - params: 0, - outputFormatter: parseInt - }), - new Method({ - name: 'isListening', - call: 'net_listening', - params: 0 - }), - new Method({ - name: 'getPeerCount', - call: 'net_peerCount', - params: 0, - outputFormatter: utils.hexToNumber - }) - ].forEach(function(method) { - method.attachToObject(_this); - method.setRequestManager(_this._requestManager); - }); - -}; - -core.addProviders(Net); - - -module.exports = Net; - - diff --git a/packages/web3-net/src/index.ts b/packages/web3-net/src/index.ts new file mode 100644 index 00000000000..d2ba11d7682 --- /dev/null +++ b/packages/web3-net/src/index.ts @@ -0,0 +1,53 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * The web3-net package allows you to interact with an Ethereum node’s network properties. + * + * ```ts + * import Net from 'web3-net'; + * + * const net = new Net(Net.givenProvider || 'ws://some.local-or-remote.node:8546'); + * // or using the web3 umbrella package + * import Web3 from 'web3'; + * const web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546'); + * + * // -> web3.eth.net + * + * // get the ID of the network + * await web3.eth.net.getId(); + * > 5777n + * + * // get the peer count + * await web3.eth.net.getPeerCount(); + * > 0n + * + * // Check if the node is listening for peers + * await web3.eth.net.isListening(); + * > true + * ``` + */ + +/** + * + */ +import { Net } from './net.js'; + +export * from './net.js'; +export * from './rpc_method_wrappers.js'; + +export default Net; diff --git a/packages/web3-net/src/net.ts b/packages/web3-net/src/net.ts new file mode 100644 index 00000000000..b03dcb23b04 --- /dev/null +++ b/packages/web3-net/src/net.ts @@ -0,0 +1,73 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; +import { DataFormat, DEFAULT_RETURN_FORMAT, Web3NetAPI } from 'web3-types'; + +import * as rpcMethodsWrappers from './rpc_method_wrappers.js'; + +export class Net extends Web3Context { + /** + * Gets the current network ID + * + * @param returnFormat - Return format + * @returns A Promise of the network ID. + * @example + * ```ts + * const net = new Net(Net.givenProvider || 'ws://some.local-or-remote.node:8546'); + * await net.getId(); + * > 1 + * ``` + */ + public async getId( + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getId(this, returnFormat); + } + + /** + * Get the number of peers connected to. + * + * @param returnFormat - Return format + * @returns A promise of the number of the peers connected to. + * @example + * ```ts + * const net = new Net(Net.givenProvider || 'ws://some.local-or-remote.node:8546'); + * await net.getPeerCount(); + * > 0 + * ``` + */ + public async getPeerCount( + returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat, + ) { + return rpcMethodsWrappers.getPeerCount(this, returnFormat); + } + + /** + * Check if the node is listening for peers + * + * @returns A promise of a boolean if the node is listening to peers + * @example + * ```ts + * const net = new Net(Net.givenProvider || 'ws://some.local-or-remote.node:8546'); + * await net.isListening(); + * > true + * ``` + */ + public async isListening() { + return rpcMethodsWrappers.isListening(this); + } +} diff --git a/packages/web3-net/src/rpc_method_wrappers.ts b/packages/web3-net/src/rpc_method_wrappers.ts new file mode 100644 index 00000000000..f923615998e --- /dev/null +++ b/packages/web3-net/src/rpc_method_wrappers.ts @@ -0,0 +1,43 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { format } from 'web3-utils'; +import { Web3Context } from 'web3-core'; +import { DataFormat, Web3NetAPI } from 'web3-types'; +import { netRpcMethods } from 'web3-rpc-methods'; + +export async function getId( + web3Context: Web3Context, + returnFormat: ReturnFormat, +) { + const response = await netRpcMethods.getId(web3Context.requestManager); + + return format({ format: 'uint' }, response as unknown as number, returnFormat); +} + +export async function getPeerCount( + web3Context: Web3Context, + returnFormat: ReturnFormat, +) { + const response = await netRpcMethods.getPeerCount(web3Context.requestManager); + + // Data returned is number in hex format + return format({ format: 'uint' }, response as unknown as number, returnFormat); +} + +export const isListening = async (web3Context: Web3Context) => + netRpcMethods.isListening(web3Context.requestManager); diff --git a/packages/web3-net/test/.eslintrc.js b/packages/web3-net/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-net/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-net/test/config/jest.config.js b/packages/web3-net/test/config/jest.config.js new file mode 100644 index 00000000000..c8c21e06e6a --- /dev/null +++ b/packages/web3-net/test/config/jest.config.js @@ -0,0 +1,43 @@ +module.exports = { + globals: { + 'ts-jest': { + tsconfig: './test/tsconfig.json', + }, + }, + rootDir: '../..', + testMatch: ['/test/**/?(*.)+(spec|test).+(ts|tsx|js)'], + setupFilesAfterEnv: ['/test/config/setup.js'], + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + verbose: false, + collectCoverage: false, + coverageReporters: ['json'], + coverageDirectory: '.coverage', + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, +}; diff --git a/packages/web3-net/test/config/setup.js b/packages/web3-net/test/config/setup.js new file mode 100644 index 00000000000..d6d6c564527 --- /dev/null +++ b/packages/web3-net/test/config/setup.js @@ -0,0 +1,23 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-net/test/fixtures/accounts.json b/packages/web3-net/test/fixtures/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3-net/test/fixtures/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3-net/test/fixtures/rpc_method_wrappers.ts b/packages/web3-net/test/fixtures/rpc_method_wrappers.ts new file mode 100644 index 00000000000..0e76bcdd39b --- /dev/null +++ b/packages/web3-net/test/fixtures/rpc_method_wrappers.ts @@ -0,0 +1,32 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { DataFormat, FMT_BYTES, FMT_NUMBER } from 'web3-types'; + +export const getIdValidData: [DataFormat, any, any][] = [ + [{ number: FMT_NUMBER.HEX, bytes: FMT_BYTES.HEX }, '3', '0x3'], + [{ number: FMT_NUMBER.STR, bytes: FMT_BYTES.HEX }, '3', '3'], + [{ number: FMT_NUMBER.NUMBER, bytes: FMT_BYTES.HEX }, '3', 3], + [{ number: FMT_NUMBER.BIGINT, bytes: FMT_BYTES.HEX }, '3', BigInt('3')], +]; + +export const getPeerCountValidData: [DataFormat, any, any][] = [ + [{ number: FMT_NUMBER.HEX, bytes: FMT_BYTES.HEX }, '0x2', '0x2'], + [{ number: FMT_NUMBER.STR, bytes: FMT_BYTES.HEX }, '0x2', '2'], + [{ number: FMT_NUMBER.NUMBER, bytes: FMT_BYTES.HEX }, '0x2', 2], + [{ number: FMT_NUMBER.BIGINT, bytes: FMT_BYTES.HEX }, '0x2', BigInt('2')], +]; diff --git a/packages/web3-net/test/fixtures/system_tests_utils.ts b/packages/web3-net/test/fixtures/system_tests_utils.ts new file mode 120000 index 00000000000..2ab08a83752 --- /dev/null +++ b/packages/web3-net/test/fixtures/system_tests_utils.ts @@ -0,0 +1 @@ +../../../../scripts/system_tests_utils.ts \ No newline at end of file diff --git a/packages/web3-net/test/fixtures/web3_net_methods.ts b/packages/web3-net/test/fixtures/web3_net_methods.ts new file mode 100644 index 00000000000..85f2c4110b4 --- /dev/null +++ b/packages/web3-net/test/fixtures/web3_net_methods.ts @@ -0,0 +1,25 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { DataFormat, FMT_BYTES, FMT_NUMBER } from 'web3-types'; + +export const getDataFormat: DataFormat[] = [ + { number: FMT_NUMBER.HEX, bytes: FMT_BYTES.HEX }, + { number: FMT_NUMBER.STR, bytes: FMT_BYTES.UINT8ARRAY }, + { number: FMT_NUMBER.BIGINT, bytes: FMT_BYTES.UINT8ARRAY }, + { number: FMT_NUMBER.NUMBER, bytes: FMT_BYTES.UINT8ARRAY }, +]; diff --git a/packages/web3-net/test/integration/jest.config.js b/packages/web3-net/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-net/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-net/test/integration/setup.js b/packages/web3-net/test/integration/setup.js new file mode 100644 index 00000000000..339adf9ec52 --- /dev/null +++ b/packages/web3-net/test/integration/setup.js @@ -0,0 +1,23 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-net/test/integration/web3_net.test.ts b/packages/web3-net/test/integration/web3_net.test.ts new file mode 100644 index 00000000000..f0786d45f60 --- /dev/null +++ b/packages/web3-net/test/integration/web3_net.test.ts @@ -0,0 +1,55 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { SupportedProviders, Web3NetAPI } from 'web3-types'; +import Net from '../../src'; + +import { closeOpenConnection, getSystemTestProvider } from '../fixtures/system_tests_utils'; + +describe('Web3 net', () => { + let clientUrl: string | SupportedProviders; + let web3Net: Net; + + beforeAll(async () => { + clientUrl = getSystemTestProvider(); + }); + + afterAll(async () => { + await closeOpenConnection(web3Net); + }); + + it('should be able to create instance', () => { + web3Net = new Net(clientUrl); + + expect(web3Net).toBeInstanceOf(Net); + }); + + it('should be able to get id', async () => { + const networkId = await web3Net.getId(); + expect(networkId).toBe(BigInt(1337)); + }); + + it('should be able to listen', async () => { + const isListening = await web3Net.isListening(); + expect(isListening).toBeTruthy(); + }); + + it('should fetch peer count', async () => { + const peerCount = await web3Net.getPeerCount(); + expect(peerCount).toBe(BigInt(0)); + }); +}); diff --git a/packages/web3-net/test/tsconfig.json b/packages/web3-net/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-net/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-net/test/unit/jest.config.js b/packages/web3-net/test/unit/jest.config.js new file mode 100644 index 00000000000..6730195e8b5 --- /dev/null +++ b/packages/web3-net/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-net-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-net/test/unit/rpc_method_wrappers.test.ts b/packages/web3-net/test/unit/rpc_method_wrappers.test.ts new file mode 100644 index 00000000000..47d014e2b3e --- /dev/null +++ b/packages/web3-net/test/unit/rpc_method_wrappers.test.ts @@ -0,0 +1,65 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { netRpcMethods } from 'web3-rpc-methods'; + +import { Net } from '../../src'; +import { getIdValidData, getPeerCountValidData } from '../fixtures/rpc_method_wrappers'; +import { getId, getPeerCount, isListening } from '../../src/rpc_method_wrappers'; + +jest.mock('web3-rpc-methods'); + +describe('rpc_method_wrappers', () => { + let web3Net: Net; + + beforeAll(() => { + web3Net = new Net('http://127.0.0.1:8545'); + }); + + describe('should call RPC method', () => { + describe('getId', () => { + it.each(getIdValidData)( + 'returnType: %s mockRpcResponse: %s output: %s', + async (returnType, mockRpcResponse, output) => { + (netRpcMethods.getId as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + const result = await getId(web3Net, returnType); + + expect(result).toBe(output); + expect(netRpcMethods.getId).toHaveBeenCalledWith(web3Net.requestManager); + }, + ); + }); + + describe('getPeerCount', () => { + it.each(getPeerCountValidData)( + 'returnType: %s mockRpcResponse: %s output: %s', + async (returnType, mockRpcResponse, output) => { + (netRpcMethods.getPeerCount as jest.Mock).mockResolvedValueOnce( + mockRpcResponse, + ); + + expect(await getPeerCount(web3Net, returnType)).toBe(output); + expect(netRpcMethods.getPeerCount).toHaveBeenCalledWith(web3Net.requestManager); + }, + ); + }); + + it('isListening', async () => { + await isListening(web3Net); + expect(netRpcMethods.isListening).toHaveBeenCalledWith(web3Net.requestManager); + }); + }); +}); diff --git a/packages/web3-net/test/unit/web3_net_methods.test.ts b/packages/web3-net/test/unit/web3_net_methods.test.ts new file mode 100644 index 00000000000..ede2c46a7e6 --- /dev/null +++ b/packages/web3-net/test/unit/web3_net_methods.test.ts @@ -0,0 +1,51 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Net } from '../../src'; +import * as rpcMethodWrappers from '../../src/rpc_method_wrappers'; +import { getDataFormat } from '../fixtures/web3_net_methods'; + +jest.mock('../../src/rpc_method_wrappers'); + +describe('web3_eth_methods', () => { + let web3Net: Net; + + beforeAll(() => { + web3Net = new Net('http://127.0.0.1:8545'); + }); + + describe('should call RPC method', () => { + describe('getId', () => { + it.each(getDataFormat)('returnType: %s', async returnType => { + await web3Net.getId(returnType); + expect(rpcMethodWrappers.getId).toHaveBeenCalledWith(web3Net, returnType); + }); + }); + + describe('getPeerCount', () => { + it.each(getDataFormat)('returnType: %s', async returnType => { + await web3Net.getPeerCount(returnType); + expect(rpcMethodWrappers.getPeerCount).toHaveBeenCalledWith(web3Net, returnType); + }); + }); + + it('isListening', async () => { + await web3Net.isListening(); + expect(rpcMethodWrappers.isListening).toHaveBeenCalledWith(web3Net); + }); + }); +}); diff --git a/packages/web3-net/tsconfig.cjs.json b/packages/web3-net/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-net/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-net/tsconfig.esm.json b/packages/web3-net/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-net/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-net/tsconfig.json b/packages/web3-net/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-net/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-net/tsconfig.types.json b/packages/web3-net/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-net/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-net/tsdoc.json b/packages/web3-net/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-net/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-net/types/index.d.ts b/packages/web3-net/types/index.d.ts deleted file mode 100644 index 0ebdd612c06..00000000000 --- a/packages/web3-net/types/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens - * @date 2018 - */ - -import { NetworkBase } from 'web3-core'; - -export class Network extends NetworkBase {} diff --git a/packages/web3-net/types/tests/network-test.ts b/packages/web3-net/types/tests/network-test.ts deleted file mode 100644 index 25a09ddbb2c..00000000000 --- a/packages/web3-net/types/tests/network-test.ts +++ /dev/null @@ -1,70 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file network-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import { Network } from 'web3-net'; - -// $ExpectType Network -const network_empty = new Network(); - -// $ExpectType Network -const network = new Network('http://localhost:5000'); - -// $ExpectType provider -network.currentProvider; - -// $ExpectType any -Network.givenProvider; - -// $ExpectType any -network.givenProvider; - -// $ExpectType boolean -network.setProvider('https://localhost:2100'); - -// $ExpectType BatchRequest -new network.BatchRequest(); - -// $ExpectType any -network.extend({property: 'test', methods: [{name: 'method', call: 'method'}]}); - -// $ExpectType Promise -network.getNetworkType((error, returnValue) => { - console.log(returnValue); -}); - -// $ExpectType Promise -network.getId(); -// $ExpectType Promise -network.getId((error: Error, id: number) => { - console.log(id); -}); - -// $ExpectType Promise -network.isListening(); -// $ExpectType Promise -network.isListening((error: Error, listening: boolean) => { - console.log(listening); -}); - -// $ExpectType Promise -network.getPeerCount(); -// $ExpectType Promise -network.getPeerCount((error: Error, peerCount: number) => { - console.log(peerCount); -}); diff --git a/packages/web3-net/types/tsconfig.json b/packages/web3-net/types/tsconfig.json deleted file mode 100644 index 1c940eabc19..00000000000 --- a/packages/web3-net/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-net": ["."] - } - } -} diff --git a/packages/web3-net/types/tslint.json b/packages/web3-net/types/tslint.json deleted file mode 100644 index 6429b0c446e..00000000000 --- a/packages/web3-net/types/tslint.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false - } -} diff --git a/packages/web3-providers-http/.eslintignore b/packages/web3-providers-http/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/packages/web3-providers-http/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/packages/web3-providers-http/.eslintrc.js b/packages/web3-providers-http/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-providers-http/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-providers-http/.gitignore b/packages/web3-providers-http/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-providers-http/.npmignore b/packages/web3-providers-http/.npmignore new file mode 120000 index 00000000000..8a0be70f3ed --- /dev/null +++ b/packages/web3-providers-http/.npmignore @@ -0,0 +1 @@ +../../templates/.npmignore.tmpl \ No newline at end of file diff --git a/packages/web3-providers-http/.prettierignore b/packages/web3-providers-http/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-providers-http/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-providers-http/.prettierrc.json b/packages/web3-providers-http/.prettierrc.json new file mode 120000 index 00000000000..00ecd510aaf --- /dev/null +++ b/packages/web3-providers-http/.prettierrc.json @@ -0,0 +1 @@ +../../templates/.prettierrc.json.tmpl \ No newline at end of file diff --git a/packages/web3-providers-http/CHANGELOG.md b/packages/web3-providers-http/CHANGELOG.md new file mode 100644 index 00000000000..6d57af6dcf7 --- /dev/null +++ b/packages/web3-providers-http/CHANGELOG.md @@ -0,0 +1,132 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [4.0.1-alpha.2] + +### Changed + +- Updated Web3.js dependencies (#5664) + +## [4.0.1-alpha.3] + +### Changed + +- Updated dependencies (#5725) + +## [4.0.1-alpha.4] + +### Changed + +- `main` and `files` entries in `package.json` changed to `lib/` directory from `dist/` (#5739) + +## [4.0.1-alpha.5] + +### Changed + +- web3.js dependencies (#5757) + +## [4.0.1-rc.0] + +### Added + +- Added named export for `HttpProvider` (#5771) + +## [4.0.1-rc.1] + +### Added + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +## [4.0.1-rc.2] + +### Changed + +- Dependencies updated + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Changed + +- Dependencies updated + +## [4.0.3] + +### Changed + +- Dependencies updated + +## [4.0.4] + +### Changed + +- Dependencies updated + +## [4.0.5] + +### Changed + +- Dependencies updated + +## [4.0.6] + +### Changed + +- Dependencies updated + +## [4.1.0] + +### Changed + +- Bump cross-fetch to version 4 (#6463). + +### Fixed + +- Fix issue lquixada/cross-fetch#78, enabling to run web3.js in service worker (#6463) + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-providers-http/README.md b/packages/web3-providers-http/README.md index 0262087f305..12c52dd4c1e 100644 --- a/packages/web3-providers-http/README.md +++ b/packages/web3-providers-http/README.md @@ -1,45 +1,59 @@ -# web3-providers-http +

+ web3.js +

-[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +# web3.js - Http Provider -This is a HTTP provider sub-package for [web3.js][repo]. +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] -Please read the [documentation][docs] for more. +This is a sub-package of [web3.js][repo]. + +`web3-providers-http` contains the Web3.js provider for the HTTP protocol. ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3-providers-http) or using [Yarn](https://yarnpkg.com/package/web3-providers-http) + +### Using NPM ```bash npm install web3-providers-http ``` -## Usage +### Using Yarn -```js -const http = require('http'); -const Web3HttpProvider = require('web3-providers-http'); +```bash +yarn add web3-providers-http +``` -const options = { - keepAlive: true, - timeout: 20000, // milliseconds, - headers: [{name: 'Access-Control-Allow-Origin', value: '*'},{...}], - withCredentials: false, - agent: {http: http.Agent(...), baseUrl: ''} -}; +## Getting Started -const provider = new Web3HttpProvider('http://localhost:8545', options); -``` +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new/choose) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) -## Types +## Package.json Scripts -All the TypeScript typings are placed in the `types` folder. +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/dm/web3-providers-http.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-providers-http +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-providers-http%2Fpackage.json [npm-url]: https://npmjs.org/package/web3-providers-http -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-providers-http -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-providers-http -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-providers-http -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-providers-http +[downloads-image]: https://img.shields.io/npm/dm/web3-providers-http?label=npm%20downloads diff --git a/packages/web3-providers-http/assets/logo/web3js.ai b/packages/web3-providers-http/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-providers-http/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-providers-http/assets/logo/web3js.jpg b/packages/web3-providers-http/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-providers-http/assets/logo/web3js.jpg differ diff --git a/packages/web3-providers-http/assets/logo/web3js.svg b/packages/web3-providers-http/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-providers-http/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-providers-http/cypress b/packages/web3-providers-http/cypress new file mode 120000 index 00000000000..4a671a7beac --- /dev/null +++ b/packages/web3-providers-http/cypress @@ -0,0 +1 @@ +../../templates/cypress \ No newline at end of file diff --git a/packages/web3-providers-http/cypress.config.js b/packages/web3-providers-http/cypress.config.js new file mode 120000 index 00000000000..8cd9ba29af0 --- /dev/null +++ b/packages/web3-providers-http/cypress.config.js @@ -0,0 +1 @@ +../../templates/cypress.config.js \ No newline at end of file diff --git a/packages/web3-providers-http/package-lock.json b/packages/web3-providers-http/package-lock.json deleted file mode 100644 index 7d065771704..00000000000 --- a/packages/web3-providers-http/package-lock.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "web3-providers-http", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-providers-http/package.json b/packages/web3-providers-http/package.json index 40af83a7ce0..6a01d2e835d 100644 --- a/packages/web3-providers-http/package.json +++ b/packages/web3-providers-http/package.json @@ -1,24 +1,68 @@ { - "name": "web3-providers-http", - "version": "1.3.0", - "description": "Module to handle web3 RPC connections over HTTP.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-providers-http", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "types": "types/index.d.ts", - "main": "lib/index.js", - "dependencies": { - "web3-core-helpers": "1.3.0", - "xhr2-cookies": "1.1.0" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3-providers-http", + "version": "4.1.0", + "description": "HTTP provider for Web3 4.x.x", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js", + "test:e2e:electron": "npx cypress run --headless --browser electron", + "test:e2e:chrome": "npx cypress run --headless --browser chrome", + "test:e2e:firefox": "npx cypress run --headless --browser firefox" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "jest-fetch-mock": "^3.0.3", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + }, + "dependencies": { + "cross-fetch": "^4.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" + } } diff --git a/packages/web3-providers-http/src/index.js b/packages/web3-providers-http/src/index.js deleted file mode 100644 index 6b2a7e2b0bf..00000000000 --- a/packages/web3-providers-http/src/index.js +++ /dev/null @@ -1,142 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file httpprovider.js - * @authors: - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * @date 2015 - */ - -var errors = require('web3-core-helpers').errors; -var XHR2 = require('xhr2-cookies').XMLHttpRequest; // jshint ignore: line -var http = require('http'); -var https = require('https'); - - -/** - * HttpProvider should be used to send rpc calls over http - */ -var HttpProvider = function HttpProvider(host, options) { - options = options || {}; - - this.withCredentials = options.withCredentials || false; - this.timeout = options.timeout || 0; - this.headers = options.headers; - this.agent = options.agent; - this.connected = false; - - // keepAlive is true unless explicitly set to false - const keepAlive = options.keepAlive !== false; - this.host = host || 'http://localhost:8545'; - if (!this.agent) { - if (this.host.substring(0,5) === "https") { - this.httpsAgent = new https.Agent({ keepAlive }); - } else { - this.httpAgent = new http.Agent({ keepAlive }); - } - } -}; - -HttpProvider.prototype._prepareRequest = function(){ - var request; - - // the current runtime is a browser - if (typeof XMLHttpRequest !== 'undefined') { - request = new XMLHttpRequest(); - } else { - request = new XHR2(); - var agents = {httpsAgent: this.httpsAgent, httpAgent: this.httpAgent, baseUrl: this.baseUrl}; - - if (this.agent) { - agents.httpsAgent = this.agent.https; - agents.httpAgent = this.agent.http; - agents.baseUrl = this.agent.baseUrl; - } - - request.nodejsSet(agents); - } - - request.open('POST', this.host, true); - request.setRequestHeader('Content-Type','application/json'); - request.timeout = this.timeout; - request.withCredentials = this.withCredentials; - - if(this.headers) { - this.headers.forEach(function(header) { - request.setRequestHeader(header.name, header.value); - }); - } - - return request; -}; - -/** - * Should be used to make async request - * - * @method send - * @param {Object} payload - * @param {Function} callback triggered on end with (err, result) - */ -HttpProvider.prototype.send = function (payload, callback) { - var _this = this; - var request = this._prepareRequest(); - - request.onreadystatechange = function() { - if (request.readyState === 4 && request.timeout !== 1) { - var result = request.responseText; - var error = null; - - try { - result = JSON.parse(result); - } catch(e) { - error = errors.InvalidResponse(request.responseText); - } - - _this.connected = true; - callback(error, result); - } - }; - - request.ontimeout = function() { - _this.connected = false; - callback(errors.ConnectionTimeout(this.timeout)); - }; - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - this.connected = false; - callback(errors.InvalidConnection(this.host)); - } -}; - -HttpProvider.prototype.disconnect = function () { - //NO OP -}; - -/** - * Returns the desired boolean. - * - * @method supportsSubscriptions - * @returns {boolean} - */ -HttpProvider.prototype.supportsSubscriptions = function () { - return false; -}; - -module.exports = HttpProvider; diff --git a/packages/web3-providers-http/src/index.ts b/packages/web3-providers-http/src/index.ts new file mode 100644 index 00000000000..64dadd9895d --- /dev/null +++ b/packages/web3-providers-http/src/index.ts @@ -0,0 +1,129 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import fetch from 'cross-fetch'; +import { + EthExecutionAPI, + JsonRpcResponseWithResult, + Web3APIMethod, + Web3APIPayload, + Web3APIReturnType, + Web3APISpec, + Web3BaseProvider, + Web3ProviderStatus, +} from 'web3-types'; +import { InvalidClientError, MethodNotImplementedError, ResponseError } from 'web3-errors'; +import { HttpProviderOptions } from './types.js'; + +export { HttpProviderOptions } from './types.js'; + +export default class HttpProvider< + API extends Web3APISpec = EthExecutionAPI, +> extends Web3BaseProvider { + private readonly clientUrl: string; + private readonly httpProviderOptions: HttpProviderOptions | undefined; + + public constructor(clientUrl: string, httpProviderOptions?: HttpProviderOptions) { + super(); + if (!HttpProvider.validateClientUrl(clientUrl)) throw new InvalidClientError(clientUrl); + this.clientUrl = clientUrl; + this.httpProviderOptions = httpProviderOptions; + } + + private static validateClientUrl(clientUrl: string): boolean { + return typeof clientUrl === 'string' ? /^http(s)?:\/\//i.test(clientUrl) : false; + } + + /* eslint-disable class-methods-use-this */ + public getStatus(): Web3ProviderStatus { + throw new MethodNotImplementedError(); + } + + /* eslint-disable class-methods-use-this */ + public supportsSubscriptions() { + return false; + } + + public async request< + Method extends Web3APIMethod, + ResultType = Web3APIReturnType, + >( + payload: Web3APIPayload, + requestOptions?: RequestInit, + ): Promise> { + const providerOptionsCombined = { + ...this.httpProviderOptions?.providerOptions, + ...requestOptions, + }; + const response = await fetch(this.clientUrl, { + ...providerOptionsCombined, + method: 'POST', + headers: { + ...providerOptionsCombined.headers, + 'Content-Type': 'application/json', + }, + body: JSON.stringify(payload), + }); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + if (!response.ok) throw new ResponseError(await response.json()); + + return (await response.json()) as JsonRpcResponseWithResult; + } + + /* eslint-disable class-methods-use-this */ + public on() { + throw new MethodNotImplementedError(); + } + + /* eslint-disable class-methods-use-this */ + public removeListener() { + throw new MethodNotImplementedError(); + } + + /* eslint-disable class-methods-use-this */ + public once() { + throw new MethodNotImplementedError(); + } + + /* eslint-disable class-methods-use-this */ + public removeAllListeners() { + throw new MethodNotImplementedError(); + } + + /* eslint-disable class-methods-use-this */ + public connect() { + throw new MethodNotImplementedError(); + } + + /* eslint-disable class-methods-use-this */ + public disconnect() { + throw new MethodNotImplementedError(); + } + + /* eslint-disable class-methods-use-this */ + public reset() { + throw new MethodNotImplementedError(); + } + + /* eslint-disable class-methods-use-this */ + public reconnect() { + throw new MethodNotImplementedError(); + } +} + +export { HttpProvider }; diff --git a/packages/web3-providers-http/src/types.ts b/packages/web3-providers-http/src/types.ts new file mode 100644 index 00000000000..e6d109c573d --- /dev/null +++ b/packages/web3-providers-http/src/types.ts @@ -0,0 +1,20 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export interface HttpProviderOptions { + providerOptions: RequestInit; +} diff --git a/packages/web3-providers-http/test/.eslintrc.js b/packages/web3-providers-http/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-providers-http/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-providers-http/test/config/jest.config.js b/packages/web3-providers-http/test/config/jest.config.js new file mode 120000 index 00000000000..b875b48129d --- /dev/null +++ b/packages/web3-providers-http/test/config/jest.config.js @@ -0,0 +1 @@ +../../../../templates/jest.config.js.tmpl \ No newline at end of file diff --git a/packages/web3-providers-http/test/config/setup.js b/packages/web3-providers-http/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-providers-http/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-providers-http/test/fixtures/accounts.json b/packages/web3-providers-http/test/fixtures/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3-providers-http/test/fixtures/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3-providers-http/test/fixtures/system_test_utils.ts b/packages/web3-providers-http/test/fixtures/system_test_utils.ts new file mode 120000 index 00000000000..2ab08a83752 --- /dev/null +++ b/packages/web3-providers-http/test/fixtures/system_test_utils.ts @@ -0,0 +1 @@ +../../../../scripts/system_tests_utils.ts \ No newline at end of file diff --git a/packages/web3-providers-http/test/fixtures/test_data.ts b/packages/web3-providers-http/test/fixtures/test_data.ts new file mode 100644 index 00000000000..2a8bf5e4939 --- /dev/null +++ b/packages/web3-providers-http/test/fixtures/test_data.ts @@ -0,0 +1,65 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const validClients = [ + 'http://localhost:8545', + 'http://www.localhost', + 'http://localhost', + 'http://foo.com', + 'http://foo.ninja', + 'https://foo.com', + 'http://foo.com:8545', +]; + +export const invalidClients = [ + 'htt://localhost:8545', + 'http//localhost:8545', + 'ws://localhost:8545', + '', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + undefined, + /* eslint-disable @typescript-eslint/no-magic-numbers */ + 42, +]; + +export const httpProviderOptions = { + providerOptions: { + body: undefined, + cache: 'force-cache', + credentials: 'same-origin', + headers: { + 'Content-Type': 'application/json', + }, + integrity: 'foo', + keepalive: true, + method: 'GET', + mode: 'same-origin', + redirect: 'error', + referrer: 'foo', + referrerPolicy: 'same-origin', + signal: undefined, + window: undefined, + } as RequestInit, +}; + +export const mockGetBalanceResponse = { + id: 1, + jsonrpc: '2.0', + result: '0x0234c8a3397aab58', // 158972490234375000 +}; diff --git a/packages/web3-providers-http/test/integration/jest.config.js b/packages/web3-providers-http/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-providers-http/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-providers-http/test/integration/request.test.ts b/packages/web3-providers-http/test/integration/request.test.ts new file mode 100644 index 00000000000..9865b768f85 --- /dev/null +++ b/packages/web3-providers-http/test/integration/request.test.ts @@ -0,0 +1,48 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { EthExecutionAPI, Web3APIPayload, JsonRpcResponseWithResult } from 'web3-types'; +import HttpProvider from '../../src/index'; +import { + getSystemTestProviderUrl, + describeIf, + createTempAccount, + isHttp, +} from '../fixtures/system_test_utils'; + +describeIf(isHttp)('HttpProvider - implemented methods', () => { + let httpProvider: HttpProvider; + let jsonRpcPayload: Web3APIPayload; + + beforeAll(async () => { + httpProvider = new HttpProvider(getSystemTestProviderUrl()); + const tempAcc = await createTempAccount(); + jsonRpcPayload = { + jsonrpc: '2.0', + id: 42, + method: 'eth_getBalance', + params: [tempAcc.address, 'latest'], + } as Web3APIPayload; + }); + + describe('httpProvider.request', () => { + it('should return expected response', async () => { + const response = await httpProvider.request(jsonRpcPayload); + expect(Number((response as JsonRpcResponseWithResult).id)).toBeGreaterThan(0); + }); + }); +}); diff --git a/packages/web3-providers-http/test/integration/setup.js b/packages/web3-providers-http/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-providers-http/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-providers-http/test/shared_fixtures b/packages/web3-providers-http/test/shared_fixtures new file mode 120000 index 00000000000..729a61c9ef4 --- /dev/null +++ b/packages/web3-providers-http/test/shared_fixtures @@ -0,0 +1 @@ +../../../fixtures \ No newline at end of file diff --git a/packages/web3-providers-http/test/tsconfig.json b/packages/web3-providers-http/test/tsconfig.json new file mode 120000 index 00000000000..c73c54e77b4 --- /dev/null +++ b/packages/web3-providers-http/test/tsconfig.json @@ -0,0 +1 @@ +../../../templates/test/tsconfig.json.tmpl \ No newline at end of file diff --git a/packages/web3-providers-http/test/unit/constructor.test.ts b/packages/web3-providers-http/test/unit/constructor.test.ts new file mode 100644 index 00000000000..cfc4349438b --- /dev/null +++ b/packages/web3-providers-http/test/unit/constructor.test.ts @@ -0,0 +1,60 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import HttpProvider from '../../src/index'; +import { httpProviderOptions, validClients, invalidClients } from '../fixtures/test_data'; + +describe('HttpProvider', () => { + it('should construct with expected methods', () => { + const httpProvider = new HttpProvider('http://localhost:8545'); + + expect(httpProvider.request).toBeDefined(); + expect(httpProvider.getStatus).toBeDefined(); + expect(httpProvider.supportsSubscriptions).toBeDefined(); + expect(httpProvider.request).toBeDefined(); + expect(httpProvider.on).toBeDefined(); + expect(httpProvider.removeListener).toBeDefined(); + expect(httpProvider.once).toBeDefined(); + expect(httpProvider.removeAllListeners).toBeDefined(); + expect(httpProvider.connect).toBeDefined(); + expect(httpProvider.disconnect).toBeDefined(); + expect(httpProvider.reset).toBeDefined(); + expect(httpProvider.reconnect).toBeDefined(); + }); + + it('Allows for providerOptions to be passed upon instantiation', () => { + expect(() => new HttpProvider('http://localhost:8545', httpProviderOptions)).not.toThrow(); + }); + + for (const validClient of validClients) { + it(`Instantiation with valid client - ${validClient}`, () => { + expect(() => new HttpProvider(validClient)).not.toThrow(); + }); + } + + for (const invalidClient of invalidClients) { + /* eslint-disable @typescript-eslint/restrict-template-expressions */ + it(`Instantiation with invalid client - ${invalidClient}`, () => { + expect( + () => + // @ts-expect-error - Purposefully passing invalid types to check validation + new HttpProvider(invalidClient), + /* eslint-disable @typescript-eslint/restrict-template-expressions */ + ).toThrow(`Client URL "${invalidClient}" is invalid.`); + }); + } +}); diff --git a/packages/web3-providers-http/test/unit/implemented_methods.test.ts b/packages/web3-providers-http/test/unit/implemented_methods.test.ts new file mode 100644 index 00000000000..892af84607b --- /dev/null +++ b/packages/web3-providers-http/test/unit/implemented_methods.test.ts @@ -0,0 +1,67 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// These need to be imported first in order for cross-fetch to be mocked correctly +import fetchMock from 'jest-fetch-mock'; + +jest.setMock('cross-fetch', fetchMock); + +/* eslint-disable-next-line import/first */ +import { Web3APIPayload, EthExecutionAPI } from 'web3-types'; +/* eslint-disable-next-line import/first */ +import { ResponseError } from 'web3-errors'; +/* eslint-disable-next-line import/first */ +import HttpProvider from '../../src/index'; +/* eslint-disable-next-line import/first */ +import { mockGetBalanceResponse } from '../fixtures/test_data'; + +describe('HttpProvider - implemented methods', () => { + const jsonRpcPayload = { + jsonrpc: '2.0', + id: 42, + method: 'eth_getBalance', + params: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', 'latest'], + } as Web3APIPayload; + + let httpProvider: HttpProvider; + + beforeAll(() => { + httpProvider = new HttpProvider('http://localhost:8545'); + }); + + describe('httpProvider.supportsSubscriptions', () => { + it('should return false', () => { + expect(httpProvider.supportsSubscriptions()).toBe(false); + }); + }); + + describe('httpProvider.request', () => { + it('should return expected response', async () => { + fetchMock.mockResponseOnce(JSON.stringify(mockGetBalanceResponse)); + + expect(await httpProvider.request(jsonRpcPayload)).toStrictEqual( + mockGetBalanceResponse, + ); + }); + + it('should return ResponseError', async () => { + fetchMock.mockResponseOnce(JSON.stringify(mockGetBalanceResponse), { status: 400 }); + + await expect(httpProvider.request(jsonRpcPayload)).rejects.toThrow(ResponseError); + }); + }); +}); diff --git a/packages/web3-providers-http/test/unit/jest.config.js b/packages/web3-providers-http/test/unit/jest.config.js new file mode 100644 index 00000000000..6e44877cd60 --- /dev/null +++ b/packages/web3-providers-http/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-providers-http-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-providers-http/test/unit/not_implemented_methods.test.ts b/packages/web3-providers-http/test/unit/not_implemented_methods.test.ts new file mode 100644 index 00000000000..683e60f6c91 --- /dev/null +++ b/packages/web3-providers-http/test/unit/not_implemented_methods.test.ts @@ -0,0 +1,82 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { MethodNotImplementedError } from 'web3-errors'; + +import HttpProvider from '../../src/index'; + +describe('HttpProvider - not implemented methods', () => { + let httpProvider: HttpProvider; + + beforeAll(() => { + httpProvider = new HttpProvider('http://localhost:8545'); + }); + + it('getStatus', () => { + expect(() => { + httpProvider.getStatus(); + }).toThrow(MethodNotImplementedError); + }); + + it('on', () => { + expect(() => { + httpProvider.on(); + }).toThrow(MethodNotImplementedError); + }); + + it('removeListener', () => { + expect(() => { + httpProvider.removeListener(); + }).toThrow(MethodNotImplementedError); + }); + + it('once', () => { + expect(() => { + httpProvider.once(); + }).toThrow(MethodNotImplementedError); + }); + + it('removeAllListeners', () => { + expect(() => { + httpProvider.removeAllListeners(); + }).toThrow(MethodNotImplementedError); + }); + + it('connect', () => { + expect(() => { + httpProvider.connect(); + }).toThrow(MethodNotImplementedError); + }); + + it('disconnect', () => { + expect(() => { + httpProvider.disconnect(); + }).toThrow(MethodNotImplementedError); + }); + + it('reset', () => { + expect(() => { + httpProvider.reset(); + }).toThrow(MethodNotImplementedError); + }); + + it('reconnect', () => { + expect(() => { + httpProvider.reconnect(); + }).toThrow(MethodNotImplementedError); + }); +}); diff --git a/packages/web3-providers-http/tsconfig.cjs.json b/packages/web3-providers-http/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-providers-http/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-providers-http/tsconfig.esm.json b/packages/web3-providers-http/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-providers-http/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-providers-http/tsconfig.json b/packages/web3-providers-http/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-providers-http/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-providers-http/tsconfig.types.json b/packages/web3-providers-http/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-providers-http/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-providers-http/tsdoc.json b/packages/web3-providers-http/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-providers-http/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-providers-http/types/index.d.ts b/packages/web3-providers-http/types/index.d.ts deleted file mode 100644 index 2f68ab35d75..00000000000 --- a/packages/web3-providers-http/types/index.d.ts +++ /dev/null @@ -1,66 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens - * @date 2018 - */ -import * as http from 'http'; -import * as https from 'https'; - -import { HttpProviderBase, JsonRpcResponse } from 'web3-core-helpers'; - -export interface HttpHeader { - name: string; - value: string; -} - -export interface HttpProviderAgent { - baseUrl?: string; - http?: http.Agent; - https?: https.Agent; -} - -export interface HttpProviderOptions { - withCredentials?: boolean; - timeout?: number; - headers?: HttpHeader[]; - agent?: HttpProviderAgent; - keepAlive?: boolean; -} - -export class HttpProvider extends HttpProviderBase { - host: string; - - withCredentials: boolean; - timeout: number; - headers?: HttpHeader[]; - agent?: HttpProviderAgent; - connected: boolean; - - constructor(host?: string, options?: HttpProviderOptions); - - send( - payload: object, - callback?: ( - error: Error | null, - result: JsonRpcResponse | undefined - ) => void - ): void; - disconnect(): boolean; - supportsSubscriptions(): boolean; -} diff --git a/packages/web3-providers-http/types/tests/web3-provider-http-tests.ts b/packages/web3-providers-http/types/tests/web3-provider-http-tests.ts deleted file mode 100644 index 961ec583297..00000000000 --- a/packages/web3-providers-http/types/tests/web3-provider-http-tests.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file web3-provider-http-tests.ts - * @author Josh Stevens , Samuel Furter - * @date 2018 - */ - -import * as http from 'http'; -import * as https from 'https'; -import { HttpProvider } from 'web3-providers'; -import { JsonRpcResponse } from 'web3-core-helpers'; - -const httpProvider = new HttpProvider('http://localhost:8545', { - timeout: 20000, - headers: [ - { - name: 'Access-Control-Allow-Origin', - value: '*' - } - ], - withCredentials: false, - agent: { - baseUrl: 'base', - http: new http.Agent({}), - https: new https.Agent({}) - } -}); - -// $ExpectType void -httpProvider.send({}, (error: Error | null) => {}); - -// $ExpectType void -httpProvider.send({}, (error: Error | null, result: JsonRpcResponse | undefined) => {}); - -// $ExpectType boolean -httpProvider.disconnect(); diff --git a/packages/web3-providers-http/types/tsconfig.json b/packages/web3-providers-http/types/tsconfig.json deleted file mode 100644 index 74e0aeeb3a8..00000000000 --- a/packages/web3-providers-http/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-providers": ["."] - } - } -} diff --git a/packages/web3-providers-http/types/tslint.json b/packages/web3-providers-http/types/tslint.json deleted file mode 100644 index 6429b0c446e..00000000000 --- a/packages/web3-providers-http/types/tslint.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false - } -} diff --git a/packages/web3-providers-ipc/.eslintignore b/packages/web3-providers-ipc/.eslintignore new file mode 100644 index 00000000000..e3d7e665285 --- /dev/null +++ b/packages/web3-providers-ipc/.eslintignore @@ -0,0 +1,4 @@ +dist +lib +jest.config.js +.eslintrc.js diff --git a/packages/web3-providers-ipc/.eslintrc.js b/packages/web3-providers-ipc/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-providers-ipc/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-providers-ipc/.gitignore b/packages/web3-providers-ipc/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-providers-ipc/.npmignore b/packages/web3-providers-ipc/.npmignore new file mode 100644 index 00000000000..0b1a9d71c23 --- /dev/null +++ b/packages/web3-providers-ipc/.npmignore @@ -0,0 +1,26 @@ +.babelrc +.eslintignore +.eslintrc.json +.eslintrc.js +.gitignore +.lintstagedrc.json +.nycrc +.prettierrc.json +.prettierignore +cypress.json +index.html +Jenkinsfile* +*.log + +.nyc_output/ +coverage/ +benchmark/ +.coverage/ +cypress/ +fixtures/ +tmp/ +logs/ +test/ +scripts/ +browsertest/ +examples/ diff --git a/packages/web3-providers-ipc/.prettierignore b/packages/web3-providers-ipc/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-providers-ipc/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-providers-ipc/.prettierrc.json b/packages/web3-providers-ipc/.prettierrc.json new file mode 100644 index 00000000000..7b23ef55098 --- /dev/null +++ b/packages/web3-providers-ipc/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": true, + "arrowParens": "avoid" +} diff --git a/packages/web3-providers-ipc/CHANGELOG.md b/packages/web3-providers-ipc/CHANGELOG.md new file mode 100644 index 00000000000..6f75b93995e --- /dev/null +++ b/packages/web3-providers-ipc/CHANGELOG.md @@ -0,0 +1,138 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [4.0.1-alpha.1] + +### Added + +- Show error message and return dummy promise if socket is not writable (#5294) + +## [4.0.1-alpha.2] + +### Changed + +- Updated Web3.js dependencies (#5664) + +## [4.0.1-alpha.3] + +### Changed + +- Updated dependencies (#5725) + +## [4.0.1-alpha.4] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) +- Refactor to use common SocketProvider class (#5683) +- Legacy Event `close` has been deprecated, superseded by `disconnect` (#5683) + +## [4.0.1-alpha.5] + +### Changed + +- web3.js dependencies (#5757) + +## [4.0.1-rc.0] + +### Added + +- Added named export for `IpcProvider` (#5771) +- Pass `_socketOptions` from `IpcProvider` constructor to the underlying `Socket` (#5891) +- The getter of `SocketConnection` in `IpcProvider` (inherited from `SocketProvider`) returns `net.Socket` (#5891) + +## [4.0.1-rc.1] + +### Added + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +## [4.0.1-rc.2] + +### Changed + +- Replaced Buffer for Uint8Array (#6004) + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Changed + +- Dependencies updated + +## [4.0.3] + +### Changed + +- Dependencies updated + +## [4.0.4] + +### Changed + +- Dependencies updated + +## [4.0.5] + +### Changed + +- Dependencies updated + +## [4.0.6] + +### Changed + +- Dependencies updated + +## [4.0.7] + +### Fixed + +- Fixed bug in chunks processing logic (#6496) + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-providers-ipc/README.md b/packages/web3-providers-ipc/README.md index 23b7ddffce4..39913cd9584 100644 --- a/packages/web3-providers-ipc/README.md +++ b/packages/web3-providers-ipc/README.md @@ -1,37 +1,59 @@ -# web3-providers-ipc +

+ web3.js +

-[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +# web3.js - IPC Provider -This is an IPC provider sub-package for [web3.js][repo]. +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] -Please read the [documentation][docs] for more. +This is a sub-package of [web3.js][repo]. + +`web3-providers-ipc` contains the Web3.js provider for Inter Process Communication (IPC). ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3-providers-ipc) or using [Yarn](https://yarnpkg.com/package/web3-providers-ipc) + +### Using NPM ```bash npm install web3-providers-ipc ``` -## Usage +### Using Yarn -```js -const Web3IpcProvider = require('web3-providers-ipc'); -const net = require(net); - -const ipc = new Web3IpcProvider('/Users/me/Library/Ethereum/geth.ipc', net); +```bash +yarn add web3-providers-ipc ``` -## Types +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts -All the TypeScript typings are placed in the `types` folder. +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-providers-ipc.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-probiders-ipc +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-providers-ipc%2Fpackage.json [npm-url]: https://npmjs.org/package/web3-providers-ipc -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-providers-ipc -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-providers-ipc -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-providers-ipc -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-providers-ipc +[downloads-image]: https://img.shields.io/npm/dm/web3-providers-ipc?label=npm%20downloads diff --git a/packages/web3-providers-ipc/assets/logo/web3js.ai b/packages/web3-providers-ipc/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-providers-ipc/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-providers-ipc/assets/logo/web3js.jpg b/packages/web3-providers-ipc/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-providers-ipc/assets/logo/web3js.jpg differ diff --git a/packages/web3-providers-ipc/assets/logo/web3js.svg b/packages/web3-providers-ipc/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-providers-ipc/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-providers-ipc/package-lock.json b/packages/web3-providers-ipc/package-lock.json deleted file mode 100644 index 0b1a7dcc00c..00000000000 --- a/packages/web3-providers-ipc/package-lock.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "web3-providers-ipc", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/node": { - "version": "12.12.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.26.tgz", - "integrity": "sha512-UmUm94/QZvU5xLcUlNR8hA7Ac+fGpO1EG/a8bcWVz0P0LqtxFmun9Y2bbtuckwGboWJIT70DoWq1r3hb56n3DA==", - "dev": true - }, - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-providers-ipc/package.json b/packages/web3-providers-ipc/package.json index 332d9c2db6e..e0052448ae3 100644 --- a/packages/web3-providers-ipc/package.json +++ b/packages/web3-providers-ipc/package.json @@ -1,26 +1,63 @@ { - "name": "web3-providers-ipc", - "version": "1.3.0", - "description": "Module to handle web3 RPC connections over IPC sockets.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-providers-ipc", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "types": "types/index.d.ts", - "main": "lib/index.js", - "dependencies": { - "oboe": "2.1.5", - "underscore": "1.9.1", - "web3-core-helpers": "1.3.0" - }, - "devDependencies": { - "@types/node": "^12.12.6", - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3-providers-ipc", + "version": "4.0.7", + "description": "IPC provider for Web3 4.x.x", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + }, + "dependencies": { + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" + } } diff --git a/packages/web3-providers-ipc/src/index.js b/packages/web3-providers-ipc/src/index.js deleted file mode 100644 index e0fcdeefb70..00000000000 --- a/packages/web3-providers-ipc/src/index.js +++ /dev/null @@ -1,325 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file index.js - * @authors: - * Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var _ = require('underscore'); -var errors = require('web3-core-helpers').errors; -var oboe = require('oboe'); - - -var IpcProvider = function IpcProvider(path, net) { - var _this = this; - this.responseCallbacks = {}; - this.notificationCallbacks = []; - this.path = path; - this.connected = false; - - this.connection = net.connect({path: this.path}); - - this.addDefaultEvents(); - - // LISTEN FOR CONNECTION RESPONSES - var callback = function(result) { - /*jshint maxcomplexity: 6 */ - - var id = null; - - // get the id which matches the returned id - if(_.isArray(result)) { - result.forEach(function(load){ - if(_this.responseCallbacks[load.id]) - id = load.id; - }); - } else { - id = result.id; - } - - // notification - if(!id && result.method.indexOf('_subscription') !== -1) { - _this.notificationCallbacks.forEach(function(callback){ - if(_.isFunction(callback)) - callback(result); - }); - - // fire the callback - } else if(_this.responseCallbacks[id]) { - _this.responseCallbacks[id](null, result); - delete _this.responseCallbacks[id]; - } - }; - - // use oboe.js for Sockets - if (net.constructor.name === 'Socket') { - oboe(this.connection) - .done(callback); - } else { - this.connection.on('data', function(data){ - _this._parseResponse(data.toString()).forEach(callback); - }); - } -}; - -/** -Will add the error and end event to timeout existing calls - -@method addDefaultEvents -*/ -IpcProvider.prototype.addDefaultEvents = function(){ - var _this = this; - - this.connection.on('connect', function(){ - _this.connected = true; - }); - - this.connection.on('close', function(){ - _this.connected = false; - }); - - this.connection.on('error', function(){ - _this._timeout(); - }); - - this.connection.on('end', function(){ - _this._timeout(); - }); - - this.connection.on('timeout', function(){ - _this._timeout(); - }); -}; - - -/** - Will parse the response and make an array out of it. - - NOTE, this exists for backwards compatibility reasons. - - @method _parseResponse - @param {String} data - */ -IpcProvider.prototype._parseResponse = function(data) { - var _this = this, - returnValues = []; - - // DE-CHUNKER - var dechunkedData = data - .replace(/\}[\n\r]?\{/g,'}|--|{') // }{ - .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{ - .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{ - .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{ - .split('|--|'); - - dechunkedData.forEach(function(data){ - - // prepend the last chunk - if(_this.lastChunk) - data = _this.lastChunk + data; - - var result = null; - - try { - result = JSON.parse(data); - - } catch(e) { - - _this.lastChunk = data; - - // start timeout to cancel all requests - clearTimeout(_this.lastChunkTimeout); - _this.lastChunkTimeout = setTimeout(function(){ - _this._timeout(); - throw errors.InvalidResponse(data); - }, 1000 * 15); - - return; - } - - // cancel timeout and set chunk to null - clearTimeout(_this.lastChunkTimeout); - _this.lastChunk = null; - - if(result) - returnValues.push(result); - }); - - return returnValues; -}; - - -/** -Get the adds a callback to the responseCallbacks object, -which will be called if a response matching the response Id will arrive. - -@method _addResponseCallback -*/ -IpcProvider.prototype._addResponseCallback = function(payload, callback) { - var id = payload.id || payload[0].id; - var method = payload.method || payload[0].method; - - this.responseCallbacks[id] = callback; - this.responseCallbacks[id].method = method; -}; - -/** -Timeout all requests when the end/error event is fired - -@method _timeout -*/ -IpcProvider.prototype._timeout = function() { - for(var key in this.responseCallbacks) { - if(this.responseCallbacks.hasOwnProperty(key)){ - this.responseCallbacks[key](errors.InvalidConnection('on IPC')); - delete this.responseCallbacks[key]; - } - } -}; - -/** - Try to reconnect - - @method reconnect - */ -IpcProvider.prototype.reconnect = function() { - this.connection.connect({path: this.path}); -}; - - -IpcProvider.prototype.send = function (payload, callback) { - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - - this.connection.write(JSON.stringify(payload)); - this._addResponseCallback(payload, callback); -}; - -/** -Subscribes to provider events.provider - -@method on -@param {String} type 'notification', 'connect', 'error', 'end' or 'data' -@param {Function} callback the callback to call -*/ -IpcProvider.prototype.on = function (type, callback) { - - if(typeof callback !== 'function') - throw new Error('The second parameter callback must be a function.'); - - switch(type){ - case 'data': - this.notificationCallbacks.push(callback); - break; - - // adds error, end, timeout, connect - default: - this.connection.on(type, callback); - break; - } -}; - -/** - Subscribes to provider events.provider - - @method on - @param {String} type 'connect', 'error', 'end' or 'data' - @param {Function} callback the callback to call - */ -IpcProvider.prototype.once = function (type, callback) { - - if(typeof callback !== 'function') - throw new Error('The second parameter callback must be a function.'); - - this.connection.once(type, callback); -}; - -/** -Removes event listener - -@method removeListener -@param {String} type 'data', 'connect', 'error', 'end' or 'data' -@param {Function} callback the callback to call -*/ -IpcProvider.prototype.removeListener = function (type, callback) { - var _this = this; - - switch(type){ - case 'data': - this.notificationCallbacks.forEach(function(cb, index){ - if(cb === callback) - _this.notificationCallbacks.splice(index, 1); - }); - break; - - default: - this.connection.removeListener(type, callback); - break; - } -}; - -/** -Removes all event listeners - -@method removeAllListeners -@param {String} type 'data', 'connect', 'error', 'end' or 'data' -*/ -IpcProvider.prototype.removeAllListeners = function (type) { - switch(type){ - case 'data': - this.notificationCallbacks = []; - break; - - default: - this.connection.removeAllListeners(type); - break; - } -}; - -/** -Resets the providers, clears all callbacks - -@method reset -*/ -IpcProvider.prototype.reset = function () { - this._timeout(); - this.notificationCallbacks = []; - - this.connection.removeAllListeners('error'); - this.connection.removeAllListeners('end'); - this.connection.removeAllListeners('timeout'); - - this.addDefaultEvents(); -}; - -/** - * Returns the desired boolean. - * - * @method supportsSubscriptions - * @returns {boolean} - */ -IpcProvider.prototype.supportsSubscriptions = function () { - return true; -}; - -module.exports = IpcProvider; - diff --git a/packages/web3-providers-ipc/src/index.ts b/packages/web3-providers-ipc/src/index.ts new file mode 100644 index 00000000000..641d36ea083 --- /dev/null +++ b/packages/web3-providers-ipc/src/index.ts @@ -0,0 +1,161 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Socket, SocketConstructorOpts } from 'net'; +import { ConnectionNotOpenError, InvalidClientError } from 'web3-errors'; +import { ReconnectOptions, SocketProvider, toUtf8 } from 'web3-utils'; +import { + EthExecutionAPI, + Web3APIMethod, + Web3APIPayload, + Web3APISpec, + Web3ProviderStatus, +} from 'web3-types'; +import { existsSync } from 'fs'; + +/** + * The IPC Provider could be used in node.js dapps when running a local node. And it provide the most secure connection. + * + * @example + * ```ts + * const provider = new IpcProvider( + * `path.ipc`, + * { + * writable: false, + * }, + * { + * delay: 500, + * autoReconnect: true, + * maxAttempts: 10, + * }, + * ); + * ``` + * + * The second and the third parameters are both optional. And you can for example, the second parameter could be an empty object or undefined. + * * @example + * ```ts + * const provider = new IpcProvider( + * `path.ipc`, + * {}, + * { + * delay: 500, + * autoReconnect: true, + * maxAttempts: 10, + * }, + * ); + * ``` + */ +export default class IpcProvider extends SocketProvider< + Uint8Array | string, + CloseEvent, + Error, + API +> { + protected readonly _socketOptions?: SocketConstructorOpts; + + protected _socketConnection?: Socket; + + /** + * This is a class used for IPC connections. It extends the abstract class SocketProvider {@link SocketProvider} that extends the EIP-1193 provider {@link EIP1193Provider}. + * @param socketPath - The path to the IPC socket. + * @param socketOptions - The options for the IPC socket connection. + * @param reconnectOptions - The options for the socket reconnection {@link ReconnectOptions} + */ + // this constructor is to specify the type for `socketOptions` for a better intellisense. + // eslint-disable-next-line no-useless-constructor + public constructor( + socketPath: string, + socketOptions?: SocketConstructorOpts, + reconnectOptions?: Partial, + ) { + super(socketPath, socketOptions, reconnectOptions); + } + + public getStatus(): Web3ProviderStatus { + if (this._socketConnection?.connecting) { + return 'connecting'; + } + return this._connectionStatus; + } + + protected _openSocketConnection() { + if (!existsSync(this._socketPath)) { + throw new InvalidClientError(this._socketPath); + } + if (!this._socketConnection || this.getStatus() === 'disconnected') { + this._socketConnection = new Socket(this._socketOptions); + } + + this._socketConnection.connect({ path: this._socketPath }); + } + + protected _closeSocketConnection(code: number, data?: string) { + this._socketConnection?.end(() => { + this._onDisconnect(code, data); + }); + } + + protected _sendToSocket>( + payload: Web3APIPayload, + ): void { + if (this.getStatus() === 'disconnected') { + throw new ConnectionNotOpenError(); + } + this._socketConnection?.write(JSON.stringify(payload)); + } + + protected _parseResponses(e: Uint8Array | string) { + return this.chunkResponseParser.parseResponse(typeof e === 'string' ? e : toUtf8(e)); + } + + protected _addSocketListeners(): void { + this._socketConnection?.on('data', this._onMessageHandler); + this._socketConnection?.on('connect', this._onOpenHandler); + this._socketConnection?.on('close', this._onClose.bind(this)); + this._socketConnection?.on('end', this._onCloseHandler); + this._socketConnection?.on('error', this._onErrorHandler); + } + + protected _removeSocketListeners(): void { + this._socketConnection?.removeAllListeners('connect'); + this._socketConnection?.removeAllListeners('end'); + this._socketConnection?.removeAllListeners('close'); + this._socketConnection?.removeAllListeners('data'); + // note: we intentionally keep the error event listener to be able to emit it in case an error happens when closing the connection + } + + protected _onCloseEvent(event: CloseEvent): void { + if (!event && this._reconnectOptions.autoReconnect) { + this._connectionStatus = 'disconnected'; + this._reconnect(); + return; + } + + this._clearQueues(event); + this._removeSocketListeners(); + this._onDisconnect(event?.code, event?.reason); + // disconnect was successful and can safely remove error listener + this._socketConnection?.removeAllListeners('error'); + } + + protected _onClose(event: CloseEvent): void { + this._clearQueues(event); + this._removeSocketListeners(); + } +} + +export { IpcProvider }; diff --git a/packages/web3-providers-ipc/test/.eslintrc.js b/packages/web3-providers-ipc/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-providers-ipc/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-providers-ipc/test/config/jest.config.js b/packages/web3-providers-ipc/test/config/jest.config.js new file mode 100644 index 00000000000..6c71b126961 --- /dev/null +++ b/packages/web3-providers-ipc/test/config/jest.config.js @@ -0,0 +1,45 @@ +module.exports = { + globals: { + 'ts-jest': { + tsconfig: './test/tsconfig.json', + }, + }, + rootDir: '../..', + testMatch: ['/test/**/?(*.)+(spec|test).+(ts|tsx|js)'], + setupFilesAfterEnv: ['/test/config/setup.js'], + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + verbose: false, + collectCoverage: false, + coverageReporters: ['json'], + coverageDirectory: '.coverage', + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + + resetMocks: true, +}; diff --git a/packages/web3-providers-ipc/test/config/setup.js b/packages/web3-providers-ipc/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-providers-ipc/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-providers-ipc/test/fixtures/accounts.json b/packages/web3-providers-ipc/test/fixtures/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3-providers-ipc/test/fixtures/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3-providers-ipc/test/fixtures/helpers.ts b/packages/web3-providers-ipc/test/fixtures/helpers.ts new file mode 100644 index 00000000000..89aabfe22c9 --- /dev/null +++ b/packages/web3-providers-ipc/test/fixtures/helpers.ts @@ -0,0 +1,57 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { exec } from 'child_process'; +import path from 'path'; +import fs from 'fs'; + +const IPC_DIR_PATH = path.join(__dirname, '..', '..', '..', '..', 'tmp'); +const IPC_PATH = path.join(IPC_DIR_PATH, 'some.ipc'); +const IPC_ORIGIN_PATH = path.join(IPC_DIR_PATH, 'some.ipc'); + +const createSymlink = `ln -s ${path.join(IPC_DIR_PATH, 'ipc.ipc')} ${IPC_ORIGIN_PATH}`; + +const execPromise = async (command: string): Promise => + new Promise((resolve, reject) => { + exec(command, (error, stdout, stderr) => { + if (error) { + reject(error); + return; + } + if (stderr) { + reject(stderr); + return; + } + resolve(stdout); + }); + }); + +const removeIfExists = () => { + if (fs.existsSync(IPC_PATH)) { + fs.unlinkSync(IPC_PATH); + } +}; +export const startGethServer = async (): Promise<{ path: string; close: () => void }> => { + removeIfExists(); + await execPromise(createSymlink); + return { + path: IPC_PATH, + close: (): void => { + removeIfExists(); + }, + }; +}; diff --git a/packages/web3-providers-ipc/test/fixtures/system_test_utils.ts b/packages/web3-providers-ipc/test/fixtures/system_test_utils.ts new file mode 120000 index 00000000000..2ab08a83752 --- /dev/null +++ b/packages/web3-providers-ipc/test/fixtures/system_test_utils.ts @@ -0,0 +1 @@ +../../../../scripts/system_tests_utils.ts \ No newline at end of file diff --git a/packages/web3-providers-ipc/test/fixtures/test_data.ts b/packages/web3-providers-ipc/test/fixtures/test_data.ts new file mode 100644 index 00000000000..c1bddff0444 --- /dev/null +++ b/packages/web3-providers-ipc/test/fixtures/test_data.ts @@ -0,0 +1,45 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const validConnectionStrings = [ + 'ws://localhost:8545', + 'ws://www.localhost', + 'ws://localhost', + 'wss://foo.com', + 'ws://foo.ninja', + 'wss://foo.com', + 'ws://foo.com:8545', +]; + +export const invalidConnectionStrings = [ + 'htt://localhost:8545', + 'http//localhost:8545', + 'ipc://localhost:8545', + '', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + undefined, + 42, +]; + +export const wsProviderOptions = { + followRedirects: true, + handshakeTimeout: 1500, + maxRedirects: 3, + perMessageDeflate: true, +}; diff --git a/packages/web3-providers-ipc/test/integration/eip1193.test.ts b/packages/web3-providers-ipc/test/integration/eip1193.test.ts new file mode 100644 index 00000000000..74ab2b32aa8 --- /dev/null +++ b/packages/web3-providers-ipc/test/integration/eip1193.test.ts @@ -0,0 +1,103 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { hexToNumber } from 'web3-utils'; +import { HexString, ProviderRpcError, ProviderConnectInfo } from 'web3-types'; +import { IpcProvider } from '../../src/index'; + +import { + describeIf, + getSystemTestProviderUrl, + isIpc, + waitForSocketConnect, + waitForSocketDisconnect, +} from '../fixtures/system_test_utils'; + +describeIf(isIpc)('IpcProvider - eip1193', () => { + let socketPath: string; + let socketProvider: IpcProvider; + + beforeAll(() => { + socketPath = getSystemTestProviderUrl(); + }); + beforeEach(() => { + socketProvider = new IpcProvider(socketPath); + }); + afterEach(async () => { + socketProvider.disconnect(1000); + await waitForSocketDisconnect(socketProvider); + }); + + describe('check events', () => { + it('should send connect event', async () => { + const providerConnectInfo = await new Promise(resolve => { + socketProvider.on('connect', (data: ProviderConnectInfo) => { + resolve(data); + }); + }); + expect(hexToNumber(providerConnectInfo.chainId)).toBeGreaterThan(0); + }); + it('should send disconnect event', async () => { + await waitForSocketConnect(socketProvider); + const disconnectPromise = new Promise(resolve => { + socketProvider.on('disconnect', (error: ProviderRpcError) => { + resolve(error); + }); + }); + socketProvider.disconnect(1000, 'Some extra data'); + + const err = await disconnectPromise; + expect(err.code).toBe(1000); + expect(err.data).toBe('Some extra data'); + }); + it('should send chainChanged event', async () => { + await waitForSocketConnect(socketProvider); + // @ts-expect-error set private variable + socketProvider._chainId = '0x1'; + socketProvider.disconnect(1000); + await waitForSocketDisconnect(socketProvider); + const chainChangedPromise = new Promise(resolve => { + socketProvider.on('chainChanged', (result: HexString) => { + resolve(result); + }); + }); + socketProvider.connect(); + await waitForSocketConnect(socketProvider); + const chainId = await chainChangedPromise; + expect(chainId).not.toBe('0x1'); + expect(hexToNumber(chainId)).toBeGreaterThan(0); + }); + it('should send accountsChanged event', async () => { + await waitForSocketConnect(socketProvider); + + // @ts-expect-error set private variable + socketProvider._accounts = ['1', '2']; + socketProvider.disconnect(1000); + await waitForSocketDisconnect(socketProvider); + const chainChangedPromise = new Promise(resolve => { + socketProvider.on('accountsChanged', (accounts: HexString[]) => { + resolve(accounts); + }); + }); + socketProvider.connect(); + await waitForSocketConnect(socketProvider); + const accounts = await chainChangedPromise; + + expect(JSON.stringify(accounts)).not.toBe(JSON.stringify(['1', '2'])); + }); + }); +}); diff --git a/packages/web3-providers-ipc/test/integration/jest.config.js b/packages/web3-providers-ipc/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-providers-ipc/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-providers-ipc/test/integration/reconnection.test.ts b/packages/web3-providers-ipc/test/integration/reconnection.test.ts new file mode 100644 index 00000000000..f7b1bcd05d5 --- /dev/null +++ b/packages/web3-providers-ipc/test/integration/reconnection.test.ts @@ -0,0 +1,112 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { IpcProvider } from '../../src'; + +import { startGethServer } from '../fixtures/helpers'; +import { + describeIf, + getSystemTestProviderUrl, + isIpc, + waitForSocketConnect, + waitForCloseSocketConnection, + waitForEvent, +} from '../fixtures/system_test_utils'; + +describeIf(isIpc)('IpcSocketProvider - reconnection', () => { + describe('subscribe event tests', () => { + let reconnectionOptions: { + delay: number; + autoReconnect: boolean; + maxAttempts: number; + }; + beforeAll(() => { + reconnectionOptions = { + delay: 50, + autoReconnect: true, + maxAttempts: 1000, + }; + }); + it('check defaults', async () => { + const web3Provider = new IpcProvider(getSystemTestProviderUrl()); + // @ts-expect-error-next-line + expect(web3Provider._reconnectOptions).toEqual({ + autoReconnect: true, + delay: 5000, + maxAttempts: 5, + }); + await waitForSocketConnect(web3Provider); + web3Provider.disconnect(1000, 'test'); + await waitForCloseSocketConnection(web3Provider); + }); + it('set custom reconnectOptions', async () => { + const web3Provider = new IpcProvider( + getSystemTestProviderUrl(), + {}, + reconnectionOptions, + ); + // @ts-expect-error-next-line + expect(web3Provider._reconnectOptions).toEqual(reconnectionOptions); + await waitForSocketConnect(web3Provider); + web3Provider.disconnect(1000, 'test'); + await waitForCloseSocketConnection(web3Provider); + }); + it('should emit connect and disconnected events', async () => { + const web3Provider = new IpcProvider(getSystemTestProviderUrl()); + expect(!!(await waitForEvent(web3Provider, 'connect'))).toBe(true); + const disconnectPromise = waitForEvent(web3Provider, 'disconnect'); + web3Provider.disconnect(); + expect(!!(await disconnectPromise)).toBe(true); + // @ts-expect-error read protected property + expect(web3Provider.isReconnecting).toBe(false); + }); + it('should connect, disconnect and reconnect', async () => { + const web3Provider = new IpcProvider( + getSystemTestProviderUrl(), + {}, + reconnectionOptions, + ); + expect(!!(await waitForEvent(web3Provider, 'connect'))).toBe(true); + const connectEvent = waitForEvent(web3Provider, 'connect'); + // @ts-expect-error call protected function + web3Provider._socketConnection?.end(); + expect(!!(await connectEvent)).toBe(true); + web3Provider.disconnect(); + await waitForEvent(web3Provider, 'disconnect'); + }); + it('should connect, disconnect, try reconnect and reach max attempts', async () => { + const server = await startGethServer(); + const web3Provider = new IpcProvider( + server.path, + {}, + { + ...reconnectionOptions, + delay: 1, + maxAttempts: 3, + }, + ); + expect(!!(await waitForEvent(web3Provider, 'connect'))).toBe(true); + server.close(); + // @ts-expect-error call protected function + web3Provider._socketConnection?.end(); + const errorEvent = waitForEvent(web3Provider, 'error'); + + const error = (await errorEvent) as Error; + expect(error.message).toBe(`Maximum number of reconnect attempts reached! (${3})`); + }); + }); +}); diff --git a/packages/web3-providers-ipc/test/integration/setup.js b/packages/web3-providers-ipc/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-providers-ipc/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-providers-ipc/test/tsconfig.json b/packages/web3-providers-ipc/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-providers-ipc/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-providers-ipc/test/unit/check_implementation.test.ts b/packages/web3-providers-ipc/test/unit/check_implementation.test.ts new file mode 100644 index 00000000000..3b75744a25a --- /dev/null +++ b/packages/web3-providers-ipc/test/unit/check_implementation.test.ts @@ -0,0 +1,193 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import * as fs from 'fs'; +import net from 'net'; +import { IpcProvider } from '../../src/index'; + +jest.mock('net'); +jest.mock('fs'); + +describe('IPCProvider', () => { + let socketPath: string; + + beforeEach(() => { + socketPath = '/test/test.ipc'; + jest.spyOn(fs, 'existsSync').mockReturnValue(true); + jest.spyOn(net.Socket.prototype, 'connect').mockImplementation(jest.fn()); + jest.spyOn(net.Socket.prototype, 'write').mockImplementation(jest.fn()); + }); + + describe('methods', () => { + it.each(['_openSocketConnection', '_addSocketListeners'])( + 'should call method %s', + method => { + const _method = jest.fn(); + // @ts-expect-error mock method + jest.spyOn(IpcProvider.prototype, method).mockImplementation(_method); + const ipc = new IpcProvider(socketPath); + expect(ipc).toBeDefined(); + expect(_method).toHaveBeenCalled(); + }, + ); + it('should construct with expected methods', () => { + const _closeSocketConnection = jest.fn(); + const _removeSocketListeners = jest.fn(); + const _onDisconnect = jest.fn(); + + const code = 1002; + const data = 'data'; + // @ts-expect-error mock method + jest.spyOn(IpcProvider.prototype, '_closeSocketConnection').mockImplementation( + _closeSocketConnection, + ); + // @ts-expect-error mock method + jest.spyOn(IpcProvider.prototype, '_removeSocketListeners').mockImplementation( + _removeSocketListeners, + ); + // @ts-expect-error mock method + jest.spyOn(IpcProvider.prototype, '_onDisconnect').mockImplementation(_onDisconnect); + const ipc = new IpcProvider(socketPath); + // @ts-expect-error mock method + ipc._parseResponses = jest.fn(); + ipc.disconnect(code, data); + expect(_removeSocketListeners).toHaveBeenCalled(); + expect(_onDisconnect).toHaveBeenCalledWith(code, data); + expect(_closeSocketConnection).toHaveBeenCalledWith(code, data); + }); + it('getStatus', () => { + const ipc = new IpcProvider(socketPath); + // @ts-expect-error mock field + ipc._socketConnection.connecting = true; + expect(ipc.getStatus()).toBe('connecting'); + }); + it('socketConnection.end', () => { + const ipc = new IpcProvider(socketPath); + const end = jest.fn((cb: () => void) => { + cb(); + }); + const _onDisconnect = jest.fn(); + // @ts-expect-error mock method + ipc._socketConnection.end = end; + // @ts-expect-error mock method + ipc._onDisconnect = _onDisconnect; + const code = 1002; + const data = 'data'; + // @ts-expect-error mock field + ipc._socketConnection.connecting = false; + // @ts-expect-error mock field + ipc._connectionStatus = 'connected'; + expect(ipc.getStatus()).toBe('connected'); + ipc.disconnect(code, data); + + expect(_onDisconnect).toHaveBeenCalledWith(code, data); + expect(end).toHaveBeenCalled(); + }); + + it('connection error', async () => { + const ipc = new IpcProvider(socketPath); + // @ts-expect-error mock method + ipc._socketConnection.connecting = false; + // @ts-expect-error mock method + ipc._connectionStatus = 'disconnected'; + ipc.connect = jest.fn(); + + await expect( + ipc.request({ + jsonrpc: '2.0', + id: 42, + method: 'eth_getBalance', + params: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', 'latest'], + }), + ).rejects.toThrow('Connection not open'); + }); + it('_onCloseHandler autoReconnect=false', () => { + const ipc = new IpcProvider(socketPath, {}, { autoReconnect: false }); + const _clearQueues = jest.fn(); + const _removeSocketListeners = jest.fn(); + const _onDisconnect = jest.fn(); + + // @ts-expect-error mock method + ipc._clearQueues = _clearQueues; + // @ts-expect-error mock method + ipc._removeSocketListeners = _removeSocketListeners; + // @ts-expect-error mock method + ipc._onDisconnect = _onDisconnect; + // @ts-expect-error mock method + ipc._socketConnection.connecting = false; + // @ts-expect-error emit method + ipc._connectionStatus = 'connected'; + + // @ts-expect-error emit method + ipc._onCloseHandler(); + expect(_clearQueues).toHaveBeenCalled(); + expect(_removeSocketListeners).toHaveBeenCalled(); + expect(_onDisconnect).toHaveBeenCalledWith(undefined, undefined); + }); + it('_onCloseHandler autoReconnect=true', () => { + const ipc = new IpcProvider(socketPath); + const _reconnect = jest.fn(); + // @ts-expect-error mock method + ipc._reconnect = _reconnect; + + // @ts-expect-error emit event + ipc._onCloseHandler(); + expect(_reconnect).toHaveBeenCalled(); + }); + it('listeners', () => { + const ipc = new IpcProvider(socketPath, undefined, { autoReconnect: false }); + // @ts-expect-error mock method + ipc.chunkResponseParser.parseResponse = jest.fn(() => { + return []; + }); + // @ts-expect-error mock method + ipc._socketConnection.listeners = () => { + throw new Error('error'); + }; + const on = jest.fn((event: string, cb: (data?: string) => void) => { + if (event === 'error') { + cb('error'); + } else if (event === 'data') { + cb('data'); + } else { + cb(); + } + }); + // @ts-expect-error mock method + ipc._socketConnection.on = on; + // @ts-expect-error mock method + ipc.isReconnecting = true; + // @ts-expect-error mock method + ipc._reconnect = jest.fn(); + // @ts-expect-error mock method + ipc._clearQueues = jest.fn(); + // @ts-expect-error mock method + ipc._addSocketListeners(); + // @ts-expect-error mock method + expect(on).toHaveBeenCalledWith('error', ipc._onErrorHandler); + const removeAllListeners = jest.fn(); + // @ts-expect-error mock method + ipc._socketConnection.removeAllListeners = removeAllListeners; + // @ts-expect-error mock method + ipc.isReconnecting = false; + ipc.disconnect(); + expect(removeAllListeners).toHaveBeenCalledWith('end'); + expect(removeAllListeners).toHaveBeenCalledWith('close'); + expect(removeAllListeners).toHaveBeenCalledWith('data'); + expect(removeAllListeners).toHaveBeenCalledWith('connect'); + }); + }); +}); diff --git a/packages/web3-providers-ipc/test/unit/ipc_provider.test.ts b/packages/web3-providers-ipc/test/unit/ipc_provider.test.ts new file mode 100644 index 00000000000..b607e8b92a0 --- /dev/null +++ b/packages/web3-providers-ipc/test/unit/ipc_provider.test.ts @@ -0,0 +1,107 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Socket } from 'net'; +import * as fs from 'fs'; +import { ConnectionError, InvalidClientError } from 'web3-errors'; +import { IpcProvider } from '../../src/index'; + +jest.mock('net'); +jest.mock('fs'); + +describe('IpcProvider', () => { + let socketPath: string; + + beforeEach(() => { + socketPath = '/test/test.ipc'; + jest.spyOn(fs, 'existsSync').mockReturnValue(true); + }); + + describe('constructor', () => { + it('should construct the instance of the provider', () => { + const provider = new IpcProvider(socketPath); + expect(provider).toBeInstanceOf(IpcProvider); + expect(provider.SocketConnection).toBeInstanceOf(Socket); + }); + + it('should try to connect', () => { + const connectSpy = jest.spyOn(IpcProvider.prototype, 'connect'); + // eslint-disable-next-line no-new + new IpcProvider(socketPath); + + expect(connectSpy).toHaveBeenCalled(); + }); + }); + + describe('connect', () => { + it('should verify socket path', () => { + // eslint-disable-next-line no-new + new IpcProvider(socketPath); + + expect(fs.existsSync).toHaveBeenCalledWith(socketPath); + expect(fs.existsSync).toHaveBeenCalledTimes(1); + }); + + it('should throw error if socket path does not exists', () => { + jest.spyOn(fs, 'existsSync').mockReturnValue(false); + expect(() => new IpcProvider(socketPath)).toThrow( + new ConnectionError( + `Error while connecting to ${socketPath}. Reason: ${ + new InvalidClientError(socketPath).message + }`, + ), + ); + }); + + it('should add listeners to socket', () => { + const provider = new IpcProvider(socketPath); + // @ts-expect-error-next-line + jest.spyOn(provider._socketConnection, 'on'); + + // @ts-expect-error-next-line + expect(provider._socketConnection.on).toHaveBeenCalledWith( + 'connect', + expect.any(Function), + ); + // @ts-expect-error-next-line + expect(provider._socketConnection.on).toHaveBeenCalledWith('end', expect.any(Function)); + // @ts-expect-error-next-line + expect(provider._socketConnection.on).toHaveBeenCalledWith( + 'close', + expect.any(Function), + ); + // @ts-expect-error-next-line + expect(provider._socketConnection.on).toHaveBeenCalledWith( + 'data', + expect.any(Function), + ); + }); + + it('should connect to socket path', () => { + const provider = new IpcProvider(socketPath); + // @ts-expect-error-next-line + jest.spyOn(provider._socketConnection, 'connect'); + + // @ts-expect-error-next-line + expect(provider._socketConnection.connect).toHaveBeenCalledTimes(1); + // @ts-expect-error-next-line + expect(provider._socketConnection.connect).toHaveBeenCalledWith({ + path: socketPath, + }); + }); + }); +}); diff --git a/packages/web3-providers-ipc/test/unit/jest.config.js b/packages/web3-providers-ipc/test/unit/jest.config.js new file mode 100644 index 00000000000..bd20de1a9bf --- /dev/null +++ b/packages/web3-providers-ipc/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-providers-ipc-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-providers-ipc/tsconfig.cjs.json b/packages/web3-providers-ipc/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-providers-ipc/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-providers-ipc/tsconfig.esm.json b/packages/web3-providers-ipc/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-providers-ipc/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-providers-ipc/tsconfig.json b/packages/web3-providers-ipc/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-providers-ipc/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-providers-ipc/tsconfig.types.json b/packages/web3-providers-ipc/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-providers-ipc/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-providers-ipc/tsdoc.json b/packages/web3-providers-ipc/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-providers-ipc/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-providers-ipc/types/index.d.ts b/packages/web3-providers-ipc/types/index.d.ts deleted file mode 100644 index b18f4326f51..00000000000 --- a/packages/web3-providers-ipc/types/index.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens - * @date 2018 - */ - -import { IpcProviderBase } from 'web3-core-helpers'; - -export class IpcProvider extends IpcProviderBase { } diff --git a/packages/web3-providers-ipc/types/tests/web3-provider-ipc-tests.ts b/packages/web3-providers-ipc/types/tests/web3-provider-ipc-tests.ts deleted file mode 100644 index 19b0fcb4ab5..00000000000 --- a/packages/web3-providers-ipc/types/tests/web3-provider-ipc-tests.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file web3-provider-ipc-tests.ts - * @author Josh Stevens - * @date 2018 - */ - -import * as net from 'net'; -import { IpcProvider } from 'web3-providers'; -import { JsonRpcResponse } from 'web3-core-helpers'; - -const ipcProvider = new IpcProvider( - '/Users/myuser/Library/Ethereum/geth.ipc', - new net.Server() -); - -// $ExpectType any -ipcProvider.responseCallbacks; - -// $ExpectType any -ipcProvider.notificationCallbacks; - -// $ExpectType any -ipcProvider.connection; - -// $ExpectType boolean -ipcProvider.connected; - -// $ExpectType void -ipcProvider.addDefaultEvents(); - -// $ExpectType boolean -ipcProvider.supportsSubscriptions(); - -// $ExpectType void -ipcProvider.send({} as any, (error: Error | null) => {}); - -// $ExpectType void -ipcProvider.send({} as any, (error: Error | null, result: JsonRpcResponse | undefined) => {}); - -// $ExpectType void -ipcProvider.on('type', () => {}); - -// $ExpectType void -ipcProvider.once('type', () => {}); - -// $ExpectType void -ipcProvider.removeListener('type', () => {}); - -// $ExpectType void -ipcProvider.removeAllListeners('type'); - -// $ExpectType void -ipcProvider.reset(); - -// $ExpectType void -ipcProvider.reconnect(); diff --git a/packages/web3-providers-ipc/types/tsconfig.json b/packages/web3-providers-ipc/types/tsconfig.json deleted file mode 100644 index 74e0aeeb3a8..00000000000 --- a/packages/web3-providers-ipc/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-providers": ["."] - } - } -} diff --git a/packages/web3-providers-ipc/types/tslint.json b/packages/web3-providers-ipc/types/tslint.json deleted file mode 100644 index 6429b0c446e..00000000000 --- a/packages/web3-providers-ipc/types/tslint.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false - } -} diff --git a/packages/web3-providers-ws/.eslintignore b/packages/web3-providers-ws/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/packages/web3-providers-ws/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/packages/web3-providers-ws/.eslintrc.js b/packages/web3-providers-ws/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-providers-ws/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-providers-ws/.gitignore b/packages/web3-providers-ws/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-providers-ws/.npmignore b/packages/web3-providers-ws/.npmignore new file mode 120000 index 00000000000..8a0be70f3ed --- /dev/null +++ b/packages/web3-providers-ws/.npmignore @@ -0,0 +1 @@ +../../templates/.npmignore.tmpl \ No newline at end of file diff --git a/packages/web3-providers-ws/.prettierignore b/packages/web3-providers-ws/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-providers-ws/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-providers-ws/.prettierrc.json b/packages/web3-providers-ws/.prettierrc.json new file mode 120000 index 00000000000..00ecd510aaf --- /dev/null +++ b/packages/web3-providers-ws/.prettierrc.json @@ -0,0 +1 @@ +../../templates/.prettierrc.json.tmpl \ No newline at end of file diff --git a/packages/web3-providers-ws/CHANGELOG.md b/packages/web3-providers-ws/CHANGELOG.md new file mode 100644 index 00000000000..8648c09c9d3 --- /dev/null +++ b/packages/web3-providers-ws/CHANGELOG.md @@ -0,0 +1,132 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [4.0.1-alpha.2] + +### Changed + +- Updated Web3.js dependencies (#5664) + +## [4.0.1-alpha.3] + +### Changed + +- Updated dependencies (#5725) + +## [4.0.1-alpha.4] + +### Changed + +- `main` and `files` entries in `package.json` changed to `lib/` directory from `dist/` (#5739) +- Refactor to use common SocketProvider class (#5683) +- Legacy Event `close` has been deprecated, superseded by `disconnect` (#5683) + +## [4.0.1-alpha.5] + +### Changed + +- web3.js dependencies (#5757) + +## [4.0.1-rc.0] + +### Added + +- Added named export for `WebSocketProvider` (#5771) +- The getter of `SocketConnection` in `WebSocketProvider` (inherited from `SocketProvider`) returns isomorphic `WebSocket` (#5891) + +## [4.0.1-rc.1] + +### Added + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +## [4.0.1-rc.2] + +### Changed + +- Dependencies updated + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Fixed + +- Fixed #6162 @types/ws issue (#6205) + +## [4.0.3] + +### Changed + +- Dependencies updated + +## [4.0.4] + +### Fixed + +- Ensure a fixed version for "@types/ws": "8.5.3" (#6309) + +## [4.0.5] + +### Changed + +- Dependencies updated + +## [4.0.6] + +### Changed + +- Dependencies updated + + +## [4.0.7] + +### Fixed + +- Fixed bug in chunks processing logic (#6496) + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-providers-ws/README.md b/packages/web3-providers-ws/README.md index cac2c7fd470..942839b6b23 100644 --- a/packages/web3-providers-ws/README.md +++ b/packages/web3-providers-ws/README.md @@ -1,65 +1,59 @@ -# web3-providers-ws +

+ web3.js +

-[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +# web3.js - Websocket Provider -This is a websocket provider sub-package for [web3.js][repo]. +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] -Please read the [documentation][docs] for more. +This is a sub-package of [web3.js][repo]. + +`web3-providers-ws` contains the Web3.js provider for the Websocket protocol. ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3-providers-ws) or using [Yarn](https://yarnpkg.com/package/web3-providers-ws) + +### Using NPM ```bash npm install web3-providers-ws ``` -## Usage - -```js -const Web3WsProvider = require('web3-providers-ws'); - -const options = { - timeout: 30000, // ms +### Using Yarn - // Useful for credentialed urls, e.g: ws://username:password@localhost:8546 - headers: { - authorization: 'Basic username:password' - }, - - clientConfig: { - // Useful if requests are large - maxReceivedFrameSize: 100000000, // bytes - default: 1MiB - maxReceivedMessageSize: 100000000, // bytes - default: 8MiB +```bash +yarn add web3-providers-ws +``` - // Useful to keep a connection alive - keepalive: true, - keepaliveInterval: 60000 // ms - }, +## Getting Started - // Enable auto reconnection - reconnect: { - auto: true, - delay: 5000, // ms - maxAttempts: 5, - onTimeout: false - } -}; +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) -const ws = new Web3WsProvider('ws://localhost:8546', options); -``` +## Prerequisites -Additional client config options can be found [here](https://github.com/theturtle32/WebSocket-Node/blob/v1.0.31/docs/WebSocketClient.md#client-config-options). +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) -## Types +## Package.json Scripts -All the TypeScript typings are placed in the `types` folder. +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-providers-ws.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-providers-ws +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-providers-ws%2Fpackage.json [npm-url]: https://npmjs.org/package/web3-providers-ws -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-providers-ws -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-providers-ws -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-providers-ws -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-providers-ws +[downloads-image]: https://img.shields.io/npm/dm/web3-providers-ws?label=npm%20downloads diff --git a/packages/web3-providers-ws/assets/logo/web3js.ai b/packages/web3-providers-ws/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-providers-ws/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-providers-ws/assets/logo/web3js.jpg b/packages/web3-providers-ws/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-providers-ws/assets/logo/web3js.jpg differ diff --git a/packages/web3-providers-ws/assets/logo/web3js.svg b/packages/web3-providers-ws/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-providers-ws/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-providers-ws/package-lock.json b/packages/web3-providers-ws/package-lock.json deleted file mode 100644 index bda3aae6feb..00000000000 --- a/packages/web3-providers-ws/package-lock.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "web3-providers-ws", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-providers-ws/package.json b/packages/web3-providers-ws/package.json index 59e3038e006..6aa3bde1ee1 100644 --- a/packages/web3-providers-ws/package.json +++ b/packages/web3-providers-ws/package.json @@ -1,26 +1,71 @@ { - "name": "web3-providers-ws", - "version": "1.3.0", - "description": "Module to handle web3 RPC connections over WebSockets.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-providers-ws", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "types": "types/index.d.ts", - "main": "lib/index.js", - "dependencies": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.3.0", - "websocket": "^1.0.32" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3-providers-ws", + "version": "4.0.7", + "description": "Websocket provider for Web3 4.x.x", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js" + }, + "devDependencies": { + "@types/express": "^4.17.13", + "@types/jest": "^28.1.6", + "@types/morgan": "^1.9.3", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "express": "^4.18.1", + "ganache": "^7.7.6", + "http-proxy-middleware": "^2.0.6", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + }, + "dependencies": { + "@types/ws": "8.5.3", + "isomorphic-ws": "^5.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "ws": "^8.8.1" + } } diff --git a/packages/web3-providers-ws/src/helpers.js b/packages/web3-providers-ws/src/helpers.js deleted file mode 100644 index 25347e3f2ff..00000000000 --- a/packages/web3-providers-ws/src/helpers.js +++ /dev/null @@ -1,31 +0,0 @@ -var isNode = Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'; -var isRN = typeof navigator !== 'undefined' && navigator.product === 'ReactNative'; - -var _btoa = null; -var helpers = null; -if (isNode || isRN) { - _btoa = function(str) { - return Buffer.from(str).toString('base64'); - }; - var url = require('url'); - if (url.URL) { - // Use the new Node 6+ API for parsing URLs that supports username/password - var newURL = url.URL; - helpers = function(url) { - return new newURL(url); - }; - } else { - // Web3 supports Node.js 5, so fall back to the legacy URL API if necessary - helpers = require('url').parse; - } -} else { - _btoa = btoa.bind(window); - helpers = function(url) { - return new URL(url); - }; -} - -module.exports = { - parseURL: helpers, - btoa: _btoa -}; diff --git a/packages/web3-providers-ws/src/index.js b/packages/web3-providers-ws/src/index.js deleted file mode 100644 index 0596c033f51..00000000000 --- a/packages/web3-providers-ws/src/index.js +++ /dev/null @@ -1,425 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file WebsocketProvider.js - * @authors: Samuel Furter , Fabian Vogelsteller - * @date 2019 - */ - -'use strict'; - -var EventEmitter = require('eventemitter3'); -var helpers = require('./helpers.js'); -var errors = require('web3-core-helpers').errors; -var Ws = require('websocket').w3cwebsocket; - -/** - * @param {string} url - * @param {Object} options - * - * @constructor - */ -var WebsocketProvider = function WebsocketProvider(url, options) { - EventEmitter.call(this); - - options = options || {}; - this.url = url; - this._customTimeout = options.timeout || 1000 * 15; - this.headers = options.headers || {}; - this.protocol = options.protocol || undefined; - this.reconnectOptions = Object.assign({ - auto: false, - delay: 5000, - maxAttempts: false, - onTimeout: false - }, - options.reconnect - ); - this.clientConfig = options.clientConfig || undefined; // Allow a custom client configuration - this.requestOptions = options.requestOptions || undefined; // Allow a custom request options (https://github.com/theturtle32/WebSocket-Node/blob/master/docs/WebSocketClient.md#connectrequesturl-requestedprotocols-origin-headers-requestoptions) - - this.DATA = 'data'; - this.CLOSE = 'close'; - this.ERROR = 'error'; - this.CONNECT = 'connect'; - this.RECONNECT = 'reconnect'; - - this.connection = null; - this.requestQueue = new Map(); - this.responseQueue = new Map(); - this.reconnectAttempts = 0; - this.reconnecting = false; - - // The w3cwebsocket implementation does not support Basic Auth - // username/password in the URL. So generate the basic auth header, and - // pass through with any additional headers supplied in constructor - var parsedURL = helpers.parseURL(url); - if (parsedURL.username && parsedURL.password) { - this.headers.authorization = 'Basic ' + helpers.btoa(parsedURL.username + ':' + parsedURL.password); - } - - // When all node core implementations that do not have the - // WHATWG compatible URL parser go out of service this line can be removed. - if (parsedURL.auth) { - this.headers.authorization = 'Basic ' + helpers.btoa(parsedURL.auth); - } - - // make property `connected` which will return the current connection status - Object.defineProperty(this, 'connected', { - get: function () { - return this.connection && this.connection.readyState === this.connection.OPEN; - }, - enumerable: true - }); - - this.connect(); -}; - -// Inherit from EventEmitter -WebsocketProvider.prototype = Object.create(EventEmitter.prototype); -WebsocketProvider.prototype.constructor = WebsocketProvider; - -/** - * Connects to the configured node - * - * @method connect - * - * @returns {void} - */ -WebsocketProvider.prototype.connect = function () { - this.connection = new Ws(this.url, this.protocol, undefined, this.headers, this.requestOptions, this.clientConfig); - this._addSocketListeners(); -}; - -/** - * Listener for the `data` event of the underlying WebSocket object - * - * @method _onMessage - * - * @returns {void} - */ -WebsocketProvider.prototype._onMessage = function (e) { - var _this = this; - - this._parseResponse((typeof e.data === 'string') ? e.data : '').forEach(function (result) { - if (result.method && result.method.indexOf('_subscription') !== -1) { - _this.emit(_this.DATA, result); - - return; - } - - var id = result.id; - - // get the id which matches the returned id - if (Array.isArray(result)) { - id = result[0].id; - } - - if (_this.responseQueue.has(id)) { - if(_this.responseQueue.get(id).callback !== undefined) { - _this.responseQueue.get(id).callback(false, result); - } - _this.responseQueue.delete(id); - } - }); -}; - -/** - * Listener for the `open` event of the underlying WebSocket object - * - * @method _onConnect - * - * @returns {void} - */ -WebsocketProvider.prototype._onConnect = function () { - this.emit(this.CONNECT); - this.reconnectAttempts = 0; - this.reconnecting = false; - - if (this.requestQueue.size > 0) { - var _this = this; - - this.requestQueue.forEach(function (request, key) { - _this.send(request.payload, request.callback); - _this.requestQueue.delete(key); - }); - } -}; - -/** - * Listener for the `close` event of the underlying WebSocket object - * - * @method _onClose - * - * @returns {void} - */ -WebsocketProvider.prototype._onClose = function (event) { - var _this = this; - - if (this.reconnectOptions.auto && (![1000, 1001].includes(event.code) || event.wasClean === false)) { - this.reconnect(); - - return; - } - - this.emit(this.CLOSE, event); - - if (this.requestQueue.size > 0) { - this.requestQueue.forEach(function (request, key) { - request.callback(errors.ConnectionNotOpenError(event)); - _this.requestQueue.delete(key); - }); - } - - if (this.responseQueue.size > 0) { - this.responseQueue.forEach(function (request, key) { - request.callback(errors.InvalidConnection('on WS', event)); - _this.responseQueue.delete(key); - }); - } - - this._removeSocketListeners(); - this.removeAllListeners(); -}; - -/** - * Will add the required socket listeners - * - * @method _addSocketListeners - * - * @returns {void} - */ -WebsocketProvider.prototype._addSocketListeners = function () { - this.connection.addEventListener('message', this._onMessage.bind(this)); - this.connection.addEventListener('open', this._onConnect.bind(this)); - this.connection.addEventListener('close', this._onClose.bind(this)); -}; - -/** - * Will remove all socket listeners - * - * @method _removeSocketListeners - * - * @returns {void} - */ -WebsocketProvider.prototype._removeSocketListeners = function () { - this.connection.removeEventListener('message', this._onMessage); - this.connection.removeEventListener('open', this._onConnect); - this.connection.removeEventListener('close', this._onClose); -}; - -/** - * Will parse the response and make an array out of it. - * - * @method _parseResponse - * - * @param {String} data - * - * @returns {Array} - */ -WebsocketProvider.prototype._parseResponse = function (data) { - var _this = this, - returnValues = []; - - // DE-CHUNKER - var dechunkedData = data - .replace(/\}[\n\r]?\{/g, '}|--|{') // }{ - .replace(/\}\][\n\r]?\[\{/g, '}]|--|[{') // }][{ - .replace(/\}[\n\r]?\[\{/g, '}|--|[{') // }[{ - .replace(/\}\][\n\r]?\{/g, '}]|--|{') // }]{ - .split('|--|'); - - dechunkedData.forEach(function (data) { - - // prepend the last chunk - if (_this.lastChunk) - data = _this.lastChunk + data; - - var result = null; - - try { - result = JSON.parse(data); - } catch (e) { - - _this.lastChunk = data; - - // start timeout to cancel all requests - clearTimeout(_this.lastChunkTimeout); - _this.lastChunkTimeout = setTimeout(function () { - if (_this.reconnectOptions.auto && _this.reconnectOptions.onTimeout) { - _this.reconnect(); - - return; - } - - - _this.emit(_this.ERROR, errors.ConnectionTimeout(_this._customTimeout)); - - if (_this.requestQueue.size > 0) { - _this.requestQueue.forEach(function (request, key) { - request.callback(errors.ConnectionTimeout(_this._customTimeout)); - _this.requestQueue.delete(key); - }); - } - }, _this._customTimeout); - - return; - } - - // cancel timeout and set chunk to null - clearTimeout(_this.lastChunkTimeout); - _this.lastChunk = null; - - if (result) - returnValues.push(result); - }); - - return returnValues; -}; - -/** - * Does check if the provider is connecting and will add it to the queue or will send it directly - * - * @method send - * - * @param {Object} payload - * @param {Function} callback - * - * @returns {void} - */ -WebsocketProvider.prototype.send = function (payload, callback) { - var _this = this; - var id = payload.id; - var request = {payload: payload, callback: callback}; - - if (Array.isArray(payload)) { - id = payload[0].id; - } - - if (this.connection.readyState === this.connection.CONNECTING || this.reconnecting) { - this.requestQueue.set(id, request); - - return; - } - - if (this.connection.readyState !== this.connection.OPEN) { - this.requestQueue.delete(id); - - this.emit(this.ERROR, errors.ConnectionNotOpenError()); - request.callback(errors.ConnectionNotOpenError()); - - return; - } - - this.responseQueue.set(id, request); - this.requestQueue.delete(id); - - try { - this.connection.send(JSON.stringify(request.payload)); - } catch (error) { - request.callback(error); - _this.responseQueue.delete(id); - } -}; - -/** - * Resets the providers, clears all callbacks - * - * @method reset - * - * @returns {void} - */ -WebsocketProvider.prototype.reset = function () { - this.responseQueue.clear(); - this.requestQueue.clear(); - - this.removeAllListeners(); - - this._removeSocketListeners(); - this._addSocketListeners(); -}; - -/** - * Closes the current connection with the given code and reason arguments - * - * @method disconnect - * - * @param {number} code - * @param {string} reason - * - * @returns {void} - */ -WebsocketProvider.prototype.disconnect = function (code, reason) { - this._removeSocketListeners(); - this.connection.close(code || 1000, reason); -}; - -/** - * Returns the desired boolean. - * - * @method supportsSubscriptions - * - * @returns {boolean} - */ -WebsocketProvider.prototype.supportsSubscriptions = function () { - return true; -}; - -/** - * Removes the listeners and reconnects to the socket. - * - * @method reconnect - * - * @returns {void} - */ -WebsocketProvider.prototype.reconnect = function () { - var _this = this; - this.reconnecting = true; - - if (this.responseQueue.size > 0) { - this.responseQueue.forEach(function (request, key) { - request.callback(errors.PendingRequestsOnReconnectingError()); - _this.responseQueue.delete(key); - }); - } - - if ( - !this.reconnectOptions.maxAttempts || - this.reconnectAttempts < this.reconnectOptions.maxAttempts - ) { - setTimeout(function () { - _this.reconnectAttempts++; - _this._removeSocketListeners(); - _this.emit(_this.RECONNECT, _this.reconnectAttempts); - _this.connect(); - }, this.reconnectOptions.delay); - - return; - } - - this.emit(this.ERROR, errors.MaxAttemptsReachedOnReconnectingError()); - this.reconnecting = false; - - if (this.requestQueue.size > 0) { - this.requestQueue.forEach(function (request, key) { - request.callback(errors.MaxAttemptsReachedOnReconnectingError()); - _this.requestQueue.delete(key); - }); - } -}; - -module.exports = WebsocketProvider; diff --git a/packages/web3-providers-ws/src/index.ts b/packages/web3-providers-ws/src/index.ts new file mode 100644 index 00000000000..4591e2b0a26 --- /dev/null +++ b/packages/web3-providers-ws/src/index.ts @@ -0,0 +1,171 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ClientRequestArgs } from 'http'; +import WebSocket, { ClientOptions, CloseEvent } from 'isomorphic-ws'; +import { + EthExecutionAPI, + Web3APIMethod, + Web3APIPayload, + Web3APISpec, + Web3ProviderStatus, +} from 'web3-types'; +import { isNullish, ReconnectOptions, SocketProvider } from 'web3-utils'; +import { ConnectionNotOpenError } from 'web3-errors'; + +export { ClientRequestArgs } from 'http'; + +export { ClientOptions } from 'isomorphic-ws'; + +/** + * Use WebSocketProvider to connect to a Node using a WebSocket connection, i.e. over the `ws` or `wss` protocol. + * + * @example + * ```ts + * const provider = new WebSocketProvider( + * `ws://localhost:8545`, + * { + * headers: { + * // to provide the API key if the Node requires the key to be inside the `headers` for example: + * 'x-api-key': '', + * }, + * }, + * { + * delay: 500, + * autoReconnect: true, + * maxAttempts: 10, + * }, + * ); + * ``` + * + * The second and the third parameters are both optional. And you can for example, the second parameter could be an empty object or undefined. + * * @example + * ```ts + * const provider = new WebSocketProvider( + * `ws://localhost:8545`, + * {}, + * { + * delay: 500, + * autoReconnect: true, + * maxAttempts: 10, + * }, + * ); + * ``` + */ +export default class WebSocketProvider< + API extends Web3APISpec = EthExecutionAPI, +> extends SocketProvider { + protected readonly _socketOptions?: ClientOptions | ClientRequestArgs; + + protected _socketConnection?: WebSocket; + + // eslint-disable-next-line class-methods-use-this + protected _validateProviderPath(providerUrl: string): boolean { + return typeof providerUrl === 'string' ? /^ws(s)?:\/\//i.test(providerUrl) : false; + } + + /** + * This is a class used for Web Socket connections. It extends the abstract class SocketProvider {@link SocketProvider} that extends the EIP-1193 provider {@link EIP1193Provider}. + * @param socketPath - The path to the Web Socket. + * @param socketOptions - The options for the Web Socket client. + * @param reconnectOptions - The options for the socket reconnection {@link ReconnectOptions} + */ + // this constructor is to specify the type for `socketOptions` for a better intellisense. + // eslint-disable-next-line no-useless-constructor + public constructor( + socketPath: string, + socketOptions?: ClientOptions | ClientRequestArgs, + reconnectOptions?: Partial, + ) { + super(socketPath, socketOptions, reconnectOptions); + } + + public getStatus(): Web3ProviderStatus { + if (this._socketConnection && !isNullish(this._socketConnection)) { + switch (this._socketConnection.readyState) { + case this._socketConnection.CONNECTING: { + return 'connecting'; + } + case this._socketConnection.OPEN: { + return 'connected'; + } + default: { + return 'disconnected'; + } + } + } + return 'disconnected'; + } + + protected _openSocketConnection() { + this._socketConnection = new WebSocket( + this._socketPath, + undefined, + this._socketOptions && Object.keys(this._socketOptions).length === 0 + ? undefined + : this._socketOptions, + ); + } + + protected _closeSocketConnection(code?: number, data?: string) { + this._socketConnection?.close(code, data); + } + + protected _sendToSocket>( + payload: Web3APIPayload, + ): void { + if (this.getStatus() === 'disconnected') { + throw new ConnectionNotOpenError(); + } + this._socketConnection?.send(JSON.stringify(payload)); + } + + protected _parseResponses(event: WebSocket.MessageEvent) { + return this.chunkResponseParser.parseResponse(event.data as string); + } + + protected _addSocketListeners(): void { + this._socketConnection?.addEventListener('open', this._onOpenHandler); + this._socketConnection?.addEventListener('message', this._onMessageHandler); + this._socketConnection?.addEventListener('close', e => this._onCloseHandler(e)); + this._socketConnection?.addEventListener('error', this._onErrorHandler); + } + + protected _removeSocketListeners(): void { + this._socketConnection?.removeEventListener('message', this._onMessageHandler); + this._socketConnection?.removeEventListener('open', this._onOpenHandler); + this._socketConnection?.removeEventListener('close', this._onCloseHandler); + // note: we intentionally keep the error event listener to be able to emit it in case an error happens when closing the connection + } + + protected _onCloseEvent(event: CloseEvent): void { + if ( + this._reconnectOptions.autoReconnect && + (![1000, 1001].includes(event.code) || !event.wasClean) + ) { + this._reconnect(); + return; + } + this._clearQueues(event); + this._removeSocketListeners(); + this._onDisconnect(event.code, event.reason); + // disconnect was successful and can safely remove error listener + this._socketConnection?.removeEventListener('error', this._onErrorHandler); + } +} + +export { WebSocketProvider }; diff --git a/packages/web3-providers-ws/test/.eslintrc.js b/packages/web3-providers-ws/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-providers-ws/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-providers-ws/test/config/jest.config.js b/packages/web3-providers-ws/test/config/jest.config.js new file mode 120000 index 00000000000..b875b48129d --- /dev/null +++ b/packages/web3-providers-ws/test/config/jest.config.js @@ -0,0 +1 @@ +../../../../templates/jest.config.js.tmpl \ No newline at end of file diff --git a/packages/web3-providers-ws/test/config/setup.js b/packages/web3-providers-ws/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-providers-ws/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-providers-ws/test/fixtures/accounts.json b/packages/web3-providers-ws/test/fixtures/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3-providers-ws/test/fixtures/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3-providers-ws/test/fixtures/proxy.ts b/packages/web3-providers-ws/test/fixtures/proxy.ts new file mode 100644 index 00000000000..37747506647 --- /dev/null +++ b/packages/web3-providers-ws/test/fixtures/proxy.ts @@ -0,0 +1,83 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import WebSocket from 'ws'; + +export const createProxy = async ( + port: number, + origin: string, +): Promise<{ + server: WebSocket.Server; + path: string; + close: () => Promise; + originWs: WebSocket; +}> => { + const originWs = new WebSocket(origin); + + await new Promise(resolve => { + originWs.on('open', () => { + resolve(true); + }); + }); + + const webSocketServer = new WebSocket.Server({ + host: '127.0.0.1', + port, + }); + // eslint-disable-next-line @typescript-eslint/no-empty-function + let closeFunc = async () => {}; + webSocketServer.on('connection', ws => { + ws.on('message', (d, isBinary) => { + originWs.send(d, { binary: isBinary }); + }); + originWs.on('message', (d, isBinary) => { + ws.send(d, { binary: isBinary }); + }); + closeFunc = async () => { + await new Promise(resolve => { + const timeOut = setTimeout(() => { + resolve(true); + }, 2000); + ws.on('close', () => { + ws.removeAllListeners(); + clearTimeout(timeOut); + resolve(true); + }); + ws.terminate(); + }); + await new Promise(resolve => { + const timeOut = setTimeout(() => { + resolve(true); + }, 2000); + originWs.on('close', () => { + clearTimeout(timeOut); + originWs.removeAllListeners(); + resolve(true); + }); + + originWs.terminate(); + }); + webSocketServer.close(); + }; + }); + + return { + path: `ws://127.0.0.1:${port}`, + server: webSocketServer, + originWs, + close: async () => closeFunc(), + }; +}; diff --git a/packages/web3-providers-ws/test/fixtures/system_test_utils.ts b/packages/web3-providers-ws/test/fixtures/system_test_utils.ts new file mode 120000 index 00000000000..2ab08a83752 --- /dev/null +++ b/packages/web3-providers-ws/test/fixtures/system_test_utils.ts @@ -0,0 +1 @@ +../../../../scripts/system_tests_utils.ts \ No newline at end of file diff --git a/packages/web3-providers-ws/test/fixtures/test_data.ts b/packages/web3-providers-ws/test/fixtures/test_data.ts new file mode 100644 index 00000000000..c1bddff0444 --- /dev/null +++ b/packages/web3-providers-ws/test/fixtures/test_data.ts @@ -0,0 +1,45 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const validConnectionStrings = [ + 'ws://localhost:8545', + 'ws://www.localhost', + 'ws://localhost', + 'wss://foo.com', + 'ws://foo.ninja', + 'wss://foo.com', + 'ws://foo.com:8545', +]; + +export const invalidConnectionStrings = [ + 'htt://localhost:8545', + 'http//localhost:8545', + 'ipc://localhost:8545', + '', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + undefined, + 42, +]; + +export const wsProviderOptions = { + followRedirects: true, + handshakeTimeout: 1500, + maxRedirects: 3, + perMessageDeflate: true, +}; diff --git a/packages/web3-providers-ws/test/integration/basic_auth.test.ts b/packages/web3-providers-ws/test/integration/basic_auth.test.ts new file mode 100644 index 00000000000..f94774a92c5 --- /dev/null +++ b/packages/web3-providers-ws/test/integration/basic_auth.test.ts @@ -0,0 +1,94 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import express from 'express'; +import { Server } from 'http'; +import { createProxyMiddleware } from 'http-proxy-middleware'; +import WebSocketProvider from '../../src/index'; +import { + describeIf, + getSystemTestProviderUrl, + isWs, + waitForSocketConnect, + waitForCloseSocketConnection, +} from '../fixtures/system_test_utils'; + +describeIf(isWs)('Support of Basic Auth', () => { + let server: Server; + let clientWsUrl: string; + let webSocketProvider: WebSocketProvider; + + beforeAll(() => { + clientWsUrl = getSystemTestProviderUrl(); + const app = express(); + const port = 3000; + const host = 'localhost'; + + const wsProxy = createProxyMiddleware({ + target: clientWsUrl, + changeOrigin: true, + ws: true, + onError: () => { + console.warn('************** proxy error'); + }, + logLevel: 'silent', + }); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + app.use(wsProxy); + server = app.listen(port, host); + + server.on('upgrade', (req, socket, head) => { + if (!req.headers.authorization || !req.headers.authorization?.includes('Basic ')) { + socket.emit('error'); + socket.destroy(); + } + const base64Credentials = req.headers.authorization?.split(' ')[1]; + const credentials: string = Buffer.from(base64Credentials as string, 'base64').toString( + 'ascii', + ); + const [username, password] = credentials.split(':'); + if (username !== 'geth' || password !== 'authpass') { + socket.emit('error'); + socket.destroy(); + } + return wsProxy.upgrade?.(req as any, socket as any, head); + }); + }); + afterAll(() => { + server.close(); + }); + beforeEach(() => { + webSocketProvider = new WebSocketProvider( + 'ws://geth:authpass@localhost:3000', + {}, + { delay: 1, autoReconnect: false, maxAttempts: 1 }, + ); + }); + afterEach(async () => { + // make sure we try to close the connection after it is established + if (webSocketProvider.getStatus() === 'connecting') { + await waitForSocketConnect(webSocketProvider); + } + webSocketProvider.disconnect(); + await waitForCloseSocketConnection(webSocketProvider); + }); + // eslint-disable-next-line jest/expect-expect + test('should connect with basic auth', async () => { + await waitForSocketConnect(webSocketProvider); + expect(webSocketProvider.getStatus()).toBe('connected'); + }); +}); diff --git a/packages/web3-providers-ws/test/integration/eip1193.test.ts b/packages/web3-providers-ws/test/integration/eip1193.test.ts new file mode 100644 index 00000000000..04c36e3888a --- /dev/null +++ b/packages/web3-providers-ws/test/integration/eip1193.test.ts @@ -0,0 +1,103 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { hexToNumber } from 'web3-utils'; +import { HexString, ProviderConnectInfo, ProviderRpcError } from 'web3-types'; +import WebSocketProvider from '../../src/index'; + +import { + describeIf, + getSystemTestProviderUrl, + isWs, + waitForSocketConnect, + waitForSocketDisconnect, +} from '../fixtures/system_test_utils'; + +describeIf(isWs)('WebSocketProvider - eip1193', () => { + let socketPath: string; + let socketProvider: WebSocketProvider; + + beforeAll(() => { + socketPath = getSystemTestProviderUrl(); + }); + beforeEach(() => { + socketProvider = new WebSocketProvider(socketPath); + }); + afterEach(async () => { + socketProvider.disconnect(1000); + await waitForSocketDisconnect(socketProvider); + }); + + describe('check events', () => { + it('should send connect event', async () => { + const providerConnectInfo = await new Promise(resolve => { + socketProvider.on('connect', (data: ProviderConnectInfo) => { + resolve(data); + }); + }); + expect(hexToNumber(providerConnectInfo.chainId)).toBeGreaterThan(0); + }); + it('should send disconnect event', async () => { + await waitForSocketConnect(socketProvider); + const disconnectPromise = new Promise(resolve => { + socketProvider.on('disconnect', (error: ProviderRpcError) => { + resolve(error); + }); + }); + socketProvider.disconnect(1000, 'Some extra data'); + + const err = await disconnectPromise; + expect(err.code).toBe(1000); + expect(err.data).toBe('Some extra data'); + }); + it('should send chainChanged event', async () => { + await waitForSocketConnect(socketProvider); + // @ts-expect-error set private variable + socketProvider._chainId = '0x1'; + socketProvider.disconnect(1000); + await waitForSocketDisconnect(socketProvider); + const chainChangedPromise = new Promise(resolve => { + socketProvider.on('chainChanged', (result: HexString) => { + resolve(result); + }); + }); + socketProvider.connect(); + await waitForSocketConnect(socketProvider); + const chainId = await chainChangedPromise; + expect(chainId).not.toBe('0x1'); + expect(hexToNumber(chainId)).toBeGreaterThan(0); + }); + it('should send accountsChanged event', async () => { + await waitForSocketConnect(socketProvider); + + // @ts-expect-error set private variable + socketProvider._accounts = ['1', '2']; + socketProvider.disconnect(1000); + await waitForSocketDisconnect(socketProvider); + const chainChangedPromise = new Promise(resolve => { + socketProvider.on('accountsChanged', (accounts: HexString[]) => { + resolve(accounts); + }); + }); + socketProvider.connect(); + await waitForSocketConnect(socketProvider); + const accounts = await chainChangedPromise; + + expect(JSON.stringify(accounts)).not.toBe(JSON.stringify(['1', '2'])); + }); + }); +}); diff --git a/packages/web3-providers-ws/test/integration/ganache_fault_tolerance.test.ts b/packages/web3-providers-ws/test/integration/ganache_fault_tolerance.test.ts new file mode 100644 index 00000000000..4a0ba982996 --- /dev/null +++ b/packages/web3-providers-ws/test/integration/ganache_fault_tolerance.test.ts @@ -0,0 +1,415 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ProviderRpcError } from 'web3-types/src/web3_api_types'; +import ganache from 'ganache'; +import { EthExecutionAPI, Web3APIPayload, SocketRequestItem, JsonRpcResponse } from 'web3-types'; +import { InvalidResponseError, ConnectionNotOpenError } from 'web3-errors'; +import { Web3DeferredPromise } from 'web3-utils'; +import { + waitForSocketConnect, + waitForEvent, + describeIf, + getSystemTestBackend, + isWs, +} from '../fixtures/system_test_utils'; +import WebSocketProvider from '../../src/index'; + +// create helper functions to open server +describeIf(getSystemTestBackend() === 'ganache' && isWs)('ganache tests', () => { + describe('WebSocketProvider - ganache', () => { + jest.setTimeout(17000); + const port = 7547; + const host = `ws://localhost:${port}`; + const jsonRpcPayload = { + jsonrpc: '2.0', + id: 43, + method: 'eth_mining', + } as Web3APIPayload; + + // simulate abrupt disconnection, ganache server always closes with code 1000 so we need to simulate closing with different error code + const changeCloseCode = async (webSocketProvider: WebSocketProvider) => + new Promise(resolve => { + // @ts-expect-error replace close handler + // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-param-reassign + webSocketProvider._onCloseHandler = (_: CloseEvent) => { + // @ts-expect-error replace close event + webSocketProvider._onCloseEvent({ code: 1003 }); + }; + // @ts-expect-error run protected method + webSocketProvider._removeSocketListeners(); + // @ts-expect-error run protected method + webSocketProvider._addSocketListeners(); + resolve(); + }); + + it('"error" when there is no connection', async () => { + const reconnectionOptions = { + delay: 100, + autoReconnect: false, + maxAttempts: 1, + }; + const websocketProvider = new WebSocketProvider( + 'ws://localhost:7547', + {}, + reconnectionOptions, + ); + + expect(!!(await waitForEvent(websocketProvider, 'error'))).toBe(true); + websocketProvider.disconnect(); + await expect(websocketProvider.request(jsonRpcPayload)).rejects.toThrow( + 'Connection not open', + ); + }); + + it('"error" handler fires if the client closes unilaterally', async () => { + const server = ganache.server(); + await server.listen(port); + const webSocketProvider = new WebSocketProvider(host); + + await waitForSocketConnect(webSocketProvider); + + const disconnectPromise = waitForEvent(webSocketProvider, 'disconnect'); + await server.close(); + expect(!!(await disconnectPromise)).toBe(true); + webSocketProvider.disconnect(); + }); + + it('"error" handler *DOES NOT* fire if disconnection is clean', async () => { + const server = ganache.server(); + await server.listen(port); + const reconnectOptions = { + autoReconnect: false, + }; + const webSocketProvider = new WebSocketProvider(host, {}, reconnectOptions); + await waitForSocketConnect(webSocketProvider); + + const mockReject = jest.fn(); + webSocketProvider.once('error', () => { + mockReject(); + }); + webSocketProvider.disconnect(); + await new Promise(resolve => { + setTimeout(() => { + resolve(true); + }, 100); + }); + expect(mockReject).toHaveBeenCalledTimes(0); + + await server.close(); + }); + + it('can connect after being disconnected', async () => { + const server = ganache.server(); + await server.listen(port); + + const webSocketProvider = new WebSocketProvider(host); + const mockCallback = jest.fn(); + const connectPromise = new Promise(resolve => { + webSocketProvider.once('connect', () => { + mockCallback(); + resolve(true); + }); + }); + await connectPromise; + + webSocketProvider.disconnect(); + await waitForEvent(webSocketProvider, 'disconnect'); + + webSocketProvider.connect(); + const connectPromise2 = new Promise(resolve => { + webSocketProvider.once('connect', () => { + mockCallback(); + resolve(true); + }); + }); + await connectPromise2; + webSocketProvider.disconnect(); + expect(mockCallback).toHaveBeenCalledTimes(2); + await server.close(); + }); + + it('webSocketProvider supports subscriptions', async () => { + const server = ganache.server(); + await server.listen(port); + const webSocketProvider = new WebSocketProvider(host); + + await waitForSocketConnect(webSocketProvider); + expect(webSocketProvider.supportsSubscriptions()).toBe(true); + + webSocketProvider.disconnect(); + await server.close(); + }); + + it('times out when server is closed', async () => { + const server = ganache.server(); + await server.listen(port); + const reconnectionOptions = { + delay: 100, + autoReconnect: false, + maxAttempts: 1, + }; + const webSocketProvider = new WebSocketProvider(host, {}, reconnectionOptions); + const mockCallBack = jest.fn(); + const errorPromise = new Promise(resolve => { + webSocketProvider.on('error', (err: unknown) => { + if ((err as ProviderRpcError)?.message.startsWith('connect ECONNREFUSED')) { + mockCallBack(); + resolve(true); + } + }); + }); + await server.close(); + await errorPromise; + expect(mockCallBack).toHaveBeenCalled(); + }); + + it('with reconnect on, will try to connect until server is open then close', async () => { + const reconnectionOptions = { + delay: 10, + autoReconnect: true, + maxAttempts: 100, + }; + const webSocketProvider = new WebSocketProvider(host, {}, reconnectionOptions); + + const mockCallback = jest.fn(); + const connectPromise = new Promise(resolve => { + webSocketProvider.on('connect', () => { + mockCallback(); + resolve(true); + }); + }); + + const server = ganache.server(); + await server.listen(port); + await connectPromise; + webSocketProvider.disconnect(); + await server.close(); + expect(mockCallback).toHaveBeenCalledTimes(1); + }); + + it('allows disconnection on lost connection, when reconnect is enabled', async () => { + const reconnectionOptions = { + delay: 10, + autoReconnect: true, + maxAttempts: 100, + }; + const webSocketProvider = new WebSocketProvider(host, {}, reconnectionOptions); + + const connectPromise = waitForSocketConnect(webSocketProvider); + + const server = ganache.server(); + await server.listen(port); + await connectPromise; + await server.close(); + const disconnectEvent = waitForEvent(webSocketProvider, 'disconnect'); + webSocketProvider.disconnect(); + expect(!!(await disconnectEvent)).toBe(true); + }); + + it('errors when failing to reconnect after data is lost mid-chunk', async () => { + const server = ganache.server(); + await server.listen(port); + const reconnectionOptions = { + delay: 100, + autoReconnect: true, + maxAttempts: 1, + }; + const mockCallBack = jest.fn(); + const webSocketProvider = new WebSocketProvider(host, {}, reconnectionOptions); + await waitForSocketConnect(webSocketProvider); + + webSocketProvider.on('error', (err: any) => { + if (err.message === `Maximum number of reconnect attempts reached! (${1})`) { + mockCallBack(); + } + }); + + await server.close(); + + // when server is not listening send request, and expect that lib will try to reconnect and at end will throw con not open error + await expect( + webSocketProvider.request( + {"method":"eth_getBlockByNumber","params":["0xc5043f",false],"id":1,"jsonrpc":"2.0"} + )) + .rejects.toThrow(ConnectionNotOpenError); + + expect(mockCallBack).toHaveBeenCalled(); + }); + + it('times out when connection is lost mid-chunk', async () => { + const server = ganache.server(); + await server.listen(port); + const reconnectionOptions = { + delay: 0, + autoReconnect: false, + maxAttempts: 0, + }; + const webSocketProvider = new WebSocketProvider(host, {}, reconnectionOptions); + await waitForSocketConnect(webSocketProvider); + + await server.close(); + + const errorPromise = new Promise(resolve => { + webSocketProvider.on('error', (err: any) => { + expect(err).toBeInstanceOf(InvalidResponseError); + if (err.innerError.message === 'Chunk timeout') { + resolve(true); + } + }); + }); + // send an event to be parsed and fail + const event = { + data: 'abc|--|ded', + type: 'websocket', + // @ts-expect-error run protected method + target: webSocketProvider._socketConnection, + }; + // @ts-expect-error run protected method + webSocketProvider._parseResponses(event); // simulate chunks + await errorPromise; + expect(true).toBe(true); + }); + + it('clears pending requests on maxAttempts failed reconnection', async () => { + const server = ganache.server(); + await server.listen(port); + const reconnectionOptions = { + delay: 1000, + autoReconnect: true, + maxAttempts: 1, + }; + const mockCallBack = jest.fn(); + + const webSocketProvider = new WebSocketProvider(host, {}, reconnectionOptions); + const defPromise = new Web3DeferredPromise>(); + // eslint-disable-next-line @typescript-eslint/no-empty-function + defPromise.catch(() => {}); + const reqItem: SocketRequestItem = { + payload: jsonRpcPayload, + deferredPromise: defPromise, + }; + await waitForSocketConnect(webSocketProvider); + + // add a request without executing promise + // @ts-expect-error run protected method + webSocketProvider._pendingRequestsQueue.set(jsonRpcPayload.id, reqItem); + + // simulate abrupt server close + await changeCloseCode(webSocketProvider); + const errorPromise = new Promise(resolve => { + webSocketProvider.on('error', (error: unknown) => { + if ( + (error as ProviderRpcError)?.message === + `Maximum number of reconnect attempts reached! (${1})` + ) { + mockCallBack(); + } + resolve(true); + }); + }); + + await server.close(); + await errorPromise; + // @ts-expect-error run protected method + expect(webSocketProvider._pendingRequestsQueue.size).toBe(0); + expect(mockCallBack).toHaveBeenCalled(); + }); + + it('queues requests made while connection is lost / executes on reconnect', async () => { + const server = ganache.server(); + await server.listen(port); + const reconnectionOptions = { + delay: 1000, + autoReconnect: true, + maxAttempts: 3, + }; + const webSocketProvider = new WebSocketProvider(host, {}, reconnectionOptions); + await waitForSocketConnect(webSocketProvider); + + // simulate abrupt close code + await changeCloseCode(webSocketProvider); + const errorPromise = new Promise(resolve => { + webSocketProvider.on('error', () => { + resolve(true); + }); + }); + await server.close(); + + await errorPromise; + // queue a request + const requestPromise = webSocketProvider.request(jsonRpcPayload); + + const server2 = ganache.server(); + await server2.listen(port); + + await waitForSocketConnect(webSocketProvider); + + // try to send a request + const result = await requestPromise; + expect(result.id).toEqual(jsonRpcPayload.id); + webSocketProvider.disconnect(); + await server2.close(); + }); + it('errors when requests continue after socket closed', async () => { + const server = ganache.server(); + await server.listen(port); + const reconnectOptions = { + autoReconnect: false, + }; + const webSocketProvider = new WebSocketProvider(host, {}, reconnectOptions); + await waitForSocketConnect(webSocketProvider); + + const disconnectPromise = waitForEvent(webSocketProvider, 'disconnect'); + await server.close(); + + await disconnectPromise; + const errorPromise = new Promise(resolve => { + webSocketProvider.on('error', () => { + resolve(true); + }); + }); + await expect(webSocketProvider.request(jsonRpcPayload)).rejects.toThrow( + 'Connection not open', + ); + await errorPromise; + }); + it('deferredPromise emits an error when request fails', async () => { + const server = ganache.server(); + await server.listen(port); + const webSocketProvider = new WebSocketProvider(host); + await waitForSocketConnect(webSocketProvider); + + // @ts-expect-error replace sendtoSocket so we don't execute request + // eslint-disable-next-line @typescript-eslint/no-empty-function + webSocketProvider._sendToSocket = () => {}; + webSocketProvider.on('error', (err: unknown) => { + expect(err).toBeInstanceOf(ConnectionNotOpenError); + }); + + // eslint-disable-next-line @typescript-eslint/no-empty-function + const request = webSocketProvider.request(jsonRpcPayload).catch(() => {}); + + // @ts-expect-error create a deferred promise error + webSocketProvider._clearQueues(); + + await request; + webSocketProvider.disconnect(); + await server.close(); + }); + }); +}); diff --git a/packages/web3-providers-ws/test/integration/jest.config.js b/packages/web3-providers-ws/test/integration/jest.config.js new file mode 100644 index 00000000000..c3ec1bb8d37 --- /dev/null +++ b/packages/web3-providers-ws/test/integration/jest.config.js @@ -0,0 +1,49 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + roots: ['/test/integration/'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-providers-ws/test/integration/reconnection.test.ts b/packages/web3-providers-ws/test/integration/reconnection.test.ts new file mode 100644 index 00000000000..aeb72838252 --- /dev/null +++ b/packages/web3-providers-ws/test/integration/reconnection.test.ts @@ -0,0 +1,144 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { CloseEvent } from 'ws'; +import { ProviderRpcError } from 'web3-types/src/web3_api_types'; +import WebSocketProvider from '../../src'; + +import { createProxy } from '../fixtures/proxy'; +import { + describeIf, + getSystemTestProviderUrl, + isBrowser, + waitForSocketConnect, + isWs, + waitForCloseSocketConnection, + waitForEvent, +} from '../fixtures/system_test_utils'; + +describeIf(isWs && !isBrowser)('WebSocketProvider - reconnection', () => { + describe('subscribe event tests', () => { + let reconnectionOptions: { + delay: number; + autoReconnect: boolean; + maxAttempts: number; + }; + beforeAll(() => { + reconnectionOptions = { + delay: 500, + autoReconnect: true, + maxAttempts: 100, + }; + }); + it('check defaults', async () => { + const web3Provider = new WebSocketProvider(getSystemTestProviderUrl()); + // @ts-expect-error-next-line + expect(web3Provider._reconnectOptions).toEqual({ + autoReconnect: true, + delay: 5000, + maxAttempts: 5, + }); + await waitForSocketConnect(web3Provider); + web3Provider.disconnect(1000, 'test'); + await waitForCloseSocketConnection(web3Provider); + }); + it('set custom reconnectOptions', async () => { + const web3Provider = new WebSocketProvider( + getSystemTestProviderUrl(), + {}, + reconnectionOptions, + ); + // @ts-expect-error-next-line + expect(web3Provider._reconnectOptions).toEqual(reconnectionOptions); + await waitForSocketConnect(web3Provider); + web3Provider.disconnect(1000, 'test'); + await waitForCloseSocketConnection(web3Provider); + }); + it('should emit connect and disconnected events', async () => { + const server = await createProxy(18545, getSystemTestProviderUrl()); + const web3Provider = new WebSocketProvider(server.path, {}, reconnectionOptions); + expect(!!(await waitForEvent(web3Provider, 'connect'))).toBe(true); + // @ts-expect-error set protected option + web3Provider._reconnectOptions = { + ...reconnectionOptions, + autoReconnect: false, + }; + + const disconnectPromise = waitForEvent(web3Provider, 'disconnect'); + // @ts-expect-error read protected property + expect(web3Provider.isReconnecting).toBe(false); + await server.close(); + + expect(!!(await disconnectPromise)).toBe(true); + }); + + it('should connect, disconnect and reconnect', async () => { + const server = await createProxy(18546, getSystemTestProviderUrl()); + const web3Provider = new WebSocketProvider(server.path, {}, reconnectionOptions); + expect(!!(await waitForEvent(web3Provider, 'connect'))).toBe(true); + web3Provider.disconnect(1002); + await server.close(); + const connectEvent = waitForEvent(web3Provider, 'connect'); + const server2 = await createProxy(18546, getSystemTestProviderUrl()); + expect(!!(await connectEvent)).toBe(true); + + web3Provider.disconnect(); + await waitForEvent(web3Provider, 'disconnect'); + await server2.close(); + }); + it('should connect, disconnect, try reconnect and reach max attempts', async () => { + const server = await createProxy(18547, getSystemTestProviderUrl()); + const web3Provider = new WebSocketProvider( + server.path, + {}, + { + ...reconnectionOptions, + delay: 1, + maxAttempts: 3, + }, + ); + expect(!!(await waitForEvent(web3Provider, 'connect'))).toBe(true); + + // @ts-expect-error replace close handler + // eslint-disable-next-line @typescript-eslint/no-unused-vars + web3Provider._onCloseHandler = (_: CloseEvent) => { + // @ts-expect-error replace close event + web3Provider._onCloseEvent({ code: 1002 }); + }; + // @ts-expect-error run protected method + web3Provider._removeSocketListeners(); + // @ts-expect-error run protected method + web3Provider._addSocketListeners(); + const errorEvent = new Promise(resolve => { + web3Provider.on('error', (error: unknown) => { + if ( + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + (error as ProviderRpcError)?.message?.startsWith( + 'Maximum number of reconnect attempts reached', + ) + ) { + resolve(error); + } + }); + }); + + await server.close(); + const error = (await errorEvent) as Error; + expect(error.message).toBe(`Maximum number of reconnect attempts reached! (${3})`); + }); + }); +}); diff --git a/packages/web3-providers-ws/test/integration/setup.js b/packages/web3-providers-ws/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-providers-ws/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-providers-ws/test/integration/web_socket_provider_integration.test.ts b/packages/web3-providers-ws/test/integration/web_socket_provider_integration.test.ts new file mode 100644 index 00000000000..d93521be0c2 --- /dev/null +++ b/packages/web3-providers-ws/test/integration/web_socket_provider_integration.test.ts @@ -0,0 +1,263 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3WSProviderError } from 'web3-errors'; +import { + EthExecutionAPI, + JsonRpcId, + JsonRpcNotification, + JsonRpcResponse, + JsonRpcSubscriptionResult, + ProviderRpcError, + SocketRequestItem, + Web3APIPayload, +} from 'web3-types'; +import { Web3DeferredPromise } from 'web3-utils'; +import WebSocketProvider from '../../src/index'; +import { + createTempAccount, + describeIf, + getSystemTestProviderUrl, + isWs, + waitForCloseSocketConnection, + waitForSocketConnect, +} from '../fixtures/system_test_utils'; + +type Resolve = (value?: unknown) => void; + +describeIf(isWs)('WebSocketProvider - implemented methods', () => { + let clientWsUrl: string; + let tempAccount: string; + let webSocketProvider: WebSocketProvider; + let jsonRpcPayload: Web3APIPayload; + // helper function + + beforeAll(async () => { + clientWsUrl = getSystemTestProviderUrl(); + tempAccount = (await createTempAccount()).address; + }); + beforeEach(() => { + jsonRpcPayload = { + jsonrpc: '2.0', + id: 42, + method: 'eth_getBalance', + params: [tempAccount, 'latest'], + } as Web3APIPayload; + webSocketProvider = new WebSocketProvider( + clientWsUrl, + {}, + { delay: 1, autoReconnect: false, maxAttempts: 1 }, + ); + }); + afterEach(async () => { + // make sure we try to close the connection after it is established + if (webSocketProvider.getStatus() === 'connecting') { + await waitForSocketConnect(webSocketProvider); + } + webSocketProvider.disconnect(1000); + }); + + describe('websocker provider tests', () => { + it('should connect', async () => { + await waitForSocketConnect(webSocketProvider); + expect(webSocketProvider).toBeInstanceOf(WebSocketProvider); + expect(webSocketProvider.getStatus()).toBe('connected'); + }); + }); + + describe('subscribe event tests', () => { + it('should subscribe to `message` event', async () => { + const messagePromise = new Promise((resolve: Resolve) => { + webSocketProvider.on( + 'message', + (result?: JsonRpcSubscriptionResult | JsonRpcNotification) => { + if (result?.id !== jsonRpcPayload.id) { + return; + } + expect(result?.id).toBe(jsonRpcPayload.id); + resolve(); + }, + ); + }); + await webSocketProvider.request(jsonRpcPayload); + await messagePromise; + }); + + it('should subscribe to `error` event that could happen at the underlying WebSocket connection', async () => { + await waitForSocketConnect(webSocketProvider); + const errorMsg = 'Custom WebSocket error occurred'; + + const errorPromise = new Promise((resolve: Resolve) => { + webSocketProvider.on('error', (err: any) => { + expect(err?.message).toBe(errorMsg); + resolve(); + }); + }); + + webSocketProvider['_socketConnection']?.emit( + 'error', + new Web3WSProviderError(errorMsg), + ); + await errorPromise; + }); + + it('should subscribe to `connect` event', async () => { + const openPromise = new Promise((resolve: Resolve) => { + webSocketProvider.on('connect', () => { + resolve('resolved'); + }); + }); + await expect(openPromise).resolves.toBe('resolved'); + }); + + it('should subscribe to `disconnect` event', async () => { + const code = 1000; + + const closePromise = new Promise(resolve => { + webSocketProvider.on('disconnect', (error: ProviderRpcError) => { + expect(error?.code).toEqual(code); + resolve(error); + }); + }); + await waitForSocketConnect(webSocketProvider); + webSocketProvider.disconnect(code); + await closePromise; + }); + }); + + describe('disconnect and reset test', () => { + it('should disconnect', async () => { + await waitForSocketConnect(webSocketProvider); + const provider = new WebSocketProvider( + clientWsUrl, + {}, + { delay: 1, autoReconnect: false, maxAttempts: 1 }, + ); + await waitForSocketConnect(provider); + provider.disconnect(1000); + await waitForCloseSocketConnection(provider); + expect(provider.getStatus()).toBe('disconnected'); + }); + + it('should reset', async () => { + await waitForSocketConnect(webSocketProvider); + class TestReset extends WebSocketProvider { + public pendingRequestsSize() { + return this._pendingRequestsQueue.size; + } + + public sentRequestsSize() { + return this._pendingRequestsQueue.size; + } + + public setPendingRequest(id: JsonRpcId, reqItem: SocketRequestItem) { + this._pendingRequestsQueue.set(id, reqItem); + } + + public setSentRequest(id: JsonRpcId, reqItem: SocketRequestItem) { + this._sentRequestsQueue.set(id, reqItem); + } + } + const testResetProvider = new TestReset( + clientWsUrl, + {}, + { delay: 1, autoReconnect: false, maxAttempts: 1 }, + ); + + await waitForSocketConnect(testResetProvider); + + const defPromise = new Web3DeferredPromise>(); + + const reqItem: SocketRequestItem = { + payload: jsonRpcPayload, + deferredPromise: defPromise, + }; + + testResetProvider.setPendingRequest(jsonRpcPayload.id, reqItem); + expect(testResetProvider.pendingRequestsSize()).toBe(1); + + testResetProvider.setSentRequest(jsonRpcPayload.id, reqItem); + expect(testResetProvider.sentRequestsSize()).toBe(1); + + testResetProvider.reset(); + expect(testResetProvider.pendingRequestsSize()).toBe(0); + expect(testResetProvider.sentRequestsSize()).toBe(0); + + testResetProvider.disconnect(1000); + }); + }); + + describe('getStatus get and validate all status tests', () => { + it('should getStatus `connecting`', async () => { + expect(webSocketProvider.getStatus()).toBe('connecting'); + await waitForSocketConnect(webSocketProvider); + }); + + it('should getStatus `connected`', async () => { + await waitForSocketConnect(webSocketProvider); + expect(webSocketProvider.getStatus()).toBe('connected'); + }); + it('should getStatus `disconnected`', async () => { + await waitForSocketConnect(webSocketProvider); + webSocketProvider.disconnect(); + await waitForCloseSocketConnection(webSocketProvider); + expect(webSocketProvider.getStatus()).toBe('disconnected'); + }); + }); + describe('send multiple Requests on same connection with valid payload and receive response tests', () => { + // eslint-disable-next-line jest/expect-expect + let jsonRpcPayload2: Web3APIPayload; + let jsonRpcPayload3: Web3APIPayload; + beforeAll(() => { + jsonRpcPayload2 = { + jsonrpc: '2.0', + id: 43, + method: 'eth_mining', + } as Web3APIPayload; + jsonRpcPayload3 = { + jsonrpc: '2.0', + id: 44, + method: 'eth_hashrate', + } as Web3APIPayload; + }); + + it('should send multiple requests', async () => { + const prom1 = webSocketProvider.request(jsonRpcPayload); + + const prom2 = webSocketProvider.request(jsonRpcPayload2); + + const prom3 = webSocketProvider.request(jsonRpcPayload3); + + const values = await Promise.all([prom1, prom2, prom3]); + expect(values).toEqual( + expect.arrayContaining([ + expect.objectContaining({ id: jsonRpcPayload.id }), + expect.objectContaining({ id: jsonRpcPayload2.id }), + expect.objectContaining({ id: jsonRpcPayload3.id }), + ]), + ); + + // Execute request in connected stated too + const prom3Value = await prom3; + expect(prom3Value).toEqual( + expect.objectContaining({ + id: jsonRpcPayload3.id, + }), + ); + }); + }); +}); diff --git a/packages/web3-providers-ws/test/tsconfig.json b/packages/web3-providers-ws/test/tsconfig.json new file mode 120000 index 00000000000..c73c54e77b4 --- /dev/null +++ b/packages/web3-providers-ws/test/tsconfig.json @@ -0,0 +1 @@ +../../../templates/test/tsconfig.json.tmpl \ No newline at end of file diff --git a/packages/web3-providers-ws/test/unit/__mocks__/isomorphic-ws.ts b/packages/web3-providers-ws/test/unit/__mocks__/isomorphic-ws.ts new file mode 100644 index 00000000000..42a0cdf4871 --- /dev/null +++ b/packages/web3-providers-ws/test/unit/__mocks__/isomorphic-ws.ts @@ -0,0 +1,55 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { EventEmitter } from 'web3-utils'; + +export default class WebSocket extends EventEmitter { + public readyState: number; + + public CONNECTING = 0; + public OPEN = 1; + + public constructor(...args: any[]) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + super(...args); + + // Connected state + this.readyState = 1; + } + + public send(message: any) { + const data = JSON.parse(message); + + setTimeout(() => { + if (data.error) { + this.emit('message', { data: JSON.stringify({ ...data, error: data.error }) }); + } else { + this.emit('message', { data: JSON.stringify({ ...data, result: message }) }); + } + }, 100); + } + + public addEventListener(event: any, cb: () => void) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + this.prependListener(event, cb); + } + + public removeEventListener(event: any, cb: () => void) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + this.removeListener(event, cb); + } +} diff --git a/packages/web3-providers-ws/test/unit/check_implementation.test.ts b/packages/web3-providers-ws/test/unit/check_implementation.test.ts new file mode 100644 index 00000000000..99d7013b45b --- /dev/null +++ b/packages/web3-providers-ws/test/unit/check_implementation.test.ts @@ -0,0 +1,166 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import WebSocket from 'isomorphic-ws'; +import WebSocketProvider from '../../src/index'; + +jest.mock('isomorphic-ws'); +describe('WebSocketProvider', () => { + let send: () => void; + beforeAll(() => { + send = jest.fn(); + jest.spyOn(WebSocket.prototype, 'send').mockImplementation(send); + }); + + describe('methods', () => { + it.each(['_openSocketConnection', '_addSocketListeners'])( + 'should call method %s', + method => { + const _method = jest.fn(); + // @ts-expect-error mock method + jest.spyOn(WebSocketProvider.prototype, method).mockImplementation(_method); + const ws = new WebSocketProvider('ws://localhost:8545'); + expect(ws).toBeDefined(); + expect(_method).toHaveBeenCalled(); + }, + ); + it('should construct with expected methods', () => { + const _closeSocketConnection = jest.fn(); + const _removeSocketListeners = jest.fn(); + const _onDisconnect = jest.fn(); + const code = 1002; + const data = 'data'; + // @ts-expect-error mock method + jest.spyOn(WebSocketProvider.prototype, '_closeSocketConnection').mockImplementation( + _closeSocketConnection, + ); + // @ts-expect-error mock method + jest.spyOn(WebSocketProvider.prototype, '_removeSocketListeners').mockImplementation( + _removeSocketListeners, + ); + // @ts-expect-error mock method + jest.spyOn(WebSocketProvider.prototype, '_onDisconnect').mockImplementation( + _onDisconnect, + ); + const ws = new WebSocketProvider('ws://localhost:8545'); + expect(ws.getStatus()).toBe('connected'); + ws.disconnect(code, data); + expect(_removeSocketListeners).toHaveBeenCalled(); + expect(_onDisconnect).toHaveBeenCalledWith(code, data); + expect(_closeSocketConnection).toHaveBeenCalledWith(code, data); + }); + it('getStatus', () => { + const ws = new WebSocketProvider('ws://localhost:8545'); + expect(ws.getStatus()).toBe('connected'); + // @ts-expect-error mock field + ws._socketConnection.readyState = 0; + expect(ws.getStatus()).toBe('connecting'); + // @ts-expect-error mock field + ws._socketConnection.readyState = 2; + expect(ws.getStatus()).toBe('disconnected'); + // @ts-expect-error mock field + ws._socketConnection = undefined; + expect(ws.getStatus()).toBe('disconnected'); + }); + it('socketConnection.close', () => { + const ws = new WebSocketProvider('ws://localhost:8545'); + const close = jest.fn(); + // @ts-expect-error mock method + ws._socketConnection.close = close; + const code = 1002; + const data = 'data'; + ws.disconnect(code, data); + expect(close).toHaveBeenCalledWith(code, data); + }); + it('connection error', async () => { + const ws = new WebSocketProvider('ws://localhost:8545'); + // @ts-expect-error mock method + ws._socketConnection.readyState = 2; + ws.connect = jest.fn(); + + await expect( + ws.request({ + jsonrpc: '2.0', + id: 42, + method: 'eth_getBalance', + params: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', 'latest'], + }), + ).rejects.toThrow('Connection not open'); + }); + it('onCloseEvent autoReconnect=false', () => { + const ws = new WebSocketProvider('ws://localhost:8545', {}, { autoReconnect: false }); + const _clearQueues = jest.fn(); + const _removeSocketListeners = jest.fn(); + const _onDisconnect = jest.fn(); + // @ts-expect-error mock method + ws._socketConnection.close = jest.fn(); + // @ts-expect-error mock method + ws._clearQueues = _clearQueues; + // @ts-expect-error mock method + ws._removeSocketListeners = _removeSocketListeners; + // @ts-expect-error mock method + ws._onDisconnect = _onDisconnect; + + const code = 1002; + const data = 'data'; + // @ts-expect-error emit method + ws._socketConnection.emit('close', { code, reason: data }); + expect(_clearQueues).toHaveBeenCalledWith({ code, reason: data }); + expect(_removeSocketListeners).toHaveBeenCalled(); + expect(_onDisconnect).toHaveBeenCalledWith(code, data); + }); + it('onCloseEvent autoReconnect=true', () => { + const ws = new WebSocketProvider('ws://localhost:8545'); + const _reconnect = jest.fn(); + // @ts-expect-error mock method + ws._socketConnection.close = jest.fn(); + // @ts-expect-error mock method + ws._reconnect = _reconnect; + + const code = 1002; + const data = 'data'; + // @ts-expect-error emit event + ws._socketConnection.emit('close', { code, reason: data }); + expect(_reconnect).toHaveBeenCalled(); + }); + it('listeners', () => { + const ws = new WebSocketProvider('ws://localhost:8545'); + // @ts-expect-error mock method + ws._socketConnection.listeners = () => { + throw new Error('error'); + }; + const addEventListener = jest.fn(); + // @ts-expect-error mock method + ws._socketConnection.addEventListener = addEventListener; + + // @ts-expect-error mock method + ws._addSocketListeners(); + // @ts-expect-error mock method + expect(addEventListener).toHaveBeenCalledWith('error', ws._onErrorHandler); + const removeEventListener = jest.fn(); + // @ts-expect-error mock method + ws._socketConnection.removeEventListener = removeEventListener; + // @ts-expect-error mock method + ws._removeSocketListeners(); + // @ts-expect-error mock method + expect(removeEventListener).toHaveBeenCalledWith('message', ws._onMessageHandler); + // @ts-expect-error mock method + expect(removeEventListener).toHaveBeenCalledWith('open', ws._onOpenHandler); + // @ts-expect-error mock method + expect(removeEventListener).toHaveBeenCalledWith('close', ws._onCloseHandler); + }); + }); +}); diff --git a/packages/web3-providers-ws/test/unit/jest.config.js b/packages/web3-providers-ws/test/unit/jest.config.js new file mode 100644 index 00000000000..0fb5407df6a --- /dev/null +++ b/packages/web3-providers-ws/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-providers-ws-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-providers-ws/test/unit/web_socket_provider.test.ts b/packages/web3-providers-ws/test/unit/web_socket_provider.test.ts new file mode 100644 index 00000000000..cfa68881f45 --- /dev/null +++ b/packages/web3-providers-ws/test/unit/web_socket_provider.test.ts @@ -0,0 +1,103 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import WebSocket from 'isomorphic-ws'; +import { EthExecutionAPI, Web3APIPayload } from 'web3-types'; +import WebSocketProvider from '../../src/index'; +import { + invalidConnectionStrings, + validConnectionStrings, + wsProviderOptions, +} from '../fixtures/test_data'; + +jest.mock('isomorphic-ws'); + +describe('WebSocketProvider', () => { + let wsProvider: WebSocketProvider; + let jsonRpcPayload: Web3APIPayload; + let jsonRpcResponse: Record; + + beforeEach(() => { + jest.spyOn(WebSocket.prototype, 'send'); + + wsProvider = new WebSocketProvider('ws://localhost:8545'); + + jsonRpcPayload = { + jsonrpc: '2.0', + id: 42, + method: 'eth_getBalance', + params: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', 'latest'], + }; + jsonRpcResponse = { ...jsonRpcPayload, result: JSON.stringify(jsonRpcPayload) }; + }); + + describe('constructor', () => { + it('should construct with expected methods', () => { + expect(wsProvider.request).toBeDefined(); + expect(wsProvider.getStatus).toBeDefined(); + expect(wsProvider.supportsSubscriptions).toBeDefined(); + expect(wsProvider.request).toBeDefined(); + expect(wsProvider.on).toBeDefined(); + expect(wsProvider.removeListener).toBeDefined(); + expect(wsProvider.once).toBeDefined(); + expect(wsProvider.removeAllListeners).toBeDefined(); + expect(wsProvider.connect).toBeDefined(); + expect(wsProvider.disconnect).toBeDefined(); + expect(wsProvider.reset).toBeDefined(); + expect(wsProvider.SocketConnection).toBeInstanceOf(WebSocket); + }); + + it('should allow for providerOptions to be passed upon instantiation', () => { + expect( + () => new WebSocketProvider('ws://localhost:8545', wsProviderOptions), + ).not.toThrow(); + }); + + it.each(validConnectionStrings)( + 'should instantiation with valid client - %s', + validClient => { + expect(() => new WebSocketProvider(validClient)).not.toThrow(); + }, + ); + + it.each(invalidConnectionStrings)( + 'should instantiation with invalid client - %s', + invalidClient => { + expect( + () => + // @ts-expect-error - Purposefully passing invalid types to check validation + new WebSocketProvider(invalidClient), + ).toThrow(`Client URL "${invalidClient as unknown as string}" is invalid.`); + }, + ); + }); + + describe('supportsSubscriptions', () => { + it('should return true', () => { + expect(wsProvider.supportsSubscriptions()).toBe(true); + }); + }); + + describe('request', () => { + describe('success response', () => { + it('should return expected response', async () => { + const result = await wsProvider.request(jsonRpcPayload); + + expect(result).toEqual(jsonRpcResponse); + }); + }); + }); +}); diff --git a/packages/web3-providers-ws/tsconfig.cjs.json b/packages/web3-providers-ws/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-providers-ws/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-providers-ws/tsconfig.esm.json b/packages/web3-providers-ws/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-providers-ws/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-providers-ws/tsconfig.json b/packages/web3-providers-ws/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-providers-ws/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-providers-ws/tsconfig.types.json b/packages/web3-providers-ws/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-providers-ws/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-providers-ws/tsdoc.json b/packages/web3-providers-ws/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-providers-ws/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-providers-ws/types/index.d.ts b/packages/web3-providers-ws/types/index.d.ts deleted file mode 100644 index e8fec4bd7a5..00000000000 --- a/packages/web3-providers-ws/types/index.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens - * @date 2018 - */ - -import { WebsocketProviderBase } from 'web3-core-helpers'; - -export class WebsocketProvider extends WebsocketProviderBase { } diff --git a/packages/web3-providers-ws/types/tests/web3-provider-ws-tests.ts b/packages/web3-providers-ws/types/tests/web3-provider-ws-tests.ts deleted file mode 100644 index 3d54e0f9473..00000000000 --- a/packages/web3-providers-ws/types/tests/web3-provider-ws-tests.ts +++ /dev/null @@ -1,78 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file web3-provider-ws-tests.ts - * @author Josh Stevens - * @date 2018 - */ - -import { WebsocketProviderOptions, JsonRpcResponse } from 'web3-core-helpers'; -import { WebsocketProvider } from 'web3-providers'; - -const options: WebsocketProviderOptions = { - timeout: 30000, - headers: { - authorization: 'Basic username:password' - } -}; - -const wsProvider = new WebsocketProvider('ws://localhost:8545', options); - -// $ExpectType boolean -wsProvider.connected; - -// $ExpectType void -wsProvider.disconnect(100, 'reason'); - -// $ExpectType void -wsProvider.reconnect(); - -// $ExpectType Map -wsProvider.requestQueue; - -// $ExpectType Map -wsProvider.responseQueue; - -// $ExpectType any -wsProvider.connection; - -// $ExpectType boolean -wsProvider.connected; - -// $ExpectType boolean -wsProvider.supportsSubscriptions(); - -// $ExpectType void -wsProvider.send({} as any, (error: Error | null) => {}); - -// $ExpectType void -wsProvider.send({} as any, (error: Error | null, result: JsonRpcResponse | undefined) => {}); - -// $ExpectType void -wsProvider.on('type', () => {}); - -// $ExpectType void -wsProvider.once('type', () => {}); - -// $ExpectType void -wsProvider.removeListener('type', () => {}); - -// $ExpectType void -wsProvider.removeAllListeners('type'); - -// $ExpectType void -wsProvider.reset(); diff --git a/packages/web3-providers-ws/types/tsconfig.json b/packages/web3-providers-ws/types/tsconfig.json deleted file mode 100644 index 74e0aeeb3a8..00000000000 --- a/packages/web3-providers-ws/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-providers": ["."] - } - } -} diff --git a/packages/web3-providers-ws/types/tslint.json b/packages/web3-providers-ws/types/tslint.json deleted file mode 100644 index 6429b0c446e..00000000000 --- a/packages/web3-providers-ws/types/tslint.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false - } -} diff --git a/packages/web3-rpc-methods/.eslintignore b/packages/web3-rpc-methods/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/packages/web3-rpc-methods/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/.eslintrc.js b/packages/web3-rpc-methods/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-rpc-methods/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-rpc-methods/.gitignore b/packages/web3-rpc-methods/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-rpc-methods/.npmignore b/packages/web3-rpc-methods/.npmignore new file mode 120000 index 00000000000..8a0be70f3ed --- /dev/null +++ b/packages/web3-rpc-methods/.npmignore @@ -0,0 +1 @@ +../../templates/.npmignore.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/.npmrc b/packages/web3-rpc-methods/.npmrc new file mode 120000 index 00000000000..5cc817c4313 --- /dev/null +++ b/packages/web3-rpc-methods/.npmrc @@ -0,0 +1 @@ +../../templates/.npmrc.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/.prettierignore b/packages/web3-rpc-methods/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-rpc-methods/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/.prettierrc.json b/packages/web3-rpc-methods/.prettierrc.json new file mode 120000 index 00000000000..00ecd510aaf --- /dev/null +++ b/packages/web3-rpc-methods/.prettierrc.json @@ -0,0 +1 @@ +../../templates/.prettierrc.json.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/CHANGELOG.md b/packages/web3-rpc-methods/CHANGELOG.md new file mode 100644 index 00000000000..dcf92f6e427 --- /dev/null +++ b/packages/web3-rpc-methods/CHANGELOG.md @@ -0,0 +1,129 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [0.1.0-alpha.1] + +### Changed + +- Updated Web3.js dependencies (#5664) + +## [0.1.0-alpha.2] + +### Changed + +- Updated dependencies (#5725) + +## [0.1.0-alpha.3] + +### Changed + +- `main` and `files` entries in `package.json` changed to `lib/` directory from `dist/` (#5739) + +## [0.1.0-alpha.4] + +### Changed + +- web3.js dependencies (#5757) + +## [1.0.0-rc.0] + +### Added + +- Added `createAccessList` functionality ( #5780 ) +- Added support of `safe` and `finalized` block tags (#5823) + +## [1.0.0-rc.1] + +### Added + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +## [1.0.0-rc.2] + +### Changed + +- Dependencies updated + +## [1.0.0] + +Release Notes: + +Detailed List of change logs are mentioned under previous 1.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [1.0.1] + +### Changed + +- Dependencies updated + +## [1.0.2] + +### Fixed + +- Rpc method `getPastLogs` accept blockHash as a parameter https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs (#6181) + +## [1.1.0] + +### Added + +- A `signTypedData` method to `eth_rpc_methods` for the rpc calls `eth_signTypedData` and `eth_signTypedData_v4` (#6286) + +## [1.1.1] + +### Changed + +- Dependencies updated + +## [1.1.2] + +### Changed + +- Dependencies updated + +## [1.1.3] + +### Changed + +- Dependencies updated + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-rpc-methods/README.md b/packages/web3-rpc-methods/README.md new file mode 100644 index 00000000000..2b46d105286 --- /dev/null +++ b/packages/web3-rpc-methods/README.md @@ -0,0 +1,59 @@ +

+ web3.js +

+ +# Web3 RPC Methods + +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] + +This is a sub-package of [web3.js][repo]. + +`web3-rpc-methods` contains RPC methods for various ETH related protocols. + +## Installation + +You can install the package either using [NPM](https://www.npmjs.com/package/web3-rpc-methods) or using [Yarn](https://yarnpkg.com/package/web3-rpc-methods) + +### Using NPM + +```bash +npm install web3-rpc-methods +``` + +### Using Yarn + +```bash +yarn add web3-rpc-methods +``` + +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts + +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | + +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-rpc-methods +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-rpc-methods%2Fpackage.json +[npm-url]: https://npmjs.org/package/web3-rpc-methods +[downloads-image]: https://img.shields.io/npm/dm/web3-rpc-methods?label=npm%20downloads diff --git a/packages/web3-rpc-methods/assets/logo/web3js.ai b/packages/web3-rpc-methods/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-rpc-methods/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-rpc-methods/assets/logo/web3js.jpg b/packages/web3-rpc-methods/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-rpc-methods/assets/logo/web3js.jpg differ diff --git a/packages/web3-rpc-methods/assets/logo/web3js.svg b/packages/web3-rpc-methods/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-rpc-methods/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-rpc-methods/package.json b/packages/web3-rpc-methods/package.json new file mode 100644 index 00000000000..25cc30c36ae --- /dev/null +++ b/packages/web3-rpc-methods/package.json @@ -0,0 +1,63 @@ +{ + "name": "web3-rpc-methods", + "version": "1.1.3", + "description": "Ethereum RPC methods for Web3 4.x.x", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + }, + "dependencies": { + "web3-core": "^4.3.0", + "web3-types": "^1.3.0", + "web3-validator": "^2.0.3" + } +} diff --git a/packages/web3-rpc-methods/src/errors.ts b/packages/web3-rpc-methods/src/errors.ts new file mode 100644 index 00000000000..303b68944fe --- /dev/null +++ b/packages/web3-rpc-methods/src/errors.ts @@ -0,0 +1,16 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ diff --git a/packages/web3-rpc-methods/src/eth_rpc_methods.ts b/packages/web3-rpc-methods/src/eth_rpc_methods.ts new file mode 100644 index 00000000000..2a027733dfb --- /dev/null +++ b/packages/web3-rpc-methods/src/eth_rpc_methods.ts @@ -0,0 +1,593 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3RequestManager } from 'web3-core'; +import { + Address, + BlockNumberOrTag, + Filter, + HexString32Bytes, + HexString8Bytes, + HexStringBytes, + TransactionCallAPI, + TransactionWithSenderAPI, + Uint, + Uint256, + Web3EthExecutionAPI, +} from 'web3-types'; +import { Eip712TypedData } from 'web3-types/src/eth_types'; +import { validator } from 'web3-validator'; + +export async function getProtocolVersion(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_protocolVersion', + params: [], + }); +} + +export async function getSyncing(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_syncing', + params: [], + }); +} + +export async function getCoinbase(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_coinbase', + params: [], + }); +} + +export async function getMining(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_mining', + params: [], + }); +} + +export async function getHashRate(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_hashrate', + params: [], + }); +} + +export async function getGasPrice(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_gasPrice', + params: [], + }); +} + +export async function getAccounts(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_accounts', + params: [], + }); +} + +export async function getBlockNumber(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_blockNumber', + params: [], + }); +} + +export async function getBalance( + requestManager: Web3RequestManager, + address: Address, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['address', 'blockNumberOrTag'], [address, blockNumber]); + + return requestManager.send({ + method: 'eth_getBalance', + params: [address, blockNumber], + }); +} + +export async function getStorageAt( + requestManager: Web3RequestManager, + address: Address, + storageSlot: Uint256, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['address', 'hex', 'blockNumberOrTag'], [address, storageSlot, blockNumber]); + + return requestManager.send({ + method: 'eth_getStorageAt', + params: [address, storageSlot, blockNumber], + }); +} + +export async function getTransactionCount( + requestManager: Web3RequestManager, + address: Address, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['address', 'blockNumberOrTag'], [address, blockNumber]); + + return requestManager.send({ + method: 'eth_getTransactionCount', + params: [address, blockNumber], + }); +} + +export async function getBlockTransactionCountByHash( + requestManager: Web3RequestManager, + blockHash: HexString32Bytes, +) { + validator.validate(['bytes32'], [blockHash]); + + return requestManager.send({ + method: 'eth_getBlockTransactionCountByHash', + params: [blockHash], + }); +} + +export async function getBlockTransactionCountByNumber( + requestManager: Web3RequestManager, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['blockNumberOrTag'], [blockNumber]); + + return requestManager.send({ + method: 'eth_getBlockTransactionCountByNumber', + params: [blockNumber], + }); +} + +export async function getUncleCountByBlockHash( + requestManager: Web3RequestManager, + blockHash: HexString32Bytes, +) { + validator.validate(['bytes32'], [blockHash]); + + return requestManager.send({ + method: 'eth_getUncleCountByBlockHash', + params: [blockHash], + }); +} + +export async function getUncleCountByBlockNumber( + requestManager: Web3RequestManager, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['blockNumberOrTag'], [blockNumber]); + + return requestManager.send({ + method: 'eth_getUncleCountByBlockNumber', + params: [blockNumber], + }); +} + +export async function getCode( + requestManager: Web3RequestManager, + address: Address, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['address', 'blockNumberOrTag'], [address, blockNumber]); + + return requestManager.send({ + method: 'eth_getCode', + params: [address, blockNumber], + }); +} + +export async function sign( + requestManager: Web3RequestManager, + address: Address, + message: HexStringBytes, +) { + validator.validate(['address', 'hex'], [address, message]); + + return requestManager.send({ + method: 'eth_sign', + params: [address, message], + }); +} + +// TODO - Validation should be: +// isTransactionWithSender(transaction) +// ? validateTransactionWithSender(transaction) +// : validateTransactionWithSender(transaction, true) with true being a isPartial flag +export async function signTransaction( + requestManager: Web3RequestManager, + transaction: TransactionWithSenderAPI | Partial, +) { + return requestManager.send({ + method: 'eth_signTransaction', + params: [transaction], + }); +} + +// TODO - Validation should be: +// isTransactionWithSender(transaction) +// ? validateTransactionWithSender(transaction) +// : validateTransactionWithSender(transaction, true) with true being a isPartial flag +export async function sendTransaction( + requestManager: Web3RequestManager, + transaction: TransactionWithSenderAPI | Partial, +) { + return requestManager.send({ + method: 'eth_sendTransaction', + params: [transaction], + }); +} + +export async function sendRawTransaction( + requestManager: Web3RequestManager, + transaction: HexStringBytes, +) { + validator.validate(['hex'], [transaction]); + + return requestManager.send({ + method: 'eth_sendRawTransaction', + params: [transaction], + }); +} + +// TODO - validate transaction +export async function call( + requestManager: Web3RequestManager, + transaction: TransactionCallAPI, + blockNumber: BlockNumberOrTag, +) { + // validateTransactionCall(transaction); + validator.validate(['blockNumberOrTag'], [blockNumber]); + + return requestManager.send({ + method: 'eth_call', + params: [transaction, blockNumber], + }); +} + +// TODO Not sure how to best validate Partial +export async function estimateGas( + requestManager: Web3RequestManager, + transaction: Partial, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['blockNumberOrTag'], [blockNumber]); + + return requestManager.send({ + method: 'eth_estimateGas', + params: [transaction, blockNumber], + }); +} + +export async function getBlockByHash( + requestManager: Web3RequestManager, + blockHash: HexString32Bytes, + hydrated: boolean, +) { + validator.validate(['bytes32', 'bool'], [blockHash, hydrated]); + + return requestManager.send({ + method: 'eth_getBlockByHash', + params: [blockHash, hydrated], + }); +} + +export async function getBlockByNumber( + requestManager: Web3RequestManager, + blockNumber: BlockNumberOrTag, + hydrated: boolean, +) { + validator.validate(['blockNumberOrTag', 'bool'], [blockNumber, hydrated]); + + return requestManager.send({ + method: 'eth_getBlockByNumber', + params: [blockNumber, hydrated], + }); +} + +export async function getTransactionByHash( + requestManager: Web3RequestManager, + transactionHash: HexString32Bytes, +) { + validator.validate(['bytes32'], [transactionHash]); + + return requestManager.send({ + method: 'eth_getTransactionByHash', + params: [transactionHash], + }); +} + +export async function getTransactionByBlockHashAndIndex( + requestManager: Web3RequestManager, + blockHash: HexString32Bytes, + transactionIndex: Uint, +) { + validator.validate(['bytes32', 'hex'], [blockHash, transactionIndex]); + + return requestManager.send({ + method: 'eth_getTransactionByBlockHashAndIndex', + params: [blockHash, transactionIndex], + }); +} + +export async function getTransactionByBlockNumberAndIndex( + requestManager: Web3RequestManager, + blockNumber: BlockNumberOrTag, + transactionIndex: Uint, +) { + validator.validate(['blockNumberOrTag', 'hex'], [blockNumber, transactionIndex]); + + return requestManager.send({ + method: 'eth_getTransactionByBlockNumberAndIndex', + params: [blockNumber, transactionIndex], + }); +} + +export async function getTransactionReceipt( + requestManager: Web3RequestManager, + transactionHash: HexString32Bytes, +) { + validator.validate(['bytes32'], [transactionHash]); + + return requestManager.send({ + method: 'eth_getTransactionReceipt', + params: [transactionHash], + }); +} + +export async function getUncleByBlockHashAndIndex( + requestManager: Web3RequestManager, + blockHash: HexString32Bytes, + uncleIndex: Uint, +) { + validator.validate(['bytes32', 'hex'], [blockHash, uncleIndex]); + + return requestManager.send({ + method: 'eth_getUncleByBlockHashAndIndex', + params: [blockHash, uncleIndex], + }); +} + +export async function getUncleByBlockNumberAndIndex( + requestManager: Web3RequestManager, + blockNumber: BlockNumberOrTag, + uncleIndex: Uint, +) { + validator.validate(['blockNumberOrTag', 'hex'], [blockNumber, uncleIndex]); + + return requestManager.send({ + method: 'eth_getUncleByBlockNumberAndIndex', + params: [blockNumber, uncleIndex], + }); +} + +export async function getCompilers(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_getCompilers', + params: [], + }); +} + +export async function compileSolidity(requestManager: Web3RequestManager, code: string) { + validator.validate(['string'], [code]); + + return requestManager.send({ + method: 'eth_compileSolidity', + params: [code], + }); +} + +export async function compileLLL(requestManager: Web3RequestManager, code: string) { + validator.validate(['string'], [code]); + + return requestManager.send({ + method: 'eth_compileLLL', + params: [code], + }); +} + +export async function compileSerpent(requestManager: Web3RequestManager, code: string) { + validator.validate(['string'], [code]); + + return requestManager.send({ + method: 'eth_compileSerpent', + params: [code], + }); +} + +export async function newFilter(requestManager: Web3RequestManager, filter: Filter) { + validator.validate(['filter'], [filter]); + + return requestManager.send({ + method: 'eth_newFilter', + params: [filter], + }); +} + +export async function newBlockFilter(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_newBlockFilter', + params: [], + }); +} + +export async function newPendingTransactionFilter(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_newPendingTransactionFilter', + params: [], + }); +} + +export async function uninstallFilter(requestManager: Web3RequestManager, filterIdentifier: Uint) { + validator.validate(['hex'], [filterIdentifier]); + + return requestManager.send({ + method: 'eth_uninstallFilter', + params: [filterIdentifier], + }); +} + +export async function getFilterChanges(requestManager: Web3RequestManager, filterIdentifier: Uint) { + validator.validate(['hex'], [filterIdentifier]); + + return requestManager.send({ + method: 'eth_getFilterChanges', + params: [filterIdentifier], + }); +} + +export async function getFilterLogs(requestManager: Web3RequestManager, filterIdentifier: Uint) { + validator.validate(['hex'], [filterIdentifier]); + + return requestManager.send({ + method: 'eth_getFilterLogs', + params: [filterIdentifier], + }); +} + +export async function getLogs(requestManager: Web3RequestManager, filter: Filter) { + validator.validate(['filter'], [filter]); + + return requestManager.send({ + method: 'eth_getLogs', + params: [filter], + }); +} + +export async function getWork(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_getWork', + params: [], + }); +} + +export async function submitWork( + requestManager: Web3RequestManager, + nonce: HexString8Bytes, + hash: HexString32Bytes, + digest: HexString32Bytes, +) { + validator.validate(['bytes8', 'bytes32', 'bytes32'], [nonce, hash, digest]); + + return requestManager.send({ + method: 'eth_submitWork', + params: [nonce, hash, digest], + }); +} + +export async function submitHashrate( + requestManager: Web3RequestManager, + hashRate: HexString32Bytes, + id: HexString32Bytes, +) { + validator.validate(['bytes32', 'bytes32'], [hashRate, id]); + + return requestManager.send({ + method: 'eth_submitHashrate', + params: [hashRate, id], + }); +} + +export async function getFeeHistory( + requestManager: Web3RequestManager, + blockCount: Uint, + newestBlock: BlockNumberOrTag, + rewardPercentiles: number[], +) { + validator.validate(['hex', 'blockNumberOrTag'], [blockCount, newestBlock]); + + for (const rewardPercentile of rewardPercentiles) { + validator.validate(['number'], [rewardPercentile]); + } + + return requestManager.send({ + method: 'eth_feeHistory', + params: [blockCount, newestBlock, rewardPercentiles], + }); +} + +export async function getPendingTransactions( + requestManager: Web3RequestManager, +) { + return requestManager.send({ + method: 'eth_pendingTransactions', + params: [], + }); +} + +export async function requestAccounts(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_requestAccounts', + params: [], + }); +} + +export async function getChainId(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_chainId', + params: [], + }); +} + +export async function getProof( + requestManager: Web3RequestManager, + address: Address, + storageKeys: HexString32Bytes[], + blockNumber: BlockNumberOrTag, +) { + validator.validate( + ['address', 'bytes32[]', 'blockNumberOrTag'], + [address, storageKeys, blockNumber], + ); + + return requestManager.send({ + method: 'eth_getProof', + params: [address, storageKeys, blockNumber], + }); +} + +export async function getNodeInfo(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'web3_clientVersion', + params: [], + }); +} + +export async function createAccessList( + requestManager: Web3RequestManager, + transaction: TransactionWithSenderAPI | Partial, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['blockNumberOrTag'], [blockNumber]); + + return requestManager.send({ + method: 'eth_createAccessList', + params: [transaction, blockNumber], + }); +} + +export async function signTypedData( + requestManager: Web3RequestManager, + address: Address, + typedData: Eip712TypedData, + useLegacy = false, +): Promise { + // TODO Add validation for typedData + validator.validate(['address'], [address]); + + return requestManager.send({ + method: `eth_signTypedData${useLegacy ? '' : '_v4'}`, + params: [address, typedData], + }); +} diff --git a/packages/web3-rpc-methods/src/index.ts b/packages/web3-rpc-methods/src/index.ts new file mode 100644 index 00000000000..c2fc512f137 --- /dev/null +++ b/packages/web3-rpc-methods/src/index.ts @@ -0,0 +1,21 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import * as ethRpcMethods from './eth_rpc_methods.js'; +import * as netRpcMethods from './net_rpc_methods.js'; +import * as personalRpcMethods from './personal_rpc_methods.js'; + +export { ethRpcMethods, netRpcMethods, personalRpcMethods }; diff --git a/packages/web3-rpc-methods/src/net_rpc_methods.ts b/packages/web3-rpc-methods/src/net_rpc_methods.ts new file mode 100644 index 00000000000..7b638cf59a9 --- /dev/null +++ b/packages/web3-rpc-methods/src/net_rpc_methods.ts @@ -0,0 +1,39 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3RequestManager } from 'web3-core'; +import { Web3NetAPI } from 'web3-types'; + +export async function getId(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'net_version', + params: [], + }); +} + +export async function getPeerCount(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'net_peerCount', + params: [], + }); +} + +export async function isListening(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'net_listening', + params: [], + }); +} diff --git a/packages/web3-rpc-methods/src/personal_rpc_methods.ts b/packages/web3-rpc-methods/src/personal_rpc_methods.ts new file mode 100644 index 00000000000..c73e1c534ab --- /dev/null +++ b/packages/web3-rpc-methods/src/personal_rpc_methods.ts @@ -0,0 +1,104 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3RequestManager } from 'web3-core'; +import { Address, EthPersonalAPI, HexString, Transaction } from 'web3-types'; + +export const getAccounts = async (requestManager: Web3RequestManager) => + requestManager.send({ + method: 'personal_listAccounts', + params: [], + }); + +export const newAccount = async ( + requestManager: Web3RequestManager, + password: string, +) => + requestManager.send({ + method: 'personal_newAccount', + params: [password], + }); + +export const unlockAccount = async ( + requestManager: Web3RequestManager, + address: Address, + password: string, + unlockDuration: number, +) => + requestManager.send({ + method: 'personal_unlockAccount', + params: [address, password, unlockDuration], + }); + +export const lockAccount = async ( + requestManager: Web3RequestManager, + address: Address, +) => + requestManager.send({ + method: 'personal_lockAccount', + params: [address], + }); + +export const importRawKey = async ( + requestManager: Web3RequestManager, + keyData: HexString, + passphrase: string, +) => + requestManager.send({ + method: 'personal_importRawKey', + params: [keyData, passphrase], + }); + +export const sendTransaction = async ( + requestManager: Web3RequestManager, + tx: Transaction, + passphrase: string, +) => + requestManager.send({ + method: 'personal_sendTransaction', + params: [tx, passphrase], + }); + +export const signTransaction = async ( + requestManager: Web3RequestManager, + tx: Transaction, + passphrase: string, +) => + requestManager.send({ + method: 'personal_signTransaction', + params: [tx, passphrase], + }); + +export const sign = async ( + requestManager: Web3RequestManager, + data: HexString, + address: Address, + passphrase: string, +) => + requestManager.send({ + method: 'personal_sign', + params: [data, address, passphrase], + }); + +export const ecRecover = async ( + requestManager: Web3RequestManager, + signedData: HexString, + signature: string, +) => + requestManager.send({ + method: 'personal_ecRecover', + params: [signedData, signature], + }); diff --git a/packages/web3-rpc-methods/test/.eslintrc.js b/packages/web3-rpc-methods/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-rpc-methods/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-rpc-methods/test/config/jest.config.js b/packages/web3-rpc-methods/test/config/jest.config.js new file mode 120000 index 00000000000..b875b48129d --- /dev/null +++ b/packages/web3-rpc-methods/test/config/jest.config.js @@ -0,0 +1 @@ +../../../../templates/jest.config.js.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/test/config/setup.js b/packages/web3-rpc-methods/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-rpc-methods/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-rpc-methods/test/integration/jest.config.js b/packages/web3-rpc-methods/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-rpc-methods/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-rpc-methods/test/integration/setup.js b/packages/web3-rpc-methods/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-rpc-methods/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-rpc-methods/test/tsconfig.json b/packages/web3-rpc-methods/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-rpc-methods/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-rpc-methods/test/unit/constructor.test.ts b/packages/web3-rpc-methods/test/unit/constructor.test.ts new file mode 100644 index 00000000000..5d08d50bebc --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/constructor.test.ts @@ -0,0 +1,37 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// import Web3ProviderBase from '../../src/index' +// import {ProviderOptions} from '../../types' + +describe('constructs a PLACEHOLDER instance with expected properties', () => { + // let providerOptions: ProviderOptions + + beforeEach(() => { + // providerOptions = { + // providerUrl: 'http://127.0.0.1:8545' + // } + }); + + it('should construct with expected properties', () => { + // const web3ProviderBase = new Web3ProviderBase(providerOptions) + // expect(web3ProviderBase).toMatchObject({ + // _providerUrl: providerOptions.providerUrl + // }) + expect(true).toBeTruthy(); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/call.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/call.test.ts new file mode 100644 index 00000000000..a40d68283a3 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/call.test.ts @@ -0,0 +1,71 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/call'; + +jest.mock('web3-validator'); + +describe('call', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with call method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.call(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_call', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.call(requestManager, ...inputParameters); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [__, expectedBlockNumber] = inputParameters; + expect(validatorSpy).toHaveBeenCalledWith(['blockNumberOrTag'], [expectedBlockNumber]); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_lll.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_lll.test.ts new file mode 100644 index 00000000000..77829a85376 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_lll.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/compile_lll'; + +jest.mock('web3-validator'); + +describe('compileLLL', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with compileLLL method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.compileLLL(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_compileLLL', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.compileLLL(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['string'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_serpent.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_serpent.test.ts new file mode 100644 index 00000000000..2b1e2668319 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_serpent.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/compile_lll'; + +jest.mock('web3-validator'); + +describe('compileSerpent', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with compileSerpent method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.compileSerpent(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_compileSerpent', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.compileSerpent(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['string'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_solidity.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_solidity.test.ts new file mode 100644 index 00000000000..7587fa20c0f --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_solidity.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/compile_solidity'; + +jest.mock('web3-validator'); + +describe('compileSolidity', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with compileSolidity method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.compileSolidity(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_compileSolidity', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.compileSolidity(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['string'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/createAccessList.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/createAccessList.test.ts new file mode 100644 index 00000000000..f90aa6e9f0f --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/createAccessList.test.ts @@ -0,0 +1,55 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/createAccessList'; + +describe('createAccessList', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with eth_createAccessList method with correct params', + async (_, inputParameters) => { + await ethRpcMethods.createAccessList(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_createAccessList', + params: inputParameters, + }); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/estimate_gas.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/estimate_gas.test.ts new file mode 100644 index 00000000000..b5873369e83 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/estimate_gas.test.ts @@ -0,0 +1,70 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/estimate_gas'; + +jest.mock('web3-validator'); + +describe('estimateGas', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with estimateGas method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.estimateGas(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_estimateGas', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.estimateGas(requestManager, ...inputParameters); + const [__, expectedBlockNumber] = inputParameters; + expect(validatorSpy).toHaveBeenCalledWith(['blockNumberOrTag'], [expectedBlockNumber]); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/call.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/call.ts new file mode 100644 index 00000000000..327a79fb8ba --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/call.ts @@ -0,0 +1,61 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { TransactionCallAPI, BlockTags, BlockNumberOrTag } from 'web3-types'; + +export const mockRpcResponse = '0x5208'; + +const transaction: TransactionCallAPI = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + data: '0x', +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - transaction + * - blockNumber + */ +type TestData = [string, [TransactionCallAPI, BlockNumberOrTag]]; +export const testData: TestData[] = [ + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.LATEST`, + [transaction, BlockTags.LATEST], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.EARLIEST`, + [transaction, BlockTags.EARLIEST], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.PENDING`, + [transaction, BlockTags.PENDING], + ], + [`${JSON.stringify(transaction)}\nblockNumber = BlockTags.SAFE`, [transaction, BlockTags.SAFE]], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.FINALIZED`, + [transaction, BlockTags.FINALIZED], + ], + [`${JSON.stringify(transaction)}\nblockNumber = "0x4b7"`, [transaction, '0x4b7']], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_lll.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_lll.ts new file mode 100644 index 00000000000..53c1ea4eeac --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_lll.ts @@ -0,0 +1,27 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - code + */ +type TestData = [string, [string]]; +export const testData: TestData[] = [ + ['code = (returnlll (suicide (caller)))', ['(returnlll (suicide (caller)))']], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_serpent.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_serpent.ts new file mode 100644 index 00000000000..a3cc8c1ab53 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_serpent.ts @@ -0,0 +1,25 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - code + */ +type TestData = [string, [string]]; +export const testData: TestData[] = [['code = /* some serpent */', ['/* some serpent */']]]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_solidity.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_solidity.ts new file mode 100644 index 00000000000..84e9341e084 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_solidity.ts @@ -0,0 +1,30 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - code + */ +type TestData = [string, [string]]; +export const testData: TestData[] = [ + [ + 'code = contract test { function multiply(uint a) returns(uint d) { return a * 7; } }', + ['contract test { function multiply(uint a) returns(uint d) { return a * 7; } }'], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/createAccessList.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/createAccessList.ts new file mode 100644 index 00000000000..536b6781b93 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/createAccessList.ts @@ -0,0 +1,55 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, BlockTags, TransactionWithSenderAPI } from 'web3-types'; + +export const mockRpcResponse = + '{"accessList":[{"address":"0xc285289346689ee7cd63e4bb1a3b40f5f6e7973c","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]}],"gasUsed":"0x6a5b"}'; + +const callObj: Partial = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0xc285289346689ee7cd63e4bb1a3b40f5f6e7973c', + value: '0x174876e800', + gas: '0x5208', + type: '0x2', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + data: '0x9a67c8b100000000000000000000000000000000000000000000000000000000000004d0', +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - callObj + * - blockNumber + */ +type TestData = [ + string, + [TransactionWithSenderAPI | Partial, BlockNumberOrTag], +]; + +export const testData: TestData[] = [ + [`${JSON.stringify(callObj)}\nblockNumber = BlockTags.LATEST`, [callObj, BlockTags.LATEST]], + [`${JSON.stringify(callObj)}\nblockNumber = BlockTags.EARLIEST`, [callObj, BlockTags.EARLIEST]], + [`${JSON.stringify(callObj)}\nblockNumber = BlockTags.PENDING`, [callObj, BlockTags.PENDING]], + [`${JSON.stringify(callObj)}\nblockNumber = BlockTags.SAFE`, [callObj, BlockTags.SAFE]], + [ + `${JSON.stringify(callObj)}\nblockNumber = BlockTags.FINALIZED`, + [callObj, BlockTags.FINALIZED], + ], + [`${JSON.stringify(callObj)}\nblockNumber = "0x4b7"`, [callObj, '0x4b7']], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/estimate_gas.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/estimate_gas.ts new file mode 100644 index 00000000000..62f547eaa8b --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/estimate_gas.ts @@ -0,0 +1,62 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { TransactionWithSenderAPI, BlockTags, BlockNumberOrTag } from 'web3-types'; + +export const mockRpcResponse = '0x5208'; + +const transaction: Partial = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + data: '0x', + nonce: '0x4', + chainId: '0x1', +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - transaction + * - blockNumber + */ +type TestData = [string, [Partial, BlockNumberOrTag]]; +export const testData: TestData[] = [ + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.LATEST`, + [transaction, BlockTags.LATEST], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.EARLIEST`, + [transaction, BlockTags.EARLIEST], + ], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.PENDING`, + [transaction, BlockTags.PENDING], + ], + [`${JSON.stringify(transaction)}\nblockNumber = BlockTags.SAFE`, [transaction, BlockTags.SAFE]], + [ + `${JSON.stringify(transaction)}\nblockNumber = BlockTags.FINALIZED`, + [transaction, BlockTags.FINALIZED], + ], + [`${JSON.stringify(transaction)}\nblockNumber = "0x4b7"`, [transaction, '0x4b7']], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_balance.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_balance.ts new file mode 100644 index 00000000000..bd9a6247798 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_balance.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Address, BlockTags, BlockNumberOrTag } from 'web3-types'; + +export const mockRpcResponse = '0xe8d4a51000'; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - address + * - blockNumber + */ +type TestData = [string, [Address, BlockNumberOrTag]]; +export const testData: TestData[] = [ + ['blockNumber = BlockTags.LATEST', [address, BlockTags.LATEST]], + ['blockNumber = BlockTags.EARLIEST', [address, BlockTags.EARLIEST]], + ['blockNumber = BlockTags.PENDING', [address, BlockTags.PENDING]], + ['blockNumber = BlockTags.SAFE', [address, BlockTags.SAFE]], + ['blockNumber = BlockTags.FINALIZED', [address, BlockTags.FINALIZED]], + ['blockNumber = "0x4b7"', [address, '0x4b7']], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_by_hash.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_by_hash.ts new file mode 100644 index 00000000000..081b1192cd9 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_by_hash.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { HexString32Bytes } from 'web3-types'; + +export const mockRpcResponse = '0xb'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockNumber + * - hydrated + */ +type TestData = [string, [HexString32Bytes, boolean]]; +export const testData: TestData[] = [ + [ + 'blockNumber = "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", hydrated = true', + ['0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', true], + ], + [ + 'blockNumber = "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", hydrated = false', + ['0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', false], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_by_number.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_by_number.ts new file mode 100644 index 00000000000..421894fdbb7 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_by_number.ts @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, BlockTags } from 'web3-types'; + +export const mockRpcResponse = '0xb'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockNumber + * - hydrated + */ +type TestData = [string, [BlockNumberOrTag, boolean]]; +export const testData: TestData[] = [ + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', true], + ], + ['blockNumber = BlockTags.LATEST', [BlockTags.LATEST, true]], + ['blockNumber = BlockTags.EARLIEST', [BlockTags.EARLIEST, true]], + ['blockNumber = BlockTags.PENDING', [BlockTags.PENDING, true]], + ['blockNumber = BlockTags.SAFE', [BlockTags.SAFE, true]], + ['blockNumber = BlockTags.FINALIZED', [BlockTags.FINALIZED, true]], + ['blockNumber = "0x4b7"', ['0x4b7', true]], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_transaction_count_by_hash.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_transaction_count_by_hash.ts new file mode 100644 index 00000000000..a6b485b1f86 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_transaction_count_by_hash.ts @@ -0,0 +1,33 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { HexString32Bytes } from 'web3-types'; + +export const mockRpcResponse = '0xb'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockHash + */ +type TestData = [string, [HexString32Bytes]]; +export const testData: TestData[] = [ + [ + 'blockNumber = "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"', + ['0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b'], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_transaction_count_by_number.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_transaction_count_by_number.ts new file mode 100644 index 00000000000..8bd2e8a04bb --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_transaction_count_by_number.ts @@ -0,0 +1,33 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockTags, BlockNumberOrTag } from 'web3-types'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockNumber + */ +type TestData = [string, [BlockNumberOrTag]]; +export const testData: TestData[] = [ + ['blockNumber = BlockTags.LATEST', [BlockTags.LATEST]], + ['blockNumber = BlockTags.EARLIEST', [BlockTags.EARLIEST]], + ['blockNumber = BlockTags.PENDING', [BlockTags.PENDING]], + ['blockNumber = BlockTags.SAFE', [BlockTags.SAFE]], + ['blockNumber = BlockTags.FINALIZED', [BlockTags.FINALIZED]], + ['blockNumber = "0x4b7"', ['0x4b7']], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_code.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_code.ts new file mode 100644 index 00000000000..78f2161f288 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_code.ts @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Address, BlockTags, BlockNumberOrTag } from 'web3-types'; + +export const mockRpcResponse = '0xb'; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - address + * - blockNumber + */ +type TestData = [string, [Address, BlockNumberOrTag]]; +export const testData: TestData[] = [ + // blockNumber = BlockTag + ['blockNumber = BlockTags.LATEST', [address, BlockTags.LATEST]], + ['blockNumber = BlockTags.EARLIEST', [address, BlockTags.EARLIEST]], + ['blockNumber = BlockTags.PENDING', [address, BlockTags.PENDING]], + ['blockNumber = BlockTags.SAFE', [address, BlockTags.SAFE]], + ['blockNumber = BlockTags.FINALIZED', [address, BlockTags.FINALIZED]], + // blockNumber = Numbers + ['blockNumber = "0x4b7"', [address, '0x4b7']], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_fee_history.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_fee_history.ts new file mode 100644 index 00000000000..c7791a1fb34 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_fee_history.ts @@ -0,0 +1,51 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, BlockTags, Uint } from 'web3-types'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockCount + * - newestBlock + * - rewardPercentiles + */ +type TestData = [string, [Uint, BlockNumberOrTag, number[]]]; +export const testData: TestData[] = [ + [ + 'blockCount = "0x88df016", newestBlock = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"', + ['0x88df016', '0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', [12, 4, 5]], + ], + [ + 'blockCount = "0x88df016", newestBlock = BlockTags.LATEST', + ['0x88df016', BlockTags.LATEST, []], + ], + [ + 'blockCount = "0x88df016", newestBlock = BlockTags.EARLIEST', + ['0x88df016', BlockTags.EARLIEST, []], + ], + [ + 'blockCount = "0x88df016", newestBlock = BlockTags.PENDING', + ['0x88df016', BlockTags.PENDING, []], + ], + ['blockCount = "0x88df016", newestBlock = BlockTags.SAFE', ['0x88df016', BlockTags.SAFE, []]], + [ + 'blockCount = "0x88df016", newestBlock = BlockTags.FINALIZED', + ['0x88df016', BlockTags.FINALIZED, []], + ], + ['blockCount = "0x88df016", newestBlock = "0x4b7"', ['0x88df016', '0x4b7', []]], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_filter_changes.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_filter_changes.ts new file mode 100644 index 00000000000..34d9698d645 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_filter_changes.ts @@ -0,0 +1,26 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Uint } from 'web3-types'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - filterIdentifier + */ +type TestData = [string, [Uint]]; +export const testData: TestData[] = [['filterIdentifier = "0x4b7"', ['0x4b7']]]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_filter_logs.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_filter_logs.ts new file mode 100644 index 00000000000..34d9698d645 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_filter_logs.ts @@ -0,0 +1,26 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Uint } from 'web3-types'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - filterIdentifier + */ +type TestData = [string, [Uint]]; +export const testData: TestData[] = [['filterIdentifier = "0x4b7"', ['0x4b7']]]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_logs.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_logs.ts new file mode 100644 index 00000000000..c64dee22c6d --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_logs.ts @@ -0,0 +1,103 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Filter } from 'web3-types'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - filter + */ +type TestData = [string, [Filter]]; +export const testData: TestData[] = [ + [ + 'filter = fromBlock', + [ + { + fromBlock: '0xc0ff3', + }, + ], + ], + [ + 'filter = toBlock', + [ + { + toBlock: '0xc0ff3', + }, + ], + ], + [ + 'filter = address', + [ + { + address: '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + }, + ], + ], + [ + 'filter = address[]', + [ + { + address: [ + '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + '0xdfd5293d8e347dfe59e90efd55b2956a1343963d', + ], + }, + ], + ], + [ + 'filter = topics[]', + [ + { + topics: [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + '0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc', + ], + ], + }, + ], + ], + [ + 'filter = fromBlock, toBlock, address[], topics[]', + [ + { + fromBlock: '0xc0ff3', + toBlock: '0xc0ff3', + address: [ + '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + '0xdfd5293d8e347dfe59e90efd55b2956a1343963d', + ], + topics: [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + '0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc', + ], + ], + }, + ], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_proof.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_proof.ts new file mode 100644 index 00000000000..e3963c3ece9 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_proof.ts @@ -0,0 +1,35 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Address, HexString32Bytes, Uint } from 'web3-types'; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - address + * - storageKey + * - blockNumber + */ +type TestData = [string, [Address, HexString32Bytes[], Uint]]; +export const testData: TestData[] = [ + [ + 'address = "0x407d73d8a49eeb85d32cf465507dd71d507100c1", storageKeys = ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"], blockNumber = "0x88"', + [address, ['0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b'], '0x88'], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_storage_at.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_storage_at.ts new file mode 100644 index 00000000000..a098e4e7b74 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_storage_at.ts @@ -0,0 +1,49 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, Address, BlockTags, Uint256 } from 'web3-types'; + +export const mockRpcResponse = '0x033456732123ffff2342342dd12342434324234234fd234fd23fd4f23d4234'; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - address + * - storageSlot + * - blockNumber + */ +type TestData = [string, [Address, Uint256, BlockNumberOrTag]]; +export const testData: TestData[] = [ + // Testing blockNumber cases + ['storageSlot = "0x4b7", blockNumber = BlockTags.LATEST', [address, '0x4b7', BlockTags.LATEST]], + [ + 'storageSlot = "0x4b7", blockNumber = BlockTags.EARLIEST', + [address, '0x4b7', BlockTags.EARLIEST], + ], + [ + 'storageSlot = "0x4b7", blockNumber = BlockTags.PENDING', + [address, '0x4b7', BlockTags.PENDING], + ], + ['storageSlot = "0x4b7", blockNumber = BlockTags.SAFE', [address, '0x4b7', BlockTags.SAFE]], + [ + 'storageSlot = "0x4b7", blockNumber = BlockTags.FINALIZED', + [address, '0x4b7', BlockTags.FINALIZED], + ], + ['storageSlot = "0x4b7", blockNumber = "0x4b7"', [address, '0x4b7', '0x4b7']], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_block_hash_and_index.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_block_hash_and_index.ts new file mode 100644 index 00000000000..ea70cfce63b --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_block_hash_and_index.ts @@ -0,0 +1,32 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { HexString32Bytes, Uint } from 'web3-types'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - transactionHash + * - transactionIndex + */ +type TestData = [string, [HexString32Bytes, Uint]]; +export const testData: TestData[] = [ + [ + 'transactionHash = "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", hydrated = true', + ['0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', '0x88'], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_block_number_and_index.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_block_number_and_index.ts new file mode 100644 index 00000000000..006b65f6825 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_block_number_and_index.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, BlockTags, Uint } from 'web3-types'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockNumber + * - transactionIndex + */ +type TestData = [string, [BlockNumberOrTag, Uint]]; +export const testData: TestData[] = [ + [ + 'blockNumber = "0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"', + ['0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8', '0x88df016'], + ], + ['blockNumber = BlockTags.LATEST', [BlockTags.LATEST, '0x88df016']], + ['blockNumber = BlockTags.EARLIEST', [BlockTags.EARLIEST, '0x88df016']], + ['blockNumber = BlockTags.PENDING', [BlockTags.PENDING, '0x88df016']], + ['blockNumber = BlockTags.SAFE', [BlockTags.SAFE, '0x88df016']], + ['blockNumber = BlockTags.FINALIZED', [BlockTags.FINALIZED, '0x88df016']], + ['blockNumber = "0x4b7"', ['0x4b7', '0x88df016']], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_hash.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_hash.ts new file mode 100644 index 00000000000..daede4bf5d6 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_hash.ts @@ -0,0 +1,35 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { HexString32Bytes } from 'web3-types'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - transactionHash + */ +type TestData = [string, [HexString32Bytes]]; +export const testData: TestData[] = [ + [ + 'transactionHash = "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", hydrated = true', + ['0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b'], + ], + [ + 'transactionHash = "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", hydrated = false', + ['0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b'], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_count.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_count.ts new file mode 100644 index 00000000000..78b2e69f4bb --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_count.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, Address, BlockTags } from 'web3-types'; + +export const mockRpcResponse = '0xe8d4a51000'; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - address + * - blockNumber + */ +type TestData = [string, [Address, BlockNumberOrTag]]; +export const testData: TestData[] = [ + ['blockNumber = BlockTags.LATEST', [address, BlockTags.LATEST]], + ['blockNumber = BlockTags.EARLIEST', [address, BlockTags.EARLIEST]], + ['blockNumber = BlockTags.PENDING', [address, BlockTags.PENDING]], + ['blockNumber = BlockTags.SAFE', [address, BlockTags.SAFE]], + ['blockNumber = BlockTags.FINALIZED', [address, BlockTags.FINALIZED]], + ['blockNumber = "0x4b7"', [address, '0x4b7']], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_receipt.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_receipt.ts new file mode 100644 index 00000000000..68b9639fe4f --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_receipt.ts @@ -0,0 +1,37 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { HexString32Bytes } from 'web3-types'; + +export const mockRpcResponse = '0xb'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - transactionHash + */ +type TestData = [string, [HexString32Bytes]]; +export const testData: TestData[] = [ + [ + 'transactionHash = "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", hydrated = true', + ['0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b'], + ], + [ + 'transactionHash = "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", hydrated = false', + ['0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b'], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_by_block_hash_and_index.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_by_block_hash_and_index.ts new file mode 100644 index 00000000000..8577efe646b --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_by_block_hash_and_index.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { HexString32Bytes, Uint } from 'web3-types'; + +export const mockRpcResponse = '0xb'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockHash + * - uncleIndex + */ +type TestData = [string, [HexString32Bytes, Uint]]; +export const testData: TestData[] = [ + [ + 'blockHash = "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", uncleIndex = "0x88"', + ['0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', '0x88'], + ], + [ + 'blockHash = "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", uncleIndex = "0x88"', + ['0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b', '0x88'], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_count_by_block_hash.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_count_by_block_hash.ts new file mode 100644 index 00000000000..612ef639dce --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_count_by_block_hash.ts @@ -0,0 +1,33 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { HexString32Bytes } from 'web3-types'; + +export const mockRpcResponse = '0xb'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockHash + */ +type TestData = [string, [HexString32Bytes]]; +export const testData: TestData[] = [ + [ + 'blockHash = "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"', + ['0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b'], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_count_by_block_number.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_count_by_block_number.ts new file mode 100644 index 00000000000..40a2dfdf1d2 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_count_by_block_number.ts @@ -0,0 +1,37 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { BlockNumberOrTag, BlockTags } from 'web3-types'; + +export const mockRpcResponse = '0xb'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - blockNumber + */ +type TestData = [string, [BlockNumberOrTag]]; +export const testData: TestData[] = [ + // blockNumber = BlockTag + ['blockNumber = BlockTags.LATEST', [BlockTags.LATEST]], + ['blockNumber = BlockTags.EARLIEST', [BlockTags.EARLIEST]], + ['blockNumber = BlockTags.PENDING', [BlockTags.PENDING]], + ['blockNumber = BlockTags.SAFE', [BlockTags.SAFE]], + ['blockNumber = BlockTags.FINALIZED', [BlockTags.FINALIZED]], + // blockNumber = Numbers + ['blockNumber = "0x4b7"', ['0x4b7']], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/new_filter.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/new_filter.ts new file mode 100644 index 00000000000..c64dee22c6d --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/new_filter.ts @@ -0,0 +1,103 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Filter } from 'web3-types'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - filter + */ +type TestData = [string, [Filter]]; +export const testData: TestData[] = [ + [ + 'filter = fromBlock', + [ + { + fromBlock: '0xc0ff3', + }, + ], + ], + [ + 'filter = toBlock', + [ + { + toBlock: '0xc0ff3', + }, + ], + ], + [ + 'filter = address', + [ + { + address: '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + }, + ], + ], + [ + 'filter = address[]', + [ + { + address: [ + '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + '0xdfd5293d8e347dfe59e90efd55b2956a1343963d', + ], + }, + ], + ], + [ + 'filter = topics[]', + [ + { + topics: [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + '0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc', + ], + ], + }, + ], + ], + [ + 'filter = fromBlock, toBlock, address[], topics[]', + [ + { + fromBlock: '0xc0ff3', + toBlock: '0xc0ff3', + address: [ + '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + '0xdfd5293d8e347dfe59e90efd55b2956a1343963d', + ], + topics: [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + '0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc', + ], + ], + }, + ], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/send_raw_transaction.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/send_raw_transaction.ts new file mode 100644 index 00000000000..1cc49936062 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/send_raw_transaction.ts @@ -0,0 +1,31 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { HexStringBytes } from 'web3-types'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - transaction + */ +type TestData = [string, [HexStringBytes]]; +export const testData: TestData[] = [ + [ + 'signedTransaction = HexString', + ['0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675'], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/send_transaction.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/send_transaction.ts new file mode 100644 index 00000000000..936b846966b --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/send_transaction.ts @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { TransactionWithSenderAPI } from 'web3-types'; + +export const mockRpcResponse = '0x5208'; + +const transaction: Partial = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + data: '0x', +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - transaction + */ +type TestData = [string, [TransactionWithSenderAPI | Partial]]; +export const testData: TestData[] = [[`${JSON.stringify(transaction)}`, [transaction]]]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/sign.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/sign.ts new file mode 100644 index 00000000000..a56832aac05 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/sign.ts @@ -0,0 +1,33 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Address, HexStringBytes } from 'web3-types'; + +export const mockRpcResponse = '0xb'; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - address + * - message + */ +type TestData = [string, [Address, HexStringBytes]]; +export const testData: TestData[] = [ + [`address = ${address}, message = "0x4b7"`, [address, '0x4b7']], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/sign_transaction.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/sign_transaction.ts new file mode 100644 index 00000000000..936b846966b --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/sign_transaction.ts @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { TransactionWithSenderAPI } from 'web3-types'; + +export const mockRpcResponse = '0x5208'; + +const transaction: Partial = { + from: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', + to: '0x3535353535353535353535353535353535353535', + value: '0x174876e800', + gas: '0x5208', + gasPrice: '0x4a817c800', + type: '0x0', + maxFeePerGas: '0x1229298c00', + maxPriorityFeePerGas: '0x49504f80', + data: '0x', +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - transaction + */ +type TestData = [string, [TransactionWithSenderAPI | Partial]]; +export const testData: TestData[] = [[`${JSON.stringify(transaction)}`, [transaction]]]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/sign_typed_data.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/sign_typed_data.ts new file mode 100644 index 00000000000..37a5ee3171e --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/sign_typed_data.ts @@ -0,0 +1,98 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Address, Eip712TypedData } from 'web3-types'; + +const address = '0x407d73d8a49eeb85d32cf465507dd71d507100c1'; + +const typedData = { + types: { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], + Person: [ + { + name: 'name', + type: 'string', + }, + { + name: 'wallet', + type: 'address', + }, + ], + Mail: [ + { + name: 'from', + type: 'Person', + }, + { + name: 'to', + type: 'Person', + }, + { + name: 'contents', + type: 'string', + }, + ], + }, + primaryType: 'Mail', + domain: { + name: 'Ether Mail', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + from: { + name: 'Cow', + wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + }, + to: { + name: 'Bob', + wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + }, + contents: 'Hello, Bob!', + }, +}; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - address + * - message + */ +type TestData = [string, [Address, Eip712TypedData, boolean | undefined]]; +export const testData: TestData[] = [ + ['useLegacy = undefined', [address, typedData, undefined]], + ['useLegacy = false', [address, typedData, false]], + ['useLegacy = true', [address, typedData, true]], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/submit_hashrate.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/submit_hashrate.ts new file mode 100644 index 00000000000..c41243ca1f3 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/submit_hashrate.ts @@ -0,0 +1,35 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { HexString32Bytes } from 'web3-types'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - hashRate + * - id + */ +type TestData = [string, [HexString32Bytes, HexString32Bytes]]; +export const testData: TestData[] = [ + [ + 'hashRate = "0x0000000000000000000000000000000000000000000000000000000000500000", id = "0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c"', + [ + '0x0000000000000000000000000000000000000000000000000000000000500000', + '0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c', + ], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/submit_work.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/submit_work.ts new file mode 100644 index 00000000000..3757f663920 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/submit_work.ts @@ -0,0 +1,37 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { HexString32Bytes, HexString8Bytes } from 'web3-types'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - nonce + * - hash + * - digest + */ +type TestData = [string, [HexString8Bytes, HexString32Bytes, HexString32Bytes]]; +export const testData: TestData[] = [ + [ + 'nonce = "0x0000000000000001", hash = "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", digest = "0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000"', + [ + '0x0000000000000001', + '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', + '0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000', + ], + ], +]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/uninstall_filter.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/uninstall_filter.ts new file mode 100644 index 00000000000..34d9698d645 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/uninstall_filter.ts @@ -0,0 +1,26 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Uint } from 'web3-types'; + +/** + * Array consists of: + * - Test title + * - Input parameters: + * - filterIdentifier + */ +type TestData = [string, [Uint]]; +export const testData: TestData[] = [['filterIdentifier = "0x4b7"', ['0x4b7']]]; diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_accounts.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_accounts.test.ts new file mode 100644 index 00000000000..72ec86514bf --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_accounts.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('getAccounts', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with getAccounts method', async () => { + await ethRpcMethods.getAccounts(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_accounts', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_balance.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_balance.test.ts new file mode 100644 index 00000000000..e4f83d8bfa2 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_balance.test.ts @@ -0,0 +1,71 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_balance'; + +jest.mock('web3-validator'); + +describe('getBalance', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getBalance method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getBalance(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getBalance', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getBalance(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith( + ['address', 'blockNumberOrTag'], + inputParameters, + ); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_by_hash.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_by_hash.test.ts new file mode 100644 index 00000000000..782ba9e495f --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_by_hash.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_block_by_hash'; + +jest.mock('web3-validator'); + +describe('getBlockByHash', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getBlockByHash method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getBlockByHash(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getBlockByHash', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getBlockByHash(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['bytes32', 'bool'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_by_number.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_by_number.test.ts new file mode 100644 index 00000000000..381991b4352 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_by_number.test.ts @@ -0,0 +1,71 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_block_by_number'; + +jest.mock('web3-validator'); + +describe('getBlockByNumber', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getBlockByNumber method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getBlockByNumber(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getBlockByNumber', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getBlockByNumber(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith( + ['blockNumberOrTag', 'bool'], + inputParameters, + ); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_number.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_number.test.ts new file mode 100644 index 00000000000..14c4146c338 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_number.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('getBlockNumber', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with getBlockNumber method', async () => { + await ethRpcMethods.getBlockNumber(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_blockNumber', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_transaction_count_by_hash.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_transaction_count_by_hash.test.ts new file mode 100644 index 00000000000..d8578c1f4e5 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_transaction_count_by_hash.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_block_transaction_count_by_hash'; + +jest.mock('web3-validator'); + +describe('getBlockTransactionCountByHash', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getBlockTransactionCountByHash method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getBlockTransactionCountByHash(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getBlockTransactionCountByHash', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getBlockTransactionCountByHash(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['bytes32'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_transaction_count_by_number.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_transaction_count_by_number.test.ts new file mode 100644 index 00000000000..9e092f62d0b --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_transaction_count_by_number.test.ts @@ -0,0 +1,74 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_block_transaction_count_by_number'; + +jest.mock('web3-validator'); + +describe('getBlockTransactionCountByNumber', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getBlockTransactionCountByNumber method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getBlockTransactionCountByNumber( + requestManager, + ...inputParameters, + ); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getBlockTransactionCountByNumber', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getBlockTransactionCountByNumber( + requestManager, + ...inputParameters, + ); + expect(validatorSpy).toHaveBeenCalledWith(['blockNumberOrTag'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_chain_id.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_chain_id.test.ts new file mode 100644 index 00000000000..d13e893a9a2 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_chain_id.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('getChainId', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with getChainId method', async () => { + await ethRpcMethods.getChainId(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_chainId', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_code.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_code.test.ts new file mode 100644 index 00000000000..4c0f7327998 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_code.test.ts @@ -0,0 +1,71 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_code'; + +jest.mock('web3-validator'); + +describe('getCode', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getCode method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getCode(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getCode', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getCode(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith( + ['address', 'blockNumberOrTag'], + inputParameters, + ); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_coinbase.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_coinbase.test.ts new file mode 100644 index 00000000000..3f875870fa2 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_coinbase.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('getCoinbase', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with getCoinbase method', async () => { + await ethRpcMethods.getCoinbase(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_coinbase', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_compilers.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_compilers.test.ts new file mode 100644 index 00000000000..bcaf636f0db --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_compilers.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('getCompilers', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with getCompilers method', async () => { + await ethRpcMethods.getCompilers(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getCompilers', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_fee_history.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_fee_history.test.ts new file mode 100644 index 00000000000..f5578f68d57 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_fee_history.test.ts @@ -0,0 +1,76 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_fee_history'; + +jest.mock('web3-validator'); + +describe('getFeeHistory', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getFeeHistory method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getFeeHistory(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_feeHistory', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getFeeHistory(requestManager, ...inputParameters); + const [expectedBlockCount, expectedNewestBlock, expectedRewardPercentiles] = + inputParameters; + expect(validatorSpy).toHaveBeenCalledWith( + ['hex', 'blockNumberOrTag'], + [expectedBlockCount, expectedNewestBlock], + ); + expectedRewardPercentiles.forEach(expectedRewardPercentile => { + expect(validatorSpy).toHaveBeenCalledWith(['number'], [expectedRewardPercentile]); + }); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_filter_changes.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_filter_changes.test.ts new file mode 100644 index 00000000000..418c28e3b73 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_filter_changes.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/uninstall_filter'; + +jest.mock('web3-validator'); + +describe('getFilterChanges', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getFilterChanges method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getFilterChanges(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getFilterChanges', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getFilterChanges(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['hex'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_filter_logs.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_filter_logs.test.ts new file mode 100644 index 00000000000..81a6eb52b90 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_filter_logs.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/uninstall_filter'; + +jest.mock('web3-validator'); + +describe('getFilterLogs', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getFilterLogs method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getFilterLogs(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getFilterLogs', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getFilterLogs(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['hex'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_gas_price.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_gas_price.test.ts new file mode 100644 index 00000000000..d96d1e04d3c --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_gas_price.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('getGasPrice', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with getGasPrice method', async () => { + await ethRpcMethods.getGasPrice(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_gasPrice', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_hash_rate.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_hash_rate.test.ts new file mode 100644 index 00000000000..7c7efa8fd2d --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_hash_rate.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('getHashRate', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with getHashRate method', async () => { + await ethRpcMethods.getHashRate(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_hashrate', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_logs.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_logs.test.ts new file mode 100644 index 00000000000..d850de4b330 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_logs.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/new_filter'; + +jest.mock('web3-validator'); + +describe('getLogs', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getLogs method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getLogs(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getLogs', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getLogs(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['filter'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_mining.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_mining.test.ts new file mode 100644 index 00000000000..47f3a968646 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_mining.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('getMining', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with getMining method', async () => { + await ethRpcMethods.getMining(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_mining', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_node_info.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_node_info.test.ts new file mode 100644 index 00000000000..41d56e89fbb --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_node_info.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('getNodeInfo', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with getNodeInfo method', async () => { + await ethRpcMethods.getNodeInfo(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'web3_clientVersion', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_pending_transaction.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_pending_transaction.test.ts new file mode 100644 index 00000000000..4d50d55b745 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_pending_transaction.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('getPendingTransactions', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with getPendingTransactions method', async () => { + await ethRpcMethods.getPendingTransactions(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_pendingTransactions', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_proof.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_proof.test.ts new file mode 100644 index 00000000000..ae67f83da50 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_proof.test.ts @@ -0,0 +1,71 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_proof'; + +jest.mock('web3-validator'); + +describe('getProof', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getProof method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getProof(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getProof', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getProof(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith( + ['address', 'bytes32[]', 'blockNumberOrTag'], + inputParameters, + ); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_protocol_version.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_protocol_version.test.ts new file mode 100644 index 00000000000..dd4943e2b29 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_protocol_version.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('getProtocolVersion', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with getProtocolVersion method', async () => { + await ethRpcMethods.getProtocolVersion(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_protocolVersion', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_storage_at.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_storage_at.test.ts new file mode 100644 index 00000000000..00eb96fa48b --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_storage_at.test.ts @@ -0,0 +1,71 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_storage_at'; + +jest.mock('web3-validator'); + +describe('getStorageAt', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getStorageAt method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getStorageAt(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getStorageAt', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getStorageAt(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith( + ['address', 'hex', 'blockNumberOrTag'], + inputParameters, + ); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_syncing.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_syncing.test.ts new file mode 100644 index 00000000000..176d25fe514 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_syncing.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('getSyncing', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with getSyncing method', async () => { + await ethRpcMethods.getSyncing(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_syncing', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_block_hash_and_index.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_block_hash_and_index.test.ts new file mode 100644 index 00000000000..879021f974b --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_block_hash_and_index.test.ts @@ -0,0 +1,74 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_transaction_by_block_hash_and_index'; + +jest.mock('web3-validator'); + +describe('getTransactionByBlockHashAndIndex', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getTransactionByBlockHashAndIndex method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getTransactionByBlockHashAndIndex( + requestManager, + ...inputParameters, + ); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getTransactionByBlockHashAndIndex', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getTransactionByBlockHashAndIndex( + requestManager, + ...inputParameters, + ); + expect(validatorSpy).toHaveBeenCalledWith(['bytes32', 'hex'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_block_number_and_index.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_block_number_and_index.test.ts new file mode 100644 index 00000000000..25d37df2058 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_block_number_and_index.test.ts @@ -0,0 +1,74 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_transaction_by_block_number_and_index'; + +jest.mock('web3-validator'); + +describe('getTransactionByBlockNumberAndIndex', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getTransactionByBlockNumberAndIndex method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getTransactionByBlockNumberAndIndex( + requestManager, + ...inputParameters, + ); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getTransactionByBlockNumberAndIndex', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getTransactionByBlockNumberAndIndex( + requestManager, + ...inputParameters, + ); + expect(validatorSpy).toHaveBeenCalledWith(['blockNumberOrTag', 'hex'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_hash.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_hash.test.ts new file mode 100644 index 00000000000..f9041c60b6a --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_hash.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_transaction_by_hash'; + +jest.mock('web3-validator'); + +describe('getTransactionByHash', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getTransactionByHash method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getTransactionByHash(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getTransactionByHash', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getTransactionByHash(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['bytes32'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_count.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_count.test.ts new file mode 100644 index 00000000000..6136449a8d0 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_count.test.ts @@ -0,0 +1,71 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_transaction_count'; + +jest.mock('web3-validator'); + +describe('getTransactionCount', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getTransactionCount method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getTransactionCount(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getTransactionCount', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getTransactionCount(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith( + ['address', 'blockNumberOrTag'], + inputParameters, + ); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_receipt.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_receipt.test.ts new file mode 100644 index 00000000000..a0be658ec07 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_receipt.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_transaction_receipt'; + +jest.mock('web3-validator'); + +describe('getTransactionReceipt', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getTransactionReceipt method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getTransactionReceipt(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getTransactionReceipt', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getTransactionReceipt(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['bytes32'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_by_block_hash_and_index.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_by_block_hash_and_index.test.ts new file mode 100644 index 00000000000..11ffc9e7b97 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_by_block_hash_and_index.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_uncle_by_block_hash_and_index'; + +jest.mock('web3-validator'); + +describe('getUncleByBlockHashAndIndex', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getUncleByBlockHashAndIndex method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getUncleByBlockHashAndIndex(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getUncleByBlockHashAndIndex', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getUncleByBlockHashAndIndex(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['bytes32', 'hex'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_count_by_block_hash.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_count_by_block_hash.test.ts new file mode 100644 index 00000000000..be943e95e93 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_count_by_block_hash.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_uncle_count_by_block_hash'; + +jest.mock('web3-validator'); + +describe('getUncleCountByBlockHash', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getUncleCountByBlockHash method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getUncleCountByBlockHash(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getUncleCountByBlockHash', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getUncleCountByBlockHash(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['bytes32'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_count_by_block_number.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_count_by_block_number.test.ts new file mode 100644 index 00000000000..f9e0c6fb0b7 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_count_by_block_number.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/get_uncle_count_by_block_number'; + +jest.mock('web3-validator'); + +describe('getUncleCountByBlockNumber', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with getUncleCountByBlockNumber method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.getUncleCountByBlockNumber(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getUncleCountByBlockNumber', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.getUncleCountByBlockNumber(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['blockNumberOrTag'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_work.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_work.test.ts new file mode 100644 index 00000000000..ea3dbfca890 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_work.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('getWork', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with getWork method', async () => { + await ethRpcMethods.getWork(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getWork', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_block_filter.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_block_filter.test.ts new file mode 100644 index 00000000000..47d702a1be1 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_block_filter.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('newBlockFilter', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with newBlockFilter method', async () => { + await ethRpcMethods.newBlockFilter(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_newBlockFilter', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_filter.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_filter.test.ts new file mode 100644 index 00000000000..fbcfe892a27 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_filter.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/new_filter'; + +jest.mock('web3-validator'); + +describe('newFilter', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with newFilter method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.newFilter(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_newFilter', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.newFilter(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['filter'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_pending_transaction_filter.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_pending_transaction_filter.test.ts new file mode 100644 index 00000000000..bd31ab4184d --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_pending_transaction_filter.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('newPendingTransactionFilter', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with newPendingTransactionFilter method', async () => { + await ethRpcMethods.newPendingTransactionFilter(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_newPendingTransactionFilter', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/request_accounts.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/request_accounts.test.ts new file mode 100644 index 00000000000..5149ed5b32e --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/request_accounts.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; + +import { ethRpcMethods } from '../../../src/index'; + +describe('requestAccounts', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it('should call requestManager.send with requestAccounts method', async () => { + await ethRpcMethods.requestAccounts(requestManager); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_requestAccounts', + params: [], + }); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/send_raw_transaction.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/send_raw_transaction.test.ts new file mode 100644 index 00000000000..2a4dea00ae0 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/send_raw_transaction.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/send_raw_transaction'; + +jest.mock('web3-validator'); + +describe('sendRawTransaction', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with sendRawTransaction method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.sendRawTransaction(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_sendRawTransaction', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.sendRawTransaction(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['hex'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/send_transaction.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/send_transaction.test.ts new file mode 100644 index 00000000000..6e916be8904 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/send_transaction.test.ts @@ -0,0 +1,69 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/send_transaction'; + +jest.mock('web3-validator'); + +describe('sendTransaction', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with sendTransaction method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.sendTransaction(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_sendTransaction', + params: inputParameters, + }); + }, + ); + + // TODO Validation for sendTransaction method not implemented + it.skip.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.sendTransaction(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith([''], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign.test.ts new file mode 100644 index 00000000000..634135faebf --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/sign'; + +jest.mock('web3-validator'); + +describe('sign', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with sign method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.sign(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_sign', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.sign(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['address', 'hex'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign_transaction.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign_transaction.test.ts new file mode 100644 index 00000000000..861efac5998 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign_transaction.test.ts @@ -0,0 +1,69 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/sign_transaction'; + +jest.mock('web3-validator'); + +describe('signTransaction', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with signTransaction method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.signTransaction(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_signTransaction', + params: inputParameters, + }); + }, + ); + + // TODO Validation for signTransaction method not implemented + it.skip.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.signTransaction(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith([''], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign_typed_data.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign_typed_data.test.ts new file mode 100644 index 00000000000..a9674a8d381 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign_typed_data.test.ts @@ -0,0 +1,54 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/sign_typed_data'; + +jest.mock('web3-validator'); + +describe('signTypedData', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with signTypedData method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.signTypedData(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: `eth_signTypedData${inputParameters[2] ? '' : '_v4'}`, + params: [inputParameters[0], inputParameters[1]], + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.signTypedData(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['address'], [inputParameters[0]]); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/submit_hashrate.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/submit_hashrate.test.ts new file mode 100644 index 00000000000..a933733f0be --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/submit_hashrate.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/submit_hashrate'; + +jest.mock('web3-validator'); + +describe('submitHashrate', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with submitHashrate method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.submitHashrate(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_submitHashrate', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.submitHashrate(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['bytes32', 'bytes32'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/submit_work.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/submit_work.test.ts new file mode 100644 index 00000000000..6ec44aa6fef --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/submit_work.test.ts @@ -0,0 +1,71 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/submit_work'; + +jest.mock('web3-validator'); + +describe('submitWork', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with submitWork method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.submitWork(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_submitWork', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.submitWork(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith( + ['bytes8', 'bytes32', 'bytes32'], + inputParameters, + ); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/eth_rpc_methods/uninstall_filter.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/uninstall_filter.test.ts new file mode 100644 index 00000000000..10fda048587 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/uninstall_filter.test.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// web3.js is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// web3.js is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public License +// along with web3.js. If not, see . +// */ +import { Web3RequestManager } from 'web3-core'; +import { validator } from 'web3-validator'; + +import { ethRpcMethods } from '../../../src/index'; +import { testData } from './fixtures/uninstall_filter'; + +jest.mock('web3-validator'); + +describe('uninstallFilter', () => { + let requestManagerSendSpy: jest.Mock; + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager('http://127.0.0.1:8545'); + requestManagerSendSpy = jest.fn(); + requestManager.send = requestManagerSendSpy; + }); + + it.each(testData)( + 'should call requestManager.send with uninstallFilter method and expect parameters\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + await ethRpcMethods.uninstallFilter(requestManager, ...inputParameters); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_uninstallFilter', + params: inputParameters, + }); + }, + ); + + it.each(testData)( + 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', + async (_, inputParameters) => { + const validatorSpy = jest.spyOn(validator, 'validate'); + await ethRpcMethods.uninstallFilter(requestManager, ...inputParameters); + expect(validatorSpy).toHaveBeenCalledWith(['hex'], inputParameters); + }, + ); +}); diff --git a/packages/web3-rpc-methods/test/unit/jest.config.js b/packages/web3-rpc-methods/test/unit/jest.config.js new file mode 100644 index 00000000000..35542a2b387 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-rpc-methods-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-rpc-methods/test/unit/net_rpc_methods.test.ts b/packages/web3-rpc-methods/test/unit/net_rpc_methods.test.ts new file mode 100644 index 00000000000..588600a1ce1 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/net_rpc_methods.test.ts @@ -0,0 +1,62 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3RequestManager } from 'web3-core'; +import { Web3NetAPI } from 'web3-types'; + +import { netRpcMethods } from '../../src/index'; + +describe('rpc_methods', () => { + const requestManagerSendSpy = jest.fn(); + + let requestManager: Web3RequestManager; + + beforeAll(() => { + requestManager = new Web3RequestManager(); + requestManager.setProvider('http://127.0.0.1:8545'); + requestManager.send = requestManagerSendSpy; + }); + + describe('should make call with expected parameters', () => { + it('getId', async () => { + await netRpcMethods.getId(requestManager); + + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'net_version', + params: [], + }); + }); + + it('getPeerCount', async () => { + await netRpcMethods.getPeerCount(requestManager); + + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'net_peerCount', + params: [], + }); + }); + + it('isListening', async () => { + await netRpcMethods.isListening(requestManager); + + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'net_listening', + params: [], + }); + }); + }); +}); diff --git a/packages/web3-rpc-methods/tsconfig.cjs.json b/packages/web3-rpc-methods/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-rpc-methods/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-rpc-methods/tsconfig.esm.json b/packages/web3-rpc-methods/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-rpc-methods/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-rpc-methods/tsconfig.types.json b/packages/web3-rpc-methods/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-rpc-methods/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-rpc-methods/tsdoc.json b/packages/web3-rpc-methods/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-rpc-methods/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-shh/README.md b/packages/web3-shh/README.md deleted file mode 100644 index b940a8dc9a9..00000000000 --- a/packages/web3-shh/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# web3-shh - -[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] - -This is a sub-package of [web3.js][repo] - -This is the whisper v5 package. - -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-shh -``` - -## Usage - -```js -const Web3Personal = require('web3-shh'); - -const shh = new Web3Personal('ws://localhost:8546'); -``` - -## Types - -All the TypeScript typings are placed in the `types` folder. - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-shh.svg -[npm-url]: https://npmjs.org/package/web3-shh -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-shh -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-shh -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-shh -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-shh diff --git a/packages/web3-shh/package-lock.json b/packages/web3-shh/package-lock.json deleted file mode 100644 index b703f040e71..00000000000 --- a/packages/web3-shh/package-lock.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "web3-shh", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/node": { - "version": "12.12.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.26.tgz", - "integrity": "sha512-UmUm94/QZvU5xLcUlNR8hA7Ac+fGpO1EG/a8bcWVz0P0LqtxFmun9Y2bbtuckwGboWJIT70DoWq1r3hb56n3DA==", - "dev": true - }, - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3-shh/package.json b/packages/web3-shh/package.json deleted file mode 100644 index 9030258f851..00000000000 --- a/packages/web3-shh/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "web3-shh", - "version": "1.3.0", - "description": "Web3 module to interact with the Whisper messaging protocol.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-shh", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "web3-core": "1.3.0", - "web3-core-method": "1.3.0", - "web3-core-subscriptions": "1.3.0", - "web3-net": "1.3.0" - }, - "devDependencies": { - "@types/node": "^12.12.6", - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } -} diff --git a/packages/web3-shh/src/index.js b/packages/web3-shh/src/index.js deleted file mode 100644 index dc7e4d6fdab..00000000000 --- a/packages/web3-shh/src/index.js +++ /dev/null @@ -1,201 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var core = require('web3-core'); -var Subscriptions = require('web3-core-subscriptions').subscriptions; -var Method = require('web3-core-method'); -// var formatters = require('web3-core-helpers').formatters; -var Net = require('web3-net'); - - -var Shh = function Shh() { - var _this = this; - - // sets _requestmanager - core.packageInit(this, arguments); - - // overwrite package setRequestManager - var setRequestManager = this.setRequestManager; - this.setRequestManager = function (manager) { - setRequestManager(manager); - - _this.net.setRequestManager(manager); - - return true; - }; - - // overwrite setProvider - var setProvider = this.setProvider; - this.setProvider = function () { - setProvider.apply(_this, arguments); - - _this.setRequestManager(_this._requestManager); - }; - - this.net = new Net(this); - - [ - new Subscriptions({ - name: 'subscribe', - type: 'shh', - subscriptions: { - 'messages': { - params: 1 - // inputFormatter: [formatters.inputPostFormatter], - // outputFormatter: formatters.outputPostFormatter - } - } - }), - - new Method({ - name: 'getVersion', - call: 'shh_version', - params: 0 - }), - new Method({ - name: 'getInfo', - call: 'shh_info', - params: 0 - }), - new Method({ - name: 'setMaxMessageSize', - call: 'shh_setMaxMessageSize', - params: 1 - }), - new Method({ - name: 'setMinPoW', - call: 'shh_setMinPoW', - params: 1 - }), - new Method({ - name: 'markTrustedPeer', - call: 'shh_markTrustedPeer', - params: 1 - }), - new Method({ - name: 'newKeyPair', - call: 'shh_newKeyPair', - params: 0 - }), - new Method({ - name: 'addPrivateKey', - call: 'shh_addPrivateKey', - params: 1 - }), - new Method({ - name: 'deleteKeyPair', - call: 'shh_deleteKeyPair', - params: 1 - }), - new Method({ - name: 'hasKeyPair', - call: 'shh_hasKeyPair', - params: 1 - }), - new Method({ - name: 'getPublicKey', - call: 'shh_getPublicKey', - params: 1 - }), - new Method({ - name: 'getPrivateKey', - call: 'shh_getPrivateKey', - params: 1 - }), - new Method({ - name: 'newSymKey', - call: 'shh_newSymKey', - params: 0 - }), - new Method({ - name: 'addSymKey', - call: 'shh_addSymKey', - params: 1 - }), - new Method({ - name: 'generateSymKeyFromPassword', - call: 'shh_generateSymKeyFromPassword', - params: 1 - }), - new Method({ - name: 'hasSymKey', - call: 'shh_hasSymKey', - params: 1 - }), - new Method({ - name: 'getSymKey', - call: 'shh_getSymKey', - params: 1 - }), - new Method({ - name: 'deleteSymKey', - call: 'shh_deleteSymKey', - params: 1 - }), - - new Method({ - name: 'newMessageFilter', - call: 'shh_newMessageFilter', - params: 1 - }), - new Method({ - name: 'getFilterMessages', - call: 'shh_getFilterMessages', - params: 1 - }), - new Method({ - name: 'deleteMessageFilter', - call: 'shh_deleteMessageFilter', - params: 1 - }), - - new Method({ - name: 'post', - call: 'shh_post', - params: 1, - inputFormatter: [null] - }), - - new Method({ - name: 'unsubscribe', - call: 'shh_unsubscribe', - params: 1 - }) - ].forEach(function(method) { - method.attachToObject(_this); - method.setRequestManager(_this._requestManager); - }); -}; - -Shh.prototype.clearSubscriptions = function () { - this._requestManager.clearSubscriptions(); -}; - -core.addProviders(Shh); - - - -module.exports = Shh; - - diff --git a/packages/web3-shh/tsconfig.json b/packages/web3-shh/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-shh/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-shh/types/index.d.ts b/packages/web3-shh/types/index.d.ts deleted file mode 100644 index a6954080a53..00000000000 --- a/packages/web3-shh/types/index.d.ts +++ /dev/null @@ -1,199 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens , Samuel Furter - * @date 2018 - */ - -import * as net from 'net'; -import { BatchRequest, provider, Providers, Extension } from 'web3-core'; -import { Network } from 'web3-net'; - -export class Shh { - constructor(); - constructor(provider: provider); - constructor(provider: provider, net: net.Socket); - - readonly givenProvider: any; - static readonly givenProvider: any; - static readonly providers: Providers; - readonly currentProvider: provider; - BatchRequest: new () => BatchRequest; - - setProvider(provider: provider): boolean; - - extend(extension: Extension): any; - - net: Network; - - getVersion( - callback?: (error: Error, version: string) => void - ): Promise; - - getInfo(callback?: (error: Error, info: Info) => void): Promise; - - setMaxMessageSize( - size: number, - callback?: (error: Error, result: boolean) => void - ): Promise; - - setMinPoW( - pow: number, - callback?: (error: Error, result: boolean) => void - ): Promise; - - markTrustedPeer( - enode: string, - callback?: (error: Error, result: boolean) => void - ): Promise; - - newKeyPair(callback?: (error: Error, key: string) => void): Promise; - - addPrivateKey( - privateKey: string, - callback?: (error: Error, privateKey: string) => void - ): Promise; - - deleteKeyPair( - id: string, - callback?: (error: Error, result: boolean) => void - ): Promise; - - hasKeyPair( - id: string, - callback?: (error: Error, result: boolean) => void - ): Promise; - - getPublicKey( - id: string, - callback?: (error: Error, publicKey: string) => void - ): Promise; - - getPrivateKey( - id: string, - callback?: (error: Error, privateKey: string) => void - ): Promise; - - newSymKey(callback?: (error: Error, key: string) => void): Promise; - - addSymKey( - symKey: string, - callback?: (error: Error, key: string) => void - ): Promise; - - generateSymKeyFromPassword( - password: string, - callback?: (error: Error, key: string) => void - ): Promise; - - hasSymKey( - id: string, - callback?: (error: Error, result: boolean) => void - ): Promise; - - getSymKey( - id: string, - callback?: (error: Error, key: string) => void - ): Promise; - - deleteSymKey( - id: string, - callback?: (error: Error, result: boolean) => void - ): Promise; - - post( - object: PostWithSymKey | PostWithPubKey, - callback?: (error: Error, result: string) => void - ): Promise; - - subscribe( - string: 'messages', - options: SubscriptionOptions, - callback?: ( - error: Error, - message: Notification, - subscription: any - ) => void - ): Subscribe; - - newMessageFilter( - options?: SubscriptionOptions, - callback?: (error: Error, result: string) => void - ): Promise; - - deleteMessageFilter( - id: string, - callback?: (error: Error, result: string) => void - ): Promise; - - getFilterMessages( - id: string, - callback?: (error: Error, result: string) => void - ): Promise; -} - -export interface Info { - messages: number; - maxMessageSize: number; - memory: number; - minPow: number; -} - -export interface PostBase { - sig?: string; - ttl: number; - topic: string; - payload: string; - padding?: number; - powTime?: number; - powTarget?: number; - targetPeer?: number; -} - -export interface PostWithSymKey extends PostBase { - symKeyID: string; -} - -export interface PostWithPubKey extends PostBase { - pubKey: string; -} - -export interface SubscriptionOptions { - symKeyID?: string; - privateKeyID?: string; - sig?: string; - topics?: string[]; - minPow?: number; - allowP2P?: boolean; - ttl?: number; -} - -export interface Notification { - hash: string; - sig?: string; - recipientPublicKey?: string; - timestamp: string; - ttl: number; - topic: string; - payload: string; - padding: number; - pow: number; -} - -export interface Subscribe { - on(type: 'data', handler: (data: Notification) => void): void; - - on(type: 'error', handler: (data: Error) => void): void; -} diff --git a/packages/web3-shh/types/tests/shh-test.ts b/packages/web3-shh/types/tests/shh-test.ts deleted file mode 100644 index ec7022f234c..00000000000 --- a/packages/web3-shh/types/tests/shh-test.ts +++ /dev/null @@ -1,254 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file shh-tests.ts - * @author Josh Stevens - * @date 2018 - */ - -import { Info, Notification, Shh } from 'web3-shh'; - -// $ExpectType Shh -const shh_empty = new Shh(); - -// $ExpectType Shh -const shh = new Shh('https://localhost:5000'); - -// $ExpectType provider -shh.currentProvider; - -// $ExpectType any -Shh.givenProvider; - -// $ExpectType any -shh.givenProvider; - -// $ExpectType boolean -shh.setProvider('https://localhost:2100'); - -// $ExpectType BatchRequest -new shh.BatchRequest(); - -// $ExpectType any -shh.extend({property: 'test', methods: [{name: 'method', call: 'method'}]}); - -// $ExpectType Promise -shh.net.getId(); -// $ExpectType Promise -shh.net.getId((error: Error, id: number) => {}); - -// $ExpectType Promise -shh.net.isListening(); -// $ExpectType Promise -shh.net.isListening((error: Error, listening: boolean) => {}); - -// $ExpectType Promise -shh.net.getPeerCount(); -// $ExpectType Promise -shh.net.getPeerCount((error: Error, peerCount: number) => {}); - -// $ExpectType Promise -shh.getVersion(); -// $ExpectType Promise -shh.getVersion((error: Error, version: string) => {}); - -// $ExpectType Promise -shh.getInfo(); -// $ExpectType Promise -shh.getInfo((error: Error, info: Info) => {}); - -// $ExpectType Promise -shh.setMaxMessageSize(1234565); -// $ExpectType Promise -shh.setMaxMessageSize(1234565, (error: Error, result: boolean) => {}); - -// $ExpectType Promise -shh.setMinPoW(0.9); -// $ExpectType Promise -shh.setMinPoW(0.9, (error: Error, result: boolean) => {}); - -// $ExpectType Promise -shh.markTrustedPeer('test'); -// $ExpectType Promise -shh.markTrustedPeer('test', (error: Error, result: boolean) => {}); - -// $ExpectType Promise -shh.newKeyPair(); -// $ExpectType Promise -shh.newKeyPair((error: Error, key: string) => {}); - -// $ExpectType Promise -shh.addPrivateKey( - '0x8bda3abeb454847b515fa9b404cede50b1cc63cfdeddd4999d074284b4c21e15' -); -// $ExpectType Promise -shh.addPrivateKey( - '0x8bda3abeb454847b515fa9b404cede50b1cc63cfdeddd4999d074284b4c21e15', - (error: Error, privateKey: string) => {} -); - -// $ExpectType Promise -shh.deleteKeyPair( - '3e22b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f' -); -// $ExpectType Promise -shh.deleteKeyPair( - '3e22b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f', - (error: Error, result: boolean) => {} -); - -// $ExpectType Promise -shh.hasKeyPair( - 'fe22b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f' -); -// $ExpectType Promise -shh.hasKeyPair( - 'fe22b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f', - (error: Error, result: boolean) => {} -); - -// $ExpectType Promise -shh.getPublicKey( - '3e22b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f' -); -// $ExpectType Promise -shh.getPublicKey( - '3e22b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f', - (error: Error, publicKey: string) => {} -); - -// $ExpectType Promise -shh.getPrivateKey( - '3e22b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f' -); -// $ExpectType Promise -shh.getPrivateKey( - '3e22b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f', - (error: Error, privateKey: string) => {} -); - -// $ExpectType Promise -shh.newSymKey(); -// $ExpectType Promise -shh.newSymKey((error: Error, key: string) => {}); - -// $ExpectType Promise -shh.addSymKey( - '0x5e11b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f' -); -// $ExpectType Promise -shh.addSymKey( - '0x5e11b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f', - (error: Error, key: string) => {} -); - -// $ExpectType Promise -shh.generateSymKeyFromPassword('Never use this password - password!'); -// $ExpectType Promise -shh.generateSymKeyFromPassword( - 'Never use this password - password!', - (error: Error, key: string) => {} -); - -// $ExpectType Promise -shh.hasSymKey( - 'f6dcf21ed6a17bd78d8c4c63195ab997b3b65ea683705501eae82d32667adc92' -); -// $ExpectType Promise -shh.hasSymKey( - 'f6dcf21ed6a17bd78d8c4c63195ab997b3b65ea683705501eae82d32667adc92', - (error: Error, result: boolean) => {} -); - -// $ExpectType Promise -shh.getSymKey( - 'af33b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f' -); -// $ExpectType Promise -shh.getSymKey( - 'af33b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f', - (error: Error, key: string) => {} -); - -// $ExpectType Promise -shh.deleteSymKey( - 'bf31b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f' -); -// $ExpectType Promise -shh.deleteSymKey( - 'bf31b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f', - (error: Error, result: boolean) => {} -); - -// $ExpectType Promise -shh.post({ - symKeyID: 'sd3', - sig: 'sds5', - ttl: 10, - topic: '0xffaadd11', - payload: '0xffffffdddddd1122', - powTime: 3, - powTarget: 0.5 -}); -// $ExpectType Promise -shh.post( - { - symKeyID: 'sd3', - sig: 'sds5', - ttl: 10, - topic: '0xffaadd11', - payload: '0xffffffdddddd1122', - powTime: 3, - powTarget: 0.5 - }, - (error: Error, result: string) => {} -); - -// $ExpectType Subscribe -shh.subscribe('messages', { - symKeyID: - 'bf31b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f', - sig: - '0x04d1574d4eab8f3dde4d2dc7ed2c4d699d77cbbdd09167b8fffa099652ce4df00c4c6e0263eafe05007a46fdf0c8d32b11aeabcd3abbc7b2bc2bb967368a68e9c6', - ttl: 20, - topics: ['0xffddaa11'], - minPow: 0.8 -}); -// $ExpectType Subscribe -shh.subscribe( - 'messages', - { - symKeyID: - 'bf31b9ffc2387e18636e0a3d0c56b023264c16e78a2adcba1303cefc685e610f', - sig: - '0x04d1574d4eab8f3dde4d2dc7ed2c4d699d77cbbdd09167b8fffa099652ce4df00c4c6e0263eafe05007a46fdf0c8d32b11aeabcd3abbc7b2bc2bb967368a68e9c6', - ttl: 20, - topics: ['0xffddaa11'], - minPow: 0.8 - }, - (error: Error, message: Notification, subscription: any) => {} -); - -// $ExpectType Promise -shh.newMessageFilter(); - -// $ExpectType Promise -shh.deleteMessageFilter( - '2b47fbafb3cce24570812a82e6e93cd9e2551bbc4823f6548ff0d82d2206b326' -); - -// $ExpectType Promise -shh.getFilterMessages( - '2b47fbafb3cce24570812a82e6e93cd9e2551bbc4823f6548ff0d82d2206b326' -); diff --git a/packages/web3-shh/types/tsconfig.json b/packages/web3-shh/types/tsconfig.json deleted file mode 100644 index 5129cd82394..00000000000 --- a/packages/web3-shh/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-shh": ["."] - } - } -} diff --git a/packages/web3-shh/types/tslint.json b/packages/web3-shh/types/tslint.json deleted file mode 100644 index 871d605704b..00000000000 --- a/packages/web3-shh/types/tslint.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false, - "unified-signatures": false - } -} diff --git a/packages/web3-types/.eslintignore b/packages/web3-types/.eslintignore new file mode 100644 index 00000000000..e3d7e665285 --- /dev/null +++ b/packages/web3-types/.eslintignore @@ -0,0 +1,4 @@ +dist +lib +jest.config.js +.eslintrc.js diff --git a/packages/web3-types/.eslintrc.js b/packages/web3-types/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-types/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-types/.gitignore b/packages/web3-types/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-types/.npmignore b/packages/web3-types/.npmignore new file mode 100644 index 00000000000..0b1a9d71c23 --- /dev/null +++ b/packages/web3-types/.npmignore @@ -0,0 +1,26 @@ +.babelrc +.eslintignore +.eslintrc.json +.eslintrc.js +.gitignore +.lintstagedrc.json +.nycrc +.prettierrc.json +.prettierignore +cypress.json +index.html +Jenkinsfile* +*.log + +.nyc_output/ +coverage/ +benchmark/ +.coverage/ +cypress/ +fixtures/ +tmp/ +logs/ +test/ +scripts/ +browsertest/ +examples/ diff --git a/packages/web3-types/.prettierignore b/packages/web3-types/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-types/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-types/.prettierrc.json b/packages/web3-types/.prettierrc.json new file mode 100644 index 00000000000..7b23ef55098 --- /dev/null +++ b/packages/web3-types/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": true, + "arrowParens": "avoid" +} diff --git a/packages/web3-types/CHANGELOG.md b/packages/web3-types/CHANGELOG.md new file mode 100644 index 00000000000..a526d15b3a0 --- /dev/null +++ b/packages/web3-types/CHANGELOG.md @@ -0,0 +1,173 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [0.1.1-alpha.1] + +### Added + +- `Web3EthExecutionAPI` export (#5441) +- `Web3NetAPI` export (#5441) +- `EthPersonalAPI` export (#5441) + +### Changed + +- `Web3APISpec`, `Web3APIMethod`, and `Web3APIParams` now supports `unknown` APIs (#5393) + +## [0.1.1-alpha.2] + +### Added + +- These types were moved from `web3-eth-accounts` to `web3-types` package: Cipher, CipherOptions, ScryptParams, PBKDF2SHA256Params, KeyStore (#5581 ) + +### Fixed + +- Make the `request` method of `EIP1193Provider` class, compatible with EIP 1193 (#5591) + +## [0.1.1-alpha.3] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) +- These types were added: ProviderRpcError, EthSubscription, ProviderMessage, ProviderConnectInfo (#5683) + +## [0.1.1-alpha.4] + +### Added + +- Add `TransactionWithFromLocalWalletIndex`, `TransactionWithToLocalWalletIndex` and `TransactionWithFromAndToLocalWalletIndex` types (#5731) + +## [1.0.0-rc.0] + +### Added + +- Added types from `web3-eth-abi` and `TypedArray` from (#5771) +- Added `TypedArray` from `web3-utils` and `web3-validator` (it was defined twice) (#5771) +- Added `safe` and `finalized` block tags in `BlockTags` and `BlockTag` types (#5823) + +## [1.0.0-rc.1] + +### Added + +- Added hybrid build (ESM and CJS) of library (#5904) +- Added source files (#5956) + +### Changed + +- `data` property in `TransactionOutput` was renamed to `input` (#5915) +- The method `signTransaction` inside `Web3BaseWalletAccount` is now utilizing the type `Transaction` for its argument. (#5993) +- The types `FMT_NUMBER`, `NumberTypes`, `FMT_BYTES`, `ByteTypes`, `DataFormat`, `DEFAULT_RETURN_FORMAT`, `ETH_DATA_FORMAT` and `FormatType` moved from `web3-utils`. (#5993) +- The types `ContractInitOptions`, `NonPayableCallOptions` and `PayableCallOptions` are moved from `web3-eth-contract`. (#5993) + +## [1.0.0-rc.2] + +### Added + +- Added `filters` param to the `Filter` type (#6010) +- Added types `JsonRpcSubscriptionResultOld`, `Web3ProviderMessageEventCallback`. Added `.on('data')` type support for old providers (#6082) +- Export for `HardforksOrdered` enum (#6102) +- Export for `Web3ValidationErrorObject` type (#6102) + +### Changed + +- Removed chainId, to, data & input properties from NonPayableCallOptions +- Replaced Buffer for Uint8Array (#6004) +- types `FMT_BYTES.BUFFER`, `Bytes` and `FormatType` and encryption option types for `salt` and `iv` has replaced support for `Buffer` for `Uint8Array` (#6004) +- Added `internalType` property to the `AbiParameter` type. + +## [1.0.0] + +Release Notes: + +Detailed List of change logs are mentioned under previous 1.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [1.0.1] + +### Added + +- Added the `SimpleProvider` interface which has only `request(args)` method that is compatible with EIP-1193 (#6210) +- Added the `Eip1193EventName` type that contains the possible events names according to EIP-1193 (#6210) + +### Changed + +- The `EIP1193Provider` class has now all the events (for `on` and `removeListener`) according to EIP-1193 (#6210) + +### Fixed + +- Fixed bug #6185, now web3.js compiles on typescript v5 (#6195) + +## [1.0.2] + +### Fixed + +- type `Filter` includes `blockHash` (#6206) + +## [1.1.0] + +### Changed + +- `input` and `data` are now optional properties on `PopulatedUnsignedBaseTransaction` (previously `input` was a required property, and `data` was not available) (#6294) + +### Added + +- `eth_signTypedData` and `eth_signTypedData_v4` to `web3_eth_execution_api` (#6286) +- `Eip712TypeDetails` and `Eip712TypedData` to `eth_types` (#6286) + +## [1.1.1] + +### Changed + +- Dependencies updated + +## [1.2.0] + +### Added + +- add `asEIP1193Provider` to `Web3BaseProvider` so every inherited class can have the returned value of `request` method, fully compatible with EIP-1193. (#6407) + + +## [1.3.0] + +### Added + +- Interface `EventLog` was added. (#6410) + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-types/README.md b/packages/web3-types/README.md new file mode 100644 index 00000000000..7c15e2dc2e0 --- /dev/null +++ b/packages/web3-types/README.md @@ -0,0 +1,59 @@ +

+ web3.js +

+ +# web3-types + +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] + +This is a sub-package of [web3.js][repo]. + +`web3-types` contains the common data structures and interfaces used in [web3.js][repo]. + +## Installation + +You can install the package either using [NPM](https://www.npmjs.com/package/web3-types) or using [Yarn](https://yarnpkg.com/package/web3-types) + +### Using NPM + +```bash +npm install web3-types +``` + +### Using Yarn + +```bash +yarn add web3-types +``` + +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts + +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | + +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-types +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-types%2Fpackage.json +[npm-url]: https://npmjs.org/package/web3-types +[downloads-image]: https://img.shields.io/npm/dm/web3-types?label=npm%20downloads diff --git a/packages/web3-types/assets/logo/web3js.ai b/packages/web3-types/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-types/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-types/assets/logo/web3js.jpg b/packages/web3-types/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-types/assets/logo/web3js.jpg differ diff --git a/packages/web3-types/assets/logo/web3js.svg b/packages/web3-types/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-types/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-types/package.json b/packages/web3-types/package.json new file mode 100644 index 00000000000..1329c0faa92 --- /dev/null +++ b/packages/web3-types/package.json @@ -0,0 +1,59 @@ +{ + "name": "web3-types", + "version": "1.3.0", + "description": "Provide the common data structures and interfaces for web3 modules.", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --passWithNoTests --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js --passWithNoTests", + "test:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests" + }, + "devDependencies": { + "@humeris/espresso-shot": "^4.0.0", + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + } +} diff --git a/packages/web3-types/src/apis/eth_execution_api.ts b/packages/web3-types/src/apis/eth_execution_api.ts new file mode 100644 index 00000000000..9bdefe3dd43 --- /dev/null +++ b/packages/web3-types/src/apis/eth_execution_api.ts @@ -0,0 +1,286 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + Address, + HexString32Bytes, + Uint, + HexStringBytes, + HexStringSingleByte, + HexString256Bytes, + FeeHistoryBase, + HexString8Bytes, + Uint256, + BlockNumberOrTag, + Filter, + AccessList, + TransactionHash, + TransactionReceiptBase, + BlockBase, + LogBase, +} from '../eth_types.js'; +import { HexString } from '../primitives_types.js'; + +// The types are generated manually by referring to following doc +// https://github.com/ethereum/execution-apis +// These types follow closely to the v1.0.0-alpha.9 Ethereum spec +export interface TransactionCallAPI { + readonly from?: Address; + readonly to: Address; + readonly gas?: Uint; + readonly gasPrice?: Uint; + readonly value?: Uint; + readonly data?: HexStringBytes; + readonly type?: HexStringSingleByte; + readonly maxFeePerGas?: Uint; + readonly maxPriorityFeePerGas?: Uint; + readonly accessList?: AccessList; +} + +export interface BaseTransactionAPI { + // eslint-disable-next-line @typescript-eslint/ban-types + readonly to?: Address | null; + readonly type: HexStringSingleByte; + readonly nonce: Uint; + readonly gas: Uint; + readonly value: Uint; + // TODO - https://github.com/ethereum/execution-apis/pull/201 + readonly input: HexStringBytes; + readonly data?: HexStringBytes; + readonly chainId?: Uint; + readonly hash?: HexString32Bytes; +} + +export interface Transaction1559UnsignedAPI extends BaseTransactionAPI { + readonly maxFeePerGas: Uint; + readonly maxPriorityFeePerGas: Uint; + readonly accessList: AccessList; +} + +export interface Transaction1559SignedAPI extends Transaction1559UnsignedAPI { + readonly yParity: Uint; + readonly r: Uint; + readonly s: Uint; +} + +export interface Transaction2930UnsignedAPI extends BaseTransactionAPI { + readonly gasPrice: Uint; + readonly accessList: AccessList; +} + +export interface Transaction2930SignedAPI extends Transaction2930UnsignedAPI { + readonly yParity: Uint; + readonly r: Uint; + readonly s: Uint; +} + +export interface TransactionLegacyUnsignedAPI extends BaseTransactionAPI { + readonly gasPrice: Uint; +} + +export interface TransactionLegacySignedAPI extends TransactionLegacyUnsignedAPI { + readonly v: Uint; + readonly r: Uint; + readonly s: Uint; +} + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml#L144 +export type TransactionUnsignedAPI = + | Transaction1559UnsignedAPI + | Transaction2930UnsignedAPI + | TransactionLegacyUnsignedAPI; + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml#L211 +export type TransactionSignedAPI = + | Transaction1559SignedAPI + | Transaction2930SignedAPI + | TransactionLegacySignedAPI; + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml#L216 +export type TransactionInfoAPI = TransactionSignedAPI & { + readonly blockHash?: HexString32Bytes; + readonly blockNumber?: Uint; + readonly from: Address; + readonly hash: HexString32Bytes; + readonly transactionIndex?: Uint; +}; + +export interface SignedTransactionInfoAPI { + raw: HexStringBytes; + tx: TransactionSignedAPI; +} + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml#L244 +export type TransactionWithSenderAPI = TransactionUnsignedAPI & { from: Address }; + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/block.yaml#L2 +export type BlockAPI = BlockBase< + HexString32Bytes, + HexString, + Uint, + HexStringBytes, + TransactionHash[] | TransactionInfoAPI[], + HexString256Bytes +>; + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/receipt.yaml#L2 +export type LogAPI = LogBase; + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/receipt.yaml#L36 +export type TransactionReceiptAPI = TransactionReceiptBase< + Uint, + HexString32Bytes, + HexString256Bytes, + LogAPI +>; + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/client.yaml#L2 +export type SyncingStatusAPI = + | { startingBlock: Uint; currentBlock: Uint; highestBlock: Uint } + | boolean; + +// https://github.com/ethereum/execution-apis/blob/main/src/eth/fee_market.yaml#L42 +export type FeeHistoryResultAPI = FeeHistoryBase; + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/filter.yaml#L2 +export type FilterResultsAPI = HexString32Bytes[] | LogAPI[]; + +export interface CompileResultAPI { + readonly code: HexStringBytes; + readonly info: { + readonly source: string; + readonly language: string; + readonly languageVersion: string; + readonly compilerVersion: string; + readonly abiDefinition: Record[]; + readonly userDoc: { + readonly methods: Record; + }; + readonly developerDoc: { + readonly methods: Record; + }; + }; +} + +/* eslint-disable camelcase */ +export type EthExecutionAPI = { + // https://github.com/ethereum/execution-apis/blob/main/src/eth/block.yaml + eth_getBlockByHash: (blockHash: HexString32Bytes, hydrated: boolean) => BlockAPI; + eth_getBlockByNumber: (blockNumber: BlockNumberOrTag, hydrated: boolean) => BlockAPI; + eth_getBlockTransactionCountByHash: (blockHash: HexString32Bytes) => Uint; + eth_getBlockTransactionCountByNumber: (blockNumber: BlockNumberOrTag) => Uint; + eth_getUncleCountByBlockHash: (blockHash: HexString32Bytes) => Uint; + eth_getUncleCountByBlockNumber: (blockNumber: BlockNumberOrTag) => Uint; + eth_getUncleByBlockHashAndIndex: (blockHash: HexString32Bytes, uncleIndex: Uint) => BlockAPI; + eth_getUncleByBlockNumberAndIndex: ( + blockNumber: BlockNumberOrTag, + uncleIndex: Uint, + ) => BlockAPI; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/transaction.yaml + eth_getTransactionByHash: (transactionHash: HexString32Bytes) => TransactionInfoAPI | undefined; + eth_getTransactionByBlockHashAndIndex: ( + blockHash: HexString32Bytes, + transactionIndex: Uint, + ) => TransactionInfoAPI | undefined; + eth_getTransactionByBlockNumberAndIndex: ( + blockNumber: BlockNumberOrTag, + transactionIndex: Uint, + ) => TransactionInfoAPI | undefined; + eth_getTransactionReceipt: ( + transactionHash: HexString32Bytes, + ) => TransactionReceiptAPI | undefined; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/client.yaml + eth_protocolVersion: () => string; + eth_syncing: () => SyncingStatusAPI; + eth_coinbase: () => Address; + eth_accounts: () => Address[]; + eth_blockNumber: () => Uint; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/execute.yaml + eth_call: (transaction: TransactionCallAPI, blockNumber: BlockNumberOrTag) => HexStringBytes; + eth_estimateGas: ( + transaction: Partial, + blockNumber: BlockNumberOrTag, + ) => Uint; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/fee_market.yaml + eth_gasPrice: () => Uint; + eth_feeHistory: ( + blockCount: Uint, + newestBlock: BlockNumberOrTag, + rewardPercentiles: number[], + ) => FeeHistoryResultAPI; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/filter.yaml + eth_newFilter: (filter: Filter) => Uint; + eth_newBlockFilter: () => Uint; + eth_newPendingTransactionFilter: () => Uint; + eth_uninstallFilter: (filterIdentifier: Uint) => boolean; + eth_getFilterChanges: (filterIdentifier: Uint) => FilterResultsAPI; + eth_getFilterLogs: (filterIdentifier: Uint) => FilterResultsAPI; + eth_getLogs: (filter: Filter) => FilterResultsAPI; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/mining.yaml + eth_mining: () => boolean; + eth_hashrate: () => Uint; + eth_getWork: () => [HexString32Bytes, HexString32Bytes, HexString32Bytes]; + eth_submitWork: ( + nonce: HexString8Bytes, + hash: HexString32Bytes, + digest: HexString32Bytes, + ) => boolean; + eth_submitHashrate: (hashRate: HexString32Bytes, id: HexString32Bytes) => boolean; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/sign.yaml + eth_sign: (address: Address, message: HexStringBytes) => HexString256Bytes; + eth_signTransaction: ( + transaction: TransactionWithSenderAPI | Partial, + ) => HexStringBytes | SignedTransactionInfoAPI; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/state.yaml + eth_getBalance: (address: Address, blockNumber: BlockNumberOrTag) => Uint; + eth_getStorageAt: ( + address: Address, + storageSlot: Uint256, + blockNumber: BlockNumberOrTag, + ) => HexStringBytes; + eth_getTransactionCount: (address: Address, blockNumber: BlockNumberOrTag) => Uint; + eth_getCode: (address: Address, blockNumber: BlockNumberOrTag) => HexStringBytes; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/submit.yaml + eth_sendTransaction: ( + transaction: TransactionWithSenderAPI | Partial, + ) => HexString32Bytes; + eth_sendRawTransaction: (transaction: HexStringBytes) => HexString32Bytes; + + // https://geth.ethereum.org/docs/rpc/pubsub + eth_subscribe: ( + ...params: + | ['newHeads'] + | ['newPendingTransactions'] + | ['syncing'] + | ['logs', { address?: HexString; topics?: HexString[] }] + ) => HexString; + eth_unsubscribe: (subscriptionId: HexString) => HexString; + eth_clearSubscriptions: (keepSyncing?: boolean) => void; + // Non-supported by execution-apis specs + eth_getCompilers: () => string[]; + eth_compileSolidity: (code: string) => CompileResultAPI; + eth_compileLLL: (code: string) => HexStringBytes; + eth_compileSerpent: (code: string) => HexStringBytes; +}; diff --git a/packages/web3-types/src/apis/eth_personal_api.ts b/packages/web3-types/src/apis/eth_personal_api.ts new file mode 100644 index 00000000000..cab41b22dd8 --- /dev/null +++ b/packages/web3-types/src/apis/eth_personal_api.ts @@ -0,0 +1,30 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Address, Transaction } from '../eth_types.js'; +import { HexString } from '../primitives_types.js'; + +export type EthPersonalAPI = { + personal_listAccounts: () => Address[]; + personal_newAccount: (password: string) => Address; + personal_unlockAccount: (address: Address, password: string, unlockDuration: number) => boolean; + personal_lockAccount: (address: Address) => boolean; + personal_importRawKey: (keyData: HexString, passphrase: string) => HexString; + personal_sendTransaction: (tx: Transaction, passphrase: string) => HexString; + personal_signTransaction: (tx: Transaction, passphrase: string) => HexString; + personal_sign: (data: HexString, address: Address, passphrase: string) => HexString; + personal_ecRecover: (signedData: HexString, signature: HexString) => Address; +}; diff --git a/packages/web3-types/src/apis/web3_eth_execution_api.ts b/packages/web3-types/src/apis/web3_eth_execution_api.ts new file mode 100644 index 00000000000..fde1250b4a3 --- /dev/null +++ b/packages/web3-types/src/apis/web3_eth_execution_api.ts @@ -0,0 +1,60 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { EthExecutionAPI } from './eth_execution_api.js'; +import { + AccountObject, + Address, + BlockNumberOrTag, + Eip712TypedData, + HexString256Bytes, + HexString32Bytes, + TransactionInfo, + Uint, +} from '../eth_types.js'; + +export type Web3EthExecutionAPI = EthExecutionAPI & { + eth_pendingTransactions: () => TransactionInfo[]; + + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1102.md + eth_requestAccounts: () => Address[]; + + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-695.md + eth_chainId: () => Uint; + + web3_clientVersion: () => string; + + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1186.md + eth_getProof: ( + address: Address, + storageKeys: HexString32Bytes[], + blockNumber: BlockNumberOrTag, + ) => AccountObject; + + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md + eth_signTypedData: ( + address: Address, + typedData: Eip712TypedData, + useLegacy: true, + ) => HexString256Bytes; + + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md + eth_signTypedData_v4: ( + address: Address, + typedData: Eip712TypedData, + useLegacy: false | undefined, + ) => HexString256Bytes; +}; diff --git a/packages/web3-types/src/apis/web3_net_api.ts b/packages/web3-types/src/apis/web3_net_api.ts new file mode 100644 index 00000000000..2cb3566f823 --- /dev/null +++ b/packages/web3-types/src/apis/web3_net_api.ts @@ -0,0 +1,23 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { HexString } from '../primitives_types.js'; + +export type Web3NetAPI = { + net_version: () => string; // https://eth.wiki/json-rpc/API#net_version + net_peerCount: () => HexString; // https://eth.wiki/json-rpc/API#net_peercount + net_listening: () => boolean; // https://eth.wiki/json-rpc/API#net_listening +}; diff --git a/packages/web3-types/src/data_format_types.ts b/packages/web3-types/src/data_format_types.ts new file mode 100644 index 00000000000..f0ffe3bc8aa --- /dev/null +++ b/packages/web3-types/src/data_format_types.ts @@ -0,0 +1,60 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Bytes, HexString, Numbers } from './primitives_types.js'; + +export enum FMT_NUMBER { + NUMBER = 'NUMBER_NUMBER', + HEX = 'NUMBER_HEX', + STR = 'NUMBER_STR', + BIGINT = 'NUMBER_BIGINT', +} + +export type NumberTypes = { + [FMT_NUMBER.NUMBER]: number; + [FMT_NUMBER.HEX]: HexString; + [FMT_NUMBER.STR]: string; + [FMT_NUMBER.BIGINT]: bigint; +}; + +export enum FMT_BYTES { + HEX = 'BYTES_HEX', + UINT8ARRAY = 'BYTES_UINT8ARRAY', +} + +export type ByteTypes = { + [FMT_BYTES.HEX]: HexString; + [FMT_BYTES.UINT8ARRAY]: Uint8Array; +}; + +export type DataFormat = { + readonly number: FMT_NUMBER; + readonly bytes: FMT_BYTES; +}; + +export const DEFAULT_RETURN_FORMAT = { number: FMT_NUMBER.BIGINT, bytes: FMT_BYTES.HEX } as const; +export const ETH_DATA_FORMAT = { number: FMT_NUMBER.HEX, bytes: FMT_BYTES.HEX } as const; + +export type FormatType = number extends Extract + ? NumberTypes[F['number']] | Exclude + : Uint8Array extends Extract + ? ByteTypes[F['bytes']] | Exclude + : T extends object | undefined + ? { + [P in keyof T]: FormatType; + } + : T; diff --git a/packages/web3-types/src/error_types.ts b/packages/web3-types/src/error_types.ts new file mode 100644 index 00000000000..4891b875a0a --- /dev/null +++ b/packages/web3-types/src/error_types.ts @@ -0,0 +1,39 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export interface Web3Error extends Error { + readonly name: string; + readonly code: number; + readonly stack?: string; +} + +export type Web3ValidationErrorObject< + K extends string = string, + P = Record, + S = unknown, +> = { + keyword: K; + instancePath: string; + schemaPath: string; + params: P; + // Added to validation errors of "propertyNames" keyword schema + propertyName?: string; + // Excluded if option `messages` set to false. + message?: string; + schema?: S; + data?: unknown; +}; diff --git a/packages/web3-types/src/eth_abi_types.ts b/packages/web3-types/src/eth_abi_types.ts new file mode 100644 index 00000000000..acd75e5eb30 --- /dev/null +++ b/packages/web3-types/src/eth_abi_types.ts @@ -0,0 +1,364 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Address } from './eth_types.js'; +import { Bytes, Numbers } from './primitives_types.js'; +import { FixedSizeArray } from './utility_types.js'; + +type _SolidityIndexRange = + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 15 + | 16 + | 17 + | 18 + | 19 + | 20 + | 21 + | 22 + | 25 + | 26 + | 27 + | 28 + | 29 + | 30; + +export type ConvertToNumber< + T extends string, + Range extends number = _SolidityIndexRange, +> = Range extends unknown ? (`${Range}` extends T ? Range : never) : never; + +export type Components = { + name: string; + type: string; + indexed?: boolean; + components?: Components[]; +}; + +export interface AbiStruct { + [key: string]: unknown; + name: string; + type: string; +} + +export interface AbiCoderStruct extends AbiStruct { + [key: string]: unknown; + components?: Array; +} + +// https://docs.soliditylang.org/en/latest/abi-spec.html#json +export type AbiParameter = { + readonly name: string; + readonly type: string; + readonly baseType?: string; + readonly indexed?: boolean; + readonly components?: ReadonlyArray; + readonly arrayLength?: number; + readonly arrayChildren?: ReadonlyArray; + readonly internalType?: string; +}; + +type FragmentTypes = 'constructor' | 'event' | 'function' | 'fallback' | 'receive'; + +export type AbiBaseFragment = { + // type will default to string if passed ABI is declared without "as const" + readonly type: string | FragmentTypes; +}; + +// To assign an ABI which is not declared `as const` need to specify a generic string + +// https://docs.soliditylang.org/en/latest/abi-spec.html#json +export type AbiConstructorFragment = AbiBaseFragment & { + readonly type: string | 'constructor'; + readonly stateMutability: string | 'nonpayable' | 'payable'; + readonly inputs?: ReadonlyArray; +}; + +// https://docs.soliditylang.org/en/latest/abi-spec.html#json +export type AbiFunctionFragment = AbiBaseFragment & { + readonly name: string; + readonly type: string | 'function'; + readonly stateMutability?: string | 'nonpayable' | 'payable' | 'pure' | 'view'; + readonly inputs?: ReadonlyArray; + readonly outputs?: ReadonlyArray; + + readonly constant?: boolean; // stateMutability == 'pure' or stateMutability == 'view' + readonly payable?: boolean; // stateMutability == 'payable' +}; + +export type AbiFallbackFragment = AbiBaseFragment & { + readonly name: never; + readonly type: string | 'fallback'; + readonly stateMutability: string | 'nonpayable' | 'payable' | 'pure' | 'view'; + readonly inputs: never; + readonly outputs: never; + + // legacy properties + readonly constant?: boolean; // stateMutability == 'pure' or stateMutability == 'view' + readonly payable?: boolean; // stateMutability == 'payable' +}; + +// https://docs.soliditylang.org/en/latest/abi-spec.html#json +export type AbiEventFragment = AbiBaseFragment & { + readonly name: string; + readonly type: string | 'event'; + readonly inputs?: ReadonlyArray; + readonly anonymous?: boolean; +}; + +// https://docs.soliditylang.org/en/latest/abi-spec.html#errors +export type AbiErrorFragment = AbiBaseFragment & { + readonly name: string; + readonly type: string | 'error'; + readonly inputs?: ReadonlyArray; +}; + +// https://docs.soliditylang.org/en/latest/abi-spec.html#json +export type AbiFragment = + | AbiConstructorFragment + | AbiFunctionFragment + | AbiEventFragment + | AbiErrorFragment + | AbiFallbackFragment; + +export type ContractAbi = ReadonlyArray; + +export type AbiInput = + | string + | AbiParameter + | { + name: string; + type: string; + components?: Components; + index?: boolean; + internalType?: string; + } + | { readonly [key: string]: unknown }; + +// https://docs.soliditylang.org/en/develop/abi-spec.html#json +export type JsonFunctionInterface = { + type: 'function'; + name: string; + inputs: Components[]; + outputs?: AbiInput[]; + stateMutability?: string; +}; + +export type JsonEventInterface = { + type: 'event'; + name: string; + inputs: Components[]; + indexed: boolean; + anonymous: boolean; +}; + +export type FilterAbis = Abi extends Filter + ? Abi + : never; + +type _TypedArray = Size extends '' + ? Type[] + : FixedSizeArray>; + +export type PrimitiveAddressType = Type extends `address[${infer Size}]` + ? _TypedArray + : Type extends 'address' + ? Address + : never; + +export type PrimitiveStringType = Type extends `string${string}[${infer Size}]` + ? _TypedArray + : Type extends 'string' | `string${string}` + ? string + : never; + +export type PrimitiveBooleanType = Type extends `bool[${infer Size}]` + ? _TypedArray + : Type extends 'bool' + ? boolean + : never; + +export type PrimitiveIntegerType = Type extends + | `uint${string}[${infer Size}]` + | `int${string}[${infer Size}]` + ? _TypedArray + : Type extends 'uint' | 'int' | `int${string}` | `uint${string}` + ? Numbers + : never; + +export type PrimitiveBytesType = Type extends `bytes${string}[${infer Size}]` + ? _TypedArray + : Type extends 'bytes' | `bytes${string}` + ? Bytes + : never; + +export type PrimitiveTupleType< + Type extends string, + TypeComponents extends ReadonlyArray | undefined | unknown = [], +> = TypeComponents extends ReadonlyArray + ? Type extends 'tuple' + ? { + // eslint-disable-next-line no-use-before-define + [Param in TypeComponents[number] as Param['name']]: MatchPrimitiveType< + Param['type'], + Param['components'] + >; + } + : Type extends `tuple[${infer Size}]` + ? _TypedArray< + { + // eslint-disable-next-line no-use-before-define + [Param in TypeComponents[number] as Param['name']]: MatchPrimitiveType< + Param['type'], + Param['components'] + >; + }, + Size + > + : never + : never; + +type ObjectToArray = T extends [...infer R, infer A] + ? Record & ObjectToArray + : T; +type ArrToObjectWithFunctions = Array & ObjectToArray; + +export type MatchPrimitiveType< + Type extends string, + TypeComponents extends ReadonlyArray | undefined | unknown, +> = + | PrimitiveAddressType + | PrimitiveStringType + | PrimitiveBooleanType + | PrimitiveIntegerType + | PrimitiveBytesType + | PrimitiveTupleType + | never; + +type ContractMethodOutputParametersRecursiveArray< + Params extends ReadonlyArray | undefined, +> = + // check if params are empty array + Params extends readonly [] + ? [] + : Params extends readonly [infer H, ...infer R] // check if Params is an array + ? H extends AbiParameter + ? [ + MatchPrimitiveType, + ...ContractMethodOutputParametersRecursiveArray, + ] + : [] + : []; + +type ContractMethodOutputParametersRecursiveRecord< + Params extends ReadonlyArray | undefined, +> = + // check if params are empty array + Params extends readonly [] + ? [] + : Params extends readonly [infer H, ...infer R] // check if Params is an array + ? H extends AbiParameter + ? H['name'] extends '' // check if output param name is empty string + ? ContractMethodOutputParametersRecursiveRecord + : Record> & // sets key-value pair of output param name and type + ContractMethodOutputParametersRecursiveRecord + : ContractMethodOutputParametersRecursiveRecord + : Params extends undefined | unknown // param is not array, check if undefined + ? [] + : Params; + +export type ContractMethodOutputParameters | undefined> = + // check if params are empty array + Params extends readonly [] + ? void + : Params extends readonly [infer H, ...infer R] // check if Params is an array + ? R extends readonly [] // if only one output in array + ? H extends AbiParameter + ? MatchPrimitiveType + : [] + : // if more than one output + ArrToObjectWithFunctions<[...ContractMethodOutputParametersRecursiveArray]> & + ContractMethodOutputParametersRecursiveRecord + : []; + +export type ContractMethodInputParameters | undefined> = + Params extends readonly [] + ? [] + : Params extends readonly [infer H, ...infer R] + ? H extends AbiParameter + ? // TODO: Find a way to set name for tuple item + [MatchPrimitiveType, ...ContractMethodInputParameters] + : ContractMethodInputParameters + : Params extends undefined | unknown + ? [] + : Params; + +export type ContractConstructor = { + [Abi in FilterAbis as 'constructor']: { + readonly Abi: Abi; + readonly Inputs: ContractMethodInputParameters; + }; +}['constructor']; + +export type ContractConstructorArgs = { + [Abi in FilterAbis< + Abis, + AbiConstructorFragment & { type: 'constructor' } + > as 'constructor']: ContractMethodInputParameters; +}['constructor']; + +export type ContractMethod = { + readonly Abi: Abi; + + readonly Inputs: ContractMethodInputParameters; + readonly Outputs: ContractMethodOutputParameters; +}; + +export type ContractMethods = { + [Abi in FilterAbis< + Abis, + AbiFunctionFragment & { type: 'function' } + > as Abi['name']]: ContractMethod; +}; + +export type ContractEvent = { + readonly Abi: Abi; + readonly Inputs: ContractMethodInputParameters; +}; + +export type ContractEvents = { + [Abi in FilterAbis< + Abis, + AbiEventFragment & { type: 'event' } + > as Abi['name']]: ContractEvent; +}; + +export interface DecodedParams extends Record { + __length__: number; +} diff --git a/packages/web3-types/src/eth_contract_types.ts b/packages/web3-types/src/eth_contract_types.ts new file mode 100644 index 00000000000..15d23b36470 --- /dev/null +++ b/packages/web3-types/src/eth_contract_types.ts @@ -0,0 +1,158 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Address, Uint } from './eth_types.js'; +import { SupportedProviders } from './web3_base_provider.js'; +import { Bytes, HexString } from './primitives_types.js'; +import { EthExecutionAPI } from './apis/eth_execution_api.js'; +import { AbiFragment, ContractAbi } from './eth_abi_types.js'; + +export interface ContractInitOptions { + /** + * The maximum gas provided for a transaction (gas limit). + */ + readonly gas?: Uint; + readonly gasLimit?: Uint; + /** + * The gas price in wei to use for transactions. + */ + readonly gasPrice?: Uint; + /** + * The address transactions should be made from + */ + readonly from?: Address; + /** + * The byte code of the contract. Used when the contract gets {@link Contract.deploy | deployed} + */ + readonly data?: Bytes; + readonly input?: Bytes; + + readonly provider?: SupportedProviders | string; + /** + * If `true`, the defaults of the contract instance will be updated automatically based on the changes of the context used to instantiate the contract. + */ + readonly syncWithContext?: boolean; + + readonly dataInputFill?: 'data' | 'input' | 'both'; + /** + * this will make calls default to `data`, `input` or `both` + */ +} + +export interface NonPayableCallOptions { + nonce?: HexString; + /** + * The address which is the call (the transaction) should be made from. For calls the `from` property is optional however it is + * highly recommended to explicitly set it or it may default to address(0) depending on your node or provider. + */ + from?: Address; + /** + * The maximum gas (gas limit) provided for this call (this transaction) + */ + gas?: string; + maxPriorityFeePerGas?: HexString; + maxFeePerGas?: HexString; + /** + * The gas price in wei to use for this call `transaction`. + */ + gasPrice?: string; + type?: string | number; + data?: HexString; + input?: HexString; +} + +export interface PayableCallOptions extends NonPayableCallOptions { + /** + * + */ + value?: string; +} + +export type ContractAbiWithSignature = ReadonlyArray; +export interface ContractOptions { + /** + * The maximum gas provided for a transaction (gas limit). + */ + readonly gas?: Uint; + /** + * The gas price in wei to use for transactions. + */ + readonly gasPrice?: Uint; + /** + * The address transactions should be made from. + */ + readonly from?: Address; + /** + * The byte code of the contract. Used when the contract gets {@link Contract.deploy | deployed} + */ + readonly input?: Bytes; + /** + * The byte code of the contract. Used when the contract gets {@link Contract.deploy | deployed} + */ + readonly data?: Bytes; + /** + * The {@doclink glossary/json_interface | json interface} object derived from the [ABI](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI) of this contract. + * + * Re-setting this will regenerate the methods and events of the contract instance. + * + * ```ts + * myContract.options.jsonInterface; + * > [{ + * "type":"function", + * "name":"foo", + * "inputs": [{"name":"a","type":"uint256"}], + * "outputs": [{"name":"b","type":"address"}], + * "signature": "0x...", + * },{ + * "type":"event", + * "name":"Event", + * "inputs": [{"name":"a","type":"uint256","indexed":true},{"name":"b","type":"bytes32","indexed":false}], + * "signature": "0x...", + * }] + * + * // Set a new ABI interface + * // Note: the "signature" of every function and event's ABI is not needed to be provided when assigning. + * // It will be calculated and set automatically inside the setter. + * myContract.options.jsonInterface = [...]; + * ``` + */ + get jsonInterface(): ContractAbiWithSignature; + set jsonInterface(value: ContractAbi); + + /** + * The address used for this contract instance. All transactions generated by web3.js from this contract will contain this address as the `to`. + * + * The address will be stored in lowercase. + * + * ```ts + * myContract.options.address; + * > '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae' + * + * // set a new address + * myContract.options.address = '0x1234FFDD...'; + * ``` + */ + address?: Address; // All transactions generated by web3.js from this contract will contain this address as the "to". + /** + * The max priority fee per gas to use for transactions. + */ + maxPriorityFeePerGas?: Uint; + /** + * The max fee per gas to use for transactions. + */ + maxFeePerGas?: Uint; +} diff --git a/packages/web3-types/src/eth_types.ts b/packages/web3-types/src/eth_types.ts new file mode 100644 index 00000000000..8c59752e20a --- /dev/null +++ b/packages/web3-types/src/eth_types.ts @@ -0,0 +1,531 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Bytes, HexString, Numbers } from './primitives_types.js'; + +export type ValueTypes = 'address' | 'bool' | 'string' | 'int256' | 'uint256' | 'bytes' | 'bigint'; +// Hex encoded 32 bytes +export type HexString32Bytes = HexString; +// Hex encoded 16 bytes +export type HexString16Bytes = HexString; +// Hex encoded 8 bytes +export type HexString8Bytes = HexString; +// Hex encoded 1 byte +export type HexStringSingleByte = HexString; +// Hex encoded 1 byte +export type HexStringBytes = HexString; +// Hex encoded 256 byte +export type HexString256Bytes = HexString; +// Hex encoded unsigned integer +export type Uint = HexString; +// Hex encoded unsigned integer 32 bytes +export type Uint256 = HexString; +// Hex encoded address +export type Address = HexString; + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/filter.json#L59 +export type Topic = HexString32Bytes; + +export type TransactionHash = HexString; +export type Uncles = HexString32Bytes[]; +export enum BlockTags { + EARLIEST = 'earliest', + LATEST = 'latest', + PENDING = 'pending', + SAFE = 'safe', + FINALIZED = 'finalized', +} +export type BlockTag = `${BlockTags}`; + +export type BlockNumberOrTag = Numbers | BlockTag; + +export interface Proof { + readonly address: HexString; + readonly nonce: string; + readonly balance: string; +} + +export interface TransactionInput { + readonly [key: string]: unknown; + readonly to?: HexString; // If its a contract creation tx then no address wil be specified. + readonly from?: HexString; + readonly data?: string; + readonly input?: string; + readonly gas: HexString; + readonly gasLimit?: string; + readonly gasPrice?: string; + readonly maxPriorityFeePerGas?: string; + readonly maxFeePerGas?: string; + readonly nonce: string; + readonly value: string; + readonly blockNumber?: HexString; + readonly transactionIndex?: HexString; + readonly type?: HexString; + readonly chainId?: HexString; +} + +export type TransactionOutput = { + readonly [key: string]: unknown; + readonly to?: HexString; // If its a contract creation tx then no address wil be specified. + readonly from?: HexString; + readonly input: string; + readonly gas?: Numbers; + readonly gasLimit?: string; + readonly nonce: Numbers; + readonly value: Numbers; + readonly blockNumber?: Numbers; + readonly transactionIndex?: Numbers; +} & ( + | { maxPriorityFeePerGas: Numbers; maxFeePerGas: Numbers; gasPrice?: never } + | { maxPriorityFeePerGas?: never; maxFeePerGas?: never; gasPrice: Numbers } +); + +export interface LogsInput { + readonly blockHash?: HexString; + readonly transactionHash?: HexString; + readonly logIndex?: HexString; + readonly id?: string; + readonly blockNumber?: HexString; + readonly transactionIndex?: HexString; + readonly address: HexString; + readonly topics: HexString[]; + readonly data: HexString; +} +export interface LogsOutput { + readonly id?: string; + readonly removed: boolean; + readonly logIndex?: Numbers; + readonly transactionIndex?: Numbers; + readonly transactionHash?: HexString32Bytes; + readonly blockHash?: HexString32Bytes; + readonly blockNumber?: Numbers; + readonly address: string; + readonly topics: HexString[]; + readonly data: HexString; +} + +export interface BlockInput { + readonly gasLimit: HexString; + readonly gasUsed: HexString; + readonly size: HexString; + readonly timestamp: HexString; + readonly number?: HexString; + readonly difficulty?: HexString; + readonly totalDifficulty?: HexString; + readonly transactions?: TransactionInput[]; + readonly miner?: HexString; + readonly baseFeePerGas?: HexString; +} + +export interface BlockOutput { + readonly gasLimit: bigint | number; + readonly gasUsed: bigint | number; + readonly size: bigint | number; + readonly timestamp: bigint | number; + readonly number?: bigint | number; + readonly difficulty?: bigint | number; + readonly totalDifficulty?: bigint | number; + readonly transactions?: TransactionOutput[]; + readonly miner?: HexString; + readonly baseFeePerGas?: bigint | number; + readonly parentHash?: HexString32Bytes; +} + +export interface Withdrawals { + readonly index: Numbers; + readonly validatorIndex: Numbers; + readonly address: Address; + readonly amount: Numbers; +} + +export interface BlockHeaderOutput { + readonly hash?: HexString32Bytes; + readonly parentHash?: HexString32Bytes; + readonly receiptsRoot?: HexString32Bytes; + readonly miner?: HexString; + readonly stateRoot?: HexString32Bytes; + readonly transactionsRoot?: HexString32Bytes; + readonly withdrawalsRoot?: HexString32Bytes; + readonly logsBloom?: Bytes; + readonly difficulty?: Numbers; + readonly number?: Numbers; + readonly gasLimit: Numbers; + readonly gasUsed: Numbers; + readonly timestamp: Numbers; + readonly extraData?: Bytes; + readonly nonce?: Numbers; + readonly sha3Uncles: HexString32Bytes[]; + readonly baseFeePerGas?: Numbers; + + // These fields are returned when the RPC client is Nethermind, + // but aren't available in other clients such as Geth + readonly author?: Address; + readonly totalDifficulty?: Numbers; + readonly size?: Numbers; + readonly excessDataGas?: Numbers; + readonly mixHash?: HexString32Bytes; + readonly transactions?: TransactionOutput[]; + readonly uncles?: Uncles; + readonly withdrawals?: Withdrawals[]; +} + +export interface ReceiptInput { + readonly [x: string]: unknown; + readonly blockNumber?: HexString; + readonly transactionIndex?: HexString; + readonly cumulativeGasUsed: HexString; + readonly gasUsed: HexString; + readonly logs?: LogsInput[]; + readonly contractAddress?: HexString; + readonly status?: string; + readonly effectiveGasPrice?: HexString; +} + +export interface ReceiptOutput { + readonly blockNumber?: bigint | number; + readonly transactionIndex?: bigint | number; + readonly cumulativeGasUsed: bigint | number; + readonly gasUsed: bigint | number; + readonly logs?: LogsOutput[]; + readonly contractAddress?: HexString; + readonly status: boolean; + readonly effectiveGasPrice?: bigint | number; +} + +export interface PostInput { + readonly ttl?: HexString; + readonly workToProve?: HexString; + readonly priority?: HexString; + readonly expiry?: HexString; + readonly sent?: HexString; + readonly workProved?: HexString; + readonly topics?: HexString[]; +} + +export interface PostOutput { + readonly ttl?: bigint | number; + readonly workToProve?: bigint | number; + readonly priority?: bigint | number; + readonly expiry?: bigint | number; + readonly sent?: bigint | number; + readonly workProved?: bigint | number; + readonly topics?: string[]; +} + +export interface SyncInput { + readonly startingBlock: HexString; + readonly currentBlock: HexString; + readonly highestBlock: HexString; + readonly knownStates?: HexString; + readonly pulledStates?: HexString; +} + +export interface SyncOutput { + readonly startingBlock: Numbers; + readonly currentBlock: Numbers; + readonly highestBlock: Numbers; + readonly knownStates?: Numbers; + readonly pulledStates?: Numbers; +} + +export type Receipt = Record; + +type FilterOption = Record; + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/filter.json#L28 +export interface Filter { + readonly fromBlock?: BlockNumberOrTag; + readonly toBlock?: BlockNumberOrTag; + readonly address?: Address | Address[]; + readonly blockHash?: Address; + // Using "null" type intentionally to match specifications + // eslint-disable-next-line @typescript-eslint/ban-types + readonly topics?: (null | Topic | Topic[])[]; + readonly filter?: FilterOption; +} + +export interface AccessListEntry { + readonly address?: Address; + readonly storageKeys?: HexString32Bytes[]; +} +export type AccessList = AccessListEntry[]; + +export type AccessListResult = { + readonly accessList?: AccessList; + readonly gasUsed?: Numbers; +}; + +export type ValidChains = 'goerli' | 'kovan' | 'mainnet' | 'rinkeby' | 'ropsten' | 'sepolia'; + +// This list of hardforks is expected to be in order +// keep this in mind when making changes to it +export enum HardforksOrdered { + chainstart = 'chainstart', + frontier = 'frontier', + homestead = 'homestead', + dao = 'dao', + tangerineWhistle = 'tangerineWhistle', + spuriousDragon = 'spuriousDragon', + byzantium = 'byzantium', + constantinople = 'constantinople', + petersburg = 'petersburg', + istanbul = 'istanbul', + muirGlacier = 'muirGlacier', + berlin = 'berlin', + london = 'london', + altair = 'altair', + arrowGlacier = 'arrowGlacier', + grayGlacier = 'grayGlacier', + bellatrix = 'bellatrix', + merge = 'merge', + capella = 'capella', + shanghai = 'shanghai', +} + +export type Hardfork = `${HardforksOrdered}`; + +export interface LogBase { + readonly removed?: boolean; + readonly logIndex?: NumberType; + readonly transactionIndex?: NumberType; + readonly transactionHash?: ByteType; + readonly blockHash?: ByteType; + readonly blockNumber?: NumberType; + readonly address?: Address; + readonly data?: ByteType; + readonly topics?: ByteType[]; + readonly id?: string; +} +export interface Log extends LogBase { + readonly id?: string; +} + +export interface EventLog { + readonly event: string; + readonly id?: string; + readonly logIndex?: bigint | number | string; + readonly transactionIndex?: bigint | number | string; + readonly transactionHash?: HexString32Bytes; + readonly blockHash?: HexString32Bytes; + readonly blockNumber?: bigint | number | string; + readonly address: string; + readonly topics: HexString[]; + readonly data: HexString; + readonly raw?: { data: string; topics: unknown[] }; + readonly returnValues: Record; + readonly signature?: HexString; +} + +export interface TransactionReceiptBase { + readonly transactionHash: hashByteType; + readonly transactionIndex: numberType; + readonly blockHash: hashByteType; + readonly blockNumber: numberType; + readonly from: Address; + readonly to: Address; + readonly cumulativeGasUsed: numberType; + readonly gasUsed: numberType; + readonly effectiveGasPrice?: numberType; + readonly contractAddress?: Address; + readonly logs: logsType[]; + readonly logsBloom: logsBloomByteType; + readonly root: hashByteType; + readonly status: numberType; + readonly type?: numberType; + events?: { [key: string]: EventLog }; +} + +export type TransactionReceipt = TransactionReceiptBase; + +export interface CustomChain { + name?: string; + networkId: Numbers; + chainId: Numbers; +} + +export interface Common { + customChain: CustomChain; + baseChain?: ValidChains; + hardfork?: Hardfork; +} + +interface TransactionBase { + value?: Numbers; + accessList?: AccessList; + common?: Common; + gas?: Numbers; + gasPrice?: Numbers; + type?: Numbers; + maxFeePerGas?: Numbers; + maxPriorityFeePerGas?: Numbers; + data?: Bytes; + input?: Bytes; + nonce?: Numbers; + chain?: ValidChains; + hardfork?: Hardfork; + chainId?: Numbers; + networkId?: Numbers; + gasLimit?: Numbers; + yParity?: Uint; + v?: Numbers; + r?: Bytes; + s?: Bytes; +} + +export interface Transaction extends TransactionBase { + from?: Address; + // eslint-disable-next-line @typescript-eslint/ban-types + to?: Address | null; +} + +export interface TransactionForAccessList extends Transaction { + from: Address; +} + +export interface TransactionCall extends Transaction { + to: Address; +} + +export interface TransactionWithFromLocalWalletIndex extends Omit { + from: Numbers; +} + +export interface TransactionWithToLocalWalletIndex extends Omit { + to: Numbers; +} + +export interface TransactionWithFromAndToLocalWalletIndex extends Omit { + from: Numbers; + to: Numbers; +} + +export interface TransactionInfo extends Transaction { + readonly blockHash?: Bytes; + readonly blockNumber?: Numbers; + readonly from: Address; + readonly hash: Bytes; + readonly transactionIndex?: Numbers; +} + +export interface PopulatedUnsignedBaseTransaction { + from: Address; + to?: Address; + value: Numbers; + gas?: Numbers; + gasPrice: Numbers; + type: Numbers; + input?: Bytes; + data?: Bytes; + nonce: Numbers; + networkId: Numbers; + chain: ValidChains; + hardfork: Hardfork; + chainId: Numbers; + common: Common; + gasLimit: Numbers; +} + +export interface PopulatedUnsignedEip2930Transaction extends PopulatedUnsignedBaseTransaction { + accessList: AccessList; +} + +export interface PopulatedUnsignedEip1559Transaction extends PopulatedUnsignedEip2930Transaction { + gasPrice: never; + maxFeePerGas: Numbers; + maxPriorityFeePerGas: Numbers; +} +export type PopulatedUnsignedTransaction = + | PopulatedUnsignedBaseTransaction + | PopulatedUnsignedEip2930Transaction + | PopulatedUnsignedEip1559Transaction; + +export interface BlockBase< + ByteType, + HexStringType, + NumberType, + extraDataType, + TransactionTypes, + logsBloomType, +> { + readonly parentHash: ByteType; + readonly sha3Uncles: ByteType; + readonly miner: HexStringType; + readonly stateRoot: ByteType; + readonly transactionsRoot: ByteType; + readonly receiptsRoot: ByteType; + readonly logsBloom?: logsBloomType; + readonly difficulty?: NumberType; + readonly number: NumberType; + readonly gasLimit: NumberType; + readonly gasUsed: NumberType; + readonly timestamp: NumberType; + readonly extraData: extraDataType; + readonly mixHash: ByteType; + readonly nonce: NumberType; + readonly totalDifficulty: NumberType; + readonly baseFeePerGas?: NumberType; + readonly size: NumberType; + readonly transactions: TransactionTypes; + readonly uncles: Uncles; + readonly hash?: ByteType; +} + +export type Block = BlockBase< + Bytes, + Bytes, + Numbers, + Bytes, + TransactionHash[] | TransactionInfo[], + Bytes +>; + +export interface FeeHistoryBase { + readonly oldestBlock: NumberType; + readonly baseFeePerGas: NumberType; + readonly reward: NumberType[][]; + readonly gasUsedRatio: NumberType[]; +} + +export type FeeHistory = FeeHistoryBase; + +export interface StorageProof { + readonly key: Bytes; + readonly value: Numbers; + readonly proof: Bytes[]; +} + +export interface AccountObject { + readonly balance: Numbers; + readonly codeHash: Bytes; + readonly nonce: Numbers; + readonly storageHash: Bytes; + readonly accountProof: Bytes[]; + readonly storageProof: StorageProof[]; +} + +export interface Eip712TypeDetails { + name: string; + type: string; +} +export interface Eip712TypedData { + readonly types: { + EIP712Domain: Eip712TypeDetails[]; + [key: string]: Eip712TypeDetails[]; + }; + readonly primaryType: string; + readonly domain: Record; + readonly message: Record; +} diff --git a/packages/web3-types/src/index.ts b/packages/web3-types/src/index.ts new file mode 100644 index 00000000000..694ffea34ff --- /dev/null +++ b/packages/web3-types/src/index.ts @@ -0,0 +1,33 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export * from './error_types.js'; +export * from './apis/eth_execution_api.js'; +export * from './apis/web3_eth_execution_api.js'; +export * from './apis/web3_net_api.js'; +export * from './apis/eth_personal_api.js'; +export * from './data_format_types.js'; +export * from './eth_types.js'; +export * from './eth_abi_types.js'; +export * from './eth_contract_types.js'; +export * from './json_rpc_types.js'; +export * from './primitives_types.js'; +export * from './utility_types.js'; +export * from './web3_api_types.js'; +export * from './web3_base_provider.js'; +export * from './web3_base_wallet.js'; +export * from './web3_deferred_promise_type.js'; diff --git a/packages/web3-types/src/json_rpc_types.ts b/packages/web3-types/src/json_rpc_types.ts new file mode 100644 index 00000000000..a361d018700 --- /dev/null +++ b/packages/web3-types/src/json_rpc_types.ts @@ -0,0 +1,94 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export type JsonRpcId = string | number | undefined; +export type JsonRpcResult = string | number | boolean | Record; +export type JsonRpcIdentifier = string & ('2.0' | '1.0'); + +export interface JsonRpcError { + readonly code: number; + readonly message: string; + readonly data?: T; +} + +export interface JsonRpcResponseWithError { + readonly id: JsonRpcId; + readonly jsonrpc: JsonRpcIdentifier; + readonly error: JsonRpcError; + readonly result?: never; +} + +export interface JsonRpcResponseWithResult { + readonly id: JsonRpcId; + readonly jsonrpc: JsonRpcIdentifier; + readonly error?: never; + readonly result: T; +} + +export interface SubscriptionParams { + readonly subscription: string; // for subscription id + readonly result: T; +} + +export interface JsonRpcSubscriptionResultOld { + readonly error?: never; + readonly params?: never; + readonly type: string; + readonly data: SubscriptionParams; +} + +export interface JsonRpcNotification { + readonly id?: JsonRpcId; + readonly jsonrpc: JsonRpcIdentifier; + readonly method: string; // for subscription + readonly params: SubscriptionParams; // for subscription results + readonly result: never; + readonly data?: never; +} + +export interface JsonRpcSubscriptionResult { + readonly id: number; + readonly jsonrpc: string; + readonly result: string; + readonly method: never; + readonly params: never; + readonly data?: never; +} + +export interface JsonRpcRequest { + readonly id: JsonRpcId; + readonly jsonrpc: JsonRpcIdentifier; + readonly method: string; + readonly params?: T; +} + +export interface JsonRpcOptionalRequest + extends Omit, 'id' | 'jsonrpc'> { + readonly id?: JsonRpcId; + readonly jsonrpc?: JsonRpcIdentifier; +} + +export type JsonRpcBatchRequest = JsonRpcRequest[]; + +export type JsonRpcPayload = JsonRpcRequest | JsonRpcBatchRequest; + +export type JsonRpcBatchResponse = + | (JsonRpcResponseWithError | JsonRpcResponseWithResult)[]; + +export type JsonRpcResponse = + | JsonRpcResponseWithError + | JsonRpcResponseWithResult + | JsonRpcBatchResponse; diff --git a/packages/web3-types/src/primitives_types.ts b/packages/web3-types/src/primitives_types.ts new file mode 100644 index 00000000000..387900e7b66 --- /dev/null +++ b/packages/web3-types/src/primitives_types.ts @@ -0,0 +1,23 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export type HexString = string; +export type Bytes = Uint8Array | HexString; +export type Numbers = number | bigint | string | HexString; + +// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment +export const TypedArray = Object.getPrototypeOf(Uint8Array); diff --git a/packages/web3-types/src/utility_types.ts b/packages/web3-types/src/utility_types.ts new file mode 100644 index 00000000000..168201fe9da --- /dev/null +++ b/packages/web3-types/src/utility_types.ts @@ -0,0 +1,61 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Numbers } from './primitives_types.js'; + +// Make each attribute mutable by removing `readonly` +export type Mutable = { + -readonly [P in keyof T]: T[P]; +}; + +export type ConnectionEvent = { + code: number; + reason: string; + wasClean?: boolean; // if WS connection was closed properly +}; + +export type Optional = Pick, K> & Omit; +export type EncodingTypes = Numbers | boolean | Numbers[] | boolean[]; + +export type TypedObject = { + type: string; + value: EncodingTypes; +}; + +export type TypedObjectAbbreviated = { + t: string; + v: EncodingTypes; +}; + +export type Sha3Input = TypedObject | TypedObjectAbbreviated | Numbers | boolean | object; + +export type IndexKeysForArray = Exclude; + +export type ArrayToIndexObject> = { + [K in IndexKeysForArray]: T[K]; +}; + +type _Grow> = ((x: T, ...xs: A) => void) extends (...a: infer X) => void + ? X + : never; + +export type GrowToSize, N extends number> = { + 0: A; + 1: GrowToSize, N>; +}[A['length'] extends N ? 0 : 1]; + +export type FixedSizeArray = GrowToSize; diff --git a/packages/web3-types/src/web3_api_types.ts b/packages/web3-types/src/web3_api_types.ts new file mode 100644 index 00000000000..2fd94c9ecb8 --- /dev/null +++ b/packages/web3-types/src/web3_api_types.ts @@ -0,0 +1,65 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { JsonRpcId, JsonRpcIdentifier } from './json_rpc_types.js'; + +export interface ProviderMessage { + readonly type: string; + readonly data: unknown; +} + +export interface EthSubscription extends ProviderMessage { + readonly type: 'eth_subscription'; + readonly data: { + readonly subscription: string; + readonly result: unknown; + }; +} + +export interface ProviderRpcError extends Error { + code: number; + data?: unknown; +} + +export interface ProviderConnectInfo { + readonly chainId: string; +} +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type Web3APISpec = Record any> | unknown; +export type Web3APIMethod = string & keyof Exclude; +export type Web3APIParams< + API extends Web3APISpec, + Method extends Web3APIMethod, +> = API extends Exclude ? Parameters : unknown; + +export interface Web3APIRequest> { + method: Method | string; + params?: Web3APIParams | readonly unknown[] | object; +} + +export interface Web3APIPayload> + extends Web3APIRequest { + readonly jsonrpc?: JsonRpcIdentifier; + readonly id?: JsonRpcId; + readonly requestOptions?: unknown; +} + +export type Web3APIReturnType< + API extends Web3APISpec, + Method extends Web3APIMethod, + // eslint-disable-next-line @typescript-eslint/no-explicit-any +> = API extends Record any> ? ReturnType : any; diff --git a/packages/web3-types/src/web3_base_provider.ts b/packages/web3-types/src/web3_base_provider.ts new file mode 100644 index 00000000000..aac2e722bfc --- /dev/null +++ b/packages/web3-types/src/web3_base_provider.ts @@ -0,0 +1,333 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Socket } from 'net'; + +import { Web3Error } from './error_types.js'; +import { EthExecutionAPI } from './apis/eth_execution_api.js'; +// eslint-disable-next-line require-extensions/require-extensions +import { + JsonRpcNotification, + JsonRpcPayload, + JsonRpcResponse, + JsonRpcResponseWithError, + JsonRpcResponseWithResult, + JsonRpcResult, + JsonRpcSubscriptionResult, +} from './json_rpc_types'; +// eslint-disable-next-line require-extensions/require-extensions +import { + Web3APISpec, + Web3APIMethod, + Web3APIReturnType, + Web3APIPayload, + ProviderConnectInfo, + ProviderRpcError, + ProviderMessage, +} from './web3_api_types'; +// eslint-disable-next-line require-extensions/require-extensions +import { Web3EthExecutionAPI } from './apis/web3_eth_execution_api'; +// eslint-disable-next-line require-extensions/require-extensions +import { Web3DeferredPromiseInterface } from './web3_deferred_promise_type'; + +const symbol = Symbol.for('web3/base-provider'); + +export interface SocketRequestItem< + API extends Web3APISpec, + Method extends Web3APIMethod, + ResponseType, +> { + payload: Web3APIPayload; + deferredPromise: Web3DeferredPromiseInterface; +} + +// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md#connectivity +export type Web3ProviderStatus = 'connecting' | 'connected' | 'disconnected'; + +export type Web3ProviderEventCallback = ( + error: Error | ProviderRpcError | undefined, + result?: JsonRpcSubscriptionResult | JsonRpcNotification, +) => void; + +export type Web3ProviderMessageEventCallback = ( + result?: JsonRpcSubscriptionResult | JsonRpcNotification, +) => void; + +export type Web3Eip1193ProviderEventCallback = (data: T) => void; + +export type Web3ProviderRequestCallback = ( + // Used "null" value to match the legacy version + // eslint-disable-next-line @typescript-eslint/ban-types + err?: Error | Web3Error | null | JsonRpcResponseWithError, + response?: JsonRpcResponseWithResult, +) => void; + +export interface LegacySendProvider { + send( + payload: JsonRpcPayload

, + // Used "null" value to match the legacy version + // eslint-disable-next-line @typescript-eslint/ban-types + callback: (err: Error | null, response?: JsonRpcResponse) => void, + ): void; +} + +export interface LegacySendAsyncProvider { + sendAsync( + payload: JsonRpcPayload

, + ): Promise>; +} + +export interface LegacyRequestProvider { + request( + payload: JsonRpcPayload

, + // eslint-disable-next-line @typescript-eslint/ban-types + callback: (err: Error | null, response: JsonRpcResponse) => void, + ): void; +} + +export interface SimpleProvider { + request, ResponseType = Web3APIReturnType>( + args: Web3APIPayload, + ): Promise | unknown>; +} + +export interface ProviderInfo { + chainId: string; +} + +export type ProviderChainId = string; + +export type ProviderAccounts = string[]; + +export type Eip1193EventName = + | 'connect' + | 'disconnect' + | 'message' + | 'chainChanged' + | 'accountsChanged'; + +export interface EIP1193Provider extends SimpleProvider { + on(event: 'connect', listener: (info: ProviderInfo) => void): void; + on(event: 'disconnect', listener: (error: ProviderRpcError) => void): void; + on(event: 'message', listener: (message: ProviderMessage) => void): void; + on(event: 'chainChanged', listener: (chainId: ProviderChainId) => void): void; + on(event: 'accountsChanged', listener: (accounts: ProviderAccounts) => void): void; + + removeListener(event: 'connect', listener: (info: ProviderInfo) => void): void; + removeListener(event: 'disconnect', listener: (error: ProviderRpcError) => void): void; + removeListener(event: 'message', listener: (message: ProviderMessage) => void): void; + removeListener(event: 'chainChanged', listener: (chainId: ProviderChainId) => void): void; + removeListener(event: 'accountsChanged', listener: (accounts: ProviderAccounts) => void): void; +} + +export type Eip1193Compatible = Omit< + // eslint-disable-next-line no-use-before-define + Omit, + 'asEIP1193Provider' +> & { + request< + Method extends Web3APIMethod, + ResultType = Web3APIReturnType | unknown, + >( + request: Web3APIPayload, + ): Promise; +}; + +// Provider interface compatible with EIP-1193 +// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md +export abstract class Web3BaseProvider + implements LegacySendProvider, LegacySendAsyncProvider, EIP1193Provider +{ + public static isWeb3Provider(provider: unknown) { + return ( + provider instanceof Web3BaseProvider || + Boolean(provider && (provider as { [symbol]: boolean })[symbol]) + ); + } + + // To match an object "instanceof" does not work if + // matcher class and object is using different package versions + // to overcome this bottleneck used this approach. + // The symbol value for one string will always remain same regardless of package versions + // eslint-disable-next-line class-methods-use-this + public get [symbol]() { + return true; + } + + public abstract getStatus(): Web3ProviderStatus; + public abstract supportsSubscriptions(): boolean; + + /** + * @deprecated Please use `.request` instead. + * @param payload - Request Payload + * @param callback - Callback + */ + public send( + payload: JsonRpcPayload

, + // eslint-disable-next-line @typescript-eslint/ban-types + callback: (err: Error | null, response?: JsonRpcResponse) => void, + ) { + this.request, ResultType>( + payload as Web3APIPayload>, + ) + .then(response => { + // eslint-disable-next-line no-null/no-null + callback(null, response); + }) + .catch((err: Error | Web3Error) => { + callback(err); + }); + } + + /** + * @deprecated Please use `.request` instead. + * @param payload - Request Payload + */ + public async sendAsync(payload: JsonRpcPayload

) { + return this.request(payload as Web3APIPayload>) as Promise< + JsonRpcResponse + >; + } + + /** + * Modify the return type of the request method to be fully compatible with EIP-1193 + * + * [deprecated] In the future major releases (\>= v5) all providers are supposed to be fully compatible with EIP-1193. + * So this method will not be needed and would not be available in the future. + * + * @returns A new instance of the provider with the request method fully compatible with EIP-1193 + * + * @example + * ```ts + * const provider = new Web3HttpProvider('http://localhost:8545'); + * const fullyCompatibleProvider = provider.asEIP1193Provider(); + * const result = await fullyCompatibleProvider.request({ method: 'eth_getBalance' }); + * console.log(result); // '0x0234c8a3397aab58' or something like that + * ``` + */ + public asEIP1193Provider(): Eip1193Compatible { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const newObj = Object.create(this) as Eip1193Compatible; + // eslint-disable-next-line @typescript-eslint/unbound-method + const originalRequest = newObj.request; + newObj.request = async function request( + args: Web3APIPayload>, + ): Promise { + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + const response = (await originalRequest(args)) as JsonRpcResponseWithResult; + return response.result; + } as typeof newObj.request; + // @ts-expect-error the property should not be available in the new object because of using Object.create(this). + // But it is available if we do not delete it. + newObj.asEIP1193Provider = undefined; // to prevent the user for calling this method again + return newObj; + } + + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md#request + public abstract request< + Method extends Web3APIMethod, + ResultType = Web3APIReturnType | unknown, + >(args: Web3APIPayload): Promise>; + + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md#events + + public abstract on( + type: 'disconnect', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public abstract on( + type: 'message' | string, + listener: + | Web3Eip1193ProviderEventCallback + | Web3ProviderMessageEventCallback, + ): void; + // for old providers + public abstract on( + type: 'data' | string, + listener: + | Web3Eip1193ProviderEventCallback + | Web3ProviderMessageEventCallback, + ): void; + public abstract on( + type: 'connect', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public abstract on( + type: 'chainChanged', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public abstract on( + type: 'accountsChanged', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public abstract removeListener( + type: 'disconnect', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public abstract removeListener( + type: 'message' | string, + listener: Web3Eip1193ProviderEventCallback | Web3ProviderEventCallback, + ): void; + public abstract removeListener( + type: 'connect', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public abstract removeListener( + type: 'chainChanged', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public abstract removeListener( + type: 'accountsChanged', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public abstract once( + type: 'disconnect', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public abstract once( + type: 'message' | string, + listener: Web3Eip1193ProviderEventCallback | Web3ProviderEventCallback, + ): void; + public abstract once( + type: 'connect', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public abstract once( + type: 'chainChanged', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public abstract once( + type: 'accountsChanged', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public abstract removeAllListeners?(type: string): void; + public abstract connect(): void; + public abstract disconnect(code?: number, data?: string): void; + public abstract reset(): void; +} + +export type SupportedProviders = + | EIP1193Provider + | Web3BaseProvider + | LegacyRequestProvider + | LegacySendProvider + | LegacySendAsyncProvider + | SimpleProvider; + +export type Web3BaseProviderConstructor = new ( + url: string, + net?: Socket, +) => Web3BaseProvider; diff --git a/packages/web3-types/src/web3_base_wallet.ts b/packages/web3-types/src/web3_base_wallet.ts new file mode 100644 index 00000000000..484e8072603 --- /dev/null +++ b/packages/web3-types/src/web3_base_wallet.ts @@ -0,0 +1,120 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Transaction } from './eth_types.js'; +import { HexString } from './primitives_types.js'; + +export type Cipher = 'aes-128-ctr' | 'aes-128-cbc' | 'aes-256-cbc'; + +export type CipherOptions = { + salt?: Uint8Array | string; + iv?: Uint8Array | string; + kdf?: 'scrypt' | 'pbkdf2'; + dklen?: number; + c?: number; // iterrations + n?: number; // cpu/memory cost + r?: number; // block size + p?: number; // parallelization cost +}; + +export type ScryptParams = { + dklen: number; + n: number; + p: number; + r: number; + salt: Uint8Array | string; +}; +export type PBKDF2SHA256Params = { + c: number; // iterations + dklen: number; + prf: 'hmac-sha256'; + salt: Uint8Array | string; +}; + +export type KeyStore = { + crypto: { + cipher: Cipher; + ciphertext: string; + cipherparams: { + iv: string; + }; + kdf: 'pbkdf2' | 'scrypt'; + kdfparams: ScryptParams | PBKDF2SHA256Params; + mac: HexString; + }; + id: string; + version: 3; + address: string; +}; + +export interface Web3BaseWalletAccount { + [key: string]: unknown; + readonly address: string; + readonly privateKey: string; + readonly signTransaction: (tx: Transaction) => Promise<{ + readonly messageHash: HexString; + readonly r: HexString; + readonly s: HexString; + readonly v: HexString; + readonly rawTransaction: HexString; + readonly transactionHash: HexString; + }>; + readonly sign: (data: Record | string) => { + readonly messageHash: HexString; + readonly r: HexString; + readonly s: HexString; + readonly v: HexString; + readonly message?: string; + readonly signature: HexString; + }; + readonly encrypt: (password: string, options?: Record) => Promise; +} + +export interface Web3AccountProvider { + privateKeyToAccount: (privateKey: string) => T; + create: () => T; + decrypt: ( + keystore: KeyStore | string, + password: string, + options?: Record, + ) => Promise; +} + +export abstract class Web3BaseWallet extends Array { + protected readonly _accountProvider: Web3AccountProvider; + + public constructor(accountProvider: Web3AccountProvider) { + super(); + this._accountProvider = accountProvider; + } + + public abstract create(numberOfAccounts: number): this; + public abstract add(account: T | string): this; + public abstract get(addressOrIndex: string | number): T | undefined; + public abstract remove(addressOrIndex: string | number): boolean; + public abstract clear(): this; + public abstract encrypt( + password: string, + options?: Record, + ): Promise; + public abstract decrypt( + encryptedWallet: KeyStore[], + password: string, + options?: Record, + ): Promise; + public abstract save(password: string, keyName?: string): Promise; + public abstract load(password: string, keyName?: string): Promise; +} diff --git a/packages/web3-types/src/web3_deferred_promise_type.ts b/packages/web3-types/src/web3_deferred_promise_type.ts new file mode 100644 index 00000000000..eadd39db2b2 --- /dev/null +++ b/packages/web3-types/src/web3_deferred_promise_type.ts @@ -0,0 +1,23 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export interface Web3DeferredPromiseInterface extends Promise { + state: 'pending' | 'fulfilled' | 'rejected'; + resolve(value: T | PromiseLike): void; + reject(reason?: unknown): void; + startTimer(): void; +} diff --git a/packages/web3-types/test/.eslintrc.js b/packages/web3-types/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-types/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-types/test/config/jest.config.js b/packages/web3-types/test/config/jest.config.js new file mode 100644 index 00000000000..eaa5e9049da --- /dev/null +++ b/packages/web3-types/test/config/jest.config.js @@ -0,0 +1,40 @@ +module.exports = { + globals: { + 'ts-jest': { + tsconfig: './test/tsconfig.json', + }, + }, + rootDir: '../..', + testMatch: ['/test/**/?(*.)+(spec|test).+(ts|tsx|js)'], + setupFilesAfterEnv: ['/test/config/setup.js'], + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + verbose: false, + collectCoverage: false, + coverageReporters: ['json'], + coverageDirectory: '.coverage', + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, +}; diff --git a/packages/web3-types/test/config/setup.js b/packages/web3-types/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-types/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-types/test/integration/jest.config.js b/packages/web3-types/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-types/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-types/test/integration/setup.js b/packages/web3-types/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-types/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-types/test/tsconfig.json b/packages/web3-types/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-types/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-types/test/unit/jest.config.js b/packages/web3-types/test/unit/jest.config.js new file mode 100644 index 00000000000..81c51a857f5 --- /dev/null +++ b/packages/web3-types/test/unit/jest.config.js @@ -0,0 +1,11 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + coverageDirectory: '.coverage/unit', + collectCoverageFrom: ['src/**'], +}; diff --git a/packages/web3-types/test/unit/web3_base_provider.test.ts b/packages/web3-types/test/unit/web3_base_provider.test.ts new file mode 100644 index 00000000000..7e95bf9f8c3 --- /dev/null +++ b/packages/web3-types/test/unit/web3_base_provider.test.ts @@ -0,0 +1,65 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + EthExecutionAPI, + JsonRpcResponseWithResult, + Web3APIMethod, + Web3APIPayload, + Web3APIReturnType, + Web3BaseProvider, +} from '../../src/index.js'; + +// @ts-expect-error mock class for testing. The abstract methods are not implemented. +class Web3ChildProvider extends Web3BaseProvider { + // eslint-disable-next-line class-methods-use-this + public async request< + Method extends Web3APIMethod, + ResultType = Web3APIReturnType | unknown, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + >(_: Web3APIPayload): Promise> { + return new Promise(resolve => + // eslint-disable-next-line no-promise-executor-return + resolve({ + jsonrpc: '2.0', + id: 1, + result: 'result' as unknown as ResultType, + }), + ); + } +} + +describe('Web3BaseProvider', () => { + it('asEIP1193Provider will fix the returned result of the request method', async () => { + const childProvider = new Web3ChildProvider(); + const returnValue = await childProvider.request({ method: 'eth_getBalance' }); + expect(returnValue.result).toBe('result'); + + const eip1193CompatibleClass = childProvider.asEIP1193Provider(); + const returnValue2 = await eip1193CompatibleClass.request({ + method: 'eth_getBalance', + }); + expect(returnValue2).toBe('result'); + }); + + it('asEIP1193Provider would not be available inside the newly generated class', () => { + const childProvider = new Web3ChildProvider(); + + const eip1193CompatibleClass = childProvider.asEIP1193Provider(); + expect((eip1193CompatibleClass as any).asEIP1193Provider).toBeUndefined(); + }); +}); diff --git a/packages/web3-types/tsconfig.cjs.json b/packages/web3-types/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-types/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-types/tsconfig.esm.json b/packages/web3-types/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-types/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-types/tsconfig.types.json b/packages/web3-types/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-types/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-types/tsdoc.json b/packages/web3-types/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-types/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-utils/.eslintignore b/packages/web3-utils/.eslintignore new file mode 100644 index 00000000000..fea9beae6d6 --- /dev/null +++ b/packages/web3-utils/.eslintignore @@ -0,0 +1,6 @@ +dist +lib +jest.config.js +.eslintrc.js +cypress +cypress.config.js diff --git a/packages/web3-utils/.eslintrc.js b/packages/web3-utils/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-utils/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-utils/.gitignore b/packages/web3-utils/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-utils/.npmignore b/packages/web3-utils/.npmignore new file mode 100644 index 00000000000..0b1a9d71c23 --- /dev/null +++ b/packages/web3-utils/.npmignore @@ -0,0 +1,26 @@ +.babelrc +.eslintignore +.eslintrc.json +.eslintrc.js +.gitignore +.lintstagedrc.json +.nycrc +.prettierrc.json +.prettierignore +cypress.json +index.html +Jenkinsfile* +*.log + +.nyc_output/ +coverage/ +benchmark/ +.coverage/ +cypress/ +fixtures/ +tmp/ +logs/ +test/ +scripts/ +browsertest/ +examples/ diff --git a/packages/web3-utils/.prettierignore b/packages/web3-utils/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-utils/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-utils/.prettierrc.json b/packages/web3-utils/.prettierrc.json new file mode 100644 index 00000000000..7b23ef55098 --- /dev/null +++ b/packages/web3-utils/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": true, + "arrowParens": "avoid" +} diff --git a/packages/web3-utils/CHANGELOG.md b/packages/web3-utils/CHANGELOG.md new file mode 100644 index 00000000000..d01573fae6c --- /dev/null +++ b/packages/web3-utils/CHANGELOG.md @@ -0,0 +1,172 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [4.0.1-alpha.1] + +### Added + +- Added and exported three reusable utility functions: `pollTillDefined`, `rejectIfTimeout` and `rejectIfConditionAtInterval` which are useful when dealing with promises that involves polling, rejecting after timeout or rejecting if a condition was met when calling repeatably at every time intervals. + +## [4.0.1-alpha.2] + +### Added + +- Export a new function `uuidV4` that generates a random v4 Uuid (#5373). +- Enable passing a starting number, to increment based on it, for the Json Rpc Request `id` (#5652). +- Export a new function `isPromise` that checks if an object is a promise (#5652). + +### Fixed + +- Use Uuid for the response id, to fix the issue "Responses get mixed up due to conflicting payload IDs" (#5373). + +## [4.0.1-alpha.3] + +### Changed + +- Updated dependencies (#5725) + +## [4.0.1-alpha.4] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) +- Add SocketProvider class and Eip1193Provider abstract class (#5683) + +## [4.0.1-alpha.5] + +### Changed + +- web3.js dependencies (#5757) + +## [4.0.1-rc.0] + +### Removed + +- Moved `TypedArray` to `web3-types` (was also duplicated at `web3-validator`) (#5771) +- Removed support of `genesis` tag in `compareBlockNumbers` function (#5823) + +### Added + +- Added support of `safe` and `finalized` block tags (#5823) + +### Changed + +- `compareBlockNumbers` function now only supports comparison of both blocktags params ( except `earliest` vs number) or both block number params (#5842) +- `SocketProvider` abstract class now resolves JSON RPC response errors instead of rejecting them (#5844) +- Exposes the getter of `SocketConnection` in `SocketProvider` (#5891) + +## [4.0.1-rc.1] + +### Added + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +### Changed + +- The types `FMT_NUMBER`, `NumberTypes`, `FMT_BYTES`, `ByteTypes`, `DataFormat`, `DEFAULT_RETURN_FORMAT`, `ETH_DATA_FORMAT` and `FormatType` moved to `web3-types`. (#5993) + +### Removed + +- Removed dependencies @ethereumjs/tx, @ethereumjs/common (#5963) + +## [4.0.1-rc.2] + +### Added + +- Optional `hexstrict` parameter added to numberToHex (#6004) + +### Changed + +- Replaced Buffer for Uint8Array (#6004) +- The methods `hexToBytes`, `randomBytes` does not return type `Buffer` but type `Uint8Array` (#6004) +- The methods `sha3` and `keccak256Wrapper` does not accept type `Buffer` but type `Uint8Array` (#6004) +- The method `bytesToBuffer` has been removed for the usage of `bytesToUint8Array` (#6004) + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Changed + +- Dependencies updated + +## [4.0.3] + +### Fixed + +- BigInts pass validation within the method `numberToHex` (#6206) + +## [4.0.4] + +### Changed + +- Dependencies updated + +## [4.0.5] + +### Changed + +- Dependencies updated + +## [4.0.6] + +### Fixed + +- `soliditySha3()` with BigInt support + +## [4.0.7] + +### Added + +- As a replacment of the node EventEmitter, a custom `EventEmitter` has been implemented and exported. (#6398) + +### Fixed + +- Fix issue with default config with babel (and React): "TypeError: Cannot convert a BigInt value to a number #6187" (#6506) +- Fixed bug in chunks processing logic (#6496) + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-utils/README.md b/packages/web3-utils/README.md index d541723f10e..78cce56e322 100644 --- a/packages/web3-utils/README.md +++ b/packages/web3-utils/README.md @@ -1,21 +1,34 @@ +

+ web3.js +

+ # web3-utils -[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] This is a sub-package of [web3.js][repo]. -This contains useful utility functions for Dapp developers. - -Please read the [documentation][docs] for more. +`web3-utils` This contains useful utility functions for Dapp developers. ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3-utils) or using [Yarn](https://yarnpkg.com/package/web3-utils) + +### Using NPM ```bash npm install web3-utils ``` +### Using Yarn + +```bash +yarn add web3-utils +``` + ## Usage ```js @@ -29,15 +42,31 @@ console.log(Web3Utils); } ``` -## Types +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts -All the TypeScript typings are placed in the `types` folder. +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[npm-image]: https://img.shields.io/npm/v/web3-utils.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-utils +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-utils%2Fpackage.json [npm-url]: https://npmjs.org/package/web3-utils -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3-utils -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3-utils -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3-utils -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3-utils +[downloads-image]: https://img.shields.io/npm/dm/web3-utils?label=npm%20downloads diff --git a/packages/web3-utils/assets/logo/web3js.ai b/packages/web3-utils/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-utils/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV U57m2t053EqQp/NIwUfecjKQHM0yhCUjQFpZL5v8qxNxfV7OvQgTxtSnjQnKDrMI/jj83Kj2dqDy xz+RaTzl5TduK6vaV95kX8SRiNbhP8cfmk9m6gf5OXyKZ215aXSc7aeOdP5o2Vx96k5fGcZcjbiz xyhtIEe9VyTB2KuxV2KuxV2KuxV2KuxV2KuxV8lZJDsVejfkt5biv9Zn1a4TlFpoX0ARsZ3rRv8A YKCfmRgKh7fgS7FUDrOuaVotk17qVwtvbqaAtUlmP7KqKsx+WKqunanp+pWqXdhcJc27/ZkjNR8j 4H2OKonFXYq7FXYq7FXYq7FXEgCp2AxVhPmT81tA0pmgsv8AcldrsREwEKn3k3r/ALEHNVqe1seP aPqP2fN3ui7BzZd5+iPnz+X63nWr/mf5u1FmC3X1GE9IrUemR/s93/4bNLm7UzT68I8vxb0un7D0 2P8Ah4j/AEt/s5MXnuLi4kMlxK80h6vIxZj9JzAlIk2TbtYQjEUBQU8iydiq+KaaGQSQu0ci/ZdC VI+RGSEiDYRKIkKIsMq0T8z/ADXpjKslx9fgHWK6q5p7Sfb+8nM/B2pmhzPEPP8AW6jU9h6fLyHA f6P6uT07yv8AmVoGuMlu7fUb9qAW8xHFj4RvsG+Wx9s32l7Tx5dvpl3F5bXdi5sHqHqh3j9IZZmx dO7FXYq7FXYq7FXYq7FXYq+Sskh2Kvb/AMjEUeVrx6fE186k+ywxEf8AEsBUPRsCVO5uIba3luJ2 CQwo0krnoFUVY/QBir5s85ebL3zLrEl3MxW1QlbO2rtHH/zU3Vj/AApkkILQ/MOs6HdC50y5e3fb mo3RwOzofhYYq9g8pfnFpOo8LXWlXTrw7Cev+jufmd4/9lt74KW3oaOrqHQhkYAqwNQQehBwJbxV 2KuxV2Ksf8zeedB8voUupfVvKVWzio0m/Tl2UfPMPVa7Hh5m5dzsdD2Xm1H0io955fteQeaPzD17 Xy8LP9U089LSEkAj/ixur/q9s5vVdo5M23KPd+t7PQ9j4dPvXFPvP6O5i+a92rsVdiqZ2HljzFfo JLPTbiaNvsyLG3A/7Ijj+OZGPS5Z/TEn4OLl12HGalOIPvdqHlrzBpyGS9064giHWVo24D/ZAcfx wZNNkhvKJC4dbhyGoTiT70syhynYq7FXonkT8z7mxkj07W5TNYGixXbVMkPhyPVk/EZutB2oYHhy G49/c832r2HHIDPEKn3dD+17EjpIiyRsHRwGR1NQQdwQRnSg28WQQaLeFDsVdirsVdirsVdir5Ky SHYq9x/I3/lErv8A5j5P+TMOAqHomBLE/wA1LuS28i6kYzRpRHFX2eVQ33rUYQr52wodirI/I/ky 880ap9XRjDZQUe8uaV4qTsq/5TdsVfQ+k6TYaTp8On2MfpWsAoi1JO+5JJ6knIpReKuxVA6xruk6 Pam51K5S3i/ZDbsx8EUfEx+WU5s8MQuRpyNNpcmaXDAWXk/mn83NTvudtoqtYWpqDcGnrsPYjaP6 N/fOe1Xa857Y/SPt/Y9doPZ7Hj9WX1y7un7fxswB3d3LuxZ2NWYmpJPck5pybeiAAFBbgS7FU68u +UNc8wTcbCA+ippJdSfDEvzbufYVOZWm0eTMfSNu/o4Ws7Rxaces793V655W/LHQtFCT3KjUL8UP qygemh/yI9x9JqflnR6XsvHi3Pqk8br+3M2faPoh5c/iWY5s3SuIBFDuDiryb82vKGk2FtFrNii2 0kswhuIF2Ryylg6r2Pw7065zva+jhADJHbd7D2f7RyZJHFP1ACwXmOaF6l2KuxVm/lb81NT0TT4t PmtUvbaEkRFnKSKpNePKjCg7bZtdL2rPFERI4gHRa7sHHnmZiXDI/JnOkfm75XvWWO69XT5TtWVe Udf9dK/iBm2w9sYpbG4uh1Hs9qIbxqY8ufyLMrW7tbuBZ7WZJ4X3WWNgyn5EbZs4zEhYNh0k8coG pCj5quSYOxV2KuxV2KvkrJIdir3H8jf+USu/+Y+T/kzDgKh6JgSwz83v+UFvf+MkH/J1cIUvn3Ch 2Kvoj8rdGi0zydZMFpNfD61M3c+p9j7k44ClluBXYq8288fm5BplxJpuiqtxdxkrPdNvHGw2KqP2 2HfsPfIZYzMTwECXm24JYxMeICY9aeU3+q32qXLXd7cPczv1kc1NPADsPYZxusxZoz/e3fe+i9nZ tPPHWGqHTr8f1ofMRz3YqitN0vUdTultbC3e5nboiCtB4k9APc5ZixSmaiLLVmzwxR4pnhD1Pyt+ T9rb8LrX3FxKKEWUZIiH+u2xb5Db550Gk7HA3ybnueT1/tFKXpwjhH848/h3fjk9Hgggt4UggjWK GMcY40AVVA7ADYZu4xAFDYPMzmZGybJX4WLsVSDzN530Hy+hW7m9S7IqlnFRpD4V7KPdvormHqtd jw/Ud+52Oi7Lzag+kVHvPL9rxfzf5z1LzLdrJcAQ2kVfq9opJVa/tE/tMfHOX1mtlnlZ2A5B7fs7 s2GljQ3keZ/HRj+YbsXYq7FXYq7FUfpGvavo9wJ9Ount3rVgp+BvZkPwt9Iy7DqJ4zcTTj6jSY8w qcQXqvlT827C+KWmtqtldHZbla+gx/yq7x/Tt7jOh0na8Z7ZPSe/p+x5LX+z88fqxeqPd1/a9DBD AEGoO4I6UzcvNuxV2KuxV8lZJDsVe4/kb/yiV3/zHyf8mYcBUPRMCWGfm9/ygt7/AMZIP+Tq4Qpf PuFDsVfT/lD/AJRLRP8AmAtf+TK5FKbYqw780/M82heWmW1bhe37fV4XGxRaVkcfJdh7nCFfPeFD asymoNDkJ44zFSFhniyyxy4omiERBK0jrGFJkYhVCipJOwAAzQ6vsXri+X6j+t6rQe0f8Ocf5w/S P1fJ6R5W/KLUb3hc62zWNsdxbCnrsPfqE+nf2yjS9jylvk9I7urk672hhD04vVLv6fteraRomlaP ai1063S3iFOXEfExHd2O7H550OHBDGKiKeS1GqyZpcUzZR2WuO7FUDq+t6Vo9qbrUblLeL9nkfiY jsij4mPyyrNnhjFyNN+n0uTNLhgLLynzT+buo3vO20RTZWx2Ny1PXYe1Nk+jf3zntV2xKW2P0jv6 /seu0Hs9CHqy+qXd0/a8+kkkkdpJGLu5LM7GpJPUknNMTe5ejAAFBbgS7FU20Lyrr2uOV020aVFN HmNEjX5u1BX265k4NJky/SHE1Wvw4B65V5dfky+D8lNcaMGe/to3/lUO4+8hc2UexMlbyDpZe02I HaMj8kr1r8q/NOmxNPHGl/Cu7G2JZwPeNgrH/Y1zHz9lZoCx6h5OXpu3tPlNEmB8/wBf62HkEEgi hGxBzWu6awK7FWe/l3+YVxpNxFpepyGTSpCEjkY1MBPQg/yeI7dRm37O7ROMiE/o+79jz/bHY4zA 5MY/eD/Zfte1Agio3BzqXhnYq7FXyVkkOxV7j+Rv/KJXf/MfJ/yZhwFQ9EwJYZ+b3/KC3v8Axkg/ 5OrhCl8+4UOxV9P+UP8AlEtE/wCYC1/5MrkUptiryD8+nb6xoyV+EJcED3Jjr+rCEF5ThV2Kvbvy o8h2+n2EOu38YfUbpedqrD+5iYfCQP53G9ew28cBV6PgS7FVk88FvC888ixQxjlJI5CqoHck7DBK QAs7BlCBkaAsl5x5p/OC1t+droCC4lFQb2QERD/UXYt8zt880mr7YA2x7nvem0Hs7KXqzHhH80c/ j3fjk8s1LVNR1O6a6v7h7m4bq7mtB4AdFHsM5/LllkNyNl6zDghijwwHCELlba7FUVp2mahqV0tr YW73Nw3SOMVNPE9gPc5ZjxSmaiLLVmzwxR4pnhD1Hyt+T1vDwutfcTSbEWURogP+W43b5Db55v8A S9jgb5N/J5TX+0Uj6cIofzjz+AekW9vBbQpBbxrDDGKJFGAqqPAAbDN5GIiKGweYnMyNyNlUwsXY q8L/ADZXS182v9RCiX0kN8E6evU1/wBlw41/rXOT7WEPG9Pdv73vuwDk/LDj5X6fd/bbDM1bu3Yq 7FX0R5CuprnyfpcszFpPR4Fj1IjYotfoXO00EjLBEnufNu1oCOpmByv790/zMde7FXyVkkOxV7j+ Rv8AyiV3/wAx8n/JmHAVD0TAlhn5vf8AKC3v/GSD/k6uEKXz7hQ7FX0/5Q/5RLRP+YC1/wCTK5FK bYq8f/Pn/evR/wDjHP8A8STCEF5VhVHaDZpfa5p1lJ/d3V1DC/ykkCn9eKvqcAKAqigGwA6AZFLs VdirHPOfk2HzLaJGbuW2mhqYuJLRE/5cdaH5jfMLW6IZ41ZBHy+Ts+ze0jpZXwiQPz+BeK+YvKGu 6BLxv4D6JNI7qP4om+Tdj7GhzltTo8mE+obd/R7jR9o4tQPQd+7qkuYrnLkR3cIilnY0VQKkk9gB hAtBIAss/wDK35R6nfcLnWmawtTuIBT6ww9wdk+nf2zcaXsic98npH2/sed1/tDjx+nF65d/8P7f xu9X0fQtJ0a1FtptstvF1YjdmPi7H4mPzzocOCGIVEU8jqdVkzS4pmyj8ucd2KoLVta0vSLU3Wo3 KW8I6FjuxHZVHxMfYZVmzQxi5Gg36fTZM0uGAsvKvNP5vahec7bQ0NlbHY3TUM7D/J6hPxPuM5/V dsSltj9I7+v7HrtB7PQh6svql3dP2vO2ZnYsxLMxqzHcknqSc0pL0gFNYFdiqe+VfKGq+Yr1YrZC lorD6zeMPgRe/wDrNTov8My9Jo55pUOXUuBr+0cemhcj6ug7/wBnm+g7Cxt7CygsrZeMFuixxjvx UUFffOyxwEIiI5B85y5ZZJmUuZNq+Ta3Yq+UL62a1vbi2b7UEjxmvijFfbwySFHFXuP5G/8AKJXf /MfJ/wAmYcBUPRMCWGfm9/ygt7/xkg/5OrhCl8+4UOxV9P8AlD/lEtE/5gLX/kyuRSm2KvH/AM+f 969H/wCMc/8AxJMIQXlWFU28of8AKW6J/wAx9r/yeXFX0/kUuxV2KuxVZPBBcQvBPGssMg4yRuAy sD2IOxwSiCKO4ZQmYmwaIee+YPyc027uBPpFx9QDt+9gcGSMA9Sm4Yf6tafLNNqOxoyNwPC9HpPa OcI1kHH58j8WSeWfI2g+X0DW0XrXlKNeS0aT349lHyzO0ugx4eQuXe6zW9qZtQfUaj3Dl+1kOZjr XYqsmmhgieaZ1iiQcnkchVUDuSdhglIAWeTKMTI0BZedeafzfs7bna6Cgup+hvJAREv+ouxf8B88 0mq7YjHbHue/o9LoPZ2UvVm9I7uv7Hlep6tqWqXTXWoXD3E7ftOeg8FHRR7DNBlzSyG5Gy9Zg08M UeGAoITKm52KonT9Nv8AUbpbWxge4uH+zHGKn5nwHucsx45TNRFlqzZoY48UzQeoeVvyegj4XXmB /Vk6ixiNEH/GRxu3yX7zm+0vYwG+T5PK6/2jJ9OEV/SP6B+t6VbW1vbQJBbRJDBGKJFGoVVHgANs 3kYiIoCg8vOcpG5GyVTJMXYq7FXzl+ZumHT/ADrqSUolw4uUPj6w5sf+DLDJBDF8Ve0fkTeI+ial ZV+OG5ExHeksYUf8msBUPTcCWGfm9/ygt7/xkg/5OrhCl8+4UOxV9P8AlD/lEtE/5gLX/kyuRSm2 KvH/AM+f969H/wCMc/8AxJMIQXlWFU28of8AKW6J/wAx9r/yeXFX0/kUuxV2KuxV2KuxV2KuxViP mr8ytD0IvbRH69qK7G3jPwof+LH3A+Qqc12r7Sx4dvql3frdx2f2Ll1FSPph3/qDyHzH5x13zBLW +nItwax2kfwxL/se592qc5vU6zJmPqO3d0ez0fZ2HTj0Dfv6pJmI5zsVbVWdgqgszGiqNySegAwg KTTP/K35SapqHC51gmwtDuIf93uPkdk/2W/tm40vZE57z9I+39jzuv8AaDHj9OL1y7+n7fxu9X0b QNI0W2+r6bbLAm3Nhu7kd3Y7nOhw6eGIVEU8jqdXkzy4pm0wy5xnYq7FXYq7FXln55aC0tpZa5Et Tbn6tckfyOeUZ+Qao+nCEF47hVlH5dea18ueYUnnJ+o3K+hd0/ZUkEPT/IP4VxKvouGaKaJJoXWS KRQ0cikFWUioII6g5FLDfzfZR5GuwTQtLCFHifUB/UMIUvn7Ch2Kvp/yh/yiWif8wFr/AMmVyKU2 xV4/+fP+9ej/APGOf/iSYQgvKsKpt5Q/5S3RP+Y+1/5PLir6fyKXYqg4tXsJL2WxEoW6iNDG2xNR X4fHriqMxV2KuxV2KsR84eY5InbTbNuL0/0iVeor+wD+vChgV9ptnepSdKsNlkGzD5HMbU6PHmHq G/f1c3R9oZdObgdu7oxnUfLt5a1eL9/CP2lHxAe6/wBM5vV9l5MW49Ufx0ey0HbuLP6Zeifny+BS nNW7tk3lf8v9e18rLHH9VsD1vJgQpH+QvV/1e+Z+l7PyZtxtHvdXru18On2J4p9w/T3PX/LHkTQf L6q9vF697T4ryUAv78OyD5fTXOk0ugx4eQuXe8Zru1c2o2kaj3Dl+1kWZrrXYq7FXYq7FXYq7FUJ q+mW2q6Zc6ddCsF1G0b+Ir0Ye6ncYq+Y9c0e80bVbnTbtaTWzlSezL1Vx7Mu4ySEDirKvKf5j+YP LiC3hZbqwrX6pNUha9fTYbr+r2xpVTzv+Y2o+aYYLV7dLOyhb1PRVi5aShAZmIXoCaCmNKxHFXYq +n/KH/KJaJ/zAWv/ACZXIpTbFXj/AOfP+9ej/wDGOf8A4kmEILyrCqbeUP8AlLdE/wCY+1/5PLir 6fyKXYq8z80kjzBdkbEMtD/sBhQjtH86XtrxivK3UA25E/vFHz/a+n78aVmmn6pY6hF6lrKHH7S9 GX5r1GBKKxVbI4SNnPRQWPyAriryOeZ555JpDV5WLsfdjU4ULMKtxxvI6xxqWdyFVRuST0AxVmGj /lvokM0d/qNulxfD4vTO8QPXdejt7nMOWhwynxmIt2EO09RHH4YmeH8cjzZgAFAAFANgB0pmU4Ds VdirsVdirsVdirsVdirsVYR+ZvkMeYbAXtkoGr2in0x09aMbmM+/8v3d8IV4FJG8btHIpSRCVdGF CCNiCD3woaxV2KuxV2Kvo78tNUj1DyXprqavbR/VZV6lTD8AB+acT9ORKWT4q8f/AD5/3r0f/jHP /wASTCEF5VhVNvKH/KW6J/zH2v8AyeXFX0/kUuxV5n5q/wCO/ef6y/8AEBhQlWFWT+QP+Olcf8Yf +NhgKhnWBKje/wC8c/8Axjf/AIicVeSZJDsVZX5D01ZJ5r+QV9H93DX+ZhVj9A/XgKhm2BLsVdir sVdirsVdirsVdirsVdirsVYJ5/8AyxtPMAa/0/ja6uBVido56dnp0bwb7/Y2rw/VNK1HSrx7PULd 7a5j+1G4pt4g9CD4jChC4q7FXYqzX8svPK+XNRe2vSf0TeEesQK+lINhIB4U2b+zEq98t7iC5gSe 3kWWCUBo5UIZWU9CCOuRS8c/PW8hk1jTbRSDLBA7yAHp6rAKD/wGEILzHCqbeUP+Ut0T/mPtf+Ty 4q+n8il2KsP8zeVL24u5b+zImMlC8HRhQAfD2PTChh7o8blHUo6mjKwoQfcHCrJvIH/HSuP+MP8A xsMBUM6wJUb3/eOf/jG//ETiryTJIdirP/IoA0Vqd5nr/wACuApDIsCuxVL9V17TdMAFy5MrCqwo KuR407fTiqSf8rAtOVPqknDx5LX7v7cNItMLLzhol0QrSG3c9BMOI/4IEr95wUlOlZWUMpBU7gjc EYq3irsVdirsVdirsVdiqX615f0fW7X6tqdqlzH+wWFHQnujijKfkcVebaz+RSM7SaPqPBT9mC6W tP8Anon/ADThtFJVB+RfmUvSe+skjp9pGlc1+RjT9eNrTz/ULC70+9msruMxXNu5SWM9iP4eGFVD FU00fzT5h0YMumX8tsjbtGpqhPjwaq196Yqgb2+vL66kuryZ57mU1klkJZienU4qo4qm/k8E+bdE p/y323/J5cVfT2RS7FXYql+q6Fp2ppS4jpKBRZl2cfT3+nFUs8veXLrSdTndnEtu8XGOQbGvIGhX CrI8CqN7/vHP/wAY3/4icVeSZJDsVegeRf8Ajit/xmf9S4ClkOBVG9uktLSa5f7MKFyPGg6fTiry m7upru5kuJm5SysWY/wHywoUsKuxVMdJ1/UdMYehJyhr8UD7ofl4fRgVm+j+adN1HjGW9C5O3oue p/yW7/rwJTnFXYq7FXYq7FXYq7FXYq7FWBfmd+Xo163Op6cgGsW60KCgE6D9k/5Y/ZP0eFCCrwmW KWGV4pUaOWMlXjcFWVgaEEHcEYULcVdirsVZR+WVg17530xQKrC7TufARKWH/DADEq+jcil2KuxV 2KuxV2KqN7/vHP8A8Y3/AOInFXkmSQ7FXoHkX/jit/xmf9S4ClkOBUk85SlNAnA/3YyL/wAMD/DE K85ySHYq7FXYq7FU/wBH84ahZcYrmt1bDajH41Hs3f5HBSs103WNP1KPnayhiPtRnZ1+a4Eo3FXY q7FXYq7FXYq7FXYqw3zv+Wul+ZA11CRZ6sBtcgfDJToJVHXw5dfn0w2rxHX/ACvrmgXPoanbNFUk RzD4on90cbH5dfHChKsVdir2n8mfKU9jaTa7eIUmvVEdojChEFQxf/ZkCnsPfAVD0zAl2KsM1TzH qWleYLmMH1rUlW9F+lCin4T1XChkGk+YdN1NQIX4T03gfZvo8fowJTPFXYqo3v8AvHP/AMY3/wCI nFXkmSQ7FXoHkX/jit/xmf8AUuApZDgVIvOiFtBlI/ZdCf8AgqfxxCvO8kh2Kpxp/lTVr61FzEES Nv7v1GILDpsAD+OBUBfabe2EvpXcLRN2J3B+RGxxVDYVdiq+GaaGRZYXaORTVXU0I+kYFZXo/nll 4w6mvIdBcIN/9ko6/RjS2zPAl2KuxV2KuxV2KuxV2KqVza2t1A0F1Ck8D7PFIodT81NRirDtS/J/ yXeyNJHDNZM25FtJRa+yyCRR9Aw2tL9H/KTybps6zmGW+kQ1T624dQf9RFRT/sgcbVmeBXYq7FWC efbYpqUNwB8M0VK/5SHf8CMIQWMqzKwZSQw3BGxBwqzXyd5gvru4axu3EoWMvHK326ggUJ77HAVZ ZgSo3v8AvHP/AMY3/wCInFXkmSQ7FXoHkX/jit/xmf8AUuApZDgVL/MFsbnRbyIbkxllHiU+Mf8A EcVeXZJDsVeraRw/RVnw+z6EdPlwGRSrXNrb3URhuI1ljbqrCoxViGseRpE5TaY3Nept3PxD/VY9 fpw2imKSxSwyNHKjRyKaMjAgg+4OKrcKuxV7DkUuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVIPOl gbnSDMgrJat6n+xOzf1+jEK89ySEZo2oHT9Sguuqo1JB4o2zfgcCvU4pY5Y1ljYPG4DIw6EHocCV O9/3jn/4xv8A8ROKvJMkh2KvQPIv/HFb/jM/6lwFLIcCuIBFD0xV5XrNg1hqc9sRRVasZ8Ubdfww oQWFWe+StWS40/6k7fv7avEHq0ZOx+itMBSyTArsVQWp6Np+pR8LqIFgKLKuzr8jirCdY8oahY8p YK3VsN+Sj41H+Uv8RhQkOFXsORS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWpESRGjcckcFWU9wd iMVeWazpkmm6hLbNUqDyiY/tIehwoQWFU80HzTdaYBBIvr2la+nWjLXrxP8ADAqc6v51sJdOlis1 kM8ylPjAUKGFCep3p4Y0rCsKuxV6B5F/44rf8Zn/AFLgKWQ4FdirGfO2jm5tVv4VrNbikoHUx9f+ FwhDBMKqtrdT2s6XFu5jljNVYYFZzo3nOyugsN7S2uOnM/3bH5/s/T9+NJZGCCKjcHocCuxV2KpL rHlXTtR5SKPq9yd/VQbE/wCUvf8AXiqdYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqk3mbQhq lnWMAXcNTCenId0PzxV5w6OjsjqVdSQykUII7HJIaxV2KuxV2KvQvI6FdDBPR5XYfLYfwyJSn+Ku xVxAIIIqDsQcVed+aPLz6bcGeBSbKU/Af5GP7J/hhQkWFXYqmukeZdS00hEb1bYdYHNR/sT1XArO NI8x6dqYCxv6dx3gfZv9j/NgSmmKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVj/mXy umog3NrRL0DcdBIB2Pv4HCrAZ4JoJWhmQxyoaMjChGKFmFXYq4AkgAVJ2AGKvVdHsvqWl21qdmjQ c/8AWPxN+JyKUZirsVdiqnc20FzA8E6CSKQUZT3xV575h8sXGmOZoqy2RO0ndPZ6frwoSTCrsVbR 2Rg6EqymqsDQgjuDirPvKvmX9IKLS6IF4g+Fv9+KO/8ArDvgSyLArsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVQOqaLp+pR8LmOrAfBKuzr8j/XFWIah5G1KFi1my3MfZahHH0Hb8cNopK/ 8O65y4/Upa9Ps7ff0xVkvlvyhLbTpe6hT1E+KKAGtG/mY9KjtTG1ZZgS7FXEgUqaV2GKuxV2KtMq spVgGUihB3BGKsW1jyRBNym05hDJ1MDfYP8Aqn9n9Xyw2imHXlld2cxhuYmikHZh19wehHyxVRwq vgnlgmSaJiksZDIw7EYFepaRqMeo6fFdJsXFJF/lcbMMCUZirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdiqQ+dWK6IzKSGEqEEdQa4hUh0fzrd23GK+BuYRt6n+7AP+Nvpw 0hmdhqVlfw+rayiRf2gOq+zA7jAlE4q7FULqWmWmo2zW9ynJT9lx9pT4qcVeZapps+nXslrNuU3V +zKejDChC4VZZ5CvytxPYsfhkHqxj/KXZvvH6sBUM1wJdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVSHzt/xwm/4yJ+vEK88ySFW1u7m1mE1vI0Uq9GU0+g+OBWX6P55jfj Dqa8G6C4QfCf9Ze30Y0tsrililjWSJw8bCqupBBHzGBK7FWJfmBaqYLW6A+JWMTHxBHIfqOEILC8 Kph5euDb61ZydAZAh+T/AAH/AIlgV6jgS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYqk/muzubvR3itozJIGVuA6kDrTFXm7KyMVYFWBoVOxBySGsVdiqN0zWtQ02TlbSEI TVom3RvmP6YFZppnnTTLlAt0fqs3cNuh+Tf1xpKUedNcsryOG0tJBKqMZJHX7NaUAB79TiEMVwqu icxypIOqMGH0GuKvX8il2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 Kpbq3l/TdTU+vHxm/ZnTZx8/H6cVYRrHlbUdNrJT17Yf7uQdB/lL2/VhQk+FXYq7FXYq7FXYq9hy KXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqx/WPJ1he8pba lrcHeqj4GPuvb5jDasK1LSNQ06ThdRFQfsyDdG+TYoQeFXYq7FUVpNq11qdtbqK85F5f6oNWP3DA r1fAl2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVZNDDPG 0UyLJG2zIwBB+g4qxXVvIsbsZdNkEZO5gkJK/wCxbcj6cNopjN1oWsWrUmtJAP5lHNf+CWoxVRi0 3UJXCR20rMegCN/TFWbeVfLL6fW7u6fW3HFYxuEU9d/E4pf/2Q== + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-utils/assets/logo/web3js.jpg b/packages/web3-utils/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-utils/assets/logo/web3js.jpg differ diff --git a/packages/web3-utils/assets/logo/web3js.svg b/packages/web3-utils/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-utils/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-utils/cypress b/packages/web3-utils/cypress new file mode 120000 index 00000000000..4a671a7beac --- /dev/null +++ b/packages/web3-utils/cypress @@ -0,0 +1 @@ +../../templates/cypress \ No newline at end of file diff --git a/packages/web3-utils/cypress.config.js b/packages/web3-utils/cypress.config.js new file mode 120000 index 00000000000..8cd9ba29af0 --- /dev/null +++ b/packages/web3-utils/cypress.config.js @@ -0,0 +1 @@ +../../templates/cypress.config.js \ No newline at end of file diff --git a/packages/web3-utils/package-lock.json b/packages/web3-utils/package-lock.json deleted file mode 100644 index 98fe803e4a7..00000000000 --- a/packages/web3-utils/package-lock.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "web3-utils", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", - "dev": true - } - } -} diff --git a/packages/web3-utils/package.json b/packages/web3-utils/package.json index c5e16531b80..a4d48ca5cf4 100644 --- a/packages/web3-utils/package.json +++ b/packages/web3-utils/package.json @@ -1,30 +1,71 @@ { - "name": "web3-utils", - "version": "1.3.0", - "description": "Collection of utility functions used in web3.js.", - "repository": "https://github.com/ethereum/web3.js/tree/1.x/packages/web3-utils", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "main": "lib/index.js", - "dependencies": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "devDependencies": { - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3-utils", + "sideEffects": false, + "version": "4.0.7", + "description": "Collection of utility functions used in web3.js.", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests", + "test:e2e:electron": "npx cypress run --headless --browser electron", + "test:e2e:chrome": "npx cypress run --headless --browser chrome", + "test:e2e:firefox": "npx cypress run --headless --browser firefox" + }, + "devDependencies": { + "@humeris/espresso-shot": "^4.0.0", + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-environment-jsdom": "^29.7.0", + "jest-extended": "^3.0.1", + "js-sha3": "^0.8.0", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + }, + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-validator": "^2.0.3" + } } diff --git a/packages/web3-utils/src/chunk_response_parser.ts b/packages/web3-utils/src/chunk_response_parser.ts new file mode 100644 index 00000000000..d9b37c7b6ee --- /dev/null +++ b/packages/web3-utils/src/chunk_response_parser.ts @@ -0,0 +1,97 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { JsonRpcResponse } from 'web3-types'; +import { InvalidResponseError } from 'web3-errors'; +import { EventEmitter } from 'events'; +import { Timeout } from './promise_helpers.js'; + +export class ChunkResponseParser { + private lastChunk: string | undefined; + private lastChunkTimeout: Timeout | undefined; + private _clearQueues: (() => void) | undefined; + private readonly eventEmitter: EventEmitter; + private readonly autoReconnect: boolean; + + public constructor(eventEmitter: EventEmitter, autoReconnect: boolean) { + this.eventEmitter = eventEmitter; + this.autoReconnect = autoReconnect; + } + private clearQueues(): void { + if (typeof this._clearQueues === 'function') { + this._clearQueues(); + } + } + + public onError(clearQueues?: () => void) { + this._clearQueues = clearQueues; + } + + public parseResponse(data: string): JsonRpcResponse[] { + const returnValues: JsonRpcResponse[] = []; + + // DE-CHUNKER + const dechunkedData = data + .replace(/\}[\n\r]?\{/g, '}|--|{') // }{ + .replace(/\}\][\n\r]?\[\{/g, '}]|--|[{') // }][{ + .replace(/\}[\n\r]?\[\{/g, '}|--|[{') // }[{ + .replace(/\}\][\n\r]?\{/g, '}]|--|{') // }]{ + .split('|--|'); + + dechunkedData.forEach(_chunkData => { + // prepend the last chunk + let chunkData = _chunkData; + if (this.lastChunk) { + chunkData = this.lastChunk + chunkData; + } + + let result; + + try { + result = JSON.parse(chunkData) as unknown as JsonRpcResponse; + } catch (e) { + this.lastChunk = chunkData; + + // start timeout to cancel all requests + if (this.lastChunkTimeout) { + clearTimeout(this.lastChunkTimeout); + } + + this.lastChunkTimeout = setTimeout(() => { + if (this.autoReconnect) return; + this.clearQueues(); + this.eventEmitter.emit( + 'error', + new InvalidResponseError({ + id: 1, + jsonrpc: '2.0', + error: { code: 2, message: 'Chunk timeout' }, + }), + ); + }, 1000 * 15); + return; + } + + // cancel timeout and set chunk to null + clearTimeout(this.lastChunkTimeout); + this.lastChunk = undefined; + + if (result) returnValues.push(result); + }); + + return returnValues; + } +} diff --git a/packages/web3-utils/src/converters.ts b/packages/web3-utils/src/converters.ts new file mode 100644 index 00000000000..4e5f8592f77 --- /dev/null +++ b/packages/web3-utils/src/converters.ts @@ -0,0 +1,641 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { keccak256 } from 'ethereum-cryptography/keccak.js'; +import { bytesToUtf8, utf8ToBytes as ecUtf8ToBytes } from 'ethereum-cryptography/utils.js'; +import { Address, Bytes, HexString, Numbers, ValueTypes } from 'web3-types'; +import { + isAddress, + isHex, + isHexStrict, + isInt, + isNullish, + utils, + utils as validatorUtils, + validator, +} from 'web3-validator'; + +import { + HexProcessingError, + InvalidAddressError, + InvalidBooleanError, + InvalidBytesError, + InvalidNumberError, + InvalidUnitError, +} from 'web3-errors'; + +// Ref: https://ethdocs.org/en/latest/ether.html +// Note: this could be simplified using ** operator, but babel does not handle it well (https://github.com/babel/babel/issues/13109) +/** @internal */ +export const ethUnitMap = { + noether: BigInt(0), + wei: BigInt(1), + kwei: BigInt(1000), + Kwei: BigInt(1000), + babbage: BigInt(1000), + femtoether: BigInt(1000), + mwei: BigInt(1000000), + Mwei: BigInt(1000000), + lovelace: BigInt(1000000), + picoether: BigInt(1000000), + gwei: BigInt(1000000000), + Gwei: BigInt(1000000000), + shannon: BigInt(1000000000), + nanoether: BigInt(1000000000), + nano: BigInt(1000000000), + szabo: BigInt(1000000000000), + microether: BigInt(1000000000000), + micro: BigInt(1000000000000), + finney: BigInt(1000000000000000), + milliether: BigInt(1000000000000000), + milli: BigInt(1000000000000000), + ether: BigInt('1000000000000000000'), + kether: BigInt('1000000000000000000000'), + grand: BigInt('1000000000000000000000'), + mether: BigInt('1000000000000000000000000'), + gether: BigInt('1000000000000000000000000000'), + tether: BigInt('1000000000000000000000000000000'), +}; + +export type EtherUnits = keyof typeof ethUnitMap; +/** + * Convert a value from bytes to Uint8Array + * @param data - Data to be converted + * @returns - The Uint8Array representation of the input data + * + * @example + * ```ts + * console.log(web3.utils.bytesToUint8Array("0xab"))); + * > Uint8Array(1) [ 171 ] + * ``` + */ +export const bytesToUint8Array = (data: Bytes): Uint8Array | never => { + validator.validate(['bytes'], [data]); + + if (data instanceof Uint8Array) { + return data; + } + + if (Array.isArray(data)) { + return new Uint8Array(data); + } + + if (typeof data === 'string') { + return validatorUtils.hexToUint8Array(data); + } + + throw new InvalidBytesError(data); +}; + +/** + * @internal + */ +const { uint8ArrayToHexString } = validatorUtils; + +/** + * Convert a byte array to a hex string + * @param bytes - Byte array to be converted + * @returns - The hex string representation of the input byte array + * + * @example + * ```ts + * console.log(web3.utils.bytesToHex(new Uint8Array([72, 12]))); + * > "0x480c" + * + */ +export const bytesToHex = (bytes: Bytes): HexString => + uint8ArrayToHexString(bytesToUint8Array(bytes)); + +/** + * Convert a hex string to a byte array + * @param hex - Hex string to be converted + * @returns - The byte array representation of the input hex string + * + * @example + * ```ts + * console.log(web3.utils.hexToBytes('0x74657374')); + * > Uint8Array(4) [ 116, 101, 115, 116 ] + * ``` + */ +export const hexToBytes = (bytes: HexString): Uint8Array => { + if (typeof bytes === 'string' && bytes.slice(0, 2).toLowerCase() !== '0x') { + return bytesToUint8Array(`0x${bytes}`); + } + return bytesToUint8Array(bytes); +}; + +/** + * Converts value to it's number representation + * @param value - Hex string to be converted + * @returns - The number representation of the input value + * + * @example + * ```ts + * conoslle.log(web3.utils.hexToNumber('0xa')); + * > 10 + * ``` + */ +export const hexToNumber = (value: HexString): bigint | number => { + validator.validate(['hex'], [value]); + + // To avoid duplicate code and circular dependency we will + // use `hexToNumber` implementation from `web3-validator` + return validatorUtils.hexToNumber(value); +}; + +/** + * Converts value to it's number representation @alias `hexToNumber` + */ +export const toDecimal = hexToNumber; + +/** + * Converts value to it's hex representation + * @param value - Value to be converted + * @param hexstrict - Add padding to converted value if odd, to make it hexstrict + * @returns - The hex representation of the input value + * + * @example + * ```ts + * console.log(web3.utils.numberToHex(10)); + * > "0xa" + * ``` + */ +export const numberToHex = (value: Numbers, hexstrict?: boolean): HexString => { + if (typeof value !== 'bigint') validator.validate(['int'], [value]); + // To avoid duplicate code and circular dependency we will + // use `numberToHex` implementation from `web3-validator` + let updatedValue = validatorUtils.numberToHex(value); + if (hexstrict) { + if (!updatedValue.startsWith('-') && updatedValue.length % 2 === 1) { + // To avoid duplicate a circular dependancy we will not be using the padLeft method + updatedValue = '0x0'.concat(updatedValue.slice(2)); + } else if (updatedValue.length % 2 === 0 && updatedValue.startsWith('-')) + updatedValue = '-0x0'.concat(updatedValue.slice(3)); + } + return updatedValue; +}; +/** + * Converts value to it's hex representation @alias `numberToHex` + * + */ +export const fromDecimal = numberToHex; + +/** + * Converts value to it's decimal representation in string + * @param value - Hex string to be converted + * @returns - The decimal representation of the input value + * + * @example + * ```ts + * console.log(web3.utils.hexToNumberString('0xa')); + * > "10" + * ``` + */ +export const hexToNumberString = (data: HexString): string => hexToNumber(data).toString(); + +/** + * Should be called to get hex representation (prefixed by 0x) of utf8 string + * @param str - Utf8 string to be converted + * @returns - The hex representation of the input string + * + * @example + * ```ts + * console.log(utf8ToHex('web3.js')); + * > "0x776562332e6a73" + * + */ +export const utf8ToHex = (str: string): HexString => { + validator.validate(['string'], [str]); + + // To be compatible with 1.x trim null character + // eslint-disable-next-line no-control-regex + let strWithoutNullCharacter = str.replace(/^(?:\u0000)/, ''); + // eslint-disable-next-line no-control-regex + strWithoutNullCharacter = strWithoutNullCharacter.replace(/(?:\u0000)$/, ''); + + return bytesToHex(new TextEncoder().encode(strWithoutNullCharacter)); +}; + +/** + * @alias utf8ToHex + */ + +export const fromUtf8 = utf8ToHex; +/** + * @alias utf8ToHex + */ +export const stringToHex = utf8ToHex; + +/** + * Should be called to get utf8 from it's hex representation + * @param str - Hex string to be converted + * @returns - Utf8 string + * + * @example + * ```ts + * console.log(web3.utils.hexToUtf8('0x48656c6c6f20576f726c64')); + * > Hello World + * ``` + */ +export const hexToUtf8 = (str: HexString): string => bytesToUtf8(hexToBytes(str)); + +/** + * @alias hexToUtf8 + */ +export const toUtf8 = (input: HexString | Uint8Array) => { + if (typeof input === 'string') { + return hexToUtf8(input); + } + validator.validate(['bytes'], [input]); + return bytesToUtf8(input); +}; + +export const utf8ToBytes = ecUtf8ToBytes; + +/** + * @alias hexToUtf8 + */ +export const hexToString = hexToUtf8; + +/** + * Should be called to get hex representation (prefixed by 0x) of ascii string + * @param str - String to be converted to hex + * @returns - Hex string + * + * @example + * ```ts + * console.log(web3.utils.asciiToHex('Hello World')); + * > 0x48656c6c6f20576f726c64 + * ``` + */ +export const asciiToHex = (str: string): HexString => { + validator.validate(['string'], [str]); + let hexString = ''; + for (let i = 0; i < str.length; i += 1) { + const hexCharCode = str.charCodeAt(i).toString(16); + // might need a leading 0 + hexString += hexCharCode.length % 2 !== 0 ? `0${hexCharCode}` : hexCharCode; + } + return `0x${hexString}`; +}; + +/** + * @alias asciiToHex + */ +export const fromAscii = asciiToHex; + +/** + * Should be called to get ascii from it's hex representation + * @param str - Hex string to be converted to ascii + * @returns - Ascii string + * + * @example + * ```ts + * console.log(web3.utils.hexToAscii('0x48656c6c6f20576f726c64')); + * > Hello World + * ``` + */ +export const hexToAscii = (str: HexString): string => { + const decoder = new TextDecoder('ascii'); + return decoder.decode(hexToBytes(str)); +}; + +/** + * @alias hexToAscii + */ +export const toAscii = hexToAscii; + +/** + * Auto converts any given value into it's hex representation. + * @param value - Value to be converted to hex + * @param returnType - If true, it will return the type of the value + * + * @example + * ```ts + * console.log(web3.utils.toHex(10)); + * > 0xa + * + * console.log(web3.utils.toHex('0x123', true)); + * > bytes + *``` + */ +export const toHex = ( + value: Numbers | Bytes | Address | boolean | object, + returnType?: boolean, +): HexString | ValueTypes => { + if (typeof value === 'string' && isAddress(value)) { + return returnType ? 'address' : `0x${value.toLowerCase().replace(/^0x/i, '')}`; + } + + if (typeof value === 'boolean') { + // eslint-disable-next-line no-nested-ternary + return returnType ? 'bool' : value ? '0x01' : '0x00'; + } + + if (typeof value === 'number') { + // eslint-disable-next-line no-nested-ternary + return returnType ? (value < 0 ? 'int256' : 'uint256') : numberToHex(value); + } + + if (typeof value === 'bigint') { + return returnType ? 'bigint' : numberToHex(value); + } + + if (typeof value === 'object' && !!value) { + return returnType ? 'string' : utf8ToHex(JSON.stringify(value)); + } + + if (typeof value === 'string') { + if (value.startsWith('-0x') || value.startsWith('-0X')) { + return returnType ? 'int256' : numberToHex(value); + } + + if (isHexStrict(value)) { + return returnType ? 'bytes' : value; + } + if (isHex(value) && !isInt(value)) { + return returnType ? 'bytes' : `0x${value}`; + } + + if (!Number.isFinite(value)) { + return returnType ? 'string' : utf8ToHex(value); + } + } + + throw new HexProcessingError(value); +}; + +/** + * Converts any given value into it's number representation, if possible, else into it's bigint representation. + * @param value - The value to convert + * @returns - Returns the value in number or bigint representation + * + * @example + * ```ts + * console.log(web3.utils.toNumber(1)); + * > 1 + * console.log(web3.utils.toNumber(Number.MAX_SAFE_INTEGER)); + * > 9007199254740991 + * + * console.log(web3.utils.toNumber(BigInt(Number.MAX_SAFE_INTEGER))); + * > 9007199254740991 + * + * console.log(web3.utils.toNumber(BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1))); + * > 9007199254740992n + * + * ``` + */ +export const toNumber = (value: Numbers): number | bigint => { + if (typeof value === 'number') { + return value; + } + + if (typeof value === 'bigint') { + return value >= Number.MIN_SAFE_INTEGER && value <= Number.MAX_SAFE_INTEGER + ? Number(value) + : value; + } + + if (typeof value === 'string' && isHexStrict(value)) { + return hexToNumber(value); + } + + try { + return toNumber(BigInt(value)); + } catch { + throw new InvalidNumberError(value); + } +}; + +/** + * Auto converts any given value into it's bigint representation + * + * @param value - The value to convert + * @returns - Returns the value in bigint representation + + * @example + * ```ts + * console.log(web3.utils.toBigInt(1)); + * > 1n + * ``` + */ +export const toBigInt = (value: unknown): bigint => { + if (typeof value === 'number') { + return BigInt(value); + } + + if (typeof value === 'bigint') { + return value; + } + + // isHex passes for dec, too + if (typeof value === 'string' && isHex(value)) { + if (value.startsWith('-')) { + return -BigInt(value.substring(1)); + } + return BigInt(value); + } + + throw new InvalidNumberError(value); +}; + +/** + * Takes a number of wei and converts it to any other ether unit. + * @param number - The value in wei + * @param unit - The unit to convert to + * @returns - Returns the converted value in the given unit + * + * @example + * ```ts + * console.log(web3.utils.fromWei("1", "ether")); + * > 0.000000000000000001 + * + * console.log(web3.utils.fromWei("1", "shannon")); + * > 0.000000001 + * ``` + */ +export const fromWei = (number: Numbers, unit: EtherUnits): string => { + const denomination = ethUnitMap[unit]; + + if (!denomination) { + throw new InvalidUnitError(unit); + } + + // value in wei would always be integer + // 13456789, 1234 + const value = String(toNumber(number)); + + // count number of zeros in denomination + // 1000000 -> 6 + const numberOfZerosInDenomination = denomination.toString().length - 1; + + if (numberOfZerosInDenomination <= 0) { + return value.toString(); + } + + // pad the value with required zeros + // 13456789 -> 13456789, 1234 -> 001234 + const zeroPaddedValue = value.padStart(numberOfZerosInDenomination, '0'); + + // get the integer part of value by counting number of zeros from start + // 13456789 -> '13' + // 001234 -> '' + const integer = zeroPaddedValue.slice(0, -numberOfZerosInDenomination); + + // get the fraction part of value by counting number of zeros backward + // 13456789 -> '456789' + // 001234 -> '001234' + const fraction = zeroPaddedValue.slice(-numberOfZerosInDenomination).replace(/\.?0+$/, ''); + + if (integer === '') { + return `0.${fraction}`; + } + + if (fraction === '') { + return integer; + } + + return `${integer}.${fraction}`; +}; + +/** + * Takes a number of a unit and converts it to wei. + * + * @param number - The number to convert. + * @param unit - {@link EtherUnits} The unit of the number passed. + * @returns The number converted to wei. + * + * @example + * ```ts + * console.log(web3.utils.toWei("0.001", "ether")); + * > 1000000000000000 //(wei) + * ``` + */ +// todo in 1.x unit defaults to 'ether' +export const toWei = (number: Numbers, unit: EtherUnits): string => { + validator.validate(['number'], [number]); + + const denomination = ethUnitMap[unit]; + + if (!denomination) { + throw new InvalidUnitError(unit); + } + + // if value is decimal e.g. 24.56 extract `integer` and `fraction` part + // to avoid `fraction` to be null use `concat` with empty string + const [integer, fraction] = String( + typeof number === 'string' && !isHexStrict(number) ? number : toNumber(number), + ) + .split('.') + .concat(''); + + // join the value removing `.` from + // 24.56 -> 2456 + const value = BigInt(`${integer}${fraction}`); + + // multiply value with denomination + // 2456 * 1000000 -> 2456000000 + const updatedValue = value * denomination; + + // count number of zeros in denomination + const numberOfZerosInDenomination = denomination.toString().length - 1; + + // check which either `fraction` or `denomination` have lower number of zeros + const decimals = Math.min(fraction.length, numberOfZerosInDenomination); + + if (decimals === 0) { + return updatedValue.toString(); + } + + // Add zeros to make length equal to required decimal points + // If string is larger than decimal points required then remove last zeros + return updatedValue.toString().padStart(decimals, '0').slice(0, -decimals); +}; + +/** + * Will convert an upper or lowercase Ethereum address to a checksum address. + * @param address - An address string + * @returns The checksum address + * @example + * ```ts + * web3.utils.toChecksumAddress('0xc1912fee45d61c87cc5ea59dae31190fffff232d'); + * > "0xc1912fEE45d61C87Cc5EA59DaE31190FFFFf232d" + * ``` + */ +export const toChecksumAddress = (address: Address): string => { + if (!isAddress(address, false)) { + throw new InvalidAddressError(address); + } + + const lowerCaseAddress = address.toLowerCase().replace(/^0x/i, ''); + + const hash = utils.uint8ArrayToHexString(keccak256(utf8ToBytes(lowerCaseAddress))); + + if ( + isNullish(hash) || + hash === '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' + ) + return ''; // // EIP-1052 if hash is equal to c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470, keccak was given empty data + + let checksumAddress = '0x'; + + const addressHash = hash.replace(/^0x/i, ''); + + for (let i = 0; i < lowerCaseAddress.length; i += 1) { + // If ith character is 8 to f then make it uppercase + if (parseInt(addressHash[i], 16) > 7) { + checksumAddress += lowerCaseAddress[i].toUpperCase(); + } else { + checksumAddress += lowerCaseAddress[i]; + } + } + return checksumAddress; +}; + +export const toBool = (value: boolean | string | number | unknown): boolean => { + if (typeof value === 'boolean') { + return value; + } + + if (typeof value === 'number' && (value === 0 || value === 1)) { + return Boolean(value); + } + + if (typeof value === 'bigint' && (value === BigInt(0) || value === BigInt(1))) { + return Boolean(value); + } + + if ( + typeof value === 'string' && + !isHexStrict(value) && + (value === '1' || value === '0' || value === 'false' || value === 'true') + ) { + if (value === 'true') { + return true; + } + if (value === 'false') { + return false; + } + return Boolean(Number(value)); + } + + if (typeof value === 'string' && isHexStrict(value) && (value === '0x1' || value === '0x0')) { + return Boolean(toNumber(value)); + } + + throw new InvalidBooleanError(value); +}; diff --git a/packages/web3-utils/src/event_emitter.ts b/packages/web3-utils/src/event_emitter.ts new file mode 100644 index 00000000000..7d9c3ccdb2e --- /dev/null +++ b/packages/web3-utils/src/event_emitter.ts @@ -0,0 +1,128 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +/* eslint-disable max-classes-per-file */ + +import { EventEmitter as EventEmitterAtNode } from 'events'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type Callback = (params: any) => void | Promise; + +type EventTargetCallback = (params: CustomEvent) => void; + +const wrapFunction = + (fn: Callback): EventTargetCallback => + (params: CustomEvent) => + fn(params.detail); + +/** + * This class copy the behavior of Node.js EventEmitter class. + * It is used to provide the same interface for the browser environment. + */ +class EventEmitterAtBrowser extends EventTarget { + private _listeners: Record = {}; + private maxListeners = Number.MAX_SAFE_INTEGER; + + public on(eventName: string, fn: Callback) { + this.addEventListener(eventName, fn); + return this; + } + + public once(eventName: string, fn: Callback) { + const onceCallback = async (params: Callback) => { + this.off(eventName, onceCallback); + await fn(params); + }; + return this.on(eventName, onceCallback); + } + + public off(eventName: string, fn: Callback) { + this.removeEventListener(eventName, fn); + return this; + } + + public emit(eventName: string, params: unknown) { + const event = new CustomEvent(eventName, { detail: params }); + return super.dispatchEvent(event); + } + + public listenerCount(eventName: string): number { + const eventListeners = this._listeners[eventName]; + return eventListeners ? eventListeners.length : 0; + } + + public listeners(eventName: string): Callback[] { + return this._listeners[eventName].map(value => value[0]) || []; + } + + public eventNames(): string[] { + return Object.keys(this._listeners); + } + + public removeAllListeners() { + Object.keys(this._listeners).forEach(event => { + this._listeners[event].forEach( + (listener: [key: Callback, value: EventTargetCallback]) => { + super.removeEventListener(event, listener[1] as EventListener); + }, + ); + }); + + this._listeners = {}; + return this; + } + + public setMaxListeners(maxListeners: number) { + this.maxListeners = maxListeners; + return this; + } + + public getMaxListeners(): number { + return this.maxListeners; + } + + public addEventListener(eventName: string, fn: Callback) { + const wrappedFn = wrapFunction(fn); + super.addEventListener(eventName, wrappedFn as EventListener); + if (!this._listeners[eventName]) { + this._listeners[eventName] = []; + } + this._listeners[eventName].push([fn, wrappedFn]); + } + + public removeEventListener(eventName: string, fn: Callback) { + const eventListeners = this._listeners[eventName]; + if (eventListeners) { + const index = eventListeners.findIndex(item => item[0] === fn); + if (index !== -1) { + super.removeEventListener(eventName, eventListeners[index][1] as EventListener); + eventListeners.splice(index, 1); + } + } + } +} + +// eslint-disable-next-line import/no-mutable-exports +let EventEmitterType: typeof EventEmitterAtNode; +// Check if the code is running in a Node.js environment +if (typeof window === 'undefined') { + EventEmitterType = EventEmitterAtNode; +} else { + // Fallback for the browser environment + EventEmitterType = EventEmitterAtBrowser as unknown as typeof EventEmitterAtNode; +} + +export class EventEmitter extends EventEmitterType {} \ No newline at end of file diff --git a/packages/web3-utils/src/formatter.ts b/packages/web3-utils/src/formatter.ts new file mode 100644 index 00000000000..0cfeb600b9a --- /dev/null +++ b/packages/web3-utils/src/formatter.ts @@ -0,0 +1,303 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { FormatterError } from 'web3-errors'; +import { Bytes, DataFormat, FMT_BYTES, FMT_NUMBER, FormatType } from 'web3-types'; +import { isNullish, isObject, JsonSchema, utils, ValidationSchemaInput } from 'web3-validator'; +import { bytesToUint8Array, bytesToHex, numberToHex, toBigInt } from './converters.js'; +import { mergeDeep } from './objects.js'; +import { padLeft } from './string_manipulation.js'; +import { uint8ArrayConcat } from './uint8array.js'; + +const { parseBaseType } = utils; + +export const isDataFormat = (dataFormat: unknown): dataFormat is DataFormat => + typeof dataFormat === 'object' && + !isNullish(dataFormat) && + 'number' in dataFormat && + 'bytes' in dataFormat; + +/** + * Finds the schema that corresponds to a specific data path within a larger JSON schema. + * It works by iterating over the dataPath array and traversing the JSON schema one step at a time until it reaches the end of the path. + * + * @param schema - represents a JSON schema, which is an object that describes the structure of JSON data + * @param dataPath - represents an array of strings that specifies the path to the data within the JSON schema + * @param oneOfPath - represents an optional array of two-element tuples that specifies the "oneOf" option to choose, if the schema has oneOf and the data path can match multiple subschemas + * @returns the JSON schema that matches the data path + * + */ +const findSchemaByDataPath = ( + schema: JsonSchema, + dataPath: string[], + oneOfPath: [string, number][] = [], +): JsonSchema | undefined => { + let result: JsonSchema = { ...schema } as JsonSchema; + let previousDataPath: string | undefined; + + for (const dataPart of dataPath) { + if (result.oneOf && previousDataPath) { + const path = oneOfPath.find(function (element: [string, number]) { + return (this as unknown as string) === element[0]; + }, previousDataPath ?? ''); + + if (path && path[0] === previousDataPath) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + result = result.oneOf[path[1]]; + } + } + if (!result.properties && !result.items) { + return undefined; + } + + if (result.properties) { + result = (result.properties as Record)[dataPart]; + } else if (result.items && (result.items as JsonSchema).properties) { + const node = (result.items as JsonSchema).properties as Record; + + if (!node) { + return undefined; + } + + result = node[dataPart]; + } else if (result.items && isObject(result.items)) { + result = result.items; + } else if (result.items && Array.isArray(result.items)) { + result = result.items[parseInt(dataPart, 10)]; + } + + if (result && dataPart) previousDataPath = dataPart; + } + + return result; +}; +/** + * Converts a value depending on the format + * @param value - value to convert + * @param ethType - The type of the value to be parsed + * @param format - The format to be converted to + * @returns - The value converted to the specified format + */ +export const convertScalarValue = (value: unknown, ethType: string, format: DataFormat) => { + try { + const { baseType, baseTypeSize } = parseBaseType(ethType); + if (baseType === 'int' || baseType === 'uint') { + switch (format.number) { + case FMT_NUMBER.NUMBER: + return Number(toBigInt(value)); + case FMT_NUMBER.HEX: + return numberToHex(toBigInt(value)); + case FMT_NUMBER.STR: + return toBigInt(value).toString(); + case FMT_NUMBER.BIGINT: + return toBigInt(value); + default: + throw new FormatterError(`Invalid format: ${String(format.number)}`); + } + } + if (baseType === 'bytes') { + let paddedValue; + if (baseTypeSize) { + if (typeof value === 'string') paddedValue = padLeft(value, baseTypeSize * 2); + else if (value instanceof Uint8Array) { + paddedValue = uint8ArrayConcat( + new Uint8Array(baseTypeSize - value.length), + value, + ); + } + } else { + paddedValue = value; + } + switch (format.bytes) { + case FMT_BYTES.HEX: + return bytesToHex(bytesToUint8Array(paddedValue as Bytes)); + case FMT_BYTES.UINT8ARRAY: + return bytesToUint8Array(paddedValue as Bytes); + default: + throw new FormatterError(`Invalid format: ${String(format.bytes)}`); + } + } + } catch (error) { + // If someone didn't use `eth` keyword we can return original value + // as the scope of this code is formatting not validation + return value; + } + + return value; +}; +/** + * Converts the data to the specified format + * @param data - data to convert + * @param schema - The JSON schema that describes the structure of the data + * @param dataPath - A string array that specifies the path to the data within the JSON schema + * @param format - The format to be converted to + * @param oneOfPath - An optional array of two-element tuples that specifies the "oneOf" option to choose, if the schema has oneOf and the data path can match multiple subschemas + * @returns - The data converted to the specified format + */ +export const convert = ( + data: Record | unknown[] | unknown, + schema: JsonSchema, + dataPath: string[], + format: DataFormat, + oneOfPath: [string, number][] = [], +) => { + // If it's a scalar value + if (!isObject(data) && !Array.isArray(data)) { + return convertScalarValue(data, schema?.format as string, format); + } + + const object = data as Record; + + for (const [key, value] of Object.entries(object)) { + dataPath.push(key); + const schemaProp = findSchemaByDataPath(schema, dataPath, oneOfPath); + + // If value is a scaler value + if (isNullish(schemaProp)) { + delete object[key]; + dataPath.pop(); + + continue; + } + + // If value is an object, recurse into it + if (isObject(value)) { + convert(value, schema, dataPath, format); + dataPath.pop(); + continue; + } + + // If value is an array + if (Array.isArray(value)) { + let _schemaProp = schemaProp; + + // TODO This is a naive approach to solving the issue of + // a schema using oneOf. This chunk of code was intended to handle + // BlockSchema.transactions + // TODO BlockSchema.transactions are not being formatted + if (schemaProp?.oneOf !== undefined) { + // The following code is basically saying: + // if the schema specifies oneOf, then we are to loop + // over each possible schema and check if they type of the schema + // matches the type of value[0], and if so we use the oneOfSchemaProp + // as the schema for formatting + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + schemaProp.oneOf.forEach((oneOfSchemaProp: JsonSchema, index: number) => { + if ( + !Array.isArray(schemaProp?.items) && + ((typeof value[0] === 'object' && + (oneOfSchemaProp?.items as JsonSchema)?.type === 'object') || + (typeof value[0] === 'string' && + (oneOfSchemaProp?.items as JsonSchema)?.type !== 'object')) + ) { + _schemaProp = oneOfSchemaProp; + oneOfPath.push([key, index]); + } + }); + } + + if (isNullish(_schemaProp?.items)) { + // Can not find schema for array item, delete that item + delete object[key]; + dataPath.pop(); + + continue; + } + + // If schema for array items is a single type + if (isObject(_schemaProp.items) && !isNullish(_schemaProp.items.format)) { + for (let i = 0; i < value.length; i += 1) { + (object[key] as unknown[])[i] = convertScalarValue( + value[i], + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + _schemaProp?.items?.format, + format, + ); + } + + dataPath.pop(); + continue; + } + + // If schema for array items is an object + if (!Array.isArray(_schemaProp?.items) && _schemaProp?.items?.type === 'object') { + for (const arrObject of value) { + convert( + arrObject as Record | unknown[], + schema, + dataPath, + format, + oneOfPath, + ); + } + + dataPath.pop(); + continue; + } + + // If schema for array is a tuple + if (Array.isArray(_schemaProp?.items)) { + for (let i = 0; i < value.length; i += 1) { + (object[key] as unknown[])[i] = convertScalarValue( + value[i], + _schemaProp.items[i].format as string, + format, + ); + } + + dataPath.pop(); + continue; + } + } + + object[key] = convertScalarValue(value, schemaProp.format as string, format); + + dataPath.pop(); + } + + return object; +}; + +export const format = < + DataType extends Record | unknown[] | unknown, + ReturnType extends DataFormat, +>( + schema: ValidationSchemaInput | JsonSchema, + data: DataType, + returnFormat: ReturnType, +): FormatType => { + let dataToParse: Record | unknown[] | unknown; + + if (isObject(data)) { + dataToParse = mergeDeep({}, data); + } else if (Array.isArray(data)) { + dataToParse = [...data]; + } else { + dataToParse = data; + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const jsonSchema: JsonSchema = isObject(schema) ? schema : utils.ethAbiToJsonSchema(schema); + + if (!jsonSchema.properties && !jsonSchema.items && !jsonSchema.format) { + throw new FormatterError('Invalid json schema for formatting'); + } + + return convert(dataToParse, jsonSchema, [], returnFormat) as FormatType< + typeof data, + ReturnType + >; +}; diff --git a/packages/web3-utils/src/hash.ts b/packages/web3-utils/src/hash.ts new file mode 100644 index 00000000000..92396116f0b --- /dev/null +++ b/packages/web3-utils/src/hash.ts @@ -0,0 +1,376 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { keccak256 } from 'ethereum-cryptography/keccak.js'; +import { utf8ToBytes } from 'ethereum-cryptography/utils.js'; +import { + InvalidAddressError, + InvalidBooleanError, + InvalidBytesError, + InvalidLargeValueError, + InvalidSizeError, + InvalidStringError, + InvalidUnsignedIntegerError, +} from 'web3-errors'; +import { + Bytes, + EncodingTypes, + Numbers, + Sha3Input, + TypedObject, + TypedObjectAbbreviated, +} from 'web3-types'; +import { isAddress, isNullish, isHexStrict } from 'web3-validator'; +import { + bytesToUint8Array, + bytesToHex, + hexToBytes, + toBigInt, + toHex, + toNumber, + utf8ToHex, +} from './converters.js'; +import { leftPad, rightPad, toTwosComplement } from './string_manipulation.js'; + +const SHA3_EMPTY_BYTES = '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'; + +/** + * computes the Keccak-256 hash of the input and returns a hexstring + * @param data - the input to hash + * @returns - the Keccak-256 hash of the input + * + * @example + * ```ts + * console.log(web3.utils.sha3('web3.js')); + * > 0x63667efb1961039c9bb0d6ea7a5abdd223a3aca7daa5044ad894226e1f83919a + * + * console.log(web3.utils.sha3('')); + * > undefined + * ``` + */ +export const sha3 = (data: Bytes): string | undefined => { + let updatedData: Uint8Array; + + if (typeof data === 'string') { + if (data.startsWith('0x') && isHexStrict(data)) { + updatedData = hexToBytes(data); + } else { + updatedData = utf8ToBytes(data); + } + } else { + updatedData = data; + } + const hash = bytesToHex(keccak256(updatedData)); + + // EIP-1052 if hash is equal to c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470, keccak was given empty data + return hash === SHA3_EMPTY_BYTES ? undefined : hash; +}; + +/** + * Will calculate the sha3 of the input but does return the hash value instead of null if for example a empty string is passed. + * @param data - the input to hash + * @returns - the Keccak-256 hash of the input + * + * @example + * ```ts + * conosle.log(web3.utils.sha3Raw('web3.js')); + * > 0x63667efb1961039c9bb0d6ea7a5abdd223a3aca7daa5044ad894226e1f83919a + * + * console.log(web3.utils.sha3Raw('')); + * > 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 + * ``` + */ +export const sha3Raw = (data: Bytes): string => { + const hash = sha3(data); + if (isNullish(hash)) { + return SHA3_EMPTY_BYTES; + } + + return hash; +}; + +/** + * A wrapper for ethereum-cryptography/keccak256 to allow hashing a `string` and a `bigint` in addition to `UInt8Array` + * @param data - the input to hash + * @returns - the Keccak-256 hash of the input + * + * @example + * ```ts + * console.log(web3.utils.keccak256Wrapper('web3.js')); + * > 0x63667efb1961039c9bb0d6ea7a5abdd223a3aca7daa5044ad894226e1f83919a + * + * console.log(web3.utils.keccak256Wrapper(1)); + * > 0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6 + * + * console.log(web3.utils.keccak256Wrapper(0xaf12fd)); + * > 0x358640fd4719fa923525d74ab5ae80a594301aba5543e3492b052bf4598b794c + * ``` + */ +export const keccak256Wrapper = ( + data: Bytes | Numbers | string | ReadonlyArray, +): string => { + let processedData; + if (typeof data === 'bigint' || typeof data === 'number') { + processedData = utf8ToBytes(data.toString()); + } else if (Array.isArray(data)) { + processedData = new Uint8Array(data); + } else if (typeof data === 'string' && !isHexStrict(data)) { + processedData = utf8ToBytes(data); + } else { + processedData = bytesToUint8Array(data as Bytes); + } + return bytesToHex(keccak256(processedData)); +}; + +export { keccak256Wrapper as keccak256 }; + +/** + * returns type and value + * @param arg - the input to return the type and value + * @returns - the type and value of the input + */ +const getType = (arg: Sha3Input): [string, EncodingTypes] => { + if (Array.isArray(arg)) { + throw new Error('Autodetection of array types is not supported.'); + } + + let type; + let value; + // if type is given + if ( + typeof arg === 'object' && + ('t' in arg || 'type' in arg) && + ('v' in arg || 'value' in arg) + ) { + type = 't' in arg ? arg.t : arg.type; + value = 'v' in arg ? arg.v : arg.value; + + type = type.toLowerCase() === 'bigint' ? 'int' : type; + } else if (typeof arg === 'bigint') { + return ['int', arg]; + } + // otherwise try to guess the type + else { + type = toHex(arg, true); + value = toHex(arg); + + if (!type.startsWith('int') && !type.startsWith('uint')) { + type = 'bytes'; + } + } + + if ( + (type.startsWith('int') || type.startsWith('uint')) && + typeof value === 'string' && + !/^(-)?0x/i.test(value) + ) { + value = toBigInt(value); + } + return [type, value]; +}; + +/** + * returns the type with size if uint or int + * @param name - the input to return the type with size + * @returns - the type with size of the input + */ +const elementaryName = (name: string): string => { + if (name.startsWith('int[')) { + return `int256${name.slice(3)}`; + } + if (name === 'int') { + return 'int256'; + } + if (name.startsWith('uint[')) { + return `uint256'${name.slice(4)}`; + } + if (name === 'uint') { + return 'uint256'; + } + return name; +}; + +/** + * returns the size of the value of type 'byte' + */ +const parseTypeN = (value: string, typeLength: number): number => { + const typesize = /^(\d+).*$/.exec(value.slice(typeLength)); + return typesize ? parseInt(typesize[1], 10) : 0; +}; + +/** + * returns the bit length of the value + * @param value - the input to return the bit length + * @returns - the bit length of the input + */ +const bitLength = (value: bigint | number): number => { + const updatedVal = value.toString(2); + return updatedVal.length; +}; + +/** + * Pads the value based on size and type + * returns a string of the padded value + * @param type - the input to pad + * @returns = the padded value + */ +const solidityPack = (type: string, val: EncodingTypes): string => { + const value = val.toString(); + if (type === 'string') { + if (typeof val === 'string') return utf8ToHex(val); + throw new InvalidStringError(val); + } + if (type === 'bool' || type === 'boolean') { + if (typeof val === 'boolean') return val ? '01' : '00'; + throw new InvalidBooleanError(val); + } + + if (type === 'address') { + if (!isAddress(value)) { + throw new InvalidAddressError(value); + } + return value; + } + const name = elementaryName(type); + if (type.startsWith('uint')) { + const size = parseTypeN(name, 'uint'.length); + + if (size % 8 || size < 8 || size > 256) { + throw new InvalidSizeError(value); + } + const num = toNumber(value); + if (bitLength(num) > size) { + throw new InvalidLargeValueError(value); + } + if (num < BigInt(0)) { + throw new InvalidUnsignedIntegerError(value); + } + + return size ? leftPad(num.toString(16), (size / 8) * 2) : num.toString(16); + } + + if (type.startsWith('int')) { + const size = parseTypeN(name, 'int'.length); + if (size % 8 || size < 8 || size > 256) { + throw new InvalidSizeError(type); + } + + const num = toNumber(value); + if (bitLength(num) > size) { + throw new InvalidLargeValueError(value); + } + if (num < BigInt(0)) { + return toTwosComplement(num.toString(), (size / 8) * 2); + } + return size ? leftPad(num.toString(16), size / 4) : num.toString(16); + } + + if (name === 'bytes') { + if (value.replace(/^0x/i, '').length % 2 !== 0) { + throw new InvalidBytesError(value); + } + return value; + } + + if (type.startsWith('bytes')) { + if (value.replace(/^0x/i, '').length % 2 !== 0) { + throw new InvalidBytesError(value); + } + + const size = parseTypeN(type, 'bytes'.length); + + if (!size || size < 1 || size > 64 || size < value.replace(/^0x/i, '').length / 2) { + throw new InvalidBytesError(value); + } + + return rightPad(value, size * 2); + } + return ''; +}; + +/** + * returns a string of the tightly packed value given based on the type + * @param arg - the input to return the tightly packed value + * @returns - the tightly packed value + */ +export const processSolidityEncodePackedArgs = (arg: Sha3Input): string => { + const [type, val] = getType(arg); + + // array case + if (Array.isArray(val)) { + // go through each element of the array and use map function to create new hexarg list + const hexArg = val.map((v: Numbers | boolean) => solidityPack(type, v).replace('0x', '')); + return hexArg.join(''); + } + + const hexArg = solidityPack(type, val); + return hexArg.replace('0x', ''); +}; + +/** + * Encode packed arguments to a hexstring + */ +export const encodePacked = (...values: Sha3Input[]): string => { + const args = Array.prototype.slice.call(values); + const hexArgs = args.map(processSolidityEncodePackedArgs); + return `0x${hexArgs.join('').toLowerCase()}`; +}; + +/** + * Will tightly pack values given in the same way solidity would then hash. + * returns a hash string, or null if input is empty + * @param values - the input to return the tightly packed values + * @returns - the keccack246 of the tightly packed values + * + * @example + * ```ts + * console.log([{ type: 'string', value: '31323334' }]); + * console.log(web3.utils.soliditySha3({ type: "string", value: "31323334" })); + * > 0xf15f8da2ad27e486d632dc37d24912f634398918d6f9913a0a0ff84e388be62b + * ``` + */ +export const soliditySha3 = (...values: Sha3Input[]): string | undefined => + sha3(encodePacked(...values)); + +/** + * Will tightly pack values given in the same way solidity would then hash. + * returns a hash string, if input is empty will return `0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470` + * @param values - the input to return the tightly packed values + * @returns - the keccack246 of the tightly packed values + * + * @example + * ```ts + * console.log(web3.utils.soliditySha3Raw({ type: "string", value: "helloworld" })) + * > 0xfa26db7ca85ead399216e7c6316bc50ed24393c3122b582735e7f3b0f91b93f0 + * ``` + */ +export const soliditySha3Raw = (...values: TypedObject[] | TypedObjectAbbreviated[]): string => + sha3Raw(encodePacked(...values)); + +/** + * Get slot number for storage long string in contract. Basically for getStorage method + * returns slotNumber where will data placed + * @param mainSlotNumber - the slot number where will be stored hash of long string + * @returns - the slot number where will be stored long string + */ +export const getStorageSlotNumForLongString = (mainSlotNumber: number | string) => + sha3( + `0x${(typeof mainSlotNumber === 'number' + ? mainSlotNumber.toString() + : mainSlotNumber + ).padStart(64, '0')}`, + ); diff --git a/packages/web3-utils/src/index.js b/packages/web3-utils/src/index.js deleted file mode 100644 index fb26c6e1187..00000000000 --- a/packages/web3-utils/src/index.js +++ /dev/null @@ -1,443 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file utils.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2017 - */ - - -var _ = require('underscore'); -var ethjsUnit = require('ethjs-unit'); -var utils = require('./utils.js'); -var soliditySha3 = require('./soliditySha3.js'); -var randombytes = require('randombytes'); -var BN = require('bn.js'); - - -/** - * Fires an error in an event emitter and callback and returns the eventemitter - * - * @method _fireError - * @param {Object} error a string, a error, or an object with {message, data} - * @param {Object} emitter - * @param {Function} reject - * @param {Function} callback - * @param {any} optionalData - * @return {Object} the emitter - */ -var _fireError = function (error, emitter, reject, callback, optionalData) { - /*jshint maxcomplexity: 10 */ - - // add data if given - if(_.isObject(error) && !(error instanceof Error) && error.data) { - if(_.isObject(error.data) || _.isArray(error.data)) { - error.data = JSON.stringify(error.data, null, 2); - } - - error = error.message +"\n"+ error.data; - } - - if(_.isString(error)) { - error = new Error(error); - } - - if (_.isFunction(callback)) { - callback(error, optionalData); - } - if (_.isFunction(reject)) { - // suppress uncatched error if an error listener is present - // OR suppress uncatched error if an callback listener is present - if ( - emitter && - (_.isFunction(emitter.listeners) && - emitter.listeners('error').length) || _.isFunction(callback) - ) { - emitter.catch(function(){}); - } - // reject later, to be able to return emitter - setTimeout(function () { - reject(error); - }, 1); - } - - if(emitter && _.isFunction(emitter.emit)) { - // emit later, to be able to return emitter - setTimeout(function () { - emitter.emit('error', error, optionalData); - emitter.removeAllListeners(); - }, 1); - } - - return emitter; -}; - -/** - * Should be used to create full function/event name from json abi - * - * @method _jsonInterfaceMethodToString - * @param {Object} json - * @return {String} full function/event name - */ -var _jsonInterfaceMethodToString = function (json) { - if (_.isObject(json) && json.name && json.name.indexOf('(') !== -1) { - return json.name; - } - - return json.name + '(' + _flattenTypes(false, json.inputs).join(',') + ')'; -}; - - -/** - * Should be used to flatten json abi inputs/outputs into an array of type-representing-strings - * - * @method _flattenTypes - * @param {bool} includeTuple - * @param {Object} puts - * @return {Array} parameters as strings - */ -var _flattenTypes = function(includeTuple, puts) -{ - // console.log("entered _flattenTypes. inputs/outputs: " + puts) - var types = []; - - puts.forEach(function(param) { - if (typeof param.components === 'object') { - if (param.type.substring(0, 5) !== 'tuple') { - throw new Error('components found but type is not tuple; report on GitHub'); - } - var suffix = ''; - var arrayBracket = param.type.indexOf('['); - if (arrayBracket >= 0) { suffix = param.type.substring(arrayBracket); } - var result = _flattenTypes(includeTuple, param.components); - // console.log("result should have things: " + result) - if(_.isArray(result) && includeTuple) { - // console.log("include tuple word, and its an array. joining...: " + result.types) - types.push('tuple(' + result.join(',') + ')' + suffix); - } - else if(!includeTuple) { - // console.log("don't include tuple, but its an array. joining...: " + result) - types.push('(' + result.join(',') + ')' + suffix); - } - else { - // console.log("its a single type within a tuple: " + result.types) - types.push('(' + result + ')'); - } - } else { - // console.log("its a type and not directly in a tuple: " + param.type) - types.push(param.type); - } - }); - - return types; -}; - - -/** - * Returns a random hex string by the given bytes size - * - * @param {Number} size - * @returns {string} - */ -var randomHex = function(size) { - return '0x' + randombytes(size).toString('hex'); -}; - -/** - * Should be called to get ascii from it's hex representation - * - * @method hexToAscii - * @param {String} hex - * @returns {String} ascii string representation of hex value - */ -var hexToAscii = function(hex) { - if (!utils.isHexStrict(hex)) - throw new Error('The parameter must be a valid HEX string.'); - - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - str += String.fromCharCode(code); - } - - return str; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of ascii string - * - * @method asciiToHex - * @param {String} str - * @returns {String} hex representation of input string - */ -var asciiToHex = function(str) { - if(!str) - return "0x00"; - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - - - -/** - * Returns value of unit in Wei - * - * @method getUnitValue - * @param {String} unit the unit to convert to, default ether - * @returns {BN} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -var getUnitValue = function (unit) { - unit = unit ? unit.toLowerCase() : 'ether'; - if (!ethjsUnit.unitMap[unit]) { - throw new Error('This unit "'+ unit +'" doesn\'t exist, please use the one of the following units' + JSON.stringify(ethjsUnit.unitMap, null, 2)); - } - return unit; -}; - -/** - * Takes a number of wei and converts it to any other ether unit. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method fromWei - * @param {Number|String} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert to, default ether - * @return {String|Object} When given a BN object it returns one as well, otherwise a number - */ -var fromWei = function(number, unit) { - unit = getUnitValue(unit); - - if(!utils.isBN(number) && !_.isString(number)) { - throw new Error('Please pass numbers as strings or BN objects to avoid precision errors.'); - } - - return utils.isBN(number) ? ethjsUnit.fromWei(number, unit) : ethjsUnit.fromWei(number, unit).toString(10); -}; - -/** - * Takes a number of a unit and converts it to wei. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method toWei - * @param {Number|String|BN} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert from, default ether - * @return {String|Object} When given a BN object it returns one as well, otherwise a number - */ -var toWei = function(number, unit) { - unit = getUnitValue(unit); - - if(!utils.isBN(number) && !_.isString(number)) { - throw new Error('Please pass numbers as strings or BN objects to avoid precision errors.'); - } - - return utils.isBN(number) ? ethjsUnit.toWei(number, unit) : ethjsUnit.toWei(number, unit).toString(10); -}; - - - - -/** - * Converts to a checksum address - * - * @method toChecksumAddress - * @param {String} address the given HEX address - * @return {String} - */ -var toChecksumAddress = function (address) { - if (typeof address === 'undefined') return ''; - - if(!/^(0x)?[0-9a-f]{40}$/i.test(address)) - throw new Error('Given address "'+ address +'" is not a valid Ethereum address.'); - - - - address = address.toLowerCase().replace(/^0x/i,''); - var addressHash = utils.sha3(address).replace(/^0x/i,''); - var checksumAddress = '0x'; - - for (var i = 0; i < address.length; i++ ) { - // If ith character is 8 to f then make it uppercase - if (parseInt(addressHash[i], 16) > 7) { - checksumAddress += address[i].toUpperCase(); - } else { - checksumAddress += address[i]; - } - } - return checksumAddress; -}; - -/** - * Returns -1 if ab; 0 if a == b. - * For more details on this type of function, see - * developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort - * - * @method compareBlockNumbers - * - * @param {String|Number|BN} a - * - * @param {String|Number|BN} b - * - * @returns {Number} -1, 0, or 1 - */ -var compareBlockNumbers = function(a, b) { - if (a == b) { - return 0; - } else if (("genesis" == a || "earliest" == a || 0 == a) && ("genesis" == b || "earliest" == b || 0 == b)) { - return 0; - } else if ("genesis" == a || "earliest" == a) { - // b !== a, thus a < b - return -1; - } else if ("genesis" == b || "earliest" == b) { - // b !== a, thus a > b - return 1; - } else if (a == "latest") { - if (b == "pending") { - return -1; - } else { - // b !== ("pending" OR "latest"), thus a > b - return 1; - } - } else if (b === "latest") { - if (a == "pending") { - return 1; - } else { - // b !== ("pending" OR "latest"), thus a > b - return -1 - } - } else if (a == "pending") { - // b (== OR <) "latest", thus a > b - return 1; - } else if (b == "pending") { - return -1; - } else { - let bnA = new BN(a); - let bnB = new BN(b); - if(bnA.lt(bnB)) { - return -1; - } else if(bnA.eq(bnB)) { - return 0; - } else { - return 1; - } - } -}; - -module.exports = { - _fireError: _fireError, - _jsonInterfaceMethodToString: _jsonInterfaceMethodToString, - _flattenTypes: _flattenTypes, - // extractDisplayName: extractDisplayName, - // extractTypeName: extractTypeName, - randomHex: randomHex, - _: _, - BN: utils.BN, - isBN: utils.isBN, - isBigNumber: utils.isBigNumber, - isHex: utils.isHex, - isHexStrict: utils.isHexStrict, - sha3: utils.sha3, - sha3Raw: utils.sha3Raw, - keccak256: utils.sha3, - soliditySha3: soliditySha3.soliditySha3, - soliditySha3Raw: soliditySha3.soliditySha3Raw, - encodePacked: soliditySha3.encodePacked, - isAddress: utils.isAddress, - checkAddressChecksum: utils.checkAddressChecksum, - toChecksumAddress: toChecksumAddress, - toHex: utils.toHex, - toBN: utils.toBN, - - bytesToHex: utils.bytesToHex, - hexToBytes: utils.hexToBytes, - - hexToNumberString: utils.hexToNumberString, - - hexToNumber: utils.hexToNumber, - toDecimal: utils.hexToNumber, // alias - - numberToHex: utils.numberToHex, - fromDecimal: utils.numberToHex, // alias - - hexToUtf8: utils.hexToUtf8, - hexToString: utils.hexToUtf8, - toUtf8: utils.hexToUtf8, - stripHexPrefix: utils.stripHexPrefix, - - utf8ToHex: utils.utf8ToHex, - stringToHex: utils.utf8ToHex, - fromUtf8: utils.utf8ToHex, - - hexToAscii: hexToAscii, - toAscii: hexToAscii, - asciiToHex: asciiToHex, - fromAscii: asciiToHex, - - unitMap: ethjsUnit.unitMap, - toWei: toWei, - fromWei: fromWei, - - padLeft: utils.leftPad, - leftPad: utils.leftPad, - padRight: utils.rightPad, - rightPad: utils.rightPad, - toTwosComplement: utils.toTwosComplement, - - isBloom: utils.isBloom, - isUserEthereumAddressInBloom: utils.isUserEthereumAddressInBloom, - isContractAddressInBloom: utils.isContractAddressInBloom, - isTopic: utils.isTopic, - isTopicInBloom: utils.isTopicInBloom, - isInBloom: utils.isInBloom, - - compareBlockNumbers: compareBlockNumbers -}; diff --git a/packages/web3-utils/src/index.ts b/packages/web3-utils/src/index.ts new file mode 100644 index 00000000000..52bb219692b --- /dev/null +++ b/packages/web3-utils/src/index.ts @@ -0,0 +1,34 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export * from './converters.js'; +export * from './event_emitter.js'; +export * from './validation.js'; +export * from './formatter.js'; +export * from './hash.js'; +export * from './random.js'; +export * from './string_manipulation.js'; +export * from './objects.js'; +export * from './promise_helpers.js'; +export * from './json_rpc.js'; +export * as jsonRpc from './json_rpc.js'; +export * from './web3_deferred_promise.js'; +export * from './chunk_response_parser.js'; +export * from './uuid.js'; +export * from './web3_eip1193_provider.js'; +export * from './socket_provider.js'; +export * from './uint8array.js'; diff --git a/packages/web3-utils/src/json_rpc.ts b/packages/web3-utils/src/json_rpc.ts new file mode 100644 index 00000000000..573d39197e3 --- /dev/null +++ b/packages/web3-utils/src/json_rpc.ts @@ -0,0 +1,130 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { isNullish } from 'web3-validator'; +import { + JsonRpcPayload, + JsonRpcResponse, + JsonRpcResponseWithResult, + JsonRpcResponseWithError, + JsonRpcOptionalRequest, + JsonRpcBatchRequest, + JsonRpcNotification, + JsonRpcRequest, + JsonRpcBatchResponse, + JsonRpcSubscriptionResult, +} from 'web3-types'; +import { rpcErrorsMap } from 'web3-errors'; +import { uuidV4 } from './uuid.js'; + +// check if code is a valid rpc server error code +export const isResponseRpcError = (rpcError: JsonRpcResponseWithError) => { + const errorCode = rpcError.error.code; + return rpcErrorsMap.has(errorCode) || (errorCode >= -32099 && errorCode <= -32000); +}; + +export const isResponseWithResult = ( + response: JsonRpcResponse, +): response is JsonRpcResponseWithResult => + !Array.isArray(response) && + !!response && + response.jsonrpc === '2.0' && + // JSON RPC consider "null" as valid response + 'result' in response && + isNullish(response.error) && + (typeof response.id === 'number' || typeof response.id === 'string'); + +// To avoid circular package dependency, copied to code here. If you update this please update same function in `response_errors.ts` +export const isResponseWithError = ( + response: JsonRpcResponse, +): response is JsonRpcResponseWithError => + !Array.isArray(response) && + response.jsonrpc === '2.0' && + !!response && + isNullish(response.result) && + // JSON RPC consider "null" as valid response + 'error' in response && + (typeof response.id === 'number' || typeof response.id === 'string'); + +export const isResponseWithNotification = ( + response: JsonRpcNotification | JsonRpcSubscriptionResult, +): response is JsonRpcNotification => + !Array.isArray(response) && + !!response && + response.jsonrpc === '2.0' && + !isNullish(response.params) && + !isNullish(response.method); + +export const isSubscriptionResult = ( + response: JsonRpcNotification | JsonRpcSubscriptionResult, +): response is JsonRpcSubscriptionResult => + !Array.isArray(response) && + !!response && + response.jsonrpc === '2.0' && + 'id' in response && + // JSON RPC consider "null" as valid response + 'result' in response; + +export const validateResponse = ( + response: JsonRpcResponse, +): boolean => isResponseWithResult(response) || isResponseWithError(response); + +export const isValidResponse = ( + response: JsonRpcResponse, +): boolean => + Array.isArray(response) ? response.every(validateResponse) : validateResponse(response); + +export const isBatchResponse = ( + response: JsonRpcResponse, +): response is JsonRpcBatchResponse => + Array.isArray(response) && response.length > 0 && isValidResponse(response); + +// internal optional variable to increment and use for the jsonrpc `id` +let requestIdSeed: number | undefined; + +/** + * Optionally use to make the jsonrpc `id` start from a specific number. + * Without calling this function, the `id` will be filled with a Uuid. + * But after this being called with a number, the `id` will be a number staring from the provided `start` variable. + * However, if `undefined` was passed to this function, the `id` will be a Uuid again. + * @param start - a number to start incrementing from. + * Or `undefined` to use a new Uuid (this is the default behavior) + */ +export const setRequestIdStart = (start: number | undefined) => { + requestIdSeed = start; +}; + +export const toPayload = ( + request: JsonRpcOptionalRequest, +): JsonRpcPayload => { + if (typeof requestIdSeed !== 'undefined') { + requestIdSeed += 1; + } + return { + jsonrpc: request.jsonrpc ?? '2.0', + id: request.id ?? requestIdSeed ?? uuidV4(), + method: request.method, + params: request.params ?? undefined, + }; +}; + +export const toBatchPayload = (requests: JsonRpcOptionalRequest[]): JsonRpcBatchRequest => + requests.map(request => toPayload(request)) as JsonRpcBatchRequest; + +export const isBatchRequest = ( + request: JsonRpcBatchRequest | JsonRpcRequest | JsonRpcOptionalRequest, +): request is JsonRpcBatchRequest => Array.isArray(request) && request.length > 0; diff --git a/packages/web3-utils/src/objects.ts b/packages/web3-utils/src/objects.ts new file mode 100644 index 00000000000..4ed6c328ef8 --- /dev/null +++ b/packages/web3-utils/src/objects.ts @@ -0,0 +1,64 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { TypedArray } from 'web3-types'; +import { isNullish } from 'web3-validator'; + +const isIterable = (item: unknown): item is Record => + typeof item === 'object' && + !isNullish(item) && + !Array.isArray(item) && + !(item instanceof TypedArray); + +// The following code is a derivative work of the code from the "LiskHQ/lisk-sdk" project, +// which is licensed under Apache version 2. +/** + * Deep merge two objects. + * @param destination - The destination object. + * @param sources - An array of source objects. + * @returns - The merged object. + */ +export const mergeDeep = ( + destination: Record, + ...sources: Record[] +): Record => { + const result = destination; // clone deep here + if (!isIterable(result)) { + return result; + } + for (const src of sources) { + // eslint-disable-next-line no-restricted-syntax + for (const key in src) { + if (isIterable(src[key])) { + if (!result[key]) { + result[key] = {}; + } + mergeDeep( + result[key] as Record, + src[key] as Record, + ); + } else if (!isNullish(src[key]) && Object.hasOwnProperty.call(src, key)) { + if (Array.isArray(src[key]) || src[key] instanceof TypedArray) { + result[key] = (src[key] as unknown[]).slice(0); + } else { + result[key] = src[key]; + } + } + } + } + return result; +}; diff --git a/packages/web3-utils/src/promise_helpers.ts b/packages/web3-utils/src/promise_helpers.ts new file mode 100644 index 00000000000..c8e211fbbb7 --- /dev/null +++ b/packages/web3-utils/src/promise_helpers.ts @@ -0,0 +1,171 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { isNullish } from 'web3-validator'; + +export type Timer = ReturnType; +export type Timeout = ReturnType; + + +/** + * An alternative to the node function `isPromise` that exists in `util/types` because it is not available on the browser. + * @param object - to check if it is a `Promise` + * @returns `true` if it is an `object` or a `function` that has a `then` function. And returns `false` otherwise. + */ +export function isPromise(object: unknown): boolean { + return ( + (typeof object === 'object' || typeof object === 'function') && + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + typeof (object as { then: unknown }).then === 'function' + ); +} + +export type AsyncFunction = (...args: K[]) => Promise; + +export function waitWithTimeout( + awaitable: Promise | AsyncFunction, + timeout: number, + error: Error, +): Promise; +export function waitWithTimeout( + awaitable: Promise | AsyncFunction, + timeout: number, +): Promise; + +/** + * Wait for a promise but interrupt it if it did not resolve within a given timeout. + * If the timeout reached, before the promise code resolve, either throw an error if an error object was provided, or return `undefined`. + * @param awaitable - The promise or function to wait for. + * @param timeout - The timeout in milliseconds. + * @param error - (Optional) The error to throw if the timeout reached. + */ +export async function waitWithTimeout( + awaitable: Promise | AsyncFunction, + timeout: number, + error?: Error, +): Promise { + let timeoutId: Timeout | undefined; + const result = await Promise.race([ + awaitable instanceof Promise ? awaitable : awaitable(), + new Promise((resolve, reject) => { + timeoutId = setTimeout(() => (error ? reject(error) : resolve(undefined)), timeout); + }), + ]); + if (timeoutId) { + clearTimeout(timeoutId); + } + if (result instanceof Error) { + throw result; + } + return result; +} + + +/** + * Repeatedly calls an async function with a given interval until the result of the function is defined (not undefined or null), + * or until a timeout is reached. It returns promise and intervalId. + * @param func - The function to call. + * @param interval - The interval in milliseconds. + */ +export function pollTillDefinedAndReturnIntervalId( + func: AsyncFunction, + interval: number, +): [Promise>, Timer] { + + let intervalId: Timer | undefined; + const polledRes = new Promise>((resolve, reject) => { + intervalId = setInterval(function intervalCallbackFunc(){ + (async () => { + try { + const res = await waitWithTimeout(func, interval); + + if (!isNullish(res)) { + clearInterval(intervalId); + resolve(res as unknown as Exclude); + } + } catch (error) { + clearInterval(intervalId); + reject(error); + } + })() as unknown; + return intervalCallbackFunc;}() // this will immediate invoke first call + , interval); + }); + + return [polledRes as unknown as Promise>, intervalId!]; +} + +/** + * Repeatedly calls an async function with a given interval until the result of the function is defined (not undefined or null), + * or until a timeout is reached. + * pollTillDefinedAndReturnIntervalId() function should be used instead of pollTillDefined if you need IntervalId in result. + * This function will be deprecated in next major release so use pollTillDefinedAndReturnIntervalId(). + * @param func - The function to call. + * @param interval - The interval in milliseconds. + */ +export async function pollTillDefined( + func: AsyncFunction, + interval: number, +): Promise> { + return pollTillDefinedAndReturnIntervalId(func, interval)[0]; +} +/** + * Enforce a timeout on a promise, so that it can be rejected if it takes too long to complete + * @param timeout - The timeout to enforced in milliseconds. + * @param error - The error to throw if the timeout is reached. + * @returns A tuple of the timeout id and the promise that will be rejected if the timeout is reached. + * + * @example + * ```ts + * const [timerId, promise] = web3.utils.rejectIfTimeout(100, new Error('time out')); + * ``` + */ +export function rejectIfTimeout(timeout: number, error: Error): [Timer, Promise] { + let timeoutId: Timer | undefined; + const rejectOnTimeout = new Promise((_, reject) => { + timeoutId = setTimeout(() => { + reject(error); + }, timeout); + }); + return [timeoutId!, rejectOnTimeout]; +} +/** + * Sets an interval that repeatedly executes the given cond function with the specified interval between each call. + * If the condition is met, the interval is cleared and a Promise that rejects with the returned value is returned. + * @param cond - The function/confition to call. + * @param interval - The interval in milliseconds. + * @returns - an array with the interval ID and the Promise. + */ +export function rejectIfConditionAtInterval( + cond: AsyncFunction, + interval: number, +): [Timer, Promise] { + let intervalId: Timer | undefined; + const rejectIfCondition = new Promise((_, reject) => { + intervalId = setInterval(() => { + (async () => { + const error = await cond(); + if (error) { + clearInterval(intervalId); + reject(error); + } + })() as unknown; + }, interval); + }); + return [intervalId!, rejectIfCondition]; +} + diff --git a/packages/web3-utils/src/random.ts b/packages/web3-utils/src/random.ts new file mode 100644 index 00000000000..2898c93acf3 --- /dev/null +++ b/packages/web3-utils/src/random.ts @@ -0,0 +1,49 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { getRandomBytesSync } from 'ethereum-cryptography/random.js'; +import { bytesToHex } from './converters.js'; + +/** + * Returns a random byte array by the given bytes size + * @param size - The size of the random byte array returned + * @returns - random byte array + * + * @example + * ```ts + * console.log(web3.utils.randomBytes(32)); + * > Uint8Array(32) [ + * 93, 172, 226, 32, 33, 176, 156, 156, + * 182, 30, 240, 2, 69, 96, 174, 197, + * 33, 136, 194, 241, 197, 156, 110, 111, + * 66, 87, 17, 88, 67, 48, 245, 183 + * ] + * ``` + */ +export const randomBytes = (size: number): Uint8Array => getRandomBytesSync(size); + +/** + * Returns a random hex string by the given bytes size + * @param byteSize - The size of the random hex string returned + * @returns - random hex string + * + * ```ts + * console.log(web3.utils.randomHex(32)); + * > 0x139f5b88b72a25eab053d3b57fe1f8a9dbc62a526b1cb1774d0d7db1c3e7ce9e + * ``` + */ +export const randomHex = (byteSize: number): string => bytesToHex(randomBytes(byteSize)); diff --git a/packages/web3-utils/src/socket_provider.ts b/packages/web3-utils/src/socket_provider.ts new file mode 100644 index 00000000000..380c230bd72 --- /dev/null +++ b/packages/web3-utils/src/socket_provider.ts @@ -0,0 +1,525 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + ConnectionEvent, + Eip1193EventName, + EthExecutionAPI, + JsonRpcBatchRequest, + JsonRpcBatchResponse, + JsonRpcId, + JsonRpcNotification, + JsonRpcRequest, + JsonRpcResponse, + JsonRpcResponseWithResult, + JsonRpcResult, + ProviderConnectInfo, + ProviderMessage, + ProviderRpcError, + SocketRequestItem, + Web3APIMethod, + Web3APIPayload, + Web3APIReturnType, + Web3APISpec, + Web3Eip1193ProviderEventCallback, + Web3ProviderEventCallback, + Web3ProviderMessageEventCallback, + Web3ProviderStatus, +} from 'web3-types'; +import { + ConnectionError, + ConnectionNotOpenError, + InvalidClientError, + MaxAttemptsReachedOnReconnectingError, + PendingRequestsOnReconnectingError, + RequestAlreadySentError, + Web3WSProviderError, +} from 'web3-errors'; +import { Eip1193Provider } from './web3_eip1193_provider.js'; +import { ChunkResponseParser } from './chunk_response_parser.js'; +import { isNullish } from './validation.js'; +import { Web3DeferredPromise } from './web3_deferred_promise.js'; +import * as jsonRpc from './json_rpc.js'; + +export type ReconnectOptions = { + autoReconnect: boolean; + delay: number; + maxAttempts: number; +}; + +const DEFAULT_RECONNECTION_OPTIONS = { + autoReconnect: true, + delay: 5000, + maxAttempts: 5, +}; + +const NORMAL_CLOSE_CODE = 1000; // https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/close + +export abstract class SocketProvider< + MessageEvent, + CloseEvent, + ErrorEvent, + API extends Web3APISpec = EthExecutionAPI, +> extends Eip1193Provider { + protected isReconnecting: boolean; + protected readonly _socketPath: string; + protected readonly chunkResponseParser: ChunkResponseParser; + /* eslint-disable @typescript-eslint/no-explicit-any */ + protected readonly _pendingRequestsQueue: Map>; + /* eslint-disable @typescript-eslint/no-explicit-any */ + protected readonly _sentRequestsQueue: Map>; + protected _reconnectAttempts!: number; + protected readonly _socketOptions?: unknown; + protected readonly _reconnectOptions: ReconnectOptions; + protected _socketConnection?: unknown; + public get SocketConnection() { + return this._socketConnection; + } + protected _connectionStatus: Web3ProviderStatus; + protected readonly _onMessageHandler: (event: MessageEvent) => void; + protected readonly _onOpenHandler: () => void; + protected readonly _onCloseHandler: (event: CloseEvent) => void; + protected readonly _onErrorHandler: (event: ErrorEvent) => void; + + /** + * This is an abstract class for implementing a socket provider (e.g. WebSocket, IPC). It extends the EIP-1193 provider {@link EIP1193Provider}. + * @param socketPath - The path to the socket (e.g. /ipc/path or ws://localhost:8546) + * @param socketOptions - The options for the socket connection. Its type is supposed to be specified in the inherited classes. + * @param reconnectOptions - The options for the socket reconnection {@link ReconnectOptions} + */ + public constructor( + socketPath: string, + socketOptions?: unknown, + reconnectOptions?: Partial, + ) { + super(); + this._connectionStatus = 'connecting'; + + // Message handlers. Due to bounding of `this` and removing the listeners we have to keep it's reference. + this._onMessageHandler = this._onMessage.bind(this); + this._onOpenHandler = this._onConnect.bind(this); + this._onCloseHandler = this._onCloseEvent.bind(this); + this._onErrorHandler = this._onError.bind(this); + + if (!this._validateProviderPath(socketPath)) throw new InvalidClientError(socketPath); + + this._socketPath = socketPath; + this._socketOptions = socketOptions; + + this._reconnectOptions = { + ...DEFAULT_RECONNECTION_OPTIONS, + ...(reconnectOptions ?? {}), + }; + + this._pendingRequestsQueue = new Map>(); + this._sentRequestsQueue = new Map>(); + + this._init(); + this.connect(); + this.chunkResponseParser = new ChunkResponseParser( + this._eventEmitter, + this._reconnectOptions.autoReconnect, + ); + this.chunkResponseParser.onError(() => { + this._clearQueues(); + }); + this.isReconnecting = false; + } + + protected _init() { + this._reconnectAttempts = 0; + } + + /** + * Try to establish a connection to the socket + */ + public connect(): void { + try { + this._openSocketConnection(); + this._connectionStatus = 'connecting'; + this._addSocketListeners(); + } catch (e) { + if (!this.isReconnecting) { + this._connectionStatus = 'disconnected'; + if (e && (e as Error).message) { + throw new ConnectionError( + `Error while connecting to ${this._socketPath}. Reason: ${ + (e as Error).message + }`, + ); + } else { + throw new InvalidClientError(this._socketPath); + } + } else { + setImmediate(() => { + this._reconnect(); + }); + } + } + } + + protected abstract _openSocketConnection(): void; + protected abstract _addSocketListeners(): void; + + protected abstract _removeSocketListeners(): void; + + protected abstract _onCloseEvent(_event: unknown): void; + + protected abstract _sendToSocket(_payload: Web3APIPayload): void; + + protected abstract _parseResponses(_event: MessageEvent): JsonRpcResponse[]; + + protected abstract _closeSocketConnection(_code?: number, _data?: string): void; + + // eslint-disable-next-line class-methods-use-this + protected _validateProviderPath(path: string): boolean { + return !!path; + } + + /** + * + * @returns `true` if the socket supports subscriptions + */ + // eslint-disable-next-line class-methods-use-this + public supportsSubscriptions(): boolean { + return true; + } + + /** + * Registers a listener for the specified event type. + * @param type - The event type to listen for + * @param listener - The callback to be invoked when the event is emitted + */ + public on( + type: 'disconnect', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public on( + type: 'connect', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public on(type: 'chainChanged', listener: Web3Eip1193ProviderEventCallback): void; + public on(type: 'accountsChanged', listener: Web3Eip1193ProviderEventCallback): void; + public on( + type: 'message', + listener: + | Web3Eip1193ProviderEventCallback + | Web3ProviderMessageEventCallback, + ): void; + public on( + type: string, + listener: Web3Eip1193ProviderEventCallback | Web3ProviderEventCallback, + ): void; + public on( + type: string | Eip1193EventName, + listener: + | Web3Eip1193ProviderEventCallback

+ | Web3ProviderMessageEventCallback + | Web3ProviderEventCallback, + ): void { + this._eventEmitter.on(type, listener); + } + + /** + * Registers a listener for the specified event type that will be invoked at most once. + * @param type - The event type to listen for + * @param listener - The callback to be invoked when the event is emitted + */ + public once( + type: 'disconnect', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public once( + type: 'connect', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public once(type: 'chainChanged', listener: Web3Eip1193ProviderEventCallback): void; + public once( + type: 'accountsChanged', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public once( + type: 'message', + listener: + | Web3Eip1193ProviderEventCallback + | Web3ProviderMessageEventCallback, + ): void; + public once( + type: string, + listener: Web3Eip1193ProviderEventCallback | Web3ProviderEventCallback, + ): void; + public once( + type: string | Eip1193EventName, + listener: + | Web3Eip1193ProviderEventCallback

+ | Web3ProviderMessageEventCallback + | Web3ProviderEventCallback, + ): void { + this._eventEmitter.once(type, listener); + } + + /** + * Removes a listener for the specified event type. + * @param type - The event type to remove the listener for + * @param listener - The callback to be executed + */ + public removeListener( + type: 'disconnect', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public removeListener( + type: 'connect', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public removeListener( + type: 'chainChanged', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public removeListener( + type: 'accountsChanged', + listener: Web3Eip1193ProviderEventCallback, + ): void; + public removeListener( + type: 'message', + listener: + | Web3Eip1193ProviderEventCallback + | Web3ProviderMessageEventCallback, + ): void; + public removeListener( + type: string, + listener: Web3Eip1193ProviderEventCallback | Web3ProviderEventCallback, + ): void; + public removeListener( + type: string | Eip1193EventName, + listener: + | Web3Eip1193ProviderEventCallback

+ | Web3ProviderMessageEventCallback + | Web3ProviderEventCallback, + ): void { + this._eventEmitter.removeListener(type, listener); + } + + protected _onDisconnect(code: number, data?: string) { + this._connectionStatus = 'disconnected'; + super._onDisconnect(code, data); + } + + /** + * Disconnects the socket + * @param code - The code to be sent to the server + * @param data - The data to be sent to the server + */ + public disconnect(code?: number, data?: string): void { + const disconnectCode = code ?? NORMAL_CLOSE_CODE; + this._removeSocketListeners(); + if (this.getStatus() !== 'disconnected') { + this._closeSocketConnection(disconnectCode, data); + } + this._onDisconnect(disconnectCode, data); + } + + /** + * Removes all listeners for the specified event type. + * @param type - The event type to remove the listeners for + */ + public removeAllListeners(type: string): void { + this._eventEmitter.removeAllListeners(type); + } + + protected _onError(event: ErrorEvent): void { + // do not emit error while trying to reconnect + if (this.isReconnecting) { + this._reconnect(); + } else { + this._eventEmitter.emit('error', event); + } + } + + /** + * Resets the socket, removing all listeners and pending requests + */ + public reset(): void { + this._sentRequestsQueue.clear(); + this._pendingRequestsQueue.clear(); + + this._init(); + this._removeSocketListeners(); + this._addSocketListeners(); + } + + protected _reconnect(): void { + if (this.isReconnecting) { + return; + } + this.isReconnecting = true; + + if (this._sentRequestsQueue.size > 0) { + this._sentRequestsQueue.forEach( + (request: SocketRequestItem, key: JsonRpcId) => { + request.deferredPromise.reject(new PendingRequestsOnReconnectingError()); + this._sentRequestsQueue.delete(key); + }, + ); + } + + if (this._reconnectAttempts < this._reconnectOptions.maxAttempts) { + this._reconnectAttempts += 1; + setTimeout(() => { + this._removeSocketListeners(); + this.connect(); + this.isReconnecting = false; + }, this._reconnectOptions.delay); + } else { + this.isReconnecting = false; + this._clearQueues(); + this._removeSocketListeners(); + this._eventEmitter.emit( + 'error', + new MaxAttemptsReachedOnReconnectingError(this._reconnectOptions.maxAttempts), + ); + } + } + + /** + * Creates a request object to be sent to the server + */ + public async request< + Method extends Web3APIMethod, + ResultType = Web3APIReturnType, + >(request: Web3APIPayload): Promise> { + if (isNullish(this._socketConnection)) { + throw new Error('Connection is undefined'); + } + // if socket disconnected - open connection + if (this.getStatus() === 'disconnected') { + this.connect(); + } + + const requestId = jsonRpc.isBatchRequest(request) + ? (request as unknown as JsonRpcBatchRequest)[0].id + : (request as unknown as JsonRpcRequest).id; + + if (!requestId) { + throw new Web3WSProviderError('Request Id not defined'); + } + + if (this._sentRequestsQueue.has(requestId)) { + throw new RequestAlreadySentError(requestId); + } + + const deferredPromise = new Web3DeferredPromise>(); + deferredPromise.catch(error => { + this._eventEmitter.emit('error', error); + }); + const reqItem: SocketRequestItem> = { + payload: request, + deferredPromise, + }; + + if (this.getStatus() === 'connecting') { + this._pendingRequestsQueue.set(requestId, reqItem); + + return reqItem.deferredPromise; + } + + this._sentRequestsQueue.set(requestId, reqItem); + + try { + this._sendToSocket(reqItem.payload); + } catch (error) { + this._sentRequestsQueue.delete(requestId); + + this._eventEmitter.emit('error', error); + } + + return deferredPromise; + } + + protected _onConnect() { + this._connectionStatus = 'connected'; + this._reconnectAttempts = 0; + super._onConnect(); + this._sendPendingRequests(); + } + + private _sendPendingRequests() { + for (const [id, value] of this._pendingRequestsQueue.entries()) { + this._sendToSocket(value.payload as Web3APIPayload); + this._pendingRequestsQueue.delete(id); + this._sentRequestsQueue.set(id, value); + } + } + + protected _onMessage(event: MessageEvent): void { + const responses = this._parseResponses(event); + if (isNullish(responses) || responses.length === 0) { + return; + } + + for (const response of responses) { + if ( + jsonRpc.isResponseWithNotification(response as JsonRpcNotification) && + (response as JsonRpcNotification).method.endsWith('_subscription') + ) { + this._eventEmitter.emit('message', response); + return; + } + + const requestId = jsonRpc.isBatchResponse(response) + ? (response as unknown as JsonRpcBatchResponse)[0].id + : (response as unknown as JsonRpcResponseWithResult).id; + + const requestItem = this._sentRequestsQueue.get(requestId); + + if (!requestItem) { + return; + } + + if ( + jsonRpc.isBatchResponse(response) || + jsonRpc.isResponseWithResult(response) || + jsonRpc.isResponseWithError(response) + ) { + this._eventEmitter.emit('message', response); + requestItem.deferredPromise.resolve(response); + } + + this._sentRequestsQueue.delete(requestId); + } + } + + protected _clearQueues(event?: ConnectionEvent) { + if (this._pendingRequestsQueue.size > 0) { + this._pendingRequestsQueue.forEach( + (request: SocketRequestItem, key: JsonRpcId) => { + request.deferredPromise.reject(new ConnectionNotOpenError(event)); + this._pendingRequestsQueue.delete(key); + }, + ); + } + + if (this._sentRequestsQueue.size > 0) { + this._sentRequestsQueue.forEach( + (request: SocketRequestItem, key: JsonRpcId) => { + request.deferredPromise.reject(new ConnectionNotOpenError(event)); + this._sentRequestsQueue.delete(key); + }, + ); + } + + this._removeSocketListeners(); + } +} diff --git a/packages/web3-utils/src/soliditySha3.js b/packages/web3-utils/src/soliditySha3.js deleted file mode 100644 index 055f3e30f9e..00000000000 --- a/packages/web3-utils/src/soliditySha3.js +++ /dev/null @@ -1,275 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file soliditySha3.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -var _ = require('underscore'); -var BN = require('bn.js'); -var utils = require('./utils.js'); - - -var _elementaryName = function (name) { - /*jshint maxcomplexity:false */ - - if (name.startsWith('int[')) { - return 'int256' + name.slice(3); - } else if (name === 'int') { - return 'int256'; - } else if (name.startsWith('uint[')) { - return 'uint256' + name.slice(4); - } else if (name === 'uint') { - return 'uint256'; - } else if (name.startsWith('fixed[')) { - return 'fixed128x128' + name.slice(5); - } else if (name === 'fixed') { - return 'fixed128x128'; - } else if (name.startsWith('ufixed[')) { - return 'ufixed128x128' + name.slice(6); - } else if (name === 'ufixed') { - return 'ufixed128x128'; - } - return name; -}; - -// Parse N from type -var _parseTypeN = function (type) { - var typesize = /^\D+(\d+).*$/.exec(type); - return typesize ? parseInt(typesize[1], 10) : null; -}; - -// Parse N from type[] -var _parseTypeNArray = function (type) { - var arraySize = /^\D+\d*\[(\d+)\]$/.exec(type); - return arraySize ? parseInt(arraySize[1], 10) : null; -}; - -var _parseNumber = function (arg) { - var type = typeof arg; - if (type === 'string') { - if (utils.isHexStrict(arg)) { - return new BN(arg.replace(/0x/i,''), 16); - } else { - return new BN(arg, 10); - } - } else if (type === 'number') { - return new BN(arg); - } else if (utils.isBigNumber(arg)) { - return new BN(arg.toString(10)); - } else if (utils.isBN(arg)) { - return arg; - } else { - throw new Error(arg +' is not a number'); - } -}; - -var _solidityPack = function (type, value, arraySize) { - /*jshint maxcomplexity:false */ - - var size, num; - type = _elementaryName(type); - - - if (type === 'bytes') { - - if (value.replace(/^0x/i,'').length % 2 !== 0) { - throw new Error('Invalid bytes characters '+ value.length); - } - - return value; - } else if (type === 'string') { - return utils.utf8ToHex(value); - } else if (type === 'bool') { - return value ? '01' : '00'; - } else if (type.startsWith('address')) { - if(arraySize) { - size = 64; - } else { - size = 40; - } - - if(!utils.isAddress(value)) { - throw new Error(value +' is not a valid address, or the checksum is invalid.'); - } - - return utils.leftPad(value.toLowerCase(), size); - } - - size = _parseTypeN(type); - - if (type.startsWith('bytes')) { - - if(!size) { - throw new Error('bytes[] not yet supported in solidity'); - } - - // must be 32 byte slices when in an array - if(arraySize) { - size = 32; - } - - if (size < 1 || size > 32 || size < value.replace(/^0x/i,'').length / 2 ) { - throw new Error('Invalid bytes' + size +' for '+ value); - } - - return utils.rightPad(value, size * 2); - } else if (type.startsWith('uint')) { - - if ((size % 8) || (size < 8) || (size > 256)) { - throw new Error('Invalid uint'+size+' size'); - } - - num = _parseNumber(value); - if (num.bitLength() > size) { - throw new Error('Supplied uint exceeds width: ' + size + ' vs ' + num.bitLength()); - } - - if(num.lt(new BN(0))) { - throw new Error('Supplied uint '+ num.toString() +' is negative'); - } - - return size ? utils.leftPad(num.toString('hex'), size/8 * 2) : num; - } else if (type.startsWith('int')) { - - if ((size % 8) || (size < 8) || (size > 256)) { - throw new Error('Invalid int'+size+' size'); - } - - num = _parseNumber(value); - if (num.bitLength() > size) { - throw new Error('Supplied int exceeds width: ' + size + ' vs ' + num.bitLength()); - } - - if(num.lt(new BN(0))) { - return num.toTwos(size).toString('hex'); - } else { - return size ? utils.leftPad(num.toString('hex'), size/8 * 2) : num; - } - - } else { - // FIXME: support all other types - throw new Error('Unsupported or invalid type: ' + type); - } -}; - - -var _processSolidityEncodePackedArgs = function (arg) { - /*jshint maxcomplexity:false */ - - if(_.isArray(arg)) { - throw new Error('Autodetection of array types is not supported.'); - } - - var type, value = ''; - var hexArg, arraySize; - - // if type is given - if (_.isObject(arg) && (arg.hasOwnProperty('v') || arg.hasOwnProperty('t') || arg.hasOwnProperty('value') || arg.hasOwnProperty('type'))) { - type = arg.hasOwnProperty('t') ? arg.t : arg.type; - value = arg.hasOwnProperty('v') ? arg.v : arg.value; - - // otherwise try to guess the type - } else { - - type = utils.toHex(arg, true); - value = utils.toHex(arg); - - if (!type.startsWith('int') && !type.startsWith('uint')) { - type = 'bytes'; - } - } - - if ((type.startsWith('int') || type.startsWith('uint')) && typeof value === 'string' && !/^(-)?0x/i.test(value)) { - value = new BN(value); - } - - // get the array size - if(_.isArray(value)) { - arraySize = _parseTypeNArray(type); - if(arraySize && value.length !== arraySize) { - throw new Error(type +' is not matching the given array '+ JSON.stringify(value)); - } else { - arraySize = value.length; - } - } - - - if (_.isArray(value)) { - hexArg = value.map(function (val) { - return _solidityPack(type, val, arraySize).toString('hex').replace('0x',''); - }); - return hexArg.join(''); - } else { - hexArg = _solidityPack(type, value, arraySize); - return hexArg.toString('hex').replace('0x',''); - } - -}; - -/** - * Hashes solidity values to a sha3 hash using keccak 256 - * - * @method soliditySha3 - * @return {Object} the sha3 - */ -var soliditySha3 = function () { - /*jshint maxcomplexity:false */ - - var args = Array.prototype.slice.call(arguments); - - var hexArgs = _.map(args, _processSolidityEncodePackedArgs); - - // console.log(args, hexArgs); - // console.log('0x'+ hexArgs.join('')); - - return utils.sha3('0x'+ hexArgs.join('')); -}; - -/** - * Hashes solidity values to a sha3 hash using keccak 256 but does return the hash of value `null` instead of `null` - * - * @method soliditySha3Raw - * @return {Object} the sha3 - */ -var soliditySha3Raw = function () { - return utils.sha3Raw('0x'+ _.map(Array.prototype.slice.call(arguments), _processSolidityEncodePackedArgs).join('')); -}; - -/** - * Encode packed args to hex - * - * @method encodePacked - * @return {String} the hex encoded arguments - */ -var encodePacked = function () { - /*jshint maxcomplexity:false */ - - var args = Array.prototype.slice.call(arguments); - - var hexArgs = _.map(args, _processSolidityEncodePackedArgs); - - return '0x'+ hexArgs.join('').toLowerCase(); -}; - - -module.exports = { - soliditySha3: soliditySha3, - soliditySha3Raw: soliditySha3Raw, - encodePacked: encodePacked -}; diff --git a/packages/web3-utils/src/string_manipulation.ts b/packages/web3-utils/src/string_manipulation.ts new file mode 100644 index 00000000000..b7d0371d0b1 --- /dev/null +++ b/packages/web3-utils/src/string_manipulation.ts @@ -0,0 +1,162 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Numbers } from 'web3-types'; +import { NibbleWidthError } from 'web3-errors'; +import { isHexStrict, validator, utils as validatorUtils, bigintPower } from 'web3-validator'; +import { numberToHex, toHex, toNumber } from './converters.js'; + +/** + * Adds a padding on the left of a string, if value is a integer or bigInt will be converted to a hex string. + * @param value - The value to be padded. + * @param characterAmount - The amount of characters the string should have. + * @param sign - The sign to be added (default is 0). + * @returns The padded string. + * + * @example + * ```ts + * + * console.log(web3.utils.padLeft('0x123', 10)); + * >0x0000000123 + * ``` + */ +export const padLeft = (value: Numbers, characterAmount: number, sign = '0'): string => { + // To avoid duplicate code and circular dependency we will + // use `padLeft` implementation from `web3-validator` + + if (typeof value === 'string') { + if (!isHexStrict(value)) { + return value.padStart(characterAmount, sign); + } + return validatorUtils.padLeft(value, characterAmount, sign); + } + + validator.validate(['int'], [value]); + + return validatorUtils.padLeft(value, characterAmount, sign); +}; + +/** + * Adds a padding on the right of a string, if value is a integer or bigInt will be converted to a hex string. + * @param value - The value to be padded. + * @param characterAmount - The amount of characters the string should have. + * @param sign - The sign to be added (default is 0). + * @returns The padded string. + * + * @example + * ```ts + * console.log(web3.utils.padRight('0x123', 10)); + * > 0x1230000000 + * + * console.log(web3.utils.padRight('0x123', 10, '1')); + * > 0x1231111111 + * ``` + */ +export const padRight = (value: Numbers, characterAmount: number, sign = '0'): string => { + if (typeof value === 'string' && !isHexStrict(value)) { + return value.padEnd(characterAmount, sign); + } + + validator.validate(['int'], [value]); + + const hexString = typeof value === 'string' && isHexStrict(value) ? value : numberToHex(value); + + const prefixLength = hexString.startsWith('-') ? 3 : 2; + return hexString.padEnd(characterAmount + prefixLength, sign); +}; + +/** + * Adds a padding on the right of a string, if value is a integer or bigInt will be converted to a hex string. @alias `padRight` + */ +export const rightPad = padRight; + +/** + * Adds a padding on the left of a string, if value is a integer or bigInt will be converted to a hex string. @alias `padLeft` + */ +export const leftPad = padLeft; + +/** + * Converts a negative number into the two’s complement and return a hexstring of 64 nibbles. + * @param value - The value to be converted. + * @param nibbleWidth - The nibble width of the hex string (default is 64). + * + * @returns The hex string of the two’s complement. + * + * @example + * ```ts + * console.log(web3.utils.toTwosComplement(13, 32)); + * > 0x0000000000000000000000000000000d + * + * console.log(web3.utils.toTwosComplement('-0x1', 32)); + * > 0xffffffffffffffffffffffffffffffff + * + * console.log(web3.utils.toTwosComplement(BigInt('9007199254740992'), 32)); + * > 0x00000000000000000020000000000000 + * ``` + */ +export const toTwosComplement = (value: Numbers, nibbleWidth = 64): string => { + validator.validate(['int'], [value]); + + const val = toNumber(value); + + if (val >= 0) return padLeft(toHex(val), nibbleWidth); + + const largestBit = bigintPower(BigInt(2), BigInt(nibbleWidth * 4)); + if (-val >= largestBit) { + throw new NibbleWidthError(`value: ${value}, nibbleWidth: ${nibbleWidth}`); + } + const updatedVal = BigInt(val); + + const complement = updatedVal + largestBit; + + return padLeft(numberToHex(complement), nibbleWidth); +}; + +/** + * Converts the twos complement into a decimal number or big int. + * @param value - The value to be converted. + * @param nibbleWidth - The nibble width of the hex string (default is 64). + * @returns The decimal number or big int. + * + * @example + * ```ts + * console.log(web3.utils.fromTwosComplement(''0x0000000000000000000000000000000d', 32')); + * > 13 + * + * console.log(web3.utils.fromTwosComplement('0x00000000000000000020000000000000', 32)); + * > 9007199254740992n + * ``` + */ +export const fromTwosComplement = (value: Numbers, nibbleWidth = 64): number | bigint => { + validator.validate(['int'], [value]); + + const val = toNumber(value); + + if (val < 0) return val; + + const largestBit = Math.ceil(Math.log(Number(val)) / Math.log(2)); + + if (largestBit > nibbleWidth * 4) + throw new NibbleWidthError(`value: "${value}", nibbleWidth: "${nibbleWidth}"`); + + // check the largest bit to see if negative + if (nibbleWidth * 4 !== largestBit) return val; + + const complement = bigintPower(BigInt(2), BigInt(nibbleWidth) * BigInt(4)); + + return toNumber(BigInt(val) - complement); +}; diff --git a/packages/web3-utils/src/uint8array.ts b/packages/web3-utils/src/uint8array.ts new file mode 100644 index 00000000000..0f1173b04e7 --- /dev/null +++ b/packages/web3-utils/src/uint8array.ts @@ -0,0 +1,50 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export function uint8ArrayConcat(...parts: Uint8Array[]): Uint8Array { + const length = parts.reduce((prev, part) => { + const agg = prev + part.length; + return agg; + }, 0); + const result = new Uint8Array(length); + let offset = 0; + for (const part of parts) { + result.set(part, offset); + offset += part.length; + } + return result; +} + +/** + * Returns true if the two passed Uint8Arrays have the same content + */ +export function uint8ArrayEquals(a: Uint8Array, b: Uint8Array): boolean { + if (a === b) { + return true; + } + + if (a.byteLength !== b.byteLength) { + return false; + } + + for (let i = 0; i < a.byteLength; i += 1) { + if (a[i] !== b[i]) { + return false; + } + } + + return true; +} diff --git a/packages/web3-utils/src/utils.js b/packages/web3-utils/src/utils.js deleted file mode 100644 index 63afa1c7dee..00000000000 --- a/packages/web3-utils/src/utils.js +++ /dev/null @@ -1,555 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file utils.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -var _ = require('underscore'); -var BN = require('bn.js'); -var numberToBN = require('number-to-bn'); -var utf8 = require('utf8'); -var Hash = require("eth-lib/lib/hash"); -var ethereumBloomFilters = require('ethereum-bloom-filters'); - - - -/** - * Returns true if object is BN, otherwise false - * - * @method isBN - * @param {Object} object - * @return {Boolean} - */ -var isBN = function (object) { - return BN.isBN(object); -}; - -/** - * Returns true if object is BigNumber, otherwise false - * - * @method isBigNumber - * @param {Object} object - * @return {Boolean} - */ -var isBigNumber = function (object) { - return object && object.constructor && object.constructor.name === 'BigNumber'; -}; - -/** - * Takes an input and transforms it into an BN - * - * @method toBN - * @param {Number|String|BN} number, string, HEX string or BN - * @return {BN} BN - */ -var toBN = function(number){ - try { - return numberToBN.apply(null, arguments); - } catch(e) { - throw new Error(e + ' Given value: "'+ number +'"'); - } -}; - - -/** - * Takes and input transforms it into BN and if it is negative value, into two's complement - * - * @method toTwosComplement - * @param {Number|String|BN} number - * @return {String} - */ -var toTwosComplement = function (number) { - return '0x'+ toBN(number).toTwos(256).toString(16, 64); -}; - -/** - * Checks if the given string is an address - * - * @method isAddress - * @param {String} address the given HEX address - * @return {Boolean} - */ -var isAddress = function (address) { - // check if it has the basic requirements of an address - if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { - return false; - // If it's ALL lowercase or ALL upppercase - } else if (/^(0x|0X)?[0-9a-f]{40}$/.test(address) || /^(0x|0X)?[0-9A-F]{40}$/.test(address)) { - return true; - // Otherwise check each case - } else { - return checkAddressChecksum(address); - } -}; - - - -/** - * Checks if the given string is a checksummed address - * - * @method checkAddressChecksum - * @param {String} address the given HEX address - * @return {Boolean} - */ -var checkAddressChecksum = function (address) { - // Check each case - address = address.replace(/^0x/i,''); - var addressHash = sha3(address.toLowerCase()).replace(/^0x/i,''); - - for (var i = 0; i < 40; i++ ) { - // the nth letter should be uppercase if the nth digit of casemap is 1 - if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { - return false; - } - } - return true; -}; - -/** - * Should be called to pad string to expected length - * - * @method leftPad - * @param {String} string to be padded - * @param {Number} chars that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var leftPad = function (string, chars, sign) { - var hasPrefix = /^0x/i.test(string) || typeof string === 'number'; - string = string.toString(16).replace(/^0x/i,''); - - var padding = (chars - string.length + 1 >= 0) ? chars - string.length + 1 : 0; - - return (hasPrefix ? '0x' : '') + new Array(padding).join(sign ? sign : "0") + string; -}; - -/** - * Should be called to pad string to expected length - * - * @method rightPad - * @param {String} string to be padded - * @param {Number} chars that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var rightPad = function (string, chars, sign) { - var hasPrefix = /^0x/i.test(string) || typeof string === 'number'; - string = string.toString(16).replace(/^0x/i,''); - - var padding = (chars - string.length + 1 >= 0) ? chars - string.length + 1 : 0; - - return (hasPrefix ? '0x' : '') + string + (new Array(padding).join(sign ? sign : "0")); -}; - - -/** - * Should be called to get hex representation (prefixed by 0x) of utf8 string - * - * @method utf8ToHex - * @param {String} str - * @returns {String} hex representation of input string - */ -var utf8ToHex = function(str) { - str = utf8.encode(str); - var hex = ""; - - // remove \u0000 padding from either side - str = str.replace(/^(?:\u0000)*/,''); - str = str.split("").reverse().join(""); - str = str.replace(/^(?:\u0000)*/,''); - str = str.split("").reverse().join(""); - - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - // if (code !== 0) { - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - // } - } - - return "0x" + hex; -}; - -/** - * Should be called to get utf8 from it's hex representation - * - * @method hexToUtf8 - * @param {String} hex - * @returns {String} ascii string representation of hex value - */ -var hexToUtf8 = function(hex) { - if (!isHexStrict(hex)) - throw new Error('The parameter "'+ hex +'" must be a valid HEX string.'); - - var str = ""; - var code = 0; - hex = hex.replace(/^0x/i,''); - - // remove 00 padding from either side - hex = hex.replace(/^(?:00)*/,''); - hex = hex.split("").reverse().join(""); - hex = hex.replace(/^(?:00)*/,''); - hex = hex.split("").reverse().join(""); - - var l = hex.length; - - for (var i=0; i < l; i+=2) { - code = parseInt(hex.substr(i, 2), 16); - // if (code !== 0) { - str += String.fromCharCode(code); - // } - } - - return utf8.decode(str); -}; - - -/** - * Converts value to it's number representation - * - * @method hexToNumber - * @param {String|Number|BN} value - * @return {String} - */ -var hexToNumber = function (value) { - if (!value) { - return value; - } - - if (_.isString(value) && !isHexStrict(value)) { - throw new Error('Given value "'+value+'" is not a valid hex string.'); - } - - return toBN(value).toNumber(); -}; - -/** - * Converts value to it's decimal representation in string - * - * @method hexToNumberString - * @param {String|Number|BN} value - * @return {String} - */ -var hexToNumberString = function (value) { - if (!value) return value; - - if (_.isString(value) && !isHexStrict(value)) { - throw new Error('Given value "'+value+'" is not a valid hex string.'); - } - - return toBN(value).toString(10); -}; - - -/** - * Converts value to it's hex representation - * - * @method numberToHex - * @param {String|Number|BN} value - * @return {String} - */ -var numberToHex = function (value) { - if (_.isNull(value) || _.isUndefined(value)) { - return value; - } - - if (!isFinite(value) && !isHexStrict(value)) { - throw new Error('Given input "'+value+'" is not a number.'); - } - - var number = toBN(value); - var result = number.toString(16); - - return number.lt(new BN(0)) ? '-0x' + result.substr(1) : '0x' + result; -}; - - -/** - * Convert a byte array to a hex string - * - * Note: Implementation from crypto-js - * - * @method bytesToHex - * @param {Array} bytes - * @return {String} the hex string - */ -var bytesToHex = function(bytes) { - for (var hex = [], i = 0; i < bytes.length; i++) { - /* jshint ignore:start */ - hex.push((bytes[i] >>> 4).toString(16)); - hex.push((bytes[i] & 0xF).toString(16)); - /* jshint ignore:end */ - } - return '0x'+ hex.join(""); -}; - -/** - * Convert a hex string to a byte array - * - * Note: Implementation from crypto-js - * - * @method hexToBytes - * @param {string} hex - * @return {Array} the byte array - */ -var hexToBytes = function(hex) { - hex = hex.toString(16); - - if (!isHexStrict(hex)) { - throw new Error('Given value "'+ hex +'" is not a valid hex string.'); - } - - hex = hex.replace(/^0x/i,''); - - for (var bytes = [], c = 0; c < hex.length; c += 2) - bytes.push(parseInt(hex.substr(c, 2), 16)); - return bytes; -}; - -/** - * Auto converts any given value into it's hex representation. - * - * And even stringifys objects before. - * - * @method toHex - * @param {String|Number|BN|Object|Buffer} value - * @param {Boolean} returnType - * @return {String} - */ -var toHex = function (value, returnType) { - /*jshint maxcomplexity: false */ - - if (isAddress(value)) { - return returnType ? 'address' : '0x'+ value.toLowerCase().replace(/^0x/i,''); - } - - if (_.isBoolean(value)) { - return returnType ? 'bool' : value ? '0x01' : '0x00'; - } - - if (Buffer.isBuffer(value)) { - return '0x' + value.toString('hex'); - } - - if (_.isObject(value) && !isBigNumber(value) && !isBN(value)) { - return returnType ? 'string' : utf8ToHex(JSON.stringify(value)); - } - - // if its a negative number, pass it through numberToHex - if (_.isString(value)) { - if (value.indexOf('-0x') === 0 || value.indexOf('-0X') === 0) { - return returnType ? 'int256' : numberToHex(value); - } else if(value.indexOf('0x') === 0 || value.indexOf('0X') === 0) { - return returnType ? 'bytes' : value; - } else if (!isFinite(value)) { - return returnType ? 'string' : utf8ToHex(value); - } - } - - return returnType ? (value < 0 ? 'int256' : 'uint256') : numberToHex(value); -}; - - -/** - * Check if string is HEX, requires a 0x in front - * - * @method isHexStrict - * @param {String} hex to be checked - * @returns {Boolean} - */ -var isHexStrict = function (hex) { - return ((_.isString(hex) || _.isNumber(hex)) && /^(-)?0x[0-9a-f]*$/i.test(hex)); -}; - -/** - * Check if string is HEX - * - * @method isHex - * @param {String} hex to be checked - * @returns {Boolean} - */ -var isHex = function (hex) { - return ((_.isString(hex) || _.isNumber(hex)) && /^(-0x|0x)?[0-9a-f]*$/i.test(hex)); -}; - -/** - * Remove 0x prefix from string - * - * @method stripHexPrefix - * @param {String} str to be checked - * @returns {String} - */ -var stripHexPrefix = function (str) { - if (str !== 0 && isHex(str)) - return str.replace(/^(-)?0x/i, '$1') - return str; -}; - -/** - * Returns true if given string is a valid Ethereum block header bloom. - * - * @method isBloom - * @param {String} bloom encoded bloom filter - * @return {Boolean} - */ -var isBloom = function (bloom) { - return ethereumBloomFilters.isBloom(bloom); -}; - -/** - * Returns true if the ethereum users address is part of the given bloom - * note: false positives are possible. - * - * @method isUserEthereumAddressInBloom - * @param {String} ethereumAddress encoded bloom filter - * @param {String} bloom ethereum addresss - * @return {Boolean} - */ -var isUserEthereumAddressInBloom = function (bloom, ethereumAddress) { - return ethereumBloomFilters.isUserEthereumAddressInBloom(bloom, ethereumAddress); -}; - -/** - * Returns true if the contract address is part of the given bloom - * note: false positives are possible. - * - * @method isUserEthereumAddressInBloom - * @param {String} bloom encoded bloom filter - * @param {String} contractAddress contract addresss - * @return {Boolean} - */ -var isContractAddressInBloom = function (bloom, contractAddress) { - return ethereumBloomFilters.isContractAddressInBloom(bloom, contractAddress); -}; - -/** - * Returns true if given string is a valid log topic. - * - * @method isTopic - * @param {String} topic encoded topic - * @return {Boolean} - */ -var isTopic = function (topic) { - return ethereumBloomFilters.isTopic(topic); -}; - -/** - * Returns true if the topic is part of the given bloom - * note: false positives are possible. - * - * @method isTopicInBloom - * @param {String} bloom encoded bloom filter - * @param {String} topic encoded topic - * @return {Boolean} - */ -var isTopicInBloom = function (bloom, topic) { - return ethereumBloomFilters.isTopicInBloom(bloom, topic); -}; - -/** - * Returns true if the value is part of the given bloom - * note: false positives are possible. - * - * @method isInBloom - * @param {String} bloom encoded bloom filter - * @param {String | Uint8Array} topic encoded value - * @return {Boolean} - */ -var isInBloom = function (bloom, topic) { - return ethereumBloomFilters.isInBloom(bloom, topic); -}; - -/** - * Hashes values to a sha3 hash using keccak 256 - * - * To hash a HEX string the hex must have 0x in front. - * - * @method sha3 - * @return {String} the sha3 string - */ -var SHA3_NULL_S = '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'; - -var sha3 = function (value) { - if (isBN(value)) { - value = value.toString(); - } - - if (isHexStrict(value) && /^0x/i.test((value).toString())) { - value = hexToBytes(value); - } - - var returnValue = Hash.keccak256(value); // jshint ignore:line - - if(returnValue === SHA3_NULL_S) { - return null; - } else { - return returnValue; - } -}; -// expose the under the hood keccak256 -sha3._Hash = Hash; - -/** - * @method sha3Raw - * - * @param value - * - * @returns {string} - */ -var sha3Raw = function(value) { - value = sha3(value); - - if (value === null) { - return SHA3_NULL_S; - } - - return value; -}; - - -module.exports = { - BN: BN, - isBN: isBN, - isBigNumber: isBigNumber, - toBN: toBN, - isAddress: isAddress, - isBloom: isBloom, - isUserEthereumAddressInBloom: isUserEthereumAddressInBloom, - isContractAddressInBloom: isContractAddressInBloom, - isTopic: isTopic, - isTopicInBloom: isTopicInBloom, - isInBloom: isInBloom, - checkAddressChecksum: checkAddressChecksum, - utf8ToHex: utf8ToHex, - hexToUtf8: hexToUtf8, - hexToNumber: hexToNumber, - hexToNumberString: hexToNumberString, - numberToHex: numberToHex, - toHex: toHex, - hexToBytes: hexToBytes, - bytesToHex: bytesToHex, - isHex: isHex, - isHexStrict: isHexStrict, - stripHexPrefix: stripHexPrefix, - leftPad: leftPad, - rightPad: rightPad, - toTwosComplement: toTwosComplement, - sha3: sha3, - sha3Raw: sha3Raw -}; diff --git a/packages/web3-utils/src/uuid.ts b/packages/web3-utils/src/uuid.ts new file mode 100644 index 00000000000..369cdc86c60 --- /dev/null +++ b/packages/web3-utils/src/uuid.ts @@ -0,0 +1,55 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { bytesToHex } from './converters.js'; +import { randomBytes } from './random.js'; + +/** + * Generate a version 4 (random) uuid + * https://github.com/uuidjs/uuid/blob/main/src/v4.js#L5 + * @returns - A version 4 uuid of the form xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx + * @example + * ```ts + * console.log(web3.utils.uuidV4()); + * > "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed" + * ``` + */ +export const uuidV4 = (): string => { + const bytes = randomBytes(16); + + // https://github.com/ethers-io/ethers.js/blob/ce8f1e4015c0f27bf178238770b1325136e3351a/packages/json-wallets/src.ts/utils.ts#L54 + // Section: 4.1.3: + // - time_hi_and_version[12:16] = 0b0100 + /* eslint-disable-next-line */ + bytes[6] = (bytes[6] & 0x0f) | 0x40; + + // Section 4.4 + // - clock_seq_hi_and_reserved[6] = 0b0 + // - clock_seq_hi_and_reserved[7] = 0b1 + /* eslint-disable-next-line */ + bytes[8] = (bytes[8] & 0x3f) | 0x80; + + const hexString = bytesToHex(bytes); + + return [ + hexString.substring(2, 10), + hexString.substring(10, 14), + hexString.substring(14, 18), + hexString.substring(18, 22), + hexString.substring(22, 34), + ].join('-'); +}; diff --git a/packages/web3-utils/src/validation.ts b/packages/web3-utils/src/validation.ts new file mode 100644 index 00000000000..37d5fb5257b --- /dev/null +++ b/packages/web3-utils/src/validation.ts @@ -0,0 +1,172 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { InvalidBlockError } from 'web3-errors'; +import { + checkAddressCheckSum as checkAddressCheckSumValidator, + isAddress as isAddressValidator, + isBlockTag, + isBloom as isBloomValidator, + isContractAddressInBloom as isContractAddressInBloomValidator, + isHex as isHexValidator, + isHexStrict as isHexStrictValidator, + isInBloom as isInBloomValidator, + isNullish as isNullishValidator, + isTopic as isTopicValidator, + isTopicInBloom as isTopicInBloomValidator, + isUserEthereumAddressInBloom as isUserEthereumAddressInBloomValidator, +} from 'web3-validator'; +import { BlockNumberOrTag, BlockTags } from 'web3-types'; + +/** + * @deprecated Will be removed in next release. Please use `web3-validator` package instead. + */ +export const isHexStrict = isHexStrictValidator; + +/** + * returns true if input is a hexstring, number or bigint + * + * @deprecated Will be removed in next release. Please use `web3-validator` package instead. + */ +export const isHex = isHexValidator; + +/** + * Checks the checksum of a given address. Will also return false on non-checksum addresses. + * + * @deprecated Will be removed in next release. Please use `web3-validator` package instead. + */ +export const checkAddressCheckSum = checkAddressCheckSumValidator; + +/** + * Checks if a given string is a valid Ethereum address. It will also check the checksum, if the address has upper and lowercase letters. + * + * @deprecated Will be removed in next release. Please use `web3-validator` package instead. + */ +export const isAddress = isAddressValidator; + +/** + * Returns true if the bloom is a valid bloom + * https://github.com/joshstevens19/ethereum-bloom-filters/blob/fbeb47b70b46243c3963fe1c2988d7461ef17236/src/index.ts#L7 + * + * @deprecated Will be removed in next release. Please use `web3-validator` package instead. + */ +export const isBloom = isBloomValidator; + +/** + * Returns true if the value is part of the given bloom + * note: false positives are possible. + * + * @deprecated Will be removed in next release. Please use `web3-validator` package instead. + */ +export const isInBloom = isInBloomValidator; + +/** + * Returns true if the ethereum users address is part of the given bloom note: false positives are possible. + * + * @deprecated Will be removed in next release. Please use `web3-validator` package instead. + */ +export const isUserEthereumAddressInBloom = isUserEthereumAddressInBloomValidator; + +/** + * Returns true if the contract address is part of the given bloom. + * note: false positives are possible. + * + * @deprecated Will be removed in next release. Please use `web3-validator` package instead. + */ +export const isContractAddressInBloom = isContractAddressInBloomValidator; + +/** + * Checks if its a valid topic + * + * @deprecated Will be removed in next release. Please use `web3-validator` package instead. + */ +export const isTopic = isTopicValidator; + +/** + * Returns true if the topic is part of the given bloom. + * note: false positives are possible. + * + * @deprecated Will be removed in next release. Please use `web3-validator` package instead. + */ +export const isTopicInBloom = isTopicInBloomValidator; + +/** + * Compares between block A and block B + * @param blockA - Block number or string + * @param blockB - Block number or string + * + * @returns - Returns -1 if a \< b, returns 1 if a \> b and returns 0 if a == b + * + * @example + * ```ts + * console.log(web3.utils.compareBlockNumbers('latest', 'pending')); + * > -1 + * + * console.log(web3.utils.compareBlockNumbers(12, 11)); + * > 1 + * ``` + */ +export const compareBlockNumbers = (blockA: BlockNumberOrTag, blockB: BlockNumberOrTag) => { + const isABlockTag = typeof blockA === 'string' && isBlockTag(blockA); + const isBBlockTag = typeof blockB === 'string' && isBlockTag(blockB); + + if ( + blockA === blockB || + ((blockA === 'earliest' || blockA === 0) && (blockB === 'earliest' || blockB === 0)) // only exception compare blocktag with number + ) { + return 0; + } + if (blockA === 'earliest' && blockB > 0) { + return -1; + } + if (blockB === 'earliest' && blockA > 0) { + return 1; + } + + if (isABlockTag && isBBlockTag) { + // Increasing order: earliest, finalized , safe, latest, pending + const tagsOrder = { + [BlockTags.EARLIEST as string]: 1, + [BlockTags.FINALIZED as string]: 2, + [BlockTags.SAFE as string]: 3, + [BlockTags.LATEST as string]: 4, + [BlockTags.PENDING as string]: 5, + }; + + if (tagsOrder[blockA] < tagsOrder[blockB]) { + return -1; + } + + return 1; + } + if ((isABlockTag && !isBBlockTag) || (!isABlockTag && isBBlockTag)) { + throw new InvalidBlockError('Cannot compare blocktag with provided non-blocktag input.'); + } + + const bigIntA = BigInt(blockA); + const bigIntB = BigInt(blockB); + + if (bigIntA < bigIntB) { + return -1; + } + if (bigIntA === bigIntB) { + return 0; + } + return 1; +}; + +export const isNullish = isNullishValidator; diff --git a/packages/web3-utils/src/web3_deferred_promise.ts b/packages/web3-utils/src/web3_deferred_promise.ts new file mode 100644 index 00000000000..01805b774be --- /dev/null +++ b/packages/web3-utils/src/web3_deferred_promise.ts @@ -0,0 +1,149 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { OperationTimeoutError } from 'web3-errors'; +import { Web3DeferredPromiseInterface } from 'web3-types'; +import { Timeout } from './promise_helpers.js'; + +/** + * The class is a simple implementation of a deferred promise with optional timeout functionality, + * which can be useful when dealing with asynchronous tasks. + * + */ +export class Web3DeferredPromise implements Promise, Web3DeferredPromiseInterface { + // public tag to treat object as promise by different libs + // eslint-disable-next-line @typescript-eslint/prefer-as-const + public [Symbol.toStringTag]: 'Promise' = 'Promise'; + + private readonly _promise: Promise; + private _resolve!: (value: T | PromiseLike) => void; + private _reject!: (reason?: unknown) => void; + private _state: 'pending' | 'fulfilled' | 'rejected' = 'pending'; + private _timeoutId?: Timeout; + private readonly _timeoutInterval?: number; + private readonly _timeoutMessage: string; + + /** + * + * @param timeout - (optional) The timeout in milliseconds. + * @param eagerStart - (optional) If true, the timer starts as soon as the promise is created. + * @param timeoutMessage - (optional) The message to include in the timeout erro that is thrown when the promise times out. + */ + public constructor( + { + timeout, + eagerStart, + timeoutMessage, + }: { timeout: number; eagerStart: boolean; timeoutMessage: string } = { + timeout: 0, + eagerStart: false, + timeoutMessage: 'DeferredPromise timed out', + }, + ) { + this._promise = new Promise((resolve, reject) => { + this._resolve = resolve; + this._reject = reject; + }); + + this._timeoutMessage = timeoutMessage; + this._timeoutInterval = timeout; + + if (eagerStart) { + this.startTimer(); + } + } + /** + * Returns the current state of the promise. + * @returns 'pending' | 'fulfilled' | 'rejected' + */ + public get state(): 'pending' | 'fulfilled' | 'rejected' { + return this._state; + } + /** + * + * @param onfulfilled - (optional) The callback to execute when the promise is fulfilled. + * @param onrejected - (optional) The callback to execute when the promise is rejected. + * @returns + */ + public async then( + onfulfilled?: (value: T) => TResult1 | PromiseLike, + onrejected?: (reason: unknown) => TResult2 | PromiseLike, + ): Promise { + return this._promise.then(onfulfilled, onrejected); + } + /** + * + * @param onrejected - (optional) The callback to execute when the promise is rejected. + * @returns + */ + public async catch( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + onrejected?: (reason: any) => TResult | PromiseLike, + ): Promise { + return this._promise.catch(onrejected); + } + + /** + * + * @param onfinally - (optional) The callback to execute when the promise is settled (fulfilled or rejected). + * @returns + */ + public async finally(onfinally?: (() => void) | undefined): Promise { + return this._promise.finally(onfinally); + } + + /** + * Resolves the current promise. + * @param value - The value to resolve the promise with. + */ + public resolve(value: T | PromiseLike): void { + this._resolve(value); + this._state = 'fulfilled'; + this._clearTimeout(); + } + + /** + * Rejects the current promise. + * @param reason - The reason to reject the promise with. + */ + public reject(reason?: unknown): void { + this._reject(reason); + this._state = 'rejected'; + this._clearTimeout(); + } + + /** + * Starts the timeout timer for the promise. + */ + public startTimer() { + if (this._timeoutInterval && this._timeoutInterval > 0) { + this._timeoutId = setTimeout(this._checkTimeout.bind(this), this._timeoutInterval); + } + } + + private _checkTimeout() { + if (this._state === 'pending' && this._timeoutId) { + this.reject(new OperationTimeoutError(this._timeoutMessage)); + } + } + + private _clearTimeout() { + if (this._timeoutId) { + clearTimeout(this._timeoutId); + } + } +} diff --git a/packages/web3-utils/src/web3_eip1193_provider.ts b/packages/web3-utils/src/web3_eip1193_provider.ts new file mode 100644 index 00000000000..15f132f6215 --- /dev/null +++ b/packages/web3-utils/src/web3_eip1193_provider.ts @@ -0,0 +1,116 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + EthExecutionAPI, + HexString, + ProviderConnectInfo, + Web3APIMethod, + Web3APIPayload, + Web3APISpec, + Web3BaseProvider, +} from 'web3-types'; +import { EventEmitter } from 'events'; +import { EIP1193ProviderRpcError } from 'web3-errors'; +import { toPayload } from './json_rpc.js'; + +/** + * This is an abstract class, which extends {@link Web3BaseProvider} class. This class is used to implement a provider that adheres to the EIP-1193 standard for Ethereum providers. + */ +export abstract class Eip1193Provider< + API extends Web3APISpec = EthExecutionAPI, +> extends Web3BaseProvider { + protected readonly _eventEmitter: EventEmitter = new EventEmitter(); + private _chainId: HexString = ''; + private _accounts: HexString[] = []; + + private async _getChainId(): Promise { + const data = await (this as Web3BaseProvider).request< + Web3APIMethod, + ResponseType + >( + toPayload({ + method: 'eth_chainId', + params: [], + }) as Web3APIPayload>, + ); + return data?.result ?? ''; + } + + private async _getAccounts(): Promise { + const data = await (this as Web3BaseProvider).request, HexString[]>( + toPayload({ + method: 'eth_accounts', + params: [], + }) as Web3APIPayload>, + ); + return data?.result ?? []; + } + + protected _onConnect() { + Promise.all([ + this._getChainId() + .then(chainId => { + if (chainId !== this._chainId) { + this._chainId = chainId; + this._eventEmitter.emit('chainChanged', this._chainId); + } + }) + .catch(err => { + // todo: add error handler + console.error(err); + }), + + this._getAccounts() + .then(accounts => { + if ( + !( + this._accounts.length === accounts.length && + accounts.every(v => accounts.includes(v)) + ) + ) { + this._accounts = accounts; + this._onAccountsChanged(); + } + }) + .catch(err => { + // todo: add error handler + // eslint-disable-next-line no-console + console.error(err); + }), + ]) + .then(() => + this._eventEmitter.emit('connect', { + chainId: this._chainId, + } as ProviderConnectInfo), + ) + .catch(err => { + // todo: add error handler + // eslint-disable-next-line no-console + console.error(err); + }); + } + + // todo this must be ProvideRpcError with a message too + protected _onDisconnect(code: number, data?: unknown) { + this._eventEmitter.emit('disconnect', new EIP1193ProviderRpcError(code, data)); + } + + private _onAccountsChanged() { + // get chainId and safe to local + this._eventEmitter.emit('accountsChanged', this._accounts); + } +} diff --git a/packages/web3-utils/test/.eslintrc.js b/packages/web3-utils/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-utils/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-utils/test/config/jest.config.js b/packages/web3-utils/test/config/jest.config.js new file mode 100644 index 00000000000..4a60f95b353 --- /dev/null +++ b/packages/web3-utils/test/config/jest.config.js @@ -0,0 +1,43 @@ +module.exports = { + globals: { + 'ts-jest': { + tsconfig: './test/tsconfig.json', + }, + }, + rootDir: '../..', + testMatch: ['/test/**/?(*.)+(spec|test).+(ts|tsx|js)'], + setupFilesAfterEnv: ['/test/config/setup.js'], + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + verbose: false, + collectCoverage: false, + coverageReporters: ['json'], + coverageDirectory: '.coverage', + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, +}; diff --git a/packages/web3-utils/test/config/setup.js b/packages/web3-utils/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-utils/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-utils/test/fixtures/accounts.json b/packages/web3-utils/test/fixtures/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3-utils/test/fixtures/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3-utils/test/fixtures/converters.ts b/packages/web3-utils/test/fixtures/converters.ts new file mode 100644 index 00000000000..42d992ec34a --- /dev/null +++ b/packages/web3-utils/test/fixtures/converters.ts @@ -0,0 +1,344 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Address, Bytes, HexString, Numbers, ValueTypes } from 'web3-types'; +import { EtherUnits, hexToBytes } from '../../src/converters'; + +export const bytesToHexValidData: [Bytes, HexString][] = [ + [new Uint8Array([72]), '0x48'], + [new Uint8Array([72, 12]), '0x480c'], + [new Uint8Array(hexToBytes('0c12')), '0x0c12'], + ['0x9c12', '0x9c12'], + ['0X12c6', '0x12c6'], +]; + +export const bytesToHexInvalidData: [any, string][] = [ + [[9.5, 12.9], 'value "[9.5,12.9]" at "/0" must pass "bytes" validation'], + [[-72, 12], 'value "[-72,12]" at "/0" must pass "bytes" validation'], + [[567, 10098], 'value "[567,10098]" at "/0" must pass "bytes" validation'], + [[786, 12, 34, -2, 3], 'value "[786,12,34,-2,3]" at "/0" must pass "bytes" validation'], + ['0x0c1g', 'value "0x0c1g" at "/0" must pass "bytes" validation'], + ['0c1g', 'value "0c1g" at "/0" must pass "bytes" validation'], + ['0x123', 'value "0x123" at "/0" must pass "bytes" validation'], + ['data', 'value "data" at "/0" must pass "bytes" validation'], + [12, 'value "12" at "/0" must pass "bytes" validation'], + [['string'], 'value "["string"]" at "/0" must pass "bytes" validation'], + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + [null, 'value "null" at "/0" must pass "bytes" validation'], + [undefined, 'Web3 validator found 1 error[s]:\nvalue at "/0" is required'], + [{}, 'value "{}" at "/0" must pass "bytes" validation'], + ['1', 'value "1" at "/0" must pass "bytes" validation'], + ['0', 'value "0" at "/0" must pass "bytes" validation'], +]; + +export const hexToBytesValidData: [HexString, Uint8Array][] = [ + ['0x48', new Uint8Array([72])], + ['0x3772', new Uint8Array([55, 114])], + ['0x480c', new Uint8Array([72, 12])], + ['0x0c12', new Uint8Array([12, 18])], + ['0x9c12', new Uint8Array([156, 18])], + ['0X12c6', new Uint8Array([18, 198])], +]; + +export const hexToBytesInvalidData: [any, string][] = [ + [[9.5, 12.9], 'value "[9.5,12.9]" at "/0" must pass "bytes" validation'], + [[-72, 12], 'value "[-72,12]" at "/0" must pass "bytes" validation'], + [[567, 10098], 'value "[567,10098]" at "/0" must pass "bytes" validation'], + [[786, 12, 34, -2, 3], 'value "[786,12,34,-2,3]" at "/0" must pass "bytes" validation'], + ['0x0c1g', 'value "0x0c1g" at "/0" must pass "bytes" validation'], + ['0c1g', 'value "0x0c1g" at "/0" must pass "bytes" validation'], + ['0x123', 'value "0x123" at "/0" must pass "bytes" validation'], + ['data', 'value "0xdata" at "/0" must pass "bytes" validation'], + [12, 'value "12" at "/0" must pass "bytes" validation'], + [['string'], 'value "["string"]" at "/0" must pass "bytes" validation'], + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + [null, 'Web3 validator found 1 error[s]:\nvalue "null" at "/0" must pass "bytes" validation'], + [undefined, 'Web3 validator found 1 error[s]:\nvalue at "/0" is required'], + [{}, 'value "{}" at "/0" must pass "bytes" validation'], +]; + +export const numberToHexValidData: [Numbers, HexString][] = [ + [1, '0x1'], + [255, '0xff'], + [256, '0x100'], + [54, '0x36'], + [BigInt(12), '0xc'], + ['768', '0x300'], + ['-768', '-0x300'], + [-255, '-0xff'], + ['0xFF0', '0xff0'], + ['-0xa0', '-0xa0'], + [0xff, '0xff'], + [-0xff, '-0xff'], +]; + +export const numberToHexstrictValidData: [Numbers, HexString][] = [ + [1, '0x01'], + [255, '0xff'], + [256, '0x0100'], + [54, '0x36'], + [BigInt(12), '0x0c'], + ['768', '0x0300'], + ['-768', '-0x0300'], + [-255, '-0xff'], + ['0xFF0', '0x0ff0'], + ['-0xa0', '-0xa0'], + [0xff, '0xff'], + [-0xff, '-0xff'], +]; + +export const numberToHexInvalidData: [any, string][] = [ + [12.2, 'value "12.2" at "/0" must pass "int" validation'], + ['0xag', 'value "0xag" at "/0" must pass "int" validation'], + ['122g', 'value "122g" at "/0" must pass "int" validation'], + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + [null, 'value "null" at "/0" must pass "int" validation'], + [undefined, 'Web3 validator found 1 error[s]:\nvalue at "/0" is required'], + [{}, 'value "{}" at "/0" must pass "int" validation'], +]; + +export const hexToNumberValidData: [HexString, Numbers][] = [ + ['0x1', 1], + ['0xff', 255], + ['0x100', 256], + ['0x36', 54], + ['0xc', 12], + ['0x300', 768], + ['-0x300', -768], + ['-0xff', -255], + ['0XFF0', 4080], + ['-0xa0', -160], + ['0x1fffffffffffff', 9007199254740991], // Number.MAX_SAFE_INTEGER + ['0x20000000000000', BigInt('9007199254740992')], // Number.MAX_SAFE_INTEGER + 1 + ['-0x1fffffffffffff', -9007199254740991], // Number.MIN_SAFE_INTEGER + ['-0x20000000000000', BigInt('-9007199254740992')], // Number.MIN_SAFE_INTEGER - 1 +]; + +export const hexToNumberInvalidData: [HexString, string][] = [ + ['1a', 'value "1a" at "/0" must pass "hex" validation'], + ['0xffdg', 'value "0xffdg" at "/0" must pass "hex" validation'], + ['xfff', 'value "xfff" at "/0" must pass "hex" validation'], + ['-123', 'value "-123" at "/0" must pass "hex" validation'], + ['-9x123', 'value "-9x123" at "/0" must pass "hex" validation'], +]; + +export const utf8ToHexValidData: [string, HexString][] = [ + ['I have 100£', '0x49206861766520313030c2a3'], + ['I \u1234data', '0x4920e188b464617461'], + ['I ♥ data', '0x4920e299a52064617461'], + ['I \u0000 data', '0x4920002064617461'], + ['\u0000 null suffix', '0x206e756c6c20737566666978'], + ['null prefix\u0000', '0x6e756c6c20707265666978'], + ['\u0000', '0x'], +]; + +export const utf8ToHexInvalidData: [any, string][] = [ + [12, 'value "12" at "/0" must pass "string" validation'], + [BigInt(12), 'value "12" at "/0" must pass "string" validation'], + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + [null, 'value "null" at "/0" must pass "string" validation'], + [undefined, 'Web3 validator found 1 error[s]:\nvalue at "/0" is required'], + [{}, 'value "{}" at "/0" must pass "string" validation'], + [true, 'value "true" at "/0" must pass "string" validation'], + [false, 'value "false" at "/0" must pass "string" validation'], +]; + +export const hexToUtf8ValidData: [HexString, string][] = [ + ['0x49206861766520313030c2a3', 'I have 100£'], + ['0x4920e188b464617461', 'I \u1234data'], + ['0x4920e299a52064617461', 'I ♥ data'], + ['0x4920002064617461', 'I \u0000 data'], + ['0x206e756c6c20737566666978', ' null suffix'], + ['0x6e756c6c20707265666978', 'null prefix'], + ['4d6172696e', 'Marin'], +]; + +export const toUtf8ValidData: [string | Uint8Array, string][] = [ + ...hexToUtf8ValidData, + [hexToBytes('0x206e756c6c20737566666978'), ' null suffix'], + [hexToBytes('0x4920002064617461'), 'I \u0000 data'], + [hexToBytes('0x49206861766520313030c2a3'), 'I have 100£'], +]; + +export const hexToUtf8InvalidData: [any, string][] = [ + [ + '0x4920686176652031303g0c2a3', + 'value "0x4920686176652031303g0c2a3" at "/0" must pass "bytes" validation', + ], + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + [null, 'value "null" at "/0" must pass "bytes" validation'], + [undefined, 'Web3 validator found 1 error[s]:\nvalue at "/0" is required'], + [{}, 'value "{}" at "/0" must pass "bytes" validation'], + [true, 'value "true" at "/0" must pass "bytes" validation'], +]; + +export const asciiToHexValidData: [string, HexString][] = [ + ['I have 100', '0x49206861766520313030'], + ['I \u0001data', '0x49200164617461'], + ['I data', '0x492064617461'], + ['I \u0000 data', '0x4920002064617461'], + ['\u0000 null suffix', '0x00206e756c6c20737566666978'], + ['null prefix\u0000', '0x6e756c6c2070726566697800'], + ['\u0000', '0x00'], + ['', '0x'], +]; + +export const hexToAsciiValidData: [string, HexString][] = [ + ['0x49206861766520313030', 'I have 100'], + ['0x49203464617461', 'I 4data'], + ['0x492064617461', 'I data'], + ['0x4920002064617461', 'I \u0000 data'], + ['0x00206e756c6c20737566666978', '\u0000 null suffix'], + ['0x6e756c6c2070726566697800', 'null prefix\u0000'], + ['0x00', '\u0000'], + ['0x', ''], +]; + +export const toHexValidData: [Numbers | Bytes | Address | boolean, [HexString, ValueTypes]][] = [ + [1, ['0x1', 'uint256']], + [255, ['0xff', 'uint256']], + [256, ['0x100', 'uint256']], + [BigInt(12), ['0xc', 'bigint']], + ['768', ['0x373638', 'string']], + ['-768', ['0x2d373638', 'string']], + [-255, ['-0xff', 'int256']], + ['I have 100£', ['0x49206861766520313030c2a3', 'string']], + ['I \u0000 data', ['0x4920002064617461', 'string']], + ['\u0000 null suffix', ['0x206e756c6c20737566666978', 'string']], + ['null prefix\u0000', ['0x6e756c6c20707265666978', 'string']], + ['\u0000', ['0x', 'string']], + [true, ['0x01', 'bool']], + [false, ['0x00', 'bool']], + ['0x123c', ['0x123c', 'bytes']], + [ + '0x72fdb1c1ddd4c67804f42b93de95cf6a8c51d2d1', + ['0x72fdb1c1ddd4c67804f42b93de95cf6a8c51d2d1', 'address'], + ], + ['-0x01', ['-0x1', 'int256']], + ['123c', ['0x123c', 'bytes']], +]; + +export const toHexInvalidData: [any, string][] = [ + [undefined, 'Invalid value given "undefined". Error: can not be converted to hex.'], +]; + +const conversionBaseData: [[Numbers, EtherUnits], string][] = [ + [[0, 'wei'], '0'], + [[123, 'wei'], '123'], + [['123', 'wei'], '123'], + [[BigInt(123), 'wei'], '123'], + [['1000', 'wei'], '1000'], + [['1', 'kwei'], '0.001'], + [['1', 'mwei'], '0.000001'], + [['1', 'gwei'], '0.000000001'], + [['1', 'micro'], '0.000000000001'], + [['1', 'milli'], '0.000000000000001'], + [['1', 'ether'], '0.000000000000000001'], + [['1', 'kether'], '0.000000000000000000001'], + [['1', 'mether'], '0.000000000000000000000001'], + [['1', 'gether'], '0.000000000000000000000000001'], + [['1', 'tether'], '0.000000000000000000000000000001'], + [['900000000000000000000000000001', 'tether'], '0.900000000000000000000000000001'], + [['1000', 'kwei'], '1'], + [['1000000', 'mwei'], '1'], + [['1000000000', 'gwei'], '1'], + [['1000000000000', 'micro'], '1'], + [['1000000000000000', 'milli'], '1'], + [['1000000000000000000', 'ether'], '1'], + [['1000000000000000000000', 'kether'], '1'], + [['1000000000000000000000000', 'mether'], '1'], + [['1000000000000000000000000000', 'gether'], '1'], + [['1000000000000000000000000000000', 'tether'], '1'], + [['1000000000000000000000000000000', 'tether'], '1'], + [['12345678', 'gwei'], '0.012345678'], + [['76912345678', 'gwei'], '76.912345678'], + [['134439381738', 'gwei'], '134.439381738'], + [['178373938391829348', 'ether'], '0.178373938391829348'], + [['879123456788877661', 'gwei'], '879123456.788877661'], + [['879123456788877661', 'tether'], '0.000000000000879123456788877661'], +]; + +export const fromWeiValidData: [[Numbers, EtherUnits], string][] = [ + ...conversionBaseData, + [['0xff', 'wei'], '255'], +]; + +export const toWeiValidData: [[Numbers, EtherUnits], string][] = [ + ...conversionBaseData, + [['255', 'wei'], '0xFF'], +]; + +export const fromWeiInvalidData: [[any, any], string][] = [ + // eslint-disable-next-line no-useless-escape + [['123.34', 'kwei'], 'Invalid value given "123.34". Error: can not parse as number data.'], + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + [[null, 'kwei'], 'Invalid value given "undefined". Error: can not parse as number data.'], + [[undefined, 'kwei'], 'Invalid value given "undefined". Error: can not parse as number data.'], + [[{}, 'kwei'], 'Invalid value given "{}". Error: can not parse as number data'], + [['data', 'kwei'], 'Invalid value given "data". Error: can not parse as number data.'], + [['1234', 'uwei'], 'Invalid value given "uwei". Error: invalid unit.'], +]; + +export const toWeiInvalidData: [[any, any], string][] = [ + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + [[null, 'kwei'], 'value "null" at "/0" must pass "number" validation'], + [[undefined, 'kwei'], 'Web3 validator found 1 error[s]:\nvalue at "/0" is required'], + [[{}, 'kwei'], 'value "{}" at "/0" must pass "number" validation'], + [['data', 'kwei'], 'value "data" at "/0" must pass "number" validation'], + [['1234', 'uwei'], 'Invalid value given "uwei". Error: invalid unit.'], +]; +export const toCheckSumValidData: [string, string][] = [ + ['0x0089d53f703f7e0843953d48133f74ce247184c2', '0x0089d53F703f7E0843953D48133f74cE247184c2'], + ['0x5fbc2b6c19ee3dd5f9af96ff337ddc89e30ceaef', '0x5FBc2b6C19EE3DD5f9Af96ff337DDC89e30ceAef'], + ['0xa54D3c09E34aC96807c1CC397404bF2B98DC4eFb', '0xa54d3c09E34aC96807c1CC397404bF2B98DC4eFb'], +]; +export const toCheckSumInvalidData: [string, string][] = [ + ['not an address', 'Invalid value given "not an address". Error: invalid ethereum address.'], +]; + +export const bytesToUint8ArrayInvalidData: [any, string][] = bytesToHexInvalidData; + +export const bytesToUint8ArrayValidData: [Bytes, Uint8Array][] = [ + [new Uint8Array([72]), new Uint8Array([72])], + [new Uint8Array([72, 12]), new Uint8Array([72, 12])], + ['0x9c12', new Uint8Array([156, 18])], + ['0X12c6', new Uint8Array([18, 198])], + ['0X01', new Uint8Array([1])], + ['0X00', new Uint8Array([0])], + ['0x1234', new Uint8Array([18, 52])], + [new Uint8Array(hexToBytes('0c12')), new Uint8Array(hexToBytes('0c12'))], +]; + +export const toBigIntValidData: [any, bigint][] = [ + [BigInt(1), BigInt(1)], + [24, BigInt(24)], + ['123', BigInt(123)], + ['0x04', BigInt(4)], +]; + +export const toBigIntInvalidData: [any, string][] = [ + [new Uint8Array([]), 'can not parse as number data'], + ['wwwww', ' Error: can not parse as number data'], + ['zzzzee0xiiuu', ' Error: can not parse as number data'], +]; diff --git a/packages/web3-utils/test/fixtures/formatter.ts b/packages/web3-utils/test/fixtures/formatter.ts new file mode 100644 index 00000000000..7437373d708 --- /dev/null +++ b/packages/web3-utils/test/fixtures/formatter.ts @@ -0,0 +1,58 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { FMT_NUMBER, FMT_BYTES } from 'web3-types'; +import { hexToBytes } from '../../src/converters'; + +export const isDataFormatValid: [any, boolean][] = [ + [{ number: 'number', bytes: 'number' }, true], + [{}, false], +]; + +export const convertScalarValueValid: [[any, any, any], any][] = [ + [[new Uint8Array(hexToBytes('FF')), 'bytes', { bytes: FMT_BYTES.HEX }], '0xff'], + [ + [ + '0xe84375b25f38de0e68f7f4884b7342e0814747143c790f48088d22e802cf7a3', + 'bytes32', + { bytes: FMT_BYTES.HEX }, + ], + '0x0e84375b25f38de0e68f7f4884b7342e0814747143c790f48088d22e802cf7a3', + ], + [[100, 'int', { number: FMT_NUMBER.NUMBER, bytes: FMT_BYTES.HEX }], 100], + [[100, 'int', { number: 'unknown', bytes: FMT_BYTES.HEX }], 100], + [[100, 'uint', { number: FMT_NUMBER.HEX, bytes: FMT_BYTES.HEX }], '0x64'], + [[64, 'uint8', { number: FMT_NUMBER.STR }], '64'], + [ + [new Uint8Array(hexToBytes('FF')), 'bytes', { bytes: FMT_BYTES.UINT8ARRAY }], + new Uint8Array(new Uint8Array(hexToBytes('FF'))), + ], + [ + [new Uint8Array(hexToBytes('FF')), 'bytes32', { bytes: FMT_BYTES.HEX }], + '0x00000000000000000000000000000000000000000000000000000000000000ff', + ], + [ + [new Uint8Array(hexToBytes('FF')), 'unknown', { bytes: FMT_BYTES.HEX }], + new Uint8Array(hexToBytes('FF')), + ], + [ + [new Uint8Array(hexToBytes('FF')), 'bytes32', { bytes: FMT_BYTES.UINT8ARRAY }], + new Uint8Array( + hexToBytes('0x00000000000000000000000000000000000000000000000000000000000000ff'), + ), + ], +]; diff --git a/packages/web3-utils/test/fixtures/hash.ts b/packages/web3-utils/test/fixtures/hash.ts new file mode 100644 index 00000000000..6bfe9f63f33 --- /dev/null +++ b/packages/web3-utils/test/fixtures/hash.ts @@ -0,0 +1,351 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { TypedObject, TypedObjectAbbreviated, Bytes, Sha3Input } from 'web3-types'; +import { hexToBytes } from '../../src/converters'; + +export const sha3Data: [Bytes, string | undefined][] = [ + ['test123', '0xf81b517a242b218999ec8eec0ea6e2ddbef2a367a14e93f4a32a39e260f686ad'], + [ + '0x265385c7f4132228a0d54eb1a9e7460b91c0cc68:2382:image', + '0x74e687805c0cfbf0065120987739a5b0ba9b3686a1a778a463bddddcd18cc432', + ], + ['1234', '0x387a8233c96e1fc0ad5e284353276177af2186e7afa85296f106336e376669f7'], + ['helloworld', '0xfa26db7ca85ead399216e7c6316bc50ed24393c3122b582735e7f3b0f91b93f0'], + [ + new Uint8Array([91, 92, 93, 94]), + '0xafde16013fa7d7214985cb9219a059e063934a01bdb1dc2254f42cf53da68c89', + ], +]; + +export const sha3ValidData: [Bytes, string | undefined][] = [ + ...sha3Data, + ['', undefined], + [ + '0x265385c7f4132228a0d54eb1a9e7460b91c0cc68', + '0xb549c60e309fa734059e547a595c28b5ebada949c16229fbf2192650807694f5', + ], + ['0x80', '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'], + [ + '0x265385c7f4132228a0d54eb1a9e7460b91c0cc68', + '0xb549c60e309fa734059e547a595c28b5ebada949c16229fbf2192650807694f5', + ], + ['0x1234', '0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432'], +]; + +export const compareSha3JSValidData: [string, any | undefined][] = [ + ['0x80', new Uint8Array(hexToBytes('0x80'))], + [ + '0x265385c7f4132228a0d54eb1a9e7460b91c0cc68', + new Uint8Array(hexToBytes('0x265385c7f4132228a0d54eb1a9e7460b91c0cc68')), + ], + ['0x1234', new Uint8Array(hexToBytes('0x1234'))], +]; + +export const sha3InvalidData: [any, string][] = [ + [1, 'Invalid value given "1". Error: not a valid string.'], + [BigInt(1010), 'Invalid value given "1010". Error: not a valid string.'], + [undefined, 'Invalid value given "undefined". Error: not a valid string.'], +]; + +export const sha3RawValidData: [Bytes, string | undefined][] = [ + ...sha3Data, + ['', '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'], +]; + +export const compareSha3JSRawValidData: [string, string][] = [...compareSha3JSValidData]; + +export const soliditySha3Data: [TypedObject[] | TypedObjectAbbreviated[], string | undefined][] = [ + [ + [{ type: 'string', value: '31323334' }], + '0xf15f8da2ad27e486d632dc37d24912f634398918d6f9913a0a0ff84e388be62b', + ], + [ + [ + { type: 'string', value: 'helloworld' }, + { type: 'string', value: '01' }, + ], + '0xfb0a9d38c4dc568cbd105866540986fabf3c08c1bfb78299ce21aa0e5c0c586b', + ], + [ + [ + { type: 'string', value: 'hell' }, + { type: 'string', value: 'oworld' }, + { type: 'uint16', value: 0x3031 }, + ], + '0xfb0a9d38c4dc568cbd105866540986fabf3c08c1bfb78299ce21aa0e5c0c586b', + ], + [ + [{ type: 'uint96', value: '32309054545061485574011236401' }], + '0xfb0a9d38c4dc568cbd105866540986fabf3c08c1bfb78299ce21aa0e5c0c586b', + ], + [ + [{ type: 'uint256', value: '234' }], + '0x61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2', + ], + [ + [{ t: 'int', v: BigInt('234') }], + '0x61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2', + ], + [ + [{ type: 'uint', value: '234' }], + '0x61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2', + ], + [ + [{ type: 'bytes', value: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1' }], + '0x4e8ebbefa452077428f93c9520d3edd60594ff452a29ac7d2ccc11d47f3ab95b', + ], + [ + [ + { type: 'int16', value: -1 }, + { type: 'uint48', value: 12 }, + ], + '0x81da7abb5c9c7515f57dab2fc946f01217ab52f3bd8958bc36bd55894451a93c', + ], + [ + [ + { type: 'int16', value: -1 }, + { type: 'uint48', value: '0x0c' }, + ], + '0x81da7abb5c9c7515f57dab2fc946f01217ab52f3bd8958bc36bd55894451a93c', + ], + [ + [{ type: 'string', value: 'Hello!%' }], + '0x661136a4267dba9ccdf6bfddb7c00e714de936674c4bdb065a531cf1cb15c7fc', + ], + [ + [{ type: 'address', value: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1' }], + '0x4e8ebbefa452077428f93c9520d3edd60594ff452a29ac7d2ccc11d47f3ab95b', + ], + [ + [{ t: 'bytes32', v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1' }], + '0x3c69a194aaf415ba5d6afca734660d0a3d45acdc05d54cd1ca89a8988e7625b4', + ], + [ + [ + { t: 'string', v: 'Hello!%' }, + { t: 'int8', v: -23 }, + { t: 'address', v: '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d' }, + ], + '0xa13b31627c1ed7aaded5aecec71baf02fe123797fffd45e662eac8e06fbe4955', + ], + [ + [{ t: 'int256', v: '32309054545061485574011236401' }], + '0x1594ff29e8161679724999598fb6b993f68549092dddc9f183b04c629aeb9d54', + ], +]; + +export const soliditySha3ValidData: [ + TypedObject[] | TypedObjectAbbreviated[], + string | undefined, +][] = [...soliditySha3Data, [[{ t: 'string', v: '' }], undefined]]; + +export const soliditySha3RawValidData: [ + TypedObject[] | TypedObjectAbbreviated[], + string | undefined, +][] = [ + ...soliditySha3Data, + [ + [{ t: 'string', v: '' }], + '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', + ], +]; + +export const soliditySha3InvalidData: [any, string][] = [ + [{ t: 'int8', v: 500 }, 'Invalid value given "500". Error: value is larger than size.'], + [ + { t: 'bytes', v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c' }, + 'Invalid value given "0x407D73d8a49eeb85D32Cf465507dd71d507100c". Error: can not parse as byte data.', + ], + [ + { t: 'bytes8', v: '0x407D73d8a49eeb85D32Cf465507dd71d507100' }, + 'Invalid value given "0x407D73d8a49eeb85D32Cf465507dd71d507100". Error: can not parse as byte data.', + ], +]; + +export const encodePackData: [TypedObject[] | TypedObjectAbbreviated[], any][] = [ + [[{ type: 'string', value: '31323334' }], '0x3331333233333334'], + [ + [{ type: 'int[]', value: '01' }], + '0x0000000000000000000000000000000000000000000000000000000000000001', + ], + [ + [{ type: 'uint[]', value: '01' }], + '0x0000000000000000000000000000000000000000000000000000000000000001', + ], + [ + [{ type: 'int', value: 31323334 }], + '0x0000000000000000000000000000000000000000000000000000000001ddf4c6', + ], + [[{ type: 'string', value: '' }], '0x'], + [ + [{ type: 'address', value: '0xc1912fee45d61c87cc5ea59dae31190fffff232d' }], + '0xc1912fee45d61c87cc5ea59dae31190fffff232d', + ], + [[{ type: 'bool', value: true }], '0x01'], + [[{ type: 'bool', value: false }], '0x00'], + [[{ value: 'Hello!%', type: 'string' }], '0x48656c6c6f2125'], + [ + [{ t: 'uint256', v: BigInt('2345676856') }], + '0x000000000000000000000000000000000000000000000000000000008bd03038', + ], + [ + [{ type: 'uint256', value: '2342342342342342342345676856' }], + '0x000000000000000000000000000000000000000007918a48d0493ed3da6ed838', + ], + [[{ type: 'uint8', value: '56' }], '0x38'], + [[{ v: '256', t: 'uint16' }], '0x0100'], + [[{ v: '3256', t: 'uint32' }], '0x00000cb8'], + [[{ v: '44454256', t: 'uint128' }], '0x00000000000000000000000002a65170'], + [[{ v: '44454256', t: 'int128' }], '0x00000000000000000000000002a65170'], + [[{ v: '0x22', t: 'bytes2' }], '0x2200'], + [[{ v: '0x44222266', t: 'bytes4' }], '0x44222266'], + [ + [{ v: '0x44555ffffffffdd222222222222224444556553522', t: 'bytes32' }], + '0x44555ffffffffdd2222222222222244445565535220000000000000000000000', + ], + [ + [{ v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', t: 'address' }], + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + ], + [ + [{ v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', t: 'bytes' }], + '0x407d73d8a49eeb85d32cf465507dd71d507100c1', + ], + [[{ t: 'int', v: '0' }], '0x0000000000000000000000000000000000000000000000000000000000000000'], + [ + [{ type: 'int256', value: '1234' }], + '0x00000000000000000000000000000000000000000000000000000000000004d2', + ], + [ + [{ type: 'string', value: '1234' }], // should be encoded differently than int256 + '0x31323334', + ], + [ + [{ type: 'int256', value: 1234 }], // same as type int256 when value is a string + '0x00000000000000000000000000000000000000000000000000000000000004d2', + ], + [ + [{ type: 'int128[]', value: [12345, 324, 1, 2] }], + '0x00000000000000000000000000003039000000000000000000000000000001440000000000000000000000000000000100000000000000000000000000000002', + ], + [ + [ + { + type: 'bytes32[]', + value: [ + '0x1248', + '0x3c69a194aaf415ba5d6afca734660d0a3d45acdc05d54cd1ca89a8988e7625b4', + ], + }, + ], + '0x12480000000000000000000000000000000000000000000000000000000000003c69a194aaf415ba5d6afca734660d0a3d45acdc05d54cd1ca89a8988e7625b4', + ], + [[{ type: 'bytes4[]', value: ['0x11223344', '0x22334455'] }], '0x1122334422334455'], +]; + +export const encodePackedInvalidData: [any, string][] = [ + [{ type: 'string', value: 1234 }, 'Invalid value given "1234". Error: not a valid string.'], + [{ type: 'string', value: true }, 'Invalid value given "true". Error: not a valid string.'], + [{ type: 'string', value: 1234 }, 'Invalid value given "1234". Error: not a valid string.'], + [{ type: 'boolean', value: 1234 }, 'Invalid value given "1234". Error: not a valid boolean.'], + [ + { type: 'address', value: 1234 }, + 'Invalid value given "1234". Error: invalid ethereum address', + ], + [ + { type: 'address', value: '0x2' }, + 'Invalid value given "0x2". Error: invalid ethereum address', + ], + [{ type: 'uint612', value: 13 }, 'Invalid value given "13". Error: invalid size given.'], + [ + { type: 'uint8', value: 1000 }, + 'Invalid value given "1000". Error: value is larger than size.', + ], + [ + { type: 'uint256', value: -1 }, + 'Invalid value given "-1". Error: not a valid unsigned integer.', + ], + [{ type: 'int255', value: 100 }, 'Invalid value given "int255". Error: invalid size given.'], + [ + { type: 'bytes32', value: '0x1' }, + 'Invalid value given "0x1". Error: can not parse as byte data.', + ], +]; + +export const keccak256ValidData: [string | Uint8Array | bigint, string][] = [ + ['my data', '0x8e0c48154711500d6fa119cc31df4dec339091e8b426cf4109a769fe89baad31'], + [ + new Uint8Array(Buffer.from('my data')), + '0x8e0c48154711500d6fa119cc31df4dec339091e8b426cf4109a769fe89baad31', + ], + [ + '0x8e0c48154711500d6fa119cc31df4dec339091e8b426cf4109a769fe89baad31', + '0x2d19cd91fbcc44e6412f92c11da7907cdedb1ace04c47447b42a61f1cd63b85a', + ], + [BigInt(3), '0x2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de'], +]; + +export const elementaryNameValidData: [any, string][] = [ + ['uint128', '128'], + ['int256', '256'], +]; + +export const soliditySha3BigIntValidData: [Sha3Input[], string][] = [ + [[3434], '0xf219fa5590f999dc677e94dd9cf99cf14103d2f4323898edb31db982d5909687'], + [[BigInt(3434)], '0xf219fa5590f999dc677e94dd9cf99cf14103d2f4323898edb31db982d5909687'], + [ + [{ t: 'bigint', v: BigInt(3434) }], + '0xf219fa5590f999dc677e94dd9cf99cf14103d2f4323898edb31db982d5909687', + ], + + [[0], '0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563'], + [[BigInt(0)], '0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563'], + [ + [{ t: 'bigint', v: BigInt(0) }], + '0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563', + ], + + [[90071992547409], '0x290998ceba657b344f8ee112246f32b20ecaad06d8d9ad09748de1821b9ef73e'], + [ + [BigInt(90071992547409)], + '0x290998ceba657b344f8ee112246f32b20ecaad06d8d9ad09748de1821b9ef73e', + ], + [ + [{ t: 'bigint', v: BigInt(90071992547409) }], + '0x290998ceba657b344f8ee112246f32b20ecaad06d8d9ad09748de1821b9ef73e', + ], + + [['0x70696e67', 0], '0xe54a278c69f07b6b4f0736dc55c389cd2d3f31365b090c9f76a414fb51552c53'], + [ + ['0x70696e67', BigInt(0)], + '0xe54a278c69f07b6b4f0736dc55c389cd2d3f31365b090c9f76a414fb51552c53', + ], + + [['0x70696e67', 10], '0x418e921c5c859d5f560b89ad03a6672907d66de336392a5178ea69281feff40a'], + [ + ['0x70696e67', BigInt(10)], + '0x418e921c5c859d5f560b89ad03a6672907d66de336392a5178ea69281feff40a', + ], + + /* + //These hash values are generated using contract with function like: + + function func90071992547409() external pure returns (bytes32) { + return keccak256(abi.encodePacked(int(90071992547409))) ;} + */ +]; diff --git a/packages/web3-utils/test/fixtures/json_rpc.ts b/packages/web3-utils/test/fixtures/json_rpc.ts new file mode 100644 index 00000000000..516711abceb --- /dev/null +++ b/packages/web3-utils/test/fixtures/json_rpc.ts @@ -0,0 +1,66 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { JsonRpcNotification, SubscriptionParams } from 'web3-types'; + +const responseWithResult = { jsonrpc: '2.0', id: 1, result: '' }; +const responseWithError = { jsonrpc: '2.0', id: 1, error: { code: 1, message: 'string' } }; +const responseWithSubscription = { id: 1, jsonrpc: '2.0', result: '' }; +const responseWithNotfication = { + jsonrpc: '2.0', + method: 'subscribe', + params: { subscription: '', result: '' } as SubscriptionParams, +} as JsonRpcNotification; +export const isResponseWithResultValidTest: [any, boolean][] = [ + [responseWithResult, true], + [responseWithError, false], +]; + +export const isResponseWithErrorValidTest: [any, boolean][] = [ + [responseWithResult, false], + [responseWithError, true], +]; + +export const isResponseWithNotificationValidTest: [JsonRpcNotification, boolean][] = [ + [responseWithNotfication, true], +]; + +export const isSubscriptionResultValidTest: [any, boolean][] = [[responseWithSubscription, true]]; + +export const isValidResponseValidTest: [any, boolean][] = [ + [responseWithResult, true], + [responseWithError, true], +]; + +export const isBatchResponseValidTest: [any, boolean][] = [ + [[responseWithResult, responseWithError], true], + [[responseWithNotfication], false], +]; + +export const toPayloadValidTest: [any, any][] = [ + [ + { method: 'delete' }, + { + method: 'delete', + id: expect.stringMatching( + // Uuid + '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}', + ), + jsonrpc: '2.0', + params: undefined, + }, + ], +]; diff --git a/packages/web3-utils/test/fixtures/objects.ts b/packages/web3-utils/test/fixtures/objects.ts new file mode 100644 index 00000000000..6c98e127ef5 --- /dev/null +++ b/packages/web3-utils/test/fixtures/objects.ts @@ -0,0 +1,80 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const mergeDeepData: { + message: string; + destination: Record; + sources: Record[]; + output: Record; +}[] = [ + { + message: 'multiple sources', + destination: {}, + sources: [ + { a: undefined, b: true, c: new Uint8Array([1, 2, 3]) }, + { a: 3, d: 'string', e: { nested: BigInt(4) } }, + ], + output: { + a: 3, + b: true, + c: new Uint8Array([1, 2, 3]), + d: 'string', + e: { nested: BigInt(4) }, + }, + }, + + { + message: 'array elements', + destination: {}, + sources: [{ a: [1, 2] }, { a: [3, 4] }], + output: { a: [3, 4] }, + }, + + { + message: 'array elements with null values', + destination: {}, + sources: [{ a: [1, 2] }, { a: undefined }], + output: { a: [1, 2] }, + }, + + { + message: 'nested array elements', + destination: {}, + sources: [{ a: [[1, 2]] }, { a: [[3, 4]] }], + output: { a: [[3, 4]] }, + }, + + { + message: 'items pre-exists in the destination', + destination: { a: 4, b: false }, + sources: [ + { a: undefined, b: true, c: new Uint8Array([1, 2, 3]) }, + { a: undefined, d: 'string', e: { nested: 4 } }, + ], + output: { a: 4, b: true, c: new Uint8Array([1, 2, 3]), d: 'string', e: { nested: 4 } }, + }, + + { + message: 'items with different types', + destination: { a: 4, b: false }, + sources: [ + { a: undefined, b: true, c: new Uint8Array([1, 2, 3]) }, + { a: '4', b: 'true', d: 'string', e: { nested: 4 } }, + ], + output: { a: '4', b: 'true', c: new Uint8Array([1, 2, 3]), d: 'string', e: { nested: 4 } }, + }, +]; diff --git a/packages/web3-utils/test/fixtures/random.ts b/packages/web3-utils/test/fixtures/random.ts new file mode 100644 index 00000000000..16b25ecb519 --- /dev/null +++ b/packages/web3-utils/test/fixtures/random.ts @@ -0,0 +1,18 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const randomHexData: number[] = [2, 4, 8, 16, 32, 64, 128, 256]; diff --git a/packages/web3-utils/test/fixtures/string_manipulation.ts b/packages/web3-utils/test/fixtures/string_manipulation.ts new file mode 100644 index 00000000000..be5b298c803 --- /dev/null +++ b/packages/web3-utils/test/fixtures/string_manipulation.ts @@ -0,0 +1,125 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { HexString, Numbers } from 'web3-types'; + +export const padLeftData: [[Numbers, number, string], HexString][] = [ + [[0, 10, '0'], '0x0000000000'], + [['0x01', 64, 'f'], '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01'], + [['-0x01', 64, 'f'], '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01'], + [['5', 32, '0'], '00000000000000000000000000000005'], + [['-05', 32, 'f'], 'fffffffffffffffffffffffffffff-05'], + [['abcd', 8, '0'], '0000abcd'], + [['-abcd', 8, '0'], '000-abcd'], + [[BigInt('9007199254740992'), 32, '0'], '0x00000000000000000020000000000000'], + [[BigInt('-9007199254740992'), 32, '0'], '-0x00000000000000000020000000000000'], + [[-13, 10, '0'], '-0x000000000d'], + [['9.5', 8, '0'], '000009.5'], +]; + +export const padInvalidData: [[any, number, string], string][] = [ + [[9.5, 64, 'f'], 'value "9.5" at "/0" must pass "int" validation'], + // Using "null" value intentionally for validation + [ + // eslint-disable-next-line no-null/no-null + [null, 8, '0'], + 'Web3 validator found 1 error[s]:\nvalue "null" at "/0" must pass "int" validation', + ], + [[undefined, 8, '0'], 'Web3 validator found 1 error[s]:\nvalue at "/0" is required'], + [[{}, 3, 'f'], 'value "{}" at "/0" must pass "int" validation'], +]; + +export const padRightData: [[Numbers, number, string], HexString][] = [ + [[1, 5, '0'], '0x10000'], + [ + [-2000, 128, '0'], + '-0x7d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + ], + [['0x00', 5, 'f'], '0x00fff'], + [['-0x01', 64, 'f'], '-0x01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'], + [['zxy', 11, '0'], 'zxy00000000'], + [['-abcd', 32, '1'], '-abcd111111111111111111111111111'], + [[BigInt(10000), 8, '0'], '0x27100000'], + [[BigInt(-14), 8, '0'], '-0xe0000000'], + [['15.5', 8, '0'], '15.50000'], +]; + +export const toTwosComplementData: [[Numbers, number], HexString][] = [ + [[13, 32], '0x0000000000000000000000000000000d'], + [[256, 30], '0x000000000000000000000000000100'], + [[0, 32], '0x00000000000000000000000000000000'], + [['0x1', 32], '0x00000000000000000000000000000001'], + [['-0x1', 32], '0xffffffffffffffffffffffffffffffff'], + [[BigInt('9007199254740992'), 32], '0x00000000000000000020000000000000'], + [[BigInt('-9007199254740992'), 32], '0xffffffffffffffffffe0000000000000'], + [['13', 32], '0x0000000000000000000000000000000d'], + [['-13', 32], '0xfffffffffffffffffffffffffffffff3'], + [[-16, 2], '0xf0'], +]; + +export const fromTwosComplementData: [[Numbers, number], number | bigint][] = [ + [['0x0000000000000000000000000000000d', 32], 13], + [['0x000000000000000000000000000100', 30], 256], + [['0x00000000000000000020000000000000', 32], BigInt('9007199254740992')], + [['0xfffffffffffffffffffffffffffffff3', 32], -13], + [['0xf0', 2], -16], + [['0xffffffffffffffffffffffffffffff00', 32], -256], + [[1000, 64], 1000], + [[-1000, 64], -1000], + [[BigInt(9), 1], -7], +]; + +export const toTwosComplementInvalidData: [[Numbers, number], string][] = [ + // solidity only store 32 bytes numbers + [ + ['0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00', 64], + 'value "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00" at "/0" must pass "int" validation', + ], + [['ab', 32], 'value "ab" at "/0" must pass "int" validation'], + [['-ab', 3], 'value "-ab" at "/0" must pass "int" validation'], + [['ab0x', 2], 'value "ab0x" at "/0" must pass "int" validation'], + [[25.5, 32], 'value "25.5" at "/0" must pass "int" validation'], + [['-120.0', 4], 'value "-120.0" at "/0" must pass "int" validation'], + [ + [-256, 2], + 'Invalid value given "value: -256, nibbleWidth: 2". Error: value greater than the nibble width.', + ], + [ + ['-0x1000', 3], + 'Invalid value given "value: -0x1000, nibbleWidth: 3". Error: value greater than the nibble width.', + ], + [ + [BigInt(-160000), 1], + 'Invalid value given "value: -160000, nibbleWidth: 1". Error: value greater than the nibble width.', + ], +]; + +export const fromTwosComplementInvalidData: [[Numbers, number], string][] = [ + [['ab', 32], 'value "ab" at "/0" must pass "int" validation'], + [['-ab', 3], 'value "-ab" at "/0" must pass "int" validation'], + [['ab0x', 2], 'value "ab0x" at "/0" must pass "int" validation'], + [[25.5, 32], 'value "25.5" at "/0" must pass "int" validation'], + [['-120.0', 4], 'value "-120.0" at "/0" must pass "int" validation'], + [ + [1000, 2], + 'Invalid value given "value: 1000, nibbleWidth: 2". Error: value greater than the nibble width.', + ], + [ + ['0xa05', 1], + 'Invalid value given "value: 0xa05, nibbleWidth: 1". Error: value greater than the nibble width.', + ], +]; diff --git a/packages/web3-utils/test/fixtures/uint8array.ts b/packages/web3-utils/test/fixtures/uint8array.ts new file mode 100644 index 00000000000..c365dc51d02 --- /dev/null +++ b/packages/web3-utils/test/fixtures/uint8array.ts @@ -0,0 +1,77 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const uint8ArrayConcatData: [Uint8Array[], Uint8Array][] = [ + [[new Uint8Array([0]), new Uint8Array([0])], new Uint8Array([0, 0])], + [ + [ + new Uint8Array([ + 0xde, 0xc0, 0x51, 0x8f, 0xa6, 0x72, 0xa7, 0x00, 0x27, 0xb0, 0x4c, 0x28, 0x65, 0x82, + 0xe5, 0x43, + ]), + new Uint8Array([ + 0xab, 0x17, 0x31, 0x9f, 0xbd, 0xd3, 0x84, 0xfa, 0x7b, 0xc8, 0xf3, 0xd5, 0xa5, 0x42, + 0xc0, + ]), + ], + new Uint8Array([ + 0xde, 0xc0, 0x51, 0x8f, 0xa6, 0x72, 0xa7, 0x00, 0x27, 0xb0, 0x4c, 0x28, 0x65, 0x82, + 0xe5, 0x43, 0xab, 0x17, 0x31, 0x9f, 0xbd, 0xd3, 0x84, 0xfa, 0x7b, 0xc8, 0xf3, 0xd5, + 0xa5, 0x42, 0xc0, + ]), + ], + [ + [new Uint8Array([0x41]), new Uint8Array([0x42]), new Uint8Array([0x43])], + new Uint8Array([0x41, 0x42, 0x43]), + ], + [ + [new Uint8Array([12, 12]), new Uint8Array([13]), new Uint8Array([14])], + new Uint8Array([12, 12, 13, 14]), + ], +]; +const singleArray = new Uint8Array([0x13]); +export const uint8ArrayEqualsValidData: [[Uint8Array, Uint8Array], boolean][] = [ + [[new Uint8Array([0]), new Uint8Array([0])], true], + [ + [ + new Uint8Array([ + 0xde, 0xc0, 0x51, 0x8f, 0xa6, 0x72, 0xa7, 0x00, 0x27, 0xb0, 0x4c, 0x28, 0x65, 0x82, + 0xe5, 0x43, + ]), + new Uint8Array([ + 0xde, 0xc0, 0x51, 0x8f, 0xa6, 0x72, 0xa7, 0x00, 0x27, 0xb0, 0x4c, 0x28, 0x65, 0x82, + 0xe5, 0x43, + ]), + ], + true, + ], + [[new Uint8Array([12, 12]), new Uint8Array([12, 12])], true], + [[new Uint8Array([0]), new Uint8Array([1])], false], + [[new Uint8Array([0x00]), new Uint8Array([0])], true], + [[new Uint8Array([0x1]), new Uint8Array([1])], true], + [ + [ + new Uint8Array([ + 0xde, 0xc0, 0x51, 0x8f, 0xa6, 0x72, 0xa7, 0x00, 0x27, 0xb0, 0x4c, 0x28, 0x65, 0x82, + 0xe5, 0x43, + ]), + new Uint8Array([0]), + ], + false, + ], + [[singleArray, singleArray], true], +]; diff --git a/packages/web3-utils/test/fixtures/validation.ts b/packages/web3-utils/test/fixtures/validation.ts new file mode 100644 index 00000000000..ec88e4fcb12 --- /dev/null +++ b/packages/web3-utils/test/fixtures/validation.ts @@ -0,0 +1,79 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Numbers } from 'web3-types'; +import { InvalidBlockError } from 'web3-errors'; + +export const compareBlockNumbersValidData: [[Numbers, Numbers], number][] = [ + [[1, 1], 0], + [[1, 2], -1], + [[2, 1], 1], + [[BigInt(1), BigInt(1)], 0], + [[BigInt(1), BigInt(2)], -1], + [[BigInt(2), BigInt(1)], 1], + [[1, BigInt(1)], 0], + [[1, BigInt(2)], -1], + [[2, BigInt(1)], 1], + [['earliest', 0], 0], + [[0, 'earliest'], 0], + [['earliest', 'earliest'], 0], + [['pending', 'pending'], 0], + [['latest', 'latest'], 0], + [['earliest', 'pending'], -1], + [[BigInt('9007199254740992'), BigInt('9007199254740991')], 1], + [[13532346, 13532300], 1], + [['pending', 'latest'], 1], + [['safe', 'safe'], 0], + [['earliest', 'safe'], -1], + [['safe', 'pending'], -1], + [['pending', 'safe'], 1], + [['finalized', 'finalized'], 0], + [['earliest', 'finalized'], -1], + [['finalized', 'pending'], -1], + [['pending', 'finalized'], 1], + [['safe', 'latest'], -1], + [['latest', 'safe'], 1], + [['earliest', 2], -1], + [[2, 'earliest'], 1], +]; + +const errorObj = new InvalidBlockError('Cannot compare blocktag with provided non-blocktag input.'); +export const compareBlockNumbersInvalidData: [[Numbers, Numbers], InvalidBlockError][] = [ + [['pending', 'unknown'], errorObj], + [['', 'pending'], errorObj], + [[22, 'finalized'], errorObj], + [['finalized', 22], errorObj], + [['latest', 110], errorObj], + [[222, 'latest'], errorObj], + [['pending', 230], errorObj], + [[10000, 'pending'], errorObj], + [['latest', BigInt(1)], errorObj], + [['pending', BigInt(1)], errorObj], + [['safe', 0], errorObj], + [[0, 'safe'], errorObj], +]; + +export const isBloomValidData: [any, true][] = [ + [ + '0x00000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000008000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000010000000000000000000000000000000000010000000000402000000000000000000000020000010000000000000000000000000000000000000000000000000000000000000', + true, + ], + [ + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + true, + ], +]; diff --git a/packages/web3-utils/test/integration/event_emitter.test.ts b/packages/web3-utils/test/integration/event_emitter.test.ts new file mode 100644 index 00000000000..7bf018dd00c --- /dev/null +++ b/packages/web3-utils/test/integration/event_emitter.test.ts @@ -0,0 +1,124 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// this file contains the unit test for the event emitter in the DOM environment +// it is executed in the jsdom environment (see "@jest-environment jsdom" in the top comment of this file) + +// ignore the following rule to allow keeping `@jest-environment jsdom` on top: +// eslint-disable-next-line header/header +import { EventEmitter } from '../../src/event_emitter'; + +describe('EventEmitter in the browser with Cypress', () => { + let emitter: EventEmitter; + + beforeEach(() => { + emitter = new EventEmitter(); + }); + + describe('on', () => { + it('should add a listener for the specified event', () => { + const callback = jest.fn(); + emitter.on('test', callback); + emitter.emit('test', 'hello'); + expect(callback).toHaveBeenCalledWith('hello'); + }); + }); + + describe('once', () => { + it('should add a listener for the specified event that is only called once', () => { + const callback = jest.fn(); + emitter.once('test', callback); + emitter.emit('test', 'hello'); + emitter.emit('test', 'world'); + expect(callback).toHaveBeenCalledTimes(1); + expect(callback).toHaveBeenCalledWith('hello'); + }); + }); + + describe('off', () => { + it('should remove a listener for the specified event', () => { + const callback = jest.fn(); + emitter.on('test', callback); + emitter.off('test', callback); + emitter.emit('test', 'hello'); + expect(callback).not.toHaveBeenCalled(); + }); + }); + + describe('emit', () => { + it('should call all listeners for the specified event', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test', callback1); + emitter.on('test', callback2); + emitter.emit('test', 'hello'); + expect(callback1).toHaveBeenCalledWith('hello'); + expect(callback2).toHaveBeenCalledWith('hello'); + }); + }); + + describe('listenerCount', () => { + it('should return the number of listeners for the specified event', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test', callback1); + emitter.on('test', callback2); + expect(emitter.listenerCount('test')).toBe(2); + }); + }); + + describe('listeners', () => { + it('should return an array of listeners for the specified event', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test', callback1); + emitter.on('test', callback2); + expect(emitter.listeners('test')).toEqual([callback1, callback2]); + }); + }); + + describe('eventNames', () => { + it('should return an array of event names that have listeners', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test1', callback1); + emitter.on('test2', callback2); + expect(emitter.eventNames()).toEqual(['test1', 'test2']); + }); + }); + + describe('removeAllListeners', () => { + it('should remove all listeners for all events', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test1', callback1); + emitter.on('test2', callback2); + emitter.removeAllListeners(); + emitter.emit('test1', 'hello'); + emitter.emit('test2', 'world'); + expect(callback1).not.toHaveBeenCalled(); + expect(callback2).not.toHaveBeenCalled(); + }); + }); + + describe('setMaxListeners', () => { + it('should set the maximum number of listeners for an event', () => { + emitter.setMaxListeners(2); + expect(emitter.getMaxListeners()).toBe(2); + }); + }); +}); diff --git a/packages/web3-utils/test/integration/jest.config.js b/packages/web3-utils/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-utils/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-utils/test/integration/setup.js b/packages/web3-utils/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-utils/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-utils/test/tsconfig.json b/packages/web3-utils/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-utils/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-utils/test/unit/converters.test.ts b/packages/web3-utils/test/unit/converters.test.ts new file mode 100644 index 00000000000..88e2f4c2385 --- /dev/null +++ b/packages/web3-utils/test/unit/converters.test.ts @@ -0,0 +1,406 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + asciiToHex, + bytesToHex, + fromAscii, + fromDecimal, + fromUtf8, + fromWei, + hexToAscii, + hexToBytes, + hexToNumber, + hexToNumberString, + hexToString, + hexToUtf8, + numberToHex, + stringToHex, + toAscii, + toDecimal, + toHex, + toNumber, + toUtf8, + toWei, + utf8ToHex, + toChecksumAddress, + bytesToUint8Array, + toBigInt, +} from '../../src/converters'; + +import { + asciiToHexValidData, + bytesToHexInvalidData, + bytesToHexValidData, + fromWeiInvalidData, + fromWeiValidData, + hexToAsciiValidData, + hexToBytesInvalidData, + hexToBytesValidData, + hexToNumberInvalidData, + hexToNumberValidData, + hexToUtf8InvalidData, + hexToUtf8ValidData, + toUtf8ValidData, + numberToHexInvalidData, + numberToHexValidData, + toHexValidData, + toHexInvalidData, + toWeiInvalidData, + toWeiValidData, + utf8ToHexInvalidData, + utf8ToHexValidData, + toCheckSumValidData, + bytesToUint8ArrayInvalidData, + bytesToUint8ArrayValidData, + toBigIntValidData, + toBigIntInvalidData, + toCheckSumInvalidData, + numberToHexstrictValidData, +} from '../fixtures/converters'; + +describe('converters', () => { + describe('bytesToHex', () => { + describe('valid cases', () => { + it.each(bytesToHexValidData)('%s', (input, output) => { + expect(bytesToHex(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(bytesToHexInvalidData)('%s', (input, output) => { + expect(() => bytesToHex(input)).toThrow(output); + }); + }); + }); + + describe('hexToBytes', () => { + describe('valid cases', () => { + it.each(hexToBytesValidData)('%s', (input, output) => { + expect(hexToBytes(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(hexToBytesInvalidData)('%s', (input, output) => { + expect(() => hexToBytes(input)).toThrow(output); + }); + }); + }); + + describe('numberToHex', () => { + describe('valid cases', () => { + it.each(numberToHexValidData)('%s', (input, output) => { + expect(numberToHex(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(numberToHexInvalidData)('%s', (input, output) => { + expect(() => numberToHex(input)).toThrow(output); + }); + }); + + describe('valid hexstrict cases', () => { + it.each(numberToHexstrictValidData)('%s', (input, output) => { + expect(numberToHex(input, true)).toEqual(output); + }); + }); + }); + + describe('fromDecimal', () => { + describe('valid cases', () => { + it.each(numberToHexValidData)('%s', (input, output) => { + expect(fromDecimal(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(numberToHexInvalidData)('%s', (input, output) => { + expect(() => fromDecimal(input)).toThrow(output); + }); + }); + }); + + describe('hexToNumber', () => { + describe('valid cases', () => { + it.each(hexToNumberValidData)('%s', (input, output) => { + expect(hexToNumber(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(hexToNumberInvalidData)('%s', (input, output) => { + expect(() => hexToNumber(input)).toThrow(output); + }); + }); + }); + + describe('toDecimal', () => { + describe('valid cases', () => { + it.each(hexToNumberValidData)('%s', (input, output) => { + expect(toDecimal(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(hexToNumberInvalidData)('%s', (input, output) => { + expect(() => toDecimal(input)).toThrow(output); + }); + }); + }); + + describe('hexToNumberString', () => { + it.each(hexToNumberValidData)('%s', (input, output) => { + expect(hexToNumberString(input)).toEqual(output.toString()); + }); + }); + + describe('utf8ToHex', () => { + describe('valid cases', () => { + it.each(utf8ToHexValidData)('%s', (input, output) => { + expect(utf8ToHex(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(utf8ToHexInvalidData)('%s', (input, output) => { + expect(() => utf8ToHex(input)).toThrow(output); + }); + }); + }); + + describe('fromUtf8', () => { + describe('valid cases', () => { + it.each(utf8ToHexValidData)('%s', (input, output) => { + expect(fromUtf8(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(utf8ToHexInvalidData)('%s', (input, output) => { + expect(() => fromUtf8(input)).toThrow(output); + }); + }); + }); + + describe('stringToHex', () => { + describe('valid cases', () => { + it.each(utf8ToHexValidData)('%s', (input, output) => { + expect(stringToHex(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(utf8ToHexInvalidData)('%s', (input, output) => { + expect(() => stringToHex(input)).toThrow(output); + }); + }); + }); + + describe('hexToUtf8', () => { + describe('valid cases', () => { + it.each(hexToUtf8ValidData)('%s', (input, output) => { + expect(hexToUtf8(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(hexToUtf8InvalidData)('%s', (input, output) => { + expect(() => hexToUtf8(input)).toThrow(output); + }); + }); + }); + + describe('toUtf8', () => { + describe('valid cases', () => { + it.each(toUtf8ValidData)('%s', (input, output) => { + expect(toUtf8(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(hexToUtf8InvalidData)('%s', (input, output) => { + expect(() => toUtf8(input)).toThrow(output); + }); + }); + }); + + describe('hexToString', () => { + describe('valid cases', () => { + it.each(hexToUtf8ValidData)('%s', (input, output) => { + expect(hexToString(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(hexToUtf8InvalidData)('%s', (input, output) => { + expect(() => hexToString(input)).toThrow(output); + }); + }); + }); + + describe('asciiToHex', () => { + describe('valid cases', () => { + it.each(asciiToHexValidData)('%s', (input, output) => { + expect(asciiToHex(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(utf8ToHexInvalidData)('%s', (input, output) => { + expect(() => asciiToHex(input)).toThrow(output); + }); + }); + }); + + describe('fromAscii', () => { + describe('valid cases', () => { + it.each(asciiToHexValidData)('%s', (input, output) => { + expect(fromAscii(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(utf8ToHexInvalidData)('%s', (input, output) => { + expect(() => fromAscii(input)).toThrow(output); + }); + }); + }); + + describe('hexToAscii', () => { + describe('valid cases', () => { + it.each(hexToAsciiValidData)('%s', (input, output) => { + expect(hexToAscii(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(hexToUtf8InvalidData)('%s', (input, output) => { + expect(() => hexToAscii(input)).toThrow(output); + }); + }); + }); + + describe('toAscii', () => { + describe('valid cases', () => { + it.each(hexToAsciiValidData)('%s', (input, output) => { + expect(toAscii(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(hexToUtf8InvalidData)('%s', (input, output) => { + expect(() => toAscii(input)).toThrow(output); + }); + }); + }); + + describe('toHex', () => { + describe('return value', () => { + it.each(toHexValidData)('%s', (input, output) => { + expect(toHex(input)).toEqual(output[0]); + }); + }); + + describe('return type', () => { + it.each(toHexValidData)('%s', (input, output) => { + expect(toHex(input, true)).toEqual(output[1]); + }); + }); + + describe('invalid cases', () => { + it.each(toHexInvalidData)('%s', (input, output) => { + expect(() => toHex(input)).toThrow(output); + }); + }); + }); + + describe('toNumber', () => { + it.each([...hexToNumberValidData, [123, 123], ['123', 123]])('%s', (input, output) => { + expect(toNumber(input)).toEqual(output); + }); + }); + + describe('fromWei', () => { + describe('valid cases', () => { + it.each(fromWeiValidData)('%s', (input, output) => { + expect(fromWei(input[0], input[1])).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(fromWeiInvalidData)('%s', (input, output) => { + expect(() => fromWei(input[0], input[1])).toThrow(output); + }); + }); + }); + + describe('toWei', () => { + describe('valid cases', () => { + it.each(toWeiValidData)('%s', (input, output) => { + expect(toWei(output, input[1])).toEqual(input[0].toString()); + }); + }); + + describe('invalid cases', () => { + it.each(toWeiInvalidData)('%s', (input, output) => { + expect(() => toWei(input[0], input[1])).toThrow(output); + }); + }); + }); + describe('toChecksumAddress', () => { + describe('valid cases', () => { + it.each(toCheckSumValidData)('%s', (input, output) => { + expect(toChecksumAddress(input)).toEqual(output); + }); + }); + describe('invalid cases', () => { + it.each(toCheckSumInvalidData)('%s', (input, output) => { + expect(() => toChecksumAddress(input)).toThrow(output); + }); + }); + }); + describe('bytesToUint8Array', () => { + describe('bytesToUint8Array', () => { + describe('valid cases', () => { + it.each(bytesToUint8ArrayValidData)('%s', (input, output) => { + expect(bytesToUint8Array(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(bytesToUint8ArrayInvalidData)('%s', (input, output) => { + expect(() => bytesToUint8Array(input)).toThrow(output); + }); + }); + }); + }); + describe('toBigInt', () => { + describe('valid cases', () => { + it.each(toBigIntValidData)('%s', (input, output) => { + expect(toBigInt(input)).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(toBigIntInvalidData)('%s', (input, output) => { + expect(() => toBigInt(input)).toThrow(output); + }); + }); + }); +}); diff --git a/packages/web3-utils/test/unit/event_emitter_dom.test.ts b/packages/web3-utils/test/unit/event_emitter_dom.test.ts new file mode 100644 index 00000000000..b58ab6de1a8 --- /dev/null +++ b/packages/web3-utils/test/unit/event_emitter_dom.test.ts @@ -0,0 +1,128 @@ +/** + * @jest-environment jsdom + */ + +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// this file contains the unit test for the event emitter in the DOM environment +// it is executed in the jsdom environment (see "@jest-environment jsdom" in the top comment of this file) + +// ignore the following rule to allow keeping `@jest-environment jsdom` on top: +// eslint-disable-next-line header/header +import { EventEmitter } from '../../src/event_emitter'; + +describe('EventEmitter with DOM', () => { + let emitter: EventEmitter; + + beforeEach(() => { + emitter = new EventEmitter(); + }); + + describe('on', () => { + it('should add a listener for the specified event', () => { + const callback = jest.fn(); + emitter.on('test', callback); + emitter.emit('test', 'hello'); + expect(callback).toHaveBeenCalledWith('hello'); + }); + }); + + describe('once', () => { + it('should add a listener for the specified event that is only called once', () => { + const callback = jest.fn(); + emitter.once('test', callback); + emitter.emit('test', 'hello'); + emitter.emit('test', 'world'); + expect(callback).toHaveBeenCalledTimes(1); + expect(callback).toHaveBeenCalledWith('hello'); + }); + }); + + describe('off', () => { + it('should remove a listener for the specified event', () => { + const callback = jest.fn(); + emitter.on('test', callback); + emitter.off('test', callback); + emitter.emit('test', 'hello'); + expect(callback).not.toHaveBeenCalled(); + }); + }); + + describe('emit', () => { + it('should call all listeners for the specified event', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test', callback1); + emitter.on('test', callback2); + emitter.emit('test', 'hello'); + expect(callback1).toHaveBeenCalledWith('hello'); + expect(callback2).toHaveBeenCalledWith('hello'); + }); + }); + + describe('listenerCount', () => { + it('should return the number of listeners for the specified event', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test', callback1); + emitter.on('test', callback2); + expect(emitter.listenerCount('test')).toBe(2); + }); + }); + + describe('listeners', () => { + it('should return an array of listeners for the specified event', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test', callback1); + emitter.on('test', callback2); + expect(emitter.listeners('test')).toEqual([callback1, callback2]); + }); + }); + + describe('eventNames', () => { + it('should return an array of event names that have listeners', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test1', callback1); + emitter.on('test2', callback2); + expect(emitter.eventNames()).toEqual(['test1', 'test2']); + }); + }); + + describe('removeAllListeners', () => { + it('should remove all listeners for all events', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test1', callback1); + emitter.on('test2', callback2); + emitter.removeAllListeners(); + emitter.emit('test1', 'hello'); + emitter.emit('test2', 'world'); + expect(callback1).not.toHaveBeenCalled(); + expect(callback2).not.toHaveBeenCalled(); + }); + }); + + describe('setMaxListeners', () => { + it('should set the maximum number of listeners for an event', () => { + emitter.setMaxListeners(2); + expect(emitter.getMaxListeners()).toBe(2); + }); + }); +}); diff --git a/packages/web3-utils/test/unit/event_emitter_node.test.ts b/packages/web3-utils/test/unit/event_emitter_node.test.ts new file mode 100644 index 00000000000..a78fe8f63e1 --- /dev/null +++ b/packages/web3-utils/test/unit/event_emitter_node.test.ts @@ -0,0 +1,122 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// this file will contain the unit test for the event emitter in the Node environment + +import { EventEmitter } from '../../src/event_emitter'; + +describe('EventEmitter with Node', () => { + // let emitter = new EventEmitter(); + let emitter: EventEmitter; + + beforeEach(() => { + emitter = new EventEmitter(); + }); + + describe('on', () => { + it('should add a listener for the specified event', () => { + const callback = jest.fn(); + emitter.on('test', callback); + emitter.emit('test', 'hello'); + expect(callback).toHaveBeenCalledWith('hello'); + }); + }); + + describe('once', () => { + it('should add a listener for the specified event that is only called once', () => { + const callback = jest.fn(); + emitter.once('test', callback); + emitter.emit('test', 'hello'); + emitter.emit('test', 'world'); + expect(callback).toHaveBeenCalledTimes(1); + expect(callback).toHaveBeenCalledWith('hello'); + }); + }); + + describe('off', () => { + it('should remove a listener for the specified event', () => { + const callback = jest.fn(); + emitter.on('test', callback); + emitter.off('test', callback); + emitter.emit('test', 'hello'); + expect(callback).not.toHaveBeenCalled(); + }); + }); + + describe('emit', () => { + it('should call all listeners for the specified event', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test', callback1); + emitter.on('test', callback2); + emitter.emit('test', 'hello'); + expect(callback1).toHaveBeenCalledWith('hello'); + expect(callback2).toHaveBeenCalledWith('hello'); + }); + }); + + describe('listenerCount', () => { + it('should return the number of listeners for the specified event', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test', callback1); + emitter.on('test', callback2); + expect(emitter.listenerCount('test')).toBe(2); + }); + }); + + describe('listeners', () => { + it('should return an array of listeners for the specified event', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test', callback1); + emitter.on('test', callback2); + expect(emitter.listeners('test')).toEqual([callback1, callback2]); + }); + }); + + describe('eventNames', () => { + it('should return an array of event names that have listeners', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test1', callback1); + emitter.on('test2', callback2); + expect(emitter.eventNames()).toEqual(['test1', 'test2']); + }); + }); + + describe('removeAllListeners', () => { + it('should remove all listeners for all events', () => { + const callback1 = jest.fn(); + const callback2 = jest.fn(); + emitter.on('test1', callback1); + emitter.on('test2', callback2); + emitter.removeAllListeners(); + emitter.emit('test1', 'hello'); + emitter.emit('test2', 'world'); + expect(callback1).not.toHaveBeenCalled(); + expect(callback2).not.toHaveBeenCalled(); + }); + }); + + describe('setMaxListeners', () => { + it('should set the maximum number of listeners for an event', () => { + emitter.setMaxListeners(2); + expect(emitter.getMaxListeners()).toBe(2); + }); + }); +}); diff --git a/packages/web3-utils/test/unit/formatter.test.ts b/packages/web3-utils/test/unit/formatter.test.ts new file mode 100644 index 00000000000..b58f5459584 --- /dev/null +++ b/packages/web3-utils/test/unit/formatter.test.ts @@ -0,0 +1,740 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + Address, + Bytes, + DEFAULT_RETURN_FORMAT, + FMT_BYTES, + FMT_NUMBER, + FormatType, + HexString, + Numbers, +} from 'web3-types'; +import { expectTypeOf, typecheck } from '@humeris/espresso-shot'; +import { isDataFormatValid, convertScalarValueValid } from '../fixtures/formatter'; +import { format, isDataFormat, convertScalarValue } from '../../src/formatter'; +import { hexToBytes } from '../../src/converters'; + +type TestTransactionInfoType = { + readonly blockHash?: Bytes; + readonly blockNumber?: Numbers; + readonly from: Address; + readonly hash: Bytes; + readonly transactionIndex?: Numbers; +}; + +type TestBlockType = { + readonly parentHash: Bytes; + readonly sha3Uncles: Bytes; + readonly miner: Bytes; + readonly stateRoot: Bytes; + readonly transactionsRoot: Bytes; + readonly receiptsRoot: Bytes; + readonly logsBloom?: Bytes; + readonly difficulty?: Numbers; + readonly number?: Numbers; + readonly gasLimit: Numbers; + readonly gasUsed: Numbers; + readonly timestamp: Numbers; + readonly extraData: Bytes; + readonly mixHash: Bytes; + readonly nonce?: Numbers; + readonly totalDifficulty: Numbers; + readonly baseFeePerGas?: Numbers; + readonly size: Numbers; + readonly transactions: Bytes[] | TestTransactionInfoType[]; + readonly uncles: Bytes[]; + readonly hash?: Bytes; +}; + +describe('formatter', () => { + describe('types', () => { + describe('scalar types', () => { + typecheck('should not format non-formatable scalar type', () => { + type T = FormatType< + boolean, + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + + describe('number', () => { + typecheck('should format for FMT_NUMBER.BIGINT', () => { + type T = FormatType< + Numbers, + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + + typecheck('should format for FMT_NUMBER.HEX', () => { + type T = FormatType< + Numbers, + { number: FMT_NUMBER.HEX; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + + typecheck('should format for FMT_NUMBER.NUMBER', () => { + type T = FormatType< + Numbers, + { number: FMT_NUMBER.NUMBER; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + + typecheck('should format for FMT_NUMBER.STR', () => { + type T = FormatType< + Numbers, + { number: FMT_NUMBER.STR; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + }); + + describe('bytes', () => { + typecheck('should format for FMT_BYTES.UINT8ARRAY', () => { + type T = FormatType< + Bytes, + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + + typecheck('should format for FMT_BYTES.HEX', () => { + type T = FormatType; + + return expectTypeOf().toBe(); + }); + + typecheck('should format for FMT_BYTES.UINT8ARRAY', () => { + type T = FormatType< + Bytes, + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + }); + }); + + describe('array types', () => { + typecheck('should not format non-formatable array type', () => { + type T = FormatType< + boolean[], + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + + describe('number', () => { + typecheck('should format for FMT_NUMBER.BIGINT', () => { + type T = FormatType< + Numbers[], + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + + typecheck('should format for FMT_NUMBER.HEX', () => { + type T = FormatType< + Numbers[], + { number: FMT_NUMBER.HEX; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + + typecheck('should format for FMT_NUMBER.NUMBER', () => { + type T = FormatType< + Numbers[], + { number: FMT_NUMBER.NUMBER; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + + typecheck('should format for FMT_NUMBER.STR', () => { + type T = FormatType< + Numbers[], + { number: FMT_NUMBER.STR; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + }); + + describe('bytes', () => { + typecheck('should format for FMT_BYTES.UINT8ARRAY', () => { + type T = FormatType< + Bytes[], + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + + typecheck('should format for FMT_BYTES.HEX', () => { + type T = FormatType< + Bytes[], + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.HEX } + >; + + return expectTypeOf().toBe(); + }); + + typecheck('should format for FMT_BYTES.UINT8ARRAY', () => { + type T = FormatType< + Bytes[], + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe(); + }); + }); + }); + + describe('objects', () => { + typecheck('should format correct types for simple object', () => { + type T = FormatType< + { + handleRevert: boolean; + timeout: number; + data: Uint8Array; + }, + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe<{ + handleRevert: boolean; + timeout: bigint; + data: Uint8Array; + }>(); + }); + + typecheck('should format correct types for array', () => { + type T = FormatType< + { + handleRevert: boolean; + timeout: number[]; + data: Uint8Array[]; + }, + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe<{ + handleRevert: boolean; + timeout: bigint[]; + data: Uint8Array[]; + }>(); + }); + + typecheck('should format correct types for nested object', () => { + type T = FormatType< + { + nested: { + handleRevert: boolean; + timeout: number[]; + data: Uint8Array[]; + }; + }, + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe<{ + nested: { handleRevert: boolean; timeout: bigint[]; data: Uint8Array[] }; + }>(); + }); + + typecheck('should format correct types for tuple', () => { + type T = FormatType< + { + tuple: [Uint8Array, number]; + }, + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe<{ + tuple: [Uint8Array, bigint]; + }>(); + }); + + typecheck('should format correct tuple type', () => { + type T = FormatType< + [Uint8Array, number], + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe<[Uint8Array, bigint]>(); + }); + + typecheck('should format block for number as "hex" and bytes as "hex"', () => { + type T = FormatType< + TestBlockType, + { number: FMT_NUMBER.HEX; bytes: FMT_BYTES.HEX } + >; + + return expectTypeOf().toBe<{ + readonly parentHash: string; + readonly sha3Uncles: string; + readonly miner: string; + readonly stateRoot: string; + readonly transactionsRoot: string; + readonly receiptsRoot: string; + readonly logsBloom?: string; + readonly difficulty?: string; + readonly number?: string; + readonly gasLimit: string; + readonly gasUsed: string; + readonly timestamp: string; + readonly extraData: string; + readonly mixHash: string; + readonly nonce?: string; + readonly totalDifficulty: string; + readonly baseFeePerGas?: string; + readonly size: string; + readonly transactions: + | string[] + | { + readonly blockHash?: string; + readonly blockNumber?: string; + readonly from: Address; + readonly hash: string; + readonly transactionIndex?: string; + }[]; + readonly uncles: string[]; + readonly hash?: string; + }>(); + }); + + typecheck( + 'should format block for number as "bigint" and bytes as "uint8array"', + () => { + type T = FormatType< + TestBlockType, + { number: FMT_NUMBER.BIGINT; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe<{ + readonly parentHash: Uint8Array; + readonly sha3Uncles: Uint8Array; + readonly miner: Uint8Array; + readonly stateRoot: Uint8Array; + readonly transactionsRoot: Uint8Array; + readonly receiptsRoot: Uint8Array; + readonly logsBloom?: Uint8Array; + readonly difficulty?: bigint; + readonly number?: bigint; + readonly gasLimit: bigint; + readonly gasUsed: bigint; + readonly timestamp: bigint; + readonly extraData: Uint8Array; + readonly mixHash: Uint8Array; + readonly nonce?: bigint; + readonly totalDifficulty: bigint; + readonly baseFeePerGas?: bigint; + readonly size: bigint; + readonly transactions: + | Uint8Array[] + | { + readonly blockHash?: Uint8Array; + readonly blockNumber?: bigint; + readonly from: Address; + readonly hash: Uint8Array; + readonly transactionIndex?: bigint; + }[]; + readonly uncles: Uint8Array[]; + readonly hash?: Uint8Array; + }>(); + }, + ); + + typecheck( + 'should format block for number as "number" and bytes as "uint8array"', + () => { + type T = FormatType< + TestBlockType, + { number: FMT_NUMBER.NUMBER; bytes: FMT_BYTES.UINT8ARRAY } + >; + + return expectTypeOf().toBe<{ + readonly parentHash: Uint8Array; + readonly sha3Uncles: Uint8Array; + readonly miner: Uint8Array; + readonly stateRoot: Uint8Array; + readonly transactionsRoot: Uint8Array; + readonly receiptsRoot: Uint8Array; + readonly logsBloom?: Uint8Array; + readonly difficulty?: number; + readonly number?: number; + readonly gasLimit: number; + readonly gasUsed: number; + readonly timestamp: number; + readonly extraData: Uint8Array; + readonly mixHash: Uint8Array; + readonly nonce?: number; + readonly totalDifficulty: number; + readonly baseFeePerGas?: number; + readonly size: number; + readonly transactions: + | Uint8Array[] + | { + readonly blockHash?: Uint8Array; + readonly blockNumber?: number; + readonly from: Address; + readonly hash: Uint8Array; + readonly transactionIndex?: number; + }[]; + readonly uncles: Uint8Array[]; + readonly hash?: Uint8Array; + }>(); + }, + ); + }); + }); + + describe('format', () => { + describe('scalar values', () => { + it('should not format non-formatable scalar type', () => { + expect(format({ format: 'boolean' }, true, DEFAULT_RETURN_FORMAT)).toBe(true); + }); + + describe('number', () => { + it('should format for FMT_NUMBER.BIGINT', () => { + expect( + format({ format: 'uint' }, 10, { + number: FMT_NUMBER.BIGINT, + bytes: FMT_BYTES.HEX, + }), + ).toEqual(BigInt(10)); + }); + + it('should format for FMT_NUMBER.HEX', () => { + expect( + format({ format: 'uint' }, 10, { + number: FMT_NUMBER.HEX, + bytes: FMT_BYTES.HEX, + }), + ).toBe('0xa'); + }); + + it('should format for FMT_NUMBER.NUMBER', () => { + expect( + format({ format: 'uint' }, '0xa', { + number: FMT_NUMBER.NUMBER, + bytes: FMT_BYTES.HEX, + }), + ).toBe(10); + }); + + it('should format for FMT_NUMBER.STR', () => { + expect( + format({ format: 'uint' }, 10, { + number: FMT_NUMBER.STR, + bytes: FMT_BYTES.HEX, + }), + ).toBe('10'); + }); + }); + + describe('bytes', () => { + it('should format for FMT_BYTES.HEX', () => { + expect( + format({ format: 'bytes' }, new Uint8Array(hexToBytes('100bca')), { + number: FMT_NUMBER.STR, + bytes: FMT_BYTES.HEX, + }), + ).toBe('0x100bca'); + }); + + it('should format for FMT_BYTES.UINT8ARRAY', () => { + expect( + format({ format: 'bytes' }, '0x100bca', { + number: FMT_NUMBER.STR, + bytes: FMT_BYTES.UINT8ARRAY, + }), + ).toEqual(new Uint8Array([16, 11, 202])); + }); + }); + }); + + describe('array values', () => { + it('should format array values with single type', () => { + const schema = { + type: 'object', + properties: { + int_arr: { + type: 'array', + items: { + format: 'uint', + }, + }, + bytes_arr: { + type: 'array', + items: { + format: 'bytes', + }, + }, + }, + }; + + const data = { + int_arr: [10, 10, 10], + bytes_arr: [ + new Uint8Array(hexToBytes('FF')), + new Uint8Array(hexToBytes('FF')), + new Uint8Array(hexToBytes('FF')), + ], + }; + + const result = { + int_arr: ['0xa', '0xa', '0xa'], + bytes_arr: ['0xff', '0xff', '0xff'], + }; + + expect( + format(schema, data, { number: FMT_NUMBER.HEX, bytes: FMT_BYTES.HEX }), + ).toEqual(result); + }); + + it('should format array values with object type', () => { + const schema = { + type: 'object', + properties: { + arr: { + type: 'array', + items: { + type: 'object', + properties: { + prop1: { + format: 'uint', + }, + prop2: { + format: 'bytes', + }, + }, + }, + }, + }, + }; + + const data = { + arr: [ + { prop1: 10, prop2: new Uint8Array(hexToBytes('FF')) }, + { prop1: 10, prop2: new Uint8Array(hexToBytes('FF')) }, + ], + }; + + const result = { + arr: [ + { prop1: '0xa', prop2: '0xff' }, + { prop1: '0xa', prop2: '0xff' }, + ], + }; + + expect( + format(schema, data, { number: FMT_NUMBER.HEX, bytes: FMT_BYTES.HEX }), + ).toEqual(result); + }); + + it('should format array values with tuple type', () => { + const schema = { + type: 'object', + properties: { + tuple: { + type: 'array', + items: [ + { + format: 'uint', + }, + { + format: 'bytes', + }, + ], + }, + }, + }; + + const data = { + tuple: [10, new Uint8Array(hexToBytes('FF'))], + }; + + const result = { + tuple: ['0xa', '0xff'], + }; + + expect( + format(schema, data, { number: FMT_NUMBER.HEX, bytes: FMT_BYTES.HEX }), + ).toEqual(result); + }); + + it('should format simple arrays', () => { + const schema = { + type: 'array', + items: { + format: 'uint', + }, + }; + + const data = [10, 10]; + + const result = ['0xa', '0xa']; + + expect( + format(schema, data, { number: FMT_NUMBER.HEX, bytes: FMT_BYTES.HEX }), + ).toEqual(result); + }); + + it('should format simple tuple', () => { + const schema = { + type: 'array', + items: [ + { + format: 'uint', + }, + { + format: 'bytes', + }, + ], + }; + + const data = [10, new Uint8Array(hexToBytes('FF'))]; + + const result = ['0xa', '0xff']; + + expect( + format(schema, data, { number: FMT_NUMBER.HEX, bytes: FMT_BYTES.HEX }), + ).toEqual(result); + }); + }); + + describe('object values', () => { + it('should format simple object', () => { + const schema = { + type: 'object', + properties: { + handleRevert: { + format: 'bool', + }, + timeout: { + format: 'uint', + }, + data: { + format: 'bytes', + }, + }, + }; + + const data = { + handleRevert: true, + timeout: 10, + data: new Uint8Array(hexToBytes('FE')), + }; + + const expected = { + handleRevert: true, + timeout: '0xa', + data: '0xfe', + }; + + const result = format(schema, data, { + number: FMT_NUMBER.HEX, + bytes: FMT_BYTES.HEX, + }); + + expect(result).toEqual(expected); + }); + + it('should format nested objects', () => { + const schema = { + type: 'object', + properties: { + nested: { + type: 'object', + properties: { + handleRevert: { + format: 'bool', + }, + timeout: { + format: 'uint', + }, + data: { + format: 'bytes', + }, + }, + }, + }, + }; + + const data = { + nested: { + handleRevert: true, + timeout: 10, + data: new Uint8Array(hexToBytes('FE')), + }, + }; + + const expected = { + nested: { + handleRevert: true, + timeout: '0xa', + data: '0xfe', + }, + }; + + const result = format(schema, data, { + number: FMT_NUMBER.HEX, + bytes: FMT_BYTES.HEX, + }); + + expect(result).toEqual(expected); + }); + }); + describe('isDataFormat', () => { + describe('valid cases', () => { + it.each(isDataFormatValid)('%s', (input, output) => { + expect(isDataFormat(input)).toEqual(output); + }); + }); + }); + describe('convertScalar', () => { + describe('valid cases', () => { + it.each(convertScalarValueValid)('%s', (input, output) => { + expect(convertScalarValue(...input)).toEqual(output); + }); + }); + describe('convertScalar bigint', () => { + it.each(convertScalarValueValid)('%s', () => { + expect( + convertScalarValue(100, 'int', { + number: FMT_NUMBER.BIGINT, + bytes: FMT_BYTES.UINT8ARRAY, + }), + ).toBe(BigInt(100)); + }); + }); + }); + }); +}); diff --git a/packages/web3-utils/test/unit/hash.test.ts b/packages/web3-utils/test/unit/hash.test.ts new file mode 100644 index 00000000000..d381e3c4240 --- /dev/null +++ b/packages/web3-utils/test/unit/hash.test.ts @@ -0,0 +1,152 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { keccak256 } from 'js-sha3'; +import { + sha3, + sha3Raw, + soliditySha3, + soliditySha3Raw, + encodePacked, + keccak256 as web3keccak256, +} from '../../src/hash'; +import { + sha3Data, + sha3ValidData, + soliditySha3RawValidData, + sha3RawValidData, + soliditySha3ValidData, + soliditySha3InvalidData, + compareSha3JSValidData, + compareSha3JSRawValidData, + encodePackData, + encodePackedInvalidData, + keccak256ValidData, + soliditySha3BigIntValidData, +} from '../fixtures/hash'; + +describe('hash', () => { + describe('sha3', () => { + describe('valid cases', () => { + it.each(sha3ValidData)('%s', (input, output) => { + expect(sha3(input)).toEqual(output); + }); + }); + + describe('compare with js-sha3 normal cases', () => { + it.each(sha3Data)('%s', input => { + expect(sha3(input)).toBe(`0x${keccak256(input)}`); + }); + }); + + describe('compare with js-sha3 uint8array cases', () => { + it.each(compareSha3JSValidData)('%s', (input, output) => { + expect(sha3(input)).toBe(`0x${keccak256(output)}`); + }); + }); + }); + + describe('sha3Raw', () => { + describe('valid cases', () => { + it.each(sha3RawValidData)('%s', (input, output) => { + expect(sha3Raw(input)).toEqual(output); + }); + }); + describe('comparing with js-sha3 cases', () => { + it.each(compareSha3JSRawValidData)('%s', (input, output) => { + expect(sha3Raw(input)).toBe(`0x${keccak256(output)}`); + }); + }); + }); + + describe('soliditySha3', () => { + describe('valid cases', () => { + it.each(soliditySha3ValidData)('%s', (input, output) => { + expect(soliditySha3(...input)).toEqual(output); + }); + }); + describe('invalid cases', () => { + it.each(soliditySha3InvalidData)('%s', (input, output) => { + expect(() => soliditySha3(input)).toThrow(output); + }); + }); + }); + + describe('soliditySha3Raw', () => { + describe('valid cases', () => { + it.each(soliditySha3RawValidData)('%s', (input, output) => { + expect(soliditySha3Raw(...input)).toEqual(output); + }); + }); + describe('invalid cases', () => { + it.each(soliditySha3InvalidData)('%s', (input, output) => { + expect(() => soliditySha3Raw(input)).toThrow(output); + }); + }); + }); + + describe('encodePacked', () => { + describe('valid cases', () => { + it.each(encodePackData)('%s', (input, output) => { + expect(encodePacked(...input)).toEqual(output); + }); + }); + describe('invalid cases', () => { + it.each(encodePackedInvalidData)('%s', (input, output) => { + expect(() => encodePacked(input)).toThrow(output); + }); + }); + }); + describe('keccak256', () => { + describe('valid cases', () => { + it.each(keccak256ValidData)('%s', (input, output) => { + expect(web3keccak256(input)).toEqual(output); + }); + }); + }); + + describe('extra types supporting', () => { + it('object', () => { + const res = soliditySha3({ + historicBlock: { + hash: '0xcba0b90a5e65512202091c12a2e3b328f374715b9f1c8f32cb4600c726fe2aa6', + height: 1, + }, + networkId: 5777, + }); + expect(res).toBe('0x00203462b63e3a8ca15da715e490c676b0e370f47823e31383fe43c25da3b78d'); + }); + it('object in string', () => { + const res = soliditySha3( + '{"contents":"pragma solidity >=0.4.21 <0.6.0;\\n\\ncontract Migrations {\\n address public owner;\\n uint public last_completed_migration;\\n\\n constructor() public {\\n owner = msg.sender;\\n }\\n\\n modifier restricted() {\\n if (msg.sender == owner) _;\\n }\\n\\n function setCompleted(uint completed) public restricted {\\n last_completed_migration = completed;\\n }\\n\\n function upgrade(address new_address) public restricted {\\n Migrations upgraded = Migrations(new_address);\\n upgraded.setCompleted(last_completed_migration);\\n }\\n}\\n","sourcePath":"/Users/gnidan/src/work/reproduce/2019/01/21/artifacts/contracts/Migrations.sol"}', + ); + expect(res).toBe('0xdb092e2751b8dcb7c8509baade3c0ac290414a71685823c3cbeb28667970b0bd'); + }); + it('another object in string', () => { + const res = soliditySha3( + '{"bytes":"608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610314806100606000396000f3fe608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f01014610067578063445df0ac146100b85780638da5cb5b146100e3578063fdacd5761461013a575b600080fd5b34801561007357600080fd5b506100b66004803603602081101561008a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610175565b005b3480156100c457600080fd5b506100cd61025d565b6040518082815260200191505060405180910390f35b3480156100ef57600080fd5b506100f8610263565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561014657600080fd5b506101736004803603602081101561015d57600080fd5b8101908080359060200190929190505050610288565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561025a5760008190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561024057600080fd5b505af1158015610254573d6000803e3d6000fd5b50505050505b50565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102e557806001819055505b5056fea165627a7a7230582013359aba5684f88626fb6a58a003236e309ef1462172af4afb4afb9bd2532b510029","linkReferences":[]}', + ); + expect(res).toBe('0x46e99868594ceb46b7cd37e4b33d635f12a7751671f8c51dd8218fa0dcf82901'); + }); + + describe('BigInt soliditySha3', () => { + it.each(soliditySha3BigIntValidData)('%s', (input, output) => { + expect(soliditySha3(...input)).toEqual(output); + }); + }); + }); +}); diff --git a/packages/web3-utils/test/unit/jest.config.js b/packages/web3-utils/test/unit/jest.config.js new file mode 100644 index 00000000000..fc28d37c499 --- /dev/null +++ b/packages/web3-utils/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-utils-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-utils/test/unit/json_rpc.test.ts b/packages/web3-utils/test/unit/json_rpc.test.ts new file mode 100644 index 00000000000..89261009916 --- /dev/null +++ b/packages/web3-utils/test/unit/json_rpc.test.ts @@ -0,0 +1,94 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + isResponseWithResult, + isResponseWithError, + isResponseWithNotification, + isSubscriptionResult, + isValidResponse, + isBatchResponse, + toPayload, +} from '../../src/json_rpc'; +import { + isResponseWithResultValidTest, + isResponseWithErrorValidTest, + isResponseWithNotificationValidTest, + isSubscriptionResultValidTest, + toPayloadValidTest, + isValidResponseValidTest, + isBatchResponseValidTest, +} from '../fixtures/json_rpc'; + +describe('json rpc tests', () => { + describe('isResponseWithResult', () => { + describe('valid cases', () => { + it.each(isResponseWithResultValidTest)('%s', (input, output) => { + const result = isResponseWithResult(input); + expect(result).toBe(output); + }); + }); + }); + describe('isResponseWithError', () => { + describe('valid cases', () => { + it.each(isResponseWithErrorValidTest)('should error', (input, output) => { + const result = isResponseWithError(input); + expect(result).toBe(output); + }); + }); + }); + describe('isResponseWithNotification', () => { + describe('valid cases', () => { + it.each(isResponseWithNotificationValidTest)('should have notify', (input, output) => { + const result = isResponseWithNotification(input); + expect(result).toBe(output); + }); + }); + }); + describe('isSubscriptionResult', () => { + describe('valid cases', () => { + it.each(isSubscriptionResultValidTest)('subscription valid test', (input, output) => { + const result = isSubscriptionResult(input); + expect(result).toBe(output); + }); + }); + }); + describe('isValidResponse', () => { + describe('valid cases', () => { + it.each(isValidResponseValidTest)('isValidresponse valid test', (input, output) => { + const result = isValidResponse(input); + expect(result).toBe(output); + }); + }); + }); + describe('isBatchResponseValid', () => { + describe('valid cases', () => { + it.each(isBatchResponseValidTest)('isValidresponse valid test', (input, output) => { + const result = isBatchResponse(input); + expect(result).toBe(output); + }); + }); + }); + describe('toPayloadValid', () => { + describe('valid cases', () => { + it.each(toPayloadValidTest)('isValidresponse valid test', (input, output) => { + const result = toPayload(input); + expect(result).toStrictEqual(output); + }); + }); + }); +}); diff --git a/packages/web3-utils/test/unit/objects.test.ts b/packages/web3-utils/test/unit/objects.test.ts new file mode 100644 index 00000000000..07c4f225022 --- /dev/null +++ b/packages/web3-utils/test/unit/objects.test.ts @@ -0,0 +1,85 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { mergeDeep } from '../../src/objects'; +import { mergeDeepData } from '../fixtures/objects'; + +describe('objects', () => { + describe('mergeDeep', () => { + it.each(mergeDeepData)('$message', ({ destination, sources, output }) => { + mergeDeep(destination, ...sources); + + expect(destination).toEqual(output); + }); + + it('should not mutate the sources', () => { + const before = { a: undefined, b: true, c: new Uint8Array([1, 2, 3]) }; + const result = mergeDeep({}, before, { + a: 3, + d: 'string', + e: { nested: BigInt(4) }, + }) as any; + + expect(before.a).toBeUndefined(); + expect(result.b).toBe(true); + expect(result.c).toEqual(new Uint8Array([1, 2, 3])); + }); + + it('should not overwrite if undefined', () => { + const result = mergeDeep( + {}, + { a: undefined, b: true, c: new Uint8Array([1, 2, 3]), f: 99 }, + { a: 3, d: 'string', e: { nested: BigInt(4) }, f: undefined }, + ) as any; + + expect(result.a).toBe(3); + expect(result.b).toBe(true); + expect(result.c).toEqual(new Uint8Array([1, 2, 3])); + expect(result.d).toBe('string'); + expect(result.e).toEqual({ nested: BigInt(4) }); + expect(result.f).toBe(99); + }); + + it('should not merge array values', () => { + const result = mergeDeep({}, { a: [1, 2] }, { a: [3, 4], b: [4, 5] }) as any; + + expect(result.a).toStrictEqual([3, 4]); + expect(result.b).toStrictEqual([4, 5]); + }); + + it('should not merge typed array values', () => { + const result = mergeDeep( + {}, + { a: new Uint8Array([1, 2]) }, + { a: new Uint8Array([3, 4]), b: new Uint8Array([4, 5]) }, + ) as any; + + expect(result.a).toStrictEqual(new Uint8Array([3, 4])); + expect(result.b).toStrictEqual(new Uint8Array([4, 5])); + }); + + it('should duplicate array values', () => { + const data = { a: new Uint8Array([1, 2]) }; + const result = mergeDeep({}, data) as any; + + // Mutate source object + data.a[0] = 3; + + expect(result.a).toStrictEqual(new Uint8Array([1, 2])); + }); + }); +}); diff --git a/packages/web3-utils/test/unit/promise_helpers.test.ts b/packages/web3-utils/test/unit/promise_helpers.test.ts new file mode 100644 index 00000000000..b18f4f1a5b0 --- /dev/null +++ b/packages/web3-utils/test/unit/promise_helpers.test.ts @@ -0,0 +1,204 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + waitWithTimeout, + rejectIfTimeout, + isPromise, + pollTillDefined, + rejectIfConditionAtInterval, + pollTillDefinedAndReturnIntervalId, +} from '../../src/promise_helpers'; + +describe('promise helpers', () => { + describe('isPromise', () => { + it('detect Promise objects', () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + expect(isPromise(new Promise(() => {}))).toBe(true); + }); + it('detect Promise functions', () => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const func = () => {}; + // eslint-disable-next-line @typescript-eslint/no-empty-function + func.then = () => {}; + expect(isPromise(func)).toBe(true); + }); + }); + + describe('waitWithTimeout', () => { + it('resolve', async () => { + await waitWithTimeout( + new Promise(resolve => { + resolve('resolved'); + }), + 1000, + ).then(val => expect(val).toBe('resolved')); + }); + it('timeout', async () => { + const asyncHelper = async () => { + await new Promise(resolve => { + setTimeout(() => { + resolve('resolved'); + }, 200); + }); + }; + await expect(waitWithTimeout(asyncHelper, 100, new Error('time out'))).rejects.toThrow( + new Error('time out'), + ); + }); + }); + describe('rejectIfTimeout', () => { + it('%s', async () => { + const [timerId, promise] = rejectIfTimeout(100, new Error('value')); + // eslint-disable-next-line jest/no-conditional-expect + await promise.catch(value => expect(value).toEqual(new Error('value'))); + clearTimeout(timerId); + }); + }); + + describe('rejectIfTimeout throw', () => { + it('%s', async () => { + const dummyError = new Error('error'); + const asyncHelper = async () => { + await new Promise((_, reject) => { + reject(dummyError); + }); + }; + await expect(waitWithTimeout(asyncHelper, 100, new Error('time out'))).rejects.toThrow( + dummyError, + ); + }); + }); + + describe('pollTillDefined', () => { + it('returns when immediately resolved', async () => { + const asyncHelper = async () => + new Promise(resolve => { + resolve('resolved'); + }); + await expect(pollTillDefined(asyncHelper, 100)).resolves.toBe('resolved'); + }); + it('returns if later resolved', async () => { + let counter = 0; + const asyncHelper = async () => { + if (counter === 0) { + counter += 1; + return undefined; + } + return new Promise(resolve => { + resolve('resolved'); + }); + }; + + await expect(pollTillDefined(asyncHelper, 100)).resolves.toBe('resolved'); + }); + it('throws if later throws', async () => { + const dummyError = new Error('error'); + let counter = 0; + const asyncHelper = async () => { + if (counter === 0) { + counter += 1; + return undefined; + } + return new Promise((_, reject) => { + reject(dummyError); + }); + }; + await expect(pollTillDefined(asyncHelper, 100)).rejects.toThrow(dummyError); + }); + }); + + describe('pollTillDefinedAndReturnIntervalId', () => { + it('returns when immediately resolved', async () => { + const asyncHelper = async () => + new Promise(resolve => { + resolve('resolved'); + }); + const [promise] = pollTillDefinedAndReturnIntervalId(asyncHelper, 100); + await expect(promise).resolves.toBe('resolved'); + }); + it('returns if later resolved', async () => { + let counter = 0; + const asyncHelper = async () => { + if (counter === 0) { + counter += 1; + return undefined; + } + return new Promise(resolve => { + resolve('resolved'); + }); + }; + const [promise] = pollTillDefinedAndReturnIntervalId(asyncHelper, 100); + await expect(promise).resolves.toBe('resolved'); + }); + + it('should return interval id if not resolved in specific time', async () => { + + let counter = 0; + const asyncHelper = async () => { + if (counter <= 3000000) { + counter += 1; + return undefined; + } + return "result"; + }; + + const testError = new Error('Test P2 Error'); + + const [neverResolvePromise, intervalId] = pollTillDefinedAndReturnIntervalId(asyncHelper, 100); + const promiCheck = Promise.race([neverResolvePromise, rejectIfTimeout(500,testError)[1]]); + + await expect(promiCheck).rejects.toThrow(testError); + expect(intervalId).toBeDefined(); + clearInterval(intervalId); + }); + + it('throws if later throws', async () => { + const dummyError = new Error('error'); + let counter = 0; + const asyncHelper = async () => { + if (counter === 0) { + counter += 1; + return undefined; + } + return new Promise((_, reject) => { + reject(dummyError); + }); + }; + const [promise] = pollTillDefinedAndReturnIntervalId(asyncHelper, 100); + await expect(promise).rejects.toThrow(dummyError); + }); + }); + + describe('rejectIfConditionAtInterval', () => { + it('reject if later throws', async () => { + const dummyError = new Error('error'); + let counter = 0; + const asyncHelper = async () => { + if (counter === 0) { + counter += 1; + return undefined; + } + return dummyError; + }; + const [intervalId, promiseToError] = rejectIfConditionAtInterval(asyncHelper, 100); + await expect(promiseToError).rejects.toThrow(dummyError); + + clearInterval(intervalId); + }); + }); +}); diff --git a/packages/web3-utils/test/unit/random.test.ts b/packages/web3-utils/test/unit/random.test.ts new file mode 100644 index 00000000000..803c423c6bb --- /dev/null +++ b/packages/web3-utils/test/unit/random.test.ts @@ -0,0 +1,33 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { isHexStrict } from '../../src/validation'; +import { randomHex } from '../../src/random'; +import { randomHexData } from '../fixtures/random'; + +describe('random library tests', () => { + describe('randomHex', () => { + describe('valid cases', () => { + it.each(randomHexData)('%s', input => { + const hexResult = randomHex(input); + // eslint-disable-next-line deprecation/deprecation + expect(isHexStrict(hexResult)).toBe(true); + expect(hexResult.length === input * 2 + 2).toBe(true); // bytes + 2 because of hex prefix '0x' + }); + }); + }); +}); diff --git a/packages/web3-utils/test/unit/socket_provider.test.ts b/packages/web3-utils/test/unit/socket_provider.test.ts new file mode 100644 index 00000000000..9c20df7fdd3 --- /dev/null +++ b/packages/web3-utils/test/unit/socket_provider.test.ts @@ -0,0 +1,339 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3APIPayload, EthExecutionAPI, JsonRpcResponse, Web3ProviderStatus } from 'web3-types'; +import { EventEmitter } from '../../src/event_emitter'; +// eslint-disable-next-line import/no-relative-packages +import { sleep } from '../../../../fixtures/utils'; +import { SocketProvider } from '../../src/socket_provider'; + +const dummySocketConnection = { dummy: 'dummy' }; + +class TestProvider extends SocketProvider { + protected _socketConnection?: typeof dummySocketConnection; + + protected _openSocketConnection() { + this._socketConnection = dummySocketConnection; + } + + // Dummy implementation of the abstract base methods + // eslint-disable-next-line + protected _addSocketListeners(): void {} + // eslint-disable-next-line + protected _removeSocketListeners(): void {} + // eslint-disable-next-line + protected _onCloseEvent(_event: any): void {} + // eslint-disable-next-line + protected _sendToSocket(_payload: Web3APIPayload): void {} + // eslint-disable-next-line + protected _parseResponses(_event: any): JsonRpcResponse[] { + return [] as JsonRpcResponse[]; + } + public message(_event: any): void { + this._onMessage(_event); + } + + // eslint-disable-next-line + protected _closeSocketConnection( + _code?: number | undefined, + _data?: string | undefined, + // eslint-disable-next-line + ): void {} + // eslint-disable-next-line + getStatus(): Web3ProviderStatus { + return this._connectionStatus; + } + // eslint-disable-next-line + setStatus(status: Web3ProviderStatus) { + this._connectionStatus = status; + } +} + +describe('SocketProvider', () => { + const socketPath = `some_path`; + const socketOption = { dummyOption: true } as const; + + describe('socket_provider unit tests', () => { + describe('constructor', () => { + it('should construct the instance of the provider', () => { + const provider = new TestProvider(socketPath, socketOption); + expect(provider).toBeInstanceOf(SocketProvider); + expect(provider.SocketConnection).toEqual(dummySocketConnection); + }); + }); + describe('testing _reconnect() method', () => { + it('should not be called when { autoReconnect: false }', () => { + const reconnectOptions = { autoReconnect: false }; + const provider = new TestProvider(socketPath, socketOption, reconnectOptions); + // @ts-expect-error run protected method + jest.spyOn(provider, '_reconnect').mockReturnValue(''); + provider.message(''); + // @ts-expect-error run protected method + expect(provider._reconnect).not.toHaveBeenCalled(); + }); + it('should not call _reconnect with empty response when { autoReconnect: true }', () => { + const reconnectOptions = { autoReconnect: true }; + const provider = new TestProvider(socketPath, socketOption, reconnectOptions); + // @ts-expect-error run protected method + jest.spyOn(provider, '_reconnect').mockReturnValue(''); + provider.message(''); + // @ts-expect-error run protected method + expect(provider._reconnect).not.toHaveBeenCalled(); + }); + }); + + describe('testing connect() method', () => { + it('should call method reconnect in case of error at _openSocketConnection', async () => { + const provider = new TestProvider(socketPath, socketOption); + // @ts-expect-error run protected method + jest.spyOn(provider, '_openSocketConnection').mockImplementation(() => { + throw new Error(); + }); + // @ts-expect-error run protected method + jest.spyOn(provider, '_reconnect').mockReturnValue(''); + // @ts-expect-error run protected method + provider.isReconnecting = true; + provider.connect(); + + await sleep(100); + + // @ts-expect-error run protected method + expect(provider._reconnect).toHaveBeenCalled(); + }); + it('should call method reconnect in case of error at _addSocketListeners', async () => { + const provider = new TestProvider(socketPath, socketOption); + // @ts-expect-error run protected method + jest.spyOn(provider, '_addSocketListeners').mockImplementation(() => { + throw new Error(); + }); + // @ts-expect-error run protected method + jest.spyOn(provider, '_reconnect').mockReturnValue(''); + // @ts-expect-error run protected method + provider.isReconnecting = true; + provider.connect(); + + await sleep(100); + + // @ts-expect-error run protected method + expect(provider._reconnect).toHaveBeenCalled(); + }); + it('should throw "Error while connecting..." in case of error inside `connect()`', () => { + const dummyError = new Error('error'); + const provider = new TestProvider(socketPath, socketOption); + // @ts-expect-error run protected method + jest.spyOn(provider, '_addSocketListeners').mockImplementation(() => { + throw dummyError; + }); + expect(() => provider.connect()).toThrow( + `Error while connecting to ${socketPath}. Reason: ${dummyError.message}`, + ); + }); + it('should throw "Client URL ... is invalid" in case of error with no message inside `connect()`', () => { + const provider = new TestProvider(socketPath, socketOption); + // @ts-expect-error run protected method + jest.spyOn(provider, '_addSocketListeners').mockImplementation(() => { + throw new Error(); + }); + expect(() => provider.connect()).toThrow(`Client URL "${socketPath}" is invalid.`); + }); + }); + + describe('testing supportsSubscriptions() function', () => { + it('should returns false when calling `supportsSubscriptions()`', () => { + const provider = new TestProvider(socketPath, socketOption); + expect(provider.supportsSubscriptions()).toBe(true); + }); + }); + + describe('testing on() method', () => { + it('should internally call `_eventEmitter.on`', () => { + const provider = new TestProvider(socketPath, socketOption); + + // @ts-expect-error run protected method + const funcBSpy = jest.spyOn(provider._eventEmitter, 'on').mockReturnValue(); + const event = 'message'; + const func = () => { + // ... + }; + provider.on(event, func); + expect(funcBSpy).toHaveBeenCalledWith(event, func); + }); + }); + + describe('testing once() method', () => { + it('should internally call `_eventEmitter.once`', () => { + const provider = new TestProvider(socketPath, socketOption); + + // @ts-expect-error run protected method + const funcBSpy = jest.spyOn(provider._eventEmitter, 'once').mockReturnValue(); + const event = 'message'; + const func = () => { + // ... + }; + provider.once(event, func); + expect(funcBSpy).toHaveBeenCalledWith(event, func); + }); + }); + + describe('testing removeListener() method', () => { + it('should internally call `_eventEmitter.removeListener`', () => { + const provider = new TestProvider(socketPath, socketOption); + + const funcBSpy = jest + // @ts-expect-error run protected method + .spyOn(provider._eventEmitter, 'removeListener') + .mockReturnValue(new EventEmitter()); + const event = 'message'; + const func = () => { + // ... + }; + provider.removeListener(event, func); + expect(funcBSpy).toHaveBeenCalledWith(event, func); + }); + }); + + describe('testing disconnect() method', () => { + it('should internally call `super._onDisconnect` and change the connectionStatus to `disconnected`', () => { + const provider = new TestProvider(socketPath, socketOption); + + const funcBSpy = jest + // spy on provider.super._onDisconnect + .spyOn( + Object.getPrototypeOf( + Object.getPrototypeOf(Object.getPrototypeOf(provider)), + ), + '_onDisconnect', + ) + .mockReturnValue(new EventEmitter()); + const code = 0; + const data = '0x0'; + provider.disconnect(code, data); + // @ts-expect-error run protected method + expect(provider._connectionStatus).toBe('disconnected'); + expect(funcBSpy).toHaveBeenCalledWith(code, data); + }); + }); + + describe('testing reset() method', () => { + it('should set `_reconnectAttempts` to 0', () => { + const provider = new TestProvider(socketPath, socketOption); + provider.reset(); + // @ts-expect-error run protected method + expect(provider._reconnectAttempts).toBe(0); + }); + }); + + describe('testing request() method', () => { + it('should throw if the _socketConnection is null', async () => { + const provider = new TestProvider(socketPath, socketOption); + const payload = { method: 'some_rpc_method' }; + // @ts-expect-error run protected method + provider._socketConnection = undefined; + await expect(provider.request(payload)).rejects.toThrow('Connection is undefined'); + }); + it('should throw if the payload id was not provided', async () => { + const provider = new TestProvider(socketPath, socketOption); + const payload = { method: 'some_rpc_method' }; + await expect(provider.request(payload)).rejects.toThrow('Request Id not defined'); + }); + it('should throw if the payload id was provided twice', async () => { + const provider = new TestProvider(socketPath, socketOption); + const payload = { id: 1, method: 'some_rpc_method' }; + provider.setStatus('connected'); + const reqPromise = provider.request(payload); + expect(reqPromise).toBeInstanceOf(Promise); + await expect(provider.request(payload)).rejects.toThrow( + 'Request already sent with following id: 1', + ); + }); + + it('should call `connect` when the status is `disconnected`', () => { + const provider = new TestProvider(socketPath, socketOption); + const payload = { id: 1, method: 'some_rpc_method' }; + provider.setStatus('disconnected'); + jest.spyOn(provider, 'connect').mockReturnValue(); + // @ts-expect-error run protected method + jest.spyOn(provider, '_sendToSocket').mockReturnValue(); + provider + .request(payload) + .then(() => { + // the status of the provider is manipulate manually to be disconnected, + // for that, this request promise will never resolve + }) + .catch(() => { + // nothing + }); + expect(provider.connect).toHaveBeenCalled(); + }); + it('should add request to the `_pendingRequestsQueue` when the status is `connecting`', () => { + const provider = new TestProvider(socketPath, socketOption); + const payload = { id: 1, method: 'some_rpc_method' }; + provider.setStatus('connecting'); + const reqPromise = provider.request(payload); + expect(reqPromise).toBeInstanceOf(Promise); + // @ts-expect-error run protected method + expect(provider._pendingRequestsQueue.get(payload.id).payload).toBe(payload); + }); + + it('should add request to the `_sentRequestsQueue` when the status is `connected`', () => { + const provider = new TestProvider(socketPath, socketOption); + const payload = { id: 1, method: 'some_rpc_method' }; + provider.setStatus('connected'); + const reqPromise = provider.request(payload); + expect(reqPromise).toBeInstanceOf(Promise); + // @ts-expect-error run protected method + expect(provider._sentRequestsQueue.get(payload.id).payload).toBe(payload); + }); + }); + + describe('testing _clearQueues() method', () => { + it('should clear queues when called', () => { + const provider = new TestProvider(socketPath, socketOption); + const payload1 = { id: 1, method: 'some_rpc_method' }; + provider.setStatus('connecting'); + const req1 = provider.request(payload1); + // when the queues will be cleared the promise will reject + req1.catch(() => { + // nothing + }); + // @ts-expect-error run protected method + expect(provider._pendingRequestsQueue.size).toBe(1); + + const payload2 = { id: 2, method: 'some_rpc_method' }; + provider.setStatus('connected'); + const req2 = provider.request(payload2); + // when the queues will be cleared the promise will reject + req2.catch(() => { + // nothing + }); + + // @ts-expect-error run protected method + expect(provider._sentRequestsQueue.size).toBe(1); + + provider.on('error', () => { + // nothing + }); + // @ts-expect-error run protected method + provider._clearQueues(); + // @ts-expect-error run protected method + expect(provider._pendingRequestsQueue.size).toBe(0); + // @ts-expect-error run protected method + expect(provider._sentRequestsQueue.size).toBe(0); + }); + }); + }); +}); diff --git a/packages/web3-utils/test/unit/string_manipulation.test.ts b/packages/web3-utils/test/unit/string_manipulation.test.ts new file mode 100644 index 00000000000..79e59119ce7 --- /dev/null +++ b/packages/web3-utils/test/unit/string_manipulation.test.ts @@ -0,0 +1,116 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + fromTwosComplement, + leftPad, + padLeft, + padRight, + rightPad, + toTwosComplement, +} from '../../src/string_manipulation'; + +import { + padLeftData, + padInvalidData, + padRightData, + toTwosComplementData, + toTwosComplementInvalidData, + fromTwosComplementData, + fromTwosComplementInvalidData, +} from '../fixtures/string_manipulation'; + +describe('string manipulation tests', () => { + describe('padLeft', () => { + describe('valid cases', () => { + it.each(padLeftData)('%s', (input, output) => { + expect(padLeft(input[0], input[1], input[2])).toEqual(output); + }); + }); + describe('invalid cases', () => { + it.each(padInvalidData)('%s', (input, output) => { + expect(() => padLeft(input[0], input[1], input[2])).toThrow(output); + }); + }); + }); + + describe('padRight', () => { + describe('valid cases', () => { + it.each(padRightData)('%s', (input, output) => { + expect(padRight(input[0], input[1], input[2])).toEqual(output); + }); + }); + describe('invalid cases', () => { + it.each(padInvalidData)('%s', (input, output) => { + expect(() => padRight(input[0], input[1], input[2])).toThrow(output); + }); + }); + }); + + describe('leftPad', () => { + describe('valid cases', () => { + it.each(padLeftData)('%s', (input, output) => { + expect(leftPad(input[0], input[1], input[2])).toEqual(output); + }); + }); + describe('invalid cases', () => { + it.each(padInvalidData)('%s', (input, output) => { + expect(() => leftPad(input[0], input[1], input[2])).toThrow(output); + }); + }); + }); + + describe('rightPad', () => { + describe('valid cases', () => { + it.each(padRightData)('%s', (input, output) => { + expect(rightPad(input[0], input[1], input[2])).toEqual(output); + }); + }); + describe('invalid cases', () => { + it.each(padInvalidData)('%s', (input, output) => { + expect(() => rightPad(input[0], input[1], input[2])).toThrow(output); + }); + }); + }); + + describe('toTwosComplement', () => { + describe('valid cases', () => { + it.each(toTwosComplementData)('%s', (input, output) => { + expect(toTwosComplement(input[0], input[1])).toEqual(output); + }); + }); + describe('invalid cases', () => { + it.each(toTwosComplementInvalidData)('%s', (input, output) => { + expect(() => toTwosComplement(input[0], input[1])).toThrow(output); + }); + }); + }); + + describe('fromTwosComplement', () => { + describe('valid cases', () => { + it.each(fromTwosComplementData)('%s', (input, output) => { + expect(fromTwosComplement(input[0], input[1])).toEqual(output); + }); + }); + + describe('invalid cases', () => { + it.each(fromTwosComplementInvalidData)('%s', (input, output) => { + expect(() => fromTwosComplement(input[0], input[1])).toThrow(output); + }); + }); + }); +}); diff --git a/packages/web3-utils/test/unit/uint8array.test.ts b/packages/web3-utils/test/unit/uint8array.test.ts new file mode 100644 index 00000000000..e03712f50a2 --- /dev/null +++ b/packages/web3-utils/test/unit/uint8array.test.ts @@ -0,0 +1,34 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { uint8ArrayConcat, uint8ArrayEquals } from '../../src/uint8array'; +import { uint8ArrayConcatData, uint8ArrayEqualsValidData } from '../fixtures/uint8array'; + +describe('uint8Array utils', () => { + describe('uint8ArrayConcat', () => { + it.each(uint8ArrayConcatData)('%s', (input, output) => { + expect(uint8ArrayConcat(...input)).toEqual(output); + }); + describe('uint8ArrayConcat', () => { + describe('cases', () => { + it.each(uint8ArrayEqualsValidData)('%s', (input, output) => { + expect(uint8ArrayEquals(input[0], input[1])).toEqual(output); + }); + }); + }); + }); +}); diff --git a/packages/web3-utils/test/unit/validation.test.ts b/packages/web3-utils/test/unit/validation.test.ts new file mode 100644 index 00000000000..84e9280bf8e --- /dev/null +++ b/packages/web3-utils/test/unit/validation.test.ts @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable jest/no-conditional-expect */ + +import { InvalidBlockError } from 'web3-errors'; +import { compareBlockNumbers } from '../../src/validation'; +import { + compareBlockNumbersInvalidData, + compareBlockNumbersValidData, +} from '../fixtures/validation'; + +describe('validation', () => { + describe('compareBlockNumbers', () => { + it.each([...compareBlockNumbersValidData, ...compareBlockNumbersInvalidData])( + '%s', + (input, output) => { + if (output instanceof InvalidBlockError) { + expect(() => compareBlockNumbers(input[0], input[1])).toThrow(output); + } else { + expect(compareBlockNumbers(input[0], input[1])).toEqual(output); + } + }, + ); + }); +}); diff --git a/packages/web3-utils/test/unit/web3_deferred_promise.test.ts b/packages/web3-utils/test/unit/web3_deferred_promise.test.ts new file mode 100644 index 00000000000..b8180705969 --- /dev/null +++ b/packages/web3-utils/test/unit/web3_deferred_promise.test.ts @@ -0,0 +1,56 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3DeferredPromise } from '../../src/web3_deferred_promise'; + +describe('Web3DeferredPromise', () => { + describe('getState Web3DeferredPromise', () => { + it('%s', () => { + const promise = new Web3DeferredPromise(); + expect(promise.state).toBe('pending'); + }); + }); + describe('Web3DeferredPromise resolves promise', () => { + it('%s', () => { + const promise = new Web3DeferredPromise(); + promise.resolve('mockValue'); + expect(promise.state).toBe('fulfilled'); + }); + }); + describe('Web3DeferredPromise reject promise', () => { + it('%s', async () => { + const promise = new Web3DeferredPromise(); + promise.reject(new Error('fail')); + // eslint-disable-next-line jest/no-conditional-expect + await promise.catch(val => expect(val).toEqual(new Error('fail'))); + expect(promise.state).toBe('rejected'); + }); + }); + + describe('Web3DeferredPromise timeout', () => { + it('%s', async () => { + const promise = new Web3DeferredPromise({ + timeout: 100, + eagerStart: true, + timeoutMessage: 'DeferredPromise timed out', + }); + // eslint-disable-next-line jest/no-conditional-expect + await promise.catch(val => expect(val).toEqual(new Error('DeferredPromise timed out'))); + expect(promise.state).toBe('rejected'); + }); + }); +}); diff --git a/packages/web3-utils/tsconfig.cjs.json b/packages/web3-utils/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-utils/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-utils/tsconfig.esm.json b/packages/web3-utils/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-utils/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-utils/tsconfig.json b/packages/web3-utils/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3-utils/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3-utils/tsconfig.types.json b/packages/web3-utils/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-utils/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-utils/tsdoc.json b/packages/web3-utils/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-utils/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-utils/types/index.d.ts b/packages/web3-utils/types/index.d.ts deleted file mode 100644 index 59606095e47..00000000000 --- a/packages/web3-utils/types/index.d.ts +++ /dev/null @@ -1,241 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); - -export type Unit = - | 'noether' - | 'wei' - | 'kwei' - | 'Kwei' - | 'babbage' - | 'femtoether' - | 'mwei' - | 'Mwei' - | 'lovelace' - | 'picoether' - | 'gwei' - | 'Gwei' - | 'shannon' - | 'nanoether' - | 'nano' - | 'szabo' - | 'microether' - | 'micro' - | 'finney' - | 'milliether' - | 'milli' - | 'ether' - | 'kether' - | 'grand' - | 'mether' - | 'gether' - | 'tether'; - -export type Mixed = - | string - | number - | BN - | { - type: string; - value: string; - } - | { - t: string; - v: string | BN | number; - } - | boolean; - -export type Hex = string | number; - -// utils types -export function isBN(value: string | number): boolean; -export function isBigNumber(value: BN): boolean; -export function toBN(value: number | string): BN; -export function toTwosComplement(value: number | string | BN): string; -export function isAddress(address: string, chainId?: number): boolean; -export function isHex(hex: Hex): boolean; -export function isHexStrict(hex: Hex): boolean; -export function asciiToHex(string: string, length?: number): string; -export function hexToAscii(string: string): string; -export function toAscii(string: string): string; -export function bytesToHex(bytes: number[]): string; -export function numberToHex(value: number | string | BN): string; -export function checkAddressChecksum(address: string, chainId?: number): boolean; -export function fromAscii(string: string): string; -export function fromDecimal(value: string | number): string; -export function fromUtf8(string: string): string; -export function fromWei(value: string | BN, unit?: Unit): string; -export function hexToBytes(hex: Hex): number[]; -export function hexToNumber(hex: Hex): number; -export function hexToNumberString(hex: Hex): string; -export function hexToString(hex: Hex): string; -export function hexToUtf8(string: string): string; -export function keccak256(value: string | BN): string; -export function padLeft(value: string | number, characterAmount: number, sign?: string): string; -export function leftPad(string: string | number, characterAmount: number, sign?: string): string; -export function rightPad(string: string | number, characterAmount: number, sign?: string): string; -export function padRight(string: string | number, characterAmount: number, sign?: string): string; -export function sha3(value: string | BN): string | null; -export function sha3Raw(value: string | BN): string; -export function randomHex(bytesSize: number): string; -export function utf8ToHex(string: string): string; -export function stringToHex(string: string): string; -export function toChecksumAddress(address: string, chainId?: number): string; -export function toDecimal(hex: Hex): number; -export function toHex(value: number | string | BN): string; -export function toUtf8(string: string): string; -export function toWei(val: BN, unit?: Unit): BN; -export function toWei(val: string, unit?: Unit): string; -export function isBloom(bloom: string): boolean; -export function isInBloom(bloom: string, value: string | Uint8Array): boolean; -export function isUserEthereumAddressInBloom(bloom: string, ethereumAddress: string): boolean; -export function isContractAddressInBloom(bloom: string, contractAddress: string): boolean; -export function isTopicInBloom(bloom: string, topic: string): boolean; -export function isTopic(topic: string): boolean; -export function jsonInterfaceMethodToString(abiItem: AbiItem): string; -export function soliditySha3(...val: Mixed[]): string | null; -export function soliditySha3Raw(...val: Mixed[]): string; -export function encodePacked(...val: Mixed[]): string | null; -export function getUnitValue(unit: Unit): string; -export function unitMap(): Units; -export function testAddress(bloom: string, address: string): boolean; -export function testTopic(bloom: string, topic: string): boolean; -export function getSignatureParameters(signature: string): {r: string; s: string; v: number}; -export function stripHexPrefix(str: string): string; - -// interfaces -export interface Utils { - isBN(value: string | number): boolean; - isBigNumber(value: BN): boolean; - toBN(value: number | string): BN; - toTwosComplement(value: number | string | BN): string; - isAddress(address: string, chainId?: number): boolean; - isHex(hex: Hex): boolean; - isHexStrict(hex: Hex): boolean; - asciiToHex(string: string, length?: number): string; - hexToAscii(string: string): string; - toAscii(string: string): string; - bytesToHex(bytes: number[]): string; - numberToHex(value: number | string | BN): string; - checkAddressChecksum(address: string, chainId?: number): boolean; - fromAscii(string: string): string; - fromDecimal(value: string | number): string; - fromUtf8(string: string): string; - fromWei(value: string | BN, unit?: Unit): string; - hexToBytes(hex: Hex): number[]; - hexToNumber(hex: Hex): number; - hexToNumberString(hex: Hex): string; - hexToString(hex: Hex): string; - hexToUtf8(string: string): string; - keccak256(value: string | BN): string; - padLeft(value: string | number, characterAmount: number, sign?: string): string; - leftPad(string: string | number, characterAmount: number, sign?: string): string; - rightPad(string: string | number, characterAmount: number, sign?: string): string; - padRight(string: string | number, characterAmount: number, sign?: string): string; - sha3(value: string | BN): string | null; - randomHex(bytesSize: number): string; - utf8ToHex(string: string): string; - stringToHex(string: string): string; - toChecksumAddress(address: string, chainId?: number): string; - toDecimal(hex: Hex): number; - toHex(value: number | string | BN): string; - toUtf8(string: string): string; - toWei(val: BN, unit?: Unit): BN; - toWei(val: string, unit?: Unit): string; - isBloom(bloom: string): boolean; - isInBloom(bloom: string, value: string | Uint8Array): boolean; - isUserEthereumAddressInBloom(bloom: string, ethereumAddress: string): boolean; - isContractAddressInBloom(bloom: string, contractAddress: string): boolean; - isTopicInBloom(bloom: string, topic: string): boolean; - isTopic(topic: string): boolean; - jsonInterfaceMethodToString(abiItem: AbiItem): string; - soliditySha3(...val: Mixed[]): string | null; - soliditySha3Raw(...val: Mixed[]): string; - encodePacked(...val: Mixed[]): string | null; - getUnitValue(unit: Unit): string; - unitMap(): Units; - testAddress(bloom: string, address: string): boolean; - testTopic(bloom: string, topic: string): boolean; - getSignatureParameters(signature: string): {r: string; s: string; v: number}; - stripHexPrefix(str: string): string; -} - -export interface Units { - noether: string; - wei: string; - kwei: string; - Kwei: string; - babbage: string; - femtoether: string; - mwei: string; - Mwei: string; - lovelace: string; - picoether: string; - gwei: string; - Gwei: string; - shannon: string; - nanoether: string; - nano: string; - szabo: string; - microether: string; - micro: string; - finney: string; - milliether: string; - milli: string; - ether: string; - kether: string; - grand: string; - mether: string; - gether: string; - tether: string; -} - -export type AbiType = 'function' | 'constructor' | 'event' | 'fallback'; -export type StateMutabilityType = 'pure' | 'view' | 'nonpayable' | 'payable'; - -export interface AbiItem { - anonymous?: boolean; - constant?: boolean; - inputs?: AbiInput[]; - name?: string; - outputs?: AbiOutput[]; - payable?: boolean; - stateMutability?: StateMutabilityType; - type: AbiType; - gas?: number; -} - -export interface AbiInput { - name: string; - type: string; - indexed?: boolean; - components?: AbiInput[]; - internalType?: string; -} - -export interface AbiOutput { - name: string; - type: string; - components?: AbiOutput[]; - internalType?: string; -} diff --git a/packages/web3-utils/types/tests/ascii-to-hex-test.ts b/packages/web3-utils/types/tests/ascii-to-hex-test.ts deleted file mode 100644 index 0f2f750ce85..00000000000 --- a/packages/web3-utils/types/tests/ascii-to-hex-test.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file ascii-to-hex-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {asciiToHex} from 'web3-utils'; - -// $ExpectType string -asciiToHex('I have 100!'); - -// $ExpectType string -asciiToHex('I have 100!', 32); - -// $ExpectError -asciiToHex(345); -// $ExpectError -asciiToHex(new BN(3)); -// $ExpectError -asciiToHex({}); -// $ExpectError -asciiToHex(true); -// $ExpectError -asciiToHex(['string']); -// $ExpectError -asciiToHex([4]); -// $ExpectError -asciiToHex(null); -// $ExpectError -asciiToHex(undefined); diff --git a/packages/web3-utils/types/tests/bytes-to-hex-test.ts b/packages/web3-utils/types/tests/bytes-to-hex-test.ts deleted file mode 100644 index af7253c352f..00000000000 --- a/packages/web3-utils/types/tests/bytes-to-hex-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file bytes-to-hex-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {bytesToHex} from 'web3-utils'; - -// $ExpectType string -bytesToHex([72]); - -// $ExpectError -bytesToHex(['string']); -// $ExpectError -bytesToHex(345); -// $ExpectError -bytesToHex(new BN(3)); -// $ExpectError -bytesToHex({}); -// $ExpectError -bytesToHex(true); -// $ExpectError -bytesToHex(['string']); -// $ExpectError -bytesToHex(null); -// $ExpectError -bytesToHex(undefined); diff --git a/packages/web3-utils/types/tests/check-address-checksum-test.ts b/packages/web3-utils/types/tests/check-address-checksum-test.ts deleted file mode 100644 index 0ed905dc55b..00000000000 --- a/packages/web3-utils/types/tests/check-address-checksum-test.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file check-address-checksum-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {checkAddressChecksum} from 'web3-utils'; - -// $ExpectType boolean -checkAddressChecksum('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectType boolean -checkAddressChecksum('0xFb6916095CA1dF60bb79CE92ce3Ea74C37c5D359', 31); -// $ExpectType boolean -checkAddressChecksum('0xFb6916095CA1dF60bb79CE92ce3Ea74C37c5D359', undefined); - -// $ExpectError -checkAddressChecksum([4]); -// $ExpectError -checkAddressChecksum(['string']); -// $ExpectError -checkAddressChecksum(345); -// $ExpectError -checkAddressChecksum(new BN(3)); -// $ExpectError -checkAddressChecksum({}); -// $ExpectError -checkAddressChecksum(true); -// $ExpectError -checkAddressChecksum(null); -// $ExpectError -checkAddressChecksum(undefined); -// $ExpectError -checkAddressChecksum('0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb', 'string'); -// $ExpectError -checkAddressChecksum('0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb', [4]); -// $ExpectError -checkAddressChecksum('0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb', new BN(3)); -// $ExpectError -checkAddressChecksum('0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb', {}); -// $ExpectError -checkAddressChecksum('0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb', true); -// $ExpectError -checkAddressChecksum('0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb', null); diff --git a/packages/web3-utils/types/tests/encode-packed.ts b/packages/web3-utils/types/tests/encode-packed.ts deleted file mode 100644 index acfa7e7e52e..00000000000 --- a/packages/web3-utils/types/tests/encode-packed.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file solidity-sha3-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {encodePacked} from 'web3-utils'; - -// $ExpectType string | null -encodePacked('234564535', '0xfff23243', true, -10); -// $ExpectType string | null -encodePacked('Hello!%'); -// $ExpectType string | null -encodePacked('234'); -// $ExpectType string | null -encodePacked(0xea); -// $ExpectType string | null -encodePacked(new BN(3)); -// $ExpectType string | null -encodePacked({type: 'uint256', value: '234'}); -// $ExpectType string | null -encodePacked({t: 'uint', v: new BN('234')}); -// $ExpectType string | null -encodePacked({t: 'string', v: 'Hello!%'}, {t: 'int8', v: -23}, {t: 'address', v: '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d'}); -// $ExpectType string | null -encodePacked('0x407D73d8a49eeb85D32Cf465507dd71d507100c1'); - -// $ExpectError -encodePacked(['hey']); -// $ExpectError -encodePacked([34]); -// $ExpectError -encodePacked(null); -// $ExpectError -encodePacked(undefined); diff --git a/packages/web3-utils/types/tests/from-ascii-test.ts b/packages/web3-utils/types/tests/from-ascii-test.ts deleted file mode 100644 index 504c6ee2698..00000000000 --- a/packages/web3-utils/types/tests/from-ascii-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file from-ascii-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {fromAscii} from 'web3-utils'; - -// $ExpectType string -fromAscii('I have 100!'); - -// $ExpectError -fromAscii(345); -// $ExpectError -fromAscii(new BN(3)); -// $ExpectError -fromAscii({}); -// $ExpectError -fromAscii(true); -// $ExpectError -fromAscii(['string']); -// $ExpectError -fromAscii([4]); -// $ExpectError -fromAscii(null); -// $ExpectError -fromAscii(undefined); diff --git a/packages/web3-utils/types/tests/from-decimal-test.ts b/packages/web3-utils/types/tests/from-decimal-test.ts deleted file mode 100644 index 3870aa3e701..00000000000 --- a/packages/web3-utils/types/tests/from-decimal-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file from-decimal-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {fromDecimal} from 'web3-utils'; - -// $ExpectType string -fromDecimal('232'); -// $ExpectType string -fromDecimal(232); - -// $ExpectError -fromDecimal(new BN(3)); -// $ExpectError -fromDecimal(['string']); -// $ExpectError -fromDecimal([4]); -// $ExpectError -fromDecimal({}); -// $ExpectError -fromDecimal(true); -// $ExpectError -fromDecimal(null); -// $ExpectError -fromDecimal(undefined); diff --git a/packages/web3-utils/types/tests/from-utf8-test.ts b/packages/web3-utils/types/tests/from-utf8-test.ts deleted file mode 100644 index 8ab06f87dd3..00000000000 --- a/packages/web3-utils/types/tests/from-utf8-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file from-utf8-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {fromUtf8} from 'web3-utils'; - -// $ExpectType string -fromUtf8('I have 100£'); - -// $ExpectError -fromUtf8(232); -// $ExpectError -fromUtf8(new BN(3)); -// $ExpectError -fromUtf8(['string']); -// $ExpectError -fromUtf8([4]); -// $ExpectError -fromUtf8({}); -// $ExpectError -fromUtf8(true); -// $ExpectError -fromUtf8(null); -// $ExpectError -fromUtf8(undefined); diff --git a/packages/web3-utils/types/tests/from-wei-test.ts b/packages/web3-utils/types/tests/from-wei-test.ts deleted file mode 100644 index 852616f6881..00000000000 --- a/packages/web3-utils/types/tests/from-wei-test.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file from-wei-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {fromWei} from 'web3-utils'; - -const bigNumber = new BN(3); - -// $ExpectType string -fromWei(bigNumber); -// $ExpectType string -fromWei('1'); -// $ExpectType string -fromWei(bigNumber, 'ether'); -// $ExpectType string -fromWei('1', 'ether'); - -// $ExpectError -fromWei(232); -// $ExpectError -fromWei(['string']); -// $ExpectError -fromWei([4]); -// $ExpectError -fromWei({}); -// $ExpectError -fromWei(true); -// $ExpectError -fromWei(null); -// $ExpectError -fromWei(undefined); -// $ExpectError -fromWei(new BN(3), 'blah'); diff --git a/packages/web3-utils/types/tests/get-signature-params-test.ts b/packages/web3-utils/types/tests/get-signature-params-test.ts deleted file mode 100644 index e1f442239c0..00000000000 --- a/packages/web3-utils/types/tests/get-signature-params-test.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file get-signature-params-tests.ts - * @author Aalok Singh - * @date 2018 - */ - -import BN = require('bn.js'); -import {getSignatureParameters} from 'web3-utils'; - -// $ExpectType { r: string; s: string; v: number; } -getSignatureParameters( - '0x90dc0e49b5a80eef86fcedcb863dcc727aeae5c11187c001fd3d18780ead2cc7701ba1986099a49164702f3d8b2c8dbbd45a6d1beb37d212d21fb1be4bb762a400' -); -// $ExpectError -getSignatureParameters(345); -// $ExpectError -getSignatureParameters(new BN(3)); -// $ExpectError -getSignatureParameters({}); -// $ExpectError -getSignatureParameters(true); -// $ExpectError -getSignatureParameters(['string']); -// $ExpectError -getSignatureParameters([4]); -// $ExpectError -getSignatureParameters(null); -// $ExpectError -getSignatureParameters(undefined); diff --git a/packages/web3-utils/types/tests/get-unit-value-test.ts b/packages/web3-utils/types/tests/get-unit-value-test.ts deleted file mode 100644 index 27ffc9ac857..00000000000 --- a/packages/web3-utils/types/tests/get-unit-value-test.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file get-unit-value-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {getUnitValue} from 'web3-utils'; - -// $ExpectType string -getUnitValue('ether'); - -// $ExpectError -getUnitValue('fake'); -// $ExpectError -getUnitValue(656); -// $ExpectError -getUnitValue(new BN(3)); -// $ExpectError -getUnitValue(['string']); -// $ExpectError -getUnitValue([4]); -// $ExpectError -getUnitValue({}); -// $ExpectError -getUnitValue(true); -// $ExpectError -getUnitValue(null); -// $ExpectError -getUnitValue(undefined); diff --git a/packages/web3-utils/types/tests/hex-to-ascii-test.ts b/packages/web3-utils/types/tests/hex-to-ascii-test.ts deleted file mode 100644 index 991e44ca461..00000000000 --- a/packages/web3-utils/types/tests/hex-to-ascii-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file hex-to-ascii-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {hexToAscii} from 'web3-utils'; - -// $ExpectType string -hexToAscii('0x4920686176652031303021'); - -// $ExpectError -hexToAscii(345); -// $ExpectError -hexToAscii(new BN(3)); -// $ExpectError -hexToAscii({}); -// $ExpectError -hexToAscii(true); -// $ExpectError -hexToAscii(['string']); -// $ExpectError -hexToAscii([4]); -// $ExpectError -hexToAscii(null); -// $ExpectError -hexToAscii(undefined); diff --git a/packages/web3-utils/types/tests/hex-to-bytes-test.ts b/packages/web3-utils/types/tests/hex-to-bytes-test.ts deleted file mode 100644 index 9a57e3559a8..00000000000 --- a/packages/web3-utils/types/tests/hex-to-bytes-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file hex-to-bytes-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {hexToBytes} from 'web3-utils'; - -// $ExpectType number[] -hexToBytes('0x000000ea'); -// $ExpectType number[] -hexToBytes(0x000000ea); - -// $ExpectError -hexToBytes([4]); -// $ExpectError -hexToBytes(['string']); -// $ExpectError -hexToBytes(new BN(3)); -// $ExpectError -hexToBytes({}); -// $ExpectError -hexToBytes(true); -// $ExpectError -hexToBytes(null); -// $ExpectError -hexToBytes(undefined); diff --git a/packages/web3-utils/types/tests/hex-to-number-string-test.ts b/packages/web3-utils/types/tests/hex-to-number-string-test.ts deleted file mode 100644 index 10d80d03912..00000000000 --- a/packages/web3-utils/types/tests/hex-to-number-string-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file hex-to-number-string-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {hexToNumberString} from 'web3-utils'; - -// $ExpectType string -hexToNumberString('0xea'); -// $ExpectType string -hexToNumberString(0xea); - -// $ExpectError -hexToNumberString(new BN(3); -// $ExpectError -hexToNumberString(['string']); -// $ExpectError -hexToNumberString([4]); -// $ExpectError -hexToNumberString({}); -// $ExpectError -hexToNumberString(true); -// $ExpectError -hexToNumberString(null); -// $ExpectError -hexToNumberString(undefined); diff --git a/packages/web3-utils/types/tests/hex-to-number-test.ts b/packages/web3-utils/types/tests/hex-to-number-test.ts deleted file mode 100644 index 597a65bfe5f..00000000000 --- a/packages/web3-utils/types/tests/hex-to-number-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file hex-to-number-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {hexToNumber} from 'web3-utils'; - -// $ExpectType number -hexToNumber('232'); -// $ExpectType number -hexToNumber(232); - -// $ExpectError -hexToNumber(new BN(3)); -// $ExpectError -hexToNumber(['string']); -// $ExpectError -hexToNumber([4]); -// $ExpectError -hexToNumber({}); -// $ExpectError -hexToNumber(true); -// $ExpectError -hexToNumber(null); -// $ExpectError -hexToNumber(undefined); diff --git a/packages/web3-utils/types/tests/hex-to-string-test.ts b/packages/web3-utils/types/tests/hex-to-string-test.ts deleted file mode 100644 index 000464e7968..00000000000 --- a/packages/web3-utils/types/tests/hex-to-string-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file hex-to-string-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {hexToString} from 'web3-utils'; - -// $ExpectType string -hexToString('0x49206861766520313030e282ac'); -// $ExpectType string -hexToString(0x49206861766520313030e282ac); - -// $ExpectError -hexToString(new BN(3)); -// $ExpectError -hexToString(['string']); -// $ExpectError -hexToString([4]); -// $ExpectError -hexToString({}); -// $ExpectError -hexToString(true); -// $ExpectError -hexToString(null); -// $ExpectError -hexToString(undefined); diff --git a/packages/web3-utils/types/tests/hex-to-utf8-test.ts b/packages/web3-utils/types/tests/hex-to-utf8-test.ts deleted file mode 100644 index 021fe0fc6f1..00000000000 --- a/packages/web3-utils/types/tests/hex-to-utf8-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file hex-to-utf8-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {hexToUtf8} from 'web3-utils'; - -// $ExpectType string -hexToUtf8('0x49206861766520313030e282ac'); - -// $ExpectError -hexToUtf8(656); -// $ExpectError -hexToUtf8(new BN(3)); -// $ExpectError -hexToUtf8(['string']); -// $ExpectError -hexToUtf8([4]); -// $ExpectError -hexToUtf8({}); -// $ExpectError -hexToUtf8(true); -// $ExpectError -hexToUtf8(null); -// $ExpectError -hexToUtf8(undefined); diff --git a/packages/web3-utils/types/tests/is-address-test.ts b/packages/web3-utils/types/tests/is-address-test.ts deleted file mode 100644 index 6c2847c9cfc..00000000000 --- a/packages/web3-utils/types/tests/is-address-test.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file is-address-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {isAddress} from 'web3-utils'; - -// $ExpectType boolean -isAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectType boolean -isAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', 30); -// $ExpectType boolean -isAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', undefined); - -// $ExpectError -isAddress(4); -// $ExpectError -isAddress(new BN(3)); -// $ExpectError -isAddress({}); -// $ExpectError -isAddress(true); -// $ExpectError -isAddress(['string']); -// $ExpectError -isAddress([4]); -// $ExpectError -isAddress(null); -// $ExpectError -isAddress(undefined); -// $ExpectError -isAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', new BN(3)); -// $ExpectError -isAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', {}); -// $ExpectError -isAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', true); -// $ExpectError -isAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', ['string']); -// $ExpectError -isAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', [4]); -// $ExpectError -isAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', null); diff --git a/packages/web3-utils/types/tests/is-big-number-test.ts b/packages/web3-utils/types/tests/is-big-number-test.ts deleted file mode 100644 index 99968cf8ff2..00000000000 --- a/packages/web3-utils/types/tests/is-big-number-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file is-big-number-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {isBigNumber} from 'web3-utils'; - -// $ExpectType boolean -isBigNumber(new BN(3)); - -// $ExpectError -isBigNumber(7); -// $ExpectError -isBigNumber('4325'); -// $ExpectError -isBigNumber({}); -// $ExpectError -isBigNumber(true); -// $ExpectError -isBigNumber(['string']); -// $ExpectError -isBigNumber([4]); -// $ExpectError -isBigNumber(null); -// $ExpectError -isBigNumber(undefined); diff --git a/packages/web3-utils/types/tests/is-bloom-test.ts b/packages/web3-utils/types/tests/is-bloom-test.ts deleted file mode 100644 index 2caaddbf80d..00000000000 --- a/packages/web3-utils/types/tests/is-bloom-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file is-bloom-tests.ts - * @author Josh Stevens - * @date 2019 - */ - -import BN = require('bn.js'); -import { isBloom } from 'web3-utils'; - -// $ExpectType boolean -isBloom('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'); - -// $ExpectError -isBloom(656); -// $ExpectError -isBloom(new BN(3)); -// $ExpectError -isBloom(['string']); -// $ExpectError -isBloom([4]); -// $ExpectError -isBloom({}); -// $ExpectError -isBloom(true); -// $ExpectError -isBloom(null); -// $ExpectError -isBloom(undefined); diff --git a/packages/web3-utils/types/tests/is-bn-test.ts b/packages/web3-utils/types/tests/is-bn-test.ts deleted file mode 100644 index 1a4c9d1efe7..00000000000 --- a/packages/web3-utils/types/tests/is-bn-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file is-bn-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {isBN} from 'web3-utils'; - -// $ExpectType boolean -isBN(7); -// $ExpectType boolean -isBN('4325'); - -// $ExpectError -isBN({}); -// $ExpectError -isBN(true); -// $ExpectError -isBN(new BN(3)); -// $ExpectError -isBN(['string']); -// $ExpectError -isBN([4]); -// $ExpectError -isBN(null); -// $ExpectError -isBN(undefined); diff --git a/packages/web3-utils/types/tests/is-contract-address-in-bloom.ts b/packages/web3-utils/types/tests/is-contract-address-in-bloom.ts deleted file mode 100644 index 37c587880fe..00000000000 --- a/packages/web3-utils/types/tests/is-contract-address-in-bloom.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file is-contract-address-in-bloom.ts - * @author Josh Stevens - * @date 2019 - */ - -import { isContractAddressInBloom } from 'web3-utils'; - -// $ExpectType boolean -isContractAddressInBloom('0x08200081a06415012858022200cc48143008908c0000824e5405b41520795989024800380a8d4b198910b422b231086c3a62cc402e2573070306f180446440ad401016c3e30781115844d028c89028008a12240c0a2c184c0425b90d7af0530002f981221aa565809132000818c82805023a132a25150400010530ba0080420a10a137054454021882505080a6b6841082d84151010400ba8100c8802d440d060388084052c1300105a0868410648a40540c0f0460e190400807008914361118000a5202e94445ccc088311050052c8002807205212a090d90ba428030266024a910644b1042011aaae05391cc2094c45226400000380880241282ce4e12518c', '0x494bfa3a4576ba6cfe835b0deb78834f0c3e3994'); diff --git a/packages/web3-utils/types/tests/is-hex-strict-test.ts b/packages/web3-utils/types/tests/is-hex-strict-test.ts deleted file mode 100644 index 70c7c469f48..00000000000 --- a/packages/web3-utils/types/tests/is-hex-strict-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file is-hex-strict-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {isHexStrict} from 'web3-utils'; - -// $ExpectType boolean -isHexStrict('0xc1912'); -// $ExpectType boolean -isHexStrict(345); - -// $ExpectError -isHexStrict(new BN(3)); -// $ExpectError -isHexStrict({}); -// $ExpectError -isHexStrict(true); -// $ExpectError -isHexStrict(['string']); -// $ExpectError -isHexStrict([4]); -// $ExpectError -isHexStrict(null); -// $ExpectError -isHexStrict(undefined); diff --git a/packages/web3-utils/types/tests/is-hex-test.ts b/packages/web3-utils/types/tests/is-hex-test.ts deleted file mode 100644 index 64ffa687ce9..00000000000 --- a/packages/web3-utils/types/tests/is-hex-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file is-hex-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {isHex} from 'web3-utils'; - -// $ExpectType boolean -isHex('0xc1912'); -// $ExpectType boolean -isHex(345); - -// $ExpectError -isHex(new BN(3)); -// $ExpectError -isHex({}); -// $ExpectError -isHex(true); -// $ExpectError -isHex(['string']); -// $ExpectError -isHex([4]); -// $ExpectError -isHex(null); -// $ExpectError -isHex(undefined); diff --git a/packages/web3-utils/types/tests/is-in-bloom.ts b/packages/web3-utils/types/tests/is-in-bloom.ts deleted file mode 100644 index e2ef4fab346..00000000000 --- a/packages/web3-utils/types/tests/is-in-bloom.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file is-in-bloom-tests.ts - * @author Josh Stevens - * @date 2019 - */ - -import { isInBloom } from 'web3-utils'; - -// $ExpectType boolean -isInBloom('0x08200081a06415012858022200cc48143008908c0000824e5405b41520795989024800380a8d4b198910b422b231086c3a62cc402e2573070306f180446440ad401016c3e30781115844d028c89028008a12240c0a2c184c0425b90d7af0530002f981221aa565809132000818c82805023a132a25150400010530ba0080420a10a137054454021882505080a6b6841082d84151010400ba8100c8802d440d060388084052c1300105a0868410648a40540c0f0460e190400807008914361118000a5202e94445ccc088311050052c8002807205212a090d90ba428030266024a910644b1042011aaae05391cc2094c45226400000380880241282ce4e12518c', '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'); diff --git a/packages/web3-utils/types/tests/is-topic-in-bloom.ts b/packages/web3-utils/types/tests/is-topic-in-bloom.ts deleted file mode 100644 index e49126bf80a..00000000000 --- a/packages/web3-utils/types/tests/is-topic-in-bloom.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file is-topic-in-bloom.ts - * @author Josh Stevens - * @date 2019 - */ - -import { isTopicInBloom } from 'web3-utils'; - -// $ExpectType boolean -isTopicInBloom('0x08200081a06415012858022200cc48143008908c0000824e5405b41520795989024800380a8d4b198910b422b231086c3a62cc402e2573070306f180446440ad401016c3e30781115844d028c89028008a12240c0a2c184c0425b90d7af0530002f981221aa565809132000818c82805023a132a25150400010530ba0080420a10a137054454021882505080a6b6841082d84151010400ba8100c8802d440d060388084052c1300105a0868410648a40540c0f0460e190400807008914361118000a5202e94445ccc088311050052c8002807205212a090d90ba428030266024a910644b1042011aaae05391cc2094c45226400000380880241282ce4e12518c', '0x4d61726b65745061792e696f206973206465706c6f79696e6720536d61727420'); diff --git a/packages/web3-utils/types/tests/is-topic-test.ts b/packages/web3-utils/types/tests/is-topic-test.ts deleted file mode 100644 index bb600827c60..00000000000 --- a/packages/web3-utils/types/tests/is-topic-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file is-topic-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {isTopic} from 'web3-utils'; - -// $ExpectType boolean -isTopic('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'); - -// $ExpectError -isTopic(656); -// $ExpectError -isTopic(new BN(3)); -// $ExpectError -isTopic(['string']); -// $ExpectError -isTopic([4]); -// $ExpectError -isTopic({}); -// $ExpectError -isTopic(true); -// $ExpectError -isTopic(null); -// $ExpectError -isTopic(undefined); diff --git a/packages/web3-utils/types/tests/is-topic.ts b/packages/web3-utils/types/tests/is-topic.ts deleted file mode 100644 index 468cc655c23..00000000000 --- a/packages/web3-utils/types/tests/is-topic.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file is-user-ethereum-address-in-bloom.ts - * @author Josh Stevens - * @date 2019 - */ - -import { isTopic } from 'web3-utils'; - -// $ExpectType boolean -isTopic('0x000000000000000000000000b3bb037d2f2341a1c2775d51909a3d944597987d'); diff --git a/packages/web3-utils/types/tests/is-user-ethereum-address-in-bloom.ts b/packages/web3-utils/types/tests/is-user-ethereum-address-in-bloom.ts deleted file mode 100644 index 2fadb639680..00000000000 --- a/packages/web3-utils/types/tests/is-user-ethereum-address-in-bloom.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file is-user-ethereum-address-in-bloom.ts - * @author Josh Stevens - * @date 2019 - */ - -import { isUserEthereumAddressInBloom } from 'web3-utils'; - -// $ExpectType boolean -isUserEthereumAddressInBloom('0x08200081a06415012858022200cc48143008908c0000824e5405b41520795989024800380a8d4b198910b422b231086c3a62cc402e2573070306f180446440ad401016c3e30781115844d028c89028008a12240c0a2c184c0425b90d7af0530002f981221aa565809132000818c82805023a132a25150400010530ba0080420a10a137054454021882505080a6b6841082d84151010400ba8100c8802d440d060388084052c1300105a0868410648a40540c0f0460e190400807008914361118000a5202e94445ccc088311050052c8002807205212a090d90ba428030266024a910644b1042011aaae05391cc2094c45226400000380880241282ce4e12518c', '0x494bfa3a4576ba6cfe835b0deb78834f0c3e3994'); diff --git a/packages/web3-utils/types/tests/json-interface-method-to-string-test.ts b/packages/web3-utils/types/tests/json-interface-method-to-string-test.ts deleted file mode 100644 index 7db99e00a1b..00000000000 --- a/packages/web3-utils/types/tests/json-interface-method-to-string-test.ts +++ /dev/null @@ -1,121 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file json-interface-method-to-string-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import {jsonInterfaceMethodToString, AbiItem} from 'web3-utils'; - -const abiItem: AbiItem = { - anonymous: false, - constant: true, - inputs: [ - { - name: 'testMe', - type: 'uint256[3]' - }, - { - name: 'inputA', - type: 'tuple', - components: [ - { - name: 'a', - type: 'uint8' - }, - { - name: 'b', - type: 'uint8' - } - ] - }, - { - name: 'inputB', - type: 'tuple[]', - components: [ - { - name: 'a1', - type: 'uint256' - }, - { - name: 'a2', - type: 'uint256' - } - ] - }, - { - name: 'inputC', - type: 'uint8', - indexed: false - } - ], - name: "testName", - outputs: [ - { - name: "test", - type: "uint256" - }, - { - name: 'outputA', - type: 'tuple', - components: [ - { - name: 'a', - type: 'uint8' - }, - { - name: 'b', - type: 'uint8' - } - ] - }, - { - name: 'outputB', - type: 'tuple[]', - components: [ - { - name: 'a1', - type: 'uint256' - }, - { - name: 'a2', - type: 'uint256' - } - ] - } - ], - payable: false, - stateMutability: "pure", - type: "function", - gas: 175875 -}; -// $ExpectType string -jsonInterfaceMethodToString(abiItem); - -// $ExpectError -jsonInterfaceMethodToString(['string']); -// $ExpectError -jsonInterfaceMethodToString(234); -// $ExpectError -jsonInterfaceMethodToString([4]); -// $ExpectError -jsonInterfaceMethodToString(true); -// $ExpectError -jsonInterfaceMethodToString(null); -// $ExpectError -jsonInterfaceMethodToString(undefined); diff --git a/packages/web3-utils/types/tests/keccak256-test.ts b/packages/web3-utils/types/tests/keccak256-test.ts deleted file mode 100644 index 7f3f571e19a..00000000000 --- a/packages/web3-utils/types/tests/keccak256-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file keccak256-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {keccak256} from 'web3-utils'; - -// $ExpectType string -keccak256('234'); -// $ExpectType string -keccak256(new BN(3)); - -// $ExpectError -keccak256(['string']); -// $ExpectError -keccak256(234); -// $ExpectError -keccak256([4]); -// $ExpectError -keccak256({}); -// $ExpectError -keccak256(true); -// $ExpectError -keccak256(null); -// $ExpectError -keccak256(undefined); diff --git a/packages/web3-utils/types/tests/left-pad-test.ts b/packages/web3-utils/types/tests/left-pad-test.ts deleted file mode 100644 index 936f198ea4c..00000000000 --- a/packages/web3-utils/types/tests/left-pad-test.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file left-pad-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {leftPad} from 'web3-utils'; - -const bigNumber = new BN(3); -// $ExpectType string -leftPad('0x3456ff', 20); -// $ExpectType string -leftPad(0x3456ff, 20); -// $ExpectType string -leftPad('Hello', 20, 'x'); - -// $ExpectError -leftPad(bigNumber, 20); -// $ExpectError -leftPad(['string'], 20); -// $ExpectError -leftPad([4], 20); -// $ExpectError -leftPad({}, 20); -// $ExpectError -leftPad(true, 20); -// $ExpectError -leftPad(null, 20); -// $ExpectError -leftPad(undefined, 20); -// $ExpectError -leftPad('0x3456ff', bigNumber); -// $ExpectError -leftPad('0x3456ff', ['string']); -// $ExpectError -leftPad('0x3456ff', [4]); -// $ExpectError -leftPad('0x3456ff', {}); -// $ExpectError -leftPad('0x3456ff', true); -// $ExpectError -leftPad('0x3456ff', null); -// $ExpectError -leftPad('0x3456ff', undefined); -// $ExpectError -leftPad('Hello', 20, bigNumber); -// $ExpectError -leftPad('Hello', 20, ['string']); -// $ExpectError -leftPad('Hello', 20, [4]); -// $ExpectError -leftPad('Hello', 20, {}); -// $ExpectError -leftPad('Hello', 20, true); -// $ExpectError -leftPad('Hello', 20, null); diff --git a/packages/web3-utils/types/tests/number-to-hex-test.ts b/packages/web3-utils/types/tests/number-to-hex-test.ts deleted file mode 100644 index 102e22f7518..00000000000 --- a/packages/web3-utils/types/tests/number-to-hex-test.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file number-to-hex-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {numberToHex} from 'web3-utils'; - -// $ExpectType string -numberToHex('232'); -// $ExpectType string -numberToHex(232); -// $ExpectType string -numberToHex(new BN(3)); - -// $ExpectError -numberToHex(['72']); -// $ExpectError -numberToHex([4]); -// $ExpectError -numberToHex([ 36 ]); -// $ExpectError -numberToHex({}); -// $ExpectError -numberToHex(true); -// $ExpectError -numberToHex(null); -// $ExpectError -numberToHex(undefined); diff --git a/packages/web3-utils/types/tests/pad-left-test.ts b/packages/web3-utils/types/tests/pad-left-test.ts deleted file mode 100644 index e763df68fdf..00000000000 --- a/packages/web3-utils/types/tests/pad-left-test.ts +++ /dev/null @@ -1,74 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file pad-left-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {padLeft} from 'web3-utils'; - -const bigNumber = new BN(3); - -// $ExpectType string -padLeft('0x3456ff', 20); -// $ExpectType string -padLeft(0x3456ff, 20); -// $ExpectType string -padLeft('Hello', 20, 'x'); - -// $ExpectError -padLeft(bigNumber, 20); -// $ExpectError -padLeft(['string'], 20); -// $ExpectError -padLeft([4], 20); -// $ExpectError -padLeft({}, 20); -// $ExpectError -padLeft(true, 20); -// $ExpectError -padLeft(null, 20); -// $ExpectError -padLeft(undefined, 20); -// $ExpectError -padLeft('0x3456ff', bigNumber); -// $ExpectError -padLeft('0x3456ff', ['string']); -// $ExpectError -padLeft('0x3456ff', [4]); -// $ExpectError -padLeft('0x3456ff', {}); -// $ExpectError -padLeft('0x3456ff', true); -// $ExpectError -padLeft('0x3456ff', null); -// $ExpectError -padLeft('0x3456ff', undefined); -// $ExpectError -padLeft('Hello', 20, bigNumber); -// $ExpectError -padLeft('Hello', 20, ['string']); -// $ExpectError -padLeft('Hello', 20, [4]); -// $ExpectError -padLeft('Hello', 20, {}); -// $ExpectError -padLeft('Hello', 20, true); -// $ExpectError -padLeft('Hello', 20, null); diff --git a/packages/web3-utils/types/tests/pad-right-test.ts b/packages/web3-utils/types/tests/pad-right-test.ts deleted file mode 100644 index 97202a820b3..00000000000 --- a/packages/web3-utils/types/tests/pad-right-test.ts +++ /dev/null @@ -1,74 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file pad-right-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {padRight} from 'web3-utils'; - -const bigNumber = new BN(3); - -// $ExpectType string -padRight('0x3456ff', 20); -// $ExpectType string -padRight(0x3456ff, 20); -// $ExpectType string -padRight('Hello', 20, 'x'); - -// $ExpectError -padRight(bigNumber, 20); -// $ExpectError -padRight(['string'], 20); -// $ExpectError -padRight([4], 20); -// $ExpectError -padRight({}, 20); -// $ExpectError -padRight(true, 20); -// $ExpectError -padRight(null, 20); -// $ExpectError -padRight(undefined, 20); -// $ExpectError -padRight('0x3456ff', bigNumber); -// $ExpectError -padRight('0x3456ff', ['string']); -// $ExpectError -padRight('0x3456ff', [4]); -// $ExpectError -padRight('0x3456ff', {}); -// $ExpectError -padRight('0x3456ff', true); -// $ExpectError -padRight('0x3456ff', null); -// $ExpectError -padRight('0x3456ff', undefined); -// $ExpectError -padRight('Hello', 20, bigNumber); -// $ExpectError -padRight('Hello', 20, ['string']); -// $ExpectError -padRight('Hello', 20, [4]); -// $ExpectError -padRight('Hello', 20, {}); -// $ExpectError -padRight('Hello', 20, true); -// $ExpectError -padRight('Hello', 20, null); diff --git a/packages/web3-utils/types/tests/random-hex-test.ts b/packages/web3-utils/types/tests/random-hex-test.ts deleted file mode 100644 index 64465afb93e..00000000000 --- a/packages/web3-utils/types/tests/random-hex-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file random-hex-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {randomHex} from 'web3-utils'; - -// $ExpectType string -randomHex(32); - -// $ExpectError -randomHex('234'); -// $ExpectError -randomHex(new BN(3)); -// $ExpectError -randomHex(['string']); -// $ExpectError -randomHex([4]); -// $ExpectError -randomHex({}); -// $ExpectError -randomHex(true); -// $ExpectError -randomHex(null); -// $ExpectError -randomHex(undefined); diff --git a/packages/web3-utils/types/tests/right-pad-test.ts b/packages/web3-utils/types/tests/right-pad-test.ts deleted file mode 100644 index f81ace7dc72..00000000000 --- a/packages/web3-utils/types/tests/right-pad-test.ts +++ /dev/null @@ -1,74 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file right-pad-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {rightPad} from 'web3-utils'; - -const bigNumber = new BN(3); - -// $ExpectType string -rightPad('0x3456ff', 20); -// $ExpectType string -rightPad(0x3456ff, 20); -// $ExpectType string -rightPad('Hello', 20, 'x'); - -// $ExpectError -rightPad(bigNumber, 20); -// $ExpectError -rightPad(['string'], 20); -// $ExpectError -rightPad([4], 20); -// $ExpectError -rightPad({}, 20); -// $ExpectError -rightPad(true, 20); -// $ExpectError -rightPad(null, 20); -// $ExpectError -rightPad(undefined, 20); -// $ExpectError -rightPad('0x3456ff', bigNumber); -// $ExpectError -rightPad('0x3456ff', ['string']); -// $ExpectError -rightPad('0x3456ff', [4]); -// $ExpectError -rightPad('0x3456ff', {}); -// $ExpectError -rightPad('0x3456ff', true); -// $ExpectError -rightPad('0x3456ff', null); -// $ExpectError -rightPad('0x3456ff', undefined); -// $ExpectError -rightPad('Hello', 20, bigNumber); -// $ExpectError -rightPad('Hello', 20, ['string']); -// $ExpectError -rightPad('Hello', 20, [4]); -// $ExpectError -rightPad('Hello', 20, {}); -// $ExpectError -rightPad('Hello', 20, true); -// $ExpectError -rightPad('Hello', 20, null); diff --git a/packages/web3-utils/types/tests/sha3-raw-test.ts b/packages/web3-utils/types/tests/sha3-raw-test.ts deleted file mode 100644 index deba336044a..00000000000 --- a/packages/web3-utils/types/tests/sha3-raw-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file sha3Raw-tests.ts - * @author Samuel Furter - * @date 2019 - */ - -import BN = require('bn.js'); -import {sha3Raw} from 'web3-utils'; - -// $ExpectType string -sha3Raw('234'); -// $ExpectType string -sha3Raw(new BN(3)); - -// $ExpectError -sha3Raw(['string']); -// $ExpectError -sha3Raw(234); -// $ExpectError -sha3Raw([4]); -// $ExpectError -sha3Raw({}); -// $ExpectError -sha3Raw(true); -// $ExpectError -sha3Raw(null); -// $ExpectError -sha3Raw(undefined); diff --git a/packages/web3-utils/types/tests/sha3-test.ts b/packages/web3-utils/types/tests/sha3-test.ts deleted file mode 100644 index 79eb50265da..00000000000 --- a/packages/web3-utils/types/tests/sha3-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file sha3-tests.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {sha3} from 'web3-utils'; - -// $ExpectType string | null -sha3('234'); -// $ExpectType string | null -sha3(new BN(3)); - -// $ExpectError -sha3(['string']); -// $ExpectError -sha3(234); -// $ExpectError -sha3([4]); -// $ExpectError -sha3({}); -// $ExpectError -sha3(true); -// $ExpectError -sha3(null); -// $ExpectError -sha3(undefined); diff --git a/packages/web3-utils/types/tests/solidity-sha3-raw-test.ts b/packages/web3-utils/types/tests/solidity-sha3-raw-test.ts deleted file mode 100644 index 38c568f9254..00000000000 --- a/packages/web3-utils/types/tests/solidity-sha3-raw-test.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file solidity-sha3-raw-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {soliditySha3Raw} from 'web3-utils'; - -// $ExpectType string -soliditySha3Raw('234564535', '0xfff23243', true, -10); -// $ExpectType string -soliditySha3Raw('Hello!%'); -// $ExpectType string -soliditySha3Raw('234'); -// $ExpectType string -soliditySha3Raw(0xea); -// $ExpectType string -soliditySha3Raw(new BN(3)); -// $ExpectType string -soliditySha3Raw({type: 'uint256', value: '234'}); -// $ExpectType string -soliditySha3Raw({t: 'uint', v: new BN('234')}); -// $ExpectType string -soliditySha3Raw({t: 'string', v: 'Hello!%'}, {t: 'int8', v: -23}, {t: 'address', v: '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d'}); -// $ExpectType string -soliditySha3Raw('0x407D73d8a49eeb85D32Cf465507dd71d507100c1'); - -// $ExpectError -soliditySha3Raw(['hey']); -// $ExpectError -soliditySha3Raw([34]); -// $ExpectError -soliditySha3Raw(null); -// $ExpectError -soliditySha3Raw(undefined); diff --git a/packages/web3-utils/types/tests/solidity-sha3-test.ts b/packages/web3-utils/types/tests/solidity-sha3-test.ts deleted file mode 100644 index ea7d0343a21..00000000000 --- a/packages/web3-utils/types/tests/solidity-sha3-test.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file solidity-sha3-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {soliditySha3} from 'web3-utils'; - -// $ExpectType string | null -soliditySha3('234564535', '0xfff23243', true, -10); -// $ExpectType string | null -soliditySha3('Hello!%'); -// $ExpectType string | null -soliditySha3('234'); -// $ExpectType string | null -soliditySha3(0xea); -// $ExpectType string | null -soliditySha3(new BN(3)); -// $ExpectType string | null -soliditySha3({type: 'uint256', value: '234'}); -// $ExpectType string | null -soliditySha3({t: 'uint', v: new BN('234')}); -// $ExpectType string | null -soliditySha3({t: 'string', v: 'Hello!%'}, {t: 'int8', v: -23}, {t: 'address', v: '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d'}); -// $ExpectType string | null -soliditySha3('0x407D73d8a49eeb85D32Cf465507dd71d507100c1'); - -// $ExpectError -soliditySha3(['hey']); -// $ExpectError -soliditySha3([34]); -// $ExpectError -soliditySha3(null); -// $ExpectError -soliditySha3(undefined); diff --git a/packages/web3-utils/types/tests/string-to-hex-test.ts b/packages/web3-utils/types/tests/string-to-hex-test.ts deleted file mode 100644 index a8c4370d344..00000000000 --- a/packages/web3-utils/types/tests/string-to-hex-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file string-to-hex-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {stringToHex} from 'web3-utils'; - -// $ExpectType string -stringToHex('I have 100£'); - -// $ExpectError -stringToHex(232); -// $ExpectError -stringToHex(new BN(3)); -// $ExpectError -stringToHex(['string']); -// $ExpectError -stringToHex([4]); -// $ExpectError -stringToHex({}); -// $ExpectError -stringToHex(true); -// $ExpectError -stringToHex(null); -// $ExpectError -stringToHex(undefined); diff --git a/packages/web3-utils/types/tests/strip-hex-prefix-test.ts b/packages/web3-utils/types/tests/strip-hex-prefix-test.ts deleted file mode 100644 index 84a54c5ab04..00000000000 --- a/packages/web3-utils/types/tests/strip-hex-prefix-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file strip-hex-prefix-test.ts - * @author Alejandro Cavallero - * @date 2019 - */ - -import BN = require('bn.js'); -import {stripHexPrefix} from 'web3-utils'; - -// $ExpectType string -stripHexPrefix('0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb'); - -// $ExpectError -stripHexPrefix(123); -// $ExpectError -stripHexPrefix(new BN(3)); -// $ExpectError -stripHexPrefix(['string']); -// $ExpectError -stripHexPrefix([4]); -// $ExpectError -stripHexPrefix({}); -// $ExpectError -stripHexPrefix(true); -// $ExpectError -stripHexPrefix(null); -// $ExpectError -stripHexPrefix(undefined); diff --git a/packages/web3-utils/types/tests/test-address-test.ts b/packages/web3-utils/types/tests/test-address-test.ts deleted file mode 100644 index 8c47a1c91ac..00000000000 --- a/packages/web3-utils/types/tests/test-address-test.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file test-address-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {testAddress} from 'web3-utils'; - -const bigNumber = new BN(3); - -// $ExpectType boolean -testAddress('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); - -// $ExpectError -testAddress(656, '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testAddress(bigNumber, '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testAddress(['string'], '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testAddress([4], '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testAddress({}, '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testAddress(true, '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testAddress(null, '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testAddress(undefined, '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testAddress('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', 656); -// $ExpectError -testAddress('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', bigNumber); -// $ExpectError -testAddress('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', ['string']); -// $ExpectError -testAddress('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', [4]); -// $ExpectError -testAddress('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', {}); -// $ExpectError -testAddress('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', true); -// $ExpectError -testAddress('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', null); -// $ExpectError -testAddress('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', undefined); diff --git a/packages/web3-utils/types/tests/test-topic-test.ts b/packages/web3-utils/types/tests/test-topic-test.ts deleted file mode 100644 index 5c306083ed8..00000000000 --- a/packages/web3-utils/types/tests/test-topic-test.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file test-topic-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {testTopic} from 'web3-utils'; - -const bigNumber = new BN(3); - -// $ExpectType boolean -testTopic('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); - -// $ExpectError -testTopic(656, '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testTopic(bigNumber, '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testTopic(['string'], '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testTopic([4], '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testTopic({}, '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testTopic(true, '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testTopic(null, '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testTopic(undefined, '0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectError -testTopic('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', 656); -// $ExpectError -testTopic('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', bigNumber); -// $ExpectError -testTopic('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', ['string']); -// $ExpectError -testTopic('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', [4]); -// $ExpectError -testTopic('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', {}); -// $ExpectError -testTopic('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', true); -// $ExpectError -testTopic('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', null); -// $ExpectError -testTopic('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', undefined); diff --git a/packages/web3-utils/types/tests/to-ascii-test.ts b/packages/web3-utils/types/tests/to-ascii-test.ts deleted file mode 100644 index 9d086a2394a..00000000000 --- a/packages/web3-utils/types/tests/to-ascii-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file to-ascii-tests.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {toAscii} from 'web3-utils'; - -// $ExpectType string -toAscii('0x4920686176652031303021'); - -// $ExpectError -toAscii(345); -// $ExpectError -toAscii(new BN(3)); -// $ExpectError -toAscii({}); -// $ExpectError -toAscii(true); -// $ExpectError -toAscii(['string']); -// $ExpectError -toAscii([4]); -// $ExpectError -toAscii(null); -// $ExpectError -toAscii(undefined); diff --git a/packages/web3-utils/types/tests/to-bn-test.ts b/packages/web3-utils/types/tests/to-bn-test.ts deleted file mode 100644 index 0df148d7333..00000000000 --- a/packages/web3-utils/types/tests/to-bn-test.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file to-bn-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import {toBN} from 'web3-utils'; - -// $ExpectType BN -toBN(4); -// $ExpectType BN -toBN('443'); - -// $ExpectError -toBN({}); -// $ExpectError -toBN(true); -// $ExpectError -toBN(['string']); -// $ExpectError -toBN([4]); -// $ExpectError -toBN(null); -// $ExpectError -toBN(undefined); diff --git a/packages/web3-utils/types/tests/to-check-sum-address-test.ts b/packages/web3-utils/types/tests/to-check-sum-address-test.ts deleted file mode 100644 index a43aa7a8f80..00000000000 --- a/packages/web3-utils/types/tests/to-check-sum-address-test.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file to-check-sum-address-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {toChecksumAddress} from 'web3-utils'; - -// $ExpectType string -toChecksumAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51'); -// $ExpectType string -toChecksumAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', 31); -// $ExpectType string -toChecksumAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', undefined); - -// $ExpectError -toChecksumAddress([4]); -// $ExpectError -toChecksumAddress(['string']); -// $ExpectError -toChecksumAddress(345); -// $ExpectError -toChecksumAddress(new BN(3)); -// $ExpectError -toChecksumAddress({}); -// $ExpectError -toChecksumAddress(true); -// $ExpectError -toChecksumAddress(null); -// $ExpectError -toChecksumAddress(undefined); -// $ExpectError -toChecksumAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', [4]); -// $ExpectError -toChecksumAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', ['string']); -// $ExpectError -toChecksumAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', new BN(3)); -// $ExpectError -toChecksumAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', {}); -// $ExpectError -toChecksumAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', true); -// $ExpectError -toChecksumAddress('0x8ee7f17bb3f88b01247c21ab6603880b64ae53e811f5e01138822e558cf1ab51', null); diff --git a/packages/web3-utils/types/tests/to-decimal-test.ts b/packages/web3-utils/types/tests/to-decimal-test.ts deleted file mode 100644 index 77793f81165..00000000000 --- a/packages/web3-utils/types/tests/to-decimal-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file to-decimal-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {toDecimal} from 'web3-utils'; - -// $ExpectType number -toDecimal('232'); -// $ExpectType number -toDecimal(232); - -// $ExpectError -toDecimal(new BN(3)); -// $ExpectError -toDecimal(['string']); -// $ExpectError -toDecimal([4]); -// $ExpectError -toDecimal({}); -// $ExpectError -toDecimal(true); -// $ExpectError -toDecimal(null); -// $ExpectError -toDecimal(undefined); diff --git a/packages/web3-utils/types/tests/to-hex-test.ts b/packages/web3-utils/types/tests/to-hex-test.ts deleted file mode 100644 index 0c2be5b9709..00000000000 --- a/packages/web3-utils/types/tests/to-hex-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file to-hex-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {toHex} from 'web3-utils'; - -// $ExpectType string -toHex('234'); -// $ExpectType string -toHex(234); -// $ExpectType string -toHex(new BN(3)); - -// $ExpectError -toHex(['string']); -// $ExpectError -toHex(true); -// $ExpectError -toHex([4]); -// $ExpectError -toHex({}); -// $ExpectError -toHex(null); -// $ExpectError -toHex(undefined); diff --git a/packages/web3-utils/types/tests/to-twos-compement-test.ts b/packages/web3-utils/types/tests/to-twos-compement-test.ts deleted file mode 100644 index 1162976b26f..00000000000 --- a/packages/web3-utils/types/tests/to-twos-compement-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file to-twos-compement-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {toTwosComplement} from 'web3-utils'; - -// $ExpectType string -toTwosComplement(4); -// $ExpectType string -toTwosComplement('443'); -// $ExpectType string -toTwosComplement(new BN(3)); - -// $ExpectError -toTwosComplement({}); -// $ExpectError -toTwosComplement(true); -// $ExpectError -toTwosComplement(['string']); -// $ExpectError -toTwosComplement([4]); -// $ExpectError -toTwosComplement(null); -// $ExpectError -toTwosComplement(undefined); diff --git a/packages/web3-utils/types/tests/to-utf8-test.ts b/packages/web3-utils/types/tests/to-utf8-test.ts deleted file mode 100644 index 54c10748f96..00000000000 --- a/packages/web3-utils/types/tests/to-utf8-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file to-utf8-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {toUtf8} from 'web3-utils'; - -// $ExpectType string -toUtf8('0x49206861766520313030e282ac'); - -// $ExpectError -toUtf8(656); -// $ExpectError -toUtf8(new BN(3)); -// $ExpectError -toUtf8(['string']); -// $ExpectError -toUtf8([4]); -// $ExpectError -toUtf8({}); -// $ExpectError -toUtf8(true); -// $ExpectError -toUtf8(null); -// $ExpectError -toUtf8(undefined); diff --git a/packages/web3-utils/types/tests/to-wei-test.ts b/packages/web3-utils/types/tests/to-wei-test.ts deleted file mode 100644 index ee725b53c04..00000000000 --- a/packages/web3-utils/types/tests/to-wei-test.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file to-wei-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {toWei} from 'web3-utils'; - -const bigNumber = new BN(3); - -// $ExpectType string -toWei('1'); -// $ExpectType BN -toWei(bigNumber); -// $ExpectType string -toWei('1', 'finney'); -// $ExpectType BN -toWei(bigNumber, 'finney'); - -// $ExpectError -toWei(['string']); -// $ExpectError -toWei([4]); -// $ExpectError -toWei({}); -// $ExpectError -toWei(true); -// $ExpectError -toWei(null); -// $ExpectError -toWei(undefined); -// $ExpectError -toWei(1, 'blah'); diff --git a/packages/web3-utils/types/tests/unit-map-test.ts b/packages/web3-utils/types/tests/unit-map-test.ts deleted file mode 100644 index ab75ed97cc5..00000000000 --- a/packages/web3-utils/types/tests/unit-map-test.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file unit-map-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import {unitMap} from 'web3-utils'; - -// $ExpectType Units -unitMap(); diff --git a/packages/web3-utils/types/tests/utf8-to-hex-test.ts b/packages/web3-utils/types/tests/utf8-to-hex-test.ts deleted file mode 100644 index 116551bc63b..00000000000 --- a/packages/web3-utils/types/tests/utf8-to-hex-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file utf8-to-hex-test.ts - * @author Josh Stevens - * @date 2018 - */ - -import BN = require('bn.js'); -import {utf8ToHex} from 'web3-utils'; - -// $ExpectType string -utf8ToHex('I have 100£'); - -// $ExpectError -utf8ToHex(232); -// $ExpectError -utf8ToHex(new BN(3)); -// $ExpectError -utf8ToHex(['string']); -// $ExpectError -utf8ToHex([4]); -// $ExpectError -utf8ToHex({}); -// $ExpectError -utf8ToHex(true); -// $ExpectError -utf8ToHex(null); -// $ExpectError -utf8ToHex(undefined); diff --git a/packages/web3-utils/types/tsconfig.json b/packages/web3-utils/types/tsconfig.json deleted file mode 100644 index e0200c80d27..00000000000 --- a/packages/web3-utils/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3-utils": ["."] - } - } -} diff --git a/packages/web3-utils/types/tslint.json b/packages/web3-utils/types/tslint.json deleted file mode 100644 index 84e929c12dc..00000000000 --- a/packages/web3-utils/types/tslint.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-redundant-jsdoc": false, - "max-line-length": false - } -} diff --git a/packages/web3-validator/.eslintignore b/packages/web3-validator/.eslintignore new file mode 100644 index 00000000000..042635799ba --- /dev/null +++ b/packages/web3-validator/.eslintignore @@ -0,0 +1,5 @@ +dist +lib +jest.config.js +.eslintrc.js +webpack.config.js \ No newline at end of file diff --git a/packages/web3-validator/.eslintrc.js b/packages/web3-validator/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-validator/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-validator/.gitignore b/packages/web3-validator/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-validator/.npmignore b/packages/web3-validator/.npmignore new file mode 100644 index 00000000000..0b1a9d71c23 --- /dev/null +++ b/packages/web3-validator/.npmignore @@ -0,0 +1,26 @@ +.babelrc +.eslintignore +.eslintrc.json +.eslintrc.js +.gitignore +.lintstagedrc.json +.nycrc +.prettierrc.json +.prettierignore +cypress.json +index.html +Jenkinsfile* +*.log + +.nyc_output/ +coverage/ +benchmark/ +.coverage/ +cypress/ +fixtures/ +tmp/ +logs/ +test/ +scripts/ +browsertest/ +examples/ diff --git a/packages/web3-validator/.prettierignore b/packages/web3-validator/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-validator/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-validator/.prettierrc.json b/packages/web3-validator/.prettierrc.json new file mode 100644 index 00000000000..7b23ef55098 --- /dev/null +++ b/packages/web3-validator/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": true, + "arrowParens": "avoid" +} diff --git a/packages/web3-validator/CHANGELOG.md b/packages/web3-validator/CHANGELOG.md new file mode 100644 index 00000000000..48a2255f135 --- /dev/null +++ b/packages/web3-validator/CHANGELOG.md @@ -0,0 +1,159 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [0.1.1-alpha.1] + +### Removed + +- Removed direct function `toJSON()` in `Web3ValidatorError` class as its available via base class (#5435) + +## [0.1.1-alpha.2] + +### Changed + +- Updated Web3.js dependencies (#5664) + +### Fixed + +- Fix `isHex`returning `false` for `-123`, fix `isHexStrict` returning `true` for `-0x`, and fix `isHex` returning `true` for empty strings `` (#5373). + +## [0.1.1-alpha.3] + +### Fixed + +- Fix issue when importing `web3-validator` package within browser environments (Webpack minified filename changed from `index.min.js` to `web3-validator.min.js`) (#5710) + +## [0.1.1-alpha.4] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +## [0.1.1-alpha.5] + +### Removed + +- `build` entry from `package.json` (#5755) + +## [1.0.0-rc.0] + +### Removed + +- Moved `TypedArray` to `web3-types` (was also duplicated at `web3-utils`) (#5771) + +### Added + +- Added support of `safe` and `finalized` block tags in `isBlockTag` method (#5823) + +## [1.0.0-rc.1] + +### Added + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) +- Added functions `isHexString`, `isHexPrefixed`, `validateNoLeadingZeroes` (#5963) + +## [1.0.0-rc.2] + +### Changed + +- Replaced Buffer for Uint8Array (#6004) + +### Removed + +- `Web3ValidationErrorObject` type is now exported from `web3-types` package (#6102) + +## [1.0.0] + +Release Notes: + +Detailed List of change logs are mentioned under previous 1.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [1.0.1] + +### Changed + +- Dependencies updated + +## [1.0.2] + +### Changed + +- Dependencies updated + +## [2.0.0] + +### Changed + +- Replace `is-my-json-valid` with `zod` dependency. Related code was changed (#6264) +- Types `ValidationError` and `JsonSchema` were changed (#6264) + +### Removed + +- Type `RawValidationError` was removed (#6264) + +### Added + +- Added `json-schema` as a main json schema type (#6264) + +## [2.0.1] + +### Fixed + +- ESM import bug (#6359) + +## [2.0.2] + +### Changed + +- Dependencies updated + +## [2.0.3] + +### Fixed + +- Multi-dimensional arrays are now handled properly when parsing ABIs (#6435) +- Fix issue with default config with babel (and React): "TypeError: Cannot convert a BigInt value to a number #6187" (#6506) +- Validator will now properly handle all valid numeric type sizes: intN / uintN where 8 <= N <= 256 and N % 8 == 0 (#6434) +- Will now throw SchemaFormatError when unsupported format is passed to `convertToZod` method (#6434) + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3-validator/README.md b/packages/web3-validator/README.md new file mode 100644 index 00000000000..8096002bd59 --- /dev/null +++ b/packages/web3-validator/README.md @@ -0,0 +1,98 @@ +

+ web3.js +

+ +# web3-validator + +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] + +This is a sub-package of [web3.js][repo]. + +`web3-validator` contains functions for validating objects. + +## Installation + +You can install the package either using [NPM](https://www.npmjs.com/package/web3-validator) or using [Yarn](https://yarnpkg.com/package/web3-validator) + +### Using NPM + +```bash +npm install web3-validator +``` + +### Using Yarn + +```bash +yarn add web3-validator +``` + +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +### Usage + +You can use the the validator by importing as and using to validate; + +```ts +import { validator } from 'web3-validator'; + +// To validate and throw +validator.validate(['uint8', 'string'], [val1, val2]); + +// To validate and return error +const errors = validator.validate(['uint8', 'string'], [val1, val2], { silent: true }); +``` + +To see more examples of schema you can use to validate check [following file](./test/fixtures/abi_to_json_schema.ts). + +Following eth types are supported to validate. + +| Type | Input As | Description | +| ----- | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | +| uint | `number`, `string`, `HexString` | Unsigned integer, all ethereum compatible variants are also supported e.g. `uint8`, `uint256`. You can also use array specifiers as `uint[]` or `uint[2]` | +| int | `number`, `string`, `HexString` | Signed integer, all ethereum compatible variants are also supported e.g. `int8`, `int256`. You can also use array specifiers as `int[]` or `int[2]` | +| bytes | `HexString`, `Uint8Array` | Raw bytes. You can also use fixed length bytes as `bytes[2]` | + +| string | `string` | String values | +| address | `string`, `HexString` | Ethereum network compatible address | +| bloom | `string`, `HexString` | Check if a given string is a Eth bloom | +| tuple | `array` | You can specify any tuple as nested arrays. e.g. `['uint', 'string']`. For a custom tuple or array tuple you can use syntax e.g. `['tuple[3]', ['uint', 'string']]` | + +For the ethereum compatible data values should be passed as arrays e.g. for schema `['uint', 'string']` value should be passed as `[2, 'my-string']`. + +You can also pass full ABI schema for the validation. e.g. + +```json +[{ "name": "owner", "type": "address" }] +``` + +The implementation of the validator is extension of [JSON-Schema-Draft07](https://json-schema.org/draft-07/json-schema-release-notes.html) with a custom keyword `eth`. So you can use JSON-Schema compatible schema to validate any object based data as well. + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts + +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | + +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3-validator +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-validator%2Fpackage.json +[npm-url]: https://npmjs.org/package/web3-validator +[downloads-image]: https://img.shields.io/npm/dm/web3-validator?label=npm%20downloads diff --git a/packages/web3-validator/assets/logo/web3js.ai b/packages/web3-validator/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-validator/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-validator/assets/logo/web3js.jpg b/packages/web3-validator/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-validator/assets/logo/web3js.jpg differ diff --git a/packages/web3-validator/assets/logo/web3js.svg b/packages/web3-validator/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-validator/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-validator/package.json b/packages/web3-validator/package.json new file mode 100644 index 00000000000..483ac6237aa --- /dev/null +++ b/packages/web3-validator/package.json @@ -0,0 +1,68 @@ +{ + "name": "web3-validator", + "version": "2.0.3", + "description": "JSON-Schema compatible validator for web3", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "browser": "./dist/web3-validator.min.js", + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*", + "dist/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check|web)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:web": "npx webpack", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests" + }, + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "util": "^0.12.5", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "zod": "^3.21.4" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + } +} diff --git a/packages/web3-validator/src/constants.ts b/packages/web3-validator/src/constants.ts new file mode 100644 index 00000000000..f4fd05d6692 --- /dev/null +++ b/packages/web3-validator/src/constants.ts @@ -0,0 +1,18 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const VALID_ETH_BASE_TYPES = ['bool', 'int', 'uint', 'bytes', 'string', 'address', 'tuple']; diff --git a/packages/web3-validator/src/default_validator.ts b/packages/web3-validator/src/default_validator.ts new file mode 100644 index 00000000000..ef42bfb22fc --- /dev/null +++ b/packages/web3-validator/src/default_validator.ts @@ -0,0 +1,20 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Validator } from './web3_validator.js'; + +export const validator = new Web3Validator(); diff --git a/packages/web3-validator/src/errors.ts b/packages/web3-validator/src/errors.ts new file mode 100644 index 00000000000..8faf361248b --- /dev/null +++ b/packages/web3-validator/src/errors.ts @@ -0,0 +1,46 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { BaseWeb3Error, ERR_VALIDATION } from 'web3-errors'; +import { Web3ValidationErrorObject } from 'web3-types'; + +const errorFormatter = (error: Web3ValidationErrorObject): string => { + if (error.message) { + return error.message; + } + + return 'unspecified error'; +}; + +export class Web3ValidatorError extends BaseWeb3Error { + public code = ERR_VALIDATION; + public readonly errors: Web3ValidationErrorObject[]; + + public constructor(errors: Web3ValidationErrorObject[]) { + super(); + + this.errors = errors; + + super.message = `Web3 validator found ${ + errors.length + } error[s]:\n${this._compileErrors().join('\n')}`; + } + + private _compileErrors(): string[] { + return this.errors.map(errorFormatter); + } +} diff --git a/packages/web3-validator/src/formats.ts b/packages/web3-validator/src/formats.ts new file mode 100644 index 00000000000..69d6fa9cf1f --- /dev/null +++ b/packages/web3-validator/src/formats.ts @@ -0,0 +1,55 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Filter } from 'web3-types'; +import { ValidInputTypes } from './types.js'; +import { isAddress } from './validation/address.js'; +import { isBlockNumber, isBlockNumberOrTag, isBlockTag } from './validation/block.js'; +import { isBloom } from './validation/bloom.js'; +import { isBoolean } from './validation/boolean.js'; +import { isBytes } from './validation/bytes.js'; +import { isFilterObject } from './validation/filter.js'; +import { isHexStrict, isString } from './validation/string.js'; +import { isNumber, isInt, isUInt } from './validation/numbers.js'; + +const formats: { [key: string]: (data: unknown) => boolean } = { + address: (data: unknown) => isAddress(data as ValidInputTypes), + bloom: (data: unknown) => isBloom(data as ValidInputTypes), + blockNumber: (data: unknown) => isBlockNumber(data as string | number | bigint), + blockTag: (data: unknown) => isBlockTag(data as string), + blockNumberOrTag: (data: unknown) => isBlockNumberOrTag(data as string | number | bigint), + bool: (data: unknown) => isBoolean(data as ValidInputTypes), + bytes: (data: unknown) => isBytes(data as ValidInputTypes | Uint8Array | number[]), + filter: (data: unknown) => isFilterObject(data as Filter), + hex: (data: unknown) => isHexStrict(data as ValidInputTypes), + uint: (data: unknown) => isUInt(data as ValidInputTypes), + int: (data: unknown) => isInt(data as ValidInputTypes), + number: (data: unknown) => isNumber(data as ValidInputTypes), + string: (data: unknown) => isString(data as ValidInputTypes), +}; +// generate formats for all numbers types +for (let bitSize = 8; bitSize <= 256; bitSize += 8) { + formats[`int${bitSize}`] = data => isInt(data as ValidInputTypes, { bitSize }); + formats[`uint${bitSize}`] = data => isUInt(data as ValidInputTypes, { bitSize }); +} +// generate bytes +for (let size = 1; size <= 32; size += 1) { + formats[`bytes${size}`] = data => + isBytes(data as ValidInputTypes | Uint8Array | number[], { size }); +} +formats.bytes256 = formats.bytes; + +export default formats; diff --git a/packages/web3-validator/src/index.ts b/packages/web3-validator/src/index.ts new file mode 100644 index 00000000000..4b816bc84e3 --- /dev/null +++ b/packages/web3-validator/src/index.ts @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export * from './web3_validator.js'; +export * from './default_validator.js'; +export * from './types.js'; +export * as utils from './utils.js'; +export * from './errors.js'; +export * from './constants.js'; +export * from './validation/index.js'; diff --git a/packages/web3-validator/src/types.ts b/packages/web3-validator/src/types.ts new file mode 100644 index 00000000000..1a179e83b58 --- /dev/null +++ b/packages/web3-validator/src/types.ts @@ -0,0 +1,146 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiParameter } from 'web3-types'; +import { ZodIssueBase } from 'zod'; + +export type ValidInputTypes = Uint8Array | bigint | string | number | boolean; +export type EthBaseTypes = 'bool' | 'bytes' | 'string' | 'uint' | 'int' | 'address' | 'tuple'; +export type EthBaseTypesWithMeta = + | `string${string}` + | `string${string}[${number}]` + | `bytes${string}` + | `bytes${string}[${number}]` + | `address[${number}]` + | `bool[${number}]` + | `int${string}` + | `int${string}[${number}]` + | `uint${string}` + | `uint${string}[${number}]` + | `tuple[]` + | `tuple[${number}]`; + +export type EthExtendedTypes = + | 'hex' + | 'number' + | 'blockNumber' + | 'blockNumberOrTag' + | 'filter' + | 'bloom'; + +export type FullValidationSchema = ReadonlyArray; +export type ShortValidationSchema = ReadonlyArray< + string | EthBaseTypes | EthExtendedTypes | EthBaseTypesWithMeta | ShortValidationSchema +>; +export type ValidationSchemaInput = FullValidationSchema | ShortValidationSchema; + +export type Web3ValidationOptions = { + readonly silent: boolean; +}; + +export type Json = string | number | boolean | Array | { [id: string]: Json }; + +export type ValidationError = ZodIssueBase; + +export interface Validate { + (value: Json): boolean; + errors?: ValidationError[]; +} + +export type Schema = { + // version + $schema?: string; + $vocabulary?: string; + // pointers + id?: string; + $id?: string; + $anchor?: string; + $ref?: string; + definitions?: { [id: string]: Schema }; + $defs?: { [id: string]: Schema }; + $recursiveRef?: string; + $recursiveAnchor?: boolean; + // generic + type?: string | Array; + required?: Array | boolean; + default?: Json; + // constant values + enum?: Array; + const?: Json; + // logical checks + not?: Schema; + allOf?: Array; + anyOf?: Array; + oneOf?: Array; + if?: Schema; + then?: Schema; + else?: Schema; + // numbers + maximum?: number; + minimum?: number; + exclusiveMaximum?: number | boolean; + exclusiveMinimum?: number | boolean; + multipleOf?: number; + divisibleBy?: number; + // arrays, basic + maxItems?: number; + minItems?: number; + additionalItems?: Schema; + // arrays, complex + contains?: Schema; + minContains?: number; + maxContains?: number; + uniqueItems?: boolean; + // strings + maxLength?: number; + minLength?: number; + format?: string; + pattern?: string; + // strings content + contentEncoding?: string; + contentMediaType?: string; + contentSchema?: Schema; + // objects + properties?: { [id: string]: Schema }; + maxProperties?: number; + minProperties?: number; + additionalProperties?: Schema; + patternProperties?: { [pattern: string]: Schema }; + propertyNames?: Schema; + dependencies?: { [id: string]: Array | Schema }; + dependentRequired?: { [id: string]: Array }; + dependentSchemas?: { [id: string]: Schema }; + // see-through + unevaluatedProperties?: Schema; + unevaluatedItems?: Schema; + // Unused meta keywords not affecting validation (annotations and comments) + // https://json-schema.org/understanding-json-schema/reference/generic.html + // https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9 + title?: string; + description?: string; + deprecated?: boolean; + readOnly?: boolean; + writeOnly?: boolean; + examples?: Array; + $comment?: string; + // optimization hint and error filtering only, does not affect validation result + discriminator?: { propertyName: string; mapping?: { [value: string]: string } }; + readonly eth?: string; + items?: Schema | Schema[]; +}; + +export type JsonSchema = Schema; diff --git a/packages/web3-validator/src/utils.ts b/packages/web3-validator/src/utils.ts new file mode 100644 index 00000000000..28270c99c3d --- /dev/null +++ b/packages/web3-validator/src/utils.ts @@ -0,0 +1,468 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { InvalidBytesError, InvalidNumberError } from 'web3-errors'; +import { VALID_ETH_BASE_TYPES } from './constants.js'; +import { + FullValidationSchema, + JsonSchema, + ShortValidationSchema, + ValidationSchemaInput, + ValidInputTypes, +} from './types.js'; +import { isAbiParameterSchema } from './validation/abi.js'; +import { isHexStrict } from './validation/string.js'; +import { Web3ValidatorError } from './errors.js'; + +const extraTypes = ['hex', 'number', 'blockNumber', 'blockNumberOrTag', 'filter', 'bloom']; + +export const parseBaseType = ( + type: string, +): { + baseType?: T; + baseTypeSize: number | undefined; + arraySizes: number[]; + isArray: boolean; +} => { + // Remove all empty spaces to avoid any parsing issue. + let strippedType = type.replace(/ /, ''); + let baseTypeSize: number | undefined; + let isArray = false; + let arraySizes: number[] = []; + + if (type.includes('[')) { + // Extract the array type + strippedType = strippedType.slice(0, strippedType.indexOf('[')); + // Extract array indexes + arraySizes = [...type.matchAll(/(?:\[(\d*)\])/g)] + .map(match => parseInt(match[1], 10)) + .map(size => (Number.isNaN(size) ? -1 : size)); + + isArray = arraySizes.length > 0; + } + + if (VALID_ETH_BASE_TYPES.includes(strippedType)) { + return { baseType: strippedType as unknown as T, isArray, baseTypeSize, arraySizes }; + } + + if (strippedType.startsWith('int')) { + baseTypeSize = parseInt(strippedType.substring(3), 10); + strippedType = 'int'; + } else if (strippedType.startsWith('uint')) { + baseTypeSize = parseInt(type.substring(4), 10); + strippedType = 'uint'; + } else if (strippedType.startsWith('bytes')) { + baseTypeSize = parseInt(strippedType.substring(5), 10); + strippedType = 'bytes'; + } else { + return { baseType: undefined, isArray: false, baseTypeSize: undefined, arraySizes }; + } + + return { baseType: strippedType as unknown as T, isArray, baseTypeSize, arraySizes }; +}; + +const convertEthType = ( + type: string, + parentSchema: JsonSchema = {}, +): { format?: string; required?: boolean } => { + const typePropertyPresent = Object.keys(parentSchema).includes('type'); + + if (typePropertyPresent) { + throw new Web3ValidatorError([ + { + keyword: 'eth', + message: 'Either "eth" or "type" can be presented in schema', + params: { eth: type }, + instancePath: '', + schemaPath: '', + }, + ]); + } + + const { baseType, baseTypeSize } = parseBaseType(type); + + if (!baseType && !extraTypes.includes(type)) { + throw new Web3ValidatorError([ + { + keyword: 'eth', + message: `Eth data type "${type}" is not valid`, + params: { eth: type }, + instancePath: '', + schemaPath: '', + }, + ]); + } + + if (baseType) { + if (baseType === 'tuple') { + throw new Error('"tuple" type is not implemented directly.'); + } + return { format: `${baseType}${baseTypeSize ?? ''}`, required: true }; + } + if (type) { + return { format: type, required: true }; + } + + return {}; +}; + +export const abiSchemaToJsonSchema = ( + abis: ShortValidationSchema | FullValidationSchema, + level = '/0', +) => { + const schema: JsonSchema = { + type: 'array', + items: [], + maxItems: abis.length, + minItems: abis.length, + }; + + for (const [index, abi] of abis.entries()) { + // eslint-disable-next-line no-nested-ternary + let abiType!: string; + let abiName!: string; + let abiComponents: ShortValidationSchema | FullValidationSchema | undefined = []; + + // If it's a complete Abi Parameter + // e.g. {name: 'a', type: 'uint'} + if (isAbiParameterSchema(abi)) { + abiType = abi.type; + abiName = abi.name; + abiComponents = abi.components as FullValidationSchema; + // If its short form string value e.g. ['uint'] + } else if (typeof abi === 'string') { + abiType = abi; + abiName = `${level}/${index}`; + + // If it's provided in short form of tuple e.g. [['uint', 'string']] + } else if (Array.isArray(abi)) { + // If its custom tuple e.g. ['tuple[2]', ['uint', 'string']] + if ( + abi[0] && + typeof abi[0] === 'string' && + abi[0].startsWith('tuple') && + !Array.isArray(abi[0]) && + abi[1] && + Array.isArray(abi[1]) + ) { + // eslint-disable-next-line prefer-destructuring + abiType = abi[0]; + abiName = `${level}/${index}`; + abiComponents = abi[1] as ReadonlyArray; + } else { + abiType = 'tuple'; + abiName = `${level}/${index}`; + abiComponents = abi; + } + } + + const { baseType, isArray, arraySizes } = parseBaseType(abiType); + + let childSchema: JsonSchema; + let lastSchema = schema; + for (let i = arraySizes.length - 1; i > 0; i -= 1) { + childSchema = { + type: 'array', + items: [], + maxItems: arraySizes[i], + minItems: arraySizes[i], + }; + + if (arraySizes[i] < 0) { + delete childSchema.maxItems; + delete childSchema.minItems; + } + + // lastSchema.items is a Schema, concat with 'childSchema' + if (!Array.isArray(lastSchema.items)) { + lastSchema.items = [lastSchema.items as JsonSchema, childSchema]; + } // lastSchema.items is an empty Scheme array, set it to 'childSchema' + else if (lastSchema.items.length === 0) { + lastSchema.items = childSchema; + } // lastSchema.items is a non-empty Scheme array, append 'childSchema' + else { + lastSchema.items.push(childSchema); + } + lastSchema = childSchema; + } + + if (baseType === 'tuple' && !isArray) { + const nestedTuple = abiSchemaToJsonSchema(abiComponents, abiName); + nestedTuple.$id = abiName; + (lastSchema.items as JsonSchema[]).push(nestedTuple); + } else if (baseType === 'tuple' && isArray) { + const arraySize = arraySizes[0]; + const item: JsonSchema = { + $id: abiName, + type: 'array', + items: abiSchemaToJsonSchema(abiComponents, abiName), + maxItems: arraySize, + minItems: arraySize, + }; + + if (arraySize < 0) { + delete item.maxItems; + delete item.minItems; + } + + (lastSchema.items as JsonSchema[]).push(item); + } else if (isArray) { + const arraySize = arraySizes[0]; + const item: JsonSchema = { + type: 'array', + $id: abiName, + items: convertEthType(String(baseType)), + minItems: arraySize, + maxItems: arraySize, + }; + + if (arraySize < 0) { + delete item.maxItems; + delete item.minItems; + } + + (lastSchema.items as JsonSchema[]).push(item); + } else if (Array.isArray(lastSchema.items)) { + // Array of non-tuple items + lastSchema.items.push({ $id: abiName, ...convertEthType(abiType) }); + } else { + // Nested object + ((lastSchema.items as JsonSchema).items as JsonSchema[]).push({ + $id: abiName, + ...convertEthType(abiType), + }); + } + lastSchema = schema; + } + + return schema; +}; + +export const ethAbiToJsonSchema = (abis: ValidationSchemaInput) => abiSchemaToJsonSchema(abis); + +export const fetchArrayElement = (data: Array, level: number): unknown => { + if (level === 1) { + return data; + } + + return fetchArrayElement(data[0] as Array, level - 1); +}; + +export const transformJsonDataToAbiFormat = ( + abis: FullValidationSchema, + data: ReadonlyArray | Record, + transformedData?: Array, +): Array => { + const newData: Array = []; + + for (const [index, abi] of abis.entries()) { + // eslint-disable-next-line no-nested-ternary + let abiType!: string; + let abiName!: string; + let abiComponents: ShortValidationSchema | FullValidationSchema | undefined = []; + + // If it's a complete Abi Parameter + // e.g. {name: 'a', type: 'uint'} + if (isAbiParameterSchema(abi)) { + abiType = abi.type; + abiName = abi.name; + abiComponents = abi.components as FullValidationSchema; + // If its short form string value e.g. ['uint'] + } else if (typeof abi === 'string') { + abiType = abi; + + // If it's provided in short form of tuple e.g. [['uint', 'string']] + } else if (Array.isArray(abi)) { + // If its custom tuple e.g. ['tuple[2]', ['uint', 'string']] + if (abi[1] && Array.isArray(abi[1])) { + abiType = abi[0] as string; + abiComponents = abi[1] as ReadonlyArray; + } else { + abiType = 'tuple'; + abiComponents = abi; + } + } + + const { baseType, isArray, arraySizes } = parseBaseType(abiType); + const dataItem = Array.isArray(data) + ? (data as Array)[index] + : (data as Record)[abiName]; + + if (baseType === 'tuple' && !isArray) { + newData.push( + transformJsonDataToAbiFormat( + abiComponents as FullValidationSchema, + dataItem as Array, + transformedData, + ), + ); + } else if (baseType === 'tuple' && isArray) { + const tupleData = []; + for (const tupleItem of dataItem as Array) { + // Nested array + if (arraySizes.length > 1) { + const nestedItems = fetchArrayElement( + tupleItem as Array, + arraySizes.length - 1, + ); + const nestedData = []; + + for (const nestedItem of nestedItems as Array) { + nestedData.push( + transformJsonDataToAbiFormat( + abiComponents as FullValidationSchema, + nestedItem as Array, + transformedData, + ), + ); + } + tupleData.push(nestedData); + } else { + tupleData.push( + transformJsonDataToAbiFormat( + abiComponents as FullValidationSchema, + tupleItem as Array, + transformedData, + ), + ); + } + } + newData.push(tupleData); + } else { + newData.push(dataItem); + } + } + + // Have to reassign before pushing to transformedData + // eslint-disable-next-line no-param-reassign + transformedData = transformedData ?? []; + transformedData.push(...newData); + + return transformedData; +}; + +/** + * Code points to int + */ + +export const codePointToInt = (codePoint: number): number => { + if (codePoint >= 48 && codePoint <= 57) { + /* ['0'..'9'] -> [0..9] */ + return codePoint - 48; + } + + if (codePoint >= 65 && codePoint <= 70) { + /* ['A'..'F'] -> [10..15] */ + return codePoint - 55; + } + + if (codePoint >= 97 && codePoint <= 102) { + /* ['a'..'f'] -> [10..15] */ + return codePoint - 87; + } + + throw new Error(`Invalid code point: ${codePoint}`); +}; + +/** + * Converts value to it's number representation + */ +export const hexToNumber = (value: string): bigint | number => { + if (!isHexStrict(value)) { + throw new Error('Invalid hex string'); + } + + const [negative, hexValue] = value.startsWith('-') ? [true, value.slice(1)] : [false, value]; + const num = BigInt(hexValue); + + if (num > Number.MAX_SAFE_INTEGER) { + return negative ? -num : num; + } + + if (num < Number.MIN_SAFE_INTEGER) { + return num; + } + + return negative ? -1 * Number(num) : Number(num); +}; + +/** + * Converts value to it's hex representation + */ +export const numberToHex = (value: ValidInputTypes): string => { + if ((typeof value === 'number' || typeof value === 'bigint') && value < 0) { + return `-0x${value.toString(16).slice(1)}`; + } + + if ((typeof value === 'number' || typeof value === 'bigint') && value >= 0) { + return `0x${value.toString(16)}`; + } + + if (typeof value === 'string' && isHexStrict(value)) { + const [negative, hex] = value.startsWith('-') ? [true, value.slice(1)] : [false, value]; + const hexValue = hex.split(/^(-)?0(x|X)/).slice(-1)[0]; + return `${negative ? '-' : ''}0x${hexValue.replace(/^0+/, '').toLowerCase()}`; + } + + if (typeof value === 'string' && !isHexStrict(value)) { + return numberToHex(BigInt(value)); + } + + throw new InvalidNumberError(value); +}; + +/** + * Adds a padding on the left of a string, if value is a integer or bigInt will be converted to a hex string. + */ +export const padLeft = (value: ValidInputTypes, characterAmount: number, sign = '0'): string => { + if (typeof value === 'string' && !isHexStrict(value)) { + return value.padStart(characterAmount, sign); + } + + const hex = typeof value === 'string' && isHexStrict(value) ? value : numberToHex(value); + + const [prefix, hexValue] = hex.startsWith('-') ? ['-0x', hex.slice(3)] : ['0x', hex.slice(2)]; + + return `${prefix}${hexValue.padStart(characterAmount, sign)}`; +}; + +export function uint8ArrayToHexString(uint8Array: Uint8Array): string { + let hexString = '0x'; + for (const e of uint8Array) { + const hex = e.toString(16); + hexString += hex.length === 1 ? `0${hex}` : hex; + } + return hexString; +} + +export function hexToUint8Array(hex: string): Uint8Array { + let value; + if (hex.toLowerCase().startsWith('0x')) { + value = hex.slice(2); + } else { + value = hex; + } + if (value.length % 2 !== 0) { + throw new InvalidBytesError(`hex string has odd length: ${hex}`); + } + const bytes = new Uint8Array(Math.ceil(value.length / 2)); + for (let i = 0; i < bytes.length; i += 1) { + const byte = parseInt(value.substring(i * 2, i * 2 + 2), 16); + bytes[i] = byte; + } + return bytes; +} diff --git a/packages/web3-validator/src/validation/abi.ts b/packages/web3-validator/src/validation/abi.ts new file mode 100644 index 00000000000..52e835db63a --- /dev/null +++ b/packages/web3-validator/src/validation/abi.ts @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AbiParameter } from 'web3-types'; +// eslint-disable-next-line require-extensions/require-extensions +import { ShortValidationSchema } from '../types'; + +export const isAbiParameterSchema = ( + schema: string | ShortValidationSchema | AbiParameter, +): schema is AbiParameter => typeof schema === 'object' && 'type' in schema && 'name' in schema; diff --git a/packages/web3-validator/src/validation/address.ts b/packages/web3-validator/src/validation/address.ts new file mode 100644 index 00000000000..f1c5b820a35 --- /dev/null +++ b/packages/web3-validator/src/validation/address.ts @@ -0,0 +1,77 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { keccak256 } from 'ethereum-cryptography/keccak.js'; +import { utf8ToBytes } from 'ethereum-cryptography/utils.js'; +import { ValidInputTypes } from '../types.js'; +import { uint8ArrayToHexString } from '../utils.js'; +import { isHexStrict } from './string.js'; + +/** + * Checks the checksum of a given address. Will also return false on non-checksum addresses. + */ +export const checkAddressCheckSum = (data: string): boolean => { + if (!/^(0x)?[0-9a-f]{40}$/i.test(data)) return false; + const address = data.slice(2); + const updatedData = utf8ToBytes(address.toLowerCase()); + + const addressHash = uint8ArrayToHexString(keccak256(updatedData)).slice(2); + + for (let i = 0; i < 40; i += 1) { + // the nth letter should be uppercase if the nth digit of casemap is 1 + if ( + (parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || + (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i]) + ) { + return false; + } + } + return true; +}; + +/** + * Checks if a given string is a valid Ethereum address. It will also check the checksum, if the address has upper and lowercase letters. + */ +export const isAddress = (value: ValidInputTypes, checkChecksum = true) => { + if (typeof value !== 'string' && !(value instanceof Uint8Array)) { + return false; + } + + let valueToCheck: string; + + if (value instanceof Uint8Array) { + valueToCheck = uint8ArrayToHexString(value); + } else if (typeof value === 'string' && !isHexStrict(value)) { + valueToCheck = value.toLowerCase().startsWith('0x') ? value : `0x${value}`; + } else { + valueToCheck = value; + } + + // check if it has the basic requirements of an address + if (!/^(0x)?[0-9a-f]{40}$/i.test(valueToCheck)) { + return false; + } + // If it's ALL lowercase or ALL upppercase + if ( + /^(0x|0X)?[0-9a-f]{40}$/.test(valueToCheck) || + /^(0x|0X)?[0-9A-F]{40}$/.test(valueToCheck) + ) { + return true; + // Otherwise check each case + } + return checkChecksum ? checkAddressCheckSum(valueToCheck) : true; +}; diff --git a/packages/web3-validator/src/validation/block.ts b/packages/web3-validator/src/validation/block.ts new file mode 100644 index 00000000000..695ac3e3bbe --- /dev/null +++ b/packages/web3-validator/src/validation/block.ts @@ -0,0 +1,32 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { BlockTags } from 'web3-types'; +import { isUInt } from './numbers.js'; + +export const isBlockNumber = (value: string | number | bigint): boolean => isUInt(value); + +/** + * Returns true if the given blockNumber is 'latest', 'pending', 'earliest, 'safe' or 'finalized' + */ +export const isBlockTag = (value: string) => Object.values(BlockTags).includes(value as BlockTags); + +/** + * Returns true if given value is valid hex string and not negative, or is a valid BlockTag + */ +export const isBlockNumberOrTag = (value: string | number | bigint) => + isBlockTag(value as string) || isBlockNumber(value); diff --git a/packages/web3-validator/src/validation/bloom.ts b/packages/web3-validator/src/validation/bloom.ts new file mode 100644 index 00000000000..e9cde96b73d --- /dev/null +++ b/packages/web3-validator/src/validation/bloom.ts @@ -0,0 +1,121 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { keccak256 } from 'ethereum-cryptography/keccak.js'; +import { ValidInputTypes } from '../types.js'; +import { codePointToInt, hexToUint8Array, padLeft, uint8ArrayToHexString } from '../utils.js'; +import { isAddress } from './address.js'; +import { isHexStrict } from './string.js'; + +/** + * Returns true if the bloom is a valid bloom + * https://github.com/joshstevens19/ethereum-bloom-filters/blob/fbeb47b70b46243c3963fe1c2988d7461ef17236/src/index.ts#L7 + */ +export const isBloom = (bloom: ValidInputTypes): boolean => { + if (typeof bloom !== 'string') { + return false; + } + + if (!/^(0x)?[0-9a-f]{512}$/i.test(bloom)) { + return false; + } + + if (/^(0x)?[0-9a-f]{512}$/.test(bloom) || /^(0x)?[0-9A-F]{512}$/.test(bloom)) { + return true; + } + + return false; +}; + +/** + * Returns true if the value is part of the given bloom + * note: false positives are possible. + */ +export const isInBloom = (bloom: string, value: string | Uint8Array): boolean => { + if (typeof value === 'string' && !isHexStrict(value)) { + return false; + } + + if (!isBloom(bloom)) { + return false; + } + + const uint8Array = typeof value === 'string' ? hexToUint8Array(value) : value; + + const hash = uint8ArrayToHexString(keccak256(uint8Array)).slice(2); + + for (let i = 0; i < 12; i += 4) { + // calculate bit position in bloom filter that must be active + const bitpos = + // eslint-disable-next-line no-bitwise + ((parseInt(hash.slice(i, i + 2), 16) << 8) + parseInt(hash.slice(i + 2, i + 4), 16)) & + 2047; + + // test if bitpos in bloom is active + const code = codePointToInt(bloom.charCodeAt(bloom.length - 1 - Math.floor(bitpos / 4))); + + // eslint-disable-next-line no-bitwise + const offset = 1 << bitpos % 4; + + // eslint-disable-next-line no-bitwise + if ((code & offset) !== offset) { + return false; + } + } + + return true; +}; + +/** + * Returns true if the ethereum users address is part of the given bloom note: false positives are possible. + */ +export const isUserEthereumAddressInBloom = (bloom: string, ethereumAddress: string): boolean => { + if (!isBloom(bloom)) { + return false; + } + + if (!isAddress(ethereumAddress)) { + return false; + } + + // you have to pad the ethereum address to 32 bytes + // else the bloom filter does not work + // this is only if your matching the USERS + // ethereum address. Contract address do not need this + // hence why we have 2 methods + // (0x is not in the 2nd parameter of padleft so 64 chars is fine) + + const address = padLeft(ethereumAddress, 64); + + return isInBloom(bloom, address); +}; + +/** + * Returns true if the contract address is part of the given bloom. + * note: false positives are possible. + */ +export const isContractAddressInBloom = (bloom: string, contractAddress: string): boolean => { + if (!isBloom(bloom)) { + return false; + } + + if (!isAddress(contractAddress)) { + return false; + } + + return isInBloom(bloom, contractAddress); +}; diff --git a/packages/web3-validator/src/validation/boolean.ts b/packages/web3-validator/src/validation/boolean.ts new file mode 100644 index 00000000000..17593c8312c --- /dev/null +++ b/packages/web3-validator/src/validation/boolean.ts @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ValidInputTypes } from '../types.js'; +import { isHexStrict } from './string.js'; + +export const isBoolean = (value: ValidInputTypes) => { + if (!['number', 'string', 'boolean'].includes(typeof value)) { + return false; + } + + if (typeof value === 'boolean') { + return true; + } + + if (typeof value === 'string' && !isHexStrict(value)) { + return value === '1' || value === '0'; + } + + if (typeof value === 'string' && isHexStrict(value)) { + return value === '0x1' || value === '0x0'; + } + + // type === number + return value === 1 || value === 0; +}; diff --git a/packages/web3-validator/src/validation/bytes.ts b/packages/web3-validator/src/validation/bytes.ts new file mode 100644 index 00000000000..ef15fbc0120 --- /dev/null +++ b/packages/web3-validator/src/validation/bytes.ts @@ -0,0 +1,74 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ValidInputTypes } from '../types.js'; +import { hexToUint8Array, parseBaseType } from '../utils.js'; +import { isHexStrict } from './string.js'; + +/** + * checks input if typeof data is valid Uint8Array input + */ +export const isUint8Array = (data: ValidInputTypes) => data instanceof Uint8Array; + +export const isBytes = ( + value: ValidInputTypes | Uint8Array | number[], + options: { abiType: string; size?: never } | { size: number; abiType?: never } = { + abiType: 'bytes', + }, +) => { + if (typeof value !== 'string' && !Array.isArray(value) && !(value instanceof Uint8Array)) { + return false; + } + + // isHexStrict also accepts - prefix which can not exists in bytes + if (typeof value === 'string' && isHexStrict(value) && value.startsWith('-')) { + return false; + } + + if (typeof value === 'string' && !isHexStrict(value)) { + return false; + } + + let valueToCheck: Uint8Array; + + if (typeof value === 'string') { + if (value.length % 2 !== 0) { + // odd length hex + return false; + } + valueToCheck = hexToUint8Array(value); + } else if (Array.isArray(value)) { + if (value.some(d => d < 0 || d > 255 || !Number.isInteger(d))) { + return false; + } + valueToCheck = new Uint8Array(value); + } else { + valueToCheck = value; + } + + if (options?.abiType) { + const { baseTypeSize } = parseBaseType(options.abiType); + + return baseTypeSize ? valueToCheck.length === baseTypeSize : true; + } + + if (options?.size) { + return valueToCheck.length === options?.size; + } + + return true; +}; diff --git a/packages/web3-validator/src/validation/eth.ts b/packages/web3-validator/src/validation/eth.ts new file mode 100644 index 00000000000..774bba13a83 --- /dev/null +++ b/packages/web3-validator/src/validation/eth.ts @@ -0,0 +1,44 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { parseBaseType } from '../utils.js'; + +export const isValidEthBaseType = (type: string): boolean => { + const { baseType, baseTypeSize } = parseBaseType(type); + + if (!baseType) { + return false; + } + + if (baseType === type) { + return true; + } + + if ((baseType === 'int' || baseType === 'uint') && baseTypeSize) { + if (!(baseTypeSize <= 256 && baseTypeSize % 8 === 0)) { + return false; + } + } + + if (baseType === 'bytes' && baseTypeSize) { + if (!(baseTypeSize >= 1 && baseTypeSize <= 32)) { + return false; + } + } + + return true; +}; diff --git a/packages/web3-validator/src/validation/filter.ts b/packages/web3-validator/src/validation/filter.ts new file mode 100644 index 00000000000..2f13f08dbbf --- /dev/null +++ b/packages/web3-validator/src/validation/filter.ts @@ -0,0 +1,77 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Filter } from 'web3-types'; +import { isAddress } from './address.js'; +import { isBlockNumberOrTag } from './block.js'; +import { isNullish } from './object.js'; +import { isTopic } from './topic.js'; + +/** + * First we check if all properties in the provided value are expected, + * then because all Filter properties are optional, we check if the expected properties + * are defined. If defined and they're not the expected type, we immediately return false, + * otherwise we return true after all checks pass. + */ +export const isFilterObject = (value: Filter) => { + const expectedFilterProperties: (keyof Filter)[] = [ + 'fromBlock', + 'toBlock', + 'address', + 'topics', + 'blockHash', + ]; + if (isNullish(value) || typeof value !== 'object') return false; + + if ( + !Object.keys(value).every(property => + expectedFilterProperties.includes(property as keyof Filter), + ) + ) + return false; + + if ( + (!isNullish(value.fromBlock) && !isBlockNumberOrTag(value.fromBlock)) || + (!isNullish(value.toBlock) && !isBlockNumberOrTag(value.toBlock)) + ) + return false; + + if (!isNullish(value.address)) { + if (Array.isArray(value.address)) { + if (!value.address.every(address => isAddress(address))) return false; + } else if (!isAddress(value.address)) return false; + } + + if (!isNullish(value.topics)) { + if ( + !value.topics.every(topic => { + if (isNullish(topic)) return true; + + if (Array.isArray(topic)) { + return topic.every(nestedTopic => isTopic(nestedTopic)); + } + + if (isTopic(topic)) return true; + + return false; + }) + ) + return false; + } + + return true; +}; diff --git a/packages/web3-validator/src/validation/index.ts b/packages/web3-validator/src/validation/index.ts new file mode 100644 index 00000000000..17912899269 --- /dev/null +++ b/packages/web3-validator/src/validation/index.ts @@ -0,0 +1,28 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export * from './address.js'; +export * from './block.js'; +export * from './bloom.js'; +export * from './boolean.js'; +export * from './bytes.js'; +export * from './eth.js'; +export * from './filter.js'; +export * from './numbers.js'; +export * from './string.js'; +export * from './topic.js'; +export * from './object.js'; diff --git a/packages/web3-validator/src/validation/numbers.ts b/packages/web3-validator/src/validation/numbers.ts new file mode 100644 index 00000000000..276fb84dd1e --- /dev/null +++ b/packages/web3-validator/src/validation/numbers.ts @@ -0,0 +1,143 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ValidInputTypes } from '../types.js'; +import { parseBaseType, hexToNumber } from '../utils.js'; +import { isHexStrict } from './string.js'; + +/** + * Checks if a given value is a valid big int + */ +export const isBigInt = (value: ValidInputTypes): boolean => typeof value === 'bigint'; + +// Note: this could be simplified using ** operator, but babel does not handle it well +// you can find more at: https://github.com/babel/babel/issues/13109 and https://github.com/web3/web3.js/issues/6187 +/** @internal */ +export const bigintPower = (base: bigint, expo: bigint) => { + let res = base; + for (let index = 1; index < expo; index += 1) { + res *= base; + } + return res; +}; + +export const isUInt = ( + value: ValidInputTypes, + options: { abiType: string; bitSize?: never } | { bitSize: number; abiType?: never } = { + abiType: 'uint', + }, +) => { + if ( + !['number', 'string', 'bigint'].includes(typeof value) || + (typeof value === 'string' && value.length === 0) + ) { + return false; + } + + let size!: number; + + if (options?.abiType) { + const { baseTypeSize } = parseBaseType(options.abiType); + + if (baseTypeSize) { + size = baseTypeSize; + } + } else if (options.bitSize) { + size = options.bitSize; + } + + const maxSize = bigintPower(BigInt(2), BigInt(size ?? 256)) - BigInt(1); + + try { + const valueToCheck = + typeof value === 'string' && isHexStrict(value) + ? BigInt(hexToNumber(value)) + : BigInt(value as number); + + return valueToCheck >= 0 && valueToCheck <= maxSize; + } catch (error) { + // Some invalid number value given which can not be converted via BigInt + return false; + } +}; + +export const isInt = ( + value: ValidInputTypes, + options: { abiType: string; bitSize?: never } | { bitSize: number; abiType?: never } = { + abiType: 'int', + }, +) => { + if (!['number', 'string', 'bigint'].includes(typeof value)) { + return false; + } + + if (typeof value === 'number' && value > Number.MAX_SAFE_INTEGER) { + return false; + } + + let size!: number; + + if (options?.abiType) { + const { baseTypeSize, baseType } = parseBaseType(options.abiType); + + if (baseType !== 'int') { + return false; + } + + if (baseTypeSize) { + size = baseTypeSize; + } + } else if (options.bitSize) { + size = options.bitSize; + } + + const maxSize = bigintPower(BigInt(2), BigInt((size ?? 256) - 1)); + const minSize = BigInt(-1) * bigintPower(BigInt(2), BigInt((size ?? 256) - 1)); + + try { + const valueToCheck = + typeof value === 'string' && isHexStrict(value) + ? BigInt(hexToNumber(value)) + : BigInt(value as number); + + return valueToCheck >= minSize && valueToCheck <= maxSize; + } catch (error) { + // Some invalid number value given which can not be converted via BigInt + return false; + } +}; + +export const isNumber = (value: ValidInputTypes) => { + if (isInt(value)) { + return true; + } + + // It would be a decimal number + if ( + typeof value === 'string' && + /[0-9.]/.test(value) && + value.indexOf('.') === value.lastIndexOf('.') + ) { + return true; + } + + if (typeof value === 'number') { + return true; + } + + return false; +}; diff --git a/packages/web3-validator/src/validation/object.ts b/packages/web3-validator/src/validation/object.ts new file mode 100644 index 00000000000..1d1aba0a36e --- /dev/null +++ b/packages/web3-validator/src/validation/object.ts @@ -0,0 +1,31 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { TypedArray } from 'web3-types'; + +// Explicitly check for the +// eslint-disable-next-line @typescript-eslint/ban-types +export const isNullish = (item: unknown): item is undefined | null => + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + item === undefined || item === null; + +export const isObject = (item: unknown): item is Record => + typeof item === 'object' && + !isNullish(item) && + !Array.isArray(item) && + !(item instanceof TypedArray); diff --git a/packages/web3-validator/src/validation/string.ts b/packages/web3-validator/src/validation/string.ts new file mode 100644 index 00000000000..d586af70057 --- /dev/null +++ b/packages/web3-validator/src/validation/string.ts @@ -0,0 +1,90 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { ValidInputTypes } from '../types.js'; + +/** + * checks input if typeof data is valid string input + */ +export const isString = (value: ValidInputTypes) => typeof value === 'string'; + +export const isHexStrict = (hex: ValidInputTypes) => + typeof hex === 'string' && /^((-)?0x[0-9a-f]+|(0x))$/i.test(hex); + +/** + * Is the string a hex string. + * + * @param value + * @param length + * @returns output the string is a hex string + */ +export function isHexString(value: string, length?: number): boolean { + if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) return false; + + if (typeof length !== 'undefined' && length > 0 && value.length !== 2 + 2 * length) + return false; + + return true; +} + +export const isHex = (hex: ValidInputTypes): boolean => + typeof hex === 'number' || + typeof hex === 'bigint' || + (typeof hex === 'string' && /^((-0x|0x|-)?[0-9a-f]+|(0x))$/i.test(hex)); + +export const isHexString8Bytes = (value: string, prefixed = true) => + prefixed ? isHexStrict(value) && value.length === 18 : isHex(value) && value.length === 16; + +export const isHexString32Bytes = (value: string, prefixed = true) => + prefixed ? isHexStrict(value) && value.length === 66 : isHex(value) && value.length === 64; + +/** + * Returns a `Boolean` on whether or not the a `String` starts with '0x' + * @param str the string input value + * @return a boolean if it is or is not hex prefixed + * @throws if the str input is not a string + */ +export function isHexPrefixed(str: string): boolean { + if (typeof str !== 'string') { + throw new Error(`[isHexPrefixed] input must be type 'string', received type ${typeof str}`); + } + + return str.startsWith('0x'); +} + +/** + * Checks provided Uint8Array for leading zeroes and throws if found. + * + * Examples: + * + * Valid values: 0x1, 0x, 0x01, 0x1234 + * Invalid values: 0x0, 0x00, 0x001, 0x0001 + * + * Note: This method is useful for validating that RLP encoded integers comply with the rule that all + * integer values encoded to RLP must be in the most compact form and contain no leading zero bytes + * @param values An object containing string keys and Uint8Array values + * @throws if any provided value is found to have leading zero bytes + */ +export const validateNoLeadingZeroes = function (values: { + [key: string]: Uint8Array | undefined; +}) { + for (const [k, v] of Object.entries(values)) { + if (v !== undefined && v.length > 0 && v[0] === 0) { + throw new Error(`${k} cannot have leading zeroes, received: ${v.toString()}`); + } + } +}; diff --git a/packages/web3-validator/src/validation/topic.ts b/packages/web3-validator/src/validation/topic.ts new file mode 100644 index 00000000000..4f5ed44c85d --- /dev/null +++ b/packages/web3-validator/src/validation/topic.ts @@ -0,0 +1,53 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { isBloom, isInBloom } from './bloom.js'; + +/** + * Checks if its a valid topic + */ +export const isTopic = (topic: string): boolean => { + if (typeof topic !== 'string') { + return false; + } + + if (!/^(0x)?[0-9a-f]{64}$/i.test(topic)) { + return false; + } + + if (/^(0x)?[0-9a-f]{64}$/.test(topic) || /^(0x)?[0-9A-F]{64}$/.test(topic)) { + return true; + } + + return false; +}; + +/** + * Returns true if the topic is part of the given bloom. + * note: false positives are possible. + */ +export const isTopicInBloom = (bloom: string, topic: string): boolean => { + if (!isBloom(bloom)) { + return false; + } + + if (!isTopic(topic)) { + return false; + } + + return isInBloom(bloom, topic); +}; diff --git a/packages/web3-validator/src/validator.ts b/packages/web3-validator/src/validator.ts new file mode 100644 index 00000000000..d477a06d96b --- /dev/null +++ b/packages/web3-validator/src/validator.ts @@ -0,0 +1,173 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { SchemaFormatError } from 'web3-errors'; +import { Web3ValidationErrorObject } from 'web3-types'; + +import { z, ZodType, ZodIssue, ZodIssueCode, ZodTypeAny } from 'zod'; + +import { RawCreateParams } from 'zod/lib/types'; +import { Web3ValidatorError } from './errors.js'; +import { Json, JsonSchema } from './types.js'; +import formats from './formats.js'; + +const convertToZod = (schema: JsonSchema): ZodType => { + if ((!schema?.type || schema?.type === 'object') && schema?.properties) { + const obj: { [key: string]: ZodType } = {}; + for (const name of Object.keys(schema.properties)) { + const zItem = convertToZod(schema.properties[name]); + if (zItem) { + obj[name] = zItem; + } + } + + if (Array.isArray(schema.required)) { + return z + .object(obj) + .partial() + .required(schema.required.reduce((acc, v: string) => ({ ...acc, [v]: true }), {})); + } + return z.object(obj).partial(); + } + + if (schema?.type === 'array' && schema?.items) { + if (Array.isArray(schema.items) && schema.items.length > 0) { + const arr: Partial<[ZodTypeAny, ...ZodTypeAny[]]> = []; + for (const item of schema.items) { + const zItem = convertToZod(item); + if (zItem) { + arr.push(zItem); + } + } + return z.tuple(arr as [ZodTypeAny, ...ZodTypeAny[]]); + } + return z.array(convertToZod(schema.items as JsonSchema)); + } + + if (schema.oneOf && Array.isArray(schema.oneOf)) { + return z.union( + schema.oneOf.map(oneOfSchema => convertToZod(oneOfSchema)) as [ + ZodTypeAny, + ZodTypeAny, + ...ZodTypeAny[], + ], + ); + } + + if (schema?.format) { + if (!formats[schema.format]) { + throw new SchemaFormatError(schema.format); + } + + return z.any().refine(formats[schema.format], (value: unknown) => ({ + params: { value, format: schema.format }, + })); + } + + if ( + schema?.type && + schema?.type !== 'object' && + typeof (z as unknown as { [key: string]: (params?: RawCreateParams) => ZodType })[ + String(schema.type) + ] === 'function' + ) { + return (z as unknown as { [key: string]: (params?: RawCreateParams) => ZodType })[ + String(schema.type) + ](); + } + return z.object({ data: z.any() }).partial(); +}; + +export class Validator { + // eslint-disable-next-line no-use-before-define + private static validatorInstance?: Validator; + + // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function + public static factory(): Validator { + if (!Validator.validatorInstance) { + Validator.validatorInstance = new Validator(); + } + return Validator.validatorInstance; + } + + public validate(schema: JsonSchema, data: Json, options?: { silent?: boolean }) { + const zod = convertToZod(schema); + const result = zod.safeParse(data); + if (!result.success) { + const errors = this.convertErrors(result.error?.issues ?? []); + if (errors) { + if (options?.silent) { + return errors; + } + throw new Web3ValidatorError(errors); + } + } + return undefined; + } + // eslint-disable-next-line class-methods-use-this + private convertErrors(errors: ZodIssue[] | undefined): Web3ValidationErrorObject[] | undefined { + if (errors && Array.isArray(errors) && errors.length > 0) { + return errors.map((error: ZodIssue) => { + let message; + let keyword; + let params; + let schemaPath; + + schemaPath = error.path.join('/'); + + const field = String(error.path[error.path.length - 1]); + const instancePath = error.path.join('/'); + if (error.code === ZodIssueCode.too_big) { + keyword = 'maxItems'; + schemaPath = `${instancePath}/maxItems`; + params = { limit: error.maximum }; + message = `must NOT have more than ${error.maximum} items`; + } else if (error.code === ZodIssueCode.too_small) { + keyword = 'minItems'; + schemaPath = `${instancePath}/minItems`; + params = { limit: error.minimum }; + message = `must NOT have fewer than ${error.minimum} items`; + } else if (error.code === ZodIssueCode.custom) { + const { value, format } = (error.params ?? {}) as { + value: unknown; + format: string; + }; + + if (typeof value === 'undefined') { + message = `value at "/${schemaPath}" is required`; + } else { + message = `value "${ + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + typeof value === 'object' ? JSON.stringify(value) : value + }" at "/${schemaPath}" must pass "${format}" validation`; + } + + params = { value }; + } + + return { + keyword: keyword ?? field, + instancePath: instancePath ? `/${instancePath}` : '', + schemaPath: schemaPath ? `#${schemaPath}` : '#', + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + params: params ?? { value: error.message }, + message: message ?? error.message, + } as Web3ValidationErrorObject; + }); + } + return undefined; + } +} diff --git a/packages/web3-validator/src/web3_validator.ts b/packages/web3-validator/src/web3_validator.ts new file mode 100644 index 00000000000..a165a36bef1 --- /dev/null +++ b/packages/web3-validator/src/web3_validator.ts @@ -0,0 +1,68 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3ValidationErrorObject } from 'web3-types'; + +import { Validator } from './validator.js'; +import { ethAbiToJsonSchema } from './utils.js'; +import { Json, ValidationSchemaInput, Web3ValidationOptions } from './types.js'; +import { Web3ValidatorError } from './errors.js'; + +export class Web3Validator { + private readonly _validator: Validator; + public constructor() { + this._validator = Validator.factory(); + } + public validateJSONSchema( + schema: object, + data: object, + options?: Web3ValidationOptions, + ): Web3ValidationErrorObject[] | undefined { + return this._validator.validate(schema, data as Json, options); + } + public validate( + schema: ValidationSchemaInput, + data: ReadonlyArray, + options: Web3ValidationOptions = { silent: false }, + ): Web3ValidationErrorObject[] | undefined { + const jsonSchema = ethAbiToJsonSchema(schema); + if ( + Array.isArray(jsonSchema.items) && + jsonSchema.items?.length === 0 && + data.length === 0 + ) { + return undefined; + } + + if ( + Array.isArray(jsonSchema.items) && + jsonSchema.items?.length === 0 && + data.length !== 0 + ) { + throw new Web3ValidatorError([ + { + instancePath: '/0', + schemaPath: '/', + keyword: 'required', + message: 'empty schema against data can not be validated', + params: data, + }, + ]); + } + + return this._validator.validate(jsonSchema, data as Json, options); + } +} diff --git a/packages/web3-validator/test/.eslintrc.js b/packages/web3-validator/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-validator/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-validator/test/config/jest.config.js b/packages/web3-validator/test/config/jest.config.js new file mode 100644 index 00000000000..c8c21e06e6a --- /dev/null +++ b/packages/web3-validator/test/config/jest.config.js @@ -0,0 +1,43 @@ +module.exports = { + globals: { + 'ts-jest': { + tsconfig: './test/tsconfig.json', + }, + }, + rootDir: '../..', + testMatch: ['/test/**/?(*.)+(spec|test).+(ts|tsx|js)'], + setupFilesAfterEnv: ['/test/config/setup.js'], + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + verbose: false, + collectCoverage: false, + coverageReporters: ['json'], + coverageDirectory: '.coverage', + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, +}; diff --git a/packages/web3-validator/test/config/setup.js b/packages/web3-validator/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-validator/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-validator/test/fixtures/abi_to_json_schema.ts b/packages/web3-validator/test/fixtures/abi_to_json_schema.ts new file mode 100644 index 00000000000..1a2cb7bd36f --- /dev/null +++ b/packages/web3-validator/test/fixtures/abi_to_json_schema.ts @@ -0,0 +1,1694 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { FullValidationSchema, JsonSchema, ShortValidationSchema } from '../../src/types'; + +export type AbiToJsonSchemaCase = { + title: string; + abi: { + fullSchema: FullValidationSchema; + shortSchema: ShortValidationSchema; + data: Array; + }; + json: { + fullSchema: JsonSchema; + shortSchema: JsonSchema; + data: Record | Array; + }; +}; +const abiToJsonSchemaCases: AbiToJsonSchemaCase[] = [ + { + title: 'single param uint', + abi: { + fullSchema: [{ name: 'a', type: 'uint' }], + shortSchema: ['uint'], + data: [12], + }, + json: { + fullSchema: { + type: 'array', + items: [{ $id: 'a', format: 'uint', required: true }], + minItems: 1, + maxItems: 1, + }, + shortSchema: { + type: 'array', + items: [{ $id: '/0/0', format: 'uint', required: true }], + minItems: 1, + maxItems: 1, + }, + data: [12], + }, + }, + { + title: 'single param address', + abi: { + fullSchema: [{ name: 'a', type: 'address' }], + shortSchema: ['address'], + data: ['0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b'], + }, + json: { + fullSchema: { + type: 'array', + items: [{ $id: 'a', format: 'address', required: true }], + minItems: 1, + maxItems: 1, + }, + shortSchema: { + type: 'array', + items: [{ $id: '/0/0', format: 'address', required: true }], + minItems: 1, + maxItems: 1, + }, + data: ['0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b'], + }, + }, + { + title: 'single param bool', + abi: { + fullSchema: [{ name: 'a', type: 'bool' }], + shortSchema: ['bool'], + data: [true], + }, + json: { + fullSchema: { + type: 'array', + items: [{ $id: 'a', format: 'bool', required: true }], + minItems: 1, + maxItems: 1, + }, + shortSchema: { + type: 'array', + items: [{ $id: '/0/0', format: 'bool', required: true }], + minItems: 1, + maxItems: 1, + }, + data: [true], + }, + }, + { + title: 'single param bytes', + abi: { + fullSchema: [{ name: 'a', type: 'bytes' }], + shortSchema: ['bytes'], + data: ['0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b'], + }, + json: { + fullSchema: { + type: 'array', + items: [{ $id: 'a', format: 'bytes', required: true }], + minItems: 1, + maxItems: 1, + }, + shortSchema: { + type: 'array', + items: [{ $id: '/0/0', format: 'bytes', required: true }], + minItems: 1, + maxItems: 1, + }, + data: ['0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b'], + }, + }, + + { + title: 'multiple params', + abi: { + fullSchema: [ + { name: 'a', type: 'uint' }, + { name: 'b', type: 'int' }, + ], + shortSchema: ['uint', 'int'], + data: [12, -1], + }, + json: { + fullSchema: { + type: 'array', + items: [ + { $id: 'a', format: 'uint', required: true }, + { $id: 'b', format: 'int', required: true }, + ], + minItems: 2, + maxItems: 2, + }, + shortSchema: { + type: 'array', + items: [ + { $id: '/0/0', format: 'uint', required: true }, + { $id: '/0/1', format: 'int', required: true }, + ], + minItems: 2, + maxItems: 2, + }, + data: [12, -1], + }, + }, + + { + title: 'single param array', + abi: { + fullSchema: [{ name: 'a', type: 'uint[]' }], + shortSchema: ['uint[]'], + data: [[12, 456]], + }, + json: { + fullSchema: { + type: 'array', + items: [ + { + $id: 'a', + type: 'array', + items: { format: 'uint', required: true }, + maxItems: undefined, + minItems: undefined, + }, + ], + minItems: 1, + maxItems: 1, + }, + shortSchema: { + type: 'array', + items: [ + { + $id: '/0/0', + type: 'array', + items: { format: 'uint', required: true }, + }, + ], + minItems: 1, + maxItems: 1, + }, + data: [[12, 456]], + }, + }, + + { + title: 'single param fixed array', + abi: { + fullSchema: [{ name: 'a', type: 'uint[3]' }], + shortSchema: ['uint[3]'], + data: [[12, 456, 789]], + }, + json: { + fullSchema: { + type: 'array', + items: [ + { + $id: 'a', + type: 'array', + items: { format: 'uint', required: true }, + maxItems: 3, + minItems: 3, + }, + ], + minItems: 1, + maxItems: 1, + }, + shortSchema: { + type: 'array', + items: [ + { + $id: '/0/0', + type: 'array', + items: { format: 'uint', required: true }, + maxItems: 3, + minItems: 3, + }, + ], + minItems: 1, + maxItems: 1, + }, + data: [[12, 456, 789]], + }, + }, + + { + title: 'multiple array params', + abi: { + fullSchema: [ + { name: 'a', type: 'uint[3]' }, + { name: 'b', type: 'int[]' }, + { name: 'c', type: 'string[5]' }, + ], + shortSchema: ['uint[3]', 'int[]', 'string[5]'], + data: [ + [12, 456, 789], + [-1, -2, -3, -4, -5], + ['a', 'b', 'c', 'd', 'e'], + ], + }, + json: { + fullSchema: { + type: 'array', + items: [ + { + $id: 'a', + type: 'array', + items: { format: 'uint', required: true }, + maxItems: 3, + minItems: 3, + }, + { + $id: 'b', + type: 'array', + items: { format: 'int', required: true }, + maxItems: undefined, + minItems: undefined, + }, + { + $id: 'c', + type: 'array', + items: { format: 'string', required: true }, + maxItems: 5, + minItems: 5, + }, + ], + minItems: 3, + maxItems: 3, + }, + shortSchema: { + type: 'array', + items: [ + { + $id: '/0/0', + type: 'array', + items: { format: 'uint', required: true }, + maxItems: 3, + minItems: 3, + }, + { + $id: '/0/1', + type: 'array', + items: { format: 'int', required: true }, + maxItems: undefined, + minItems: undefined, + }, + { + $id: '/0/2', + type: 'array', + items: { format: 'string', required: true }, + maxItems: 5, + minItems: 5, + }, + ], + minItems: 3, + maxItems: 3, + }, + data: [ + [12, 456, 789], + [-1, -2, -3, -4, -5], + ['a', 'b', 'c', 'd', 'e'], + ], + }, + }, + + { + title: 'single tuple', + abi: { + fullSchema: [{ name: 'a', type: 'tuple', components: [{ name: 'b', type: 'uint' }] }], + shortSchema: [['uint']], + data: [[12]], + }, + json: { + fullSchema: { + type: 'array', + items: [ + { + type: 'array', + $id: 'a', + items: [{ $id: 'b', format: 'uint', required: true }], + minItems: 1, + maxItems: 1, + }, + ], + minItems: 1, + maxItems: 1, + }, + shortSchema: { + type: 'array', + items: [ + { + type: 'array', + $id: '/0/0', + items: [{ $id: '/0/0/0', format: 'uint', required: true }], + minItems: 1, + maxItems: 1, + }, + ], + minItems: 1, + maxItems: 1, + }, + data: [{ b: 12 }], + }, + }, + + { + title: 'multiple tuple elements', + abi: { + fullSchema: [ + { + name: 'a', + type: 'tuple', + components: [ + { name: 'b', type: 'uint' }, + { name: 'c', type: 'string' }, + ], + }, + ], + shortSchema: [['uint', 'string']], + data: [[12, 'a']], + }, + json: { + fullSchema: { + type: 'array', + items: [ + { + type: 'array', + $id: 'a', + items: [ + { $id: 'b', format: 'uint', required: true }, + { $id: 'c', format: 'string', required: true }, + ], + minItems: 2, + maxItems: 2, + }, + ], + minItems: 1, + maxItems: 1, + }, + shortSchema: { + type: 'array', + items: [ + { + type: 'array', + $id: '/0/0', + items: [ + { $id: '/0/0/0', format: 'uint', required: true }, + { $id: '/0/0/1', format: 'string', required: true }, + ], + minItems: 2, + maxItems: 2, + }, + ], + minItems: 1, + maxItems: 1, + }, + data: [{ b: 12, c: 'a' }], + }, + }, + + { + title: 'tuple array', + abi: { + fullSchema: [ + { + name: 'a', + type: 'tuple[]', + components: [ + { name: 'a1', type: 'uint' }, + { name: 'a2', type: 'string' }, + ], + }, + ], + shortSchema: [['tuple[]', ['uint', 'string']]], + data: [ + [ + [12, 'a'], + [456, 'b'], + ], + ], + }, + json: { + fullSchema: { + type: 'array', + items: [ + { + $id: 'a', + type: 'array', + items: { + type: 'array', + items: [ + { $id: 'a1', format: 'uint', required: true }, + { $id: 'a2', format: 'string', required: true }, + ], + maxItems: 2, + minItems: 2, + }, + maxItems: undefined, + minItems: undefined, + }, + ], + minItems: 1, + maxItems: 1, + }, + shortSchema: { + type: 'array', + items: [ + { + $id: '/0/0', + type: 'array', + items: { + type: 'array', + items: [ + { $id: '/0/0/0', format: 'uint', required: true }, + { $id: '/0/0/1', format: 'string', required: true }, + ], + maxItems: 2, + minItems: 2, + }, + maxItems: undefined, + minItems: undefined, + }, + ], + minItems: 1, + maxItems: 1, + }, + data: [ + [ + { a1: 12, a2: 'a' }, + { a1: 456, a2: 'b' }, + ], + ], + }, + }, + + { + title: 'fixed tuple array', + abi: { + fullSchema: [ + { + name: 'a', + type: 'tuple[3]', + components: [ + { name: 'a1', type: 'uint' }, + { name: 'a2', type: 'string' }, + ], + }, + ], + shortSchema: [['tuple[3]', ['uint', 'string']]], + data: [ + [ + [12, 'a'], + [456, 'b'], + [789, 'c'], + ], + ], + }, + json: { + fullSchema: { + type: 'array', + items: [ + { + $id: 'a', + type: 'array', + items: { + type: 'array', + items: [ + { $id: 'a1', format: 'uint', required: true }, + { $id: 'a2', format: 'string', required: true }, + ], + maxItems: 2, + minItems: 2, + }, + maxItems: 3, + minItems: 3, + }, + ], + maxItems: 1, + minItems: 1, + }, + shortSchema: { + type: 'array', + items: [ + { + $id: '/0/0', + type: 'array', + items: { + type: 'array', + items: [ + { $id: '/0/0/0', format: 'uint', required: true }, + { $id: '/0/0/1', format: 'string', required: true }, + ], + maxItems: 2, + minItems: 2, + }, + maxItems: 3, + minItems: 3, + }, + ], + maxItems: 1, + minItems: 1, + }, + data: [ + [ + { a1: 12, a2: 'a' }, + { a1: 456, a2: 'b' }, + { a1: 789, a2: 'c' }, + ], + ], + }, + }, + + { + title: 'multiple tuple arrays', + abi: { + fullSchema: [ + { + name: 'a', + type: 'tuple[3]', + components: [ + { name: 'a1', type: 'uint' }, + { name: 'a2', type: 'string' }, + ], + }, + + { + name: 'b', + type: 'tuple[]', + components: [ + { name: 'b1', type: 'uint' }, + { name: 'b2', type: 'string' }, + ], + }, + ], + shortSchema: [ + ['tuple[3]', ['uint', 'string']], + ['tuple[]', ['uint', 'string']], + ], + data: [ + [ + [12, 'a1'], + [456, 'a2'], + [789, 'a3'], + ], + [ + [12, 'b1'], + [456, 'b2'], + [789, 'b3'], + [489, 'b4'], + ], + ], + }, + json: { + fullSchema: { + type: 'array', + items: [ + { + type: 'array', + $id: 'a', + items: { + type: 'array', + items: [ + { $id: 'a1', format: 'uint', required: true }, + { $id: 'a2', format: 'string', required: true }, + ], + maxItems: 2, + minItems: 2, + }, + maxItems: 3, + minItems: 3, + }, + + { + type: 'array', + $id: 'b', + items: { + type: 'array', + items: [ + { $id: 'b1', format: 'uint', required: true }, + { $id: 'b2', format: 'string', required: true }, + ], + maxItems: 2, + minItems: 2, + }, + maxItems: undefined, + minItems: undefined, + }, + ], + maxItems: 2, + minItems: 2, + }, + shortSchema: { + type: 'array', + items: [ + { + type: 'array', + $id: '/0/0', + items: { + type: 'array', + items: [ + { $id: '/0/0/0', format: 'uint', required: true }, + { $id: '/0/0/1', format: 'string', required: true }, + ], + maxItems: 2, + minItems: 2, + }, + maxItems: 3, + minItems: 3, + }, + { + type: 'array', + $id: '/0/1', + items: { + type: 'array', + items: [ + { $id: '/0/1/0', format: 'uint', required: true }, + { $id: '/0/1/1', format: 'string', required: true }, + ], + maxItems: 2, + minItems: 2, + }, + }, + ], + maxItems: 2, + minItems: 2, + }, + data: [ + [ + { a1: 12, a2: 'a1' }, + { a1: 456, a2: 'a2' }, + { a1: 789, a2: 'a3' }, + ], + [ + { b1: 12, b2: 'b1' }, + { b1: 456, b2: 'b2' }, + { b1: 789, b2: 'b3' }, + { b1: 489, b2: 'b4' }, + ], + ], + }, + }, + + { + title: 'nested array example 1', + abi: { + fullSchema: [ + { + name: 'a', + type: 'uint[2][3]', + }, + ], + shortSchema: ['uint[2][3]'], + data: [ + [ + [1, 1], + [2, 2], + [3, 3], + ], + ], + }, + json: { + fullSchema: { + type: 'array', + items: { + type: 'array', + items: [ + { + type: 'array', + $id: 'a', + items: { + format: 'uint', + required: true, + }, + minItems: 2, + maxItems: 2, + }, + ], + maxItems: 3, + minItems: 3, + }, + maxItems: 1, + minItems: 1, + }, + shortSchema: { + type: 'array', + items: { + type: 'array', + items: [ + { + type: 'array', + $id: '/0/0', + items: { + format: 'uint', + required: true, + }, + minItems: 2, + maxItems: 2, + }, + ], + maxItems: 3, + minItems: 3, + }, + maxItems: 1, + minItems: 1, + }, + data: [ + [ + [1, 1], + [2, 2], + [3, 3], + ], + ], + }, + }, + + { + title: 'nested array example 2', + abi: { + fullSchema: [ + { + name: 'a', + type: 'uint[][3]', + }, + ], + shortSchema: ['uint[][3]'], + data: [ + [ + [1, 1], + [1, 2, 3], + [1, 2, 3, 4, 5, 6], + ], + ], + }, + json: { + fullSchema: { + type: 'array', + items: { + type: 'array', + items: [ + { + type: 'array', + $id: 'a', + items: { + format: 'uint', + required: true, + }, + }, + ], + maxItems: 3, + minItems: 3, + }, + maxItems: 1, + minItems: 1, + }, + shortSchema: { + type: 'array', + items: { + type: 'array', + items: [ + { + type: 'array', + $id: '/0/0', + items: { + format: 'uint', + required: true, + }, + }, + ], + maxItems: 3, + minItems: 3, + }, + maxItems: 1, + minItems: 1, + }, + data: [ + [ + [1, 1], + [1, 2, 3], + [1, 2, 3, 4, 5, 6], + ], + ], + }, + }, + + { + title: 'nested tuple example 1', + abi: { + fullSchema: [ + { + name: 'a', + type: 'tuple[][3]', + components: [ + { + name: 'level', + type: 'uint', + }, + { + name: 'message', + type: 'string', + }, + ], + }, + ], + shortSchema: [['tuple[][3]', ['uint', 'string']]], + data: [ + [ + [ + [1, '1'], + [2, '2'], + [3, '3'], + ], + [ + [1, '1'], + [2, '2'], + [3, '3'], + [4, '4'], + [5, '5'], + [6, '6'], + ], + [ + [1, '1'], + [2, '2'], + ], + ], + ], + }, + json: { + fullSchema: { + type: 'array', + items: { + type: 'array', + items: [ + { + $id: 'a', + type: 'array', + items: { + type: 'array', + items: [ + { + $id: 'level', + format: 'uint', + required: true, + }, + { + $id: 'message', + format: 'string', + required: true, + }, + ], + maxItems: 2, + minItems: 2, + }, + }, + ], + maxItems: 3, + minItems: 3, + }, + maxItems: 1, + minItems: 1, + }, + shortSchema: { + type: 'array', + items: { + type: 'array', + items: [ + { + $id: '/0/0', + type: 'array', + items: { + type: 'array', + items: [ + { + $id: '/0/0/0', + format: 'uint', + required: true, + }, + { + $id: '/0/0/1', + format: 'string', + required: true, + }, + ], + maxItems: 2, + minItems: 2, + }, + }, + ], + maxItems: 3, + minItems: 3, + }, + maxItems: 1, + minItems: 1, + }, + data: [ + [ + [ + { level: 1, message: '1' }, + { level: 2, message: '2' }, + { level: 3, message: '3' }, + ], + [ + { level: 1, message: '1' }, + { level: 2, message: '2' }, + { level: 3, message: '3' }, + { level: 4, message: '4' }, + { level: 5, message: '5' }, + { level: 6, message: '6' }, + ], + [ + { level: 1, message: '1' }, + { level: 2, message: '2' }, + ], + ], + ], + }, + }, + + { + title: 'nested tuple example 2', + abi: { + fullSchema: [ + { + name: 'a', + type: 'tuple[3][5]', + components: [ + { + name: 'level', + type: 'uint', + }, + { + name: 'message', + type: 'string', + }, + ], + }, + ], + shortSchema: [['tuple[3][5]', ['uint', 'string']]], + data: [ + [ + [ + [1, 'a'], + [2, 'b'], + [3, 'c'], + ], + [ + [1, 'a'], + [2, 'b'], + [3, 'c'], + ], + [ + [1, 'a'], + [2, 'b'], + [3, 'c'], + ], + [ + [1, 'a'], + [2, 'b'], + [3, 'c'], + ], + [ + [1, 'a'], + [2, 'b'], + [3, 'c'], + ], + ], + ], + }, + json: { + fullSchema: { + type: 'array', + items: { + type: 'array', + items: [ + { + $id: 'a', + type: 'array', + items: { + type: 'array', + items: [ + { + $id: 'level', + format: 'uint', + required: true, + }, + { + $id: 'message', + format: 'string', + required: true, + }, + ], + maxItems: 2, + minItems: 2, + }, + maxItems: 3, + minItems: 3, + }, + ], + maxItems: 5, + minItems: 5, + }, + maxItems: 1, + minItems: 1, + }, + shortSchema: { + type: 'array', + items: { + type: 'array', + items: [ + { + $id: '/0/0', + type: 'array', + items: { + type: 'array', + items: [ + { + $id: '/0/0/0', + format: 'uint', + required: true, + }, + { + $id: '/0/0/1', + format: 'string', + required: true, + }, + ], + maxItems: 2, + minItems: 2, + }, + maxItems: 3, + minItems: 3, + }, + ], + maxItems: 5, + minItems: 5, + }, + maxItems: 1, + minItems: 1, + }, + data: [ + [ + [ + { level: 1, message: 'a' }, + { level: 2, message: 'b' }, + { level: 3, message: 'c' }, + ], + [ + { level: 1, message: 'a' }, + { level: 2, message: 'b' }, + { level: 3, message: 'c' }, + ], + [ + { level: 1, message: 'a' }, + { level: 2, message: 'b' }, + { level: 3, message: 'c' }, + ], + [ + { level: 1, message: 'a' }, + { level: 2, message: 'b' }, + { level: 3, message: 'c' }, + ], + [ + { level: 1, message: 'a' }, + { level: 2, message: 'b' }, + { level: 3, message: 'c' }, + ], + ], + ], + }, + }, + + { + title: 'a user object example from truffle', + abi: { + fullSchema: [ + { + components: [ + { name: 'name', type: 'string' }, + { name: 'addr', type: 'address' }, + { + components: [ + { name: 'email', type: 'string' }, + { name: 'phone', type: 'string' }, + ], + name: 'contact', + type: 'tuple', + }, + ], + name: 'user', + type: 'tuple', + }, + ], + shortSchema: [['tuple', ['string', 'address', ['tuple', ['string', 'string']]]]], + data: [ + [ + 'Rick Sanchez', + '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + ['rick.c137@citadel.cfc', '+1 (555) 314-1593'], + ], + ], + }, + json: { + fullSchema: { + type: 'array', + items: [ + { + type: 'array', + $id: 'user', + items: [ + { $id: 'name', format: 'string', required: true }, + { $id: 'addr', format: 'address', required: true }, + { + type: 'array', + $id: 'contact', + items: [ + { $id: 'email', format: 'string', required: true }, + { $id: 'phone', format: 'string', required: true }, + ], + maxItems: 2, + minItems: 2, + }, + ], + maxItems: 3, + minItems: 3, + }, + ], + maxItems: 1, + minItems: 1, + }, + shortSchema: { + type: 'array', + items: [ + { + type: 'array', + $id: '/0/0', + items: [ + { $id: '/0/0/0', format: 'string', required: true }, + { $id: '/0/0/1', format: 'address', required: true }, + { + type: 'array', + $id: '/0/0/2', + items: [ + { $id: '/0/0/2/0', format: 'string', required: true }, + { $id: '/0/0/2/1', format: 'string', required: true }, + ], + maxItems: 2, + minItems: 2, + }, + ], + maxItems: 3, + minItems: 3, + }, + ], + maxItems: 1, + minItems: 1, + }, + data: [ + { + name: 'Rick Sanchez', + addr: '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + contact: { + email: 'rick.c137@citadel.cfc', + phone: '+1 (555) 314-1593', + }, + }, + ], + }, + }, + + { + title: 'a user object example from truffle', + abi: { + fullSchema: [ + { + components: [ + { name: 'name', type: 'string' }, + { name: 'addr', type: 'address' }, + { + components: [ + { name: 'email', type: 'string' }, + { name: 'phone', type: 'string' }, + ], + name: 'contact', + type: 'tuple', + }, + ], + name: 'user', + type: 'tuple', + }, + ], + shortSchema: [['tuple', ['string', 'address', ['tuple', ['string', 'string']]]]], + data: [ + [ + 'Rick Sanchez', + '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + ['rick.c137@citadel.cfc', '+1 (555) 314-1593'], + ], + ], + }, + json: { + fullSchema: { + type: 'array', + items: [ + { + type: 'array', + $id: 'user', + items: [ + { $id: 'name', format: 'string', required: true }, + { $id: 'addr', format: 'address', required: true }, + { + type: 'array', + $id: 'contact', + items: [ + { $id: 'email', format: 'string', required: true }, + { $id: 'phone', format: 'string', required: true }, + ], + maxItems: 2, + minItems: 2, + }, + ], + maxItems: 3, + minItems: 3, + }, + ], + maxItems: 1, + minItems: 1, + }, + shortSchema: { + type: 'array', + items: [ + { + type: 'array', + $id: '/0/0', + items: [ + { $id: '/0/0/0', format: 'string', required: true }, + { $id: '/0/0/1', format: 'address', required: true }, + { + type: 'array', + $id: '/0/0/2', + items: [ + { $id: '/0/0/2/0', format: 'string', required: true }, + { $id: '/0/0/2/1', format: 'string', required: true }, + ], + maxItems: 2, + minItems: 2, + }, + ], + maxItems: 3, + minItems: 3, + }, + ], + maxItems: 1, + minItems: 1, + }, + data: [ + { + name: 'Rick Sanchez', + addr: '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + contact: { + email: 'rick.c137@citadel.cfc', + phone: '+1 (555) 314-1593', + }, + }, + ], + }, + }, + + { + title: 'nested tuple object in nested array', + abi: { + fullSchema: [ + { + components: [ + { + components: [ + { + name: 'x', + type: 'int256', + }, + { + name: 'y', + type: 'int256', + }, + ], + name: 'start', + type: 'tuple', + }, + { + components: [ + { + name: 'x', + type: 'int256', + }, + { + name: 'y', + type: 'int256', + }, + ], + name: 'end', + type: 'tuple', + }, + ], + name: 'rects', + type: 'tuple[][3]', + }, + { + name: 'numberValue', + type: 'uint256', + }, + { + name: 'boolValue', + type: 'bool', + }, + ], + shortSchema: [ + [ + 'tuple[][3]', + [ + ['int256', 'int256'], + ['int256', 'int256'], + ], + ], + 'uint256', + 'bool', + ], + data: [ + [ + [ + [ + [0, 0], + [1, 1], + ], + [ + [2, 2], + [3, 3], + ], + [ + [4, 4], + [5, 5], + ], + ], + [ + [ + [0, 0], + [-1, -1], + ], + [ + [-2, -2], + [-3, -3], + ], + [ + [-4, -4], + [-5, -5], + ], + ], + ], + -123, + true, + ], + }, + json: { + fullSchema: { + type: 'array', + items: { + type: 'array', + items: [ + { + $id: 'rects', + type: 'array', + items: { + type: 'array', + items: [ + { + type: 'array', + items: [ + { $id: 'x', format: 'int256', required: true }, + { $id: 'y', format: 'int256', required: true }, + ], + maxItems: 2, + minItems: 2, + $id: 'start', + }, + { + type: 'array', + items: [ + { $id: 'x', format: 'int256', required: true }, + { $id: 'y', format: 'int256', required: true }, + ], + maxItems: 2, + minItems: 2, + $id: 'end', + }, + ], + maxItems: 2, + minItems: 2, + }, + }, + { $id: 'numberValue', format: 'uint256', required: true }, + { $id: 'boolValue', format: 'bool', required: true }, + ], + maxItems: 3, + minItems: 3, + }, + maxItems: 3, + minItems: 3, + }, + shortSchema: { + type: 'array', + items: { + type: 'array', + items: [ + { + $id: '/0/0', + type: 'array', + items: { + type: 'array', + items: [ + { + type: 'array', + items: [ + { $id: '/0/0/0/0', format: 'int256', required: true }, + { $id: '/0/0/0/1', format: 'int256', required: true }, + ], + maxItems: 2, + minItems: 2, + $id: '/0/0/0', + }, + { + type: 'array', + items: [ + { $id: '/0/0/1/0', format: 'int256', required: true }, + { $id: '/0/0/1/1', format: 'int256', required: true }, + ], + maxItems: 2, + minItems: 2, + $id: '/0/0/1', + }, + ], + maxItems: 2, + minItems: 2, + }, + }, + { $id: '/0/1', format: 'uint256', required: true }, + { $id: '/0/2', format: 'bool', required: true }, + ], + maxItems: 3, + minItems: 3, + }, + maxItems: 3, + minItems: 3, + }, + data: [ + [ + [ + [ + { x: 0, y: 0 }, + { x: 1, y: 1 }, + ], + [ + { x: 2, y: 2 }, + { x: 3, y: 3 }, + ], + [ + { x: 4, y: 4 }, + { x: 5, y: 5 }, + ], + ], + [ + [ + { x: 0, y: 0 }, + { x: -1, y: -1 }, + ], + [ + { x: -2, y: -2 }, + { x: -3, y: -3 }, + ], + [ + { x: -4, y: -4 }, + { x: -5, y: -5 }, + ], + ], + ], + -123, + true, + ], + }, + }, + { + title: 'multi-dimensional array', + abi: { + fullSchema: [ + { + name: 'x1', + type: 'uint256[][]', + }, + { + name: 'x2', + type: 'uint256[][]', + }, + { + name: 'x3', + type: 'uint256', + }, + ], + shortSchema: ['uint256[][]', 'uint256[][]', 'uint256'], + data: [ + [ + [1, 1], + [2, 2], + ], + [ + [1, 1, 1], + [2, 2, 2], + [3, 3, 3], + ], + 42, + ], + }, + json: { + fullSchema: { + type: 'array', + items: [ + { + type: 'array', + items: [ + { + type: 'array', + $id: 'x1', + items: { + format: 'uint', + required: true, + }, + }, + ], + }, + { + type: 'array', + items: [ + { + type: 'array', + $id: 'x2', + items: { + format: 'uint', + required: true, + }, + }, + ], + }, + { + $id: 'x3', + format: 'uint256', + required: true, + }, + ], + maxItems: 3, + minItems: 3, + }, + shortSchema: { + type: 'array', + items: [ + { + type: 'array', + items: [ + { + type: 'array', + $id: '/0/0', + items: { + format: 'uint', + required: true, + }, + }, + ], + }, + { + type: 'array', + items: [ + { + type: 'array', + $id: '/0/1', + items: { + format: 'uint', + required: true, + }, + }, + ], + }, + { + $id: '/0/2', + format: 'uint256', + required: true, + }, + ], + maxItems: 3, + minItems: 3, + }, + data: { + x1: [ + [1, 1], + [2, 2], + ], + x2: [ + [1, 1, 1], + [2, 2, 2], + [3, 3, 3], + ], + x3: 42, + }, + }, + }, +]; + +function generateSingleParamNumericCase(type: string, bitSize: number) { + return { + title: `single param ${type}${bitSize}`, + abi: { + fullSchema: [{ name: 'a', type: `${type}${bitSize}` }], + shortSchema: [`${type}${bitSize}`], + data: [12], + }, + json: { + fullSchema: { + type: 'array', + items: [{ $id: 'a', format: `${type}${bitSize}`, required: true }], + minItems: 1, + maxItems: 1, + }, + shortSchema: { + type: 'array', + items: [{ $id: '/0/0', format: `${type}${bitSize}`, required: true }], + minItems: 1, + maxItems: 1, + }, + data: [12], + }, + }; +} + +for (let i = 256; i >= 8; i -= 8) { + abiToJsonSchemaCases.unshift(generateSingleParamNumericCase('int', i)); + abiToJsonSchemaCases.unshift(generateSingleParamNumericCase('uint', i)); +} + +export { abiToJsonSchemaCases }; diff --git a/packages/web3-validator/test/fixtures/accounts.json b/packages/web3-validator/test/fixtures/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3-validator/test/fixtures/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3-validator/test/fixtures/errors.ts b/packages/web3-validator/test/fixtures/errors.ts new file mode 100644 index 00000000000..9b92474d582 --- /dev/null +++ b/packages/web3-validator/test/fixtures/errors.ts @@ -0,0 +1,50 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export const fullErrors: any[] = [ + { + instancePath: '', + schemaPath: '#/minItems', + keyword: 'minItems', + params: { limit: 1 }, + message: 'must NOT have fewer than 1 items', + }, + { + instancePath: '', + schemaPath: '#/minItems', + keyword: 'minItems', + params: { limit: 2 }, + message: 'must NOT have fewer than 2 items', + }, + { + instancePath: '', + schemaPath: '#/maxItems', + keyword: 'maxItems', + params: { limit: 1 }, + message: 'must NOT have more than 1 items', + }, +]; + +export const errorsWithInstanceNoParamsNoMessage: any[] = [ + { + keyword: 'eth', + instancePath: '/0', + schemaPath: '#/items/0/eth', + }, +]; + +export const unspecifiedErrors: any[] = [{}]; diff --git a/packages/web3-validator/test/fixtures/validation.ts b/packages/web3-validator/test/fixtures/validation.ts new file mode 100644 index 00000000000..6dc6b4c7388 --- /dev/null +++ b/packages/web3-validator/test/fixtures/validation.ts @@ -0,0 +1,768 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Filter } from 'web3-types'; +import { hexToBytes } from 'ethereum-cryptography/utils'; +import { ValidInputTypes } from '../../src/types'; + +export const validUintData: any[] = [ + '0x48', + '0x123c', + '0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', + '1', + 1, + BigInt(12), +]; + +// Using "null" value intentionally for validation +// eslint-disable-next-line no-null/no-null +export const invalidUintData: any[] = ['-0x48', '-12', -1, true, undefined, null, '']; + +export const validUintDataWithSize: [any, number][] = [ + ['0x48', 8], + ['0x123c', 16], + ['0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', 256], + ['1', 16], + [1, 8], + [0, 8], + ['0x0', 8], + ['0x1', 8], + [BigInt(12), 64], +]; + +export const invalidUintDataWithSize: [any, number][] = [ + ['', 8], + [-1, 8], + ['-0x1233', 8], + ['0x4812', 8], + ['0x123ccdef', 16], + ['0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', 8], +]; + +export const validUintDataWithAbiType: [any, string][] = [ + ['0x48', 'uint8'], + ['0x123c', 'uint16'], + ['0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', 'uint256'], + ['1', 'uint16'], + [1, 'uint8'], + [BigInt(12), 'uint64'], +]; + +export const invalidUintDataWithAbiType: [any, string][] = [ + ['0x4812', 'uint8'], + ['0x123ccdef', 'uint16'], + ['0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', 'uint8'], +]; + +export const validIntData: any[] = [ + '-0x48', + '-0x123c', + '-0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', + '-1', + -1, + BigInt(-12), +]; + +// Using "null" value intentionally for validation +// eslint-disable-next-line no-null/no-null +export const invalidIntData: any[] = [true, undefined, null]; + +export const validIntDataWithSize: [any, number][] = [ + ['-0x48', 8], + ['-0x123c', 16], + ['-0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', 256], + ['-1', 16], + [-1, 8], + [BigInt(-12), 64], +]; + +export const invalidIntDataWithSize: [any, number][] = [ + ['-0x4812', 8], + ['-0x123ccdef', 16], + ['-0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', 8], + [Number.MAX_SAFE_INTEGER + 1, 256], +]; + +export const validIntDataWithAbiType: [any, string][] = [ + ['0x48', 'int8'], + ['0x123c', 'int16'], + ['0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', 'int256'], + ['-1', 'int16'], + [-1, 'int8'], + [BigInt(-12), 'int64'], +]; + +export const invalidIntDataWithAbiType: [any, string][] = [ + ['-0x4812', 'uint8'], + ['-0x123ccdef', 'uint16'], + ['-0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', 'uint8'], +]; + +export const validHexStrictDataWithNumber: [string, number | bigint][] = [ + ['0x48', 72], + ['0x123c', 4668], + [ + '0xdec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', + BigInt('6297078121011128569053558207054331251192909352593326480842737114300118477835'), + ], + [ + '0xd115bffabbdd893a6f7cea402e7338643ced44a6', + BigInt('1193664110518272216229793131906554422260021413030'), + ], + [ + '0x2C941171bD2A7aEda7c2767c438DfF36EAaFdaFc', + BigInt('254497623817844434235817792799421766503337286396'), + ], + ['0x1', 1], + ['0xcd', 205], + ['-0xcd', -205], +]; +export const validHexStrictDataWithUint8Array: [string, Uint8Array][] = [ + ['0x48', new Uint8Array([72])], + ['0x123c', new Uint8Array([18, 60])], + [ + '0xdec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0', + new Uint8Array([ + 0xde, 0xc0, 0x51, 0x8f, 0xa6, 0x72, 0xa7, 0x00, 0x27, 0xb0, 0x4c, 0x28, 0x65, 0x82, + 0xe5, 0x43, 0xab, 0x17, 0x31, 0x9f, 0xbd, 0xd3, 0x84, 0xfa, 0x7b, 0xc8, 0xf3, 0xd5, + 0xa5, 0x42, 0xc0, + ]), + ], + [ + '0xd115bffabbdd893a6f7cea402e7338643ced44a6', + new Uint8Array([ + 0xd1, 0x15, 0xbf, 0xfa, 0xbb, 0xdd, 0x89, 0x3a, 0x6f, 0x7c, 0xea, 0x40, 0x2e, 0x73, + 0x38, 0x64, 0x3c, 0xed, 0x44, 0xa6, + ]), + ], + ['0xcd', new Uint8Array([205])], + ['0x', new Uint8Array([])], + ['0x01', new Uint8Array([1])], + [ + '0x2C941171bD2A7aEda7c2767c438DfF36EAaFdaFc', + new Uint8Array([ + 0x2c, 0x94, 0x11, 0x71, 0xbd, 0x2a, 0x7a, 0xed, 0xa7, 0xc2, 0x76, 0x7c, 0x43, 0x8d, + 0xff, 0x36, 0xea, 0xaf, 0xda, 0xfc, + ]), + ], +]; + +export const invalidHexStrictStringData: [string][] = [ + ['0x1'], + ['-0x'], + // ['-0x1'], + ['0xdec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c01'], + ['I have 100£'], +]; +export const validHexStrictData: any[] = [ + ...validHexStrictDataWithNumber.map(tuple => tuple[0]), + '-0xdec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', + '0x', + '0X', +]; + +export const invalidHexData: any[] = [ + 'Heeäööä👅D34ɝɣ24Єͽ', + '', + '-', + '-0x', + 'x', + '0x0x', + '0xH', + 'I have 100£', + '\u0000', + true, + false, + '0x407d73d8a49eeb85d32cf465507dd71d507100cG', // Invalid hex character "G" + {}, + // eslint-disable-next-line @typescript-eslint/no-empty-function + () => {}, + undefined, +]; + +export const invalidHexStrictData: any[] = [ + ...invalidHexData, + '45', + '-45', + '0', + 1, + BigInt(12), + BigInt(''), + BigInt(-255), + -42, + 4.2, +]; + +export const validHexData: any[] = [ + ...validHexStrictData, + '45', + '-45', + '0', + 1, + BigInt(12), + BigInt(-255), +]; + +export const isHexStringData: any[] = [ + { in: ['0x0000000000000000000000000000000000000000'], out: true }, + { in: ['0x0000000000000000000000000000000000000000', false], out: true }, + { in: ['0x0000000000000000000000000000000000000000', 2], out: false }, + { in: ['0x0000000000000000000000000000000000000000', undefined], out: true }, + { in: ['0x0001', 2], out: true }, + { in: ['0x0001', 3], out: false }, + { in: ['0x0001', 1], out: false }, + { in: ['123abcdefg'], out: false }, + { in: ['1x12345'], out: false }, + { in: ['123'], out: false }, + { in: [123], out: false }, + // eslint-disable-next-line no-null/no-null + { in: [null], out: false }, + { in: [false], out: false }, + { in: [{}], out: false }, +]; +export const isHexString8BytesData: any[] = [ + { in: ['0x0000000000000001', true], out: true }, + { in: ['0000000000000001', true], out: false }, + { in: ['0x0000000000000001', false], out: false }, + { in: ['0000000000000001', false], out: true }, + { in: [123, true], out: false }, + { in: [123, false], out: false }, + { in: [true, true], out: false }, + { in: [false, false], out: false }, + { in: [{}, true], out: false }, + { in: [{}, false], out: false }, +]; +export const isObjectData: any[] = [ + { in: 'asd', out: false }, + { in: [], out: false }, + { in: true, out: false }, + { in: false, out: false }, + { in: {}, out: true }, + // eslint-disable-next-line no-null/no-null + { in: null, out: false }, + { in: undefined, out: false }, + { in: new Uint8Array([0x61, 0x73, 0x64]), out: false }, +]; +export const isHexString32BytesData: any[] = [ + { in: ['0x0000000000000000000000000000000000000000000000000000000000000001', true], out: true }, + { in: ['0000000000000000000000000000000000000000000000000000000000000001', true], out: false }, + { + in: ['0x0000000000000000000000000000000000000000000000000000000000000001', false], + out: false, + }, + { in: ['0000000000000000000000000000000000000000000000000000000000000001', false], out: true }, + { in: [123, true], out: false }, + { in: [123, false], out: false }, + { in: [true, true], out: false }, + { in: [false, false], out: false }, + { in: [{}, true], out: false }, + { in: [{}, false], out: false }, +]; +export const isHexPrefixedData: any[] = [ + { in: '0x0000000000000000000000000000000000000000000000000000000000000001', out: true }, + { in: '0000000000000000000000000000000000000000000000000000000000000001', out: false }, +]; +export const validStringNumbersWithHex: [string, string][] = [ + ['72', '0x48'], + ['4668', '0x123c'], + [ + '6297078121011128569053558207054331251192909352593326480842737114300118477835', + '0xdec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', + ], + [ + '1193664110518272216229793131906554422260021413030', + '0xd115bffabbdd893a6f7cea402e7338643ced44a6', + ], + [ + '254497623817844434235817792799421766503337286396', + '0x2C941171bD2A7aEda7c2767c438DfF36EAaFdaFc', + ], + ['1', '0x1'], + ['205', '0xcd'], + ['-205', '-0xcd'], +]; + +export const invalidStringNumbers: ValidInputTypes[] = [ + new Uint8Array([0x97, 0x98, 0x99]), + new Uint8Array(hexToBytes('abcd')), +]; +export const validCheckAddressCheckSumData: any[] = [ + '0xc1912fEE45d61C87Cc5EA59DaE31190FFFFf232d', + '0x52908400098527886E0F7030069857D2E4169EE7', + '0x8617E340B3D01FA5F11F306F4090FD50E238070D', + '0x27b1fdb04752bbc536007a920d24acb045561c26', + '0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed', + '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359', + '0xdbF03B407c01E7cD3CBea99509d93f8DDDC8C6FB', + '0xD1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb', +]; + +export const invalidCheckAddressCheckSumData: any[] = [ + '0xc1912fee45d61c87cc5ea59dae31190fffff232d', + '0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb', + '0XD1220A0CF47C7B9BE7A2E6BA89F429762E7B9ADB', + '1234', + '0xa1b2', +]; + +export const validAddressData: any[] = [ + '0xc6d9d2cd449a754c494264e1809c50e34d64562b', + 'c6d9d2cd449a754c494264e1809c50e34d64562b', + '0xE247A45c287191d435A8a5D72A7C8dc030451E9F', + '0xe247a45c287191d435a8a5d72a7c8dc030451e9f', + '0xE247A45C287191D435A8A5D72A7C8DC030451E9F', + '0XE247A45C287191D435A8A5D72A7C8DC030451E9F', + new Uint8Array(hexToBytes('0xE247A45C287191D435A8A5D72A7C8DC030451E9F')), +]; + +export const invalidAddressData: any[] = [ + ...invalidHexStrictData, + '0x1', + '0xE247a45c287191d435A8a5D72A7C8dc030451E9F', // Invalid checksum + '-0x407d73d8a49eeb85d32cf465507dd71d507100c1', +]; + +export const validBloomData: any[] = [ + '0x00000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000008000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000010000000000000000000000000000000000010000000000402000000000000000000000020000010000000000000000000000000000000000000000000000000000000000000', + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', +]; + +export const invalidBloomData: any[] = ['0x1100', '0x1212', 'test', 100]; + +export const validInBloomData: [string, string][] = [ + [ + '0x00000000200000000010000080000000000002000000000000000000000000000000000000020200000000000000000000800001000000000000000000200000000000000000000000000008000000800000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000080000000000000000000000100000000000000000000000002000000000001000080000000000000000000000000000000000020200010000000000000000000000000000000000000100000000000000000000000', + '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + ], + [ + '0x00000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000008000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000010000000000000000000000000000000000010000000000402000000000000000000000020000010000000000000000000000000000000000000000000000000000000000000', + '0x6b175474e89094c44da98b954eedeac495271d0f', + ], + [ + '0x01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000800000000000000000000000000010018000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000010000000000000000000002000000000080000000000000000000000000000000000000000001000000100000000000000000000000000000000000000000000400000000000000002000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000', + '0xf411903cbc70a74d22900a5de66a2dda66507255', + ], +]; + +export const invalidInBloomData: any[] = [ + [ + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + ], + [ + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + '0x6254B927ecC25DDd233aAECD5296D746B1C006B4', + ], + ['0x1100', '0x6254B927ecC25DDd233aAECD5296D746B1C006B4'], + ['0x1212', '0x6254B927ecC25DDd233aAECD5296D746B1C006B4'], + ['test', '0x6254B927ecC25DDd233aAECD5296D746B1C006B4'], + [ + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + '0xhello', + ], + [0, '0x6254B927ecC25DDd233aAECD5296D746B1C006B4'], + [ + // mix a and A + '0xaA000000200000000010000080000000000002000000000000000000000000000000000000020200000000000000000000800001000000000000000000200000000000000000000000000008000000800000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000080000000000000000000000100000000000000000000000002000000000001000080000000000000000000000000000000000020200010000000000000000000000000000000000000100000000000000000000000', + '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + ], +]; + +export const validUserEthereumAddressInBloomData: any[] = [ + [ + '0x00000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000002000000000000000000000000000000100000000000000082000000000080000000000000000000000000000000000000000000000002000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + '0xdfd5293d8e347dfe59e90efd55b2956a1343963d', + ], +]; + +export const invalidUserEthereumAddressInBloomData: any[] = [ + [ + '0x00000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000002000000000000000000000000000000100000000000000082000000000080000000000000000000000000000000000000000000000002000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + '0xea674fdde714fd979de3edf0f56aa9716b898ec8', + ], + [ + '0x00000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000002000000000000000000000000000000100000000000000082000000000080000000000000000000000000000000000000000000000002000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + '0xH1', + ], + [ + // mix a and A + '0xaA000000200000000010000080000000000002000000000000000000000000000000000000020200000000000000000000800001000000000000000000200000000000000000000000000008000000800000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000080000000000000000000000100000000000000000000000002000000000001000080000000000000000000000000000000000020200010000000000000000000000000000000000000100000000000000000000000', + '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + ], +]; + +export const validTopicData: any[] = [ + '0x0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b', +]; + +export const invalidTopicData: any[] = [ + '0x0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac55', +]; + +export const validTopicInBloomData: any[] = [ + [ + '0x00000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000002000000000000000000000000000001000000000000000000000000000000', + '0x0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b', + ], +]; + +export const invalidTopicInBloomData: any[] = [ + [ + '0x00000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000002000000000000000000000000000001000000000000000000000000000000', + '0x9de781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac5567', + ], +]; + +export const validBigIntData: any[] = [BigInt('90071992547409911'), BigInt(42), BigInt('1337')]; + +export const invalidBigIntData: any[] = [3, '3', '3n']; + +// Uses same data defined in isHexStrictValidData minus negative hex strings +export const validBlockNumberData: any[] = [ + '0x48', + '0x123c', + '0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', + '0xd115bffabbdd893a6f7cea402e7338643ced44a6', + '0x2C941171bD2A7aEda7c2767c438DfF36EAaFdaFc', + '0x1', + '0xcd', + '1', + 0, + 12, + '0', + '0x0', + '0x12', +]; + +export const invalidBlockNumberData: any[] = [ + '45a', + '', + BigInt(-255), + -42, + 4.2, + '-0xcd', + '-0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', +]; + +export const validBlockTagData: string[] = ['latest', 'pending', 'earliest']; + +export const invalidBlockTagData: any[] = [ + 'User', + '0xal', + 'EARLIEST', + 'LATEST', + 'PENDING', + 'UNKNOWN', +]; + +export const validHexString8Bytes: (string | [string, false])[] = [ + '0x0000000000000001', + '0x00000000000c0ffe', + '0x0000123098409924', + ['0000000000000001', false], + ['00000000000c0ffe', false], + ['0000123098409924', false], +]; + +export const validHexString32BytesData: (string | [string, false])[] = [ + '0x22f30f0608f88c510de0016370f1525b330e5839026bdff93f9ceef24d2275e6', + '0x63a01bba0d4f0ad913a241aed52f5c55807be35f554536abd1e451d4e6515b29', + '0x687f28d48c22e9619b36776cf692501b3fc4e2143841efe3c7f45e49ea46b7f0', + ['22f30f0608f88c510de0016370f1525b330e5839026bdff93f9ceef24d2275e6', false], + ['63a01bba0d4f0ad913a241aed52f5c55807be35f554536abd1e451d4e6515b29', false], + ['687f28d48c22e9619b36776cf692501b3fc4e2143841efe3c7f45e49ea46b7f0', false], +]; + +export const validBooleanData: any[] = [true, false, 1, 0, '1', '0', '0x0', '0x1']; + +export const invalidBooleanData = invalidHexStrictData.filter( + data => data !== 1 && data !== 0 && data !== '0' && data !== '1' && typeof data !== 'boolean', +); +export const isTopicData: any[] = [ + { in: '0x0000000000000000000000000000000000000000000000000000000000000000', out: true }, + { in: '0x000000000000000000000000000000000000000000000000000000000000001a', out: true }, + { in: '0x000000000000000000000000000000000000000000000000000000000000001A', out: true }, + { in: '0x00000000000000000000000000000000000000000000000000000000000001aA', out: false }, + { in: '0x00000000000000000000000000000000000000000000000000000000000000000', out: false }, + { in: '0x000000000000000000000000000000000000000000000000000000000000000', out: false }, + { in: 123, out: false }, + // eslint-disable-next-line no-null/no-null + { in: null, out: false }, + { in: false, out: false }, + { in: {}, out: false }, +]; +export const isTopicInBloomData: any[] = [ + { in: [123, ''], out: false }, + // eslint-disable-next-line no-null/no-null + { in: [null, ''], out: false }, + { in: [false, ''], out: false }, + { in: [{}, ''], out: false }, + { + in: [ + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + 123, + ], + out: false, + }, + { + in: [ + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + // eslint-disable-next-line no-null/no-null + null, + ], + out: false, + }, + { + in: [ + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + false, + ], + out: false, + }, + { + in: [ + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + {}, + ], + out: false, + }, +]; +export const validFilterObjectData: Filter[] = [ + { + fromBlock: '0xc0ff3', + }, + { + toBlock: '0xc0ff3', + }, + { + address: '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + }, + { + address: [ + '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + '0xdfd5293d8e347dfe59e90efd55b2956a1343963d', + ], + }, + { + topics: [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + '0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc', + ], + ], + }, + { + fromBlock: '0xc0ff3', + toBlock: '0xc0ff3', + address: [ + '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + '0xdfd5293d8e347dfe59e90efd55b2956a1343963d', + ], + topics: [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + '0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc', + ], + ], + }, +]; + +export const invalidFilterObjectData: any[] = [ + { + fromBlock: '42a', + }, + { + toBlock: -42, + }, + { + address: '0x98', + }, + { + address: [ + '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + '0xdfd5293d8e347dfe59e90efd55b2956a1343963d', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + ], + }, + { + topics: [ + '0x00000000000000000000000', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + '0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc', + ], + ], + }, + { + fromBlock: '0xc0ff3', + toBlock: '0xc0ff3', + address: [ + '0x98afe7a8d28bbc88dcf41f8e06d97c74958a47dc', + '0xdfd5293d8e347dfe59e90efd55b2956a1343963d', + 42, + ], + topics: [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + // Using "null" value intentionally for validation + // eslint-disable-next-line no-null/no-null + null, + [ + '0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b', + '0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc', + ], + ], + }, +]; + +export const validBytesData: any[] = [ + '0x10', + '0xafea', + [2, 3, 255], + new Uint8Array(hexToBytes('abce')), + new Uint8Array([0x91, 0x92]), +]; + +export const validBytesDataWithSize: [any, number][] = [ + ['0x10', 1], + [new Uint8Array(hexToBytes('abce')), 2], +]; + +export const invalidBytesDataWithSize: [any, number][] = [ + ['0x10', 2], + [new Uint8Array(hexToBytes('abce')), 1], +]; + +export const validBytesDataWithAbiType: [any, string][] = [ + ['0x10', 'bytes1'], + [new Uint8Array(hexToBytes('abce')), 'bytes2'], +]; + +export const invalidBytesDataWithAbiType: [any, string][] = [ + ['0x10', 'bytes2'], + [new Uint8Array(hexToBytes('abce')), 'bytes1'], +]; + +export const invalidBytesData: any[] = [ + '0xT1', + '1234', + // odd length hex string + '0x123', + 'hello', + [1, 2, -3, 4, 5], + [2, 3, 266], + ['world'], + '-0x12', +]; + +export const validEthTypeData: string[] = [ + 'int', + 'uint', + 'int8', + 'int16', + 'int32', + 'int64', + 'int128', + 'int256', + 'string', + 'int[]', + 'int8[]', + 'int8[]', + 'uint8[]', + 'int[2]', + 'int8[2]', + 'uint[2]', + 'uint8[2]', + 'string[]', + 'bytes[]', + 'bytes[2]', + 'bytes10', + 'bytes1', + 'bool', + 'address', + 'address[]', + 'address[2]', +]; + +export const invalidEthTypeData: string[] = [ + 'i', + 'int7', + 'int512', + 'int1024', + 'byte', + 'my-addresss', + 'boolean', +]; + +export const validCodePoints: [number, number][] = [ + [48, 0], + [51, 3], + [55, 7], + [57, 9], + [65, 10], + [70, 15], + [97, 10], + [100, 13], + [102, 15], +]; + +export const invalidCodePoints: number[] = [-100, -5, 0, 30, 58, 75, 90, 103, 200]; + +export const padLeftData: { padDigits: number; data: [ValidInputTypes, string][] } = { + padDigits: 64, + data: [ + [ + 'dfd5293d8e347dfe59e90efd55b2956a1343963d', + '000000000000000000000000dfd5293d8e347dfe59e90efd55b2956a1343963d', + ], + [ + '-0xdfd5293d8e347dfe59e90efd55b2956a1343963d', + '-0x000000000000000000000000dfd5293d8e347dfe59e90efd55b2956a1343963d', + ], + [2, '0x0000000000000000000000000000000000000000000000000000000000000002'], + ], +}; + +export const validNotBaseTypeData: { dataType: string; data: any }[] = [ + { dataType: 'hex', data: '0x000000000000000000000000dfd5293d8e347dfe59e90efd55b2956a1343963d' }, + { dataType: 'number', data: 42 }, + { dataType: 'blockNumber', data: 42 }, + { dataType: 'blockNumberOrTag', data: 'latest' }, + { + dataType: 'filter', + data: { + fromBlock: 'latest', + toBlock: 'latest', + }, + }, + { + dataType: 'bloom', + data: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + }, +]; diff --git a/packages/web3-validator/test/integration/jest.config.js b/packages/web3-validator/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-validator/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-validator/test/integration/setup.js b/packages/web3-validator/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-validator/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-validator/test/tsconfig.json b/packages/web3-validator/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3-validator/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3-validator/test/unit/convert_to_zod.test.ts b/packages/web3-validator/test/unit/convert_to_zod.test.ts new file mode 100644 index 00000000000..358e6a8b801 --- /dev/null +++ b/packages/web3-validator/test/unit/convert_to_zod.test.ts @@ -0,0 +1,79 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Validator } from '../../src/web3_validator'; + +describe('convert-to-zod', () => { + let validator: Web3Validator; + + beforeAll(() => { + validator = new Web3Validator(); + }); + + it('simple array', () => { + expect(() => + validator.validateJSONSchema( + { + type: 'array', + items: { type: 'string' }, + }, + ['a', 'b', 'c'], + ), + ).not.toThrow(); + }); + + it('simple object', () => { + expect(() => + validator.validateJSONSchema( + { + type: 'object', + properties: { + a: { type: 'number' }, + }, + }, + { a: 1 }, + ), + ).not.toThrow(); + }); + it('incorrect type to object', () => { + expect(() => + validator.validateJSONSchema( + { + type: 'object2', + properties: { + a: { type: 'number' }, + }, + }, + { a: 1 }, + ), + ).not.toThrow(); + }); + it('format with undefined value', () => { + expect(() => + validator.validateJSONSchema( + { + required: ['a'], + type: 'object', + properties: { + a: { format: 'uint' }, + }, + }, + { a: undefined }, + ), + ).toThrow(); + }); +}); diff --git a/packages/web3-validator/test/unit/default_validator.test.ts b/packages/web3-validator/test/unit/default_validator.test.ts new file mode 100644 index 00000000000..352cae826d2 --- /dev/null +++ b/packages/web3-validator/test/unit/default_validator.test.ts @@ -0,0 +1,26 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { validator } from '../../src/default_validator'; +import { Web3Validator } from '../../src/web3_validator'; + +describe('default web3-validator', () => { + it('should be instance', () => { + expect(validator).toBeDefined(); + expect(validator).toBeInstanceOf(Web3Validator); + }); +}); diff --git a/packages/web3-validator/test/unit/error.test.ts b/packages/web3-validator/test/unit/error.test.ts new file mode 100644 index 00000000000..14cf631c7c5 --- /dev/null +++ b/packages/web3-validator/test/unit/error.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3ValidationErrorObject } from 'web3-types'; + +import { Web3ValidatorError } from '../../src/errors'; +import { + fullErrors, + errorsWithInstanceNoParamsNoMessage, + unspecifiedErrors, +} from '../fixtures/errors'; + +describe('Web3ValidationError', () => { + it.each(fullErrors)('errors with message', (error: Web3ValidationErrorObject) => { + const validationError = new Web3ValidatorError([error]); + + expect(validationError).toBeInstanceOf(Web3ValidatorError); + expect(validationError.message).toBe(`Web3 validator found 1 error[s]:\n${error.message}`); + }); + + it.each(errorsWithInstanceNoParamsNoMessage)( + 'errors with only instance', + (error: Web3ValidationErrorObject) => { + const validationError = new Web3ValidatorError([error]); + + expect(validationError).toBeInstanceOf(Web3ValidatorError); + expect(validationError.message).toBe( + `Web3 validator found 1 error[s]:\nunspecified error`, + ); + }, + ); + + it.each(unspecifiedErrors)('unspecified errors', (error: Web3ValidationErrorObject) => { + const validationError = new Web3ValidatorError([error]); + + expect(validationError).toBeInstanceOf(Web3ValidatorError); + expect(validationError.message).toBe(`Web3 validator found 1 error[s]:\nunspecified error`); + }); +}); diff --git a/packages/web3-validator/test/unit/index.test.ts b/packages/web3-validator/test/unit/index.test.ts new file mode 100644 index 00000000000..efc2586580f --- /dev/null +++ b/packages/web3-validator/test/unit/index.test.ts @@ -0,0 +1,30 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import * as Validator from '../../src'; + +describe('main package', () => { + it('should import', () => { + expect(Validator.validator).toBeDefined(); + expect(Validator.Web3Validator).toBeDefined(); + expect(Validator.utils).toBeDefined(); + expect(Validator.Web3ValidatorError).toBeDefined(); + expect(Validator.VALID_ETH_BASE_TYPES).toBeDefined(); + + expect(Validator.validator).toBeInstanceOf(Validator.Web3Validator); + expect(Validator.VALID_ETH_BASE_TYPES).toBeInstanceOf(Array); + }); +}); diff --git a/packages/web3-validator/test/unit/jest.config.js b/packages/web3-validator/test/unit/jest.config.js new file mode 100644 index 00000000000..c524db4732b --- /dev/null +++ b/packages/web3-validator/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-validator-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3-validator/test/unit/load.test.ts b/packages/web3-validator/test/unit/load.test.ts new file mode 100644 index 00000000000..9053be7e8f0 --- /dev/null +++ b/packages/web3-validator/test/unit/load.test.ts @@ -0,0 +1,184 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Validator } from '../../src/web3_validator'; +import { Json, JsonSchema, ValidationSchemaInput } from '../../src/types'; + +const abi = [ + { indexed: true, internalType: 'address', name: 'from', type: 'address' }, + { indexed: true, internalType: 'address', name: 'to', type: 'address' }, + { indexed: false, internalType: 'uint256', name: 'value', type: 'uint256' }, +]; + +const abiJsonSchema = { + type: 'array', + items: [ + { name: 'from', format: 'address' }, + { name: 'to', format: 'address' }, + { name: 'value', format: 'uint256' }, + ], +}; + +const abiData = [ + '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', +]; + +const simpleSchema = { + type: 'object', + required: ['blockHash', 'blockNumber', 'from', 'to', 'data'], + properties: { + blockHash: { + format: 'bytes32', + }, + blockNumber: { + format: 'uint', + }, + from: { + format: 'address', + }, + to: { + oneOf: [{ format: 'address' }, { type: 'null' }], + }, + data: { + format: 'bytes', + }, + }, +}; + +const simpleData = { + blockHash: '0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', + blockNumber: BigInt(2), + from: '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + to: '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + data: '0xafea', +} as unknown as ValidationSchemaInput; + +const createHugeSchema = ( + schema: JsonSchema, + data: Json, + n = 3, +): { schema: JsonSchema; data: Json } => { + if (n > 0) { + const { data: resultData, schema: resultSchema } = createHugeSchema( + { ...simpleSchema } as JsonSchema, + { ...simpleData } as Json, + n - 1, + ); + return { + data: { ...(data as unknown as object), simple: resultData }, + schema: { ...schema, properties: { ...schema.properties, simple: resultSchema } }, + }; + } + return { + schema, + data, + }; +}; + +const { schema: hugeSchema, data: hugeData } = createHugeSchema( + { ...simpleSchema } as JsonSchema, + { ...simpleData } as Json, + 500, +); + +const { schema: hugeSchema1000, data: hugeData1000 } = createHugeSchema( + { ...simpleSchema } as JsonSchema, + { ...simpleData } as Json, + 1000, +); +describe('instance of validator', () => { + let validator: Web3Validator; + beforeAll(() => { + validator = new Web3Validator(); + }); + + it('huge schema', () => { + let t = 0; + expect(() => { + const t1 = Number(new Date()); + validator.validateJSONSchema(hugeSchema, hugeData as object); + t = Number(new Date()) - t1; + }).not.toThrow(); + expect(t).toBeLessThan(6000); + expect(t).toBeGreaterThan(0); + }); + + it('huge schema 1000', () => { + let t = 0; + expect(() => { + const t1 = Number(new Date()); + validator.validateJSONSchema(hugeSchema1000, hugeData1000 as object); + t = Number(new Date()) - t1; + }).not.toThrow(); + expect(t).toBeLessThan(6000); + expect(t).toBeGreaterThan(0); + }); + + it('simple schema multiple times', () => { + let t = 0; + expect(() => { + const t1 = Number(new Date()); + for (let i = 0; i < 500; i += 1) { + validator.validateJSONSchema(simpleSchema, simpleData as object); + } + t = Number(new Date()) - t1; + }).not.toThrow(); + expect(t).toBeLessThan(3000); + expect(t).toBeGreaterThan(0); + }); + + it('simple schema 1000 times', () => { + let t = 0; + expect(() => { + const t1 = Number(new Date()); + for (let i = 0; i < 1000; i += 1) { + validator.validateJSONSchema(simpleSchema, simpleData as object); + } + t = Number(new Date()) - t1; + }).not.toThrow(); + expect(t).toBeLessThan(4000); + expect(t).toBeGreaterThan(0); + }); + + it('simple JSON schema 1000 times', () => { + let t = 0; + expect(() => { + const t1 = Number(new Date()); + for (let i = 0; i < 1000; i += 1) { + validator.validateJSONSchema(abiJsonSchema, abiData as object); + } + t = Number(new Date()) - t1; + }).not.toThrow(); + expect(t).toBeLessThan(4000); + expect(t).toBeGreaterThan(0); + }); + + it('simple ABI 1000 times', () => { + let t = 0; + expect(() => { + const t1 = Number(new Date()); + for (let i = 0; i < 1000; i += 1) { + validator.validate(abi, abiData); + } + t = Number(new Date()) - t1; + }).not.toThrow(); + expect(t).toBeLessThan(4000); + expect(t).toBeGreaterThan(0); + }); +}); diff --git a/packages/web3-validator/test/unit/utils.test.ts b/packages/web3-validator/test/unit/utils.test.ts new file mode 100644 index 00000000000..eac7d652bbf --- /dev/null +++ b/packages/web3-validator/test/unit/utils.test.ts @@ -0,0 +1,139 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { InvalidNumberError, InvalidBytesError } from 'web3-errors'; +import { ValidInputTypes } from '../../src/types'; +import { + ethAbiToJsonSchema, + transformJsonDataToAbiFormat, + codePointToInt, + hexToNumber, + numberToHex, + padLeft, + hexToUint8Array, + uint8ArrayToHexString, +} from '../../src/utils'; +import { abiToJsonSchemaCases } from '../fixtures/abi_to_json_schema'; +import { + validCodePoints, + invalidCodePoints, + validHexStrictDataWithNumber, + invalidHexData, + invalidHexStrictStringData, + validHexStrictData, + validStringNumbersWithHex, + invalidStringNumbers, + padLeftData, + validHexStrictDataWithUint8Array, +} from '../fixtures/validation'; + +describe('utils', () => { + describe('uint8Array', () => { + it.each(validHexStrictDataWithUint8Array)('uint8Array to hex', (res, input) => { + expect(uint8ArrayToHexString(input)).toEqual(res.toLowerCase()); + }); + describe('hex to uint8Array', () => { + it.each(validHexStrictDataWithUint8Array)('valid hex string data', (input, res) => { + expect(hexToUint8Array(input)).toEqual(res); + }); + + it.each(invalidHexStrictStringData)('invalidHexData', (input: string) => { + expect(() => { + hexToUint8Array(input); + }).toThrow(new InvalidBytesError(`hex string has odd length: ${input}`)); + }); + }); + }); + describe('ethAbiToJsonSchema', () => { + describe('full schema', () => { + it.each(abiToJsonSchemaCases)('$title', ({ abi, json }) => { + expect(ethAbiToJsonSchema(abi.fullSchema)).toEqual(json.fullSchema); + }); + }); + + describe('short schema', () => { + it.each(abiToJsonSchemaCases)('$title', ({ abi, json }) => { + expect(ethAbiToJsonSchema(abi.shortSchema)).toEqual(json.shortSchema); + }); + }); + }); + + describe('transformJsonDataToAbiFormat', () => { + describe('full schema', () => { + it.each(abiToJsonSchemaCases)('$title', ({ abi, json }) => { + expect(transformJsonDataToAbiFormat(abi.fullSchema, json.data)).toEqual(abi.data); + }); + }); + }); + + describe('codePointToInt', () => { + it.each(validCodePoints)('valid code points', (input, res) => { + expect(codePointToInt(input)).toEqual(res); + }); + + it.each(invalidCodePoints)('valid code points', (input: number) => { + expect(() => { + codePointToInt(input); + }).toThrow(new Error(`Invalid code point: ${input}`)); + }); + }); + + describe('hexToNumber', () => { + it.each(validHexStrictDataWithNumber)('valid hex string data', (input, res) => { + expect(hexToNumber(input)).toEqual(res); + }); + + it.each(invalidHexData)('invalidHexData', (input: string) => { + expect(() => { + hexToNumber(input); + }).toThrow(new Error('Invalid hex string')); + }); + }); + describe('numberToHex', () => { + it.each(validHexStrictDataWithNumber.map(tuple => [tuple[1], tuple[0]]))( + 'valid numbers and bigints', + (input, res) => { + expect(numberToHex(input)).toEqual((res as string).toLowerCase()); + }, + ); + + it.each(validHexStrictData)('valid hex strings', input => { + expect(numberToHex(input)).toEqual( + // if input is '' then numberToHex would return "0x0" + (input === '' ? '0x0' : (input as string)).toLowerCase(), + ); + }); + + it.each(validStringNumbersWithHex)('valid string numbers', (input, res) => { + expect(numberToHex(input)).toEqual(res.toLowerCase()); + }); + + it.each(invalidStringNumbers)('invalid string number', (input: ValidInputTypes) => { + expect(() => { + numberToHex(input); + }).toThrow(new InvalidNumberError(input)); + }); + }); + + describe('padLeft', () => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + it.each(padLeftData.data)('valid numbers and bigints', (input, res) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + expect(padLeft(input, padLeftData.padDigits)).toBe(res); + }); + }); +}); diff --git a/packages/web3-validator/test/unit/validation/address.test.ts b/packages/web3-validator/test/unit/validation/address.test.ts new file mode 100644 index 00000000000..8af782b79f4 --- /dev/null +++ b/packages/web3-validator/test/unit/validation/address.test.ts @@ -0,0 +1,49 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { checkAddressCheckSum, isAddress } from '../../../src/validation/address'; +import { + validCheckAddressCheckSumData, + invalidAddressData, + validAddressData, +} from '../../fixtures/validation'; + +describe('validation', () => { + describe('address', () => { + describe('isAddress', () => { + describe('valid cases', () => { + it.each(validAddressData)('%s', input => { + expect(isAddress(input)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidAddressData)('%s', input => { + expect(isAddress(input)).toBeFalsy(); + }); + }); + }); + + describe('checkAddressCheckSum', () => { + describe('valid cases', () => { + it.each(validCheckAddressCheckSumData)('%s', input => { + expect(checkAddressCheckSum(input)).toBeTruthy(); + }); + }); + }); + }); +}); diff --git a/packages/web3-validator/test/unit/validation/block.test.ts b/packages/web3-validator/test/unit/validation/block.test.ts new file mode 100644 index 00000000000..d0007b3b3c3 --- /dev/null +++ b/packages/web3-validator/test/unit/validation/block.test.ts @@ -0,0 +1,69 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { isBlockNumber, isBlockNumberOrTag, isBlockTag } from '../../../src/validation/block'; +import { + invalidBlockNumberData, + invalidBlockTagData, + validBlockNumberData, + validBlockTagData, +} from '../../fixtures/validation'; + +describe('validation', () => { + describe('block', () => { + describe('isBlockNumber', () => { + describe('valid cases', () => { + it.each(validBlockNumberData)('%s', input => { + expect(isBlockNumber(input)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidBlockNumberData)('%s', input => { + expect(isBlockNumber(input)).toBeFalsy(); + }); + }); + }); + + describe('isBlockTag', () => { + describe('valid cases', () => { + it.each(validBlockTagData)('%s', input => { + expect(isBlockTag(input)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidBlockTagData)('%s', input => { + expect(isBlockTag(input)).toBeFalsy(); + }); + }); + }); + describe('isBlockNumberOrTag', () => { + describe('valid cases', () => { + it.each([...validBlockTagData, ...validBlockNumberData])('%j', input => { + expect(isBlockNumberOrTag(input)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each([...invalidBlockTagData, ...invalidBlockNumberData])('%o', input => { + expect(isBlockNumberOrTag(input)).toBeFalsy(); + }); + }); + }); + }); +}); diff --git a/packages/web3-validator/test/unit/validation/bloom.test.ts b/packages/web3-validator/test/unit/validation/bloom.test.ts new file mode 100644 index 00000000000..ef20809cf84 --- /dev/null +++ b/packages/web3-validator/test/unit/validation/bloom.test.ts @@ -0,0 +1,84 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + isBloom, + isContractAddressInBloom, + isInBloom, + isUserEthereumAddressInBloom, +} from '../../../src/validation/bloom'; +import { + validBloomData, + invalidInBloomData, + validInBloomData, + invalidUserEthereumAddressInBloomData, + validUserEthereumAddressInBloomData, +} from '../../fixtures/validation'; + +describe('validation', () => { + describe('bloom', () => { + describe('isBloom', () => { + describe('valid cases', () => { + it.each(validBloomData)('%s', input => { + expect(isBloom(input)).toBeTruthy(); + }); + }); + }); + + describe('isInBloom', () => { + describe('valid cases', () => { + it.each(validInBloomData)('%s', (bloom, value) => { + expect(isInBloom(bloom, value)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidInBloomData)('%s', (bloom, value) => { + expect(isInBloom(bloom, value)).toBeFalsy(); + }); + }); + }); + + describe('isUserEthereumAddressInBloom', () => { + describe('valid cases', () => { + it.each(validUserEthereumAddressInBloomData)('%s', (bloom, address) => { + expect(isUserEthereumAddressInBloom(bloom, address)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidUserEthereumAddressInBloomData)('%s', (bloom, address) => { + expect(isUserEthereumAddressInBloom(bloom, address)).toBeFalsy(); + }); + }); + }); + + describe('isContractAddressInBloom', () => { + describe('valid cases', () => { + it.each(validInBloomData)('%s', (bloom, address) => { + expect(isContractAddressInBloom(bloom, address)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidUserEthereumAddressInBloomData)('%s', (bloom, address) => { + expect(isContractAddressInBloom(bloom, address)).toBeFalsy(); + }); + }); + }); + }); +}); diff --git a/packages/web3-validator/test/unit/validation/boolean.test.ts b/packages/web3-validator/test/unit/validation/boolean.test.ts new file mode 100644 index 00000000000..51670fdcb39 --- /dev/null +++ b/packages/web3-validator/test/unit/validation/boolean.test.ts @@ -0,0 +1,37 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { isBoolean } from '../../../src/validation/boolean'; +import { invalidBooleanData, validBooleanData } from '../../fixtures/validation'; + +describe('validation', () => { + describe('boolean', () => { + describe('isBoolean', () => { + describe('valid cases', () => { + it.each(validBooleanData)('%s', input => { + expect(isBoolean(input)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidBooleanData)('%s', input => { + expect(isBoolean(input)).toBeFalsy(); + }); + }); + }); + }); +}); diff --git a/packages/web3-validator/test/unit/validation/bytes.test.ts b/packages/web3-validator/test/unit/validation/bytes.test.ts new file mode 100644 index 00000000000..cf538877048 --- /dev/null +++ b/packages/web3-validator/test/unit/validation/bytes.test.ts @@ -0,0 +1,74 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { isBytes } from '../../../src/validation/bytes'; +import { + invalidBytesData, + invalidBytesDataWithAbiType, + invalidBytesDataWithSize, + validBytesData, + validBytesDataWithAbiType, + validBytesDataWithSize, +} from '../../fixtures/validation'; + +describe('validation', () => { + describe('bytes', () => { + describe('isBytes', () => { + describe('raw bytes', () => { + describe('valid cases', () => { + it.each(validBytesData)('%s', input => { + expect(isBytes(input)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidBytesData)('%s', input => { + expect(isBytes(input)).toBeFalsy(); + }); + }); + }); + + describe('bytes with size', () => { + describe('valid cases', () => { + it.each(validBytesDataWithSize)('%s', (input, size) => { + expect(isBytes(input, { size })).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidBytesDataWithSize)('%s', (input, size) => { + expect(isBytes(input, { size })).toBeFalsy(); + }); + }); + }); + + describe('bytes with abiType', () => { + describe('valid cases', () => { + it.each(validBytesDataWithAbiType)('%s', (input, abiType) => { + expect(isBytes(input, { abiType })).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidBytesDataWithAbiType)('%s', (input, abiType) => { + expect(isBytes(input, { abiType })).toBeFalsy(); + }); + }); + }); + }); + }); +}); diff --git a/packages/web3-validator/test/unit/validation/eth.test.ts b/packages/web3-validator/test/unit/validation/eth.test.ts new file mode 100644 index 00000000000..a7bbe2396ab --- /dev/null +++ b/packages/web3-validator/test/unit/validation/eth.test.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { isValidEthBaseType } from '../../../src/validation/eth'; + +import { invalidEthTypeData, validEthTypeData } from '../../fixtures/validation'; + +describe('validation', () => { + describe('eth', () => { + describe('isValidEthType', () => { + describe('valid cases', () => { + it.each(validEthTypeData)('%s', input => { + expect(isValidEthBaseType(input)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidEthTypeData)('%s', input => { + expect(isValidEthBaseType(input)).toBeFalsy(); + }); + }); + }); + }); +}); diff --git a/packages/web3-validator/test/unit/validation/filter.test.ts b/packages/web3-validator/test/unit/validation/filter.test.ts new file mode 100644 index 00000000000..e279cef91e3 --- /dev/null +++ b/packages/web3-validator/test/unit/validation/filter.test.ts @@ -0,0 +1,56 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { isTopic, isTopicInBloom } from '../../../src/validation/topic'; +import { + invalidTopicData, + invalidTopicInBloomData, + validTopicData, + validTopicInBloomData, +} from '../../fixtures/validation'; + +describe('validation', () => { + describe('topic', () => { + describe('isTopic', () => { + describe('valid cases', () => { + it.each(validTopicData)('%s', input => { + expect(isTopic(input)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidTopicData)('%s', input => { + expect(isTopic(input)).toBeFalsy(); + }); + }); + }); + + describe('isTopicInBloom', () => { + describe('valid cases', () => { + it.each(validTopicInBloomData)('%s', (bloom, topic) => { + expect(isTopicInBloom(bloom, topic)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidTopicInBloomData)('%s', (bloom, topic) => { + expect(isTopicInBloom(bloom, topic)).toBeFalsy(); + }); + }); + }); + }); +}); diff --git a/packages/web3-validator/test/unit/validation/numbers.test.ts b/packages/web3-validator/test/unit/validation/numbers.test.ts new file mode 100644 index 00000000000..148a4515402 --- /dev/null +++ b/packages/web3-validator/test/unit/validation/numbers.test.ts @@ -0,0 +1,140 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { isBigInt, isInt, isUInt } from '../../../src/validation/numbers'; +import { + validBigIntData, + invalidBigIntData, + validUintData, + invalidUintData, + validUintDataWithSize, + invalidUintDataWithSize, + validUintDataWithAbiType, + invalidUintDataWithAbiType, + validIntData, + invalidIntData, + validIntDataWithSize, + invalidIntDataWithSize, + validIntDataWithAbiType, + invalidIntDataWithAbiType, +} from '../../fixtures/validation'; + +describe('validation', () => { + describe('numbers', () => { + describe('isBigInt', () => { + describe('valid cases', () => { + it.each(validBigIntData)('%s', value => { + expect(isBigInt(value)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidBigIntData)('%s', value => { + expect(isBigInt(value)).toBeFalsy(); + }); + }); + }); + + describe('isUInt', () => { + describe('raw number', () => { + describe('valid cases', () => { + it.each(validUintData)('%s', value => { + expect(isUInt(value)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidUintData)('%s', value => { + expect(isUInt(value)).toBeFalsy(); + }); + }); + }); + + describe('number with size', () => { + describe('valid cases', () => { + it.each(validUintDataWithSize)('%s', (value, bitSize) => { + expect(isUInt(value, { bitSize })).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidUintDataWithSize)('%s', (value, bitSize) => { + expect(isUInt(value, { bitSize })).toBeFalsy(); + }); + }); + }); + + describe('number with abi type', () => { + describe('valid cases', () => { + it.each(validUintDataWithAbiType)('%s', (value, abiType) => { + expect(isUInt(value, { abiType })).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidUintDataWithAbiType)('%s', (value, abiType) => { + expect(isUInt(value, { abiType })).toBeFalsy(); + }); + }); + }); + }); + + describe('isInt', () => { + describe('raw number', () => { + describe('valid cases', () => { + it.each(validIntData)('%s', value => { + expect(isInt(value)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidIntData)('%s', value => { + expect(isInt(value)).toBeFalsy(); + }); + }); + }); + + describe('number with size', () => { + describe('valid cases', () => { + it.each(validIntDataWithSize)('%s', (value, bitSize) => { + expect(isInt(value, { bitSize })).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidIntDataWithSize)('%s', (value, bitSize) => { + expect(isInt(value, { bitSize })).toBeFalsy(); + }); + }); + }); + + describe('number with abi type', () => { + describe('valid cases', () => { + it.each(validIntDataWithAbiType)('%s', (value, abiType) => { + expect(isInt(value, { abiType })).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidIntDataWithAbiType)('%s', (value, abiType) => { + expect(isInt(value, { abiType })).toBeFalsy(); + }); + }); + }); + }); + }); +}); diff --git a/packages/web3-validator/test/unit/validation/object.test.ts b/packages/web3-validator/test/unit/validation/object.test.ts new file mode 100644 index 00000000000..debd89ec2f5 --- /dev/null +++ b/packages/web3-validator/test/unit/validation/object.test.ts @@ -0,0 +1,29 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { isObject } from '../../../src/validation/object'; +import { isObjectData } from '../../fixtures/validation'; + +describe('validation', () => { + describe('object', () => { + describe('isObject', () => { + it.each(isObjectData)('%s', data => { + expect(isObject(data.in)).toBe(data.out); + }); + }); + }); +}); diff --git a/packages/web3-validator/test/unit/validation/string.test.ts b/packages/web3-validator/test/unit/validation/string.test.ts new file mode 100644 index 00000000000..862510edb22 --- /dev/null +++ b/packages/web3-validator/test/unit/validation/string.test.ts @@ -0,0 +1,160 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { hexToBytes } from 'ethereum-cryptography/utils'; +import { + isString, + isHex, + isHexStrict, + isHexString, + isHexString8Bytes, + isHexString32Bytes, + isHexPrefixed, + validateNoLeadingZeroes, +} from '../../../src/validation/string'; +import { + invalidHexData, + invalidHexStrictData, + validHexStrictData, + validHexData, + isHexStringData, + isHexString8BytesData, + isHexString32BytesData, + isHexPrefixedData, +} from '../../fixtures/validation'; + +describe('validation', () => { + describe('string', () => { + describe('isString', () => { + it('should return true for a string value', () => { + expect(isString('string')).toBeTruthy(); + }); + + it.each([12, true, BigInt(12)])( + 'should return false for a non-string value: %s', + value => { + expect(isString(value)).toBeFalsy(); + }, + ); + }); + + describe('isHexStrict', () => { + describe('valid cases', () => { + it.each(validHexStrictData)('%s', input => { + expect(isHexStrict(input)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidHexStrictData)('%s', input => { + expect(isHexStrict(input)).toBeFalsy(); + }); + }); + }); + + describe('isHex', () => { + describe('valid cases', () => { + it.each(validHexData)('%s', input => { + expect(isHex(input)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidHexData)('%s', input => { + expect(isHex(input)).toBeFalsy(); + }); + }); + }); + describe('isHexString', () => { + it.each(isHexStringData)('%s', data => { + expect(isHexString(data.in[0], data.in[1])).toBe(data.out); + }); + }); + describe('isHexString8Bytes', () => { + it.each(isHexString8BytesData)('%s', data => { + expect(isHexString8Bytes(data.in[0], data.in[1])).toBe(data.out); + }); + }); + describe('isHexString32Bytes', () => { + it.each(isHexString32BytesData)('%s', data => { + expect(isHexString32Bytes(data.in[0], data.in[1])).toBe(data.out); + }); + }); + describe('isHexPrefixed', () => { + it.each(isHexPrefixedData)('%s', data => { + expect(isHexPrefixed(data.in)).toBe(data.out); + }); + it('should fails', () => { + expect(() => { + // @ts-expect-error no type validation + isHexPrefixed(1); + }).toThrow(`[isHexPrefixed] input must be type 'string', received type number`); + expect(() => { + // @ts-expect-error no type validation + isHexPrefixed(false); + }).toThrow(`[isHexPrefixed] input must be type 'string', received type boolean`); + expect(() => { + // @ts-expect-error no type validation + isHexPrefixed(true); + }).toThrow(`[isHexPrefixed] input must be type 'string', received type boolean`); + expect(() => { + // @ts-expect-error no type validation + isHexPrefixed({}); + }).toThrow(`[isHexPrefixed] input must be type 'string', received type object`); + expect(() => { + // @ts-expect-error no type validation + isHexPrefixed([]); + }).toThrow(`[isHexPrefixed] input must be type 'string', received type object`); + }); + }); + + describe('validateNoLeadingZeroes', () => { + it.each(isHexPrefixedData)('%s', data => { + expect(isHexPrefixed(data.in)).toBe(data.out); + }); + it('valid', () => { + const noLeadingZeroes = { + a: hexToBytes('0x1230'), + }; + const noleadingZeroBytes = { + a: hexToBytes('0x01'), + }; + const emptyUint8Array = { + a: hexToBytes('0x'), + }; + const undefinedValue = { + a: undefined, + }; + + expect(() => validateNoLeadingZeroes(noLeadingZeroes)).not.toThrow(); + expect(() => validateNoLeadingZeroes(emptyUint8Array)).not.toThrow(); + expect(() => validateNoLeadingZeroes(undefinedValue)).not.toThrow(); + expect(() => validateNoLeadingZeroes(noleadingZeroBytes)).not.toThrow(); + }); + it('fails', () => { + const leadingZeroBytes = { + a: hexToBytes('0x0010'), + }; + const onlyZeroes = { + a: hexToBytes('0x00'), + }; + + expect(() => validateNoLeadingZeroes(leadingZeroBytes)).toThrow(); + expect(() => validateNoLeadingZeroes(onlyZeroes)).toThrow(); + }); + }); + }); +}); diff --git a/packages/web3-validator/test/unit/validation/topic.test.ts b/packages/web3-validator/test/unit/validation/topic.test.ts new file mode 100644 index 00000000000..fe062f8e9f5 --- /dev/null +++ b/packages/web3-validator/test/unit/validation/topic.test.ts @@ -0,0 +1,57 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { isFilterObject } from '../../../src/validation/filter'; +import { + invalidFilterObjectData, + isTopicData, + isTopicInBloomData, + validFilterObjectData, +} from '../../fixtures/validation'; +import { isTopic, isTopicInBloom } from '../../../src/validation/topic'; + +describe('validation', () => { + describe('filter', () => { + describe('isFilterObject', () => { + describe('valid cases', () => { + it.each(validFilterObjectData)('%s', input => { + expect(isFilterObject(input)).toBeTruthy(); + }); + }); + + describe('invalid cases', () => { + it.each(invalidFilterObjectData)('%s', input => { + expect(isFilterObject(input)).toBeFalsy(); + }); + }); + }); + }); + describe('isTopic', () => { + describe('valid cases', () => { + it.each(isTopicData)('%s', data => { + expect(isTopic(data.in)).toBe(data.out); + }); + }); + }); + describe('isTopicInBloom', () => { + describe('valid cases', () => { + it.each(isTopicInBloomData)('%s', data => { + expect(isTopicInBloom(data.in[0], data.in[1])).toBe(data.out); + }); + }); + }); +}); diff --git a/packages/web3-validator/test/unit/validator.test.ts b/packages/web3-validator/test/unit/validator.test.ts new file mode 100644 index 00000000000..e8afc8045d0 --- /dev/null +++ b/packages/web3-validator/test/unit/validator.test.ts @@ -0,0 +1,127 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Validator } from '../../src/validator'; +import formats from '../../src/formats'; + +const formatNames = [ + 'address', + 'bloom', + 'blockNumber', + 'blockTag', + 'blockNumberOrTag', + 'bool', + 'bytes', + 'filter', + 'hex', + 'uint', + 'int', + 'number', + 'string', +]; + +describe('instance of validator', () => { + let validator: Validator; + beforeAll(() => { + validator = Validator.factory(); + }); + it('instance', () => { + expect(validator).toBeDefined(); + expect(validator.validate).toBeDefined(); + }); + + it('convertErrors', () => { + const schema = { + type: 'array', + items: { + format: 'uint', + }, + }; + // @ts-expect-error-next-line + expect(validator.convertErrors(undefined, schema, [])).toBeUndefined(); + }); + it('formats exists', () => { + for (const f of formatNames) { + expect(typeof formats[f]).toBe('function'); + } + for (let i = 3; i <= 8; i += 1) { + const bitSize = 2 ** i; + expect(typeof formats[`int${bitSize}`]).toBe('function'); + expect(typeof formats[`uint${bitSize}`]).toBe('function'); + } + for (let size = 1; size <= 32; size += 1) { + expect(typeof formats[`bytes${size}`]).toBe('function'); + } + }); + it('formats call', () => { + expect(formats.address('0x7ab80aeb6bb488b7f6c41c58e83ef248eb39c882')).toBe(true); + expect(formats.address('0x7ab80aeb6bb488b7f6c41c58e83ef248eb39c88')).toBe(false); + + expect(formats.bloom(`0x${'0'.repeat(512)}`)).toBe(true); + expect(formats.bloom(`0x${'0'.repeat(511)}`)).toBe(false); + + expect(formats.blockNumber(1)).toBe(true); + expect(formats.blockNumber(-1)).toBe(false); + + expect(formats.uint(1)).toBe(true); + expect(formats.uint(-1)).toBe(false); + + expect(formats.int(1)).toBe(true); + expect(formats.int(1.1)).toBe(false); + + expect(formats.number(1)).toBe(true); + expect(formats.number([])).toBe(false); + + expect(formats.string('1')).toBe(true); + expect(formats.string(1)).toBe(false); + + expect(formats.hex('0x1')).toBe(true); + expect(formats.hex('1')).toBe(false); + + expect(formats.blockTag('latest')).toBe(true); + expect(formats.blockTag('latest2')).toBe(false); + + expect(formats.blockNumberOrTag(1)).toBe(true); + expect(formats.blockNumberOrTag('latest')).toBe(true); + expect(formats.blockNumberOrTag(-1)).toBe(false); + expect(formats.blockNumberOrTag('latest2')).toBe(false); + + expect(formats.bool(true)).toBe(true); + expect(formats.bool(false)).toBe(true); + expect(formats.bool('')).toBe(false); + expect(formats.bool([])).toBe(false); + + expect(formats.bytes([1, 2])).toBe(true); + expect(formats.bytes(-1)).toBe(false); + + expect(formats.filter({ fromBlock: 'latest' })).toBe(true); + expect(formats.filter({ fromBlock2: 'latest' })).toBe(false); + + for (let i = 3; i <= 8; i += 1) { + const bitSize = 2 ** i; + expect(formats[`int${bitSize}`](1)).toBe(true); + expect(formats[`int${bitSize}`](1.1)).toBe(false); + expect(formats[`uint${bitSize}`](1)).toBe(true); + expect(formats[`uint${bitSize}`](-1)).toBe(false); + } + for (let size = 1; size <= 32; size += 1) { + const value = `0x${'aa'.repeat(size)}`; + expect(formats[`bytes${size}`](value)).toBe(true); + expect(formats[`bytes${size}`](-1)).toBe(false); + } + }); +}); diff --git a/packages/web3-validator/test/unit/web3_validator.test.ts b/packages/web3-validator/test/unit/web3_validator.test.ts new file mode 100644 index 00000000000..0b910c31f17 --- /dev/null +++ b/packages/web3-validator/test/unit/web3_validator.test.ts @@ -0,0 +1,169 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { SchemaFormatError } from 'web3-errors' +import { abiToJsonSchemaCases } from '../fixtures/abi_to_json_schema'; +import { Web3Validator } from '../../src/web3_validator'; +import { Web3ValidatorError } from '../../src/errors'; +import { validNotBaseTypeData } from '../fixtures/validation'; + +describe('web3-validator', () => { + describe('Web3Validator', () => { + let validator: Web3Validator; + + beforeEach(() => { + validator = new Web3Validator(); + }); + + it('should initialize the validator', () => { + expect(validator['_validator']).toBeDefined(); + }); + + describe('validate', () => { + it('should pass for valid data', () => { + expect(validator.validate(['uint'], [1])).toBeUndefined(); + }); + + it('should raise error with empty value', () => { + expect(() => validator.validate(['string'], [])).toThrow( + 'must NOT have fewer than 1 items', + ); + }); + + it('should raise error with less value', () => { + expect(() => validator.validate(['string', 'string'], ['value'])).toThrow( + 'must NOT have fewer than 2 items', + ); + }); + + it('should raise error with more value', () => { + expect(() => validator.validate(['string'], ['value', 'value2'])).toThrow( + 'must NOT have more than 1 items', + ); + }); + + it('should raise error by default', () => { + expect(() => validator.validate(['uint'], [-1])).toThrow( + 'Web3 validator found 1 error[s]:\nvalue "-1" at "/0" must pass "uint" validation', + ); + }); + + it('should return errors if set silent', () => { + expect(validator.validate(['uint'], [-1], { silent: true })).toEqual([ + { + instancePath: '/0', + keyword: '0', + message: 'value "-1" at "/0" must pass "uint" validation', + params: { value: -1 }, + schemaPath: '#0', + }, + ]); + }); + + it('should return undefined for empty schema and empty data', () => { + expect(validator.validate([], [])).toBeUndefined(); + }); + + it('should return error is schema is empty but data no', () => { + const data = [1]; + const testFunction = () => { + validator.validate([], data); + }; + expect(testFunction).toThrow('empty schema against data can not be validated'); + + expect(testFunction).toThrow(Web3ValidatorError); + }); + + it.each(validNotBaseTypeData)( + 'should pass for valid non base type data %s', + ({ dataType, data }: { dataType: string; data: any }) => { + expect(validator.validate([dataType], [data])).toBeUndefined(); + }, + ); + + it('should add id if empty', () => { + expect( + validator.validate( + [{ name: '', type: 'address' }], + ['0x2df0879f1ee2b2b1f2448c64c089c29e3ad7ccc5'], + ), + ).toBeUndefined(); + }); + + it('should throw due to unsupported format', () => { + expect(() => { + validator.validateJSONSchema( + { + type: 'array', + items: [{ $id: 'a', format: 'unsupportedFormat', required: true }], + minItems: 1, + maxItems: 1, + }, + ['0x2df0879f1ee2b2b1f2448c64c089c29e3ad7ccc5'], + ); + }).toThrow(SchemaFormatError); + }); + }); + describe('validateJsonSchema', () => { + // only single param test cases + it.each(abiToJsonSchemaCases.slice(0, 69))( + `$title - should pass for valid data`, + abi => { + const jsonSchema = abi.json; + expect( + validator.validateJSONSchema(jsonSchema.fullSchema, jsonSchema.data), + ).toBeUndefined(); + }, + ); + + it('should throw', () => { + expect(() => { + validator.validateJSONSchema( + { + type: 'array', + items: [{ $id: 'a', required: true, format: 'uint' }], + minItems: 1, + maxItems: 1, + }, + [], + ); + }).toThrow(Web3ValidatorError); + }); + it('should return errors on silent', () => { + expect( + validator.validateJSONSchema( + { + type: 'array', + items: [{ $id: 'a', format: 'uint' }], + minItems: 1, + maxItems: 1, + }, + [], + { silent: true }, + ), + ).toMatchObject([ + { + instancePath: '', + schemaPath: '#/minItems', + keyword: 'minItems', + params: { limit: 1 }, + message: 'must NOT have fewer than 1 items', + }, + ]); + }); + }); + }); +}); diff --git a/packages/web3-validator/test/unit/web3_validator_tuples.test.ts b/packages/web3-validator/test/unit/web3_validator_tuples.test.ts new file mode 100644 index 00000000000..811938d4514 --- /dev/null +++ b/packages/web3-validator/test/unit/web3_validator_tuples.test.ts @@ -0,0 +1,95 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Validator } from '../../src/web3_validator'; + +describe('web3-validator', () => { + describe('Web3Validator', () => { + let validator: Web3Validator; + + beforeEach(() => { + validator = new Web3Validator(); + }); + describe('validate', () => { + it('nested tuples', () => { + const schema = [['uint', 'uint'], 'uint']; + validator.validate(schema, [[7, 5], 3]); + }); + it('nested tuples deep', () => { + const address = '0x7ab80aeb6bb488b7f6c41c58e83ef248eb39c882'; + + const schema = [ + [ + ['uint', ['uint', ['uint', ['uint', 'uint'], 'address']]], + ['uint', 'uint'], + ], + 'uint', + ]; + validator.validate(schema, [ + [ + [7, [7, [7, [7, 5], address]]], + [7, 5], + ], + 3, + ]); + }); + it('nested tuples deep object schema', () => { + const schema = { + type: 'array', + items: [ + { + $id: '/0/0', + format: 'uint', + required: true, + }, + { + type: 'array', + items: [ + { + $id: '/0/0', + format: 'uint', + required: true, + }, + { + type: 'array', + items: [ + { + $id: '/0/0', + format: 'uint', + required: true, + }, + { + $id: '/0/1', + format: 'uint', + required: true, + }, + ], + maxItems: 2, + minItems: 2, + }, + ], + maxItems: 2, + minItems: 2, + }, + ], + maxItems: 2, + minItems: 2, + }; + expect(validator.validateJSONSchema(schema, [7, [7, [7, 5]]])).toBeUndefined(); + }); + }); + }); +}); diff --git a/packages/web3-validator/tsconfig.cjs.json b/packages/web3-validator/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-validator/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-validator/tsconfig.esm.json b/packages/web3-validator/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-validator/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-validator/tsconfig.types.json b/packages/web3-validator/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-validator/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-validator/tsdoc.json b/packages/web3-validator/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-validator/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3-validator/webpack.config.js b/packages/web3-validator/webpack.config.js new file mode 100644 index 00000000000..59864af0ee2 --- /dev/null +++ b/packages/web3-validator/webpack.config.js @@ -0,0 +1,26 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +const { getWebPackConfig } = require('../../webpack.base.config'); + +module.exports = getWebPackConfig( + __dirname, + 'web3-validator.min.js', + 'web3-validator', + 'src/index.ts', + 'tsconfig.cjs.json', +); diff --git a/packages/web3/.eslintignore b/packages/web3/.eslintignore new file mode 100644 index 00000000000..81748e9e93c --- /dev/null +++ b/packages/web3/.eslintignore @@ -0,0 +1,7 @@ +dist +lib +hardhat.config.js +jest.config.js +webpack.config.js +.eslintrc.js +webpack.analyze.js \ No newline at end of file diff --git a/packages/web3/.eslintrc.js b/packages/web3/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3/.gitignore b/packages/web3/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3/.npmignore b/packages/web3/.npmignore new file mode 100644 index 00000000000..0b1a9d71c23 --- /dev/null +++ b/packages/web3/.npmignore @@ -0,0 +1,26 @@ +.babelrc +.eslintignore +.eslintrc.json +.eslintrc.js +.gitignore +.lintstagedrc.json +.nycrc +.prettierrc.json +.prettierignore +cypress.json +index.html +Jenkinsfile* +*.log + +.nyc_output/ +coverage/ +benchmark/ +.coverage/ +cypress/ +fixtures/ +tmp/ +logs/ +test/ +scripts/ +browsertest/ +examples/ diff --git a/packages/web3/.prettierignore b/packages/web3/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3/.prettierrc.json b/packages/web3/.prettierrc.json new file mode 100644 index 00000000000..7b23ef55098 --- /dev/null +++ b/packages/web3/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": true, + "arrowParens": "avoid" +} diff --git a/packages/web3/CHANGELOG.md b/packages/web3/CHANGELOG.md new file mode 100644 index 00000000000..3312cc7999d --- /dev/null +++ b/packages/web3/CHANGELOG.md @@ -0,0 +1,164 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [4.0.0-alpha.1] + +### Breaking Changes + +#### Connection close is not supported + +In `1.x` user had access to raw connection object and can interact with it. e.g. + +```ts +web3.currentProvider.connection.close(); +``` + +But this internal behavior is not exposed any further. Though you can achieve same with this approach. + +```ts +web3.currentProvider.disconnect(); +``` + +## [4.0.1-alpha.2] + +### Changed + +- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739) + +## [4.0.1-alpha.5] + +### Removed + +- `build` entry from `package.json` (#5755) + +## [4.0.1-rc.0] + +### Added + +- `registeredSubscriptions` was added by default in web3 constructor (#5792) +- Add named exports for all objects which are the default-exported-object in their packages (#5771) +- Export all packages' objects organized by namespaces (#5771) +- Add Additional flat exports for all types and constants from `web3-types`, `web3-errors` and `web3`. (#5771) +- Fix few issues with `new Web3().eth.contract` (#5824) + +### Changed + +- `require('web3')` will now return all web3 exported-objects organized in namespaces . (#5771) + +### Removed + +- Private static `_contracts:Contract[]` and static `setProvider` function was removed (#5792) + +## [4.0.1-rc.1] + +### Added + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +### Changed + +- No need for polyfilling nodejs `net` and `fs` modules (#5978) +- Removed IPC provider dependency, IPC path is no longer viable provider. If you wanna use IPC, please install `web3-providers-ipc` and instantiate provider yourself (#5978) + +## [4.0.1-rc.2] + +### Changed + +- Dependencies updated + +## [4.0.1] + +Release Notes: + +Detailed List of change logs are mentioned under previous 4.x alpha and RC releases. + +Documentation: +[Web3.js documentation](https://docs.web3js.org/) +[Web3 API](https://docs.web3js.org/api) +[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/) + +## [4.0.2] + +### Added + +- Exported `Web3Context`, `Web3PluginBase`, `Web3EthPluginBase` from `'web3-core'`, and `Web3Validator` from `'web3-validator'` (#6165) + +### Fixed + +- Fixed bug #6185, now web3.js compiles on typescript v5 (#6195) +- Fixed #6162 @types/ws issue (#6205) + +## [4.0.3] + +## Added + +- Web3 constructor accepts `Web3ContextInitOptions` as alternative to the still supported `undefined`, `string`, and `SupportedProviders` (#6262). + +### Fixed + +- Fixed bug #6236 by adding personal type in web3.eth (#6245) + +## [4.1.0] + +### Added + +- Added minimum support of web3.extend function + +## [4.1.1] + +### Added + +- To fix issue #6190, added the functionality to introduce different timeout value for Web3. (#6336) + +## [4.1.2] + +### Fixed + +- Fix of incorrect provider warning behavior + +## [4.2.0] + +### Changed + +- Dependencies updated + +### Added + +- Various web3 sub packages has new functions details are in root changelog + +## [Unreleased] \ No newline at end of file diff --git a/packages/web3/README.md b/packages/web3/README.md index 613671f037e..bec916e563d 100644 --- a/packages/web3/README.md +++ b/packages/web3/README.md @@ -1,29 +1,89 @@ -# web3 +

+ web3.js +

-[![NPM Package][npm-image]][npm-url] [![Dependency Status][deps-image]][deps-url] [![Dev Dependency Status][deps-dev-image]][deps-dev-url] +# web3.js -This is the main package of [web3.js][repo]. +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] -Please read the main [README][repo-readme] and [documentation][docs] for more. +This is the main package of [web3.js](repo). + +`web3` contains the ideal setup for a Web3.js package. ## Installation -### Node.js +You can install the package either using [NPM](https://www.npmjs.com/package/web3) or using [Yarn](https://yarnpkg.com/package/web3) + +### Using NPM ```bash npm install web3 ``` -## Types +### Using Yarn + +```bash +yarn add web3 +``` + +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Migration Guide + +- [Migration Guide from Web3.js 1.x to 4.x](https://docs.web3js.org/docs/guides/web3_migration_guide) + Breaking changes are listed in migration guide and its first step for migrating from Web3.js 1.x to 4.x. If there is any question or discussion feel free to ask in discord, and in case of any bug or new feature request [open issue](https://github.com/web3/web3.js/issues/new) or create a pull request for [contributions](https://github.com/web3/web3.js/blob/4.x/CONTRIBUTIONS.md). + +## Package.json Scripts + +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | + +## Web3.js Packages + +We encourage users to use only required individual packages listed in following table, for making lightweight application instead of importing main web3 package, and if you don't need functions from most of the packages that are implicitly included with main web3 package. -All the TypeScript typings are placed in the `types` folder. +| Package | Version | License | Docs | Description | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| [web3](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3%2Fpackage.json)](https://www.npmjs.com/package/web3) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3) | :rotating_light: Entire Web3.js offering (includes all packages) | +| [web3-core](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-core) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-core%2Fpackage.json)](https://www.npmjs.com/package/web3-core) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-core) | Core functions for web3.js packages | +| [web3-errors](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-errors) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-errors%2Fpackage.json)](https://www.npmjs.com/package/web3-core) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-errors) | Errors Objects | +| [web3-eth](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth%2Fpackage.json)](https://www.npmjs.com/package/web3-eth) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth) | Modules to interact with the Ethereum blockchain and smart contracts | +| [web3-eth-abi](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth-abi) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-abi%2Fpackage.json)](https://www.npmjs.com/package/web3-eth-abi) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth-abi) | Functions for encoding and decoding EVM in/output | +| [web3-eth-accounts](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth-accounts) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-accounts%2Fpackage.json)](https://www.npmjs.com/package/web3-eth-accounts) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth-accounts) | Functions for managing Ethereum accounts and signing | +| [web3-eth-contract](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth-contract) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-contract%2Fpackage.json)](https://www.npmjs.com/package/web3-eth-contract) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth-contract) | The contract package contained in [web3-eth](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth) | +| [web3-eth-ens](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth-ens) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-ens%2Fpackage.json)](https://www.npmjs.com/package/web3-eth-ens) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth-ens) | Functions for interacting with the Ethereum Name Service | +| [web3-eth-iban](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth-iban) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-iban%2Fpackage.json)](https://www.npmjs.com/package/web3-eth-iban) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth-iban) | Functionality for converting Ethereum addressed to IBAN addressed and vice versa | +| [web3-eth-personal](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-eth-personal) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-eth-personal%2Fpackage.json)](https://www.npmjs.com/package/web3-eth-personal) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-eth-personal) | Module to interact with the Ethereum blockchain accounts stored in the node | +| [web3-net](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-net) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-net%2Fpackage.json)](https://www.npmjs.com/package/web3-net) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-net) | Functions to interact with an Ethereum node's network properties | +| [web3-providers-http](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-providers-http) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-providers-http%2Fpackage.json)](https://www.npmjs.com/package/web3-providers-http) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-providers-http) | Web3.js provider for the HTTP protocol | +| [web3-providers-ipc](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-providers-ipc) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-providers-ipc%2Fpackage.json)](https://www.npmjs.com/package/web3-providers-ipc) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-providers-ipc) | Web3.js provider for IPC | +| [web3-providers-ws](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-providers-ws) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-providers-ws%2Fpackage.json)](https://www.npmjs.com/package/web3-providers-ws) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-providers-ws) | Web3.js provider for the Websocket protocol | +| [web3-rpc-methods](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-rpc-methods) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-rpc-methods%2Fpackage.json)](https://www.npmjs.com/package/web3-types) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/) | RPC Methods | +| [web3-types](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-types) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-types%2Fpackage.json)](https://www.npmjs.com/package/web3-types) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-types) | Shared useable types | +| [web3-utils](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-utils) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-utils%2Fpackage.json)](https://www.npmjs.com/package/web3-utils) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-utils) | Useful utility functions for Dapp developers | +| [web3-validator](https://github.com/ChainSafe/web3.js/tree/4.x/packages/web3-validator) | [![npm](https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3-validator%2Fpackage.json)](https://www.npmjs.com/package/web3-validator) | [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) | [![documentation](https://img.shields.io/badge/typedoc-blue)](https://docs.web3js.org/api/web3-validator) | Utilities for validating objects | -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js -[repo-readme]: https://github.com/ethereum/web3.js/blob/1.x/README.md -[npm-image]: https://img.shields.io/npm/v/web3.svg +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/packages/web3 +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=packages%2Fweb3%2Fpackage.json [npm-url]: https://npmjs.org/package/web3 -[deps-image]: https://david-dm.org/ethereum/web3.js/1.x/status.svg?path=packages/web3 -[deps-url]: https://david-dm.org/ethereum/web3.js/1.x?path=packages/web3 -[deps-dev-image]: https://david-dm.org/ethereum/web3.js/1.x/dev-status.svg?path=packages/web3 -[deps-dev-url]: https://david-dm.org/ethereum/web3.js/1.x?type=dev&path=packages/web3 \ No newline at end of file +[downloads-image]: https://img.shields.io/npm/dm/web3?label=npm%20downloads diff --git a/packages/web3/assets/logo/web3js.ai b/packages/web3/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV U57m2t053EqQp/NIwUfecjKQHM0yhCUjQFpZL5v8qxNxfV7OvQgTxtSnjQnKDrMI/jj83Kj2dqDy xz+RaTzl5TduK6vaV95kX8SRiNbhP8cfmk9m6gf5OXyKZ215aXSc7aeOdP5o2Vx96k5fGcZcjbiz xyhtIEe9VyTB2KuxV2KuxV2KuxV2KuxV2KuxV8lZJDsVejfkt5biv9Zn1a4TlFpoX0ARsZ3rRv8A YKCfmRgKh7fgS7FUDrOuaVotk17qVwtvbqaAtUlmP7KqKsx+WKqunanp+pWqXdhcJc27/ZkjNR8j 4H2OKonFXYq7FXYq7FXYq7FXEgCp2AxVhPmT81tA0pmgsv8AcldrsREwEKn3k3r/ALEHNVqe1seP aPqP2fN3ui7BzZd5+iPnz+X63nWr/mf5u1FmC3X1GE9IrUemR/s93/4bNLm7UzT68I8vxb0un7D0 2P8Ah4j/AEt/s5MXnuLi4kMlxK80h6vIxZj9JzAlIk2TbtYQjEUBQU8iydiq+KaaGQSQu0ci/ZdC VI+RGSEiDYRKIkKIsMq0T8z/ADXpjKslx9fgHWK6q5p7Sfb+8nM/B2pmhzPEPP8AW6jU9h6fLyHA f6P6uT07yv8AmVoGuMlu7fUb9qAW8xHFj4RvsG+Wx9s32l7Tx5dvpl3F5bXdi5sHqHqh3j9IZZmx dO7FXYq7FXYq7FXYq7FXYq+Sskh2Kvb/AMjEUeVrx6fE186k+ywxEf8AEsBUPRsCVO5uIba3luJ2 CQwo0krnoFUVY/QBir5s85ebL3zLrEl3MxW1QlbO2rtHH/zU3Vj/AApkkILQ/MOs6HdC50y5e3fb mo3RwOzofhYYq9g8pfnFpOo8LXWlXTrw7Cev+jufmd4/9lt74KW3oaOrqHQhkYAqwNQQehBwJbxV 2KuxV2Ksf8zeedB8voUupfVvKVWzio0m/Tl2UfPMPVa7Hh5m5dzsdD2Xm1H0io955fteQeaPzD17 Xy8LP9U089LSEkAj/ixur/q9s5vVdo5M23KPd+t7PQ9j4dPvXFPvP6O5i+a92rsVdiqZ2HljzFfo JLPTbiaNvsyLG3A/7Ijj+OZGPS5Z/TEn4OLl12HGalOIPvdqHlrzBpyGS9064giHWVo24D/ZAcfx wZNNkhvKJC4dbhyGoTiT70syhynYq7FXonkT8z7mxkj07W5TNYGixXbVMkPhyPVk/EZutB2oYHhy G49/c832r2HHIDPEKn3dD+17EjpIiyRsHRwGR1NQQdwQRnSg28WQQaLeFDsVdirsVdirsVdir5Ky SHYq9x/I3/lErv8A5j5P+TMOAqHomBLE/wA1LuS28i6kYzRpRHFX2eVQ33rUYQr52wodirI/I/ky 880ap9XRjDZQUe8uaV4qTsq/5TdsVfQ+k6TYaTp8On2MfpWsAoi1JO+5JJ6knIpReKuxVA6xruk6 Pam51K5S3i/ZDbsx8EUfEx+WU5s8MQuRpyNNpcmaXDAWXk/mn83NTvudtoqtYWpqDcGnrsPYjaP6 N/fOe1Xa857Y/SPt/Y9doPZ7Hj9WX1y7un7fxswB3d3LuxZ2NWYmpJPck5pybeiAAFBbgS7FU68u +UNc8wTcbCA+ippJdSfDEvzbufYVOZWm0eTMfSNu/o4Ws7Rxaces793V655W/LHQtFCT3KjUL8UP qygemh/yI9x9JqflnR6XsvHi3Pqk8br+3M2faPoh5c/iWY5s3SuIBFDuDiryb82vKGk2FtFrNii2 0kswhuIF2Ryylg6r2Pw7065zva+jhADJHbd7D2f7RyZJHFP1ACwXmOaF6l2KuxVm/lb81NT0TT4t PmtUvbaEkRFnKSKpNePKjCg7bZtdL2rPFERI4gHRa7sHHnmZiXDI/JnOkfm75XvWWO69XT5TtWVe Udf9dK/iBm2w9sYpbG4uh1Hs9qIbxqY8ufyLMrW7tbuBZ7WZJ4X3WWNgyn5EbZs4zEhYNh0k8coG pCj5quSYOxV2KuxV2KvkrJIdir3H8jf+USu/+Y+T/kzDgKh6JgSwz83v+UFvf+MkH/J1cIUvn3Ch 2Kvoj8rdGi0zydZMFpNfD61M3c+p9j7k44ClluBXYq8288fm5BplxJpuiqtxdxkrPdNvHGw2KqP2 2HfsPfIZYzMTwECXm24JYxMeICY9aeU3+q32qXLXd7cPczv1kc1NPADsPYZxusxZoz/e3fe+i9nZ tPPHWGqHTr8f1ofMRz3YqitN0vUdTultbC3e5nboiCtB4k9APc5ZixSmaiLLVmzwxR4pnhD1Pyt+ T9rb8LrX3FxKKEWUZIiH+u2xb5Db550Gk7HA3ybnueT1/tFKXpwjhH848/h3fjk9Hgggt4UggjWK GMcY40AVVA7ADYZu4xAFDYPMzmZGybJX4WLsVSDzN530Hy+hW7m9S7IqlnFRpD4V7KPdvormHqtd jw/Ud+52Oi7Lzag+kVHvPL9rxfzf5z1LzLdrJcAQ2kVfq9opJVa/tE/tMfHOX1mtlnlZ2A5B7fs7 s2GljQ3keZ/HRj+YbsXYq7FXYq7FUfpGvavo9wJ9Ount3rVgp+BvZkPwt9Iy7DqJ4zcTTj6jSY8w qcQXqvlT827C+KWmtqtldHZbla+gx/yq7x/Tt7jOh0na8Z7ZPSe/p+x5LX+z88fqxeqPd1/a9DBD AEGoO4I6UzcvNuxV2KuxV8lZJDsVe4/kb/yiV3/zHyf8mYcBUPRMCWGfm9/ygt7/AMZIP+Tq4Qpf PuFDsVfT/lD/AJRLRP8AmAtf+TK5FKbYqw780/M82heWmW1bhe37fV4XGxRaVkcfJdh7nCFfPeFD asymoNDkJ44zFSFhniyyxy4omiERBK0jrGFJkYhVCipJOwAAzQ6vsXri+X6j+t6rQe0f8Ocf5w/S P1fJ6R5W/KLUb3hc62zWNsdxbCnrsPfqE+nf2yjS9jylvk9I7urk672hhD04vVLv6fteraRomlaP ai1063S3iFOXEfExHd2O7H550OHBDGKiKeS1GqyZpcUzZR2WuO7FUDq+t6Vo9qbrUblLeL9nkfiY jsij4mPyyrNnhjFyNN+n0uTNLhgLLynzT+buo3vO20RTZWx2Ny1PXYe1Nk+jf3zntV2xKW2P0jv6 /seu0Hs9CHqy+qXd0/a8+kkkkdpJGLu5LM7GpJPUknNMTe5ejAAFBbgS7FU20Lyrr2uOV020aVFN HmNEjX5u1BX265k4NJky/SHE1Wvw4B65V5dfky+D8lNcaMGe/to3/lUO4+8hc2UexMlbyDpZe02I HaMj8kr1r8q/NOmxNPHGl/Cu7G2JZwPeNgrH/Y1zHz9lZoCx6h5OXpu3tPlNEmB8/wBf62HkEEgi hGxBzWu6awK7FWe/l3+YVxpNxFpepyGTSpCEjkY1MBPQg/yeI7dRm37O7ROMiE/o+79jz/bHY4zA 5MY/eD/Zfte1Agio3BzqXhnYq7FXyVkkOxV7j+Rv/KJXf/MfJ/yZhwFQ9EwJYZ+b3/KC3v8Axkg/ 5OrhCl8+4UOxV9P+UP8AlEtE/wCYC1/5MrkUptiryD8+nb6xoyV+EJcED3Jjr+rCEF5ThV2Kvbvy o8h2+n2EOu38YfUbpedqrD+5iYfCQP53G9ew28cBV6PgS7FVk88FvC888ixQxjlJI5CqoHck7DBK QAs7BlCBkaAsl5x5p/OC1t+droCC4lFQb2QERD/UXYt8zt880mr7YA2x7nvem0Hs7KXqzHhH80c/ j3fjk8s1LVNR1O6a6v7h7m4bq7mtB4AdFHsM5/LllkNyNl6zDghijwwHCELlba7FUVp2mahqV0tr YW73Nw3SOMVNPE9gPc5ZjxSmaiLLVmzwxR4pnhD1Hyt+T1vDwutfcTSbEWURogP+W43b5Db55v8A S9jgb5N/J5TX+0Uj6cIofzjz+AekW9vBbQpBbxrDDGKJFGAqqPAAbDN5GIiKGweYnMyNyNlUwsXY q8L/ADZXS182v9RCiX0kN8E6evU1/wBlw41/rXOT7WEPG9Pdv73vuwDk/LDj5X6fd/bbDM1bu3Yq 7FX0R5CuprnyfpcszFpPR4Fj1IjYotfoXO00EjLBEnufNu1oCOpmByv790/zMde7FXyVkkOxV7j+ Rv8AyiV3/wAx8n/JmHAVD0TAlhn5vf8AKC3v/GSD/k6uEKXz7hQ7FX0/5Q/5RLRP+YC1/wCTK5FK bYq8f/Pn/evR/wDjHP8A8STCEF5VhVHaDZpfa5p1lJ/d3V1DC/ykkCn9eKvqcAKAqigGwA6AZFLs VdirHPOfk2HzLaJGbuW2mhqYuJLRE/5cdaH5jfMLW6IZ41ZBHy+Ts+ze0jpZXwiQPz+BeK+YvKGu 6BLxv4D6JNI7qP4om+Tdj7GhzltTo8mE+obd/R7jR9o4tQPQd+7qkuYrnLkR3cIilnY0VQKkk9gB hAtBIAss/wDK35R6nfcLnWmawtTuIBT6ww9wdk+nf2zcaXsic98npH2/sed1/tDjx+nF65d/8P7f xu9X0fQtJ0a1FtptstvF1YjdmPi7H4mPzzocOCGIVEU8jqdVkzS4pmyj8ucd2KoLVta0vSLU3Wo3 KW8I6FjuxHZVHxMfYZVmzQxi5Gg36fTZM0uGAsvKvNP5vahec7bQ0NlbHY3TUM7D/J6hPxPuM5/V dsSltj9I7+v7HrtB7PQh6svql3dP2vO2ZnYsxLMxqzHcknqSc0pL0gFNYFdiqe+VfKGq+Yr1YrZC lorD6zeMPgRe/wDrNTov8My9Jo55pUOXUuBr+0cemhcj6ug7/wBnm+g7Cxt7CygsrZeMFuixxjvx UUFffOyxwEIiI5B85y5ZZJmUuZNq+Ta3Yq+UL62a1vbi2b7UEjxmvijFfbwySFHFXuP5G/8AKJXf /MfJ/wAmYcBUPRMCWGfm9/ygt7/xkg/5OrhCl8+4UOxV9P8AlD/lEtE/5gLX/kyuRSm2KvH/AM+f 969H/wCMc/8AxJMIQXlWFU28of8AKW6J/wAx9r/yeXFX0/kUuxV2KuxVZPBBcQvBPGssMg4yRuAy sD2IOxwSiCKO4ZQmYmwaIee+YPyc027uBPpFx9QDt+9gcGSMA9Sm4Yf6tafLNNqOxoyNwPC9HpPa OcI1kHH58j8WSeWfI2g+X0DW0XrXlKNeS0aT349lHyzO0ugx4eQuXe6zW9qZtQfUaj3Dl+1kOZjr XYqsmmhgieaZ1iiQcnkchVUDuSdhglIAWeTKMTI0BZedeafzfs7bna6Cgup+hvJAREv+ouxf8B88 0mq7YjHbHue/o9LoPZ2UvVm9I7uv7Hlep6tqWqXTXWoXD3E7ftOeg8FHRR7DNBlzSyG5Gy9Zg08M UeGAoITKm52KonT9Nv8AUbpbWxge4uH+zHGKn5nwHucsx45TNRFlqzZoY48UzQeoeVvyegj4XXmB /Vk6ixiNEH/GRxu3yX7zm+0vYwG+T5PK6/2jJ9OEV/SP6B+t6VbW1vbQJBbRJDBGKJFGoVVHgANs 3kYiIoCg8vOcpG5GyVTJMXYq7FXzl+ZumHT/ADrqSUolw4uUPj6w5sf+DLDJBDF8Ve0fkTeI+ial ZV+OG5ExHeksYUf8msBUPTcCWGfm9/ygt7/xkg/5OrhCl8+4UOxV9P8AlD/lEtE/5gLX/kyuRSm2 KvH/AM+f969H/wCMc/8AxJMIQXlWFU28of8AKW6J/wAx9r/yeXFX0/kUuxV2KuxV2KuxV2KuxViP mr8ytD0IvbRH69qK7G3jPwof+LH3A+Qqc12r7Sx4dvql3frdx2f2Ll1FSPph3/qDyHzH5x13zBLW +nItwax2kfwxL/se592qc5vU6zJmPqO3d0ez0fZ2HTj0Dfv6pJmI5zsVbVWdgqgszGiqNySegAwg KTTP/K35SapqHC51gmwtDuIf93uPkdk/2W/tm40vZE57z9I+39jzuv8AaDHj9OL1y7+n7fxu9X0b QNI0W2+r6bbLAm3Nhu7kd3Y7nOhw6eGIVEU8jqdXkzy4pm0wy5xnYq7FXYq7FXln55aC0tpZa5Et Tbn6tckfyOeUZ+Qao+nCEF47hVlH5dea18ueYUnnJ+o3K+hd0/ZUkEPT/IP4VxKvouGaKaJJoXWS KRQ0cikFWUioII6g5FLDfzfZR5GuwTQtLCFHifUB/UMIUvn7Ch2Kvp/yh/yiWif8wFr/AMmVyKU2 xV4/+fP+9ej/APGOf/iSYQgvKsKpt5Q/5S3RP+Y+1/5PLir6fyKXYqg4tXsJL2WxEoW6iNDG2xNR X4fHriqMxV2KuxV2KsR84eY5InbTbNuL0/0iVeor+wD+vChgV9ptnepSdKsNlkGzD5HMbU6PHmHq G/f1c3R9oZdObgdu7oxnUfLt5a1eL9/CP2lHxAe6/wBM5vV9l5MW49Ufx0ey0HbuLP6Zeifny+BS nNW7tk3lf8v9e18rLHH9VsD1vJgQpH+QvV/1e+Z+l7PyZtxtHvdXru18On2J4p9w/T3PX/LHkTQf L6q9vF697T4ryUAv78OyD5fTXOk0ugx4eQuXe8Zru1c2o2kaj3Dl+1kWZrrXYq7FXYq7FXYq7FUJ q+mW2q6Zc6ddCsF1G0b+Ir0Ye6ncYq+Y9c0e80bVbnTbtaTWzlSezL1Vx7Mu4ySEDirKvKf5j+YP LiC3hZbqwrX6pNUha9fTYbr+r2xpVTzv+Y2o+aYYLV7dLOyhb1PRVi5aShAZmIXoCaCmNKxHFXYq +n/KH/KJaJ/zAWv/ACZXIpTbFXj/AOfP+9ej/wDGOf8A4kmEILyrCqbeUP8AlLdE/wCY+1/5PLir 6fyKXYq8z80kjzBdkbEMtD/sBhQjtH86XtrxivK3UA25E/vFHz/a+n78aVmmn6pY6hF6lrKHH7S9 GX5r1GBKKxVbI4SNnPRQWPyAriryOeZ555JpDV5WLsfdjU4ULMKtxxvI6xxqWdyFVRuST0AxVmGj /lvokM0d/qNulxfD4vTO8QPXdejt7nMOWhwynxmIt2EO09RHH4YmeH8cjzZgAFAAFANgB0pmU4Ds VdirsVdirsVdirsVdirsVYR+ZvkMeYbAXtkoGr2in0x09aMbmM+/8v3d8IV4FJG8btHIpSRCVdGF CCNiCD3woaxV2KuxV2Kvo78tNUj1DyXprqavbR/VZV6lTD8AB+acT9ORKWT4q8f/AD5/3r0f/jHP /wASTCEF5VhVNvKH/KW6J/zH2v8AyeXFX0/kUuxV5n5q/wCO/ef6y/8AEBhQlWFWT+QP+Olcf8Yf +NhgKhnWBKje/wC8c/8Axjf/AIicVeSZJDsVZX5D01ZJ5r+QV9H93DX+ZhVj9A/XgKhm2BLsVdir sVdirsVdirsVdirsVdirsVYJ5/8AyxtPMAa/0/ja6uBVido56dnp0bwb7/Y2rw/VNK1HSrx7PULd 7a5j+1G4pt4g9CD4jChC4q7FXYqzX8svPK+XNRe2vSf0TeEesQK+lINhIB4U2b+zEq98t7iC5gSe 3kWWCUBo5UIZWU9CCOuRS8c/PW8hk1jTbRSDLBA7yAHp6rAKD/wGEILzHCqbeUP+Ut0T/mPtf+Ty 4q+n8il2KsP8zeVL24u5b+zImMlC8HRhQAfD2PTChh7o8blHUo6mjKwoQfcHCrJvIH/HSuP+MP8A xsMBUM6wJUb3/eOf/jG//ETiryTJIdirP/IoA0Vqd5nr/wACuApDIsCuxVL9V17TdMAFy5MrCqwo KuR407fTiqSf8rAtOVPqknDx5LX7v7cNItMLLzhol0QrSG3c9BMOI/4IEr95wUlOlZWUMpBU7gjc EYq3irsVdirsVdirsVdiqX615f0fW7X6tqdqlzH+wWFHQnujijKfkcVebaz+RSM7SaPqPBT9mC6W tP8Anon/ADThtFJVB+RfmUvSe+skjp9pGlc1+RjT9eNrTz/ULC70+9msruMxXNu5SWM9iP4eGFVD FU00fzT5h0YMumX8tsjbtGpqhPjwaq196Yqgb2+vL66kuryZ57mU1klkJZienU4qo4qm/k8E+bdE p/y323/J5cVfT2RS7FXYql+q6Fp2ppS4jpKBRZl2cfT3+nFUs8veXLrSdTndnEtu8XGOQbGvIGhX CrI8CqN7/vHP/wAY3/4icVeSZJDsVegeRf8Ajit/xmf9S4ClkOBVG9uktLSa5f7MKFyPGg6fTiry m7upru5kuJm5SysWY/wHywoUsKuxVMdJ1/UdMYehJyhr8UD7ofl4fRgVm+j+adN1HjGW9C5O3oue p/yW7/rwJTnFXYq7FXYq7FXYq7FXYq7FWBfmd+Xo163Op6cgGsW60KCgE6D9k/5Y/ZP0eFCCrwmW KWGV4pUaOWMlXjcFWVgaEEHcEYULcVdirsVZR+WVg17530xQKrC7TufARKWH/DADEq+jcil2KuxV 2KuxV2KqN7/vHP8A8Y3/AOInFXkmSQ7FXoHkX/jit/xmf9S4ClkOBUk85SlNAnA/3YyL/wAMD/DE K85ySHYq7FXYq7FU/wBH84ahZcYrmt1bDajH41Hs3f5HBSs103WNP1KPnayhiPtRnZ1+a4Eo3FXY q7FXYq7FXYq7FXYqw3zv+Wul+ZA11CRZ6sBtcgfDJToJVHXw5dfn0w2rxHX/ACvrmgXPoanbNFUk RzD4on90cbH5dfHChKsVdir2n8mfKU9jaTa7eIUmvVEdojChEFQxf/ZkCnsPfAVD0zAl2KsM1TzH qWleYLmMH1rUlW9F+lCin4T1XChkGk+YdN1NQIX4T03gfZvo8fowJTPFXYqo3v8AvHP/AMY3/wCI nFXkmSQ7FXoHkX/jit/xmf8AUuApZDgVIvOiFtBlI/ZdCf8AgqfxxCvO8kh2Kpxp/lTVr61FzEES Nv7v1GILDpsAD+OBUBfabe2EvpXcLRN2J3B+RGxxVDYVdiq+GaaGRZYXaORTVXU0I+kYFZXo/nll 4w6mvIdBcIN/9ko6/RjS2zPAl2KuxV2KuxV2KuxV2KqVza2t1A0F1Ck8D7PFIodT81NRirDtS/J/ yXeyNJHDNZM25FtJRa+yyCRR9Aw2tL9H/KTybps6zmGW+kQ1T624dQf9RFRT/sgcbVmeBXYq7FWC efbYpqUNwB8M0VK/5SHf8CMIQWMqzKwZSQw3BGxBwqzXyd5gvru4axu3EoWMvHK326ggUJ77HAVZ ZgSo3v8AvHP/AMY3/wCInFXkmSQ7FXoHkX/jit/xmf8AUuApZDgVL/MFsbnRbyIbkxllHiU+Mf8A EcVeXZJDsVeraRw/RVnw+z6EdPlwGRSrXNrb3URhuI1ljbqrCoxViGseRpE5TaY3Nept3PxD/VY9 fpw2imKSxSwyNHKjRyKaMjAgg+4OKrcKuxV7DkUuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVIPOl gbnSDMgrJat6n+xOzf1+jEK89ySEZo2oHT9Sguuqo1JB4o2zfgcCvU4pY5Y1ljYPG4DIw6EHocCV O9/3jn/4xv8A8ROKvJMkh2KvQPIv/HFb/jM/6lwFLIcCuIBFD0xV5XrNg1hqc9sRRVasZ8Ubdfww oQWFWe+StWS40/6k7fv7avEHq0ZOx+itMBSyTArsVQWp6Np+pR8LqIFgKLKuzr8jirCdY8oahY8p YK3VsN+Sj41H+Uv8RhQkOFXsORS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWpESRGjcckcFWU9wd iMVeWazpkmm6hLbNUqDyiY/tIehwoQWFU80HzTdaYBBIvr2la+nWjLXrxP8ADAqc6v51sJdOlis1 kM8ylPjAUKGFCep3p4Y0rCsKuxV6B5F/44rf8Zn/AFLgKWQ4FdirGfO2jm5tVv4VrNbikoHUx9f+ FwhDBMKqtrdT2s6XFu5jljNVYYFZzo3nOyugsN7S2uOnM/3bH5/s/T9+NJZGCCKjcHocCuxV2KpL rHlXTtR5SKPq9yd/VQbE/wCUvf8AXiqdYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqk3mbQhq lnWMAXcNTCenId0PzxV5w6OjsjqVdSQykUII7HJIaxV2KuxV2KvQvI6FdDBPR5XYfLYfwyJSn+Ku xVxAIIIqDsQcVed+aPLz6bcGeBSbKU/Af5GP7J/hhQkWFXYqmukeZdS00hEb1bYdYHNR/sT1XArO NI8x6dqYCxv6dx3gfZv9j/NgSmmKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVj/mXy umog3NrRL0DcdBIB2Pv4HCrAZ4JoJWhmQxyoaMjChGKFmFXYq4AkgAVJ2AGKvVdHsvqWl21qdmjQ c/8AWPxN+JyKUZirsVdiqnc20FzA8E6CSKQUZT3xV575h8sXGmOZoqy2RO0ndPZ6frwoSTCrsVbR 2Rg6EqymqsDQgjuDirPvKvmX9IKLS6IF4g+Fv9+KO/8ArDvgSyLArsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVQOqaLp+pR8LmOrAfBKuzr8j/XFWIah5G1KFi1my3MfZahHH0Hb8cNopK/ 8O65y4/Upa9Ps7ff0xVkvlvyhLbTpe6hT1E+KKAGtG/mY9KjtTG1ZZgS7FXEgUqaV2GKuxV2KtMq spVgGUihB3BGKsW1jyRBNym05hDJ1MDfYP8Aqn9n9Xyw2imHXlld2cxhuYmikHZh19wehHyxVRwq vgnlgmSaJiksZDIw7EYFepaRqMeo6fFdJsXFJF/lcbMMCUZirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdiqQ+dWK6IzKSGEqEEdQa4hUh0fzrd23GK+BuYRt6n+7AP+Nvpw 0hmdhqVlfw+rayiRf2gOq+zA7jAlE4q7FULqWmWmo2zW9ynJT9lx9pT4qcVeZapps+nXslrNuU3V +zKejDChC4VZZ5CvytxPYsfhkHqxj/KXZvvH6sBUM1wJdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVSHzt/xwm/4yJ+vEK88ySFW1u7m1mE1vI0Uq9GU0+g+OBWX6P55jfj Dqa8G6C4QfCf9Ze30Y0tsrililjWSJw8bCqupBBHzGBK7FWJfmBaqYLW6A+JWMTHxBHIfqOEILC8 Kph5euDb61ZydAZAh+T/AAH/AIlgV6jgS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYqk/muzubvR3itozJIGVuA6kDrTFXm7KyMVYFWBoVOxBySGsVdiqN0zWtQ02TlbSEI TVom3RvmP6YFZppnnTTLlAt0fqs3cNuh+Tf1xpKUedNcsryOG0tJBKqMZJHX7NaUAB79TiEMVwqu icxypIOqMGH0GuKvX8il2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 Kpbq3l/TdTU+vHxm/ZnTZx8/H6cVYRrHlbUdNrJT17Yf7uQdB/lL2/VhQk+FXYq7FXYq7FXYq9hy KXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqx/WPJ1he8pba lrcHeqj4GPuvb5jDasK1LSNQ06ThdRFQfsyDdG+TYoQeFXYq7FUVpNq11qdtbqK85F5f6oNWP3DA r1fAl2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVZNDDPG 0UyLJG2zIwBB+g4qxXVvIsbsZdNkEZO5gkJK/wCxbcj6cNopjN1oWsWrUmtJAP5lHNf+CWoxVRi0 3UJXCR20rMegCN/TFWbeVfLL6fW7u6fW3HFYxuEU9d/E4pf/2Q== + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3/assets/logo/web3js.jpg b/packages/web3/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3/assets/logo/web3js.jpg differ diff --git a/packages/web3/assets/logo/web3js.svg b/packages/web3/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3/hardhat.config.js b/packages/web3/hardhat.config.js new file mode 100644 index 00000000000..18ce0e6b00d --- /dev/null +++ b/packages/web3/hardhat.config.js @@ -0,0 +1,3 @@ +// A dummy file to prevent `hardhat` from throwing +// "HardhatError: HH1: You are not inside a Hardhat project." +// Note: Hardhat is just used inside the tests to ensure its compatibility. diff --git a/packages/web3/package-lock.json b/packages/web3/package-lock.json deleted file mode 100644 index cffaa025b75..00000000000 --- a/packages/web3/package-lock.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "web3", - "version": "1.3.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/node": { - "version": "12.12.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.34.tgz", - "integrity": "sha512-BneGN0J9ke24lBRn44hVHNeDlrXRYF+VRp0HbSUNnEZahXGAysHZIqnf/hER6aabdBgzM4YOV4jrR8gj4Zfi0g==", - "dev": true - }, - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - } - } -} diff --git a/packages/web3/package.json b/packages/web3/package.json index edb26853dd5..5bbcb2bf6b3 100644 --- a/packages/web3/package.json +++ b/packages/web3/package.json @@ -1,65 +1,101 @@ { - "name": "web3", - "version": "1.3.0", - "description": "Ethereum JavaScript API", - "repository": "https://github.com/ethereum/web3.js", - "license": "LGPL-3.0", - "engines": { - "node": ">=8.0.0" - }, - "main": "lib/index.js", - "bugs": { - "url": "https://github.com/ethereum/web3.js/issues" - }, - "keywords": [ - "Ethereum", - "JavaScript", - "API" - ], - "author": "ethereum.org", - "types": "types/index.d.ts", - "scripts": { - "tsc": "tsc -b tsconfig.json", - "dtslint": "dtslint --localTs ../../node_modules/typescript/lib types" - }, - "authors": [ - { - "name": "Fabian Vogelsteller", - "email": "fabian@ethereum.org", - "homepage": "http://frozeman.de" - }, - { - "name": "Marek Kotewicz", - "email": "marek@parity.io", - "url": "https://github.com/debris" - }, - { - "name": "Marian Oancea", - "url": "https://github.com/cubedro" - }, - { - "name": "Gav Wood", - "email": "g@parity.io", - "homepage": "http://gavwood.com" - }, - { - "name": "Jeffery Wilcke", - "email": "jeffrey.wilcke@ethereum.org", - "url": "https://github.com/obscuren" - } - ], - "dependencies": { - "web3-bzz": "1.3.0", - "web3-core": "1.3.0", - "web3-eth": "1.3.0", - "web3-eth-personal": "1.3.0", - "web3-net": "1.3.0", - "web3-shh": "1.3.0", - "web3-utils": "1.3.0" - }, - "devDependencies": { - "@types/node": "^12.12.6", - "dtslint": "^3.4.1", - "typescript": "^3.9.5" - } + "name": "web3", + "version": "4.2.1", + "description": "Ethereum JavaScript API", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/ChainSafe/web3.js", + "engines": { + "node": ">=14.0.0", + "npm": ">=6.12.0" + }, + "author": "ChainSafe Systems", + "browser": "./dist/web3.min.js", + "license": "LGPL-3.0", + "keywords": [ + "Ethereum", + "JavaScript", + "API" + ], + "files": [ + "lib/**/*", + "src/**/*", + "dist/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "version:output": "[ -z $npm_package_version ] && rm ./src/version.ts || echo \"/* eslint-disable header/header */ export const Web3PkgInfo = { version: '$npm_package_version' };\" > ./src/version.ts", + "build": "yarn version:output && concurrently --kill-others-on-fail \"yarn:build:*(!web|check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:web": "npx webpack", + "build:web:analyze": "npx webpack --config ./webpack.analyze.js", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --forceExit --coverage=true --coverage-reporters=text", + "test:e2e:mainnet": "jest --config=./test/e2e/jest.config.js --forceExit", + "test:e2e:sepolia": "jest --config=./test/e2e/jest.config.js --forceExit", + "test:sync:integration": "jest --config=./test/integration/jest.config.js ./test/integration/sync.test.ts", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --forceExit", + "test:blackbox:ganache:http": "./scripts/black_box_test.sh ganache http", + "test:blackbox:ganache:ws": "./scripts/black_box_test.sh ganache ws", + "test:blackbox:geth:http": "./scripts/black_box_test.sh geth http", + "test:blackbox:geth:ws": "./scripts/black_box_test.sh geth ws", + "test:blackbox:infura:http": "./scripts/black_box_test.sh infura http", + "test:blackbox:infura:ws": "./scripts/black_box_test.sh infura ws" + }, + "devDependencies": { + "@truffle/hdwallet-provider": "^2.0.12", + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "ethereum-cryptography": "^2.1.2", + "ganache": "^7.5.0", + "hardhat": "^2.12.2", + "in3": "^3.3.3", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4", + "web3-providers-ipc": "^4.0.7" + }, + "dependencies": { + "web3-core": "^4.3.0", + "web3-errors": "^1.1.3", + "web3-eth": "^4.3.1", + "web3-eth-abi": "^4.1.4", + "web3-eth-accounts": "^4.1.0", + "web3-eth-contract": "^4.1.2", + "web3-eth-ens": "^4.0.8", + "web3-eth-iban": "^4.0.7", + "web3-eth-personal": "^4.0.8", + "web3-net": "^4.0.7", + "web3-providers-http": "^4.1.0", + "web3-providers-ws": "^4.0.7", + "web3-rpc-methods": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + } } diff --git a/packages/web3/scripts/black_box_test.sh b/packages/web3/scripts/black_box_test.sh new file mode 100755 index 00000000000..64d89498983 --- /dev/null +++ b/packages/web3/scripts/black_box_test.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash + +ORIGARGS=("$@") + +. scripts/env.sh + +helpFunction() { + echo "Usage: $0 " + exit 1 # Exit script after printing help +} + +BACKEND=${ORIGARGS[0]} +MODE=${ORIGARGS[1]} +PROVIDER_URL=${ORIGARGS[2]} + +SUPPORTED_BACKENDS=("ganache" "geth" "infura") +SUPPORTED_MODE=("http" "ws") + +if [[ ! " ${SUPPORTED_BACKENDS[*]} " =~ " ${BACKEND} " ]]; then + helpFunction +fi + +if [[ ! " ${SUPPORTED_MODE[*]} " =~ " ${MODE} " ]]; then + helpFunction +fi + +echo "RPC client Provider: " $BACKEND +echo "RPC client Protocol: " $MODE + +export WEB3_SYSTEM_TEST_PROVIDER="$MODE://localhost:$WEB3_SYSTEM_TEST_PORT" +export WEB3_SYSTEM_TEST_BACKEND=$BACKEND + +cd test/esm_black_box +yarn --update-checksums +yarn + +if [[ ${BACKEND} == "infura" ]] +then + if [ ! $INFURA_HTTP ] || [ ! $INFURA_WSS ] + then + echo "No Infura provider URL specified" + exit 1 + elif [ $MODE == "http" ] + then + WEB3_SYSTEM_TEST_PROVIDER=$INFURA_HTTP + else + WEB3_SYSTEM_TEST_PROVIDER=$INFURA_WSS + fi +fi +yarn "test:$BACKEND:$MODE" + +cd test/cjs_black_box +yarn --update-checksums +yarn + +if [[ ${BACKEND} == "infura" ]] +then + if [ ! $INFURA_HTTP ] || [ ! $INFURA_WSS ] + then + echo "No Infura provider URL specified" + exit 1 + elif [ $MODE == "http" ] + then + WEB3_SYSTEM_TEST_PROVIDER=$INFURA_HTTP + else + WEB3_SYSTEM_TEST_PROVIDER=$INFURA_WSS + fi +fi +yarn "test:$BACKEND:$MODE" diff --git a/packages/web3/scripts/env.sh b/packages/web3/scripts/env.sh new file mode 100755 index 00000000000..b0f7051087b --- /dev/null +++ b/packages/web3/scripts/env.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +TMP_FOLDER=$(pwd)/tmp +IPC_PATH=$TMP_FOLDER/ipc + +export WEB3_SYSTEM_TEST_ENV=true +export WEB3_SYSTEM_TEST_BACKEND="" +export WEB3_SYSTEM_TEST_MNEMONIC="smart guide what forget tired jungle always expire rescue boring glue champion" +export WEB3_SYSTEM_TEST_PORT=8545 +export WEB3_SYSTEM_TEST_PROVIDER="" diff --git a/packages/web3/src/abi.ts b/packages/web3/src/abi.ts new file mode 100644 index 00000000000..5abe7536266 --- /dev/null +++ b/packages/web3/src/abi.ts @@ -0,0 +1,41 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + decodeLog, + decodeParameter, + decodeParameters, + encodeEventSignature, + encodeFunctionCall, + encodeFunctionSignature, + encodeParameter, + encodeParameters, +} from 'web3-eth-abi'; + +/** + * The object for `web3.abi` + */ +export default { + encodeEventSignature, + encodeFunctionCall, + encodeFunctionSignature, + encodeParameter, + encodeParameters, + decodeParameter, + decodeParameters, + decodeLog, +}; diff --git a/packages/web3/src/accounts.ts b/packages/web3/src/accounts.ts new file mode 100644 index 00000000000..f359c3358a8 --- /dev/null +++ b/packages/web3/src/accounts.ts @@ -0,0 +1,103 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { EthExecutionAPI, Bytes, Transaction, KeyStore, ETH_DATA_FORMAT } from 'web3-types'; +import { format } from 'web3-utils'; +import { Web3Context } from 'web3-core'; +import { prepareTransactionForSigning } from 'web3-eth'; +import { + create, + decrypt, + encrypt, + hashMessage, + privateKeyToAccount, + recover, + recoverTransaction, + signTransaction, + sign, + Wallet, +} from 'web3-eth-accounts'; + +/** + * Initialize the accounts module for the given context. + * + * To avoid multiple package dependencies for `web3-eth-accounts` we are creating + * this function in `web3` package. In future the actual `web3-eth-accounts` package + * should be converted to context aware. + */ +export const initAccountsForContext = (context: Web3Context) => { + const signTransactionWithContext = async (transaction: Transaction, privateKey: Bytes) => { + const tx = await prepareTransactionForSigning(transaction, context); + + const privateKeyBytes = format({ format: 'bytes' }, privateKey, ETH_DATA_FORMAT); + + return signTransaction(tx, privateKeyBytes); + }; + + const privateKeyToAccountWithContext = (privateKey: Uint8Array | string) => { + const account = privateKeyToAccount(privateKey); + + return { + ...account, + signTransaction: async (transaction: Transaction) => + signTransactionWithContext(transaction, account.privateKey), + }; + }; + + const decryptWithContext = async ( + keystore: KeyStore | string, + password: string, + options?: Record, + ) => { + const account = await decrypt(keystore, password, (options?.nonStrict as boolean) ?? true); + + return { + ...account, + signTransaction: async (transaction: Transaction) => + signTransactionWithContext(transaction, account.privateKey), + }; + }; + + const createWithContext = () => { + const account = create(); + + return { + ...account, + signTransaction: async (transaction: Transaction) => + signTransactionWithContext(transaction, account.privateKey), + }; + }; + + const wallet = new Wallet({ + create: createWithContext, + privateKeyToAccount: privateKeyToAccountWithContext, + decrypt: decryptWithContext, + }); + + return { + signTransaction: signTransactionWithContext, + create: createWithContext, + privateKeyToAccount: privateKeyToAccountWithContext, + decrypt: decryptWithContext, + recoverTransaction, + hashMessage, + sign, + recover, + encrypt, + wallet, + }; +}; diff --git a/packages/web3/src/eth.exports.ts b/packages/web3/src/eth.exports.ts new file mode 100644 index 00000000000..8b37f03f77e --- /dev/null +++ b/packages/web3/src/eth.exports.ts @@ -0,0 +1,25 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export * from 'web3-eth'; + +export * as abi from 'web3-eth-abi'; +export * as accounts from 'web3-eth-accounts'; +export * as contract from 'web3-eth-contract'; +export * as ens from 'web3-eth-ens'; +export * as personal from 'web3-eth-personal'; +export * as iban from 'web3-eth-iban'; diff --git a/packages/web3/src/index.js b/packages/web3/src/index.js deleted file mode 100644 index f7629944df0..00000000000 --- a/packages/web3/src/index.js +++ /dev/null @@ -1,80 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @authors: - * Fabian Vogelsteller - * Gav Wood - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * @date 2017 - */ - -"use strict"; - - -var version = require('../package.json').version; -var core = require('web3-core'); -var Eth = require('web3-eth'); -var Net = require('web3-net'); -var Personal = require('web3-eth-personal'); -var Shh = require('web3-shh'); -var Bzz = require('web3-bzz'); -var utils = require('web3-utils'); - -var Web3 = function Web3() { - var _this = this; - - // sets _requestmanager etc - core.packageInit(this, arguments); - - this.version = version; - this.utils = utils; - - this.eth = new Eth(this); - this.shh = new Shh(this); - this.bzz = new Bzz(this); - - // overwrite package setProvider - var setProvider = this.setProvider; - this.setProvider = function (provider, net) { - /*jshint unused: false */ - setProvider.apply(_this, arguments); - - _this.eth.setRequestManager(_this._requestManager); - _this.shh.setRequestManager(_this._requestManager); - _this.bzz.setProvider(provider); - - return true; - }; -}; - -Web3.version = version; -Web3.utils = utils; -Web3.modules = { - Eth: Eth, - Net: Net, - Personal: Personal, - Shh: Shh, - Bzz: Bzz -}; - -core.addProviders(Web3); - -module.exports = Web3; - diff --git a/packages/web3/src/index.ts b/packages/web3/src/index.ts new file mode 100644 index 00000000000..acffa16b057 --- /dev/null +++ b/packages/web3/src/index.ts @@ -0,0 +1,363 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * This is the main (or 'umbrella') class of the web3.js library. + * + * ```ts + * import Web3 from 'web3'; + * + * > Web3.utils + * > Web3.version + * > Web3.givenProvider + * > Web3.providers + * > Web3.modules + * ``` + * + * # Web3.modules + * + * ```ts + * Web3.modules + * ``` + * + * Will return an object with the classes of all major sub modules, to be able to instantiate them manually. + * + * #### Returns + * + * `Object` A list of module constructors: + * + * + * + `Eth` - `Constructor`: The Eth module for interacting with the Ethereum network + * + * + * + `Net` - `Constructor`: The Net module for interacting with network properties. + * + * + * + `Personal` - `constructor`: The Personal module for interacting with the Ethereum accounts (web3.eth.personal). + * + * #### Example + * + * ```ts + * Web3.modules + * > { + * Eth: Eth(provider), + * Net: Net(provider), + * Personal: Personal(provider), + * } + * ``` + * + * See details: {@link Web3.modules} + * + * # Web3 Instance + * + * The Web3 class is an umbrella package to house all Ethereum related modules. + * + * ```ts + * import Web3 from 'web3'; + * + * // "Web3.givenProvider" will be set if in an Ethereum supported browser. + * const web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546'); + * + * > web3.eth + * > web3.utils + * > web3.version + * ``` + * + * ### version + * + * Contains the current package version of the web3.js library. + * + * #### Returns + * //todo enable when functionality added + * // @see Web3.version + * + * ### utils + * + * Static accessible property of the Web3 class and property of the instance as well. + * + * ```ts + * Web3.utils + * web3.utils + * ``` + * + * Utility functions are also exposed on the `Web3` class object diretly. + * + * //todo enable when implemented + * //See details: {@link Web3.utils} + * + * ### setProvider + * + * ```ts + * web3.setProvider(myProvider) + * web3.eth.setProvider(myProvider) + * ... + * ``` + * + * Will change the provider for its module. + * + * **_NOTE:_** When called on the umbrella package web3 it will also set the provider for all sub modules web3.eth etc. + * + * #### Parameters + * `Object` - `myProvider`: a valid provider. + * + * #### Returns + * `Boolean` + * + * See details: {@link Web3.setProvider} + * + * #### Example: Local Geth Node + * ```ts + * import Web3 from "web3"; + * let web3: Web3 = new Web3('http://localhost:8545'); + * // or + * let web3: Web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545')); + * + * // change provider + * web3.setProvider('ws://localhost:8546'); + * // or + * web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:8546')); + * + * //todo add IPC provider + * ``` + * + * #### Example: Remote Geth Node + * + * ```ts + * // Using a remote node provider, like Alchemy (https://www.alchemyapi.io/supernode), is simple. + * import Web3 from "web3"; + * let web3: Web3 = new Web3("https://eth-mainnet.alchemyapi.io/v2/your-api-key"); + * ``` + * + * ### providers + * + * ```ts + * web3.providers + * web3.eth.providers + * ``` + * Contains the current available providers. + * + * #### Returns + * `Object` with the following providers: + * + * + * + `Object` - `HttpProvider`: HTTP provider, does not support subscriptions. + * + * + * + `Object` - `WebSocketProvider`: The WebSocket provider is the standard for usage in legacy browsers. + * + * + * + `Object` - `IpcProvider`: The IPC provider is used in node.js dapps when running a local node. Gives the most secure connection. + * + * + * #### Example + * ```ts + * import Web3 from 'web3'; + * // use the given Provider or instantiate a new websocket provider + * let web3 = new Web3(Web3.givenProvider || 'ws://remotenode.com:8546'); + * // or + * let web3 = new Web3(Web3.givenProvider || new Web3.providers.WebsocketProvider('ws://remotenode.com:8546')); + * + * // Using the IPC provider in node.js + * var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc')); // mac os path + * // on windows the path is: "\\\\.\\pipe\\geth.ipc" + * // on linux the path is: "/users/myuser/.ethereum/geth.ipc" + * ``` + * #### Configuration + * + * ```ts + * + * //=== + * //Http + * //=== + * + * import Web3HttpProvider, { HttpProviderOptions } from "web3-providers-http"; + * + * let options: HttpProviderOptions = { + * providerOptions: { + * keepalive: true, + * credentials: "omit", + * headers: { + * "Access-Control-Allow-Origin": "*", + * }, + * }, + * }; + * + * + * var provider = new Web3HttpProvider("http://localhost:8545", options); + * web3.setProvider(provider); + * + * //=== + * //WebSockets + * //=== + * import Web3WsProvider, { + * ClientOptions, + * ClientRequestArgs, + * ReconnectOptions, + * } from "web3-providers-ws"; + * + * + * let clientOptions: ClientOptions = { + * // Useful for credentialed urls, e.g: ws://username:password@localhost:8546 + * headers: { + * authorization: "Basic username:password", + * }, + * maxPayload: 100000000, + * }; + * + * // Enable auto reconnection + * let reconnectOptions: ReconnectOptions = { + * autoReconnect: true, + * delay: 5000, // ms + * maxAttempts: 5, + * }; + * + * //clientOptions and reconnectOptions are optional + * //clientOptions: ClientOptions | ClientRequestArgs + * let ws = new Web3WsProvider( + * "ws://localhost:8546", + * clientOptions, + * reconnectOptions + * ); + * web3.setProvider(ws); + * + * ``` + * More information for the Http and Websocket provider modules can be found here: + * + * + * - {@link HttpProvider} + * + * + * - {@link WebSocketProvider} + * + * See details: {@link Web3.providers} + * + * + * ### givenProvider + * + * ```ts + * web3.givenProvider + * web3.eth.givenProvider + * ... + * ``` + * When using web3.js in an Ethereum compatible browser, it will set with the current native provider by that browser. + * Will return the given provider by the (browser) environment, otherwise `undefined`. + * + * #### Returns + * `Object` - The given provider set or `undefined`. + * + * See details: {@link Web3.givenProvider} + * + * ### currentProvider + * + * ```ts + * web3.currentProvider + * web3.eth.currentProvider + * ... + * ``` + * Will return the current provider, otherwise `undefined`. + * + * #### Returns + * `Object`: The current provider, otherwise `undefined`. + * + * See details: {@link Web3.currentProvider} + * + * ### BatchRequest + * + * ```ts + * new web3.BatchRequest() + * new web3.BatchRequest() + * ... + * ``` + * Class to create and execute batch requests. + * + * #### Parameters + * none + * + * #### Returns + * `Object`: With the following methods: + * + * + `add(request)`: To add a request object to the batch call. + * + * + `execute()` : To execute the batch request. + * + * #### Example + * ```ts + * let request1: JsonRpcOptionalRequest = { + * id: 10, + * method: 'eth_getBalance', + * params: ["0xdc6bad79dab7ea733098f66f6c6f9dd008da3258", 'latest'], + * }; + * let request2: JsonRpcOptionalRequest = { + * id: 11, + * method: 'eth_getBalance', + * params: ["0x962f9a9c2a6c092474d24def35eccb3d9363265e", 'latest'], + * }; + * + * const batch = new web3.BatchRequest(); + * + * batch.add(request1); + * batch.add(request2); + * // add returns a deferred promise which can be used to run specific code after completion of each respective request. + * //const request2Promise = batch.add(request2); + * + * const response = await batch.execute(); + * ``` + * See details: {@link Web3.BatchRequest} + */ +/** + * This comment _supports3_ [Markdown](https://marked.js.org/) + */ + +import Web3 from './web3.js'; + +export * from './types.js'; +export default Web3; + +/** + * Named exports for all objects which are the default-exported-object in their packages + */ +export { Web3 }; +export { Web3Context, Web3PluginBase, Web3EthPluginBase } from 'web3-core'; +export { Web3Eth } from 'web3-eth'; +export { Contract } from 'web3-eth-contract'; +export { Iban } from 'web3-eth-iban'; +export { Personal } from 'web3-eth-personal'; +export { Net } from 'web3-net'; +export { HttpProvider } from 'web3-providers-http'; +export { WebSocketProvider } from 'web3-providers-ws'; +export { Web3Validator } from 'web3-validator'; + +/** + * Export all packages grouped by name spaces + */ +export * as core from 'web3-core'; +export * as errors from 'web3-errors'; +export * as eth from './eth.exports.js'; +export * as net from 'web3-net'; +export * as providers from './providers.exports.js'; +export * as rpcMethods from 'web3-rpc-methods'; +export * as types from 'web3-types'; +export * as utils from 'web3-utils'; +export * as validator from 'web3-validator'; + +/** + * Export all types from `web3-types` without a namespace (in addition to being available at `types` namespace). + * To enable the user to write: `function something(): Web3Api` without the need for `types.Web3Api`. + * And the same for `web3-errors`. Because this package contains error classes and constants. + */ +export * from 'web3-errors'; +export * from 'web3-types'; diff --git a/packages/web3/src/providers.exports.ts b/packages/web3/src/providers.exports.ts new file mode 100644 index 00000000000..c0bbadc1b23 --- /dev/null +++ b/packages/web3/src/providers.exports.ts @@ -0,0 +1,21 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +export { Eip1193Provider, SocketProvider } from 'web3-utils'; + +export * as http from 'web3-providers-http'; +export * as ws from 'web3-providers-ws'; diff --git a/packages/web3/src/types.ts b/packages/web3/src/types.ts new file mode 100644 index 00000000000..fb14e6b2e1a --- /dev/null +++ b/packages/web3/src/types.ts @@ -0,0 +1,95 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Bytes, Transaction } from 'web3-types'; +import Eth from 'web3-eth'; +import { + decodeLog, + decodeParameter, + decodeParameters, + encodeFunctionCall, + encodeFunctionSignature, + encodeParameter, + encodeParameters, +} from 'web3-eth-abi'; +import { + encrypt, + hashMessage, + recover, + recoverTransaction, + sign, + signTransaction, + Wallet, + Web3Account, +} from 'web3-eth-accounts'; +import { Contract } from 'web3-eth-contract'; +import { ENS } from 'web3-eth-ens'; +import { Net } from 'web3-net'; +import { Iban } from 'web3-eth-iban'; +import { Personal } from 'web3-eth-personal'; + +/** + * The Ethereum interface for main web3 object. It provides extra methods in addition to `web3-eth` interface. + * + * {@link web3_eth.Web3Eth} for details about the `Eth` interface. + */ +export interface Web3EthInterface extends Eth { + /** + * Extended [Contract](/api/web3-eth-contract/class/Contract) constructor for main `web3` object. See [Contract](/api/web3-eth-contract/class/Contract) for further details. + * + * You can use `.setProvider` on this constructor to set provider for **all the instances** of the contracts which were created by `web3.eth.Contract`. + * Please check the {@doclink guides/web3_upgrade_guide/x/providers_migration_guide | following guide} to understand more about setting provider. + * + * ```ts + * web3.eth.Contract.setProvider(myProvider) + * ``` + */ + Contract: typeof Contract; + Iban: typeof Iban; + net: Net; + ens: ENS; + abi: { + encodeEventSignature: typeof encodeFunctionSignature; + encodeFunctionCall: typeof encodeFunctionCall; + encodeFunctionSignature: typeof encodeFunctionSignature; + encodeParameter: typeof encodeParameter; + encodeParameters: typeof encodeParameters; + decodeParameter: typeof decodeParameter; + decodeParameters: typeof decodeParameters; + decodeLog: typeof decodeLog; + }; + accounts: { + create: () => Web3Account; + privateKeyToAccount: (privateKey: Uint8Array | string) => Web3Account; + signTransaction: ( + transaction: Transaction, + privateKey: Bytes, + ) => ReturnType; + recoverTransaction: typeof recoverTransaction; + hashMessage: typeof hashMessage; + sign: typeof sign; + recover: typeof recover; + encrypt: typeof encrypt; + decrypt: ( + keystore: string, + password: string, + options?: Record, + ) => Promise; + wallet: Wallet; + }; + personal: Personal; +} diff --git a/packages/web3/src/version.ts b/packages/web3/src/version.ts new file mode 100644 index 00000000000..5a68bd8fd0c --- /dev/null +++ b/packages/web3/src/version.ts @@ -0,0 +1 @@ +/* eslint-disable header/header */ export const Web3PkgInfo = { version: '4.2.1' }; diff --git a/packages/web3/src/web3.ts b/packages/web3/src/web3.ts new file mode 100644 index 00000000000..2b97963121b --- /dev/null +++ b/packages/web3/src/web3.ts @@ -0,0 +1,180 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// eslint-disable-next-line max-classes-per-file +import { + Web3Context, + Web3ContextInitOptions, + Web3ContextObject, + Web3SubscriptionConstructor, + isSupportedProvider, +} from 'web3-core'; +import { Web3Eth, RegisteredSubscription, registeredSubscriptions } from 'web3-eth'; +import Contract from 'web3-eth-contract'; +import { ENS, registryAddresses } from 'web3-eth-ens'; +import { Iban } from 'web3-eth-iban'; +import { Personal } from 'web3-eth-personal'; +import { Net } from 'web3-net'; +import * as utils from 'web3-utils'; +import { isNullish } from 'web3-utils'; +import { + Address, + ContractAbi, + ContractInitOptions, + EthExecutionAPI, + SupportedProviders, +} from 'web3-types'; +import { InvalidMethodParamsError } from 'web3-errors'; +import abi from './abi.js'; +import { initAccountsForContext } from './accounts.js'; +import { Web3EthInterface } from './types.js'; +import { Web3PkgInfo } from './version.js'; + +export class Web3< + CustomRegisteredSubscription extends { + [key: string]: Web3SubscriptionConstructor; + } = RegisteredSubscription, +> extends Web3Context { + public static version = Web3PkgInfo.version; + public static utils = utils; + public static modules = { + Web3Eth, + Iban, + Net, + ENS, + Personal, + }; + + public utils: typeof utils; + + public eth: Web3EthInterface; + + public constructor( + providerOrContext?: + | string + | SupportedProviders + | Web3ContextInitOptions, + ) { + if ( + isNullish(providerOrContext) || + (typeof providerOrContext === 'string' && providerOrContext.trim() === '') || + (typeof providerOrContext !== 'string' && + !isSupportedProvider(providerOrContext as SupportedProviders) && + !(providerOrContext as Web3ContextInitOptions).provider) + ) { + console.warn( + 'NOTE: web3.js is running without provider. You need to pass a provider in order to interact with the network!', + ); + } + + let contextInitOptions: Web3ContextInitOptions = {}; + if ( + typeof providerOrContext === 'string' || + isSupportedProvider(providerOrContext as SupportedProviders) + ) { + contextInitOptions.provider = providerOrContext as + | undefined + | string + | SupportedProviders; + } else if (providerOrContext) { + contextInitOptions = providerOrContext as Web3ContextInitOptions; + } else { + contextInitOptions = {}; + } + + contextInitOptions.registeredSubscriptions = { + // all the Eth standard subscriptions + ...registeredSubscriptions, + // overridden and combined with any custom subscriptions + ...(contextInitOptions.registeredSubscriptions ?? {}), + } as CustomRegisteredSubscription; + + super(contextInitOptions); + const accounts = initAccountsForContext(this); + + // Init protected properties + this._wallet = accounts.wallet; + this._accountProvider = accounts; + + this.utils = utils; + + // Have to use local alias to initiate contract context + // eslint-disable-next-line @typescript-eslint/no-this-alias + const self = this; + + class ContractBuilder extends Contract { + public constructor(jsonInterface: Abi); + public constructor(jsonInterface: Abi, address: Address); + public constructor(jsonInterface: Abi, options: ContractInitOptions); + public constructor(jsonInterface: Abi, address: Address, options: ContractInitOptions); + public constructor( + jsonInterface: Abi, + addressOrOptions?: Address | ContractInitOptions, + options?: ContractInitOptions, + ) { + if (typeof addressOrOptions === 'object' && typeof options === 'object') { + throw new InvalidMethodParamsError( + 'Should not provide options at both 2nd and 3rd parameters', + ); + } + if (isNullish(addressOrOptions)) { + super(jsonInterface, options, self.getContextObject() as Web3ContextObject); + } else if (typeof addressOrOptions === 'object') { + super( + jsonInterface, + addressOrOptions, + self.getContextObject() as Web3ContextObject, + ); + } else if (typeof addressOrOptions === 'string') { + super( + jsonInterface, + addressOrOptions, + options ?? {}, + self.getContextObject() as Web3ContextObject, + ); + } else { + throw new InvalidMethodParamsError(); + } + + super.subscribeToContextEvents(self); + } + } + + const eth = self.use(Web3Eth); + + // Eth Module + this.eth = Object.assign(eth, { + // ENS module + ens: self.use(ENS, registryAddresses.main), // registry address defaults to main network + + // Iban helpers + Iban, + + net: self.use(Net), + personal: self.use(Personal), + + // Contract helper and module + Contract: ContractBuilder, + + // ABI Helpers + abi, + + // Accounts helper + accounts, + }); + } +} +export default Web3; diff --git a/packages/web3/test/.eslintrc.js b/packages/web3/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3/test/cjs_black_box/.eslintrc.cjs b/packages/web3/test/cjs_black_box/.eslintrc.cjs new file mode 100644 index 00000000000..88d28e7e786 --- /dev/null +++ b/packages/web3/test/cjs_black_box/.eslintrc.cjs @@ -0,0 +1,12 @@ +module.exports = { + env: { + node: true, + commonjs: true, + es2021: true, + }, + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + ecmaVersion: 12 + }, +}; diff --git a/packages/web3/test/cjs_black_box/.yarnrc b/packages/web3/test/cjs_black_box/.yarnrc new file mode 100644 index 00000000000..c408289a8d4 --- /dev/null +++ b/packages/web3/test/cjs_black_box/.yarnrc @@ -0,0 +1 @@ +registry "http://localhost:4873" diff --git a/packages/web3/test/cjs_black_box/jest.config.js b/packages/web3/test/cjs_black_box/jest.config.js new file mode 100644 index 00000000000..06b150fe5c8 --- /dev/null +++ b/packages/web3/test/cjs_black_box/jest.config.js @@ -0,0 +1,11 @@ +/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +module.exports = { + globals: { + 'ts-jest': { + tsconfig: '../config/tsconfig.cjs.json', + }, + }, + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, +}; diff --git a/packages/web3/test/cjs_black_box/package.json b/packages/web3/test/cjs_black_box/package.json new file mode 100644 index 00000000000..0ba123857f9 --- /dev/null +++ b/packages/web3/test/cjs_black_box/package.json @@ -0,0 +1,26 @@ +{ + "name": "web3_black_box_cjs_tests", + "version": "1.0.0", + "main": "index.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "type": "commonjs", + "scripts": { + "test:ganache:http": "WEB3_SYSTEM_TEST_BACKEND=ganache WEB3_SYSTEM_TEST_PROVIDER=http://localhost:8545 jest", + "test:ganache:ws": "WEB3_SYSTEM_TEST_BACKEND=ganache WEB3_SYSTEM_TEST_PROVIDER=ws://localhost:8545 jest --forceExit", + "test:geth:http": "WEB3_SYSTEM_TEST_BACKEND=geth WEB3_SYSTEM_TEST_PROVIDER=http://localhost:8545 jest", + "test:geth:ws": "WEB3_SYSTEM_TEST_BACKEND=geth WEB3_SYSTEM_TEST_PROVIDER=ws://localhost:8545 jest --forceExit", + "test:infura:http": "WEB3_SYSTEM_TEST_BACKEND=infura jest", + "test:infura:ws": "WEB3_SYSTEM_TEST_BACKEND=infura jest --forceExit" + }, + "dependencies": { + "web3": "5.0.0" + }, + "devDependencies": { + "jest": "^28.1.3", + "ts-jest": "^28.0.7", + "web3-eth": "5.0.0", + "web3-eth-contract": "5.0.0", + "web3-validator": "5.0.0" + } +} diff --git a/packages/web3/test/cjs_black_box/test/batchRequest.test.ts b/packages/web3/test/cjs_black_box/test/batchRequest.test.ts new file mode 100644 index 00000000000..98035c0ce43 --- /dev/null +++ b/packages/web3/test/cjs_black_box/test/batchRequest.test.ts @@ -0,0 +1,67 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +/* eslint-disable import/no-relative-packages */ +/* eslint-disable @typescript-eslint/no-unsafe-call */ +import { + getSystemTestProvider, + closeOpenConnection, + isWs, +} from '../../shared_fixtures/system_tests_utils'; +// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires +const Web3 = require('web3').default; + +describe('CJS - Black Box Unit Tests - web3.BatchRequest', () => { + let web3: typeof Web3; + + beforeAll(() => { + web3 = new Web3(getSystemTestProvider()); + }); + + afterAll(async () => { + if (isWs) await closeOpenConnection(web3); + }); + + it('should make a batch request', async () => { + const request1 = { + id: 42, + method: 'eth_getBalance', + params: ['0x4242000000000000000000000000000000000000', 'latest'], + }; + const request2 = { + id: 24, + method: 'eth_getBalance', + params: ['0x2424000000000000000000000000000000000000', 'latest'], + }; + + const batch = new web3.BatchRequest(); + const request1Promise = batch.add(request1); + const request2Promise = batch.add(request2); + + const executePromise = batch.execute(); + const response = await Promise.all([request1Promise, request2Promise, executePromise]); + + const expectedResponse = [ + '0x0', + '0x0', + [ + { jsonrpc: '2.0', id: 42, result: '0x0' }, + { jsonrpc: '2.0', id: 24, result: '0x0' }, + ], + ]; + expect(response).toStrictEqual(expectedResponse); + }); +}); diff --git a/packages/web3/test/cjs_black_box/test/web3-eth-accounts/create.test.ts b/packages/web3/test/cjs_black_box/test/web3-eth-accounts/create.test.ts new file mode 100644 index 00000000000..c5cb2f0260b --- /dev/null +++ b/packages/web3/test/cjs_black_box/test/web3-eth-accounts/create.test.ts @@ -0,0 +1,61 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// TODO For some reason when running this test with a WebSocket provider +// the test takes a long time to run afterAll +import Web3 from 'web3'; +import { validator } from 'web3-validator'; +import { + closeOpenConnection, + getSystemTestProvider, + isWs, + // eslint-disable-next-line import/no-relative-packages +} from '../../../shared_fixtures/system_tests_utils'; + +jest.setTimeout(15000); + +// TODO Consider adding this to web3.eth.accounts package +const accountSchema = { + type: 'object', + required: ['address', 'privateKey'], + // TODO Should validation functions as well + // required: ['address', 'privateKey', 'signTransaction', 'sign', 'encrypt'], + properties: { + address: { type: 'string' }, + privateKey: { type: 'string' }, + }, +}; + +describe('Black Box Unit Tests - web3.eth.accounts.create', () => { + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(getSystemTestProvider()); + }); + + afterAll(async () => { + if (isWs) await closeOpenConnection(web3); + }); + + it('should create an account', () => { + const response = web3.eth.accounts.create(); + expect(response).toBeDefined(); + expect(response.signTransaction).toBeDefined(); + expect(response.sign).toBeDefined(); + expect(response.encrypt).toBeDefined(); + expect(validator.validateJSONSchema(accountSchema, response)).toBeUndefined(); + }); +}); diff --git a/packages/web3/test/cjs_black_box/test/web3-eth-accounts/hashMessage.test.ts b/packages/web3/test/cjs_black_box/test/web3-eth-accounts/hashMessage.test.ts new file mode 100644 index 00000000000..88959f84aa9 --- /dev/null +++ b/packages/web3/test/cjs_black_box/test/web3-eth-accounts/hashMessage.test.ts @@ -0,0 +1,47 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// TODO For some reason when running this test with a WebSocket provider +// the test takes a long time to run afterAll +import { + closeOpenConnection, + getSystemTestProvider, + isWs, + // eslint-disable-next-line import/no-relative-packages +} from '../../../shared_fixtures/system_tests_utils'; +/* eslint-disable @typescript-eslint/no-unsafe-call */ +// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires +const Web3 = require('web3').default; + +jest.setTimeout(15000); + +describe('CJS - Black Box Unit Tests - web3.eth.accounts.hashMessage', () => { + let web3: typeof Web3; + + beforeAll(() => { + web3 = new Web3(getSystemTestProvider()); + }); + + afterAll(async () => { + if (isWs) await closeOpenConnection(web3); + }); + + it('should hash provided message', () => { + expect(web3.eth.accounts.hashMessage('Hello World')).toBe( + '0xa1de988600a42c4b4ab089b619297c17d53cffae5d5120d82d8a92d0bb3b78f2', + ); + }); +}); diff --git a/packages/web3/test/cjs_black_box/test/web3-eth-contract/erc20.test.ts b/packages/web3/test/cjs_black_box/test/web3-eth-contract/erc20.test.ts new file mode 100644 index 00000000000..87033b1ea1f --- /dev/null +++ b/packages/web3/test/cjs_black_box/test/web3-eth-contract/erc20.test.ts @@ -0,0 +1,100 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Contract from 'web3-eth-contract'; +import { + closeOpenConnection, + describeIf, + getSystemTestBackend, + isWs, + getSystemTestProvider, + createNewAccount, + // eslint-disable-next-line import/no-relative-packages +} from '../../../shared_fixtures/system_tests_utils'; +import { + ERC20TokenAbi, + ERC20TokenBytecode, + // eslint-disable-next-line import/no-relative-packages +} from '../../../shared_fixtures/contracts/ERC20Token'; +/* eslint-disable @typescript-eslint/no-unsafe-call */ +// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires +const Web3 = require('web3').default; + +describeIf(getSystemTestBackend() === 'infura')( + 'CJS - Black Box Unit Tests - web3.eth.Contract', + () => { + describe('Infura - ERC20', () => { + const mainNetUSDTAddress = '0xdAC17F958D2ee523a2206206994597C13D831ec7'; + + let web3: typeof Web3; + + beforeAll(() => { + web3 = new Web3(getSystemTestProvider()); + }); + + it('should get deployed contract info', async () => { + const contract = new web3.eth.Contract(ERC20TokenAbi, mainNetUSDTAddress); + + expect(await contract.methods.name().call()).toBe('Tether USD'); + expect(await contract.methods.symbol().call()).toBe('USDT'); + expect(await contract.methods.decimals().call()).toBe(BigInt(6)); + }); + }); + }, +); + +describeIf(getSystemTestBackend() === 'geth' || getSystemTestBackend() === 'ganache')( + 'Black Box Unit Tests - web3.eth.Contract', + () => { + describe('Geth || Ganache - ERC20', () => { + let account; + let web3: typeof Web3; + let deployedContract: Contract; + + beforeAll(async () => { + account = await createNewAccount({ + unlock: true, + refill: true, + doNotImport: false, + }); + + web3 = new Web3(getSystemTestProvider()); + deployedContract = await new web3.eth.Contract(ERC20TokenAbi) + .deploy({ + data: ERC20TokenBytecode, + arguments: ['420'], + }) + .send({ from: account.address, gas: '10000000' }); + }); + + afterAll(async () => { + if (isWs) await closeOpenConnection(web3); + }); + + it('should get deployed contract info', async () => { + const contract = new web3.eth.Contract( + ERC20TokenAbi, + deployedContract.options.address, + ); + + expect(await contract.methods.name().call()).toBe('Gold'); + expect(await contract.methods.symbol().call()).toBe('GLD'); + expect(await contract.methods.decimals().call()).toBe(BigInt(18)); + expect(await contract.methods.totalSupply().call()).toBe(BigInt(420)); + }); + }); + }, +); diff --git a/packages/web3/test/cjs_black_box/test/web3-eth/getBlock.test.ts b/packages/web3/test/cjs_black_box/test/web3-eth/getBlock.test.ts new file mode 100644 index 00000000000..9eb415c9978 --- /dev/null +++ b/packages/web3/test/cjs_black_box/test/web3-eth/getBlock.test.ts @@ -0,0 +1,51 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { validator } from 'web3-validator'; +import { blockSchema } from 'web3-eth'; +import { + closeOpenConnection, + getSystemTestProvider, + isWs, + // eslint-disable-next-line import/no-relative-packages +} from '../../../shared_fixtures/system_tests_utils'; +/* eslint-disable @typescript-eslint/no-unsafe-call */ +// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires +const Web3 = require('web3').default; + +describe('CJS - Black Box Unit Tests - web3.eth.getBlock', () => { + let web3: typeof Web3; + + beforeAll(() => { + web3 = new Web3(getSystemTestProvider()); + }); + + afterAll(async () => { + if (isWs) await closeOpenConnection(web3); + }); + + it('should get the latest block and validate it against blockSchema', async () => { + const response = await web3.eth.getBlock('latest'); + expect(response).toBeDefined(); + expect(validator.validateJSONSchema(blockSchema, response)).toBeUndefined(); + }); + + it('should get the latest block and validate it against blockSchema - hydrated = true', async () => { + const response = await web3.eth.getBlock('latest', true); + expect(response).toBeDefined(); + expect(validator.validateJSONSchema(blockSchema, response)).toBeUndefined(); + }); +}); diff --git a/packages/web3/test/cjs_black_box/test/web3-eth/getTransaction.test.ts b/packages/web3/test/cjs_black_box/test/web3-eth/getTransaction.test.ts new file mode 100644 index 00000000000..b65fe6e4135 --- /dev/null +++ b/packages/web3/test/cjs_black_box/test/web3-eth/getTransaction.test.ts @@ -0,0 +1,71 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + closeOpenConnection, + getSystemTestProvider, + isWs, + itIf, + // eslint-disable-next-line import/no-relative-packages +} from '../../../shared_fixtures/system_tests_utils'; +/* eslint-disable @typescript-eslint/no-unsafe-call */ +// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires +const Web3 = require('web3').default; + +describe('CJS - Black Box Unit Tests - web3.eth.getTransaction', () => { + let web3: typeof Web3; + + beforeAll(() => { + web3 = new Web3(getSystemTestProvider()); + }); + + afterAll(async () => { + if (isWs) await closeOpenConnection(web3); + }); + + itIf(process.env.WEB3_SYSTEM_TEST_BACKEND === 'infura')( + 'should get specific USDT transaction', + async () => { + const expectedTxObject = { + accessList: [], + blockHash: '0x8ad298dbdf859f953b97cc27218e7f7f2af4237817a8dbd1d987891520286612', + blockNumber: BigInt(15230806), + chainId: BigInt(1), + from: '0x4c9af439b1a6761b8e549d8d226a468a6b2803a8', + gas: BigInt(120000), + gasPrice: BigInt(9022588986), + hash: '0x133048bfcf6c0f7f8d1f5681df9607802894667acb46f4a3ba8ba187421dfc2b', + input: '0xa9059cbb000000000000000000000000d9e46776dbc0e37d6f89be3a23885234c75702b6000000000000000000000000000000000000000000000000000000012a05f200', + maxFeePerGas: BigInt(32251128981), + maxPriorityFeePerGas: BigInt(1000000000), + nonce: BigInt(83553), + r: '0x1240db6f5b2245729b8593ff43230795e3c4c1005776dd6841de68da926096e9', + s: '0x48678639e5b752a69dcc62b4ef9417b3f65e4d4c75ec99df8457b02b339799de', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: BigInt(190), + type: BigInt(2), + v: BigInt(1), + value: BigInt(0), + }; + + const response = await web3.eth.getTransaction( + '0x133048bfcf6c0f7f8d1f5681df9607802894667acb46f4a3ba8ba187421dfc2b', + ); + // eslint-disable-next-line jest/no-standalone-expect + expect(response).toStrictEqual(expectedTxObject); + }, + ); +}); diff --git a/packages/web3/test/cjs_black_box/tsconfig.json b/packages/web3/test/cjs_black_box/tsconfig.json new file mode 100644 index 00000000000..0a25a9556aa --- /dev/null +++ b/packages/web3/test/cjs_black_box/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.cjs.json", + "compilerOptions": { + "declaration": false, + "declarationMap": false + }, + "include": ["./**/*", "../node_modules/jest-extended/types/**/*.ts"] +} diff --git a/packages/web3/test/cjs_black_box/yarn.lock b/packages/web3/test/cjs_black_box/yarn.lock new file mode 100644 index 00000000000..58987d9d096 --- /dev/null +++ b/packages/web3/test/cjs_black_box/yarn.lock @@ -0,0 +1,3025 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adraffy/ens-normalize@^1.8.8": + version "1.9.0" + resolved "http://localhost:4873/@adraffy/ens-normalize/-/ens-normalize-1.9.0.tgz#223572538f6bea336750039bb43a4016dcc8182d" + integrity sha512-iowxq3U30sghZotgl4s/oJRci6WPBfNO5YYgk2cIOMCHr3LeGPcsZjCEr+33Q4N+oV3OABDAtA+pyvWjbvBifQ== + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "http://localhost:4873/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": + version "7.21.4" + resolved "http://localhost:4873/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.21.4": + version "7.21.4" + resolved "http://localhost:4873/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" + integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.21.4" + resolved "http://localhost:4873/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" + integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.4" + "@babel/helper-compilation-targets" "^7.21.4" + "@babel/helper-module-transforms" "^7.21.2" + "@babel/helpers" "^7.21.0" + "@babel/parser" "^7.21.4" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.4" + "@babel/types" "^7.21.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/generator@^7.21.4", "@babel/generator@^7.7.2": + version "7.21.4" + resolved "http://localhost:4873/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" + integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== + dependencies: + "@babel/types" "^7.21.4" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.21.4": + version "7.21.4" + resolved "http://localhost:4873/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" + integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== + dependencies: + "@babel/compat-data" "^7.21.4" + "@babel/helper-validator-option" "^7.21.0" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "http://localhost:4873/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "http://localhost:4873/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "http://localhost:4873/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.18.6": + version "7.21.4" + resolved "http://localhost:4873/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== + dependencies: + "@babel/types" "^7.21.4" + +"@babel/helper-module-transforms@^7.21.2": + version "7.21.2" + resolved "http://localhost:4873/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" + integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.2" + "@babel/types" "^7.21.2" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0": + version "7.20.2" + resolved "http://localhost:4873/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== + +"@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "http://localhost:4873/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== + dependencies: + "@babel/types" "^7.20.2" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "http://localhost:4873/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "http://localhost:4873/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "http://localhost:4873/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.21.0": + version "7.21.0" + resolved "http://localhost:4873/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== + +"@babel/helpers@^7.21.0": + version "7.21.0" + resolved "http://localhost:4873/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" + integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== + dependencies: + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "http://localhost:4873/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": + version "7.21.4" + resolved "http://localhost:4873/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" + integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "http://localhost:4873/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "http://localhost:4873/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "http://localhost:4873/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "http://localhost:4873/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "http://localhost:4873/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "http://localhost:4873/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.21.4" + resolved "http://localhost:4873/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" + integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/template@^7.20.7", "@babel/template@^7.3.3": + version "7.20.7" + resolved "http://localhost:4873/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4", "@babel/traverse@^7.7.2": + version "7.21.4" + resolved "http://localhost:4873/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" + integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.4" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.21.4" + "@babel/types" "^7.21.4" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.21.4" + resolved "http://localhost:4873/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" + integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "http://localhost:4873/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": + version "2.6.5" + resolved "http://localhost:4873/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + +"@ethereumjs/tx@^3.5.2": + version "3.5.2" + resolved "http://localhost:4873/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== + dependencies: + "@ethereumjs/common" "^2.6.4" + ethereumjs-util "^7.1.5" + +"@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "http://localhost:4873/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "http://localhost:4873/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "http://localhost:4873/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "http://localhost:4873/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "http://localhost:4873/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + +"@jest/core@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest/core/-/core-28.1.3.tgz#0ebf2bd39840f1233cd5f2d1e6fc8b71bd5a1ac7" + integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/reporters" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^28.1.3" + jest-config "^28.1.3" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-resolve-dependencies "^28.1.3" + jest-runner "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + jest-watcher "^28.1.3" + micromatch "^4.0.4" + pretty-format "^28.1.3" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" + integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== + dependencies: + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + dependencies: + jest-get-type "^28.0.2" + +"@jest/expect@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest/expect/-/expect-28.1.3.tgz#9ac57e1d4491baca550f6bdbd232487177ad6a72" + integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== + dependencies: + expect "^28.1.3" + jest-snapshot "^28.1.3" + +"@jest/fake-timers@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" + integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== + dependencies: + "@jest/types" "^28.1.3" + "@sinonjs/fake-timers" "^9.1.2" + "@types/node" "*" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +"@jest/globals@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest/globals/-/globals-28.1.3.tgz#a601d78ddc5fdef542728309894895b4a42dc333" + integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/types" "^28.1.3" + +"@jest/reporters@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest/reporters/-/reporters-28.1.3.tgz#9adf6d265edafc5fc4a434cfb31e2df5a67a369a" + integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + jest-worker "^28.1.3" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + terminal-link "^2.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/source-map@^28.1.2": + version "28.1.2" + resolved "http://localhost:4873/@jest/source-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" + integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== + dependencies: + "@jridgewell/trace-mapping" "^0.3.13" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== + dependencies: + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz#9d0c283d906ac599c74bde464bc0d7e6a82886c3" + integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== + dependencies: + "@jest/test-result" "^28.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + slash "^3.0.0" + +"@jest/transform@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" + integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.1" + +"@jest/types@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + dependencies: + "@jest/schemas" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "http://localhost:4873/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "http://localhost:4873/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "http://localhost:4873/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "http://localhost:4873/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "http://localhost:4873/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "http://localhost:4873/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "http://localhost:4873/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "http://localhost:4873/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@scure/base@~1.1.0": + version "1.1.1" + resolved "http://localhost:4873/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" + integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "http://localhost:4873/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== + dependencies: + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "http://localhost:4873/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + +"@sinclair/typebox@^0.24.1": + version "0.24.51" + resolved "http://localhost:4873/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" + integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== + +"@sinonjs/commons@^1.7.0": + version "1.8.6" + resolved "http://localhost:4873/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^9.1.2": + version "9.1.2" + resolved "http://localhost:4873/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@types/babel__core@^7.1.14": + version "7.20.0" + resolved "http://localhost:4873/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" + integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "http://localhost:4873/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "http://localhost:4873/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.18.3" + resolved "http://localhost:4873/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" + integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== + dependencies: + "@babel/types" "^7.3.0" + +"@types/bn.js@^5.1.0": + version "5.1.1" + resolved "http://localhost:4873/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" + integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== + dependencies: + "@types/node" "*" + +"@types/graceful-fs@^4.1.3": + version "4.1.6" + resolved "http://localhost:4873/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "http://localhost:4873/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "http://localhost:4873/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "http://localhost:4873/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/node@*": + version "18.15.11" + resolved "http://localhost:4873/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" + integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== + +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "http://localhost:4873/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.1.5": + version "2.7.2" + resolved "http://localhost:4873/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" + integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== + +"@types/secp256k1@^4.0.1": + version "4.0.3" + resolved "http://localhost:4873/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + dependencies: + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "http://localhost:4873/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/yargs-parser@*": + version "21.0.0" + resolved "http://localhost:4873/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.24" + resolved "http://localhost:4873/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== + dependencies: + "@types/yargs-parser" "*" + +ajv@^8.11.0: + version "8.12.0" + resolved "http://localhost:4873/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "http://localhost:4873/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "http://localhost:4873/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "http://localhost:4873/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "http://localhost:4873/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "http://localhost:4873/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3: + version "3.1.3" + resolved "http://localhost:4873/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "http://localhost:4873/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +babel-jest@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" + integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== + dependencies: + "@jest/transform" "^28.1.3" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^28.1.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "http://localhost:4873/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" + integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "http://localhost:4873/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" + integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== + dependencies: + babel-plugin-jest-hoist "^28.1.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "http://localhost:4873/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.9" + resolved "http://localhost:4873/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +blakejs@^1.1.0: + version "1.2.1" + resolved "http://localhost:4873/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@^4.11.9: + version "4.12.0" + resolved "http://localhost:4873/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "http://localhost:4873/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "http://localhost:4873/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2: + version "3.0.2" + resolved "http://localhost:4873/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "http://localhost:4873/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "http://localhost:4873/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserslist@^4.21.3: + version "4.21.5" + resolved "http://localhost:4873/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +bs-logger@0.x: + version "0.2.6" + resolved "http://localhost:4873/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bs58@^4.0.0: + version "4.0.1" + resolved "http://localhost:4873/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "http://localhost:4873/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +bser@2.1.1: + version "2.1.1" + resolved "http://localhost:4873/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "http://localhost:4873/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "http://localhost:4873/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +callsites@^3.0.0: + version "3.1.0" + resolved "http://localhost:4873/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "http://localhost:4873/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "http://localhost:4873/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001449: + version "1.0.30001477" + resolved "http://localhost:4873/caniuse-lite/-/caniuse-lite-1.0.30001477.tgz#a2ffb2276258233034bbb869d4558b02658a511e" + integrity sha512-lZim4iUHhGcy5p+Ri/G7m84hJwncj+Kz7S5aD4hoQfslKZJgt0tHc/hafVbqHC5bbhHb+mrW2JOUHkI5KH7toQ== + +chalk@^2.0.0: + version "2.4.2" + resolved "http://localhost:4873/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "http://localhost:4873/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "http://localhost:4873/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +ci-info@^3.2.0: + version "3.8.0" + resolved "http://localhost:4873/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "http://localhost:4873/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "http://localhost:4873/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +cliui@^8.0.1: + version "8.0.1" + resolved "http://localhost:4873/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "http://localhost:4873/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "http://localhost:4873/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "http://localhost:4873/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "http://localhost:4873/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "http://localhost:4873/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "http://localhost:4873/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "http://localhost:4873/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "http://localhost:4873/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +crc-32@^1.2.0: + version "1.2.2" + resolved "http://localhost:4873/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "http://localhost:4873/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "http://localhost:4873/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-fetch@^3.1.5: + version "3.1.5" + resolved "http://localhost:4873/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "http://localhost:4873/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.4" + resolved "http://localhost:4873/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +dedent@^0.7.0: + version "0.7.0" + resolved "http://localhost:4873/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "http://localhost:4873/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "http://localhost:4873/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^28.1.1: + version "28.1.1" + resolved "http://localhost:4873/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" + integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== + +electron-to-chromium@^1.4.284: + version "1.4.356" + resolved "http://localhost:4873/electron-to-chromium/-/electron-to-chromium-1.4.356.tgz#b75a8a8c31d571f6024310cc980a08cd6c15a8c5" + integrity sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A== + +elliptic@6.5.4, elliptic@^6.5.4: + version "6.5.4" + resolved "http://localhost:4873/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@^0.10.2: + version "0.10.2" + resolved "http://localhost:4873/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "http://localhost:4873/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +error-ex@^1.3.1: + version "1.3.2" + resolved "http://localhost:4873/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "http://localhost:4873/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +esprima@^4.0.0: + version "4.0.1" + resolved "http://localhost:4873/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "http://localhost:4873/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.1.2: + version "1.2.0" + resolved "http://localhost:4873/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "http://localhost:4873/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "http://localhost:4873/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^5.0.0: + version "5.1.1" + resolved "http://localhost:4873/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "http://localhost:4873/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== + dependencies: + "@jest/expect-utils" "^28.1.3" + jest-get-type "^28.0.2" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "http://localhost:4873/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "http://localhost:4873/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "http://localhost:4873/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "http://localhost:4873/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "http://localhost:4873/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2: + version "2.3.2" + resolved "http://localhost:4873/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "http://localhost:4873/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "http://localhost:4873/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "http://localhost:4873/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "http://localhost:4873/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "http://localhost:4873/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "http://localhost:4873/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "http://localhost:4873/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.2.9: + version "4.2.11" + resolved "http://localhost:4873/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has@^1.0.3: + version "1.0.3" + resolved "http://localhost:4873/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "http://localhost:4873/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "http://localhost:4873/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "http://localhost:4873/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "http://localhost:4873/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +human-signals@^2.1.0: + version "2.1.0" + resolved "http://localhost:4873/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +import-local@^3.0.2: + version "3.1.0" + resolved "http://localhost:4873/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "http://localhost:4873/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "http://localhost:4873/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "http://localhost:4873/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "http://localhost:4873/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-core-module@^2.11.0: + version "2.11.0" + resolved "http://localhost:4873/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "http://localhost:4873/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "http://localhost:4873/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-stream@^2.0.0: + version "2.0.1" + resolved "http://localhost:4873/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +isexe@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isomorphic-ws@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" + integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "http://localhost:4873/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "http://localhost:4873/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "http://localhost:4873/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "http://localhost:4873/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" + integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== + dependencies: + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-circus/-/jest-circus-28.1.3.tgz#d14bd11cf8ee1a03d69902dc47b6bd4634ee00e4" + integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + p-limit "^3.1.0" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-cli/-/jest-cli-28.1.3.tgz#558b33c577d06de55087b8448d373b9f654e46b2" + integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== + dependencies: + "@jest/core" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + prompts "^2.0.1" + yargs "^17.3.1" + +jest-config@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-config/-/jest-config-28.1.3.tgz#e315e1f73df3cac31447eed8b8740a477392ec60" + integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^28.1.3" + "@jest/types" "^28.1.3" + babel-jest "^28.1.3" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^28.1.3" + jest-environment-node "^28.1.3" + jest-get-type "^28.0.2" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-runner "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^28.1.3" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== + dependencies: + chalk "^4.0.0" + diff-sequences "^28.1.1" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-docblock@^28.1.1: + version "28.1.1" + resolved "http://localhost:4873/jest-docblock/-/jest-docblock-28.1.1.tgz#6f515c3bf841516d82ecd57a62eed9204c2f42a8" + integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== + dependencies: + detect-newline "^3.0.0" + +jest-each@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-each/-/jest-each-28.1.3.tgz#bdd1516edbe2b1f3569cfdad9acd543040028f81" + integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== + dependencies: + "@jest/types" "^28.1.3" + chalk "^4.0.0" + jest-get-type "^28.0.2" + jest-util "^28.1.3" + pretty-format "^28.1.3" + +jest-environment-node@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-environment-node/-/jest-environment-node-28.1.3.tgz#7e74fe40eb645b9d56c0c4b70ca4357faa349be5" + integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +jest-get-type@^28.0.2: + version "28.0.2" + resolved "http://localhost:4873/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" + integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== + +jest-haste-map@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" + integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== + dependencies: + "@jest/types" "^28.1.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + jest-worker "^28.1.3" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz#a6685d9b074be99e3adee816ce84fd30795e654d" + integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== + dependencies: + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== + dependencies: + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-message-util@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" + integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "http://localhost:4873/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^28.0.2: + version "28.0.2" + resolved "http://localhost:4873/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz#8c65d7583460df7275c6ea2791901fa975c1fe66" + integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== + dependencies: + jest-regex-util "^28.0.2" + jest-snapshot "^28.1.3" + +jest-resolve@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-resolve/-/jest-resolve-28.1.3.tgz#cfb36100341ddbb061ec781426b3c31eb51aa0a8" + integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-pnp-resolver "^1.2.2" + jest-util "^28.1.3" + jest-validate "^28.1.3" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-runner/-/jest-runner-28.1.3.tgz#5eee25febd730b4713a2cdfd76bdd5557840f9a1" + integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/environment" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.10.2" + graceful-fs "^4.2.9" + jest-docblock "^28.1.1" + jest-environment-node "^28.1.3" + jest-haste-map "^28.1.3" + jest-leak-detector "^28.1.3" + jest-message-util "^28.1.3" + jest-resolve "^28.1.3" + jest-runtime "^28.1.3" + jest-util "^28.1.3" + jest-watcher "^28.1.3" + jest-worker "^28.1.3" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-runtime/-/jest-runtime-28.1.3.tgz#a57643458235aa53e8ec7821949e728960d0605f" + integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/globals" "^28.1.3" + "@jest/source-map" "^28.1.2" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-snapshot/-/jest-snapshot-28.1.3.tgz#17467b3ab8ddb81e2f605db05583d69388fc0668" + integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^28.1.3" + graceful-fs "^4.2.9" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + jest-haste-map "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + natural-compare "^1.4.0" + pretty-format "^28.1.3" + semver "^7.3.5" + +jest-util@^28.0.0, jest-util@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-validate/-/jest-validate-28.1.3.tgz#e322267fd5e7c64cea4629612c357bbda96229df" + integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== + dependencies: + "@jest/types" "^28.1.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^28.0.2" + leven "^3.1.0" + pretty-format "^28.1.3" + +jest-watcher@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== + dependencies: + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^28.1.3" + string-length "^4.0.1" + +jest-worker@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest/-/jest-28.1.3.tgz#e9c6a7eecdebe3548ca2b18894a50f45b36dfc6b" + integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== + dependencies: + "@jest/core" "^28.1.3" + "@jest/types" "^28.1.3" + import-local "^3.0.2" + jest-cli "^28.1.3" + +js-sha3@0.8.0: + version "0.8.0" + resolved "http://localhost:4873/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "http://localhost:4873/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "http://localhost:4873/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "http://localhost:4873/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@^2.2.1, json5@^2.2.2: + version "2.2.3" + resolved "http://localhost:4873/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +keccak@^3.0.0: + version "3.0.3" + resolved "http://localhost:4873/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" + integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +kleur@^3.0.3: + version "3.0.3" + resolved "http://localhost:4873/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "http://localhost:4873/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "http://localhost:4873/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.memoize@4.x: + version "4.1.2" + resolved "http://localhost:4873/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "http://localhost:4873/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "http://localhost:4873/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "http://localhost:4873/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x: + version "1.3.6" + resolved "http://localhost:4873/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "http://localhost:4873/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +md5.js@^1.3.4: + version "1.3.5" + resolved "http://localhost:4873/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^4.0.4: + version "4.0.5" + resolved "http://localhost:4873/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "http://localhost:4873/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "http://localhost:4873/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "http://localhost:4873/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "http://localhost:4873/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +ms@2.1.2: + version "2.1.2" + resolved "http://localhost:4873/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "http://localhost:4873/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "http://localhost:4873/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-fetch@2.6.7: + version "2.6.7" + resolved "http://localhost:4873/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@^4.2.0: + version "4.6.0" + resolved "http://localhost:4873/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" + integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== + +node-int64@^0.4.0: + version "0.4.0" + resolved "http://localhost:4873/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.8: + version "2.0.10" + resolved "http://localhost:4873/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== + +normalize-path@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "http://localhost:4873/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +once@^1.3.0: + version "1.4.0" + resolved "http://localhost:4873/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "http://localhost:4873/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "http://localhost:4873/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.1.0: + version "3.1.0" + resolved "http://localhost:4873/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "http://localhost:4873/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "http://localhost:4873/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-json@^5.2.0: + version "5.2.0" + resolved "http://localhost:4873/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-exists@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "http://localhost:4873/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "http://localhost:4873/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "http://localhost:4873/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "http://localhost:4873/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picocolors@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "http://localhost:4873/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pirates@^4.0.4: + version "4.0.5" + resolved "http://localhost:4873/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "http://localhost:4873/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pretty-format@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + dependencies: + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "http://localhost:4873/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +punycode@^2.1.0: + version "2.3.0" + resolved "http://localhost:4873/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "http://localhost:4873/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +react-is@^18.0.0: + version "18.2.0" + resolved "http://localhost:4873/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +readable-stream@^3.6.0: + version "3.6.2" + resolved "http://localhost:4873/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "http://localhost:4873/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "http://localhost:4873/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^1.1.0: + version "1.1.1" + resolved "http://localhost:4873/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" + integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== + +resolve@^1.20.0: + version "1.22.2" + resolved "http://localhost:4873/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +rimraf@^3.0.0: + version "3.0.2" + resolved "http://localhost:4873/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "http://localhost:4873/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.4: + version "2.2.7" + resolved "http://localhost:4873/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "http://localhost:4873/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +scrypt-js@^3.0.0: + version "3.0.1" + resolved "http://localhost:4873/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@^4.0.1: + version "4.0.3" + resolved "http://localhost:4873/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +semver@7.x, semver@^7.3.5: + version "7.3.8" + resolved "http://localhost:4873/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "http://localhost:4873/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +setimmediate@^1.0.5: + version "1.0.5" + resolved "http://localhost:4873/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "http://localhost:4873/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "http://localhost:4873/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "http://localhost:4873/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@0.5.13: + version "0.5.13" + resolved "http://localhost:4873/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "http://localhost:4873/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "http://localhost:4873/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stack-utils@^2.0.3: + version "2.0.6" + resolved "http://localhost:4873/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "http://localhost:4873/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "http://localhost:4873/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "http://localhost:4873/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "http://localhost:4873/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "http://localhost:4873/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.3.0: + version "5.5.0" + resolved "http://localhost:4873/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "http://localhost:4873/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "http://localhost:4873/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "http://localhost:4873/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +terminal-link@^2.0.0: + version "2.1.1" + resolved "http://localhost:4873/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "http://localhost:4873/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +tmpl@1.0.5: + version "1.0.5" + resolved "http://localhost:4873/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "http://localhost:4873/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "http://localhost:4873/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-jest@^28.0.7: + version "28.0.8" + resolved "http://localhost:4873/ts-jest/-/ts-jest-28.0.8.tgz#cd204b8e7a2f78da32cf6c95c9a6165c5b99cc73" + integrity sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^28.0.0" + json5 "^2.2.1" + lodash.memoize "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "^21.0.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "http://localhost:4873/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "http://localhost:4873/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +update-browserslist-db@^1.0.10: + version "1.0.10" + resolved "http://localhost:4873/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "http://localhost:4873/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "http://localhost:4873/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +v8-to-istanbul@^9.0.1: + version "9.1.0" + resolved "http://localhost:4873/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + +walker@^1.0.8: + version "1.0.8" + resolved "http://localhost:4873/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +web3-core@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-core/-/web3-core-5.0.0.tgz#35e8df92dff96d46b7e9c565946a2e54fa5aa4f1" + integrity sha512-vVtZMUbZasYd/4bqHOP3t/l3dHOFzYCPnsxZM+ptc2p96GvryC6/OwwZZ6eh14bkih7VvSmUX/heuajCK4HQ1g== + dependencies: + web3-errors "^5.0.0" + web3-eth-iban "^5.0.0" + web3-providers-http "^5.0.0" + web3-providers-ipc "^5.0.0" + web3-providers-ws "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + web3-validator "^5.0.0" + +web3-errors@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-errors/-/web3-errors-5.0.0.tgz#3bee981fc4cb31229eeadc0a3c365f2e59fd26ee" + integrity sha512-9ctSvRebarCS6rTQIwNo+w+bKn1KKC52R9W3fJjD13X47G/tQ1zTTGcsVkNRq5qgsyjJmbmDe8pJhYOLfDj1gg== + dependencies: + web3-types "^5.0.0" + +web3-eth-abi@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth-abi/-/web3-eth-abi-5.0.0.tgz#f88c78121a3f65107b44b34638e9a534e8cbdff6" + integrity sha512-TYsp6uXzXKSxJOEmWVkwyaFeFYrLCiu++Y4kAYXKFXOY+pSWGQ1owml/24KE+nLO9INvXir4ATxGVC3SuhZeYA== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + +web3-eth-accounts@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth-accounts/-/web3-eth-accounts-5.0.0.tgz#75d223096e899db803bed2c684b8d542ea9b3cda" + integrity sha512-btDSO3A4EgAe3ibGQRjJOHPkA6ngMWWcgpvmQCQFBolCQQhGSiV72ywtjrDakJQtDPbdjKDGnFKQCzTC+dudWw== + dependencies: + "@ethereumjs/tx" "^3.5.2" + ethereum-cryptography "^1.1.2" + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + web3-validator "^5.0.0" + +web3-eth-contract@5.0.0, web3-eth-contract@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth-contract/-/web3-eth-contract-5.0.0.tgz#f54ccbc1194227f0e319358c924cd15732f01504" + integrity sha512-dmzzYo56rzIAWHYIyU7drf5pRNTqHzfV/gyZIhZr/r5/9B4fwnmaROeDmiYvvGHtRa7bYbQ4/BFbyBvc+Mv6Ag== + dependencies: + web3-core "^5.0.0" + web3-errors "^5.0.0" + web3-eth "^5.0.0" + web3-eth-abi "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + web3-validator "^5.0.0" + +web3-eth-ens@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth-ens/-/web3-eth-ens-5.0.0.tgz#938bf7982ab7208cb281745e9be9854a94d5f1ba" + integrity sha512-bz/brHWOvW8nSkt/8RPTi6aEuyNZHkl9W8siIpPHMPfNPpV49IGHhLz8WA9UuEhVbs+VJj5/7qMWkRVujS+omA== + dependencies: + "@adraffy/ens-normalize" "^1.8.8" + web3-core "^5.0.0" + web3-errors "^5.0.0" + web3-eth "^5.0.0" + web3-eth-contract "^5.0.0" + web3-net "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + web3-validator "^5.0.0" + +web3-eth-iban@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth-iban/-/web3-eth-iban-5.0.0.tgz#381a800d82d0a9cff5d812d672b304391ddbb836" + integrity sha512-jB2uQynx4/30ODjGKPr/v3ftHYnqfAq/JGOZaBSdj5uZnCOnwZO5zHQE7LeBDsvyR0D5zkSVtKfGJHyChrod9Q== + dependencies: + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + web3-validator "^5.0.0" + +web3-eth-personal@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth-personal/-/web3-eth-personal-5.0.0.tgz#2bef135325ce087db83b2965d6bf81b32a3b1cac" + integrity sha512-RjTPVrXQ1xHNtLDBiMwBctBQRyddEt2pdvS/Ew7NJLJUHYLD4guzc1u/iszx5skrGA7TV5PCQGwFVFkUg08Bug== + dependencies: + web3-core "^5.0.0" + web3-eth "^5.0.0" + web3-rpc-methods "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + web3-validator "^5.0.0" + +web3-eth@5.0.0, web3-eth@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth/-/web3-eth-5.0.0.tgz#e3c0767117191415b912288689bdc40790e1e1e7" + integrity sha512-K0i1CT/aFJFEVPfo8GHSVMvFz+XkFxVeOSjNlXyjD5lmOhZc95axxjlqFRwDXphy//GilggTlVuYC4NWpueQaw== + dependencies: + "@ethereumjs/common" "^2.6.5" + "@ethereumjs/tx" "^3.5.2" + setimmediate "^1.0.5" + web3-core "^5.0.0" + web3-errors "^5.0.0" + web3-eth-abi "^5.0.0" + web3-eth-accounts "^5.0.0" + web3-net "^5.0.0" + web3-providers-ws "^5.0.0" + web3-rpc-methods "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + web3-validator "^5.0.0" + +web3-net@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-net/-/web3-net-5.0.0.tgz#425fe8b4d705464a7aebe39e9de09f9f50581dd2" + integrity sha512-07nnQR+dDLq59Hmj385MhP2DsDu764VigX0pzwb/2G0CtVQcchSzztNi2YQZESxY9kOq4IVhH0Q9A6qEUFoA2A== + dependencies: + web3-core "^5.0.0" + web3-rpc-methods "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + +web3-providers-http@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-providers-http/-/web3-providers-http-5.0.0.tgz#cdb7bda362562347c362984e885baa52a1f7cb79" + integrity sha512-jYCwF84OkBPzoLOdOc3v+NvxUK9JKgPh5eF02L9ZlplnpIigznUvw+XaOwjeq607Zr00kxphF+oIvqCQLAuTaw== + dependencies: + cross-fetch "^3.1.5" + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + +web3-providers-ipc@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-providers-ipc/-/web3-providers-ipc-5.0.0.tgz#8f96f4a080274c24a76038c2364cac2cd97870c1" + integrity sha512-zk/xyKhRl5Uqhdl7ltI7flE0GXgRFol/fzxHqTex1DPj9tg99sgB7aGzpA2w9BKN+WdEChM3i1nvWE762uAbXw== + dependencies: + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + +web3-providers-ws@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-providers-ws/-/web3-providers-ws-5.0.0.tgz#4e7f21ce49fdfe3b05d96c47f69bc17fdd75463b" + integrity sha512-RK2I2m/FsGrT2xDdMoAn5R21IVz9y4R6JqIy6hREm0f2034rTP4F9GR0q73ATRUsabBxZWDzqfOGgfVY24dKcw== + dependencies: + isomorphic-ws "^5.0.0" + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + ws "^8.8.1" + +web3-rpc-methods@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-rpc-methods/-/web3-rpc-methods-5.0.0.tgz#2ce95e104b792b8d8ff49524e8b7eb6245c77c0f" + integrity sha512-FVNfCz028ITOB7kbcremCCrgMbR8OxFeki4/LOFaT/99mX91wWhoDTqO0ti6mCgHuwbsL6MPHEIN0hlpM1hCmQ== + dependencies: + web3-core "^5.0.0" + web3-types "^5.0.0" + web3-validator "^5.0.0" + +web3-types@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-types/-/web3-types-5.0.0.tgz#ca2220b31c4ac1fed3df1e75b3a4a2bb7ffca1c6" + integrity sha512-OmwTiV9ddciIUMhf0a2meXqp/luFE2GUylAeIT4voxZt7zpkyKqlMQmFFr5SBgR0KSrk6sIqra8yBtbthDSaIw== + +web3-utils@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-utils/-/web3-utils-5.0.0.tgz#26c686f3c7b694c4675370e0408e052f1ac7d79c" + integrity sha512-Tr5UO94aWwiWwEH2LLNhrEGWJ47lo+HodCR9sAVgKiVwFokxlfnymPON/L+X341InNkhm+t7s7KFQy7Qp1xu+g== + dependencies: + ethereum-cryptography "^1.1.2" + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-validator "^5.0.0" + +web3-validator@5.0.0, web3-validator@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-validator/-/web3-validator-5.0.0.tgz#7a4cf25685db65daa68fab8523f8344514f14720" + integrity sha512-oILXo8Ro/5z20JVVyVWOpfeEzf6xmOWacm/gBH19OEEODkVIct5g+1onbMF2MiEFnC02wEEt4JgasQT6awwW/g== + dependencies: + ajv "^8.11.0" + ethereum-cryptography "^1.1.2" + web3-errors "^5.0.0" + web3-types "^5.0.0" + +web3@5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3/-/web3-5.0.0.tgz#a14d330d3fe8e61237be12e5df2d77cb6e8277ea" + integrity sha512-JYeggG2AwhsAfM16ntasw1Zxrj3tpJddw5jc8QTYR3fdthVmaG+CiPokRd482/7aS0aE1qSb+Ybr3JVXlp2Mog== + dependencies: + web3-core "^5.0.0" + web3-errors "^5.0.0" + web3-eth "^5.0.0" + web3-eth-abi "^5.0.0" + web3-eth-accounts "^5.0.0" + web3-eth-contract "^5.0.0" + web3-eth-ens "^5.0.0" + web3-eth-iban "^5.0.0" + web3-eth-personal "^5.0.0" + web3-net "^5.0.0" + web3-providers-http "^5.0.0" + web3-providers-ipc "^5.0.0" + web3-providers-ws "^5.0.0" + web3-rpc-methods "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + web3-validator "^5.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "http://localhost:4873/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "http://localhost:4873/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "http://localhost:4873/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "http://localhost:4873/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.1: + version "4.0.2" + resolved "http://localhost:4873/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +ws@^8.8.1: + version "8.13.0" + resolved "http://localhost:4873/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +y18n@^5.0.5: + version "5.0.8" + resolved "http://localhost:4873/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "http://localhost:4873/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^21.0.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "http://localhost:4873/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.3.1: + version "17.7.1" + resolved "http://localhost:4873/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967" + integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "http://localhost:4873/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/packages/web3/test/config/jest.config.js b/packages/web3/test/config/jest.config.js new file mode 100644 index 00000000000..c8c21e06e6a --- /dev/null +++ b/packages/web3/test/config/jest.config.js @@ -0,0 +1,43 @@ +module.exports = { + globals: { + 'ts-jest': { + tsconfig: './test/tsconfig.json', + }, + }, + rootDir: '../..', + testMatch: ['/test/**/?(*.)+(spec|test).+(ts|tsx|js)'], + setupFilesAfterEnv: ['/test/config/setup.js'], + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + verbose: false, + collectCoverage: false, + coverageReporters: ['json'], + coverageDirectory: '.coverage', + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, +}; diff --git a/packages/web3/test/config/setup.js b/packages/web3/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3/test/config/tsconfig.cjs.json b/packages/web3/test/config/tsconfig.cjs.json new file mode 100644 index 00000000000..21349129d4f --- /dev/null +++ b/packages/web3/test/config/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./lib/commonjs", + "esModuleInterop": true, + "declaration": true, + "module": "commonjs" + }, + "include": ["src/**/*"] +} diff --git a/packages/web3/test/config/tsconfig.esm.json b/packages/web3/test/config/tsconfig.esm.json new file mode 100644 index 00000000000..fc026594930 --- /dev/null +++ b/packages/web3/test/config/tsconfig.esm.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./lib/esm", + "esModuleInterop": true, + "module": "es2020" + }, + "include": ["src/**/*"] +} diff --git a/packages/web3/test/e2e/e2e_utils.ts b/packages/web3/test/e2e/e2e_utils.ts new file mode 100644 index 00000000000..cfb680d8b81 --- /dev/null +++ b/packages/web3/test/e2e/e2e_utils.ts @@ -0,0 +1,85 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/** + * @NOTE This Util method is kept seperate from shared system_test_utils.ts file because + * of it's import of .secrets.json. For this method to exist in shared system_test_utils.ts + * file, the import path would be ../.secrets.json which doesn't resolve when the file is + * copied over to each package's test directory. Because web3 package is the only package + * running these E2E tests that use Sepolia and Mainnet, this util exists here for now. + */ + +import { getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +// eslint-disable-next-line import/no-relative-packages +import secrets from '../../../../.secrets.json'; + +export const getSystemE2ETestProvider = (): string => { + if (process.env.WEB3_SYSTEM_TEST_MODE === 'http') { + return getSystemTestBackend() === 'sepolia' + ? process.env.INFURA_SEPOLIA_HTTP ?? secrets.SEPOLIA.HTTP + : process.env.INFURA_MAINNET_HTTP ?? secrets.MAINNET.HTTP; + } + return getSystemTestBackend() === 'sepolia' + ? process.env.INFURA_SEPOLIA_WS ?? secrets.SEPOLIA.WS + : process.env.INFURA_MAINNET_WS ?? secrets.MAINNET.WS; +}; + +export const getE2ETestAccountAddress = (): string => { + if (process.env.TEST_ACCOUNT_ADDRESS !== undefined) { + return process.env.TEST_ACCOUNT_ADDRESS; + // eslint-disable-next-line no-else-return + } else if (getSystemTestBackend() === 'sepolia' || getSystemTestBackend() === 'mainnet') { + return secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'].ACCOUNT + .address; + } + + throw new Error('Unable to get test account address'); +}; + +export const getE2ETestContractAddress = () => + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'] + .DEPLOYED_TEST_CONTRACT_ADDRESS as string; + +export const getAllowedSendTransaction = (): boolean => { + if (process.env.ALLOWED_SEND_TRANSACTION !== undefined) { + // https://github.com/actions/runner/issues/1483 + if (process.env.ALLOWED_SEND_TRANSACTION === 'false') { + return false; + } + + return Boolean(process.env.ALLOWED_SEND_TRANSACTION); + // eslint-disable-next-line no-else-return + } else if (getSystemTestBackend() === 'sepolia' || getSystemTestBackend() === 'mainnet') { + return secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'] + .ALLOWED_SEND_TRANSACTION; + } + + return false; +}; + +export const getE2ETestAccountPrivateKey = (): string => { + if (process.env.TEST_ACCOUNT_PRIVATE_KEY !== undefined) { + return process.env.TEST_ACCOUNT_PRIVATE_KEY; + // eslint-disable-next-line no-else-return + } else if (getSystemTestBackend() === 'sepolia' || getSystemTestBackend() === 'mainnet') { + return secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'].ACCOUNT + .privateKey; + } + + throw new Error('Unable to get test account private key'); +}; diff --git a/packages/web3/test/e2e/estimate_gas.test.ts b/packages/web3/test/e2e/estimate_gas.test.ts new file mode 100644 index 00000000000..872b31db6ac --- /dev/null +++ b/packages/web3/test/e2e/estimate_gas.test.ts @@ -0,0 +1,108 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { toHex } from 'web3-utils'; + +import Web3, { FMT_BYTES, FMT_NUMBER, Transaction } from '../../src'; +import { getSystemE2ETestProvider, getE2ETestAccountAddress } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../shared_fixtures/utils'; +import { mainnetBlockData } from './fixtures/mainnet'; +import { sepoliaBlockData } from './fixtures/sepolia'; + +describe(`${getSystemTestBackend()} tests - estimateGas`, () => { + const provider = getSystemE2ETestProvider(); + const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + const simpleEthTransaction: Transaction = { + from: getE2ETestAccountAddress(), + to: '0x0000000000000000000000000000000000000000', + value: '0x1', + }; + const expectedSimpleEthTransactionGas = 21000; + const contractDeploymentTransaction: Transaction = { + from: getE2ETestAccountAddress(), + data: '0x60806040523480156200001157600080fd5b5060405162000a6a38038062000a6a8339818101604052810190620000379190620002a4565b80600090805190602001906200004f92919062000057565b505062000359565b828054620000659062000324565b90600052602060002090601f016020900481019282620000895760008555620000d5565b82601f10620000a457805160ff1916838001178555620000d5565b82800160010185558215620000d5579182015b82811115620000d4578251825591602001919060010190620000b7565b5b509050620000e49190620000e8565b5090565b5b8082111562000103576000816000905550600101620000e9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001708262000125565b810181811067ffffffffffffffff8211171562000192576200019162000136565b5b80604052505050565b6000620001a762000107565b9050620001b5828262000165565b919050565b600067ffffffffffffffff821115620001d857620001d762000136565b5b620001e38262000125565b9050602081019050919050565b60005b8381101562000210578082015181840152602081019050620001f3565b8381111562000220576000848401525b50505050565b60006200023d6200023784620001ba565b6200019b565b9050828152602081018484840111156200025c576200025b62000120565b5b62000269848285620001f0565b509392505050565b600082601f8301126200028957620002886200011b565b5b81516200029b84826020860162000226565b91505092915050565b600060208284031215620002bd57620002bc62000111565b5b600082015167ffffffffffffffff811115620002de57620002dd62000116565b5b620002ec8482850162000271565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033d57607f821691505b602082108103620003535762000352620002f5565b5b50919050565b61070180620003696000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a41368621461003b578063cfae32171461006c575b600080fd5b6100556004803603810190610050919061043f565b61008a565b60405161006392919061052b565b60405180910390f35b6100746101b0565b604051610081919061055b565b60405180910390f35b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756000846040516100c0929190610672565b60405180910390a182600090805190602001906100de929190610242565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600060405161010f91906106a9565b60405180910390a160016000808054610127906105ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610153906105ac565b80156101a05780601f10610175576101008083540402835291602001916101a0565b820191906000526020600020905b81548152906001019060200180831161018357829003601f168201915b5050505050905091509150915091565b6060600080546101bf906105ac565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb906105ac565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b5050505050905090565b82805461024e906105ac565b90600052602060002090601f01602090048101928261027057600085556102b7565b82601f1061028957805160ff19168380011785556102b7565b828001600101855582156102b7579182015b828111156102b657825182559160200191906001019061029b565b5b5090506102c491906102c8565b5090565b5b808211156102e15760008160009055506001016102c9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61034c82610303565b810181811067ffffffffffffffff8211171561036b5761036a610314565b5b80604052505050565b600061037e6102e5565b905061038a8282610343565b919050565b600067ffffffffffffffff8211156103aa576103a9610314565b5b6103b382610303565b9050602081019050919050565b82818337600083830152505050565b60006103e26103dd8461038f565b610374565b9050828152602081018484840111156103fe576103fd6102fe565b5b6104098482856103c0565b509392505050565b600082601f830112610426576104256102f9565b5b81356104368482602086016103cf565b91505092915050565b600060208284031215610455576104546102ef565b5b600082013567ffffffffffffffff811115610473576104726102f4565b5b61047f84828501610411565b91505092915050565b60008115159050919050565b61049d81610488565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104dd5780820151818401526020810190506104c2565b838111156104ec576000848401525b50505050565b60006104fd826104a3565b61050781856104ae565b93506105178185602086016104bf565b61052081610303565b840191505092915050565b60006040820190506105406000830185610494565b818103602083015261055281846104f2565b90509392505050565b6000602082019050818103600083015261057581846104f2565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806105c457607f821691505b6020821081036105d7576105d661057d565b5b50919050565b60008190508160005260206000209050919050565b600081546105ff816105ac565b61060981866104ae565b94506001821660008114610624576001811461063657610669565b60ff1983168652602086019350610669565b61063f856105dd565b60005b8381101561066157815481890152600182019150602081019050610642565b808801955050505b50505092915050565b6000604082019050818103600083015261068c81856105f2565b905081810360208301526106a081846104f2565b90509392505050565b600060208201905081810360008301526106c381846105f2565b90509291505056fea2646970667358221220fe0f28c9f8ef0a13a95934b974e7bc2ca6762b40a5b93ccd6ca2038f454bf52764736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017736f6c79656e7420677265656e2069732070656f706c65000000000000000000', + }; + const expectedContractDeploymentTransactionGas = + getSystemTestBackend() === 'sepolia' ? 475494 : 475494; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + transaction: Transaction; + block: 'latest' | 'pending' | 'finalized' | 'safe' | 'blockHash' | 'blockNumber'; + format: string; + }>({ + transaction: [simpleEthTransaction, contractDeploymentTransaction], + block: ['latest', 'pending', 'safe', 'finalized', 'blockHash', 'blockNumber'], + format: Object.values(FMT_NUMBER), + }), + )('estimateGas', async ({ transaction, block, format }) => { + let _blockData = blockData[block]; + if ( + getSystemTestBackend() === 'mainnet' && + (block === 'blockHash' || block === 'blockNumber') + ) { + /** + * @NOTE Getting a block too far back in history + * results in a missing trie node error, so + * we get latest block for this test + */ + const latestBlock = await web3.eth.getBlock('finalized'); + _blockData = + block === 'blockHash' ? (latestBlock.hash as string) : toHex(latestBlock.number); + } + + const expectedGasEstimate = + transaction.data !== undefined + ? expectedContractDeploymentTransactionGas + : expectedSimpleEthTransactionGas; + const result = await web3.eth.estimateGas(transaction, _blockData, { + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + + switch (format) { + case 'NUMBER_NUMBER': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(expectedGasEstimate); + break; + case 'NUMBER_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(toHex(expectedGasEstimate)); + break; + case 'NUMBER_STR': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(`${expectedGasEstimate}`); + break; + case 'NUMBER_BIGINT': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(BigInt(expectedGasEstimate)); + break; + default: + throw new Error('Unhandled format'); + } + }); +}); diff --git a/packages/web3/test/e2e/fixtures/mainnet.ts b/packages/web3/test/e2e/fixtures/mainnet.ts new file mode 100644 index 00000000000..2d858a6c9a1 --- /dev/null +++ b/packages/web3/test/e2e/fixtures/mainnet.ts @@ -0,0 +1,300 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const mainnetBlock = { + baseFeePerGas: '0x474472184', + difficulty: '0x0', + extraData: '0xd883010b05846765746888676f312e32302e32856c696e7578', + gasLimit: '0x1c9c380', + gasUsed: '0x143f430', + hash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + logsBloom: + '0x4df74c536feb5b9b15f957639771c6a373e719164f8593a74f9bbea57eaafd57bc3713cc5f12770cff1397fa4347c99e0f7d1e2edb5aedd4bf21d5e21ea43963fd767ad75fefcb3dffefe37b5d3a0879e29b14a80deefa730dd29ccd9e7134833aa03fb27b97d98982427405ac0abedd425a3bd70b7d5ff34f5d2cda3e7fd29fcf23d71d0a4c370005d82dfe53be067656d2bce157469cf97ff5ab7ce330166f9ed87d5717a46a3b603affe5b13cedca2b5a46bdeab6abab0dd72c3f14e2fdda4e38bd6e5e0b3e5bc04edb366cef95faf8f96edba7fb645a770e3daeca8de47f54736b5881078d85882d16ada151ea84e6779b30cb7ca4d68f8dbf31f296fc87', + miner: '0x4675c7e5baafbffbca748158becba61ef3b0a263', + mixHash: '0x4ec3b909884d099f633243913328e65d659c646e349c14ced389280fefab41c3', + nonce: '0x0', + number: '0x103dab0', + parentHash: '0x28ad78b5598691f1eb3aee2a17540496b539fb4f72ca5eaa461a331791cfc7cd', + receiptsRoot: '0x78017242efd230482ca0a6ca47a5c3bed5a275b6e3b09223ff8e2354f3136772', + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + size: '0x493d0', + stateRoot: '0x637b62addfc277cb5ae4aac3c8b3bfc8e49ebe9369d07d9757c5f1f2ec937306', + timestamp: '0x64363eef', + totalDifficulty: '0xc70d815d562d3cfa955', + transactions: [ + '0xfe87d41469efbea299780c8e218590753e0893ee2d2d65f867d9c9c7b9ed591f', + '0x603caf7d4be62e5946268fa1b594029c40fab23826d388729367c37649ea3967', + '0x4f8da807b7f0f44a4fd67eaa16cc4ef6f1071a0d8ae06349bef904f8f14f0903', + '0x199eb2a37faf1af74c752de5f378859c40a8929c52af1402bf98c9acc309438e', + '0x9775612f318528221f773a926a72c758f5b6d1eb7871b7a4309fe2d870ea1452', + '0xdc7f7a7c4d7017c13c795fc303c5b24814e27f102f908bcb33b8f5b7e943a8e4', + '0x19d1a0d3ec5c0edb9f5e92fb5f8707ae92b56505093e602bea42be92a07e44af', + '0x9c3c1a113ed268ea222e7d9c35ce0abf5bd15f7f7dd4c00b31fd4de1a9cb57dd', + '0x2ad8b77960551ee3fa86b1ede54219db9490e5320bb479a467be1563f49070fa', + '0xee84b1ac8feb236190b84717a4d186b92278939d36346c81a0ee35c316763900', + '0x1789d5fc0756c57f5035cf7e0776c908d20350a2474b6a24f06d0c0f5aec9671', + '0xc6b456b175dd46508260658d2730e30f92a79ffc5be7310098a45dd70e4292fa', + '0x94e1c3b9a52d7a5e1c6c79dff79ef48d6b9e66aebebbc416a70f006c4382fb23', + '0x7aa9ab138d57ba3ca97edde17570ec90bad03e5c0e2e39ef6f2d57b06906e947', + '0x0aa9988e0a851495beb7ea8d0f48e30042167dd98d932cf32535ea60c7c39e2b', + '0x1752d428626dd31ea7546beb62e2c5d6a27ef9f37e14954a8e6d2e4e290b8d92', + '0xdaa6805bdf1f554cfc744fe22a6661642c87141467b7f14edd0f946c9cb0f8ce', + '0x3fd6e1a5c50cf84d53f9b6809db62d919121259b0de6869a8ee3ff9622c75806', + '0x608372f0608f5466eeb44c5b28408a80af6e1feb410bfe57fa5f6c6e267bec3d', + '0x9295f62e92616619793b77a3b7577b2b6617a3cd21dd13f87164689c444d64f5', + '0x11b54c9e279fcbb97484fbf4a27860f9c13768ca21f11e4df82041b0ca33df8f', + '0x2c8a744c0124abfe06295471c805dd0cfbb6a42675cf56d54c1ba851fa8dc3a2', + '0x90cb790f159d0a8fb4de0bf9c53d95ce48748251da20e254591c8a29960ddd23', + '0xc94887918fa6e72ecb1e92297b4e6d8bd157dda8be8e71d21015bef1c5da2758', + '0x7c9a5723528a8c953a6d89d5a3e11d939bb22073763cfaa9b67f23bc643754b5', + '0x75d304122e20c4e61e1be6f10e8a2bfd7172a3d2f44f123ce439e2697adc37c3', + '0x5b0805bcb55a457729c0e23541205aace38077d5d0ec38f8c4981b6ac10ad444', + '0x87a851cef867e8b76c0f00049bccf3eb95f41a4e0ed5f2656d3f029ec321aefd', + '0xc4fb4a90055b52891b9ee9ea13e59bfa08fedd2521212a2538a54ac15948694c', + '0x9a6210559642f06ad096806f546af798f6b9d1a69f246f830a23ba96df23c70e', + '0xc36c5f21974222581b9626833fe32d99e1953be7a84f8de99289799b6c28cfdc', + '0x5555125fe67d3a36555050d41b8ca19ff036d6a338add7c285eef925100b7d49', + '0xc9b0ffd52b2d3179cab61f22302eed123144dca2367455f0b26cbd57a54d6d6f', + '0xb47865548d28112a9b37e3909fe2310918a4a70054b2e10f0a25b81ad2bfd695', + '0xeba0d7487248cc40f7a9784f20c879cc358231ac73cb56900629b11a2de6ef23', + '0x77fab2e3ef8460a5259e7107cf0cbc1a1e31678d112aaf248b2108159b4416a3', + '0x216b046ab639e61930add4323bf64b76d91db121963350632ed82f26bb6de7e6', + '0xd39d9a75f852bcb051393709ddb894ee043b7ea18bc21ce4ebd5a3560142b60c', + '0xb7f3dbb72b2f8fe579b81a3ec11a56008b09d90f2a5267180fd8f966a1b76cce', + '0x2bb7f5e1d071f0dc7040fc1ae745274a456e25610cfcfcd38e9cb3205f227222', + '0x6c53f5e35d76bfaab1d1eaa75b553da7bed8fe046f90961441474c6852b0469f', + '0x346d0ad3d6a351797184f880b08b913dd095d12f36ade9e75eb7cba6980dbf34', + '0x209624ade75ef69c5b0b1c8d85ebb1be2a084380f3eff7fb15fafc6d607da908', + '0xc76320b5a1943478674adc1c81ec441e0798525ff8c5aba49a13e0feccfbb6b3', + '0x79474757728de960eb4e7da5bd14cd3bbaa342a1f15a0e02920020bc17293e98', + '0xcbd72caf3b24a675faac5188b7bc15768c2bdd4e6a2a8c60ce79f1875b36b4e8', + '0x2350e1d8dbaaef1c51429dd50f319f7ae0c60681b17e925abe7f6b79b85bdf6c', + '0x76c881e0add6fbe11dfc4396ff8f373f2bb1cc27db929b95a21cd64b7dc41e11', + '0x3ec134ed1e10df2b1b78311fcd38325b2da8e5da5ecfb60573909450a04693e4', + '0x8587b3eb001a4d9c367b44d3c66d864bd086f7def58681fa568c25c1632197fe', + '0x4e52482e36a15ab65b1ee34d20f93b54cd1873e1b596c874364c59125dd23b62', + '0x5512e2f3ae0e44b1993cbfcea2f91fbc8e6cf2ef6bc73b606f19db051935c30b', + '0x47effec3066af633b7b8e31eb958720b3c26101a660b68294cfd5d1da9df660e', + '0xd6356b5d6aba735dad22a19dc1c6f1e90dc5b9cae6981e3242b551da32a56420', + '0xd2ae45072ed92e1c0f0dc9770700e2aea61c564c3cf9966043fcb4ff503e6bc5', + '0x3a9d565f5193dbfd7bdae074e6405d6cd0d6334a99b23d4780afdf70730ea265', + '0xe3a4f72856bfda9647b3699182bd386445ac649dcc8b1ce16e00ffcfbf4ab7ed', + '0xd8640e034189ad0e1c19c56cc4283d58a6fb953eb4b07490f1908de722939c36', + '0x52afd7942b5e6b188b162fbef65fea001d87904a218a1863cd55e35c38152d32', + '0xb261c0e8b9db2323039cd792af63941d6891e59f9a47fb920a1cfa70188284a3', + '0x545a0dafc33502a9e74440ffe4aaeb896a6c2248c1d5e02b2a211936f97fe375', + '0x5e48f0c28319b84d3ea08d316b91dc23d6ddcff46c4064760d2f83d848ede467', + '0x848514cee29d37999e27991e25c2cd58edc0486fdbcd2bf673a14d0e37bc3d12', + '0x5c1464d4fd1ef55d3fc1c1e9338917273b1d2280fd06fe04afa607557ab9c9d9', + '0x461702cf4d7d04f70337251a6ce8aa386f96a55214eae9e71697ad2e3d686acf', + '0x4d0b6bd0b7dc8b332fc7f80c3c5774c467080976fa2460d85a9c032a3e230d94', + '0x06ad8cefc9d677ea422fedbbc23fe323f830070fbc93ee394abf986453026dc5', + '0xd77ad6002fc4ccec33de15972123777c0e036cf8f2ce5e1a4d858dd99b11cbd3', + '0x3c829847832f898dd18a8674e81eba1e7179912397f48a53e31b6d98ad79026d', + '0xd90e21f60f14d0d6734a06a08ea72718c0da1dde84d927578f8bc3817eec2cfa', + '0x6d6269d0e0c72d8683f741cfb76b0d5e9f2dad7fe0a31cd84a655a5f48e2a3fa', + '0x16405e445187de6e1282740494fc6af3a25cdfdea2de89014ace9a91f68ba6c3', + '0xe622306295b723bf0da62a8946e0c624a3375096669cd379bc437ba3a0e2b6b1', + '0x804e7b2c8b74700c58f930f56e09e49a037b9dc454245ed87e469af5d73d7db6', + '0x9944ff3b953f8a03d29719d2f1921d2f7ad23f28435aabc7a1cc16633c4c3efc', + '0xb6b4ef98d38a6a05809d1bf3f54ad65ce4c5b5ed5ae5bb77efc9448b46809735', + '0x93b1efe0e8e99c39e0196bd596d4558863ffa78edc8c3b7a223a6a12a7b39ad4', + '0xa7665ef46de3416737bb9768e48908a625d89395dfe14e47f863da8fea76db6f', + '0x28d9b81fe5974728f846e2c752a43dae559687dfa4aa5732c184e25e65dde89f', + '0x2ed95ae311604dda2a370282bd6f3449cc1a4f2756f118f1aeb1d60c98c90ebc', + '0x04bff1f526355878a5a79105a6fa4a4947ec23a6267afb8a2e7c7ce40fa2eda7', + '0x78e4f8d6d388ebaf4a1b43f3232b97a5f25655ab2e18b2c8cf509940f0a57a62', + '0x39fc3a2f506b038e3b502727345edcf6c42127bd97c906bf5cd69c1d5e9ceec4', + '0x9c850596d23bfc226f4177a827d27cbfd13373ab3c6c8f083de69da4d4aba82a', + '0x30f4c85342e02c43297d2720b034d8b724f38281d34a7c2dfb84328317da549b', + '0xbc83390bc39958798cb3066bf330a5611945aa5ca5112a55b92d6c689554ad60', + '0xf0a99df33c3ab18658dd8625fd41cf41dc83dc44f19688f3cf17f04514a0d4cb', + '0x080d36e7596e73af440400f2542d2b93c0b3cf3af6cfe400ac3fd469d958b338', + '0xc27d72675970b34668bea3e241a10e3f8e963a9bbae7b69f1cf27dc6aecbcbe5', + '0xf062f350fcb7ceb7eda9cb8265e9a5922249ceddcb1a40b67ba1af43bb5c8597', + '0x76a287becd9daa920e1d26b9ee1843d03ce6df36b5434076738b90c323ba3a82', + '0x51bfb597e154b9df1dfab45885c8219dd3ba99c0fa80631acba6b635471f74a5', + '0x0d7b43abc4b92337b064b74f7e2ff87c337cf0a5690a54dac34f2edf555d0733', + '0x6d9cf19ee0ca152ae9c5634caae877ab6011a70ee330225d9546589d74b3e087', + '0x1fef29d91355611b129ff67f970f6d1da96104df0310bd3b72237367723757d8', + '0xa1ad417520e8fc7d9c8d480e98b929487614daac0c8864879182dfad732054ef', + '0x7fcdfa9acd5255dafc8ddff55a2d8f06c93476eed34b511b7f504fc3eb0a4fa1', + '0x69297bc8fafd076c18fa178358ebf0782730e1efe1c5d0dc057c4a42c7d13bc7', + '0x885dedc7616cefc16490d6dbec79b7ccc7dd1615367d2c4101084d60f2fdbea1', + '0x03a87bf75fb7637fff63350513f286fdf23a5c0c5a561122f1e768c76ec6ea2b', + '0xf76389acc92906f1290f3a854aa7bdff09ee6b7194a6cdbe3867b3b2f7b16fc3', + '0xa7cecd23fab592aa7f3aa37045b16a35c73b2bcfa51d9d5a7a7d15424b78e4af', + '0x0fb59a5f28f25c78c39c72e0232934bd6b8646064ddd4d66e8c8b5695fa8184b', + '0x2343a15826c2683c027de01886924efeef1418ca43eef7f1e386e1e691cc14a4', + '0xe69e2160e90c6ef7f1a72c8bf4bdaf8e04fd679990acbacf1e9d9942eb2e21e3', + '0x0853356e276a49527201727e5e994403d7071fd8c20c4fe3513be09eb26422da', + '0x5c9d87e4015d92c11f2153f8133f8709294a3aedcf446523b48d8ca9f90cf999', + '0x410a2d3073786f43ba1c0dcd5715031940b1eac224ddfbc09a2533b98e1961ce', + '0xd074a2e071d48cd543a4c2f78cbb494a5f5b7e205d2f9f16b749d3e79fc744c1', + '0xfc7ae9cd5806dcc1bd8521581ce0187472dd6d2551e512e7a5d99e31692ce753', + '0x90910adfad4d375b9f1fe068c38cfb61fa27f8f3fffd5449a056410db031af0e', + '0xd4b42ed78389a43e47061ee844c2b68ed631da72ceea389363a9bab05cc8e5e8', + '0x504e3f22373700cb294db5b5b5402f45d8c4a02d7e996e52b51a0502a6b7cc87', + '0x96b93b9a250a2c76261558470c0242115dc1ebda5e1a5206489ee033fb31284a', + '0x0d16cbef0f3df967f3dd0a10606785c4d7ae9bb6cc4ae8018402a5a839a1f497', + '0xf80ba14af91cdf4a398fc6d7ab439f721af496428eb789749cb2da23eaf31052', + '0xb8c7acb46336a721893b6171ce9ae326e8b861913ee8502560798dc03a4b428a', + '0x585f52cc267bc31ed76456e10e26462e8ba898419cc8b9d59f6f76c5869e4b41', + '0x07158ecabeaa23e23a2b4af3bf54be3f29da81f282cd031358c66addaff2e8d5', + '0xbe213bb3cf09088600a8a4d6dcaa6e43e22c730a2b79686b99cb2dd23c89b0ac', + '0x16c47e6331c4356d92def58627a88982ba34e0fdc5d38a0967a79faa2ba59c28', + '0xa7eb4f13bd122d16890db32cc95498c41c899d90db6ded546595635be8afd65f', + '0x0f306416f5f9ba69fcc20348dce199ad14402c5d0956c34d1d68535b7b456a6f', + '0xc8ca24a0da8b3403305b9cadb26dadcf547d8f23487b5ad1f8d63269786ff46e', + '0xef8be164d94c0eb5f2bdee4e23897d7992cf6eed26ea29543070ee2798f7469e', + '0x3fbd6a8181c0fbfb48689db9bc12e4615ca4afc49607a06c8899c5eace3c087c', + '0x446b5bd934e67d7c6549077efee4b02f439fd2e1115914173ed449f223b45aee', + '0xe65b6bec825c8ce3df9456cdd55390cbc09fc5f86c20e19455d67968339ac0e8', + '0x9aa4c2aebcb87337eaafd0768324e964af29fe34948a73c3f65205578874faa6', + '0xef8f8c6d22ee2165d735ed573e867e701dda02189a7ab991b788ccaaa132f8d0', + '0x260725511b21a06d2232db5c7f6f88ea5bbdacccec4b78569a818927a80d839b', + '0xd8b7c50d281e37dc01810fbd1c3cf314d707d175feb50f1c94e5cd07722a8e6c', + '0xa78b1dbfda5a5cc59a760c03e3e38064db95dfcb7f6b8d5d5810ecd31f445335', + '0x5470c161462213629f4d2b7402fdfda71a6fd3721d6bd5d699dcb9bc24c50d21', + '0x0943c536186591acb818e8ace6fcfd4af0df06b8853c30ddf185f78ae54ccbef', + '0x66fd0cb4264aa2e61fa2e4abc224f9682d09092865e1025974a4bde51ad906d8', + '0x13e1fddea8ffcfb5847041614af2e1502a7be4f0507645fa5216ed8b661e6c23', + '0xdf214d4148f2ac955b0c1097b2c633b5dfae2751a965cd9260b12874ae12bfd9', + '0x9e0b6d88702128b00efba753c85fdedf93c4c91e242f8610e539571bca485932', + '0xffc4ee5481e35cf09f5675a05593f8bcd1fbe3c0bfd742ba64655bfbfe5cdc59', + '0x8628c214d87f83b8b6325d648383d3a34a9abc54d7be64606b9e9393c5bb2c87', + '0x57840573da6aee90a1df7c054e694cea1bdbbcc0ce5504a4c47296bf93b75301', + '0x7495e9e0cf9f848a202fc3e051bce519b26967c4933ea9f4a3744d75964124b3', + '0xff7d2273873f7b16e131755ed47ed8de55e540a4bb8d47449d84127ddd3a8bb5', + '0x2dd3225299367625b920766f718ecd62d0d66738ece52fd44c4adb0f8f794c75', + '0xd600a0365ebc112528c0464dd4562de2a74eb692004be7a08b60a821c8dddd19', + '0xdb05f67a2e1f965826ca9aae165d96ec1883129ba84718da14f7c35a6e1e342d', + '0x50734d83880b3f249d60c15226df34c22e222faa5079c3d7ed7665dddc906ece', + '0x6173d906ffd35d3b326a3e750b6d663d2955fdc6deeab20e409af5385cf8e4c8', + '0x00c1a4dc51c377b6bb00af16bb30526543f727c11a6370741191979c471d1ffc', + '0x8c7518bea80f39a803930123b6782845ce8f8d99a782163aadfa924cbb28ee91', + '0x4ceca9cf5bff5da1d3d1837fb77f1f576767b8a9d6d4062de0eee706b7773d6a', + '0x03f236728362e5cfc12a712b822a3ab1d79e0eb0268ea771dac94c17750283f1', + '0x57574acd1a26c9e233f2ba2c5a7c8b81f6dc05ac9b80b1f87a586937322df147', + '0x2f51883b48c322148fc624e8c4c974f4ffe960cc65bdd9bed9085c899eed8926', + '0xa335d36a424727d3d6a533abd8c1d55c1647272140e20590852266f66bb21055', + '0xab5f09775f84c67c0105a2a0708a0d8e0944f6104357944074efc7e0933fbcf3', + '0xfc344b84da81960aa983cbeed2a393d9b1fa7aabb0d844e6f82a5f6c94a3c086', + '0xe64be15aecd91f995ace79f4019a9527a8abe979a3468b35600da437a1478c70', + '0x004a9a2ab277e27f7004aa54b28981e62cdc495d3186fb06e158e8424cf5967c', + '0x684e32bbc27f76e759dc9f785c98be14d26f6e1010ef75cc025c70945f530fce', + '0xddc2aba98e71ea83790e0d5cbab037f6e70bf5a58d9790364cab6f4d852ae897', + '0x2fe22d7a6493b92654f01e5ded1cb917c5c2924a38e663128046a7952a2c93ec', + '0x7fcbb7a587ba7d0165a58b5e6e3020988dd4920b318ba340080b1ad762998f0e', + '0x86b6bcf0ceb9b60090994f3dd76788cef71d348ca69fffdab38754815b73e85c', + '0x8eadb42b3a03ff3e8523f5830f6c95a3264fb9276317ddbc3e8cc97fc189db1d', + '0x022ac2d203c97313448c6439f25af381448c5fb250067c96abad48c52ea63b25', + '0xe71bed152a7e265fcdc08eb8f6f5217141c1660c79e0a2315801b48a17de9443', + '0xbe2db43eb64a29a1305510cee016accf743960735aed99bb4aeb831956531f5b', + '0x80f00d868b70689d383cdab459c9c68f606de18d4d5a4fc25258870e42aa65ae', + '0x2a69d29b4302deff2515e87041b722bb229603429ea4d31fe81c878efed67f81', + '0x6323bd97a58dab264aaeea1aa12ece39b5eef1a1488e65f813609e1c47fdc66f', + '0x9ff09456b9098544e68e8e27cd3f1445d8606fdfcdebfa74d24d1bc87a9c2462', + '0x8d7f6f64c5cbdb533b579647746392c50db5fd0247981c7b430f4fe206bad302', + '0xb94ff102a30dcdcf8c2b1385246a2f205f4a7937b58182b7df04e38dc4fba63a', + '0x61ca13084a53b8edfc2beb3d1f967fdfca93359043a5da9c3678889b012ad0f3', + '0x76a199229278cdd8e6dd40093b64e7664626618e7c36fd623ab630786b6dfac5', + '0x74d69e566e8bd62900e891081905009a1c2ed074165d15c0e0a096b63b1b49a7', + '0x14036d43579058171105216738457b35167820a7effb8d9386c65e20d236eb77', + '0x25c1684f6966caff802e85749b550d9be2934820d5c91c6f62487287675a629e', + '0x9c00826fd016714e191a685e31c918e5f9151d807d1b5b955a3ea514ffcd19de', + '0xe04b3af4d15e1edcae6e981f5f1d9d75af4f7cd06f12c73ee42e51c00ef14364', + '0x0357d246c9ddd57f05170a038ddb04c4c2554371a5cd1e1d7bdda50b6080939f', + '0x002ec16d799ba0c7c3251ba82a68151016066f4c49ea22c6441711184aff4799', + '0x2393a72f9b086878d13a8dae1e44607cb9033fd94d4777ea907dc457db3dbc44', + '0x870c8c1508aecd4147d0f9e6cd1a84227b743ed2589d013e18d481674ca8f42e', + '0x91af138e974e7f4c84f22362bc8f7247ec806baaa7d6cbc68a67e9689955e78b', + '0xf37b9efe2a4130127072a2f6a3ae5c7311e48bf3022a1433b7dba6423bf977d3', + '0x241263ac0c3c04d623485fb5d4e7a2af103a7db5eabfe0b2d2afe0506585e509', + '0x8df5d0fcd95081999a6c417f8be98633d1bc3d0f6fcb6795eeb600ca9e676f8f', + '0x4176e756b40466a7126aef4fa046a728ad62f51266a2a3b4a92b15366ac688b1', + '0xbd6b5651c5c324e8c2ebe6e89c633bf3b33ca9bcd2c5d730608d3fecd11bf031', + '0x0f48823439c41ab6b36752bb865cc156d1f56d9e5284eb0c9d0b0177f298f79f', + '0x12d7dbfb0bee81eb327e32170b201fbc8445ce3d780f446b50cc10b2c6a08ed2', + '0xc6f78588f68038b676f7a0ca3324f2c6b24618bf43b5c6e68704262e3fceba4a', + '0xfaeaf9b4a6c5fcac8005239112a27f9c059e7aeb436f31f192a80c1691c29f29', + ], + transactionsRoot: '0x2b0f787500743395385ad4a4142693bffd51d508cae1fdd675d269842b9bc2b0', + uncles: [], +}; + +export const mainnetBlockData: { + earliest: 'earliest'; + latest: 'latest'; + pending: 'pending'; + finalized: 'finalized'; + safe: 'safe'; + blockNumber: number; + blockHash: string; +} = { + earliest: 'earliest', + latest: 'latest', + pending: 'pending', + finalized: 'finalized', + safe: 'safe', + blockNumber: 17029808, + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', +}; + +export const mainnetProof = { + accountProof: [ + '0xf90211a061a42629d4371789fb5c083c33fbb0a212366d19b5b418b482200b4eac0503cda0921eeb15c07b42918862c7669a33a2f64ac87fd76865ac27ffd47fc442296dd6a020fc23de86ad57edf44fc277658e7c51027b013997fbdf257813ae0483a9424aa08650d9f1b91cb0453a89de3c28934c33bbda62490a3b139960f5dc8696edee50a0938ae249d931088e1418698eef515883741002e4eb7630e5ae7c1065ca91d452a06e28819dfc085c8eb967b35b29940a2bf8b1e724cd4ea28b798161664f9091afa012d5225b6862724fe95cc27ed50629263e92d28044f1366964168c91e415cc86a03732489e3d9a4708cd5bd9985dcac215ed8104492f9e6b6e58d3a57718abc323a092e057e0b1f1c83a62b12483cb6816d3e8105d15108f990a78d98ded473b67d6a0ef6ec99e06a731a8a16b6d27ae505fa92c7078dd4e91cee5a6d6e2ce78c8a0bda073110a92b87d5f004fa8222c9bf298cb3a4974c34dd724c147ae72cb6e9f2af5a0af556072c40c1e93cfae2c11f630250049a1738977d8614aabf48ac48d4ceaa1a0e49322e3a8c8273d277bce7c075f28e809fe9fba975ff0a68b4c19a2086f6c10a090dc4797623b5e1c1df464cf68165cb250363c529e70884c033d789a9fb535c6a083d55b28d20db57407779adce1e5f3297ce6333c2db058d4b9e730b69cde535ea0fd6d0de8e61255d5165318f4d2e0747944a97bec1b472e77519bc1246f285e2f80', + '0xf90211a013b0863f23ec7ba9005f61eaf0c0e6466672ee3d13984f66639613773e63ae82a0c698de006df5eb411649fa119d350fe2cdcf6e0bcd50d5caca18173929570ec5a094a13b12f3724a211533f38a1bc56f837897a571b6672cbcbe4e07588ae887e0a089af3d2fcd47e0d524b5bdddcf8c188818c888ce71c968b20b0daf3f69979edfa00edd32eb159f02fe50999f9dc8adebb5dd9c48f1dbc3cff2026428ca05c5f471a00819550c6855bd618c9713d677a97ede25cf36fe09e045c0b1cc93a1b505b08da0eafcb8050d2a14bf7e6fcb07268fd40243183c24865a4e74d56940e2799c0e80a0991ccc5e472da616ed0ab870b4c8702e8e2bafaf6efde1bfaa81cf112dc8ef54a052785d9dbf1232d67ac025bf782bd9f9e619e75783b39fc8ea8f4f7b670813daa0dbc8204ab52d4420c62c1777133eafbea8cf868327ca9646a2872a43ee3613e6a00bf50322cb36599d21aed1aa81849ea3642159ed4b432bedc2ada82111866877a03fdc880ef977282a7396f6d5badee955e7c476a7da12ebec0766c4f0a00b5ed7a06927da4c320d8d36551479cf6c8634f6ae1876065a6d98656c9ad5148750fa35a0652010f361c5ccc80e4b80cbb0a8e17abef8ad7ecb520eca45d74fe5b810ad28a0a1cbb1d8e9fc8a447535f4aa0f3eb568f484be5aa7ab47c89a55280ce0285e3ca079c75ec928e6b992a9b6e943e5f696ac4a0911459e0d92d8166983dcb30261e780', + '0xf90211a0906d3fa01a6131a7f8b1b7b1021a9b03cead0061a0fb78b48e563f94e143b912a0c3bef88301ebbee8ee60d6d776c15f4f285f91077d220f794bd7ed391de1887aa08929f87db85fbc2686425225014b861df6835290f5fc922d26112b17c281d563a0aff6ded52e896cd26ab3298a84f5a2042e9983c50f47e219db834e02b923ebffa081467a1e2b5e7e98f3f2e91c50262fe3d152f9e18fa7019b9882deca0f11c227a0a1eda943a62beca8423f07ae31227cb8480a334982b66eceb8c5fb33b504a92ba09e355f61268c67f4d90bc94f1da49e5cb1a5555af643e5e41d474cc21198e0c4a02fd628b96d10a7b1174dddf2db933151dfbeeb2bea8599508fa5050ee9807029a0e304e1af1fc7f7a8bde11525b3962540e63ab6768629fb589be7b66a364b2c49a0434c3fd226f8b07a712a2908c22d132fa20ca536aebcf7036e135de1c9053959a00d1752d6848a2b0858f42ce0b34270e11d35191627d82953d9a4e04eb5109431a0cd9328b0c001a9bba15a9451a5e04e8f39e92f1498d9e5e140aca53bd853c3bba031faf17595f51f9d67a4ebad0bca3dc04681acb6cafc15be3bc340eb56ecf248a0817b6a339a574f6a12bc528c0800c2aa35c2766d0c1bece3654c0952cf94c7bba0d01ea4603336af9083b15f18d178d7051b74928bc1c2af2409d0649d9d367018a0ea65ae8a236519a85d7b56bac8d61f7e924409f587b47cb90aeb5eba23286f8f80', + '0xf90211a03ea22514219f296232ec043cc9be748640d4179974bfc579013738669fa6c1cba0c786b901e1677b1c828383db755df4759225421afeaea3de3c6ef799a7ba1655a03c4759afd6725715e5e3cab40b07a6ac3cc63b3cbf771a589ad9b50c695a2d1fa08b11fd26f0e921cd3cb55e7b3a4664a3ebeca818a4e69a633eee1cfbf7c22afba0c23177bf3c8a4f0d6bd1165e7402189338c25cc99fa27d7ae7479fbf7f8faa1ea02b90384b9f669b9ea73251ac7f889063bc8ed939ad23f059015a996e561dbdf1a0ad19658ea306c0cf9364e13138111c747e2d20b873f74696ab07bd35ebeb8822a09fac5b614101deee5129bff38028cb022439b7d2bf6add205c9e6f0b336c6da5a08017980585eb89c0ae157808040d231e36cc51ad0aea07ee9281f4481aaa3239a0b1322e1fe5f7632d8f5c5b9f8c23601d3820b591f2ebfd1b24254bdf1badfaeea05527e4c9c1930123bee9262149ad7f966d7249f533bc18b09a398213885e5285a083ea949b3c88fc1b2720993d4ab9465b1e07c39faa2102f991ddd58d4b9d21fba04209281a3ceb6f985957619d6901e61be7dfcaae0aa836d83de4e7e77d3c31bca0ad5021570629b773143685a343a93c9a46428c6bc19707cf61eaee477b3dc5e7a01da1a77a07f6020e670df0f739f053d7e3b3ec1a16279b52a0a594c4ed111856a041741f7de82565d93d05006e3abaa5cbf0026a36dca2fd785371151fb6922a3080', + '0xf90211a0c5922554164fd80e50dd9aa0e947d3cbec6f7ec1e905e7993a02a0ad6b63b428a03e8934fb021a44636cfdee14738bdefd52bf2cb877221d62a902dda4c9e20af2a0e60f11787f7d63ae9fbd87c90ebd33bb24c933d307fbc657d844a143288d871ea04a4737d77380e7517f2e54fafbb14ce71e4161dec871076f6dc2fafa4a372af8a05c011c4181c90849e4293bd2ca6d4c66d5eb30de23bc23202c1b9faf5a3dc80ea01e5b26350fb090cf79adabe4a49f07983beb2520ff0b3fda578a6a6a8513668da061096fee35ea62dfe1272dc2ed693f2a4609d1444eca46dd002df24bc6da01bea0c2366e8b160756be7b4ecf8f4e16e36f7e8f6b9c4ede78442d2e5b9bfd229b08a0e1a4e9ab4aa65c7aa7de1a9f0131bc6df85a4ee26543afd973ca0770b6a48b77a0074c7f93753cd5b3a2708253a78b8f7d208c8e6bc17b0517b3ed54385efbe44da07e9b01e890594903f9ca5c976630f71cc33c2d89d6f4cb590a8a45835f802894a0471cf580a1a9512b3611d237930598450b878532b14627ff1744bfcf022928b8a01f69dd332c5f488cdbdeec5e3d9d9f3f89f8ed8e4b2494c958ed494b4569f2a9a025523d65f51a0c24e4e2c5c7cba8bf07d93419929dd3e462b33078ed5c1a1b5aa098d2b8f2f925cbafea85d99674e3c46a9c3d891693ba02a2ed910bc8e94778e0a03a92aa841b80df9db77b6119a94b765311901a0e7f7c1f569da587ab41c0fe6c80', + '0xf90211a0d4cab5a47d8043340092eba307d3b479837e51edf2975224c46b78fa5d9f2bdea0ba8ac3bfa7a33f5d711782f010d55b300c0291356ac7a5df0c7926bc6debb839a0adfea25bac8862fb080a091f6e19a00bd137427f7a0886c8f50aeb4a3872c5a0a08179a51d62c8ee0f3ad5eb3535c56dd975a9e52260c202c36e159129779448a4a0c0f682c90f18feaa067339a7a42b583f305a79503b16d61a56f10551132773c0a028df3d931fa6fad2f30a3c471ac1a79f038980e262287030b0699bffba133ea4a0e2b138a12ce1b81f04de0f18c5cda2c1e6aedc3aa492a851f4d74d02fb8eb938a0e377cd14019780bea727694e4aaf3f354fc0dfc6635cb501b562447c90366311a0651f49adb9572e81a082469d2823d728b9d40755534c997057f0085d464cd5aca0b7d9e9ca48f3c7beae701128ecd079dc62071464d505015ac54ccda9bad97216a003a0946cf1ced04b70824b889e5d78198d87948e4b039bec65a2414924df8144a0e434d71446bc0e7e57212c6e9c51404aeaef72793a78573d11b5b52ea93364eea003b39a423c7ce0663d5fa748919a7039b7f4fcbcd00db13582de55435f5d0d0da0ebfd28715bfd53b7d382584d359028ffda90da7708131a666701a4703f258ca8a03768dc2f979daec77db519b61c2629389fe2f9f71940d04fc6d5af2f6ce5f2c7a0b4d261157f8b020cf954cdb60cd3fa1744bcb61f8da0cd49e7f91165fd83a07380', + '0xf9011180a03464dee21bd9b7f1712c25a7bf48517d93f6cd02bc5e069e85ca98eef103792b80a0ac233ce7e7018541d154a3abf88a2d3d564777b116c94fec994ce36d0ae1582ba0fd874c87366c0aaaf7fccf6065684b0745c3dcb1632d64ebb023cfe15512924e808080a02073bcfe0a91dc4b71e13226cefc82d938a69b86d682b838f1db53f367510f8f80a040c3c8f7a9522d6df5c0028d90d360f73c5169b4cf434d95350beed43e167390a0ce16551be1e0a52b73b88c006ac4f69cd4ddfa15d94f885ca37f46f2eeb84037a0a856e72e69c2131a5d4e0ac7b583725e9a400db1263a6f0b13fd298c5df84327a0598f8e0f6c6ea52b62e04c655de5e5494597c2902078b98091861dd0bf237873808080', + '0xf85180808080a06cb96634150a4bf19ad1cd1d29ead274d327b6c478fe4624570e3b7f848fea318080a014b2529162240ccb5e3b71491dcb7e3c043f6a82627f349d4cdcbcea92e6a8e7808080808080808080', + '0xf8709d20ae81a58eb98d9c78de4a1fd7fd9535fc953ed2be602daaa41767312ab850f84e808a0272380c74083753ca3ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', + ], + balance: BigInt('11551700520686660602427'), + codeHash: '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', + nonce: BigInt(0), + storageHash: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + storageProof: [], +}; + +export const mainnetCode = + '0x606060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461019b5780630753c30c14610229578063095ea7b3146102625780630e136b19146102a45780630ecb93c0146102d157806318160ddd1461030a57806323b872dd1461033357806326976e3f1461039457806327e235e3146103e9578063313ce56714610436578063353907141461045f5780633eaaf86b146104885780633f4ba83a146104b157806359bf1abe146104c65780635c658165146105175780635c975abb1461058357806370a08231146105b05780638456cb59146105fd578063893d20e8146106125780638da5cb5b1461066757806395d89b41146106bc578063a9059cbb1461074a578063c0324c771461078c578063cc872b66146107b8578063db006a75146107db578063dd62ed3e146107fe578063dd644f721461086a578063e47d606014610893578063e4997dc5146108e4578063e5b5019a1461091d578063f2fde38b14610946578063f3bdc2281461097f575b600080fd5b34156101a657600080fd5b6101ae6109b8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101ee5780820151818401526020810190506101d3565b50505050905090810190601f16801561021b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561023457600080fd5b610260600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a56565b005b341561026d57600080fd5b6102a2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610b73565b005b34156102af57600080fd5b6102b7610cc1565b604051808215151515815260200191505060405180910390f35b34156102dc57600080fd5b610308600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cd4565b005b341561031557600080fd5b61031d610ded565b6040518082815260200191505060405180910390f35b341561033e57600080fd5b610392600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610ebd565b005b341561039f57600080fd5b6103a761109d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103f457600080fd5b610420600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506110c3565b6040518082815260200191505060405180910390f35b341561044157600080fd5b6104496110db565b6040518082815260200191505060405180910390f35b341561046a57600080fd5b6104726110e1565b6040518082815260200191505060405180910390f35b341561049357600080fd5b61049b6110e7565b6040518082815260200191505060405180910390f35b34156104bc57600080fd5b6104c46110ed565b005b34156104d157600080fd5b6104fd600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111ab565b604051808215151515815260200191505060405180910390f35b341561052257600080fd5b61056d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611201565b6040518082815260200191505060405180910390f35b341561058e57600080fd5b610596611226565b604051808215151515815260200191505060405180910390f35b34156105bb57600080fd5b6105e7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611239565b6040518082815260200191505060405180910390f35b341561060857600080fd5b610610611348565b005b341561061d57600080fd5b610625611408565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561067257600080fd5b61067a611431565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106c757600080fd5b6106cf611456565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561070f5780820151818401526020810190506106f4565b50505050905090810190601f16801561073c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561075557600080fd5b61078a600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506114f4565b005b341561079757600080fd5b6107b6600480803590602001909190803590602001909190505061169e565b005b34156107c357600080fd5b6107d96004808035906020019091905050611783565b005b34156107e657600080fd5b6107fc600480803590602001909190505061197a565b005b341561080957600080fd5b610854600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b0d565b6040518082815260200191505060405180910390f35b341561087557600080fd5b61087d611c52565b6040518082815260200191505060405180910390f35b341561089e57600080fd5b6108ca600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c58565b604051808215151515815260200191505060405180910390f35b34156108ef57600080fd5b61091b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c78565b005b341561092857600080fd5b610930611d91565b6040518082815260200191505060405180910390f35b341561095157600080fd5b61097d600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611db5565b005b341561098a57600080fd5b6109b6600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611e8a565b005b60078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a4e5780601f10610a2357610100808354040283529160200191610a4e565b820191906000526020600020905b815481529060010190602001808311610a3157829003601f168201915b505050505081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ab157600080fd5b6001600a60146101000a81548160ff02191690831515021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcc358699805e9a8b7f77b522628c7cb9abd07d9efb86b6fb616af1609036a99e81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b604060048101600036905010151515610b8b57600080fd5b600a60149054906101000a900460ff1615610cb157600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aee92d333385856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1515610c9857600080fd5b6102c65a03f11515610ca957600080fd5b505050610cbc565b610cbb838361200e565b5b505050565b600a60149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d2f57600080fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f42e160154868087d6bfdc0ca23d96a1c1cfa32f1b72ba9ba27b69b98a0d819dc81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000600a60149054906101000a900460ff1615610eb457600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515610e9257600080fd5b6102c65a03f11515610ea357600080fd5b505050604051805190509050610eba565b60015490505b90565b600060149054906101000a900460ff16151515610ed957600080fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515610f3257600080fd5b600a60149054906101000a900460ff161561108c57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b477adb338585856040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b151561107357600080fd5b6102c65a03f1151561108457600080fd5b505050611098565b6110978383836121ab565b5b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090505481565b60095481565b60045481565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561114857600080fd5b600060149054906101000a900460ff16151561116357600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6005602052816000526040600020602052806000526040600020600091509150505481565b600060149054906101000a900460ff1681565b6000600a60149054906101000a900460ff161561133757600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561131557600080fd5b6102c65a03f1151561132657600080fd5b505050604051805190509050611343565b61134082612652565b90505b919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113a357600080fd5b600060149054906101000a900460ff161515156113bf57600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114ec5780601f106114c1576101008083540402835291602001916114ec565b820191906000526020600020905b8154815290600101906020018083116114cf57829003601f168201915b505050505081565b600060149054906101000a900460ff1615151561151057600080fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151561156957600080fd5b600a60149054906101000a900460ff161561168f57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e18980a3384846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b151561167657600080fd5b6102c65a03f1151561168757600080fd5b50505061169a565b611699828261269b565b5b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116f957600080fd5b60148210151561170857600080fd5b60328110151561171757600080fd5b81600381905550611736600954600a0a82612a0390919063ffffffff16565b6004819055507fb044a1e409eac5c48e5af22d4af52670dd1a99059537a78b31b48c6500a6354e600354600454604051808381526020018281526020019250505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117de57600080fd5b60015481600154011115156117f257600080fd5b600260008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481600260008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011115156118c257600080fd5b80600260008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550806001600082825401925050819055507fcb8241adb0c3fdb35b70c24ce35c5eb0c17af7431c99f827d44a445ca624176a816040518082815260200191505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119d557600080fd5b80600154101515156119e657600080fd5b80600260008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515611a5557600080fd5b8060016000828254039250508190555080600260008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055507f702d5967f45f6513a38ffc42d6ba9bf230bd40e8f53b16363c7eb4fd2deb9a44816040518082815260200191505060405180910390a150565b6000600a60149054906101000a900460ff1615611c3f57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1515611c1d57600080fd5b6102c65a03f11515611c2e57600080fd5b505050604051805190509050611c4c565b611c498383612a3e565b90505b92915050565b60035481565b60066020528060005260406000206000915054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cd357600080fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd7e9ec6e6ecd65492dce6bf513cd6867560d49544421d0783ddf06e76c24470c81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e1057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515611e8757806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ee757600080fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611f3f57600080fd5b611f4882611239565b90506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806001600082825403925050819055507f61e6e66b0d6339b2980aecc6ccc0039736791f0ccde9ed512e789a7fbdd698c68282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b60406004810160003690501015151561202657600080fd5b600082141580156120b457506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b1515156120c057600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3505050565b60008060006060600481016000369050101515156121c857600080fd5b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054935061227061271061226260035488612a0390919063ffffffff16565b612ac590919063ffffffff16565b92506004548311156122825760045492505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84101561233e576122bd8585612ae090919063ffffffff16565b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6123518386612ae090919063ffffffff16565b91506123a585600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ae090919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061243a82600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af990919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008311156125e4576124f983600260008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af990919063ffffffff16565b600260008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806040600481016000369050101515156126b657600080fd5b6126df6127106126d160035487612a0390919063ffffffff16565b612ac590919063ffffffff16565b92506004548311156126f15760045492505b6127048385612ae090919063ffffffff16565b915061275884600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ae090919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127ed82600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af990919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000831115612997576128ac83600260008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af990919063ffffffff16565b600260008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050565b6000806000841415612a185760009150612a37565b8284029050828482811515612a2957fe5b04141515612a3357fe5b8091505b5092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000808284811515612ad357fe5b0490508091505092915050565b6000828211151515612aee57fe5b818303905092915050565b6000808284019050838110151515612b0d57fe5b80915050929150505600a165627a7a72305820645ee12d73db47fd78ba77fa1f824c3c8f9184061b3b10386beb4dc9236abb280029'; + +export const mainnetTransactionFromBlock = { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: BigInt(17029808), + chainId: BigInt(1), + from: '0x38abab9766e0b27d2912718a884292b8e7eb2803', + gas: BigInt(500000), + gasPrice: BigInt(44546465904), + hash: '0x603caf7d4be62e5946268fa1b594029c40fab23826d388729367c37649ea3967', + data: '0x3df021240000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043c33c1937564800000000000000000000000000000000000000000000000000427a6327d90554fc361', + input: '0x3df021240000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043c33c1937564800000000000000000000000000000000000000000000000000427a6327d90554fc361', + maxFeePerGas: BigInt(108571383800), + maxPriorityFeePerGas: BigInt(25415778028), + nonce: BigInt(6346), + r: '0x601ab6acc74820bf5d8d8675ed0828447937869c985ec46bf8010de898aabbcb', + s: '0x17da59e605337ada87592aac2952cbf731575a8eb0fe4bdefd4fa8ce35260bde', + to: '0x3f1b0278a9ee595635b61817630cc19de792f506', + transactionIndex: BigInt(1), + type: BigInt(2), + v: BigInt(0), + value: BigInt(0), +}; diff --git a/packages/web3/test/e2e/fixtures/mainnet_block_hydrated.ts b/packages/web3/test/e2e/fixtures/mainnet_block_hydrated.ts new file mode 100644 index 00000000000..a736f79412c --- /dev/null +++ b/packages/web3/test/e2e/fixtures/mainnet_block_hydrated.ts @@ -0,0 +1,4113 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const mainnetBlockHydrated = { + baseFeePerGas: '0x474472184', + difficulty: '0x0', + extraData: '0xd883010b05846765746888676f312e32302e32856c696e7578', + gasLimit: '0x1c9c380', + gasUsed: '0x143f430', + hash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + logsBloom: + '0x4df74c536feb5b9b15f957639771c6a373e719164f8593a74f9bbea57eaafd57bc3713cc5f12770cff1397fa4347c99e0f7d1e2edb5aedd4bf21d5e21ea43963fd767ad75fefcb3dffefe37b5d3a0879e29b14a80deefa730dd29ccd9e7134833aa03fb27b97d98982427405ac0abedd425a3bd70b7d5ff34f5d2cda3e7fd29fcf23d71d0a4c370005d82dfe53be067656d2bce157469cf97ff5ab7ce330166f9ed87d5717a46a3b603affe5b13cedca2b5a46bdeab6abab0dd72c3f14e2fdda4e38bd6e5e0b3e5bc04edb366cef95faf8f96edba7fb645a770e3daeca8de47f54736b5881078d85882d16ada151ea84e6779b30cb7ca4d68f8dbf31f296fc87', + miner: '0x4675c7e5baafbffbca748158becba61ef3b0a263', + mixHash: '0x4ec3b909884d099f633243913328e65d659c646e349c14ced389280fefab41c3', + nonce: '0x0', + number: '0x103dab0', + parentHash: '0x28ad78b5598691f1eb3aee2a17540496b539fb4f72ca5eaa461a331791cfc7cd', + receiptsRoot: '0x78017242efd230482ca0a6ca47a5c3bed5a275b6e3b09223ff8e2354f3136772', + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + size: '0x493d0', + stateRoot: '0x637b62addfc277cb5ae4aac3c8b3bfc8e49ebe9369d07d9757c5f1f2ec937306', + timestamp: '0x64363eef', + totalDifficulty: '0xc70d815d562d3cfa955', + transactions: [ + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x0df433e890793b488c13d18f5d113cf194ddf7ec', + gas: '0xfde8', + gasPrice: '0xd8111c400', + hash: '0xfe87d41469efbea299780c8e218590753e0893ee2d2d65f867d9c9c7b9ed591f', + input: '0xa9059cbb000000000000000000000000913cec99a2afb5ec7008831998bf4eebf1ddb830000000000000000000000000000000000000000000000a39bd57ecedc547b000', + nonce: '0xf8', + r: '0xf511d0f14c7ad3fbd118136e006dd7327ffd0614cb415e41bf2dddea1c733251', + s: '0x1174d5a1e42be8c4ca43acbad607a33d4fa39dca036dd7c7a981f3fceb465c77', + to: '0xd04e772bc0d591fbd288f2e2a86afa3d3cb647f8', + transactionIndex: '0x0', + type: '0x0', + v: '0x25', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x38abab9766e0b27d2912718a884292b8e7eb2803', + gas: '0x7a120', + gasPrice: '0xa5f2d2070', + hash: '0x603caf7d4be62e5946268fa1b594029c40fab23826d388729367c37649ea3967', + input: '0x3df021240000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043c33c1937564800000000000000000000000000000000000000000000000000427a6327d90554fc361', + maxFeePerGas: '0x19475bd7f8', + maxPriorityFeePerGas: '0x5eae5feec', + nonce: '0x18ca', + r: '0x601ab6acc74820bf5d8d8675ed0828447937869c985ec46bf8010de898aabbcb', + s: '0x17da59e605337ada87592aac2952cbf731575a8eb0fe4bdefd4fa8ce35260bde', + to: '0x3f1b0278a9ee595635b61817630cc19de792f506', + transactionIndex: '0x1', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xa0bc68a45bca874f2a7195fd0e946041ccd2ba92', + gas: '0xd6d8', + gasPrice: '0x8aeec0f9c', + hash: '0x4f8da807b7f0f44a4fd67eaa16cc4ef6f1071a0d8ae06349bef904f8f14f0903', + input: '0xa9059cbb0000000000000000000000000fd5b4633eda5b1daaa6a2cd6b852167318aad990000000000000000000000000000000000000000000000000000012687e02a00', + maxFeePerGas: '0x8aeec0f9c', + maxPriorityFeePerGas: '0x8aeec0f9c', + nonce: '0x2a', + r: '0x66d297d50616d83c4f46b2ecb07bfe58785ddc1f412565c1fa19175841f314e3', + s: '0x42d0bbf71e2de38a839d0016c5e2fd9a387621c8fd511d83f554aef09c94a3af', + to: '0x15d4c048f83bd7e37d49ea4c83a07267ec4203da', + transactionIndex: '0x2', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xae45a8240147e6179ec7c9f92c5a18f9a97b3fca', + gas: '0x5208', + gasPrice: '0x70cfb96cf', + hash: '0x199eb2a37faf1af74c752de5f378859c40a8929c52af1402bf98c9acc309438e', + input: '0x', + nonce: '0x1e5511', + r: '0x209ef9dbdeaf6807ab08d3191c00af17727ea4ae22ed8fc127a55cfb287b0672', + s: '0x51551c439baf3cab9a8b93cd1502e3a40a9b4cdef927fbd274d40d0dfcdc9329', + to: '0x7a408b5230d123574eb8c057904e4f364b980770', + transactionIndex: '0x3', + type: '0x0', + v: '0x25', + value: '0x5a119fe21ed87', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xae45a8240147e6179ec7c9f92c5a18f9a97b3fca', + gas: '0x5208', + gasPrice: '0x70cfb96cf', + hash: '0x9775612f318528221f773a926a72c758f5b6d1eb7871b7a4309fe2d870ea1452', + input: '0x', + nonce: '0x1e5512', + r: '0x4f68a9a02c74f6ac4059d3dda87db886050847822b1a3fde4fcde65c175a8f38', + s: '0x3ce0ec0d5a776d84f835a6eed0f2cdf59356ffe6d014af9b283ac84e2c5ad362', + to: '0x40fc4596608b20c97244922060dcfd2de7fdf9ea', + transactionIndex: '0x4', + type: '0x0', + v: '0x26', + value: '0x8f90791f1038e', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xae45a8240147e6179ec7c9f92c5a18f9a97b3fca', + gas: '0x5208', + gasPrice: '0x70cfb96cf', + hash: '0xdc7f7a7c4d7017c13c795fc303c5b24814e27f102f908bcb33b8f5b7e943a8e4', + input: '0x', + nonce: '0x1e5513', + r: '0x644543ff07aa6aa3197b93f8a6f333860c1f6a51889113c9b984c4cfe53ddd84', + s: '0x6cb061b61f1bb84e5435927a904884b0196b43c93a872822e1abd35caf38ec1a', + to: '0x0d2895a34520624ad6171476d62837b5e285d8f1', + transactionIndex: '0x5', + type: '0x0', + v: '0x25', + value: '0x9451e0bec42d1', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x37b94141bca7000241b87b4b361f155197181002', + gas: '0x1fbd0', + gasPrice: '0x6fc23ac00', + hash: '0x19d1a0d3ec5c0edb9f5e92fb5f8707ae92b56505093e602bea42be92a07e44af', + input: '0x23b872dd000000000000000000000000381e840f4ebe33d0153e9a312105554594a98c420000000000000000000000002d68d9aa1ff311406593887999d14db57aaf14ba000000000000000000000000000000000000000000000000000000bdc1c91600', + nonce: '0x2e3e5', + r: '0x4b06ba58fc3f9dc92be0055c55cddad9205e16c7d29bb6dede6787559e858b2e', + s: '0x2b4b4f8ad723577860d89b6311573260e450a74461b1324b727097cb1ea3f0f6', + to: '0x15d4c048f83bd7e37d49ea4c83a07267ec4203da', + transactionIndex: '0x6', + type: '0x0', + v: '0x26', + value: '0x0', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xc6e282c9f4981b2036da4ca3f4fef3d68e66f75a', + gas: '0x249f0', + gasPrice: '0x6fc23ac00', + hash: '0x9c3c1a113ed268ea222e7d9c35ce0abf5bd15f7f7dd4c00b31fd4de1a9cb57dd', + input: '0xa9059cbb00000000000000000000000067de33ebc8252df671330939ee02d70d27df265a00000000000000000000000000000000000000000000000347e512f272760000', + nonce: '0x2cb4', + r: '0xfeced6d2b4be2108e88d961423c3ddbade22425464538f63c047829bf1d8c2a5', + s: '0x7ee24854c7c79582649d25c66bc1b462c57ecb73925d94881b081577ffa04920', + to: '0x795dbf627484f8248d3d6c09c309825c1563e873', + transactionIndex: '0x7', + type: '0x0', + v: '0x25', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xb01cb49fe0d6d6e47edf3a072d15dfe73155331c', + gas: '0x15f90', + gasPrice: '0x5d9e7dd84', + hash: '0x2ad8b77960551ee3fa86b1ede54219db9490e5320bb479a467be1563f49070fa', + input: '0x', + maxFeePerGas: '0x45d964b800', + maxPriorityFeePerGas: '0x165a0bc00', + nonce: '0xa669f', + r: '0xa89f7f812e3b621a89a218f2c22da423d87dc0c2eac90505799a1b63fcea6337', + s: '0x449f43dfc141d298f61728c3f160c536ef741d4295453fc19fb22588faca1965', + to: '0x5ebe4a90a99d8d02204552079572ff962ce554ba', + transactionIndex: '0x8', + type: '0x2', + v: '0x0', + value: '0x6a94d74f430000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x62ebc97e159e60915948a4f226f18d7460f9a80b', + gas: '0xaafbc', + gasPrice: '0x5d21dba00', + hash: '0xee84b1ac8feb236190b84717a4d186b92278939d36346c81a0ee35c316763900', + input: '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000643645df00000000000000000000000000000000000000000000000000000000000000030b090c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000214e88de46721510000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000004351bb9127d783b9a00000000000000000000000000000000000000000000000000000214e88de467215100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000bfbcd9b16d0a55e8b0070551271180e0b7b8388e000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x5d21dba00', + maxPriorityFeePerGas: '0x1836e2100', + nonce: '0x389', + r: '0x201f89c979366c6789dc138b8d36047fc0ebd78956ddd1fcff547d982ce74af8', + s: '0x4b469d49d4dcdb1f8f91c8f75713a77851c020d7d19e6e9a9859896a277ffb23', + to: '0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b', + transactionIndex: '0x9', + type: '0x2', + v: '0x0', + value: '0x214e88de4672151', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x5436aa53d2b25190d2e54c4dd9117a14eb1d3d6f', + gas: '0x5208', + gasPrice: '0x5c8ad1ad2', + hash: '0x1789d5fc0756c57f5035cf7e0776c908d20350a2474b6a24f06d0c0f5aec9671', + input: '0x', + nonce: '0x1', + r: '0xc2886750f2308b50265de5c28daf2d7d05087103d8879a63064e454031fa7f9a', + s: '0x3026bc52e581f4ba9233eaca623d7ab55463466fa5cfcab568e6e86b153c0b72', + to: '0xa28c1a1330d7634c9bc5a04cb2a3b64cb866f19e', + transactionIndex: '0xa', + type: '0x0', + v: '0x25', + value: '0xfd9728a9242400', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x3e9df16ac4dd2738c9ffa5eb2981cefd04d8cea3', + gas: '0x5208', + gasPrice: '0x5b6b2af00', + hash: '0xc6b456b175dd46508260658d2730e30f92a79ffc5be7310098a45dd70e4292fa', + input: '0x', + nonce: '0x0', + r: '0x965cd3cc650e1592528d8acdf957f1c588c327513a1ae1380c996d3e129099c7', + s: '0x263967109771cb590a72b9383d8822183b452114e8fee7800184857b15b979b0', + to: '0x6dfc34609a05bc22319fa4cce1d1e2929548c0d7', + transactionIndex: '0xb', + type: '0x0', + v: '0x25', + value: '0x5d2c45892ec400', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x112200eaa6d57120c86b8b51a8b6049d56b82211', + gas: '0x7a1200', + gasPrice: '0x59e4d1384', + hash: '0x94e1c3b9a52d7a5e1c6c79dff79ef48d6b9e66aebebbc416a70f006c4382fb23', + input: '0x0c4dd810000000000000000000000000000000000000000000000000000000000000383b0c799eec0c8269e6f66433183bf6c37f7e2234fad4e8619a9372c537e1919cc9000000000000000000000000000000000000000000000000000000000082663d00000000000000000000000000000000000000000000000000000000000000109d7468151d8ce8d8cebd40a39adfd37c97df96ccd5be350407ebe07aafe0ed07be59bbd66be38ea02192e92e3620ac73fe74a4ba782333f6912a6cfc2720480e0000000000000000000000000000000000000000000000000000000064363da0536f4cde074ebf59770fcd0c104be5abf522c7b45d6304fb78b204926cf10301000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000383c0000000000000000000000000000000000000000000000000000000064363dfb000000000000000000000000000000000000000000000000000000000082689a86740d370d5ddebe0d02c0213b810e4c7743c3f93d5374c8cdf053a9d428e991000000000000000000000000000000000000000000000000000000000000001b819ce85261f50be1de19276f26e5ca11a848228ee6210c25cb59dc36f351dc360ff93be68c9ff97a26ef6bec24bd43f19b98490ef6e53e3d25a9b095e0cac0e80000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000990000000000000000000000000000000000000000000000000000000000000157e000000000000000000000000000000000000000000000000000000000000162c0000000000000000000000000000000000000000000000000000000000001648000000000000000000000000000000000000000000000000000000000000097440000025d60c4d13fd5e61e8002cedae0b934a332f744aabb60ab2c4045c0bbdb0579e8ee00000000000000000000000000000000000000000000000000000000000000018abc516ed905f4cd2f75e529e5e37e29e9289343fde880ae66b24b0f565853ae0000000000000000000000000000000000000000000000000000000000000001be76ea648005e24e93088e8d659cbbeb2b35d2faab5c9ca93a19244a6be3d12c0000000000000000000000000000000000000000000000000000000000000006ca2b2246ce791549583c2223e325fc09370d1bc3ab8a7fb90fe95d7f84c18b9b0000000000000000000000000000000000000000000000000000000000000001032fcb196b9985790ce5d010f9ad1d3ed1098603297a45bebb94a4243d5bf81c0000000000000000000000000000000000000000000000000000000000000004b4e0299791aa0f9f1b27a66dfbb346e10181ff7bc2f1e0dd3ce1533b205ce30c000000000000000000000000000000000000000000000000000000000000000111a306f44c250416ee4e6f836b7e8f4f39d68850b32043fdffedfd02b6cfa9540000000000000000000000000000000000000000000000000000000000000001802346705a406cfd46fb98940d21d0a55708d1d2a2bacfc1e51563885e440fe40000000000000000000000000000000000000000000000000000000000000001d747b73d89ce8e9562906c6ceaaef75e663cf4bb9417e2020dcc7e61fb70649b0000000000000000000000000000000000000000000000000000000000000001dd249cc6e1d54c058fa10b0a8eb3efa2abe97e7337383a9c063ad713d9ba13f00000000000000000000000000000000000000000000000000000000000000003501c8b17b08592ef77746faf27ce73e4bda08f1cd34258cc84a898975ecfe2f800000000000000000000000000000000000000000000000000000000000000019b32991c1904bd3fec1e827fa2cbd2cf95fb60a1933575375ac662d94f531f340000000000000000000000000000000000000000000000000000000000000001fd354efb5ae3a973112f4661c3a0738be9828c7c3b38cca9c4347542417d7956000000000000000000000000000000000000000000000000000000000000000221ebcda1219518a7ef173346adb7085d22d5ceac869e3c2dbebdfa98f33c49380000000000000000000000000000000000000000000000000000000000000001efb54ced7b1332e89eb3f543d10d5cc7ea920b27a5bbde793f94bafedb2df9a0000000000000000000000000000000000000000000000000000000000000000152c0c38ce38aaa444503c1176163a7ddbb34adee20f1718a5a2fc72df56113990000000000000000000000000000000000000000000000000000000000000001000bbd8d1d92156fbe8958c81e7c544053675cc73392204f998dd02f66b31d190000000000000000000000000000000000000000000000000000000000000001060d5ef2d198303e44fd97bc33f038852fc53780d9a8221a556b1c671d358b6a0000000000000000000000000000000000000000000000000000000000000003e567182bc48dcef99fccb7044d5c2451e32fe8461b2f26c00b5674600078415a0000000000000000000000000000000000000000000000000000000000000001d02b2774b947ffd572c255da723d08b2660838e8173d7c7938f1431660bd40cd000000000000000000000000000000000000000000000000000000000000000186735298a63049fd790ee7ea2b312fcbf59889e147153b445061c59cb58449120000000000000000000000000000000000000000000000000021706fde04f800a73475f474aad72020b5b750b134f58cdd13ac9b0f7fc04aa155776a7ffeba3e000000000000000000000000000000000000000000000000008ebf301b8c84765c79d51c54d3539ff139330c3148948e11bc6d228b1b08d6c0be0dc4ed935d5e000000000000000000000000000000000000000000000000044e090e4db9661ad939b110fec3b904a308b2ff6ee56654fc8209f989724e63bcfe853fb2d56ebd00000000000000000000000000000000000000000000000000217112d94550001fefaa527022cff5885aab179784ea4aac29fe488d8f67bff3460e946c213567000000000000000000000000000000000000000000000000004981720467200002acd1eeb97c30be87feeda1372ee36d83b85c3ce931afd2e27b5057f16393120000000000000000000000000000000000000000000000000040543876f2b00996a26f6ed760f665efa6f5d10ba47673e2c525c376f226865884b6b727c1103a00000000000000000000000000000000000000000000000000b9798958eb98c635f474747e31bf6372044cd1a296a239774d49934f0b0a8bf2f8747180ab66c800000000000000000000000000000000000000000000000000b199a3e0526000d29bf2e0f2fb05525980d8d48972280bdee43e8f7211db5a6331539d704e0bc200000000000000000000000000000000000000000000000003aa35ab6a48e87afa349a81830c2f303df48abbb66a29c3c20320c464fc6b4ffb3cec7d91be44ef00000000000000000000000000000000000000000000000000bd3dbbe7c2cc90029b691b3026b8f65f1fcc7ac7d08039e9ed360ec4e6184f278ed85f8776564f0000000000000000000000000000000000000000000000000041d063ac76d00a3a75345e199693e329dc9df746ffa04cdbb5c2a4972ee2589074425573fee5c4000000000000000000000000000000000000000000000000009cacb762984000c09cd23372820611a27a87e215f18b5567f919b703d3a14c8c3bc09c5b9496f700000000000000000000000000000000000000000000000000d5cd14fb0e8476f2da5be34629960152c21b34dc2beb35f2f3f442a45d237c5371c4246d67b53b0000000000000000000000000000000000000000000000000047b5724d257f6c51c7064ba3282a34a19e8e0620eefcc6163b2d098fc1ce2ffcbf8d59c89de98800000000000000000000000000000000000000000000000009e1fa9df2addc61b17e807aa6a031d771c0be552a8855ae48e828a01873d31d122f80e38fb3870b000000000000000000000000000000000000000000000000003604a9a590669678dbd0ec8c7fb535f3a3005b303d04132b4103932f6b2ea8e42fb0c946ae3cff00000000000000000000000000000000000000000000000000242b05af6dc3ee73fe8cc3b3981107f063f10e0f429a6e0440148921a434550692b6e740704b89000000000000000000000000000000000000000000000000004ad2e2810e40b2e9c567c483bf77a57deaf9f0b8596671e446b11f8e101231d0314d51ff5a6695000000000000000000000000000000000000000000000000003983c4b860e177fb08d0b312a0de3f311b2d33d46cd48f25a9029c98cafdcb9c275b4a41eee30f00000000000000000000000000000000000000000000000001805f06c9388c5f9e90532d68eadc90dc2dc0c9bb3dc65b30ec673afa239b3c5f4e7c3245b83ae3000000000000000000000000000000000000000000000000004193740543a00803a706e02c4f6982f728dbbf9f06b3dd4315678f0765bda2034ac001e43714b900000000000000000000000000000000000000000000000001aaff37a904e1777d81a06e3d4f1145f08dcb7e2c5a1b0bc07c049b7ee4b294de50eacceaf20004000000000000000000000000000000000000000000000000005724fedbb2100837e2575fd4309d637bb9f7f8d68d3d6513a6c06ddca1acfa7142115e0f22ea230000000000000000000000000000000000000000000000000011ba60e96de274ded310bf19530f83dd14b4c9104b86d92905a23ad48781eb5555e92e36238a3d00000000000000000000000000000000000000000000000000adb21affb6b025122ce1fd6dafaace345a6e8e8053288852c2804d829fa0b2f53dacc822293a35000000000000000000000000000000000000000000000000010ce6b40483a177744adf0702b12168006ed31d0ae5059bad72c218445d69fb1cd849ffa9553e75000000000000000000000000000000000000000000000000002bd225d092ee3882b345b5454e16c7d778917c214cc21a704ad18effc433ab76b3742f818776180000000000000000000000000000000000000000000000000039fb34ea4e5ef6967d6923ed83e1edf338abc3db62ca170836b6805d034f1c8aa9be3f173759a8000000000000000000000000000000000000000000000000003ecf8ea01a447655553bd9d902714e1a6a68355ffd2a48c0f05bcff2d7275133ee53a68c11fb4100000000000000000000000000000000000000000000000000a2cc89b2f602c34a99726bc821373dca937c2e1e1a04e729e24cd6416ce1a6c7946659a08655a400000000000000000000000000000000000000000000000000b5ec0ab42518c6f4b90caed20cf03f677275ad7f39a49c3e2c4957e4877f6d6a35bb894987a5d60c799eec0c8269e6f66433183bf6c37f7e2234fad4e8619a9372c537e1919cc9ec74508765aee93de110aefc09270ee9fb53f1999f29fc5ebc24dd0ede2c3a7500000000000000000000000000000000000000000000000000000000000000016c621809c6ca711a4d6b302551121c359ff76f7c4d5a320a16f341b56c79669e0000000000000000000000000000000000000000000000000000000000000001d80cff06f9ec1f38bed97afc84f89bdef6d82be0392af92ea32ef38ffbe1182c0000000000000000000000000000000000000000000000000000000000000001e4a233e169bee20c990f4d9c9c7a6bbcb843eecbb9ccc98358c16bedcc8dd66a00000000000000000000000000000000000000000000000000000000000000010f8b24c7e20ebf5e83a1f1de070860220742571115555dc952e9c62b95781b20000000000000000000000000000000000000000000000000000000000000532521a74e15bd64217fff71d34ea4bce501c76025371d9658f1d91c94e18a437ebb0000000000000000000000000000000000c097ce7bc90715b34b9f10000000007d6f2a52f218804936029c26e0e001a02da3bdcfddf634a63fa219e0825e912d0000000000000000000000000000000000000000000000000000000000000002c1d6d9ea700c86529fc733cf35e6cfeb3f385a62ae5ba56c306e301e75b691fe0000000000000000000000000000000000000000000000000000000000005327a3547bcb69c7cdde770097cff6c3057413a48c8908bf09738429448e7335bd4b0000000000000000000000000000000000000000000000000000000000000001dd6fe47e73fdd91b61539ecc3a7d7c694b7a3cc037fec9454e23747d6fe5ffeb0000000000000000000000000000000000c097ce7bc90715b34b9f1000000000c04a7afdfef05f20990cb7f77bba23955f9cbfafb1c843dd21713c72b18ee6b600000000000000000000000000000000000000000000000000000000000053266f3af6c93ffe6f128ac3807149259a66e8c2e2ea135191d30f4e9eb3f89237580000000000000000000000000000000000c097ce7bc90715b34b9f1000000000c3fa4ce9f2ef06c073e4bcb5cad193a4a60ddcfcca818bf7602e556a08167fca0000000000000000000000001bbd33384869b30a323e15868ce46013c82b86fbe19a1805d2343e0bdf763c94738363a08b6226b211a527531a5afc61efdf47920000000000000000000000001181d7be04d80a8ae096641ee1a87f7d557c6aeb3073ca8c7b2d587def01896e8450fffe2ed9425db7d6feb6db29b22fb221bce20000000000000000000000000000000000c097ce7bc90715b34b9f10000000007f641b3caed3e1b14310e3906ded619543a8d5d8730acaa16379dff5e35f72730000000000000000000000000000000000000000000000000000000000000001a95d63f25941c77119899ad7caf9be8bb51766a4680dfe0a01367c3d3fd8ac780000000000000000000000000000000000000000000000000000000000000001d05b36c39d6b6639c18998a2c3520c301a8fd557cdc4c0a6c35a30a1bad40a4a00000000000000000000000000000000000000000000000000000000000000017dcafe000bcfe104b30ff5b7b1e64e1beda4639c4b7aa20cfcb6d8277b026b630000000000000000000000000000000000000000000000000000000000000001239b3f3a3532fd99cd898aecc9f2e864b06a0ad4c1cc5d8a577ab2050d96bbcf0000000000000000000000000000000000c097ce7bc90715b34b9f10000000002832f0b95cde62d42470c34e942dfbf7c0887f821b6c2c266e4c52597a486d0d0000000000000000000000000000000000c097ce7bc90715b34b9f100000000032ad0072320054479e49136cb6b90c3c4c5ccf28146486dbf2b08786224533a20000000000000000000000001181d7be04d80a8ae096641ee1a87f7d557c6aebd1b813f59e366147c60432977ecf25dea77ea7778fd50742abd1ed9f600121cc000000000000000000000000000000000000000000000000000000000000532375aecf25407ed718ee36486846ac75e4783d6b3694e2f46158317122c49d65fd0000000000000000000000000000000000c097ce7bc90715b34b9f10000000000895bf9e8adf5d538599804c19b4b119dd5fbcb901aa3c61ed5c6c315fba10c90000000000000000000000000000000000000000000000000000000000000001bf5c1efc0fa728c1b241e677e4f0113c57e97ab8c989251d107f31ed381c2cfb0000000000000000000000000000000000c097ce7bc90715b34b9f1000000000186ad8718a785ba5ffadc8b82e7b306ef412529a789bedde9a3af932d92959860000000000000000000000001bbd33384869b30a323e15868ce46013c82b86fbc11189fd192e49260d5a6a467e532ee12a352ce84da8d8b431bcbdd9bdbd831b0000000000000000000000000000000000c097ce7bc90715b34b9f100000000092a0c7ab913202406cb3535446b840c0abd5ebb7dac53b1ad7eb9c52a50905510000000000000000000000001bbd33384869b30a323e15868ce46013c82b86fb22d813e55679668e7dae5e0fb78ebab1ad7a0126f7d6708a661ce8a0c15b9f1c0000000000000000000000001181d7be04d80a8ae096641ee1a87f7d557c6aeb0c8d990122d0e605658ba102420eb2e7bca22950d1af75f4ca95e8426b46704c000000000000000000000000000000000000000000000000000000000000000164fe36456c72f3e73fcac704a7eb35c7f6fec0ea2992749a89634e7d54fef6d10000000000000000000000000000000000000000000000000000000000005324f5a5261cc6dbb7e205e22024cdda8dda3e3df110e2073b795620fdf262db607a0000000000000000000000001181d7be04d80a8ae096641ee1a87f7d557c6aeb000122eadb4be54a3873e8173e1793025d6fbc481246f4b19d678634eb40508e0000000000000000000000000000000000000000000000000000000000005328e4a10d5c41a83b4373f6a30eb989e5d1cc6261221d107adc598e2a16813f91470000000000000000000000000000000000c097ce7bc90715b34b9f1000000000b4ac1da6748b6fa2d2eff40f16873f196cf57a034a791dd45235a93fd262c2890000000000000000000000000000000000c097ce7bc90715b34b9f1000000000de18e3d3c16a5d7b49c9379881f4c53f3394812be05471d3a26f992f1548dbb3000000000000000000000000000000000000000000000000000000000000000154a0255bc06d95a5f483d2ed8f8cc979503e3398dafebec5cb937bc4895aaff30000000000000000000000000000000000000000000000000000000000000001c4582d2c56c952de46681cfb4a3d6b3560a3a7ede9a7b62a3ed045d544bed6ef00000000000000000000000034e1f1dc7914e31b40a261bf4a059daffdcee2b0aa6e8a1925227edc9d2dcca29ae0dce28dad8d8a7a18cb88096ceb806f7acbe000000000000000000000000085d50ab0ca08766295aa66e960ffe87454093ef0055648334a815a05a4a403e23ebd966a52d4febda73603f3513cb8b50907af2100000000000000000000000066f1c3daf78feb6611a269dc9361290d1fbd7cb39be7d12f40ae5897052a8c4c64c29fd53756c85e4bc5ea5e1d0d74aa9a471c230000000000000000000000007f68a6610ce77e77d843ef6ef9edd63abf12ae40a0853462274d1dbc0d3987bb50812a1b0fdab4ccef332329a9f43ecfef699c44000000000000000000000000de1f048761425969bd5295e24fd2c462018e167f71be57b5f95615201bbe2c0890c2438a2fe15d8982a25a161b7d1d61fe8cc114000000000000000000000000ee8ab75f6e1d5247ad7abc7b8e8f0fbc6a45d5330d1c6c8f9c71da5e255a2c72823172eaba41e48765c53ed0051f1a3c4146eba5000000000000000000000000ca4039046f0e9a34f86b5376ba76f2d5e5a2709ef3ed0f048f3081fed52ab9f5824bd7b3b0cdd32160c636807c032dcf3368b0fa000000000000000000000000d0886275a97757676f051b29d3b636badcb1acb532f1870ebc983cac8ddcaf500f22e99c16bb224fc84d5fefaf77be5a476c7bad0000000000000000000000000000000000000000000000000000000000000001355c4181a1f385cd951e3e85512f85180eac48e86dd87f63bad6fc3b66a112c40000000000000000000000000000000000c097ce7bc90715b34b9f1000000000601883d52eea5c0f070804d3a3b570ab791cec8fdf60af57ef7689cf80ea4d2e0000000000000000000000000000000000000000000000000000000000000002f739116597fba66958a8ae7320e536f4923a98940096ea44b42b34cb3c274942000000000000000000000000000000000000000000000000000000000000000131480590300340fbda02744a999d41b561f4b1783ca7ecf37533f1db5585bb150000000000000000000000000000000000000000000000000000000000000001cd7662cb630c3bce57f358c7f18521ca7ebbac87d2b277e90922d44580cd07220000000000000000000000000000000000000000000000000000000000000001258f0071c2b94862666a92b9ade2035e2b81bc5d4628ed15ee350c4494b393760000000000000000000000000000000000000000000000000000000000005329d772f6921d2e16c1b1d06fca2880bfa70f0dd5af8fc0ffce3e6194328a4a67a90000000000000000000000000000000000c097ce7bc90715b34b9f1000000000519f80024a1b0fa173429d48ad2956521b22b80eba0145cad116dc163247dc90000000000000000000000000000000000000000000000000000000000000000121ee69fa01f5edb77053d977f2e35e653a35263f869b042636e0ed5a7761009000000000000000000000000000000000000000000000000000000000000000013f0ba6e7fc6bf2b4376bb6e59679a6e284082bd149bbcddca5402e9ea2db148f0000000000000000000000000000000000000000000000000000000000000001c932f8ee79a3d0d6c47143ac27233e3a4cbcc75e77d10b0fb71b1d58b9fef8260000000000000000000000000000000000000000000000000000000000000001a24fb3177314e8d21aed8f00da95ec8d93285b5782905fd3695148c10927cf130000000000000000000000000000000000c097ce7bc90715b34b9f1000000000190860ece26801259777b27e911a8c6cf84b71442a89bafac0c87e9695f7f0bd0000000000000000000000000000000000000000000000000000000000000001d758e9de19dd3aae54bdb580ea083a47c00fb7489dc2d0aa7c57dafb9d29e1870000000000000000000000000000000000000000000000000000000000000001a936a7af23bda6667f6d1701ebf8db01f8fd92bc17d2a141f4bc047ef1fe349f0000000000000000000000000000000000c097ce7bc90715b34b9f1000000000e53af2a22c23acf8ffdd7f89671ed7bca96a85f3ac09853b1e24abd331f5a52d0000000000000000000000001bbd33384869b30a323e15868ce46013c82b86fb7f88a4b07198da13302eca3727d25f2443e06d2c74f3f4564c5a9954da31b3870000000000000000000000000000000000c097ce7bc90715b34b9f100000000038c91f2f8ee91af9030d79078e67193af7776c541561f3a5c04a8fd672c8f56d0000000000000000000000000000000000000000000000000000000000000001c868a7872fb51d1bc8d3722633ce972ad77eae13992ffe658499c68bbb98acab0000000000000000000000001bbd33384869b30a323e15868ce46013c82b86fbfd3eedcf3857ce47d69930858115ebafb1597fed0fdb4eedda1941f83105f9b20000000000000000000000001181d7be04d80a8ae096641ee1a87f7d557c6aeb8a77e7189c7823b8409c80844c8c2ec67b279cd000ff7fcfc78afa87f8fa6ecb0000000000000000000000000000000000c097ce7bc90715b34b9f10000000001897ddffb22f42ef8d458a588604ebaf3fce2f0cf5bff631daf30dcb4ec6600400000000000000000000000000000000000000000000000000000000000053228d71897e54088e8d69d9be15f84180c23674caf2e94ba817fe17632116360d010000000000000000000000004f790f2289c46e45ed197bce7763c84591e1f223885c1867c12fb315aa3a20b25b33884ad89f1a61e298feac4091c38727585e9d0000000000000000000000000000000000000000000000000000000069d9d87bf7b47579072c0e5d88d41b03a212acba091cf55a2a3ed13817b1aeb30798be2a0000000000000000000000000000000000000000000000000000000000000001c78a47a92380c8dbf37310759f082b97ff66ab05c324fffae22e36aec594b7460000000000000000000000000000000000000000000000000000000064363dfb4b0ba283d3637db427313ef64fcb7d8e7048a4094034ec5615a79009f9dda2f100000000000000000000000000000000000000000000000000000000000136bb155fdded8547f39194ea063fc8162e38dc7681ef9bb608031c7d57cc17167d080000000000000000000000000000000000000000000000000000000064363dfb1fa6925db7ad574f041ba2b1120737ae5523f4e0c985de9a5286ca539acf4199746167732e7a6b0000000000000000000000000000000000000000000000000ec28b78b9a6cc048b9e448d7252ceb0bf19733bfae675783e1c94a8ca48cc5340000000000000000000000000000000000000000000000000000000006617717b090256300cb97bd4459eb2b17446b9cd9e2ddd18b40136b0abee0632466a5fc4000000000000000000000000000000000000000000000000000000006617717b4dc07bbc50d9368cbe3a65ed14bf69dc9c42e2664e553df808a8970b9910c7ed000000000000000000000000000000000000000000000000000000006617717b43b93274c939f90a2ca713911c929042393d717d1bebcb752999ae734b810a710000000000000000000000000000000000000000000000000000000069d9d87b75408f7853d73646871fe0770433167946ec4246cb30c474d1fb19def29dffb300000000000000000000000000000000000000000000000000000000000136ba5dce6e9652f05bda38f6fa178fa00ea88a6ead8e7a26462c1f7f2fb38fc0a4c200000000000000000000000029ab060bd02cd22e4042095679cfc5118098d46c0799ddd86d56ff7a585393097d4a81eca304ce6da5aa4e54b1f86224729ece300000000000000000000000000000000000000000000000000000000000000001ba24ead0f5db6db5ea050b324c8ad172e063ba117eec1ed8a721d8fce19ba85e00000000000000000000000000000000000000000000000000000000000136b9c2289ebea213d7254c6ef728943c6c612bb2cb418c78b160f1411ceb3fe374470000000000000000000000000000000000000000000000000000000000000001e8828539bcdd93d3b84912dfbc88158f0984827860ce590b71e5dfc76aa9dfd10000000000000000000000000000000000000000000000000000000064363dfb916e3e21ed153df4d663f64eb114213b5be8073d740ab7538c7f1f38b5ecd83a000000000000000000000000c93d85b91dbe985400f41a81755ee842132848f711319507b731730a059906232ac8e3eba32e0b0d0329c8db128f63ee28a9fe070000000000000000000000000000000000000000000000000000000000000001e412c7ecfca70aa5de8d51b67e16ce0b6a7ab01f340d7cdde589e4df73034ccca7c7eb2f3f1b9f43cf927bfab2e8246db35e5765c6c8ac050224d53a7ab796af1f2e0fbc0ff4b698c8c86960936f324893b6ef6d786bd7bb80044cfff10cd363d3379c30e4c7b8a24443e23afa9272bac62d5dfcdac5aeebdea3ef70b7d7b9c4417d1ea2925a68dc3e7519b099bff6fbfcfbea2c9f6bc7501271f2ba69e69d96d82ca3b18d89bb6022e1547d6e4bfd9489b2a9c994579bdaac61c72c30c4a6e04ae320275846ba7fd1a649dc68e1e9a4980e8806c2ab6c100bd08535f60adeefca94efed4891bbba446ba73a989209b8cfcc282dbfd42e9bb380b8cca056fbfdb4a893f44ba48cd2b09fb0d9d1b82f11c541d1c8b2f3f2e652ef64106648b650fb42070b36bf61425b6319a9ef8464060bf5c749de4d5c420c9408d4267180891768027fca9ed429742dffc5700584bf3ba189b49f226d87208a2d66e16841f747ea769a77acd9536510b935e5f4214f4a3750b272bcc3f0c5b609a2c48ba2fcef54787fd3962f4d55b0ca87813a163ff8bab696ba2a58fb4c1c845bf155118a6a3030303000000000000000000000000000000000000000000000000000000a42bf46ca4942ad411d5efd6053fc72758e806e11bd4f4c5057eed5e0461d6be869747379696e67746f6e672e7a6b00000000000000000000000000000000001c99954d9dd84c9a8304a73a05b645bef88010ab5d10a5b569f1c120422c0ca5d5000000000000000000000000000000000000000000000000000000006617717b4f7a864a85e42cbf20158fc1b4e85cfc43a44a09d3e5a7126084e68536c37b0a0000000000000000000000000000000000000000000000000000000064363dfb3cc34c2a528abb8ac6d7b5e239fd36d1519068d9c6d868fec805b5077707715b000000000000000000000000491237018f89a5e7ddd694cf913f6c520268df68e2335a2b8b2d5c40481717c1a314c65f375c160b785fbedb8ef3a16899102b986c6f73746769726c2e7a6b00000000000000000000000000000000000000001687cda33238e453efa1e565c1c1f06c61677aee60d0b31f755b84bd1f0cd2052d0000000000000000000000000000000000000000000000000000000064363dfb00ba6a13414748b1ef36b6b171b5f19cbf88fe7b300e5af3aef2c4fdcfe4ad816c6f73746769726c0000000000000000000000000000000000000000000000107f67f2c7782ebcd3b3ff8ebf366d6dd2dc5ab7c88f76eb778b48ed52f4df78070000000000000000000000000000000000000000000000000000000000000001d5c0cb57a330b31225c11b0f53707564e8f1a14409a00772b0b148b9bc9f389a00000000000000000000000000000000000000000000000000000000000136b86daaa96f059f166dc407aad6278b5af15efe4fe10a3cd31a98974ffb5f30095273686d696e742e7a6b0000000000000000000000000000000000000000000012ef729f80464970381eb9145f866dfc283ff8b556e78697d92a834fc2018a124d73686d696e74000000000000000000000000000000000000000000000000000cea64b6adaa40952850ec2c35667d9f747617a546205498b4ae0fa6dcf92c388e0000000000000000000000000000000000000000000000000000000064363dfbe8706c847a174d16cfdc986ee037fb7f63bd5e00dbefcdcdf426cf5abf4dbd8d6a303030302e7a6b0000000000000000000000000000000000000000000000100d7235a25bcb0486ffa3af6c17ec67031c81f5cf2a91220e9a5510173acb4ab00000000000000000000000006924da629a9fd4c6f0e0c903e3254cb4e79bde7573cdc6d962cd4f23e714a51747ab1f643f4af7304b9b3ad7858dc974d9b4b0e000000000000000000000000000000000000000000000000000000000000136b70f594d11e78d366f73c65f16e85addc51f08a7cce0dc4311938b71b9d4282fb87461677300000000000000000000000000000000000000000000000000000008af297cbf23f7c4ef4cddc43d9c26270b9f7491178802f720dcd2800e3cdd9c3469747379696e67746f6e67000000000000000000000000000000000000000016b8a1cd86dcfe7e9acd8c0abeb6a210b0af6675adf5430ee4a7d554fcfc341abb000000000000000000000000e1240ffc4816af172f8fec0e9b705088e34964dc8fb262251decff49f605258f6f35161dc7ce936e6e6042ef9305a204ba971c077965736368726973746f6679657300000000000000000000000000000000001cd428a8cc57a462e1d8f27713893aed6f2be39178338fa3440d9ee06120b40d787965736368726973746f667965732e7a6b000000000000000000000000000022d7e70cf11ee325dca919a6a31b651049f214804fbae4cbdc4a817dd69baa747100000000000000000000000000000000000000000000000000000000000136bc9d4ed2097103f70dcc6fc6ecf4f29056f511985f365c0d264b036799aabb8229000000000000000000000000000000000000000000000008a0d48bb155d2517eb58c151666030ba908c1e368c855bfcf7d3ebf76171c03950e64f86b70d7d3d1000000000000000000000000000000000000000000000000000000005b0cd4ba3cf750cb637a033dedf97562e377a4d97385cbb531ea2ca8ba1578ff79834e640000000000000000000000000000000000000000000000000000000950269753c346491b306a599e06c9b42537432b230aa21106b707ad0c61dd13ec6c8d16c90000000000000000000000000000000000000000000000000000001d1a7898e5bb9c76e26838b78f745025b92a2a36a9584fa5e376507a4120b24750b6cde1760000000000000000000000000000000000000000000000000de0eef7f7e47c9bd02873f330e5cd67197d88043fb5255d082c85c2c1604b6b1981f11d407e86c50000000000000000000000000000000000000000000000000000000cf36b232a3388e98088472b674a08a86ab4aeae60d4d0d6d7451a247d80572fd11f7a45950000000000000000000000000000000000000000000000000000000001406f405ff1d3d1ab630cb88dbc07f4253dad9497a74275866ad99ec1976aa3cc0d03eb0000000000000000000000000000000000000000000000000de0eef7f7e47c9b336dc688158fd77d159351d9b51e1777d68331bf46092e4f5788e45d37f90d020000000000000000000000000000000000000000000000000000000002b0fd7bb0de2b55a8dea9e6e71ea9016a6d90bdec82a33319f76c88486fb58a4a89e09e000000000000000000000000000000000000000000000000000000000026259f6dd2e16d9b0cd56071419ae152d97435e5642eaee5f49aad2dfbc4d87800688e00000000000000000000000000000000000000000000000000000000017d783fdb57d2cfcb157fb367ec66e4c8324067317997d9a198f0bd4962233da333dc5300000000000000000000000000000000000000000000000000000000046a0cfabb83cc7091c1b9a042c99e726d285387219e21679236362f46444bfae0cd0b3a000000000000000000000000000000000000000000000000000000000a1d684ccb6534715527fdce0a23dbe2ee275a140be8097fa11e84459f6b3a02c1f1cf0f00000000000000000000000000000000000000000000000000000000000a957b1ebea139b1dcfde4ff4e6dade88ef3672dc0dd6f21853d7b5b4fac86e78424f000000000000000000000000000000000000000000000000000000000003e5b670b5006588117c35063b903588558c5bc040c9fd0003898416bedc3783f41a18200000000000000000000000000000000000000000000000000000000017d783fd65fd101d4bd179939f3decba3b9befc15103d766bd579f2d7552553a132b27100000000000000000000000000000000000000000000000000000000013959c72f6cbb181ddb6d13bd8a579bc42e4e82b4e65a988f6698c6aafe7e04b2af7d95000000000000000000000000000000000000000000000000000000000053b2c2f5cdd6305f23335ad6a7c3e2881139c02423c7ef14317c86189ebde8c90d899600000000000000000000000000000000000000000000000000000000000000011080bb9e1ba16709eb3903c52245e42b38bb67c296c2dcb9cf4d235150899d3f00000000000000000000000000000000000000000000000027b967efd738733800e22b650554b0cfd471177516b0b6d4a6684a639f69654f5333bb775d037eb60000000000000000000000003637b5a0a7bfe3045e0d96533d6dbedbc04ca93231720c657e95008736d6e155350b1bb22caec9e6572b4424f7cb3805dbd36ad400000000000000000000000000000000000000000000000000000000000000017f4d2bbbe9dc9c1519b105ad5cf3d226b7c8aa26b7122944f45ccc3ce4dbcbcf00000000000000000000000000000000000000000000000000000000000000012d10026f0ef46edb66759cb64fde8b145cdfcfe0f1be0c094e3e0eb12418af8c00000000000000000000000080115c708e12edd42e504c1cd52aea96c547c05cbe6f6a400f5d4927f923ba57f56b79135dbc76afa8a2919429a2615ecaf2b0d500000000000000000000000080115c708e12edd42e504c1cd52aea96c547c05c06b0be10f5614c5ce73af5efb84ab4b2bb4cd6e339198a97def095cf211273b600000000000000000000000000000000000000000000000000000000000000018dd7f6399a34b75fdb4bdedb5eaaa13ecc71422e2942b8b58a154d1670595e9b00000000000000000000000080115c708e12edd42e504c1cd52aea96c547c05c8d8fbd660b1f9bbef4e5c37d2f8c146fc79e1d33a340786babc75df5af222b150000000000000000000000000000000000000000000000000000000000000001070842ffbb3b588c880aa5498b712add6ffb379e749f45544e1089cd89e3c33e00000000000000000000000080115c708e12edd42e504c1cd52aea96c547c05cb25f80a852cd29e9638707bb3c3644d41a19fcb988c14c03bafedf59b67bebd000000000000000000000000000000000000000000000000000000000000000017040a4c342f27e4438da71afc92c45cf119b79f8e66be57041c90a5bfea60ed700000000000000000000000000000000000000000000000000000000000000013ca743c2b0ff637e016bf03f48fe69107b9f4f3ce061f3beb874b338bf968b34000000000000000000000000000000000000000000000000000000000000000184f999f18c5fc86ad5127ed162dc6e44ed0c805c2e5fb61f3f2e88a41e48af1f00000000000000000000000000000000000000000000000000000000000000019a9e639e0f11dfe7cba571283d6ffa33448471b41e765f484c0c61339f0279dd00000000000000000000000000000000000000000000000000000000000000017d79b34588a5f2b46a9a044bcf17548b73ae483cf7390ce8a0b5c05292b9bf7a00000000000000000000000000000000000000000000000000000000000000018d12a7c285824d5e9c387937842b8844b94f4cd431af43259fe188385f9dc0040000000000000000000000000000000000000000000000000000000000000001b233ba95d46f75cac29ea63fa9db25ff39f770a6d493ee10352f5cd0237c1843000000000000000000000000000000000000000000000000000000000000000100cd9b9f33ad3f67f9e8484907d8ad60deda0b85ce48778ef7f910a8ce42bf7100000000000000000000000000000000000000000000000000000000000000019b6fd8a07ba9acdd0bf5715c1158c7a5f8884fe681edbc7b140ad41f665693fd00000000000000000000000080115c708e12edd42e504c1cd52aea96c547c05cfafc88cfd45e24ea176dde65c19a1d5e417b2cf7b3d3340d560e39f27f1c019600000000000000000000000069b9a2eface47419d496d9a550a162185999ace5492b0d203b0786612b9560ca2781f60d8f38d83cd9b9d67bf11a3311dd04f3fe00000000000000000000000000000000000000000000000000000000000000016507d45886c3612c2f7c6ce8522a3a32175d82df803dc207fc38766c6b51de2100000000000000000000000080115c708e12edd42e504c1cd52aea96c547c05c70096f976f8bd50ac2b995ca1f43aaf4e24a97639a5b1af1fbc8300334a7cc7100000000000000000000000080115c708e12edd42e504c1cd52aea96c547c05c4cb7eeec2940d0d28503add7d427aa40078ac2fca00b6e1e790787539fda3a400000000000000000000000000000000000000000000000000000000000000001449ece3c3c13f80ae4ba5e02be7615a9383f840f5b8ba6be82177e39174fadff0000000000000000000000000000000000000000000000000000000000000001bff8d7879923b12e94084d53d755dd177e051e0ece0f430bde3dd0564ffecade0000000000000000000000000000000000000000000000000000000000000001e5ed14855c6e3f0bcfdd2519135e0cc9fa25a94cd93d02e021602969ab5093b000000000000000000000000080115c708e12edd42e504c1cd52aea96c547c05c3dc0901c79b419f72c4e302e4e0c49e8d45e1edea4981a068711744133f3f38000000000000000000000000000000000000000000000000000000000000000014a9b577b99a8bbd3e5d01edd52e6dae62d38e707cdeb812a5b45a748153423d5000000000000000000000000000000000000000000000000000000000000000128851093ee8c0ff564aa1df9845bef45afc818194dd01927eaada0c498616d69000000000000000000000000000000000000000000000000000000000000000132a1ac55686ea3afb0f7855e1e4c445f618d97178defbf354ee2feb28bccbb3e0000000000000000000000000000000000000000000000000000000000000001432cac2f5e7b5e0f34494c1d075f520d06f20e720d54c2fbf4ad50436a027f180000000000000000000000000000000000000000000000000000000000000001bd7df1df2177af71bc906fe09362eb2435410230f1f1ccc74c2593a251617ce500000000000000000000000080115c708e12edd42e504c1cd52aea96c547c05c96f308c51169961294223a9847026d5aab947578021457838e1a1dc98bbe4c7300000000000000000000000080115c708e12edd42e504c1cd52aea96c547c05cca520a736c615efda99ac4f297542760c45dae3260fa41bda9cd3be9d033acc400000000000000000000000000000000000000000000000000000000000000010a2e315343568c54d8310a3ab86ba8240c2cb23e2d13bd22e79e29c31f131b9f00000000000000000000000080115c708e12edd42e504c1cd52aea96c547c05ce9d31e439b3f9fd501afdfa1aa9d184cf810f214f5fbbe22630531598277010b000000000000000000000000d0dfdbc1eb17555480b4f5168b3cb31303d37e01183cd7ab63c4c86f9f08cee2a6644a7476267a85e8904f8d2cf65de2a00e92b100000000000000000000000000000000000000000000000000000000000000019b71e8d29ae1c6c5b3aceb05fea362ca9a0032aaf65072506d6f0d7801987b0700000000000000000000000080115c708e12edd42e504c1cd52aea96c547c05c115bbeaef2fb9bada249ab20cbc8a242d548165fa0ff265a765a85306baf31c500000000000000000000000000000000000000000000000000000000000000011fb243e2559396c24473e7bbd4e13b71d3adbe872cb2b07946d5259fbd5b0744000000000000000000000000000000000000000000000000000000000000000116663a83addd52602c78a2b350afaa8b206a080fc782ace28bbb10f1f35233380000000000000000000000000000000000000000000000000000000000000001111717afbc66ebad9c17adc192d484a20a67581859695fff119e6aefae1892f4000000000000000000000000a929cf2f30ce13e9ee0c498719d53add892be1b3c8b30c3affefe6af167f681ab039189bb97662440fa6e387689a5516a9aa58f200000000000000000000000000000000000000000000000000000000000000012fbfacef1042ff172442c7433cd799f84abfad65647dd0964a21e5677c72a93a0000000000000000000000000000000000000000000000000000000000000001a64b6e191381dd2bd86d8c02b0a3b2dbf48c849991c00d1b1c4a18feee7974050000000000000000000000000000000000000000000000000000000000000001bbae4730b9312a44ab28f0024866154b1a7c61715096e1ba173382daeff28d6d0000000000000000000000000000000000000000000000000000000000000001bc68b3f28ae5f7c3bf4677b63a0373da8aaa4a0c650245ea56dc609352ed02cb00000000000000000000000080115c708e12edd42e504c1cd52aea96c547c05c64faece2bff31bfe42f12cfb5ed3e958d8ee35875c5a5d5939cc36b7916e84dd00000000000000000000000000000000000000000000000000000000035504e16306007254348ece09b745fffef010f00639c02ca5eb9b4284427b4c897d230e000000000000000000000000000000000000000000000000000000020ee3e5436cdd57696054672795aa6cc505844b8268801b3846aaa8d847f756dae6f2b0dcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9d8dece7e5182a55eb430b97cf5422d9dcbabd99e2613d5323d6739f5ac6932b000000000000000000000000000000000000000000000000000000000284ba72a90a198c8ebc3933237cbd63b295cdf66ae488ffdf64e3ff245e49e6ab43bfc5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb3283fbc9c56f2e3c11e8804586e0df655caf519a8223bd4030a4daa9e1337d0000000000000000000000000000000000000000000000000000000006a60e163207dfc1e8d0c4963c2b7c7c5bc7f6373a922404f8f50eeec8f7de13261e736dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1da871809d2fa74a9d214541b963c751929b57dcc92f9ad3ead774cbf2d5b13000000000000000000000000000000000000000000000000000000183962ee807d688df259319002bf0a69cf84a38f5a9a1952d9e5ed495535008b39190b7a5f00000000000000000000000000000000000000000000000000000000009bc1a9dd453aac4697b8706c5060edc8bd0d1d0e5f675cc0923a12a9ea9e3a7a01a2880000000000000000000000000000000000000000000000000000000000b71b004880fb40bf49bbf83b60cac573e6637b1ba756d97fa2ee04e5387493fb07b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff54c9d6e990ad1008d80dfaae1d1c856bcb69f179c5cb5f088f0765694ae1bcca0000000000000000000000000000000000000000000000000000000000000012f96e7744bd6fe6ce572de9ad582918ed3911204099ae26879bbd79bb43a8e67100000000000000000000000000000000000000000000000000000000000443db454b9b7a26427c4185c1f0827da16fb538e51d523ae6d04199b7796ea115a4ce00000000000000000000000000000000000000000000000000000000000000581aa5622fab5a3e709f7e98a26e41f9e5da5ca0afaecb495717dbdf596b61fa16fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe313355d07e97c9fda15836821e96d035d44449381d73a06710a7c436c49060000000000000000000000000000000000000000000000000000000016381c3023386afc4c43b1d726330cf3c35d494f9547459cc9b371a09ef3b5d1ceabcf800000000000000000000000000000000000000000000000000000000000000025bcfe44bddab639d880b15e8d430dd8a2da39adbc10d4f2d05140f4e9d45eeabfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82d748678e71427173a35a26e9a70cc1b14d08b03578e8d875284e846a005cdf0000000000000000000000000000000000000000000000000000000000000004542e5ca8b4243a8c184b75a34dd8c4ebb3460c41afb8dc5b10d658139fe28e380000000000000000000000000000000000000000000000000000000001ab6908f37c751b39cd0155e40d0d6aad76f4be2ff99040aeeacff914b06057e8fce86200000000000000000000000000000000000000000000000000000000086486feba2db460b23097cab83b67f4f10fda4258f7330aa10af44bb34810d032840b380000000000000000000000000000000000000000204fce5e3e25026110000000bd04f03ee6c35fbd639c07e07a4116a67d3d13dbd6899819dc7387e0c24a581700000000000000000000000000000000000000000000000000000000000dfc4b67eb334d4b97e2457787035f007ff4459a47abb92a3e769c346f2dce86bed50f00000000000000000000000000000000000000000000000000000000002dc6c098f13f115bd0f0ec805999f7117db96a2992cc48a6352f2dfdfcec3495874e7c00000000000000000000000000000000000000000000000000000000001c4f51e4f6e80987d9809a3f0e88f78358f7c548baa94826b4f6897e42b15ad997df57000000000000000000000000000000000000000000000000000000000336f22fb7e98fada23bc141f459eb3b32f8115178141fac1b04ce555e85ba0fe0efa181000000000000000000000000000000000000000000000000000000001ded65bb13eded76a409afc6e9c197ea3e3714bd81fb917bfe9fb8c443720f8a79b6d61d00000000000000000000000000000000000000000000000000000000061a5228564cb166b1a8b3097730929560761f077f70921161db5d0f1c70cebaa96d49fc000000000000000000000000000000000000000000000000000000000165b323b738c905125decd48083c07704b8924eb44d958839dfc2527476d0b56504b95a00000000000000000000000000000000000000000000000000000000003d10144ba3e9c5e152b80efe5d40641419ff4eb2ea9092b45aa6ed5d691a4c3223b2b2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fb8aba2402591917486138102ef47ba79233b3200b8c3cfb0a7b528599acae0000000000000000000000000000000000000000000000000000000000989680befd7795b606cebcf6c0b6bce64c6593e1e47d450dfe93bf7d3effa6f42c9fc7000000000000000000000000000000000000000000000000000000000234e081e7f3132e569ad81e88b5818fd06552747ed81a1287ed86b35d79f2f559987e6a00000000000000000000000000000000000000000000000000000000017d99aa97caa6ccf2340a919921e962edb2a6d9c716a4068e8d80dd7bef78ce960333d2000000000000000000000000000000000000000000000000000000002c1b810005aad69ac436239e900702ca2ad47b2277cf027ebb5650d68baa59d0e3f42538000000000000000000000000000000000000000000000000000000000024a0f52892544af5a50730f8f909f5b4ce01376433d4a4e6817e25b8e8e2f0bd21af7400000000000000000000000000000000000000000000000000000000040d9900026458645a448f61b61036c5136cedcfb55e0d81d295c7602a59d7f9d10d83f800000000000000000000000000000000000000000000000000000000011b30ef199aa67233dfdadf5e4ceb8c1156527ade36b63cbeac6da34a13a6e6310c3adb0000000000000000000000000000000000000000000000000000000006314ee0eb961797cb90071e7191d6b4466b5e2b606e1104fda6cdd2f9cccfc01aa71ac3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff68d248a23fe1400fbcd2a477b106d0b82646049faf48b48970be24ec02725c7d000000000000000000000000000000000000000000000000000000001dcbde60fb19997b52f731d5f90ccb9d682d0b7ebd59c336598d394b11a349820e99e5b10000000000000000000000000000000000000000000000000000000005f5e1009c116e232db078e5b7226f3fd40787462bfe06dda11d873ec63761bfa0b4f58200000000000000000000000000000000000000000000000000000000000eb810ab77a453d345bf9e41a8bfbea3b9661f1980b6737224eb2f3dbc70e79b15404300000000000000000000000000000000000000000000000000000000011ae2210147b9ab7773f865e390ea675d7d05a98cae7b9cf1d6cae650c324df85337bb900000000000000000000000000000000000000000000000000000000002391bbd428c841c5c8ba399dc36a509ec2175ea6e17d4df3fff18cde8d9b5b110b926d00000000000000000000000000000000000000000000000000000000038d7eb20541434e4ee56219e2299e72637983e033efb2e6f5b1ff7cee7497bb1cc30d99000000000000000000000000000000000000000000000000000000000e60633d33926fa187a645acc07cc8eedb970630389c8a9adabc56fe0331c507281f3decffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2c6da1d8719f79378a3a37a03ede9b81aced3ede24dcb5147fba7015bbe351f50000000000000000000000000000000000000000000000000000000000706dea0c1fd3a973a0f6b080ede1fd30e52be6ef3c032de26656f573d05f52f188de73ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd22f0f7e0493705ce3560a397ef02ae22fa8a31a68f16b3aeef11271aae95d870000000000000000000000000000000000000000000000000000000000389a34d1f375de24007d700c831525bcd9cf36b4ab7f2fe83f0a6c9b4e713adb62fd7800000000000000000000000000000000000000000000000000000000048e173938eafe27c0926cdb1eb4bd00b565a45cd8ef8994b5ba1ef296fb99fc47d32126000000000000000000000000000000000000000000000000000000002133bf489d3a6aed6fcf373bb30e89515898032c0206a22df27a9af6c4246b0dfe9b2b60000000000000000000000000000000000000000000000000000000003a52ee845fe470195bc23095cdfe237b35f24e0436718ca6d320844811a55bfbb3befb6f00000000000000000000000000000000000000000000000005f9f4fa86b8b15a1387ff6556991f162dcd99d4752bbeded7e5f306b5abeec1d83e291fd387bc8700000000000000000000000000000000000000000000000000290334f34980000a2ba3647f6c3061cf88fe057bee5ae089004645f5c660802e47c1c5f4c0bf150000000000000000000000000000000000000000000000080f62f31ae992deff340f038bed5bf7bd990976869f0c5d7be3d3de17eb2328c922391314b1cd78a000000000000000000000000090a8b2e9afef2d2f0b2c5b60de6225dd41d70e32fd86d5a104ca901259ac4ba6f8542baa4798d1ad0cf405f356ae9a58038cd3a9000000000000000000000000000000000000000000000000000000000001dab4e281c7fbddba7c76a0d1227f92faaf35f329626e1d4689742e792bc9bbc3a59a000000000000000000000000000000000000000000000000000000000001dab47a1d8982db7449b61fd05a4da88c1988c63918fdb0ecde16b0cc9b3d940b2e4b000000000000000000000000000000000000000000000000000000000001daaf2f170f5acf9a9a20fbff27a10fadb19ac3f69bb4cbf9bef29d3301d2681d0c21000000000000000000000000000000000000000000000000000000000000006b418c13fcb615d4e98e77ec583e6fab70cb4c289e8a63ddf77409e904f21b39ef697066733a2f2f516d51726a4266374a42594d6477316a68366e5a4e706e315184f2204c782eddf23758beef8ee3fc6968148046d2bdc79022f3a443e816ef0e3631473943734d4869437453657779323273795848000000000000000000000001f0aa36249b6f86e438743643ff6c7749442a5f302b75ba4ba64c95db614c1a000000000000000000000000cf55389a4d1050f6a4cd04d58e93a12bfa24c280b3e75fdf7a0633602dc3ff20e64021622b0ec76e5e25bb4a24a75a51bbd72f3d000000000000000000000000000000000000000000000000000000000000000156a4e6f05f9da48ffabf7adb812fc139fee6c0e38186e347c94c982a83ecb4bd000000000000000000000000615b274fd1a404fe5f6c59f0b8310cc7f889a9cf6322221a731487570e52c59c6356b30ca6793138fb5057a78687ccc28343db550000000000000000000000000000000000000000000000000000000000000001e47ed93d4ee2a4413be008500eaa7c18d080ced0f1cbbe46f295f70a86a0bf4f000000000000000000000000000000000000000000000000000000000001dab2274106fb5a1dd25a012daee1a1ccd4ff6db087a4234e214a09e06f8a87d833a9000000000000000000000000000000000000000000000000000000000000000132219137078879d95ff985e03d465872cca065501f2811f1e6575b0fee0d5bd0000000000000000000000000000000000000000000000000000000000000006b5832730fe590ba3eb8139c479b82dc3f474f84bc10f6e1e000d30992358b5fc0000000000000000000000000000000000000000000000000000000000001dab12241d81014290ab4adc60f6df90ee000cf326aea602363870f7c66ad770346c5697066733a2f2f516d517a4c50597a73546239536a4a6d77447333444671487083dcc535156d005c386ce2f86005ee38ff25012a40c106d7a64d7ec851468d9f59624c784e3539636f63375437757931397233313900000000000000000000006bb21e8ed55fbd7460d9fed88404f77a54b62c47f1b15cc98b4301841acec7500000000000000000000000000000000000000000000000000000000000000001447708768b8f4bba7fc8beb2ec34581eb9045f8a99e953af24437160d89a5a54697066733a2f2f516d664564576175514b476f5a32386e6351504b63766b415121af26c1a16d25a2d304ab22ce3324e0f28168345053a0cf1cd94bea5cfc96e64271467a5a455a706f635363483943644e646845640000000000000000000000cb2e42f1580a4e5ef5819f18029c9742566b637a56c4083135fa11f5cfe3fce9000000000000000000000000000000000000000000000000000000000000006b5b666c0a2b32a203383c486c5eaa87297701e2ad393a461d5ec5d04e7972723900000000000000000000000000000000000000000000000000000000000000019f292e0e63bcd3a35b64595743e53b5b48a394eff1162eae0c1eb512460472b7697066733a2f2f516d5869396a576a6d677652524e4c614757747845354d3643d69e37be41e9344994575065af5376d964e49c7444375a7dbbd511e9f55e513869724754397948766e57666f7835363237775748360000000000000000000000f286d67dcc76d3aa235bcbc4cd423be38d05b2a08261b5b33e89d628193e2502000000000000000000000000000000000000000000000000000000000000006bbfca2069b2536d97a0f74cb941dba11f1ff937227bcb4740de8aef45b9144658000000000000000000000000000000000000000000000000000000000001dab34f421e6f3cf73ab338ffc938e965a4f4f0f0569fcb3e31c7cc4fec18764d7844000000000000000000000000000000000000000000000000000000000001daaf5826d6f848519571158dec0b34273d6c89d478cc16cb8158465069fd6a9d5cbd000000000000000000000000000000000000000000000000000000000001daad6fe9a71ee8e6a9c9bbadbb0bf46390660e7e4b9936268e65551dba249a4b63e600000000000000000000000008c03472c4a8fa35d79f43766a7c0ea38269fcea1d41d72b50504c018693e07bb235012f10d0208e392f050e6601c48ce7e34121000000000000000000000000615b274fd1a404fe5f6c59f0b8310cc7f889a9cf217df1cf42d1acb52803199663204d54943bf64ea21126d97fee3c276768727b697066733a2f2f516d64766e433752766d71596f5944475a5a31746572767262a74b5061fd800f1f448b66fb0b3069df4b886f0b70238d78357674f428708a1951396934354e5133644e766576397164737a786b720000000000000000000000154ebdc05d67a719e5c948ea28f75a4ba5890c2fbcd44ead9d13990780f3bf9b000000000000000000000000486e3cd0b5711b0c5120d774e3f269e8c6aab5e7ff95914b031210921491028388c1ea0c3bf85a6bd60fb1209cc35f35384b8ad0697066733a2f2f516d546a4532724573666a31656d46593762575a346242636ed3cb27b641da24b2240e89588ce7e16b3417c0bd2dbfda41dc0b1c80eaa68f9e62514b47376d6139787865655357316d7965416f4c00000000000000000000007cc0aa209011b08ea3bfd39d454a508bf1c16ee5e46c9acf230201bd9b1c942a000000000000000000000000000000000000000000000000000000000001dab23f650c2dff8ca48dbed79d4948743fb185a8202b1fd09b66fc94049c6ef643cb000000000000000000000000000000000000000000000000000000000000006b9912032952100ff1ef8f17f9bf8d113787774dc71bf335d3a7e107b5c422e14d000000000000000000000000000000000000000000000000000000000001dab195b1f2a3da752f8daa2129c546c7b6b2413cb79f52542d2b39be124bafb1a730000000000000000000000000000000000000000000000000000000000001dab354a46a435ff514bb414c3126a417648a793a5f6696895e0c69820302e40f557100000000000000000000000000000000000000000000000000000000000000019d133f372d432c8d1f0ca801c379e63a95162f215500da14c7e2477a3b74eabe0000000000000000000000000000000000000000000000000000000000000001705f4484f0725f2555c00892226b2aeca30a7a603c746177048ec6ab51909896000000000000000000000000ab56da5518e70688a1fe993c11e56497a8a207d2b30e53c914ebf102c98dacba176c4d57735d17de61979523b87f59deca63840d000000000000000000000000000000000000000000000000000000000000006b7d82f83e2738656d176e26c31ed37875929477dc6bc094c6667caf5607ecee48000000000000000000000000000000000000000000000000000000000000006be1f91535d4b33f4b27e55c14d04407922421b9da2e17bc575cdd7ba671c9f30f000000000000000000000000000000000000000000000000000000000001dab0db3776011bed59227e43025995f32b0662114a8f78216031465ee99bfce6eed8697066733a2f2f516d5466316779596442424531564868504c6a474578687976719f629886079feaeeb42a9e0205134254e6380941d075ffe26a2160207ddc8a316a716932513766766d323368693367427434416b00000000000000000000006e628674fe9bd2e64322cf7b94f8474db3fd7562617ebe4b4b8b1f898e203969000000000000000000000000000000000000000000000000000000000001daae57ce0d04fac4b6e42cac71810e4bcb951a4fed2dff6fbb1d42add4f33613058700000000000000000000000000000000000000000000000000000000000000015bf9841ea08265792a33ef68f0b767d87a60017e852b6866c2bf54e07028b753000000000000000000000000000000000000000000000000000000000000006b5d255b3819502bf5af779d9608516d47a9b877fc111f449654c91ddbf832c175000000000000000000000000000000000000000000000000000000000001d7623914410bebfa4bdee56e73a4a60bf999b0efd42d038cdd01aae334fda32250140000000000000000000000000000000000000000000000000000000000000002154db85c127f5d160acb53b5b153ef9510bf65e3eaf542772e14ff9a19a45edf000000000000000000000000000000000000000000000000000000000001dab0f0dba6a4b9b66fc6e88a172d4bbb344cff6a8fa2579dff31e3debdadf86ebfdb000000000000000000000000000000000000000000000000000000000001daae29be4473d26823213b234936c60b4d98d2de6564ac99c3faaa04b53a9b4b7b1e000000000000000000000000000000000000000000000000000000000001dab5ba585759fa154cdd0669bb285bd3e0953f4517a449807b3ca7842bc8c4d4d934000000000000000000000000000000000000000000000000000000000001daaefbf885fe6e9ac05ac5513891e24e8dcbce1c825405d4ef80eb7e1be7cd9a0e76000000000000000000000000000000000000000000000000000000000001daafd91ccda355f70aabafd7a3931bcd0d60992dd3fc3cb1264c7362b28975b0f201000000000000000000000000000000000000000000000000000000000001dab08d6986b664316ac0f26c48d0b03ee7d3af99a45cb643d9e8782d9bfdbfe2dda5000000000000000000000000000000000000000000000000000000000001dab1d216a3ac2241ec8d95178e85c54e381a7cc8ea97b3b6658135526e50f18b9db6000000000000000000000000000000000000000000000000000000000001dab27850f4000af6f820b967284a0b38270faae8504a0e4eb4c886cab73599f578a7000000000000000000000000000000000000000000000000000000000001dab36068b9d7204b8d6e2b0c61c7e596d5bc078467e1dd617b6df1fff7d715fb6065000000000000000000000000000000000000000000000000000000000001dab40793cd4db51c203bd3463359fd6b2ea97a9ead7904bc3a9dc1f0f41aac486b09000000000000000000000000000000000000000000000000000000000001dab54ddaec608ac0a67a9b79161d78c881747556e45539e61955fa5a3f653828dc5d00000000000000000000000049934f40b765cce756c708f8874170ac91c0eee9e05eda535268e76a318737e29faf8080fa0745c2cdd011c6029505e2a1d68ef2697066733a2f2f516d53345659524166524c3744774a4c46727973733842363513cd1f39d9b675d61c321eddc8aeb8a18a4be8fed6cfe73bb41bdb15afb51d8756556438695373684b55354a6364586a33366541640000000000000000000000960c21432e15d8f9083e89ec04ecea5d6064314b0d17ed3419b0cd1d46096fa200000000000000000000000000000000000000000000000000000000000000012ee4bd11690bb4b9e41f0f318724a6f724297422bbeda4218b2806dccdd328aa0000000000000000000000000000000000000000000000000074d007d42d04eecfb16b5513470ec1617e2fbed660c0e2292ac0ead57023de89b7dabb7b9b461200000000000000000000000000000000000000000000000000071afd498d00004e72f3304740c0a5099286cac6ca65a6b3afe53edf139ea55c515868e10aaa1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff759285d661b4a9286be9dbb7a2c4868f531eee4854b84b10b1dfe0148906df0000000000000000000000000000000000000000000000000000000000000000013bfe3db4e15cc11b3dad0f873880e6ab50687800b9b9a5113d5faedec9fc75960000000000000000000000000000000000000000000000000000000000000001a6a9cf1eea046ec92f28fe2793297346d939c7b5aff2ce8235e2c8feceb546a9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff245b5f50b6c75a2578cdbce4a282edd6ee4c9fe6f48b80baf0b77bd4576af32800000000000000000000000000000000000000000000000000038d7ea4c680002b462fbbad15533dd420fd0080d7171bc5aaf9d7d012eb09bb6773ce92b577a90000000000000000000000000000000000000000000000175407376ca75d7844257b363e7d0d55c54ab580f8d7d0b4f7c0c63c828b3a3560bb426e47bd124c840000000000000000000000000000000000000000000000015af1d78b58c4000023b5f931d07d4f0b943dc4ea514dd0f27c68e68d0df6a3ea2db4231e172461700000000000000000000000000000000000000000000000000805597d6796e76edc5b9b7e6cb2644ec9da21e8053385d16a8f1529e1148844d13905c28707564f0000000000000000000000000000000000000000000000000186cc6acd4b000021f66497e3b8ec695b91ee3401a8dfcf0fe73b6eebddce893a68060480b9dd6b0000000000000000000000000000000000000000000000083effb3774288be7f99ad8f5d76198e8f27ee9c6791b924cf81ca2fa35b1e11e67bd38c6392cc1ccb00000000000000000000000000000000000000000000000000000000000000014630da00c532bd8de7aa413e437ff1233c4dc007eebb718938e09c6402cd78bf0000000000000000000000000000000000000000000000000000000000000001b70712003d04fef9179708b8cf503ab833c9cb9c51315b5d5ab4220c676d8aa50000000000000000000000000000000000000000000000000000000000000001c8492e35fbd402e5e0300364f25f3503985564204ed2692e195cd29bad37d34b00000000000000000000000000000000000000000000000000000000000000010db94ea815f121e2810e096d4ed9c021af5bdfdd4fb69c7c8a14376267b191bb000000000000000000000000000000000000000000000000000000000000000122e8974e2b35aa50bd8d939b6f42d95b03693d3c5688c6bae34c07461aaa4085000000000000000000000000000000000000000000000000000000000000000173510ea76ff5bfff623082a04d1dd6168823d4ad400f118301128ea5987f43e1000000000000000000000000000000000000000000000000000000000000000108253b704153ecd592ef787984abfaa4de466bd2223b57d43b1002c540a5f273000000000000000000000000000000000000000000000000000b027736ea84965dbb0629e1540fa7e9819a1950af87e99ccde7bcf8335e1ba22eb81da95778c00000000000000000000000000000000000000000000000000000000000000001a70ac0b4c917cd9af5980aba2f38ac437c04c8d76137ef17e6723691f3833bb300000000000000006435934836a13c33f16ad3a8ed11e3908449624cf50b7793aed53590927076a800b19bf05606bad23435a5b3903681792bbf0aedd54c4ee70000000000000000000000000000000000000000000000000000000000000001fdc0387fea715fd361486e5fb86ee3412c004e756ff5e5f6900e37bbb53245bd00000000000000006435934836a13c33f16ad3a8ed11e3908449624cf50b7793e5a4a486ee5fa301fd6b7493141e94b662febf652a31d487554da78356fbc26b000000020000000064363dfb10a1db5d3a971cf1e565b28a86d5ce9e576a7b81e216912df44290b84fecab9f5959d5d4f3f17db1bc0d9e1028e75ff2e2c2d0db0000000000000000000000000000000000000000000000000000000000000001d1f0fb8ec50177e83b4c116142dee46a65480afedc3532fc5b84e1575e185a88ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5433d7f5840d783b98c4ce547cf65157167973a86859b01518732a44ce93f0c800000000000000000000000000000000000000000000000000000979b3d480175611f6a641908f05d0c5884cc4ebcfb6a64a2bf8e6fb5a00574e47dc0ce23b3b0000000000000000000000000000000000000000000000000000005f5d9ebcbb08b5b7009a9ae73898471d00154e1a86dfde83e192271b7d6a14fc73a4d6b33c0000000000000000000000000000000000000000000000000000000000000001622ea98de859bfd562a14874ecf7729d92ffe6571093221dcfe5d1943c7402810000000000000000000000000000000000000000000000000000000000000001db5e3734a8b796dc60773b7500ea60ad6c0ddf323cac766cb1abecd13c5ea43700000000000000000000000000000000000000000000000000000000000000012d55a6f5ece4f1c978fe6b9045db805e726d5ed423af7eee4115fbda839ba5dd0000000000000000000000000000000000000000000000000000000000000001d915358e3206c0e32908bb454e9a9ddbdc0de52497c16f7dc3a213413820a9f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42aa56c450312dd3ed4e31ba04e986837abaaa2067e91c1c70ad21735fdf87a2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff154ed46f5f69f73bd1f0a2c8a34d78496aa764f382663dd9d58939ba007c6e6d0000000000000000000000000000000000000000000000000000003a346804720045988c6cb0684e8354009f337ad2808955148601a7161f74e2f7e3a9577720000000000000000000000000000000000000000000000000000021a5c8bf74f2660681a983965ecc6d20f3b2c8fed925d3c9a341b37355a14e6d33d5a8facc680000000000000000000000000000000000000000000000000000000000000001d852c5c784e44e8d140f0f7f7eaa724f0db0e8740e1c214e9c3bce9b26fe976effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff974be7b513959fd455b764a3c21b5fde7b42f69645f371aa4c9645e5e78f3c8f0000000000000000000000000000000000000000000000000000000079aad093a1fbc865ddfaf0b8954f170e7034fd783e256d0946c68361b004720cdf462a02fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff43c5e9af77b21fd6add8046d1bcf5f5bd45408dbe1577a230f52c6ad4cb3d50fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd36160c3ace9179a08183d5e23eff874b90e3420b25ea1968fb77008082739300000000000000000000000000000000000000000000000000000009e1beb70b29ac836ed73b9bb2e021d44b0bd2e1677acd38481fd66d872fcdee12d43f7a8e000000000000000000000000000000000000000000000000000000000001ac90b332f712b93ff6b17d51f9f79a0a935a42c9232cbbe32e3cba4b1c63a569177f000000000000000000000000000000000000000000000000000000382ffe8c9dad1bf17c83c255269c9f63feb559c94bd93ccb1eaf6d691c8420d5dd7f852a41ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9a647aeecee771edc136f7e932bfae9db257ef8c8b2d252304d5e6964a1770c2000000000000000000000000000000000000000000000000000000000000000191e06a9399b708e8044b7a6e5b6bcf786ab69005e614ff394778ce4a08d20ef90000000000000000000000000000000000000000000000000000004c9dcba2ee50fa9c86b6316d4783161a922f7b3f20260ea10af9e087a20087718e0fbf5f780000000000000000000000000000000000000000000000000000000082c63275edf33b9b65a61ed1664e2b2fa4b05eaea73ec6b91347bc47cf9df128279a018f0000000000000000000000000000000000000000000000000000000000000001da34ae09177da263b07168355e12bcbc34379e1f432e70ee0fea8d3036b7c3c50000000000000000000000000000000000000000000000000000001b57b51bf8ec68f5289d5dd78dce9cf82cfe97348165a386da555da0f36cf0e47e27618057ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff976f218301b14856f9da925532ddabea8929c3dd9eca063b5ffba7ab06fa3cbb0000000000000000000000000000000000000000000000000000000000000001328a66f33490ad40a42eb8b7ea0537ebc9788b5194b95e92f859e498eb8ef73d00000000000000000000000000000000000000000000000000000026403c0e54220ad0c7753aa82ea9816c8af8d0dde9a181111acd4f0b1017166ead11efafbf0000000000000000000000000000000000000000000000000000006847e89169cdd503362c765037dfd77b4e73639d3af73a8cae506078a1af86746c6864874e0000000000000000000000000000000000000000000000000000001989e90aa4e119bcc6bcddd5140e32504510e1dcff59b9d1eaefd5d607a002b822e958f23fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc5273391ddaea235ffb036e826068ccca0ac156762d098d2f757190f21f533070000000000000000000000000000000000000000000000000000000000006930f933626a73f0cb84760bb2e8f3b83cccf28c8544b4c83155bb4b1e85cb6ff285fffffffffffffffffffffffffffffffffffffffffffffffffffc7d38d5cca86c98b6c741e2c3e00534122d7ba8c5d078e9df105643172e94ebd205b804c6d11000000000000000000000000000000000000000000000000000000000000007d94b7526ba7f81a43d722dd299d3cca9dc8dbf4eb561ada0284ad054905f52cfa20000000000000000000000000000000000000000000000000000000fe9ef6e42ceb8cca94928c269cf8146940e0af9ccf1a5bc598e0c281639fe957260f08b620000000000000000000000008c4188fc25dc437021a7c0ed5457d9d0605edcde81b5086e5c239b37388b0e150bda92b23a5539fb2e815c9031e08c0db12b92e0000000000000000000000000000000000000000000000ba58e545582d4600000ce6b2f11b3ae72cbdcb257753abdf44dc7cea8a0e1945229fb0eaf14774b56f10000000000000000000000000000000000000000000000001bc16d674ec800002e91a5c679b9fa430ed0d01e3fa2a6a4a60edc49e4adce9d84bf867f47871d79ca94efed4891bbba446ba73a989209b8cfcc282dbfd42e9bb380b8cca056fbfdabcbd28c2557d9ed7a2e368dcaf1873a23636ccfecab01d56384cf2404c2e1a62ac251a3c64e8801e28b563ad5c82b9df8b98005914704bc5355fc9fe126bdb79d7bbe80a951f2b44e2c91cf0b0c5eda08d542e04c0ae198d8c5f228e29d2f70e1240ffc4816af172f8fec0e9b705088e34964dc000000000000000000000028c4b4a1271c67cd4233a0172f79336555ced41b93a309fb4296b9ba8182df881f29ab060bd02cd22e4042095679cfc5118098d46c00000000000000000000002873114f54fbb6e9a20816121128de3f1e5f5986f75fedd7a4d22293049c2a95040000000000000000000000006924da629a9fd4c6f0e0c903e3254cb4e79bde751aa1b77255084f5fd8f20a5015ea0fb0990771de124936ef4adb2e91442d21af6a696c73616e6465722e7a6b0000000000000000000000000000000000000018777c7c0f9bbcdfd3a23efcdce0415edd89d9f6b6aa1b2d3744a36b110892d6e0a7c7eb2f3f1b9f43cf927bfab2e8246db35e5765c6c8ac050224d53a7ab796afb2b95bf54049a5daeee501ebe016a4ba5e0ed96ad4ddaf3cdd603b0aea68a25369747379696e67746f6e672e7a6b00000000000000000000000000000000001c13ecd5760eafa3f0f53d3d2ab124696ef0032f58ebac150315e346e71b504a71000000000000000000000000c93d85b91dbe985400f41a81755ee842132848f7a1b6bd9ab8f6a220a487f732fa642d54948940cf27aa6ee1211756296e1288a900000000000000000000000013692c356dcb8532e48bde836de80a48b4215782321b955e9ba83fd1dd499b5eec1de0204af5c9dff7c04ec29c374941070361f7491237018f89a5e7ddd694cf913f6c520268df680000000000000000000000288888039f32c864c8743f59e505c33ef9b7a27ea93a8aa9b5603a9a11694fd09fc93d85b91dbe985400f41a81755ee842132848f70000000000000000000000284c8cba0fae28b7836fb7b3656a357a432c01081dcbb5c39c14019af07160c0506924da629a9fd4c6f0e0c903e3254cb4e79bde75000000000000000000000028c6e6cf1f22804dd91ce7ef3842c3ef6007f15cec932d39ebec58be02db08c45f000000000000000000000000fb7be4c6065920beae195e7fc1ce1982f8dbfe7f8e0d92b64f3cd20e39111ef8e9992be1fcae2e87b0fc4054cc18c829a0f7e98baf02d1249a76e1fcce695e9e7f4130d0661950c696d13c22068a90d2e7eccb02c406fcf6629531b8e342b4d23b0a9f904dfc7ef54a44d3cd97fa7386fe6a3d9c4f790f2289c46e45ed197bce7763c84591e1f223000000000000000000000028775cebf88977d079f93407da9f8225208109f5a5fad4f7edcd70a5900d9ff5506a303030302e7a6b00000000000000000000000000000000000000000000001086f9a1e2215dd7e1514a55494846b4f114344ce2bb9e1b86d97c342773c956127b7c156aa685986fd8f0ae95e2e8cf70ccce6b0dc04b10b509ba6dd09667344479e86e49f9b04626ef3fce564009dff0808ad450991aada3ed704c5d273d0d1d00000000000000000000000029ab060bd02cd22e4042095679cfc5118098d46ca884106b21f85a320e12378bc55e459de3c5444b100b065682f53d0d01415af9626f7963727970746f2e7a6b000000000000000000000000000000000000001832d0db2d901b97843fd4be1aaa8aacc2bb886a0fee1fd337fdbe2dd203af39861fae860de50a501e36b55482c26ee64036236b5ce30c166688706f9ebdd4d8a16d77303b71f19ec9606033b1c903ad9fc72daa7a45dd42ff977a67e107c122fae7f34476be06fcda2e32e13d498fbcb76c8708419b8d0b3debfddb129668cfc856ff8c840341bd46c601a0e9489a26887ee6e80fe04fca92e2d3b516f34c445d881f55d3e130ad793c205ad7fdfcfb66a5d573bfed4a09a95158baecfa300b24896b2337514081113a8fb38da80d1e2b1d7f44132c9db2d288f842475fad36020000000000000000000000000000000000000000000000000000004d75ee126571a463dee9e08c756395eeaa929f3ccf8432b3b390358839ca30c60d85525b09000000000000000000000000000000000000000000000000000000000000000144023035317343017fce6ee8c2dd42a1139d7bae95a0d665892d1d99a1e5c05d00000000000000000000000036f649e8c5418de722d9f5f56d0d74f22ecaeaedb09efed3e44795d803c98f845da16961af84184fe8e9955762c112c0b723a0f70000000000000000000000000000000000000000000000015af1d78b58c40000b500066e2ee083d0db3a86e508ea0200ba969e269f488f678957d1540a00c15300000000000000000000000000000000000000000000003045dafcdf1d9e7abf9793b949e040d3021bfc7c687daf29fcdc6ff7691a96b21c5efeccd811b077c50000000000000000000000000000000000000000000000000000000064363dfb0cb01fb508dc3371b61576fb6a7bc2d230065ffe426ff01c25fe9da81047946f0000000000000000000000000000000000000000000000083effb3774288be7ffc2fc554b15de579d344c1f6b46b6bce558a645bf2d771126253ade98432c876000000000000000000000000000000000000000000000125b7dd33e5dceec9f51d7f362e9600b52105ba43e7de5767597135efb92775a17c40e74d94abcd44de0000000000000000000000000000000000000000000000000000000064363dfb72dca86aa47226da664c099e1be87e2902b520e34b1fb7d20e438bedca79ceaa00000000000000000000000000000000000000000000000000000000000000013ac357bf78ae43d2af28e82136c96d08955e1eff9ea57e61d4a8cab6fc1f9f830000000000000000000000006c272d134ab69ce9d9fb7f6ac770fe815a3112eec4d6c4bddd08d475f222e71c9051f74cdc613466e890ea695b5e3eefaf63cd670000000000000000000000000000000000000000000000000000000064363dfb7cd447b95586077f3e7bd13ed6015a0b3289ce20901a9343cf7a0144f2593c4f00000000000000000000000000000000000000000000000002a2f8f1255067f456a27c1a7e4044b8c2ad74f81ac0210b4242ee993156026b1a536427229a39850000000000000000000000000000000000000000000000000000000064363dfb4216d7a62ad15dbd2cdf714d03a2222442788a63342a43ab29a4b2998a98d2c3000000000000000000000000000000000000000000047600ddf32e866e941e97c29c2cef0da413a9dab698abaabeeeb53449f9ade5818996d829124dfe8c79740000000000000000000000000000000000000000000000000000000064363dfb7bd97bf7f2a4098f035df1a863fdecc9f08ff09d42e26ad832e25693844e60b200000000000000000000000000000000000000a7d8c00000016d0000643be340ef6a46aeb1c25ea0e5b29e275b0efbafea888a37c9587c5e6313e0f41f5302460000000000000000000000000000000000000000000000000000000000000001336e880f4e64033dcea460c6d9d870dd534842b11d360ae61ca074866466e98e000000000000000000000000000000000000000000000000000000000000000153b2f1f237095a1fb82415f065a94131f1cde50da5bc43f1e0d54a2e9ccb03db00000000000000000000000000000000000000000000640af523345e9583681cbc195d46938d86add94c36b00f405c424721b908c1653acb8792af053e0111bb0000002b7e02316a0000000064363dfb0000000070ef63ca0000000861c46800c9110b4c010ff89cd6adf0a027b043f27f3578fd349fe1dff67220525c844f7c0000000000000000000000000000000000000000000000000000003b4cbcccba5a007dcb8f1a747edcdb80332dce1c36688ab003dbe3ece99a5bd690e46af9090000000000000000000000000000000000000000000000000000000532e6df44450fcd4cee5297e3eec1710f563804521e11855e0519a3722ba6277bcab76d3600000000000000000000000000000000000000000000000000000060a98236e6407b1cb76f0c066d9dc268315643c8b094d85cabf244ae4acd65d8845863162800000000000000000000000000000000000000000000000000000b53403d592c13e8e616ced7a28ca279ca4916a320cb159a6e4c477aae618bc6a6813445997e00000000000000000000000000000000000000000000000000000007b29d6b4291e4aa7e2aff6a7b35ca3d19f5565a53a2f2a54c307aa6784267196d5ad1a03e00000000000000000000000000000000000000000000000000000000000000013e1b1670ceea56c529315359efa41851259e2987f3818736d8c6f8ee4435db39000000000000000000000000000000000000000000000000000000000000000104981732c9d3a7ed59ecc5b54b2db70fb2a2df73d048950fa8ac47286abf78260000000000000000000000000000000000000000000000000000000014c419ed65d46e620597c33c77669fedf8b8d1216511fb70aad2638688780fcea9ef22b8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefb67037e6ba08c269abed12af1302ec0d2588616dfdd5fb077435594a11a9d800000000000000000000000000000000000000000000000049bdb27b890cd2cd31197404ff35991fbadfc5844f1efa98d14b7a0bc4eb14feb693878cf610e32b0000000000000000000000000000000000000000000000000000000000000004a7ead4d564d2638d3e032f4ed63e5ccb6e55b8087397aa9f121591dfd61169ae00000000000000000000000029ab060bd02cd22e4042095679cfc5118098d46c1dbf57fb3e3b200b5131320214bb615bca30d742514079d60feb2c9fbc1b11be000000000000000000000000a37fe7e6447c204b5debf9489f2d5635ac078bd6bf1d592dea02aeb90da8fe647f4efd4e9a0d2c1208b783e8f456c88a94c7316c000000000000000000000000c93d85b91dbe985400f41a81755ee842132848f7f1e382d11af04eb8155b32b96ccff44f1c4a74797901d44d3ecebbc1fe0fd564000000000000000000000000a37fe7e6447c204b5debf9489f2d5635ac078bd644e3fbae2f29736fc6783945f08183d37979b7e7ab4a221ce10765c89ee0fb450000000000000000000000006924da629a9fd4c6f0e0c903e3254cb4e79bde753a5f1907cc7134f6d5f15d4e222c2164d048f977c697e166882c86bd50b726ce000000000000000000000000a37fe7e6447c204b5debf9489f2d5635ac078bd62a3d31574ebe1e0469e086ee84d38dfe6a5c49bb7de1782518c9d77caf451bca000000000000000000000000491237018f89a5e7ddd694cf913f6c520268df68b40f7cb544524f55c409aea5df5bf29d00e0dd0f3d91a089cd2531fe737b35d9000000000000000000000000a37fe7e6447c204b5debf9489f2d5635ac078bd69a7cf5b7099eeeece78e9eecba0ad3df33d0c4ab40effe50c3bba63e342aa14a0000000000000000000000004f790f2289c46e45ed197bce7763c84591e1f2237f2feb05dccc8e3baf8487f924cde31436df52447007c5d8f4559307f2755cf1000000000000000000000000a37fe7e6447c204b5debf9489f2d5635ac078bd67b0b5d35031bb62d6a4d3ed3261a22116c9327c7c4d94a98a7eddd7005ba6910000000000000000000000000e1240ffc4816af172f8fec0e9b705088e34964dc4734144681b608439e5b29200052b53f35ae90a859346023d0eeb8b615e5284d000000000000000000000000a37fe7e6447c204b5debf9489f2d5635ac078bd6457cebe2896ce6666d3082f4447b77bcc8a3df18b125b442204e3f38b6c570220000000000000000000000000000000000000000000000000000000000000001ad7f8765478f5c8de2847be4f24603eb1fb77fc6ad255178e292c7a32234279f00000000000000000000000000000000000000000000007423491c5aa4a88101794b0015bfdf4be933927f0d171fac631a213fb8d74c8aee9ef78d5f03e23eba000000000000000000000000000000000000000000000000000000008a061af3e55ed7b70c5cbce4c05319f5f1b3a7c66e1909f09823124b6572de26c41fc4de0000000000000000000000002a2f171bdb7b7ed6a93ee3302ed763d27e03f0c286d22a600d534dc699ac1a1c212746a585b8e9e265b0c16d38f7683e26fd46210000000000000000000000000000000000000000000000000000000000070955cc96280321f391858c82f55015bc685d21f25393bc0b96a1f9066faaa55d4ff700000000000000000000000028c1908f8af53340b5b2414721a40af7862c5e5afa09fdb7726f7164ef2031b63678dd1d9b46c6276a0f7ebcd2eb637580444320000000000000000000000000000000000000000000000000000000000000383c7a045e8b4eba83f1828cf238e2a1df5953497984f6f85533b239a6ffdceaef4c00000000000000000000000000000000000000000000000000000035ea628716f66be3274640e8c6e119915ba4e5c35286b762ac4cc953947f240c0cbd315d62000000000000000000000000000000000000000000000000000000000000383c700ac49dbeb225fb64775662b34fde5703ca1be10d08cfd26c4ffd7352ab58fc000000000000000000000000000000000000000000000000000000000000383c3631645b0ad9d2016669704d42b34ccd0ee037fc059d19abb0ba316caea8d57c000000000000000000000000000000000000000000000000000000000000000178ead8bb607e5b1ce85ea22070208b3e607a21820515ee5551f8caf1e89208180000000000000000000000000000000000000000000000000000035ae28f3384f3f760c0a811faaf40d41dd57e44e5de437dfd8c88abbb6e720d801043a7bce70000000000000000000000000000000000000000000000000000000000000001fb1b578bb65229c585aad09b2dacfc2cbd0cf818f5191a935b76d964c0252446000000000000000000000000000000000000000000000000000000000000383ca07b3b474538b2aa4d7ba8f35f8172c6d7fd3f36d85c686a2dea6f07f9695561000000000000000000000000000000000000000000000000000000008a02952fda02b9dafbfdf677ce9c3ae29cfe0ee0255319db90da6ae9062407da851ea0910000000000000000000000000000000000000000000000000000035ae15f67e0e98ed3efaa8fbcc6ce4cec2aa0333d4c9e2eb2294587c1dad96deeff9d800cec0000000000000000000000000000000000000000000000000000035ae15f67e06b31959cf77a38fb2f32293e4ef999cf2f3a2dfcef11f8b3e733efded1d9804a000000000000000000000000000000000000000000000000000000000000383cc688711fc0063ab0b0b354558d495b2872f707b3cc77770f949ff28f16e196c4000000000000000000000000000000000000000000000000000000008a061af32fce53d2ed05ae6c93f6609696b9110552701ca48d0af15146442d11e0f08d5700000000000000000000000000000000000000000000007423491c5aa4a881016da9126e31bbc4d2b8d71968efc219c372c28ab5c8d501f3ac96f420f6d78efb000000000000000000000000000000000000000000000000000000000000383cbae3dd70bc82a2ecec583970cc0af678e5961f9ec3fbd11f263539263edb2807000000000000000000000000000000000000000000000000000000000290cb03c667fa7f8c471f96615acaeae2c1dbcbff7ac37946f198ab010c75c40c1a36190000000000000000000000006ac625d107ceee595a35c464ed4c113cdbf20fede103eca9ee6ed87e24519f6722db2d0ce8fa7b995d30d2c2c5151a83f12ca3fd0000000000000000000000000000000000000000000000000000035ae27c9ab3fb081bb525c9c66877c9461cd0317b3e0ae7494e69a21cd83f0b6f5c483a84500000000000000000000000000000000000000000000000000000000283188669146c97aaab58459120487370ff4961138d852783f7d8a7a46cbcf005e064f2e700000000000000000000000000000000000000000000000000000035ea6287166956094754d6e421dae05ce6cf31c06600af75ba8337e74337b8b976eaecf847000000000000000000000000000000000000000000000074234e107f0108680813980fc2eac42418188c5687f5cc1e5bcf0ead80cae9e3a5d573d6cc2928d70800000000000000000000000000000000000000000000000000000000000000010010d44d3c8c7db2ef26a554d9aac519ac32f96ea1c17eeca8fcc5a4c5de8e210000000000000000000000000000000000000000000000000000035ae27c9ab3528f7e932cf1b5dac72ac6dc4067626ec848e8112f2b6fac0be0b77ed5e6e1e200000000000000000000000028a48ed0fffed9c574f35ea87ae50ef50cbe18b3435c2e53eae09f13265045b7b6220f3e310c7f025f02520db68c7fade2a0b802000000000000000000000000000000000000000000000000000000000290cb03a903f52d9b77df3d67471ae48c4846c9d25e8b97cd01d05e54efac9dd7335cb0000000000000000000000000000000000000000000000000000000000000383c1328dabbbd8db77f42fa541437e9bd11a7e7adf7a00a224ef1694ac64b7233c0000000000000000000000000000000000000000000000074234a7a33f70108d254962eaeeb85132e75ded7014b12a469deb3eeddf6067fc1eb69657c81c68bc600000000000000000000000000000000000000000000000000000000000000011c4b284244d50c12ac7617fb10f178b20cb112e54ba2598b4be40cf1202779a2000000000000000000000000000000000000000000000000000000000000006c4d7241644c801884f92bb9e3710b7f939a80845c7646bf95fbb64d3edb3b66b3000000000000000000000000a82749bcb138d6c0ae8e096e26c63ef42e74aef8b74de169571690d2cc90c666a1b89483ebfcdcd04f1af53a731b358200875b1a000000000000000000000000000000000000000000000000000000008a02952f7452372bcf78ca1b3440a6d97a7034a630d01e609e86c4fa605d125850dc4864000000000000000000000000000000000000000000000074234a7a33f70108d29168feeafcff9494f3b1cbb1a8ec8132d4c6d2d8373d1f5e9d376e33715c5cea0000000000000000000000000000000000000000000000000000ed935bbbe49acf4362fbe525d2657a21a61d85ff292cf5a2f6377467546af770c03005ec701100000000000000000000000000000000000000000000000000142fbfb79d2000e14e6a2beb6d6d07232ab12875d19eb9c2a5d5470ddc4e305925d203b246fe4b000000000000000000000000000000000000000000000000001476b081e800005f4a8dbf39f8b8d868041c8b75bda68ca51be057ece3cfb51c01c2d6ef2ef9250000000000000000000000000000000000000000000000000449ab4dc788000082a84780b4115e37ab86330a79a539e790da6ff8a6a5fe772cb47945abcf7bfc000000000000000000000000000000000000000000000000008f3ed38d580000d277388966326d8597752e47678aaf1d7d08e060c526adeca99d6f8dac1df2180000000000000000000000000000000000000000000000000008dac8663f6300ebed5cfb3eaea4e5c2516abec2b05d1e84b0e43f9efa1c97b5088656d4fac7f30000000000000000000000000000000000000000000000000731ba0dab90000033a858b6016f3327d8a2c78c10731712fe2a7d2cd2272fdeafefd173f2eb07f900000000000000000000000000000000000000000000000006646ee6ed377000943bf09f3a3027407e1be6a435ed90ed0a24d4acaf296e9fecaa79a7f7d623a70000000000000000000000000000000000000000000000000731ba0dab9000005a18065086a11de6a3fc65ddbf55a096a5dd884e4c5e65174833bc1dbdf6411600000000000000000000000000000000000000000000000006646ee6ed37700032b6346140eeafa17a38dbd1e82032f3a49e2135e0c48d2c73246b4f469118c60000000000000000000000000000000000000000000000000265e8af39300000b29ee8ea349b9298d9679000141a2c6ea2edec33e21c50b99c0c49640120573a000000000000000000000000000000000000000000000000001476b081e800003afa1dcd1e0b897312b05b3182004d9fb439da940bfd93871b6e167870d40c4f0000000000000000000000000000000000000000000000000066517289880000f24b6f9b8cd4aa4260ce8216513f41a41a6ddb3a785c3d59e17153da29e0b26f0000000000000000000000000000000000000000000000000031495668e1a08078203473274e6d079068ec03088b6994204a6f2c28aaf10e192394980b605f9e000000000000000000000000000000000000000000000000001476b081e80000377029ac0f40bc3b1fb8417c3b1913749f5c1f58029acbc87446e9aeba35a7f3000000000000000000000000000000000000000000000000001476b081e800003c5c66ffd2f5128c82c7f7ff3cc0d6a3f49f19c328c5f8c5b21c41fbd5701db40000000000000000000000000000000000000000000000000479f69c6ac0000003fe90a39af0b7f5090fd7418eebc3b568e7c1f8badaa8e0da026aaae0c1b23800000000000000000000000000000000000000000000000005728a99f65ca7007837d59fec13acb5a73d786a5f5087c6a449d0a34e678add10ffbdc4a35ffd5200000000000000000000000000000000000000000000000005728a99f65ca7009c8d3599ff77c190dd0f59ed2962f67e104463451daacc56ea5a3d50ab33d6c200000000000000000000000000000000000000000000000000e1c6c67f3680002047452c9bc170aab4073d31fd58aafabded2cdcaabcb99a7564d56962e8ea890000000000000000000000000000000000000000000000000449ab4dc7880000182734d5d350064423409f67be643cd08466afd6cf174820734e03f5caf2ad6c00000000000000000000000000000000000000000000000000044280bc34a200a93d4cf2f8f0ddc95882b7d198d61f03d4e70c5cbbc1d2040b7ff4549688049b00000000000000000000000000000000000000000000000000312edcdc2c5100a541f02f506acb32ed4b9074a05395406046a83585aff3567afaac02757b6ae500000000000000000000000000000000000000000000000007fe5cf2bea00000e7b141148e5bcd950e1a9cc0545034bf21a962b8432cb83026bfab4ee3e585a1000000000000000000000000000000000000000000000000001476b081e800007b62333ce03a624fcaac16d1210083d663ff4b27f476bf47cdb91580f941ea7b00000000000000000000000000000000000000000000000000142fbfb79d20006990bcdf5c403ac8af74286be8f9ba4bb1540da89e658dcc1c90689a6cde4fb40000000000000000000000000000000000000000000000011494299bc3a00000f0871a4bc721ed54fa123eaf0ec06b03d4d1f7f06c83dde6e544b5ab39e40a5c00000000000000000000000000000000000000000000000029f767fa68c80000e4e1bb0616cee12764f6d1b66a4a7c511e88619cc61ffc3aa0532607ff826b52000000000000000000000000000000000000000000000000048333c2dbc83080daeb764c4084fc16dff9e9daf2effdf303810613b4fb88eef33bf7db01eea89f000000000000000000000000000000000000000000000000006a4d9d45324200e2341fe2c4e83fd3f4baf6d20168fd2a515e643cb0ce6b5a34b796c78ebd62ee00000000000000000000000000000000000000000000000003470244ce280000ed46c467b5d42fec63cf77408f111729f160c582d80c12f7d2e343f69653c1e700000000000000000000000000000000000000000000000028c473a2cc300000846f3b8c38b8656c5c9dd17e75e800d8d2bce928d63358d0309d789f6fc724840000000000000000000000000000000000000000000000000265e8af39300000e85a72b3c98d16256b46fbdd6c2b38dffa7e2e65204dadb19d4e7c3ae580c4f20000000000000000000000000000000000000000000000000019945ca2620000e07b55ae6fa7ac8a7f1479fdcafdd658847307de69fa931edc08ffc3026d68b20000000000000000000000000000000000000000000000000479f69c6ac00000823863af36c5b192269ff2ea09de9c84a64228226222337440732a6f7c0948700000000000000000000000000000000000000000000000000066517289880000d0c6e07f96489aad02aa67d09b63225ac0a45804e52c3a5a65d0c771a65d9a6600000000000000000000000000000000000000000000000096eb55be0f000000a4237428331a440d2d2bc6b8157d43133c63c82423e1c637ecbd2672238abf6000000000000000000000000000000000000000000000000029f767fa68c800009600cfffdae22bd61f13511f6a6f025720d350b6da5d7b500c93829af3193233000000000000000000000000000000000000000000000000001476b081e800007b6b6b008272524289c98babc54251d67cfca6e47cdcec4cf5abc7356fc71e1200000000000000000000000000000000000000000000000007fe5cf2bea000009a606210db5a3aec4efb20472f3d94397705300b4a5de03d7cadd6f0e654610500000000000000000000000000000000000000000000000003716da573a3c5006b651e57ce215f28d11d41d94c5b2615389b991f5a0dbd4b6ac7e5b183b29e240000000000000000000000000000000000000000000000000ffcb9e57d40000004838a665bd8e93f060926a6f3dcbf4c09dd3d67c7d413264613c1b2f0fa761100000000000000000000000000000000000000000000000010ab850928330000a40eccac501f866cb12531573f6443bb00e2ef8e2254b22153ae77ee2c42f0a6000000000000000000000000000000000000000000000000001476b081e800004ac7dcf01022b60ce4561921f6e4ee89c3fd22a65cc8811b666be8fa853f6691000000000000000000000000000000000000000000000000001476b081e80000895b9525e6c5572f2db651167c2648e8445055ddceb8a52d63f1f8b854831653000000000000000000000000000000000000000000000000006a4d9d45324200d6f9272f823d460bf5b9155a61e59bf93eb7eaa3a779bd9e8d8f4dfc612bd48000000000000000000000000000000000000000000000000000cca2e5131000004fe5fedd65c9adecaeb35a6fe8beed34fd5611944b444193196dfb8e19f1532400000000000000000000000000000000000000000000000003716da573a3c500d610b76d137f82b07231cc32f3b3b546c7bbff3ef87cc85c6c8a0f8bd97dae00000000000000000000000000000000000000000000000000000a3b5840f40000893bf48adb1c25d46e6702fcc1c37cd0f7d91e6ebf3acbc14dee3d4d769a0e9300000000000000000000000000000000000000000000000003470244ce280000382cda9a5a521c7b3d4da194c3d21e2231866866192b8ac5de76c49a4af7e6d900000000000000000000000000000000000000000000000000044280bc34a2008a0eff893c6295616f3929ad1436ad95275964690d20de4f3ef422d8fdbdf84f000000000000000000000000000000000000000000000000008f3ed38d5800006c1a65030553cb64bcf15ec4a427d28edd208cb18ff1b48800bbcf17beb6e32400000000000000000000000000000000000000000000000000e1c6c67f36800022b86b0674647d5fbd6cda793ed6271f029423dff7a53bc6505690b3304a24ef00000000000000000000000000000000000000000000000028c473a2cc3000002d66c9884c3742512e59ef4a94b10c7e3b945929cfce46f1842f4d22376e2dc30000000000000000000000000000000000000000000000000008dac8663f63009832334c45f37d42d77c3ee43b69a51ef3fd784fefe7bec752bf38eada8b7742000000000000000000000000000000000000000000000000000a3b5840f40000ab4f36254d622ebae64d8115f77c2b5c186d1dd52a872799fa463e602ffc486900000000000000000000000000000000000000000000000002ea11e32ad500001c35181f375d81b83d2a584e6145ad8f8599d0a15d85f0408bf3f7b7bcd4309a00000000000000000000000000000000000000000000000096eb55be0f000000bb4173746ba713b30b708edd5a767093e58ba7552e35fb43562eeae5814a668700000000000000000000000000000000000000000000000000312edcdc2c5100ef6a01e04793478e5126665710382ea7d71dd5293cad59463b2f57b8b3817eaf00000000000000000000000000000000000000000000000010ab850928330000edc977314640762057dcd9fcec1f985221a1d09ea8b26066ad8f03bc6049b5ca0000000000000000000000000000000000000000000000011494299bc3a00000571ad3df0993c393824406d6206e1e1e2016164f4e260b493cf3b94eebcd85810000000000000000000000000000000000000000000000000031495668e1a080b192b4354f71c264720b5922994fb620790efc3613ec8ee769b8711351e0e9ae00000000000000000000000000000000000000000000000000cca2e51310000092ff94fd20220ec44975163aef565f9639fc951296a66b5571f3b8d5e2e9d739000000000000000000000000000000000000000000000000048333c2dbc830801fe3316e2f828e3a2731d75bb786a10cfb57b2ac6f1b6c4453fcf4094a9b1e5400000000000000000000000000000000000000000000000002ea11e32ad50000ea12a8a476441d437758dd76042c83c9812551378f1e332687bdbda4bff8b73f0000000000000000000000000000000000000000000000000ffcb9e57d4000001894503da320552e38151748fa7e092e2a20bcfb865d22b96f766a35c1537d370000000000000000000000000000000000000000000000000019945ca2620000cc63dd7ff2c9dba450953d981bac9b211204aadad5ed2a095da35a099ddda812000000020000000064363dfbcc7d0e5411dc82f9302e8ed2453d908bbc8670f38bbef1adad6f4a7c3933f57ce6f4655272b20da9f57acbb0760bd80fbcbe82b5000000000000000064356eb0f5912370c56c12ab5a074bfb4bc09f65ce20a78a1675c41371fd82beb25cdbfb09d1768cee0607aa9dffd7432fc81f962c5e1f380000000000000000000000000000000000000000000000000000000000000001897011b2ec9ee7d7ccab48b833d89e8f69fcefb2ce84092445de06e8a620653b00000000000000000000000000000000000000000000000000000000000000013542e7ea54ebbb98bec3c50987f3b59c88d05bca29c8be88870a141662757fe8000000020000000064363dfbbbc0e91ab31d766c649f4a958d70cbc6cac718781a8a0b8d4d73354bf2f1abf110590a06ed6fa81e549455ba4d04c149cce539d8000000000000000000000000000000000000000000000000000000000000000150f88c7890afaf00d847789882225e5375549b744218183ccee10cf3a55eb522000000000000000000000000000000000000000000000000000000000000014ce846dc707bfd4b3ca500e64a6f2a28cc3b16854d9b21e2eb39e16275914c566d00000000000000000000000047377e35ebf039fda09655a528e78de3d918c54ed7192783d73f1c4155e7a9ea3c727cfb57bfec0d1ba07f1520bf02bda65160ee0000000000000000000000000000000000000000000000000000000000a7d8c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bea4000004c400000000003cab3f000000000000000000000000000000000000000000000000000000000000000c0000000000752f90000000000000000000000000000000000000000000000000000000000000000f0000000000003567000000000000000000000000000000000000000000000000000000000000bac80000000000825f3600000000000000000000000000000000000000000000000000000000000000020000000000375275000000000000000000000000000000000000000000000000000000000000000c0000000000824ca2000000000000000000000000000000000000000000000000000000000000000d0000000000226cda000000000000000000000000000000000000000000000000000000000000000d000000000082641a00000000000000000000000000000000000000000000000000000000000000030000000000825cd2000000000000000000000000000000000000000000000000000000000000000500000000008248220000000000000000000000000000000000000000000000000000000000000008000000000000501500000000000000000000000000000000000000000000000000000000000000bf000000000022fecf000000000000000000000000000000000000000000000000000000000000000700000000008255ad0000000000000000000000000000000000000000000000000000000000000006000000000082584b00000000000000000000000000000000000000000000000000000000000000100000000000034014000000000000000000000000000000000000000000000000000000000000001200000000008211df0000000000000000000000000000000000000000000000000000000000000021000000000052983a0000000000000000000000000000000000000000000000000000000000000020000000000081dbb1000000000000000000000000000000000000000000000000000000000000000c000000000082641c0000000000000000000000000000000000000000000000000000000000000003000000000024e9c8000000000000000000000000000000000000000000000000000000000000001c000000000081dbb2000000000000000000000000000000000000000000000000000000000000000a000000000082584d000000000000000000000000000000000000000000000000000000000000000200000000003e25bb000000000000000000000000000000000000000000000000000000000000001300000000005c5c890000000000000000000000000000000000000000000000000000000000000030000000000058fc3100000000000000000000000000000000000000000000000000000000000000100000000000004125000000000000000000000000000000000000000000000000000000000000000700000000001b75530000000000000000000000000000000000000000000000000000000000000053000000000035940f0000000000000000000000000000000000000000000000000000000000000044000000000019d516000000000000000000000000000000000000000000000000000000000000001f000000000025f1f000000000000000000000000000000000000000000000000000000000000000250000000000825a88000000000000000000000000000000000000000000000000000000000000000e000000000026ea620000000000000000000000000000000000000000000000000000000000000036000000000081bdc0000000000000000000000000000000000000000000000000000000000000000300000000000b098c000000000000000000000000000000000000000000000000000000000000001400000000002e4e1f000000000000000000000000000000000000000000000000000000000000000a000000000043bf150000000000000000000000000000000000000000000000000000000000000006000000000060d74a000000000000000000000000000000000000000000000000000000000000001a00000000004bfdd300000000000000000000000000000000000000000000000000000000000000120000000000822ec200000000000000000000000000000000000000000000000000000000000000070000000000715d4f000000000000000000000000000000000000000000000000000000000000000f0000000000639380000000000000000000000000000000000000000000000000000000000000000d0000000000025e6b000000000000000000000000000000000000000000000000000000000000000f00000000007b55d300000000000000000000000000000000000000000000000000000000000000070000000000028ea0000000000000000000000000000000000000000000000000000000000000006e000000000006b1cc000000000000000000000000000000000000000000000000000000000000003f000000000014436a000000000000000000000000000000000000000000000000000000000000002400000000005e9f5400000000000000000000000000000000000000000000000000000000000000100000000000756bc40000000000000000000000000000000000000000000000000000000000000008000000000066183c000000000000000000000000000000000000000000000000000000000000001b00000000004e8701000000000000000000000000000000000000000000000000000000000000000a00000000006d41ea000000000000000000000000000000000000000000000000000000000000001900000000007d217500000000000000000000000000000000000000000000000000000000000000100000000000824ca7000000000000000000000000000000000000000000000000000000000000000d00000000002944bf0000000000000000000000000000000000000000000000000000000000000016000000000023114b000000000000000000000000000000000000000000000000000000000000000900000000002e485d000000000000000000000000000000000000000000000000000000000000000a0000000000230362000000000000000000000000000000000000000000000000000000000000000800000000004e769300000000000000000000000000000000000000000000000000000000000000080000000000213e9f000000000000000000000000000000000000000000000000000000000000001f000000000079a5660000000000000000000000000000000000000000000000000000000000000006000000000081e3de000000000000000000000000000000000000000000000000000000000000000f00000000002313b5000000000000000000000000000000000000000000000000000000000000000300000000000e6229000000000000000000000000000000000000000000000000000000000000002b0000000000501592000000000000000000000000000000000000000000000000000000000000000d000000000012d5df00000000000000000000000000000000000000000000000000000000000000150000000000145df70000000000000000000000000000000000000000000000000000000000000016000000000064ec090000000000000000000000000000000000000000000000000000000000000007000000000081b162000000000000000000000000000000000000000000000000000000000000000600000000008233bf0000000000000000000000000000000000000000000000000000000000000009000000000025724e000000000000000000000000000000000000000000000000000000000000000600000000003e824d00000000000000000000000000000000000000000000000000000000000000160000000000825cda0000000000000000000000000000000000000000000000000000000000000004000000000008f4a5000000000000000000000000000000000000000000000000000000000000003a000000000032ddbb00000000000000000000000000000000000000000000000000000000000000070000000000825853000000000000000000000000000000000000000000000000000000000000001300000000006340d600000000000000000000000000000000000000000000000000000000000000110000000000823ada0000000000000000000000000000000000000000000000000000000000000006000000000062c15b000000000000000000000000000000000000000000000000000000000000006b0000000000232c35000000000000000000000000000000000000000000000000000000000000000a000000000082641f000000000000000000000000000000000000000000000000000000000000000600000000007a08de000000000000000000000000000000000000000000000000000000000000000c0000000000124c20000000000000000000000000000000000000000000000000000000000000002a000000000082642000000000000000000000000000000000000000000000000000000000000000020000000000826421000000000000000000000000000000000000000000000000000000000000000200000000008264220000000000000000000000000000000000000000000000000000000000000006000000000057f03a000000000000000000000000000000000000000000000000000000000000001200000000005ae7d200000000000000000000000000000000000000000000000000000000000000030000000000077b09000000000000000000000000000000000000000000000000000000000000004f000000000011dbb00000000000000000000000000000000000000000000000000000000000000036000000000002bc0300000000000000000000000000000000000000000000000000000000000000cb000000000026ffe7000000000000000000000000000000000000000000000000000000000000001a0000000000574f070000000000000000000000000000000000000000000000000000000000000020000000000082458c0000000000000000000000000000000000000000000000000000000000000005000000000080b128000000000000000000000000000000000000000000000000000000000000000b0000000000825cdd00000000000000000000000000000000000000000000000000000000000000090000000000536799000000000000000000000000000000000000000000000000000000000000003f0000000000296721000000000000000000000000000000000000000000000000000000000000000e00000000005bc3280000000000000000000000000000000000000000000000000000000000000004000000000082642300000000000000000000000000000000000000000000000000000000000000040000000000825cde000000000000000000000000000000000000000000000000000000000000000f00000000007fb65d00000000000000000000000000000000000000000000000000000000000000130000000000301cb4000000000000000000000000000000000000000000000000000000000000000700000000007f980a000000000000000000000000000000000000000000000000000000000000001700000000005dc4e6000000000000000000000000000000000000000000000000000000000000000a00000000007b5805000000000000000000000000000000000000000000000000000000000000000700000000002d913a0000000000000000000000000000000000000000000000000000000000000011000000000009542200000000000000000000000000000001000000000000000000000000000000280000000000815fa0000000000000000000000000000000000000000000000000000000000000005d00000000001268ea00000000000000000000000000000000000000000000000000000000000000070000000000826192000000000000000000000000000000000000000000000000000000000000000500000000000163cf000000000000000000000000000000000000000000000000000000000000003c00000000006b3814000000000000000000000000000000000000000000000000000000000000000400000000001f4ede000000000000000000000000000000000000000000000000000000000000001900000000004bad69000000000000000000000000000000000000000000000000000000000000004b0000000000774216000000000000000000000000000000000000000000000000000000000000002600000000000043ae0000000000000000000000000000000000000000000000000000000000000022000000000000c6e0000000000000000000000000000000000000000000000000000000000000004400000000000a4683000000000000000000000000000000000000000000000000000000000000000b0000000000001fa30000000000000000000000000000000000000000000000000000000000026e6d00000000008207be000000000000000000000000000000000000000000000000000000000000000500000000007cb86e00000000000000000000000000000000000000000000000000000000000000040000000000825ce000000000000000000000000000000000000000000000000000000000000000030000000000826195000000000000000000000000000000000000000000000000000000000000000900000000004a0c4e000000000000000000000000000000000000000000000000000000000000000a00000000002255dc0000000000000000000000000000000000000000000000000000000000000013000000000006964d00000000000000000000000000000000000000000000000000000000000000ea00000000001ff13900000000000000000000000000000000000000000000000000000000000000170000000000529d40000000000000000000000000000000000000000000000000000000000000000a00000000007a78f2000000000000000000000000000000000000000000000000000000000000000f000000000012d5e800000000000000000000000000000000000000000000000000000000000000130000000000826197000000000000000000000000000000000000000000000000000000000000000500000000002702b600000000000000000000000000000000000000000000000000000000000000120000000000021d8a000000000000000000000000000000000000000000000000000000000000005a000000000032163f000000000000000000000000000000000000000000000000000000000000001f000000000014464500000000000000000000000000000000000000000000000000000000000000180000000000010084000000000000000000000000000000000000000000000000000000000000003800000000005634d5000000000000000000000000000000000000000000000000000000000000000d00000000007a07870000000000000000000000000000000000000000000000000000000000000007000000000076e2b70000000000000000000000000000000000000000000000000000000000000004000000000082514f00000000000000000000000000000000000000000000000000000000000000110000000000126a47000000000000000000000000000000000000000000000000000000000000000600000000002c3ca6000000000000000000000000000000000000000000000000000000000000003500000000005d4e95000000000000000000000000000000000000000000000000000000000000003b000000000082585b000000000000000000000000000000000000000000000000000000000000000800000000005e7cff0000000000000000000000000000000000000000000000000000000000000007000000000000502a00000000000000000000000000000000000000000000000000000000000000ba000000000052d2e5000000000000000000000000000000000000000000000000000000000000000d00000000001087e40000000000000000000000000000000000000000000000000000000000000051000000000076d3e7000000000000000000000000000000000000000000000000000000000000000c0000000000826198000000000000000000000000000000000000000000000000000000000000000400000000005c89a60000000000000000000000000000000000000000000000000000000000000010000000000067d9a0000000000000000000000000000000000000000000000000000000000000002a00000000004cf32e000000000000000000000000000000000000000000000000000000000000000400000000004230fb00000000000000000000000000000000000000000000000000000000000000280000000000824316000000000000000000000000000000000000000000000000000000000000001c00000000005f856f000000000000000000000000000000030000000000000000000000000000059f00000000003512c6000000000000000000000000000000000000000000000000000000000000000f000000000082619a0000000000000000000000000000000000000000000000000000000000000003000000000082619b00000000000000000000000000000000000000000000000000000000000000060000000000824cb1000000000000000000000000000000000000000000000000000000000000000c00000000005de9fe000000000000000000000000000000000000000000000000000000000000000a000000000029e881000000000000000000000000000000000000000000000000000000000000001700000000008253b200000000000000000000000000000000000000000000000000000000000000050000000000824f03000000000000000000000000000000000000000000000000000000000000000e00000000003b2bbf000000000000000000000000000000000000000000000000000000000000003200000000006395b90000000000000000000000000000000000000000000000000000000000000039000000000022908e000000000000000000000000000000000000000000000000000000000000000800000000004b08f6000000000000000000000000000000000000000000000000000000000000000a0000000000190376000000000000000000000000000000000000000000000000000000000000000a0000000000099812000000000000000000000000000000000000000000000000000000000000004b00000000000351f5000000000000000000000000000000000000000000000000000000000000001f00000000006d0d32000000000000000000000000000000000000000000000000000000000000000500000000007dc80200000000000000000000000000000000000000000000000000000000000000050000000000108c760000000000000000000000000000000000000000000000000000000000000020000000000082482d00000000000000000000000000000000000000000000000000000000000000070000000000001fa4000000000000000000000000000000000000000000000000000000000002751200000000000c68b80000000000000000000000000000000000000000000000000000000000000030000000000082585e000000000000000000000000000000000000000000000000000000000000000b00000000002aaece00000000000000000000000000000000000000000000000000000000000000160000000000131549000000000000000000000000000000000000000000000000000000000000000d0000000000019a0f00000000000000000000000000000000000000000000000000000000000000330000000000825a9d00000000000000000000000000000000000000000000000000000000000000060000000000825f430000000000000000000000000000000000000000000000000000000000000003000000000048a952000000000000000000000000000000000000000000000000000000000000001600000000007e18e200000000000000000000000000000000000000000000000000000000000000160000000000822c6a000000000000000000000000000000000000000000000000000000000000000a0000000000126a4f0000000000000000000000000000000000000000000000000000000000000006000000000082619c000000000000000000000000000000000000000000000000000000000000000400000000002e4b5000000000000000000000000000000000000000000000000000000000000000200000000000822a3d0000000000000000000000000000000000000000000000000000000000000009000000000081bb7c000000000000000000000000000000000000000000000000000000000000000a000000000082215e000000000000000000000000000000000000000000000000000000000000000400000000000c3fcb0000000000000000000000000000000000000000000000000000000000000067000000000081e1ce000000000000000000000000000000000000000000000000000000000000000f0000000000824f08000000000000000000000000000000000000000000000000000000000000000500000000007b66070000000000000000000000000000000000000000000000000000000000000009000000000047c716000000000000000000000000000000000000000000000000000000000000001a000000000000252700000000000000000000000000000000000000000000000000000000000058fe000000000081e412000000000000000000000000000000000000000000000000000000000000001000000000008240ae000000000000000000000000000000000000000000000000000000000000000f0000000000126a50000000000000000000000000000000000000000000000000000000000000000600000000006b1cd0000000000000000000000000000000000000000000000000000000000000000d000000000075695b0000000000000000000000000000000000000000000000000000000000000022000000000011dde60000000000000000000000000000000000000000000000000000000000000008000000000003052b000000000000000000000000000000000000000000000000000000000000002100000000007ce2bc000000000000000000000000000000000000000000000000000000000000000400000000001a540c000000000000000000000000000000000000000000000000000000000000000d00000000002cc4bf000000000000000000000000000000000000000000000000000000000000001600000000002f029d0000000000000000000000000000000000000000000000000000000000000011000000000008bfae000000000000000000000000000000000000000000000000000000000000008e000000000000d0cf000000000000000000000000000000000000000000000000000000000000004b00000000007a078b000000000000000000000000000000000000000000000000000000000000000700000000007e2822000000000000000000000000000000000000000000000000000000000000000f00000000005779bc000000000000000000000000000000000000000000000000000000000000001900000000002f9b44000000000000000000000000000000000000000000000000000000000000000800000000002db242000000000000000000000000000000000000000000000000000000000000004d000000000003f44c000000000000000000000000000000000000000000000000000000000000002300000000005de2b4000000000000000000000000000000000000000000000000000000000000000f00000000008261a0000000000000000000000000000000000000000000000000000000000000000800000000004b27a800000000000000000000000000000000000000000000000000000000000000210000000000006f740000000000000000000000000000000000000000000000000000000000000055000000000075f4ce0000000000000000000000000000000000000000000000000000000000000007000000000043bb5300000000000000000000000000000000000000000000000000000000000002280000000000820a5f000000000000000000000000000000000000000000000000000000000000000700000000004e3f9c00000000000000000000000000000000000000000000000000000000000000090000000000825ce600000000000000000000000000000000000000000000000000000000000000090000000000575d75000000000000000000000000000000000000000000000000000000000000000c000000000028acc4000000000000000000000000000000000000000000000000000000000000003500000000008253b40000000000000000000000000000000000000000000000000000000000000013000000000071857c0000000000000000000000000000000000000000000000000000000000000004000000000037d7e7000000000000000000000000000000000000000000000000000000000000000600000000007b30a50000000000000000000000000000000000000000000000000000000000000002000000000039edae000000000000000000000000000000000000000000000000000000000000000500000000005bfaea000000000000000000000000000000000000000000000000000000000000000700000000002aaed300000000000000000000000000000000000000000000000000000000000000180000000000513a09000000000000000000000000000000000000000000000000000000000000000b00000000007b55e20000000000000000000000000000000000000000000000000000000000000007000000000082515a00000000000000000000000000000000000000000000000000000000000000130000000000825aa4000000000000000000000000000000000000000000000000000000000000000d0000000000824cb4000000000000000000000000000000000000000000000000000000000000000d000000000081e41f000000000000000000000000000000000000000000000000000000000000000f0000000000251142000000000000000000000000000000000000000000000000000000000000003600000000000793e10000000000000000000000000000000000000000000000000000000000004a0c00000000008261a300000000000000000000000000000000000000000000000000000000000000040000000000059d2c00000000000000000000000000000000000000000000000000000000000000090000000000825ce700000000000000000000000000000000000000000000000000000000000000070000000000821ba3000000000000000000000000000000000000000000000000000000000000000900000000006dae180000000000000000000000000000000000000000000000000000000000000021000000000000038d0000000000000000000000000000000000000000000000000000000000005296000000000052f5bc000000000000000000000000000000000000000000000000000000000000001000000000000d932d000000000000000000000000000000000000000000000000000000000000001900000000008261a40000000000000000000000000000000000000000000000000000000000000005000000000001315200000000000000000000000000000000000000000000000000000000000000230000000000210d5e000000000000000000000000000000000000000000000000000000000000000200000000008255c6000000000000000000000000000000000000000000000000000000000000000a00000000002dcaf8000000000000000000000000000000000000000000000000000000000000000300000000008255c7000000000000000000000000000000000000000000000000000000000000001200000000008261a50000000000000000000000000000000000000000000000000000000000000006000000000045ef66000000000000000000000000000000000000000000000000000000000000000a00000000003df8b2000000000000000000000000000000000000000000000000000000000000000c00000000007f7a72000000000000000000000000000000000000000000000000000000000000001900000000007a078f0000000000000000000000000000000000000000000000000000000000000007000000000014e56b000000000000000000000000000000000000000000000000000000000000002000000000001e99580000000000000000000000000000000000000000000000000000000000000021000000000055b5eb000000000000000000000000000000000000000000000000000000000000000300000000006927b000000000000000000000000000000000000000000000000000000000000000040000000000821202000000000000000000000000000000000000000000000000000000000000000300000000000412a800000000000000000000000000000000000000000000000000000000000000440000000000824cb6000000000000000000000000000000000000000000000000000000000000000d00000000000b06c90000000000000000000000000000000000000000000000000000000000000014000000000043775e000000000000000000000000000000000000000000000000000000000000000d0000000000825f4d000000000000000000000000000000000000000000000000000000000000000500000000001df736000000000000000000000000000000000000000000000000000000000000002800000000002ca8b5000000000000000000000000000000000000000000000000000000000000001000000000000a774c0000000000000000000000000000000000000000000000000000000000000034000000000000002f000000000000000000000000000000000000000000000dd5c05263e62cd67458000000000020dfe90000000000000000000000000000000000000000000000000289fef3a8e5c9a1000000000075244400000000000000000000000000000000000000000000000000261710b55d180a00000000000026a60000000000000000000000000000000000000000000000000c4973000968ba9200000000007e2d34000000000000000000000000000000000000000000000000001b7fc42d9f37ae000000000010fa71000000000000000000000000000000000000000000000000003f2e11b22ff1a50000000000374dc300000000000000000000000000000000000000000000000000521e5d257ca3e00000000000824329000000000000000000000000000000000000000000000000004095d45c5a584b000000000022658c0000000000000000000000000000000000000000000000000048b89f4fb1932400000000008261a70000000000000000000000000000000000000000000000000299dfbba42fe8620000000000825aaa0000000000000000000000000000000000000000000000000146e8a1b746183c000000000082459e0000000000000000000000000000000000000000000000000003c7d6491a6ae40000000000004848000000000000000000000000000000000000000000000000000bbf291a18cbf2000000000022ff070000000000000000000000000000000000000000000000000732c087bcebb47b00000000007d94880000000000000000000000000000000000000000000000000054af43f880efa4000000000081fb1800000000000000000000000000000000000000000000000000791dbe8698d60d0000000000032d5000000000000000000000000000000000000000000000000000de81390662505600000000005cb57e000000000000000000000000000000000000000000000000018b591a84c813d8000000000052939c000000000000000000000000000000000000000000000000006ed65bfb18c8f500000000008264260000000000000000000000000000000000000000000000000001138837d67057000000000081d20c00000000000000000000000000000000000000000000000006f5abd5f3a124740000000000323a900000000000000000000000000000000000000000000000000299307caa12730000000000008261aa000000000000000000000000000000000000000000000000044fa71ecf38709c000000000024bf26000000000000000000000000000000000000000000000000006f77cb3a947e35000000000081d20d0000000000000000000000000000000000000000000000000023f574499af807000000000060578f000000000000000000000000000000000000000000000000005c0e5447ade21700000000001a112f000000000000000000000000000000000000000000000000004c23f55466404a00000000005c4c3a00000000000000000000000000000000000000000000000000f8c73e6d5ec6b8000000000058e4aa000000000000000000000000000000000000000000000000001c8acb6935f7ce0000000000042cc3000000000000000000000000000000000000000000000000005c5030c84a678500000000008225340000000000000000000000000000000000000000000000000061ace89a58a2d00000000000003f000000000000000000000000000000000000000000000000000005d7c6cea0399200000000001acb6b0000000000000000000000000000000000000000000000000584ee826687c2bc0000000000358e2d00000000000000000000000000000000000000000000000003549610044d96a5000000000019d27900000000000000000000000000000000000000000000000001304c0e5e090f050000000000175b4a00000000000000000000000000000000000000000000000000f5451f3c2ccb32000000000025efb40000000000000000000000000000000000000000000000000125783ba897c365000000000081ecec00000000000000000000000000000000000000000000000000bb277d2bbd07bb000000000013880600000000000000000000000000000000000000000000000001ae58857a28e385000000000081b1750000000000000000000000000000000000000000000000000012dfeca48afd3e000000000003e9b400000000000000000000000000000000000000000000001d4139fcd0d9be67b000000000000b047600000000000000000000000000000000000000000000000003c28752fa83cef70000000000826427000000000000000000000000000000000000000000000000001cfac37692aa1600000000002e4b6c00000000000000000000000000000000000000000000000000f3ba0b4493ef8d0000000000436f8c0000000000000000000000000000000000000000000000000022d23716759080000000000060d5f50000000000000000000000000000000000000000000000000024d71c5db951f100000000004bc66b0000000000000000000000000000000000000000000000000020716415d775590000000000822c7f000000000000000000000000000000000000000000000000057292e43a9f373d0000000000714a85000000000000000000000000000000000000000000000000001f1a4490c239a7000000000068ace20000000000000000000000000000000000000000000000000079f6f87ec6383f0000000000638ef3000000000000000000000000000000000000000000000000009d8b70b32714310000000000025c730000000000000000000000000000000000000000000000000115d1b73b05749800000000007aee54000000000000000000000000000000000000000000000000001db56b86a99d80000000000061799c0000000000000000000000000000000000000000000000000ef884545c8090f40000000000002062000000000000000000000000000000000000000000000003f943784f5bc96775000000000006af6300000000000000000000000000000000000000000000000002d55ce881b73a0400000000000a0edc0000000000000000000000000000000000000000000000000001282fd6e01dca00000000005cdd4100000000000000000000000000000000000000000000000000981b0f869634310000000000753989000000000000000000000000000000000000000000000000034b48c3073476ae00000000000b94f3000000000000000000000000000000000000000000000000001337b6ddad4aaf00000000004e83210000000000000000000000000000000000000000000000000123f7cb374984eb00000000006ca7d10000000000000000000000000000000000000000000000000af71f870d7a1fc300000000007ced6e00000000000000000000000000000000000000000000000000f8284167fb5a88000000000082432c0000000000000000000000000000000000000000000000000040a714e5e67c430000000000139edb00000000000000000000000000000000000000000000000000438e0aa9b5fe6d0000000000230f090000000000000000000000000000000000000000000000000687effda6131f1f00000000002df4a4000000000000000000000000000000000000000000000000005bd3280b16224d000000000023038e00000000000000000000000000000000000000000000000006bd3150f73314ed00000000004e60540000000000000000000000000000000000000000000000000307eafbd78df55f0000000000212bec00000000000000000000000000000000000000000000000000470409151844f6000000000050911b000000000000000000000000000000000000000000000000006c6a8c03ce467500000000006c1ce5000000000000000000000000000000000000000000000000002aa3d1ca3788f6000000000081defe000000000000000000000000000000000000000000000000003709e49ff3606000000000001519f1000000000000000000000000000000000000000000000000000a0f45aa708ca9000000000000255600000000000000000000000000000000000000000000001e54b773954a7adf5e00000000000e5564000000000000000000000000000000000000000000000000000e324a4001b99c0000000000500b57000000000000000000000000000000000000000000000000019cf12461da4d20000000000012b68e000000000000000000000000000000000000000000000000001ea21508d318b6000000000009b5a1000000000000000000000000000000000000000000000000003f3e3da2a0c9c60000000000630f1f0000000000000000000000000000000000000000000000000040280f4027db54000000000082642a0000000000000000000000000000000000000000000000000001138837d67057000000000081a9870000000000000000000000000000000000000000000000000016c5533eccfd2b0000000000822ee600000000000000000000000000000000000000000000000000191a33e7b75e5a00000000002567be00000000000000000000000000000000000000000000000000e204e8fc787b98000000000000214d000000000000000000000000000000000000000000000292a6dafe2ec4c484a300000000004ecda800000000000000000000000000000000000000000000000001adc09ff8938cae00000000003e54720000000000000000000000000000000000000000000000000009dd8a44ee02c600000000007d92370000000000000000000000000000000000000000000000000021038f788d20f6000000000008ba1f00000000000000000000000000000000000000000000000003dce2989577495000000000002d33d600000000000000000000000000000000000000000000000000239e0ff1773cb900000000008253cd000000000000000000000000000000000000000000000000067ff4dfa61d416c0000000000825cee000000000000000000000000000000000000000000000000017b9fe8ac20a5d7000000000082642b00000000000000000000000000000000000000000000000000ce34db63283a8800000000006339bb0000000000000000000000000000000000000000000000000221e0a8fe20ee33000000000080d221000000000000000000000000000000000000000000000000007e6265f5102c1c000000000062bf270000000000000000000000000000000000000000000000000563aefd37e2c4d40000000000007a1c0000000000000000000000000000000000000000000000120728e35fe44a9a26000000000023278d0000000000000000000000000000000000000000000000000004e6fffe7be2a300000000008255d300000000000000000000000000000000000000000000000000416bc9ed4c6d0b00000000007a057d0000000000000000000000000000000000000000000000000179f6eceb00bd2400000000001247a00000000000000000000000000000000000000000000000000016870a9b7796960000000000825ab400000000000000000000000000000000000000000000000000031f3d897e3e270000000000825ab60000000000000000000000000000000000000000000000000015dac9ae88ec500000000000821baf0000000000000000000000000000000000000000000000001c711df07561c7c4000000000082642e00000000000000000000000000000000000000000000000005779b273fe53c32000000000057eb83000000000000000000000000000000000000000000000000000054b0244cf3000000000000136c4b0000000000000000000000000000000000000000000000000bc7bd93fd1c6920000000000002111600000000000000000000000000000000000000000000000001cb45f3630910ae00000000001067e60000000000000000000000000000000000000000000000000025e722d888177e000000000002b8020000000000000000000000000000000000000000000000000eea192d5688ed4c0000000000210682000000000000000000000000000000000000000000000000001e69a1fd66405a0000000000574cfc000000000000000000000000000000000000000000000000001d01ee00793dd900000000007e68e60000000000000000000000000000000000000000000000000019e688d9801f2700000000007b6f85000000000000000000000000000000000000000000000000000523e0b2ef0cd4000000000082587a000000000000000000000000000000000000000000000000082ff988238ed6e5000000000053655e000000000000000000000000000000000000000000000000019d0cb159707c45000000000028bbfb0000000000000000000000000000000000000000000000000045acf85aa5abf80000000000459eaf000000000000000000000000000000000000000000000000000a3ba277ef03c700000000008261b400000000000000000000000000000000000000000000000000873d231eed1fcc000000000082587b0000000000000000000000000000000000000000000000000193c7025a914c010000000000046bc90000000000000000000000000000000000000000000000001b5e60a8f9be4cbc00000000007fb67a00000000000000000000000000000000000000000000000000053acfae3cef4b000000000002f28f00000000000000000000000000000000000000000000000000c632c8f0ce175b0000000000300f94000000000000000000000000000000000000000000000000000b5696c2665e9400000000007f884e00000000000000000000000000000000000000000000000000072fedb062e38000000000005d2503000000000000000000000000000000000000000000000000003bb5cf507d1ae700000000006913260000000000000000000000000000000000000000000000000012599c692b2fc000000000007aee7c000000000000000000000000000000000000000000000000001cc2e505e39a80000000000066c3e400000000000000000000000000000000000000000000000001ddbe4470b36820000000000010c4200000000000000000000000000000000000000000000000000039ac370e5dcd12000000000008f004000000000000000000000000000000000000000000000000003deca4c3db5229000000000082642f0000000000000000000000000000000000000000000000000001138837d670570000000000814f6c0000000000000000000000000000000000000000000000000086d6fadcd618790000000000125ba000000000000000000000000000000000000000000000000000518214f781843900000000000d24ef000000000000000000000000000000000000000000000000006b9f395e2cba350000000000824cc600000000000000000000000000000000000000000000000000346cc05becdede0000000000014c26000000000000000000000000000000000000000000000000003a77d1dbac4bd70000000000421d650000000000000000000000000000000000000000000000000018918507df067600000000001ee1bd000000000000000000000000000000000000000000000000001b443f2d03310000000000004b73e6000000000000000000000000000000000000000000000000000a6a2a277891b10000000000825cf30000000000000000000000000000000000000000000000004d27098c9af7f3c30000000000773e96000000000000000000000000000000000000000000000000002113428add9b8000000000000035c600000000000000000000000000000000000000000000000000155b6c409ded88000000000000c1960000000000000000000000000000000000000000000000000018c07c83ac24d5000000000002130c000000000000000000000000000000000000000000000000046f3bf1a5d7709f000000000008734f0000000000000000000000000000000000000000000000000005853c4a2073040000000000001fa50000000000000000000000000000000000000000000000047eb310d1ea4fae1400000000007b581e00000000000000000000000000000000000000000000000000558ae99f3ebe5f00000000007cb882000000000000000000000000000000000000000000000000001116854a4f7534000000000082433900000000000000000000000000000000000000000000000000190c8402fdc868000000000081f60300000000000000000000000000000000000000000000000000411e256a53f1370000000000498efe000000000000000000000000000000000000000000000000016ebcd546b147d40000000000028ab60000000000000000000000000000000000000000000000000028580e5ef1c93000000000000691ad0000000000000000000000000000000000000000000000000c9a2aec3641a8cd000000000081bde600000000000000000000000000000000000000000000000000ab20308653559000000000001ff167000000000000000000000000000000000000000000000000008fe92af19ffa8100000000000b215d000000000000000000000000000000000000000000000000004a773d8479c87c00000000004d4cf7000000000000000000000000000000000000000000000000003d5680e74baf8800000000007a6e1e000000000000000000000000000000000000000000000000004fa7a6c2dcb5c3000000000005b42d000000000000000000000000000000000000000000000000004333d8ebd1872100000000007d842e0000000000000000000000000000000000000000000000000005c6354f021954000000000013620d000000000000000000000000000000000000000000000000000b43deacff99890000000000021bfb00000000000000000000000000000000000000000000000002152a30b128a7b600000000008264310000000000000000000000000000000000000000000000000001138837d67057000000000031148300000000000000000000000000000000000000000000000000088589c07b390000000000008264320000000000000000000000000000000000000000000000000010c2faba43f98500000000001440fc000000000000000000000000000000000000000000000000020f6a8c0227ec9c000000000000f86d0000000000000000000000000000000000000000000000000001c82ee58a83350000000000563117000000000000000000000000000000000000000000000000004c092a00ec20860000000000285a98000000000000000000000000000000000000000000000000008702d0d129080400000000006b0abf0000000000000000000000000000000000000000000000000019fa67cb80061a000000000001e66200000000000000000000000000000000000000000000000000b113f3712701cb0000000000824ab1000000000000000000000000000000000000000000000000001d67c7c85b02680000000000125dcc0000000000000000000000000000000000000000000000000053bfd8dcf5159b0000000000002a3b000000000000000000000000000000000000000000000009aa621e5ca3114ea000000000002b42bf0000000000000000000000000000000000000000000000000054c8bb8a9b268600000000005d43ef000000000000000000000000000000000000000000000000017bc4b5ba09ef2f00000000008245ae00000000000000000000000000000000000000000000000000235552d025f5f100000000005e7b13000000000000000000000000000000000000000000000000000f43a2e1a353000000000000004f7e00000000000000000000000000000000000000000000000002109e20ed74c87f000000000052cb8000000000000000000000000000000000000000000000000001fffb7323b9a12300000000000313d9000000000000000000000000000000000000000000000000002b73f694d86e40000000000076c9be0000000000000000000000000000000000000000000000000002fd36a8b152280000000000825f5c00000000000000000000000000000000000000000000000000667691e20fc60f00000000005c70610000000000000000000000000000000000000000000000000071d331e35986c0000000000067c57b000000000000000000000000000000000000000000000000002cb264839f558000000000004ce6bd0000000000000000000000000000000000000000000000000002b3d23e3597550000000000422cf00000000000000000000000000000000000000000000000000017bcc54cc9c6fc0000000000823c230000000000000000000000000000000000000000000000000048bf4c3dfbbb5500000000005f3a33000000000000000000000000000000000000000000000000017e46d23503f83d00000000003510aa0000000000000000000000000000000000000000000000000014692d4340025d00000000007f6b2000000000000000000000000000000000000000000000000000056b6c9bffc57a00000000008255e4000000000000000000000000000000000000000000000000000e23e115c8c1ae000000000082433b000000000000000000000000000000000000000000000000002006318e1e4ecb00000000005d72de0000000000000000000000000000000000000000000000000029af78df0fad6d00000000002693ed00000000000000000000000000000000000000000000000000134d551c950e25000000000082643600000000000000000000000000000000000000000000000000adda50d4fb766d0000000000824f2100000000000000000000000000000000000000000000000000a95293759ad9660000000000824ab40000000000000000000000000000000000000000000000000075600edbeba87d000000000035f8c000000000000000000000000000000000000000000000000001273a0f1ee9fdb100000000006371980000000000000000000000000000000000000000000000000a1770ad54af71990000000000225e66000000000000000000000000000000000000000000000000002acf5a995db05600000000004af5ce000000000000000000000000000000000000000000000000004430b2cb531b7500000000001903a9000000000000000000000000000000000000000000000000002dc9edfbd9dc27000000000009670b00000000000000000000000000000000000000000000000000c281098d4f522300000000001fd624000000000000000000000000000000000000000000000000009d27622bf7b3f5000000000001f3c900000000000000000000000000000000000000000000000000629f9f8d079f5e00000000006951b8000000000000000000000000000000000000000000000000000cb77b0c197ee000000000008225460000000000000000000000000000000000000000000000000b1c1c14fc61bd3400000000007a66d100000000000000000000000000000000000000000000000002b4a966adc03f400000000000108825000000000000000000000000000000000000000000000000021d021f2115f687000000000073ce0f000000000000000000000000000000000000000000000000003f64a688db435b0000000000256a470000000000000000000000000000000000000000000000000182933c3c676d480000000000001e0b00000000000000000000000000000000000000000000000a685df5f30e5927060000000000823c2400000000000000000000000000000000000000000000000005d3d306a027307000000000000c65fe0000000000000000000000000000000000000000000000000075cd24502eb33c00000000008255e5000000000000000000000000000000000000000000000000515e336ed9a7f81100000000008253dc000000000000000000000000000000000000000000000000014061de709aa4e30000000000024182000000000000000000000000000000000000000000000000001ac683d1b6fd5200000000001312e400000000000000000000000000000000000000000000000000565e1d3dee59fe00000000007b4531000000000000000000000000000000000000000000000000000c2c32a512fd860000000000825cf6000000000000000000000000000000000000000000000000006309dc5ce017800000000000010cd8000000000000000000000000000000000000000000000000017863ff18a298ef00000000008258890000000000000000000000000000000000000000000000000004f257f856e9b40000000000825172000000000000000000000000000000000000000000000000000813ab87a8b08200000000004894230000000000000000000000000000000000000000000000000258ecded62853650000000000550ca900000000000000000000000000000000000000000000000000181d32ae40c03a000000000082254900000000000000000000000000000000000000000000000000610c7998c2608e0000000000125dd30000000000000000000000000000000000000000000000000053bfa73a39b9d30000000000825f5d0000000000000000000000000000000000000000000000000055341d8ab9f3a400000000002ea0c200000000000000000000000000000000000000000000000000be3ad056017d3d00000000002e42f6000000000000000000000000000000000000000000000000000317a809b48d7a000000000081f431000000000000000000000000000000000000000000000000000390686ab8109a000000000081b93200000000000000000000000000000000000000000000000000004a6b99a9d4000000000000826437000000000000000000000000000000000000000000000000005f224902d20816000000000081d962000000000000000000000000000000000000000000000000004af4f9c403bc6e00000000000c3af9000000000000000000000000000000000000000000000000005578d4cc1cae800000000000183dc10000000000000000000000000000000000000000000000000304530312b05406000000000081dbd90000000000000000000000000000000000000000000000000037d0c95703fede0000000000757521000000000000000000000000000000000000000000000000008fecc9520ffbb900000000007b650f000000000000000000000000000000000000000000000000001f76d5522f570b000000000047bfbc0000000000000000000000000000000000000000000000000069877390ecf67d00000000000020f3000000000000000000000000000000000000000000000000340f6b0c3245e36a000000000081e1e90000000000000000000000000000000000000000000000000036eab25e70ac7500000000007ed7230000000000000000000000000000000000000000000000000022d975e1dcacb40000000000125bb40000000000000000000000000000000000000000000000000053b4af91cf3a19000000000066f7d1000000000000000000000000000000000000000000000000000a93b439220c74000000000073855f00000000000000000000000000000000000000000000000000219d46cfe945de000000000000003e0000000000000000000000000000000000000000000000000f3d416b9d2e2494000000000011d72b0000000000000000000000000000000000000000000000000022b2dad0c1f2530000000000003b100000000000000000000000000000000000000000000000000057ec8a61c22b6d00000000007cd091000000000000000000000000000000000000000000000000001fc4423aabfe9100000000001a4c90000000000000000000000000000000000000000000000000005c146c6bc916e000000000000fce7b000000000000000000000000000000000000000000000000003c05e8eb81666a00000000002229b6000000000000000000000000000000000000000000000000005a04dd2cb33502000000000082643900000000000000000000000000000000000000000000000007990d524f4e179c00000000002260da0000000000000000000000000000000000000000000000000114985a03cf4123000000000008bfdc0000000000000000000000000000000000000000000000000018ca5f7178a631000000000000b05200000000000000000000000000000000000000000000000007b79dc46af399c900000000006af30f000000000000000000000000000000000000000000000000001647c55315477500000000007dd10b000000000000000000000000000000000000000000000000013b37832b75672e000000000000406500000000000000000000000000000000000000000000035f798ec2aeec63af9b00000000002e3414000000000000000000000000000000000000000000000000001208de1721fad600000000002f5da3000000000000000000000000000000000000000000000000037efc2485adf03200000000002da6c1000000000000000000000000000000000000000000000000002b22ca23131e6c00000000000389d3000000000000000000000000000000000000000000000000005fa4121b9d0ed50000000000566b02000000000000000000000000000000000000000000000000000895298e141834000000000081ed0b000000000000000000000000000000000000000000000000006343aabfae04f4000000000017591700000000000000000000000000000000000000000000000000fadb997100343200000000004a586700000000000000000000000000000000000000000000000063d8acc60a6a4b8500000000000065a5000000000000000000000000000000000000000000000000068f12d1d0bf14db000000000075ccb7000000000000000000000000000000000000000000000000002dc066a2a68a00000000000043b7900000000000000000000000000000000000000000000000000ddff10432bbb68f00000000007b651300000000000000000000000000000000000000000000000000144ff5f08f98d0000000000082643b00000000000000000000000000000000000000000000000011580100e80b600500000000004e399000000000000000000000000000000000000000000000000000071d289fd389360000000000825894000000000000000000000000000000000000000000000000002f0b9ed4ce38e5000000000057578f000000000000000000000000000000000000000000000000002cf66f1644a9b1000000000023a478000000000000000000000000000000000000000000000000001c200bf825a54f0000000000824cd8000000000000000000000000000000000000000000000000014e57b53c7d0e6700000000006478dd000000000000000000000000000000000000000000000000000af9e5bd55ea47000000000037cc5c000000000000000000000000000000000000000000000000000af5a69cde00b000000000000077fc000000000000000000000000000000000000000000000000d642957badd8107e000000000072ffa40000000000000000000000000000000000000000000000000008804c7ff869c2000000000036f0bc000000000000000000000000000000000000000000000000013b4254f67e525a000000000081ef880000000000000000000000000000000000000000000000000f3ebd28d901443c0000000000824f2d000000000000000000000000000000000000000000000000000b140fd6862e0c00000000005be372000000000000000000000000000000000000000000000000000df350c7416f4700000000002a6fb60000000000000000000000000000000000000000000000000018a0abd7d0d8aa0000000000513a370000000000000000000000000000000000000000000000000008c3b79171d88400000000007aeedc000000000000000000000000000000000000000000000000001be12e91ad81000000000000824f2f00000000000000000000000000000000000000000000000050740119fd81fbdb000000000082643f0000000000000000000000000000000000000000000000000011c44531ec3ae300000000002c82fc00000000000000000000000000000000000000000000000003b4aa0d75c2483600000000008258970000000000000000000000000000000000000000000000000134a073947d03e800000000008243440000000000000000000000000000000000000000000000000040a719bab25bc3000000000081dbe2000000000000000000000000000000000000000000000000003645e31904b2e50000000000116d6c00000000000000000000000000000000000000000000000001a1af8cddebb3d9000000000001e42e000000000000000000000000000000000000000000000000004a6eaa4d7b249b0000000000076ff800000000000000000000000000000000000000000000000003754e4be0f649b100000000001903b900000000000000000000000000000000000000000000000000366c04f943940000000000008253e20000000000000000000000000000000000000000000000000119cbf69df653e3000000000005931400000000000000000000000000000000000000000000000000174a99f50c029200000000008004910000000000000000000000000000000000000000000000000279958544b845ef000000000082025f000000000000000000000000000000000000000000000000002b0da27beab7f100000000006d9e420000000000000000000000000000000000000000000000000200ac03dc5fe5d3000000000000015e00000000000000000000000000000000000000000000000001eabb31f25e1b8800000000004e22f6000000000000000000000000000000000000000000000000004533b9958358a500000000000ce49d00000000000000000000000000000000000000000000000001ea40aa2bdd8334000000000021869a00000000000000000000000000000000000000000000000000150c8a37cc09330000000000824cdd000000000000000000000000000000000000000000000000003f471dac4d89e6000000000000275500000000000000000000000000000000000000000000000000277ba121873ddb0000000000195883000000000000000000000000000000000000000000000000009126371343ab24000000000082364900000000000000000000000000000000000000000000000006ac78944579a663000000000000543e000000000000000000000000000000000000000000000000005eababb37ef2150000000000824cde00000000000000000000000000000000000000000000000000b967d59aad888800000000008233fe000000000000000000000000000000000000000000000000001fa5ae1c8e230e000000000045df5f0000000000000000000000000000000000000000000000000044d2aa6072f946000000000076b1760000000000000000000000000000000000000000000000000bbdf09aefd7e1b100000000003dd2f1000000000000000000000000000000000000000000000000003651061a412e1b00000000007f761300000000000000000000000000000000000000000000000000761b18de587b5b00000000006b0ad500000000000000000000000000000000000000000000000000193205c12fe1ac000000000014d50b0000000000000000000000000000000000000000000000000a8d9a8f8438ff9e000000000017a7e70000000000000000000000000000000000000000000000000b1349c781c81eee0000000000559bb300000000000000000000000000000000000000000000000000386f052f025b8000000000006925e000000000000000000000000000000000000000000000000000745c9085fe1ad00000000000682971000000000000000000000000000000000000000000000000239afa2090a8e424000000000000780b000000000000000000000000000000000000000000000000051b102cb446b3df0000000000824348000000000000000000000000000000000000000000000000004095d5dfc8794b00000000000b04b600000000000000000000000000000000000000000000000003c1a104409e9a0f00000000006e16360000000000000000000000000000000000000000000000000022e5dd381b2b00000000000043757a000000000000000000000000000000000000000000000000016f826212592cf30000000000821f0c00000000000000000000000000000000000000000000000010e07b07ce11544f00000000001de69700000000000000000000000000000000000000000000000000196109e91e089c000000000011c066000000000000000000000000000000000000000000000000001a104f9d97e72200000000000909a00000000000000000000000000000000000000000000000000063dd33620d770f00000000000000240000000000000000000000000000383c00000000000000000000000064363dfb000000000005383f000000000000000000000000000000000000000000000000000000000000532a000000000003e2320000383c00000000000000000000000000c097ce7bc90715b34b9f1000000000000000000003e2350000383c00000000000000000000000000c097ce7bc90715b34b9f1000000000000000000003e2380000383c00000000000000000000000000c097ce7bc90715b34b9f1000000000000000000000e5b30000000000000000000000000000000000000000000000022eb9a0853267ec39000000000000e5b4000000000000000000000000000000000000000003de3e7570899859a58eacf1000000000000e5b50000000000000000000000000000000000000000000000000000000064363dfb000000000000e807000000000000000000000000000000000000000000289041ae9c3515732282a4000000000000e80800000000000000000000000000000000000048ba1c953d3c97a283061346333e000000000000e80900000000000000000000000000000000000000000000000000000f78bfebf54e00000000001735e964363e27000000000000000000000000000000000888904ac863400064363dfb0000000000007a5a00000000000000000000000000000000000000000000000000000000000136bd00000000008258d900000000000000000000000000000000000000000000000000000000000000050000000000824f9a0000000000000000000000000000000000000000000000000000000000000002000000000000215000000000000000000000000000000000000000000001209d154b77c34c4e2b93000000000003dfee000000000000000000000000000000000000000000000000000000000000383c000000000003dfef0000000000000000000000000000000000000000000000000de0eef7f7e47c9b000000000005388900000000000000000000000000000000000000000000000000000041d298132e000000000026383200000000000000000000000000000000000000000000000000000000025dd50700000000000535ff00000000000000000000000000000000000000000000000000125f48c7b703ea00000000003bcdd4000000000000000000000000000000000000000000000000000000000000000000000000003bcdd50000000000000000000000000000000000000000000000000de0eef7f7e47c9b00000000001733cb64363e27000000000000000000000000000000000834b83797b0400064363dfb0000000000079494000000000000000000000000000000000000000000000000000000000000005a00000000005e14ad00000000000000000000000000000000000000000000000000000013765feaf000000000005e14ae00000000000000000000000000000000000000000000000000000012f0ebdc250000000000172dbe64363e27000000000000000000000000000000653af6f13fed31000064363dfb000000000062ca5b00000000000000000000000000000000000000000000000013773666d4fb1db1000000000062ca5c000000000000000000000000000000000000000000000000000000009c7110c7000000000003dff9000000000000000000000000000000000000000000000000000000000000383c000000000003ea55000000000000000000000000000000000000000000000000000002743c1772b300000000007cc1f000000000000000000000000000000000000000000000000000000016b29a31bb00000000007cc1f10000000000000000000000000000000000000000000000000000603096836ed0000000000082623a000000000000000000000000000000000000000000000000000000000000002600000000008264a1000000000000000000000000000000000000000000000000000000000000000000000000008264a20000000000000000000000000000000000000000000000000000000000000000000000000082623b0000000000000000000000000000000000000000000000000000000000000049000000000077b37700000000000000000000000000000000000000000000015fed4499039083eb7e00000000008264a300000000000000000000000000000000000000000000000000000000000000000000000000825d520000000000000000000000000000000000000000000000000000000000000012000000000052ea9100000000000000000000000000000000000000000000a294a1a0cd1d6cbbc6a400000000007f2298000000000000000000000000000000000000000000000002074e822eda11d75900000000008264a40000000000000000000000000000000000000000000000000000000000000049000000000082544900000000000000000000000000000000000000000000000000000000000000120000000000172a5464363e2700000000000000000000000000000657a4ca3b1e6e16000064363dfb00000000001c22cb000000000000000000000000000000000000000000009cb049ac684587be9d1d00000000001c27cdfffffffffffffffffffffffffffffffffffffffffffffd80174ad2257a89a48400000000001c2507000000000000000000000000000000000000000000000000000000000000000000000000002cc587000000000000000000000000000000000000000000000000000000000000000200000000008264d9000000000000000000000000000000000000000000000000000000000000000100000000001fb5930000000000000000000000000000000000000000000000000000001386342bbb000000000023237900000000000000000000000000000000000000000000005867ca083cff01300000000000005502ae0000000000000000000000000000000000000000000000000000000154ad472400000000005502af0000000000000000000000000000000000000000000000000e26142a88784e3600000000005502b00000000000000000000000000000000000000000000000000000000064363dfb00000000005506dc000000000000000000000000000000000000000000000000000946f331a9cbe500000000005506dd000000000000000000000000000000000000000000006237eab346d4f7879dda0000000000001f3e00000000000000000000000000000000000000000000000000004194a5f3be680000000000084ea0000000000000000000000000000000000000000000000000000000000000000000000000000d5c8d0000000000000000000000000000000000000000000000000000000000000000000000000001674d000000000000000000000000000000000000000000000000000000000000000000000000004dda400000000000000000000000000000000000000000000000000000000000a7d8de0000000000825b7d00000000000000000000000000000000000000000000000000000000000000000000000000213fc500000000000000000000000000000000000000000000000000000000008e4694000000000052a08200000000000000000000000000000000000000000000000000000000047672cc00000000008264e10000000000000000000000000000000000000000000000000000000000000007000000000019e5b200000000000000000000000000000000000000000000000000000000033a9e4f000000000081d6a4000000000000000000000000000000000000000000000000000000000000003800000000007f7b470000000000000000000000000000000000000000000000000000000000b8b0550000000000824152000000000000000000000000000000000000000000000000000000000000cd01000000000075544d00000000000000000000000000000000000000000000000000000001df4143bd00000000001447330000000000000000000000000000000000000000000000000000000000a390b600000000007a10c5000000000000000000000000000000000000000000000000000000000427e5350000000000577a7b00000000000000000000000000000000000000000000000000000000002b468e0000000000145f010000000000000000000000000000000000000000000000000000000003407333000000000048a9fc000000000000000000000000000000000000000000000000000000000645898800000000007a7df5000000000000000000000000000000000000000000000000000000000791cd63000000000046083400000000000000000000000000000000000000000000000000000778cfb1e4a3000000000082601e000000000000000000000000000000000000000000000000000000000e60633d0000000000235d2b0000000000000000000000000000000000000000000000000000000000000025000000000000219f0000000000000000000000000000000000000000000000000000042013959852000000000082626d000000000000000000000000000000000000000000000000000000000daa267000000000004b058b000000000000000000000000000000000000000000000000000000028c5c43f30000000000059e1f000000000000000000000000000000000000000000000000000000000053cc0200000000000050c300000000000000000000000000000000000000000000000000000000005111ea00000000007516eb0000000000000000000000000000000000000000204fce5e3e25026103d6f12800000000001a5804000000000000000000000000000000000000000000000000000000000000003500000000008254740000000000000000000000000000000000000000000000000000000000e4e1c00000000000190450000000000000000000000000000000000000000000000000000000000000002d00000000005bfba600000000000000000000000000000000000000000000000000000000009cfade0000000000826270000000000000000000000000000000000000000000000000000000000102dde800000000002c9f4c000000000000000000000000000000000000000000000000000000001d22cb480000000000825b8a00000000000000000000000000000000000000000000000000000002700c5d8e0000000000826273000000000000000000000000000000000000000000000000000000000000000000000000005dcf0b0000000000000000000000000000000000000000000000000000000000000058000000000082627400000000000000000000000000000000000000000000000000000000009d818b00000000005d4f57000000000000000000000000000000000000000000000000000000000000003e000000000047b96700000000000000000000000000000000000000000000000000000000011b307d0000000000136576000000000000000000000000000000000000000000000000000000d7fb590c1c000000000008f5ff000000000000000000000000000000000000000000000000000000000000000000000000002aafcc0000000000000000000000000000000000000000000000000000000000447fad000000000081b2360000000000000000000000000000000000000000000000000000000000000004000000000042319e00000000000000000000000000000000000000000000000000000000d1c7a2310000000000825b900000000000000000000000000000000000000000000000000000000023894d9600000000000021d100000000000000000000000000000000000000000000000000000006d2dc20dc0000000000825d98000000000000000000000000000000000000000000000000000000000000003f00000000008264ee00000000000000000000000000000000000000000000000000000000000000000000000000442786000000000000000000000000000000000000000000000000000000000000005e00000000002605e10000000000000000000000000000000000000000000000000000000000000009000000000081d83b0000000000000000000000000000000000000000000000000000000000000038000000000082627a0000000000000000000000000000000000000000000000000003f28cb5d1c82b00000000000c69cc000000000000000000000000000000000000000000000000000000001498f6b7000000000043ab570000000000000000000000000000000000000000000000000000000000101b8a000000000082627d0000000000000000000000000000000000000000000000000000000000000000000000000007797f00000000000000000000000000000000000000000000000000000009f925d01100000000000b0a9b000000000000000000000000000000000000000000000000000000000003e1c700000000007be23d000000000000000000000000000000000000000000000000000000001fe15f6200000000003b2ce5000000000000000000000000000000000000000000000000000000000000cd01000000000081dd590000000000000000000000000000000000000000000000000000000000000029000000000082627f000000000000000000000000000000000000000000000000000000000e009fa70000000000825b97000000000000000000000000000000000000000000000000000000003e6dd13700000000001d1dc000000000000000000000000000000000000000000000000000000000001f0e93000000000026a1cd0000000000000000000000000000000000000000000000000000000010bb833d00000000000b0d02000000000000000000000000000000000000000000000000000000000004f5d6000000000035f71d0000000000000000000000000000000000000000000000000000005fa42c94d00000000000536b1400000000000000000000000000000000000000000000000000000000000000490000000000162489000000000000000000000000000000000000000000000000000000006d6ac542000000000043a93c000000000000000000000000000000000000000000000000000000000000078800000000008264f2000000000000000000000000000000000000000000000000000000001738dd2900000000004d86a50000000000000000000000000000000000000000000000000000020a6ca9dd0000000000008264f4000000000000000000000000000000000000000000000000000000000e009fa700000000000999480000000000000000000000000000000000000000000000000000000001f6d5db00000000003e27040000000000000000000000000000000000000000000000000000000000e28e63000000000054bb4d00000000000000000000000000000000000000000000000000000001c139bbc400000000008264f50000000000000000000000000000000000000000000000000000000000706dea000000000080b23f0000000000000000000000000000000000000000000000000000000004d6299c00000000008264f6000000000000000000000000000000000000000000000000000000003a2bbd2800000000008234a000000000000000000000000000000000000000000000000000000000006df6a6000000000024ea9f00000000000000000000000000000000000000000000000000000000000000510000000000824b68000000000000000000000000000000000000000000000000000000000234e0810000000000633e2f00000000000000000000000000000000000000000000000000000000001f4a2a000000000044619200000000000000000000000000000000000000000000000000000000007194600000000000077c0800000000000000000000000000000000000000000000000000000002261d97690000000000760088000000000000000000000000000000000000000000000000000000000055bee300000000000083300000000000000000000000000000000000000000000000000000000145e9d49400000000007a09870000000000000000000000000000000000000000000000000000000000000000000000000081ebd000000000000000000000000000000000000000000000000000000002288dcc2500000000007e309c000000000000000000000000000000000000000000000000000000000000000000000000003074360000000000000000000000000000000000000000000000000000000006428e1e0000000000825b9f000000000000000000000000000000000000000000000000000000003e6dd13700000000008264fc0000000000000000000000000000000000000000000000000000000000000000000000000082602f00000000000000000000000000000000000000000000000000000000000000160000000000822b1500000000000000000000000000000000000000000000000000000000000c4da5000000000082628a000000000000000000000000000000000000000000000000000000000000000000000000001ea48b000000000000000000000000000000000000000000000000000000000000001a00000000005dc5e4000000000000000000000000000000000000000000000000000000000005eb01000000000082628b00000000000000000000000000000000000000000000000000000000038d7eb20000000000532384ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008264fe0000000000000000000000000000000000000000000000000000000001a7207100000000004a0d620000000000000000000000000000000000000000000000000000000000000000000000000001d3c600000000000000000000000000000000000000000000000000000000000000000000000000359ade000000000000000000000000000000000000000000000000000000000000002500000000008264ff000000000000000000000000000000000000000000000000000000001d258c40000000000030718d0000000000000000000000000000000000000000000000000000000006428e1e00000000006b38f40000000000000000000000000000000000000000000000000000000000445b490000000000826500000000000000000000000000000000000000000000000000000000000000002d0000000000301df20000000000000000000000000000000000000000000000000000000000a822db00000000000040a600000000000000000000000000000000000000000000000000001c3106fdc9d20000000000826501000000000000000000000000000000000000000000000000000000001738dd2900000000003df9cc0000000000000000000000000000000000000000000000000000000000a2c94d000000000011e11600000000000000000000000000000000000000000000000000000000000dfc4b00000000007e292d00000000000000000000000000000000000000000000000000000000023663a600000000001d1ae000000000000000000000000000000000000000000000000000000000001f131f0000000000529e2000000000000000000000000000000000000000000000000000000000000000470000000000824b7100000000000000000000000000000000000000000000000000000000008de44200000000007a07f70000000000000000000000000000000000000000000000000000000000c6b9b800000000003e8399000000000000000000000000000000000000000000000000000000000048fae300000000006d42e000000000000000000000000000000000000000000000000000000000177e1666000000000082134e000000000000000000000000000000000000000000000000000000000000000000000000007ce38800000000000000000000000000000000000000000000000000000000002189e20000000000820b8c0000000000000000000000000000000000000000000000000000000006314ee0000000000081e7b00000000000000000000000000000000000000000000000000000000000000029000000000008c0f9000000000000000000000000000000000000000000000000000000000000004c00000000005e19980000000000000000000000000000000000000000000000000000000004da63ee00000000007f9fa30000000000000000000000000000000000000000000000000000000001312d0000000000008260390000000000000000000000000000000000000000000000000000000023d21fbe00000000001d1dd600000000000000000000000000000000000000000000000000000000001f0e5a00000000000d941c0000000000000000000000000000000000000000000000000000000000c6faf3000000000037d8e70000000000000000000000000000000000000000000000000000000005f5378d0000000000025f94000000000000000000000000000000000000000000000000000000000117b5b4000000000071862d0000000000000000000000000000000000000000000000000000000001682e880000000000575e7300000000000000000000000000000000000000000000000000000000048e13bc0000000000825db0000000000000000000000000000000000000000000000000000000000238f6af00000000007cb92100000000000000000000000000000000000000000000000000000000001627cb000000000082629400000000000000000000000000000000000000000000000000000000000994f500000000008265030000000000000000000000000000000000000000000000000000000000000000000000000064ed3b000000000000000000000000000000000000000000000000000000000000003a000000000012566300000000000000000000000000000000000000000000000000000000035502650000000000822fb500000000000000000000000000000000000000000000000000000000013400990000000000371cba000000000000000000000000000000000000000000000000000000000000000000000000008254940000000000000000000000000000000000000000000000000000000000000000000000000082650400000000000000000000000000000000000000000000000000000000086486fe000000000082650500000000000000000000000000000000000000000000000000000000000000000000000000661941000000000000000000000000000000000000000000000000000000000000dee20000000000821ca4000000000000000000000000000000000000000000000000000000000098ba7e000000000082650600000000000000000000000000000000000000000000000000000000000000070000000000825bae00000000000000000000000000000000000000000000000000000000000c8a8100000000008259810000000000000000000000000000000000000000000000000000000001a533f20000000000211d84000000000000000000000000000000000000000000000000000000000004f5d600000000000049f000000000000000000000000000000000000000000000000000000001804fff2b000000000026060a0000000000000000000000000000000000000000000000000000000037876de800000000001abe4d000000000000000000000000000000000000000000000000000000000d0554ac000000000059676a000000000000000000000000000000000000000000000000000000000000005e00000000000536b2000000000000000000000000000000000000000000000000000000aeff910b1200000000000e68b2000000000000000000000000000000000000000000000000000000000007f0ed00000000004bb0720000000000000000000000000000000000000000000000000000000002fe02fe000000000082492c000000000000000000000000000000000000000000000000000000000000000000000000002db31b000000000000000000000000000000000000000000000000000000000000002f00000000007a08020000000000000000000000000000000000000000000000000000000000a6c22f000000000033544e000000000000000000000000000000000000000000000000000000000000001a0000000000368fb50000000000000000000000000000000000000000000000000000000003c15c1a00000000005502ec0000000000000000000000000000000000000000000000000000000154ad4724000000000082650a000000000000000000000000000000000000000000000000000000000000000000000000002a6e170000000000000000000000000000000000000000000000000000000010c2a6250000000000251260000000000000000000000000000000000000000000000000000000000000000000000000008262a4000000000000000000000000000000000000000000000000000000000010a9ac00000000005635c40000000000000000000000000000000000000000000000000000000002a3443200000000005bc423000000000000000000000000000000000000000000000000000000000026285500000000004427c0000000000000000000000000000000000000000000000000000000000000005e000000000081dd730000000000000000000000000000000000000000000000000000000037de06ca000000000082650b000000000000000000000000000000000000000000000000000000000000000000000000007e2e470000000000000000000000000000000000000000000000000000000000000000000000000082650c000000000000000000000000000000000000000000000000000000000daa267000000000000024ee0000000000000000000000000000000000000000000000000000030366ae227100000000008045e900000000000000000000000000000000000000000000000000000000075873af0000000000824b8100000000000000000000000000000000000000000000000000000000061501b1000000000006906a0000000000000000000000000000000000000000000000000000000000ee103e0000000000824933000000000000000000000000000000000000000000000000000000000000000000000000006bc9c5000000000000000000000000000000000000000000000000000000000000003a000000000082598c00000000000000000000000000000000000000000000000000000000000994f5000000000019507200000000000000000000000000000000000000000000000000000012d91cf57f00000000000415b60000000000000000000000000000000000000000000000000000000000000000000000000082501f0000000000000000000000000000000000000000000000000000000003151b3000000000007a08080000000000000000000000000000000000000000000000000000000000ac87f500000000000413dd0000000000000000000000000000000000000000000000000000000000000000000000000082598e000000000000000000000000000000000000000000000000000000000000001600000000001b3d4a0000000000000000000000000000000000000000000000000000006c954a38c0000000000012d74d00000000000000000000000000000000000000000000000000000000154dc9a100000000001d1afe00000000000000000000000000000000000000000000000000000000001f11390000000000211d95000000000000000000000000000000000000000000000000000000000003e1c700000000001365c864363dfb00000000001ad778f53cc6f64bdc000000000000000000d7fb590c1c0000000000138c09000000000000000000000002b06a18a2968b9798d28d0621496a676cc00ee49a0000000000138c0a00000000000000000000000000000000000000a5b904cf3f50a9fb8bfc5d0ace000000000080f093000000000000000000000000000000000000000000000000000006b09aece2dc000000000053449a00000000000000000000000000000000000000000000000df0b2473deda3b73c000000000080ee7e00000000000000000000000000000000000000000000000df0b2473deda3b73c000000000080ee7f000000000000000000000000000000000000000000000000000037287bb9c68c000000000081337d0000000000000000000000000000000000000000000000000000000007b0091f0000000000649e990000000000000000000000000000000000000000000000000000000007b0091f00000000002ff2aa000000000000000000000000000000000000000000000000000006b09aece2dc00000000001a6671000000000000000000000000000000000000000000000000000037287bb9c68c000000000022f40a000000000000000000000000000000000000000000024b36903bc7ee818787c800000000001e7c870000000000000000000000000000000000000000001af4ff4ebb7dd4abe11b6800000000001eb1db0000000000000000000000000000000000000000000026f683bc4df2b3a66c6000000000008262c100000000000000000000000000000000000000000000000000290334f34980000000000000513d9d00000000000000000000000000000000000000000000000000000000000000000000000000246ee0000000000000000000000000000000000000000000004219a208b499fa2648fd00000000001eb46a00000000000000000000000000000000000000000000b5057d581bca740396d000000000001eb46cffffffffffffffffffffffffffffffffffffffffffffe8c09ee6402ad072fb54000000000076ade6000000000000000000000000000000000000000000000000f56c779bb61e6308000000000039fd31000000000000000000000000000000000000000000000000007857b6b89d8e42000000000060da5e000000000000000000000000000000000000000000000000000000000000000000000000000039e6000000000000000000000000000000000000000000000000000000000001dab500000000000039e8000000000000000000000000000000000000000000000000000000000001dab50000000000826525000000000000000000000000000000000000000000000000000000000000000000000000008257200000000000000000000000000000000000000000000000000000000000000001000000000032fd87000000000000000000000000000000000000000000000000000000000000000000000000008259ad0000000000000000000000000000000000000000000000000000000000000002000000000081aae50000000000000000000000001e144b9b431926eeeab6146c1382e2ca672dd67c000000000082653700000000000000000000000000000000000000000000000000000000000000020000000000002156000000000000000000000000000000000000000000000292a6dafe2ec4c484a3000000000003420a000000000000000000000000000000000000000000000000000000000000000000000000004608840000000000000000000000000000000000000000000000eed99f2838b2a9e17700000000001c238a00000000000000000000000000000000000000000000000cadd86dac27eb7001000000000054a6d400000000000000000000000000000000000000000000002df6a64a0ea7cc512b00000000000021a3000000000000000000000000000000000000000000000083d36cefce65cd6ced000000000013664a00000000000000000000000000000000000000000000001ad778f53cc6f64bdc00000000007973270000000000000000000000000000000000000000000000000000000000000000000000000082505700000000000000000000000000000000000000000000000000206cdaa9cdeb8000000000000023f7000000000000000000000000000000000000000000000000ddb00a376882239b000000000000e6ba0000000000000000000000000000000000000000000000022eb9a0853267ec3900000000007b31cf000000000000000000000000000000000000000000000000001e112e791ff29e0000000000547fa700000000000000000000000000000000000000000000000037892834cac8416d0000000000009e8e0000000000000000000000000000000000000000000000001732cae65919879100000000002dd059000000000000000000000000000000000000000000000000000000000000000000000000005dc88d00000000000000000000000000000000000000000000000000000000000000410000000000246f1900000000000000000000000000000000000000000000000367d349178c49ce93000000000000e8fa0000000000000000000000000000000000000000000000001c24fd7fcd79e7b000000000005cb6d90000000000000000000000000000000000000000000000000000000000000000000000000000215700000000000000000000000000000000000000000000002dbae41b21f2577d71000000000054bbaf000000000000000000000000000000000000000000000000d6b2ad78f665c3250000000000826310000000000000000000000000000000000000000000000000000000000000001900000000000024f1000000000000000000000000000000000000000000000000b009dfbe1f0c873500000000005503380000000000000000000000000000000000000000000000000e26142a88784e3600000000000024f20000000000000000000000000000000000000000000000604f67cbf343ab63ac0000000000825e43000000000000000000000000000000000000000000000000000000000000000000000000005a974b000000000000000000000000000000000000000000000000000000000ba6e08100000000005a974c000000000000000000000000000000000000000000000053cc526f7f6716988400000000000040fe00000000000000000000000000000000000000000000035f798ec2aeec63af9b00000000005e15ae00000000000000000000000000000000000000000000000000000013765feaf000000000000040ff000000000000000000000000000000000000000000000355dd849816815d2d71000000000063423900000000000000000000000000000000000000000000023c99e13804769c63b600000000005e15af000000000000000000000000000000000000000000000000000000138ef125f800000000002fc8fb0000000000000000000000000000000000000000000035e392f6087438029d6000000000004f7bdf000000000000000000000000000000000000000000000000000000000c35dbfa000000000000410000000000000000000000000000000000000000000000000000001ac6a7fb1bd300000000000b4f8500000000000000000000000000000000000000000000000220a56828f21d790b000000000062cb65000000000000000000000000000000000000000000000000000000009c7110c7000000000052ebc3000000000000000000000000000000000000000000009cffea1947d748dcd08b00000000005e15b000000000000000000000000000000000000000000000000000000012f0ebdc2500000000000b4f8600000000000000000000000000000000000000000000000c676161174c6d80ba00000000007cc2b60000000000000000000000000000000000000000000000000000603096836ed000000000007cc2b70000000000000000000000000000000000000000000000000000603096836ed000000000002fc8fc000000000000000000000000000000000000000000006f97038be93aa59b1f8a000000000052ebc4000000000000000000000000000000000000000000000000000000e5d172c476000000000054c33d0000000000000000000000000000000000000000000000bf8a850202f20ab59600000000002fc8fd000000000000000000000000000000000000000000000000000000231bee6107000000000030075f000000000000000000000000000000000000000000000004ad2e6702482371f0000000000063423a00000000000000000000000000000000000000000000000000000002744013e400000000005a9752000000000000000000000000000000000000000000000000000000000ba6e081000000000052ebc500000000000000000000000000000000000000000000a294a1a0cd1d6cbbc6a4000000000000410100000000000000000000000000000000000000000000000000001c3106fdc9d200000000000b4f8700000000000000000000000000000000000000000000000c581a2a219240431f00000000005a9753000000000000000000000000000000000000000000000053cc526f7f6716988400000000007cc2b800000000000000000000000000000000000000000000000000000016b29a31bb00000000004f7be000000000000000000000000000000000000000000000000008cced662252a75400000000003007600000000000000000000000000000000000000000000039a582640956d5559ac8000000000062cb6600000000000000000000000000000000000000000000000013773666d4fb1db10000000000300766000000000000000000000000000000000000000000000004ad2e6702482371f000000000003007670000000000000000000000000000000000000000000039a582640956d5559ac8000000000052ebc600000000000000000000000000000000000000000000b009f78c3c4382452aba000000000052ebc7000000000000000000000000000000000000000000009cffea1947d748dcd08b000000000052ebc8000000000000000000000000000000000000000000000000000000e5d172c476000000000052ebc9000000000000000000000000000000000000000000016e034eba5aa2c5adea13000000000053452d000000000000000000000000000000000000000000000051195470f56c4f02ee00000000001eb50f00000000000000000000000000000000000000000000b5057d581bca740388ee00000000001eb510000000000000000000000000000000000000000000002b924b6031dc0396887c00000000001eb5110000000000000000000000000000000000000000000037254fbabec0354f8b8f0000000000826548000000000000000000000000000000000000000000000000000000000000000000000000001eb7e2000000000000000000000000000000000000000000000beaa356ee1ffed588ab00000000005f100c00000000000000000000000000000000000000000000000410d586a20a4c0000000000000023185700000000000000000000000000000000000000000000495aa07cca1caa86026300000000002332300000000000000000000000000000000000000000000017a3718b4be7af5ea21b000000000082654a0000000000000000000000000000000000000000000000000000000000000000000000000082654b0000000000000000000000000000000000000000000000000000000000000000000000000082654c0000000000000000000000000000000000000000000000000000000000000000000000000082654d000000000000000000000000000000000000000000000000000000000000000000000000002332310000000000000000000000000000000000000000000008460157275de3c77cc800000000007643f30000000000000000000000000000000000000000000000000000000000000000000000000082654e0000000000000000000000000000000000000000000000000000000000000000000000000082654f00000000000000000000000000000000000000000000000000000000000000000000000000826557000000000000000000000000000000000000000000000000000000000000000c00000000000b4f8a00000000000000000000000000000000000000000000000c676161174c6d80ba0000000000826558000000000000000000000000000000000000000000000000000000000000000c00000000007fa90d000000000000000000000000000000000000000000000258000000000000022f0000000000817966000000020000000064363dfbbd857ed6015781d666fcf6f0e4fc1847ca301213000000000000410400000000000000000000000000000000000000000000000008f6cb239ded15ad000000000000410500000000000000000000000000000000000000000000000000001ac6a7fb1bd30000000000004106000000000000000000000000000000000000000000000355dd849816815d2d710000000000004107000000000000000000000000000000000000000000000000097349a827a312e1000000000082655a0000000000000000000000000000000000000000000000000000000000000000000000000082655c0000000000000000000000000000000000000000000000000000000000000000000000000019e9430000000000000000000000000000000000000000000000000000000000000000000000000013b4e6000000000000000000000000000000000000000000000000000001daff0384bc000000000023030e000000000000000000000000000000000000000000000000000000000000000000000000001aa07d000000000000000000000000000000000000000000000000000000000000000000000000000771f5000000000000000000000000000000000000000000000000000000000000000000000000001a672800000000000000000000000000000000000000000000000000087e5db4d062bd0000000000231319000000000000000000000000000000000000000000000000000000000000000000000000006b2276000000000000000000000000000000000000000000000000000001b8e3a84faf0000000000823a0200000000000000000000000000000000000000000000000000000000000000000000000000177ab600000000000000000000000000000000000000000000000000001605fc4ce38300000000002307950000000000000000000000000000000000000000000000000000000000000000000000000054a70a00000000000000000000000000000000000000000000002df6a64a0ea7cc512b000000000054a70b00000000000000000000000000000000000000000009fbf38c74a42b70e765e2000000000054a70c0000000000000000000000000000000000000000000000000000000064363dfb000000000054ba210000000000000000000000000000000000000000014c50447167d420e19b2176000000000054ba2200000000000000000000000000000000000000432a18b7079e386d59b9649bae00000000001b3e710000000000000000000000000000000000000000000000000000006c954a38c000000000001cb83900000000000000000000000000000000000000000000447ce3dffd6b1c4cdf8900000000001cb83a000000000000000000000000000000000000000000000038481c6443b4c0ad9b00000000007840100000000000000000000000000000000000000000000000000000000000000000000000000054e670000000000000000000000000000000000000000000000000000000000000000000000000008213b80000000000000000000000000000000000000000000000000000000000000000000000000054c3730000000000000000000000000000000000000000000000bf8a850202f20ab59600000000005503610000000000000000000000000000000000000000000000000000000000000000000000000054a71100000000000000000000000000000000000000000009fbf38c74a42b70e765e200000000006342590000000000000000000000000000000000000000000000000000000000000000000000000054e42d000000000000000000000000000000000000000000000000000000000000000000000000006b30e40000000000000000000000000000000000000000000000000000000000000000000000000055b787000000000000000000000000000000000000000000000000000000000000000000000000006d3f120000000000000000000000000000000000000000000000000000000000000000000000000054bc44000000000000000000000000000000000000000000002c6f71127755853922e600000000006a329e000000000000000000000000000000000000000000000000000000000014c98e00000000004ce5e000000000000f424000000000f12d17ae00000000000000000000020a6ca9dd000000000000553f7e000000000000000000000000000000000000000000002c6bf44fa0e3d2ecc23a0000000000553f80000000000000000000000000000000000000000000000000d6a742f5de3bdfb400000000000b4fa900000000000000000000000000000000000000000000000220a56828f21d790b00000000000b4faa00000000000000000000000000000000000000000000000c581a2a219240431f000000000047dc2b00000000000000000000000000000000000000000000000000000000000007d9000000000082657a000000000000000000000000000000000000000000000000000d7df30cc7848f000000000082657b0000000000000000000000000000000000000000000000000000000fe9ef6e4100000000005e15f600000000000000000000000000000000000000000000000452a8f765c9f728fb00000000008125020000000000000000000000008aaaf6e6167825829ab29f260f246afe742fb2430000000000812503000000000000000000000000000000000000000000000000011c37937e080000000000000000266a00000000000000000000000000000000000000000000001e5493eca2dab9df5e0000000000826583d82ca3b18d89bb6022e1547d6e4bfd9489b2a9c994579bdaac61c72c30c4a6e0000000000082658bacde630a7fa322a76c2490a548e3bc1fa710b50e1bdf455fd3b1fb6d770cce10000000000082658d73686d696e742e7a6b00000000000000000000000000000000000000000000120000000000077aa7000000000000000000000000000000000000000000006f38d83306d38b1ba80000000000002fc94600000000000000000000000000000000000000000000000000bf80c88a05ab2e00000000002fc947000000000000000000000000000000000000000000000000000000231bee610700000000002fc9480000000000000000000000000000000000000000000035e392f6087438029d6000000000002fc94900000000000000000000000000000000000000000000000002b7f3e97ba4f8ba00000000002ff3600000000000000000000000000000000000000000000000000007dbd9e789125200000000006909e400000000000000000000000000000000000000000000021a71b8e3b5cbe7dd8000000000004d77c000000000000000000000000000000000000000000000000002a2f8f1255067f400000000004d77c100000000000000000000000000000000000000000000000002a2f8f1255067f400000000004d77c200000000000000000000000000000000000000000000000000000000000006d8000000000054bc5c0000000000000000000000000000000000000000000000000000000064363dfb0000000000553fa300000000000000000000000000000000000000000000000000000000000006a1000000000054bc5e0000000000000000000000000000000000000000000000000000000064363dfb00000000005541f6000000000000000000000000000000000000000000047600ddf32e866e941e9700000000008265a70000000000000000000000000000000000000000000000000000000000000000000000000054bc5f0000000000000000000000000000000000000000000000000000000064363dfb00000000008265ac000000000000000000000000000000000000000000000000000000000000000200000000008265ad000000000000000000000000000000000000000000000000000000000000000000000000002305470000000000000000000000000000000000000000000153cf34e2d2fcd1f6026300000000001ebad60000000000000000000000000000000000000000000000000000000064363dfb0000000000231896000000000000000000000000000000000000000000004b6d262b1c9e479fcac1000000000022ab7d0000000000000000000000000000000000000000000000000000000000000cfc0000000000231d710000000000000000000000000000000000000000000000000000000064363dfb00000000002342b2000000000000000000000000000000000000057450909be535381bbd41ecfa4d000000000000216f00000000000000000000000000000000000000000001209d154b77c34c4e2b93000000000000217000000000000000000000000000000000000000000000002dbae41b21f2577d7100000000000021710000000000000000000000000000000000000000000000000000000064363dfb00000000000021d400000000000000000000000000000000000000145b677d2349437baa516ea9f800000000000021d500000000000000000000000000000000000000000329445fb9a36c2f6dcfd3c100000000000024f4000000000000000000000000000000000000000000000000000fcc14c4ca760b000000000000e708000000000000000000000000000000000000000003de3e7570899859a58eacf1000000000007960e000000000000000000000000000000000000000000000000000000000225510000000000004608fb00000000000000000000000000000000000000000000000002a3ecd5bc592a3500000000004608fe00000000000000000000000000000000000000000000000000000778cfb1e4a300000000004608ff0000000000000000000000000000000000000000000000eed99f2838b2a9e17700000000004609000000000000000000000000000000000000000000000000000000000064363dfb000000000054801e0000000000000000000000000000000000000000000000002e954dc08c97ef30000000000054801f000000000000000000000000000000000000000005caef3c482c1172a902ec5b00000000004d77de00000000000000000000000000000000000000000000000002a2f8f1255067f4000000000082272100000000000000000000000000000000000000000000000000000000000000000000000000822be3000000000000000000000000000000000000000000000000000000000000000000000000008265c50000000000000000000000000000000000000000005be8b1658c6b810cb0d95200000000007cc9fb0000000000000000000000000000000043b55eb3910fa136fa77720066370d1800000000007cc3320000000000000000000000000000000000000000000000000000603096836ed000000000007ccbe5fffffffffffffffffffffffffffffffffffffffffffffffffffa2057e53d011700000000007cc334000000000000000000000000000000000000000000000000002321d435e354bb00000000000024f50000000000000000000000000000000000000000000000000106dabc0aff69c200000000000024fa64363dfb0000000000604f67cbf343ab63ac0000000000000000030366ae227100000000000026750000000000000000000000032b2479deaf1a557ca4d19f9e4330657016335a93000000000000267600000000000000000000000000000000000000bfd1222b23e5abf163f6d3acaa00000000000024fb0000000000000000000000000000000000012235bbc56b6a41077b83752b6c5600000000001460340000000000000000000000000000000000000000000000000000000000000000000000000017b32c00000000000000000000000000000000000000000000000000019e0e9265555f000000000025263f0000000000000000000000000000000000000000000000000000000000000000000000000081ec57000000000000000000000000000000000000000000000000000000000000000000000000006342ac0000000000000000000000000000000000000000000000000000009b2b3ebfb200000000006342ad00000000000000000000000000000000000000000000023c99e13804769c63b600000000006342ae00000000000000000000000000000000000000000000000000000002744013e400000000006342af00000000000000000000000000000000000000000000000000257c7bbc983ce90000000000649f5b000000000000000000000000000000000000000000000000000000001c6f864c00000000006e321b000000000000000000000000000000000000000000000002b2dd16ff127b8ab400000000008265ce000000000000000000000000000000000000000000000000000000000000000000000000005df095000000000000000000000000000000000000000000000000000000000000000400000000002fc958000000000000000000000000000000000000000000006f97038be93aa59b1f8a00000000000021ab00000000000000000000000000000000000000000000000001751e95ff44ff7000000000000021b2000000000000000000000000000000000000000000000000000004201395985200000000000021b3000000000000000000000000000000000000000000000083d36cefce65cd6ced00000000000021b40000000000000000000000000000000000000000000000000000000064363dfb00000000000021da0000000000000000000000000000000000000000000000004ccba03dfe89db6200000000000021db000000000000000000000000000000000000000009bbc288832710c24ef15d2900000000000021dc0000000000000000000000000000000000000000000000000000035ae28f6f060000000000002408000000000000000000000000000000000000000000000074234f6ae41eada22400000000000260880000000000000000000000000000000000000000000000000000000000000002000000000002608f0000000000000000000000000000000000000000000000000000035ae28f6f060000000000002fbd000000000000000000000000000000000000000000000074234f6ae41eada224000000000002609000000000000000000000000000000000000000000000000000000000000000000000000000002fc30000000000000000000000000000000000000000000000000000035ae28f6f060000000000026091000000000000000000000000000000000000000000000074234f6ae41eada2240000000000002fc90000000000000000000000000000000000000000000000000000000000002943000000000073ada70000000000000000000000000000000000000000000031a375ee981463164f7000000000008265ed0000000000000000000000000000000000000000000000000a01038c9240920000000000008263bb000000000000000000000000000000000000000000000000024d57875290d000000000000081de9f0000000000000000000000000000000000000000000000013ab635af2363c000000000000081dea10000000000000000000000000000000000000000000000013ab635af2363c00000000000007733d30000000000000000000000000000000000000000000000a028340e28f0abed100000000000825eda0000000000000000000000000000000000000000000000002df81d6691789fb2000000000082556b000000000000000000000000000000000000000000000000056dec66b09257e40000000000825c780000000000000000000000000000000000000000000000003328b944c40000000000000000788b650000000000000000000000000000000000000000000000000cc94f7daf07b00000000000008263c000000000000000000000000000000000000000000000000011b9cc6d07f07b00000000000081b36d00000000000000000000000000000000000000000000000000da896b90658000000000000078eeb0000000000000000000000000000000000000000000000000003b1ee6bdb5100000000000008265f2000000000000000000000000000000000000000000000000285a032d3e9d8a00000000000078eeb1000000000000000000000000000000000000000000000000003b1ee6bdb51000000000000082556e000000000000000000000000000000000000000000000000056dec66b09257e40000000000825ee200000000000000000000000000000000000000000000000fe7c9cdba96bc4000000000000082405b0000000000000000000000000000000000000000000000003dc9bf42bd78c000000000000077ad47000000000000000000000000000000000000000000000003b98532106d9874eb0000000000824549000000000000000000000000000000000000000000000000015b1abd3afce1800000000000821b69000000000000000000000000000000000000000000000007bd76d18d4c83270000000000008265f500000000000000000000000000000000000000000000000000989959c11095800000000000825ee90000000000000000000000000000000000000000000000006e590313a497e000000000000081deaa00000000000000000000000000000000000000000000000118dc2ae7ab8b200000000000008265f90000000000000000000000000000000000000000000000010d6dea21e754f00000000000008265fb0000000000000000000000000000000000000000000000000a01038c9240920000000000007733eb0000000000000000000000000000000000000000000000a028340e28f0abed100000000000826601000000000000000000000000000000000000000000000000285a032d3e9d8a00000000000081deb500000000000000000000000000000000000000000000000118dc2ae7ab8b20000000000000825c96000000000000000000000000000000000000000000000001f3939d1e4eda10000000000000825ef600000000000000000000000000000000000000000000000004c091e8a1042000000000000082406c0000000000000000000000000000000000000000000000003dc9bf42bd78c00000000000007fb935000000000000000000000000000000000000000000000000017e4dcd9eea31000000000000825ca10000000000000000000000000000000000000000000000003328b944c4000000000000000082660700000000000000000000000000000000000000000000000000989959c11095800000000000826608000000000000000000000000000000000000000000000000021faf62444e350000000000007b485b0000000000000000000000000000000000000000000000017127a36ab18391340000000000825f040000000000000000000000000000000000000000000000000484f0bb39fdc000000000000081b38b00000000000000000000000000000000000000000000000000da896b906580000000000000825f050000000000000000000000000000000000000000000000002df81d6691789fb200000000008263e6000000000000000000000000000000000000000000000000024d57875290d00000000000007a0fd400000000000000000000000000000000000000000000000581293e53128c7000000000000082536f0000000000000000000000000000000000000000000000002bd9d5d32f9feb0000000000008253700000000000000000000000000000000000000000000000002bd9d5d32f9feb0000000000007fb93d000000000000000000000000000000000000000000000000017e4dcd9eea31000000000000825f0900000000000000000000000000000000000000000000000004c091e8a10420000000000000821b77000000000000000000000000000000000000000000000007bd76d18d4c83270000000000007c163e0000000000000000000000000000000000000000000000011c03ac0da5ed24000000000000825f0d0000000000000000000000000000000000000000000000006e590313a497e00000000000007a0fe000000000000000000000000000000000000000000000000581293e53128c700000000000007de4e100000000000000000000000000000000000000000000000012fe36476ac49d6a000000000081d6f00000000000000000000000000000000000000000000000009a3bfa8f91c98000000000000073ada90000000000000000000000000000000000000000000031a375ee981463164f7000000000007a3f22000000000000000000000000000000000000000000000000bf709da72e6fb00000000000007b485f0000000000000000000000000000000000000000000000017127a36ab183913400000000007de4e500000000000000000000000000000000000000000000000012fe36476ac49d6a0000000000825f1b0000000000000000000000000000000000000000000000000484f0bb39fdc000000000000082384800000000000000000000000000000000000000000000000008a7885b80e510000000000000825f1c00000000000000000000000000000000000000000000000fe7c9cdba96bc4000000000000082384e00000000000000000000000000000000000000000000000008a7885b80e51000000000000082661d0000000000000000000000000000000000000000000000003dfd0c84a94a0180000000000082661e0000000000000000000000000000000000000000000000003dfd0c84a94a018000000000007c16740000000000000000000000000000000000000000000000011c03ac0da5ed240000000000008266220000000000000000000000000000000000000000000000010d6dea21e754f000000000000082456d000000000000000000000000000000000000000000000000015b1abd3afce1800000000000825cc0000000000000000000000000000000000000000000000001f3939d1e4eda1000000000000082640400000000000000000000000000000000000000000000000011b9cc6d07f07b0000000000007a3f36000000000000000000000000000000000000000000000000bf709da72e6fb0000000000000788ba00000000000000000000000000000000000000000000000000cc94f7daf07b0000000000000826627000000000000000000000000000000000000000000000000021faf62444e3500000000000081d6f60000000000000000000000000000000000000000000000009a3bfa8f91c98000000000000077ad97000000000000000000000000000000000000000000000003b98532106d9874eb00000000004f7cab000000000000000000000000000000000000000000000000000000000c35dbfa00000000004f7cac00000000000000000000000000000000000000000000000008cced662252a754000000000055401100000000000000000000000000000000000000000000000000000001c139b38400000000005540120000000000000000000000000000000000000000000000003789272cfac7ebeb00000000007ef0ce0000000000000000000000000000000000000000000001bc00000000000001ad00000000007efc1a000000000000000000000000000000000000000000000000000000000000000800000000001c23fe00000000000000000000000000000000000000000000029b8c5a73dceec8dc9500000000001c23ff64363dfb00000000000cadd86dac27eb7001000000009cb049ac684587be9d1d00000000001c27130000000000000000000000000000000002e68fd71261410edf4c4bd43f2fc85300000000001c271400000000000000000000000000008fb3c4899df802cc6a71d2850c21394567d300000000001c24000000000000000000000000000007c2ab0dbcfd70322c01f28d3b620e911a4d1d00000000003a6c06000000000000000000000000000000000000000000000000000000000000027b000000000039fe2600000000000000000000000000000000000000000000014c08624d700b68ccf700000000001c29a20000000000000000000000000000000000000000000000047b409a74d8d04d9c00000000006e1ac60000000000000000000000000000000000000000000000030000000000000002000000000082457700000000000000000000000000000000000000000000000000000000000000000000000000825f30000000000000000000000000000000000000000000000000000000000000000000000000006e7139000000020000000064363dfb0e8e857d9874c31dc1236a8cf97ae66e2549726b00000000007851c1000000020000000064363dfbd820e2750ae3d163882d8a18bde16c0665a2a43e00000000003a012500000000000000000000000000000000000000000000a650854ecfc08cec427000000000003a01260000000000000000000000000000000000000000000000028904b30b599b541200000000003a6c0d000000000000000000000000000000000000000000000005cac75b5eea3da72800000000003a6c0e00000000000000000000000000000000000000000000034431ec79a94feb751500000000003b16010000000000000000000000000000000000000000000000e346d1c5a8f23f3fc500000000003b19ed00000000000000000000000000000000000000000000000002c8dbf0e3270d1c000000000060dcae00000000000000000000000000000000000000000000000000012297c2e81665000000000060dcaf00000000000000000000000000000000000000000000003d212dfbd575591c4e000000000039c1de0000000000000000000000000000000000000000000000000000000064363dfb00000000003a015e0000000000000000000000000000000000000000000000000000834d504bfee4000000000039feb900000000000000000000000000000000000000000000014c08624d700b68ccf7000000000039c6b20000000000000000000000000000000000000000000000000000000064363dfb00000000003a06ee00000000000000000000000000000000000000000000000030fa89443898b14a000000000039feba000000000000000000000000000000000000000000000000007857b6b89d8e4200000000001b4443000000000000000000000000000000000000000000000000000000000000014c00000000004d88070000000000000000000000000000000000000000000000000000020a6ca9dd00000000000024713f64363dfb00000000000367d349178c49ce93000000004219a208b499fa2648fd00000000002793ab0000000000000000000000000000000000f839e12d33b59818ef2c75ad6cb62600000000002793ac00000000000000000000000000015b276619b7e44b88581c3b3ec8c73105dbdd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aac0000001f00000000000000000000000000000000000000000000800b0000000000000000000000000000000000000000000000000000000064363dfb0c799eec0c8269e6f66433183bf6c37f7e2234fad4e8619a9372c537e1919cc9000100000000000000000000000000000000000000008001c03b33a8add9c7d31e3233f60e0c693b42d934fb0d3f52bddab5333ea0e279240000000000000000000000000000000000000000000000000000000000000001000100010000000000000000000000000000000000008001f7f4833dc97c132294428efeec422636ce1c239bce5bf02e636880857dcd3e7e0000000000000000000000000000000000000000000000000000000000000001000100020000000000000000000000000000000000008001975be6534935da63cb520e30c8a9674feb305536e7cbae0736e1c5dc31145c47000000000000000000000000000000000000000000000000000000000000000100010003000000000000000000000000000000000000800159f59282ad1c7590cb1526beffcda45a315accdbdcdb0a5b7bde54b03ae7fb75000000000000000000000000000000000000000000000000000000000000000100010004000000000000000000000000000000000000800171546ea868c52cba8983fe98c452f2f4048163ebc93f62fdb24bfedc4ed986a600000000000000000000000000000000000000000000000000000000000000010001004a0000000000000000000000000000000000008008000000000000000000000000000000000000000000000000000000000000800af872dd3e6a02ebeda4ba3deafc051cd84f7589d62ebd8e7fbcf7c73ea51c9dca0001007c00000000000000000000000000000000000080012963987791446a9a1058ac351feb16420deac2b985d28e115eca5f10dce666b400000000000000000000000000000000000000000000000000000000000000010001007d00000000000000000000000000000000000080015cd3a005f0904bca3af40f994d5de14e58d2315bb5422bca81c1e742857a510500000000000000000000000000000000000000000000000000000000000000010001007e0000000000000000000000000000000000008001fba597fd840795242426cb836d79b47b73bfa4a0aeeed075ca8b5a6e0640080800000000000000000000000000000000000000000000000000000000000000010001007f00000000000000000000000000000000000080017c6e5a48c6fc660047c525a4604536863abccddf9ef782a2caefaf8a539f4eef0000000000000000000000000000000000000000000000000000000000000001000100af0000000000000000000000000000000000008001e00c0902f17bebd8dcb0f957c663c2ebed77e035e56eeef005120598a37408df0000000000000000000000000000000000000000000000000000000000000001000100b00000000000000000000000000000000000008001c8fab4d4a01713e89a1e1f88ccd60656025137cf1bb270d9a94a1f13c7bd40e00000000000000000000000000000000000000000000000000000000000000001000100b100000000000000000000000000000000000080011eddcd8a2b51a7cae7f21f7aeda4415a7eccf7b927f4a5faaad03a67317fa3ff0000000000000000000000000000000000000000000000000000000000000001000100b200000000000000000000000000000000000080014f624f9bef0b037e57c770f7d6f52bbab01dc8963c42ddb9a0df431c2b7ddc080000000000000000000000000000000000000000000000000000000000000001000100b300000000000000000000000000000000000080016dc40a41bc043fea35c416748c077c040b8d06c32e2b526915d2c9b6631fe8b80000000000000000000000000000000000000000000000000000000000000001000100e400000000000000000000000000000000000080019239609296398f27dcf3a37832dfd9e1ae6fd027a7295c28e706b094dd3c2d260000000000000000000000000000000000000000000000000000000000000001000100e50000000000000000000000000000000000008001f77444a11c97a6ef1f5b30e03bf54987fc3130dc434183caf5ba83433adfa4910000000000000000000000000000000000000000000000000000000000000001000101380000000000000000000000000000000000008001770985e53debc8d564ca5b526f481d70a6923f54d101f8536d39052ea6a73f52000000000000000000000000000000000000000000000000000000000000000100010139000000000000000000000000000000000000800154b2ad76d78ddb6e0eda879d19e5f6d8ef664b079279ff4d5a7ccfaa237da4b300000000000000000000000000000000000000000000000000000000000000010001013a00000000000000000000000000000000000080015c038eac451eb63f8228043052e2da8f6b179cc1037853ea383dcef9f783e18d00000000000000000000000000000000000000000000000000000000000000010001016200000000000000000000000000000000000080011059b4af132470b41a8cbbe00bf8cec579af3d2b92e3eb53f3f40c0170534e0f0000000000000000000000000000000000000000000000000000000000000001000101630000000000000000000000000000000000008001039b3db807b4064349c2eeae9505c8feabb6cd6df246de52fcc5224daca8dc5b00000000000000000000000000000000000000000000000000000000000000010001016400000000000000000000000000000000000080016ecc8fe04ac2ec406e6cc4dda464e527314faf6b6820bfa23b1d0890187cdffb00000000000000000000000000000000000000000000000000000000000000010001017c0000000000000000000000000000000000008008000000000000000000000000000000000000000000000000000000000000800aafa525a5601ad6b13b4af46ee182408bdf274fff952906d8e96384295da873f8000101a7000000000000000000000000000000000000800800000000000000000000000011f943b2c77b743ab90f4a0ae7d5a4e7fca3e102c0529a669e67a5b046aa1953a8cb653709c50fd578d44458697057bd9afcab7f000101ae00000000000000000000000000000000000080010069271e837be755eb1acd27f8bda5f7e70ce9a7f3282f08bbd83466ba9905630000000000000000000000000000000000000000000000000000000000000001000101af0000000000000000000000000000000000008001f4cce52bae043ef682e0205cca5506f68691acaaa2a1ca9eb1377ad7e58870040000000000000000000000000000000000000000000000000000000000000001000101b00000000000000000000000000000000000008001869fc245dcc1222f3de063ef076585c13e7b7da9e1aa603649e0c67f12d9d3640000000000000000000000000000000000000000000000000000000000000001000101b10000000000000000000000000000000000008001ac5ef41f6c56d8fe802391ebf021fa8b4c3eff8e8f1465ecf8f6fa77f7f4c3640000000000000000000000000000000000000000000000000000000000000001000101e900000000000000000000000000000000000080014cd602db8143a019049a222b0f72d9c0174891ee29f52c82b71059d613ca131e000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000386c0960f908cd937b3f1ede7c1aeefe72d26de8437582712400000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000000000000000000000000000000000000000000000000000000000386c0960f9e167792774202aa62eece5e445327f35cec4572200000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000000000000000000000000000000004c11a2ccc14afdbcabcc441b61ac0b036e30722c7d763f3cc2a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000c4b2010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x63335c163', + maxPriorityFeePerGas: '0x12a05f200', + nonce: '0x7349', + r: '0x97ade2e1fe48c2c35194fbb64becbe062f0db4efb96dfd12e578d35a034b8d98', + s: '0x55ac6721ff4947496e861c50990600dd8c0d108d848c6cd84c0c0745a4f09f58', + to: '0x3db52ce065f728011ac6732222270b3f2360d919', + transactionIndex: '0xc', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x133d3eaae97b599d7d7d3538b81c0b393bd00620', + gas: '0x5208', + gasPrice: '0x595e276a3', + hash: '0x7aa9ab138d57ba3ca97edde17570ec90bad03e5c0e2e39ef6f2d57b06906e947', + input: '0x', + nonce: '0xed', + r: '0x86b3a704ae340159752e67577fe3ddada1e797fc1b73108377f42ef6f33d3406', + s: '0x6cc32eba9bb9d489399e4c91a9d08225462de2235e12652b1f9474fe67e479d9', + to: '0xcbd6832ebc203e49e2b771897067fce3c58575ac', + transactionIndex: '0xd', + type: '0x0', + v: '0x25', + value: '0xebba65a5bc3344', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x2b6ad3b0a4ad782a553fe9ae179219f877bd0c47', + gas: '0x5208', + gasPrice: '0x57ae1ff95', + hash: '0x0aa9988e0a851495beb7ea8d0f48e30042167dd98d932cf32535ea60c7c39e2b', + input: '0x', + maxFeePerGas: '0x57ae1ff95', + maxPriorityFeePerGas: '0x57ae1ff95', + nonce: '0x26', + r: '0xc517daac09fdfa297b8ba5c19a6edf0c6c84321134384505f3cddc759eb11e18', + s: '0x441ba8e95813878382988533fbd81f8e3bec9425d7c721679306e74aac434517', + to: '0xf34b40c1e9fd13f3aef7e31b69926b2ae97cc5f0', + transactionIndex: '0xe', + type: '0x2', + v: '0x1', + value: '0x2302bf1686f0de2', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xc2978441f46a76c60e0cd59e986498b75a40572d', + gas: '0x1fe9b', + gasPrice: '0x55ae82600', + hash: '0x1752d428626dd31ea7546beb62e2c5d6a27ef9f37e14954a8e6d2e4e290b8d92', + input: '0x0ce28dc4', + nonce: '0x3437', + r: '0x230800eb5628222c1b97d09d1cb91e26e2e4e003cea1b1061d3f35d0e340f770', + s: '0x250c820942d9a1138a731a5de121921ca1d2a328e64bd35c42531b02f2836790', + to: '0x52a494dbf47107cc0c624ee10703abecaf586776', + transactionIndex: '0xf', + type: '0x0', + v: '0x25', + value: '0x58d15e176280000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xec30d02f10353f8efc9601371f56e808751f396f', + gas: '0x186a0', + gasPrice: '0x513db5909', + hash: '0xdaa6805bdf1f554cfc744fe22a6661642c87141467b7f14edd0f946c9cb0f8ce', + input: '0xa9059cbb000000000000000000000000735d8715bc1b4a404f19236fed05744ab6da094200000000000000000000000000000000000000000000000000000000e6fb16b1', + maxFeePerGas: '0xad83f8d9a', + maxPriorityFeePerGas: '0x9f943785', + nonce: '0x873bb', + r: '0x81f54732c008f3fd03812f57a6deb5822533e3b5e9b50b97574d84c3e31a40e0', + s: '0x25ac62ba0d877945882f4430861effec04ce0e69903b04fd38124c881c395d2e', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x10', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xf16e9b0d03470827a95cdfd0cb8a8a3b46969b91', + gas: '0x186a0', + gasPrice: '0x513db5909', + hash: '0x3fd6e1a5c50cf84d53f9b6809db62d919121259b0de6869a8ee3ff9622c75806', + input: '0xa9059cbb0000000000000000000000008c897cfe223374d2ba76cf9562283647efa842e100000000000000000000000000000000000000000000079e4e62fe1916184000', + maxFeePerGas: '0xad83f8d9a', + maxPriorityFeePerGas: '0x9f943785', + nonce: '0x1ae4ee', + r: '0xdb8d01754137e016371d9b69b1516509ac98eea529e2b027d853be60fe3fb0b4', + s: '0x7818762d95b751f04d905e25843191891c8047d7bd3ad3a3d11366aac70cda1c', + to: '0x4a527d8fc13c5203ab24ba0944f4cb14658d1db6', + transactionIndex: '0x11', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xcbec560dae217b1d6303f23e25e547ce008d10bd', + gas: '0x2aee5', + gasPrice: '0x5094a1a84', + hash: '0x608372f0608f5466eeb44c5b28408a80af6e1feb410bfe57fa5f6c6e267bec3d', + input: '0xe2bbb15800000000000000000000000000000000000000000000000000354a6ba7a180000619a3f4a80e465251b5ab251d36993b9b2d074b539fb1041a69f9cccb3f20ef', + maxFeePerGas: '0x91d3fadf6', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x271', + r: '0xe04214b243d0671e37a53582b0eab23c8b313f6391805053a8ec1bc5d3494c3a', + s: '0x76174f10b93f6cb35ad6d51e2931b0eb3841353ae17ad0583b4a78ea2a4428e4', + to: '0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419', + transactionIndex: '0x12', + type: '0x2', + v: '0x1', + value: '0x36e7825f3e4e4c', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x46e0ebb66c75743ea7cf223830b6d01d26c9d2e5', + gas: '0x2aee5', + gasPrice: '0x5094a1a84', + hash: '0x9295f62e92616619793b77a3b7577b2b6617a3cd21dd13f87164689c444d64f5', + input: '0xe2bbb15800000000000000000000000000000000000000000000000000038d7ea4c680000441f477690a582f4f52b0380bc84e65830e76fcd3bdf8079bb13c8bc3abd6c6', + maxFeePerGas: '0x99315cec6', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x42', + r: '0xd19f281c9210eff7c37c0bfbbf22837cb6fd997e8aa3544d9ef310abf139f4ba', + s: '0x260e9f08a252f6333a8a6ab4bc604a56864c7baf0262270e4d1e90f851a4fc06', + to: '0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419', + transactionIndex: '0x13', + type: '0x2', + v: '0x1', + value: '0x51fc9fd45496f', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x8d456f39cca30dfd46f9be8e2fb38d396a3bb986', + gas: '0x2c08e', + gasPrice: '0x5094a1a84', + hash: '0x11b54c9e279fcbb97484fbf4a27860f9c13768ca21f11e4df82041b0ca33df8f', + input: '0xa1fba2c7', + maxFeePerGas: '0x9b078d0f6', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x8', + r: '0x5f9624fb030af3719a6e80a5ec7acfe618c5c69cc339e1ee6981deb160beb577', + s: '0x024061ab760e7608b5354782d67bddae9efa30b4a9046380db24c53734cf33da', + to: '0x1785982cb0386d9862ec1968e0152656d44d14de', + transactionIndex: '0x14', + type: '0x2', + v: '0x1', + value: '0x5543df729c0000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xfb53f899904110fdc3235531b0cf86676064db0d', + gas: '0x2aed3', + gasPrice: '0x5094a1a84', + hash: '0x2c8a744c0124abfe06295471c805dd0cfbb6a42675cf56d54c1ba851fa8dc3a2', + input: '0xe2bbb158000000000000000000000000000000000000000000000000006d6c6fd3150000017158a89a490a43c8482e8d04d68d0c796de7d1309f32e0a086646979119e0f', + maxFeePerGas: '0xa2e1a1790', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x0', + r: '0xf1c2dcc6602bda7edeb16a34321c9eacc2d8501a4ffcd9cce95e143ce41f3ca3', + s: '0x4729ae054e94b1460aeea560cf6809203d61aeb2f6ef64c052eea07e4b0a421b', + to: '0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419', + transactionIndex: '0x15', + type: '0x2', + v: '0x1', + value: '0x6f09868ab1ce4c', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x345dc49ee5636a43395687a898bc0c3c9ee5ff0b', + gas: '0x2a234', + gasPrice: '0x5094a1a84', + hash: '0x90cb790f159d0a8fb4de0bf9c53d95ce48748251da20e254591c8a29960ddd23', + input: '0x7ba0e2e7000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000416097a47543c8d60cd5bf5cafe3ee94e07ed04747405d965d1ff864c6aef2fd177a6ee6b9f8286d9f37bdd0eb63d4b2cfef30f253fa850ffc4b062a4d13c216b91b00000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x91d3fadf6', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x5', + r: '0xb3360d4cd6c110385f6e6416239ddfd53ba09a49425090d899b6fa286f062a17', + s: '0x038ed6befae17a39a04d0da0c11541a8ae3e34a81d5e0218c2cd59f2fc106db5', + to: '0x85c4209f7965d36742291f9222bd2cdb104df75c', + transactionIndex: '0x16', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xa077f842d93c51b7b951c2f9935d33251d7fd774', + gas: '0x2a234', + gasPrice: '0x5094a1a84', + hash: '0xc94887918fa6e72ecb1e92297b4e6d8bd157dda8be8e71d21015bef1c5da2758', + input: '0x7ba0e2e700000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000041cdc740e94dc367f680e9f3206f8981512af64d2abbcd486762c803a993b49f3b7d2358851f6acbd6fb2035ea06f026cd707cd66483b32dae34d34599d8d601ac1b00000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x91d3fadf6', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x5', + r: '0x8776838f6f0b5880ad1f47d293a59784fdfc1da6a213afaa394dc39c819f66ca', + s: '0x5e06ead719af63b45434941b53a7235820e6392652968f704f47f7ac88a54da3', + to: '0x85c4209f7965d36742291f9222bd2cdb104df75c', + transactionIndex: '0x17', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x22d3a981255bd90994b8acbe3d92a0a7a32f5120', + gas: '0x2a234', + gasPrice: '0x5094a1a84', + hash: '0x7c9a5723528a8c953a6d89d5a3e11d939bb22073763cfaa9b67f23bc643754b5', + input: '0x7ba0e2e700000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000041faad3bab3c95fe38e7dbc756151801f249731190c6a2b5a8d8d2625e0f3abc684d85d460d453db0b9faa5a3186c17394495e4d51e59faa3f4a43de038ed32ac21b00000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x91d3fadf6', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x5', + r: '0x77576eb7635253c0111415988d87d125cccc034e3e0a5537d45f542dc6d9fb17', + s: '0x51a3782c39cfd538278762b099ae388da8e4563110cafb577e14387e7bb5bf8a', + to: '0x85c4209f7965d36742291f9222bd2cdb104df75c', + transactionIndex: '0x18', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xc956aee2bdf34512a2f770d1d38e63f1f40710ee', + gas: '0x2a25c', + gasPrice: '0x5094a1a84', + hash: '0x75d304122e20c4e61e1be6f10e8a2bfd7172a3d2f44f123ce439e2697adc37c3', + input: '0x7ba0e2e70000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004188f77ebc61cf68343a92f7c4b74709787bf867ad808c8c7c1c3b0b30a25d50e23e6685adcdbf01ba9e0796ec8c4764f2afe3dd3f2cc34d3106a3cba7371132921c00000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x9b078d0f6', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x5', + r: '0x77cbab6be06d2c0d7e7e281e6b74bf86d54b1e6eb0d25164e34f74ffc4b13491', + s: '0x76ddd4fe48f97b00c8222b87d281531a8602657c5fa47b1b1e3beb0a68f76db0', + to: '0x85c4209f7965d36742291f9222bd2cdb104df75c', + transactionIndex: '0x19', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x9a41a21ee7ea7337dd60d05f39ae3bd5d265dbe2', + gas: '0x31165', + gasPrice: '0x5094a1a84', + hash: '0x5b0805bcb55a457729c0e23541205aace38077d5d0ec38f8c4981b6ac10ad444', + input: '0xf0300d60', + maxFeePerGas: '0x9ae3aec86', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x1ce', + r: '0xdee01e58066f39f49053a1caec721704b27d4455cb7f66051567babff2eb0207', + s: '0x5d57933f7f188c8bc3df76c4eddfed42952b24852cb5e99cc46c021d032635d6', + to: '0x5e9dc0b770db326612bb31605bb928ad125c95b3', + transactionIndex: '0x1a', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xb253c877efad2a87b18fba1687d41456141891a5', + gas: '0x2a244', + gasPrice: '0x5094a1a84', + hash: '0x87a851cef867e8b76c0f00049bccf3eb95f41a4e0ed5f2656d3f029ec321aefd', + input: '0x7ba0e2e7000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000413b8f759048704a4af30717de9e4ad5fa72c6412d7689d2bb73b40c01bcc020301a36256724ee3be2d7ccee88bcbc25e2388ed2d01383bea4397c94a44b00cdc51c00000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x9b078d0f6', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x5', + r: '0xef7fa2775201d5e1f5101efde47666dbfc1263000898b2ccb39302b5f57b0cf5', + s: '0x0c36ff2062572a18a4ac9452b0530737d655c4cb0a688c5219a8f2b40a94ef1e', + to: '0x85c4209f7965d36742291f9222bd2cdb104df75c', + transactionIndex: '0x1b', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x7050b357db12b47c03380d5786950214677cb4a0', + gas: '0x2aee5', + gasPrice: '0x5094a1a84', + hash: '0xc4fb4a90055b52891b9ee9ea13e59bfa08fedd2521212a2538a54ac15948694c', + input: '0xe2bbb158000000000000000000000000000000000000000000000000010a741a462780000100c4bce2633a97e0e5325143024b3070c458d89194d53a6fcc18d780a36b22', + maxFeePerGas: '0xa2e1a1790', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x3', + r: '0x27e5b0cdb7348293f5deacfb04ae58a846bf98f175a10eb24739e972012365e5', + s: '0x3226f6635c7c552345d376494cdfb148e5a055f4ecb0cc478de88ff8786ea6d8', + to: '0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419', + transactionIndex: '0x1c', + type: '0x2', + v: '0x0', + value: '0x10c1130fdc44e50', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x48231a84eb1d70ac7cc33aa8cb6069332ce56ec9', + gas: '0x2aee5', + gasPrice: '0x5094a1a84', + hash: '0x9a6210559642f06ad096806f546af798f6b9d1a69f246f830a23ba96df23c70e', + input: '0xe2bbb15800000000000000000000000000000000000000000000000000677d94a64ea0000250cd770ed0fb0328249c83c6ca6b96041eaa60f240fb3f1c0ccb54a7287169', + maxFeePerGas: '0x9ae3aec86', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x0', + r: '0x04702957442572f72da0ae712be49cc269bb8f2974b340a7df77394d4ca8e853', + s: '0x20cee42bc08f88c23a9a1ebe77475786f1f3459a3d14a783caa38e4484066d39', + to: '0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419', + transactionIndex: '0x1d', + type: '0x2', + v: '0x1', + value: '0x691aab5deb6e4c', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x4184bc5e5444f250767e8d33a49817a9b4fb0df3', + gas: '0x2a234', + gasPrice: '0x5094a1a84', + hash: '0xc36c5f21974222581b9626833fe32d99e1953be7a84f8de99289799b6c28cfdc', + input: '0x7ba0e2e7000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000410b166aab505f074b7a0719c22c6e910af13c500c439dadf57e05b7d02197f1526e851f81f4e0788cb80b9486810f59d741d836f8bac1752e4eb4d65c401c8ec21b00000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x91d3fadf6', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x4a', + r: '0x2ce125ff66ac8118b1f129c2588ab2ea350a8c63c5b66fdfdc95a0910f92ab1c', + s: '0x317975d171208e5d462074dd336c22f95b81cce40e9689f9f4df9249327335bb', + to: '0x85c4209f7965d36742291f9222bd2cdb104df75c', + transactionIndex: '0x1e', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x151b381058f91cf871e7ea1ee83c45326f61e96d', + gas: '0x5208', + gasPrice: '0x4eb8bf7c4', + hash: '0x5555125fe67d3a36555050d41b8ca19ff036d6a338add7c285eef925100b7d49', + input: '0x', + maxFeePerGas: '0xaf75aedb8', + maxPriorityFeePerGas: '0x7744d640', + nonce: '0x74102', + r: '0xc4935d7c1a6ea5a50d1c66a75518c30b60646f6bfd1891aef7d58f0fab97353a', + s: '0x03a60cb1ceb8d9a92e170cbf290c99a9b97492b471f33f92e0cdcf7299e9f33f', + to: '0x29d0b29472432459eeb43003876bc3124334cdc5', + transactionIndex: '0x1f', + type: '0x2', + v: '0x1', + value: '0x3e6aaf5ee5cc000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x59e0cda5922efba00a57794faf09bf6252d64126', + gas: '0x1d4c0', + gasPrice: '0x4eb8bf7c4', + hash: '0xc9b0ffd52b2d3179cab61f22302eed123144dca2367455f0b26cbd57a54d6d6f', + input: '0xa9059cbb0000000000000000000000006767526a362ec6c6b1df185478e4f01506b73ff300000000000000000000000000000000000000000000000007caa2b492b20000', + maxFeePerGas: '0xaf75aedb8', + maxPriorityFeePerGas: '0x7744d640', + nonce: '0x6c27', + r: '0x58746264bcce9d42ce4d35a4677aa1adddc9996e9be421dbaa99f3d2a20aa391', + s: '0x334e4d5cea9d1860d914e7796cf68f97677c87772b3885e0f93f7a4379abafdd', + to: '0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e', + transactionIndex: '0x20', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x867bfa133d64fad734c89f886d2a169b6504ab2b', + gas: '0xc350', + gasPrice: '0x4eb8bf7c4', + hash: '0xb47865548d28112a9b37e3909fe2310918a4a70054b2e10f0a25b81ad2bfd695', + input: '0x', + maxFeePerGas: '0xe8990a4600', + maxPriorityFeePerGas: '0x7744d640', + nonce: '0x1227b', + r: '0x59b0898abc04ad8077c95c705e2df2ae6824b40685159f03107f68188ea5361c', + s: '0x4a1e52473086dc9cb96768bdd8b02cc153aa6b0bdd9f08e12c047c176b800ae8', + to: '0x99383ffe2031379e1e829e106e29a785c9f7f498', + transactionIndex: '0x21', + type: '0x2', + v: '0x1', + value: '0x22ddf7aac722000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x5ab96bd81c33a620dba024c797a78b02b3964849', + gas: '0x5208', + gasPrice: '0x4eb7cb584', + hash: '0xeba0d7487248cc40f7a9784f20c879cc358231ac73cb56900629b11a2de6ef23', + input: '0x', + maxFeePerGas: '0x684ee1800', + maxPriorityFeePerGas: '0x77359400', + nonce: '0xa', + r: '0x41643f403bbe3262d39ee6c1449d33d96bdd1227f2d6967ab193a53f1f0bfc48', + s: '0x31ae8fa9994acb3d17ce5ac4028f139999a674732a0cd9e095d6dea890d0c550', + to: '0x1164c6c18b6de4831305050f5b32e2807e2bfc32', + transactionIndex: '0x22', + type: '0x2', + v: '0x1', + value: '0x263bee6bf38e8', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xc5a93444cc4da6efb9e6fc6e5d3cb55a53b52396', + gas: '0x5208', + gasPrice: '0x4eb7cb584', + hash: '0x77fab2e3ef8460a5259e7107cf0cbc1a1e31678d112aaf248b2108159b4416a3', + input: '0x', + maxFeePerGas: '0x9c7652400', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x13403f', + r: '0x673b786b4a389f7fb0df5862ab0703e3685ca0081d321b8ac8b8c2ecbf7ee412', + s: '0x6be2172fda36ea57d7c77dcc46de306545d4f3abf96e7db6e24a3c9e44427974', + to: '0xc8898aba27d521c47055ed2c493cbfd6b95a31d4', + transactionIndex: '0x23', + type: '0x2', + v: '0x1', + value: '0x11e7da71ab0000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x28c6c06298d514db089934071355e5743bf21d60', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0x216b046ab639e61930add4323bf64b76d91db121963350632ed82f26bb6de7e6', + input: '0xa9059cbb0000000000000000000000007f263315e03eeef6c03ee385b15695bdf87cbeb1000000000000000000000000000000000000000000000012f5e3653d5caf6000', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x62108f', + r: '0x93f820e51bbd9cee9f3f1b94fe8f7676d4346fe9eacd549a2d07e434ab807cb6', + s: '0x030da66baf90a7e72379224c0863eb3b4e31cc94b0d86177b91950d644c8f406', + to: '0xc18360217d8f7ab5e7c516566761ea12ce7f9d72', + transactionIndex: '0x24', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x56eddb7aa87536c09ccc2793473599fd21a8b17f', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0xd39d9a75f852bcb051393709ddb894ee043b7ea18bc21ce4ebd5a3560142b60c', + input: '0x', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x46e01c', + r: '0xee36304a0224b72a556eb71ff13d8cc1d3bdf6d864c6ee0ab0e9b832d556185f', + s: '0x50e293db57ca81487fc0f896665b4e9d5802a15c24fa0dce5803e1e663a84c10', + to: '0x69f1918cf0661b1b8dce3aa2137e4659d8493e79', + transactionIndex: '0x25', + type: '0x2', + v: '0x1', + value: '0x70f9ee77db8000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x575cc48e711d8faacf051502a757b90c11f8547d', + gas: '0x30d40', + gasPrice: '0x4eb7cb584', + hash: '0xb7f3dbb72b2f8fe579b81a3ec11a56008b09d90f2a5267180fd8f966a1b76cce', + input: '0x23b872dd000000000000000000000000a2afeae98f8ad0d8c30be323ca461754380fce49000000000000000000000000d1cd4e06e6034c31bd9392013a55d954e6fdcb740000000000000000000000000000000000000000000000000000000024bb178a', + maxFeePerGas: '0xa104cb290', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x90b', + r: '0x0a45e7222c8203898f7f894dfa7ade58603a8d7d4332697d37ac69a7a027cd75', + s: '0x06ff5b1b6e1fce12a9ff1f52acaa153fcf89d4fb6ee4e6afcbbc146630707c40', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x26', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xd1ff134d20fc3a224bd9bc0877bb24a23784dd56', + gas: '0x5208', + gasPrice: '0x4eb7cb584', + hash: '0x2bb7f5e1d071f0dc7040fc1ae745274a456e25610cfcfcd38e9cb3205f227222', + input: '0x', + maxFeePerGas: '0x5d21dba00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0xb', + r: '0x4b287ee6e4333f64742044706f5c8c00e6e60d7501682c1314cb5211b8c8bf4e', + s: '0x37f5eaba2b575d587d019257d29b5bc097705571aa6280526a9007c2ae8aece1', + to: '0x8412abafccf6f5756684f14e0aabd23834af7789', + transactionIndex: '0x27', + type: '0x2', + v: '0x0', + value: '0x1301c7dd343156', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xf89d7b9c864f589bbf53a82105107622b35eaa40', + gas: '0x15f90', + gasPrice: '0x4eb7cb584', + hash: '0x6c53f5e35d76bfaab1d1eaa75b553da7bed8fe046f90961441474c6852b0469f', + input: '0xa9059cbb0000000000000000000000000cca85946f37dfb7d7af154155c1eff595479e530000000000000000000000000000000000000000000000dad417aeaff88fc000', + maxFeePerGas: '0x174876e800', + maxPriorityFeePerGas: '0x77359400', + nonce: '0xb2615', + r: '0x6faa89b9d6e984f3df4d9c1fefd468f54099081ae3aa06de5fc80a9251ccdb55', + s: '0x293017e31f66be92bdfd04c3302a0c2ed173751ceec4fd14b9c4ef64656f8c62', + to: '0x6de037ef9ad2725eb40118bb1702ebb27e4aeb24', + transactionIndex: '0x28', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x28c6c06298d514db089934071355e5743bf21d60', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0x346d0ad3d6a351797184f880b08b913dd095d12f36ade9e75eb7cba6980dbf34', + input: '0x', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x621090', + r: '0x883dbc540ae0a26dabcc4463651a74b8d2782a590e0bf0de731df0572429b928', + s: '0x207fd537c0809bbc87d42cf79f08f7f73795c7ae21ef01c79479485519a415fa', + to: '0xfed930b2dbbc52996b2e107f1396d82256f41c41', + transactionIndex: '0x29', + type: '0x2', + v: '0x0', + value: '0xe26ea512c27000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x56eddb7aa87536c09ccc2793473599fd21a8b17f', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0x209624ade75ef69c5b0b1c8d85ebb1be2a084380f3eff7fb15fafc6d607da908', + input: '0xa9059cbb0000000000000000000000000f380d4a0afb298faa4cf6d1d16534470140480f00000000000000000000000000000000000000000000000000000004a817c800', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x46e01d', + r: '0x78a34604e863d7e6467d40f21d161d99794bcf9424b95d5bc6f942c6d2e7d5f4', + s: '0x3d4a493c0aba95406299f7afbf026ca87e9c21fd9d864d16884ee777979c54c5', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x2a', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xdfd5293d8e347dfe59e90efd55b2956a1343963d', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0xc76320b5a1943478674adc1c81ec441e0798525ff8c5aba49a13e0feccfbb6b3', + input: '0xa9059cbb0000000000000000000000008fef490d614fce8b93bd6f28835dd35a8b3229a900000000000000000000000000000000000000000000000000000e789541059e', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x599696', + r: '0x7cbc768027ad0dee1b9d3d31f2d2d9f95c116c24ec80efc69fda640fcac35705', + s: '0x6d0cf162a13339f2caf1a4f323671a88684ddd29d7a8fb554e45abb00599fea4', + to: '0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac', + transactionIndex: '0x2b', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x4976a4a02f38326660d17bf34b431dc6e2eb2327', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0x79474757728de960eb4e7da5bd14cd3bbaa342a1f15a0e02920020bc17293e98', + input: '0x', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x264d0a', + r: '0x27451446f19d4db1ec9a7523ba550878049af134e6e91bb4cfc706bab8ac9df0', + s: '0x2924823e0512b4ac49c5eb479231ad53d15459f4a78309d7c669bab355e27086', + to: '0x8bb27f2b2240f2ee95648a216bda95e7d7ad59a9', + transactionIndex: '0x2c', + type: '0x2', + v: '0x0', + value: '0xd6f06df0e94000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x3ab28ecedea6cdb6feed398e93ae8c7b316b1182', + gas: '0x2934c', + gasPrice: '0x4eb7cb584', + hash: '0xcbd72caf3b24a675faac5188b7bc15768c2bdd4e6a2a8c60ce79f1875b36b4e8', + input: '0xa9059cbb00000000000000000000000019697dfab84c1982138419a3be21eaaa7c05c1c700000000000000000000000000000000000000000000000527c712237ba60000', + maxFeePerGas: '0xe2d17967f', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x59e4f', + r: '0x58e964390fae81b120e526d35bdafca451d00d77f72cabcadaa63b2141ec3eb0', + s: '0x2fdc669bc14bc9903b59ac152858f082f534624a501f2f0009dd0a956918be0d', + to: '0xba11d00c5f74255f56a5e366f4f77f5a186d7f55', + transactionIndex: '0x2d', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x21a31ee1afc51d94c2efccaa2092ad1028285549', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0x2350e1d8dbaaef1c51429dd50f319f7ae0c60681b17e925abe7f6b79b85bdf6c', + input: '0xa9059cbb0000000000000000000000008263a4b989d756babaf651a9cbf171231466666600000000000000000000000000000000000000000000000000000000b2d05e00', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x5e0f0e', + r: '0x3a36d0faf9eb3c59ca4e7bbed74a3491b5fd2d05c17c34fa02d84cee2071c7b2', + s: '0x64bdeda9880342582fab87c9b05e98823fa49bb8dfbd772dc2a246fc863b7bc6', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x2e', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xdfd5293d8e347dfe59e90efd55b2956a1343963d', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0x76c881e0add6fbe11dfc4396ff8f373f2bb1cc27db929b95a21cd64b7dc41e11', + input: '0x', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x599697', + r: '0x6e69d854012faf58c3ade90b0953359b8d8f3f7619960e9fc6a745be6afad0cc', + s: '0x74473994719dd6c24c8d850b1dabcd7a8a993217c16d542ed7f4a1ec34a8906e', + to: '0x655da9d1fdba5d7cbe0738f71022918ad75144f8', + transactionIndex: '0x2f', + type: '0x2', + v: '0x0', + value: '0x859d63b3453e6000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xbd310c947981b291a1abb439ab0713f6a6018f35', + gas: '0xfbac', + gasPrice: '0x4eb7cb584', + hash: '0x3ec134ed1e10df2b1b78311fcd38325b2da8e5da5ecfb60573909450a04693e4', + input: '0x095ea7b3000000000000000000000000e66b31678d6c16e9ebf358268a790b763c133750ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', + maxFeePerGas: '0x649534e00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x0', + r: '0xafbb17abe38e32f14f34cfa09f93876fddfe80b07f2bc54b27cf5ff6093e3bf2', + s: '0x553821eca4f13c424737eac999b1a7997295252802abe049884554766202fc68', + to: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + transactionIndex: '0x30', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xbd310c947981b291a1abb439ab0713f6a6018f35', + gas: '0x460af', + gasPrice: '0x4eb7cb584', + hash: '0x8587b3eb001a4d9c367b44d3c66d864bd086f7def58681fa568c25c1632197fe', + input: '0x5cf5402600000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000bcd3d800000000000000000000000002b591e99afe9f32eaa6214f7b7629768c40eeb3900000000000000000000000000000000000000000000000000000000001e848000000000000000000000000000000000000000000000000000000000000001286af479b20000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000bcd3d800000000000000000000000000000000000000000000000000000003e2b71f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ba0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000bb82b591e99afe9f32eaa6214f7b7629768c40eeb39000000000000000000000000000000000000000000869584cd000000000000000000000000382ffce2287252f930e1c8dc9328dac5bf282ba100000000000000000000000000000000000000000000006acdf8f63164363ecf000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x649534e00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x1', + r: '0x5da32c14819244d81966203f8ece7d4330dfc90d43237b769679b89e308ef01d', + s: '0x0bb911307432a6dd7acc0155a43f398a66865e941202c8f37fa31f87a7be5748', + to: '0xe66b31678d6c16e9ebf358268a790b763c133750', + transactionIndex: '0x31', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xcbf04eac5a3443941ce6a41ff38d7e238406f0e4', + gas: '0x186a0', + gasPrice: '0x4eb7cb584', + hash: '0x4e52482e36a15ab65b1ee34d20f93b54cd1873e1b596c874364c59125dd23b62', + input: '0xa9059cbb0000000000000000000000006cc5f688a315f3dc28a7781717a9a798a59fda7b0000000000000000000000000000000000000000000000258a3df7f069706400', + maxFeePerGas: '0xa3e9ab800', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x1260', + r: '0x526cda6518d213796112450510e637aab66ca0e7cf37e17ba16c95b05e799bb6', + s: '0x24e98f8aae7e8393654d1c5d6ca56d07776bba3985d930fc13753729a8b53fff', + to: '0x0b38210ea11411557c13457d4da7dc6ea731b88a', + transactionIndex: '0x32', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x89e51fa8ca5d66cd220baed62ed01e8951aa7c40', + gas: '0x7a120', + gasPrice: '0x4eb7cb584', + hash: '0x5512e2f3ae0e44b1993cbfcea2f91fbc8e6cf2ef6bc73b606f19db051935c30b', + input: '0xa9059cbb00000000000000000000000016c9d209a906bbf06bd29c233c7f45b76e42a5180000000000000000000000000000000000000000000000000000000002dbf090', + maxFeePerGas: '0x1329a0487f', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x16cd82', + r: '0x60a123cc67d102617f60161435641e16dcaea9dde4c80fc1a1c4b3324f8c57f2', + s: '0x4dfb246eebc7ca04821a922fca1177f453462a2ae8803e33e87285fbd5f8eb9d', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x33', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x3ab28ecedea6cdb6feed398e93ae8c7b316b1182', + gas: '0x107a5', + gasPrice: '0x4eb7cb584', + hash: '0x47effec3066af633b7b8e31eb958720b3c26101a660b68294cfd5d1da9df660e', + input: '0xa9059cbb00000000000000000000000019697dfab84c1982138419a3be21eaaa7c05c1c700000000000000000000000000000000000000000000009c8315610cda546000', + maxFeePerGas: '0xe2d17967f', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x59e50', + r: '0xed0cc2008fa60ceef899c73967869cabfe3ca8aaaa9abf6c94fa0c7f211fd82b', + s: '0x6644f22c84aedc9f50595a80c99641db7ed63487cef46bc98324f214b1ac1088', + to: '0x3593d125a4f7849a1b059e64f4517a86dd60c95d', + transactionIndex: '0x34', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x56eddb7aa87536c09ccc2793473599fd21a8b17f', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0xd6356b5d6aba735dad22a19dc1c6f1e90dc5b9cae6981e3242b551da32a56420', + input: '0x', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x46e01e', + r: '0xf9f8024c8a5a8d315e8a0ccf510e8547d62c69b9636919f377ee842232859567', + s: '0x5390ff89bea1d8b8266a335008feec1c358b4bd1becf0dffde1786ccdc31201a', + to: '0xf229c5f132d805bc540347f4f09cae4beb1ce2fc', + transactionIndex: '0x35', + type: '0x2', + v: '0x0', + value: '0x44913f6c2a40000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x21a31ee1afc51d94c2efccaa2092ad1028285549', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0xd2ae45072ed92e1c0f0dc9770700e2aea61c564c3cf9966043fcb4ff503e6bc5', + input: '0x', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x5e0f0f', + r: '0x7ef2595e0b05eb9a2780638182a91cf79fa9a4176f9664c429812813729fca60', + s: '0x46cb312550a3e0f046798aff756ab0ac2517a1e44272e2928351d0ecc2192359', + to: '0xd5e7c8051bb55471e65c77735246037b88887794', + transactionIndex: '0x36', + type: '0x2', + v: '0x0', + value: '0x7357ed86abd800', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x4976a4a02f38326660d17bf34b431dc6e2eb2327', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0x3a9d565f5193dbfd7bdae074e6405d6cd0d6334a99b23d4780afdf70730ea265', + input: '0x', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x264d0b', + r: '0x014efa044805a0b57331d02fdc260ed97eddd05a65671ca559349f0740c02f5d', + s: '0x5acb03bf01c45c1d54cc92048c16cfb0c1502e37977351dfeffab81516b3d530', + to: '0x7959c8788c426988cb5dc3d7d164458af8ffc1d6', + transactionIndex: '0x37', + type: '0x2', + v: '0x0', + value: '0x109e2955efd8000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x9696f59e4d72e237be84ffd425dcad154bf96976', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0xe3a4f72856bfda9647b3699182bd386445ac649dcc8b1ce16e00ffcfbf4ab7ed', + input: '0x', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x41987b', + r: '0x26586b1e9ee91d0d5a1a67c115e3ef25af632bd04f669dabd629cc2ff73b7bad', + s: '0x5a5f39c4da031bff3bc027f717750ca4aee70a2fcba228fd3cf89a15eb1208e0', + to: '0xe0b27a0f1bae4128dd35cd1cd9591e2c9e25c14e', + transactionIndex: '0x38', + type: '0x2', + v: '0x1', + value: '0x124d2084a70f6800', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x3dce71f75f239acf6d96e21185b171113997cb94', + gas: '0xc350', + gasPrice: '0x4eb7cb584', + hash: '0xd8640e034189ad0e1c19c56cc4283d58a6fb953eb4b07490f1908de722939c36', + input: '0x095ea7b30000000000000000000000003018018c44338b9728d02be12d632c6691e020d1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', + maxFeePerGas: '0x773594000', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x0', + r: '0x06a9fade08677d36f80060a150829cf89b6a5d93a6bd49125ed445c06e8a2070', + s: '0x71caad84e2b4ad5abf4f0e7819a0c75b78d82cec724bc00f9871c6cff20cc1ee', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x39', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xf51cd688b8744b1bfd2fba70d050de85ec4fb9fb', + gas: '0x33450', + gasPrice: '0x4eb7cb584', + hash: '0x52afd7942b5e6b188b162fbef65fea001d87904a218a1863cd55e35c38152d32', + input: '0x', + maxFeePerGas: '0x5d21dba000', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x1106f', + r: '0x71ed70b9d1c74ae1ad4feb6b4df85667ffdb140cd33598a671ce6132b4705023', + s: '0x522d3672a3ccd0d19a9219b07cfa50330016c40eb6747a3b0d01d429de6b9162', + to: '0x53d583a2e9d318f770355a502730e074a77704a5', + transactionIndex: '0x3a', + type: '0x2', + v: '0x1', + value: '0x1aa535d3d0c0000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xf51cd688b8744b1bfd2fba70d050de85ec4fb9fb', + gas: '0x33450', + gasPrice: '0x4eb7cb584', + hash: '0xb261c0e8b9db2323039cd792af63941d6891e59f9a47fb920a1cfa70188284a3', + input: '0x', + maxFeePerGas: '0x5d21dba000', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x11070', + r: '0x79abe4e602462702a701e8e8dafb766b49e1d0b5090f7d07067e8712d0fc1d79', + s: '0x68fae44682a2c1eb0f4c61013f26716b3146e0874b46ca5f3956c882d577c3a0', + to: '0x6a53202a46f1d598bb3e1bd75e76325be9e85a62', + transactionIndex: '0x3b', + type: '0x2', + v: '0x0', + value: '0xd2c6806d3c0000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xf60c2ea62edbfe808163751dd0d8693dcb30019c', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0x545a0dafc33502a9e74440ffe4aaeb896a6c2248c1d5e02b2a211936f97fe375', + input: '0xa9059cbb000000000000000000000000e64fe3abefb9ef257a5468e3af3ce839d2801ad2000000000000000000000000000000000000000000000000000000001af6d8e8', + maxFeePerGas: '0xdf8475800', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x19015b', + r: '0xdccc9185a0dabffd612a8e3e7965e7e3e1827ea11375eeca23fa17f0e313f092', + s: '0x242f817d6ac64b27ce324d57167990b12050ce197d875b7a77407dfaee1fe34a', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x3c', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xdfd5293d8e347dfe59e90efd55b2956a1343963d', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0x5e48f0c28319b84d3ea08d316b91dc23d6ddcff46c4064760d2f83d848ede467', + input: '0xa9059cbb000000000000000000000000df90abe5ed346a74977b5d92ac6a264e25a9c51f0000000000000000000000000000000000000000000000008ae2b2e0ac12e000', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x599698', + r: '0xd42ab7d5efa8e62fc0aeb51c5f9b674f936d282c31f601fe51bc4cb00d958f59', + s: '0x04b83091ca937fc4f64b29c36406d4fed6b47f6c247ca86b5c0b4b3eec3110bd', + to: '0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e', + transactionIndex: '0x3d', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x56eddb7aa87536c09ccc2793473599fd21a8b17f', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0x848514cee29d37999e27991e25c2cd58edc0486fdbcd2bf673a14d0e37bc3d12', + input: '0x', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x46e01f', + r: '0xc30f5f8b8d05b1a5c3b74669ff383d2588fa86c0f35d5066e2815b144a61199d', + s: '0x16b0c495b6cf1d01675d907a480460a57e715da42365140dba84cd035629a213', + to: '0xa294cca691e4c83b1fc0c8d63d9a3eef0a196de1', + transactionIndex: '0x3e', + type: '0x2', + v: '0x0', + value: '0x31e0da46bd4a88000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x28c6c06298d514db089934071355e5743bf21d60', + gas: '0x32918', + gasPrice: '0x4eb7cb584', + hash: '0x5c1464d4fd1ef55d3fc1c1e9338917273b1d2280fd06fe04afa607557ab9c9d9', + input: '0xa9059cbb0000000000000000000000003aff86656a65f3d81b3e0b4c4f8d4199f3b3fbde0000000000000000000000000000000000000000000003825cc1b4837cd61c00', + maxFeePerGas: '0x17bfac7c00', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x621091', + r: '0x3d047d1e1b05d563adc9206ffa9c210d01018ec50bf674c50783a6428347bc9b', + s: '0x3063c3dc89bba20743758230f5015d30926c7da5ecaa150bd969d8fc80d1981c', + to: '0x0f5d2fb29fb7d3cfee444a200298f468908cc942', + transactionIndex: '0x3f', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x9d98180089adfe81f4a6c76e6b978284bd2bb3f5', + gas: '0x5208', + gasPrice: '0x4e3b29200', + hash: '0x461702cf4d7d04f70337251a6ce8aa386f96a55214eae9e71697ad2e3d686acf', + input: '0x', + nonce: '0xbb', + r: '0xdc70f934495c5a38a3e2418e0d075223094a899dea70cf95f10f1c5facbb772b', + s: '0x063b2d0f20585b959447460b5daa22c5bd0696c074ded4d31d4078b0dcae653a', + to: '0x6d1ea4bd89865bbd8c675261585ae566dcda9d53', + transactionIndex: '0x40', + type: '0x0', + v: '0x26', + value: '0x2386f26fc10000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x8f339591b959e8fe2e6127124812613e482f84ab', + gas: '0x73f68', + gasPrice: '0x4e3b29200', + hash: '0x4d0b6bd0b7dc8b332fc7f80c3c5774c467080976fa2460d85a9c032a3e230d94', + input: '0xeb6724190000000000000000000000008f339591b959e8fe2e6127124812613e482f84ab000000000000000000000000000000000000000000000000002aa1efb94dffff00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000b54a3000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000001000000000000000000000000008f339591b959e8fe2e6127124812613e482f84ab00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x4e3b29200', + maxPriorityFeePerGas: '0xacda7d00', + nonce: '0x0', + r: '0xd96426125d5a851dccec746787824af395da54613e62f1a5d53ce45754c2d00a', + s: '0x7a089b28b3426eb5624136e3fb7c7336eabf8d3a7b4f10f11cd1d3c86bea8967', + to: '0x32400084c286cf3e17e7b677ea9583e60a000324', + transactionIndex: '0x41', + type: '0x2', + v: '0x1', + value: '0x2c732b36ea6937', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x670bb2fa1231550fccaec308e6ed03b98d2f90fa', + gas: '0x3f13b', + gasPrice: '0x4e3b29200', + hash: '0x06ad8cefc9d677ea422fedbbc23fe323f830070fbc93ee394abf986453026dc5', + input: '0xac9650d8000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000084fc6f78650000000000000000000000000000000000000000000000000000000000076d3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c00000000000000000000000000000000000000000000000002b2c9dcaace8ec1000000000000000000000000670bb2fa1231550fccaec308e6ed03b98d2f90fa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064df2ab5bb00000000000000000000000080f0c1c49891dcfdd40b6e0f960f84e6042bcb6f0000000000000000000000000000000000000000000000009be96c72185d79e7000000000000000000000000670bb2fa1231550fccaec308e6ed03b98d2f90fa00000000000000000000000000000000000000000000000000000000', + nonce: '0x12b', + r: '0x6364548a5358fd5fd6a6d7693261455e859e9e6e12bc1571d67e894992c31836', + s: '0x377afabdffa95ce2f6b7738a9663500e128046be8f7ff08cf53e1a7fa54f9f13', + to: '0xc36442b4a4522e871399cd717abdd847ab11fe88', + transactionIndex: '0x42', + type: '0x0', + v: '0x26', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xa50c14352cce7a143afa38555fdc7354dd78c379', + gas: '0x24a50', + gasPrice: '0x4cdaf5084', + hash: '0xd77ad6002fc4ccec33de15972123777c0e036cf8f2ce5e1a4d858dd99b11cbd3', + input: '0xeb672419000000000000000000000000a50c14352cce7a143afa38555fdc7354dd78c379000000000000000000000000000000000000000000000000006ab07fb082640000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000b54a300000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000100000000000000000000000000a50c14352cce7a143afa38555fdc7354dd78c37900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x78c3985ec', + maxPriorityFeePerGas: '0x59682f00', + nonce: '0x0', + r: '0xd3a28cbf01498f92e51523725981c11a34f07b11ac6a7ef89de5ce17e4b868d5', + s: '0x779ba46af5a72f75f32fda1d33f9f7bd8330e75dada67021deb98b72785820f8', + to: '0x32400084c286cf3e17e7b677ea9583e60a000324', + transactionIndex: '0x43', + type: '0x2', + v: '0x1', + value: '0x6c81bb2e1ecd38', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xf4c0d5993b8c5ebc8857e631b1fa659c8c665421', + gas: '0x24a41', + gasPrice: '0x4cdaf5084', + hash: '0x3c829847832f898dd18a8674e81eba1e7179912397f48a53e31b6d98ad79026d', + input: '0xeb672419000000000000000000000000f4c0d5993b8c5ebc8857e631b1fa659c8c66542100000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000b54a300000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000100000000000000000000000000f4c0d5993b8c5ebc8857e631b1fa659c8c66542100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x78c3985ec', + maxPriorityFeePerGas: '0x59682f00', + nonce: '0x8', + r: '0x958ac379821e137003d336592f95d3d095e2fc38b02de6284bd4a3958fbe0f84', + s: '0x1c654cd5b76f2e9ab14e2f1b13d7c9b80a05176667e13ed741b77bb6605d445c', + to: '0x32400084c286cf3e17e7b677ea9583e60a000324', + transactionIndex: '0x44', + type: '0x2', + v: '0x0', + value: '0xb373f7ac616938', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x3651317060a0005dac1084a6f71a7285de1b6886', + gas: '0x15f90', + gasPrice: '0x4cdaf5084', + hash: '0xd90e21f60f14d0d6734a06a08ea72718c0da1dde84d927578f8bc3817eec2cfa', + input: '0xa9059cbb00000000000000000000000049a2fcfcf2b2025c667732ef0435f548aa6cd9dd000000000000000000000000000000000000000000000000000000001a6f45e0', + maxFeePerGas: '0x72c5225a5', + maxPriorityFeePerGas: '0x59682f00', + nonce: '0x3', + r: '0x5bfb19d897e19784d61a740277f615f275a80e32252d643860ade726d304feee', + s: '0x6d43017d363606b8a2cdf87f79c4becc33358b9cb8da6cc472470bfce3cee39d', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x45', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xa09bd3fb7924fbad29ce3f9d7bc6cadc7bf050a6', + gas: '0x5208', + gasPrice: '0x4c5efac04', + hash: '0x6d6269d0e0c72d8683f741cfb76b0d5e9f2dad7fe0a31cd84a655a5f48e2a3fa', + input: '0x', + maxFeePerGas: '0x62cb71600', + maxPriorityFeePerGas: '0x51a88a80', + nonce: '0x18', + r: '0x73c8c63f06b84cc19a11072e7a94b969625a0d11057268cba1cb7c464b3ca61b', + s: '0x6e8f89b8254a2ca4af5b97fd25d331c6aaf334872dc7b3af13982ebaeedd9576', + to: '0xbe8d2aea314be080df55bc01d79e98259bec836e', + transactionIndex: '0x46', + type: '0x2', + v: '0x1', + value: '0x38d7ea4c68000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x5565b5362ff9f468ba2f144f38b87187c9a010a8', + gas: '0xb4aa0', + gasPrice: '0x4b8d2bd04', + hash: '0x16405e445187de6e1282740494fc6af3a25cdfdea2de89014ace9a91f68ba6c3', + input: '0xc9807539000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000480010100010100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000004efab6bc6b8f34ca595ba160e7d99ac0000e9ac06050f0312090211100a06080b01040d070e0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001300000000000000000000000000000000000000000000000000000010622b851b000000000000000000000000000000000000000000000000000000106260fc80000000000000000000000000000000000000000000000000000000106260fc800000000000000000000000000000000000000000000000000000001063b0ae000000000000000000000000000000000000000000000000000000001064c356800000000000000000000000000000000000000000000000000000001064c356800000000000000000000000000000000000000000000000000000001064c356800000000000000000000000000000000000000000000000000000001064c3568000000000000000000000000000000000000000000000000000000010657dcce0000000000000000000000000000000000000000000000000000000106640cec0000000000000000000000000000000000000000000000000000000106650110000000000000000000000000000000000000000000000000000000010665011000000000000000000000000000000000000000000000000000000001066f7e9c0000000000000000000000000000000000000000000000000000000106762b980000000000000000000000000000000000000000000000000000000106762b980000000000000000000000000000000000000000000000000000000106762b980000000000000000000000000000000000000000000000000000000106884a440000000000000000000000000000000000000000000000000000000106daa1aa8000000000000000000000000000000000000000000000000000000106e379dff000000000000000000000000000000000000000000000000000000000000000716291fd074f7de8fa92346545486f1dd995174dbe082996a7f0070b390de1e3e8b6a944decd2a3e9667049ce16489bf299b9f557e25dbaea206ff5cbc6223bf44133d275dbeab4b6ac419d309e6ef432249fb601dddef3250e2c399ce70ae4a98b470c2a9f473fd67b1e1f82767e021cbb31bcbb012b52b2b20248d1aecf6e458159922125614956f06004f4a7c48093748141d402146613d8621bb0dc8be128195e7ea4bc57cd50acbd2580433388724587941ac374bdbe1e39965dec28d47bd9253b0d64a175286d2e124985256ef7d3e18491f8ac2f92812f50c1afd48ccb00000000000000000000000000000000000000000000000000000000000000076a5840595a11b5bca0e9a0f3c3229401d9ad633639697002c528561a48496951557690ceb40c387dda55305b362f70116883c67528075d3e21f63118a6b911340ef0f068c83ffaeae51608c7469ce6bf3669b7332929dd526f206adddfcc151d0eaa18655434b9a1c6945bd6a6fdd073b2d74ca04aac93a9920fc20532c5a7a1630071172c65a953750d254e632cc43bf16ee417cd4f79b332c97a25c0726a7d732239bf5df083d299d2312ecc7539f6e8d634faa6f80989ce2627766b58974823a1bbeccfcf0ae22dbebadc6cccd896888c42badaf2bd2cb764556de10bce50', + maxFeePerGas: '0xaa4aaa893', + maxPriorityFeePerGas: '0x448b9b80', + nonce: '0x11bc2', + r: '0x471c79d7bcb68cfe81aca71eaca7fc70a90dfcb9ca8669687266add051625b44', + s: '0x4e284dab507e32122c3fbc9f46801f3790af234597bc420f063e1f4f3e76bb83', + to: '0x908edc7e1974ecab1ca7164424bc4cac287d83ad', + transactionIndex: '0x47', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x79672062c5a45e3808d6b784129cf3ecf59d4224', + gas: '0x1e848', + gasPrice: '0x4b53bf297', + hash: '0xe622306295b723bf0da62a8946e0c624a3375096669cd379bc437ba3a0e2b6b1', + input: '0xa9059cbb0000000000000000000000008a900d289a028cd59cae6cebacfd932c60978df3000000000000000000000000000000000000000000000000000000000bebc200', + maxFeePerGas: '0xe056b8297', + maxPriorityFeePerGas: '0x40f4d113', + nonce: '0x20779', + r: '0x8cf782f3d4aa7d417fcd9b0c9347b4f7539db2cff70b07ccd35974cc1e1c0acb', + s: '0x56d09c40b55fcdd1d62fa826aca514daa096571286ac77dcf05f00734dde69f8', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x48', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xd007058e9b58e74c33c6bf6fbcd38baab813cbb6', + gas: '0x3002c', + gasPrice: '0x4b2dcdc04', + hash: '0x804e7b2c8b74700c58f930f56e09e49a037b9dc454245ed87e469af5d73d7db6', + input: '0xac9650d8000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000c4219f5d170000000000000000000000000000000000000000000000000000000000076e40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004aae0a5d29921ff595000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004aae0a5d29921ff59500000000000000000000000000000000000000000000000000000000643645c700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a00000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x18727cda00', + maxPriorityFeePerGas: '0x3e95ba80', + nonce: '0x102b', + r: '0x7527fd3053f801b20b55ae53a479a4fa15ce6fc6fe85f8f651995f65921d2c0a', + s: '0x7cfbe3d717d5e8db13d0a72c30e6716a81ae3f79dd209b9fda4a10c38f43a0fd', + to: '0xc36442b4a4522e871399cd717abdd847ab11fe88', + transactionIndex: '0x49', + type: '0x2', + v: '0x1', + value: '0x4aae0a5d29921ff595', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xb1bb676c7d99e64e8aa95a7a2a22b962596e041f', + gas: '0x272a4', + gasPrice: '0x4afe1eb84', + hash: '0x9944ff3b953f8a03d29719d2f1921d2f7ad23f28435aabc7a1cc16633c4c3efc', + input: '0x1249c58b', + maxFeePerGas: '0x5a9bf167b', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x12', + r: '0xe8c011f8dffc52c797faa8deac946b39ffca8bf3ab44126a40bb506f1cf02386', + s: '0x5313b99bfba1bad60fe829b008341fbd8269cea4d4fb5843ac7f4b1d130088f6', + to: '0x5f5cf9f5eb0e1dbb2b9ec771e015575d2e80eb6e', + transactionIndex: '0x4a', + type: '0x2', + v: '0x0', + value: '0x2c68af0bb140000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xeb5730d84f55206cdb742379c22c7c6abfc88ae9', + gas: '0xcaf8', + gasPrice: '0x4afe1eb84', + hash: '0xb6b4ef98d38a6a05809d1bf3f54ad65ce4c5b5ed5ae5bb77efc9448b46809735', + input: '0xa9059cbb000000000000000000000000a0d139723d6b9ddd967055e9af10734faf6daca600000000000000000000000000000000000000000000130ee8e7179044400000', + maxFeePerGas: '0x5fddbdc56', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x4', + r: '0xb73372f12b0891276107875cbf41880a5d908b33cfa4e7951f193de4876c16b5', + s: '0x058df26ec5a80b5b8796524849e637c97bb08e9168f5f86b68eafad64b1b4f5d', + to: '0xa1f7c9c6d19e2d0bf20729cb0bf03338a90bed9b', + transactionIndex: '0x4b', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x80c67432656d59144ceff962e8faf8926599bcf8', + gas: '0x186a0', + gasPrice: '0x4afe1eb84', + hash: '0x93b1efe0e8e99c39e0196bd596d4558863ffa78edc8c3b7a223a6a12a7b39ad4', + input: '0x', + maxFeePerGas: '0x45d964b800', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x41192', + r: '0xbf67e3864f000307e7af8acbbfc7961a3fd0b6b1372eb29d42de824a161068b8', + s: '0x018ddbd9adc27937567010cb339711b2730e534f81e34744e989489246c3a01a', + to: '0x585e94276ead330002fa0c51f3952be45404e1e8', + transactionIndex: '0x4c', + type: '0x2', + v: '0x0', + value: '0x1342a7adc76503d', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xcfc0f98f30742b6d880f90155d4ebb885e55ab33', + gas: '0x5208', + gasPrice: '0x4afe1eb84', + hash: '0xa7665ef46de3416737bb9768e48908a625d89395dfe14e47f863da8fea76db6f', + input: '0x', + maxFeePerGas: '0xabbb0e178', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x42473', + r: '0x759cf933d5eaa4ae2424d1b0a3f738e6426f46aae34fbfb728fcc5d44bad86d4', + s: '0x48ba7d2d59c11b2924f4c5cec339a13f2e488a30167db2d5f5e0e66c9dcd4f45', + to: '0x88c5f536d1514800dfd328d1e8dc2d8f3b4d60e4', + transactionIndex: '0x4d', + type: '0x2', + v: '0x1', + value: '0x320ec7c4e2a000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xe4edb277e41dc89ab076a1f049f4a3efa700bce8', + gas: '0x186a0', + gasPrice: '0x4afe1eb84', + hash: '0x28d9b81fe5974728f846e2c752a43dae559687dfa4aa5732c184e25e65dde89f', + input: '0x', + maxFeePerGas: '0x45d964b800', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x10a8f', + r: '0xe52632ff849af71f4d046b96682c9dbb1ce0991c424db42d45b013275f8ae538', + s: '0x09bbb3a4b6135e7b48116ebfaeb37c92fbfadf5a5ba590e11e4cc96095110326', + to: '0x72cd4e3777e0df0a53a991f55fe816329d9f7c21', + transactionIndex: '0x4e', + type: '0x2', + v: '0x1', + value: '0x12312e6a272a00c', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x80c67432656d59144ceff962e8faf8926599bcf8', + gas: '0x186a0', + gasPrice: '0x4afe1eb84', + hash: '0x2ed95ae311604dda2a370282bd6f3449cc1a4f2756f118f1aeb1d60c98c90ebc', + input: '0x', + maxFeePerGas: '0x45d964b800', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x41193', + r: '0x41f1b4ea4b9948a5bdd2e92f0f51922c450c6fa334d9fce39d27207799d1c2dc', + s: '0x2f09fd651476778e7eb470b5c1b1f5987690b09c4140b95b601b0f89d37cfe95', + to: '0x5eca6ce07dc82e150f23a988d2f6b29631ae2dbc', + transactionIndex: '0x4f', + type: '0x2', + v: '0x0', + value: '0xd889b3bb0f602d', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x4c9af439b1a6761b8e549d8d226a468a6b2803a8', + gas: '0x5208', + gasPrice: '0x4afe1eb84', + hash: '0x04bff1f526355878a5a79105a6fa4a4947ec23a6267afb8a2e7c7ce40fa2eda7', + input: '0x', + maxFeePerGas: '0xabbb0e178', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x33c48', + r: '0x56198513035d28dd33b6f52996425678e19068c5aa465426b217e317ed060ccd', + s: '0x34774b646c8d2767ceb4ae3eed4d1c4a7ffabb76a3abd516500dbd3ad92574a1', + to: '0x6bc39906da272535c3cda74aada15366c44badd0', + transactionIndex: '0x50', + type: '0x2', + v: '0x0', + value: '0x57979784eff000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x17fb84a661d2f5f353d257a6fafc3d38b97da83a', + gas: '0x4878a', + gasPrice: '0x4afe1eb84', + hash: '0x78e4f8d6d388ebaf4a1b43f3232b97a5f25655ab2e18b2c8cf509940f0a57a62', + input: '0xf2d12b12000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000009600000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000017fb84a661d2f5f353d257a6fafc3d38b97da83a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000fe080f9d773f7bc4d00cfdbc84408712536927c9000000000000000000000000000000e7ec00e7b300774b00001314b8610022b80000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000064363b9c0000000000000000000000000000000000000000000000000000000064436a9d000000000000000000000000000000000000000000000000000000000000000072db8c0b000000000000000000000000000000000000000055796030a90137f00000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b71d8b8e3d000000000000000000000000000000000000000000000000000001b71d8b8e3d000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004000000000000000000000000be9371326f91345777b04394448c23e2bfeaa8265c704b53dbf792236eed1b294a4576c12e61685bf06bbc766717138bf1e7edd500000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000fe080f9d773f7bc4d00cfdbc84408712536927c90000000000000000000000000000000000000000000000000000000000000040b3f1402e9455208c9664fd784ffc4995d08c39bad48c8994574c55031a432c553546f016378f00b18a2af71bb14547baf60b6531e2b3846f66de01b61d5e1eec000000000000000000000000000000000000000000000000000000000000007e0017fb84a661d2f5f353d257a6fafc3d38b97da83a0000000064363fa714b3694381555bc394cc0dfba14401a2e6e2a103af5e6ecd7d47f1cbb4242256807c5b993754489be391ffac8291f413f2270fca507c36a485e77c30a6cbc1c1000000000000000000000000000000000000000000000000000000000000011dd2000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000017fb84a661d2f5f353d257a6fafc3d38b97da83a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000064363b9c0000000000000000000000000000000000000000000000000000000064436a9d0000000000000000000000000000000000000000000000000000000000000000360c6ebe0000000000000000000000000000000000000000faf73bc19aab78a80000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000be9371326f91345777b04394448c23e2bfeaa8260000000000000000000000000000000000000000000000000000000000011dd20000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000925f2e84bf000000000000000000000000000000000000000000000000000000925f2e84bf000000000000000000000000000017fb84a661d2f5f353d257a6fafc3d38b97da83a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011dd200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000011173ab0545f5b0f66005dc939c112d62517cd3c7af924ea3de2acdfb153ac7d79ac6498b24ed19f9d7e28267807f9745320c104d38388de01d723f540a41f0599f667ee66f59f02f291e822b78cc5afdcbe5fe0ae9837edfb5fb7b05aa4741d8279f6165f5fbe78cfc64738fc31c2b07d67d6e62984a87b8bd9cd5b54cd1e19d8ad2097c33b2f3b9ddb8d17ae1a4c46db08358602cefcec18e9ee88f4442f88a4bf122b8e37844f6a89a4f1c65a23c56a5755227f515e72deb64a600fdc4b059174aad4416d2a179bc57f8b84ba9ed2667a2befd75280091d8a861b0d3aca6119c8c0c1588ffa4f9a4caefc9532dc7aa31f711da2b112fe6b5a7bf29101df6fb34cfddda642fe5466fe08397bca3da9de8238622cce70b493e9f9d382b677c0bf65fb1c7f600e101b72c1eb4de0dc9e78c11c5b93b730fc37160b79d6e4a680f3faaea664643ed4cda9c0b98b402920642aaf8c3f43f50660cbf24f4830f1914a952b4ef4945010d54e4648b15b9c60b61fbb9c369b0a88e0dacce742f413424e86f655bd8a1adbbe325db62c241e236560b22bdee51b0c4891d9b98f892facef3d02a4de31bb51dc0c2d6566babfd3b6a24bb45f453a7d44ca41200fe6ad2fa6e29bccd4586238fcfe090bf77dfcd81c40788ad6a3b2bf6850917f5652f6d667fdcca82aaf7113b1cf7e93b45bfe3c42643711581ebf8cb4de854d92cb17fae64184487b4716217f80905633831ca5c512c3286ecceb89a409168ddb344c3a32000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000360c6ebe', + maxFeePerGas: '0x5b122c283', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x290', + r: '0x0ffb80eb321c5882261b75971226c4ea3280e4e7f13b699ac3655b1a918ceb92', + s: '0x12b0f3cdf17d32f848d129e17af8a6fb1ed15fbdd089bccb9c119b4ddbc16c56', + to: '0x00000000000001ad428e4906ae43d8f9852d0dd6', + transactionIndex: '0x51', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xb976d01275b809333e3efd76d1d31fe9264466d0', + gas: '0xb4aa0', + gasPrice: '0x4afe1eb84', + hash: '0x39fc3a2f506b038e3b502727345edcf6c42127bd97c906bf5cd69c1d5e9ceec4', + input: '0xc9807539000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000400010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002800000000000000000000000caafb4c342b69dadd6d791c56ba7d1b000000be8010f010c0b030009070a02050e04060d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000019b1f4200000000000000000000000000000000000000000000000000000000019b452800000000000000000000000000000000000000000000000000000000019b52d400000000000000000000000000000000000000000000000000000000019b5c4300000000000000000000000000000000000000000000000000000000019b5c4f00000000000000000000000000000000000000000000000000000000019b5ec200000000000000000000000000000000000000000000000000000000019b5ec200000000000000000000000000000000000000000000000000000000019b608000000000000000000000000000000000000000000000000000000000019b608000000000000000000000000000000000000000000000000000000000019b697700000000000000000000000000000000000000000000000000000000019b70aa00000000000000000000000000000000000000000000000000000000019b879000000000000000000000000000000000000000000000000000000000019b9b9500000000000000000000000000000000000000000000000000000000019be57700000000000000000000000000000000000000000000000000000000019c035c00000000000000000000000000000000000000000000000000000000019c394000000000000000000000000000000000000000000000000000000000000000066e66d4d238abf2a84f5fc465a2e41735d21c720bc516264bcb846d423ed9efeaad22d072207791393fbd6ce8ed4a4365e8b24f93f4141483c4bb929cf68488ec49cac06d656d22b921a569e39b94de94ec68fdaca2274ffcc97cfc60a11f012702cb49c28a4d286875512b500bc4ae3bc2ded30381fb4bb050457302292c7f0f60b5a478972e9a36e306fba6a8464f4c4c1e1ab47dc59601df9caecbb82d544f692563216de85072ae876992de6b9fa1ad8c40e7104e51375a50350a673d44530000000000000000000000000000000000000000000000000000000000000006618235e5c012f1fd7489d13b278a66b678a3ac29a196bd40681ee39ed3dfa7111b6255c44008a68b2aa5e2ed7b7e6129989edbb66017570b23e1ba6f3fb6625d44996832badcc32a6b4057181b1e171f84c05d5d7469b557b870980d32807d930a1549998782d5637e4ae74f6d371b8324f7abb1590a12ca961454fd26945f8735cbd4b5a079631be754fce2cc0f24da5a0cbc010ee0f98a4ef46b39045df0d00db817ce3c076fcbc70e3d85e9c4bea1eb5a33dea5b19dad02ca8d2e102e1902', + maxFeePerGas: '0x6b5cedf1e', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x1b09f', + r: '0x7e01f3f231b2d8a9fb7e56043e21e8896ce19fbeb33517d407427d87631e7655', + s: '0x16f1192dd60fd55c7f917ba2a9fd6e7241f9330e795d08a4a38881145f3107a4', + to: '0x98e3f1be8e0609ac8a7681f23e15b696f8e8204d', + transactionIndex: '0x52', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xcfc0f98f30742b6d880f90155d4ebb885e55ab33', + gas: '0x5208', + gasPrice: '0x4afe1eb84', + hash: '0x9c850596d23bfc226f4177a827d27cbfd13373ab3c6c8f083de69da4d4aba82a', + input: '0x', + maxFeePerGas: '0xa9b736ffb', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x42474', + r: '0x915fabc6157bd8cd9a68c1014f8b732ba10e45933c47132b6d8d2ed13ca7a3f2', + s: '0x4f83e6070627d7255faf3ff9bd831a78f7704b2155263edfeec7008eff435ba9', + to: '0xedcb80a23f36923377ca239aecb6e582ef6362c7', + transactionIndex: '0x53', + type: '0x2', + v: '0x0', + value: '0x21afacba393a400', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xe4edb277e41dc89ab076a1f049f4a3efa700bce8', + gas: '0x186a0', + gasPrice: '0x4afe1eb84', + hash: '0x30f4c85342e02c43297d2720b034d8b724f38281d34a7c2dfb84328317da549b', + input: '0x', + maxFeePerGas: '0x45d964b800', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x10a90', + r: '0x0eb75546ed9b0a261b663e095c7f93f10bdc8900a2cf9fb0a1cb4afb0e40a966', + s: '0x76961fa9c1f5c5054339c79950581cc8b32c5fe15e9730ac2af740cddc9b2d98', + to: '0xd44f54bd8cacb0bbf5f568be436f3ebb5204022e', + transactionIndex: '0x54', + type: '0x2', + v: '0x0', + value: '0x11ba60e96de00d', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x11f813a59d746eb051f1249e17c01ed4ecb7637a', + gas: '0x1e7ff', + gasPrice: '0x4afe1eb84', + hash: '0xbc83390bc39958798cb3066bf330a5611945aa5ca5112a55b92d6c689554ad60', + input: '0x5c11d7950000000000000000000000000000000000000000000000fae266e7ce1bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000005f3dcfa04bd883e89de8970424a77504fc9e4a390000000000000000000000000000000000000000000000000000000064363f7b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000675bbc7514013e2073db7a919f6e4cbef576de37000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + maxFeePerGas: '0xb7f54b003', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x186', + r: '0x300c8ab86d498fa6ca5368659b988ca063d6795c0708ebd6797c7932d10671ef', + s: '0x4cf593213a0c878c0ee7faad552d0c5916162a5a2d2a64c335b75f6194ca9403', + to: '0x7a250d5630b4cf539739df2c5dacb4c659f2488d', + transactionIndex: '0x55', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x30a465f4dd49105cc535e6607b4e47d124c3ed1f', + gas: '0x1afee', + gasPrice: '0x4afe1eb84', + hash: '0xf0a99df33c3ab18658dd8625fd41cf41dc83dc44f19688f3cf17f04514a0d4cb', + input: '0x44bc937b000000000000000000000000f65c1595b64e73dcb551bd7eedcb43eb2c769be200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000006436426400000000000000000000000000000000000000000000000000000000000000413d3a424e422e424e423a626e6231356d6e366d766a3364636c6c6b6c3268776c3676633439797565756c3661656d6573733432713a323037393138323a74653a3000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x63ce38e90', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x2', + r: '0xa453f3a177d595a27298500aa7e77787bc20907c9b00f30826c998ee7c1dff85', + s: '0x7369e5b46c440dfad01acefe6f26c5b708b19210b52d31af4be4d73b262b1d3f', + to: '0xd37bbe5744d730a1d98d8dc97c42f0ca46ad7146', + transactionIndex: '0x56', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xcfc0f98f30742b6d880f90155d4ebb885e55ab33', + gas: '0x1d4c0', + gasPrice: '0x4afe1eb84', + hash: '0x080d36e7596e73af440400f2542d2b93c0b3cf3af6cfe400ac3fd469d958b338', + input: '0xa9059cbb000000000000000000000000cdcedde8f0690fa8da7cdacdbcce7c8550bdce390000000000000000000000000000000000000000000000000000000006bb7af0', + maxFeePerGas: '0xa9b736ffb', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x42475', + r: '0xfd42464897da80d7e801c323400d9fd9023320a8b3d4f0567793443d8348f4ab', + s: '0x40e14c1cc01cb5170ab3f0a1add8b2b2d65b7da65e29480d3c87df1ee67c3d77', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x57', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xddeb598fe902a13cc523aaff5240e9988edce170', + gas: '0xb4aa0', + gasPrice: '0x4a8badd84', + hash: '0xc27d72675970b34668bea3e241a10e3f8e963a9bbae7b69f1cf27dc6aecbcbe5', + input: '0xc98075390000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000004000000000101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000008b1e35ccde892fe56c722420bdc588160000e9c401020106050e0c08070a0903000f040b0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000878155e000000000000000000000000000000000000000000000000000000000878cc79000000000000000000000000000000000000000000000000000000000878cc790000000000000000000000000000000000000000000000000000000008795e140000000000000000000000000000000000000000000000000000000008795e1400000000000000000000000000000000000000000000000000000000087ae02300000000000000000000000000000000000000000000000000000000087ae02300000000000000000000000000000000000000000000000000000000087bce3d00000000000000000000000000000000000000000000000000000000087e54f100000000000000000000000000000000000000000000000000000000088009a000000000000000000000000000000000000000000000000000000000088009a000000000000000000000000000000000000000000000000000000000088215d80000000000000000000000000000000000000000000000000000000008828818000000000000000000000000000000000000000000000000000000000882bfc4000000000000000000000000000000000000000000000000000000000884a230000000000000000000000000000000000000000000000000000000000888fde4000000000000000000000000000000000000000000000000000000000000000697b49b869116d98c339ccec078201a086eeff8a1079a0ad8cf549e03e5116eae935d24b28b7999659595eaaadf4cff5e3196f5682ac22ca1ddcebb39026b69d9865d7c0f6553fa9c551b03d4f8a641755ea3347ca4c6a65162759d51df61c821223e39ebde460b257af0d8ada9bacba166054fb28dd7c0111e708ba749e8a808fc8da138d00e279ae2779606d364348d5c46ba6f37d5e8521ccfce6d940c24273990bd131c37ce33e29b82bb5551c7efd38aac7dfdf8d08090b76566ae18bcf000000000000000000000000000000000000000000000000000000000000000063d03f6364fd18561ca03cef54f44484f61bb3b620f99adfddef40d6565ffe5be7bf8aaec763d43f79fcbe7319c620ba4a407a7e49c9b7ec6093e60b5bf1a772d62999830f88b3d844988b09e5228487fde2ee2b3fd12abf54e7cbbf97221b74830e567ff8d676921f7275bd9a446e16287c1a82fabaa1b4272f35915eb03bd432a3647b9125bf089a81c231c97bdbee706fa68e43173cc9fa3e6a39b8ba825573d107a84d20a0db4e61fa881aba7c527cd83fd37b3de86dbaf6cfafd69de400b', + maxFeePerGas: '0xefa4ff21e', + maxPriorityFeePerGas: '0x3473bc00', + nonce: '0xe555', + r: '0xeb2632aa69af6c352644493291a00b9ed63fc8eb439b138bf9dd298bc5ff2545', + s: '0x405b026b89862bc6b824067d2c6a6e1ae354ab735d1dc3b47c159d6449fd3a22', + to: '0x34b41725cf934866a4b89d65395f15af2cb9ae89', + transactionIndex: '0x58', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xa4e5961b58dbe487639929643dcb1dc3848daf5e', + gas: '0x55f0', + gasPrice: '0x4a817c800', + hash: '0xf062f350fcb7ceb7eda9cb8265e9a5922249ceddcb1a40b67ba1af43bb5c8597', + input: '0x', + nonce: '0xc89e2', + r: '0x49b22ad44cbe9b0775944b6153021b501f2bb5a4aacf9a10ee8da7df87ccdfcb', + s: '0x0dee73e0614bdfdb0e5d2e6b30d4d2f53a96be5f1421bb9d903e814989790ed6', + to: '0x2c3113d1a6433d6c88ae92888346cf7f23fcb171', + transactionIndex: '0x59', + type: '0x0', + v: '0x26', + value: '0x9ff516e65e000', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x48c04ed5691981c42154c6167398f95e8f38a7ff', + gas: '0x2bf20', + gasPrice: '0x4a817c800', + hash: '0x76a287becd9daa920e1d26b9ee1843d03ce6df36b5434076738b90c323ba3a82', + input: '0xa9059cbb0000000000000000000000002c20b005df1d28e09d35b2d2b683779faa3e06cf0000000000000000000000000000000000000000000000000000000005fb7191', + nonce: '0x97e97', + r: '0x316288aa6f36438a65c22bd08bfcc8a6ac6f038e17f5b704b0ef00d770fbe83f', + s: '0x2263c2789374197fde54cd758502ca6b2b58de839d0be37a3ef2537b415329d2', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x5a', + type: '0x0', + v: '0x26', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x876543cc6549d633de96b62a51f79160a904273d', + gas: '0x18b33', + gasPrice: '0x4a817c800', + hash: '0x51bfb597e154b9df1dfab45885c8219dd3ba99c0fa80631acba6b635471f74a5', + input: '0x6a761202000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000004c15ed742031843d43d4495ad4285bf6323efa3c000000000000000000000000000000000000000000000000000000000744a820000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082000000000000000000000000876543cc6549d633de96b62a51f79160a904273d000000000000000000000000000000000000000000000000000000000000000001569d1270ca49270c51a5a43fe149d858171ac371537a8b5dc3a97116fe33c0ba7dc8d9bda9230591b7f10e2bdbe37c00771c631ed5fd3dcffd8d501e9f5fcc1a1f000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x4a817c800', + maxPriorityFeePerGas: '0x59682f00', + nonce: '0x7', + r: '0xf3d9a7ab2185b2d61daa3e9b5aa4536817f94f496509a849ea882fb716c58f87', + s: '0x6633d928531f98b3f501f137a52bf139918608181de3957efc41238b60b6fdb6', + to: '0xec5f4829854d1f0478b5b7a1c6f7dc50c4545fc0', + transactionIndex: '0x5b', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x490ac3d62b3e71621687724ad894b2f15eee1167', + gas: '0xda8f', + gasPrice: '0x4a2fbf519', + hash: '0x0d7b43abc4b92337b064b74f7e2ff87c337cf0a5690a54dac34f2edf555d0733', + input: '0x095ea7b30000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', + nonce: '0x2ee', + r: '0x932266958a75019c8b5b922453b1a17acd707cc942d51fc9f569aeb256f44b82', + s: '0x2378e8c4aa7059f894ff3dc7ac65108d6649c75d347ac99de96997486a931bcd', + to: '0xee8253a7c009fad5fe047af648d29586c24d56d3', + transactionIndex: '0x5c', + type: '0x0', + v: '0x26', + value: '0x0', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x8cd94a71532f1f361f79a715f862c3ac621a9ceb', + gas: '0x10231', + gasPrice: '0x498586792', + hash: '0x6d9cf19ee0ca152ae9c5634caae877ab6011a70ee330225d9546589d74b3e087', + input: '0xa9059cbb000000000000000000000000b8001c3ec9aa1985f6c747e25c28324e4a361ec1000000000000000000000000000000000000000000000000000000001bb75640', + nonce: '0x0', + r: '0x2e518bb0c931b43e236d7c56ed2526fd9b0842a8add6ece75acc76380237a762', + s: '0x2b411dd4544bd94c7dce7f65c4dc0eef761568f12cb56a9da80a847545d6ac55', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x5d', + type: '0x0', + v: '0x26', + value: '0x0', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xd29a9fd180fb8da993576959bc9965962d7112b8', + gas: '0x10231', + gasPrice: '0x498586792', + hash: '0x1fef29d91355611b129ff67f970f6d1da96104df0310bd3b72237367723757d8', + input: '0xa9059cbb000000000000000000000000b8001c3ec9aa1985f6c747e25c28324e4a361ec1000000000000000000000000000000000000000000000000000000019b45a500', + nonce: '0x29', + r: '0x486be4009aab14d1968cc4f6ea0f60bf2e60333737051ec4c16be637ad9f92be', + s: '0x3fdaee939cae609f0d789d54d5bf5ab5edbfbf927a83bd4e5f5376b9898cb594', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x5e', + type: '0x0', + v: '0x25', + value: '0x0', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xbdac639e17f40fe595a6f683fb031d5d14e454e2', + gas: '0x10225', + gasPrice: '0x498586792', + hash: '0xa1ad417520e8fc7d9c8d480e98b929487614daac0c8864879182dfad732054ef', + input: '0xa9059cbb000000000000000000000000b8001c3ec9aa1985f6c747e25c28324e4a361ec1000000000000000000000000000000000000000000000000000000003b9aca00', + nonce: '0x0', + r: '0x50e569b6a8052f1a7f8c142dcb5e9a6f0b0a9bc008020551cb095c413b8cd0d1', + s: '0x5e8e22aea92826c27fc90b46d5f104b95ec52613d3352efa56af8023eed21cd0', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x5f', + type: '0x0', + v: '0x26', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xf87acd73088f39c8fcaa77a036d9bdf3671cf0db', + gas: '0x2be83', + gasPrice: '0x497104f79', + hash: '0x7fcdfa9acd5255dafc8ddff55a2d8f06c93476eed34b511b7f504fc3eb0a4fa1', + input: '0xe449022e0000000000000000000000000000000000000000000001b1ae4d6e2ef500000000000000000000000000000000000000000000000000000000000000e4235bd900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000371a0985d104c706cafa26ffb990f55ba55bf6c5e26b9977', + maxFeePerGas: '0x60cc725d8', + maxPriorityFeePerGas: '0x22c92df5', + nonce: '0x20a8', + r: '0x28ba948112aa8cee0b471ca955055a4825f6f563ea34d36a9da0e6e146a2c433', + s: '0x03b1bb8df287aab578a3dd40f302faeb043ac5e5c2f34b22ab9e0d27e73b11b1', + to: '0x1111111254eeb25477b68fb85ed929f73a960582', + transactionIndex: '0x60', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x03aec61b209f8017a6a8aa974dce8252c69296ca', + gas: '0x13615', + gasPrice: '0x492148684', + hash: '0x69297bc8fafd076c18fa178358ebf0782730e1efe1c5d0dc057c4a42c7d13bc7', + input: '0xa9059cbb000000000000000000000000343821d3226c9f2f9a988c3d95c98c8c93cb75090000000000000000000000000000000000000000000000000000000005f5e100', + maxFeePerGas: '0x979be1ff0', + maxPriorityFeePerGas: '0x1dcd6500', + nonce: '0x6', + r: '0xd9d01006b01c45425b865e62f65c7c8cddc2816681ccbb29a08ec5287b49ea43', + s: '0x7127820875586008d07fafecdbd55103e102d921d203c095e9992efd51cef753', + to: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + transactionIndex: '0x61', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x57e65e1099ff2e2f1878ba820deb2a59377ac79c', + gas: '0x2bff5', + gasPrice: '0x492148684', + hash: '0x885dedc7616cefc16490d6dbec79b7ccc7dd1615367d2c4101084d60f2fdbea1', + input: '0xfb0f3ee10000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d975d41e5000000000000000000000000000593afcc8ba197e8c1ff17cfd2f1a94e8119e79c0000000000000000000000000004c00500000ad104d7dbd00e3ae0a5c00560c0000000000000000000000000079f725f5c91384615270135d113efc7adcd8ee390000000000000000000000000000000000000000000000000000000000000776000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064362d6800000000000000000000000000000000000000000000000000000000645dba680000000000000000000000000000000000000000000000000000000000000000360c6ebe000000000000000000000000000000000000000037b453c98f8a79a90000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000001fd5129130000000000000000000000000000000a26b00c1f0df003000390027140000faa71900000000000000000000000000000000000000000000000000000000000000633b5706d50a116101ac05ae95e2183168bb41cdfa3ded99a4e155291e6d6674462e6131fb77cd79a066548742049e828bc322115be1d9e5449d717febef7985ff00000073f8473e961ce955c014453147c9b5f24f0199ad5210ca60aab99b5b0f1394770000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x5057e4dc0', + maxPriorityFeePerGas: '0x1dcd6500', + nonce: '0x5', + r: '0xb58385ce65a6a3cb5669f5f1ab1f6f2256ecfa7518ec314ec41eb98bc0837e60', + s: '0x29ea698c40672c0dbd004d705439542f22791af7a1c1e37dcbe83b56b9e7c9be', + to: '0x00000000000001ad428e4906ae43d8f9852d0dd6', + transactionIndex: '0x62', + type: '0x2', + v: '0x1', + value: '0x4f94ae6af8000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x231d3839825cbfa5887d5539fb297539627d74c8', + gas: '0x5208', + gasPrice: '0x492148684', + hash: '0x03a87bf75fb7637fff63350513f286fdf23a5c0c5a561122f1e768c76ec6ea2b', + input: '0x', + maxFeePerGas: '0x9474decf6', + maxPriorityFeePerGas: '0x1dcd6500', + nonce: '0x13', + r: '0xb43ba165e5311936a02abdd5ce68b320deaa86957455f2b81493e7814266ea34', + s: '0x4e607d1700fec1e31441aa8b1f5c6b0df6604dea4e2008503bece4fc892f82ba', + to: '0x599f79493f478a8899c9e0b9ce986030e40b8192', + transactionIndex: '0x63', + type: '0x2', + v: '0x1', + value: '0x2c68af0bb140000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xcc175d966ea179dddf2cd2d2a79973da5ce387f1', + gas: '0x15f90', + gasPrice: '0x491f600d5', + hash: '0xf76389acc92906f1290f3a854aa7bdff09ee6b7194a6cdbe3867b3b2f7b16fc3', + input: '0x2d2da806000000000000000000000000cc175d966ea179dddf2cd2d2a79973da5ce387f1', + maxFeePerGas: '0x491f600d5', + maxPriorityFeePerGas: '0x491f600d5', + nonce: '0x14', + r: '0xc529468d6f5ac6d3a93472c2342c571a7e173217fb2545fbe84d9698965b87dd', + s: '0x4f2bbee0e0b09d3030df61f434611ca2c7c6fcbd3a2172a0f787a1e3bee3bb40', + to: '0xabea9132b05a70803a4e85094fd0e1800777fbef', + transactionIndex: '0x64', + type: '0x2', + v: '0x1', + value: '0x1b9ac619e7a000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x66aa29c0d03bf1577c69748faac2c74b2b7b5176', + gas: '0x5208', + gasPrice: '0x49147ae63', + hash: '0xa7cecd23fab592aa7f3aa37045b16a35c73b2bcfa51d9d5a7a7d15424b78e4af', + input: '0x', + maxFeePerGas: '0x4e3b29200', + maxPriorityFeePerGas: '0x1d008cdf', + nonce: '0x2', + r: '0x7a738a0fd33a5d35321d30e38e983c559b4959da75b4047b6a24a7b39aad42a3', + s: '0x133773f7173e767f09f91abbc05c0189ea2b4523f4a0be0ba0cb608fa1bb2ecc', + to: '0x98bc423fbfd9935ab439c70eaa2f503d193b8827', + transactionIndex: '0x65', + type: '0x2', + v: '0x0', + value: '0x18b5d979b5acc8', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x8264e9e0f4cbcbbbb3f8ecaec0a625b590ae790e', + gas: '0x9ac1', + gasPrice: '0x48628c484', + hash: '0x0fb59a5f28f25c78c39c72e0232934bd6b8646064ddd4d66e8c8b5695fa8184b', + input: '0x2e1a7d4d000000000000000000000000000000000000000000000000016345785d8a0000', + maxFeePerGas: '0x7527ba338', + maxPriorityFeePerGas: '0x11e1a300', + nonce: '0x2311', + r: '0x4d9cd6af35da7055ec9f7666a8775974617c78416497d26b607a4e00e6e24df0', + s: '0x0473e36c9a23e1f51baf6e937153de71c26c04be9d2d3086941ad041afb53160', + to: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + transactionIndex: '0x66', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xba973782ea45705bbf3d9146d1d0c7085ea67d09', + gas: '0x3e51d', + gasPrice: '0x48628c484', + hash: '0x2343a15826c2683c027de01886924efeef1418ca43eef7f1e386e1e691cc14a4', + input: '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000643645d300000000000000000000000000000000000000000000000000000000000000010800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000195350072d49c51359cebc00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000308516e6daac88d719af5a6d7ea2a82d8c8e7356', + maxFeePerGas: '0x83a687cfb', + maxPriorityFeePerGas: '0x11e1a300', + nonce: '0x78', + r: '0xffe855a41faa47c558849944f960e16ec0b51b50d7232588df35649a53d3c8d2', + s: '0x780adf86a100a512bcb52d4d5b7942a0c2ffca51f888f606b0ff57da3182af65', + to: '0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b', + transactionIndex: '0x67', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x7b229afc19d062e215426cd6ccddae15eec72bd2', + gas: '0x20fc6', + gasPrice: '0x48628c484', + hash: '0xe69e2160e90c6ef7f1a72c8bf4bdaf8e04fd679990acbacf1e9d9942eb2e21e3', + input: '0xeb6724190000000000000000000000007b229afc19d062e215426cd6ccddae15eec72bd20000000000000000000000000000000000000000000000000226abadc42f800000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000ab5b4000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000001000000000000000000000000007b229afc19d062e215426cd6ccddae15eec72bd200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x7cf9f675e', + maxPriorityFeePerGas: '0x11e1a300', + nonce: '0x14', + r: '0x5913f6ba1e292387d9edbd31c42cea5781ef507a54f5f0ff9b24d9e51324ae1b', + s: '0x0062fb9c767a87c8bc796bf3d813d8a078f6a4a1c34edb566910d0c5b853d16a', + to: '0x32400084c286cf3e17e7b677ea9583e60a000324', + transactionIndex: '0x68', + type: '0x2', + v: '0x0', + value: '0x2284df9f711176c', + }, + { + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x00873b5fa9dc2a7336bd7d9d9ec187235d75f65c', + gas: '0x5208', + gasPrice: '0x4846371f5', + hash: '0x0853356e276a49527201727e5e994403d7071fd8c20c4fe3513be09eb26422da', + input: '0x', + nonce: '0x4f', + r: '0x6e20c681c7547f14baa4b1d4433abdaaa06f8df72dd0266e81f0d5748e71f7cf', + s: '0x4a388342be339075192c0f59bd1cde4e18adf73cf794fc74fd04c00b7d465eef', + to: '0x974caa59e49682cda0ad2bbe82983419a2ecc400', + transactionIndex: '0x69', + type: '0x0', + v: '0x26', + value: '0xb2c858de4655390', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x00bdb5699745f5b860228c8f939abf1b9ae374ed', + gas: '0x27a42', + gasPrice: '0x483db8aca', + hash: '0x5c9d87e4015d92c11f2153f8133f8709294a3aedcf446523b48d8ca9f90cf999', + input: '0xfb90b3200000000000000000000000001522900b6dafac587d499a862861c0869be6e428000000000000000000000000000000000000000000000000000000000005f930', + maxFeePerGas: '0x897d11e3c', + maxPriorityFeePerGas: '0xf946946', + nonce: '0x18ada3', + r: '0x41d5426a523b9e1045201a5145cd78109077cc1fc2f9d5882f6b58d5f691a3b1', + s: '0x2a79396d96f9c362f0dd287b9fdfd6f39367a8964b3b96895a3f9737b1f67b80', + to: '0xffa397285ce46fb78c588a9e993286aac68c37cd', + transactionIndex: '0x6a', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x00bdb5699745f5b860228c8f939abf1b9ae374ed', + gas: '0x27a42', + gasPrice: '0x483db8aca', + hash: '0x410a2d3073786f43ba1c0dcd5715031940b1eac224ddfbc09a2533b98e1961ce', + input: '0xfb90b3200000000000000000000000001522900b6dafac587d499a862861c0869be6e428000000000000000000000000000000000000000000000000000000000005f931', + maxFeePerGas: '0x897d11e3c', + maxPriorityFeePerGas: '0xf946946', + nonce: '0x18ada4', + r: '0x13cbb4f6a61b5bdcb4950e324769b71a02eb937594c8aa09769b27f0d88594e9', + s: '0x261f42e105031f0b934b7253f3886c1e89e698443f33244429195ee5a7f07746', + to: '0xffa397285ce46fb78c588a9e993286aac68c37cd', + transactionIndex: '0x6b', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x00bdb5699745f5b860228c8f939abf1b9ae374ed', + gas: '0x27a42', + gasPrice: '0x488d769c4', + hash: '0xd074a2e071d48cd543a4c2f78cbb494a5f5b7e205d2f9f16b749d3e79fc744c1', + input: '0xfb90b3200000000000000000000000001522900b6dafac587d499a862861c0869be6e428000000000000000000000000000000000000000000000000000000000005f932', + maxFeePerGas: '0x9ada766d0', + maxPriorityFeePerGas: '0x14904840', + nonce: '0x18ada5', + r: '0x052804f66111beebc748bcd7926ebe9d4b6a9d0a793656213b15c33415eb4112', + s: '0x6e27a106d4b2d72152ceb54be11b71538539fc8c58101722bc91da558d8d8858', + to: '0xffa397285ce46fb78c588a9e993286aac68c37cd', + transactionIndex: '0x6c', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x00bdb5699745f5b860228c8f939abf1b9ae374ed', + gas: '0x27a42', + gasPrice: '0x488d769c4', + hash: '0xfc7ae9cd5806dcc1bd8521581ce0187472dd6d2551e512e7a5d99e31692ce753', + input: '0xfb90b3200000000000000000000000001522900b6dafac587d499a862861c0869be6e428000000000000000000000000000000000000000000000000000000000005f933', + maxFeePerGas: '0x9ada766d0', + maxPriorityFeePerGas: '0x14904840', + nonce: '0x18ada6', + r: '0x1162bd0ef817cd7729fa1bf0ebef928242f0a63ddf13de691cb9d930c250107c', + s: '0x4486854997407eab272e2af97e6a7515ea40f5ff7d21710b413c6526c5052bd6', + to: '0xffa397285ce46fb78c588a9e993286aac68c37cd', + transactionIndex: '0x6d', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x00bdb5699745f5b860228c8f939abf1b9ae374ed', + gas: '0x27a42', + gasPrice: '0x48631cdc8', + hash: '0x90910adfad4d375b9f1fe068c38cfb61fa27f8f3fffd5449a056410db031af0e', + input: '0xfb90b3200000000000000000000000001522900b6dafac587d499a862861c0869be6e428000000000000000000000000000000000000000000000000000000000005f934', + maxFeePerGas: '0x92b229fca', + maxPriorityFeePerGas: '0x11eaac44', + nonce: '0x18ada7', + r: '0x4fe0a6957957717c5ad46c067e30a0902e445cb77f908a033dbd79b98b9888d6', + s: '0x392ce598e7c79cb36da56f19ec951194cc1d8941c53664dbabf14c9e3fa5d11e', + to: '0xffa397285ce46fb78c588a9e993286aac68c37cd', + transactionIndex: '0x6e', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x00bdb5699745f5b860228c8f939abf1b9ae374ed', + gas: '0x27a42', + gasPrice: '0x48631cdc8', + hash: '0xd4b42ed78389a43e47061ee844c2b68ed631da72ceea389363a9bab05cc8e5e8', + input: '0xfb90b3200000000000000000000000001522900b6dafac587d499a862861c0869be6e428000000000000000000000000000000000000000000000000000000000005f935', + maxFeePerGas: '0x92b229fca', + maxPriorityFeePerGas: '0x11eaac44', + nonce: '0x18ada8', + r: '0x650a4b34cdcd4631c7829a32a134a4c4fddda05d6ce3740febc8b65181fcaf0a', + s: '0x5704562d0e2b28f1513637b6162897b6f9b0b7b5127642970fd053f761d178d7', + to: '0xffa397285ce46fb78c588a9e993286aac68c37cd', + transactionIndex: '0x6f', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x41aa3c59e2d0023765c972ef25067de147095e90', + gas: '0x2aef7', + gasPrice: '0x4832dd404', + hash: '0x504e3f22373700cb294db5b5b5402f45d8c4a02d7e996e52b51a0502a6b7cc87', + input: '0xe2bbb15800000000000000000000000000000000000000000000000001bc16d674ec800007f17690441d1ee627275ba60f1909e51840326e8b087a917a030ef1a58df575', + maxFeePerGas: '0x91d3fadf6', + maxPriorityFeePerGas: '0xee6b280', + nonce: '0x3', + r: '0x15bc32bb35846cd316ea4b2ef352cbde5c4db3e90118a155f7d6d9d56ac42047', + s: '0x332c8e70d2d73246da61880965b6a8e18e2a49029d5c9f44d70a757a40632347', + to: '0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419', + transactionIndex: '0x70', + type: '0x2', + v: '0x1', + value: '0x1bdb3ed2c894e50', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xe370cf76e4aa132b2709a842f6db1978e13493da', + gas: '0xc612', + gasPrice: '0x481641084', + hash: '0x96b93b9a250a2c76261558470c0242115dc1ebda5e1a5206489ee033fb31284a', + input: '0xa9059cbb000000000000000000000000bfa08b5ca8ca1acb8a118725759d0bd6c8039f75000000000000000000000000000000000000000000000000000000000bebc200', + maxFeePerGas: '0x57339f031', + maxPriorityFeePerGas: '0xd1cef00', + nonce: '0xc', + r: '0x4f09c205bc80daf565372757b4dea13e8f38b49f6d61f59e59dc244e2237e9f3', + s: '0x09856fc5ff01fe8b4f8771d78e7d3793db60b112cbb01fa113dced14f6d8d587', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0x71', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x1990bbc7bf55ca3836910bb8064af5aea1aa3990', + gas: '0x12496', + gasPrice: '0x47a3d0284', + hash: '0x0d16cbef0f3df967f3dd0a10606785c4d7ae9bb6cc4ae8018402a5a839a1f497', + input: '0xfd9f1e100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000001990bbc7bf55ca3836910bb8064af5aea1aa3990000000000000000000000000000000e7ec00e7b300774b00001314b8610022b80000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000064363ea600000000000000000000000000000000000000000000000000000000643f791d0000000000000000000000000000000000000000000000000000000000000000360c6ebe00000000000000000000000000000000000000002d7e65655d5e24100000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096fd865af440000000000000000000000000000000000000000000000000000096fd865af44000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000f7d1f4f8a7818ca3d92b1ca01b8051520b054d578e88c852463068f49131297f1cae4402df7b3d67c920a72a48897a5a4a347c03000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000001990bbc7bf55ca3836910bb8064af5aea1aa39900000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c6568f12e8000000000000000000000000000000000000000000000000000003c6568f12e80000000000000000000000000000000a26b00c1f0df003000390027140000faa71900000000360c6ebe', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x17c', + r: '0xef833814a5f922ffb7809d56150f90cfc1ce6d151c7620447ff9e8670b10193e', + s: '0x236c8b6eedb771851d6d7de5a93f6ecf039250754e169f1caee2a45687b253d9', + to: '0x00000000000001ad428e4906ae43d8f9852d0dd6', + transactionIndex: '0x72', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x91cfe6dbb2b98ce6fb549cb3334a90dd3a69e584', + gas: '0x14f43', + gasPrice: '0x47a3d0284', + hash: '0xf80ba14af91cdf4a398fc6d7ab439f721af496428eb789749cb2da23eaf31052', + input: '0xa9059cbb00000000000000000000000008f918c66d54f4c51f9a76cb9a956faab2d49abe000000000000000000000000000000000000000000000000487ef0daa63d5ba1', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x3e', + r: '0x6b04df15be2426dca5090d73052f6eb01d4b495d869ebff7da8f85298cb5868c', + s: '0x2f25a9a6120c3b912ccad0d7ce8eedda62ef4e7bc82fc5557a06f74ed1c27582', + to: '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984', + transactionIndex: '0x73', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xc7d255accc1b4dc16c2856ac4c5193bfe29801f6', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0xb8c7acb46336a721893b6171ce9ae326e8b861913ee8502560798dc03a4b428a', + input: '0x', + maxFeePerGas: '0x62bb2392d', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x2', + r: '0xc09606be9f624ec8f63206c830e3f769e7af2bb6084f63961a786996e408d252', + s: '0x1953afb0eb09319d8aca73c6afc537db8965a79a8751e398c2627ccf70e79737', + to: '0x7ab9889cf7f17ab6303d2992c874bc583f125a2e', + transactionIndex: '0x74', + type: '0x2', + v: '0x0', + value: '0x1c288e25fbbf52d', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x06bda28316d3681cc513d3fb6820b6837e838be2', + gas: '0xed72', + gasPrice: '0x47a3d0284', + hash: '0x585f52cc267bc31ed76456e10e26462e8ba898419cc8b9d59f6f76c5869e4b41', + input: '0xa22cb4650000000000000000000000001e0049783f008a0085193e00003d00cd54003c710000000000000000000000000000000000000000000000000000000000000001', + maxFeePerGas: '0x62bb2392d', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x29f', + r: '0xc6422e0c8c19d97517db3a0e4e791ea556c8fc1a1eaa5fe4548b06df398d8cad', + s: '0x1da6feebf8207e3c861173dd64f96e636ca0681383fae3953ef5bd9885b3e9ec', + to: '0xd44078705456c4f4517a659953f5296e5328f8b8', + transactionIndex: '0x75', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x067872abb9a5ebb9435bedc994d5e276b82c2e00', + gas: '0x81a8', + gasPrice: '0x47a3d0284', + hash: '0x07158ecabeaa23e23a2b4af3bf54be3f29da81f282cd031358c66addaff2e8d5', + input: '0xd0e30db0', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x6a8', + r: '0x560aa95ec05030c84f9edb33ffa6a64f14e95c7edf902b9762c8393e424ee8d4', + s: '0x4fdf9270b586f36d185097e54832e318f1f1e2dbdec3a5b70b678c6c98374387', + to: '0x0000000000a39bb272e79075ade125fd351887ac', + transactionIndex: '0x76', + type: '0x2', + v: '0x1', + value: '0x1aa535d3d0c0000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xf464720e933a4818e332005f65e85ca38198ed0e', + gas: '0xeb04', + gasPrice: '0x47a3d0284', + hash: '0xbe213bb3cf09088600a8a4d6dcaa6e43e22c730a2b79686b99cb2dd23c89b0ac', + input: '0x095ea7b30000000000000000000000001e0049783f008a0085193e00003d00cd54003c71000000000000000000000000000000000000000000000000001ff973cafa8000', + maxFeePerGas: '0x62bb2392d', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x39', + r: '0xd41571e5da0691205d0ac01a2752e6ebd93adb2ab3ee49fc8eca982a5a59eb34', + s: '0x1ef672723869b506f46d903606f702b642a499958642962e358cc3633488dde5', + to: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + transactionIndex: '0x77', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x2d7fdca2a80343dc46ad0129856e8b82ead945cb', + gas: '0xd7aa', + gasPrice: '0x47a3d0284', + hash: '0x16c47e6331c4356d92def58627a88982ba34e0fdc5d38a0967a79faa2ba59c28', + input: '0xa22cb4650000000000000000000000001e0049783f008a0085193e00003d00cd54003c710000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x62bb2392d', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xe44', + r: '0xf65542a721d9f35f30d90288e4e416fed7c107a802adc0d626d732937e3beb42', + s: '0x0cbb23391c0657b540dd143d84d54430d05accf1391a192dce9d4971b165becd', + to: '0x2969fed452f73ea8a87ca427e27b13a40fc390ee', + transactionIndex: '0x78', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x5c8e20a9b79c9e25597994fb868b98f92097de33', + gas: '0x38673', + gasPrice: '0x47a3d0284', + hash: '0xa7eb4f13bd122d16890db32cc95498c41c899d90db6ded546595635be8afd65f', + input: '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000064363f6700000000000000000000000000000000000000000000000000000000000000020b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000214e8348c4f0000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000214e8348c4f000000000000000000000000000000000000000000000000000002b6d6556409d58500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000f1e029ae5743fd4a324132a0be6eeebc81060f55', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x39', + r: '0x6ebc6fa0e15b11f8b528105d10e0a5036d80a65b5492ad55c15682e096bfb62c', + s: '0x742cc33888a16df24ed65b2e6c29df694a2ada7e217b2f350ba01598ac641430', + to: '0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b', + transactionIndex: '0x79', + type: '0x2', + v: '0x1', + value: '0x214e8348c4f0000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xcb280c6b371d3f872d791e5bee09dc4a0670892b', + gas: '0x1fe9b', + gasPrice: '0x47a3d0284', + hash: '0x0f306416f5f9ba69fcc20348dce199ad14402c5d0956c34d1d68535b7b456a6f', + input: '0x0ce28dc4', + maxFeePerGas: '0x5c2f99757', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xb', + r: '0xaa5a9f7a4e46e240de1a97541c078bdec6c38d01385a12c7417a43a9535879ab', + s: '0x0f9668132ff0306a7713e6d6caa3f37d2b24208cb1574d72707e3cc7d0786531', + to: '0x52a494dbf47107cc0c624ee10703abecaf586776', + transactionIndex: '0x7a', + type: '0x2', + v: '0x0', + value: '0x1dc104a3fe70000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xec2a9a192929ed1f280f7fd8935b881e3a649dc0', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0xc8ca24a0da8b3403305b9cadb26dadcf547d8f23487b5ad1f8d63269786ff46e', + input: '0x', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xb80', + r: '0xf6675a6518006fec1f26f7b84c188c7d59d8f41f9c289cf7805733be3c36078a', + s: '0x5996c346dfa0606e2a9982990428f1da60bb5af13cb3ff213530061533fd6f84', + to: '0x32b30adef7c9dcb888d97f7b743db457e67f2142', + transactionIndex: '0x7b', + type: '0x2', + v: '0x0', + value: '0xb1310c5a2c30000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xf14cbf8d2c9913169ece7d9b38ed562cc3601065', + gas: '0x12c78', + gasPrice: '0x47a3d0284', + hash: '0xef8be164d94c0eb5f2bdee4e23897d7992cf6eed26ea29543070ee2798f7469e', + input: '0xa9059cbb0000000000000000000000006c4d1d6d66ded59850bc86b3421501e51cf02e3000000000000000000000000000000000000000000000021e19e0c9bab2400000', + maxFeePerGas: '0x62bb2392d', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x33', + r: '0x25181587b27718980f719f401a5f6013cd6925827d16c2ad44be78edd2235590', + s: '0x601f289cfde285f95add07c1c6248a3257f08683ed100d58cb2816edc5619e91', + to: '0x090185f2135308bad17527004364ebcc2d37e5f6', + transactionIndex: '0x7c', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xeaced7279d1afb93ec00a7990a45a8a1b2996ddb', + gas: '0x267f4', + gasPrice: '0x47a3d0284', + hash: '0x3fbd6a8181c0fbfb48689db9bc12e4615ca4afc49607a06c8899c5eace3c087c', + input: '0x4488c7cd000000000000000000000000000000000000000000000000000000000000038c0000000000000000000000000000000000000000000000000000000000000002', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x8', + r: '0x8b5040ac315a9c89b115670c17f8535b9598e5bc87342a7f5c3071aa637c793d', + s: '0x77d5b8dfcb4f235dd14f1cee059c49e7d8218c7190782a969912c68172f1ab25', + to: '0x4623900e6d0495cca743665dce8fd815b0433e5b', + transactionIndex: '0x7d', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x250e1215ee94b57caa6dc759bd8d09572e953e1a', + gas: '0xf01f', + gasPrice: '0x47a3d0284', + hash: '0x446b5bd934e67d7c6549077efee4b02f439fd2e1115914173ed449f223b45aee', + input: '0xf90a82c800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000011da', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xfb', + r: '0xe679055f660c0595492297288a7e9503f489383c7a74849d849a125b153fc770', + s: '0x4aafb347706a36f9be7196c27531f8c43b2d07c0a51af60da89532a33f37e22e', + to: '0x39ee2c7b3cb80254225884ca001f57118c8f21b6', + transactionIndex: '0x7e', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xb9ba3f911fe7f16413da6d9b8e4726f7ad31bd77', + gas: '0x17fc6', + gasPrice: '0x47a3d0284', + hash: '0xe65b6bec825c8ce3df9456cdd55390cbc09fc5f86c20e19455d67968339ac0e8', + input: '0x441a3e7003b89c46295889c5aadce5b73ae8551f3dbf83530ce27c345d6fe94fc43f337e016807a4e2986bc9d4c2c6a2fff6b2c6f351989c0f7a6d2164377848aac7c5d5', + maxFeePerGas: '0x62bb2392d', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x1a', + r: '0xf347daef28fd1489cf97fb24456ac33928ff5138d8f607957d0001e341d37f33', + s: '0x3a14d4de05e89b99eb732b60ba9aa187bd71898ac7e941ed370efbb8e49b2021', + to: '0x5fdcca53617f4d2b9134b29090c87d01058e27e9', + transactionIndex: '0x7f', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x6587d861b7cea89e0e78ae4897a1a757bb40cee5', + gas: '0x517cf', + gasPrice: '0x47a3d0284', + hash: '0x9aa4c2aebcb87337eaafd0768324e964af29fe34948a73c3f65205578874faa6', + input: '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000064363f2b00000000000000000000000000000000000000000000000000000000000000010800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000043c33c19375648000000000000000000000000000000000000000000000000000000000000006510e0700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000138c2f1123cf3f82e4596d097c118eac6684940b000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x64', + r: '0xbfe992343bd6b9596ab42bc31ee97e82f4bf9c80c63c67ca0cc96b708c3cd032', + s: '0x4bc0740e037b12397c1611036fbff0c71179edc73db0f9089d6f8e886b1214ca', + to: '0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b', + transactionIndex: '0x80', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xfa756425b596a6f602460320c1447902457be9cb', + gas: '0x3b699', + gasPrice: '0x47a3d0284', + hash: '0xef8f8c6d22ee2165d735ed573e867e701dda02189a7ab991b788ccaaa132f8d0', + input: '0x5f5755290000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000017616972737761704c696768743346656544796e616d696300000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000007aeadc0000000000000000000000000000000000000000000000000000000064363f85000000000000000000000000b3c839dbde6b96d37c56ee4f9dad3390d49310aa0000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb0000000000000000000000000000000000000000000000001d750cac918e850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004686be3d4b5000000000000000000000000000000000000000000000000000000000000000001cbcd6a8d79453d9080adad1120abd9f94ba6fb23ce2828e5a434247ad8679971918bded729941b84e7090a75edd53f3d553aebd05d4a193f306b4ac1ce369103200000000000000000000000000000000000000000000000000008726a236b000000000000000000000000000f326e4de8f66a0bdc0970b79e0924e33c79f19150000000000000000000000000000000000000000000000000000000000000000d4', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x2', + r: '0xbd79bee27f16a4031e0e63d950fdce905c6252022690654106987e87b7307dde', + s: '0x13a1b7292f7bd63906e40c7545fc3dece31bba4423b475e5c113109e1996a532', + to: '0x881d40237659c251811cec9c364ef91dc08d300c', + transactionIndex: '0x81', + type: '0x2', + v: '0x1', + value: '0x470de4df820000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x65a8f07bd9a8598e1b5b6c0a88f4779dbc077675', + gas: '0x249b3', + gasPrice: '0x47a3d0284', + hash: '0x260725511b21a06d2232db5c7f6f88ea5bbdacccec4b78569a818927a80d839b', + input: '0x0b86a4c10000000000000000000000000335a7610d817aeca1bebbefbd392ecc2ed587b8000000000000000000000000000000000000000000001159db99924a0b63247a00000000000000000000000000000000000000000000000003d335486200732c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000004de473465ca7f47e82033303e5d0aa0f49700e960eae', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x133f0', + r: '0x7ab0c2b5c6dc410da3f42d236a3d94c7da6c12c182465c26fa0c17b430e6c956', + s: '0x6618d10da00ede136502805d6375a2596085183a79fe6e508024d9cf3d2c3550', + to: '0xdef171fe48cf0115b1d80b88dc8eab59176fee57', + transactionIndex: '0x82', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x0d29bc8f8e5ca0bf78727f83ab9b577414abed0d', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0xd8b7c50d281e37dc01810fbd1c3cf314d707d175feb50f1c94e5cd07722a8e6c', + input: '0x', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x6', + r: '0xd4c34b8c853fc0ec5a5e6684de1b416439162be033d48b3d01abd294005b6c9f', + s: '0x6fbb55f270eb517a4eddc48c57f912188b7d95ec7803df7f943486022a5cfea7', + to: '0xab22705c4adae6503edfc3077b2884ea1761b7db', + transactionIndex: '0x83', + type: '0x2', + v: '0x0', + value: '0x20c0169a35ac5ef', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x7d8859caf443181d2bb13ac2dfea8b44cb663166', + gas: '0x183ac', + gasPrice: '0x47a3d0284', + hash: '0xa78b1dbfda5a5cc59a760c03e3e38064db95dfcb7f6b8d5d5810ecd31f445335', + input: '0xa9059cbb000000000000000000000000bb34867d3e8129223fd1c5369099b1c89302185c00000000000000000000000000000000000000000000000000000000a2308de3', + maxFeePerGas: '0x67cf7f4cd', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x7b', + r: '0x171001f29b776d199fbba9586b240043d587102d654a8b9e9e5f06131dd89a60', + s: '0x152d296ccb9c487edb05e4276c2796414c5a8929c7f127a3d08d09fb3e8219e6', + to: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + transactionIndex: '0x84', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x22d2df0ce76a61aeb1a8a75582220d67da14226a', + gas: '0x16843', + gasPrice: '0x47a3d0284', + hash: '0x5470c161462213629f4d2b7402fdfda71a6fd3721d6bd5d699dcb9bc24c50d21', + input: '0x439370b1', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x0', + r: '0x12e091f6e84b915b7c343453731b4ac8a8225aab24f57fae2e37b0fdc9eb7625', + s: '0x3f14a8cf96eaafc238eaff987ee29e462b790d83ff7aeeb65c0635d82f94f8ca', + to: '0xc4448b71118c9071bcb9734a0eac55d18a153949', + transactionIndex: '0x85', + type: '0x2', + v: '0x1', + value: '0x38d7ea4c680000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x6b1a08b839e9e0b17654cb136cf6bc256da482d8', + gas: '0x3a02f', + gasPrice: '0x47a3d0284', + hash: '0x0943c536186591acb818e8ace6fcfd4af0df06b8853c30ddf185f78ae54ccbef', + input: '0x5ae401dc000000000000000000000000000000000000000000000000000000006436437b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000001f40000000000000000000000006b1a08b839e9e0b17654cb136cf6bc256da482d80000000000000000000000000000000000000000000000000035c63d009cfebd0000000000000000000000000000000000000000000000000000000001acaebe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x6', + r: '0xe28a0a218e0699a8c592d5468c915ec4088659ce637c0969533bd8a32f00deca', + s: '0x401ef72021a21de34b623e75fb01293d335e6f0ebf4389eba6b1a38076e74d9a', + to: '0x13f4ea83d0bd40e75c8222255bc855a974568dd4', + transactionIndex: '0x86', + type: '0x2', + v: '0x0', + value: '0x35c63d009cfebd', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x296fa974a8a4e3d749a4d4e3b9ccca7bbcad423c', + gas: '0x4d4b0', + gasPrice: '0x47a3d0284', + hash: '0x66fd0cb4264aa2e61fa2e4abc224f9682d09092865e1025974a4bde51ad906d8', + input: '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000643645d300000000000000000000000000000000000000000000000000000000000000020b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000044c5662810cd9d000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000044c5662810cd9d0000000000000000000000000000000000000000003a9ee6b1a463c311449d4300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000f0bef9840e4f7166e52c7af2d72ec566bbf39bdb', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x6f', + r: '0xfa9298dfdecc4b63821071e864c0cca273ff63f0d8ad3bcdfd03dc9883d7d905', + s: '0x0d234fb1b27f627e25edded27bacff2946b348c29e5c89f268a405765a7ff65f', + to: '0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b', + transactionIndex: '0x87', + type: '0x2', + v: '0x1', + value: '0x44c5662810cd9d', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xa4026608c63744182f8b07de8379fd689e2826f9', + gas: '0xfe52', + gasPrice: '0x47a3d0284', + hash: '0x13e1fddea8ffcfb5847041614af2e1502a7be4f0507645fa5216ed8b661e6c23', + input: '0x42842e0e000000000000000000000000a4026608c63744182f8b07de8379fd689e2826f90000000000000000000000007adb81180ac5a676a2030520d5a5fc3e81421003000000000000000000000000000000000000000000000000000000000003fcec', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x94', + r: '0x089406d0133a909552145bb4b3b9088117aa3fc80fba3d91e760a649c2529a3d', + s: '0x5ba6c1e240821b42d1faa648e9324421a51053e5c06659a2a727d196f6ec9b8e', + to: '0xe42cad6fc883877a76a26a16ed92444ab177e306', + transactionIndex: '0x88', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x4c949d612269b654e7e18990752cb3b1d3878113', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0xdf214d4148f2ac955b0c1097b2c633b5dfae2751a965cd9260b12874ae12bfd9', + input: '0x', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x12', + r: '0xe844d08332e69f6dd257146dee8d95648c43056b5163ac81eca2f5773b9c3852', + s: '0x04dd4396702a1dc05e74ca5e5cd39b506d991d0f5dced3fc3bc3c0d5080325d7', + to: '0x3c19a291b31f92ef45b847a89fe5d21acfacc632', + transactionIndex: '0x89', + type: '0x2', + v: '0x0', + value: '0x853a0d2313c0000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x7fbb9dfa7bda66a9f2ef19ee8392fbde244cca0b', + gas: '0x18100', + gasPrice: '0x47a3d0284', + hash: '0x9e0b6d88702128b00efba753c85fdedf93c4c91e242f8610e539571bca485932', + input: '0xa9059cbb00000000000000000000000035369b9f5643d3fde9e392c7e2e2ce263664024400000000000000000000000000000000000000000000006c6b935b8bbd400000', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xb', + r: '0xf472e0c5841a33dd6b12f27e3a0280f41beb8807d57b21166d4cf4049a8e523b', + s: '0x6c9ffdb00da3b3afae3b7a197eec25eb71ef0fec9a77b2b21ba1e5e537fb5326', + to: '0xd1420af453fd7bf940573431d416cace7ff8280c', + transactionIndex: '0x8a', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x08be4c9c14aa9a39cd07bb4310559b3ae503ff1e', + gas: '0x3cfc1', + gasPrice: '0x47a3d0284', + hash: '0xffc4ee5481e35cf09f5675a05593f8bcd1fbe3c0bfd742ba64655bfbfe5cdc59', + input: '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000643645df00000000000000000000000000000000000000000000000000000000000000020b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000000001ae5f29d27e00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000dde90a7dd65f0eee5cb61cfb973d735208308bad', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x45e', + r: '0xf48152acd401687a6273974d723be29405c3ad5001f0330f2967d87e88685120', + s: '0x70d0ecf89b9d2b8351e6ccd728034add7a9ffdbe1ffa70a20862e1c30a2941ac', + to: '0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b', + transactionIndex: '0x8b', + type: '0x2', + v: '0x0', + value: '0xb1a2bc2ec50000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x22d44bb13a8935af45a9d85be518be256a2f5ec7', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0x8628c214d87f83b8b6325d648383d3a34a9abc54d7be64606b9e9393c5bb2c87', + input: '0x', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xc8', + r: '0x39287564d388296ef932ad463ef6be1d3cd70e421c3db343f2622f814e848eba', + s: '0x6b0e433c0f0577aca309ddcc2144d28da94a9033fa3fa10846195dc3a602afa3', + to: '0x22769f975be0632bccc29392a66bcdd353246f74', + transactionIndex: '0x8c', + type: '0x2', + v: '0x0', + value: '0x30d98d59a960000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x941dcc59efdae9570c7618fddb351c657d0643c3', + gas: '0x27111', + gasPrice: '0x47a3d0284', + hash: '0x57840573da6aee90a1df7c054e694cea1bdbbcc0ce5504a4c47296bf93b75301', + input: '0x9ff054df00000000000000000000000000000000000000000000000000000000000001c1', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x0', + r: '0xc6d1fe1d09c919751d1938a970e92553bd0ce6fdbc5a257607b22fcddf2792f5', + s: '0x16f43b2fbf8d7a5e555d56707e3b8cd91b7a4fa29d046da608c07ebd5f437f40', + to: '0x06450dee7fd2fb8e39061434babcfc05599a6fb8', + transactionIndex: '0x8d', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x3d9aa2631c4c10654bbfe03208a572dbf0b40b7a', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0x7495e9e0cf9f848a202fc3e051bce519b26967c4933ea9f4a3744d75964124b3', + input: '0x', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x2', + r: '0xd2d2622af6f8847b9d4cae57e2432e51186f916ad83fca7e596b862c1d3b779a', + s: '0x5c1a52734132e091d26f17eb9f28d2379b2b19b67b0d0f763e269374acb852fe', + to: '0xc5b1f58cea87704cc87510320d8390964b6fe88c', + transactionIndex: '0x8e', + type: '0x2', + v: '0x0', + value: '0x1caf12ad1c106c0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x9ceab4d15f394e3074239fe6f761dfaed566422b', + gas: '0x7016', + gasPrice: '0x47a3d0284', + hash: '0xff7d2273873f7b16e131755ed47ed8de55e540a4bb8d47449d84127ddd3a8bb5', + input: '0xe56461ad00000000000000000000000000000000000000000000000000000000000000890000000000000000000000009ceab4d15f394e3074239fe6f761dfaed566422b', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xb', + r: '0x307eb7a3dc0fcdcea16fe4cf43e3be64ae57ee1700b95712d065a771bf5b135a', + s: '0x134b00a67f5d7188ed38752373ce88f4e81226b2fbd514cca6c418d94e8e46df', + to: '0xb584d4be1a5470ca1a8778e9b86c81e165204599', + transactionIndex: '0x8f', + type: '0x2', + v: '0x1', + value: '0xeebe0b40e8000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x399b15d63ee62bf2f07a14069d3256bd656a1f90', + gas: '0x3ee36', + gasPrice: '0x47a3d0284', + hash: '0x2dd3225299367625b920766f718ecd62d0d66738ece52fd44c4adb0f8f794c75', + input: '0x5ae401dc00000000000000000000000000000000000000000000000000000000643645af00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e4472b43f3000000000000000000000000000000000000000000000000017fb16d83be00000000000000000000000000000000000000000000000000000000206f9e7348ad0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000399b15d63ee62bf2f07a14069d3256bd656a1f900000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000da4dd9586d27202a338843dd6b9824d26700678300000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x1', + r: '0x156cb4ab98cba596713e343fd3ab2f8a90203f8cd7d316bd375d111895f92ae1', + s: '0x2117eff2c33ae5e1103367254bb32efb37abeec4cf598dfddd663c1cb0c2fd32', + to: '0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45', + transactionIndex: '0x90', + type: '0x2', + v: '0x0', + value: '0x17fb16d83be0000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xfa4535d38843f78788edb2188485663db5a1c273', + gas: '0x42273', + gasPrice: '0x47a3d0284', + hash: '0xd600a0365ebc112528c0464dd4562de2a74eb692004be7a08b60a821c8dddd19', + input: '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000643645d30000000000000000000000000000000000000000000000000000000000000002080c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000003913517ebd3c0c650000000000000000000000000000000000000000000000000000000c49b43985820d5200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000308516e6daac88d719af5a6d7ea2a82d8c8e7356000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000c49b43985820d52', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xa2', + r: '0xd1d608c88b68bd71672371bdfe112966a15d6244cceed691388e836a0e6c5259', + s: '0x2e6d9e638035e9e493f0edbd874205e1d1d4c4d7a8d0d826e98e7e1dc92b5c83', + to: '0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b', + transactionIndex: '0x91', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x61098ee5109aa530c2fd73c059465ebf813fbdd4', + gas: '0x31418', + gasPrice: '0x47a3d0284', + hash: '0xdb05f67a2e1f965826ca9aae165d96ec1883129ba84718da14f7c35a6e1e342d', + input: '0x6933e79a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000cda72070e455bb31c7690a170224ce43623d0b6f000000000000000000000000000000000000000000000000000000000000003c516d525976506b32726935417836734b4577734144466362316377365a4e53704d376965627654444337713757672f6d657461646174612e6a736f6e00000000', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x6a', + r: '0x128e7fe55747469b4be913e4706a22b206f994208b64aabc39d3825606c00555', + s: '0x185f45cb1c7c6d16f30ffaabd347b5b2cfe7c2c0f17f4e48b3e9a6654a132ce6', + to: '0x2791b93591de3fad825e41bd593c53481f407f82', + transactionIndex: '0x92', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xade95db92eb86329b08f1c67bee2636fe922f9aa', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0x50734d83880b3f249d60c15226df34c22e222faa5079c3d7ed7665dddc906ece', + input: '0x', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x2', + r: '0x69d4b620c6a3d91efadbc9b3e3d8be839e226d0636eca2b3b472a07404d22630', + s: '0x1dd6083f4de1ab299ea3afb89aca0fbe749bf4654f0b1595caf2dd36ee49cb8f', + to: '0x9d281056b1591889c481b48c9ada12afbaedb758', + transactionIndex: '0x93', + type: '0x2', + v: '0x0', + value: '0x449c9dce3988000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x9ffb5f8a0f2c4ae6538e531bb1e5ae44847a3c40', + gas: '0x396cf', + gasPrice: '0x47a3d0284', + hash: '0x6173d906ffd35d3b326a3e750b6d663d2955fdc6deeab20e409af5385cf8e4c8', + input: '0xfb0f3ee10000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e18405b53e50000000000000000000000000000968a15596c0f760a3813b79fa85d442a35760a95000000000000000000000000004c00500000ad104d7dbd00e3ae0a5c00560c00000000000000000000000000769272677fab02575e84945f03eca517acc544cc00000000000000000000000000000000000000000000000000000000000017c40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000643639070000000000000000000000000000000000000000000000000000000064378a870000000000000000000000000000000000000000000000000000000000000000360c6ebe0000000000000000000000000000000000000000ef0b1e2cff64c8340000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000027f7d0bdb9200000000000000000000000000000000a26b00c1f0df003000390027140000faa7190000000000000000000000000000000000000000000000000353cc731f590000000000000000000000000000cf398a1ed09a38613d2c76366e9a4b2cf21eb03f000000000000000000000000000000000000000000000000000000000000004006ea7ad410c362854f8903280b5650fb214f8ccc0cc9dfbd0ddd4f1cd7b0251fd239906faaec755675273f21b5389ea77b09d432257ae26b006898e2cfffcc511f6e66746e657264732e61691f', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x3a', + r: '0xe14680f20870065765c3c1e48dba3ff8fefb013b84a98a9eb0bfd11e8b535d45', + s: '0x5ac7f29ac66342e710db290258958d7f9dabfc475cf71e2ec01a92cf91e0b47d', + to: '0x00000000000001ad428e4906ae43d8f9852d0dd6', + transactionIndex: '0x94', + type: '0x2', + v: '0x1', + value: '0x63eb89da4ed00000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xab234769c7b777736fe0296190e9b6f69dcf6ddc', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0x00c1a4dc51c377b6bb00af16bb30526543f727c11a6370741191979c471d1ffc', + input: '0x', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x4e1', + r: '0xc83c53992ea82dc9ca2b48702930f9e296fcf84c6cddc12dd36f5cb36f771143', + s: '0x52e4d4b69c01b5a39874c92c78ccddbd47afc5b8b72cc6053c88b6ac1985b555', + to: '0x5b235e2844eab73c073a54f6928b7f8358e51e32', + transactionIndex: '0x95', + type: '0x2', + v: '0x0', + value: '0xbfbd6dd6872000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x5c91a8f7147e6ab2765e6cae4a283c0055e2ee8d', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0x8c7518bea80f39a803930123b6782845ce8f8d99a782163aadfa924cbb28ee91', + input: '0x', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x7', + r: '0x3f518ed2dbd15a13948873b15a61e35a685a2819d330c17a6c896fb577887f92', + s: '0x209ab4820a10c06cfc24ae4dc64fe98106eece4bf69c5ef0c26ee6524f1b88d8', + to: '0x036b16b5067a1c0c6923c9526bf76fb125619a9d', + transactionIndex: '0x96', + type: '0x2', + v: '0x0', + value: '0x214e8348c4f0000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x609946cccb57a391dc7cce2cff8cbe8a29343d0a', + gas: '0x52c11', + gasPrice: '0x47a3d0284', + hash: '0x4ceca9cf5bff5da1d3d1837fb77f1f576767b8a9d6d4062de0eee706b7773d6a', + input: '0x8af033fb000000000000000000000000555b6ee8fab3dfdbcca9121721c435fd4c7a1fd10000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000006400000000000000000000000002d886570a0da04885bfd6eb48ed8b8ff01a0eb7e000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000609946cccb57a391dc7cce2cff8cbe8a29343d0a000000000000000000000000000000000000000000000000000006406d04bd1c000000000000000000000000000000000000000000000000007f6ed61eb47df2000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000064364371000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003beeab9d5624e487045e01d12332975204a04a8a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000006406d04bd1c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040d07961740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000003beeab9d5624e487045e01d12332975204a04a8a0000000000000000000000002d886570a0da04885bfd6eb48ed8b8ff01a0eb7e000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000555b6ee8fab3dfdbcca9121721c435fd4c7a1fd100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f87b22536f75726365223a226b7962657273776170222c22416d6f756e74496e555344223a2236332e3337383736343437373833333236222c22416d6f756e744f7574555344223a2237312e3232333835333933393134343833222c22526566657272616c223a22222c22466c616773223a332c22496e74656772697479496e666f223a7b224b65794944223a2231222c225369676e6174757265223a22625a6658774a7632434643422f5767677736704c39536c6f776e6c305368684c34725a416e346b784a2f2f39385935584c6f34354f585a72424b387746423076786673356b576f753374334b76322f6c7a734952352f3039445a3566696132567169743970632b644c324f6e663052766948716949636f5a5172707a6a64414538747171586967743761543354723045584b465855373078466559427157426e6144536d436774636a696b566a666f452f6376314a686234716b4f6e626338307530744b4258487279525a3576412b4133373656614f70776c5531315a665275773567734b3963626171735a61487831674f596b52547658786337524c4939326b73324c386175787631756943574a5653574b44446254335059594d4c6c623046492f66396e5a694638345048376f706c48512f69686875724d4879444531774868383430665845422f6b4347674a4451592f7771673d3d227d7d0000000000000000', + maxFeePerGas: '0x62bb2392d', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x32', + r: '0xfb775bca5c6dc8f9920b24e4108bb822cd272a68e46c22ca9599d234a309e572', + s: '0x6a9a15cac84e1b5f1cc71130261b746317ef68066b46806e783324ada7583854', + to: '0x6131b5fae19ea4f9d964eac0408e4408b66337b5', + transactionIndex: '0x97', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x92265f4c85619ec8b70bb179ff1f86c56e54d348', + gas: '0x36a70', + gasPrice: '0x47a3d0284', + hash: '0x03f236728362e5cfc12a712b822a3ab1d79e0eb0268ea771dac94c17750283f1', + input: '0x00000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017d074e88292000000000000000000000000000ed7c461fb6569c1e462d9da7f3ac2e99285f268d000000000000000000000000004c00500000ad104d7dbd00e3ae0a5c00560c000000000000000000000000002969fed452f73ea8a87ca427e27b13a40fc390ee0000000000000000000000000000000000000000000000000000000000001175000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064363c4c000000000000000000000000000000000000000000000000000000006436400c0000000000000000000000000000000000000000000000000000000000000000360c6ebe000000000000000000000000000000000000000098a48709306da1660000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000009c51c4521e0000000000000000000000000000000a26b00c1f0df003000390027140000faa7190000000000000000000000000000000000000000000000000000000000000040551bdcf4ed7c88982d6e5142da8d2cdd76cb0176504a2db01df6faaceb0880c6ca1b733e4434382965114c4aa595080f087f132036a1bd56c40e32493640a5f900000000360c6ebe', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xda', + r: '0x7755f3a5db7f2d6c3bbfca52413d7231f949b00cad3ca483f570d7da82d2b58a', + s: '0x7f7853211ea73c04bdd968bab6856533ad10b6aef7c972796ed816ec817f3f44', + to: '0x00000000000001ad428e4906ae43d8f9852d0dd6', + transactionIndex: '0x98', + type: '0x2', + v: '0x1', + value: '0x186cc6acd4b0000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x224030f891006c76ef26b3a768d7792e8c89a960', + gas: '0xfdfe', + gasPrice: '0x47a3d0284', + hash: '0x57574acd1a26c9e233f2ba2c5a7c8b81f6dc05ac9b80b1f87a586937322df147', + input: '0xa9059cbb000000000000000000000000f31ea0f0704545c68e9faa02e8d27d59990d40970000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x7', + r: '0xdd2f51f56265814170f0f1829001633009f61a04a79158242ba614804a60f925', + s: '0x24e18bddb2120817f0a86f22a729a249ad74f88f846c86dd616e9c57d1f7c3f6', + to: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + transactionIndex: '0x99', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xd6bbc0a9dd616c806e05e281955982f2f561bf3b', + gas: '0x120b7', + gasPrice: '0x47a3d0284', + hash: '0x2f51883b48c322148fc624e8c4c974f4ffe960cc65bdd9bed9085c899eed8926', + input: '0xf242432a000000000000000000000000d6bbc0a9dd616c806e05e281955982f2f561bf3b000000000000000000000000a52687331bf9548f01409cbd819176cb79e9e1e20000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000360c6ebe', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x204', + r: '0xce97b3a6b4fb2bda791367c6566290d8ee38a5d39625ec5260cfb21eb3dbe73f', + s: '0x2f50aeaced4b502f667f2ca74d6e929a0b4be6350f4090a4364d58c8281a0514', + to: '0x4faab2f1851b58c26028ab7ba2873ff3c7b52d4c', + transactionIndex: '0x9a', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x98784a6f846289821f3cd18fc053be007b3a3a82', + gas: '0x2b75b', + gasPrice: '0x47a3d0284', + hash: '0xa335d36a424727d3d6a533abd8c1d55c1647272140e20590852266f66bb21055', + input: '0x000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ad425897c0000000000000000000000000001faeffe0ef6020ce181e6ff14f3824cc114020cd000000000000000000000000004c00500000ad104d7dbd00e3ae0a5c00560c00000000000000000000000000dcb1cdfe2b5f592e7bdc2696b7a68c6e866c4cc200000000000000000000000000000000000000000000000000000000000009fb000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064361c2b00000000000000000000000000000000000000000000000000000000645da92b0000000000000000000000000000000000000000000000000000000000000000360c6ebe0000000000000000000000000000000000000000675eb253775aa98d0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000886c98b760000000000000000000000000000000a26b00c1f0df003000390027140000faa71900000000000000000000000000000000000000000000000000001b48eb57e000000000000000000000000000531a0dd30906366fa738acc2d48e790de54bd33e000000000000000000000000000000000000000000000000000000000000004022815c7a06981c9c774bab95b640d57b0f7e7501cdaf5c0e579c52d79385b8dd7221abb8312af27d27e6951cb7cd5177ee7eee435c77398d532f1db2f6acf0d400000000360c6ebe', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xbb', + r: '0x49c82cf38ce3a5299818ea25b4e6ecddaf08763b39dc9c280625ee6ef154321c', + s: '0x0de8fb753fbdffec681cc6803a71f93783a6a1a8f2189870e70db2e6cfe30559', + to: '0x00000000000001ad428e4906ae43d8f9852d0dd6', + transactionIndex: '0x9b', + type: '0x2', + v: '0x1', + value: '0x1550f7dca70000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x77964f036e1b7bf6d06e0948146f10653891b4ca', + gas: '0x42c19', + gasPrice: '0x47a3d0284', + hash: '0xab5f09775f84c67c0105a2a0708a0d8e0944f6104357944074efc7e0933fbcf3', + input: '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000643645c700000000000000000000000000000000000000000000000000000000000000020b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000dbd2fc137a30000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000dbd2fc137a3000000000000000000000000000000000000000000000000035be3ef062482df432200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000054b8d105aa09342fad6b352d41a0bad3e1a9aa9d', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x0', + r: '0x4e8f50c8c6a483fb296f7c10525d1ae2ccf45cd1156cc6c4a04931fbf89adfc3', + s: '0x4ad31852b9fc33f8cdd02ac393de63af02542aba2dbf1cc80c5d410c26594356', + to: '0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b', + transactionIndex: '0x9c', + type: '0x2', + v: '0x0', + value: '0xdbd2fc137a30000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x05c250120ce07ba6fe361b39ac344148435c25ca', + gas: '0x286ea', + gasPrice: '0x47a3d0284', + hash: '0xfc344b84da81960aa983cbeed2a393d9b1fa7aabb0d844e6f82a5f6c94a3c086', + input: '0x357a150b0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000003d3f39a68d44300000000000000000000000000000000000000000000000000000000643669090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c250120ce07ba6fe361b39ac344148435c25ca0000000000000000000000000000000000000000000000000000000000000000614b494a645ca1534a5d114f720c85e71c2931a1b0be75fc36875b9bc272c4172042345e6d1af8c10e6a2ba3e9a842015bc766d23af0abfcad29d4394e1b0c54000000000000000000000000000000000000000000000000000000000000001b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000133ac9b351b069cf4fbac6240ae74b9a000000000000000000000000c92b2d2dfd0083aaa38ff07d543e2b3a937edcd400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000645dcb24000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c0d9ebc70c37844d0f729f054bdad42e09782252866dbf15f847bb31818da7a317128963519528264e89d394d6bd813ecf9ef501e92c5f3c547618a50768bb436d000000000000000000000000000000000000000000000000000000000000001b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000d71b0fe0a28e00000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ed5af388653567af2f388e6224dc7c4b3241c544000000000000000000000000000000000000000000000000000000000000090300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d71b0fe0a28e000078d1f73e7e9d57b89b236154f0d04434bb5c8e241111656c94dd04f9b3721b35000000000000000000000000f849de01b080adc3a814fabe1e2087475cf2e3540000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x39e', + r: '0xe77bef1808fb6fe5657d92b672e75390856cab77a4e3bb6fc8e5651d262f077e', + s: '0x303f114a56069f8248e68b97a1f567f06c8329658413e66d6a1eca8f331fae29', + to: '0x74312363e45dcaba76c59ec49a7aa8a65a67eed3', + transactionIndex: '0x9d', + type: '0x2', + v: '0x0', + value: '0xd71b0fe0a28e0000', + }, + { + accessList: [ + { + address: '0xca37a2f2d84867dcaa7f6ef07dc06ae3e7fc06a4', + storageKeys: [ + '0x0000000000000000000000000000000000000000000000000000000000000000', + ], + }, + { + address: '0x498c00e1ccc2afff80f6cc6144eaeb95c46cc3b5', + storageKeys: [ + '0x0000000000000000000000000000000000000000000000000000000000000008', + ], + }, + ], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x1cac7a07e8cb87b73d94747028845638d55d3fde', + gas: '0x29b6c', + gasPrice: '0x47a3d0284', + hash: '0xe64be15aecd91f995ace79f4019a9527a8abe979a3468b35600da437a1478c70', + input: '0x8119c065001300010000000000000000000000000000000000000040fdaee81f16de231d5f18ea482ad5cc6bc65803817c99f477043dce850001000100000000000f1b30ca37a2f2d84867dcaa7f6ef07dc06ae3e7fc06a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20100040000000000000f3688498c00e1ccc2afff80f6cc6144eaeb95c46cc3b50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x221f', + r: '0xf8b669d3e358375cf0dd8d88497bdf4769b2ce9897468657d91a96b884bdec63', + s: '0x36236400a44bf6bd812afefa5deaf53450bd3597e57932c019a7e831ac05e224', + to: '0xd6fca65266adac7a35d679ad53dd3aea1f94b95f', + transactionIndex: '0x9e', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xd17fb9fb5a0f3f4f3e6e921ba6029bd267e32bab', + gas: '0x748c9', + gasPrice: '0x47a3d0284', + hash: '0x004a9a2ab277e27f7004aa54b28981e62cdc495d3186fb06e158e8424cf5967c', + input: '0x883164560000000000000000000000005f18ea482ad5cc6bc65803817c99f477043dce85000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000002710fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea6b0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebee800000000000000000000000000000000000000000000021e19e0c9bab23ffff6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021e19e0c9bab23ffff60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d17fb9fb5a0f3f4f3e6e921ba6029bd267e32bab00000000000000000000000000000000000000000000000000000000643645df', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x48', + r: '0x43e933dbf91ec15bc5918ae2859f34eea3377a27c6c9ae4b03fe54e7d8e68970', + s: '0x57de9c8cefd00fabf794f6902d9b3fa572e4ef7d89bb963476893cd2a0fb475b', + to: '0xc36442b4a4522e871399cd717abdd847ab11fe88', + transactionIndex: '0x9f', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x4e2d8c65ab9fa2c793c32dceacb83e97f3736de1', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0x684e32bbc27f76e759dc9f785c98be14d26f6e1010ef75cc025c70945f530fce', + input: '0x', + maxFeePerGas: '0x55ae82600', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x1d', + r: '0x77f429777d123871ff3684cd1270b395776660622b5418337126c8b25e252e6b', + s: '0x313052affd142ecc6d29050bea16d93f419c6f03f42a2bf36d05c770b43bab4b', + to: '0xa456dbd1bedee6467ef103fc58b079b0f790335d', + transactionIndex: '0xa0', + type: '0x2', + v: '0x0', + value: '0x4e0ee6386378e9', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x91cfe6dbb2b98ce6fb549cb3334a90dd3a69e584', + gas: '0x14079', + gasPrice: '0x47a3d0284', + hash: '0xddc2aba98e71ea83790e0d5cbab037f6e70bf5a58d9790364cab6f4d852ae897', + input: '0xa9059cbb00000000000000000000000008f918c66d54f4c51f9a76cb9a956faab2d49abe000000000000000000000000000000000000000000000009cc9419a32267574d', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x3f', + r: '0x744a97f9d54ffe6b867fb382b4f0aa3424b65d7681d6c21d9e5357686a5c18f3', + s: '0x44a8ee67be7916293e2e9aa0c739741026bb4d3f8a4b902258548e99b2b14f21', + to: '0xf063fe1ab7a291c5d06a86e14730b00bf24cb589', + transactionIndex: '0xa1', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xc50ab42130bc706b7d191451a7ef34ad3eec2a16', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0x2fe22d7a6493b92654f01e5ded1cb917c5c2924a38e663128046a7952a2c93ec', + input: '0x', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x19b5', + r: '0x83d760f376a400bb79c0f72c49d735ded55eaf3052823d309f46b823001d12fd', + s: '0x58744ee0289fafd6b66b7284defc673650cd37b56802b96a6ed786140fa504a2', + to: '0x8fe4243374d944921e7e2409763b558e217c7467', + transactionIndex: '0xa2', + type: '0x2', + v: '0x0', + value: '0x1587a89f94ac2000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xede7a7548c40cfed7d4449ace8a5803bc0ca15be', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0x7fcbb7a587ba7d0165a58b5e6e3020988dd4920b318ba340080b1ad762998f0e', + input: '0x', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xa1d', + r: '0x9861b090ae2e89e38637a8bad32fe050497210a735651e5289796cb5366f1c15', + s: '0x014545f75104bc56668f7a4ad21417ea7c75f4b38b3592b7701d232177fe231e', + to: '0x73d7385bdd6493e88e348b3b6c0b02bcb77779a4', + transactionIndex: '0xa3', + type: '0x2', + v: '0x0', + value: '0x7b3c18f3a578000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xa99d4976eddb861137802bfd210550fb054ad62f', + gas: '0x1526e', + gasPrice: '0x47a3d0284', + hash: '0x86b6bcf0ceb9b60090994f3dd76788cef71d348ca69fffdab38754815b73e85c', + input: '0xb88d4fde000000000000000000000000a99d4976eddb861137802bfd210550fb054ad62f0000000000000000000000009e027ca9b35b1dad472200c27660545246953c4c0000000000000000000000000000000000000000000000000000000000013abe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000360c6ebe', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xdb', + r: '0x69a986ebcab6f5c0f19b849353b3de5e576c866e72577d1ed8a92f3358e4b6a8', + s: '0x70d0b38161ae8f4098b59b26d6f3fd613cef0fea5c8b08b33d5cff5fa00de22a', + to: '0x5b1085136a811e55b2bb2ca1ea456ba82126a376', + transactionIndex: '0xa4', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x78a3e8804f97618b5aa5b35f5a0caccc8c91adb0', + gas: '0x49d40', + gasPrice: '0x47a3d0284', + hash: '0x8eadb42b3a03ff3e8523f5830f6c95a3264fb9276317ddbc3e8cc97fc189db1d', + input: '0x6ab49a5b0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000004b2000000000000000000000000000000000000000000000000000000000000071700000000000000000000000000000000000000000000000000000000000007330000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000090c0000000000000000000000000000000000000000000000000000000000000fc10000000000000000000000000000000000000000000000000000000000000fd90000000000000000000000000000000000000000000000000000000000000fd80000000000000000000000000000000000000000000000000000000000000fd70000000000000000000000000000000000000000000000000000000000000fcf0000000000000000000000000000000000000000000000000000000000000fcc0000000000000000000000000000000000000000000000000000000000000fc70000000000000000000000000000000000000000000000000000000000000fda0000000000000000000000000000000000000000000000000000000000000ff20000000000000000000000000000000000000000000000000000000000001165000000000000000000000000000000000000000000000000000000000000123700000000000000000000000000000000000000000000000000000000000012da00000000000000000000000000000000000000000000000000000000000012db00000000000000000000000000000000000000000000000000000000000013ce00000000000000000000000000000000000000000000000000000000000012dc', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x5', + r: '0x42b676d851eee42c7402532a95e6bd3c19cb6f97f5372110cfa2caa965d8723b', + s: '0x7106db6691b9bd61e380e5f9b9931e54f94355aa4a93314e1875ecc4059ce445', + to: '0x06f841244907a2c886f1e292ca19bd0c3e20fe4c', + transactionIndex: '0xa5', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x038e2f8244de9561e81eb4504062372aba7b3c4a', + gas: '0x5c176', + gasPrice: '0x47a3d0284', + hash: '0x022ac2d203c97313448c6439f25af381448c5fb250067c96abad48c52ea63b25', + input: '0x893419ca00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000038e2f8244de9561e81eb4504062372aba7b3c4a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000064372cc400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020aa443a4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000008dd05800000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x62a2ed895', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x11', + r: '0xe913c42b7e398941841f07b7c89b4016000b164e8794f71d66e6caac0493ef4f', + s: '0x7433145cbf40a5b8c40e79c1ec6b78761ca2fa8e00f8c1d288afad0cac8bb795', + to: '0xa9cc6d2b54cade299c5a86d959eeb8efc80df773', + transactionIndex: '0xa6', + type: '0x2', + v: '0x1', + value: '0x11c37937e08000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xc39434996553087bc8dd76c55a5ef6b4caaa43da', + gas: '0x122a9', + gasPrice: '0x47a3d0284', + hash: '0xe71bed152a7e265fcdc08eb8f6f5217141c1660c79e0a2315801b48a17de9443', + input: '0xf242432a000000000000000000000000c39434996553087bc8dd76c55a5ef6b4caaa43da00000000000000000000000036ecf53bf3a9023122e8f6d94217cf4f2e32fae02218e854019d3ac7989333470e8cf7bda8b930f30000000000046a0000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000360c6ebe', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x1d', + r: '0xbec77779f6740f8b0cc2b3bf3541136da1011d8e6c9823110696501aa6b4ac65', + s: '0x5796326ce663e67c69f9d1da51c610c25e4c28fb254344342333c7402386f268', + to: '0x495f947276749ce646f68ac8c248420045cb7b5e', + transactionIndex: '0xa7', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x284861646298b1424f22543adf3cac028ac7af31', + gas: '0x37317', + gasPrice: '0x47a3d0284', + hash: '0xbe2db43eb64a29a1305510cee016accf743960735aed99bb4aeb831956531f5b', + input: '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000643645df00000000000000000000000000000000000000000000000000000000000000020b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000027f7d0bdb92000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000027f7d0bdb920000000000000000000000000000000000000000000000000b93d99b22a768d419a300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006aa40d02115090d40dc33c7c5f3cf05112fa4f83', + maxFeePerGas: '0x62a2ed895', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xb', + r: '0x17eeaea751accb34ab696825afed4cf5852c84836306c73b89cbc4dcec7f2e6d', + s: '0x040b0bcba55c653c094ed116f2fd453770843b3cdbc6ed861f3a09084cc5149b', + to: '0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b', + transactionIndex: '0xa8', + type: '0x2', + v: '0x0', + value: '0x27f7d0bdb920000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x8bd2830aeed8c79ba6bfae868f005618b470429c', + gas: '0x1ab29', + gasPrice: '0x47a3d0284', + hash: '0x80f00d868b70689d383cdab459c9c68f606de18d4d5a4fc25258870e42aa65ae', + input: '0xdeace8f500000000000000000000000000000000000000000000000000000000000000890000000000000000000000008bd2830aeed8c79ba6bfae868f005618b470429c000000000000000000000000000000000000000000000000000000001e19b040000000000000000000000000000000000000000000000000000000001deff18300000000000000000000000000000000000000000000000000000000643f7965000000000000000000000000a6a688f107851131f0e1dce493ebbebfaf99203e0000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x62a2ed895', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x15', + r: '0xdbe15946cfad124c7f3dc5d895e874ccd4431168738359cc4346f0b97ee7fb32', + s: '0x1ca6cd3b3433aa8051c582e77fc199c7db72cc5e82380d4eabc5b9afb90c9c70', + to: '0x3666f603cc164936c1b87e207f36beba4ac5f18a', + transactionIndex: '0xa9', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x631a717b14ae7de2305b5a3d6051984ffac61707', + gas: '0x2542c', + gasPrice: '0x47a3d0284', + hash: '0x2a69d29b4302deff2515e87041b722bb229603429ea4d31fe81c878efed67f81', + input: '0xb1a1a8820000000000000000000000000000000000000000000000000000000000030d4000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x62a2ed895', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x7e', + r: '0xa992964c4535a1200cfba38f056d0700fadd5c5e0a8e5b0789a260fd3c669aa2', + s: '0x618b195d75a3d2a791d0e4b75040408edd888eab7c165e92ab22fb20a9ad0b59', + to: '0x99c9fc46f92e8a1c0dec1b1747d010903e884be1', + transactionIndex: '0xaa', + type: '0x2', + v: '0x0', + value: '0x6a94d74f430000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xeeaa1e883c352edb52e583f341a7f1067f0bc8b5', + gas: '0x29476', + gasPrice: '0x47a3d0284', + hash: '0x6323bd97a58dab264aaeea1aa12ece39b5eef1a1488e65f813609e1c47fdc66f', + input: '0xa9059cbb000000000000000000000000d2954377b6b13aae5bbcb88c8523ca648c5ad91f0000000000000000000000000000000000000000000000008ac7230489e80000', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x74', + r: '0xe09dc226594df121c0d40a9652e941282a521edb26ed138e3def76954a990141', + s: '0x2f7c710c8d3e3dbf9915a1607e223cb0ba78f27be41f89261f7e3b2d1885b089', + to: '0xba11d00c5f74255f56a5e366f4f77f5a186d7f55', + transactionIndex: '0xab', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xab954aca1a699b10db15bc027a17c9c57aace3f3', + gas: '0xb1b1d', + gasPrice: '0x47a3d0284', + hash: '0x9ff09456b9098544e68e8e27cd3f1445d8606fdfcdebfa74d24d1bc87a9c2462', + input: '0xac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000224e962172a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000128d9627aa400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000007aad0aad8063df7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f869584cd00000000000000000000000010000000000000000000000000000000000000110000000000000000000000000000000000000000000000ddb71cddca64363df5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000224e962172a0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000007aad0aad8063df78000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000128d9627aa400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000007aad0aad8063df7800000000000000000000000000000000000000000000000000000000007fc58f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48869584cd00000000000000000000000010000000000000000000000000000000000000110000000000000000000000000000000000000000000000d4a6ce8f8b64363e52000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000224e962172a000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fc58f000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000128d9627aa4000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000007fc58f000000000000000000000000000000000000000000000000000f1aeace3dbdf300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee869584cd000000000000000000000000100000000000000000000000000000000000001100000000000000000000000000000000000000000000003ef84ccf4964363ed600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x5c8520e5a', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x4ea', + r: '0x068326fe3e2ef5f98b8661ac64adc95a38ae966bdeaf3b29f00a82d9ea6d9557', + s: '0x1f6b5b58f58cb4aa7c2491ec73fbbac5bd357d8fd41cb1602f602c9f60083114', + to: '0x5724b5bc7f54a52f4014e5f496ae380f89c881a1', + transactionIndex: '0xac', + type: '0x2', + v: '0x1', + value: '0x11c37937e08000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x9f0bc974937f37d61ddf909d4124e9631a6986ea', + gas: '0x2b496', + gasPrice: '0x47a3d0284', + hash: '0x8d7f6f64c5cbdb533b579647746392c50db5fd0247981c7b430f4fe206bad302', + input: '0x6933e79a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000cda72070e455bb31c7690a170224ce43623d0b6f000000000000000000000000000000000000000000000000000000000000003c516d553678534c61556655616e5768554e32325236794459754245657861657278664b7266355844594c4e6371362f6d657461646174612e6a736f6e00000000', + maxFeePerGas: '0x62a2ed895', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x3b', + r: '0x7c1fec91a460221ac132cbe6f3cc850734e3e825f4391fe25313d2447c3a9724', + s: '0x3c1881ef1d6d43dafa41cc91572fe3f4526ff1f19007e85e98d4c6df2c16147a', + to: '0x626eb7f29d179e0e1e9deb97b3e5938a646616c9', + transactionIndex: '0xad', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xce3f52a81d998f37692ac85e6aa26029a3faf24d', + gas: '0x161b3', + gasPrice: '0x47a3d0284', + hash: '0xb94ff102a30dcdcf8c2b1385246a2f205f4a7937b58182b7df04e38dc4fba63a', + input: '0xb88d4fde000000000000000000000000ce3f52a81d998f37692ac85e6aa26029a3faf24d00000000000000000000000095d8bdb4a91f446d4ff00f95d42dd0f1f146a2c8000000000000000000000000000000000000000000000000000000000000010900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000360c6ebe', + maxFeePerGas: '0x62a2ed895', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x2cf', + r: '0x64fb24029162079701a1163f1957f15aa7bc1160f13450c19d4f7ef69441441b', + s: '0x4856e9bb26f1c490a9866ed11ee160ea127d80861662b5555aff436ecf889180', + to: '0x92c93fafc20fe882a448f86e594d9667259c42c8', + transactionIndex: '0xae', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x58aea486186fb1c6f93d38b9a7916750bd59c1ac', + gas: '0x32529', + gasPrice: '0x47a3d0284', + hash: '0x61ca13084a53b8edfc2beb3d1f967fdfca93359043a5da9c3678889b012ad0f3', + input: '0x21938f7500000000000000000000000000000000000000000000000000a1609b560d93cc00000000000000000000000000000000000000000000000001e7a5fb25a0b80400000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000058aea486186fb1c6f93d38b9a7916750bd59c1ac000000000000000000000000000000000000000000000000000000000000000200000000000000000000000083a48a032a0de0d84e3c01882148364e41f57934000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000010000000000000000000000001a75f7db182ce7fca969f029e1ef573f7aee9cb5', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x15b', + r: '0x90a309abfe52ff76a25c3ab1fc5d38c53eaf9c4f3ef9728c9a88a168dacf365b', + s: '0x3b1af0c97a0f88c6c4800b29549eff3b757b6145074726ad4c20f29efd2b7ff3', + to: '0x8967ba97f39334c9e6f8e34b8a3d7556306af568', + transactionIndex: '0xaf', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x2c6fb912d9658100b8686bca700ae855f8e5f2bb', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0x76a199229278cdd8e6dd40093b64e7664626618e7c36fd623ab630786b6dfac5', + input: '0x', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x2', + r: '0xbcf5af6296d751ce07bae4d289e54c3c9bdbe0629de6d170bce00f546a24cdbe', + s: '0x7a18cc73b88f984a846a03026e0ba64acf3a0e6d892065cc01a51ccab4a5c76b', + to: '0x86b050c27d689ba91917377de4a39310e79c2b74', + transactionIndex: '0xb0', + type: '0x2', + v: '0x0', + value: '0x1d1f2a3bd7d7020', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x9d5efcee1119e47f53a216a6b9289e0e7fb6a2a0', + gas: '0x71af', + gasPrice: '0x47a3d0284', + hash: '0x74d69e566e8bd62900e891081905009a1c2ed074165d15c0e0a096b63b1b49a7', + input: '0x095ea7b300000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc450000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x62a2ed895', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x4', + r: '0x2b8aa171ca6a259fa65f52c397cc13c5a9fbd2b295402251139ae33a3a28fd24', + s: '0x3bdf546fa3d5a7c07869a23c90539137322d30cd1ac6614d8566386629b4afa7', + to: '0xcfcffe432a48db53f59c301422d2edd77b2a88d7', + transactionIndex: '0xb1', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x79fd0a95523b4287b5717d02e256c3861f68f9d7', + gas: '0x38690', + gasPrice: '0x47a3d0284', + hash: '0x14036d43579058171105216738457b35167820a7effb8d9386c65e20d236eb77', + input: '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000064363f7f00000000000000000000000000000000000000000000000000000000000000020b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000019adace86241a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000019adace86241a00000000000000000000000000000000000000000000000000021ad6b9519056cb00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000f1e029ae5743fd4a324132a0be6eeebc81060f55', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x28', + r: '0xd4238279c5197a8e85d0bf2f68f7b73fcd25002e5d8b692dc6a7b53521bdf075', + s: '0x7ed6c80b5bbda6257d52f9b74989880865942dcd324f30f8defc231b1ee5cc2c', + to: '0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b', + transactionIndex: '0xb2', + type: '0x2', + v: '0x0', + value: '0x19adace86241a00', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x9680f3957510cf85751a096c2194520c36a4a003', + gas: '0x3f787', + gasPrice: '0x47a3d0284', + hash: '0x25c1684f6966caff802e85749b550d9be2934820d5c91c6f62487287675a629e', + input: '0x9b6528e2000000000000000000000000e23cedadbba887bf6bbb6f161ff9281f6c39b5eb', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x530', + r: '0xaf5eac6b32b9d2d8c4b0273bffa0f32b180c4beed468f92379d56ad407d58138', + s: '0x620e4931e4c0cd991109e04f223ee4f3fbcf5630fc4945d418dfe9ed3a9561a1', + to: '0x9c4c49c3c3bd7ab49d91576d0103a25514cad1d6', + transactionIndex: '0xb3', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xadb7c1e5cdb6e92d816b4a86f25f9da5baea95d9', + gas: '0x5208', + gasPrice: '0x47a3d0284', + hash: '0x9c00826fd016714e191a685e31c918e5f9151d807d1b5b955a3ea514ffcd19de', + input: '0x', + maxFeePerGas: '0x62a2ed895', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x2', + r: '0x7fc9b2ff15c31daa91ea1875de068e4e12a7a7e86a4ad0f281c3f3b2c3c8f2c5', + s: '0x1650b4c74cd44f7e317837bc36c7b3652312adf404835f60053ed18bddd70af5', + to: '0xabf7d7b1a434b684541aea4d6bf2e65b57b1aadf', + transactionIndex: '0xb4', + type: '0x2', + v: '0x0', + value: '0xe35fa931a0000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x75a50269c66e6ba81c5062fc84ef199e86a317dc', + gas: '0x2d10d', + gasPrice: '0x47a3d0284', + hash: '0xe04b3af4d15e1edcae6e981f5f1d9d75af4f7cd06f12c73ee42e51c00ef14364', + input: '0xbaa2abde0000000000000000000000009992ec3cf6a55b00978cddf2b27bc6882d88d1ec000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000df31a0928400000000000000000000000000000000000000000000002f38c2775b77862166000000000000000000000000000000000000000000000000000000000b03b76400000000000000000000000075a50269c66e6ba81c5062fc84ef199e86a317dc00000000000000000000000000000000000000000000000000000000643645f0', + maxFeePerGas: '0x62a2ed895', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x50', + r: '0x9bf9c27d293970699ecccca63a6e691fe6be4095e348bd7c06df516a609471be', + s: '0x09113c049db4b93fd9129b188fe3980727b1f16ff32353e2dea5ac40b63d3ffa', + to: '0x9a5132e149c547f254c73226da7f770d43d9ea44', + transactionIndex: '0xb5', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xb84688d617ce18b7f8865b6417cd771d0d42e509', + gas: '0x27c06', + gasPrice: '0x47a3d0284', + hash: '0x0357d246c9ddd57f05170a038ddb04c4c2554371a5cd1e1d7bdda50b6080939f', + input: '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000643645d300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000046ebe6d0000000000000000000000000000000000000000000000000000001702dca3b100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002ba0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000bb82b591e99afe9f32eaa6214f7b7629768c40eeb39000000000000000000000000000000000000000000', + maxFeePerGas: '0x4a817c800', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0xd', + r: '0xe7393a07e07f04a9b43a841014852cd12ebc1079a4290276e67b7c01bd38a4b1', + s: '0x2e74e7c66a3f46e2ce31018771b811d16c1544fb3df6664588420111ee36fcad', + to: '0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b', + transactionIndex: '0xb6', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x5405161f081f773c4bf97a2f086d358ebc643b3e', + gas: '0xbec5', + gasPrice: '0x47a3d0284', + hash: '0x002ec16d799ba0c7c3251ba82a68151016066f4c49ea22c6441711184aff4799', + input: '0x095ea7b3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000000000000000000000000000000000001661ace0', + maxFeePerGas: '0x5c2f99757', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x19', + r: '0x51e49b423093e8f7d580d349423b5a6ff02b8677999d96c60a106b9f155cd571', + s: '0x7556ea05a4035a9863f0758c2a9ded646edaf9a76e2a7810dc7b276421288ee9', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: '0xb7', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xc44fd102415ff62769a4e37c70dea27033a5291f', + gas: '0x493e0', + gasPrice: '0x47a3d0284', + hash: '0x2393a72f9b086878d13a8dae1e44607cb9033fd94d4777ea907dc457db3dbc44', + input: '0xe8eda9df000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000005d20728484000000000000000000000000c44fd102415ff62769a4e37c70dea27033a5291f0000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x62a2ed895', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x579', + r: '0xe9eeed92f4dd20c08048f7a1ab85d4a998cfe54fbc4f8b1ecf3d152a4ec87648', + s: '0x3e9e7796691c23617522a914b7d00375fe239d7e006a107906bd576c1eb0feb6', + to: '0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9', + transactionIndex: '0xb8', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xf3b9b75178f29d551a9c7fa4ef53840871ea662d', + gas: '0x6210d', + gasPrice: '0x47a3d0284', + hash: '0x870c8c1508aecd4147d0f9e6cd1a84227b743ed2589d013e18d481674ca8f42e', + input: '0xf2d12b1200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000da0000000000000000000000000f3b9b75178f29d551a9c7fa4ef53840871ea662d00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000066000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000520000000000000000000000000000000000000000000000000000000000000058000000000000000000000000042c8eaf9e2469423637f3e4a96c42774cb7b8cdb000000000000000000000000000000e7ec00e7b300774b00001314b8610022b8000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006434db7300000000000000000000000000000000000000000000000000000000643e15d60000000000000000000000000000000000000000000000000000000000000000360c6ebe00000000000000000000000000000000000000009d6d9ce40da95cd60000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000161513f82e9a0000000000000000000000000000000000000000000000000000161513f82e9a000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000006609e542e0626bc3fc2110f0ead172030fbe97abf7dbbb663c28d9c3594629d993b73cf35c403e1bc89beeeb37d1ea21c9e538860000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000500000000000000000000000042c8eaf9e2469423637f3e4a96c42774cb7b8cdb0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d53b3012a4000000000000000000000000000000000000000000000000000008d53b3012a4000000000000000000000000000000a26b00c1f0df003000390027140000faa7190000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d53b3012a4000000000000000000000000000000000000000000000000000008d53b3012a400000000000000000000000000c71df678a0026861d1975ebd7478e73f3845a2ce0000000000000000000000000000000000000000000000000000000000000040674d4e33d5ff9fb69a7bac2986d02709192a5209920599cfce618fdd85c8c0122af5d7f5dc9529f9036dddbda213e1d32869a9df89490709b6cdb16ffaa58a33000000000000000000000000000000000000000000000000000000000000007e00f3b9b75178f29d551a9c7fa4ef53840871ea662d0000000064364012ab2e3169b84b421a4c96a4fde49759e07d37688b9cc9775d0cfbfe0e6929ac7f4f3e5bb465fdf4361e02d3fa2c9abd3085fedc49b3abf2db542976ef26b4f2b800000000000000000000000000000000000000000000000000000000000000281b000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000f3b9b75178f29d551a9c7fa4ef53840871ea662d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006434db7300000000000000000000000000000000000000000000000000000000643e15d60000000000000000000000000000000000000000000000000000000000000000360c6ebe0000000000000000000000000000000000000000c899523fcdd7c7670000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000006609e542e0626bc3fc2110f0ead172030fbe97ab000000000000000000000000000000000000000000000000000000000000281b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043215b6d5a78000000000000000000000000000000000000000000000000000043215b6d5a7800000000000000000000000000f3b9b75178f29d551a9c7fa4ef53840871ea662d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000281b00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000e554fc02a54272a5f7b40a973422fefebe357092b947802df3e5be9bd190c7e7f6386478b4538994ede9ab9e3a4b208fd15fbb1b64954ab09d34db832383b5b518507d4ee55d74fc16c96194955e4a39ed0480a373163df26f37a6eafcf74217d642f78b8908d37fd99f0ea6910481dada63087f2c494967287d24b8ae7fbd87c47006333c80d092cc6bddb77c298cb7df8d43bcc41470a27a05567b54d449ab6c31650f73c091e5fce34389fa80ef01351e4f27dacf4b30a2d7ccf5c342ccfc8e20d80f8f1d4532156017c00282a0666cc64098f56729cb5bfd065461a742598bf25d4121c849fee257393892c1c7c400c617ab8550bfcab713abc57b52ff9dccca07dd79dc95adef44e1ec131b1d71201253936d696c7d232ac0a5d78b8085d43a0b88bc4601eb528e73a14d7937f5159d6994f986723702be764f6cb3d3d5e48424dbd6d4a1ce490f9ebbdf1aac5530975f1a6644e535534d77094ef1c2bd1f73116f2689900115b4b2b14c8cdf812ea29856e0b743b4c5f5e8660344212b065e2bdb776f0631ef5f923db94d2c5bdc6121b772e277388d7963a860e0f5c8b06622a17818abc8df6876e8d1a71b814b4117825427187b1ca5ea39953c65fcf00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000360c6ebe', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x4b8', + r: '0x78a596b319d9980c3397d80f55a2fcc69453cc762174334eae561ed558364894', + s: '0x39f35a020f30acf5b2911165f8fcbaf9504cdf11013715316e8a7041e450a17a', + to: '0x00000000000001ad428e4906ae43d8f9852d0dd6', + transactionIndex: '0xb9', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x96a00d569fddcd6570f39365592d0115d27765df', + gas: '0x22ef8', + gasPrice: '0x47a3d0284', + hash: '0x91af138e974e7f4c84f22362bc8f7247ec806baaa7d6cbc68a67e9689955e78b', + input: '0x3eca9c0a000000000000000000000000000000000000000064363f4b00000000001ce41c0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000b3c839dbde6b96d37c56ee4f9dad3390d49310aa00000000000000000000000096a00d569fddcd6570f39365592d0115d27765df0000000000000000000000000000000000000000000000000fee30738cbaa00000000000000000000000000000000000000000000000000000022f56d8897000000000000000000000000000000000000000000000000000000000000000012050000000000000000000000000000000000000000000000000022e6e03e4600000000000000000000000000000000000000000000000000000000000000000451c0b7518dd48654f03558b9cac8608e0e481d961570e4da2d7878b2b6d2efd41fc75e9648bbf16ac155f2ab2f1a41c1c2f2d3b3cc2958638134b3553bdbe45d73264363ed3000000000000000000000000000000000000000000000000000000e26b9977', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x0', + r: '0x6c57bedc3293558c09a4ba971650c9e9c334d9d30afd1af7f8b3afda4b774bda', + s: '0x4c73428de95a5847aa1d9cee18d65ce3c87c65d118460901240058fe0e531036', + to: '0x1111111254eeb25477b68fb85ed929f73a960582', + transactionIndex: '0xba', + type: '0x2', + v: '0x1', + value: '0x22e6e03e46000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x6541fc8b4d1fd2961241a982b40d8ae0fbd7433c', + gas: '0x27105', + gasPrice: '0x47a3d0284', + hash: '0xf37b9efe2a4130127072a2f6a3ae5c7311e48bf3022a1433b7dba6423bf977d3', + input: '0x9ff054df0000000000000000000000000000000000000000000000000000000000000077', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x0', + r: '0x60734366ba975b8870db2c22d943cc0cca3e255f4a28833794549e2146be2561', + s: '0x18ac390f8fee9fa30c6ec211b36a3a4196008e52cbe862eecf4de33f3f244ef1', + to: '0x06450dee7fd2fb8e39061434babcfc05599a6fb8', + transactionIndex: '0xbb', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x6abfc4629e609a1482878346c338f6e2007531af', + gas: '0x16843', + gasPrice: '0x47a3d0284', + hash: '0x241263ac0c3c04d623485fb5d4e7a2af103a7db5eabfe0b2d2afe0506585e509', + input: '0x439370b1', + maxFeePerGas: '0x6807f15a2', + maxPriorityFeePerGas: '0x5f5e100', + nonce: '0x35', + r: '0x18a1cae998156ebab7452e1a352a6ddf9c89c25c13c7cf329a37e7ed92b5c6e4', + s: '0x1dc0a408aa000e858bebbf484c3ac1bc3cf31791d5d9fa03bb9e3c48c84aaa28', + to: '0xc4448b71118c9071bcb9734a0eac55d18a153949', + transactionIndex: '0xbc', + type: '0x2', + v: '0x1', + value: '0x354a6ba7a18000', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x3843845731be3cadaf77307cbbfd92323fefbcab', + gas: '0x506df', + gasPrice: '0x479e17504', + hash: '0x8df5d0fcd95081999a6c417f8be98633d1bc3d0f6fcb6795eeb600ca9e676f8f', + input: '0x9a1fc3a7000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000103daab0000000000000000000000003843845731be3cadaf77307cbbfd92323fefbcab00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000b92d5d043faf7cecf7e2ee6aaed232000000000000000000000000aa462106da447c0440a4be29614c19387a59a331000000000000000000000000000000000000000000000000000000000000200500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000a39bb272e79075ade125fd351887ac000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000063f67f2b0000000000000000000000000000000000000000000000000000000064364cc400000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000dd874e7cc83b21cbb9da54913c9cc83200000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001b14b1c63748e26c2eb32d7376053a63dc0affa64038b3dfb1c9e3f339f64eceb327eddca1a30b3c3cc88ab5255a43016de7eab3dc701b8df6f67b56f9e8a2ec7b00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001b8b296b0b8f9cf8ee244f391c2fea09f79fc0229a7ff61ec4cb6d90f653da259d77dfc2c29be714db8babc1e85b8e44093f4cba1b6f83ebf61723b9b57491e8ee00000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000103daab000000000000000000000000286a2103ddf789b5414c684a055bce98847f776e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b92d5d043faf7cecf7e2ee6aaed232000000000000000000000000aa462106da447c0440a4be29614c19387a59a331000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000a39bb272e79075ade125fd351887ac000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000063f67f2a0000000000000000000000000000000000000000000000000000000065d7b2a900000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000de35910b8089671968b0bc3481af2ec500000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001bb4e687d7e252aebe5636542f4848a9476529df218d37174c7c497445ad4d78005825ee792de917c3f69ce0dbaf175f2f06eb095d9c0ca30030f13dbc92fd778500000000000000000000000000000000000000000000000000000000000000050ce7b713dd7348ae4628b782afe05c072f8d0c06949cd25476af96f50c17a41cb7411e43d03b61a3035f12cbe47f27c99e2e379322d8786828b6b66ab45df0babb5da7165a28ad190feb007f60c85072381fd4de3f0d85c23797283b76daee40c1d0ede1bb1ac1243bbe201ffaa94f693e95c32ee01cd0befcd4e931cd9170b053cd365a69daf6b52e6526d164641a34833a08afa3486ca113446ee07f99049c', + maxFeePerGas: '0x4d225e2c8', + maxPriorityFeePerGas: '0x59a5380', + nonce: '0xe3', + r: '0x2a379538c84ab1c570861f806c4d18a8d99a00c0787aa4ddf9194389008af4d7', + s: '0x6810427871577c34d495eb563158587559e2380811740130c1342c3d44845b35', + to: '0x000000000000ad05ccc4f10045630fb830b95127', + transactionIndex: '0xbd', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x9ee50074bb69897e77ebadceac4c03e3ec5898b8', + gas: '0xb71c', + gasPrice: '0x479e17504', + hash: '0x4176e756b40466a7126aef4fa046a728ad62f51266a2a3b4a92b15366ac688b1', + input: '0xa22cb4650000000000000000000000001e0049783f008a0085193e00003d00cd54003c710000000000000000000000000000000000000000000000000000000000000001', + maxFeePerGas: '0x4d225e2c8', + maxPriorityFeePerGas: '0x59a5380', + nonce: '0x2', + r: '0xd5502ed0648a8a7a02cae26729c382602009560990d904686de10e00e45c4250', + s: '0x70587220f358a55dbc4529f918ebfc7f823fc4dce3f09b0d1d4a7144f9497b48', + to: '0xf2665d9fb3a0ad17a7454da077bec9cc159f644a', + transactionIndex: '0xbe', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xc1b634853cb333d3ad8663715b08f41a3aec47cc', + gas: '0x1ca4cc', + gasPrice: '0x479a12896', + hash: '0xbd6b5651c5c324e8c2ebe6e89c633bf3b33ca9bcd2c5d730608d3fecd11bf031', + input: '0x8f111f3c000000000000000000000000000000000000000000000000000000000002359900000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000b9181000000000000000000000000e64a54e2533fd126c2e452c5fab544d80e2e4eb500000000000000000000000000000000000000000000000000000000036b620c00000000000000000000000000000000000000000000000000000000036b630a0000000000000000000000000000000000000000000000000000000000018085005baf09c588447d08d0081d3ee73d8073fbcf89ee9090a144b4544bb5a48284a494c2ffff996afda2312c10f0889c99cddc9826856fb4844259eb06a1d0b09767819da33d94f760dd240fcfa1e4eeaeae2a9922281b12a9484fc832274a9c10abbbeabe079028400120a84537680980e8d180f6520338736224b4d21ec64d01a86acf125ddd13a3339655280794350933226c9e857a532a801b9ad51b9ae0ec3914f4032ff7839b41db1fb477f3f797f73b4a98cc8f2f7feefcee57d2d9af143ebf170ac6fccf594c2bdc25213e45444af35bad159559cc3e37c2b91cdb4654e42c0aa1cad4a8ac66dc9fe7b41cd139a0e174bbe260626cf8c432e3a0316098edea1e24100806f4cba0a3150a796e8c2a6f418a884140fe33148da8be9cf33bf5fd3031290cc9f0492b1cde126ee34485d22fa25b468648cc03448d202e5405268182c6b96a5686c080c69b643cbfb1d4955d43f825ca9e7d49196fff1df5e1d794160e1c06f7dea35680942e6a0e2e9e871955bee513603ad3bee235afe569c95c9ed5288b23a9a4d9b1d77d127c28e4058c1555de0213930b7901c500d77da0681cf39b1caac9b46b975a7b3ff14aa5f7c4bccd6b6e5622b688eef202d1dc85539042e186044c51606ac9d4a9a37e080ca40c146e79c2fd89ad9a1aa69670dd65ed652e5e786ea6e86f2b7412b59714f80260acf93f1d0f81b42b1b32de1d8a4239124bbf39bfe2fd732fa83da0e316d52b107b71098c2ec3cf34e6fc47709e9c3751209d2b8ebd3809281bea2c9ded610e44b3aa366dd6fe162d64eaa2ba9d90ee38c292307daf578e8703b22e85e42b48f95b183ce4501e51a427f48db41c5bbcd1f68fa7b5ad69da6839977ce166abc05740718fcb3ab4b63fb96d2535d5a1c0899fa53d3a7b9dee5310aa15ce3c2cf0bd97ec1c477a05e9e10f1898ff2573d01bc9646c8d9a1d68f39cd217e27bce13ea2c3d227ac03404651c7147f78d08e96d88b43db129ff8a539b03468d329abb5077026455035c68a2700aaaf323fc9d59486bb5e046e002537c8960d41e3a031cef7dc20005996a60f5c907212e4e4d6fafdfb7a5cf82d2e52b6169d36598e84a5493a24c6812fcf140ee00aadebd96a496786fcb67a803341401d0655a77ce35b49f4dd165c5ba82b97f986f9f7d8a6b3e0ea1e01c71ff02f99105689baaaadd4f371df0f2ffeb2c8ce59f498a7849a672e0c17ed1f8b3f4c5f7b58f41cd2df4f93a4a543306f6f110148d819698838b6470fef39be3dc0569afd179089eeb5420ad6044778c8734dee991998fdde7d874d88fcd07c94e665eb3858d2c8dd511f1e4b20f713d9340e63f86c7daadfbf80a83f3d6c3424b53cace4a9a1fc9ea42053b2a5fb7636605c9be326a1a97a7f09d558f062bc601e79d1314d2ca07d8a6ebf28fc9e9bf52600bd18a02c216829aa5b33eb0ed7685012ccf52c68f27e6096a3e7926c36ca6fa6ecaaafc4219d3c2d2e49f5f4d3c6261401f38e881ea405fa01ad1e8ed9018787a3450f4f782a61cfc50be9d237a22d51da64d0ed528abb41eca8d8c881e98135af660f0f15773fa179acecb1ae55b7b7c3022a15aeaf077e120a663b06d6f1b0ce11f2a441288bff267deecefd4c830803aaf211549643f95aee67b6c09feea5a1aeaf6bb9100b2240ce9549087dba5eaddd0c53cbac7976877b578d38a13032e0b38e265d8b334905309319ee3a4308ce8bb7ca311d8a62eef076d8f0cc8edbc43dd2ad6321b06364c026475388cdd45c4c5d31e1ae299e6af872fe807c8d41f23c744e009701f812470b89002dafa49384aed94fb5a6d98ac10196628eacaaef759937507881a45988520f5161da10f5acef5e589fd49189f37e6f734076daab59b552a65a5b0a87a4dd7469cca43fd3fa342dbf541c72fca7bda617bdf62be853c9ced26e06c9bcc85a5a13876884c0e567437aecce5c2cc02aa38c7dfdf562f3bdb14b71185bfb4b295f87da387464f83be3c2e0517d067b86ba517f4d91d1aadfeb3012e713be77a697011197354732bb907a2f8ec561893de419a80dcf83736849f1a14110d568c053aae8a7c987edb5862a876d5fcd19ba32aee96e5642609aebc836fdcba3247e4025073a4288bfc1f50984303e6df6a4ba273ca0e56bec77d8d330e647b03cb4e13f740a34130201008040281c5a19017b05054790b620cece3212806f660be870e7f253ba7f04a2821afdafcbc7a669ca548821591d9aa9023018cb385a4facff5b07b2c7404c65fb5e5231fc91250262953e02917373dd1161bd831990259ec27d514a41b21e4094ebad0a5f4c8581413fda435ba5ba477e57f76a4b144ea713fab622802e093664ed61f6423e627cc498170d25d5744ecdc38fb8f666c69718cbdd87dd0012686cbe6f6cb79d5f95c43fde4c148c47c14e03e9a1bcb3aea11e6da76192c818ff86877d0e73fd1e89aa90f09d3a017f89603cc71efb92b10ae7a5359e90732bd53a38d4e844774c7c83d0b6b80301fa716afbed3765af3d05c6cc68887f0fda809375d33b794c808f6350452a2b54f73fb2085428761e56b104e65f39f86565b616c446555dad9d1fdf3fd0b7b9288c204c9d41de26b0a80c0af668388ba1651262b09bb6c325eda7bb78bad941facdb44a9798ed6823be730674f7d9a699935e1fc17efc391e449190a46b54bf151367304e1bf662ab65cb73a5647eb220032b4e48fc2b840aae15d1d781264ea50ef5f7b73dfc726fe9d2236574156f829f8d41a0df05ce717c90f09fe87d7c8ad183c7fb7fc5b508904cf285cd3322ddaf3e75601019560b1e4aa43f01a2831b7cf991384097e9078eab83bf76121fe4d9332594e33650849b0a03f650ddfa3b48193cfb60a54803e499416b25d97144e571b99a94b6bf6cfc9b6fac66270446527b27484d15a9d14486e1265080c84bef20f30c39776b8de86cbd80a9cd1c1a9c436ef61218ed51b922b0cb4e96800d8b3b278deac8393ffb0de72257e992e6dcb5f92c7b0d34a6f716c85eeb47a9cf5c034e7ab9880447dba697d779beb317ce4d8051979733046a268055a5d6546fecd5886380d671f94285d02da072de52758b18946b5199768859850b4927bc4914507113bb9b34846973bd9643b864701acf9e072c5e6df6d8faf359aca2da7b594015a61b3d177fa27a1ada4110d0c635be0ecc74837de5b68e881cb7412fa9f436b56a7c9e49f4fb56545c4f13b9df28846fe34c9fc6ba400e63e00e64a469fe0be2271d2c82299202c0d5353c323b1c86d5689ba688a5181448b8b7a3ed3dad87a142cd8e43e23837a9e3a8e35af81c4ec7979a771ce09484d38471628bf00da874f6a8805ba695573b0c26697a654a7ba9c0c6dc6104d4ac148064ce228fe2495f11b175c00bfb7993b9922eaf4ff02198e54a65e921fde7b669c4dfbdefbb6a8d1c60fd3577cbedd50c8737b54794b14f83e06dedb50e23ba6134d45bc99a345f1d1c51164bf8a61f5c5f2fd11db16cf3adc36a25be6cbd7a1d9b39042eb266140436060baa834c6848ed7fb47436cdde2bdf5a0a8a6b5211bbdc04ff70371daaf6905aa40789e42cdd078d3a1982df7079d80717efc1fb8d5803fd55d7c08b25c48a7fafc3d1081c443368f837d45e4d7885f1eb287d01a22e23d50bca64933ff364d53aa1ac848dca3fe6abee21e0bfd590ca60389875dedd5a6b4d08cadd6120539923c3d22ab38bbe0896caabeba77cf2485a1a78f1e4874e393f298ec5a074c93fa4fb2278ed82df38b13858a25efad677d531aed01a95de5ec1b00f77e68956fe344c7ca3992ce222cf1dc89bf51aacb2ca15008c5f85b151c5ac54730c1df26f9a3bc7859167f73d01c172480d3752a9c70e4a3d5fbb5fee829e4b1ed032ad3014a963500a36aa6430ceca9046b594733de38296993168d8318541ef668821155343fa4bc2818700fda4708ca8311ca83e15d370a62f904351d0cddf71c83162966cab5a49ff0c255ade9d7564fd07fb482113d90b1a87620e67c2039b9068023dc14018458147876321c64b8c8b0926123c34946888c30093a901f1ed281e0a48aa108a089eacb63e759baad028f8c549fb2726b15e2ad8669c6be3055d9b4314a517b0820c05ef47139df64ab3f5f769dc1ad1bc8e607ad77f7588ada3b0ce82eb9fa8b2926d9648b198f50aff6fe021fab65ba94bac02f495901fbf876f9067ffb75960fbcf97f9ba4f2041c86ac0321abb3838d84424ff879063ad35c0cc79d7854095d3949433b3647118501a8f914bb66a679b8b24e0b21f18d176f384f7bb525971401329435bccae921d9532565c87bf1f22d340802da072de5af7eb592f2e9d874527ad5c9d6dcf813bfc0a4229d0ce17877b2b05b28fd5abe06744ae96a8f0c6224f8f6f55ffa7e1494a9494530c67cbf119de0cc1dc921dc91e363fa4221cf9e51e52de0f2f12f4db05e8739bef4df7e5acee58c9f93543d40b95bbd69f8a5261250428dbefdffab1b113104068829cd2f92c6eb68299de65a29bbfdedffb5ee66c1d57b3d9a6f1846e8971d12039c3ee81c1ed2b197544f5bcf1c8891567efb5fe76ed24c9076ba1dd79d63c67a41201008c477ac56e873533484903a4632a30e144dd03d94232c6feece2e19cb0fd734fdeae49c627afbc54b25a25ba606b6b8cfa3b4012518592ba393daf08f7db4983ab2e7e2e1d2e75c90b52aaad84842f03d67318bfc7d42e7fab1cd7292195df3e6eae7ff4d4de465df6f2d1ccb1d9cda532784135c81701f4c6b46be5423c1fae7be795926cec5b97f39caf708817482fc2e5350257a3e3a980bfa02668bd2c77ccebcc2a5c0409393245766f916dbea26c08f77ce5ad355950caba91cd13da6d4bc94e124a2c2625614f6dc16f315aa988c7b3bd4822753f1c03caecbbd3ac768f7e00b6253aa8ca6f95ba145ffda782cdc4e66ce6f8efece5aafe312cc24fccf71f84129ad1f6b06da5a6bc3273ef07fbf2744a1bbbb9848fe648adbbc6a7e4d763dd3de7c19bdd0d00f94a8eed8d6cb39fba5569e6fe48b3b007b1b913449a1990fee0e54e94ced070a67decd5b61c198f2b097a8d9c5df83f69d5682f3127a8ecc155110dd1f6f3346265cce67b7a727a3cd54b51d954fb4d3ca7ec5c6a8569175326d60531d4c3fbbead23795267bf6ce4c237f2ba44d7e761f62888cde11eb13a431ed87b7dc96015992a4eb44a400e60f014ab6b37e39dcae8917d7c58ddeb66afc6544f0b4eca1e9a6e78076bda9d0f77b8924540909941c63ef8b4ee662d7c2f96f3da4cf738422e5bf4e40225f7dd7b76c0662e4a79e5a454bfacc7166ae42606a2aab89486d856b740d6636182af63a80bc1bcc0292d630a793961e7047128535f3a47707cb0a9f3f8fee86052d3207ac31d051c6f0b50073435fc0ecd1906be4c07d870ee75ff3bafe3f419fefed3a2fcd305f7d780ab239e1af3c3a570f1dc40afa512b5ba12aadfb947c33176e26243e4e33f572651220498ef2acb5cebf91bea66ba4976169a03e2bfc8f719b94b55445ff17dc5ac61ee04eb40420175d62049bc7cc2d1957640d594eb698e79967abef7cf1e51bd614f0cbf67cd379cbbad6f342ed7793376a39b59f5e9d1d9bb1fdec8a02a13e0d1096cb7574f698cabffe4a37e8afd6e71b761f8216783ce24c0b097c73ff333714012cddacbce6b9cf32712bcee83c36fdc797494a574360e03c43447c689228d50503663c75416ab79e859dc6624c541d669a8d40ce11064cf8982085fd843c488f1c0402814020982228e405262faabc258a852006dedb50229b390800870648e4182777a3b37a2d4e99d4a5b7389ee123c14e2b3745f4c0d034eafcdf0759d5c0a64f9c66098b4252eca3d935dd3d96cde74b5c9b1b4bdcf409b1d5d7773281c35ace9f98f35f26dd34cd62036b30766cefb519e987496d5f66526e7c90fc1592e638f241a67ee6bfe439d85dfe3f3e883e1b01c2e2283ecd3d941a3a28ce557a1b3eb1840840e00cb90e0a6810594cf665e885824bec381df1e99fa3e8d78871cb061afcabe0bb3b64bbdf0ce2b4f5f8ecfb1119188fb280878081204f5f06ffbe6ab716b2142cf89d31b563b28d1cae6d936dfe774df0a5146a29452dd2df859b2c85fcf03633162deecafbdb6ae0226be1e4367ff1e3c01dcafe314fb30d0f5e6c42ab1e91e35626b752720ffac49a4f816bd9dcd5f303df6e65fd84200a11b54ad3cdaab1abb968289ed7437f4ae0667db5779425caef81b6258c30c464f7d7fd040fc4733bf1af0c35e5d091969ccc802f1bb7a872f40e2db5ab2aec86531a35593077e51f718714ee633a1ca5648ec2a7bb81bc2aba431b0f2fc5c9cd8d07edd0a00b7b2cdda4751e27e398cd687c109f94e8feddb7d6d320146e8d76d0dc6b085f143212dd178a0f6b1367f44eac0fa6d4e107deb3d7dc025c1aa4e5b4ba98bf794bab6d659b979ce4c24c2e414829c12cd38b209a97aec6d1cf4fbb18bb86ada68ab2b1431180fb7fa7e28a5123833f2e0b32c930254b4b02ecd11f5f9e331a8abefb5bf1147c03b4178addf94f6eefe6d7510c2d085eeed5167240b49fd57e5f26e9f24faf3972f6c06983604020100804825985bec02c46a3b7c3c4c0d3a381a21badd473f043f976ea95c9da50e73a18c2b246d02fd41692f9646af9ffcd4a28e90571a20d68cd08ff1527ed7de5e832c6feddc8e014799fbf1982435641aee0b3da0f3951ac23cbb197014e619d2483514c8dcbbf7f4d6838c5790b8c45d71fba1c859c255ed065bf3e890779b99521d00532740a43790f3ea24e8ccc303536d24047f4f38c2b5d92dfed69ad46ed5017173ea7eac34080ba5c47dff0a2c47f67c65a2fffafe68ad6a8c3adb76f250eef82b97df6f2141a0e7f87f757b928c84a8c70e10c28463e2e05148d70b291737b32b2dafac92584a7a312dbc17243c0a4f94c3a22c680f9aa7c080c70fcfd728123ba7bf2b894ead4cf2d543c8cdd83c5ed3184cf87277b1ebee6bd0e185f3036d398bd66e204ab7eb6e8dbdcaf9bcf7fd33d5866adb20dbfabd7e2ef380447fb1b3557742471b61823273ee79eb0dce3e74a174594ba1652aad759035c3b67306743e6eed059c42558e3ab542664386f36972fcbcf4d84b46f35396298cf67bb7848dae85535b50df2b910d60911af87597964da0778eeb872b1cae111347bcb13daf01859b214ec5a724acdb00ea36f34a60a2dd90c935f3bc920f20e93b105e6f4bf7e9d64c391494aac526e435d1560dcaa480de184bf98fd8c0a8c719ca5f426849c6b7de8f75f4fc67a42cb7f5294919af23ea78fc5f163626e9a830d08aaa637ee4b97904516f74a821467c0f50cc25a470bd6c21e912335809b213df7f21192d708832d09a3d9a80bbfa027dde8b77bf925b616f4def794fe1ea84aab4e3544009e24d483d973d2428605f6aa01c7fc6be2f8fd4a7c7df855a55e338c87b17de500c713967e41ee3576f312ebb7c6b6a6527fb97fb03f245b92e62aa27b27932bd0e11aff65c9fe14e48b11906b18ccad7bc0b7db3cbe8e6863ac806a317168b3c1ba95b1e7106983ac60e9c2ef60fa1dd8af3f2ffe3395c5650d3c7ff89678ca32db2cce408dfb408d03c518e589dfda376ae551661d366ee378fddd7d51cd66def89f3f1e11db9e1e647edd0a004188d9699d5e285caf0e80facecfa69b991292cda6bb8689ac963a290be1155f983a0bca05ccc7f67a4257a49e4863ecb24f9ccb2ea77ab085de31496101438ffce35d5385f4840a49e8fba0157543a8569bd5465d83d03566dad2401167e5b1230e116ceddb709d16b6d30ee13a208412cf04721ea5efc89950bceb6fd3f430c1cc865f388b5f0aeda52feeea4b9330676f93826d3b12c2510f31007d2ca74d9cdfffacb5a17921bc5a5e475998e9ef724e889e567d012aa0016b6b7e7df4ff5dba52f9f5e72407924e15b85573e5351210792eeb6aeee0ed816ba8e8cb367318ee8330c7183ab083626cb56f41d1d8f81b39dfa86e6e63fa677fd3a5dec797973e52a72e8b49c443be622d9b788d779f60e2cc339d5035f77fa10f834a82ea5429fa36514c4f36ccc96a5aae2e398f204b6c59ce93f4ff34060e4892708e4b154360e060770fe4f097f4c6c0fc07b520010a1724108f7ce41677585231330927e1a20e302d728567fdfaf4f7a26ab3dedcb0381653bba8c700ac35f5eba07d152c3fac085b20416075994e9d3ea7cfa41c993de8bee5c3b4ffe07c2ee0f95b35fe02734468a05268e9438b82eb862abc8785d65751ce8da1daff70864da7cae9f8494d7aa6dc255cfe4bbf5abea7d2e3723ac4f886eac45e23b45ac99fb605ef286c4976eadad05eb1ae36bf14ea19ef61a23b19bfe5a343e7dd430302981d72fe4b8c70c295440c171d51b55c759a10fabca5a44d24d1193169ebc3a1c296523dd811f31d4ae88106458a95dcb4a2fdd935a9157e31a6dad8e284bf9331972f78533bb66f0f8d327b287e3f45a2bbdab33d976db191142c2a9a5f0b511e554ac403ae1fb7792afdea83562bed0be46d435a215faa64116b8ab9acc2a9182084269ccc7cc772366bd5df8d8998f9f26dabb8d84a7ccf56eae2d49fa1f33507f6694ea0b588c0a098d3900e7733fe778343394434ca7ff25f13184168b6ade4df9c8ca93444e59ef5951abbac59fb4a5f3692a01ee002e84dc162d4c26c93b95304bf145061caebdf7c461412303beb45aad1e5da953183b9f00f761c7b87b012126bbad9747dc094feb046bc9ca81aa344a19c7087c9e08f279e2ca2170cfb11f41e346ea8b41b3eba71836dd3a2e258d5fa42b1462cc40119cc4e45a273c5aa30633af1cb0f4b7fd0fb8ed6d1d030eb9ddcd38ada7c178500b89b9dd69f9b02154b9b66d5cd2eb246ca6413c3835f2a8ac2a45655d0d775f9e04a75a71ddf61daef9f72ee8e4ee829c77caa3af97ec85b0a21c9a51c6e6272c29ff6015930db0335d37f15b96f09d8aa6c41299654144935f09e8abfd2f5f716ede97e1b2b4f5c6ee1ab2596911a3c228f9ee152b7cc31ee7274753d7bebba97adfc5840786e2ab32a9c6ee935a9ee2506de6aebf7c7863706fe975c3609356bae4a47eed6053361c7f32085d784e45694358d3be953bcfb3c12e7e7f5c8db4fd103a129fd86f1cf907042585ea0c99ce1353580ec23c1e84ccfe82f13956b132c1265fcd948f16e1aa216969f6e08984258f3e35845c6e294709095c1d42a8ebf87b46262080c64e09b2961906866fa2cb89c9ae41648669b561a420bcf301dcd0e2ebe697f0d0560c88fe65b7f6b6170eb53721e1e7ec3ed680edc7fc45e9709046fb74c9c766c88bdd14fbafa9b6bb57987f65d11bb71f0177072483d0f4f65cef0ba6b919538e16f37944102d4a25091360a195a8b25df2eff5a53662ffcb7deac87129f1f4e2304c5f192f2beb27e198359eccbd42d6bff8b4a43682269947ff1bb9846bee80fa61635c0c8a01a92bbe478c2b388cfff92adbc7c66f089f050518a50bef40de59d79b2f56225783f4dbabaad66b72d32888de67431782e8a4b0e9a9b31007ac03663a697f42c04a5ed4080bb35c9a44fb638ea821a1ffb09b5839dd14b438f35368d7a44056ad08eac091b6d85539017a16f021097e19ba0d11b8b07908223a97e59ddb44eb0b62ce18777163179af9b3db3b9c162b41bbef926027119fe31624d1a3c0c22591e8a00aea2b97c3ace9da9a3878a84aaf351ceef682ae3e2c25a70630f45cb559f76b400620f59a7904e0f4ff736bda4ee0276e5d1e54738f4cd3126182b95c853f81fdf7bc005a519d6efc6f898810cc9dfed66b579d80d714a60a2d4bc171f1c93b89337b23becb14c3dec5dcd7ac82e0224abc831ecc2fb8e55b7646d2b5d57f1cd213698ac2dd3fb93b37b983f6928dfc905ad5ef8bc5804472c6f31f261424e5a975de0d31513db108e51fc3bef7af8dfc3c24ace6213a33b44aa078c547b75a9701affae7f0c21a6cdab682923173e9f4a84601ea9962130b0e1cb21cf4017d543625733f5bdcb6a28c03cb250e254ab66bb77365d9a93b911084b889ec7ea4ea983f98e18e37dbf65d93f26b2101684f7e313177aec2bd90975b71fa8014a7e84ad4178ecfd776817c2853066e52818e1a5376d79559300aed5361545915777a711c0e715d10a238be80dea1edf0a0dd26cc978ff6972a21d382d7573c9d59a42df29808c9c32453e10638e7cce84f8145f604e86c3a34bf43078d2fcd83591ec8a74ad07ea0282018140c54404c2431fe3267511800a04f428b18f09ce85e09f9b28bb548318baf0608d1c5f2157a34ace1af3ad1edd5514a9dff18683dbc10d3580019b7a390bf16ef1abf6717c47e336c9ec719680969eef2cebeb8c64acdec2795240a0209d69b07266fb3ec1c42a3617099c05ae0432e460fc74e320f6f7bf9c1e44d87c2c01e93212a65f8eb7150bdf574b92da20aa7f8c920bbf4cf10def3668cb583888fee040fdb19f43a81ede81d60eee1ebe566c965e568e7c5bd4133542d225e495fa96fe8639ca0fb024876f9665866eed677a4da934fe5bca3c06785c4952676430282137d392bd7433c75ddf5cb82670f8b2de09576cb71d4762bd954dd0e77ae7a74db3108735e4c334599632d3d1abcad5f8d5f64dbbf8091831a4d0a8e70ae4c69e7a08e5512faf1c43f3bd3b93a802425da88b9dab3aee6a260e1dee475a44eac8ffa1cc011eacdf274b6312137b8c241ac7de46111fa6e03e43ab54a4fa5592b65fb23c0a70043bfcffe8150d6b4b1011e3cf9b038a164504e5c08880fe67313d20db45bf6b7b0a2070567493ea4724c38020206466691032b3c41018b88bbe1d1320fb8a52e0956148f5f2376c6fbfc0a38b0355f6221e8f11c2331e057013edfc7a087069def45db4ee104a247475fef8e86cdc2bc5623217ceab96790281402050349ee2906cec2cc82b1c57f7bb7ed216be59ebb2da960b662c4a107c9c14ad048a2475f1760b48b1e55ceaa200a514913f719d342b437d86560f0433338e5e4f02ed117ab55c57fb7ac1d7ab31198a9910a1dfd1205fe8b357342c6f430ce6e1575034ebc4500e1559d092f8c272d04bfe080d3d558c1f2b1c016c02fc505335dc434e1fbda83b141b8f22b8638ac66ef2a2e21e5915ef18101eafd6ba7791313a6da991b21900d205e35f7c2d2b4e8d50ad2bb992edf27fa0130407ec26fdd066c79468047124b8afec81429e3baee2e568b33d3f04aa925a84bf81e6b4a1176a7da729194eb65bc28bc6de7f99433a5a91f2f90417d0a7b92a012d533db3dbbf7841f9b10758b5f05fa485666a4e3ca6e9eb57fe28e10eb5b5a3e92ff3bda07f72760b00f3b473f7661a65525b5a28a5a513e79885f7693e828fdaf2e8556f25cf3bbc074c012ae542e663670eb60da4beb4dab835774e8f1ffac9ffb26ee9ef3b9a3e538fb61deecc2dd188249c7dd0972f2e2e732f70034addcc5ca57648607e5d5be8d07fdff9d396f7ddd18283bfcb1c731008689b8ae9230a9a3605ffc3ff1a839431b76744bea7365e5d13d230183d638fd703253774efce6958fee7e50e4db64e757facae567ed2ffe7c76235ef9570fa0697806a751ae11e71a2588803d27d11e53cf73651554b112eaa59ff2db1fbd360e10dc75570fe18518af649ff063051d2fbc624eb2b77c605109e8a162af5cde09512c496c4f19e3254f0c598ec7c78503ba054d1e4808170bfb2cdac51c39f9625aa9bd094adb50477cf2f3773f790313ca0b3187289519246a7d2e0d8681fd1bfc33e9a98a40cff4adfb0245621b0fbae60ddf3f5cc71c4757c214da0c78a684c7d6a49fff7373e133bec26aa96a0ebe010cf413f7efe5f0d18be2b772b69794922d96c6fdf2e7d4ca87cf40812ff5f2ef81c95629fa74dd959c875f86997e86a69a07d34ded8c316d751546a2bbaca8ee20457809e9e658849de7f738816bfa4ed86f46fbab012cd4af68952c6f8e209cd6b819bf35a95b2bd6ee745188ef983a9dac6c87f574bcb4d72051a896e63e59188b7f1bbc0424aefb472fb170dade866ecd0c8fc17e3359b0798c4baed6b4b6e8be286fdf91635afdafcd6778ec92f27e9421a5fa62f9566b432b9bf43296491d623b59df55a7f917b1bf90ff08e0fd889c72d8d5484697b27af5743453b338cc4f24322ed7d8da85342576117ae623c9e0591be00734ee9f3b596eb0da40a09aada7deebd65089bbf353b1a0bfa8761b373d72016e13036436000dde8fb4114a575a12f3a7e5ab5729e9a77ddbdbfb7e927ec26c2969e2f7c219b8046775174e4e45f20e12189e0a4d8c445dc60915a844828d38c747d5b09feeaa80711130403028140201068150a795e8c2a6f8982df8e8841b8598a8846be25ce49cb2de84ab5e4ffc7decf717789e5010c061856c583eb4eb090b591ff97449fda671ad5c6e29ec016d926da6ac563f954ab91059dd1897178997b5f21c029d5059d16ab69d216a33885905528b957d325d452ba099a61027775218ba1ab552104d017080e4d55fe779098881caafcc60101fef8328b3dd4524f8d4805bf6ca9e37898d4b0f28908500fb89ce50772aef488343cf859b2b3ea2bd21fe4fc98e43fd532189ab790933be27d342201979b10ed9c509f03c89262b149d12baa2b11ebc4d00bc5749c64a68d1fdf129eb1838de762c49f854f9712fa31a9bc443eff6d1dd120536cff619016a502223268d9ec43f0e215aff3a34af8f8550ad0acff443b5287f5764eafad1e6a3abf4f44a3824fa722a6b099f9f24ee1a7f5474fc507faec190dcbdb98bcda951ede22cbff4303bff47154769bf4421f45fbbe2ac7e31461f6b546fca0bc5bff3f6bd199ed50e42e354b4e6c63cb85d803432b668d9a4b84a692e9ee2f2d807f48545ee93848fabe9b88268ca7126b06fdf74c1cf8ed50457f864ba56c46027efab8900855c2343d1401e0f5fee3baea6afdfe03ed81e3b0e2a872b447e1564c8d21d10ef239f3d76d5b2b20e135463cdeba79f81351c775ef73dad1d6534e7e49937660bc411251014a91154c47165bcc4a1f79257f05aa9421f137c1a4ed7bf89b6ec868ea01ce1b01f5f356c8485b1d4daf8d4a09809ab6683aeb13f9f89d302f78598557928189e5eab3cce9438a240ceaebbb7e14abc010405f60709aad7f0725d2a8c8d195d645b58d1421afb292a20ae903be2431fa7bc6c3a83aaa47b365f440cae17ee9370b007599d7348ea8396abdb44a092a131a7b5bd11eb42c8d5a00e6a3209bb85be756a81ab26d573b6658f5813b5ad80fc94ed12e58e124b37569d9347f39b40a64810ab3833f4457f0a5e8d4cae7fea3d3ae60f425a164b55e8450340bd43572ee68fe98d60921f02750fa44ca811b903f384140e521e8c241409063a83772b70b3a8252fe211bf773b7cc8357757a735b7004747345ca537d805aadd34a40a5fbda29c919e05de09da5cb52691893aab83652fecc8c10d377d11b059b50388a6b2066f12e069373a25c78e07739df722948393582f5bea1caed07d62d6be3ea3098f64b229c200459037ffc528908be8c621fb4e2022a784d1a4ee75725911f0dbeba113821a097b51c40b3dad1101e537c8f48b3025470d67f8755b50b07d88a7e56a6fc28df788bb2c86f7597e158934289a239c2ee5e03959bce802a1f6e0c3f741b42dc2aa48db47ea38922a62e71aed088bce9b4a94f4f8a91b4607bd20c38631faafbeb092f3a2910851a61a46a259b1e303f2fb3f0dc3ea8672bb063ce2256da756c010e269e4cecd98883096a61a27eedbfedadeedd0941a7f8e3f5e23701366c5ae9050a336106d8ba9f6bdc5ed78ddf213f1eb486cf1c3e73880abae858c9b5cb4445f9859cf0657ef9a46f3f39809fe8fd570d5bd5c8d0212230d49eb65da8ad95235d840b2cc58fff192ea13c478466979740a152918e91eca08cae5d1d4524deafd1d075bf33e403b1830c69c06287faa8df5756da265cd79a622d20d6b9b7457fa8ee628c7d2566c4d9d4c88fc5bd727454448490c102fa5fdf1cbb1c1ef4218af19f3db6f631a25f7e805b17c83ae3f42dde1cd2801eb00c1b2e750ac80255ec1604780a4523104cf30327e980f1623f096758dd53ca6255afc7aeca672cff9748e490e1f92268934215b33504ac322a483c0c818132526d8193ef76f2e0dc6fab14ae653df137fa36f19f0e3f665dd52b6e8a0f2e8110fbdfeace6db9fb602f388aed9423d7d9cc0d74ee2c62a2e9a35751cd2d8384f353ef84429e5ba3ca5bd82bef5a44a13dcfa92e132a13141c5b42ca87e5337f40e191c8d77f758db95037daa782a5cef18d4f1ff72431dfdf3f87839065b3c55b0da0b3a534606d45e9d2e726f22b7cfc1aa63cc43946397ab8953193a1da9aa07dd003f603c18040201008d42aa75e6894857121a56b903d0efb3eda40eb32373d218ec7b5a9719a0591534886c040bb1526e0b459e41f7f2b650d25944e537d2131bd2c5d223ebb112e3f75068501b24833ac31a6be2066fc5636da76bbe064c7a6a66058498b9c83854e21338391a327d0bb0c7ff323472e3fe1dded735ee4c4c5fdb7805fffe9fe8175e4785e1b883b45f0f6b1b7b17467b3f57100595dba7f4f71f11d547a638f02fdf3e72e1c540df9e0d66e65d4781bf7ff795ddac5309c28adfa3c543b8a83d9205ddca083dfe5832f44db1108bd7f0e31dff9ab47e5430e258076af8df35c0169189859d1eee6e97e122e973dd0bf2028e4057a1355dea079708044f91e116df76f28a764dbed7e8b70ba3f21764d0ff1d3571b28e7d9cf881e68acb9be2e232192299af412aefaa4895f95426484da17a9f44263a05dda4e3b33bbc2cc4c5ba0b102e5b0fa47d8ee6eb68a6ed60e7abc72b6b632816e96ae8ed620ab3a4c9484ec1c40829de3bc4826f03f7bde078b6d67521e586240f4cb5f5d5df9dd8eb267d5d3ad9aaa5389f84d76dbeda30c8e10c831940371c0aa1569ea131bbf24211aeddbb3fdcfd2e7acb6fff84ea6e35905f2475076a34fc85596c21b0db964a95ed6906a15a3a28eb99243d02424069db78122b1bfeef8ab5e31bf9e3ff568647300bb0ef322456be649799cb90120a82481b3038d6801b26a3263b2eab3f29a3492a0f2b7e6d31e324ca20b5edbeb9704670c3606ca4614aaba690c68c8121313134be7ba55c7bf33bddb6c8bf149280f7670dff6d42966be83acc536a33827825a72ab90dbef46dce3ef8982cc714aeb1b04433f23bc65befe6411c463774f03c247cbf50afcab9b2dee12ceb033edb378e91cd472eea6825c2446748a3a5a3b7b6094538d8bb1933e0eb42ca6ef88f0c91c63d1283b5839490382ee5ca8151a3f9f096e62566e1f098951ca22bacb5de53d8776eb934f8dbf61e20d95d393c802660e8d5f0a891a6803d0d665e6785f5299f840adf73fa4013f8f0ce196d3d14156eb6df8c4e2dd9c4e3ce077828b17c62c9833ceffb161604de5d63b70c875cce11f02035bbf2e25ed969de3ee8d7a63d3103ce1bfb3917cdfae92f0e61c207435d970530768730d6d3e011a94778a222b39f29a5629f717cb5dad5aec4ab8bdc10cc3b92920100804023dd608db6641404b6c22a2ab74b59e83c5f3814a2a19d2831017074567d95aef07f2d0d7e91bc54d95905a385ae93672a4e5ed5c86b16896f7f2d41e73403a9e427e580750ccb2c2b8c5a555911d9e0e8bc8adf9669991440fda345fee33a5fd22ab525b83d0dce3903f6e730aa80457921e91c10edbdc3caeb16f5859c52af0757afa4273aee626f6efdb779f3c8fa75f72be08788a453c202b291a8a00506dffeafad565e6ca53157acbfd2c8a0afbf28d5f1db3c84c73ef69d03447bb10401aaf7a31d9ef4486eefd593b1c3b4fea3b8c2c31a4b377e3596baaa609c92e3d7aeb37cbc9734ee8797d6ae2cd72e8ea9cf2c8477730bc3d53d9dbe7e6548d49b70e550b73f4eeeb29c02ca555cae918b8bb7b1ccac51e715591790a25ad53d3db190ed69a4f07151bd6e94e7fbc32010a798e29fc2b11cca4dd8a023038e6b9909bf6bb6f0acd9c7a00298240d250046040f56c2c1378478bc64002bfab3dca8c97269a50e945fb44c429e4c3ee51f11b30a46b2047c1e8548b473cb8d8352c25dfa25b337b6974c4236129ac540e7f45038140201008620c85bc40f4a2ca5bc822621090ff0c45132e8273f0e6055a3ad482be7184b43a86b166539e49afd5c683f3cb2fa2f1d37bc027b1579b8d201008644b707723f249704bb2d6995132cdcd8cddc52c7ee39f59a3fbc30f34852a339cb5e0ae8a399005188bab0c367cb6a57f0800441c4a3bbe8ca4dc453c3fbd4d2ac07cb3a6928e8b875127b0be78ee82250d8b8f168c890a2a8ec89d441927a34b1e2f5d2f982ff57aa85cfa13f2fd855408347844638270ce1b94f92a0934fb204122007691e4dff019c7b54ff77f7f7b74157a7cc7a1bcf51ab1405d0da22b06368f590176ec9f6d813dce0f53c5c20421b5a465bd89ba5a8ba3dc17a78d24f01a13eec23de080b07ff516e873631464a7e5d4408d8bfc25472f6c48f5bbcb754cc1edbb234aad0c78e41a4f33a25bc6e064d9242a8c60cc96efe02f6f598f2c1652bed82da55a444b72cec49e383e6b6b38b455cb748254f4f446b5bbfea5d6142003427d38747e12f79189dcd236457a39e9faa50a1cf5777b7e16cd5449abb98dfda12b3ba090e796bc3f3febd82c082fa44d4974b5178b8a8a8a2a35b95c3637c917f050d573be9bd2ee7061e8d9a9b16ae19df97a2c40ff1bbf3b0f5b35fa7b52aa121922eb4ca5f3044d29eb0abff6334ad02c35226440bd7d9baf6647d167fc02fe8b2efc6f9b43b05c0f9828039307c659350aca1a8370b354c7b7c524760e39ee43c6a1ef3a26ab09e7aba17adfebabd31dbf1c7296f244511a563d729efb1aeefa7b56e41f907b93eeea35610afe94021417f2da0bddf1a695cf70b4377a7db2b6f3f2c62a4c0ed4aae162336b080cd4e868fff073b43758cff19ef1156f65636b4a8004e30411e3f6cf6b4f9bb540016c54361a7ee6249aeee2587d75c07744705ae33d5abd6308f3549e28f425d6ac07ec0382be80dda3a8aec2e48b8d8e16c839cd920a42ba3c673dbeba262738c00d818dc3b589e8014377c4280b0c68f048c4b324ac063ca4bda62acebc7273f8cd1934fe2a631894358166a32c81ac56d9f089a3b9f04c2a7972a9c65d4467c17882a2da297c13bfec90e3dd6fa73f4437a87d56b3b0e6f40fbc5b9effa7e8d138169bbe511fbba9ae36ca7708b0ece353b48386c1c3579c56fc2a24401766825820b5cdf64b2c1accc55713443f0df9051a4c1d942d6677eb54432c709703eba12b5efffcd31eaf9b495511bad48faddda348d2af2e29606aeb956006309210a68dedb9d2bc97b9f2d8d8c597a8c6055e73eac3a8bcc3ebbbc220fcf4c3df34a70a6bddf40ea24c3186b3f9d179e4bf4ed7c5cad620b505756245247010f15344120ed92a213ec7da8e700a87b660c4fc8479cbca4780b398359da434de4b21b7e2af478b730718a6dd5b45ecbe5ac5179a0c597f34b3e662aebdec2ddda1300dd66278bfdbe5f680cd3c7f651114f29c5fff488a28abce8194f5fe5584f91184cc7c074266be0121335f839099af40c8cce72064e69f2064e63d1032f3ee5004209fed941bcb77a78af9caa88801be2df33bd1d2f4f634cf5abd4083d16025b307d83e2a3e675450cc892a05e0deab43318d6fd7a2f8b1ca126cd734928390bd3836fa897111024cacb5c715e445e4887e827ff9ead080a43968f1b42d9cff3d07316a3389aa49c8b28ad7df3ddaef48d0d882db727f18695dd609f351e0fd8362ebbcf7863c392132daf8e42365d683d54ef41fc3c3706ac0691177cca96fac19e16eb2dfd1e04e01d17e2e7bc6685812b186a8900d1733874a494a69bf3bd7898535cd4f55a9f6023d107e1c9b8ed58f1255ad1603b73d32f41df388c64f11cb6143ea185c0168c14429f2b873ad6a50530427e1886e1ba45eb834902595c24ddc97cb9c2842d8f0e5a5474508f9f514c864f411b443c8252dc825c128e34360e008a5ea2f4aa84af9484a33d9d58e0a86209961aa1d758baa959b9c7f32064e07404ff115214d7137b8fbbb5cb8c3522aba6d82ea9b2d762ef21ce40fa416bb7db8796e84871930947b1c02ac4e8e61e04687dc719aa47a580195a6f2897479042ce34391d67313d5aa370c3aa6ebfef9df76a1c9e4afbc2d100457193588e05d7ecc4fe855b7a2281423077c4967dee948fa12542f537b0beb811e4ab778cbe50680d38e410566f978902fbbc274321e9d7f3ca6ee7baef2c9e85895b3cba57571389f0928130a794e8d2a6f813dfa30e0eea88b516f5c6e4258d32da3b78bfce2c531d361f16b9dc44963093c8a31c1520686c0406cd0e20161dae6924d4479224b47a755bf89a9c0c75ad96837b920a747c325087047ea7d8e74382b3a3d44205c4794c237fd92fd8b5d8a3f9296931aa4f7df6fb8074615040302b132190a798ebf3d4911671539e0b2e27299fee432cde532cde6324d271253f05004a08c259d384a877cdbfbae2aa95c19e621f6922f9532a0fc1b730c7618c3fc7e1b087874f0e9f8849c4324bd2db1e577a3ed4c1fc3774e4606a7a17cf71511f2ae06028140a0a89af21cf371ef364a6d5addd45e17c738591edddcd1bd4840e319afab359a271768dabe23b44412ce3ee8fb59fec6272bf3ea4f2511c87fbabec73e5d72ef2a30088838b99223a7f5d618b6ae6503ccd29c70f185e44aa885f3d697d7df8abf1aa29e45f40fa1235f5a540e6e46f79b4a7067222abb6519242cc40cd8f89d4c39c490ed94e6c5fc8b54fd32dfee94d064f94fbe70113d6019812b7cc113080fed676bcee31cc1507cc9317e2b730d7e5c6beb5fbe1ffff23076ca7c589659a643ffa61e7e302783acb6d8f0c9669ae0f23b5037235062a74f5c58e00291c5c444040ed98ed823a3db82b0af75e9d21ddf6f9f0edc3f793589e9466aabb586e4b422875bcf5f826831c52479e85077df57d6a9e306d0c0fa3cab4cea669e6f18ed4df22c758005fdef6f64fdecbb0e96a6cffd2c783f399c893efeadc1c0671bf5d022ccf91bd57b2e0e4901e7c1f82d65be7c8305ccbb1c150b58ec98015611f0b729d9efe6ca32fd8325a7f10451be6b1b65793d3050de6c3d1590052aa12c3010910d9ff8ec474f2a1864300ac84881f9df41e700eac929e540a0998c0a06612e05c0c03a5d8a73d4ee82aaad6ece2b0c3f06a9a004b3f86dcdcc5988b50e7e985b4dd0025d039827fe81c25004103ad5493fe58cd13f869fe5cf3fb9cf6a5114b4d59057c02ba6f4f741dde2d910e00e0d0a5ab3aadab08d2094061f98c26344063fe039d43a7e48aabfa69c256df7c03da5874e752e7e5f9945418ef4bebce51066bd7a9040ec37a5571b6153016d2e7e716633a15b6782885f9ebfcd5f467eb6f6cbaf0d5ef00f13c197961ff8d5826fa673a1b1414cdcdde60ad94a27734200f598b7ae85f2dff4969527ea2b1acdd478cdbdcf2be672ab11e3ec553ec4419b0c7aa038d01728461445492c4407f904147d72389423b76f770b23dd51543f1afad2f63764716e98f26b440f4cf97484afe0d143da314981dcc27509332c5c7047eccf11b1cb0f82f023ecf457f9790428edb28f6f11a866e06011413050387804c86781a2a002236d38b8a78557370fc367ec980cb669a608e3a2ae2f6344f20237ae07824349a2d683edad3fb927e293a49bfcaa1e24b65579d49a874736ae0ada47bd430c20aec42fb725e7e8fe4148d2ec8e8d556177b1f938fbdb4188b4658096e67abbe32673be45febd1a675cb1dda912a56c7f63af379166288371c68bcef1a6b3d6138619f7bbf7ab46a754326b467c0faf91dcb7704f85b4c8f1d70c7a5fbb581f3008c4577ca87588036c5bd75a3d8ce4ee71dc33dc45c8d5662cc672f94c1b856f8220fee984cc96d408acfb8f075f6986f41bc5b9a511d5d1c6ef619626fff22badd9ecedcd8d363c7adc7709f411492bea03f35a4a6fff1eede409377f66f4393437e1a27f1730d641e77f04edc8f9fa94a4d1b77f6142d0e57043e563b2d65ecb0cce340e4844469d58027e7ae063fb67ca6449a86a638d4149677d4645a88406cc976d3a4dcf4b15402667fabebaef349d2dcfa4f16751104b13f693d4149267fae779c14ca863c488755c5e6906d8ad45f81bed9cae924212ec592a465775e83b5a59916b8ec0e57f72df60f71f800dd6e925690cd76660c7c21ca46c8a6ec89d8f74c26dfba58e03802730537e74e28c5f93ad071441775b226108c5517f8925dec033b17d727380532e98f7f21730c70910765b4c080272446a8fcc7ee2dd4d1d8af86c23604bb0358a2b3a73963112df63472d5c0ee117d4f825e7a27d3aef76fc844c833ad4f248eb14b19632290fcc610061d18793842697fed35ec875be91189333f66efb3e24eb78d5784b22814048744360e03f35f3e8b5bf0d6260614979d74f86881a56ec5992f529e1c6c26a815f88b625004b382473dd126d718fbb39fa8856a44e0ad516ee997194b7ebb75a915b1657440f326af56976bfa36b4514ac872fde43314057edc68ed7b0e7ebed8a4ff7bccedcaf1471b44301612f54e167c87f0941dc99f51966a04079a3388d963f9f5029e7a22f163522aeeeb7ee7e0ae03efa36cadebde0903f8e7a020ce72d074d063cd460e64e4c90817361ddb5fd838a658109fd3ff01f5da64e0298d6b0948b9896bb0b1796f25d8626e48cca3a08e7dbdaf8f2fb8f9f3ae1655d2f8aceff0c575706819184b30f9f8983380041905db56fc979f78010b3e11c8da7f565113f52eb93c062ce3e0c9aa4a95326604d945f385958cea72cdfcf6e2d6da79aa4a444aec9eef53579a8b6d4f76ce44c98b3b749d1ac7fd461e6a1acd3aacb161a123ff78a19b0267482278fb884aa13b1e89ddd09eaf98b01aac3ce4638edbe160fff3ae2f82a4c8911c4050dad893d356e8eea4d96d9f4b0cdd63313447b1c92ebcf1cd4c71f5b8676bee2e0d9885fae23683506d4297208b6188655f8a8000c10dbc81459e9ef97c4c455538456639f5b5b36ffcaa2629ef620dff87bfb93c10550f4137fe5853182ab4592a38093c3fbb2a6126a1cdf41af73ac80abbd2982710d3e242c0914f2028b3f2956c5e8f16f2d75e4480e8a254fdd501259d3e8d16ea1d122751fc276dc68026422e9a60f874df640cb43205a461f52d71ba93676a2d60cbfd4329acd2742a7788d56401668ac5da70850bba63e91e020d46c128fe81ef651a90ad3c5245d19de2903748c9a642c16396cf4e41614d8478f4f5f4babd5f77a9b0aeb1522ccb774607ee66f8158439b21df4116d6a19a25c138028daf14fc1bd66bc03368fc4812f4460812b26be857196cf8a4b9ea12d2fd0296e9c4ba0f1212a089ad423cf6fb04576a1176a34b44bbca54652b89c8f97e973e8619507103a230e0bf87dac6febff653c73e901fbd907083a9bcdd7dbdac6da984a8ec1cbd6cad1cbd6ca842f13fd6156f75b10e58a8e6067ba946701be18d679beb44fb5f16cb643bcb68d367b29420966283c6a6fdcf633b7e04b149c6a0bf947d21bdeef43b9f6f4df8fbf078ccc7a92bdba090e7a66892a8bad389a8e898f34fcb3fb2315f3c9273976e6f876907018584dc30a25be6a8afc50064c5c350046063663b1b10b35430e1a36fbe46318cfbe9c5717ece566840abd4c05e40533f13f0d547774dd5d36f40704f002e9ae0ccf8c9924f5946250c2dd01eb2dc8977660d611f4e846158c8db790da042d68d69f97c7cd1c7477af0ffb03b8b118e336734b113cefbe2ddc09f243fcc8f2974f7657166f1af0a107c6abbb031c94f6bc698aced781f781eb91c0dc0e0faee0218ed8767be81df8c59764d89447cf006870ce8fcbc494210fa475c308bb31e3e7a205c20181008040281da6fa9c4eb61080c602df86bb676b8c7f4b2ff90f3b7cc1c22d86793e0fda1fd69c3d547d356820a1910fa4dff3751a9d3d2541a55f988e1204db3217c93718223230ce61fc49c811fcd30d52036999b12545eee67948dfeb25a82cbb506ded58ce55a171b4fc0c5cbba6af97f16523f81421300e76c9160f9ac7fe1e5a918b98fd492a872dfc736e0ef52855af52fa16dd4f24dcef3d1b59e3da6fcda5e27fa9c93ab56ff13d2a9c266bfb21bc587af7faa40fd67f11c5e9321f3de7c832ef57c1546f517a51731556e0758aeb6f48a5b10220adf8571d8f3741956fd342277036086cf162734178e133e711afbbe138a07e5a988dd343aa229e39b25dedb774e682b70b27f29cf331f7787488683225614c786876c2c21710b8c33bddf7c817a362a41c2c4712623a86a48c2d9077d059437ce36af0839525063c72e34ec4b43922c0c4c0f395492fc2f3c66577e30779207984e9a3c8b7c0b4bd46cee9f662cb47c88dc963d3f8f8679834588bd18fbc1f40be6eca9cf372d371add6eea667f2ddb1426ed50f1ffd8a36e3af998c2f2ff3e9d4895cbfd313300640213242583247a86cb9f29e3f3e392cdfb7efb1c74b8afdcf705df492787b4d0b248fa5602e1bf678a898c030dc8d4863dbc19066fa44445fee4c388bfac9acafe2fbcbd26ee81f97df1a92f30ad51b420f9e3b86d49c39c6f991d3e3ed4db1b096f5bdc9f0c842d28e5223af9eb0019da0b869e28010abdd1f7a1f259b472aea6761fc80ba668b63dbeb6e402cdf60f15c97f5d00b1aef4cefb9456a1f412ee46d48785e384e761079b91f4988df97bcecf704f2d43f927f3716a282a2c1b89f9811aad94c1d5109eb4dad520d5c1f1c5a3596e86a6b424bfbe9c6d47415993edc49ce941a740ec08fd936610785db1a869372c944e933afdded73fff89388803521a9fe71b573c72a709753f8e5fefcd109ad13cbb66361aeb3ddc56617469da0152adcf17e892526d6f1999c4681f4cfcabd81e73867d5728fb191ad849d37e859f4cd6d316c56ef8bbc35860801ddd90c3935fc4e107fde0417c8183c620fcb1ed7e4bc6f47fcbbb5694dd5f8014491c6a1d22cba3e41f2f2ec4fadac5149d9ee6ae081dc2dd8efac22041536ec64837f1eb7ed7df5ecd9b5d640b95d9495a4cb03e4b9ae7fc8dcd8d7617dcc1917957f44f7bfc14f08cba9721fc2571c5b50367ca92608b0c13534f6ca1ea849282b284fc7f39c47fac775eda2cc5bf0dd7a51a30545e67080ca0390409397c75cbb1c1ee21e1d9f4e4bd5b6db7448b19cc5ce1ec417504447101f7ef1a6026dcff47c040b4269f8cd6a76c27b4f819c1b3bd42af5dd25b49a33431772ce585e6e37eacfdf49f666bf87ae16a4be50fce63087180f01d3e841e3be72bfaed93a2ff029270f6414b7e2edb334cc57cb1f68babb24ad5be0bbcd9c41db3c020415f45e7b5466fcfb21580761ba1a895fbb9b6dc5438deecffb90c9bf8b7051e5a1feaeafc8615c3c8e8497e7381b5a02f60b528eedb1899e4a288681565891c87363903ee37af2ab4f987d88393c98138db7fb29ce5047a62d464e986949a42ca15f79527bda6406b497e3c28106a2c39f6844d87da7dccfe37339a3bb9f330c24690e0ed8e32e2b4ef2aeff1eb0bbed4ad22cdbb29aa7e6123656a06fa3739ae55b64e2d79c1ce0ff8be17201036f3266fba340b17c6292454792d3bce6f9ca9f0ae7d7a9fe9365f7621a3574c8c608b128f7faf14dffb64676cfce3b8c3aa07e5e367435e3972890a7a91ab80002870e31af7c77b3160785aa20341609f557bf2532c24d18efe267ab03a86b2c7a46a6515e7bce7d2d096378236413e9ee0b1cfa1c99e982b8d0dd8774b68614438d524818825767cabb80f97de7c440b17af0402a9bf8756921c0130eca732722df652a32242c15c01bcdf92cffe0cd0fb6085bfe3fdae94eab78a061cedbe26b49cfc1c8122fc4fdd72a869ba2266d4fb4adebaaccbed96f853fef6b007fd7f8e3607bca7dd24e7641ae91e3b81198c706e4c7f9e916d2d24fab3a721382392940f4b154311002c359f1ef8df775ef05784ae2bcf540042d4f9afaaad2d71a479d6e4cb4d4d1a40786e869b1a7999a012f4ec3046d043f885e0eee3dfe3fd022db6f6c29fa0413dc3ab99ac000d64db2c2822ae8f5b4d0ebf9deb4cdea992b445d7a54cd6464ce6a9e13e651661df0a8ffc4937e9af9a92cd938fddcf474922b18cb06db1cc727907338f6ade09cd7236d280d458ea86e45633e2fee16b119ec1b3fef1347dba1bb95082818567744da18d2557c0ac42a72db40128a0e9b7314eef6d0d73a0ac51971037b8b411305bcf5f72e6d68a40a92454190ccaa2fe48a7db61ad54fd2043f5bc942d2c82edc8c2bfadb36883cc52352682ff9d388803e2f8fdc658f0a45a42227af39c17d8ac935749a2fc70d65f48cabcc5c4c4ccca000fc1d3b93d1a8e011949f6b81fdcde144c471c9cf080d6a58475cfbaa42d8daf33c91e5b94ccf27ba5bcecae56feddeec4b20bbcb23fe7002d565c908121ce63dbafc8ff32c16cd85a8480fcebdeb5e3819d86400f945596408f67f8b59929fc96321eb60d2830974ae054a8fe71944495a03bd0e7f23587c283577e3149c4d0fda481dc7822931d25cf27e48745a962dee9bbf24f792761ceff7df580cfcf79df48ba76fb2761c98bd455be10e1498d7f8f24d187e3421513613bc5ff612e1bf552a675ce74c58433432ab82ef7fad66d3518122c1a180807a56a359f69d04a3809fe0e681f3ec5422c80e9734c42e65246eb8bf997f0fa7fde637d45de220ae7bc34f1c7c89adae83c1fe09ece714bffcae674d232704bdb4e5cbde6f75a598e8f1eb7008703238b3b4fc0d5e15ea19017b8c7be04830af86fe511d19cbf027218ed7ff595d4ea63d673b334c52baf86bd140950c4e370b093a7c1d8f5c0c55cffa89a3f0f50520f960f01450152dc4dc1c1ee67bc229f0ec2fb5fd04b0092049794947020901f829648011b8082047cfdc080692556a0b9c16c52acf5f95280cfc92236271c994595d1c92f1634cff99b840d9f5826ccc819d3be46c7e6a64f209c55bcd69fa3ff73fe76e36d336d0ef95e7379598d761f64b0ce5cd74fc20937f153e9c779b12b4a880e29534499c11fc5830759582b53414dd821aa23f0124ee0d718f404bf5e104e4fd45a025978f7518720ad11a7520f91e91430cd9072aaa143503808be0f91c643a5b3e1cfc0025fe792649273ae99b980ab11c10fde87c2244143e0529c6f23bd0022e1c42ebc4b99bc6f873c335ec92cff94d6970cb77573c6e69f40402aaeb00016d46dfd5e9022135df8f64e46dc61d1af89e33f8fb3f5311b5041457d9169edc88c63a81a8c1f11e6a3553b3be60317363811d62afc2983360786da3b05f680f6e1536f88035aac1144ac247ff5aee583b61ead6f258b477ef14a1f259ffc8604ade46809b2004c0cebf31caf458c24fc980e675fe0564e3ddbcdc7b2c386dd7f3f05c9ff2794ea5dc4cd11b4185c5a950dbe4114e4f32a721a29e666891aa7030bcae94abac3fbd7ff9908e3d8e296d7f51241665ac67415145c3dd46720d7bed7a621e5e173a6c7ba8dabc480f84f5eff4b57ce7817afdd152d44610209536113312777bac2036f1eb79fbe65b3c76e13235766df8589db9946f4c7efab72fa6149880330c0bcf7790e317d15a3fd071b57f7bb756b77b2ab9de74f64de040912d373878f554015af71e1ccacfca418ba4b9cdaf199354da24796179ee599c5cf9cd15ac5f0b1c3a4516d523a9c2a2f7953ada18302efccb6bd227b49e271afeca149a0b73dad2d7c0230b2f80c140134cf040fe1a98d70eeb3e8e67b7dfe51cb26dc29f3895ed2dee3817981bdc68586397b9b94a997488abee032a91cb3a4e3a4ff1a74f956e76470423769798c5d3292e0c6a3f268b22403d8e6ad09726f7b477860f3567d62fad3fe6ffb7b0e6a70197e969d630caf0592780fec5cf571b1bbc99a8f93fe562f4b785de950c28bd5c2b7695101c11656e29cbe51b50a959b78aa5d523a24a1ec83f682a107b911c942916358ba7cd612367e2797f6186e12fba94111611b109296b6bb50011c87d466c40f5d563e2c1fae0378f4c325f6223dc5ec268f4a8c333dbce0ba8e0ce5c503bf8be34998b655bbc524d25575730f2b62afdafeff8fd74f4caeefbbda278c7af3d544045f46617c52432c40f5a7cb41131e411ef2c77617ae4184d8323b30bbe8e79d684a7abe48f9ef1fd2004c7c46fb719c75fd3c3d7bf2d0ad4af2e11f88f2df1ef5ca03643955a70d946fb0cbd3c90fd93e7c2b76fbb3c1a5580216837c68e3041244fca13e013cb4441276ad7282f29fcc2394985885e2752950d29151abfc1d9d4855c711944aa6e3c86dd334684f0139608bf1e3e270f8f35c4f40b6af32e5443bd14cbb6f1455db2a9ff49f3b7971fcd3344d830f0b69c368d27bbc8dca2e2763bc338ac30b8c2f7ab7a668721db4f07cce5413f647c1670bb60832b429fe628e7436770a78bbe374de99e47252312fda2cf7dcff87b8ca3b2d709b3920adcbdab99f881c3aafc285a01d4f70cf65d0f4cbceed505533bf77f72c43ca81ffcac3fbb77567b89fe61f71af360e1b03a4fe2ea484f05c8b57f84ac3ac05a546b7bbfa64ef2b8a755d00daca0a735543107a0d61d303f03daffe2e3a1def0f0f84c98610588b6ce7c68955ebb1277ce5ff521c6578c6d583810f3bbd1b811e16aa1af97a69228a6f250ba200efb876d1d74bdca564a64b62e4037cf553058d49f47717fb031279c8267faac23dc6aff61d77cd8eae0331b975879b6faac69c3f735b62227f72cffcf2d0024805e75a025dfaa2882de1d03ff591e58d962fc766b95ccb9fa1f2fa71edfe9b250facfb20b0c63208ff12875ecca82fe09c60dd08d40336f94f4fcd482c9facf5756c60c59d22ba4fbe9fbbf45244b6ac45bfbe5b84b8826504f79ef65e45cc0bf3c5ccaf312d2bce39b3b78d7348f593f00c142767c8421596ce809d459e098a804cf2024c42823b2147fde7ed9791bb4f9686af632e89ab83711582b6b83b0e908ae93c1e3309e3f5a85780e39b5dcf61e9b479d89e615fa39f0b3e56702039fcf691f89814acda5f90621cc4069de93029c98c7f06b82075a96717bd36eb75f23243a9c6a56b471f6a4c55ef8afccc1af83477e642a1bb546b40bb7eda9eb8d4a9777eaef6294bf8bc09fa69e436206b3f115949b1c4f02c2c601e3b744cc664c47f7c518fbb465922e4825af1f3277928ff1e84f2b40cdc7782830579aca91cc599f5ed046579cbc01d0cf3ad683df7828fcf7671f3bd4a1537a01e9418867c9f1a9005e9837c2a64097d70b126341c98ec492a9f429b38f5123d155813d801096b0d1209093270a0439004eddf367a6ef4b0b2cf2b6f2e32bd4383cbb16a7e2f70d288a11bc48faf13c6a1c310689063ac02c572a08213d0310ade35e225a56b85550d6a719f10173448721d82ac1a8253e6b960a74f2c1188627de05b80dfeee19a74b5d581d67f2edcc390e831eff3ed3861eb5b22ccae42cda1f3db22b06a0d2ca4e1f966b31159c714d6b02624c0398a0d4b1171c7fbccb72dc692549dfa261301ebcd0331c7453887400f075b3710a060531d260e3774938431fc052850920823b2dd5e8de105d31e4d02d69fb10d8b9b7b30ba58984e1e729fcc0dd9032c26c75c82e72b0a3e44c9d5ea38f04c0fd075e8933672bb5a11b2006deb9b7823629fa3e0d8ff7693f40939f2f8342ec116ccd050fec0b90fbe5cbb1407029a4ea7f79cbea15a42a9f8632fe1f9d2c74a9be75419b73aa70c5f0b2328cd4428dfbda7ab9ea06fdb059112f6db0f41e174028f293055a7a0d7a10e52b50bbe8dfc5e8c290e8359201d9c0048fe39d55db6c668830d9fc4b981c4c1a19e1b48738050b3ef27a9a77dbe545cce483bfe93694ff68bb0eec09fd5829ac05131633f2de18a6a987db9d16f0b0e19067f82c261e5fdfea92de1657b1866f848c9577ec36f7ef0f3ff5dc01f4311408dbfe45586a593f16ffe6f040a7a3905dc98424f315a94f7764eba0d21c88a4200c36b77d65a6debb58bbfe4f87caf7637ddc4cfc0bdf490bfd1ad5fe40d739fb5bbbd40d06737708e7957112f30724c663671be764598bf9c987f4c3f93d13219e38cc6830dffbb3d314c6ddcfdae4f961eeccf2bb9318b058194567a4a39090b7d0b7f48e8e40c5fa704dda42d01e8cfb3937ca91330b18496d602fea3cb57a64a06a1740ffb77ba9200ea4242fbea9f15505dd04abca7c1de4387cad38908bb2861453e3857fc630973a0a45377386edc010b442c0a306b9c14acdffaebaf6f24742b85366d338b78bf44b4a8c02ec7fc57f857e7ca8f3460bf8d5fe46c7f913d876865aa9730ead4416c17cbcd754b7ef0ba32d82de1adf2d754b3931602a7660b1591533aed4b533b8f1cabc5bccb2c0f9779c55385e1319643a15a28c7d30f7614dc3722134c2f30bbc5e419bd863e77331d347c30a653cc68f5bd71505857ed9ba57bdcf2e3c8d4292c803ffbf4051d3e58552e522aa39ccba2f0cbaab7a64036f4ea8bc785dff6721d520facee809579b0ea44807950eaade5441d74cf6f223d66a3c8684dc4fc2289c354b84c8ae8819e881c0b7f802c74d9e890f2476f1081b20adf3c23bb38da394ada587af8d87a81142295d52fc3e2dcef7cf4f9fc77c151fa8b6fd9ca2f0577b5463742a61a92407e84b459531be0f1113c04696a743a0cd80c5dd09bb137e1e39ec31b70503c6ae75c3ddb37a3fe462740ca7fd2f2e0b98334a7731b9ee62102b8b6b15934dce64f7f44ba8f57c48f5899afda2ebf9a59e71f4cac33e8232a7d71d71af5f9ad99d10d7bef79fcc5d6a29943f51059f1b0ac05fa2c66679faaa80a5aca27bee65e4216281c1942095c189a793fd1964fd8544dc1af36838e0c6df900864bc46d36188c83bbc79e9eefa1bbdafa58ba5a7a3bb35a7939dad8db12474311403364e487c520ba2df2d12d41dd53cb4c045ebb9eab3ee65689e30db9a7fd376a40359d56aa7516af0aa2b5388b608fb153dce96f118df961ca712a54dcf649142f0a0aee41deae47e2dea2c006e000ad7b19e7ba9a2d61d2c30c4aa29b049fc2d5b88e12323eebe633531ec6b553ac2c678ea189c017b4ce65f8fc952a118da85e66d81d963784935b408a2508fd94fcf5291662012eedbdfe8afb3ef44e12bda797aaecaed7e1aaed5b89c61be7c31c7279e99fa7800a667589b87178799c8a1fcd13081b13c3b44503f3c2677bf60757899c54032e5cfc6203f07943d07a9871aeb7d912c61e33e31791b2804aa2fd2324952b28b8f8b8ac7d69c142a0d9d10e5cd9d4527db9fa76f1cb6b5a72f3636830f59900d9d6df6fe8be435bb8f66bd74618dbe49f46062508624e44ec49758d259eba3f9e2175fafcfda76d1f7fa365ec0d4fdc0e60f18daae8defd8f2aea667ceff97f746ba4ad4331b5e670663f1f62b7e6429168020b5620905ce16998b45d7a30f0a425087c141695afc1976e1f2e5a30257cf267582d2b0ce20fe5b3f81c5521b464515fb57be0feb49fa7a438e0da5d858f992a7da14398df1c85bd7fa34bf2146b868352d3f3682978dfbc0f50cfe13ccafcb617aa2be16a7761f179e285c4368b301a9ee9f84d3d471ce16ab807d137816f03080f61d09b2ce07c53064b98f4308b0625100f3193c2c8721dfbc7b89cc051c44260b9073e0bdeaeec1b3a4612cceb6c64dd8aefcb27142b520651c8899ad89c71dce055d4f7f26a4863c932c55bef7f3845d8d1b9179b373f5908717a581b96e1bbe13699017c5a29158803849f3973bb043c6ebfe90ad62bf18f7f6ad0f3be20771f73587e5430adea6db1a43f8157434f9b833e6bf347b0b853e9865ffec826fb413409cadaf9c84b7895194c55087c29801416b0bb3efb94d2f61c6d0d3004a3942975d4a95138c2116c16bc9e047c048afacfa685882fe8f7c7a9cafd6ac0a95679bda787d3776744ce2979bc94ea9eb5f94dc609d03e68c93f7c87defb50bb216d33672c44c324d2947888e4da56207d233275f3323007f403b03361058ceb16f259a7148ca05812dbaa0ac3c0330d995f7725e789e4af7063e4c2107fe81718bca8f216f8b6f1f5b89e4e7dcddff4e83d7c11e7168293018813f35138746bc01e5211790e1cbb98d2fd3d3a1882a9f740e8bac4504f146e5dce50d3882004fe347a085d38c0addd6228026884fdd1e29a8bf799caf053728feed793651ba6ded4d238b7bbbcd1f3e79f83d900ca640f7975c23cf552fe1d1393e52a1c01c80358458ef0837f4b483a697c60ab0e5f0edffb3b372c0ff58894ba9b56954b9dc1d28b228aa81fd29a334996b699d29e98ca2f5a073a732e7c1df9382937d6d77d7f70efaa20770fa25c8f2048467d72469be7e7b4d3560c3e8468ea125558b4a812d0e1f3bfa339d59e2d428299909f64d663a09b8f639cb36ea19c08d561309fbf3475666e9d46b0a0a2fa319e1dc26b0c5d9635163bbb271ac73006faa3def74f65c46607c3c8df834a04571cd39126e786559726dbbde25befde6a2e53c4a796a657e9cb26e808b0d370bf6eaf973e759cba0749c7550b9cdc74502c693d3034b4d6dcfa1f183dc2dddf36808469e13016465af8d2b04b598dd3da4df005e265f7e0c989943039af67922c9c67316d2341699f1a9e4560aed8d9f1e83e4a31b0168f89f01898d33662fb7af24660f9a5c3ca3684a1db8cd97500bcc2d7fb59c08f4ff81ebc68492ab124c48c720b3fcdd99eb830311f885a302974bde190761d616f9894a15a645fe30a0a107a0671b978ef7e8d20fa22ccd6e1dcd85f229518f9e7736afc746ba26c3a194e0f92e53006d987d9bb0f0e466e9a49786f4dab9b299eb0a5d36e65c8e2c7f20260847744d8a5fa64b088c1c10736e6fd0f20a944bbeeaf3e9481c50228c58c2e5bb83104fb7e91ae89bd661b8f73df40c7a8493d612f7fe2792609a19b20f664e709d7adb12437361b1242fbfd4d69009e62010ce01330edd4c65c937023042cc7924aff62b35d76adb7d917ecef635fe33c34de03549295b686d88513aa1979d3440c3248cc48baad56996843508308a3a18c7009e262731b40c6b470bf712c114b52daed1e9809e39bdb89623dbf1496d209657acb1a06c5c6bb35b819094afbd4f12cbc2ea7dea8aec1d18ae67225ab452bb1708b696f98491c5e4f734be59b0c15e14277588c37156ca1de28cb84d24a833155190a71100bf4e73e7cd59bbecb74d2abc8612fb52ceebe0706a5cc34650fbd6b5dc719e69601729aaa06fe4472f9a1ffe16abe3095e45962738f08189693f4be085c94fb416bc461173755d5e46d0f9a0579d57a58577dc991fcb7722a50ad86c534f1713ce4833f7b4a3a0db27c1afa363b8208a6b15a13dbeaf22e98ca81f4bfc92e1a490e96350ff2326bf3ee2bfd80bd6b5d18cf90c104cccd7c0441ccfa01ba14a91423bba4674ddbe5248d203c333680123b9996d76d29c6fe29eaf6e3e827a92f425c6acad6ea12d87fd07cc6294f2b76a4589cdc8c04a57d1a78162ce01dcdf63fe22885d8d54b53e03110ebe7a9378b8d020b7c4d289fdb14b70c5d7e147c6f2102934776c5ec380f9c9db87aefd23b4961d07cd6818d92a2e977c2f2f782ff37cf747c3546bb76c30d121fcab4faa26a59808fbdb66ee6497266517291709babd9b5a92401f6d72e10915b90d067062c82ad1ee8e6542e94970efc2ec5a170a11602033071169bb216cbd08f0bdd8b1c09a1a64f9e79ffa4339028028908be8c621f3ec5421c00fc375a71d9505cd2f6c697314a32244f09eae1aa4d7aeb14b03e1ada2936a00050a2046d056541480f66d00c412fd5352f579b4ff9614be3c552bfb402689709e1a2371b40c5b47c8feac4d0df4d4b24df6e689c3d744472397f2e14047231cf52f6c7874261b1dd8c04a57d9a781686a8174d3e74f768852376176a60ee7c10258d36266f18621eae676c0b0c15754ae3c53e5c21f9f49ef224e158a8c1b3ea7b3fbf19e28069cbbad79ba4f2a148e8c8d0a39e5959ed3f8cbe93391f5a394ace9dcc1f45b0fc4e205a8f2e5cfff5e73c2fc5eaa1f1c05e1ca49211f22fba848c9dbfdefe7f40550fae059f01cc1bf405e6291abd1ded263ff39643f7e79578e867fd755e09500f4c0c2c420ed9a1e2bdd74d6b192c606044ca75933aad7d19edcaaf64d171662c779a4415088aa3be30f22c710391d3811e8c7effd140625388a05b1f75db17b236d9feaaf3b2af88e28203450bac9b78b5d2ddb68455ed87362247f936e82f030d88d5fbb0955b065961c34a7e316da081edf8750498e302c4610d22f96199c9fa3a93b4aab4255b3e2945e747d61604b665bccef460b30647cff764a001fe46afda605ef68ba1c483b56e99346a631c0aa51ed214ae7feb21240bcac52de28da246908c2778c68be8020d5964f7ccceec56fb5b3315d60777958b6efe2b45b86c3ea48daf05a9bf0b497102bb2aa628b9cc08df877f01b27ca0be374536051e92d33b7f0cfa3fcfe511f14078ea7c748d54eff84e175e7dca4c98e4f0a7a106d7f96785a4338f7fb9466ff1c6d5c11cd017300bed53ca6c08ba1e7306ccfb84e9305664788ef10e7bfb8af935f582ed23bac73cd36938646b6037f4ddadbc1556ffe841d629823902db6fdc4598dbd09f85e14a864b25502ebd4989f9ae1d4012594abaa9336db229b03b18d6c057b3a6db4d390b9957136b03782e0c6ca3e76af8d01708b6d3c40c8314a585839cee2069e7ec8ff30d1393d7e0fa8f171b8ee60287b8af1d31e812a01e7079f0af25c9230c0e785acece442bdde52469a7531a54c7e63b78d3f8cf78017cc27a3e07a63d15f044275239f834a5a302b27e9f4edd4a4e17d95492603f2cd98d4e35e44e3a7b13d8c7b778b0d3fe9fc24be99cd0103d1086c70a789595151c44040bc068c9afac74c3eb52eef429b730a730126b4f5585156e9f84f5e73f3151c78fdde6d30ec092e6f9e10d714f73e076d6199bcd82b3f80582bd452366b72c676054bf26744625b8affaa46ae7f0997fb00c33232587b87e84421b4b5bda776a2982847e39dac3d6e5231ee6fa3fdfe36e7f0f586686ba4fc5719afd4461b2333708b62ed2fe9feac53d7f586d8793c7d0c8c1eef0bfb7fc58ca8550b65aed45f4c7dafaf12b60c8de09e70f57329344ce2e6c68f746dc1734a01a6f4956117491e831f0f802ad9818020333bae53f0e5464f5b54885f278faefbf1c0f609b0ef9b0480116df6a662e335a00b782cfeb4df87cce1cb135a4e2558745c330b5b4e6a1a3be9fe462c83a5bf17e6b31ec65cc8625c49a266de3e97afdcd697cc1986c837e04a80756a607363a8bf9289ce62905d5dbdddad9d6e7e7ead0b8aa5f360a96ecd47fa0b4d2da356c620bd92989cf3a6c76236459b4f7ea46e5bb61d30ee611c5f6febd05b01e577c419b14c43db0e7090cb45cb90fd789428f48b86be842557f12ca21c8a6cd9d187f92ebe9b99144fa23dc1f40b77aea80236c50fda990c1d5e49b366b0b036459ec189dc19ac8bdd01a2cb8dc17ca66f9a4a72a7a972d0381e2d3cee38f123ebb6becc9b45d3232676d498f81e3bdffd65ca1de076a3f2a30961a8622009cb5fa09b50ab7cb0b9465b8dda8cda42085c116c831e47375f187a306fe9529e07c7758d8166f7fcbfc25e3c8e42d2aa9bb9ba4d2e16b563edfa9a56d619bcc6770c5ac36808e69a56f7534c5248dfec7139a116f85b890239ecd5137b184e7cc5fb77ddc52db60b819094afbb4e968106e75de18a5c23651998a2aedd44e18c654c32c4ddab875bfaf282564e80aeea5b1b9acd397ffedc6ac0f47d348388908d4d3f37bdf626f60b6bd3b8f0e100dd0e7fdd7f113c9dfe3fe4bf3aba89f80e68b9709003c996fb1869c89f1ee9a820c870351f6e55b9df1bb394a4e21bc26c38284125b73ad4ce7fbc858d017305a147940ccf0ee7b5d34464e614e15b6769fe75e19ec4a7433fbc81e3e8baae09fe488ee72b06fcbd830631d21c719409ddc684245344bbc25a0171a8c193452e50edfa02f5270eb489fc8308ac9b8aa9f12defa5f5361e8ce7e361dab37468b707110b5c8c79a447b175cf3ff4b2a942bdf78738ec0d0fc920627ce445c0896a963931f7f02bf98bf8e0bbc23e13bbf3d26c97ecdf0d1fdeb72c9a9492c678e027cd402383466aef2878e6904828a2af546c704ab423d18d43988e617c7c3d387873ab85509cecd873832964756bc93ccecfe0bea5884d47874a8abd2197c1283a4f1ff87acca1e4817c8efaa967d65a8bec9edc0faa5564ced12894031996da971d6fb7a3578a53c3c119c1eae509ac5db65848f0353b572c8a7698c60e9cf1315000bf4dbd1e92b00e7cf199b5b505a1694871a7946e5936c30270033f461215049792e8ca885570c3b27457e97ede330493c9bc851cfb6c2e53f104bafdbca73c1704e80cbb941f7f75e051117fae7ec60146f31a8a551ab01dfea5998fdc1bd5cf755528198e9abcfc47f635e404dcdb3cf035f7ff0d41b2fe1c1f7a464bfe4cce561b2ca28de078d07f907757d0f5ce4cdb318d293251b42c08581115af5260c8f1838b51c3ef01f4ebfcc8a207ca0f4709ca9389eb0f87b94abea643fe70668f7b1fe60ebdbdc8432a8cfc1d22a11cc6206e0c86362280268abaef61c9bfae5733ab67ff9923c99dac96e6e353d6682398f9e57626df03f08a0f03ff58991bb12975a8efe25d015fb1f06d196c840a9f47a53ef018b5d1fe5375c1a8a7a0c4aed40af8280f355132c603e61304138c8aef7cefec4a4ca1e071354d645df95a0a0922883c12cb88ea77458170c6460e8fede5b93bcc116ea5710dbeaba1834d530c6c4cfa2bcdaf3c1512a0342309329e29701359726c23bd90b3e8118a79aa4d3dc300b865820d48d91dec27f1a7545e9eb0cafb0342a5dc84ad5427889429a02c29a231bf25f9e30000a79f69902230c84cbfb37674c447e141832997eb598ab4fdaf04311c073e245288bf3b30c878e2722e9ccdf9d069649fff0fbaf7bc2894e913c8b134e00fd1fb41b223edd3aa573a3b6fae6449e7edb68946574991484a760bfcbc413ef1ed8d4def99f890014f202e58e2a6f613b9216296afb7386237ea58ae881999a6100d4050f94f905194da24681ba1ed11a6eca65e2ff0f7ac3fe6d8536b646bb4714ffafd0bf83cdb118478d6d8e8f89512e42c8bf911c82c0b32000fe7468d95156d58bca19045207016f5df3702077614e46f765d9b05ed719e12bdbcbc00317acdc63bc5e98bb0b24b8ce546d94e6c2543d6afae7c4adc3bd73beb24694ce596148dea59ef5cab3d0d0b411a1a00e7020d51cfcdf1b04f15b8b09a840be1a8511f41fdceb5247316a381784dffdfb7508c21c508a97fcac1b78c7bfdebc3a40b03d18e8ce60a5ac570d5f73b5fba8de4ad69d160354438342b4ce1d7f37105a5320b0af8856dbdb5a678a9e05c805869f61592146ebca2828e439ac934a83c63316c5ba2c1beae74bf86e94cba0597d697ae561fcd62f6f2c730f70c3dcfbc79ee5b17688f3291f5dc4865efff1aecafe1ef801f84f12168815e1301aaca887be0cfdae734c0c7d8b2aad5517b9ed106cea9437877d21aa0a0d6d35fc9969ced001538529c67182eea1b04df5a14010d48108140f95b619ef038114d1a98d652b2d278118ef612885528c0ff267acfacf3f0a4a5b0d6922170e4500095a8fe982b843d3e47ffa93047c700a4c8ff71295dc3e604ae4ff0a25d1e0b7003cd51767468427036550337caa0be2eca18c0d3bfe343f64232d6e89217e5bb41ec8290806c413de4121cfd7d98216499e5772de60a3bc88ee187da1fd48a4f3604404ffaf214f1cfc844df43450f79566da708c150d4063003544539ca4791f8a0024c2aafe0271ef1cfbd4b1697ba489357d0268d935a3a661acd5f5c1978fadb300ce4881b9d0bfafa9abe113b9e2aedc6df881072e7f7bd7fd44c45ffa82167826412010080402bf4daa13bc2b4d740f6fabe7df1f5a86e8dae0c22175c043cc02b682899f459341a5c0ec855fbd034d0c9d07a0e352c5500410c6f0ca64636251b177a01994bfd980e192696e1defdd5ab46a40d2b03ffe710a087fa51bb1e8271724fffd725196a982c6fb5be791f7a077cff69fea40c7cb7e05fc97db2924923c66899eb7ce38f9cf8de44389f9e6d4ac6ef327755b8e78be3aa7ce9a4e386392b4a1aa14c0a8920f4437b9451f82124488584dfd988e62b757de393852d9c96dca3ae0c32d3bca99e07da1232e8298f78e785769dad731656a041bb1011e8a007652afb584bfb4f439797cb64f4a1017758ad1074d54183d7a8f79efc9c7d5ec022c7351cd57c45e9e8781baa1bdb9b5c9840e1f1feb9286787fd657ac2b2d37bd550989c8c23b82ab5a77cf6b113f6a2667d4e35f3c012680b5fe7cab937a20d03fba7f731e4e12fb04b6488fa606fe7789d1211c3d4a2fb802551aca7ed60838fa995d2e5376218e7a8cbb926fe4b54d84ae1b4379d43cc65767fecf62586884dd3e21dd3a3f94ba7f56cd68222a65e9c49f3c88a1284793f47f2a2f5539c53c5cd32f33a952663d6a52bd1dc27ad548d6b70448aebe2e3e8ed60e968e6e7cc339f9ba7ad87ab1d906583b58baa18aa108a0682568673245e22dec7f09c12cdbec05e31359e913f246d417af1307b0e2b410e095c08fbcd1d6996fbc3134fc302019b45120e8fc3df94ca43e9bbda20adb747477ec42c0f2cb6d57c4840f97adab218eca9f17abb3d7e72cdb4ffdcff15c784f62cdda8224c4ca6051bcc9d6510a9eafd4960331e87a5b33def1ff3177e00e9a87487cd9b20ca0f71caed70c5fa531956df49981b787ea53b3129bc704acba6243e5370dccd1fd1e78483ee2a361435fa0e8510a0377c1fd160ceb8a39adc8cbaca26c4656b1d42bc1a2577ab905173645cb6cbd00bc327fbcfa512e9ed03752059178ab970f0bcf4bfe232e10181c0c07038583c0222280e0995421dd1f5da9bb6e8eda1e847b320a4a8d2d051929b5f0d92a5da9e3e15f08db54c59661a107049fa531c732fbb5b92b6adf1797e4642ed5f251c4b9ab60e0868d8a74f435c6332b28953d924f39682d2685c6778dc06926748e3106ce9e2c2610a386665e47158fa54e5931eeee70f7a29a5975b3ea535368158990dc4f07fe4e7943eece7afc96e8d334bcfb3a9a67d9121c35e78d5689f368da863e2875a54a0c6fdf355f35070281407c85d7d4f296f7c6734670f2a15e86f55c7eef8a57163dd86931504af43a5d788d8cf4101cbfa74bd67d32eb5d8668e1949b714015049f53b7666a62517f4921e2fc355ed3ab35fdf594a85970efbd5ffc3aaaac33603a5f304379b751a3a569bb8f241da6e1191a10968d7f7d730bafd91566ba6c3df8a2f5f7cff9265385edcaa51af2479d0444a27788afbfbcfeb588b81a2b10d1d79ca13bc51e671542463ae77943070c67a9f4d9f0a70e77a881e249aa1dde87bf1f908bf39497e63c56693b55e24672217b97bd40361ff4cba17c0d79062927b639a33652ede55a6cf1d89fe63d830636e5eb30df13e221c24d90d5c3bb1e884d7d9ec626642870ce56095a4c7339609b044e1b3d508d06ba2fd40abd854d8ff16135e0ce2fb8d7133531edca78b7282d32d483ceb62aebffb61d0511920a7f969e71b210d48d65d2d2c599052d57fd548a77e9beea14733c32af5468b3c7a974565ef224b2e1134f0159ed866251a22569b8180203b672703f15b99af0bf49c6d38cf038d090389bbdef9f8cd1f5e7b3609a7f6a3d07b41bb910bb2afcfa117ec87f2c17c148f611d7d7551e472edac96ef794444c0c74878092d485449a304cd34360a0ab783b26139abaf08ca874218fc9496a396ff72c4bea44ea8d137f048359dd0ed8fcc56178e8d2b40e147c6654014b9ed986db0ed91f3ee4c7398313131efda97ba0233d055e8cbeedd190239657a91ef0507f1e8988b76a7ec78c48ebfcde310fdfcd484b8d548610f0f879a4d7683bd48dc959b8b860cd821b80f48cf2a50babf4b90f1e2452114ddef0e6d89761d028b717ed5e17fd37f73fdbe27427005b07f3a93e17c754a83699cfbfb43856d6ca5623de681f1cbe9199cf598f9cfe3be5bff44721d9cf60d69eb618076060cb726e11a5d9815e267b5557cc7f1ea370ee9423a8940d51eaa5ba6bcf7bd40d30aa602b7857e1548f17730b236992ff08fd5cd4d1d111db49fd7f84f2e918ff8639af45d77c6e982a7f7d2122c24f595f30480c817908cb65881487c0a58c10d8c89c65fbcc50674d9fa37e0d2206ef4c0a313d57c52fe8a25fa7c7f500fe7257c3be4238df89d139cbe218b79d38378d632a9dbaaaeefe01e2380a7944716f274dfe64c01323956b54585f36d1282df4110ebe5a78a5bd5581b465c0d532e04cfab9fbbe325a04431500fe8f7da4eee2521c9e8734ff44dbf75661ff1cf3c7f81c5d2ada9014036d8dbc009b5f166ccd1fc9c81f94d4ff3907bee73e9b621dc351fe329a69940ce745107f32cc92186c526e30c79e1f1f595625922ac9246480bceb667e93e7c9164df62ab87dbefef9c641811ef915f0b8fc42e9b7f551107697eba4b33343f70f13f68f5bd17756b4dd9e99c7dfba8d93b6adc1ab3ca011a0c92325e8ea0b8706e25bd571641b77b079997eb6abf7c8773ee4cfe798087d2e72e6eef4f24669b856bec48c75397b47d0c56048e4d4136f85f90560049df7a47025bc2d076b1bf659b2308d7f9ff39535f5ba5c4dfba2c664f1fd18f68b08421e6bc09b7ed95176b2722532d924e8db6df2e73c20f29fb53ea2c4ac70d94675ecf37b629408ff6a880318be6ad045f4420d6902f5566620ed9e685a01a3f76c26de9a5d9dc7e27fb165009e9e394fb31ea759b651917e90a36d8bf014dbba30c9d50132bc8806ac5c368dd8a8a30a8af789fd32759cf097489df2962877a2422758f1f4bcc0a7b0a1de97046f20dada0bda0471e0b4c69ba1a71d6b4f04f0d95b1a9bfbc2f0894850d0dcb79db5ddb25567c54243728e9f7f107010652ef5b7274cf817c764bbc2f5d84d9300ec3953c1afcd89d0179cb1e3a09b865f3dbd2af6097fc80bb9231326ca859a51570adfdbb6bf38ca6c24e2b2d1ad50b26376cd182a152a118ea654b8f67d8c6b029b94d225fdf42df55f25f1b543aea6ea32ae1ddc25129701efc20d4d7bd166f8a52ffa52b4a1ff8fda7964acd70be7d6ba6fe06e2465bc1c7a202393f357dbc6ad7b754fab37c861a7c74c13a5e66aea5ab2c541b9edc30aabcc37455fa49c7d897acd153395df56cb4e8cae114b7cfdb941563c0c4500d31d979546723b956ab88bf907cf8b7e6409e8e3081fa52f23dab23a2f469c5900af5ec874126b7cc72f424d01daa71a8dad5d66de80f286e479c4c5da92eedcbc09f3eeb9f99ab66481192c875d30c75158c23fad81b714ee3adccb5b065bd673655b1fc80f06075b0f41a3e3da1a0e99d6914affc26d1ef6a1d54febea74b71debc2f034030615b4e8ac322d25cfe839cdff1054abb4082bc70d97d388d549e82c323c37ef6162bc930ca2205f868713febec705fb225c9d8d0c49efe9a49f215e5240f1e2e21442f98a7f1e3818e42728a937489cd2843de9007ea6f8d897c6178bbdd6448daeed9d164bd878089dbd02653000c3a089d5051ed7485267a43eade7dfde3479db764537622c85fa09b5a81e8eb61ec84c82d784a8d7ef6c31919d71ce2fb6a84eaf8d952338ae1078abf308f36fb333597a92824f062e955e83196b36580ac880ca61c9483859f449ba885672e58f7d5ab1f1d0e09266d394fe2c7d71698a9a7d75390385d363653da817a132e48c9e803196cd8480ecd73128fc0cb2402bf6aa350937a88e31e160c3df680e172a299d872280576e522f537ada7fa64ddfae25865379499264f262e1ee7b68d339878c36bc25007d45137c132b1f98deb66a691754c5495d2bd2f5af2813eac1d92cbb2ad4457f7ba00f27c3c40bf99ab7e873d9d6e7e6b95f537ce96a946c0c4aa1548a8475bc25e2c80653ec08e5cdec97878b87d20a22a2edd8a7da5e7c3b771160d5fe51daaabead4dd41138af009ca6db304458f11f67e767146eff6b6419adbe7768df5878481e5f7eddd7bad38079205de338ee592ef6eb3a70c2dfbe41d7635449df12f57f9173bff1ee3491d8057bb492754235dcf2a70fc76277c9cfddd7d6f05d89b139712d480466d0319c98d90567f559eb446f8ea19141d04c06a04a8550898f40cba312461797cfa48b0455951c4462fbbaf08f69ca68b05efe920b115807c243f6d2392f94764eb378d1fe17f7ff48f369e5e20e2529146f1c2f43db96b166bbdf53121505dfc32942932f1feeb8149a25863347ba4f849eed6b925c9d0a68830d9fd89230be8a07ee81be41d113d6decce80612176cd51bc8420e39b299cb1b7bece855edcbbc29cf9643c4aec3b05f3949c96ee93e586bb90e8201ece67ef739a1166d4cd86acb958ef38f2f95185d4e86eb7c046458058548974e502e6f5a4e482aeefa95845c3e1f15ee7f79e1788b8923104687fe7536189173ef8dac7cbe7a9250f6e133bb431cb05f6e2c4b6fd4417e50f92b033d3ac427c2820239cd51d97c633da1dafc20a614e0f95c4b83146132c7aaf5a544315e0f7ebf09d9e42c47abb06ec036b15744f0819998c1b9c8c6ebbe20ebbd01e6608149ed3e47bb3975c0832b38f86b5782fb7441f074ecb297557c8de115afec27c11ea4135b77511b600dd64043298082725dc20a6bfb5432f0a05b09d3393c492b5f25243c3b12e2b5702e9806b4243dd025280264480a8c9b10c7a82bf6fded8f7fbc5307e82f06e21b58fb0df6b1b825375018daf7215153d41f5390d378798a95c50f1ab788670d09d581c612436a14e6b74e6b3d99ecd655727e9b6dc6dbdb3b6fe06c744d8cbd76a87fba52b8fd9953a1761d698b0fba4080ee1c2d10c682fd1814d50b46397502b23aa7f249f28bfa6df21e40d7105feba49b0d96ddd552a8fd00dda314f1921a48c1062735117f868587a6426af549b2a0eb8f0c575d66f682ea5f1bd27b06f3a859e8421b47f45b30580069430d5e560f81001f43194f473b0e4d2d25654b1f01dbef93a0a83d4813452181e6cc210367e9b18e70e6d241bba83d701b659ccb830ca1cef9babb127ef880be81ae31e81e0a3e075df188b36273edc91030c6600d9cc522c809ef50ac015d2905c88f40f7a0d0063ac7e0633c05a9e0302c788fab62080c7052854a57be4ff997c7fc8f7dac26c2f81cac92aca59090cbead8d1e2843cf10d50793d3c041f22f05094745bc6f493f67fe09691c0672494b33ba2bfe8ec9550b1b209fa5c0f2d5d586f6404ab03584bf9b0e8fc91fce803f3595d77f8dc4ea6802fe4b473a7f042c3ba79eb1bbb513ab211c639e20080be2d355a49f8f25cc4cabdc672a1aff8cb65a3a120ba0fb0ea4a83530fe3c1a2121cd4b2d8e15b01ee85db3476cfeafb045e19d7f193e2218f7d16a8a4f27d22e8e1a40bff8c88dc9afdbe4c36c05d514da38679a2f13620116222284df621ed3d288a1fa36badc7c49e3b26f0b95b923d32a5b4e193780c9c8a38cd1b4c2dd1884c18197f69b5fc84a313bd9c70f47b061ef8230ff0cb6c1a2cf67bbc8f63f57946c708b8714b220099a0586e1d857006c1d3457d45730ebc13a9a20ee5087982e8f546e898ff0029bc51f82aa08b280b030fde41f301ab08ab4b6a62cab8a2c947633e29dde2cbc2bf959e887ad870dbd936a08eb40144efa0e0e69096774368fd5d40ca63585e5e79b0161018cb2c4f82ce956ca5223df15f1c986930fe94edbf8c1ad601dc4349d72929efd259915419ffba977aff67275e1385f3e9edfa44ed0e545984c1be7a37f93f03dea0893a62c4f35ff81e72c49d7dac34c56f799bbe6eb25bda2af4a8ccf819a37b8cf8e2cb80bcfae31fa8825b52bb3b2dceee28e97f57d39a3f221f7acd0f84b6a6ef2396451c09a7df007ffc6e057304867d7913d393f386dcd0457635ea50e384679b5e09fb7a4d9cd41e481b08060402814020302ff405cc190d23101acb9671b5088a01635547e460ae33c06f9f6101b7fa58d272c82fd2b40fc25d11dd63fa6ac383201008442e5ec53762e21b1049140f781acf87086cf8c4deff347cf8009d8765c3418b03418b0be93193b1946f690cd3ee199f71417bf826aa41d2294ef6a22af8967bc0b1e24f6e901b880a0f304d4c1e9f9d7921abeacb6119c37f45a27abf9af1b927c4356b982ec1a4b2ec13da7062eb403dfd13eec5dc5e438a963b274134cd17beaa3645cfc760cfec9c453f2a7744fb1ec27ff523447e1e5a5c4e64f161ac5e1ba4eef9bd9faf49015d122fb1c2444dbfd4bdbe06fe1d014285d7448befc6c5e8969e0d0922ac20bd38297f3edb68c367fd9f140afcc3418011346890581bde1d8a00e63fc1486c49d79c65637a7a44de5cb793cd702848849f0951735f38be0cabab00ee5c56fa39721ea193bea26276ff26c8ee505aa5522ddd275a1694718d26778a7b60fd40d017584f70726938ac0b3feabb1e54b00800d5e0c24a2dffdc6bc3e37e233cf24e236da2fe5a5e5c95028902b70e3c2572c063317f6b0991fe08321e128cf4a704030b82fc0141da40904f083f0e894b190ffa7beef1100f4d0a727ff6affd749c16bf11fbf016889cd3875edb9c0e4a9b4e6e2811abf93a51f4a9e79274e845e780117f0cdaf4f93e3db2b47e86363e85f8be08d662341e719026caf3cae05c007da3c77a684141cb1283db63457cd0e91481b57019cc5645ac5c14ebf63744635a001ec4ded2cdc6d2c5cec7c1d6cacbdddfcd3ec035c0cd1144801bda8df70827b027e37d0f49554c58e5e92b4b93cf5f080857099fcb74343b8f492b476b717bb906de9944922015fce5f8467f31f24ec3153233d11e07642ac16ed4711f2395ea5d88e7fd1b8a565d8425a62698a0ef8f903ac19240c7cb2fef81bca2cc77c34b8a6f30967911f4d9f299785afd0ccbd761fa831adc6ee064c29e02f46485ff112c03e4ff17f83bf6160fb1e945684ef2dad0731f3eef39ffac12b4b2d8b54968b958ec0197a8e74f90a01a9c35d27bc7bb315b993e50791359012c4bca7540b32d706c46cffef31b005f866dc2a8eb8af12561c504b51a607068c044ecc30bd30ca5f26ace5248a9d159d52a1693289ed8604725a9d7c68363cbb146a0364d7c726f8582af7b7c98525777e010a8db465ee571dc78206314e84ab72af5b90c566dede7e59f9d90f9a50596424b59fa63c3dd6ff45e40b1c1916e86f94fd2116b6a31f982c137fb57298fc51970790e62bcd705a83445ff962227e8caf07b736a6cd3d2f829b1790b36d22548bc578b87330eebca4cb0213712d31cb8d9d128729b68e7e84dde4516f041677807a82a4b7f11bc6092ea492bdea435771a3ee3437b8930a15e9263f52b60a2b7eff1481f124f6092aea1a40184fb6cb923717969495d6ba9d8a54d18f527e07b53dd184ecb9d430935b4b4d585ed4fab2aa6690c518d4644f05a2fe563112f4311c0e02d0947bcc370cf333790476437e414fc2396e2b1466e4e7715d3916ad861163042be8fbef567c7fa8c4770303d5437771ba9ba8c1958c39d2ae9897d5c9ae3d8831de78286789b3a64500318a0afce084cb329cd14ee3724ae119376d2fd6e06cf4cb68029c989d8ba9763420ff8209189dc469678c8fc6890fac75d372e928333c8852029178048b4a8524421862b57a090e7ef4d97a5f890769e7380a1f23ab7c97ca7da7391f3df3f2fec6b4cd6a3ecd7cb172d891a134a4fd96a540d92d8f57afffa7b11411e11ebfb3f7a5092996305f793d80b878d3d80eb8d1cab7d16811fa68cfefc402cd26ebc4e945074ce99b2bfb81285a3c2ba9f8f81e6c983a0993360a89a262129187de8448fe881d20c3b94d4e8418b040228231bf41121324a051bc208a2e0e9289acd67633a6b1b38c1632d5aca62c3275b0aca68fb23c12485cacd1b1a22caffd9b726fe6a1b0c678d1cc1f6ab09eeefcda0c38fac69b4753435fd5b1c82475f7dd3fa5d1949835d92b4db04a6bd2f58a80edd1209150ef28b04b480c5b40b066146f82b729df6cb05d4f1498f8b12b7d6b16b660e37237e58a68c1ff8187564f74b5384277e448e622ca8122acfe4dc97a4e3909b7c7abd84c14d8784485d40e9919f25439b19377691f91429b3fa705074bec58f2dba6570c2e176208ab21d8cec90aafe03d7df5a5c5da31cbe539771d620a447b8255b7b5b4d942d8e0fdcdc0408ce194f8a3a9e693d60a8d496c92448fc4d069f6a0ba34fec000bd67fba0dc479e6bdab9a9336b4f2b0eb06102c041d44d49e0fcb8d157f1baedf7bc76303eb1531311401a8c3edc09efd578cf8d4c89ec63322e9f1ec7cab2c20b37f4d12a147018b43c70918d3c6a0595bc1dfb704ca7f446547a9fe339ec3d6e48bb8c528fd3598e3c419c84f074917fa82a4198dde8e994ed09e18f018e64abb7b0d453ce932cac949b038987846c43a31345e24d0789090892ee80c17ede454ff39f3bab4c8349608158f8df37404acef09c82d460ac23ab0e083f3164706047b62fceda3fdac091c67016bf2aa4d9eaaad931ecd1427e138183c080e7dbc5f73d9fa97bd9944a32216bb0e9c46e10ec6a46065ef096061f096c428e86a8390a23a7d30245c0984a51afaf6d6455776e5df1fb39f3323801def35cef4681a1675ddb079f8c428e7379b1cadc633f9cbcdba06629387b643c01ab17701ec6e5a493e5010de0fb2a8b53d6cf8cc14275220bb359785a6ed8a0b28d72051914ac57760312f8c1c1dd1eca817c70e5c3719a074e101daff7f65b902d5cfd4395de11aaabe81912a512fccef312ec519a4194229b99dba744ea77cf1115248a03d098ef0050e8fa2070e0bf20287068e46244cebb9e806d2350884f7c4c000495cba9760fcccfdab8a8824986512127f40ff3b7e5100e6b702a9534b10fe09d7383dbb16b7f9aa0ce2a05a2271f33c45e84d458030202510ce87ac4e6ff1bd30401818de14f884d552dc88f6ee175898e7a21c5ce612f45d89a13cdf707d24cd939c01e51c318d676b60ef4eab81f868aac871a4d9e11f7f6a6d2e73d5adf558191ec3a391ea2375db9f402b785207af2478550204fb30c13c923bf823d629c687a71797a1c64bea9e52a16431f77b3038434fad8c64c614485393a33db4f0c92b8ecf0639f36c7c54abd193bbb1e65ea7bf5f77d7fceb03da0f811f9463b85d69cbba2cd3f9588ac74cb042fd3f1182900edeee9f523bf09578b2b7fe0dd8e55dfd9e6b1cf2fc92d3f0a897e6d53cc1f5684e462ccc221af54076e2e9dc3e848e6e1a33df342c6940dced1ba4de5d980f533c2440dcc69d015cfef7a19eb7728c74deb578ce30e55cb5ed62aca2b94472a5315a0f0135c96bec0391b503199bf80e9aff63497febef5ce055eb777e7476f8b4b344ca751f3374666e125a043f1fa1bbc73e73047677b547438b9eb78eeccb7ee70357e634e57869eac20f6a20c6944fc254fc4e0d2906937b359e493ab3bfa3ba8bd808719a69cb35dc20a79d97e6f695c41db84bc13c92eefa9ffb9b941e8c3dc7009be4d3dd5a9c3c5796021e5790124b8fd92ea1caca7e4ee2421bbac4b792c7c22387f06486ad149a812f015d14230c08b48d40c765f203fa44ab912c73b2259eea58be3755c5c2046f626bcabfda8bfc03b61aa4465201bf0abd6aa2737cb816f9f30d71340b51b4d6dffe16ad228d3ccdb38692092bb5a8048747f2571764a2aeefa662a58372904aa35460abd4f583b49d9250ec39a3abbd7e3cc48343d2757feab5f480a18d1c7fbbf5682573d5fefd1a9d059b83e7a765c7d799835361bfcc8cf593d1b79f0e3bb7265183d6c5fec84db9e6d8ffa35e483a906471080c9086ffce73c33d9afe20b659d89f3feb1df4e840de5f68a7c99f6587097e705b0674c2db838d0795a51ee1991d1e4679fc938c5de8a0e31ff67d4247b5d99a9f1e7b202e9d5fdb24507542feb11f923f970a2d6fa59e723028bc66bac21199ba7984566e172c6745f0b3a91b001176dad715217ac5a3bbbb5fc42f59bd5fb84f39481b4455a6ce1888b419c13fc9a5c2e7d058743c77aae1caadb71d8a005843066904f055e9fb38d2f48a9bf8d27546d8fff18e89be315c657dd088270d00320efb220f04ab26035e17d897f2fa29c74534c174db792abc2562db8dd93c4cc86abca80e72e60c50c81508396f9b8a3f41e145a373ac6e2d8643b2ddbb761087886e19db7f02bd417430d8e87623d940af191f2fb7315b69ee392e4a073fc50d2975fdf3afb1a87d9b39897cfba1b5241db1667b6a57764b3355950e40831b06a9af4a502ed195d884c28aeb66a49da6dc7e915e26c934319259d467f4c0b20639beb53c9781ddfdbed931feb15ba88b1b53b4f845b3fd770e135db8029e497a23b8cfbe64faff62cbf0b0769fb778c56c331705f508815c6362550c4500ec24b7f50f9f49e796f358c02b01b64e9187e6ca162d381604e6e398aee24477807b10ca4e8cf8435c195f68d06367319edfe7ee8d4545a1d9d1a629e9bf260786e45b77804a72f9cf05cae139706bed9fe0f2b7bc6ccfee3c3e986af6c277895f6f91055006f5db00faeabc9255f90ade4fffdfde291d9f2ca842be6230ee677eab503df1ca6fd3eec76248f3dcd990aae0fb458b38c89e3976abe8ac881ef09856df60feb4d341ff4ad5f1bbc18b63506df160c60abf3266b7838b2b396881751b21d96af836244fbed06df8f49070b9bfd2a78b674aae3d5394c5fc5606872f5047ad06d3db24c8594ab1f488e0bf953ffec2a2e2aa180203d604019757c28285138323776b1d481cb97419bbde595ff0c81e944c1cfe27ea011ca35a3291a90f037f7f6322e426157bfe93127c9f9a7835b20c5ad1b772832c087ba59fae5b28a834911882c127ef06c6a67a60f74ba5067c7190bed682f7d093219dbedc622611303f529dbe85c2c132466bc37e064834bdfacc12f1cd72c6a2a8ec193bdc704269946d5c0f44c34c387f0690936067455e37f237fda508ac62bb80a7d0b641490486a8c069e80a0bc8f7ff001afb0fb26574d77d7e633829e83658ecdf86dbd26d9d15cfc7a29a9189871dd8658852f52cc5fe218dc202c5512a512b2566008f41e7befc0612368ee2f8dad3574704cc345425c1ab78df0dd96ec60dd351b73cc269b7e1dad8110bb1c0fbcca261572fe74f9f1dc60966be340c95d61add024859093c546fe71b16761440d6c2fc5f8b2148ead0395f52df537d65d8599602e11b9fa960ec50e139029c3304acce63d91284793e14ca2f185f31c561ea0ee7b23752565fa55138d2661734dab729c567a554969cff9900c26868f1f0dbc2e1fb2f94398df39b474dfe6b84c887a1420bf5717d9f3f51126cd09f51930db90a6b0c3c4262c42f3ec1683cecbf3976a25948440f048196b287a32feb2ff1aa1e7360558424b637d6a53137960924cb3d69117683e6953a7158c9b0c32680d2f6b0b769f69a92bda8b047efd04fe47636c3cf1138d805f76bf0677d485823050e2ed3ae2b5a2f4bca57293fb55d01ebda3b9f467af93f0ada743a00f991a05f4bf9581414d4161bfe0c64f9a70a314b7e8d741df5d55f410cf4b65f041caf3109c354efea02adc5b9b34d06dcd716ba2601116816a3416d816b2894b857bc866dc6822fe2db53234088f229edcfe323e74ffe436000a5b5309810992a4b8ea7f2f6f8666548507cbf5516e97c9d7d2043534ed2640810fef8440cb7ad96a691798a4edfd6c92822963280cb3d6e3be9e4da6e909e6a07028158092d2aca5035cf949b779c97292967ffd6f35de13b18b76513396137adce10dffd5a3fbe36ecbce981d2e81cdf13a31b8cb8a6f54418d8207a6cd606f71f37dbb7ae8be0e0f0c739f19572bf114073cb0c9d8a75b7ae1eb1b9a02b768198bfae73d23481247100aa7458041889104616ea9301bf71cb06728b8a0bb169156f51fb0d81f19e32e802edae2c579a11116a5f0b3529d67881210fef05dfc904d9855063680829fd511bbeaca7aab592487c47a9d3ee8c8f254793811e328377518fda49b762bc519ba21ec770128f88264bcc842dfb2e3ecb49e657664750380a26828adbc1fb893a3f1a5599047d523de9d238e2c9df927a20f837854a5695579f7715af8387e805d6aa3b644e44063104feeb7faaee5d511d83a242befa729dfd878fab4ad1e7e2c92fbd59b51770652471ddbd7a05c440a862a078dd5ae2e37a9485aca3ed5f15c1ee692f569cb20b0bf31eb28fe345f91e700e08fa024e8fbac989796eed3276d5424eac4bc7e8ece067364a46211ba5b2173e916bcc339c8586d332ea2bd2a4801bc249d07e333da2680e34fc3ee115dd2b33e49811c98f22e75f58e14dd489d579601893da6071398f6bc444d062c729e26da91f0b4c8f8215bec1727a1bc3ba661316955e0beeec0b3fa058c9d93c7aa6fff58ad8ae2479c57fdbc713ef89dcf62dd370b55dd75dedaaf499528adecf1d6319c58086aa2125c1dc1af2cb0bb6ed0a729369345dcbaeb16ebe6929446632d641aeba07f2d80a59d53f8558c3c19df957fc2dd3213120d35c87901f785b41837c475cc5ab7c6cd535d5462d8fd3a415cf7892869866104ee518e964fda0570c8101865845de4fc7b09fadb349b11b70b796d7d373d32628a2ed849462aead79f51801af6a167ab9c3e377bbcd01948037799b3f92045351df94792cbc96ad87fd53bc7b9e59b6064a4ea87becce34297502e98a8a5317552bb8b1f12c5b0b5d7c0b20cb00f323f76b06c37f86cb1993131ae6800d0186ce13c3822a88288870995ec35393cfdc7df94fac9e1b46deb01be27f471dad0eb43ab17fddeae6362e273ea9c4e24bb3faedba97a07595071091ba61fab1935327dff897464d22aa314638ad1513287e42e4f903193e97cfee817c02415f2039f0ede709a60f78f96470e6d9213104aa5d9e32eed0e42f99044f5c7c28f037f739e5534d75cb39a0ef2f28355c8075d4110d9c5c6b3090fa5b48e2dc46a0a3d784f0f98e73e1f268a77694cb9449633b37733bd21b5885a8e3284d2bbc75685e59002804e7f2a3335457e8cc9add058aa6c34b8c55d4c0535868649ad5ccb127130cf6c0c866ff651b57d5b35b45d3d85f10bab67b724fa06a73433a19b192ac2189b15eff987dd3fb4651c78689f9029cf1e672dfc183542d53c35441f38e2ad6020b6f6a08b45f3eca7f990e6dc4671a886ffd3049fab2539a58e3f8bd98e661c3ff17fc90c0de92c93ea0ea6e334b1f51142d7f3b80047adf45fc79c6f7e9127688b6b976822aa8e1e11778de9c13e14255d77c0e8e2d24411e36246e3b5d14663db0767de5b9bdc8451e7abd13e209f02038fa61593170de81a3a022c32e072051c55004b07fbdf9fa31b302ab44202b92f317bea76cab2a9afc6f742ae53c49133397e61820f0c9c4bb3f025a1172a94ba64f2720273910e567ec35b2f725ede8bfcce0ea22d84ef3f3630b1a1ce1a32420908d26f1bd52ff17174ca35acebc2e984567dbeb76ec846d8cd535a6a28b383a420bb097acca455f1c00a9a96744de4e676da5ef254c7a542c1428b77e72ebdccf0c02eba37c9c58955b3db0f0b21c26d870384b238c0a5f0f2888c702308d969b7b8f2bd2d3713087c292a4594f44faef08df07cc4e38e16214a1fc92384fd3211427dd549fbdb5f2e8d9c48d98923cb2b9e5cd2479fc7f6a851df9019481479ae998837fe28e620b7fe56bdbae47e2e93d80a3363875d061a6272719c86b5369dd286dd9be5abb8ef29b2967f7f7417c38ab172bd920dd2d7ebb3aaaa51fd43d821119b32be9120bfa96a0a3141c0aad36f626f111a3f6c412e1927e2c3ea486e99ba930cae251b87b604d274e7a13b295e7e1fdb856d59fd4467de160e99db6f65e4c35dcddf177da01c03310ed1289d945b3b4f658d8a5eff0c8b7f1d8542c3fc695adf7224377e4127b600841030e70c51865d226ea72457b6846e0a3b0b07c858eef21bd6a0853c2f12682d6b5f1dc672f65948eac9d4e079120dffd01f7a7fd3c763fb7fdf65c8e7dd20de9eb6bfd55bbe32b9a0755cf1fdfbd65744af4c25c36af0cc09cead37cf439d3b216bac2b0371567bced755a072563ed215c00cffadb4f69f5849eeb82eb2cde59ec6e0ae6e36e7293fd0f634e10d7f60cf1dd48c77c077e5a545042a521cdbc68fb3031bdfe2f24e16c83a6e253080d5d76d20186fd5cefdff7dc80609dff0e9d70a8f5a2520b215f49a7b9af0179d1fac07ff2696c2e5ad85e1b4b2256acbb5f8665cee664f04dc4f43f51841ce780cd831e2f1a2638ae43d6fb35be91accdfa96a6514e2749db77da3e885a8425c4223540f8513ddd01fe8a6264bedc4c39724cf7c2dc611044691a0c03824584c2c3b10da090afbfd729c6f28222d4771767a33c899222340345e8cc68d000111f105c6028a48297a3cc2bfaa0e6a7dbe2b00dd1cbb563a7e2fb17e48b26a785cae6895095198c73366a38d8d67d4b40a8222c55786135fce694a831aa7a1a48673ff9afc9a091340fa532a9e0b709af5374e981da66088a909bf917e0f019fd5bd8dc42588606de15267af25ece7823133b4b9e52a0b1d6898c63ef8494874bbec424080402e1cbbcb6ca7dad1761a7419b7c4476435f27dc86114171d585b1ada1b5d156f481c8ab13b011bf877ff5350d2e4912fc92f8b06b66658fc7005fc5a775d006dafcad41f6407695d1cbc190c28f6a2697fa63b081311df20fc268530d3590331cf9e682d3eaf845bde32fa6bc988042f1b7b92745199a56ad4c1f1e8a5d75058d240649c4422c4094f8fddb9151ae9376bc350d830bed31262125fed8d71bd5600e81df21e1e98b8000492658ec53555cc56fa6437d5363aef1d124d81f1e898ab826c9e3ad9e76b9e097429e01af719b31a95b73100b9cd5688d45742224bf22b11d63bde3db738e2022c0c36fa24da450b8e033534f04b0e869cdfe8e6f1ada75a5629fb4974f791665729cca974b57d61d21a164f0052e7d745e24fbdfb83f6c9cfb1b5023f0dffd1ae03083323ae57445bb681f357480db391027a94a2a81b3a0ef2f8c14fd71bba4f0b3ad09f3814559b14c958e11bb00e1afab0d8696b4cc9c4f96a672510f9c9639001b5fd95785c6afd3dfcf7dea755e9ae9744e012b7f900699f16764712c32a6fa1e38cc9b17f58aa6e57497a33bfd3c2f534d3864f1e5f4e2f4475c29e5aed4b5b08806adc002e6c65780b6410750e5376d5908c353385604b477ab6a8e0a8b9337ae50b99ea7e67f3666f95bab1d6a03dc1ab435f0b9a5a9b63c02bbc60eb19ac8cfb757cd2c7de9afb882c5a22a37792ef0edc744cdb2dbb697f2b7736c9cc9d8ca6007e7e311defce4caa4f8116a1f5e5bd8f15fdf5508c77266137038dbfcd3698509e4615fff14e87774bb7a759081da75c59b8f479a508b9457a312863065c38173cdc893c2de4de32e7546f1d71411b707f52f8caa30f3231bd9d36fc6231ffb71ee1bd13b0958724a35efe48824a18da7b0449d34dc21c6832c434c33830bf813d0fc8d2347ac120e50d065f0832a8622807b95bfb73277461adfc2b3954560742a52fac534fe8efcbd30a6891212a6093c0514f54398f2d011ccdc78199d457532496a0e8fa6d368317497f2be3f56cebf2f92b93052af645a5a2c4e9cf44e14ce43277e3b67fba06356636d5908c3be46a16122d8e4b72200d03668268591754b86860902665e319ecc03c82483b2849a5d74f045939f47c8008c3cdf5a801d0e74949684fc1a70c85ff5fe1fd38c1d0ee15d3aa1cffe0f6ee837393e51d41e18cfba6a947f311f772e098abe9642df02e96afd9ec4695f65276b99ef3ea3bb2e2e4c788ba7ca9d8d908423b417c8af2473ee34de1c9fdae3bba079be622eec7523eaf7a9d894fa76883ff86d8258055014c7dc431bc671b08dff6afd8951bdf74c49cc6fcb9ca6661e044f24925b29237c2b9fcd8481bfadf3d23953deefb32b3a8f156ea05f183d680f14a4ad32a92855bd40766fc783916e049589ecda872d0ba2b5aaaad3909e95703eacfbc7d6fc44b705b985b3a65346ec4e7703295ada62c3272dbe5a35180a1a5e2e88c8ebb8a862080c9c8a9ec2b1a932dea9b44ec0350c90da987e4d84c7c80c177235cf4597901578004ca1170fa2f4f983cd7561a275c7f6cd651a29fd19a27f1013ab40183b4c8c07f0b71a7f7e448fbeb4e9bd5098c347539f4b828be3d40d8abe695753c262f851b599d54ae03d21247dfdb976bd2254264ad69ed3ffd2adbecf13d508aed21789445fe942bdd5aec3a9152798e218c0fb0ceea2fe916d913c4285f3708b49a3c1e87d3af23a46b53cfaaf19565a87bb072a6a544c077f55c4e2ddee107582d62acc94512941576ad061037d86a638ccafa1c483abbd4985e971fc523f2f44e04e7e13c6127535072ddaa0a7b523bcd688362aa50b10da6732041e04de0281d3b51ef29126c008492f9d7a927057d7d6c3a7e0aecc06ca5ed9493b4690b0123b74684d46c28dffa06ab4341742506f5df1a6066d755ba6a3c244e9a1f714ff6fd25ebd7fa1f59070b4e3890adcbd3adb25d3cfa9cf853df48c16e44544002e6a33f45b4364af4b7a4117cfdf5d23806f15c717ce3dda328d86827fa7ff94d25c11fc6c951943f7cc33fd5565e4053b00989f64921a3795ae7362be62391d5cb5e4efb7e4eede6c07e85d2dd8a9043dc847c180bb734050c8737a54794b14c420220601b9a26f2e1e699f5b93150eae35355ba5791f2720fb500be46d514494ffef782f9022b866b23c14010ccb32adf41ef30b7ff60423c6ac960a2ff0fb2f0d729e675692f531767e0f7702586f876946beab666607bf8e38277b0e09e54408cf8931ca6cc5be959df08638f7803b1b602522f638c478b69c27eb572ed6f1d46b8328add7f7d3078533eb4e6ee88b2567c7ebe1e7f2972d9bdf43126932089dd6fc1d1f0b1f95d774bfa7ce63e221da5db21df1dc5e142276a754ab97035a7ae644a48446da4b8010180513e491bf0be8684b19784df7a12a3a927853ca6e4bca85b4635301531f606282b6a81c158a9138a0e7ae39f540ddcd7dc5aa9935be4ab13dd912055b1fdeda75d69db7a7fbce9b0080b309743cc079fbf5bdb494e9125dae7f452c09b1d95447cfc7914e9e7deae1aafb1e14ffb3c5afd1df5e1007f43b38086b058feec79709ba2bfab09299db38ac48735d695828d8a2b3d7f8c0005e9f8b68e79a2bb8407de1c8d2fcdd2223efc604538bfb249fec26ac8d506992f36722f0f0ba10618d85379ee07e6c28f1ac0b022b7efdbff9cf8ac9de3e0ffd37ebff2669169885fd7c330820f5f7d08c0530c0bf92399ec9856ffcbfe679270c05e1c5b31279312645fc8bae4c5acce8262909e091f34c046b4356fe722705edbb8015cbcda88bb4568958b4c189fcd3fe4df627b99aca3680a3e728c8d626386d796209490b7454487f6703e1edc5944178832130737dbbe136427fe7e12d7c60044355f258e6b79372fd1acd13d02d4935c444964b7185388805089d9808f88e14aa2fd43c43dbce11d00ed1c99e08fb57b7ebd5e0d5d2bffde805ac8bc16cbe8415833830979ecada038d38076b5829c24c6416569464e823887bc0443c2857310fd7f8753739cf02cdd4648da85e46a700b9afbd0c286ed972318dedf88fff7bf5dad02008681b34957fd7f3de22689fce2822e7df8d6b56c228de596c6a4b6e4edf2778d760e16ee2071889be2ba4a63000cf9f267998348a31a9ca6c586d03880e98e26eb19842b6addcc8a9a39d5757f0c7cbfdbf7e096b37af529bbee18c467f1dfb3e901e6b24796045b3eb1d5df0f6cea60330bd235090eddd9749e6d165c609750b20d95ef8347dff64c78780f3a77f1c9bbe07aa0e82018140201008ec0785bc803da3ca5ba2e0772262106e9622a271543873f84e5ddad3951ed18eeea91e1c40e6b51e69240176a56dfb6d7faf3a95f6f595491f88ba32c499f4d6df8123334b8b9ccaa376d35b4860b53291b396c76ce7b31115e41a10a612162f9e55f13e5d13d5a2ebd98333687dc230e8b1f2af360aa59a6e6dfa1e4cb2a52d966765a9210e400f36127121332adfb358f0f00972d0de92a60994b878215c635fe4b42f0b7a00d4fb4e8df2b4d06b9f09230c593fa45c605db2c88aadba636e57506f2d036054c81965b682f0dce93256c1738ea1e7f5aed27148f899d3139e779809e19fc5a008cef1226803afed0e8aab031551a95d21810165b2df4a94950eef1f3f160df827b18ecbffab232ba9fca8e0e87343dfe7341372754a7eccb429f2df8257762e309c8b8d0927f24f84252203b864c13600d3c3d59c3d214d3fb736f30edbb063b51a5271846c91d1d30155c74a72ed0f571048cd8222a19a30a807f036ab0a8d59b6a54b06bb9131cdd7817adfc96c3a72a9716a843c005826775df8e5d0fab7f8ead095dde10336aed8b7bdaa5dfba4a490ce1ea123574f20fcceeaf5ddb48208754c90db8b7c885d7ad4dbedcbafdf18d6b85b0582f4aa353d68362018100804028140b950c8736654790b634c2ee40514035cf781a291dbae72083c905ee9450db82256537c372c6aec223db5aa23ca1dd142104120d0521de021303070dabafde917cdcbd3d15a47b184e0d3c6b7d96b42e4ffcd46b86d87193bc2fe0066f5e0d5f77177c2fba7bbbd3f84ab81857efe75d235efaec2b48b8d259391a1e24f6f5d02db8d589749db1c72307ca31b6af97f2ccd213ffa1308bf606b2efa60638e21a5240c1c3d74aa210ed04e80d1278144ceed29925f3c92128b182a25a3311efdfbf4f651ee90e17279017073ff6e4f7ef426bc9988de7172fea3ccb92d5ffb3361da4641992a4bfb5138998e2e47db774d4231ad8b66a05822756d265034627c44ce9ee30eeddf758aaade15888829971f29afa8e8f9dd4650972c31bc2a5ca46e399fdf41e694fc108cd81bc4f069dbf806bafa26b898271cf9448d6f1955915e8c0d17bf5291ab00564575dc5301dbedb2dfd6b440610c4ce7ca64096d25585a796d826aaaeaf90c5cecdf067001b2e5094e5ba15842d2035d885f00590611b735a10cf63b86cbcb3b135a2480ec19866a3f73538c637f5002563e2f4ee9bf01df3f01f51a443f0ea0dc05ff877d4aa3dd6ba4c1491f70c30f205e2f59290221ba73f49a0ae8b22701b8f72f267effc90d759dde69fea211c9ffc1c262d4a8c46eb82f0d0ea452a8d1cf9ddf36800790d193701a55c91292fee90d10c7a3457403e35089a3159e0047a8197319371d618cd1b6a2f652438b4563a6a10b6cfdec9d03639696f427f033f1c63d6a5e763c18439f8e60e3a4bd9b068df4ae2001741255744f30a273b85a0d7d871dd9d5a9ac441a1097cffdbb0d60cbb27668f3fe2379eefe517e1d25cd7a2f4d7914345e965a28e16c001f20b3e1e1344b9e25242dd4bf7797415405fd288303f2e0f23de38416d50d2e83a1dac3e661d4bd0aa4e47de095f8cf5b4178ebe8788bacd868b75c4dfd4d494768290c4bef12571617342031daa26a141a32b88f44a02b8305f0d8c65273337fdb70e6ebe1f4de66a92d6727058b0a36e2ded0772b0affa54fbbe68c1547d4b78882f39093e482d382621f123e7923aacad72cf1eae56f954204f58410964e8749d988d07566cd4adca04e16338e8766429579543bc33240ccfa8ff0a6ad2ab544339a686164e0375218c727a30a9deb0d18b5f0f1d916a4319bda00014076b6c369c73b4b48da67804508b6a6e8e14b734b9d3421bdc007eb2d3c05e2debabb7138394e83adf55567c260ad60e8f4926fc592c88ec5fe8c1e8a245e63d1e571196760e8dba42e36838d08dc8d306018fd9e6c3a4a97d1579150ed7c64fb6251e8f97618090494aa7f96a777b11f60a2afb1e52cab19bfe7ec8e8feed1c2e56304f109ca89c3060801b27a124eab2a5942d23e43743808de67e61f6b3b3f1314ad0ebf931d0802e3b58e4471d286f7bd318297a0a16b3ccdaf5b12e52523fbc9ae87bad2693ca2a86a82ee5792a5f2def5a0a358394ccb2f5c729234b041b994e46f930ae2c8135810963e05acce2f2dd7c6ff3ef646ceeef3f37c4a783ffdab4d7978c3cea548e571936b395f66e5bab1f5eee1364004907946719a7fd412921e1aa50b96c4a11c2b85d7e1fad2c361ed79b90b4327d9dde397d7f0f9262e4c7c7275192925edd36510e44f743d612ce0f92ee43134465b09364cea2be8cec94582d848dc0f617e4456820074db4aefef26342655cd444dcf5103cd3a701762b4136a23aaa7997fdc85a971900bc1c983604c237627957db4a8e0722717c1d14989e76008efd8e2330b1c648884245e43deb5a81edea727a2f4516c3d0ebb44572c42c699c9cf761d8cfc6d00aad56910e568f2ef44cd2e3cd6fb69e17a5ebe6d6f200ee9b15a5eb93b895450cbc0779560d41790cb1df3d5113f108645acb745a448d6d5ff63e9312390aee6345ae0c50620c67f05b9f941b0278272cd6f1714df1a8f3c9da4dcee45db423e0719b1fdf0570fea83e17034e8674ff95f5b68d6db174bb2a9c2102fcf4b372c06733cdc3f420f3d638a6c99a3454af101622d51a7987f7ee6ada3faaca3bf12647e950f7e9afe0d9387ff2cd3fc3f15d710b9f02657bcc0eb0f4b9db647fe99bb02e4df9cc6c313fd574c05817ae04ecd928f6ec17c144ef9e480e361e965e9ed6fe9f1df5a830339747a1277183c32d6908c83740e33b28ad875eeef9213a20b53de04faef44854afaa8cd920f918c828eb5cc3e62fcf19325f3259b8f1f263512d1b5bc2e247847918ad115011ad18fcc86149bfd1de0d152368b980adbd5cd99eb05ba365c105b196e9202332c1ea3365bf74db04302f1748f4fa515125699455d8005b17ad60889b59b4a502d2b507dea824110f82dbec5e2ff958165176a6b321fde41540a1aee1514e21996446f451d1303446e9532d7ffade4be00cae15d7b21a839111b358bfd0c84f471875b7f535b3c0beb702ec9298e38c707c13d5fd9000940b6b7c469db4b4b48fa679c3eea59c27d15543c569ba394298a41ac131e63a4affe57953c5913217e1610c6ae80a1b244f83d49cb5d5512cbca3ec18327fcf807eb4408c9502cb0fed74f055bbde11bce7f667e28838a23f63ccdd4d8eb7a92a6ca783c02e2ed2210d49c316f6e2e7fba553fdab6dbde409a6504750a399d739c06712467986a65d00648615a539680f843d0f2e1bb4961fd16af92d2efc3b244b9586a02f027ede709a6d09575460253ff15b74b91c4ec0c5b22398df6e2ec6f7804359383f73c0a5c06b32485732bdf07f6ce965c7e124af4c58a3f491a3e1571eccaaacf998522261cd99ab501ee8936f34d35d50d65a5838c574724e99453a52fcb1c3d89ad346c84821515a83d10eea61028af300d176c9aa19a030f24138e525d2ad1c6c05629a5ac3c641d64ae941c851ea6a7e8732922f8328a6df82416e28086dbb33ae70eaffd38117ca38f8b7e63dd110fe5819cb5c97498255d2234ff73803d2ade910fa19ba9736391228417f9155e08d7803600af0935eca6a54329d80b01dd6eaf00e7d90fb26ce71158b472f21beef032e592ec667b8e1fbb2f245489568a7313044eeaac9c062dc0541e236298ff88c5f92f52b025c2cc33f9bded8dd190649b37caee3d091d1045aa0be8fa5a0c34a0df0e4529ff2b425df56d3eb5edfb3750157df3228c55d53ba713e2d892bb290eed2f78165aa1bdc4b05adf9e6f834592fadda1edb66b3aef02b6ef3589d2a923249f54b72c88cc40ef183040eb301fb4bdf3299de4d11778e650f84cbe3531a0183fcfd93958881ff45fa107c20e820181402010681866446e23606a4e0bd32200e76d891661661e74222cb1ddaa4d9eb985435017263dcb4b3f7d8e42523634a96416d09f4ccaf20dc6c1dea104e503ebbcc92ede1df78f2a9b41f27bad164ff53bdaa5321a68eae845df274b185b00f6fe4ca76fc473ee82d593f063f79c4d8192f33530b9c3a91af13322d70372dde0eb5f5f480e2771be2ecf42dba761114db5adca6f9ea8f40037dae9574774f9f86fe4f1aff0025918572673ad102258c0b5359d8fbca4d1f583b0293f24e0aa2fd1361b5b799a17b3bce1db54902388a907a2a54971a0a9ebfcc83b346cdb89b870611327a15bec19f2dbe3a76b8df04102dae7a93abc1f436343531e9d2ff28f3e684a2ae2c92ae86bd8e6667a58dfb15fefe75e615e074aa3ae947b40afb793f87c3d6e71bf42ad9c25e6c682bee3a37f25e6b3caefbd0b4dab0f4f1e71685ea11ab9d10c548b2cd3133933c5f44c8fe83e89de08b8002d6a6ed9fe5f7bbff037997db0e5e33fe8ebec2cc81a31b05ec4fb5c8c3b293dd0f97ed4756e52e93c4e114018f6173843f18c1922d743f2f51ee3f5741ae023789dcc6c80b604a1350c715dfcec49d7884db9f5a5cbed1d0e5ba8815f7c0c88a9bdd07bae7c022fe8b33b47571122ecfaef6f149e616f8805ec393f497f461112576c952a33cace8dd95633034c12c6460acc0fab27b94643013436d986cb2471b616e725784edd4f50c9b0e73fea9e122197945879461765aeb30bb15aab7b982d5656278b855860e61d892bbc048ba45ee7a2c8e68e6e8a8d4f9c482d48b8025e42bbfe58987f021040ccc4fe5eeaefc3c6fcc533b2d924a8dbc12b924de84657ed24eeece98b2d2278f344e7c4e40ad6ef87f796117d7aaba1716c45cdcc29e61642f4ce89f0104d4d3df635a5c3020be6c1b0959700ed978fc302573fb1f048305f1423f877f493be032e9367dbd596d7b6829ad379389120b91000951bbb6c62ab4d17349c5a7a0ef02b0bef65a1a8d909dea38255fc04b323b9dd9d02eac0bc3028b20c7299f59633eb0ef2c7c75ea53c04066014212e02f25f5dbfc1752989b9423df4cde2046bfb9c9b252ef2bd4c59aa5d0177ee27bfb87fadcb2d6a6cd979ccb5d81a94553c290861aca8207d55a90ac56f3db0c520181068c99b6a42a2d130c2dfbde520a46c3efee1d3b212a15a4dc683dd7d8f43d980f643fde160d947473adf7333a8860840f800e5e091f33f2acb358fea8bd86ac701d1b57b4fde8e3e8fdadfb958de3f85801c7458ac8afb8225189ee68283768196a2311700f3f127832d356087672af6b1983fe03ab8aa7234ccd72c04ccdb93180b326015282d972f1d0c56c5a4d868a9565f2ee2df3572f44b5d8a8fdbfdf4efc277dfed46699df694079f0a1729611d9fc8dfb449d5bb7bcf34f81ef377753607b4c8cbb2a3f95558f5e4b60c6f11c0d6ff0ff0e795c22fec28867c7d903970123431c0472095f3212821c940a862ea4e331800afe90602d30d1cbdd5f9002f30f673ec079e292914a41efc3f7cb76a64b92f16cce096e924bbbfbf8f13ef633102708fc33a635317b72ca85f8545869db56ed0fa5b28e2dc86ff2457fe5ffe4cda13cf910b6c2fd3cc225ff4da1aff7c6b45000cfffb6d7d7398e03223401998448a5b1ef0772fd5256ec84a097114ea7aa8b8e8dce6ccc25b3c27cc82e8ce7b64e5f3ed857305e4bafaf1e0b7112a6d6d0e6d9dd87fad9ff270910b30216b72bb165e8e0a2b11dd31e31b3320304826b92862c8237fcae7682dd45c14de58b2e1d3ae80a10153338213aa7e30c6c521cf92158a7b9b30a5f81ceb8ff3f88244406614895da6ff8f674c8a7f43f5cb85d417d6a5a57fe32091137381ab5d7dfe76ae7b15385983f03941b84dc6f807d81e43d4a03d2e67b1958888f160669b2af8eb0cfe018141d358855499816c2662d894d7256a075a66d0405aa31ae924b6d85e2632f21220fa7d5d2e2d2ab59d1a74db26addb5016a1deec00c6e8b3e96956b545633223ec817dbd44cf048bee69371d3962ce1c94dbedaa172f1c9930a8df667f68c929bd43cbf07e1163bf5b04b67352583f9d91fb2dd93670b5c81b53a8b7fef472d119ae4360a0211d03352a9bde7ca212b91fbfb46c8657f6cb9e21e3113e7a7e868fb31c0d3ba0bcbbb0a4e7abaab0f987eb15ecb3e39aa29a9a264c9aa110d76ce84b75a9138d55209ad017886a4f3061611df45875b32d27dc58821181539d78ea8a83235b1f1a5d9ff43fdba771c9bac014cdca5662900060454e40279ef833bf2df096db3ceb34801744c895a5114f3ce50f85802459d8dc07e7119402c32991dae6e217597979fd332b5e8a257b83743534a8191b2d44a42b90f85e2b685dda74c27224e36e0a2a9509e46a4e2b7fed1b7f4b44502721fdb020ffc4ac0db1a2458b54f659b9e11a8cca8f565021e2096633c6670bd540d6fa2f3f0021e1b2234a573ae6db775d4d497a87500ba6af573f3eb8aedafe3b6821cea1a7a012b273f3aaba3e28c23048a3a9c62cf4ea11cc309b95c9005b08d6c205b028c8dd64540ad6ce78b7182e3a8855a9ddc138fb799c6730bd458d3770ee1706b12420c5f73fe6e7d39546d8e924adfb5e5ad7738fca9b756fefaf394c5948e57ef4fca93007c2d7af4ed7c1eb7e7c93c4dcd2abf129ae35579b93395abfe9fd95473b81f0ba1cd3afc4ea792c282dd3ee5e2d0217218c3802c89f45588dec1b5c478616343d9c0ee68f07ae9028e989ae527e3e37e4ccc0b0bf0d9190d4fd8f7a03f13eb72716f246f3155352d492c8c51c06a04b037bb69562eb9520fcb338eb06b9f8a5237c84d63aa6da3128b5ad56edd902ecf8c5b222687d0efddc11c7b7e95c758dc43373ecf71afffd4602f704db9378ccd140fe8388f4966171e26d96b1926f0afe54b21581f74b5dbee56591044298089580d962ec8abcda14e08ad4c4598ec515d59eb59270cc076ae88193687611dcf2813d31305c762391ee81d14ff1a1d357f3396cdfb0f97ee8109a01d5a94558ceb495da6c8fd8f050029a82414d7c280509d410073096af43fd348650f6190517ea94fc64859fa5bac9c621b93f414175438329dc80864465afe273c3bfe096155f32f7b1af9771fc58393ef32386a3a7e912855dbce0dd847330110d4244d79666c855fb6cf4311ed76a32836a62ca7d691e0ae1a5f25859f9ca957ff848287e2e3812e072201946d7230953b0b4758c5eacc8d661a903b253dadb12efeb7a5362f645dfc8bebaff8dbed58cf0b8584bb24e48a6680e3e029b6763036400198f029f712a2c22a9ff86dbc5f7f1caad24f1cf986dcd6f12fba854008f7be22f5ca4bffd921007d04e3ac1f7ba221a2a48ca4047e973cef6c4f34f5609077bc441ef364f92266300866511c1dd043d3edc315d78f7beebccf3ffdaf7e4effc4317e207a3a9be6eca98be95d5fa9e4d51bf2f9fa05b05516aa579f80fd9e087a62894bab9bfc691c915eb30eed44fb0cb9ec878b6819bb029fa2b44fd5c2de83af6328dbefeeaba827afcd92d7c627cf44fc1202bfc45a03fca21f73a0011b5f2407a796c77c2c86ae710acfe4a40ffc90d96368f9c96a29ec973752cf99baf01271dc7dc62f8e2e49cf0174e73edd4a74bbf4b055c9a921558422f1b0bb6bfbc07e30db4780c449dca1f776b5ccafd2afc215195c218b27c365ae10173b7c0e42fd44c1fd16e6ccfaa00c809e747f83c688a5ec7812315427d04735ce7c855653bf159dbd7782c901f5ec00db872f68c189f0467af96cc44f0500480ccd352ede87b187c70b13ca506718dbe958f49cf2b94beb94dc4b98d2ab8ce0198e5bea288712e09c6d6ac175bf02905afbb62d04d59fecba06862b609ea43510693a04979d5c0ef62f55bac2ecf0bb39b6e4ba46d85510f4c943fd72059157071a4ea24cacbe5b28f88e0cb28b6413329be54708db576c6d18137f6eac4b8833710bd2d6e80379cb14d92c11e69a375fc0dc81cd2f490887345411bc229b1343ed7760d486a146a05e7bb55fbe0d00df8c9f5c087b5a44af8360b52a072035908e764d3cb59e07f42aaf27f08c555fd9d1af1fa669e7972813e3263f53f9944175f4344b68ea1a3bb9ee70fc0ef51336f2efe68e11d3970c2a8972b5aca8be24c4b8f34f623c8cc6f53e10ac37d48b85e28e405ae231c2d859bf984171b3d5165cefeedd0fed6e0e46d993d02613497c40d7dabd947440f9c82a4ae6db3801aef45db83983b3732e49b0732e28ec5fe9e7b63e5d0f50f28b480c4ae2541450ace3a90cf280a8c05ba128ed63a46b036bc1b1186621dd7210722c3088a45edc1f45324c490db780f2c5d37c742d1f0f6fe318771746a25a1b631b11409a98154b85ab34d0bdf6b19b93b94419c55abe4d0021ad83dc88fa41c3850181c39fd9fa2ca79e016378acb8d99a716158d9861f4be4b217f048b43ec72f9b862922a55bcd9bdb0289959326df8c4f287c0806124368c367e8cb1ba6aee8b4a49c3456343f1c9b6666264c7278802d52f6c1a4092cb788f854e6573c55299f63f7bbab4e5a6c752b468a504bbf767cfe7b5abca27d899883f7361bf5dfe02dbfb04b5d4790ab81e32b9ef074d80d5117d621ce261db032b5bef82fd289cc439155c6b0d6a4164cdf183bfe306624c0d90121fd7a7f9e2264980d72a0c43cf1d206225b2a9e0821f870d776116075a585a5c0047fd6cb00d08ccd7249184e473aebfae82b64b73d1718b7611471dfde05e1ac6349047f63e5ef6b0a404ed23fb171d6c08fa9135bac5804c65576c040d45001878ea3cecebf13435d9ea2e5f3b0ef3ed3a62a93dc3bf7a2d0dc9feaf6735c50094cad9a36e26b02dbadddbfc168910c6bff2b16d30710f9afe12a73464853fbd139e39c7880837f0104193b522d6f16fb3020f301f8583b706d27c416fad547d38a774c7a943d6514a57e6990a9a8af54061c5e9ed030444e04ffb751cf2be45fddbe6ef7a4963e51923581dba758b7f3eb4c0507c8fc6d40253eb38fa7c07080dbcd6c220db6794fa4abca245668f3124e89e877c170e873da81e81041fe6bca6bcdabcec028d4c53962ae9d7a74a320c063a323cd3187109b40fb7ca34e319135720053dd8665893aa2153a64b2cf747a6a7d00b3c46010b47821b3fdf6013ff7e8e14648776fc5e150b20f30b3513e461b9cb580bb123db14b67f7d6c110e0e28c8d3e79645e0ab1bab0424fe6a132fe8287b15e4771852ee2b5567e90d4f7c08bf4d9009f047a11f8ca4f480c7413020100884c7854121cf4171bdf3fbb3eae95f7c258a4648f6c8c190f4e701615afdc6fe9c0c557d67d8e96e4d5a8c6ff9d2cf360e02c5ec386bc90d81017a6ee85bd593b041e69b8cc89b0426d2a6f68d4d59f5494e5b6a479ff6037c12104aad71e55a2531f6a9252e5f8dd36d2a7898e559ecef9da83ba257ff11c4565cf893ee320322df658ca7eb1cefb0261c38f29fe9d00f956a0aa3efdab1baffa610d1e7b7ff59a3a0b83fce01d24812eedf1b96379d40431140300f61cbf2afdfdb44f9ee3e931a620dd8489e6262bf7abf2826e3b6311f1753027c63f0239fb6318413dc4abec2d13e53a29390d856f255a7d9f52d7e5cf2d10c4541213d30f787936ba08be87da8c0cf90a29a7499b80281aa314c1d716eee87c040386c76d9cc57fac4c8519e92a8e4e129f558eb0339bf38691adaf105230b9b76c022c9867b3eb5cbdb7cb1ce4fba158f162e499cf41fd8946c056bfa80b07138e3904df623a49a05c5e8c7682d34391a9ef28545f34e26a4e52de807d1f50f64966865c40c085d4a62080cf45d1999187ec9cf9440b494e53f80084129a7f677e7fa8614e0fd14f68ff5e601bf6c465b8adb3111b6fb41f70e15e5489dd2ee51395656864eb5924ab3db9f4ee44d8fdfba5110abf26ce1a037fe9d4dfd790296c9d09c3b073dda9240d8cf992d7d550c810169899145ebcea68def10a5a52645a9c56a7185df2cf305fc63cdc1a1f7bd925f015fd14593e67d3e265b9a4bd8ad7631ba5384de9b32bc85f7eb005fb68f0fbe3b84ecb80b673d0c18bd1c4e96730b423fecc0623c32af6526949a969dc993260323af5edd41dd6411f97742809342f2f559121f27e6542aa5f6e3917fe72036f524f1ceebe7192c549b882abb6e3f10f4d92b1a96b7657023bbf4228b4d24f4f82dd5955b173d8c48840edf868c2f01b1f3a752da04684482dd2fcb113857e358835263a5406e5f4f60b1edbb50f48d6f7ea44cd4eded13a9711ec0c3d3c752ca5dfa52b9804caadf26f1da421b3d0bfa50ffabd79427023268f0e988ad91da40538b2a58040cea6709d10639d9fb93c442536beb5b8dfb736608ee0f55f39fa5ef92147d0fef96d4853340e0351e03a689d2f2717e1491f2ee4f7a4951bfe8c915db1f1718b90504f0e3703d30bbcd08059b95d1150eeb49fbc1febf987c06021f8585e59b00f1e454cced53c29d49438bc5cf25f1ddd2f2ff9b6a9ba455a2ad9800ee4ffb798c7a9615e02a3640d9ef65fe635c5fb724be89dea02df6cd5a30658eadbb219b22148044c92dcbc7c8e5df578a321fdb70fce2905146ef078422d6ea3704bf90173f4333c3a629dc004dbe0dcd1f8d6bc7b77bf268bf704230b82887ebb5c24f408931e815b5f904e188e7ffabb348e6c8c49bc64f3e082316d57691eb5a8e108ddd20838b80ddf53fc7c9378968f5cc9f8881e6ef122af7aced3cc7e4724c69ce8ac3b9114b3d60bc395fcbc6580a1e0dd38b19679c2007bb995802813669476c405f3e089746ddf1c52d37a2bb9c93be44c55a3db2ba3275b80aecc6dd1397a9bcd9a294f8aef7d133143ad56dfa248bfc93e7e7ce2162e574e4aa7ca1109a44321f24c4786de5f0318b6ed5b76a3827f7c622295b743a1a82a108c0275b9afbac4db4bb329cda90607100d53e01f140f9738545916f5995c0df351fc0970805603145f8ac9fefd3bf2316c87cd9df29489bd4959d9298fc29b24c6ab5071c02820181371060a7943d2dca3e07ff1f8859ceed5262fb8cff9ff2e94460f6de803b04275211caa10f6e2ce67b96655ccf7cc439d318c35c04495af8dbafd638edd2e9599a9913c25ec0ecca2028879458afb04ed58cbacba4ac4b56aef7a141aca8c893205a6096a68329ced26dd22c30f4277dcf870e8bb407dbee8b1755a4f632f4e4edb5c82cffe51eb7ec6e1a9d9ac71cb03300fc242e65678a2f6ed197a2727faa39fe8b8525471c96914908521d17b368ecd13018e0c9b7d900b9a66c20c598712ade6c09490b73500658560ac70c466283cbc341131a96f51213868ed7ad5ba2b099d05b1abfde38344cd0e69fda901014175d6e000cf7a70e88f256f43f6d5ef2d623f438b005a6c50a1d1097c7261b6302f63ff3e71382d62857759a50155b936a3768af69aeb8c8ad6ca89a8f37af94742917a895e306f67ef7310dd1f81b777e1274e1404832ce9b351174fc4c2a628ebfebdf2679238d2234348f4d754940b0b07667aa68fd5d80ca6b787fad274613daa272fe3ac1a7a2cd88735e00394a8b56f61b1be48fe80b6c06041ea55c6de274ebf10239eeb5ebfe287b6cc15e03cc076497c4a552382b45fb64efa1b58cf9e886b4d8e865c4e8a1c589959fa9275cf83b7e518505aabde78799c1e8d2be84e3471fb8d8ced5782e10633003a494d6f1d6ff24df8e78e30d67bb5c24f64c7dc08ae905a1f94fdcf80819583873a527f4d92de2beb9d308e442393271bb037f982935a4e82a84b973bc50e7027fa0c62bdea4a459a8a1472ae3e2c7b31b0ec19a329a281732e49a59a644ebf1ce15bd380164ed997dc64f16fc1b707c0c0714ae423458efbb051f5ca2c1aada9efa1db4a0115413d362be2d6adc1e28e99d3b608385c78b06ebbbe8fd33a536451ae16976e32d2a4f36566429410335b4da12699ec33e47fc73d5f9937f7f16c437e0282d94c1b1fce6d2670e16110c03854580c03730889fa58e1f7f3f083f7e32d60fdd8f9fe3da70f1739afdebb8bf284ef0b05b9f1c72fba4b7ac4d0994203a7940b00ff843d8d4fff800c35c42d76b7eb9caf034f5c484dc893952bdb41360d840b97c12898af0ff5e6683d38a437b54109925d4c3fbb69db95b89cd07fe7dc738f3d5fee803248536fa9d60ae11b732a4a832f1285ca4f18dfc7ea722c9faf79cf2708a8637acffe9bbbab9e8c64d679f2ca7616b4ba9566c53002398c32f798412040281f0653e1c8f21ead8752ce794c15063978ca293d0ebf8047cc0f065b67ee33183a14e948df13566e86604761a28f58cc7dbdfcbd9a0dbee7dfd89e8af24bf5dbfb399a9b75c7013a036043ee772ed22d61bf8fc83ac95c0beb8d6571d3af0656af88b0f7ec5d239817365dfd3b7f982feef914a7bdeeefe3a8ecd5d36f9c805e2c3d1391856e24ac3cd85f2452b57d2c76a51ff5d76b6c60de43bd513bfa26725a093bb1fc57500bc30e69194954c6ed05876c0613cb024a42b4599c01b2e6bec979c9daabb8c570fc4140403028140a08133550d4f014635bba69a924d19604a1b2c8ef6f4e12bed148f43e2203a5de2d40556ce1da3a993ebcd1b0203927edb8f44c2145dd59dfb9c7c8271ee89ac66ffb84760b87fd1613dfbf5dbb400dab0050d82312b169984903a3776c7e156b5ab59ea05c74f7c46d244c5ba435f853f66a6d4a1821a228038e29933d21a6d3ebd6336b2f3c41162ee68cc214497d78b484674ef163ab973807066c77325ade7e945fea21ed9cfd59e92a92bf853cb22f94ec790e0c9982831989e826d513593cecb7f479ec3dc8fef44cae389acd63f1e607f38c0e6d167f977d8bbf0d058cc7e1436adb7022e3eeb9611aad3bd8952f4d13f0682b8694b95beb065c349d4429ed7926c6e7c7b203a20181008040281c0dc50c80b982daabc4528220601f9cf503426cc738e7758134ee6587117e147dd603cdc12b168fd8b21d1ab6ea6cc73f6b883622509fa682cb78a148b177bdb35e08468d77e059ba145706dcfa63bb9afc1b44b020a517d1d0d3a24c4b624be295ec1563760555c690eb84685c176a9d6a8f9ffc4cdcce7b2806993cbef394a2a878d7b7b436040a7438c5ed16b478be0ed773069a35aeaa2c1fb670b050e84bb61b2aff0794ff5004dd96879dd546ecb205c05bfdcd9132dd1ff20136088a6b88f88f509d32129130ebfc55eb20c6cb57be2e697e997ce2870e7323e66effec49c2936699a9f7fc0e6a529dda956f4769f91e5522537b0ccfd19b2ea438dcb009c410bad64a9bd1041a1065b64712a43dcb04ecc893f1dad147c577df9def750bc09bc2e5f337feaa8e3000cac28b50dc92bc3820971908c971a4f3161d6c7515fb8778f957568b3f188e123009bd5ef9259f2de8b67a19ce2b4c7417de6d763fb197d07e4e346cc93613f70d3b1d90bea55e86310131d40bfb07a9e8ce24b1f8d104a8c624d8f07ad0009fcec2f46ea59959bbced333fa5cfebe4d7edf9008d894da500028ced1155ddbb683335e567ff04d7d1986f4f1e300bfd39a374113fa1a6195cb0fc7c4c2394fa09c111852e587db63a3f6408ba35552682c760860a1b7f695b42115687c6a665072ca8e3372c81ea3b9468fd2d14716ec34ff995166f2e2c7b70824872fe85b8ed944ced898dd2e0e0e02b910db8b785e4436001da64ba51ee4bdcdfb9b61a1943cb13f057e50a22aaf61dfe83d81131e50d1808580c29da9b0da91a31ccb71671a67ee78cdfed9bd3f841f5d16f2a95973d1099c119ea59d4f09fc76256cdaf65850d6f4ec75e2d8b1db3a6750c62bf8c5a1298cc23b16f84779d3f1848ee976f98ab955907b440a7260be315789ccff96386a2d94a1b3eb12fcedf3c5d788ab1a0c119be335bc6721ceff382d114e010cd23c87887ff2a931df621de8da66b6f6f4a1ab284fe9ecbfaff9b9fd36d7528365b205ad9233409adab75d222bb437a7733c1207fbdb9c717f9fff6db57a1fc22e7399a6880039ba05bc151a70a574baa688d0f8a2de6d1b0e33a1a86ddee1f0036c57e7a636f12dd0d5f185adddd98fb2c5aec349b6c4ef25bf6ef8f5c174633b23777026d8be193197346644acd0b9496380277d716222c046cd8f92d7f2082ce0e73cbc5bc998ab2c49f749d7a0c54d2a73b6ea4ab453f7b74f327b268ec91c7cc8f10e5dd788561b8fdab0d48fa628b8094021dbe324d79a6a5d8d93dd9a73bf79726b17c234e87662e0e6176a783a0cfc95831f0de8612d178c71639dc9f64f263db5d3c1dafcd70f3e3a6d2668c99a922caf726b8ac40201068793e4c32c61f6189cd91143c1f659c92c2f781f4a3e7b4fd4b8c04fd5e7ce47e7a7dc59cba09c534809b77b75b795feb0d27d8e5f879cabe783e5013b15ebe87ee33b6ed00a48775bebb19047dae478a817d3c04454f9e3ae836eae37018070443bc621854b29ac47cb9c3175f13f34e02868b24f66fd46dc7bfd26c32fe0e05d0bc3f632798ee3c9e30d06c9b704b8cda2d6f86be157e15ae6fa5155fce528f7ac345044640dadfb849ce49a48fbd17d93f62e2687cd2b88b3d4c2180a2884d329178be599175df566b246240be6a0a6ae42a272666f341aafe18cfcfd8bfbadefca2cd724ee03594c0cecefabe6943ba3e0ec41cef4256b39974ac2fc71355d97b142d54b70b0bbeba3317ecb3ee0bd83de21916faccab2d12a88622ad64157221052a852681c356073dfe54ff2f76f5b87a313c9f77da6156e9e6473df258883db7bdb3c524e2ea576e510052b09b5b1c73f7651911ff5003cce0578a0c2df0b7a6fc7f2ec45bf0edcbaccd33de046cc48db290386f1614e39949c0d795d0eb4c79d6d031571601a66bc757c337f45d07789015505e9f65e4a9fe9e2ed8f608ef4b14a58cfc6f84acdf8f97aef3af7a59c541ed4ec780b783f4caf4c6c8d23099306f4c3c35dd43c24de681a984be057e7de1b839ffb363dbd0cc8f26ac2aeedb01b7aac8725f5a33c6c5271327bcb1c32bf1570c2251a1fd332bea869943fc7c3613258995f6158fd20400cdfc7d388ea51064ac0bebfe822b0ae5e722babdb3a5d034f96172ff699da1b807e6007910ef6b42dcf4d7080beff7853e75850a45a5bdc5271fc8656c49bcae367b1b37e9378c6f78feb40ff7c968585452d8d8382dbbf94b3a8df7bac6301f5afea221acf2e6fe74dfc7ffa58668c9d83fdabd27fb5b67183c028a5984e9d113f6278b4d411640d430042eb55155eba89a2abd916a796ea5f2abac8aa401a4b2f560c7a3f30247f0963600552736d9efb4fcfd18761d20331ba210e1a445e0a1ffd4c1bb58f01a1b80bdf9240155945d69f83f5fc76940583aee0ccdc7c0777192e82d51c2f2ae95bec25ac34989b91eb436a6b6dbc91caf5e9ebd1e21d47e0dd07e25cb436040e96e60a1bef327fe5e8bd8e154e9175f99f6a260fccd64ffa501b53e6d6a4329c0acd79374558c4d02742d2054c0237215f41945352c273987b062ce243c1412d003c9b803a73814c902e4796e64080ca4af337abb17a3a37ed1af86fd53f8259d9bca169226e82a806008fdc75cb5d208e02fa468cb81686d5a9e8fc4590804e263d716ba12f98df7e82e576f09859e5a4f28763735d372f7b03c901b7a76222548fa12fa5746fcbee1cb682776ebfc9de97a0bea27218967734938dba04579fd2243a770107e4f49f7d1e59131142ce9e1141d5675e15c2b7ae40e73765d0488a253c306e5bc22c9be9234126c88a17fa2e9befa434e2d6e59220b0da1c73b1276ca3f08e2c38ea13df44576580812aae61ddc93f07b2fdf4dbd14616fe8fe9a66f45d6ab676e2bc87fcee69080c7878ffc450cba23266f80561d4fb041e7479449bd53afa229c007979e84a393e0790fc3f2117d978f350d0ff458c423c9151c4fbfeb5107cfa1df53b6a59c7a41d530f4c1908062442c92b6389d47cab97df1f0abe7f6796c2264e7c7a79eaa647c8a4cf164c2dad40b4fe168a38b7e1e7b37e41de87be60e4b39338624bc0b790c78429c1b45833de72e34b032eec4cd1077e009f8ea195ba9abef417d66c7ec7f3d48dc437e7f8c3acf5cddf79291f8eed8d5ab8e2f90eaee0648b3e7597391aa030e53f3e7e77cc94c1a3e2ec68156b7e989d1c0ef9833f7d05ea7e05fccfa7ad528d26844f5f19977e3062cd5422dbbe69c8440c54b8c4f2fabd4e009c794ff16c9ec815f5263f38e453f3767e791ecdc6cf91bdd5f6741e143b1057c4bec38386804ed5f104fbecb5288c2efcf67c9fdf661c3c9fa4fc34aef055bfb51b660a0e45e88838a46dd3005a7f1710e53d8bad1edc18f612c3d1a7d404bdd9460a59cc5d43d59cf1797f5bff84b309c5035405f2470cee6e4b3c51f516d0b5547e842b8f214508135c2bd90dfbe8c5868ce251ebe258ae8ad062ba25df4093f26016d3b9b2ac5cbad4721b1073f475767cf692d8c978fc57fce6c3592b947fc34dbb48d8d7fa4fb13de7da8572152f99472f0e7dcd87364ea735a34f11eb021ab7bf075c4d9d4f25fb99c0eb0c85415f90a2d8cd0e63cd1cad513ea2f72bf5c9c481a85737ad5d1f02a2af8430415c04f24c09992b6bff7234e15391de9a69c8b43572b477c401da868fbb551cf0c33845010aab7abf6cc322fdb6d882b2a100337e316b9553415360b4b5f7fd1dd0e7052f091b10346dbf499889b052f74847900a55b6ca8b74927ec9cfbf459bed818906c180402050b952ff25c8e14ee88585536d350c93548782cc3cd632a538138060bb207ea55681b1a91ed8592b3df51c639b8f23b7c03bcc1231fac1a3e9775015431180b4a240bcc7c349ca976b4d5bb9b1b55fbc04b1dfb81779e078d57c7fd52345c800e2ecd2de0c6996c6f173dadfded88635a63a7757d9b60dc4eabfa3696ec2cadce271ffa190e79732f6152a01b069b29c9c68f805898deb6da23b0632feef59b0cea7bcd022f816223cdff2c30118700c8c3d0d25e0aef7961514bda71df67ffb7d811af56fa872ec9aaa1d2eb2ee2f80c03deb59ca6ddfe78a50f873ba70541f4b84f501bbd47e6f5451eaf1fbf88fd2aa61298057954ef4b77a37cfca713093e2936c8d811aff5de415cdd10e50eaacd842b851b3a5f793568f195106ccfc9f46809b70f8eca8e8eb03fec9a17cce7657ed09b940e978815cf31b872aabe7502f670f58e8b997e0b4ead8c967b14f4702cabb789654a277a8a3e48cd3b41e3d258aadf7da78a36c16c5a1e118712c59d686019699d0dcf010f1d0b4989aa5dd63c645d3eb4a30cb368b9ef81f8a14df451f38f00a14e4a714b653d7557024c8ea04acd9fd0eaf50a5fb170e0981e511ca26a031803a98ab81b06fa51d8e84cec0d26dc008f08d56198a0145996bfbf99f2ebe8e627dd2ccaa6e9a4f18948033abd5a3eaedc04c64f3c03b47400d395253b98424e26d342201eb3a2104f57718f5180b7180b7eba78fde2e7f251e22895efe1f219e2bcefb12155b47c49b8e17076249d75780a3fbc23c2973a0ba1e41b4d757ffd3b8b85f12435258bf09956d32441781d125548243d3ef1c018f8d82acdca0af9fca4a6db8cd1c9fcc75226ca8a6ac3ddce99ea81540aff0c42833026797dacf2a405ee1a3fc127712cec41ef3f73fe8a2fc4afa0932a8a9f6415f846cc2fa901f0930abf13f01f4e7f2c8971a622223d9b95e755b1895665f93bf6031e6c904715fa93eab6037221766250fe6bb0d5074f30ad21f0ea77e729690b4cf041d0c9a58a3f963fc34bc41c1f1f4f303be102ded24857f903a90b33571df8eec8299868a1e5bfda18cc7976136742b3039d8b096a6951c032a882bbd801f64e5f6f5dbfaff5d1fbf14538b7b62d3ca963daca193b53d47effbc2066030829957ac4578267a81796a721cced64b968fab4cce4798f53c25db121931ebd8384c0eed5aa1878d8269aa10f58b34010ec2ef311a4ca7a7ae40949cd9fc0abc9f7b7560540ee5f7540ae5df8fb4bf216811070e4f90a72dce046b220df986d7dbcbca80ff64c3000d8a6b0bdc2a0b55513348bc185108ce67b71a96548ed845f51dd36bf6184d114226c7776d837da28bf84a0fc1ff5178780be2eb7b82a701634a3a420fb4074e9ae0c7bdc943b503982080e06f003aa1feb45fc7e14069cc15c27687dda67f8741baaec7521d16da24f93b8d346022e5386a1aebe20a08a1b6e5c3e199ff043fa1cfcb5132592eaa406f7abec8c9b2c43a9d1f288b67d003337be18e9cec8c156015e139c9ff27043cdd444e5ae0944510c33bd9a85660e65429e967bea5dead88f26b5f9af2fa842f1ce241833bbf1ea42323be6146efef5d06b984f1106e01f46e8f4e021c4311404377426cb1d9c5aac8ef7dba235f6367ce863f961dcffa55019ffc5496869fb900343fbffa52afdf985d1c526765e1df48d04b336e76cfc6be76419137114fd3de412010089590eec417475b35acb2850f797ee2408b2854d82f83c7fdfd85a108378555116958df2a9e2a172d44621d4b0d7d6583205cc05270b38049243ad66cd4551c8906177d1a8b3da5719f17be3ae6b66dd95dce332bcddb215982cdc5a507cd51cd1e257ffc65df49698a16537444e9586dbead81d523385cc9bc5f2233925120b4f52d1dd232666632b78c8490dfbc4bf962b7cee93176ac124dd99cf554bea19df23cffa0aabaa9607a168108a80d7a195a1a1269834fbc3feac19ae82befce0bd58f110eb671b9c580c5a7cb1e6483938c7b79406633f8bb2e0854c0e69e7863a884c3a8f8fe3e570b8cd6f5dd4451cdbc14c7bdd276ddc2c11ef83188efc52734966ece0043c5f4e46cbc37f868267fc7b409b8fd8a7919b3f8c5cbd8e2e9ad8abe3fa6b6c917edd6d243fe5dba30eb595ef14e83aa78fa318d40986b136b17dfafc9df7e73d40b4eed566df789c4b597945c11f1ec562ca83dc4dbd5cc9dc968fd2d14716ec3cb58000344add5f9bb512a818f86cb62e977f3b2855cc9975e1c89740b025f3bb69a7f8100df9ee26b41bbdf155b5915063aa31a4383f9c9a6d1fa2521912d82ef5f11e1bbc0b590610394cfa72095ac71aa7c6d09b10b53f58e28839432328901c6c360c267e465c7488493e3fd35737d39e836da3c06e84562c14e43658d5f6e106e95ab68bce5005ddf4e44e243633c821a62816f51a8667eac37dadcd5df9d6e3c309a5d4da450fe999d94f008589ab3410016809f6eacecbe73dafcc77f27f67c3fd0bfed32b1ff432f1f130dbb668c7bfcc14a5c590c853c1774474fca31ab81f9b6cb883058559c6caf3b1766f907c958188a2875357b4175cb27dc1d694493d7ffd368575380631affd7646f3415d3de03fd0fc0087b992ceb22b1822dbd50dee11ceeb44ddbc643f7addaa17d6f3a92b058d0199d03e986be40dab1c7bbf78b43becfe67f4d17a45aa6d670d6d1b4fe2f89dba3741d6a8aaaa5ea444ba2495b2746d4f4dc2063da6ee3a3f5ab6b06e4d8b94375ad21c45a03139dbfa35ed089eccfea9e19518f4faac325e916de23fb752396c7705275670e685079a702afcde8337740d5fa9ffd4af0b2a824c9ad77efd2a0ebd26d3155e6929f1bcbf2f2093d5a21fbab67409f53a3b09b02f1c00c376b9d13ce3ef6fe99347f1172f5ed36ce33438e0a9b8c36a21caa75656bd3c7818768313f9dff49d1880af4abc72f691cba086171bed418f973f629d8f84b6e0fa44fc660314bd607c09afabd14d9afc67dd8a1e95b936e7fdbfdc0208aeecb68786799eca1ed670cc91ea4ea2efa8bdd4dc33cdcc512fe4689d63a001aabf1fabaec8c6b3281014efd4d7a6b253238e0696e0e32340884b30d9a434ea9b96edbbb864f9de8562a46fea062bff27f650781bb6ee1b99dee28bb90971bc07298dfe63ccca79be0bfcf07e9751111ea4f6c676600810474bc2b843129fcedc744cd1ac4421c90e92651f3e0c412eba3f2723dec3bf4dfc6d853ef4fea550116ff02852a7e1236c06a42939bfefbb7b5ff77932652d8f0a8fb7a4bd428e745f327b94b9d1ee1725b70913a1ba00268e4393847b66309490bccf4752b3d61393ba9db49f752658045125fc95cc4df701bd46f35a16191e1c861e844fa2cedea355cfb1add71be2462eae166fda21a81fc32021134537d9fff6b52c3365c1005c73657b41e8eff09c5384bdb1acf025ebd80e01dd24184a43f343ab2e0a5eb08159f1d78bf096d926a5745cb0cdf9e8a9b0e70e7b70d50033468089c8392b084a47de699899e456cd9311a786d3e4ab1b17cedcae131b09359e767968d436c33983d57df1c330ddde4b33e635cfda5d8ba169eb836574225f1f830b5931f1dedc67049628d5716fd98ee571edd2dc57b49641d8c2ef73314e265f0d4ba065888d01356d29fde7cc20a803ac71ebc5d6cce0d71a9600cb5821d6f501dbeac828db5505e6b5e765af48d1575331e09d3034f5e31f6314ba5d010b6cf42b27252e84f468900af2e40dbf0b137c402c4121a3bcb05bd069e1bb98fa5e3350f6ecfcb282cffa872106cf4253ece3d3f034ea2ad86dfd46ddf2d50a3fb82c0db9cdb28b7b2a4af7979301a69235fc5b9574bb2e76ce581c3f2c0818f8d82ad6850b81e34dbe662990fc0d6b201a649a77b82224c09fb00c79346bff5a2def3b94a4c603ea881090555e0d21811eb153e463d907fe93cea13307ceaf1af87d5eb7ab99a90fd30ff843c6efd235cc0e05b3e3e00a5fbf21ec5361d552ff088ccc0c626537ab260fea705f1e03fa0972ffb80b89f4c58b4c9bafa5ccaa7fffad46a54e28e83844ff84cfd3bb39b6cf5716358e13020005b22ac34d8ba0c08fc0a0fe173a5df693ff251a9f7d5b28c1efa51f326bc52f65069be3beaad4c8f954dd0e77ab4b0d72ca46d014511f585d25959b9e6fe17a19743dc8a12be4f0c7df2bfc68f057df1905fb79a729c6d7ff918b5f6b7ff37f60c011aff4a1505cf0c4247439dd9dae1efff011954f31f84255f31fb237ee94bfa8ec73ccd54b5399c7d940ce16ac8bb0c2e5fa0125c70eaac2e5bb193f585e1e8f9ce629d4acc4857569c299bacbfa2063c7e571fe5dd2174f8af92fb0112b2c52a66b4cf7b538f9428c660766ed33870cbf0ae30f1f2fe14586360020feb5e1d43a7dbfd0762b836c665d832538cdd52a49ae3c2ac53334e2476bc8519ff95d097caaefb78524813015132fe2633e6142186cde640daeb64bdd9a62a64278e572876ca46606f488e07c0eb11b5308439e38424633ce14290b36213ca6baf324637ddf7ac1eb55936aa7b30eb7756828d0e5455dd2e1cc2c03e735317677ea6159a13cdef813534f7497768f685934d9ceaee647a9f1bddb44557740079abd23a0f446d18f02bfa80a0fd8a89a10840ef41ad90c957f5eb8899c9aa2f062144185a54a541fad9525c86492c9913640bf810757ca540e5c7182578bcb682ef7ffc1c6d3a8ea624c52622a1f8e1ec77fb13c166190bf872861fdeb0d620ebe841bfb022ddaa5fc0115eb07d42b8156aa9fe4e739c30027429091ed2b2753bb4fe2e40f9b7c3bea852852323fba40fe5a3f8d8c0980b3534af605b7166db5bab93a5b36900ba76295135527fa74f52e3a4ef67c3fab741d8c17343455652dd5487a71d469810ca101e4b2c1ea00baae174d012fbffc8e95ff24a1849e957c0d2118a18ad1bacb602d1fa5b28e2dc869ff263fc2b3c1e792e21c152f8e9b1719eab2fef07e2e3b399e341db09f99d62d43e02c09f918ce8deae3a6429a8b5ac8978cf16164fc371b4c95367733deb68a056f2a3121eda997ef6c74743e58d0533c1de817ed572b4c046b135165eaf4a4026621eb9d400817ae06214ff4456788cdd15315c348e8d280b46097d1d4f9f3c1dfb727d6eeabe640739487891021bde9d61ef13ee32e8d4b7a2acd250f2c2e4f0c81a11153bcc9c9622c0493c4f8a6fab4b288347b715466313b249c810e79a24140b0da64f82ff7b66fd72cd45e09a0c6ec7aa3d938496a4160171d7f09590940e775be58afe902b1b09a353d91b346993a0bb10e4ba156213a8150b95f24d40fb28055df016f21ce9ca978af3a78d821f8f45f06a400a8bac6de4ee32af68d88850d002b28d22801d8a004971090403b9465b436262280228e4582375ed739d78481e2e9a1126f9f57552911476018faa496cf18b3374c005608e273b142cc94ca26d53c9fc3c3044f3eddb7cf0066739fdad9f3298d48bf30bb9f476ea6928750529388751813a2bc8bd2470c8fadb0ae63243591950ee557a329730086e834fd02634caa392240c9d98c5fc52075e85d04888c25a42e4e3cc99602d0613e135a2ef6978affa7965effb4b224a7eee46ac501a5dad53fd540858b71a6bda1f08875ba3370510398e55c8d9e21393484d87db3fa105af298159633e5eda36797ac0bd8c38c059e0c74223bfd8f9ff7aa3730c93cdf0c5bdcea27efc25f3f7a3e69adb9705eea3c5b6e1234a40329996f397ce6eb0f8887f82ec87ad4946e4d6e1af8f3c651d98074b811a4103b9e385a49877081a2021a20b0eda8f92428b7f312a4d051d44ace59b82a3644adb0f328493b42bb66123288e38c053c619806415ca607129602afd90bd059fcc4759ac754fc1b75dbcc0212c622834c26dd4036ba2dfa14dd6376c21ff87179ff286202a998cf9398d541307020d6176ff7d60c46fb84d05b3470edb25002652c8ea0710b193074a3e215ffbe175b7b90cb6e020a6beb5ca293c55b81d26ef619d801d4ff082c387e8a7c9497fe6bbecd4068e89edbf5f99f51470c05941f3516ab4427b89235ab4f84e0220f577212a8fe4bc19423dc45a5ad51d72782b07d6514d25f4dc3cbffced0655b6331a3f3305d84c438d2bbfa8eef51d98c40e46c71597aebfc33e6a2f307d7a9a3f6beaec5ce453ef87429ebba3ca5b4c93fdbf7786bcae33a7c7b4a3c57ec3cc154a15f2f16a0997adb0ecf9188748a0e60580ba65b4ab6b61a826a9cbe867dd96e3a108603dc4be60796961d196b0f6cec6cd0e6b25d7475737ac728f2897b35c56677016704433558e04fd6fc272ecdd16f5cc589cbc4b3acbe3feab72ea2f1cdbb2667d0be61a437983f93809d0f2f7363ff34ca8fd8f002cbb0d1536126f54894676b41736c83764b2ebf32009651b347b3ef57c80fe2fa62e91e070b7cee7fe1a5f82971f9fa9528cf1714fc5244058db2880e41e12c7a2d7f3ba9e57810127dcc3e110de4a93e99dad758ae1bfecaf86bff335e85cc31f7dc5d6459bed7ddd99fc6d496c57ce2e126e2ca98922d3e8d0d3112ead7301fe6455fc840093699d0608d126ed9ea38fd4106363cc7593d2a6ec8a3bd458719fec8bfd1f60b3a4dfa2bf450cf0f6c47b51f0c931358859f59ee03b702d39505d6e84b199f152d1b23d988fb1a612fc236fc2b15d152e348541957e3d1d57f306c556b3f27da969218898ffb11338736441f3440e22ba8cd7f62255075f6b13b44e804eee6b902219a91ac1f11ca5eaf0ff194dbcd812f5e0c06d41bc5e796676979d11d60a5a576b36c945b7ef248a08df84ba4e31b0e2017dc917582196d01fe1a0a07c799d0da32f8606a2f7a0985821e646c26fa56bc513b9d076466038fd1d69cfb1c8631917fe4759776690f19fb4676fee2d211ee5a96acb8d027f4050ccd080965704f05ee77a8d2d9b3a66619c1ad8bc35e07404577dffb6a09ee401d06181144bf3f6705f21ee365052ef0364937845c537b52772b0e351dee28ff01e588a507f466024876d91d0b6c90c6715689b1cfc3a9e90de94d8ee8a2a134fec33effc4f06b1000678263b18d9fae469bf3c8539bc49f0fed06ad32013b7d8ab6d182bae5f018ba103c23ba86e3821f7f5eaa197b2eff5e13518aabb2a8cf7bf4ad85ec72ef099983f230ff2370f72fbd8284853ede783764dd76a28e9d81a382d4745f1380d41dbd9ff4f1fa00c413dceeed920e46eb27ee0a3fca7ce08d8ee5b185bb764b09a4fcb628a0cfe0998eeacd9c98118cfac48a66d1c8016997d1943dd13d1f90b58fb4f90e31bff21a684f48910ba393943d1d30def38f9ea23e7c4cd7e1efb4500e399e8e70c351cea0464381695b4bbe1fa0b5017569ac2cd500f6b5367815d9216edb0302a97d3511cec072248084bcc55280a2baee93c13fd9f74a4230c9cac2dab28c1fd6296b20727d1aed93c40d62ec1edeacd3b53fa98482b36a205233ab15d063dcc95492a9c854e37c3b9b40766fb32e97870dcac8882385fa24c0ae335286747bb83453a22e6ea6d594d91ff5c629e3a087622a23b46654dcbd23fc121508faa9025dc293087a8905ad99797c5c9435754e75e7e12d019a40e96a10820a881ae55638884a5c7b9837aab4f99a12cb4dc4679c5278e9c4dd150f9ffbb2b805b269adde2c3984a7831144511aa19d42dfa6d669271e8c9fab464034ff68a0c4c9d059bd42c0727bf670276e62bd27a934ca586d479a742c9820642c2af23ac70c2daec3ac8654d1380bcf0f2180c93cbad01bb64757fdee43f0604067319a8b06c75b5d8ce9e363bb012bc7d6e3ad62ae07e34cdb8871e0feba4b8e3cf5b608b19515b088cf24a205eca5dc27d9a5376410c568eb7a8a05098c1b484f07cee4e7d2d6c1408c3ecbe2899ffa00cf7a3976dc440a6fc9320952843118055e6ebeea9f452584cf5bbcb2f148d348c0518f5bf9469ab40af560cb9e19f3380261aac9331d34bfea64fb229376dba9599f858ea917efabdb3eefcb93f3ba1a7075934dd69f1cea1aebafee2ab8581953735893bbf38f8062a639504fbf16cfc6a100b45f0580cd82e1b9995d9f5ce09ec6279fb2dfc74c9b23b7c1a4232929f8fadc32943706bfee13a50904cc26344edfe56a4b6fb589ce5f5641334242f48ab93eb4cb619a8d112ac93bcb3dee06f167d8166d4c1e5e94ba6768960085618fbd10dea20579278c3a47da16c392dca4fdba2643e80edc8b06f19cd1c9d9bbd266b55aeafdbcb077ddd197be69fb9dc9abab2ca5e78fd647e0b7dbe8e46d76cbc8e0dfc2e0005ec51a889ae050f7fdafd033ae6afabf7fbeb6c5ab4aaf71180a8e974d50611c197516cc347e5e3801c83d7d47fa885fafedd38d326415a99b963e03f0d18b79fa4094451c806d5924bedf389250c7567762495dda015634a3e98f31f72485e1c2059ce2bc6f26f49f98be13a3acb86abaaf238d9346de0e0f41170ed12760a9c8c2e85159e83c4a2060110d019923f3e592f7da8b88d63ae21388ed93ff3b9d644f7fb157bf734a2d96dc4a38ca0b999d5f43b5efadb317dd757c8b5c7e802a1f6327b6fdc77ae4f120b5752095e90e05c1ced7c6d5d40b347005980be83130548352cc4aa638570e8ee854c508708ce4699c614c8990268e8e6c817ec4fe319898591d450e7af2dc55f018844780b6bd81e7518b44e786c451c238952c51018f83fe25b91181dda13039e78618691a68685ff71a56fb53746e2a43262b41baa03e0763a72c746ad44a50a7e26d77a3386e86769e887df4d9ac8a66c087f75e61945c851dd5afccd718aba0d77ff0f05ed258527f7891923d9f9f70d540cec1e95d79bbe4344a0a9934e05a0d594cdcb837e1a2f4f23efd4153ad40cde69294c09fa350fa1e308cd817db9438c9c76f6cbd9ef9fbc57174bf049b8990c8f6dea8e7fb5dffbf4f910ee9df2e10e86c0c060fc55a5b787f92a4ed28d5de1589a95f3dcf0ed4206f1ac108d51c590ec4c34c04e8ea6b4997e83ff8583d9359dced43d5745c1019f329eb3be4429dcd78e33350a06dc03d97b46e6bf2364f9fb1e2a08dccf9ad0b7ad186bf46cb96e13944f15e91dbb8716cd2c8cb70b8e75d9dc60222f1852fe23f2b7adf4424a7c88e2c1afda46eff705d614381ead694ddac63e229899a237c0d2e9a73263c050110d8744ea4e14243254a0a945c3f27d4da7b81586e29e6e1e9cce5844f5fa4254f47d2348c881bd94ff79ddae25b3fe45e754b5e71c5c698fb1108426016eddb8b8f109ef6be25db604cc96e94fbfc371dd8bb19b0616ee8e77b354ac2f752288ee981e07e093021de1c805ebffba5fc05a51e52d449d456f315ebe604e0ddcbdc02c65a449bff254d0c26787a9b0e7cd5b34e309475711e451771d7f4719c9e0506435f6ef90f2eb311b0462644ef831c3cbdf6ec6ec8a605ab37864cb5230c0dbf5521169c22d24dcabaae1516b6da1157975f84dfbed3e54e9fc61dfd7f64f0f0c6abb0d946b998f1346d63a9f6188d31cc267ec93661ad94fbf6383aef5fccb4b61f0d8fc1a96f3e82109651b3ec6421c00eef85c6d853ca5dc3fe57b7b3b02a1ea235ac92e681416fd4b9182dd4ee7f01f70f53f7626c3503a1e2736f14d2ff411f81cf961579a31a16d9bff2abf74033243d010b797e6d7e36824ea419eee89eb6c4a98c0b8e5a94a2f2d2349026f7ea26aefe44660f1065ce8cdfa54c003e788c304d285c5c4503e12e44058abf8b7986d9b73f41ed5fa5f15cbb948fcf799775a38c2d5505a142c80e4ebe7959c0d0a4eb1eb53168141de58aa0a1f4eab01daa40f371123f82e5f06f0bba6af4b9a31177c4948308ade5013803e6ae01f071eb88d7dabbad1d49770dd3182eac0fced24f95b042028b44b759bfee56958fd1faaa8d1f9d5bb05adbad5dde9e156ed4aa99a0814d103813fabc691b7943538d4a044bb974f02f160c8e766d62994821864ecd0d5e9f901697083b527c8330a09ff8464f7e7085c5062fe66ee065a7f17e0de8f46a04940e1d23ee1f28e090f716b1144a7b0044b9b22393f3b5fde27c4874403043e1e491881d5775f0ba406dcd3b246ba39dffb6dd8fe62e6bd9e4a5d4ab8604c9344e1d1c64804c0b2b94ac2b624cebb278e834f1413748bfa28a3608299756921976203d2a2e500685418461b7d17663255ee6b3ea12db5395d257b50e060ecb5a97be17b9df1d045c1807b9a9e861c0ee988f4a84ae65ae644e3ef03a849d5f740a877f393a17fe1299401b3f958f794f0ca53fe95f5d96f90ba1b8c631df096a49ae716045f02780c32f91223284d80af8af351c81a7f8d0dd671cc20dbaa33db5be6e2ed5d1ddbfaa700f89335144613a6b8f506cc4761e1ad30fd3facb854129ea7748fb4da7e32e19ecaa6768f49dd9a58c0e1fc525f4304feb49f475544931b960739556aff75d0b4e440161e12a2e0504cfc1744cfd735dce76c9b3a031087d193810e85576c6e3fa9fbd5cfaaca7c551fa8bf17e805f2412d49cd6e98dd59a0cef50904445a737409ada3590406e6ee21649334f884dee8f98ac7d78fb1a955f86651b76f522cf6bbc73a76a78c2438e0161f8d52cb31c6abe79698ad7a1f500862f9dcdf8e4c8cf75df25459ef3c1f2343a3ab1901bc46d22c654effbe99d083f402820181402010088917fa82c4198dde3ea773ed8a01cffdcd36206bad8e4dda12daa31611a72648a11490c228189db50dc49ac250d425581fa2ff263bd0fdf32d604843f7816197738c4244b53cfafbd9b620a2e885c286515fa8362f2ba321dc0c4874ec74709bca3b18f60c7cb2dd009c4599b35ef6b8aecffffc7da741e78f5403f805f433697e398d4b551a9b26d464ffdab4621b84e387173daa39738f95cd81029c8ed1d749b06f3bf826ccd70a2605af88693d1ff3a375a98e3f33e0120a74c880e0a06ff1562b8946d79a1925b3f40ee1b25edf9496b0a97723f6974f33965fa701c94d0e7d63aaf78ff052c5cfd7446e228389d451a3d0d10c6de4ed0e4be1b9b68808e0abe580ea5107c1a067e77def74dfb1d011fcccaf6fb53119df76d31f9d3f478644444444444444e401fc67b5db9e5b00dfe05df6619f12c9ea4f2a68d8610a2c3d57af9229eaff042a3bcb7c65bd19bc810b3ac80efc51308601422de680777248ece6e09985c5f76b4d9c5da2920c2d43a0bb31b8aedc14e9ffcde2060373f3db2c33d62fed5fda7ca273db21743245c86640952052a25deffef508974b8ffa70c3b0874bf88323b7de41d4f77ade3ee10a74e0a6d949b2b3c2b2243fbb6c7fa5779454354c30ec872fa51b1c8efa2b6dd06d6e44444484815e9f33b0c62fb006143db03a2fb09ae0e84fc716f66d5d1de4f6732d0cd00de994302e905863cd08aa565683067d6615ff8eaf9ec2beada704a2efa56056c1f8377cfa3f6849c4df84fcba1741212e0f2ad72f7dda0f4b725efbbc4aa46c7e0a0968ebbac78ef9015d2bcdb01d357513bd2695ae4611e2fb9d9e2cef8edac38b387e1074e97f2cd06b1ab567839c2f412c5f5497530ed53b1e63940d63c961766fa34cc8da7148ddd7b387aa70c6468531950148a15a2b024e4d10472913b13ae108863c713c76c330f778cc1a52a0656c1f90ddce4b738b14089e257ec71821c447e173d152849dace8ce669660078a03c0129e40ebd031dba8436637cce7837a6fa9f7d719e6bd34b5853a7a6e5439cf16e19810bee06dabfc05506694935dbdb475cc87467d6d13df5bcddd41fc1461f5b4e40482358119e052f7a187dbb656d0425b5712348b8e6861d48cedf9d6fedc6023775d0a3cfc1f46de63853b219d461f6ea7d771ffa1b1ef28d95f59000292aef9decbc5b79f56fc5daa230f9732a4d6928f5c7a76aae390f8c587db6cd536cecf556fb26a7ac43c2cac5239ad420e741a5089ec646199d9cb48308455e5e0df68dfba87c040f8c78f892b9524e5e21d0c2ecfcd3f6be3667f16f92f8c4b30f394d8c9b5eb5f002bdd668263277c06b193d2fd72138d0efd934d3fd7a8fc0cf2e1ccaf1f9cf2553dc85aa5f2adff3403c6ee9e817584004dff84d69ac61f67d823c4b8eafe408eb06b8db75780d3c104371b0a6734696984898d38f32f1f051a18b76665a96f7d58b041da320abc9706b10006ba9683478b24ec1f185293fd3918714b6c39e858f4a3b7b9b3f0e4b2835ffd0500aa1726faa59af4ca9b486b0afc7e6cd04635976d03397b48c5eb75c95d88823f6f1dec0714f202fb5a22a804343fda8a1d36e6476d4cd8745eb427e5f7ad92920cd7c61af5e512daf182e3ffc99d130f333bfebe20439f6e63808a074ce1f7502e272c2dff656f4c8350cba8453e9696faadc70250303ee9659976c7ceb7e26cfe0346847d65a75dd448d3801de311c6946200e87b8e1832e7818d4db19ea022d63c9481c92a7be146b04aa373df84237cb9fbc47aaebe7fadcf8ec96e89353a6f42f050890be2e24bd4244311801d8a8a06fdedd7242959e9bf1f35bfc23c3a0deb136766bf8e769351c8f3a03f018e51a837355f6d511e7fa185fe8a899e16fe021dc15cc70f78a79731a567c9e8438a73f7f13d0b441613213f1053c4d59a760fbf75b18d597397ea082517cb703ee034b8ebcc491bf88b6207d043c9a6d31c93e7c608c0321dd4f9a282ff7c05147f86906ee32cf9498e8dcfe2f381f186bec0b847798ac7205f6250bc136082a68defac881e18a894758f392af05513437a5940faced4e0be2de08cc07a145c5e3fd8ceedaf2ae7c4dea7f894d473da3f6cf66affca11f893dca6cb1a93dc09c40cf5a0428ee82eedcc7b6723864f07be05e276e4ce7b458e0ee83b842628fbf78f840249be6b157c7592a581e9b2bb59ac7970d5682a7d262fa609e47813e1d9349dffb7ac10fee3640821748a7594874054db789f681b8f048a2707f7f02c74735cf7e1490c3aa7302ea4c09ef06ea4e3af1ed325b501f9ea5c9ba731717cbe255e3418d3f30876041300141b7ab3fe22ff5101b391b1f51377b091d61da40d47407828b920b480d6c8d583651bc5ff0c301ea12f18b7d1e8ed74390ff5832498adbba81831c1d4747e92b0894d98d2a76c21a62f69ddf41f878fecf088886315f4fa1e835ecf63644e17660e372a98616233033df03f6d9d41ab3c995331508ce811b0b9204d6104820a2f4882b969ffb7b6f2bc803981625b4b2b940f7a67f7a68da4902f3656c6cb331a5d02e79d0351e219f92e09c180937f854f8dd87d50b816d6eafc56d9cd7fe7eea21d5617c4ca0339d8f8275f12c0b39d07cdb9c6e5b29ebefaaca0bfb9422bf277cb13ed5c9c11c719bb1a7b723d5063e5899e58ddcadf5187fc83cbe389f5089fba13cde43e9f9c27d8ddae36ff00f81e34616a96640d2d960e3ef11e0cde4624f8e185d3dc7dbc8ba2e5eca0ca0b0b3c8ccbf7591bcde4ef2080dfb6b596c5be1b9010d7f5f27badaa732846c2e42f00756e36671e377c5b0aa6be2df585111caf7010298de7038b88937f715851c95f01567a78aa0474e754535144ef0503d285a0aeacc91e1fed77084ed711dce06b21f0c1adf632ea4c4014c97d6b9c4bc5e7f1a33eb894c40eca2be8a2e6e187e549131191f4ffff1e12acf302d604f6607fbeb96e067eb1e6019809c9bedaca6add0192fb051fef1620325b36732c80b8f62a6294f90922b2f3fdc5f6e7bb6fee8cac4f6775102aaba857530eacaf3fc0d4475b4bb3e567a426658d986d431e6bd6245051631c657b712fc58f8db6570e549f343f3d0ee431663b24e39bdcd787afb1f7c2f9231e2dfc633491642474d500e26b76a224d533f129ce0f7f18a3c06ecd24297b94e7f442ffe2ad9e1e5d4e8903ae1b736f70f17b356f8a9f9fdfd4e372d672466f66c1cc3f58e595d66d1afaa380e9bc1c680ae146ac150cc1da85441dd4a4c44db5dcc024ada337e74d6b209f0f78b7d288f6eed6b6a449f7969eac99ba8419a73a29cca649b2ffce2c6e594eee0e84b4ef8de049d92adf7efed94275d39a4fed543f994fe15cc77c6cfa0bf49dcf09e8aa4b3b23932bcfa19550e87a3799ce6ed1f963194675e62f5773b14436c8221f11710c3e6f64ec17640c8a1e649417644470b4efd7939c975302fbfffc7ce81f045d356a20e1f2492ec6f897817b7505825961af15013df796206cbf3202e1171518992934997cfa2c896b4029725e0216cca3e900bb0a41c8a1c8c1ca910890a0a8c04800a03ffbd217c47727783d474ac16b2e26b2afe7afe5f82a74af3dd1277e06c37d4be47889820037c0eb7f367a079fff30c76729a0e3e70159e00b96fd2e7efb4f4e55535518435196eb83b776ad2e8d018fdf462f005c80b20c9a57cba768c8eef877f430377c0a8baa3d81e1229f3c98fb31bae4c188e7a21c09198b898aaba3cdcc3346ff5c3af57dab863edf67eb1025b88fc1d4344dba3410d1c8a3a828d5d135cd6953ce2b057d1dd86e1ec27a8194ece19de6c32c8ba697e02c94d03b0f8c0ca18be254e6d3158c2f130134dfc57105dd54f050c31e4be3b2ff4316a07bf85364b984d42739109fdb2713c5aab52864d433fa86a3f522e19b7716f48b0d544c4cc2b7179210075d5777e0555e2e8240f6ae5eb6aeee3eb6d20e968e6e8a3604766e2e8e565e965e817ab65ede8eee6e60776b77371f2f4b6b1f491b1b2f5b6f6f9d2f7ae7c1d5daddcdced1cbd5d2c7d1ddcd1bc7c1cac5ddda59cdd7d5912380d39283cbc6aad3d6165fc0ff7282cfa0e8590ad8dcb81c8b40a57dd55e80f1ba1592742dc8080abbdf5c19d8287e78f7d52ab6058e5dc37ac0c11874828b12c1206ca9e0714463c3270ee0fa9fb7aecda34a8e39baa7bf472320f09ecdf95b15b9b006c23b2fcded2b89baa1fadb9908e4980b6ec65a8445b2d0c5c240ef3fb2e002f48c4a021e56322f90732eff624b32c989e35c93e5f8e2ec379bddc0c6255bd14da58073c75f7fbf1fc16d95011692de47f48fe7352accccfea335058309f42a2d1c5f935e7f549d84e3cca8268237c268270657e8a61fdef1d63e2f56864680f9619d03a3656c9b0e5905efd6f551636491040b2ce888b0b5f906b45f3e76ff5398b715f673c295d2c8c9a98ac86293eb3a0369890009cdb77bac00d6dd8363c0a5787db2ec9e16493b2030b7d162c22f0cdbb06399f901a100aee4677415c3561d13365030934c95af759766b42e4626d823e70254937fa6f9c5ac2da9b1e52620fe7f6077530041f9b43a35c726182ec4070a4daae515967729e1745e03316294f58ea61729edad7840112d05d7711ac543551fd40d183e1fa6b0dbe18949fca4eca1a9fd26c611b30187fe526ddb9fd623a2ef10b3ef51345a1a9adca4ada6f736487ec087ad717797572d74c656169ea33cac6e0848159e57949d4a3697aef3a0fda21313958fd112898d47121611ceddfe2ff6083b2fb721f5fd895c851916dd6c87c4b35a1cf04ff29f6dc0b93642274e90048f6eb607e9eb05dd5718ec6cdb1b0f0e719f2d93d56d39a877ac6681ff856ea5293dd8a82daa9ca90f86f24d63e7ddb15454dde3d9b4a672a9e27193eb79b8ad1d3bdca1440e8f64013a1fdc98359629dbdfabe41fdfc9889fe59a6659d600d33844ad452a51ce41e2d6fbe7c64ec9af28c6fffa2ea9bdd3e0e05d7ec6211e5af89737a1e5bc51951203a8dec3454dd9cb01a7eb9cdaeefccb2e0d912973c313af6de3a4baa8bcb9e392c7d6e33c872280bf79d4aebee2260704073f7fdd869a7bda301a6668dedacce7ddf951eee0799400745a710c90bf229780fbcf02a9f4a8d9426ed6ef91d67e95c6a2b8ba157175cce42abc5e30b3fbb5a29a09440b2aa38dcf0219dcfdd8eadf22cfd58b17d596bd6ea2bf596dd6ca141791ca4278b1bba77e8f22f9192331605761ff3679c8fbb5ebe1c4ffe660a15fb14166a621fdc4bac2d9dc1dead97e5de1f8e3699e5e4362fda7cbd270817ed66a84bffcb429c5db105eba505fbdd366a83108c08ad5a18b1c7f4fbebbc1067daf4bc6bedf5cd324536aef5059d5b15d093ef1cf0fa311003ec38fd26272ce0545643bee7de6a5c66f90409865b46ee1da83344458e2b6fef7719ead9e3de44fe86deaa6abf1cc215a2e7fd89d1396ebd79f0bbbdda97824c12fa3f5e8d48b05686847e397c46cb1630c211f05fae562565bcb133a750f23fec028e5a3ef98bce3f5599603e3ca4faa9b9d45840bd1fab4f74b8b5c5d7035a98f7f6f0bf4dd2440a10fd957851613b45f3e26c237ff7f71fee507173e59a106b1845bb522b6b9215929bc4ba36c64bdfcb38d06806509b955399354a8981efedfc07383b27581a9f5322e65510ffa0ee81dd617df1ef831ff2d8714d5742448ddc121969a042a144714bcc64dfe5b68104d3622dfcdaf184bc9fcc62d85aa3eb014a0dfc2998652335b993e1cd13233adcd13a9bf87a61ac0c0893f424904b7f26ca966420b679590a453ee4b7626456dfa3371d188faaffb5a40a1c58324909d7b199f14a53b38d367f9472237d978b5d8994abc28013544a884cce0740a3750934bc85e0c7e1eed8922511ed664dd90c135787f61c04f20791a973ffe8ade596988b034abbcdb5d3d148b208de28f50888ee5f438d1d0cf12696c30806562d8e891f6a4f9d3e6a62a97729a6cddec777ba2e41730ce953c5ecc79f81f5642fe9d608e2742b969a2deaf6dbdbe364800c7cd39cd2b83406dbe929ac4f9ee4fe0649d824ae78b13d6ab018bba01af04f98c7306a6a433a58f62aea8b611019088e81d680fa7c7b050f8c18adacee37fedffc1e61a77c25d226a64879818020324fa677b8b29d1af0fa116b2c3c63cb59a691e26ffd6597efef9c70b11a03816005891aa72a2ba2bb93272031a18f95de614b8e17ecdf384ff292b0875cd9fcb3a452538f85e5ed56fe65bc2218b89989b837986f82fab16c5af941527eabce7325c179f4bd3098af27ed9a40f5feeedca43f3d4f0c1ac91f185544864c7e43ad6638244005444ec2477e7b9dfbfc97357186f0ade1501276916cd8a241d188a94450bc9f8806c73917ee3f9e4b229a7dc2c2fc1d9be5ead9b010de736aa00db9a2abad48b760f3408ecb8b0abc2e90bb81360c38d9e5c4cdcb7dc4953d4cf180152e470bea2f108edd2d86dad6f2bafd2b09a442639f2351a988daec2f9468f530aff5979040d8ef084cd1de1730b1c20194af50bc1cbfafa847ce70e7614b5d77ea07669ae1075404e5a3d9ce240e0bfe30f382275e8100b606050ba070ff21c9d94a519c2fe289cb099b56718caebc8af797b5b1df70f25f827a0f06b54627f2276e2ee9f30a59ed6040173074d3a7b10a788d6c45d9e38e55c3c78bd6e1018e309f64e8a12abbae0e6d4f5772657f29bb85bde9ce8f07f6d06fe5b02ece78fe506adbf0b88f26d787d3bd7b0b5e7eda9ccacc2ff37bf972d36f28dcdddd40f4aa2b5f10ce8db036e9325e36e05e50a0616cb1c197b74b6ee78cad195e860e788d7b97e98455b4df83b085f82a06457b320158eebf926a85b26d42589b18015af450aeed3b6189dbaacd2ab4f8b92d9a16a6f41c09cd5e61f67c3c9f15a1b4042e514313dec191ec9d79e718d6125bcd1afa7b064d3ccebf3961b49580dfa500fc4b5371f9b6c6a5648fe0bcea1d8fc9813b092f89fff4f0ae6b2d38ad10bdf29aec88d63145eed59672680500310e21d675789407ae3e6d860cbf1e3a7cc8811e398739ca535952c47f27a04bd355f8151a2d48ed0043ca27d9bac2e05c7014ef95fb207880d24e4be450bea998af14af977251b760c2e30d90eb89767e51da91d80ddce7a3e8541bd7fc46840eb1a2d8a4551c2b0b0d832329df122f1d8bd395508fc614e0ab66efbf0371a596ce2f7ca1ffadb1c69af9696ecbc4d25fcb5a10f9dc58e5183b202c4cb4721732fd9e65f1f23fd6aa69aa4d255003547ecf0baa5c6aa6538698ccef2bd5b81d4f340f58210653984dc083955f497a86df598f73c49b8fa71fed24ae5c1cb7dd27cca3f0ffa3f07fd0c76d82d75aef1c14c33bcb31973633d99ca956badfe51ad1f250f38a1266038d5a9ac2c956e26117bf78b47f4126adcc725e0407fec7dc341281a23bf35a3baa49ffa86449807c94f85097fbab05f8ae2079ee62413957a735959469cc0f4e9ce96237e1300199597ab374ffb71d444b69359c9c36cd427ba0fbfe3e01bb85ff363a5a0f0ad1e78437cf06e7404be1b789145c734da157367029c89e3d264bf2622d43b5fcc7f7b1d2a2fd6463461bd47145e08dfb372fc338e683d71955bd9af649487cdae9fe3bb9f973d73a6ee77a52bb159a785f2ad9d3e914283df4a59a786583bd19299af14268be1827eaad37fb3a42b7b37b2072078d11e7a59c4071cf2aa2afc0e41c7c7161354181558e9912edf283ddf0033b2676e7e64e121b27c30bc74a53c6d18c60118e0e64cfeaef17d6327d88721affa78fae866e84867a06f85ea954be05c2310a00224bb52fe8221628e24fdb0c96c177f08ceb104e3912379ed68e1a713637faffbb1ffa2b704f14add2c18f643ed396a8a9339859f7006c62f0545c268e22b283db502c2395785dbd758eebc7d6fb9a5e7d7e8ed1246fc7f8efc32ee1550288b903775ce2315583d4efe5c29f812637f6a03a070b9db071c35a61ac439fcea7c343d6aa573b97315534ac7c138b49a239e5d205755e02f4249a05f467df289c1eef7cf48a60a78de42d8b36f4d7dfbdc80751a82aa3d68d6c06aa2398748740406ec3b8426b0aac0eff73c7a13374fcdb78b232adfb7e63ad71b34b2b0288ef4955a42f8176a1c1e4fc01cfe270fd130ec9dc6f6467336c3dbd240c6a28ae8f42d10767fb14f91f824590171120b8cae1817a30dafbc53d4a36e522b0da9cedd696dc687926373ee8a260d6968af017ad282dfbf25b61d7dab220d53714c4e741c9a61a470ed0e609a7ff4841123b8ef81d9036f5afc73a02e2460bc15d88efe444392018f24e93712f80af642eb5743b9b4db1812c7fe7c932327cbbf219b83448e1a7e0130b6770fe294b82f9b9ed8fde7d32f4c1cf3c808ddebc658db0d32c0e30b01c64204700efce1b969db5f831b3c4fd0f8065f2e4feb91d845ffeff299e3b3b2e4082804b08a9c105657e3a85da14cbf7d374119689af2249fd4acdc9de11acf479425e504cf04df5220e9549d18f70d59fb8fca8fb933bac708923897210fae76d41b0566f7cb9073c86953605396ddad89a6dd1b886b88bbfe10ae63452aaff1a98a643ae4421cd9694dfc074c1c34e677f61c02b4619ac4846fa890e93727e0573c8e70ea36579cf5e5867080904c696665d6df5231a0e6f07b4ae4d62ff53f9b5b99067d4ed6bdfffa13f9fb1ef90f175e1882c72d361e7c570bc961d1c853b75344f91f1def907dbbb8a654d12d16df6a8b0e3ca0a3107336d1b9ef5769f851878a088d0b3b07f0b1f20536ae33504b141605d3f6c7f1e28fe41acb87ea0a0092b28423fc577ff43252ee59d036e63c050c8a2d89ebaec3ba83f4e452c7c735ccc45aec6eda96ef1f7277880526520daae9211d7e3db6fec8f1cff4213d3fef0ac2b6b35f3b36db03a59ab675000842cf44d647014bb707a42d6723d1d3c8b73e829a9d0415ca26501f965d968999f882bc4e8172e05d88ea9b4732661366089f8ea5b0206263fcc1499c1dd0d96a054651e0b10bcd5553e933fbcbeef6e52caf12bea27caaaa9129ac96f4918d3d614995ffa0f27de2a7293461cb45899f5539aea39af6dda26cc3b5474b0dd761edfb4ec860a7006c4cf7686d8b5778bf261e2c35312707cbaecf396ef8fc24bbdc5b3723589734645266286f361f772c09f597e5ccf86ea4ccab746fc58bcda9b0f558285e26d7beebdcf171b1a42824e16c83a6fc86f2242dfcf624bcd58f8c1c790e8afbc7d96511b74ec20d47889a30a63d2e3c0044801bfbe900b7f6b7f4bc9d43e2b260f1e7184375e49c3f4b81b61aa050e4627c741c6de80b8e7a1474f6aaf3e23e4571c949addae890e7100a37630d5b3e66d9ec8d1412958ee8c13e21f908cc2fd6855fbee39ff5ac0c831792daa559e004e0117515a201cab1da286c1b1496782f46a7af821021d77329a8cfb9758a5681eff92a8697adb5a4a59fad1eb79c8a96ad87e58cd1810a40829a1584ac2305c98f405d60d629d86405906dc0d229b0b6180021a8d591da039730b7cc6063041b9f19610b4908b9d2a030107c0c05af47c8d6b1cc7323763f6e8bdba2ac3431bfd8b5e205efc3a1eaa0bbf6d02702bf46c49d7bbfb8ddf8f57d1fa940ecaf950d0c01e44f88a05357a23be0348609b20f20030b5bc641eb0809994e808ed5a805fcf91cc2f87c827a1dae8df67f46a67331985b48be200b6c9b208569a6d30162e2b6e39b43c6d6ce51dbd2cfd66b41044d6658a6aa3dffc4623d4820a87d957e6da4ec32485a72b402ddf5354bf9d60cbd7e89ee3bea828fd9a480eec224cd67f387e9bdc839dbf6e5fc1aea86debb0c46291cd185b81787d87f1dd838627d72a92e8704f11fa8012ac31297996d565b5c91f6105efa061d2308595d423e83ee4b1ac31abf98df8b27905d6a56a3fc40ed1f61b375223b20032d7fe89a8403c8fa6487e1dddfa324a177372e2e993edb8761f421cd5ba8c711ab6f3d96ee5a0f7d09850622d3ea7026745e2b35be835864845e958aaf718b349ce788b060e94948c0b21c056b25b518d57b760e3b0e64100ee12020597a1ea72c18faf26242f4af761a8c98d3450d1345e0ea8a67120f50d0a3c7fc4cabbc6a32c3b35cb2c90690be25eed391e821b4bb0b1d2ab277906a98b59672ff5db00c59fccf14695c37da1d0dca4c9c423299665799cdf4e0f530d887e03fca8685cdf4d68f89d7e5fc3784479670cf57c6ffd76ef5c3c53f084a2e60f651f79ac835e13c30947130f69fea20903e902f2c8866b1a5b49f0d4571fcbe27ae4a367b8553848958880068b578b1d1106fbe3abd50fe583d71086c28c8b142ada0de99ade6428c1f5ebf006c48261b68f71a97107785f211984c73d02a92ef431d3d680ddc9c8d113e4d7ac22b97bde591397e70d443692565284f04a79c0d75693bdd133dc794b2d15c52c39df1a5a973999946bfdb61479fd12fa4d46c41cca4f029ea0df9913e29ffbcce4052d1874b9f985f451094dc880979cc9c8311ea34baf57500ad81e7dfc33be4d7c404712fe3f6dd3d0a8223b2074abfaad6fb597e1e76a98663bebad61a7d68f144d7fe0111d2f5ecd845c4df1cc6611a61ad840372a98fa4675db4a07fe5dd15a934fcdb8880fc50af9e472c87f12ba6cc8a657ac7fcfbef420e4dee7f928f2b4317837b6c7d3db0fc6fa6e618ef697d43395b01cf0a9fb164f5e2a11241f2859eff1698ded3d194506cba489986f9c18117755b89d8395c0d06c50fde7619142972a54e5d08557e7dd58a70de1936d2341e1f95f7959f102b2907c9d73f11544a26e12a330a7e5180282a12f152f107fd6fdcc391173deaa6d0ba42a397663607b1740f8d15ce5c4172c13897bd80d1570122e2653c9423c61c5b56faa1277acf0513bfff12687b96ed70f5aef911dde5998ebad544025dafe33043f1b6be098baac331edc7f754d613a91f3336e28154436060a8e1e29cb5ae9ae8155f5ae5a9e203fb5873e8ef5725642b48ce6682ad8c6d3040093b7f4a29c1506b3b8b5eb9170a4bc9c590d96eff48df20844bd3f1f4677089cf0c46170a7981d1882a6f61cf849833d7f4a16fde881e48864f2273904dd24805554060dfcc63bb7bd8baa95bdb5aba653e4c88c30bd038202b9400f83896a0946310727fe27460776c8b653e4c39a0b1fe88db6a6499ff029f0e910005414277fd46937fa3bd5664759ec60d4a4e28f014d2639a657e74d13b56872200ead8c1fda03fbe62577471de185e2ac21e33ee8265d38ae75e2c6197323c795b808d4116c283e2963059284d4f17b2bca27dc49a6178c8afa0edd950a6af9d5451e5b991f3b712962a84fcd591e6cbfe9953f25abe1e15c797b9de3404ea815607eedd2fb3e1e1cda92bd23bcf88ff5679c76ddaaac24a8e8fa6a1bbdc99e2dc6f06b2da1868d656a6afd0b144a7b304342aa2f43a183849b37f5cde43011760f09f6990171064160489cc9dfd9f0d3105818f6a3e1500f81eaa40f1ab790196eeed382f83b74c76fadc9154b584d2e59fb821b32d5120fc96b9f1049a5bb4de0cdcb1f41ecc91d9ac53d57f379f0b4e6b5336a03c1b3eb115439d3b35fb1e2459a35de1b4c70f45d31972cce7ecba36c1ad95f15dd57f37e085d92e15adcd19bccf1e309a4faa5cd5e3e8600d49accad275f0c67c91457fe99e3271a7951ac3015a5abc6a3da7a29af42229ae66c35d2f0ac5fff3d2e9c0f5e713435583784218cfeacb1392c8f5e270bbd3093c2601887562e803a2ec1906276986af642b25cf583a3ffa412b7790de09384dd586856c5aef1d04382d89b95d9f180a0e4dbc9882e192df9296c2ff597f241ff6d32d728a8922cc42daefbcda458142ac8b451c5ad19f8e8031ec171ce3450186a09ceebeb2c4c73659fa9cea099aa45fe828036e148567bce48147f2c003378c42e5734b340cfc318fbacd3a1f2c7e32b46e08a7c2ee78edd887e2f174622bcc0d724740ada3f88900e4ff7cd9fb34f592070dd12fa434e343b931869172f3d9be6c34598047e539e305947d6348164afefa58dec77447162282b7cb44fe9f9d7e9b8e9041b9e6311b308e82827be0e5f67f3c5f519ccc33feb336276cbcd119b0996ffc4f61cf7cfd7436bd286eb59f28f9ab71d592b52bf135e2476714baf24799c1a9915566025f99ed52bc3db8a222906c97bfd4cb84f45186747214354400a1e5158c524a0379ea394ce8c5c5b90927c4969d95ddf322643af0097846ce8a006311854deb2686f399d273498c81280ecb573babf8439bcd842eb308db94b319045b26c54e25bb30d22a5e80e3786ffbc365387ad956c71aa91210540af3560eaf22a84906917e2e0f53cc7f35087a5d32b85ffcb97330629a05b97ffdf9bb8f9009939503a03eda09794e2f97ef9b759546468de890d0ff34a9cacdc3e765fb9bb4c26faab10726d05b0c5bd47988580db1c063b6c1fdc2eb9f7652c84a482dfca574eadd573d1eb5d9c58b14a11155a34f7d80d88e11b37dfff5c2a408ec9af1a9a5387741bc96a03e18f9b70d9da062d2aabbb1974f0b190169c66acc420275c1c8afc6f74bb9f5db9f4efbdafa3f8caf8234bad576f2356f2ee0fbe6829c7b579016a09d6421bde4eb9efc1a77771d9a829c691c20ab4d9f1d4b9dadc089317143da05ef95a51c385780d25f68341db0bf3b60c27716ca9f338a08e6a13caba0f9cbb4eb2cd8900623ffc6a1931a782b3788574460c33925ce60165c656c035f1b6395d8dfa5f8fbaf490412baf04c0556c301f08b48934f0a0249ce6667d40c5b5a93b79ffe3894739e5788060ae02e9c62006177f2d08bc437bc902101871f7e1fbc3362c2a7b9fa5e8e70d7ad6da75ffcb77aa021873ef5bf50c8f35d54798bdd716c8bc468833935ad7a5311dd31640b7c4e1dd2c24b01266508d88b8921309092b530e569af351b90796354f8ece27461f125af2d107f835a79a4421f39920d30671329fde8bae27cfba04edcf976a4f573579ab2cfea91eedaeb6b93656b4d9e04826c194f709ccf9306ad0b0839a8ec0b59c38de3901b947286966704e5bfb014210e38a489a907ed740b259cc3f02fa5caf7206cf5adb194e739caa060685081db780b72e864359add2294e10a433fbd408140445fae2f3fba8bacb0a824a4c881077bd174777fa93c9d212b2b8272fe994963f68fd4eb9ad689b1d796a85eb45d2fad6165623bdfc67f5aaa3fdbcb689df47c1a99fb68eb11803a9f54150798f7e563d4ff44ee620c4da4b75ff9de55a916f8c4fe043fdd384286b0e2cb5b0fe81c529c6d7d17cca63ed2d5ac425841011fec65d35a9f811c925ed568a4b87e44c180bb434050c8b3939527e7b82d4800e1876b140a5fe13df3c0351f071a6ce25f9578a87764b487037f201001dc8871c7eda2a1ec7401fa8eea01d8a37ffb6cb985e2eb675cd4137961f7e10d0025b7761753a6b7b09107d7cf90acba3f3321b3ec3f5ece9dfbadda32520f5129ebd26bf1bbe999d60b1e970d7c78cc8ad3dbb1b57a6185e04e3b172db57b5f3e636d2c1a65e46716401d3d0fb61a1ecbe6b5dc6f766bc793dff4bdbda792ff4870c0bb34dbed67663fbf690df12c2f6eeb3f5cc2e8a678ef2d8885bc97ee36ddac6d5a298a47fa0ecebfb57f32da7758b1bbe90ffc2e8ad301eb7400e8089bb37ec681f057bb9fcbaae997cf444513cc0c557de3f93f8808be8cc2680d3d7b57dc4bb384447f5390bca2f9650a97e3a5f8f98f8d0328a4973abfdbc2fd130434a42b2b51963ccd43c9595658d26b546efcfb039dd53c86dc2e33849efcc9a5a0dec0b40cd8683e2afa96861d6f05be6c3be6b6e5b6233e3fe5e4d93c771a201a930aaa0312ada187de5ecb2be57a4c0466c37474afbc9643fd283d5e72387c94a699ebb8d437c41df0ce15f8c50be2f42f7e821bb04283d001eafbd2db330a1be55f38f6cd2acffe41b9a1f9b82f7c82a1b7188c9e46521eedebf8375b6d06f538b541123f17aaeb8f50bfc08345128ee8b18f8bdfe3c4baee8ec6ad27b34457347f1cc3cf18a74e1be5b7d6e43f48fed9c3b476002c926e8d6eae9dc73134f05f0f6edba4ce0f049802e99b87be2a0c88e3e8785374b78382772656c2429fa02bc0d052794a55562e62ed6c92418d4004e4cbec627fee21ba5f47d9e4d0a128d4784e07c355c731eff1f1fc679435bf288f7b9d9572a8c0275740f455e770e2a8dce7a535a169a8ee6893ac6fd991376c4129cda701c538f8bfffadb89984cb9c9fdf36409fa61e90a3cb381d69b684a5051609a003f4802a039a171d62e692b8e1364cbed88446f3ddeac008ae7abd0e0898d47f51522fabf6d1f5f816774fd0edfda4e0a97d8d302ef3edeb70b65a7b43523f51552664c5e9ade4acc4f0e101792400fc047744d719812b89b5752466403d5d5ecbc1ad119fb4d6d2ab9c6eaa7c9343b1bb1999977bb43fff920a1be3c88388bac6bca2d280f6e502ecab1c1113f822df3786913603d030e8b11f7a50c905bfccc9ffa5b8ab4b9a2bb39ab7d5ab6c295744fa62b761de3a5647efad02906ba9fe249a63167855ae8fa4e407cf097142e952a19f0eb3d1871ebc304cbe40bdb169597a667d217b6944d512eafef7ef5127d916c6cf564947fe7fe6d5d5852b523e2f20d1bacb399dce30749dd211a4a86e1bfb954b41d563e2669e3e26a3bfd6cc6348e8a2720034670a39dc42ca7c1732e66ecb8a4a8868589ab5de8ef967db29dcba120861e15507ae0d11fa61216e737ad7060d3d4f94de3c86b41e51022387fcda1beed919a3afa98a2f1b22c081cebcca73ac7d911fcddf555485d57f0fdd9f017a5a951e4d5e15dccaa4f9a5bd44afe6b7f654ca9163b80cdebd8cbd8c4db109b86f9f039b9178f8953a93c9ff85ad7e02c3efb3f934b8868b61c1c628aada27cf526adaf7ff79a6c1f40311753821f19242c19bff21d093f0e1acc444412b72859a57e382e9d7e6ab7ccd9c8a188dd20ff526a675fcb75e52e50f34b388af3b2cc6c734f4e4e327e74215fbc936917555ff539f0aa061d04b5cd45b0c1fdd7edcaa7fe968e21e40631fba500ce6ef35f4dbdd7ac6d1dddefda2c40d70ff3fbd8a3417eefbb1e4c78f781b2bf5f1d17e4cbde1ff4b3a2b942fb23168b967c69e7a53d35251c8d4f199c05dadbda230094f3035f6b98faef35874be9cf614c79a67dd9c05d4f9a48658806eaca7453671c82ec2a549f0b7e82d663dc8bcc0794e7a288ef558b282105b00a0cdc81a28379f327c5375dde440588ef7f727b1b79dc73b3cbca6deedb6537123e0e768b1bb9999971d78abcffc9529d3e6ee2868a7e2740e1dce7215fdc6d084936e7a87154ee83044a0ce6ff297ca556ecbb107304b200fde5352b1dd1f696dc9f0d06f6ae8694c92c170db8803cc969dd50848cb42e954bf1d4233d04fde35dec4e96d2edcfaa3741a8c7e143ff3194079a02f508e68f47606abdf237ca5fe4bedb183c688a8b31112978733f17a202b8c557bb44c8459666272d0e12068c917a1dcd7172728224ece84bc2a657d3c522b5369ac2c6d886b696bb03e0b650a51657472d9047fb4aacbeaff7fbe27dc864f2c0b86daae9bdb993c15a75f5c0d51a78ec57726e8bc2d9fe2b6079bb2860807d4a37719f227e9c21aff664d36db2794ea4b229c76511d97552d7607ee76393adcf7f6bcf500d181b0c66204383bda2e3ff9fdf54a01afb13eec11fa1c85501554315f5a366c84ea74c45f55a5d38aa1d4b856fc13b3bb5d4406f6c15bd8a5935a5598d7e10d6f88fd001a9c49cfd845b36be1becdcb82ec638f87d978dacbc0c39d59f035fdff7c7eafc345fa3ef2f329e5c3157b6113d40397c93237afd9798434aa2f2a3f8d2840378efbfffa3ec3305fd06e237cfa817dcb05ea9b9b7bf1f91958f972e8737370abeb0bf21af01a26f563e9a2068308aee3c3e25004f0bb390456719094798c0b8ef01269c1a943847d4de04795fad586f103916e123910ae3541935b382dacaca89acc47487715a28e2489c54fc64462e32163c08e7f5320aa36c0783f07947a459ca963b484a57f5619add07e5af9bf978711144e54457dbf34cd25ac67e85cd2a44dabda32422381a16b6e2d809c29c0f5a04d1cd6cca37597a48f235a7609a120b601c1675d358d37200e33dbebf0c24ea3fc8e115f2bd0bb52ff1a83735f0e102f9b750999291352c08563ae8e63de6e3ae8c03dab479de02718d705cb1ad0f440b01e2b61b3db86c04095527c5d7114131b413a4892c02e29d01f8f34c19c80cb4f85ecfa903bfc3d8708a97cb6cf5b4271d6b49c76cb2caa3e23de512503a44e8d5e5a777a0604e42ef145db711fb18d36bc23cc953f2aa06951edd57f4c10640c22fb5a09553c0702f3b044c443be014067bd9257cab31744c0b033e1af46eae7d642949c2a24d0c3287409ba318c4a5052a3583a7a001b181dac98d6bffd06e4c994a56b413d366cde2830ae155eba06f4a95f3f90d5f06a9567cf6878cae1dc46de5972e19cfc9cf64aac68a21ca1921ffca6ba6a9b2a1dbdd0789d99b3e7ed66cc879d7ac5fccc4d95cc999198e1c63cf9534986ededb1da5a7c61a41a5e190f03fe9ac6578071ee5c34d963b01b1312ac6b6b6cdd81ee995df3bc9a398599902151bcb686dd03e9f210d8d1b2224a4a2c8cecffd23d29fc60cefb17e720b7eae6336264dcfcb269648c0326f5c3881e888c51743505fa0d65c092fa661ada370eb7cc90e5b8df0c06256c9f474e982986b290f40ec4f01726c2e9757deb3eba05ff9fbeb57c8209f9d15bafe700d25ac795e1527f6346e3eee1568b843acfe28a9ff879f57fe6e0211ba836b8499bf8c2859fa718a784a78a17520fc9aa71c4337d46cbc43d2b13e74d16cc7432ace31e44e137bbdf869f531bc8470fc20fe71cb53cc109e1c5be9e141c077ee379976914ca177aa6d1d420f3ae7fd250c62858de4ff99904c124852dfe824fda28d88246c9b5d804c686680a60e8be637931a8cb7a80e190bbf82647fa72b620f5eef2308d17bdff31448739092d1522e9acaa748a261df7b8122c7ae4243348b1edebc510ba8187b86f120cb08efdefcf6e843229cf1802d1accb8642fe6abed2bdfbb3bbb88b5e9c83efbb2467fabb7113bc57721e9eadb0248d7b4a5e3be9ad78ff62761a5ecd3ef36ca56d26b800471a23ce7e72f9621a3185c6b3153cd7b55ab8fb2c76b05b6048ed9ca4cab355d7d90d23d0c7e55bcf3e59602e73c007cfd65350a7f64c14bd70f0eb26d434b6dc83e7b1f1653970dc13b548565868ebeee4a50cff0dbfeeff8e256af6bdcbbb8d12b3082e4203e9666bb0ca98870898e90be762259d41c305028edc198d4678256b52e26f36d38305073eb5f8f36375fb883a5a2df03e49313c82723d280e6fc339c965bce31b276c1068863b965d9b489ba8709ab28be73de39d2ee67491611e303cbf78763f7fbbe487b44f12b376dc9845c481c8be42d5f248ad3d160ff908b100064c9f413b2aebd154bd1cec175ff257bef3d7aa9d853f82b8361419c9a135e2e400cb7f1f79a6f1be4fb667539901334b41fa9f33458bbfc92d2ca982783814493de19ea4a49e89523b50da6d70a60dc702365e800922eaf49565af03b7fb3bb9c57589ca8071765f98b994f2b80de5419ad018570a17182accad6aa3e92adca725562d390dd95f3df0db89c2c4422c80c7b21a4abd380319ff8d3498ebd597a0778385d94e7db75ef7aa1d74d0e3600770815c09417c5ad812a398c006d7f868a8103f47250391f76380d413ac8af320bc771673c02eb492bf95ef3bff18314d063cb6fcdb0ed209a8d36c0dbbea713a582b6ab7346cd4de21fa6f5df55cccc4a218b7b080d6a2f36253e276e398b83bc818a318c39b0cfecd393b3064c4bb0acf546015172f64ea5eaad1587a8444e7f19c74bc2aa4eb9e4226c8b6f9cc7b0054a8dc731c104d55b1231b534a91a7a3db90b86cb1abae88de9287a9e3710e0dea93759a55ed81158197506c27ce622b10a0d290cc26a586fb7cba878558c35969b6ad3266ab5232227ea7498c71bbe3de823a911b753011d0340204fab2baef0fe5af98d0e78b0ef401d600fbc4ecbc7f03b8a861487e5de919a821024812f22be9b89b477a784a9aaa88b18caebe80d9fa7e37a9963e1b80f8d3e7290da085e9833d5674b3c3beb91f87ca7d18b0b0b24de551e131fb336b4e85838d9df5045ed06777c19c9010519c0bfe98ef38c97fe61d5992f56fb830beb085acdde67faaea5a5f5099006e6f28f1be26e2504b0140bb4dd55f6e94b1ea4c1cac5048ce908552cdb5d906fbcff62c1f1bebfd15e3b74264ceab0b34889335d4649271859f03e64f6151f976ac648ad7b21a53ba4d244f462b92a726cea74dc67256bc11838f726141309df6eb9424c601befb37f5fd7503779ebcd85d8f363929c3477ddfc4cdbe74c69e1e588ed637f601a128e8f5ad3144b35b186b71776d5244bc28414a4b94ba6a6434fc34b04737783df002b1e8db64cb4b5ef28b35fca240ac16bae391c33fa73b2813f0e002167aa952d91882556ed04acf7800ddb648a7afe2e04a224751fcf17c7d5382eda97f0a176d7bd9d774223176cd95e2bdee4d701de6d885a088cbd1458aa0c9da09f7937fff78980ab1d15a4f29f8da263bcdfd277cf6e9483ba2654fd1eb37a4d35d487b3f055b2d523874a0647e912b897f88eb1aa15a90797612f77cf5aebe5030095207e0a9e6392be3324d0ced3b187269517f6dfb041e7bc704406f4d7e07e45f7f7a74c5afd96a5afdd2ff6d2ea2923fcba4a9861041e61d902ef82ac20839b2c6656113b5e45f78010d8396e29f4d1870e7bae02df15f3b642fe4b9a8a5d28c5d7980f65b3e7f38f20f833f45800bc2207f6340ecd58514c6f78fa6d929ea32cb6cbf944818a6fca8af3c9670cf6e8f619082b202d764a6f1f4ee3f56539b8eadcba2fd3aaa2925adfcf9941ae5c3f1e58806a528df0da4d32da4700ec3afe13516e859cf2ec2ffe4f803436a0e0f25c815a15fcda7e13ba3f127a4c2b9407594101a80199bd17f3e71b183417a6c599dfc8f7447485aad6d7fb69a9e08b69b19356e6e0f341e0403028140a064cf11705b8c7e7494c30efbebd304b1058a2d7552c98dc54caff54e5a00bf447b108febe9dd1caadd544e7a1413be06b70be93cb9d2ba48d39909b745b4d9c9213cc8d20cdbe0a15bda517f47480f1642699de2fcdd98180203601f1759de68fc388f9fb4ff4e726e353e0c7fd026669d8f714a569d6a0cde7600aa19015f14459251e6b62e89dc3ee5b1d943c9eb7e43088a528b8a8f84c9dea1124adcfe5822331d248c2ec44c4be0530366f3ee623db4deb201f7fb08e4b4ece7e5141ddae9164a3887e157cfa327586f7ad377b2baa31b65aecaf2b3cf7b55cec8ed129369c29787ece43286024470f94c96573f62f5cb7cb649bf7e061fd1ac9dafe97259e738517f3f9f6d7d724d64fa40c878170e5ff82d4de2000c30eebd9c8612f40794b82ad9b3eb86b9b36eb3299ea35b7ad6daa309e55fa59a03cca3b9bd7a5fe79815aeb9c9cee1afdf19071fe337d36126743df4d61d40f66bcaca1728e4f9d123b525b59771689facc2420923f64aeda7686acad7ad807efe59b0e93fbdd75db1c02755755233826126c091757f87f9c5f43a0e434fb0ff97df1ec76c15ea754a982f228ab3fbb3223f507ed273bbdcf295536ce14a5926f021fe921540cc29948adf2846c9a42030244f0f028140a0fed7007015e9ec7b2e1f5833f6a77190dae9401d0b9cdc50048039f019de2db874342604d8ab79096ddf5221de9f5ce9cce42ded606e63541e06a423711d44c5d6107cbd1cbb4e04d5cc1cc3b5531e5358e9719dcd7b2ec366c77be0034130201008043adeb3c9b66046f67e2d9dfb4c0dde4fbdcfaf52bd55fb2b7868b4084b6b24e09c959cf4c553986d10c06cfcc2dbd84b262ec5ae673cc64384aa36abda69bc8e9115df37525458bcf19b3152b3fd95f6bd7fc49632917387d5d77642a351a2903e74a0fe27d67044ed4003228bf73542a630a03aac8bc6d7eff2dbe6ae1c6e64b50e9dc28958d1b387693e60e082ad70e86d9a3151b3e3555baf9437fffbbfff612779e8e6ffda2390beba9484fd08fe871df4add0d789467d71b20d08a5cec2e6367c7930916da70149cd1a2aee23af2e793ebff95e7dcd6eeb80fc878b6665066cf71e077f539e9367ce98a6b4af39d4dc4773cc5772e1126a2ca88926bc1a74439415a3edbd08d0595f20779cbd9eec5ec49824cbcf6c6b054650cbe4101878b454ba97e4c9bbfeaf8a7fb924683a477aebd235e7e9591ebbe95f374ea2520108877d4287fb81d8e29704ab78546ff3efcc4d6b476f6ae78710aaa6694bcfb74c027580e9c0a44257d4b8be7ea9fbbdff112c12a458c1a29ad54659bc48fa7fcdde8fb4f01bd93eb1d88c2671eaacfd2f6b507dc4f21c23d66c4d12061f010821c41fc01a437c5085158a42badb175ca7fd1bd20c335fcccbca29ec9e46aa8e75e436ca18a9d9199085f241c5829421bac1735f03ed2f14a1896f6ad9399b78054c3e6ac12d3469fd9a0c80e1a8395519f173767a9b559568f13f904b3676826221d96ae458c4af12ba2358f82e0cd51d4362ccbc7af917a0d840b1a4e409cffda6b72eb023db9123a132735a247d13bab075d727502205f07bc989c2ab3460ee73fea493955961580de1465df822692fd976a45a699aa7582ffe6db12bb087642016283ddcabf333b934d0a9edbcc535b31b67b60c0ef0a8f36cfa556985b3d409f9069073f8dbf287c153e29725b709ba7989aaeb33a7e929313ab5b1e5852efa1d5e88fa6ed3c279d68b5a98cb222588d72fc5dbb5e9e4a1fafe851d8aeb51e226462ef853bd12d030e8e53129c61ab6c7b9faa37969f58bd9bd1ee9c1bcf8d63ee7f65d8d387ab1249b5cf2db1260b54a32951e7c8e61fdb79a61ba365efee7c337d7c94e589c859f01e9f6ee03f63d10af036782c5a2f5ee826ed3143e29dffd87a2e78764b3c056c761da96d04f4e8e143a21cd1f07083a03485b3ebb3c1d805692b67ae2db936ae5b785dafc6fc1c2c7cceef79b15332be0fab6be63e6e3753133cf167b422254432ca06c334b6b3c52405d0593326b1534a98c9dd3ab7b3026e94c7b7a70a6fe7d770e08a57312fdbadf25a92f29be8f2eacacc2100bef396cbdb66a449bdfa3758b50002f863602be69248dc24b2f3ecdf185a5dd568fc8408a01e2a024502ca11808240a9ad70189e471afff91f8eed75ad3f33580a0e2df95c85cbafd16998b49cc2956ee1c2c2a7766c6e5d2fb6f09e01dec5248b5c1891effa2b4e1b5bf6587f18a74ca9d1a8b2cce9e137e96fb9376c23613896631ccf307040c5de7dddda051d07d3d9d6a456904e5f3690f8c0c54a28a1cc6c650b8be42e3dfe95c8f104c3b3b3481a160bea32409fda416e10f4c82d139d50e2376e37af39e5e8bbaf403aca35406f554310406043e1895f71ae2f860e624027eeca629b4c6c5deb6c1d1592e9065d652e451440221946be35c863759a1914467b576cb2b3298273fd4d6e6126c6cad2798ab5c88c4049344b9b9f938756eccfe3c60886e30e9f2adf28cf98156e9e3781901ff5ffb917d4be20f5b823e925086414b7952b16064cf972ece7a4529efc70f245c79057d04d2fd5ff19f073cb71eea8b1f00f01c73e322097640e9e5aeb6dcda9eed0deca703714489aa85c84526b5ac363cf8651153788c6a00037312bbfde73e7d1d6d9d7348c287063f1d6ffcff302b4b7fdd6ee4a0f99a36400b849b7913caa26f66ed47ecca4ffcfd1ad48d7fefe52f3eec59d5afa0d10aa17581d903da626f38c85e0d794d7dd7ad380ff7fc4a02b23a65c6a8aeeeff55e435bc734938b5b2b09fd5e21900123d2e1d99de3cfc1f5b8b5bf3c14fb34e7cdc34e43c8f636d856b9e031fc32710d4f79956ff8fbd4bfa6ea6fea1b28e99078cb020584497821f4588bb094ebca943f565a58086414b79fdeb20065453b385d10695c1822d29ac381fa5f836d91ac1acaad4fc108443720041d52a8cb038497724b8248fbdc2202e05efab74ff8043921a9eca6211e63e3eccd8db637fe85c4900f080d0cca12c87f7a134a1c443d575c3cad9fca9a2d822e1c9dbb00b208db318047c5cd13c3656e898b4027c166eabb36b5c00d5d550a1f8b26694102acdf41b0a513ef0be1e201822699908bce7577bc2e9d8f0a70e68e5ec1b7b1d65f2707d7ccf19defbb2b61d5680a2d349193bb5ef9c00cd2768c78779f95d0d4307c56208c99133fca2025f9a642016104167032aa0eb3ffcb2fe7d75faa31bd9f7a65956baff07bbc8e3ea7426c4951e50bc149e12e2ddc2d74611e123be5c31ee9aaf6c78124ebfba6cf943ec09e27980f241f3719f127468a4769af67d31f7e35fc84f2b17b55857fa5ca0475935f0374e3e48231b4938c3a0e77b4234d3fd880ca26b73b451e988a72d845b3f44cff6cc54fcf8415871e25df351470c0810b4ba59ae9ad66c06fdac3a35c361c33ce8d6533c3eb426e1e297114bb2f3ec41417bbc313bc0e15d552423ecba8cf9f54fce339f6fbd4d99d416158f0371d09b3380fe35f543730335c1dcc87da6e3630c309fbbeb26b4598db2c0c037763b019afcd02e2b2ef7c4fe3309f197b8582ef1f813d9c7a4ca62c3276d530dd2f5c913d00d1779996deaba75df5440f733f95362a82bc2c5621e0b11c07d509747a54e8ebb69c0082ed3d0e7df68c1ccdf614b0f81987184ac078e7b6320c010ef339595b5ac01fd2ead6e79b0f6b304adc1407bc8c19854a84deac383269560a279b004f7f644fe3a775003bb37aa3c2a247eaef099f6ba22c7e9d4847f31ffbe79c45188fdfaf5d6c12cd2e7b2c7c4436b75475272730ff761e682152a68be1cbac7ea539dec33c239abdfa094b07376f9bf399b56488558a24aa0496ccf1fe3bafcefbaf0bf3d11d5f14b28bc98c7094356fa076cd43a7b42dab112d0fec1279f4d030a7f53b90b4871fc5fde66763b180a7ae889d0d40dfd3e4c2bd83cd9fe7dae4d84f7ae9f9366c6678f72c206cb36486382eda7cada5409d6af6f5df6eacb66d44d9941226c8e4f453b5162f9e88a500b03e5f6234b6c41f990396cb887c87e9e9e097f791b636221027014fe476f70c25657f439e5eea84c14cb09013bed6cd10292641c88e6fe8b1c07084f04a59e517d0bf0b623529d73c3dae9c6a70f8615c43b1ee76730a9e086ed86e7b0f8f2c804c72132fc6f97a7be8506d6e482e9cf7167af499b6ffce707687b50322f6dbe634a0d7199a96b10c431cb90f6f38474ba8756828081eba89e8f12fae34c7fc970aea8f1927b3163eaf191ee6d34d2a719c9086b3649005ee5e9e9ff8e18f065e90ce9b2873da90dd5cf66e307c32616fba7f72ad994f21ee8f449019bb92f395f0b9cfd32db77f74b82f1f1af29bcdd329f5888e824514e443a63482d0994d55c29538fc1e16812ab48adcfc7597ceb3241a1f8a433f7639050e767e60708c6658d6df48df2f237e4bd03135d090dea06aef3702a946ded2245c8c3bb85247621a3cbc975ee00c501616523859f2c2ed6294186f5aff20db41136d84f6a013271ee753bc2ae2b1d734d8e7a0bd342a1b5bfec3da6249eac25c91cd79df1960ad874a9f6bd2ab0aa1c34be2eb37c04340c5aca7b551126d6cf877daaf34e6cd2c3cc145a3d31d036f8bb9b635d8eae725fac1408686c80cbd7229c415abe0fdf1402c45813a19082ea0fdd8ac4f529463e91184498b1a7dcd2b45cdfe2dc51a6e30ddb0d5f035f209ba3728a19bb53e199b6f80c474e4c06010297f125813ada869e9366985d765913c687bcfdd43dbd167318915b7a138f84475ea7657fab6f7175004e2771fa86c3dae36f7fafe6c6a6af6768ab96bc9ad356d3dc0f843e457ab8f7506f655afedf4f46a18e4d4eb7dad70a3e0bf5737ed9e781be7fbbc0f28cd0d1ff85c82780444b7953960881292c8987f898edbb63c918f3e6dc4718b511fd49dcd076917ca9809f8030c58c873c28d751a17f5f9f9efba32d40e950e26a90db31b918c78d425c6d06360910f9519b05059733f90c82052327ca7adbeef777c08562fd76080c2c4c7f02c01588bc3347685a0cc2dcd39bacd088720847b7d42e2c2779c69b3de0ae75ce86b6ab9338c0db43fe318f37b1b80683b11cfc552d8beba5e037f6737c77262863f98866bd5a37cfd1d56bc218ce73fb868c8d95fba5097bffd29f78813707e97ea3f3b2ebf90460a3b7910879e6fcd082d14753fe97f4c753d44684c7edc9f7cfb26acd204e000f5d11558210b6f12b19ceb256e45e318ec3d1975cb530c1c192959347c501ebdc3a5b6df9e300d47f33adad639be80c1fa50ab0488ff077dd4dab5ef139e1675596930a37cc44d9f3d93840c3a035f4e475bae2ff51d0cd424c3b783e89d6415a79ae71e0bfad7abfa758c3b0a05dcc00502574bef59a0b4409bc584fdc5d2cc89b9863725c180de6ddff51f16c386a13c316875628af861c8ffc9a5aa4ff09615b51d85ac26fc70923fd6437361531cdc28fd948d341a57280e5d6a7844a2903f8656724243277bc11055f73410b722c1097a70bae8f4a6d0b0f1823358737a27bffc548fdd085e289bd2ae03f5d048a1d42be4380fd5660a219753ff66bd5cc6715608b12394b5fbb4d3f3e6d9225942a262288ef1d21cb4d52fcda0cfdd8a9bedf634cd41cd9710e037100d510621a7b73817aee8b4b1386f9da760f4c1c26fc279445ec9a95254f5fb64980e9f375809737aa5da6cc2c9b34cdb262a6f7c2794e8079ef12e2117341326103780c3cfd7120c0b9a9e3d5de47ce70573d4ddd51c38d65fd1ad199a480a93aa1d9ce28c7e6a65f70806a1d5904c89c88a95471946f647caefb9cc47d59a1f98aef91ede4c437c5edf7080ee3442f2702b6510a2ec51e85eb4fbd4dc7065355cad8fa88a9bc0aac31dc4e1133f55358cc4e18bb84803822832abafc81c417a76c6b9bf3b46d00bdb9f6b322823cddeedfefbcfa45cfd62157b4a9a4643113dfddead9d14bff6769e53614f2bc9e8c8e401cc1d77f0bce9c60aeee3b21ae5e57ba96616548e4beab5c399c55af636252d2985559b74a120406741ed0854b501ca84527887bdd8df3a80e021ed53f7bf5a0b382cd5fcc32a86400db649a2df942754b4cad97826130f1897f3f9360f74056835be3caa9ffd4373746291f351f278dc654f1cc0fab2bd913ac56896cda3e5ea80d193afae4b73b9ca45324bf990224a10cc3a76125164865d368ce45ffaa1dc4483814dd5ff12b0927f29869657dfbeb3d8d66be267b2a00b370cbeacaf99e0bcfc734d956c034f74afed08dc92357fa892bf8f1a458b8a307ec0f82018140a04940f998f9d85ae562370dff3c6b965e2ddd795682fc7271dd16c9ffa0995073f71fb1b6c06860dbd11375b702faa3db2ec40d926508df90153873bedcc18790ff9d966aee698ca78b450d71409f408a52f4da91319aaa4ecab0480b738486788a1e4b474ced27099a25d4b2054081cdb4206e48d851006e5736b1b3de76583fd80d3e3f55cf87ae38e30965f1528ff386429edd9f4e260cb713eec93ea756ab64f1676985b031e347e46b5e34d9b5e4896c448c9ae716ebbb007b5dd4f0b1a41df902ece44c95d2d4a77454a91ec74ad942bfe201c4a6604d2d3c4068fd2bfb400de1b0418f35012bed004c3343a487114d71763fcff7692e2a998e56edc47bc489c04255d06c82ae4e4115edbf11871e6e66b41e1c8e84fe301f2f94b84b528b5b3cf7ac954c8d93b1aa12d28053fb20929ee9134ba41d95d5925ef97782ef3ce42e186443e79da2ddb86c5b06f6989c726bf3b06b8c401d34cd0bde6ace771d7c98304efc3e14c1c5dfa08f7280a2303785fab441834038c3a0971cf97b6bdad064bf455172067d670ec32c1feced9188973566faac1e9594b7e978e90d04fe391b33f414f88d626cf073185b7af07f43390281d3fdbe3280a2a7bc78d202bfc88166c06b7619390c21476ab698e6fa7f3b38f6d719bdd24fcf0f4992b76fbc12fb45bcfda1b87db97a3e8397331984781d5760498e99eb4d5ce00a6efb55c03daa15faad221c99a1c313e077e889104712fbbf3e59deb9ecd015184c947600c7f0a0a99cd4f303c2d90f7e8d2974f516a67c7ce077fd3a93aa87cd12ce8cbb9b8080d1b9eec2b74a56d16b71d0daefce5fd6f7f8a24944200868183ec5412c0017feb2e70742ce42667abed4a64497f942f9f51f6d38ed027f11623743d970022096c71f326ce46f4cd9a1b63be0894ec78bff179fd197bcce9abb27d8c7a03634245e66b112b0eb0b29a0b41a6f1518c224928bd31fc8952f31e09571b76fdbf73d098e690917e03c320b0d450077d5c2ae43674fdef30c555a3c3e7317daec5e2f3f3fc56aa10721d435c1877201b2d612a28478c4e5ccbb8c3e925559c3e31f472d877c08b15ad583e7db2bb45bdd7ea076a4b0450ab940c0a2499887905ea1fbc4acf84073f8d814bf34463733a9fc0d90142e49170b8d842bab75fc828ed5aaf338643f1b34142f782ecb312132be60a32503eee3f6e75dda7d48132ef0f998ff0fdf0f6375630c2f6d35c3f87dab585a82b67a109c172b5b9c78524b0d7100f1974390198f17813493ee17a668f2bd9d87f6ebe187c8eb021aefb71e84afdc4088db7e73870b557f09fee956fbfc5552d8b9e777756775117b7c6832dba16903ccd8dbe4e4f658fe4b9ca3dfa297b70ceb8305fc2b88a11153da7856c79b9a1b3faeb4b0f958c8970029e1fae9b1d0efc908f543b47f77f0361a83636190f6217b28e7e88293abd89670c59d6703cc80322b065f66c858c4a8ff07ba8f789bcec333311385d175f70f165ad4b2a43bd1568828090bfc94b4d7a34dfe7a4ffe4fd1313b411153e7e7387a6783c8d3c6ade3691fd8ffd40c22f5afc826015144d7f8ba1284cc94edc80ea4845a96a7ad6e2d1c20f9dda1391e0f28e042b7ab4335a12f5055f41397a6f5297d727fee668de88139c9f53990e7132863b8693fb8a648c6f433ee0f69b8aecfbfebce1dce07ca6b0fe6feaa2144f83a524d78bc1f3423a01218e5d8b640b278c2ff1003a0288afb95367cd9b0491c5fa6ac6dd4563abeb3c1c87e577620f82bea51c90ae3a3248eddd6c158c287976671cdfbcdec511cd8033b6c215c82962329a0613c05816cf824de403dac7700c994e30ddd93deb8c4454c45266ddfe6c66be26273baf8f9e91d1b23fb4d73a73ddc11e4cd95d7c4e518d04dd4e8dfde95737c23a4ae1faf3261f24483f32fcdad0c84992244bed2b533e881df591f8232618ad0bbcd58e728396a9d2edf3cec83d03827b857f2b5ced3708986a88848e14e602641b6f0b02375d04310a068f6706e28427c4923e91388d1a54aa709d85a8f123008fc3ec14297aa332c8d49c4dd218ba353b0b3f23866343106313104065c2e53a01d01bd9679efc4b3fedd25d50254bab897d729d2926fe53f5d0c6201005e5d48a28f58af1286ba196e5472632aa6fa2b632d4f39d9f0e42a9e5a374c13dcb1970db0006aed6ef85ad39b452cf5ff1733e3ed8a3d635498d0c1c35a776bb8f0d0e390218ec122c74598b3388805fc8131c0683a82f6d3ccf18f84ef7c28afe1032ea3afebc5fcedb37f6bbe7dd20404fe2dec6d63c01cf489fc68ce4ce1ff645bf4d4134c93c0889a5b941d1b2f73858a9f58a7546242f936c78e6e554c3f21eed0dc6044c56e5b322ee1e009c74607e8a34f5286849f1de04d1a73feb5e58e5bdc78bbf397e5184500d13e97220f784757d477c3fdddec007611b601564025a588af24162d62a9ff8e2ed21a1c1572015778f137ac409188ada9292c4f15bd210e085e106fb232ccfa7668bedd1b26acdae922694b63b59b9ee8fae3331193be7e18a0dd7a06031d74fcfff37a61f2b8a95492aab046128b9d374689a896ba7463e4fa2ad5f45ba69de3e56bdb115a7de2e21c8e1bad7f7edb6f3defbd9817174a9ef19b1edc0ccb1824421c7064899061dafae72e7b90d9dc7df8329a3b38d1e32e1c11535c3f960479fb0b1b40b6d51a16b4cc3cd75da5ae65bd44693be44fdb4264c8332f4ca50c2bf9c98febef075231939f6f47286c63297d806401bd84e8c082d905d0368be3747c0787d04a7284f33351bf4e50efeb0af9df3a7bc9644daae24c41b28a35e84c4d1e47fc12807a727d970418a8fc7435ca7fef69aaffcd61ad63b9b3a8b79b3ddff22745bde9df2c2187def47daf3fd0e74b0b8b249daa96b3ce717655f3036db49ed766ea912ea576b77d893fa211396efa3c09db980921a5ae3410bde51a0eeeab2f0f1190ae6c12dcbcfedebe8f5a1f577f872c58c789acce6094f6287aee012eced56f290a184f959d1b0309bbf84321626e3fea514849840d61ff89d19690f5c034bb297ec00575c95cb031f22329a4c9b325ac2a2bbd78b028f74989436995415de5899a6bb86c524affa83501bc866a9e5c3c13b6d8f09dc1da995a47503df260f08bbd6530659f76ddbf985572219f2f7f817c4a47292fc37ac613dc6be2dcbcd354e747fcaad52ccdd79b28736daeada18a31a1e31be61682455e17f1b7b410f440920c504e7741295fa7229cdac3a7edee60d7444bfd09b142e770d9a31eab9a546b7a4e3ef03c6e14b00ed22694d3d8e487c0fc94e1fcf6e4c7d1689aa97b8f5c18516a6c2ab73c1500af487973c29bbc29cf69ab5a42d224df616939743731aa07c11f2ff24726c5b35ecb675da261b8e51fdc7ed5a61b0203f9ddfcca376992edc89bdfa654797a2283709c428de4b29ed2f6b130fdfb715f00fc8211023296c6fa7ac7659516ffe08df679c5e5663386b73d99f39fca56548a3d30df4fe9b87c0877c2febe886949e609d179f627e74a124bae7d8c3eccc3f047f7796dfa8b358fac855f9f89dcfe777dfb8ac9c9c7ca2c2466f739e45e5d774d0fbf4f758f0c4b21a26341cd9aafcb3f305b9c126dd5f1d71ca09e20c79d9f60d85b86f2fb5f9f7df6ed1d3ce6f3810bcf85f89593d42a4217a10aded7e249a96e9b4b2f80a05247fc906a077527960342c4103d7256a508bb62706da321eb9afa5657526d4c1a70f3b5ef522a8b4b94c6d0e3a53015e313150571888539ebaf04b866d47056a921a2fedb1bfe7e74bf15afc5dc03feaef50f71d6cd6fa57f8e7f6e4640e42f44e23e9f010396f76089b7954f03d30a244a8e64dd20263fc23b5789280d77a4d84f209d43167e81411792139721d3e731eb1204814c2500b090ae44d408124de21a0e844f7160825f5642b403d5ead4bc7ba1a12210dcdd0016c4fab396885648459d1ad81f5c61dad58598a689abbb29b6320eda8cc9af86c9aea1dc66e07701f7d70d556aa794d3375f07a7c9b0e6160bf9dcad4dbe452fd5c77f1c30451b13117c19c5307cda1de2808657be9e099800484c0caa90c4ffdd5e796a82b8ecc0725e1dd148436ee745274067ab43253c4766898d9baad19a3f5b91c947eb09012e7562c026ce3c91ac7d9a99303b8166517355cae51838291689d45ca128df534df9fdb39486b5d8213df5c7e98ac01a570b19d6ef15de3cb295ee0f730d0415c402ddb74b9f620d121b7a37d9b1aacc2914c57f1a221e8ce1e711c694089869a88a02943fcc5d3f29859a118696fc61285610dd148479bb816375cdadf2ad79b13afa268f8621d0652f30d8b711f90fbb8683275057b1c25e8490f21e937a062115571a68c7054ea686e401b9350552d4c357e9dd7badd90a75c509abcb88cf80422a694409502ff84007e4fa31eadd04c6032990c372c0d357d03193b8e3b0cd020eaafbb1f61a592bbce3982c0e45001333ea2fa5364908a26d0a840926ddeb0aed4332623b21d53a44922d696f9db780b136e68b1d2bcb880fe365b4c0224c2607f64a512ff637bc21b2266e01d5dfa43d9070afd46cd1f6d909af14bfdcd05abdd2514481b5507f68bf43df4217ca5bc36918a14860ca083725fcb5015096ca0066f05977f8f99d047645d958067ba089a48e55dc3a59f351d3a22ff0d2014a0efe6cd2b3b98f3cccdd281e8bead9ebf4849ca5cf53da5cb824c422b74aa8d462df51c0ef0c4c5c1289a6fc048a7a4cfc298e2f3364a08ff55b6340cfa30b96c46f7b873ea416ffef0293e691a43f8d259ef9ca45a3e10f3c7d1aaf1e701e0e2f87dbf2c89aa3fd7a88cdbba8a49a1845189394213080e3097198235b290e66258b31fba2cde16fe2e315986687e4cf8ccbe34ebf5208b0e73edfc56a0b94902755c8b76f8ea55632484cf9a760ac8f12f2b7bd35c5fb0eced468e6937888fc47198225cde8b31b0605f44c5a4d13bc5f6a04dba739345c32ecc1d60492137fb97905416981824ef0be9120b9dac82a07f86adb5b796741ef3ee383fd4b2373b551e733b8a97511a5dddf6a30f49716ec519a31bb1d9adde385810380e74eec64edd9935441f2eeee25c9b21a21cf88fb1166c58e28dab161bb8e73d1032902055d4e40dcc00b7c3fa6f90b843bd8aca7c9509343d3e1ea98a1ed2d2f9483cf46e2dc2dd10f67a9848f0413d4fd3509f16ff5901e49c1e3b5afda3a085f904eb790c2390cbf12629c13691a8fcb0b83fd93f9e00dc23332cb56465356398f55c4cc817a7966061cc0fb27782f4f7b5e0cf95d847e13a810893f444eaeee7bf8d0c4548cf5974e648c82011f95536e673e1e08738a5f7864ad5049e20d9f871739e1385cbc0a39c2cefd770c5fa810eb22288d142cbd666eb58c91a4f0d17e5237d1cfb7ef98368e08b143ef2a4dcefae5aafc62705db867bd6c2d3a72629f8b557448313ef70ace941f6a5052cb0f1a98e6f7299e1477658f11b27aae7881b41fccb6261a8ff573c4264c3819f833851d9d21ad18e4a0ca547e444b2dbffdb9b34c652c17a7bbfe19f52971a1f26f1bbcbbdacb3e3f93e982b6d2435aa51b544fb54846b0f94528009fb86ed03c76a3cf4ce11edaf56e00dee657a7e39fdab4ff776073e45a5e69ed87860db001f2cb16a7dfb796b0b4cf9a4508117aa5f21d4bb99b44a1d6529d889a7848dbf43eaa05e9380d11d63caefb2faf8aa1abcd7c54614f0b3056b1067e95c223af3ff48cc8f2ac3f3b695ac314f999dbf0b5ed90f92b69fa7f932ab4406497356bbe10f9cf19f29f0103c062391cce3ae39bd4e4468d0f0f51cc50d6bfbeae39cda0f7b53387818def3b639bb40f5eaee7473224fb97b4ea823f0d1fb89545fc566d0971a8c09ef10f58b3d23a5aa6f1fc0b10b15ea77ccec2e924237d404e4591dfff34f874c79f7c560b8ab162a88f9351be3cb6bc1f140a6f05e435b63018c313742c00777e5f67c1b7834a3060181180c3727568cab78674d0f5295a372549860b6e7546e7541d8cbcd21b15fcd14b7f8e2974a2c7986bac495d4c22f530ff7f2df6382f386feba40e8e2b4222babb7edefb419d375cc3488e8d2da65f2d167fb530bd7ce101fe6eef85d96bb11a4906a0b54ebcac37b6e5b3fa3873b893899c7b358f8278fbd73ccf584bc09dabbf9ba6eaf62c0317acc25b8cf66b2567775078556bb6fb57d19bd587d90e7f1f813eaab86ac6562127130c5ca8626afa3698bbb13a04068ccf12db43d0f24a16a9071ccb4d4e90f78d788b3fbfd851454ed8f1963da36f01644671d12b43ff0cfef292b082e1cb94df89b5dc786338267eb3e7a308959f6f6d506dd2e1c5c9ad2de2efef26fddf084e6560039dc2c75cc37323cec4f08a563884dd12b5538df21d406e16edf596997d4641fdb0aefe3b182f4643489e94df04baf8a3dd9db7d0c2a707293dd681faf09ce3b756a2039f1641aa1b82ff09cd575d8227eaf86fedb67a5e699865ae6c462272b895b06b3e93bf6e9620358fefa14098db75f9ba80ca0bb9b1b2842ad9eab528d1f22dc5a3ae06706850eb4560bcac15ca5dd9956ae0e04fefa323b8a49f5216a4ff9b791a908406d7662aa6b18fe80611024ad927ce94835ac2d2a25c4aff2a30b152121db7a954aea4e0da92745a0cec28a585a03a3b7449ccfe7b37449f5d19f9f1ebc13b471c3ddc2f56e8983f56aa2cf9555abefe94b64886e200b8f0282c9ed0aec3765ed285d2feae0d82332ed8b598358702a578737e92153ac0488cef17c78f0ae614ed7698b2efc32e878f98520e54acaa1a87b924c69399a6d800c7f60594ce759ce968b784a5877994c49c923185fb701df5785c36679f64d3f01d5dea09dbe3d3d0d09c0b37905ca112d61095efbb3ab0dde7b0b1ff23d72380dcda3b81581d75b679216b9ee91c0f19a41c84d0072f3a9cb4fbe281072b98d7cfe71a84f9081800ccd46bc92ae18fade501912999e1e5e874ae1fe6ba3661237e42a6f334ed3d67526c054626109b05c5e8361b2434f93142a5aa59838b7c37069a94c1ae6fe8f1e5a09ade82e2c4f37b2802a878b0e394385b90d2e561fc6cabd8d5be8c764db51a484a1a83199d50fa3d66bbf4a7c2c46ac5ba9c20e222464252fec492e4564a51e4d13d3111078ab2cdb1765c3aab0ff074da063801459d89336a4e4bd821900da8068fcc7dc3dedbf1af12b47bd566b0bf0baeefc11dd6039324e858de8d93f8f4ff99ef2edb5fcef8c79489e623dab20e40438f4636b768e961207b2add43a04880d709b5ce2b82fa2fbc77da9deff22003944d80637624bd92153423e9e649237ebd82ef20a4caebc1f9aee56896bc1c86ad9edbd9a263fc0fb1100b38f79066abab4eeffda053f383bedeb00c0b261a3f5a241bbee55767da94ddfa00e8222938dc1e6d1f35560a4ba2d2dc82ce534646ff9e60689377a330ee71548dc56fee7c33c0c84da33f5e56b49e0f1e674320ed8be2a7393433f4f874453b2764783e76013197f9df39a5b115d135eda522520a3f53a08385287e05b2b55be9b1507f07480f7681b04e71fe6e4c0c818118ff0d4461655f50b95b8ecf1dbc056f4bdf58a3af884bf63ec514780dd6261910a7bad82c03c722fee3be84c2cb4c50a576ab99f236294ea5cecd7f2af1f22313b777a29e8b523b509c3538e3c4b180dd3b021344d606f57bb55f85f130748d8cb8197045089501a8448d520db06346d5f7bac4458dd29688e83e6cad441664028c26c71f30ab3a73f62a33470e69edfdf97bba0970a30c78e1ed6e7ec1576584622c29b4b429677d3ff0baeb57dc62e3e22163eee981bb3bfce47ca69ec67dd0deffa141d2083178e38c21dc12668fb66428c6011e4638303779ae9ea8987e866ccc255879eab3d3dfa4110efb8b6eb893f515e693157ff597f2cf3880b2a75d48684cff0cca51d95e64f61bd03a4e81f28a1f6e5672b65621eb618d973f75066384b3f622ca791d359134cfaf261ddb2301d261f1a80d4e7f0256b70b927f75e362977b5a93b2709f1bbcedd658265bbc978d39bca5dec9ea312f7b1575c612135be988dd8501dacc8423eaa8f305df41492ad9772f8ca0d1b353785a048006d1f3db78865edaaca386d1fcd16f8b4adfabbda312ac700e3aba2fa5139f8277e5951bb3536a9391b63959d36609a9210238f1ec70933ddeebc0454deb55e42146c839a862e0f13d903997ac221c6ec9d207d028b7ecfbfd8558ca3543924598ac683d8c0d4ecf8a591922965df0e6aecd3461e61ef5ce56f7cac6ab5ea9bc40e53e3b96d6a06b792bf198faf2ecf49c2d3f9437428d935544ad24f2da081833cd5c08f7acb985255cf94ddb13fb6cdd5b04bcfe9f12d71d4169a3b2ac34ee412704c18040201008047d86be401f6063eeba6e25cb134bce3d971f89bdb0612bf9df1fd50de5aa01c3ac7f10e371359e76abe8b41e684c370a7b830b0c32d005327437b899af22be17768d09a595c1864f650e6b1aeaeb089abe6cf038620e2406eb3070ba8f80701a634d03fefd22326237048751ab88fd4f4f39ab88fdbf55bc4726bb7e123dc62899ce64b563cfbfc1391c3e91478ca531f2726984059a47b0171b201d3a3f8e2de6677651c00f819db7fcd924dfd0faf4f75ed2d6bf8030346d31075deb1d6a5d83176f77f2e4b7045f2000d5e1c68fdbdaa7568bf700ead07a93e06611578c71c561a8e9c37f1c96c9017478e50eb72cf2ffc599a631cef6f2999c6d168a8f42ee4a61ffd1e9f44d04e15cd9398e7b39e05d5d4e111a1c8bd190bfd8163675ba53bd4aeac162fff95373f6f5bf1add9029ea2e7851b25e7e92fb4c716a0f7fbbb252d4fb822bde02cb733a56742ecbe19082d87f52b2d4a40bb73400766b758ea01dde8ed6736ce84e40cb1bf7a9761118cdc1771f780de6fb072d87bdbc62033c02394080d3c1024b58da67c72204ab93fcbc11a0d1994421d992c44c487888e36a0d4a36799c06ab6b38c0e9bbd262a8c456ab9458a8575bb624a284359c67d20e9edbd1888558609fe2fa826262d2188fbc9a970867033ff1ab5df3675e576d4a33849192495636406b10bc1b853e6b4fee6e790a952fd36b0cbdb78552e82de73134423710f13ec3addf36c00b287a779cd1c75bc2d23e7b3a1c240f79fd357e4cb2fe925ba71b6212c45a8b6426737fe2d73679d4931f1174623643f567ee8b8f99df12c33f9e9e9711b9bdc7d9ad2837e2200e10f5be658bd70e8ae73509d02faefdf0226378fcc6c87c07f9ac814425fef44d1b086e5c61e56bb2a93fb14dfda97f6a1752198e85f1bbfc573296b96ae9fe4de5890aebe9364172f831a054b78cf0f204c4e4825b7106c5142a69525cbfcee56134ac30d36b9d5e6f41c710a3133add7da8ee06a20e33e05b37b7f703c8e32abebe25b9520c17fc977a0f9c4bed58486893f361dd57736fdda3350892ebc15c781ec106f88039b384d159264b585ae8401944419272191c00c6e533fc092d8a586686a1929dc666529ff1362b64324fa3c40d2bd1edc370430db140da016ca5e6871b6eb8b04b532a5dd2ddb271fd9d4ce438a0f62443fafbaec914a032dcb31ad4c7d35e7af966dc36dc2642b7fc3bb4540ec4a2d81fd0731e0d2522501c5e448bdead6be730b897bf70b6bbff1c835aaa8ad535eae8fe4f8ee7e730db897e1251411c8049f38f9c163b70b18b4962fa065e389f70b7c5c27461a426778014f3e738de04a0f38d061fbe904237f8cb7f2b77cee4232b34ed9cfdfa771fa3f174a6dd8ad3efc66d77a8e7a7d41514731fc69801ad60f70ac1211ba5395206b8b95bcecc45b5a0fea0f7ef30a1e1e6ff8dc8d08d8877827265597e8a2973ac14ba99893bef16c377ca5bd7b84c283cb11913f0e9e1af4aa4d4c3fd0eca30afc244ee66b860b312f1bb0050dd5e989ba3bd39dfb4b1bfd97264d187e1700f2129888c75699bde7f44d9f3c3dc6e4801172cefedc9de2f839ef085d501d1cce65beec1a3ce8d8c05a485fea453253c30e384f347b4eb30a0989869cf19e722fc91bfcabf398e8542e1b3e9229223b063415ec04c01db3947b1bbb99a973b69e28c45f0369727200ceb965cba6c1ce8ada10fe89dff51a3c974631b30fcc50e0322f81be0648c563d984b4bd027aacba5bb83ffb272ddff5e3d69de07336a7fcdf7a1a74d66914f6a3159cc94e8f082334ddefccb5751e703c83b23f251ad03b2ef123fe0ca6caede35d81d452a368f8d1e57102f090a2ee9ff37c8aa41fb0cfa626cc600e56ee665c7cbaf18a160ac16fb77bdde224e7ac7d1e25742a2695437ab5b8ab6f5b8bac71740c3a035f474c5157b4e8675c40647a3a38af7a151247c09c182af925de1d5aae4ba840ffb0ab0e43512ff481e48bc7a9ed601f5b7f774701927f975c240c99d326debe97e6f74d44f99d6e760b87ef182648132bdd02ff17a1c359c396814bd13e6769f35fd8aa37b794f01192dc5919d53902e5fae9c322ecc62de760ab44522d8d197bdccabc3710148f3c7ff5d403d0f2dfef114cecc7faaea0da1e56be1f3f66f1f922617ccabdaafb9adb314a746ab8035a02f60952a15bf9e8474afaa114e917e6889fe4c2b5021152d7a3d7d1dc599db32d4c98a9d815888057e4f5ca1bfc348e9523e9531a51983f5ea2202ddcbc3c95382030d675d76dd7a00734749b0ec1921f7c978a56dfec5c1a83d23ada78bd558b3017d607c6e5d4319dc433ad304eea90f07ef3428fed5bd5d9ceef35ac2ecd191c31393e60e0f439fe3b5a69a272ae2a42d0d7309ea998bac7f9519faa2f4b329823b39bc30cbcc9cce89398338b0440d7a3293012cdd6279da38c3a9fde2213767ec0eb1c0a52c7a456d6c09abe71569b4fc973fc17c9241625bd5113898f11b8faf20e66f80c9f89b241e57614a5c2c1cd58ca6112a4a9a7390c5620b32474d70820afc74d63b2633d1f278891bcb81b8804df81a3bc84fea2ddd5bbcc60162fe97fe93210ce97f22f16fa772c7d845e78aedf87ea0689b7a6b02dee066e2356cf7e8e78b8dcfe06e70dc299c298256dc7de819dd67c0292e4e1d6c0e4be871184d2f87f52ca0cc6957f4f0f9e7c5d9fe42817637a95c2335985f3fe43fe8c6d102cbd808b5632d62be5f6bb79e267fdd10a4227504da6d844f3f306f597b561f4d4e556b5977594e4b5d3e3b55430e2e015ed304d16efad9241d8ce03a1e134360e0f32f07570641d1478872645ed33496c03cf7875aba11e6c2f2ef099592a3141820acb66f826a1d9b79bd4237aff67d53fb5f4b143cbdce7fe5d6638d73317160007eecf933a03461a0748de477b75773e088c31e62ada896a8d429e0d3eed7f4a3d4b2b7c9c674b6c57ca6fc3f820f0e8abf858c8804ca39f3acab31913a42bd776b0f9688697b3942a7ab7a00591999b7903941a9e791af025e0c1b28e6ed995c529e64587525a4a8852ecbcd986b8694bb8f008f55f6feae543b5395ccf8326a132ab6c29c95db2f65443d32ffa33357e581761fc72a5f80641f21d48b9e6b5644641ab35f608aa2cb08a68bdc2cacd1dd6bf6edc8ef6d9bc677f39069b9d6955d145410efb105a20a469a8ee0326ccd9a4cf0585935f5477527ff3a2903340c7aec93e28e8a8350e5fea3a80bc7bfc772dfcd55631771752bd82962360c4bde52ad5eff0381943b43b438e0d3e1a3dbd89d613598aeb03e431b4196635c485ba0df8e41620f62e30307362008c8935c9c9eea5ac2d243274af099ed5b0607f2e3fa07dd615d554582a1b26887f33e4ea2bb3db012fef1d06fd9a1fd91b38b1ae280271b5b1b2253fb14dd4b469e4e4c8c09fef0bd93cca149430d8d7606512f15072038d7d4eb057ceeae12dd73e7201838746b476b316bd990b76760d868b38e3e02b379b345cfdb215e453d4691a42f38806c04d6d2b587343e4b1bae0ec63b43dde9536b99fc869b0c533040ae41ff5b05cbf5da2dcb868d143601d2d798a6623814f3f3cb43404ce956fe0347ccd853ee3502ea8d95fcddafb7393c99745e7d87cf5185e10a71fde39262023f3e1d3a167c6a8241d90c04fce2628da31e891b72df211b4ba77a44ffea674367e30e4d37f17c747b360a37e1b6e9362004c80f659c7e2e5bc2d24267ca8085f2b52073a9a3701bf2a5724263a13b0e61a86c869ebaf8ebd35d29798f5b8afe914d00140e9324462c2057778fad8a1d9ed637f1758d0edb71a7e6a544178efdd81e6f307a5e7404790ae0383b291d69a66dfbcd7dc68cd7cd243954b290cb081f1e6acac029ac9af5f9a1073e5beff3a0c4d5a0e5d2ec0e7142c171999c1f039721a20786c09fc2a37253ea29e96b3c742540b993f56e4d800a25e1050babeb2f1a7a75421b38af5684b81aa12b7c6a2b524f85d2b0d8bfa67f4f61786b2afa443508f2376e02749254fd808c1e3d09f412226f64c9bc509fa55461e4791843c6ca255de47446301fd0dd91b1d8154f5eaf3f570fc98b5a8cbb8694d81233615078676338f85c6d10d213adbc6ae18c31ce3ed038202da7bcb28005df86c58f673230040610bfddf914489dd8389aa92338c29e5f87cf45bf61186ffc95711b686faba1c806bc817d92a13c9788abe7cf73d2a842e4fa447211f41cc3aa0d30b96f743b3a6d04add8ddbccdc7fd4ba36eab1b669754eacbcf91eed95a7637175b26571e329c73d63aeeb9a299419384330cdae4177ffca44ad1a7ac0a37da67c6d2428f46972052bf84c6d54e7e13b62ac1ff2904c0daa8e49eeaa2a0b4b9abc60ed67babfca64b71902da845a10a37b942b9f09c043bf694fb58dee1aa588803e89f0a18f68a8b6c872f3ae88c856bd1bdf94867ad075e281ae42e6ebc5782ed0155b90b1a7b3a14f7119dc022947295ccb387d6b91f518870c6a32e2335af684ce225442cc7d0853ad05b81c941a20b2e1ef0e2da45a9b74e1aeefba397d4b83346d01b7da7466343c378b23b53266f701285b805f0c4372deb35734a9c79b17d9c17abfc05ffe5e05ac3b099a690a0e2a5f04c0556f23b7c9ebbce383bfbe10e63f205956283a5d7e38fb384542d9bc33e158753485313e0ae0d530cb0d5d3f336b98585f1eb393754a4e7fd760ea383a15f3ca79d93aa2fae940af4747a369a6471759c92f2d1a357b99e27dfd2f690b598c35676c44ccca6ba7419e09aaa890bfd747b65fdd38174fa8f0e8004cac6ce0a50a85012f64e13a0e5c2ac0b531d74ada1b52008af4238f5784ff46860ba1c5747918a3826c7d81b23135f06d9ced8fc293fd73ec3b6709af7c5c0f2277e5f95c0683fc2f2bc18cc0211fa669ebce1175c04802c5893fff96b262af1df1f739d4cc5c6bd90f7418a573842e5e62a5cc2fc925c588fdc082d4b37a373afeefa8331e02d96533bc3a514b9cec3957109f868c21f7fcabfc780edb68c237d7c71009675c10e69536ecbef4f51655a8fc30716e087f3f66e43d395ed5a1c2639cacf7531e5d1901555be405e6f221cc320be6a4ec4eba67a2036152a6fd49d1e5de0da441e1f0717e3efaa18a10bd0a766c62c362e6c4c0147047a35475724081a3e9f21e34dc68b8c27190f32ee64dcc8b8927121e34cc6898c23190732f63161371401f43b45d268b44cd6c7fb39321bf5a55e11ffbea7c87b2b8f4784fbeda82d83eb5bca8572b52097d22d736ec8428bd5d473daf513bd9beb070f65d24990912c079eb88b133620fc9609c843428c1e185ac3d2c24dca80723b3197b984feb80d3e5e9fd028f76384183a86e1cdf3af1e15d7d4d5130fcfdf2551cd8d9ac3d8fb8fee632c7a78f73f7609ce90c0592c0f672765ef563733c49b35de4e4c39f28180b56ce6e3e7bb10f7ca0b3283d9b82413427006a7ee05abec860d2c8be84bf80063a4e6f449c7deef855be83c6f9aebbffb340c8b1278f9e3740777d00bf59191e65c9273b53fc219503280eb64828974efb2ce53a33535fe3136b6b02725066a9a2342b789bc1632ae806354b2dcf5a5ae9e1045695433730482ad62dcc7582053fcad3a2cede277829d88279116d64068cbaa49699b3d11a941a1218990df28f2d0b72f492f4497dd95d0efd1d8b7f2d928cbce109b9c79f165eff7c67aff2be2f4ebc75c0086d5eeff1d3f7126a7ab045b67dbf325a1f1d297ea61206cb559e73fcdbf82ff280150efd26097416952fb5f14fee3e2ed776ce97f3d9a2876cd59f372bf7d1e187346b90d9cc8452b457edc430ea1fa997eb5cd19cc049a6bf896739b036818f4d8cbafb9f44d832beb7b405f6c2401a955d401427ac9d71fb45bd32ad9f6bc228207100087c0ee66a4513c01753f7bd7faf7791e7cde51c02d3b753fe1f5c84658559a19cb61751aab23411f0e355c875b62850b05555b03d015c5205b64a482979fb1badaeb3d076d2471f6a3655c30a1cdd1382f5d5e6424480c1dc4500948419f7f6210080f289f22cb7e8a39602ba8c91dcfc10902ca8c43a4850fead5c10e5628005171f319b69ca23011eb4eedd8842f77a3c3a8e277431d309d28351e0ca82709dc901f4928583ccee55e311401680afef7b683ad8fe6645df19d354e8255941a6439e361a7c2f9efa92fea2cae0ad8a0e638ff50925bd3b9bbf5d2bb99eb80813557cfb3b6c4d9d727d12d6605495ce898def69e4dd0e7fa52609c70d1c82c79bf9f151f05447f1cd823242bbf7b88fa1bab27bf335b1c3a99f3af3dd6b02a99bf85780e928528743c30866955fc3a3f014952c1d39b2e1d8c6f3abba24b9b0789f7fa7db9ae3141732a970495dc119b51df31974529f71df85d96f5a568101c98d85a6da38d2525e7febdfe44b75eccd01942cec89f73d5e0882222f8328a61d04a886ffc0e303716c5b1e2376269183eb5ff2d650717d29888fb262a11e3763a9c9c01d70703089b9a0d72ef59bf96580cbefcb4b091b5e9cf346a8cbf79cab14dadb23df0325755b8b4d711f0e309ee9f330f87343992e5955dc5fb0d7647f5e8cfd9c9eaecf76ee578850d371ba1bfa505c18dccdf8074ba0b59d4ebad9444df1e08dd2c233e65358994d5e0dbe34fb76f20bea43187f5ae6a716501419fef8f1c30ae7f4594057f8be021976ad8e59b1efbfadbe61baa86b2ca8fc04d053f252c85c71a0b1140484b9344d08482458b7f5a40c5a8fc61fba7cea71e32f96179cbbe853ebd440f007134ddacc88cc58ed0b7fa926e3f2e06d9ba94cb12e7fee79fce0a6670f3c8099550dcfbca0e8ce591b3d71eeb238951e48f990e530ea9239c81eb611599a1e0690073eb51a827da9acfc674b6c46451b77f014a07dfe0d984134dbd56cf5743bd1c5925fc6ec11f2bff4861167ff557b3a0de542c36cf13a9c0028eb99ae6bfbd953a31ca73c3bd9f82e69fb006195ebe8c6c3fae0802b6003e543f15e565e0382de8f3bb912dd0cbd2c454b42d6435886258d031e7c7e5fc7ee361665f10a4b3b8a470943fa3ca73ee6e40b3ac4f43590fdd04b44a0ae297a18476591e4fb873b867c5baf42007d6aefb345aa418d96b023c200a0afe7d87c8cfbb7d446ef1ff0f5a755afed95dff3de7f321af0fa0624b80a8fafc55da06f392144e2e7f0f656ce1f760272d1802eeb77a5c4b725058991f1e6443085dc60cfffa0121e4eb3e7afec976626e83eb195cbe350472990bfaf7e05ee9d023383f865ad81ed8e56b1ab638179c8557430fc37777a529bb55239856d9086a26a2391c81b8efc82e6295c1296c0f52e7a55c804a47c193d18ecf4799ddff7c1800d2d62f1d14e9fb8d2bfbe266b64ec879ae17cae72defe0462cc401e9f33e7c25d0ca3096f0413fa210c1467b06b75f6798d9bce1d42b4935dd0000b8baef2dabfdd238b58fddc4feafa2fe4fe2651a8f027eeb75ca3554f099e6379cb81b06d48b50ea04722a1ca7d3e216b07b45a0b3fc3a49048aafb40c70bdb5e4198c2a82cb6f71131aaeaff5104377e658363431b22a720011483de20528f0cfaf2cb59be4f5999350627d558a73fb72e037a964ec91abcd392268934eff7b30e91bc69a19a0a6349721d17cbd39968c381134127934dd2e89fe3b2954a2733b3b3e94feb0320a06dc1db64f7104363872af5e5731d1130494181100490f4210f9160b87c0d697871a05843f14e7e77bb54b30e65c3a1d08b8eacdaa806afcee0c7a6104f5a7dd3106a35e74fafa56079ff7c63a61a49b8a37a61ab5881ec44af7c9c5896c03a280fc3ac6e937b2252c3d2ca024aae39729fc09d7918dc765d5a503160297f09a9bf2b9a7ddd07cc83bb21127c2e4c5f95f908e37e691bcae9667f00821e6349b6e72c86e4b99277bc5e02b5822fdfeb591d873d0fb3cf3534b4a63466a7cd421342b06d0bf2d4c874015489fe523321fcc192aeb11dd0911b57995c3ff1dfb349e5726c3bb2743488e3f5483372c324afe709dd94add32cfc16a36117f736f7e752dac8e6333a60d09ff42b30ea4631414a944dcb48eb7a702d13205b69cfe592f0d8760403855572a7f14110e16bf4872556a454ae52e9ff0afeca764e9f9f43dd79e7558c0affe2cdaca59152eed87a60ef3ebf102c5eec03420cb216b13e465b955ecbbdad8636d40ecb80df49437cea7c82d61e9e1274a905e8990c160225cc7791e97d3fb8958086c5715039ccfcf6443a36fa9fd99145329fae575b4365691f1eb85c437541e01ccb64e692b94a4381794b828317377b43ca05cf989cc0fb0849123662d6612cc433348febc617409409efece5d30e8150d82290a0d493e5ee86dd7fd3b2c0c94edb7535c042a89bb7b10438244b001f118b7412eefe374a9df1276a04491b2b0d4ff952336c476ebc0fa4bf3a80c303e11b6190c3787cb3bbb131ac6d71a15431706f36dbd5aba324a27a1c7f6affcb0e9c90cd912517f6fdf07531490747db4c84df4ca3e89a311e36677c8a8b9c5af46096d1420a5025a76a0668febd654e53f87f87b26ba554432c4d8458b49fb4bdb1fbfa6f3ecdbeb1297d27e02fb95192b632ba770718fecd061f941c4420490c8b71464f6a965b366d3ad81623433d4777ce921837e6f3bc63fdb9f632dc91bc0bcfe26b2fca0eda6838d8570d9a9148e9170f712c07ec5966fc90c79611d218257811b2be8ac4534a1f19c8a44f26611dd53ad867d90e6ccd765ba4e914800f5d09d3df6e746d75c52d9db92a87b08aa92c35354b9e4e4e683f9bb4d3cb0650372dd2626909ce8b7cbbbfb9f981037d9c36bc5951478ade77288439ef9f632329254992c2fff491ef3e3c2cf1fd72081ac3501f95c83bdd0237e8b7fb8542cef5f275a586cffdc2eaf3c719b67d179e2d84fc78ab9e9648b0be1217925bf2e8bceb24940615169610d5507e233552c0e76aa0aa92456227b761b6c21f404a028e0cc7f92c458278013c361b06df77516cb97b2f8661fce6b663aa1e881d70d2f8ff549c19ccd8e7bd890fab9d3dc1e8107ce654859b48733e1b60dfdb2584c1d4fe5eeff015caeef0415c7cf4dedf921529fb1a2869e7ee2c999e4051482c950ff90b19ffa435871ac2c99a296208ca6a84c255724520071ba6e838f535bdadacc335c10ac8bc640230837c683ab7c17291b0f32cca5cf97c533429beddf16cb3080728b6505c3fc34ecdf2514ed70f24032389eff537e563f05ff765e3010d2f4b9a5260a43b615e6c3a575684e5cdd85aa18798f3c0c49a58470cd536a0708f37a557b98bcc90aa8ad399d9242b8f85fa13a9b100e5dc3d6a4f39cc80838efde004121cfcb51e52d8c31860eeca018db92812de717a1ea7b6c768c53fabec30f5623d7538c6c944dd33686413cd52c862280ef8cbd5c8490375af32b6ad661ad352647d5ae23ab07e7c34a499abe82af730680446619542fa93960d2f8792468b17c592f92d5b615f370aaec132ec5fb8298770f9c100806f47758c7cff34b0bd65136b6a6aafaa7ee908b1effa50ffe1de9f4cff0bf2018738fe25ac4d69424591be4eb9037b0dd854822808e613412f4360046ec1026a30e7110856995ddf19d459b36c375731a2bb1ab02b53620f1fa17c8b9588ccecb5ac3d2c22dca002ad308c85cb0286e83f0532734a8cc510a43e741b78125a53874b3956094561197565a45a87687f2a3428cebe7f31a44b862fba39ff83f5a7893edb51ffe59fb33a4b5e5578d93ff052851221edbca3eff4c5da7137d767d4788199b7a8d84edd7c14e067b87a9ad9f90e555e11e97ff2ec3256ee7a8af44165482cd7a60f5d4beb9da82f078eaebef12908c2c703730fd5cd997bf7f3df434d16af7de5b69a3e43bdaaf57b2ee93a354481ce7d636c4a19c5b8f09101b100dbcb4bd1bfe383c1d4795650a54b83430982c5da9da88ab284acdb65e8257064c4e08ae18af3cbce7687dc8a20c0dcc4f948b765f7cd7f4d9a89a7a62cb9d92e8222d165830dd4ecb3a06e87bf9149b1336547ed0a161aab1ccaff97af9d241e5bc944befe501d5144ff75d83b1f0ad00718e6e960363521b8dae8221d40c27539227d3b0e02acd794f917d4bde3c79a207d51a04030281402010722ef40539331abdbd1db0b72a06ac6cdc96638b8a4ce3648bb63e0844045641706b0fe4b61ec6aef69042e615e84941fc1b23ba84438b0a23f1ff09cfe989110cc31292d26e58692210ff51c3cce8876f3d81de3394ac536488a2fd0e0c61dd63a4c7893fffabed20231edbe8b63ec394af6a6a117feb2310ba3e951304522373d249f2bf6b124114c01c3101e4a6b8e5c70f6b83be3c4a768bdc6e652780e7d18f93e9ac1b571e6ce9e8f7c6cf9d36ec7c8c20396303ba77e1df53390c5b40bbef33dcfd606587ca94cb8ede7bc8dde4e156df69dbfcd066c6e7bfb6794f66809e5e32a446b5ec1ef1b2b816a1a1d263ec2e53440a85e57e9f2c62f096040d3fa2799efcbfa704e7bc803381e6fb08dfc62e389c6bb9d1244121a7fc5593bc50bb235f73051458320b033775e0384e5b74ff7d5740e4682282043e28bedecf42bee627a708ebf887712f63d23890ede63fc5f0f97ca20949fbdb5f925f5453a59fad104303e54b1702b0daba99ff010cd7846d6f2f4cf62ef99db39f5a49790d8d2752550b26b8e9ecbf7d4b25b7930748917039f2f53b07e3867410c8cc9b1a3c1dbae27954880dad405529215c0e9240452113d184c914be0e43cea1f18a54a4c01d640f9fe2579101e96b8ef552fc36f0b9f24489f4a8ea934655ed797bb46429c40c9c51fad3d7c187dc99f7b130eb17a0ba3d57f5a6bb0de4d8cbf552abf06a4e39b0a55d3b003463948e7fd475113000c92f1c43caa499051cf6457d4fb863c7fe692b5ce44914e8369a296165c71d62001eec97cc67292024067e278a7ce8eff142ec51540316108bc439d4a6b442a105acd688e0213d5208fcfcfab47bce4ebb1bae374ae6e0b55b053f9b3aa49e35740dd085da128d93db6dc4eaf6242df27c34f710c1b4c2b5e8aa7d9f70f68c1a380266621fc0eebcc06e52f4c0ae425e6017c1d13e249e4538ba14a163351b2410f2814e017a1d12d010e1f30d83351de404091a6a50f34411f8925c61c2558ffcbfcea7b04721581e74bc5fdaa499d9bc4f9fe215b73e39e7d4d997e4ddcbb24e9ffe0ada1a6fb2e066a539d526d6acecfa4b8a1c0f83e01f12a5370f77636cb8d20a326419ec889ec6d630abf81cfcb6ec55fc61c605089f79551a9420ef50b3185f84a3b0dc4b1ea5e4842eb85088fcc73f7924ed24515d7c79010b954a99b49e131e3214d3da5bc66c01d97efdda76ab030ba296176e2580688d38ab9ea87fe0fa9fb7d6f6ef853d04ecd4e80243f631e5f6fef554ac3cec5be2971663b63ac67eea43fc19f72085cfbc6c14c4c27aa32aaa07fa87f0c68c459f0b292f7beb60d41fb784a67a594d7ff01dbdefeae1f1af42c9148f59d794a95df70a0a405dba77fa52be1f6bd5a7d095c615293196794e766cf1a7a0c7f9e6638266d902ced133b6e65bd503b339f4b78f9900fe45f8cc7060a6f9af01af5278ef7ace33342e4f15a25c746b48c1a9c3492ff113ce85a750596ab0047ca44d9daa34e84c81733525ae2b30be79c0e3f1096bd9f4ffa8ff3a78708f5e1c2c5381d1ee00061a529d62515ac702f8f5a2cebc35b668c2ba179405f543ec0c8dd1668d8d20b6005552b2499f5568b0e45e53c62ffbceb60c1dac99ac74577d38433cc25ba7b9c20ba05937573c5fc2a7afa259b460799a7e9ee0fd02291f3d64f6eb35b87cbdcb8c61e0efac06363e79b7d55597b2d658781362826d704d9bb67ea8ee3ae385c6b9b699ceca849d2e7b073fdb0884c91389d206880ac234b59a088d669976b3a22b627990f07a37df5fe3be141758937f5a7a5fef818cad67fc341da5121bf2b7189fc82473fca641b95f16eddac7e0e3426bb741171dd03f75c8fa3127213b04601cbc90fa9ffd714f24faf1f0c8b22b6ae7a64c3cd0802c8d208b1ef9bbe1521edefd01520867f370dad73464ee425b38cf3cce6518c28edbdb58dfc247a3e40144fd2085c67ccbdba414d92c8ff3ef3c267691baca3f1c0d1b49e21786be55e62f9c006a19774bcfd9e7302872e14ffb506a91f5b14622ab5872f6854fa5f6e36f6b81e6b279859f22ccdc1d8081d0fe8f9b6337f3a093f9d9cf704d63a0e697cc21dae9c6fe6470ebb5c8d2542b606089d3d2392976e9f281b72fb9dfd80061736b4db2765af9db8afa21f1d598e4a734c37f294c1257fe44fd0c812b7c41afa25e428af3270135c6de0adec1d7f5c59f3417bee3074322edf00137fa0add5e9705804bfce0933c8aeec353153431a277fdad74c9e644e06ff2e8b4a4ef1697215f3cbe5c79f8cfc0140f073d06f737e1e16463344d87aa16ee6bfa56bcf9880676443b9ce1fbc54a1f0b2624ebd07836b6d4bf6c24026f560d07e597bf1b016fdbf4f7c712388c4eb0ee49b2865e69e42624257b25d880fa176cae00ba9ade5f1e71b9389fb3af7cd6e95a2244f34807aa62dec689f7b77a605bf4d9c78418415f207a518819d7a7ea111af08b47f0cfebf1ae08363e0c14a01ef049d51d054da9d0bfce042013aea303100549d3ee3d6688883a66830b4ec2fe8dc88b2266d2fd2c113339c5e829178c21f9f6771da1a8eb44f7605567945ecf94ce0f53eb2cbf9af40e1dd39d5b88a11fc1ce72ce8d78ea36ae87054e47a12da2a5550d0c8b5bac163f997db517712db65d7a627a4e4258de2fd84fd5cbd0652293e39506005b8eb2eb198765ae85f68ce74f313790934a82c000ea22236618d33b32ade827e5bbc535cf1bf23a92b01c1484c992520e8e94efa600a1ec427e8438ffbaf8dca17005d6897bcdfc4f1e99d5d89a14ae697276868348aa6cd12f7c2f35c401728f561426cec2ee10e5955922bea73d2a6d17e7e13f49b43bb52926b1df5566004111940f9f48efd0a52081ecd85ed5b6bab6c6573c340db1f3b8a2a093e35342f1938e451dfbee10015061db3fe2337e4ff5337c9cdd690adca69ab927a37837e3116e28ea210f81b3042451f90fddafb90f4e74980c77903fa2cd9bda8d79634d3fed511ae8752a990c068b73ddb0794f4c522f45a907e835659caf415bc0beff0a90403bc84316205383deaa0729d9432625e3c7ff525170cfdfdcf530c82ee266d2bb0cd4be7ae5992b3b8cdbb0acc6139a3a687a0843170fcf2534d3db4241218ac5adb8261bef86c964c1566751ed9784b845f823cac250385fa6b78d7bbc7aba25d9b43aef03503cd9780e7675b5c0585ee78f4e74a753c4508b453c4136a7d7b02a3f95f27705597c1ebb2765733bd89645fed8f38d5318bf66aa3e647167a52b8e625659ade410e255b547df3784fbdc441c6147ab0fde58578cc85ad12997282c75ca29daf8dba3f01cd509f5b079d0a9a03ecad59344a14de6475fa3fff3abb163924c95af6397e86b086341f2332b977b284e03ad1304abf8ff9c13d0da6ee0eee169888ba2d017823cef9fbe28e2b510e63e35c3e7043157ffedd6be0db2b6054027a40aa05fad49dc244bf40e792bb588ecba2d52dd809580dcdb970669546b343905c8f540dc36ce59e0c787bc80bfe7976f58c4a48c4d28a0fd365ab52a54125d2ceb4f6ee093b28b2e3556339432e22c136d9f2f50a13b34a4ac33a336b8bbff9421e3eb04c59accd63ed9d6041b7b2f603e05611ab77457413f43f62e6f103c1a53c51018f043b318a6c83995f024e9c9eec18973b97e6b3fa43f66fd99888bfc3f1b43610a409d3ac9b278429b51b67f3a3ac0be32ad4bed4db234fcdcaea93ab8d8a033d42a2e4d5c2584b5e56097fd3746263a09b21d6f4360e0eb635e9bd310c65727d376de37bed27d96182e8bb533c68323dca690856bb24940c70eeb970d272eee8aff8e777bc0eccaf3cc7d5905eb8ab865bd66caa464bb790f321c080604028140a09f81a26934cd427629f0ebe0a14910f4aa8d01860c0b614253171ab749f342908e351f12e2a2b7df2c4ca1bb83586069e08a11ed2d3a662556dfb6a215bd97a981521a4f5f2a8a32284746f8cc1e17087cc62e433ab7e3408cf2907848cd6c4d57a228fa4ae54059c0f573a00e70f2fef6eb403d8356581445aba549619618320ede04925e456d8f01c9697bd2526783b64ad2243534f14cf213249d1f3b7722b5fa03c878f7d2d9ff2f4c17264342a24d6e0cd436c9e95e4c01f8af8c7e3cd3e4dbc8a6e639e9235b0d4a2bf585bb589deda24663b4689a54dce422f0bc3f0247347afb4f29403897f7ec4760b3157e0cf98319a0845b80126681d18a11eea038e100d0349640a18f03bbf702bb1d451171ebf927422e5aaa4bec412b24be0dfdbf56c710e8d6b3d0679681a1072a4b23ee6607b45ac8ad673250dea7421df7846e1547fc2eb80c5b033a1ffcb543a95fcaee0e3fff9d372147f9618c6952fd4ef9d1cd370343724e4b117fbc1ed8172dbb58f7797a828c89141ba77bbbe064a97f9bc8c9328b464cebba622ce32d71124050e67aaf8b55fb7313c2df87412043d1971f059d48f0047ea4cb095670c913a5d7ea08b2667a03727088b40c5b0ef2f8fa56116f25004970d5132bc12f3f4265c1511521d8390a7d6149f973c3c439bf19ba940307011971da04eefa89c36b3b946878fef50c79be759522405fdd3b5900cd7c2f4d68dbed256da9eae1f703dcfcabed83fca55eb44eb0f13c6c5c49041daa7267d697ba7ef34fd6c545ceb3063aaa3fa07f2a23d8256c3e7a3ec94fff9a18cc8108efb74d41dfd0c6ccc31a7ddc1c30ce86df0667eb979995b63b0e70bc647a8d53b668a1e3589c9442a364404424f5a5500bcf96ddf0b5c8c42b593601ca82429ed34e4d5f4cb414c5391753a6320b6f58d91ec1984ff00322973ced6baf11e5fe5ca5bc8a718f729ede01e664f628d8c7fd3c1afb25bb0192fa213050f8c26209662c2f07cbb19f968b7cff4d9be5f25c7377c193f397a1dc4a154508e0b193a1e26aeb79528651c3b99a191f085e76bc90853719beec52108cce45eae981b106c18008f1bbb1e03294aca6a01e2c47f32f6fc39d37f97742448e0cb16ebe61d739883dcd1562b21a141fc9352aa0eedfab58253d422b01965e0cb5159134520be6bdb1c920138fc09dfe6491b0d08f0d1491a7ffa4e804544280c0921d45eb46c1fc4b26e178827b6f1564b226ff6294c9a57021d7a2deb8192f02a99c7bfac14a223a484fba77af463944cfd04eb750c2390caf7627305091f04d8514fdc5b7abfdc08c4b051825c0820bb9694910252ab6dd7cace8b300c466870724029f354ba5ad196d1ff77f5188b57e5fd211c5ee7f4e5401bfbfe147c180bbdb40d0e733b67cc1281221a9291e70bb9d7e6fbe1838d395e1f7ed4c96136a70f0bc798434596630dac9f0100758e8f84f89b9cdcdb736796406a144e60ebb9acc4fab7cf132fdb1d837f505830f305ac020cb23e8b8a4b0e77c2b7d678b1996bc991ed5417c01b95536ea90e2cdf6c0fff8dfb08d096c3a6201eae6eb2055a3339b0c5db5b337334378af3c072c8dbab3881c7c6164789191ffb38249e371e1e9a7779be4b88eeda3bac47f968d9e99b202661e3c06530491758009192e8d5f10d141d07467ea207633d9907b05d653cd2995940c2acdf5409e8b05eadb1935d448b3a52ca4100fc342423d0ea39e6221164064961a4e9f482c359e133709121bcc3a525e0d95dd9de2686786ef50a1ff5909d02ebd424642fe46ff70da45ef329c09932728d1799dfc42f4fd5b25539a1519187ee2d6678015eeb1787673b58b241dfb4547be982e5fd2cf1d74c769fa33383fb23e3b768d4abfbe23ec34f049f9855f95f3866832bfc9bd0f5ac27616556e5099a7f3895a92d663714c1b4623b000ec8e933b80aef0ff5e97b4e25150df0daa31994a2ef3efdf207dbe41b104e1a92e1bcf81f95ed190ebfa7cd90d0bcd92361b90da54313de1924379fb5c583d21517a0178eb669cc7ecaceb3663f9b9f5d35973bd77cee945b368a41c45eb9faa92286a4c9cb7d806f94b2c51ff9ef42d2bcd5a144dc3d209b97482f6c8017d265e86c000f19385cd8d294ecf36c9a2164f340d6d46e20cdc218fba449559dd82cdab9414405d399937b551bb4d5fe23524b533475ac4b6ac6732431e34fbf9fee419cd8fb1bb0394cae31950b7664140653d2941dad8f02f63eca1dfedc505a569ecca54ed4d0d7faef6c993e7bc72271b2d1ad733ae84f084099951a23c36002712bace587fcfc3e95f4ea87cb069a9e3f41372c68aaa90a04cac6dbabae4d003a1ecf859514718e92ed2e2660ea85a0a26c95e0eef6f4d98d53318b382cf3f2a2a93824b0da782c83acb0edf2775ab0ba46f0849ec9871dd8c00bbcb9923dea3fb5fcc833e4237f23f7fdaa76fe84d6a67d788bdec4e3f58a0b3c9967fa53f0b0570877d3e4a8f6c249a60fcca9e7c3d4670fd05a477dee1601738e9894ec29f1d8650d4ba86a6d23ba5d5edb3e5b1355c0d6d6459a6a8334ca2beda4994a5d8f74df30e4cc850d0139f0afa5e3eebfe1b6a9ddf57e1b847fda10d34ef536b441793a82b4bb726a779012f13645ef31300ec714597f37f7bed326fd1bdaed6c0d044ecc4b671bd553cc26263c533fd3f7d07ae5cf55520f0b7985053372725d85c1ea2f9beca7d1c855b6378fd671ab4954b78e317bf0396fd08474d946ada01c909ea9d64d27cb424fcfffde779c9e30d1f408a65799a63aedac92588b984c24a75c13d001dda57b7839a5425e24de3bd8922a3d6daa9bbd14965ec767faf7fefa712f1e83d907d100c0804028140a06c28e4393daabce5b7a782fe8ecd011f1d5abd16e235256571414e9162a9f387f61f3f27d65b8c0face3213050b9b5fb460332e7b5fa70eb5591e28852f1209f45f88df82249bd6812b488210db8b7f06f10f233e0d1ca536c92a53f776dbb7810d99c927174fca997eec465094121647d4bdce31093e472263b5316d19d503f5fa3da7cc8c1ca2cbbfe561447f01721459cd40481fbcf56aca93a040686418c39a3c3068995ab0cc156fd957f728a4512f5e4e4e63486a31774cad403012422d977ec998c1aaf50be6af724d6aa2a18f1afe26ef0fd5a593ca76bf2fdab8868f357ae28849fcd28a8e658e7dc71926c2f599ccbe0e472ff4702023ffa659d09ff8d6dc5c3fee8c4dbd3bcdc4d2c3bdb6a547fc68ada1d3ef50787835c52fe673878db2e87bf2b320abee17e7a42f4b65540bf7b49fae70a907f3bcdbf1738c0f764e8376b8af5c8e29fd2c491e8eee976387ae1bf09ae1fe97e59f11c0feb4689e4ce0693c0d047cdd1c14c5490fa8931b6f8f74a859ab53251023da72ca23b86e0fe7fea0d4b006ffc8ef964ff6e61080c901f9c4b932d75d4cb952b7a5c9b39f5d62905eef4a54cd3a490f2f1947dd7b0038233fd6c39e3fe0d5724fd79f2af354c888e83b2e9729648a5146d3a5a592059fc5201b12b11816cd58220510d1c2cb5f85004801f77ac522a53daad58152094537eaa14b812162dbaadf3654c71dc1ec7818d0c107c3f90faa3e2f85216c3534a1ad9d9a7c17021e83d3f0d1cfc0dbccfd0afad8757d9318a1f627f2afc8c2961fcf277305a8614ffc98834af2916ad707a725dc470a57de6ee65a6823ecdecf9217175080c48a639155a1a952e3d16528d5bd1edd198c556db067f9d3b540c433b8b754d97034246833bfcbc2a9cd2c838f824e677bae15fde55910b30fc0ee59fffba762c8f24ac95727ff3b15d7f0e0f8550c4786fa4cba5970a4cabac54e9a86dc12afbd6ee3ec1f1f6e4fa20097d18810b35f1d0a4501e5a8a210e4f61a1d3364155f8e73154cc2de037d6e4a365146a062a11e09461f683966601a691166955181e0dc5a747705abbf669784e56a7ad889460b807ad99cf04b103fa82d8128dde2ef3547938a428f737d7d72aa28c1f3582398c275e11c1a04ac4c30b8a6717a3c1ea6304e4330d41a090956faeff5c78e9177889cf005ee8059e1f1c0d83bb72bb8dfe0ffc7beb41278b5e55c5f8db7ead0ee1cbd458e2dc72a94419b307ba37022d8322fcdfcc35e5d0e35e73968e3faa8b31067d6d0c90b1435c2358d53146c03fe44ff40b1ccb0bd834c3fbbe233ec7004a82bb70ab433b13ca1e4d19ff1d93a88534932a16c30c4d0b845360e9a69ede0ecffb850c8b25ed92c8302b2b5806989659fdb8381958841f12ece12d8975ac0eb1e0fd8cd17b36c889fc95755a0312199efaa6eb08a0f3749afa36e3bf95fe2a74554a93ddd52325834195188d1e0f70c641b729678d9a6d0a01368bc15a16ba03b97ffdda75db37593cbf27d788b3eda82550cfda2b7990d5eb796f7b6a7a79c9a89617dfa54f37dc368397c7aed9a9daf38a4a55ca3f737b0fd15eed995d2cbb40dd79256f2722b473bce549fc9b541a2f39eff6dd7df5e602e45e8f36f827f7d1c444b47bd5067d467c0ffc70432cc402bf71b1682851fbf9142c251dff0fd99574e9b30ec586a738dbc6e019cda9289000e6dfbedcd5c23ffe58ab1838bd87f727cb691bd134ad24608b7fa17d7f4e62e6807b2dc506647de002b93c8dd3a56a4b585ae84219e09403e73217c50ab741178a131a4ec5d31f4397a4bd2cdc0f43cc1a8efaae81a344a3d42c23f19da8cf1b75d3d7e9d7d3dcb32d7e28b3018bdd40782c8538aa3bdfdf1f978bb9f64a00d68c06b32e023b4be4fb86e6a2fbeb5b61cf6f506ff9d177916fcffd1fb7bff7166c38a6f9d5858bdf968e3aee7cea464fab7c3df2089a71d5f2e711e4fe1ebf0819e421594bff1c2f812ad20353fc5f82fdff011a3ef8f1d2a9f7b3d32f716a08bfbfff58f401e3e47618edb4cf554f095b0fd8185bb73f7322d686d7fd75d22e157795500724bf14c17cad2afc639b6a2b78470d2b55ed41d1f98295eb85848a5bf341df03247ca1452d4e65bc66d7d4184979bb0869801eb1e52c8d293c942fc807e0d82498b4ab974d28fb8e27c874d96d65c7c2ebd1837a06820181402010a8297058377efa374f03b78a353d5aa27825820199206b304e48839c3c365af8b4965a6783cca6db457d41cd43d8764d05a05af51f9f688e9cbca50dd62be01573675127e1c863add0faa49fff5625336135e336d8362007c8f7489cbe4d5ac2d23fd7847a78d6a9ed47d3ee87f951ba74ee1ef91f8fa1e768cb552c4ed64e63b297d9f42c183ae38abf56fc534e5e1350b43301c5fa450117824ac99f22cefe8afb23853f79257ed8c31426ff084533bf8ce6d25fb8314b652dbf2f05308e7ba2baad5c4870c6c4c0c953f846413e17ae797ad7b58971f069ecff392e195747d084be20a806677747383269ad9e2cfd32e14fee53fe9ccb69b9b10f33b7eed071762125f8babf19f585820b4702570ffd0c19183210326012a0a2d47d9079277342e698cc1199433207647e90d927b3476697cc0e996d325b6436c96c905927b3466695cc0a9965324b6416c97c27b340669ecc1c9959323364a6c94c9199243341669ccc18995132236486c90c91f94662b0289fcac97c25f3854c1919804c2999cf644ac8149329225348e653206bd1a2fed034cff4f2b7d37d7982e1d1c7f587388e628e97820573dc43be9fe37bea6743003b1b15a387df4c2341ee173cd278bd32ed80bb43d39e3a230fd60b12749d794c99d060a80f30adb92daa0dcaa7d26240eafd1b82e0e545767d638b0d7ca7c2c4d27849145f3a0aa061d0ba5bd491f9dcdff20e87c056e24ca8b8d87be47934f5611f5c66c47749c77f3b2c9208588a1b0ff3b73c68afdfe6e9ad374dfefa4fc5fdffbfb085be91bcf5b7e69f2e5e3db01ba77bd3905015b4389e36d9a9bc3fde09b5d0869e2f332c43ebdc318c3f43714b6c821f7376dfdb9b88d7e1177240c5e18a8951c5da9ab12cceca09d836ec519cb27638ae1918444da552a88df2802b30ff1c44179a10e66b708525d2372343e355c6dee4e374c39d3425c41ff697f37f80b3ff221e0481f015fccebc6a1b3e534db440dfcb27f9090ff4a20fd1b9fe1ce5b96da58be4c2a063fdd8f19b7434f132b6fca17f55ef0fa8c5782c8e2c6059cd28484ebb40f514630c956f12f28197cd078dafa64ac7485a15f20a7d81fc8d0c78221c89889ba2bcff1b427c30f66a9af4ec1266525b53d0bff1ca8704ca1113aadf4d117a3b1375d8f29cf90f1bc6c2aff7303ef986339644d28de49b832bf99908eb72c3b3231600e44f53a009a7efa17481b5b77e19cff7f4a7b7e9ce9582842908d19f0d6f89e032e9e01cae00c366c41fd52c2aca1215d940938df68af8d9f5a6e1fc544e0ea543ce07decccf78780f90709485f5bcbdeab30ee5e9b8fa2c56972ccc274b86528af61de26724676305dc578ae06a41c02daf34d85296b179afc1da1817ff3de9c993f14e88e77e4d02b09a08f9db1b16a856ce59252c69dcf10e826591639bca7bedd4ceb6bf16357f7f9467e18e5ed2b24cb31c24d3c8d2fa8b9bf6c44104004334fe479853a8953f24ddc33f4c4d05d5ca9282c60eae307d3c8cb02bed9b01603fc0f2151d37a4f907e66dc50ae31389d2a426f2e48b75cc8d27d5724e98e984e4d77023a781d9d25eac49566b0e7420380df86761dfce520a26f72ea7ce9f7615b2f86703c4dd91180eace16f90baf2feb3be9987383aba974fbd88f7e2dbaa944d051bd36edeb42c9e013a96422dc8cf8c1ec776dd80f00f0a8f9e747541be0ad0bf8fd7b264045f82eb1e68a8c157864021cf0163725a309cc1cec27a1de6f0dd0b08728e95601b4edefdd9955da224a482522780c1362794af351f40f98633daf840811f1496c33d184cdb0f32106d6582b5a4e1a61fbe7ef4128626d1801372c73d51d587ec2d32529bd79aa16ee75916ecbe1bd6ff2ce63e8fa6755f3d98d329ea034d0bd6cbc80559ca7e80661cae9759a373051302aa545b26cefdd9a11a554e5f26c236c340e62f32ede73c9bbf7bda755051cdee8e25bbc536a678d6946f189bf17c2122fab100aa34750c7efa7815ce0585db5fa22398c62b2174b69d3074c441789bc729991f80f7ed7a7a5d306aad7125969f5ccaff30863debacb9b627a46a343b4d5cb2f69c9707febb1c7c9b597af419558bc4909c9c1fdb8ed646f480632a7ad6331fc14414772397450755cd96fb7b58486b7ef5af341b3ef1ed35d5d6ecea20d5f2ff862315dcb3524ec6f9e50fb65b796e11fbe4f4de8704091d187088062c65f91d6234bc3871f9cd77d785d52ca01ac06ebb7f9971d2061b46620cd6ce93e14b7c61e3f684dbb65ffd916314c81c7962ccb24f7d90691de95ccf0a750e784a55ee5f2df1edc0f0337f46d91f3af3bed9fc23b3a7774d0768183e0dab71c0c6e41e2cab4db9dfe687058d22a6cbdfb84f3798fe75be44c3f0158a4e472a6100efe8988d8160da29112f8f9604cac59aeef45a1c2a74803b72d4d9b295f371bb07b3050403028140b75e6d401e500a8471a670d8129616ba3d275306e1c730a1ccf57dc06d84619a092dfcdea185a1b339d048fde68a77273b184bf3c520426c1dce2a10e54f4b9e3f31ad7d0747eff333e89f9c3e436720b10da93934de26ce2aacb738e340202502d3ddbf067bd712271f5bfe63c179b9cee72f606f22f96f46123fa06f29b0793a9ae25eb0011bfa34e4b5206ffe726f91e01d809ffe4d386fa41f512dc5a78b63287e665806400ae47001527bda304a332c5beafd49718e0145ccc6281a53289a12ebfbfb1da321aa810fd794078f805fca13f90da8fb9d89f69ae3316003e0442b3a673b8afb5ee04e190b0ceb11aa3330e4a201ad07a4ca22b8a015ce52cb5a944c2bee54fffd73658e362afe2b570d0b5fca7b1e03a7a73c38cd155160c1d3ff7a50fa578af69b8ce8813df1ea1db45345ba535f7fa2b8b055cb710e11673d215d31b80cbc9a4ae22b0de915ad76502dd35055f638ef70c674095a8f43642de0c82aa60affd9c5e19c14f5a64203819623d44d260462b503de57e8ca31f9f93502c39dee256760bbf1c0f85f78375d5440d76fdb7dc280461fa690f308eb7a66c44e5a7f4c31faefb12e84a5f2271a39a56bccb6678d60ca808e1546d23ad089f80318c78bb23700b0aad0c0a34b6bfa8a0530b04106b1d964977cd5e2380b9b8aa61b86cd65b7c6b021fffbaf6684de54cc6300306ee33c03ffbaeaa925eb9cf03b632c0a305f540a5af73412508a77b733b450e64ad80ee80bec6b8d84823b04a2e8990d2b73d81f1165854272f17126471f62b303aa638fee806ace94f81ed0ca4005176f9fb9527f701bfa343fa1a99047a8c19884b2106e70e951e5a245bf61d0e7a691d093c4faa0cd37a3c7e0a75571be52755f0998c2574a4bcb805f43cdc6859fcf5945ca4bc39d57c61beb9461b89061bd4aef6401da9da39e47c13dfaf4e0928c0a450df5126bb0a113cc5febfedafdfa161d1f370b3712888e8ced8c965e410ec0053af9ddfd597cc43fff9f113ce8ee9d1aee3a73894b7fe062bc6e0a3a667bec8143bb6e63038a80b2b20367567958c2d2410fe61e06a208d37df8c25e18e1ae877fe3510d03f9663784a1ea1085674c7639d630288a8ec9def20f48b2afdc470d7180c88f9c5de6fae36509d34a8b29e306ab9226ecc2c5ed55ebaaa01183236a4a47807121b27ced96a9d4fe0b486eccfe843d94b9ddfd932147c40d56d7c5c57757557879dc57cbcc41326bf977577ad7ad070aa153e74ad62b71534c0a1ab1ec48f13f22e4b367357ea3861ccaaa58ed4ba4f0871668cdd6f62e8121446dc739f2b745b5812eb60380cab544de5d928be481f8eb1353108437d290c981257cf60f1ae4a548baf187a18e0d6586b0bccf02498328278ffa5b380c0351c94675876b8f2cbec2d52aca7836fa7b35e4dab6be8e9dc0c3ea864b1ec6fbc6434f6193f53d938fd2aa1e1b1154b8d44036007db20ac54775137ccdd35fd53c37a558af54891be12bbe7755c6c6e37365b6f07146c4cf5f9657ddafac734e494ddecb4419bafaf3d87022e48fb90d69c05cb7bd4fc0ad82dcd6c126109203dca576b59f52e7058d15c6c1ffc8b3adf61d175306cb8148feaeb0cb6801000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x99e7125a2', + maxPriorityFeePerGas: '0x55a0712', + nonce: '0x16d54', + r: '0x2526349ebcb7239ed6f66843a7368519723cc3316abd509c7cef841783f81ab2', + s: '0x0c7d6950bdd3fcf6045dfb4455b93930587822ebdda88377f3df852e0c8736a1', + to: '0x1c479675ad559dc151f6ec7ed3fbf8cee79582b6', + transactionIndex: '0xbf', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x6887246668a3b87f54deb3b94ba47a6f63f32985', + gas: '0xcc579', + gasPrice: '0x479a12896', + hash: '0x0f48823439c41ab6b36752bb865cc156d1f56d9e5284eb0c9d0b0177f298f79f', + input: '0xd0f8934400055279680000d20000060000000000000000000000000000000000002d0000000064363eb8000103da790000160000000064363eb8000103da7b00003f0000000064363ec7000103da7b0000180000000064363ec7000103da7c0000380000000064363ed6000103da7c789cecfd0558964bf3388e3f0fdddd252022208da4743788744a97840a28d22d29ca4387378a8a84084897484bb748838020ddedff7af1785e3d2f701f8f9ef7f39edff73fd7e585f7b33bbbb3353b3b3b330b812c6c7ff2c326e5f1c353f1f6837ef684012d5cc30eb2a43d37694db45c990ecf62d5d47b7917fb4b6f5f52859c0e36ef75714853345010f0968bc616f5d795e553614f53420943ea5a1b3eccf3335b82e063c0acb121f5c36c5d87d3ce9de7ab967d1b346224638799748d6dad5e08f97962f202fee64b3748d956dc4c5f25ded88913b683a468d0d80b48cf38498cc420f5296801948f518709568910779d15441967b11d1b989a580f6d759d4d2d0a0d261123a821d0ee1d68c7553f6c71513f78fe5b3036c499f87af2ab18e667439297afbe2d351d8cb81d04e5b4e20f1e882d819a2915d3da7c4b224347f22b3174f8ee6e3c6d5ce307e584049178a420adb23f3d190a820e9a01fa93f481152f0a9281e067ebe403f8b04389943b18baaed93f93ae8fa8c67726b5ae42aed47d944dd9a6cbaa212c0ce00ed75e6a0468e842f1abe644b6696e0b6220aef6905a18618fd758dfd634178640d177a028e47ed832f87ee8333b30df2ce60fc25c5682da958a43a2b186373354d775bc8bd3201909c1dfd61cb832268e419faebd4f2dc023354cc613788f64ea2f751204026db84c4ceddddfa1f51904c07bc3f220de56b9e5d95698c521f7ce4211eb5363daac416fbe9017e98eac1acfd22301b38a4bab1db3af3f20f4ba15698a89da84349fe1c0b27f619a9f4cc003f34b6c85409e6f3fe3f3c3418cf44d128589ff671de2dec592cf1193cabefd8d5228fc52bb6676ea6b1a7ae3f2266e8a844132a193da8a4b695946fe1202e105ac794be1daf3b0b435ace5ec9bd7ce1177535fd50f2a233379a597939ce20dcf0870d44935cea9bebf5d2f45fa2a15763fa6be79e4eaa4bd63a1f459e2c330150c7508c476dbda17faf26841a23c71820541decf73e7dcdb0e23aa58160b726a16728e7fe5ed1f2bb647cb0b54e5e30d1a60a138d55440ca1bb7f22448c2af74a4e4e2d1e5bc4551bc39592d0ed0a699cda463ed847239455ab96cbe6333291cbb5591aa7fdde20082d076f30a3604e2b06de707ffe8c65175d04000f6f451bee6f57b39616d8e33f790aeb3514cddf74008c22dbd3a6b374ee3cd070ced5af83373c21fdceb9b22761c32cbf4519ec00eb71ba9a9567e119b3cc360007816f9d08c5013a13e71159e26bb57e9b87d518ecf17219ccec0ce0f7e48c2f8d1d158e8ffab3adf0f73302f7d17c572821d8bc4bb7eeea972186f896b88908f198ba7cd34ea1a9d22f0f68e428af06775bb0dd282044f9b33b2c4e844bc4058d6b96dd9f2802d199dbb6edd6d58f4e76bdb112f73dd850f1ae046f27230750724ac1da53e6fda6e2cf9bebcca55c42f0943f5e5a061978d4f86e64d87bdb3780f81646ca74b1c750d9cdcf29f9d389f3e62c32552c0055e4809717c36c5e18eb4c9fce2043ae1261af85cd0294521bc807a176b0d19f99b4bba6e186d97053cb216d4fd1304874423891ebf7cc858af8d0d883e82d6531a25f8500ebfb274603437eb1a3cdcd491016230bc1f16b6a4b567403054763014fdb0c9748f762ed4596798cfcc83a9e710c1eac62a0d6b00fb62a181f34b62ef12f40fe7d8dcc098a8c5b71f8c0e1adb7b0c1fe28ab53bcadf230d68e4358bc49e8a0d5544491d205b8c10bc2edb18ed75d9a3009eb90043273a8c3dad78724fbd18e7fdb2d6846ba5ec07f828394d91b55778ab46a6c5e3d5eca9ebe7f177670b30821df90110fa5e9f9e8c0e820eb97a7a329a37083e02483afccfd50f05691f58f5d08b3b500ec0ce88260b98342b0ea25f9ac614e8225ed716de24f15c103f9081d56fd5c269017e51cb10355c1ef373ca8f92e227523cf1c84877a1bedd2f7a3c7d4807726f6b005cf4e88a0ad666872f34b52fb8a5f593a47a92bc94607a635da7aecc5e13f9ae0920b21721750aee5ac7e81532c7dab3c18b30a5478adcd24115d24c47dedaed3407cca7913e686601cdc96f532bb0653d26aae3e1af2697c23525df8e10c1cf1de206e8e617af20cc2aad633d1a56ee9792984ff3a299e6565fd2e389107ee01b452e03d40dbfe872254a88e0df7d6eb16bf9a9b4c6437e2ab4eace47d6540525016efe4980e64c89db2a527d24f2f961d7cead7ab70f13fa575fa13d31e9f089fd1431344000e8f20bb1855d5434bc871080d4916a78e69949ef4be0a96f03ea7d74c317ed5746bd7f03904efd06e00876e070016f4903693d631201f2270d2952d6db7a88f1677b87c2d2488af3de5c38e03c2b0584bff02674e38c90eca33df7f85e2ce1b06a60df759dd4cc25f1647f7b77bee768805f89f368f36bf719151e39459dac94e461e7e9cccb573b990994ecc487f51dfc00f706b77aab4546ce46e574cf54a1f7b1e18f77cba0915c930d46fcfd36d56b8d8063d7ccd9ddfddac5f09889d019339d14149c013363e530ba3e21129c372db93020591435ee7d757f2543e492ac889cf68e978ee539cded9c1ef1b70e38b792c4090031572734e43a0ead5707c5e6ca81dcf0f3a21406098a99ea2667cf09a76862d001e59126525dd4d96d7625be37db3b149e47bc40c19cb47ba8b89f4f4eb81b3ca209c838f00cddc866bceb2d44b1725dc744de719dabf0ee7309d4ee3ca2cae859cd0c409d206f2339ca2035de43e3159cd4aed412c1cd4ea1684a26f57483e857ab4f2d806798cdb725663377b6a2d966222a4d360f44d6f36782c4136e5de110b6ca72c707169a6b7663fd463edf1fa608ceab68b1741c3cef64bd21fd79191bcd246f8b621518be295a4176474e830dd2da849bf3388aa4d61dfd6c344ef1bd745d22864fce9180ae8199e77398dd9bb91be7270b9c76776dea88e365ca02ab8294e7424cb8bb1a81a8574687b8bcf14914d9e5f645dcba8bee04968d51d0a4fbea36061d94f5aace80b9c863e71ebadef946a3f74fce505d3c2065fea4c7a760dc4c2be36aff80de65f607e60fe2fb1dc47eea12c4ee1dc40ea85f422eb4e43f18321c04f255d23cfa8bf32fc1f677d913e79842ff2d98a21cfda3fe433ac251a1df6481fcb1b4ff602b0cdfa21c5501776cbedf8a81fb57b9bf1546edfd1d2e350407e2fd7b3b20df26fc46ce0e42dd7622ec652fdc2cdf8291d2eab4cfa1bdd8c3d5188ebe0bdba6c0f0aa5a36f94463a2f59b9756fbbce119d1179ead98d6a612316ce82a6d9ccd5ffa6ebf408de1428a3511ee85c368b82b9b0adb2b7f15170bb6a1404eca80c43c7975ade7a137645b1bf6e80ef323a5aeb07195820d7f059d8033f0432bbee3c0284d2d615144970673532c9edc2413a240f934ca1db4b1bdb5adf00262f98b5127578db090baeaab36b33d0053ba995d74a1669827d862a163398fc01f9a7a7b621c7859cfb96144457e8959c8779deac375db57afb1b10dfc5b73aac5b4c98b9defa81483b50aecac022606d082e4802aa29c5ec0f6004c57fd50ede2475c69bb2b16fe267e9c82d1123879e380b2d822fe9860ef98a4595001dd416dc866d6ea3564a5acc1d1c202a757cc3ed2a04d730049076b1ac1b71fc7cdba133111cc447a224ddfed40054e18b6d98a0523ba34a208954bebca10c6b0f84bb4bc36d961da0dc3cfaf87a837cff9fee762ff23fc71e9fe115e7df983820fb1389674871f16d94e9e2bbf2f001020386ed99d94797be0d8953e0e5828d3bbba8fe04a0fef973ce95e1f31267e98849b671d105f863a1db82e4e7ce1a7e7c54992d7dfd2cc13014c3e440449071500f9802b3af05e599f1d2b2c3a036de69f8597328bd520dbdd2aa6be316a2c749f668806800e21288a359cb74aa49b87268db5d6f54b49a760e9de24f6c33115c49b789f0a81646d67f80e4a1d1d8082d5fff4c9f98a8854bfba7d2c23769c9a048bf7d91680349ef00432e1682bbcf8af3b62879303baa678eaad3d63026c95704b4f2f611be3185406db256ff98663ca50f5ed601d02448e6f37a72f3fdd0adefafcb82b5809b75c8632d5fce232acaeeeb5fcb55af25e085cf70e5c87e397e39ab13b8cc42a32e1ddd28ba003ec725becdbb1baf33845a5417037c3e9a6a821257066714f67a3403a11847b42c7befdf2777b7899952d8bd13258218461e03122adab633448f9ffc700059beb27b3a9dfbaf15b583c067e86ba5b50e66767b5e7de0b18d5be43b3cc6768a976dff244972f4e2dbdb69eaa8ee3f296f2b9d5cf940f8140c4e20edd88f55572c42f885c7d27e6b0dbde9b36366f55efa459f002638a78a1bfdd2615aa2697d0c1dadda22658df08c5559cd83e584400aa5434da17609b580ee42015f001674307fd6e98e43e6b7c7e36993d653028db58b052734f8ce2dc4a50ebf324615a40587af8d2856c4fec87cac9c34cb2726a1f28435bb69635b84221fe82e367d81c20d09b3b5047f2a3598d44e60d437be8ab88f84c45ebce159b100c4b0ebff41ba3eb41704cfdd1ef145d4aa0082fd8374fee75687d959ae9c9935a204b31c8ef71583948a312befdd0bf5c1da7b5ac201ca0138daaa8bea87da95bb2f847d2ff028c8165e003289e329dcf6dde621c5f24594a88126c587d5dd1567f6dc81bcd3156c4f115441c5041d4f2716e7741047a58a5b369eaa4d10bcec822eac61d88bf88dca552443d73a4a5ba72a4a5ea483c494b856af82cffdb7a8fdbd0c0b49fbc801b76c450e2547900c7353f2f32d2f0771f46f3716a85f25503aff0b11922a1840132678d3b2dd4a0e70cd7103de50865b591f346f29ebb9b340ef3a224ccd9c61c7cbdb1e0fd053716f675d89474d50a739d8542012e0b68eb98e43e07fdf8480d67e8a76274ac19ae3780e01380e1f302581e38b3162c244fee842af97571104713c59d4b7efe14355cf23aba4e8f6ec84580a934623f7c4e6867a06fc1bca87767baaa82ebf64eb48df455a0bbf15ae99dd75fdbcbf72bdadba8922a3ecb69ed2e4c03443bc8e9058eb18729282d8c09c6fbea4876ad3b9faa65fc577bc1f079814d1655bc1484b734a109a2ca718a6549b5d02e2fc765ea31d3c778f4f763bbee029a9fe8f9d726e8deba84ab7cd4bab0dad441983f92f6968ac28f60ee5da12c5df0d7f6f2ff8af632bbed5eccb953bf5999de13cde221d3aefa2132fb9c72668d5a9ce3c1c8bb67bb60ed05c3e705184d550284ec023ad9b25b6fb092a02479acaef5477d8087081a31984b7e58780b601cb84cf6f56f977e92533ecb52d426fd7cfcfd5afc83b23b0ada566f6982ef661dad3de80faebdc032538270e21ea9852b714bf41988552ec37a3aa73504d9c7898317184b7eecd6c9334aa169e027971d24ad432c76a972e5c93e15ff45377f57461d4c8087c777d2e433a336feb9d0bb09efda97fa8a59278b361a0c1157e262f9a3929dbe884814977e579fc35ea26440b492f0915f2e31cb250c84844d45681f2322693d2079caaef556ce6986c6ec9c90c9b05fa3b2dc69e46230dd1ee3038466c8c57d5ae03dc628a31734b9dd443a1b5e15b1120b8eb2380c91752a2d400115d79277460e84f89dd22fa6dab17525aecdddf0a47921cfab59ca921be5fb010782b6b683b67cd4b77ee84d4eb0507ebbd1483b8d0b6c71e933fd12c3daad980fb083302ac898dc6caa4ad0fccd1d84cc402604981e13041d0a26cd83c9b960004600c8f115820692fed7e9434b775bbcf2032aa3bf0660f481100076d90905d98ce1c1c6f7bb74916715c09a1be9a309d1e90aac42ea4db50f673141f0c1c69742cc252a66b7366f168abced9d4d307fc310d2f3a4ca2d3fec216d024151e0388f030f42b49a7c42c7c29d6e8669fbabc1191b4be31cfc8dfa77aeb63d73eeed980729ff8706d031d084d5ae24924f0f87c5b5198f04e65520f7fcc4ccbf647e80aeafef64f863ce77482762a2a5585767ac9f6ec2a03ed40452ff5f3f827c81efe8ffa1fefd02600ab2eff81b58ff1cc74e41ca07691f981ae07b638ae3f6ca9fab1fdc1ae357c29597e1158e9c6e6e8f8bee3a34c5b9350574dd30f936fd87f9030e33207147dd5e8cdb4649ca5cc6d5dc414149474653f6f69fa608ec1e0e0e4451070736bfe140d2c1f6a793d7e79f2bff6701ac7c90f50586fe63fceb732c9a31a040912a7b314dc4e0c315e18a41fd4610fc9301ed41d56b3e0926905cbf947fcd57cab80cf961ec3311e044313a79cdad4db9df03c1ff21fe05d63f60ebef18006bdf77f4f9e6c8497a84204f564457606aaea989a98994e67e9b7edcfae6054623157c6485495fb96debcb4e92d1de6a40f3e35869d9bed1a09b3612f520dc14b0baf4b0c94c76441223df846e1ca937fb70cfc663c2eee388525288ad957c41fd17c5a0f76f8ac14858a0f2e8322c2d567162d33c6380351c714127b8f96f540ca2db7a12b1fbc8d7ca31043ae95d840a635fecfe59c5d5df0cffeb8a41cb120c26d3a8fd6057d63726e7326ed0da32bb5b9a1a71b0d124c2bff9f042ab83f5d9cf940f8140c47c9ae3b3cd941eaef5bc501c69f0becf9a97295294d6412f934effa9927a4ebffcb632a5ff806a5030f2d8350b125be3b3cfd307d9ad5d246dc5b6e6e396053ed3538054c0071ca04f40cea50a6a18784cb759e393a7debd438138f95ca761257acff4cea80e0b606aae9a8565653abb30f96e90b60563657cc9a1f7aae5f201201d88c0749fe2fd57b580c0af500b742f4d273957f45539ea954875a77a8aedbd6e4164bfb0e87e9ee1129159586508083e01183e1fc043841dde5687da1aa9b6c8ae26d7b35dded438ee6a06e7d38bc7fc1c25e6fa1d8050fe323ef9dcde5854e119e6896d571b1631ff34bafa6b673587d82ef3e7f97f3e32c6c2fa72d09ebd01539a4bb91f6612fc84b9c7fa6dbdda0d373731e62eef62494932614710624f9cbcf0f9f7748b9a6d76f90075c4e480b9c82ce518e88670a7727c31e275341c3f59a9e75d08ef856aab21ea0089c98c87b4e5482260e4fe6272287ac439ab9da1022be2ed93d24a76b941f88aaf8373e9570cce6e15f32e757c148d8239a65fc1dcd273daf105179c7331b7b025a6b81059c6c18ee80460f87c00752bc36367a44ed7cfde5c1bb11e229a1b64b3db9a650a616ff547d84dd898e701cb0ff6f5f556d3f74239f59c9b7ddec9f826a9346c962ddad389bfcae6190e423cd2d9901ce96c0a6660232d18a835059bb3aceb2462e77acd422c26d5e28ed1d91c3784a7b684cab4990f7892bcecfeeaa36502796a9db18cc755a55e266b8a33c333963becb604d15287fd804e518adbe777be17fcf39a3e798fca0ea90de735715fdc3f98c09a4f2ac594e887405977a017fca097bfec08c8a9d4b0744a3a791202e9b09bca7a62d0ad92d775b7d2f7bd8b6b85f0d275bfad5f94109eaed54528371e9f36c76dd7acd29a21ffd49b3f6442f5f697aaac6fa768d53059a3784242ee907a6fca065ad6a6eac1878d3cb645f58c3bfd0601996efdb464a4fcda5339b519efbd0d5e007f779b6ee066e5a306cf49ccf4def3dbc57bc94c7468d46182ed23c538236e3c802b5322145f9f7d2f2d7dcf48d0de7d470f4e3f5e3009353eac1fab7fddab72e08b492a1cdd970d740b07e648af74eb6143a97345435fc81c7b1264a2ae6ac5db5ff9fa000b1ff02091be5fa0b5fbf144ffc8627db072445fad7a071d331d46d59de7339c07af0a0019ca5c03dbb83b1f09724afc732344cc433568e3864c6ea3ac3250a69e417dfd0c0209de0e423caa8ba5fe350c76aec4cc241786e56cdaeaa26ec68e6d734b16d13bed296c5fe08446e38876d5447d8cd3ede40332fb1185b485bbfc1f2137965f3d1b47b9aec8d4cf925736fa22e04c4732ea9987004a488084c3680046fdc3043f3ec38c687a2ce7b0cda77e4a28b5ef14c936242620700a3b70b2c447f37a61161679cbdcace0d6763c2a0bf1a433a7d67c98c65d44ef12e8071b17bcef04595fece1811cdd34833dd9fdb72dc5757367e05fd09e38487fea9c0f6a74fe0f0728881e1114c4befdf8a1feff4a01483a2ff0ec29d638ef41931c712983eaf04ec7016741c1f910af1994653712a9aaa10e2a80c6566bed43994a70ea85ea29aec26a9b21f190ec4033d7b5b17cb8b6cab9294b08b46b07da6efcc5d58275f058578bc0738135a2cf8b8ef1b4e036d0c654e4dc777febacc633b72582daa213550a42b3ddcf35f9c794037f813eb0e2413d2d7eb64e3e807fa9b816d99388fd8ac75dd21462e1290193f6617ba5612fb8fcc4311995223b806163a3412f995d209b6f72bc06ce6192d0a36c9a4b88ae7d7b70665baeddfff6979d1eab4bfd57ecf4870fe6b71d51976a998a43baeb6e0f75fabe1799bcf10ebf00fb95a1c0434e8224b0fe90c028ff78fe7aa9515a6fc1d6331ecddc475cfb0bcd15461d888a6485a8113a0ff980bec72c89b73eab529f6f68a24344c45c6fbd4b769e21a07ee9d1e6a121174c5e1ed04756368d6fe76b0a7de5f5beed01bd93b5a09db288e4cdfe560dc587bd0b19a11048e6f6735f38b9239e18defe3377a3a735c58d4266990f407e1862e0937adfd349c4e4cc1305da7bca07d03025fed28e0ba2667e01d3d83c005e90e0eb8b9f4c64d117899fc6308c6a37c80597ee3185c3a9b0b437baa3e8201c098dc85f84c636d84942e34459aef69f9e33c70136c7142f60d8c86548e0b4acf1a826634b26911f7d8bf590925a29003f243b7981873ebb15a03d57a6516bab18a397bca3bfdfcb187bfb011e6a4ec15ac3b595388438bdfe9123210aeb175c3a9f462ab18686172fa0f736f7aee82bf9279202f891576f4ea52c5c63d456a861b05e732950ac7a898c025cd993f3a71712f8d851eb7fa6b8feadf07d63e3e07b8321fbaacf70fc84d804de1fd10aff37d30ad1f372e4039e6d6735cede7a326d3f48d4782985ecc6044ce3fdec5556bbd4828033aa1fd82080c88bc58d0564b42214aed8b3314e0bb876de0456c51c1ead8e938a070a13188310c8dbed46b8a34980f824f258bb33ef62b3a03caa7d90613e951fa22c777eb78b9bbfcba8bc21414db1962d3d68356a8381105258c007200d6d2f0a1138ce17368a389211ade9c63db5a31918156208fbe4fd763dc3d801b87a19c95ca04110a91f9d6783585d22c2807b21b13f0ba77798e55d16afee79c9a38e57f841ff99191991c55714411af05bb1ebba6ac581086dcc03a7b50569a8999917403326aad561440be561bfd4d0b8be07bb46389a64dd32b6dd84e89b61dc3a800bb02d0a083f401e7506184b280aadfb91f30f2f31c711acabd27b3fd0d6840f5dfe7a0a12fc15bc5102f671d8140d673103161be9e5e92f2f192076e9511591eab530ded08bb5734a20f80460f8bcc007433ccf988fa967f0e79e5814dbfb0a3fbcaa4b95a3f5ae1c853829813fd92305907a4abce0e39f84763553de8f0385d1097bec6d440edefabdce8535a0112f4aeceb5ea0f1cf3892b3b2ec5b0ca606c51708395b380cf059345199c26e9c8f444f7f91363a9fffb10420bcaf1d8dcf16f7ea1d0346bc84d5c32b45dae7c23012d4c9b1011be11c5fc728087cfb0e7c8b1f3699de5183c5a11b27b81cc19bfd0997a3efa41d47b268c73b709159a191f9d75322a6f2707850fc4ec5c6334569dd3f7fa197b928702df3ce75757a7201ac2c6d27b6fca03ea6d88857d6c1f96360e920f4815d05387dfb759c61f097148503884d32399175c32578a1439917ba50b3cc98d173259210871f6ef3cf5fdffc8dd73b50598ae1a2add37220499980e8c930347f31517f8039f3d35291a4b5fb4fc707bd1e02238060239c6477c9d799b07b0fad0caa43dbf4a05c1d1f0ce924e0038a64c6f6b71defaefa188945aad9d554ad53c1e1b20e2fb56acad9d6f304b2c8025c3ca93c06ce5eecab527587946fd4702c6a486a6bc2b6c20e5fe46abfcfc48f8620a8ec2028fa6193e91fad688d9bbd27ade83fe344f8732b9a785c5669d6108f3588de17adc9e576e6c0334a4614e9115477e3142e82abc5ac2f2f5583a583d007367adf295f4e59d187ff98158de8f9138a04f0154de349e5797a1962937fbdfe3f010893a7964fe32729797a013fbfa22b5f9023c192e1859e32940aebae5ad6cc88ca2980217d03276a82d052b6e19f99119dfff6b7ca62d5d26edad159b11b5ec3fee6677b3d9fb2197f9bfe23572f08b44954ce03b267befd8d1780397022864fdcdd5cd9101ca678adc0d3e4fe4c9fd718e92e908041a8c484870d08236990ead318ae25e4a760badfe1d244b1ef281c3fb04450a9dd96cf5831ab3f3a81a17f511df695c30443cde1b4da0b566f6cc56f4cbc9a568d4a25433ce6a480617c31f37508554ecdc450826ec7d93294f7813560a6b47c4064f07555ab87814151a595d7f62ed77b771725f461e04f25167273d056b952a803c6d08e4a7b1a2631be095f32ca61c66d978edb24b0e50082db1c0ace83174925bf0a709aff0481950fc8b849715fc9369bdb2a38a3c64e7e9015b5c7066723c439c8c792db76f7d11976409cb6d19f4bdc1cea071147d34bec758ab52a63e53ec092f57ff912d7d8b587e16b7bb5fe19a6b413025c936d4ae83b5d93c9f7a8926ef4f195ab5e7239781bf87a31874acfca47197028d209bb212fdbe463a3da2f7a4da23611e5058ba35f6e147be0449386edd985afedd5fe275ccbf002a5f245751e320491e5726e3700bab9d94fb7a5d3ea5e2bbca7a3f3fab8d743df016864020879b80c8eeb8e0c5d15a416cd9fee7aafbd6d3428404fcac04043176a8340c377a0213ed35f548e4fcfc392f0a2a222111949733834d6c9d789b0bb2d6c1cbc4ba074ebc416ef4e23166e77f924c604e512b61837dc253e29c6c157f8ce92e389a03a25a13ed2d37d744cf139fa6c27827675b7d390cd78c40840caff6ee303b3843ace9309a47c082f7009be53f96cfd83dd74e84dc62806347b2d5f542c1d26fa555c6ac2be518cc7910011d1eb47b64b532156072e156b4fb8b761ac2edeafdaea92aa82313cefa235b4ff7e6032f81507a6ef6cbffeca8149d13eb824ed0a2b1bc902d9455a1c1a2b9ef503f5cf13821f0fed09223ebeca05c0d241e8fb350726349568883d378baf73c6e4d81b51a587569b6d63fe0595f9c37f8b7805666f0a96fe57815f439bf3dcdca8eccb933240fd4a2ef19f3badcbe1765f776cff3dd41d015f928aefc9862b50bff52e3957b0327e5ebcb21f2ca2362c41b4284b8b2e454f74d42cad17b90b867412f0025897521a32669a4b1248ef23a568cac8360ebbad56fb78e44a0488b04c90575b0312d5be236f98de1846d55e2280a503d1b7449a994a17bb3e290faee6ea7f0c533f52c7d1fecdca7008eb0a2d1f10c975b561ffc6b29536614d4f0f7cabec05ec0bc3af9437fd9faa3c7e6cff7ed40ed011962bc6e6155ef09e1167675555dd0cc6ba93a9b8f3226fefae79b9e4dc80f2efdcc7f07f82fbd06a3fd6e65481f3d9a3cab978c79da78d1d7ecff396701a7d2815abd061802013583a087dbf8afbc4fc7f81fb205187ba15eaea9c640d0cca7d2050ae71fc82538d51e10cb20bff2a797f0698d73ef89e9c0abd88632e031aede0a7b98f751ee67d58129700ea4d98b7a35078f8a4b3013d18d249c0075c3a409433727b6f7026c16b3be735c6e55b439729c9e5283250a6a879e0f4465d01c90946464b27b25a0a4af8e04e441c94a4104aa303a9e2f5a02580f122bd2bf277968d55d4ff6d97e70cdbcd1b54c896031406995230a31a513c9f34b6bfda1bff1df85fb76cb40ec92766cf1b9a93a442e81a6d615fa931bfb21a1e6125b06d5fae7ac1c0d2e34ec1cf940f8140c438759934e3a983f5490786e6af5058dcf558ecaabca780103564f470204b922a4fe6e5f6f2033a7a96807c62792ce4ac686a65ece54334a4784d850b4db28a1aea60968dbc008719960491ecdd5b9cd975ddd7741daac4c5736dca309e668bf5c6959b3ea06005ae653624bf1668afb0b6e91e272015f6a66fc0970d10293b3c97bb2c9b6a7b7ef7bf60e9178e4c4973e5722b2fc0d42564287ed6f135fd3b63da37827e45a24c352e83ecf10f5b0b3bb9559afbf9012a2328f76b5b3525eb6222ad8a8e006b5f29335c6c14c5bcaa50abf2e004ca3c085cd40e5ce4177b25e4cfcf8ebd5d0c823252c3f5d52596c0d13dacc201bb6504898ff9631ac07a211b72d10481c4d09558a9ead2b133f5e6c9574e43464d8f7639353d892f1ca47a1097889f66c23f0b60a646c71d347fe49e84e047fbfc8fc007b846f073f6614d8538dd8d19a9901c79b05a397279311eb6b68aadc0c4d1eb3101a833f88e2365e2959aabdc126ce5a59fe0ec5a5a122e6979149013942f57c7420681aaed4055be6c0c48a9f1b05749ca5650a7498e6634afb54ced9ca69be146a141ad4454ebab5289c51f70095ac1a4a9ef26a5ba279caa5a9ca4ddd07df6ba49467abb61cc854f20f8271f5c9ae70f57c94f61cb6f67b6c3b122418a871080d1c407e4db2920571bb314d52f08d8e6128cf4d350277359df6557136dcb2e7b3b96bb0be045293fb1a14e17dbaba60ebc9468b63de6cc5f816d48760b82f6ec5d4a2cb3d7d7eb6ca17f86a94f89685de273315b236ffef0e6c4f437321464d75c1039da880524cbb3c27dac2b01868cf2ac6645490f3e6b8db55bfc9f71a8b09ef17cde4acfd8783cddbf4fc3660f4160de4160d43c9a4408c604b0028d858da16d23f1b6a5333cec4f987022349eaa7b97c0d77247692a82900bb6e64e552598f188f482e0c381f9e982e183a4838945203ced7bf3c6e37cc4bf4dffd128b96606cd1920f47fc7bf8e1bc753cbe791ca03291fecee5cac29e5ed0ad7cd0ab5b45b659030b16ce5e9c574f882e1f94f15d22f81a5c714cd3c738dc5d0216118e66322435beaa6ed7b2f6d1d20c5946baaf7ef0ea3ad12bc00133b4e07b03d0984bfb33c1a0749075bee60aa32b0fd45fcf83963f61e07925461803c8c315f6f6cbc1fd5df04c14c8540cc7edc119417b0528aa3087a782ed8a6269868b1ed3057fe8e510a5777ab88ce9bd2473e699794004a9bab24e5fe9f2d5684df86cf7cc4ea7d32ddf81cba123e7966d50f3b5caac7ff2b7b14fe15ecd185cdee8914fc6c14ea80a1e864f34088f238bf73bcfccb255b71772b431c691b107c02307c5ea05adf36d005ee9c86c29589aaeb172e2277ddeca6924ac0887e1a9fc4bc1944420ae83a70563cb281f64956bdbb8619ef7bb589974cc9e70261bbfac6470eb3e754255f2f1374fe19713934df876f49852008125ca343ce5448b4ba7d48ca1228c2d1b4505352e07ab18308909af82cb84dab75c6d053cb8d1c219278353f57b920d43606fbe193958296c08b47aa2e2e3fcc32c07794eecfc6029b9eaceb9e6d69877772f22ae27ac222fde8b52bff096da09328d578cf9229748b0f10ef79dee3a896247aee8d3d51e8bd82718b2441615fc38292a7be85519a1a49b400cacaf0ed838cc0b56151fba414c5bab22d2bf48b07b95cd138d261d899680c6f8f8e106e5fe25c5c7f09732d0fede5942c0f490a3baf9ac0a2c5a39ace75d3bb58f27346df936f290814bd428628c0e25c838b7a1faf6b62a0a77ae57485aa4ccb061f70463f793920209d82b59a33b70b61eb6c4481654ec4e2448207b98bf9cdb2d9db004aa2c8640d464f232c56c4cdb1ae955547c36b5c749a97658d658551866242ff885884df4388fc4925a2f5309f9991935625be1699bfd741a4514273cea9f6de2873fbe27c00c7c1c785ed00b9ed62698feb6f201b0b5c055e1e1b1261e9a3d3bb7bddb5e8aa00995a8a60512e1eee5c1f6bfa6c8aef396659baf67c1ab4ebfce2c3010351591610b8073b70f77e3befac771f7bde0944d5abe28a0df973c79dbf7c883b2edd038126487a388d2bf03a69709773b43c4d68d2a9e1ace0354fb7578057e303dbfaff9f3feefc689fff11788118be2651946111aa122c172a4ce2a54bc44eb12ac64835d43938fc6f2f9663b702fccd7a0b0ca9ce06929b5dfbb2fd76a10eabee688cb3db1e3ab43532dcee9f038f5690e29715843a040b7360585d79dce8851d151ad3e54c3de04cd53870cc0a22f2144f6dc85418e3357b44cb94a5b5b1e92c890b462c1f50a66242b49e0ea42b25d20c0e3eb1b7bf51132eccc2206f29c36197902d53150cd0ad7524dee4c9976bdefe24b018aa12aca768d2c91f63389e4958fa98ba3d05070299df9ef3c3ead2fd15fb863cfd7c4b1f64694308eeee5b29265cbe3cf7fb129dcb21510398089564b4926f41f009c0f0791f92a8703ecd037cf43f49a03eb187b954c5c694f5d178f5ed73dd6ac98de9ea03b097af48d832d2506555a493d6693a0de4f4908638cf6438e43d21c5e0c079c30281846e07fbc2557e3946c05f85b9ca1b73875b49e9a8c086285f329dbba0274b90ed9db6f5eca49586395698ffccec5f1c8c175882edf9e60ae2cc2c228cd78e0d74935b5a6d2b2d61d4453b2347213f4ed92700f48dda575c85145f4b51007111624c0698a6615b197aa16f6ab5c2eebc7632cd86c0bdd881cbf4a5733a2287dd5c1f46943e60ff51f89e7976638b3ab3e095b2e94d444fef123849d64d87b66fc920e1aa3435e3916afed724380a0c04f7fddae5dba6d97798fb1c552796c4ac4f73238c634aca0ba4f7c182ef809d2aa841e4bcefe82bd449ec36c1c36cc094154d0c41b97b1719112c3608289cc426c82229f347cc7fcac91d1a74738a1d2cf8c0cf8298377d37150adcebcb1db12a489d322facec26a76be20d68d9c9691779f46e1929d3079acb4418e605e232bca083db55d2cdad1e64e8514474f6ae44b5a7d9d3ca068bffc80bdc71dc747113a58ed5a38893819fad855f255cb99d3a7d4d1921abed3a3f5afe2c70c375c191b42cd44214a3ca2a74427a4ac14db35b7d27db0767d20e43b38420e0ab94a9f72bb8054507825795214c8f6851902c31f33dcadaeecd4ee4ed4273ed61efa847abf26b20f80460f87c00177a98013169d1cbd8a66e1616fcdd8dcb940f50fb3d082ec1ab91854a9d679900e00438f99a11773f9c39ccec550be148caf473f3a16dc7655da55ee40876f1fa5dc922f28fe08e001a5387d246b10d4d645379085b5952381a29d3250a53f1b10ddfd59788a4286f01f70ff79f3272228ab76a192190dfc1c9225f2adf37b825d08fdd3619f6c841fc01041e7f071ee78b8b12f2857dd84227c9d8fdc5b199dd944f894a45c497ef69361306213fc3bcf80e8094c0a521cd687de7ca087605f14327c1dfaa0181d3b99260e377218f120a85f4d3ef26e2081b85dc48e5ea31e18f6ffa5981ef3b810bab2b136bffa9dc3e66a6c9656d14ff6a6c197129107c30818e6ec920f324e7e23fdb4760d74c60fa12b03ef88eb38385a5faf561a1a0a7baa5f301708fe1f9a3c5cc791deac5ccc6a35a6cedca096b7cddb3d7f6a35089fcad3b42015e4fe2b35a420dcdc1f47448b205cff9f0291e48265d8b3d545510b1d6875fcf8720e7ed20e7f8c2151cad0bdc7c6f182e2e2e9eba0bf69dfc1533aec5e7ec62f4439df1de25c8b2ee706adf55be6c2ddf92022327b6272e597a207c7da6384fe60e4863c162187e3798c7c996dfa6832d4830fa62916ec5df9db8c4aae2e4d5d615cbe633faccacef04c2c8c93ef44d2c9dc204e17339e1741ae640c408b018813feb2382187a7292120491170234cde8cb7efd09f9e4c8e888a810787208803cf5fab83011705b10b83208dc35089442829d8f329f7ae88a38eae7a88ba10c54816f344b51874fa311a57f400f4247974f86f1edaf7f612efd107c3e08365deadcb75135bb2b67104da9661a177e0e04e587e2611d37572fd3a772be2fc41bd42fd94fa8a5075a68742f9edd693a9645208059859e02f08fc4b122749e1b8afd487b7eb4bfcd04fb8441caffdbad42e14e1c1128195dd339990d9e45d3ea29c8fe19ce18a97b894ce78112ca7e2b0a51eab164c4e3aa13831ecbcd1158c93cc00cc621272e0de85b08340202158140544e26f75f40f0488df088dc73cc159fef5fb7bea53751a036ffd0d227277a66f3d8d9443db79215113c87362e8c0d6f2aafb2ca0da7e648776c3f4b7abc81ffce80076c34ac56bcf7dbac78ac2222fd97b9d95318abd0a8c102ea9fceaa701f7fe7fc0136dbeea3aff6623f19233840b2709032f6edc9740fed3ab9fbe01e28295cc470913feabe809a33bbbc489d2db3bde7006c0a0f79465c67c5e39af333a3fddaf8b82df184cca76f15ed8bee287c8044ee045a276de1dc67b1094add476a0113af62f36f0770d81d2e0ed3cf5561a4000a3886fb6995be8376d7c8d5d7ed51ab531880e171a38a92c307b24196d7bb2dbf3c256af8579f120d992dedfa6c8410f82aa410f1004e1a40ead43dd5d9e8bffd94e85fa00fac78d000173f5b272f508a312b3362ad05e0a53d469b09bac031142a35a1d9a05c144a1ad264be25990a3854644cabe23b8cb0cb2b3013ec72efaf29e1e314c6b698dfd12a0e7ea7ad58f8f500aaff4f082fcf077c644f8ccfee5b8f3346cd5f67ee531df4e622a354c28bba80acfd56472c2aa716a080d59aab5a4d539958bdd9bd63e4d5eb6aa1de66b2187205c9b355fc6aa5462204817507e1822f14ffcbedc1a1e0b14732ef12f8da3f9ec5c0ee757f540e176c8d0333283d55b4136ce6bbf1edf739e9ecf3892f927b2c62e6453398a2a7d008dbc1c21bffd27bf18db61d28c5b96827572f3e8aaca57de86d6e03b07b6bb0f211224dd198bffd059fb772289976bed2c56e05b1c9849ff691abe9776dfcd563f46762989e964865d1022a62fc2a7890d67c08c1271476eccadda903dc3e856474fcd537a1be425a2604e1542f5b2a8b96ef44c0bfa1ff7fca23961760eb7b231a6ab12547fc44167d694c3352352199a9ca19bde3dec05566c00dde10e086cc1baa7240ca35148887f4b033560b1e5d88c5bfe757196e3d38178df266e6b7177bebbf5c3f44b4c35048710b219561cb93eabad83b62faa849e40187defe787275a1bc004e3aafb575caa11f4fd6de9b6bd86e2fb67a9d9409227197a11d96f8791269d38055757964ce755456bf585573151967600259b696694083af1ebe19913b1ac5e9ffd8e417ed45f9742abdaf2642b2c58d01cc5e3eb71b9ffec74393fdaf9bfc36a5b336c94fd619f594d82ff2bf7764419c1a41e9bddfdc9ccba2269424ca6b5190f633e5432010b1c8bbf41b9637b66c1babe6a17bd5f762da6a286fa16e079876200f11ae868b8f8a3f93afb614dd1eb9818f4641e331ff46d42f3284ef62ab669c6b3bfd59dd976be05aee211984e55101692bfcb82bd8b91b3060e1216941131d1346eb476e23426e2929000d6dfa16c303f4f5b51185a876bc4d69ff078fb6daf72165f5374dcfd64f634d42a09c3b5036822f4b88b413b6eebd16c6639751cb6e50eb9f977d47ce6119632ee8ec833a41da0e4871ad3a66ef774c9f29a1472d478cc564690b05c3ff9a5a552245ca7d109ac1743e206ee21026f6dbe216dcec6216dc521725793824f9d939244cd9c54ca5c4cd4df8243938b9a4b824cda5a53878c4f84eeab4e7974566f1e41d1ae1bd1de349a8c85f055050395cc7edfe3c40ccdac1a4765801a00d356f294895453ddc75376997dcafaa26e9fe98eecf80e0fa6ca1d057ad83e5c82003e14bd04de4e30c32908eb9f4e461a2276634297b5aaf33f7917af50c71551a1129b867b5912095ab79da451b5bddb040aaebe9a5d88ace872de28d8192d72e9b50ea5f080798d0382953bb1aedce583e467c710b1634e37eb0bac98d458fb7ae3a32c2664170442bd2df1c2f0aaaf78c9017e8fbeccc8430f4541ac6b9cb1f5041c891dd015b2dabda51d65d247a5e006dbb0d9ccd3c08d8e5e7dde7d593d975685fdb0ab7ba919deab0535f5cdb24a230e56ef3f50a42f45748bc414f070bb563eedf1f9f6e742de17cdd33cde37433fede2555acac62b5077748c1a47902307c5ec03db3e5d267bd068abeb6ab74ae968dd1b3eb33c46dcf9d87345999372e4b89b7020654789d24b25d699dcfa7345b2c466ec3751ce21d6422f0abbdf9b8e95d21b20a416bdf416bf1c326333a6a301eeee513fcc2d0cc1051605420147f77a6a38d7d51c1c71b947a7518f3e175551f599728f1d30340c07744bed7c5214dd14041c05b2e1a5bd45f57964f853d4d09250ca96b6df830cfcf6c09b3c686d40fb3751d4e3b779eaf5af66dd088918c1d66d235b6b57a21e4e709e623f5dd7616ff2e54ac34dff3ddd2545da8c643b59ea728c92091e050c1ec2940d251c054ff604f3efce4cbe260570f602f1a40ae6c5f06d4f2de790e20631fdad261554237286aa10d561e18092137970a5f316a19cde3fef69e3690f3e961f4dc6651f02d74c1e76b94ae1537491372de151b5d313f30be6cfde923ef8f3fbc0d8112ec4071bd018269e3491c02aa8ed0b9766f8b44cb105bc9e73d2aa45b770e059c253d0d91d5019cb99a3621824e55ca2ba4124b58071730f15e4f5e184c239be613c013ff64ef0ebc74707a416b6a38782da5a35b1fdd59bb7ae062ffb9e6b714f9386a1dfab678ebc053563fd31525c6f88789e9b646f4330d196f22a9a349d816441ab07dcb36285801b8fa4f7ec22be34b53c30275b467051f38b8dc858d52893b9b22f5631c006d4b40c5a4466a5529036422e06d48d9f585f7f7d7a2b85559a6b048e1b66645946c65817787d27baa885349c57808b475c9e1fe75db660d360d29571ce744514a7cdbbc00ccc5db166ad63a13d49a7442e596c094e365e19265c03c2393c3ebb5091e4def8f772012e90e12117509121edc0e1216d48f8871e6b8d768e18e84baaffe7e383810d1af8f501ffdfb1dc3fb3795b3e8d78fdf9e9efe237c7bc580f30dee7f3e3dfd7bd10c907fabb3e17e7b7a5af4987c4755237c797afadb16fc3b2b0e0407c7fb5b2cea3f0abd3b88f0db8930c20bc9d843a2af639cbdb4d02e7f805528c084557ff4e9e9e318ca77198ee388204afd39ac93890bd31b9ffa34efa1d7a9725ddc83ca7f6d189ee0f5561e23951e355a63434dc9b9bf9d3808645b1bd6caca43dbe3d730146074636a6e77a8f756d6ed573ff32ef695d6be3aceebb4db3b7ff55d6cb02baf9f7d175b13e4d40fdf01eab172fad6f3bffb6ef67737643fb4bf2bf327e7c7dc373cf1b573b067b3419b06b675197cf9434600b139967007d0e69c3c687358ff1ab572d871456cfb03efce3415ab715c5c30e6735c804b36766c2e1278fab49c833cc18c3e782f79230174d47e6c218366f84f386ac09f0030f9030cc05e2c82f20298ef3b0239e5272a0938b5068be611ddb37be208f35135700814c7422e23c26800640b7c2b9a85a6759ebab6e2f318845d0e5223992b398ee34ef877ecc86d625a8e543247115f7dd550602bfdc45efcd66bdbaace67aa7765de32090033d841f0e19e69f5de106f5e60328e79e0f5b3bbae3897af95279270dcbc8cf8cc97c33d633f942546ee392d5c0220dbf608ae0cf902f11c32b2655d54fd5dffcf1751485e1822b430dd65b3cd9a708640afec4055bf3adb351deb6c7717b53d11df3f4694ebc7bdedde98d4ddef2fa551abddb88e3f1642cbd2fa7c830704ffc4a1466dbbbee6537527eec4f4ea0fb0015b35d0d8546034f102bcf68fd71766df4f73d6ab8c859a61cb12ae09140e970be139110477d3e56dae02c670a32981981d9e15ca0f42999092e6f4d34b5063d657ddd2433b97f9289823be789f717e318c82c0fd5f7a9f7d00c1ff47799f816958ff82f7591908fddfb5ef2f789fd580940fea7d26c95227f5d1f90e81d8de47e3275b9a634592686e150cc67d3ccc12142ff56c8ce96f7f4e5576885bc076cf334b21cc1119c8b970dde19afb79a47326b96a8587e2601ab0d3e1e7bccfb0a6f34e12efaf0b7e524187f225518294ffb3de673ac7cf99e3bdcfa0ebc7de69a317abd6ddd0917bbadcc07a4ddeec0c1d42c27d8f97cdbf25f3015e338c3abb9c8a7b0c87407ae4b9e6f312167aab99834f39da9eae3fd7177f5a05dc9843b4bda7b412581d512b883be5b25ad3be4cdb6a816b795ec5df0b25c228e8abd246ec57286d0e9422de701c84276fde1a78afb22bad593a2ca95a6bc692e13546c63614e37106049f000c9f17f07fa3fce17ef16e18672fdea6bb145b21f992a46de5a16d587767b3bbee988e09804825f029435777ed1d5127aae04ee7468c0fdd27ab446f19297437a75ad3c3c1afed15ff15ed1db7a35077c4a45530a135b6812bdfec3e288fab7dc69193f0de16ae0689be002c222dc1f55c05aacf67b39e8fbfbff712f75da370927615ca4d7aa5a8e0aa73e6e60464597c40f646dd7e3fae574a5fd8132afbfcf625c10c7703ce2140a95f24b5f3bd9c3a0b200710f0b43efd5442222bc3b7d04e399b12b2485bc4d0ecbff43903ff23ab9adf918b87cfc2df1c6949c68511991790525063a333a265d3a2f6d1bbe0ea906bf1d97c1d55f5ca0331528ce537c16b2100b796cb9dee034b22eb0c0268a1e9fbce5eeee597d17e0eb18ced28fd5106fbd647c4a2f9b1d4bff6837b51f967a3b43f9fc7db2ca65e3fe87b296f1eabddec392929b0741ab18bbe500a3e00c3e333ad6e6d3f7cc0169c67ac9007db93bab094b767e2c887caea18b0adb203006354921a696281382e5daa01e2cbf873be623e95ca112db8960bddc36b3ae77bbff8a360934afc829964a1d4d5592559ef3ee38a51b2fbac2abfb7f4caf6b4825712138ac87dfd8ce08915b0990486cffb10405de117223d2cf219b28dc6455ed4116827ecbeb3d385c1b2c9afe744550aa058b921675f6eef6f23f43da3f90cdd22e920fc435e47f8d875854fbafaa9ad461028cb0e94c997aaed48b220a2c6814120915810644cef48a24848d7cbc8422f0c1c55efe25a138f5e9b7f4bbbd05ee3124ca5cdcee398db71e37b1cb73b0e171542e8da8477b8415d0961be60af352f413771752d4215820a211c190fb07373ce5cafaed8097caf4c71edb6599f28040542e0e7be428c1f3732b3e175e0c2e269876a2db04574427ff20195f507fe23237794d752e4ea7257efe42c9ace57d91acfb1ad5fbc9902ddbcb60a088e06d007cb37db7b4c2c6caa97042aa137c4ddbc6fec9392a0eef1f889098ef857fb0f837fc2f4e00394b2cd7374f010df0b85d214eb142d7d0a8ff7d13f7f1315d72e8b76ae58d64200c0a4ce446814c97a366029dba18a7947bb31af2ab74539065142fda1e3e8799794a39b0aa1233e1376f3cff2193c8e91c20da794cd366b8947cea9dd33b20ecaa7c6c3a414e5a9e0038c600f514a2e38f63ac05b613e7cd3efb9067d045b41b3e956bb4d3c20d0c4450c30d3cbb05251c058935315518a55b7d4f90f8bbd1fa065100e1155915bf47e8087c0e7efc0bf84f3c3efa3f6c3cabc0863b49c294bced0c2cde262ce0952e8f1dc49e4a30e82ca1b21da24f595c04b2e8e3e6b3dbd83c14415d0c31f98286101927eaaf61b297fe2f4e033d0c58e6f3f8feb8ed3ab870713d540444d50510fc49801f41d2c900138fdbd5ca4fe756990f2a98514b0cf7c6abb3c2660d9b666ffb1f2289cb4198f702a7c9d0df67dd2a06c107c82585fe4d2041426c7a827cd7517912c44544a3b0f4170bec3ff0b0620dfe1cfceb43d1e197a1227e35dbaaf93d897308ce2f14b1f11e0030a5f087cbc407dfb55dc6eec064ebac1d4427659e3a7ca91d11d66d8a5fe1eff40809ac8872b53489dfeaaf6a7e59164b16523da98715326ee8101778b46f257622a5fec24cd7eb393bcf2a376926e4abaa49b996d2c23d4fd2384ca44ac3bf9cd6044ff57ed24ff027d60c583da49fe6c9d7c404eb7392135121f83bc606e622336a3070b26baa5b9e052655bfa4de8540dc52c8036fbda4d622d5ae0c299d1c8b0a19633f39c67e4e22749d00d8b1d62946603d68ef68d2325906fbbc29fdd376a0cb20b55f1e6b562aed80e042abfbb2550ee547b1a9df0cfdba8798172e1ba79d4a0730fc208e3bccd9e594bbea45a789dfed2065e10e56690edfa462f4095b05e4465121445bd17797d62ccd4ed1aaaa3787a1286717d1a3dd2c7488c775f0f0f92ff0ca7c2a4201473b889f444ddddc6f7186d6924706cac2cf63888dd6725cae00b241f3a0304b7506ec6545f6a9c273acfcc5b43207f87ca38d43a0765313b0a728fdda873120269d97eeb8b547bb4e4b00aa4619217aca3ee60e6244b4b245cd7f4ca9c6eb6decbf12e360b58d62d38de04628f5973c087b405e7e499481589605909e18128684929ab9fe2f6c00bf0745cc6b14eb14345ae77c452f3530bb49b923547617d77b902239c49097dd40aa04623080dce8b474772173e4028810a2dbab4db3da133dc5b32e941f07539f08040b177a018beabd4bfbf92a992497ee94a79e7797ece377468eca4ecc90fd3a8bd8b9f8e33be2a86278440210ce771767a611867f14dcda533e3d4b865af0e4d380f661f7b528742cea39dc7394ef83c6e52134021e8c5e7718e93498f138191cc46350ee78b51a08f6c70e0b5085e7fe911e49b55089def0cc3505bd9425b4da6d5a3b8e9e6667c2cf314852b0aacf7580201f103ed47db28e3180b9f6a7ddd3be8228a9026d2b0e337647cd3ea862d58b783bf8dc287a217f1bf16858f2eeb8cfcb0bd9621328fedad3802aff31164e74f55e1de781fab726aba4cd40148f5ffcf87a5f8d13eff23f002ea08e79d973fcf0da7af5505fb4923a6934fb8a3140985d61646f42e733b466d0304f6d66aad5451566bda552db3c3076506ba22fb4be614d9bb0d577518a868c2beac538c2f1b3de57398c0d91d09120294b95a3a5c9bad22570c5873ec13efe2f47ff1f5f314043da75103a5903d352ee31f61fd3ed3a3f958f15e4324e77ea2c5b187e32d7b3f6b671bcc0794bd0aa894f5edbf4ba555dab8a7d6b4534ab8bb4042b8998830b2e46d7735b40130b9f2b044a2196594b1943cc7af3b3be9a3701db22e515d8069517414052be7e6d12689fac5644d0c769cfef0984df2c8cf65314ffd56e1bd62c301c62d8118c41323015f64d37a2c3360d8ca0bbc7b84ca14a9eee6c40ad9d2a2cf552f7d563bee9e6c427a50edd7469de73b1f07908ebde98f8f0da0224b1f86246bb4ecc1b5733d7cca81e09bcc18af7eaff853c1976b1dc4d3af7508b28d71310685d57ffc5a077e8a434644ca0aa5322db3abd4d2c91f87d1b90804ff44e19e208b77050de176c989e9f7aba7474bb9ef81944f0046131f20c8e0e2569f3c12477f49f9da07ca9b920c258ba5ee3a38f9f6aeeb1ee82e360e80c0ae890c477bb5bd2179407e6cef9b8c575e027e3a3ad0a63a8218c54eaebb32475773085fafe6da66e65b13357795e1b993e79283bb1f2b3058b4076171ef46914120debcc0fbe7d94af6f39b4dabf5d40ffdcbfd560478ef96e06de70edabfcde7acb9b8f218e0781103b0458796a438ed1110d98d5af1ebb6a4eaa44ec747e814e391873e55ffaabc30fc6798f2c9aebdf72fb731c6be8d69496eded514f334da832600f3c0b3b2cb75233e7aaf0db8f184868ce6e5f2f228d94e1efd64deab616a557a1cd9302497edb794bb7125d8df86ce4da7fc5b42e7be9afdd072d15b9a0f48d7b23b2ba6bb6cb9eee2513eb8dbd3f5e44ca1ae4382f3801c8f59b4b0992b39c0b328a10793a4a8ad9ab147666f7d3e55ee1186ef7a4dd5c208817a4dc5bcc5170225d98112fab2f27d799a930902cbdde4c818b670ae6d09676b1acca35816e8f58ff22eceb936236320be1345eb1d7a3183f0ea48e3c1eb549927b16677d59817e0e34837bd64e313984624a979cf49a074d847a46b553f5646364468a9bbd7bf133d105874486ec6233c0741e8e16c3c8eed1d27e9a0d1f4a8491c271d7142a110cea378e810c8bff21c27f7f002d3894458280cf7554d186e654df3b369e2db301ddebeb059f3b2b3fa4a72d5fa5d40dc365058d9de5ec75abf8fe173c36b78f807cb8f2b1e1a67ceb8f04ae6d6d1cc412059db19be83d2473d13ac2efa67c3ad61e6153111f598254a9b6ebca17b53fa2205f371fe49234c4c41f4ca22d8a19e1c9889d7a65459ed5a0198ef5dbe2b368afeccf485cddbab29ecd67054aff1afcb750067b3831a15fbfd2882ca43e8de3169a7ede0e54fe55ae4f56478f55fc87c36d4f4db93faf09dc3bf3fa9efb749a7f0cec504373c66e0698f0aeae867827cac639ed47f5dab603d4005e439e87dcc59a80e095b64203bf9cd3d241ebadb3ef7fac8e6d4df6d3b6425e1f46e0df349be4ffbe04144a125e9704d2f5b91537bfb4ac089f890a17496b853628922ca28eed2879f126b0f1a7473c1f2022f306056923153636656d8ce2e9b88d7fee92a11565316d49efe45ca1ea0cdfbb21fb04397306eda5fb8a86bec3dbee94177b9597b6ad9db764328c5c5d6d3af2209fd2b5f32fa67dc56794b754687143d6143874621e622f258cfb7c8fab86b3f32d2bcc51dcfddb2b30a5cfb44b338e9dcde4012ec609dc4a0ee9fb2fd840809cd721661f010eb0a0a05ed97a871eabf458d6b383e6adcb96e235b12823f279e833c6dfe63e239a589abe7cafa657ee227baee6993a23b9b93c11ea7623fda613c3d9de1ff1f241b04ff87fbfc0fc007e85e0fc3201196fe5c7ebd7d03c3b7274216553dc4682d4c8683073ba12fd29b1620c25a1df0868b5a8c8a2dc88fc776bb23ff187b079f642033d52676614cbfbe1982dabe83dae2874d76f56815a679ee9c60f78efa67ecdebf13ee7ed8ee9da5fe35584468b088cf20f47da7b936a8a3789bcf4b6c8ccc58c07af1d39b5bcc3c1a34a7a3a3fca4dd3b32989106481492bfdbee1d6cc51dd9bda3df8d5a39ff8c5294bc9a772864ddcac95a4ab2844a519f2598b5241f819ce3e557bbf7971b9433913157764706af2a8beb0b8cd319489b9e6b64b4307913bccbe9b938f717ecde21f9dbb9dec0fd84b39710ed64e5b3b87b91b61b0a47e52af788f9ae52aa526d99bc26e531c6043aeff32b0d6ee1a7bedc33c1d5d2bd559bfb60872645833060979f4106569438085c7845d9607d36a060ff9942df356c32712c090dcf029301758cc757e34487d25581bdbafb3895651f3a8305eeb74b1670479d1d5b13edbec44bda2e868f0134bdd106e09b3d782a29e2d2fc171ca9d37b1eb1843cc787de9cb851f9923bb6e5a2546aa2f7bfe1079a87e8b683789bba04d16907f13ad40f2b2fea1bb374d1effff7bb59fa77269fffe64838df67f7867c6f92eefd6ff689f0db7fbfcd72bc59faefc0f087ef93ccd2bf609f66964e0dc1f9639ca82f8aeedfcbd841b0d84e3cdea2f407cdd2e7d75739655f8a56df7f53fc4160dbf279889d4d1ca86137480612966d6d18b107cfe0c47932a541a677ec4abe26112534fd913f63f90de9c8a8eafd54f3cfb5fc66a907a30084f96e0f1c2b0bfe0f587e7fb7e7ffd80e57b593b2b593f87f6ef97de925c4fe2f5a7e1fb782bea490b0fc172dbf4117f25f58e9470d00859fb5fb0695c8f980847013f8ad42d23b56e902a2ebae728274412264e1def9b309f050219120c52c40be626498286d59a87545caf2a618a72a2272d375f9dce236422da1f383a9ec185fec21a047f61068c503c7db43a0bced3ff880effadfb18700f34604bb6638191f692344340fc4cb0457f2bbd7c9fe3f680f01e24d708a3d0432d9c1ff8fbdb78eab6a5d1e87f7a6bb1ba40405e9dc1b1024a5a4a453ba3b0569101409e986058834228874a89420a1a08494a0221d922af27e84e37d8fe70aeb7ad07bcef9feeefca11fd6b3679e59cf7a62669e0959102dedab3f84d4350f1ce82cb5ff509bd5bef7a029bfc8234452c536257b14b03871a2c2e867e1899ba7b9dc44aea278b785f895b44d1c5d4ce20ff83ff0db5f810f0a70a070a572fd6a15e13d6168318c893c00e28e84658e79873baa1491bc7afc52ba0d80d03aaf5c1cf21cdda950ca2e56b7f6bcd725b812c59ba8f5fe38ab1b16390faabf1a430c7fca6d74feba6d04ca03c7bb91729fd3aeae8e1b5d54e178cf4b332f78933d2b20d8d803049f080c1f06b47d2ce65363ea515e9c9b48365171c6c5edb6557b4bd1db8e7a292fac775799101095af10bf5ee775e5b47955fff01dfff94048709cd75e55a4cae9da04b4e2cf2a10843b3b08c5fefb6f8b80131ff73de7b150ea88bcebf8fe901a04d15af3861410ae0f5f258a13f896ef8e565d4df98599562165ed2ca891b657fb5d98115dfacad1de9c96224fa4bb6b77b57b5a7746196c95820528fc90a20306ea46a318e4de1068faa7f113296f650516a97cf20ffdf16fc37834dcbafb33f9fb0ea01899383bb8b8fc697c5c6b373b47336776b3cb269646f61666fff6833eeccf8be3258dcbd7b9e74fd60e37bcd4db263ab515e8997bd656c8090ee8c5b5eb87b5169c67228b60371ce461dd286b79e5fdc83ea2b98456ebf9a50fa50027c76baedd88d712179134284c55461f9f64074862297604fa893debabf247bcbeae50a39fb1427ba202e96ba7f4c6e2c2ad6e07ea2920aecb95f610113b16757fb4ea4062f96403824f04860f0386a7b1a98658ee6f212ff62c3eb52021357b9bd4b2cdebf3d006be18481cecab087041f50c5f1277c56cc0219e12bc1773d258885f89f5934a5929b128907a25964010e27610a203defce64fe0fe77f327e00e93ea5b3e179b9aeb7f1a87520cee7e612ae2e85ce9490947af81c47e4e90eeff9f3758fef098ff01e0c02e6e46fd0ba84154dcdc20fff4cd8ef57b33e570d61a44ea1ba7270a64eb23e6009a8c0aaa11a9de53d2e102d7463ab3f19ddd9f9fd9c47adc822f13b0ac5dee6cffaf02ce467f8b02ce6035968e59c3e96715704efcbf50c01904c0cbc7073b205bdd38ead617e1d329a77bbf86bb7d80df1f71d43bb4151a5c586d6d079aaaebd8059cf71a7acf51050d0b93dfaaeaaf4b29d46e177d72a8d70418c080f1049b9ad01826bf0a5e6eccc4394e844b917c02b6d519978b5caa4dcfefc2de02e63988b948ecf9ef158d43e6de77e257d074649258c6b22d8f2a3ee92218e0a6f8d78a36fe5bac68b02a62c7ac52f6b35674d27f71458329507f5ac1225bb2805e2112a2f87eeba9b9e4590fbd8888738747803552ebf92cc61e116602759b78e178446156817a3fed813fdab37f8f9f5763edb773783b1a51abbfe3d3c3f933cac9ce908d391c1ff25356747df6f59147a72a1565153295289e0a870dbfd63909867418c0013a0b929eeb8d619704d2f88591b88b8cebf1303ba596622f6eb423a65f3a0dab016463fafaf92910260cd2cf104666e34112053fe63ba67fb8195f99a99a8333d405813edb81f6e21ff8fcb1bffcae737f0863c823d182aaeff8f62fb1df87a5505d7d1d1a95df5d912c6953f93895158467909bf09febdbff27f803230feadb7fdc3e6180035638b7b697c42410e16d4e90281c2c64e4cf1028eaca1daede41934ed954005c78a4dab8279ccf26e55919ecc3bebab2c744a782a75cbace05bf654a70f9523504a17807a100fd20e966585edca376550445b1215e739726adba284b8ba74b105cff1a04496b77826f26ecf77ef7a746e95f003a5cff7000bd8695c4d6e2f8261e99d44e62305b8e10d69e604ad508cd978c97309001ebe4180c7ee3d9ef7ef57c83c1cc65b86dddc6a618b194fec3061eb05c08a09dc3012419f101740eb7934fcc3d6ff6b517de651473e5a8aa69b641968c86719dc227024e87c4a7e172dc7d82a1b64b194b30694cf9aad64e6399c44886485cff3995cfee81373cdedfd51bfe951cc71616896edb7d3d029b5d7762efe5f7ad59472123af79e21dd93e370a9201e47fdaeb8f8ef91f010eac95c3241f48cdb944c6c0d7438af899515157b5dbece0b72391d1673969b0730105e1ec02111a23bfc95e3481e4b94d6581b295ad76175f0749ea16246cf250eb7ddf54f203dfd4970387f9a64ed5dd05c9c00802d4265d306081fd7eb1cd1b8917db7ece62563b94988a4adc5e0ef29765c2df78af56d55d7700f4f9a5dc9fa24a0c06896f72148fb1aa3c6c343d59ff022348b5c4dac2886b23f65f82b9c9df423007cb7b7fccbcfa3f4b304ffebfa06a63781a1586e15b1ea68b0aa86b4a2bfb5de53adc607632c0c765eac83b57a961d3ea3fcbde7f00c81cf49e879bc4212743d61c8e4cda0ef92982f9fbb0351c8b94f63b5c4a0ed41a19a5f6aac2fd4726fa390a6000e75a6a69ee7c7266ebb9425657e47b142110e6c730cba9a2b7bdd343bd86d427018c66ea886146d20aad13dc544f1a9fbcd76ed4dcc97f5038147d33f0d6b5cebb6f2010db6d6be8d7c003049811e20652f25c598aa6dab5754e1a35137feb6be89a590c8b1dafd2fc6180668e74002a859fab532e2379ff234ac26d847c243548f78adfe3c5228d526a3400499b8a0627f45ddcee5e53f91cbca5bd2071fba3fa5e412347ab9b8cb77e27ef5f9ca71de582bc8a1fb248c3ce53f6f1b31aadb9f31e8b067f76f0ff3bf0f7cfd3de46b6b31c6160187deae6d2200adacd7bdcd62e3a7e4fb8b3a8b0ea6ed848aa815f261f0d62780e439fdfbf2608823d9e85cef75cb3121cd972722e4d2a49a92528a589322bd0593a435c5876b94cad743af49d90113aa06f9b874b0cebf67448d22335d9dd05cfd38ee65c4b2bfafaba9f97fbc6798abaedced4b8be9575dd886004cfbecfcd588639004df8481c47fd2dd2dc0b6e37e2c3dc4a1fee098b27cad389ee266a6f49316e701dc444418f8e8982aaa105c9912a4efe784cd48ceabc79cf2c6b6ced3abb4cb01a6d5ea557209895f8f0f25b17274ca445af1f5a0d12aac296e5efbbf411843e11184f30a07991c22ed75dc7edae7166cc5e0911fa07bb971c4b13c99d55095d78498e8e26c0e5a8a292f14a51938fcdda54e3f89bb9d9352e9df22905c8a3e9ea3e5194cb025fafd78c7fc6f51aa1b4e0342b9d4ffb5913a4dd41dc68f7cf0bf8b192320bb6fd7b7e369bfca960093888c0f061c0ca20065b9ec5fc0c037174d8f0bb07025d8f676b19954b27abd3d0d8c33b336a003a95990a08f6f5bde79b08814caaf7d9589e13ba49e25f6bbd7eed247cdd305cf2dbf48cee3439b6e75406fbdb06effb4edfe3d340171fdc0c45c9eb7892917fde1f06e8cad8b768f3267cbe778d4ce4f374933cbd4e94ed89b84fbe8957cad046cc78a080358f285b5a13dcf35495738c01b7b883f16a9c36db64bbe9786da86ecfdb288e6f7662a39b71218a132b71b7122f4c6d9a150eb347202f6a5feffa853bf1b99c33269fc93f24bf87eab015c2f9891a6d6e9e06a1ff17c3df7e272ef4b9244c24bf5ca21fc1dcf5f8fd226d5bdccea0343bd4b0eb0cfd38e2ed7aa5c6e3d0ffb213d35e3b3922bd24d85dce3a661649814c9bc4f6e0c5bc7c8ec5a31e0786fe018c47981c4ffb6da29fbd4dee9c18d3e5e723b0a29b9b15b1751ac4c3a84070551d66a502e9000e04f7af726027e3784d69b43e78a7142318516f6cf670fc1cbc6750b9497ecf300b501c4066beae23fb60a282bdd1a60e251b9f74b045dfb0b33ccc689e31345457040275de813a1c14a942a1f08fc3c80cbc809ca7a4e9a56a1d8665c11594ef3cb11e62c77963b5cbbd068a54cab979c4a0a393c978371dda0a6535bd4d9072b71fe49dbef15179d8db9f76bb6b83bee723ab2f92c61bac20b512aa1f69ff1300165f008103d27679365c4d9bfa8c74235abb25629a7e414d133b61c44deb4be351d41c5cd701ebddf1e461eb193a7a8ae8312742b913a36d06e8b39553cc4ade986e7ce72b8621484a3b48178270294cf7776a7597e7876985af7fb95648fa4a4622eedd980906de52615ce24d3fdf6039c9ab6242d94d24cab6e1b01bbc2d730a60ed20fc816900df14013e422b4cf9c76885c8be7fd6bc0aae1562dc1e7abe75a49705d1ba0d5810cc71001a7972f5083b1946fe9525d55f7f01db584a8912978e287c9ba9564467cde2d18ca8ac3c18d2efe05006d1f17709af71c57d23ee0d9094bf7db41bb7594d327266a8d96d89dbd9f89ba3f747eabdd2577abc0da2ecfbc6530c0e54ac388e647f767f80857e4d3e1e783aef83457d2fc655023695a8c8559b9fec062865c7219645579fb55ff3ba6c799d37de83410b8b12c2bbf8f8731ed567e44fe70e8413a7df8413efffb670127c2553859da398d9e2ba7c18d3700e32bda723588dd5bf18feeec28955d849adb911c14b2d431816154c4f1e786ff962ca5567d5daae67a9e1b9779e28b03c0efd2fc289e70e914587fb732499e1cf752961e2e5e8a5dda8b16fd7d556e0db0e8f510632a8c4b19353bdc553853f2e0709265cd0b8f86c0376ab7204fb03559e3dc36b982fb89af826ff3cd34c06d750c26d1dfb9da470d74fb6ba1f8966aa4ab38cd31e8b32273403a7ace488c4d294ea824a2cdb94e1f0fbcae867cbf09d76fb142b6542f3bad3d2ff653d35fb5b584f3b94b2c467b9adbc45e880780759dd9049ce707985c5c9b3c981da92cfd6ddce82b583f0f7b3aca7a9ff9873f2cf8380ba863681945dd5111eb7af36b771378fa201adbf86f5533d8aff00b49fc9168fa03f455e5eb60242e2f8e7249c65fd0527dedd96915398174856ed36941ff6fd6909190e7857e22c5624b2da479bf7297a1024afa396073c9659af8c7665bcd0e668e9810c70989f7d27da2459816cf2ee8c3edb4eedba852ffae656c54b7177fa7ba8b9e25bff5ad1e67f8b15fda189f5036d722c9dbc197650e5dc7201fdab45773cc6040f5c89373cc86caf4cc1da41f8fb592b3aed7f2b1a0281d08dba5aa88a3d3e8286783aa5fbf62fe16e1f90560bd007bc0e6da67b955f723942e8681ac75fd1f161c3773e5720245ede33d3adae722e44ea343bd438090630e053cd331a76bc9ba2a97b6ec6c332509d4e5b62e4e43c2ab66cf3216891d85922c02dc321d82c1e76279691ecfe25df5503998c33f906934b9e243ebe77da29b3cc0eb2901afed92ca4feca90c1181f8c5edbcb5eb67e542511f09e127d10a6ffab5948ff047f60e4413d958edb271cb05c603ccde26e70436f53549f07776acb8fa3104b6494bcfdf104f946e216a506a0251147717b339a64b6d4b0b7d86dfb235ff07936e7a9a40e3bd4332ed12ffa0abe9a924dfe196501b84e20db9d2e17beb8221fd7f32c7120b3ffe4de658adeb18eba5b0a827c85ad290087efd28747ca5bf216a2f9dc88bacf1caa923767d6d20c83463355b56202ae681fe84f0807fa53a84a5c77d2b894cd49e1c04849f2792a067125802d9428143d32ccdef997e84fb7daa98685a32d22a557b25f9d9e22b2d41029021b95bf188ea13ffd368cbf875f61dce5664ef1f2ed8ebc9c81c5f139d7bf669da519f30e7154498ec8597a07cb33dab6c7a1ff457f0a6b7c8f703f588a11f55aa8cfe3a79f6b3d9f525b3719bca04109f454e198d6c373f7f02fd7961e532a3c713b9ce0de1ce7c615c9c267865e2b2455e1f4379f4a818a61704086c9349dee34c070a186d341cd7409f5169482268dee755fbd647e5548807d38009d44e80d25dbe2bc87c7bf8596bbbe53892e11ad4fc4de087ff6fe839acee78c7f495b167f0b69ab7ff96d9a5bc38b2647dd1aa9fe2c5fb18fcd4f90395996bc4f3309919886378681b583f0f7b3a4adf4ff495bfff33ef90d88ce2ece73df516aedadf0741b22c33aed3dae809406867418c0817c4cced5f270e21cf3332f59c2b9dc3f842013e26d7e140edbb60ce812aa26a3047835b021e6b8e22677a7bbc93f65f3e45fe529e7d33bd16ada25b1d1d9efc3aaf6af156df9b758d172a7169ebc802c6f08235ceb943a830f2ff78e9678ba12163b8c8dd448412fd909d60ec2dfcf5ad119ffc5150d36a58ee3340cd6358efa72d3cc51bf60d114af3d9a863a5811bce30146eb91e73a8bb1fefad1048ebfa275684613735bc2a39b78c4b1951a9e5ed6bccb1509867418c000cdda114a8f6e0bf77c7ec1bb5a0a995e3c05cd12679c4a0d9d8b7436d95348ae019c3ef9e7c884177d57953b70101fcb56d2873abfa811111c48dbd4796218646c702079daff55967b5ba57c8ef2992c3c71262a18717b990a570e1b4806b7bf1afefe96fbca4b5c39e984f402967a9ed6a70daba970e3c9acb122ea249d0202ac0957d08f1b1d29c6be42a48baea9c094b3c52dbb141e1e889728b3c733f3ce40d7bb77e8514ad034c9e5ba4a82b2d69286e8eee76f3078960ad80c4e663e7737b573dcb822a12a2d0566b98703845eef5b958d36e771f8ceb6055e90996c21a3131c49988795d9c5301ac6561b01674d6ff33a94652ad213990e5ca982893ed7d3e57b8fdd556797fc9258dfe54d17047a7107aa84fe9b8357f2771dbc42697407aed823a7feb87f972f7f4a2e2aa642c767b52a0f61dc06b4d07455b0773a5c92a1e6be7739f18835438d85cdc24906421e4204c6130cd04b11ad0a95607da74ff4ea8347dfc78dabfc78860f96d86aaad5a32cb0b950af037266c1f0b17096dec8ad7982f2916445468624b39066197e81b4bb3a92ac3607a54130f6fd9dfa527f55e93a64755f00067c2ed0dfeedd89742e709e88b9bfcb8438c033756fd7bb38fdd21db6891755d9f180738f286a8b7137b387b052be23d3c51977f1bc498d4df451819910b727c6450fbe1a104c7f8201c18ec610bff2de0499e1d06deee19c20aba0627391824f0bf6f71ed76c2d44c42b80d468418080e1c38153f43776d361fa84c218eb0f2af0214451d32ed9a48199f4ce21ae01819f87c501a91b1df6e32b3c241cb45617f3d4a1bb2fba60e119caddd9fedee48e2a4a64195f4ba148fd0c830999d4ed7eb58e8dcfad8457cfc0bbcf351662cb639dae8c650f8f27d844a49b04cbb34504860f07425dbcacc222c3879bbd068376a333a49a155cab8b05ceca42bdedbc0b9584df008c2e92dcd4fcb99751aeba4619bfce85c7dfe56be97b7fe3eac7d78a30d2f7b6ef20a87776508b837029acf65fd85b99f110411455f2970ba2f451f960c55f8e595c0644e840f9c621fd084134f3bf28881eaf1d8ff548dd6febccbb2b87b7225d9ad3ca38d28f19994f0d24c20de3dcd1edc78587c547b522f3d3dd3e1afff882e80d01bb899b76ea2c1c49f9338312635addd8313f10d589f88d18a7bc24bb1c3c3a924a0d7525e9193d253e20d30d16240192cd0f74fa189ef7d4bc74c999df5dcbd88d5393879347495380ef0762aec006080da41dac00fcaf0eb63b66b56d503df18772551eb3dcddb79053dc1225ac05e6fdfae7c5f003f8867fc7106376bb9a9b705d3c36cf2e02b238bf4ad902107cb06b941faa56fe27d622d8fb7dc3df772b64fd0ec0d62f0c30533bb1155814f20e96ecf37966d86dc1ec2eefbb22b4a6acd949a134177ab776006bf23d6ae2f49b6b231a45f3daf7ea937a67216dbc372e7bab2e4c7fea183f4ffd2fd391f5cf301d7de3ffff674c476025588f59e2f5e7988e2057f921e6e671bcb8cdb4ad6f6bcc2c8285b327a0e53dd4f7ffaf998e20bd34da721d47fd8045cf0c24de40fda716c8fc37c068e73baa99c522a0fc6802c73fb169aedd4c36261a10a8189e6e7394bc6aac4be772030ce93080018f583e2006299a5af737b29fbcfdf293c079d17cabd8f3ada54101d0f4c9ad8668006d16eec84c9679eda3afa138da385a9a8de90a6ffbc206fa2bdc538b838a659fbfea1ce7ff19f13eababeac53d77bd3a12023267b9ca1613539d5d652c6d3004df422fcdd6cfdb53007c8c962eafebfa1d898dbc9def5c6619d8c0bfada83747ddd23350215e41aac1b91ff9ad7010f98dd91b17eec0b4b69ad3e1871b7b23e1991bedb01b75c7f0771460125ff1acf622f949986936fd9962cd8d4d3749fcc3de026a2275593feccbc7d11ff2e9c2f03cabc391364fdac0d04482caada81c379a1584681ad8b8888ab503e8f20723d3ccebde7a22f1c43a5bbd59a21e41f8f2a79af8539bfafc1c69a798f121f8ac3bf8cc0765bfbc88cfc4c1ccd2fc3bda1d1a67c4cbb8dee1e24aa9330cb1fad7e0b5c4223de605195b90a87e64b0a87f3000b964029344a0202113082059131040f84700e91f01a47fb0e4c38820fd2382f48f08d23f1248ff4820fd2381498284aa9ef6ae9666ae5697d994cd9c1dd9dcb9d8b94150fe87ff3ffcffcbf83c3f827fccfd0f6cff02dd7fc0f60f90fec1f67f1490fe5140fa4705e91faca40f3a48ffe820fd6380ed7fc19e26f8df24a8d72e439d9d8bba5e66d5722e4a2a4881f3aa087ff2f7eb31ffff00d2c7af847fe35ff9a6736ea95c68f1f54f11a6c372a3f7e407aa23ff49fc7faf2cf63f89ff8788591ccce13322925b033a4adab7849b3ed32afc93f827cc8c7bbdf20a8f8ac83487ae2b9ff8918256e5f03f897f5d9b79cf59edc28766a94b869fb1d1ae9ebfb11df24fe21f553e8afc53f48bf2791522111a325b60acda5ffc9fc43fba685981ad01658ee0120f45663c66f9edb58f8cff24fe7180f4c47b680a57639916e4b7e77b339e643b9cf827f1cf95659606e01af9868cbaeb9ac6dd99c1d049a3f827f19ff4a4de99aad980298b314ed80a3155a0d19a6ef6efcc7fb15ce6376e4f2c42f7da829a5a4fa62244732dbdbffb8c483ae230a79b4d7aa7c784743583878785fc7a3005ace7d67effe07bfc1f36ee7756cb9cd019ac0eaf76fb1f385ac200e2d917cc55178b2e53c858165f62c48825e1fe744e27ad58d383b7e1fab9823b5d80c1a926f3d1e59eac4b9a72a2ac673646146374ae9cb3b2e059c952c959f2b9781602b1dc3647d9f76d18f388cbe9a0a1614c7afe514d7a580738c75597b73a46e71f4c20db7a0306687bdc7fed81e4be45d89ec1ed99b1cd9424cd5251bdc4e56b58be8c1fdae2c20848d32fe0cd3f87bd55747a38c687fe31cbd5ea06fd1c23ce4b8570ebea01dc1302fb66249403872b56846314b73e12c228f33961c033bb9112c2c5a567725c01137a9b1aa16e1be225bc748402a616776fe32c30de05ec6f54ec84df15564653bc8fcb219796f8a803b7b38e50fa094eeaf835c2c17779fbcc4aee338be95416e7597fe339b7647d585af869e514364d7ee57c1e17ff6ac938c7b286df773ed6b339499b1e14587c77e09a616e32aacde8e8913142509fcba230a0f72145c45294cddd3a22589a8615a2773814ea2bc5353451f1316fb35ce5e51ac057f596074b2b1893e83afc84e20a04a76dd1b0e2dcfb0c33b919b6c59c9e04ba7d079583a2ecbd3cffa9834adabb308da7b49c10236d91ad1254394a2748dce1a595bf08f73e09fa30202aa25b51ab1e35d58231f4faf5d053b4b90d38dc5883167811ba568edd21fa5d00072b1bd16e5d426d95815ccfb9a153461b8a1e185637988693b508fd263939632090ceed8e7d5e8390f2fdbf9bdbd4bfda34b49c1a2ca7e9d156795dbf6f66d1e65443daadb7f3952c34bb94c8d9fac14e1c420fe00065c5d9400bd2eb1908a196ac2445066aeaa776ef4811001eded68ab06003d362e002a6144fa568dababfd2d08a017ed0733d0a01c4803e769d05822b185cd5419dfb03bf5fe53b30e0d27f3af09615e7b5783e3ae7e174af5f9d7cddde1062f60934900c0ed42c1b2ade7c73f38e44374f3d917c841893c8d094f5bc21ed1d2cb3fbf62f61f1802c4b6cb58273a124838b3ad9541d0b53711f3a8dbea5a9de4d2e94cb0d76f10f2090a2ed824028fb3eb7c30171237890b4067dd431ac853623a34fb1838f21d859df9b2604b1b1379199c9ef70a9af53ae93e0f69b5b1f5a8890c8d58c77f872083f1cc0cc444ba3230e8dd63e43817f3de3836727477837a7596b97681c79613ac67b7e4020d6fca57070c9dc8b114dc94cbebb53c91fdd6e66eeb1fa17e1c42e5e51be217650411d11e94757602f5f6ff1fa5a8fabbaa1e9f3136ac86f6e4c9f3edab3555893160630cc3b25203b4799c75bf1a0f85c97c09e969076b86770859e3baab6fdf2b8e138204f29e839e06e88cdb58291c0989daa369990b2a2fa9aa9ed4173e6f394a8fcbc0376a1650746727cc7ff742e5cb5ad7cd4d598c14ec72c682a97b5c37f7609ffdd51dc62a1639c840318cd495458a6f3973fe5e561abd7c557f89f7ab047de523953e55f696068549f0058b05c7661d32deb1ec475c2454f4f8d324aee83f66f5dcef77c599749001b10d99fb798fb3321a2f75779b441d846146040da4bb55eedacfa06bdd36d66e54fd2f1a473a6f25f8b79c3919996fcb3375fa900ec97ab1c0d4b3edfc070df996994a3f89813b5da9bdad2635bea389afdb2f341c4d7db16e97f467931283744f8d48ba4a567aa92332f04bd8576426ea2847db0a148e5f308405fd591044c56334a4517505b1dbd6fbebfb056e5aacde6421c8a769e22fb254d443e97eec131891a4448d0f72b8fc91bb3a42430e0791c3756d3f5ac7a6913d1e00fbb8e750bc4be9721fe74cfce5e20a06b68dd84014289f40201d40a2dcaaf021f741b3b0e27cd105b5194260db1193e3d45f600dff4205535ee4161f8bdbcbf5baa6a4216375cf856c4a51a35c70d9eabacd2d79be5b48f42265557f73bb25d49ef2248f7ffcfa7aafed131ff23c080a48f40de93ca0f6f5c65da48dfb5e24bac69e8744e302306929c0cb0ccc832b103b8cff2153cccf421b590a4f343471ee97f169bcbe36de462eda96ef974d56cd0617f09053cfec51ebb2452f07218504dafd4a8cd9bb490556934a93a8d24d294b494942d3bda691a5a7cbe86eff37dc01620dbb974f36490f7345e919e979a29493e1a0c97d5d1f55ef23b16cc76e382834004e85f95df7059a6a555b59bef83636d490a0c19db9f0816970bfa8dfe52f8bb0722f817be68f3d7273defa3624c6e82511c56b8baa28ebbd016a2a78a8c5fb33a8ce723701cfa1008448c8a54ba734ce97c91a45ef07d31555d43ae6dc1f3ba3a05adee443db6c1d18d0df4d10f5dc8cec6b5bd48deeb29290e7220eeb922e2fee2448d7496a056de06391d58082c0c183aebd77636a69af3b59b6ff199d0f60a15ae661fc05065b8daf2bdd0ba53b806c09461fae6b354d54d9b53a73967a3ef602abc5c1bb2202a4d378cb48ebfc1a75ef1f5d496f927f8a1c3007915195a96402f2fb1be2731646704477224edd91cd861ad7016dec7b27e73f4c0090f37882f51284ffc867db10ad96d2653cb9b8f642ae3d5dc722ac2cbee9a891cd48d31fc937563f6644d78e27db89797bdc3252b046e92d3157734800dcad1cd3f371bc39fe00f8c3c683686e3f609039c152ff6142e08a4a5b57af5d53b140a1060e4a586f804d24df487d366f047140058bc5cd979efd83f14898ee72f694c6020fa0e06566a54f0abdaf45e972781a04220f6dbb6416830c1afb96e5f97b1ab926864a9cbc06c44b870641ebabac49f0a454d8969a52e83f8c3009532093df244fd92097b83ae74710cd7cbd6599644a9c64da822b138847453b9000be9fbeb1b22f792a2b34e4fb9cc2c585f671f6fb9dbf7606b59843d37a2e3243204eab003b50d8272f9065107fb075d90178d0b2c667d2dc2637956abf1c2a868a2814ba1f2bab67f0d14e9feddfb8f7effbac49465549eeb2ab62705645ea4970a84a43ea982817d833fd90eb5fd64904fd686005696e04830e53f77ec540b70e0913b7312f5724c5d7ba1325bc42b6ddac7271494f1bde033af521c9df4a2afd1025718cc07c87b6c73337adced7b486687bba767c832836d5f53693975a62f7ec8ffcd28f5aba5edf9717738d0376df65e1bc2d45054c451225882e1de34aab7e49de401cd6397a52bb831e509b0ddc53b7197022f96312bfc0cfd9d00131569a34136b119d747f9343c416344f11068e90eb4281041657f9b41c6458dbb689c6cb44545c568da5a480f63bd5bf321a356c4bf062ae9ce95019650d590e05d1e9f83a12c9a49b279421e11b26f50831457e3f0bc09eae855a1f010ca6386fd431838e1e63c3073011e366e5323381b2fccd89ccd88df889f0d2660ccc70de3e3e38173ff7b25dcff1cc444c4900b71c28ca3ddfa93cc4d8d197dc84b2f6f3c86c2b6724bcaafa066d9f9c98f5531dcf58bdf24985b94099dbdd178d581d727c7b65b60b362f9a662ca562cf829c81681265fe62b4e607ce1f4aa0acee32c07f4e16b1e3ecce2afd1f85655961c9601ced7c4d67b35f3bc39e1657e3dd979d76aa091fd51eefcd04f76f9643c59be1b5f4f41d99fa1bb863156b3d26d50739e55d37addfb5849567296cf134968ce2993861b29f6e6c5232ac1ed03d1b56773eb9c2be91b44cba788b69b46b1046e24b6d2584f9bb56b5561d2599627c2818bb72ff293f125a3bb63b4dc5fde4988ecb85bd615a91612f8a0afbec36ce31103c085946f5384b2920a10cb8d3ecfd52a291158b737875bd54e0df92f77bfddb284a0beda411d0f2433da9fa0af5f35c7f9e70062ad33518d7205591295c5bef85b61f764a035a81e4f1089a27ecf1d98e9ff7b6e7c202f0ca6e9fc90a3fcbf034ac5170288d8906d80faea39e58e2c2a6561c4b814cbdb8ffc35c7c48c7c86a02d75f99a4a14e2fc231771d401b70b1fb55a65128b95661942dbf8955fe7f7ce5b683e95bae1d50d81a66c5366d93a098a2471763df9c47dfd1de3e4e97399571536f0a56ee75ce50dbf6b6afccabaeba5ba4368fa3337a5cb08585ee7232c96d9b7a8063bea56d3b0e549a008a1f7718d3f21da3f627329658d735ee52a2a28085be3df8179ba184c2f3c8ebbcd4f80ac6d7e26f485c20db373752fa58df21333e72ff61450ea8b2bed92e45b5a4090ee51bc754de68de9b27d98d0440f8bbee3cb92040f3539734b6da2a2888c2334849261876c442faf8f94a79c9eaf35760cab14f19955429e6edab9dd930b9b9b541094119eb77a6fa9f95ca59fde0a2db1a0aa68af0a51637e5c54667fe6a4d1509e5b3214f06c900c308d96dbccce1ad6bf8612aae08cd6238c43d746272e1ae31a3e07417b7f75b5da9395693381c3e5c395d653dbd398d838f9956b582a121988fd7720b9a71f7df2d8cdc820622c88a8d579510e0ce69927a3d754623a285cdab1e71b9d8060a084fb28b05f8d507bec3165e62db86c41f4368c0326ab8bb0423e9346887bc251d96f4cfaf620b1bbc5e640ac5868201cc35d8e596351e17dc7f5c1331772fa422098eb0630e58170e5a19bd26f4db2a22ac8afc40f6131ddf0d7221ae3bd980c7fcecf284da18399e7010f8fb3c12c16a9af512b8cb852ebdaa997e257e8c6e599058362592ebe7226ed50e62b48ba9d94dc9310352b752f7a9dfc2317ce8586fb43a378fea7ce5d3f85aa9a14d85ac94ce3c82ccc841a553ce038e75bd395f2184fbc6118098aed2c4e987b51aa6ccdfb3e85b05600a5e01d537f2adddca2b556e8a7362dda7785fa22a5ea7342e9a63ca392d7af57b7c93e44559856de28ef35ea651a362fbf1102c5d53016134d94eca53af134c06db3d3e7020af5f25ecd3acaa3c72f9a9f775d63b9c25e9ee171562bb2b1fa5d8b08da2ccda5cc9df357c49b5f3c6beea6597db4f5e023042f8f8d9cbbb313c7d94c0ecdcb32fe266fadc1e391c6f0cb82a718d82ebbc97dbc892c09bf42c50c30bf16fe58956e70fd74fce04e1e9e380a69c77aae8399afb51d94a0a6b76bd135593e459b746875cc8b4e6b9e21f113594aae07fec0960bdbd83d6eaba0f2400a36460ed4e1fa9b8defa7551f3b67ddfe702b03ebd3ebb89ec5d95a748829bfc8e0fe52a3d8ee3ef9b028faa407a7076623106104d11b03922464de6f2e75a927c09bebf61d958853928da0cadc9a32104408140245802043d29110a26a6505f97cbbdfca3c2774bb25d543556379226b0eff8d71251f7d6e7fa85f12cd4d3befcfb19b64fe4a27de654093e7fa51169be9fb4f628a0421bf8f2efbb231099bd0ecef24e46f5681bdbdbded2fcff88d29f753a490932edb7ed90550bfc64d7d65f977ffbff82391afcfdf36d33ec85235aff2ccef709c3443e0d7ec080fac66d32af87cd532e116a23c12f1c2d8333bd957f9abe3b1eef3f3cd02248bef5c24bd09d49f3dbf4e19d3a3490a814058039ee2ece79c46c520c4f98d39564fa6acfdfc3028ef72acbf3087fc35e8e510e65803faeeefef75a8e87567be3e6ff3146d149d7ce2f721abb82c72fa4305ba7a56e208f5c3c4224261058921fbb77b46b214b1f80463ab0d01d2dd94a6846e5b995a8c0476e66afea1e77977317abebc7428c193fd449b4865c3db5f47ceffcec3fd0140f4a478f585390208044279d4c885528691ec13a949a4fefa3cc21bdd8920324cda744673fc253783c860b22629ca1d41cb226b37e98c5c86bd60eb570df7393103bc972e8d4fdd1e213fed86885d69a41b77cb6c4368004db9f24b9f9b3c7e195f9443925845eadf98a31c3bd5b92fd5e4de1adf979ebe7c56f4ef316792fda4e88f44be3e571372baf530c655e15c6f801c6bf7edad665c266129bfa0429716eaf4e552447980518537f19cd20447d465343e71d79cbbf36d4b1237de25f549bdabb4c9fafc6f42f16fcc7df7f8faee673d0a60802b8e40fe9dc4d017eeed76a9e3069308b7190749bb7dc49639ce206a5d35c260022cc8edd87893db479325e8efa93faa85cf358e8c3eed6ab3f6a1c72f29beb5fbe2b7337e0cf587cff8efb9a7fdbe5da9a0be0fa777c1ac43e2446616a922a7995b7c14c8fbfcb7ce78d59e6c0207267d7d9b0d2d6b2ee75e31212dd522e38a0b941f6424ec7b364d6f21597a0a345c6e5bb876e616199f71b91a0d364c792f4f790c7a6fc36b5bbc20158a2088fd9ce3765ae9181f3462c8c3fdf3898e135b6552c10ee7faab1d3223b01a64dd4495ae69ad3b0afa4b3919bf31e5363bf5e221b1dbd3e526a99dcbceef120a58214872ca8af7ac994217dd654fd9052fec468f876bc62d1979916b20f59f7bdcc7c2705165a799e69d50ee62ff1b942a7559cb7cbafacdc2bc0777cf1a72efc592b1724051a4ca34640c6baeada848b27904f4f73fcbaa133899d9b4306ac9103608c4d5e61b950d593c799fd83a5febabed5e14629bdcb15d1c351ff6fac5fb2cdbc753255c10b4f7844fad741c17356faa3d2cbc762a1ea7ee63e55501821ab10b49be6b9dd24212acfc8849cdc3b4456b1a2f1af434f52457e2c8995aa31266fb1bae08b77b8e5241301ae41bbd6fefb1d7ad5312d3a8217b9f70f7333f798b41dcf3044115a47f4d7a59b388d4a078d1968a8adcc58c5de15adf35b6f681c07caea7653dae5cfe53a2c6504ce9f4feac5b508fddbc0e17a42ccb94bb38b1f7eba814671c91709bc442fde62a5c537716bcb18d13d2cebdfdacde29b8469912a051a000d30f926cb2a0445db28260a530cf72659c9d2ba2df149224296334508d6a665eeeeceab5a9cd8f67904c0e3f2d6dfc9ca6260b994188deb7a99b4a270cd7554e37df7b63ccb6d251d5e4290d047bdcc4536a435afdf36bde22a5cd25276eaf69db415337f3e83920f0e4a710960dd1b32edca1b76ea65a5f31725ca6625f2690a5d0157e87703aeba2ab4f4cdc730b28ce46b7c39521d505dd1eb7b214aa41f5244a794e7b8559319613d4321e66d131d1124324f37c5c4f0563d377a2676eb93b5261293af9166b5855899f86087f4ac986e0364bc73c36cddc2a0d5fb6a948881c7eb8dea8a8cd835ebbaab42c6b4f9132b060b763fc21aec44abb74ec3472a02661fd0aa17721656423cbc08984b07c63d655085e8db7ddbca2921235e1278f95a0ad8f76c6ab4efc33627405cb5a842fbd48fa16cef750533db2e163c780cb2633a051a83daf7a764bb94cca526a59f3217bea134d28c11c4aff4e55168978e4a56c24dc1a0dab263e28056bcd4891b24354dfdb06ed7445823b667cad0fdf7f6ce7288f7d6ebce21bcc70df025720e693ff9eb9d8c2ab07d01f3ee3cdff78c67760611285d526cb339acfa9e545ad447e1036c079d4d73387f50138b7c0b8946d7fee5c3e23dfb589d8535a50ff932255d19342928242795943313370d757296a5ff66ffa61739a7d2e94af51fdb6df22d0fb5d3a28442b13bebf8d104320907d95f190930a817e44f620f3883a6bc5d7e7a2c2c2dc75da213c019c348ea3596864850b73fdb2e591fc37466a7007ee279dd79f168c26785805a9eec70ce3457880a819de9bedae91204dd5e6dca0b759bc7fd984e26ff79bb16cfbd4d7c300c537f637efeca9d62fcce1402010922398fb86c8d7e7bd689c7a11bc7cd2449b48615531388c75ebf8f1f6929c78d14a440132d518562dc4e311ecb53ee524177df6e40ddfbdcfe5a272c52e29e7792542a0e64b6fb1afb0628efa1d1802101cf7be3287d9ef2779f06caaf40b73f8100884f428e67e4fe4ebf3b3ac1c8fa35fdb0ad5594cd847e1295b2507d32cc223ae734b1a51ace2791862c32f990ec76e55f904042e2a230e7b1b16f218bdefe99dc1575360d32631489df842079bbb7d6e9f2ea2e2d3afcc61b309901ff4d53706fded7cc73c8ab9df13f9fabcecd5d9e953d8d7e49148dbee3dbd38a0cb41984c7135e6224709c4f256fdf444c3ca739f85dc2bc2d99f4d6ec5ae3fd466dcdd8d9c0892a7dd11a1097ef9545941eee06ccafd7ad1a2b4b7b77790321d7a2be7b7676aff895cf90d91afcfe1808c3e3e6f8f412adbc3b31cef8be4b41478a9b9cdbde8f1b2cb946c77b4b3035980d34fc3d3a133380c76ceda367bd83e1cb1d2de0d704d0d6b564bac8e32ca7b285fb3c898fd13b2aac0804e5cd8b895e05a18760c2ddb5a54c6f3a7141ec40f4e7a7f4a1acce8bb4baf3305883994b8d35a48de37bd743623a47df8ed650d06bd10147e676594828fd7e92e91fe2b46dbe66f91de2ff4f6cbfb5a09d1d1afde7678d670370fbce57775498e1252c629aebe18e345be05d60ec2dfcf4aef07fc63b2aa1c0bc0b3aa60ed5a4f1f4d83fcb8d5258f06e89beb473563ed59ed801038768cf699d6a8ea65e38e21abf267c2f56a0ae1e9e5b04430a4c3000e389eb2b4f13422bbe31731debc65ffdea05e22279c5c6d2d5c549a9c6c1a36c108786ca8a3b2cc3d9e785dd68bf7a46e2a2d98f51e69f7438513536f4f75a5564ba8ed7b38a1fc620f27f4fc787738a02b55a34b9b18e4a6d01bc0aba226eb2e825c3f7e67c289cae93cc6ec9d8a9bcc003c32c722024d8e940152c29b5bbeb5a5279b6cb9155ab4e00e7323c3a30e43fdbadb9aff8cdd96821712f46c98b7943967355754422428a584973fe744a507b96a324deba3453d107c22307c18f0e00c677e05370faa943c9597c254bbc7b4ceec849f3e89269509c4627294fd3c20142c342ea40759a0ce7fa7efe2f6c879034592ac9db8aaf98e2781cf87cfdde910248e1d24d6205c0adbfd1796b51c396cb76df9e5bb2d91abfdae42e443aedd88f44d8fe111a50fe7356ac724955b4cd90afd26293846137c68c0da41f8035b5903bfffeb88dd36eb1f931e1901fff0ac054cbb5d06e2280187b4fe07c528482dd2e8f18eea5d8cdcedb839c68f02a481e9aa23cabcd151f9242bfefa326ccc163375e9859af8c53cac7742e5077c7752e120a68c6f409e163a4bed3fd466c5222c8f4b2375cde38bfef04578bc8728b262b7f239aa90284409e10556667ff799a43b691a10dfb4a87b0d64dff30d030718a07be9da8bfec4e267866df1e6cafe112a17911be89c749324f1936aca5361797b80dc9c13023e4bd784ac9cad478b3f85eeebfe358d0576472c97eb99db6c1f5363beee90163f638754232f89e59b71b9e63d949142b44307d5c859288e1ccd9daa64653febe7a60d72924388c0f0e1c0f5dab6d224811d590f2eca1291562b41bce5eda147cd444bb1eea8d4f91309a7016bdee24221452e1cf63a4f8a96fc672bf251780461c10a4293ccb5f7d3432eed42204edb0e01bb073e61eb6fe21cd2897ae550c6d21cdd6d9e1af54648845a8a5086224998b6d64120c158e7c389e0c0e3dbe49267c4529fac1b14dd7a6491049949af2968b2f58c6eca88dfd1f1d0b603ac85ab52c778dcce905e887c1e517a3ae844217de97aaf80ba1c56aa2b224146f4fe8929b27f623e7e1247c37df721af3abcb96d23f05319bd4b9a1cb962dd774ecc1b002b97864ef12477640106e98790815aea96a1c3060e8919cd63b37cfa1c0c2859c669971adef436755d6ad456ba7521119f00e0b442cb7816542ed4825e310bf87514ea38ceaebcb4612c36c4e78b68875ccaf190b2a85458192962526f717d0d8116ef400b840fbcad0b4ec6b18baf119df733f57b1bba9bc2f2be76ec838bab997f0d545221b29afec88f0915fa46306ae34a9dbc7a325cdb427778dd2cf3f66e91a7f391ce5aa8462f657e84fe77e05067fadf00ec9a5dccbb8505666e1534197c5fac13bf2cce6abae3d3137a5c796aad1bda9cf178615009ff293fa63ed5993eb8d74000a9e6f44ccb397d60672dbd7f1a3e9c10cbb0057e0dce1bccbc4d6b92bc774ae5b4aea9d7505a96a922a9dcbb7bbbf7cd553379b26a2500aec489b05483a54460ed4965c3edd60a1dd8d34421f72ada213a5e08e2e49b73ff1d278be4b75df570e0d2831cdef0d3580db8141df6564d59d21aac97ee912d9ebcb180ac146f66a5b30ab0f55ab55e8ee9cbb8dd807e7537e54a806580832fe5464a8eb44274e8951412fddf5cf9edc1220ff60a5f7ce32829aa8c386b3f43b61c4c166330afbef74a4ff7c9d1899ba883fde1004caf69237d46464c68928ed0e496b0fb1ea400cd621472dee7d985e5d7ad2c6c00ef52f0acbd7cb675a68096d9cd1d31f1eb4fa0530ea8f8fed55b6eab889d55b37f7179ec27f7eca5a6ab6ea7325d5bbac8d432a5ef20b13d0bf6a1fe5af8bbbb8f5a85c9ae5c72a7a621d5b661caf7e3c345616bf07b9f2b2f7bfe61ab37cb29e6c5274ec7a1ff65c708af3335702dca116421ba4065ad6b7b47422884a633e864c8354a7b89b3091d66eec4b7ced3d9909c72343953653df9c9e482f5e9fa0b2734ea35f3831d6c9680d3e03b46b1c380c9f0c329364cdd0bfcb7b0d91f5866b7b439d85f5219a86478284672c20bc0cafce06463744d30c63a134d1b96b2bd51b5935d07cd360d794d6d30d8a9900fc1e4d8c1fca222d8ed9ff8b8513587a808183fac227ccf33f3486c446c51b04a4a60959240f803d9e3c1127580dd82a183dd9281952d463c5eff60b5bda160f8aadb2ac00bab89b3cd7e1e0e9e5bf332eb09a97b641ed04f9c52edbb518d751efd9a3c52fe0700946d9c98b999a0fa61fca5a1a2b89ee02b06fdf3268c1dcce6c60faf7fe0f65d9afbed773f548052755bc51f70c25492edac839a546a8fdabe482bbf8a4db5d7f442dec1f52a25fde87c6e0d3720c5f6da09d9afc08e28b9a81f63ceebd1830906424891fbfbe5f96647143dba6dff6fe007ba4715df413d475b832a84b0830a83066187b2d4eccff8fd7f44ffa50c89fe7ee3c6fbe67293e8c08e0c3d78fedbcf8fea52f4cba440dad743f6393d480afb87d4b0487f9c397f74411385201c50daef8cf6db658a84f72dc56f48d142f0fe98e8f4009b16ef37fd6807857507aaff5d3febed60404e601465a0f9659bbce39d9bbb5661270555c272fb7cb5f59384c2914f756c7dfc26b54db0df73945184fbaf172fce47aa75fa99a19bbeacf9b11f7c0faac12437300fe8e3267a3d76fbb6561ca90fffcba9d3140a2fcf0c712a041a47d6d00dde7c054cd0b51057453e53677d9c48203b7d0659b0fe2d9a17c6e4c7f75b1195a472bcb1478ccdba7fbcdb82e6f670dcf72c1daf80b236ee8d4bd49442acc281ebd4af9d6cee35e3e2ea0777df7920a64559ede6a5540d36ec60830af6d2f420bf40c406e9617bf8bbbae92b40516c8970f2ecf34949d3d04a86dd96b0cde2355b5485e29713f72b5defb1069c077d35304d01ecd5bed1de7fec146cdac9d8da49dd818e1cf2d9661b162f31dc228954125a57843087270bd1c3ac4bc2b5dac70a9cc2d4bae6026b7e2cabf277deedb7acbc27a821f6df65dde1878f75f0630b8c67b06399e87bfb0608ceefe1972ff0dfffb13d76d85e9a7003db68be57e2cda0fdd095672d4b1cf4f71252332fdccae07169665c1c3398079db7e07b29559e646116c7bd44d7129b2edbfe2962a2f3f673b06b67c957ba17996f52aa0a571f77591fef7a084cfe010350eee000d9962a51a7ba416cafeffda4b13d3933eaec33a102eef6e2eac50ffbaee24fbe01986cc669e972a1b5b00da7f76bccf95ded1f4ab0edb4f5ac7530e5a99686c4deeeebd868071691d0f4c374eca9babb3f902afefb0003c81c0774f03cf24e3ac40e9d4926642846b761dc7e7a55cd5653d34dde3650231d603cbd1260d349f554ffdd3d123186acb571be54421ca9675b3b15739e971c5d388f172d65f75012abfca4caf55d47159204ca781849532158f5e1ff6ab4d49fe00f8c3c68b4d471fb8401c40121ca43cee376907c8d79bc53294456c45595af7c522ea7964acd1215a61702a6e3fa0e7c8de970663fb6cf8f58dc895a13423d1aeda36ccd0c4c781b9fccff2b505fee6718697ba202e96ba7f4c6e2c2ad6e07ea2920aecb95f610113b16757fb4ea4062f96403361e60f8702023b38523e33915caa6e83bd14e6e52c45ede732a865b35f3f99cd00bcf0943e08083f36e624806c294cb66b42c7a82caf2930a1ac2455d95ad08bbbefeba6b1898df585e9a68e3c82c6fa60c2d9786eee2d6dbe05e4ed459c0abaafd859617d24decedcca7218a338e7145b812b36770aebcf9c5a53b8e0b7f77cb8b7f612249dbc7aefa0c347fcc7371b10427442eaac78a8b3b0c3c3775eea59d74cedf380e7d080422368a234195697d4a4fe04ef2c74c9394ed08bdfba46745dc1b1962d483992b9813e590aeb9290f9ff74ceca6c4e623a514ceb5e432158bc60916daa5adb84e7cd61cdcf2f2b9cd8b04af6cbd5c4522ec6ae673a4888ae2f3aa7745b9c5376fce7cfe1ceec305782ab20e5ac7ada31924d6da3c907bf4ccd63590b96b18485936b1a77d81d718034170d841b00d42389710849bcc1984143b19775e56bbe4fc5bd1f3d5d11bc6bd6b08b7cc9ed3bff7af4140f2b4e8f7056108ec8b835906c0560498ecf1cd4d9ae5aaffa71e4b7ecbc89bc12b7c9c19cc4d18b4f1bf6f072b160146ff0f4d35ac31479aea5842556f838dcfe1f4a16d4d174d8e181eb07630fa1008620a0adf5104a06790d72030a04ae0d33948e5638f9e2e1d47e614aa206b13ec133e73c4f34a6b3ecc8d1b58f58009765aeced223944237effda47bc5ca7cb19d1572b0058185662abdeabb96996fd8b27c41f4cd6d0584a8912978e287c9ba9564467cde2d18ca8acfc512f8a66702b070e7c9a1a56afba88e3dd691a13f43981fa91b8b492eebb429d0da6b51cd1d49d1653002ebf4c779757c448b2d633c788ccb4779090455e9bd388ea7c09c1fd0a675bb5af179196ff8c803e1fc189c2084fb62e920eeb909a47546f696d99453efa2faf337baba3ccad016380cbd30f172f688ade252f3078b9177e076e725ba75efa25a510e9cb87c0fca81fece0a28dfbb78b3682bff2a2ed3babf370fadf81635fb4b99da269b56cbcfb8cfa2345d0a7b11abd4b7ebe89c44f93d5ef2feac2ede619da55499d9b7a5b2c6dc9f402735287f0b7228374335da71f22b8b6c3f17a4e4b9a80977f540d36e029dd24407347552258832d07a39b40a3d49b4bd95fb68f2e8cb7e8c60117e2fd2f9cbf26e733275cb12e757576bcf4f14796fcc591bd9566937b909833c11088d5b68545105ec7641032c43f2efe4581eec26e521e227b5ffbb0f29e3d6efe8b44ff6061b21a023810c4e3814c7a2ff03e45ecc5629c11daa7a5b9baacb1a2ce6723dee8506766fa4200316eafb4ab684ce75d11d516ab1e19bff988e88134217a46770452542aaf58ad7e904f0c41ee17fb585da1925e81038f3344ddfa9f198f3ac9ce5f95e3c22478554ada4c9b1da10c4c6a59965204cc02f8a95cf45526bb351b7779cb161503cee72c0e9e469dd519e1db68a91e6729397370abf7527a7f265f57138dfbce7412f7af962c404efba6405a3f312265536e427748798b6513e52dc2069284e0433845a06ff0137072c48da004309e8cdf1a253b87a5da4fd81bb269771a2e538cac53e0b35513cc6fca6d81a80a601448935f0ec6d2e395e3b50af0687e9dbdd68b34271f83837989a49489c6ab0c827a7907d52d20f4a090e7b992b8f1d5a269564445f5f03155cd68d3b35a59824ff04291ebf26fabef75d7a0a289a99b95fd9e1730e1e887ea56fdd6cd515f09c2d606b67ec08eea635e328069684860fc815d82809da5dfb4ff9070fa9f8c2f040256170b843fb06a1b6016b86f07184c54faf1ba6860a21e68367fb06a27478b9ae0f31704c0faffe1503402757b2b170f23470dd09a0a3f677d8289a2dfe0bf8911f7c25898659b5e5ca2219b24f6460e213605c1075b3fe2df9d53d0f5efe5a984404c7f6ae53dc82faef205f91a647204808d0f98b5196cfe81d1ff21550a6cfdff19e53c243ef89b391c02114252721c692eeac0e8887741be0f438b5d3c04d56474537ac7945f64100ee88d0e7fe895a2641031dfcd7bca2a543d0df00dd65c7c74615b610ca57624c50ae01b7932617b45558eda2353d6e88c23ea037c942669e52ee937569c91341c38b85fcd58f2ff0c6f6ce33cbc166bc70d8581bbfcf75af87d49169929997bd869d70772aa6d4a36ebdf011a0ce7d7d95150f74406ced93cf6f741bf6c9de95ae8f8326e8d84037139a95c05028ddc81de0824b5094a4af00f2299368cfb5eca57ff1a28c33aa9f9a1ce7d5fc0832fee9016c4d9c261e20555a30c905271df4ec21cfcad4e91f28f490482fe7ea991f2752f47cb8f9c44a6fce7c841e87fb3c8c1b610e556676dd9db2bedecb672a6340c4829d13e6520a9c6be08f14e37d3b885b5a42013b1519c1dfe2dd1be57c6fc7b1f48a30eed318b554a2bf20062711cfe45825790eb4fd4e5cbc1af047b7eeea752edbe72f3210d2c3228dbab1002b1d9b60aa464db97fd88abf2e3da05274ee407fb61872950913e7b5611429deb51ea1fbc5b0988c00102521235d956d3298ff413fa5df69c1ca83de48f9e8db29ac12699b21f7b0b5400ceabdb33aba27619852a2d77cb12eaaedd1ce4d6376a254ea6b9dd5e3da653088340a376a0e1811402c142299d902f73e04f7ffff23e83435a905f3db706e8ea5f1ee9b80df9e3f7bf707f6519675ef99cbfd91d0a7b3bfd01a3c4fee1a3904df925c0c26cfe0bdf5f3415a1d974a7bc544942d76ff121cda7c9ae8c74299a30c4f75cf6f8dc75433400ced38c9376e7188b823b66ad3b1e91a6549c1e620a08b5f0b44ebad3e5a02a74ff20a7eabe41647f397e37a72ae23ba74ad166c85f9053955d5fe60161fb8dbac74f308097ce27e959e2042c8f424679107a64496794885b60c149fff89caa3f3a663f191f020790b4c234ad338702baa12e7b2730f8b4a968d88c9bdccecf2a5e68cbc79f59bc0f6819232a6b06754fe4882896204ce9ac89cdd3c5d02990b3e690c1de3fc09bbbf5ad9fa9f77fdbcfb4206eb0cfd56a3d0d5ec2554c2772f281e0a3e5230aa1ff1de0ef7edb615143ad2a85bd194cbca218c77a4f5bcc95fb2c2aa695322b3bb1f2d90b3ca22e52d4c7a10f8140c498086daa8df4df3ea6bf1033e8fab0b7c8a137f979e6c333b511ef9c32f4a1d165027aa419aa1c752141540c7734af519b8ecbb9e8da641306d1a2f70ed224ec688119cc60c0d00da18bd76fdfc1c77de443d413a87e72fbd5fc885dc564c13ce300bc3e6b581e806b75aae50560c9ebf6ef72a765a7d9d8069eb21a7dd3c2cd26a1deb2e650bfb96f301338306f46f6c6a191e3df873486af4cabe9e0ee88e9a1a7515efd7c50ff020ea04be86553bdcc92be818d7d12f3fcfdf9f8488bb10f1378ab1622b1c1ccda1e5e809d17b6d3d6e7d7553ec1342d17238a247d144ea261d984c5e4aec251599b497421e86b3be8cb07897e31e5eae3be57fb3ac46729061277bf063dd8cc41184ca33aa64504f4f204cc220206c7adbb8c01d27e5cfe7e3580f107b241805e7e81d57f05fbbedfb497777d8ce8e8547ca3ffb0080d4b6e7840db3f9102041fecfb52d1ee358d4da1b3486bdf7ff5ae52dbdfe0ec4531a9a1b134710f2c11e647a8c5afc448b6a5444d6829663426745fd69cd89a588bfd981ee34fa062619e2f25f71e2cbfe837e30726ccfd89f73b12106fafb680fc04f811fefe4425fce3f207f2fd90c1baf8c6a9e64fd863fec298fe7f87be1b9744aeaf4ebd28b39804ba5ea22bda8bcd78ffbefd87e70f1e2be0626ba4626be568a2a5e6a6a06ea5e46cce2bc3a5fe1f73042ad682593cfffce5f201a081b41fe372fca700187d90fd13b4ecff0ff9ac9e8eaecf5a1b3f6fb4782d072b39af4032255fcc1504ff50c63e98366bdc9dca0713c08eeb20fe0dffc10e73c27189f63b21b4a2c31f0b1e4517badd3af242fd3fb0287e239f808d0fd8fafb0e80bddf37fc612b639e888c7c4f4df738fd44cd6d4905c109826fa20dbfb7bee1c08c7f25234d0131dd4b57bffc0f0b2e371d1ece9ea0288b5f702fa0b3503ad92208d07a7ed25c47ef43c3dbb0647bf16a6cea56ebebb326c4c5315177c2ae36a2b0214020b6dbd6885ff3875fc2bee04a25111187d4c0b3dccac12926a1ee71e21a54e42d8fa9c0f35bfe30003ff2255ae3b04e9d67afd06ee7409ebf255fbc6906a66687c23a217af624f7208089cb85cca6a968b9e65f927711cb445c0efff556198a4694b23739feb635b5c357e3e5859f61bcbc838b949f299edf2d67696d9df8dcf0c1c517d1ca1b897c7d82a76ebfe7a618f90c824f04860f074c160cb2e2976ace2a7120095f7d238f10a5a6ede4b2b16e625ee4eec4c55e5308b83ea4f10e7e03a18e986de2c9bd427afa14c9d979fe840c2c84ecb567042a1d8a10a8c20e542e10c1675faa2652dd89bb73a7eae47dd1ca1e6a5a44fb3c799990699a9671ffead75e33bd95bf674e2dbd61af41ba4143608737b231f0ad0847a607582941b0e96e7a7545a7f2b0464e863b9aade50687e52cb65b619d828ea0fb432465a424a541cb817d1fe0c0dbe71c3c21d1722f9838a12a2132224d69368b964d2cedb7a47cb73a669aa23a003e1d6dbc73d9c9a9ed4b4cf26375c26ffd50f426c70453c5873a69b91813a41e7ef56fb1fa19f3871071d46795c7fad4455c8f146f775697976c1aa11933f595b277cf226aa6cf801d1f4460f87040b6ccd57a2c6abdc034b09b211b3f4ff4063ab28d72a88a63ef595802177e651d00e7c2f5a3d55131b77fe67846758a3ee6b50df0a25ad05e5bdaea043016cf2f0141b8b083202bb53f7b282549e3881c3b7cd92a19bcf8dbb0a75fe87b27b21acfe1fad7405f974bd90afe9eb71f2df4f71f9ca6604624b0fb2330fae820ed60da1658ff5820ed6039457040dac1a46130db323e483b011c18d357275d2792dcc69c282eec4bdd71cc9bcfa7c95fe9219c71d2cbed9b515900b87547ebc9d518d893252e1903d8b352d3020f92650730e508af6813df2d45f4f8bafd2afc13960f0c7822b8249118f0faf2e287ad8b0d52f444a87c91bb28b609e65d5335cf88eafab30092ff4f97f3cf1c69db64c2a9c0733e7efb79afe78b363e591758ac7a4c6ed551f1f0094719188b7e32e68b4056a948354ce19adfe4c3badc3fbc2a38ab8b27ddb07945d1fd2f6da98c125232653b1959d6197cc33766f5e2ca523c7128c7a5f442eccd61029e9e85cc3974fef29c65a7bf2a9dfbad53c712f694a73964ad0c29f264004293b40ce60b340ecf3afd31eca2d4baf84ddf0f062a4eadd9f5e4fea58335ac374a746f719dbeb66c41b5d5bad97e7f6bdb1678dcbef9ad22d7b67c9ee796653587635f2e96da303d708309200000ffffbf4b7011', + maxFeePerGas: '0x91e91fa98', + maxPriorityFeePerGas: '0x55a0712', + nonce: '0xb02cd', + r: '0x0113be49a7e3226dbdba535e64da2d61aa66921904bcb5c88138ded11819f160', + s: '0x02f8b000478f11787977257fee2c20085a16c7b8f460d7cbdee5bb58c372d491', + to: '0x5e4e65926ba27467555eb562121fac00d24e9dd2', + transactionIndex: '0xc0', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xe1a9ac6a6fc957d2cb2633af61c451e3366c9ffa', + gas: '0x5208', + gasPrice: '0x479a12896', + hash: '0x12d7dbfb0bee81eb327e32170b201fbc8445ce3d780f446b50cc10b2c6a08ed2', + input: '0x', + maxFeePerGas: '0x57ae1ff95', + maxPriorityFeePerGas: '0x55a0712', + nonce: '0x13', + r: '0x891c8e4fb5416707bffdb3796101e4bab549d6d809bc8107dd3c64ab161d6ac5', + s: '0x739b527d8da18e099b86fb623f6a1c8436a2139c2ec8a49cde40f1cd35c70659', + to: '0x8b70497d9ef243a66111d43f567aeda3ebbe608b', + transactionIndex: '0xc1', + type: '0x2', + v: '0x0', + value: '0x20925741e3d00', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0x082c948908b571ed87be70f6ec2363b8da4fd3a9', + gas: '0x76094', + gasPrice: '0x479a12896', + hash: '0xc6f78588f68038b676f7a0ca3324f2c6b24618bf43b5c6e68704262e3fceba4a', + input: '0xfec53fc50000000000000000000000000000000000000000000000000000010ec833ae000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000db40e4269400d90142a2e5593b21b56a17fce57d690840a068530b08ac1fc53f0121c6db7bf8c081274b66467d9cd15335921f79bfcf67d4e25bb29571be71de4611e599d961c469f06e10bb1315a348df4b0cde7e1378e9378a8ab08b325816ff2ae0a693ded4304d333a0108aba908b94e4faa3ebb211f3be184f42247b099b1ae2aabbdd0bb1c1b9d79903935f4231667e4cda6ef1925667ddd45cecf693603d1804a2eca24c9340e579cd789042313e240d08fbb24745b7726c54247e1ed8e8e3ce759d01cf6d8a56fd5f0b9ac88c56767c92bf6c72d42cc6f03262b6a6e63690f73aadd76d215896895cb137552f0f1905cba732c22514921d0c3cd9027f66d309109d4f1c5e5eb8d51cc79c2261cdf49ba240c6cdd67fe5d91862c7ed25fb5902cd5e6c0366fc658042b60d554949d176b89a1633e33d9ea7bf857e7cd3f68516df72ac60398183e2756a5823ca91427e542cf897e54a6304a98e1146974e3153342d9c8c304f91e13aa8918576e0869296fd570b36120f990c2185fc04a5ac2bfaf676a9e23eb3617d17e60e034f123e71e7782dd34bdb84ab8f230481', + maxFeePerGas: '0x57ae1ff95', + maxPriorityFeePerGas: '0x55a0712', + nonce: '0x1', + r: '0x8c2590402601bfb04153ffc112a7b649d9a2e810fcb287acbed5fff1853d5a9e', + s: '0x2d4aee8e065ff06be42d1020b95bc35d21249c6b66b149ec15824f41eb3d54e6', + to: '0x1fe0fba03dcfa2bb97ba9047a5c523115fea9c8b', + transactionIndex: '0xc2', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + blockNumber: '0x103dab0', + chainId: '0x1', + from: '0xb121e5aeb374e80081d0cc180e50d3877401c249', + gas: '0xc91a', + gasPrice: '0x479a12896', + hash: '0xfaeaf9b4a6c5fcac8005239112a27f9c059e7aeb436f31f192a80c1691c29f29', + input: '0xa9059cbb000000000000000000000000890741ba72b148b70b4bafc631e27f75a8295406000000000000000000000000000000000000000000000002b5e3af16b1880000', + maxFeePerGas: '0x91e91fa98', + maxPriorityFeePerGas: '0x55a0712', + nonce: '0x876', + r: '0xe7a96ca63eab2a40e2a1c137bf0b2bf2133fd9fd07c5e05fbb0af11cb9ef28d0', + s: '0x128151f2fb774ee942a67b98b352e8b52bf07065bc07809220c115c313ffeddb', + to: '0x01659335fc8ad471c7079f6f04e7532c7d001d43', + transactionIndex: '0xc3', + type: '0x2', + v: '0x0', + value: '0x0', + }, + ], + transactionsRoot: '0x2b0f787500743395385ad4a4142693bffd51d508cae1fdd675d269842b9bc2b0', + uncles: [], +}; diff --git a/packages/web3/test/e2e/fixtures/sepolia.ts b/packages/web3/test/e2e/fixtures/sepolia.ts new file mode 100644 index 00000000000..9ab06b665db --- /dev/null +++ b/packages/web3/test/e2e/fixtures/sepolia.ts @@ -0,0 +1,751 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const sepoliaBlockHydrated = { + baseFeePerGas: '0x9', + difficulty: '0x0', + extraData: '0x496c6c756d696e61746520446d6f63726174697a6520447374726962757465', + gasLimit: '0x1c9c380', + gasUsed: '0x4952f0', + hash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + logsBloom: + '0x0000000c0000000002000410a0101000080100004000001000000040200040020008800000800450001040004000000008004040008000000000000000a004000000400000002080008c020800006080010c22004000010100002001400008000082a040080211000c01010002000b00080000000800000004000010200100044020008008082100010008200805800001210000200000000004000004200000820800800000000010140040504400082404000300000000100080000000400000400002113000000000000040040008240000200000000110002011000001000018122010020000002400008000000008090810000002001000200800300000', + miner: '0x1e2cd78882b12d3954a049fd82ffd691565dc0a5', + mixHash: '0xddbb2beaede8c4a7c401156c0a02c58b3c0732e25bd5bfd350a599c54309929c', + nonce: '0x0', + number: '0x3148fe', + parentHash: '0x26b0438b6b537ec888afe7b673f633a0fdd3732c3629e1dee30e962a46444e9d', + receiptsRoot: '0x1ca1776ebf36ae37a1f48770684da37fe1c8fc134954b229b1f619e5e0ad2c51', + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + size: '0xd66e', + stateRoot: '0xc9e235dd0e663f36fee8f80d860961f2e8056f4cdcce501372a77bc1fed20534', + timestamp: '0x642d14c0', + totalDifficulty: '0x3c656d23029ab0', + transactions: [ + { + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x030b1cddf635e9e71ad70b8668e235e8ec3c67c4', + gas: '0xf618', + gasPrice: '0xb2d05e1b', + hash: '0x5d703f823e7e4d6719def234cf8683d0d34708c2b0ce0285f4b008bf555b0481', + input: '0x', + nonce: '0xb2ee', + r: '0x2fa59cd01f8bfe1e878f790b73fa281f03e7a97d667234727ce5b671370d9eb9', + s: '0x5cffb682215ab7a1c29fe90f3a0f414843399056a4d7bdc05d370ce9d2979913', + to: '0xb87a21184906b99477d9cca63a452a073ed9c1e5', + transactionIndex: '0x0', + type: '0x0', + v: '0x1546d71', + value: '0xde0b6b3a7640000', + }, + { + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xf0046e53d11c6e7a6badb4c9e849fcc26509dc16', + gas: '0xf618', + gasPrice: '0xb2d05e1b', + hash: '0xa8a6e1f58adfe40a059e037c6c2b6e07bd23aa3d32d892bfcc6f40d85f22c907', + input: '0x', + nonce: '0x1a3a', + r: '0xa0f6ce97f49e3bd2e539430890ef4dddf2f3b1c4713b374234ed6ebceb80604b', + s: '0x33712ef7984df3ca434d854724b2b1d5be58012ccb39bd5f3a8b729a0c4d7931', + to: '0x83f3229e66fd1997961f76cbfb6e077f66ae1962', + transactionIndex: '0x1', + type: '0x0', + v: '0x1546d72', + value: '0xde0b6b3a7640000', + }, + { + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xfcf06e39a2961e12f5e3de9376f09be9de3830d2', + gas: '0xf618', + gasPrice: '0xb2d05e1b', + hash: '0xa4335f3948675d7cd43b84078e3567860b4e1ffa79e9f6e5278f1d3fc860699d', + input: '0x', + nonce: '0x1a14', + r: '0x9476a6d314e82c5b7cdfb15c2a2d27038e8ab61c647a5dcffd987c9e3fee1dc9', + s: '0x2e9bc3125ae89165cd47329b9f4e9b319514f64f6c4dc58562501c345ee167e5', + to: '0x3eac72bba356e497e5cd2ad1e4190e81810a0502', + transactionIndex: '0x2', + type: '0x0', + v: '0x1546d72', + value: '0xde0b6b3a7640000', + }, + { + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x8b8a3c7b9a182f3176885cf4c72ac53271eb9d7e', + gas: '0xf618', + gasPrice: '0xb2d05e1b', + hash: '0x25553d98cc5c2758b653b122a461e08250a0613752258ff1ecbea813632f08ef', + input: '0x', + nonce: '0x19f7', + r: '0x82c42ae6667858b3edc1fa02d3016900341786d0e17bdc2ef1e3e3107c0d0314', + s: '0x14c9a378c116c1dc4b5492493e11ecdd046c7b433dd006d8b92ac65fe722add4', + to: '0xa3c3f6a0e31362fb240ce2766ebe9ff9e18fc9d1', + transactionIndex: '0x3', + type: '0x0', + v: '0x1546d71', + value: '0xde0b6b3a7640000', + }, + { + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x8c6484155c97eea1c2770c2952a99888b6ae9c3f', + gas: '0xf618', + gasPrice: '0xb2d05e1b', + hash: '0x5b7ae021605d0fad23fd882d48762851858bf0b6188641d619481f5ea230c502', + input: '0x', + nonce: '0x19d8', + r: '0x334c062cdd23a1a8fcae387e9d3c3e8704728fda13c7d2c0052ddedbb90e1b35', + s: '0x5a25e1af29531c78a1653a2d4136a5688437d29a3ceec2d2d3da537bc57f4152', + to: '0x76fa422f8aa368d09bd93016c76c2dcf889306eb', + transactionIndex: '0x4', + type: '0x0', + v: '0x1546d71', + value: '0xde0b6b3a7640000', + }, + { + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x39d2ba91296029afbe725436b4824ca803e27391', + gas: '0xf618', + gasPrice: '0xb2d05e1b', + hash: '0x6ff0dbf6f27ac5bd4cedebca54424e4ddf5bc6db1aeba945c2d980e7d759e5c5', + input: '0x', + nonce: '0xb747', + r: '0xae33f8741cdf375ef0a3978f94b8e61057c8dc387cd28ee3a6d84a574a060b95', + s: '0x141acb4124481f63e871c8f3f29f2adf28954ed42e47770fd112a83b0ef1c35e', + to: '0x203c2affd9bf0026b618fbb3983eba728d2b1cf5', + transactionIndex: '0x5', + type: '0x0', + v: '0x1546d71', + value: '0xde0b6b3a7640000', + }, + { + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x9c193fb011cce9c176ba3e9a9f58dd02489437a8', + gas: '0xf618', + gasPrice: '0xb2d05e1b', + hash: '0x234db0c295cf5d70729dc85b36a3df18007c80e1e6c5dd3465f739be81b062c5', + input: '0x', + nonce: '0xb62e', + r: '0xe38f1b6fac252e016f3e846eb61894ed4379cd984838d1a0b694af4b7ed80881', + s: '0x37d9434359fd0afb45b08856915d7a35d57593e0ef3da9d6d3957f181181aef8', + to: '0x29c2e3d277b851a6486ad69bf9ec227fb9b2017a', + transactionIndex: '0x6', + type: '0x0', + v: '0x1546d72', + value: '0xde0b6b3a7640000', + }, + { + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x086d404656dfa47972f8647271a1cd1456e2657c', + gas: '0xf618', + gasPrice: '0xb2d05e1b', + hash: '0x745ebf4cddbadb01df7eb32e393df6f712bad3d6f45d935151eb402fa2bee5d6', + input: '0x', + nonce: '0xacf8', + r: '0x8c8e4f396124ef46c5f4ca96108fa37de7b1ae67445eab91be23094e5d0fafa2', + s: '0x721509d52b20ab40d76d53415f9899bfbe546a241a1a4283508a5c70a1df12e9', + to: '0xed8814e2af46748658f96998596cfca17df94360', + transactionIndex: '0x7', + type: '0x0', + v: '0x1546d72', + value: '0xde0b6b3a7640000', + }, + { + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xf555e6826bcca97e5cdd649fc8a648b6465b0e76', + gas: '0xf618', + gasPrice: '0xb2d05e1b', + hash: '0x35607880ee334b3e5a2bfc419aa32d4ec2b87445a0c58b347c945265ffc8e57e', + input: '0x', + nonce: '0xb4cd', + r: '0xc5b971c8e80eeb211366f03c486dd97189d640b45d7ebada8ac40d0ea402427d', + s: '0x1b18cb0e10ea701f2b81dd37442afd63f98b7d1d6e57524c03af8721e5207c39', + to: '0x93dc0eae2a8a63829ec1ac09096a00b84c2d11d1', + transactionIndex: '0x8', + type: '0x0', + v: '0x1546d72', + value: '0xde0b6b3a7640000', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xfed9f12df6a0d72a9ad4a4875a6153e737c8b980', + gas: '0x131dd', + gasPrice: '0x9502f909', + hash: '0xb3f527bc8306499630857a4d92578b2d492762e7828580af536ed10128953327', + input: '0xa9059cbb000000000000000000000000c1b7d14504f8441db63d0175cb4ed985d71c15bf0000000000000000000000000000000000000000000000000000000000002710', + maxFeePerGas: '0x9502f912', + maxPriorityFeePerGas: '0x9502f900', + nonce: '0x3', + r: '0xc98fb9abe0676d6a7101982010b3bc37d727c5cd2189a91710804a5ee98ff768', + s: '0x27c6fbb3ebd78df9dac8c292c6a9bd543f7538f5bd18883ad5ffa1c41dbd93da', + to: '0xf03df67abef78b29b2381f529651ab07d55bd42d', + transactionIndex: '0x9', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x6cc9397c3b38739dacbfaa68ead5f5d77ba5f455', + gas: '0x5208', + gasPrice: '0x77359409', + hash: '0x59b21c5451f4c6bbaef6758aa4ddac3d350ee9d6f7f79cbc8aea1e4d6d30f32a', + input: '0x', + maxFeePerGas: '0x2e90edd000', + maxPriorityFeePerGas: '0x77359400', + nonce: '0x1abd5', + r: '0xbaf97590694daf5555139cbafa03406fe7d158f203d5b0b45ece306aab1af770', + s: '0x2359e6e389613e518025c2d0f2ac9749499c46118af96fb007f9f523b56bd54d', + to: '0xa127c5e6a7e3600ac34a9a9928e52521677e7211', + transactionIndex: '0xa', + type: '0x2', + v: '0x0', + value: '0x53222d0fbe8000', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xea4d57b2dd421c5bfc893d126ec15bc42b3d0bcd', + gas: '0x55f0', + gasPrice: '0x59682f09', + hash: '0xe3708d5286b2a3fdb73db6b9409c70e121e65cd5896682f011e97b578906245c', + input: '0x', + maxFeePerGas: '0x77359400', + maxPriorityFeePerGas: '0x59682f00', + nonce: '0x1602d', + r: '0xa3811d6c91a939c9a684eb1061c090c1459de3817cf6dfb02b57c344bdffb10d', + s: '0x2d2410b861ad3fc0895e59f918d9945dc888c48f1fdb032307fa4759ecc16843', + to: '0x4acc290a701ff39da78cde151176dee141b70656', + transactionIndex: '0xb', + type: '0x2', + v: '0x1', + value: '0x6f05b59d3b20000', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xb47300dc06756ab667b47d87523f9e3f44967db6', + gas: '0x5208', + gasPrice: '0x59682f09', + hash: '0x738a0a811d13a8735bd7b5ea4b784a0dff23e6bfd2b1897303f731bb49ef19bb', + input: '0x', + maxFeePerGas: '0x59682f0a', + maxPriorityFeePerGas: '0x59682f00', + nonce: '0x4', + r: '0xfc0ab73abf97792641c05c82911ca19f77816ad45ca95bd0053c77044ce31bce', + s: '0x79c4de0d3e8d022cc449298a4abdcaf31fbfba8be042684bab86393893db2d4b', + to: '0x337381cc3d723b86a2acb97f34832d4673cbb5f8', + transactionIndex: '0xc', + type: '0x2', + v: '0x0', + value: '0xde0b6b3a7640000', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xe3a97e0d58e58f9871fdd7d9a74d061cc3736bbb', + gas: '0x17ab1', + gasPrice: '0x59682f09', + hash: '0xd63d4edc0ca6567cea22cb342eda67d37bd4a5a5a36cb66e233f368a8f98c7cb', + input: '0x96e1785200000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e3a97e0d58e58f9871fdd7d9a74d061cc3736bbb0000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000028c5c000000000000000000000000e3a97e0d58e58f9871fdd7d9a74d061cc3736bbb000000000000000000000000e3a97e0d58e58f9871fdd7d9a74d061cc3736bbb000000000000000000000000e3a97e0d58e58f9871fdd7d9a74d061cc3736bbb00000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fe5cf2bea000000000000000000000000000000000000000000000000000000000000000222e000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x59682f0a', + maxPriorityFeePerGas: '0x59682f00', + nonce: '0xf', + r: '0x95c807dbb20dacd1715759f369eb08c5b0cd431d42170bc44b62210a7adc7161', + s: '0x1c8ae2ba0a32668e606edd3d9792e96e54a033365d0d9a209456dd0572fccf41', + to: '0x2ab7c0ab9ab47fcf370d13058bfee28f2ec0940c', + transactionIndex: '0xd', + type: '0x2', + v: '0x1', + value: '0x7704128ff9c0000', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x59aa96058b9e61588c3b4bb6800ea4aa48ef0492', + gas: '0x17aa5', + gasPrice: '0x59682f09', + hash: '0xd383977c4ab373914a2199b5673eb43b1cb3c86a129c29a440b67b8ee491bad2', + input: '0x96e178520000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000059aa96058b9e61588c3b4bb6800ea4aa48ef04920000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000028c5c00000000000000000000000059aa96058b9e61588c3b4bb6800ea4aa48ef049200000000000000000000000059aa96058b9e61588c3b4bb6800ea4aa48ef049200000000000000000000000059aa96058b9e61588c3b4bb6800ea4aa48ef0492000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fe5cf2bea000000000000000000000000000000000000000000000000000000000000000222e000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x59682f0a', + maxPriorityFeePerGas: '0x59682f00', + nonce: '0x1a', + r: '0xcc783d6b756263a49826c016982daa7ec589d1d55fafc3964ba187bf488bac0f', + s: '0x10d1019e31e0a2956586a382e73b96f8986a6f49eacad9533add0c6d3deb8741', + to: '0x2ab7c0ab9ab47fcf370d13058bfee28f2ec0940c', + transactionIndex: '0xe', + type: '0x2', + v: '0x1', + value: '0xa36cc19bab0000', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x877e0fa351f2014157f28af9c1dbe7922c42def8', + gas: '0x36500', + gasPrice: '0x59682f09', + hash: '0x554c50ff5d6578a8ea4a352651106151d0d4b5fc683fc4071096463744b3013a', + input: '0xee1490b20000000000000000000000000000000000000000000000000000000000028c5c000000000000000000000000877e0fa351f2014157f28af9c1dbe7922c42def80000000000000000000000005b9fedd37f0b92e7e282b19cebcf06f57b77c6040000000000000000000000000000000000000000000000015af1d78b58c4000000000000000000000000000000000000000000000000000000000000000222e000000000000000000000000000000000000000000000000001b88957d0260000000000000000000000000000877e0fa351f2014157f28af9c1dbe7922c42def800000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x59682f0a', + maxPriorityFeePerGas: '0x59682f00', + nonce: '0x4', + r: '0x19a785d3beb63d2dce1c835d847e86293abc590503ee1fd3beb93a0fc4b6cae0', + s: '0x5313cb8e23be69b7507a15179012c9e41ba0c2e3de4d4bc38c4b0501348c821c', + to: '0x4284890d4acd0bcb017ece481b96fd4cb457cac8', + transactionIndex: '0xf', + type: '0x2', + v: '0x0', + value: '0x1b88957d0260000', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xb1d1db7481fcb2acaf5765942b8fe4514e18c55c', + gas: '0xb4a7', + gasPrice: '0x59682f09', + hash: '0x92d5693632cfc366be1a143bf63aef7b6307db1227e40d7806d1fb21e67137f7', + input: '0x095ea7b30000000000000000000000004284890d4acd0bcb017ece481b96fd4cb457cac8000000000000000000000000000000000000000000000002b5e3af16b1880000', + maxFeePerGas: '0x59682f0a', + maxPriorityFeePerGas: '0x59682f00', + nonce: '0x4', + r: '0x535f4d4aa8e5c826549c0d67a65ecfa7847871a214e180a0599ec149a92effce', + s: '0x3b16af47e38f2be732c01bb42d1b35d6d69ec21f631fcdf97c1d393f647aac08', + to: '0x5b9fedd37f0b92e7e282b19cebcf06f57b77c604', + transactionIndex: '0x10', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x8257f8eb8b24a8a8be5dc570dfea56d313339da6', + gas: '0x5b8d80', + gasPrice: '0x59682f09', + hash: '0x72bb6a4add14cb640948ebd801898076372c86bf2eac41154f414738da1d1a32', + input: '0xb1dc65a40001cd794ebe9e15991da9e85cede9ba7e00f407a77e6e7c91fec8c52515aff7000000000000000000000000000000000000000000000000000000000018ae02bfae234dbec1dcbff6f466c498914bcc14f45604fdb229d66827335946592d2100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000ac00100010000000101000101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000280f0000000000000000000000000000000000000000000000000000000000002810000000000000000000000000000000000000000000000000000000000000281100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000004a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000280f00000000000000000000000000000000000000000000000000106322a2b0bca000000000000000000000000046887bd86d18cca57e9e6cb15b3de67318107d3c0000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031f5b934a60f2c9b649a657e14f1a2b2e83f8ac7000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000dc2cc710e42857672e7907cf474a69b63b93089ffb23f387bb217874b85e28017885db557c2fc43ad249a67a9ace1beb372bbff70000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000128f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000281000000000000000000000000000000000000000000000000000106322a2b0bca000000000000000000000000046887bd86d18cca57e9e6cb15b3de67318107d3c0000000000000000000000000000000000000000000000000000000000001b610000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031f5b934a60f2c9b649a657e14f1a2b2e83f8ac7000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000dc2cc710e42857672e7907cf474a69b63b93089f1ac28f841a31750f6b1e51d99bfe27b6c849bae45963eda319df4d9ccffd87a70000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000129000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000281100000000000000000000000000000000000000000000000000106322a2b0bca000000000000000000000000046887bd86d18cca57e9e6cb15b3de67318107d3c0000000000000000000000000000000000000000000000000000000000001b620000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031f5b934a60f2c9b649a657e14f1a2b2e83f8ac7000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000dc2cc710e42857672e7907cf474a69b63b93089f6a4d522654518006fa7a0635541df6dac30d6978e992434835d5cdcfc67d8c09000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000011a300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000b822c253e2eef8c82a895a0a6b0160e90a19b338a3507476113f114d781c664b706bd156aca371e0edf8a64b50fb211ede4dee6521e1316f371ca70e1f8a23d0fee0298af1997c78de533ed09facf1b9c5d772599a63e611cb71c2cd5f6d70b9ad648d5d9c1eb6779f3052cd0b19dd901c497c8b8fb352ecf19bcf020ddfa2aeef6ec6ae42cc7d2e5b1334055984fff0ba453677118eeba8c7b574e8a5a8e9525201fcf1239f0c38ec7c7ef6c27ab0c986372454fe44aca63a2fa6fc2c18d69fdfef89f67cb0b67d429b8ff0c0c164c56d37ed2b485d2c6e1b1f92176e1e4f25ae604f86f4914bc93999a539a7126fc3acaa323290bb0d4ba83e2f4faab74cd9e4c5bb621782e03826d56444a7dcd335c4b0c53ff7885fb97a9a1030180b10f4f535bdbb52018d064ff3f5e65772ab52fdbe8c8b7be34ce7984656859ca40d27c17f1db276c98eea1c46e3647a38c6aab78b3e526e73a57c4b02bd2f739b5534e000000000000000000000000000000000000000000000000000000000000000b3f81065f01ea8076809914067b3f23d37ef688763ffa3abca1f40a979e70e68b4007acd2a670c007944913238eb8ba6f0298227f2410b42fa3a1f0c0f48620e36465bf0d82c6fdf68ffb9e7cee4dc8f593a0fbfe4d2f2da55df96eac8688d6ac20da73d05d8e2b3eed6a90029cbc88bad3988c24803bffc490caf8c197e3d97d593cd78187c91fb6622738da192048d73466f6a63ee9998861324273496d2083642d808408bdb076385472f0547e99630a102096f9f4ac41bf31b0eb5148ead678a4ab1d4ba54f057daf6890c32e9edea25f7bd22e233abe3fb36b0e7f9be6da14d5bce7a84f5d66a0daeb6a1c8aad5e26ad0a2235d00e9c07ba6f7cf3b1c5b2553be10486ee4d282fef1b8a5a4b6e68741b15323bacdb84306bb7b7073677f95afe62e9fec3549a3ef1e8858819f7c21d5863a2fcf805cc64d4316b2eff40a9785e3dcaab9bb6f7d9249aba9d0845bce51066199f7c7875ac4d506a72a238ec', + maxFeePerGas: '0x59682f0e', + maxPriorityFeePerGas: '0x59682f00', + nonce: '0xebc', + r: '0x1bdd1518602b3172a4b5693466cb7e54bc07679c9deca2acbd99bf589d10248d', + s: '0x2a8889157f2264bf396394d10f46facfc5e032dac8b07d720bbc959268509a21', + to: '0xd2ca6d383917259dc2445bd6470dbad386d4b67a', + transactionIndex: '0x11', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xea4d57b2dd421c5bfc893d126ec15bc42b3d0bcd', + gas: '0x55f0', + gasPrice: '0x59682f09', + hash: '0xc33480b85a113f779725fd2c1788ab95b066792a898ee0eebb0e98c8fa605989', + input: '0x', + maxFeePerGas: '0x77359400', + maxPriorityFeePerGas: '0x59682f00', + nonce: '0x1602e', + r: '0x1dd8238b1b4eb1148d4b3b6fa829cf047dcf7da6040c14ed1373c6d7c6c1a3f7', + s: '0x2de0a31bec48447a395537d36ef16414fe729ed282585e125fff8d50b7e960fc', + to: '0x0d3a7d69859a0dd6971d39703b15379e05ae2ec4', + transactionIndex: '0x12', + type: '0x2', + v: '0x0', + value: '0x6f05b59d3b20000', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xc88b48a292f0b26d4dedd281b58cc6eabbf857bc', + gas: '0x6dfe', + gasPrice: '0x3b9aca09', + hash: '0xa8685562865ab1e6c73816fad05a38d6ea0670565ef27add5f4bd16db852eb46', + input: '0x0f5022140000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000cd0bfd180d0b8d0b2d0b5d1820000000000000000000000000000000000000000', + maxFeePerGas: '0x3b9aca09', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x27', + r: '0x792a33def1b103539418608bf306204927a964e640e39f379377efeb3af59174', + s: '0x1aba77c1fe4f5fc626ae96e41acb6626c0c567e41a25a6f8c1a957c12a868e69', + to: '0x3a6658a57c5e78cf4b4f6e774bfd1a812865d197', + transactionIndex: '0x13', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x43c92d390d3ed89716e4a0776d8aea1fb965d55d', + gas: '0x2bf20', + gasPrice: '0x3b9aca09', + hash: '0x7cff5abea75fd389d37b08fa73f8d4ea6c2a00f36c715fda422c8d92f05aed78', + input: '0xd45b6292000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000000000000000c35000000000000000000000000000000000000000000000000000000000000000020000000000000000000000004384ea50ec75a46a7dda1fd2a928d1280c45695d000000000000000000000000a6147b3802d51f47b348817ad43e647566d6df46', + nonce: '0x5c92', + r: '0xdd56ccd20763ac884900623962a5cd5d7919dff4e5530111bf83b30b21ae2202', + s: '0x4ea28f710dee138499d2f2683cf54325b3646c47d1b380dd4cf67f4f5e012ceb', + to: '0x041eac26aab0d7afe408c3ad3c07ea3f749e7453', + transactionIndex: '0x14', + type: '0x0', + v: '0x1546d71', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xe7e9ee3f2dca42b224aecc1610d3b7efbcc07200', + gas: '0x27f2c', + gasPrice: '0x3b9aca09', + hash: '0xd844bf22fcdd8fd5c472638540f114824082359ef753a4f9c929889226dec5f2', + input: '0xa043dbdf000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000005208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d65822107fcfd5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x3b9aca12', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x325e', + r: '0xefa5a4334b9c8a51a4a3cdc8f3ed55f03df079a5a4d88bc282da50e3a1204802', + s: '0x5f079ef81581100613c84ba82c05279ffff68672e2f5010d3e2f68d265f64476', + to: '0xede510d93a3a6c5e8b8be88f7719716063140197', + transactionIndex: '0x15', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xe09e4ff4353fbf984f99fa824524277f704e7475', + gas: '0xf4240', + gasPrice: '0x3b9aca09', + hash: '0xbafae79055a392cea650f90096a305d1338a170a66b58dacaf69a7feb2b3f187', + input: '0xa043dbdf000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000777700000000000000000000000000000001fa79306e7ac0966731a58de98cb2ba2f79542474af67f9d696783bac7161961000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000055a7f5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d65822107fcfd52000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061e2f961dff90154128511a903268083023c6e94ae5c05d961b834bc5752d4bc6774b1d47e53a64c873c6568f12e8000b8e47ff36ab5000000000000000000000000000000000000000000000016426a792f94ac9b8200000000000000000000000000000000000000000000000000000000000000800000000000000000000000008fcdc43cc17ea9047a770762f20b6d1e816313cf00000000000000000000000000000000000000000000000000000000642d194a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000eac2bd4753c659c909c92f62b3b3a8836c2bd86c000000000000000000000000cea5bfe9542edf828ebc2ed054ca688f0224796f830518dca0dcbb81456ef28db9f78ba53d032804183435a2d240d344b8c3d7a1a5395a4ac0a05c628f436c4eb2827edfc67931073efefddcde7647ea707a8308a27e556d8fa9f9013405850ba43b74008302f8c894ae5c05d961b834bc5752d4bc6774b1d47e53a64c87470de4df820000b8c4f305d7190000000000000000000000006048e5ca54c021d39cd33b63a44980132bcfa66d00000000000000000000000000000000000000000000002b9451bb9dcd5e11a700000000000000000000000000000000000000000000002b5c89a4eb17dc51900000000000000000000000000000000000000000000000000046b2f1cf07c0000000000000000000000000007b741bb145ed7bbc1ef23e7650b5b03c67681ceb00000000000000000000000000000000000000000000000000000000642d1948830518dca07979aca687e96a60c032839e3a9e74007dd49ee05d770affed59fdd63edac960a07723c3a7400e4912d4da98e3074eb18b00daa82311dc2336117fcae96215ecbaf91d0e01850a3e9ab800830f424094000077770000000000000000000000000000000480b91ca4fee99b22000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000004bd3b0000000000000000000000004284890d4acd0bcb017ece481b96fd4cb457cac80000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000028c5c000000000000000000000000b865612584aec3737f0d4520954491a6dea83d3a0000000000000000000000000000777700000000000000000000000000000002000000000000000000000000b865612584aec3737f0d4520954491a6dea83d3a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002150c95c619800000000000000000000000000000000000000000000000000000000000000222e000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000001a40c6fab820000000000000000000000000000000000000000000000000000000000000080000000000000000000000000b865612584aec3737f0d4520954491a6dea83d3a000000000000000000000000b865612584aec3737f0d4520954491a6dea83d3a000000000000000000000000000000000000000000000002b5e3af16b18800000000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000001e8c104d068f22d351859cdbfe41a697a98e6ea2000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000005484f525345000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b486f72736520546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000380999aafe268642f1363a30eb43fb543d0e33a55f341c1ea469f9a33a09ebdf1221dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493470000000000000000000000009b7e335088762ad8061c04d08c37902abc8acb87abf6d70b5ff1fc5a1373b5de54208c25a40423a327ae085501f3c5d18695aa0360ce76abc100bd3bfe97b7f1f20447047d2f8e2c7e6bfd41f0cf66c94935066bf48db3727031c390da1d98f28ae0525f280597666f8311868a2423033acf6f82000010000010000022000e0000000000000000400100001000404002000001020000010000000444000200430080000000004200000000010200040000240002010000000000001002040009000000200120020000040000000000480000080000000400030200000801000102000820180000008000011004002210409300004000008010002100010200000000000000001881000000000000001020240000020008000002000100000000810000000004014020000000000080120000000000000002101000000000000840800000002020230000000000088040000060000018022000000000040400000004004880000010000000410080000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003148f10000000000000000000000000000000000000000000000000000000001c9c380000000000000000000000000000000000000000000000000000000000043a98300000000000000000000000000000000000000000000000000000000642d141800000000000000000000000000000000000000000000000000000000000003002db892ff219e7700915f8a8b31f759e1b5c2d48fde6dabb6d9907e978e5d676900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009252a7040b39fd2a7d353c2ee4fb10c9e68b5d2c7faf1a2b45566f4831064a4400000000000000000000000000000000000000000000000000000000000000019d883010b02846765746888676f312e32302e31856c696e75780000000000000000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000b600000000000000000000000000000000000000000000000000000000000000af6f90af3b90214f90211a0e8a3c36316ce8c880120788f4533c1cbcf55da5a172b5c69cb53660b170fba52a0d86141ccd3bc25c9b4b9ca29cb536f25fc96da550ed6c14d7e508d5f4ef832a8a03babc1e29182c92322288322d36482bc36b0a6e7350412cacf38ab9ed81c69b2a041f800a512bd2733ad8291ff52a1f0bcab58f8981d570fec7a10d1dd3b4cd768a0a45b86b234fdce46035c71a60be34c5e3a3882e7f146cdf8a1a476e9fff30eb0a04f262f18cdbcfa40a7da85df010e8d3b7f37b04ef8e53bd9c547c30f5125adcca0a5e6d00bd39f85f1747a10fb1f837859f0bfcd540a346984ab86aea9844ddf22a05edd61ea627ac91bb516f94fed66860de3fc6bbed55f9ef9d4cc361d22208b7fa0c9a45bb6dbff27575e1163cda01f313d55df0025a240f09705ce37d718607bcaa02002cf35560566563ec0ab146e815b6cf70a5791a6b52ff55fc38740e562a76ba0df8fc7adfd97841212763e8895801c1d91c0da27375d45ca1dd6a980a31706d8a012034f55ec22d3497f2b8477b2ce21844684017e26e8e70fb634758da89d7bb1a04bf105ec9101c37b53ed744d6e29341cacaac8b4ca7de1b9bce027d766a477d9a0999b8512fda4fddaff0261e63edef3cbfa23038ad423b27f701ac43b872921e2a0fad97c330d39f4afacf64d34b52b5b9543155f9e6a91abeaea5617ecb1443e8da0c274643ff637699b38077f2c2c5e1c4902fd8c8d1e92e0645fbf0a3b42fcd0bc80b90214f90211a0ce44a7136381da9670e6a6170cd022bbc27a9c37170cfc8f7bfc219b2c0faabaa0d12741db1e9e672829a34e0be3c0596ef6d6c5eda81db65b8e0921f997c5b279a0ae255bbec9240630c05df2f2cf55d2b4dde112e747fd416ec7403730d3d9dccaa065eb21066db33e00eed2ea1771a9d745b3e7fe370ba59aaa107a7d6ad74a3b11a0af8763c3cf574f21fc7bbea6448fcf3c43998c2e6a1da2684b0f8fbe73ac9735a0374c4400cba54cad4956c667c623c5ed2b943da43a43759fb8a00264bb56b7c3a0b0d2f252bfe6ec639eae3f3955af0c6e140cdcebae67c11c17de58b5f00908e0a03ab50f5335e85ad35204b88ec7bb6f59286ba58ae8d2a6bb719aa9b1d0b581c6a0798f57b72788da7a66a0518bf5b5757b2953dc0fc24baf31ac21108598569ff9a025e82f74e80614ce295bd19ad290fc44fc9c24a0321a671a9cc5ad90ece2de66a0d5fa0dbfeb4b26cf8194bc284492e6b9da201942d0f534d0cee51f01622c54f5a0f72b2521817730b4360c256f002a55e5bfdd7a57dfd26a8a5253e27331402c79a05ceccc223372493580cb3fcc50d965fd92efb39957b1d590121d745e4fca36c3a0591623557d7b0559583aa9d89327b7895437478033e087097a4ca8ffd6672be5a0a77394ec78baf2d57955a44bb7610551ae052adf71a26fcc1094135b54f432aca0c425242acdc30f6ca12ddb1d00aee89d77e1b1128724690e96c6d08e1291754e80b90214f90211a0f1a115b1ccf575bffd5e20db76caac0cb639bae3d313fab7356882615a0583cda09316d64025f33cf5cda2e32e7b40bd4ff31db2e99e106da4e4dfa32a42e48189a02292614c13e0cd22c7d48a1952468293b885eb3b0f9519b7ae4ae13ea74acd7ba0f4548120c1fbe0d005058e667a85dccfc29d53b9683cd95c0062efc93dd0d020a04f9eb068fca53d383732e579bb1fa11f9f6c8540b7dcca2972a1a8146cb04e12a0778d7699916e807277a84b80802760f27d2117d8400e5b65a43758119d3c0369a0e83a591cbb8140afb0c30d79b954642b779e4ea2d7d41d95ede952d936db7633a085263e23a13a7ef85543662bcde96e5f98475ca6fe7a7cf9734787cc78040559a0bd926540a9cbb9e49be905af3035947bf233f612775263a9e5a344dea5e59d55a03b320ff6896bfecc2ffd218c17f253b6ed59d712eda26de98689d74a3593080ca04aa12df643f7d663ea71f76983243c32f72ad1cfd56d0790380269ec4fa1d398a02784ea76fb653f621c955dc9b5c76b3aa101bddf0b1dc77b09d7193ee3977ff2a0bcb4f825cebdcd5d726bacdc4bbbd6dc0bf95672ee35e1a518c2eac429a76eeaa00b99cf6211844d2fd3b6ac0ab25cb31f135297e90f5c5613ca1fb35c16d5be4aa082331a041db97ec1b9a5b4feed27453d7fb7ab6647a50e5e0a3be4f858181b06a0ac395c2196d298cd789910237b87d2b85a5696d15ae0c48c167dd32e98607ad080b90214f90211a0fb8ff560ca9504c5b571eb6a26c4a9e2b1480b1287e086fab1794517ea64dfdea096f8275a2fefa5ae97c7804cf017a46ff8da47113bc4a93a0ddf991bc621a8d7a063854d37d08448143def60bb81b6eef240a6c22504b6e2199b3d3f8c9dfe63c1a07b877adb359eda7830883ca8a3387da29ddc0422280cc6a7a98ebabc8c0dc4e3a0941d5b10d77efa5da043478200f2094bdb78504d5ee6eeebd92fda34b2151e35a07e53446fee6bb173e36a191fef2ff174b493be5c5d9c38f0e1af97144e025f61a03da10497ba8eee352c98ac78d7f55c297478196d048d93cfe2298ed889b9fc35a0b01689a2bba4a40e9c901e6ae215e5acdb2cfa42dd0af19607e1ef4b374108b5a0567e23606d43dbbfb8d35c52a876dfd411a7c5a66997319df928967ad437893aa0da99677795f76062a5c1927baf3fa32fd66c64e3ce8d0d4bb55685e7411b307aa004e6bc1d64ba72d89542266e946e7b24413131de4553934285f53dd2d966f14da0d18e5f84e70f8f4c8d62d95901a22e2f1f99dabd2fb79126d97e3614d2feb06ba0493e106ecae86a1a4c1a34fd2ddbc5538dc275838f82e7e17295e6f309196d61a0a6944951f8a22cac7ac02cf30d71bbe357cd5dd2904b49c450dc13504d9cf17da0ede98000b5e538c24d1d428f46f9bb60f4fd869aeff5cfe6432259e861417ceaa09e3548a8b2c15c778d70010e9ff5a82005a5955a55a1d1d3c7f13c1c5bfcc15480b901d4f901d180a03a82e40aac6b4b665b910256c2ac0673b9b8c7e2c18b846fdb17b19b38c79a01a0c2810e576f9a91de5be7774f18bcd3b8f32020c1b9051d7c6bbf212f954acad3a0e93274f3773d34269a28f86cd1c6dafd18b30f42f29808932a5d00c68c60dfd3a0b5208edc16ec4ebf968be0767439f69f24f3511c64fd2e1fec45be43a15f591ba0238e86031d6f812bfbfca85d204e6676534aca4a1e84d29260b2d1d48a687961a06f05395b7e998bfd1a5c57183a670b397a4aa50b0b102243d474aa724d89a46da0df367e8b5585cbc73aa2a0e9b06e138d7fda554b4fd3839fbc5445958e7d8313a0d3ef4210936892dd7a4b3fa191bd56583dd4b73b0d20c4b4ff8632ae09934c43a0a10cd7efab9147cb2fcc9cbbb2e67e09aab92542f970446b4773a2f613b0fae2a01f6b383ea1e5dadbc4bfcba833902c120c3d0448d04daf725df9f3afd619aa53a0c2fe0a493bcda2348f94385b85a2bfb882be9da8c7e46b4ea8ba5ef7462523b980a08220bae99bbce785e55a5f57633c059225d129a21748480ff5a35bf74f2aeb6da0a155a41a0bba49577953fa96701b75b3dbdc8c334824f34a702e2a84da00309fa09d6ad83ab9088859dca18089953e4b20f4ee820b09c6300ccb4533fafe7a648a80b853f85180808080a09f62c7586f7bfef17f50d84630afe9636af8eb5e4a8b736b4325ac79d1fc5d1f808080808080808080a012ef7fc37216a7288d799939f075fc145c8aba8774d94e943353c8e96d5ae7fe8080b869f8679e20016e8b63360d8bcd376eb61bf80f4e2e872ed064a0eac1ff06dd24db81b846f8440180a0f87ea7e5ea8fd1aaa75fe4ef2e4bdc95c49b2ead39fc52784a5c145c8b59e012a0b16944c8bb850059f91dc8cd33437c5002f7b19b721bfe36d3c5122cd47361cf00000000000000000000000000000000000000000000000000000000000000000000000000000000094bf90948b90214f90211a041ea73d589b499b3ca297f66d72fd42d32ac894d7342b9f1f5ba7df0766cc88fa0557554e81eff7a46810781361db3034e479996fc09996d31efc92083900b257fa0f852ed745b6b938dfdfdbb05907bd125d062d9bdf153f14b91965fbd373b4aeba095057628aabdf0895061932a702a7c3279cbc86fec951f3a9ef979b63bf77c42a0dff38b4d64d00d06db4cbf74f9277e58dafb07561745d5a9aaba45b02c344a68a0e742f0ff9b0c6b37825e640721e8f52e28f7496113dc739df7909f98b8d107ffa09c7d25dc86534637ed0ddca306af8ed926c69327a77256d656be65c574f48c39a02c7fced9043cdc8a8ed118b39934472292b458ea7b48892fcb7a917719bf6aa3a098b3b17535b51569cbdbc27c85a4a42b644a4ac78fa4acdccff33dc90c596f33a057eb0ba87b13ebf4a0ac86d488057a133a456573121a03920d6b016a5fce5463a0a22c8b42caf8e675b0415a034ebd819e8cf36b65a5417b96ab57155b1f37952fa09d8ce5996a6cb45c4cd772058d9e451559412d23e4e8649abc7d15f66620da22a00c8a07bf34ec6b444a2488df1e6dee30497ac0a0694edb0c491a92f8a3fd1ac3a0ab1f8c0851abae9f70f3d4fabc621a26f9113c9987a4ec6755e3e41717f28d66a0a28ef869f39a2b28799d430b3630ba2fe5a2fbb3e646505fee166c0dcb48c785a09b94dca3e9dfe985430f13bb45a3b699cc3a83498bc2b3fc5e31c305eef0960580b90214f90211a07544850744de7c220c6bcdb412a182a0faf4e592aa69eb2d521ade613332e02ea06f14ef90bb358061a456cfbad7dd52f7a79cd30b6622c9ff50f6020f03006930a01023cdfa47b2b47cb541da20367f11b2f91538d0b016d7120d4ce002bbcf728ea099803b259163e9a1cbde4a9a6543b3f774547ba3c9aa6f3a2369bb0b2d08ea71a0121f6deef8f8f6ca6f2b71b384d3490a19ac03d3f3082c71f8508f01e34a95b2a0fbd01048a7d9e98499f036f0cc5fc417cbb7ea879be6880f1b6e37855c7de23ca018fbbb79b0ab120d104c779f8ee612e1bb6ddf588240b80069950d57918187c7a0f6f9f34b7c39b4603bf855c6baba28f316ec71df886257dc25216f93103336d6a069daf4734db758f1b5f3b456f40c6ad56ebe62dbd56bb5cbe35ce38bf2205e90a0fd4319bd2c4af456ed04f731d154b1b98585ad79fa30660d8ec98503097b4209a0048f140b2b4347b9afa2aa947b7f46ad35362b06a95a0a3fb87b4ee3dfa1e78ea0f6bc8cf95443c45b8fd8e75e1a491c4a03d1d5729a55d57a959a7571e264a062a0fb3113550bea737b86e3dc4e72a8072a0e9b890bf63befec6d39f297dedd0796a0687c05fe5c12a70e56da4c77e00c5d4bc438fabe07c31f62503494dde8016978a0bfca8dea7c05e8270db239c82e794ad4242dd6924e20fb5b9d136e91021c5c95a0872c183cd12d7d0397abf5ed3e81fd999da65f88146ece15f4c65f48e3b46a6b80b90214f90211a0ba41b83e2ad6904279383f09fbdf8c459a35706ba25f43811f74b4d23f52f627a05a84e84952f0cafcaa6fd61a91ad8dfacb561a2fddadcdb8997a7de6a1f72b9fa0b8c0e2792b73a3fae088e89ef0cc53b9b13eb958152dd167f80992e34a09b23ea08db0903564f4be659fb086d2dba8e4bbbbc061cc887f9c298db8d5aa681a838aa0080129c83b673253a5ce9cdcc262b622cf65255af81cef6b2febe1e3a9f809e4a022171d91e75860c4f05072904fb672bc082d82272e3580991a300483e61feb2aa056abad306dad645a4bca0ecaae00ee951269dd8eb64d1bb9d96a4599c908ca62a0bafa662a4e9aa6c78a9409bcf89f01441a59da4d92499af9b1db380bcc099eaea0150825a048bb3ef04fdf8598effbf180dcd602cbd20afa028a4ee9955fe7b48ba021b740b6628824174434d0e5f9e5e6bb9bfbff61b3fe80c0f1b0346c1460c3fea071843fcad7ea6725c5c8d0e3031e2e3a08515ecdb5f8c5104e26df32514b3b3ba074d4f14fa46dc830fde8ec0c8f2c2b0c8ab9eec5ff6cddb294cfdccdfee161f6a04e58ecc875f43d81bcb03386f2a12c947a23d8451a6732617d5d3306b219a643a075a1d4100f45c5c11e118ad5e0551eae251b903447e754a0ab12b2b728eb7a70a006da9f19628e3cddb66c385c90b9d23397bf62cef30b9fe66a5cfce2cc4c2ce9a0b58d48c116e39334ccd93cef254d4a518042bef38eb4c5dbc579f8195608ee9080b90214f90211a0d7b4576eb42d968aff244c750d5473a43387d686fc412b70a2ca1a46d5e2e1a7a0b4aee2fe792e51c501c92081aa0ab6bacfc976f5e2dd4a83cfcd5253bb98969da0ddac590296ec991bcbffeffb8f55e989fde4618b02954073c480d883c8e5ace2a05a157f2ca6d6bd23255cc8d4c7ce53256fbc6e5b45ac2c4376e2d28f256415eba0759acd7f6212e706d1d3a8aea6e56a5a2e011f173ba1908a478aa87682f3c3dfa0b074f019a44b29c1deee41a4aa2ee93b4ac6ea0fefd50c3e5c74d23c0bfdf5a8a07c481dbc9e5949799bd08beeb62d422c2d91077f4550838555d76cc2443dab8da08d418428e9bc68bfb38750869077845f5b45a63d64eed70c6be344955954cc23a009fb661af65cf20697ef6c3ce87c01f0c9d72590620302f124a8a1efc49ed99fa03e634a4fe3e00a6ad4e0371468744fd19d71387c7067afc7d8d45f5789ae49e3a0e8110b5781de15ca775891e2e8c397b4f53afa9162450eb1e09deaabdc616227a0e2ab0eb32c800e837602ff7cf21959cb82c0c87c5313f2328d3516ccabf2680ca06c8d94d3591977a92da8f193e21275622ad67cc4589574033c97eded025a0d60a003c6ed7f4ced0b67a8459c0a99ba607ef2db9e98916f4f923e9af2bd1eae2d1da06acf2da1a1d47b6eaf994d32f6f991cb35095fc4178b32026182227a23c35009a0fd79d10811fe5b8f75077dd9ff52363915dc6e4d83a5ae5ae4e029e1f03543d080b873f87180808080808080808080a03f956bd8c44a9d7be9298f63278403b7e1b33227717b6626657625eb9f3c19dfa0fd96ad74cb7142dae07af9131f62d5e3a23a6233b0d73d1aafb12a0ec160d469808080a00776bbd5d115ccd841149960c470ac9e444010856d14987e7494c47813a8597680b853f85180a06c00ded51c34267fccdb1db0688a48706cf0bea7fd28a70193d4a2e0bfd2927e808080808080808080a0fcb61cb560e6d1ffbf88eadc60bc8cb593c6b088f79227f92beef54e5ab458b48080808080a1e09e20bfb62297e61f7629b2f51b1a4edcf7e8ecf6dbe50f9afa17c11f7d835501000000000000000000000000000000000000000000830518dca0ed2a8749a3816e817b88c3479df01d0685499e164dd0c803b84fcf1d5bb650eba02d3af26b95b65eadcaa4f0d71afbed99e19406e005cdcc3e3d51a2c38b6c4335f91d0e05850a3e9ab80083100aa394000077770000000000000000000000000000000480b91ca4fee99b22000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000004c1ba0000000000000000000000004284890d4acd0bcb017ece481b96fd4cb457cac80000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000028c5c000000000000000000000000d7fbf53d3e18372672e67df8bf83aa7f8ac4e2c90000000000000000000000000000777700000000000000000000000000000002000000000000000000000000d7fbf53d3e18372672e67df8bf83aa7f8ac4e2c90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b88957d026000000000000000000000000000000000000000000000000000000000000000222e000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000001a40c6fab820000000000000000000000000000000000000000000000000000000000000080000000000000000000000000d7fbf53d3e18372672e67df8bf83aa7f8ac4e2c9000000000000000000000000d7fbf53d3e18372672e67df8bf83aa7f8ac4e2c9000000000000000000000000000000000000000000000001a055690d9db800000000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000005b9fedd37f0b92e7e282b19cebcf06f57b77c604000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000003424c4c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a42756c6c20546f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000380a44175b6e8d234a76c98202dbb7b012498baa271457d6ed1f4111d79c7010b201dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347000000000000000000000000c4bfccb1668d6e464f33a76badd8c8d7d341e04a596d8395e1c02ccd1ba1b826229b001759bdb9656a7f0ae7c0536efc55a63f8020f13ab81b1bc3ae52082eb26856839a49ef0573423b9073241567251e28b9d3b0d40afe714bb431c309207e5a97877a729eff49b6334dad55ebad5981d07d9d0240000000041c00020008008000000000000040000000100040400221000002000000000000405000000040000000004000400008000000000000000020000000000000000000002084010800000000010022020000000000000004000008010000040002280000080100000240080008000000000102000400001000030100410000001c0001608100400004040000010010b0200000004094004000200000020000002100000008000000000200002004000000000040000080020000400000010002001000000002000040000000000010210000000000090300000160000018020000000000000508000000000000000490000000000000000800800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003148f50000000000000000000000000000000000000000000000000000000001c9c380000000000000000000000000000000000000000000000000000000000027859a00000000000000000000000000000000000000000000000000000000642d144800000000000000000000000000000000000000000000000000000000000003003ad69e5da91cb5e54b112fd57b95b9046cb2eb03983264e65a6151b1a103c65800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ca3963e30a41d2a880d35fb19d5b17a6f5ea2e6cfd506da3425ec598f1da01bf0000000000000000000000000000000000000000000000000000000000000019d883010b03846765746888676f312e31392e35856c696e75780000000000000000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000b600000000000000000000000000000000000000000000000000000000000000af6f90af3b90214f90211a019087213f44f688c0dcd49f983e583a9a329639709b1ee9a53101c23f26a0491a0fb087b9d0e040f002faaa7fde0e00785d52e65bab10aae8f6f9f77975967ccfda06806e17247225591351b0ef94ca66b243011f5177593a2b5781cadf7f4c414f3a02c15a958ac502bc76357ebd5227a147ab196da16a290d4f48f13daf5633e483ea0aaf5b7baf232ce3494ba8bc5a0f3e078816245087baf4f5a1a1d0751758e34aaa01c9abd9c070cc1aa478c5299ba183d910445d9d86e811d70a5a202d57a239b1ba073015359d4d590bac73425d43d096ec005f75bf4dc27ed7eef22bda4601cd2c6a045a19c11c50d7c744faeb9d064de95ddb60ca455f0f6682d8b50f62c2fae676ba037fc061c94b0e5a536a44478805429dd3b0110dee138f8ed80a7ab24dbc52ed4a0e65f4d9f4068c76e3bb660debec15576ed5207e588e22c9545d177db6ea1e321a0ce25e076b36d304c549c274777e72c5aed5ba0dfc471e670c53f4fc53bcce537a02dfe9fc01544248ebb72038c7a397231fa24b61e9ce9a5ae6e94bb5c2fcdfb1ba084f1962da79b4e6d7332a75b607b74a5cceb446115d2124b8e6c18a9b5373efea0582146f29eadb36a8a3fa5dec2985c3ab280326ffe759ddf6e43a1479c27a94ea0743ef5d9567359ac79d07652a3eb4376723965f4191df796919969db3470e4c9a08464b7740824eb4ef540072517c845aee4fb7c48c881049f38da2d49578326e380b90214f90211a0ce44a7136381da9670e6a6170cd022bbc27a9c37170cfc8f7bfc219b2c0faabaa0d12741db1e9e672829a34e0be3c0596ef6d6c5eda81db65b8e0921f997c5b279a0ae255bbec9240630c05df2f2cf55d2b4dde112e747fd416ec7403730d3d9dccaa0beb881a361c4a87d62fad952118eeae07ffbe058cdb1ff1854d79bb218c191b1a0af8763c3cf574f21fc7bbea6448fcf3c43998c2e6a1da2684b0f8fbe73ac9735a0374c4400cba54cad4956c667c623c5ed2b943da43a43759fb8a00264bb56b7c3a0806f7890e808603a81b7ab946b2108b84f9a52834a3a50c4ec01e712d287ba45a03ab50f5335e85ad35204b88ec7bb6f59286ba58ae8d2a6bb719aa9b1d0b581c6a0798f57b72788da7a66a0518bf5b5757b2953dc0fc24baf31ac21108598569ff9a0f1c4450cbf3ce67d50acfbc67efc17c9aafcad146c27b07f8c6b033d3b54c9fea0d5fa0dbfeb4b26cf8194bc284492e6b9da201942d0f534d0cee51f01622c54f5a0f72b2521817730b4360c256f002a55e5bfdd7a57dfd26a8a5253e27331402c79a063b19fbba61d7e28feb257250bd501aed1b5d090b1affbee3cc9c7b9e790e4b6a02490033191c954ad3f8deb6160c2ea280cd270ad6262c59d4117c7d03889ee38a0a77394ec78baf2d57955a44bb7610551ae052adf71a26fcc1094135b54f432aca0c425242acdc30f6ca12ddb1d00aee89d77e1b1128724690e96c6d08e1291754e80b90214f90211a0e2a7a4f00362bd1010c4e56ece897be4b0d0d63f2fe4eef9f826ae57b0d51451a09316d64025f33cf5cda2e32e7b40bd4ff31db2e99e106da4e4dfa32a42e48189a02292614c13e0cd22c7d48a1952468293b885eb3b0f9519b7ae4ae13ea74acd7ba0f4548120c1fbe0d005058e667a85dccfc29d53b9683cd95c0062efc93dd0d020a04f9eb068fca53d383732e579bb1fa11f9f6c8540b7dcca2972a1a8146cb04e12a0778d7699916e807277a84b80802760f27d2117d8400e5b65a43758119d3c0369a0e83a591cbb8140afb0c30d79b954642b779e4ea2d7d41d95ede952d936db7633a085263e23a13a7ef85543662bcde96e5f98475ca6fe7a7cf9734787cc78040559a0bd926540a9cbb9e49be905af3035947bf233f612775263a9e5a344dea5e59d55a03b320ff6896bfecc2ffd218c17f253b6ed59d712eda26de98689d74a3593080ca04aa12df643f7d663ea71f76983243c32f72ad1cfd56d0790380269ec4fa1d398a02784ea76fb653f621c955dc9b5c76b3aa101bddf0b1dc77b09d7193ee3977ff2a0bcb4f825cebdcd5d726bacdc4bbbd6dc0bf95672ee35e1a518c2eac429a76eeaa00b99cf6211844d2fd3b6ac0ab25cb31f135297e90f5c5613ca1fb35c16d5be4aa082331a041db97ec1b9a5b4feed27453d7fb7ab6647a50e5e0a3be4f858181b06a0ac395c2196d298cd789910237b87d2b85a5696d15ae0c48c167dd32e98607ad080b90214f90211a0fb8ff560ca9504c5b571eb6a26c4a9e2b1480b1287e086fab1794517ea64dfdea096f8275a2fefa5ae97c7804cf017a46ff8da47113bc4a93a0ddf991bc621a8d7a063854d37d08448143def60bb81b6eef240a6c22504b6e2199b3d3f8c9dfe63c1a07b877adb359eda7830883ca8a3387da29ddc0422280cc6a7a98ebabc8c0dc4e3a0941d5b10d77efa5da043478200f2094bdb78504d5ee6eeebd92fda34b2151e35a07e53446fee6bb173e36a191fef2ff174b493be5c5d9c38f0e1af97144e025f61a03da10497ba8eee352c98ac78d7f55c297478196d048d93cfe2298ed889b9fc35a0b01689a2bba4a40e9c901e6ae215e5acdb2cfa42dd0af19607e1ef4b374108b5a0567e23606d43dbbfb8d35c52a876dfd411a7c5a66997319df928967ad437893aa0da99677795f76062a5c1927baf3fa32fd66c64e3ce8d0d4bb55685e7411b307aa004e6bc1d64ba72d89542266e946e7b24413131de4553934285f53dd2d966f14da0d18e5f84e70f8f4c8d62d95901a22e2f1f99dabd2fb79126d97e3614d2feb06ba0493e106ecae86a1a4c1a34fd2ddbc5538dc275838f82e7e17295e6f309196d61a06c5fa2d0981473409efc193cef5faf4328a50fd0716c7e0b4051addf7e5fef27a0ede98000b5e538c24d1d428f46f9bb60f4fd869aeff5cfe6432259e861417ceaa09e3548a8b2c15c778d70010e9ff5a82005a5955a55a1d1d3c7f13c1c5bfcc15480b901d4f901d180a03a82e40aac6b4b665b910256c2ac0673b9b8c7e2c18b846fdb17b19b38c79a01a0c2810e576f9a91de5be7774f18bcd3b8f32020c1b9051d7c6bbf212f954acad3a0e93274f3773d34269a28f86cd1c6dafd18b30f42f29808932a5d00c68c60dfd3a0b5208edc16ec4ebf968be0767439f69f24f3511c64fd2e1fec45be43a15f591ba0238e86031d6f812bfbfca85d204e6676534aca4a1e84d29260b2d1d48a687961a06f05395b7e998bfd1a5c57183a670b397a4aa50b0b102243d474aa724d89a46da0df367e8b5585cbc73aa2a0e9b06e138d7fda554b4fd3839fbc5445958e7d8313a0d3ef4210936892dd7a4b3fa191bd56583dd4b73b0d20c4b4ff8632ae09934c43a0a10cd7efab9147cb2fcc9cbbb2e67e09aab92542f970446b4773a2f613b0fae2a01f6b383ea1e5dadbc4bfcba833902c120c3d0448d04daf725df9f3afd619aa53a0c2fe0a493bcda2348f94385b85a2bfb882be9da8c7e46b4ea8ba5ef7462523b980a069cf29178b35168344d55ac9cdf13b3c9517a2099aa7b6568319e02c03fe0313a0a155a41a0bba49577953fa96701b75b3dbdc8c334824f34a702e2a84da00309fa09d6ad83ab9088859dca18089953e4b20f4ee820b09c6300ccb4533fafe7a648a80b853f85180808080a0bc3bab8c81feae47b198f1bc1f2b9728336e3537281a2c6eee74d1331903b44f808080808080808080a012ef7fc37216a7288d799939f075fc145c8aba8774d94e943353c8e96d5ae7fe8080b869f8679e20016e8b63360d8bcd376eb61bf80f4e2e872ed064a0eac1ff06dd24db81b846f8440180a06e5f26163739b4053f6fdb1653ffa968e6e000f2b18b91f76234eaa0729d0caaa0b16944c8bb850059f91dc8cd33437c5002f7b19b721bfe36d3c5122cd47361cf00000000000000000000000000000000000000000000000000000000000000000000000000000000094bf90948b90214f90211a041ea73d589b499b3ca297f66d72fd42d32ac894d7342b9f1f5ba7df0766cc88fa07a762cbff3e0e9b739b06be7f151cfac3e1fff0cbc478a7df06a80d0d237958ca0f852ed745b6b938dfdfdbb05907bd125d062d9bdf153f14b91965fbd373b4aeba095057628aabdf0895061932a702a7c3279cbc86fec951f3a9ef979b63bf77c42a0dff38b4d64d00d06db4cbf74f9277e58dafb07561745d5a9aaba45b02c344a68a0e742f0ff9b0c6b37825e640721e8f52e28f7496113dc739df7909f98b8d107ffa08633a70716914d7e00573b6062745303dc8c50b532511667628f3036b0f0d88ba02c7fced9043cdc8a8ed118b39934472292b458ea7b48892fcb7a917719bf6aa3a098b3b17535b51569cbdbc27c85a4a42b644a4ac78fa4acdccff33dc90c596f33a0f2c484ab188760c2ca3253316d40b8668e7a3edb7485422a15ee0e1bad6bbf57a0dc8b8508c79a703e331d2cbd5d336ad327ce8047ca3719e3f4722d816871418ea07c9c89253637b06276978263682f31813025cf1e3e19cebb9b357783a09486b4a0cd74cf3e3946d2f8891fe0da0228e060b1147b2f171ce4dd8827ab70717eb767a0ab1f8c0851abae9f70f3d4fabc621a26f9113c9987a4ec6755e3e41717f28d66a0a28ef869f39a2b28799d430b3630ba2fe5a2fbb3e646505fee166c0dcb48c785a09b94dca3e9dfe985430f13bb45a3b699cc3a83498bc2b3fc5e31c305eef0960580b90214f90211a089201bb14180b19fb7df34063be2a7481b966e0e6272c36f828fc2a72a8630e0a0c90abd0029dec4e29c90aa6f351052601963d9c4b46f4e9fab46fc01bfde74c5a02adfeb4442c94f1f7c683bcdd5a33ebd1f30b7c20b68de726047f77590c94461a00ef122f9df924fa30e3a5356f189d21277bc242505ef320cbef05199010cf434a07811840bf06d862d735b4d6bfaf7d0300b789c64951f812114792a46f510de4ca0b838654503c0c0f1c717c30a16ddf1cdddaa1ede040d866f94e45368c6251c34a0a755455454546f6b85ea2c42097814835bb0e1ec30ace8654754534a974da5cea0bec74448dfd5902ac00a46e19f1e01ddd01219b3168d9debe9337b0b94037fada03242d6db52f2282a11853e9e19eb7ce48597e28e1317460a170999fa42d01b7ba0513c5c46a49afc25311a73f07eb8dd5bc47acdd97da2d5a8624d045cad1c3465a098a581e4a4c691bedd27e92aa5777ee4c7d9e5a7f1576d9f269d4f7cd0b77b97a0f6eac7ade1285bd9cc6691590979b2cf9b97a9e2068d5e26bdebb689b2eb6e92a0e61db35edd0fe645ca88f6d4dfbde75dc30024e43a776b22c57d3e398876ad88a07c07253ad6c92a1baa55c1dce017527ee7bf3612c5b0357e919b5f9057aa0949a05cd25cb29d58fd8b189695a7d96642334c84ee6454d932567f4470a3388ef80fa023951d6382b1d670313b2b6688987c86ea7ecbca27db72b0012fd43a537ff1b280b90214f90211a076814edc0895fe07658ada513c48af2f596ed7a9b611be321fd40a2f16194821a00fd1ff4f6c03b018f613ebb17d3a9f9a796bb00d733771f7d70056ac83587a03a04628bfd681977471eeccb07d549d480413dd931ed52bbec7db35ffe853b7462aa073d8cdacf622b48eeaa47d955641e85c40e7b3876b2e31ed9d5bbe9acfe4d213a07c35c17c3dda60e885ad10bd1f208ada6fc7b59b72cdcf493a6122fe5a3dcc9ba0db94a6cedeb519468e034b8199b4af37df3afcbd4ca5bad43c9cc8c6656ef3a1a0d4383c73c539c0fb0c01aff683349a0532efc1d9fdfe5f547d9c8a59bdbc28e4a0390e71a361ad7616a6e5162c535767ebcb58dac4717602e2b4842ff11ca95180a01bf070fb6366513fd315ed8dbca5a638c1cdd018f31ee419b183012599c75de9a0d0e359814cd0c97cb6a3784dec04ff63b832d0d41e8591cc4359e68d875eeebda08665f1035982d0d07e8fb80deddd8ea09180acf2589cba51fdd54e58131a1980a0710fc2165bb51a3c6a6c1f64dd03845da5e7cfc42fcdca6a60083213faa42d82a0e0a633f23669f0a9c333455b15c4ebf72b80f2b1dd4666a25df7f6ff0c8c5531a091b03b12098b70acc3ea664805b9ce003480085696d15ad3c6a1df64fcb495dea06d52d15099a0ad155e272442cdf9348300b50818edd35e313d160f9bf0888052a0e76435832c5426c1dd744e8e67d73e10b62793144c74517542e16e673bd5c34b80b90214f90211a0092e1220355187fac17a3eaf00596827d709338f5d43320381109596f2de9063a04868b9d1ea13db80e3a084c78eb5c5ab1ec9f369b100a85476a420c111d97a17a09c80c33524dcb325d9437e92fc367936c6183462a52df740c175898def1836c6a0258f325e2e7610aee21f183abb6be744118f289f0c53f3ef1eee232ff31bf9a6a023c16f96779b17da4905b3a5db19f681502c30f35a22d5e02ba9b96be2220970a09bd09a4616c3466d29377c99dac342e979494a3ce0d8d427dc231480fd520feea00b51043a67bcaa5bd08c0d86680fc95fcc131c919701b3f290ef541d08b9e7e5a017a361e510305ab01f0215b581c0d3be5ed04b445fc55d3ca9b6d61b2b92db3ba080c1ad78714bdf4301e7bd15520c6138825a5f437213a4410755794857b831b9a07ba9f0216277f53ea6491be0416497c4bf8a17fda48f6df5dace66e1b54ee74fa070ca4b58e48b7f85b0e9cccd7ae45b7bfd1aa32b944d259e92d2ae1985d702c7a0b5610a1133cdc9946048d3f1a7535e7cac687027f2a27613660265bd4238866da057b5f8e30cd24f15ee4ae6e37ea6943a7d5e2004cc6075b399c75db3163642a2a027fe02fd5e8e5e5ef339cb6662bafd4581f176154f9394bace17850619d3a36ea043e186e6dd5d28e5518b833e52b468fe2c0a3eacc5dcbb343349670506303acea009d38fd63881892d26b3d8568be37ce5f938266249512584f277b57bee68fb7980b873f87180808080808080a037bc769ec3332f0db4f5236033c8caa5bc7cd3e3f8e7c1a6d545d58edc467980a0b72651e2305a4bdd706c066b9710bcc5a5da25fbb8fb1a741150c42537027d7c8080808080a03fc64cabb2a299de986e031e44556f1b13b06823cc417ef76bcf9c7c185f16548080b853f8518080a065849fb1d635249f88023195daae6e05e4dbca1f8b19d795990c88eab40e1c2e80a04a1dd3c44fdc0808d8d1c05ab23bbc1f0d6d459e2fb92b12525286d47bf84c3d808080808080808080808080a1e09e207bcbf4b320d9565d4e40863938e75405cc2a240dffd3b8f7d37a7fc0ff01000000000000000000000000000000000000000000830518dba0abb10d4aa5a4c17595500ddc9281ce7df349cb94ee33c0a325cb6cfb5a6a3c9ba00689d7118eb556b5859aa88b78f908174237397f333ee01913fd191d15bddb64f9019520850a3e9ab800830389569400007777000000000000000000000000000000028703e871b5d7cfe0b90124ee1490b20000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000b2fd0dc2c2e7b8b3da558e7c6da444770945646e000000000000000000000000cea5bfe9542edf828ebc2ed054ca688f0224796f00000000000000000000000000000000000000000000004ab248a86a443cf33100000000000000000000000000000000000000000000000000000000002fe9a00000000000000000000000000000000000000000000000000003e871b5d7cfe0000000000000000000000000b2fd0dc2c2e7b8b3da558e7c6da444770945646e00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000830518dca090f8cb38410c4e5f51f1c3dab9fad9107571cf2985e350736310fde6b0e02404a055f0571255ffc9d2f8fc6784141c2a8c62c8ba41c3248dde022329a773c486e8f91b6e808509502f9000830f180694000077770000000000000000000000000000000480b91b04fee99b22000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000038477000000000000000000000000485f2de5569a504ea701162f4ee235301c1cab2c0000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000028c5c000000000000000000000000485f2de5569a504ea701162f4ee235301c1cab2c000000000000000000000000485f2de5569a504ea701162f4ee235301c1cab2c000000000000000000000000485f2de5569a504ea701162f4ee235301c1cab2c000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5886a555c952000000000000000000000000000000000000000000000000000000000000222e000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000038012823b70d9b15f6d91739609b7d182ecb6a57964e186d5c4b4b900226d3364251dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347000000000000000000000000455e5aa18469bc6ccef49594645666c587a3a71b7e9cf267a604c9c38c44eeb5b4416231ba157f385728e3f3c65875c3714d6bd82418bfb480a9bc956dedf1e95e81bd8ab52a0e648c3fc15beda5cac1c9f55256f3492058a4aee540756073d9f9ae5acb218ca2adfac746f3a2ff486b24be3ce400000000800000000040000000100000000500003000001000002000000000000000000000000040008000000000000002000000040000000000000020200000000400000000000000040188000001002102020000000000000000000000080000000000020100000000000002020902080000000000000024000010000000040000000000020000010000000004000000000000000400020000000000200004020000000000000400000000000000001004000000000000000000c00000000000020002001000200010000040800000000000200000000000000000000020020018020001000000000000000000000000200000101000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003148ea0000000000000000000000000000000000000000000000000000000001c9c3800000000000000000000000000000000000000000000000000000000000a17f5500000000000000000000000000000000000000000000000000000000642d13ac00000000000000000000000000000000000000000000000000000000000003000d5b96fcf24f97334763c284d18e74a1977bc6e118a0207cf8b99ca1f7037b3c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000813ad9dffe265df3d9fd155afe856e61538a665e864cf6a97a5bfdaa155874b870000000000000000000000000000000000000000000000000000000000000019d883010b05846765746888676f312e32302e32856c696e757800000000000000000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000b600000000000000000000000000000000000000000000000000000000000000af6f90af3b90214f90211a0e30639f36b4f7e8dda04e70a6adf46bb204483197bf989493da77d6d9c4c3a7da08b28f54f1e6fe13276e794bb0aa6228d0fd66f39111228e8207294e57c5788afa03287ef512557901399fc9b36c886fd4449d7f7e21ecb8e9606a8dbf53110d29ca0b34b7c77be6718012ba8bcfa4bfd3f8f99e85e5c07d4e3da98b9d2ac22b8062fa07c2677985344c377465b76c516ad97f6e507ca73a6293e3d92e1e5d1f021513ea02fcaf4048f087d7f1e26f3bac80925a2d5481e3a25110b3f2a5f388db1516986a04a7f47f0d0f928ae915507126f6e6d4429308b8327295460db833498bec11722a023eec22e60be0b65237da54922ca7f9ff9ef12bb2ea35d1b9ce38f8f2b66ab60a07bdaf46d75ce4d8429fed261e9673e7cfebab1d048b11bdc38f72fd7aad937b8a065193dfcd636417a3664080432b78fe4a6700703aa363ac11c6d63d4d5cc623fa041fe9f162a0f5be223c14f9956113a1c457f0576b91cf051b453371834a81846a010155771c6678681c2c8f566ab512fc0ebeff5192645d97411e451713602f847a0ccd7e792c7062cd05bfd887eedde84a2035b0400bc6a1700c9227bfc2593c9cea0dce33695bd479ca72de377c4aa89c01824099c9ab03652414c7e8d8dcd625974a05991ba033f429fc26d03ef859889ffd7438fc2fc0e01baf30e76467680a4c447a0809cc61e72a3b6c9d7daa1b0c6ba85adf10d16937b71271992c950b013c2da4b80b90214f90211a04168a79841ec63f1a27be1f13685a1a5fb73316410852540dd69c1dc354ecde0a08b39f24d9a123f404f7d6e8d9f2f5b138c7d748895076a44ed43ee4b4b3fbb4fa0e5e59873fdb14815394d861c1ba6a51682d5d4465bb4a10bec975ef9db599517a07a81d42fa6b60f8556e1e1f9b3a48b1d321fa3c4eaedcf6b62209704b4a58c2aa0978b4d6a9b154db57057c7fa36d516b68fd509b741c62655f76edcf14075076fa0374c4400cba54cad4956c667c623c5ed2b943da43a43759fb8a00264bb56b7c3a0d037e1cdc4dea2de2a42c68b171f85ab68f7f51bacfa41dd6f8c64a57a1a5f7fa093b12cb830bc3a9121b799da0be5a8d8a6682fb31d3c2892d5e2490690266af1a01e85fc0850a48e747dc9360238a6d04dab5189551c40e21bf475a3e36a566bf7a0907333ae3fbdf50263770f5a2d595329f5569d5b9c08023d79c01f5fbaf1f1ada0864910243de5af344acef3dbea807b8043537b0e5dfdc430f6917ae9e7c5e1c6a0fe82de6d286cd5f8c1cb3509bf4ecd8081b3c08ab92a2c752d7aea90e1204356a0058afdff89116e9ba922f184b932e53610208a9897e4fce11bc36929067fa422a0b9816c9c9a8b563e0d5edffda89bf316985bfd341eb5f09c28daddbc4dbc6e1fa054ff13ee87def15b2ed83fe56d99ca15f5a3dbe2321a16d18494a0e5241fb277a0daafcb8d2b18dc684616d118eebc77a0e892c9f617003f0de0098ac555290aae80b90214f90211a01767acda67ad081991ce0902646b21161177aca7aab2bf09c9d3577c8e996850a09316d64025f33cf5cda2e32e7b40bd4ff31db2e99e106da4e4dfa32a42e48189a02292614c13e0cd22c7d48a1952468293b885eb3b0f9519b7ae4ae13ea74acd7ba0f4548120c1fbe0d005058e667a85dccfc29d53b9683cd95c0062efc93dd0d020a04f9eb068fca53d383732e579bb1fa11f9f6c8540b7dcca2972a1a8146cb04e12a0778d7699916e807277a84b80802760f27d2117d8400e5b65a43758119d3c0369a0e83a591cbb8140afb0c30d79b954642b779e4ea2d7d41d95ede952d936db7633a085263e23a13a7ef85543662bcde96e5f98475ca6fe7a7cf9734787cc78040559a0bd926540a9cbb9e49be905af3035947bf233f612775263a9e5a344dea5e59d55a03b320ff6896bfecc2ffd218c17f253b6ed59d712eda26de98689d74a3593080ca04aa12df643f7d663ea71f76983243c32f72ad1cfd56d0790380269ec4fa1d398a02784ea76fb653f621c955dc9b5c76b3aa101bddf0b1dc77b09d7193ee3977ff2a0bcb4f825cebdcd5d726bacdc4bbbd6dc0bf95672ee35e1a518c2eac429a76eeaa00b99cf6211844d2fd3b6ac0ab25cb31f135297e90f5c5613ca1fb35c16d5be4aa082331a041db97ec1b9a5b4feed27453d7fb7ab6647a50e5e0a3be4f858181b06a0ac395c2196d298cd789910237b87d2b85a5696d15ae0c48c167dd32e98607ad080b90214f90211a0fb8ff560ca9504c5b571eb6a26c4a9e2b1480b1287e086fab1794517ea64dfdea096f8275a2fefa5ae97c7804cf017a46ff8da47113bc4a93a0ddf991bc621a8d7a063854d37d08448143def60bb81b6eef240a6c22504b6e2199b3d3f8c9dfe63c1a07b877adb359eda7830883ca8a3387da29ddc0422280cc6a7a98ebabc8c0dc4e3a0941d5b10d77efa5da043478200f2094bdb78504d5ee6eeebd92fda34b2151e35a07e53446fee6bb173e36a191fef2ff174b493be5c5d9c38f0e1af97144e025f61a03da10497ba8eee352c98ac78d7f55c297478196d048d93cfe2298ed889b9fc35a0b01689a2bba4a40e9c901e6ae215e5acdb2cfa42dd0af19607e1ef4b374108b5a0567e23606d43dbbfb8d35c52a876dfd411a7c5a66997319df928967ad437893aa0da99677795f76062a5c1927baf3fa32fd66c64e3ce8d0d4bb55685e7411b307aa004e6bc1d64ba72d89542266e946e7b24413131de4553934285f53dd2d966f14da0d18e5f84e70f8f4c8d62d95901a22e2f1f99dabd2fb79126d97e3614d2feb06ba0493e106ecae86a1a4c1a34fd2ddbc5538dc275838f82e7e17295e6f309196d61a0bf3e450b07bbc9a997d408aa561f958551b9152fcdde28860881f1e3e6f8b43ea0ede98000b5e538c24d1d428f46f9bb60f4fd869aeff5cfe6432259e861417ceaa09e3548a8b2c15c778d70010e9ff5a82005a5955a55a1d1d3c7f13c1c5bfcc15480b901d4f901d180a03a82e40aac6b4b665b910256c2ac0673b9b8c7e2c18b846fdb17b19b38c79a01a0c2810e576f9a91de5be7774f18bcd3b8f32020c1b9051d7c6bbf212f954acad3a0e93274f3773d34269a28f86cd1c6dafd18b30f42f29808932a5d00c68c60dfd3a0b5208edc16ec4ebf968be0767439f69f24f3511c64fd2e1fec45be43a15f591ba0238e86031d6f812bfbfca85d204e6676534aca4a1e84d29260b2d1d48a687961a06f05395b7e998bfd1a5c57183a670b397a4aa50b0b102243d474aa724d89a46da0df367e8b5585cbc73aa2a0e9b06e138d7fda554b4fd3839fbc5445958e7d8313a0d3ef4210936892dd7a4b3fa191bd56583dd4b73b0d20c4b4ff8632ae09934c43a0a10cd7efab9147cb2fcc9cbbb2e67e09aab92542f970446b4773a2f613b0fae2a01f6b383ea1e5dadbc4bfcba833902c120c3d0448d04daf725df9f3afd619aa53a0c2fe0a493bcda2348f94385b85a2bfb882be9da8c7e46b4ea8ba5ef7462523b980a0d0af2c60146ca870fb47a71d6deb019df6d90aa7cda6c7407009bda2a23d5cb7a0a155a41a0bba49577953fa96701b75b3dbdc8c334824f34a702e2a84da00309fa09d6ad83ab9088859dca18089953e4b20f4ee820b09c6300ccb4533fafe7a648a80b853f85180808080a0a3f51c2d0692164012dc9bcf40ffbd3578152cdb07fad54121dbc37d1e3abc71808080808080808080a012ef7fc37216a7288d799939f075fc145c8aba8774d94e943353c8e96d5ae7fe8080b869f8679e20016e8b63360d8bcd376eb61bf80f4e2e872ed064a0eac1ff06dd24db81b846f8440180a0c3a9aa0c9b4e4ac49ceda1e79136460afa072dc8a5c06a61afaf0acdcf2f3dffa0b16944c8bb850059f91dc8cd33437c5002f7b19b721bfe36d3c5122cd47361cf00000000000000000000000000000000000000000000000000000000000000000000000000000000096bf90968b90214f90211a041ea73d589b499b3ca297f66d72fd42d32ac894d7342b9f1f5ba7df0766cc88fa08409a88a9cd0446e5d86cb48699da9fba28f16bccbaff729f40f995187de292ca0f852ed745b6b938dfdfdbb05907bd125d062d9bdf153f14b91965fbd373b4aeba023d3a917bec1f8ffdb722b43a2fbc564d88e2cac88b750f77c4b24ec2f60a5eba0dff38b4d64d00d06db4cbf74f9277e58dafb07561745d5a9aaba45b02c344a68a0e742f0ff9b0c6b37825e640721e8f52e28f7496113dc739df7909f98b8d107ffa09c7d25dc86534637ed0ddca306af8ed926c69327a77256d656be65c574f48c39a0955aa5238a644da8f41346bbbbef37a125ba325cd82bd8c828a90fa62b25e3d8a098b3b17535b51569cbdbc27c85a4a42b644a4ac78fa4acdccff33dc90c596f33a057eb0ba87b13ebf4a0ac86d488057a133a456573121a03920d6b016a5fce5463a0236bd37c9f80cc33f7c13e0d8d762c7a9ef57d198bdff09074bdd0c61640a174a09d8ce5996a6cb45c4cd772058d9e451559412d23e4e8649abc7d15f66620da22a0622ea2bb068aff3062c77c06e2f4ee3d77142278fbe763313d24e26e0c9da1dba0ab1f8c0851abae9f70f3d4fabc621a26f9113c9987a4ec6755e3e41717f28d66a01edd4ebccdb98e98cb368bf113363e18d31c8a5045ba892184d1a1e7812d9343a0f9c3d074c6ffeb0ee9a54072526219c148471588c56867dd90fee70f9ff9b69e80b90214f90211a0ef35ebc10af238adea3cfd94edb733b63302f5a9a711628f26bd8e9c1ed5b85ea0c3d41a4c9b3997884183896e3c650ccb9fadb4e33076ca358b07e1bf07078594a085a29ed883efab0c8334470dabb77adc7f167cb67bcbdcd2e1758f1035f93cfaa0e451fbf995657f8cb28e2856665852fe413a31bb9474ae79686267262ca55079a049fa5a9ac382be66ace1d14c4241a0c40f5dabdacaf7b9c21e62ab35d97707e6a00dc228f7da2aa8f32939e493ee932134c6ff7392037f626b30248dfe0ecb9d22a0b474a23c26c6a63ac74bebeeb067584c39689b7634458b44f2c0137462d68088a022b697290e06ae32434d2475772462823f5737fa90015508338be0999d21878da082dacfca193987b94a1d121c60a95e7353dffceaf6de6e12ca555795f6370139a06131be7275213f6deaf1d2cb00b86206fd6316151a444124fe52e569e853f21aa066ad2a157f4ae81dfddc8d607d25f47d5d78f13004c724b6d4b4d8c97a989a93a06910ce53afd6e378ae9ddae2c18083738be6187e08e30f522d4012cbad9a8c72a07f118b2da0b7ae475be06a6848cc5fcfb84d61157f0c015fabffc84c3032a90ba04187f4230bafd2aa02cfeff072b352c4cb69608556487060c9605d63cde0f592a0620bc91f688b094206e63f99af0f588e1e0c34b4d5c730d50d9a6e0116459a44a0a4117f732e200c2e5817e83040900fd27af1f453188f4ddb338558078969af6f80b90214f90211a0c094b100f8398d844396723498fd0962bb5c4288212a8ff304c0d70c10dca6c6a02e75e7d79fd0fa9f6da10a0700e0c1b1ed932f8a99810c44babfb9ff75bd16c3a0cde74cb1e0a33182a8f3e50b76163dcbf304d667e38495280d5e0c2bf22541e7a0ee94499ed79fe328dd65a0e2e7bc9c6156e315b5d76881e9e53c416378ac8ccfa0b982f68b8ee4c39d25c74af3de3969447068567825b97dffd4a70b5f1047de70a05ff44a7bb582930859321130d46489efdbfb930b4568d10779b230884aea6bc1a03e76e4457a07d55758cb4542f59b143615428024a823bcb21c9b2d9e621a583fa0374622b546d2fdf29ce25bd6a47755110cb9d4e674a1259979a8ae7b971478bba06b6a8b1b89c50240bfab8eb7f98530bd20e166049b73e07ba98001374b9262a1a0265c7d0ddc2bd1d1732a5c341b26aeb99c324a005dc22c81f160aa2520df75f7a0af9885504e2d9bcf536f80c60f3f662533805d89971fe5d00a0aaa9d0530fae2a04df0c53be7f9bbd3ecbb0243d5312298939482b82c8eaed906c8265c916a19f4a00145ffc14555f9ae81e8c4540da0f73eb58418ac99ade8c78b248f458bfa8dd1a0234d972256b55fec4a83fba4cd0f952c342cb5e3d52fb879841ebfa88b6865b2a051997e3f9206b9b09c5ca7326dc448f123158e4c454917fcd13e3254c05eeb70a0609a0630cb48a43eedebd57516a220ac8e34faca884126fc25b78af8ebd8d9c980b901f4f901f1a0414069dffe8252e52a1a8896384784ef1aabc71ac8719e92e7c63960f02ecf34a0254db1a77f0c2288a0f390f691dbd08226b6db72d6a0b1dbc135e7705cf5e7bda052be66186fa5334849180233f16120b5baefc73bc99b89a665e84243eef8b982a0ae2b3fdc9e20552ea4a446493e0114ad56f39eed8184f1ce80dd5d63adab0bc7a0f645824e46620c0aa97a23502c9e271a3f510517f9c19f172103806287155d67a04f64fbd6f9f28c485f0fa46c55e0318ccd8c33bae97b2bf47dc0e2d77e5e05d1a0b4153067f6b6eb040fb63ab71bb4321cde525349bb11e411fdbebfe5b256324aa029bf330284c50674f23e35e251c52cc0c7d4c835cb9368ca0936bf07fa458706a04f3a05566c5cf1284c0d281507b12c0492cf8cee077fff204d6cbc34efde4d5fa0eae652fe309e69fef05ff51f198a241df3d5ddf772c15f0ed2fae5f30a037f18a0679aecc867f03867b8c4dfdfd28c4432fc6672850844a24c941ddf101c740651a0500aa8840cc931ee91740358021cb6a687149300c8edf13e79b1668d47aafc5da02d25b017323c0d995fe82f1f6312b721426d28e14c35ad5f82708685a7d47499a0bfb65c61addbdd4282051105c450e6f67129c306f4e6fcb44bb8392a0c0266cda03fa25bfdeacbfb5791361399d18a053de988b0eead21f6514a12431c5862c46d8080b893f89180a073fdf1307b9d69ba7c0da51a4d6d32b591523f02b9e627bd6e97aafdc4563db480808080a0c5bfa6e8b459945156f33737f4697e53bbaa100fa50ae9786b8924f791f15efb8080808080a01f1e2c58b1eaa96bceb967b8881d24b05aad95eb5a718aad4713a08f0f17885580a0bfb51940722cc8a40fb96c9371ce6d16a31273e4ab9cf2469a06a6409ee0fe518080b873f8718080a06950e9dc1e08db4958546dd1c1c4f04c2ab26e15c6898b5456b0cd0aeda480d0a02f092488a6ff995d1cec3e0b77d75ba474f3e3bc64da7b7a757e7a4389594b01808080a08a0627e9d8f667102e284ffea65f818feb1187959d9908ee07d464e230d27d61808080808080808080a1e09e206bb61e2074de886d6d4cdc48df7562b7f63e1d7457cd7881164323190101000000000000000000000000000000000000000000830518dba0359f2a8467b2f212e9f540083652954389c9bf2a55f1d8dbfb39ec0531da6972a071e059149dac7a8c03fa165d6a5dce7193e6a114681d9517f5b38d7d34cd584ff90410820a788509502f9000830f424094fa1072f0cdbefd5b8ddeb64ffd2fda8eb7e1cc3380b903a409779927000000000000000000000000fa1072f0cdbefd5b8ddeb64ffd2fda8eb7e1cc330000000000000000000000000000000000000000000000000000018750152ae8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002540be400000000000000000000000000000000000000000000000000000000000007a1200000000000000000000000000000000000000000000000000000000000014c08000000000000000000000000db5c4078ec50ad4cdc47f4597a377528b1d7bcdb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000001a42e9feb79000000000000000000000000ae5c05d961b834bc5752d4bc6774b1d47e53a64c0000000000000000000000000000000000000000000000000005915cdb3384770000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4fb3bdb410000000000000000000000000000000000000000000000022b1c8c1227a000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000fa1072f0cdbefd5b8ddeb64ffd2fda8eb7e1cc3300000000000000000000000000000000000000000000000000000000642d18690000000000000000000000000000000000000000000000000000000000000002000000000000000000000000eac2bd4753c659c909c92f62b3b3a8836c2bd86c000000000000000000000000cea5bfe9542edf828ebc2ed054ca688f0224796f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000420990e2c26966b1923e150eb584d99556a49f5bed5edd719ce87639431260afec079f4e529e02697b2c0fe1bb45565be94b40699438432bbd11072363a64faceb1b02000000000000000000000000000000000000000000000000000000000000830518dca023938095c841c02c94271e4d5c71490f4b09799f102e453897f99e425ac1866ea052eeb3d59062ba2e61d5d5c0d4f296d243fc804960bfab1ebca57149eca354c4f904108207118509502f9000830f424094810964c10ada4289e6c860eefa5bad4ed3a6b04480b903a409779927000000000000000000000000810964c10ada4289e6c860eefa5bad4ed3a6b044000000000000000000000000000000000000000000000000000001875015320d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002540be400000000000000000000000000000000000000000000000000000000000007a1200000000000000000000000000000000000000000000000000000000000014c08000000000000000000000000db5c4078ec50ad4cdc47f4597a377528b1d7bcdb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000001a42e9feb79000000000000000000000000ae5c05d961b834bc5752d4bc6774b1d47e53a64c00000000000000000000000000000000000000000000000000016bcc41e900000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e47ff36ab50000000000000000000000000000000000000000000000008daec643bfb5fe9e0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000810964c10ada4289e6c860eefa5bad4ed3a6b04400000000000000000000000000000000000000000000000000000000642d18680000000000000000000000000000000000000000000000000000000000000002000000000000000000000000eac2bd4753c659c909c92f62b3b3a8836c2bd86c000000000000000000000000cea5bfe9542edf828ebc2ed054ca688f0224796f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042260055507625a83c3cfff9998d8448143be49dc90739579ef0952e6f5a5deaf84a6c6ceecb56f315f4870cc67684b8bb59cccac49e79e6186d6ffd71a95918191c02000000000000000000000000000000000000000000000000000000000000830518dba08e14fba1eb2c1e46e275b64fdd83976f8c741a835bfbab4d1d480b45c438d4a5a0167506d4eb7472a0184b6ebe2955980fe4dd8b1171488385a3802ac6751d9561000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x3b9aca12', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x1b86f', + r: '0x175362275825f1596f359970832405998bba012efc299cef4d9394f06c6b9b75', + s: '0x43d9acb8616d9251462c23141de510f86ea0f531247e04f3d34636f8dd391411', + to: '0xac9251ee97ed8bef31706354310c6b020c35d87b', + transactionIndex: '0x16', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xa1f4764640f5204a6adc12fe66f1aaeeca9515ae', + gas: '0x1a2c8', + gasPrice: '0x3b9aca09', + hash: '0xc9f12beaeff3325c3b58c03f66f6526593432f623d2a873bd8ca7e9f9d3c48dc', + input: '0x22c90a990000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffab9278060000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000373756d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005507269636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x3b9aca12', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x242', + r: '0xff8ca84b00f420a78380434fbace90d79ad66d69b3ab838674a2dd2757308ad8', + s: '0x7311d273c8f440d364efa011c3f7416dc97d8e34567a9b98f37e775ae9809821', + to: '0xd12fa5c13cff2be2b2527b745a7f96680bb28050', + transactionIndex: '0x17', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xe31c5bff7904c3a102434ffd75701cd8ff80d79b', + gas: '0x100fc', + gasPrice: '0x3b9aca09', + hash: '0xc8314b15135d8629e2423065b853fe91d7909d7cc9450e9477e667ba84eb45a9', + input: '0xd0e30db0', + maxFeePerGas: '0x3b9aca0b', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x12', + r: '0x2fa6f8bf60f49a700e3d7c99843af1a4acb2c17f38c6367531e1e701ea4a86dd', + s: '0x6e7b0b7d4bce277491217d269719128e4c1b4b4823c7c0a87345a54829214b5b', + to: '0x2f37b8ab86428671974ba67465ac867754fb2bdc', + transactionIndex: '0x18', + type: '0x2', + v: '0x1', + value: '0x16345785d8a0000', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x113ce23c9e0cc50f4d41d7ce6da02dcaff8bff85', + gas: '0xd0e71', + gasPrice: '0x3b9aca09', + hash: '0xc96f60d36bee10caaf4b40ddc2c90e752d7d4abebdd29646efff6b8a6454d070', + input: '0xfee99b22000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000c59200000000000000000000000000007777000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000028c5c0000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000b2fd0dc2c2e7b8b3da558e7c6da444770945646e0000000000000000000000004284890d4acd0bcb017ece481b96fd4cb457cac8000000000000000000000000b2fd0dc2c2e7b8b3da558e7c6da444770945646e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e871b5c7070000000000000000000000000000000000000000000000000000000000002fe9a000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000001a40c6fab820000000000000000000000000000000000000000000000000000000000000080000000000000000000000000b2fd0dc2c2e7b8b3da558e7c6da444770945646e000000000000000000000000b2fd0dc2c2e7b8b3da558e7c6da444770945646e0000000000000000000000000000000000000000000000b397f5c2384446e3e40000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000005b9fedd37f0b92e7e282b19cebcf06f57b77c604000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000003424c4c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a42756c6c20546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000360635eb59f4e56ee875feeb613c7ed68ea8bd7773d453b6dbdf44811be702b967b1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493470000000000000000000000000000777700000000000000000000000000000001897ab168dfafe07e4c26bbf873c9d580efd28d0ce2565506047e788057b60e20f27911504675e6587a70a8759164f8c270a225e319423ad2c296aa298dd1ee11a305f695a5ea33e6859f353ccb80d14a9f5ef67e89e544d5a960a4d435dcaabd402000400020000000000000802000004000000000000000000000000000010000000000100000000000000001a000000000008000000040000802044020000000000000220000000008000802004020000001000000000000000000880000000020000002000100000010000000080000000000002820000000001011000000000000008000002000000000810000000000000110000008000004c0000000000200002000000004002808000000000220000200000000008000000040000001000200020040000000000000040200010100000000000010002000020000200004100000000000000900a800000100040000000000000040400000200000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b41000000000000000000000000000000000000000000000000000000000025b415000000000000000000000000000000000000000000000000000000000014ec2f00000000000000000000000000000000000000000000000000000000642d14180000000000000000000000000000000000000000000000000000000000000300d7b65f05c1bf243167fe41c970fc12bcaa604ddd049f26eca84ce033a5fae1b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000092000000000000000000000000000000000000000000000000000000000000008bff908bcb90214f90211a034af0f449ddd390928628256b6b82e5a62ae461ae28fcc38e297dd6f856bf0daa01b5c06879ab72540da901c73ba855717eaa7cbe5ac569b6bccd04f9cc78bebc1a090025b072a56a132b1fa8a30d59f2973521a4c23856385e7234c4febaafe96fda05da187651f0a998a909d86cfa9ac6363f94ec2ddef2906145d7de87c70d40584a00186235f90d15dcd1623417d4513099b313a62cdfa111aee8cb7bcb4142f1fa3a0fa29813f52a6a43e3abf2a51c1f3ef40c5a9a4d92f404da3520d0b5cff6c2e1ba09caf07709579182f27fb05f453e61935c3bc7ef4d2b597fe008ea1bfd322b3f3a0224f31434147ed03c5267cbc2a90b8e289ab377b5259ea57395c77868652d6c0a04e1e98000d792172b04c376e5e6b2c6f3b07786d66675f00d2aa7c515d86491fa076016edbd69faa9d65a60fd9453e8b7888f6be1b77fc5ea99dd187cd0ce27c5da0bd01d3e33f29301cdce2964d255e255008d6ff2210cdcdd21dd211148ea939e9a01f6557012edcaadfead88ebf12284615e04fbc4fb74f407740cc989a1f4b561aa0d267eee3d5c73e1f516445f7c5f9659cc058fbd05bc0ea13227f1af502cddb33a0f4a4656d2a1d89cecb9a5439cbc74745118c688d7e8b91a5ea20a51fc02c1d5da09488a79f75111c590842276247157c99ced6567b0c656d175db145538f8b4db3a03a59c6298e83c06ebc4efd1a445c00ba703647a86dc27d02440bf906e5430e1080b90214f90211a022b5bff55cc753b8386a29039a69bf06cc780551bbdbc6476375f8252c9acda6a0f3314118d029e09e6fb762ba0b4e81dd23718817eb7ddd67901c9f81a234e628a09faa8606558839ae524942d936fd360dab883562c1019f9bf2a6ea984a6abd09a0935cc557b83b8208653e33a1b02f3e39a302b9a780f7574cae248426698a54a0a07786d2b213b506b7e99fe7560ae6b88d120f41632b053a6885b6ebcf7e6c17f6a069b3b12ec66c2685578c342474433c21d1a9923f62c0f4f5ee116646ac4e72b5a0baa06480959c44b71089167b8550a2fba5b57464128ce9d82a111a562bb3d40fa0e43356fd5ba6edeec033418994b9abe0b3fa5dbc7e7eaca2fc905d7901b9dc1ea05160c6be64ea1192cfc7b587b9885626c6a9aadfed447879f1db8c49f0cf5f9ea0bb4f9fa3aea6851dd72365a846f77afc8c7baa818058efcc341e9dcd139078ada02d6bc148b394f015531eae2e3e1b2a3123ee7fc79e406d1235910b4b2a5b034da0e23628d70d3d0bcb04709378547a5149b092237931aed0deee0390f947616c31a00e07e5e2afc8e4edaac25e24ebca0ac035e8022f7730ebc2c14a3126db234320a0a48d64177f73d47230b0b7338e60554309f5fe77aecbd743f29d1eb6d3b62fa0a001a89c298decda4e4ad69e68d55db08d249e7f6b21a8a1a632990eeaea75b3a6a0129da127678f4d08c62b6d217e3fc900f147370f7cc050b56058a34f06cf919a80b90214f90211a0058b5c68803bb3adcf5cbc1559a4f96537330e4a9292cb772f4b273af79d1d77a0b23d6f6699535e9f1bed236a4b703465b1e15f0e81a7c5fe15014329aeddc4bfa0bafb8b56f68d791a2c73e0a3d321255ab48abca8cace945d31fc29cb89083be6a011e0b6974f0ef35e775f72659b5d6758257150224003152803f33f862541b427a01615babd46293d546db4b116207d7ef1aeb70b622b297c5bbc8554baaa6a0706a06df286d178ecffc118a3b316cff7c8571c8b6237a49b2c4c4be49db774a3531ea00e33eaefbbce215525a69d515656233f4bed4678e3e8dca0d39cbcc4923f0098a07413c9c9131c12fb98fc3276409f4a4e64a91ca9cdd98349e66838882fe44ed7a053920c26f3c2b7db1f3e8b7fe344fb0c2cc193644c9cb3c34f06d30e15b1c6a1a0cdb9a2fcc496b55bc249c5b46aea99f89055e4299d655f06acfe635388883d09a0e965d2f6ed723a86ec5157ed292522519505f65d9f888c098abee18ab49e00f2a08358af1733207d020f3cfe1d3acf1514ee84f96abf6a88c85ac8d75b5bd6936fa063665e7268dae7271a42e5695b217af12e7e2867a9e4513e324c5b19e637b8bda044a16cada2d885dbf801c28d6fa0551519c121b02c8b070768574098605c23ada09ad946a45a28264fa6268b10af6f8312cb847bb5430ff0224c0038c96a86d519a0bb835b2d8a7964cb35179a0743f82c064e008d298fb2373a619c4f1da787b07a80b901b4f901b1a02c5c8117c46e1c793f9f9c185a884d0e008b4da11811cefd0ffa5f9f92f94d0ca0f590e995526db9695176be42d62f6166eb9259a48cc049cce2d5ca16a2faf3afa037b2b4ae1dc3b6b028c63a963caf3c8c377ae3aeec3a7718668c75a0b0dd07dfa020cbef76677a8dbe17b9fa837c7ddb84f003613510c455c318de71a801dc9a0fa0599cedb5c60be89661537ee75ef8a91a2a7735300122d5c47eac5b2a171d9b55a0af953822ac983a2eed99c2b6c6ff83afeb7c25d87fa07805f415e4073f79e1678080a0548fc8dc803a5821bcdf7ed20664fd20fb5175f6d6ad6a8a716ff9ec830a0475a0ec364d661ae9f61324b5e48569b26138160b675e265c210b0f1117f5761efa79a0c09b6ade00c77463ca078699c68bd96fdeedd435e3af56a2fe7ab813ab25f92da05760f02a169893d2a86d8793946a7868f0afff463a1262667d695efebd5fd172a0bf65cac3bb5affaef46f5296678a557a5da43e0b3d9d4d7521b2e2f51b38fc86a07c4b791d546d46550b59f094061f5c7de27f57aa669b83e6d549c39da3f4f4f980a0a8ce6683a46ed8d524f85f30ed02b79b194e5b9d443944d57a17ed947b95633c80b853f8518080a0607f4b81fba20cc28a9befdd29999bea6775787367a0de8f69ebae31218516fb8080808080808080a0655d31aff8515489fc365adfde0a64ea71741c8883f1e83afd73082936fe785a8080808080b869f8679e3990ccafcb92f5855a1f4e1da52ebf72581fbb6b64c0d911513fe2f507b8b846f8440180a0a25fb907de6bc04edcd901638030f57574708c23417bbce8d073781a12e685cda095f9b3037c0e121b55f25fe3c1a83375541f5ffdd4548499458f0c60a645b9ac000000000000000000000000000000000000000000000000000000000000000782f9077fb90214f90211a04e6e3d7884aaef4383c74f71a74cd0d5c97922a50a73bd00fadbf5de10ef3b6ba0ac404cb6b6b51a678c9c06dbd2e1a15ae678a4e40e45c0e3044ba545d326b624a0159ed1937e2843cd20f16f08c88fec03d6392aea6267ed7909aad36c333cc4cfa088ab73a650eb400216ec7d319941852eadec6ecb9379b37114b24ab25405cff5a06240a2ec09e987f0201218e0c5d38ecee676ad7044ca6c3d6e5ba4d7a74a6f8da0f441e11ee8d6c5d255dd04913036e3514f57e6d0bfa4e3aa75389138f4294684a0f79ec2f068a3db745acbffffb06d40fbede425e38450d8cb2b2cd474689388afa0452c5041c45b3907552d475f48d26eae46da9a28e3c69de53a34cc68c9f84c30a09392cf77e4f00cf4f211da330703449303c53bf169708e9dd7dbfd4cff216bc2a03349153ec08c8905f90508fc26a8474e1f85f40f7aa9ea1f58738149a782de54a0c55fa252f7c0ea9d40175a14b65ddc2eba80de4724f105f75141d7dc0be8a3e6a0f37c275ba8aa253861287156aba9da4a47ad2e5cf0ce8dfaf78d7ce4c3dbef1da0d45cf6c6ee3dc0886437e53aee397260b304ba0b5763e11e55b82da8e0286e10a0188c1e354f05e773cc8d961799ca4ea9c2550383e82893759bd6f6eb60da23cba0a0aed233e3be15d0b2ae078063557a33add09b1ef89d3e2cfd2cc1ab9951aefba054d325d668c5023a880d1c137115f7af33df6d0806c3b5e0fd268ae278b0897780b90214f90211a0f9375ae5ecb619ea78f6eb465c5552f72c84a814e3f6c03f8544ca4bc3848d40a0c1108a07a7122b25e024e2d2e1c4522957c59ab0da06c84182cd196676474d29a0261ef34b508d3ae4ef115f5df93915b6921a6256008fbd29889101322b2ea234a072daca21e6475db55cc8334134cd848228349f791ca125d496d0260e3fa86cfda0f58147b85a898dde2e5923ec213564d30797f27ccb9ddb4e91f58c61c8cc9d80a0bde4914226f29e6ba355f544de3b2e41118e30147ee0aee348e5247545702ccaa0046017a655a7fc483469c36cba84e540f6e3e6210d84546414da9a008290bed6a07dd938ac80ac244d043b8a65843b304f2977e4d9d68e7af3d0e99505ae40c48aa0580acc0e48575954db44fd664804485f830eb11b301f12abcb3ea7884d4522d4a02a0df37e5e34f32e3d54dc9efa4179079c03ed06a622be0a57c23c63d4aeb689a0e5de958862bfd483180364b09b5fca66f675f06078f69143f5e087fb9fe67eb7a0371255278057176f8764c2d4e46bfcdab491331f8e0689f3d1f0d91dbe9d47f7a0ff80a85e7ad89b56543f2e8ec75ce302db46dbabb0e95e91d36e6393aa6e9b88a067a83b2529f108b7e8d373d4579ec19d16f764fa4dd137da441fc1bcf4adb39ea06ae1191deb90637ae41a08620f786b37277e38ed828e86b53416ea2605a25285a0a1cfde0e3b25bfc04760733e23b94c69e241e2df1e0da16ff197adc87a92a7aa80b90214f90211a0cd89739ddb8de2187359bf1fb97e5becfce2084ee7d35d838e6cf14a20c6c0b2a0dfb6a6df062bb342caf38b4ecc5d76ba83742e0d113d2cd5feddfc5ad5fba116a097633f086b46789d874ec6a70cb46000ec51a67665cd864aab03b3096381eecaa02fbc9da965bfab882704738606614d5c1d01838893f68a609b6f52c4dc98298ea017401ba05d6b395c213f2c26af295aae58a489690376d79ba1f732a1ce80a3eea0993db5d3fbfec116ede1625679ea6694233e46469a8172f32688cee8ba1c11a5a071c159c3afdcf2a2a71ad3bb662397db55ab5a708ce64402772ec997ecf46dbda0b5e0b63a49d2a61d9dc0ac72c83b1bbe75f8d9c8d106e1be20991bd224c8981da077f3ebe2680d284f3aa233966c32e42947a608f3a61cd86d578331826eaac663a06e56203c00b08c5fa5435cf90d9fb531186a2204ce3b044d8334762425aa3022a0e167c9c0090fb097e6c628fbf5d681950bef9ef491f726ad434da1afc71418c1a072c3bbdd8e01cc228db2640a27bff504a8acfb9033222cec1e488973fbd9170da0405027c929d71ddc2da325f083f0146e11af13e1be4c64a3ecf7763d242dd30ba02ca40b009934c77dbc45e1ea31707477da52c99f2e399eca348577bd04a86a23a03aeb7c5a907110d9904f7629ff6f8d4efff24a86e351fe12e7f3bb3db65b165da032af17e766d7560489c1f6cd7280ab1bed9b670afd6a99ff8e63f6af0d824bbb80b90114f90111808080a01d8c31c0497c7953f6d3c6be0a6413ce90962e3242ff56405e119ee48cd8de988080a0ec9dadb2a13b7880a7224184424dcafb1b5902bf8bc67dbd52a22a9486d54d9ca006f22293fd983b97b544fbc94a24804cf39409d43859e339765e200ef7888ddca027d6bc7b4f2c344c3cd60ebceb2a5118bf0d4c953ec8840247aa1740933760a6a0fd73cc3433e21fd601bac29afdb0d984b615dd3ed30a7cd65a44ecf60971e1c78080a08f4288c71f60261055795b541df25b55da481e01f1780eb90cca11dcb6f0a95aa09309fae74949de4c2ff7b9d37cf8e12541fd1c44c86ced9d8928c6642a60e0b780a0551c1bffb82addd464b3018ae95671295441bdcab322751e0a015b5a9333d4ad80a2e19f20d2dfed097155b4ed77a70788e2a2538cd6acf54cef17f92ee8272433306801000000000000000000000000000000000000000000000000000000000000', + maxFeePerGas: '0x3b9aca12', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0xc377', + r: '0xbdd0b4327329360ee358a8026009fd9f2a6b13005e5af55eeb377e641037698b', + s: '0x0f7e90c4a14653e8fb3591844de75a884086c80a52d6df34df73716639a3ef2d', + to: '0x2ab7c0ab9ab47fcf370d13058bfee28f2ec0940c', + transactionIndex: '0x19', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x1567cdab5f7a69154e61a16d8ff5ee6a3e991b39', + gas: '0x763ba', + gasPrice: '0x3b9aca09', + hash: '0x61f293e6fc8978ee7e4f8c47e678f44ab08bc475134952452422c9ed96ea0b65', + input: '0x8ed7b3be0000000000000000000000000000000000000000000000000000000000014b4c00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000009e00000000000000000000000000000000000000000000000000000000000000ac00000000000000000000000000000000000000000000000000000000000000960000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000001567cdab5f7a69154e61a16d8ff5ee6a3e991b39000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b4c00000000000000000000000000000000000000000000000000000000003148fc39c9a8534f0f63e3762a6acb0dbc650c4833e08f3cf6e6e80d6d05c9e72650700000000000000000000000000000777700000000000000000000000000000001859620d37816a8fe33f24568dd2466b4430ac8e9516fdea857fb772764cca82f0e76cf63a11fef75cc0cc7b53f049996c64c4d815b0e8b4852b2a2573dd6b90d000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000004dab7900000000000000000000000000000000000000000000000000000000642d14b400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d65822107fcfd520000000000000000000000000000000000000000000000000000000000000000b5bcc88c61252dca03d1edd77745973d5ec00db9c9a1d3a086cd0c3843a610c81dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934700000000000000000000000000007777000000000000000000000000000000011fc2211bacd10d06b4a33ed4ee685e8fed00cd154c8658a51544d62605a78f6a6213dcbb514ba91b66c3f80b7cab9b129742be85808eac98232c60415e62cb8c6fd280bc3ec0dfc246c389bc54af9243f4adf6f1d4aa6941e9c4a46684a6be30002000000020200000000000800000020000004002000000000000000200800000000002800000000000000001000000000000c0000000400000920040000000000000000000020000080008000008200000000100400000000000008a0000000000000000000000400000000000000000000000000004000000001001000804000000000000000100000000014040000000010040000018000083c00010000010000020000000040000084000000004200002000000000080000000000062000002000280000000000000800400000000000000000000100000000200000100040000000000001001002800020100001010000000000000400000200000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b4c0000000000000000000000000000000000000000000000000000000000517c09000000000000000000000000000000000000000000000000000000000026616000000000000000000000000000000000000000000000000000000000642d14b400000000000000000000000000000000000000000000000000000000000002e00e76cf63a11fef75cc0cc7b53f049996c64c4d815b0e8b4852b2a2573dd6b90d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000001ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010cf90109b853f851a0d22c857853b67e2ecd1a36be5fd4fb57b847071e19a3f61c7cc6332d2ab3c2e280808080808080a054f43064a171ad1b429b9fef38d81a0f159d2c745e366f610d20b88149a7e8ec8080808080808080b8b2f8b030b8adf8ab83014b4b808303d09094000077770000000000000000000000000000000180b844a0ca2d0800000000000000000000000000000000000000000000000000000000003148fc39c9a8534f0f63e3762a6acb0dbc650c4833e08f3cf6e6e80d6d05c9e7265070830518dca079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05d1f57379d42e3cc1882aa8a2ae15031e199951301ec70f0965d96b68ba04116000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ebf901e8b853f851a06115dcce3745caad12377ae6b95d4e5ae98d1678771214c080e486001d4d070d80808080808080a06b769c80467ec45da082aa3eb5907263f384138da48baf3e70dc4cbaff1b76728080808080808080b90190f9018d30b90189f901860183039445b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000800040000000000000000000000000000000000000000000000100000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000100000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a000000000000000000000000000000000000000000000000000000000003148fca039c9a8534f0f63e3762a6acb0dbc650c4833e08f3cf6e6e80d6d05c9e726507000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf8ab83014b4b808303d09094000077770000000000000000000000000000000180b844a0ca2d0800000000000000000000000000000000000000000000000000000000003148fc39c9a8534f0f63e3762a6acb0dbc650c4833e08f3cf6e6e80d6d05c9e7265070830518dca079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05d1f57379d42e3cc1882aa8a2ae15031e199951301ec70f0965d96b68ba04116000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000189f901860183039445b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000800040000000000000000000000000000000000000000000000100000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000100000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a000000000000000000000000000000000000000000000000000000000003148fca039c9a8534f0f63e3762a6acb0dbc650c4833e08f3cf6e6e80d6d05c9e72650700000000000000000000000000000000000000000000000', + maxFeePerGas: '0x3b9aca12', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x1565e', + r: '0x70a9000a0ef35877d7f22f39c88f7ab5e50655eb0ceb75a02a97633a69f7cb10', + s: '0x05a1c9c7a9ae2615d4840367bd42176a279386fe245607869e6a85a851bd2adb', + to: '0xac9251ee97ed8bef31706354310c6b020c35d87b', + transactionIndex: '0x1a', + type: '0x2', + v: '0x1', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0xf921640daca3cbadc982e4cd3e1352dfc3a6b39e', + gas: '0x156c4', + gasPrice: '0x3b9aca09', + hash: '0xd463fb86b29f6fe631756bf475c210bac81a596486947e1439f6e63cfed71e84', + input: '0x5a045f78a44038d11401dbec7df63285e67ae6630cfab0cdd51dd840f1f73502442e412b00000000000000000000000000000000000000000000000000000000000351d826b0438b6b537ec888afe7b673f633a0fdd3732c3629e1dee30e962a46444e9d00000000000000000000000000000000000000000000000000000000003148fd', + maxFeePerGas: '0x3b9aca12', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0x2e5d', + r: '0x721ec552c6693810a0cc42b632f48ad7fe4da1ff2ee4e776eee3d951499c4988', + s: '0x62f4ebb094b6cea8e803d110944073c740428934f64ea7d07b662b3e3242b4fa', + to: '0x29674fcfc8f24e96de1c0cabf6366be9e8a00fa1', + transactionIndex: '0x1b', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x81ee20921f17db2a4413793640242cbee450de9a', + gas: '0x15be70', + gasPrice: '0x3b9aca09', + hash: '0xcc3a340e784872ba9dba17f268029e94ed3c7a49f44a4b8c7a4b8cfe7325b9c4', + input: '0x8ed7b3be0000000000000000000000000000000000000000000000000000000000014b470000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001fe000000000000000000000000000000000000000000000000000000000000020c00000000000000000000000000000000000000000000000000000000000001f60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000002408e37489c231f883126c87e8aadbad782a040a000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b4700000000000000000000000000000000000000000000000000000000003148f63248d87b672dba6ba432253a0f0234f5a5651d75e62e4b01ef9bc38e216aa8bf000000000000000000000000000077770000000000000000000000000000000161392851f9e4f80dfdd5e53164038d4eab9d409064f46c477f24fdf122243f7326633e046a9634e080e562c66b0324def962a4006378fe0f13a406c6111baf40000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000003ca21100000000000000000000000000000000000000000000000000000000642d146000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d65822107fcfd5200000000000000000000000000000000000000000000000000000000000000002d41fd4239a27793a7f50ef1d76d707d7caa032dea3d15dc9a6ddc6d5d123cc41dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493470000000000000000000000000000777700000000000000000000000000000001ee180edcf187969cd241e7b501b6d656532e368c638b3cf0a57452e80c5a00910e6c0f5afbd8352a3221c8e16a0788b77071e4caab301dd1460c63a5f5b573eb79338ffac4100fb29cefb1bf8d25d31ce802be5bb478c228300da91d391d348301200000002020000000100280000202000000400200000000000000000101000000020690000000000000000100000000000080000000400020120040210a00000000002000020000080088001000200800400000000000000000008a0000000000000002000000480000000000080400000000000800000200001001010804400000000000000100000000014000020000010110000008200082c00000000012000020000000040000184410010002200002400000000080000000400082000002000280001000000000000402000001000000000000100200000200002902041000000000000001442800000500000010000000000040400000200000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b4700000000000000000000000000000000000000000000000000000000004072a100000000000000000000000000000000000000000000000000000000002b71d600000000000000000000000000000000000000000000000000000000642d146000000000000000000000000000000000000000000000000000000000000002e026633e046a9634e080e562c66b0324def962a4006378fe0f13a406c6111baf400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000017e000000000000000000000000000000000000000000000000000000000000016202bf20ff78727f38ef16e03bfb3d4895f35cc626f97ede7cc99f48aeff8661fe32015ea8d62ec7a79e01cd398e85867bafdcf55cb6a7121b6fef097f5f5656a5d11ddf336b6879926ea2ae425e91c748a553c9a496cbe2ab556a91689f75ee2b01ad3c43aa774b50a9d8411a9f65be42d6cde781db1a1949a1e886f868917997b0ea95e7cecd43cceb9ffc714f4ba0bcdc123b8a4f20e92f13a1f02593a06357f0ad6942c184312ac915c8257e7861522c254623309d3c80715fef6cbe94241fd0f08e557b5dce0aa7f49996a67c4aeb80da9ac6f8a59b17a42deae4fbb0d0cf427501d2a701bf47ac4bdda9edceccc79fbc2206a84575182910ee2177f842ac024b24b4eeb776f98c6148c70af4507793a9498a37912ea2dd3df171a246e39f0040a1eaaecb4e85f3e205a797bcf35f61f95e9e44ab7bb8944fb92c12319436f1b9285ddc38316f4ebf6b9994fab4e19b0e435fbe00cd5e226dc9104239c954a06f5769d595f0fdb2f898988326b186c1e58060d04b1b41550e251c92966d99c276d00a69728aeb2267d0418c449a8917a7a200615e9b13a9f235d2b5fd7e4870b431542bba9db9887e7e6bbe4cea702143a430cc71b2849ef31120ebc2eb6862ec1f3dc58875ca2bca527d44ee0092790742aba0d80cd6123f9306bb1ac9f7c2e2878692ac62cc461c7c7d705589f776258d8ab6b61319034bbde9e09e8094d1f31c13d11b94f892bb9f96bd2931b66ffa5e22b104c549e7c0d5010e4e70e271d48c0bd6e4be68c920ea77af85d12eb155d9b25703eabbd0ede1909565a55f124a9b47bdc5b67578a43da803f237718e4466a7332fde04fe7f7e95359c41d0d0a30ba1f87af98ff63fa8fad3dab09a9ac5f441eeba3d6ac745dfb16366684e70dccda298015b84abcb05eef07b122a8b89d151125c2d80a936fddfbc6ddfd6327774a9effdf97052d1e1da625c9ebd9a7d112bb11e00398dec228256c662d04293d37b7d902a1f963b5607481f6562bb1724a67d2ed32b18cd8b54cc428162f1ca82274ef593f6c23dd0a29a74ddd3fe8a72e6086824bac9713de2750041a391d7a23ea5dc60b5f0a4b559d4cecec4de8f9305645ca2ed85db7ea2ed03289c30667df22a0fa810f67c200700542abece092d7b5e8a947d1fb4c0e128cf68fcc1af7be52603bd54144505dc737c294a191826b6acadc58bd650a4ab26e27da961dbfa5d4f40a1c249676f4b2fd88265ed6b23942ef4fb1afd2f1bfb808fdb53c0d6fbc3535b14cec095851e5e40d1402560966dc5b7c47cf75c0412bb78addd71a838d7f3d86fe3fe3e083c852ced873d023178496d6cf7313b4a6221b9f62632887363beb7267e0480c0d4618dea58a2674887b3e3f85d0b795518c2d9a0f66054878b7556fb2438981a67961b72c7e153610338839573a6b1ccc12425fbeea1e13209866b3023609f91667a324c7d4428ae28b8e022656e087680adaa4a9fe2936ce41c44f1e0ed8f9c7cd65c68b1b8506b8e75bcd59264e450bbb4d348402195db45a9ffe868ab920485d66d23a7625d1b9892b4a2ac859f91daf6613fbd702addcab7a7cf571319efb37880817e04740f060190e441d231d492f286d99f72c23a1ac53940f261541002268dc9c73adbaad064622c60ddf605a331b16b1bb1efe52cb9d73ec837a69926f28271aeaf4c61f4f50996a913d35b8a87d0f66f8163f23a65e66eb5e73b17d02f88299254808157022094c1020bc5767cd421ed30bc948ce794f70ca50ca6204aeedc6f6e796848895494ae73fc62df3ec9eaf6a0c38a99ee1cd24137da2616f25283852b77a7441a7435ae2dd90f7baed98ca0b19a10d20c1797afdda343a4fae32b01b3c3d2481de39dd9cfebc6c2fe6e44e081ca7994177168fce45be9b3c1f5428805ef91f262d68f47d08ce1b9e884910cb0cb6d39b55f1f3eaee3faefd6a3326c7fbc3b23ec1bf88dbadd85d24d68342b9129e79b98fc11d88190e3de7381ac3609d1205eafa1a71a506f0eb7ed7a5ee78170c11d33c30f76a1b24108587e5d6872568bfbb1f084e8dfc73df6e0f4be89d1f0f344a9b233f287b2bb1607b7946fd20ea44dd33a33d64361e57ec59f5f11f12ebdc318118aa421e1a73f41a21092b48b56a0d8d4049740f327a4197688e2d0870d46ed0b715be2bf14888e3c041d07f45efb8eee2f0e7f8d4e417604cedcb289749fa70d1e564d08411684887c72288692a86756968a38167559bbf143eee0c6570b2b27926d3c243c7df6483f22fbd0e96a9bc4cc39e8ac3d6a58e4ac80d147f188e8e9a002873589a76c9d4f308cf346acaa48353c6fdbd3329ca39c56d1b7932b70e7b068a2656173d241e8f20bb6be3a3a3767111aa6f459f84be961c2337f6e03ed3cc6c847a3683894288b471504cbdc43a78f856801a10a87c77322e36e0ca426ec67ad3a2a3b79bc5cb81928a79a67a0fb46bb967cbab73fd36022f92d920204de61717dde6a85b7bcf57584c11ce54ac92998f856bf042a01c501a1a8456e7b562dee9eb814f525bc166583117e8da765b63d0c16b76934b46870fdca9ce6594b76b5e4872c05eb95bda7098574c78cf73d517b5ae6e5d0c7b1f2b3bd4735aa3c92529df74b20a6895b437507fc1f44cdc88fb2d5e8468ed2fc0188fd50402d78574867667b3bfce7befe91d569edabfe217be4ac2dd8101d63728a08b0d02c6f725e3c14c0f47f4b7ce1483bddae55ee7e95dea6691597fa6db17a326f43dbac5ba1e3408fb2eac7ca167e8483575097d9dc804c23ba18bfd6f05abad37349c8584fc581608dd8d2fef8ab93c62ec82f50be7f87ddde40fa2a809c87ee8fc92fd87dbac398573ea193060575c87c6768c45494e7fa005df93480ffb3f375da875f2ba0e29c56295674d4d183d339bdbcfd26bf96c5f27f65a631c9042429fd3c3d670dc95b83954d9ddbc465b380fe59ce05927a6be8173569a0c84a5344c3aaf0dafdfe58e9284e6af05c034905d71ec2bc32b8d10069a87db2c8c35b4c4293954b6c0def975b3ca0ce484970c73a6edbc8b16f561c5d61cce1c10f3b1fe9d7ab286469a6564af7075382ce7a3ce10c5ab9184d5fd493f3d4c207a79ce978290537e704d612be188ec67e9e8872e03a51838856958a3c656430463484d31623127c09c6cec446a9ac9a53cb6841ca2a097ceef88e537e209880ffdcfd5033bc3f5a885c271e41ee332366345fa867780beb3c1d5eaa496ea091cb5ef81b351c4285af9541ce297346db590831516f2df062c8877ae8f1852481e36d3873e806faa86a7fc5637f716db5b02a56db3aa483c344a001c25a8b6c6225ddc4ade14a5a09f647e6fc93608a7db35bfea1fe027e777a3bffee81cca151a06b44c6ff05c06711df8ebf241e92e2c14dd0100eb5cea607bfba67f41e4ec0f852db2d456600fa346f2c17073677406268e73f212abb1cb94fea99c8b996517d80e2892266757606fb78597a9a05a331480446dc07a1d89fc58faad15be2d05508c9a55988c822834db73ca745755cf77975ed577b23fc092b574497c6c992018836986a2a4b0facaa47ed1f40eebacb8cd53301f4ec7fa016f97211905bf05354a05fce802ed398737a699b089fcab8959f4c77d8214ba2374db718e481120881343903805c37499ac6bba1da7dca697c266c9e568b64e56890295f76cbf19c27f56572aa103dce1f100a14eac719d8c51b08c4533e1f1d203045106bbdc180e09061be491621237be12f8432c950d09bd6a6809421265e2e15911d9107f16933682e6831182dec2b2c4bbddb7afa67e9a02fcdbf47b3efb21121217bea50a9e2b57943e2b29d7c41ca458d1dffb84f68a65b4fa5f0abae20125aa0126b32ca8127fbbef4f975fac1107c2ed708ff1b75ac0f16a3e10bd846f045d4737222ae159016f7dd9fc4bb866af4854833992dfe8dd3f990f782add743a930012d3168a34b0ca765ef2ab4e470068ab13302ba4973c6bd9d2e9fba518ec41ebfd310ab9f21bf6c769c41c8b45b6ff3fd300df2ff8087c42fc91b9115e1910f089192eda200a2f58e1d6ff8f4f63a899838e0917d0b076af83131da73a62a0e0b77f09c9f039ae81639b318f3854299fdadcd73784dacea2257838ee8bf988dea7181040d11baf575eeb983b1302d68b004cba286e8bc80b7a9ddeb6d56bf155f3ab0cf18d1403e14ea037377e7f95b49f38b22cc657a053f3ad45fdc33b32457995024516142200f791d61578579daee3ac9d7918e282d4584c79631189af38dd9925f79c0cab0fba6ebe24d9df162434b70ad2137a3600ba01daa5551d07a2b1701010c130c299f8764c69c14cceb50fca46295b409e1cdc393533d034894182cd01907a72f435bf4e4cebccdb59e3faf40163a13314cfc1335315d194586a0541254fc915b805e6d2e141dc63cbab4c49eac4935a8b4cc9c77a431e3db4159d8025bca474bbb209dfe7566541abf6485f81d8be4663cd339d95a3b34d4f8a42d51a26894d6e65d9450ecab365b0b19ad44db4af7432a5b459ed2dcb119de74b6e15dda8c38011f120ffb6884ea329037b0bdb5a4a5004cb456daf9b32f5cd1c0f1e1048af2a49e9cf2303f59efba6e1abb882d112311ad2add10776ef94afd2e916fc3a8205ca02dce8cb27b10ba26bf0d1b04d03b71f03d5f434c8af51dbf77702efdb10b5dcd0809a6da828b0eab03eacfd1554d44a807ef2c5de63e4a5c398259cb476fdd0dd2c304c4ae01f6b7b2e10d9bd86eef4ffa4397c2cd4084778dd2ea6228a4f17fc8b341a34ee7ccfb240dd01e283396965ce2448d73fd5b8e5d203b307ee73583771b93e28e8f177c825af0f8f8b4f16e6df18e9d9d0e49e859621407fcb4cd07ab64145026fa670a9698c261ef0cb76b47c6ad6b008dac8c6f92098fd0b2ee74f50c009cecae4eda22a080c0c86986b84f86f03ac28e7d79283018922c535833ead6a1b16ea042ee0ecd1af9b126c4bba84e11b60377c5bbff5163c8940526855472f7c786a8694e003a00ffd1da1e16fbab04eee6fe2ec5a6d2bbfe13c5c2af082fdf2d1818bfb3cc9ddc604db743b13832b89bd65ac9bcaaa1f602034c07d2bc913276d1632a2e9dbfe2ac1beb5ba1b469d1fea029b8a2b8c1d574d523edd2a5bee0780530aaee255436c338c1cfc0454d903318e3a00f4c5101c9b501ed89bc8b2b92ff724ebc50e0d1c8767d9ee4d5e58d78d7239a7cdbc1afc710fa8ec879cab3203d51091b9541bc36087419a211ee32109b77e327dbd082a0c91f5bb3516abf4bdaa71a8648e100866004295a9e50a0ad4243b4583cc111d5b8098fa7dc34ca98f99997eb8004ec212e0f5d58f903f54082b3d072b682ce1b7d0d2cfb3cdc55213daaa780ea1150cd9042d5883a1137db6b7a0afcef826a9c2e694f20669cb53787de5addeeac7c8641b3d668e9cf4d31b504976b127210fb83d80051bdbcae80f5aa9030cbd616d8bbdbb0b7d9d2a7862e8917cb79b204d9301d418ca96fd93e218e7187618b2f0ec47821592b9c52b3eebecdfc80a1a5c28caa8b56f42a2ccfa30f6e290a64396796b6fed903ce630b57528e9348107f6e0a0a5a2958144078fe1185e9cfb8f4b4ad7bd74cdc2a3c05122e24ee66b24c6b5d84b0b671eb48d3a928692222210405af3b2d5156970cab5f8d642ff730fe04e3e88dab94466803aa0b28e2a539bda7bc023fdc83a485b526b6e5582452f5e99730a994763a792d0e2542333b7b79a47c1d8aeb3e035505168836d6e7c2ff1fcedfaf2583e33081894764a6e1619be587762d3b9c9699cd046e8ea0eef21dbd595fcd9c71df2f02bc72a29b43ad5dcbe598afb785bde612708c73228d70768a8f37ed1be14e7905a812b46c915728e188e8d3e895fe223279aa5c7336b23221735362e209e2889b68505f20c41d60e731fb48af1e6fdbe8fa1bcb5e69b269ae9866cde5b68f479671a68334e4571a02c0fd1520086f9860c0328ee41c42dd52ea913d72ae6126584d42b15c1a2a5100236df160157f7fd213b031bcee528a1b8c0bb475069a918cbefbcf2dbdac8676483b2471e8adae1132e5beeb3b6210b43f3abcf96caf95692b855cf0e5db4eab0145fa54fb83d30ecf48fb16c001873ca92de8bd0d2b09cfcf49b5b0d8b50c6f99309602d17fa3c809830fd468f1a49d67be412fe930c2011ed756ca6f5197be70a04dee1686a07bc30ec6cf57c2a877f667410839e6882ab38bda1b51a54be67771dc8c80e1a8d515a33cafe092822b78463c3965d7c773b303f990a802b1c63a303b781c579273bfba954383919ee9238aa15231a80d75570a62e3dd08e9423275b3748c554f1bdc73c86e6572006491e1aa8f09f9d65583e97536fc0d913317b1aee89f537946ac387a7e5c6227a860e26fe3cea6dfea1bfcf3195104eea752d05525093c23841703a6e26a0112651daaa1072b3373a87235d4e80558f8f89b503ddb0448abdc4ecea5b907f0a424151ec50f6e8c813f08e3f37b695c68a1da8a35037985994291f97d7e78312981efa8ae18e5097ef5a39ec20e278aa6e7bdb36a5fe9cfda8b8b21814b0082ed09628ae5ff87cd89c81c2718ad0d55d9b00fbf3f96f4643f9c6b4b863309d09c7f64e51f2e419c8f74ba5bca8b33184e788309c3e9bfdf357c9abdcfaf58624c58b0978639536e838e7b37329155f72ddfcbd169156d272aa9f26857de30419ec04071ff9d2c7f56adaf08865b3aa55cd9cbcfc3ce4d2f292b319578df3811eb8f283a49d00adf709afc2a3bd646158ccd8846fbe77a850a77ec62bc3c18d038cc76d62c7a40bcec980d14fd291e17950985299a6cb6fac49167464dd734a11f4553a8f202609a1edacd64b680c003b711561f0b680f9760bedf215f62dce1d2fd2105ffe428d6ea1697a4e78187121df225472a09d4253835a8cd3244f2508846c4a1b6c59153ed263edf250bf64dea18a214e6425edfe0303eb8a6a8ee714010d1bddf92de313c209d0577f1fa845229b2ad06aeac09b2e880e74a6d3d61c544f2710b9d8634a7b75d3914e857c218b6fb077a14dac3c6953e91ff9e47322dfd143da2656b32ff72a3e5f2577cc05bcc0728f1c6218629c14a1995c96ad20af3782e3f8f7350c23d8cd1f16163fdc499a83d6f338d3de6908ef4523c015197f334696777b71ac026ab03225e22a65ffa07440de66c5e12e89e7d896d8942b895e01dee383588084337dcc9186473074499e8a9b64b42c1dfaf56216cde7188af85aa7549c42d4737b867514e5c53b7709b21770c868a88b69bc19b3ec3912773dcd4c4f80865be517d7a71a3a84648669f0109efc47561cdfbae366b9911c5f16af4dd990a55a1e97776419804b6f0cf129aae0a65565d9a1672c4d454805569db0397b08aaeb1094dd0ca8527463f247630bd239e9133ef2ec6fd8e7a00dca0f10ebf122ee1c3854e242307c94a8d954359ed923c1e22c4f9447b6aa7306a4eadd067e8c2713d8626540b0dc09305e6e352f809614a29848d69e9413b42242cf4450c9ec9168d3b6cd4785399e52fcf07e996f3b3838476dc6a4f7f2542183edf2b088899927498bc653196bd4b885d737ad926351b58def91759b1f35186159f9a180ec1e55d681781cd1f9d2fa1da758dcf4ab70108db61c0bcf1ac319dd3d266693eac735b312ea2fefa6e83fefbc3d515d56d885bfe2af3d8e970f0015b6881b6b88c6b40dbcba8546600d3171dc1429c875c9ddd874dda1e4424325b443b47d88bdb2a43f0937e96052b971803041112a7b000431e585af9134be16f30d90412876d38329ac1166c222cc9ea68bb11eb73d6d736452c13010640a2ece76ac65f5545069390f93bedbb77ad3e24064ffead9b509a020fa1e6d58eb0e1eed845b788a17e7ecd5cf5cb49683154c6aaf61464ee494ea530d77d6867b0252bba60f34de96239d0be4db7ededbd8562cb5fc898e4c93c14c35f0e46934000000000000000000000000000000000000000000000000000000000000010cf90109b853f851a039fee3b1b52c4050fee3645ef3892dcf67dd49afe451d52da9628f78b30f93da80808080808080a0bfd2c2c6fdcb0e0addc8f03535632e4c26491b593ae1dcca799a189ea6f78f7e8080808080808080b8b2f8b030b8adf8ab83014b46808303d09094000077770000000000000000000000000000000180b844a0ca2d0800000000000000000000000000000000000000000000000000000000003148f63248d87b672dba6ba432253a0f0234f5a5651d75e62e4b01ef9bc38e216aa8bf830518dba079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a00a10a46dcd1ff9dcdf23a3b70ffbaaeed9017652f829a35fe91c796442c03e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ebf901e8b853f851a00c1232913970f6ba64121513c54de53cec3b12062b1d763a60fd3159dc04b84180808080808080a0fe254438a68341820f132398f2ae2b48b5bad3ecc0796b53ac119791061da3c58080808080808080b90190f9018d30b90189f901860183039445b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000100000000000000100000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a000000000000000000000000000000000000000000000000000000000003148f6a03248d87b672dba6ba432253a0f0234f5a5651d75e62e4b01ef9bc38e216aa8bf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf8ab83014b46808303d09094000077770000000000000000000000000000000180b844a0ca2d0800000000000000000000000000000000000000000000000000000000003148f63248d87b672dba6ba432253a0f0234f5a5651d75e62e4b01ef9bc38e216aa8bf830518dba079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a00a10a46dcd1ff9dcdf23a3b70ffbaaeed9017652f829a35fe91c796442c03e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000189f901860183039445b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000100000000000000100000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a000000000000000000000000000000000000000000000000000000000003148f6a03248d87b672dba6ba432253a0f0234f5a5651d75e62e4b01ef9bc38e216aa8bf0000000000000000000000000000000000000000000000', + maxFeePerGas: '0x3b9aca12', + maxPriorityFeePerGas: '0x3b9aca00', + nonce: '0xafad', + r: '0x4ff829fe4720ebe3a48ed0ef37da1586961d6791a210b6ea57410db3aa875c28', + s: '0x663e7092e6e93c97a9451f1354cc6e29b862563cb0155d0bd971811a628c1749', + to: '0xac9251ee97ed8bef31706354310c6b020c35d87b', + transactionIndex: '0x1c', + type: '0x2', + v: '0x0', + value: '0x0', + }, + { + accessList: [], + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: '0x3148fe', + chainId: '0xaa36a7', + from: '0x1e2cd78882b12d3954a049fd82ffd691565dc0a5', + gas: '0x5208', + gasPrice: '0x9', + hash: '0x31e1fd8c0516fba03ebaddf860ca4d16a63904e23b412ed7c2832c7906cf199b', + input: '0x', + maxFeePerGas: '0x9', + maxPriorityFeePerGas: '0x0', + nonce: '0xbecb', + r: '0x5c720720ae8fb9cd9a075e5dbbcf54b67cb4448db579a5cbb2518d1f24abaf74', + s: '0x7d52476bd7fbfeccd82b32f01280b304f02b44ec6f3e1be0f4692eca07cdb8e2', + to: '0x388ea662ef2c223ec0b047d41bf3c0f362142ad5', + transactionIndex: '0x1d', + type: '0x2', + v: '0x1', + value: '0x143c70de9f84c8', + }, + ], + transactionsRoot: '0xbd2f86bc39fbe1ac6e24ce390d268404c199da060116437803875d2c0bfe7970', + uncles: [], +}; + +export const sepoliaBlock = { + difficulty: '0x0', + extraData: '0x496c6c756d696e61746520446d6f63726174697a6520447374726962757465', + gasLimit: '0x1c9c380', + gasUsed: '0x4952f0', + hash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + logsBloom: + '0x0000000c0000000002000410a0101000080100004000001000000040200040020008800000800450001040004000000008004040008000000000000000a004000000400000002080008c020800006080010c22004000010100002001400008000082a040080211000c01010002000b00080000000800000004000010200100044020008008082100010008200805800001210000200000000004000004200000820800800000000010140040504400082404000300000000100080000000400000400002113000000000000040040008240000200000000110002011000001000018122010020000002400008000000008090810000002001000200800300000', + miner: '0x1e2cd78882b12d3954a049fd82ffd691565dc0a5', + mixHash: '0xddbb2beaede8c4a7c401156c0a02c58b3c0732e25bd5bfd350a599c54309929c', + nonce: '0x0', + number: '0x3148fe', + parentHash: '0x26b0438b6b537ec888afe7b673f633a0fdd3732c3629e1dee30e962a46444e9d', + receiptsRoot: '0x1ca1776ebf36ae37a1f48770684da37fe1c8fc134954b229b1f619e5e0ad2c51', + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + size: '0xd66e', + stateRoot: '0xc9e235dd0e663f36fee8f80d860961f2e8056f4cdcce501372a77bc1fed20534', + totalDifficulty: '0x3c656d23029ab0', + timestamp: '0x642d14c0', + baseFeePerGas: '0x9', + transactions: [ + '0x5d703f823e7e4d6719def234cf8683d0d34708c2b0ce0285f4b008bf555b0481', + '0xa8a6e1f58adfe40a059e037c6c2b6e07bd23aa3d32d892bfcc6f40d85f22c907', + '0xa4335f3948675d7cd43b84078e3567860b4e1ffa79e9f6e5278f1d3fc860699d', + '0x25553d98cc5c2758b653b122a461e08250a0613752258ff1ecbea813632f08ef', + '0x5b7ae021605d0fad23fd882d48762851858bf0b6188641d619481f5ea230c502', + '0x6ff0dbf6f27ac5bd4cedebca54424e4ddf5bc6db1aeba945c2d980e7d759e5c5', + '0x234db0c295cf5d70729dc85b36a3df18007c80e1e6c5dd3465f739be81b062c5', + '0x745ebf4cddbadb01df7eb32e393df6f712bad3d6f45d935151eb402fa2bee5d6', + '0x35607880ee334b3e5a2bfc419aa32d4ec2b87445a0c58b347c945265ffc8e57e', + '0xb3f527bc8306499630857a4d92578b2d492762e7828580af536ed10128953327', + '0x59b21c5451f4c6bbaef6758aa4ddac3d350ee9d6f7f79cbc8aea1e4d6d30f32a', + '0xe3708d5286b2a3fdb73db6b9409c70e121e65cd5896682f011e97b578906245c', + '0x738a0a811d13a8735bd7b5ea4b784a0dff23e6bfd2b1897303f731bb49ef19bb', + '0xd63d4edc0ca6567cea22cb342eda67d37bd4a5a5a36cb66e233f368a8f98c7cb', + '0xd383977c4ab373914a2199b5673eb43b1cb3c86a129c29a440b67b8ee491bad2', + '0x554c50ff5d6578a8ea4a352651106151d0d4b5fc683fc4071096463744b3013a', + '0x92d5693632cfc366be1a143bf63aef7b6307db1227e40d7806d1fb21e67137f7', + '0x72bb6a4add14cb640948ebd801898076372c86bf2eac41154f414738da1d1a32', + '0xc33480b85a113f779725fd2c1788ab95b066792a898ee0eebb0e98c8fa605989', + '0xa8685562865ab1e6c73816fad05a38d6ea0670565ef27add5f4bd16db852eb46', + '0x7cff5abea75fd389d37b08fa73f8d4ea6c2a00f36c715fda422c8d92f05aed78', + '0xd844bf22fcdd8fd5c472638540f114824082359ef753a4f9c929889226dec5f2', + '0xbafae79055a392cea650f90096a305d1338a170a66b58dacaf69a7feb2b3f187', + '0xc9f12beaeff3325c3b58c03f66f6526593432f623d2a873bd8ca7e9f9d3c48dc', + '0xc8314b15135d8629e2423065b853fe91d7909d7cc9450e9477e667ba84eb45a9', + '0xc96f60d36bee10caaf4b40ddc2c90e752d7d4abebdd29646efff6b8a6454d070', + '0x61f293e6fc8978ee7e4f8c47e678f44ab08bc475134952452422c9ed96ea0b65', + '0xd463fb86b29f6fe631756bf475c210bac81a596486947e1439f6e63cfed71e84', + '0xcc3a340e784872ba9dba17f268029e94ed3c7a49f44a4b8c7a4b8cfe7325b9c4', + '0x31e1fd8c0516fba03ebaddf860ca4d16a63904e23b412ed7c2832c7906cf199b', + ], + transactionsRoot: '0xbd2f86bc39fbe1ac6e24ce390d268404c199da060116437803875d2c0bfe7970', + uncles: [], +}; + +export const sepoliaBlockData: { + earliest: 'earliest'; + latest: 'latest'; + pending: 'pending'; + finalized: 'finalized'; + safe: 'safe'; + blockNumber: number; + blockHash: string; +} = { + earliest: 'earliest', + latest: 'latest', + pending: 'pending', + finalized: 'finalized', + safe: 'safe', + blockNumber: 3229950, + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', +}; + +export const sepoliaProof = { + accountProof: [ + '0xf90211a0bd15c5367fed7268b977d52e8e7aa9f961baaeb2bffb6d90c55cbe3b23c50867a074309ab894fa7cf4e291e0a61ec8e6add0c0b7698577dba557f91858743f7440a0135795d3fa69c75454cf6cacd210209f7c225ddfeefacafa1447330e82859e87a0f542e94a9320b7d615d95378262578df550f6a80a6217bc2f503088d4bf601d3a023e652402f5a6a44da6c71c3cd4a8b6f4c4a4f9451698b789cd4a7da37bb3196a0888fae0375d4cf0fe295979f015de598f2f7fb058d846c7fcd7fa8268e81163aa0eb060a257f3eee39a4579962233ea5cb521b3a1a9386005c9dbc3c9ce6174d28a0debaae98c52e95e669ac3b8d296a21c89193097a45fd4c4a0823ca55194a8d9ba0a86b400ecc676f1804ffa3ff941dbfaa6ccebe550c20209fe0665b6af927c3fba0eb9018f4d1782ea2adb33a473f710bc7d198aa882b8b0820fbf62f043c5dde5ea024c8e4ed90f41d7bdc598eba97abe9381da68f226453c89a136861f32a5bff26a0c7ce63cdedc4d07a451006586e16da4bb3c9e5d139af517ba1d278e4533efc90a0b16abc82bf81370bef07ee95a13d6a14d2188b0d8ad0696680e0b256bb2176f8a051ffa6ed1eff6147e636b0a8c49f1da1374d99942dfd4545ba857d879de5c629a06c32f72dda0421587d7c3b084f6c13c0dd6f35521fa23ef8e2bcf2d1f194e5d6a0f6f6120a27d4e3b14126d7f23e3f4542a5bf4f491f944dc151b3163472fb322b80', + '0xf90211a038929c628a18707795bb89a867c0b7495eaf95e40df84f4c6aedf8d5478ab59ea0a31f46c866a8a2dd599078744d9555a0a48f53b3529970cba5ef63fa6c4685a9a05d562bcb524148adac94e00e9f17756c426c53cd46fc31bf1ea467acd80413dda0614e03f044983248f1b19855ac7b38d4bb6bb34767ec8a60271bb5bc0c079171a0ffdaf1a1991f7fbbbebb23767a41c22117582260745b168c06ca7a4ff013591ba0ca57a67a4c02700c3cec0656710e2ca4728965b5cdcda8307b16db08b090a2d2a0a9f60bb268e9d96708dbb484e8a4ff1da76c6686691eac2c6481bc6e324f0536a03b20d5bed13d41810838c43581ed081d9a7c9d971c3e83476952a5d2fb60016aa07df274d27362ec672894d49ad82f521c1ab2d847cb0af304b8f7b1f6712e40d2a0d3b62b154087675f4523b66aa7859b2d73a55f6857a61383b85a4aa3888b027ea0f07c097aafb7b80cebdca5e31b17df8da434b1850c3a5d451ad0750a6359b1ffa08749e3e8a244fe9192d82b86478987cdb02496d121e1964fd8d41cf2fd94998aa03e170d58c142ff03585365200af853b786e9a44d72577aedbf6683b84625aefca085dcf138627c56661db6af1c4c7e44934d7f91a5d14ae6245320120dfa2aabfaa011cc33f31468451e493e4dd011ce880d60eabd6de4e2d00e489a0c4929f2a624a0a8334a9cd0b427828c2e9dfef0ff0047d5716358e4eea8195cf5780abd36333680', + '0xf90211a004a2e57b23ac28e0e6602053a68a67e3939a4b4679c1620ce59c638b4f7c58aca00384344638ceaeec259c4f6fb1f50a1993b56f93bcc10f074de47f3fecc78a25a03336ad1d963218b80d3a7ef692e74750d732b933491f377af2c9eb10bda9cc1aa0d70c044c14fd50d526bf3606cbfdf07f23d53a89f1e236aea1441b3ccffdba4ea0014fb6658cfb3c6a2f8c73213309017bec76ede238848061b7b6c8e6d34cd2fba0a8d1dcb19a8b0c79c25bf526d558e16c064f164a1c252620867c4a986d80805ea0fdd22438d97b4a42ed0d9210be8e1b00ab09d2e745c9a74880e0ac89265ebfd8a0dbdd2ae84eab9fbb4ad6782f8194edca15149a70c136a712e147a0e6c14b6025a0691f4ccc7ea60181f9a1fbb0c50d0fb8f87855f52725d99d51761800a8e1a898a0d4a1033a557673b58c44dd5d8933e3b9e6836073b62e81c51e393891e1c08406a084bc2853de7cb71cec627953a0244eb79715bcea8f98ba20c3172a91094e087ca046b189afc77399b676156153dcffdf015c9ed1e1e2de47964324f809f05f8028a083c10c2ffaab82d1bf06fcc2c688d9b2649eb2e7f6a2bcdf421871878ffbf0f3a0a784810c6a3b134e0efdb3673415ace91355301a85e4aacadb48c1bcdbed5b6ea0e8d8ea2dc934168667b82b7d0aa5ea98ff65827ddd5e6a1c7c79260c1b3772c0a0d74896fc22af6786c882135339c29b6247d0217fe1aec73b1e977a847558924d80', + '0xf90211a08d4d210a3e60087a4eb5f36727a3a56a9311278567c97d59fc50aa74f165bd8ba0d1a18b6ad21cd0f14238879fe57b6f09d14298a5928f6379ff80fd763459a4afa07bd9f101833e378d43e09fad08ce5509780f2ec57403598abe602b2a2af45ac0a093379828ca29052df58f45cd404e8b12c01c4ca26f86f1f923806bc06e72fd84a03392ad52fafa40ecf85d8847631bf161acf3431b3731af5e98fdf874d7647d37a00167dffc916786580e139b274b8b8b80c2e1a6db831777baf2b16296c05e5a58a0b6317e14b722a02c7e195028ac66b6ccd8cbd89914933ba30835b14c2c49cb65a0c959acdf92f6c065c1225bada0ef9b2b9ce4b59fa7647ae1c27c9a850742b8c8a0b20e9ed80d852af613897b6b44280d9ecadf531a089b917279e6128b0c010baaa02561c3d2cefe9e8b61f8603c89c9b0777ec90f97c79113c4e4a39140177429eca00de6d0d0b3871224e6a253b35b7da0f1b66d31fdb3a63ffeb9ce9d319f35700ba0828996f22bc8faa91b4290e70dc0a9a3084726049fd01084f737f7e1b9b888aca05305056bd62a34b39fe0a35dda9c4ded845a7ed1851b3f3b093e5e033d0c4aada0992d0e606f03e8ae4a4a7d2e1f0eda43768a25428fb925a3dd867b8a95b8ab17a07cd265da902a8955576d3efacdf91366c96866a6a0d552708baa98ed2ba977d9a0459eed6e81c723f98973c5eb34f2864bf893f0ca0b55c5392768956b17d7d95580', + '0xf901f1a058da106a0328d4a8fa604556b7f8a2b42996771251b58868d98b4ee9940b5a26a0cfd6ba241820c3367bbb70460455a3a7c0ab28cef4a12485d33e77882699e552a03dcef268450bb0cac9677fb51477e12944c1ec8d6e7d9c44ede32daa700de2dca0e7db3fa45aabf1d311be857d8b52fe3bd6406ce219bf694535071d6e2f734a8aa03a7fd296a5c7b18b5cf0ce2d400ff96c512aa89777a00daaa50c7e64b5728195a08c18b256d1caa08d692bdcdc4da7eb597dbd77908f3c6d704dded57b39d013bba0b95e5cb7469465246e4705e216a5244c56adac2c40ec49798e6771b48d26585480a0304cfc03edfb7f777c82331d3d34b4d8c77eafc9d6ba0a4a96347ebf83be4982a05edb92ab1d3707d6aee70be0f8f9271983c86d0b2a19ca490d3eed9b0e28f732a0d28b01f8c9eba67bde4dbaeab359f156e44598fae182bae9544979880ee034b6a00063032eced2cdb17d5b507b850dc45e2cfa9bf8a032011670b60ca80a2c2991a0315eaab728c1d381befe0ea772d95b8a0884f6076ae1865e970f410640cb2efca089e4aa4ec84ee7528ffede0f3d9e3d8b06f4ff39bbb4f717c7ec380ecff6546ba05f09cd4612d3eab1988a27dd387c5c8f97722a5108090f587af73fb70f9e71d6a003d3b1eec463fc3e82704b3abbc928d0a0ea17417c38d77d8f8d71f8d631d58480', + '0xf8709e37b7ae81a58eb98d9c78de4a1fd7fd9535fc953ed2be602daaa41767312ab84ff84d80891c2f286a1800abedffa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', + ], + balance: BigInt('519906916634041511423'), + codeHash: '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', + nonce: BigInt(0), + storageHash: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + storageProof: [], +}; + +export const sepoliaTransactionFromBlock = { + blockHash: '0x241dab30227f58633e69fc4128b1c2b09699ec274cd575e39e697c1e460e5791', + blockNumber: BigInt(3229950), + chainId: BigInt(11155111), + from: '0xf0046e53d11c6e7a6badb4c9e849fcc26509dc16', + gas: BigInt(63000), + gasPrice: BigInt(3000000027), + hash: '0xa8a6e1f58adfe40a059e037c6c2b6e07bd23aa3d32d892bfcc6f40d85f22c907', + input: '0x', + nonce: BigInt(6714), + r: '0xa0f6ce97f49e3bd2e539430890ef4dddf2f3b1c4713b374234ed6ebceb80604b', + s: '0x33712ef7984df3ca434d854724b2b1d5be58012ccb39bd5f3a8b729a0c4d7931', + to: '0x83f3229e66fd1997961f76cbfb6e077f66ae1962', + transactionIndex: BigInt(1), + type: BigInt(0), + v: BigInt(22310258), + value: BigInt('1000000000000000000'), + data: '0x', +}; diff --git a/packages/web3/test/e2e/get_accounts.test.ts b/packages/web3/test/e2e/get_accounts.test.ts new file mode 100644 index 00000000000..c7bf588231e --- /dev/null +++ b/packages/web3/test/e2e/get_accounts.test.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3 from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; + +describe(`${getSystemTestBackend()} tests - getAccounts`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it('should get the accounts for the connected node', async () => { + const result = await web3.eth.getAccounts(); + expect(result).toBeInstanceOf(Array); + }); +}); diff --git a/packages/web3/test/e2e/get_balance.test.ts b/packages/web3/test/e2e/get_balance.test.ts new file mode 100644 index 00000000000..f1f658faa8c --- /dev/null +++ b/packages/web3/test/e2e/get_balance.test.ts @@ -0,0 +1,113 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { isBigInt, isHexStrict, isString } from 'web3-validator'; +import { toHex } from 'web3-utils'; + +import Web3, { FMT_BYTES, FMT_NUMBER } from '../../src'; +import { getSystemE2ETestProvider, getE2ETestAccountAddress } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../shared_fixtures/utils'; +import { sepoliaBlockData } from './fixtures/sepolia'; +import { mainnetBlockData } from './fixtures/mainnet'; + +describe(`${getSystemTestBackend()} tests - getBalance`, () => { + const provider = getSystemE2ETestProvider(); + const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + const expectedBalance = + getSystemTestBackend() === 'sepolia' ? '172530374997217200' : '2099795781954790368'; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + block: + | 'earliest' + | 'latest' + | 'pending' + | 'finalized' + | 'safe' + | 'blockHash' + | 'blockNumber'; + format: string; + }>({ + block: [ + 'earliest', + 'latest', + 'pending', + 'safe', + 'finalized', + 'blockHash', + 'blockNumber', + ], + format: [FMT_NUMBER.BIGINT, FMT_NUMBER.HEX, FMT_NUMBER.STR], + }), + )('getBalance', async ({ block, format }) => { + const result = await web3.eth.getBalance(getE2ETestAccountAddress(), blockData[block], { + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + + if (block === 'blockHash' || block === 'blockNumber') { + switch (format) { + case 'NUMBER_HEX': + /** + * @NOTE toHex assumes if a string is passed it's a hexidecimal + * which is why the number string, expectedBalance, is being + * converted to a BigInt + */ + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(toHex(BigInt(expectedBalance))); + break; + case 'NUMBER_STR': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(expectedBalance); + break; + case 'NUMBER_BIGINT': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(BigInt(expectedBalance)); + break; + default: + throw new Error('Unhandled format'); + } + } else { + switch (format) { + case 'NUMBER_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(isHexStrict(result)).toBeTruthy(); + break; + case 'NUMBER_STR': + // eslint-disable-next-line jest/no-conditional-expect + expect(isString(result)).toBeTruthy(); + break; + case 'NUMBER_BIGINT': + // eslint-disable-next-line jest/no-conditional-expect + expect(isBigInt(result)).toBeTruthy(); + break; + default: + throw new Error('Unhandled format'); + } + } + }); +}); diff --git a/packages/web3/test/e2e/get_block.test.ts b/packages/web3/test/e2e/get_block.test.ts new file mode 100644 index 00000000000..f50f73612da --- /dev/null +++ b/packages/web3/test/e2e/get_block.test.ts @@ -0,0 +1,100 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { validator } from 'web3-validator'; +import { blockSchema } from 'web3-eth'; +import { Block, Transaction } from 'web3-types'; +import { format as formatter } from 'web3-utils'; + +import Web3, { FMT_BYTES, FMT_NUMBER } from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../shared_fixtures/utils'; +import { sepoliaBlock, sepoliaBlockData, sepoliaBlockHydrated } from './fixtures/sepolia'; +import { mainnetBlockHydrated } from './fixtures/mainnet_block_hydrated'; +import { mainnetBlock, mainnetBlockData } from './fixtures/mainnet'; + +describe(`${getSystemTestBackend()} tests - getBlock`, () => { + const provider = getSystemE2ETestProvider(); + const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + block: + | 'earliest' + | 'latest' + | 'pending' + | 'finalized' + | 'safe' + | 'blockHash' + | 'blockNumber'; + hydrated: boolean; + format: string; + }>({ + block: ['earliest', 'latest', 'safe', 'finalized', 'blockHash', 'blockNumber'], + hydrated: [true, false], + format: Object.values(FMT_NUMBER), + }), + )('getBlock', async ({ hydrated, block, format }) => { + const result = { + ...(await web3.eth.getBlock(blockData[block], hydrated, { + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + })), + }; + let expectedBlock: Block = ((): Block => { + if (getSystemTestBackend() === 'sepolia') { + return hydrated ? sepoliaBlockHydrated : sepoliaBlock; + } + + return hydrated ? mainnetBlockHydrated : mainnetBlock; + })(); + if (format !== FMT_NUMBER.HEX) + expectedBlock = formatter(blockSchema, result as unknown as Block, { + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + + if (blockData[block] === 'pending') { + result.nonce = '0x0'; + result.miner = '0x0000000000000000000000000000000000000000'; + result.totalDifficulty = '0x0'; + } + + if (block === 'blockHash' || block === 'blockNumber') { + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toEqual(expectedBlock); + } else { + // eslint-disable-next-line jest/no-conditional-expect + expect(validator.validateJSONSchema(blockSchema, result)).toBeUndefined(); + + if (hydrated && result.transactions?.length > 0) { + // eslint-disable-next-line jest/no-conditional-expect + expect(result.transactions).toBeInstanceOf(Array); + } + } + }); +}); diff --git a/packages/web3/test/e2e/get_block_number.test.ts b/packages/web3/test/e2e/get_block_number.test.ts new file mode 100644 index 00000000000..f2aecabca2f --- /dev/null +++ b/packages/web3/test/e2e/get_block_number.test.ts @@ -0,0 +1,70 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { isBigInt, isHexStrict, isNumber, isString } from 'web3-validator'; + +import Web3, { FMT_BYTES, FMT_NUMBER } from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../shared_fixtures/utils'; + +describe(`${getSystemTestBackend()} tests - getBlockNumber`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + format: string; + }>({ + format: Object.values(FMT_NUMBER), + }), + )('getBlockNumber', async ({ format }) => { + const result = await web3.eth.getBlockNumber({ + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + + switch (format) { + case 'NUMBER_NUMBER': + // eslint-disable-next-line jest/no-conditional-expect + expect(isNumber(result)).toBeTruthy(); + break; + case 'NUMBER_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(isHexStrict(result)).toBeTruthy(); + break; + case 'NUMBER_STR': + // eslint-disable-next-line jest/no-conditional-expect + expect(isString(result)).toBeTruthy(); + break; + case 'NUMBER_BIGINT': + // eslint-disable-next-line jest/no-conditional-expect + expect(isBigInt(result)).toBeTruthy(); + break; + default: + throw new Error('Unhandled format'); + } + }); +}); diff --git a/packages/web3/test/e2e/get_block_transaction_count.test.ts b/packages/web3/test/e2e/get_block_transaction_count.test.ts new file mode 100644 index 00000000000..02fb0fc4357 --- /dev/null +++ b/packages/web3/test/e2e/get_block_transaction_count.test.ts @@ -0,0 +1,115 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { isBigInt, isHexStrict, isNumber, isString } from 'web3-validator'; +import { toHex } from 'web3-utils'; + +import Web3, { FMT_BYTES, FMT_NUMBER } from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../shared_fixtures/utils'; +import { sepoliaBlockData } from './fixtures/sepolia'; +import { mainnetBlockData } from './fixtures/mainnet'; + +describe(`${getSystemTestBackend()} tests - getBlockTransactionCount`, () => { + const provider = getSystemE2ETestProvider(); + const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + const expectedTransactionCount = getSystemTestBackend() === 'sepolia' ? 30 : 196; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + block: + | 'earliest' + | 'latest' + | 'pending' + | 'finalized' + | 'safe' + | 'blockHash' + | 'blockNumber'; + format: string; + }>({ + block: [ + 'earliest', + 'latest', + 'pending', + 'safe', + 'finalized', + 'blockHash', + 'blockNumber', + ], + format: Object.values(FMT_NUMBER), + }), + )('getBlockTransactionCount', async ({ block, format }) => { + const result = await web3.eth.getBlockTransactionCount(blockData[block], { + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + + if (block === 'blockHash' || block === 'blockNumber') { + switch (format) { + case 'NUMBER_NUMBER': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(expectedTransactionCount); + break; + case 'NUMBER_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(toHex(expectedTransactionCount)); + break; + case 'NUMBER_STR': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(`${expectedTransactionCount}`); + break; + case 'NUMBER_BIGINT': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(BigInt(expectedTransactionCount)); + break; + default: + throw new Error('Unhandled format'); + } + } else { + switch (format) { + case 'NUMBER_NUMBER': + // eslint-disable-next-line jest/no-conditional-expect + expect(isNumber(result)).toBeTruthy(); + break; + case 'NUMBER_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(isHexStrict(result)).toBeTruthy(); + break; + case 'NUMBER_STR': + // eslint-disable-next-line jest/no-conditional-expect + expect(isString(result)).toBeTruthy(); + break; + case 'NUMBER_BIGINT': + // eslint-disable-next-line jest/no-conditional-expect + expect(isBigInt(result)).toBeTruthy(); + break; + default: + throw new Error('Unhandled format'); + } + } + }); +}); diff --git a/packages/web3/test/e2e/get_block_uncle_count.test.ts b/packages/web3/test/e2e/get_block_uncle_count.test.ts new file mode 100644 index 00000000000..521f017fad2 --- /dev/null +++ b/packages/web3/test/e2e/get_block_uncle_count.test.ts @@ -0,0 +1,64 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3 from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../shared_fixtures/utils'; +import { sepoliaBlockData } from './fixtures/sepolia'; +import { mainnetBlockData } from './fixtures/mainnet'; + +describe(`${getSystemTestBackend()} tests - getBlockUncleCount`, () => { + const provider = getSystemE2ETestProvider(); + const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + block: + | 'earliest' + | 'latest' + | 'pending' + | 'finalized' + | 'safe' + | 'blockHash' + | 'blockNumber'; + }>({ + block: [ + 'earliest', + 'latest', + 'pending', + 'safe', + 'finalized', + 'blockHash', + 'blockNumber', + ], + }), + )('getBlockUncleCount', async ({ block }) => { + const result = await web3.eth.getBlockUncleCount(blockData[block]); + + expect(result).toBe(BigInt(0)); + }); +}); diff --git a/packages/web3/test/e2e/get_chain_id.test.ts b/packages/web3/test/e2e/get_chain_id.test.ts new file mode 100644 index 00000000000..95dd93078b3 --- /dev/null +++ b/packages/web3/test/e2e/get_chain_id.test.ts @@ -0,0 +1,71 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { toHex } from 'web3-utils'; + +import Web3, { FMT_BYTES, FMT_NUMBER } from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../shared_fixtures/utils'; + +describe(`${getSystemTestBackend()} tests - getChainId`, () => { + const provider = getSystemE2ETestProvider(); + const expectedChainId = getSystemTestBackend() === 'sepolia' ? 11155111 : 1; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + format: string; + }>({ + format: Object.values(FMT_NUMBER), + }), + )('getChainId', async ({ format }) => { + const result = await web3.eth.getChainId({ + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + + switch (format) { + case 'NUMBER_NUMBER': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(expectedChainId); + break; + case 'NUMBER_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(toHex(expectedChainId)); + break; + case 'NUMBER_STR': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(`${expectedChainId}`); + break; + case 'NUMBER_BIGINT': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(BigInt(expectedChainId)); + break; + default: + throw new Error('Unhandled format'); + } + }); +}); diff --git a/packages/web3/test/e2e/get_fee_history.test.ts b/packages/web3/test/e2e/get_fee_history.test.ts new file mode 100644 index 00000000000..9097b310e90 --- /dev/null +++ b/packages/web3/test/e2e/get_fee_history.test.ts @@ -0,0 +1,84 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { feeHistorySchema } from 'web3-eth'; + +import Web3, { FMT_BYTES, FMT_NUMBER, Numbers } from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../shared_fixtures/utils'; + +describe(`${getSystemTestBackend()} tests - estimateGas`, () => { + const provider = getSystemE2ETestProvider(); + const blockData: { + earliest: 'earliest'; + latest: 'latest'; + pending: 'pending'; + finalized: 'finalized'; + safe: 'safe'; + blockNumber: number; + blockHash: string; + } = { + earliest: 'earliest', + latest: 'latest', + pending: 'pending', + finalized: 'finalized', + safe: 'safe', + blockNumber: getSystemTestBackend() === 'sepolia' ? 3240768 : 17029884, + blockHash: + getSystemTestBackend() === 'sepolia' + ? '0xe5e66eab79bf9236eface52c33ecdbad381069e533dc70e3f54e2f7727b5f6ca' + : '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + }; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + blockCount: Numbers; + newestBlock: 'earliest' | 'latest' | 'pending' | 'finalized' | 'safe' | 'blockNumber'; + rewardPercentiles: Numbers[]; + format: string; + }>({ + blockCount: [1, '2', 3, BigInt(4)], + newestBlock: ['earliest', 'latest', 'pending', 'safe', 'finalized', 'blockNumber'], + rewardPercentiles: [['0xa', '20', 30, BigInt(40)]], + format: Object.values(FMT_NUMBER), + }), + )('getFeeHistory', async ({ blockCount, newestBlock, rewardPercentiles, format }) => { + const result = await web3.eth.getFeeHistory( + blockCount, + blockData[newestBlock], + rewardPercentiles, + { + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }, + ); + + const resultKeys = Object.keys(result); + const schemaProperties = Object.keys(feeHistorySchema.properties); + resultKeys.forEach(prop => expect(schemaProperties).toContain(prop)); + }); +}); diff --git a/packages/web3/test/e2e/get_gas_price.test.ts b/packages/web3/test/e2e/get_gas_price.test.ts new file mode 100644 index 00000000000..8bbb9e856ff --- /dev/null +++ b/packages/web3/test/e2e/get_gas_price.test.ts @@ -0,0 +1,70 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { isBigInt, isHexStrict, isNumber, isString } from 'web3-validator'; + +import Web3, { FMT_BYTES, FMT_NUMBER } from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../shared_fixtures/utils'; + +describe(`${getSystemTestBackend()} tests - getGasPrice`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + format: string; + }>({ + format: Object.values(FMT_NUMBER), + }), + )('getGasPrice', async ({ format }) => { + const result = await web3.eth.getGasPrice({ + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + + switch (format) { + case 'NUMBER_NUMBER': + // eslint-disable-next-line jest/no-conditional-expect + expect(isNumber(result)).toBeTruthy(); + break; + case 'NUMBER_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(isHexStrict(result)).toBeTruthy(); + break; + case 'NUMBER_STR': + // eslint-disable-next-line jest/no-conditional-expect + expect(isString(result)).toBeTruthy(); + break; + case 'NUMBER_BIGINT': + // eslint-disable-next-line jest/no-conditional-expect + expect(isBigInt(result)).toBeTruthy(); + break; + default: + throw new Error('Unhandled format'); + } + }); +}); diff --git a/packages/web3/test/e2e/get_id.test.ts b/packages/web3/test/e2e/get_id.test.ts new file mode 100644 index 00000000000..8bbf21255e4 --- /dev/null +++ b/packages/web3/test/e2e/get_id.test.ts @@ -0,0 +1,39 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3 from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; + +describe(`${getSystemTestBackend()} tests - getId`, () => { + const provider = getSystemE2ETestProvider(); + const expectedChainId = getSystemTestBackend() === 'sepolia' ? BigInt(11155111) : BigInt(1); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it('should get the network id for the connected node', async () => { + const result = await web3.eth.net.getId(); + expect(result).toBe(expectedChainId); + }); +}); diff --git a/packages/web3/test/e2e/get_peer_count.test.ts b/packages/web3/test/e2e/get_peer_count.test.ts new file mode 100644 index 00000000000..f5803eaa91e --- /dev/null +++ b/packages/web3/test/e2e/get_peer_count.test.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3 from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; + +describe(`${getSystemTestBackend()} tests - getPeerCount`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it('should get the peer count for the connected node', async () => { + const result = await web3.eth.net.getPeerCount(); + expect(typeof result).toBe('bigint'); + }); +}); diff --git a/packages/web3/test/e2e/get_proof.test.ts b/packages/web3/test/e2e/get_proof.test.ts new file mode 100644 index 00000000000..73e1e1ba7f2 --- /dev/null +++ b/packages/web3/test/e2e/get_proof.test.ts @@ -0,0 +1,82 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +/* eslint-disable jest/no-conditional-expect */ + +import Web3, { AccountObject } from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../shared_fixtures/utils'; +import { mainnetBlockData, mainnetProof } from './fixtures/mainnet'; +import { sepoliaBlockData, sepoliaProof } from './fixtures/sepolia'; + +describe(`${getSystemTestBackend()} tests - getProof`, () => { + const provider = getSystemE2ETestProvider(); + const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + const expectedProof = getSystemTestBackend() === 'sepolia' ? sepoliaProof : mainnetProof; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + block: + | 'earliest' + | 'latest' + | 'pending' + | 'finalized' + | 'safe' + | 'blockHash' + | 'blockNumber'; + }>({ + block: [ + 'earliest', + 'latest', + 'pending', + 'safe', + 'finalized', + 'blockHash', + 'blockNumber', + ], + }), + )('getProof', async ({ block }) => { + const result = await web3.eth.getProof( + '0x0000000000000000000000000000000000000000', + [], + blockData[block], + ); + + if (block === 'blockHash' || block === 'blockNumber') { + expect(result).toEqual(expectedProof); + } else { + expect(result).toMatchObject({ + accountProof: expect.any(Array), + balance: expect.any(BigInt), + codeHash: expect.any(String), + nonce: expect.any(BigInt), + storageHash: expect.any(String), + storageProof: expect.any(Array), + }); + } + }); +}); diff --git a/packages/web3/test/e2e/get_protocol_version.test.ts b/packages/web3/test/e2e/get_protocol_version.test.ts new file mode 100644 index 00000000000..49da2e4550b --- /dev/null +++ b/packages/web3/test/e2e/get_protocol_version.test.ts @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { isHexStrict } from 'web3-validator'; + +import Web3 from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; + +describe(`${getSystemTestBackend()} tests - getProtocolVersion`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it('should get the protocol version for the connected node', async () => { + const result = await web3.eth.getProtocolVersion(); + expect(isHexStrict(result)).toBeTruthy(); + }); +}); diff --git a/packages/web3/test/e2e/get_transaction_count.test.ts b/packages/web3/test/e2e/get_transaction_count.test.ts new file mode 100644 index 00000000000..62e3fad818c --- /dev/null +++ b/packages/web3/test/e2e/get_transaction_count.test.ts @@ -0,0 +1,74 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3 from '../../src'; +import { getSystemE2ETestProvider, getE2ETestAccountAddress } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../shared_fixtures/utils'; +import { sepoliaBlockData } from './fixtures/sepolia'; +import { mainnetBlockData } from './fixtures/mainnet'; + +describe(`${getSystemTestBackend()} tests - getTransactionCount`, () => { + const provider = getSystemE2ETestProvider(); + const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + block: + | 'earliest' + | 'latest' + | 'pending' + | 'finalized' + | 'safe' + | 'blockHash' + | 'blockNumber'; + }>({ + block: [ + 'earliest', + 'latest', + 'pending', + 'safe', + 'finalized', + 'blockHash', + 'blockNumber', + ], + }), + )('getTransactionCount', async ({ block }) => { + const result = await web3.eth.getTransactionCount( + getE2ETestAccountAddress(), + blockData[block], + ); + + if (block === 'blockHash' || block === 'blockNumber') { + const expectedTxCount = getSystemTestBackend() === 'sepolia' ? BigInt(1) : BigInt(11); + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(expectedTxCount); + } else { + // eslint-disable-next-line jest/no-conditional-expect + expect(typeof result).toBe('bigint'); + } + }); +}); diff --git a/packages/web3/test/e2e/get_transaction_from_block.test.ts b/packages/web3/test/e2e/get_transaction_from_block.test.ts new file mode 100644 index 00000000000..3c7b18eccd7 --- /dev/null +++ b/packages/web3/test/e2e/get_transaction_from_block.test.ts @@ -0,0 +1,103 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +/* eslint-disable jest/no-conditional-expect */ + +import { Numbers, TransactionInfo } from 'web3-types'; + +import Web3 from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../shared_fixtures/utils'; +import { sepoliaBlockData, sepoliaTransactionFromBlock } from './fixtures/sepolia'; +import { mainnetBlockData, mainnetTransactionFromBlock } from './fixtures/mainnet'; + +describe(`${getSystemTestBackend()} tests - getTransactionFromBlock`, () => { + const provider = getSystemE2ETestProvider(); + const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + block: + | 'earliest' + | 'latest' + | 'pending' + | 'finalized' + | 'safe' + | 'blockHash' + | 'blockNumber'; + transactionIndex: Numbers; + format: string; + }>({ + block: [ + 'earliest', + 'latest', + 'pending', + 'safe', + 'finalized', + 'blockHash', + 'blockNumber', + ], + transactionIndex: ['0x1', '1', 1, BigInt(1)], + }), + )('getTransactionFromBlock', async ({ block, transactionIndex }) => { + const result = await web3.eth.getTransactionFromBlock(blockData[block], transactionIndex); + + if (blockData[block] === 'earliest') { + // eslint-disable-next-line no-null/no-null + expect(result).toBeNull(); + } else if (block === 'blockHash' || block === 'blockNumber') { + const expectedTransaction = + getSystemTestBackend() === 'sepolia' + ? sepoliaTransactionFromBlock + : mainnetTransactionFromBlock; + expect(result).toStrictEqual(expectedTransaction); + } else { + expect(result).toMatchObject({ + hash: expect.any(String), + nonce: expect.any(BigInt), + blockHash: expect.any(String), + blockNumber: expect.any(BigInt), + transactionIndex: expect.any(BigInt), + from: expect.any(String), + gasPrice: expect.any(BigInt), + gas: expect.any(BigInt), + input: expect.any(String), + type: expect.any(BigInt), + v: expect.any(BigInt), + s: expect.any(String), + r: expect.any(String), + // TODO These values are included when fetching the transaction from + // Nethermind, but not Infura + // https://github.com/web3/web3.js/issues/5997 + // data: '0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a36104dc806100de6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80632e64cec1146100515780636057361d1461006f578063893d20e81461008b578063a6f9dae1146100a9575b600080fd5b6100596100c5565b60405161006691906102fb565b60405180910390f35b61008960048036038101906100849190610347565b6100ce565b005b610093610168565b6040516100a091906103b5565b60405180910390f35b6100c360048036038101906100be91906103fc565b610192565b005b60008054905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461015e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161015590610486565b60405180910390fd5b8060008190555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021990610486565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000819050919050565b6102f5816102e2565b82525050565b600060208201905061031060008301846102ec565b92915050565b600080fd5b610324816102e2565b811461032f57600080fd5b50565b6000813590506103418161031b565b92915050565b60006020828403121561035d5761035c610316565b5b600061036b84828501610332565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061039f82610374565b9050919050565b6103af81610394565b82525050565b60006020820190506103ca60008301846103a6565b92915050565b6103d981610394565b81146103e457600080fd5b50565b6000813590506103f6816103d0565b92915050565b60006020828403121561041257610411610316565b5b6000610420848285016103e7565b91505092915050565b600082825260208201905092915050565b7f43616c6c6572206973206e6f74206f776e657200000000000000000000000000600082015250565b6000610470601383610429565b915061047b8261043a565b602082019050919050565b6000602082019050818103600083015261049f81610463565b905091905056fea26469706673582212201fcfa803d5c15c78e1e356cc1946c1bf14f9809acd349df1fd41362fa1a9e4d564736f6c63430008120033', + // to: null, + // value: '0x0', + // yParity: '0x0' + }); + } + }); +}); diff --git a/packages/web3/test/e2e/get_uncle.test.ts b/packages/web3/test/e2e/get_uncle.test.ts new file mode 100644 index 00000000000..75da6e73937 --- /dev/null +++ b/packages/web3/test/e2e/get_uncle.test.ts @@ -0,0 +1,71 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Numbers } from 'web3-types'; + +import Web3 from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../shared_fixtures/utils'; +import { mainnetBlockData } from './fixtures/mainnet'; +import { sepoliaBlockData } from './fixtures/sepolia'; + +describe(`${getSystemTestBackend()} tests - getUncle`, () => { + const provider = getSystemE2ETestProvider(); + const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + block: + | 'earliest' + | 'latest' + | 'pending' + | 'finalized' + | 'safe' + | 'blockHash' + | 'blockNumber'; + uncleIndex: Numbers; + }>({ + block: [ + 'earliest', + 'latest', + 'pending', + 'safe', + 'finalized', + 'blockHash', + 'blockNumber', + ], + uncleIndex: ['0x1', '1', 1, BigInt(1)], + }), + )('getUncle', async ({ block, uncleIndex }) => { + // TODO Returns Position Index is incorrect RPC error + // when the client is Nethermind, but not Geth + const result = await web3.eth.getUncle(blockData[block], uncleIndex); + + // eslint-disable-next-line no-null/no-null + expect(result).toBeNull(); + }); +}); diff --git a/packages/web3/test/e2e/is_listening.test.ts b/packages/web3/test/e2e/is_listening.test.ts new file mode 100644 index 00000000000..0686291f327 --- /dev/null +++ b/packages/web3/test/e2e/is_listening.test.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3 from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; + +describe(`${getSystemTestBackend()} tests - isListening`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it('should get the listening status for the connected node', async () => { + const result = await web3.eth.net.isListening(); + expect(typeof result).toBe('boolean'); + }); +}); diff --git a/packages/web3/test/e2e/is_syncing.test.ts b/packages/web3/test/e2e/is_syncing.test.ts new file mode 100644 index 00000000000..c58dc8c1c47 --- /dev/null +++ b/packages/web3/test/e2e/is_syncing.test.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3 from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; + +describe(`${getSystemTestBackend()} tests - isSyncing`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it('should get the syncing status for the connected node', async () => { + const result = await web3.eth.isSyncing(); + expect(typeof result).toBe('boolean'); + }); +}); diff --git a/packages/web3/test/e2e/jest.config.js b/packages/web3/test/e2e/jest.config.js new file mode 100644 index 00000000000..cc3c69f72ff --- /dev/null +++ b/packages/web3/test/e2e/jest.config.js @@ -0,0 +1,36 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/e2e/setup.js'], + testMatch: [ + `/test/e2e/*.(spec|test).(js|ts)`, + `/test/e2e/${process.env.WEB3_SYSTEM_TEST_BACKEND}/**/*.(spec|test).(js|ts)`, + ], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: `.coverage/e2e/${process.env.WEB3_SYSTEM_TEST_BACKEND}`, +}; diff --git a/packages/web3/test/e2e/mainnet/call.test.ts b/packages/web3/test/e2e/mainnet/call.test.ts new file mode 100644 index 00000000000..45778deb761 --- /dev/null +++ b/packages/web3/test/e2e/mainnet/call.test.ts @@ -0,0 +1,71 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { bytesToHex } from 'web3-utils'; +import Web3, { FMT_BYTES, FMT_NUMBER } from '../../../src'; +import { + closeOpenConnection, + getSystemTestBackend, +} from '../../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../../shared_fixtures/utils'; +import { getSystemE2ETestProvider, getE2ETestContractAddress } from '../e2e_utils'; + +describe(`${getSystemTestBackend()} tests - call`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + format: string; + }>({ + format: Object.values(FMT_BYTES), + }), + )('should call retrieve method from deployed contract', async ({ format }) => { + const result = await web3.eth.call( + { + to: getE2ETestContractAddress(), + input: '0x18160ddd', + }, + undefined, + { + number: FMT_NUMBER.HEX, + bytes: format as FMT_BYTES, + }, + ); + + switch (format) { + case 'BYTES_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toMatch(/0[xX][0-9a-fA-F]{64}/i); + break; + case 'BYTES_UINT8ARRAY': + // eslint-disable-next-line jest/no-conditional-expect + expect(bytesToHex(result)).toMatch(/0[xX][0-9a-fA-F]{64}/i); + break; + default: + throw new Error('Unhandled format'); + } + }); +}); diff --git a/packages/web3/test/e2e/mainnet/get_code.test.ts b/packages/web3/test/e2e/mainnet/get_code.test.ts new file mode 100644 index 00000000000..0bcb6026510 --- /dev/null +++ b/packages/web3/test/e2e/mainnet/get_code.test.ts @@ -0,0 +1,83 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { hexToBytes } from 'web3-utils'; + +import Web3, { FMT_BYTES, FMT_NUMBER } from '../../../src'; +import { + closeOpenConnection, + getSystemTestBackend, +} from '../../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../../shared_fixtures/utils'; +import { getSystemE2ETestProvider, getE2ETestContractAddress } from '../e2e_utils'; +import { mainnetCode } from '../fixtures/mainnet'; + +describe(`${getSystemTestBackend()} tests - getCode`, () => { + const provider = getSystemE2ETestProvider(); + const blockData: { + latest: 'latest'; + pending: 'pending'; + finalized: 'finalized'; + safe: 'safe'; + blockNumber: number; + blockHash: string; + } = { + latest: 'latest', + pending: 'pending', + finalized: 'finalized', + safe: 'safe', + blockNumber: 17029884, + blockHash: '0x2850e4a813762b2de589fa5268eacb92572defaf9520608deb129699e504cab2', + }; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + block: 'latest' | 'pending' | 'finalized' | 'safe' | 'blockHash' | 'blockNumber'; + format: string; + }>({ + block: ['latest', 'pending', 'safe', 'finalized', 'blockHash', 'blockNumber'], + format: Object.values(FMT_BYTES), + }), + )('should getCode for deployed contract', async ({ block, format }) => { + const result = await web3.eth.getCode(getE2ETestContractAddress(), blockData[block], { + number: FMT_NUMBER.HEX, + bytes: format as FMT_BYTES, + }); + + switch (format) { + case 'BYTES_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(mainnetCode); + break; + case 'BYTES_UINT8ARRAY': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toStrictEqual(new Uint8Array(hexToBytes(mainnetCode))); + break; + default: + throw new Error('Unhandled format'); + } + }); +}); diff --git a/packages/web3/test/e2e/mainnet/get_past_logs.test.ts b/packages/web3/test/e2e/mainnet/get_past_logs.test.ts new file mode 100644 index 00000000000..33fdaef06ee --- /dev/null +++ b/packages/web3/test/e2e/mainnet/get_past_logs.test.ts @@ -0,0 +1,160 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +/* eslint-disable @typescript-eslint/no-unsafe-call */ +import { hexToBytes, numberToHex, hexToNumber } from 'web3-utils'; +import { Log } from 'web3-types'; +import Web3, { FMT_BYTES, FMT_NUMBER, LogAPI } from '../../../src'; +import { + closeOpenConnection, + getSystemTestBackend, +} from '../../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../../shared_fixtures/utils'; +import { getSystemE2ETestProvider, getE2ETestContractAddress } from '../e2e_utils'; + +describe(`${getSystemTestBackend()} tests - getPastLogs`, () => { + const provider = getSystemE2ETestProvider(); + const expectedLog: LogAPI = { + address: getE2ETestContractAddress(), + blockHash: '0x89515ecc5eda6f038ce612fd7a285dc81ad0fc3cec1a1c2d2166565ac99d48db', + blockNumber: '0x103dc29', + data: '0x0000000000000000000000000000000000000000000000000000000146ee7540', + logIndex: '0x63', + removed: false, + topics: [ + '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', + '0x000000000000000000000000b840fe2b3fd8f75275240c671d6ec659e4c9a500', + '0x000000000000000000000000780a2d8ed56eede2f9d9b4dfd6fd3101ac20cab8', + ], + transactionHash: '0x4284538004b3a8478835861d4354a33dba37a6daedcb692523478e5f9e7d8520', + transactionIndex: '0xc', + }; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + byteFormat: string; + numberFormat: string; + }>({ + byteFormat: Object.values(FMT_BYTES), + numberFormat: Object.values(FMT_NUMBER), + }), + )('should getPastLogs for deployed contract', async ({ byteFormat, numberFormat }) => { + const result = ( + await web3.eth.getPastLogs( + { + fromBlock: '0x103dc29', + toBlock: '0x103dc30', + address: getE2ETestContractAddress(), + }, + { + number: numberFormat as FMT_NUMBER, + bytes: byteFormat as FMT_BYTES, + }, + ) + )[0] as unknown as Log; + + switch (numberFormat) { + case 'NUMBER_STR': + // eslint-disable-next-line jest/no-conditional-expect + expect(result.blockNumber).toBe( + hexToNumber(expectedLog.blockNumber as string).toString(), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.logIndex).toBe( + hexToNumber(expectedLog.logIndex as string).toString(), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.transactionIndex).toBe( + hexToNumber(expectedLog.transactionIndex as string).toString(), + ); + break; + case 'NUMBER_BIGINT': + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.blockNumber).toBe(BigInt(expectedLog.blockNumber as string)); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.logIndex).toBe(BigInt(expectedLog.logIndex as string)); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.transactionIndex).toBe( + BigInt(expectedLog.transactionIndex as string), + ); + break; + case 'NUMBER_NUMBER': + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.blockNumber).toBe(hexToNumber(expectedLog.blockNumber as string)); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.logIndex).toBe(hexToNumber(expectedLog.logIndex as string)); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.transactionIndex).toBe( + hexToNumber(expectedLog.transactionIndex as string), + ); + break; + case 'NUMBER_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.blockNumber).toBe(numberToHex(expectedLog.blockNumber as string)); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.logIndex).toBe(numberToHex(expectedLog.logIndex as string)); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.transactionIndex).toBe( + numberToHex(expectedLog.transactionIndex as string), + ); + break; + default: + throw new Error('Unhandled format'); + } + switch (byteFormat) { + case 'BYTES_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(result.blockHash).toBe(expectedLog.blockHash as string); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.data).toBe(expectedLog.data as string); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.transactionHash).toBe(expectedLog.transactionHash as string); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.topics).toStrictEqual(expectedLog.topics); + break; + case 'BYTES_UINT8ARRAY': + // eslint-disable-next-line jest/no-conditional-expect + expect(result.blockHash).toStrictEqual( + new Uint8Array(hexToBytes(expectedLog.blockHash as string)), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.data).toStrictEqual( + new Uint8Array(hexToBytes(expectedLog.data as string)), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.transactionHash).toStrictEqual( + new Uint8Array(hexToBytes(expectedLog.transactionHash as string)), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.topics).toStrictEqual( + expectedLog.topics?.map((topic: string) => new Uint8Array(hexToBytes(topic))), + ); + break; + default: + throw new Error('Unhandled format'); + } + }); +}); diff --git a/packages/web3/test/e2e/mainnet/get_storage_at.test.ts b/packages/web3/test/e2e/mainnet/get_storage_at.test.ts new file mode 100644 index 00000000000..05512d99ec4 --- /dev/null +++ b/packages/web3/test/e2e/mainnet/get_storage_at.test.ts @@ -0,0 +1,82 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3, { Numbers } from '../../../src'; +import { getSystemE2ETestProvider, getE2ETestContractAddress } from '../e2e_utils'; +import { + closeOpenConnection, + getSystemTestBackend, +} from '../../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../../shared_fixtures/utils'; +import { mainnetBlockData } from '../fixtures/mainnet'; + +describe(`${getSystemTestBackend()} tests - getStorageAt`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + storageSlot: Numbers; + block: + | 'earliest' + | 'latest' + | 'pending' + | 'finalized' + | 'safe' + | 'blockHash' + | 'blockNumber'; + }>({ + storageSlot: ['0x1', '1', 1, BigInt(1)], + block: [ + 'earliest', + 'latest', + 'pending', + 'safe', + 'finalized', + 'blockHash', + 'blockNumber', + ], + }), + )('getStorageAt', async ({ storageSlot, block }) => { + const result = await web3.eth.getStorageAt( + getE2ETestContractAddress(), + storageSlot, + mainnetBlockData[block], + ); + + if (mainnetBlockData[block] === 'earliest') { + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toMatch(/0[xX][0-9a-fA-F]{64}/i); + } else if (block === 'blockHash' || block === 'blockNumber') { + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe( + '0x000000000000000000000000000000000000000000000000007d5a864f06b2d5', + ); + } else { + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toMatch(/0[xX][0-9a-fA-F]{64}/i); + } + }); +}); diff --git a/packages/web3/test/e2e/mainnet/get_transaction.test.ts b/packages/web3/test/e2e/mainnet/get_transaction.test.ts new file mode 100644 index 00000000000..294ddb00219 --- /dev/null +++ b/packages/web3/test/e2e/mainnet/get_transaction.test.ts @@ -0,0 +1,88 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Bytes, TransactionInfo } from 'web3-types'; +import { bytesToUint8Array, hexToBytes } from 'web3-utils'; + +import Web3 from '../../../src'; +import { getSystemE2ETestProvider } from '../e2e_utils'; +import { + closeOpenConnection, + getSystemTestBackend, +} from '../../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../../shared_fixtures/utils'; + +describe(`${getSystemTestBackend()} tests - getTransaction`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + transactionHash: Bytes; + }>({ + transactionHash: [ + '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + bytesToUint8Array( + hexToBytes( + '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + ), + ), + new Uint8Array( + hexToBytes( + '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + ), + ), + ], + }), + )('getTransaction', async ({ transactionHash }) => { + const result = await web3.eth.getTransaction(transactionHash); + + expect(result).toMatchObject({ + hash: '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + nonce: BigInt(2264), + blockHash: '0xabc81c29235c7962f5a0420644761627bdc064a560c7d1842cdf9517f7d7984e', + blockNumber: BigInt(17030310), + transactionIndex: BigInt(91), + from: '0xd67da12dc33d9730d9341bbfa4f0b67d0688b28b', + gasPrice: BigInt(19330338402), + maxPriorityFeePerGas: BigInt(100000000), + maxFeePerGas: BigInt(26848942133), + gas: BigInt(300858), + input: '0x6d78f47a000000000000000000000000a6e265667e1e18c28f2b5dc529f775c5f0d56d4a000000000000000000000000000000000000000000000001a055690d9db80000000000000000000000000000d67da12dc33d9730d9341bbfa4f0b67d0688b28b', + chainId: BigInt(1), + type: BigInt('0x2'), + v: BigInt('0x0'), + s: '0x72ca073bc16b35b3191b35fd8fb0eebdd536675ecb8459b110fcad2890a98ec9', + r: '0x45496fc11c7bf9972cb732bdc579f5d9d01e4df276dd49626e75fc3b5f8b6ec4', + // TODO These values are included when fetching the transaction from + // Nethermind, but not Infura + // https://github.com/web3/web3.js/issues/5997 + // data: '0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a36104dc806100de6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80632e64cec1146100515780636057361d1461006f578063893d20e81461008b578063a6f9dae1146100a9575b600080fd5b6100596100c5565b60405161006691906102fb565b60405180910390f35b61008960048036038101906100849190610347565b6100ce565b005b610093610168565b6040516100a091906103b5565b60405180910390f35b6100c360048036038101906100be91906103fc565b610192565b005b60008054905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461015e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161015590610486565b60405180910390fd5b8060008190555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021990610486565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000819050919050565b6102f5816102e2565b82525050565b600060208201905061031060008301846102ec565b92915050565b600080fd5b610324816102e2565b811461032f57600080fd5b50565b6000813590506103418161031b565b92915050565b60006020828403121561035d5761035c610316565b5b600061036b84828501610332565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061039f82610374565b9050919050565b6103af81610394565b82525050565b60006020820190506103ca60008301846103a6565b92915050565b6103d981610394565b81146103e457600080fd5b50565b6000813590506103f6816103d0565b92915050565b60006020828403121561041257610411610316565b5b6000610420848285016103e7565b91505092915050565b600082825260208201905092915050565b7f43616c6c6572206973206e6f74206f776e657200000000000000000000000000600082015250565b6000610470601383610429565b915061047b8261043a565b602082019050919050565b6000602082019050818103600083015261049f81610463565b905091905056fea26469706673582212201fcfa803d5c15c78e1e356cc1946c1bf14f9809acd349df1fd41362fa1a9e4d564736f6c63430008120033', + // to: null, + // value: '0x0', + // yParity: '0x0' + }); + }); +}); diff --git a/packages/web3/test/e2e/mainnet/get_transaction_receipt.test.ts b/packages/web3/test/e2e/mainnet/get_transaction_receipt.test.ts new file mode 100644 index 00000000000..7c1ad00fcbb --- /dev/null +++ b/packages/web3/test/e2e/mainnet/get_transaction_receipt.test.ts @@ -0,0 +1,175 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Bytes } from 'web3-types'; +import { bytesToUint8Array, hexToBytes } from 'web3-utils'; + +import Web3 from '../../../src'; +import { getSystemE2ETestProvider, getE2ETestContractAddress } from '../e2e_utils'; +import { + closeOpenConnection, + getSystemTestBackend, +} from '../../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../../shared_fixtures/utils'; + +describe(`${getSystemTestBackend()} tests - getTransactionReceipt`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + transactionHash: Bytes; + }>({ + transactionHash: [ + '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + bytesToUint8Array( + hexToBytes( + '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + ), + ), + new Uint8Array( + hexToBytes( + '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + ), + ), + ], + }), + )('getTransactionReceipt', async ({ transactionHash }) => { + const result = await web3.eth.getTransactionReceipt(transactionHash); + + expect(result).toMatchObject({ + blockHash: '0xabc81c29235c7962f5a0420644761627bdc064a560c7d1842cdf9517f7d7984e', + blockNumber: BigInt(17030310), + // contractAddress: '0xedfd52255571b4a9a9d4445989e39f5c14ff0447', + cumulativeGasUsed: BigInt(9010200), + effectiveGasPrice: BigInt(19330338402), + from: '0xd67da12dc33d9730d9341bbfa4f0b67d0688b28b', + gasUsed: BigInt(245737), + logs: [ + { + address: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', + blockHash: '0xabc81c29235c7962f5a0420644761627bdc064a560c7d1842cdf9517f7d7984e', + blockNumber: BigInt(17030310), + data: '0x0000000000000000000000000000000000000000000000000000000000668442', + logIndex: BigInt(200), + removed: false, + topics: [ + '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', + '0x000000000000000000000000d67da12dc33d9730d9341bbfa4f0b67d0688b28b', + '0x000000000000000000000000a6e265667e1e18c28f2b5dc529f775c5f0d56d4a', + ], + transactionHash: + '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + transactionIndex: BigInt(91), + }, + { + address: getE2ETestContractAddress(), + blockHash: '0xabc81c29235c7962f5a0420644761627bdc064a560c7d1842cdf9517f7d7984e', + blockNumber: BigInt(17030310), + data: '0x0000000000000000000000000000000000000000000000000000000000015bb2', + logIndex: BigInt(201), + removed: false, + topics: [ + '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', + '0x000000000000000000000000d67da12dc33d9730d9341bbfa4f0b67d0688b28b', + '0x000000000000000000000000a6e265667e1e18c28f2b5dc529f775c5f0d56d4a', + ], + transactionHash: + '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + transactionIndex: BigInt(91), + }, + { + address: '0x5de8ab7e27f6e7a1fff3e5b337584aa43961beef', + blockHash: '0xabc81c29235c7962f5a0420644761627bdc064a560c7d1842cdf9517f7d7984e', + blockNumber: BigInt(17030310), + data: '0x00000000000000000000000000000000000000003fff92b9d57d1d7fca09d7dc', + logIndex: BigInt(202), + removed: false, + topics: [ + '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925', + '0x000000000000000000000000d67da12dc33d9730d9341bbfa4f0b67d0688b28b', + '0x00000000000000000000000069a592d2129415a4a1d1b1e309c17051b7f28d57', + ], + transactionHash: + '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + transactionIndex: BigInt(91), + }, + { + address: '0x5de8ab7e27f6e7a1fff3e5b337584aa43961beef', + blockHash: '0xabc81c29235c7962f5a0420644761627bdc064a560c7d1842cdf9517f7d7984e', + blockNumber: BigInt(17030310), + data: '0x000000000000000000000000000000000000000000006d462a82e28035f62824', + logIndex: BigInt(203), + removed: false, + topics: [ + '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', + '0x000000000000000000000000d67da12dc33d9730d9341bbfa4f0b67d0688b28b', + '0x000000000000000000000000a6e265667e1e18c28f2b5dc529f775c5f0d56d4a', + ], + transactionHash: + '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + transactionIndex: BigInt(91), + }, + { + address: '0xa6e265667e1e18c28f2b5dc529f775c5f0d56d4a', + blockHash: '0xabc81c29235c7962f5a0420644761627bdc064a560c7d1842cdf9517f7d7984e', + blockNumber: BigInt(17030310), + data: '0x000000000000000000000000000000000000000000000001a055690d9db80000', + logIndex: BigInt(204), + removed: false, + topics: [ + '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x000000000000000000000000d67da12dc33d9730d9341bbfa4f0b67d0688b28b', + ], + transactionHash: + '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + transactionIndex: BigInt(91), + }, + { + address: '0x69a592d2129415a4a1d1b1e309c17051b7f28d57', + blockHash: '0xabc81c29235c7962f5a0420644761627bdc064a560c7d1842cdf9517f7d7984e', + blockNumber: BigInt(17030310), + data: '0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a055690d9db8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + logIndex: BigInt(205), + removed: false, + topics: [ + '0x1abc43bc3dd8b6c8bb9bcf1a14a84f83981bf5335700ef07758efefcb03a8c75', + '0x000000000000000000000000a6e265667e1e18c28f2b5dc529f775c5f0d56d4a', + '0x000000000000000000000000d67da12dc33d9730d9341bbfa4f0b67d0688b28b', + '0x000000000000000000000000d67da12dc33d9730d9341bbfa4f0b67d0688b28b', + ], + transactionHash: + '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + transactionIndex: BigInt(91), + }, + ], + status: BigInt(1), + transactionHash: '0x9a968248400868beb931ed96ee37517275794ff44e8d968c29f0f3430a504594', + transactionIndex: BigInt(91), + type: BigInt(2), + }); + }); +}); diff --git a/packages/web3/test/e2e/sepolia/call.test.ts b/packages/web3/test/e2e/sepolia/call.test.ts new file mode 100644 index 00000000000..33a3f7db398 --- /dev/null +++ b/packages/web3/test/e2e/sepolia/call.test.ts @@ -0,0 +1,120 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { hexToBytes } from 'web3-utils'; + +import Web3, { FMT_BYTES, FMT_NUMBER } from '../../../src'; +import { + closeOpenConnection, + getSystemTestBackend, +} from '../../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../../shared_fixtures/utils'; +import { + getSystemE2ETestProvider, + getE2ETestAccountAddress, + getE2ETestContractAddress, +} from '../e2e_utils'; + +describe(`${getSystemTestBackend()} tests - call`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + format: string; + }>({ + format: Object.values(FMT_BYTES), + }), + )('should call retrieve method from deployed contract', async ({ format }) => { + const result = await web3.eth.call( + { + to: getE2ETestContractAddress(), + input: '0x2e64cec1', + }, + undefined, + { + number: FMT_NUMBER.HEX, + bytes: format as FMT_BYTES, + }, + ); + + switch (format) { + case 'BYTES_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe( + '0x0000000000000000000000000000000000000000000000000000000000000000', + ); + break; + case 'BYTES_UINT8ARRAY': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toStrictEqual( + new Uint8Array( + hexToBytes( + '0x0000000000000000000000000000000000000000000000000000000000000000', + ), + ), + ); + break; + default: + throw new Error('Unhandled format'); + } + }); + + it.each( + toAllVariants<{ + format: string; + }>({ + format: Object.values(FMT_BYTES), + }), + )('should call getOwner method from deployed contract', async ({ format }) => { + const expectedResult = `0x000000000000000000000000${getE2ETestAccountAddress() + .substring(2) + .toLowerCase()}`; + const result = await web3.eth.call( + { + to: getE2ETestContractAddress(), + input: '0x893d20e8', + }, + undefined, + { + number: FMT_NUMBER.HEX, + bytes: format as FMT_BYTES, + }, + ); + + switch (format) { + case 'BYTES_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(expectedResult); + break; + case 'BYTES_UINT8ARRAY': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toStrictEqual(new Uint8Array(hexToBytes(expectedResult))); + break; + default: + throw new Error('Unhandled format'); + } + }); +}); diff --git a/packages/web3/test/e2e/sepolia/contract.test.ts b/packages/web3/test/e2e/sepolia/contract.test.ts new file mode 100644 index 00000000000..cc1917a28c7 --- /dev/null +++ b/packages/web3/test/e2e/sepolia/contract.test.ts @@ -0,0 +1,161 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3 from '../../../src'; +import { + closeOpenConnection, + getSystemTestBackend, + itIf, +} from '../../shared_fixtures/system_tests_utils'; +import { GreeterAbi, GreeterBytecode } from '../../shared_fixtures/build/Greeter'; +import { + getAllowedSendTransaction, + getE2ETestAccountAddress, + getE2ETestAccountPrivateKey, + getSystemE2ETestProvider, +} from '../e2e_utils'; + +describe(`${getSystemTestBackend()} tests - contract`, () => { + const provider = getSystemE2ETestProvider(); + const initialGreet = 'Soylent green is people'; + + let web3: Web3; + let deployedContractAddress: string; + + beforeAll(() => { + if (getAllowedSendTransaction()) { + web3 = new Web3(provider); + web3.eth.accounts.wallet.add(getE2ETestAccountPrivateKey()); + } + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + itIf(getAllowedSendTransaction())('should deploy a contract', async () => { + const contract = new web3.eth.Contract(GreeterAbi, undefined, { + provider: getSystemE2ETestProvider(), + }).deploy({ + data: GreeterBytecode, + arguments: [initialGreet], + }); + const signedTransaction = await web3.eth.accounts.signTransaction( + { + from: getE2ETestAccountAddress(), + input: contract.encodeABI(), + gas: await contract.estimateGas(), + }, + getE2ETestAccountPrivateKey(), + ); + const result = await web3.eth.sendSignedTransaction(signedTransaction.rawTransaction); + deployedContractAddress = result.contractAddress as string; + + // TODO This should work, but throws a type error + // for root not being included in expected object. + // However, root is not apart of result object. + // expect(result).toMatchObject({ + // eslint-disable-next-line jest/no-standalone-expect + expect(result).toMatchObject({ + // root: expect.any(String), + blockHash: expect.any(String), + blockNumber: expect.any(BigInt), + cumulativeGasUsed: expect.any(BigInt), + effectiveGasPrice: expect.any(BigInt), + from: getE2ETestAccountAddress().toLowerCase(), + contractAddress: expect.any(String), + gasUsed: expect.any(BigInt), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + status: BigInt(1), + transactionHash: expect.any(String), + transactionIndex: expect.any(BigInt), + type: BigInt(2), + }); + }); + + itIf(getAllowedSendTransaction())('should call setGreeting on deployed contract', async () => { + const expectedGreet = 'Where we’re going, we don’t need roads'; + const contract = new web3.eth.Contract(GreeterAbi, deployedContractAddress, { + provider: getSystemE2ETestProvider(), + }); + + let greeting = await contract.methods.greet().call(); + // eslint-disable-next-line jest/no-standalone-expect + expect(greeting).toBe(initialGreet); + + const signedTransaction = await web3.eth.accounts.signTransaction( + { + from: getE2ETestAccountAddress(), + to: deployedContractAddress, + input: contract.methods.setGreeting(expectedGreet).encodeABI(), + gas: await contract.methods.setGreeting(expectedGreet).estimateGas(), + }, + getE2ETestAccountPrivateKey(), + ); + + const result = await web3.eth.sendSignedTransaction(signedTransaction.rawTransaction); + + greeting = await contract.methods.greet().call(); + // eslint-disable-next-line jest/no-standalone-expect + expect(greeting).toBe(expectedGreet); + + // TODO This should work, but throws a type error + // for root not being included in expected object. + // However, root is not apart of result object. + // expect(result).toMatchObject({ + // eslint-disable-next-line jest/no-standalone-expect + expect(result).toMatchObject({ + // root: expect.any(String), + blockHash: expect.any(String), + blockNumber: expect.any(BigInt), + cumulativeGasUsed: expect.any(BigInt), + effectiveGasPrice: expect.any(BigInt), + from: getE2ETestAccountAddress().toLowerCase(), + gasUsed: expect.any(BigInt), + logs: [ + { + address: deployedContractAddress, + blockHash: expect.any(String), + blockNumber: expect.any(BigInt), + data: '0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000017536f796c656e7420677265656e2069732070656f706c65000000000000000000000000000000000000000000000000000000000000000000000000000000002a5768657265207765e28099726520676f696e672c20776520646f6ee2809974206e65656420726f61647300000000000000000000000000000000000000000000', + logIndex: expect.any(BigInt), + removed: false, + topics: ['0x0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b75'], + transactionHash: expect.any(String), + transactionIndex: expect.any(BigInt), + }, + { + address: deployedContractAddress, + blockHash: expect.any(String), + blockNumber: expect.any(BigInt), + data: '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a5768657265207765e28099726520676f696e672c20776520646f6ee2809974206e65656420726f61647300000000000000000000000000000000000000000000', + logIndex: expect.any(BigInt), + removed: false, + topics: ['0x7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e'], + transactionHash: expect.any(String), + transactionIndex: expect.any(BigInt), + }, + ], + logsBloom: expect.any(String), + status: BigInt(1), + transactionHash: expect.any(String), + transactionIndex: expect.any(BigInt), + type: BigInt(2), + }); + }); +}); diff --git a/packages/web3/test/e2e/sepolia/get_code.test.ts b/packages/web3/test/e2e/sepolia/get_code.test.ts new file mode 100644 index 00000000000..43373feb180 --- /dev/null +++ b/packages/web3/test/e2e/sepolia/get_code.test.ts @@ -0,0 +1,74 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { hexToBytes } from 'web3-utils'; + +import Web3, { FMT_BYTES, FMT_NUMBER } from '../../../src'; +import { + closeOpenConnection, + getSystemTestBackend, +} from '../../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../../shared_fixtures/utils'; +import { getSystemE2ETestProvider, getE2ETestContractAddress } from '../e2e_utils'; +import { sepoliaBlockData } from '../fixtures/sepolia'; + +describe(`${getSystemTestBackend()} tests - getCode`, () => { + const provider = getSystemE2ETestProvider(); + const expectedCode = + '0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80632e64cec1146100515780636057361d1461006f578063893d20e81461008b578063a6f9dae1146100a9575b600080fd5b6100596100c5565b60405161006691906102fb565b60405180910390f35b61008960048036038101906100849190610347565b6100ce565b005b610093610168565b6040516100a091906103b5565b60405180910390f35b6100c360048036038101906100be91906103fc565b610192565b005b60008054905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461015e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161015590610486565b60405180910390fd5b8060008190555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021990610486565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000819050919050565b6102f5816102e2565b82525050565b600060208201905061031060008301846102ec565b92915050565b600080fd5b610324816102e2565b811461032f57600080fd5b50565b6000813590506103418161031b565b92915050565b60006020828403121561035d5761035c610316565b5b600061036b84828501610332565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061039f82610374565b9050919050565b6103af81610394565b82525050565b60006020820190506103ca60008301846103a6565b92915050565b6103d981610394565b81146103e457600080fd5b50565b6000813590506103f6816103d0565b92915050565b60006020828403121561041257610411610316565b5b6000610420848285016103e7565b91505092915050565b600082825260208201905092915050565b7f43616c6c6572206973206e6f74206f776e657200000000000000000000000000600082015250565b6000610470601383610429565b915061047b8261043a565b602082019050919050565b6000602082019050818103600083015261049f81610463565b905091905056fea26469706673582212201fcfa803d5c15c78e1e356cc1946c1bf14f9809acd349df1fd41362fa1a9e4d564736f6c63430008120033'; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + block: 'latest' | 'pending' | 'finalized' | 'safe' | 'blockHash' | 'blockNumber'; + format: string; + }>({ + block: ['latest', 'pending', 'safe', 'finalized', 'blockHash', 'blockNumber'], + format: Object.values(FMT_BYTES), + }), + )('should getCode for deployed contract', async ({ block, format }) => { + const result = await web3.eth.getCode( + getE2ETestContractAddress(), + sepoliaBlockData[block], + { + number: FMT_NUMBER.HEX, + bytes: format as FMT_BYTES, + }, + ); + + switch (format) { + case 'BYTES_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe(expectedCode); + break; + case 'BYTES_UINT8ARRAY': + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toStrictEqual(new Uint8Array(hexToBytes(expectedCode))); + break; + default: + throw new Error('Unhandled format'); + } + }); +}); diff --git a/packages/web3/test/e2e/sepolia/get_past_logs.test.ts b/packages/web3/test/e2e/sepolia/get_past_logs.test.ts new file mode 100644 index 00000000000..b7ada0c6d09 --- /dev/null +++ b/packages/web3/test/e2e/sepolia/get_past_logs.test.ts @@ -0,0 +1,178 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +/* eslint-disable @typescript-eslint/no-unsafe-call */ +import { hexToBytes, numberToHex, hexToNumber } from 'web3-utils'; +import { Log } from 'web3-types'; +import Web3, { FMT_BYTES, FMT_NUMBER, LogAPI } from '../../../src'; +import { + closeOpenConnection, + getSystemTestBackend, +} from '../../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../../shared_fixtures/utils'; +import { getSystemE2ETestProvider, getE2ETestContractAddress } from '../e2e_utils'; + +describe(`${getSystemTestBackend()} tests - getPastLogs`, () => { + const provider = getSystemE2ETestProvider(); + const expectedLogs: LogAPI[] = [ + { + address: getE2ETestContractAddress(), + blockHash: '0xdb1cb1fc3867fa28e4ba2297fbb1e65b81a3212beb1b73cbcbfe40c4192ee948', + blockNumber: '0x314675', + data: '0x', + logIndex: '0x4', + removed: false, + topics: [ + '0x342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a735', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x000000000000000000000000a127c5e6a7e3600ac34a9a9928e52521677e7211', + ], + transactionHash: '0xe3d28c23ffcd8b94b8f2fd802b4c8dd17a5f19992660acd082ac229ab410b959', + transactionIndex: '0x8', + }, + ]; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + byteFormat: string; + numberFormat: string; + }>({ + byteFormat: Object.values(FMT_BYTES), + numberFormat: Object.values(FMT_NUMBER), + }), + )('should getPastLogs for deployed contract', async ({ byteFormat, numberFormat }) => { + const result = ( + await web3.eth.getPastLogs( + { + fromBlock: 'earliest', + toBlock: 'latest', + address: getE2ETestContractAddress(), + }, + { + number: numberFormat as FMT_NUMBER, + bytes: byteFormat as FMT_BYTES, + }, + ) + )[0] as unknown as Log; + if (typeof result !== 'string') { + switch (numberFormat) { + case 'NUMBER_STR': + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.blockNumber).toBe( + hexToNumber(numberToHex(expectedLogs[0].blockNumber as string)).toString(), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.logIndex).toStrictEqual( + hexToNumber(numberToHex(expectedLogs[0].logIndex as string)).toString(), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.transactionIndex).toStrictEqual( + hexToNumber( + numberToHex(expectedLogs[0].transactionIndex as string), + ).toString(), + ); + break; + case 'NUMBER_BIGINT': + // eslint-disable-next-line jest/no-conditional-expect + expect(result.blockNumber).toBe(BigInt(expectedLogs[0].blockNumber as string)); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.logIndex).toStrictEqual( + BigInt(expectedLogs[0].logIndex as string), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.transactionIndex).toStrictEqual( + BigInt(expectedLogs[0].transactionIndex as string), + ); + break; + case 'NUMBER_NUMBER': + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.blockNumber).toStrictEqual( + hexToNumber(numberToHex(expectedLogs[0].blockNumber as string)), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.logIndex).toStrictEqual( + hexToNumber(numberToHex(expectedLogs[0].logIndex as string)), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.transactionIndex).toStrictEqual( + hexToNumber(numberToHex(expectedLogs[0].transactionIndex as string)), + ); + break; + case 'NUMBER_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.blockNumber).toStrictEqual( + numberToHex(expectedLogs[0].blockNumber as string), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.logIndex).toStrictEqual( + numberToHex(expectedLogs[0].logIndex as string), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result?.transactionIndex).toStrictEqual( + numberToHex(expectedLogs[0].transactionIndex as string), + ); + break; + default: + throw new Error('Unhandled format'); + } + + switch (byteFormat) { + case 'BYTES_HEX': + // eslint-disable-next-line jest/no-conditional-expect + expect(result.blockHash).toBe(expectedLogs[0].blockHash as string); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.data).toBe(expectedLogs[0].data as string); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.transactionHash).toBe(expectedLogs[0].transactionHash as string); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.topics).toStrictEqual(expectedLogs[0].topics); + break; + case 'BYTES_UINT8ARRAY': + // eslint-disable-next-line jest/no-conditional-expect + expect(result.blockHash).toStrictEqual( + new Uint8Array(hexToBytes(expectedLogs[0].blockHash as string)), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.data).toStrictEqual( + new Uint8Array(hexToBytes(expectedLogs[0].data as string)), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.transactionHash).toStrictEqual( + new Uint8Array(hexToBytes(expectedLogs[0].transactionHash as string)), + ); + // eslint-disable-next-line jest/no-conditional-expect + expect(result.topics).toStrictEqual( + expectedLogs[0].topics?.map( + (topic: string) => new Uint8Array(hexToBytes(topic)), + ), + ); + break; + default: + throw new Error('Unhandled format'); + } + } + }); +}); diff --git a/packages/web3/test/e2e/sepolia/get_storage_at.test.ts b/packages/web3/test/e2e/sepolia/get_storage_at.test.ts new file mode 100644 index 00000000000..7702da89ffb --- /dev/null +++ b/packages/web3/test/e2e/sepolia/get_storage_at.test.ts @@ -0,0 +1,89 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3, { Numbers } from '../../../src'; +import { + getSystemE2ETestProvider, + getE2ETestAccountAddress, + getE2ETestContractAddress, +} from '../e2e_utils'; +import { + closeOpenConnection, + getSystemTestBackend, +} from '../../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../../shared_fixtures/utils'; +import { sepoliaBlockData } from '../fixtures/sepolia'; + +describe(`${getSystemTestBackend()} tests - getStorageAt`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + storageSlot: Numbers; + block: + | 'earliest' + | 'latest' + | 'pending' + | 'finalized' + | 'safe' + | 'blockHash' + | 'blockNumber'; + }>({ + storageSlot: ['0x1', '1', 1, BigInt(1)], + block: [ + 'earliest', + 'latest', + 'pending', + 'safe', + 'finalized', + 'blockHash', + 'blockNumber', + ], + }), + )('getStorageAt', async ({ storageSlot, block }) => { + const result = await web3.eth.getStorageAt( + getE2ETestContractAddress(), + storageSlot, + sepoliaBlockData[block], + ); + + if (sepoliaBlockData[block] === 'earliest') { + // Nethermind returns 0x while Geth returns 0x0000000000000000000000000000000000000000000000000000000000000000 + // eslint-disable-next-line jest/no-conditional-expect + expect( + result === '0x' || + result === '0x0000000000000000000000000000000000000000000000000000000000000000', + ).toBeTruthy(); + } else { + // eslint-disable-next-line jest/no-conditional-expect + expect(result).toBe( + `0x000000000000000000000000${getE2ETestAccountAddress() + .substring(2) + .toLowerCase()}`, + ); + } + }); +}); diff --git a/packages/web3/test/e2e/sepolia/get_transaction.test.ts b/packages/web3/test/e2e/sepolia/get_transaction.test.ts new file mode 100644 index 00000000000..4c52583919d --- /dev/null +++ b/packages/web3/test/e2e/sepolia/get_transaction.test.ts @@ -0,0 +1,86 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Bytes, TransactionInfo } from 'web3-types'; +import { bytesToUint8Array, hexToBytes } from 'web3-utils'; + +import Web3 from '../../../src'; +import { getSystemE2ETestProvider } from '../e2e_utils'; +import { + closeOpenConnection, + getSystemTestBackend, +} from '../../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../../shared_fixtures/utils'; + +describe(`${getSystemTestBackend()} tests - getTransaction`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + transactionHash: Bytes; + }>({ + transactionHash: [ + '0xe3d28c23ffcd8b94b8f2fd802b4c8dd17a5f19992660acd082ac229ab410b959', + bytesToUint8Array( + hexToBytes( + '0xe3d28c23ffcd8b94b8f2fd802b4c8dd17a5f19992660acd082ac229ab410b959', + ), + ), + new Uint8Array( + hexToBytes( + '0xe3d28c23ffcd8b94b8f2fd802b4c8dd17a5f19992660acd082ac229ab410b959', + ), + ), + ], + }), + )('getTransaction', async ({ transactionHash }) => { + const result = await web3.eth.getTransaction(transactionHash); + + expect(result).toMatchObject({ + hash: '0xe3d28c23ffcd8b94b8f2fd802b4c8dd17a5f19992660acd082ac229ab410b959', + nonce: BigInt('0x0'), + blockHash: '0xdb1cb1fc3867fa28e4ba2297fbb1e65b81a3212beb1b73cbcbfe40c4192ee948', + blockNumber: BigInt('0x314675'), + transactionIndex: BigInt('0x8'), + from: '0xa127c5e6a7e3600ac34a9a9928e52521677e7211', + gasPrice: BigInt('0x9502f908'), + maxPriorityFeePerGas: BigInt('0x9502f900'), + maxFeePerGas: BigInt('0x9502f910'), + gas: BigInt('0x54eca'), + input: '0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a36104dc806100de6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80632e64cec1146100515780636057361d1461006f578063893d20e81461008b578063a6f9dae1146100a9575b600080fd5b6100596100c5565b60405161006691906102fb565b60405180910390f35b61008960048036038101906100849190610347565b6100ce565b005b610093610168565b6040516100a091906103b5565b60405180910390f35b6100c360048036038101906100be91906103fc565b610192565b005b60008054905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461015e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161015590610486565b60405180910390fd5b8060008190555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021990610486565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000819050919050565b6102f5816102e2565b82525050565b600060208201905061031060008301846102ec565b92915050565b600080fd5b610324816102e2565b811461032f57600080fd5b50565b6000813590506103418161031b565b92915050565b60006020828403121561035d5761035c610316565b5b600061036b84828501610332565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061039f82610374565b9050919050565b6103af81610394565b82525050565b60006020820190506103ca60008301846103a6565b92915050565b6103d981610394565b81146103e457600080fd5b50565b6000813590506103f6816103d0565b92915050565b60006020828403121561041257610411610316565b5b6000610420848285016103e7565b91505092915050565b600082825260208201905092915050565b7f43616c6c6572206973206e6f74206f776e657200000000000000000000000000600082015250565b6000610470601383610429565b915061047b8261043a565b602082019050919050565b6000602082019050818103600083015261049f81610463565b905091905056fea26469706673582212201fcfa803d5c15c78e1e356cc1946c1bf14f9809acd349df1fd41362fa1a9e4d564736f6c63430008120033', + chainId: BigInt('0xaa36a7'), + type: BigInt('0x2'), + v: BigInt('0x0'), + s: '0x58f3924a7c468ab3df1a46ecef93910b4c05a13c3c3a9f4bf87b11f912b2748a', + r: '0x7fcc0285117b5613d0766b0bcd6cab69538bc0991b2bc4ddebbcc3cb5b4d8fb0', + // TODO These values are included when fetching the transaction from + // Nethermind, but not Infura + // to: null, + // value: '0x0', + // yParity: '0x0' + }); + }); +}); diff --git a/packages/web3/test/e2e/sepolia/get_transaction_receipt.test.ts b/packages/web3/test/e2e/sepolia/get_transaction_receipt.test.ts new file mode 100644 index 00000000000..063be95cb21 --- /dev/null +++ b/packages/web3/test/e2e/sepolia/get_transaction_receipt.test.ts @@ -0,0 +1,96 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Bytes } from 'web3-types'; +import { bytesToUint8Array, hexToBytes } from 'web3-utils'; + +import Web3 from '../../../src'; +import { getSystemE2ETestProvider, getE2ETestContractAddress } from '../e2e_utils'; +import { + closeOpenConnection, + getSystemTestBackend, +} from '../../shared_fixtures/system_tests_utils'; +import { toAllVariants } from '../../shared_fixtures/utils'; + +describe(`${getSystemTestBackend()} tests - getTransactionReceipt`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it.each( + toAllVariants<{ + transactionHash: Bytes; + }>({ + transactionHash: [ + '0xe3d28c23ffcd8b94b8f2fd802b4c8dd17a5f19992660acd082ac229ab410b959', + bytesToUint8Array( + hexToBytes( + '0xe3d28c23ffcd8b94b8f2fd802b4c8dd17a5f19992660acd082ac229ab410b959', + ), + ), + new Uint8Array( + hexToBytes( + '0xe3d28c23ffcd8b94b8f2fd802b4c8dd17a5f19992660acd082ac229ab410b959', + ), + ), + ], + }), + )('getTransactionReceipt', async ({ transactionHash }) => { + const result = await web3.eth.getTransactionReceipt(transactionHash); + + expect(result).toMatchObject({ + blockHash: '0xdb1cb1fc3867fa28e4ba2297fbb1e65b81a3212beb1b73cbcbfe40c4192ee948', + blockNumber: BigInt(3229301), + contractAddress: getE2ETestContractAddress(), + cumulativeGasUsed: BigInt(579732), + effectiveGasPrice: BigInt(2500000008), + from: '0xa127c5e6a7e3600ac34a9a9928e52521677e7211', + gasUsed: BigInt(347850), + logs: [ + { + address: getE2ETestContractAddress(), + blockHash: '0xdb1cb1fc3867fa28e4ba2297fbb1e65b81a3212beb1b73cbcbfe40c4192ee948', + blockNumber: BigInt(3229301), + data: '0x', + logIndex: BigInt(4), + removed: false, + topics: [ + '0x342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a735', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x000000000000000000000000a127c5e6a7e3600ac34a9a9928e52521677e7211', + ], + transactionHash: + '0xe3d28c23ffcd8b94b8f2fd802b4c8dd17a5f19992660acd082ac229ab410b959', + transactionIndex: BigInt(8), + }, + ], + logsBloom: + '0x00000000000000000000000000000000000000000400000001000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000060000000000040010000800000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000010000000000000000000000000000000', + status: BigInt(1), + transactionHash: '0xe3d28c23ffcd8b94b8f2fd802b4c8dd17a5f19992660acd082ac229ab410b959', + transactionIndex: BigInt(8), + type: BigInt(2), + }); + }); +}); diff --git a/packages/web3/test/e2e/sepolia/send_signed_transaction.test.ts b/packages/web3/test/e2e/sepolia/send_signed_transaction.test.ts new file mode 100644 index 00000000000..cab4be964c4 --- /dev/null +++ b/packages/web3/test/e2e/sepolia/send_signed_transaction.test.ts @@ -0,0 +1,164 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3, { Transaction } from '../../../src'; +import { + closeOpenConnection, + getSystemTestBackend, + itIf, +} from '../../shared_fixtures/system_tests_utils'; +import { + getAllowedSendTransaction, + getE2ETestAccountAddress, + getE2ETestAccountPrivateKey, + getSystemE2ETestProvider, +} from '../e2e_utils'; + +describe(`${getSystemTestBackend()} tests - sendSignedTransaction`, () => { + const provider = getSystemE2ETestProvider(); + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + itIf(getAllowedSendTransaction())( + 'should send a simple value transfer - type 0x0', + async () => { + const transaction: Transaction = { + from: getE2ETestAccountAddress(), + to: getE2ETestAccountAddress(), + value: 1, + gas: 21000, + type: 0, + }; + const signedTransaction = await web3.eth.accounts.signTransaction( + transaction, + getE2ETestAccountPrivateKey(), + ); + const result = await web3.eth.sendSignedTransaction(signedTransaction.rawTransaction); + + // TODO This should work, but throws a type error + // for root not being included in expected object. + // However, root is not apart of result object. + // expect(result).toMatchObject({ + // eslint-disable-next-line jest/no-standalone-expect + expect(result).toMatchObject({ + // root: expect.any(String), + blockHash: expect.any(String), + blockNumber: expect.any(BigInt), + cumulativeGasUsed: expect.any(BigInt), + effectiveGasPrice: expect.any(BigInt), + from: getE2ETestAccountAddress().toLowerCase(), + gasUsed: BigInt(21000), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + status: BigInt(1), + to: getE2ETestAccountAddress().toLowerCase(), + transactionHash: expect.any(String), + transactionIndex: expect.any(BigInt), + type: BigInt(0), + }); + }, + ); + + itIf(getAllowedSendTransaction())( + 'should send a simple value transfer - type 0x1', + async () => { + const transaction: Transaction = { + from: getE2ETestAccountAddress(), + to: getE2ETestAccountAddress(), + value: 1, + gas: 21000, + type: 1, + }; + const signedTransaction = await web3.eth.accounts.signTransaction( + transaction, + getE2ETestAccountPrivateKey(), + ); + const result = await web3.eth.sendSignedTransaction(signedTransaction.rawTransaction); + + // TODO This should work, but throws a type error + // for root not being included in expected object. + // However, root is not apart of result object. + // expect(result).toMatchObject({ + // eslint-disable-next-line jest/no-standalone-expect + expect(result).toMatchObject({ + // root: expect.any(String), + blockHash: expect.any(String), + blockNumber: expect.any(BigInt), + cumulativeGasUsed: expect.any(BigInt), + effectiveGasPrice: expect.any(BigInt), + from: getE2ETestAccountAddress().toLowerCase(), + gasUsed: BigInt(21000), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + status: BigInt(1), + to: getE2ETestAccountAddress().toLowerCase(), + transactionHash: expect.any(String), + transactionIndex: expect.any(BigInt), + type: BigInt(1), + }); + }, + ); + + itIf(getAllowedSendTransaction())( + 'should send a simple value transfer - type 0x2', + async () => { + const transaction: Transaction = { + from: getE2ETestAccountAddress(), + to: getE2ETestAccountAddress(), + value: 1, + gas: 21000, + }; + const signedTransaction = await web3.eth.accounts.signTransaction( + transaction, + getE2ETestAccountPrivateKey(), + ); + const result = await web3.eth.sendSignedTransaction(signedTransaction.rawTransaction); + + // TODO This should work, but throws a type error + // for root not being included in expected object. + // However, root is not apart of result object. + // expect(result).toMatchObject({ + // eslint-disable-next-line jest/no-standalone-expect + expect(result).toMatchObject({ + // root: expect.any(String), + blockHash: expect.any(String), + blockNumber: expect.any(BigInt), + cumulativeGasUsed: expect.any(BigInt), + effectiveGasPrice: expect.any(BigInt), + from: getE2ETestAccountAddress().toLowerCase(), + gasUsed: BigInt(21000), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + status: BigInt(1), + to: getE2ETestAccountAddress().toLowerCase(), + transactionHash: expect.any(String), + transactionIndex: expect.any(BigInt), + type: BigInt(2), + }); + }, + ); +}); diff --git a/packages/web3/test/e2e/setup.js b/packages/web3/test/e2e/setup.js new file mode 100644 index 00000000000..fddbec59a1e --- /dev/null +++ b/packages/web3/test/e2e/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 30000; // Sometimes `in3` takes long time because of its decentralized nature. + +jest.setTimeout(jestTimeout); diff --git a/packages/web3/test/e2e/web3_extend.test.ts b/packages/web3/test/e2e/web3_extend.test.ts new file mode 100644 index 00000000000..36e52b0c35c --- /dev/null +++ b/packages/web3/test/e2e/web3_extend.test.ts @@ -0,0 +1,51 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { isNumber } from 'web3-validator'; + +import Web3 from '../../src'; +import { getSystemE2ETestProvider } from './e2e_utils'; +import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; + +declare module 'web3' { + interface Web3Context { + L2Module: { + getL2BlockInfo(): Promise; + }; + } +} + +describe(`${getSystemTestBackend()} tests - Web3 extend`, () => { + it('Web3 extend test - getL2BlockInfo', async () => { + const provider = getSystemE2ETestProvider(); + const web3 = new Web3(provider); + + web3.extend({ + property: 'L2Module', + methods: [ + { + name: 'getL2BlockInfo', + call: 'eth_blockNumber', + }, + ], + }); + + const result = await web3.L2Module.getL2BlockInfo(); + expect(isNumber(result)).toBeTruthy(); + + await closeOpenConnection(web3); + }); +}); diff --git a/packages/web3/test/esm_black_box/.eslintrc.mjs b/packages/web3/test/esm_black_box/.eslintrc.mjs new file mode 100644 index 00000000000..6867ddc2934 --- /dev/null +++ b/packages/web3/test/esm_black_box/.eslintrc.mjs @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3/test/esm_black_box/.yarnrc b/packages/web3/test/esm_black_box/.yarnrc new file mode 100644 index 00000000000..c408289a8d4 --- /dev/null +++ b/packages/web3/test/esm_black_box/.yarnrc @@ -0,0 +1 @@ +registry "http://localhost:4873" diff --git a/packages/web3/test/esm_black_box/jest.config.js b/packages/web3/test/esm_black_box/jest.config.js new file mode 100644 index 00000000000..d01db385b4b --- /dev/null +++ b/packages/web3/test/esm_black_box/jest.config.js @@ -0,0 +1,11 @@ +/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +export default { + globals: { + 'ts-jest': { + tsconfig: '../config/tsconfig.esm.json', + }, + }, + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, +}; diff --git a/packages/web3/test/esm_black_box/package.json b/packages/web3/test/esm_black_box/package.json new file mode 100644 index 00000000000..67c4cb696f5 --- /dev/null +++ b/packages/web3/test/esm_black_box/package.json @@ -0,0 +1,26 @@ +{ + "name": "web3_black_box_esm_tests", + "version": "1.0.0", + "main": "index.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "type": "module", + "scripts": { + "test:ganache:http": "WEB3_SYSTEM_TEST_BACKEND=ganache WEB3_SYSTEM_TEST_PROVIDER=http://localhost:8545 jest", + "test:ganache:ws": "WEB3_SYSTEM_TEST_BACKEND=ganache WEB3_SYSTEM_TEST_PROVIDER=ws://localhost:8545 jest --forceExit", + "test:geth:http": "WEB3_SYSTEM_TEST_BACKEND=geth WEB3_SYSTEM_TEST_PROVIDER=http://localhost:8545 jest", + "test:geth:ws": "WEB3_SYSTEM_TEST_BACKEND=geth WEB3_SYSTEM_TEST_PROVIDER=ws://localhost:8545 jest --forceExit", + "test:infura:http": "WEB3_SYSTEM_TEST_BACKEND=infura jest", + "test:infura:ws": "WEB3_SYSTEM_TEST_BACKEND=infura jest --forceExit" + }, + "dependencies": { + "web3": "5.0.0" + }, + "devDependencies": { + "jest": "^28.1.3", + "ts-jest": "^28.0.7", + "web3-eth": "5.0.0", + "web3-eth-contract": "5.0.0", + "web3-validator": "5.0.0" + } +} diff --git a/packages/web3/test/esm_black_box/test/batchRequest.test.ts b/packages/web3/test/esm_black_box/test/batchRequest.test.ts new file mode 100644 index 00000000000..857a55410a5 --- /dev/null +++ b/packages/web3/test/esm_black_box/test/batchRequest.test.ts @@ -0,0 +1,66 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +/* eslint-disable import/no-relative-packages */ +import Web3 from 'web3'; + +import { + closeOpenConnection, + isWs, + getSystemTestProvider, +} from '../../shared_fixtures/system_tests_utils'; + +describe('ESM - Black Box Unit Tests - web3.BatchRequest', () => { + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(getSystemTestProvider()); + }); + + afterAll(async () => { + if (isWs) await closeOpenConnection(web3); + }); + + it('should make a batch request', async () => { + const request1 = { + id: 42, + method: 'eth_getBalance', + params: ['0x4242000000000000000000000000000000000000', 'latest'], + }; + const request2 = { + id: 24, + method: 'eth_getBalance', + params: ['0x2424000000000000000000000000000000000000', 'latest'], + }; + + const batch = new web3.BatchRequest(); + const request1Promise = batch.add(request1); + const request2Promise = batch.add(request2); + + const executePromise = batch.execute(); + const response = await Promise.all([request1Promise, request2Promise, executePromise]); + + const expectedResponse = [ + '0x0', + '0x0', + [ + { jsonrpc: '2.0', id: 42, result: '0x0' }, + { jsonrpc: '2.0', id: 24, result: '0x0' }, + ], + ]; + expect(response).toStrictEqual(expectedResponse); + }); +}); diff --git a/packages/web3/test/esm_black_box/test/web3-eth-accounts/create.test.ts b/packages/web3/test/esm_black_box/test/web3-eth-accounts/create.test.ts new file mode 100644 index 00000000000..c5cb2f0260b --- /dev/null +++ b/packages/web3/test/esm_black_box/test/web3-eth-accounts/create.test.ts @@ -0,0 +1,61 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// TODO For some reason when running this test with a WebSocket provider +// the test takes a long time to run afterAll +import Web3 from 'web3'; +import { validator } from 'web3-validator'; +import { + closeOpenConnection, + getSystemTestProvider, + isWs, + // eslint-disable-next-line import/no-relative-packages +} from '../../../shared_fixtures/system_tests_utils'; + +jest.setTimeout(15000); + +// TODO Consider adding this to web3.eth.accounts package +const accountSchema = { + type: 'object', + required: ['address', 'privateKey'], + // TODO Should validation functions as well + // required: ['address', 'privateKey', 'signTransaction', 'sign', 'encrypt'], + properties: { + address: { type: 'string' }, + privateKey: { type: 'string' }, + }, +}; + +describe('Black Box Unit Tests - web3.eth.accounts.create', () => { + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(getSystemTestProvider()); + }); + + afterAll(async () => { + if (isWs) await closeOpenConnection(web3); + }); + + it('should create an account', () => { + const response = web3.eth.accounts.create(); + expect(response).toBeDefined(); + expect(response.signTransaction).toBeDefined(); + expect(response.sign).toBeDefined(); + expect(response.encrypt).toBeDefined(); + expect(validator.validateJSONSchema(accountSchema, response)).toBeUndefined(); + }); +}); diff --git a/packages/web3/test/esm_black_box/test/web3-eth-accounts/hashMessage.test.ts b/packages/web3/test/esm_black_box/test/web3-eth-accounts/hashMessage.test.ts new file mode 100644 index 00000000000..b1f0eb087de --- /dev/null +++ b/packages/web3/test/esm_black_box/test/web3-eth-accounts/hashMessage.test.ts @@ -0,0 +1,45 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// TODO For some reason when running this test with a WebSocket provider +// the test takes a long time to run afterAll +import Web3 from 'web3'; +import { + closeOpenConnection, + getSystemTestProvider, + isWs, + // eslint-disable-next-line import/no-relative-packages +} from '../../../shared_fixtures/system_tests_utils'; + +jest.setTimeout(15000); + +describe('ESM - Black Box Unit Tests - web3.eth.accounts.hashMessage', () => { + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(getSystemTestProvider()); + }); + + afterAll(async () => { + if (isWs) await closeOpenConnection(web3); + }); + + it('should hash provided message', () => { + expect(web3.eth.accounts.hashMessage('Hello World')).toBe( + '0xa1de988600a42c4b4ab089b619297c17d53cffae5d5120d82d8a92d0bb3b78f2', + ); + }); +}); diff --git a/packages/web3/test/esm_black_box/test/web3-eth-contract/erc20.test.ts b/packages/web3/test/esm_black_box/test/web3-eth-contract/erc20.test.ts new file mode 100644 index 00000000000..2139e4becba --- /dev/null +++ b/packages/web3/test/esm_black_box/test/web3-eth-contract/erc20.test.ts @@ -0,0 +1,95 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +/* eslint-disable import/no-relative-packages */ +import Web3 from 'web3'; +import Contract from 'web3-eth-contract'; + +import { + closeOpenConnection, + describeIf, + getSystemTestBackend, + isWs, + getSystemTestProvider, + createNewAccount, +} from '../../../shared_fixtures/system_tests_utils'; +import { ERC20TokenAbi, ERC20TokenBytecode } from '../../../shared_fixtures/contracts/ERC20Token'; + +describeIf(getSystemTestBackend() === 'infura')( + 'ESM - Black Box Unit Tests - web3.eth.Contract', + () => { + describe('Infura - ERC20', () => { + const mainNetUSDTAddress = '0xdAC17F958D2ee523a2206206994597C13D831ec7'; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(getSystemTestProvider()); + }); + + it('should get deployed contract info', async () => { + const contract = new web3.eth.Contract(ERC20TokenAbi, mainNetUSDTAddress); + + expect(await contract.methods.name().call()).toBe('Tether USD'); + expect(await contract.methods.symbol().call()).toBe('USDT'); + expect(await contract.methods.decimals().call()).toBe(BigInt(6)); + }); + }); + }, +); + +describeIf(getSystemTestBackend() === 'geth' || getSystemTestBackend() === 'ganache')( + 'Black Box Unit Tests - web3.eth.Contract', + () => { + describe('Geth || Ganache - ERC20', () => { + let account; + let web3: Web3; + let deployedContract: Contract; + + beforeAll(async () => { + account = await createNewAccount({ + unlock: true, + refill: true, + doNotImport: false, + }); + + web3 = new Web3(getSystemTestProvider()); + deployedContract = await new web3.eth.Contract(ERC20TokenAbi) + .deploy({ + data: ERC20TokenBytecode, + arguments: ['420'], + }) + .send({ from: account.address, gas: '10000000' }); + }); + + afterAll(async () => { + if (isWs) await closeOpenConnection(web3); + }); + + it('should get deployed contract info', async () => { + const contract = new web3.eth.Contract( + ERC20TokenAbi, + deployedContract.options.address, + ); + + expect(await contract.methods.name().call()).toBe('Gold'); + expect(await contract.methods.symbol().call()).toBe('GLD'); + expect(await contract.methods.decimals().call()).toBe(BigInt(18)); + expect(await contract.methods.totalSupply().call()).toBe(BigInt(420)); + }); + }); + }, +); diff --git a/packages/web3/test/esm_black_box/test/web3-eth/getBlock.test.ts b/packages/web3/test/esm_black_box/test/web3-eth/getBlock.test.ts new file mode 100644 index 00000000000..9b383028cfb --- /dev/null +++ b/packages/web3/test/esm_black_box/test/web3-eth/getBlock.test.ts @@ -0,0 +1,49 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3 from 'web3'; +import { validator } from 'web3-validator'; +import { blockSchema } from 'web3-eth'; +import { + closeOpenConnection, + getSystemTestProvider, + isWs, + // eslint-disable-next-line import/no-relative-packages +} from '../../../shared_fixtures/system_tests_utils'; + +describe('ESM - Black Box Unit Tests - web3.eth.getBlock', () => { + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(getSystemTestProvider()); + }); + + afterAll(async () => { + if (isWs) await closeOpenConnection(web3); + }); + + it('should get the latest block and validate it against blockSchema', async () => { + const response = await web3.eth.getBlock('latest'); + expect(response).toBeDefined(); + expect(validator.validateJSONSchema(blockSchema, response)).toBeUndefined(); + }); + + it('should get the latest block and validate it against blockSchema - hydrated = true', async () => { + const response = await web3.eth.getBlock('latest', true); + expect(response).toBeDefined(); + expect(validator.validateJSONSchema(blockSchema, response)).toBeUndefined(); + }); +}); diff --git a/packages/web3/test/esm_black_box/test/web3-eth/getTransaction.test.ts b/packages/web3/test/esm_black_box/test/web3-eth/getTransaction.test.ts new file mode 100644 index 00000000000..385af52226f --- /dev/null +++ b/packages/web3/test/esm_black_box/test/web3-eth/getTransaction.test.ts @@ -0,0 +1,70 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3 from 'web3'; +import { + closeOpenConnection, + getSystemTestProvider, + isWs, + itIf, + // eslint-disable-next-line import/no-relative-packages +} from '../../../shared_fixtures/system_tests_utils'; + +describe('ESM - Black Box Unit Tests - web3.eth.getTransaction', () => { + let web3: Web3; + + beforeAll(() => { + web3 = new Web3(getSystemTestProvider()); + }); + + afterAll(async () => { + if (isWs) await closeOpenConnection(web3); + }); + + itIf(process.env.WEB3_SYSTEM_TEST_BACKEND === 'infura')( + 'should get specific USDT transaction', + async () => { + const expectedTxObject = { + accessList: [], + blockHash: '0x8ad298dbdf859f953b97cc27218e7f7f2af4237817a8dbd1d987891520286612', + blockNumber: BigInt(15230806), + chainId: BigInt(1), + from: '0x4c9af439b1a6761b8e549d8d226a468a6b2803a8', + gas: BigInt(120000), + gasPrice: BigInt(9022588986), + hash: '0x133048bfcf6c0f7f8d1f5681df9607802894667acb46f4a3ba8ba187421dfc2b', + data: '0xa9059cbb000000000000000000000000d9e46776dbc0e37d6f89be3a23885234c75702b6000000000000000000000000000000000000000000000000000000012a05f200', + input: '0xa9059cbb000000000000000000000000d9e46776dbc0e37d6f89be3a23885234c75702b6000000000000000000000000000000000000000000000000000000012a05f200', + maxFeePerGas: BigInt(32251128981), + maxPriorityFeePerGas: BigInt(1000000000), + nonce: BigInt(83553), + r: '0x1240db6f5b2245729b8593ff43230795e3c4c1005776dd6841de68da926096e9', + s: '0x48678639e5b752a69dcc62b4ef9417b3f65e4d4c75ec99df8457b02b339799de', + to: '0xdac17f958d2ee523a2206206994597c13d831ec7', + transactionIndex: BigInt(190), + type: BigInt(2), + v: BigInt(1), + value: BigInt(0), + }; + + const response = await web3.eth.getTransaction( + '0x133048bfcf6c0f7f8d1f5681df9607802894667acb46f4a3ba8ba187421dfc2b', + ); + // eslint-disable-next-line jest/no-standalone-expect + expect(response).toStrictEqual(expectedTxObject); + }, + ); +}); diff --git a/packages/web3/test/esm_black_box/yarn.lock b/packages/web3/test/esm_black_box/yarn.lock new file mode 100644 index 00000000000..e726d718315 --- /dev/null +++ b/packages/web3/test/esm_black_box/yarn.lock @@ -0,0 +1,2999 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "http://localhost:4873/@ampproject%2fremapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "http://localhost:4873/@babel%2fcode-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "http://localhost:4873/@babel%2fcompat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.18.10" + resolved "http://localhost:4873/@babel%2fcore/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.18.10", "@babel/generator@^7.7.2": + version "7.18.12" + resolved "http://localhost:4873/@babel%2fgenerator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" + integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== + dependencies: + "@babel/types" "^7.18.10" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "http://localhost:4873/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "http://localhost:4873/@babel%2fhelper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "http://localhost:4873/@babel%2fhelper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "http://localhost:4873/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "http://localhost:4873/@babel%2fhelper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "http://localhost:4873/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0": + version "7.18.9" + resolved "http://localhost:4873/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "http://localhost:4873/@babel%2fhelper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "http://localhost:4873/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "http://localhost:4873/@babel%2fhelper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "http://localhost:4873/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "http://localhost:4873/@babel%2fhelper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "http://localhost:4873/@babel%2fhelpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "http://localhost:4873/@babel%2fhighlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11": + version "7.18.11" + resolved "http://localhost:4873/@babel%2fparser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" + integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "http://localhost:4873/@babel%2fplugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel%2fplugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "http://localhost:4873/@babel%2fplugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "http://localhost:4873/@babel%2fplugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel%2fplugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "http://localhost:4873/@babel%2fplugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel%2fplugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "http://localhost:4873/@babel%2fplugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel%2fplugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel%2fplugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel%2fplugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "http://localhost:4873/@babel%2fplugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.18.6" + resolved "http://localhost:4873/@babel%2fplugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": + version "7.18.10" + resolved "http://localhost:4873/@babel%2ftemplate/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": + version "7.18.11" + resolved "http://localhost:4873/@babel%2ftraverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" + integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.11" + "@babel/types" "^7.18.10" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.18.10" + resolved "http://localhost:4873/@babel%2ftypes/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== + dependencies: + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "http://localhost:4873/@bcoe%2fv8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": + version "2.6.5" + resolved "http://localhost:4873/@ethereumjs%2fcommon/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + +"@ethereumjs/tx@^3.5.2": + version "3.5.2" + resolved "http://localhost:4873/@ethereumjs%2ftx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== + dependencies: + "@ethereumjs/common" "^2.6.4" + ethereumjs-util "^7.1.5" + +"@ethersproject/abi@^5.6.4": + version "5.6.4" + resolved "http://localhost:4873/@ethersproject%2fabi/-/abi-5.6.4.tgz#f6e01b6ed391a505932698ecc0d9e7a99ee60362" + integrity sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg== + dependencies: + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + +"@ethersproject/abstract-provider@^5.6.1": + version "5.6.1" + resolved "http://localhost:4873/@ethersproject%2fabstract-provider/-/abstract-provider-5.6.1.tgz#02ddce150785caf0c77fe036a0ebfcee61878c59" + integrity sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.3" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/web" "^5.6.1" + +"@ethersproject/abstract-signer@^5.6.2": + version "5.6.2" + resolved "http://localhost:4873/@ethersproject%2fabstract-signer/-/abstract-signer-5.6.2.tgz#491f07fc2cbd5da258f46ec539664713950b0b33" + integrity sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ== + dependencies: + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + +"@ethersproject/address@^5.6.1": + version "5.6.1" + resolved "http://localhost:4873/@ethersproject%2faddress/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" + integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp" "^5.6.1" + +"@ethersproject/base64@^5.6.1": + version "5.6.1" + resolved "http://localhost:4873/@ethersproject%2fbase64/-/base64-5.6.1.tgz#2c40d8a0310c9d1606c2c37ae3092634b41d87cb" + integrity sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + +"@ethersproject/bignumber@^5.6.2": + version "5.6.2" + resolved "http://localhost:4873/@ethersproject%2fbignumber/-/bignumber-5.6.2.tgz#72a0717d6163fab44c47bcc82e0c550ac0315d66" + integrity sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@^5.6.1": + version "5.6.1" + resolved "http://localhost:4873/@ethersproject%2fbytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" + integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/constants@^5.6.1": + version "5.6.1" + resolved "http://localhost:4873/@ethersproject%2fconstants/-/constants-5.6.1.tgz#e2e974cac160dd101cf79fdf879d7d18e8cb1370" + integrity sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + +"@ethersproject/hash@^5.6.1": + version "5.6.1" + resolved "http://localhost:4873/@ethersproject%2fhash/-/hash-5.6.1.tgz#224572ea4de257f05b4abf8ae58b03a67e99b0f4" + integrity sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA== + dependencies: + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + +"@ethersproject/keccak256@^5.6.1": + version "5.6.1" + resolved "http://localhost:4873/@ethersproject%2fkeccak256/-/keccak256-5.6.1.tgz#b867167c9b50ba1b1a92bccdd4f2d6bd168a91cc" + integrity sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA== + dependencies: + "@ethersproject/bytes" "^5.6.1" + js-sha3 "0.8.0" + +"@ethersproject/logger@^5.6.0": + version "5.6.0" + resolved "http://localhost:4873/@ethersproject%2flogger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" + integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== + +"@ethersproject/networks@^5.6.3": + version "5.6.4" + resolved "http://localhost:4873/@ethersproject%2fnetworks/-/networks-5.6.4.tgz#51296d8fec59e9627554f5a8a9c7791248c8dc07" + integrity sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/properties@^5.6.0": + version "5.6.0" + resolved "http://localhost:4873/@ethersproject%2fproperties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" + integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/rlp@^5.6.1": + version "5.6.1" + resolved "http://localhost:4873/@ethersproject%2frlp/-/rlp-5.6.1.tgz#df8311e6f9f24dcb03d59a2bac457a28a4fe2bd8" + integrity sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/signing-key@^5.6.2": + version "5.6.2" + resolved "http://localhost:4873/@ethersproject%2fsigning-key/-/signing-key-5.6.2.tgz#8a51b111e4d62e5a62aee1da1e088d12de0614a3" + integrity sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/strings@^5.6.1": + version "5.6.1" + resolved "http://localhost:4873/@ethersproject%2fstrings/-/strings-5.6.1.tgz#dbc1b7f901db822b5cafd4ebf01ca93c373f8952" + integrity sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/transactions@^5.6.2": + version "5.6.2" + resolved "http://localhost:4873/@ethersproject%2ftransactions/-/transactions-5.6.2.tgz#793a774c01ced9fe7073985bb95a4b4e57a6370b" + integrity sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q== + dependencies: + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/rlp" "^5.6.1" + "@ethersproject/signing-key" "^5.6.2" + +"@ethersproject/web@^5.6.1": + version "5.6.1" + resolved "http://localhost:4873/@ethersproject%2fweb/-/web-5.6.1.tgz#6e2bd3ebadd033e6fe57d072db2b69ad2c9bdf5d" + integrity sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA== + dependencies: + "@ethersproject/base64" "^5.6.1" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "http://localhost:4873/@istanbuljs%2fload-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "http://localhost:4873/@istanbuljs%2fschema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest%2fconsole/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + +"@jest/core@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest%2fcore/-/core-28.1.3.tgz#0ebf2bd39840f1233cd5f2d1e6fc8b71bd5a1ac7" + integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/reporters" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^28.1.3" + jest-config "^28.1.3" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-resolve-dependencies "^28.1.3" + jest-runner "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + jest-watcher "^28.1.3" + micromatch "^4.0.4" + pretty-format "^28.1.3" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest%2fenvironment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" + integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== + dependencies: + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest%2fexpect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + dependencies: + jest-get-type "^28.0.2" + +"@jest/expect@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest%2fexpect/-/expect-28.1.3.tgz#9ac57e1d4491baca550f6bdbd232487177ad6a72" + integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== + dependencies: + expect "^28.1.3" + jest-snapshot "^28.1.3" + +"@jest/fake-timers@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest%2ffake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" + integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== + dependencies: + "@jest/types" "^28.1.3" + "@sinonjs/fake-timers" "^9.1.2" + "@types/node" "*" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +"@jest/globals@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest%2fglobals/-/globals-28.1.3.tgz#a601d78ddc5fdef542728309894895b4a42dc333" + integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/types" "^28.1.3" + +"@jest/reporters@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest%2freporters/-/reporters-28.1.3.tgz#9adf6d265edafc5fc4a434cfb31e2df5a67a369a" + integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + jest-worker "^28.1.3" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + terminal-link "^2.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest%2fschemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/source-map@^28.1.2": + version "28.1.2" + resolved "http://localhost:4873/@jest%2fsource-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" + integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== + dependencies: + "@jridgewell/trace-mapping" "^0.3.13" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest%2ftest-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== + dependencies: + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest%2ftest-sequencer/-/test-sequencer-28.1.3.tgz#9d0c283d906ac599c74bde464bc0d7e6a82886c3" + integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== + dependencies: + "@jest/test-result" "^28.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + slash "^3.0.0" + +"@jest/transform@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest%2ftransform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" + integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.1" + +"@jest/types@^28.1.3": + version "28.1.3" + resolved "http://localhost:4873/@jest%2ftypes/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + dependencies: + "@jest/schemas" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "http://localhost:4873/@jridgewell%2fgen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "http://localhost:4873/@jridgewell%2fgen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "http://localhost:4873/@jridgewell%2fresolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "http://localhost:4873/@jridgewell%2fset-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "http://localhost:4873/@jridgewell%2fsourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.15" + resolved "http://localhost:4873/@jridgewell%2ftrace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": + version "1.1.2" + resolved "http://localhost:4873/@noble%2fhashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" + integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== + +"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": + version "1.6.3" + resolved "http://localhost:4873/@noble%2fsecp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" + integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== + +"@scure/base@~1.1.0": + version "1.1.1" + resolved "http://localhost:4873/@scure%2fbase/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" + integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + +"@scure/bip32@1.1.0": + version "1.1.0" + resolved "http://localhost:4873/@scure%2fbip32/-/bip32-1.1.0.tgz#dea45875e7fbc720c2b4560325f1cf5d2246d95b" + integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== + dependencies: + "@noble/hashes" "~1.1.1" + "@noble/secp256k1" "~1.6.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.1.0": + version "1.1.0" + resolved "http://localhost:4873/@scure%2fbip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" + integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== + dependencies: + "@noble/hashes" "~1.1.1" + "@scure/base" "~1.1.0" + +"@sinclair/typebox@^0.24.1": + version "0.24.28" + resolved "http://localhost:4873/@sinclair%2ftypebox/-/typebox-0.24.28.tgz#15aa0b416f82c268b1573ab653e4413c965fe794" + integrity sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "http://localhost:4873/@sinonjs%2fcommons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^9.1.2": + version "9.1.2" + resolved "http://localhost:4873/@sinonjs%2ffake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@types/babel__core@^7.1.14": + version "7.1.19" + resolved "http://localhost:4873/@types%2fbabel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "http://localhost:4873/@types%2fbabel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "http://localhost:4873/@types%2fbabel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.18.0" + resolved "http://localhost:4873/@types%2fbabel__traverse/-/babel__traverse-7.18.0.tgz#8134fd78cb39567465be65b9fdc16d378095f41f" + integrity sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/bn.js@^5.1.0": + version "5.1.0" + resolved "http://localhost:4873/@types%2fbn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" + integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== + dependencies: + "@types/node" "*" + +"@types/graceful-fs@^4.1.3": + version "4.1.5" + resolved "http://localhost:4873/@types%2fgraceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "http://localhost:4873/@types%2fistanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "http://localhost:4873/@types%2fistanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "http://localhost:4873/@types%2fistanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/node@*": + version "18.7.6" + resolved "http://localhost:4873/@types%2fnode/-/node-18.7.6.tgz#31743bc5772b6ac223845e18c3fc26f042713c83" + integrity sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A== + +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "http://localhost:4873/@types%2fpbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.1.5": + version "2.7.0" + resolved "http://localhost:4873/@types%2fprettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" + integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== + +"@types/secp256k1@^4.0.1": + version "4.0.3" + resolved "http://localhost:4873/@types%2fsecp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + dependencies: + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "http://localhost:4873/@types%2fstack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/yargs-parser@*": + version "21.0.0" + resolved "http://localhost:4873/@types%2fyargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.11" + resolved "http://localhost:4873/@types%2fyargs/-/yargs-17.0.11.tgz#5e10ca33e219807c0eee0f08b5efcba9b6a42c06" + integrity sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA== + dependencies: + "@types/yargs-parser" "*" + +ajv@^8.11.0: + version "8.11.0" + resolved "http://localhost:4873/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "http://localhost:4873/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "http://localhost:4873/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "http://localhost:4873/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "http://localhost:4873/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "http://localhost:4873/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3: + version "3.1.2" + resolved "http://localhost:4873/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "http://localhost:4873/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +babel-jest@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" + integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== + dependencies: + "@jest/transform" "^28.1.3" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^28.1.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "http://localhost:4873/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" + integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "http://localhost:4873/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" + integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== + dependencies: + babel-plugin-jest-hoist "^28.1.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "http://localhost:4873/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.9" + resolved "http://localhost:4873/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +blakejs@^1.1.0: + version "1.2.1" + resolved "http://localhost:4873/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@^4.11.9: + version "4.12.0" + resolved "http://localhost:4873/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "http://localhost:4873/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "http://localhost:4873/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2: + version "3.0.2" + resolved "http://localhost:4873/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "http://localhost:4873/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "http://localhost:4873/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserslist@^4.20.2: + version "4.21.3" + resolved "http://localhost:4873/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" + integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== + dependencies: + caniuse-lite "^1.0.30001370" + electron-to-chromium "^1.4.202" + node-releases "^2.0.6" + update-browserslist-db "^1.0.5" + +bs-logger@0.x: + version "0.2.6" + resolved "http://localhost:4873/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bs58@^4.0.0: + version "4.0.1" + resolved "http://localhost:4873/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "http://localhost:4873/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +bser@2.1.1: + version "2.1.1" + resolved "http://localhost:4873/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "http://localhost:4873/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "http://localhost:4873/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +callsites@^3.0.0: + version "3.1.0" + resolved "http://localhost:4873/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "http://localhost:4873/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "http://localhost:4873/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001370: + version "1.0.30001378" + resolved "http://localhost:4873/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz#3d2159bf5a8f9ca093275b0d3ecc717b00f27b67" + integrity sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA== + +chalk@^2.0.0: + version "2.4.2" + resolved "http://localhost:4873/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "http://localhost:4873/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "http://localhost:4873/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +ci-info@^3.2.0: + version "3.3.2" + resolved "http://localhost:4873/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" + integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "http://localhost:4873/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "http://localhost:4873/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +cliui@^7.0.2: + version "7.0.4" + resolved "http://localhost:4873/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "http://localhost:4873/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "http://localhost:4873/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "http://localhost:4873/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "http://localhost:4873/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "http://localhost:4873/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "http://localhost:4873/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "http://localhost:4873/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "http://localhost:4873/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +crc-32@^1.2.0: + version "1.2.2" + resolved "http://localhost:4873/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "http://localhost:4873/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "http://localhost:4873/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-fetch@^3.1.5: + version "3.1.5" + resolved "http://localhost:4873/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "http://localhost:4873/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.4" + resolved "http://localhost:4873/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +dedent@^0.7.0: + version "0.7.0" + resolved "http://localhost:4873/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "http://localhost:4873/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "http://localhost:4873/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^28.1.1: + version "28.1.1" + resolved "http://localhost:4873/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" + integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== + +electron-to-chromium@^1.4.202: + version "1.4.222" + resolved "http://localhost:4873/electron-to-chromium/-/electron-to-chromium-1.4.222.tgz#2ba24bef613fc1985dbffea85df8f62f2dec6448" + integrity sha512-gEM2awN5HZknWdLbngk4uQCVfhucFAfFzuchP3wM3NN6eow1eDU0dFy2kts43FB20ZfhVFF0jmFSTb1h5OhyIg== + +elliptic@6.5.4, elliptic@^6.5.4: + version "6.5.4" + resolved "http://localhost:4873/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@^0.10.2: + version "0.10.2" + resolved "http://localhost:4873/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "http://localhost:4873/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +error-ex@^1.3.1: + version "1.3.2" + resolved "http://localhost:4873/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "http://localhost:4873/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +esprima@^4.0.0: + version "4.0.1" + resolved "http://localhost:4873/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "http://localhost:4873/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.1.2: + version "1.1.2" + resolved "http://localhost:4873/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz#74f2ac0f0f5fe79f012c889b3b8446a9a6264e6d" + integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== + dependencies: + "@noble/hashes" "1.1.2" + "@noble/secp256k1" "1.6.3" + "@scure/bip32" "1.1.0" + "@scure/bip39" "1.1.0" + +ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "http://localhost:4873/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "http://localhost:4873/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^5.0.0: + version "5.1.1" + resolved "http://localhost:4873/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "http://localhost:4873/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== + dependencies: + "@jest/expect-utils" "^28.1.3" + jest-get-type "^28.0.2" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "http://localhost:4873/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "http://localhost:4873/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "http://localhost:4873/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "http://localhost:4873/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "http://localhost:4873/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2: + version "2.3.2" + resolved "http://localhost:4873/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "http://localhost:4873/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "http://localhost:4873/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "http://localhost:4873/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "http://localhost:4873/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "http://localhost:4873/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "http://localhost:4873/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "http://localhost:4873/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.2.9: + version "4.2.10" + resolved "http://localhost:4873/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has@^1.0.3: + version "1.0.3" + resolved "http://localhost:4873/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "http://localhost:4873/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "http://localhost:4873/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "http://localhost:4873/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "http://localhost:4873/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +human-signals@^2.1.0: + version "2.1.0" + resolved "http://localhost:4873/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +idna-uts46-hx@^3.5.0: + version "3.5.0" + resolved "http://localhost:4873/idna-uts46-hx/-/idna-uts46-hx-3.5.0.tgz#fad856b480bce4ff7477e7e0a42b5a39a8a4bcdc" + integrity sha512-0gMFl+zjvA8ZOohPQmLiWcd2Ad60AB9oKzqvLucEC5TyDzHl5mIB6ralW6h8BayVRm4ZmAVYnlI1pCYD2O7lBw== + dependencies: + punycode "^2.1.1" + +import-local@^3.0.2: + version "3.1.0" + resolved "http://localhost:4873/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "http://localhost:4873/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "http://localhost:4873/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "http://localhost:4873/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "http://localhost:4873/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-core-module@^2.9.0: + version "2.10.0" + resolved "http://localhost:4873/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "http://localhost:4873/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "http://localhost:4873/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-stream@^2.0.0: + version "2.0.1" + resolved "http://localhost:4873/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +isexe@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isomorphic-ws@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" + integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "http://localhost:4873/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.0" + resolved "http://localhost:4873/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f" + integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "http://localhost:4873/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "http://localhost:4873/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" + integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== + dependencies: + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-circus/-/jest-circus-28.1.3.tgz#d14bd11cf8ee1a03d69902dc47b6bd4634ee00e4" + integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + p-limit "^3.1.0" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-cli/-/jest-cli-28.1.3.tgz#558b33c577d06de55087b8448d373b9f654e46b2" + integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== + dependencies: + "@jest/core" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + prompts "^2.0.1" + yargs "^17.3.1" + +jest-config@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-config/-/jest-config-28.1.3.tgz#e315e1f73df3cac31447eed8b8740a477392ec60" + integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^28.1.3" + "@jest/types" "^28.1.3" + babel-jest "^28.1.3" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^28.1.3" + jest-environment-node "^28.1.3" + jest-get-type "^28.0.2" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-runner "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^28.1.3" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== + dependencies: + chalk "^4.0.0" + diff-sequences "^28.1.1" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-docblock@^28.1.1: + version "28.1.1" + resolved "http://localhost:4873/jest-docblock/-/jest-docblock-28.1.1.tgz#6f515c3bf841516d82ecd57a62eed9204c2f42a8" + integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== + dependencies: + detect-newline "^3.0.0" + +jest-each@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-each/-/jest-each-28.1.3.tgz#bdd1516edbe2b1f3569cfdad9acd543040028f81" + integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== + dependencies: + "@jest/types" "^28.1.3" + chalk "^4.0.0" + jest-get-type "^28.0.2" + jest-util "^28.1.3" + pretty-format "^28.1.3" + +jest-environment-node@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-environment-node/-/jest-environment-node-28.1.3.tgz#7e74fe40eb645b9d56c0c4b70ca4357faa349be5" + integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +jest-get-type@^28.0.2: + version "28.0.2" + resolved "http://localhost:4873/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" + integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== + +jest-haste-map@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" + integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== + dependencies: + "@jest/types" "^28.1.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + jest-worker "^28.1.3" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz#a6685d9b074be99e3adee816ce84fd30795e654d" + integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== + dependencies: + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== + dependencies: + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-message-util@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" + integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "http://localhost:4873/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^28.0.2: + version "28.0.2" + resolved "http://localhost:4873/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz#8c65d7583460df7275c6ea2791901fa975c1fe66" + integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== + dependencies: + jest-regex-util "^28.0.2" + jest-snapshot "^28.1.3" + +jest-resolve@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-resolve/-/jest-resolve-28.1.3.tgz#cfb36100341ddbb061ec781426b3c31eb51aa0a8" + integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-pnp-resolver "^1.2.2" + jest-util "^28.1.3" + jest-validate "^28.1.3" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-runner/-/jest-runner-28.1.3.tgz#5eee25febd730b4713a2cdfd76bdd5557840f9a1" + integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/environment" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.10.2" + graceful-fs "^4.2.9" + jest-docblock "^28.1.1" + jest-environment-node "^28.1.3" + jest-haste-map "^28.1.3" + jest-leak-detector "^28.1.3" + jest-message-util "^28.1.3" + jest-resolve "^28.1.3" + jest-runtime "^28.1.3" + jest-util "^28.1.3" + jest-watcher "^28.1.3" + jest-worker "^28.1.3" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-runtime/-/jest-runtime-28.1.3.tgz#a57643458235aa53e8ec7821949e728960d0605f" + integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/globals" "^28.1.3" + "@jest/source-map" "^28.1.2" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-snapshot/-/jest-snapshot-28.1.3.tgz#17467b3ab8ddb81e2f605db05583d69388fc0668" + integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^28.1.3" + graceful-fs "^4.2.9" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + jest-haste-map "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + natural-compare "^1.4.0" + pretty-format "^28.1.3" + semver "^7.3.5" + +jest-util@^28.0.0, jest-util@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-validate/-/jest-validate-28.1.3.tgz#e322267fd5e7c64cea4629612c357bbda96229df" + integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== + dependencies: + "@jest/types" "^28.1.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^28.0.2" + leven "^3.1.0" + pretty-format "^28.1.3" + +jest-watcher@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== + dependencies: + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^28.1.3" + string-length "^4.0.1" + +jest-worker@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/jest/-/jest-28.1.3.tgz#e9c6a7eecdebe3548ca2b18894a50f45b36dfc6b" + integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== + dependencies: + "@jest/core" "^28.1.3" + "@jest/types" "^28.1.3" + import-local "^3.0.2" + jest-cli "^28.1.3" + +js-sha3@0.8.0: + version "0.8.0" + resolved "http://localhost:4873/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "http://localhost:4873/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "http://localhost:4873/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "http://localhost:4873/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@^2.2.1: + version "2.2.1" + resolved "http://localhost:4873/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +keccak@^3.0.0: + version "3.0.2" + resolved "http://localhost:4873/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +kleur@^3.0.3: + version "3.0.3" + resolved "http://localhost:4873/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "http://localhost:4873/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "http://localhost:4873/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.memoize@4.x: + version "4.1.2" + resolved "http://localhost:4873/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "http://localhost:4873/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "http://localhost:4873/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x: + version "1.3.6" + resolved "http://localhost:4873/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "http://localhost:4873/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +md5.js@^1.3.4: + version "1.3.5" + resolved "http://localhost:4873/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^4.0.4: + version "4.0.5" + resolved "http://localhost:4873/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "http://localhost:4873/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "http://localhost:4873/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "http://localhost:4873/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "http://localhost:4873/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +ms@2.1.2: + version "2.1.2" + resolved "http://localhost:4873/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "http://localhost:4873/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "http://localhost:4873/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-fetch@2.6.7: + version "2.6.7" + resolved "http://localhost:4873/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@^4.2.0: + version "4.5.0" + resolved "http://localhost:4873/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" + integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + +node-int64@^0.4.0: + version "0.4.0" + resolved "http://localhost:4873/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.6: + version "2.0.6" + resolved "http://localhost:4873/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +normalize-path@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "http://localhost:4873/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +once@^1.3.0: + version "1.4.0" + resolved "http://localhost:4873/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "http://localhost:4873/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "http://localhost:4873/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.1.0: + version "3.1.0" + resolved "http://localhost:4873/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "http://localhost:4873/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "http://localhost:4873/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-json@^5.2.0: + version "5.2.0" + resolved "http://localhost:4873/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-exists@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "http://localhost:4873/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "http://localhost:4873/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "http://localhost:4873/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "http://localhost:4873/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picocolors@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "http://localhost:4873/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pirates@^4.0.4: + version "4.0.5" + resolved "http://localhost:4873/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "http://localhost:4873/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pretty-format@^28.1.3: + version "28.1.3" + resolved "http://localhost:4873/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + dependencies: + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "http://localhost:4873/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "http://localhost:4873/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "http://localhost:4873/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +react-is@^18.0.0: + version "18.2.0" + resolved "http://localhost:4873/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +readable-stream@^3.6.0: + version "3.6.0" + resolved "http://localhost:4873/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "http://localhost:4873/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "http://localhost:4873/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^1.1.0: + version "1.1.0" + resolved "http://localhost:4873/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + +resolve@^1.20.0: + version "1.22.1" + resolved "http://localhost:4873/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +rimraf@^3.0.0: + version "3.0.2" + resolved "http://localhost:4873/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "http://localhost:4873/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.4: + version "2.2.7" + resolved "http://localhost:4873/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "http://localhost:4873/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "http://localhost:4873/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +scrypt-js@^3.0.0: + version "3.0.1" + resolved "http://localhost:4873/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@^4.0.1: + version "4.0.3" + resolved "http://localhost:4873/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +semver@7.x, semver@^7.3.5: + version "7.3.7" + resolved "http://localhost:4873/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "http://localhost:4873/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +setimmediate@^1.0.5: + version "1.0.5" + resolved "http://localhost:4873/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "http://localhost:4873/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "http://localhost:4873/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "http://localhost:4873/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@0.5.13: + version "0.5.13" + resolved "http://localhost:4873/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "http://localhost:4873/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "http://localhost:4873/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stack-utils@^2.0.3: + version "2.0.5" + resolved "http://localhost:4873/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "http://localhost:4873/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "http://localhost:4873/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "http://localhost:4873/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "http://localhost:4873/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "http://localhost:4873/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.3.0: + version "5.5.0" + resolved "http://localhost:4873/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "http://localhost:4873/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "http://localhost:4873/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "http://localhost:4873/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +terminal-link@^2.0.0: + version "2.1.1" + resolved "http://localhost:4873/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "http://localhost:4873/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +tmpl@1.0.5: + version "1.0.5" + resolved "http://localhost:4873/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "http://localhost:4873/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "http://localhost:4873/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-jest@^28.0.7: + version "28.0.8" + resolved "http://localhost:4873/ts-jest/-/ts-jest-28.0.8.tgz#cd204b8e7a2f78da32cf6c95c9a6165c5b99cc73" + integrity sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^28.0.0" + json5 "^2.2.1" + lodash.memoize "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "^21.0.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "http://localhost:4873/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "http://localhost:4873/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +update-browserslist-db@^1.0.5: + version "1.0.5" + resolved "http://localhost:4873/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "http://localhost:4873/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "http://localhost:4873/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "http://localhost:4873/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + +walker@^1.0.8: + version "1.0.8" + resolved "http://localhost:4873/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +web3-core@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-core/-/web3-core-5.0.0.tgz#c0196de89b79784b17eea10116f14f9ecda4c100" + integrity sha512-BjWC0apqv48vK+tgjBtNXxef6Ujgkwmupum5Ld+uAgP9lssEPlUtvGkho1myPKY45dWzC3rAbxfT2H7FwscA6Q== + dependencies: + web3-errors "^5.0.0" + web3-eth-iban "^5.0.0" + web3-providers-http "^5.0.0" + web3-providers-ipc "^5.0.0" + web3-providers-ws "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + web3-validator "^5.0.0" + +web3-errors@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-errors/-/web3-errors-5.0.0.tgz#83e9186b3d3cdde51eb342fb227bbeec75b3c15f" + integrity sha512-zw0gk7dH1lB4zcn+s7WD/X+LtA4yEpDimnFi9LTbKnGGFi9keYIpsXsINqUmy4NelIM+xzY0oFOvwdBRXpl5PA== + dependencies: + web3-types "^5.0.0" + +web3-eth-abi@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth-abi/-/web3-eth-abi-5.0.0.tgz#29b1e45e7f64e432ddad903328a2cc41c193456b" + integrity sha512-y6GjMi95Fq4Djt1nm3GBCrxrY+2/yDpUon4UwA2tDikFSnMr2xQx8vmymF1IIQjkDWQnhS8KdbJYUXgb4cKd6A== + dependencies: + "@ethersproject/abi" "^5.6.4" + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + +web3-eth-accounts@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth-accounts/-/web3-eth-accounts-5.0.0.tgz#c8f4b2fdf1bbf2324a687c1c1e9ed98e5c578985" + integrity sha512-DGzzO5hRfMm/DK+xU5GEJ53dihS1PShT6U8X+oFQkENhHZDx5/+zD6znyVpbcZ/ypRgf12q1YVRm2PAh45NRCw== + dependencies: + "@ethereumjs/tx" "^3.5.2" + ethereum-cryptography "^1.1.2" + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + web3-validator "^5.0.0" + +web3-eth-contract@5.0.0, web3-eth-contract@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth-contract/-/web3-eth-contract-5.0.0.tgz#dde4856bc8b3e00c35499cbbc260ba8d6bf10e4d" + integrity sha512-FYtL4W3sFyXmMVtIRX7qaN7c07gMXyha5i3tti2MnroojteqFm0cY2q8qvAPatDrCincx4Xi+OhXw+BBmhDYFw== + dependencies: + web3-core "^5.0.0" + web3-errors "^5.0.0" + web3-eth "^5.0.0" + web3-eth-abi "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + web3-validator "^5.0.0" + +web3-eth-ens@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth-ens/-/web3-eth-ens-5.0.0.tgz#825fb84cab99785f6f621ecffca3f8088b3828cf" + integrity sha512-+DWenDS2Yt7N4jidWPmxbvKFFyhHOIyvqQJSWOFtajZ04Lk8Nxc4G1zELJuau49B16rC3yBL/9MwtIr8WMIxQQ== + dependencies: + idna-uts46-hx "^3.5.0" + web3-core "^5.0.0" + web3-errors "^5.0.0" + web3-eth "^5.0.0" + web3-eth-contract "^5.0.0" + web3-net "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + +web3-eth-iban@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth-iban/-/web3-eth-iban-5.0.0.tgz#63f40186331c9fc6b38f3686d1605714956c2b4e" + integrity sha512-pp7MpmKgQmf/LAuM0S7Ufv0xCzsSqPnCmLGaUApLi8gHMsPZY07uxeiH/oEZyzYkdaR+nbkPF/Y/Ztj0N3PNHQ== + dependencies: + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + +web3-eth-personal@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth-personal/-/web3-eth-personal-5.0.0.tgz#623c687163a784d1edacb395614e986623d358cd" + integrity sha512-rt6fbYTpTo89KejPcf81rnzGHU9CSDH6M2W+S06e6vZEFVzyoSa/kyTgMKrzKI2Q7widLM4JSz/aMNEMgY2vWw== + dependencies: + web3-core "^5.0.0" + web3-eth "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + web3-validator "^5.0.0" + +web3-eth@5.0.0, web3-eth@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-eth/-/web3-eth-5.0.0.tgz#5b2b19677ee3c61aa26215cbe6b7dec6dbb16ddc" + integrity sha512-pp8yuLKiO1Vpjp1yY7x+OUd2Pf4fAg1hC4Cv2muP4Pmy/MhqJBRJcxsS6fmPWbj9y9IV/lbdbFF6DBSunUYppw== + dependencies: + "@ethereumjs/common" "^2.6.5" + "@ethereumjs/tx" "^3.5.2" + web3-core "^5.0.0" + web3-errors "^5.0.0" + web3-eth-accounts "^5.0.0" + web3-net "^5.0.0" + web3-providers-ws "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + web3-validator "^5.0.0" + +web3-net@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-net/-/web3-net-5.0.0.tgz#0c4e6bb1e7c8f85de60f8852d2bafadecfe1aea8" + integrity sha512-nEgVdgS8KeRc6MwkewwmKnLKjXFEP1FV0qBBCQaBTQ0AAIyKhq/F7b+n89N/84isYeLL7/MnR9jLQSxdB9Jm8g== + dependencies: + web3-core "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + +web3-providers-http@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-providers-http/-/web3-providers-http-5.0.0.tgz#e664e4d16d4d5aa7c677e8aa9dda8e1e67fa8949" + integrity sha512-Kv13bM3PSGb3LBlTEZ7Ym1XoXXg+DXGqKMITo2QIjgGHRDz/eUgtPmfPndZmPZLODjMA5hvF2k17PADEs0Mn0A== + dependencies: + cross-fetch "^3.1.5" + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + +web3-providers-ipc@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-providers-ipc/-/web3-providers-ipc-5.0.0.tgz#31f9b3e8382fab9319c422c1b2d431d5a6284163" + integrity sha512-a56U/wNcjk1mXXhLh3Zpgh1Tq8QByf1MHFWrgjunAzAiaPuE/b9CrzsXdzuY/VGv0Ndj5QiICHWZmUwuQHd/QQ== + dependencies: + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + +web3-providers-ws@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-providers-ws/-/web3-providers-ws-5.0.0.tgz#1fdacaccb87c120628873413729fc79e074e1325" + integrity sha512-Hf+7686ZWWi0WYxnc+7TdSjjsPCnDhPhAEQSS78kBuV7m4GaUOwk6mK62MvuhPDxFYpe5H8VR8m0dnYR235MAQ== + dependencies: + isomorphic-ws "^5.0.0" + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + ws "^8.8.1" + +web3-types@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-types/-/web3-types-5.0.0.tgz#ca76e2748db9c95e92e35074bd9148b21769b347" + integrity sha512-FrrWv1pePYA0jObcqhFlxY9LzgkAGsuRbKgjWgNToTBUlhrXyjZ05netpfpI/6zQ7BDxu483I7CRvjy+n/tQdw== + +web3-utils@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-utils/-/web3-utils-5.0.0.tgz#7e73ad17ad0719f5c5531fe2fbbf5d00a7eb438a" + integrity sha512-KeEeG84NAxRdNiMn1V65seHBCQtQ4A/QDZRkX9HEUvKqPEu0IPd8x3wW9IMEGRPKABROCG3ZKWblkYwqjcFU6A== + dependencies: + ethereum-cryptography "^1.1.2" + web3-errors "^5.0.0" + web3-types "^5.0.0" + web3-validator "^5.0.0" + +web3-validator@5.0.0, web3-validator@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3-validator/-/web3-validator-5.0.0.tgz#eff9a9f2f380ecbfdd093c5255f14519cef9d6bd" + integrity sha512-Sb/DgnJIthsVCxu0XA7/KOXtWo4RPnYoo6USbJIivo2jlaZy45Wyt9kChB9e2Zvt6ewvVoHVdZ9afcL0DGed+w== + dependencies: + ajv "^8.11.0" + ethereum-cryptography "^1.1.2" + web3-types "^5.0.0" + +web3@5.0.0: + version "5.0.0" + resolved "http://localhost:4873/web3/-/web3-5.0.0.tgz#e1f74c9ee528bb430fc6e17a55d948d63563b5d8" + integrity sha512-dELMyViyZTpcGf41VWSa/vRQRpxD7M9SBjMDvcrsKRGXr04qZP/2PRFa448jiGEfHGvTUuAd9u9VJY3ZnDpb0A== + dependencies: + web3-core "^5.0.0" + web3-errors "^5.0.0" + web3-eth "^5.0.0" + web3-eth-abi "^5.0.0" + web3-eth-accounts "^5.0.0" + web3-eth-contract "^5.0.0" + web3-eth-ens "^5.0.0" + web3-eth-iban "^5.0.0" + web3-eth-personal "^5.0.0" + web3-net "^5.0.0" + web3-types "^5.0.0" + web3-utils "^5.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "http://localhost:4873/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "http://localhost:4873/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "http://localhost:4873/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "http://localhost:4873/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.1: + version "4.0.2" + resolved "http://localhost:4873/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +ws@^8.8.1: + version "8.8.1" + resolved "http://localhost:4873/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" + integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== + +y18n@^5.0.5: + version "5.0.8" + resolved "http://localhost:4873/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^21.0.0, yargs-parser@^21.0.1: + version "21.1.1" + resolved "http://localhost:4873/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.3.1: + version "17.5.1" + resolved "http://localhost:4873/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "http://localhost:4873/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/packages/web3/test/fixtures/transactions.json b/packages/web3/test/fixtures/transactions.json new file mode 100644 index 00000000000..99ae2c08aeb --- /dev/null +++ b/packages/web3/test/fixtures/transactions.json @@ -0,0 +1,5264 @@ +[ + { + "name": "random-2", + "transaction": { + "to": "0xD0F118AFa9C2c9cc50F10d94cCC1cbDda2758b36", + "nonce": 15, + "gasLimit": "0x331bce0f90", + "gasPrice": "0xe15a1b", + "maxFeePerGas": "0x58e8d1dda1", + "maxPriorityFeePerGas": "0x91bcff", + "data": "0xe0d1a7227d34c2ca72e3c0", + "value": "0x91e32e2f5a", + "accessList": [ + { + "address": "0x032f5546f1B932555cB43e2b16C844d118078430", + "storageKeys": [] + } + ], + "chainId": "0xac9f74e3" + }, + "privateKey": "0xa248ca1e9bd9c10fb163baefd567da6658f7419f3b7ec8bb13800ef2c546cdc9", + "unsignedLegacy": "0xf20f83e15a1b85331bce0f9094d0f118afa9c2c9cc50f10d94ccc1cbdda2758b368591e32e2f5a8be0d1a7227d34c2ca72e3c0", + "unsignedEip155": "0xf8390f83e15a1b85331bce0f9094d0f118afa9c2c9cc50f10d94ccc1cbdda2758b368591e32e2f5a8be0d1a7227d34c2ca72e3c084ac9f74e38080", + "unsignedBerlin": "0x01f84f84ac9f74e30f83e15a1b85331bce0f9094d0f118afa9c2c9cc50f10d94ccc1cbdda2758b368591e32e2f5a8be0d1a7227d34c2ca72e3c0d7d694032f5546f1b932555cb43e2b16c844d118078430c0", + "unsignedLondon": "0x02f85584ac9f74e30f8391bcff8558e8d1dda185331bce0f9094d0f118afa9c2c9cc50f10d94ccc1cbdda2758b368591e32e2f5a8be0d1a7227d34c2ca72e3c0d7d694032f5546f1b932555cb43e2b16c844d118078430c0", + "signedLegacy": "0xf8750f83e15a1b85331bce0f9094d0f118afa9c2c9cc50f10d94ccc1cbdda2758b368591e32e2f5a8be0d1a7227d34c2ca72e3c01ba0bde01f2c9907b076015708bff05e24058fd153bfc2f551a0adafcd7d61a088a0a01035bfd65df2799749536217c832d8d81b915448ac0ab31935d50917136e4c18", + "signedEip155": "0xf87a0f83e15a1b85331bce0f9094d0f118afa9c2c9cc50f10d94ccc1cbdda2758b368591e32e2f5a8be0d1a7227d34c2ca72e3c08501593ee9e9a0f42dbeea4337d8b48ed8f2bc257c83eb16725af6f3077e99fba6bac48c5e65f8a01869eaf77bc621843ba6c8b23919f7c9ebf0ac0001a840045609e1e96f14ab5a", + "signedBerlin": "0x01f89284ac9f74e30f83e15a1b85331bce0f9094d0f118afa9c2c9cc50f10d94ccc1cbdda2758b368591e32e2f5a8be0d1a7227d34c2ca72e3c0d7d694032f5546f1b932555cb43e2b16c844d118078430c080a05cc5457e6561e9831b8e52fb09765dc00eaa07ba68f05dc7558ad0dab2d2b8c3a020c19425fafafdc458dd119f6a59780fc4dd3bbd7ae65f351d3adf5b217d2f4e", + "signedLondon": "0x02f89884ac9f74e30f8391bcff8558e8d1dda185331bce0f9094d0f118afa9c2c9cc50f10d94ccc1cbdda2758b368591e32e2f5a8be0d1a7227d34c2ca72e3c0d7d694032f5546f1b932555cb43e2b16c844d118078430c001a0e97853a3f394ebb19b1a152324c7f3f7ffde2e2a0dfa295dc61f8788dcfebe00a02f0c9626e967c4494ccd02f4e60c840ecce64216438f051efa95f0b8f196f7c9", + "signatureLegacy": { + "r": "0xbde01f2c9907b076015708bff05e24058fd153bfc2f551a0adafcd7d61a088a0", + "s": "0x1035bfd65df2799749536217c832d8d81b915448ac0ab31935d50917136e4c18", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xf42dbeea4337d8b48ed8f2bc257c83eb16725af6f3077e99fba6bac48c5e65f8", + "s": "0x1869eaf77bc621843ba6c8b23919f7c9ebf0ac0001a840045609e1e96f14ab5a", + "v": "0x1593ee9e9" + }, + "signatureBerlin": { + "r": "0x5cc5457e6561e9831b8e52fb09765dc00eaa07ba68f05dc7558ad0dab2d2b8c3", + "s": "0x20c19425fafafdc458dd119f6a59780fc4dd3bbd7ae65f351d3adf5b217d2f4e", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xe97853a3f394ebb19b1a152324c7f3f7ffde2e2a0dfa295dc61f8788dcfebe00", + "s": "0x2f0c9626e967c4494ccd02f4e60c840ecce64216438f051efa95f0b8f196f7c9", + "v": "0x1" + } + }, + { + "name": "random-3", + "transaction": { + "to": "0x8Bee13B1D7E29953a7484A3aE8e344D86b4Ad2C5", + "nonce": 530, + "gasLimit": "0xccb4", + "gasPrice": "0x18956c24", + "maxFeePerGas": "0x57f3c57a41", + "maxPriorityFeePerGas": "0x5a492a", + "data": "0x4c4aaeceaa35f9cd275639e2319057a18f3c4d8bf242707b08a1a2a32531d3975a4dc67b8a92f5a11adbf12b6f8d8809d1544aed6f9da9b1f5e753307165e3e85afdbd", + "value": "0x3b04", + "accessList": [], + "chainId": "0xb3" + }, + "privateKey": "0xa9e5fdc17c2302fce888f2dc9d6ec2b3d3fc06aa212ec06b07f4035f64fcc58f", + "unsignedLegacy": "0xf8688202128418956c2482ccb4948bee13b1d7e29953a7484a3ae8e344d86b4ad2c5823b04b8434c4aaeceaa35f9cd275639e2319057a18f3c4d8bf242707b08a1a2a32531d3975a4dc67b8a92f5a11adbf12b6f8d8809d1544aed6f9da9b1f5e753307165e3e85afdbd", + "unsignedEip155": "0xf86c8202128418956c2482ccb4948bee13b1d7e29953a7484a3ae8e344d86b4ad2c5823b04b8434c4aaeceaa35f9cd275639e2319057a18f3c4d8bf242707b08a1a2a32531d3975a4dc67b8a92f5a11adbf12b6f8d8809d1544aed6f9da9b1f5e753307165e3e85afdbd81b38080", + "unsignedBerlin": "0x01f86b81b38202128418956c2482ccb4948bee13b1d7e29953a7484a3ae8e344d86b4ad2c5823b04b8434c4aaeceaa35f9cd275639e2319057a18f3c4d8bf242707b08a1a2a32531d3975a4dc67b8a92f5a11adbf12b6f8d8809d1544aed6f9da9b1f5e753307165e3e85afdbdc0", + "unsignedLondon": "0x02f87081b3820212835a492a8557f3c57a4182ccb4948bee13b1d7e29953a7484a3ae8e344d86b4ad2c5823b04b8434c4aaeceaa35f9cd275639e2319057a18f3c4d8bf242707b08a1a2a32531d3975a4dc67b8a92f5a11adbf12b6f8d8809d1544aed6f9da9b1f5e753307165e3e85afdbdc0", + "signedLegacy": "0xf8ab8202128418956c2482ccb4948bee13b1d7e29953a7484a3ae8e344d86b4ad2c5823b04b8434c4aaeceaa35f9cd275639e2319057a18f3c4d8bf242707b08a1a2a32531d3975a4dc67b8a92f5a11adbf12b6f8d8809d1544aed6f9da9b1f5e753307165e3e85afdbd1ca07be350194f44b6a86cd7199f2c6a2dea34815d20abbd0f389cf3c55ef5a13566a0239482099fd9289999f06db6fb95194ac1a92fcd13c1639d2e99e3b66ab2f0b1", + "signedEip155": "0xf8ad8202128418956c2482ccb4948bee13b1d7e29953a7484a3ae8e344d86b4ad2c5823b04b8434c4aaeceaa35f9cd275639e2319057a18f3c4d8bf242707b08a1a2a32531d3975a4dc67b8a92f5a11adbf12b6f8d8809d1544aed6f9da9b1f5e753307165e3e85afdbd820189a0541bc2b78ae53dd11ac2c9845fe30878c493d34311513dfda43a92dbee1b4121a03f4ff8d77c247fc2238c02e2d5ca68dcd77e8f7a20d0d2f99145925af07beec0", + "signedBerlin": "0x01f8ae81b38202128418956c2482ccb4948bee13b1d7e29953a7484a3ae8e344d86b4ad2c5823b04b8434c4aaeceaa35f9cd275639e2319057a18f3c4d8bf242707b08a1a2a32531d3975a4dc67b8a92f5a11adbf12b6f8d8809d1544aed6f9da9b1f5e753307165e3e85afdbdc001a035a7324dd7552976ee86c94623e89be43fddfa1ceed1354822a33726db13d9fba047347aee2460910314bbf20fbc091befb91a0ac236d30905312f828af49b2420", + "signedLondon": "0x02f8b381b3820212835a492a8557f3c57a4182ccb4948bee13b1d7e29953a7484a3ae8e344d86b4ad2c5823b04b8434c4aaeceaa35f9cd275639e2319057a18f3c4d8bf242707b08a1a2a32531d3975a4dc67b8a92f5a11adbf12b6f8d8809d1544aed6f9da9b1f5e753307165e3e85afdbdc080a0c458cee1b97cfb1f6fa52b2adaa135d8501d63ba908c113f48796d40884496b1a03abaf292f68e0fc6a5c1012455d49d2d566cb4cf2eeebc8d52f1f5e3e20c808b", + "signatureLegacy": { + "r": "0x7be350194f44b6a86cd7199f2c6a2dea34815d20abbd0f389cf3c55ef5a13566", + "s": "0x239482099fd9289999f06db6fb95194ac1a92fcd13c1639d2e99e3b66ab2f0b1", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x541bc2b78ae53dd11ac2c9845fe30878c493d34311513dfda43a92dbee1b4121", + "s": "0x3f4ff8d77c247fc2238c02e2d5ca68dcd77e8f7a20d0d2f99145925af07beec0", + "v": "0x189" + }, + "signatureBerlin": { + "r": "0x35a7324dd7552976ee86c94623e89be43fddfa1ceed1354822a33726db13d9fb", + "s": "0x47347aee2460910314bbf20fbc091befb91a0ac236d30905312f828af49b2420", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xc458cee1b97cfb1f6fa52b2adaa135d8501d63ba908c113f48796d40884496b1", + "s": "0x3abaf292f68e0fc6a5c1012455d49d2d566cb4cf2eeebc8d52f1f5e3e20c808b", + "v": "0x0" + } + }, + { + "name": "random-5", + "transaction": { + "to": "0x4d1060d970674619005137921969b4bfe3EeA6B8", + "nonce": 577, + "gasLimit": "0xbe431918", + "gasPrice": "0xb3b1aaeb58", + "maxFeePerGas": "0x6bb02a65c7", + "maxPriorityFeePerGas": "0xa5", + "data": "0x7f2239c398167e747939f64b2ed9458db8aa10eb367bfab1976a0bc6693cf152dd8d13aa16e4d655a38d6ac64eae0932e13d649f9516fca834cd5a49c7b6e5ba1286a30eea1ac2e89c78441c5418250f8e307cc72c95ef36a8e4cee60b56ece34984ed3302672e6183d28ef30f3e43d60f", + "value": "0x95927b2d76", + "accessList": [ + { + "address": "0x8A632C23BF807681570c3fb6632Ce99FD98BdB23", + "storageKeys": [ + "0x1c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25c", + "0x2b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919", + "0xc266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5", + "0xf49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824e" + ] + }, + { + "address": "0x2D78B31bA09E8a2888d655e3d000FE95c63789c4", + "storageKeys": [ + "0x1c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25c", + "0x2b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919", + "0xc266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5", + "0xf49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824e" + ] + }, + { + "address": "0x3199b3433EE7f3eDcAE901cbce64C4E81125F7da", + "storageKeys": [ + "0x1c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25c", + "0x2b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919", + "0xc266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5", + "0xf49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824e" + ] + }, + { + "address": "0xb8d669949683a728f76919fe2CC9896216E00A81", + "storageKeys": [ + "0x1c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25c", + "0x2b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919", + "0xc266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5", + "0xf49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824e" + ] + } + ], + "chainId": "0x60a7" + }, + "privateKey": "0x77065b8ddb2f89d3d2d83f46d0147efc081e3a3f1012406c698a9ce364b324e9", + "unsignedLegacy": "0xf89c82024185b3b1aaeb5884be431918944d1060d970674619005137921969b4bfe3eea6b88595927b2d76b8717f2239c398167e747939f64b2ed9458db8aa10eb367bfab1976a0bc6693cf152dd8d13aa16e4d655a38d6ac64eae0932e13d649f9516fca834cd5a49c7b6e5ba1286a30eea1ac2e89c78441c5418250f8e307cc72c95ef36a8e4cee60b56ece34984ed3302672e6183d28ef30f3e43d60f", + "unsignedEip155": "0xf8a182024185b3b1aaeb5884be431918944d1060d970674619005137921969b4bfe3eea6b88595927b2d76b8717f2239c398167e747939f64b2ed9458db8aa10eb367bfab1976a0bc6693cf152dd8d13aa16e4d655a38d6ac64eae0932e13d649f9516fca834cd5a49c7b6e5ba1286a30eea1ac2e89c78441c5418250f8e307cc72c95ef36a8e4cee60b56ece34984ed3302672e6183d28ef30f3e43d60f8260a78080", + "unsignedBerlin": "0x01f903168260a782024185b3b1aaeb5884be431918944d1060d970674619005137921969b4bfe3eea6b88595927b2d76b8717f2239c398167e747939f64b2ed9458db8aa10eb367bfab1976a0bc6693cf152dd8d13aa16e4d655a38d6ac64eae0932e13d649f9516fca834cd5a49c7b6e5ba1286a30eea1ac2e89c78441c5418250f8e307cc72c95ef36a8e4cee60b56ece34984ed3302672e6183d28ef30f3e43d60ff90274f89b948a632c23bf807681570c3fb6632ce99fd98bdb23f884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824ef89b942d78b31ba09e8a2888d655e3d000fe95c63789c4f884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824ef89b943199b3433ee7f3edcae901cbce64c4e81125f7daf884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824ef89b94b8d669949683a728f76919fe2cc9896216e00a81f884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824e", + "unsignedLondon": "0x02f903188260a782024181a5856bb02a65c784be431918944d1060d970674619005137921969b4bfe3eea6b88595927b2d76b8717f2239c398167e747939f64b2ed9458db8aa10eb367bfab1976a0bc6693cf152dd8d13aa16e4d655a38d6ac64eae0932e13d649f9516fca834cd5a49c7b6e5ba1286a30eea1ac2e89c78441c5418250f8e307cc72c95ef36a8e4cee60b56ece34984ed3302672e6183d28ef30f3e43d60ff90274f89b948a632c23bf807681570c3fb6632ce99fd98bdb23f884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824ef89b942d78b31ba09e8a2888d655e3d000fe95c63789c4f884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824ef89b943199b3433ee7f3edcae901cbce64c4e81125f7daf884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824ef89b94b8d669949683a728f76919fe2cc9896216e00a81f884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824e", + "signedLegacy": "0xf8df82024185b3b1aaeb5884be431918944d1060d970674619005137921969b4bfe3eea6b88595927b2d76b8717f2239c398167e747939f64b2ed9458db8aa10eb367bfab1976a0bc6693cf152dd8d13aa16e4d655a38d6ac64eae0932e13d649f9516fca834cd5a49c7b6e5ba1286a30eea1ac2e89c78441c5418250f8e307cc72c95ef36a8e4cee60b56ece34984ed3302672e6183d28ef30f3e43d60f1ba098cadec7a4cd4297f92828b79459baed65817cd8fcd40cb2025b750c8bb3d046a00c2e6848654d045d1502a9c1777bc917a63718e8a494dae94720f519ff07b3db", + "signedEip155": "0xf8e182024185b3b1aaeb5884be431918944d1060d970674619005137921969b4bfe3eea6b88595927b2d76b8717f2239c398167e747939f64b2ed9458db8aa10eb367bfab1976a0bc6693cf152dd8d13aa16e4d655a38d6ac64eae0932e13d649f9516fca834cd5a49c7b6e5ba1286a30eea1ac2e89c78441c5418250f8e307cc72c95ef36a8e4cee60b56ece34984ed3302672e6183d28ef30f3e43d60f82c172a009f309ce844417f1035eff7a0b3bc191253843fb29068769f09fed81a464e622a0722660636b83fcac33759285b9704a5976b7cf9aeeceacab451702ff454469dc", + "signedBerlin": "0x01f903598260a782024185b3b1aaeb5884be431918944d1060d970674619005137921969b4bfe3eea6b88595927b2d76b8717f2239c398167e747939f64b2ed9458db8aa10eb367bfab1976a0bc6693cf152dd8d13aa16e4d655a38d6ac64eae0932e13d649f9516fca834cd5a49c7b6e5ba1286a30eea1ac2e89c78441c5418250f8e307cc72c95ef36a8e4cee60b56ece34984ed3302672e6183d28ef30f3e43d60ff90274f89b948a632c23bf807681570c3fb6632ce99fd98bdb23f884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824ef89b942d78b31ba09e8a2888d655e3d000fe95c63789c4f884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824ef89b943199b3433ee7f3edcae901cbce64c4e81125f7daf884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824ef89b94b8d669949683a728f76919fe2cc9896216e00a81f884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824e01a07c8b37dd82c37b9783d328b99528bdbf4abdc7956d5e3da3a65f4a165e4acb74a04db2486fbb725825041d85e055d0adf75e02790041d668d13662717695436410", + "signedLondon": "0x02f9035b8260a782024181a5856bb02a65c784be431918944d1060d970674619005137921969b4bfe3eea6b88595927b2d76b8717f2239c398167e747939f64b2ed9458db8aa10eb367bfab1976a0bc6693cf152dd8d13aa16e4d655a38d6ac64eae0932e13d649f9516fca834cd5a49c7b6e5ba1286a30eea1ac2e89c78441c5418250f8e307cc72c95ef36a8e4cee60b56ece34984ed3302672e6183d28ef30f3e43d60ff90274f89b948a632c23bf807681570c3fb6632ce99fd98bdb23f884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824ef89b942d78b31ba09e8a2888d655e3d000fe95c63789c4f884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824ef89b943199b3433ee7f3edcae901cbce64c4e81125f7daf884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824ef89b94b8d669949683a728f76919fe2cc9896216e00a81f884a01c3124f271ea52d9e881bdd52c63020fb7c08a1b96263030415e4bc8146db25ca02b6d4aa754fa44f0e86e6fa0a936048674ffc4fef24c5a2b317c740630901919a0c266c51508b93a8f933e2e64505e458ac26cdb93e8e0bc7bd1609552b6210aa5a0f49934500a155bedea4f0bf25bfc62161fcb74fbf17ca480333f4747d5ad824e01a09f9feb4b5bf570aa4f121fcc51de36dd7de80d0e4398f3dc99a6a615d12570c9a05d6f01ed28fda456c5f63f5f652735161cb5eede641262e296d62d94c7b628f8", + "signatureLegacy": { + "r": "0x98cadec7a4cd4297f92828b79459baed65817cd8fcd40cb2025b750c8bb3d046", + "s": "0x0c2e6848654d045d1502a9c1777bc917a63718e8a494dae94720f519ff07b3db", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x09f309ce844417f1035eff7a0b3bc191253843fb29068769f09fed81a464e622", + "s": "0x722660636b83fcac33759285b9704a5976b7cf9aeeceacab451702ff454469dc", + "v": "0xc172" + }, + "signatureBerlin": { + "r": "0x7c8b37dd82c37b9783d328b99528bdbf4abdc7956d5e3da3a65f4a165e4acb74", + "s": "0x4db2486fbb725825041d85e055d0adf75e02790041d668d13662717695436410", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x9f9feb4b5bf570aa4f121fcc51de36dd7de80d0e4398f3dc99a6a615d12570c9", + "s": "0x5d6f01ed28fda456c5f63f5f652735161cb5eede641262e296d62d94c7b628f8", + "v": "0x1" + } + }, + { + "name": "random-6", + "transaction": { + "to": "0x47F8627a7925083e80e0d94dBB979ce2c44A2c74", + "nonce": 432, + "gasLimit": "0xa1fca9f195", + "gasPrice": "0x39", + "maxFeePerGas": "0x98501809f1", + "maxPriorityFeePerGas": "0xfb", + "data": "0xc90411dca095641b87f3229df9e7613b2e73477c57fc4e28b4c06f436f9825b5aa4d839c3d07a8", + "value": "0x79ef27", + "accessList": [], + "chainId": "0xf76e64" + }, + "privateKey": "0xd9f6e52112da85a6f822054409e83460b9da070ce6c48843e4793c5720ad6910", + "unsignedLegacy": "0xf84b8201b03985a1fca9f1959447f8627a7925083e80e0d94dbb979ce2c44a2c748379ef27a7c90411dca095641b87f3229df9e7613b2e73477c57fc4e28b4c06f436f9825b5aa4d839c3d07a8", + "unsignedEip155": "0xf8518201b03985a1fca9f1959447f8627a7925083e80e0d94dbb979ce2c44a2c748379ef27a7c90411dca095641b87f3229df9e7613b2e73477c57fc4e28b4c06f436f9825b5aa4d839c3d07a883f76e648080", + "unsignedBerlin": "0x01f85083f76e648201b03985a1fca9f1959447f8627a7925083e80e0d94dbb979ce2c44a2c748379ef27a7c90411dca095641b87f3229df9e7613b2e73477c57fc4e28b4c06f436f9825b5aa4d839c3d07a8c0", + "unsignedLondon": "0x02f85783f76e648201b081fb8598501809f185a1fca9f1959447f8627a7925083e80e0d94dbb979ce2c44a2c748379ef27a7c90411dca095641b87f3229df9e7613b2e73477c57fc4e28b4c06f436f9825b5aa4d839c3d07a8c0", + "signedLegacy": "0xf88e8201b03985a1fca9f1959447f8627a7925083e80e0d94dbb979ce2c44a2c748379ef27a7c90411dca095641b87f3229df9e7613b2e73477c57fc4e28b4c06f436f9825b5aa4d839c3d07a81ba091ad22bc10dbc50ad469a26c6be65d65213a54b5de2ea949f8b7f47ee641d0aba03e69a58405b8bdcd6e41097b828b222b02fa2bfd6b001616a15241c41275c2df", + "signedEip155": "0xf8928201b03985a1fca9f1959447f8627a7925083e80e0d94dbb979ce2c44a2c748379ef27a7c90411dca095641b87f3229df9e7613b2e73477c57fc4e28b4c06f436f9825b5aa4d839c3d07a88401eedceba0b19933ddedae4fae6d63ed9ea7a4df4d1e48be652394203245429ef61e2728d6a033d8ab838c3eb536725ccd32ce73e75551eb660acd0608344887e838c41d7e3f", + "signedBerlin": "0x01f89383f76e648201b03985a1fca9f1959447f8627a7925083e80e0d94dbb979ce2c44a2c748379ef27a7c90411dca095641b87f3229df9e7613b2e73477c57fc4e28b4c06f436f9825b5aa4d839c3d07a8c001a0538d5ec11ad5bc2755057e684243d103469145984c437d317a231cd4ed7f891fa02f6051be9067d1e9322dc667dbd22f423a27354134b5070819f262eb85e8f754", + "signedLondon": "0x02f89a83f76e648201b081fb8598501809f185a1fca9f1959447f8627a7925083e80e0d94dbb979ce2c44a2c748379ef27a7c90411dca095641b87f3229df9e7613b2e73477c57fc4e28b4c06f436f9825b5aa4d839c3d07a8c080a07e88de3723e5ed269a26ebb27c5edf39da43e0246506f7c20861c286ed2e0118a0304a806691fee1223b8b505dc97142ad8eefaf949a7d8828e0483659accecfdd", + "signatureLegacy": { + "r": "0x91ad22bc10dbc50ad469a26c6be65d65213a54b5de2ea949f8b7f47ee641d0ab", + "s": "0x3e69a58405b8bdcd6e41097b828b222b02fa2bfd6b001616a15241c41275c2df", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xb19933ddedae4fae6d63ed9ea7a4df4d1e48be652394203245429ef61e2728d6", + "s": "0x33d8ab838c3eb536725ccd32ce73e75551eb660acd0608344887e838c41d7e3f", + "v": "0x1eedceb" + }, + "signatureBerlin": { + "r": "0x538d5ec11ad5bc2755057e684243d103469145984c437d317a231cd4ed7f891f", + "s": "0x2f6051be9067d1e9322dc667dbd22f423a27354134b5070819f262eb85e8f754", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x7e88de3723e5ed269a26ebb27c5edf39da43e0246506f7c20861c286ed2e0118", + "s": "0x304a806691fee1223b8b505dc97142ad8eefaf949a7d8828e0483659accecfdd", + "v": "0x0" + } + }, + { + "name": "random-7", + "transaction": { + "to": "0xD6E75AAf5C27963b31DD4Ad638e4C1d07b2Cc010", + "nonce": 667, + "gasLimit": "0x95ead5c7", + "gasPrice": "0x86", + "maxFeePerGas": "0x2e54dcae", + "maxPriorityFeePerGas": "0x0cb9", + "data": "0xe931d4333e6bb3d32f215bfdb13209a0905f740b180cadcea26405d9c79e108e50e87b78a1e7192c313e22f09632ed2882774f8e7536b7dfa987f7d063fc8db54ad5bd8d4977910294", + "value": "0x632af6c3", + "accessList": [ + { + "address": "0xD0a4e08ACDA2A8B3AE50Db94DB3246C4a2F34b60", + "storageKeys": [ + "0xe85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11", + "0x2c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0b" + ] + }, + { + "address": "0x3e4eE3DE26502A40C8dc33886c1bB7e079916194", + "storageKeys": [ + "0xe85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11", + "0x2c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0b" + ] + }, + { + "address": "0xe54E80bd490910C719D5F11602a97FaE4D5C0F11", + "storageKeys": [ + "0xe85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11", + "0x2c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0b" + ] + }, + { + "address": "0x6D1fd21ed3E7D4DE1F58361cB78De7a882dEcC79", + "storageKeys": [ + "0xe85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11", + "0x2c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0b" + ] + } + ], + "chainId": "0x295d" + }, + "privateKey": "0xa6fe9bfe96da66b7788f98b3107c588bee30ccc844e129a7772df540c3193239", + "unsignedLegacy": "0xf86f82029b81868495ead5c794d6e75aaf5c27963b31dd4ad638e4c1d07b2cc01084632af6c3b849e931d4333e6bb3d32f215bfdb13209a0905f740b180cadcea26405d9c79e108e50e87b78a1e7192c313e22f09632ed2882774f8e7536b7dfa987f7d063fc8db54ad5bd8d4977910294", + "unsignedEip155": "0xf87482029b81868495ead5c794d6e75aaf5c27963b31dd4ad638e4c1d07b2cc01084632af6c3b849e931d4333e6bb3d32f215bfdb13209a0905f740b180cadcea26405d9c79e108e50e87b78a1e7192c313e22f09632ed2882774f8e7536b7dfa987f7d063fc8db54ad5bd8d497791029482295d8080", + "unsignedBerlin": "0x01f901e182295d82029b81868495ead5c794d6e75aaf5c27963b31dd4ad638e4c1d07b2cc01084632af6c3b849e931d4333e6bb3d32f215bfdb13209a0905f740b180cadcea26405d9c79e108e50e87b78a1e7192c313e22f09632ed2882774f8e7536b7dfa987f7d063fc8db54ad5bd8d4977910294f9016cf85994d0a4e08acda2a8b3ae50db94db3246c4a2f34b60f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0bf859943e4ee3de26502a40c8dc33886c1bb7e079916194f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0bf85994e54e80bd490910c719d5f11602a97fae4d5c0f11f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0bf859946d1fd21ed3e7d4de1f58361cb78de7a882decc79f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0b", + "unsignedLondon": "0x02f901e782295d82029b820cb9842e54dcae8495ead5c794d6e75aaf5c27963b31dd4ad638e4c1d07b2cc01084632af6c3b849e931d4333e6bb3d32f215bfdb13209a0905f740b180cadcea26405d9c79e108e50e87b78a1e7192c313e22f09632ed2882774f8e7536b7dfa987f7d063fc8db54ad5bd8d4977910294f9016cf85994d0a4e08acda2a8b3ae50db94db3246c4a2f34b60f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0bf859943e4ee3de26502a40c8dc33886c1bb7e079916194f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0bf85994e54e80bd490910c719d5f11602a97fae4d5c0f11f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0bf859946d1fd21ed3e7d4de1f58361cb78de7a882decc79f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0b", + "signedLegacy": "0xf8b282029b81868495ead5c794d6e75aaf5c27963b31dd4ad638e4c1d07b2cc01084632af6c3b849e931d4333e6bb3d32f215bfdb13209a0905f740b180cadcea26405d9c79e108e50e87b78a1e7192c313e22f09632ed2882774f8e7536b7dfa987f7d063fc8db54ad5bd8d49779102941ca02bacdc3053183b5f2a6f56ed6c2f126a6bbb592ef64d912bc704293d5620e188a0163d3e7cb0ad4ab63d10314c24728248699e5f5acebf84e84d67ca21ebe835ca", + "signedEip155": "0xf8b482029b81868495ead5c794d6e75aaf5c27963b31dd4ad638e4c1d07b2cc01084632af6c3b849e931d4333e6bb3d32f215bfdb13209a0905f740b180cadcea26405d9c79e108e50e87b78a1e7192c313e22f09632ed2882774f8e7536b7dfa987f7d063fc8db54ad5bd8d49779102948252dda0988356e8e6b000200035901fa00b736677e25d01022d8e7ff0c6f9a9f44cb530a01d04ca133497f2a7f07a36022a132027df576c9d53935fee792fa6a01e2d18d0", + "signedBerlin": "0x01f9022482295d82029b81868495ead5c794d6e75aaf5c27963b31dd4ad638e4c1d07b2cc01084632af6c3b849e931d4333e6bb3d32f215bfdb13209a0905f740b180cadcea26405d9c79e108e50e87b78a1e7192c313e22f09632ed2882774f8e7536b7dfa987f7d063fc8db54ad5bd8d4977910294f9016cf85994d0a4e08acda2a8b3ae50db94db3246c4a2f34b60f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0bf859943e4ee3de26502a40c8dc33886c1bb7e079916194f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0bf85994e54e80bd490910c719d5f11602a97fae4d5c0f11f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0bf859946d1fd21ed3e7d4de1f58361cb78de7a882decc79f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0b01a0f243d534dfae5cfb18cf59a41daa31520d91f03fc9b5830ee8a512dca82bbdcda02507b456d89080c847848fa2199998ffc363cbb0d4835ce8d03621980a3f135a", + "signedLondon": "0x02f9022a82295d82029b820cb9842e54dcae8495ead5c794d6e75aaf5c27963b31dd4ad638e4c1d07b2cc01084632af6c3b849e931d4333e6bb3d32f215bfdb13209a0905f740b180cadcea26405d9c79e108e50e87b78a1e7192c313e22f09632ed2882774f8e7536b7dfa987f7d063fc8db54ad5bd8d4977910294f9016cf85994d0a4e08acda2a8b3ae50db94db3246c4a2f34b60f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0bf859943e4ee3de26502a40c8dc33886c1bb7e079916194f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0bf85994e54e80bd490910c719d5f11602a97fae4d5c0f11f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0bf859946d1fd21ed3e7d4de1f58361cb78de7a882decc79f842a0e85938a8c29ab7b82264cc2e0822673fe17637364d6b384eb49f89e1adf61a11a02c10ec7831da9a49dbf10818882d783f6511dda96c06b8ad2999aeb9f9f82d0b80a08e1d67786ffd5edb50e2aff66566c76a1523e9dcabc667b92f540f536d47bccea05d6a00e50ad155e59fbba841afda7592ec16788da4cfd895b447f4c13197d1ab", + "signatureLegacy": { + "r": "0x2bacdc3053183b5f2a6f56ed6c2f126a6bbb592ef64d912bc704293d5620e188", + "s": "0x163d3e7cb0ad4ab63d10314c24728248699e5f5acebf84e84d67ca21ebe835ca", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x988356e8e6b000200035901fa00b736677e25d01022d8e7ff0c6f9a9f44cb530", + "s": "0x1d04ca133497f2a7f07a36022a132027df576c9d53935fee792fa6a01e2d18d0", + "v": "0x52dd" + }, + "signatureBerlin": { + "r": "0xf243d534dfae5cfb18cf59a41daa31520d91f03fc9b5830ee8a512dca82bbdcd", + "s": "0x2507b456d89080c847848fa2199998ffc363cbb0d4835ce8d03621980a3f135a", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x8e1d67786ffd5edb50e2aff66566c76a1523e9dcabc667b92f540f536d47bcce", + "s": "0x5d6a00e50ad155e59fbba841afda7592ec16788da4cfd895b447f4c13197d1ab", + "v": "0x0" + } + }, + { + "name": "random-9", + "transaction": { + "to": "0x671a63481F6AdF6E231296c3ec838D21919b5Ec0", + "nonce": 776, + "gasLimit": "0x905469", + "gasPrice": "0xe8", + "maxFeePerGas": "0x64b085b92ba07f", + "maxPriorityFeePerGas": "0xbe", + "data": "0x6e8a5785fbcffa9d6303b7a22818c0c67aa5e3b1c097aa35af45f95038224f7b1e0724b14a2de88e07469fa80c6c1e172353269d5bd75af8c91b77585a6aa1b99c462b9fbf7010a9b8f4194260bfb307da9ba5b6202da6f0ef6f", + "value": "0x4f88", + "accessList": [], + "chainId": "0x348f3fcb" + }, + "privateKey": "0x63dd633e51d725e1f444b9a724729fb8bd052ec4737eceba804e846a32b4530c", + "unsignedLegacy": "0xf87d82030881e88390546994671a63481f6adf6e231296c3ec838d21919b5ec0824f88b85a6e8a5785fbcffa9d6303b7a22818c0c67aa5e3b1c097aa35af45f95038224f7b1e0724b14a2de88e07469fa80c6c1e172353269d5bd75af8c91b77585a6aa1b99c462b9fbf7010a9b8f4194260bfb307da9ba5b6202da6f0ef6f", + "unsignedEip155": "0xf88482030881e88390546994671a63481f6adf6e231296c3ec838d21919b5ec0824f88b85a6e8a5785fbcffa9d6303b7a22818c0c67aa5e3b1c097aa35af45f95038224f7b1e0724b14a2de88e07469fa80c6c1e172353269d5bd75af8c91b77585a6aa1b99c462b9fbf7010a9b8f4194260bfb307da9ba5b6202da6f0ef6f84348f3fcb8080", + "unsignedBerlin": "0x01f88384348f3fcb82030881e88390546994671a63481f6adf6e231296c3ec838d21919b5ec0824f88b85a6e8a5785fbcffa9d6303b7a22818c0c67aa5e3b1c097aa35af45f95038224f7b1e0724b14a2de88e07469fa80c6c1e172353269d5bd75af8c91b77585a6aa1b99c462b9fbf7010a9b8f4194260bfb307da9ba5b6202da6f0ef6fc0", + "unsignedLondon": "0x02f88b84348f3fcb82030881be8764b085b92ba07f8390546994671a63481f6adf6e231296c3ec838d21919b5ec0824f88b85a6e8a5785fbcffa9d6303b7a22818c0c67aa5e3b1c097aa35af45f95038224f7b1e0724b14a2de88e07469fa80c6c1e172353269d5bd75af8c91b77585a6aa1b99c462b9fbf7010a9b8f4194260bfb307da9ba5b6202da6f0ef6fc0", + "signedLegacy": "0xf8c082030881e88390546994671a63481f6adf6e231296c3ec838d21919b5ec0824f88b85a6e8a5785fbcffa9d6303b7a22818c0c67aa5e3b1c097aa35af45f95038224f7b1e0724b14a2de88e07469fa80c6c1e172353269d5bd75af8c91b77585a6aa1b99c462b9fbf7010a9b8f4194260bfb307da9ba5b6202da6f0ef6f1ba0d567c29e1775043d150df4e740d0e581d723f4950b2d35a5adb5a3a1b527686ea00fbcddbd1e8f33eb73a957c985b1ab85c333a42074c8801fe230ace1f246f826", + "signedEip155": "0xf8c482030881e88390546994671a63481f6adf6e231296c3ec838d21919b5ec0824f88b85a6e8a5785fbcffa9d6303b7a22818c0c67aa5e3b1c097aa35af45f95038224f7b1e0724b14a2de88e07469fa80c6c1e172353269d5bd75af8c91b77585a6aa1b99c462b9fbf7010a9b8f4194260bfb307da9ba5b6202da6f0ef6f84691e7fb9a0900464b1bcd8e581911e8761960913c5b23ef063886533b4a9759c74ffcd4d80a0319be70fd62d7b2722aa1572b456755ae71fc7d1d3c02cdaafebbf4941033409", + "signedBerlin": "0x01f8c684348f3fcb82030881e88390546994671a63481f6adf6e231296c3ec838d21919b5ec0824f88b85a6e8a5785fbcffa9d6303b7a22818c0c67aa5e3b1c097aa35af45f95038224f7b1e0724b14a2de88e07469fa80c6c1e172353269d5bd75af8c91b77585a6aa1b99c462b9fbf7010a9b8f4194260bfb307da9ba5b6202da6f0ef6fc080a0d2418f0ef98efb8120c5f35803fcc2b0def21e7bad27537fa8be144169393df7a0561b3ee3efe7f4cc07ff4289897c8b316eb6d4de32f60eddd71833d70c13c488", + "signedLondon": "0x02f8ce84348f3fcb82030881be8764b085b92ba07f8390546994671a63481f6adf6e231296c3ec838d21919b5ec0824f88b85a6e8a5785fbcffa9d6303b7a22818c0c67aa5e3b1c097aa35af45f95038224f7b1e0724b14a2de88e07469fa80c6c1e172353269d5bd75af8c91b77585a6aa1b99c462b9fbf7010a9b8f4194260bfb307da9ba5b6202da6f0ef6fc080a04dfe6f43e3da767dcb2d717d7555f67448a47d8329ba40ba0b25e19ef217837da01612656de7ebf9929a66b7479a63927bb895b225af797adf3d32a890b279ab82", + "signatureLegacy": { + "r": "0xd567c29e1775043d150df4e740d0e581d723f4950b2d35a5adb5a3a1b527686e", + "s": "0x0fbcddbd1e8f33eb73a957c985b1ab85c333a42074c8801fe230ace1f246f826", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x900464b1bcd8e581911e8761960913c5b23ef063886533b4a9759c74ffcd4d80", + "s": "0x319be70fd62d7b2722aa1572b456755ae71fc7d1d3c02cdaafebbf4941033409", + "v": "0x691e7fb9" + }, + "signatureBerlin": { + "r": "0xd2418f0ef98efb8120c5f35803fcc2b0def21e7bad27537fa8be144169393df7", + "s": "0x561b3ee3efe7f4cc07ff4289897c8b316eb6d4de32f60eddd71833d70c13c488", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x4dfe6f43e3da767dcb2d717d7555f67448a47d8329ba40ba0b25e19ef217837d", + "s": "0x1612656de7ebf9929a66b7479a63927bb895b225af797adf3d32a890b279ab82", + "v": "0x0" + } + }, + { + "name": "random-10", + "transaction": { + "to": "0xe80B2a2b7a84c886319faB83dF55E63C7539D2E7", + "nonce": 11, + "gasLimit": "0x66745b0460", + "gasPrice": "0x19b27a8a", + "maxFeePerGas": "0x9bc10525", + "maxPriorityFeePerGas": "0xde6421", + "data": "0xc67a6a742250a5b9144dbfac7342e66a31df07bc2de714d5700d4a328600e6c274a8713cd12df6c64ca6f8088e1a49108dc171457cfcc9a4daf0625786bdf689e568fd61a63a953184", + "value": "0x452f964f", + "accessList": [ + { + "address": "0x9C1010eBD297f0af2110e4Be1356a99e088B70b0", + "storageKeys": [ + "0x8f4489956d5c84285dd2337de059733fd7caff5e3bc562d2e19f4c8416f7adcd", + "0xecacb47c7f3b429a188ae196d5f6905999bdd4909022d3d5b3566399ef44b513" + ] + } + ], + "chainId": "0x4e33268bd8" + }, + "privateKey": "0x937f09851dd891844eee05f469dc776fe07a398b47ee3d064460f74fb00b8454", + "unsignedLegacy": "0xf8710b8419b27a8a8566745b046094e80b2a2b7a84c886319fab83df55e63c7539d2e784452f964fb849c67a6a742250a5b9144dbfac7342e66a31df07bc2de714d5700d4a328600e6c274a8713cd12df6c64ca6f8088e1a49108dc171457cfcc9a4daf0625786bdf689e568fd61a63a953184", + "unsignedEip155": "0xf8790b8419b27a8a8566745b046094e80b2a2b7a84c886319fab83df55e63c7539d2e784452f964fb849c67a6a742250a5b9144dbfac7342e66a31df07bc2de714d5700d4a328600e6c274a8713cd12df6c64ca6f8088e1a49108dc171457cfcc9a4daf0625786bdf689e568fd61a63a953184854e33268bd88080", + "unsignedBerlin": "0x01f8d4854e33268bd80b8419b27a8a8566745b046094e80b2a2b7a84c886319fab83df55e63c7539d2e784452f964fb849c67a6a742250a5b9144dbfac7342e66a31df07bc2de714d5700d4a328600e6c274a8713cd12df6c64ca6f8088e1a49108dc171457cfcc9a4daf0625786bdf689e568fd61a63a953184f85bf859949c1010ebd297f0af2110e4be1356a99e088b70b0f842a08f4489956d5c84285dd2337de059733fd7caff5e3bc562d2e19f4c8416f7adcda0ecacb47c7f3b429a188ae196d5f6905999bdd4909022d3d5b3566399ef44b513", + "unsignedLondon": "0x02f8d8854e33268bd80b83de6421849bc105258566745b046094e80b2a2b7a84c886319fab83df55e63c7539d2e784452f964fb849c67a6a742250a5b9144dbfac7342e66a31df07bc2de714d5700d4a328600e6c274a8713cd12df6c64ca6f8088e1a49108dc171457cfcc9a4daf0625786bdf689e568fd61a63a953184f85bf859949c1010ebd297f0af2110e4be1356a99e088b70b0f842a08f4489956d5c84285dd2337de059733fd7caff5e3bc562d2e19f4c8416f7adcda0ecacb47c7f3b429a188ae196d5f6905999bdd4909022d3d5b3566399ef44b513", + "signedLegacy": "0xf8b40b8419b27a8a8566745b046094e80b2a2b7a84c886319fab83df55e63c7539d2e784452f964fb849c67a6a742250a5b9144dbfac7342e66a31df07bc2de714d5700d4a328600e6c274a8713cd12df6c64ca6f8088e1a49108dc171457cfcc9a4daf0625786bdf689e568fd61a63a9531841ba0f9c1a46fcbbeaa4915050ffc5e33043e372ab5b8e55e40c99bcea824b07ae62ba03a78b26033934d062ab52ac1b527df5b27bd08ced030d392832c89ca779dcc93", + "signedEip155": "0xf8b90b8419b27a8a8566745b046094e80b2a2b7a84c886319fab83df55e63c7539d2e784452f964fb849c67a6a742250a5b9144dbfac7342e66a31df07bc2de714d5700d4a328600e6c274a8713cd12df6c64ca6f8088e1a49108dc171457cfcc9a4daf0625786bdf689e568fd61a63a953184859c664d17d4a008a210072105a1ad68dc2b2811abd43dcd1dabaa2c2d2a2f669fb0dea7903535a028817f47aa0014375ed11fde0b733a5b3b648e5ffb2f66e3b4a0fc8db3000bcf", + "signedBerlin": "0x01f90117854e33268bd80b8419b27a8a8566745b046094e80b2a2b7a84c886319fab83df55e63c7539d2e784452f964fb849c67a6a742250a5b9144dbfac7342e66a31df07bc2de714d5700d4a328600e6c274a8713cd12df6c64ca6f8088e1a49108dc171457cfcc9a4daf0625786bdf689e568fd61a63a953184f85bf859949c1010ebd297f0af2110e4be1356a99e088b70b0f842a08f4489956d5c84285dd2337de059733fd7caff5e3bc562d2e19f4c8416f7adcda0ecacb47c7f3b429a188ae196d5f6905999bdd4909022d3d5b3566399ef44b51380a0a972d4365dac9b214ae1c1cdbdb70d5c10877eac1edaee2398012e6f084b99fca0184054b4a0b98483664b9469564eb21a28439982883f61bb1e538e968f74ce9d", + "signedLondon": "0x02f9011b854e33268bd80b83de6421849bc105258566745b046094e80b2a2b7a84c886319fab83df55e63c7539d2e784452f964fb849c67a6a742250a5b9144dbfac7342e66a31df07bc2de714d5700d4a328600e6c274a8713cd12df6c64ca6f8088e1a49108dc171457cfcc9a4daf0625786bdf689e568fd61a63a953184f85bf859949c1010ebd297f0af2110e4be1356a99e088b70b0f842a08f4489956d5c84285dd2337de059733fd7caff5e3bc562d2e19f4c8416f7adcda0ecacb47c7f3b429a188ae196d5f6905999bdd4909022d3d5b3566399ef44b51301a0abb1f9fd744bd588e3cc73caf61ea9a023aa8b486356f5bc97910ca01fe6453ca062ae4642f50df606c7587957e497e3867510554f88ba57a2bb93a4f8883329e5", + "signatureLegacy": { + "r": "0xf9c1a46fcbbeaa4915050ffc5e33043e372ab5b8e55e40c99bcea824b07ae62b", + "s": "0x3a78b26033934d062ab52ac1b527df5b27bd08ced030d392832c89ca779dcc93", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x08a210072105a1ad68dc2b2811abd43dcd1dabaa2c2d2a2f669fb0dea7903535", + "s": "0x28817f47aa0014375ed11fde0b733a5b3b648e5ffb2f66e3b4a0fc8db3000bcf", + "v": "0x9c664d17d4" + }, + "signatureBerlin": { + "r": "0xa972d4365dac9b214ae1c1cdbdb70d5c10877eac1edaee2398012e6f084b99fc", + "s": "0x184054b4a0b98483664b9469564eb21a28439982883f61bb1e538e968f74ce9d", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xabb1f9fd744bd588e3cc73caf61ea9a023aa8b486356f5bc97910ca01fe6453c", + "s": "0x62ae4642f50df606c7587957e497e3867510554f88ba57a2bb93a4f8883329e5", + "v": "0x1" + } + }, + { + "name": "random-12", + "transaction": { + "to": "0x4F18B878B82C8931c4A6d67FC28b857AaFf6D764", + "nonce": 547, + "gasLimit": "0xfa26c05691", + "gasPrice": "0x892d19ea64", + "maxFeePerGas": "0x6bf86f84", + "maxPriorityFeePerGas": "0xf627", + "data": "0x57d10e77f6d8cd44acf5914b7b73eca98b9afe235e07b9db2d1712c4adc287e3e474a377404de19203f5127b676c88c839a76e15e665f183709a3460025556e5fd5f2a2f17f8", + "value": "0x64660ccd", + "accessList": [ + { + "address": "0x275677ef49D8315ed641fe3b6519C4dC3f099112", + "storageKeys": [ + "0x819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457b", + "0xb76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6d" + ] + }, + { + "address": "0xa02363D8A2921bF57F7Dc48B42Ccc04548554E81", + "storageKeys": [ + "0x819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457b", + "0xb76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6d" + ] + }, + { + "address": "0x8D6796be448CEFf2333157dEE56C74AF0aFb0BD5", + "storageKeys": [ + "0x819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457b", + "0xb76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6d" + ] + } + ], + "chainId": "0x44af2c" + }, + "privateKey": "0x3d04ff4d2657142a58d3cc787e089ca7f20a6b66776ed5b04dc9d4dceef253d7", + "unsignedLegacy": "0xf87182022385892d19ea6485fa26c05691944f18b878b82c8931c4a6d67fc28b857aaff6d7648464660ccdb84657d10e77f6d8cd44acf5914b7b73eca98b9afe235e07b9db2d1712c4adc287e3e474a377404de19203f5127b676c88c839a76e15e665f183709a3460025556e5fd5f2a2f17f8", + "unsignedEip155": "0xf87782022385892d19ea6485fa26c05691944f18b878b82c8931c4a6d67fc28b857aaff6d7648464660ccdb84657d10e77f6d8cd44acf5914b7b73eca98b9afe235e07b9db2d1712c4adc287e3e474a377404de19203f5127b676c88c839a76e15e665f183709a3460025556e5fd5f2a2f17f88344af2c8080", + "unsignedBerlin": "0x01f901898344af2c82022385892d19ea6485fa26c05691944f18b878b82c8931c4a6d67fc28b857aaff6d7648464660ccdb84657d10e77f6d8cd44acf5914b7b73eca98b9afe235e07b9db2d1712c4adc287e3e474a377404de19203f5127b676c88c839a76e15e665f183709a3460025556e5fd5f2a2f17f8f90111f85994275677ef49d8315ed641fe3b6519c4dc3f099112f842a0819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457ba0b76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6df85994a02363d8a2921bf57f7dc48b42ccc04548554e81f842a0819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457ba0b76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6df859948d6796be448ceff2333157dee56c74af0afb0bd5f842a0819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457ba0b76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6d", + "unsignedLondon": "0x02f9018b8344af2c82022382f627846bf86f8485fa26c05691944f18b878b82c8931c4a6d67fc28b857aaff6d7648464660ccdb84657d10e77f6d8cd44acf5914b7b73eca98b9afe235e07b9db2d1712c4adc287e3e474a377404de19203f5127b676c88c839a76e15e665f183709a3460025556e5fd5f2a2f17f8f90111f85994275677ef49d8315ed641fe3b6519c4dc3f099112f842a0819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457ba0b76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6df85994a02363d8a2921bf57f7dc48b42ccc04548554e81f842a0819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457ba0b76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6df859948d6796be448ceff2333157dee56c74af0afb0bd5f842a0819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457ba0b76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6d", + "signedLegacy": "0xf8b482022385892d19ea6485fa26c05691944f18b878b82c8931c4a6d67fc28b857aaff6d7648464660ccdb84657d10e77f6d8cd44acf5914b7b73eca98b9afe235e07b9db2d1712c4adc287e3e474a377404de19203f5127b676c88c839a76e15e665f183709a3460025556e5fd5f2a2f17f81ca01c1a043ba56d5a6edec9efd4b24695f996204caec12978d32bf086d8e21bcf96a04a5144d22ab0ddd5335bc3e1b22cd24e66bd742865f1a4447e2675ee00a2227f", + "signedEip155": "0xf8b782022385892d19ea6485fa26c05691944f18b878b82c8931c4a6d67fc28b857aaff6d7648464660ccdb84657d10e77f6d8cd44acf5914b7b73eca98b9afe235e07b9db2d1712c4adc287e3e474a377404de19203f5127b676c88c839a76e15e665f183709a3460025556e5fd5f2a2f17f883895e7ca06d75cb007c3b91b7465c095e28b841d93da110bbb66280a0f5920083ad4e80f2a026b07e9427fd6dc320c23ced73fb8aae9872af808f20db04f0bb67287da0373b", + "signedBerlin": "0x01f901cc8344af2c82022385892d19ea6485fa26c05691944f18b878b82c8931c4a6d67fc28b857aaff6d7648464660ccdb84657d10e77f6d8cd44acf5914b7b73eca98b9afe235e07b9db2d1712c4adc287e3e474a377404de19203f5127b676c88c839a76e15e665f183709a3460025556e5fd5f2a2f17f8f90111f85994275677ef49d8315ed641fe3b6519c4dc3f099112f842a0819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457ba0b76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6df85994a02363d8a2921bf57f7dc48b42ccc04548554e81f842a0819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457ba0b76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6df859948d6796be448ceff2333157dee56c74af0afb0bd5f842a0819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457ba0b76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6d80a0f69b776f4eee48cf9a220abb4e132d2cd915b320e409fe99376535aa6984f69ea045b9071a002c820e368070525657f2cd47053ea600d24c1da75b7adbd076cfcf", + "signedLondon": "0x02f901ce8344af2c82022382f627846bf86f8485fa26c05691944f18b878b82c8931c4a6d67fc28b857aaff6d7648464660ccdb84657d10e77f6d8cd44acf5914b7b73eca98b9afe235e07b9db2d1712c4adc287e3e474a377404de19203f5127b676c88c839a76e15e665f183709a3460025556e5fd5f2a2f17f8f90111f85994275677ef49d8315ed641fe3b6519c4dc3f099112f842a0819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457ba0b76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6df85994a02363d8a2921bf57f7dc48b42ccc04548554e81f842a0819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457ba0b76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6df859948d6796be448ceff2333157dee56c74af0afb0bd5f842a0819da32335b67b104a5c786c41f2811e1167a1245b4998eb9297d0b777db457ba0b76e298e9f4a7cb7e30809076edbb99bcbc310ec27d7a563cbc24cddd0a2ae6d01a074ffa09bd37c038326cebdd9794d5f90fe95aa9210e903fb6a5c44a735bbafc6a01605e0f1db258100a878445341892825483f14cfa7b9bde7bd001f4f3e6eed4a", + "signatureLegacy": { + "r": "0x1c1a043ba56d5a6edec9efd4b24695f996204caec12978d32bf086d8e21bcf96", + "s": "0x4a5144d22ab0ddd5335bc3e1b22cd24e66bd742865f1a4447e2675ee00a2227f", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x6d75cb007c3b91b7465c095e28b841d93da110bbb66280a0f5920083ad4e80f2", + "s": "0x26b07e9427fd6dc320c23ced73fb8aae9872af808f20db04f0bb67287da0373b", + "v": "0x895e7c" + }, + "signatureBerlin": { + "r": "0xf69b776f4eee48cf9a220abb4e132d2cd915b320e409fe99376535aa6984f69e", + "s": "0x45b9071a002c820e368070525657f2cd47053ea600d24c1da75b7adbd076cfcf", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x74ffa09bd37c038326cebdd9794d5f90fe95aa9210e903fb6a5c44a735bbafc6", + "s": "0x1605e0f1db258100a878445341892825483f14cfa7b9bde7bd001f4f3e6eed4a", + "v": "0x1" + } + }, + { + "name": "random-14", + "transaction": { + "to": "0xd4Ed79414A9F8bF363E9CAaa5A74380716F7dBE0", + "nonce": 355, + "gasLimit": "0xc3393abf8e", + "gasPrice": "0x530f336b", + "maxFeePerGas": "0xc4550ba0e2", + "maxPriorityFeePerGas": "0xf9fe", + "data": "0x9421f8e15d313f08424f56798539e338ff345b530bef1256810200922813e50a176ca7e987dbedb94917acfe82", + "value": "0x5590f0f87b", + "accessList": [ + { + "address": "0x3acE6cc41a8DF5B6518B24e6ecd490c13aCfC677", + "storageKeys": [] + }, + { + "address": "0x65F3540A4A7aa93d074A77313622786513f0199d", + "storageKeys": [] + }, + { + "address": "0x0dad5e012C02f680FB256bf6b0e0d9999c8c74A0", + "storageKeys": [] + } + ], + "chainId": "0x602a" + }, + "privateKey": "0x6c268eef2efdb15a96ae69774e732b9214a3ebb03c0fd01602bc7a5fcd21c060", + "unsignedLegacy": "0xf85782016384530f336b85c3393abf8e94d4ed79414a9f8bf363e9caaa5a74380716f7dbe0855590f0f87bad9421f8e15d313f08424f56798539e338ff345b530bef1256810200922813e50a176ca7e987dbedb94917acfe82", + "unsignedEip155": "0xf85c82016384530f336b85c3393abf8e94d4ed79414a9f8bf363e9caaa5a74380716f7dbe0855590f0f87bad9421f8e15d313f08424f56798539e338ff345b530bef1256810200922813e50a176ca7e987dbedb94917acfe8282602a8080", + "unsignedBerlin": "0x01f8a182602a82016384530f336b85c3393abf8e94d4ed79414a9f8bf363e9caaa5a74380716f7dbe0855590f0f87bad9421f8e15d313f08424f56798539e338ff345b530bef1256810200922813e50a176ca7e987dbedb94917acfe82f845d6943ace6cc41a8df5b6518b24e6ecd490c13acfc677c0d69465f3540a4a7aa93d074a77313622786513f0199dc0d6940dad5e012c02f680fb256bf6b0e0d9999c8c74a0c0", + "unsignedLondon": "0x02f8a582602a82016382f9fe85c4550ba0e285c3393abf8e94d4ed79414a9f8bf363e9caaa5a74380716f7dbe0855590f0f87bad9421f8e15d313f08424f56798539e338ff345b530bef1256810200922813e50a176ca7e987dbedb94917acfe82f845d6943ace6cc41a8df5b6518b24e6ecd490c13acfc677c0d69465f3540a4a7aa93d074a77313622786513f0199dc0d6940dad5e012c02f680fb256bf6b0e0d9999c8c74a0c0", + "signedLegacy": "0xf89a82016384530f336b85c3393abf8e94d4ed79414a9f8bf363e9caaa5a74380716f7dbe0855590f0f87bad9421f8e15d313f08424f56798539e338ff345b530bef1256810200922813e50a176ca7e987dbedb94917acfe821ca03e5ece8f862a9b5d42b42c314dceef20c98a55ae8e89e76ea36574f2dbcd0a6fa06cf670f45c89f30ccf175619d7a48c30c0303d723e8c942afe3bf99bb622a365", + "signedEip155": "0xf89c82016384530f336b85c3393abf8e94d4ed79414a9f8bf363e9caaa5a74380716f7dbe0855590f0f87bad9421f8e15d313f08424f56798539e338ff345b530bef1256810200922813e50a176ca7e987dbedb94917acfe8282c077a07984b5662bf52721770ca23a49f719f0dca47263a736a7cb6da28b359c3275d5a0080a94bd846cb4d5d71a41c78f5f4a893f9cd8316a52f3bba02b2e6d5865d13e", + "signedBerlin": "0x01f8e482602a82016384530f336b85c3393abf8e94d4ed79414a9f8bf363e9caaa5a74380716f7dbe0855590f0f87bad9421f8e15d313f08424f56798539e338ff345b530bef1256810200922813e50a176ca7e987dbedb94917acfe82f845d6943ace6cc41a8df5b6518b24e6ecd490c13acfc677c0d69465f3540a4a7aa93d074a77313622786513f0199dc0d6940dad5e012c02f680fb256bf6b0e0d9999c8c74a0c001a0a0983d54539712f6f848fe9fad8631479338d8277207d75ccf4a26ae3ed34e79a00acd07196e5fa670c9109ced9ccf4722f2c33ae49eec06f14ea3766c6d0e7c3e", + "signedLondon": "0x02f8e882602a82016382f9fe85c4550ba0e285c3393abf8e94d4ed79414a9f8bf363e9caaa5a74380716f7dbe0855590f0f87bad9421f8e15d313f08424f56798539e338ff345b530bef1256810200922813e50a176ca7e987dbedb94917acfe82f845d6943ace6cc41a8df5b6518b24e6ecd490c13acfc677c0d69465f3540a4a7aa93d074a77313622786513f0199dc0d6940dad5e012c02f680fb256bf6b0e0d9999c8c74a0c001a0990f968b8f06d13ac77614e1acd01591259050753e76bc7419062bdf6ac71a11a0201883043f4f176b82d7cc14ffd524f28fcf9cc490cea858bacac84d7373261a", + "signatureLegacy": { + "r": "0x3e5ece8f862a9b5d42b42c314dceef20c98a55ae8e89e76ea36574f2dbcd0a6f", + "s": "0x6cf670f45c89f30ccf175619d7a48c30c0303d723e8c942afe3bf99bb622a365", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x7984b5662bf52721770ca23a49f719f0dca47263a736a7cb6da28b359c3275d5", + "s": "0x080a94bd846cb4d5d71a41c78f5f4a893f9cd8316a52f3bba02b2e6d5865d13e", + "v": "0xc077" + }, + "signatureBerlin": { + "r": "0xa0983d54539712f6f848fe9fad8631479338d8277207d75ccf4a26ae3ed34e79", + "s": "0x0acd07196e5fa670c9109ced9ccf4722f2c33ae49eec06f14ea3766c6d0e7c3e", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x990f968b8f06d13ac77614e1acd01591259050753e76bc7419062bdf6ac71a11", + "s": "0x201883043f4f176b82d7cc14ffd524f28fcf9cc490cea858bacac84d7373261a", + "v": "0x1" + } + }, + { + "name": "random-15", + "transaction": { + "to": "0x2C4Ad0E9a08DD6fE31Ba497fd4a893A0C1fc6B34", + "nonce": 252, + "gasLimit": "0x50ef8434", + "gasPrice": "0xd9ca73", + "maxFeePerGas": "0x280244cd52ab", + "maxPriorityFeePerGas": "0x143b17", + "data": "0x59a1b826916e4a012ffaaf5e21251e27317a1f565a716b8ff184d8c689f93f5a7359abcbffd18d7bea36ee123ce5cddbbdd92d", + "value": "0x6f9f", + "accessList": [ + { + "address": "0x3266CE0AB053240CE5d95993d420c6b9a1dA1fDC", + "storageKeys": [ + "0xa0568d48a6cc9e0c92080dec2155382a276181f25c746da97f8199f3a8464211", + "0x80b165a49183e897da692ca460c5c88a0597e5e4ad7b43471bac25bfd9a780e0", + "0xa628e4d1cfbcc69964473b21b3df585f15eca27bdd2e0c0d7e2f1db3e2c0a1f8", + "0x35167ab9f9061b5f986f5c960aebe912340a5a72935aa334afa8fbfe586d05b1" + ] + }, + { + "address": "0xf199b9f871065E2E18291CdeC3BF7C1eD32FBa0a", + "storageKeys": [ + "0xa0568d48a6cc9e0c92080dec2155382a276181f25c746da97f8199f3a8464211", + "0x80b165a49183e897da692ca460c5c88a0597e5e4ad7b43471bac25bfd9a780e0", + "0xa628e4d1cfbcc69964473b21b3df585f15eca27bdd2e0c0d7e2f1db3e2c0a1f8", + "0x35167ab9f9061b5f986f5c960aebe912340a5a72935aa334afa8fbfe586d05b1" + ] + } + ], + "chainId": "0x18314c" + }, + "privateKey": "0xffe260f37af5da6e4a18799bc6b7f0fab7d57bc456346bca7261a53cb04fb48d", + "unsignedLegacy": "0xf85781fc83d9ca738450ef8434942c4ad0e9a08dd6fe31ba497fd4a893a0c1fc6b34826f9fb359a1b826916e4a012ffaaf5e21251e27317a1f565a716b8ff184d8c689f93f5a7359abcbffd18d7bea36ee123ce5cddbbdd92d", + "unsignedEip155": "0xf85d81fc83d9ca738450ef8434942c4ad0e9a08dd6fe31ba497fd4a893a0c1fc6b34826f9fb359a1b826916e4a012ffaaf5e21251e27317a1f565a716b8ff184d8c689f93f5a7359abcbffd18d7bea36ee123ce5cddbbdd92d8318314c8080", + "unsignedBerlin": "0x01f901988318314c81fc83d9ca738450ef8434942c4ad0e9a08dd6fe31ba497fd4a893a0c1fc6b34826f9fb359a1b826916e4a012ffaaf5e21251e27317a1f565a716b8ff184d8c689f93f5a7359abcbffd18d7bea36ee123ce5cddbbdd92df9013af89b943266ce0ab053240ce5d95993d420c6b9a1da1fdcf884a0a0568d48a6cc9e0c92080dec2155382a276181f25c746da97f8199f3a8464211a080b165a49183e897da692ca460c5c88a0597e5e4ad7b43471bac25bfd9a780e0a0a628e4d1cfbcc69964473b21b3df585f15eca27bdd2e0c0d7e2f1db3e2c0a1f8a035167ab9f9061b5f986f5c960aebe912340a5a72935aa334afa8fbfe586d05b1f89b94f199b9f871065e2e18291cdec3bf7c1ed32fba0af884a0a0568d48a6cc9e0c92080dec2155382a276181f25c746da97f8199f3a8464211a080b165a49183e897da692ca460c5c88a0597e5e4ad7b43471bac25bfd9a780e0a0a628e4d1cfbcc69964473b21b3df585f15eca27bdd2e0c0d7e2f1db3e2c0a1f8a035167ab9f9061b5f986f5c960aebe912340a5a72935aa334afa8fbfe586d05b1", + "unsignedLondon": "0x02f9019f8318314c81fc83143b1786280244cd52ab8450ef8434942c4ad0e9a08dd6fe31ba497fd4a893a0c1fc6b34826f9fb359a1b826916e4a012ffaaf5e21251e27317a1f565a716b8ff184d8c689f93f5a7359abcbffd18d7bea36ee123ce5cddbbdd92df9013af89b943266ce0ab053240ce5d95993d420c6b9a1da1fdcf884a0a0568d48a6cc9e0c92080dec2155382a276181f25c746da97f8199f3a8464211a080b165a49183e897da692ca460c5c88a0597e5e4ad7b43471bac25bfd9a780e0a0a628e4d1cfbcc69964473b21b3df585f15eca27bdd2e0c0d7e2f1db3e2c0a1f8a035167ab9f9061b5f986f5c960aebe912340a5a72935aa334afa8fbfe586d05b1f89b94f199b9f871065e2e18291cdec3bf7c1ed32fba0af884a0a0568d48a6cc9e0c92080dec2155382a276181f25c746da97f8199f3a8464211a080b165a49183e897da692ca460c5c88a0597e5e4ad7b43471bac25bfd9a780e0a0a628e4d1cfbcc69964473b21b3df585f15eca27bdd2e0c0d7e2f1db3e2c0a1f8a035167ab9f9061b5f986f5c960aebe912340a5a72935aa334afa8fbfe586d05b1", + "signedLegacy": "0xf89a81fc83d9ca738450ef8434942c4ad0e9a08dd6fe31ba497fd4a893a0c1fc6b34826f9fb359a1b826916e4a012ffaaf5e21251e27317a1f565a716b8ff184d8c689f93f5a7359abcbffd18d7bea36ee123ce5cddbbdd92d1ba0c32aaeca7f3f7d189f6493edfb99452baa5e5a4c3ba136275b92c28a722a59f7a07073e03733555ceb1a3479c3193cfac043530c657b1c26cf2d12ffac912d132d", + "signedEip155": "0xf89d81fc83d9ca738450ef8434942c4ad0e9a08dd6fe31ba497fd4a893a0c1fc6b34826f9fb359a1b826916e4a012ffaaf5e21251e27317a1f565a716b8ff184d8c689f93f5a7359abcbffd18d7bea36ee123ce5cddbbdd92d833062bca02a5acf0ccf63515e394899176fdc70cfc880e8f34ba5199de5baa72e0dc11e8fa07560075eef0250df34dd68a1854864b219ab0972e96e3d70017b21f608c5e928", + "signedBerlin": "0x01f901db8318314c81fc83d9ca738450ef8434942c4ad0e9a08dd6fe31ba497fd4a893a0c1fc6b34826f9fb359a1b826916e4a012ffaaf5e21251e27317a1f565a716b8ff184d8c689f93f5a7359abcbffd18d7bea36ee123ce5cddbbdd92df9013af89b943266ce0ab053240ce5d95993d420c6b9a1da1fdcf884a0a0568d48a6cc9e0c92080dec2155382a276181f25c746da97f8199f3a8464211a080b165a49183e897da692ca460c5c88a0597e5e4ad7b43471bac25bfd9a780e0a0a628e4d1cfbcc69964473b21b3df585f15eca27bdd2e0c0d7e2f1db3e2c0a1f8a035167ab9f9061b5f986f5c960aebe912340a5a72935aa334afa8fbfe586d05b1f89b94f199b9f871065e2e18291cdec3bf7c1ed32fba0af884a0a0568d48a6cc9e0c92080dec2155382a276181f25c746da97f8199f3a8464211a080b165a49183e897da692ca460c5c88a0597e5e4ad7b43471bac25bfd9a780e0a0a628e4d1cfbcc69964473b21b3df585f15eca27bdd2e0c0d7e2f1db3e2c0a1f8a035167ab9f9061b5f986f5c960aebe912340a5a72935aa334afa8fbfe586d05b101a0c46f5930fbf08b22c97615c2d8db15697dfa5d0a269bb91a9afd7ddb7ac44768a066e4c7ad9c783be0dd722b4b85dc6518892f8c632c09b2ec2c0980c84fb897b7", + "signedLondon": "0x02f901e28318314c81fc83143b1786280244cd52ab8450ef8434942c4ad0e9a08dd6fe31ba497fd4a893a0c1fc6b34826f9fb359a1b826916e4a012ffaaf5e21251e27317a1f565a716b8ff184d8c689f93f5a7359abcbffd18d7bea36ee123ce5cddbbdd92df9013af89b943266ce0ab053240ce5d95993d420c6b9a1da1fdcf884a0a0568d48a6cc9e0c92080dec2155382a276181f25c746da97f8199f3a8464211a080b165a49183e897da692ca460c5c88a0597e5e4ad7b43471bac25bfd9a780e0a0a628e4d1cfbcc69964473b21b3df585f15eca27bdd2e0c0d7e2f1db3e2c0a1f8a035167ab9f9061b5f986f5c960aebe912340a5a72935aa334afa8fbfe586d05b1f89b94f199b9f871065e2e18291cdec3bf7c1ed32fba0af884a0a0568d48a6cc9e0c92080dec2155382a276181f25c746da97f8199f3a8464211a080b165a49183e897da692ca460c5c88a0597e5e4ad7b43471bac25bfd9a780e0a0a628e4d1cfbcc69964473b21b3df585f15eca27bdd2e0c0d7e2f1db3e2c0a1f8a035167ab9f9061b5f986f5c960aebe912340a5a72935aa334afa8fbfe586d05b180a0bdebff14388befbaf0d7c8509f82355aafd0cbdad7ba5d721fa6357e239cf380a06efc7089e04a05f4e52b43fb3799e6ebd9274128566e870efef293a9d8624271", + "signatureLegacy": { + "r": "0xc32aaeca7f3f7d189f6493edfb99452baa5e5a4c3ba136275b92c28a722a59f7", + "s": "0x7073e03733555ceb1a3479c3193cfac043530c657b1c26cf2d12ffac912d132d", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x2a5acf0ccf63515e394899176fdc70cfc880e8f34ba5199de5baa72e0dc11e8f", + "s": "0x7560075eef0250df34dd68a1854864b219ab0972e96e3d70017b21f608c5e928", + "v": "0x3062bc" + }, + "signatureBerlin": { + "r": "0xc46f5930fbf08b22c97615c2d8db15697dfa5d0a269bb91a9afd7ddb7ac44768", + "s": "0x66e4c7ad9c783be0dd722b4b85dc6518892f8c632c09b2ec2c0980c84fb897b7", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xbdebff14388befbaf0d7c8509f82355aafd0cbdad7ba5d721fa6357e239cf380", + "s": "0x6efc7089e04a05f4e52b43fb3799e6ebd9274128566e870efef293a9d8624271", + "v": "0x0" + } + }, + { + "name": "random-16", + "transaction": { + "to": "0xb26832F9Eebe1bb94cb67D5C6bABF358d15f834E", + "nonce": 306, + "gasLimit": "0xfb38", + "gasPrice": "0x7029692f45", + "maxFeePerGas": "0xf631d7b0a81f", + "maxPriorityFeePerGas": "0xb5", + "data": "0x3c5c6cbe06f0c46868590f0951afc1b55f38598f5caf4d2f811ed3bbb8a87de83f074bc2cf19ca7225a65533cbe03aed1f43fa7cd1ef178e1ec2de6076d3ec1a22729c8645de5442bc8e3c3c7781d68293d34ae667c247189089a4959ef7c0d35e4600be23b5b059629779", + "value": "0xb3", + "accessList": [ + { + "address": "0x820A408021ed575Bd94e89AF5672C9C4FaAA93AD", + "storageKeys": [] + } + ], + "chainId": "0x03" + }, + "privateKey": "0x504264c14141b98fdad31cff441c443d69458e4033c11eeb0b4928ce9452c5a1", + "unsignedLegacy": "0xf890820132857029692f4582fb3894b26832f9eebe1bb94cb67d5c6babf358d15f834e81b3b86b3c5c6cbe06f0c46868590f0951afc1b55f38598f5caf4d2f811ed3bbb8a87de83f074bc2cf19ca7225a65533cbe03aed1f43fa7cd1ef178e1ec2de6076d3ec1a22729c8645de5442bc8e3c3c7781d68293d34ae667c247189089a4959ef7c0d35e4600be23b5b059629779", + "unsignedEip155": "0xf893820132857029692f4582fb3894b26832f9eebe1bb94cb67d5c6babf358d15f834e81b3b86b3c5c6cbe06f0c46868590f0951afc1b55f38598f5caf4d2f811ed3bbb8a87de83f074bc2cf19ca7225a65533cbe03aed1f43fa7cd1ef178e1ec2de6076d3ec1a22729c8645de5442bc8e3c3c7781d68293d34ae667c247189089a4959ef7c0d35e4600be23b5b059629779038080", + "unsignedBerlin": "0x01f8a903820132857029692f4582fb3894b26832f9eebe1bb94cb67d5c6babf358d15f834e81b3b86b3c5c6cbe06f0c46868590f0951afc1b55f38598f5caf4d2f811ed3bbb8a87de83f074bc2cf19ca7225a65533cbe03aed1f43fa7cd1ef178e1ec2de6076d3ec1a22729c8645de5442bc8e3c3c7781d68293d34ae667c247189089a4959ef7c0d35e4600be23b5b059629779d7d694820a408021ed575bd94e89af5672c9c4faaa93adc0", + "unsignedLondon": "0x02f8ac0382013281b586f631d7b0a81f82fb3894b26832f9eebe1bb94cb67d5c6babf358d15f834e81b3b86b3c5c6cbe06f0c46868590f0951afc1b55f38598f5caf4d2f811ed3bbb8a87de83f074bc2cf19ca7225a65533cbe03aed1f43fa7cd1ef178e1ec2de6076d3ec1a22729c8645de5442bc8e3c3c7781d68293d34ae667c247189089a4959ef7c0d35e4600be23b5b059629779d7d694820a408021ed575bd94e89af5672c9c4faaa93adc0", + "signedLegacy": "0xf8d3820132857029692f4582fb3894b26832f9eebe1bb94cb67d5c6babf358d15f834e81b3b86b3c5c6cbe06f0c46868590f0951afc1b55f38598f5caf4d2f811ed3bbb8a87de83f074bc2cf19ca7225a65533cbe03aed1f43fa7cd1ef178e1ec2de6076d3ec1a22729c8645de5442bc8e3c3c7781d68293d34ae667c247189089a4959ef7c0d35e4600be23b5b0596297791ca09eb445c3fb16cea6f435cca3fd89869351b0152442c77013ee2787ab9363c64fa012daa8f1bbc55ef013376a0b10a608634e9fe03ce051bcf11874132f4b37b1c1", + "signedEip155": "0xf8d3820132857029692f4582fb3894b26832f9eebe1bb94cb67d5c6babf358d15f834e81b3b86b3c5c6cbe06f0c46868590f0951afc1b55f38598f5caf4d2f811ed3bbb8a87de83f074bc2cf19ca7225a65533cbe03aed1f43fa7cd1ef178e1ec2de6076d3ec1a22729c8645de5442bc8e3c3c7781d68293d34ae667c247189089a4959ef7c0d35e4600be23b5b05962977929a03aacb5053d4586e75d7c2f59a16aa559f1b335a1e5b81d5e04ee3f10370e0b78a00c4062ee9c4f3c10b72331bdbbe8b8f896cecaa7f79d291dca3cb6182473d6f3", + "signedBerlin": "0x01f8ec03820132857029692f4582fb3894b26832f9eebe1bb94cb67d5c6babf358d15f834e81b3b86b3c5c6cbe06f0c46868590f0951afc1b55f38598f5caf4d2f811ed3bbb8a87de83f074bc2cf19ca7225a65533cbe03aed1f43fa7cd1ef178e1ec2de6076d3ec1a22729c8645de5442bc8e3c3c7781d68293d34ae667c247189089a4959ef7c0d35e4600be23b5b059629779d7d694820a408021ed575bd94e89af5672c9c4faaa93adc080a0cc30fef0ed85c2d3df5dae8321402cd6ee6cfec5778a191674d295a861be14b3a00874a36ad883e39d70744772063a504ff5887f020ece23afa159ec3d092f7dac", + "signedLondon": "0x02f8ef0382013281b586f631d7b0a81f82fb3894b26832f9eebe1bb94cb67d5c6babf358d15f834e81b3b86b3c5c6cbe06f0c46868590f0951afc1b55f38598f5caf4d2f811ed3bbb8a87de83f074bc2cf19ca7225a65533cbe03aed1f43fa7cd1ef178e1ec2de6076d3ec1a22729c8645de5442bc8e3c3c7781d68293d34ae667c247189089a4959ef7c0d35e4600be23b5b059629779d7d694820a408021ed575bd94e89af5672c9c4faaa93adc080a0fe006607f7e8089cc51cafca96b281cd8c3a95d6f88a5a1175b3a8cc958b6b74a0105054c0d7d120b19d8eb03a67dccd82c2add7b8c04e6438fd30ab6e31cd4364", + "signatureLegacy": { + "r": "0x9eb445c3fb16cea6f435cca3fd89869351b0152442c77013ee2787ab9363c64f", + "s": "0x12daa8f1bbc55ef013376a0b10a608634e9fe03ce051bcf11874132f4b37b1c1", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x3aacb5053d4586e75d7c2f59a16aa559f1b335a1e5b81d5e04ee3f10370e0b78", + "s": "0x0c4062ee9c4f3c10b72331bdbbe8b8f896cecaa7f79d291dca3cb6182473d6f3", + "v": "0x29" + }, + "signatureBerlin": { + "r": "0xcc30fef0ed85c2d3df5dae8321402cd6ee6cfec5778a191674d295a861be14b3", + "s": "0x0874a36ad883e39d70744772063a504ff5887f020ece23afa159ec3d092f7dac", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xfe006607f7e8089cc51cafca96b281cd8c3a95d6f88a5a1175b3a8cc958b6b74", + "s": "0x105054c0d7d120b19d8eb03a67dccd82c2add7b8c04e6438fd30ab6e31cd4364", + "v": "0x0" + } + }, + { + "name": "random-17", + "transaction": { + "to": "0x7b9830530eFD81a5BB21Ed03A1E20ac977c13003", + "nonce": 103, + "gasLimit": "0xa193e9", + "gasPrice": "0xfcb9", + "maxFeePerGas": "0x9288e311910556", + "maxPriorityFeePerGas": "0xac", + "data": "0xee2035dab48b94002f3fa4ba662590127a2fcb9e978af4", + "value": "0xf9eff8", + "accessList": [ + { + "address": "0x469ED43B08A100e13e84b7746fA7206d3A11a5F7", + "storageKeys": [ + "0x434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950", + "0x56498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5", + "0xe83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94e" + ] + }, + { + "address": "0x588C330B029E06B820Dfb1d3a5b774EdcF6a9FEE", + "storageKeys": [ + "0x434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950", + "0x56498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5", + "0xe83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94e" + ] + }, + { + "address": "0xd7Bb918eB068B37E44b12A19402F5112dE656566", + "storageKeys": [ + "0x434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950", + "0x56498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5", + "0xe83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94e" + ] + }, + { + "address": "0x29EFB653e6b98eA36995EC81968b0EAC36678A60", + "storageKeys": [ + "0x434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950", + "0x56498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5", + "0xe83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94e" + ] + } + ], + "chainId": "0x6653a6" + }, + "privateKey": "0x58f3d57fde2c0dae771d5cb66092b8905ba5691226740d7398459c60712a5793", + "unsignedLegacy": "0xf8396782fcb983a193e9947b9830530efd81a5bb21ed03a1e20ac977c1300383f9eff897ee2035dab48b94002f3fa4ba662590127a2fcb9e978af4", + "unsignedEip155": "0xf83f6782fcb983a193e9947b9830530efd81a5bb21ed03a1e20ac977c1300383f9eff897ee2035dab48b94002f3fa4ba662590127a2fcb9e978af4836653a68080", + "unsignedBerlin": "0x01f90230836653a66782fcb983a193e9947b9830530efd81a5bb21ed03a1e20ac977c1300383f9eff897ee2035dab48b94002f3fa4ba662590127a2fcb9e978af4f901f0f87a94469ed43b08a100e13e84b7746fa7206d3a11a5f7f863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94ef87a94588c330b029e06b820dfb1d3a5b774edcf6a9feef863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94ef87a94d7bb918eb068b37e44b12a19402f5112de656566f863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94ef87a9429efb653e6b98ea36995ec81968b0eac36678a60f863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94e", + "unsignedLondon": "0x02f90237836653a66781ac879288e31191055683a193e9947b9830530efd81a5bb21ed03a1e20ac977c1300383f9eff897ee2035dab48b94002f3fa4ba662590127a2fcb9e978af4f901f0f87a94469ed43b08a100e13e84b7746fa7206d3a11a5f7f863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94ef87a94588c330b029e06b820dfb1d3a5b774edcf6a9feef863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94ef87a94d7bb918eb068b37e44b12a19402f5112de656566f863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94ef87a9429efb653e6b98ea36995ec81968b0eac36678a60f863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94e", + "signedLegacy": "0xf87c6782fcb983a193e9947b9830530efd81a5bb21ed03a1e20ac977c1300383f9eff897ee2035dab48b94002f3fa4ba662590127a2fcb9e978af41ca0b889cf400786bc43a9bc32317a5368a1f0898b5f60fec9c4da7931867fe5c3fca06dd97c8b894c3a14ec5099eaa39b76f369f49c0ad9330dd852f797b22fb6962e", + "signedEip155": "0xf87f6782fcb983a193e9947b9830530efd81a5bb21ed03a1e20ac977c1300383f9eff897ee2035dab48b94002f3fa4ba662590127a2fcb9e978af483cca770a04ad07bd0c147962802aee8e943f48a5adfadbc5d14c502e10fe108b6a3206691a039150202e4bacfbda9757c56c93858d0dc2ae5c36d69e7f5d61e6d2fb9a4d7e0", + "signedBerlin": "0x01f90273836653a66782fcb983a193e9947b9830530efd81a5bb21ed03a1e20ac977c1300383f9eff897ee2035dab48b94002f3fa4ba662590127a2fcb9e978af4f901f0f87a94469ed43b08a100e13e84b7746fa7206d3a11a5f7f863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94ef87a94588c330b029e06b820dfb1d3a5b774edcf6a9feef863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94ef87a94d7bb918eb068b37e44b12a19402f5112de656566f863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94ef87a9429efb653e6b98ea36995ec81968b0eac36678a60f863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94e80a0bbeb29da87bb1efcc76efc18dc3fb4d06c2fbe9d0a8695e3bc887f84ab35796ea046f04724d13b40f6e5f8ca963862c821857f58772169706ab4a286feec54196f", + "signedLondon": "0x02f9027a836653a66781ac879288e31191055683a193e9947b9830530efd81a5bb21ed03a1e20ac977c1300383f9eff897ee2035dab48b94002f3fa4ba662590127a2fcb9e978af4f901f0f87a94469ed43b08a100e13e84b7746fa7206d3a11a5f7f863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94ef87a94588c330b029e06b820dfb1d3a5b774edcf6a9feef863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94ef87a94d7bb918eb068b37e44b12a19402f5112de656566f863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94ef87a9429efb653e6b98ea36995ec81968b0eac36678a60f863a0434cab87455b41c8023691c4e836ec1e1d90fd639e1207274b07574059394950a056498d76fcc165010f94437317015d8a9a939ab1fd21216c5fcfed335f5d6ad5a0e83f7815e6bf7d521dd0341e9445415ab565b2471ab4dbbf0a0ddcc564bdb94e80a0d6593cf036acec58fa43ac9b1a19b961b26acf1b27f23ed3cfa5fc2dd63b1b73a06cf24189b044480b469c1b6bbe97bd3caf522e0a9c141d9d8a5b7e5ad225bebc", + "signatureLegacy": { + "r": "0xb889cf400786bc43a9bc32317a5368a1f0898b5f60fec9c4da7931867fe5c3fc", + "s": "0x6dd97c8b894c3a14ec5099eaa39b76f369f49c0ad9330dd852f797b22fb6962e", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x4ad07bd0c147962802aee8e943f48a5adfadbc5d14c502e10fe108b6a3206691", + "s": "0x39150202e4bacfbda9757c56c93858d0dc2ae5c36d69e7f5d61e6d2fb9a4d7e0", + "v": "0xcca770" + }, + "signatureBerlin": { + "r": "0xbbeb29da87bb1efcc76efc18dc3fb4d06c2fbe9d0a8695e3bc887f84ab35796e", + "s": "0x46f04724d13b40f6e5f8ca963862c821857f58772169706ab4a286feec54196f", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xd6593cf036acec58fa43ac9b1a19b961b26acf1b27f23ed3cfa5fc2dd63b1b73", + "s": "0x6cf24189b044480b469c1b6bbe97bd3caf522e0a9c141d9d8a5b7e5ad225bebc", + "v": "0x0" + } + }, + { + "name": "random-18", + "transaction": { + "to": "0x0bbe326563703D26cB074Ef29Ed04404Ab1Fd0cC", + "nonce": 503, + "gasLimit": "0xa5cdc1", + "gasPrice": "0x2a", + "maxFeePerGas": "0x52b5f1114c1a", + "maxPriorityFeePerGas": "0x59d1ad", + "data": "0xb477bf440adf79ace31d2590393c7bbd5c191c2e40b4523e94b9c75afce3a871", + "value": "0x8a1d", + "accessList": [ + { + "address": "0x47421DbF48444B1c15748fFB721AC9b341c35347", + "storageKeys": [ + "0x1e4e2be542b128bf053d245b5efe9be008785740189d3b5b2324a395630c3279", + "0xed8dbc976b685b16dc203291d38dd688d247ae09d2fea99189d5171ddcd7c90e", + "0x4ba4902e9df30d2ea5dc662cfa7887d327dc09fcd28d3dbf5c64f5e78f5e599b" + ] + } + ], + "chainId": "0x27" + }, + "privateKey": "0xea795d7cacc6025f7bd6650aedd689f688617f9d8ca86236fa8ca5e654b767c4", + "unsignedLegacy": "0xf8418201f72a83a5cdc1940bbe326563703d26cb074ef29ed04404ab1fd0cc828a1da0b477bf440adf79ace31d2590393c7bbd5c191c2e40b4523e94b9c75afce3a871", + "unsignedEip155": "0xf8448201f72a83a5cdc1940bbe326563703d26cb074ef29ed04404ab1fd0cc828a1da0b477bf440adf79ace31d2590393c7bbd5c191c2e40b4523e94b9c75afce3a871278080", + "unsignedBerlin": "0x01f8c0278201f72a83a5cdc1940bbe326563703d26cb074ef29ed04404ab1fd0cc828a1da0b477bf440adf79ace31d2590393c7bbd5c191c2e40b4523e94b9c75afce3a871f87cf87a9447421dbf48444b1c15748ffb721ac9b341c35347f863a01e4e2be542b128bf053d245b5efe9be008785740189d3b5b2324a395630c3279a0ed8dbc976b685b16dc203291d38dd688d247ae09d2fea99189d5171ddcd7c90ea04ba4902e9df30d2ea5dc662cfa7887d327dc09fcd28d3dbf5c64f5e78f5e599b", + "unsignedLondon": "0x02f8ca278201f78359d1ad8652b5f1114c1a83a5cdc1940bbe326563703d26cb074ef29ed04404ab1fd0cc828a1da0b477bf440adf79ace31d2590393c7bbd5c191c2e40b4523e94b9c75afce3a871f87cf87a9447421dbf48444b1c15748ffb721ac9b341c35347f863a01e4e2be542b128bf053d245b5efe9be008785740189d3b5b2324a395630c3279a0ed8dbc976b685b16dc203291d38dd688d247ae09d2fea99189d5171ddcd7c90ea04ba4902e9df30d2ea5dc662cfa7887d327dc09fcd28d3dbf5c64f5e78f5e599b", + "signedLegacy": "0xf8848201f72a83a5cdc1940bbe326563703d26cb074ef29ed04404ab1fd0cc828a1da0b477bf440adf79ace31d2590393c7bbd5c191c2e40b4523e94b9c75afce3a8711ca0c888e9068c768fa7d14a6298902c6b4be841794498ab8f5a5b4ec8027197ee14a04561fbe2803fd2d4ffd8f491c6371816b213832776a93dc48c922887e8bbc671", + "signedEip155": "0xf8848201f72a83a5cdc1940bbe326563703d26cb074ef29ed04404ab1fd0cc828a1da0b477bf440adf79ace31d2590393c7bbd5c191c2e40b4523e94b9c75afce3a87172a052aea6be6b07d11486dc584c42cf1bd34ff8ec9096894fbd34cb7cc0d1aecce8a074220e1ac0c3ef2b2b60d1dea95db96d17872e1a55dc55b4835333d2c4ecdf95", + "signedBerlin": "0x01f90103278201f72a83a5cdc1940bbe326563703d26cb074ef29ed04404ab1fd0cc828a1da0b477bf440adf79ace31d2590393c7bbd5c191c2e40b4523e94b9c75afce3a871f87cf87a9447421dbf48444b1c15748ffb721ac9b341c35347f863a01e4e2be542b128bf053d245b5efe9be008785740189d3b5b2324a395630c3279a0ed8dbc976b685b16dc203291d38dd688d247ae09d2fea99189d5171ddcd7c90ea04ba4902e9df30d2ea5dc662cfa7887d327dc09fcd28d3dbf5c64f5e78f5e599b80a0e6a87722ab1ce90d062a73fe2fe3ebf7135d9b3946b7bd7edb3b4b298504e8c5a01cfad4408ddaa8e38d031b99277a81b7cd118f760acc8946b5025d2d77200197", + "signedLondon": "0x02f9010d278201f78359d1ad8652b5f1114c1a83a5cdc1940bbe326563703d26cb074ef29ed04404ab1fd0cc828a1da0b477bf440adf79ace31d2590393c7bbd5c191c2e40b4523e94b9c75afce3a871f87cf87a9447421dbf48444b1c15748ffb721ac9b341c35347f863a01e4e2be542b128bf053d245b5efe9be008785740189d3b5b2324a395630c3279a0ed8dbc976b685b16dc203291d38dd688d247ae09d2fea99189d5171ddcd7c90ea04ba4902e9df30d2ea5dc662cfa7887d327dc09fcd28d3dbf5c64f5e78f5e599b01a0f8825407a5607db5184718258869e3ba1eef9bd4c1bf4826315cfc8693593894a07aad01abea832c052973a749a3a623d63922fbbb090f5bbdb4582992d5bd508f", + "signatureLegacy": { + "r": "0xc888e9068c768fa7d14a6298902c6b4be841794498ab8f5a5b4ec8027197ee14", + "s": "0x4561fbe2803fd2d4ffd8f491c6371816b213832776a93dc48c922887e8bbc671", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x52aea6be6b07d11486dc584c42cf1bd34ff8ec9096894fbd34cb7cc0d1aecce8", + "s": "0x74220e1ac0c3ef2b2b60d1dea95db96d17872e1a55dc55b4835333d2c4ecdf95", + "v": "0x72" + }, + "signatureBerlin": { + "r": "0xe6a87722ab1ce90d062a73fe2fe3ebf7135d9b3946b7bd7edb3b4b298504e8c5", + "s": "0x1cfad4408ddaa8e38d031b99277a81b7cd118f760acc8946b5025d2d77200197", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xf8825407a5607db5184718258869e3ba1eef9bd4c1bf4826315cfc8693593894", + "s": "0x7aad01abea832c052973a749a3a623d63922fbbb090f5bbdb4582992d5bd508f", + "v": "0x1" + } + }, + { + "name": "random-19", + "transaction": { + "to": "0x6D9186AD35Ba39086D341c03B212a22dAd55A70c", + "nonce": 47, + "gasLimit": "0x8e2d", + "gasPrice": "0xed", + "maxFeePerGas": "0x8f001cace664", + "maxPriorityFeePerGas": "0x86495d", + "data": "0xa6e0079be77374ee2617550eadd15e206a8c7eb76eca2de96d48c4824b4646206720dfeb24956f1e712b58b9ef96fc92e637cf4c30614d86532d3110f670c5a70e5bdeef3dc5cf94ef8d3afffc50151c00a5ad1289fae8168bb120e9dbdb24c422eacfc4d8291c6dc942a872545c76b5c697806c84f478d361026a2ad9", + "value": "0x4028", + "accessList": [ + { + "address": "0x27CBC99f4161665Fc37a013015B0B99A959f6fcb", + "storageKeys": [] + }, + { + "address": "0x296e9Be34584A14761c7b4cE82E99d4394A5f109", + "storageKeys": [] + }, + { + "address": "0xeD1C55cDE477E627081Ac4D17376f4Bf9A2dc51E", + "storageKeys": [] + }, + { + "address": "0x7a46971171Aa87E7Ef026C381053940714f4Ad91", + "storageKeys": [] + } + ], + "chainId": "0xf9bf2e" + }, + "privateKey": "0x1b01010d8955e5cecc6705b73064baa37a703d65cb970a5b97c1cc9b76aa9473", + "unsignedLegacy": "0xf89d2f81ed828e2d946d9186ad35ba39086d341c03b212a22dad55a70c824028b87da6e0079be77374ee2617550eadd15e206a8c7eb76eca2de96d48c4824b4646206720dfeb24956f1e712b58b9ef96fc92e637cf4c30614d86532d3110f670c5a70e5bdeef3dc5cf94ef8d3afffc50151c00a5ad1289fae8168bb120e9dbdb24c422eacfc4d8291c6dc942a872545c76b5c697806c84f478d361026a2ad9", + "unsignedEip155": "0xf8a32f81ed828e2d946d9186ad35ba39086d341c03b212a22dad55a70c824028b87da6e0079be77374ee2617550eadd15e206a8c7eb76eca2de96d48c4824b4646206720dfeb24956f1e712b58b9ef96fc92e637cf4c30614d86532d3110f670c5a70e5bdeef3dc5cf94ef8d3afffc50151c00a5ad1289fae8168bb120e9dbdb24c422eacfc4d8291c6dc942a872545c76b5c697806c84f478d361026a2ad983f9bf2e8080", + "unsignedBerlin": "0x01f8ff83f9bf2e2f81ed828e2d946d9186ad35ba39086d341c03b212a22dad55a70c824028b87da6e0079be77374ee2617550eadd15e206a8c7eb76eca2de96d48c4824b4646206720dfeb24956f1e712b58b9ef96fc92e637cf4c30614d86532d3110f670c5a70e5bdeef3dc5cf94ef8d3afffc50151c00a5ad1289fae8168bb120e9dbdb24c422eacfc4d8291c6dc942a872545c76b5c697806c84f478d361026a2ad9f85cd69427cbc99f4161665fc37a013015b0b99a959f6fcbc0d694296e9be34584a14761c7b4ce82e99d4394a5f109c0d694ed1c55cde477e627081ac4d17376f4bf9a2dc51ec0d6947a46971171aa87e7ef026c381053940714f4ad91c0", + "unsignedLondon": "0x02f9010883f9bf2e2f8386495d868f001cace664828e2d946d9186ad35ba39086d341c03b212a22dad55a70c824028b87da6e0079be77374ee2617550eadd15e206a8c7eb76eca2de96d48c4824b4646206720dfeb24956f1e712b58b9ef96fc92e637cf4c30614d86532d3110f670c5a70e5bdeef3dc5cf94ef8d3afffc50151c00a5ad1289fae8168bb120e9dbdb24c422eacfc4d8291c6dc942a872545c76b5c697806c84f478d361026a2ad9f85cd69427cbc99f4161665fc37a013015b0b99a959f6fcbc0d694296e9be34584a14761c7b4ce82e99d4394a5f109c0d694ed1c55cde477e627081ac4d17376f4bf9a2dc51ec0d6947a46971171aa87e7ef026c381053940714f4ad91c0", + "signedLegacy": "0xf8e02f81ed828e2d946d9186ad35ba39086d341c03b212a22dad55a70c824028b87da6e0079be77374ee2617550eadd15e206a8c7eb76eca2de96d48c4824b4646206720dfeb24956f1e712b58b9ef96fc92e637cf4c30614d86532d3110f670c5a70e5bdeef3dc5cf94ef8d3afffc50151c00a5ad1289fae8168bb120e9dbdb24c422eacfc4d8291c6dc942a872545c76b5c697806c84f478d361026a2ad91ba0804162984a09f440a312f2231b192dc7b43fb49546ede924e1ef2b4b54abcd31a04635d7370c171b9e6ac7fa3bca544d0c227d32f0a1c5d065cc0bb02b79e8eaa1", + "signedEip155": "0xf8e42f81ed828e2d946d9186ad35ba39086d341c03b212a22dad55a70c824028b87da6e0079be77374ee2617550eadd15e206a8c7eb76eca2de96d48c4824b4646206720dfeb24956f1e712b58b9ef96fc92e637cf4c30614d86532d3110f670c5a70e5bdeef3dc5cf94ef8d3afffc50151c00a5ad1289fae8168bb120e9dbdb24c422eacfc4d8291c6dc942a872545c76b5c697806c84f478d361026a2ad98401f37e80a05914063f10cf79eea0d3c5cf10bf7765ffc648638c656ddf0c678057b6d570aaa00a89d79bcfa95f96290ec7938ab7c5552423736a16e0a39d84b140c5307a8bab", + "signedBerlin": "0x01f9014283f9bf2e2f81ed828e2d946d9186ad35ba39086d341c03b212a22dad55a70c824028b87da6e0079be77374ee2617550eadd15e206a8c7eb76eca2de96d48c4824b4646206720dfeb24956f1e712b58b9ef96fc92e637cf4c30614d86532d3110f670c5a70e5bdeef3dc5cf94ef8d3afffc50151c00a5ad1289fae8168bb120e9dbdb24c422eacfc4d8291c6dc942a872545c76b5c697806c84f478d361026a2ad9f85cd69427cbc99f4161665fc37a013015b0b99a959f6fcbc0d694296e9be34584a14761c7b4ce82e99d4394a5f109c0d694ed1c55cde477e627081ac4d17376f4bf9a2dc51ec0d6947a46971171aa87e7ef026c381053940714f4ad91c080a0888f5e0b4c258b4f7c488d4e1f7dafc82d7835381b5470bc1e9571ad6bd21929a07a8a19227f4f2cb93bccbc7b4bcb0b731701a0284df8ed3fb90936e6ac0a18d1", + "signedLondon": "0x02f9014b83f9bf2e2f8386495d868f001cace664828e2d946d9186ad35ba39086d341c03b212a22dad55a70c824028b87da6e0079be77374ee2617550eadd15e206a8c7eb76eca2de96d48c4824b4646206720dfeb24956f1e712b58b9ef96fc92e637cf4c30614d86532d3110f670c5a70e5bdeef3dc5cf94ef8d3afffc50151c00a5ad1289fae8168bb120e9dbdb24c422eacfc4d8291c6dc942a872545c76b5c697806c84f478d361026a2ad9f85cd69427cbc99f4161665fc37a013015b0b99a959f6fcbc0d694296e9be34584a14761c7b4ce82e99d4394a5f109c0d694ed1c55cde477e627081ac4d17376f4bf9a2dc51ec0d6947a46971171aa87e7ef026c381053940714f4ad91c001a0f9ba41389da7c4a5471d8af8235fb765d90ec76b370516ec0108d43eda880c84a00bca4f8cb35a6023cbeee50d38e0b62588b6cfc47d3e8023413f2bdfb04f3a8e", + "signatureLegacy": { + "r": "0x804162984a09f440a312f2231b192dc7b43fb49546ede924e1ef2b4b54abcd31", + "s": "0x4635d7370c171b9e6ac7fa3bca544d0c227d32f0a1c5d065cc0bb02b79e8eaa1", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x5914063f10cf79eea0d3c5cf10bf7765ffc648638c656ddf0c678057b6d570aa", + "s": "0x0a89d79bcfa95f96290ec7938ab7c5552423736a16e0a39d84b140c5307a8bab", + "v": "0x1f37e80" + }, + "signatureBerlin": { + "r": "0x888f5e0b4c258b4f7c488d4e1f7dafc82d7835381b5470bc1e9571ad6bd21929", + "s": "0x7a8a19227f4f2cb93bccbc7b4bcb0b731701a0284df8ed3fb90936e6ac0a18d1", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xf9ba41389da7c4a5471d8af8235fb765d90ec76b370516ec0108d43eda880c84", + "s": "0x0bca4f8cb35a6023cbeee50d38e0b62588b6cfc47d3e8023413f2bdfb04f3a8e", + "v": "0x1" + } + }, + { + "name": "random-20", + "transaction": { + "to": "0x60fC630156D46bF9b1BF5B7d251C6CbE64702BF3", + "nonce": 812, + "gasLimit": "0xe010b5", + "gasPrice": "0x41f1af255d", + "maxFeePerGas": "0xc2214fa5", + "maxPriorityFeePerGas": "0x4a", + "data": "0x647daf6b789306d2daeb51be942c40d66194d5e0e9dca946aa830d686d493c1d1a07090d9cde8d73c6b982f5d00161b6ee0b302cdc24f29ebd146e99149adc7666f4d1d12146f077cc6e7f78addae71d399b445a14ff15a67efb8f39dcfd32af41968639dd3665d282e4065caef58441e6ac3ebc4b8d94", + "value": "0x6e7b", + "accessList": [ + { + "address": "0x36aAaa454aAB9A9409b890C32E9304C42EC8b05A", + "storageKeys": [] + }, + { + "address": "0x7F7Ac0f60Be35f1e8F7c70A7AA5d596bC7648745", + "storageKeys": [] + }, + { + "address": "0xf9Fb9Bb09b08C0Fa137E76615BBd50B5cc63BCc4", + "storageKeys": [] + }, + { + "address": "0x69C6c93f57A0C11a765F2B9076a9575c4b015d03", + "storageKeys": [] + } + ], + "chainId": "0x08454b" + }, + "privateKey": "0x6efb2ce4981ad5555974b8b6b4f767d774c32f9e09e0009d5d914e29614ec739", + "unsignedLegacy": "0xf89e82032c8541f1af255d83e010b59460fc630156d46bf9b1bf5b7d251c6cbe64702bf3826e7bb877647daf6b789306d2daeb51be942c40d66194d5e0e9dca946aa830d686d493c1d1a07090d9cde8d73c6b982f5d00161b6ee0b302cdc24f29ebd146e99149adc7666f4d1d12146f077cc6e7f78addae71d399b445a14ff15a67efb8f39dcfd32af41968639dd3665d282e4065caef58441e6ac3ebc4b8d94", + "unsignedEip155": "0xf8a482032c8541f1af255d83e010b59460fc630156d46bf9b1bf5b7d251c6cbe64702bf3826e7bb877647daf6b789306d2daeb51be942c40d66194d5e0e9dca946aa830d686d493c1d1a07090d9cde8d73c6b982f5d00161b6ee0b302cdc24f29ebd146e99149adc7666f4d1d12146f077cc6e7f78addae71d399b445a14ff15a67efb8f39dcfd32af41968639dd3665d282e4065caef58441e6ac3ebc4b8d948308454b8080", + "unsignedBerlin": "0x01f901008308454b82032c8541f1af255d83e010b59460fc630156d46bf9b1bf5b7d251c6cbe64702bf3826e7bb877647daf6b789306d2daeb51be942c40d66194d5e0e9dca946aa830d686d493c1d1a07090d9cde8d73c6b982f5d00161b6ee0b302cdc24f29ebd146e99149adc7666f4d1d12146f077cc6e7f78addae71d399b445a14ff15a67efb8f39dcfd32af41968639dd3665d282e4065caef58441e6ac3ebc4b8d94f85cd69436aaaa454aab9a9409b890c32e9304c42ec8b05ac0d6947f7ac0f60be35f1e8f7c70a7aa5d596bc7648745c0d694f9fb9bb09b08c0fa137e76615bbd50b5cc63bcc4c0d69469c6c93f57a0c11a765f2b9076a9575c4b015d03c0", + "unsignedLondon": "0x02f901008308454b82032c4a84c2214fa583e010b59460fc630156d46bf9b1bf5b7d251c6cbe64702bf3826e7bb877647daf6b789306d2daeb51be942c40d66194d5e0e9dca946aa830d686d493c1d1a07090d9cde8d73c6b982f5d00161b6ee0b302cdc24f29ebd146e99149adc7666f4d1d12146f077cc6e7f78addae71d399b445a14ff15a67efb8f39dcfd32af41968639dd3665d282e4065caef58441e6ac3ebc4b8d94f85cd69436aaaa454aab9a9409b890c32e9304c42ec8b05ac0d6947f7ac0f60be35f1e8f7c70a7aa5d596bc7648745c0d694f9fb9bb09b08c0fa137e76615bbd50b5cc63bcc4c0d69469c6c93f57a0c11a765f2b9076a9575c4b015d03c0", + "signedLegacy": "0xf8e182032c8541f1af255d83e010b59460fc630156d46bf9b1bf5b7d251c6cbe64702bf3826e7bb877647daf6b789306d2daeb51be942c40d66194d5e0e9dca946aa830d686d493c1d1a07090d9cde8d73c6b982f5d00161b6ee0b302cdc24f29ebd146e99149adc7666f4d1d12146f077cc6e7f78addae71d399b445a14ff15a67efb8f39dcfd32af41968639dd3665d282e4065caef58441e6ac3ebc4b8d941ca0707fd3dbc3b260752493e64be389a2689bf3b8b181a4e7baa7eeb0176ba84283a04868672b9d487c34906166770fd51f0598b026b3368bb5f4d0a99ca4fc0706e9", + "signedEip155": "0xf8e482032c8541f1af255d83e010b59460fc630156d46bf9b1bf5b7d251c6cbe64702bf3826e7bb877647daf6b789306d2daeb51be942c40d66194d5e0e9dca946aa830d686d493c1d1a07090d9cde8d73c6b982f5d00161b6ee0b302cdc24f29ebd146e99149adc7666f4d1d12146f077cc6e7f78addae71d399b445a14ff15a67efb8f39dcfd32af41968639dd3665d282e4065caef58441e6ac3ebc4b8d9483108abaa014c49179d7be5caf2590610b76eeace610c536ff3e1d1eab3b43c164fe90e472a06bb4caad9a679371ce6527da4f3a404d3cd1b36712a47774112f19add1ca4d2e", + "signedBerlin": "0x01f901438308454b82032c8541f1af255d83e010b59460fc630156d46bf9b1bf5b7d251c6cbe64702bf3826e7bb877647daf6b789306d2daeb51be942c40d66194d5e0e9dca946aa830d686d493c1d1a07090d9cde8d73c6b982f5d00161b6ee0b302cdc24f29ebd146e99149adc7666f4d1d12146f077cc6e7f78addae71d399b445a14ff15a67efb8f39dcfd32af41968639dd3665d282e4065caef58441e6ac3ebc4b8d94f85cd69436aaaa454aab9a9409b890c32e9304c42ec8b05ac0d6947f7ac0f60be35f1e8f7c70a7aa5d596bc7648745c0d694f9fb9bb09b08c0fa137e76615bbd50b5cc63bcc4c0d69469c6c93f57a0c11a765f2b9076a9575c4b015d03c001a0b445c3c80cfa7df6401a7f0c46094a0fcb63749ff073b44d72c6d1f88f5212a6a07d418e8c1f5bb3a928ea11e3049943f7c60bacbaef1c78c90f9899331574336e", + "signedLondon": "0x02f901438308454b82032c4a84c2214fa583e010b59460fc630156d46bf9b1bf5b7d251c6cbe64702bf3826e7bb877647daf6b789306d2daeb51be942c40d66194d5e0e9dca946aa830d686d493c1d1a07090d9cde8d73c6b982f5d00161b6ee0b302cdc24f29ebd146e99149adc7666f4d1d12146f077cc6e7f78addae71d399b445a14ff15a67efb8f39dcfd32af41968639dd3665d282e4065caef58441e6ac3ebc4b8d94f85cd69436aaaa454aab9a9409b890c32e9304c42ec8b05ac0d6947f7ac0f60be35f1e8f7c70a7aa5d596bc7648745c0d694f9fb9bb09b08c0fa137e76615bbd50b5cc63bcc4c0d69469c6c93f57a0c11a765f2b9076a9575c4b015d03c080a0dafce44a782685fd338895386a5b13b4183706b3621c55b92dc0e43b3dd947d0a0697a9b17a80710efd85c62104a68156c67399c69b50bc951c4888a2f6446cad4", + "signatureLegacy": { + "r": "0x707fd3dbc3b260752493e64be389a2689bf3b8b181a4e7baa7eeb0176ba84283", + "s": "0x4868672b9d487c34906166770fd51f0598b026b3368bb5f4d0a99ca4fc0706e9", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x14c49179d7be5caf2590610b76eeace610c536ff3e1d1eab3b43c164fe90e472", + "s": "0x6bb4caad9a679371ce6527da4f3a404d3cd1b36712a47774112f19add1ca4d2e", + "v": "0x108aba" + }, + "signatureBerlin": { + "r": "0xb445c3c80cfa7df6401a7f0c46094a0fcb63749ff073b44d72c6d1f88f5212a6", + "s": "0x7d418e8c1f5bb3a928ea11e3049943f7c60bacbaef1c78c90f9899331574336e", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xdafce44a782685fd338895386a5b13b4183706b3621c55b92dc0e43b3dd947d0", + "s": "0x697a9b17a80710efd85c62104a68156c67399c69b50bc951c4888a2f6446cad4", + "v": "0x0" + } + }, + { + "name": "random-22", + "transaction": { + "to": "0x3EeaD538405af1E9715eF7Ef27e9Ecd9FD85966d", + "nonce": 524, + "gasLimit": "0xf78a2b", + "gasPrice": "0xab54814774", + "maxFeePerGas": "0x933edd83", + "maxPriorityFeePerGas": "0x620be6", + "data": "0x64f75ffaff53fc0e7030aed910e80d5396eda41fdc1bf8f351ee7e5e46fc9be4", + "value": "0x3028b71dff", + "accessList": [ + { + "address": "0xfbFcb3B14f834e21f104979F550EA5C6f9917bf3", + "storageKeys": [ + "0x133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f209" + ] + }, + { + "address": "0xdA6219fFFE19545Fb89fB47A28A68E7bB978Ae4b", + "storageKeys": [ + "0x133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f209" + ] + }, + { + "address": "0x5B4bBA3F79A3fcF5fcBEeAFc38571D72f039660D", + "storageKeys": [ + "0x133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f209" + ] + } + ], + "chainId": "0x96bf694bb4" + }, + "privateKey": "0x5f02e67d44e5363b38914b63ccfe012685ce3d2e65121a050eb869209c1ee3d0", + "unsignedLegacy": "0xf84982020c85ab5481477483f78a2b943eead538405af1e9715ef7ef27e9ecd9fd85966d853028b71dffa064f75ffaff53fc0e7030aed910e80d5396eda41fdc1bf8f351ee7e5e46fc9be4", + "unsignedEip155": "0xf85182020c85ab5481477483f78a2b943eead538405af1e9715ef7ef27e9ecd9fd85966d853028b71dffa064f75ffaff53fc0e7030aed910e80d5396eda41fdc1bf8f351ee7e5e46fc9be48596bf694bb48080", + "unsignedBerlin": "0x01f8f98596bf694bb482020c85ab5481477483f78a2b943eead538405af1e9715ef7ef27e9ecd9fd85966d853028b71dffa064f75ffaff53fc0e7030aed910e80d5396eda41fdc1bf8f351ee7e5e46fc9be4f8a8f794fbfcb3b14f834e21f104979f550ea5c6f9917bf3e1a0133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f209f794da6219fffe19545fb89fb47a28a68e7bb978ae4be1a0133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f209f7945b4bba3f79a3fcf5fcbeeafc38571d72f039660de1a0133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f209", + "unsignedLondon": "0x02f8fc8596bf694bb482020c83620be684933edd8383f78a2b943eead538405af1e9715ef7ef27e9ecd9fd85966d853028b71dffa064f75ffaff53fc0e7030aed910e80d5396eda41fdc1bf8f351ee7e5e46fc9be4f8a8f794fbfcb3b14f834e21f104979f550ea5c6f9917bf3e1a0133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f209f794da6219fffe19545fb89fb47a28a68e7bb978ae4be1a0133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f209f7945b4bba3f79a3fcf5fcbeeafc38571d72f039660de1a0133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f209", + "signedLegacy": "0xf88c82020c85ab5481477483f78a2b943eead538405af1e9715ef7ef27e9ecd9fd85966d853028b71dffa064f75ffaff53fc0e7030aed910e80d5396eda41fdc1bf8f351ee7e5e46fc9be41ba050f88ecfab80f64dcc70c6a2570284072cac3946b09836d468eeef525484734ea0283c116d864d66680b60b35bea97b97cc691f5d4b23b8caa58a28db65ef4fc41", + "signedEip155": "0xf89282020c85ab5481477483f78a2b943eead538405af1e9715ef7ef27e9ecd9fd85966d853028b71dffa064f75ffaff53fc0e7030aed910e80d5396eda41fdc1bf8f351ee7e5e46fc9be486012d7ed2978ca04dd4a600b5bc18da318ba8fdbca617598159ee3420354dacdb7fc5730dd2b74ea047d47d63e6f92b4221ab7b86cd63540bf14bbafda10df3096721ce468ad57e11", + "signedBerlin": "0x01f9013c8596bf694bb482020c85ab5481477483f78a2b943eead538405af1e9715ef7ef27e9ecd9fd85966d853028b71dffa064f75ffaff53fc0e7030aed910e80d5396eda41fdc1bf8f351ee7e5e46fc9be4f8a8f794fbfcb3b14f834e21f104979f550ea5c6f9917bf3e1a0133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f209f794da6219fffe19545fb89fb47a28a68e7bb978ae4be1a0133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f209f7945b4bba3f79a3fcf5fcbeeafc38571d72f039660de1a0133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f20980a0fd1a19c355394f6b6d7adba72660878ef8b1b75d8ecc03a003badfdacf17a821a03a30dcead31009099b34f7611c2182adb49cf1d69a3de8131b1db15d7cac0eab", + "signedLondon": "0x02f9013f8596bf694bb482020c83620be684933edd8383f78a2b943eead538405af1e9715ef7ef27e9ecd9fd85966d853028b71dffa064f75ffaff53fc0e7030aed910e80d5396eda41fdc1bf8f351ee7e5e46fc9be4f8a8f794fbfcb3b14f834e21f104979f550ea5c6f9917bf3e1a0133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f209f794da6219fffe19545fb89fb47a28a68e7bb978ae4be1a0133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f209f7945b4bba3f79a3fcf5fcbeeafc38571d72f039660de1a0133608308a4992cd937928afb6f8048fb448b7504bcce324addceda39d36f20980a0d99ac0fbc8916aef1ab64c4eb89f982048033e20d165dc9c818510c8372bee37a0145d46622a7b96ca74f7ba25c79bd55b4d3b78aea7026bfe5603a345fc1be85c", + "signatureLegacy": { + "r": "0x50f88ecfab80f64dcc70c6a2570284072cac3946b09836d468eeef525484734e", + "s": "0x283c116d864d66680b60b35bea97b97cc691f5d4b23b8caa58a28db65ef4fc41", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x4dd4a600b5bc18da318ba8fdbca617598159ee3420354dacdb7fc5730dd2b74e", + "s": "0x47d47d63e6f92b4221ab7b86cd63540bf14bbafda10df3096721ce468ad57e11", + "v": "0x12d7ed2978c" + }, + "signatureBerlin": { + "r": "0xfd1a19c355394f6b6d7adba72660878ef8b1b75d8ecc03a003badfdacf17a821", + "s": "0x3a30dcead31009099b34f7611c2182adb49cf1d69a3de8131b1db15d7cac0eab", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xd99ac0fbc8916aef1ab64c4eb89f982048033e20d165dc9c818510c8372bee37", + "s": "0x145d46622a7b96ca74f7ba25c79bd55b4d3b78aea7026bfe5603a345fc1be85c", + "v": "0x0" + } + }, + { + "name": "random-23", + "transaction": { + "to": "0x250b57d24dEd36525C873c672D0766e136D56820", + "nonce": 287, + "gasLimit": "0x56263e1c", + "gasPrice": "0x1c", + "maxFeePerGas": "0xb998f63a", + "maxPriorityFeePerGas": "0x54", + "data": "0xc7333a6694328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd4199d1c5904c1676b9a3", + "value": "0x121d7531", + "accessList": [], + "chainId": "0x184c7a" + }, + "privateKey": "0xabce7ed3e3cc9591b447a56e476ef3e14f05b67e3d5ffb7a5240e9754b2cf68f", + "unsignedLegacy": "0xf85282011f1c8456263e1c94250b57d24ded36525c873c672d0766e136d5682084121d7531aec7333a6694328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd4199d1c5904c1676b9a3", + "unsignedEip155": "0xf85882011f1c8456263e1c94250b57d24ded36525c873c672d0766e136d5682084121d7531aec7333a6694328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd4199d1c5904c1676b9a383184c7a8080", + "unsignedBerlin": "0x01f85783184c7a82011f1c8456263e1c94250b57d24ded36525c873c672d0766e136d5682084121d7531aec7333a6694328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd4199d1c5904c1676b9a3c0", + "unsignedLondon": "0x02f85c83184c7a82011f5484b998f63a8456263e1c94250b57d24ded36525c873c672d0766e136d5682084121d7531aec7333a6694328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd4199d1c5904c1676b9a3c0", + "signedLegacy": "0xf89582011f1c8456263e1c94250b57d24ded36525c873c672d0766e136d5682084121d7531aec7333a6694328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd4199d1c5904c1676b9a31ba0dcfd0e45ae4d78e53dc517fe6941859969e52e5ba7692310c9b63d65c1075973a0261af27653a8894a6b6d5f4183f5ba951456c398947a3a822b3235869b583882", + "signedEip155": "0xf89882011f1c8456263e1c94250b57d24ded36525c873c672d0766e136d5682084121d7531aec7333a6694328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd4199d1c5904c1676b9a383309918a0e6d4a159292d73bec5ddd040560252c891c4bda809e23636a5dfd41b9c649a6da043ca10498511a3671ac84dbd78fd643b9c79fff3b8121835624d864def928169", + "signedBerlin": "0x01f89a83184c7a82011f1c8456263e1c94250b57d24ded36525c873c672d0766e136d5682084121d7531aec7333a6694328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd4199d1c5904c1676b9a3c080a08a979d9861c813a67d5122cb847731c95cf3912b74956c5a3e689267df2d0a6fa061c9a96aa7b45b2b70817617e3ba592421b66cdd2e2f21e372e226839a19245e", + "signedLondon": "0x02f89f83184c7a82011f5484b998f63a8456263e1c94250b57d24ded36525c873c672d0766e136d5682084121d7531aec7333a6694328c9056423b4ca4f74b2bc4e04332d128de428c037a5c21174f0bf6d889fd4199d1c5904c1676b9a3c001a0026e8dccb910486d101371a358cea6ddec054efe4acfadfc0a4103c3f65fe1c3a058ab825b4a2faf3f1c37934f92f1f7bb071cdfc7bde044796b40fa823ce677a6", + "signatureLegacy": { + "r": "0xdcfd0e45ae4d78e53dc517fe6941859969e52e5ba7692310c9b63d65c1075973", + "s": "0x261af27653a8894a6b6d5f4183f5ba951456c398947a3a822b3235869b583882", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xe6d4a159292d73bec5ddd040560252c891c4bda809e23636a5dfd41b9c649a6d", + "s": "0x43ca10498511a3671ac84dbd78fd643b9c79fff3b8121835624d864def928169", + "v": "0x309918" + }, + "signatureBerlin": { + "r": "0x8a979d9861c813a67d5122cb847731c95cf3912b74956c5a3e689267df2d0a6f", + "s": "0x61c9a96aa7b45b2b70817617e3ba592421b66cdd2e2f21e372e226839a19245e", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x026e8dccb910486d101371a358cea6ddec054efe4acfadfc0a4103c3f65fe1c3", + "s": "0x58ab825b4a2faf3f1c37934f92f1f7bb071cdfc7bde044796b40fa823ce677a6", + "v": "0x1" + } + }, + { + "name": "random-24", + "transaction": { + "to": "0x598EebD2F9A25472fD69820f0CCA768875cBbeEc", + "nonce": 392, + "gasLimit": "0xea0d56", + "gasPrice": "0xb81f5f33", + "maxFeePerGas": "0xc1f6d69235", + "maxPriorityFeePerGas": "0xb8", + "data": "0xe50c65fb865722ebddf1090ab06faa55d174ac4f87be35133cd12ccdace4aea5730ad26b05af094ca97699f862126e8775bc5f9d815a71b7dec5e1cc1a31d3553f90d725a7008c2e83cc219d", + "value": "0x60d1", + "accessList": [], + "chainId": "0xc2" + }, + "privateKey": "0xf40e65e608c7a41a2812f302436d74f6322e3d24f7d0894d445bfbd8fa199050", + "unsignedLegacy": "0xf87282018884b81f5f3383ea0d5694598eebd2f9a25472fd69820f0cca768875cbbeec8260d1b84ce50c65fb865722ebddf1090ab06faa55d174ac4f87be35133cd12ccdace4aea5730ad26b05af094ca97699f862126e8775bc5f9d815a71b7dec5e1cc1a31d3553f90d725a7008c2e83cc219d", + "unsignedEip155": "0xf87682018884b81f5f3383ea0d5694598eebd2f9a25472fd69820f0cca768875cbbeec8260d1b84ce50c65fb865722ebddf1090ab06faa55d174ac4f87be35133cd12ccdace4aea5730ad26b05af094ca97699f862126e8775bc5f9d815a71b7dec5e1cc1a31d3553f90d725a7008c2e83cc219d81c28080", + "unsignedBerlin": "0x01f87581c282018884b81f5f3383ea0d5694598eebd2f9a25472fd69820f0cca768875cbbeec8260d1b84ce50c65fb865722ebddf1090ab06faa55d174ac4f87be35133cd12ccdace4aea5730ad26b05af094ca97699f862126e8775bc5f9d815a71b7dec5e1cc1a31d3553f90d725a7008c2e83cc219dc0", + "unsignedLondon": "0x02f87881c282018881b885c1f6d6923583ea0d5694598eebd2f9a25472fd69820f0cca768875cbbeec8260d1b84ce50c65fb865722ebddf1090ab06faa55d174ac4f87be35133cd12ccdace4aea5730ad26b05af094ca97699f862126e8775bc5f9d815a71b7dec5e1cc1a31d3553f90d725a7008c2e83cc219dc0", + "signedLegacy": "0xf8b582018884b81f5f3383ea0d5694598eebd2f9a25472fd69820f0cca768875cbbeec8260d1b84ce50c65fb865722ebddf1090ab06faa55d174ac4f87be35133cd12ccdace4aea5730ad26b05af094ca97699f862126e8775bc5f9d815a71b7dec5e1cc1a31d3553f90d725a7008c2e83cc219d1ca0f54e699c658c14a9d324aa9c0a7f11b29225340ebf39494ed719ede2d3cd19d1a034ad07b2b5eb010eeabdd7ad9688cce5095b073b70ee54cfff785689c7b7e488", + "signedEip155": "0xf8b782018884b81f5f3383ea0d5694598eebd2f9a25472fd69820f0cca768875cbbeec8260d1b84ce50c65fb865722ebddf1090ab06faa55d174ac4f87be35133cd12ccdace4aea5730ad26b05af094ca97699f862126e8775bc5f9d815a71b7dec5e1cc1a31d3553f90d725a7008c2e83cc219d8201a8a0e91ac04de39d06a938fb6e21fc0b03ad2940e1ce6aa8d48817a51376acb2a209a0065d0ef3f4ef9c6c5c08133b0ff7bcdacffea35fa08ee7478a6f7f3719c81e03", + "signedBerlin": "0x01f8b881c282018884b81f5f3383ea0d5694598eebd2f9a25472fd69820f0cca768875cbbeec8260d1b84ce50c65fb865722ebddf1090ab06faa55d174ac4f87be35133cd12ccdace4aea5730ad26b05af094ca97699f862126e8775bc5f9d815a71b7dec5e1cc1a31d3553f90d725a7008c2e83cc219dc080a0eb9b9355f5aa190f507eb76b87e95e63d7c9f11104ce451bf456b5dc02157d70a041f645283f1e7cf7dcccc74945c557699f1949d1ef7f86f55dff2380651b0c3e", + "signedLondon": "0x02f8bb81c282018881b885c1f6d6923583ea0d5694598eebd2f9a25472fd69820f0cca768875cbbeec8260d1b84ce50c65fb865722ebddf1090ab06faa55d174ac4f87be35133cd12ccdace4aea5730ad26b05af094ca97699f862126e8775bc5f9d815a71b7dec5e1cc1a31d3553f90d725a7008c2e83cc219dc080a037aa4254ae9e2741828440cfdc7465a05103423a06ffb37f2c83682585163be0a046099869dfc2d52dd4f123c7211ff8a2717188f5b075853e55c3996beb884f80", + "signatureLegacy": { + "r": "0xf54e699c658c14a9d324aa9c0a7f11b29225340ebf39494ed719ede2d3cd19d1", + "s": "0x34ad07b2b5eb010eeabdd7ad9688cce5095b073b70ee54cfff785689c7b7e488", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0xe91ac04de39d06a938fb6e21fc0b03ad2940e1ce6aa8d48817a51376acb2a209", + "s": "0x065d0ef3f4ef9c6c5c08133b0ff7bcdacffea35fa08ee7478a6f7f3719c81e03", + "v": "0x1a8" + }, + "signatureBerlin": { + "r": "0xeb9b9355f5aa190f507eb76b87e95e63d7c9f11104ce451bf456b5dc02157d70", + "s": "0x41f645283f1e7cf7dcccc74945c557699f1949d1ef7f86f55dff2380651b0c3e", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x37aa4254ae9e2741828440cfdc7465a05103423a06ffb37f2c83682585163be0", + "s": "0x46099869dfc2d52dd4f123c7211ff8a2717188f5b075853e55c3996beb884f80", + "v": "0x0" + } + }, + { + "name": "random-25", + "transaction": { + "to": "0xCF3Aae72e10af9157ca91a07aacB76FF5F4E714b", + "nonce": 941, + "gasLimit": "0x4e2767a5", + "gasPrice": "0xb7dbab6d", + "maxFeePerGas": "0x917fe51b9396d7", + "maxPriorityFeePerGas": "0x00c0f6", + "data": "0x151c1c2efc8678b90a90db505c748b8a3af7c2de", + "value": "0x40a3c72c", + "accessList": [ + { + "address": "0x5382A3B7AE58E3b83ed04B361Dd24e858604e086", + "storageKeys": [ + "0xf9f0fff83c5992655ea60b4ee4d87962402cf1e24ad838b2dff3ce1ceb5cf89d" + ] + } + ], + "chainId": "0x8080" + }, + "privateKey": "0xe81f01e0b6a747274a2c74800e1c5e8d98e793c508605de14b557517086a154a", + "unsignedLegacy": "0xf83c8203ad84b7dbab6d844e2767a594cf3aae72e10af9157ca91a07aacb76ff5f4e714b8440a3c72c94151c1c2efc8678b90a90db505c748b8a3af7c2de", + "unsignedEip155": "0xf8418203ad84b7dbab6d844e2767a594cf3aae72e10af9157ca91a07aacb76ff5f4e714b8440a3c72c94151c1c2efc8678b90a90db505c748b8a3af7c2de8280808080", + "unsignedBerlin": "0x01f8798280808203ad84b7dbab6d844e2767a594cf3aae72e10af9157ca91a07aacb76ff5f4e714b8440a3c72c94151c1c2efc8678b90a90db505c748b8a3af7c2def838f7945382a3b7ae58e3b83ed04b361dd24e858604e086e1a0f9f0fff83c5992655ea60b4ee4d87962402cf1e24ad838b2dff3ce1ceb5cf89d", + "unsignedLondon": "0x02f87f8280808203ad82c0f687917fe51b9396d7844e2767a594cf3aae72e10af9157ca91a07aacb76ff5f4e714b8440a3c72c94151c1c2efc8678b90a90db505c748b8a3af7c2def838f7945382a3b7ae58e3b83ed04b361dd24e858604e086e1a0f9f0fff83c5992655ea60b4ee4d87962402cf1e24ad838b2dff3ce1ceb5cf89d", + "signedLegacy": "0xf87f8203ad84b7dbab6d844e2767a594cf3aae72e10af9157ca91a07aacb76ff5f4e714b8440a3c72c94151c1c2efc8678b90a90db505c748b8a3af7c2de1ca0782b75519a49dffe583e337ef4c6b4ff3b23b96457b2612106ede4a4826e7d15a05eeae5cc138d347ae39d1620dc4bf583423133e88b664a02a86a5e5b15c6abf3", + "signedEip155": "0xf8828203ad84b7dbab6d844e2767a594cf3aae72e10af9157ca91a07aacb76ff5f4e714b8440a3c72c94151c1c2efc8678b90a90db505c748b8a3af7c2de83010123a0ae5894969e38574b78989de44c0cddab3b3273ee9d25290c9a4465f3a18d8d05a02940c46197256d623bfc554651f41b753b99b459d044cb37a5d1ab3cc1f8e3de", + "signedBerlin": "0x01f8bc8280808203ad84b7dbab6d844e2767a594cf3aae72e10af9157ca91a07aacb76ff5f4e714b8440a3c72c94151c1c2efc8678b90a90db505c748b8a3af7c2def838f7945382a3b7ae58e3b83ed04b361dd24e858604e086e1a0f9f0fff83c5992655ea60b4ee4d87962402cf1e24ad838b2dff3ce1ceb5cf89d01a07b8c32f20b1286cf27a448045d2f7e3a1470508fd026ddbd0dd0e07c0631c9dca071f50cbb7dc155ce8fce9b71f951e0f5113e59cd4bc5293c8d30d416530704c5", + "signedLondon": "0x02f8c28280808203ad82c0f687917fe51b9396d7844e2767a594cf3aae72e10af9157ca91a07aacb76ff5f4e714b8440a3c72c94151c1c2efc8678b90a90db505c748b8a3af7c2def838f7945382a3b7ae58e3b83ed04b361dd24e858604e086e1a0f9f0fff83c5992655ea60b4ee4d87962402cf1e24ad838b2dff3ce1ceb5cf89d01a0734f9c033c0ef450e5da4d10f9f90a8b209b49e0315bb08a448ff56fe457ad42a079d28d004765bd0dff0bdd80c3f44dcaa20902105f98760510d326918fd98282", + "signatureLegacy": { + "r": "0x782b75519a49dffe583e337ef4c6b4ff3b23b96457b2612106ede4a4826e7d15", + "s": "0x5eeae5cc138d347ae39d1620dc4bf583423133e88b664a02a86a5e5b15c6abf3", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0xae5894969e38574b78989de44c0cddab3b3273ee9d25290c9a4465f3a18d8d05", + "s": "0x2940c46197256d623bfc554651f41b753b99b459d044cb37a5d1ab3cc1f8e3de", + "v": "0x10123" + }, + "signatureBerlin": { + "r": "0x7b8c32f20b1286cf27a448045d2f7e3a1470508fd026ddbd0dd0e07c0631c9dc", + "s": "0x71f50cbb7dc155ce8fce9b71f951e0f5113e59cd4bc5293c8d30d416530704c5", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x734f9c033c0ef450e5da4d10f9f90a8b209b49e0315bb08a448ff56fe457ad42", + "s": "0x79d28d004765bd0dff0bdd80c3f44dcaa20902105f98760510d326918fd98282", + "v": "0x1" + } + }, + { + "name": "random-26", + "transaction": { + "to": "0x758Bc398A6a885CFdbd6Fc38454aEfe6028B368d", + "nonce": 283, + "gasLimit": "0x7ad47983", + "gasPrice": "0x886642", + "maxFeePerGas": "0xf91a5fd1939a01", + "maxPriorityFeePerGas": "0x6d20", + "data": "0x999e99f8d3ab49b5fff3d7d260ff6317b74d9adb4f8e590178c8e47ae02ec8504dd961b793cf3299f84d5a31629bfda6fd8406d7a812804073372fdd6e95cb6172775f963510d705ed6ca6ef662c437fbd9b89566bc0d4db53", + "value": "0x30f7bbbe", + "accessList": [ + { + "address": "0x7Aa04EF339c6F02a32c1293268EFf86EE908BBeE", + "storageKeys": [ + "0x8b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19a", + "0x77ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17", + "0x867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2", + "0x3c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55" + ] + }, + { + "address": "0x5F66D25CFEcB5CC61Ddb2f3b74766C6B42fbD4dd", + "storageKeys": [ + "0x8b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19a", + "0x77ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17", + "0x867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2", + "0x3c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55" + ] + }, + { + "address": "0x4056252dA35B2f81Ac719EE07a88f3883EbcDAd9", + "storageKeys": [ + "0x8b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19a", + "0x77ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17", + "0x867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2", + "0x3c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55" + ] + }, + { + "address": "0x068887646de0cCff30cA7133e47ECa5AA01F9Ac6", + "storageKeys": [ + "0x8b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19a", + "0x77ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17", + "0x867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2", + "0x3c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55" + ] + } + ], + "chainId": "0xcac3" + }, + "privateKey": "0x3a7272d9d920215e9cef3f5d2c992b29d02c44006f0bc484ecb12e99120d7e16", + "unsignedLegacy": "0xf88182011b83886642847ad4798394758bc398a6a885cfdbd6fc38454aefe6028b368d8430f7bbbeb859999e99f8d3ab49b5fff3d7d260ff6317b74d9adb4f8e590178c8e47ae02ec8504dd961b793cf3299f84d5a31629bfda6fd8406d7a812804073372fdd6e95cb6172775f963510d705ed6ca6ef662c437fbd9b89566bc0d4db53", + "unsignedEip155": "0xf88682011b83886642847ad4798394758bc398a6a885cfdbd6fc38454aefe6028b368d8430f7bbbeb859999e99f8d3ab49b5fff3d7d260ff6317b74d9adb4f8e590178c8e47ae02ec8504dd961b793cf3299f84d5a31629bfda6fd8406d7a812804073372fdd6e95cb6172775f963510d705ed6ca6ef662c437fbd9b89566bc0d4db5382cac38080", + "unsignedBerlin": "0x01f902fb82cac382011b83886642847ad4798394758bc398a6a885cfdbd6fc38454aefe6028b368d8430f7bbbeb859999e99f8d3ab49b5fff3d7d260ff6317b74d9adb4f8e590178c8e47ae02ec8504dd961b793cf3299f84d5a31629bfda6fd8406d7a812804073372fdd6e95cb6172775f963510d705ed6ca6ef662c437fbd9b89566bc0d4db53f90274f89b947aa04ef339c6f02a32c1293268eff86ee908bbeef884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55f89b945f66d25cfecb5cc61ddb2f3b74766c6b42fbd4ddf884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55f89b944056252da35b2f81ac719ee07a88f3883ebcdad9f884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55f89b94068887646de0ccff30ca7133e47eca5aa01f9ac6f884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55", + "unsignedLondon": "0x02f9030282cac382011b826d2087f91a5fd1939a01847ad4798394758bc398a6a885cfdbd6fc38454aefe6028b368d8430f7bbbeb859999e99f8d3ab49b5fff3d7d260ff6317b74d9adb4f8e590178c8e47ae02ec8504dd961b793cf3299f84d5a31629bfda6fd8406d7a812804073372fdd6e95cb6172775f963510d705ed6ca6ef662c437fbd9b89566bc0d4db53f90274f89b947aa04ef339c6f02a32c1293268eff86ee908bbeef884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55f89b945f66d25cfecb5cc61ddb2f3b74766c6b42fbd4ddf884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55f89b944056252da35b2f81ac719ee07a88f3883ebcdad9f884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55f89b94068887646de0ccff30ca7133e47eca5aa01f9ac6f884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55", + "signedLegacy": "0xf8c482011b83886642847ad4798394758bc398a6a885cfdbd6fc38454aefe6028b368d8430f7bbbeb859999e99f8d3ab49b5fff3d7d260ff6317b74d9adb4f8e590178c8e47ae02ec8504dd961b793cf3299f84d5a31629bfda6fd8406d7a812804073372fdd6e95cb6172775f963510d705ed6ca6ef662c437fbd9b89566bc0d4db531ba0e4a8dbbe0700d94a4f56ff2b2b274dcd57c347a7d469acf56d22e046df829d00a07b3ebc12a647afbf4a68798cf2fad936b2c05001fd456c1628f9948fe3dc4a15", + "signedEip155": "0xf8c782011b83886642847ad4798394758bc398a6a885cfdbd6fc38454aefe6028b368d8430f7bbbeb859999e99f8d3ab49b5fff3d7d260ff6317b74d9adb4f8e590178c8e47ae02ec8504dd961b793cf3299f84d5a31629bfda6fd8406d7a812804073372fdd6e95cb6172775f963510d705ed6ca6ef662c437fbd9b89566bc0d4db53830195aaa099ec2ed61e71e3c8ff67c0884260cb1988f43791f189d9b1067e6ec9c0350117a07272abbc1de123c18837f64d138df1337c6f09036d70ff9c157df639350624b7", + "signedBerlin": "0x01f9033e82cac382011b83886642847ad4798394758bc398a6a885cfdbd6fc38454aefe6028b368d8430f7bbbeb859999e99f8d3ab49b5fff3d7d260ff6317b74d9adb4f8e590178c8e47ae02ec8504dd961b793cf3299f84d5a31629bfda6fd8406d7a812804073372fdd6e95cb6172775f963510d705ed6ca6ef662c437fbd9b89566bc0d4db53f90274f89b947aa04ef339c6f02a32c1293268eff86ee908bbeef884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55f89b945f66d25cfecb5cc61ddb2f3b74766c6b42fbd4ddf884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55f89b944056252da35b2f81ac719ee07a88f3883ebcdad9f884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55f89b94068887646de0ccff30ca7133e47eca5aa01f9ac6f884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e5501a08fa376ef64811d90bb3e182d9e3bf1d0855e23196e6ee58160f606c9233684a6a0310394f8bf89d44b9610a399819e7438f03dc274c03df786bfc0eafb45ba0b5a", + "signedLondon": "0x02f9034482cac382011b826d2087f91a5fd1939a01847ad4798394758bc398a6a885cfdbd6fc38454aefe6028b368d8430f7bbbeb859999e99f8d3ab49b5fff3d7d260ff6317b74d9adb4f8e590178c8e47ae02ec8504dd961b793cf3299f84d5a31629bfda6fd8406d7a812804073372fdd6e95cb6172775f963510d705ed6ca6ef662c437fbd9b89566bc0d4db53f90274f89b947aa04ef339c6f02a32c1293268eff86ee908bbeef884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55f89b945f66d25cfecb5cc61ddb2f3b74766c6b42fbd4ddf884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55f89b944056252da35b2f81ac719ee07a88f3883ebcdad9f884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55f89b94068887646de0ccff30ca7133e47eca5aa01f9ac6f884a08b41f3a1712b04779027244978e3c14e6b779bff43a49fc7a99200a588fac19aa077ee4b58a944e970a8222af116a065fd9ed3023f0f8f0ec4f4db6596474efc17a0867078827bfb48a319552dc5a224d8376b24f5cdbcb59d141f07c7352efd4cd2a03c7d6019705980a16f927c04d147b33cd7d79410323c584acfa8b1f3adcb6e55809f3b7db6623399d0eb59fb065f50b7ec6ec1779889572e5a29f39d582a3b1762a049b53db01df57bec3f8ae55e6139825aa050f46cd2bfd7da8c0a8b480017d2da", + "signatureLegacy": { + "r": "0xe4a8dbbe0700d94a4f56ff2b2b274dcd57c347a7d469acf56d22e046df829d00", + "s": "0x7b3ebc12a647afbf4a68798cf2fad936b2c05001fd456c1628f9948fe3dc4a15", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x99ec2ed61e71e3c8ff67c0884260cb1988f43791f189d9b1067e6ec9c0350117", + "s": "0x7272abbc1de123c18837f64d138df1337c6f09036d70ff9c157df639350624b7", + "v": "0x195aa" + }, + "signatureBerlin": { + "r": "0x8fa376ef64811d90bb3e182d9e3bf1d0855e23196e6ee58160f606c9233684a6", + "s": "0x310394f8bf89d44b9610a399819e7438f03dc274c03df786bfc0eafb45ba0b5a", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x003b7db6623399d0eb59fb065f50b7ec6ec1779889572e5a29f39d582a3b1762", + "s": "0x49b53db01df57bec3f8ae55e6139825aa050f46cd2bfd7da8c0a8b480017d2da", + "v": "0x0" + } + }, + { + "name": "random-27", + "transaction": { + "to": "0x4eD78781224E8D9546c3003b83A25337ce362738", + "nonce": 501, + "gasLimit": "0xe9e61f7d6e", + "gasPrice": "0xcdf3", + "maxFeePerGas": "0x343e21df97", + "maxPriorityFeePerGas": "0xcdf1", + "data": "0x78347e0a5ff997181fd3db5905870ee21ce97b1d842fe70903b458f9c0e40a4b", + "value": "0xa4d6b5", + "accessList": [], + "chainId": "0x8972db" + }, + "privateKey": "0xd4b7564ff7521fc756148cc2e94ee6bd3bd036ec2a7abbfea50d6aa0beb75414", + "unsignedLegacy": "0xf8468201f582cdf385e9e61f7d6e944ed78781224e8d9546c3003b83a25337ce36273883a4d6b5a078347e0a5ff997181fd3db5905870ee21ce97b1d842fe70903b458f9c0e40a4b", + "unsignedEip155": "0xf84c8201f582cdf385e9e61f7d6e944ed78781224e8d9546c3003b83a25337ce36273883a4d6b5a078347e0a5ff997181fd3db5905870ee21ce97b1d842fe70903b458f9c0e40a4b838972db8080", + "unsignedBerlin": "0x01f84b838972db8201f582cdf385e9e61f7d6e944ed78781224e8d9546c3003b83a25337ce36273883a4d6b5a078347e0a5ff997181fd3db5905870ee21ce97b1d842fe70903b458f9c0e40a4bc0", + "unsignedLondon": "0x02f851838972db8201f582cdf185343e21df9785e9e61f7d6e944ed78781224e8d9546c3003b83a25337ce36273883a4d6b5a078347e0a5ff997181fd3db5905870ee21ce97b1d842fe70903b458f9c0e40a4bc0", + "signedLegacy": "0xf8898201f582cdf385e9e61f7d6e944ed78781224e8d9546c3003b83a25337ce36273883a4d6b5a078347e0a5ff997181fd3db5905870ee21ce97b1d842fe70903b458f9c0e40a4b1ca07829ed3567007c1eccd893d3f99d8dcccfd66264d7666d4013b9b43655708869a015b973dc54b7bbb9c58f19eef8a2b55b2530e3921665dc51140197c188c5175f", + "signedEip155": "0xf88d8201f582cdf385e9e61f7d6e944ed78781224e8d9546c3003b83a25337ce36273883a4d6b5a078347e0a5ff997181fd3db5905870ee21ce97b1d842fe70903b458f9c0e40a4b840112e5daa0e04450f3273d06e53c44d8081a72a97a8e3b20047ea337c56ecf040d17aa53a3a0023542d35dba84fbf979dbc6c75073e4b08f10899b8e3b62e1549d71a2255015", + "signedBerlin": "0x01f88e838972db8201f582cdf385e9e61f7d6e944ed78781224e8d9546c3003b83a25337ce36273883a4d6b5a078347e0a5ff997181fd3db5905870ee21ce97b1d842fe70903b458f9c0e40a4bc080a0e4a17f7e16e2ac8985a4844a894c54a880a8d6e355d0adf5ee40d644e92fc35fa04c8193634854a8e13622c6320e583e48c5dbead6d4704a39d23addf7b56070f1", + "signedLondon": "0x02f894838972db8201f582cdf185343e21df9785e9e61f7d6e944ed78781224e8d9546c3003b83a25337ce36273883a4d6b5a078347e0a5ff997181fd3db5905870ee21ce97b1d842fe70903b458f9c0e40a4bc001a00c087ab4a077e9f9c6da6f249514c722ae46f0c921422a62fdbec7e0ae96e8e2a032bed662a402795ec0ff814eeece8c140f601b772f209dcad03d73032eab69ec", + "signatureLegacy": { + "r": "0x7829ed3567007c1eccd893d3f99d8dcccfd66264d7666d4013b9b43655708869", + "s": "0x15b973dc54b7bbb9c58f19eef8a2b55b2530e3921665dc51140197c188c5175f", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0xe04450f3273d06e53c44d8081a72a97a8e3b20047ea337c56ecf040d17aa53a3", + "s": "0x023542d35dba84fbf979dbc6c75073e4b08f10899b8e3b62e1549d71a2255015", + "v": "0x112e5da" + }, + "signatureBerlin": { + "r": "0xe4a17f7e16e2ac8985a4844a894c54a880a8d6e355d0adf5ee40d644e92fc35f", + "s": "0x4c8193634854a8e13622c6320e583e48c5dbead6d4704a39d23addf7b56070f1", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x0c087ab4a077e9f9c6da6f249514c722ae46f0c921422a62fdbec7e0ae96e8e2", + "s": "0x32bed662a402795ec0ff814eeece8c140f601b772f209dcad03d73032eab69ec", + "v": "0x1" + } + }, + { + "name": "random-29", + "transaction": { + "to": "0x39EF92dBF568890EC4e3c297849DaeFBcdfD5b62", + "nonce": 655, + "gasLimit": "0x7f42bd93", + "gasPrice": "0xbec8", + "maxFeePerGas": "0xd608ba4fb5c7", + "maxPriorityFeePerGas": "0xc23b", + "data": "0xa1332d86cf1b22f26350e4fdca8cf06930a3c5580f1757ba5e2d313f3a72d3cf4b402f359e21556f4df4faf3043343d7d8252f0f6fe930847db5ca0917527f642227f8a190755f2b8d", + "value": "0x6ddff0", + "accessList": [ + { + "address": "0x736704601aDEe519B7bB78a863Aa4dbe8404c28d", + "storageKeys": [ + "0x0cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0", + "0xa747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3", + "0xe4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfc" + ] + }, + { + "address": "0x6d998366ed8753D04e8657365cE8C51a835D523B", + "storageKeys": [ + "0x0cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0", + "0xa747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3", + "0xe4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfc" + ] + }, + { + "address": "0x738fa560278f8094220Bff4aA29372c6660187f7", + "storageKeys": [ + "0x0cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0", + "0xa747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3", + "0xe4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfc" + ] + }, + { + "address": "0x6A8433E54C68febECE19B8F73A09137358680EC7", + "storageKeys": [ + "0x0cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0", + "0xa747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3", + "0xe4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfc" + ] + } + ], + "chainId": "0x63e7bbb7b9" + }, + "privateKey": "0x24dda9adc8b5dc359425dfe39c92f8e3f77a00da6ed3e8ee5cad62009b97cd2a", + "unsignedLegacy": "0xf86f82028f82bec8847f42bd939439ef92dbf568890ec4e3c297849daefbcdfd5b62836ddff0b849a1332d86cf1b22f26350e4fdca8cf06930a3c5580f1757ba5e2d313f3a72d3cf4b402f359e21556f4df4faf3043343d7d8252f0f6fe930847db5ca0917527f642227f8a190755f2b8d", + "unsignedEip155": "0xf87782028f82bec8847f42bd939439ef92dbf568890ec4e3c297849daefbcdfd5b62836ddff0b849a1332d86cf1b22f26350e4fdca8cf06930a3c5580f1757ba5e2d313f3a72d3cf4b402f359e21556f4df4faf3043343d7d8252f0f6fe930847db5ca0917527f642227f8a190755f2b8d8563e7bbb7b98080", + "unsignedBerlin": "0x01f902688563e7bbb7b982028f82bec8847f42bd939439ef92dbf568890ec4e3c297849daefbcdfd5b62836ddff0b849a1332d86cf1b22f26350e4fdca8cf06930a3c5580f1757ba5e2d313f3a72d3cf4b402f359e21556f4df4faf3043343d7d8252f0f6fe930847db5ca0917527f642227f8a190755f2b8df901f0f87a94736704601adee519b7bb78a863aa4dbe8404c28df863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfcf87a946d998366ed8753d04e8657365ce8c51a835d523bf863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfcf87a94738fa560278f8094220bff4aa29372c6660187f7f863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfcf87a946a8433e54c68febece19b8f73a09137358680ec7f863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfc", + "unsignedLondon": "0x02f9026f8563e7bbb7b982028f82c23b86d608ba4fb5c7847f42bd939439ef92dbf568890ec4e3c297849daefbcdfd5b62836ddff0b849a1332d86cf1b22f26350e4fdca8cf06930a3c5580f1757ba5e2d313f3a72d3cf4b402f359e21556f4df4faf3043343d7d8252f0f6fe930847db5ca0917527f642227f8a190755f2b8df901f0f87a94736704601adee519b7bb78a863aa4dbe8404c28df863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfcf87a946d998366ed8753d04e8657365ce8c51a835d523bf863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfcf87a94738fa560278f8094220bff4aa29372c6660187f7f863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfcf87a946a8433e54c68febece19b8f73a09137358680ec7f863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfc", + "signedLegacy": "0xf8b282028f82bec8847f42bd939439ef92dbf568890ec4e3c297849daefbcdfd5b62836ddff0b849a1332d86cf1b22f26350e4fdca8cf06930a3c5580f1757ba5e2d313f3a72d3cf4b402f359e21556f4df4faf3043343d7d8252f0f6fe930847db5ca0917527f642227f8a190755f2b8d1ba0eaf749d722c432fd4435ae78243ced0d57de87a2d457c5c7cf664f6183d95eaaa05aa7bbb7feabe6b7feeda1da2223c5d385a1c14178eb47573abed249ac19183e", + "signedEip155": "0xf8b782028f82bec8847f42bd939439ef92dbf568890ec4e3c297849daefbcdfd5b62836ddff0b849a1332d86cf1b22f26350e4fdca8cf06930a3c5580f1757ba5e2d313f3a72d3cf4b402f359e21556f4df4faf3043343d7d8252f0f6fe930847db5ca0917527f642227f8a190755f2b8d85c7cf776f95a00f90aa8f3adac27ec0d9ac957ba4e424f31a7cc0411f343d23d8060e0c3d17f2a06fb73ecf12fbdf682c07d6558bf55d9a2a6d9bbe4e5ff20d8650726c0e017bbd", + "signedBerlin": "0x01f902ab8563e7bbb7b982028f82bec8847f42bd939439ef92dbf568890ec4e3c297849daefbcdfd5b62836ddff0b849a1332d86cf1b22f26350e4fdca8cf06930a3c5580f1757ba5e2d313f3a72d3cf4b402f359e21556f4df4faf3043343d7d8252f0f6fe930847db5ca0917527f642227f8a190755f2b8df901f0f87a94736704601adee519b7bb78a863aa4dbe8404c28df863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfcf87a946d998366ed8753d04e8657365ce8c51a835d523bf863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfcf87a94738fa560278f8094220bff4aa29372c6660187f7f863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfcf87a946a8433e54c68febece19b8f73a09137358680ec7f863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfc80a09b5a033899a449b7311c97018d36c4a487596534091489b994e848eb8148902ca0221b7344481e71cc1fcb939ec303f8b8462fedc6bdfb4d8de1a463735c9681e3", + "signedLondon": "0x02f902b28563e7bbb7b982028f82c23b86d608ba4fb5c7847f42bd939439ef92dbf568890ec4e3c297849daefbcdfd5b62836ddff0b849a1332d86cf1b22f26350e4fdca8cf06930a3c5580f1757ba5e2d313f3a72d3cf4b402f359e21556f4df4faf3043343d7d8252f0f6fe930847db5ca0917527f642227f8a190755f2b8df901f0f87a94736704601adee519b7bb78a863aa4dbe8404c28df863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfcf87a946d998366ed8753d04e8657365ce8c51a835d523bf863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfcf87a94738fa560278f8094220bff4aa29372c6660187f7f863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfcf87a946a8433e54c68febece19b8f73a09137358680ec7f863a00cb5823fe4963551b7448da2cb255c54cb952b1d29aa906d0db8a0369b07acc0a0a747cdaee63c094c448b58b76e9b7555459bf28fe41e33d8e485334b3955dee3a0e4495e263b85cf99f8f4805be8aa418a6da0e7e9d9bb74ef62fbea129fb02bfc80a0bdee7e9fe7b0edd0b7ac9c6c0f0cd410a9a425fb60492bd9890f5b962ff62beca043ced401ab83efea9ec600617bdd94d7377c5c99fca2ac949bcb11eff3da6854", + "signatureLegacy": { + "r": "0xeaf749d722c432fd4435ae78243ced0d57de87a2d457c5c7cf664f6183d95eaa", + "s": "0x5aa7bbb7feabe6b7feeda1da2223c5d385a1c14178eb47573abed249ac19183e", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x0f90aa8f3adac27ec0d9ac957ba4e424f31a7cc0411f343d23d8060e0c3d17f2", + "s": "0x6fb73ecf12fbdf682c07d6558bf55d9a2a6d9bbe4e5ff20d8650726c0e017bbd", + "v": "0xc7cf776f95" + }, + "signatureBerlin": { + "r": "0x9b5a033899a449b7311c97018d36c4a487596534091489b994e848eb8148902c", + "s": "0x221b7344481e71cc1fcb939ec303f8b8462fedc6bdfb4d8de1a463735c9681e3", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xbdee7e9fe7b0edd0b7ac9c6c0f0cd410a9a425fb60492bd9890f5b962ff62bec", + "s": "0x43ced401ab83efea9ec600617bdd94d7377c5c99fca2ac949bcb11eff3da6854", + "v": "0x0" + } + }, + { + "name": "random-30", + "transaction": { + "to": "0xD81feE96A6c49D66C3e949Cd679792e10bf9A7c3", + "nonce": 237, + "gasLimit": "0x0e4296f22b", + "gasPrice": "0x320fd5", + "maxFeePerGas": "0x64b320ccf8845e", + "maxPriorityFeePerGas": "0x4d2d71", + "data": "0x0eeb3b5f46d0cdc7570c13b39ce3461489ff1b6ebb6f11c0f81a429fc934947eeb320a2cfaaab19769fba90621774868fdffba3e1ccd2837809aafcdef89b18b1c2b9d4b6c58ee3c7f3e91cfdcdf5a134225388be8", + "value": "0x02", + "accessList": [ + { + "address": "0x8EFDe420199EaEf765D5E17902088f022F45b497", + "storageKeys": [ + "0x3150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a0" + ] + }, + { + "address": "0xda1cEB33c33Ea5d07374973b279c80c734917381", + "storageKeys": [ + "0x3150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a0" + ] + }, + { + "address": "0x18665e49f685c3b280c48cF8A18b16fD7C704338", + "storageKeys": [ + "0x3150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a0" + ] + } + ], + "chainId": "0xad9c" + }, + "privateKey": "0x348a5bf7826e17ff90d6b8db8462ae492818e4cd25c75a33ca07eb43400ad713", + "unsignedLegacy": "0xf87981ed83320fd5850e4296f22b94d81fee96a6c49d66c3e949cd679792e10bf9a7c302b8550eeb3b5f46d0cdc7570c13b39ce3461489ff1b6ebb6f11c0f81a429fc934947eeb320a2cfaaab19769fba90621774868fdffba3e1ccd2837809aafcdef89b18b1c2b9d4b6c58ee3c7f3e91cfdcdf5a134225388be8", + "unsignedEip155": "0xf87e81ed83320fd5850e4296f22b94d81fee96a6c49d66c3e949cd679792e10bf9a7c302b8550eeb3b5f46d0cdc7570c13b39ce3461489ff1b6ebb6f11c0f81a429fc934947eeb320a2cfaaab19769fba90621774868fdffba3e1ccd2837809aafcdef89b18b1c2b9d4b6c58ee3c7f3e91cfdcdf5a134225388be882ad9c8080", + "unsignedBerlin": "0x01f9012682ad9c81ed83320fd5850e4296f22b94d81fee96a6c49d66c3e949cd679792e10bf9a7c302b8550eeb3b5f46d0cdc7570c13b39ce3461489ff1b6ebb6f11c0f81a429fc934947eeb320a2cfaaab19769fba90621774868fdffba3e1ccd2837809aafcdef89b18b1c2b9d4b6c58ee3c7f3e91cfdcdf5a134225388be8f8a8f7948efde420199eaef765d5e17902088f022f45b497e1a03150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a0f794da1ceb33c33ea5d07374973b279c80c734917381e1a03150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a0f79418665e49f685c3b280c48cf8a18b16fd7c704338e1a03150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a0", + "unsignedLondon": "0x02f9012e82ad9c81ed834d2d718764b320ccf8845e850e4296f22b94d81fee96a6c49d66c3e949cd679792e10bf9a7c302b8550eeb3b5f46d0cdc7570c13b39ce3461489ff1b6ebb6f11c0f81a429fc934947eeb320a2cfaaab19769fba90621774868fdffba3e1ccd2837809aafcdef89b18b1c2b9d4b6c58ee3c7f3e91cfdcdf5a134225388be8f8a8f7948efde420199eaef765d5e17902088f022f45b497e1a03150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a0f794da1ceb33c33ea5d07374973b279c80c734917381e1a03150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a0f79418665e49f685c3b280c48cf8a18b16fd7c704338e1a03150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a0", + "signedLegacy": "0xf8bc81ed83320fd5850e4296f22b94d81fee96a6c49d66c3e949cd679792e10bf9a7c302b8550eeb3b5f46d0cdc7570c13b39ce3461489ff1b6ebb6f11c0f81a429fc934947eeb320a2cfaaab19769fba90621774868fdffba3e1ccd2837809aafcdef89b18b1c2b9d4b6c58ee3c7f3e91cfdcdf5a134225388be81ba046bb2bee44c7bf835db706e3c3e2cba9374ca7d36335c45f9a256dc1ea570717a076aa194b82defe5e50b555362afc723990ae4ef804b18c644d2cae1da86e1635", + "signedEip155": "0xf8bf81ed83320fd5850e4296f22b94d81fee96a6c49d66c3e949cd679792e10bf9a7c302b8550eeb3b5f46d0cdc7570c13b39ce3461489ff1b6ebb6f11c0f81a429fc934947eeb320a2cfaaab19769fba90621774868fdffba3e1ccd2837809aafcdef89b18b1c2b9d4b6c58ee3c7f3e91cfdcdf5a134225388be883015b5ca053e4bdad98b727331a383da2ee9f10a25d4897161fba691b25072a04fb9d3e30a00d032b391b1d3adccc69eabbaa133c63d0c3322c235742aae095322792817a1f", + "signedBerlin": "0x01f9016982ad9c81ed83320fd5850e4296f22b94d81fee96a6c49d66c3e949cd679792e10bf9a7c302b8550eeb3b5f46d0cdc7570c13b39ce3461489ff1b6ebb6f11c0f81a429fc934947eeb320a2cfaaab19769fba90621774868fdffba3e1ccd2837809aafcdef89b18b1c2b9d4b6c58ee3c7f3e91cfdcdf5a134225388be8f8a8f7948efde420199eaef765d5e17902088f022f45b497e1a03150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a0f794da1ceb33c33ea5d07374973b279c80c734917381e1a03150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a0f79418665e49f685c3b280c48cf8a18b16fd7c704338e1a03150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a080a058dad2bfa45ad1b083596e6336b7afe5ab1f2afa8f24b65ed46012f91b5f172fa03c4709c38ce7cc11714b3f5fb025ef0becf89cdc09bdcc9acd1f570d75c99234", + "signedLondon": "0x02f9017182ad9c81ed834d2d718764b320ccf8845e850e4296f22b94d81fee96a6c49d66c3e949cd679792e10bf9a7c302b8550eeb3b5f46d0cdc7570c13b39ce3461489ff1b6ebb6f11c0f81a429fc934947eeb320a2cfaaab19769fba90621774868fdffba3e1ccd2837809aafcdef89b18b1c2b9d4b6c58ee3c7f3e91cfdcdf5a134225388be8f8a8f7948efde420199eaef765d5e17902088f022f45b497e1a03150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a0f794da1ceb33c33ea5d07374973b279c80c734917381e1a03150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a0f79418665e49f685c3b280c48cf8a18b16fd7c704338e1a03150715b5ad9a1e19f9e5d7acb57041c056751bf3517085406225bc939a1a6a001a09fca68ea04bc5d2dee86e7bc7e6e19308c0ad61446df8c9380e9124f49d64e1ea018f5ca014333339cac69ee07abd855cd735f27ad77e72da1ed3c36ae6406efb7", + "signatureLegacy": { + "r": "0x46bb2bee44c7bf835db706e3c3e2cba9374ca7d36335c45f9a256dc1ea570717", + "s": "0x76aa194b82defe5e50b555362afc723990ae4ef804b18c644d2cae1da86e1635", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x53e4bdad98b727331a383da2ee9f10a25d4897161fba691b25072a04fb9d3e30", + "s": "0x0d032b391b1d3adccc69eabbaa133c63d0c3322c235742aae095322792817a1f", + "v": "0x15b5c" + }, + "signatureBerlin": { + "r": "0x58dad2bfa45ad1b083596e6336b7afe5ab1f2afa8f24b65ed46012f91b5f172f", + "s": "0x3c4709c38ce7cc11714b3f5fb025ef0becf89cdc09bdcc9acd1f570d75c99234", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x9fca68ea04bc5d2dee86e7bc7e6e19308c0ad61446df8c9380e9124f49d64e1e", + "s": "0x18f5ca014333339cac69ee07abd855cd735f27ad77e72da1ed3c36ae6406efb7", + "v": "0x1" + } + }, + { + "name": "random-31", + "transaction": { + "to": "0x1Cf101d4301Ac8FF0178FC31684b57E9Da7C4b4b", + "nonce": 940, + "gasLimit": "0x4e35a394", + "gasPrice": "0xb382", + "maxFeePerGas": "0xc8acf4154649", + "maxPriorityFeePerGas": "0xb576", + "data": "0xdadd8255817f91d587d8029128a8607a5b15079038b9ad7a5a35fc45f7f989fb7bb8d9b45037d5849d340f69a82ba7195035ac19495beb4222e9d3155d8079480a0204d70ffb052afee620da13419377e0da95ee5bbb89a34e9ad9837a568677ad17b64846be6ab4d157dd6a599f93", + "value": "0xe3", + "accessList": [], + "chainId": "0x50bd950901" + }, + "privateKey": "0xc706fac1164ede0deacb3773e5137435f4d889ed859498566aa862dd238d0e2d", + "unsignedLegacy": "0xf8938203ac82b382844e35a394941cf101d4301ac8ff0178fc31684b57e9da7c4b4b81e3b86fdadd8255817f91d587d8029128a8607a5b15079038b9ad7a5a35fc45f7f989fb7bb8d9b45037d5849d340f69a82ba7195035ac19495beb4222e9d3155d8079480a0204d70ffb052afee620da13419377e0da95ee5bbb89a34e9ad9837a568677ad17b64846be6ab4d157dd6a599f93", + "unsignedEip155": "0xf89b8203ac82b382844e35a394941cf101d4301ac8ff0178fc31684b57e9da7c4b4b81e3b86fdadd8255817f91d587d8029128a8607a5b15079038b9ad7a5a35fc45f7f989fb7bb8d9b45037d5849d340f69a82ba7195035ac19495beb4222e9d3155d8079480a0204d70ffb052afee620da13419377e0da95ee5bbb89a34e9ad9837a568677ad17b64846be6ab4d157dd6a599f938550bd9509018080", + "unsignedBerlin": "0x01f89a8550bd9509018203ac82b382844e35a394941cf101d4301ac8ff0178fc31684b57e9da7c4b4b81e3b86fdadd8255817f91d587d8029128a8607a5b15079038b9ad7a5a35fc45f7f989fb7bb8d9b45037d5849d340f69a82ba7195035ac19495beb4222e9d3155d8079480a0204d70ffb052afee620da13419377e0da95ee5bbb89a34e9ad9837a568677ad17b64846be6ab4d157dd6a599f93c0", + "unsignedLondon": "0x02f8a18550bd9509018203ac82b57686c8acf4154649844e35a394941cf101d4301ac8ff0178fc31684b57e9da7c4b4b81e3b86fdadd8255817f91d587d8029128a8607a5b15079038b9ad7a5a35fc45f7f989fb7bb8d9b45037d5849d340f69a82ba7195035ac19495beb4222e9d3155d8079480a0204d70ffb052afee620da13419377e0da95ee5bbb89a34e9ad9837a568677ad17b64846be6ab4d157dd6a599f93c0", + "signedLegacy": "0xf8d68203ac82b382844e35a394941cf101d4301ac8ff0178fc31684b57e9da7c4b4b81e3b86fdadd8255817f91d587d8029128a8607a5b15079038b9ad7a5a35fc45f7f989fb7bb8d9b45037d5849d340f69a82ba7195035ac19495beb4222e9d3155d8079480a0204d70ffb052afee620da13419377e0da95ee5bbb89a34e9ad9837a568677ad17b64846be6ab4d157dd6a599f931ba057b0d5b14c86070871e941e941e85272365bb47b92601a421f8a93d15f5f8d91a00e1290362a622ed03e81f243e42605ec87a31b6a335fab9eda54fed7ec46fda4", + "signedEip155": "0xf8db8203ac82b382844e35a394941cf101d4301ac8ff0178fc31684b57e9da7c4b4b81e3b86fdadd8255817f91d587d8029128a8607a5b15079038b9ad7a5a35fc45f7f989fb7bb8d9b45037d5849d340f69a82ba7195035ac19495beb4222e9d3155d8079480a0204d70ffb052afee620da13419377e0da95ee5bbb89a34e9ad9837a568677ad17b64846be6ab4d157dd6a599f9385a17b2a1226a01dbff0cdb89d3975749c63a423d4e641d916e4841ed3260690239dca35902090a0591867f7bb5eca7c4244680707fcc88d8952257a9ac3099426c0333bb1263317", + "signedBerlin": "0x01f8dd8550bd9509018203ac82b382844e35a394941cf101d4301ac8ff0178fc31684b57e9da7c4b4b81e3b86fdadd8255817f91d587d8029128a8607a5b15079038b9ad7a5a35fc45f7f989fb7bb8d9b45037d5849d340f69a82ba7195035ac19495beb4222e9d3155d8079480a0204d70ffb052afee620da13419377e0da95ee5bbb89a34e9ad9837a568677ad17b64846be6ab4d157dd6a599f93c001a0f4d9ed06f4dea378a24d3b7e125a7c5cf1eda60208b341106f84e664b28d3a51a043b8de316dce58ca60a30e68680d4dd3734bce7137a401c1f74f70a17d7bf8d1", + "signedLondon": "0x02f8e48550bd9509018203ac82b57686c8acf4154649844e35a394941cf101d4301ac8ff0178fc31684b57e9da7c4b4b81e3b86fdadd8255817f91d587d8029128a8607a5b15079038b9ad7a5a35fc45f7f989fb7bb8d9b45037d5849d340f69a82ba7195035ac19495beb4222e9d3155d8079480a0204d70ffb052afee620da13419377e0da95ee5bbb89a34e9ad9837a568677ad17b64846be6ab4d157dd6a599f93c001a0a7649f2b700fcad4d1217489345c400cdbc056e1f2cc1f90d1b23fca4b1db890a01bb786854eae85c75995506ed8042b934abad0a419f246e24eacc99ec9dbbfe9", + "signatureLegacy": { + "r": "0x57b0d5b14c86070871e941e941e85272365bb47b92601a421f8a93d15f5f8d91", + "s": "0x0e1290362a622ed03e81f243e42605ec87a31b6a335fab9eda54fed7ec46fda4", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x1dbff0cdb89d3975749c63a423d4e641d916e4841ed3260690239dca35902090", + "s": "0x591867f7bb5eca7c4244680707fcc88d8952257a9ac3099426c0333bb1263317", + "v": "0xa17b2a1226" + }, + "signatureBerlin": { + "r": "0xf4d9ed06f4dea378a24d3b7e125a7c5cf1eda60208b341106f84e664b28d3a51", + "s": "0x43b8de316dce58ca60a30e68680d4dd3734bce7137a401c1f74f70a17d7bf8d1", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xa7649f2b700fcad4d1217489345c400cdbc056e1f2cc1f90d1b23fca4b1db890", + "s": "0x1bb786854eae85c75995506ed8042b934abad0a419f246e24eacc99ec9dbbfe9", + "v": "0x1" + } + }, + { + "name": "random-32", + "transaction": { + "to": "0x1A8A6D0172522dD3D6a3314Fa10CeD54CaB044e4", + "nonce": 545, + "gasLimit": "0x9061a1", + "gasPrice": "0x4165f6af", + "maxFeePerGas": "0xc0325b06337a", + "maxPriorityFeePerGas": "0x58110d", + "data": "0x0dd7f6bdf2f4d7d028c8952d130bd73220cc16b716fd4910b38322a0083feb5caed66f073c273138b5c65bc8c01fb7dc5fdb6d35b4cbd5887870e517ab25e4d1ac3dbb2e886f65362238649528a2ebb445dd0f5c800784d0d139498af454c628", + "value": "0xdead4d57", + "accessList": [ + { + "address": "0x1a0D647D3edeB04c6250716EDeA6EC1E65814397", + "storageKeys": [ + "0x5c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409a", + "0xe0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758", + "0xc28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0", + "0xf7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7b" + ] + }, + { + "address": "0x2e1c0387Ea755faF64D810BF994a5Dc0a6782bB3", + "storageKeys": [ + "0x5c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409a", + "0xe0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758", + "0xc28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0", + "0xf7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7b" + ] + }, + { + "address": "0x3D3699852f4E73fd6C3A68A2255c2Dc62f165937", + "storageKeys": [ + "0x5c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409a", + "0xe0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758", + "0xc28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0", + "0xf7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7b" + ] + }, + { + "address": "0x16eA1932E71e76Dc1C3A7B58fffCC2427dE9E4eB", + "storageKeys": [ + "0x5c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409a", + "0xe0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758", + "0xc28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0", + "0xf7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7b" + ] + } + ], + "chainId": "0x0a" + }, + "privateKey": "0xf6cc080d6c90be0787826b5393f109bc81e8f99145553fe9501cd453cf5f8c87", + "unsignedLegacy": "0xf888820221844165f6af839061a1941a8a6d0172522dd3d6a3314fa10ced54cab044e484dead4d57b8600dd7f6bdf2f4d7d028c8952d130bd73220cc16b716fd4910b38322a0083feb5caed66f073c273138b5c65bc8c01fb7dc5fdb6d35b4cbd5887870e517ab25e4d1ac3dbb2e886f65362238649528a2ebb445dd0f5c800784d0d139498af454c628", + "unsignedEip155": "0xf88b820221844165f6af839061a1941a8a6d0172522dd3d6a3314fa10ced54cab044e484dead4d57b8600dd7f6bdf2f4d7d028c8952d130bd73220cc16b716fd4910b38322a0083feb5caed66f073c273138b5c65bc8c01fb7dc5fdb6d35b4cbd5887870e517ab25e4d1ac3dbb2e886f65362238649528a2ebb445dd0f5c800784d0d139498af454c6280a8080", + "unsignedBerlin": "0x01f903000a820221844165f6af839061a1941a8a6d0172522dd3d6a3314fa10ced54cab044e484dead4d57b8600dd7f6bdf2f4d7d028c8952d130bd73220cc16b716fd4910b38322a0083feb5caed66f073c273138b5c65bc8c01fb7dc5fdb6d35b4cbd5887870e517ab25e4d1ac3dbb2e886f65362238649528a2ebb445dd0f5c800784d0d139498af454c628f90274f89b941a0d647d3edeb04c6250716edea6ec1e65814397f884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7bf89b942e1c0387ea755faf64d810bf994a5dc0a6782bb3f884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7bf89b943d3699852f4e73fd6c3a68a2255c2dc62f165937f884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7bf89b9416ea1932e71e76dc1c3a7b58fffcc2427de9e4ebf884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7b", + "unsignedLondon": "0x02f903060a8202218358110d86c0325b06337a839061a1941a8a6d0172522dd3d6a3314fa10ced54cab044e484dead4d57b8600dd7f6bdf2f4d7d028c8952d130bd73220cc16b716fd4910b38322a0083feb5caed66f073c273138b5c65bc8c01fb7dc5fdb6d35b4cbd5887870e517ab25e4d1ac3dbb2e886f65362238649528a2ebb445dd0f5c800784d0d139498af454c628f90274f89b941a0d647d3edeb04c6250716edea6ec1e65814397f884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7bf89b942e1c0387ea755faf64d810bf994a5dc0a6782bb3f884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7bf89b943d3699852f4e73fd6c3a68a2255c2dc62f165937f884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7bf89b9416ea1932e71e76dc1c3a7b58fffcc2427de9e4ebf884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7b", + "signedLegacy": "0xf8cb820221844165f6af839061a1941a8a6d0172522dd3d6a3314fa10ced54cab044e484dead4d57b8600dd7f6bdf2f4d7d028c8952d130bd73220cc16b716fd4910b38322a0083feb5caed66f073c273138b5c65bc8c01fb7dc5fdb6d35b4cbd5887870e517ab25e4d1ac3dbb2e886f65362238649528a2ebb445dd0f5c800784d0d139498af454c6281ca06baad45ef8cc014230317e0851e9a7571c66ff0b74ee4f32baa04546086708a8a00cecfba685b97554fd04f8ca8834da3a501aab84998f6133feb8747ae643d97f", + "signedEip155": "0xf8cb820221844165f6af839061a1941a8a6d0172522dd3d6a3314fa10ced54cab044e484dead4d57b8600dd7f6bdf2f4d7d028c8952d130bd73220cc16b716fd4910b38322a0083feb5caed66f073c273138b5c65bc8c01fb7dc5fdb6d35b4cbd5887870e517ab25e4d1ac3dbb2e886f65362238649528a2ebb445dd0f5c800784d0d139498af454c62837a02537907b26c9d686c4531cd39b30d5adf49a04922c2a126e948ca8c0b92c92c5a0535f96ec680d27238b6dc8e1cec5accd4ffedd85057196c17f80e7177579c6f6", + "signedBerlin": "0x01f903430a820221844165f6af839061a1941a8a6d0172522dd3d6a3314fa10ced54cab044e484dead4d57b8600dd7f6bdf2f4d7d028c8952d130bd73220cc16b716fd4910b38322a0083feb5caed66f073c273138b5c65bc8c01fb7dc5fdb6d35b4cbd5887870e517ab25e4d1ac3dbb2e886f65362238649528a2ebb445dd0f5c800784d0d139498af454c628f90274f89b941a0d647d3edeb04c6250716edea6ec1e65814397f884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7bf89b942e1c0387ea755faf64d810bf994a5dc0a6782bb3f884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7bf89b943d3699852f4e73fd6c3a68a2255c2dc62f165937f884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7bf89b9416ea1932e71e76dc1c3a7b58fffcc2427de9e4ebf884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7b80a02454eef2ffc624242b5f6529bb99809d05eac940c507f3e6b3018156da2a13f4a064f26228a7659383534d2fc40000a21c3ce85badfef9c9e63b339aff3e97c444", + "signedLondon": "0x02f903490a8202218358110d86c0325b06337a839061a1941a8a6d0172522dd3d6a3314fa10ced54cab044e484dead4d57b8600dd7f6bdf2f4d7d028c8952d130bd73220cc16b716fd4910b38322a0083feb5caed66f073c273138b5c65bc8c01fb7dc5fdb6d35b4cbd5887870e517ab25e4d1ac3dbb2e886f65362238649528a2ebb445dd0f5c800784d0d139498af454c628f90274f89b941a0d647d3edeb04c6250716edea6ec1e65814397f884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7bf89b942e1c0387ea755faf64d810bf994a5dc0a6782bb3f884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7bf89b943d3699852f4e73fd6c3a68a2255c2dc62f165937f884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7bf89b9416ea1932e71e76dc1c3a7b58fffcc2427de9e4ebf884a05c4c743f9e849af25a6bcbde357f3147fe050a8243b24324599b07443a44409aa0e0ae5f4e9cfb53ea5657c6f71a9f6d180ef603b14915939bb5cc4641fd491758a0c28f1334074c4fd8c30d72e8915cb65dcc860a0e50434a1e67fea76e2ecaadd0a0f7a34606a5a7a79039bbd2738722f49a7a10b34a89be4701d18545207a60ed7b01a0932c39d7b2caef3be93795e673656a981d6ff6a4ed01773c4607334f5a663744a00fb9b255b4759e79a25b662a5f70b0f5ca59700b5e8efd89a4f0048ae7ba8a52", + "signatureLegacy": { + "r": "0x6baad45ef8cc014230317e0851e9a7571c66ff0b74ee4f32baa04546086708a8", + "s": "0x0cecfba685b97554fd04f8ca8834da3a501aab84998f6133feb8747ae643d97f", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x2537907b26c9d686c4531cd39b30d5adf49a04922c2a126e948ca8c0b92c92c5", + "s": "0x535f96ec680d27238b6dc8e1cec5accd4ffedd85057196c17f80e7177579c6f6", + "v": "0x37" + }, + "signatureBerlin": { + "r": "0x2454eef2ffc624242b5f6529bb99809d05eac940c507f3e6b3018156da2a13f4", + "s": "0x64f26228a7659383534d2fc40000a21c3ce85badfef9c9e63b339aff3e97c444", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x932c39d7b2caef3be93795e673656a981d6ff6a4ed01773c4607334f5a663744", + "s": "0x0fb9b255b4759e79a25b662a5f70b0f5ca59700b5e8efd89a4f0048ae7ba8a52", + "v": "0x1" + } + }, + { + "name": "random-35", + "transaction": { + "to": "0xC1C06f6eb9ae61550a85218E64CDEced5b2D925c", + "nonce": 955, + "gasLimit": "0x9e15f1", + "gasPrice": "0x02ff", + "maxFeePerGas": "0xbdfd807b67", + "maxPriorityFeePerGas": "0xe87a", + "data": "0x3f5f95d302de886f2e7efbc709e7f1090f1382977a6dc8553a74adc52767c75de04d", + "value": "0x44da7f0bf5", + "accessList": [ + { + "address": "0xB3062Cc649929f0661f023168871C712710E3E2b", + "storageKeys": [ + "0x323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7c" + ] + }, + { + "address": "0xcfb86cEa245Bfa0313Ee0bD52bb541AfAd49e1cA", + "storageKeys": [ + "0x323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7c" + ] + }, + { + "address": "0xF855839b588f5C71AF66f23f55acf048975b059f", + "storageKeys": [ + "0x323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7c" + ] + }, + { + "address": "0x4A7B3DbC879Af23AF6bc942194d4a4Cc7ab64705", + "storageKeys": [ + "0x323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7c" + ] + } + ], + "chainId": "0x7068cfb1" + }, + "privateKey": "0x94e4379b160cb06d5b8e2c382bcf3f732b63a56fd3a40216ce312c135083ffd5", + "unsignedLegacy": "0xf8488203bb8202ff839e15f194c1c06f6eb9ae61550a85218e64cdeced5b2d925c8544da7f0bf5a23f5f95d302de886f2e7efbc709e7f1090f1382977a6dc8553a74adc52767c75de04d", + "unsignedEip155": "0xf84f8203bb8202ff839e15f194c1c06f6eb9ae61550a85218e64cdeced5b2d925c8544da7f0bf5a23f5f95d302de886f2e7efbc709e7f1090f1382977a6dc8553a74adc52767c75de04d847068cfb18080", + "unsignedBerlin": "0x01f9012f847068cfb18203bb8202ff839e15f194c1c06f6eb9ae61550a85218e64cdeced5b2d925c8544da7f0bf5a23f5f95d302de886f2e7efbc709e7f1090f1382977a6dc8553a74adc52767c75de04df8e0f794b3062cc649929f0661f023168871c712710e3e2be1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7cf794cfb86cea245bfa0313ee0bd52bb541afad49e1cae1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7cf794f855839b588f5c71af66f23f55acf048975b059fe1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7cf7944a7b3dbc879af23af6bc942194d4a4cc7ab64705e1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7c", + "unsignedLondon": "0x02f90135847068cfb18203bb82e87a85bdfd807b67839e15f194c1c06f6eb9ae61550a85218e64cdeced5b2d925c8544da7f0bf5a23f5f95d302de886f2e7efbc709e7f1090f1382977a6dc8553a74adc52767c75de04df8e0f794b3062cc649929f0661f023168871c712710e3e2be1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7cf794cfb86cea245bfa0313ee0bd52bb541afad49e1cae1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7cf794f855839b588f5c71af66f23f55acf048975b059fe1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7cf7944a7b3dbc879af23af6bc942194d4a4cc7ab64705e1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7c", + "signedLegacy": "0xf88b8203bb8202ff839e15f194c1c06f6eb9ae61550a85218e64cdeced5b2d925c8544da7f0bf5a23f5f95d302de886f2e7efbc709e7f1090f1382977a6dc8553a74adc52767c75de04d1ba010bade5bfbb74c6cdad243e4a3c4bcba001dddf243c700af91a18320744f5d0aa05baf9b514ae3dbade4690574f1bd83842e6cb927576ce9d8b92f84968c907cef", + "signedEip155": "0xf88f8203bb8202ff839e15f194c1c06f6eb9ae61550a85218e64cdeced5b2d925c8544da7f0bf5a23f5f95d302de886f2e7efbc709e7f1090f1382977a6dc8553a74adc52767c75de04d84e0d19f86a063263879573cf7bbf6931c04de65f6afd8ef8076a343a63d8d0b0b254e80ffb9a005d780093b281ea96c2935421685fde416fc9811e77772a6ea54a6d550d7b508", + "signedBerlin": "0x01f90172847068cfb18203bb8202ff839e15f194c1c06f6eb9ae61550a85218e64cdeced5b2d925c8544da7f0bf5a23f5f95d302de886f2e7efbc709e7f1090f1382977a6dc8553a74adc52767c75de04df8e0f794b3062cc649929f0661f023168871c712710e3e2be1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7cf794cfb86cea245bfa0313ee0bd52bb541afad49e1cae1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7cf794f855839b588f5c71af66f23f55acf048975b059fe1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7cf7944a7b3dbc879af23af6bc942194d4a4cc7ab64705e1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7c80a06594cbfa50286dd8badc08f6a5d2d733a891231e3a7f7c0713637e56a30234bba078898e0e28741a229c528983d6d504be5c8abd55fbfa53accc70efe2ac5f9313", + "signedLondon": "0x02f90178847068cfb18203bb82e87a85bdfd807b67839e15f194c1c06f6eb9ae61550a85218e64cdeced5b2d925c8544da7f0bf5a23f5f95d302de886f2e7efbc709e7f1090f1382977a6dc8553a74adc52767c75de04df8e0f794b3062cc649929f0661f023168871c712710e3e2be1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7cf794cfb86cea245bfa0313ee0bd52bb541afad49e1cae1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7cf794f855839b588f5c71af66f23f55acf048975b059fe1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7cf7944a7b3dbc879af23af6bc942194d4a4cc7ab64705e1a0323397d458a568e0b5677f5b037db50782531e27d65f066c6b45dfa30efc1f7c80a0de821b668e3ddcb15a1b3d20f3d04aae7143a5ddd182ab0c1dbd2051bbd4b281a0555dd617c19dd35e15a5b4cbe4e0e3aa0d5e2b45bf28a6e34e1111075acc1143", + "signatureLegacy": { + "r": "0x10bade5bfbb74c6cdad243e4a3c4bcba001dddf243c700af91a18320744f5d0a", + "s": "0x5baf9b514ae3dbade4690574f1bd83842e6cb927576ce9d8b92f84968c907cef", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x63263879573cf7bbf6931c04de65f6afd8ef8076a343a63d8d0b0b254e80ffb9", + "s": "0x05d780093b281ea96c2935421685fde416fc9811e77772a6ea54a6d550d7b508", + "v": "0xe0d19f86" + }, + "signatureBerlin": { + "r": "0x6594cbfa50286dd8badc08f6a5d2d733a891231e3a7f7c0713637e56a30234bb", + "s": "0x78898e0e28741a229c528983d6d504be5c8abd55fbfa53accc70efe2ac5f9313", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xde821b668e3ddcb15a1b3d20f3d04aae7143a5ddd182ab0c1dbd2051bbd4b281", + "s": "0x555dd617c19dd35e15a5b4cbe4e0e3aa0d5e2b45bf28a6e34e1111075acc1143", + "v": "0x0" + } + }, + { + "name": "random-36", + "transaction": { + "to": "0x211b8c009161BF91E56e56fD187cAACEBF627F0f", + "nonce": 892, + "gasLimit": "0x733167f072", + "gasPrice": "0x540579", + "maxFeePerGas": "0x0d6c8dfe0662c2", + "maxPriorityFeePerGas": "0xa3a5d4", + "data": "0x24739389fe1988f44e7480698fad28a3f4c31396cb5cff9b27474bfbad8fbb090cd66349e1100fda561095bc217a79", + "value": "0x8efbe0", + "accessList": [ + { + "address": "0x79B07Ad3d83848A872fEce3b3d46E7dB4C2B77d3", + "storageKeys": [ + "0x838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285" + ] + }, + { + "address": "0xF860E29327ade4d046e2E86e4b87355Dc82f424c", + "storageKeys": [ + "0x838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285" + ] + }, + { + "address": "0x6Be9715ED3f7b01749F5A2caD60DDee6f5a84d61", + "storageKeys": [ + "0x838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285" + ] + }, + { + "address": "0x7C6865F9dbfbdA8FE60C8695fBcb025073e83A7d", + "storageKeys": [ + "0x838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285" + ] + } + ], + "chainId": "0x5d26b144" + }, + "privateKey": "0x78a1164a30cb35cc295f854f3a0b5239f98961c682c7368edabada6e6c5e7141", + "unsignedLegacy": "0xf85682037c8354057985733167f07294211b8c009161bf91e56e56fd187caacebf627f0f838efbe0af24739389fe1988f44e7480698fad28a3f4c31396cb5cff9b27474bfbad8fbb090cd66349e1100fda561095bc217a79", + "unsignedEip155": "0xf85d82037c8354057985733167f07294211b8c009161bf91e56e56fd187caacebf627f0f838efbe0af24739389fe1988f44e7480698fad28a3f4c31396cb5cff9b27474bfbad8fbb090cd66349e1100fda561095bc217a79845d26b1448080", + "unsignedBerlin": "0x01f9013d845d26b14482037c8354057985733167f07294211b8c009161bf91e56e56fd187caacebf627f0f838efbe0af24739389fe1988f44e7480698fad28a3f4c31396cb5cff9b27474bfbad8fbb090cd66349e1100fda561095bc217a79f8e0f79479b07ad3d83848a872fece3b3d46e7db4c2b77d3e1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285f794f860e29327ade4d046e2e86e4b87355dc82f424ce1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285f7946be9715ed3f7b01749f5a2cad60ddee6f5a84d61e1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285f7947c6865f9dbfbda8fe60c8695fbcb025073e83a7de1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285", + "unsignedLondon": "0x02f90145845d26b14482037c83a3a5d4870d6c8dfe0662c285733167f07294211b8c009161bf91e56e56fd187caacebf627f0f838efbe0af24739389fe1988f44e7480698fad28a3f4c31396cb5cff9b27474bfbad8fbb090cd66349e1100fda561095bc217a79f8e0f79479b07ad3d83848a872fece3b3d46e7db4c2b77d3e1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285f794f860e29327ade4d046e2e86e4b87355dc82f424ce1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285f7946be9715ed3f7b01749f5a2cad60ddee6f5a84d61e1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285f7947c6865f9dbfbda8fe60c8695fbcb025073e83a7de1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285", + "signedLegacy": "0xf89982037c8354057985733167f07294211b8c009161bf91e56e56fd187caacebf627f0f838efbe0af24739389fe1988f44e7480698fad28a3f4c31396cb5cff9b27474bfbad8fbb090cd66349e1100fda561095bc217a791ca0a98d9b5585bdd36185813c3bc7993e62ee19f5e3402fb452bb1fd620b8ab436ca07907200c9ad11d211405e5b44904c5163ad667aca5ea7c5c1e2dd67276e034f0", + "signedEip155": "0xf89d82037c8354057985733167f07294211b8c009161bf91e56e56fd187caacebf627f0f838efbe0af24739389fe1988f44e7480698fad28a3f4c31396cb5cff9b27474bfbad8fbb090cd66349e1100fda561095bc217a7984ba4d62aca0f7fd80f4f644415d13351ae2f1526bd007c19051303b47d6745dd4dd8d3254fea06331bf6e2587261fa5eacbbe1191e4706f5ea5edc9a121ddaf425dccb1722e3c", + "signedBerlin": "0x01f90180845d26b14482037c8354057985733167f07294211b8c009161bf91e56e56fd187caacebf627f0f838efbe0af24739389fe1988f44e7480698fad28a3f4c31396cb5cff9b27474bfbad8fbb090cd66349e1100fda561095bc217a79f8e0f79479b07ad3d83848a872fece3b3d46e7db4c2b77d3e1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285f794f860e29327ade4d046e2e86e4b87355dc82f424ce1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285f7946be9715ed3f7b01749f5a2cad60ddee6f5a84d61e1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285f7947c6865f9dbfbda8fe60c8695fbcb025073e83a7de1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c028580a0107681f3fd5ec3d8411de85fc7ddde763b8975b4243670de60e8b70de10db1ada045a2c8ba218485e5d92b195a8e5e9d0a35d352df35ef6932f2e450ee1a48166a", + "signedLondon": "0x02f90188845d26b14482037c83a3a5d4870d6c8dfe0662c285733167f07294211b8c009161bf91e56e56fd187caacebf627f0f838efbe0af24739389fe1988f44e7480698fad28a3f4c31396cb5cff9b27474bfbad8fbb090cd66349e1100fda561095bc217a79f8e0f79479b07ad3d83848a872fece3b3d46e7db4c2b77d3e1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285f794f860e29327ade4d046e2e86e4b87355dc82f424ce1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285f7946be9715ed3f7b01749f5a2cad60ddee6f5a84d61e1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c0285f7947c6865f9dbfbda8fe60c8695fbcb025073e83a7de1a0838f6bd62528490e9f3541d2e204060d97e7b8712d44f94bfb3544d58d6c028580a0c153f7a10900b75f267fb32c770819b1bf461cdc9fe293590da53023b75a246da00770a94880bd5daa43f7a8c3ed710ee697345c33a4468dcc8368137d890b81e5", + "signatureLegacy": { + "r": "0xa98d9b5585bdd36185813c3bc7993e62ee19f5e3402fb452bb1fd620b8ab436c", + "s": "0x7907200c9ad11d211405e5b44904c5163ad667aca5ea7c5c1e2dd67276e034f0", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0xf7fd80f4f644415d13351ae2f1526bd007c19051303b47d6745dd4dd8d3254fe", + "s": "0x6331bf6e2587261fa5eacbbe1191e4706f5ea5edc9a121ddaf425dccb1722e3c", + "v": "0xba4d62ac" + }, + "signatureBerlin": { + "r": "0x107681f3fd5ec3d8411de85fc7ddde763b8975b4243670de60e8b70de10db1ad", + "s": "0x45a2c8ba218485e5d92b195a8e5e9d0a35d352df35ef6932f2e450ee1a48166a", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xc153f7a10900b75f267fb32c770819b1bf461cdc9fe293590da53023b75a246d", + "s": "0x0770a94880bd5daa43f7a8c3ed710ee697345c33a4468dcc8368137d890b81e5", + "v": "0x0" + } + }, + { + "name": "random-37", + "transaction": { + "to": "0x56f6318c36A9907b3F2d9f5f7f58B0c4ad07b037", + "nonce": 879, + "gasLimit": "0x40d29e1243", + "gasPrice": "0x2467", + "maxFeePerGas": "0xd1b6316897", + "maxPriorityFeePerGas": "0x3b", + "data": "0xd96ea6a31daf37145852d93a2adc141f60ca340910001858455d6f3f7f717ac8bfda2e95effc8540a8bccd204db19b2eadc451a46bfa81e83e9d3af36b511c8231947f43ab6093778483b11641e0d33fe6ad96220d8b68fe31d67e8a5fb55a63ab4f41e6066d039c9f220d23ee38944e0eb484332729276bac396e173179d213", + "value": "0x190691dc95", + "accessList": [], + "chainId": "0xa0b9" + }, + "privateKey": "0x6c42b4c60ac6c7f42ee6883129f9a32d659b97d714e749190d4e60c3da66ed41", + "unsignedLegacy": "0xf8a982036f8224678540d29e12439456f6318c36a9907b3f2d9f5f7f58b0c4ad07b03785190691dc95b880d96ea6a31daf37145852d93a2adc141f60ca340910001858455d6f3f7f717ac8bfda2e95effc8540a8bccd204db19b2eadc451a46bfa81e83e9d3af36b511c8231947f43ab6093778483b11641e0d33fe6ad96220d8b68fe31d67e8a5fb55a63ab4f41e6066d039c9f220d23ee38944e0eb484332729276bac396e173179d213", + "unsignedEip155": "0xf8ae82036f8224678540d29e12439456f6318c36a9907b3f2d9f5f7f58b0c4ad07b03785190691dc95b880d96ea6a31daf37145852d93a2adc141f60ca340910001858455d6f3f7f717ac8bfda2e95effc8540a8bccd204db19b2eadc451a46bfa81e83e9d3af36b511c8231947f43ab6093778483b11641e0d33fe6ad96220d8b68fe31d67e8a5fb55a63ab4f41e6066d039c9f220d23ee38944e0eb484332729276bac396e173179d21382a0b98080", + "unsignedBerlin": "0x01f8ad82a0b982036f8224678540d29e12439456f6318c36a9907b3f2d9f5f7f58b0c4ad07b03785190691dc95b880d96ea6a31daf37145852d93a2adc141f60ca340910001858455d6f3f7f717ac8bfda2e95effc8540a8bccd204db19b2eadc451a46bfa81e83e9d3af36b511c8231947f43ab6093778483b11641e0d33fe6ad96220d8b68fe31d67e8a5fb55a63ab4f41e6066d039c9f220d23ee38944e0eb484332729276bac396e173179d213c0", + "unsignedLondon": "0x02f8b182a0b982036f3b85d1b63168978540d29e12439456f6318c36a9907b3f2d9f5f7f58b0c4ad07b03785190691dc95b880d96ea6a31daf37145852d93a2adc141f60ca340910001858455d6f3f7f717ac8bfda2e95effc8540a8bccd204db19b2eadc451a46bfa81e83e9d3af36b511c8231947f43ab6093778483b11641e0d33fe6ad96220d8b68fe31d67e8a5fb55a63ab4f41e6066d039c9f220d23ee38944e0eb484332729276bac396e173179d213c0", + "signedLegacy": "0xf8ec82036f8224678540d29e12439456f6318c36a9907b3f2d9f5f7f58b0c4ad07b03785190691dc95b880d96ea6a31daf37145852d93a2adc141f60ca340910001858455d6f3f7f717ac8bfda2e95effc8540a8bccd204db19b2eadc451a46bfa81e83e9d3af36b511c8231947f43ab6093778483b11641e0d33fe6ad96220d8b68fe31d67e8a5fb55a63ab4f41e6066d039c9f220d23ee38944e0eb484332729276bac396e173179d2131ba0eb93ef10059e8e02f62d54114ed1040a763b63eff1f7f1a98e8223b742837b70a07f33041f80e6ecbc6ce3865261f87486a19dc0a108e74207361a38eeedceb4b1", + "signedEip155": "0xf8ef82036f8224678540d29e12439456f6318c36a9907b3f2d9f5f7f58b0c4ad07b03785190691dc95b880d96ea6a31daf37145852d93a2adc141f60ca340910001858455d6f3f7f717ac8bfda2e95effc8540a8bccd204db19b2eadc451a46bfa81e83e9d3af36b511c8231947f43ab6093778483b11641e0d33fe6ad96220d8b68fe31d67e8a5fb55a63ab4f41e6066d039c9f220d23ee38944e0eb484332729276bac396e173179d21383014196a02c61dda64f605b280e9970a02801bd20b657c42204a9fa9a4c38db1f3f8e7097a032d7e7052b4208f39f905ecc5cdc3aa6ff9001fe8d8d6d4592a29315e6549d75", + "signedBerlin": "0x01f8f082a0b982036f8224678540d29e12439456f6318c36a9907b3f2d9f5f7f58b0c4ad07b03785190691dc95b880d96ea6a31daf37145852d93a2adc141f60ca340910001858455d6f3f7f717ac8bfda2e95effc8540a8bccd204db19b2eadc451a46bfa81e83e9d3af36b511c8231947f43ab6093778483b11641e0d33fe6ad96220d8b68fe31d67e8a5fb55a63ab4f41e6066d039c9f220d23ee38944e0eb484332729276bac396e173179d213c080a0a97c9472add46edd21a58d728fa0fed91997b27bd6295c39800764e694e01d73a07ddbdd45971e4c4ada54767cf6aa447a4314713b99f702b18aadfc1e7f1c1bd8", + "signedLondon": "0x02f8f482a0b982036f3b85d1b63168978540d29e12439456f6318c36a9907b3f2d9f5f7f58b0c4ad07b03785190691dc95b880d96ea6a31daf37145852d93a2adc141f60ca340910001858455d6f3f7f717ac8bfda2e95effc8540a8bccd204db19b2eadc451a46bfa81e83e9d3af36b511c8231947f43ab6093778483b11641e0d33fe6ad96220d8b68fe31d67e8a5fb55a63ab4f41e6066d039c9f220d23ee38944e0eb484332729276bac396e173179d213c080a09580231c766858d281a8c56aecb14feac1fa5d6a3da53f8faad5797d7f1980eaa01fbeb3622d9c1e02777aea4ba33daa894c3e337990fff6460275645bd87a25cb", + "signatureLegacy": { + "r": "0xeb93ef10059e8e02f62d54114ed1040a763b63eff1f7f1a98e8223b742837b70", + "s": "0x7f33041f80e6ecbc6ce3865261f87486a19dc0a108e74207361a38eeedceb4b1", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x2c61dda64f605b280e9970a02801bd20b657c42204a9fa9a4c38db1f3f8e7097", + "s": "0x32d7e7052b4208f39f905ecc5cdc3aa6ff9001fe8d8d6d4592a29315e6549d75", + "v": "0x14196" + }, + "signatureBerlin": { + "r": "0xa97c9472add46edd21a58d728fa0fed91997b27bd6295c39800764e694e01d73", + "s": "0x7ddbdd45971e4c4ada54767cf6aa447a4314713b99f702b18aadfc1e7f1c1bd8", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x9580231c766858d281a8c56aecb14feac1fa5d6a3da53f8faad5797d7f1980ea", + "s": "0x1fbeb3622d9c1e02777aea4ba33daa894c3e337990fff6460275645bd87a25cb", + "v": "0x0" + } + }, + { + "name": "random-38", + "transaction": { + "to": "0x4BBA4f66b87A2529E70E52BcdD8b94A913E2767F", + "nonce": 192, + "gasLimit": "0xaccf9abbcc", + "gasPrice": "0xfc", + "maxFeePerGas": "0x91eb68de49c85c", + "maxPriorityFeePerGas": "0xb798", + "data": "0x1a17a68b3cdf76066b519ebe4019e03f256f8f0767fa615451229d5f7585008fcb2fa8ceafe114f260c6ce30f73bd1ab35be5d2f3ddb1e94fa9c60c9e89779b0c15ea36cdd83921631dc3cac418c8bba914c163d414e83c8598544c0dd6cddc6337f4d9ebc97", + "value": "0x837185bce5", + "accessList": [ + { + "address": "0x3A72660413E06d13511ead0eD048Bb7C536238f9", + "storageKeys": [ + "0x2b0ae05eea3e40b74365927909af95849ea0e6482d4979aa97b6de40184c5a96", + "0x4560e6afe698397a9a11b3a85c45a3f2a6929fa2120c0710256df5b8617b56ab", + "0x4e970ecb45687241b20ee7e62a70ad70e85bfa354d2d77584f01424ab20bf542", + "0x46cd73ab4de9cfb90f17050cb48fc7df57f1614be6482ecb497806c761f7b1c6" + ] + } + ], + "chainId": "0x93" + }, + "privateKey": "0xb109e30e6271d301aedc2d2eace8d5c39530cb69fa33c0874eee756a5c2cd1aa", + "unsignedLegacy": "0xf88d81c081fc85accf9abbcc944bba4f66b87a2529e70e52bcdd8b94a913e2767f85837185bce5b8661a17a68b3cdf76066b519ebe4019e03f256f8f0767fa615451229d5f7585008fcb2fa8ceafe114f260c6ce30f73bd1ab35be5d2f3ddb1e94fa9c60c9e89779b0c15ea36cdd83921631dc3cac418c8bba914c163d414e83c8598544c0dd6cddc6337f4d9ebc97", + "unsignedEip155": "0xf89181c081fc85accf9abbcc944bba4f66b87a2529e70e52bcdd8b94a913e2767f85837185bce5b8661a17a68b3cdf76066b519ebe4019e03f256f8f0767fa615451229d5f7585008fcb2fa8ceafe114f260c6ce30f73bd1ab35be5d2f3ddb1e94fa9c60c9e89779b0c15ea36cdd83921631dc3cac418c8bba914c163d414e83c8598544c0dd6cddc6337f4d9ebc9781938080", + "unsignedBerlin": "0x01f9012e819381c081fc85accf9abbcc944bba4f66b87a2529e70e52bcdd8b94a913e2767f85837185bce5b8661a17a68b3cdf76066b519ebe4019e03f256f8f0767fa615451229d5f7585008fcb2fa8ceafe114f260c6ce30f73bd1ab35be5d2f3ddb1e94fa9c60c9e89779b0c15ea36cdd83921631dc3cac418c8bba914c163d414e83c8598544c0dd6cddc6337f4d9ebc97f89df89b943a72660413e06d13511ead0ed048bb7c536238f9f884a02b0ae05eea3e40b74365927909af95849ea0e6482d4979aa97b6de40184c5a96a04560e6afe698397a9a11b3a85c45a3f2a6929fa2120c0710256df5b8617b56aba04e970ecb45687241b20ee7e62a70ad70e85bfa354d2d77584f01424ab20bf542a046cd73ab4de9cfb90f17050cb48fc7df57f1614be6482ecb497806c761f7b1c6", + "unsignedLondon": "0x02f90137819381c082b7988791eb68de49c85c85accf9abbcc944bba4f66b87a2529e70e52bcdd8b94a913e2767f85837185bce5b8661a17a68b3cdf76066b519ebe4019e03f256f8f0767fa615451229d5f7585008fcb2fa8ceafe114f260c6ce30f73bd1ab35be5d2f3ddb1e94fa9c60c9e89779b0c15ea36cdd83921631dc3cac418c8bba914c163d414e83c8598544c0dd6cddc6337f4d9ebc97f89df89b943a72660413e06d13511ead0ed048bb7c536238f9f884a02b0ae05eea3e40b74365927909af95849ea0e6482d4979aa97b6de40184c5a96a04560e6afe698397a9a11b3a85c45a3f2a6929fa2120c0710256df5b8617b56aba04e970ecb45687241b20ee7e62a70ad70e85bfa354d2d77584f01424ab20bf542a046cd73ab4de9cfb90f17050cb48fc7df57f1614be6482ecb497806c761f7b1c6", + "signedLegacy": "0xf8d081c081fc85accf9abbcc944bba4f66b87a2529e70e52bcdd8b94a913e2767f85837185bce5b8661a17a68b3cdf76066b519ebe4019e03f256f8f0767fa615451229d5f7585008fcb2fa8ceafe114f260c6ce30f73bd1ab35be5d2f3ddb1e94fa9c60c9e89779b0c15ea36cdd83921631dc3cac418c8bba914c163d414e83c8598544c0dd6cddc6337f4d9ebc971ba02062b236675901492e76b6ad262005163e30b988e6428096d2ed0433a642a0dba0661ff701f6c1a9069cd018e6c206442a2ab1a51544c7bd11c428d59f5e0861a9", + "signedEip155": "0xf8d281c081fc85accf9abbcc944bba4f66b87a2529e70e52bcdd8b94a913e2767f85837185bce5b8661a17a68b3cdf76066b519ebe4019e03f256f8f0767fa615451229d5f7585008fcb2fa8ceafe114f260c6ce30f73bd1ab35be5d2f3ddb1e94fa9c60c9e89779b0c15ea36cdd83921631dc3cac418c8bba914c163d414e83c8598544c0dd6cddc6337f4d9ebc97820149a0134cdeef7235c96708b182bf62e0f593cebb51a8f87f8d7ce9ed071f3ca3d1b2a00b57fdf1ef1d3ff41e5d9f4e3ccb760e56a3951a9447d65e81081adf8ced2693", + "signedBerlin": "0x01f90171819381c081fc85accf9abbcc944bba4f66b87a2529e70e52bcdd8b94a913e2767f85837185bce5b8661a17a68b3cdf76066b519ebe4019e03f256f8f0767fa615451229d5f7585008fcb2fa8ceafe114f260c6ce30f73bd1ab35be5d2f3ddb1e94fa9c60c9e89779b0c15ea36cdd83921631dc3cac418c8bba914c163d414e83c8598544c0dd6cddc6337f4d9ebc97f89df89b943a72660413e06d13511ead0ed048bb7c536238f9f884a02b0ae05eea3e40b74365927909af95849ea0e6482d4979aa97b6de40184c5a96a04560e6afe698397a9a11b3a85c45a3f2a6929fa2120c0710256df5b8617b56aba04e970ecb45687241b20ee7e62a70ad70e85bfa354d2d77584f01424ab20bf542a046cd73ab4de9cfb90f17050cb48fc7df57f1614be6482ecb497806c761f7b1c680a050b7645600735307a5e5a1965488ec360e403d84d50c181126f06562a5408383a07feb5f51431ea451885bea667b219f838b2c3688e2e42cfbeadcc49ddd333edd", + "signedLondon": "0x02f9017a819381c082b7988791eb68de49c85c85accf9abbcc944bba4f66b87a2529e70e52bcdd8b94a913e2767f85837185bce5b8661a17a68b3cdf76066b519ebe4019e03f256f8f0767fa615451229d5f7585008fcb2fa8ceafe114f260c6ce30f73bd1ab35be5d2f3ddb1e94fa9c60c9e89779b0c15ea36cdd83921631dc3cac418c8bba914c163d414e83c8598544c0dd6cddc6337f4d9ebc97f89df89b943a72660413e06d13511ead0ed048bb7c536238f9f884a02b0ae05eea3e40b74365927909af95849ea0e6482d4979aa97b6de40184c5a96a04560e6afe698397a9a11b3a85c45a3f2a6929fa2120c0710256df5b8617b56aba04e970ecb45687241b20ee7e62a70ad70e85bfa354d2d77584f01424ab20bf542a046cd73ab4de9cfb90f17050cb48fc7df57f1614be6482ecb497806c761f7b1c601a0ba6627db62ad6ca800912c9b036e4169dd6ed97ed6f9f095f36e51fb9056bf7fa0517d26dc80e34a462429f3e2973ced95555b54247d8489bd838b51e5e16a836f", + "signatureLegacy": { + "r": "0x2062b236675901492e76b6ad262005163e30b988e6428096d2ed0433a642a0db", + "s": "0x661ff701f6c1a9069cd018e6c206442a2ab1a51544c7bd11c428d59f5e0861a9", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x134cdeef7235c96708b182bf62e0f593cebb51a8f87f8d7ce9ed071f3ca3d1b2", + "s": "0x0b57fdf1ef1d3ff41e5d9f4e3ccb760e56a3951a9447d65e81081adf8ced2693", + "v": "0x149" + }, + "signatureBerlin": { + "r": "0x50b7645600735307a5e5a1965488ec360e403d84d50c181126f06562a5408383", + "s": "0x7feb5f51431ea451885bea667b219f838b2c3688e2e42cfbeadcc49ddd333edd", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xba6627db62ad6ca800912c9b036e4169dd6ed97ed6f9f095f36e51fb9056bf7f", + "s": "0x517d26dc80e34a462429f3e2973ced95555b54247d8489bd838b51e5e16a836f", + "v": "0x1" + } + }, + { + "name": "random-39", + "transaction": { + "to": "0x275E9AC566C97647fD5216b229ce2Cb8128bF948", + "nonce": 139, + "gasLimit": "0xabdb21e8", + "gasPrice": "0x17", + "maxFeePerGas": "0x497e4daed53d", + "maxPriorityFeePerGas": "0x4118", + "data": "0x9433426361d2e570b6e96780b7c9c6f3fd68517b2e28fffad2568551757910abbe4e7333e691dfd4b7de22da7ce269d623c2fe26cdb730da20dc78ee5c5ef0044320", + "value": "0xda320b2a", + "accessList": [ + { + "address": "0x366AF0fb6B459916877728cb9a5c87A7d6535aa7", + "storageKeys": [ + "0x10f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0a", + "0xa250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbf", + "0x207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357", + "0x08684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a9" + ] + }, + { + "address": "0xD9D3ab2DC5218e176Ae93Ce71C9adA512c042668", + "storageKeys": [ + "0x10f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0a", + "0xa250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbf", + "0x207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357", + "0x08684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a9" + ] + }, + { + "address": "0x6a5f00E589a5F8c57e42987F7b143d35522d72eC", + "storageKeys": [ + "0x10f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0a", + "0xa250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbf", + "0x207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357", + "0x08684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a9" + ] + } + ], + "chainId": "0x60" + }, + "privateKey": "0x80ca6dce69fdf87fd598f412f6cc1bbfcf7a728db8d83d87ae6f884edc90368a", + "unsignedLegacy": "0xf866818b1784abdb21e894275e9ac566c97647fd5216b229ce2cb8128bf94884da320b2ab8429433426361d2e570b6e96780b7c9c6f3fd68517b2e28fffad2568551757910abbe4e7333e691dfd4b7de22da7ce269d623c2fe26cdb730da20dc78ee5c5ef0044320", + "unsignedEip155": "0xf869818b1784abdb21e894275e9ac566c97647fd5216b229ce2cb8128bf94884da320b2ab8429433426361d2e570b6e96780b7c9c6f3fd68517b2e28fffad2568551757910abbe4e7333e691dfd4b7de22da7ce269d623c2fe26cdb730da20dc78ee5c5ef0044320608080", + "unsignedBerlin": "0x01f9024160818b1784abdb21e894275e9ac566c97647fd5216b229ce2cb8128bf94884da320b2ab8429433426361d2e570b6e96780b7c9c6f3fd68517b2e28fffad2568551757910abbe4e7333e691dfd4b7de22da7ce269d623c2fe26cdb730da20dc78ee5c5ef0044320f901d7f89b94366af0fb6b459916877728cb9a5c87a7d6535aa7f884a010f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0aa0a250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbfa0207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357a008684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a9f89b94d9d3ab2dc5218e176ae93ce71c9ada512c042668f884a010f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0aa0a250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbfa0207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357a008684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a9f89b946a5f00e589a5f8c57e42987f7b143d35522d72ecf884a010f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0aa0a250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbfa0207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357a008684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a9", + "unsignedLondon": "0x02f9024a60818b82411886497e4daed53d84abdb21e894275e9ac566c97647fd5216b229ce2cb8128bf94884da320b2ab8429433426361d2e570b6e96780b7c9c6f3fd68517b2e28fffad2568551757910abbe4e7333e691dfd4b7de22da7ce269d623c2fe26cdb730da20dc78ee5c5ef0044320f901d7f89b94366af0fb6b459916877728cb9a5c87a7d6535aa7f884a010f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0aa0a250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbfa0207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357a008684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a9f89b94d9d3ab2dc5218e176ae93ce71c9ada512c042668f884a010f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0aa0a250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbfa0207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357a008684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a9f89b946a5f00e589a5f8c57e42987f7b143d35522d72ecf884a010f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0aa0a250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbfa0207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357a008684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a9", + "signedLegacy": "0xf8a9818b1784abdb21e894275e9ac566c97647fd5216b229ce2cb8128bf94884da320b2ab8429433426361d2e570b6e96780b7c9c6f3fd68517b2e28fffad2568551757910abbe4e7333e691dfd4b7de22da7ce269d623c2fe26cdb730da20dc78ee5c5ef00443201ba041a6af4ceab25851b3769ffaa4a5699589faa1a17def6e0820790bc0e5b5b3a4a0378eb4b39701dd4c665e08f6038d2a48a23716827e787542237a5c1d904950c1", + "signedEip155": "0xf8aa818b1784abdb21e894275e9ac566c97647fd5216b229ce2cb8128bf94884da320b2ab8429433426361d2e570b6e96780b7c9c6f3fd68517b2e28fffad2568551757910abbe4e7333e691dfd4b7de22da7ce269d623c2fe26cdb730da20dc78ee5c5ef004432081e4a0d243d6d8dc2660874c03057ecbff435a54520a23bb823b6c73495edb3e1dc16ba0706cf3c866fe84328a4c78e85787bbd5acbbd3fce17fb9e5bba149c75e5c4de5", + "signedBerlin": "0x01f9028460818b1784abdb21e894275e9ac566c97647fd5216b229ce2cb8128bf94884da320b2ab8429433426361d2e570b6e96780b7c9c6f3fd68517b2e28fffad2568551757910abbe4e7333e691dfd4b7de22da7ce269d623c2fe26cdb730da20dc78ee5c5ef0044320f901d7f89b94366af0fb6b459916877728cb9a5c87a7d6535aa7f884a010f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0aa0a250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbfa0207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357a008684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a9f89b94d9d3ab2dc5218e176ae93ce71c9ada512c042668f884a010f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0aa0a250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbfa0207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357a008684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a9f89b946a5f00e589a5f8c57e42987f7b143d35522d72ecf884a010f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0aa0a250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbfa0207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357a008684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a901a0031d8ffad6caca8069c73ac4c64707137f1e935ed64e9fd476ce0161434277a6a05b75a90fedac9c839598c384ae54f85ab777a02bbc09721e48dfd5c92301aba4", + "signedLondon": "0x02f9028d60818b82411886497e4daed53d84abdb21e894275e9ac566c97647fd5216b229ce2cb8128bf94884da320b2ab8429433426361d2e570b6e96780b7c9c6f3fd68517b2e28fffad2568551757910abbe4e7333e691dfd4b7de22da7ce269d623c2fe26cdb730da20dc78ee5c5ef0044320f901d7f89b94366af0fb6b459916877728cb9a5c87a7d6535aa7f884a010f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0aa0a250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbfa0207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357a008684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a9f89b94d9d3ab2dc5218e176ae93ce71c9ada512c042668f884a010f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0aa0a250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbfa0207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357a008684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a9f89b946a5f00e589a5f8c57e42987f7b143d35522d72ecf884a010f4aad66f745c48095fb1992a3c978cac33fbf371667044df4188f43d12dc0aa0a250b183fce60762c98a54246dd7b9bb956bd6341da3e3b8b72dc336b24a1bbfa0207488efe80ffcb2fcac731fd7663809b3d2fc49ba7dfc4156252fa0e3ac4357a008684db0ae31e22bbefb1e44317338c4d4e26aafa719c7da18b0ded1aa1520a980a0f6aadb5b3874832195d613075b3094e9bdfa60a398c47395cb27da9bd625fbffa03def31f8037aa2e288a469ba5423b12b9cb3ba5190582bab1cbacdc63db6488c", + "signatureLegacy": { + "r": "0x41a6af4ceab25851b3769ffaa4a5699589faa1a17def6e0820790bc0e5b5b3a4", + "s": "0x378eb4b39701dd4c665e08f6038d2a48a23716827e787542237a5c1d904950c1", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xd243d6d8dc2660874c03057ecbff435a54520a23bb823b6c73495edb3e1dc16b", + "s": "0x706cf3c866fe84328a4c78e85787bbd5acbbd3fce17fb9e5bba149c75e5c4de5", + "v": "0xe4" + }, + "signatureBerlin": { + "r": "0x031d8ffad6caca8069c73ac4c64707137f1e935ed64e9fd476ce0161434277a6", + "s": "0x5b75a90fedac9c839598c384ae54f85ab777a02bbc09721e48dfd5c92301aba4", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xf6aadb5b3874832195d613075b3094e9bdfa60a398c47395cb27da9bd625fbff", + "s": "0x3def31f8037aa2e288a469ba5423b12b9cb3ba5190582bab1cbacdc63db6488c", + "v": "0x0" + } + }, + { + "name": "random-40", + "transaction": { + "to": "0x4cfC498D0352AfF969b9961A3E595cf1e5c06d40", + "nonce": 943, + "gasLimit": "0x17b0021c20", + "gasPrice": "0x35", + "maxFeePerGas": "0x1295d39b889d", + "maxPriorityFeePerGas": "0x1585", + "data": "0x1caf66c287", + "value": "0x95bc", + "accessList": [ + { + "address": "0xee94f0bFfE39C63B53c94d0a9fCBc1384C7de72D", + "storageKeys": [] + }, + { + "address": "0x69EDF19eed3FEFf59D5Ff3D202299B0a2f7Cfd47", + "storageKeys": [] + }, + { + "address": "0x1953C708C84Ff2c8eF15e3Bd7838F8537eeB5592", + "storageKeys": [] + } + ], + "chainId": "0xf9" + }, + "privateKey": "0x7724f2244faf4961b17878b5ba9013de1d9fd0f3642f1e729441828af7cf2aa9", + "unsignedLegacy": "0xe88203af358517b0021c20944cfc498d0352aff969b9961a3e595cf1e5c06d408295bc851caf66c287", + "unsignedEip155": "0xec8203af358517b0021c20944cfc498d0352aff969b9961a3e595cf1e5c06d408295bc851caf66c28781f98080", + "unsignedBerlin": "0x01f87181f98203af358517b0021c20944cfc498d0352aff969b9961a3e595cf1e5c06d408295bc851caf66c287f845d694ee94f0bffe39c63b53c94d0a9fcbc1384c7de72dc0d69469edf19eed3feff59d5ff3d202299b0a2f7cfd47c0d6941953c708c84ff2c8ef15e3bd7838f8537eeb5592c0", + "unsignedLondon": "0x02f87a81f98203af821585861295d39b889d8517b0021c20944cfc498d0352aff969b9961a3e595cf1e5c06d408295bc851caf66c287f845d694ee94f0bffe39c63b53c94d0a9fcbc1384c7de72dc0d69469edf19eed3feff59d5ff3d202299b0a2f7cfd47c0d6941953c708c84ff2c8ef15e3bd7838f8537eeb5592c0", + "signedLegacy": "0xf86b8203af358517b0021c20944cfc498d0352aff969b9961a3e595cf1e5c06d408295bc851caf66c2871ba09a27d6fff0a32facfe782a6f313da13410105af5aa8dc58de9c11db395d69b92a00ece93db036abb6a3ebba3228cbc075b3758440cab06f4fd93e490961645e5a9", + "signedEip155": "0xf86d8203af358517b0021c20944cfc498d0352aff969b9961a3e595cf1e5c06d408295bc851caf66c287820216a02f6c89405c28fe39a6e855f086ae307bed12c63ba96ac7c02fb33ccd157c394fa03dd3a80920a7a432aac71721435149392e4a107ff0eec216f2f7633871480a3d", + "signedBerlin": "0x01f8b481f98203af358517b0021c20944cfc498d0352aff969b9961a3e595cf1e5c06d408295bc851caf66c287f845d694ee94f0bffe39c63b53c94d0a9fcbc1384c7de72dc0d69469edf19eed3feff59d5ff3d202299b0a2f7cfd47c0d6941953c708c84ff2c8ef15e3bd7838f8537eeb5592c001a08538332ef13e023d44f02cc46a9963aa8627cbff51698e3e0f4ecdd7f613c845a073f4083a079d8a9274da07599f3d42642f766e3641def42e3f3e862d9c15fc35", + "signedLondon": "0x02f8bd81f98203af821585861295d39b889d8517b0021c20944cfc498d0352aff969b9961a3e595cf1e5c06d408295bc851caf66c287f845d694ee94f0bffe39c63b53c94d0a9fcbc1384c7de72dc0d69469edf19eed3feff59d5ff3d202299b0a2f7cfd47c0d6941953c708c84ff2c8ef15e3bd7838f8537eeb5592c080a0f8f8a37429e776dd5367d21ae0a0d5cd452e73eebefbc08298adf3c295ae5425a00a83b72e5047ec663d6b9bf89e222a927788f50197e61e01192e840518008b33", + "signatureLegacy": { + "r": "0x9a27d6fff0a32facfe782a6f313da13410105af5aa8dc58de9c11db395d69b92", + "s": "0x0ece93db036abb6a3ebba3228cbc075b3758440cab06f4fd93e490961645e5a9", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x2f6c89405c28fe39a6e855f086ae307bed12c63ba96ac7c02fb33ccd157c394f", + "s": "0x3dd3a80920a7a432aac71721435149392e4a107ff0eec216f2f7633871480a3d", + "v": "0x216" + }, + "signatureBerlin": { + "r": "0x8538332ef13e023d44f02cc46a9963aa8627cbff51698e3e0f4ecdd7f613c845", + "s": "0x73f4083a079d8a9274da07599f3d42642f766e3641def42e3f3e862d9c15fc35", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xf8f8a37429e776dd5367d21ae0a0d5cd452e73eebefbc08298adf3c295ae5425", + "s": "0x0a83b72e5047ec663d6b9bf89e222a927788f50197e61e01192e840518008b33", + "v": "0x0" + } + }, + { + "name": "random-41", + "transaction": { + "to": "0xbEEb2C2d9c5Fd84B19Dc8406f3e7cB3b383d98a4", + "nonce": 555, + "gasLimit": "0x6cfaad", + "gasPrice": "0x4e0ecb", + "maxFeePerGas": "0x3c7d01215a", + "maxPriorityFeePerGas": "0xe7", + "data": "0x615d6f2cb0cca6f85cb5478633d0f0887e23e007405f03a4e1b9994b3e3e9dabee20754ea877032eacffca736cc3547210d81d06f02e1da8c2496faa7634fb602c2b61ae080c287ae87483b89b6545fec8267d66b7806488bbb136ccfd2e387a60c5ab20", + "value": "0xdc6f8f5d", + "accessList": [ + { + "address": "0xC454EEb7ee4BdFdCE3BFf554800152182EF7C097", + "storageKeys": [ + "0x4b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e67" + ] + }, + { + "address": "0xe155ba1797cc067cF6cdD6e5018cd62ebE9977F3", + "storageKeys": [ + "0x4b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e67" + ] + }, + { + "address": "0xA8C0F3ac9f2e3C11e6E8765E94306c3a97104Fb2", + "storageKeys": [ + "0x4b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e67" + ] + } + ], + "chainId": "0x2879e0" + }, + "privateKey": "0xf82f55a04b8e30377e18f40628703dd9fee4a7a6caaa8d2f5aedc9f93123eec8", + "unsignedLegacy": "0xf88b82022b834e0ecb836cfaad94beeb2c2d9c5fd84b19dc8406f3e7cb3b383d98a484dc6f8f5db864615d6f2cb0cca6f85cb5478633d0f0887e23e007405f03a4e1b9994b3e3e9dabee20754ea877032eacffca736cc3547210d81d06f02e1da8c2496faa7634fb602c2b61ae080c287ae87483b89b6545fec8267d66b7806488bbb136ccfd2e387a60c5ab20", + "unsignedEip155": "0xf89182022b834e0ecb836cfaad94beeb2c2d9c5fd84b19dc8406f3e7cb3b383d98a484dc6f8f5db864615d6f2cb0cca6f85cb5478633d0f0887e23e007405f03a4e1b9994b3e3e9dabee20754ea877032eacffca736cc3547210d81d06f02e1da8c2496faa7634fb602c2b61ae080c287ae87483b89b6545fec8267d66b7806488bbb136ccfd2e387a60c5ab20832879e08080", + "unsignedBerlin": "0x01f90139832879e082022b834e0ecb836cfaad94beeb2c2d9c5fd84b19dc8406f3e7cb3b383d98a484dc6f8f5db864615d6f2cb0cca6f85cb5478633d0f0887e23e007405f03a4e1b9994b3e3e9dabee20754ea877032eacffca736cc3547210d81d06f02e1da8c2496faa7634fb602c2b61ae080c287ae87483b89b6545fec8267d66b7806488bbb136ccfd2e387a60c5ab20f8a8f794c454eeb7ee4bdfdce3bff554800152182ef7c097e1a04b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e67f794e155ba1797cc067cf6cdd6e5018cd62ebe9977f3e1a04b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e67f794a8c0f3ac9f2e3c11e6e8765e94306c3a97104fb2e1a04b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e67", + "unsignedLondon": "0x02f9013d832879e082022b81e7853c7d01215a836cfaad94beeb2c2d9c5fd84b19dc8406f3e7cb3b383d98a484dc6f8f5db864615d6f2cb0cca6f85cb5478633d0f0887e23e007405f03a4e1b9994b3e3e9dabee20754ea877032eacffca736cc3547210d81d06f02e1da8c2496faa7634fb602c2b61ae080c287ae87483b89b6545fec8267d66b7806488bbb136ccfd2e387a60c5ab20f8a8f794c454eeb7ee4bdfdce3bff554800152182ef7c097e1a04b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e67f794e155ba1797cc067cf6cdd6e5018cd62ebe9977f3e1a04b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e67f794a8c0f3ac9f2e3c11e6e8765e94306c3a97104fb2e1a04b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e67", + "signedLegacy": "0xf8ce82022b834e0ecb836cfaad94beeb2c2d9c5fd84b19dc8406f3e7cb3b383d98a484dc6f8f5db864615d6f2cb0cca6f85cb5478633d0f0887e23e007405f03a4e1b9994b3e3e9dabee20754ea877032eacffca736cc3547210d81d06f02e1da8c2496faa7634fb602c2b61ae080c287ae87483b89b6545fec8267d66b7806488bbb136ccfd2e387a60c5ab201ca08e6ce5e63cace5a18354d28ca6477ad74e02cbdb91057fbb8420c3721ae1b32aa046b3fa23841abde8f5d742370b7b13b3b674b0238a22fadaff8aefa81bba0d93", + "signedEip155": "0xf8d182022b834e0ecb836cfaad94beeb2c2d9c5fd84b19dc8406f3e7cb3b383d98a484dc6f8f5db864615d6f2cb0cca6f85cb5478633d0f0887e23e007405f03a4e1b9994b3e3e9dabee20754ea877032eacffca736cc3547210d81d06f02e1da8c2496faa7634fb602c2b61ae080c287ae87483b89b6545fec8267d66b7806488bbb136ccfd2e387a60c5ab208350f3e4a056ea51270defc34b40baeab26e74af9143cc704281610039865ab7370af8ba83a07bb038ec920ce66e0b8f83ae8fd81a6dc556cba6dcb0c61b744e38b62709b478", + "signedBerlin": "0x01f9017c832879e082022b834e0ecb836cfaad94beeb2c2d9c5fd84b19dc8406f3e7cb3b383d98a484dc6f8f5db864615d6f2cb0cca6f85cb5478633d0f0887e23e007405f03a4e1b9994b3e3e9dabee20754ea877032eacffca736cc3547210d81d06f02e1da8c2496faa7634fb602c2b61ae080c287ae87483b89b6545fec8267d66b7806488bbb136ccfd2e387a60c5ab20f8a8f794c454eeb7ee4bdfdce3bff554800152182ef7c097e1a04b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e67f794e155ba1797cc067cf6cdd6e5018cd62ebe9977f3e1a04b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e67f794a8c0f3ac9f2e3c11e6e8765e94306c3a97104fb2e1a04b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e6780a0f2aeb12cbd6168c7bf151d8376bd002ce41700df4c3dd9d1ab3dba4078d9c3daa03aa99c5c5f5cb34bc95c39c529b7e7d606c881f89e90e0f4732b96dd76e99fca", + "signedLondon": "0x02f90180832879e082022b81e7853c7d01215a836cfaad94beeb2c2d9c5fd84b19dc8406f3e7cb3b383d98a484dc6f8f5db864615d6f2cb0cca6f85cb5478633d0f0887e23e007405f03a4e1b9994b3e3e9dabee20754ea877032eacffca736cc3547210d81d06f02e1da8c2496faa7634fb602c2b61ae080c287ae87483b89b6545fec8267d66b7806488bbb136ccfd2e387a60c5ab20f8a8f794c454eeb7ee4bdfdce3bff554800152182ef7c097e1a04b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e67f794e155ba1797cc067cf6cdd6e5018cd62ebe9977f3e1a04b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e67f794a8c0f3ac9f2e3c11e6e8765e94306c3a97104fb2e1a04b2b8301b1edbcc86612a691376d7ac3ced7229835b3516e1c75b47e8c6c9e6780a0582e1e9fde9a213765b7f609a3dde291c574f70332ec22c1790e149d84c23edaa0156dde50e29d5688883f442b8b8eef163829f9fe71f05f3d50876bc8a03a9475", + "signatureLegacy": { + "r": "0x8e6ce5e63cace5a18354d28ca6477ad74e02cbdb91057fbb8420c3721ae1b32a", + "s": "0x46b3fa23841abde8f5d742370b7b13b3b674b0238a22fadaff8aefa81bba0d93", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x56ea51270defc34b40baeab26e74af9143cc704281610039865ab7370af8ba83", + "s": "0x7bb038ec920ce66e0b8f83ae8fd81a6dc556cba6dcb0c61b744e38b62709b478", + "v": "0x50f3e4" + }, + "signatureBerlin": { + "r": "0xf2aeb12cbd6168c7bf151d8376bd002ce41700df4c3dd9d1ab3dba4078d9c3da", + "s": "0x3aa99c5c5f5cb34bc95c39c529b7e7d606c881f89e90e0f4732b96dd76e99fca", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x582e1e9fde9a213765b7f609a3dde291c574f70332ec22c1790e149d84c23eda", + "s": "0x156dde50e29d5688883f442b8b8eef163829f9fe71f05f3d50876bc8a03a9475", + "v": "0x0" + } + }, + { + "name": "random-42", + "transaction": { + "to": "0x99D259fA0C36DeA65ec8fDE1D3C7081BeA430DF1", + "nonce": 677, + "gasLimit": "0xeb0b358297", + "gasPrice": "0x621ef8", + "maxFeePerGas": "0xf32df1dc4b", + "maxPriorityFeePerGas": "0x0c53", + "data": "0x94d441390bd900c56843909a0799e8f3908c6702c89c67a3ea68dbf5fd6b3eb68a640bf3a2b9933414a30c6c9b7ff0900f7a8c959947d863edb9ee876d4516f786eb86176ec2d2437517ae2e29b9854ffa1cd1c50c3ac51a8c6f4b0c27b6169bd39d7c2ec400", + "value": "0xf5fe", + "accessList": [ + { + "address": "0x3d8F00870C1739B6E5f72d0109F2064fB32e6C22", + "storageKeys": [ + "0xee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a70" + ] + }, + { + "address": "0x911aC905fB319EF0CeE5A43a0CA1FB3d6077a402", + "storageKeys": [ + "0xee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a70" + ] + }, + { + "address": "0x783877cEFF53159419b8DB718d43b33fe40f8418", + "storageKeys": [ + "0xee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a70" + ] + } + ], + "chainId": "0x59b77c1375" + }, + "privateKey": "0xd7e8821b3701fdbe3b9ca4b5f6b5e21e938265fa8c67e1caf4aab1f01b17be03", + "unsignedLegacy": "0xf88d8202a583621ef885eb0b3582979499d259fa0c36dea65ec8fde1d3c7081bea430df182f5feb86694d441390bd900c56843909a0799e8f3908c6702c89c67a3ea68dbf5fd6b3eb68a640bf3a2b9933414a30c6c9b7ff0900f7a8c959947d863edb9ee876d4516f786eb86176ec2d2437517ae2e29b9854ffa1cd1c50c3ac51a8c6f4b0c27b6169bd39d7c2ec400", + "unsignedEip155": "0xf8958202a583621ef885eb0b3582979499d259fa0c36dea65ec8fde1d3c7081bea430df182f5feb86694d441390bd900c56843909a0799e8f3908c6702c89c67a3ea68dbf5fd6b3eb68a640bf3a2b9933414a30c6c9b7ff0900f7a8c959947d863edb9ee876d4516f786eb86176ec2d2437517ae2e29b9854ffa1cd1c50c3ac51a8c6f4b0c27b6169bd39d7c2ec4008559b77c13758080", + "unsignedBerlin": "0x01f9013d8559b77c13758202a583621ef885eb0b3582979499d259fa0c36dea65ec8fde1d3c7081bea430df182f5feb86694d441390bd900c56843909a0799e8f3908c6702c89c67a3ea68dbf5fd6b3eb68a640bf3a2b9933414a30c6c9b7ff0900f7a8c959947d863edb9ee876d4516f786eb86176ec2d2437517ae2e29b9854ffa1cd1c50c3ac51a8c6f4b0c27b6169bd39d7c2ec400f8a8f7943d8f00870c1739b6e5f72d0109f2064fb32e6c22e1a0ee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a70f794911ac905fb319ef0cee5a43a0ca1fb3d6077a402e1a0ee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a70f794783877ceff53159419b8db718d43b33fe40f8418e1a0ee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a70", + "unsignedLondon": "0x02f901428559b77c13758202a5820c5385f32df1dc4b85eb0b3582979499d259fa0c36dea65ec8fde1d3c7081bea430df182f5feb86694d441390bd900c56843909a0799e8f3908c6702c89c67a3ea68dbf5fd6b3eb68a640bf3a2b9933414a30c6c9b7ff0900f7a8c959947d863edb9ee876d4516f786eb86176ec2d2437517ae2e29b9854ffa1cd1c50c3ac51a8c6f4b0c27b6169bd39d7c2ec400f8a8f7943d8f00870c1739b6e5f72d0109f2064fb32e6c22e1a0ee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a70f794911ac905fb319ef0cee5a43a0ca1fb3d6077a402e1a0ee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a70f794783877ceff53159419b8db718d43b33fe40f8418e1a0ee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a70", + "signedLegacy": "0xf8d08202a583621ef885eb0b3582979499d259fa0c36dea65ec8fde1d3c7081bea430df182f5feb86694d441390bd900c56843909a0799e8f3908c6702c89c67a3ea68dbf5fd6b3eb68a640bf3a2b9933414a30c6c9b7ff0900f7a8c959947d863edb9ee876d4516f786eb86176ec2d2437517ae2e29b9854ffa1cd1c50c3ac51a8c6f4b0c27b6169bd39d7c2ec4001ba0cbf3e146abb5f274935468ada3c659168a90199d16336acf804ef29c73363f1ca03e589c3ab80c41cff21c887588e60e0f7e7816d587320641801369c3ce4b3c10", + "signedEip155": "0xf8d58202a583621ef885eb0b3582979499d259fa0c36dea65ec8fde1d3c7081bea430df182f5feb86694d441390bd900c56843909a0799e8f3908c6702c89c67a3ea68dbf5fd6b3eb68a640bf3a2b9933414a30c6c9b7ff0900f7a8c959947d863edb9ee876d4516f786eb86176ec2d2437517ae2e29b9854ffa1cd1c50c3ac51a8c6f4b0c27b6169bd39d7c2ec40085b36ef8270ea08a4651cc8cabd30cee1761af175cf4419ee3a17dd2ab0e5361408796a2da1ce3a0702a09546977e6519bf3eeb219b3220a038487252bbb52f55317aafb0e8151e7", + "signedBerlin": "0x01f901808559b77c13758202a583621ef885eb0b3582979499d259fa0c36dea65ec8fde1d3c7081bea430df182f5feb86694d441390bd900c56843909a0799e8f3908c6702c89c67a3ea68dbf5fd6b3eb68a640bf3a2b9933414a30c6c9b7ff0900f7a8c959947d863edb9ee876d4516f786eb86176ec2d2437517ae2e29b9854ffa1cd1c50c3ac51a8c6f4b0c27b6169bd39d7c2ec400f8a8f7943d8f00870c1739b6e5f72d0109f2064fb32e6c22e1a0ee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a70f794911ac905fb319ef0cee5a43a0ca1fb3d6077a402e1a0ee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a70f794783877ceff53159419b8db718d43b33fe40f8418e1a0ee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a7001a0999316db33ec39370e4c70219dc3cff231b8e8a56dd965b7a35209326e44fb36a021686604de607fa16f6e73f9a34aafbe1308636d40d9668ab0817ed7feb383be", + "signedLondon": "0x02f901858559b77c13758202a5820c5385f32df1dc4b85eb0b3582979499d259fa0c36dea65ec8fde1d3c7081bea430df182f5feb86694d441390bd900c56843909a0799e8f3908c6702c89c67a3ea68dbf5fd6b3eb68a640bf3a2b9933414a30c6c9b7ff0900f7a8c959947d863edb9ee876d4516f786eb86176ec2d2437517ae2e29b9854ffa1cd1c50c3ac51a8c6f4b0c27b6169bd39d7c2ec400f8a8f7943d8f00870c1739b6e5f72d0109f2064fb32e6c22e1a0ee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a70f794911ac905fb319ef0cee5a43a0ca1fb3d6077a402e1a0ee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a70f794783877ceff53159419b8db718d43b33fe40f8418e1a0ee2d6635a495847dedc266f2a7c2e5567b52e52be5d343699d241b2b53540a7001a0ce27650e0a7c6ae4a99ce7587181e878a2e14647c6f36237d298a6c09caed34ba02bc7d420359a65365436b97ea664b789d2c9338cb8802436cd29fa6e9c3d15ca", + "signatureLegacy": { + "r": "0xcbf3e146abb5f274935468ada3c659168a90199d16336acf804ef29c73363f1c", + "s": "0x3e589c3ab80c41cff21c887588e60e0f7e7816d587320641801369c3ce4b3c10", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x8a4651cc8cabd30cee1761af175cf4419ee3a17dd2ab0e5361408796a2da1ce3", + "s": "0x702a09546977e6519bf3eeb219b3220a038487252bbb52f55317aafb0e8151e7", + "v": "0xb36ef8270e" + }, + "signatureBerlin": { + "r": "0x999316db33ec39370e4c70219dc3cff231b8e8a56dd965b7a35209326e44fb36", + "s": "0x21686604de607fa16f6e73f9a34aafbe1308636d40d9668ab0817ed7feb383be", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xce27650e0a7c6ae4a99ce7587181e878a2e14647c6f36237d298a6c09caed34b", + "s": "0x2bc7d420359a65365436b97ea664b789d2c9338cb8802436cd29fa6e9c3d15ca", + "v": "0x1" + } + }, + { + "name": "random-45", + "transaction": { + "to": "0x65E04b5881b4c6fB2285Cf279851a2159956b06A", + "nonce": 234, + "gasLimit": "0x1fe5d1", + "gasPrice": "0x0fb4", + "maxFeePerGas": "0x12855148", + "maxPriorityFeePerGas": "0x7c", + "data": "0x58a9f5e2882a35d966f0a20d1dd924cae16ec675fbc07673c9b46a7b56d7b38e5553651d8efb26438905ca05ad263d629a847164ac3dd274f43643b89ef6fb2481ac31a2ec93fffd7dd77c48518074e0d14ed79d9094", + "value": "0xa171", + "accessList": [ + { + "address": "0x022A0e71D11AAb373afabfe9BeFd44681E9371Ef", + "storageKeys": [ + "0x59f7bf413b8e4fe25c1c744f85d99604ca804e2244bd4dab2ce6f5887da8e1d4", + "0x4ff150224b771fa7fcfdd80522c67e2315e1a2fd352991e254a0d65a793057f9", + "0x08b572b2ece8b7d3fec3ecae6317f9144e19cc170e1b5685f1ebda98e6fcf947" + ] + } + ], + "chainId": "0xff" + }, + "privateKey": "0xad73e2e29bce2e8bc51a1cd258fe6d63ac29ace059b760205588a0a9161c84c8", + "unsignedLegacy": "0xf87981ea820fb4831fe5d19465e04b5881b4c6fb2285cf279851a2159956b06a82a171b85658a9f5e2882a35d966f0a20d1dd924cae16ec675fbc07673c9b46a7b56d7b38e5553651d8efb26438905ca05ad263d629a847164ac3dd274f43643b89ef6fb2481ac31a2ec93fffd7dd77c48518074e0d14ed79d9094", + "unsignedEip155": "0xf87d81ea820fb4831fe5d19465e04b5881b4c6fb2285cf279851a2159956b06a82a171b85658a9f5e2882a35d966f0a20d1dd924cae16ec675fbc07673c9b46a7b56d7b38e5553651d8efb26438905ca05ad263d629a847164ac3dd274f43643b89ef6fb2481ac31a2ec93fffd7dd77c48518074e0d14ed79d909481ff8080", + "unsignedBerlin": "0x01f8f981ff81ea820fb4831fe5d19465e04b5881b4c6fb2285cf279851a2159956b06a82a171b85658a9f5e2882a35d966f0a20d1dd924cae16ec675fbc07673c9b46a7b56d7b38e5553651d8efb26438905ca05ad263d629a847164ac3dd274f43643b89ef6fb2481ac31a2ec93fffd7dd77c48518074e0d14ed79d9094f87cf87a94022a0e71d11aab373afabfe9befd44681e9371eff863a059f7bf413b8e4fe25c1c744f85d99604ca804e2244bd4dab2ce6f5887da8e1d4a04ff150224b771fa7fcfdd80522c67e2315e1a2fd352991e254a0d65a793057f9a008b572b2ece8b7d3fec3ecae6317f9144e19cc170e1b5685f1ebda98e6fcf947", + "unsignedLondon": "0x02f8fc81ff81ea7c8412855148831fe5d19465e04b5881b4c6fb2285cf279851a2159956b06a82a171b85658a9f5e2882a35d966f0a20d1dd924cae16ec675fbc07673c9b46a7b56d7b38e5553651d8efb26438905ca05ad263d629a847164ac3dd274f43643b89ef6fb2481ac31a2ec93fffd7dd77c48518074e0d14ed79d9094f87cf87a94022a0e71d11aab373afabfe9befd44681e9371eff863a059f7bf413b8e4fe25c1c744f85d99604ca804e2244bd4dab2ce6f5887da8e1d4a04ff150224b771fa7fcfdd80522c67e2315e1a2fd352991e254a0d65a793057f9a008b572b2ece8b7d3fec3ecae6317f9144e19cc170e1b5685f1ebda98e6fcf947", + "signedLegacy": "0xf8bc81ea820fb4831fe5d19465e04b5881b4c6fb2285cf279851a2159956b06a82a171b85658a9f5e2882a35d966f0a20d1dd924cae16ec675fbc07673c9b46a7b56d7b38e5553651d8efb26438905ca05ad263d629a847164ac3dd274f43643b89ef6fb2481ac31a2ec93fffd7dd77c48518074e0d14ed79d90941ba02f87ea5c3e1c312086023d4e0abb184095dd796a36ba237b8b597a59580c2fc5a07e1009c25e6e9c9dbf9f590259d646b39faf6852afba7cc6a21107c723a87b7d", + "signedEip155": "0xf8be81ea820fb4831fe5d19465e04b5881b4c6fb2285cf279851a2159956b06a82a171b85658a9f5e2882a35d966f0a20d1dd924cae16ec675fbc07673c9b46a7b56d7b38e5553651d8efb26438905ca05ad263d629a847164ac3dd274f43643b89ef6fb2481ac31a2ec93fffd7dd77c48518074e0d14ed79d9094820222a0a95dd6e42d318d6534baabf8e67f28e3290a3f28d91c83fdb0e3670d89b1890aa018acdfbedd486cf553b5470a4e5b5c58e4c81bb97eee3f32d3c695839ced604a", + "signedBerlin": "0x01f9013c81ff81ea820fb4831fe5d19465e04b5881b4c6fb2285cf279851a2159956b06a82a171b85658a9f5e2882a35d966f0a20d1dd924cae16ec675fbc07673c9b46a7b56d7b38e5553651d8efb26438905ca05ad263d629a847164ac3dd274f43643b89ef6fb2481ac31a2ec93fffd7dd77c48518074e0d14ed79d9094f87cf87a94022a0e71d11aab373afabfe9befd44681e9371eff863a059f7bf413b8e4fe25c1c744f85d99604ca804e2244bd4dab2ce6f5887da8e1d4a04ff150224b771fa7fcfdd80522c67e2315e1a2fd352991e254a0d65a793057f9a008b572b2ece8b7d3fec3ecae6317f9144e19cc170e1b5685f1ebda98e6fcf94701a09f37dfeff391049c13007dd139cb3b5b80f615fe66d14949a9967099ded07bbea008aab334a01393b36fc3babda6b2b42f0385f803618b0818a64d7de660b468b8", + "signedLondon": "0x02f9013f81ff81ea7c8412855148831fe5d19465e04b5881b4c6fb2285cf279851a2159956b06a82a171b85658a9f5e2882a35d966f0a20d1dd924cae16ec675fbc07673c9b46a7b56d7b38e5553651d8efb26438905ca05ad263d629a847164ac3dd274f43643b89ef6fb2481ac31a2ec93fffd7dd77c48518074e0d14ed79d9094f87cf87a94022a0e71d11aab373afabfe9befd44681e9371eff863a059f7bf413b8e4fe25c1c744f85d99604ca804e2244bd4dab2ce6f5887da8e1d4a04ff150224b771fa7fcfdd80522c67e2315e1a2fd352991e254a0d65a793057f9a008b572b2ece8b7d3fec3ecae6317f9144e19cc170e1b5685f1ebda98e6fcf94701a08f453d8e8e48447f2ce1b259dc8e568e3f1861e968fbfda21dcdf5417ebea5f1a02b7859bff470645d6b8328300c16a02b744179a5ae0c1c000d0a562ad6296800", + "signatureLegacy": { + "r": "0x2f87ea5c3e1c312086023d4e0abb184095dd796a36ba237b8b597a59580c2fc5", + "s": "0x7e1009c25e6e9c9dbf9f590259d646b39faf6852afba7cc6a21107c723a87b7d", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xa95dd6e42d318d6534baabf8e67f28e3290a3f28d91c83fdb0e3670d89b1890a", + "s": "0x18acdfbedd486cf553b5470a4e5b5c58e4c81bb97eee3f32d3c695839ced604a", + "v": "0x222" + }, + "signatureBerlin": { + "r": "0x9f37dfeff391049c13007dd139cb3b5b80f615fe66d14949a9967099ded07bbe", + "s": "0x08aab334a01393b36fc3babda6b2b42f0385f803618b0818a64d7de660b468b8", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x8f453d8e8e48447f2ce1b259dc8e568e3f1861e968fbfda21dcdf5417ebea5f1", + "s": "0x2b7859bff470645d6b8328300c16a02b744179a5ae0c1c000d0a562ad6296800", + "v": "0x1" + } + }, + { + "name": "random-46", + "transaction": { + "to": "0x0cf2069a11a3B48173897Db9134CAfCAda3B8354", + "nonce": 465, + "gasLimit": "0xebd9", + "gasPrice": "0xb7", + "maxFeePerGas": "0x2ab05f48", + "maxPriorityFeePerGas": "0x6e55", + "data": "0xf0132f763bb6f7a3e68007ff95b988a1e8338e6a13343c2023d26890f7d90a9dc67200f94079f3c9e5ab0d67f39787aca865aa767e1e473d9a19750425ce60377c5c7ee741b3a30de627fecffa0fbb5d509c0d54ad0ab8ddb3f3c914290708064503b70ba40e59533fbedab3b5fc4a54d357b2", + "value": "0x2af005ea", + "accessList": [ + { + "address": "0x434d7Ca3CA8C2Fba48E8dDFCCf1d30eF7B12aE51", + "storageKeys": [ + "0x8b9a6cf730d48a2bbc521bcf10327bfecf3263e82fc76fafb04048946693ee54", + "0x37806f0dbb413600b101c313d365edd55f6065ba8c27f63bd5baf5c6fdfaca20", + "0x4d3d7bda2653c7735bf1579cb60ca68edb90b8e1a71c313e89d4d60230695b2b", + "0x109cce912233f26218363565b1726b177bdd687d6f799569682d450bb95332c3" + ] + }, + { + "address": "0x55AADff2F7735D40FFbC4ffa3dC344A0A50408Fd", + "storageKeys": [ + "0x8b9a6cf730d48a2bbc521bcf10327bfecf3263e82fc76fafb04048946693ee54", + "0x37806f0dbb413600b101c313d365edd55f6065ba8c27f63bd5baf5c6fdfaca20", + "0x4d3d7bda2653c7735bf1579cb60ca68edb90b8e1a71c313e89d4d60230695b2b", + "0x109cce912233f26218363565b1726b177bdd687d6f799569682d450bb95332c3" + ] + } + ], + "chainId": "0x91bdcc" + }, + "privateKey": "0x013e161cd76a200390e2d448828af2bff4cea1847888835dd26ef6454409196f", + "unsignedLegacy": "0xf8978201d181b782ebd9940cf2069a11a3b48173897db9134cafcada3b8354842af005eab873f0132f763bb6f7a3e68007ff95b988a1e8338e6a13343c2023d26890f7d90a9dc67200f94079f3c9e5ab0d67f39787aca865aa767e1e473d9a19750425ce60377c5c7ee741b3a30de627fecffa0fbb5d509c0d54ad0ab8ddb3f3c914290708064503b70ba40e59533fbedab3b5fc4a54d357b2", + "unsignedEip155": "0xf89d8201d181b782ebd9940cf2069a11a3b48173897db9134cafcada3b8354842af005eab873f0132f763bb6f7a3e68007ff95b988a1e8338e6a13343c2023d26890f7d90a9dc67200f94079f3c9e5ab0d67f39787aca865aa767e1e473d9a19750425ce60377c5c7ee741b3a30de627fecffa0fbb5d509c0d54ad0ab8ddb3f3c914290708064503b70ba40e59533fbedab3b5fc4a54d357b28391bdcc8080", + "unsignedBerlin": "0x01f901d88391bdcc8201d181b782ebd9940cf2069a11a3b48173897db9134cafcada3b8354842af005eab873f0132f763bb6f7a3e68007ff95b988a1e8338e6a13343c2023d26890f7d90a9dc67200f94079f3c9e5ab0d67f39787aca865aa767e1e473d9a19750425ce60377c5c7ee741b3a30de627fecffa0fbb5d509c0d54ad0ab8ddb3f3c914290708064503b70ba40e59533fbedab3b5fc4a54d357b2f9013af89b94434d7ca3ca8c2fba48e8ddfccf1d30ef7b12ae51f884a08b9a6cf730d48a2bbc521bcf10327bfecf3263e82fc76fafb04048946693ee54a037806f0dbb413600b101c313d365edd55f6065ba8c27f63bd5baf5c6fdfaca20a04d3d7bda2653c7735bf1579cb60ca68edb90b8e1a71c313e89d4d60230695b2ba0109cce912233f26218363565b1726b177bdd687d6f799569682d450bb95332c3f89b9455aadff2f7735d40ffbc4ffa3dc344a0a50408fdf884a08b9a6cf730d48a2bbc521bcf10327bfecf3263e82fc76fafb04048946693ee54a037806f0dbb413600b101c313d365edd55f6065ba8c27f63bd5baf5c6fdfaca20a04d3d7bda2653c7735bf1579cb60ca68edb90b8e1a71c313e89d4d60230695b2ba0109cce912233f26218363565b1726b177bdd687d6f799569682d450bb95332c3", + "unsignedLondon": "0x02f901de8391bdcc8201d1826e55842ab05f4882ebd9940cf2069a11a3b48173897db9134cafcada3b8354842af005eab873f0132f763bb6f7a3e68007ff95b988a1e8338e6a13343c2023d26890f7d90a9dc67200f94079f3c9e5ab0d67f39787aca865aa767e1e473d9a19750425ce60377c5c7ee741b3a30de627fecffa0fbb5d509c0d54ad0ab8ddb3f3c914290708064503b70ba40e59533fbedab3b5fc4a54d357b2f9013af89b94434d7ca3ca8c2fba48e8ddfccf1d30ef7b12ae51f884a08b9a6cf730d48a2bbc521bcf10327bfecf3263e82fc76fafb04048946693ee54a037806f0dbb413600b101c313d365edd55f6065ba8c27f63bd5baf5c6fdfaca20a04d3d7bda2653c7735bf1579cb60ca68edb90b8e1a71c313e89d4d60230695b2ba0109cce912233f26218363565b1726b177bdd687d6f799569682d450bb95332c3f89b9455aadff2f7735d40ffbc4ffa3dc344a0a50408fdf884a08b9a6cf730d48a2bbc521bcf10327bfecf3263e82fc76fafb04048946693ee54a037806f0dbb413600b101c313d365edd55f6065ba8c27f63bd5baf5c6fdfaca20a04d3d7bda2653c7735bf1579cb60ca68edb90b8e1a71c313e89d4d60230695b2ba0109cce912233f26218363565b1726b177bdd687d6f799569682d450bb95332c3", + "signedLegacy": "0xf8da8201d181b782ebd9940cf2069a11a3b48173897db9134cafcada3b8354842af005eab873f0132f763bb6f7a3e68007ff95b988a1e8338e6a13343c2023d26890f7d90a9dc67200f94079f3c9e5ab0d67f39787aca865aa767e1e473d9a19750425ce60377c5c7ee741b3a30de627fecffa0fbb5d509c0d54ad0ab8ddb3f3c914290708064503b70ba40e59533fbedab3b5fc4a54d357b21ca030affe0222e2c8153ca6c8ae33521d1fad0bb9bb01a4abcb155394d796374e8da065ed0a3871dfd83a094e32b0ea9d9597567ef32ebe21d33a01b1ca87dcc9a2e8", + "signedEip155": "0xf8de8201d181b782ebd9940cf2069a11a3b48173897db9134cafcada3b8354842af005eab873f0132f763bb6f7a3e68007ff95b988a1e8338e6a13343c2023d26890f7d90a9dc67200f94079f3c9e5ab0d67f39787aca865aa767e1e473d9a19750425ce60377c5c7ee741b3a30de627fecffa0fbb5d509c0d54ad0ab8ddb3f3c914290708064503b70ba40e59533fbedab3b5fc4a54d357b28401237bbca0844bf29bd92674d62ab2b96d2830ec2baa47bbe6bf0b619f6187c6d2b75e976aa065a997e4bde3ed9db480b9427f43d3abf822b5f5c325b52d5460dedee5d3e513", + "signedBerlin": "0x01f9021b8391bdcc8201d181b782ebd9940cf2069a11a3b48173897db9134cafcada3b8354842af005eab873f0132f763bb6f7a3e68007ff95b988a1e8338e6a13343c2023d26890f7d90a9dc67200f94079f3c9e5ab0d67f39787aca865aa767e1e473d9a19750425ce60377c5c7ee741b3a30de627fecffa0fbb5d509c0d54ad0ab8ddb3f3c914290708064503b70ba40e59533fbedab3b5fc4a54d357b2f9013af89b94434d7ca3ca8c2fba48e8ddfccf1d30ef7b12ae51f884a08b9a6cf730d48a2bbc521bcf10327bfecf3263e82fc76fafb04048946693ee54a037806f0dbb413600b101c313d365edd55f6065ba8c27f63bd5baf5c6fdfaca20a04d3d7bda2653c7735bf1579cb60ca68edb90b8e1a71c313e89d4d60230695b2ba0109cce912233f26218363565b1726b177bdd687d6f799569682d450bb95332c3f89b9455aadff2f7735d40ffbc4ffa3dc344a0a50408fdf884a08b9a6cf730d48a2bbc521bcf10327bfecf3263e82fc76fafb04048946693ee54a037806f0dbb413600b101c313d365edd55f6065ba8c27f63bd5baf5c6fdfaca20a04d3d7bda2653c7735bf1579cb60ca68edb90b8e1a71c313e89d4d60230695b2ba0109cce912233f26218363565b1726b177bdd687d6f799569682d450bb95332c380a039545e9fca9a290aa7c978bbc8d3ea59bbd9dcc3fc9442b3a31bf1ab33b610c3a06fac20bc46b616182c01800f950ae8776bd652878c7ae4b1d9c3fe57f4ba1d8f", + "signedLondon": "0x02f902218391bdcc8201d1826e55842ab05f4882ebd9940cf2069a11a3b48173897db9134cafcada3b8354842af005eab873f0132f763bb6f7a3e68007ff95b988a1e8338e6a13343c2023d26890f7d90a9dc67200f94079f3c9e5ab0d67f39787aca865aa767e1e473d9a19750425ce60377c5c7ee741b3a30de627fecffa0fbb5d509c0d54ad0ab8ddb3f3c914290708064503b70ba40e59533fbedab3b5fc4a54d357b2f9013af89b94434d7ca3ca8c2fba48e8ddfccf1d30ef7b12ae51f884a08b9a6cf730d48a2bbc521bcf10327bfecf3263e82fc76fafb04048946693ee54a037806f0dbb413600b101c313d365edd55f6065ba8c27f63bd5baf5c6fdfaca20a04d3d7bda2653c7735bf1579cb60ca68edb90b8e1a71c313e89d4d60230695b2ba0109cce912233f26218363565b1726b177bdd687d6f799569682d450bb95332c3f89b9455aadff2f7735d40ffbc4ffa3dc344a0a50408fdf884a08b9a6cf730d48a2bbc521bcf10327bfecf3263e82fc76fafb04048946693ee54a037806f0dbb413600b101c313d365edd55f6065ba8c27f63bd5baf5c6fdfaca20a04d3d7bda2653c7735bf1579cb60ca68edb90b8e1a71c313e89d4d60230695b2ba0109cce912233f26218363565b1726b177bdd687d6f799569682d450bb95332c380a00783f362296e2de35b1676c565ef3551611de838ea4f7189060e41b479859f63a0389179ac6bdd9ba2feb09d752fd510c77d7c494802d9072a9abc56369e44ccfa", + "signatureLegacy": { + "r": "0x30affe0222e2c8153ca6c8ae33521d1fad0bb9bb01a4abcb155394d796374e8d", + "s": "0x65ed0a3871dfd83a094e32b0ea9d9597567ef32ebe21d33a01b1ca87dcc9a2e8", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x844bf29bd92674d62ab2b96d2830ec2baa47bbe6bf0b619f6187c6d2b75e976a", + "s": "0x65a997e4bde3ed9db480b9427f43d3abf822b5f5c325b52d5460dedee5d3e513", + "v": "0x1237bbc" + }, + "signatureBerlin": { + "r": "0x39545e9fca9a290aa7c978bbc8d3ea59bbd9dcc3fc9442b3a31bf1ab33b610c3", + "s": "0x6fac20bc46b616182c01800f950ae8776bd652878c7ae4b1d9c3fe57f4ba1d8f", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x0783f362296e2de35b1676c565ef3551611de838ea4f7189060e41b479859f63", + "s": "0x389179ac6bdd9ba2feb09d752fd510c77d7c494802d9072a9abc56369e44ccfa", + "v": "0x0" + } + }, + { + "name": "random-47", + "transaction": { + "to": "0x3aA0502f1644DD08cE5B717E08F3eec80232527d", + "nonce": 313, + "gasLimit": "0x8da2bcbf", + "gasPrice": "0x39", + "maxFeePerGas": "0xd9587c1f", + "maxPriorityFeePerGas": "0x6715ce", + "data": "0x19bc705651755df645ab3a8f64614b1f0e4819c6fa07df21eaba82b14185bf405877677729bd3cf35984e2de6795d26af8e54021ed5d7bbdc05c51a6b9a61be558d36f8faaf89a3f805a4b2d714c0001b8", + "value": "0xc101", + "accessList": [ + { + "address": "0x69ab4C6cf7a0098464D6Fd4CC4dAb8916aC0221f", + "storageKeys": [] + }, + { + "address": "0x3ee8Ea47479755ffbfdDaD11241aDFE1c3d9fF84", + "storageKeys": [] + }, + { + "address": "0x87A28064A49b65e77955dd25cBD4a6874161C9c9", + "storageKeys": [] + } + ], + "chainId": "0x0305ec" + }, + "privateKey": "0x7980f7b7b4d6a62db3a4a47e275d04f54c4501eb2d7ec4de963cce5e65b51c8a", + "unsignedLegacy": "0xf87482013939848da2bcbf943aa0502f1644dd08ce5b717e08f3eec80232527d82c101b85119bc705651755df645ab3a8f64614b1f0e4819c6fa07df21eaba82b14185bf405877677729bd3cf35984e2de6795d26af8e54021ed5d7bbdc05c51a6b9a61be558d36f8faaf89a3f805a4b2d714c0001b8", + "unsignedEip155": "0xf87a82013939848da2bcbf943aa0502f1644dd08ce5b717e08f3eec80232527d82c101b85119bc705651755df645ab3a8f64614b1f0e4819c6fa07df21eaba82b14185bf405877677729bd3cf35984e2de6795d26af8e54021ed5d7bbdc05c51a6b9a61be558d36f8faaf89a3f805a4b2d714c0001b8830305ec8080", + "unsignedBerlin": "0x01f8bf830305ec82013939848da2bcbf943aa0502f1644dd08ce5b717e08f3eec80232527d82c101b85119bc705651755df645ab3a8f64614b1f0e4819c6fa07df21eaba82b14185bf405877677729bd3cf35984e2de6795d26af8e54021ed5d7bbdc05c51a6b9a61be558d36f8faaf89a3f805a4b2d714c0001b8f845d69469ab4c6cf7a0098464d6fd4cc4dab8916ac0221fc0d6943ee8ea47479755ffbfddad11241adfe1c3d9ff84c0d69487a28064a49b65e77955dd25cbd4a6874161c9c9c0", + "unsignedLondon": "0x02f8c7830305ec820139836715ce84d9587c1f848da2bcbf943aa0502f1644dd08ce5b717e08f3eec80232527d82c101b85119bc705651755df645ab3a8f64614b1f0e4819c6fa07df21eaba82b14185bf405877677729bd3cf35984e2de6795d26af8e54021ed5d7bbdc05c51a6b9a61be558d36f8faaf89a3f805a4b2d714c0001b8f845d69469ab4c6cf7a0098464d6fd4cc4dab8916ac0221fc0d6943ee8ea47479755ffbfddad11241adfe1c3d9ff84c0d69487a28064a49b65e77955dd25cbd4a6874161c9c9c0", + "signedLegacy": "0xf8b782013939848da2bcbf943aa0502f1644dd08ce5b717e08f3eec80232527d82c101b85119bc705651755df645ab3a8f64614b1f0e4819c6fa07df21eaba82b14185bf405877677729bd3cf35984e2de6795d26af8e54021ed5d7bbdc05c51a6b9a61be558d36f8faaf89a3f805a4b2d714c0001b81ba051a1d4078e6a95a45bd34efde5ff639d83192e80209a98280ec77809ee036f05a036b1cb0eab89d8205905dbcc533e64a57796711d7092e8ba4859afb14f69e092", + "signedEip155": "0xf8ba82013939848da2bcbf943aa0502f1644dd08ce5b717e08f3eec80232527d82c101b85119bc705651755df645ab3a8f64614b1f0e4819c6fa07df21eaba82b14185bf405877677729bd3cf35984e2de6795d26af8e54021ed5d7bbdc05c51a6b9a61be558d36f8faaf89a3f805a4b2d714c0001b883060bfba099f65f8d767d7bda3c7e4f9e45695c46f15cc9c0ed109c58b023497da12159f0a0080dbf7dd30dbbb83cfac8b2a68877ae12c61c052016f148fe13f0f8e7381116", + "signedBerlin": "0x01f90102830305ec82013939848da2bcbf943aa0502f1644dd08ce5b717e08f3eec80232527d82c101b85119bc705651755df645ab3a8f64614b1f0e4819c6fa07df21eaba82b14185bf405877677729bd3cf35984e2de6795d26af8e54021ed5d7bbdc05c51a6b9a61be558d36f8faaf89a3f805a4b2d714c0001b8f845d69469ab4c6cf7a0098464d6fd4cc4dab8916ac0221fc0d6943ee8ea47479755ffbfddad11241adfe1c3d9ff84c0d69487a28064a49b65e77955dd25cbd4a6874161c9c9c001a0603d85eeea77ac11878471c5f489fde067b5f371c1b2f8bf10b8c924751c2eeea055fdb52e233f1c2d330d900531326b67feb985625694f11025b7f898f2687d49", + "signedLondon": "0x02f90109830305ec820139836715ce84d9587c1f848da2bcbf943aa0502f1644dd08ce5b717e08f3eec80232527d82c101b85119bc705651755df645ab3a8f64614b1f0e4819c6fa07df21eaba82b14185bf405877677729bd3cf35984e2de6795d26af8e54021ed5d7bbdc05c51a6b9a61be558d36f8faaf89a3f805a4b2d714c0001b8f845d69469ab4c6cf7a0098464d6fd4cc4dab8916ac0221fc0d6943ee8ea47479755ffbfddad11241adfe1c3d9ff84c0d69487a28064a49b65e77955dd25cbd4a6874161c9c9c001a03389836cb2482eedde630892c9ecd41e5eb360269a61a3942f141f6fe82b2c469f9bef6660e1476ffb208e6ce92e25554d4257555be9cc4c93b920943456dd69", + "signatureLegacy": { + "r": "0x51a1d4078e6a95a45bd34efde5ff639d83192e80209a98280ec77809ee036f05", + "s": "0x36b1cb0eab89d8205905dbcc533e64a57796711d7092e8ba4859afb14f69e092", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x99f65f8d767d7bda3c7e4f9e45695c46f15cc9c0ed109c58b023497da12159f0", + "s": "0x080dbf7dd30dbbb83cfac8b2a68877ae12c61c052016f148fe13f0f8e7381116", + "v": "0x60bfb" + }, + "signatureBerlin": { + "r": "0x603d85eeea77ac11878471c5f489fde067b5f371c1b2f8bf10b8c924751c2eee", + "s": "0x55fdb52e233f1c2d330d900531326b67feb985625694f11025b7f898f2687d49", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x3389836cb2482eedde630892c9ecd41e5eb360269a61a3942f141f6fe82b2c46", + "s": "0x009bef6660e1476ffb208e6ce92e25554d4257555be9cc4c93b920943456dd69", + "v": "0x1" + } + }, + { + "name": "random-51", + "transaction": { + "to": "0x4e69f72240ac6Aaf17136AC50eaa0537386559A5", + "nonce": 325, + "gasLimit": "0xea85", + "gasPrice": "0xd5aaa99c", + "maxFeePerGas": "0x3fa7d3a2be", + "maxPriorityFeePerGas": "0x57c317", + "data": "0x7b6016ee17355d87", + "value": "0x66", + "accessList": [ + { + "address": "0xD222671eAD9dfc329d5D8c026eaE8Cd365055A85", + "storageKeys": [ + "0xee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6" + ] + }, + { + "address": "0x62E4aA34CF93eC006c48bA16d99C6A572425637E", + "storageKeys": [ + "0xee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6" + ] + }, + { + "address": "0x732A9Ea0DC31cF2777fA3591e4d92E44B68f531f", + "storageKeys": [ + "0xee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6" + ] + }, + { + "address": "0xe304770850F193Bb64Fd886BbB4490a31d7aB87a", + "storageKeys": [ + "0xee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6" + ] + } + ], + "chainId": "0x7b91" + }, + "privateKey": "0x654940aea19dcc610d8b16d4700edea808dc2e1e1937df49f85355a1244560c5", + "unsignedLegacy": "0xea82014584d5aaa99c82ea85944e69f72240ac6aaf17136ac50eaa0537386559a566887b6016ee17355d87", + "unsignedEip155": "0xef82014584d5aaa99c82ea85944e69f72240ac6aaf17136ac50eaa0537386559a566887b6016ee17355d87827b918080", + "unsignedBerlin": "0x01f9010f827b9182014584d5aaa99c82ea85944e69f72240ac6aaf17136ac50eaa0537386559a566887b6016ee17355d87f8e0f794d222671ead9dfc329d5d8c026eae8cd365055a85e1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6f79462e4aa34cf93ec006c48ba16d99c6a572425637ee1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6f794732a9ea0dc31cf2777fa3591e4d92e44b68f531fe1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6f794e304770850f193bb64fd886bbb4490a31d7ab87ae1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6", + "unsignedLondon": "0x02f90114827b918201458357c317853fa7d3a2be82ea85944e69f72240ac6aaf17136ac50eaa0537386559a566887b6016ee17355d87f8e0f794d222671ead9dfc329d5d8c026eae8cd365055a85e1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6f79462e4aa34cf93ec006c48ba16d99c6a572425637ee1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6f794732a9ea0dc31cf2777fa3591e4d92e44b68f531fe1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6f794e304770850f193bb64fd886bbb4490a31d7ab87ae1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6", + "signedLegacy": "0xf86d82014584d5aaa99c82ea85944e69f72240ac6aaf17136ac50eaa0537386559a566887b6016ee17355d871ca0900052b11f5d174f31eea36be35630286e100540adbd6adbc84369612fd0e229a016080f943398b8ba89dde1da6f5cb340adc8b2e5fdc8263dd3e60ad010b51fb2", + "signedEip155": "0xf86f82014584d5aaa99c82ea85944e69f72240ac6aaf17136ac50eaa0537386559a566887b6016ee17355d8782f746a04eaaea56717c0549da1a6e037a99461afaaaa1a3959f865e59ee9bacfae3dcc1a07071e4740ff6ccd1e73b0ac71679c52aec7ba2f9eadafa07016044df8cd6f499", + "signedBerlin": "0x01f90152827b9182014584d5aaa99c82ea85944e69f72240ac6aaf17136ac50eaa0537386559a566887b6016ee17355d87f8e0f794d222671ead9dfc329d5d8c026eae8cd365055a85e1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6f79462e4aa34cf93ec006c48ba16d99c6a572425637ee1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6f794732a9ea0dc31cf2777fa3591e4d92e44b68f531fe1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6f794e304770850f193bb64fd886bbb4490a31d7ab87ae1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc601a0e2aae0c324b90fa3a12f3b1a6f9fc7dd998afbde5c409446b89b3992dd645f29a019f7e7f961fd01b0c5a20dfd74a65dd99258d0a281e47fc8e6a5b6dc5440d2ef", + "signedLondon": "0x02f90157827b918201458357c317853fa7d3a2be82ea85944e69f72240ac6aaf17136ac50eaa0537386559a566887b6016ee17355d87f8e0f794d222671ead9dfc329d5d8c026eae8cd365055a85e1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6f79462e4aa34cf93ec006c48ba16d99c6a572425637ee1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6f794732a9ea0dc31cf2777fa3591e4d92e44b68f531fe1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc6f794e304770850f193bb64fd886bbb4490a31d7ab87ae1a0ee0f927beda950cfbd87cd0595d90eff86a4bf9be7f5aa686d98e2c790748cc601a04126aaae682f639fdb7d4695e76e25acbcc3ef8724755b64e72ab9b70760a41da048243ab65dfca0b16edcd142a61e8f7d9cac69ac92aa762ee1d2ca29f4d8096a", + "signatureLegacy": { + "r": "0x900052b11f5d174f31eea36be35630286e100540adbd6adbc84369612fd0e229", + "s": "0x16080f943398b8ba89dde1da6f5cb340adc8b2e5fdc8263dd3e60ad010b51fb2", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x4eaaea56717c0549da1a6e037a99461afaaaa1a3959f865e59ee9bacfae3dcc1", + "s": "0x7071e4740ff6ccd1e73b0ac71679c52aec7ba2f9eadafa07016044df8cd6f499", + "v": "0xf746" + }, + "signatureBerlin": { + "r": "0xe2aae0c324b90fa3a12f3b1a6f9fc7dd998afbde5c409446b89b3992dd645f29", + "s": "0x19f7e7f961fd01b0c5a20dfd74a65dd99258d0a281e47fc8e6a5b6dc5440d2ef", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x4126aaae682f639fdb7d4695e76e25acbcc3ef8724755b64e72ab9b70760a41d", + "s": "0x48243ab65dfca0b16edcd142a61e8f7d9cac69ac92aa762ee1d2ca29f4d8096a", + "v": "0x1" + } + }, + { + "name": "random-52", + "transaction": { + "to": "0x3e00e0B5C5CcFA5c38527D655b6172dd8bBd2Ea4", + "nonce": 202, + "gasLimit": "0xcda9bd8a", + "gasPrice": "0x9a", + "maxFeePerGas": "0xa7dce37f49df12", + "maxPriorityFeePerGas": "0x90a6", + "data": "0x4e447bcb11ac2fb3d165deab35002bd126820952bb44438b2a342cefd29a7e41533cf101af42d980f231e5d599912e4823878f98e76ad09d0127f87fdd2eb386f0954d451337c6671efd06cf06f07219b5c05dd9904bf970ea106bb6271662290a26d775d7290149ca8a98f6ae4a52b32c63c8a5", + "value": "0x57534b", + "accessList": [ + { + "address": "0x9F06365D9DC6532A44a10142967a1646Cf90444A", + "storageKeys": [] + } + ], + "chainId": "0x288bdcb0ac" + }, + "privateKey": "0x0c9141b6a6f541969356556163aeb412c35f24ab354aa949c8cc6f13588f8079", + "unsignedLegacy": "0xf89881ca819a84cda9bd8a943e00e0b5c5ccfa5c38527d655b6172dd8bbd2ea48357534bb8744e447bcb11ac2fb3d165deab35002bd126820952bb44438b2a342cefd29a7e41533cf101af42d980f231e5d599912e4823878f98e76ad09d0127f87fdd2eb386f0954d451337c6671efd06cf06f07219b5c05dd9904bf970ea106bb6271662290a26d775d7290149ca8a98f6ae4a52b32c63c8a5", + "unsignedEip155": "0xf8a081ca819a84cda9bd8a943e00e0b5c5ccfa5c38527d655b6172dd8bbd2ea48357534bb8744e447bcb11ac2fb3d165deab35002bd126820952bb44438b2a342cefd29a7e41533cf101af42d980f231e5d599912e4823878f98e76ad09d0127f87fdd2eb386f0954d451337c6671efd06cf06f07219b5c05dd9904bf970ea106bb6271662290a26d775d7290149ca8a98f6ae4a52b32c63c8a585288bdcb0ac8080", + "unsignedBerlin": "0x01f8b685288bdcb0ac81ca819a84cda9bd8a943e00e0b5c5ccfa5c38527d655b6172dd8bbd2ea48357534bb8744e447bcb11ac2fb3d165deab35002bd126820952bb44438b2a342cefd29a7e41533cf101af42d980f231e5d599912e4823878f98e76ad09d0127f87fdd2eb386f0954d451337c6671efd06cf06f07219b5c05dd9904bf970ea106bb6271662290a26d775d7290149ca8a98f6ae4a52b32c63c8a5d7d6949f06365d9dc6532a44a10142967a1646cf90444ac0", + "unsignedLondon": "0x02f8bf85288bdcb0ac81ca8290a687a7dce37f49df1284cda9bd8a943e00e0b5c5ccfa5c38527d655b6172dd8bbd2ea48357534bb8744e447bcb11ac2fb3d165deab35002bd126820952bb44438b2a342cefd29a7e41533cf101af42d980f231e5d599912e4823878f98e76ad09d0127f87fdd2eb386f0954d451337c6671efd06cf06f07219b5c05dd9904bf970ea106bb6271662290a26d775d7290149ca8a98f6ae4a52b32c63c8a5d7d6949f06365d9dc6532a44a10142967a1646cf90444ac0", + "signedLegacy": "0xf8db81ca819a84cda9bd8a943e00e0b5c5ccfa5c38527d655b6172dd8bbd2ea48357534bb8744e447bcb11ac2fb3d165deab35002bd126820952bb44438b2a342cefd29a7e41533cf101af42d980f231e5d599912e4823878f98e76ad09d0127f87fdd2eb386f0954d451337c6671efd06cf06f07219b5c05dd9904bf970ea106bb6271662290a26d775d7290149ca8a98f6ae4a52b32c63c8a51ba08a71cea78f99d8f986e83f6366450a1bebe9707f3c87aad09b503f09b9bb6ac4a07f9e913ce4137b0c676187e8542510d945e92a989fef1a51482b1190a3a5190b", + "signedEip155": "0xf8e081ca819a84cda9bd8a943e00e0b5c5ccfa5c38527d655b6172dd8bbd2ea48357534bb8744e447bcb11ac2fb3d165deab35002bd126820952bb44438b2a342cefd29a7e41533cf101af42d980f231e5d599912e4823878f98e76ad09d0127f87fdd2eb386f0954d451337c6671efd06cf06f07219b5c05dd9904bf970ea106bb6271662290a26d775d7290149ca8a98f6ae4a52b32c63c8a5855117b9617ba088d9e6905b32c45f1f3dbd3d8c0056e7925b228a5c58f811c63df65401b08cf5a06b60bebba0d4c51fbaffcfa27949b7104d414cbf80d2dad3da7849c3f8acac4b", + "signedBerlin": "0x01f8f985288bdcb0ac81ca819a84cda9bd8a943e00e0b5c5ccfa5c38527d655b6172dd8bbd2ea48357534bb8744e447bcb11ac2fb3d165deab35002bd126820952bb44438b2a342cefd29a7e41533cf101af42d980f231e5d599912e4823878f98e76ad09d0127f87fdd2eb386f0954d451337c6671efd06cf06f07219b5c05dd9904bf970ea106bb6271662290a26d775d7290149ca8a98f6ae4a52b32c63c8a5d7d6949f06365d9dc6532a44a10142967a1646cf90444ac080a0a203d99158ce9ea8c1b361d8ff8ab8003c0435fce82fa5911109082dd44b337da03b78df7f2ad389471892636f1cea4cadcaac5204995b02791c68f8eb6546a051", + "signedLondon": "0x02f9010285288bdcb0ac81ca8290a687a7dce37f49df1284cda9bd8a943e00e0b5c5ccfa5c38527d655b6172dd8bbd2ea48357534bb8744e447bcb11ac2fb3d165deab35002bd126820952bb44438b2a342cefd29a7e41533cf101af42d980f231e5d599912e4823878f98e76ad09d0127f87fdd2eb386f0954d451337c6671efd06cf06f07219b5c05dd9904bf970ea106bb6271662290a26d775d7290149ca8a98f6ae4a52b32c63c8a5d7d6949f06365d9dc6532a44a10142967a1646cf90444ac001a0559c27f4e75acc7331bcc8b875d62dba7e543a84a856427be60cce36eb414028a025d690c27c7894475231f56bf167a3c27c1cb420b644e3df25f716bf5b00cf41", + "signatureLegacy": { + "r": "0x8a71cea78f99d8f986e83f6366450a1bebe9707f3c87aad09b503f09b9bb6ac4", + "s": "0x7f9e913ce4137b0c676187e8542510d945e92a989fef1a51482b1190a3a5190b", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x88d9e6905b32c45f1f3dbd3d8c0056e7925b228a5c58f811c63df65401b08cf5", + "s": "0x6b60bebba0d4c51fbaffcfa27949b7104d414cbf80d2dad3da7849c3f8acac4b", + "v": "0x5117b9617b" + }, + "signatureBerlin": { + "r": "0xa203d99158ce9ea8c1b361d8ff8ab8003c0435fce82fa5911109082dd44b337d", + "s": "0x3b78df7f2ad389471892636f1cea4cadcaac5204995b02791c68f8eb6546a051", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x559c27f4e75acc7331bcc8b875d62dba7e543a84a856427be60cce36eb414028", + "s": "0x25d690c27c7894475231f56bf167a3c27c1cb420b644e3df25f716bf5b00cf41", + "v": "0x1" + } + }, + { + "name": "random-53", + "transaction": { + "to": "0x3b3B6D650025ABf5599bf26ADABCEDF4A63CDb34", + "nonce": 922, + "gasLimit": "0x1a3b0c", + "gasPrice": "0x4d", + "maxFeePerGas": "0xd3fd4bca49", + "maxPriorityFeePerGas": "0xc2e0a8", + "data": "0x8be3026408a8fcd18d9f3a9cb0d6f9a1664806a3628008a16b0226c1d239afde18bc4358d3342c5476fdfbf24ff6f16bcf034f9c822ec25954a45aa061a64a0f5fc50d40d1bfac466419e3a626e0abf245ce1a", + "value": "0xb4f60d69ef", + "accessList": [ + { + "address": "0x1B6918B4DAAB3915815357dD5AF7bE83dcAd25a5", + "storageKeys": [] + }, + { + "address": "0xF6dCa07C60494bdBcb3B463baF59d14dbce5C797", + "storageKeys": [] + }, + { + "address": "0xcfA40043C444874077612568938d89404251Bb43", + "storageKeys": [] + }, + { + "address": "0x5364966cd61C60B5eB2Fef17A1CdD14f962E6f7d", + "storageKeys": [] + } + ], + "chainId": "0xe28d72" + }, + "privateKey": "0xe5f155384029218e2a82f8de19144e48d8bd0ca7dcdcffc3efdcad1c261eb97b", + "unsignedLegacy": "0xf87882039a4d831a3b0c943b3b6d650025abf5599bf26adabcedf4a63cdb3485b4f60d69efb8538be3026408a8fcd18d9f3a9cb0d6f9a1664806a3628008a16b0226c1d239afde18bc4358d3342c5476fdfbf24ff6f16bcf034f9c822ec25954a45aa061a64a0f5fc50d40d1bfac466419e3a626e0abf245ce1a", + "unsignedEip155": "0xf87e82039a4d831a3b0c943b3b6d650025abf5599bf26adabcedf4a63cdb3485b4f60d69efb8538be3026408a8fcd18d9f3a9cb0d6f9a1664806a3628008a16b0226c1d239afde18bc4358d3342c5476fdfbf24ff6f16bcf034f9c822ec25954a45aa061a64a0f5fc50d40d1bfac466419e3a626e0abf245ce1a83e28d728080", + "unsignedBerlin": "0x01f8da83e28d7282039a4d831a3b0c943b3b6d650025abf5599bf26adabcedf4a63cdb3485b4f60d69efb8538be3026408a8fcd18d9f3a9cb0d6f9a1664806a3628008a16b0226c1d239afde18bc4358d3342c5476fdfbf24ff6f16bcf034f9c822ec25954a45aa061a64a0f5fc50d40d1bfac466419e3a626e0abf245ce1af85cd6941b6918b4daab3915815357dd5af7be83dcad25a5c0d694f6dca07c60494bdbcb3b463baf59d14dbce5c797c0d694cfa40043c444874077612568938d89404251bb43c0d6945364966cd61c60b5eb2fef17a1cdd14f962e6f7dc0", + "unsignedLondon": "0x02f8e383e28d7282039a83c2e0a885d3fd4bca49831a3b0c943b3b6d650025abf5599bf26adabcedf4a63cdb3485b4f60d69efb8538be3026408a8fcd18d9f3a9cb0d6f9a1664806a3628008a16b0226c1d239afde18bc4358d3342c5476fdfbf24ff6f16bcf034f9c822ec25954a45aa061a64a0f5fc50d40d1bfac466419e3a626e0abf245ce1af85cd6941b6918b4daab3915815357dd5af7be83dcad25a5c0d694f6dca07c60494bdbcb3b463baf59d14dbce5c797c0d694cfa40043c444874077612568938d89404251bb43c0d6945364966cd61c60b5eb2fef17a1cdd14f962e6f7dc0", + "signedLegacy": "0xf8bb82039a4d831a3b0c943b3b6d650025abf5599bf26adabcedf4a63cdb3485b4f60d69efb8538be3026408a8fcd18d9f3a9cb0d6f9a1664806a3628008a16b0226c1d239afde18bc4358d3342c5476fdfbf24ff6f16bcf034f9c822ec25954a45aa061a64a0f5fc50d40d1bfac466419e3a626e0abf245ce1a1ca04a07725156a0a0cf4aaf75a3005c94c57cc9f1ba9773de86c780c81bd1db3a43a05a7b3935859dd78390b21c0fcc1018337d89b7df57ccbc65289005ac72e2e509", + "signedEip155": "0xf8bf82039a4d831a3b0c943b3b6d650025abf5599bf26adabcedf4a63cdb3485b4f60d69efb8538be3026408a8fcd18d9f3a9cb0d6f9a1664806a3628008a16b0226c1d239afde18bc4358d3342c5476fdfbf24ff6f16bcf034f9c822ec25954a45aa061a64a0f5fc50d40d1bfac466419e3a626e0abf245ce1a8401c51b07a0726f6f773ab0f273b93ce92b1018e48c3ce68f63e72750a40223953fa07ce038a0379085e3a60a16ebbd5db8c9bd13925c5fcb8c1c8111ee6abc495a8a9dac9ecd", + "signedBerlin": "0x01f9011d83e28d7282039a4d831a3b0c943b3b6d650025abf5599bf26adabcedf4a63cdb3485b4f60d69efb8538be3026408a8fcd18d9f3a9cb0d6f9a1664806a3628008a16b0226c1d239afde18bc4358d3342c5476fdfbf24ff6f16bcf034f9c822ec25954a45aa061a64a0f5fc50d40d1bfac466419e3a626e0abf245ce1af85cd6941b6918b4daab3915815357dd5af7be83dcad25a5c0d694f6dca07c60494bdbcb3b463baf59d14dbce5c797c0d694cfa40043c444874077612568938d89404251bb43c0d6945364966cd61c60b5eb2fef17a1cdd14f962e6f7dc001a0917df8f39d122b383d4344c870b89b44985f43201d2534e2d6af4a581138a67ea02fddca418f6bd459f3e26abe7eeb622f7d63ddb99c89602d7f64aff008e70a39", + "signedLondon": "0x02f9012683e28d7282039a83c2e0a885d3fd4bca49831a3b0c943b3b6d650025abf5599bf26adabcedf4a63cdb3485b4f60d69efb8538be3026408a8fcd18d9f3a9cb0d6f9a1664806a3628008a16b0226c1d239afde18bc4358d3342c5476fdfbf24ff6f16bcf034f9c822ec25954a45aa061a64a0f5fc50d40d1bfac466419e3a626e0abf245ce1af85cd6941b6918b4daab3915815357dd5af7be83dcad25a5c0d694f6dca07c60494bdbcb3b463baf59d14dbce5c797c0d694cfa40043c444874077612568938d89404251bb43c0d6945364966cd61c60b5eb2fef17a1cdd14f962e6f7dc080a06321ab229ef8cf2675f3d47dc63b91ab5acab467717cc480a2f2055c8ab48a2da0207601d794539aa72129157bc83e29a2cb87b7c8b4f9ee2c2272a132472c053a", + "signatureLegacy": { + "r": "0x4a07725156a0a0cf4aaf75a3005c94c57cc9f1ba9773de86c780c81bd1db3a43", + "s": "0x5a7b3935859dd78390b21c0fcc1018337d89b7df57ccbc65289005ac72e2e509", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x726f6f773ab0f273b93ce92b1018e48c3ce68f63e72750a40223953fa07ce038", + "s": "0x379085e3a60a16ebbd5db8c9bd13925c5fcb8c1c8111ee6abc495a8a9dac9ecd", + "v": "0x1c51b07" + }, + "signatureBerlin": { + "r": "0x917df8f39d122b383d4344c870b89b44985f43201d2534e2d6af4a581138a67e", + "s": "0x2fddca418f6bd459f3e26abe7eeb622f7d63ddb99c89602d7f64aff008e70a39", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x6321ab229ef8cf2675f3d47dc63b91ab5acab467717cc480a2f2055c8ab48a2d", + "s": "0x207601d794539aa72129157bc83e29a2cb87b7c8b4f9ee2c2272a132472c053a", + "v": "0x0" + } + }, + { + "name": "random-54", + "transaction": { + "to": "0x627b9201a0BeDE5524ac0Ff8f95af471f2cBA572", + "nonce": 235, + "gasLimit": "0x5b9169", + "gasPrice": "0x1cc7887efd", + "maxFeePerGas": "0xb9cd0e540d8d79", + "maxPriorityFeePerGas": "0xe4764b", + "data": "0xfbf7e3c457459b3bdd12e04bacd531cae09b4a2c3c058c743bde847c7d092bf2dc921a06af5594a9fbae14f7afbb98ce088a5893d926c615419cdb465e69832def1c0106a84ddb685568f8df6fe7b9110b7720b57298883db0d8411bc8bd6e94f9358f749719587937197be545317978cf24", + "value": "0x6aa38d50", + "accessList": [ + { + "address": "0xe8F9ac8eEd79272F2865E5Fad50B407dba179200", + "storageKeys": [ + "0x147ad1e04dc4a163ed1ab1e06cc767561b953956bfbea7da6801191105959acf", + "0x3899cbf0de63ad1a2a4e59b2b89c9f07c9050dac577c70427948960a7f8eda38", + "0x2fffac1b3728b3dc6c9470bc5c576fac560163565b19d58c2ffab0f4cd511de8", + "0x6b527be8895ca1a8a5bf53d19aa463dc9626e5e35a42ceddb273f6986cb19dfd" + ] + }, + { + "address": "0xc87c5Cf7175827146469C29e281258f5eA4Fb13A", + "storageKeys": [ + "0x147ad1e04dc4a163ed1ab1e06cc767561b953956bfbea7da6801191105959acf", + "0x3899cbf0de63ad1a2a4e59b2b89c9f07c9050dac577c70427948960a7f8eda38", + "0x2fffac1b3728b3dc6c9470bc5c576fac560163565b19d58c2ffab0f4cd511de8", + "0x6b527be8895ca1a8a5bf53d19aa463dc9626e5e35a42ceddb273f6986cb19dfd" + ] + } + ], + "chainId": "0xb1d83657bc" + }, + "privateKey": "0x918683982947996514ab3b4831d707bc8e95a960e9a83b777c7862a94e8110fe", + "unsignedLegacy": "0xf89a81eb851cc7887efd835b916994627b9201a0bede5524ac0ff8f95af471f2cba572846aa38d50b872fbf7e3c457459b3bdd12e04bacd531cae09b4a2c3c058c743bde847c7d092bf2dc921a06af5594a9fbae14f7afbb98ce088a5893d926c615419cdb465e69832def1c0106a84ddb685568f8df6fe7b9110b7720b57298883db0d8411bc8bd6e94f9358f749719587937197be545317978cf24", + "unsignedEip155": "0xf8a281eb851cc7887efd835b916994627b9201a0bede5524ac0ff8f95af471f2cba572846aa38d50b872fbf7e3c457459b3bdd12e04bacd531cae09b4a2c3c058c743bde847c7d092bf2dc921a06af5594a9fbae14f7afbb98ce088a5893d926c615419cdb465e69832def1c0106a84ddb685568f8df6fe7b9110b7720b57298883db0d8411bc8bd6e94f9358f749719587937197be545317978cf2485b1d83657bc8080", + "unsignedBerlin": "0x01f901dd85b1d83657bc81eb851cc7887efd835b916994627b9201a0bede5524ac0ff8f95af471f2cba572846aa38d50b872fbf7e3c457459b3bdd12e04bacd531cae09b4a2c3c058c743bde847c7d092bf2dc921a06af5594a9fbae14f7afbb98ce088a5893d926c615419cdb465e69832def1c0106a84ddb685568f8df6fe7b9110b7720b57298883db0d8411bc8bd6e94f9358f749719587937197be545317978cf24f9013af89b94e8f9ac8eed79272f2865e5fad50b407dba179200f884a0147ad1e04dc4a163ed1ab1e06cc767561b953956bfbea7da6801191105959acfa03899cbf0de63ad1a2a4e59b2b89c9f07c9050dac577c70427948960a7f8eda38a02fffac1b3728b3dc6c9470bc5c576fac560163565b19d58c2ffab0f4cd511de8a06b527be8895ca1a8a5bf53d19aa463dc9626e5e35a42ceddb273f6986cb19dfdf89b94c87c5cf7175827146469c29e281258f5ea4fb13af884a0147ad1e04dc4a163ed1ab1e06cc767561b953956bfbea7da6801191105959acfa03899cbf0de63ad1a2a4e59b2b89c9f07c9050dac577c70427948960a7f8eda38a02fffac1b3728b3dc6c9470bc5c576fac560163565b19d58c2ffab0f4cd511de8a06b527be8895ca1a8a5bf53d19aa463dc9626e5e35a42ceddb273f6986cb19dfd", + "unsignedLondon": "0x02f901e385b1d83657bc81eb83e4764b87b9cd0e540d8d79835b916994627b9201a0bede5524ac0ff8f95af471f2cba572846aa38d50b872fbf7e3c457459b3bdd12e04bacd531cae09b4a2c3c058c743bde847c7d092bf2dc921a06af5594a9fbae14f7afbb98ce088a5893d926c615419cdb465e69832def1c0106a84ddb685568f8df6fe7b9110b7720b57298883db0d8411bc8bd6e94f9358f749719587937197be545317978cf24f9013af89b94e8f9ac8eed79272f2865e5fad50b407dba179200f884a0147ad1e04dc4a163ed1ab1e06cc767561b953956bfbea7da6801191105959acfa03899cbf0de63ad1a2a4e59b2b89c9f07c9050dac577c70427948960a7f8eda38a02fffac1b3728b3dc6c9470bc5c576fac560163565b19d58c2ffab0f4cd511de8a06b527be8895ca1a8a5bf53d19aa463dc9626e5e35a42ceddb273f6986cb19dfdf89b94c87c5cf7175827146469c29e281258f5ea4fb13af884a0147ad1e04dc4a163ed1ab1e06cc767561b953956bfbea7da6801191105959acfa03899cbf0de63ad1a2a4e59b2b89c9f07c9050dac577c70427948960a7f8eda38a02fffac1b3728b3dc6c9470bc5c576fac560163565b19d58c2ffab0f4cd511de8a06b527be8895ca1a8a5bf53d19aa463dc9626e5e35a42ceddb273f6986cb19dfd", + "signedLegacy": "0xf8dd81eb851cc7887efd835b916994627b9201a0bede5524ac0ff8f95af471f2cba572846aa38d50b872fbf7e3c457459b3bdd12e04bacd531cae09b4a2c3c058c743bde847c7d092bf2dc921a06af5594a9fbae14f7afbb98ce088a5893d926c615419cdb465e69832def1c0106a84ddb685568f8df6fe7b9110b7720b57298883db0d8411bc8bd6e94f9358f749719587937197be545317978cf241ba003210206de97071ddfad589a05d072bc1eb3113977e5f09d9ff24b79760d9a94a036d618fde6e25ab9e9934b7417618e2c732928e34f5f0e76d09c58d75043c871", + "signedEip155": "0xf8e381eb851cc7887efd835b916994627b9201a0bede5524ac0ff8f95af471f2cba572846aa38d50b872fbf7e3c457459b3bdd12e04bacd531cae09b4a2c3c058c743bde847c7d092bf2dc921a06af5594a9fbae14f7afbb98ce088a5893d926c615419cdb465e69832def1c0106a84ddb685568f8df6fe7b9110b7720b57298883db0d8411bc8bd6e94f9358f749719587937197be545317978cf24860163b06caf9ba086dc8667987f4e9d5d452ba9b6ca056c142453a5da206b5b252519ab64cbc400a074f0841beba40a22a2639886dac6ffbcd06740c7c028e901ca79554e4d4e4e33", + "signedBerlin": "0x01f9022085b1d83657bc81eb851cc7887efd835b916994627b9201a0bede5524ac0ff8f95af471f2cba572846aa38d50b872fbf7e3c457459b3bdd12e04bacd531cae09b4a2c3c058c743bde847c7d092bf2dc921a06af5594a9fbae14f7afbb98ce088a5893d926c615419cdb465e69832def1c0106a84ddb685568f8df6fe7b9110b7720b57298883db0d8411bc8bd6e94f9358f749719587937197be545317978cf24f9013af89b94e8f9ac8eed79272f2865e5fad50b407dba179200f884a0147ad1e04dc4a163ed1ab1e06cc767561b953956bfbea7da6801191105959acfa03899cbf0de63ad1a2a4e59b2b89c9f07c9050dac577c70427948960a7f8eda38a02fffac1b3728b3dc6c9470bc5c576fac560163565b19d58c2ffab0f4cd511de8a06b527be8895ca1a8a5bf53d19aa463dc9626e5e35a42ceddb273f6986cb19dfdf89b94c87c5cf7175827146469c29e281258f5ea4fb13af884a0147ad1e04dc4a163ed1ab1e06cc767561b953956bfbea7da6801191105959acfa03899cbf0de63ad1a2a4e59b2b89c9f07c9050dac577c70427948960a7f8eda38a02fffac1b3728b3dc6c9470bc5c576fac560163565b19d58c2ffab0f4cd511de8a06b527be8895ca1a8a5bf53d19aa463dc9626e5e35a42ceddb273f6986cb19dfd80a05d1fd8cdc59c77d5e9d8d7bb6983e2c510c9bd802c782fac786502570839f5f9a01d2c5f7c41b07b83f2a847f4e5ec97e4a6659b12f6c64296aa2ce8f21cc9c2f0", + "signedLondon": "0x02f9022685b1d83657bc81eb83e4764b87b9cd0e540d8d79835b916994627b9201a0bede5524ac0ff8f95af471f2cba572846aa38d50b872fbf7e3c457459b3bdd12e04bacd531cae09b4a2c3c058c743bde847c7d092bf2dc921a06af5594a9fbae14f7afbb98ce088a5893d926c615419cdb465e69832def1c0106a84ddb685568f8df6fe7b9110b7720b57298883db0d8411bc8bd6e94f9358f749719587937197be545317978cf24f9013af89b94e8f9ac8eed79272f2865e5fad50b407dba179200f884a0147ad1e04dc4a163ed1ab1e06cc767561b953956bfbea7da6801191105959acfa03899cbf0de63ad1a2a4e59b2b89c9f07c9050dac577c70427948960a7f8eda38a02fffac1b3728b3dc6c9470bc5c576fac560163565b19d58c2ffab0f4cd511de8a06b527be8895ca1a8a5bf53d19aa463dc9626e5e35a42ceddb273f6986cb19dfdf89b94c87c5cf7175827146469c29e281258f5ea4fb13af884a0147ad1e04dc4a163ed1ab1e06cc767561b953956bfbea7da6801191105959acfa03899cbf0de63ad1a2a4e59b2b89c9f07c9050dac577c70427948960a7f8eda38a02fffac1b3728b3dc6c9470bc5c576fac560163565b19d58c2ffab0f4cd511de8a06b527be8895ca1a8a5bf53d19aa463dc9626e5e35a42ceddb273f6986cb19dfd80a06ae588bdfc7a47891d548f249851b14d11e4aedd09fd5c04d7902a24831da997a0480cf2c49c9f80491ac8e174b3bf87b596bbe88d32f1e2d5b228ea1425503007", + "signatureLegacy": { + "r": "0x03210206de97071ddfad589a05d072bc1eb3113977e5f09d9ff24b79760d9a94", + "s": "0x36d618fde6e25ab9e9934b7417618e2c732928e34f5f0e76d09c58d75043c871", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x86dc8667987f4e9d5d452ba9b6ca056c142453a5da206b5b252519ab64cbc400", + "s": "0x74f0841beba40a22a2639886dac6ffbcd06740c7c028e901ca79554e4d4e4e33", + "v": "0x163b06caf9b" + }, + "signatureBerlin": { + "r": "0x5d1fd8cdc59c77d5e9d8d7bb6983e2c510c9bd802c782fac786502570839f5f9", + "s": "0x1d2c5f7c41b07b83f2a847f4e5ec97e4a6659b12f6c64296aa2ce8f21cc9c2f0", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x6ae588bdfc7a47891d548f249851b14d11e4aedd09fd5c04d7902a24831da997", + "s": "0x480cf2c49c9f80491ac8e174b3bf87b596bbe88d32f1e2d5b228ea1425503007", + "v": "0x0" + } + }, + { + "name": "random-55", + "transaction": { + "to": "0x16956bB9eb69550DE37fC267501e14A5515D6dFA", + "nonce": 983, + "gasLimit": "0x9d1947", + "gasPrice": "0xf8ddddaf", + "maxFeePerGas": "0xb72fb36f12", + "maxPriorityFeePerGas": "0x41f0", + "data": "0xcca9d435f73a63ff", + "value": "0xde694d", + "accessList": [ + { + "address": "0xf31afb826f3BfD3071FaA91340129D449a0c889a", + "storageKeys": [ + "0x46e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cb", + "0x2939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389" + ] + }, + { + "address": "0xe3431Bd6A55eaf5E6e3EfFB8c9Da31422fd58A31", + "storageKeys": [ + "0x46e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cb", + "0x2939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389" + ] + }, + { + "address": "0xaE9f344D1207d4499BacF56edE4Ef4b85D17aAB4", + "storageKeys": [ + "0x46e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cb", + "0x2939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389" + ] + }, + { + "address": "0xF4Ada8bC0115258EAF149196f358e374FECB6f7d", + "storageKeys": [ + "0x46e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cb", + "0x2939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389" + ] + } + ], + "chainId": "0x6bba4364" + }, + "privateKey": "0x137ea6a6eacd95abf006c234ec8ada1a0a1efe733fb8fecf37db48c17ce44df6", + "unsignedLegacy": "0xee8203d784f8ddddaf839d19479416956bb9eb69550de37fc267501e14a5515d6dfa83de694d88cca9d435f73a63ff", + "unsignedEip155": "0xf58203d784f8ddddaf839d19479416956bb9eb69550de37fc267501e14a5515d6dfa83de694d88cca9d435f73a63ff846bba43648080", + "unsignedBerlin": "0x01f901a2846bba43648203d784f8ddddaf839d19479416956bb9eb69550de37fc267501e14a5515d6dfa83de694d88cca9d435f73a63fff9016cf85994f31afb826f3bfd3071faa91340129d449a0c889af842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389f85994e3431bd6a55eaf5e6e3effb8c9da31422fd58a31f842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389f85994ae9f344d1207d4499bacf56ede4ef4b85d17aab4f842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389f85994f4ada8bc0115258eaf149196f358e374fecb6f7df842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389", + "unsignedLondon": "0x02f901a6846bba43648203d78241f085b72fb36f12839d19479416956bb9eb69550de37fc267501e14a5515d6dfa83de694d88cca9d435f73a63fff9016cf85994f31afb826f3bfd3071faa91340129d449a0c889af842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389f85994e3431bd6a55eaf5e6e3effb8c9da31422fd58a31f842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389f85994ae9f344d1207d4499bacf56ede4ef4b85d17aab4f842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389f85994f4ada8bc0115258eaf149196f358e374fecb6f7df842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389", + "signedLegacy": "0xf8718203d784f8ddddaf839d19479416956bb9eb69550de37fc267501e14a5515d6dfa83de694d88cca9d435f73a63ff1ca070e544a02ece6a47bc00e68838cae01bd65a0065603b87f09203bb59b5efd99fa05d46cd43fd26a0b982acd5c7993cb41e4de80b77969b6a0470c7cf6f3c9f054a", + "signedEip155": "0xf8758203d784f8ddddaf839d19479416956bb9eb69550de37fc267501e14a5515d6dfa83de694d88cca9d435f73a63ff84d77486eba08e1191fe12b393310f8fb2abb6074a136ae4f98bd0442fa890475a50562f97b9a00f4bacd10be5df1c17ba82236d3781dbded8a52d706cba8197781bc015de7081", + "signedBerlin": "0x01f901e5846bba43648203d784f8ddddaf839d19479416956bb9eb69550de37fc267501e14a5515d6dfa83de694d88cca9d435f73a63fff9016cf85994f31afb826f3bfd3071faa91340129d449a0c889af842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389f85994e3431bd6a55eaf5e6e3effb8c9da31422fd58a31f842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389f85994ae9f344d1207d4499bacf56ede4ef4b85d17aab4f842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389f85994f4ada8bc0115258eaf149196f358e374fecb6f7df842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c2438901a005f5f2ec9356791f65e15da49518059ce948c67d486a4e36f7a9c12bb3bcce0aa010c58f445aaddcbaf83fcf287c39ca39b6e7a07c712d722ae7dfd2c4689c3182", + "signedLondon": "0x02f901e9846bba43648203d78241f085b72fb36f12839d19479416956bb9eb69550de37fc267501e14a5515d6dfa83de694d88cca9d435f73a63fff9016cf85994f31afb826f3bfd3071faa91340129d449a0c889af842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389f85994e3431bd6a55eaf5e6e3effb8c9da31422fd58a31f842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389f85994ae9f344d1207d4499bacf56ede4ef4b85d17aab4f842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c24389f85994f4ada8bc0115258eaf149196f358e374fecb6f7df842a046e816297a43ce7d94b8c6bdb6cca1159fd7b6242778aa1964c438a31f0e78cba02939d4452e9498a49b3765a9a401a5ac36223086ae576012c6ca8311a9c2438980a02f5e0e0b5ada76f4d4fa9fbbdd9c55f5b0f71a4c307de72d22d0641be70868f9a0213abf45ab63703d83d449501a2d91b808b2462fc196c06da8aada39d1832073", + "signatureLegacy": { + "r": "0x70e544a02ece6a47bc00e68838cae01bd65a0065603b87f09203bb59b5efd99f", + "s": "0x5d46cd43fd26a0b982acd5c7993cb41e4de80b77969b6a0470c7cf6f3c9f054a", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x8e1191fe12b393310f8fb2abb6074a136ae4f98bd0442fa890475a50562f97b9", + "s": "0x0f4bacd10be5df1c17ba82236d3781dbded8a52d706cba8197781bc015de7081", + "v": "0xd77486eb" + }, + "signatureBerlin": { + "r": "0x05f5f2ec9356791f65e15da49518059ce948c67d486a4e36f7a9c12bb3bcce0a", + "s": "0x10c58f445aaddcbaf83fcf287c39ca39b6e7a07c712d722ae7dfd2c4689c3182", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x2f5e0e0b5ada76f4d4fa9fbbdd9c55f5b0f71a4c307de72d22d0641be70868f9", + "s": "0x213abf45ab63703d83d449501a2d91b808b2462fc196c06da8aada39d1832073", + "v": "0x0" + } + }, + { + "name": "random-57", + "transaction": { + "to": "0x8D587B077f84921E7B45A2Fc1209c3580be37956", + "nonce": 389, + "gasLimit": "0x3590c0", + "gasPrice": "0x54", + "maxFeePerGas": "0x71fa92e5e1cc", + "maxPriorityFeePerGas": "0xd4b6", + "data": "0xde568480020f1e491e429456dc8a200ce1e693ad33110d110c458f848d767d1496756035ce2a29357cee04ef33f8deae3fa54fcbf9d669a552e38dd1354a4e2596ee", + "value": "0x90fa", + "accessList": [ + { + "address": "0xbc779883FF90455a2E6008776951485719472bE6", + "storageKeys": [ + "0x2bc39a03b5f8bf3405e1df4450634b4a33cd60dc1d00fd79173c97d5fdebacaa", + "0x6fd0e4c4e3dcb01d49d0d0b5169fd3f8f46bae2676d80f6d7ed7eebfe927e808", + "0xa1a9d7f16bb9c5733025eb1c54fb3cd7de7e4a67eec53992191281f034ec7ecf" + ] + } + ], + "chainId": "0xda" + }, + "privateKey": "0x5d7cbce511e04fffbb632f04623d274c69004680bbfe47f642d781933cc43401", + "unsignedLegacy": "0xf86482018554833590c0948d587b077f84921e7b45a2fc1209c3580be379568290fab842de568480020f1e491e429456dc8a200ce1e693ad33110d110c458f848d767d1496756035ce2a29357cee04ef33f8deae3fa54fcbf9d669a552e38dd1354a4e2596ee", + "unsignedEip155": "0xf86882018554833590c0948d587b077f84921e7b45a2fc1209c3580be379568290fab842de568480020f1e491e429456dc8a200ce1e693ad33110d110c458f848d767d1496756035ce2a29357cee04ef33f8deae3fa54fcbf9d669a552e38dd1354a4e2596ee81da8080", + "unsignedBerlin": "0x01f8e481da82018554833590c0948d587b077f84921e7b45a2fc1209c3580be379568290fab842de568480020f1e491e429456dc8a200ce1e693ad33110d110c458f848d767d1496756035ce2a29357cee04ef33f8deae3fa54fcbf9d669a552e38dd1354a4e2596eef87cf87a94bc779883ff90455a2e6008776951485719472be6f863a02bc39a03b5f8bf3405e1df4450634b4a33cd60dc1d00fd79173c97d5fdebacaaa06fd0e4c4e3dcb01d49d0d0b5169fd3f8f46bae2676d80f6d7ed7eebfe927e808a0a1a9d7f16bb9c5733025eb1c54fb3cd7de7e4a67eec53992191281f034ec7ecf", + "unsignedLondon": "0x02f8ed81da82018582d4b68671fa92e5e1cc833590c0948d587b077f84921e7b45a2fc1209c3580be379568290fab842de568480020f1e491e429456dc8a200ce1e693ad33110d110c458f848d767d1496756035ce2a29357cee04ef33f8deae3fa54fcbf9d669a552e38dd1354a4e2596eef87cf87a94bc779883ff90455a2e6008776951485719472be6f863a02bc39a03b5f8bf3405e1df4450634b4a33cd60dc1d00fd79173c97d5fdebacaaa06fd0e4c4e3dcb01d49d0d0b5169fd3f8f46bae2676d80f6d7ed7eebfe927e808a0a1a9d7f16bb9c5733025eb1c54fb3cd7de7e4a67eec53992191281f034ec7ecf", + "signedLegacy": "0xf8a782018554833590c0948d587b077f84921e7b45a2fc1209c3580be379568290fab842de568480020f1e491e429456dc8a200ce1e693ad33110d110c458f848d767d1496756035ce2a29357cee04ef33f8deae3fa54fcbf9d669a552e38dd1354a4e2596ee1ba0daee610c21d26de0d296b5be04d683b488760a7848b789d742dfd9f28d3832dfa009ec88625ad3f3d3083cf70e7de44de6382e001397bbf7cee9e5cdc2d5834c20", + "signedEip155": "0xf8a982018554833590c0948d587b077f84921e7b45a2fc1209c3580be379568290fab842de568480020f1e491e429456dc8a200ce1e693ad33110d110c458f848d767d1496756035ce2a29357cee04ef33f8deae3fa54fcbf9d669a552e38dd1354a4e2596ee8201d8a09f327c24ae39283fe49ea21d60ce7af7d44680f9e2191e244cd8f7270ee53203a0740bc5ca8b8b393caa49ec981c567269614b3bcc5e64df0f1020f4832ddd95aa", + "signedBerlin": "0x01f9012781da82018554833590c0948d587b077f84921e7b45a2fc1209c3580be379568290fab842de568480020f1e491e429456dc8a200ce1e693ad33110d110c458f848d767d1496756035ce2a29357cee04ef33f8deae3fa54fcbf9d669a552e38dd1354a4e2596eef87cf87a94bc779883ff90455a2e6008776951485719472be6f863a02bc39a03b5f8bf3405e1df4450634b4a33cd60dc1d00fd79173c97d5fdebacaaa06fd0e4c4e3dcb01d49d0d0b5169fd3f8f46bae2676d80f6d7ed7eebfe927e808a0a1a9d7f16bb9c5733025eb1c54fb3cd7de7e4a67eec53992191281f034ec7ecf01a0f67940ac1017f768c5c5e24a2a4decbca9f004762cfded4dd46f5ca3603178eca012f23bf646c2c3cffd652fd94a1045db4fb16541e3b0075afafb6f119c8b2e83", + "signedLondon": "0x02f9013081da82018582d4b68671fa92e5e1cc833590c0948d587b077f84921e7b45a2fc1209c3580be379568290fab842de568480020f1e491e429456dc8a200ce1e693ad33110d110c458f848d767d1496756035ce2a29357cee04ef33f8deae3fa54fcbf9d669a552e38dd1354a4e2596eef87cf87a94bc779883ff90455a2e6008776951485719472be6f863a02bc39a03b5f8bf3405e1df4450634b4a33cd60dc1d00fd79173c97d5fdebacaaa06fd0e4c4e3dcb01d49d0d0b5169fd3f8f46bae2676d80f6d7ed7eebfe927e808a0a1a9d7f16bb9c5733025eb1c54fb3cd7de7e4a67eec53992191281f034ec7ecf01a02e6fb20ea115ecfd8c1e78b39f4da06e8afff2c89b98b4f02bed77c6946e30f5a013cbbacab6fe5b963901683afccff8c2248161ac8828316e3ec70c9988504fa8", + "signatureLegacy": { + "r": "0xdaee610c21d26de0d296b5be04d683b488760a7848b789d742dfd9f28d3832df", + "s": "0x09ec88625ad3f3d3083cf70e7de44de6382e001397bbf7cee9e5cdc2d5834c20", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x9f327c24ae39283fe49ea21d60ce7af7d44680f9e2191e244cd8f7270ee53203", + "s": "0x740bc5ca8b8b393caa49ec981c567269614b3bcc5e64df0f1020f4832ddd95aa", + "v": "0x1d8" + }, + "signatureBerlin": { + "r": "0xf67940ac1017f768c5c5e24a2a4decbca9f004762cfded4dd46f5ca3603178ec", + "s": "0x12f23bf646c2c3cffd652fd94a1045db4fb16541e3b0075afafb6f119c8b2e83", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x2e6fb20ea115ecfd8c1e78b39f4da06e8afff2c89b98b4f02bed77c6946e30f5", + "s": "0x13cbbacab6fe5b963901683afccff8c2248161ac8828316e3ec70c9988504fa8", + "v": "0x1" + } + }, + { + "name": "random-58", + "transaction": { + "to": "0x75d29838Cea84FCa64D51c6Ec1a8569EB7DC50Ab", + "nonce": 429, + "gasLimit": "0xfdf81cbd", + "gasPrice": "0xc7698e80", + "maxFeePerGas": "0x624be7e9ac40fc", + "maxPriorityFeePerGas": "0x9a7ccc", + "data": "0x8c155565770c9988b3eae6c8edbc5e933c560fa7022445f1f49bc17d6dad44a52c", + "value": "0x57627fbfba", + "accessList": [], + "chainId": "0x3e78" + }, + "privateKey": "0xc50b3899129411ea0f9d8e13e45e85a35d02b4523d47aed0e2acb5650c861e08", + "unsignedLegacy": "0xf84a8201ad84c7698e8084fdf81cbd9475d29838cea84fca64d51c6ec1a8569eb7dc50ab8557627fbfbaa18c155565770c9988b3eae6c8edbc5e933c560fa7022445f1f49bc17d6dad44a52c", + "unsignedEip155": "0xf84f8201ad84c7698e8084fdf81cbd9475d29838cea84fca64d51c6ec1a8569eb7dc50ab8557627fbfbaa18c155565770c9988b3eae6c8edbc5e933c560fa7022445f1f49bc17d6dad44a52c823e788080", + "unsignedBerlin": "0x01f84e823e788201ad84c7698e8084fdf81cbd9475d29838cea84fca64d51c6ec1a8569eb7dc50ab8557627fbfbaa18c155565770c9988b3eae6c8edbc5e933c560fa7022445f1f49bc17d6dad44a52cc0", + "unsignedLondon": "0x02f855823e788201ad839a7ccc87624be7e9ac40fc84fdf81cbd9475d29838cea84fca64d51c6ec1a8569eb7dc50ab8557627fbfbaa18c155565770c9988b3eae6c8edbc5e933c560fa7022445f1f49bc17d6dad44a52cc0", + "signedLegacy": "0xf88d8201ad84c7698e8084fdf81cbd9475d29838cea84fca64d51c6ec1a8569eb7dc50ab8557627fbfbaa18c155565770c9988b3eae6c8edbc5e933c560fa7022445f1f49bc17d6dad44a52c1ba070ea0b2283eff406478a3aec263220e343e0194d2d40be6eef804c83cea75f74a07de5ca832515fb951911c9ad0638ea43ed072ea74712dcbb430ded8e4d2f5fbd", + "signedEip155": "0xf88f8201ad84c7698e8084fdf81cbd9475d29838cea84fca64d51c6ec1a8569eb7dc50ab8557627fbfbaa18c155565770c9988b3eae6c8edbc5e933c560fa7022445f1f49bc17d6dad44a52c827d13a01bd7f8dd351c6dd9d56d7a40b3b4c387b1772ce70eca80be6900eb055723d337a073fcf25e7be207d894fb377bc3581cdf541af33ce8abcd603dcffa4733e698c8", + "signedBerlin": "0x01f891823e788201ad84c7698e8084fdf81cbd9475d29838cea84fca64d51c6ec1a8569eb7dc50ab8557627fbfbaa18c155565770c9988b3eae6c8edbc5e933c560fa7022445f1f49bc17d6dad44a52cc080a00b7426fe4242d01693dc430a6c10036b0a06f017e282bf2a20b93cebe17260c9a07d7b51b8715c7b8bccdd0954cdbed5933d49c98fca2a35ab7afc365567227ce2", + "signedLondon": "0x02f898823e788201ad839a7ccc87624be7e9ac40fc84fdf81cbd9475d29838cea84fca64d51c6ec1a8569eb7dc50ab8557627fbfbaa18c155565770c9988b3eae6c8edbc5e933c560fa7022445f1f49bc17d6dad44a52cc001a00a50c2a7c9245468e7ddf8220baabd71fc4504602c33efaa4f23833c5c667d7aa03778391d9f2fae27737a08b5a416c57efd5e842a74eddfe347c8a72c22538924", + "signatureLegacy": { + "r": "0x70ea0b2283eff406478a3aec263220e343e0194d2d40be6eef804c83cea75f74", + "s": "0x7de5ca832515fb951911c9ad0638ea43ed072ea74712dcbb430ded8e4d2f5fbd", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x1bd7f8dd351c6dd9d56d7a40b3b4c387b1772ce70eca80be6900eb055723d337", + "s": "0x73fcf25e7be207d894fb377bc3581cdf541af33ce8abcd603dcffa4733e698c8", + "v": "0x7d13" + }, + "signatureBerlin": { + "r": "0x0b7426fe4242d01693dc430a6c10036b0a06f017e282bf2a20b93cebe17260c9", + "s": "0x7d7b51b8715c7b8bccdd0954cdbed5933d49c98fca2a35ab7afc365567227ce2", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x0a50c2a7c9245468e7ddf8220baabd71fc4504602c33efaa4f23833c5c667d7a", + "s": "0x3778391d9f2fae27737a08b5a416c57efd5e842a74eddfe347c8a72c22538924", + "v": "0x1" + } + }, + { + "name": "random-59", + "transaction": { + "to": "0x760dB83f7B207A736F8588A22106af54F936524e", + "nonce": 852, + "gasLimit": "0x9fbf", + "gasPrice": "0x0a", + "maxFeePerGas": "0x04b726a269", + "maxPriorityFeePerGas": "0xb06f", + "data": "0x7b6360232a0d6cb301d443473c9bc014381b26671af0d96f734fd2bdd2bc88d00e0d2b59230a1c65134e967795db7ad1310a277986a7bb5d23ca83a53a2faa223bbf66381a6778c9ecaf32579d824b", + "value": "0x993bc7c3", + "accessList": [], + "chainId": "0x90a8e085c5" + }, + "privateKey": "0x82ab59938e77af5fd4c82d25507f079711e94366216b3db9f773265034311ecd", + "unsignedLegacy": "0xf8728203540a829fbf94760db83f7b207a736f8588a22106af54f936524e84993bc7c3b84f7b6360232a0d6cb301d443473c9bc014381b26671af0d96f734fd2bdd2bc88d00e0d2b59230a1c65134e967795db7ad1310a277986a7bb5d23ca83a53a2faa223bbf66381a6778c9ecaf32579d824b", + "unsignedEip155": "0xf87a8203540a829fbf94760db83f7b207a736f8588a22106af54f936524e84993bc7c3b84f7b6360232a0d6cb301d443473c9bc014381b26671af0d96f734fd2bdd2bc88d00e0d2b59230a1c65134e967795db7ad1310a277986a7bb5d23ca83a53a2faa223bbf66381a6778c9ecaf32579d824b8590a8e085c58080", + "unsignedBerlin": "0x01f8798590a8e085c58203540a829fbf94760db83f7b207a736f8588a22106af54f936524e84993bc7c3b84f7b6360232a0d6cb301d443473c9bc014381b26671af0d96f734fd2bdd2bc88d00e0d2b59230a1c65134e967795db7ad1310a277986a7bb5d23ca83a53a2faa223bbf66381a6778c9ecaf32579d824bc0", + "unsignedLondon": "0x02f8818590a8e085c582035482b06f8504b726a269829fbf94760db83f7b207a736f8588a22106af54f936524e84993bc7c3b84f7b6360232a0d6cb301d443473c9bc014381b26671af0d96f734fd2bdd2bc88d00e0d2b59230a1c65134e967795db7ad1310a277986a7bb5d23ca83a53a2faa223bbf66381a6778c9ecaf32579d824bc0", + "signedLegacy": "0xf8b58203540a829fbf94760db83f7b207a736f8588a22106af54f936524e84993bc7c3b84f7b6360232a0d6cb301d443473c9bc014381b26671af0d96f734fd2bdd2bc88d00e0d2b59230a1c65134e967795db7ad1310a277986a7bb5d23ca83a53a2faa223bbf66381a6778c9ecaf32579d824b1ba046bdb17647bae97038423a77566f002c15ffd27b425c4d673d487668857bd27ea07193f81712f19872dea3d11c40c97afdc1d1e84f3553cfd0b7898b53007bc2c1", + "signedEip155": "0xf8bb8203540a829fbf94760db83f7b207a736f8588a22106af54f936524e84993bc7c3b84f7b6360232a0d6cb301d443473c9bc014381b26671af0d96f734fd2bdd2bc88d00e0d2b59230a1c65134e967795db7ad1310a277986a7bb5d23ca83a53a2faa223bbf66381a6778c9ecaf32579d824b86012151c10baea03dc69952e1f9d5e2fdba43226d76fed64fb1125cbd4c75f0f1b1e5b34a1e8ce9a0700ef41aa70699b67bb7bea476f6eb9e7b979c922c7fd9322ee601198abb618a", + "signedBerlin": "0x01f8bb8590a8e085c58203540a829fbf94760db83f7b207a736f8588a22106af54f936524e84993bc7c3b84f7b6360232a0d6cb301d443473c9bc014381b26671af0d96f734fd2bdd2bc88d00e0d2b59230a1c65134e967795db7ad1310a277986a7bb5d23ca83a53a2faa223bbf66381a6778c9ecaf32579d824bc0809f092b2451c26150f293f67b0a3506669aaab9b76f6946194e393dfe38cabb9da064bbac715ab68588bcfa79a64b85345c9339e900c5b4ef23f5c696013bb8e47c", + "signedLondon": "0x02f8c48590a8e085c582035482b06f8504b726a269829fbf94760db83f7b207a736f8588a22106af54f936524e84993bc7c3b84f7b6360232a0d6cb301d443473c9bc014381b26671af0d96f734fd2bdd2bc88d00e0d2b59230a1c65134e967795db7ad1310a277986a7bb5d23ca83a53a2faa223bbf66381a6778c9ecaf32579d824bc001a09396b1fc222afa6ba054712ad53cc25e27261f7e5d9f605ad9bf4d64b0821b84a0430504071e428a448609849fdcc0962e69f9ed39708d068caac0ae7c24c5487b", + "signatureLegacy": { + "r": "0x46bdb17647bae97038423a77566f002c15ffd27b425c4d673d487668857bd27e", + "s": "0x7193f81712f19872dea3d11c40c97afdc1d1e84f3553cfd0b7898b53007bc2c1", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x3dc69952e1f9d5e2fdba43226d76fed64fb1125cbd4c75f0f1b1e5b34a1e8ce9", + "s": "0x700ef41aa70699b67bb7bea476f6eb9e7b979c922c7fd9322ee601198abb618a", + "v": "0x12151c10bae" + }, + "signatureBerlin": { + "r": "0x00092b2451c26150f293f67b0a3506669aaab9b76f6946194e393dfe38cabb9d", + "s": "0x64bbac715ab68588bcfa79a64b85345c9339e900c5b4ef23f5c696013bb8e47c", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x9396b1fc222afa6ba054712ad53cc25e27261f7e5d9f605ad9bf4d64b0821b84", + "s": "0x430504071e428a448609849fdcc0962e69f9ed39708d068caac0ae7c24c5487b", + "v": "0x1" + } + }, + { + "name": "random-62", + "transaction": { + "to": "0xdc1Fde9eaDDb50Aff5a565E490D14CBB29464a04", + "nonce": 257, + "gasLimit": "0xc569764d7a", + "gasPrice": "0x900dc629ce", + "maxFeePerGas": "0x9819e85255", + "maxPriorityFeePerGas": "0x4e7b", + "data": "0xa2162f5f8fa934704347147c5c76135cc29d2507f9e775dcbcf09d42e6c4e99412d0889d84ed584e3f8303cf406fe846709aa0e64c5b97c5cbb930311425bcf940d855af054c635b9895a02420778ddc72b2804043c9752cff12f2a7bce5e7", + "value": "0x1e049e3c71", + "accessList": [ + { + "address": "0x61885BBb4861f6C13c7dBd00a6a3D5eA3A36914F", + "storageKeys": [ + "0xf3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7d", + "0xa827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24", + "0x6cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d54" + ] + }, + { + "address": "0xE2a1D257A226DE30d8371f648D5b9673629CD457", + "storageKeys": [ + "0xf3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7d", + "0xa827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24", + "0x6cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d54" + ] + }, + { + "address": "0x3F272680b8FFd6DE85Bf93b0C5E9C22d708c2D71", + "storageKeys": [ + "0xf3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7d", + "0xa827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24", + "0x6cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d54" + ] + } + ], + "chainId": "0xf82dcbe5" + }, + "privateKey": "0x8e38480b740fa4337bd501dc8adfc1e062ad2c26c3e712a0cdc5797b0e2cd0fc", + "unsignedLegacy": "0xf88b82010185900dc629ce85c569764d7a94dc1fde9eaddb50aff5a565e490d14cbb29464a04851e049e3c71b85fa2162f5f8fa934704347147c5c76135cc29d2507f9e775dcbcf09d42e6c4e99412d0889d84ed584e3f8303cf406fe846709aa0e64c5b97c5cbb930311425bcf940d855af054c635b9895a02420778ddc72b2804043c9752cff12f2a7bce5e7", + "unsignedEip155": "0xf89282010185900dc629ce85c569764d7a94dc1fde9eaddb50aff5a565e490d14cbb29464a04851e049e3c71b85fa2162f5f8fa934704347147c5c76135cc29d2507f9e775dcbcf09d42e6c4e99412d0889d84ed584e3f8303cf406fe846709aa0e64c5b97c5cbb930311425bcf940d855af054c635b9895a02420778ddc72b2804043c9752cff12f2a7bce5e784f82dcbe58080", + "unsignedBerlin": "0x01f9020784f82dcbe582010185900dc629ce85c569764d7a94dc1fde9eaddb50aff5a565e490d14cbb29464a04851e049e3c71b85fa2162f5f8fa934704347147c5c76135cc29d2507f9e775dcbcf09d42e6c4e99412d0889d84ed584e3f8303cf406fe846709aa0e64c5b97c5cbb930311425bcf940d855af054c635b9895a02420778ddc72b2804043c9752cff12f2a7bce5e7f90174f87a9461885bbb4861f6c13c7dbd00a6a3d5ea3a36914ff863a0f3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7da0a827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24a06cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d54f87a94e2a1d257a226de30d8371f648d5b9673629cd457f863a0f3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7da0a827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24a06cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d54f87a943f272680b8ffd6de85bf93b0c5e9c22d708c2d71f863a0f3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7da0a827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24a06cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d54", + "unsignedLondon": "0x02f9020a84f82dcbe5820101824e7b859819e8525585c569764d7a94dc1fde9eaddb50aff5a565e490d14cbb29464a04851e049e3c71b85fa2162f5f8fa934704347147c5c76135cc29d2507f9e775dcbcf09d42e6c4e99412d0889d84ed584e3f8303cf406fe846709aa0e64c5b97c5cbb930311425bcf940d855af054c635b9895a02420778ddc72b2804043c9752cff12f2a7bce5e7f90174f87a9461885bbb4861f6c13c7dbd00a6a3d5ea3a36914ff863a0f3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7da0a827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24a06cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d54f87a94e2a1d257a226de30d8371f648d5b9673629cd457f863a0f3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7da0a827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24a06cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d54f87a943f272680b8ffd6de85bf93b0c5e9c22d708c2d71f863a0f3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7da0a827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24a06cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d54", + "signedLegacy": "0xf8ce82010185900dc629ce85c569764d7a94dc1fde9eaddb50aff5a565e490d14cbb29464a04851e049e3c71b85fa2162f5f8fa934704347147c5c76135cc29d2507f9e775dcbcf09d42e6c4e99412d0889d84ed584e3f8303cf406fe846709aa0e64c5b97c5cbb930311425bcf940d855af054c635b9895a02420778ddc72b2804043c9752cff12f2a7bce5e71ba05e84bd2ecdd7e7ea421bfd4a859fbe7b478ca88442bd3b20adf85e49293d2312a031f44666a5cca48b6b2826a878e858143b3d5cb0ba67dc555190a94660396bbd", + "signedEip155": "0xf8d382010185900dc629ce85c569764d7a94dc1fde9eaddb50aff5a565e490d14cbb29464a04851e049e3c71b85fa2162f5f8fa934704347147c5c76135cc29d2507f9e775dcbcf09d42e6c4e99412d0889d84ed584e3f8303cf406fe846709aa0e64c5b97c5cbb930311425bcf940d855af054c635b9895a02420778ddc72b2804043c9752cff12f2a7bce5e78501f05b97eda01ffd81ec5dfc0ef32e8546bc90e52e20505ebebb59f22c0a03cf3d04ef9d0574a027d5b8fca35bcf33f81601e3da32dd7b7a55329e70c4eef9bc8b93b1e073863a", + "signedBerlin": "0x01f9024a84f82dcbe582010185900dc629ce85c569764d7a94dc1fde9eaddb50aff5a565e490d14cbb29464a04851e049e3c71b85fa2162f5f8fa934704347147c5c76135cc29d2507f9e775dcbcf09d42e6c4e99412d0889d84ed584e3f8303cf406fe846709aa0e64c5b97c5cbb930311425bcf940d855af054c635b9895a02420778ddc72b2804043c9752cff12f2a7bce5e7f90174f87a9461885bbb4861f6c13c7dbd00a6a3d5ea3a36914ff863a0f3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7da0a827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24a06cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d54f87a94e2a1d257a226de30d8371f648d5b9673629cd457f863a0f3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7da0a827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24a06cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d54f87a943f272680b8ffd6de85bf93b0c5e9c22d708c2d71f863a0f3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7da0a827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24a06cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d5480a048da43f5985816fc18f85baa8ec561529b50686fbdca4cfdfbbb0406c167a77fa065c6116280fb31c7d105a2d5e9eac260168e92bc99e90cb34d666faedf90f2a6", + "signedLondon": "0x02f9024d84f82dcbe5820101824e7b859819e8525585c569764d7a94dc1fde9eaddb50aff5a565e490d14cbb29464a04851e049e3c71b85fa2162f5f8fa934704347147c5c76135cc29d2507f9e775dcbcf09d42e6c4e99412d0889d84ed584e3f8303cf406fe846709aa0e64c5b97c5cbb930311425bcf940d855af054c635b9895a02420778ddc72b2804043c9752cff12f2a7bce5e7f90174f87a9461885bbb4861f6c13c7dbd00a6a3d5ea3a36914ff863a0f3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7da0a827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24a06cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d54f87a94e2a1d257a226de30d8371f648d5b9673629cd457f863a0f3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7da0a827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24a06cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d54f87a943f272680b8ffd6de85bf93b0c5e9c22d708c2d71f863a0f3d63d0b40060713983bb1ca15151c0920f3b1c6cc3505fbb69f72c212d52a7da0a827cf299e1063d0f5481a10aba398911b6be26e46725a5a9b2f66813850cb24a06cf850f316a8abd17c3255a59b1b73436c7721793c44a28f0c28410f08546d5480a086ecaf1d98ab1f04ea04517c2c1b022d035ee8476b6082dd785487b1d8bc103da074d83dc523ea9fa01d6fb698ced3d5f2143ca700f35cfda327a45b0a6d9d5180", + "signatureLegacy": { + "r": "0x5e84bd2ecdd7e7ea421bfd4a859fbe7b478ca88442bd3b20adf85e49293d2312", + "s": "0x31f44666a5cca48b6b2826a878e858143b3d5cb0ba67dc555190a94660396bbd", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x1ffd81ec5dfc0ef32e8546bc90e52e20505ebebb59f22c0a03cf3d04ef9d0574", + "s": "0x27d5b8fca35bcf33f81601e3da32dd7b7a55329e70c4eef9bc8b93b1e073863a", + "v": "0x1f05b97ed" + }, + "signatureBerlin": { + "r": "0x48da43f5985816fc18f85baa8ec561529b50686fbdca4cfdfbbb0406c167a77f", + "s": "0x65c6116280fb31c7d105a2d5e9eac260168e92bc99e90cb34d666faedf90f2a6", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x86ecaf1d98ab1f04ea04517c2c1b022d035ee8476b6082dd785487b1d8bc103d", + "s": "0x74d83dc523ea9fa01d6fb698ced3d5f2143ca700f35cfda327a45b0a6d9d5180", + "v": "0x0" + } + }, + { + "name": "random-63", + "transaction": { + "to": "0xB85AE10711562BCB3974dfB1EaE1beda3Bc67dBd", + "nonce": 512, + "gasLimit": "0x678622c5", + "gasPrice": "0x4d61", + "maxFeePerGas": "0xfa139367d1ea", + "maxPriorityFeePerGas": "0xbd", + "data": "0x189c5bf9b458be808435ba5e5c9436050c855aef11641fc00a329863a0b8d00ebb49dc92aa7466795df26f52f7f097a8951212994dcf084f3115eeeabd49d8215bea1e541872f3c7dbdab7a816", + "value": "0x94eacf62ef", + "accessList": [ + { + "address": "0x59A9aa6004324B4C1E5Ca16b31E5062d65d69f02", + "storageKeys": [] + }, + { + "address": "0x59Cb2199dB7c40F512dcADe23d726F6Bc4300247", + "storageKeys": [] + }, + { + "address": "0x1e14CE82C1FcEcB1D3786a7657Da422Dd7B1b475", + "storageKeys": [] + }, + { + "address": "0xFD9e6D34C58d53ad14A216700677D4452EBAfd36", + "storageKeys": [] + } + ], + "chainId": "0x0833" + }, + "privateKey": "0xe5ff5923aacdb3a189dcefe4c03d3e22bfaf4192ea7bbd24be98894f62171a57", + "unsignedLegacy": "0xf875820200824d6184678622c594b85ae10711562bcb3974dfb1eae1beda3bc67dbd8594eacf62efb84d189c5bf9b458be808435ba5e5c9436050c855aef11641fc00a329863a0b8d00ebb49dc92aa7466795df26f52f7f097a8951212994dcf084f3115eeeabd49d8215bea1e541872f3c7dbdab7a816", + "unsignedEip155": "0xf87a820200824d6184678622c594b85ae10711562bcb3974dfb1eae1beda3bc67dbd8594eacf62efb84d189c5bf9b458be808435ba5e5c9436050c855aef11641fc00a329863a0b8d00ebb49dc92aa7466795df26f52f7f097a8951212994dcf084f3115eeeabd49d8215bea1e541872f3c7dbdab7a8168208338080", + "unsignedBerlin": "0x01f8d6820833820200824d6184678622c594b85ae10711562bcb3974dfb1eae1beda3bc67dbd8594eacf62efb84d189c5bf9b458be808435ba5e5c9436050c855aef11641fc00a329863a0b8d00ebb49dc92aa7466795df26f52f7f097a8951212994dcf084f3115eeeabd49d8215bea1e541872f3c7dbdab7a816f85cd69459a9aa6004324b4c1e5ca16b31e5062d65d69f02c0d69459cb2199db7c40f512dcade23d726f6bc4300247c0d6941e14ce82c1fcecb1d3786a7657da422dd7b1b475c0d694fd9e6d34c58d53ad14a216700677d4452ebafd36c0", + "unsignedLondon": "0x02f8dc82083382020081bd86fa139367d1ea84678622c594b85ae10711562bcb3974dfb1eae1beda3bc67dbd8594eacf62efb84d189c5bf9b458be808435ba5e5c9436050c855aef11641fc00a329863a0b8d00ebb49dc92aa7466795df26f52f7f097a8951212994dcf084f3115eeeabd49d8215bea1e541872f3c7dbdab7a816f85cd69459a9aa6004324b4c1e5ca16b31e5062d65d69f02c0d69459cb2199db7c40f512dcade23d726f6bc4300247c0d6941e14ce82c1fcecb1d3786a7657da422dd7b1b475c0d694fd9e6d34c58d53ad14a216700677d4452ebafd36c0", + "signedLegacy": "0xf8b8820200824d6184678622c594b85ae10711562bcb3974dfb1eae1beda3bc67dbd8594eacf62efb84d189c5bf9b458be808435ba5e5c9436050c855aef11641fc00a329863a0b8d00ebb49dc92aa7466795df26f52f7f097a8951212994dcf084f3115eeeabd49d8215bea1e541872f3c7dbdab7a8161ca0d100a5c518d6f29d7de500c124105a22a15addf8ca5e4f31f3b4b3720658242fa00c21b393bc705b9aa8e68075448641b3a9d408066a9fd12a7b17e44980d756c2", + "signedEip155": "0xf8ba820200824d6184678622c594b85ae10711562bcb3974dfb1eae1beda3bc67dbd8594eacf62efb84d189c5bf9b458be808435ba5e5c9436050c855aef11641fc00a329863a0b8d00ebb49dc92aa7466795df26f52f7f097a8951212994dcf084f3115eeeabd49d8215bea1e541872f3c7dbdab7a81682108aa05f09e2cf8d6c18ce021226999a1a5f01fe563e1ada5b994e404472abd23b6634a06d481fc532616c1f5302f0947f2e0661b53839ef435fec2906f5e6d910733a90", + "signedBerlin": "0x01f90119820833820200824d6184678622c594b85ae10711562bcb3974dfb1eae1beda3bc67dbd8594eacf62efb84d189c5bf9b458be808435ba5e5c9436050c855aef11641fc00a329863a0b8d00ebb49dc92aa7466795df26f52f7f097a8951212994dcf084f3115eeeabd49d8215bea1e541872f3c7dbdab7a816f85cd69459a9aa6004324b4c1e5ca16b31e5062d65d69f02c0d69459cb2199db7c40f512dcade23d726f6bc4300247c0d6941e14ce82c1fcecb1d3786a7657da422dd7b1b475c0d694fd9e6d34c58d53ad14a216700677d4452ebafd36c080a00ced1859b647e40df4d6e32e413b6589eabcead59f7d5dd4d538fb3e5988da7ba075419572d86c97c46f6763007a203dba5edd6e86a0f9aceff809f615b4d51fe7", + "signedLondon": "0x02f9011f82083382020081bd86fa139367d1ea84678622c594b85ae10711562bcb3974dfb1eae1beda3bc67dbd8594eacf62efb84d189c5bf9b458be808435ba5e5c9436050c855aef11641fc00a329863a0b8d00ebb49dc92aa7466795df26f52f7f097a8951212994dcf084f3115eeeabd49d8215bea1e541872f3c7dbdab7a816f85cd69459a9aa6004324b4c1e5ca16b31e5062d65d69f02c0d69459cb2199db7c40f512dcade23d726f6bc4300247c0d6941e14ce82c1fcecb1d3786a7657da422dd7b1b475c0d694fd9e6d34c58d53ad14a216700677d4452ebafd36c080a0acd28e8cfb3fd1dffa4cfb2572db96a5ee26f0b355c43f4823dfac161fd0a41ea06cece03756ae904b414a82e9835e94d66426f2e114f6a6b27e8ec6ef301fb14c", + "signatureLegacy": { + "r": "0xd100a5c518d6f29d7de500c124105a22a15addf8ca5e4f31f3b4b3720658242f", + "s": "0x0c21b393bc705b9aa8e68075448641b3a9d408066a9fd12a7b17e44980d756c2", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x5f09e2cf8d6c18ce021226999a1a5f01fe563e1ada5b994e404472abd23b6634", + "s": "0x6d481fc532616c1f5302f0947f2e0661b53839ef435fec2906f5e6d910733a90", + "v": "0x108a" + }, + "signatureBerlin": { + "r": "0x0ced1859b647e40df4d6e32e413b6589eabcead59f7d5dd4d538fb3e5988da7b", + "s": "0x75419572d86c97c46f6763007a203dba5edd6e86a0f9aceff809f615b4d51fe7", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xacd28e8cfb3fd1dffa4cfb2572db96a5ee26f0b355c43f4823dfac161fd0a41e", + "s": "0x6cece03756ae904b414a82e9835e94d66426f2e114f6a6b27e8ec6ef301fb14c", + "v": "0x0" + } + }, + { + "name": "random-64", + "transaction": { + "to": "0x5539b0d27740010A98894024d7bc891BA7831c89", + "nonce": 202, + "gasLimit": "0xce08", + "gasPrice": "0xa98f2fe0", + "maxFeePerGas": "0xb6def202b0f4", + "maxPriorityFeePerGas": "0xaadc80", + "data": "0xee92680b2bc0569bc3f3da09f480bf73551977592ba8c6d35dfb61252044ccd69b7b02817756a04db6a62c707c8e64911decd90558ac036a710035b9ca8e452f13daf0", + "value": "0x1a", + "accessList": [ + { + "address": "0xfe6cb2C3e37532B4Ef13e79C233Ca64C7fFfCFD2", + "storageKeys": [ + "0x3f7287d0cdd0cfadcc6d18290da205685c27be85e3d12daef93a1806094cb4da", + "0x3c776b188d069ebea086ee553dd81252288e85dd97888241729f1fd7bc325afb", + "0x042759b1a75adf64c51a69af2c6adbc31be5048fe0cb67ac78a7824d4371df69", + "0x19bdc1e9a710c49b222bd23a56d135ed44d0d9ea50920b279b5182683484b42e" + ] + }, + { + "address": "0x832f5283Be3D816CF155e453F9841bDE8e7F7B4c", + "storageKeys": [ + "0x3f7287d0cdd0cfadcc6d18290da205685c27be85e3d12daef93a1806094cb4da", + "0x3c776b188d069ebea086ee553dd81252288e85dd97888241729f1fd7bc325afb", + "0x042759b1a75adf64c51a69af2c6adbc31be5048fe0cb67ac78a7824d4371df69", + "0x19bdc1e9a710c49b222bd23a56d135ed44d0d9ea50920b279b5182683484b42e" + ] + } + ], + "chainId": "0x8f57" + }, + "privateKey": "0xd735911d166a6cc3b7288e08e58d1d810440dff7199e28d035f17c5475cfcba9", + "unsignedLegacy": "0xf86581ca84a98f2fe082ce08945539b0d27740010a98894024d7bc891ba7831c891ab843ee92680b2bc0569bc3f3da09f480bf73551977592ba8c6d35dfb61252044ccd69b7b02817756a04db6a62c707c8e64911decd90558ac036a710035b9ca8e452f13daf0", + "unsignedEip155": "0xf86a81ca84a98f2fe082ce08945539b0d27740010a98894024d7bc891ba7831c891ab843ee92680b2bc0569bc3f3da09f480bf73551977592ba8c6d35dfb61252044ccd69b7b02817756a04db6a62c707c8e64911decd90558ac036a710035b9ca8e452f13daf0828f578080", + "unsignedBerlin": "0x01f901a5828f5781ca84a98f2fe082ce08945539b0d27740010a98894024d7bc891ba7831c891ab843ee92680b2bc0569bc3f3da09f480bf73551977592ba8c6d35dfb61252044ccd69b7b02817756a04db6a62c707c8e64911decd90558ac036a710035b9ca8e452f13daf0f9013af89b94fe6cb2c3e37532b4ef13e79c233ca64c7fffcfd2f884a03f7287d0cdd0cfadcc6d18290da205685c27be85e3d12daef93a1806094cb4daa03c776b188d069ebea086ee553dd81252288e85dd97888241729f1fd7bc325afba0042759b1a75adf64c51a69af2c6adbc31be5048fe0cb67ac78a7824d4371df69a019bdc1e9a710c49b222bd23a56d135ed44d0d9ea50920b279b5182683484b42ef89b94832f5283be3d816cf155e453f9841bde8e7f7b4cf884a03f7287d0cdd0cfadcc6d18290da205685c27be85e3d12daef93a1806094cb4daa03c776b188d069ebea086ee553dd81252288e85dd97888241729f1fd7bc325afba0042759b1a75adf64c51a69af2c6adbc31be5048fe0cb67ac78a7824d4371df69a019bdc1e9a710c49b222bd23a56d135ed44d0d9ea50920b279b5182683484b42e", + "unsignedLondon": "0x02f901ab828f5781ca83aadc8086b6def202b0f482ce08945539b0d27740010a98894024d7bc891ba7831c891ab843ee92680b2bc0569bc3f3da09f480bf73551977592ba8c6d35dfb61252044ccd69b7b02817756a04db6a62c707c8e64911decd90558ac036a710035b9ca8e452f13daf0f9013af89b94fe6cb2c3e37532b4ef13e79c233ca64c7fffcfd2f884a03f7287d0cdd0cfadcc6d18290da205685c27be85e3d12daef93a1806094cb4daa03c776b188d069ebea086ee553dd81252288e85dd97888241729f1fd7bc325afba0042759b1a75adf64c51a69af2c6adbc31be5048fe0cb67ac78a7824d4371df69a019bdc1e9a710c49b222bd23a56d135ed44d0d9ea50920b279b5182683484b42ef89b94832f5283be3d816cf155e453f9841bde8e7f7b4cf884a03f7287d0cdd0cfadcc6d18290da205685c27be85e3d12daef93a1806094cb4daa03c776b188d069ebea086ee553dd81252288e85dd97888241729f1fd7bc325afba0042759b1a75adf64c51a69af2c6adbc31be5048fe0cb67ac78a7824d4371df69a019bdc1e9a710c49b222bd23a56d135ed44d0d9ea50920b279b5182683484b42e", + "signedLegacy": "0xf8a881ca84a98f2fe082ce08945539b0d27740010a98894024d7bc891ba7831c891ab843ee92680b2bc0569bc3f3da09f480bf73551977592ba8c6d35dfb61252044ccd69b7b02817756a04db6a62c707c8e64911decd90558ac036a710035b9ca8e452f13daf01ca0d6fa62491249727468d0fac1e118d3bba3a1aca4fa8ccf70f0b48191ee28dcd2a07a6449ef22046b3ee78dcbb679f6cc3e0e958f45953fef0f208d4623fdde5060", + "signedEip155": "0xf8ab81ca84a98f2fe082ce08945539b0d27740010a98894024d7bc891ba7831c891ab843ee92680b2bc0569bc3f3da09f480bf73551977592ba8c6d35dfb61252044ccd69b7b02817756a04db6a62c707c8e64911decd90558ac036a710035b9ca8e452f13daf083011ed1a0c431dae73c4ea339bcb4b405e8893c214cb226988be2e3f86e9fe2f950748a54a01a37da795992fb7ab283bab65288f6ba4dee8a697e44f2643f25d5e30ca654d9", + "signedBerlin": "0x01f901e8828f5781ca84a98f2fe082ce08945539b0d27740010a98894024d7bc891ba7831c891ab843ee92680b2bc0569bc3f3da09f480bf73551977592ba8c6d35dfb61252044ccd69b7b02817756a04db6a62c707c8e64911decd90558ac036a710035b9ca8e452f13daf0f9013af89b94fe6cb2c3e37532b4ef13e79c233ca64c7fffcfd2f884a03f7287d0cdd0cfadcc6d18290da205685c27be85e3d12daef93a1806094cb4daa03c776b188d069ebea086ee553dd81252288e85dd97888241729f1fd7bc325afba0042759b1a75adf64c51a69af2c6adbc31be5048fe0cb67ac78a7824d4371df69a019bdc1e9a710c49b222bd23a56d135ed44d0d9ea50920b279b5182683484b42ef89b94832f5283be3d816cf155e453f9841bde8e7f7b4cf884a03f7287d0cdd0cfadcc6d18290da205685c27be85e3d12daef93a1806094cb4daa03c776b188d069ebea086ee553dd81252288e85dd97888241729f1fd7bc325afba0042759b1a75adf64c51a69af2c6adbc31be5048fe0cb67ac78a7824d4371df69a019bdc1e9a710c49b222bd23a56d135ed44d0d9ea50920b279b5182683484b42e01a02b095db07b5ea8f065f4f435584402fb7730fe7fca5b789240933e301180b74ea002db343bc2c8222cfb725ebbd52ba8b1b3803306be88e25c1f6dffa16d80575b", + "signedLondon": "0x02f901ee828f5781ca83aadc8086b6def202b0f482ce08945539b0d27740010a98894024d7bc891ba7831c891ab843ee92680b2bc0569bc3f3da09f480bf73551977592ba8c6d35dfb61252044ccd69b7b02817756a04db6a62c707c8e64911decd90558ac036a710035b9ca8e452f13daf0f9013af89b94fe6cb2c3e37532b4ef13e79c233ca64c7fffcfd2f884a03f7287d0cdd0cfadcc6d18290da205685c27be85e3d12daef93a1806094cb4daa03c776b188d069ebea086ee553dd81252288e85dd97888241729f1fd7bc325afba0042759b1a75adf64c51a69af2c6adbc31be5048fe0cb67ac78a7824d4371df69a019bdc1e9a710c49b222bd23a56d135ed44d0d9ea50920b279b5182683484b42ef89b94832f5283be3d816cf155e453f9841bde8e7f7b4cf884a03f7287d0cdd0cfadcc6d18290da205685c27be85e3d12daef93a1806094cb4daa03c776b188d069ebea086ee553dd81252288e85dd97888241729f1fd7bc325afba0042759b1a75adf64c51a69af2c6adbc31be5048fe0cb67ac78a7824d4371df69a019bdc1e9a710c49b222bd23a56d135ed44d0d9ea50920b279b5182683484b42e01a0c215cbfc101481356dfe98ad23d60186c05a0ed15f3d74f1deedc7f1fe4dfe0aa05ca25ede5de59283cf790b50316b7a183075832a4ba96446692ba34c2235a32c", + "signatureLegacy": { + "r": "0xd6fa62491249727468d0fac1e118d3bba3a1aca4fa8ccf70f0b48191ee28dcd2", + "s": "0x7a6449ef22046b3ee78dcbb679f6cc3e0e958f45953fef0f208d4623fdde5060", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0xc431dae73c4ea339bcb4b405e8893c214cb226988be2e3f86e9fe2f950748a54", + "s": "0x1a37da795992fb7ab283bab65288f6ba4dee8a697e44f2643f25d5e30ca654d9", + "v": "0x11ed1" + }, + "signatureBerlin": { + "r": "0x2b095db07b5ea8f065f4f435584402fb7730fe7fca5b789240933e301180b74e", + "s": "0x02db343bc2c8222cfb725ebbd52ba8b1b3803306be88e25c1f6dffa16d80575b", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xc215cbfc101481356dfe98ad23d60186c05a0ed15f3d74f1deedc7f1fe4dfe0a", + "s": "0x5ca25ede5de59283cf790b50316b7a183075832a4ba96446692ba34c2235a32c", + "v": "0x1" + } + }, + { + "name": "random-65", + "transaction": { + "to": "0x68c3a6aDe6160bB4d252B0ea8d223dA0951a2063", + "nonce": 472, + "gasLimit": "0x5def6e", + "gasPrice": "0x74eaf6c0cc", + "maxFeePerGas": "0xfe5088f3cad2", + "maxPriorityFeePerGas": "0xa480", + "data": "0x7fd0f819e99e145c44de537c87b550115a1b2868b263b3c1bf95740b190c18c8995e01f9570c542235f8af4ef3da155313886b30008504cfbbbd43a49123434a373fd66bcebc52bf350fa404ac4d1c5c50e2b53afb0a011bd471aea1417da3ca727efce00c4dd0ed4c533e6396c5113ecba0ce46adc69f35e8", + "value": "0x1673", + "accessList": [ + { + "address": "0x4D979db5bEE701133889ea708339B375fb56831b", + "storageKeys": [ + "0x182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564" + ] + }, + { + "address": "0x5C9617f35247456fbcAF1aB61B432B5e729010e8", + "storageKeys": [ + "0x182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564" + ] + }, + { + "address": "0x310eb4f10aEfd6269e5385375572494a24ECB360", + "storageKeys": [ + "0x182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564" + ] + }, + { + "address": "0xDeCbfbaA3737177d2a7C7Dc27f14A79491973946", + "storageKeys": [ + "0x182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564" + ] + } + ], + "chainId": "0xa8a896edd1" + }, + "privateKey": "0x0196beebe69b390cc377f38c830788cc31eae008a54fbec9894f004d66fa8717", + "unsignedLegacy": "0xf8a08201d88574eaf6c0cc835def6e9468c3a6ade6160bb4d252b0ea8d223da0951a2063821673b8797fd0f819e99e145c44de537c87b550115a1b2868b263b3c1bf95740b190c18c8995e01f9570c542235f8af4ef3da155313886b30008504cfbbbd43a49123434a373fd66bcebc52bf350fa404ac4d1c5c50e2b53afb0a011bd471aea1417da3ca727efce00c4dd0ed4c533e6396c5113ecba0ce46adc69f35e8", + "unsignedEip155": "0xf8a88201d88574eaf6c0cc835def6e9468c3a6ade6160bb4d252b0ea8d223da0951a2063821673b8797fd0f819e99e145c44de537c87b550115a1b2868b263b3c1bf95740b190c18c8995e01f9570c542235f8af4ef3da155313886b30008504cfbbbd43a49123434a373fd66bcebc52bf350fa404ac4d1c5c50e2b53afb0a011bd471aea1417da3ca727efce00c4dd0ed4c533e6396c5113ecba0ce46adc69f35e885a8a896edd18080", + "unsignedBerlin": "0x01f9018885a8a896edd18201d88574eaf6c0cc835def6e9468c3a6ade6160bb4d252b0ea8d223da0951a2063821673b8797fd0f819e99e145c44de537c87b550115a1b2868b263b3c1bf95740b190c18c8995e01f9570c542235f8af4ef3da155313886b30008504cfbbbd43a49123434a373fd66bcebc52bf350fa404ac4d1c5c50e2b53afb0a011bd471aea1417da3ca727efce00c4dd0ed4c533e6396c5113ecba0ce46adc69f35e8f8e0f7944d979db5bee701133889ea708339b375fb56831be1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564f7945c9617f35247456fbcaf1ab61b432b5e729010e8e1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564f794310eb4f10aefd6269e5385375572494a24ecb360e1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564f794decbfbaa3737177d2a7c7dc27f14a79491973946e1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564", + "unsignedLondon": "0x02f9018c85a8a896edd18201d882a48086fe5088f3cad2835def6e9468c3a6ade6160bb4d252b0ea8d223da0951a2063821673b8797fd0f819e99e145c44de537c87b550115a1b2868b263b3c1bf95740b190c18c8995e01f9570c542235f8af4ef3da155313886b30008504cfbbbd43a49123434a373fd66bcebc52bf350fa404ac4d1c5c50e2b53afb0a011bd471aea1417da3ca727efce00c4dd0ed4c533e6396c5113ecba0ce46adc69f35e8f8e0f7944d979db5bee701133889ea708339b375fb56831be1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564f7945c9617f35247456fbcaf1ab61b432b5e729010e8e1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564f794310eb4f10aefd6269e5385375572494a24ecb360e1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564f794decbfbaa3737177d2a7c7dc27f14a79491973946e1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564", + "signedLegacy": "0xf8e38201d88574eaf6c0cc835def6e9468c3a6ade6160bb4d252b0ea8d223da0951a2063821673b8797fd0f819e99e145c44de537c87b550115a1b2868b263b3c1bf95740b190c18c8995e01f9570c542235f8af4ef3da155313886b30008504cfbbbd43a49123434a373fd66bcebc52bf350fa404ac4d1c5c50e2b53afb0a011bd471aea1417da3ca727efce00c4dd0ed4c533e6396c5113ecba0ce46adc69f35e81ba06f5a397896cacc9fdcfc309d6db7804d956af9b3877c809f5844e0770b40a678a052a2a350241383d880c6f22e32c676e89cccb505029b1878a712dda6ecb17bb9", + "signedEip155": "0xf8e98201d88574eaf6c0cc835def6e9468c3a6ade6160bb4d252b0ea8d223da0951a2063821673b8797fd0f819e99e145c44de537c87b550115a1b2868b263b3c1bf95740b190c18c8995e01f9570c542235f8af4ef3da155313886b30008504cfbbbd43a49123434a373fd66bcebc52bf350fa404ac4d1c5c50e2b53afb0a011bd471aea1417da3ca727efce00c4dd0ed4c533e6396c5113ecba0ce46adc69f35e8860151512ddbc5a0dfc9a95aa99b9ab290111a6d5bc1e4ddb57839f32fb8492ee3653b06d769edd0a0233a48bf6e77172ebee9657c77c263c3a0504b704d4d4e415a6baf326fefd9ed", + "signedBerlin": "0x01f901cb85a8a896edd18201d88574eaf6c0cc835def6e9468c3a6ade6160bb4d252b0ea8d223da0951a2063821673b8797fd0f819e99e145c44de537c87b550115a1b2868b263b3c1bf95740b190c18c8995e01f9570c542235f8af4ef3da155313886b30008504cfbbbd43a49123434a373fd66bcebc52bf350fa404ac4d1c5c50e2b53afb0a011bd471aea1417da3ca727efce00c4dd0ed4c533e6396c5113ecba0ce46adc69f35e8f8e0f7944d979db5bee701133889ea708339b375fb56831be1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564f7945c9617f35247456fbcaf1ab61b432b5e729010e8e1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564f794310eb4f10aefd6269e5385375572494a24ecb360e1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564f794decbfbaa3737177d2a7c7dc27f14a79491973946e1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e56480a042910f829ff90848c079361d939a3c0fb795b76919a54032c2d9f31634b4187fa046c0393cee7f0a10a968b3477af968e251e67e5ad03e2a9e6f741d1ea75277ac", + "signedLondon": "0x02f901cf85a8a896edd18201d882a48086fe5088f3cad2835def6e9468c3a6ade6160bb4d252b0ea8d223da0951a2063821673b8797fd0f819e99e145c44de537c87b550115a1b2868b263b3c1bf95740b190c18c8995e01f9570c542235f8af4ef3da155313886b30008504cfbbbd43a49123434a373fd66bcebc52bf350fa404ac4d1c5c50e2b53afb0a011bd471aea1417da3ca727efce00c4dd0ed4c533e6396c5113ecba0ce46adc69f35e8f8e0f7944d979db5bee701133889ea708339b375fb56831be1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564f7945c9617f35247456fbcaf1ab61b432b5e729010e8e1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564f794310eb4f10aefd6269e5385375572494a24ecb360e1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e564f794decbfbaa3737177d2a7c7dc27f14a79491973946e1a0182e6573d2e5f00a759cc4140e2d37298eb6dfeb8f41a0ff205c437012c2e56401a08b330b5fb43ebfd218ee8fdb6421da9a929b511cc6e0f4d66268bb5d75da7805a04e3c38fdc5bb0958e25af21aea4fcfe7cbd84b44e243952f0f0143a1a2c1c096", + "signatureLegacy": { + "r": "0x6f5a397896cacc9fdcfc309d6db7804d956af9b3877c809f5844e0770b40a678", + "s": "0x52a2a350241383d880c6f22e32c676e89cccb505029b1878a712dda6ecb17bb9", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xdfc9a95aa99b9ab290111a6d5bc1e4ddb57839f32fb8492ee3653b06d769edd0", + "s": "0x233a48bf6e77172ebee9657c77c263c3a0504b704d4d4e415a6baf326fefd9ed", + "v": "0x151512ddbc5" + }, + "signatureBerlin": { + "r": "0x42910f829ff90848c079361d939a3c0fb795b76919a54032c2d9f31634b4187f", + "s": "0x46c0393cee7f0a10a968b3477af968e251e67e5ad03e2a9e6f741d1ea75277ac", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x8b330b5fb43ebfd218ee8fdb6421da9a929b511cc6e0f4d66268bb5d75da7805", + "s": "0x4e3c38fdc5bb0958e25af21aea4fcfe7cbd84b44e243952f0f0143a1a2c1c096", + "v": "0x1" + } + }, + { + "name": "random-67", + "transaction": { + "to": "0x89A700BB31E28153A4904E7Ae0A99f74dDc126e0", + "nonce": 930, + "gasLimit": "0x429e45d2", + "gasPrice": "0x3237", + "maxFeePerGas": "0xb01f2238", + "maxPriorityFeePerGas": "0x0c58", + "data": "0x044bb9027fd7df7777bd14b1747cc7d121f48ab7aa6ffde96b131abd03fdf87e49dfcfb1c1106167e237c60ff3c4d7f0b9e0e444cb3144452a48e97c8289d4195a4ae3b6b0e333838cf5a91b0c5783e1e873d8849add7b6ec0973467e062cbd9a71fab62154c2109b4", + "value": "0x94855320", + "accessList": [ + { + "address": "0x79C87d509790ba8A99E257dEe7B1C09a84913a27", + "storageKeys": [ + "0xe738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471f", + "0x5689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573f", + "0x8b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698b" + ] + }, + { + "address": "0xa7613fCdD57d826382B56A2d673523b17A9dB066", + "storageKeys": [ + "0xe738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471f", + "0x5689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573f", + "0x8b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698b" + ] + }, + { + "address": "0x8869d6A468767d70E03E9C4a02382700D5Cdd48F", + "storageKeys": [ + "0xe738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471f", + "0x5689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573f", + "0x8b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698b" + ] + }, + { + "address": "0x6679ED71c578838654D6BEB1569e8116E9Ec15F8", + "storageKeys": [ + "0xe738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471f", + "0x5689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573f", + "0x8b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698b" + ] + } + ], + "chainId": "0x576d" + }, + "privateKey": "0xd4a5c39efa31b07c0708005fd7d75ffe47282a9219dbca69a0c393869c199fa1", + "unsignedLegacy": "0xf8908203a282323784429e45d29489a700bb31e28153a4904e7ae0a99f74ddc126e08494855320b869044bb9027fd7df7777bd14b1747cc7d121f48ab7aa6ffde96b131abd03fdf87e49dfcfb1c1106167e237c60ff3c4d7f0b9e0e444cb3144452a48e97c8289d4195a4ae3b6b0e333838cf5a91b0c5783e1e873d8849add7b6ec0973467e062cbd9a71fab62154c2109b4", + "unsignedEip155": "0xf8958203a282323784429e45d29489a700bb31e28153a4904e7ae0a99f74ddc126e08494855320b869044bb9027fd7df7777bd14b1747cc7d121f48ab7aa6ffde96b131abd03fdf87e49dfcfb1c1106167e237c60ff3c4d7f0b9e0e444cb3144452a48e97c8289d4195a4ae3b6b0e333838cf5a91b0c5783e1e873d8849add7b6ec0973467e062cbd9a71fab62154c2109b482576d8080", + "unsignedBerlin": "0x01f9028682576d8203a282323784429e45d29489a700bb31e28153a4904e7ae0a99f74ddc126e08494855320b869044bb9027fd7df7777bd14b1747cc7d121f48ab7aa6ffde96b131abd03fdf87e49dfcfb1c1106167e237c60ff3c4d7f0b9e0e444cb3144452a48e97c8289d4195a4ae3b6b0e333838cf5a91b0c5783e1e873d8849add7b6ec0973467e062cbd9a71fab62154c2109b4f901f0f87a9479c87d509790ba8a99e257dee7b1c09a84913a27f863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698bf87a94a7613fcdd57d826382b56a2d673523b17a9db066f863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698bf87a948869d6a468767d70e03e9c4a02382700d5cdd48ff863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698bf87a946679ed71c578838654d6beb1569e8116e9ec15f8f863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698b", + "unsignedLondon": "0x02f9028b82576d8203a2820c5884b01f223884429e45d29489a700bb31e28153a4904e7ae0a99f74ddc126e08494855320b869044bb9027fd7df7777bd14b1747cc7d121f48ab7aa6ffde96b131abd03fdf87e49dfcfb1c1106167e237c60ff3c4d7f0b9e0e444cb3144452a48e97c8289d4195a4ae3b6b0e333838cf5a91b0c5783e1e873d8849add7b6ec0973467e062cbd9a71fab62154c2109b4f901f0f87a9479c87d509790ba8a99e257dee7b1c09a84913a27f863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698bf87a94a7613fcdd57d826382b56a2d673523b17a9db066f863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698bf87a948869d6a468767d70e03e9c4a02382700d5cdd48ff863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698bf87a946679ed71c578838654d6beb1569e8116e9ec15f8f863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698b", + "signedLegacy": "0xf8d38203a282323784429e45d29489a700bb31e28153a4904e7ae0a99f74ddc126e08494855320b869044bb9027fd7df7777bd14b1747cc7d121f48ab7aa6ffde96b131abd03fdf87e49dfcfb1c1106167e237c60ff3c4d7f0b9e0e444cb3144452a48e97c8289d4195a4ae3b6b0e333838cf5a91b0c5783e1e873d8849add7b6ec0973467e062cbd9a71fab62154c2109b41ca0987cbad27d43c34ed15dedcc1c1d70497f50bb09c2805afbcd3e1a2413a53846a0229576ba9a603657fedca5696c545cc4b75907d7ccc71efe572fa4b8d367f0cc", + "signedEip155": "0xf8d58203a282323784429e45d29489a700bb31e28153a4904e7ae0a99f74ddc126e08494855320b869044bb9027fd7df7777bd14b1747cc7d121f48ab7aa6ffde96b131abd03fdf87e49dfcfb1c1106167e237c60ff3c4d7f0b9e0e444cb3144452a48e97c8289d4195a4ae3b6b0e333838cf5a91b0c5783e1e873d8849add7b6ec0973467e062cbd9a71fab62154c2109b482aefda0fc1b5b23bb933dc5ae3ef80353742eeb006ec5f311d1fcebff79571a99b1a20aa03f5c984ac4ebf149396187ad5520a3d1f6e1409835dc3270400262deaf451087", + "signedBerlin": "0x01f902c982576d8203a282323784429e45d29489a700bb31e28153a4904e7ae0a99f74ddc126e08494855320b869044bb9027fd7df7777bd14b1747cc7d121f48ab7aa6ffde96b131abd03fdf87e49dfcfb1c1106167e237c60ff3c4d7f0b9e0e444cb3144452a48e97c8289d4195a4ae3b6b0e333838cf5a91b0c5783e1e873d8849add7b6ec0973467e062cbd9a71fab62154c2109b4f901f0f87a9479c87d509790ba8a99e257dee7b1c09a84913a27f863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698bf87a94a7613fcdd57d826382b56a2d673523b17a9db066f863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698bf87a948869d6a468767d70e03e9c4a02382700d5cdd48ff863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698bf87a946679ed71c578838654d6beb1569e8116e9ec15f8f863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698b80a0fcd80a65ee3afd07e36b5535e6f849274ac7c51d9fcec73d28d2ae2a6192b3f9a06437810dc8cd94a9d00b4abd1c500a4dfaa01381e2b4c82a9a4ac1eda735cf19", + "signedLondon": "0x02f902ce82576d8203a2820c5884b01f223884429e45d29489a700bb31e28153a4904e7ae0a99f74ddc126e08494855320b869044bb9027fd7df7777bd14b1747cc7d121f48ab7aa6ffde96b131abd03fdf87e49dfcfb1c1106167e237c60ff3c4d7f0b9e0e444cb3144452a48e97c8289d4195a4ae3b6b0e333838cf5a91b0c5783e1e873d8849add7b6ec0973467e062cbd9a71fab62154c2109b4f901f0f87a9479c87d509790ba8a99e257dee7b1c09a84913a27f863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698bf87a94a7613fcdd57d826382b56a2d673523b17a9db066f863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698bf87a948869d6a468767d70e03e9c4a02382700d5cdd48ff863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698bf87a946679ed71c578838654d6beb1569e8116e9ec15f8f863a0e738c0dadcf9238c561501f1c7135483bf477f7052c596fac359ffbaae6b471fa05689e65d939dd50612ad80b0229a9698f7a067613292c883720b994cb924573fa08b7af9eab406250e2fc6f17d7039ba448f2a6a0846d69c042afcb9f6f6d1698b01a056ec9993dcd6ac4550cc0ccf4ab7b8a87fe24c722fa3da5dd5089e7b344d7dc1a04013bd0965c9692ed6e6bcad454530c96db49f95450d4c3a1c4d20739c498ca5", + "signatureLegacy": { + "r": "0x987cbad27d43c34ed15dedcc1c1d70497f50bb09c2805afbcd3e1a2413a53846", + "s": "0x229576ba9a603657fedca5696c545cc4b75907d7ccc71efe572fa4b8d367f0cc", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0xfc1b5b23bb933dc5ae3ef80353742eeb006ec5f311d1fcebff79571a99b1a20a", + "s": "0x3f5c984ac4ebf149396187ad5520a3d1f6e1409835dc3270400262deaf451087", + "v": "0xaefd" + }, + "signatureBerlin": { + "r": "0xfcd80a65ee3afd07e36b5535e6f849274ac7c51d9fcec73d28d2ae2a6192b3f9", + "s": "0x6437810dc8cd94a9d00b4abd1c500a4dfaa01381e2b4c82a9a4ac1eda735cf19", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x56ec9993dcd6ac4550cc0ccf4ab7b8a87fe24c722fa3da5dd5089e7b344d7dc1", + "s": "0x4013bd0965c9692ed6e6bcad454530c96db49f95450d4c3a1c4d20739c498ca5", + "v": "0x1" + } + }, + { + "name": "random-68", + "transaction": { + "to": "0x9524ce938E047293438C52e03b324352D34593C0", + "nonce": 280, + "gasLimit": "0xb4939d7e", + "gasPrice": "0x0d", + "maxFeePerGas": "0x824e95a56e47", + "maxPriorityFeePerGas": "0x8ae4", + "data": "0x9440450061562557959483782307e321335e3aea1faee312302a887999b819faec194991d2457160559cf9c9713d3ddbcf853cb95641746ae12c408c77ef070063842b84a3", + "value": "0x99988435", + "accessList": [], + "chainId": "0x9aa6034b" + }, + "privateKey": "0xf9d4cd92848833fbcb50303589ea325e170fd069b2bd70372ec91ea345352484", + "unsignedLegacy": "0xf86a8201180d84b4939d7e949524ce938e047293438c52e03b324352d34593c08499988435b8459440450061562557959483782307e321335e3aea1faee312302a887999b819faec194991d2457160559cf9c9713d3ddbcf853cb95641746ae12c408c77ef070063842b84a3", + "unsignedEip155": "0xf8718201180d84b4939d7e949524ce938e047293438c52e03b324352d34593c08499988435b8459440450061562557959483782307e321335e3aea1faee312302a887999b819faec194991d2457160559cf9c9713d3ddbcf853cb95641746ae12c408c77ef070063842b84a3849aa6034b8080", + "unsignedBerlin": "0x01f870849aa6034b8201180d84b4939d7e949524ce938e047293438c52e03b324352d34593c08499988435b8459440450061562557959483782307e321335e3aea1faee312302a887999b819faec194991d2457160559cf9c9713d3ddbcf853cb95641746ae12c408c77ef070063842b84a3c0", + "unsignedLondon": "0x02f879849aa6034b820118828ae486824e95a56e4784b4939d7e949524ce938e047293438c52e03b324352d34593c08499988435b8459440450061562557959483782307e321335e3aea1faee312302a887999b819faec194991d2457160559cf9c9713d3ddbcf853cb95641746ae12c408c77ef070063842b84a3c0", + "signedLegacy": "0xf8ad8201180d84b4939d7e949524ce938e047293438c52e03b324352d34593c08499988435b8459440450061562557959483782307e321335e3aea1faee312302a887999b819faec194991d2457160559cf9c9713d3ddbcf853cb95641746ae12c408c77ef070063842b84a31ba03d738eb1eaab36c57136eff96da0a2aa545b547b73cd212e6b9e148568496736a071fe1214a6803882b844a36bb36b165babc3284dbb005f7bb6d5f637f5aef6c6", + "signedEip155": "0xf8b28201180d84b4939d7e949524ce938e047293438c52e03b324352d34593c08499988435b8459440450061562557959483782307e321335e3aea1faee312302a887999b819faec194991d2457160559cf9c9713d3ddbcf853cb95641746ae12c408c77ef070063842b84a38501354c06baa0e615d28dabd7b6ffa7af6de91173e81dfbcaf3991fa5bb71161de35b372ea538a07c3d89c52e7c104fd1e0fab20c87356c1edb6907694c0f6dd078a0ea79c06302", + "signedBerlin": "0x01f8b3849aa6034b8201180d84b4939d7e949524ce938e047293438c52e03b324352d34593c08499988435b8459440450061562557959483782307e321335e3aea1faee312302a887999b819faec194991d2457160559cf9c9713d3ddbcf853cb95641746ae12c408c77ef070063842b84a3c080a046ab3b0f895704ccae052f6ff4cc972e4ce081e27cb9acd8e77d259abc79da72a0270996e0ac119aac883a2e7ba7a6f5f4ecc0d1ddae17d07d81cc04e5dfaacb8e", + "signedLondon": "0x02f8bc849aa6034b820118828ae486824e95a56e4784b4939d7e949524ce938e047293438c52e03b324352d34593c08499988435b8459440450061562557959483782307e321335e3aea1faee312302a887999b819faec194991d2457160559cf9c9713d3ddbcf853cb95641746ae12c408c77ef070063842b84a3c001a008e6395d2abf034bccc98cc9ac235bf4cd5cf17e45f8baee6174ed337c94c0a0a049ab1b9429e79832042302ca14c1cd6e431d8f390ed670ec096e53652d4bd192", + "signatureLegacy": { + "r": "0x3d738eb1eaab36c57136eff96da0a2aa545b547b73cd212e6b9e148568496736", + "s": "0x71fe1214a6803882b844a36bb36b165babc3284dbb005f7bb6d5f637f5aef6c6", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xe615d28dabd7b6ffa7af6de91173e81dfbcaf3991fa5bb71161de35b372ea538", + "s": "0x7c3d89c52e7c104fd1e0fab20c87356c1edb6907694c0f6dd078a0ea79c06302", + "v": "0x1354c06ba" + }, + "signatureBerlin": { + "r": "0x46ab3b0f895704ccae052f6ff4cc972e4ce081e27cb9acd8e77d259abc79da72", + "s": "0x270996e0ac119aac883a2e7ba7a6f5f4ecc0d1ddae17d07d81cc04e5dfaacb8e", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x08e6395d2abf034bccc98cc9ac235bf4cd5cf17e45f8baee6174ed337c94c0a0", + "s": "0x49ab1b9429e79832042302ca14c1cd6e431d8f390ed670ec096e53652d4bd192", + "v": "0x1" + } + }, + { + "name": "random-69", + "transaction": { + "to": "0xDB6B9cee3B75D2f57Ab542C5C2b54A1f138F622A", + "nonce": 157, + "gasLimit": "0xca819420", + "gasPrice": "0xa401f8", + "maxFeePerGas": "0x32247e55", + "maxPriorityFeePerGas": "0x92", + "data": "0x039a55ffd8579f0a7f93", + "value": "0xde5f1bf5", + "accessList": [ + { + "address": "0x42d315226060386Ed14fB1a1E31022eB9c7c8291", + "storageKeys": [ + "0x2c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3", + "0xeb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54", + "0xce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f8" + ] + }, + { + "address": "0xEdEb4505Fd64BC9d450F802127d74cc9a6823d57", + "storageKeys": [ + "0x2c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3", + "0xeb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54", + "0xce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f8" + ] + }, + { + "address": "0xB3D4489b9Ab879e8Ec8AcCC76fA5434399Dca4Cc", + "storageKeys": [ + "0x2c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3", + "0xeb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54", + "0xce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f8" + ] + } + ], + "chainId": "0x0b337151fa" + }, + "privateKey": "0x10ada5023bdd824518b68d26baa46978e389d86ffce76fc865b6c0beab0c26b7", + "unsignedLegacy": "0xf0819d83a401f884ca81942094db6b9cee3b75d2f57ab542c5c2b54a1f138f622a84de5f1bf58a039a55ffd8579f0a7f93", + "unsignedEip155": "0xf838819d83a401f884ca81942094db6b9cee3b75d2f57ab542c5c2b54a1f138f622a84de5f1bf58a039a55ffd8579f0a7f93850b337151fa8080", + "unsignedBerlin": "0x01f901ad850b337151fa819d83a401f884ca81942094db6b9cee3b75d2f57ab542c5c2b54a1f138f622a84de5f1bf58a039a55ffd8579f0a7f93f90174f87a9442d315226060386ed14fb1a1e31022eb9c7c8291f863a02c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3a0eb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54a0ce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f8f87a94edeb4505fd64bc9d450f802127d74cc9a6823d57f863a02c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3a0eb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54a0ce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f8f87a94b3d4489b9ab879e8ec8accc76fa5434399dca4ccf863a02c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3a0eb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54a0ce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f8", + "unsignedLondon": "0x02f901b0850b337151fa819d81928432247e5584ca81942094db6b9cee3b75d2f57ab542c5c2b54a1f138f622a84de5f1bf58a039a55ffd8579f0a7f93f90174f87a9442d315226060386ed14fb1a1e31022eb9c7c8291f863a02c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3a0eb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54a0ce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f8f87a94edeb4505fd64bc9d450f802127d74cc9a6823d57f863a02c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3a0eb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54a0ce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f8f87a94b3d4489b9ab879e8ec8accc76fa5434399dca4ccf863a02c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3a0eb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54a0ce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f8", + "signedLegacy": "0xf873819d83a401f884ca81942094db6b9cee3b75d2f57ab542c5c2b54a1f138f622a84de5f1bf58a039a55ffd8579f0a7f931ca0f32073c2a636a8493cd172998730e6c50cfc6f5af645053d4a543c5b0d25ed93a0186200c2a4cf61d242554e15a37f296ba802ba416433ce2d241a82a796e12ef5", + "signedEip155": "0xf878819d83a401f884ca81942094db6b9cee3b75d2f57ab542c5c2b54a1f138f622a84de5f1bf58a039a55ffd8579f0a7f93851666e2a417a0980818e9f5f613d3dc19c737b45e4d583aa2e7dc39117e73d25f4973e8b5affba02ce6816ae4b00206466e5cf39e809d11c0b978d0a6c49137753c89ea235e6c24", + "signedBerlin": "0x01f901f0850b337151fa819d83a401f884ca81942094db6b9cee3b75d2f57ab542c5c2b54a1f138f622a84de5f1bf58a039a55ffd8579f0a7f93f90174f87a9442d315226060386ed14fb1a1e31022eb9c7c8291f863a02c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3a0eb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54a0ce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f8f87a94edeb4505fd64bc9d450f802127d74cc9a6823d57f863a02c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3a0eb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54a0ce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f8f87a94b3d4489b9ab879e8ec8accc76fa5434399dca4ccf863a02c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3a0eb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54a0ce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f801a019c981e8b208dac380aa95263527bb24bef0d5a46c6ff446b3fb92b97bd9e232a07128ea728ace5cc7f99875efd1b1ece58d83f5b77f29a7580aefdfa2086c939a", + "signedLondon": "0x02f901f3850b337151fa819d81928432247e5584ca81942094db6b9cee3b75d2f57ab542c5c2b54a1f138f622a84de5f1bf58a039a55ffd8579f0a7f93f90174f87a9442d315226060386ed14fb1a1e31022eb9c7c8291f863a02c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3a0eb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54a0ce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f8f87a94edeb4505fd64bc9d450f802127d74cc9a6823d57f863a02c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3a0eb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54a0ce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f8f87a94b3d4489b9ab879e8ec8accc76fa5434399dca4ccf863a02c57a1f776da58e57e209e7bb6f234813ed04147c8e1ba4dc24e1fbd1f405fe3a0eb3a68ea63c796c5afca5b52e14d41456ce1c41c3d581d10c26cb759d4a47f54a0ce1a9368f438e2a81977f51d936b6bd6324d537b3702dced5b9d44b7274379f801a0bd7a271f24c49c5f7648cb93e73f20be83451c14509e424dcf6edebc21388398a03a43018abf91791894d1b0422ddaab2d2316433f87a2e7ea8233b5dfa678cc0d", + "signatureLegacy": { + "r": "0xf32073c2a636a8493cd172998730e6c50cfc6f5af645053d4a543c5b0d25ed93", + "s": "0x186200c2a4cf61d242554e15a37f296ba802ba416433ce2d241a82a796e12ef5", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x980818e9f5f613d3dc19c737b45e4d583aa2e7dc39117e73d25f4973e8b5affb", + "s": "0x2ce6816ae4b00206466e5cf39e809d11c0b978d0a6c49137753c89ea235e6c24", + "v": "0x1666e2a417" + }, + "signatureBerlin": { + "r": "0x19c981e8b208dac380aa95263527bb24bef0d5a46c6ff446b3fb92b97bd9e232", + "s": "0x7128ea728ace5cc7f99875efd1b1ece58d83f5b77f29a7580aefdfa2086c939a", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xbd7a271f24c49c5f7648cb93e73f20be83451c14509e424dcf6edebc21388398", + "s": "0x3a43018abf91791894d1b0422ddaab2d2316433f87a2e7ea8233b5dfa678cc0d", + "v": "0x1" + } + }, + { + "name": "random-74", + "transaction": { + "to": "0xcEB734369e4A893a10E1dB8aF36Ac91487260de2", + "nonce": 223, + "gasLimit": "0x2c88b8c9c2", + "gasPrice": "0x587bb8", + "maxFeePerGas": "0xa8b0d55066a5a1", + "maxPriorityFeePerGas": "0x9a", + "data": "0x536577acdb20eb21adec1c95d34a56660027a358784598f47b", + "value": "0x6cf16f303b", + "accessList": [ + { + "address": "0xe43aEc2BB451dc4C289eb890dd242d5Bc5f6d0cC", + "storageKeys": [ + "0xe6597d2ea26a458922c08275eb23909ccfca4daf11662e5dd0b8ba95f1c666da", + "0x449afb4fa7c7a806ebced6ce2968e6e635e80a318e4a1371e8938a417feb93b2", + "0x6381c81f0d15db370860feeba70f3953279dba52f02a3a04612484aefa84f316", + "0x63d9e5227e1d6c937b4b44d64d9e02720e67ef020ebab90f8df39c3b8e47b04e" + ] + } + ], + "chainId": "0xd5cb" + }, + "privateKey": "0xe252164de96a27f2c060b4d4a59107f2806640ef8eb40ace87b08ffe0e7aefbe", + "unsignedLegacy": "0xf84181df83587bb8852c88b8c9c294ceb734369e4a893a10e1db8af36ac91487260de2856cf16f303b99536577acdb20eb21adec1c95d34a56660027a358784598f47b", + "unsignedEip155": "0xf84681df83587bb8852c88b8c9c294ceb734369e4a893a10e1db8af36ac91487260de2856cf16f303b99536577acdb20eb21adec1c95d34a56660027a358784598f47b82d5cb8080", + "unsignedBerlin": "0x01f8e382d5cb81df83587bb8852c88b8c9c294ceb734369e4a893a10e1db8af36ac91487260de2856cf16f303b99536577acdb20eb21adec1c95d34a56660027a358784598f47bf89df89b94e43aec2bb451dc4c289eb890dd242d5bc5f6d0ccf884a0e6597d2ea26a458922c08275eb23909ccfca4daf11662e5dd0b8ba95f1c666daa0449afb4fa7c7a806ebced6ce2968e6e635e80a318e4a1371e8938a417feb93b2a06381c81f0d15db370860feeba70f3953279dba52f02a3a04612484aefa84f316a063d9e5227e1d6c937b4b44d64d9e02720e67ef020ebab90f8df39c3b8e47b04e", + "unsignedLondon": "0x02f8e982d5cb81df819a87a8b0d55066a5a1852c88b8c9c294ceb734369e4a893a10e1db8af36ac91487260de2856cf16f303b99536577acdb20eb21adec1c95d34a56660027a358784598f47bf89df89b94e43aec2bb451dc4c289eb890dd242d5bc5f6d0ccf884a0e6597d2ea26a458922c08275eb23909ccfca4daf11662e5dd0b8ba95f1c666daa0449afb4fa7c7a806ebced6ce2968e6e635e80a318e4a1371e8938a417feb93b2a06381c81f0d15db370860feeba70f3953279dba52f02a3a04612484aefa84f316a063d9e5227e1d6c937b4b44d64d9e02720e67ef020ebab90f8df39c3b8e47b04e", + "signedLegacy": "0xf88481df83587bb8852c88b8c9c294ceb734369e4a893a10e1db8af36ac91487260de2856cf16f303b99536577acdb20eb21adec1c95d34a56660027a358784598f47b1ca0713955d8f00f1a05bd6608139661b71c376a9e16660d4edd617699669a679831a03b8e5544dadad730744896cf9d2eb0a2416c3d97b63a41ffa58601a280a154e1", + "signedEip155": "0xf88781df83587bb8852c88b8c9c294ceb734369e4a893a10e1db8af36ac91487260de2856cf16f303b99536577acdb20eb21adec1c95d34a56660027a358784598f47b8301abbaa01487e3f1fb264e38a70baf273a4583016c7ec1ff9ca632e8d710ce6ae78126ada04443666de576afbecc34b6639466f79e52737a6f77418071f1be8f73ed32bf00", + "signedBerlin": "0x01f9012682d5cb81df83587bb8852c88b8c9c294ceb734369e4a893a10e1db8af36ac91487260de2856cf16f303b99536577acdb20eb21adec1c95d34a56660027a358784598f47bf89df89b94e43aec2bb451dc4c289eb890dd242d5bc5f6d0ccf884a0e6597d2ea26a458922c08275eb23909ccfca4daf11662e5dd0b8ba95f1c666daa0449afb4fa7c7a806ebced6ce2968e6e635e80a318e4a1371e8938a417feb93b2a06381c81f0d15db370860feeba70f3953279dba52f02a3a04612484aefa84f316a063d9e5227e1d6c937b4b44d64d9e02720e67ef020ebab90f8df39c3b8e47b04e01a0e19d2cf6337957c432be2cf48c9bbf30655a8016656ea82dc8e4fa417ed3b236a05d6658a432cd827b560efc40c0802c5bcfc8bbb79ed3f765b13bdd14034d5912", + "signedLondon": "0x02f9012c82d5cb81df819a87a8b0d55066a5a1852c88b8c9c294ceb734369e4a893a10e1db8af36ac91487260de2856cf16f303b99536577acdb20eb21adec1c95d34a56660027a358784598f47bf89df89b94e43aec2bb451dc4c289eb890dd242d5bc5f6d0ccf884a0e6597d2ea26a458922c08275eb23909ccfca4daf11662e5dd0b8ba95f1c666daa0449afb4fa7c7a806ebced6ce2968e6e635e80a318e4a1371e8938a417feb93b2a06381c81f0d15db370860feeba70f3953279dba52f02a3a04612484aefa84f316a063d9e5227e1d6c937b4b44d64d9e02720e67ef020ebab90f8df39c3b8e47b04e80a027ec2fc739cc17acace3f76f28fc35b73c5146974cfb6f2ef8bc872de093b9e5a017258a2b01e7a7429c2cf2c9d1b224b268f5c61069296d4f1abfe9cc7a4c2814", + "signatureLegacy": { + "r": "0x713955d8f00f1a05bd6608139661b71c376a9e16660d4edd617699669a679831", + "s": "0x3b8e5544dadad730744896cf9d2eb0a2416c3d97b63a41ffa58601a280a154e1", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x1487e3f1fb264e38a70baf273a4583016c7ec1ff9ca632e8d710ce6ae78126ad", + "s": "0x4443666de576afbecc34b6639466f79e52737a6f77418071f1be8f73ed32bf00", + "v": "0x1abba" + }, + "signatureBerlin": { + "r": "0xe19d2cf6337957c432be2cf48c9bbf30655a8016656ea82dc8e4fa417ed3b236", + "s": "0x5d6658a432cd827b560efc40c0802c5bcfc8bbb79ed3f765b13bdd14034d5912", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x27ec2fc739cc17acace3f76f28fc35b73c5146974cfb6f2ef8bc872de093b9e5", + "s": "0x17258a2b01e7a7429c2cf2c9d1b224b268f5c61069296d4f1abfe9cc7a4c2814", + "v": "0x0" + } + }, + { + "name": "random-76", + "transaction": { + "to": "0xa2F1A45d981cD8Cd8D71f6200BdeA3FaC6d9eee5", + "nonce": 213, + "gasLimit": "0x982ed799a4", + "gasPrice": "0xef8b61", + "maxFeePerGas": "0x80db6bcb", + "maxPriorityFeePerGas": "0x52", + "data": "0xd08b7231cb458842dde5e57d222b6e7b54c77d0d6bfdfccd4a93d9c0d5a94578c1bc7391e730568208", + "value": "0xd557be586d", + "accessList": [ + { + "address": "0x3F28a17091824b3c3DAb8e15ec297dAf2313C675", + "storageKeys": [] + }, + { + "address": "0x5B3E40E58F96C9B1797888866a0D9Fd11E4155f8", + "storageKeys": [] + }, + { + "address": "0x6A404ABD58f6653062AEE230181c369Ccc30145C", + "storageKeys": [] + }, + { + "address": "0xe00b333798298F4ec75a934ca1F97129F72E15e0", + "storageKeys": [] + } + ], + "chainId": "0xb126" + }, + "privateKey": "0x2a1c3a0cba0c53b27c471b7897a7d6b055079c47d51817fdb9ff77e4905ef543", + "unsignedLegacy": "0xf85181d583ef8b6185982ed799a494a2f1a45d981cd8cd8d71f6200bdea3fac6d9eee585d557be586da9d08b7231cb458842dde5e57d222b6e7b54c77d0d6bfdfccd4a93d9c0d5a94578c1bc7391e730568208", + "unsignedEip155": "0xf85681d583ef8b6185982ed799a494a2f1a45d981cd8cd8d71f6200bdea3fac6d9eee585d557be586da9d08b7231cb458842dde5e57d222b6e7b54c77d0d6bfdfccd4a93d9c0d5a94578c1bc7391e73056820882b1268080", + "unsignedBerlin": "0x01f8b282b12681d583ef8b6185982ed799a494a2f1a45d981cd8cd8d71f6200bdea3fac6d9eee585d557be586da9d08b7231cb458842dde5e57d222b6e7b54c77d0d6bfdfccd4a93d9c0d5a94578c1bc7391e730568208f85cd6943f28a17091824b3c3dab8e15ec297daf2313c675c0d6945b3e40e58f96c9b1797888866a0d9fd11e4155f8c0d6946a404abd58f6653062aee230181c369ccc30145cc0d694e00b333798298f4ec75a934ca1f97129f72e15e0c0", + "unsignedLondon": "0x02f8b482b12681d5528480db6bcb85982ed799a494a2f1a45d981cd8cd8d71f6200bdea3fac6d9eee585d557be586da9d08b7231cb458842dde5e57d222b6e7b54c77d0d6bfdfccd4a93d9c0d5a94578c1bc7391e730568208f85cd6943f28a17091824b3c3dab8e15ec297daf2313c675c0d6945b3e40e58f96c9b1797888866a0d9fd11e4155f8c0d6946a404abd58f6653062aee230181c369ccc30145cc0d694e00b333798298f4ec75a934ca1f97129f72e15e0c0", + "signedLegacy": "0xf89481d583ef8b6185982ed799a494a2f1a45d981cd8cd8d71f6200bdea3fac6d9eee585d557be586da9d08b7231cb458842dde5e57d222b6e7b54c77d0d6bfdfccd4a93d9c0d5a94578c1bc7391e7305682081ca02d1c16c852de9ea5aa6245489a3c6a694d5ccfcd11dd90dfa8da9a1c6e4b3c2aa046ba1c17023144187272aed0290bb6ac3d7c44cf3793faf4c137e60ae839d644", + "signedEip155": "0xf89781d583ef8b6185982ed799a494a2f1a45d981cd8cd8d71f6200bdea3fac6d9eee585d557be586da9d08b7231cb458842dde5e57d222b6e7b54c77d0d6bfdfccd4a93d9c0d5a94578c1bc7391e73056820883016270a047950367bbd41c480e891b0e3f8d9bb2b9450bb3a88bd754470267d5c77e78d8a0626745c6a7c8117c37d454e0153844cebc4f0711b45a2ee2c74aabd1e0596705", + "signedBerlin": "0x01f8f582b12681d583ef8b6185982ed799a494a2f1a45d981cd8cd8d71f6200bdea3fac6d9eee585d557be586da9d08b7231cb458842dde5e57d222b6e7b54c77d0d6bfdfccd4a93d9c0d5a94578c1bc7391e730568208f85cd6943f28a17091824b3c3dab8e15ec297daf2313c675c0d6945b3e40e58f96c9b1797888866a0d9fd11e4155f8c0d6946a404abd58f6653062aee230181c369ccc30145cc0d694e00b333798298f4ec75a934ca1f97129f72e15e0c080a0c8b9fd6c964963658de382980e7a8a34264fc15d28443b989f79ceed3f246c33a01fe42921ee1b5d03c60aec6da27e1c350efa1363d7ed66931e627b73937707a6", + "signedLondon": "0x02f8f782b12681d5528480db6bcb85982ed799a494a2f1a45d981cd8cd8d71f6200bdea3fac6d9eee585d557be586da9d08b7231cb458842dde5e57d222b6e7b54c77d0d6bfdfccd4a93d9c0d5a94578c1bc7391e730568208f85cd6943f28a17091824b3c3dab8e15ec297daf2313c675c0d6945b3e40e58f96c9b1797888866a0d9fd11e4155f8c0d6946a404abd58f6653062aee230181c369ccc30145cc0d694e00b333798298f4ec75a934ca1f97129f72e15e0c080a0fb59b0eaee411300397ebaa46acd8ae1e7dc3adc011b69f640755b9dd763e28da045a31466ddca739ee964bbdc59147531d332eca56c3c7f9fbb38c15dc24b7a6c", + "signatureLegacy": { + "r": "0x2d1c16c852de9ea5aa6245489a3c6a694d5ccfcd11dd90dfa8da9a1c6e4b3c2a", + "s": "0x46ba1c17023144187272aed0290bb6ac3d7c44cf3793faf4c137e60ae839d644", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x47950367bbd41c480e891b0e3f8d9bb2b9450bb3a88bd754470267d5c77e78d8", + "s": "0x626745c6a7c8117c37d454e0153844cebc4f0711b45a2ee2c74aabd1e0596705", + "v": "0x16270" + }, + "signatureBerlin": { + "r": "0xc8b9fd6c964963658de382980e7a8a34264fc15d28443b989f79ceed3f246c33", + "s": "0x1fe42921ee1b5d03c60aec6da27e1c350efa1363d7ed66931e627b73937707a6", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xfb59b0eaee411300397ebaa46acd8ae1e7dc3adc011b69f640755b9dd763e28d", + "s": "0x45a31466ddca739ee964bbdc59147531d332eca56c3c7f9fbb38c15dc24b7a6c", + "v": "0x0" + } + }, + { + "name": "random-77", + "transaction": { + "to": "0x9Ef34f85EFC31a77A1C73F86AE9bc4D4B98900E0", + "nonce": 68, + "gasLimit": "0x161d3f33", + "gasPrice": "0xb182e488", + "maxFeePerGas": "0x4fc300c826", + "maxPriorityFeePerGas": "0xd982", + "data": "0x3e0915e3c0499f4ccf8448b35e51217978f73639c3aa70b947140c751f9abade7f7e308c073e87e2760e8bef521c14efffba23b6a686775f66cd21607fdb3a9ae7d9a06d1562cfd9a8b1a62075889e53fafcc15c75bdb3fafbec1367a3b05c220cd5e02d4819526050d50a74df96ec803132d408562542c3ce9ccc30d21f", + "value": "0xd34e0b79", + "accessList": [ + { + "address": "0x22A46e974d6A904697713925B1A6d2F7F9eC9057", + "storageKeys": [ + "0x7f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abe", + "0xcfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82", + "0xf56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7c", + "0xaf2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99" + ] + }, + { + "address": "0x949F0877867dbdaC6C520C7ce67a0366BB17DB72", + "storageKeys": [ + "0x7f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abe", + "0xcfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82", + "0xf56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7c", + "0xaf2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99" + ] + }, + { + "address": "0x05f68290940DA75DaF7052d1F95Af0423e9D034A", + "storageKeys": [ + "0x7f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abe", + "0xcfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82", + "0xf56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7c", + "0xaf2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99" + ] + }, + { + "address": "0xc344b1f4960786E2dDf5aDd3c6cc9bb7A6c621D7", + "storageKeys": [ + "0x7f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abe", + "0xcfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82", + "0xf56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7c", + "0xaf2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99" + ] + } + ], + "chainId": "0xba9f0619" + }, + "privateKey": "0xc2ec5321390d242a247fb10bcefc759af65e3c57c8d8673355b650ee38c9e6fd", + "unsignedLegacy": "0xf8a54484b182e48884161d3f33949ef34f85efc31a77a1c73f86ae9bc4d4b98900e084d34e0b79b87e3e0915e3c0499f4ccf8448b35e51217978f73639c3aa70b947140c751f9abade7f7e308c073e87e2760e8bef521c14efffba23b6a686775f66cd21607fdb3a9ae7d9a06d1562cfd9a8b1a62075889e53fafcc15c75bdb3fafbec1367a3b05c220cd5e02d4819526050d50a74df96ec803132d408562542c3ce9ccc30d21f", + "unsignedEip155": "0xf8ac4484b182e48884161d3f33949ef34f85efc31a77a1c73f86ae9bc4d4b98900e084d34e0b79b87e3e0915e3c0499f4ccf8448b35e51217978f73639c3aa70b947140c751f9abade7f7e308c073e87e2760e8bef521c14efffba23b6a686775f66cd21607fdb3a9ae7d9a06d1562cfd9a8b1a62075889e53fafcc15c75bdb3fafbec1367a3b05c220cd5e02d4819526050d50a74df96ec803132d408562542c3ce9ccc30d21f84ba9f06198080", + "unsignedBerlin": "0x01f9032184ba9f06194484b182e48884161d3f33949ef34f85efc31a77a1c73f86ae9bc4d4b98900e084d34e0b79b87e3e0915e3c0499f4ccf8448b35e51217978f73639c3aa70b947140c751f9abade7f7e308c073e87e2760e8bef521c14efffba23b6a686775f66cd21607fdb3a9ae7d9a06d1562cfd9a8b1a62075889e53fafcc15c75bdb3fafbec1367a3b05c220cd5e02d4819526050d50a74df96ec803132d408562542c3ce9ccc30d21ff90274f89b9422a46e974d6a904697713925b1a6d2f7f9ec9057f884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99f89b94949f0877867dbdac6c520c7ce67a0366bb17db72f884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99f89b9405f68290940da75daf7052d1f95af0423e9d034af884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99f89b94c344b1f4960786e2ddf5add3c6cc9bb7a6c621d7f884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99", + "unsignedLondon": "0x02f9032584ba9f06194482d982854fc300c82684161d3f33949ef34f85efc31a77a1c73f86ae9bc4d4b98900e084d34e0b79b87e3e0915e3c0499f4ccf8448b35e51217978f73639c3aa70b947140c751f9abade7f7e308c073e87e2760e8bef521c14efffba23b6a686775f66cd21607fdb3a9ae7d9a06d1562cfd9a8b1a62075889e53fafcc15c75bdb3fafbec1367a3b05c220cd5e02d4819526050d50a74df96ec803132d408562542c3ce9ccc30d21ff90274f89b9422a46e974d6a904697713925b1a6d2f7f9ec9057f884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99f89b94949f0877867dbdac6c520c7ce67a0366bb17db72f884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99f89b9405f68290940da75daf7052d1f95af0423e9d034af884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99f89b94c344b1f4960786e2ddf5add3c6cc9bb7a6c621d7f884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99", + "signedLegacy": "0xf8e84484b182e48884161d3f33949ef34f85efc31a77a1c73f86ae9bc4d4b98900e084d34e0b79b87e3e0915e3c0499f4ccf8448b35e51217978f73639c3aa70b947140c751f9abade7f7e308c073e87e2760e8bef521c14efffba23b6a686775f66cd21607fdb3a9ae7d9a06d1562cfd9a8b1a62075889e53fafcc15c75bdb3fafbec1367a3b05c220cd5e02d4819526050d50a74df96ec803132d408562542c3ce9ccc30d21f1ba01080bb8b4be23b2b044bb4759e7d66001709a254231589698140633ecb31c457a073c3425b6d217bbd89dab94e084d4c8f05f10831fa11492a4cbaf20e4221c792", + "signedEip155": "0xf8ed4484b182e48884161d3f33949ef34f85efc31a77a1c73f86ae9bc4d4b98900e084d34e0b79b87e3e0915e3c0499f4ccf8448b35e51217978f73639c3aa70b947140c751f9abade7f7e308c073e87e2760e8bef521c14efffba23b6a686775f66cd21607fdb3a9ae7d9a06d1562cfd9a8b1a62075889e53fafcc15c75bdb3fafbec1367a3b05c220cd5e02d4819526050d50a74df96ec803132d408562542c3ce9ccc30d21f8501753e0c55a0f689c81c8f7747e7e8b9b6552e7436645af67ac7f44d0c83213a4debd4ad510ea00784d985af8efbd7932530c1ebe8e537b6b62e74675d3f63ec4068aba763bee0", + "signedBerlin": "0x01f9036484ba9f06194484b182e48884161d3f33949ef34f85efc31a77a1c73f86ae9bc4d4b98900e084d34e0b79b87e3e0915e3c0499f4ccf8448b35e51217978f73639c3aa70b947140c751f9abade7f7e308c073e87e2760e8bef521c14efffba23b6a686775f66cd21607fdb3a9ae7d9a06d1562cfd9a8b1a62075889e53fafcc15c75bdb3fafbec1367a3b05c220cd5e02d4819526050d50a74df96ec803132d408562542c3ce9ccc30d21ff90274f89b9422a46e974d6a904697713925b1a6d2f7f9ec9057f884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99f89b94949f0877867dbdac6c520c7ce67a0366bb17db72f884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99f89b9405f68290940da75daf7052d1f95af0423e9d034af884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99f89b94c344b1f4960786e2ddf5add3c6cc9bb7a6c621d7f884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc9901a02136f932ef60aed49ecb9277ac4b2c4533286e33dd72112444e8584f8ed064e9a012894b7246a7d5d6582462e6f11089b64165c77867b7038b5c70fbaf2fd1248d", + "signedLondon": "0x02f9036884ba9f06194482d982854fc300c82684161d3f33949ef34f85efc31a77a1c73f86ae9bc4d4b98900e084d34e0b79b87e3e0915e3c0499f4ccf8448b35e51217978f73639c3aa70b947140c751f9abade7f7e308c073e87e2760e8bef521c14efffba23b6a686775f66cd21607fdb3a9ae7d9a06d1562cfd9a8b1a62075889e53fafcc15c75bdb3fafbec1367a3b05c220cd5e02d4819526050d50a74df96ec803132d408562542c3ce9ccc30d21ff90274f89b9422a46e974d6a904697713925b1a6d2f7f9ec9057f884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99f89b94949f0877867dbdac6c520c7ce67a0366bb17db72f884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99f89b9405f68290940da75daf7052d1f95af0423e9d034af884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc99f89b94c344b1f4960786e2ddf5add3c6cc9bb7a6c621d7f884a07f5a61220a34e055900fcc6bea011d74662a83b0e7c59c739e273e0543352abea0cfac541c820be3ae3096e8fbb6fd65d5bfd12d5e6056e043711e7c767afbaf82a0f56421c6b4b3311aa2393001e116d976d5781661c2acf2245bfa0cdc7a264c7ca0af2bc45fca0e45e7b67133967a7c33896ef6609531d1258d4f8615af82b5cc9980a0c62ac7edae5e85fa17b57f4c6d3d7ca44141761c673d71fdb99c86c03e3b6b58a01737a611778aeca2ffb51967c3557db8b539eb2bb6e00c262245dfd3122fbd36", + "signatureLegacy": { + "r": "0x1080bb8b4be23b2b044bb4759e7d66001709a254231589698140633ecb31c457", + "s": "0x73c3425b6d217bbd89dab94e084d4c8f05f10831fa11492a4cbaf20e4221c792", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xf689c81c8f7747e7e8b9b6552e7436645af67ac7f44d0c83213a4debd4ad510e", + "s": "0x0784d985af8efbd7932530c1ebe8e537b6b62e74675d3f63ec4068aba763bee0", + "v": "0x1753e0c55" + }, + "signatureBerlin": { + "r": "0x2136f932ef60aed49ecb9277ac4b2c4533286e33dd72112444e8584f8ed064e9", + "s": "0x12894b7246a7d5d6582462e6f11089b64165c77867b7038b5c70fbaf2fd1248d", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xc62ac7edae5e85fa17b57f4c6d3d7ca44141761c673d71fdb99c86c03e3b6b58", + "s": "0x1737a611778aeca2ffb51967c3557db8b539eb2bb6e00c262245dfd3122fbd36", + "v": "0x0" + } + }, + { + "name": "random-78", + "transaction": { + "to": "0x935889a09Ce334DeB51E7Ff46C648259d6eEF9Dd", + "nonce": 41, + "gasLimit": "0x9ee497b3", + "gasPrice": "0xb938", + "maxFeePerGas": "0x8868c7a10ab2", + "maxPriorityFeePerGas": "0xe5", + "data": "0xf6a9562b", + "value": "0x2189", + "accessList": [ + { + "address": "0xAd986854513eEb4817BBfA4d13C6b9022F1EE4d3", + "storageKeys": [ + "0x1e603e4c79a4f3ec3f3117dc294b46a36297214095a50f193489bb428ebf6b72", + "0x2e40b5c1958f337422e80e7b684ee29234c863f46f358f4f00886ad29d965e03", + "0x45e712d751f525eb227aa7db80dd8731190b785eb9277dc56e2538ebb2008bbf" + ] + }, + { + "address": "0x553bD39AE42E47C31344B918eCA2f6165d8C3c76", + "storageKeys": [ + "0x1e603e4c79a4f3ec3f3117dc294b46a36297214095a50f193489bb428ebf6b72", + "0x2e40b5c1958f337422e80e7b684ee29234c863f46f358f4f00886ad29d965e03", + "0x45e712d751f525eb227aa7db80dd8731190b785eb9277dc56e2538ebb2008bbf" + ] + } + ], + "chainId": "0x7eea39" + }, + "privateKey": "0xa93a3174751b7260217b1a8953bfec781042b8770a7595189f2faee657bb9af8", + "unsignedLegacy": "0xe62982b938849ee497b394935889a09ce334deb51e7ff46c648259d6eef9dd82218984f6a9562b", + "unsignedEip155": "0xec2982b938849ee497b394935889a09ce334deb51e7ff46c648259d6eef9dd82218984f6a9562b837eea398080", + "unsignedBerlin": "0x01f90124837eea392982b938849ee497b394935889a09ce334deb51e7ff46c648259d6eef9dd82218984f6a9562bf8f8f87a94ad986854513eeb4817bbfa4d13c6b9022f1ee4d3f863a01e603e4c79a4f3ec3f3117dc294b46a36297214095a50f193489bb428ebf6b72a02e40b5c1958f337422e80e7b684ee29234c863f46f358f4f00886ad29d965e03a045e712d751f525eb227aa7db80dd8731190b785eb9277dc56e2538ebb2008bbff87a94553bd39ae42e47c31344b918eca2f6165d8c3c76f863a01e603e4c79a4f3ec3f3117dc294b46a36297214095a50f193489bb428ebf6b72a02e40b5c1958f337422e80e7b684ee29234c863f46f358f4f00886ad29d965e03a045e712d751f525eb227aa7db80dd8731190b785eb9277dc56e2538ebb2008bbf", + "unsignedLondon": "0x02f9012a837eea392981e5868868c7a10ab2849ee497b394935889a09ce334deb51e7ff46c648259d6eef9dd82218984f6a9562bf8f8f87a94ad986854513eeb4817bbfa4d13c6b9022f1ee4d3f863a01e603e4c79a4f3ec3f3117dc294b46a36297214095a50f193489bb428ebf6b72a02e40b5c1958f337422e80e7b684ee29234c863f46f358f4f00886ad29d965e03a045e712d751f525eb227aa7db80dd8731190b785eb9277dc56e2538ebb2008bbff87a94553bd39ae42e47c31344b918eca2f6165d8c3c76f863a01e603e4c79a4f3ec3f3117dc294b46a36297214095a50f193489bb428ebf6b72a02e40b5c1958f337422e80e7b684ee29234c863f46f358f4f00886ad29d965e03a045e712d751f525eb227aa7db80dd8731190b785eb9277dc56e2538ebb2008bbf", + "signedLegacy": "0xf8692982b938849ee497b394935889a09ce334deb51e7ff46c648259d6eef9dd82218984f6a9562b1ba0f3e713b56dd4e1b7172c86d17d4c35fca75258efd4d5435ccf56bb74670824eda06cfcd15194c4ecf33319a45874c6bf76c70baa83acd1038956a160600002d293", + "signedEip155": "0xf86c2982b938849ee497b394935889a09ce334deb51e7ff46c648259d6eef9dd82218984f6a9562b83fdd496a06ff9b3709e59616fd476f547be2d5b7d776725db0ef7f4504ed2973dfb3a1398a0730ee27fcea344e7a3c157918361fa14146d7c7413db60459bdbb8c9f2c4bef0", + "signedBerlin": "0x01f90167837eea392982b938849ee497b394935889a09ce334deb51e7ff46c648259d6eef9dd82218984f6a9562bf8f8f87a94ad986854513eeb4817bbfa4d13c6b9022f1ee4d3f863a01e603e4c79a4f3ec3f3117dc294b46a36297214095a50f193489bb428ebf6b72a02e40b5c1958f337422e80e7b684ee29234c863f46f358f4f00886ad29d965e03a045e712d751f525eb227aa7db80dd8731190b785eb9277dc56e2538ebb2008bbff87a94553bd39ae42e47c31344b918eca2f6165d8c3c76f863a01e603e4c79a4f3ec3f3117dc294b46a36297214095a50f193489bb428ebf6b72a02e40b5c1958f337422e80e7b684ee29234c863f46f358f4f00886ad29d965e03a045e712d751f525eb227aa7db80dd8731190b785eb9277dc56e2538ebb2008bbf80a01b5a5629526ac903cbed23916064dda6f3936fd7702209f82d4b506514babfa1a0055cf0302e536eeee94f32a3bcdbcddadf0962edc29a60e0280174c870ddbfc4", + "signedLondon": "0x02f9016d837eea392981e5868868c7a10ab2849ee497b394935889a09ce334deb51e7ff46c648259d6eef9dd82218984f6a9562bf8f8f87a94ad986854513eeb4817bbfa4d13c6b9022f1ee4d3f863a01e603e4c79a4f3ec3f3117dc294b46a36297214095a50f193489bb428ebf6b72a02e40b5c1958f337422e80e7b684ee29234c863f46f358f4f00886ad29d965e03a045e712d751f525eb227aa7db80dd8731190b785eb9277dc56e2538ebb2008bbff87a94553bd39ae42e47c31344b918eca2f6165d8c3c76f863a01e603e4c79a4f3ec3f3117dc294b46a36297214095a50f193489bb428ebf6b72a02e40b5c1958f337422e80e7b684ee29234c863f46f358f4f00886ad29d965e03a045e712d751f525eb227aa7db80dd8731190b785eb9277dc56e2538ebb2008bbf01a09bf23be2d7c292b55e8dc4a8be64a5e2bf11dea1df9fbaa01d1830e46240ec23a0126cee7a17b6615c7fce7cac63f05c519f103167109fafbdef6039dcee3f8698", + "signatureLegacy": { + "r": "0xf3e713b56dd4e1b7172c86d17d4c35fca75258efd4d5435ccf56bb74670824ed", + "s": "0x6cfcd15194c4ecf33319a45874c6bf76c70baa83acd1038956a160600002d293", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x6ff9b3709e59616fd476f547be2d5b7d776725db0ef7f4504ed2973dfb3a1398", + "s": "0x730ee27fcea344e7a3c157918361fa14146d7c7413db60459bdbb8c9f2c4bef0", + "v": "0xfdd496" + }, + "signatureBerlin": { + "r": "0x1b5a5629526ac903cbed23916064dda6f3936fd7702209f82d4b506514babfa1", + "s": "0x055cf0302e536eeee94f32a3bcdbcddadf0962edc29a60e0280174c870ddbfc4", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x9bf23be2d7c292b55e8dc4a8be64a5e2bf11dea1df9fbaa01d1830e46240ec23", + "s": "0x126cee7a17b6615c7fce7cac63f05c519f103167109fafbdef6039dcee3f8698", + "v": "0x1" + } + }, + { + "name": "random-79", + "transaction": { + "to": "0xa157CcBcf04529C709c339ec45949C50bfc820a2", + "nonce": 89, + "gasLimit": "0x7f95cf4d", + "gasPrice": "0xc670af", + "maxFeePerGas": "0x6f52dfd7", + "maxPriorityFeePerGas": "0x1c", + "data": "0x0f7cf0380cb848853cc19aabdabdd15cbb8dbe760f13c49fec520e195d0779fe179da9e98820100421b0b81a", + "value": "0x4f", + "accessList": [ + { + "address": "0x94f6079d381EAe96318Cbf4651aFb2092299eC7C", + "storageKeys": [ + "0x81452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328", + "0x71e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18f", + "0x0f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1" + ] + }, + { + "address": "0x7d6dAfbCC17E0c840F3a2949a6f1d224d4643603", + "storageKeys": [ + "0x81452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328", + "0x71e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18f", + "0x0f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1" + ] + }, + { + "address": "0xdA6C839aD214B9d42C4eC4BD9be37123d71a3C27", + "storageKeys": [ + "0x81452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328", + "0x71e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18f", + "0x0f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1" + ] + }, + { + "address": "0x8ecE6d0241992F7a6DCdD60d67A5733d0D3910C8", + "storageKeys": [ + "0x81452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328", + "0x71e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18f", + "0x0f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1" + ] + } + ], + "chainId": "0x9b4ebc" + }, + "privateKey": "0xbb6139cdb75a526d4b768c8b52a6ddb851805f50e5ee67443ff0216414a468f6", + "unsignedLegacy": "0xf84d5983c670af847f95cf4d94a157ccbcf04529c709c339ec45949c50bfc820a24fac0f7cf0380cb848853cc19aabdabdd15cbb8dbe760f13c49fec520e195d0779fe179da9e98820100421b0b81a", + "unsignedEip155": "0xf8535983c670af847f95cf4d94a157ccbcf04529c709c339ec45949c50bfc820a24fac0f7cf0380cb848853cc19aabdabdd15cbb8dbe760f13c49fec520e195d0779fe179da9e98820100421b0b81a839b4ebc8080", + "unsignedBerlin": "0x01f90244839b4ebc5983c670af847f95cf4d94a157ccbcf04529c709c339ec45949c50bfc820a24fac0f7cf0380cb848853cc19aabdabdd15cbb8dbe760f13c49fec520e195d0779fe179da9e98820100421b0b81af901f0f87a9494f6079d381eae96318cbf4651afb2092299ec7cf863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1f87a947d6dafbcc17e0c840f3a2949a6f1d224d4643603f863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1f87a94da6c839ad214b9d42c4ec4bd9be37123d71a3c27f863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1f87a948ece6d0241992f7a6dcdd60d67a5733d0d3910c8f863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1", + "unsignedLondon": "0x02f90246839b4ebc591c846f52dfd7847f95cf4d94a157ccbcf04529c709c339ec45949c50bfc820a24fac0f7cf0380cb848853cc19aabdabdd15cbb8dbe760f13c49fec520e195d0779fe179da9e98820100421b0b81af901f0f87a9494f6079d381eae96318cbf4651afb2092299ec7cf863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1f87a947d6dafbcc17e0c840f3a2949a6f1d224d4643603f863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1f87a94da6c839ad214b9d42c4ec4bd9be37123d71a3c27f863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1f87a948ece6d0241992f7a6dcdd60d67a5733d0d3910c8f863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1", + "signedLegacy": "0xf8905983c670af847f95cf4d94a157ccbcf04529c709c339ec45949c50bfc820a24fac0f7cf0380cb848853cc19aabdabdd15cbb8dbe760f13c49fec520e195d0779fe179da9e98820100421b0b81a1ba0ebda722ef1a871d15876683b8e563d53f21f5fd66c6304c871dfbe4ff686a1fca072a57daa388220f223fd569baab64649622073c3d1d512344130fc44eaae0736", + "signedEip155": "0xf8945983c670af847f95cf4d94a157ccbcf04529c709c339ec45949c50bfc820a24fac0f7cf0380cb848853cc19aabdabdd15cbb8dbe760f13c49fec520e195d0779fe179da9e98820100421b0b81a8401369d9ca0a4a14f9a4823c2c8489a03107979570539640f13e86afa985a02b23fe70e9094a04dc1739ae2e2706db183fc3bbb8e315b2a1d7e2c1c1e1aa43b0593f8534c1efd", + "signedBerlin": "0x01f90287839b4ebc5983c670af847f95cf4d94a157ccbcf04529c709c339ec45949c50bfc820a24fac0f7cf0380cb848853cc19aabdabdd15cbb8dbe760f13c49fec520e195d0779fe179da9e98820100421b0b81af901f0f87a9494f6079d381eae96318cbf4651afb2092299ec7cf863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1f87a947d6dafbcc17e0c840f3a2949a6f1d224d4643603f863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1f87a94da6c839ad214b9d42c4ec4bd9be37123d71a3c27f863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1f87a948ece6d0241992f7a6dcdd60d67a5733d0d3910c8f863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f180a056000bbb319873079c205e22f4f963a7d983437dc3f53ca3613d0f921b93a685a05efa1e32616bbcae8c7ded42d4fd7e4f2de19c410e47964c701443fcfc2ad321", + "signedLondon": "0x02f90289839b4ebc591c846f52dfd7847f95cf4d94a157ccbcf04529c709c339ec45949c50bfc820a24fac0f7cf0380cb848853cc19aabdabdd15cbb8dbe760f13c49fec520e195d0779fe179da9e98820100421b0b81af901f0f87a9494f6079d381eae96318cbf4651afb2092299ec7cf863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1f87a947d6dafbcc17e0c840f3a2949a6f1d224d4643603f863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1f87a94da6c839ad214b9d42c4ec4bd9be37123d71a3c27f863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f1f87a948ece6d0241992f7a6dcdd60d67a5733d0d3910c8f863a081452d24074125978a7c7161dd90da510a700714562a8e29d7bf559f25962328a071e65c9a55f4aa781b99afe9ce65b85e20b467cbdec997e623d75addf63aa18fa00f29299d3d0fdcf8d30fbd2e57f3b71b003620554e9649c893255c8ae8f581f101a04c6297e64e5dcdff6cb93e12460b86a3aedb4d491fc8ed406ad7da9abba82048a021f10deaadaf6f9c86db3aa9966cc043dea040e8b01e69f0422771e982237899", + "signatureLegacy": { + "r": "0xebda722ef1a871d15876683b8e563d53f21f5fd66c6304c871dfbe4ff686a1fc", + "s": "0x72a57daa388220f223fd569baab64649622073c3d1d512344130fc44eaae0736", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xa4a14f9a4823c2c8489a03107979570539640f13e86afa985a02b23fe70e9094", + "s": "0x4dc1739ae2e2706db183fc3bbb8e315b2a1d7e2c1c1e1aa43b0593f8534c1efd", + "v": "0x1369d9c" + }, + "signatureBerlin": { + "r": "0x56000bbb319873079c205e22f4f963a7d983437dc3f53ca3613d0f921b93a685", + "s": "0x5efa1e32616bbcae8c7ded42d4fd7e4f2de19c410e47964c701443fcfc2ad321", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x4c6297e64e5dcdff6cb93e12460b86a3aedb4d491fc8ed406ad7da9abba82048", + "s": "0x21f10deaadaf6f9c86db3aa9966cc043dea040e8b01e69f0422771e982237899", + "v": "0x1" + } + }, + { + "name": "random-80", + "transaction": { + "to": "0xccD6EC986CB3c323dd9767dE263F40532360916e", + "nonce": 310, + "gasLimit": "0xbdc97afa88", + "gasPrice": "0xd1cf", + "maxFeePerGas": "0x72d1185cc524", + "maxPriorityFeePerGas": "0x5f60", + "data": "0x21f979b5b485b68ab66549fc5efbe31e7e0ef7469ebc2295845c56e500e1d542c5358a1c38eada73694f26f486d90b13491ff181d495962d4ba3f7e1", + "value": "0x5ebd", + "accessList": [ + { + "address": "0x6565C18218E3d5C30FB8C3eD8AA5368B9270D1E5", + "storageKeys": [ + "0x8af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219" + ] + }, + { + "address": "0x0F96dAe8c01C9524BD6620ab109A076A8790556d", + "storageKeys": [ + "0x8af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219" + ] + }, + { + "address": "0x3fc38b5896DFA30e7035DED8458dFefc553b79C6", + "storageKeys": [ + "0x8af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219" + ] + }, + { + "address": "0x2786E0D96D6A5AaaE1772d15a38cfbB320274286", + "storageKeys": [ + "0x8af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219" + ] + } + ], + "chainId": "0xb715" + }, + "privateKey": "0xa016e358479651f4089446d4fac6b978ebc92cb8c136a3ec12d4189fa41910cc", + "unsignedLegacy": "0xf86282013682d1cf85bdc97afa8894ccd6ec986cb3c323dd9767de263f40532360916e825ebdb83c21f979b5b485b68ab66549fc5efbe31e7e0ef7469ebc2295845c56e500e1d542c5358a1c38eada73694f26f486d90b13491ff181d495962d4ba3f7e1", + "unsignedEip155": "0xf86782013682d1cf85bdc97afa8894ccd6ec986cb3c323dd9767de263f40532360916e825ebdb83c21f979b5b485b68ab66549fc5efbe31e7e0ef7469ebc2295845c56e500e1d542c5358a1c38eada73694f26f486d90b13491ff181d495962d4ba3f7e182b7158080", + "unsignedBerlin": "0x01f9014782b71582013682d1cf85bdc97afa8894ccd6ec986cb3c323dd9767de263f40532360916e825ebdb83c21f979b5b485b68ab66549fc5efbe31e7e0ef7469ebc2295845c56e500e1d542c5358a1c38eada73694f26f486d90b13491ff181d495962d4ba3f7e1f8e0f7946565c18218e3d5c30fb8c3ed8aa5368b9270d1e5e1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219f7940f96dae8c01c9524bd6620ab109a076a8790556de1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219f7943fc38b5896dfa30e7035ded8458dfefc553b79c6e1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219f7942786e0d96d6a5aaae1772d15a38cfbb320274286e1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219", + "unsignedLondon": "0x02f9014e82b715820136825f608672d1185cc52485bdc97afa8894ccd6ec986cb3c323dd9767de263f40532360916e825ebdb83c21f979b5b485b68ab66549fc5efbe31e7e0ef7469ebc2295845c56e500e1d542c5358a1c38eada73694f26f486d90b13491ff181d495962d4ba3f7e1f8e0f7946565c18218e3d5c30fb8c3ed8aa5368b9270d1e5e1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219f7940f96dae8c01c9524bd6620ab109a076a8790556de1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219f7943fc38b5896dfa30e7035ded8458dfefc553b79c6e1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219f7942786e0d96d6a5aaae1772d15a38cfbb320274286e1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219", + "signedLegacy": "0xf8a582013682d1cf85bdc97afa8894ccd6ec986cb3c323dd9767de263f40532360916e825ebdb83c21f979b5b485b68ab66549fc5efbe31e7e0ef7469ebc2295845c56e500e1d542c5358a1c38eada73694f26f486d90b13491ff181d495962d4ba3f7e11ba0985012c464fcef9731760e0fe6671be97e97af38ab4d16170335718c530b2711a075ce1207ca0f35125ca7f56b056dbb2ea57225ac95277fec1847fdeb69bd1572", + "signedEip155": "0xf8a882013682d1cf85bdc97afa8894ccd6ec986cb3c323dd9767de263f40532360916e825ebdb83c21f979b5b485b68ab66549fc5efbe31e7e0ef7469ebc2295845c56e500e1d542c5358a1c38eada73694f26f486d90b13491ff181d495962d4ba3f7e183016e4ea071d40494d37ce7329ceb5a129b9bfbb91764a33a59105e8dfd181aaf775db0e6a02e03d936be568a0fa56d04b5dcb7bda08fbda5c054920db841c495f5a2a6cc44", + "signedBerlin": "0x01f9018a82b71582013682d1cf85bdc97afa8894ccd6ec986cb3c323dd9767de263f40532360916e825ebdb83c21f979b5b485b68ab66549fc5efbe31e7e0ef7469ebc2295845c56e500e1d542c5358a1c38eada73694f26f486d90b13491ff181d495962d4ba3f7e1f8e0f7946565c18218e3d5c30fb8c3ed8aa5368b9270d1e5e1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219f7940f96dae8c01c9524bd6620ab109a076a8790556de1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219f7943fc38b5896dfa30e7035ded8458dfefc553b79c6e1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219f7942786e0d96d6a5aaae1772d15a38cfbb320274286e1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c2121901a0d68081e9a88638a225287428000ae6c4e9187a5b404d10a27518666186899735a00c43155636161c045678c2734aba266f9859b256cd4f50a30f2384685082f018", + "signedLondon": "0x02f9019182b715820136825f608672d1185cc52485bdc97afa8894ccd6ec986cb3c323dd9767de263f40532360916e825ebdb83c21f979b5b485b68ab66549fc5efbe31e7e0ef7469ebc2295845c56e500e1d542c5358a1c38eada73694f26f486d90b13491ff181d495962d4ba3f7e1f8e0f7946565c18218e3d5c30fb8c3ed8aa5368b9270d1e5e1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219f7940f96dae8c01c9524bd6620ab109a076a8790556de1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219f7943fc38b5896dfa30e7035ded8458dfefc553b79c6e1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c21219f7942786e0d96d6a5aaae1772d15a38cfbb320274286e1a08af68e30d0b55cd77e2a766ab742aacb53609d2f836b328fcba74f2010c2121901a0562579cd83d40f11a74619db6e611a457b79a5d102cb75878ce9421141b5caf8a048dd4fc821416ff641299f52110a3df7f189dd5bb1746c203f1d7fdf2c6feacb", + "signatureLegacy": { + "r": "0x985012c464fcef9731760e0fe6671be97e97af38ab4d16170335718c530b2711", + "s": "0x75ce1207ca0f35125ca7f56b056dbb2ea57225ac95277fec1847fdeb69bd1572", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x71d40494d37ce7329ceb5a129b9bfbb91764a33a59105e8dfd181aaf775db0e6", + "s": "0x2e03d936be568a0fa56d04b5dcb7bda08fbda5c054920db841c495f5a2a6cc44", + "v": "0x16e4e" + }, + "signatureBerlin": { + "r": "0xd68081e9a88638a225287428000ae6c4e9187a5b404d10a27518666186899735", + "s": "0x0c43155636161c045678c2734aba266f9859b256cd4f50a30f2384685082f018", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x562579cd83d40f11a74619db6e611a457b79a5d102cb75878ce9421141b5caf8", + "s": "0x48dd4fc821416ff641299f52110a3df7f189dd5bb1746c203f1d7fdf2c6feacb", + "v": "0x1" + } + }, + { + "name": "random-83", + "transaction": { + "to": "0xdEA0bD7fb350AF2bAF9E1878C127D2Ab62367C57", + "nonce": 715, + "gasLimit": "0xb4efc87514", + "gasPrice": "0x0a", + "maxFeePerGas": "0x1f7d3bf5b9", + "maxPriorityFeePerGas": "0xd4", + "data": "0xbedbdeee6681d6cb7a454978d6b2db56718cbc96a605ae9624a29a2432db87f2ff1cc1f86e2e70648a98acf0528b0b65c36e02ff", + "value": "0x293b625665", + "accessList": [ + { + "address": "0x451964d8207FB75278caC13fb991bB4DFf4c6dDe", + "storageKeys": [ + "0xfee7c5273eff291e2f99cea4de43e53fca9177478563526d0765abe7705b1808" + ] + }, + { + "address": "0x00456d5236A93FD20edC2081B46C087d9Fa6a413", + "storageKeys": [ + "0xfee7c5273eff291e2f99cea4de43e53fca9177478563526d0765abe7705b1808" + ] + } + ], + "chainId": "0x1e" + }, + "privateKey": "0x615cfbe298a8d0e93b8862d7d84411af5f1bf3a027ad30dc440fff233a7cc1bb", + "unsignedLegacy": "0xf85a8202cb0a85b4efc8751494dea0bd7fb350af2baf9e1878c127d2ab62367c5785293b625665b4bedbdeee6681d6cb7a454978d6b2db56718cbc96a605ae9624a29a2432db87f2ff1cc1f86e2e70648a98acf0528b0b65c36e02ff", + "unsignedEip155": "0xf85d8202cb0a85b4efc8751494dea0bd7fb350af2baf9e1878c127d2ab62367c5785293b625665b4bedbdeee6681d6cb7a454978d6b2db56718cbc96a605ae9624a29a2432db87f2ff1cc1f86e2e70648a98acf0528b0b65c36e02ff1e8080", + "unsignedBerlin": "0x01f8cd1e8202cb0a85b4efc8751494dea0bd7fb350af2baf9e1878c127d2ab62367c5785293b625665b4bedbdeee6681d6cb7a454978d6b2db56718cbc96a605ae9624a29a2432db87f2ff1cc1f86e2e70648a98acf0528b0b65c36e02fff870f794451964d8207fb75278cac13fb991bb4dff4c6ddee1a0fee7c5273eff291e2f99cea4de43e53fca9177478563526d0765abe7705b1808f79400456d5236a93fd20edc2081b46c087d9fa6a413e1a0fee7c5273eff291e2f99cea4de43e53fca9177478563526d0765abe7705b1808", + "unsignedLondon": "0x02f8d41e8202cb81d4851f7d3bf5b985b4efc8751494dea0bd7fb350af2baf9e1878c127d2ab62367c5785293b625665b4bedbdeee6681d6cb7a454978d6b2db56718cbc96a605ae9624a29a2432db87f2ff1cc1f86e2e70648a98acf0528b0b65c36e02fff870f794451964d8207fb75278cac13fb991bb4dff4c6ddee1a0fee7c5273eff291e2f99cea4de43e53fca9177478563526d0765abe7705b1808f79400456d5236a93fd20edc2081b46c087d9fa6a413e1a0fee7c5273eff291e2f99cea4de43e53fca9177478563526d0765abe7705b1808", + "signedLegacy": "0xf89d8202cb0a85b4efc8751494dea0bd7fb350af2baf9e1878c127d2ab62367c5785293b625665b4bedbdeee6681d6cb7a454978d6b2db56718cbc96a605ae9624a29a2432db87f2ff1cc1f86e2e70648a98acf0528b0b65c36e02ff1ba0e0e954fe6e08e3f4d1265663aa0d43a845a71b75cce5bb970d81524266a8aafca0714a340884a63df9998132928358e1d725dc22c742295672252cd89dca206b96", + "signedEip155": "0xf89d8202cb0a85b4efc8751494dea0bd7fb350af2baf9e1878c127d2ab62367c5785293b625665b4bedbdeee6681d6cb7a454978d6b2db56718cbc96a605ae9624a29a2432db87f2ff1cc1f86e2e70648a98acf0528b0b65c36e02ff5fa0b28bce642330c23c472853e2d3a5138b0e6da1cb04bfa274bcd35c9d9a9f9b8ea01e8116ce66625e8f779673a2dafdafa13eb70b1cb89861ef56c60c68185cb9ca", + "signedBerlin": "0x01f901101e8202cb0a85b4efc8751494dea0bd7fb350af2baf9e1878c127d2ab62367c5785293b625665b4bedbdeee6681d6cb7a454978d6b2db56718cbc96a605ae9624a29a2432db87f2ff1cc1f86e2e70648a98acf0528b0b65c36e02fff870f794451964d8207fb75278cac13fb991bb4dff4c6ddee1a0fee7c5273eff291e2f99cea4de43e53fca9177478563526d0765abe7705b1808f79400456d5236a93fd20edc2081b46c087d9fa6a413e1a0fee7c5273eff291e2f99cea4de43e53fca9177478563526d0765abe7705b180880a08a0d7ff01052049a2a55a0e8056b7103fa152bca0270f02d8a6ed514294294a3a02c9772fed884149b65f2b361151cdfec1f662e1f82733d61e6dfd4e62901a0c4", + "signedLondon": "0x02f901171e8202cb81d4851f7d3bf5b985b4efc8751494dea0bd7fb350af2baf9e1878c127d2ab62367c5785293b625665b4bedbdeee6681d6cb7a454978d6b2db56718cbc96a605ae9624a29a2432db87f2ff1cc1f86e2e70648a98acf0528b0b65c36e02fff870f794451964d8207fb75278cac13fb991bb4dff4c6ddee1a0fee7c5273eff291e2f99cea4de43e53fca9177478563526d0765abe7705b1808f79400456d5236a93fd20edc2081b46c087d9fa6a413e1a0fee7c5273eff291e2f99cea4de43e53fca9177478563526d0765abe7705b180880a09c7c67faaffa61cb9650a41f8765510af1d4876d87dc8f2b3c89c187cd6c1088a05b0b8c14f0b39267f16cfdf7ceb95c4e93cde6c05e8d18fd9f5d43a9b7d485c8", + "signatureLegacy": { + "r": "0xe0e954fe6e08e3f4d1265663aa0d43a845a71b75cce5bb970d81524266a8aafc", + "s": "0x714a340884a63df9998132928358e1d725dc22c742295672252cd89dca206b96", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xb28bce642330c23c472853e2d3a5138b0e6da1cb04bfa274bcd35c9d9a9f9b8e", + "s": "0x1e8116ce66625e8f779673a2dafdafa13eb70b1cb89861ef56c60c68185cb9ca", + "v": "0x5f" + }, + "signatureBerlin": { + "r": "0x8a0d7ff01052049a2a55a0e8056b7103fa152bca0270f02d8a6ed514294294a3", + "s": "0x2c9772fed884149b65f2b361151cdfec1f662e1f82733d61e6dfd4e62901a0c4", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x9c7c67faaffa61cb9650a41f8765510af1d4876d87dc8f2b3c89c187cd6c1088", + "s": "0x5b0b8c14f0b39267f16cfdf7ceb95c4e93cde6c05e8d18fd9f5d43a9b7d485c8", + "v": "0x0" + } + }, + { + "name": "random-85", + "transaction": { + "to": "0x738e00821d153Dcec376712b6ADD16fc47F338aE", + "nonce": 13, + "gasLimit": "0xa738", + "gasPrice": "0x8ab887", + "maxFeePerGas": "0x3f509676", + "maxPriorityFeePerGas": "0x7096", + "data": "0x72fd97f95ee06836ba1e1f7a38687b2373a869368e8e4ed6aa13fe1a51314a9d6fcefe2def5cb03b0e89ed", + "value": "0x8f", + "accessList": [ + { + "address": "0x4efD2cC4d144c522A33221C79d2154af3C43976e", + "storageKeys": [] + } + ], + "chainId": "0xc5" + }, + "privateKey": "0x16968fd6ccf45729052a8df3ec292a9a6fc134632dc9c34586ca5cef83ea62b8", + "unsignedLegacy": "0xf84b0d838ab88782a73894738e00821d153dcec376712b6add16fc47f338ae818fab72fd97f95ee06836ba1e1f7a38687b2373a869368e8e4ed6aa13fe1a51314a9d6fcefe2def5cb03b0e89ed", + "unsignedEip155": "0xf84f0d838ab88782a73894738e00821d153dcec376712b6add16fc47f338ae818fab72fd97f95ee06836ba1e1f7a38687b2373a869368e8e4ed6aa13fe1a51314a9d6fcefe2def5cb03b0e89ed81c58080", + "unsignedBerlin": "0x01f86581c50d838ab88782a73894738e00821d153dcec376712b6add16fc47f338ae818fab72fd97f95ee06836ba1e1f7a38687b2373a869368e8e4ed6aa13fe1a51314a9d6fcefe2def5cb03b0e89edd7d6944efd2cc4d144c522a33221c79d2154af3c43976ec0", + "unsignedLondon": "0x02f86981c50d827096843f50967682a73894738e00821d153dcec376712b6add16fc47f338ae818fab72fd97f95ee06836ba1e1f7a38687b2373a869368e8e4ed6aa13fe1a51314a9d6fcefe2def5cb03b0e89edd7d6944efd2cc4d144c522a33221c79d2154af3c43976ec0", + "signedLegacy": "0xf88e0d838ab88782a73894738e00821d153dcec376712b6add16fc47f338ae818fab72fd97f95ee06836ba1e1f7a38687b2373a869368e8e4ed6aa13fe1a51314a9d6fcefe2def5cb03b0e89ed1ba03364ba030396677ca70340ba0044dfce09dd1f2772a51a8819e5292460277554a005722c69970a666eaf084c25cc9e63aae9d3cebf8077c5428a11b850a619ba0e", + "signedEip155": "0xf8900d838ab88782a73894738e00821d153dcec376712b6add16fc47f338ae818fab72fd97f95ee06836ba1e1f7a38687b2373a869368e8e4ed6aa13fe1a51314a9d6fcefe2def5cb03b0e89ed8201aea03039dbb81e50a266a28c41dadd65504106cbd615c0ffbb2ad49b1ffc3abe9233a0377cddcef12d808e2c3f765e98d3f03a617356ad7dcddda7d9c58e0c8b9c37a9", + "signedBerlin": "0x01f8a881c50d838ab88782a73894738e00821d153dcec376712b6add16fc47f338ae818fab72fd97f95ee06836ba1e1f7a38687b2373a869368e8e4ed6aa13fe1a51314a9d6fcefe2def5cb03b0e89edd7d6944efd2cc4d144c522a33221c79d2154af3c43976ec001a0bb8c89e7a442d509f0e7ba28341125eed2d1b0ceaded88ff778eb7e6c0532bb7a045587dd1741070a310a343be14576a5520fcc1f07b71b380bb135021b108484f", + "signedLondon": "0x02f8ac81c50d827096843f50967682a73894738e00821d153dcec376712b6add16fc47f338ae818fab72fd97f95ee06836ba1e1f7a38687b2373a869368e8e4ed6aa13fe1a51314a9d6fcefe2def5cb03b0e89edd7d6944efd2cc4d144c522a33221c79d2154af3c43976ec001a0e67e8c8dad53d2b81d30e8334c2f2ff69bc1ebe78fb04ad99a55bd4578ce6f59a0373f4b15e3d4188413ad5b223bc5364a2923bd0208f1ca7d97065c39d1d46725", + "signatureLegacy": { + "r": "0x3364ba030396677ca70340ba0044dfce09dd1f2772a51a8819e5292460277554", + "s": "0x05722c69970a666eaf084c25cc9e63aae9d3cebf8077c5428a11b850a619ba0e", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x3039dbb81e50a266a28c41dadd65504106cbd615c0ffbb2ad49b1ffc3abe9233", + "s": "0x377cddcef12d808e2c3f765e98d3f03a617356ad7dcddda7d9c58e0c8b9c37a9", + "v": "0x1ae" + }, + "signatureBerlin": { + "r": "0xbb8c89e7a442d509f0e7ba28341125eed2d1b0ceaded88ff778eb7e6c0532bb7", + "s": "0x45587dd1741070a310a343be14576a5520fcc1f07b71b380bb135021b108484f", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xe67e8c8dad53d2b81d30e8334c2f2ff69bc1ebe78fb04ad99a55bd4578ce6f59", + "s": "0x373f4b15e3d4188413ad5b223bc5364a2923bd0208f1ca7d97065c39d1d46725", + "v": "0x1" + } + }, + { + "name": "random-86", + "transaction": { + "to": "0xf5a539AaB57701a95d60e29F6743ffb6B85B3c10", + "nonce": 370, + "gasLimit": "0x45de63", + "gasPrice": "0xc91e7847a9", + "maxFeePerGas": "0x3a7ee3f1a271", + "maxPriorityFeePerGas": "0x7ba262", + "data": "0xb50e9b2bc808c09b7604fadea791fcb725e38a1175b2a355d0d826386850b38f372a76cd81ac2e9095e122b5fda203c064a54c9ebb5578b66331450984a1c8c73e7148388409eedb458114ee896567efcfaa65fff345ab914dc45ab23f8b5f258016f433b64100e194d96e9deeb142d8f62656", + "value": "0x80c31f", + "accessList": [ + { + "address": "0x7686321bB0cA6Be92Dd3141B8Fa55E763720cf41", + "storageKeys": [ + "0xba3c3083c0d3ed74b0db8ec526727ffdc6e32a84bafe2b709c861d35f39cbd3c" + ] + } + ], + "chainId": "0x0c8bd0a121" + }, + "privateKey": "0x585d6263c410504874d57b4ef8afc891f456d50b15a06bed33d6809fb021193e", + "unsignedLegacy": "0xf89b82017285c91e7847a98345de6394f5a539aab57701a95d60e29f6743ffb6b85b3c108380c31fb873b50e9b2bc808c09b7604fadea791fcb725e38a1175b2a355d0d826386850b38f372a76cd81ac2e9095e122b5fda203c064a54c9ebb5578b66331450984a1c8c73e7148388409eedb458114ee896567efcfaa65fff345ab914dc45ab23f8b5f258016f433b64100e194d96e9deeb142d8f62656", + "unsignedEip155": "0xf8a382017285c91e7847a98345de6394f5a539aab57701a95d60e29f6743ffb6b85b3c108380c31fb873b50e9b2bc808c09b7604fadea791fcb725e38a1175b2a355d0d826386850b38f372a76cd81ac2e9095e122b5fda203c064a54c9ebb5578b66331450984a1c8c73e7148388409eedb458114ee896567efcfaa65fff345ab914dc45ab23f8b5f258016f433b64100e194d96e9deeb142d8f62656850c8bd0a1218080", + "unsignedBerlin": "0x01f8db850c8bd0a12182017285c91e7847a98345de6394f5a539aab57701a95d60e29f6743ffb6b85b3c108380c31fb873b50e9b2bc808c09b7604fadea791fcb725e38a1175b2a355d0d826386850b38f372a76cd81ac2e9095e122b5fda203c064a54c9ebb5578b66331450984a1c8c73e7148388409eedb458114ee896567efcfaa65fff345ab914dc45ab23f8b5f258016f433b64100e194d96e9deeb142d8f62656f838f7947686321bb0ca6be92dd3141b8fa55e763720cf41e1a0ba3c3083c0d3ed74b0db8ec526727ffdc6e32a84bafe2b709c861d35f39cbd3c", + "unsignedLondon": "0x02f8e0850c8bd0a121820172837ba262863a7ee3f1a2718345de6394f5a539aab57701a95d60e29f6743ffb6b85b3c108380c31fb873b50e9b2bc808c09b7604fadea791fcb725e38a1175b2a355d0d826386850b38f372a76cd81ac2e9095e122b5fda203c064a54c9ebb5578b66331450984a1c8c73e7148388409eedb458114ee896567efcfaa65fff345ab914dc45ab23f8b5f258016f433b64100e194d96e9deeb142d8f62656f838f7947686321bb0ca6be92dd3141b8fa55e763720cf41e1a0ba3c3083c0d3ed74b0db8ec526727ffdc6e32a84bafe2b709c861d35f39cbd3c", + "signedLegacy": "0xf8de82017285c91e7847a98345de6394f5a539aab57701a95d60e29f6743ffb6b85b3c108380c31fb873b50e9b2bc808c09b7604fadea791fcb725e38a1175b2a355d0d826386850b38f372a76cd81ac2e9095e122b5fda203c064a54c9ebb5578b66331450984a1c8c73e7148388409eedb458114ee896567efcfaa65fff345ab914dc45ab23f8b5f258016f433b64100e194d96e9deeb142d8f626561ca0c823c403a9bd9ee2c6025d2e2250997deda18d8c9e0fd4cba8548bff12aaee9da04536df200e2fb59abd6ccce6b6e1379cfdfd51945fd3a875a72ff0be4b0dccba", + "signedEip155": "0xf8e382017285c91e7847a98345de6394f5a539aab57701a95d60e29f6743ffb6b85b3c108380c31fb873b50e9b2bc808c09b7604fadea791fcb725e38a1175b2a355d0d826386850b38f372a76cd81ac2e9095e122b5fda203c064a54c9ebb5578b66331450984a1c8c73e7148388409eedb458114ee896567efcfaa65fff345ab914dc45ab23f8b5f258016f433b64100e194d96e9deeb142d8f62656851917a14266a0505e87152fa123879b064936b25867fe12029b13ed44c3003e76e6f8cb63c973a03599cdd431e62c26240bdb8f034dc5aa18a284909f94cdcd7283115484879046", + "signedBerlin": "0x01f9011e850c8bd0a12182017285c91e7847a98345de6394f5a539aab57701a95d60e29f6743ffb6b85b3c108380c31fb873b50e9b2bc808c09b7604fadea791fcb725e38a1175b2a355d0d826386850b38f372a76cd81ac2e9095e122b5fda203c064a54c9ebb5578b66331450984a1c8c73e7148388409eedb458114ee896567efcfaa65fff345ab914dc45ab23f8b5f258016f433b64100e194d96e9deeb142d8f62656f838f7947686321bb0ca6be92dd3141b8fa55e763720cf41e1a0ba3c3083c0d3ed74b0db8ec526727ffdc6e32a84bafe2b709c861d35f39cbd3c01a00c82805cb9358ce0e95b71d4e39683d4ca6d15c5ca6ae9a190ea0b28e169b0b9a04345450885a5f363f8a2a61e2e54dea426aa1af9267d69cd987b0609e14ec0a4", + "signedLondon": "0x02f90123850c8bd0a121820172837ba262863a7ee3f1a2718345de6394f5a539aab57701a95d60e29f6743ffb6b85b3c108380c31fb873b50e9b2bc808c09b7604fadea791fcb725e38a1175b2a355d0d826386850b38f372a76cd81ac2e9095e122b5fda203c064a54c9ebb5578b66331450984a1c8c73e7148388409eedb458114ee896567efcfaa65fff345ab914dc45ab23f8b5f258016f433b64100e194d96e9deeb142d8f62656f838f7947686321bb0ca6be92dd3141b8fa55e763720cf41e1a0ba3c3083c0d3ed74b0db8ec526727ffdc6e32a84bafe2b709c861d35f39cbd3c80a04e2af0d5d20ae5bd986fca87d75180c8538da43829ad6fbd3c73741ac20b17faa0340c83c84c8aba15d660e33462fbfd08d02025cc1e1c32d1c48f59683919320e", + "signatureLegacy": { + "r": "0xc823c403a9bd9ee2c6025d2e2250997deda18d8c9e0fd4cba8548bff12aaee9d", + "s": "0x4536df200e2fb59abd6ccce6b6e1379cfdfd51945fd3a875a72ff0be4b0dccba", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x505e87152fa123879b064936b25867fe12029b13ed44c3003e76e6f8cb63c973", + "s": "0x3599cdd431e62c26240bdb8f034dc5aa18a284909f94cdcd7283115484879046", + "v": "0x1917a14266" + }, + "signatureBerlin": { + "r": "0x0c82805cb9358ce0e95b71d4e39683d4ca6d15c5ca6ae9a190ea0b28e169b0b9", + "s": "0x4345450885a5f363f8a2a61e2e54dea426aa1af9267d69cd987b0609e14ec0a4", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x4e2af0d5d20ae5bd986fca87d75180c8538da43829ad6fbd3c73741ac20b17fa", + "s": "0x340c83c84c8aba15d660e33462fbfd08d02025cc1e1c32d1c48f59683919320e", + "v": "0x0" + } + }, + { + "name": "random-87", + "transaction": { + "to": "0x438d2b3609CC8abE7b995bF1cf049583e8E6f593", + "nonce": 568, + "gasLimit": "0xdd7404edd9", + "gasPrice": "0xed", + "maxFeePerGas": "0x440ae26b", + "maxPriorityFeePerGas": "0xde7708", + "data": "0x936aa1b33e9fe589ec829de82a24cfdfb4f51b", + "value": "0xb494d92d76", + "accessList": [ + { + "address": "0xa79B83cd6f7271Df23726BF834747F26064eF2e6", + "storageKeys": [] + } + ], + "chainId": "0xdce47d" + }, + "privateKey": "0x0471f676418c1f3cc8305025ce913e271c62064302cfc52a3cbcee02ffae444e", + "unsignedLegacy": "0xf83a82023881ed85dd7404edd994438d2b3609cc8abe7b995bf1cf049583e8e6f59385b494d92d7693936aa1b33e9fe589ec829de82a24cfdfb4f51b", + "unsignedEip155": "0xf84082023881ed85dd7404edd994438d2b3609cc8abe7b995bf1cf049583e8e6f59385b494d92d7693936aa1b33e9fe589ec829de82a24cfdfb4f51b83dce47d8080", + "unsignedBerlin": "0x01f85683dce47d82023881ed85dd7404edd994438d2b3609cc8abe7b995bf1cf049583e8e6f59385b494d92d7693936aa1b33e9fe589ec829de82a24cfdfb4f51bd7d694a79b83cd6f7271df23726bf834747f26064ef2e6c0", + "unsignedLondon": "0x02f85d83dce47d82023883de770884440ae26b85dd7404edd994438d2b3609cc8abe7b995bf1cf049583e8e6f59385b494d92d7693936aa1b33e9fe589ec829de82a24cfdfb4f51bd7d694a79b83cd6f7271df23726bf834747f26064ef2e6c0", + "signedLegacy": "0xf87d82023881ed85dd7404edd994438d2b3609cc8abe7b995bf1cf049583e8e6f59385b494d92d7693936aa1b33e9fe589ec829de82a24cfdfb4f51b1ba005e2d32fd18f63a1013a66b39ed99094921723320adae275c2c8a49e20a34e37a0781b99b673417bf219dbdc8701eab78fa959307017be62358f66f31f6b4a0a49", + "signedEip155": "0xf88182023881ed85dd7404edd994438d2b3609cc8abe7b995bf1cf049583e8e6f59385b494d92d7693936aa1b33e9fe589ec829de82a24cfdfb4f51b8401b9c91ea09cc5a99d7e0ee3d2ab127db8204b86c874308e1223355fe30faad9274daab53aa051def6b7adcb32a43c95811d2c33022b0fcb018f525af3e68b31670d6f6654f7", + "signedBerlin": "0x01f89983dce47d82023881ed85dd7404edd994438d2b3609cc8abe7b995bf1cf049583e8e6f59385b494d92d7693936aa1b33e9fe589ec829de82a24cfdfb4f51bd7d694a79b83cd6f7271df23726bf834747f26064ef2e6c080a02d3a89c5598c9c7f767e8f33dcbeee7bae03d8cca5feb60fa25b1290c5a254bca04145f646a8cf45458351e477f3f79e8226098d6cbf5429336f2f499fb4a5c5c7", + "signedLondon": "0x02f8a083dce47d82023883de770884440ae26b85dd7404edd994438d2b3609cc8abe7b995bf1cf049583e8e6f59385b494d92d7693936aa1b33e9fe589ec829de82a24cfdfb4f51bd7d694a79b83cd6f7271df23726bf834747f26064ef2e6c001a0382efc39572d37d44ecea76edcbce133dc0838c9538320eb72959fbff6821613a06aa004ef7b52fd7b120bdd9deb70f4adc42dceb531ee3f3e8d41c9cbb0adf177", + "signatureLegacy": { + "r": "0x05e2d32fd18f63a1013a66b39ed99094921723320adae275c2c8a49e20a34e37", + "s": "0x781b99b673417bf219dbdc8701eab78fa959307017be62358f66f31f6b4a0a49", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x9cc5a99d7e0ee3d2ab127db8204b86c874308e1223355fe30faad9274daab53a", + "s": "0x51def6b7adcb32a43c95811d2c33022b0fcb018f525af3e68b31670d6f6654f7", + "v": "0x1b9c91e" + }, + "signatureBerlin": { + "r": "0x2d3a89c5598c9c7f767e8f33dcbeee7bae03d8cca5feb60fa25b1290c5a254bc", + "s": "0x4145f646a8cf45458351e477f3f79e8226098d6cbf5429336f2f499fb4a5c5c7", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x382efc39572d37d44ecea76edcbce133dc0838c9538320eb72959fbff6821613", + "s": "0x6aa004ef7b52fd7b120bdd9deb70f4adc42dceb531ee3f3e8d41c9cbb0adf177", + "v": "0x1" + } + }, + { + "name": "random-89", + "transaction": { + "to": "0xe9245ea707d23326d211e9A21481F16CBc1577d5", + "nonce": 655, + "gasLimit": "0xc95753e036", + "gasPrice": "0x10ad61c66e", + "maxFeePerGas": "0xd4d682c966ad", + "maxPriorityFeePerGas": "0x67a304", + "data": "0xe029fe6e6042731ea3cd9a61a5e5010a715ad49ab352b8887efdeffa3413ab90c2ed60ccbd37a96bcd3d5843c89253629d0bf20a9bbb0f02b14b2e61a4", + "value": "0x784b51db", + "accessList": [ + { + "address": "0x0D7379d9879dF8545034E0F3a04c9a8B5685c470", + "storageKeys": [ + "0x9fbd0c94635f66de2183db6259f79af345603071ebd06f5275530690f2dd967a", + "0x1dbc647cb094104688cc800c04a9f4ce356606469f7aaf0889a4ccd084925ccd", + "0x16ac0a852763036118c175fe5a86811c7ed8ba75bd427a63985b8a3c81e08829" + ] + }, + { + "address": "0x07c936c01804b467d098543215BE81115dE41555", + "storageKeys": [ + "0x9fbd0c94635f66de2183db6259f79af345603071ebd06f5275530690f2dd967a", + "0x1dbc647cb094104688cc800c04a9f4ce356606469f7aaf0889a4ccd084925ccd", + "0x16ac0a852763036118c175fe5a86811c7ed8ba75bd427a63985b8a3c81e08829" + ] + } + ], + "chainId": "0x32" + }, + "privateKey": "0x29027af6a9843bfac96994bcecebe57b40d67942fdededc72a513a0bb2a9d8b0", + "unsignedLegacy": "0xf86882028f8510ad61c66e85c95753e03694e9245ea707d23326d211e9a21481f16cbc1577d584784b51dbb83de029fe6e6042731ea3cd9a61a5e5010a715ad49ab352b8887efdeffa3413ab90c2ed60ccbd37a96bcd3d5843c89253629d0bf20a9bbb0f02b14b2e61a4", + "unsignedEip155": "0xf86b82028f8510ad61c66e85c95753e03694e9245ea707d23326d211e9a21481f16cbc1577d584784b51dbb83de029fe6e6042731ea3cd9a61a5e5010a715ad49ab352b8887efdeffa3413ab90c2ed60ccbd37a96bcd3d5843c89253629d0bf20a9bbb0f02b14b2e61a4328080", + "unsignedBerlin": "0x01f901633282028f8510ad61c66e85c95753e03694e9245ea707d23326d211e9a21481f16cbc1577d584784b51dbb83de029fe6e6042731ea3cd9a61a5e5010a715ad49ab352b8887efdeffa3413ab90c2ed60ccbd37a96bcd3d5843c89253629d0bf20a9bbb0f02b14b2e61a4f8f8f87a940d7379d9879df8545034e0f3a04c9a8b5685c470f863a09fbd0c94635f66de2183db6259f79af345603071ebd06f5275530690f2dd967aa01dbc647cb094104688cc800c04a9f4ce356606469f7aaf0889a4ccd084925ccda016ac0a852763036118c175fe5a86811c7ed8ba75bd427a63985b8a3c81e08829f87a9407c936c01804b467d098543215be81115de41555f863a09fbd0c94635f66de2183db6259f79af345603071ebd06f5275530690f2dd967aa01dbc647cb094104688cc800c04a9f4ce356606469f7aaf0889a4ccd084925ccda016ac0a852763036118c175fe5a86811c7ed8ba75bd427a63985b8a3c81e08829", + "unsignedLondon": "0x02f901683282028f8367a30486d4d682c966ad85c95753e03694e9245ea707d23326d211e9a21481f16cbc1577d584784b51dbb83de029fe6e6042731ea3cd9a61a5e5010a715ad49ab352b8887efdeffa3413ab90c2ed60ccbd37a96bcd3d5843c89253629d0bf20a9bbb0f02b14b2e61a4f8f8f87a940d7379d9879df8545034e0f3a04c9a8b5685c470f863a09fbd0c94635f66de2183db6259f79af345603071ebd06f5275530690f2dd967aa01dbc647cb094104688cc800c04a9f4ce356606469f7aaf0889a4ccd084925ccda016ac0a852763036118c175fe5a86811c7ed8ba75bd427a63985b8a3c81e08829f87a9407c936c01804b467d098543215be81115de41555f863a09fbd0c94635f66de2183db6259f79af345603071ebd06f5275530690f2dd967aa01dbc647cb094104688cc800c04a9f4ce356606469f7aaf0889a4ccd084925ccda016ac0a852763036118c175fe5a86811c7ed8ba75bd427a63985b8a3c81e08829", + "signedLegacy": "0xf8ab82028f8510ad61c66e85c95753e03694e9245ea707d23326d211e9a21481f16cbc1577d584784b51dbb83de029fe6e6042731ea3cd9a61a5e5010a715ad49ab352b8887efdeffa3413ab90c2ed60ccbd37a96bcd3d5843c89253629d0bf20a9bbb0f02b14b2e61a41ba006094d0eef80081f45f9c9d33007e9ab3861502a254f4ca53ff29c16ebd79344a00db1643b02f824a4f34af615083ae242fea5d42e5b00904178f93e7048d3ea42", + "signedEip155": "0xf8ac82028f8510ad61c66e85c95753e03694e9245ea707d23326d211e9a21481f16cbc1577d584784b51dbb83de029fe6e6042731ea3cd9a61a5e5010a715ad49ab352b8887efdeffa3413ab90c2ed60ccbd37a96bcd3d5843c89253629d0bf20a9bbb0f02b14b2e61a48188a0cdbbeebc9ccb72d569ed2ca99b19c4917089b70221c112e3b30f999d8170ec97a057220efd894a5232d4534c3c12c9d8d9cbe1748855356ae97095dc14099ef805", + "signedBerlin": "0x01f901a63282028f8510ad61c66e85c95753e03694e9245ea707d23326d211e9a21481f16cbc1577d584784b51dbb83de029fe6e6042731ea3cd9a61a5e5010a715ad49ab352b8887efdeffa3413ab90c2ed60ccbd37a96bcd3d5843c89253629d0bf20a9bbb0f02b14b2e61a4f8f8f87a940d7379d9879df8545034e0f3a04c9a8b5685c470f863a09fbd0c94635f66de2183db6259f79af345603071ebd06f5275530690f2dd967aa01dbc647cb094104688cc800c04a9f4ce356606469f7aaf0889a4ccd084925ccda016ac0a852763036118c175fe5a86811c7ed8ba75bd427a63985b8a3c81e08829f87a9407c936c01804b467d098543215be81115de41555f863a09fbd0c94635f66de2183db6259f79af345603071ebd06f5275530690f2dd967aa01dbc647cb094104688cc800c04a9f4ce356606469f7aaf0889a4ccd084925ccda016ac0a852763036118c175fe5a86811c7ed8ba75bd427a63985b8a3c81e0882901a03f49f7dd99e5a849a6d2186dd917c175c9509a28ee8e2fd9e91d7daebe303618a06bf3a37f3d53b658d9c002859805632e5659653d6bc66fd45780ac61d5d66c99", + "signedLondon": "0x02f901ab3282028f8367a30486d4d682c966ad85c95753e03694e9245ea707d23326d211e9a21481f16cbc1577d584784b51dbb83de029fe6e6042731ea3cd9a61a5e5010a715ad49ab352b8887efdeffa3413ab90c2ed60ccbd37a96bcd3d5843c89253629d0bf20a9bbb0f02b14b2e61a4f8f8f87a940d7379d9879df8545034e0f3a04c9a8b5685c470f863a09fbd0c94635f66de2183db6259f79af345603071ebd06f5275530690f2dd967aa01dbc647cb094104688cc800c04a9f4ce356606469f7aaf0889a4ccd084925ccda016ac0a852763036118c175fe5a86811c7ed8ba75bd427a63985b8a3c81e08829f87a9407c936c01804b467d098543215be81115de41555f863a09fbd0c94635f66de2183db6259f79af345603071ebd06f5275530690f2dd967aa01dbc647cb094104688cc800c04a9f4ce356606469f7aaf0889a4ccd084925ccda016ac0a852763036118c175fe5a86811c7ed8ba75bd427a63985b8a3c81e0882980a094f608852e3f9a76627cc3a0150dc018d47e3766b6dabcc77ea3beaf77a67df3a0109c49c96c7c19bbf823362d0f2a1ce25fb50991b81a8f622055bf33f83508d5", + "signatureLegacy": { + "r": "0x06094d0eef80081f45f9c9d33007e9ab3861502a254f4ca53ff29c16ebd79344", + "s": "0x0db1643b02f824a4f34af615083ae242fea5d42e5b00904178f93e7048d3ea42", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xcdbbeebc9ccb72d569ed2ca99b19c4917089b70221c112e3b30f999d8170ec97", + "s": "0x57220efd894a5232d4534c3c12c9d8d9cbe1748855356ae97095dc14099ef805", + "v": "0x88" + }, + "signatureBerlin": { + "r": "0x3f49f7dd99e5a849a6d2186dd917c175c9509a28ee8e2fd9e91d7daebe303618", + "s": "0x6bf3a37f3d53b658d9c002859805632e5659653d6bc66fd45780ac61d5d66c99", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x94f608852e3f9a76627cc3a0150dc018d47e3766b6dabcc77ea3beaf77a67df3", + "s": "0x109c49c96c7c19bbf823362d0f2a1ce25fb50991b81a8f622055bf33f83508d5", + "v": "0x0" + } + }, + { + "name": "random-92", + "transaction": { + "to": "0x9843b8294222B557E29E6c5cC5f5Df02614c0d26", + "nonce": 146, + "gasLimit": "0xbfb56a65", + "gasPrice": "0x6364", + "maxFeePerGas": "0x985d56a8", + "maxPriorityFeePerGas": "0xb8", + "data": "0x4008bf93ddd614e9ae1f7d5fd93803c63187564ee380cb49a59eef242d474d8b5d6d5d3e00db2c1f42d056bc41facf40928ec4f863c47fa0f33f63498ee0443d9ab6cf40d51147e22a4d0f8de5e5915f931e0057", + "value": "0x72c6a7", + "accessList": [ + { + "address": "0xa62597d755fbf70449378EE68a20c5A9868b638d", + "storageKeys": [ + "0xeecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90ec", + "0xf1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2", + "0xcb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875", + "0x667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6" + ] + }, + { + "address": "0xa7Ba97561236A12Ae145CeB37e68e9B70032Ac24", + "storageKeys": [ + "0xeecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90ec", + "0xf1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2", + "0xcb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875", + "0x667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6" + ] + }, + { + "address": "0x9E5cbFb2431afB1CE946dF03f001091261612DE5", + "storageKeys": [ + "0xeecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90ec", + "0xf1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2", + "0xcb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875", + "0x667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6" + ] + }, + { + "address": "0xee14B71526DEF4c5e602d7ae747dd9a6875C7714", + "storageKeys": [ + "0xeecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90ec", + "0xf1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2", + "0xcb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875", + "0x667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6" + ] + } + ], + "chainId": "0xa1ff150e5f" + }, + "privateKey": "0xeaac01457a987ac5262cad6c2757468a689aee11bdc7dbc3630fafa2b4a3929e", + "unsignedLegacy": "0xf879819282636484bfb56a65949843b8294222b557e29e6c5cc5f5df02614c0d268372c6a7b8544008bf93ddd614e9ae1f7d5fd93803c63187564ee380cb49a59eef242d474d8b5d6d5d3e00db2c1f42d056bc41facf40928ec4f863c47fa0f33f63498ee0443d9ab6cf40d51147e22a4d0f8de5e5915f931e0057", + "unsignedEip155": "0xf881819282636484bfb56a65949843b8294222b557e29e6c5cc5f5df02614c0d268372c6a7b8544008bf93ddd614e9ae1f7d5fd93803c63187564ee380cb49a59eef242d474d8b5d6d5d3e00db2c1f42d056bc41facf40928ec4f863c47fa0f33f63498ee0443d9ab6cf40d51147e22a4d0f8de5e5915f931e005785a1ff150e5f8080", + "unsignedBerlin": "0x01f902f685a1ff150e5f819282636484bfb56a65949843b8294222b557e29e6c5cc5f5df02614c0d268372c6a7b8544008bf93ddd614e9ae1f7d5fd93803c63187564ee380cb49a59eef242d474d8b5d6d5d3e00db2c1f42d056bc41facf40928ec4f863c47fa0f33f63498ee0443d9ab6cf40d51147e22a4d0f8de5e5915f931e0057f90274f89b94a62597d755fbf70449378ee68a20c5a9868b638df884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6f89b94a7ba97561236a12ae145ceb37e68e9b70032ac24f884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6f89b949e5cbfb2431afb1ce946df03f001091261612de5f884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6f89b94ee14b71526def4c5e602d7ae747dd9a6875c7714f884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6", + "unsignedLondon": "0x02f902fa85a1ff150e5f819281b884985d56a884bfb56a65949843b8294222b557e29e6c5cc5f5df02614c0d268372c6a7b8544008bf93ddd614e9ae1f7d5fd93803c63187564ee380cb49a59eef242d474d8b5d6d5d3e00db2c1f42d056bc41facf40928ec4f863c47fa0f33f63498ee0443d9ab6cf40d51147e22a4d0f8de5e5915f931e0057f90274f89b94a62597d755fbf70449378ee68a20c5a9868b638df884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6f89b94a7ba97561236a12ae145ceb37e68e9b70032ac24f884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6f89b949e5cbfb2431afb1ce946df03f001091261612de5f884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6f89b94ee14b71526def4c5e602d7ae747dd9a6875c7714f884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6", + "signedLegacy": "0xf8bc819282636484bfb56a65949843b8294222b557e29e6c5cc5f5df02614c0d268372c6a7b8544008bf93ddd614e9ae1f7d5fd93803c63187564ee380cb49a59eef242d474d8b5d6d5d3e00db2c1f42d056bc41facf40928ec4f863c47fa0f33f63498ee0443d9ab6cf40d51147e22a4d0f8de5e5915f931e00571ba0fec23e4aae3048d18e280b673d538d807880a11b2bb7b359958aaba7d632b2a4a072037853902de0902ded8214442b52d1f0e17c3c2b40b478fcecec2e9ec3aa2c", + "signedEip155": "0xf8c2819282636484bfb56a65949843b8294222b557e29e6c5cc5f5df02614c0d268372c6a7b8544008bf93ddd614e9ae1f7d5fd93803c63187564ee380cb49a59eef242d474d8b5d6d5d3e00db2c1f42d056bc41facf40928ec4f863c47fa0f33f63498ee0443d9ab6cf40d51147e22a4d0f8de5e5915f931e0057860143fe2a1ce2a03deca8f7b9fc2280637737690b067c927d9c5ace5947832ac2326a26f9fcd506a05324db486f82fa900f675c8d6a3d23d212ee89ba4936523e730e4123573b530f", + "signedBerlin": "0x01f9033985a1ff150e5f819282636484bfb56a65949843b8294222b557e29e6c5cc5f5df02614c0d268372c6a7b8544008bf93ddd614e9ae1f7d5fd93803c63187564ee380cb49a59eef242d474d8b5d6d5d3e00db2c1f42d056bc41facf40928ec4f863c47fa0f33f63498ee0443d9ab6cf40d51147e22a4d0f8de5e5915f931e0057f90274f89b94a62597d755fbf70449378ee68a20c5a9868b638df884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6f89b94a7ba97561236a12ae145ceb37e68e9b70032ac24f884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6f89b949e5cbfb2431afb1ce946df03f001091261612de5f884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6f89b94ee14b71526def4c5e602d7ae747dd9a6875c7714f884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa601a066b63baa4a5f4194863b54e043e5f773b1da30949211723c4a408f4a893d84c5a0017d52eddaec3a2b4487046e12cfd360c89fda2d0889dc64d2a976614df212cd", + "signedLondon": "0x02f9033d85a1ff150e5f819281b884985d56a884bfb56a65949843b8294222b557e29e6c5cc5f5df02614c0d268372c6a7b8544008bf93ddd614e9ae1f7d5fd93803c63187564ee380cb49a59eef242d474d8b5d6d5d3e00db2c1f42d056bc41facf40928ec4f863c47fa0f33f63498ee0443d9ab6cf40d51147e22a4d0f8de5e5915f931e0057f90274f89b94a62597d755fbf70449378ee68a20c5a9868b638df884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6f89b94a7ba97561236a12ae145ceb37e68e9b70032ac24f884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6f89b949e5cbfb2431afb1ce946df03f001091261612de5f884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa6f89b94ee14b71526def4c5e602d7ae747dd9a6875c7714f884a0eecff36ca4a793303bfeb2f7666d3015f472177f92799c87fff30d28ad6e90eca0f1036466716147ac2615ed333a1a592cf8784c6692de2d848e6aba67379e98f2a0cb2d7d4ab4d9226e508aa2d9cd2d6016dbcbedce517f727e5aadf6b0ebe21875a0667066601b50ad91163654013e109e51fae6a8bf19a988a51adfda6aea130fa601a0c1525bd11266bbaa0b5e660e667070672396e978edb5b7a987cb8a77d5f3e4d8a01160d38ae48cbf52af90ecdb665f3c7b2662807c8b17b8d6b3d67396f6a5f7c6", + "signatureLegacy": { + "r": "0xfec23e4aae3048d18e280b673d538d807880a11b2bb7b359958aaba7d632b2a4", + "s": "0x72037853902de0902ded8214442b52d1f0e17c3c2b40b478fcecec2e9ec3aa2c", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x3deca8f7b9fc2280637737690b067c927d9c5ace5947832ac2326a26f9fcd506", + "s": "0x5324db486f82fa900f675c8d6a3d23d212ee89ba4936523e730e4123573b530f", + "v": "0x143fe2a1ce2" + }, + "signatureBerlin": { + "r": "0x66b63baa4a5f4194863b54e043e5f773b1da30949211723c4a408f4a893d84c5", + "s": "0x017d52eddaec3a2b4487046e12cfd360c89fda2d0889dc64d2a976614df212cd", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xc1525bd11266bbaa0b5e660e667070672396e978edb5b7a987cb8a77d5f3e4d8", + "s": "0x1160d38ae48cbf52af90ecdb665f3c7b2662807c8b17b8d6b3d67396f6a5f7c6", + "v": "0x1" + } + }, + { + "name": "random-95", + "transaction": { + "to": "0x7FCf2593fb964D4bAeA7ffE87B3f412100DAC621", + "nonce": 423, + "gasLimit": "0xf7cf0c5075", + "gasPrice": "0xe964c88a", + "maxFeePerGas": "0xa9ff5ad499bb", + "maxPriorityFeePerGas": "0x5296", + "data": "0xdb69d4bccca65789f9ffe0b83c58b282f59dab153145206de2a94e5c2c9c8d4df192ee0d7b4f74e1c862e1cefdc608b7b4766cfd5089710627b93c6f9ff2a70056479bc675acdc49a4f457a0762daa9a1924ff6cc3a46386d6830ed26411b34c50c1ef36a393a66d4447ea57ef6b275f8fbca8", + "value": "0xb9e88f4f", + "accessList": [], + "chainId": "0x602e72d185" + }, + "privateKey": "0x1a9ae40ca84938a9ee766abe7a928c112125e65ffb984ace323a3613418bc9b1", + "unsignedLegacy": "0xf89d8201a784e964c88a85f7cf0c5075947fcf2593fb964d4baea7ffe87b3f412100dac62184b9e88f4fb873db69d4bccca65789f9ffe0b83c58b282f59dab153145206de2a94e5c2c9c8d4df192ee0d7b4f74e1c862e1cefdc608b7b4766cfd5089710627b93c6f9ff2a70056479bc675acdc49a4f457a0762daa9a1924ff6cc3a46386d6830ed26411b34c50c1ef36a393a66d4447ea57ef6b275f8fbca8", + "unsignedEip155": "0xf8a58201a784e964c88a85f7cf0c5075947fcf2593fb964d4baea7ffe87b3f412100dac62184b9e88f4fb873db69d4bccca65789f9ffe0b83c58b282f59dab153145206de2a94e5c2c9c8d4df192ee0d7b4f74e1c862e1cefdc608b7b4766cfd5089710627b93c6f9ff2a70056479bc675acdc49a4f457a0762daa9a1924ff6cc3a46386d6830ed26411b34c50c1ef36a393a66d4447ea57ef6b275f8fbca885602e72d1858080", + "unsignedBerlin": "0x01f8a485602e72d1858201a784e964c88a85f7cf0c5075947fcf2593fb964d4baea7ffe87b3f412100dac62184b9e88f4fb873db69d4bccca65789f9ffe0b83c58b282f59dab153145206de2a94e5c2c9c8d4df192ee0d7b4f74e1c862e1cefdc608b7b4766cfd5089710627b93c6f9ff2a70056479bc675acdc49a4f457a0762daa9a1924ff6cc3a46386d6830ed26411b34c50c1ef36a393a66d4447ea57ef6b275f8fbca8c0", + "unsignedLondon": "0x02f8a985602e72d1858201a782529686a9ff5ad499bb85f7cf0c5075947fcf2593fb964d4baea7ffe87b3f412100dac62184b9e88f4fb873db69d4bccca65789f9ffe0b83c58b282f59dab153145206de2a94e5c2c9c8d4df192ee0d7b4f74e1c862e1cefdc608b7b4766cfd5089710627b93c6f9ff2a70056479bc675acdc49a4f457a0762daa9a1924ff6cc3a46386d6830ed26411b34c50c1ef36a393a66d4447ea57ef6b275f8fbca8c0", + "signedLegacy": "0xf8e08201a784e964c88a85f7cf0c5075947fcf2593fb964d4baea7ffe87b3f412100dac62184b9e88f4fb873db69d4bccca65789f9ffe0b83c58b282f59dab153145206de2a94e5c2c9c8d4df192ee0d7b4f74e1c862e1cefdc608b7b4766cfd5089710627b93c6f9ff2a70056479bc675acdc49a4f457a0762daa9a1924ff6cc3a46386d6830ed26411b34c50c1ef36a393a66d4447ea57ef6b275f8fbca81ba0c0a14ae7d5ef91085d32333a2699c87d211a67bb934199873a8e9cf230fc0a85a0064ec5e7127e4113334183dc84cd5438b54573a3555d559bcb1ad4a86d96d704", + "signedEip155": "0xf8e58201a784e964c88a85f7cf0c5075947fcf2593fb964d4baea7ffe87b3f412100dac62184b9e88f4fb873db69d4bccca65789f9ffe0b83c58b282f59dab153145206de2a94e5c2c9c8d4df192ee0d7b4f74e1c862e1cefdc608b7b4766cfd5089710627b93c6f9ff2a70056479bc675acdc49a4f457a0762daa9a1924ff6cc3a46386d6830ed26411b34c50c1ef36a393a66d4447ea57ef6b275f8fbca885c05ce5a32da0d47a417515ceec5eace31667efd6b7ff461a336591a023e5cfa581bf5491e668a07543ba18110c17e6b2042efa6f946246e08c494da18e89e7fe59cd35edb38557", + "signedBerlin": "0x01f8e785602e72d1858201a784e964c88a85f7cf0c5075947fcf2593fb964d4baea7ffe87b3f412100dac62184b9e88f4fb873db69d4bccca65789f9ffe0b83c58b282f59dab153145206de2a94e5c2c9c8d4df192ee0d7b4f74e1c862e1cefdc608b7b4766cfd5089710627b93c6f9ff2a70056479bc675acdc49a4f457a0762daa9a1924ff6cc3a46386d6830ed26411b34c50c1ef36a393a66d4447ea57ef6b275f8fbca8c080a047e527561d734444853b99d7382335c41a8e566718384440b4a1d506afda5862a074c0de65b5239ab601a3841f714dff0b0760066fb00ad66f21b9bdafa258c74a", + "signedLondon": "0x02f8ec85602e72d1858201a782529686a9ff5ad499bb85f7cf0c5075947fcf2593fb964d4baea7ffe87b3f412100dac62184b9e88f4fb873db69d4bccca65789f9ffe0b83c58b282f59dab153145206de2a94e5c2c9c8d4df192ee0d7b4f74e1c862e1cefdc608b7b4766cfd5089710627b93c6f9ff2a70056479bc675acdc49a4f457a0762daa9a1924ff6cc3a46386d6830ed26411b34c50c1ef36a393a66d4447ea57ef6b275f8fbca8c001a0345ebb601a19e7e4e4c33142f3c0c3e168a77f64c0623b05835c6afc1511a1cba0236d2616a8f14bd61fc3eb07f097002c0abae5f9bcacd4924f8b6a9f395de57e", + "signatureLegacy": { + "r": "0xc0a14ae7d5ef91085d32333a2699c87d211a67bb934199873a8e9cf230fc0a85", + "s": "0x064ec5e7127e4113334183dc84cd5438b54573a3555d559bcb1ad4a86d96d704", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xd47a417515ceec5eace31667efd6b7ff461a336591a023e5cfa581bf5491e668", + "s": "0x7543ba18110c17e6b2042efa6f946246e08c494da18e89e7fe59cd35edb38557", + "v": "0xc05ce5a32d" + }, + "signatureBerlin": { + "r": "0x47e527561d734444853b99d7382335c41a8e566718384440b4a1d506afda5862", + "s": "0x74c0de65b5239ab601a3841f714dff0b0760066fb00ad66f21b9bdafa258c74a", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x345ebb601a19e7e4e4c33142f3c0c3e168a77f64c0623b05835c6afc1511a1cb", + "s": "0x236d2616a8f14bd61fc3eb07f097002c0abae5f9bcacd4924f8b6a9f395de57e", + "v": "0x1" + } + }, + { + "name": "random-99", + "transaction": { + "to": "0x9f71e4c7FD19c4D5b29e886c54304468aC1d2F7c", + "nonce": 441, + "gasLimit": "0xe18b", + "gasPrice": "0xed805a23", + "maxFeePerGas": "0x83b12a8e1860", + "maxPriorityFeePerGas": "0xcf", + "data": "0xb4d954d784ad5653fa633d0cbe5cd8a77877715fefac840fab383ad4", + "value": "0xdec4c4c466", + "accessList": [ + { + "address": "0xb3E549AeB64c243D88782e927d6764E8dEBD78A4", + "storageKeys": [ + "0x4891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700", + "0x697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0", + "0xb40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f82" + ] + }, + { + "address": "0x86562A635B72301Ad01B3AE2800254e67c6f0b11", + "storageKeys": [ + "0x4891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700", + "0x697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0", + "0xb40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f82" + ] + }, + { + "address": "0x11Dc99a2F61C8e4391f3F23658E81ae4Aa4C1aCD", + "storageKeys": [ + "0x4891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700", + "0x697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0", + "0xb40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f82" + ] + } + ], + "chainId": "0x54ba26e0" + }, + "privateKey": "0x8a6ecc29cc77c8ed30964f4ad426b83e5a079c394eeb6108670d59ea82bbef12", + "unsignedLegacy": "0xf8438201b984ed805a2382e18b949f71e4c7fd19c4d5b29e886c54304468ac1d2f7c85dec4c4c4669cb4d954d784ad5653fa633d0cbe5cd8a77877715fefac840fab383ad4", + "unsignedEip155": "0xf84a8201b984ed805a2382e18b949f71e4c7fd19c4d5b29e886c54304468ac1d2f7c85dec4c4c4669cb4d954d784ad5653fa633d0cbe5cd8a77877715fefac840fab383ad48454ba26e08080", + "unsignedBerlin": "0x01f901bf8454ba26e08201b984ed805a2382e18b949f71e4c7fd19c4d5b29e886c54304468ac1d2f7c85dec4c4c4669cb4d954d784ad5653fa633d0cbe5cd8a77877715fefac840fab383ad4f90174f87a94b3e549aeb64c243d88782e927d6764e8debd78a4f863a04891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700a0697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0a0b40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f82f87a9486562a635b72301ad01b3ae2800254e67c6f0b11f863a04891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700a0697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0a0b40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f82f87a9411dc99a2f61c8e4391f3f23658e81ae4aa4c1acdf863a04891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700a0697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0a0b40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f82", + "unsignedLondon": "0x02f901c38454ba26e08201b981cf8683b12a8e186082e18b949f71e4c7fd19c4d5b29e886c54304468ac1d2f7c85dec4c4c4669cb4d954d784ad5653fa633d0cbe5cd8a77877715fefac840fab383ad4f90174f87a94b3e549aeb64c243d88782e927d6764e8debd78a4f863a04891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700a0697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0a0b40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f82f87a9486562a635b72301ad01b3ae2800254e67c6f0b11f863a04891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700a0697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0a0b40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f82f87a9411dc99a2f61c8e4391f3f23658e81ae4aa4c1acdf863a04891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700a0697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0a0b40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f82", + "signedLegacy": "0xf8868201b984ed805a2382e18b949f71e4c7fd19c4d5b29e886c54304468ac1d2f7c85dec4c4c4669cb4d954d784ad5653fa633d0cbe5cd8a77877715fefac840fab383ad41ba0c1c0630513436194dfe7e21ca8041d95546094535d3c695df1ecba74e87df700a07306bd300b67489bcb342d77ac7bff4aaed41200c6476bcb4ac6a38c62dfeef9", + "signedEip155": "0xf88a8201b984ed805a2382e18b949f71e4c7fd19c4d5b29e886c54304468ac1d2f7c85dec4c4c4669cb4d954d784ad5653fa633d0cbe5cd8a77877715fefac840fab383ad484a9744de4a06c840ab0fb36ba469dc10d1bb4fe545cb307183d11097d9125904ddfff765e90a02ea3aea65a682f3576e3ae5e44334fe18b0acad3a6d5b57e1786cba14af70e99", + "signedBerlin": "0x01f902028454ba26e08201b984ed805a2382e18b949f71e4c7fd19c4d5b29e886c54304468ac1d2f7c85dec4c4c4669cb4d954d784ad5653fa633d0cbe5cd8a77877715fefac840fab383ad4f90174f87a94b3e549aeb64c243d88782e927d6764e8debd78a4f863a04891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700a0697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0a0b40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f82f87a9486562a635b72301ad01b3ae2800254e67c6f0b11f863a04891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700a0697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0a0b40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f82f87a9411dc99a2f61c8e4391f3f23658e81ae4aa4c1acdf863a04891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700a0697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0a0b40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f8280a0e2ee977e552b0aa707061ff7a34a3904e8f1fbdfb97f2bed4a62db17914a0c7ba005bc2df7c6e25368bd9d5e3f3d8b219c04853b139323f415e698632d3e1b015a", + "signedLondon": "0x02f902068454ba26e08201b981cf8683b12a8e186082e18b949f71e4c7fd19c4d5b29e886c54304468ac1d2f7c85dec4c4c4669cb4d954d784ad5653fa633d0cbe5cd8a77877715fefac840fab383ad4f90174f87a94b3e549aeb64c243d88782e927d6764e8debd78a4f863a04891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700a0697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0a0b40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f82f87a9486562a635b72301ad01b3ae2800254e67c6f0b11f863a04891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700a0697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0a0b40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f82f87a9411dc99a2f61c8e4391f3f23658e81ae4aa4c1acdf863a04891561ee7a491b1762774c7ed021932602719f6897461f4f631759e8e737700a0697afd06f621b7f4a36588735cd00df8e4ffacbbe4b650bea69ce4e831b10fa0a0b40e5f70447e0386807c47454fd24880248b440f23135643f6ae65534f7a2f8280a093cf6184ebc5a03ca4d80a98a7010c1f3ecd29c3f030a54dcb3f35c246f85f43a064244ac73a4da7dd65d66c8ba8a975bab944301148a49f7556c29517c2b94872", + "signatureLegacy": { + "r": "0xc1c0630513436194dfe7e21ca8041d95546094535d3c695df1ecba74e87df700", + "s": "0x7306bd300b67489bcb342d77ac7bff4aaed41200c6476bcb4ac6a38c62dfeef9", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x6c840ab0fb36ba469dc10d1bb4fe545cb307183d11097d9125904ddfff765e90", + "s": "0x2ea3aea65a682f3576e3ae5e44334fe18b0acad3a6d5b57e1786cba14af70e99", + "v": "0xa9744de4" + }, + "signatureBerlin": { + "r": "0xe2ee977e552b0aa707061ff7a34a3904e8f1fbdfb97f2bed4a62db17914a0c7b", + "s": "0x05bc2df7c6e25368bd9d5e3f3d8b219c04853b139323f415e698632d3e1b015a", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x93cf6184ebc5a03ca4d80a98a7010c1f3ecd29c3f030a54dcb3f35c246f85f43", + "s": "0x64244ac73a4da7dd65d66c8ba8a975bab944301148a49f7556c29517c2b94872", + "v": "0x0" + } + }, + { + "name": "random-101", + "transaction": { + "to": "0x266Cc277694E42AeD00e176912b316d8a91aD200", + "nonce": 38, + "gasLimit": "0xabd316d639", + "gasPrice": "0xed4f", + "maxFeePerGas": "0x9c8c9e7256", + "maxPriorityFeePerGas": "0x26", + "data": "0x9073b6eecdf3c4c6d47c27e2754a923f461b79c523362b936ae59adaff5dc1857e78e568e4a1d128d73b117e42c94eef176f86a9782d9191463852afd6dd3a1abae36e821dcdcc749da3ccacd453a49ba1484ca8cc05a77fdca8e2b20b", + "value": "0x8420", + "accessList": [ + { + "address": "0x0Ab340b68F32b8d15469BB5A8cDDeB0167cD8430", + "storageKeys": [] + }, + { + "address": "0x2a4e426eb67e11405ab05AAC13b295828323E287", + "storageKeys": [] + }, + { + "address": "0xc95DF22A50869d5dd7cEf85456f8009EB577a667", + "storageKeys": [] + }, + { + "address": "0xFEc8439a686E117fC007519326C10D2E9E55D870", + "storageKeys": [] + } + ], + "chainId": "0x4d5819" + }, + "privateKey": "0x561fa09ba3b1e6efe0a2900a3c04a6321b6dcdf91a71234de95982294b661b0b", + "unsignedLegacy": "0xf8812682ed4f85abd316d63994266cc277694e42aed00e176912b316d8a91ad200828420b85d9073b6eecdf3c4c6d47c27e2754a923f461b79c523362b936ae59adaff5dc1857e78e568e4a1d128d73b117e42c94eef176f86a9782d9191463852afd6dd3a1abae36e821dcdcc749da3ccacd453a49ba1484ca8cc05a77fdca8e2b20b", + "unsignedEip155": "0xf8872682ed4f85abd316d63994266cc277694e42aed00e176912b316d8a91ad200828420b85d9073b6eecdf3c4c6d47c27e2754a923f461b79c523362b936ae59adaff5dc1857e78e568e4a1d128d73b117e42c94eef176f86a9782d9191463852afd6dd3a1abae36e821dcdcc749da3ccacd453a49ba1484ca8cc05a77fdca8e2b20b834d58198080", + "unsignedBerlin": "0x01f8e3834d58192682ed4f85abd316d63994266cc277694e42aed00e176912b316d8a91ad200828420b85d9073b6eecdf3c4c6d47c27e2754a923f461b79c523362b936ae59adaff5dc1857e78e568e4a1d128d73b117e42c94eef176f86a9782d9191463852afd6dd3a1abae36e821dcdcc749da3ccacd453a49ba1484ca8cc05a77fdca8e2b20bf85cd6940ab340b68f32b8d15469bb5a8cddeb0167cd8430c0d6942a4e426eb67e11405ab05aac13b295828323e287c0d694c95df22a50869d5dd7cef85456f8009eb577a667c0d694fec8439a686e117fc007519326c10d2e9e55d870c0", + "unsignedLondon": "0x02f8e7834d58192626859c8c9e725685abd316d63994266cc277694e42aed00e176912b316d8a91ad200828420b85d9073b6eecdf3c4c6d47c27e2754a923f461b79c523362b936ae59adaff5dc1857e78e568e4a1d128d73b117e42c94eef176f86a9782d9191463852afd6dd3a1abae36e821dcdcc749da3ccacd453a49ba1484ca8cc05a77fdca8e2b20bf85cd6940ab340b68f32b8d15469bb5a8cddeb0167cd8430c0d6942a4e426eb67e11405ab05aac13b295828323e287c0d694c95df22a50869d5dd7cef85456f8009eb577a667c0d694fec8439a686e117fc007519326c10d2e9e55d870c0", + "signedLegacy": "0xf8c42682ed4f85abd316d63994266cc277694e42aed00e176912b316d8a91ad200828420b85d9073b6eecdf3c4c6d47c27e2754a923f461b79c523362b936ae59adaff5dc1857e78e568e4a1d128d73b117e42c94eef176f86a9782d9191463852afd6dd3a1abae36e821dcdcc749da3ccacd453a49ba1484ca8cc05a77fdca8e2b20b1ba0d3f9083b362511f3d80bd62f9e54474eeafb117412fad6ccd360ab55852bfde3a057ad4573c784a6d2bd8a6cadf5aed50d2951817480e5273ef717cc5824cf028d", + "signedEip155": "0xf8c72682ed4f85abd316d63994266cc277694e42aed00e176912b316d8a91ad200828420b85d9073b6eecdf3c4c6d47c27e2754a923f461b79c523362b936ae59adaff5dc1857e78e568e4a1d128d73b117e42c94eef176f86a9782d9191463852afd6dd3a1abae36e821dcdcc749da3ccacd453a49ba1484ca8cc05a77fdca8e2b20b839ab056a0f55070e5898ea0ec3380c21b0ea8a44a588c70c0f2d6b895fc764e58d295efd0a06ccac28c32f7f9d8b2d6280a1c626c13e81c6e1c629aac30dfdf18f6b82212c2", + "signedBerlin": "0x01f90126834d58192682ed4f85abd316d63994266cc277694e42aed00e176912b316d8a91ad200828420b85d9073b6eecdf3c4c6d47c27e2754a923f461b79c523362b936ae59adaff5dc1857e78e568e4a1d128d73b117e42c94eef176f86a9782d9191463852afd6dd3a1abae36e821dcdcc749da3ccacd453a49ba1484ca8cc05a77fdca8e2b20bf85cd6940ab340b68f32b8d15469bb5a8cddeb0167cd8430c0d6942a4e426eb67e11405ab05aac13b295828323e287c0d694c95df22a50869d5dd7cef85456f8009eb577a667c0d694fec8439a686e117fc007519326c10d2e9e55d870c001a0ecfc0f4dd4c43f2d34ee4d8d7380fe6eadda6e9c2a113ae1955782616959b1e1a0058750bfad3b12c020aeba7b12ff681d5427310511251105607ddfd646b5cf29", + "signedLondon": "0x02f9012a834d58192626859c8c9e725685abd316d63994266cc277694e42aed00e176912b316d8a91ad200828420b85d9073b6eecdf3c4c6d47c27e2754a923f461b79c523362b936ae59adaff5dc1857e78e568e4a1d128d73b117e42c94eef176f86a9782d9191463852afd6dd3a1abae36e821dcdcc749da3ccacd453a49ba1484ca8cc05a77fdca8e2b20bf85cd6940ab340b68f32b8d15469bb5a8cddeb0167cd8430c0d6942a4e426eb67e11405ab05aac13b295828323e287c0d694c95df22a50869d5dd7cef85456f8009eb577a667c0d694fec8439a686e117fc007519326c10d2e9e55d870c080a08fbe3ecdac8542e92b28b6bc17d81a11cccabed96fd7829073a430faa3896d8ba031964fc2c71fc59431d39c68d3108d1da263abe22d8e4485984bfd569dab58e6", + "signatureLegacy": { + "r": "0xd3f9083b362511f3d80bd62f9e54474eeafb117412fad6ccd360ab55852bfde3", + "s": "0x57ad4573c784a6d2bd8a6cadf5aed50d2951817480e5273ef717cc5824cf028d", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xf55070e5898ea0ec3380c21b0ea8a44a588c70c0f2d6b895fc764e58d295efd0", + "s": "0x6ccac28c32f7f9d8b2d6280a1c626c13e81c6e1c629aac30dfdf18f6b82212c2", + "v": "0x9ab056" + }, + "signatureBerlin": { + "r": "0xecfc0f4dd4c43f2d34ee4d8d7380fe6eadda6e9c2a113ae1955782616959b1e1", + "s": "0x058750bfad3b12c020aeba7b12ff681d5427310511251105607ddfd646b5cf29", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x8fbe3ecdac8542e92b28b6bc17d81a11cccabed96fd7829073a430faa3896d8b", + "s": "0x31964fc2c71fc59431d39c68d3108d1da263abe22d8e4485984bfd569dab58e6", + "v": "0x0" + } + }, + { + "name": "random-103", + "transaction": { + "to": "0x32838632F7848fBa09DcCbBbfc4dD0d0fc1a21ae", + "nonce": 334, + "gasLimit": "0xb6aa8d247a", + "gasPrice": "0x67b6a74b", + "maxFeePerGas": "0x9bfd9f5335", + "maxPriorityFeePerGas": "0x481b", + "data": "0x7c10c28566ee5e565fb0249f6f01c876967d304870de1a4a8133da1a9112b8a8c767041017f896d1df4f9c564ee73ae83c5efa0df93fd52bd963199b39760b59c2d8", + "value": "0xb31f69", + "accessList": [], + "chainId": "0x98bcc6250d" + }, + "privateKey": "0x8f467fa56631c82400b54743f81e79d07dbe7589e7130815622ec9b9ed40337a", + "unsignedLegacy": "0xf86b82014e8467b6a74b85b6aa8d247a9432838632f7848fba09dccbbbfc4dd0d0fc1a21ae83b31f69b8427c10c28566ee5e565fb0249f6f01c876967d304870de1a4a8133da1a9112b8a8c767041017f896d1df4f9c564ee73ae83c5efa0df93fd52bd963199b39760b59c2d8", + "unsignedEip155": "0xf87382014e8467b6a74b85b6aa8d247a9432838632f7848fba09dccbbbfc4dd0d0fc1a21ae83b31f69b8427c10c28566ee5e565fb0249f6f01c876967d304870de1a4a8133da1a9112b8a8c767041017f896d1df4f9c564ee73ae83c5efa0df93fd52bd963199b39760b59c2d88598bcc6250d8080", + "unsignedBerlin": "0x01f8728598bcc6250d82014e8467b6a74b85b6aa8d247a9432838632f7848fba09dccbbbfc4dd0d0fc1a21ae83b31f69b8427c10c28566ee5e565fb0249f6f01c876967d304870de1a4a8133da1a9112b8a8c767041017f896d1df4f9c564ee73ae83c5efa0df93fd52bd963199b39760b59c2d8c0", + "unsignedLondon": "0x02f8768598bcc6250d82014e82481b859bfd9f533585b6aa8d247a9432838632f7848fba09dccbbbfc4dd0d0fc1a21ae83b31f69b8427c10c28566ee5e565fb0249f6f01c876967d304870de1a4a8133da1a9112b8a8c767041017f896d1df4f9c564ee73ae83c5efa0df93fd52bd963199b39760b59c2d8c0", + "signedLegacy": "0xf8ae82014e8467b6a74b85b6aa8d247a9432838632f7848fba09dccbbbfc4dd0d0fc1a21ae83b31f69b8427c10c28566ee5e565fb0249f6f01c876967d304870de1a4a8133da1a9112b8a8c767041017f896d1df4f9c564ee73ae83c5efa0df93fd52bd963199b39760b59c2d81ba007a29fc8d356948ad9c0d77e885f675f87a51fad01225eb8ccbe1475e34d5362a04406509959883f33c9a3a01c96602a1108058164527593d59d3bd83cad4b5f1b", + "signedEip155": "0xf8b482014e8467b6a74b85b6aa8d247a9432838632f7848fba09dccbbbfc4dd0d0fc1a21ae83b31f69b8427c10c28566ee5e565fb0249f6f01c876967d304870de1a4a8133da1a9112b8a8c767041017f896d1df4f9c564ee73ae83c5efa0df93fd52bd963199b39760b59c2d8860131798c4a3da021a88922756891963d2c5c7a2c914076320c34d94757088268679e6159817ab9a03d64ef41d3224104c3e0b33753df16c1d5fbada2be58fa3e233caec3102952a1", + "signedBerlin": "0x01f8b58598bcc6250d82014e8467b6a74b85b6aa8d247a9432838632f7848fba09dccbbbfc4dd0d0fc1a21ae83b31f69b8427c10c28566ee5e565fb0249f6f01c876967d304870de1a4a8133da1a9112b8a8c767041017f896d1df4f9c564ee73ae83c5efa0df93fd52bd963199b39760b59c2d8c080a0a7045de9f9eff8a4ba51094aec8eb107b9d367ef309dca419dfa61982ea5af6da0729d13493f40a410497c47a467b3c9c076887b886b1a602c2b34368647e4b55a", + "signedLondon": "0x02f8b98598bcc6250d82014e82481b859bfd9f533585b6aa8d247a9432838632f7848fba09dccbbbfc4dd0d0fc1a21ae83b31f69b8427c10c28566ee5e565fb0249f6f01c876967d304870de1a4a8133da1a9112b8a8c767041017f896d1df4f9c564ee73ae83c5efa0df93fd52bd963199b39760b59c2d8c001a018e50900802d8c6edd30617c7efd0ab74d6dcbad97657673f2f3482003f60fc0a0481644568083fb9005be4cb3751a5ba2d433252f4e47dc9e79d7d0ef96d097ce", + "signatureLegacy": { + "r": "0x07a29fc8d356948ad9c0d77e885f675f87a51fad01225eb8ccbe1475e34d5362", + "s": "0x4406509959883f33c9a3a01c96602a1108058164527593d59d3bd83cad4b5f1b", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x21a88922756891963d2c5c7a2c914076320c34d94757088268679e6159817ab9", + "s": "0x3d64ef41d3224104c3e0b33753df16c1d5fbada2be58fa3e233caec3102952a1", + "v": "0x131798c4a3d" + }, + "signatureBerlin": { + "r": "0xa7045de9f9eff8a4ba51094aec8eb107b9d367ef309dca419dfa61982ea5af6d", + "s": "0x729d13493f40a410497c47a467b3c9c076887b886b1a602c2b34368647e4b55a", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x18e50900802d8c6edd30617c7efd0ab74d6dcbad97657673f2f3482003f60fc0", + "s": "0x481644568083fb9005be4cb3751a5ba2d433252f4e47dc9e79d7d0ef96d097ce", + "v": "0x1" + } + }, + { + "name": "random-108", + "transaction": { + "to": "0xabe72878a51e28AbaFcAa14ac99bDB97B2e4D170", + "nonce": 480, + "gasLimit": "0x891f", + "gasPrice": "0x2e61c0a7d1", + "maxFeePerGas": "0x1f96cabb630b77", + "maxPriorityFeePerGas": "0x0f13", + "data": "0x08e7bc02435de0563f47dd2507bdf653e9f930b70fd49816c80affbe8119cc5d7bc6cbcece614100e8887f042681186daae9ff25ea16cc095cf7eb6555858bab20f76b1f4584d9da2b9b58c8a73a2c5c17f201f060a6b73e4eb5e30e6ca86dd6afa4215187aa9b", + "value": "0xfb", + "accessList": [ + { + "address": "0xB93b1cFDd998346a406f9C5631eeA082f8DDe274", + "storageKeys": [ + "0x08af322c4e39cff34a1319599a15d75f12aef677e43bdaa89783ee4572178e3b", + "0xf2a74ec9c790bad178bb9bd5ff86e47b56b27505902cc94b3d6329a1ed9f3e8f", + "0x1b422075f7d91b17bbfdff3c53d189dd0fbaaf4781652671e9565316b41ca290" + ] + } + ], + "chainId": "0xf85c705ab2" + }, + "privateKey": "0xf5c0dbb8231a075941ea87d5775f575911a32e6eda699d2f278b0c3ece418625", + "unsignedLegacy": "0xf88c8201e0852e61c0a7d182891f94abe72878a51e28abafcaa14ac99bdb97b2e4d17081fbb86708e7bc02435de0563f47dd2507bdf653e9f930b70fd49816c80affbe8119cc5d7bc6cbcece614100e8887f042681186daae9ff25ea16cc095cf7eb6555858bab20f76b1f4584d9da2b9b58c8a73a2c5c17f201f060a6b73e4eb5e30e6ca86dd6afa4215187aa9b", + "unsignedEip155": "0xf8948201e0852e61c0a7d182891f94abe72878a51e28abafcaa14ac99bdb97b2e4d17081fbb86708e7bc02435de0563f47dd2507bdf653e9f930b70fd49816c80affbe8119cc5d7bc6cbcece614100e8887f042681186daae9ff25ea16cc095cf7eb6555858bab20f76b1f4584d9da2b9b58c8a73a2c5c17f201f060a6b73e4eb5e30e6ca86dd6afa4215187aa9b85f85c705ab28080", + "unsignedBerlin": "0x01f9011085f85c705ab28201e0852e61c0a7d182891f94abe72878a51e28abafcaa14ac99bdb97b2e4d17081fbb86708e7bc02435de0563f47dd2507bdf653e9f930b70fd49816c80affbe8119cc5d7bc6cbcece614100e8887f042681186daae9ff25ea16cc095cf7eb6555858bab20f76b1f4584d9da2b9b58c8a73a2c5c17f201f060a6b73e4eb5e30e6ca86dd6afa4215187aa9bf87cf87a94b93b1cfdd998346a406f9c5631eea082f8dde274f863a008af322c4e39cff34a1319599a15d75f12aef677e43bdaa89783ee4572178e3ba0f2a74ec9c790bad178bb9bd5ff86e47b56b27505902cc94b3d6329a1ed9f3e8fa01b422075f7d91b17bbfdff3c53d189dd0fbaaf4781652671e9565316b41ca290", + "unsignedLondon": "0x02f9011585f85c705ab28201e0820f13871f96cabb630b7782891f94abe72878a51e28abafcaa14ac99bdb97b2e4d17081fbb86708e7bc02435de0563f47dd2507bdf653e9f930b70fd49816c80affbe8119cc5d7bc6cbcece614100e8887f042681186daae9ff25ea16cc095cf7eb6555858bab20f76b1f4584d9da2b9b58c8a73a2c5c17f201f060a6b73e4eb5e30e6ca86dd6afa4215187aa9bf87cf87a94b93b1cfdd998346a406f9c5631eea082f8dde274f863a008af322c4e39cff34a1319599a15d75f12aef677e43bdaa89783ee4572178e3ba0f2a74ec9c790bad178bb9bd5ff86e47b56b27505902cc94b3d6329a1ed9f3e8fa01b422075f7d91b17bbfdff3c53d189dd0fbaaf4781652671e9565316b41ca290", + "signedLegacy": "0xf8cf8201e0852e61c0a7d182891f94abe72878a51e28abafcaa14ac99bdb97b2e4d17081fbb86708e7bc02435de0563f47dd2507bdf653e9f930b70fd49816c80affbe8119cc5d7bc6cbcece614100e8887f042681186daae9ff25ea16cc095cf7eb6555858bab20f76b1f4584d9da2b9b58c8a73a2c5c17f201f060a6b73e4eb5e30e6ca86dd6afa4215187aa9b1ca05bd78dffac38190ad4c94a753513319045baa4b7139b4ee8ac4b55a108b82b3fa007165c4da8ed4b7abc3ccd859de3278e1ed8b6a39c349f6aecd6140bdd09816b", + "signedEip155": "0xf8d58201e0852e61c0a7d182891f94abe72878a51e28abafcaa14ac99bdb97b2e4d17081fbb86708e7bc02435de0563f47dd2507bdf653e9f930b70fd49816c80affbe8119cc5d7bc6cbcece614100e8887f042681186daae9ff25ea16cc095cf7eb6555858bab20f76b1f4584d9da2b9b58c8a73a2c5c17f201f060a6b73e4eb5e30e6ca86dd6afa4215187aa9b8601f0b8e0b588a06ad7dc232ebe61f13d1d5cc25a88f6192f6fc026c1a64ab231d93219a31d816da04636fc5a441d8a907fcecf9c8978cbd6b71be7f763f393bd0b9e6c19917e5d6f", + "signedBerlin": "0x01f9015385f85c705ab28201e0852e61c0a7d182891f94abe72878a51e28abafcaa14ac99bdb97b2e4d17081fbb86708e7bc02435de0563f47dd2507bdf653e9f930b70fd49816c80affbe8119cc5d7bc6cbcece614100e8887f042681186daae9ff25ea16cc095cf7eb6555858bab20f76b1f4584d9da2b9b58c8a73a2c5c17f201f060a6b73e4eb5e30e6ca86dd6afa4215187aa9bf87cf87a94b93b1cfdd998346a406f9c5631eea082f8dde274f863a008af322c4e39cff34a1319599a15d75f12aef677e43bdaa89783ee4572178e3ba0f2a74ec9c790bad178bb9bd5ff86e47b56b27505902cc94b3d6329a1ed9f3e8fa01b422075f7d91b17bbfdff3c53d189dd0fbaaf4781652671e9565316b41ca29001a0a4c6719e28efb2fd8bd3ca8c6cfb23ad7e782891b7b1be42ca378bbe6ed11849a05cd95d3bc178e48d4d4396a4f3d869c44121afa8d9cb9bff5102b2e4edc5f0b5", + "signedLondon": "0x02f9015885f85c705ab28201e0820f13871f96cabb630b7782891f94abe72878a51e28abafcaa14ac99bdb97b2e4d17081fbb86708e7bc02435de0563f47dd2507bdf653e9f930b70fd49816c80affbe8119cc5d7bc6cbcece614100e8887f042681186daae9ff25ea16cc095cf7eb6555858bab20f76b1f4584d9da2b9b58c8a73a2c5c17f201f060a6b73e4eb5e30e6ca86dd6afa4215187aa9bf87cf87a94b93b1cfdd998346a406f9c5631eea082f8dde274f863a008af322c4e39cff34a1319599a15d75f12aef677e43bdaa89783ee4572178e3ba0f2a74ec9c790bad178bb9bd5ff86e47b56b27505902cc94b3d6329a1ed9f3e8fa01b422075f7d91b17bbfdff3c53d189dd0fbaaf4781652671e9565316b41ca29001a095324dc2342f0e88e7451b7fe59f135080efd92353fcde537cd7a529616cb5a1a06c1f881e580f87e6c83c31a3b5e97e75ec99ee1f1d42be80065eebedee276770", + "signatureLegacy": { + "r": "0x5bd78dffac38190ad4c94a753513319045baa4b7139b4ee8ac4b55a108b82b3f", + "s": "0x07165c4da8ed4b7abc3ccd859de3278e1ed8b6a39c349f6aecd6140bdd09816b", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x6ad7dc232ebe61f13d1d5cc25a88f6192f6fc026c1a64ab231d93219a31d816d", + "s": "0x4636fc5a441d8a907fcecf9c8978cbd6b71be7f763f393bd0b9e6c19917e5d6f", + "v": "0x1f0b8e0b588" + }, + "signatureBerlin": { + "r": "0xa4c6719e28efb2fd8bd3ca8c6cfb23ad7e782891b7b1be42ca378bbe6ed11849", + "s": "0x5cd95d3bc178e48d4d4396a4f3d869c44121afa8d9cb9bff5102b2e4edc5f0b5", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x95324dc2342f0e88e7451b7fe59f135080efd92353fcde537cd7a529616cb5a1", + "s": "0x6c1f881e580f87e6c83c31a3b5e97e75ec99ee1f1d42be80065eebedee276770", + "v": "0x1" + } + }, + { + "name": "random-109", + "transaction": { + "to": "0x6d5Ae1C06aFDAD46BBB50f3ad16E7747388dCa09", + "nonce": 385, + "gasLimit": "0x3c8b1604", + "gasPrice": "0x8ea240", + "maxFeePerGas": "0xd01e3d18", + "maxPriorityFeePerGas": "0x1f36", + "data": "0x9f281da66d85bcd6adab318a3463", + "value": "0xc4efe6de17", + "accessList": [ + { + "address": "0x40190a254747d0c0157B7510dcc9568AB212e0b7", + "storageKeys": [ + "0x73eb550e5587bcf8737d49f18648d069dbeb0a88bd48c4806a0bd22d07fe7ee7", + "0xf03096ae61f1904e98da0af5b3624ecb8b9758006fd1e1f04431d5d9d1f3e8de", + "0x92425a724a4b5f5f34ff462f4a21c022a6bc92a39b51b11fe26a4b7c9b5c9dc4", + "0x6e4eed900408b0acdaade7ef2d2000f2180c3f42bd1151e0e29202e38a922a94" + ] + }, + { + "address": "0x515B29FEfF4Aba799B1a26b4Ef10884A7B44df8D", + "storageKeys": [ + "0x73eb550e5587bcf8737d49f18648d069dbeb0a88bd48c4806a0bd22d07fe7ee7", + "0xf03096ae61f1904e98da0af5b3624ecb8b9758006fd1e1f04431d5d9d1f3e8de", + "0x92425a724a4b5f5f34ff462f4a21c022a6bc92a39b51b11fe26a4b7c9b5c9dc4", + "0x6e4eed900408b0acdaade7ef2d2000f2180c3f42bd1151e0e29202e38a922a94" + ] + } + ], + "chainId": "0x025b5f20f6" + }, + "privateKey": "0xa8ae3e3a26fd49effb2b9eb331163da92c413824164a25f6f94e6e101867847a", + "unsignedLegacy": "0xf6820181838ea240843c8b1604946d5ae1c06afdad46bbb50f3ad16e7747388dca0985c4efe6de178e9f281da66d85bcd6adab318a3463", + "unsignedEip155": "0xf83e820181838ea240843c8b1604946d5ae1c06afdad46bbb50f3ad16e7747388dca0985c4efe6de178e9f281da66d85bcd6adab318a346385025b5f20f68080", + "unsignedBerlin": "0x01f9017985025b5f20f6820181838ea240843c8b1604946d5ae1c06afdad46bbb50f3ad16e7747388dca0985c4efe6de178e9f281da66d85bcd6adab318a3463f9013af89b9440190a254747d0c0157b7510dcc9568ab212e0b7f884a073eb550e5587bcf8737d49f18648d069dbeb0a88bd48c4806a0bd22d07fe7ee7a0f03096ae61f1904e98da0af5b3624ecb8b9758006fd1e1f04431d5d9d1f3e8dea092425a724a4b5f5f34ff462f4a21c022a6bc92a39b51b11fe26a4b7c9b5c9dc4a06e4eed900408b0acdaade7ef2d2000f2180c3f42bd1151e0e29202e38a922a94f89b94515b29feff4aba799b1a26b4ef10884a7b44df8df884a073eb550e5587bcf8737d49f18648d069dbeb0a88bd48c4806a0bd22d07fe7ee7a0f03096ae61f1904e98da0af5b3624ecb8b9758006fd1e1f04431d5d9d1f3e8dea092425a724a4b5f5f34ff462f4a21c022a6bc92a39b51b11fe26a4b7c9b5c9dc4a06e4eed900408b0acdaade7ef2d2000f2180c3f42bd1151e0e29202e38a922a94", + "unsignedLondon": "0x02f9017d85025b5f20f6820181821f3684d01e3d18843c8b1604946d5ae1c06afdad46bbb50f3ad16e7747388dca0985c4efe6de178e9f281da66d85bcd6adab318a3463f9013af89b9440190a254747d0c0157b7510dcc9568ab212e0b7f884a073eb550e5587bcf8737d49f18648d069dbeb0a88bd48c4806a0bd22d07fe7ee7a0f03096ae61f1904e98da0af5b3624ecb8b9758006fd1e1f04431d5d9d1f3e8dea092425a724a4b5f5f34ff462f4a21c022a6bc92a39b51b11fe26a4b7c9b5c9dc4a06e4eed900408b0acdaade7ef2d2000f2180c3f42bd1151e0e29202e38a922a94f89b94515b29feff4aba799b1a26b4ef10884a7b44df8df884a073eb550e5587bcf8737d49f18648d069dbeb0a88bd48c4806a0bd22d07fe7ee7a0f03096ae61f1904e98da0af5b3624ecb8b9758006fd1e1f04431d5d9d1f3e8dea092425a724a4b5f5f34ff462f4a21c022a6bc92a39b51b11fe26a4b7c9b5c9dc4a06e4eed900408b0acdaade7ef2d2000f2180c3f42bd1151e0e29202e38a922a94", + "signedLegacy": "0xf879820181838ea240843c8b1604946d5ae1c06afdad46bbb50f3ad16e7747388dca0985c4efe6de178e9f281da66d85bcd6adab318a34631ba08f09c14d14b2bd156f39caa81b84f90e6d464c8e993d73c4905842e6bc384d6aa075120539879a34856ce2adf2c78ac509a9b3e5ebcc2490c42f784a02d90208e6", + "signedEip155": "0xf87e820181838ea240843c8b1604946d5ae1c06afdad46bbb50f3ad16e7747388dca0985c4efe6de178e9f281da66d85bcd6adab318a34638504b6be420fa07dc2e754d45cc22794ed5cc6ec25c291dd949928e5825ca5eea2fa22c724d6b4a0376df2f8eac448316d8e6d42cc7dc9db47385bbc4433a1295e30ee4db11c8496", + "signedBerlin": "0x01f901bc85025b5f20f6820181838ea240843c8b1604946d5ae1c06afdad46bbb50f3ad16e7747388dca0985c4efe6de178e9f281da66d85bcd6adab318a3463f9013af89b9440190a254747d0c0157b7510dcc9568ab212e0b7f884a073eb550e5587bcf8737d49f18648d069dbeb0a88bd48c4806a0bd22d07fe7ee7a0f03096ae61f1904e98da0af5b3624ecb8b9758006fd1e1f04431d5d9d1f3e8dea092425a724a4b5f5f34ff462f4a21c022a6bc92a39b51b11fe26a4b7c9b5c9dc4a06e4eed900408b0acdaade7ef2d2000f2180c3f42bd1151e0e29202e38a922a94f89b94515b29feff4aba799b1a26b4ef10884a7b44df8df884a073eb550e5587bcf8737d49f18648d069dbeb0a88bd48c4806a0bd22d07fe7ee7a0f03096ae61f1904e98da0af5b3624ecb8b9758006fd1e1f04431d5d9d1f3e8dea092425a724a4b5f5f34ff462f4a21c022a6bc92a39b51b11fe26a4b7c9b5c9dc4a06e4eed900408b0acdaade7ef2d2000f2180c3f42bd1151e0e29202e38a922a9401a09ba89ad913928dfaadfffa31d7b726567c3d56c682807b82b7793b961d0557dea011d64c4e1d1c4f1cbd83f1289392eb3891d383846f302848a06549dfb2635a57", + "signedLondon": "0x02f901c085025b5f20f6820181821f3684d01e3d18843c8b1604946d5ae1c06afdad46bbb50f3ad16e7747388dca0985c4efe6de178e9f281da66d85bcd6adab318a3463f9013af89b9440190a254747d0c0157b7510dcc9568ab212e0b7f884a073eb550e5587bcf8737d49f18648d069dbeb0a88bd48c4806a0bd22d07fe7ee7a0f03096ae61f1904e98da0af5b3624ecb8b9758006fd1e1f04431d5d9d1f3e8dea092425a724a4b5f5f34ff462f4a21c022a6bc92a39b51b11fe26a4b7c9b5c9dc4a06e4eed900408b0acdaade7ef2d2000f2180c3f42bd1151e0e29202e38a922a94f89b94515b29feff4aba799b1a26b4ef10884a7b44df8df884a073eb550e5587bcf8737d49f18648d069dbeb0a88bd48c4806a0bd22d07fe7ee7a0f03096ae61f1904e98da0af5b3624ecb8b9758006fd1e1f04431d5d9d1f3e8dea092425a724a4b5f5f34ff462f4a21c022a6bc92a39b51b11fe26a4b7c9b5c9dc4a06e4eed900408b0acdaade7ef2d2000f2180c3f42bd1151e0e29202e38a922a9480a0f4271827d0b9e72a6183e69d1a6606dc246a5827826c9c1e49fa31e0916c2dfba01ac600f935bd7affbca7859bf6064e0c1d1c1eabee740f3d12f2569406dd307b", + "signatureLegacy": { + "r": "0x8f09c14d14b2bd156f39caa81b84f90e6d464c8e993d73c4905842e6bc384d6a", + "s": "0x75120539879a34856ce2adf2c78ac509a9b3e5ebcc2490c42f784a02d90208e6", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x7dc2e754d45cc22794ed5cc6ec25c291dd949928e5825ca5eea2fa22c724d6b4", + "s": "0x376df2f8eac448316d8e6d42cc7dc9db47385bbc4433a1295e30ee4db11c8496", + "v": "0x4b6be420f" + }, + "signatureBerlin": { + "r": "0x9ba89ad913928dfaadfffa31d7b726567c3d56c682807b82b7793b961d0557de", + "s": "0x11d64c4e1d1c4f1cbd83f1289392eb3891d383846f302848a06549dfb2635a57", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xf4271827d0b9e72a6183e69d1a6606dc246a5827826c9c1e49fa31e0916c2dfb", + "s": "0x1ac600f935bd7affbca7859bf6064e0c1d1c1eabee740f3d12f2569406dd307b", + "v": "0x0" + } + }, + { + "name": "random-110", + "transaction": { + "to": "0xCDfF444EB48A465c6021e011BAfAd0310066ac09", + "nonce": 672, + "gasLimit": "0x90fbe11597", + "gasPrice": "0xd8", + "maxFeePerGas": "0x10ca0474270fb7", + "maxPriorityFeePerGas": "0x11db", + "data": "0xfb09882fbb87", + "value": "0x9df1f1bf", + "accessList": [ + { + "address": "0x7E414511c1f33E767Cf826b6E1028DE7aDFeD4FC", + "storageKeys": [] + }, + { + "address": "0xd0d08305D67aBbDD3B2fd4f51cbE3fc0fB19429C", + "storageKeys": [] + }, + { + "address": "0x078117171875de96a1F41B79C9aF58bEC8B31385", + "storageKeys": [] + }, + { + "address": "0xeCf4c6F1418A351adD6fabFeABfA2014583520E4", + "storageKeys": [] + } + ], + "chainId": "0x4ae9aa" + }, + "privateKey": "0xf2e395cc4c6efbe873a413fc1c6885bc0c48bf8084ef2521d68ee45bc1e23b79", + "unsignedLegacy": "0xec8202a081d88590fbe1159794cdff444eb48a465c6021e011bafad0310066ac09849df1f1bf86fb09882fbb87", + "unsignedEip155": "0xf28202a081d88590fbe1159794cdff444eb48a465c6021e011bafad0310066ac09849df1f1bf86fb09882fbb87834ae9aa8080", + "unsignedBerlin": "0x01f88e834ae9aa8202a081d88590fbe1159794cdff444eb48a465c6021e011bafad0310066ac09849df1f1bf86fb09882fbb87f85cd6947e414511c1f33e767cf826b6e1028de7adfed4fcc0d694d0d08305d67abbdd3b2fd4f51cbe3fc0fb19429cc0d694078117171875de96a1f41b79c9af58bec8b31385c0d694ecf4c6f1418a351add6fabfeabfa2014583520e4c0", + "unsignedLondon": "0x02f897834ae9aa8202a08211db8710ca0474270fb78590fbe1159794cdff444eb48a465c6021e011bafad0310066ac09849df1f1bf86fb09882fbb87f85cd6947e414511c1f33e767cf826b6e1028de7adfed4fcc0d694d0d08305d67abbdd3b2fd4f51cbe3fc0fb19429cc0d694078117171875de96a1f41b79c9af58bec8b31385c0d694ecf4c6f1418a351add6fabfeabfa2014583520e4c0", + "signedLegacy": "0xf86f8202a081d88590fbe1159794cdff444eb48a465c6021e011bafad0310066ac09849df1f1bf86fb09882fbb871ca01a89d79129d963896b865ea7ee6b5338110238bc5eebc4e8d7b1a11bca70ab20a0382f99832f3923451bde9dbae185d2a4e9fefb3ff13b95bf7c735050d3773183", + "signedEip155": "0xf8728202a081d88590fbe1159794cdff444eb48a465c6021e011bafad0310066ac09849df1f1bf86fb09882fbb878395d377a0ade912e32ad2fa54bbfc6adb4b54c7369973ce16309855cf37738b6cb4fd7a8fa04034ecad0678cd5fa747b093e147087fb83ed3b25875e1969625982e92987d3b", + "signedBerlin": "0x01f8d1834ae9aa8202a081d88590fbe1159794cdff444eb48a465c6021e011bafad0310066ac09849df1f1bf86fb09882fbb87f85cd6947e414511c1f33e767cf826b6e1028de7adfed4fcc0d694d0d08305d67abbdd3b2fd4f51cbe3fc0fb19429cc0d694078117171875de96a1f41b79c9af58bec8b31385c0d694ecf4c6f1418a351add6fabfeabfa2014583520e4c001a056f064c3b8971a0a05521c0bc38f27bd69a663e3ae361d97ba746bf9514ed309a03b037e153a07763be7579944ec8a57fe2f929e45dc30e037c0a7910861d6292a", + "signedLondon": "0x02f8da834ae9aa8202a08211db8710ca0474270fb78590fbe1159794cdff444eb48a465c6021e011bafad0310066ac09849df1f1bf86fb09882fbb87f85cd6947e414511c1f33e767cf826b6e1028de7adfed4fcc0d694d0d08305d67abbdd3b2fd4f51cbe3fc0fb19429cc0d694078117171875de96a1f41b79c9af58bec8b31385c0d694ecf4c6f1418a351add6fabfeabfa2014583520e4c080a0f95c0e8227a48177cc93b0994eeef18e16336cca7cddeb002a2f94d8e403296da0453c67524f3d9d590ee58c2400728be2b3545dcb8aba6bac22f29b5e09ca69f9", + "signatureLegacy": { + "r": "0x1a89d79129d963896b865ea7ee6b5338110238bc5eebc4e8d7b1a11bca70ab20", + "s": "0x382f99832f3923451bde9dbae185d2a4e9fefb3ff13b95bf7c735050d3773183", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0xade912e32ad2fa54bbfc6adb4b54c7369973ce16309855cf37738b6cb4fd7a8f", + "s": "0x4034ecad0678cd5fa747b093e147087fb83ed3b25875e1969625982e92987d3b", + "v": "0x95d377" + }, + "signatureBerlin": { + "r": "0x56f064c3b8971a0a05521c0bc38f27bd69a663e3ae361d97ba746bf9514ed309", + "s": "0x3b037e153a07763be7579944ec8a57fe2f929e45dc30e037c0a7910861d6292a", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xf95c0e8227a48177cc93b0994eeef18e16336cca7cddeb002a2f94d8e403296d", + "s": "0x453c67524f3d9d590ee58c2400728be2b3545dcb8aba6bac22f29b5e09ca69f9", + "v": "0x0" + } + }, + { + "name": "random-111", + "transaction": { + "to": "0x617965D6808bd4BaD380e3eCa6A0fa4B22c6Ee1b", + "nonce": 313, + "gasLimit": "0x15e86701", + "gasPrice": "0x1986e1bf", + "maxFeePerGas": "0xeb80b568c33885", + "maxPriorityFeePerGas": "0x4ea622", + "data": "0xbb29f01730daa95263d2618d629a44c5515ba1dfbb1c93a2916243cea463500dc69416c18956e97ad1c50faf45548f6e34ad966ffc0febfb3a4ec1a1d5c66825db9593228d2feb78adc466a8ade52d62653acbd435b5", + "value": "0x46e692ed", + "accessList": [], + "chainId": "0x2270" + }, + "privateKey": "0x1d731f1ba2e5ab0e4473cd96733f3f5e8bcff66190bf82dc5523bbc814545653", + "unsignedLegacy": "0xf87f820139841986e1bf8415e8670194617965d6808bd4bad380e3eca6a0fa4b22c6ee1b8446e692edb856bb29f01730daa95263d2618d629a44c5515ba1dfbb1c93a2916243cea463500dc69416c18956e97ad1c50faf45548f6e34ad966ffc0febfb3a4ec1a1d5c66825db9593228d2feb78adc466a8ade52d62653acbd435b5", + "unsignedEip155": "0xf884820139841986e1bf8415e8670194617965d6808bd4bad380e3eca6a0fa4b22c6ee1b8446e692edb856bb29f01730daa95263d2618d629a44c5515ba1dfbb1c93a2916243cea463500dc69416c18956e97ad1c50faf45548f6e34ad966ffc0febfb3a4ec1a1d5c66825db9593228d2feb78adc466a8ade52d62653acbd435b58222708080", + "unsignedBerlin": "0x01f883822270820139841986e1bf8415e8670194617965d6808bd4bad380e3eca6a0fa4b22c6ee1b8446e692edb856bb29f01730daa95263d2618d629a44c5515ba1dfbb1c93a2916243cea463500dc69416c18956e97ad1c50faf45548f6e34ad966ffc0febfb3a4ec1a1d5c66825db9593228d2feb78adc466a8ade52d62653acbd435b5c0", + "unsignedLondon": "0x02f88a822270820139834ea62287eb80b568c338858415e8670194617965d6808bd4bad380e3eca6a0fa4b22c6ee1b8446e692edb856bb29f01730daa95263d2618d629a44c5515ba1dfbb1c93a2916243cea463500dc69416c18956e97ad1c50faf45548f6e34ad966ffc0febfb3a4ec1a1d5c66825db9593228d2feb78adc466a8ade52d62653acbd435b5c0", + "signedLegacy": "0xf8c2820139841986e1bf8415e8670194617965d6808bd4bad380e3eca6a0fa4b22c6ee1b8446e692edb856bb29f01730daa95263d2618d629a44c5515ba1dfbb1c93a2916243cea463500dc69416c18956e97ad1c50faf45548f6e34ad966ffc0febfb3a4ec1a1d5c66825db9593228d2feb78adc466a8ade52d62653acbd435b51ca0c10d9745a0574003565a9c3ac2a243d2ff6da1f6e65cca87e1e0c4aa99c3801fa074c49c340ebd9d112666bd9cfcdafc6798d54cb8ebd61950e8c4fac4da98aaa0", + "signedEip155": "0xf8c4820139841986e1bf8415e8670194617965d6808bd4bad380e3eca6a0fa4b22c6ee1b8446e692edb856bb29f01730daa95263d2618d629a44c5515ba1dfbb1c93a2916243cea463500dc69416c18956e97ad1c50faf45548f6e34ad966ffc0febfb3a4ec1a1d5c66825db9593228d2feb78adc466a8ade52d62653acbd435b5824504a08d1a8d5e65747ed17e48a1a3d1850d155a279e9755e95b9d299120c76817b0aaa02aa9aa307e29d16a5cc46b98cd5d2358fb69a42fc5ea6773aa880824065728f0", + "signedBerlin": "0x01f8c6822270820139841986e1bf8415e8670194617965d6808bd4bad380e3eca6a0fa4b22c6ee1b8446e692edb856bb29f01730daa95263d2618d629a44c5515ba1dfbb1c93a2916243cea463500dc69416c18956e97ad1c50faf45548f6e34ad966ffc0febfb3a4ec1a1d5c66825db9593228d2feb78adc466a8ade52d62653acbd435b5c080a08d8eb316e1ca885a59e2f28289e9feab46971623c8def85f5109d548dc31bf33a062a96371dbac956a1815e0a47cfb419299cb511ff00c28fb41e1c93d71a2a4fd", + "signedLondon": "0x02f8cd822270820139834ea62287eb80b568c338858415e8670194617965d6808bd4bad380e3eca6a0fa4b22c6ee1b8446e692edb856bb29f01730daa95263d2618d629a44c5515ba1dfbb1c93a2916243cea463500dc69416c18956e97ad1c50faf45548f6e34ad966ffc0febfb3a4ec1a1d5c66825db9593228d2feb78adc466a8ade52d62653acbd435b5c001a0af81d8ed6a9fed2c565226f8b81889e68b6893ad5aff775c6de6e4659a9ee9eba05a389ca446f99359f5683962de3b1943c5e21ea8a8785783c546cda28662fe3c", + "signatureLegacy": { + "r": "0xc10d9745a0574003565a9c3ac2a243d2ff6da1f6e65cca87e1e0c4aa99c3801f", + "s": "0x74c49c340ebd9d112666bd9cfcdafc6798d54cb8ebd61950e8c4fac4da98aaa0", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x8d1a8d5e65747ed17e48a1a3d1850d155a279e9755e95b9d299120c76817b0aa", + "s": "0x2aa9aa307e29d16a5cc46b98cd5d2358fb69a42fc5ea6773aa880824065728f0", + "v": "0x4504" + }, + "signatureBerlin": { + "r": "0x8d8eb316e1ca885a59e2f28289e9feab46971623c8def85f5109d548dc31bf33", + "s": "0x62a96371dbac956a1815e0a47cfb419299cb511ff00c28fb41e1c93d71a2a4fd", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xaf81d8ed6a9fed2c565226f8b81889e68b6893ad5aff775c6de6e4659a9ee9eb", + "s": "0x5a389ca446f99359f5683962de3b1943c5e21ea8a8785783c546cda28662fe3c", + "v": "0x1" + } + }, + { + "name": "random-112", + "transaction": { + "to": "0x1E5Bddb820F1AA68115E620695ec590344e54665", + "nonce": 131, + "gasLimit": "0x35856c60", + "gasPrice": "0xf53a", + "maxFeePerGas": "0xa9d43adae7", + "maxPriorityFeePerGas": "0x6faec3", + "data": "0x924229a3675e1d0698a9ce0473dbe7dd4951c4e60764b4461d2585b2a34e2365edd8bb9ee728a7", + "value": "0x72", + "accessList": [], + "chainId": "0x44e6" + }, + "privateKey": "0xcb76ec53e290167ed1ab54e61a59de9271cf657d72cc1fed2256d52d003f3ca0", + "unsignedLegacy": "0xf848818382f53a8435856c60941e5bddb820f1aa68115e620695ec590344e5466572a7924229a3675e1d0698a9ce0473dbe7dd4951c4e60764b4461d2585b2a34e2365edd8bb9ee728a7", + "unsignedEip155": "0xf84d818382f53a8435856c60941e5bddb820f1aa68115e620695ec590344e5466572a7924229a3675e1d0698a9ce0473dbe7dd4951c4e60764b4461d2585b2a34e2365edd8bb9ee728a78244e68080", + "unsignedBerlin": "0x01f84c8244e6818382f53a8435856c60941e5bddb820f1aa68115e620695ec590344e5466572a7924229a3675e1d0698a9ce0473dbe7dd4951c4e60764b4461d2585b2a34e2365edd8bb9ee728a7c0", + "unsignedLondon": "0x02f8538244e68183836faec385a9d43adae78435856c60941e5bddb820f1aa68115e620695ec590344e5466572a7924229a3675e1d0698a9ce0473dbe7dd4951c4e60764b4461d2585b2a34e2365edd8bb9ee728a7c0", + "signedLegacy": "0xf88b818382f53a8435856c60941e5bddb820f1aa68115e620695ec590344e5466572a7924229a3675e1d0698a9ce0473dbe7dd4951c4e60764b4461d2585b2a34e2365edd8bb9ee728a71ba0d92b69c6590bdb90c9f22260e09704a43cc07fb746b1c153849713acb9e1eefba05f27f206f893e7756358967776d59842a221e6834c04950c8dcecdbbf3a09b2a", + "signedEip155": "0xf88d818382f53a8435856c60941e5bddb820f1aa68115e620695ec590344e5466572a7924229a3675e1d0698a9ce0473dbe7dd4951c4e60764b4461d2585b2a34e2365edd8bb9ee728a78289f0a0977ab968c6968dc287b2507b9d8955bd025c55286bdcccde43df597b59664a71a02ada928b86cd1eb47d0fda8298f940b221dad5dbe742509ee6c3a915614563d4", + "signedBerlin": "0x01f88f8244e6818382f53a8435856c60941e5bddb820f1aa68115e620695ec590344e5466572a7924229a3675e1d0698a9ce0473dbe7dd4951c4e60764b4461d2585b2a34e2365edd8bb9ee728a7c001a0cc2ab0bf07eff522961806ed391510042fe5949b6c713ded5a37ea8edae9960ca0381aef446661c6906b8f53980782f58005633a93a3c1496e9d08ecd29d58de4e", + "signedLondon": "0x02f8968244e68183836faec385a9d43adae78435856c60941e5bddb820f1aa68115e620695ec590344e5466572a7924229a3675e1d0698a9ce0473dbe7dd4951c4e60764b4461d2585b2a34e2365edd8bb9ee728a7c080a0961f7ab7eddea5dce2765d3234e6e1949ea9e5a6f6a6e779174cf299dce90b24a030f128f0deb735b8ad29108ac10d8f949fe335331e6acb5eadb18af99bb18604", + "signatureLegacy": { + "r": "0xd92b69c6590bdb90c9f22260e09704a43cc07fb746b1c153849713acb9e1eefb", + "s": "0x5f27f206f893e7756358967776d59842a221e6834c04950c8dcecdbbf3a09b2a", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x977ab968c6968dc287b2507b9d8955bd025c55286bdcccde43df597b59664a71", + "s": "0x2ada928b86cd1eb47d0fda8298f940b221dad5dbe742509ee6c3a915614563d4", + "v": "0x89f0" + }, + "signatureBerlin": { + "r": "0xcc2ab0bf07eff522961806ed391510042fe5949b6c713ded5a37ea8edae9960c", + "s": "0x381aef446661c6906b8f53980782f58005633a93a3c1496e9d08ecd29d58de4e", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x961f7ab7eddea5dce2765d3234e6e1949ea9e5a6f6a6e779174cf299dce90b24", + "s": "0x30f128f0deb735b8ad29108ac10d8f949fe335331e6acb5eadb18af99bb18604", + "v": "0x0" + } + }, + { + "name": "random-114", + "transaction": { + "to": "0xC1803F91d08af3Fd5D7534F11c6f29476eF6c730", + "nonce": 179, + "gasLimit": "0x5cdb7e40", + "gasPrice": "0xb95bf6", + "maxFeePerGas": "0xd9b05ef7", + "maxPriorityFeePerGas": "0x3ed5", + "data": "0x97818978c3d09f7a600e4ced53dd66e28993d92f3726c54eebc889ee1feb5de9e6956f17916a70af94a9be8c9ad22c0603988dd674546ac7100da4c4c6705cd4378a7db1a85060f6c9c041ff3a3a8f591a9ff6", + "value": "0x9dd6d4", + "accessList": [ + { + "address": "0x9e3903c19B7D37766AE856D49D18d3d9012D313a", + "storageKeys": [ + "0x338f2e2f812a703007e9b0efd6b563e140f758ee6339392fbd707f0e31c2d906" + ] + } + ], + "chainId": "0x8c57520f" + }, + "privateKey": "0xbc9063b2aee3c3e5efc795069c358388b3f891b191fae431455542adeab9270b", + "unsignedLegacy": "0xf87981b383b95bf6845cdb7e4094c1803f91d08af3fd5d7534f11c6f29476ef6c730839dd6d4b85397818978c3d09f7a600e4ced53dd66e28993d92f3726c54eebc889ee1feb5de9e6956f17916a70af94a9be8c9ad22c0603988dd674546ac7100da4c4c6705cd4378a7db1a85060f6c9c041ff3a3a8f591a9ff6", + "unsignedEip155": "0xf88081b383b95bf6845cdb7e4094c1803f91d08af3fd5d7534f11c6f29476ef6c730839dd6d4b85397818978c3d09f7a600e4ced53dd66e28993d92f3726c54eebc889ee1feb5de9e6956f17916a70af94a9be8c9ad22c0603988dd674546ac7100da4c4c6705cd4378a7db1a85060f6c9c041ff3a3a8f591a9ff6848c57520f8080", + "unsignedBerlin": "0x01f8b8848c57520f81b383b95bf6845cdb7e4094c1803f91d08af3fd5d7534f11c6f29476ef6c730839dd6d4b85397818978c3d09f7a600e4ced53dd66e28993d92f3726c54eebc889ee1feb5de9e6956f17916a70af94a9be8c9ad22c0603988dd674546ac7100da4c4c6705cd4378a7db1a85060f6c9c041ff3a3a8f591a9ff6f838f7949e3903c19b7d37766ae856d49d18d3d9012d313ae1a0338f2e2f812a703007e9b0efd6b563e140f758ee6339392fbd707f0e31c2d906", + "unsignedLondon": "0x02f8bc848c57520f81b3823ed584d9b05ef7845cdb7e4094c1803f91d08af3fd5d7534f11c6f29476ef6c730839dd6d4b85397818978c3d09f7a600e4ced53dd66e28993d92f3726c54eebc889ee1feb5de9e6956f17916a70af94a9be8c9ad22c0603988dd674546ac7100da4c4c6705cd4378a7db1a85060f6c9c041ff3a3a8f591a9ff6f838f7949e3903c19b7d37766ae856d49d18d3d9012d313ae1a0338f2e2f812a703007e9b0efd6b563e140f758ee6339392fbd707f0e31c2d906", + "signedLegacy": "0xf8bc81b383b95bf6845cdb7e4094c1803f91d08af3fd5d7534f11c6f29476ef6c730839dd6d4b85397818978c3d09f7a600e4ced53dd66e28993d92f3726c54eebc889ee1feb5de9e6956f17916a70af94a9be8c9ad22c0603988dd674546ac7100da4c4c6705cd4378a7db1a85060f6c9c041ff3a3a8f591a9ff61ba0e177a92fe10de3e8143d69bb8ae730d010550fc575aa7b329cdcfdd107249a20a04230aa305e077574c6cacbf0e932b981a2dae10e8cf7f401ccee7e494753cfc6", + "signedEip155": "0xf8c181b383b95bf6845cdb7e4094c1803f91d08af3fd5d7534f11c6f29476ef6c730839dd6d4b85397818978c3d09f7a600e4ced53dd66e28993d92f3726c54eebc889ee1feb5de9e6956f17916a70af94a9be8c9ad22c0603988dd674546ac7100da4c4c6705cd4378a7db1a85060f6c9c041ff3a3a8f591a9ff6850118aea441a02740e3845ff810ec1942e8740ad3bc5b76c7b2edca07e6ff0557f2cecba35248a00eb2d443bc4044cd5622b3cf9eb4a18765bd61a7c9ae103ddcf8809d1ce99bf3", + "signedBerlin": "0x01f8fb848c57520f81b383b95bf6845cdb7e4094c1803f91d08af3fd5d7534f11c6f29476ef6c730839dd6d4b85397818978c3d09f7a600e4ced53dd66e28993d92f3726c54eebc889ee1feb5de9e6956f17916a70af94a9be8c9ad22c0603988dd674546ac7100da4c4c6705cd4378a7db1a85060f6c9c041ff3a3a8f591a9ff6f838f7949e3903c19b7d37766ae856d49d18d3d9012d313ae1a0338f2e2f812a703007e9b0efd6b563e140f758ee6339392fbd707f0e31c2d90601a0c21cbe9c5455fa3769902385ff44ca373732e8e98afe29fe58d07c1c17209b9ba027d473eaeda692caab6ae881679a2373ae4959add9f277e4499813eab69022f7", + "signedLondon": "0x02f8ff848c57520f81b3823ed584d9b05ef7845cdb7e4094c1803f91d08af3fd5d7534f11c6f29476ef6c730839dd6d4b85397818978c3d09f7a600e4ced53dd66e28993d92f3726c54eebc889ee1feb5de9e6956f17916a70af94a9be8c9ad22c0603988dd674546ac7100da4c4c6705cd4378a7db1a85060f6c9c041ff3a3a8f591a9ff6f838f7949e3903c19b7d37766ae856d49d18d3d9012d313ae1a0338f2e2f812a703007e9b0efd6b563e140f758ee6339392fbd707f0e31c2d90601a0aef8bb02790762781228a43a1d1c22061f4dbc2ba9317983862bb5ed5c3e5895a020535564b27f2a5d868841dd29612bea4a9a0440c74bf8c5d6f243d03a724a7c", + "signatureLegacy": { + "r": "0xe177a92fe10de3e8143d69bb8ae730d010550fc575aa7b329cdcfdd107249a20", + "s": "0x4230aa305e077574c6cacbf0e932b981a2dae10e8cf7f401ccee7e494753cfc6", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x2740e3845ff810ec1942e8740ad3bc5b76c7b2edca07e6ff0557f2cecba35248", + "s": "0x0eb2d443bc4044cd5622b3cf9eb4a18765bd61a7c9ae103ddcf8809d1ce99bf3", + "v": "0x118aea441" + }, + "signatureBerlin": { + "r": "0xc21cbe9c5455fa3769902385ff44ca373732e8e98afe29fe58d07c1c17209b9b", + "s": "0x27d473eaeda692caab6ae881679a2373ae4959add9f277e4499813eab69022f7", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xaef8bb02790762781228a43a1d1c22061f4dbc2ba9317983862bb5ed5c3e5895", + "s": "0x20535564b27f2a5d868841dd29612bea4a9a0440c74bf8c5d6f243d03a724a7c", + "v": "0x1" + } + }, + { + "name": "random-115", + "transaction": { + "to": "0xF4E39EE71c0047c70e39802a5C647e1C3D19F6fe", + "nonce": 675, + "gasLimit": "0x2364a952", + "gasPrice": "0xa8", + "maxFeePerGas": "0x69bfa185da", + "maxPriorityFeePerGas": "0xe2", + "data": "0x48adb4d3c507f8862f6b97ee77de7ee8c35d8b2b56e00e3cc3f0b34b669b0ba3a259fd69df02d29c52eb0609c8ab7b2956e0568b048795948b8888a7657392ccb0c64e06177acf4ac74c2a81aadd3e52b8ecaf0dd2aaa85f7a4577b029ee10a7466b583609c8f267133eb9f2207ef689f460", + "value": "0x18eddef200", + "accessList": [], + "chainId": "0x63" + }, + "privateKey": "0xd8e1ba22c154c839e9791a23dd5b36e844d8ff6f162b51fe79f412ab64ecfc0a", + "unsignedLegacy": "0xf8998202a381a8842364a95294f4e39ee71c0047c70e39802a5c647e1c3d19f6fe8518eddef200b87248adb4d3c507f8862f6b97ee77de7ee8c35d8b2b56e00e3cc3f0b34b669b0ba3a259fd69df02d29c52eb0609c8ab7b2956e0568b048795948b8888a7657392ccb0c64e06177acf4ac74c2a81aadd3e52b8ecaf0dd2aaa85f7a4577b029ee10a7466b583609c8f267133eb9f2207ef689f460", + "unsignedEip155": "0xf89c8202a381a8842364a95294f4e39ee71c0047c70e39802a5c647e1c3d19f6fe8518eddef200b87248adb4d3c507f8862f6b97ee77de7ee8c35d8b2b56e00e3cc3f0b34b669b0ba3a259fd69df02d29c52eb0609c8ab7b2956e0568b048795948b8888a7657392ccb0c64e06177acf4ac74c2a81aadd3e52b8ecaf0dd2aaa85f7a4577b029ee10a7466b583609c8f267133eb9f2207ef689f460638080", + "unsignedBerlin": "0x01f89b638202a381a8842364a95294f4e39ee71c0047c70e39802a5c647e1c3d19f6fe8518eddef200b87248adb4d3c507f8862f6b97ee77de7ee8c35d8b2b56e00e3cc3f0b34b669b0ba3a259fd69df02d29c52eb0609c8ab7b2956e0568b048795948b8888a7657392ccb0c64e06177acf4ac74c2a81aadd3e52b8ecaf0dd2aaa85f7a4577b029ee10a7466b583609c8f267133eb9f2207ef689f460c0", + "unsignedLondon": "0x02f8a1638202a381e28569bfa185da842364a95294f4e39ee71c0047c70e39802a5c647e1c3d19f6fe8518eddef200b87248adb4d3c507f8862f6b97ee77de7ee8c35d8b2b56e00e3cc3f0b34b669b0ba3a259fd69df02d29c52eb0609c8ab7b2956e0568b048795948b8888a7657392ccb0c64e06177acf4ac74c2a81aadd3e52b8ecaf0dd2aaa85f7a4577b029ee10a7466b583609c8f267133eb9f2207ef689f460c0", + "signedLegacy": "0xf8dc8202a381a8842364a95294f4e39ee71c0047c70e39802a5c647e1c3d19f6fe8518eddef200b87248adb4d3c507f8862f6b97ee77de7ee8c35d8b2b56e00e3cc3f0b34b669b0ba3a259fd69df02d29c52eb0609c8ab7b2956e0568b048795948b8888a7657392ccb0c64e06177acf4ac74c2a81aadd3e52b8ecaf0dd2aaa85f7a4577b029ee10a7466b583609c8f267133eb9f2207ef689f4601ca0104347b31a52cc0b53297d757196cae8ab9c602662addc967322a4288f10d420a04bd9503be935eadc21680dbb66fc6e9d84aa1785bac600e5d11d933f08516727", + "signedEip155": "0xf8dd8202a381a8842364a95294f4e39ee71c0047c70e39802a5c647e1c3d19f6fe8518eddef200b87248adb4d3c507f8862f6b97ee77de7ee8c35d8b2b56e00e3cc3f0b34b669b0ba3a259fd69df02d29c52eb0609c8ab7b2956e0568b048795948b8888a7657392ccb0c64e06177acf4ac74c2a81aadd3e52b8ecaf0dd2aaa85f7a4577b029ee10a7466b583609c8f267133eb9f2207ef689f46081e9a0247e60cef6c2445669d41b084352473cc8f3617bb607b06695b4b0f2136c9deda0075e81db4b282653bdd77bbad646de48cccdc0cc492f24bf09a5f343113da854", + "signedBerlin": "0x01f8de638202a381a8842364a95294f4e39ee71c0047c70e39802a5c647e1c3d19f6fe8518eddef200b87248adb4d3c507f8862f6b97ee77de7ee8c35d8b2b56e00e3cc3f0b34b669b0ba3a259fd69df02d29c52eb0609c8ab7b2956e0568b048795948b8888a7657392ccb0c64e06177acf4ac74c2a81aadd3e52b8ecaf0dd2aaa85f7a4577b029ee10a7466b583609c8f267133eb9f2207ef689f460c001a0cfc98bf050dd27f8f2af87320fe070a85981bf0530759e35b9abdf25a3000880a041583cd0ff4eff107b7db59e4e192e59754bac37f0f07e1953e353d05d52ffcd", + "signedLondon": "0x02f8e4638202a381e28569bfa185da842364a95294f4e39ee71c0047c70e39802a5c647e1c3d19f6fe8518eddef200b87248adb4d3c507f8862f6b97ee77de7ee8c35d8b2b56e00e3cc3f0b34b669b0ba3a259fd69df02d29c52eb0609c8ab7b2956e0568b048795948b8888a7657392ccb0c64e06177acf4ac74c2a81aadd3e52b8ecaf0dd2aaa85f7a4577b029ee10a7466b583609c8f267133eb9f2207ef689f460c080a09289601e554d30a01682558aa90fc08e2d1861d783d4552233ad4e0fc9a409e7a00ce11d39638f4c4052ae4b2204188bbfbccce3011c3b244bc993ad831ebea31e", + "signatureLegacy": { + "r": "0x104347b31a52cc0b53297d757196cae8ab9c602662addc967322a4288f10d420", + "s": "0x4bd9503be935eadc21680dbb66fc6e9d84aa1785bac600e5d11d933f08516727", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x247e60cef6c2445669d41b084352473cc8f3617bb607b06695b4b0f2136c9ded", + "s": "0x075e81db4b282653bdd77bbad646de48cccdc0cc492f24bf09a5f343113da854", + "v": "0xe9" + }, + "signatureBerlin": { + "r": "0xcfc98bf050dd27f8f2af87320fe070a85981bf0530759e35b9abdf25a3000880", + "s": "0x41583cd0ff4eff107b7db59e4e192e59754bac37f0f07e1953e353d05d52ffcd", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x9289601e554d30a01682558aa90fc08e2d1861d783d4552233ad4e0fc9a409e7", + "s": "0x0ce11d39638f4c4052ae4b2204188bbfbccce3011c3b244bc993ad831ebea31e", + "v": "0x0" + } + }, + { + "name": "random-116", + "transaction": { + "to": "0xc51adFA4d4ce845349870b816fFA1153a0D0D74A", + "nonce": 311, + "gasLimit": "0x3a536acba8", + "gasPrice": "0x78009463", + "maxFeePerGas": "0xa8185361b4", + "maxPriorityFeePerGas": "0x57", + "data": "0xc74d0bc23c99281b20fa1f21efc8f9e70260cd78fdf6de1f91e96fff152dfb1e0f099d339a469d3e5c59a720f8b9b8fb68312bf1153291d7e60f50493d9bef0386f2e52efa990e8ef60f067395b548a323336f", + "value": "0xc17b", + "accessList": [ + { + "address": "0x7666B14Ff056f859623D70b9C3d3590Df445CD2a", + "storageKeys": [ + "0xd46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562e" + ] + }, + { + "address": "0x809FF3fd39d14633Ed606Db74AA08d1dA2D00B53", + "storageKeys": [ + "0xd46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562e" + ] + }, + { + "address": "0x5738481C5D2E74F9C0CB268De05d11dc06945110", + "storageKeys": [ + "0xd46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562e" + ] + }, + { + "address": "0xDC2331d4D36e6625c582a213F159Fd3785E81A1a", + "storageKeys": [ + "0xd46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562e" + ] + } + ], + "chainId": "0x34" + }, + "privateKey": "0x49b98fe567a1bb957458ac2ba8653556c06464d2e4d69be214b7b1e40a654367", + "unsignedLegacy": "0xf87b8201378478009463853a536acba894c51adfa4d4ce845349870b816ffa1153a0d0d74a82c17bb853c74d0bc23c99281b20fa1f21efc8f9e70260cd78fdf6de1f91e96fff152dfb1e0f099d339a469d3e5c59a720f8b9b8fb68312bf1153291d7e60f50493d9bef0386f2e52efa990e8ef60f067395b548a323336f", + "unsignedEip155": "0xf87e8201378478009463853a536acba894c51adfa4d4ce845349870b816ffa1153a0d0d74a82c17bb853c74d0bc23c99281b20fa1f21efc8f9e70260cd78fdf6de1f91e96fff152dfb1e0f099d339a469d3e5c59a720f8b9b8fb68312bf1153291d7e60f50493d9bef0386f2e52efa990e8ef60f067395b548a323336f348080", + "unsignedBerlin": "0x01f9015e348201378478009463853a536acba894c51adfa4d4ce845349870b816ffa1153a0d0d74a82c17bb853c74d0bc23c99281b20fa1f21efc8f9e70260cd78fdf6de1f91e96fff152dfb1e0f099d339a469d3e5c59a720f8b9b8fb68312bf1153291d7e60f50493d9bef0386f2e52efa990e8ef60f067395b548a323336ff8e0f7947666b14ff056f859623d70b9c3d3590df445cd2ae1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562ef794809ff3fd39d14633ed606db74aa08d1da2d00b53e1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562ef7945738481c5d2e74f9c0cb268de05d11dc06945110e1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562ef794dc2331d4d36e6625c582a213f159fd3785e81a1ae1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562e", + "unsignedLondon": "0x02f90160348201375785a8185361b4853a536acba894c51adfa4d4ce845349870b816ffa1153a0d0d74a82c17bb853c74d0bc23c99281b20fa1f21efc8f9e70260cd78fdf6de1f91e96fff152dfb1e0f099d339a469d3e5c59a720f8b9b8fb68312bf1153291d7e60f50493d9bef0386f2e52efa990e8ef60f067395b548a323336ff8e0f7947666b14ff056f859623d70b9c3d3590df445cd2ae1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562ef794809ff3fd39d14633ed606db74aa08d1da2d00b53e1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562ef7945738481c5d2e74f9c0cb268de05d11dc06945110e1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562ef794dc2331d4d36e6625c582a213f159fd3785e81a1ae1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562e", + "signedLegacy": "0xf8be8201378478009463853a536acba894c51adfa4d4ce845349870b816ffa1153a0d0d74a82c17bb853c74d0bc23c99281b20fa1f21efc8f9e70260cd78fdf6de1f91e96fff152dfb1e0f099d339a469d3e5c59a720f8b9b8fb68312bf1153291d7e60f50493d9bef0386f2e52efa990e8ef60f067395b548a323336f1ba0556f4dfe1329504979be0816307e0ce78037211ea2e7bec5d6b8bc9f60a04afda06e37059fbe0d544dc1a2770b8996c6a55047cb9aaddb94cbe72b495faf906658", + "signedEip155": "0xf8bf8201378478009463853a536acba894c51adfa4d4ce845349870b816ffa1153a0d0d74a82c17bb853c74d0bc23c99281b20fa1f21efc8f9e70260cd78fdf6de1f91e96fff152dfb1e0f099d339a469d3e5c59a720f8b9b8fb68312bf1153291d7e60f50493d9bef0386f2e52efa990e8ef60f067395b548a323336f818ba0c173a5d7f128ed52878958c11f8b74f9009dd0a5979a2cce34fc7fde936050d4a04400759b6c528ae80bc6f7555e3198549e580d49034cd276155b47bdfd9236ea", + "signedBerlin": "0x01f901a1348201378478009463853a536acba894c51adfa4d4ce845349870b816ffa1153a0d0d74a82c17bb853c74d0bc23c99281b20fa1f21efc8f9e70260cd78fdf6de1f91e96fff152dfb1e0f099d339a469d3e5c59a720f8b9b8fb68312bf1153291d7e60f50493d9bef0386f2e52efa990e8ef60f067395b548a323336ff8e0f7947666b14ff056f859623d70b9c3d3590df445cd2ae1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562ef794809ff3fd39d14633ed606db74aa08d1da2d00b53e1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562ef7945738481c5d2e74f9c0cb268de05d11dc06945110e1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562ef794dc2331d4d36e6625c582a213f159fd3785e81a1ae1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562e80a080351a108556bd4808150fc3bfb79033a54f9ea8a3265b1ebfa39d06126bf7daa064d5c9c646d7ec44762af857a39b85068cca3a833b786edadb72b832681056c8", + "signedLondon": "0x02f901a3348201375785a8185361b4853a536acba894c51adfa4d4ce845349870b816ffa1153a0d0d74a82c17bb853c74d0bc23c99281b20fa1f21efc8f9e70260cd78fdf6de1f91e96fff152dfb1e0f099d339a469d3e5c59a720f8b9b8fb68312bf1153291d7e60f50493d9bef0386f2e52efa990e8ef60f067395b548a323336ff8e0f7947666b14ff056f859623d70b9c3d3590df445cd2ae1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562ef794809ff3fd39d14633ed606db74aa08d1da2d00b53e1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562ef7945738481c5d2e74f9c0cb268de05d11dc06945110e1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562ef794dc2331d4d36e6625c582a213f159fd3785e81a1ae1a0d46d42eefa6aa7583582ad890407c9a7db193b4a23423edabd2ca74f7bff562e01a04d082af3ac7c0a7e99a6064a568f81bfb96b0f595d101ed7d569cd81959952e3a0583b5e75f7d4d4d7609bb8ed349918275a0ddd6dc4a5f49c453316db57183dff", + "signatureLegacy": { + "r": "0x556f4dfe1329504979be0816307e0ce78037211ea2e7bec5d6b8bc9f60a04afd", + "s": "0x6e37059fbe0d544dc1a2770b8996c6a55047cb9aaddb94cbe72b495faf906658", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0xc173a5d7f128ed52878958c11f8b74f9009dd0a5979a2cce34fc7fde936050d4", + "s": "0x4400759b6c528ae80bc6f7555e3198549e580d49034cd276155b47bdfd9236ea", + "v": "0x8b" + }, + "signatureBerlin": { + "r": "0x80351a108556bd4808150fc3bfb79033a54f9ea8a3265b1ebfa39d06126bf7da", + "s": "0x64d5c9c646d7ec44762af857a39b85068cca3a833b786edadb72b832681056c8", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x4d082af3ac7c0a7e99a6064a568f81bfb96b0f595d101ed7d569cd81959952e3", + "s": "0x583b5e75f7d4d4d7609bb8ed349918275a0ddd6dc4a5f49c453316db57183dff", + "v": "0x1" + } + }, + { + "name": "random-118", + "transaction": { + "to": "0x281B936F3d59e957c3EA922E37a95c73332e5b96", + "nonce": 600, + "gasLimit": "0xf1794e37ae", + "gasPrice": "0xd5d4d7", + "maxFeePerGas": "0x2d25e687116261", + "maxPriorityFeePerGas": "0x94", + "data": "0x9a6566a30dbb14b9f76ff2a6d52305e89ce2db8a9c5a77d60eb617011031524bfc87882be44dd563b44d178e4c3674622d05ed7c4a", + "value": "0x8b", + "accessList": [ + { + "address": "0x760D8945682bf8c342ede429A9f25ab89C72e13a", + "storageKeys": [ + "0x6d9b97b43e7aed946139aecc1c7b84a373fdaee6c1e13ff563a28fb7c2765582", + "0x7968665c76c6c5bede5966f35feb84c225c636d193fd8a5426ca88b11ec1471d", + "0x804c9ac01ecbbcdc2dd2c953ebf57914f28183814a2b941a5d15857199d889f8" + ] + }, + { + "address": "0x75f5D5E7fA1F1c543E039f87ea335A7Ae83aaFD9", + "storageKeys": [ + "0x6d9b97b43e7aed946139aecc1c7b84a373fdaee6c1e13ff563a28fb7c2765582", + "0x7968665c76c6c5bede5966f35feb84c225c636d193fd8a5426ca88b11ec1471d", + "0x804c9ac01ecbbcdc2dd2c953ebf57914f28183814a2b941a5d15857199d889f8" + ] + } + ], + "chainId": "0xee7de188d8" + }, + "privateKey": "0x4d69955b756fa187410677f35e34d7d2d4a67323f45587a17a7513f55b61db9e", + "unsignedLegacy": "0xf85a82025883d5d4d785f1794e37ae94281b936f3d59e957c3ea922e37a95c73332e5b96818bb59a6566a30dbb14b9f76ff2a6d52305e89ce2db8a9c5a77d60eb617011031524bfc87882be44dd563b44d178e4c3674622d05ed7c4a", + "unsignedEip155": "0xf86282025883d5d4d785f1794e37ae94281b936f3d59e957c3ea922e37a95c73332e5b96818bb59a6566a30dbb14b9f76ff2a6d52305e89ce2db8a9c5a77d60eb617011031524bfc87882be44dd563b44d178e4c3674622d05ed7c4a85ee7de188d88080", + "unsignedBerlin": "0x01f9015a85ee7de188d882025883d5d4d785f1794e37ae94281b936f3d59e957c3ea922e37a95c73332e5b96818bb59a6566a30dbb14b9f76ff2a6d52305e89ce2db8a9c5a77d60eb617011031524bfc87882be44dd563b44d178e4c3674622d05ed7c4af8f8f87a94760d8945682bf8c342ede429a9f25ab89c72e13af863a06d9b97b43e7aed946139aecc1c7b84a373fdaee6c1e13ff563a28fb7c2765582a07968665c76c6c5bede5966f35feb84c225c636d193fd8a5426ca88b11ec1471da0804c9ac01ecbbcdc2dd2c953ebf57914f28183814a2b941a5d15857199d889f8f87a9475f5d5e7fa1f1c543e039f87ea335a7ae83aafd9f863a06d9b97b43e7aed946139aecc1c7b84a373fdaee6c1e13ff563a28fb7c2765582a07968665c76c6c5bede5966f35feb84c225c636d193fd8a5426ca88b11ec1471da0804c9ac01ecbbcdc2dd2c953ebf57914f28183814a2b941a5d15857199d889f8", + "unsignedLondon": "0x02f9016085ee7de188d88202588194872d25e68711626185f1794e37ae94281b936f3d59e957c3ea922e37a95c73332e5b96818bb59a6566a30dbb14b9f76ff2a6d52305e89ce2db8a9c5a77d60eb617011031524bfc87882be44dd563b44d178e4c3674622d05ed7c4af8f8f87a94760d8945682bf8c342ede429a9f25ab89c72e13af863a06d9b97b43e7aed946139aecc1c7b84a373fdaee6c1e13ff563a28fb7c2765582a07968665c76c6c5bede5966f35feb84c225c636d193fd8a5426ca88b11ec1471da0804c9ac01ecbbcdc2dd2c953ebf57914f28183814a2b941a5d15857199d889f8f87a9475f5d5e7fa1f1c543e039f87ea335a7ae83aafd9f863a06d9b97b43e7aed946139aecc1c7b84a373fdaee6c1e13ff563a28fb7c2765582a07968665c76c6c5bede5966f35feb84c225c636d193fd8a5426ca88b11ec1471da0804c9ac01ecbbcdc2dd2c953ebf57914f28183814a2b941a5d15857199d889f8", + "signedLegacy": "0xf89d82025883d5d4d785f1794e37ae94281b936f3d59e957c3ea922e37a95c73332e5b96818bb59a6566a30dbb14b9f76ff2a6d52305e89ce2db8a9c5a77d60eb617011031524bfc87882be44dd563b44d178e4c3674622d05ed7c4a1ca05c53b4d7768e1081257a8649817aa051dc9e6bffb6b3ce5dd4b69688d8191327a07df454a32fe81781abaa138687f55875452ccc6bfea40223d616f1237aa983d0", + "signedEip155": "0xf8a382025883d5d4d785f1794e37ae94281b936f3d59e957c3ea922e37a95c73332e5b96818bb59a6566a30dbb14b9f76ff2a6d52305e89ce2db8a9c5a77d60eb617011031524bfc87882be44dd563b44d178e4c3674622d05ed7c4a8601dcfbc311d3a077d65126f0f4702e1597cf0a3890e84c477938ea671bdfe927b8a1a341d13fd0a038933aef9e60c6fef28974d284408e91ac7067a7a1c6a64860386c41789f3ef6", + "signedBerlin": "0x01f9019d85ee7de188d882025883d5d4d785f1794e37ae94281b936f3d59e957c3ea922e37a95c73332e5b96818bb59a6566a30dbb14b9f76ff2a6d52305e89ce2db8a9c5a77d60eb617011031524bfc87882be44dd563b44d178e4c3674622d05ed7c4af8f8f87a94760d8945682bf8c342ede429a9f25ab89c72e13af863a06d9b97b43e7aed946139aecc1c7b84a373fdaee6c1e13ff563a28fb7c2765582a07968665c76c6c5bede5966f35feb84c225c636d193fd8a5426ca88b11ec1471da0804c9ac01ecbbcdc2dd2c953ebf57914f28183814a2b941a5d15857199d889f8f87a9475f5d5e7fa1f1c543e039f87ea335a7ae83aafd9f863a06d9b97b43e7aed946139aecc1c7b84a373fdaee6c1e13ff563a28fb7c2765582a07968665c76c6c5bede5966f35feb84c225c636d193fd8a5426ca88b11ec1471da0804c9ac01ecbbcdc2dd2c953ebf57914f28183814a2b941a5d15857199d889f801a012b4eb1aa0e8fdd3c8a4fc76ea9d100f5300059ac8762cfbe6d9edd1c8c27d31a0783a1340ab3cc912580c6943ca0d5cecfe067c82fdc1039a3f62909f2482d0a3", + "signedLondon": "0x02f901a385ee7de188d88202588194872d25e68711626185f1794e37ae94281b936f3d59e957c3ea922e37a95c73332e5b96818bb59a6566a30dbb14b9f76ff2a6d52305e89ce2db8a9c5a77d60eb617011031524bfc87882be44dd563b44d178e4c3674622d05ed7c4af8f8f87a94760d8945682bf8c342ede429a9f25ab89c72e13af863a06d9b97b43e7aed946139aecc1c7b84a373fdaee6c1e13ff563a28fb7c2765582a07968665c76c6c5bede5966f35feb84c225c636d193fd8a5426ca88b11ec1471da0804c9ac01ecbbcdc2dd2c953ebf57914f28183814a2b941a5d15857199d889f8f87a9475f5d5e7fa1f1c543e039f87ea335a7ae83aafd9f863a06d9b97b43e7aed946139aecc1c7b84a373fdaee6c1e13ff563a28fb7c2765582a07968665c76c6c5bede5966f35feb84c225c636d193fd8a5426ca88b11ec1471da0804c9ac01ecbbcdc2dd2c953ebf57914f28183814a2b941a5d15857199d889f801a02c02440b2e29e05b3a4d3f26890ad0a39a04051ca34e291ea8078699bebe3097a01b8e1f69a1c503c6722dd04df35e3fd2d63215b1a043a31efd2f22010b4d452b", + "signatureLegacy": { + "r": "0x5c53b4d7768e1081257a8649817aa051dc9e6bffb6b3ce5dd4b69688d8191327", + "s": "0x7df454a32fe81781abaa138687f55875452ccc6bfea40223d616f1237aa983d0", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x77d65126f0f4702e1597cf0a3890e84c477938ea671bdfe927b8a1a341d13fd0", + "s": "0x38933aef9e60c6fef28974d284408e91ac7067a7a1c6a64860386c41789f3ef6", + "v": "0x1dcfbc311d3" + }, + "signatureBerlin": { + "r": "0x12b4eb1aa0e8fdd3c8a4fc76ea9d100f5300059ac8762cfbe6d9edd1c8c27d31", + "s": "0x783a1340ab3cc912580c6943ca0d5cecfe067c82fdc1039a3f62909f2482d0a3", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x2c02440b2e29e05b3a4d3f26890ad0a39a04051ca34e291ea8078699bebe3097", + "s": "0x1b8e1f69a1c503c6722dd04df35e3fd2d63215b1a043a31efd2f22010b4d452b", + "v": "0x1" + } + }, + { + "name": "random-119", + "transaction": { + "to": "0x8B84e80340de4a3955151ff288F23D13c832B4C0", + "nonce": 227, + "gasLimit": "0xd55f", + "gasPrice": "0x7a4f4acd51", + "maxFeePerGas": "0x3cd477caa236a9", + "maxPriorityFeePerGas": "0x76ecec", + "data": "0xd16f9f341d021261f40223ff282a0e93bf458349bfcbc04646cde253a49b54cd5fe52714a6650a81a6f43fa496ac347d82af861d69a38fd5dccab51efc5b97fead04975f7b713df368055b8968a61e40a10d0cace1d1da4217c2ef4b590fc3b80b4405d165553862", + "value": "0xe4b74643f6", + "accessList": [ + { + "address": "0xa9dD79F179cB4b7F2daED039bA84cb965d2cd1F0", + "storageKeys": [ + "0x97da5aa3419b1d5830e2bc5ddfa29e585ffec28eba8cdd8454e8a263553157bd", + "0xca7dde1812980486a5d9f4369c0217f370dcbd5580c2d5e29455d1f4579a265f", + "0x47cd3ea4395937253b8823cc9ad5de0fac3e26e0107dc1f9bf3b07aac69b3f51", + "0x16c419acdb50d30c2a770bfac0073fa44180f192acaf8a54c6aff76d860fec2a" + ] + }, + { + "address": "0x2dFC27050a7a53F0CB9Cf2ca5d6A1DA625365190", + "storageKeys": [ + "0x97da5aa3419b1d5830e2bc5ddfa29e585ffec28eba8cdd8454e8a263553157bd", + "0xca7dde1812980486a5d9f4369c0217f370dcbd5580c2d5e29455d1f4579a265f", + "0x47cd3ea4395937253b8823cc9ad5de0fac3e26e0107dc1f9bf3b07aac69b3f51", + "0x16c419acdb50d30c2a770bfac0073fa44180f192acaf8a54c6aff76d860fec2a" + ] + } + ], + "chainId": "0x3522" + }, + "privateKey": "0x1cbe3ca8e7e64bdec3ba659e7e6f07c4c61e087123d5b3662f747d1a110b7696", + "unsignedLegacy": "0xf89081e3857a4f4acd5182d55f948b84e80340de4a3955151ff288f23d13c832b4c085e4b74643f6b868d16f9f341d021261f40223ff282a0e93bf458349bfcbc04646cde253a49b54cd5fe52714a6650a81a6f43fa496ac347d82af861d69a38fd5dccab51efc5b97fead04975f7b713df368055b8968a61e40a10d0cace1d1da4217c2ef4b590fc3b80b4405d165553862", + "unsignedEip155": "0xf89581e3857a4f4acd5182d55f948b84e80340de4a3955151ff288f23d13c832b4c085e4b74643f6b868d16f9f341d021261f40223ff282a0e93bf458349bfcbc04646cde253a49b54cd5fe52714a6650a81a6f43fa496ac347d82af861d69a38fd5dccab51efc5b97fead04975f7b713df368055b8968a61e40a10d0cace1d1da4217c2ef4b590fc3b80b4405d1655538628235228080", + "unsignedBerlin": "0x01f901d082352281e3857a4f4acd5182d55f948b84e80340de4a3955151ff288f23d13c832b4c085e4b74643f6b868d16f9f341d021261f40223ff282a0e93bf458349bfcbc04646cde253a49b54cd5fe52714a6650a81a6f43fa496ac347d82af861d69a38fd5dccab51efc5b97fead04975f7b713df368055b8968a61e40a10d0cace1d1da4217c2ef4b590fc3b80b4405d165553862f9013af89b94a9dd79f179cb4b7f2daed039ba84cb965d2cd1f0f884a097da5aa3419b1d5830e2bc5ddfa29e585ffec28eba8cdd8454e8a263553157bda0ca7dde1812980486a5d9f4369c0217f370dcbd5580c2d5e29455d1f4579a265fa047cd3ea4395937253b8823cc9ad5de0fac3e26e0107dc1f9bf3b07aac69b3f51a016c419acdb50d30c2a770bfac0073fa44180f192acaf8a54c6aff76d860fec2af89b942dfc27050a7a53f0cb9cf2ca5d6a1da625365190f884a097da5aa3419b1d5830e2bc5ddfa29e585ffec28eba8cdd8454e8a263553157bda0ca7dde1812980486a5d9f4369c0217f370dcbd5580c2d5e29455d1f4579a265fa047cd3ea4395937253b8823cc9ad5de0fac3e26e0107dc1f9bf3b07aac69b3f51a016c419acdb50d30c2a770bfac0073fa44180f192acaf8a54c6aff76d860fec2a", + "unsignedLondon": "0x02f901d682352281e38376ecec873cd477caa236a982d55f948b84e80340de4a3955151ff288f23d13c832b4c085e4b74643f6b868d16f9f341d021261f40223ff282a0e93bf458349bfcbc04646cde253a49b54cd5fe52714a6650a81a6f43fa496ac347d82af861d69a38fd5dccab51efc5b97fead04975f7b713df368055b8968a61e40a10d0cace1d1da4217c2ef4b590fc3b80b4405d165553862f9013af89b94a9dd79f179cb4b7f2daed039ba84cb965d2cd1f0f884a097da5aa3419b1d5830e2bc5ddfa29e585ffec28eba8cdd8454e8a263553157bda0ca7dde1812980486a5d9f4369c0217f370dcbd5580c2d5e29455d1f4579a265fa047cd3ea4395937253b8823cc9ad5de0fac3e26e0107dc1f9bf3b07aac69b3f51a016c419acdb50d30c2a770bfac0073fa44180f192acaf8a54c6aff76d860fec2af89b942dfc27050a7a53f0cb9cf2ca5d6a1da625365190f884a097da5aa3419b1d5830e2bc5ddfa29e585ffec28eba8cdd8454e8a263553157bda0ca7dde1812980486a5d9f4369c0217f370dcbd5580c2d5e29455d1f4579a265fa047cd3ea4395937253b8823cc9ad5de0fac3e26e0107dc1f9bf3b07aac69b3f51a016c419acdb50d30c2a770bfac0073fa44180f192acaf8a54c6aff76d860fec2a", + "signedLegacy": "0xf8d381e3857a4f4acd5182d55f948b84e80340de4a3955151ff288f23d13c832b4c085e4b74643f6b868d16f9f341d021261f40223ff282a0e93bf458349bfcbc04646cde253a49b54cd5fe52714a6650a81a6f43fa496ac347d82af861d69a38fd5dccab51efc5b97fead04975f7b713df368055b8968a61e40a10d0cace1d1da4217c2ef4b590fc3b80b4405d1655538621ba093c8ab075f172ad33c29b3451907bc225cfd8a86c2c5097db1a8ff8436773725a041c2efc764fc902a8af50ad84dd1e34ca89247ee8e51a613ee03877b440fb719", + "signedEip155": "0xf8d581e3857a4f4acd5182d55f948b84e80340de4a3955151ff288f23d13c832b4c085e4b74643f6b868d16f9f341d021261f40223ff282a0e93bf458349bfcbc04646cde253a49b54cd5fe52714a6650a81a6f43fa496ac347d82af861d69a38fd5dccab51efc5b97fead04975f7b713df368055b8968a61e40a10d0cace1d1da4217c2ef4b590fc3b80b4405d165553862826a67a06a6b3bec6ccbe24b2730a3ff687705184f12028a3c1fb97db52d8bc9aecfeea6a07d9bb6a11f3e0bef63940117b4eec7d5a9641ffaf3cec283e5a8e8af718e2cc4", + "signedBerlin": "0x01f9021382352281e3857a4f4acd5182d55f948b84e80340de4a3955151ff288f23d13c832b4c085e4b74643f6b868d16f9f341d021261f40223ff282a0e93bf458349bfcbc04646cde253a49b54cd5fe52714a6650a81a6f43fa496ac347d82af861d69a38fd5dccab51efc5b97fead04975f7b713df368055b8968a61e40a10d0cace1d1da4217c2ef4b590fc3b80b4405d165553862f9013af89b94a9dd79f179cb4b7f2daed039ba84cb965d2cd1f0f884a097da5aa3419b1d5830e2bc5ddfa29e585ffec28eba8cdd8454e8a263553157bda0ca7dde1812980486a5d9f4369c0217f370dcbd5580c2d5e29455d1f4579a265fa047cd3ea4395937253b8823cc9ad5de0fac3e26e0107dc1f9bf3b07aac69b3f51a016c419acdb50d30c2a770bfac0073fa44180f192acaf8a54c6aff76d860fec2af89b942dfc27050a7a53f0cb9cf2ca5d6a1da625365190f884a097da5aa3419b1d5830e2bc5ddfa29e585ffec28eba8cdd8454e8a263553157bda0ca7dde1812980486a5d9f4369c0217f370dcbd5580c2d5e29455d1f4579a265fa047cd3ea4395937253b8823cc9ad5de0fac3e26e0107dc1f9bf3b07aac69b3f51a016c419acdb50d30c2a770bfac0073fa44180f192acaf8a54c6aff76d860fec2a80a08135947897cbbfc3f69d40280aa1aa6d763ce073fb0de83f8cd68b2fb2bdb410a0658008ab7e27450a69fb3f1f37d039984928c646b7f73883b12e6ed14d21d9b8", + "signedLondon": "0x02f9021982352281e38376ecec873cd477caa236a982d55f948b84e80340de4a3955151ff288f23d13c832b4c085e4b74643f6b868d16f9f341d021261f40223ff282a0e93bf458349bfcbc04646cde253a49b54cd5fe52714a6650a81a6f43fa496ac347d82af861d69a38fd5dccab51efc5b97fead04975f7b713df368055b8968a61e40a10d0cace1d1da4217c2ef4b590fc3b80b4405d165553862f9013af89b94a9dd79f179cb4b7f2daed039ba84cb965d2cd1f0f884a097da5aa3419b1d5830e2bc5ddfa29e585ffec28eba8cdd8454e8a263553157bda0ca7dde1812980486a5d9f4369c0217f370dcbd5580c2d5e29455d1f4579a265fa047cd3ea4395937253b8823cc9ad5de0fac3e26e0107dc1f9bf3b07aac69b3f51a016c419acdb50d30c2a770bfac0073fa44180f192acaf8a54c6aff76d860fec2af89b942dfc27050a7a53f0cb9cf2ca5d6a1da625365190f884a097da5aa3419b1d5830e2bc5ddfa29e585ffec28eba8cdd8454e8a263553157bda0ca7dde1812980486a5d9f4369c0217f370dcbd5580c2d5e29455d1f4579a265fa047cd3ea4395937253b8823cc9ad5de0fac3e26e0107dc1f9bf3b07aac69b3f51a016c419acdb50d30c2a770bfac0073fa44180f192acaf8a54c6aff76d860fec2a80a04d2e2795cb72a49d1c72de9da28f3c0e1ea4449df0c1fa1dceb31d4017e6a160a068edeb9541beca90b858f51b5c35e113a2a75051d6f94d5ee5cf7cc7f4a58a2c", + "signatureLegacy": { + "r": "0x93c8ab075f172ad33c29b3451907bc225cfd8a86c2c5097db1a8ff8436773725", + "s": "0x41c2efc764fc902a8af50ad84dd1e34ca89247ee8e51a613ee03877b440fb719", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x6a6b3bec6ccbe24b2730a3ff687705184f12028a3c1fb97db52d8bc9aecfeea6", + "s": "0x7d9bb6a11f3e0bef63940117b4eec7d5a9641ffaf3cec283e5a8e8af718e2cc4", + "v": "0x6a67" + }, + "signatureBerlin": { + "r": "0x8135947897cbbfc3f69d40280aa1aa6d763ce073fb0de83f8cd68b2fb2bdb410", + "s": "0x658008ab7e27450a69fb3f1f37d039984928c646b7f73883b12e6ed14d21d9b8", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x4d2e2795cb72a49d1c72de9da28f3c0e1ea4449df0c1fa1dceb31d4017e6a160", + "s": "0x68edeb9541beca90b858f51b5c35e113a2a75051d6f94d5ee5cf7cc7f4a58a2c", + "v": "0x0" + } + }, + { + "name": "random-121", + "transaction": { + "to": "0x6c4C6E45F345188ccC31DD88902F3011A8b6B70C", + "nonce": 4, + "gasLimit": "0xd283b1aa91", + "gasPrice": "0x9d114e0e31", + "maxFeePerGas": "0x29df1081", + "maxPriorityFeePerGas": "0x62ca", + "data": "0x19081f72421ff9499adc13", + "value": "0xf1", + "accessList": [ + { + "address": "0x9555dd9b86149C029e09EbAEea77b2fC0E747660", + "storageKeys": [ + "0x76a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8", + "0x34cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfceb" + ] + }, + { + "address": "0x6A53d3c2edEF29BAc6083b24B52606AdfdBb87a1", + "storageKeys": [ + "0x76a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8", + "0x34cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfceb" + ] + }, + { + "address": "0x0A3EF36c5c01aaCe09Be3eF3E664a5e961F9147E", + "storageKeys": [ + "0x76a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8", + "0x34cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfceb" + ] + }, + { + "address": "0xeA37493E3834073CC4f030a17D9e0b752994b21D", + "storageKeys": [ + "0x76a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8", + "0x34cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfceb" + ] + } + ], + "chainId": "0x1b120e3c" + }, + "privateKey": "0x388452e27ffab2112fc5b44925f7690e2d76f7285fa15ee95e0a3474436add3d", + "unsignedLegacy": "0xf004859d114e0e3185d283b1aa91946c4c6e45f345188ccc31dd88902f3011a8b6b70c81f18b19081f72421ff9499adc13", + "unsignedEip155": "0xf704859d114e0e3185d283b1aa91946c4c6e45f345188ccc31dd88902f3011a8b6b70c81f18b19081f72421ff9499adc13841b120e3c8080", + "unsignedBerlin": "0x01f901a4841b120e3c04859d114e0e3185d283b1aa91946c4c6e45f345188ccc31dd88902f3011a8b6b70c81f18b19081f72421ff9499adc13f9016cf859949555dd9b86149c029e09ebaeea77b2fc0e747660f842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfcebf859946a53d3c2edef29bac6083b24b52606adfdbb87a1f842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfcebf859940a3ef36c5c01aace09be3ef3e664a5e961f9147ef842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfcebf85994ea37493e3834073cc4f030a17d9e0b752994b21df842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfceb", + "unsignedLondon": "0x02f901a6841b120e3c048262ca8429df108185d283b1aa91946c4c6e45f345188ccc31dd88902f3011a8b6b70c81f18b19081f72421ff9499adc13f9016cf859949555dd9b86149c029e09ebaeea77b2fc0e747660f842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfcebf859946a53d3c2edef29bac6083b24b52606adfdbb87a1f842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfcebf859940a3ef36c5c01aace09be3ef3e664a5e961f9147ef842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfcebf85994ea37493e3834073cc4f030a17d9e0b752994b21df842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfceb", + "signedLegacy": "0xf87304859d114e0e3185d283b1aa91946c4c6e45f345188ccc31dd88902f3011a8b6b70c81f18b19081f72421ff9499adc131ba00a97672f57ce59c1fe21f0c5c8df731533cb920fbc5248da879f3778e298a159a015e7e2961417886b1949be9fab6740ca7cf5a018e21036861aab2045ddea237d", + "signedEip155": "0xf87704859d114e0e3185d283b1aa91946c4c6e45f345188ccc31dd88902f3011a8b6b70c81f18b19081f72421ff9499adc138436241c9ca06024bd23106f98ea90b6a496cd733d77a9d67cd06810bf97e5c8cfed4087f5fea02746d913bf78257216d991fe4fd0375954e3e6edc28210dff563858b0e8fda10", + "signedBerlin": "0x01f901e7841b120e3c04859d114e0e3185d283b1aa91946c4c6e45f345188ccc31dd88902f3011a8b6b70c81f18b19081f72421ff9499adc13f9016cf859949555dd9b86149c029e09ebaeea77b2fc0e747660f842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfcebf859946a53d3c2edef29bac6083b24b52606adfdbb87a1f842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfcebf859940a3ef36c5c01aace09be3ef3e664a5e961f9147ef842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfcebf85994ea37493e3834073cc4f030a17d9e0b752994b21df842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfceb80a0b7e30c3d6779a2f98f152621e45c101ea93d1613effa22572e85076e39d877fba007c2ecc8546cf64acbd68ec5e1cb7924720973e406a913f7b292b603e01075b8", + "signedLondon": "0x02f901e9841b120e3c048262ca8429df108185d283b1aa91946c4c6e45f345188ccc31dd88902f3011a8b6b70c81f18b19081f72421ff9499adc13f9016cf859949555dd9b86149c029e09ebaeea77b2fc0e747660f842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfcebf859946a53d3c2edef29bac6083b24b52606adfdbb87a1f842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfcebf859940a3ef36c5c01aace09be3ef3e664a5e961f9147ef842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfcebf85994ea37493e3834073cc4f030a17d9e0b752994b21df842a076a6cfa747fd225ff39be058e74a7ded9af856100b560c7134a71db1072188c8a034cce4732a6cd97a50f061077c007ac06af2c53d2397db1655418f361a5bfceb01a0f64ad9c5cd94cceafea949f1cd4e9d034a5c83dc649019cb04c96c3783a0ee2da035283288111df0300afe61a915d9dc5af533bad8d7211ef606af1f11b7372245", + "signatureLegacy": { + "r": "0x0a97672f57ce59c1fe21f0c5c8df731533cb920fbc5248da879f3778e298a159", + "s": "0x15e7e2961417886b1949be9fab6740ca7cf5a018e21036861aab2045ddea237d", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x6024bd23106f98ea90b6a496cd733d77a9d67cd06810bf97e5c8cfed4087f5fe", + "s": "0x2746d913bf78257216d991fe4fd0375954e3e6edc28210dff563858b0e8fda10", + "v": "0x36241c9c" + }, + "signatureBerlin": { + "r": "0xb7e30c3d6779a2f98f152621e45c101ea93d1613effa22572e85076e39d877fb", + "s": "0x07c2ecc8546cf64acbd68ec5e1cb7924720973e406a913f7b292b603e01075b8", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xf64ad9c5cd94cceafea949f1cd4e9d034a5c83dc649019cb04c96c3783a0ee2d", + "s": "0x35283288111df0300afe61a915d9dc5af533bad8d7211ef606af1f11b7372245", + "v": "0x1" + } + }, + { + "name": "random-122", + "transaction": { + "to": "0xA73a0e91A0D9399Ef30b3B187e39aB2A28CBC5A2", + "nonce": 416, + "gasLimit": "0x8114", + "gasPrice": "0xb595ab12", + "maxFeePerGas": "0xc2522180dd0a", + "maxPriorityFeePerGas": "0x294a", + "data": "0xce61bdd15d94e3dbeeaf31a57ef94d630c822d1a1862476a1574c7b193a0aaece9ecd08954282c4d7bf9cf7d0baa3810b1e11d6c8ee7bb2aa4ef0d0357ec65bd1f6f9da441899141fe039f3775f8894afbd83ea79002323ff33fd25955dd2d40ea1bab508e46506c510454d615a35cfe5a83225282", + "value": "0xe469cc73", + "accessList": [], + "chainId": "0x43bfc93eb5" + }, + "privateKey": "0x6613b0f304cc1e668b1a97d3dd8afe04195e4cf65f6642bb9abf0e30d05438b3", + "unsignedLegacy": "0xf89c8201a084b595ab1282811494a73a0e91a0d9399ef30b3b187e39ab2a28cbc5a284e469cc73b875ce61bdd15d94e3dbeeaf31a57ef94d630c822d1a1862476a1574c7b193a0aaece9ecd08954282c4d7bf9cf7d0baa3810b1e11d6c8ee7bb2aa4ef0d0357ec65bd1f6f9da441899141fe039f3775f8894afbd83ea79002323ff33fd25955dd2d40ea1bab508e46506c510454d615a35cfe5a83225282", + "unsignedEip155": "0xf8a48201a084b595ab1282811494a73a0e91a0d9399ef30b3b187e39ab2a28cbc5a284e469cc73b875ce61bdd15d94e3dbeeaf31a57ef94d630c822d1a1862476a1574c7b193a0aaece9ecd08954282c4d7bf9cf7d0baa3810b1e11d6c8ee7bb2aa4ef0d0357ec65bd1f6f9da441899141fe039f3775f8894afbd83ea79002323ff33fd25955dd2d40ea1bab508e46506c510454d615a35cfe5a832252828543bfc93eb58080", + "unsignedBerlin": "0x01f8a38543bfc93eb58201a084b595ab1282811494a73a0e91a0d9399ef30b3b187e39ab2a28cbc5a284e469cc73b875ce61bdd15d94e3dbeeaf31a57ef94d630c822d1a1862476a1574c7b193a0aaece9ecd08954282c4d7bf9cf7d0baa3810b1e11d6c8ee7bb2aa4ef0d0357ec65bd1f6f9da441899141fe039f3775f8894afbd83ea79002323ff33fd25955dd2d40ea1bab508e46506c510454d615a35cfe5a83225282c0", + "unsignedLondon": "0x02f8a88543bfc93eb58201a082294a86c2522180dd0a82811494a73a0e91a0d9399ef30b3b187e39ab2a28cbc5a284e469cc73b875ce61bdd15d94e3dbeeaf31a57ef94d630c822d1a1862476a1574c7b193a0aaece9ecd08954282c4d7bf9cf7d0baa3810b1e11d6c8ee7bb2aa4ef0d0357ec65bd1f6f9da441899141fe039f3775f8894afbd83ea79002323ff33fd25955dd2d40ea1bab508e46506c510454d615a35cfe5a83225282c0", + "signedLegacy": "0xf8df8201a084b595ab1282811494a73a0e91a0d9399ef30b3b187e39ab2a28cbc5a284e469cc73b875ce61bdd15d94e3dbeeaf31a57ef94d630c822d1a1862476a1574c7b193a0aaece9ecd08954282c4d7bf9cf7d0baa3810b1e11d6c8ee7bb2aa4ef0d0357ec65bd1f6f9da441899141fe039f3775f8894afbd83ea79002323ff33fd25955dd2d40ea1bab508e46506c510454d615a35cfe5a832252821ba0b7716067f0a3e600e71023acdac68130f1db127836bf3f7e8368a8e82fab0564a0661f26907aea9407a87a6d748d0fd38b349a336c947c6e6a856b67edfd135a1c", + "signedEip155": "0xf8e48201a084b595ab1282811494a73a0e91a0d9399ef30b3b187e39ab2a28cbc5a284e469cc73b875ce61bdd15d94e3dbeeaf31a57ef94d630c822d1a1862476a1574c7b193a0aaece9ecd08954282c4d7bf9cf7d0baa3810b1e11d6c8ee7bb2aa4ef0d0357ec65bd1f6f9da441899141fe039f3775f8894afbd83ea79002323ff33fd25955dd2d40ea1bab508e46506c510454d615a35cfe5a8322528285877f927d8da0168b2aab3dcc2b7d438c97bb5abf0f8626d13482ba1cdc780d7b7db35fc550aaa07a58703d81ecccabde7cbaa3de3712ab628469373cfc963413377823f1edbcf3", + "signedBerlin": "0x01f8e68543bfc93eb58201a084b595ab1282811494a73a0e91a0d9399ef30b3b187e39ab2a28cbc5a284e469cc73b875ce61bdd15d94e3dbeeaf31a57ef94d630c822d1a1862476a1574c7b193a0aaece9ecd08954282c4d7bf9cf7d0baa3810b1e11d6c8ee7bb2aa4ef0d0357ec65bd1f6f9da441899141fe039f3775f8894afbd83ea79002323ff33fd25955dd2d40ea1bab508e46506c510454d615a35cfe5a83225282c080a0540452ba0cbd3e7f719b579f29130999cdaf1ec530683495e6398f4cae63eddaa06ecf2829d59c28a8cb07e24d443df71b4a107c8755e7bf1ee974c40253a7b188", + "signedLondon": "0x02f8eb8543bfc93eb58201a082294a86c2522180dd0a82811494a73a0e91a0d9399ef30b3b187e39ab2a28cbc5a284e469cc73b875ce61bdd15d94e3dbeeaf31a57ef94d630c822d1a1862476a1574c7b193a0aaece9ecd08954282c4d7bf9cf7d0baa3810b1e11d6c8ee7bb2aa4ef0d0357ec65bd1f6f9da441899141fe039f3775f8894afbd83ea79002323ff33fd25955dd2d40ea1bab508e46506c510454d615a35cfe5a83225282c001a01050becd594b58dfa9b86ac8c2f65b62500efee9dbc2207fb15923f7098e3638a04e8df8d21823712ada89d6389904b2f646a9176394be95ae808432c3e0d7bcc4", + "signatureLegacy": { + "r": "0xb7716067f0a3e600e71023acdac68130f1db127836bf3f7e8368a8e82fab0564", + "s": "0x661f26907aea9407a87a6d748d0fd38b349a336c947c6e6a856b67edfd135a1c", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x168b2aab3dcc2b7d438c97bb5abf0f8626d13482ba1cdc780d7b7db35fc550aa", + "s": "0x7a58703d81ecccabde7cbaa3de3712ab628469373cfc963413377823f1edbcf3", + "v": "0x877f927d8d" + }, + "signatureBerlin": { + "r": "0x540452ba0cbd3e7f719b579f29130999cdaf1ec530683495e6398f4cae63edda", + "s": "0x6ecf2829d59c28a8cb07e24d443df71b4a107c8755e7bf1ee974c40253a7b188", + "v": "0x0" + }, + "signatureLondon": { + "r": "0x1050becd594b58dfa9b86ac8c2f65b62500efee9dbc2207fb15923f7098e3638", + "s": "0x4e8df8d21823712ada89d6389904b2f646a9176394be95ae808432c3e0d7bcc4", + "v": "0x1" + } + }, + { + "name": "random-123", + "transaction": { + "to": "0x9A1dE66d73edd6bf4dA00706FC62009eA2887a82", + "nonce": 630, + "gasLimit": "0x0be3df34", + "gasPrice": "0xd0efc1", + "maxFeePerGas": "0xd65073437d2d5c", + "maxPriorityFeePerGas": "0x97", + "data": "0x5e26e59532786c3814729085ed0348339a071794d0df2a304e1f3dceb09423af33ac1c441b0130e5b7", + "value": "0x036154a5", + "accessList": [ + { + "address": "0x12e2Eb6DCb47C31ae6C2B0af06eE8eeDcd60BC19", + "storageKeys": [ + "0x0d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25f", + "0x6f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcd", + "0xed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044f" + ] + }, + { + "address": "0x7F1D0e802b100708c45e0b5563c863454788C896", + "storageKeys": [ + "0x0d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25f", + "0x6f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcd", + "0xed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044f" + ] + }, + { + "address": "0x53EFc66D1A86FA1eCA0b0076e7f00ab97135029C", + "storageKeys": [ + "0x0d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25f", + "0x6f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcd", + "0xed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044f" + ] + }, + { + "address": "0x212Fa5665990D424e21a1E6201FdD22cdE697B5d", + "storageKeys": [ + "0x0d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25f", + "0x6f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcd", + "0xed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044f" + ] + } + ], + "chainId": "0xb4e2" + }, + "privateKey": "0x6e271ce4d1f004a769a4d83c51ef78ae86c9f45497820157afe0d9e55cad9e4b", + "unsignedLegacy": "0xf85082027683d0efc1840be3df34949a1de66d73edd6bf4da00706fc62009ea2887a8284036154a5a95e26e59532786c3814729085ed0348339a071794d0df2a304e1f3dceb09423af33ac1c441b0130e5b7", + "unsignedEip155": "0xf85582027683d0efc1840be3df34949a1de66d73edd6bf4da00706fc62009ea2887a8284036154a5a95e26e59532786c3814729085ed0348339a071794d0df2a304e1f3dceb09423af33ac1c441b0130e5b782b4e28080", + "unsignedBerlin": "0x01f9024682b4e282027683d0efc1840be3df34949a1de66d73edd6bf4da00706fc62009ea2887a8284036154a5a95e26e59532786c3814729085ed0348339a071794d0df2a304e1f3dceb09423af33ac1c441b0130e5b7f901f0f87a9412e2eb6dcb47c31ae6c2b0af06ee8eedcd60bc19f863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044ff87a947f1d0e802b100708c45e0b5563c863454788c896f863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044ff87a9453efc66d1a86fa1eca0b0076e7f00ab97135029cf863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044ff87a94212fa5665990d424e21a1e6201fdd22cde697b5df863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044f", + "unsignedLondon": "0x02f9024c82b4e2820276819787d65073437d2d5c840be3df34949a1de66d73edd6bf4da00706fc62009ea2887a8284036154a5a95e26e59532786c3814729085ed0348339a071794d0df2a304e1f3dceb09423af33ac1c441b0130e5b7f901f0f87a9412e2eb6dcb47c31ae6c2b0af06ee8eedcd60bc19f863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044ff87a947f1d0e802b100708c45e0b5563c863454788c896f863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044ff87a9453efc66d1a86fa1eca0b0076e7f00ab97135029cf863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044ff87a94212fa5665990d424e21a1e6201fdd22cde697b5df863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044f", + "signedLegacy": "0xf89382027683d0efc1840be3df34949a1de66d73edd6bf4da00706fc62009ea2887a8284036154a5a95e26e59532786c3814729085ed0348339a071794d0df2a304e1f3dceb09423af33ac1c441b0130e5b71ba0b4bc51d01f0f495391225d9819a394904c6f5ea81f391d211fc32b8f0ba2607ca006e0e1df2ed72eec2870c338e0bcabdec7201cc90d726141f79cbcca9abdeb18", + "signedEip155": "0xf89682027683d0efc1840be3df34949a1de66d73edd6bf4da00706fc62009ea2887a8284036154a5a95e26e59532786c3814729085ed0348339a071794d0df2a304e1f3dceb09423af33ac1c441b0130e5b7830169e8a06c634b55b2fc9ee07a462bb2a4006f1a7e832cf04bedee1effa0f580f110c423a0089de3b3d46ae8f9817d4e4a6533c71c8789a05e509eb86b9c2ded9f1e5331bd", + "signedBerlin": "0x01f9028982b4e282027683d0efc1840be3df34949a1de66d73edd6bf4da00706fc62009ea2887a8284036154a5a95e26e59532786c3814729085ed0348339a071794d0df2a304e1f3dceb09423af33ac1c441b0130e5b7f901f0f87a9412e2eb6dcb47c31ae6c2b0af06ee8eedcd60bc19f863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044ff87a947f1d0e802b100708c45e0b5563c863454788c896f863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044ff87a9453efc66d1a86fa1eca0b0076e7f00ab97135029cf863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044ff87a94212fa5665990d424e21a1e6201fdd22cde697b5df863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044f80a0b92f283cbac1231bb38d388d1d6f810ff4531f83033ccb84369cfc8fce346872a003009bd70c6bb785c50ef188030dc51022f498e16d89719fd40932c839bc89fb", + "signedLondon": "0x02f9028f82b4e2820276819787d65073437d2d5c840be3df34949a1de66d73edd6bf4da00706fc62009ea2887a8284036154a5a95e26e59532786c3814729085ed0348339a071794d0df2a304e1f3dceb09423af33ac1c441b0130e5b7f901f0f87a9412e2eb6dcb47c31ae6c2b0af06ee8eedcd60bc19f863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044ff87a947f1d0e802b100708c45e0b5563c863454788c896f863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044ff87a9453efc66d1a86fa1eca0b0076e7f00ab97135029cf863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044ff87a94212fa5665990d424e21a1e6201fdd22cde697b5df863a00d28f683a8b540bae49488db6a5facbb94daca4bf5a6b585a6641ade2a60b25fa06f5a8e8104b542b54214764e66af6fb9e64197fbfffeb79e710b1786fad0adcda0ed2ac950e5121d17089bc449b8a20c541511a7fdd92d31a6e6f028fccd96044f80a0ae0bc6207b9d6bd37b7326d2934068785d86c7e5d746f0aa579ea57c0832a4b6a06bcce61e969c6bf7c7ac78404758a8d2342be08e83689ef91161a2dcd2ef949b", + "signatureLegacy": { + "r": "0xb4bc51d01f0f495391225d9819a394904c6f5ea81f391d211fc32b8f0ba2607c", + "s": "0x06e0e1df2ed72eec2870c338e0bcabdec7201cc90d726141f79cbcca9abdeb18", + "v": "0x1b" + }, + "signatureEip155": { + "r": "0x6c634b55b2fc9ee07a462bb2a4006f1a7e832cf04bedee1effa0f580f110c423", + "s": "0x089de3b3d46ae8f9817d4e4a6533c71c8789a05e509eb86b9c2ded9f1e5331bd", + "v": "0x169e8" + }, + "signatureBerlin": { + "r": "0xb92f283cbac1231bb38d388d1d6f810ff4531f83033ccb84369cfc8fce346872", + "s": "0x03009bd70c6bb785c50ef188030dc51022f498e16d89719fd40932c839bc89fb", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xae0bc6207b9d6bd37b7326d2934068785d86c7e5d746f0aa579ea57c0832a4b6", + "s": "0x6bcce61e969c6bf7c7ac78404758a8d2342be08e83689ef91161a2dcd2ef949b", + "v": "0x0" + } + }, + { + "name": "random-126", + "transaction": { + "to": "0x6D1474B69F191290ee87b7241509865DBfD65028", + "nonce": 999, + "gasLimit": "0x41f3afcb82", + "gasPrice": "0x85197d7a", + "maxFeePerGas": "0x5d34697dc6", + "maxPriorityFeePerGas": "0x34", + "data": "0x4f55080dff2cc699a2164ffc9e3edf4f07428067ded4ae40def88766ca89789a1e2d4e76bd1a8718ed8c07c78c649a200a6e7ab03835190d678acb114e50bf51cbcc2ad094b65efb21bb7d91a1278db416eae0cd9c72829ae8c0d295f773d212", + "value": "0x25", + "accessList": [ + { + "address": "0x97103eAD47f549Ccc2c01a98071ADaF61dF7b54f", + "storageKeys": [ + "0x20dadcf9996b63587cb52c1c1c757ca7e8e302bb125a1f76f3a6d46e00d2c478", + "0xc7277aca05b03c06ae3649e4c75b94c2c532f0f1889c0ee7d477f6df2fe3cbc0", + "0x9169bb6fe55edef1607e89a2b0720fd2df5ca5d6be75c10f11c8ce8e423057eb", + "0x465576542851c8ae163f44bef21226c1d07969f1d690e29347f7998d71b4caa3" + ] + }, + { + "address": "0x6d483D9c7072203369522074C55383C4Bceb24d3", + "storageKeys": [ + "0x20dadcf9996b63587cb52c1c1c757ca7e8e302bb125a1f76f3a6d46e00d2c478", + "0xc7277aca05b03c06ae3649e4c75b94c2c532f0f1889c0ee7d477f6df2fe3cbc0", + "0x9169bb6fe55edef1607e89a2b0720fd2df5ca5d6be75c10f11c8ce8e423057eb", + "0x465576542851c8ae163f44bef21226c1d07969f1d690e29347f7998d71b4caa3" + ] + } + ], + "chainId": "0xaa1850a210" + }, + "privateKey": "0xcffb9d8944699452a2d881117e693d6cac9f032d82af63c2d077790354598cd1", + "unsignedLegacy": "0xf8868203e78485197d7a8541f3afcb82946d1474b69f191290ee87b7241509865dbfd6502825b8604f55080dff2cc699a2164ffc9e3edf4f07428067ded4ae40def88766ca89789a1e2d4e76bd1a8718ed8c07c78c649a200a6e7ab03835190d678acb114e50bf51cbcc2ad094b65efb21bb7d91a1278db416eae0cd9c72829ae8c0d295f773d212", + "unsignedEip155": "0xf88e8203e78485197d7a8541f3afcb82946d1474b69f191290ee87b7241509865dbfd6502825b8604f55080dff2cc699a2164ffc9e3edf4f07428067ded4ae40def88766ca89789a1e2d4e76bd1a8718ed8c07c78c649a200a6e7ab03835190d678acb114e50bf51cbcc2ad094b65efb21bb7d91a1278db416eae0cd9c72829ae8c0d295f773d21285aa1850a2108080", + "unsignedBerlin": "0x01f901c985aa1850a2108203e78485197d7a8541f3afcb82946d1474b69f191290ee87b7241509865dbfd6502825b8604f55080dff2cc699a2164ffc9e3edf4f07428067ded4ae40def88766ca89789a1e2d4e76bd1a8718ed8c07c78c649a200a6e7ab03835190d678acb114e50bf51cbcc2ad094b65efb21bb7d91a1278db416eae0cd9c72829ae8c0d295f773d212f9013af89b9497103ead47f549ccc2c01a98071adaf61df7b54ff884a020dadcf9996b63587cb52c1c1c757ca7e8e302bb125a1f76f3a6d46e00d2c478a0c7277aca05b03c06ae3649e4c75b94c2c532f0f1889c0ee7d477f6df2fe3cbc0a09169bb6fe55edef1607e89a2b0720fd2df5ca5d6be75c10f11c8ce8e423057eba0465576542851c8ae163f44bef21226c1d07969f1d690e29347f7998d71b4caa3f89b946d483d9c7072203369522074c55383c4bceb24d3f884a020dadcf9996b63587cb52c1c1c757ca7e8e302bb125a1f76f3a6d46e00d2c478a0c7277aca05b03c06ae3649e4c75b94c2c532f0f1889c0ee7d477f6df2fe3cbc0a09169bb6fe55edef1607e89a2b0720fd2df5ca5d6be75c10f11c8ce8e423057eba0465576542851c8ae163f44bef21226c1d07969f1d690e29347f7998d71b4caa3", + "unsignedLondon": "0x02f901cb85aa1850a2108203e734855d34697dc68541f3afcb82946d1474b69f191290ee87b7241509865dbfd6502825b8604f55080dff2cc699a2164ffc9e3edf4f07428067ded4ae40def88766ca89789a1e2d4e76bd1a8718ed8c07c78c649a200a6e7ab03835190d678acb114e50bf51cbcc2ad094b65efb21bb7d91a1278db416eae0cd9c72829ae8c0d295f773d212f9013af89b9497103ead47f549ccc2c01a98071adaf61df7b54ff884a020dadcf9996b63587cb52c1c1c757ca7e8e302bb125a1f76f3a6d46e00d2c478a0c7277aca05b03c06ae3649e4c75b94c2c532f0f1889c0ee7d477f6df2fe3cbc0a09169bb6fe55edef1607e89a2b0720fd2df5ca5d6be75c10f11c8ce8e423057eba0465576542851c8ae163f44bef21226c1d07969f1d690e29347f7998d71b4caa3f89b946d483d9c7072203369522074c55383c4bceb24d3f884a020dadcf9996b63587cb52c1c1c757ca7e8e302bb125a1f76f3a6d46e00d2c478a0c7277aca05b03c06ae3649e4c75b94c2c532f0f1889c0ee7d477f6df2fe3cbc0a09169bb6fe55edef1607e89a2b0720fd2df5ca5d6be75c10f11c8ce8e423057eba0465576542851c8ae163f44bef21226c1d07969f1d690e29347f7998d71b4caa3", + "signedLegacy": "0xf8c98203e78485197d7a8541f3afcb82946d1474b69f191290ee87b7241509865dbfd6502825b8604f55080dff2cc699a2164ffc9e3edf4f07428067ded4ae40def88766ca89789a1e2d4e76bd1a8718ed8c07c78c649a200a6e7ab03835190d678acb114e50bf51cbcc2ad094b65efb21bb7d91a1278db416eae0cd9c72829ae8c0d295f773d2121ca08ba9001595c682949942e757cc026826be0f10ff6c0b802e141bb35eeae891d7a04a74007fc09b47fed88aa9bc88111f9f7ec100318f27e1c83544cc8fa58a31ee", + "signedEip155": "0xf8cf8203e78485197d7a8541f3afcb82946d1474b69f191290ee87b7241509865dbfd6502825b8604f55080dff2cc699a2164ffc9e3edf4f07428067ded4ae40def88766ca89789a1e2d4e76bd1a8718ed8c07c78c649a200a6e7ab03835190d678acb114e50bf51cbcc2ad094b65efb21bb7d91a1278db416eae0cd9c72829ae8c0d295f773d21286015430a14444a0f00638a8fdd7eb539b862f5b0aaf81b3a2d33cfeaca9d9727c5f136bc7a4be73a02487488b619da3a5bd226799bd95fd1e1ca6a8c8bf6cc847b7d438b709cf1b09", + "signedBerlin": "0x01f9020c85aa1850a2108203e78485197d7a8541f3afcb82946d1474b69f191290ee87b7241509865dbfd6502825b8604f55080dff2cc699a2164ffc9e3edf4f07428067ded4ae40def88766ca89789a1e2d4e76bd1a8718ed8c07c78c649a200a6e7ab03835190d678acb114e50bf51cbcc2ad094b65efb21bb7d91a1278db416eae0cd9c72829ae8c0d295f773d212f9013af89b9497103ead47f549ccc2c01a98071adaf61df7b54ff884a020dadcf9996b63587cb52c1c1c757ca7e8e302bb125a1f76f3a6d46e00d2c478a0c7277aca05b03c06ae3649e4c75b94c2c532f0f1889c0ee7d477f6df2fe3cbc0a09169bb6fe55edef1607e89a2b0720fd2df5ca5d6be75c10f11c8ce8e423057eba0465576542851c8ae163f44bef21226c1d07969f1d690e29347f7998d71b4caa3f89b946d483d9c7072203369522074c55383c4bceb24d3f884a020dadcf9996b63587cb52c1c1c757ca7e8e302bb125a1f76f3a6d46e00d2c478a0c7277aca05b03c06ae3649e4c75b94c2c532f0f1889c0ee7d477f6df2fe3cbc0a09169bb6fe55edef1607e89a2b0720fd2df5ca5d6be75c10f11c8ce8e423057eba0465576542851c8ae163f44bef21226c1d07969f1d690e29347f7998d71b4caa301a04aa90159f536810755a6b5ea45206ef5572a56db2a24308f77210aee9f165a26a030a27cc3c1f6545f6f9ce17b7c6cbf6e83fc7c5d8fda6a1347ddb0880eaae96f", + "signedLondon": "0x02f9020e85aa1850a2108203e734855d34697dc68541f3afcb82946d1474b69f191290ee87b7241509865dbfd6502825b8604f55080dff2cc699a2164ffc9e3edf4f07428067ded4ae40def88766ca89789a1e2d4e76bd1a8718ed8c07c78c649a200a6e7ab03835190d678acb114e50bf51cbcc2ad094b65efb21bb7d91a1278db416eae0cd9c72829ae8c0d295f773d212f9013af89b9497103ead47f549ccc2c01a98071adaf61df7b54ff884a020dadcf9996b63587cb52c1c1c757ca7e8e302bb125a1f76f3a6d46e00d2c478a0c7277aca05b03c06ae3649e4c75b94c2c532f0f1889c0ee7d477f6df2fe3cbc0a09169bb6fe55edef1607e89a2b0720fd2df5ca5d6be75c10f11c8ce8e423057eba0465576542851c8ae163f44bef21226c1d07969f1d690e29347f7998d71b4caa3f89b946d483d9c7072203369522074c55383c4bceb24d3f884a020dadcf9996b63587cb52c1c1c757ca7e8e302bb125a1f76f3a6d46e00d2c478a0c7277aca05b03c06ae3649e4c75b94c2c532f0f1889c0ee7d477f6df2fe3cbc0a09169bb6fe55edef1607e89a2b0720fd2df5ca5d6be75c10f11c8ce8e423057eba0465576542851c8ae163f44bef21226c1d07969f1d690e29347f7998d71b4caa301a0287c641c904907b3349cd174e6f821e3fd57e3eb5a95ddb88e0f77ca5c917248a0627b16cd06c617ca4033cbbb914c361a8dfd992ae476f4daedc5277f7587c06c", + "signatureLegacy": { + "r": "0x8ba9001595c682949942e757cc026826be0f10ff6c0b802e141bb35eeae891d7", + "s": "0x4a74007fc09b47fed88aa9bc88111f9f7ec100318f27e1c83544cc8fa58a31ee", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0xf00638a8fdd7eb539b862f5b0aaf81b3a2d33cfeaca9d9727c5f136bc7a4be73", + "s": "0x2487488b619da3a5bd226799bd95fd1e1ca6a8c8bf6cc847b7d438b709cf1b09", + "v": "0x15430a14444" + }, + "signatureBerlin": { + "r": "0x4aa90159f536810755a6b5ea45206ef5572a56db2a24308f77210aee9f165a26", + "s": "0x30a27cc3c1f6545f6f9ce17b7c6cbf6e83fc7c5d8fda6a1347ddb0880eaae96f", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x287c641c904907b3349cd174e6f821e3fd57e3eb5a95ddb88e0f77ca5c917248", + "s": "0x627b16cd06c617ca4033cbbb914c361a8dfd992ae476f4daedc5277f7587c06c", + "v": "0x1" + } + }, + { + "name": "random-127", + "transaction": { + "to": "0x62cd925478862D00220C8B25825E8F88c234D33e", + "nonce": 9, + "gasLimit": "0x4aa2ba", + "gasPrice": "0xbc3ec789", + "maxFeePerGas": "0xcb4b125c81402b", + "maxPriorityFeePerGas": "0x2ffe7d", + "data": "0x498871d8b15e1c4474f384316b5944637564b9a54751e2efa3ced23f6a84dc1c84a91d7bbe4e90e54dfae7d0", + "value": "0x6acf13702d", + "accessList": [ + { + "address": "0x92e6912e4f3BDAe4E15c968065966fC4c6Ed0Ac6", + "storageKeys": [ + "0xaf16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78ab", + "0x621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48", + "0xa64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866" + ] + }, + { + "address": "0xDB44867f5318a94AF0a679178A61d20d3257294d", + "storageKeys": [ + "0xaf16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78ab", + "0x621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48", + "0xa64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866" + ] + }, + { + "address": "0x8a17f9B4CE04AbAab4a50174C4CCd4EE01922261", + "storageKeys": [ + "0xaf16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78ab", + "0x621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48", + "0xa64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866" + ] + }, + { + "address": "0x9339B8c51E00c3B6d9ee93B4514eC4090F08cdE2", + "storageKeys": [ + "0xaf16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78ab", + "0x621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48", + "0xa64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866" + ] + } + ], + "chainId": "0x0fdfa162" + }, + "privateKey": "0xd2fbaab4412326ef90c23514858ee78a0c48eed140f7e6f2069c90466326aca3", + "unsignedLegacy": "0xf8520984bc3ec789834aa2ba9462cd925478862d00220c8b25825e8f88c234d33e856acf13702dac498871d8b15e1c4474f384316b5944637564b9a54751e2efa3ced23f6a84dc1c84a91d7bbe4e90e54dfae7d0", + "unsignedEip155": "0xf8590984bc3ec789834aa2ba9462cd925478862d00220c8b25825e8f88c234d33e856acf13702dac498871d8b15e1c4474f384316b5944637564b9a54751e2efa3ced23f6a84dc1c84a91d7bbe4e90e54dfae7d0840fdfa1628080", + "unsignedBerlin": "0x01f9024a840fdfa1620984bc3ec789834aa2ba9462cd925478862d00220c8b25825e8f88c234d33e856acf13702dac498871d8b15e1c4474f384316b5944637564b9a54751e2efa3ced23f6a84dc1c84a91d7bbe4e90e54dfae7d0f901f0f87a9492e6912e4f3bdae4e15c968065966fc4c6ed0ac6f863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866f87a94db44867f5318a94af0a679178a61d20d3257294df863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866f87a948a17f9b4ce04abaab4a50174c4ccd4ee01922261f863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866f87a949339b8c51e00c3b6d9ee93b4514ec4090f08cde2f863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866", + "unsignedLondon": "0x02f90251840fdfa16209832ffe7d87cb4b125c81402b834aa2ba9462cd925478862d00220c8b25825e8f88c234d33e856acf13702dac498871d8b15e1c4474f384316b5944637564b9a54751e2efa3ced23f6a84dc1c84a91d7bbe4e90e54dfae7d0f901f0f87a9492e6912e4f3bdae4e15c968065966fc4c6ed0ac6f863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866f87a94db44867f5318a94af0a679178a61d20d3257294df863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866f87a948a17f9b4ce04abaab4a50174c4ccd4ee01922261f863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866f87a949339b8c51e00c3b6d9ee93b4514ec4090f08cde2f863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866", + "signedLegacy": "0xf8950984bc3ec789834aa2ba9462cd925478862d00220c8b25825e8f88c234d33e856acf13702dac498871d8b15e1c4474f384316b5944637564b9a54751e2efa3ced23f6a84dc1c84a91d7bbe4e90e54dfae7d01ca01de79bc8f85eacbf081c70925e344a2770c58c348ec0e80081772230533e931fa00e6dc772a4f3a147c21c3b34285ee8aaf6aa2c647205c9e103bbb79b7163af94", + "signedEip155": "0xf8990984bc3ec789834aa2ba9462cd925478862d00220c8b25825e8f88c234d33e856acf13702dac498871d8b15e1c4474f384316b5944637564b9a54751e2efa3ced23f6a84dc1c84a91d7bbe4e90e54dfae7d0841fbf42e8a082537131eca02ad876f9897b51f90015b2773f62d4a0333831eb31b5d7d57fb8a0103ef8915e3e7e151b91af799811a0d8731bbaebc63a4ace4fe9fb68ee285f70", + "signedBerlin": "0x01f9028d840fdfa1620984bc3ec789834aa2ba9462cd925478862d00220c8b25825e8f88c234d33e856acf13702dac498871d8b15e1c4474f384316b5944637564b9a54751e2efa3ced23f6a84dc1c84a91d7bbe4e90e54dfae7d0f901f0f87a9492e6912e4f3bdae4e15c968065966fc4c6ed0ac6f863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866f87a94db44867f5318a94af0a679178a61d20d3257294df863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866f87a948a17f9b4ce04abaab4a50174c4ccd4ee01922261f863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866f87a949339b8c51e00c3b6d9ee93b4514ec4090f08cde2f863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec86601a0ccf27eba8e2a1beb251c13ba64a72a8c6441203fea6b277f26e3c492fd406f76a0607bf8be89be3289bb67aa366f2f01a426b052cc64ade1c7fda5b78d6b89c18c", + "signedLondon": "0x02f90294840fdfa16209832ffe7d87cb4b125c81402b834aa2ba9462cd925478862d00220c8b25825e8f88c234d33e856acf13702dac498871d8b15e1c4474f384316b5944637564b9a54751e2efa3ced23f6a84dc1c84a91d7bbe4e90e54dfae7d0f901f0f87a9492e6912e4f3bdae4e15c968065966fc4c6ed0ac6f863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866f87a94db44867f5318a94af0a679178a61d20d3257294df863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866f87a948a17f9b4ce04abaab4a50174c4ccd4ee01922261f863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec866f87a949339b8c51e00c3b6d9ee93b4514ec4090f08cde2f863a0af16d981a974e26ca941fdd7a8fe8bfed7614a3a7ce12d949025684e32ab78aba0621caa0c219b81e0367f33c3face28f7ca0f98f42a3aad3f532de0a9f45f1a48a0a64f182328abd18e3c88f7b41cdb54f9a02dec1f9f2138b6c4f3718241bec86601a0bcc1ceac78f8ef73ef92aa78582cac6b52969f971326985fabd7d7306a00e33aa0408e2f2c3912fb7179a4296f93cf8e4fa4da709a8ace6ff9237fb2c8e2d2d9d0", + "signatureLegacy": { + "r": "0x1de79bc8f85eacbf081c70925e344a2770c58c348ec0e80081772230533e931f", + "s": "0x0e6dc772a4f3a147c21c3b34285ee8aaf6aa2c647205c9e103bbb79b7163af94", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x82537131eca02ad876f9897b51f90015b2773f62d4a0333831eb31b5d7d57fb8", + "s": "0x103ef8915e3e7e151b91af799811a0d8731bbaebc63a4ace4fe9fb68ee285f70", + "v": "0x1fbf42e8" + }, + "signatureBerlin": { + "r": "0xccf27eba8e2a1beb251c13ba64a72a8c6441203fea6b277f26e3c492fd406f76", + "s": "0x607bf8be89be3289bb67aa366f2f01a426b052cc64ade1c7fda5b78d6b89c18c", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xbcc1ceac78f8ef73ef92aa78582cac6b52969f971326985fabd7d7306a00e33a", + "s": "0x408e2f2c3912fb7179a4296f93cf8e4fa4da709a8ace6ff9237fb2c8e2d2d9d0", + "v": "0x1" + } + }, + { + "name": "masked-1110110001", + "transaction": { + "to": "0x8f3e9c1Bd65EB267d19B176A73217524DC21A5ca", + "nonce": 951, + "gasLimit": "0x67b8bf", + "maxFeePerGas": "0xacd3ccc06a", + "maxPriorityFeePerGas": "0x180c3ca0", + "chainId": "0x64" + }, + "privateKey": "0x0f8592102198f565b00937d2da3cd00475866ebdb18053243355dd6aa0222ab4", + "unsignedLegacy": "0xdf8203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca8080", + "unsignedEip155": "0xe28203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca8080648080", + "unsignedBerlin": "0x01e1648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca8080c0", + "unsignedLondon": "0x02eb648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca8080c0", + "signedLegacy": "0xf8628203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80801ca01824be9b512435421450e39c03604e44962beba31c09b1d4622e99dcad871cf8a048fdf3c98503be7232f1eb46c8399aa5694dd9cf4df793f99b403d2a2eb9ca6d", + "signedEip155": "0xf8638203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca808081eba0501207b3ccf000fee958ef7ffac557dd296e3f8ae47366418f64aa8831cc7145a06f4be87613b371f54ec08eeefc9e6cf9aa5c7371d526d36cce12450b5b63f866", + "signedBerlin": "0x01f864648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca8080c001a02774c1cc70847e2697bfb0e26e9f57beaea07240b5a2da032c00b0108977dd4ca019a674c86f659df7eba73979d4d74f2aac0932be70822182624d47b8e071014d", + "signedLondon": "0x02f86e648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca8080c001a022189be9d017d017a63b002afe2a9572203a363ac12c60a9aaa610104f0a5ee5a01cf01c1c3e2af873bfdb1a7b084e3c237b2b69d7ef945360f94d72f4011409c5", + "signatureLegacy": { + "r": "0x1824be9b512435421450e39c03604e44962beba31c09b1d4622e99dcad871cf8", + "s": "0x48fdf3c98503be7232f1eb46c8399aa5694dd9cf4df793f99b403d2a2eb9ca6d", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x501207b3ccf000fee958ef7ffac557dd296e3f8ae47366418f64aa8831cc7145", + "s": "0x6f4be87613b371f54ec08eeefc9e6cf9aa5c7371d526d36cce12450b5b63f866", + "v": "0xeb" + }, + "signatureBerlin": { + "r": "0x2774c1cc70847e2697bfb0e26e9f57beaea07240b5a2da032c00b0108977dd4c", + "s": "0x19a674c86f659df7eba73979d4d74f2aac0932be70822182624d47b8e071014d", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x22189be9d017d017a63b002afe2a9572203a363ac12c60a9aaa610104f0a5ee5", + "s": "0x1cf01c1c3e2af873bfdb1a7b084e3c237b2b69d7ef945360f94d72f4011409c5", + "v": "0x1" + } + }, + { + "name": "masked-1110111001", + "transaction": { + "to": "0x8f3e9c1Bd65EB267d19B176A73217524DC21A5ca", + "nonce": 951, + "gasLimit": "0x67b8bf", + "maxFeePerGas": "0xacd3ccc06a", + "maxPriorityFeePerGas": "0x180c3ca0", + "data": "0x14a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78", + "chainId": "0x64" + }, + "privateKey": "0x0f8592102198f565b00937d2da3cd00475866ebdb18053243355dd6aa0222ab4", + "unsignedLegacy": "0xf8a08203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78", + "unsignedEip155": "0xf8a38203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78648080", + "unsignedBerlin": "0x01f8a2648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78c0", + "unsignedLondon": "0x02f8ac648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78c0", + "signedLegacy": "0xf8e38203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b781ca0c3c353687252c7b25a9b64755195ccc163258f7763f0f2451945f8b351cd6b6ba012a7808af4276b86519ecf0e22d3fe7dad5022bb7c697c1b51bda0ba2a29ef37", + "signedEip155": "0xf8e48203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b7881eca0128787002e3eeee5fb68cc96f12bd88298eb55dee53b2b31f81ea8e0e5ead798a002cff2a04d25928e356db52898da06e214b0df31f20fda2fd42a4db712531007", + "signedBerlin": "0x01f8e5648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78c001a006819daef46b862e73f75b9c8c8928cb42e4b3848fef9b4fd92e40c7cc027e57a07ef7590664a9be87e5fef21bece92857bd6448aa64388f17d0f885f80c1140fb", + "signedLondon": "0x02f8ef648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78c080a073de6359f48d52106c5c8c6b843fe6f8d217cb98a5b787d2c258376a42f5e6c5a004ee431fb95c479efa4a268f15e03ba54ea0c157534f424a3e090e7f174a2fa2", + "signatureLegacy": { + "r": "0xc3c353687252c7b25a9b64755195ccc163258f7763f0f2451945f8b351cd6b6b", + "s": "0x12a7808af4276b86519ecf0e22d3fe7dad5022bb7c697c1b51bda0ba2a29ef37", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x128787002e3eeee5fb68cc96f12bd88298eb55dee53b2b31f81ea8e0e5ead798", + "s": "0x02cff2a04d25928e356db52898da06e214b0df31f20fda2fd42a4db712531007", + "v": "0xec" + }, + "signatureBerlin": { + "r": "0x06819daef46b862e73f75b9c8c8928cb42e4b3848fef9b4fd92e40c7cc027e57", + "s": "0x7ef7590664a9be87e5fef21bece92857bd6448aa64388f17d0f885f80c1140fb", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x73de6359f48d52106c5c8c6b843fe6f8d217cb98a5b787d2c258376a42f5e6c5", + "s": "0x04ee431fb95c479efa4a268f15e03ba54ea0c157534f424a3e090e7f174a2fa2", + "v": "0x0" + } + }, + { + "name": "masked-1110110101", + "transaction": { + "to": "0x8f3e9c1Bd65EB267d19B176A73217524DC21A5ca", + "nonce": 951, + "gasLimit": "0x67b8bf", + "maxFeePerGas": "0xacd3ccc06a", + "maxPriorityFeePerGas": "0x180c3ca0", + "value": "0xe53c2b", + "chainId": "0x64" + }, + "privateKey": "0x0f8592102198f565b00937d2da3cd00475866ebdb18053243355dd6aa0222ab4", + "unsignedLegacy": "0xe28203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b80", + "unsignedEip155": "0xe58203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b80648080", + "unsignedBerlin": "0x01e4648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b80c0", + "unsignedLondon": "0x02ee648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b80c0", + "signedLegacy": "0xf8658203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b801ca06d873f2ec911fa35ad9ed7a8169c7db7d05624343a8ae6cfec5e7a66ae6ec164a038e28f6e5bb165b8adee528d73080a96ca810e593203f04ce1606f2ee446f860", + "signedEip155": "0xf8668203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b8081eca0140eb84256aa8faffb595ab2d3fe2ccb9be8b9f9ff1e48433965db8950d62508a075e32722100763539b1ced45d22e670dc53297f5d04b29d4cecbf0e95b1eee35", + "signedBerlin": "0x01f867648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b80c080a03611858b6ac50345933deeaf21b172fd19cb17f9894cefd32049f730a13e09f8a00100dd919ee8e3d2dfcbc9a61b979d19bd5ef7ce3ac0d2961405dcf3141f8078", + "signedLondon": "0x02f871648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b80c080a0ffe6b573d722dfaf1079260d45cd25aa2d2f79ceee104fbd7b7d6fc08ede9814a019514da58673a83e9f15c30ade66dc89330cf5a3bf08d5ce0ad30902c9c73d1c", + "signatureLegacy": { + "r": "0x6d873f2ec911fa35ad9ed7a8169c7db7d05624343a8ae6cfec5e7a66ae6ec164", + "s": "0x38e28f6e5bb165b8adee528d73080a96ca810e593203f04ce1606f2ee446f860", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x140eb84256aa8faffb595ab2d3fe2ccb9be8b9f9ff1e48433965db8950d62508", + "s": "0x75e32722100763539b1ced45d22e670dc53297f5d04b29d4cecbf0e95b1eee35", + "v": "0xec" + }, + "signatureBerlin": { + "r": "0x3611858b6ac50345933deeaf21b172fd19cb17f9894cefd32049f730a13e09f8", + "s": "0x0100dd919ee8e3d2dfcbc9a61b979d19bd5ef7ce3ac0d2961405dcf3141f8078", + "v": "0x0" + }, + "signatureLondon": { + "r": "0xffe6b573d722dfaf1079260d45cd25aa2d2f79ceee104fbd7b7d6fc08ede9814", + "s": "0x19514da58673a83e9f15c30ade66dc89330cf5a3bf08d5ce0ad30902c9c73d1c", + "v": "0x0" + } + }, + { + "name": "masked-1110111101", + "transaction": { + "to": "0x8f3e9c1Bd65EB267d19B176A73217524DC21A5ca", + "nonce": 951, + "gasLimit": "0x67b8bf", + "maxFeePerGas": "0xacd3ccc06a", + "maxPriorityFeePerGas": "0x180c3ca0", + "data": "0x14a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78", + "value": "0xe53c2b", + "chainId": "0x64" + }, + "privateKey": "0x0f8592102198f565b00937d2da3cd00475866ebdb18053243355dd6aa0222ab4", + "unsignedLegacy": "0xf8a38203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78", + "unsignedEip155": "0xf8a68203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78648080", + "unsignedBerlin": "0x01f8a5648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78c0", + "unsignedLondon": "0x02f8af648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78c0", + "signedLegacy": "0xf8e68203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b781ca03db67909302c521e616973cc478933dbf061c643e7e166b961e4c20cf60449aca0550e92db2b4903c1b308afccfa40ede5bc01a9a3bfb5ef7500dda44bd78e6627", + "signedEip155": "0xf8e78203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b7881eca0e79adae00f239f15bc8f362b1492321435920e5557efbc2ddd3d7c360f435f71a02a71c1301df20d48d89a0ffd5cc6d7c0b8bfd2a5793fd7eb67b671a329748418", + "signedBerlin": "0x01f8e8648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78c001a0feb17927e9a2a8f9fa226afa5bd933c42777269a70c93fdc5bd185d36c7d050aa066504a8487b90a4297a01574d118e7dcd4b8eb8e87f35b108f2a78bd7c76930f", + "signedLondon": "0x02f8f2648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78c080a0e9bb4b0f2226278c7c8b980231449dea696b4e0baaf8679096eb154c1ffeecdca00599156fc921066983613fb7e44ca855c1e92cb9b87e1de0de1f73c00c50da94", + "signatureLegacy": { + "r": "0x3db67909302c521e616973cc478933dbf061c643e7e166b961e4c20cf60449ac", + "s": "0x550e92db2b4903c1b308afccfa40ede5bc01a9a3bfb5ef7500dda44bd78e6627", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0xe79adae00f239f15bc8f362b1492321435920e5557efbc2ddd3d7c360f435f71", + "s": "0x2a71c1301df20d48d89a0ffd5cc6d7c0b8bfd2a5793fd7eb67b671a329748418", + "v": "0xec" + }, + "signatureBerlin": { + "r": "0xfeb17927e9a2a8f9fa226afa5bd933c42777269a70c93fdc5bd185d36c7d050a", + "s": "0x66504a8487b90a4297a01574d118e7dcd4b8eb8e87f35b108f2a78bd7c76930f", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xe9bb4b0f2226278c7c8b980231449dea696b4e0baaf8679096eb154c1ffeecdc", + "s": "0x0599156fc921066983613fb7e44ca855c1e92cb9b87e1de0de1f73c00c50da94", + "v": "0x0" + } + }, + { + "name": "masked-1110110011", + "transaction": { + "to": "0x8f3e9c1Bd65EB267d19B176A73217524DC21A5ca", + "nonce": 951, + "gasLimit": "0x67b8bf", + "maxFeePerGas": "0xacd3ccc06a", + "maxPriorityFeePerGas": "0x180c3ca0", + "accessList": [ + { + "address": "0xd25d95a6D3bbD713a24d5130536Bb29d1969f1CD", + "storageKeys": [ + "0x490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0", + "0x9fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018", + "0xa83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b9" + ] + } + ], + "chainId": "0x64" + }, + "privateKey": "0x0f8592102198f565b00937d2da3cd00475866ebdb18053243355dd6aa0222ab4", + "unsignedLegacy": "0xdf8203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca8080", + "unsignedEip155": "0xe28203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca8080648080", + "unsignedBerlin": "0x01f89e648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca8080f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b9", + "unsignedLondon": "0x02f8a8648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca8080f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b9", + "signedLegacy": "0xf8628203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80801ca01824be9b512435421450e39c03604e44962beba31c09b1d4622e99dcad871cf8a048fdf3c98503be7232f1eb46c8399aa5694dd9cf4df793f99b403d2a2eb9ca6d", + "signedEip155": "0xf8638203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca808081eba0501207b3ccf000fee958ef7ffac557dd296e3f8ae47366418f64aa8831cc7145a06f4be87613b371f54ec08eeefc9e6cf9aa5c7371d526d36cce12450b5b63f866", + "signedBerlin": "0x01f8e1648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca8080f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b901a08ac65b8c1d789e497f80e8b663450e74213d215e77cde2ed05f2869e4180e0a4a03086a21838ed4ea76e49eb7d2f1dbc96f5b742180e763901fdb773d12dfd3677", + "signedLondon": "0x02f8eb648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca8080f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b901a00d0d634b21f731d097fc70020835692cc883b56cb385374525a082d6d670148ba0549bbb8e3af9081415351f662c45d4d9d5dee6cf974da78dd1f27419f290434a", + "signatureLegacy": { + "r": "0x1824be9b512435421450e39c03604e44962beba31c09b1d4622e99dcad871cf8", + "s": "0x48fdf3c98503be7232f1eb46c8399aa5694dd9cf4df793f99b403d2a2eb9ca6d", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x501207b3ccf000fee958ef7ffac557dd296e3f8ae47366418f64aa8831cc7145", + "s": "0x6f4be87613b371f54ec08eeefc9e6cf9aa5c7371d526d36cce12450b5b63f866", + "v": "0xeb" + }, + "signatureBerlin": { + "r": "0x8ac65b8c1d789e497f80e8b663450e74213d215e77cde2ed05f2869e4180e0a4", + "s": "0x3086a21838ed4ea76e49eb7d2f1dbc96f5b742180e763901fdb773d12dfd3677", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x0d0d634b21f731d097fc70020835692cc883b56cb385374525a082d6d670148b", + "s": "0x549bbb8e3af9081415351f662c45d4d9d5dee6cf974da78dd1f27419f290434a", + "v": "0x1" + } + }, + { + "name": "masked-1110111011", + "transaction": { + "to": "0x8f3e9c1Bd65EB267d19B176A73217524DC21A5ca", + "nonce": 951, + "gasLimit": "0x67b8bf", + "maxFeePerGas": "0xacd3ccc06a", + "maxPriorityFeePerGas": "0x180c3ca0", + "data": "0x14a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78", + "accessList": [ + { + "address": "0xd25d95a6D3bbD713a24d5130536Bb29d1969f1CD", + "storageKeys": [ + "0x490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0", + "0x9fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018", + "0xa83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b9" + ] + } + ], + "chainId": "0x64" + }, + "privateKey": "0x0f8592102198f565b00937d2da3cd00475866ebdb18053243355dd6aa0222ab4", + "unsignedLegacy": "0xf8a08203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78", + "unsignedEip155": "0xf8a38203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78648080", + "unsignedBerlin": "0x01f9011f648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b9", + "unsignedLondon": "0x02f90129648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b9", + "signedLegacy": "0xf8e38203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b781ca0c3c353687252c7b25a9b64755195ccc163258f7763f0f2451945f8b351cd6b6ba012a7808af4276b86519ecf0e22d3fe7dad5022bb7c697c1b51bda0ba2a29ef37", + "signedEip155": "0xf8e48203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b7881eca0128787002e3eeee5fb68cc96f12bd88298eb55dee53b2b31f81ea8e0e5ead798a002cff2a04d25928e356db52898da06e214b0df31f20fda2fd42a4db712531007", + "signedBerlin": "0x01f90162648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b901a0fc663683953088f2947862fdb00f4ec8afb602220170075ac9d88713d56ff0e2a03caf6100875ca728137ad478af03fbe77b3b4271044cd8c57277c6bf817704b9", + "signedLondon": "0x02f9016c648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca80b88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b980a014f3c82c9fcbda75e84a2fa48ca01b46be64f3483d8d38819f99ced76560f4cda04ca3051410c1f8326a29499e061047b28355a48fbe93670b06e82c19ead3abf2", + "signatureLegacy": { + "r": "0xc3c353687252c7b25a9b64755195ccc163258f7763f0f2451945f8b351cd6b6b", + "s": "0x12a7808af4276b86519ecf0e22d3fe7dad5022bb7c697c1b51bda0ba2a29ef37", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x128787002e3eeee5fb68cc96f12bd88298eb55dee53b2b31f81ea8e0e5ead798", + "s": "0x02cff2a04d25928e356db52898da06e214b0df31f20fda2fd42a4db712531007", + "v": "0xec" + }, + "signatureBerlin": { + "r": "0xfc663683953088f2947862fdb00f4ec8afb602220170075ac9d88713d56ff0e2", + "s": "0x3caf6100875ca728137ad478af03fbe77b3b4271044cd8c57277c6bf817704b9", + "v": "0x1" + }, + "signatureLondon": { + "r": "0x14f3c82c9fcbda75e84a2fa48ca01b46be64f3483d8d38819f99ced76560f4cd", + "s": "0x4ca3051410c1f8326a29499e061047b28355a48fbe93670b06e82c19ead3abf2", + "v": "0x0" + } + }, + { + "name": "masked-1110110111", + "transaction": { + "to": "0x8f3e9c1Bd65EB267d19B176A73217524DC21A5ca", + "nonce": 951, + "gasLimit": "0x67b8bf", + "maxFeePerGas": "0xacd3ccc06a", + "maxPriorityFeePerGas": "0x180c3ca0", + "value": "0xe53c2b", + "accessList": [ + { + "address": "0xd25d95a6D3bbD713a24d5130536Bb29d1969f1CD", + "storageKeys": [ + "0x490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0", + "0x9fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018", + "0xa83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b9" + ] + } + ], + "chainId": "0x64" + }, + "privateKey": "0x0f8592102198f565b00937d2da3cd00475866ebdb18053243355dd6aa0222ab4", + "unsignedLegacy": "0xe28203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b80", + "unsignedEip155": "0xe58203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b80648080", + "unsignedBerlin": "0x01f8a1648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b80f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b9", + "unsignedLondon": "0x02f8ab648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b80f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b9", + "signedLegacy": "0xf8658203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b801ca06d873f2ec911fa35ad9ed7a8169c7db7d05624343a8ae6cfec5e7a66ae6ec164a038e28f6e5bb165b8adee528d73080a96ca810e593203f04ce1606f2ee446f860", + "signedEip155": "0xf8668203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b8081eca0140eb84256aa8faffb595ab2d3fe2ccb9be8b9f9ff1e48433965db8950d62508a075e32722100763539b1ced45d22e670dc53297f5d04b29d4cecbf0e95b1eee35", + "signedBerlin": "0x01f8e4648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b80f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b901a0cb7b283ffaddf3fa971cfbe83fb7d683eea1a39f55b49d31685459e12daa96d7a0228ec111a98516d65571fcfdbdc08e8fb48b4b2652e80952d17bf08acefd58fa", + "signedLondon": "0x02f8ee648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2b80f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b980a0c28a545da41bf3fa73fc08307dc05860d7e4a7a985f7a05833b275d884c2c55ba047e132fd8e39a1265733b7dc02aa27273bb828647ddc3fae839ed8015e7d4c5d", + "signatureLegacy": { + "r": "0x6d873f2ec911fa35ad9ed7a8169c7db7d05624343a8ae6cfec5e7a66ae6ec164", + "s": "0x38e28f6e5bb165b8adee528d73080a96ca810e593203f04ce1606f2ee446f860", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0x140eb84256aa8faffb595ab2d3fe2ccb9be8b9f9ff1e48433965db8950d62508", + "s": "0x75e32722100763539b1ced45d22e670dc53297f5d04b29d4cecbf0e95b1eee35", + "v": "0xec" + }, + "signatureBerlin": { + "r": "0xcb7b283ffaddf3fa971cfbe83fb7d683eea1a39f55b49d31685459e12daa96d7", + "s": "0x228ec111a98516d65571fcfdbdc08e8fb48b4b2652e80952d17bf08acefd58fa", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xc28a545da41bf3fa73fc08307dc05860d7e4a7a985f7a05833b275d884c2c55b", + "s": "0x47e132fd8e39a1265733b7dc02aa27273bb828647ddc3fae839ed8015e7d4c5d", + "v": "0x0" + } + }, + { + "name": "masked-1110111111", + "transaction": { + "to": "0x8f3e9c1Bd65EB267d19B176A73217524DC21A5ca", + "nonce": 951, + "gasLimit": "0x67b8bf", + "maxFeePerGas": "0xacd3ccc06a", + "maxPriorityFeePerGas": "0x180c3ca0", + "data": "0x14a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78", + "value": "0xe53c2b", + "accessList": [ + { + "address": "0xd25d95a6D3bbD713a24d5130536Bb29d1969f1CD", + "storageKeys": [ + "0x490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0", + "0x9fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018", + "0xa83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b9" + ] + } + ], + "chainId": "0x64" + }, + "privateKey": "0x0f8592102198f565b00937d2da3cd00475866ebdb18053243355dd6aa0222ab4", + "unsignedLegacy": "0xf8a38203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78", + "unsignedEip155": "0xf8a68203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78648080", + "unsignedBerlin": "0x01f90122648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b9", + "unsignedLondon": "0x02f9012c648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b9", + "signedLegacy": "0xf8e68203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b781ca03db67909302c521e616973cc478933dbf061c643e7e166b961e4c20cf60449aca0550e92db2b4903c1b308afccfa40ede5bc01a9a3bfb5ef7500dda44bd78e6627", + "signedEip155": "0xf8e78203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b7881eca0e79adae00f239f15bc8f362b1492321435920e5557efbc2ddd3d7c360f435f71a02a71c1301df20d48d89a0ffd5cc6d7c0b8bfd2a5793fd7eb67b671a329748418", + "signedBerlin": "0x01f90165648203b7808367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b901a09e6108157fada5740a0930efcc0deb2541dd8e027fca48480375b2f47a57dc03a0264baf762bdf809a898c15ae38e27dc8f7d7453a845f8f2fc328cbdfd14e4932", + "signedLondon": "0x02f9016f648203b784180c3ca085acd3ccc06a8367b8bf948f3e9c1bd65eb267d19b176a73217524dc21a5ca83e53c2bb88014a75dcfbe3b2ad41355d1768c038967219cf7189782e8dd20d61d4724136c705fe64ad7f34ba7ebc7bca0b325804461d4dd4d091cb40aa83431efad17159d8995b2392891ec41129a8fa2fa9cd1552ac1fcf86f55391c9500acce27a972ed381df53aaffa8de478f5d905cc37a26a3632a7d3416facaa93aba359d895500b78f87cf87a94d25d95a6d3bbd713a24d5130536bb29d1969f1cdf863a0490abded7314f322ca7f5be6de4f88932795db0a5efaa9f341bbc92b0c7550a0a09fad3dc0d449aba9f76ca580b484b8c887df8d6a4db1f657e6d3d93c7cef6018a0a83596da61d6ee00116d30dc064c5781995d1c3b4f4260f6d198bc5c9fabd5b901a0ff54728feb78f711daf4b834cc13497d0bee40607a089fb85fa789611575f0d1a01deb3bb286b3a33144305ee3ebd20a1dc55efe5645de32f519d7239e32cc4190", + "signatureLegacy": { + "r": "0x3db67909302c521e616973cc478933dbf061c643e7e166b961e4c20cf60449ac", + "s": "0x550e92db2b4903c1b308afccfa40ede5bc01a9a3bfb5ef7500dda44bd78e6627", + "v": "0x1c" + }, + "signatureEip155": { + "r": "0xe79adae00f239f15bc8f362b1492321435920e5557efbc2ddd3d7c360f435f71", + "s": "0x2a71c1301df20d48d89a0ffd5cc6d7c0b8bfd2a5793fd7eb67b671a329748418", + "v": "0xec" + }, + "signatureBerlin": { + "r": "0x9e6108157fada5740a0930efcc0deb2541dd8e027fca48480375b2f47a57dc03", + "s": "0x264baf762bdf809a898c15ae38e27dc8f7d7453a845f8f2fc328cbdfd14e4932", + "v": "0x1" + }, + "signatureLondon": { + "r": "0xff54728feb78f711daf4b834cc13497d0bee40607a089fb85fa789611575f0d1", + "s": "0x1deb3bb286b3a33144305ee3ebd20a1dc55efe5645de32f519d7239e32cc4190", + "v": "0x1" + } + } +] diff --git a/packages/web3/test/fixtures/tx-type-15/index.ts b/packages/web3/test/fixtures/tx-type-15/index.ts new file mode 100644 index 00000000000..8dd34b35e25 --- /dev/null +++ b/packages/web3/test/fixtures/tx-type-15/index.ts @@ -0,0 +1,446 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { keccak256 } from 'ethereum-cryptography/keccak'; +import { validateNoLeadingZeroes } from 'web3-validator'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { RLP } from '@ethereumjs/rlp'; +import { bytesToHex, hexToBytes, uint8ArrayConcat, uint8ArrayEquals } from 'web3-utils'; +import { + BaseTransaction, + FeeMarketEIP1559Transaction, + txUtils, + Common, + bigIntToHex, + toUint8Array, + ecrecover, + uint8ArrayToBigInt, + bigIntToUnpaddedUint8Array, + AccessList, + AccessListUint8Array, + FeeMarketEIP1559TxData, + FeeMarketEIP1559ValuesArray, + JsonTx, + TxOptions, +} from 'web3-eth-accounts'; + +const { getAccessListData, getAccessListJSON, getDataFeeEIP2930, verifyAccessList } = txUtils; + +const MAX_INTEGER = BigInt('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); +export const TRANSACTION_TYPE = 15; +const TRANSACTION_TYPE_UINT8ARRAY = hexToBytes(TRANSACTION_TYPE.toString(16).padStart(2, '0')); + +/** + * Typed transaction with a new gas fee market mechanism + * + * - TransactionType: 2 + * - EIP: [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) + */ +// eslint-disable-next-line no-use-before-define +export class SomeNewTxTypeTransaction extends BaseTransaction { + public readonly chainId: bigint; + public readonly accessList: AccessListUint8Array; + public readonly AccessListJSON: AccessList; + public readonly maxPriorityFeePerGas: bigint; + public readonly maxFeePerGas: bigint; + + public readonly common: Common; + + /** + * The default HF if the tx type is active on that HF + * or the first greater HF where the tx is active. + * + * @hidden + */ + protected DEFAULT_HARDFORK = 'london'; + + /** + * Instantiate a transaction from a data dictionary. + * + * Format: { chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, + * accessList, v, r, s } + * + * Notes: + * - `chainId` will be set automatically if not provided + * - All parameters are optional and have some basic default values + */ + public static fromTxData(txData: FeeMarketEIP1559TxData, opts: TxOptions = {}) { + return new SomeNewTxTypeTransaction(txData, opts); + } + + /** + * Instantiate a transaction from the serialized tx. + * + * Format: `0x02 || rlp([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, + * accessList, signatureYParity, signatureR, signatureS])` + */ + public static fromSerializedTx(serialized: Uint8Array, opts: TxOptions = {}) { + if (!uint8ArrayEquals(serialized.subarray(0, 1), TRANSACTION_TYPE_UINT8ARRAY)) { + throw new Error( + `Invalid serialized tx input: not an EIP-1559 transaction (wrong tx type, expected: ${TRANSACTION_TYPE}, received: ${bytesToHex( + serialized.subarray(0, 1), + )}`, + ); + } + const values = RLP.decode(serialized.subarray(1)); + + if (!Array.isArray(values)) { + throw new Error('Invalid serialized tx input: must be array'); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + return FeeMarketEIP1559Transaction.fromValuesArray(values as any, opts); + } + + /** + * Create a transaction from a values array. + * + * Format: `[chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, + * accessList, signatureYParity, signatureR, signatureS]` + */ + public static fromValuesArray(values: FeeMarketEIP1559ValuesArray, opts: TxOptions = {}) { + if (values.length !== 9 && values.length !== 12) { + throw new Error( + 'Invalid EIP-1559 transaction. Only expecting 9 values (for unsigned tx) or 12 values (for signed tx).', + ); + } + + const [ + chainId, + nonce, + maxPriorityFeePerGas, + maxFeePerGas, + gasLimit, + to, + value, + data, + accessList, + v, + r, + s, + ] = values; + + this._validateNotArray({ chainId, v }); + validateNoLeadingZeroes({ + nonce, + maxPriorityFeePerGas, + maxFeePerGas, + gasLimit, + value, + v, + r, + s, + }); + + return new FeeMarketEIP1559Transaction( + { + chainId: uint8ArrayToBigInt(chainId), + nonce, + maxPriorityFeePerGas, + maxFeePerGas, + gasLimit, + to, + value, + data, + accessList: accessList ?? [], + v: v !== undefined ? uint8ArrayToBigInt(v) : undefined, // EIP2930 supports v's with value 0 (empty Uint8Array) + r, + s, + }, + opts, + ); + } + + /** + * This constructor takes the values, validates them, assigns them and freezes the object. + * + * It is not recommended to use this constructor directly. Instead use + * the static factory methods to assist in creating a Transaction object from + * varying data types. + */ + public constructor(txData: FeeMarketEIP1559TxData, opts: TxOptions = {}) { + super({ ...txData, type: TRANSACTION_TYPE }, opts); + const { chainId, accessList, maxFeePerGas, maxPriorityFeePerGas } = txData; + + this.common = this._getCommon(opts.common, chainId); + this.chainId = this.common.chainId(); + + if (!this.common.isActivatedEIP(1559)) { + throw new Error('EIP-1559 not enabled on Common'); + } + this.activeCapabilities = this.activeCapabilities.concat([1559, 2718, 2930]); + + // Populate the access list fields + const accessListData = getAccessListData(accessList ?? []); + this.accessList = accessListData.accessList; + this.AccessListJSON = accessListData.AccessListJSON; + // Verify the access list format. + verifyAccessList(this.accessList); + + this.maxFeePerGas = uint8ArrayToBigInt( + toUint8Array(maxFeePerGas === '' ? '0x' : maxFeePerGas), + ); + this.maxPriorityFeePerGas = uint8ArrayToBigInt( + toUint8Array(maxPriorityFeePerGas === '' ? '0x' : maxPriorityFeePerGas), + ); + + this._validateCannotExceedMaxInteger({ + maxFeePerGas: this.maxFeePerGas, + maxPriorityFeePerGas: this.maxPriorityFeePerGas, + }); + + BaseTransaction._validateNotArray(txData); + + if (this.gasLimit * this.maxFeePerGas > MAX_INTEGER) { + const msg = this._errorMsg( + 'gasLimit * maxFeePerGas cannot exceed MAX_INTEGER (2^256-1)', + ); + throw new Error(msg); + } + + if (this.maxFeePerGas < this.maxPriorityFeePerGas) { + const msg = this._errorMsg( + 'maxFeePerGas cannot be less than maxPriorityFeePerGas (The total must be the larger of the two)', + ); + throw new Error(msg); + } + + this._validateYParity(); + this._validateHighS(); + + const freeze = opts?.freeze ?? true; + if (freeze) { + Object.freeze(this); + } + } + + /** + * The amount of gas paid for the data in this tx + */ + public getDataFee(): bigint { + if (this.cache.dataFee && this.cache.dataFee.hardfork === this.common.hardfork()) { + return this.cache.dataFee.value; + } + + let cost = super.getDataFee(); + cost += BigInt(getDataFeeEIP2930(this.accessList, this.common)); + + if (Object.isFrozen(this)) { + this.cache.dataFee = { + value: cost, + hardfork: this.common.hardfork(), + }; + } + + return cost; + } + + /** + * The up front amount that an account must have for this transaction to be valid + * @param baseFee The base fee of the block (will be set to 0 if not provided) + */ + public getUpfrontCost(baseFee = BigInt(0)): bigint { + const prio = this.maxPriorityFeePerGas; + const maxBase = this.maxFeePerGas - baseFee; + const inclusionFeePerGas = prio < maxBase ? prio : maxBase; + const gasPrice = inclusionFeePerGas + baseFee; + return this.gasLimit * gasPrice + this.value; + } + + /** + * Returns a Uint8Array Array of the raw Uint8Arrays of the EIP-1559 transaction, in order. + * + * Format: `[chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, + * accessList, signatureYParity, signatureR, signatureS]` + * + * Use {@link FeeMarketEIP1559Transaction.serialize} to add a transaction to a block + * with {@link Block.fromValuesArray}. + * + * For an unsigned tx this method uses the empty Uint8Array values for the + * signature parameters `v`, `r` and `s` for encoding. For an EIP-155 compliant + * representation for external signing use {@link FeeMarketEIP1559Transaction.getMessageToSign}. + */ + public raw(): FeeMarketEIP1559ValuesArray { + return [ + bigIntToUnpaddedUint8Array(this.chainId), + bigIntToUnpaddedUint8Array(this.nonce), + bigIntToUnpaddedUint8Array(this.maxPriorityFeePerGas), + bigIntToUnpaddedUint8Array(this.maxFeePerGas), + bigIntToUnpaddedUint8Array(this.gasLimit), + this.to !== undefined ? this.to.buf : Uint8Array.from([]), + bigIntToUnpaddedUint8Array(this.value), + this.data, + this.accessList, + this.v !== undefined ? bigIntToUnpaddedUint8Array(this.v) : Uint8Array.from([]), + this.r !== undefined ? bigIntToUnpaddedUint8Array(this.r) : Uint8Array.from([]), + this.s !== undefined ? bigIntToUnpaddedUint8Array(this.s) : Uint8Array.from([]), + ]; + } + + /** + * Returns the serialized encoding of the EIP-1559 transaction. + * + * Format: `0x02 || rlp([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, + * accessList, signatureYParity, signatureR, signatureS])` + * + * Note that in contrast to the legacy tx serialization format this is not + * valid RLP any more due to the raw tx type preceding and concatenated to + * the RLP encoding of the values. + */ + public serialize(): Uint8Array { + const base = this.raw(); + return uint8ArrayConcat(TRANSACTION_TYPE_UINT8ARRAY, RLP.encode(base)); + } + + /** + * Returns the serialized unsigned tx (hashed or raw), which can be used + * to sign the transaction (e.g. for sending to a hardware wallet). + * + * Note: in contrast to the legacy tx the raw message format is already + * serialized and doesn't need to be RLP encoded any more. + * + * ```javascript + * const serializedMessage = tx.getMessageToSign(false) // use this for the HW wallet input + * ``` + * + * @param hashMessage - Return hashed message if set to true (default: true) + */ + public getMessageToSign(hashMessage = true): Uint8Array { + const base = this.raw().slice(0, 9); + const message = uint8ArrayConcat(TRANSACTION_TYPE_UINT8ARRAY, RLP.encode(base)); + if (hashMessage) { + return keccak256(message); + } + return message; + } + + /** + * Computes a sha3-256 hash of the serialized tx. + * + * This method can only be used for signed txs (it throws otherwise). + * Use {@link FeeMarketEIP1559Transaction.getMessageToSign} to get a tx hash for the purpose of signing. + */ + public hash(): Uint8Array { + if (!this.isSigned()) { + const msg = this._errorMsg('Cannot call hash method if transaction is not signed'); + throw new Error(msg); + } + + if (Object.isFrozen(this)) { + if (!this.cache.hash) { + this.cache.hash = keccak256(this.serialize()); + } + return this.cache.hash; + } + return keccak256(this.serialize()); + } + + /** + * Computes a sha3-256 hash which can be used to verify the signature + */ + public getMessageToVerifySignature(): Uint8Array { + return this.getMessageToSign(); + } + + /** + * Returns the public key of the sender + */ + public getSenderPublicKey(): Uint8Array { + if (!this.isSigned()) { + const msg = this._errorMsg('Cannot call this method if transaction is not signed'); + throw new Error(msg); + } + + const msgHash = this.getMessageToVerifySignature(); + const { v, r, s } = this; + + this._validateHighS(); + + try { + return ecrecover( + msgHash, + v! + BigInt(27), // Recover the 27 which was stripped from ecsign + bigIntToUnpaddedUint8Array(r!), + bigIntToUnpaddedUint8Array(s!), + ); + } catch (e: any) { + const msg = this._errorMsg('Invalid Signature'); + throw new Error(msg); + } + } + + public _processSignature(v: bigint, r: Uint8Array, s: Uint8Array) { + const opts = { ...this.txOptions, common: this.common }; + + return FeeMarketEIP1559Transaction.fromTxData( + { + chainId: this.chainId, + nonce: this.nonce, + maxPriorityFeePerGas: this.maxPriorityFeePerGas, + maxFeePerGas: this.maxFeePerGas, + gasLimit: this.gasLimit, + to: this.to, + value: this.value, + data: this.data, + accessList: this.accessList, + v: v - BigInt(27), // This looks extremely hacky: /util actually adds 27 to the value, the recovery bit is either 0 or 1. + r: uint8ArrayToBigInt(r), + s: uint8ArrayToBigInt(s), + }, + opts, + ); + } + + /** + * Returns an object with the JSON representation of the transaction + */ + public toJSON(): JsonTx { + const accessListJSON = getAccessListJSON(this.accessList); + + return { + chainId: bigIntToHex(this.chainId), + nonce: bigIntToHex(this.nonce), + maxPriorityFeePerGas: bigIntToHex(this.maxPriorityFeePerGas), + maxFeePerGas: bigIntToHex(this.maxFeePerGas), + gasLimit: bigIntToHex(this.gasLimit), + to: this.to !== undefined ? this.to.toString() : undefined, + value: bigIntToHex(this.value), + data: bytesToHex(this.data), + accessList: accessListJSON, + v: this.v !== undefined ? bigIntToHex(this.v) : undefined, + r: this.r !== undefined ? bigIntToHex(this.r) : undefined, + s: this.s !== undefined ? bigIntToHex(this.s) : undefined, + }; + } + + /** + * Return a compact error string representation of the object + */ + public errorStr() { + let errorStr = this._getSharedErrorPostfix(); + errorStr += ` maxFeePerGas=${this.maxFeePerGas} maxPriorityFeePerGas=${this.maxPriorityFeePerGas}`; + return errorStr; + } + + /** + * Internal helper function to create an annotated error message + * + * @param msg Base error message + * @hidden + */ + protected _errorMsg(msg: string) { + return `${msg} (${this.errorStr()})`; + } +} diff --git a/packages/web3/test/integration/external-providers/extremely_simple.test.ts b/packages/web3/test/integration/external-providers/extremely_simple.test.ts new file mode 100644 index 00000000000..ba1ebdfa300 --- /dev/null +++ b/packages/web3/test/integration/external-providers/extremely_simple.test.ts @@ -0,0 +1,38 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import Web3 from '../../../src/index'; + +describe('compatibility with extremely simple external provider', () => { + it('should accept a simple instance that is compatible with EIP1193', () => { + interface RequestArguments { + readonly method: string; + readonly params?: readonly unknown[] | object; + } + + class Provider { + // eslint-disable-next-line class-methods-use-this, @typescript-eslint/require-await, @typescript-eslint/no-unused-vars + public async request(_: RequestArguments): Promise { + return undefined as unknown; + } + } + + const testProvider = new Provider(); + const { provider } = new Web3(testProvider); + expect(provider).toBeDefined(); + }); +}); diff --git a/packages/web3/test/integration/external-providers/ganache.test.ts b/packages/web3/test/integration/external-providers/ganache.test.ts new file mode 100644 index 00000000000..a0494db0161 --- /dev/null +++ b/packages/web3/test/integration/external-providers/ganache.test.ts @@ -0,0 +1,33 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// eslint-disable-next-line import/no-extraneous-dependencies +import ganache from 'ganache'; +import { performBasicRpcCalls } from './helper'; +import { getSystemTestMnemonic } from '../../shared_fixtures/system_tests_utils'; + +describe('compatibility with `ganache` provider', () => { + it('should initialize Web3, get accounts & block number and send a transaction', async () => { + const { provider } = ganache.server({ + wallet: { + mnemonic: getSystemTestMnemonic(), + }, + }); + + await performBasicRpcCalls(provider); + }); +}); diff --git a/packages/web3/test/integration/external-providers/hardhat.test.ts b/packages/web3/test/integration/external-providers/hardhat.test.ts new file mode 100644 index 00000000000..989424199fb --- /dev/null +++ b/packages/web3/test/integration/external-providers/hardhat.test.ts @@ -0,0 +1,28 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// eslint-disable-next-line import/no-extraneous-dependencies +import hardhat from 'hardhat'; + +import { performBasicRpcCalls } from './helper'; + +describe('compatibility with `hardhat` provider', () => { + it('should initialize Web3, get accounts & block number and send a transaction', async () => { + // use the hardhat provider for web3.js + await performBasicRpcCalls(hardhat.network.provider); + }); +}); diff --git a/packages/web3/test/integration/external-providers/helper.ts b/packages/web3/test/integration/external-providers/helper.ts new file mode 100644 index 00000000000..c1f88dd86b0 --- /dev/null +++ b/packages/web3/test/integration/external-providers/helper.ts @@ -0,0 +1,48 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { SupportedProviders } from 'web3-types'; +import Web3 from '../../../src/index'; + +/** + * Performs basic RPC calls (like `eth_accounts`, `eth_blockNumber` and `eth_sendTransaction`) + * @param provider - an instance of a compatible provider + */ +export async function performBasicRpcCalls(provider: SupportedProviders) { + const web3 = new Web3(provider); + const accounts = await web3.eth.getAccounts(); + expect(accounts).toBeDefined(); + expect(accounts.length).toBeGreaterThan(0); + // get the last block number + const blockNumber0 = await web3.eth.getBlockNumber(); + expect(typeof blockNumber0).toBe('bigint'); + + // send a transaction + const tx = await web3.eth.sendTransaction({ + to: accounts[1], + from: accounts[0], + value: '1', + gas: 21000 + }); + expect(tx.status).toBe(BigInt(1)); + + const blockNumber1 = await web3.eth.getBlockNumber(); + expect(typeof blockNumber1).toBe('bigint'); + + // After sending a transaction, the blocknumber is supposed to be greater than or equal the block number before sending the transaction + expect(blockNumber1).toBeGreaterThanOrEqual(blockNumber0); +} diff --git a/packages/web3/test/integration/external-providers/in3.test.ts b/packages/web3/test/integration/external-providers/in3.test.ts new file mode 100644 index 00000000000..72fe0d72be3 --- /dev/null +++ b/packages/web3/test/integration/external-providers/in3.test.ts @@ -0,0 +1,52 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { waitWithTimeout, setRequestIdStart } from 'web3-utils'; +// eslint-disable-next-line import/no-extraneous-dependencies +import In3Client from 'in3'; + +import Web3 from '../../../src/index'; + +// Actually it could take long time to get something from `in3` because of its decentralized nature. +// And because of that, this test only try to get the last block number. And this also simplifies the configuration needed. +describe('compatibility with `in3` provider', () => { + it.skip('should get last block number', async () => { + // use the In3Client as Http-Provider for web3.js + const web3 = new Web3( + new In3Client({ + proof: 'none', + signatureCount: 0, + requestCount: 1, + chainId: 'mainnet', + }).createWeb3Provider(), + ); + + // TODO: remove the next line after this issue is closed: https://github.com/blockchainsllc/in3/issues/46 + setRequestIdStart(0); + + // get the last block number + const blockNumber = await waitWithTimeout(web3.eth.getBlockNumber(), 25000); + + if (typeof blockNumber === 'undefined') { + console.warn( + 'It took too long for in3 provider to get a block. The test of in3 will be skipped', + ); + return; + } + expect(typeof blockNumber).toBe('bigint'); + }); +}); diff --git a/packages/web3/test/integration/external-providers/infura-rpc.test.ts b/packages/web3/test/integration/external-providers/infura-rpc.test.ts new file mode 100644 index 00000000000..479949c06f8 --- /dev/null +++ b/packages/web3/test/integration/external-providers/infura-rpc.test.ts @@ -0,0 +1,41 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import Web3 from '../../../src/index'; +import { describeIf, isIpc, itIf } from '../../shared_fixtures/system_tests_utils'; + +describeIf(!isIpc)('compatibility with `infura` remote rpc providers', () => { + itIf( + process.env.INFURA_GOERLI_WS + ? process.env.INFURA_GOERLI_WS.toString().includes('ws') + : false, + )('should create Web3 class instance with `ws` string connection', () => { + const web3 = new Web3(process.env.INFURA_GOERLI_WS); + // eslint-disable-next-line jest/no-standalone-expect + expect(web3).toBeInstanceOf(Web3); + }); + + itIf( + process.env.INFURA_GOERLI_HTTP + ? process.env.INFURA_GOERLI_HTTP.toString().includes('http') + : false, + )('should create Web3 class instance with `http` string connection', () => { + const web3 = new Web3(process.env.INFURA_GOERLI_HTTP); + // eslint-disable-next-line jest/no-standalone-expect + expect(web3).toBeInstanceOf(Web3); + }); +}); diff --git a/packages/web3/test/integration/external-providers/truffle-hdwallet.test.ts b/packages/web3/test/integration/external-providers/truffle-hdwallet.test.ts new file mode 100644 index 00000000000..17a2b088d43 --- /dev/null +++ b/packages/web3/test/integration/external-providers/truffle-hdwallet.test.ts @@ -0,0 +1,53 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import HDWalletProvider from '@truffle/hdwallet-provider'; + +import { performBasicRpcCalls } from './helper'; +import { + createNewAccount, + describeIf, + getSystemTestProvider, + isIpc, +} from '../../shared_fixtures/system_tests_utils'; +import Web3 from '../../../src'; + +describeIf(!isIpc)('compatibility with `truffle` `HDWalletProvider` provider', () => { + let provider: HDWalletProvider; + + beforeAll(async () => { + const clientUrl = getSystemTestProvider(); + const account1 = await createNewAccount({ unlock: true, refill: true }); + const account2 = await createNewAccount({ unlock: true, refill: true }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + provider = new HDWalletProvider({ + privateKeys: [account1.privateKey, account2.privateKey], + providerOrUrl: clientUrl, + }); + }); + afterAll(() => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + provider?.engine?.stop(); + }); + test('should create instance with external wallet provider', () => { + const web3 = new Web3(provider); + expect(web3).toBeInstanceOf(Web3); + }); + test('should initialize Web3, get accounts & block number and send a transaction', async () => { + await performBasicRpcCalls(provider); + }); +}); diff --git a/packages/web3/test/integration/handle_revert.test.ts b/packages/web3/test/integration/handle_revert.test.ts new file mode 100644 index 00000000000..89304c1414e --- /dev/null +++ b/packages/web3/test/integration/handle_revert.test.ts @@ -0,0 +1,136 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { TransactionRevertInstructionError } from 'web3-errors'; +import { Contract } from 'web3-eth-contract'; +import WebSocketProvider from 'web3-providers-ws'; +import Web3 from '../../src/index'; +import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic'; +import { + closeOpenConnection, + createTempAccount, + getSystemTestProvider, + getSystemTestProviderUrl, + isWs, +} from '../shared_fixtures/system_tests_utils'; + +Error.stackTraceLimit = Infinity; + +describe.skip('eth', () => { + let web3: Web3; + let accounts: string[] = []; + let clientUrl: string; + + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + + beforeEach(async () => { + clientUrl = getSystemTestProviderUrl(); + const acc1 = await createTempAccount(); + const acc2 = await createTempAccount(); + accounts = [acc1.address, acc2.address]; + web3 = new Web3(getSystemTestProvider()); + if (isWs) { + web3 = new Web3( + new WebSocketProvider( + clientUrl, + {}, + { delay: 1, autoReconnect: false, maxAttempts: 1 }, + ), + ); + } else { + web3 = new Web3(clientUrl); + } + + if (isWs) { + contract = new web3.eth.Contract(BasicAbi, undefined, { + provider: new WebSocketProvider( + clientUrl, + {}, + { delay: 1, autoReconnect: false, maxAttempts: 1 }, + ), + }); + } else { + contract = new web3.eth.Contract(BasicAbi, undefined, { + provider: clientUrl, + }); + } + + deployOptions = { + data: BasicBytecode, + arguments: [10, 'string init value'], + }; + + sendOptions = { from: accounts[0], gas: '1000000' }; + + contract = await contract.deploy(deployOptions).send(sendOptions); + }); + afterAll(async () => { + await closeOpenConnection(web3); + await closeOpenConnection(contract); + }); + + describe('handleRevert', () => { + // todo enable when figure out what happening in eth_call (doesn't throw error) + // eslint-disable-next-line jest/expect-expect + it('should get revert reason', async () => { + contract.handleRevert = true; + await expect(contract.methods.reverts().send({ from: accounts[0] })).rejects.toThrow( + new TransactionRevertInstructionError( + 'Returned error: execution reverted: REVERTED WITH REVERT', + ), + ); + }); + + it('should get revert reason for eth tx', async () => { + web3.eth.handleRevert = true; + await expect( + web3.eth.sendTransaction({ + from: accounts[0], + gas: '0x3d0900', + gasPrice: '0x3B9ACBF4', + input: '0x608060405234801561001057600080fdklkl', + nonce: '0x10', + to: undefined, + value: '0x0', + type: '0x0', + v: '0xa96', + r: '0x1ba80b16306d1de8ff809c00f67c305e8636326096aba282828d331aa2ec30a1', + s: '0x39f77e0b68d5524826e4385ad4e1f01e748f32c177840184ae65d9592fdfe5c', + }), + ).rejects.toThrow( + new TransactionRevertInstructionError( + 'Returned error: invalid argument 0: json: cannot unmarshal invalid hex string into Go struct field TransactionArgs.data of type hexutil.Bytes', + ), + ); + }); + + it('should execute transaction', async () => { + web3.eth.handleRevert = true; + await expect( + web3.eth.sendTransaction({ + from: accounts[0], + to: accounts[1], + gas: '0x76c0', + gasPrice: '0x9184e72a000', + value: '0x9184e72a', + data: '0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675', + }), + ).resolves.toBeDefined(); + }); + }); +}); diff --git a/packages/web3/test/integration/ipc.test.ts b/packages/web3/test/integration/ipc.test.ts new file mode 100644 index 00000000000..e22c3cc3d04 --- /dev/null +++ b/packages/web3/test/integration/ipc.test.ts @@ -0,0 +1,51 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { IpcProvider } from 'web3-providers-ipc'; +import { + getSystemTestProvider, + describeIf, + isIpc, + closeOpenConnection, + waitForSocketConnect, +} from '../shared_fixtures/system_tests_utils'; +import Web3, { EthExecutionAPI, SupportedProviders } from '../../src/index'; + +describe('Web3 instance', () => { + let provider: SupportedProviders | string; + let web3: Web3; + + beforeAll(() => { + provider = getSystemTestProvider(); + web3 = new Web3(provider); + }); + afterAll(async () => { + await closeOpenConnection(web3); + }); + + describeIf(isIpc)('Create Web3 class instance with ipc string providers', () => { + // https://ethereum.stackexchange.com/questions/52574/how-to-connect-to-ethereum-node-geth-via-ipc-from-outside-of-docker-container + // https://github.com/ethereum/go-ethereum/issues/17907 + it('should create instance with string of IPC provider', async () => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + + expect(web3).toBeInstanceOf(Web3); + await waitForSocketConnect(web3.provider as IpcProvider); + expect((web3.provider as IpcProvider).getStatus()).toBe('connected'); + }); + }); +}); diff --git a/packages/web3/test/integration/jest.config.js b/packages/web3/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3/test/integration/setup.js b/packages/web3/test/integration/setup.js new file mode 100644 index 00000000000..fddbec59a1e --- /dev/null +++ b/packages/web3/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 30000; // Sometimes `in3` takes long time because of its decentralized nature. + +jest.setTimeout(jestTimeout); diff --git a/packages/web3/test/integration/sync.test.ts b/packages/web3/test/integration/sync.test.ts new file mode 100644 index 00000000000..f699e6d75ac --- /dev/null +++ b/packages/web3/test/integration/sync.test.ts @@ -0,0 +1,102 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import Web3 from '../../src/index'; +import { + closeOpenConnection, + describeIf, + getSystemTestProviderUrl, + isIpc, + isSyncTest, + isWs, +} from '../shared_fixtures/system_tests_utils'; + +const addPeer = async (web3: Web3, eNode: string) => { + return web3.requestManager.send({ + method: 'admin_addPeer', + params: [eNode], + }); +}; +const removePeer = async (web3: Web3, eNode: string) => { + return web3.requestManager.send({ + method: 'admin_removePeer', + params: [eNode], + }); +}; +const minerStart = async (web3: Web3, start: number) => { + return web3.requestManager.send({ + method: 'miner_start', + params: [start], + }); +}; +const nodeInfo = async (web3: Web3) => { + return web3.requestManager.send({ + method: 'admin_nodeInfo', + params: [], + }); +}; +const addAccount = async (web3: Web3) => { + return web3.requestManager.send({ + method: 'personal_newAccount', + params: ['1234'], + }); +}; +describeIf((isIpc || isWs) && isSyncTest)('Sync nodes test', () => { + let web3Node1: Web3; + let web3Node2: Web3; + beforeAll(async () => { + const providerPath1 = isWs + ? getSystemTestProviderUrl().replace('8545', '18545') + : getSystemTestProviderUrl().replace('/tmp/ipc', '/tmp/ipc1'); + const providerPath2 = isWs + ? getSystemTestProviderUrl().replace('8545', '28545') + : getSystemTestProviderUrl().replace('/tmp/ipc', '/tmp/ipc2'); + + web3Node1 = new Web3(providerPath1); + await addAccount(web3Node1); + web3Node2 = new Web3(providerPath2); + await addAccount(web3Node2); + }); + afterAll(async () => { + await closeOpenConnection(web3Node1); + await closeOpenConnection(web3Node2); + }); + + describe('Start/end syncing', () => { + it('should emit start syncing and end syncing events', async () => { + const subs = await web3Node2.eth.subscribe('syncing'); + const dataPromise = new Promise(resolve => { + subs.on('data', resolve); + }); + const syncStartPromise = new Promise(resolve => { + subs.on('changed', resolve); + }); + await minerStart(web3Node1, 0); + const node1Info = await nodeInfo(web3Node1); + await addPeer(web3Node2, node1Info.enode); + await minerStart(web3Node1, 1); + + expect(await syncStartPromise).toBe(true); + await dataPromise; + const syncEndPromise = new Promise(resolve => { + subs.on('changed', resolve); + }); + expect(await syncEndPromise).toBe(false); + await removePeer(web3Node2, node1Info.enode); + }); + }); +}); diff --git a/packages/web3/test/integration/web3-plugin-add-tx.test.ts b/packages/web3/test/integration/web3-plugin-add-tx.test.ts new file mode 100644 index 00000000000..d1971b7f4ef --- /dev/null +++ b/packages/web3/test/integration/web3-plugin-add-tx.test.ts @@ -0,0 +1,72 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable @typescript-eslint/no-magic-numbers */ + +import { Transaction, TransactionFactory, Web3Account } from 'web3-eth-accounts'; +import { SupportedProviders, Web3, Web3PluginBase } from '../../src'; +import { + createAccount, + createLocalAccount, + getSystemTestProvider, + waitForOpenConnection, +} from '../shared_fixtures/system_tests_utils'; +import { SomeNewTxTypeTransaction, TRANSACTION_TYPE } from '../fixtures/tx-type-15'; + +class Eip4844Plugin extends Web3PluginBase { + public pluginNamespace = 'txType3'; + public constructor() { + super(); + TransactionFactory.registerTransactionType(TRANSACTION_TYPE, SomeNewTxTypeTransaction); + } +} + +describe('Add New Tx as a Plugin', () => { + let web3: Web3; + let clientUrl: string | SupportedProviders; + let account1: Web3Account; + let account2: Web3Account; + beforeEach(async () => { + clientUrl = getSystemTestProvider(); + web3 = new Web3(clientUrl); + account1 = await createLocalAccount(web3); + account2 = createAccount(); + web3.eth.accounts.wallet.add(account1); + await waitForOpenConnection(web3.eth); + }); + it('should receive correct type of tx', async () => { + web3.registerPlugin(new Eip4844Plugin()); + const tx = { + from: account1.address, + to: account2.address, + value: '0x1', + type: TRANSACTION_TYPE, + maxPriorityFeePerGas: BigInt(5000000), + maxFeePerGas: BigInt(5000000), + }; + const sub = web3.eth.sendTransaction(tx); + + const waitForEvent: Promise = new Promise(resolve => { + // eslint-disable-next-line @typescript-eslint/no-floating-promises + sub.on('sending', txData => { + resolve(txData as unknown as Transaction); + }); + }); + expect(Number((await waitForEvent).type)).toBe(TRANSACTION_TYPE); + await expect(sub).rejects.toThrow(); + }); +}); diff --git a/packages/web3/test/integration/web3.abi.test.ts b/packages/web3/test/integration/web3.abi.test.ts new file mode 100644 index 00000000000..14e3f8c227f --- /dev/null +++ b/packages/web3/test/integration/web3.abi.test.ts @@ -0,0 +1,50 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { validEncodeParametersData } from '../shared_fixtures/data'; +import { + getSystemTestProvider, + waitForOpenConnection, + closeOpenConnection, +} from '../shared_fixtures/system_tests_utils'; +import Web3, { SupportedProviders } from '../../src/index'; + +describe('web3.abi', () => { + let clientUrl: string | SupportedProviders; + let web3: Web3; + + beforeAll(async () => { + clientUrl = getSystemTestProvider(); + web3 = new Web3(clientUrl); + + await waitForOpenConnection(web3); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + it('hash correctly', () => { + const validData = validEncodeParametersData[0]; + + const encodedParameters = web3.eth.abi.encodeParameters( + validData.input[0], + validData.input[1], + ); + expect(encodedParameters).toEqual(validData.output); + }); +}); diff --git a/packages/web3/test/integration/web3.accounts.test.ts b/packages/web3/test/integration/web3.accounts.test.ts new file mode 100644 index 00000000000..22a0c83a8c1 --- /dev/null +++ b/packages/web3/test/integration/web3.accounts.test.ts @@ -0,0 +1,208 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Account } from 'web3-eth-accounts'; +import { + getSystemTestProvider, + createNewAccount, + waitForOpenConnection, + closeOpenConnection, + createTempAccount, +} from '../shared_fixtures/system_tests_utils'; +import Web3, { SupportedProviders } from '../../src/index'; + +const hexRegx = /0[xX][0-9a-fA-F]+/; + +describe('web3.accounts', () => { + let clientUrl: string | SupportedProviders; + let tempAccount: string; + let web3: Web3; + + beforeAll(async () => { + clientUrl = getSystemTestProvider(); + web3 = new Web3(clientUrl); + await waitForOpenConnection(web3); + }); + beforeEach(async () => { + tempAccount = (await createTempAccount()).address; + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + describe('create', () => { + it('should create account', () => { + const account: Web3Account = web3.eth.accounts.create(); + + expect(account).toEqual( + expect.objectContaining({ + address: expect.stringMatching(hexRegx), + privateKey: expect.stringMatching(hexRegx), + }), + ); + }); + + describe('signTransaction', () => { + it('should be able to sign the transaction from created account', async () => { + const account: Web3Account = web3.eth.accounts.create(); + const tx = { + from: account.address, + to: tempAccount, + value: web3.utils.toWei('0.00001', 'ether'), + gas: '0x5218', + data: '0x1', + }; + + // Fund this account with some ether + await expect( + web3.eth.sendTransaction({ + from: tempAccount, + to: account.address, + value: web3.utils.toWei('0.00005', 'ether'), + }), + ).resolves.toBeDefined(); + + const txWithGas = { + ...tx, + gasPrice: '0x271000', + }; + // Sign the tx from that account + const signedTx = await account.signTransaction(txWithGas); + + expect(signedTx).toEqual( + expect.objectContaining({ + messageHash: expect.stringMatching(hexRegx), + rawTransaction: expect.stringMatching(hexRegx), + transactionHash: expect.stringMatching(hexRegx), + v: expect.stringMatching(hexRegx), + r: expect.stringMatching(hexRegx), + s: expect.stringMatching(hexRegx), + }), + ); + + // The signed transaction is accepted by the node + await expect( + web3.eth.sendSignedTransaction(signedTx.rawTransaction), + ).resolves.toEqual( + expect.objectContaining({ transactionHash: signedTx.transactionHash }), + ); + }); + + it('should throw error if gas is to low', async () => { + const account: Web3Account = web3.eth.accounts.create(); + + const tx = { + from: account.address, + to: tempAccount, + value: web3.utils.toWei('0.1', 'ether'), + gas: '0x1', + data: '0x1', + gasPrice: '0x38562', + }; + + await expect(account.signTransaction(tx)).rejects.toThrow('gasLimit is too low.'); + }); + + // TODO This test should fail, but it's not. Need to debug further to figure out why. + // eslint-disable-next-line jest/no-disabled-tests + it.skip('should throw error if signed by private key not associated with "from" field', async () => { + const account: Web3Account = web3.eth.accounts.create(); + + const tx = { + from: tempAccount, + to: account.address, + value: web3.utils.toWei('0.1', 'ether'), + gas: '0x1', + data: '0x1', + }; + + await expect(account.signTransaction(tx)).rejects.toThrow('Error'); + }); + }); + }); + + describe('signTransaction', () => { + it('should be able to sign the transaction from created account', async () => { + const account: Web3Account = web3.eth.accounts.create(); + + const tx = { + from: account.address, + to: tempAccount, + value: web3.utils.toWei('0.1', 'ether'), + gas: '0x5218', + data: '0x1', + gasPrice: '0x48523', + }; + + // Fund this account with some ether + await expect( + web3.eth.sendTransaction({ + from: tempAccount, + to: account.address, + value: web3.utils.toWei('0.5', 'ether'), + }), + ).resolves.toBeDefined(); + + // Sign the tx from that account + const signedTx = await web3.eth.accounts.signTransaction(tx, account.privateKey); + + expect(signedTx).toEqual( + expect.objectContaining({ + messageHash: expect.stringMatching(hexRegx), + rawTransaction: expect.stringMatching(hexRegx), + transactionHash: expect.stringMatching(hexRegx), + v: expect.stringMatching(hexRegx), + r: expect.stringMatching(hexRegx), + s: expect.stringMatching(hexRegx), + }), + ); + + // The signed transaction is accepted by the node + await expect(web3.eth.sendSignedTransaction(signedTx.rawTransaction)).resolves.toEqual( + expect.objectContaining({ transactionHash: signedTx.transactionHash }), + ); + }); + + it('should throw error if gas is to low', async () => { + const account: Web3Account = web3.eth.accounts.create(); + + const tx = { + from: account.address, + to: tempAccount, + value: web3.utils.toWei('0.1', 'ether'), + gas: '0x1', + data: '0x1', + gasPrice: '0x1', + }; + + await expect(web3.eth.accounts.signTransaction(tx, account.privateKey)).rejects.toThrow( + 'gasLimit is too low.', + ); + }); + }); + + describe('privateKeyToAccount', () => { + it('should create account from private key', async () => { + const acc = await createNewAccount(); + const createdAccount: Web3Account = web3.eth.accounts.privateKeyToAccount( + acc.privateKey, + ); + expect(acc.address.toLowerCase()).toBe(createdAccount.address.toLowerCase()); + }); + }); +}); diff --git a/packages/web3/test/integration/web3.eth.transaction.test.ts b/packages/web3/test/integration/web3.eth.transaction.test.ts new file mode 100644 index 00000000000..3a33984a9e9 --- /dev/null +++ b/packages/web3/test/integration/web3.eth.transaction.test.ts @@ -0,0 +1,121 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import * as httpProvider from 'web3-providers-http'; +import { Web3Account } from 'web3-eth-accounts'; +import Web3, { DEFAULT_RETURN_FORMAT, Transaction } from '../../src'; +import testsData from '../fixtures/transactions.json'; + +jest.mock('web3-providers-http'); + +describe('signTransaction', () => { + let blockNum = 1; + + it.each(testsData)( + 'Integration test of transaction %s with Web3, Web3.Eth, Web3.Accounts and Provider should pass', + async txObj => { + const web3: Web3 = new Web3('http://127.0.0.1:8080'); + + const account: Web3Account = web3.eth.accounts.privateKeyToAccount(txObj.privateKey); + + web3.eth.wallet?.add(txObj.privateKey); + + const normalTx: Transaction = { + ...txObj.transaction, + from: account.address, + }; + + // either make it legacy or type 0x2 tx, instead of keeping both gasPrice and (maxPriorityFeePerGas maxFeePerGas) + if (txObj.transaction?.maxPriorityFeePerGas) { + delete normalTx['gasPrice']; + } else { + delete normalTx['maxPriorityFeePerGas']; + delete normalTx['maxFeePerGas']; + } + + jest.spyOn(httpProvider.HttpProvider.prototype, 'request').mockImplementation( + async (payload: any) => { + const response = { + jsonrpc: '2.0', + id: payload.id, + result: {}, + }; + + switch (payload.method) { + case 'net_version': + response.result = '1'; + break; + + case 'eth_chainId': + response.result = '0x1'; + break; + + case 'eth_blockNumber': + blockNum += 10; + response.result = `0x${blockNum.toString(16)}`; + break; + + case 'eth_getTransactionReceipt': + response.result = { + blockHash: + '0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3', + blockNumber: `0x${blockNum.toString(16)}`, + cumulativeGasUsed: '0xa12515', + // "effectiveGasPrice": payload.effectiveGasPrice, + from: payload.from, + gasUsed: payload.gasLimit, + // "logs": [{}], + // "logsBloom": "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3", // 256 byte bloom filter + status: '0x1', + to: payload.to, + transactionHash: + '0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5', + transactionIndex: '0x66', + // "type": payload.type + }; + break; + + case 'eth_sendRawTransaction': + if (txObj.transaction.maxPriorityFeePerGas !== undefined) { + // eslint-disable-next-line jest/no-conditional-expect + expect(payload.params[0]).toBe(txObj.signedLondon); // validate transaction for London HF + } else { + // eslint-disable-next-line jest/no-conditional-expect + expect(payload.params[0]).toBe(txObj.signedBerlin); // validate transaction for Berlin HF + } + response.result = + '0x895ebb29d30e0afa891a5ca3a2687e073bd2c7ab544117ac386c8d8ff3ad583b'; + break; + + default: + throw new Error(`Unknown payload ${payload}`); + } + + return new Promise(resolve => { + resolve(response as any); + }); + }, + ); + + const res = await web3.eth.sendTransaction(normalTx, DEFAULT_RETURN_FORMAT, { + ignoreGasPricing: true, + checkRevertBeforeSending: false, + }); + expect(res).toBeDefined(); + }, + ); +}); diff --git a/packages/web3/test/integration/web3.setProvider.test.ts b/packages/web3/test/integration/web3.setProvider.test.ts new file mode 100644 index 00000000000..6853ddaa8db --- /dev/null +++ b/packages/web3/test/integration/web3.setProvider.test.ts @@ -0,0 +1,80 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import Web3 from '../../src/index'; +import { + closeOpenConnection, + describeIf, + getSystemTestProviderUrl, + isHttp, + isWs, + waitForOpenConnection, +} from '../shared_fixtures/system_tests_utils'; + +describeIf(isWs || isHttp)('web3.contract.setProvider', () => { + let clientUrl: string; + let secontUrl: string; + let web3: Web3; + + beforeAll(async () => { + clientUrl = getSystemTestProviderUrl(); + secontUrl = clientUrl.startsWith('http') + ? clientUrl.replace('http', 'ws') + : clientUrl.replace('ws', 'http'); + web3 = new Web3(clientUrl); + + await waitForOpenConnection(web3); + }); + + afterAll(async () => { + await closeOpenConnection(web3); + }); + + test('create few contracts and check providers', () => { + const c1 = new web3.eth.Contract([]); + const c2 = new web3.eth.Contract([]); + + expect(c1.provider).toBe(web3.provider); + expect(c2.provider).toBe(web3.provider); + }); + + test('create few contracts and check providers. set different provider', () => { + const c1 = new web3.eth.Contract([]); + const c2 = new web3.eth.Contract([]); + + expect(c1.provider).toBe(web3.provider); + expect(c2.provider).toBe(web3.provider); + + web3.setProvider(secontUrl); + + expect(c1.provider).toBe(web3.provider); + expect(c2.provider).toBe(web3.provider); + }); + + test('create few contracts, set different provider to contract and check other contract', () => { + const c1 = new web3.eth.Contract([]); + const c2 = new web3.eth.Contract([]); + + expect(c1.provider).toBe(web3.provider); + expect(c2.provider).toBe(web3.provider); + + c1.setProvider(secontUrl); + + expect(c1.provider).toBe(web3.provider); + expect(c2.provider).toBe(web3.provider); + }); +}); diff --git a/packages/web3/test/integration/web3.test.ts b/packages/web3/test/integration/web3.test.ts new file mode 100644 index 00000000000..356a5f3d917 --- /dev/null +++ b/packages/web3/test/integration/web3.test.ts @@ -0,0 +1,353 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import Contract from 'web3-eth-contract'; +import HttpProvider from 'web3-providers-http'; +import { IpcProvider } from 'web3-providers-ipc'; +import WebSocketProvider from 'web3-providers-ws'; +import { JsonRpcOptionalRequest, SupportedProviders, Web3BaseProvider } from 'web3-types'; +import Web3 from '../../src/index'; +import { BasicAbi } from '../shared_fixtures/Basic'; +import { GreeterAbi, GreeterBytecode } from '../shared_fixtures/build/Greeter'; +import { validEncodeParametersData } from '../shared_fixtures/data'; +import { + closeOpenConnection, + createTempAccount, + describeIf, + getSystemTestProvider, + getSystemTestProviderUrl, + isHttp, + isIpc, + isSocket, + isWs, + itIf, + waitForOpenConnection, +} from '../shared_fixtures/system_tests_utils'; + +/* eslint-disable jest/no-standalone-expect */ + +describe('Web3 instance', () => { + let provider: string | SupportedProviders; + let providerUrl: string; + let accounts: string[]; + let web3: Web3; + let currentAttempt = 0; + + beforeAll(async () => { + provider = getSystemTestProvider(); + providerUrl = getSystemTestProviderUrl(); + const acc1 = await createTempAccount(); + const acc2 = await createTempAccount(); + accounts = [acc1.address, acc2.address]; + }); + afterAll(async () => { + await closeOpenConnection(web3); + }); + + beforeEach(() => { + currentAttempt = 0; + }); + + afterEach(async () => { + if (isWs) { + // make sure we try to close the connection after it is established + if ( + web3?.provider && + (web3.provider as unknown as Web3BaseProvider).getStatus() === 'connecting' + ) { + await waitForOpenConnection(web3, currentAttempt); + } + + if (web3?.provider) { + (web3.provider as unknown as Web3BaseProvider).disconnect(1000, ''); + } + } + }); + + it('should be able to create web3 object without provider', () => { + expect(() => new Web3()).not.toThrow(); + }); + + it('check disconnect function', async () => { + const web3Instance = new Web3(provider); + await web3Instance.eth.getBlockNumber(); + expect(typeof web3Instance.provider?.disconnect).toBe('function'); + expect(typeof web3Instance.eth.provider?.disconnect).toBe('function'); + expect(typeof web3Instance.currentProvider?.disconnect).toBe('function'); + expect(typeof web3Instance.eth.currentProvider?.disconnect).toBe('function'); + if (isSocket) { + web3Instance.currentProvider?.disconnect(); + } + }); + itIf(isWs)('check disconnect function for WebSocket provider', async () => { + const web3Instance = new Web3(new WebSocketProvider(providerUrl)); + await web3Instance.eth.getBlockNumber(); + expect(typeof web3Instance.provider?.disconnect).toBe('function'); + expect(typeof web3Instance.eth.provider?.disconnect).toBe('function'); + expect(typeof web3Instance.currentProvider?.disconnect).toBe('function'); + expect(typeof web3Instance.eth.currentProvider?.disconnect).toBe('function'); + web3Instance.currentProvider?.disconnect(); + }); + itIf(isIpc)('check disconnect function for ipc provider', async () => { + const web3Instance = new Web3(new IpcProvider(providerUrl)); + await web3Instance.eth.getBlockNumber(); + expect(typeof web3Instance.provider?.disconnect).toBe('function'); + expect(typeof web3Instance.eth.provider?.disconnect).toBe('function'); + expect(typeof web3Instance.currentProvider?.disconnect).toBe('function'); + expect(typeof web3Instance.eth.currentProvider?.disconnect).toBe('function'); + web3Instance.currentProvider?.disconnect(); + }); + itIf(isHttp)('check disconnect function for http provider', async () => { + const web3Instance = new Web3(new HttpProvider(providerUrl)); + await web3Instance.eth.getBlockNumber(); + expect(typeof web3Instance.provider?.disconnect).toBe('function'); + expect(typeof web3Instance.eth.provider?.disconnect).toBe('function'); + expect(typeof web3Instance.currentProvider?.disconnect).toBe('function'); + expect(typeof web3Instance.eth.currentProvider?.disconnect).toBe('function'); + }); + + it('should be able use "utils" without provider', () => { + web3 = new Web3(); + + expect(web3.utils.hexToNumber('0x5')).toBe(5); + }); + + it('should be able use "abi" without provider', () => { + web3 = new Web3(); + const validData = validEncodeParametersData[0]; + + const encodedParameters = web3.eth.abi.encodeParameters( + validData.input[0], + validData.input[1], + ); + expect(encodedParameters).toEqual(validData.output); + }); + + it('should throw error when we make a request when provider not available', async () => { + web3 = new Web3(); + + await expect(web3.eth.getChainId()).rejects.toThrow('Provider not available'); + }); + + describeIf(isHttp)('Create Web3 class instance with http string providers', () => { + it('should create instance with string provider', () => { + web3 = new Web3(provider); + expect(web3).toBeInstanceOf(Web3); + }); + }); + + describeIf(isWs)('Create Web3 class instance with ws string providers', () => { + it('should create instance with string of ws provider', () => { + web3 = new Web3(provider); + expect(web3).toBeInstanceOf(Web3); + }); + }); + + describe('Web3 providers', () => { + it('should set the provider with `.provider=`', async () => { + web3 = new Web3('http://dummy.com'); + + web3.provider = provider; + + expect(web3).toBeInstanceOf(Web3); + if (isWs) { + await waitForOpenConnection(web3, 0); + } + const response = await web3.eth.getBalance(accounts[0]); + + expect(response).toEqual(expect.any(BigInt)); + }); + + it('should set the provider with `.setProvider`', () => { + let newProvider: Web3BaseProvider; + web3 = new Web3('http://dummy.com'); + if (isHttp) { + newProvider = new Web3.providers.HttpProvider(providerUrl); + } else if (isWs) { + newProvider = new Web3.providers.WebsocketProvider(providerUrl); + } else { + newProvider = new IpcProvider(providerUrl); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + web3.setProvider(newProvider as SupportedProviders); + + expect(web3.provider).toBe(newProvider); + }); + + it('should set the provider with `.setProvider` of empty initialized object', async () => { + web3 = new Web3(); + + web3.setProvider(getSystemTestProvider()); + + await expect(web3.eth.getChainId()).resolves.toBeDefined(); + }); + + it('should set the provider with `.provider=` of empty initialized object', async () => { + web3 = new Web3(); + + web3.provider = getSystemTestProvider(); + + await expect(web3.eth.getChainId()).resolves.toBeDefined(); + }); + + it('should unset the provider with `.setProvider`', async () => { + web3 = new Web3(getSystemTestProvider()); + await expect(web3.eth.getChainId()).resolves.toBeDefined(); + + web3.setProvider(undefined); + await expect(web3.eth.getChainId()).rejects.toThrow('Provider not available'); + }); + + it('should unset the provider with `.provider=`', async () => { + web3 = new Web3(getSystemTestProvider()); + await expect(web3.eth.getChainId()).resolves.toBeDefined(); + + web3.provider = undefined; + await expect(web3.eth.getChainId()).rejects.toThrow('Provider not available'); + }); + + it('providers', () => { + const res = Web3.providers; + + expect(Web3.providers.HttpProvider).toBe(HttpProvider); + expect(res.WebsocketProvider).toBe(WebSocketProvider); + }); + + it('currentProvider', () => { + web3 = new Web3(provider); + + let checkWithClass; + if (isWs) { + checkWithClass = Web3.providers.WebsocketProvider; + } else if (isHttp) { + checkWithClass = Web3.providers.HttpProvider; + } else { + checkWithClass = IpcProvider; + } + expect(web3.currentProvider).toBeInstanceOf(checkWithClass); + }); + + it('givenProvider', () => { + const { givenProvider } = web3; + expect(givenProvider).toBeUndefined(); + }); + }); + + describe('Module instantiations', () => { + it('should create contract', () => { + const basicContract = new web3.eth.Contract(BasicAbi); + expect(basicContract).toBeInstanceOf(Contract); + }); + }); + + // TODO: remove describeIf when finish #5144 + describeIf(!isIpc)('Batch Request', () => { + let request1: JsonRpcOptionalRequest; + let request2: JsonRpcOptionalRequest; + beforeEach(() => { + request1 = { + id: 10, + method: 'eth_getBalance', + params: [accounts[0], 'latest'], + }; + request2 = { + id: 11, + method: 'eth_getBalance', + params: [accounts[1], 'latest'], + }; + }); + + it('should execute batch requests', async () => { + web3 = new Web3(provider); + if (isWs) { + await waitForOpenConnection(web3, 0); + } + const batch = new web3.BatchRequest(); + + const request1Promise = batch.add(request1); + const request2Promise = batch.add(request2); + + const executePromise = batch.execute(); + const response = await Promise.all([request1Promise, request2Promise, executePromise]); + expect(response[0]).toEqual(expect.stringMatching(/0[xX][0-9a-fA-F]+/)); + expect(response[1]).toEqual(expect.stringMatching(/0[xX][0-9a-fA-F]+/)); + + expect(response[2]).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: request1.id, + result: response[0], + }), + expect.objectContaining({ + id: request2.id, + result: response[1], + }), + ]), + ); + }); + }); + + describe('defaults', () => { + let contract: Contract; + let deployOptions: Record; + let sendOptions: Record; + let acc: { address: string; privateKey: string }; + + beforeAll(() => { + web3 = new Web3(provider); + }); + + beforeEach(async () => { + acc = await createTempAccount(); + + // todo import GreeterBytecode + deployOptions = { + data: GreeterBytecode, + arguments: ['My Greeting'], + }; + + sendOptions = { from: acc.address, gas: '1000000' }; + }); + + it('should update defaults on contract instance', () => { + const hardfork = 'berlin'; + + contract = new web3.eth.Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + syncWithContext: true, + }); + + web3.defaultHardfork = hardfork; + + expect(contract.defaultHardfork).toBe(hardfork); + }); + + it('should update defaults on deployed contract instance', async () => { + const hardfork = 'berlin'; + + contract = new web3.eth.Contract(GreeterAbi, undefined, { + provider: getSystemTestProvider(), + syncWithContext: true, + }); + contract = await contract.deploy(deployOptions).send(sendOptions); + + web3.defaultHardfork = hardfork; + + expect(contract.defaultHardfork).toBe(hardfork); + }); + }); +}); diff --git a/packages/web3/test/shared_fixtures/Basic.ts b/packages/web3/test/shared_fixtures/Basic.ts new file mode 120000 index 00000000000..66f39e5cacc --- /dev/null +++ b/packages/web3/test/shared_fixtures/Basic.ts @@ -0,0 +1 @@ +../../../../fixtures/build/Basic.ts \ No newline at end of file diff --git a/packages/web3/test/shared_fixtures/Greeter.ts b/packages/web3/test/shared_fixtures/Greeter.ts new file mode 120000 index 00000000000..21eaea8e5e9 --- /dev/null +++ b/packages/web3/test/shared_fixtures/Greeter.ts @@ -0,0 +1 @@ +../../../../fixtures/build/Greeter.ts \ No newline at end of file diff --git a/packages/web3/test/shared_fixtures/accounts.json b/packages/web3/test/shared_fixtures/accounts.json new file mode 120000 index 00000000000..7dbcddb60a2 --- /dev/null +++ b/packages/web3/test/shared_fixtures/accounts.json @@ -0,0 +1 @@ +../../../../scripts/accounts.json \ No newline at end of file diff --git a/packages/web3/test/shared_fixtures/build b/packages/web3/test/shared_fixtures/build new file mode 120000 index 00000000000..0e47c00b882 --- /dev/null +++ b/packages/web3/test/shared_fixtures/build @@ -0,0 +1 @@ +../../../../fixtures/build \ No newline at end of file diff --git a/packages/web3/test/shared_fixtures/contracts/ERC20Token.ts b/packages/web3/test/shared_fixtures/contracts/ERC20Token.ts new file mode 100644 index 00000000000..b13578a62d1 --- /dev/null +++ b/packages/web3/test/shared_fixtures/contracts/ERC20Token.ts @@ -0,0 +1,141 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const ERC20TokenAbi = [ + { + inputs: [{ internalType: 'uint256', name: 'initialSupply', type: 'uint256' }], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'owner', type: 'address' }, + { indexed: true, internalType: 'address', name: 'spender', type: 'address' }, + { indexed: false, internalType: 'uint256', name: 'value', type: 'uint256' }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'from', type: 'address' }, + { indexed: true, internalType: 'address', name: 'to', type: 'address' }, + { indexed: false, internalType: 'uint256', name: 'value', type: 'uint256' }, + ], + name: 'Transfer', + type: 'event', + }, + { + inputs: [ + { internalType: 'address', name: 'owner', type: 'address' }, + { internalType: 'address', name: 'spender', type: 'address' }, + ], + name: 'allowance', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'spender', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'approve', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [{ internalType: 'address', name: 'account', type: 'address' }], + name: 'balanceOf', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'decimals', + outputs: [{ internalType: 'uint8', name: '', type: 'uint8' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'spender', type: 'address' }, + { internalType: 'uint256', name: 'subtractedValue', type: 'uint256' }, + ], + name: 'decreaseAllowance', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'spender', type: 'address' }, + { internalType: 'uint256', name: 'addedValue', type: 'uint256' }, + ], + name: 'increaseAllowance', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'name', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'symbol', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'totalSupply', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'transfer', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'from', type: 'address' }, + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, +] as const; +export const ERC20TokenBytecode = + '0x60806040523480156200001157600080fd5b50604051620017a8380380620017a8833981810160405281019062000037919062000362565b6040518060400160405280600481526020017f476f6c64000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f474c4400000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb92919062000272565b508060049080519060200190620000d492919062000272565b505050620000e93382620000f060201b60201c565b5062000535565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000162576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015990620003f5565b60405180910390fd5b62000176600083836200026860201b60201c565b80600260008282546200018a919062000446565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620001e1919062000446565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002489190620004b4565b60405180910390a362000264600083836200026d60201b60201c565b5050565b505050565b505050565b828054620002809062000500565b90600052602060002090601f016020900481019282620002a45760008555620002f0565b82601f10620002bf57805160ff1916838001178555620002f0565b82800160010185558215620002f0579182015b82811115620002ef578251825591602001919060010190620002d2565b5b509050620002ff919062000303565b5090565b5b808211156200031e57600081600090555060010162000304565b5090565b600080fd5b6000819050919050565b6200033c8162000327565b81146200034857600080fd5b50565b6000815190506200035c8162000331565b92915050565b6000602082840312156200037b576200037a62000322565b5b60006200038b848285016200034b565b91505092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620003dd601f8362000394565b9150620003ea82620003a5565b602082019050919050565b600060208201905081810360008301526200041081620003ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620004538262000327565b9150620004608362000327565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000498576200049762000417565b5b828201905092915050565b620004ae8162000327565b82525050565b6000602082019050620004cb6000830184620004a3565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200051957607f821691505b6020821081036200052f576200052e620004d1565b5b50919050565b61126380620005456000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b1e565b60405180910390f35b6100e660048036038101906100e19190610bd9565b610308565b6040516100f39190610c34565b60405180910390f35b61010461032b565b6040516101119190610c5e565b60405180910390f35b610134600480360381019061012f9190610c79565b610335565b6040516101419190610c34565b60405180910390f35b610152610364565b60405161015f9190610ce8565b60405180910390f35b610182600480360381019061017d9190610bd9565b61036d565b60405161018f9190610c34565b60405180910390f35b6101b260048036038101906101ad9190610d03565b6103a4565b6040516101bf9190610c5e565b60405180910390f35b6101d06103ec565b6040516101dd9190610b1e565b60405180910390f35b61020060048036038101906101fb9190610bd9565b61047e565b60405161020d9190610c34565b60405180910390f35b610230600480360381019061022b9190610bd9565b6104f5565b60405161023d9190610c34565b60405180910390f35b610260600480360381019061025b9190610d30565b610518565b60405161026d9190610c5e565b60405180910390f35b60606003805461028590610d9f565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610d9f565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b60008061031361059f565b90506103208185856105a7565b600191505092915050565b6000600254905090565b60008061034061059f565b905061034d858285610770565b6103588585856107fc565b60019150509392505050565b60006012905090565b60008061037861059f565b905061039981858561038a8589610518565b6103949190610dff565b6105a7565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610d9f565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610d9f565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b60008061048961059f565b905060006104978286610518565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610ec7565b60405180910390fd5b6104e982868684036105a7565b60019250505092915050565b60008061050061059f565b905061050d8185856107fc565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d90610f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c90610feb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107639190610c5e565b60405180910390a3505050565b600061077c8484610518565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107f657818110156107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90611057565b60405180910390fd5b6107f584848484036105a7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361086b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610862906110e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d19061117b565b60405180910390fd5b6108e5838383610a7b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561096b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109629061120d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109fe9190610dff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a629190610c5e565b60405180910390a3610a75848484610a80565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610abf578082015181840152602081019050610aa4565b83811115610ace576000848401525b50505050565b6000601f19601f8301169050919050565b6000610af082610a85565b610afa8185610a90565b9350610b0a818560208601610aa1565b610b1381610ad4565b840191505092915050565b60006020820190508181036000830152610b388184610ae5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b7082610b45565b9050919050565b610b8081610b65565b8114610b8b57600080fd5b50565b600081359050610b9d81610b77565b92915050565b6000819050919050565b610bb681610ba3565b8114610bc157600080fd5b50565b600081359050610bd381610bad565b92915050565b60008060408385031215610bf057610bef610b40565b5b6000610bfe85828601610b8e565b9250506020610c0f85828601610bc4565b9150509250929050565b60008115159050919050565b610c2e81610c19565b82525050565b6000602082019050610c496000830184610c25565b92915050565b610c5881610ba3565b82525050565b6000602082019050610c736000830184610c4f565b92915050565b600080600060608486031215610c9257610c91610b40565b5b6000610ca086828701610b8e565b9350506020610cb186828701610b8e565b9250506040610cc286828701610bc4565b9150509250925092565b600060ff82169050919050565b610ce281610ccc565b82525050565b6000602082019050610cfd6000830184610cd9565b92915050565b600060208284031215610d1957610d18610b40565b5b6000610d2784828501610b8e565b91505092915050565b60008060408385031215610d4757610d46610b40565b5b6000610d5585828601610b8e565b9250506020610d6685828601610b8e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610db757607f821691505b602082108103610dca57610dc9610d70565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e0a82610ba3565b9150610e1583610ba3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610e4a57610e49610dd0565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610eb1602583610a90565b9150610ebc82610e55565b604082019050919050565b60006020820190508181036000830152610ee081610ea4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000610f43602483610a90565b9150610f4e82610ee7565b604082019050919050565b60006020820190508181036000830152610f7281610f36565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000610fd5602283610a90565b9150610fe082610f79565b604082019050919050565b6000602082019050818103600083015261100481610fc8565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611041601d83610a90565b915061104c8261100b565b602082019050919050565b6000602082019050818103600083015261107081611034565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006110d3602583610a90565b91506110de82611077565b604082019050919050565b60006020820190508181036000830152611102816110c6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611165602383610a90565b915061117082611109565b604082019050919050565b6000602082019050818103600083015261119481611158565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006111f7602683610a90565b91506112028261119b565b604082019050919050565b60006020820190508181036000830152611226816111ea565b905091905056fea264697066735822122039c50588d39e359807efa398bd1b3aff1b082ef738dddcfa8475048e11f9024e64736f6c634300080d0033'; diff --git a/packages/web3/test/shared_fixtures/contracts/ERC721Token.ts b/packages/web3/test/shared_fixtures/contracts/ERC721Token.ts new file mode 100644 index 00000000000..e5891dbe3f0 --- /dev/null +++ b/packages/web3/test/shared_fixtures/contracts/ERC721Token.ts @@ -0,0 +1,174 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const ERC721TokenAbi = [ + { inputs: [], stateMutability: 'nonpayable', type: 'constructor' }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'owner', type: 'address' }, + { indexed: true, internalType: 'address', name: 'approved', type: 'address' }, + { indexed: true, internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'owner', type: 'address' }, + { indexed: true, internalType: 'address', name: 'operator', type: 'address' }, + { indexed: false, internalType: 'bool', name: 'approved', type: 'bool' }, + ], + name: 'ApprovalForAll', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'from', type: 'address' }, + { indexed: true, internalType: 'address', name: 'to', type: 'address' }, + { indexed: true, internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + ], + name: 'Transfer', + type: 'event', + }, + { + inputs: [ + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + ], + name: 'approve', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'player', type: 'address' }, + { internalType: 'string', name: 'tokenURI', type: 'string' }, + ], + name: 'awardItem', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [{ internalType: 'address', name: 'owner', type: 'address' }], + name: 'balanceOf', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'uint256', name: 'tokenId', type: 'uint256' }], + name: 'getApproved', + outputs: [{ internalType: 'address', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'owner', type: 'address' }, + { internalType: 'address', name: 'operator', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'name', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'uint256', name: 'tokenId', type: 'uint256' }], + name: 'ownerOf', + outputs: [{ internalType: 'address', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'from', type: 'address' }, + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'from', type: 'address' }, + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + { internalType: 'bytes', name: '_data', type: 'bytes' }, + ], + name: 'safeTransferFrom', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'operator', type: 'address' }, + { internalType: 'bool', name: 'approved', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [{ internalType: 'bytes4', name: 'interfaceId', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'symbol', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'uint256', name: 'tokenId', type: 'uint256' }], + name: 'tokenURI', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'from', type: 'address' }, + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, +] as const; +export const ERC721TokenBytecode = + '0x60806040523480156200001157600080fd5b506040518060400160405280600881526020017f47616d654974656d0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f49544d0000000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620000b8565b508060019080519060200190620000af929190620000b8565b505050620001cc565b828054620000c69062000197565b90600052602060002090601f016020900481019282620000ea576000855562000136565b82601f106200010557805160ff191683800117855562000136565b8280016001018555821562000136579182015b828111156200013557825182559160200191906001019062000118565b5b50905062000145919062000149565b5090565b5b80821115620001645760008160009055506001016200014a565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001b057607f821691505b602082108103620001c657620001c562000168565b5b50919050565b612bb680620001dc6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063b88d4fde11610066578063b88d4fde1461025b578063c87b56dd14610277578063cf378343146102a7578063e985e9c5146102d7576100ea565b806370a08231146101f157806395d89b4114610221578063a22cb4651461023f576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b6101096004803603810190610104919061191a565b610307565b6040516101169190611962565b60405180910390f35b6101276103e9565b6040516101349190611a16565b60405180910390f35b61015760048036038101906101529190611a6e565b61047b565b6040516101649190611adc565b60405180910390f35b61018760048036038101906101829190611b23565b610500565b005b6101a3600480360381019061019e9190611b63565b610617565b005b6101bf60048036038101906101ba9190611b63565b610677565b005b6101db60048036038101906101d69190611a6e565b610697565b6040516101e89190611adc565b60405180910390f35b61020b60048036038101906102069190611bb6565b610748565b6040516102189190611bf2565b60405180910390f35b6102296107ff565b6040516102369190611a16565b60405180910390f35b61025960048036038101906102549190611c39565b610891565b005b61027560048036038101906102709190611dae565b6108a7565b005b610291600480360381019061028c9190611a6e565b610909565b60405161029e9190611a16565b60405180910390f35b6102c160048036038101906102bc9190611ed2565b610a5a565b6040516102ce9190611bf2565b60405180910390f35b6102f160048036038101906102ec9190611f2e565b610a91565b6040516102fe9190611962565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103e257506103e182610b25565b5b9050919050565b6060600080546103f890611f9d565b80601f016020809104026020016040519081016040528092919081815260200182805461042490611f9d565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600061048682610b8f565b6104c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bc90612040565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061050b82610697565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361057b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610572906120d2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661059a610bfb565b73ffffffffffffffffffffffffffffffffffffffff1614806105c957506105c8816105c3610bfb565b610a91565b5b610608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ff90612164565b60405180910390fd5b6106128383610c03565b505050565b610628610622610bfb565b82610cbc565b610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065e906121f6565b60405180910390fd5b610672838383610d9a565b505050565b610692838383604051806020016040528060008152506108a7565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361073f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073690612288565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af9061231a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461080e90611f9d565b80601f016020809104026020016040519081016040528092919081815260200182805461083a90611f9d565b80156108875780601f1061085c57610100808354040283529160200191610887565b820191906000526020600020905b81548152906001019060200180831161086a57829003601f168201915b5050505050905090565b6108a361089c610bfb565b8383611000565b5050565b6108b86108b2610bfb565b83610cbc565b6108f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ee906121f6565b60405180910390fd5b6109038484848461116c565b50505050565b606061091482610b8f565b610953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094a906123ac565b60405180910390fd5b600060066000848152602001908152602001600020805461097390611f9d565b80601f016020809104026020016040519081016040528092919081815260200182805461099f90611f9d565b80156109ec5780601f106109c1576101008083540402835291602001916109ec565b820191906000526020600020905b8154815290600101906020018083116109cf57829003601f168201915b5050505050905060006109fd6111c8565b90506000815103610a12578192505050610a55565b600082511115610a47578082604051602001610a2f929190612408565b60405160208183030381529060405292505050610a55565b610a50846111df565b925050505b919050565b600080610a676007611286565b9050610a738482611294565b610a7d818461146d565b610a8760076114e1565b8091505092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610c7683610697565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610cc782610b8f565b610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd9061249e565b60405180910390fd5b6000610d1183610697565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610d535750610d528185610a91565b5b80610d9157508373ffffffffffffffffffffffffffffffffffffffff16610d798461047b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610dba82610697565b73ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790612530565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e76906125c2565b60405180910390fd5b610e8a8383836114f7565b610e95600082610c03565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ee59190612611565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f3c9190612645565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610ffb8383836114fc565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361106e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611065906126e7565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161115f9190611962565b60405180910390a3505050565b611177848484610d9a565b61118384848484611501565b6111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b990612779565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606111ea82610b8f565b611229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112209061280b565b60405180910390fd5b60006112336111c8565b90506000815111611253576040518060200160405280600081525061127e565b8061125d84611688565b60405160200161126e929190612408565b6040516020818303038152906040525b915050919050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90612877565b60405180910390fd5b61130c81610b8f565b1561134c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611343906128e3565b60405180910390fd5b611358600083836114f7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113a89190612645565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611469600083836114fc565b5050565b61147682610b8f565b6114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90612975565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906114dc92919061180b565b505050565b6001816000016000828254019250508190555050565b505050565b505050565b60006115228473ffffffffffffffffffffffffffffffffffffffff166117e8565b1561167b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261154b610bfb565b8786866040518563ffffffff1660e01b815260040161156d94939291906129ea565b6020604051808303816000875af19250505080156115a957506040513d601f19601f820116820180604052508101906115a69190612a4b565b60015b61162b573d80600081146115d9576040519150601f19603f3d011682016040523d82523d6000602084013e6115de565b606091505b506000815103611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a90612779565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611680565b600190505b949350505050565b6060600082036116cf576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506117e3565b600082905060005b600082146117015780806116ea90612a78565b915050600a826116fa9190612aef565b91506116d7565b60008167ffffffffffffffff81111561171d5761171c611c83565b5b6040519080825280601f01601f19166020018201604052801561174f5781602001600182028036833780820191505090505b5090505b600085146117dc576001826117689190612611565b9150600a856117779190612b20565b60306117839190612645565b60f81b81838151811061179957611798612b51565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856117d59190612aef565b9450611753565b8093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461181790611f9d565b90600052602060002090601f0160209004810192826118395760008555611880565b82601f1061185257805160ff1916838001178555611880565b82800160010185558215611880579182015b8281111561187f578251825591602001919060010190611864565b5b50905061188d9190611891565b5090565b5b808211156118aa576000816000905550600101611892565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6118f7816118c2565b811461190257600080fd5b50565b600081359050611914816118ee565b92915050565b6000602082840312156119305761192f6118b8565b5b600061193e84828501611905565b91505092915050565b60008115159050919050565b61195c81611947565b82525050565b60006020820190506119776000830184611953565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119b757808201518184015260208101905061199c565b838111156119c6576000848401525b50505050565b6000601f19601f8301169050919050565b60006119e88261197d565b6119f28185611988565b9350611a02818560208601611999565b611a0b816119cc565b840191505092915050565b60006020820190508181036000830152611a3081846119dd565b905092915050565b6000819050919050565b611a4b81611a38565b8114611a5657600080fd5b50565b600081359050611a6881611a42565b92915050565b600060208284031215611a8457611a836118b8565b5b6000611a9284828501611a59565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ac682611a9b565b9050919050565b611ad681611abb565b82525050565b6000602082019050611af16000830184611acd565b92915050565b611b0081611abb565b8114611b0b57600080fd5b50565b600081359050611b1d81611af7565b92915050565b60008060408385031215611b3a57611b396118b8565b5b6000611b4885828601611b0e565b9250506020611b5985828601611a59565b9150509250929050565b600080600060608486031215611b7c57611b7b6118b8565b5b6000611b8a86828701611b0e565b9350506020611b9b86828701611b0e565b9250506040611bac86828701611a59565b9150509250925092565b600060208284031215611bcc57611bcb6118b8565b5b6000611bda84828501611b0e565b91505092915050565b611bec81611a38565b82525050565b6000602082019050611c076000830184611be3565b92915050565b611c1681611947565b8114611c2157600080fd5b50565b600081359050611c3381611c0d565b92915050565b60008060408385031215611c5057611c4f6118b8565b5b6000611c5e85828601611b0e565b9250506020611c6f85828601611c24565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611cbb826119cc565b810181811067ffffffffffffffff82111715611cda57611cd9611c83565b5b80604052505050565b6000611ced6118ae565b9050611cf98282611cb2565b919050565b600067ffffffffffffffff821115611d1957611d18611c83565b5b611d22826119cc565b9050602081019050919050565b82818337600083830152505050565b6000611d51611d4c84611cfe565b611ce3565b905082815260208101848484011115611d6d57611d6c611c7e565b5b611d78848285611d2f565b509392505050565b600082601f830112611d9557611d94611c79565b5b8135611da5848260208601611d3e565b91505092915050565b60008060008060808587031215611dc857611dc76118b8565b5b6000611dd687828801611b0e565b9450506020611de787828801611b0e565b9350506040611df887828801611a59565b925050606085013567ffffffffffffffff811115611e1957611e186118bd565b5b611e2587828801611d80565b91505092959194509250565b600067ffffffffffffffff821115611e4c57611e4b611c83565b5b611e55826119cc565b9050602081019050919050565b6000611e75611e7084611e31565b611ce3565b905082815260208101848484011115611e9157611e90611c7e565b5b611e9c848285611d2f565b509392505050565b600082601f830112611eb957611eb8611c79565b5b8135611ec9848260208601611e62565b91505092915050565b60008060408385031215611ee957611ee86118b8565b5b6000611ef785828601611b0e565b925050602083013567ffffffffffffffff811115611f1857611f176118bd565b5b611f2485828601611ea4565b9150509250929050565b60008060408385031215611f4557611f446118b8565b5b6000611f5385828601611b0e565b9250506020611f6485828601611b0e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611fb557607f821691505b602082108103611fc857611fc7611f6e565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061202a602c83611988565b915061203582611fce565b604082019050919050565b600060208201905081810360008301526120598161201d565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006120bc602183611988565b91506120c782612060565b604082019050919050565b600060208201905081810360008301526120eb816120af565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061214e603883611988565b9150612159826120f2565b604082019050919050565b6000602082019050818103600083015261217d81612141565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006121e0603183611988565b91506121eb82612184565b604082019050919050565b6000602082019050818103600083015261220f816121d3565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612272602983611988565b915061227d82612216565b604082019050919050565b600060208201905081810360008301526122a181612265565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612304602a83611988565b915061230f826122a8565b604082019050919050565b60006020820190508181036000830152612333816122f7565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000612396603183611988565b91506123a18261233a565b604082019050919050565b600060208201905081810360008301526123c581612389565b9050919050565b600081905092915050565b60006123e28261197d565b6123ec81856123cc565b93506123fc818560208601611999565b80840191505092915050565b600061241482856123d7565b915061242082846123d7565b91508190509392505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612488602c83611988565b91506124938261242c565b604082019050919050565b600060208201905081810360008301526124b78161247b565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061251a602583611988565b9150612525826124be565b604082019050919050565b600060208201905081810360008301526125498161250d565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006125ac602483611988565b91506125b782612550565b604082019050919050565b600060208201905081810360008301526125db8161259f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061261c82611a38565b915061262783611a38565b92508282101561263a576126396125e2565b5b828203905092915050565b600061265082611a38565b915061265b83611a38565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126905761268f6125e2565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006126d1601983611988565b91506126dc8261269b565b602082019050919050565b60006020820190508181036000830152612700816126c4565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000612763603283611988565b915061276e82612707565b604082019050919050565b6000602082019050818103600083015261279281612756565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006127f5602f83611988565b915061280082612799565b604082019050919050565b60006020820190508181036000830152612824816127e8565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000612861602083611988565b915061286c8261282b565b602082019050919050565b6000602082019050818103600083015261289081612854565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006128cd601c83611988565b91506128d882612897565b602082019050919050565b600060208201905081810360008301526128fc816128c0565b9050919050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b600061295f602e83611988565b915061296a82612903565b604082019050919050565b6000602082019050818103600083015261298e81612952565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006129bc82612995565b6129c681856129a0565b93506129d6818560208601611999565b6129df816119cc565b840191505092915050565b60006080820190506129ff6000830187611acd565b612a0c6020830186611acd565b612a196040830185611be3565b8181036060830152612a2b81846129b1565b905095945050505050565b600081519050612a45816118ee565b92915050565b600060208284031215612a6157612a606118b8565b5b6000612a6f84828501612a36565b91505092915050565b6000612a8382611a38565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ab557612ab46125e2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612afa82611a38565b9150612b0583611a38565b925082612b1557612b14612ac0565b5b828204905092915050565b6000612b2b82611a38565b9150612b3683611a38565b925082612b4657612b45612ac0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212201d5bf152bd3c08a2f94fc5923da9ecbb5197e3afa514c296a8686031f251632764736f6c634300080d0033'; diff --git a/packages/web3/test/shared_fixtures/data.ts b/packages/web3/test/shared_fixtures/data.ts new file mode 100644 index 00000000000..20f19bd5e80 --- /dev/null +++ b/packages/web3/test/shared_fixtures/data.ts @@ -0,0 +1,37 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { encodeParameters } from 'web3-eth-abi'; + +export const validEncodeParametersData: { + input: Parameters; + output: ReturnType; +}[] = [ + { + input: [ + ['uint256', 'string'], + ['2345675643', 'Hello!%'], + ], + output: '0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000', + }, + { + input: [ + ['uint', 'tuple(uint256, string)'], + [1234, [5678, 'Hello World']], + ], + output: '', + }, +]; diff --git a/packages/web3/test/shared_fixtures/system_tests_utils.ts b/packages/web3/test/shared_fixtures/system_tests_utils.ts new file mode 120000 index 00000000000..2ab08a83752 --- /dev/null +++ b/packages/web3/test/shared_fixtures/system_tests_utils.ts @@ -0,0 +1 @@ +../../../../scripts/system_tests_utils.ts \ No newline at end of file diff --git a/packages/web3/test/shared_fixtures/utils.ts b/packages/web3/test/shared_fixtures/utils.ts new file mode 120000 index 00000000000..e928d1c9917 --- /dev/null +++ b/packages/web3/test/shared_fixtures/utils.ts @@ -0,0 +1 @@ +../../../../fixtures/utils.ts \ No newline at end of file diff --git a/packages/web3/test/tsconfig.json b/packages/web3/test/tsconfig.json new file mode 120000 index 00000000000..d60693467ab --- /dev/null +++ b/packages/web3/test/tsconfig.json @@ -0,0 +1 @@ +../../../config/test/tsconfig.json \ No newline at end of file diff --git a/packages/web3/test/unit/accounts.test.ts b/packages/web3/test/unit/accounts.test.ts new file mode 100644 index 00000000000..9cc2618d24b --- /dev/null +++ b/packages/web3/test/unit/accounts.test.ts @@ -0,0 +1,96 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import * as eth from 'web3-eth'; +import * as ethAccounts from 'web3-eth-accounts'; +import { SignTransactionResult, Web3Account } from 'web3-eth-accounts'; +import { Web3EthInterface } from '../../src/types'; +import { Web3 } from '../../src'; + +jest.mock('web3-eth-accounts'); +jest.mock('web3-eth'); + +describe('test new Web3().eth.accounts', () => { + let accounts: Web3EthInterface['accounts']; + + beforeAll(() => { + const web3 = new Web3(); + accounts = web3.eth.accounts; + }); + + beforeEach(() => { + jest.spyOn(eth, 'prepareTransactionForSigning').mockReturnValue({} as Promise); + jest.spyOn(ethAccounts, 'signTransaction').mockReturnValue( + undefined as unknown as Promise, + ); + }); + afterEach(() => { + jest.clearAllMocks(); + }); + + it('`signTransaction` should call the original `prepareTransactionForSigning` and `signTransaction`', async () => { + await accounts.signTransaction({}, ''); + + expect(eth.prepareTransactionForSigning).toHaveBeenCalledTimes(1); + expect(ethAccounts.signTransaction).toHaveBeenCalledTimes(1); + }); + + it('`privateKeyToAccount` should call the original `privateKeyToAccount` and add `signTransaction`', async () => { + jest.spyOn(ethAccounts, 'privateKeyToAccount').mockReturnValue({ + privateKey: '', + } as unknown as Web3Account); + + const account = accounts.privateKeyToAccount(''); + expect(ethAccounts.privateKeyToAccount).toHaveBeenCalledTimes(1); + + await account.signTransaction({}); + + expect(eth.prepareTransactionForSigning).toHaveBeenCalledTimes(1); + expect(ethAccounts.signTransaction).toHaveBeenCalledTimes(1); + }); + + it('`decrypt` should call the original `decrypt` and add `signTransaction`', async () => { + jest.spyOn(ethAccounts, 'decrypt').mockReturnValue({ + privateKey: '', + } as unknown as Promise); + + await accounts.decrypt('', '', { nonStrict: false }); + expect(ethAccounts.decrypt).toHaveBeenCalledWith('', '', false); + + const account = await accounts.decrypt('', ''); + expect(ethAccounts.decrypt).toHaveBeenCalledWith('', '', true); + + await account.signTransaction({}); + + expect(eth.prepareTransactionForSigning).toHaveBeenCalledTimes(1); + expect(ethAccounts.signTransaction).toHaveBeenCalledTimes(1); + }); + + it('`create` should call the original `create` and add `signTransaction`', async () => { + jest.spyOn(ethAccounts, 'create').mockReturnValue({ + privateKey: '', + } as unknown as Web3Account); + const account = accounts.create(); + + expect(ethAccounts.create).toHaveBeenCalledTimes(1); + + await account.signTransaction({}); + + expect(eth.prepareTransactionForSigning).toHaveBeenCalledTimes(1); + expect(ethAccounts.signTransaction).toHaveBeenCalledTimes(1); + }); +}); diff --git a/packages/web3/test/unit/constructor.test.ts b/packages/web3/test/unit/constructor.test.ts new file mode 100644 index 00000000000..5d08d50bebc --- /dev/null +++ b/packages/web3/test/unit/constructor.test.ts @@ -0,0 +1,37 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// import Web3ProviderBase from '../../src/index' +// import {ProviderOptions} from '../../types' + +describe('constructs a PLACEHOLDER instance with expected properties', () => { + // let providerOptions: ProviderOptions + + beforeEach(() => { + // providerOptions = { + // providerUrl: 'http://127.0.0.1:8545' + // } + }); + + it('should construct with expected properties', () => { + // const web3ProviderBase = new Web3ProviderBase(providerOptions) + // expect(web3ProviderBase).toMatchObject({ + // _providerUrl: providerOptions.providerUrl + // }) + expect(true).toBeTruthy(); + }); +}); diff --git a/packages/web3/test/unit/index.test.ts b/packages/web3/test/unit/index.test.ts new file mode 100644 index 00000000000..be402a68166 --- /dev/null +++ b/packages/web3/test/unit/index.test.ts @@ -0,0 +1,63 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Eth } from 'web3-eth'; + +import * as abi from 'web3-eth-abi'; +import * as accounts from 'web3-eth-accounts'; +import * as contract from 'web3-eth-contract'; +import * as ens from 'web3-eth-ens'; +import * as personal from 'web3-eth-personal'; +import * as iban from 'web3-eth-iban'; + +import * as http from 'web3-providers-http'; +import * as ws from 'web3-providers-ws'; + +import Web3Default, { Web3, providers, eth } from '../../src/index'; + +describe('exports of web3 package', () => { + describe('eth exports', () => { + it('`Web3` is the default exported class', () => { + expect(Web3).toEqual(Web3Default); + }); + + it('`Web3Eth` is available under `eth`', () => { + expect(eth.Web3Eth).toEqual(Web3Eth); + }); + + it('eth sub-namespaces are available under `eth`', () => { + expect(eth.abi).toEqual(abi); + expect(eth.accounts).toEqual(accounts); + expect(eth.contract).toEqual(contract); + expect(eth.ens).toEqual(ens); + expect(eth.personal).toEqual(personal); + expect(eth.iban).toEqual(iban); + }); + }); + + describe('providers exports', () => { + it('providers main objects are available under `providers`', () => { + expect(providers.Eip1193Provider).toBeTruthy(); + expect(providers.SocketProvider).toBeTruthy(); + }); + + it('providers sub-namespaces are available under `providers`', () => { + expect(providers.http).toEqual(http); + expect(providers.ws).toEqual(ws); + }); + }); +}); diff --git a/packages/web3/test/unit/jest.config.js b/packages/web3/test/unit/jest.config.js new file mode 100644 index 00000000000..36386477f13 --- /dev/null +++ b/packages/web3/test/unit/jest.config.js @@ -0,0 +1,18 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '../../.coverage/unit', + collectCoverageFrom: ['src/**'], + collectCoverage: true, + coverageReporters: [ + [ + 'json', + { + file: 'web3-unit-coverage.json', + }, + ], + ], +}; diff --git a/packages/web3/test/unit/version.test.ts b/packages/web3/test/unit/version.test.ts new file mode 100644 index 00000000000..dbbd1723b9f --- /dev/null +++ b/packages/web3/test/unit/version.test.ts @@ -0,0 +1,25 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3PkgInfo } from '../../src/version'; +import packageFile from '../../package.json'; + +describe('web3 package info', () => { + it('should Web3PkgInfo.version returns the same version set at package.json', () => { + expect(packageFile.version).toEqual(Web3PkgInfo.version); + }); +}); diff --git a/packages/web3/test/unit/web3-custom-subscriptions.test.ts b/packages/web3/test/unit/web3-custom-subscriptions.test.ts new file mode 100644 index 00000000000..9da93f35504 --- /dev/null +++ b/packages/web3/test/unit/web3-custom-subscriptions.test.ts @@ -0,0 +1,98 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Subscription, Web3SubscriptionManager } from 'web3-core'; +import { Web3 } from '../../src/web3'; + +class CustomSubscription extends Web3Subscription< + { + data: string; + }, + { + readonly customArgs?: string; + } +> { + protected _buildSubscriptionParams() { + return ['someCustomSubscription', this.args]; + } + + public get subscriptionManager() { + return super.subscriptionManager; + } +} + +const CustomSub = { + custom: CustomSubscription, +}; + +describe('Web3 Custom Subscriptions', () => { + let web3: Web3<{ custom: typeof CustomSubscription }>; + beforeAll(() => { + web3 = new Web3({ + registeredSubscriptions: CustomSub, + }); + }); + + it('should be able to define and subscribe to custom subscription', async () => { + const args = { + customArgs: 'hello custom', + }; + const exec = new Promise((resolve, reject) => { + const provider = { + send: jest.fn().mockImplementation((obj: unknown) => { + expect(obj).toMatchObject({ + id: expect.stringMatching( + // match a Guid: + /[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}/i, + ), + jsonrpc: '2.0', + method: 'eth_subscribe', + params: ['someCustomSubscription', args], + }); + resolve(true); + }), + supportsSubscriptions: () => { + return true; + }, + }; + + try { + web3.provider = provider; + + // eslint-disable-next-line no-void + void web3.subscriptionManager.subscribe('custom', args); + } catch (error) { + reject(error); + } + }); + await expect(exec).resolves.toBe(true); + }); + + it('should access subscriptionManager from derived class', async () => { + const sub = new CustomSubscription( + { customArgs: undefined }, + { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + subscriptionManager: web3.subscriptionManager as Web3SubscriptionManager< + unknown, + any + >, + }, + ); + expect(web3.subscriptionManager).toBe(sub.subscriptionManager); + }); +}); diff --git a/packages/web3/test/unit/web3.extend.test.ts b/packages/web3/test/unit/web3.extend.test.ts new file mode 100644 index 00000000000..4847cf0d898 --- /dev/null +++ b/packages/web3/test/unit/web3.extend.test.ts @@ -0,0 +1,104 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Address, BlockTag } from 'web3-types'; +import { Web3 } from '../../src/web3'; + +declare module 'web3' { + interface Web3Context { + // for first test like web3.myModule.getL2Balance(...) + myModule: { + getBalance(address: Address, blockTag: BlockTag): Promise; + getL2Balance(address: Address, blockTag: BlockTag): Promise; + }; + + // for second test, if user want to define these method types on web3 obj like web3.getBalance(...) + getBalance(address: Address, blockTag: BlockTag): Promise; + getL2Balance(address: Address, blockTag: BlockTag): Promise; + } +} + +describe('Web3 extend tests', () => { + it('web3 extend should send correct rpc call', async () => { + const web3 = new Web3('http://127.0.0.1:7545'); + + const requestManagerSendSpy = jest.fn(); + web3.requestManager.send = requestManagerSendSpy; + + web3.extend({ + property: 'myModule', + methods: [ + { + name: 'getBalance', + call: 'eth_getBalance', + }, + { + name: 'getL2Balance', + call: 'eth_getBalance', + }, + ], + }); + + await web3.myModule.getBalance('0x5b43746580AAF00A69019fA59D9ed7d9c85dDd70', 'latest'); + + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getBalance', + params: ['0x5b43746580AAF00A69019fA59D9ed7d9c85dDd70', 'latest'], + }); + + await web3.myModule.getL2Balance('0x5b43746580AAF00A69019fA59D9ed7d9c85dDd70', 'latest'); + + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getBalance', + params: ['0x5b43746580AAF00A69019fA59D9ed7d9c85dDd70', 'latest'], + }); + }); + + it('web3 extend should send correct rpc call without property field defined', async () => { + const web3 = new Web3('http://127.0.0.1:7545'); + + const requestManagerSendSpy = jest.fn(); + web3.requestManager.send = requestManagerSendSpy; + + web3.extend({ + methods: [ + { + name: 'getBalance', + call: 'eth_getBalance', + }, + { + name: 'getL2Balance', + call: 'eth_getBalance', + }, + ], + }); + + await web3.getBalance('0x5b43746580AAF00A69019fA59D9ed7d9c85dDd70', 'latest'); + + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getBalance', + params: ['0x5b43746580AAF00A69019fA59D9ed7d9c85dDd70', 'latest'], + }); + + await web3.getL2Balance('0x5b43746580AAF00A69019fA59D9ed7d9c85dDd70', 'latest'); + + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_getBalance', + params: ['0x5b43746580AAF00A69019fA59D9ed7d9c85dDd70', 'latest'], + }); + }); +}); diff --git a/packages/web3/test/unit/web3.test.ts b/packages/web3/test/unit/web3.test.ts new file mode 100644 index 00000000000..3d520f38e36 --- /dev/null +++ b/packages/web3/test/unit/web3.test.ts @@ -0,0 +1,98 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Contract } from 'web3-eth-contract'; +import { ContractInitOptions } from 'web3-types'; +import { Web3 } from '../../src/web3'; + +describe('Web3 object', () => { + it('should be able to set and read web3 providers', () => { + const web3NoProvider = new Web3(); + expect(web3NoProvider).toBeTruthy(); + expect(web3NoProvider.provider).toBeUndefined(); + + const web3 = new Web3('http://somenode'); + expect(web3).toBeTruthy(); + expect(web3.provider).toEqual({ + clientUrl: 'http://somenode', + httpProviderOptions: undefined, + }); + }); + describe('creating a Contract object with the constructor at Web3 -> eth.Contract', () => { + const Web3Contract = new Web3().eth.Contract; + const abi = [{ name: 'any', type: 'function' }]; + const address = '0x0000000000000000000000000000000000000000'; + const options = { gas: '100' }; + + it('should work when `address`=`undefined` and `options`=`undefined`', () => { + const contract1 = new Web3Contract(abi, undefined, undefined); + expect(contract1).toBeInstanceOf(Contract); + expect(contract1.options.address).toBeUndefined(); + expect(contract1.options.gas).toBeUndefined(); + }); + it('should accept when not passing `address` or `options`', () => { + const contract2 = new Web3Contract(abi); + expect(contract2).toBeInstanceOf(Contract); + expect(contract2.options.address).toBeUndefined(); + expect(contract2.options.gas).toBeUndefined(); + }); + it('should work when `address`=`undefined` and `options` is an object', () => { + const contract3 = new Web3Contract(abi, undefined, options); + expect(contract3).toBeInstanceOf(Contract); + expect(contract3.options.address).toBeUndefined(); + expect(contract3.options.gas).toEqual(options.gas); + }); + it('should work when `address` is an empty string and `options` is an object', () => { + const contract4 = new Web3Contract(abi, '', options); + expect(contract4).toBeInstanceOf(Contract); + expect(contract4.options.address).toBe(''); + expect(contract4.options.gas).toEqual(options.gas); + }); + it('should work when `address` is a string and `options` is not passed', () => { + const contract5 = new Web3Contract(abi, address); + expect(contract5).toBeInstanceOf(Contract); + expect(contract5.options.address).toEqual(address); + expect(contract5.options.gas).toBeUndefined(); + }); + it('should work when second parameter is an `options` object', () => { + const contract6 = new Web3Contract(abi, options); + expect(contract6).toBeInstanceOf(Contract); + expect(contract6.options.address).toBeUndefined(); + expect(contract6.options.gas).toEqual(options.gas); + }); + it('should work when `address` is a string and `options` is an object', () => { + const contract7 = new Web3Contract(abi, address, options); + expect(contract7).toBeInstanceOf(Contract); + expect(contract7.options.address).toEqual(address); + expect(contract7.options.gas).toEqual(options.gas); + }); + it('should throw if the second and the third parameters are both options', () => { + expect(() => { + // eslint-disable-next-line no-new + new Web3Contract(abi, options as unknown as string, options); + }).toThrow(); + }); + it('should throw if `options` is a function', () => { + expect(() => { + // eslint-disable-next-line no-new + new Web3Contract(abi, (() => { + /* nothing */ + }) as ContractInitOptions); + }).toThrow(); + }); + }); +}); diff --git a/packages/web3/tsconfig.cjs.json b/packages/web3/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3/tsconfig.esm.json b/packages/web3/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3/tsconfig.json b/packages/web3/tsconfig.json deleted file mode 100644 index 06cc6c15b8c..00000000000 --- a/packages/web3/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "./lib" - }, - "include": [ - "./src" - ] - } \ No newline at end of file diff --git a/packages/web3/tsconfig.types.json b/packages/web3/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3/tsdoc.json b/packages/web3/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/web3/types/index.d.ts b/packages/web3/types/index.d.ts deleted file mode 100644 index 555e7762aa4..00000000000 --- a/packages/web3/types/index.d.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.d.ts - * @author Josh Stevens , Samuel Furter - * @date 2018 - */ - -import * as net from 'net'; -import { Bzz } from 'web3-bzz'; -import { BatchRequest, provider, Providers, Extension } from 'web3-core'; -import { Eth } from 'web3-eth'; -import { Personal } from 'web3-eth-personal'; -import { Network } from 'web3-net'; -import { Shh } from 'web3-shh'; -import { Utils } from 'web3-utils'; - -export default class Web3 { - constructor(); - constructor(provider: provider); - constructor(provider: provider, net: net.Socket); - - static modules: Modules; - readonly givenProvider: any; - static readonly givenProvider: any; - defaultAccount: string | null; - defaultBlock: string | number; - readonly currentProvider: provider; - setProvider(provider: provider): boolean; - BatchRequest: new () => BatchRequest; - static readonly providers: Providers; - - utils: Utils; - eth: Eth; - shh: Shh; - bzz: Bzz; - version: string; - static readonly version: string; - static readonly utils: Utils; - extend(extension: Extension): any; -} - -export interface Modules { - Eth: new (provider: provider, net: net.Socket) => Eth; - Net: new (provider: provider, net: net.Socket) => Network; - Personal: new (provider: provider, net: net.Socket) => Personal; - Shh: new (provider: provider, net: net.Socket) => Shh; - Bzz: new (provider: provider) => Bzz; -} diff --git a/packages/web3/types/tests/web3-test.ts b/packages/web3/types/tests/web3-test.ts deleted file mode 100644 index fe55c20597d..00000000000 --- a/packages/web3/types/tests/web3-test.ts +++ /dev/null @@ -1,112 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file web3-test.ts - * @author Josh Stevens , Samuel Furter - * @date 2018 - */ - -import Web3 from 'web3'; -import * as net from 'net'; -import { AbstractProvider, RequestArguments } from 'web3-core'; -import { JsonRpcPayload, JsonRpcResponse } from 'web3-core-helpers'; - -// $ExpectType Utils -Web3.utils; - -// $ExpectType string -Web3.version; - -// $ExpectType Modules -Web3.modules; - -// $ExpectType Providers -Web3.providers; - -// $ExpectType any -Web3.givenProvider; - -// $ExpectType Web3 -const web3_empty = new Web3(); - -// $ExpectType Web3 -let web3 = new Web3('https://localhost:5000/'); - -// $ExpectType provider -web3.currentProvider; - -// $ExpectType any -web3.extend({property: 'test', methods: [{name: 'method', call: 'method'}]}); - -// $ExpectType any -web3.givenProvider; - -// $ExpectType string | null -web3.defaultAccount; - -// $ExpectType string | number -web3.defaultBlock; - -// $ExpectType boolean -web3.setProvider('https://localhost:2100'); - -// $ExpectType BatchRequest -new web3.BatchRequest(); - -// $ExpectType Utils -web3.utils; - -// $ExpectType string -web3.version; - -// $ExpectType Eth -web3.eth; - -// $ExpectType Shh -web3.shh; - -// $ExpectType Bzz -web3.bzz; - -// $ExpectType Socket -const netSocket = new net.Socket(); - -// $ExpectType Web3 -web3 = new Web3('https://localhost:5000/', netSocket); - -// $ExpectType Web3 -web3 = new Web3(); - -class CustomProvider1 implements AbstractProvider { - sendAsync(payload: JsonRpcPayload, callback: (error: Error | null, result?: JsonRpcResponse) => void) {} -} - -// $ExpectType Web3 -web3 = new Web3(new CustomProvider1()); - -class CustomProvider2 implements AbstractProvider { - send(payload: JsonRpcPayload, callback: (error: Error | null, result?: JsonRpcResponse) => void) {} - sendAsync(payload: JsonRpcPayload, callback: (error: Error | null, result?: JsonRpcResponse) => void) {} -} - -// $ExpectType Web3 -web3 = new Web3(new CustomProvider2()); - -class CustomProvider3 implements AbstractProvider { - async request(args: RequestArguments) {} - sendAsync(payload: JsonRpcPayload, callback: (error: Error | null, result?: JsonRpcResponse) => void) {} -} - -// $ExpectType Web3 -web3 = new Web3(new CustomProvider3()); diff --git a/packages/web3/types/tsconfig.json b/packages/web3/types/tsconfig.json deleted file mode 100644 index b82402012fa..00000000000 --- a/packages/web3/types/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": ["es6"], - "target": "es6", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "noEmit": true, - "allowSyntheticDefaultImports": false, - "baseUrl": ".", - "paths": { - "web3": ["."] - } - } -} diff --git a/packages/web3/types/tslint.json b/packages/web3/types/tslint.json deleted file mode 100644 index 871d605704b..00000000000 --- a/packages/web3/types/tslint.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "dtslint/dtslint.json", - "rules": { - "semicolon": false, - "no-import-default-of-export-equals": false, - "file-name-casing": [true, "kebab-case"], - "whitespace": false, - "no-unnecessary-class": false, - "unified-signatures": false - } -} diff --git a/packages/web3/webpack.analyze.js b/packages/web3/webpack.analyze.js new file mode 100644 index 00000000000..24d91808c6f --- /dev/null +++ b/packages/web3/webpack.analyze.js @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +const { getWebPackConfig } = require('../../webpack.base.config'); + +const config = getWebPackConfig( + __dirname, + 'web3.min.js', + 'Web3', + 'src/web3.ts', + 'tsconfig.cjs.json', +); +const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); + +module.exports = { + ...config, + plugins: [ + ...config.plugins, + new BundleAnalyzerPlugin({ + generateStatsFile: true, + statsFilename: process.env.STATS_FILE ?? 'stats.json', + defaultSizes: process.env.ANALYZE_SERVER ? 'stat' : 'gzip', + analyzerMode: process.env.ANALYZE_SERVER ? 'server' : 'json', + }), + ], +}; diff --git a/packages/web3/webpack.config.js b/packages/web3/webpack.config.js new file mode 100644 index 00000000000..b2b1ae8050b --- /dev/null +++ b/packages/web3/webpack.config.js @@ -0,0 +1,26 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +const { getWebPackConfig } = require('../../webpack.base.config'); + +module.exports = getWebPackConfig( + __dirname, + 'web3.min.js', + 'Web3', + 'src/web3.ts', + 'tsconfig.cjs.json', +); diff --git a/scripts/accounts.json b/scripts/accounts.json new file mode 100644 index 00000000000..2acfbfdd702 --- /dev/null +++ b/scripts/accounts.json @@ -0,0 +1,82 @@ +[ + { + "address": "0xe2597eb05cf9a87eb1309e86750c903ec38e527e", + "privateKey": "0x1f953dc9b6437fb94fcafa5dabe3faa0c34315b954dd66f41bf53273339c6d26" + }, + { + "address": "0x7ed0e85b8e1e925600b4373e6d108f34ab38a401", + "privateKey": "0x31d1742901ee5635260a672684540cc9d165a5c1ad8b8777468fe842f04c0a79" + }, + { + "address": "0xe4beef667408b99053dc147ed19592ada0d77f59", + "privateKey": "0xb45b02f408a0dd0996aab2b55a54f4ed7735f82b133c0786a9ff372ffaaf11bd" + }, + { + "address": "0x7ab80aeb6bb488b7f6c41c58e83ef248eb39c882", + "privateKey": "0xfbb99648a0be014a2334c7fc38f50898d7058e8e2478ef532cbaefa96ecedad0" + }, + { + "address": "0x12b1d9d74d73b1c3a245b19c1c5501c653af1af9", + "privateKey": "0x17668bbc76c60f0a703a6d1a1db7bd420e4cea4d36b3b9f652d4888676a2e9a9" + }, + { + "address": "0x1a6075a263ee140e00dbf8e374fc5a443d097894", + "privateKey": "0xceb7bf56521381180d988809c5e3e1fdba56b813d3f0112d55e83b103d733f9b" + }, + { + "address": "0x4fec0a51024b13030d26e70904b066c6d41157a5", + "privateKey": "0x2ec2d297af7a6150fafb91f65c1b458fe04116a1192fa4af16b595305e1f1ec5" + }, + { + "address": "0x03095dc4857bb26f3a4550c5651df8b7f6b6b1ef", + "privateKey": "0x7cb9148b39f9138760d9a79db5f69957adab062a6773f874f76e374e835ec448" + }, + { + "address": "0xac0b9b6e8a17991cb172b2abaf45fb5eb769e540", + "privateKey": "0xd175db54516beb96490015e593373e2b8c0e5791a50c6f5b343d6c1cf59879b6" + }, + { + "address": "0xec7e2fca825bafcbfdb94ff6fbfd9579cde7f01c", + "privateKey": "0x603aff3be98b343dddfea6b420b455e557bb0301acf67533928a2e2fdbc5d856" + }, + { + "address": "0x75dd0faa3b5db63b4e122b659f3e92fd7984029d", + "privateKey": "0xdf1c4c98fd785976d924baccf1041af5bbfb372070b917a4e84b06bfc08a8ab8" + }, + { + "address": "0x40d00abacfbfb7e2a1d86bb6cc88a649ec7146ac", + "privateKey": "0xa0b69a60e0f15e552940de907ed8a909ed827d263590f9a28fa8d61c2d5f3701" + }, + { + "address": "0xf1e4df637e764eb7bd9b9f2aab391cc757b875a0", + "privateKey": "0x2afb1070b72c0820388fd3d4c256bc28a85915f2f4e46d2a2297a3757dd40669" + }, + { + "address": "0x27aa427c1d668ddefd7bc93f8857e7599ffd16ab", + "privateKey": "0xbeeacc5793ed0e39e595d4a293f570c3556bd1e99f79dbe6597d306bc7bebfec" + }, + { + "address": "0xc8fae455deaf7cd62c3eb57cccd544eb3009ce07", + "privateKey": "0xf8f27d1f4ea727918421e2e68ac86f10e980e91c093a5840bf2ea2ab9691e8cc" + }, + { + "address": "0x9c5015fc062fd3adee0ff4dd850149d28f0bca2e", + "privateKey": "0xda09a5a43d1a8d163f74d2ebe2f866f32669146de4026abf21081d51065a11d7" + }, + { + "address": "0xce27b0f1e86863a0d547ba375823368da3975e8d", + "privateKey": "0x41447c0edaafc196646a1b7111b826eef793949cbbe901be1b8d6bceaacfdf40" + }, + { + "address": "0x2d085f612100e857c415ea6b4279aea20ed16155", + "privateKey": "0x79a83cdd069299dec19e143039cca634190c12d4171359c3379b6e4eb25b2d5f" + }, + { + "address": "0x58422b64d0e95ab4e93a9d95b755d9b53545c9ef", + "privateKey": "0x0239a110b68e6ffd2f5a1736e431d55bc1ffb2ec399264b3642eccccda892ebe" + }, + { + "address": "0x0d4aa485ecbc499c70860feb7e5aaeaf5fd8172e", + "privateKey": "0x2013f1178ac26e6ce1e098bac5fde47fce97ebf237d0b2738107551a2e3c1ab3" + } +] diff --git a/scripts/changelog/src/add_changelog_entry.ts b/scripts/changelog/src/add_changelog_entry.ts new file mode 100644 index 00000000000..4c5b32a4369 --- /dev/null +++ b/scripts/changelog/src/add_changelog_entry.ts @@ -0,0 +1,69 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { readFileSync, writeFileSync } from 'fs'; + +// eslint-disable-next-line import/no-cycle +import { ChangelogConfig, DEFAULT_CHANGELOG_CONFIG } from './types'; +import { getPackageGroupedUnreleasedEntries, getUnreleasedSection } from './sync'; + +export const addChangelogEntry = (commandName: string, args: string[]) => { + let CHANGELOG_CONFIG: ChangelogConfig; + if (args?.[0] !== undefined && args[0].endsWith('.json')) { + CHANGELOG_CONFIG = JSON.parse(readFileSync(args[0], 'utf8')) as ChangelogConfig; + args.shift(); + } else { + CHANGELOG_CONFIG = DEFAULT_CHANGELOG_CONFIG; + } + + const [packageName, changelogEntry] = args; + const parsedChangelog = readFileSync( + `${CHANGELOG_CONFIG.packagesDirectoryPath}/${packageName}/${CHANGELOG_CONFIG.packagesChangelogPath}`, + 'utf8', + ).split(/\n/); + const groupedUnreleasedEntries = getPackageGroupedUnreleasedEntries( + getUnreleasedSection(parsedChangelog), + ); + const formattedCommandName = `### ${ + commandName.charAt(0).toUpperCase() + commandName.slice(1) + }`; + const formattedChangelogEntry = `- ${changelogEntry}`; + + if (groupedUnreleasedEntries[formattedCommandName] !== undefined) { + groupedUnreleasedEntries[formattedCommandName].push(formattedChangelogEntry); + } else { + groupedUnreleasedEntries[formattedCommandName] = [formattedChangelogEntry]; + } + + const flattenedModifiedUnreleasedEntries: string[] = []; + for (const entryHeader of Object.keys(groupedUnreleasedEntries)) { + const entries = groupedUnreleasedEntries[entryHeader]; + flattenedModifiedUnreleasedEntries.push(entryHeader); + flattenedModifiedUnreleasedEntries.push(''); + for (const [index, entry] of entries.entries()) { + flattenedModifiedUnreleasedEntries.push(entry); + if (index + 1 === entries.length) flattenedModifiedUnreleasedEntries.push(''); + } + } + + // +2 is so the header, ## [Unreleased], and the newline after it don't get removed + parsedChangelog.splice(parsedChangelog.findIndex(item => item === '## [Unreleased]') + 2); + parsedChangelog.push(...flattenedModifiedUnreleasedEntries); + writeFileSync( + `${CHANGELOG_CONFIG.packagesDirectoryPath}/${packageName}/${CHANGELOG_CONFIG.packagesChangelogPath}`, + parsedChangelog.join('\n'), + ); +}; diff --git a/scripts/changelog/src/helpers.ts b/scripts/changelog/src/helpers.ts new file mode 100644 index 00000000000..b0ce1af0acf --- /dev/null +++ b/scripts/changelog/src/helpers.ts @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { readdirSync } from 'fs'; + +// eslint-disable-next-line import/no-cycle +import { Command, getCommands } from './types'; + +export const parseArgs = (commands: Command[] = getCommands()): unknown => { + const commandArg = process.argv[2]; + for (const command of commands) { + if (command.name === commandArg) { + return command.commandFunction(command.name, process.argv.slice(3)); + } + } + + // eslint-disable-next-line no-console + console.log('Invalid command, please refer to below table for expected commands:'); + // eslint-disable-next-line no-console + console.table(commands); + return undefined; +}; + +export const getListOfPackageNames = (packagesDirectory: string) => + readdirSync(packagesDirectory, { withFileTypes: true }) + .filter(dirent => dirent.isDirectory()) + .map(dirent => dirent.name); diff --git a/scripts/changelog/src/index.ts b/scripts/changelog/src/index.ts new file mode 100644 index 00000000000..b4e1caccb8a --- /dev/null +++ b/scripts/changelog/src/index.ts @@ -0,0 +1,20 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// eslint-disable-next-line import/no-cycle +import { parseArgs } from './helpers'; + +parseArgs(); diff --git a/scripts/changelog/src/sync.ts b/scripts/changelog/src/sync.ts new file mode 100644 index 00000000000..03f1b020bf8 --- /dev/null +++ b/scripts/changelog/src/sync.ts @@ -0,0 +1,184 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { readFileSync, writeFileSync } from 'fs'; + +// eslint-disable-next-line import/no-cycle +import { + ChangelogConfig, + DEFAULT_CHANGELOG_CONFIG, + ENTRY_SECTION_HEADERS, + GroupedUnreleasedEntries, +} from './types'; +// eslint-disable-next-line import/no-cycle +import { getListOfPackageNames } from './helpers'; + +export const getUnreleasedSection = (parsedChangelog: string[]) => { + const unreleasedSectionHeaderIndex = parsedChangelog.findIndex( + item => item === '## [Unreleased]', + ); + const unreleasedSection = parsedChangelog.slice(unreleasedSectionHeaderIndex); + return unreleasedSection; +}; + +const skipSection = (section: string, unreleasedSection: string[]): string[] => { + const index = unreleasedSection.indexOf(section); + if (index !== -1) { + const nextSectionIndex = unreleasedSection.findIndex( + (el, i) => el.startsWith('###') && i > index, + ); + if (nextSectionIndex !== -1) { + unreleasedSection.splice(index, nextSectionIndex - index); + } + } + return unreleasedSection; +}; + +export const getRootGroupedUnreleasedEntries = (unreleasedSection: string[]) => { + const groupedUnreleasedEntries: GroupedUnreleasedEntries = {}; + + let lastPackageHeaderIndex = 0; + let lastEntryHeaderIndex = 0; + // skip '### Breaking Changes' section from unreleasedSection array + // eslint-disable-next-line no-param-reassign + unreleasedSection = skipSection('### Breaking Changes', unreleasedSection); + + for (const [index, item] of unreleasedSection.entries()) { + // substring(4) removes "### " from entry headers (e.g. "### Changed" -> "Changed") + if (ENTRY_SECTION_HEADERS.includes(item.substring(4))) { + groupedUnreleasedEntries[unreleasedSection[index]] = {}; + lastEntryHeaderIndex = index; + } else if (item.startsWith('#### ')) { + groupedUnreleasedEntries[unreleasedSection[lastEntryHeaderIndex]][item] = []; + lastPackageHeaderIndex = index; + } else if (item.startsWith('-')) { + const entryHeader = unreleasedSection[lastEntryHeaderIndex]; + const packageHeader = unreleasedSection[lastPackageHeaderIndex]; + groupedUnreleasedEntries[entryHeader][packageHeader].push(item); + } + } + + return groupedUnreleasedEntries; +}; + +export const getPackageGroupedUnreleasedEntries = (unreleasedSection: string[]) => { + const groupedUnreleasedEntries: Record = {}; + + let lastEntryHeaderIndex = 0; + for (const [index, item] of unreleasedSection.entries()) { + // substring(4) removes "### " from entry headers (e.g. "### Changed" -> "Changed") + if (ENTRY_SECTION_HEADERS.includes(item.substring(4))) { + groupedUnreleasedEntries[item] = []; + lastEntryHeaderIndex = index; + } else if (item.startsWith('- ')) { + const entryHeader = unreleasedSection[lastEntryHeaderIndex]; + groupedUnreleasedEntries[entryHeader].push(item); + } + } + + return groupedUnreleasedEntries; +}; + +export const getSyncedGroupedUnreleasedEntries = ( + listOfPackageNames: string[], + changelogConfig: ChangelogConfig, + rootGroupedUnreleasedEntries: GroupedUnreleasedEntries, +) => { + const _rootGroupedUnreleasedEntries: GroupedUnreleasedEntries = rootGroupedUnreleasedEntries; + for (const packageName of listOfPackageNames) { + const parsedChangelog = readFileSync( + `${changelogConfig.packagesDirectoryPath}/${packageName}/${changelogConfig.packagesChangelogPath}`, + 'utf8', + ).split(/\n/); + const packageGroupedUnreleasedEntries = getPackageGroupedUnreleasedEntries( + getUnreleasedSection(parsedChangelog), + ); + + for (const entrySectionHeader of ENTRY_SECTION_HEADERS) { + const formattedEntrySectionHeader = `### ${entrySectionHeader}`; + const formattedPackageEntryHeader = `#### ${packageName}`; + + const packageEntrySection = + packageGroupedUnreleasedEntries[formattedEntrySectionHeader]; + if (packageEntrySection !== undefined) { + // PackageName has a formattedEntrySectionHeader listed in packageName/CHANGELOG.md + + if (_rootGroupedUnreleasedEntries[formattedEntrySectionHeader] === undefined) { + // Root CHANGELOG.md is missing formattedEntrySectionHeader + _rootGroupedUnreleasedEntries[formattedEntrySectionHeader] = {}; + } + + _rootGroupedUnreleasedEntries[formattedEntrySectionHeader][ + formattedPackageEntryHeader + ] = packageGroupedUnreleasedEntries[formattedEntrySectionHeader]; + } + } + } + + return _rootGroupedUnreleasedEntries; +}; + +export const flattenSyncedUnreleasedEntries = ( + syncedGroupedUnreleasedEntries: GroupedUnreleasedEntries, + listOfPackageNames: string[], +) => { + const flattenedSyncedUnreleasedEntries: string[] = []; + for (const key of Object.keys(syncedGroupedUnreleasedEntries)) { + const element = syncedGroupedUnreleasedEntries[key]; + flattenedSyncedUnreleasedEntries.push(key); + flattenedSyncedUnreleasedEntries.push(''); + for (const packageName of listOfPackageNames) { + const formattedPackageEntryHeader = `#### ${packageName}`; + const element2 = element[formattedPackageEntryHeader]; + if (element[formattedPackageEntryHeader] !== undefined) { + flattenedSyncedUnreleasedEntries.push(formattedPackageEntryHeader); + flattenedSyncedUnreleasedEntries.push(''); + flattenedSyncedUnreleasedEntries.push(...element2); + flattenedSyncedUnreleasedEntries.push(''); + } + } + } + + return flattenedSyncedUnreleasedEntries; +}; + +// @ts-expect-error 'commandName' is declared but its value is never read +export const syncChangelogs = (commandName: string, args?: string[]) => { + const CHANGELOG_CONFIG: ChangelogConfig = + args?.[0] !== undefined && args[0].endsWith('.json') + ? (JSON.parse(readFileSync(args[0], 'utf8')) as ChangelogConfig) + : DEFAULT_CHANGELOG_CONFIG; + const parsedRootChangelog = readFileSync(CHANGELOG_CONFIG.rootChangelogPath, 'utf8').split( + /\n/, + ); + const listOfPackageNames = getListOfPackageNames(CHANGELOG_CONFIG.packagesDirectoryPath); + const syncedGroupedUnreleasedEntries = getSyncedGroupedUnreleasedEntries( + listOfPackageNames, + CHANGELOG_CONFIG, + getRootGroupedUnreleasedEntries(getUnreleasedSection(parsedRootChangelog)), + ); + const flattenedSyncedUnreleasedEntries = flattenSyncedUnreleasedEntries( + syncedGroupedUnreleasedEntries, + listOfPackageNames, + ); + + // +2 is so the header, ## [Unreleased], and the newline after it don't get removed + parsedRootChangelog.splice( + parsedRootChangelog.findIndex(item => item === '## [Unreleased]') + 2, + ); + parsedRootChangelog.push(...flattenedSyncedUnreleasedEntries); + writeFileSync(CHANGELOG_CONFIG.rootChangelogPath, parsedRootChangelog.join('\n')); +}; diff --git a/scripts/changelog/src/types.ts b/scripts/changelog/src/types.ts new file mode 100644 index 00000000000..57c3f172876 --- /dev/null +++ b/scripts/changelog/src/types.ts @@ -0,0 +1,76 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// eslint-disable-next-line import/no-cycle +import { addChangelogEntry } from './add_changelog_entry'; +// eslint-disable-next-line import/no-cycle +import { syncChangelogs } from './sync'; + +export interface ChangelogConfig { + packagesDirectoryPath: string; + packagesChangelogPath: string; + rootChangelogPath: string; +} + +export interface Command { + name: string; + description: string; + arguments: string[]; + example: string; + commandFunction: (commandName: string, args: string[]) => unknown; +} + +export type GroupedUnreleasedEntries = Record>; + +export const DEFAULT_CHANGELOG_CONFIG = { + packagesDirectoryPath: './packages', + packagesChangelogPath: 'CHANGELOG.md', + rootChangelogPath: './CHANGELOG.md', +}; + +export const ENTRY_SECTION_HEADERS = [ + 'Added', + 'Changed', + 'Deprecated', + 'Removed', + 'Fixed', + 'Security', +]; + +export const getCommands = () => { + const commands: Command[] = []; + + commands.push({ + name: 'sync', + description: + 'Checks CHANGELOG.md for each package in ./packages/ for entries not included in root CHANGELOG.md', + arguments: [], + example: 'sync', + commandFunction: syncChangelogs, + }); + + for (const entrySectionHeader of ENTRY_SECTION_HEADERS) { + commands.push({ + name: entrySectionHeader.toLowerCase(), + description: `Adds changelogEntry to packageName's CHANGELOG.md under ${entrySectionHeader} header`, + arguments: ['packageName', 'changelogEntry'], + example: `yarn changelog ${entrySectionHeader.toLowerCase()} [packageName] [changelogEntry]`, + commandFunction: addChangelogEntry, + }); + } + + return commands; +}; diff --git a/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/CHANGELOG.md b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/CHANGELOG.md new file mode 100644 index 00000000000..40e0e4d3846 --- /dev/null +++ b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/CHANGELOG.md @@ -0,0 +1,192 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [0.1.0-alpha.0] + +### Added + +- I've added feature XY (#1000) + +### Changed + +- I've cleaned up XY (#1000) + +### Deprecated + +- I've deprecated XY (#1000) + +### Removed + +- I've removed XY (#1000) + +### Fixed + +- I've fixed XY (#1000) + +### Security + +- I've improved the security in XY (#1000) + +## [0.1.0-alpha.1] + +### Added + +- I've added feature XY (#1001) + +### Changed + +- I've cleaned up XY (#1001) + +### Deprecated + +- I've deprecated XY (#1001) + +### Removed + +- I've removed XY (#1001) + +### Fixed + +- I've fixed XY (#1001) + +### Security + +- I've improved the security in XY (#1001) + +## [0.1.0] + +### Added + +- I've added feature XY (#1002) + +### Changed + +- I've cleaned up XY (#1002) + +### Deprecated + +- I've deprecated XY (#1002) + +### Removed + +- I've removed XY (#1002) + +### Fixed + +- I've fixed XY (#1002) + +### Security + +- I've improved the security in XY (#1002) + +## [0.1.1] + +### Added + +- I've added feature XY (#1003) + +### Changed + +- I've cleaned up XY (#1003) + +### Deprecated + +- I've deprecated XY (#1003) + +### Removed + +- I've removed XY (#1003) + +### Fixed + +- I've fixed XY (#1003) + +### Security + +- I've improved the security in XY (#1003) + +## [1.0.0] + +### Added + +- I've added feature XY (#1004) + +### Changed + +- I've cleaned up XY (#1004) + +### Deprecated + +- I've deprecated XY (#1004) + +### Removed + +- I've removed XY (#1004) + +### Fixed + +- I've fixed XY (#1004) + +### Security + +- I've improved the security in XY (#1004) + +## [Unreleased] + +### Added + +- I've added feature XY (#1005) + +### Changed + +- I've cleaned up XY (#1005) + +### Deprecated + +- I've deprecated XY (#1005) + +### Removed + +- I've removed XY (#1005) + +### Fixed + +- I've fixed XY (#1005) + +### Security + +- I've improved the security in XY (#1005) diff --git a/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG.json b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG.json new file mode 100644 index 00000000000..b6f9ba8a2d9 --- /dev/null +++ b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG.json @@ -0,0 +1,196 @@ +[ + "# Changelog", + "", + "All notable changes to this project will be documented in this file.", + "", + "The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),", + "and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).", + "", + "", + "", + "## [0.1.0-alpha.0]", + "", + "### Added", + "", + "- I've added feature XY (#1000)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1000)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1000)", + "", + "### Removed", + "", + "- I've removed XY (#1000)", + "", + "### Fixed", + "", + "- I've fixed XY (#1000)", + "", + "### Security", + "", + "- I've improved the security in XY (#1000)", + "", + "## [0.1.0-alpha.1]", + "", + "### Added", + "", + "- I've added feature XY (#1001)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1001)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1001)", + "", + "### Removed", + "", + "- I've removed XY (#1001)", + "", + "### Fixed", + "", + "- I've fixed XY (#1001)", + "", + "### Security", + "", + "- I've improved the security in XY (#1001)", + "", + "## [0.1.0]", + "", + "### Added", + "", + "- I've added feature XY (#1002)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1002)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1002)", + "", + "### Removed", + "", + "- I've removed XY (#1002)", + "", + "### Fixed", + "", + "- I've fixed XY (#1002)", + "", + "### Security", + "", + "- I've improved the security in XY (#1002)", + "", + "## [0.1.1]", + "", + "### Added", + "", + "- I've added feature XY (#1003)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1003)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1003)", + "", + "### Removed", + "", + "- I've removed XY (#1003)", + "", + "### Fixed", + "", + "- I've fixed XY (#1003)", + "", + "### Security", + "", + "- I've improved the security in XY (#1003)", + "", + "## [1.0.0]", + "", + "### Added", + "", + "- I've added feature XY (#1004)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1004)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1004)", + "", + "### Removed", + "", + "- I've removed XY (#1004)", + "", + "### Fixed", + "", + "- I've fixed XY (#1004)", + "", + "### Security", + "", + "- I've improved the security in XY (#1004)", + "", + "## [Unreleased]", + "", + "### Added", + "", + "- I've added feature XY (#1005)", + "- Some new change (#42)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1005)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1005)", + "", + "### Removed", + "", + "- I've removed XY (#1005)", + "", + "### Fixed", + "", + "- I've fixed XY (#1005)", + "", + "### Security", + "", + "- I've improved the security in XY (#1005)", + "" +] diff --git a/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG_2.json b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG_2.json new file mode 100644 index 00000000000..540f24ac25e --- /dev/null +++ b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG_2.json @@ -0,0 +1,199 @@ +[ + "# Changelog", + "", + "All notable changes to this project will be documented in this file.", + "", + "The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),", + "and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).", + "", + "", + "", + "## [0.1.0-alpha.0]", + "", + "### Added", + "", + "- I've added feature XY (#1000)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1000)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1000)", + "", + "### Removed", + "", + "- I've removed XY (#1000)", + "", + "### Fixed", + "", + "- I've fixed XY (#1000)", + "", + "### Security", + "", + "- I've improved the security in XY (#1000)", + "", + "## [0.1.0-alpha.1]", + "", + "### Added", + "", + "- I've added feature XY (#1001)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1001)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1001)", + "", + "### Removed", + "", + "- I've removed XY (#1001)", + "", + "### Fixed", + "", + "- I've fixed XY (#1001)", + "", + "### Security", + "", + "- I've improved the security in XY (#1001)", + "", + "## [0.1.0]", + "", + "### Added", + "", + "- I've added feature XY (#1002)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1002)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1002)", + "", + "### Removed", + "", + "- I've removed XY (#1002)", + "", + "### Fixed", + "", + "- I've fixed XY (#1002)", + "", + "### Security", + "", + "- I've improved the security in XY (#1002)", + "", + "## [0.1.1]", + "", + "### Added", + "", + "- I've added feature XY (#1003)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1003)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1003)", + "", + "### Removed", + "", + "- I've removed XY (#1003)", + "", + "### Fixed", + "", + "- I've fixed XY (#1003)", + "", + "### Security", + "", + "- I've improved the security in XY (#1003)", + "", + "## [1.0.0]", + "", + "### Added", + "", + "- I've added feature XY (#1004)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1004)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1004)", + "", + "### Removed", + "", + "- I've removed XY (#1004)", + "", + "### Fixed", + "", + "- I've fixed XY (#1004)", + "", + "### Security", + "", + "- I've improved the security in XY (#1004)", + "", + "## [Unreleased]", + "", + "### Added", + "", + "- I've added feature XY (#1005)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1005)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1005)", + "", + "### Removed", + "", + "- I've removed XY (#1005)", + "", + "### Fixed", + "", + "- I've fixed XY (#1005)", + "", + "### Security", + "", + "- I've improved the security in XY (#1005)", + "", + "### Newheader", + "", + "- Some new change (#42)", + "" +] diff --git a/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-2/CHANGELOG.md b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-2/CHANGELOG.md new file mode 100644 index 00000000000..af08bb229bd --- /dev/null +++ b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-2/CHANGELOG.md @@ -0,0 +1,166 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [0.1.0-alpha.1] + +### Added + +- I've added feature XY #2 (#1001) + +### Changed + +- I've cleaned up XY #2 (#1001) + +### Deprecated + +- I've deprecated XY #2 (#1001) + +### Removed + +- I've removed XY #2 (#1001) + +### Fixed + +- I've fixed XY #2 (#1001) + +### Security + +- I've improved the security in XY #2 (#1001) + +## [0.1.0] + +### Added + +- I've added feature XY #2 (#1002) + +### Changed + +- I've cleaned up XY #2 (#1002) + +### Deprecated + +- I've deprecated XY #2 (#1002) + +### Removed + +- I've removed XY #2 (#1002) + +### Fixed + +- I've fixed XY #2 (#1002) + +### Security + +- I've improved the security in XY #2 (#1002) + +## [0.1.1] + +### Added + +- I've added feature XY #2 (#1003) + +### Changed + +- I've cleaned up XY #2 (#1003) + +### Deprecated + +- I've deprecated XY #2 (#1003) + +### Removed + +- I've removed XY #2 (#1003) + +### Fixed + +- I've fixed XY #2 (#1003) + +### Security + +- I've improved the security in XY #2 (#1003) + +## [1.0.0] + +### Added + +- I've added feature XY #2 (#1004) + +### Changed + +- I've cleaned up XY #2 (#1004) + +### Deprecated + +- I've deprecated XY #2 (#1004) + +### Removed + +- I've removed XY #2 (#1004) + +### Fixed + +- I've fixed XY #2 (#1004) + +### Security + +- I've improved the security in XY #2 (#1004) + +## [Unreleased] + +### Added + +- I've added feature XY #2 (#1005) + +### Changed + +- I've cleaned up XY #2 (#1005) + +### Deprecated + +- I've deprecated XY #2 (#1005) + +### Removed + +- I've removed XY #2 (#1005) + +### Fixed + +- I've fixed XY #2 (#1005) + +### Security + +- I've improved the security in XY #2 (#1005) diff --git a/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-3/CHANGELOG.md b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-3/CHANGELOG.md new file mode 100644 index 00000000000..f6ef8c19809 --- /dev/null +++ b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-3/CHANGELOG.md @@ -0,0 +1,170 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [0.1.0] + +### Added + +- I've added feature XY #3 (#1002) + +### Changed + +- I've cleaned up XY #3 (#1002) + +### Deprecated + +- I've deprecated XY #3 (#1002) + +### Removed + +- I've removed XY #3 (#1002) + +### Fixed + +- I've fixed XY #3 (#1002) + +### Security + +- I've improved the security in XY #3 (#1002) + +## [0.1.1] + +### Added + +- I've added feature XY #3 (#1003) +- I've added feature XY #4 (#1003) + +### Changed + +- I've cleaned up XY #3 (#1003) +- I've cleaned up XY #4 (#1003) + +### Deprecated + +- I've deprecated XY #3 (#1003) +- I've deprecated XY #4 (#1003) + +### Removed + +- I've removed XY #3 (#1003) +- I've removed XY #4 (#1003) + +### Fixed + +- I've fixed XY #3 (#1003) +- I've fixed XY #4 (#1003) + +### Security + +- I've improved the security in XY #3 (#1003) +- I've improved the security in XY #4 (#1003) + +## [1.0.0] + +### Added + +- I've added feature XY #3 (#1004) +- I've added feature XY #4 (#1004) +- I've added feature XY #5 (#1004) + +### Changed + +- I've cleaned up XY #3 (#1004) +- I've cleaned up XY #4 (#1004) +- I've cleaned up XY #5 (#1004) + +### Deprecated + +- I've deprecated XY #3 (#1004) +- I've deprecated XY #4 (#1004) +- I've deprecated XY #5 (#1004) + +### Removed + +- I've removed XY #3 (#1004) +- I've removed XY #4 (#1004) +- I've removed XY #5 (#1004) + +### Fixed + +- I've fixed XY #3 (#1004) +- I've fixed XY #4 (#1004) +- I've fixed XY #5 (#1004) + +### Security + +- I've improved the security in XY #3 (#1004) +- I've improved the security in XY #4 (#1004) +- I've improved the security in XY #5 (#1004) + +## [Unreleased] + +### Added + +- I've added feature XY #3 (#1005) +- I've added feature XY #4 (#1005) +- I've added feature XY #5 (#1005) + +### Changed + +- I've cleaned up XY #3 (#1005) +- I've cleaned up XY #4 (#1005) +- I've cleaned up XY #5 (#1005) + +### Deprecated + +- I've deprecated XY #3 (#1005) +- I've deprecated XY #4 (#1005) +- I've deprecated XY #5 (#1005) + +### Removed + +- I've removed XY #3 (#1005) +- I've removed XY #4 (#1005) +- I've removed XY #5 (#1005) + +### Fixed + +- I've fixed XY #3 (#1005) +- I've fixed XY #4 (#1005) +- I've fixed XY #5 (#1005) + +### Security + +- I've improved the security in XY #3 (#1005) +- I've improved the security in XY #4 (#1005) +- I've improved the security in XY #5 (#1005) diff --git a/scripts/changelog/test/fixtures/package_parsed_changelog.ts b/scripts/changelog/test/fixtures/package_parsed_changelog.ts new file mode 100644 index 00000000000..a812d3e1d09 --- /dev/null +++ b/scripts/changelog/test/fixtures/package_parsed_changelog.ts @@ -0,0 +1,114 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const packageUnreleasedSection = [ + '## [Unreleased]', + '', + '### Added', + '', + '- random text (#425)', + '', + '### Removed', + '', + '- `build` entry from `package.json` (#420)', + '- `bar` (#424)', + '', + '### Changed', + '', + '- `tsc` compiled files moved to `lib/` directory from `dist/` (#421)', + '- `foo` (#423)', + '', +]; + +export const parsedPackageChangelog = [ + '# Changelog', + '', + 'All notable changes to this project will be documented in this file.', + '', + 'The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),', + 'and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).', + '', + '', + '', + '## [4.0.0-alpha.1]', + '', + '### Breaking Changes', + '', + '#### Connection close is not supported', + '', + 'In `1.x` user had access to raw connection object and can interact with it. e.g.', + '', + '```ts', + 'web3.currentProvider.connection.close();', + '```', + '', + 'But this internal behavior is not exposed any further. Though you can achieve same with this approach.', + '', + '```ts', + 'web3.currentProvider.disconnect();', + '```', + '', + '## [4.0.1-alpha.2]', + '', + '### Changed', + '', + '- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739)', + '', + '## [4.0.1-alpha.5]', + '', + '### Removed', + '', + '- `build` entry from `package.json` (#5755)', + '', + ...packageUnreleasedSection, +]; + +export const packageGroupedUnreleasedEntries = { + '### Added': ['- random text (#425)'], + '### Removed': ['- `build` entry from `package.json` (#420)', '- `bar` (#424)'], + '### Changed': [ + '- `tsc` compiled files moved to `lib/` directory from `dist/` (#421)', + '- `foo` (#423)', + ], +}; diff --git a/scripts/changelog/test/fixtures/root_parsed_changelog.ts b/scripts/changelog/test/fixtures/root_parsed_changelog.ts new file mode 100644 index 00000000000..1081a15aeff --- /dev/null +++ b/scripts/changelog/test/fixtures/root_parsed_changelog.ts @@ -0,0 +1,1160 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const rootUnreleasedSection = [ + '## [Unreleased]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1005)", + "- I've added feature XY #4 (#1005)", + "- I've added feature XY #5 (#1005)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1005)", + "- I've cleaned up XY #4 (#1005)", + "- I've cleaned up XY #5 (#1005)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1005)", + "- I've deprecated XY #4 (#1005)", + "- I've deprecated XY #5 (#1005)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1005)", + '', + '#### mock-package-3', + "- I've removed XY #3 (#1005)", + "- I've removed XY #4 (#1005)", + "- I've removed XY #5 (#1005)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1005)", + "- I've fixed XY #4 (#1005)", + "- I've fixed XY #5 (#1005)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1005)", + '', + '#### mock-package-3', + "- I've improved the security in XY #3 (#1005)", + "- I've improved the security in XY #4 (#1005)", + "- I've improved the security in XY #5 (#1005)", + '', +]; + +export const parsedRootChangelog = [ + '# Changelog', + '', + 'All notable changes to this project will be documented in this file.', + '', + 'The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),', + 'and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).', + '', + '', + '## [0.1.0-alpha.0]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1000)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1000)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1000)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1000)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1000)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1000)", + '', + '## [0.1.0-alpha.1]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1001)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1001)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1001)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1001)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1001)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1001)", + '', + '## [0.1.0]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1002)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1002)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1002)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've removed XY #3 (#1002)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1002)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've improved the security in XY #3 (#1002)", + '', + '## [0.1.1]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1003)", + "- I've added feature XY #4 (#1003)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1003)", + "- I've cleaned up XY #4 (#1003)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1003)", + "- I've deprecated XY #4 (#1003)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've removed XY #3 (#1003)", + "- I've removed XY #4 (#1003)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1003)", + "- I've fixed XY #4 (#1003)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've improved the security in XY #3 (#1003)", + "- I've improved the security in XY #4 (#1003)", + '', + '## [1.0.0]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1004)", + "- I've added feature XY #4 (#1004)", + "- I've added feature XY #5 (#1004)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1004)", + "- I've cleaned up XY #4 (#1004)", + "- I've cleaned up XY #5 (#1004)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1004)", + "- I've deprecated XY #4 (#1004)", + "- I've deprecated XY #5 (#1004)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1004)", + '', + '#### mock-package-3', + "- I've removed XY #3 (#1004)", + "- I've removed XY #4 (#1004)", + "- I've removed XY #5 (#1004)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1004)", + "- I've fixed XY #4 (#1004)", + "- I've fixed XY #5 (#1004)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1004)", + '', + '#### mock-package-3', + "- I've improved the security in XY #3 (#1004)", + "- I've improved the security in XY #4 (#1004)", + "- I've improved the security in XY #5 (#1004)", + '', + ...rootUnreleasedSection, +]; + +export const rootGroupedUnreleasedEntries = { + '### Added': { + '#### mock-package-1': ["- I've added feature XY (#1005)"], + '#### mock-package-2': ["- I've added feature XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've added feature XY #3 (#1005)", + "- I've added feature XY #4 (#1005)", + "- I've added feature XY #5 (#1005)", + ], + }, + '### Changed': { + '#### mock-package-1': ["- I've cleaned up XY (#1005)"], + '#### mock-package-2': ["- I've cleaned up XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've cleaned up XY #3 (#1005)", + "- I've cleaned up XY #4 (#1005)", + "- I've cleaned up XY #5 (#1005)", + ], + }, + '### Deprecated': { + '#### mock-package-1': ["- I've deprecated XY (#1005)"], + '#### mock-package-2': ["- I've deprecated XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've deprecated XY #3 (#1005)", + "- I've deprecated XY #4 (#1005)", + "- I've deprecated XY #5 (#1005)", + ], + }, + '### Removed': { + '#### mock-package-1': ["- I've removed XY (#1005)"], + '#### mock-package-2': ["- I've removed XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've removed XY #3 (#1005)", + "- I've removed XY #4 (#1005)", + "- I've removed XY #5 (#1005)", + ], + }, + '### Fixed': { + '#### mock-package-1': ["- I've fixed XY (#1005)"], + '#### mock-package-2': ["- I've fixed XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've fixed XY #3 (#1005)", + "- I've fixed XY #4 (#1005)", + "- I've fixed XY #5 (#1005)", + ], + }, + '### Security': { + '#### mock-package-1': ["- I've improved the security in XY (#1005)"], + '#### mock-package-2': ["- I've improved the security in XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've improved the security in XY #3 (#1005)", + "- I've improved the security in XY #4 (#1005)", + "- I've improved the security in XY #5 (#1005)", + ], + }, +}; + +export const rootSyncedGroupedUnreleasedEntries = { + '### Added': { + '#### mock-package-1': ["- I've added feature XY (#1005)"], + '#### mock-package-2': ["- I've added feature XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've added feature XY #3 (#1005)", + "- I've added feature XY #4 (#1005)", + "- I've added feature XY #5 (#1005)", + ], + }, + '### Changed': { + '#### mock-package-1': ["- I've cleaned up XY (#1005)"], + '#### mock-package-2': ["- I've cleaned up XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've cleaned up XY #3 (#1005)", + "- I've cleaned up XY #4 (#1005)", + "- I've cleaned up XY #5 (#1005)", + ], + }, + '### Deprecated': { + '#### mock-package-1': ["- I've deprecated XY (#1005)"], + '#### mock-package-2': ["- I've deprecated XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've deprecated XY #3 (#1005)", + "- I've deprecated XY #4 (#1005)", + "- I've deprecated XY #5 (#1005)", + ], + }, + '### Removed': { + '#### mock-package-1': ["- I've removed XY (#1005)"], + '#### mock-package-2': ["- I've removed XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've removed XY #3 (#1005)", + "- I've removed XY #4 (#1005)", + "- I've removed XY #5 (#1005)", + ], + }, + '### Fixed': { + '#### mock-package-1': ["- I've fixed XY (#1005)"], + '#### mock-package-2': ["- I've fixed XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've fixed XY #3 (#1005)", + "- I've fixed XY #4 (#1005)", + "- I've fixed XY #5 (#1005)", + ], + }, + '### Security': { + '#### mock-package-1': ["- I've improved the security in XY (#1005)"], + '#### mock-package-2': ["- I've improved the security in XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've improved the security in XY #3 (#1005)", + "- I've improved the security in XY #4 (#1005)", + "- I've improved the security in XY #5 (#1005)", + ], + }, +}; + +export const rootFlattenedSyncedUnreleasedEntries = [ + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1005)", + "- I've added feature XY #4 (#1005)", + "- I've added feature XY #5 (#1005)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1005)", + "- I've cleaned up XY #4 (#1005)", + "- I've cleaned up XY #5 (#1005)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1005)", + "- I've deprecated XY #4 (#1005)", + "- I've deprecated XY #5 (#1005)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've removed XY #3 (#1005)", + "- I've removed XY #4 (#1005)", + "- I've removed XY #5 (#1005)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1005)", + "- I've fixed XY #4 (#1005)", + "- I've fixed XY #5 (#1005)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've improved the security in XY #3 (#1005)", + "- I've improved the security in XY #4 (#1005)", + "- I've improved the security in XY #5 (#1005)", + '', +]; + +export const rootSyncedChangelog = [ + '# Changelog', + '', + 'All notable changes to this project will be documented in this file.', + '', + 'The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),', + 'and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).', + '', + '', + '', + '## [0.1.0-alpha.0]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1000)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1000)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1000)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1000)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1000)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1000)", + '', + '## [0.1.0-alpha.1]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1001)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1001)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1001)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1001)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1001)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1001)", + '', + '## [0.1.0]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1002)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1002)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1002)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've removed XY #3 (#1002)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1002)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've improved the security in XY #3 (#1002)", + '', + '## [0.1.1]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1003)", + "- I've added feature XY #4 (#1003)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1003)", + "- I've cleaned up XY #4 (#1003)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1003)", + "- I've deprecated XY #4 (#1003)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've removed XY #3 (#1003)", + "- I've removed XY #4 (#1003)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1003)", + "- I've fixed XY #4 (#1003)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've improved the security in XY #3 (#1003)", + "- I've improved the security in XY #4 (#1003)", + '', + '## [1.0.0]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1004)", + "- I've added feature XY #4 (#1004)", + "- I've added feature XY #5 (#1004)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1004)", + "- I've cleaned up XY #4 (#1004)", + "- I've cleaned up XY #5 (#1004)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1004)", + "- I've deprecated XY #4 (#1004)", + "- I've deprecated XY #5 (#1004)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've removed XY #3 (#1004)", + "- I've removed XY #4 (#1004)", + "- I've removed XY #5 (#1004)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1004)", + "- I've fixed XY #4 (#1004)", + "- I've fixed XY #5 (#1004)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've improved the security in XY #3 (#1004)", + "- I've improved the security in XY #4 (#1004)", + "- I've improved the security in XY #5 (#1004)", + '', + '## [Unreleased]', + '', + ...rootFlattenedSyncedUnreleasedEntries, +]; diff --git a/scripts/changelog/test/fixtures/root_unsynced_CHANGELOG.tmpl b/scripts/changelog/test/fixtures/root_unsynced_CHANGELOG.tmpl new file mode 100644 index 00000000000..cad5393ff66 --- /dev/null +++ b/scripts/changelog/test/fixtures/root_unsynced_CHANGELOG.tmpl @@ -0,0 +1,474 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [0.1.0-alpha.0] + +### Added + +#### mock-package-1 + +- I've added feature XY (#1000) + +### Changed + +#### mock-package-1 + +- I've cleaned up XY (#1000) + +### Deprecated + +#### mock-package-1 + +- I've deprecated XY (#1000) + +### Removed + +#### mock-package-1 + +- I've removed XY (#1000) + +### Fixed + +#### mock-package-1 + +- I've fixed XY (#1000) + +### Security + +#### mock-package-1 + +- I've improved the security in XY (#1000) + +## [0.1.0-alpha.1] + +### Added + +#### mock-package-1 + +- I've added feature XY (#1001) + +#### mock-package-2 + +- I've added feature XY #2 (#1001) + +### Changed + +#### mock-package-1 + +- I've cleaned up XY (#1001) + +#### mock-package-2 + +- I've cleaned up XY #2 (#1001) + +### Deprecated + +#### mock-package-1 + +- I've deprecated XY (#1001) + +#### mock-package-2 + +- I've deprecated XY #2 (#1001) + +### Removed + +#### mock-package-1 + +- I've removed XY (#1001) + +#### mock-package-2 + +- I've removed XY #2 (#1001) + +### Fixed + +#### mock-package-1 + +- I've fixed XY (#1001) + +#### mock-package-2 + +- I've fixed XY #2 (#1001) + +### Security + +#### mock-package-1 + +- I've improved the security in XY (#1001) + +#### mock-package-2 + +- I've improved the security in XY #2 (#1001) + +## [0.1.0] + +### Added + +#### mock-package-1 + +- I've added feature XY (#1002) + +#### mock-package-2 + +- I've added feature XY #2 (#1002) + +#### mock-package-3 + +- I've added feature XY #3 (#1002) + +### Changed + +#### mock-package-1 + +- I've cleaned up XY (#1002) + +#### mock-package-2 + +- I've cleaned up XY #2 (#1002) + +#### mock-package-3 + +- I've cleaned up XY #3 (#1002) + +### Deprecated + +#### mock-package-1 + +- I've deprecated XY (#1002) + +#### mock-package-2 + +- I've deprecated XY #2 (#1002) + +#### mock-package-3 + +- I've deprecated XY #3 (#1002) + +### Removed + +#### mock-package-1 + +- I've removed XY (#1002) + +#### mock-package-2 + +- I've removed XY #2 (#1002) + +#### mock-package-3 + +- I've removed XY #3 (#1002) + +### Fixed + +#### mock-package-1 + +- I've fixed XY (#1002) + +#### mock-package-2 + +- I've fixed XY #2 (#1002) + +#### mock-package-3 + +- I've fixed XY #3 (#1002) + +### Security + +#### mock-package-1 + +- I've improved the security in XY (#1002) + +#### mock-package-2 + +- I've improved the security in XY #2 (#1002) + +#### mock-package-3 + +- I've improved the security in XY #3 (#1002) + +## [0.1.1] + +### Added + +#### mock-package-1 + +- I've added feature XY (#1003) + +#### mock-package-2 + +- I've added feature XY #2 (#1003) + +#### mock-package-3 + +- I've added feature XY #3 (#1003) +- I've added feature XY #4 (#1003) + +### Changed + +#### mock-package-1 + +- I've cleaned up XY (#1003) + +#### mock-package-2 + +- I've cleaned up XY #2 (#1003) + +#### mock-package-3 + +- I've cleaned up XY #3 (#1003) +- I've cleaned up XY #4 (#1003) + +### Deprecated + +#### mock-package-1 + +- I've deprecated XY (#1003) + +#### mock-package-2 + +- I've deprecated XY #2 (#1003) + +#### mock-package-3 + +- I've deprecated XY #3 (#1003) +- I've deprecated XY #4 (#1003) + +### Removed + +#### mock-package-1 + +- I've removed XY (#1003) + +#### mock-package-2 + +- I've removed XY #2 (#1003) + +#### mock-package-3 + +- I've removed XY #3 (#1003) +- I've removed XY #4 (#1003) + +### Fixed + +#### mock-package-1 + +- I've fixed XY (#1003) + +#### mock-package-2 + +- I've fixed XY #2 (#1003) + +#### mock-package-3 + +- I've fixed XY #3 (#1003) +- I've fixed XY #4 (#1003) + +### Security + +#### mock-package-1 + +- I've improved the security in XY (#1003) + +#### mock-package-2 + +- I've improved the security in XY #2 (#1003) + +#### mock-package-3 + +- I've improved the security in XY #3 (#1003) +- I've improved the security in XY #4 (#1003) + +## [1.0.0] + +### Added + +#### mock-package-1 + +- I've added feature XY (#1004) + +#### mock-package-2 + +- I've added feature XY #2 (#1004) + +#### mock-package-3 + +- I've added feature XY #3 (#1004) +- I've added feature XY #4 (#1004) +- I've added feature XY #5 (#1004) + +### Changed + +#### mock-package-1 + +- I've cleaned up XY (#1004) + +#### mock-package-2 + +- I've cleaned up XY #2 (#1004) + +#### mock-package-3 + +- I've cleaned up XY #3 (#1004) +- I've cleaned up XY #4 (#1004) +- I've cleaned up XY #5 (#1004) + +### Deprecated + +#### mock-package-1 + +- I've deprecated XY (#1004) + +#### mock-package-2 + +- I've deprecated XY #2 (#1004) + +#### mock-package-3 + +- I've deprecated XY #3 (#1004) +- I've deprecated XY #4 (#1004) +- I've deprecated XY #5 (#1004) + +### Removed + +#### mock-package-1 + +- I've removed XY (#1004) + +#### mock-package-2 + +- I've removed XY #2 (#1004) + +#### mock-package-3 + +- I've removed XY #3 (#1004) +- I've removed XY #4 (#1004) +- I've removed XY #5 (#1004) + +### Fixed + +#### mock-package-1 + +- I've fixed XY (#1004) + +#### mock-package-2 + +- I've fixed XY #2 (#1004) + +#### mock-package-3 + +- I've fixed XY #3 (#1004) +- I've fixed XY #4 (#1004) +- I've fixed XY #5 (#1004) + +### Security + +#### mock-package-1 + +- I've improved the security in XY (#1004) + +#### mock-package-2 + +- I've improved the security in XY #2 (#1004) + +#### mock-package-3 + +- I've improved the security in XY #3 (#1004) +- I've improved the security in XY #4 (#1004) +- I've improved the security in XY #5 (#1004) + +## [Unreleased] + +### Added + +#### mock-package-1 + +- I've added feature XY (#1005) + +#### mock-package-3 + +- I've added feature XY #3 (#1005) +- I've added feature XY #5 (#1005) + +### Changed + +#### mock-package-1 + +- I've cleaned up XY (#1005) + +#### mock-package-3 + +- I've cleaned up XY #5 (#1005) + +### Deprecated + +#### mock-package-1 + +- I've deprecated XY (#1005) + +### Removed + +#### mock-package-1 + +- I've removed XY (#1005) + +#### mock-package-3 + +- I've removed XY #3 (#1005) +- I've removed XY #4 (#1005) + +### Fixed + +#### mock-package-1 + +- I've fixed XY (#1005) + +#### mock-package-3 + +- I've fixed XY #4 (#1005) + +### Security + +#### mock-package-1 + +- I've improved the security in XY (#1005) + +#### mock-package-3 + +- I've improved the security in XY #3 (#1005) +- I've improved the security in XY #4 (#1005) +- I've improved the security in XY #5 (#1005) diff --git a/scripts/changelog/test/unit/add_changelog_entry.test.ts b/scripts/changelog/test/unit/add_changelog_entry.test.ts new file mode 100644 index 00000000000..3043d2b162a --- /dev/null +++ b/scripts/changelog/test/unit/add_changelog_entry.test.ts @@ -0,0 +1,76 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { copyFileSync, readFileSync, unlinkSync } from 'fs'; + +import { addChangelogEntry } from '../../src/add_changelog_entry'; +import { getListOfPackageNames } from '../../src/helpers'; +import TestChangelogConfig from './test_changelog_config.json'; +import ModifiedTestChangelogConfig from './test_changelog_config_for_add_changelog_entry_tests.json'; +import ExpectedModifiedChangelog from '../fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG.json'; +import ExpectedModifiedChangelog2 from '../fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG_2.json'; + +describe('Add Changelog Entry tests', () => { + it('should add an entry under the Added header`', () => { + const listOfPackageNames = getListOfPackageNames(TestChangelogConfig.packagesDirectoryPath); + + copyFileSync( + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${TestChangelogConfig.packagesChangelogPath}`, + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${ModifiedTestChangelogConfig.packagesChangelogPath}`, + ); + + addChangelogEntry('added', [ + './scripts/changelog/test/unit/test_changelog_config_for_add_changelog_entry_tests.json', + listOfPackageNames[0], + 'Some new change (#42)', + ]); + + const parsedModifiedChangelog = readFileSync( + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${ModifiedTestChangelogConfig.packagesChangelogPath}`, + 'utf8', + ).split(/\n/); + expect(parsedModifiedChangelog).toEqual(ExpectedModifiedChangelog); + + unlinkSync( + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${ModifiedTestChangelogConfig.packagesChangelogPath}`, + ); + }); + + it('should add the header Newheader and add an entry under it`', () => { + const listOfPackageNames = getListOfPackageNames(TestChangelogConfig.packagesDirectoryPath); + + copyFileSync( + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${TestChangelogConfig.packagesChangelogPath}`, + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${ModifiedTestChangelogConfig.packagesChangelogPath}`, + ); + + addChangelogEntry('newheader', [ + './scripts/changelog/test/unit/test_changelog_config_for_add_changelog_entry_tests.json', + listOfPackageNames[0], + 'Some new change (#42)', + ]); + + const parsedModifiedChangelog = readFileSync( + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${ModifiedTestChangelogConfig.packagesChangelogPath}`, + 'utf8', + ).split(/\n/); + expect(parsedModifiedChangelog).toEqual(ExpectedModifiedChangelog2); + + unlinkSync( + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${ModifiedTestChangelogConfig.packagesChangelogPath}`, + ); + }); +}); diff --git a/scripts/changelog/test/unit/helpers.test.ts b/scripts/changelog/test/unit/helpers.test.ts new file mode 100644 index 00000000000..10c35467247 --- /dev/null +++ b/scripts/changelog/test/unit/helpers.test.ts @@ -0,0 +1,80 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { getListOfPackageNames, parseArgs } from '../../src/helpers'; +import { Command } from '../../src/types'; + +describe('Changelog Helpers tests', () => { + const mockCommandFunction = jest.fn(); + const mockCommandFunction2 = jest.fn(); + const commands: Command[] = [ + { + name: 'mockCommand', + description: 'mockCommand', + arguments: [], + example: 'mockCommand', + commandFunction: mockCommandFunction, + }, + { + name: 'mockCommand2', + description: 'mockCommand2', + arguments: ['argument1', 'argument2'], + example: 'mockCommand2', + commandFunction: mockCommandFunction2, + }, + ]; + + it('should parse args and execute mockCommandFunction with no arguments', () => { + process.argv = ['', '', 'mockCommand']; + parseArgs(commands); + + expect(commands[0].commandFunction).toHaveBeenCalledWith('mockCommand', []); + }); + + it('should parse args and execute mockCommandFunction2 with two arguments', () => { + const expectedArguments = ['arg1', 'arg2']; + process.argv = ['', '', 'mockCommand2', ...expectedArguments]; + parseArgs(commands); + + expect(commands[1].commandFunction).toHaveBeenCalledWith('mockCommand2', expectedArguments); + }); + + it('should parse args, not execute either commandFunctions, and call console.log and console.table', () => { + // eslint-disable-next-line no-console + console.log = jest.fn(); + // eslint-disable-next-line no-console + console.table = jest.fn(); + process.argv = ['', '']; + + parseArgs(commands); + + expect(commands[0].commandFunction).not.toHaveBeenCalledWith(); + expect(commands[1].commandFunction).not.toHaveBeenCalledWith(); + // eslint-disable-next-line no-console + expect(console.log).toHaveBeenLastCalledWith( + 'Invalid command, please refer to below table for expected commands:', + ); + // eslint-disable-next-line no-console + expect(console.table).toHaveBeenCalledWith(commands); + }); + + it('should get list of directory names in ../fixtures/mock_packages_directory', () => { + const result = getListOfPackageNames( + './scripts/changelog/test/fixtures/mock_packages_directory', + ); + expect(result).toEqual(['mock-package-1', 'mock-package-2', 'mock-package-3']); + }); +}); diff --git a/scripts/changelog/test/unit/sync.test.ts b/scripts/changelog/test/unit/sync.test.ts new file mode 100644 index 00000000000..b9ef50f64f2 --- /dev/null +++ b/scripts/changelog/test/unit/sync.test.ts @@ -0,0 +1,104 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { copyFileSync, readFileSync, unlinkSync } from 'fs'; + +import { + flattenSyncedUnreleasedEntries, + getPackageGroupedUnreleasedEntries, + getRootGroupedUnreleasedEntries, + getSyncedGroupedUnreleasedEntries, + getUnreleasedSection, + syncChangelogs, +} from '../../src/sync'; +import { getListOfPackageNames } from '../../src/helpers'; +import { + parsedPackageChangelog, + packageUnreleasedSection, + packageGroupedUnreleasedEntries, +} from '../fixtures/package_parsed_changelog'; +import { + rootFlattenedSyncedUnreleasedEntries, + rootGroupedUnreleasedEntries, + rootSyncedChangelog, + rootSyncedGroupedUnreleasedEntries, + rootUnreleasedSection, +} from '../fixtures/root_parsed_changelog'; +import TestChangelogConfig from './test_changelog_config.json'; + +describe('Changelog Sync tests', () => { + let listOfPackageNames: string[]; + + beforeAll(() => { + listOfPackageNames = getListOfPackageNames( + './scripts/changelog/test/fixtures/mock_packages_directory', + ); + }); + + it('should get package unreleased section', () => { + const result = getUnreleasedSection(parsedPackageChangelog); + expect(result).toEqual(packageUnreleasedSection); + }); + + it('should get root grouped unreleased entries', () => { + const result = getRootGroupedUnreleasedEntries(rootUnreleasedSection); + expect(result).toEqual(rootGroupedUnreleasedEntries); + }); + + it('should get package grouped unreleased entries', () => { + const result = getPackageGroupedUnreleasedEntries(packageUnreleasedSection); + expect(result).toEqual(packageGroupedUnreleasedEntries); + }); + + it('should get synced grouped unreleased entries', () => { + const result = getSyncedGroupedUnreleasedEntries( + listOfPackageNames, + TestChangelogConfig, + rootGroupedUnreleasedEntries, + ); + expect(result).toEqual(rootSyncedGroupedUnreleasedEntries); + }); + + it('should flatten synced unreleased entries', () => { + const syncedGroupedUnreleasedEntries = getSyncedGroupedUnreleasedEntries( + listOfPackageNames, + TestChangelogConfig, + rootGroupedUnreleasedEntries, + ); + const result = flattenSyncedUnreleasedEntries( + syncedGroupedUnreleasedEntries, + listOfPackageNames, + ); + expect(result).toEqual(rootFlattenedSyncedUnreleasedEntries); + }); + + it('should sync all package CHANGELOGs with root CHANGELOG.md', () => { + copyFileSync( + './scripts/changelog/test/fixtures/root_unsynced_CHANGELOG.tmpl', + TestChangelogConfig.rootChangelogPath, + ); + + syncChangelogs('sync', ['./scripts/changelog/test/unit/test_changelog_config.json']); + + const parsedRootChangelog = readFileSync( + TestChangelogConfig.rootChangelogPath, + 'utf8', + ).split(/\n/); + expect(parsedRootChangelog).toEqual(rootSyncedChangelog); + + unlinkSync(TestChangelogConfig.rootChangelogPath); + }); +}); diff --git a/scripts/changelog/test/unit/test_changelog_config.json b/scripts/changelog/test/unit/test_changelog_config.json new file mode 100644 index 00000000000..95555719f3a --- /dev/null +++ b/scripts/changelog/test/unit/test_changelog_config.json @@ -0,0 +1,5 @@ +{ + "packagesDirectoryPath": "./scripts/changelog/test/fixtures/mock_packages_directory", + "packagesChangelogPath": "CHANGELOG.md", + "rootChangelogPath": "./scripts/changelog/test/fixtures/mock_packages_directory/CHANGELOG.md" +} diff --git a/scripts/changelog/test/unit/test_changelog_config_for_add_changelog_entry_tests.json b/scripts/changelog/test/unit/test_changelog_config_for_add_changelog_entry_tests.json new file mode 100644 index 00000000000..40bcfb7045c --- /dev/null +++ b/scripts/changelog/test/unit/test_changelog_config_for_add_changelog_entry_tests.json @@ -0,0 +1,5 @@ +{ + "packagesDirectoryPath": "./scripts/changelog/test/fixtures/mock_packages_directory", + "packagesChangelogPath": "MODIFIED_CHANGELOG.md", + "rootChangelogPath": "./scripts/changelog/test/fixtures/mock_packages_directory/CHANGELOG.md" +} diff --git a/scripts/changelog/tsconfig.json b/scripts/changelog/tsconfig.json new file mode 100644 index 00000000000..205930ac6db --- /dev/null +++ b/scripts/changelog/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "esModuleInterop": true, + "module": "commonjs", + "declaration": false, + "declarationMap": false + }, + "include": ["src/**/*"] +} diff --git a/scripts/ci.sh b/scripts/ci.sh deleted file mode 100755 index c8e6555c000..00000000000 --- a/scripts/ci.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bash - -# ----------------------------- -# CI matrix job selector -# ----------------------------- - -# Exit immediately on error -set -o errexit - -if [ "$TEST" = "unit" ]; then - - npm run build - npm run test:unit - -elif [ "$TEST" = "build_and_lint" ]; then - - npm run build - npm run dtslint - npm run depcheck - npm run bundlesize - -elif [ "$TEST" = "unit_and_e2e_clients" ]; then - - npm run build - npm run test:e2e:ganache - npm run test:e2e:geth:insta - npm run test:e2e:geth:auto - npm run test:unit - npm run cov:merge_reports - -elif [ "$TEST" = "e2e_browsers" ]; then - - npm run build - npm run test:e2e:chrome - npm run test:e2e:firefox - npm run test:e2e:min - npm run test:e2e:cdn - -elif [ "$TEST" = "e2e_truffle" ]; then - - npm run test:e2e:publish - npm run test:e2e:truffle - -elif [ "$TEST" = "e2e_mosaic" ]; then - - npm run test:e2e:publish - npm run test:e2e:mosaic - -elif [ "$TEST" = "e2e_windows" ]; then - - bash ./scripts/e2e.npm.publish.sh - bash ./scripts/e2e.windows.sh - -elif [ "$TEST" = "e2e_ganache" ]; then - - npm run test:e2e:publish - npm run test:e2e:ganache:core - -elif [ "$TEST" = "e2e_gnosis_dex" ]; then - - npm run test:e2e:publish - npm run test:e2e:gnosis:dex - -fi diff --git a/scripts/compile_contracts.js b/scripts/compile_contracts.js new file mode 100755 index 00000000000..7ef1cb4d7bf --- /dev/null +++ b/scripts/compile_contracts.js @@ -0,0 +1,117 @@ +#!/usr/bin/env node + +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable header/header */ +/* eslint-disable @typescript-eslint/no-var-requires */ + +const { promisify } = require('util'); +const { resolve } = require('path'); +const { compile } = require('solc'); +const { rm, readdirSync, readFileSync, writeFileSync, mkdirSync, existsSync } = require('fs'); + +const rmPromise = promisify(rm); + +// Fetch path of build +const buildPath = resolve(__dirname, '../fixtures/build'); +const contractsPath = resolve(__dirname, '../fixtures/contracts'); +const importDir = resolve(__dirname, '../node_modules'); + +function findImports(path) { + const importPath = resolve(importDir, path); + + if (existsSync(importPath)) { + return { + contents: readFileSync(importPath, 'utf8'), + }; + } + + return { error: 'File not found' }; +} + +(async () => { + try { + await rmPromise(buildPath, { recursive: true }); + } catch (error) { + // Ignore if directory does not exists + if (error.code !== 'ENOENT') { + throw error; + } + } + + // Fetch all Contract files in Contracts folder + const fileNames = readdirSync(contractsPath); + + // Gets ABI of all contracts into variable input + const input = fileNames.reduce( + (previousValue, fileName) => { + const filePath = resolve(contractsPath, fileName); + const source = readFileSync(filePath, 'utf8'); + + return { sources: { ...previousValue.sources, [fileName]: { content: source } } }; + }, + { sources: {} }, + ); + + const compileInput = { + ...input, + language: 'Solidity', + settings: { outputSelection: { '*': { '*': ['abi', 'evm.bytecode.object'] } } }, + }; + + const compileResult = JSON.parse( + compile(JSON.stringify(compileInput), { import: findImports }), + ); + if (compileResult.errors) { + console.error(compileResult.errors); + console.log('Error while compiling'); + } + // Compile all contracts + const output = compileResult.contracts; + + // Re-Create build folder for output files from each contract + mkdirSync(buildPath); + + console.log(output); + + // Output contains all objects from all contracts + // Write the contents of each to different files + for (let contract in output) { + const contractName = contract.replace('.sol', ''); + const contractBuild = output[contract][contractName]; + + if (!contractBuild || (contractBuild && !contractBuild['abi'])) { + continue; + } + + const contractTsInterface = `export const ${contractName}Abi = ${JSON.stringify( + contractBuild['abi'], + )} as const; \n export const ${contractName}Bytecode = '0x${ + contractBuild['evm']['bytecode']['object'] + }';`; + + writeFileSync( + resolve(buildPath, contractName + '.json'), + JSON.stringify(contractBuild, null, '\t'), + ); + writeFileSync(resolve(buildPath, contractName + '.ts'), contractTsInterface); + } + + console.info('Compiled successfully'); + process.exit(0); +})().catch(console.error); diff --git a/scripts/e2e.cdn.sh b/scripts/e2e.cdn.sh deleted file mode 100755 index 37ad6d32c41..00000000000 --- a/scripts/e2e.cdn.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -# -------------------------------------------------------------------- -# Prepares a small test site that uses the packages/web3/dist/min -# -------------------------------------------------------------------- - -if [ -z "$CI" ]; then - - echo "======================================================================" - echo "This script prepares a test site for Netlify. Only run in CI. " - echo "======================================================================" - - exit 1 - -fi - -echo "======================================================================" -echo "Preparing test site for web3-staging.netlify.app " -echo "======================================================================" - -cp packages/web3/dist/web3.min.js scripts/html - -cd scripts/html - -BUNDLE_SIZE=$(wc -c web3.min.js | awk '{print $1}') - -# Mark file with current commit, branch, and bundle size. -sed -i "s|__COMMIT_HASH__|$COMMIT_REF|g" index.html -sed -i "s|__BRANCH__|$BRANCH|g" index.html -sed -i "s|__BUNDLE_SIZE__|$BUNDLE_SIZE|g" index.html - diff --git a/scripts/e2e.chrome.sh b/scripts/e2e.chrome.sh deleted file mode 100755 index 0ef21beac2d..00000000000 --- a/scripts/e2e.chrome.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -# ------------------------------------------------------------------------------------- -# Runs mocha tests tagged 'e2e' vs chrome headless + insta-mining ganache client -# ------------------------------------------------------------------------------------- - -# Exit immediately on error -set -o errexit - -# Run cleanup on exit -trap cleanup EXIT - -cleanup() { - if [ -n "$client" ]; then - kill -9 $client - fi -} - -echo " " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "E2E: chrome headless browser " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo " " - -# Launch ganache, track its PID and wait until port is open -npx ganache-cli --noVMErrorsOnRPCResponse > /dev/null & -client=$! -npx wait-port 8545 - -# Test -karma start \ - --single-run \ - --browsers ChromeHeadless diff --git a/scripts/e2e.firefox.sh b/scripts/e2e.firefox.sh deleted file mode 100755 index 05cad282331..00000000000 --- a/scripts/e2e.firefox.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -# ------------------------------------------------------------------------------------- -# Runs mocha tests tagged 'e2e' vs firefox headless + insta-mining ganache client -# ------------------------------------------------------------------------------------- - -# Exit immediately on error -set -o errexit - -# Run cleanup on exit -trap cleanup EXIT - -cleanup() { - if [ -n "$client" ]; then - kill -9 $client - fi -} - -echo " " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "E2E: firefox headless browser " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo " " - -# Launch ganache, track its PID and wait until port is open -npx ganache-cli --noVMErrorsOnRPCResponse > /dev/null & -client=$! -npx wait-port 8545 - -# Test -karma start \ - --single-run \ - --browsers FirefoxHeadless diff --git a/scripts/e2e.ganache.core.sh b/scripts/e2e.ganache.core.sh deleted file mode 100755 index ef79af1a1ba..00000000000 --- a/scripts/e2e.ganache.core.sh +++ /dev/null @@ -1,56 +0,0 @@ -# ---------------------------------------------------------------------------------------- -# Run trufflesuite/ganache-core using a candidate branch of web3 which has been published -# to a proxy npm registry in `e2e.npm.publish.sh` -# -# This test's purpose is to watch web3 execute a long, complex test suite -# ---------------------------------------------------------------------------------------- - -# Exit immediately on error -set -o errexit - -# Install ganache-core -git clone https://github.com/trufflesuite/ganache-core -cd ganache-core -git checkout tags/v2.13.0 - -# Install via registry and verify -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "Installing updated web3 via virtual registry " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - -npm config set fetch-retry-mintimeout 100000 -npm config set fetch-retry-maxtimeout 600000 - -npm install -npm uninstall --save-dev web3 -npm install --save-dev web3@e2e --registry http://localhost:4873 - -npm list web3 -npm list web3-utils -npm list web3-core -npm list web3-core-promievent - -cat ./package.json - -# Test -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "Running trufflesuite/ganache-core unit tests. " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - -npm run build - -# There are two failing ganache tests: -# 1. "should return instance of StateManager on start": -# Checks whether the object returned by the server is an -# instanceof StateManager. Also fails locally & doesn't -# seem web3 related. -# 2. "should handle events properly via the data event handler": -# Upstream issue. Also fails locally & doesn't -# seem web3 related. -# Skipping them with grep / invert. -TEST_BUILD=node npx mocha \ - --grep "should return instance of StateManager on start|should handle events properly via the data event handler" \ - --invert \ - --check-leaks \ - --recursive \ - --globals _scratch diff --git a/scripts/e2e.ganache.sh b/scripts/e2e.ganache.sh deleted file mode 100755 index 5692cd33f21..00000000000 --- a/scripts/e2e.ganache.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash - -# -------------------------------------------------------------------- -# Runs mocha tests tagged 'e2e' using an insta-mining ganache client -# -------------------------------------------------------------------- - -# Exit immediately on error -set -o errexit - -# Run cleanup on exit -trap cleanup EXIT - -cleanup() { - if [ -n "$client" ]; then - kill -9 $client - fi -} - -echo " " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "E2E: ganache insta-mining " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo " " - -# Launch ganache, track its PID and wait until port is open -npx ganache-cli --noVMErrorsOnRPCResponse > /dev/null & -client=$! -npx wait-port 8545 - -# Test -GANACHE=true nyc --no-clean --silent _mocha -- \ - --reporter spec \ - --require ts-node/register \ - --grep 'E2E' \ - --timeout 5000 \ - --exit diff --git a/scripts/e2e.geth.automine.sh b/scripts/e2e.geth.automine.sh deleted file mode 100755 index 0282d15d4e7..00000000000 --- a/scripts/e2e.geth.automine.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash - -# -------------------------------------------------------------------- -# Runs mocha tests tagged 'e2e' using an auto-mining geth dev client -# -------------------------------------------------------------------- - - -# Exit immediately on error -set -o errexit - -# Run cleanup on exit -trap cleanup EXIT - -cleanup(){ - docker stop geth-client -} - -echo " " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "E2E: geth auto-mining 2s (requires docker) " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo " " - -# Launch client w/ two unlocked accounts. -# + accounts[0] default geth unlocked bal = ~infinity -# + accounts[1] unlocked, signing password = 'left-hand-of-darkness' -geth-dev-assistant --period 2 --accounts 1 --tag 'stable' - -# Test -GETH_AUTOMINE=true nyc --no-clean --silent _mocha -- \ - --reporter spec \ - --grep 'E2E' \ - --timeout 15000 \ - --exit diff --git a/scripts/e2e.geth.instamine.sh b/scripts/e2e.geth.instamine.sh deleted file mode 100755 index df4f7d048ba..00000000000 --- a/scripts/e2e.geth.instamine.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash - -# -------------------------------------------------------------------- -# Runs mocha tests tagged 'e2e' using an insta-mining geth dev client -# -------------------------------------------------------------------- - - -# Exit immediately on error -set -o errexit - -# Run cleanup on exit -trap cleanup EXIT - -cleanup(){ - docker stop geth-client -} - -echo " " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "E2E: geth insta-mining (requires docker) " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo " " - -# Launch client w/ two unlocked accounts. -# + accounts[0] default geth unlocked bal = ~infinity -# + accounts[1] unlocked, bal=50 eth, signing password = 'left-hand-of-darkness' -geth-dev-assistant --accounts 1 --tag 'stable' - -# Test -GETH_INSTAMINE=true nyc --no-clean --silent _mocha -- \ - --reporter spec \ - --grep 'E2E' \ - --timeout 15000 \ - --exit diff --git a/scripts/e2e.gnosis.dex.sh b/scripts/e2e.gnosis.dex.sh deleted file mode 100755 index f286f47a7e1..00000000000 --- a/scripts/e2e.gnosis.dex.sh +++ /dev/null @@ -1,57 +0,0 @@ -# ------------------------------------------------------------------------------------------- -# Run gnosis/dex-react using a candidate branch of web3 which has been published to a -# proxy npm registry in `e2e.npm.publish.sh` -# -# The test's purpose is to verify web3 latest state runs successfully on an actively -# developed production project which uses. -# + react -# + webpack production build -# + typescript compilation -# + ~200 jest tests -# -------------------------------------------------------------------------------------------- - -# Exit immediately on error -set -o errexit - -# To mimic `npm install web3` correctly, this test does not install Web3's dev deps. -# However, we need the npm package `semver` to coerce yarn resolutions correctly. -# It must be installed as a dev dep or Node complains. We also need web3's package.json -# to resolve the current version + patch increment. So some file renaming is necessary here... -cp package.json original.package.json -rm package.json -rm package-lock.json -npm init --yes -npm install --save-dev semver - -# Install mosaic and set yarn resolutions to virtually published patch version -git clone https://github.com/gnosis/dex-react.git -scripts/js/resolutions.js dex-react -cd dex-react - -# Install via registry and verify -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "Installing updated web3 via virtual registry " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - -yarn --registry http://localhost:4873 - -yarn list web3 -yarn list web3-utils -yarn list web3-core -yarn list web3-core-promievent - -cat ./package.json - -# Build -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "Running gnosis/dex-react: build " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - -APP_ID=1 npm run build - -# Test -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "Running gnosis/dex-react: test " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - -APP_ID=1 npm test diff --git a/scripts/e2e.min.sh b/scripts/e2e.min.sh deleted file mode 100755 index f6e2cafecda..00000000000 --- a/scripts/e2e.min.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -# ------------------------------------------------------------------------------------- -# Runs basic min bundle loading check on chrome headless -# ------------------------------------------------------------------------------------- - -# Exit immediately on error -set -o errexit - -echo " " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "E2E: web3/dist/web3.min.js (Chrome). " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo " " - -BROWSER_BUNDLE_TEST="publishedDist" karma start \ - --single-run \ - --browsers ChromeHeadless - -echo " " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "E2E: web3/dist/web3.min.js (Chrome). " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo " " - -BROWSER_BUNDLE_TEST="gitRepoDist" karma start \ - --single-run \ - --browsers ChromeHeadless diff --git a/scripts/e2e.mosaic.sh b/scripts/e2e.mosaic.sh deleted file mode 100755 index ec2907399ec..00000000000 --- a/scripts/e2e.mosaic.sh +++ /dev/null @@ -1,56 +0,0 @@ -# ------------------------------------------------------------------------------------------- -# Run mosaicdao/mosaic-1 fork (w/ buidler truffle5 plugin) using a candidate -# branch of web3 which has been published to a proxy npm registry in `e2e.npm.publish.sh` -# -# This test's purpose is to watch web3 execute a long, complex test suite -# It uses buidler-adapted fork of mosaicdao because that tool is simpler and -# more modular than Truffle and lets us resolve arbitrary versions of web3 more easily. -# -------------------------------------------------------------------------------------------- - -# Exit immediately on error -set -o errexit - -# To mimic `npm install web3` correctly, this test does not install Web3's dev deps. -# However, we need the npm package `semver` to coerce yarn resolutions correctly. -# It must be installed as a dev dep or Node complains. We also need web3's package.json -# to resolve the current version + patch increment. So some file renaming is necessary here... -cp package.json original.package.json -rm package.json -rm package-lock.json -npm init --yes -npm install --save-dev semver - -# Install mosaic and set yarn resolutions to virtually published patch version -git clone https://github.com/cgewecke/mosaic-1.git -scripts/js/resolutions.js mosaic-1 -cd mosaic-1 - -# Install via registry and verify -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "Installing updated web3 via virtual registry " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - -git submodule update --init --recursive -yarn --registry http://localhost:4873 - -yarn add web3@e2e --registry http://localhost:4873 --network-timeout 600000 - -yarn list web3 -yarn list web3-utils -yarn list web3-core -yarn list web3-core-promievent - -cat ./package.json - -# Test -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" -echo "Running mosaicdao/mosaic-1 unit tests. " -echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - -# Launch ganache -./tools/run_ganache_cli.sh /dev/null 2>&1 & -sleep 10 - -# Compile and test -npx buidler compile -npm test diff --git a/scripts/e2e.npm.publish.sh b/scripts/e2e.npm.publish.sh deleted file mode 100755 index f832655db44..00000000000 --- a/scripts/e2e.npm.publish.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env bash - -# -------------------------------------------------------------------- -# Publishes web3 to a local npm proxy registry in CI so the package -# can be E2E tested by installing it in another project -# -------------------------------------------------------------------- - -# Exit immediately on error -set -o errexit - -if [ -z "$CI" ]; then - - echo "======================================================================" - echo "This script publishes web3 to an npm proxy registry. Only run in CI." - echo "======================================================================" - - exit 1 - -fi - -# To model publication correctly, this script needs to run -# without web3's dev deps being installed. It installs -# what it needs here. -npm install -g verdaccio@4.4.4 -npm install -g npm-auth-to-token@1.0.0 -npm install -g lerna@^3.20.2 -npm install -g typescript@^3.9.5 -npm install -g webpack@^4.44.1 webpack-cli@^3.3.12 clean-webpack-plugin@^3.0.0 - -# Launch npm proxy registry and save pid to kill server (req. in Windows env) -verdaccio --config verdaccio.yml & -VERDACCIO_PID=$! -echo "VERDACCIO_PID=$VERDACCIO_PID" > verdaccio_pid - -npx wait-port 4873 - -# `npm add user` -curl -XPUT \ - -H "Content-type: application/json" \ - -d '{ "name": "test", "password": "test" }' \ - 'http://localhost:4873/-/user/org.couchdb.user:test' - -# `npm login` -npm-auth-to-token \ - -u test \ - -p test \ - -e test@test.com \ - -r http://localhost:4873 - -# Lerna version -lerna version minor \ - --force-publish=* \ - --no-git-tag-version \ - --no-push \ - --yes - -# Set identity prior to publishing (necessary for Windows) -git config user.email "you@example.com" -git config user.name "Your Name" - -# Commit changes because lerna checks git before -git commit -a -m 'virtual-version-bump' - -# Lerna publish to e2e tag -lerna publish from-package \ - --dist-tag e2e \ - --registry http://localhost:4873 \ - --ignore-scripts \ - --yes - diff --git a/scripts/e2e.windows.sh b/scripts/e2e.windows.sh deleted file mode 100755 index 364f8b84d08..00000000000 --- a/scripts/e2e.windows.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash - -# This script installs Web3 from virtual registry in a -# Windows env and runs some simple Web3 calls. - -# Exit immediately on error -set -o errexit - -# Setup mock project to install web3 from virtual registry -mkdir windows_test -cp scripts/js/basic_usage.js windows_test/basic_usage.js -cd windows_test - -# Install web3 as dep -npm init --yes -npm install web3@e2e --save --registry http://localhost:4873 -./basic_usage.js - -# Shutdown verdaccio server -cd .. -source verdaccio_pid -kill -9 $VERDACCIO_PID - -# Terminate stray node process -if [ ! -z "$CI" ]; then - kill -9 $(grep node <(ps -ef) | sed 's/.*\travis *\([0-9]*\).*/\1/') -fi diff --git a/scripts/env.sh b/scripts/env.sh new file mode 100755 index 00000000000..3dfd1b7dfdc --- /dev/null +++ b/scripts/env.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +TMP_FOLDER=$(pwd)/tmp +IPC_PATH=$TMP_FOLDER/ipc.ipc +IPC_PATH_1=$TMP_FOLDER/ipc1.ipc +IPC_PATH_2=$TMP_FOLDER/ipc2.ipc + +export WEB3_SYSTEM_TEST_ENV=true +export WEB3_SYSTEM_TEST_BACKEND="" +export WEB3_SYSTEM_TEST_MNEMONIC="smart guide what forget tired jungle always expire rescue boring glue champion" +export WEB3_SYSTEM_TEST_PORT=8545 +export WEB3_SYSTEM_TEST_PROVIDER="" diff --git a/scripts/ganache.sh b/scripts/ganache.sh new file mode 100755 index 00000000000..f7f9089b686 --- /dev/null +++ b/scripts/ganache.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +ORIGARGS=("$@") + +helpFunction() { + echo "Usage: $0 [start|stop] [background]" + exit 1 # Exit script after printing help +} + +start() { + . scripts/env.sh + + if [ -z "${ORIGARGS[1]}" ] + then + docker run --publish 8545:8545 trufflesuite/ganache:latest -m "$WEB3_SYSTEM_TEST_MNEMONIC" -a 5 -p $WEB3_SYSTEM_TEST_PORT --wallet.passphrase "123" --networkId 1337 + else + echo "Starting ganache ..." + docker run --detach --publish 8545:8545 trufflesuite/ganache:latest -m "$WEB3_SYSTEM_TEST_MNEMONIC" -a 5 -p $WEB3_SYSTEM_TEST_PORT --wallet.passphrase "123" --networkId 1337 + + echo "Waiting for ganache..." + npx wait-port "$WEB3_SYSTEM_TEST_PORT" + echo "Ganache started..." + fi +} + +stop() { + echo "Stopping ganache ..." + docker ps -q --filter ancestor="trufflesuite/ganache" | xargs -r docker stop +} + +case $1 in +start) start ;; +stop) stop ;; +*) helpFunction ;; # Print helpFunction in case parameter is non-existent +esac diff --git a/scripts/gen_accounts.js b/scripts/gen_accounts.js new file mode 100644 index 00000000000..b67519a702e --- /dev/null +++ b/scripts/gen_accounts.js @@ -0,0 +1,52 @@ +const { Personal } = require('web3-eth-personal'); +const { Web3Eth } = require('web3-eth'); +const tempAccountList = require('./accounts.json'); + +const getEnvVar = name => (global.Cypress ? Cypress.env(name) : process.env[name]); + +const DEFAULT_SYSTEM_PROVIDER = 'http://localhost:8545'; + +const getSystemTestProvider = () => DEFAULT_SYSTEM_PROVIDER; + +const getSystemTestBackend = () => getEnvVar('WEB3_SYSTEM_TEST_BACKEND') ?? ''; + +let mainAcc; +let accountList = []; +const addAccount = async (address, privateKey) => { + let clientUrl = getSystemTestProvider(); + + const web3Personal = new Personal(clientUrl); + if (accountList.length === 0) { + accountList = await web3Personal.getAccounts(); + mainAcc = accountList[0]; + } + const web3Eth = new Web3Eth(clientUrl); + + if (!accountList.find(acc => acc.address === address)) { + await web3Personal.importRawKey( + getSystemTestBackend() === 'geth' ? privateKey.slice(2) : privateKey, + '123456', + ); + } + + await web3Eth.sendTransaction({ + from: mainAcc, + to: address, + gas: 1500000, + value: '1000000000000000000', + }); +}; + +const createWallets = () => + new Promise(async resolve => { + for (const acc of tempAccountList) { + try { + await addAccount(acc.address, acc.privateKey); + } catch (e) { + console.log('error', e); + } + } + resolve(); + }); + +createWallets().catch(console.error); diff --git a/scripts/genesis.json b/scripts/genesis.json new file mode 100644 index 00000000000..a9820c0b0dc --- /dev/null +++ b/scripts/genesis.json @@ -0,0 +1,12 @@ +{ + "config": { + "chainId": 4321, + "homesteadBlock": 0, + "eip155Block": 0, + "eip158Block": 0, + "eip150Block": 0 + }, + "alloc": {}, + "difficulty": "0x20000", + "gasLimit": "0x8880000" +} diff --git a/scripts/geth.sh b/scripts/geth.sh new file mode 100755 index 00000000000..8469b4e65ab --- /dev/null +++ b/scripts/geth.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +ORIGARGS=("$@") + +helpFunction() { + echo "Usage: $0 [start|stop] [background]" + exit 1 # Exit script after printing help +} + +start() { + . scripts/env.sh + if [ -z "${ORIGARGS[1]}" ] + then + echo "Starting geth..." + echo "docker run -p $WEB3_SYSTEM_TEST_PORT:$WEB3_SYSTEM_TEST_PORT ethereum/client-go:latest --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev" + docker run -p $WEB3_SYSTEM_TEST_PORT:$WEB3_SYSTEM_TEST_PORT ethereum/client-go:latest --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev + else + echo "Starting geth..." + echo "docker run -d -p $WEB3_SYSTEM_TEST_PORT:$WEB3_SYSTEM_TEST_PORT ethereum/client-go:latest --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev" + docker run -d -p $WEB3_SYSTEM_TEST_PORT:$WEB3_SYSTEM_TEST_PORT ethereum/client-go:latest --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev + echo "Waiting for geth..." + npx wait-port -t 10000 "$WEB3_SYSTEM_TEST_PORT" + echo "Geth started" + fi +} + +stop() { + echo "Stopping geth ..." + docker ps -q --filter ancestor="ethereum/client-go" | xargs -r docker stop +} + +case $1 in +start) start ;; +stop) stop ;; +*) helpFunction ;; # Print helpFunction in case parameter is non-existent +esac diff --git a/scripts/geth_binary.sh b/scripts/geth_binary.sh new file mode 100755 index 00000000000..59f9bfecaea --- /dev/null +++ b/scripts/geth_binary.sh @@ -0,0 +1,104 @@ +#!/usr/bin/env bash +# TODO: use this code in #5185 +ORIGARGS=("$@") +. scripts/env.sh + +helpFunction() { + echo "Usage: $0 [start|stop] [background]" + exit 1 # Exit script after printing help +} +getOS(){ + case "$OSTYPE" in + solaris*) OS="SOLARIS" ;; + darwin*) OS="OSX" ;; + linux*) OS="LINUX" ;; + bsd*) OS="BSD" ;; + msys*) OS="WINDOWS" ;; + cygwin*) OS="ALSO WINDOWS" ;; + *) OS="unknown: $OSTYPE" ;; + esac +} +getDownloadLink(){ + case "$OS" in + SOLARIS*) LINK="-" ;; + OSX*) LINK="https://gethstore.blob.core.windows.net/builds/geth-darwin-amd64-1.12.2-bed84606.tar.gz" ;; + LINUX*) LINK="https://gethstore.blob.core.windows.net/builds/geth-linux-386-1.12.2-bed84606.tar.gz" ;; + BSD*) LINK="https://gethstore.blob.core.windows.net/builds/geth-darwin-amd64-1.12.2-bed84606.tar.gz" ;; + WINDOWS*) LINK="https://gethstore.blob.core.windows.net/builds/geth-windows-386-1.12.2-bed84606.exe" ;; + "ALSO WINDOWS"*) LINK="https://gethstore.blob.core.windows.net/builds/geth-windows-386-1.12.2-bed84606.exe" ;; + *) LINK="-" ;; + esac +} +setArchiveFolder(){ + for entry in $TMP_FOLDER/* + do + FOLDER=$entry + done +} +download(){ + if [ ! -e "$TMP_FOLDER/geth" ] + then + getOS + getDownloadLink + + if [[ ! -e "$TMP_FOLDER" ]]; then + mkdir "$TMP_FOLDER" + fi + + wget -O "$TMP_FOLDER/geth.tar.gz" "$LINK" + tar -xf "$TMP_FOLDER/geth.tar.gz" -C "$TMP_FOLDER" + rm "$TMP_FOLDER/geth.tar.gz" + setArchiveFolder + echo "$FOLDER" + mv "$FOLDER/geth" "$TMP_FOLDER/geth" + rm -rf "$FOLDER" + fi +} + +start() { + download + if [ -z "${ORIGARGS[1]}" ]; then + echo "Starting geth..." + echo "geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 " + ${TMP_FOLDER}/geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --rpc.enabledeprecatedpersonal + else + echo "Starting geth..." + echo "geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 &>/dev/null &" + ${TMP_FOLDER}/geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --rpc.enabledeprecatedpersonal &>/dev/null & + echo "Waiting for geth..." + npx wait-port -t 10000 "$WEB3_SYSTEM_TEST_PORT" + fi +} + +startSync() { + download + + ${TMP_FOLDER}/geth --datadir ./tmp/data1 init ./scripts/genesis.json + ${TMP_FOLDER}/geth --datadir ./tmp/data2 init ./scripts/genesis.json + ${TMP_FOLDER}/geth --datadir ./tmp/data1 --ipcpath $IPC_PATH_1 --nodiscover --networkid 1234 --ws --ws.addr 0.0.0.0 --ws.port 18545 --http --http.addr 0.0.0.0 --http.port 18545 --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net &>/dev/null & + ${TMP_FOLDER}/geth --datadir ./tmp/data2 --ipcpath $IPC_PATH_2 --nodiscover --networkid 1234 --port 30304 --authrpc.port 8552 --ws --ws.addr 0.0.0.0 --ws.port 28545 --http --http.addr 0.0.0.0 --http.port 28545 --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net &>/dev/null & + + npx wait-port -t 10000 18545 + npx wait-port -t 10000 28545 +} + +syncStop() { + WEB3_SYSTEM_TEST_PORT=18545 + stop + WEB3_SYSTEM_TEST_PORT=28545 + stop +} +stop() { + echo "Stopping geth ..." + processID=`lsof -Fp -i:${WEB3_SYSTEM_TEST_PORT}| grep '^p'` + kill -9 ${processID##p} +} + +case $1 in +syncStart) startSync ;; +syncStop) syncStop ;; +start) start ;; +stop) stop ;; +download) download ;; +*) helpFunction ;; # Print helpFunction in case parameter is non-existent +esac diff --git a/scripts/html/index.html b/scripts/html/index.html deleted file mode 100644 index 3ff8a06bfa6..00000000000 --- a/scripts/html/index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - -

Web3.js!

-

-

Latest Block

- -

-

-

-

-

-

- - - - diff --git a/scripts/init.ts b/scripts/init.ts new file mode 100644 index 00000000000..fe3a46f642c --- /dev/null +++ b/scripts/init.ts @@ -0,0 +1,22 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { existsSync, writeFileSync, readFileSync } from 'fs'; + +if (!existsSync('.secrets.json')) { + const data = readFileSync('templates/.secrets.json.tmpl'); + writeFileSync('.secrets.json', data); +} diff --git a/scripts/jest.config.js b/scripts/jest.config.js new file mode 100644 index 00000000000..a4f84339593 --- /dev/null +++ b/scripts/jest.config.js @@ -0,0 +1,25 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + globals: { + 'ts-jest': { + tsconfig: './scripts/changelog/tsconfig.json', + }, + }, +}; diff --git a/scripts/js/basic_usage.js b/scripts/js/basic_usage.js deleted file mode 100755 index 9d33bc85ed9..00000000000 --- a/scripts/js/basic_usage.js +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env node - -// This script runs some simple Web3 calls. -// Useful for validating the published version in different OS environments. -const Web3 = require('web3'); -const util = require('util'); -const log = console.log; - -async function delay(secs=0){ - return new Promise(resolve => setTimeout(() => resolve(), secs * 1000)) -} - -// A workaround for how flaky the infura connection can be... -// Tries to fetch data 10x w/ 1 sec delays. Exits on first success. -async function getBlockWithRetry(web3){ - let i = 0; - let block; - - while(true){ - await delay(1); - - try { - - block = await web3.eth.getBlock('latest'); - break; - - } catch(err){ - - i++; - if (i === 10){ - throw new Error('Failed to connect to Infura over websockets after 10 tries'); - } - - } - } - return block; -} - -async function main(){ - let web3; - let block; - - // Providers - log(); - log('>>>>>>'); - log('HTTP:MAINNET getBlock'); - log('>>>>>>'); - - // Http - web3 = new Web3('https://mainnet.infura.io/v3/1d13168ffb894ad2827f2152620bd27c'); - block = await getBlockWithRetry(web3); - log(util.inspect(block)); - - log(); - log('>>>>>>'); - log('WS:MAINNET getBlock'); - log('>>>>>>'); - - // WebSockets - web3 = new Web3('wss://mainnet.infura.io/ws/v3/1d13168ffb894ad2827f2152620bd27c'); - block = await getBlockWithRetry(web3); - web3.currentProvider.disconnect(); - log(util.inspect(block)); - - - // Accounts - web3 = new Web3(); - - log(); - log('>>>>>>'); - log('eth.accounts.createAccount'); - log('>>>>>>'); - - const account = web3.eth.accounts.create(); - log(util.inspect(account)); - - log(); - log('>>>>>>'); - log('eth.accounts.hashMessage'); - log('>>>>>>'); - - const hash = web3.eth.accounts.hashMessage('Hello World'); - log(util.inspect(hash)); -} - -main() - .then(() => process.exit(0)) - .catch(err => { - log(err); - process.exit(1) - }); - diff --git a/scripts/js/ens.js b/scripts/js/ens.js deleted file mode 100644 index e9c7e4a965c..00000000000 --- a/scripts/js/ens.js +++ /dev/null @@ -1,107 +0,0 @@ -const ENSArtifact = require("@ensdomains/ens/build/contracts/ENSRegistry"); -const FIFSRegistrarArtifact = require("@ensdomains/ens/build/contracts/FIFSRegistrar"); -const ReverseRegistrarArtifact = require("@ensdomains/ens/build/contracts/ReverseRegistrar"); -const PublicResolverArtifact = require("@ensdomains/resolver/build/contracts/PublicResolver"); -const namehash = require('eth-ens-namehash'); - -const addressZero = "0x0000000000000000000000000000000000000000"; -const addressOne = "0x0000000000000000000000000000000000000001"; -const tld = "test"; - -async function setupENS(web3) { - - const options = { - bytecode: undefined, - gasPrice: '1', - gas: 5500000 - } - - const accounts = await web3.eth.getAccounts(); - const from = { from: accounts[0] }; - - // ENS - options.data = ENSArtifact.bytecode; - const ENS = new web3.eth.Contract(ENSArtifact.abi, options) - - const ens = await ENS - .deploy() - .send(from); - - // PublicResolver - options.data = PublicResolverArtifact.bytecode; - const PublicResolver = new web3.eth.Contract(PublicResolverArtifact.abi, options) - - const resolver = await PublicResolver - .deploy({ arguments: [ens.options.address] }) - .send(from); - - await setupResolver(ens, resolver, accounts[0], web3); - - // Registrar - options.data = FIFSRegistrarArtifact.bytecode; - const FIFSRegistrar = new web3.eth.Contract(FIFSRegistrarArtifact.abi, options) - - const registrar = await FIFSRegistrar - .deploy({ arguments: [ens.options.address, namehash.hash(tld)] }) - .send(from); - - await setupRegistrar(ens, registrar.options.address, accounts[0], web3); - - // Reverse Registrar - options.data = ReverseRegistrarArtifact.bytecode; - const ReverseRegistrar = new web3.eth.Contract(ReverseRegistrarArtifact.abi, options) - - const reverse = await ReverseRegistrar - .deploy({ arguments: [ens.options.address, resolver.options.address] }) - .send(from); - - await setupReverseRegistrar(ens, reverse.options.address, accounts[0], web3); - - return { - registry: ens.options.address, - resolver: resolver.options.address, - fifsRegistrar: registrar.options.address, - reverseRegistrar: reverse.options.address - } -}; - -async function setupResolver(ens, resolver, account, web3) { - const node = namehash.hash("resolver"); - const label = web3.utils.sha3("resolver"); - - await ens - .methods - .setSubnodeOwner(addressZero, label, account) - .send({from: account}); - - await ens - .methods - .setResolver(node, resolver.options.address) - .send({from: account}); - - await resolver - .methods - .setAddr(node, addressOne) - .send({from: account}); -} - -async function setupRegistrar(ens, address, account, web3) { - await ens - .methods - .setSubnodeOwner(addressZero, web3.utils.sha3(tld), address) - .send({from: account}); -} - -async function setupReverseRegistrar(ens, address, account, web3) { - await ens - .methods - .setSubnodeOwner(addressZero, web3.utils.sha3("reverse"), account) - .send({from: account}); - - await ens - .methods - .setSubnodeOwner(namehash.hash("reverse"), web3.utils.sha3("addr"), address) - .send({from: account}); -} - -module.exports = setupENS diff --git a/scripts/js/resolutions.js b/scripts/js/resolutions.js deleted file mode 100755 index 9690556fd55..00000000000 --- a/scripts/js/resolutions.js +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env node - -/** - * This script is a helper for running a buidler based e2e unit test target and is - * used in combination with the npm virtual publishing script. - * - * It discovers the current web3 package version, gets its minor increment - * (also the value of the virtually published version) and attaches a yarn resolutions field - * to the target's package.json to coerce any Web3 packages up when target is - * installed. - * - * USAGE: resolutions.js - * EXAMPLE: node scripts/js/resolutions.js mosaic-1 - * - */ -const fs = require('fs'); -const path = require('path'); - -const semver = require('semver'); -const web3PackagePath = path.join(process.cwd(), 'original.package.json'); -const targetPackagePath = path.join(process.cwd(), process.argv[2], 'package.json'); - -const web3Package = require(web3PackagePath); -const targetPackage = require(targetPackagePath); - -// Use version least likely to conflict with what's been -// published to npm. (Maps to `lerna version` command -// in e2e.npm.publish.sh) -const version = semver.inc(web3Package.version, 'minor'); - -const web3Modules = [ - "web3", - "web3-bzz", - "web3-core-helpers", - "web3-core-method", - "web3-core-promievent", - "web3-core-requestmanager", - "web3-core-subscriptions", - "web3-core", - "web3-eth-abi", - "web3-eth-accounts", - "web3-eth-contract", - "web3-eth-ens", - "web3-eth-iban", - "web3-eth-personal", - "web3-eth", - "web3-net", - "web3-providers-http", - "web3-providers-ipc", - "web3-providers-ws", - "web3-shh", - "web3-utils" -]; - - -targetPackage.resolutions = {}; - -// Coerce every version of web3 in the sub-dependency tree to -// the virtually published version -for ( const mod of web3Modules ){ - targetPackage.resolutions[`*/**/${mod}`] = version; -} - -// Remove any outer-level web3 modules so yarn flat-packs a single -// set of web3 modules at the outerlevel -if (targetPackage.devDependencies){ - for ( const mod of web3Modules ){ - delete targetPackage.devDependencies[mod]; - } -} - -if (targetPackage.dependencies){ - for ( const mod of web3Modules ){ - delete targetPackage.dependencies[mod]; - } -} - -console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); -console.log(`Yarn will resolve Web3 packages in "${process.argv[2]}"" to...`); -console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); - -console.log(JSON.stringify(targetPackage.resolutions, null, ' ')); - -fs.writeFileSync(targetPackagePath, JSON.stringify(targetPackage, null, ' ')); diff --git a/scripts/system_tests_utils.ts b/scripts/system_tests_utils.ts new file mode 100644 index 00000000000..1c29d058060 --- /dev/null +++ b/scripts/system_tests_utils.ts @@ -0,0 +1,472 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// eslint-disable-next-line import/no-extraneous-dependencies +import { format, SocketProvider } from 'web3-utils'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { + create as _createAccount, + decrypt, + privateKeyToAccount, + signTransaction, +} from 'web3-eth-accounts'; + +// eslint-disable-next-line import/no-extraneous-dependencies +import { prepareTransactionForSigning, Web3Eth } from 'web3-eth'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Web3Context } from 'web3-core'; + +// eslint-disable-next-line import/no-extraneous-dependencies +import { + EthExecutionAPI, + Bytes, + Web3BaseProvider, + Transaction, + KeyStore, + ProviderConnectInfo, + Web3ProviderEventCallback, + ProviderRpcError, + JsonRpcSubscriptionResult, + JsonRpcNotification, + ETH_DATA_FORMAT, + SupportedProviders, + Web3APISpec, + Web3EthExecutionAPI, +} from 'web3-types'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { Personal } from 'web3-eth-personal'; +// eslint-disable-next-line import/no-extraneous-dependencies +import Web3 from 'web3'; + +// eslint-disable-next-line import/no-extraneous-dependencies +import { NonPayableMethodObject } from 'web3-eth-contract'; +// eslint-disable-next-line import/no-extraneous-dependencies +import HttpProvider from 'web3-providers-http'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { IpcProvider } from 'web3-providers-ipc'; +import accountsString from './accounts.json'; + +/** + * Get the env variable from Cypress if it exists or node process + */ +export const getEnvVar = (name: string): string | undefined => + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access + global.Cypress ? Cypress.env(name) : process.env[name]; + +export const DEFAULT_SYSTEM_PROVIDER = 'http://127.0.0.1:8545'; +export const DEFAULT_SYSTEM_ENGINE = 'node'; + +export const getSystemTestProviderUrl = (): string => + getEnvVar('WEB3_SYSTEM_TEST_PROVIDER') ?? DEFAULT_SYSTEM_PROVIDER; + +export const getSystemTestProvider = (): + | string + | SupportedProviders => { + const url = getSystemTestProviderUrl(); + if (url.includes('ipc')) { + return new IpcProvider(url); + } + return url; +}; + +export const getSystemTestEngine = (): string => + getEnvVar('WEB3_SYSTEM_TEST_ENGINE') ?? DEFAULT_SYSTEM_ENGINE; + +export const isHttp: boolean = getSystemTestProviderUrl().startsWith('http'); +export const isWs: boolean = getSystemTestProviderUrl().startsWith('ws'); +export const isIpc: boolean = getSystemTestProviderUrl().includes('ipc'); +export const isChrome: boolean = getSystemTestEngine() === 'chrome'; +export const isFirefox: boolean = getSystemTestEngine() === 'firefox'; +export const isElectron: boolean = getSystemTestEngine() === 'electron'; +export const isNode: boolean = getSystemTestEngine() === 'isNode'; +export const isSyncTest: boolean = getEnvVar('TEST_OPTION') === 'sync'; +export const isSocket: boolean = isWs || isIpc; +export const isBrowser: boolean = ['chrome', 'firefox'].includes(getSystemTestEngine()); + +export const getSystemTestMnemonic = (): string => getEnvVar('WEB3_SYSTEM_TEST_MNEMONIC') ?? ''; + +export const getSystemTestBackend = (): string => getEnvVar('WEB3_SYSTEM_TEST_BACKEND') ?? ''; + +export const createAccount = _createAccount; + +export const itIf = (condition: (() => boolean) | boolean) => + (typeof condition === 'function' ? condition() : condition) ? test : test.skip; + +export const describeIf = (condition: (() => boolean) | boolean) => + (typeof condition === 'function' ? condition() : condition) ? describe : describe.skip; + +const maxNumberOfAttempts = 100; +const intervalTime = 500; // ms + +export const waitForOpenConnection = async ( + web3Context: Web3Context, + currentAttempt = 1, + status = 'connected', +) => + new Promise((resolve, reject) => { + if (!isSocket) { + resolve(); + return; + } + + const interval = setInterval(() => { + if (currentAttempt > maxNumberOfAttempts - 1) { + clearInterval(interval); + reject(new Error('Maximum number of attempts exceeded')); + } else if ( + (web3Context.provider as unknown as Web3BaseProvider).getStatus() === status + ) { + clearInterval(interval); + resolve(); + } + // eslint-disable-next-line no-plusplus, no-param-reassign + currentAttempt++; + }, intervalTime); + }); + +export const closeOpenConnection = async (web3Context: Web3Context) => { + if (!isSocket || web3Context?.provider instanceof HttpProvider) { + return; + } + + // make sure we try to close the connection after it is established + if ( + web3Context?.provider && + (web3Context.provider as unknown as Web3BaseProvider).getStatus() === 'connecting' + ) { + await waitForOpenConnection(web3Context); + } + + // If an error happened during closing, that is acceptable at tests, just print a 'warn'. + if (web3Context?.provider) { + (web3Context.provider as unknown as Web3BaseProvider).on('error', (err: any) => { + console.warn('error while trying to close the connection', err); + }); + } + + // Wait a bit to ensure the connection does not have a pending data that + // could cause an error if written after closing the connection. + await new Promise(resolve => { + setTimeout(resolve, 500); + }); + + if ( + web3Context?.provider && + 'disconnect' in (web3Context.provider as unknown as Web3BaseProvider) + ) { + (web3Context.provider as unknown as Web3BaseProvider).disconnect(1000, ''); + } +}; + +export const createAccountProvider = (context: Web3Context) => { + const signTransactionWithContext = async (transaction: Transaction, privateKey: Bytes) => { + const tx = await prepareTransactionForSigning(transaction, context); + + const privateKeyBytes = format({ format: 'bytes' }, privateKey, ETH_DATA_FORMAT); + + return signTransaction(tx, privateKeyBytes); + }; + + const privateKeyToAccountWithContext = (privateKey: Uint8Array | string) => { + const account = privateKeyToAccount(privateKey); + + return { + ...account, + signTransaction: async (transaction: Transaction) => + signTransactionWithContext(transaction, account.privateKey), + }; + }; + + const decryptWithContext = async ( + keystore: string | KeyStore, + password: string, + options?: Record, + ) => { + const account = await decrypt(keystore, password, (options?.nonStrict as boolean) ?? true); + + return { + ...account, + signTransaction: async (transaction: Transaction) => + signTransactionWithContext(transaction, account.privateKey), + }; + }; + + const createWithContext = () => { + const account = _createAccount(); + + return { + ...account, + signTransaction: async (transaction: Transaction) => + signTransactionWithContext(transaction, account.privateKey), + }; + }; + + return { + create: createWithContext, + privateKeyToAccount: privateKeyToAccountWithContext, + decrypt: decryptWithContext, + }; +}; + +export const refillAccount = async (from: string, to: string, value: string | number) => { + const web3Eth = new Web3Eth(DEFAULT_SYSTEM_PROVIDER); + + await web3Eth.sendTransaction({ + from, + to, + value, + }); +}; + +let mainAcc: string; +export const createNewAccount = async (config?: { + unlock?: boolean; + refill?: boolean; + privateKey?: string; + password?: string; + doNotImport?: boolean; +}): Promise<{ address: string; privateKey: string }> => { + const acc = config?.privateKey ? privateKeyToAccount(config?.privateKey) : _createAccount(); + + const clientUrl = DEFAULT_SYSTEM_PROVIDER; + + if (config?.unlock) { + const web3Personal = new Personal(clientUrl); + if (!config?.doNotImport) { + await web3Personal.importRawKey( + getSystemTestBackend() === 'geth' ? acc.privateKey.slice(2) : acc.privateKey, + config.password ?? '123456', + ); + } + + await web3Personal.unlockAccount(acc.address, config.password ?? '123456', 100000000); + } + + if (config?.refill) { + const web3Personal = new Personal(clientUrl); + if (!mainAcc) { + [mainAcc] = await web3Personal.getAccounts(); + } + await refillAccount(mainAcc, acc.address, '100000000000000000'); + } + + return { address: acc.address.toLowerCase(), privateKey: acc.privateKey }; +}; +let tempAccountList: { address: string; privateKey: string }[] = []; +const walletsOnWorker = 20; + +if (tempAccountList.length === 0) { + tempAccountList = accountsString; +} +let currentIndex = Math.floor(Math.random() * (tempAccountList ? tempAccountList.length : 0)); +export const createTempAccount = async ( + config: { + unlock?: boolean; + refill?: boolean; + privateKey?: string; + password?: string; + } = {}, +): Promise<{ address: string; privateKey: string }> => { + if ( + config.unlock === false || + config.refill === false || + config.privateKey || + config.password + ) { + return createNewAccount({ + unlock: config.unlock ?? true, + refill: config.refill ?? true, + privateKey: config.privateKey, + password: config.password, + }); + } + + if (currentIndex >= walletsOnWorker || !tempAccountList[currentIndex]) { + currentIndex = 0; + } + + const acc = tempAccountList[currentIndex]; + await createNewAccount({ + unlock: true, + refill: false, + privateKey: acc.privateKey, + doNotImport: true, + }); + currentIndex += 1; + + return acc; +}; + +export const getSystemTestAccountsWithKeys = async (): Promise< + { + address: string; + privateKey: string; + }[] +> => { + const acc = await createTempAccount(); + const acc2 = await createTempAccount(); + const acc3 = await createTempAccount(); + return [acc, acc2, acc3]; +}; + +export const getSystemTestAccounts = async (): Promise => + (await getSystemTestAccountsWithKeys()).map(a => a.address); + +export const signTxAndSendEIP1559 = async ( + provider: unknown, + tx: Transaction, + privateKey: string, +) => { + const web3 = new Web3(provider as Web3BaseProvider); + const acc = web3.eth.accounts.privateKeyToAccount(privateKey); + web3.eth.wallet?.add(privateKey); + + const txObj = { + ...tx, + type: '0x2', + gas: tx.gas ?? '1000000', + from: acc.address, + }; + + return web3.eth.sendTransaction(txObj, undefined, { checkRevertBeforeSending: false }); +}; + +export const signTxAndSendEIP2930 = async ( + provider: unknown, + tx: Transaction, + privateKey: string, +) => { + const web3 = new Web3(provider as Web3BaseProvider); + const acc = web3.eth.accounts.privateKeyToAccount(privateKey); + web3.eth.wallet?.add(privateKey); + const txObj = { + ...tx, + type: '0x1', + gas: tx.gas ?? '1000000', + from: acc.address, + }; + + return web3.eth.sendTransaction(txObj, undefined, { checkRevertBeforeSending: false }); +}; + +export const signAndSendContractMethodEIP1559 = async ( + provider: unknown, + address: string, + method: NonPayableMethodObject, + privateKey: string, +) => + signTxAndSendEIP1559( + provider, + { + to: address, + data: method.encodeABI(), + }, + privateKey, + ); + +export const signAndSendContractMethodEIP2930 = async ( + provider: unknown, + address: string, + method: NonPayableMethodObject, + privateKey: string, +) => + signTxAndSendEIP2930( + provider, + { + to: address, + data: method.encodeABI(), + }, + privateKey, + ); + +export const createLocalAccount = async (web3: Web3) => { + const account = web3.eth.accounts.create(); + await refillAccount((await createTempAccount()).address, account.address, '10000000000000000'); + web3.eth.accounts.wallet.add(account); + return account; +}; +/* eslint-disable @typescript-eslint/no-unsafe-call */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +// eslint-disable-next-line arrow-body-style +export const waitForSocketConnect = async (provider: SocketProvider) => { + return new Promise(resolve => { + provider.on('connect', (( + _error: Error | ProviderRpcError | undefined, + data: JsonRpcSubscriptionResult | JsonRpcNotification | undefined, + ) => { + resolve(data as unknown as ProviderConnectInfo); + }) as Web3ProviderEventCallback); + }); +}; + +// eslint-disable-next-line arrow-body-style +export const waitForSocketDisconnect = async (provider: SocketProvider) => { + return new Promise(resolve => { + provider.on('disconnect', (( + _error: ProviderRpcError | Error | undefined, + data: JsonRpcSubscriptionResult | JsonRpcNotification | undefined, + ) => { + resolve(data as unknown as ProviderRpcError); + }) as Web3ProviderEventCallback); + }); +}; + +export const waitForOpenSocketConnection = async (provider: SocketProvider) => + new Promise(resolve => { + provider.on('connect', ((_error, data) => { + resolve(data as unknown as ProviderConnectInfo); + }) as Web3ProviderEventCallback); + }); + +export const waitForCloseSocketConnection = async (provider: SocketProvider) => + new Promise(resolve => { + provider.on('disconnect', ((_error, data) => { + resolve(data as unknown as ProviderRpcError); + }) as Web3ProviderEventCallback); + }); + +export const waitForEvent = async ( + web3Provider: SocketProvider, + eventName: string, +) => + new Promise(resolve => { + web3Provider.on(eventName, (data: any) => { + resolve(data); + }); + }); + +export const sendFewSampleTxs = async (cnt = 1) => { + const web3 = new Web3(DEFAULT_SYSTEM_PROVIDER); + const fromAcc = await createLocalAccount(web3); + const toAcc = createAccount(); + const res = []; + for (let i = 0; i < cnt; i += 1) { + res.push( + // eslint-disable-next-line no-await-in-loop + await web3.eth.sendTransaction({ + to: toAcc.address, + value: '0x1', + from: fromAcc.address, + gas: '300000', + }), + ); + } + await closeOpenConnection(web3); + return res; +}; diff --git a/scripts/test-runner.sh b/scripts/test-runner.sh new file mode 100755 index 00000000000..cdb3798e461 --- /dev/null +++ b/scripts/test-runner.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash + +ORIGARGS=("$@") + +. scripts/env.sh + +helpFunction() { + echo "Usage: $0 [node | electron | firefox | chrome] [coverage | sync]" + exit 1 # Exit script after printing help +} +BACKEND=${ORIGARGS[0]} +MODE=${ORIGARGS[1]} +ENGINE=${ORIGARGS[2]} +TEST_OPTION=${ORIGARGS[3]} + +SUPPORTED_BACKENDS=("geth" "ganache" "sepolia" "mainnet") +SUPPORTED_MODE=("http" "ws" "ipc") +# if you will add a new browser please also add it in the system_test_utils.ts => isBrowser +SUPPORTED_ENGINES=("node" "electron" "firefox" "chrome" "") +SUPPORTED_TEST_OPTIONS=("coverage" "sync" "") + +if [[ ! " ${SUPPORTED_BACKENDS[*]} " =~ " ${BACKEND} " ]]; then + helpFunction +fi + +if [[ ! " ${SUPPORTED_MODE[*]} " =~ " ${MODE} " ]]; then + helpFunction +fi + +if [[ ! " ${SUPPORTED_ENGINES[*]} " =~ " ${ENGINE} " ]]; then + helpFunction +fi + +if [[ ! " ${SUPPORTED_TEST_OPTIONS[*]} " =~ " ${TEST_OPTION} " ]]; then + helpFunction +fi + +echo "Node software used for tests: " $BACKEND +echo "Node running on: " "$MODE://127.0.0.1:$WEB3_SYSTEM_TEST_PORT" + +export WEB3_SYSTEM_TEST_MODE=$MODE +export WEB3_SYSTEM_TEST_PROVIDER="$MODE://127.0.0.1:$WEB3_SYSTEM_TEST_PORT" +export WEB3_SYSTEM_TEST_BACKEND=$BACKEND +export WEB3_SYSTEM_TEST_ENGINE=$ENGINE + +TEST_COMMAND="" + +if [[ $MODE == "ipc" ]]; then + export WEB3_SYSTEM_TEST_PROVIDER=$IPC_PATH + BACKEND=geth-binary +fi + +if [[ $ENGINE == "node" ]] || [[ $ENGINE == "" ]]; then + if [[ $TEST_OPTION == "coverage" ]]; then + TEST_COMMAND="test:coverage:integration" + elif [[ $BACKEND == "sepolia" || $BACKEND == "mainnet" ]]; then + TEST_COMMAND="lerna run test:e2e:$BACKEND" + else + TEST_COMMAND="test:integration" + fi +else + TEST_COMMAND="lerna run test:e2e:$ENGINE --stream" +fi + + +if [[ $BACKEND == "geth" || $BACKEND == "ganache" || $BACKEND == "geth-binary" ]]; then + yarn "$BACKEND:start:background" && yarn generate:accounts && yarn $TEST_COMMAND && yarn "$BACKEND:stop" +else + yarn $TEST_COMMAND +fi diff --git a/scripts/verdaccio.sh b/scripts/verdaccio.sh new file mode 100755 index 00000000000..f0187e94ce4 --- /dev/null +++ b/scripts/verdaccio.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +ORIGARGS=("$@") + +helpFunction() { + echo "Usage: $0 [start|stop|publish|startAndPublish] [background]" + exit 1 # Exit script after printing help +} + +start() { + . scripts/env.sh + if [[ ${ORIGARGS[1]} == "background" ]]; then + startBackground + else + echo "Starting verdaccio..." + docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio + fi +} + +startBackground() { + echo "Starting verdaccio in background..." + docker run -d --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio +} + +stop() { + echo "Stopping verdaccio ..." + docker ps -q --filter ancestor="verdaccio/verdaccio" | xargs -r docker stop +} + +createVerdaccioNPMUser() { + curl -XPUT \ + -H "Content-type: application/json" \ + -d '{ "name": "test", "password": "test" }' \ + 'http://localhost:4873/-/user/org.couchdb.user:test' +} + +loginNPMUser() { + npx npm-auth-to-token \ + -u test \ + -p test \ + -e test@test.com \ + -r http://localhost:4873 +} + +lernaUpdatePackageVersions() { + npx lerna version 5.0.0 \ + --ignore-scripts \ + --no-push \ + --no-private \ + --no-git-tag-version \ + --yes +} + +lernaBuildAndCommit() { + yarn build + + git add . + git commit -m "Comitting for black box publish" +} + +lernaPublish() { + npx lerna publish from-package \ + --dist-tag blackbox \ + --no-git-tag-version \ + --no-push \ + --registry http://localhost:4873 \ + --ignore-scripts \ + --yes +} + +publish() { + echo "Publishing to verdaccio ..." + + npx wait-port -t 60000 4873 + + createVerdaccioNPMUser + loginNPMUser + lernaUpdatePackageVersions + lernaBuildAndCommit + lernaPublish +} + +startBackgroundAndPublish() { + startBackground && publish +} + +case $1 in +start) start ;; +stop) stop ;; +publish) publish ;; +startBackgroundAndPublish) startBackgroundAndPublish ;; +createVerdaccioNPMUser) createVerdaccioNPMUser ;; +loginNPMUser) loginNPMUser ;; +lernaUpdatePackageVersions) lernaUpdatePackageVersions ;; +lernaBuildAndCommit) lernaBuildAndCommit ;; +lernaPublish) lernaPublish ;; +*) helpFunction ;; # Print helpFunction in case parameter is non-existent +esac diff --git a/templates/.eslintignore.tmpl b/templates/.eslintignore.tmpl new file mode 100644 index 00000000000..ffb881be6b5 --- /dev/null +++ b/templates/.eslintignore.tmpl @@ -0,0 +1,9 @@ +dist +lib +jest.config.js +.eslintrc.js +cypress +cypress.config.js +src/common/chains/** +src/common/eips/** +src/common/hardforks/** \ No newline at end of file diff --git a/templates/.eslintrc.js.tmpl b/templates/.eslintrc.js.tmpl new file mode 100644 index 00000000000..8b7fd410b8d --- /dev/null +++ b/templates/.eslintrc.js.tmpl @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/templates/.npmignore.tmpl b/templates/.npmignore.tmpl new file mode 100644 index 00000000000..0b1a9d71c23 --- /dev/null +++ b/templates/.npmignore.tmpl @@ -0,0 +1,26 @@ +.babelrc +.eslintignore +.eslintrc.json +.eslintrc.js +.gitignore +.lintstagedrc.json +.nycrc +.prettierrc.json +.prettierignore +cypress.json +index.html +Jenkinsfile* +*.log + +.nyc_output/ +coverage/ +benchmark/ +.coverage/ +cypress/ +fixtures/ +tmp/ +logs/ +test/ +scripts/ +browsertest/ +examples/ diff --git a/templates/.npmrc.tmpl b/templates/.npmrc.tmpl new file mode 100644 index 00000000000..a4c610ea284 --- /dev/null +++ b/templates/.npmrc.tmpl @@ -0,0 +1,2 @@ +message = ":arrow_up: Version %s" +save-exact = false diff --git a/templates/.prettierignore.tmpl b/templates/.prettierignore.tmpl new file mode 100644 index 00000000000..76075e77df3 --- /dev/null +++ b/templates/.prettierignore.tmpl @@ -0,0 +1,46 @@ +# Files +LICENSE +.gitkeep +mocha.opts +.DS_Store +REVISION + +# rc files +.*rc +## ignore files +.*ignore + +# Ignore extensions +*.png +*.jpg +*.svg +*.ai +*.sql +*.sh +*.html +*.info +*.xml +*.log +*.proto +*.csv +*.cmd +*.tsbuildinfo + +## jest snapshot +*.snap + +# project specific paths +coverage/ +dist/ +lib/ +tmp/ +browsertest.build/ +.coverage +.coverage-unit +cypress/.cert +*.lock + +# Eth2 specs +*.yaml +*.yml +.tool-versions diff --git a/templates/.prettierrc.json.tmpl b/templates/.prettierrc.json.tmpl new file mode 100644 index 00000000000..7b23ef55098 --- /dev/null +++ b/templates/.prettierrc.json.tmpl @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": true, + "arrowParens": "avoid" +} diff --git a/templates/.secrets.json.tmpl b/templates/.secrets.json.tmpl new file mode 100644 index 00000000000..4208a3a9df5 --- /dev/null +++ b/templates/.secrets.json.tmpl @@ -0,0 +1,22 @@ +{ + "SEPOLIA": { + "HTTP": "", + "WS": "", + "ACCOUNT": { + "address": "0xa127C5E6a7E3600Ac34A9a9928E52521677e7211", + "privateKey": "" + }, + "ALLOWED_SEND_TRANSACTION": false, + "DEPLOYED_TEST_CONTRACT_ADDRESS": "0xedfd52255571b4a9a9d4445989e39f5c14ff0447" + }, + "MAINNET": { + "HTTP": "", + "WS": "", + "ACCOUNT": { + "address": "0x98AF911164f9d4E0f5983ed114949c3Bfe3ADc9d", + "privateKey": "" + }, + "ALLOWED_SEND_TRANSACTION": false, + "DEPLOYED_TEST_CONTRACT_ADDRESS": "0xdac17f958d2ee523a2206206994597c13d831ec7" + } +} \ No newline at end of file diff --git a/templates/cypress.config.js b/templates/cypress.config.js new file mode 100644 index 00000000000..95874902d93 --- /dev/null +++ b/templates/cypress.config.js @@ -0,0 +1,31 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +const config = { + screenshotOnRunFailure: false, + video: false, + e2e: { + // We've imported your old cypress plugins here. + // You may want to clean this up later by importing these. + setupNodeEvents(on, config) { + return require('./cypress/plugins/index.js')(on, config); + }, + specPattern: 'test/integration/**/**/*.test.ts', + excludeSpecPattern: ['**/contract_defaults_extra.test.ts'], + }, +}; + +module.exports = config; diff --git a/templates/cypress/plugins/index.js b/templates/cypress/plugins/index.js new file mode 100644 index 00000000000..32a81d2aeda --- /dev/null +++ b/templates/cypress/plugins/index.js @@ -0,0 +1,33 @@ +/// +// *********************************************************** +// This example plugins/index.js can be used to load plugins +// +// You can change the location of this file or turn off loading +// the plugins file with the 'pluginsFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/plugins-guide +// *********************************************************** + +// This function is called when a project is opened or re-opened (e.g. due to +// the project's config changing) + +const webpackPreprocessor = require('@cypress/webpack-preprocessor'); +const webpackOptions = require('../webpack.config.js'); + +/** + * @type {Cypress.PluginConfig} + */ +// eslint-disable-next-line no-unused-vars +module.exports = (on, config) => { + on('file:preprocessor', webpackPreprocessor({ webpackOptions })); + + config.env.WEB3_SYSTEM_TEST_ENV = process.env.WEB3_SYSTEM_TEST_ENV; + config.env.WEB3_SYSTEM_TEST_BACKEND = process.env.WEB3_SYSTEM_TEST_BACKEND; + config.env.WEB3_SYSTEM_TEST_MNEMONIC = process.env.WEB3_SYSTEM_TEST_MNEMONIC; + config.env.WEB3_SYSTEM_TEST_PORT = process.env.WEB3_SYSTEM_TEST_PORT; + config.env.WEB3_SYSTEM_TEST_PROVIDER = process.env.WEB3_SYSTEM_TEST_PROVIDER; + config.env.WEB3_SYSTEM_TEST_ENGINE = process.env.WEB3_SYSTEM_TEST_ENGINE; + + return config; +}; diff --git a/templates/cypress/support/commands.js b/templates/cypress/support/commands.js new file mode 100644 index 00000000000..119ab03f7cd --- /dev/null +++ b/templates/cypress/support/commands.js @@ -0,0 +1,25 @@ +// *********************************************** +// This example commands.js shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add('login', (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) diff --git a/templates/cypress/support/e2e.js b/templates/cypress/support/e2e.js new file mode 100644 index 00000000000..0aaa3eac194 --- /dev/null +++ b/templates/cypress/support/e2e.js @@ -0,0 +1,46 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; + +// Alternatively you can use CommonJS syntax: +// require('./commands') + +import 'cypress-jest-adapter'; + +// Enable the hook to match Jest +global.beforeAll = global.before; +global.afterAll = global.after; + +// In e2e tests we just need to use jest mocking API +global.jest = { + fn: global.cy.stub, + spyOn: global.cy.spy, +}; + +global.it = it; +global.test = it; +global.it.each = data => (describe, test) => { + const prs = []; + for (const d of data) { + if (Array.isArray(d)) { + prs.push(global.it(describe, test.bind(undefined, ...d))); + } else { + prs.push(global.it(describe, test.bind(undefined, d))); + } + } + return Promise.all(prs); +}; diff --git a/templates/cypress/webpack.config.js b/templates/cypress/webpack.config.js new file mode 100644 index 00000000000..cffd3d85576 --- /dev/null +++ b/templates/cypress/webpack.config.js @@ -0,0 +1,38 @@ +const webpack = require('webpack'); + +module.exports = { + // mode: 'development', + target: 'web', + stats: { + modules: true, + colors: true, + }, + module: { + rules: [ + { + test: /\.ts?$/, + use: 'ts-loader', + exclude: [/node_modules/, /unit/], + }, + ], + }, + resolve: { + extensions: ['.ts', '.js'], + fallback: { + fs: false, + net: false, + util: require.resolve('util'), + http: require.resolve('http-browserify'), + https: require.resolve('https-browserify'), + stream: require.resolve('readable-stream'), + }, + extensionAlias: { + '.js': ['.js', '.ts'], + }, + }, + plugins: [ + new webpack.ProvidePlugin({ + process: 'process/browser', + }), + ], +}; diff --git a/templates/jest.config.js.tmpl b/templates/jest.config.js.tmpl new file mode 100644 index 00000000000..d7789fbbbd0 --- /dev/null +++ b/templates/jest.config.js.tmpl @@ -0,0 +1,63 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +module.exports = { + globals: { + 'ts-jest': { + tsconfig: './test/tsconfig.json', + }, + }, + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + rootDir: '../..', + testMatch: ['/test/**/?(*.)+(spec|test).+(ts|tsx|js)'], + setupFilesAfterEnv: ['/test/config/setup.js'], + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + verbose: false, + collectCoverage: false, + coverageReporters: ['json'], + coverageDirectory: '.coverage', + + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, +}; diff --git a/templates/test/.eslintrc.js.tmpl b/templates/test/.eslintrc.js.tmpl new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/templates/test/.eslintrc.js.tmpl @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/templates/test/tsconfig.json.tmpl b/templates/test/tsconfig.json.tmpl new file mode 100644 index 00000000000..831ffc02b5d --- /dev/null +++ b/templates/test/tsconfig.json.tmpl @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.cjs.json", + "compilerOptions": { + "declaration": false, + "declarationMap": false + }, + "include": ["./**/*", "../node_modules/jest-extended/types/**/*.ts"] +} diff --git a/templates/tsconfig.json.tmpl b/templates/tsconfig.json.tmpl new file mode 100644 index 00000000000..7af3885edd9 --- /dev/null +++ b/templates/tsconfig.json.tmpl @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig", + "compilerOptions": { + "outDir": "lib", + "esModuleInterop": true + }, + "include": ["src/**/*"] +} diff --git a/test/1_givenProvider-ethereumProvider.js b/test/1_givenProvider-ethereumProvider.js deleted file mode 100644 index 5571b82af98..00000000000 --- a/test/1_givenProvider-ethereumProvider.js +++ /dev/null @@ -1,87 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var decache = require('decache'); - -describe('Web3.providers.givenProvider', function () { - - // Setting of 'global.' requires a deep reset - beforeEach(function(){ - decache('../packages/web3'); - decache('../packages/web3-eth'); - decache('../packages/web3-bzz'); - }); - - describe('should be set if window.ethereum is available', function () { - beforeEach(function(){ - global.ethereum = {bzz: 'http://givenProvider:8501'}; - }); - - it('when instantiating Web3', function () { - var Web3 = require('../packages/web3'); - assert.deepEqual(Web3.givenProvider, global.ethereum); - }); - - it('when instantiating Eth', function () { - var Eth = require('../packages/web3-eth'); - assert.deepEqual(Eth.givenProvider, global.ethereum); - }); - - it('when instantiating Bzz', function () { - var Bzz = require('../packages/web3-bzz'); - assert.deepEqual(Bzz.givenProvider, global.ethereum.bzz); - }); - }); - - describe('should use request() if available, otherwise falling back to sendAsync() and send()', function () { - - after(function(){ - global.ethereum = undefined; - }) - - it('should use request()', async function () { - global.ethereum = { - request: async () => { return '0x64' }, - sendAsync: () => { throw new Error('used sendAsync') }, - send: () => { throw new Error('used send') } - }; - const Web3 = require('../packages/web3'); - const web3 = new Web3(Web3.givenProvider); - const blockNumber = await web3.eth.getBlockNumber(); - assert.equal(blockNumber, 100) - }); - - it('should use sendAsync()', async function () { - global.ethereum = { - sendAsync: (args, callback) => { return callback(null, {jsonrpc: '2.0', id: 0, result: 101}) }, - send: () => { throw new Error('used send') } - }; - const Web3 = require('../packages/web3'); - const web3 = new Web3(Web3.givenProvider); - const blockNumber = await web3.eth.getBlockNumber(); - assert.equal(blockNumber, 101) - }); - - it('should use send()', async function () { - global.ethereum = { - send: (args, callback) => { return callback(null, {jsonrpc: '2.0', id: 0, result: 102}) } - }; - const Web3 = require('../packages/web3'); - const web3 = new Web3(Web3.givenProvider); - const blockNumber = await web3.eth.getBlockNumber(); - assert.equal(blockNumber, 102) - }); - - it('should error without any request or send method', async function () { - global.ethereum = {}; - const Web3 = require('../packages/web3'); - const web3 = new Web3(Web3.givenProvider); - try { - await web3.eth.getBlockNumber(); - assert.fail('should error'); - } catch (error) { - assert.equal(error.message, 'Provider does not have a request or send method to use.'); - } - }); - }); -}); - diff --git a/test/2_givenProvider-currentProvider.js b/test/2_givenProvider-currentProvider.js deleted file mode 100644 index 95c7b9759b3..00000000000 --- a/test/2_givenProvider-currentProvider.js +++ /dev/null @@ -1,30 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var decache = require('decache'); - -describe('Web3.providers.currentProvider', function () { - - // Setting of 'global.' requires a deep reset - beforeEach(function(){ - decache('../packages/web3'); - decache('../packages/web3-eth'); - decache('../packages/web3-bzz'); - }); - - describe('should be set if web3.currentProvider is available', function () { - beforeEach(function(){ - global.web3 = {currentProvider: {bzz: 'http://givenProvider:8501'}}; - }); - - it('when instantiating Web3', function () { - var Web3 = require('../packages/web3'); - assert.deepEqual(Web3.givenProvider, global.web3.currentProvider); - }); - - it('when instantiating Eth', function () { - var Eth = require('../packages/web3-eth'); - assert.deepEqual(Eth.givenProvider, global.web3.currentProvider); - }); - }); -}); - diff --git a/test/3_givenProvider-ganache.js b/test/3_givenProvider-ganache.js deleted file mode 100644 index 2050058aee2..00000000000 --- a/test/3_givenProvider-ganache.js +++ /dev/null @@ -1,62 +0,0 @@ -var assert = require('assert'); -var ganache = require('ganache-cli'); -var Web3 = require('../packages/web3'); -var Basic = require('./sources/Basic'); - -describe('web.providers.givenProvider (ganache)', function(){ - var web3; - var accounts; - var basic; - var provider; - - var basicOptions = { - data: Basic.bytecode, - gasPrice: '1', - gas: 4000000 - }; - - before(async function(){ - provider = ganache.provider(); - web3 = new Web3(provider); - accounts = await web3.eth.getAccounts(); - basic = new web3.eth.Contract(Basic.abi, basicOptions); - }) - - after(function(done){ - provider.close(done); - }) - - it('requestManager attaches 4 listeners', async function(){ - assert.equal(1, web3.currentProvider.listenerCount('data')) - assert.equal(1, web3.currentProvider.listenerCount('connect')) - assert.equal(1, web3.currentProvider.listenerCount('error')) - // TODO: Remove close once the standard allows it - assert( - web3.currentProvider.listenerCount("disconnect") === 1 || web3.currentProvider.listenerCount("close") === 1 - ); - }); - - it('deploys a contract', async function(){ - var instance = await basic.deploy().send({from: accounts[0]}) - assert(web3.utils.isAddress(instance.options.address)); - }); - - it('can repeatedly setProvider without triggering MaxListeners', function(done){ - let failed = false; - - process.once('warning', function(msg){ - failed = msg.toString().includes("MaxListenersExceededWarning"); - }); - - // Setting the provider more than 9X triggers the warning in 1.2.7-rc.0 - for (var i=1; i<=10; i++) { - basic.setProvider(provider); - } - - setTimeout(function(){ - if(failed) assert.fail("MaxListenersExceededWarning"); - done(); - },500); - }) - -}) diff --git a/test/abi.decodeParam-ethjs.js_ b/test/abi.decodeParam-ethjs.js_ deleted file mode 100644 index 65baaaf356b..00000000000 --- a/test/abi.decodeParam-ethjs.js_ +++ /dev/null @@ -1,409 +0,0 @@ -var _ = require('underscore'); -var chai = require('chai'); -var assert = chai.assert; -var utils = require('../packages/web3-utils'); -var coder = require('ethjs-abi'); - -// TODO check line 108 again! - -var convertResult = function (result) { - var resultArray = []; - _.each(result, function (res, i) { - if(isFinite(i)) - resultArray.push(res); - }); - var convert = function (resultArray) { - return _.map(resultArray, function (res) { - if(res.constructor.name === 'BN') { - res = res.toString(10); - } else if(_.isArray(res)) { - res = convert(res); - } else if(_.isString(res) && utils.isAddress(res)) { - res = utils.toChecksumAddress(res); - } - return res; - }); - }; - return convert(resultArray); -}; - -describe('lib/solidity/coder', function () { - describe('decodeParam', function () { - var test = function (t) { - it('should turn ' + t.type +': ' + t.value + ' to ' + t.expected, function () { - // assert.deepEqual(coder.decodeParam(t.type, t.value), t.expected); - - var value = (typeof t.value === 'string') ? '0x'+ t.value.replace('0x','') : t.value; - var result = coder.decodeMethod({type: 'function', outputs: [{type: t.type, name: 'TestName'}]}, value); - - - var resultArray = convertResult(result); - - if(resultArray.length === 1) - resultArray = resultArray[0]; - - - assert.deepEqual(resultArray, t.expected); - }); - }; - - - test({ type: 'address', expected: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', - value: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1'}); - test({ type: 'address[2]', expected: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x407D73d8A49eEB85D32Cf465507Dd71d507100c3'], - value: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' }); - test({ type: 'address[]', expected: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x407D73d8A49eEB85D32Cf465507Dd71d507100c3'], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' }); - test({ type: 'address[][2]', expected: [['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x407d73d8a49EEB85d32Cf465507dD71D507100c2'], - ['0x407D73d8A49eEB85D32Cf465507Dd71d507100c3', '0x407D73d8a49eeb85D32CF465507dd71d507100C4']], - value: '0000000000000000000000000000000000000000000000000000000000000040' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000002' + /* 40 */ - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + /* 60 */ - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c2' + - '0000000000000000000000000000000000000000000000000000000000000002' + /* a0 */ - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c4' }); - test({ type: 'address[2][]', expected: [['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x407d73d8a49EEB85d32Cf465507dD71D507100c2'], - ['0x407D73d8A49eEB85D32Cf465507Dd71d507100c3', '0x407D73d8a49eeb85D32CF465507dd71d507100C4']], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + /* 20 */ - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c2' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c4' }); - test({ type: 'address[][]', expected: [['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x407d73d8a49EEB85d32Cf465507dD71D507100c2'], - ['0x407D73d8A49eEB85D32Cf465507Dd71d507100c3', '0x407D73d8a49eeb85D32CF465507dd71d507100C4']], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + /* 20 */ - '0000000000000000000000000000000000000000000000000000000000000080' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000002' + /* 80 */ - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + /* a0 */ - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c2' + - '0000000000000000000000000000000000000000000000000000000000000002' + /* e0 */ - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c4' }); - test({ type: 'bool', expected: true, value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'bool', expected: false, value: '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bool[2]', expected: [true, false], - value: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bool[]', expected: [true, true, false], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - - test({ type: 'int', expected: '1', value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'int', expected: '1', value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'int', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int', expected: '-1', value: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - test({ type: 'int256', expected: '1', value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'int256', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int256', expected: '-1', value: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - test({ type: 'int8', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int8[2]', expected: ['16', '2'], - value: '0000000000000000000000000000000000000000000000000000000000000010' + - '0000000000000000000000000000000000000000000000000000000000000002'}); - test({ type: 'int32', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int64', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int128', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int[]', expected: [], value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'int[]', expected: ['3'], value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'int256[]', expected: ['3'], value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'int[]', expected: ['1', '2', '3'], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'int[3][]', expected: [['1', '2', '3'], ['4', '5', '6']], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000006'}); - - test({ type: 'uint', expected: '1', value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'uint', expected: '1', value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'uint', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639935', // old 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - value: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - test({ type: 'uint256', expected: '1', value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'uint256', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint8', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint32', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint64', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint128', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint[]', expected: [], value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'uint[]', expected: ['3'], value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'uint256[]', expected: ['3'], value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'uint[]', expected: ['1', '2', '3'], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'uint[3][]', expected: [['1', '2', '3'], ['4', '5', '6']], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000006'}); - test({ type: 'bytes', expected: '0x6761766f66796f726b', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ type: 'bytes', expected: '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'bytes', expected: '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'bytes', expected: '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'bytes[2]', expected: ['0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134a', - '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'], - value: '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134a' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'bytes[][2]', expected: [['0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134a'], - ['0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134c', - '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134d']], - value: '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - - '0000000000000000000000000000000000000000000000000000000000000001' + // 40 // - '00000000000000000000000000000000000000000000000000000000000000e0' + - - '0000000000000000000000000000000000000000000000000000000000000002' + // 80 // - '0000000000000000000000000000000000000000000000000000000000000120' + - '0000000000000000000000000000000000000000000000000000000000000180' + - - '0000000000000000000000000000000000000000000000000000000000000020' + // e0 // - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134a' + - - '0000000000000000000000000000000000000000000000000000000000000040' + // 120 // - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134c' + - '0000000000000000000000000000000000000000000000000000000000000020' + // 180 // - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134d'}); - - test({ type: 'bytes1', expected: '0xcf', - value: 'cf00000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bytes1[4]', expected: ['0xcf', '0x68', '0x4d', '0xfb'], - value: 'cf00000000000000000000000000000000000000000000000000000000000000' + - '6800000000000000000000000000000000000000000000000000000000000000' + - '4d00000000000000000000000000000000000000000000000000000000000000' + - 'fb00000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bytes32', expected: '0x6761766f66796f726b0000000000000000000000000000000000000000000000', - value: '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - - test({ type: 'string', expected: 'gavofyork', value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ type: 'string', expected: 'ää', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000008' + - 'c383c2a4c383c2a4000000000000000000000000000000000000000000000000'}); - test({ type: 'string', expected: 'ü', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - 'c3bc000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'string', expected: 'Ã', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - 'c383000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'string[]', expected: ['gavofyork','34ɝɣ24'], value: '0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000096761766f66796f726b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083334c99dc9a33234000000000000000000000000000000000000000000000000'}); - - test({ type: 'bytes', expected: '0xc3a40000c3a4', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000006' + - 'c3a40000c3a40000000000000000000000000000000000000000000000000000'}); - test({ type: 'bytes32', expected: '0xc3a40000c3a40000000000000000000000000000000000000000000000000000', - value: 'c3a40000c3a40000000000000000000000000000000000000000000000000000'}); - test({ type: 'address', expected: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', - value: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1'}); - test({ type: 'string', expected: 'welcome to ethereum. welcome to ethereum. welcome to ethereum.', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '000000000000000000000000000000000000000000000000000000000000003e' + - '77656c636f6d6520746f20657468657265756d2e2077656c636f6d6520746f20' + - '657468657265756d2e2077656c636f6d6520746f20657468657265756d2e0000'}); - test({ type: 'bytes', expected: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '000000000000000000000000000000000000000000000000000000000000009f' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff100'}); - }); -}); - -describe('lib/solidity/coder', function () { - describe('decodeParams', function () { - var test = function (t) { - it('should turn ' + t.values + ' to ' + t.expected, function () { - // assert.deepEqual(coder.decodeParams(t.types, t.values), t.expected); - var outputs = t.types.map(function (type, i) { - return {type: type, name: 'TestName'+ i}; - }); - - var value = (typeof t.values === 'string') ? '0x'+ t.values.replace('0x','') : t.values; - var result = coder.decodeMethod({type: 'function', outputs: outputs}, value); - - var resultArray = convertResult(result); - - - assert.deepEqual(resultArray, t.expected); - }); - }; - - - test({ types: ['address'], expected: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1'], - values: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1'}); - test({ types: ['address', 'address'], expected: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x407D73d8A49eEB85D32Cf465507Dd71d507100c3'], - values: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3'}); - test({ types: ['bool[2]', 'bool[3]'], expected: [[true, false], [false, false, true]], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['int[2]', 'int256[3]'], expected: [['1', '2'], ['3', '4', '5']], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000005'}); - test({ types: ['int'], expected: ['1'], values: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['uint[2]', 'uint256[3]'], expected: [['1', '2'], ['3', '4', '5']], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000005'}); - test({ types: ['uint'], expected: ['1'], values: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['bytes1', 'bytes1'], expected: ['0xaa', '0xbb'], - values: 'aa00000000000000000000000000000000000000000000000000000000000000' + - 'bb00000000000000000000000000000000000000000000000000000000000000'}); - test({ types: ['bytes1[2]', 'bytes1'], expected: [['0xaa', '0xbb'], '0xcc'], - values: 'aa00000000000000000000000000000000000000000000000000000000000000' + - 'bb00000000000000000000000000000000000000000000000000000000000000' + - 'cc00000000000000000000000000000000000000000000000000000000000000'}); - test({ types: ['bytes', 'bytes'], expected: ['0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134c'], - values: '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134c'}); - test({ types: ['int', 'string', 'int'], expected: ['1', 'gavofyork', '5'], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['bytes32', 'int'], expected: ['0x6761766f66796f726b0000000000000000000000000000000000000000000000', '5'], - values: '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000005'}); - test({ types: ['int', 'bytes32'], expected: ['5', '0x6761766f66796f726b0000000000000000000000000000000000000000000000'], - values: '0000000000000000000000000000000000000000000000000000000000000005' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['int', 'string', 'int', 'int', 'int', 'int[]'], expected: ['1', 'gavofyork', '2', '3', '4', - ['5', '6', '7']], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000000000000000000000000000000000000000000c0' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000100' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000006' + - '0000000000000000000000000000000000000000000000000000000000000007'}); - test({ types: ['int', 'bytes', 'int', 'bytes'], expected: [ - '5', - '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - '3', - '0x331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '431a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - ], - values: '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '431a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ types: ['address[2][1]', 'bool'], expected: [[['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', - '0x407D73d8A49eEB85D32Cf465507Dd71d507100c3']], false], - values: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ types: ['bool[2][1]', 'bool'], expected: [[[true, false]], true], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['bytes1[2][1]', 'bool'], expected: [[['0xaa', '0xbb']], true], - values: 'aa00000000000000000000000000000000000000000000000000000000000000' + - 'bb00000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['int[2][1]', 'bool'], expected: [[['1', '2']], true], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['uint[2][1]', 'bool'], expected: [[['1', '2']], true], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000001'}); - }); -}); diff --git a/test/abi.decodeParameter.js b/test/abi.decodeParameter.js deleted file mode 100644 index e79fab2c927..00000000000 --- a/test/abi.decodeParameter.js +++ /dev/null @@ -1,655 +0,0 @@ -var _ = require('underscore'); -var chai = require('chai'); -var assert = chai.assert; -var coder = require('../packages/web3-eth-abi'); - -// TODO check line 108 again! - -describe('lib/solidity/coder', function () { - describe('decodeParam', function () { - var test = function (t) { - it('should turn ' + t.type +': ' + t.value + ' to ' + t.expected, function () { - if (t.type === 'tuple') { - console.log(t); - } - assert.deepEqual(coder.decodeParameter(t.type, t.value), t.expected); - }); - }; - - test({ type: 'address', expected: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', - value: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1'}); - test({ type: 'address[2]', expected: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x407D73d8A49eEB85D32Cf465507Dd71d507100c3'], - value: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' }); - test({ type: 'address[]', expected: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x407D73d8A49eEB85D32Cf465507Dd71d507100c3'], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' }); - test({ type: 'address[][2]', expected: [['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x407d73d8a49EEB85d32Cf465507dD71D507100c2'], - ['0x407D73d8A49eEB85D32Cf465507Dd71d507100c3', '0x407D73d8a49eeb85D32CF465507dd71d507100C4']], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c2' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c4'}); - test({ type: 'address[2][]', expected: [['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x407d73d8a49EEB85d32Cf465507dD71D507100c2'], - ['0x407D73d8A49eEB85D32Cf465507Dd71d507100c3', '0x407D73d8a49eeb85D32CF465507dd71d507100C4']], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + /* 20 */ - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c2' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c4' }); - // test({ type: 'address[][]', expected: [['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x407d73d8a49EEB85d32Cf465507dD71D507100c2'], - // ['0x407D73d8A49eEB85D32Cf465507Dd71d507100c3', '0x407D73d8a49eeb85D32CF465507dd71d507100C4']], - // value: '0000000000000000000000000000000000000000000000000000000000000020' + - // '0000000000000000000000000000000000000000000000000000000000000002' + /* 20 */ - // '0000000000000000000000000000000000000000000000000000000000000080' + - // '00000000000000000000000000000000000000000000000000000000000000e0' + - // '0000000000000000000000000000000000000000000000000000000000000002' + /* 80 */ - // '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + /* a0 */ - // '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c2' + - // '0000000000000000000000000000000000000000000000000000000000000002' + /* e0 */ - // '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - // '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c4' }); - test({ type: 'bool', expected: true, value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'bool', expected: false, value: '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bool[2]', expected: [true, false], - value: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bool[]', expected: [true, true, false], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - - test({ type: 'int', expected: '1', value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'int', expected: '1', value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'int', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int', expected: '-1', value: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - test({ type: 'int256', expected: '1', value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'int256', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int256', expected: '-1', value: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - test({ type: 'int8', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int8[2]', expected: ['16', '2'], - value: '0000000000000000000000000000000000000000000000000000000000000010' + - '0000000000000000000000000000000000000000000000000000000000000002'}); - test({ type: 'int32', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int64', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int128', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int[]', expected: [], value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'int[]', expected: ['3'], value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'int256[]', expected: ['3'], value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'int[]', expected: ['1', '2', '3'], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'int[3][]', expected: [['1', '2', '3'], ['4', '5', '6']], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000006'}); - - test({ type: 'uint', expected: '1', value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'uint', expected: '1', value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'uint', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639935', // old 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - value: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - test({ type: 'uint256', expected: '1', value: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'uint256', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint8', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint32', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint64', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint128', expected: '16', value: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint[]', expected: [], value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'uint[]', expected: ['3'], value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'uint256[]', expected: ['3'], value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'uint[]', expected: ['1', '2', '3'], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'uint[3][]', expected: [['1', '2', '3'], ['4', '5', '6']], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000006'}); - test({ type: 'bytes', expected: '0x6761766f66796f726b', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ type: 'bytes', expected: '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'bytes', expected: '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'bytes', expected: '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'bytes[2]', expected: ['0x00000c8c18f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f617fff', - '0x21f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f617fff'], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000022' + - '00000c8c18f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f61' + - '7fff000000000000000000000000000000000000000000000000000000000000' + - '000000000000000000000000000000000000000000000000000000000000001e' + - '21f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f617fff0000'}); - - - test({ type: 'bytes[][2]', expected: [['0x00000c8c18f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f617fff', - '0x21f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f617fff'], - ['0x00000c8c18f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f617fff', - '0x21f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f617fff']], - value: '0000000000000000000000000000000000000000000000000000000000000020'+ - '0000000000000000000000000000000000000000000000000000000000000040'+ - '0000000000000000000000000000000000000000000000000000000000000140' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000022' + - '00000c8c18f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f61' + - '7fff000000000000000000000000000000000000000000000000000000000000' + - '000000000000000000000000000000000000000000000000000000000000001e' + - '21f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f617fff0000' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000022' + - '00000c8c18f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f61' + - '7fff000000000000000000000000000000000000000000000000000000000000' + - '000000000000000000000000000000000000000000000000000000000000001e' + - '21f9252830fb3c56471c51335a8262f16a6d70e276417a7c7d897f617fff0000'}); - - test({ type: 'bytes1', expected: '0xcf', - value: 'cf00000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bytes1[4]', expected: ['0xcf', '0x68', '0x4d', '0xfb'], - value: 'cf00000000000000000000000000000000000000000000000000000000000000' + - '6800000000000000000000000000000000000000000000000000000000000000' + - '4d00000000000000000000000000000000000000000000000000000000000000' + - 'fb00000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bytes32', expected: '0x6761766f66796f726b0000000000000000000000000000000000000000000000', - value: '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - - test({ type: 'string', expected: 'gavofyork', value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ type: 'string', expected: 'ää', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000008' + - 'c383c2a4c383c2a4000000000000000000000000000000000000000000000000'}); - test({ type: 'string', expected: 'ü', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - 'c3bc000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'string', expected: '', - value: '0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'string', expected: 'Ã', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - 'c383000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'string', expected: 'Heeäööä👅D34ɝɣ24Єͽ-.,äü+#/', - value: '00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000026486565c3a4c3b6c3b6c3a4f09f9185443334c99dc9a33234d084cdbd2d2e2cc3a4c3bc2b232f0000000000000000000000000000000000000000000000000000'}); - - test({ type: 'bytes', expected: '0xc3a40000c3a4', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000006' + - 'c3a40000c3a40000000000000000000000000000000000000000000000000000'}); - test({ type: 'bytes32', expected: '0xc3a40000c3a40000000000000000000000000000000000000000000000000000', - value: 'c3a40000c3a40000000000000000000000000000000000000000000000000000'}); - test({ type: 'address', expected: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', - value: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1'}); - test({ type: 'string', expected: 'welcome to ethereum. welcome to ethereum. welcome to ethereum.', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '000000000000000000000000000000000000000000000000000000000000003e' + - '77656c636f6d6520746f20657468657265756d2e2077656c636f6d6520746f20' + - '657468657265756d2e2077656c636f6d6520746f20657468657265756d2e0000'}); - test({ type: 'bytes', expected: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1', - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '000000000000000000000000000000000000000000000000000000000000009f' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff100'}); - test({ type: 'tuple(address)', expected: ['0xbBF289D846208c16EDc8474705C748aff07732dB'], - value: '000000000000000000000000bbf289d846208c16edc8474705c748aff07732db'}); - test({ type: 'tuple(address,address)', expected: ['0xbBF289D846208c16EDc8474705C748aff07732dB', '0xbBF289D846208c16EDc8474705C748aff07732dB'], - value: '000000000000000000000000bbf289d846208c16edc8474705c748aff07732db' + - '000000000000000000000000bbf289d846208c16edc8474705c748aff07732db'}) - test({ type: 'tuple(uint256,uint256)', expected: ["5","5"], - value: '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000005'}) - test({ type: 'tuple(string,string)', expected: ["hello", "world"], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '68656c6c6f000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '776f726c64000000000000000000000000000000000000000000000000000000'}) - test({ type: 'tuple(bytes,bytes)', expected: ["0x01fe517acd15ff","0xabcdef12345678"], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000007' + - '01fe517acd15ff00000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000007' + - 'abcdef1234567800000000000000000000000000000000000000000000000000'}) - test({ type: 'tuple(bool,bool)', expected: [false, true], - value: '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001'}) - - test({ type: 'tuple(uint256,string,bytes)', expected: ["4", "what what", "0xabcdef12345678"], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '7768617420776861740000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000007' + - 'abcdef1234567800000000000000000000000000000000000000000000000000'}) - test({ type: 'tuple(uint128,string,bytes)', expected: ["666", "encode your kids", "0x656e636f646520796f75722077696665"], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '000000000000000000000000000000000000000000000000000000000000029a' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000010' + - '656e636f646520796f7572206b69647300000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000010' + - '656e636f646520796f7572207769666500000000000000000000000000000000' }) - test({ type: 'tuple(string,bytes32,uint256,bool)', expected: ["foo bar", "0xaabbccddeeff0000000000000000000000000000000000000000000000000000", "321", true], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000080' + - 'aabbccddeeff0000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000141' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000007' + - '666f6f2062617200000000000000000000000000000000000000000000000000'}) - test({ type: 'tuple(uint8,uint8,uint8,uint8,string,address,bool)', expected: ["1", "2", "3", "4", "five", "0x0000000000000000000000000000000000000006", true], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000006' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '6669766500000000000000000000000000000000000000000000000000000000' }) - test({ type: 'tuple(tuple(address,address),tuple(uint256,uint256))', expected: [["0x1234567890123456789012345678901234567890","0x1234567890123456789012345678901234567890"],["5", "6"]], - value: '0000000000000000000000001234567890123456789012345678901234567890' + - '0000000000000000000000001234567890123456789012345678901234567890' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000006' }) - test({ type: 'tuple(tuple(address,address),tuple(uint256,uint256),tuple(string,string))', expected: [["0x1234567890123456789012345678901234567890","0x1234567890123456789012345678901234567890"],["5","6"],["a string", "another string"]], - value: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000001234567890123456789012345678901234567890' + - '0000000000000000000000001234567890123456789012345678901234567890' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000006' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000008' + - '6120737472696e67000000000000000000000000000000000000000000000000' + - '000000000000000000000000000000000000000000000000000000000000000e' + - '616e6f7468657220737472696e67000000000000000000000000000000000000' - }) - }); -}); - - -describe('lib/solidity/coder', function () { - describe('decodeParams', function () { - var test = function (t) { - it('should turn ' + t.values + ' to ' + t.expected, function () { - var result = coder.decodeParameters(t.types, t.values); - - var resultArray = []; - _.each(result, function (res, key) { - if(_.isFinite(key)) - resultArray.push(res); - }); - - - - assert.deepEqual(resultArray, t.expected); - }); - }; - - - test({ types: ['address'], expected: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1'], - values: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1'}); - test({ types: ['address', 'address'], expected: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x407D73d8A49eEB85D32Cf465507Dd71d507100c3'], - values: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3'}); - test({ types: ['bool[2]', 'bool[3]'], expected: [[true, false], [false, false, true]], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['int[2]', 'int256[3]'], expected: [['1', '2'], ['3', '4', '5']], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000005'}); - test({ types: ['int'], expected: ['1'], values: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['uint[2]', 'uint256[3]'], expected: [['1', '2'], ['3', '4', '5']], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000005'}); - test({ types: ['uint'], expected: ['1'], values: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['bytes1', 'bytes1'], expected: ['0xaa', '0xbb'], - values: 'aa00000000000000000000000000000000000000000000000000000000000000' + - 'bb00000000000000000000000000000000000000000000000000000000000000'}); - test({ types: ['bytes1[2]', 'bytes1'], expected: [['0xaa', '0xbb'], '0xcc'], - values: 'aa00000000000000000000000000000000000000000000000000000000000000' + - 'bb00000000000000000000000000000000000000000000000000000000000000' + - 'cc00000000000000000000000000000000000000000000000000000000000000'}); - test({ types: ['bytes', 'bytes'], expected: ['0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134c'], - values: '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134c'}); - test({ types: ['int', 'string', 'int'], expected: ['1', 'gavofyork', '5'], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['bytes32', 'int'], expected: ['0x6761766f66796f726b0000000000000000000000000000000000000000000000', '5'], - values: '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000005'}); - test({ types: ['int', 'bytes32'], expected: ['5', '0x6761766f66796f726b0000000000000000000000000000000000000000000000'], - values: '0000000000000000000000000000000000000000000000000000000000000005' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['int', 'string', 'int', 'int', 'int', 'int[]'], expected: ['1', 'gavofyork', '2', '3', '4', - ['5', '6', '7']], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000000000000000000000000000000000000000000c0' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000100' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000006' + - '0000000000000000000000000000000000000000000000000000000000000007'}); - test({ types: ['int', 'bytes', 'int', 'bytes'], expected: [ - '5', - '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - '3', - '0x331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '431a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - ], - values: '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '431a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ types: ['address[2][1]', 'bool'], expected: [[['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', - '0x407D73d8A49eEB85D32Cf465507Dd71d507100c3']], false], - values: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ types: ['bool[2][1]', 'bool'], expected: [[[true, false]], true], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['bytes1[2][1]', 'bool'], expected: [[['0xaa', '0xbb']], true], - values: 'aa00000000000000000000000000000000000000000000000000000000000000' + - 'bb00000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['int[2][1]', 'bool'], expected: [[['1', '2']], true], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['uint[2][1]', 'bool'], expected: [[['1', '2']], true], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['tuple(address,address)', 'tuple(string,string)', 'bool'], - expected: [['0x1234567890123456789012345678901234567890', '0x1234567890123456789012345678901234567890'],["hello", "world"], false], - values: '0000000000000000000000001234567890123456789012345678901234567890' + - '0000000000000000000000001234567890123456789012345678901234567890' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '68656c6c6f000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '776f726c64000000000000000000000000000000000000000000000000000000' }) - - test({ types: ['string', 'tuple(uint256,string)', 'bool', 'tuple(bytes32,bytes)'], - expected: ["the string", ["56","some string"], true, ["0x1234567890123456789012345678901234567890123456789012345678901234", "0x129581"]], - values: '0000000000000000000000000000000000000000000000000000000000000080' + - '00000000000000000000000000000000000000000000000000000000000000c0' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000140' + - '000000000000000000000000000000000000000000000000000000000000000a' + - '74686520737472696e6700000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000038' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '000000000000000000000000000000000000000000000000000000000000000b' + - '736f6d6520737472696e67000000000000000000000000000000000000000000' + - '1234567890123456789012345678901234567890123456789012345678901234' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '1295810000000000000000000000000000000000000000000000000000000000'}) - test({ types: ['bool', 'tuple(bool,tuple(bool,tuple(bool,bool)))', 'tuple(uint256,tuple(uint256,uint256,tuple(uint256,string)))', 'string'], - expected: [true, [false, [true, [false, true]]], ["256",["76","67",["1337","hello"]]], "last param"], - values: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000200' + - '0000000000000000000000000000000000000000000000000000000000000100' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '000000000000000000000000000000000000000000000000000000000000004c' + - '0000000000000000000000000000000000000000000000000000000000000043' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '0000000000000000000000000000000000000000000000000000000000000539' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '68656c6c6f000000000000000000000000000000000000000000000000000000' + - '000000000000000000000000000000000000000000000000000000000000000a' + - '6c61737420706172616d00000000000000000000000000000000000000000000' }) - - test({types: ['string', 'tuple(string,string,tuple(string,string))', 'bytes', 'tuple(bytes,tuple(bytes,string))'], - expected: ["hello world", ["what","is",["even","happening"]], '0x696e', ['0x74686973', ['0x676f64666f7273616b656e', "test"]]], - values: '0000000000000000000000000000000000000000000000000000000000000080' + - '00000000000000000000000000000000000000000000000000000000000000c0' + - '0000000000000000000000000000000000000000000000000000000000000260' + - '00000000000000000000000000000000000000000000000000000000000002a0' + - '000000000000000000000000000000000000000000000000000000000000000b' + - '68656c6c6f20776f726c64000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '7768617400000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '6973000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '6576656e00000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '68617070656e696e670000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '696e000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '7468697300000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '000000000000000000000000000000000000000000000000000000000000000b' + - '676f64666f7273616b656e000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '7465737400000000000000000000000000000000000000000000000000000000' }) - test({ types: ["string", "bool", "tuple(string,tuple(tuple(bool,string,bool),tuple(string,bytes32,bytes)))", "bytes", "tuple(bool,tuple(bytes32,address),bytes)"], - expected: ["this",true, ["is", [[true, "utter", true],["madness","0x1234567890123456789012345678901234567890123456789012345678901234", "0x6275742049206c6f7665206974"]]],"0x6265636175736520697420776f726b73", [true,["0x1234567890123456789012345678901234567890123456789012345678901234","0x1337133713371337133713371337133713371337"],"0x6265636175736520697420776f726b736265636175736520697420776f726b73"]], - values: '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000320' + - '0000000000000000000000000000000000000000000000000000000000000360' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '7468697300000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '6973000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '7574746572000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '1234567890123456789012345678901234567890123456789012345678901234' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000007' + - '6d61646e65737300000000000000000000000000000000000000000000000000' + - '000000000000000000000000000000000000000000000000000000000000000d' + - '6275742049206c6f766520697400000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000010' + - '6265636175736520697420776f726b7300000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '1234567890123456789012345678901234567890123456789012345678901234' + - '0000000000000000000000001337133713371337133713371337133713371337' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '6265636175736520697420776f726b736265636175736520697420776f726b73'}) - test( { types: ['tuple(string,tuple(bool,bool))','address','bytes','tuple(bytes,bytes,string,bool,address)','int256','tuple(int256,uint256,tuple(string,int256,address))'], - expected: [ ["this is more reasonable", [true, false]],"0x1b3F5FE0Fd513E6cbdEE459F0b0e19095FE91958","0x6c6f6c6f6c6f6c6f6c",["0xabcdef12345678", "0x87654321fedcba", "bazbar", false, "0xd13b6e9058E58B8677233CEc2315e1D9e77C79C4"], "-6", ["-7", "5", ["foobar","-8","0xB1eeF147028E9f480DbC5ccaA3277D417D1b85F0"]]], - values: '00000000000000000000000000000000000000000000000000000000000000c0' + - '0000000000000000000000001b3f5fe0fd513e6cbdee459f0b0e19095fe91958' + - '0000000000000000000000000000000000000000000000000000000000000160' + - '00000000000000000000000000000000000000000000000000000000000001a0' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa' + - '0000000000000000000000000000000000000000000000000000000000000300' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000017' + - '74686973206973206d6f726520726561736f6e61626c65000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6c6f6c6f6c6f6c6f6c0000000000000000000000000000000000000000000000' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000120' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '000000000000000000000000d13b6e9058e58b8677233cec2315e1d9e77c79c4' + - '0000000000000000000000000000000000000000000000000000000000000007' + - 'abcdef1234567800000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000007' + - '87654321fedcba00000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000006' + - '62617a6261720000000000000000000000000000000000000000000000000000' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '0000000000000000000000000000000000000000000000000000000000000060' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8' + - '000000000000000000000000b1eef147028e9f480dbc5ccaa3277d417d1b85f0' + - '0000000000000000000000000000000000000000000000000000000000000006' + - '666f6f6261720000000000000000000000000000000000000000000000000000'}) - test( { types: ['tuple(bytes32,bool,bytes32)', 'address', 'tuple(bytes32,bytes32,string)', 'tuple(tuple(address,bool),tuple(address,bytes32),tuple(int256,uint256))'], - expected: [["0xffffffffffffffffffffffffffffffffabdef123849181759adebfadecaefbae", true, "0xffffffffffffffffffffffffffffffffabdef123849181759adebfadecaefbae"], "0x1234567890123456789012345678901234567890" ,["0x0ab3e6dfa1594c15af0000000000000000000000000000000000000000000000","0xffffffffffffffffffffffffffffffffabdef123849181759adebfadecaefbae","string"], [["0x1234567890123456789012345678901234567890", true],["0x1234567890123456789012345678901234567890","0xffffffffffffffffffffffffffffffffabdef123849181759adebfadecaefbae"],["-6124612", "89000"]]], - values: 'ffffffffffffffffffffffffffffffffabdef123849181759adebfadecaefbae' + - '0000000000000000000000000000000000000000000000000000000000000001' + - 'ffffffffffffffffffffffffffffffffabdef123849181759adebfadecaefbae' + - '0000000000000000000000001234567890123456789012345678901234567890' + - '0000000000000000000000000000000000000000000000000000000000000160' + - '0000000000000000000000001234567890123456789012345678901234567890' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000001234567890123456789012345678901234567890' + - 'ffffffffffffffffffffffffffffffffabdef123849181759adebfadecaefbae' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa28bbc' + - '0000000000000000000000000000000000000000000000000000000000015ba8' + - '0ab3e6dfa1594c15af0000000000000000000000000000000000000000000000' + - 'ffffffffffffffffffffffffffffffffabdef123849181759adebfadecaefbae' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '0000000000000000000000000000000000000000000000000000000000000006' + - '737472696e670000000000000000000000000000000000000000000000000000'}) - }); -}); - -describe('/lib/solidity/coder', function() { - describe('decodeParam', function () { - it('should not alter inputs', function () { - const t = { - type: "function", - name: "f", - internalType: "function () external" - }; - const copyOfT = Object.assign({}, t); - coder.decodeParameter(t, '063e4f349a9e91c6575aedab0e70087fab642ecac04062260000000000000000'); //must not alter t! - assert.deepEqual(t, copyOfT); - }); - }); -}); diff --git a/test/abi.encodeParam-ethjs.js_ b/test/abi.encodeParam-ethjs.js_ deleted file mode 100644 index 2ba38f620d5..00000000000 --- a/test/abi.encodeParam-ethjs.js_ +++ /dev/null @@ -1,352 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var coder = require('ethjs-abi'); - - -describe('lib/solidity/coder', function () { - describe('encodeParam', function () { - var test = function (t) { - it('should turn ' + t.value + ' to ' + t.expected, function () { - console.log(); - var result = coder.encodeParams([t.type], [t.value]); - - assert.equal(result, '0x'+ t.expected); - }); - }; - - - test({ type: 'address', value: '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - expected: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1'}); - test({ type: 'address[2]', value: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', '0x407d73d8a49eeb85d32cf465507dd71d507100c3'], - expected: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' }); - test({ type: 'address[]', value: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', '0x407d73d8a49eeb85d32cf465507dd71d507100c3'], - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' }); - test({ type: 'address[][2]', value: [['0x407d73d8a49eeb85d32cf465507dd71d507100c1', '0x407d73d8a49eeb85d32cf465507dd71d507100c2'], - ['0x407d73d8a49eeb85d32cf465507dd71d507100c3', '0x407d73d8a49eeb85d32cf465507dd71d507100c4']], - expected: '0000000000000000000000000000000000000000000000000000000000000040' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c2' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c4' }); - test({ type: 'address[2][]', value: [['0x407d73d8a49eeb85d32cf465507dd71d507100c1', '0x407d73d8a49eeb85d32cf465507dd71d507100c2'], - ['0x407d73d8a49eeb85d32cf465507dd71d507100c3', '0x407d73d8a49eeb85d32cf465507dd71d507100c4']], - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c2' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c4' }); - //test({ type: 'address[][]', value: [['0x407d73d8a49eeb85d32cf465507dd71d507100c5'], - //['0x407d73d8a49eeb85d32cf465507dd71d507100c3']], - //expected: '0000000000000000000000000000000000000000000000000000000000000020' + - //'0000000000000000000000000000000000000000000000000000000000000002' + - //'0000000000000000000000000000000000000000000000000000000000000080' + - //'00000000000000000000000000000000000000000000000000000000000000c0' + - //'0000000000000000000000000000000000000000000000000000000000000001' + - //'000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c5' + - //'0000000000000000000000000000000000000000000000000000000000000001' + - //'000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' }); - //test({ type: 'address[][]', value: [['0x407d73d8a49eeb85d32cf465507dd71d507100cf', '0x407d73d8a49eeb85d32cf465507dd71d507100c2'], - //['0x407d73d8a49eeb85d32cf465507dd71d507100c3', '0x407d73d8a49eeb85d32cf465507dd71d507100c4']], - //expected: '0000000000000000000000000000000000000000000000000000000000000020' + - //'0000000000000000000000000000000000000000000000000000000000000002' + - //'0000000000000000000000000000000000000000000000000000000000000080' + - //'00000000000000000000000000000000000000000000000000000000000000e0' + - //'0000000000000000000000000000000000000000000000000000000000000002' + - //'000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100cf' + - //'000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c2' + - //'0000000000000000000000000000000000000000000000000000000000000002' + - //'000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - //'000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c4' }); - test({ type: 'bool', value: true, expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'bool', value: false, expected: '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bool[1][2]', value: [[false], [false]], - expected: '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bool[2]', value: [true, false], - expected: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bool[]', value: [true, true, false], - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - - test({ type: 'int', value: 1, expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'int', value: 16, expected: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int', value: -1, expected: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - test({ type: 'int', value: 0.1, expected: '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'int', value: 3.9, expected: '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'int256', value: 1, expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'int256', value: 16, expected: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int256', value: -1, expected: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - - test({ type: 'uint', value: 1, expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'uint', value: 16, expected: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint', value: 0.1, expected: '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'uint', value: 3.9, expected: '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'uint256', value: 1, expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'uint256', value: 16, expected: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint256', value: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', - expected: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - test({ type: 'bytes32', value: '0x6761766f66796f726b', - expected: '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ type: 'bytes32', value: '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - expected: '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'bytes32', value: '0x02838654a83c213dae3698391eabbd54a5b6e1fb3452bc7fa4ea0dd5c8ce7e29', - expected: '02838654a83c213dae3698391eabbd54a5b6e1fb3452bc7fa4ea0dd5c8ce7e29'}); - test({ type: 'bytes', value: '0x6761766f66796f726b', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ type: 'bytes', value: '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'bytes', value: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '000000000000000000000000000000000000000000000000000000000000009f' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff100'}); - test({ type: 'string', value: 'gavofyork', expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ type: 'bytes', value: '0xc3a40000c3a4', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000006' + - 'c3a40000c3a40000000000000000000000000000000000000000000000000000'}); - test({ type: 'bytes1', value: '0xc3', - expected: 'c300000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bytes24', value: '0xc3a40000c3a4', - expected: 'c3a40000c3a40000000000000000000000000000000000000000000000000000'}); - - test({ type: 'bytes32', value: '0xc3a40000c3a4', - expected: 'c3a40000c3a40000000000000000000000000000000000000000000000000000'}); - - test({ type: 'string', value: 'ää', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000008' + - 'c383c2a4c383c2a4000000000000000000000000000000000000000000000000'}); - test({ type: 'string', value: 'ü', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - 'c3bc000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'string', value: 'Ã', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - 'c383000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'int[]', value: [], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'int[]', value: [3], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'int256[]', value: [3], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'int[]', value: [1,2,3], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'bytes1[4]', value: ['0xcf', '0x68', '0x4d', '0xfb'], - expected: 'cf00000000000000000000000000000000000000000000000000000000000000' + - '6800000000000000000000000000000000000000000000000000000000000000' + - '4d00000000000000000000000000000000000000000000000000000000000000' + - 'fb00000000000000000000000000000000000000000000000000000000000000'}); - - - - test({ type: 'bytes', value: '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'bytes', value: '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'string', value: 'welcome to ethereum. welcome to ethereum. welcome to ethereum.', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '000000000000000000000000000000000000000000000000000000000000003e' + - '77656c636f6d6520746f20657468657265756d2e2077656c636f6d6520746f20' + - '657468657265756d2e2077656c636f6d6520746f20657468657265756d2e0000'}); - }); -}); - - -describe('lib/solidity/coder', function () { - describe('encodeParams', function () { - var test = function (t) { - it('should turn ' + t.values + ' to ' + t.expected, function () { - - var result = coder.encodeParams(t.types, t.values); - assert.equal(result, '0x'+ t.expected); - }); - }; - - - test({ types: ['address', 'address'], values: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', '0x407d73d8a49eeb85d32cf465507dd71d507100c3'], - expected: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3'}); - test({ types: ['bool[2]', 'bool[3]'], values: [[true, false], [false, false, true]], - expected: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['int'], values: [1], expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['int'], values: [16], expected: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ types: ['int'], values: [-1], expected: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - test({ types: ['int256'], values: [1], expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['int256'], values: [16], expected: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ types: ['int256'], values: [-1], expected: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - test({ types: ['int[]'], values: [[3]], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ types: ['int256[]'], values: [[3]], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ types: ['int256[]'], values: [[1,2,3]], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ types: ['int[]', 'int[]'], values: [[1,2], [3,4]], - expected: '0000000000000000000000000000000000000000000000000000000000000040' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004'}); - test({ types: ['int[]', 'int[]', 'int[]'], values: [[1,2], [3,4], [5,6,7]], - expected: '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000000000000000000000000000000000000000000c0' + - '0000000000000000000000000000000000000000000000000000000000000120' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000006' + - '0000000000000000000000000000000000000000000000000000000000000007'}); - test({ types: ['bytes32'], values: ['0x6761766f66796f726b'], - expected: '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['string'], values: ['gavofyork'], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['string', 'string'], values: ['gavofyork', 'gavofyork'], - expected: '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - - - test({ types: ['bytes32', 'int'], values: ['0x6761766f66796f726b', 5], - expected: '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000005'}); - test({ types: ['int', 'bytes32'], values: [5, '0x6761766f66796f726b'], - expected: '0000000000000000000000000000000000000000000000000000000000000005' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['int', 'string'], values: [5, 'gavofyork'], - expected: '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['string', 'int'], values: ['gavofyork', 5], - expected: '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['string', 'bool', 'int[]'], values: ['gavofyork', true, [1, 2, 3]], - expected: '0000000000000000000000000000000000000000000000000000000000000060' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ types: ['string', 'int[]'], values: ['gavofyork', [1, 2, 3]], - expected: '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ types: ['int', 'string'], values: [5, 'gavofyork'], - expected: '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['int', 'string', 'int', 'int', 'int', 'int[]'], values: [1, 'gavofyork', 2, 3, 4, [5, 6, 7]], - expected: '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000000000000000000000000000000000000000000c0' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000100' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000006' + - '0000000000000000000000000000000000000000000000000000000000000007'}); - test({ types: ['int', 'bytes', 'int', 'bytes'], values: [ - 5, - '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - 3, - '0x331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '431a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - ], - expected: '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '431a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - - test({ types: ['bytes3', 'bytes'], values: ['0xcf0011', '0x4d00000000000000000000000000000000000000000000000000000000000012'], - expected: 'cf00110000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '4d00000000000000000000000000000000000000000000000000000000000012'}); - - }); -}); - - diff --git a/test/abi.encodeParameter.js b/test/abi.encodeParameter.js deleted file mode 100644 index a27f3018ec0..00000000000 --- a/test/abi.encodeParameter.js +++ /dev/null @@ -1,764 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var BN = require('bn.js'); -var BigNumber = require('bignumber.js'); -var coder = require('../packages/web3-eth-abi'); - - -describe('lib/solidity/coder', function () { - describe('encodeParameter', function () { - var test = function (t) { - it('should turn ' + t.value + ' to ' + t.expected + ' for '+ t.type, function () { - assert.equal(coder.encodeParameter(t.type, t.value).replace('0x',''), t.expected); - }); - }; - - - test({ type: 'address', value: '0x407d73d8a49eeb85d32cf465507dd71d507100c1', - expected: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1'}); - test({ type: 'address[2]', value: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', '0x407d73d8a49eeb85d32cf465507dd71d507100c3'], - expected: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' }); - test({ type: 'address[]', value: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', '0x407d73d8a49eeb85d32cf465507dd71d507100c3'], - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' }); - test({ type: 'address[][2]', value: [['0x407d73d8a49eeb85d32cf465507dd71d507100c1', '0x407d73d8a49eeb85d32cf465507dd71d507100c2'], - ['0x407d73d8a49eeb85d32cf465507dd71d507100c3', '0x407d73d8a49eeb85d32cf465507dd71d507100c4']], - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c2' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c4' }); - test({ type: 'address[2][]', value: [['0x407d73d8a49eeb85d32cf465507dd71d507100c1', '0x407d73d8a49eeb85d32cf465507dd71d507100c2'], - ['0x407d73d8a49eeb85d32cf465507dd71d507100c3', '0x407d73d8a49eeb85d32cf465507dd71d507100c4']], - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c2' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c4' }); - //test({ type: 'address[][]', value: [['0x407d73d8a49eeb85d32cf465507dd71d507100c5'], - //['0x407d73d8a49eeb85d32cf465507dd71d507100c3']], - //expected: '0000000000000000000000000000000000000000000000000000000000000020' + - //'0000000000000000000000000000000000000000000000000000000000000002' + - //'0000000000000000000000000000000000000000000000000000000000000080' + - //'00000000000000000000000000000000000000000000000000000000000000c0' + - //'0000000000000000000000000000000000000000000000000000000000000001' + - //'000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c5' + - //'0000000000000000000000000000000000000000000000000000000000000001' + - //'000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' }); - //test({ type: 'address[][]', value: [['0x407d73d8a49eeb85d32cf465507dd71d507100cf', '0x407d73d8a49eeb85d32cf465507dd71d507100c2'], - //['0x407d73d8a49eeb85d32cf465507dd71d507100c3', '0x407d73d8a49eeb85d32cf465507dd71d507100c4']], - //expected: '0000000000000000000000000000000000000000000000000000000000000020' + - //'0000000000000000000000000000000000000000000000000000000000000002' + - //'0000000000000000000000000000000000000000000000000000000000000080' + - //'00000000000000000000000000000000000000000000000000000000000000e0' + - //'0000000000000000000000000000000000000000000000000000000000000002' + - //'000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100cf' + - //'000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c2' + - //'0000000000000000000000000000000000000000000000000000000000000002' + - //'000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3' + - //'000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c4' }); - test({ type: 'bool', value: true, expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'bool', value: false, expected: '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bool[1][2]', value: [[false], [false]], - expected: '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bool[2]', value: [true, false], - expected: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'bool[]', value: [true, true, false], - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - - test({ type: 'int', value: 1, expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'int', value: 16, expected: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int', value: -1, expected: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - // test({ type: 'int', value: 0.1, expected: '0000000000000000000000000000000000000000000000000000000000000000'}); - // test({ type: 'int', value: 3.9, expected: '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'int256', value: 1, expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'int256', value: 16, expected: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'int256', value: -1, expected: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - - test({ type: 'uint', value: 1, expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'uint', value: 16, expected: '0000000000000000000000000000000000000000000000000000000000000010'}); - // test({ type: 'uint', value: 0.1, expected: '0000000000000000000000000000000000000000000000000000000000000000'}); - // test({ type: 'uint', value: 3.9, expected: '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'uint256', value: 1, expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ type: 'uint256', value: 16, expected: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ type: 'uint256', value: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', - expected: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - test({ type: 'bytes32', value: '0x6761766f66796f726b', - expected: '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ type: 'bytes32', value: '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - expected: '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'bytes32', value: '0x02838654a83c213dae3698391eabbd54a5b6e1fb3452bc7fa4ea0dd5c8ce7e29', - expected: '02838654a83c213dae3698391eabbd54a5b6e1fb3452bc7fa4ea0dd5c8ce7e29'}); - test({ type: 'bytes', value: '0x6761766f66796f726b', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ type: 'bytes', value: '0x731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '731a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'bytes', value: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '000000000000000000000000000000000000000000000000000000000000009f' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff100'}); - test({ type: 'string', value: 'gavofyork', expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - - test({ type: 'string', value: 'Heeäööä👅D34ɝɣ24Єͽ-.,äü+#/', - expected: '00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000026486565c3a4c3b6c3b6c3a4f09f9185443334c99dc9a33234d084cdbd2d2e2cc3a4c3bc2b232f0000000000000000000000000000000000000000000000000000'}); - - test({ type: 'bytes', value: '0xc3a40000c3a4', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000006' + - 'c3a40000c3a40000000000000000000000000000000000000000000000000000'}); - test({ type: 'bytes32', value: '0xc3a40000c3a4', - expected: 'c3a40000c3a40000000000000000000000000000000000000000000000000000'}); - test({ type: 'string', value: 'ää', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000008' + - 'c383c2a4c383c2a4000000000000000000000000000000000000000000000000'}); - test({ type: 'string', value: 'ü', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - 'c3bc000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'string', value: 'Ã', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - 'c383000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'int[]', value: [], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000000'}); - test({ type: 'int[]', value: [3], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'int256[]', value: [3], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'int[]', value: [1,2,3], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ type: 'bytes1[4]', value: ['0xcf', '0x68', '0x4d', '0xfb'], - expected: 'cf00000000000000000000000000000000000000000000000000000000000000' + - '6800000000000000000000000000000000000000000000000000000000000000' + - '4d00000000000000000000000000000000000000000000000000000000000000' + - 'fb00000000000000000000000000000000000000000000000000000000000000'}); - - - - test({ type: 'bytes', value: '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'bytes', value: '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ type: 'string', value: 'welcome to ethereum. welcome to ethereum. welcome to ethereum.', - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '000000000000000000000000000000000000000000000000000000000000003e' + - '77656c636f6d6520746f20657468657265756d2e2077656c636f6d6520746f20' + - '657468657265756d2e2077656c636f6d6520746f20657468657265756d2e0000'}); - test({ - type: 'tuple(string,string)', - value: ["welcome to ethereum.", "welcome to ethereum."], - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000014' + - '77656c636f6d6520746f20657468657265756d2e000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000014' + - '77656c636f6d6520746f20657468657265756d2e000000000000000000000000' }) - test({ - type: 'tuple(bytes,bytes)', - value: ["0x77656c636f6d6520746f20657468657265756d2e", "0x77656c636f6d6520746f20657468657265756d2e"], - expected: - '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000014' + - '77656c636f6d6520746f20657468657265756d2e000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000014' + - '77656c636f6d6520746f20657468657265756d2e000000000000000000000000' }) - test({ - type: 'tuple(bytes,bool,uint256)', - value: ["0x77656c636f6d6520746f20657468657265756d2e", true, 124515], - expected: - '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '000000000000000000000000000000000000000000000000000000000001e663' + - '0000000000000000000000000000000000000000000000000000000000000014' + - '77656c636f6d6520746f20657468657265756d2e000000000000000000000000' }) - test({ - type: 'tuple(string,tuple(bool,int256),address)', - value: ["hello", [true,-151], "0x0175010374017501037401750103740175010374"], - expected: - '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000001' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff69' + - '0000000000000000000000000175010374017501037401750103740175010374' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '68656c6c6f000000000000000000000000000000000000000000000000000000' }) - test({ - type: 'tuple(tuple(bool,bool),tuple(address,address),tuple(string,string))', - value: [[true, false],["0x81017589ab81017589ab81017589ab81017589ab", "0x81017589ab81017589ab81017589ab81017589ab"],["string One", "string Two"]], - expected: - '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '00000000000000000000000081017589ab81017589ab81017589ab81017589ab' + - '00000000000000000000000081017589ab81017589ab81017589ab81017589ab' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '000000000000000000000000000000000000000000000000000000000000000a' + - '737472696e67204f6e6500000000000000000000000000000000000000000000' + - '000000000000000000000000000000000000000000000000000000000000000a' + - '737472696e672054776f00000000000000000000000000000000000000000000'}) - test({ - type: 'tuple(tuple(tuple(bool,bool),tuple(bytes,bytes),tuple(address,bool)),address)', - value: [[[false, false],["0xab1394581edfa2ef9ca71", "0x15abe391df19aef19a4561"],["0xec2270c849236333c86834728e783cd2f789088e", true]], "0x81017589ab81017589ab81017589ab81017589ab"], - expected: - '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '00000000000000000000000081017589ab81017589ab81017589ab81017589ab' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '000000000000000000000000ec2270c849236333c86834728e783cd2f789088e' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '000000000000000000000000000000000000000000000000000000000000000b' + - '0ab1394581edfa2ef9ca71000000000000000000000000000000000000000000' + - '000000000000000000000000000000000000000000000000000000000000000b' + - '15abe391df19aef19a4561000000000000000000000000000000000000000000' }) - test({ - type: 'tuple(bool,string,bool,tuple(address,address))', - value: [true, "testing", false, ["0x1981710abe1981710abe1981710abe1981710abe", "0x1981710abe1981710abe1981710abe1981710abe"]], - expected: - '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000001981710abe1981710abe1981710abe1981710abe' + - '0000000000000000000000001981710abe1981710abe1981710abe1981710abe' + - '0000000000000000000000000000000000000000000000000000000000000007' + - '74657374696e6700000000000000000000000000000000000000000000000000' }) - test({ - type: 'tuple(address,address,tuple(string,tuple(int256,int256),string))', - value: ["0x1981710abe1981710abe1981710abe1981710abe", "0x1981710abe1981710abe1981710abe1981710abe", ["structs are great", [-1951, 194018], "so many possibilities"]], - expected: - '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000001981710abe1981710abe1981710abe1981710abe' + - '0000000000000000000000001981710abe1981710abe1981710abe1981710abe' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '0000000000000000000000000000000000000000000000000000000000000080' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861' + - '000000000000000000000000000000000000000000000000000000000002f5e2' + - '00000000000000000000000000000000000000000000000000000000000000c0' + - '0000000000000000000000000000000000000000000000000000000000000011' + - '7374727563747320617265206772656174000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000015' + - '736f206d616e7920706f73736962696c69746965730000000000000000000000' }) - test({ - type: 'tuple(bool,tuple(bytes32,int256,tuple(bytes24,bytes8)),tuple(bool,bool,bool),string)', - value: [true, ["0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18", -18291849, ["0xabdef18710a18a18abdef18710a18a18abdef18710a18a18","0xabdef18710a18a18"]], [false, true, false], "testing testing"], - expected: - '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - 'abdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffee8e377' + - 'abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000' + - 'abdef18710a18a18000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000120' + - '000000000000000000000000000000000000000000000000000000000000000f' + - '74657374696e672074657374696e670000000000000000000000000000000000' }); - test({ - type: 'tuple(bool,tuple(bytes32,int256,tuple(bytes24,bytes8)),tuple(bool,bool,bool),string)', - value: [true, ["0xabdef", -18291849, ["0xabdef18710a18a18abdef18710a18a18abdef18710a18a18","0xabdef18710a18a18"]], [false, true, false], "testing testing"], - expected: - '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - 'abdef00000000000000000000000000000000000000000000000000000000000' + - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffee8e377' + - 'abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000' + - 'abdef18710a18a18000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000120' + - '000000000000000000000000000000000000000000000000000000000000000f' + - '74657374696e672074657374696e670000000000000000000000000000000000' }); - test({ - type: 'uint256', - value: new BN(42), - expected: '000000000000000000000000000000000000000000000000000000000000002a' - }); - test({ - type: 'uint256', - value: new BigNumber(42), - expected: '000000000000000000000000000000000000000000000000000000000000002a' - }); - test({ - type: 'uint256[]', - value: ['42'], - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '000000000000000000000000000000000000000000000000000000000000002a' - }); - test({ - type: 'uint256[]', - value: [new BN(42)], - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '000000000000000000000000000000000000000000000000000000000000002a' - }); - test({ - type: 'uint256[]', - value: [new BigNumber(42)], - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '000000000000000000000000000000000000000000000000000000000000002a' - }); - test({ - type: 'uint256[]', - value: [new BN(42), new BN(42)], - expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '000000000000000000000000000000000000000000000000000000000000002a' + - '000000000000000000000000000000000000000000000000000000000000002a' - }); - }); -}); - - -describe('lib/solidity/coder', function () { - describe('encodeParameters', function () { - var test = function (t) { - it('should turn ' + t.values + ' to ' + t.expected, function () { - assert.equal(coder.encodeParameters(t.types, t.values).replace('0x',''), t.expected); - }); - }; - - - test({ types: ['address', 'address'], values: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1', '0x407d73d8a49eeb85d32cf465507dd71d507100c3'], - expected: '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1' + - '000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c3'}); - test({ types: ['bool[2]', 'bool[3]'], values: [[true, false], [false, false, true]], - expected: '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['int'], values: [1], expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['int'], values: [16], expected: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ types: ['int'], values: [-1], expected: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - test({ types: ['int256'], values: [1], expected: '0000000000000000000000000000000000000000000000000000000000000001'}); - test({ types: ['int256'], values: [16], expected: '0000000000000000000000000000000000000000000000000000000000000010'}); - test({ types: ['int256'], values: [-1], expected: 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}); - test({ types: ['int[]'], values: [[3]], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ types: ['int256[]'], values: [[3]], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ types: ['int256[]'], values: [[1,2,3]], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ types: ['int[]', 'int[]'], values: [[1,2], [3,4]], - expected: '0000000000000000000000000000000000000000000000000000000000000040' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004'}); - test({ types: ['int[]', 'int[]', 'int[]'], values: [[1,2], [3,4], [5,6,7]], - expected: '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000000000000000000000000000000000000000000c0' + - '0000000000000000000000000000000000000000000000000000000000000120' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000006' + - '0000000000000000000000000000000000000000000000000000000000000007'}); - test({ types: ['bytes32'], values: ['0x6761766f66796f726b'], - expected: '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['string'], values: ['gavofyork'], expected: '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['string', 'string'], values: ['gavofyork', 'gavofyork'], - expected: '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - - - test({ types: ['bytes32', 'int'], values: ['0x6761766f66796f726b', 5], - expected: '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000005'}); - test({ types: ['int', 'bytes32'], values: [5, '0x6761766f66796f726b'], - expected: '0000000000000000000000000000000000000000000000000000000000000005' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['int', 'string'], values: [5, 'gavofyork'], - expected: '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['string', 'int'], values: ['gavofyork', 5], - expected: '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['string', 'bool', 'int[]'], values: ['gavofyork', true, [1, 2, 3]], - expected: '0000000000000000000000000000000000000000000000000000000000000060' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ types: ['string', 'int[]'], values: ['gavofyork', [1, 2, 3]], - expected: '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003'}); - test({ types: ['int', 'string'], values: [5, 'gavofyork'], - expected: '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000'}); - test({ types: ['int', 'string', 'int', 'int', 'int', 'int[]'], values: [1, 'gavofyork', 2, 3, 4, [5, 6, 7]], - expected: '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000000000000000000000000000000000000000000c0' + - '0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000100' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '6761766f66796f726b0000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000006' + - '0000000000000000000000000000000000000000000000000000000000000007'}); - test({ types: ['int', 'bytes', 'int', 'bytes'], values: [ - 5, - '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - 3, - '0x331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '431a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b', - ], - expected: '0000000000000000000000000000000000000000000000000000000000000005' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000003' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '231a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '331a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b' + - '431a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'}); - test({ types: ['bytes3', 'bytes'], values: ['0xcf0011', '0x4d00000000000000000000000000000000000000000000000000000000000012'], - expected: 'cf00110000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '4d00000000000000000000000000000000000000000000000000000000000012'}); - test({ - types: ['string', 'tuple(string,string)'], - values: ["what", ["what what", "what what"]], - expected: '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '7768617400000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '7768617420776861740000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000009' + - '7768617420776861740000000000000000000000000000000000000000000000'}) - test({ - types: ['tuple(bytes32,bool)', 'tuple(bool,address)'], - values: [["0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18", true], [true, "0x77656c636f6d6520746f20657468657265756d2e"]], - expected: 'abdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e'}) - test({ - types: ['tuple(bytes32,bool)', 'tuple(bool,address)'], - values: [["0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18", true], [true, "0x77656c636f6d6520746f20657468657265756d2e"]], - expected: 'abdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e'}) - test({ - types: ['tuple(address,uint256)', 'tuple(uint256,bool)', 'tuple(bytes32,bytes32)'], - values: [["0x77656c636f6d6520746f20657468657265756d2e", "148"],["5910", true],["0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18", "0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18"]], - expected: '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '0000000000000000000000000000000000000000000000000000000000000094' + - '0000000000000000000000000000000000000000000000000000000000001716' + - '0000000000000000000000000000000000000000000000000000000000000001' + - 'abdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18' + - 'abdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18' }) - - test({ - types: ['tuple(tuple(address,address),tuple(bool,bool))', 'tuple(tuple(bool,bool),tuple(bytes,bytes),tuple(uint256,uint256))', 'address'], - values: [[["0x77656c636f6d6520746f20657468657265756d2e", "0x77656c636f6d6520746f20657468657265756d2e"], [true, false]], [[false, true],["0xab1394581edfa2ef9ca71","0x15abe391df19aef19a4561"],["182", "1937"]], "0x77656c636f6d6520746f20657468657265756d2e"], - expected: '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '00000000000000000000000000000000000000000000000000000000000000c0' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '00000000000000000000000000000000000000000000000000000000000000b6' + - '0000000000000000000000000000000000000000000000000000000000000791' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '000000000000000000000000000000000000000000000000000000000000000b' + - '0ab1394581edfa2ef9ca71000000000000000000000000000000000000000000' + - '000000000000000000000000000000000000000000000000000000000000000b' + - '15abe391df19aef19a4561000000000000000000000000000000000000000000' }) - - test({ - types: ['tuple(tuple(uint256,bool),tuple(uint256,tuple(bytes,bytes)))', 'bytes', 'tuple(bool,tuple(bytes,address),bytes)'], - values: [[["18320", true],["691", ["0xab1394581edfa2ef9ca71", "0x15abe391df19aef19a4561"]]], "0xab1394581edfa2ef9ca71", [false, ["0xfe", "0x77656c636f6d6520746f20657468657265756d2e"], "0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18"]], - expected: '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000000000000000000000000000000000000000001c0' + - '0000000000000000000000000000000000000000000000000000000000000200' + - '0000000000000000000000000000000000000000000000000000000000004790' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000000000000000000000000000000000000000002b3' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '000000000000000000000000000000000000000000000000000000000000000b' + - '0ab1394581edfa2ef9ca71000000000000000000000000000000000000000000' + - '000000000000000000000000000000000000000000000000000000000000000b' + - '15abe391df19aef19a4561000000000000000000000000000000000000000000' + - '000000000000000000000000000000000000000000000000000000000000000b' + - '0ab1394581edfa2ef9ca71000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '0000000000000000000000000000000000000000000000000000000000000001' + - 'fe00000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000020' + - 'abdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18' }) - - test({ - types: ['address', 'tuple(bool,tuple(address,address))', 'tuple(tuple(address,tuple(int256,int256)),bool)'], - values: ["0x77656c636f6d6520746f20657468657265756d2e", [true,["0x77656c636f6d6520746f20657468657265756d2e", "0x77656c636f6d6520746f20657468657265756d2e"]], [["0x77656c636f6d6520746f20657468657265756d2e", ["-12451", "-12451018"]], false]], - expected: '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf5d' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff420336' + - '0000000000000000000000000000000000000000000000000000000000000000' }) - - test({ - types: ['bytes', 'tuple(tuple(bool,bool,bool),tuple(bytes,bytes,bytes),tuple(bytes,bool,address),tuple(uint256,int256,address))', 'tuple(bytes,tuple(tuple(int256,bool),tuple(uint256,bytes)))'], - values: ["0xabef15", [[true, false, true], ["0xabef15", "0xcdef151", "0xabfe151"],["0x15abe391df19aef19a4561", true, "0x77656c636f6d6520746f20657468657265756d2e"],["1840181", "-819184919", "0x77656c636f6d6520746f20657468657265756d2e"]], ["0x77656c636f6d6520746f20657468657265756d2e", [["-18491",false],["1918491", "0xabdcf151dae"]]]], - expected: '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '0000000000000000000000000000000000000000000000000000000000000360' + - '0000000000000000000000000000000000000000000000000000000000000003' + - 'abef150000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000100' + - '0000000000000000000000000000000000000000000000000000000000000220' + - '00000000000000000000000000000000000000000000000000000000001c1435' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf2c3ae9' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000003' + - 'abef150000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0cdef15100000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000004' + - '0abfe15100000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '000000000000000000000000000000000000000000000000000000000000000b' + - '15abe391df19aef19a4561000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000014' + - '77656c636f6d6520746f20657468657265756d2e000000000000000000000000' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb7c5' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000000000000000000000000000000000000001d461b' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000006' + - '0abdcf151dae0000000000000000000000000000000000000000000000000000' }) - - test({ - types: ['tuple(bytes,tuple(address,address))', 'tuple(address,address,address,bytes,address)', 'tuple(address,tuple(address,tuple(address,bool)))'], - values: [["0xabef15",["0x77656c636f6d6520746f20657468657265756d2e", "0x77656c636f6d6520746f20657468657265756d2e"]],["0x77656c636f6d6520746f20657468657265756d2e", "0x77656c636f6d6520746f20657468657265756d2e", "0x77656c636f6d6520746f20657468657265756d2e", "0xabef15", "0x77656c636f6d6520746f20657468657265756d2e"],["0x81017589ab81017589ab81017589ab81017589ab",["0x77656c636f6d6520746f20657468657265756d2e",["0x81017589ab81017589ab81017589ab81017589ab", false]]]], - expected: '00000000000000000000000000000000000000000000000000000000000000c0' + - '0000000000000000000000000000000000000000000000000000000000000160' + - '00000000000000000000000081017589ab81017589ab81017589ab81017589ab' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '00000000000000000000000081017589ab81017589ab81017589ab81017589ab' + - '0000000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '0000000000000000000000000000000000000000000000000000000000000003' + - 'abef150000000000000000000000000000000000000000000000000000000000' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '00000000000000000000000077656c636f6d6520746f20657468657265756d2e' + - '0000000000000000000000000000000000000000000000000000000000000003' + - 'abef150000000000000000000000000000000000000000000000000000000000' }) - - test({ - types: ['tuple(bytes,bytes)', 'bytes', 'tuple(tuple(bytes),tuple(bytes,bytes),tuple(bytes,bytes,bytes))'], - values: [["0xabef15", "0xa"], "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", [["0xaf"],["0xaf", "0xbc"],["0xaf", "0xbc", "0xde"]]], - expected: '0000000000000000000000000000000000000000000000000000000000000060' + - '0000000000000000000000000000000000000000000000000000000000000120' + - '0000000000000000000000000000000000000000000000000000000000000160' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000003' + - 'abef150000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0a00000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000020' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000000000000000000000000000000000000000000c0' + - '0000000000000000000000000000000000000000000000000000000000000180' + - '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - 'af00000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000040' + - '0000000000000000000000000000000000000000000000000000000000000080' + - '0000000000000000000000000000000000000000000000000000000000000001' + - 'af00000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001' + - 'bc00000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000060' + - '00000000000000000000000000000000000000000000000000000000000000a0' + - '00000000000000000000000000000000000000000000000000000000000000e0' + - '0000000000000000000000000000000000000000000000000000000000000001' + - 'af00000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001' + - 'bc00000000000000000000000000000000000000000000000000000000000000' + - '0000000000000000000000000000000000000000000000000000000000000001' + - 'de00000000000000000000000000000000000000000000000000000000000000' }) - test({ - types: ['uint256', 'uint256'], - values: [new BN(42), new BN(42)], - expected: '000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a' - }); - test({ - types: ['uint256', 'uint256'], - values: [new BigNumber(42), new BigNumber(42)], - expected: '000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a' - }); - test({ - types: ['bytes', 'bytes32'], - values: [Buffer.from('cool'), Buffer.from('beans')], - expected: '00000000000000000000000000000000000000000000000000000000000000406265616e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004636f6f6c00000000000000000000000000000000000000000000000000000000' - }); - test({ - types: ['bytes6', 'bytes12'], - values: [Buffer.from('super'), Buffer.from('man')], - expected: '73757065720000000000000000000000000000000000000000000000000000006d616e0000000000000000000000000000000000000000000000000000000000' - }); - test({ - types: ['bytes12[]'], - values: [[Buffer.from('buff'), Buffer.from('man')]], - expected: '0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000262756666000000000000000000000000000000000000000000000000000000006d616e0000000000000000000000000000000000000000000000000000000000' - }); - test({ - types: ['uint16', 'uint24'], - values: ['10000', '100000'], - expected: '000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000186a0' - }); - test({ - types: ['tuple(string,uint)'], - values: [['item1', 2]], - expected: '00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000056974656d31000000000000000000000000000000000000000000000000000000' - }); - test({ - types: ['tuple(string,uint)[]'], - values: [[['item1', 2], ['item2', 3]]], - expected: '00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000056974656d310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000056974656d32000000000000000000000000000000000000000000000000000000' - }); - test({ - types: ['tuple(string,uint16)[]'], - values: [[['item1', 2], ['item2', 3]]], - expected: '00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000056974656d310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000056974656d32000000000000000000000000000000000000000000000000000000' - }); - }); -}); - - diff --git a/test/async.js b/test/async.js deleted file mode 100644 index 910ed2d5d96..00000000000 --- a/test/async.js +++ /dev/null @@ -1,132 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Web3 = require('../packages/web3'); -var FakeHttpProvider = require('./helpers/FakeIpcProvider'); - -var web3 = new Web3(); - -// use sendTransaction as dummy -var method = 'call'; - -var tests = [{ - input: { - 'from': 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', - 'to': 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS' - }, - formattedInput: [{ - 'from': '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', - 'to': '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8' - }, 'latest'], - result: '0xb', - formattedResult: '0xb', - call: 'eth_'+ method -}]; - -describe('async', function () { - tests.forEach(function (test, index) { - it('test callback: ' + index, function (done) { - - // given - var provider = new FakeHttpProvider(); - web3.setProvider(provider); - provider.injectResult(test.result); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, test.call); - assert.deepEqual(payload.params, test.formattedInput); - }); - - // when - web3.eth[method](test.input, function(error, result){ - - // then - assert.isNull(error); - assert.strictEqual(test.formattedResult, result); - - done(); - }); - - }); - - it('test promise: ' + index, function (done) { - - // given - var provider = new FakeHttpProvider(); - web3.setProvider(provider); - provider.injectResult(test.result); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, test.call); - assert.deepEqual(payload.params, test.formattedInput); - }); - - // when - web3.eth[method](test.input) - .then(function(result){ - - // then - assert.strictEqual(test.formattedResult, result); - - done(); - }); - - }); - - it('error test callback: ' + index, function (done) { - - // given - var provider = new FakeHttpProvider(); - web3.setProvider(provider); - provider.injectError({ - message: test.result, - code: -32603 - }); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, test.call); - assert.deepEqual(payload.params, test.formattedInput); - }); - - // when - web3.eth[method](test.input, function(error, result){ - - // then - assert.isUndefined(result); - assert.strictEqual(test.formattedResult, error.message); - - done(); - }).catch(function () { - - }); - - }); - - it('error test promise: ' + index, function (done) { - - // given - var provider = new FakeHttpProvider(); - web3.setProvider(provider); - provider.injectError({ - message: test.result, - code: -32603 - }); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, test.call); - assert.deepEqual(payload.params, test.formattedInput); - }); - - // when - web3.eth[method](test.input) - .catch(function(error){ - - // then - assert.strictEqual(test.formattedResult, error.message); - - done(); - }); - - }); - }); -}); - diff --git a/test/batch.js b/test/batch.js deleted file mode 100644 index 02e1798ce46..00000000000 --- a/test/batch.js +++ /dev/null @@ -1,323 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Web3 = require('../packages/web3'); -var FakeIpcProvider = require('./helpers/FakeIpcProvider'); - - - -describe('lib/web3/batch', function () { - describe('execute', function () { - it('should execute batch request', function (done) { - - var provider = new FakeIpcProvider(); - var web3 = new Web3(provider); - - var result = '0x126'; - var resultVal = '294'; - var result2 = '0x127'; - var result2Val = '295'; - provider.injectBatchResults([result, result2]); - - var counter = 0; - var callback = function (err, r) { - counter++; - assert.deepEqual(r, resultVal); - }; - - var callback2 = function (err, r) { - assert.equal(counter, 1); - assert.deepEqual(r, result2Val); - done(); - }; - - provider.injectValidation(function (payload) { - var first = payload[0]; - var second = payload[1]; - - assert.equal(first.method, 'eth_getBalance'); - assert.deepEqual(first.params, ['0x0000000000000000000000000000000000000000', 'latest']); - assert.equal(second.method, 'eth_getBalance'); - assert.deepEqual(second.params, ['0x0000000000000000000000000000000000000005', 'latest']); - }); - - var batch = new web3.BatchRequest(); - batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback)); - batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000005', 'latest', callback2)); - batch.execute(); - }); - - it('should execute batch request for async properties', function (done) { - - var provider = new FakeIpcProvider(); - var web3 = new Web3(provider); - - var result = []; - var result2 = '0xb'; - provider.injectBatchResults([result, result2]); - - var counter = 0; - var callback = function (err, r) { - counter++; - assert.isArray(result, r); - }; - - var callback2 = function (err, r) { - assert.equal(counter, 1); - assert.equal(r, 11); - done(); - }; - - provider.injectValidation(function (payload) { - var first = payload[0]; - var second = payload[1]; - - assert.equal(first.method, 'eth_accounts'); - assert.deepEqual(first.params, []); - assert.equal(second.method, 'shh_post'); - assert.deepEqual(second.params, [{}]); - }); - - var batch = new web3.BatchRequest(); - batch.add(web3.eth.getAccounts.request(callback)); - batch.add(web3.shh.post.request({}, callback2)); - batch.execute(); - }); - - it('should execute batch request with contract', function (done) { - - var provider = new FakeIpcProvider(); - var web3 = new Web3(provider); - - var abi = [{ - "name": "balance", - "type": "function", - "inputs": [{ - "name": "who", - "type": "address" - }], - "constant": true, - "outputs": [{ - "name": "value", - "type": "uint256" - }] - }]; - - - var address = '0x1000000000000000000000000000000000000001'; - var result = '0x126'; - var resultVal = '294'; - var result2 = '0x0000000000000000000000000000000000000000000000000000000000000123'; - var result2Val = '291'; - - var counter = 0; - var callback = function (err, r) { - counter++; - assert.deepEqual(r, resultVal); - }; - - var callback2 = function (err, r) { - assert.equal(counter, 1); - assert.deepEqual(r, result2Val); - }; - - var callback3 = function (err, r) { - counter++; - assert.equal(counter, 2); - assert.deepEqual(r, result2Val); - done(); - }; - - provider.injectValidation(function (payload) { - - - assert.equal(payload[0].method, 'eth_getBalance'); - assert.deepEqual(payload[0].params, ['0x0000000000000000000000000000000000000022', 'latest']); - - assert.equal(payload[1].method, 'eth_call'); - assert.deepEqual(payload[1].params, [{ - 'to': '0x1000000000000000000000000000000000000001', - 'data': '0xe3d670d70000000000000000000000001000000000000000000000000000000000000001' - }, - 'latest' // default block - ]); - - assert.equal(payload[2].method, 'eth_call'); - assert.deepEqual(payload[2].params, [{ - 'to': '0x1000000000000000000000000000000000000001', - 'from': '0x1000000000000000000000000000000000000002', - 'data': '0xe3d670d70000000000000000000000001000000000000000000000000000000000000001' - }, - 'latest' // default block - ]); - - assert.equal(payload[3].method, 'eth_call'); - assert.deepEqual(payload[3].params, [{ - 'to': '0x1000000000000000000000000000000000000001', - 'from': '0x1000000000000000000000000000000000000003', - 'data': '0xe3d670d70000000000000000000000001000000000000000000000000000000000000001' - }, - '0xa' // default block - ]); - - assert.equal(payload[4].method, 'eth_call'); - assert.deepEqual(payload[4].params, [{ - 'to': '0x1000000000000000000000000000000000000001', - 'data': '0xe3d670d70000000000000000000000001000000000000000000000000000000000000001' - }, - '0xa' // default block - ]); - }); - - - var batch = new web3.BatchRequest(); - batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000022', 'latest', callback)); - batch.add(new web3.eth.Contract(abi, address).methods.balance(address).call.request(callback2)); - batch.add(new web3.eth.Contract(abi, address).methods.balance(address).call.request({from: '0x1000000000000000000000000000000000000002'}, callback2)); - batch.add(new web3.eth.Contract(abi, address).methods.balance(address).call.request({from: '0x1000000000000000000000000000000000000003'}, 10, callback2)); - batch.add(new web3.eth.Contract(abi, address).methods.balance(address).call.request(10, callback3)); - provider.injectBatchResults([result, result2, result2, result2, result2]); - batch.execute(); - }); - - it('should execute batch requests and receive errors', function (done) { - - var provider = new FakeIpcProvider(); - var web3 = new Web3(provider); - - var abi = [{ - "name": "balance", - "type": "function", - "inputs": [{ - "name": "who", - "type": "address" - }], - "constant": true, - "outputs": [{ - "name": "value", - "type": "uint256" - }] - }]; - - - var address = '0x1000000000000000000000000000000000000001'; - var result = 'Something went wrong'; - var result2 = 'Something went wrong 2'; - - - var counter = 0; - var callback = function (err, r) { - counter++; - assert.isNotNull(err); - }; - - var callback2 = function (err, r) { - assert.equal(counter, 1); - assert.isNotNull(err); - done(); - }; - - provider.injectValidation(function (payload) { - var first = payload[0]; - var second = payload[1]; - - assert.equal(first.method, 'eth_getBalance'); - assert.deepEqual(first.params, ['0x0000000000000000000000000000000000000000', 'latest']); - assert.equal(second.method, 'eth_call'); - assert.deepEqual(second.params, [{ - 'to': '0x1000000000000000000000000000000000000001', - 'from': '0x0000000000000000000000000000000000000000', - 'data': '0xe3d670d70000000000000000000000001000000000000000000000000000000000000001' - }, - '0xa']); - }); - - var batch = new web3.BatchRequest(); - batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback)); - batch.add(new web3.eth.Contract(abi, address).methods.balance(address).call.request({from: '0x0000000000000000000000000000000000000000'}, 10, callback2)); - provider.injectBatchResults([result, result2], true); // injects error - batch.execute(); - }); - - it('should propagate output formatter error to callback', function(done) { - const provider = new FakeIpcProvider(); - const web3 = new Web3(provider); - - const abi = [{ - name: 'symbol', - type: 'function', - inputs: [], - constant: true, - outputs: [{ - name: 'symbol', - type: 'string' - }] - }]; - - const address = '0x1000000000000000000000000000000000000001'; - const result = '0x0000000000000000000000000000000000000000000000000000000000000123'; - - const callback = (err, _r) => { - assert.isNotNull(err); - done(); - }; - - provider.injectValidation((payload) => { - assert.equal(payload[0].method, 'eth_call'); - assert.deepEqual(payload[0].params, [{ - to: '0x1000000000000000000000000000000000000001', - data: '0x95d89b41' - }, - 'latest']); - }); - - const batch = new web3.BatchRequest(); - batch.add(new web3.eth.Contract(abi, address) - .methods.symbol() - .call.request(callback)); - provider.injectBatchResults([result]); // no explicit error, it'll be thrown when formatting - batch.execute(); - }); - - it('should execute batch request with provider that supports sendAsync', function (done) { - - var provider = new FakeIpcProvider(); - var web3 = new Web3(provider); - - provider.sendAsync = provider.send - provider.send = () => { throw new Error('send was called instead of sendAsync') } - var result = '0x126'; - var resultVal = '294'; - var result2 = '0x127'; - var result2Val = '295'; - provider.injectBatchResults([result, result2]); - - var counter = 0; - var callback = function (err, r) { - counter++; - assert.deepEqual(r, resultVal); - }; - - var callback2 = function (err, r) { - assert.equal(counter, 1); - assert.deepEqual(r, result2Val); - done(); - }; - - provider.injectValidation(function (payload) { - var first = payload[0]; - var second = payload[1]; - - assert.equal(first.method, 'eth_getBalance'); - assert.deepEqual(first.params, ['0x0000000000000000000000000000000000000000', 'latest']); - assert.equal(second.method, 'eth_getBalance'); - assert.deepEqual(second.params, ['0x0000000000000000000000000000000000000005', 'latest']); - }); - - var batch = new web3.BatchRequest(); - batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback)); - batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000005', 'latest', callback2)); - batch.execute(); - }); - - }); -}); diff --git a/test/config/ensAddresses.json b/test/config/ensAddresses.json deleted file mode 100644 index 8bc57225223..00000000000 --- a/test/config/ensAddresses.json +++ /dev/null @@ -1 +0,0 @@ -{"registry":"0xDC9fdC7554013F17eBDEAFD00F5027373a42D006","resolver":"0xCBbB6622a8A1c97fdA8e314b3812E53b33443799","fifsRegistrar":"0x78331aC1b53ea39A5b442A5c8656b556abCA7FeB","reverseRegistrar":"0x003A653191147bF09880aA162b30956AF3714AC1"} \ No newline at end of file diff --git a/test/contract.encodeABI.js b/test/contract.encodeABI.js deleted file mode 100644 index 00b1b8a1e02..00000000000 --- a/test/contract.encodeABI.js +++ /dev/null @@ -1,108 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Eth = require('../packages/web3-eth'); -var sha3 = require('../packages/web3-utils').sha3; -var FakeIpcProvider = require('./helpers/FakeIpcProvider'); -var FakeHttpProvider = require('./helpers/FakeHttpProvider'); - -var abi = [ - { - constant: true, - inputs: [ - { - name: "a", - type: "bytes32" - }, - { - name: "b", - type: "bytes32" - } - ], - name: "takesTwoBytes32", - outputs: [ - { - name: "", - type: "bytes32" - } - ], - payable: false, - type: "function", - stateMutability: "view", - gas: 175875 - } -]; - -describe('contract', function () { - describe('method.encodeABI', function () { - it('should handle bytes32 arrays that only contain 1 byte', function () { - var provider = new FakeIpcProvider(); - var eth = new Eth(provider); - - var contract = new eth.Contract(abi); - - var result = contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(2)), '0x'.concat('b'.repeat(2))).encodeABI(); - - assert.equal(result, [ - '0x1323517e', - 'aa00000000000000000000000000000000000000000000000000000000000000', - 'bb00000000000000000000000000000000000000000000000000000000000000' - ].join('')); - }); - - it('should handle bytes32 arrays that are short 1 byte', function () { - var provider = new FakeIpcProvider(); - var eth = new Eth(provider); - - var contract = new eth.Contract(abi); - - var result = contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(62)), '0x'.concat('b'.repeat(62))).encodeABI(); - - assert.equal(result, [ - '0x1323517e', - 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa00', - 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00' - ].join('')); - }); - - // it('should throw an exception on bytes32 arrays that have an invalid length', function () { - // var provider = new FakeIpcProvider(); - // var eth = new Eth(provider); - // - // var contract = new eth.Contract(abi); - // - // var test = function () { - // return contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(63)), '0x'.concat('b'.repeat(63))).encodeABI(); - // }; - // - // assert.throws(test, 'Given parameter bytes has an invalid length: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"'); - // }); - - it('should handle bytes32 arrays that are full', function () { - var provider = new FakeIpcProvider(); - var eth = new Eth(provider); - - var contract = new eth.Contract(abi); - - var result = contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(64)), '0x'.concat('b'.repeat(64))).encodeABI(); - - assert.equal(result, [ - '0x1323517e', - 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', - 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' - ].join('')); - }); - - // it('should throw an exception on bytes32 arrays that are too long', function () { - // var provider = new FakeIpcProvider(); - // var eth = new Eth(provider); - // - // var contract = new eth.Contract(abi); - // - // var test = function() { - // contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(66)), '0x'.concat('b'.repeat(66))).encodeABI(); - // }; - // - // assert.throws(test, 'Given parameter bytes is too long: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"'); - // }); - }); -}); diff --git a/test/contract.errors.js b/test/contract.errors.js deleted file mode 100644 index eeb57586588..00000000000 --- a/test/contract.errors.js +++ /dev/null @@ -1,179 +0,0 @@ -const assert = require('assert'); -const Eth = require('../packages/web3-eth'); -const FakeIpcProvider = require('./helpers/FakeIpcProvider'); - -const abi = [{ - name: "simpleMethod", - payable: false, - constant: true, - type: "function", - stateMutability: "view", - inputs: [{ name: "a", type: "bytes32" }], - outputs: [{ name: "b", type: "bytes32" }], -}]; - -describe('contract: errors', function () { - let provider; - let eth; - const contractAddress = '0xEE221E529cF6DB20179E7bAeb4442e9CbdCa83d7'; - - before(function () { - provider = new FakeIpcProvider(); - eth = new Eth(provider); - }) - - it('errors when no ABI is provided', function () { - const expected = 'You must provide the json interface of the ' + - 'contract when instantiating a contract object.'; - - try { - new eth.Contract(); - assert.fail(); - } catch (err) { - assert(err.message.includes(expected)); - } - }) - - it('errors when provided ABI is not array', function () { - const expected = 'You must provide the json interface of the ' + - 'contract when instantiating a contract object.'; - - try { - new eth.Contract({}); - assert.fail(); - } catch (err) { - assert(err.message.includes(expected)); - } - }) - - it('errors when event listener is not provided with callback', function () { - const expected = 'Once requires a callback as the second parameter'; - const contract = new eth.Contract(abi); - - try { - contract.once('data'); - assert.fail(); - } catch (err) { - assert(err.message.includes(expected)); - } - }) - - it('errors when a non-existant event is listened for', function () { - const expected = 'Event "void" doesn\'t exist in this contract'; - const contract = new eth.Contract(abi); - - try { - contract.once('void', () => {}); - assert.fail(); - } catch (err) { - assert(err.message.includes(expected)); - } - }) - - it('errors when listening for event without setting address', function () { - const expected = 'This contract object doesn\'t have address set yet, ' + - 'please set an address first'; - - const eventAbi = [{ - "anonymous": false, - "inputs": [], - "name": "BasicEvent", - "type": "event" - }]; - - const contract = new eth.Contract(eventAbi); - - try { - contract.once('BasicEvent', () => {}); - assert.fail(); - } catch (err) { - assert(err.message.includes(expected)); - } - }) - - it('errors when an event name is reserved', function () { - const expected = 'The event "newListener" is a reserved event name, ' + - 'you can\'t use it.'; - - const newListenerEventAbi = [{ - "anonymous": false, - "inputs": [], - "name": "newListener", - "type": "event" - }]; - - const contract = new eth.Contract(newListenerEventAbi, contractAddress); - - try { - contract.once('newListener', () => {}); - assert.fail(); - } catch (err) { - assert(err.message.includes(expected)); - } - }) - - it('errors when deploy is called without data (throw)', function () { - const expected = 'No "data" specified in neither the given options, ' + - 'nor the default options.'; - - const contract = new eth.Contract(abi); - - try { - contract.deploy(); - assert.fail(); - } catch (err) { - assert(err.message.includes(expected)); - } - }); - - it('errors when deploy is called without data (callback)', function (done) { - const expected = 'No "data" specified in neither the given options, ' + - 'nor the default options.'; - - const contract = new eth.Contract(abi); - - // Callback format - contract.deploy({}, function (err) { - assert(err.message.includes(expected)); - done(); - }); - }) - - it('errors when send is called without a *contract address* set', function () { - const expected = 'This contract object doesn\'t have address set yet, ' + - 'please set an address first.'; - - const contract = new eth.Contract(abi); - try { - contract.methods.simpleMethod("0xaaa").send(); - assert.fail(); - } catch (err) { - assert(err.message.includes(expected)); - } - }); - - it('errors when send is called without a *from address* being set (promise)', async function () { - const expected = 'No "from" address specified in neither the given options, ' - 'nor the default options.'; - - const contract = new eth.Contract(abi, contractAddress); - try { - await contract.methods.simpleMethod("0xaaa").send({}); - assert.fail(); - } catch (err) { - assert(err.message.includes(expected)); - } - }); - - it('errors when send is called without a *from address* being set (callback)', function (done) { - const expected = 'No "from" address specified in neither the given options, ' - 'nor the default options.'; - - const contract = new eth.Contract(abi, contractAddress); - - contract.methods.simpleMethod("0xaaa").send({}, function (err) { - assert(err.message.includes(expected)) - done(); - }); - }); -}); diff --git a/test/contract.js b/test/contract.js deleted file mode 100644 index 63d5386ab11..00000000000 --- a/test/contract.js +++ /dev/null @@ -1,3253 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Eth = require('../packages/web3-eth'); -var sha3 = require('../packages/web3-utils').sha3; -var FakeIpcProvider = require('./helpers/FakeIpcProvider'); -var FakeHttpProvider = require('./helpers/FakeHttpProvider'); -var StandAloneContract = require('../packages/web3-eth-contract'); - -var abi = [{ - "type": "constructor", - "inputs": [{ - "name": "who", - "type": "address" - },{ - "name": "myValue", - "type": "uint256" - }] -},{ - "constant": false, - "inputs": [ - { - "components": [ - {"name": "status", "type": "bool"} - ], - "name": "nestedStruct", - "type": "tuple" - } - ], - "name": "addStruct", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" -},{ - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - } - ], - "name": "listOfNestedStructs", - "outputs": [ - { - "components": [ - {"name": "status", "type": "bool"} - ], - "name": "nestedStruct", - "type": "tuple" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" -},{ - "name": "balance", - "type": "function", - "inputs": [{ - "name": "who", - "type": "address" - }], - "constant": true, - "outputs": [{ - "name": "value", - "type": "uint256" - }] -},{ - "name": "hasALotOfParams", - "inputs": [ - { - "name": "_var1", - "type": "bytes32" - }, - { - "name": "_var2", - "type": "string" - }, - { - "name": "_var3", - "type": "bytes32[]" - } - ], - "outputs": [ - { - "name": "owner", - "type": "address" - } - ], - "constant": false, - "payable": false, - "type": "function" -},{ - "name": "getStr", - "type": "function", - "inputs": [], - "constant": true, - "outputs": [{ - "name": "myString", - "type": "string" - }] -},{ - "name": "owner", - "type": "function", - "inputs": [], - "constant": true, - "outputs": [{ - "name": "owner", - "type": "address" - }] -}, { - "name": "mySend", - "type": "function", - "inputs": [{ - "name": "to", - "type": "address" - }, { - "name": "value", - "type": "uint256" - }], - "outputs": [], - "stateMutability": "payable" -},{ - "name": "myDisallowedSend", - "type": "function", - "inputs": [{ - "name": "to", - "type": "address" - }, { - "name": "value", - "type": "uint256" - }], - "outputs": [], - "payable": false -}, { - "name": "testArr", - "type": "function", - "inputs": [{ - "name": "value", - "type": "int[]" - }], - "constant": true, - "outputs": [{ - "name": "d", - "type": "int" - }] -}, { - "name":"Changed", - "type":"event", - "inputs": [ - {"name":"from","type":"address","indexed":true}, - {"name":"amount","type":"uint256","indexed":true}, - {"name":"t1","type":"uint256","indexed":false}, - {"name":"t2","type":"uint256","indexed":false} - ] -}, { - "name":"Unchanged", - "type":"event", - "inputs": [ - {"name":"value","type":"uint256","indexed":true}, - {"name":"addressFrom","type":"address","indexed":true}, - {"name":"t1","type":"uint256","indexed":false} - ] -}, { - "name":"overloadedFunction", - "type":"function", - "inputs":[ - {"name":"a","type":"uint256"} - ], - "constant":true, - "outputs":[ - {"name":"", "type":"uint256"} - ], - "payable":false, - "stateMutability":"view" -}, { - "name":"overloadedFunction", - "type":"function", - "inputs":[], - "constant":true, - "outputs":[ - {"name":"","type":"uint256"} - ], - "payable":false, - "stateMutability":"view" - }]; - -var address = '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe'; -var addressLowercase = '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae'; -var address2 = '0x5555567890123456789012345678901234567891'; - -var getStandAloneContractInstance = function(abi, address, options, provider) { - - // if no address supplied - if (address && typeof address != 'string') { - - // no options provided, either - if (!options && !provider) { - provider = address; - address = undefined; - options = undefined; - } else if (options) { - // options provided, but no address - options = address; - provider = options; - address = undefined; - } - } else if (!provider) { - // address provided, but no options - provider = options; - options = undefined; - } - - - StandAloneContract.setProvider(provider); - return new StandAloneContract(abi, address, options); -} - -var getEthContractInstance = function(abi, address, options, provider) { - - // if no address supplied - if (address && typeof address != 'string') { - - // no options provided, either - if (!options && !provider) { - provider = address; - address = undefined; - options = undefined; - } else if (options) { - // options provided, but no address - options = address; - provider = options; - address = undefined; - } - } else if (!provider) { - // address provided, but no options - provider = options; - options = undefined; - } - - var eth = new Eth(provider); - eth.setProvider(provider); - return new eth.Contract(abi, address, options); -} - -var account = { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', -}; - -var runTests = function(contractFactory) { - describe('instantiation', function () { - it('should transform address from checksum addressess', function () { - var provider = new FakeIpcProvider(); - - var contract = contractFactory(abi, address, provider); - - assert.equal(contract.options.address, address); - }); - it('should transform address to checksum address', function () { - var provider = new FakeIpcProvider(); - - var contract = contractFactory(abi, address, provider); - - assert.equal(contract.options.address, address); - }); - it('should fail on invalid address', function () { - var provider = new FakeIpcProvider(); - - var test = function () { - contractFactory(abi, '0x11F4D0A3c12e86B4b5F39B213F7E19D048276DAe', provider); - }; - - assert.throws(test); - }); - it('should fail on invalid address as options.from', function () { - var provider = new FakeIpcProvider(); - - var test = function () { - contractFactory(abi, address, {from: '0x11F4D0A3c12e86B4b5F39B213F7E19D048276DAe'}, provider); - }; - - assert.throws(test); - }); - it('should define the handleRevert object property if passed over the options', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {handleRevert: true}, provider); - - assert.equal(contract.handleRevert, true); - assert.equal(contract.options.handleRevert, true); - }); - it('should update the handleRevert property in the options object', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {handleRevert: false}, provider); - - contract.handleRevert = true; - - assert.equal(contract.options.handleRevert, true); - }); - it('should define the defaultCommon object property if passed over the options', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {common: true}, provider); - - assert.equal(contract.defaultCommon, true); - assert.equal(contract.options.common, true); - }); - it('should update the defaultCommon property in the options object', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {common: false}, provider); - - contract.defaultCommon = true; - - assert.equal(contract.options.common, true); - }); - it('should define the defaultHardfork object property if passed over the options', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {hardfork: 'istanbul'}, provider); - - assert.equal(contract.defaultHardfork, 'istanbul'); - assert.equal(contract.options.hardfork, 'istanbul'); - }); - it('should update the defaultHardfork property in the options object', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {hardfork: false}, provider); - - contract.defaultHardfork = true; - - assert.equal(contract.options.hardfork, true); - }); - it('should define the defaultChain object property if passed over the options', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {chain: 'mainnet'}, provider); - - assert.equal(contract.defaultChain, 'mainnet'); - assert.equal(contract.options.chain, 'mainnet'); - }); - it('should update the defaultChain property in the options object', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {chain: false}, provider); - - contract.defaultChain = true; - - assert.equal(contract.options.chain, true); - }); - it('should define the transactionPollingTimeout object property if passed over the options', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {transactionPollingTimeout: 0}, provider); - - assert.equal(contract.transactionPollingTimeout, 0); - assert.equal(contract.options.transactionPollingTimeout, 0); - }); - it('should update the transactionPollingTimeout property in the options object', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {transactionPollingTimeout: 1}, provider); - - contract.transactionPollingTimeout = 0; - - assert.equal(contract.options.transactionPollingTimeout, 0); - }); - it('should define the transactionConfirmationBlocks object property if passed over the options', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {transactionConfirmationBlocks: 0}, provider); - - assert.equal(contract.transactionConfirmationBlocks, 0); - assert.equal(contract.options.transactionConfirmationBlocks, 0); - }); - it('should update the transactionConfirmationBlocks property in the options object', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {transactionConfirmationBlocks: 1}, provider); - - contract.transactionConfirmationBlocks = 0; - - assert.equal(contract.options.transactionConfirmationBlocks, 0); - }); - it('should define the transactionBlockTimeout object property if passed over the options', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {transactionBlockTimeout: 0}, provider); - - assert.equal(contract.transactionBlockTimeout, 0); - assert.equal(contract.options.transactionBlockTimeout, 0); - }); - it('should update the transactionBlockTimeout property in the options object', function() { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, {transactionBlockTimeout: 1}, provider); - - contract.transactionBlockTimeout = 0; - - assert.equal(contract.options.transactionBlockTimeout, 0); - }); - it('.clone() should properly clone the contract instance', function () { - var provider = new FakeIpcProvider(); - - var fromAddress = '0xDDfFD0A3C12e86b4b5f39B213f7e19d048276daE'; - var abi2 = [{ - "name": "ballerRo", - "type": "function", - "inputs": [{ - "name": "So", - "type": "address" - }], - "constant": true, - "outputs": [{ - "name": "man", - "type": "uint256" - }] - }]; - - var contract1 = contractFactory(abi, - address, - { - gas: 1222, - gasPrice: 12345678, - from: fromAddress - }, - provider); - - var contract2 = contract1.clone(); - - assert.equal(contract1.options.address, address); - assert.equal(contract1.options.gas, 1222); - assert.equal(contract1.options.gasPrice, '12345678'); - assert.deepEqual(contract1.options.jsonInterface, abi); - - - contract2.options.jsonInterface = abi2; - contract2.options.address = fromAddress; - contract2.options.gas = 300; - contract2.options.gasPrice = '234234'; - - assert.isFunction(contract2.methods.ballerRo); - assert.equal(contract2.options.address, fromAddress); - assert.equal(contract2.options.gas, 300); - assert.equal(contract2.options.gasPrice, '234234'); - assert.deepEqual(contract2.options.jsonInterface, abi2); - }); - }); - - describe('provider assignment', function() { - it('should assign a provider to a new instance without modifying old instance', function () { - var provider1 = new FakeIpcProvider(); - var provider2 = new FakeHttpProvider(); - - var contract1 = getStandAloneContractInstance(abi, address, provider1); - var contract2 = getStandAloneContractInstance(abi, address, provider2); - - assert.deepEqual(contract1.currentProvider, provider1); - assert.deepEqual(contract2.currentProvider, provider2); - }); - }); - - describe('internal method', function () { - it('_encodeEventABI should return the encoded event object without topics', function () { - var provider = new FakeIpcProvider(); - - var contract = contractFactory(abi, address, provider); - - var result = contract._encodeEventABI({ - signature: '0x1234', - "name":"Changed", - "type":"event", - "inputs": [ - {"name":"from","type":"address","indexed":true}, - {"name":"amount","type":"uint256","indexed":true}, - {"name":"t1","type":"uint256","indexed":false}, - {"name":"t2","type":"uint256","indexed":false} - ] - }); - - assert.deepEqual(result, { - address: addressLowercase, - topics: [ - '0x1234', - null, - null - ] - }); - - }); - it('_encodeEventABI should return the encoded event object with topics', function () { - var provider = new FakeIpcProvider(); - - var contract = contractFactory(abi, address, provider); - - var result = contract._encodeEventABI({ - signature: '0x1234', - "name":"Changed", - "type":"event", - "inputs": [ - {"name":"from","type":"address","indexed":true}, - {"name":"amount","type":"uint256","indexed":true}, - {"name":"t1","type":"uint256","indexed":false}, - {"name":"t2","type":"uint256","indexed":false} - ] - }, {filter: {amount: 12}, fromBlock: 2}); - - assert.deepEqual(result, { - address: addressLowercase, - fromBlock: '0x2', - topics: [ - '0x1234', - null, - '0x000000000000000000000000000000000000000000000000000000000000000c' - ] - }); - - }); - it('_encodeEventABI should return the encoded event object with topics and multiple choices', function () { - var provider = new FakeIpcProvider(); - var contract = contractFactory(abi, address, provider); - - var result = contract._encodeEventABI({ - signature: '0x1234', - "name":"Changed", - "type":"event", - "inputs": [ - {"name":"test","type":"uint256","indexed":true}, - {"name":"from","type":"address","indexed":true}, - {"name":"amount","type":"uint256","indexed":true}, - {"name":"t1","type":"uint256","indexed":false}, - {"name":"t2","type":"uint256","indexed":false} - ] - }, {filter: {amount: [12,10], from: address}, fromBlock: 2}); - - assert.deepEqual(result, { - address: addressLowercase, - fromBlock: '0x2', - topics: [ - '0x1234', - null, - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - ['0x000000000000000000000000000000000000000000000000000000000000000c', '0x000000000000000000000000000000000000000000000000000000000000000a'] - ] - }); - - }); - it('_decodeEventABI should return the decoded event object with topics', function () { - var provider = new FakeIpcProvider(); - var signature = 'Changed(address,uint256,uint256,uint256)'; - - var contract = contractFactory(abi, address, provider); - - var result = contract._decodeEventABI.call({ - signature: sha3(signature), - "name":"Changed", - "type":"event", - "inputs": [ - {"name":"from","type":"address","indexed":true}, - {"name":"amount","type":"uint256","indexed":true}, - {"name":"t1","type":"uint256","indexed":false}, - {"name":"t2","type":"uint256","indexed":false} - ] - }, { - address: address, - topics: [ - sha3(signature), - '0x000000000000000000000000'+ address.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0x3', - transactionHash: '0x1234', - blockHash: '0x1345', - transactionIndex: '0x0', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - }); - - assert.equal(result.blockNumber, 3); - assert.equal(result.blockHash, '0x1345'); - assert.equal(result.logIndex, 4); - assert.equal(result.id, 'log_9ff24cb4'); - assert.equal(result.transactionIndex, 0); - assert.equal(result.returnValues.from, address); - assert.equal(result.returnValues.amount, 1); - assert.equal(result.returnValues.t1, 1); - assert.equal(result.returnValues.t2, 8); - - }); - it('_decodeMethodReturn should return the decoded values', function () { - var provider = new FakeIpcProvider(); - var signature = 'Changed(address,uint256,uint256,uint256)'; - - var contract = contractFactory(abi, address, provider); - - var result = contract._decodeMethodReturn([{ - "name": "myAddress", - "type": "address" - },{ - "name": "value", - "type": "uint256" - }], '0x000000000000000000000000'+ address.replace('0x','')+ - '000000000000000000000000000000000000000000000000000000000000000a'); - - assert.isObject(result); - assert.equal(result[0], address); - assert.equal(result.myAddress, address); - assert.equal(result[1], 10); - assert.equal(result.value, 10); - - }); - it('_decodeMethodReturn should return a single decoded value', function () { - var provider = new FakeIpcProvider(); - var signature = 'Changed(address,uint256,uint256,uint256)'; - - var contract = contractFactory(abi, address, provider); - - var result = contract._decodeMethodReturn([{ - "name": "myAddress", - "type": "address" - }], '0x000000000000000000000000'+ address.replace('0x','')); - - assert.equal(result, address); - - }); - it('_executeMethod as instantSealEngine should sendTransaction and check for receipts', function (done) { - var provider = new FakeIpcProvider(); - var signature = sha3('mySend(address,uint256)').slice(0, 10); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: signature +'000000000000000000000000'+ addressLowercase.replace('0x','') +'000000000000000000000000000000000000000000000000000000000000000a', - from: address2, - to: addressLowercase, - gasPrice: "0x5af3107a4000" - }]); - }); - provider.injectResult('0x1234000000000000000000000000000000000000000000000000000000056789'); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234000000000000000000000000000000000000000000000000000000056789']); - }); - // with instant seal we get the receipt right away - provider.injectResult({ - contractAddress: addressLowercase, - cumulativeGasUsed: '0xa', - transactionIndex: '0x3', - blockNumber: '0xa', - blockHash: '0xbf1234', - gasUsed: '0x0' - }); - - var contract = contractFactory(abi, address, provider); - - var txObject = {}; - txObject._method = { - signature: signature, - "name": "send", - "type": "function", - "inputs": [{ - "name": "to", - "type": "address" - }, { - "name": "value", - "type": "uint256" - }], - "outputs": [] - }; - txObject._parent = contract; - txObject.encodeABI = contract._encodeMethodABI.bind(txObject); - txObject.arguments = [address, 10]; - - var deploy = contract._executeMethod.call(txObject, 'send', {from: address2, gasPrice: '100000000000000' }, function (err, result) { - // tx hash - assert.equal(result, '0x1234000000000000000000000000000000000000000000000000000000056789'); - }) - .on('receipt', function(result){ - - assert.deepEqual(result, { - contractAddress: address, - cumulativeGasUsed: 10, - transactionIndex: 3, - blockNumber: 10, - blockHash: '0xbf1234', - gasUsed: 0 - }); - done(); - }); - - }); - it('_executeMethod should sendTransaction and check for receipts', function (done) { - var provider = new FakeIpcProvider(); - var signature = sha3('mySend(address,uint256)').slice(0, 10); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: signature +'000000000000000000000000'+ addressLowercase.replace('0x','') +'000000000000000000000000000000000000000000000000000000000000000a', - from: address2, - to: addressLowercase, - gasPrice: "0x5af3107a4000" - }]); - }); - provider.injectResult('0x1234000000000000000000000000000000000000000000000000000000056789'); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234000000000000000000000000000000000000000000000000000000056789']); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult('0x1234567'); - - // fake newBlock - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234000000000000000000000000000000000000000000000000000000056789']); - }); - provider.injectResult({ - contractAddress: addressLowercase, - cumulativeGasUsed: '0xa', - transactionIndex: '0x3', - blockNumber: '0xa', - blockHash: '0xbf1234', - gasUsed: '0x0' - }); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_unsubscribe'); - assert.deepEqual(payload.params, ['0x1234567']); - }); - provider.injectResult('0x321'); - - - var contract = contractFactory(abi, address, provider); - - var txObject = {}; - txObject._method = { - signature: signature, - "name": "send", - "type": "function", - "inputs": [{ - "name": "to", - "type": "address" - }, { - "name": "value", - "type": "uint256" - }], - "outputs": [] - }; - txObject._parent = contract; - txObject.encodeABI = contract._encodeMethodABI.bind(txObject); - txObject.arguments = [address, 10]; - - var deploy = contract._executeMethod.call(txObject, 'send', {from: address2, gasPrice: '100000000000000' }, function (err, result) { - // tx hash - assert.equal(result, '0x1234000000000000000000000000000000000000000000000000000000056789'); - }) - .on('receipt', function(result){ - assert.deepEqual(result, { - contractAddress: address, - cumulativeGasUsed: 10, - transactionIndex: 3, - blockNumber: 10, - blockHash: '0xbf1234', - gasUsed: 0 - }); - done(); - }).catch(console.log); - - }); - it('_executeMethod should call and return values', function (done) { - var provider = new FakeIpcProvider(); - var signature = sha3('balance(address)').slice(0, 10); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: signature + '000000000000000000000000'+ addressLowercase.replace('0x',''), - from: address2, - to: addressLowercase - }, 'latest']); - }); - provider.injectResult('0x000000000000000000000000000000000000000000000000000000000000000a'); - - - var contract = contractFactory(abi, address, provider); - - var txObject = {}; - txObject._method = { - signature: signature, - "name": "balance", - "type": "function", - "inputs": [{ - "name": "who", - "type": "address" - }], - "constant": true, - "outputs": [{ - "name": "value", - "type": "uint256" - }] - }; - txObject._parent = contract; - txObject.encodeABI = contract._encodeMethodABI.bind(txObject); - txObject.arguments = [address]; - - var deploy = contract._executeMethod.call(txObject, 'call', {from: address2}, function (err, result) { - assert.equal(result, '10'); - }) - .then(function(result){ - assert.equal(result, '10'); - done(); - }); - - }); - }); - - describe('event', function () { - it('should create event subscription', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'Changed(address,uint256,uint256,uint256)'; - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params[1], { - topics: [ - sha3(signature), - ('0x000000000000000000000000' + addressLowercase.replace('0x', '')), - null - ], - address: addressLowercase - }); - }); - provider.injectResult('0x123'); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_unsubscribe'); - done(); - - }); - - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x123', - result: { - address: addressLowercase, - topics: [ - sha3(signature), - ('0x000000000000000000000000' + addressLowercase.replace('0x', '')), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0x3', - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - } - }); - - var contract = contractFactory(abi, address, provider); - - var event = contract.events.Changed({filter: {from: address}}, function (err, result, sub) { - assert.equal(result.returnValues.from, address); - assert.equal(result.returnValues.amount, 1); - assert.equal(result.returnValues.t1, 1); - assert.equal(result.returnValues.t2, 8); - - sub.unsubscribe(); - }); - - }); - - it('should create event from the events object and use the fromBlock option', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'Changed(address,uint256,uint256,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_getLogs'); - }); - provider.injectResult([{ - address: addressLowercase, - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000002' - ], - blockNumber: '0x3', - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000009' - }, - { - address: addressLowercase, - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000003' - ], - blockNumber: '0x4', - transactionHash: '0x1235', - blockHash: '0x1346', - logIndex: '0x1', - data: '0x0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000005' - }]); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params[1], { - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - null - ], - address: addressLowercase - }); - }); - provider.injectResult('0x321'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_unsubscribe'); - done(); - }); - provider.injectResult(true); - - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x321', - result: { - address: addressLowercase, - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0x3', - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - } - }); - - var contract = contractFactory(abi, address, provider); - var count = 0; - var event = contract.events.Changed({fromBlock: 0,filter: {from: address}}) - .on('data', function (result) { - count++; - - if(count === 1) { - assert.equal(result.returnValues.from, address); - assert.equal(result.returnValues.amount, 2); - assert.equal(result.returnValues.t1, 2); - assert.equal(result.returnValues.t2, 9); - - } - if(count === 2) { - assert.equal(result.returnValues.from, address); - assert.equal(result.returnValues.amount, 3); - assert.equal(result.returnValues.t1, 4); - assert.equal(result.returnValues.t2, 5); - - } - if(count === 3) { - assert.equal(result.returnValues.from, address); - assert.equal(result.returnValues.amount, 1); - assert.equal(result.returnValues.t1, 1); - assert.equal(result.returnValues.t2, 8); - - event.unsubscribe(); - } - - }); - }); - - - it('should create event from the events object using a signature and callback', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'Changed(address,uint256,uint256,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params[1], { - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - null - ], - address: addressLowercase - }); - }); - provider.injectResult('0x321'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_unsubscribe'); - done(); - }); - provider.injectResult(true); - - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x321', - result: { - address: addressLowercase, - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0x3', - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - } - }); - - var contract = contractFactory(abi, address, provider); - var event = contract.events['0x792991ed5ba9322deaef76cff5051ce4bedaaa4d097585970f9ad8f09f54e651']({filter: {from: address}}, function (err, result) { - assert.equal(result.returnValues.from, address); - assert.equal(result.returnValues.amount, 1); - assert.equal(result.returnValues.t1, 1); - assert.equal(result.returnValues.t2, 8); - - event.unsubscribe(); - }); - }); - - it('should create event from the events object using event name and parameters', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'Changed(address,uint256,uint256,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params[1], { - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - null - ], - address: addressLowercase - }); - }); - provider.injectResult('0x321'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_unsubscribe'); - done(); - }); - provider.injectResult(true); - - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x321', - result: { - address: addressLowercase, - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0x3', - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - } - }); - - var contract = contractFactory(abi, address, provider); - var event = contract.events[signature]({filter: {from: address}}, function (err, result) { - assert.equal(result.returnValues.from, address); - assert.equal(result.returnValues.amount, 1); - assert.equal(result.returnValues.t1, 1); - assert.equal(result.returnValues.t2, 8); - - event.unsubscribe(); - }); - }); - - it('should create event using the function and unsubscribe after one log received', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'Changed(address,uint256,uint256,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params[1], { - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - null - ], - address: addressLowercase - }); - }); - provider.injectResult('0x321'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_unsubscribe'); - }); - provider.injectResult(true); - - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x321', - result: { - address: addressLowercase, - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0x3', - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - } - }); - - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x321', - result: { - address: addressLowercase, - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0x3', - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - } - }); - - var count = 1; - var contract = contractFactory(abi, address, provider); - contract.once('Changed', {filter: {from: address}}, function (err, result, sub) { - assert.equal(result.returnValues.from, address); - assert.equal(result.returnValues.amount, 1); - assert.equal(result.returnValues.t1, 1); - assert.equal(result.returnValues.t2, 8); - assert.deepEqual(sub.options.requestManager.subscriptions, new Map()); - - assert.equal(count, 1); - count++; - - setTimeout(done, 10); - }); - }); - - it('should create event using the function and unsubscribe after one log received when no options are provided', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'Changed(address,uint256,uint256,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params[1], { - topics: [ - sha3(signature), - null, - null - ], - address: addressLowercase - }); - }); - provider.injectResult('0x321'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_unsubscribe'); - }); - provider.injectResult(true); - - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x321', - result: { - address: addressLowercase, - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0x3', - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - } - }); - - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x321', - result: { - address: addressLowercase, - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0x3', - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - } - }); - - var count = 1; - var contract = contractFactory(abi, address, provider); - contract.once('Changed', function (err, result, sub) { - assert.equal(result.returnValues.from, address); - assert.equal(result.returnValues.amount, 1); - assert.equal(result.returnValues.t1, 1); - assert.equal(result.returnValues.t2, 8); - assert.deepEqual(sub.options.requestManager.subscriptions, new Map()); - - assert.equal(count, 1); - count++; - - setTimeout(done, 10); - }); - }); - - it('should throw an error when using the once() function and no callback is provided', function () { - var provider = new FakeIpcProvider(); - - var contract = contractFactory(abi, address, provider); - assert.throws(contract.once.bind(contract, 'Changed', {filter: {from: address}})); - }); - - it('should create event subscription and fire the changed event, if log.removed = true', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'Changed(address,uint256,uint256,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params[1], { - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - null - ], - address: addressLowercase - }); - }); - provider.injectResult('0x321'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_unsubscribe'); - }); - provider.injectResult(true); - - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x321', - result: { - address: addressLowercase, - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0x3', - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - } - }); - - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x321', - result: { - address: addressLowercase, - topics: [ - sha3(signature), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0x3', - removed: true, - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - } - }); - - var count = 1; - var contract = contractFactory(abi, address, provider); - contract.events.Changed({filter: {from: address}}) - .on('data', function(result) { - assert.equal(result.returnValues.from, address); - assert.equal(result.returnValues.amount, 1); - assert.equal(result.returnValues.t1, 1); - assert.equal(result.returnValues.t2, 8); - - assert.equal(count, 1); - count++; - - }) - .on('changed', function(result) { - assert.equal(result.returnValues.from, address); - assert.equal(result.returnValues.amount, 1); - assert.equal(result.returnValues.t1, 1); - assert.equal(result.returnValues.t2, 8); - assert.equal(result.removed, true); - - assert.equal(count, 2); - }); - - setTimeout(done, 60); - - }); - - it('should create all event filter and receive two logs', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'Changed(address,uint256,uint256,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params[1], { - topics: [], - address: addressLowercase - }); - }); - provider.injectResult('0x333'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_unsubscribe'); - done(); - }); - provider.injectResult(true); - - - var contract = contractFactory(abi, address, provider); - - var count = 0; - var event = contract.events.allEvents(function (err, result) { - count++; - - if(count === 1) { - assert.equal(result.returnValues.from, address); - assert.equal(result.returnValues.amount, 1); - assert.equal(result.returnValues.t1, 1); - assert.equal(result.returnValues.t2, 8); - } - if(count === 2) { - assert.equal(result.returnValues.addressFrom, address); - assert.equal(result.returnValues.value, 2); - assert.equal(result.returnValues.t1, 5); - - event.unsubscribe(); - } - - }); - - - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x333', - result: { - address: address, - topics: [ - sha3('Changed(address,uint256,uint256,uint256)'), - '0x000000000000000000000000'+ address.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0x3', - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - } - }); - - - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x333', - result: { - address: address, - topics: [ - sha3('Unchanged(uint256,address,uint256)'), - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x000000000000000000000000'+ address.replace('0x','') - ], - blockNumber: '0x3', - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000005' - } - } - }); - }); - }); - describe('with methods', function () { - it('should change the address', function () { - var provider = new FakeIpcProvider(); - var signature = 'balance(address)'; - - var contract = contractFactory(abi, address, provider); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '000000000000000000000000'+ addressLowercase.replace('0x',''), - to: addressLowercase, - from: address2 - }, 'latest']); - }); - - contract.methods.balance(address).call({from: address2}); - - // change address - contract.options.address = address2; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '000000000000000000000000'+ addressLowercase.replace('0x',''), - to: address2, - from: addressLowercase - }, 'latest']); - }); - - contract.methods.balance(address).call({from: address}); - }); - - it('should reset functions when resetting json interface', function () { - var provider = new FakeIpcProvider(); - - var contract = contractFactory(abi, provider); - - assert.isFunction(contract.methods.mySend); - assert.isFunction(contract.events.Changed); - - contract.options.jsonInterface = [{ - "name": "otherSend", - "type": "function", - "inputs": [{ - "name": "to", - "type": "address" - }, { - "name": "value", - "type": "uint256" - }], - "outputs": [] - }, { - "name":"Unchanged", - "type":"event", - "inputs": [ - {"name":"value","type":"uint256","indexed":true}, - {"name":"addressFrom","type":"address","indexed":true}, - {"name":"t1","type":"uint256","indexed":false} - ] - }]; - - assert.isFunction(contract.methods.otherSend); - assert.isFunction(contract.events.Unchanged); - - assert.isUndefined(contract.methods.mySend); - assert.isUndefined(contract.events.Changed); - }); - - it('should encode a function call', function () { - var provider = new FakeIpcProvider(); - var signature = 'balance(address)'; - - var contract = contractFactory(abi, provider); - - var result = contract.methods.balance(address).encodeABI(); - - assert.equal(result, sha3(signature).slice(0, 10) + '000000000000000000000000'+ addressLowercase.replace('0x','')); - }); - - it('should encode a constructor call with pre set data', function () { - var provider = new FakeIpcProvider(); - var signature = 'balance(address)'; - - var contract = contractFactory(abi, {data: '0x1234'}, provider); - - var result = contract.deploy({ - arguments: [address, 10] - }).encodeABI(); - - assert.equal(result, '0x1234' + '000000000000000000000000'+ addressLowercase.replace('0x','')+ '000000000000000000000000000000000000000000000000000000000000000a'); - }); - - it('should encode a constructor call with passed data', function () { - var provider = new FakeIpcProvider(); - var signature = 'balance(address)'; - - var contract = contractFactory(abi, provider); - - var result = contract.deploy({ - arguments: [address, 10], - data: '0x1234' - }).encodeABI(); - - assert.equal(result, '0x1234' + '000000000000000000000000'+ addressLowercase.replace('0x','')+ '000000000000000000000000000000000000000000000000000000000000000a'); - }); - - - it('should estimate a function', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'balance(address)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_estimateGas'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '000000000000000000000000'+ addressLowercase.replace('0x',''), - to: addressLowercase - }]); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000032'); - - var contract = contractFactory(abi, address, provider); - - contract.methods.balance(address).estimateGas(function (err, res) { - assert.deepEqual(res, 50); - done(); - }); - }); - - it('should estimate the constructor', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'balance(address)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_estimateGas'); - assert.deepEqual(payload.params, [{ - data: '0x1234000000000000000000000000'+ addressLowercase.replace('0x','') +'0000000000000000000000000000000000000000000000000000000000000032' - }]); - }); - provider.injectResult('0x000000000000000000000000000000000000000000000000000000000000000a'); - - var contract = contractFactory(abi, address, {data: '0x1234'}, provider); - - contract.deploy({ - arguments: [address, 50] - }).estimateGas(function (err, res) { - assert.deepEqual(res, 10); - done(); - }); - }); - - it('should send with many parameters', function (done) { - var provider = new FakeIpcProvider(); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: '0x8708f4a12454534500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c30786666323435343533343500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ff24545345000000000000000000000000000000000000000000000000000000534500000000000000000000000000000000000000000000000000000000000045450000000000000000000000000000000000000000000000000000000000004533450000000000000000000000000000000000000000000000000000000000', - to: addressLowercase - }, 'latest']); - }); - provider.injectResult('0x000000000000000000000000'+ addressLowercase.replace('0x','')); - - var contract = contractFactory(abi, address, provider); - - contract.methods.hasALotOfParams("0x24545345", "0xff24545345", ["0xff24545345", "0x5345", "0x4545", "0x453345"]).call(function (err, res) { - assert.deepEqual(res, address); - done(); - }); - }); - - it('should send overload functions with zero parameters', function(done) { - var provider = new FakeIpcProvider(); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: '0xbb853481', - to: addressLowercase - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000005'); - - var contract = contractFactory(abi, address, provider); - contract.methods.overloadedFunction().call(function (err, res) { - assert.equal(res, 5); - done(); - }); - }); - - it('should send overload functions with one parameters', function(done) { - var provider = new FakeIpcProvider(); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: '0x533678270000000000000000000000000000000000000000000000000000000000000006', - to: addressLowercase - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000006'); - - var contract = contractFactory(abi, address, provider); - - contract.methods.overloadedFunction(6).call(function (err, res) { - assert.equal(res, 6); - done(); - }); - }); - - it('should call constant function', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'balance(address)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '000000000000000000000000'+ addressLowercase.replace('0x',''), - to: addressLowercase - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000032'); - - var contract = contractFactory(abi, address, provider); - - contract.methods.balance(address).call(function (err, res) { - assert.deepEqual(res, '50'); - done(); - }); - }); - - it('should call constant function with default block', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'balance(address)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '000000000000000000000000'+ addressLowercase.replace('0x',''), - to: addressLowercase - }, '0xb']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000032'); - - var contract = contractFactory(abi, address, provider); - - contract.methods.balance(address).call(11) - .then(function (r) { - assert.deepEqual(r, '50'); - done(); - }); - }); - - it('should call constant concurrently', function (done) { - var provider = new FakeIpcProvider(); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('balance(address)').slice(0, 10) + '000000000000000000000000'+ addressLowercase.replace('0x',''), - to: addressLowercase - }, 'latest']); - }); - provider.injectResult('0x000000000000000000000000000000000000000000000000000000000000000a'); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('owner()').slice(0, 10), - to: addressLowercase - }, 'latest']); - }); - provider.injectResult('0x00000000000000000000000011f4d0a3c12e86b4b5f39b213f7e19d048276dae'); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('getStr()').slice(0, 10), - to: addressLowercase - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000'); - - var contract = contractFactory(abi, address, provider); - - - Promise.all([ - contract.methods.balance(address).call(), - contract.methods.owner().call(), - contract.methods.getStr().call() - ]).then(results => { - assert.deepEqual(results[0], '10'); - assert.deepEqual(results[1], '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe'); - assert.deepEqual(results[2], 'Hello!%!'); - - done(); - }); - }); - - it('should return an error when returned string is 0x', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'getStr()'; - - var contract = contractFactory(abi, address, provider); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10), - to: addressLowercase, - from: address2 - }, 'latest']); - }); - - provider.injectResult('0x'); - - contract.methods.getStr().call({from: address2}, function (err, result) { - // console.log(err, result) - assert.isTrue(err instanceof Error); - done(); - }); - - }); - - it('should return an empty string when 0x0', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'getStr()'; - - var contract = contractFactory(abi, address, provider); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10), - to: addressLowercase, - from: address2 - }, 'latest']); - }); - - provider.injectResult('0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000'); - - contract.methods.getStr().call({from: address2}, function (err, result) { - assert.equal(result, ''); - done(); - }); - - }); - - it('should sendTransaction and check for receipts with formatted logs', function (done) { - var provider = new FakeIpcProvider(); - var signature = sha3('mySend(address,uint256)').slice(0, 10); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: signature +'000000000000000000000000'+ addressLowercase.replace('0x','') +'000000000000000000000000000000000000000000000000000000000000000a', - from: address2, - to: addressLowercase, - gasPrice: "0x1369ed97fb71" - }]); - }); - provider.injectResult('0x1234000000000000000000000000000000000000000000000000000000056789'); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234000000000000000000000000000000000000000000000000000000056789']); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult('0x1234567'); - - // fake newBlock - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234000000000000000000000000000000000000000000000000000000056789']); - }); - provider.injectResult({ - contractAddress: null, - cumulativeGasUsed: '0xa', - transactionIndex: '0x3', - transactionHash: '0x1234', - blockNumber: '0xa', - blockHash: '0x1234', - gasUsed: '0x0', - logs: [{ - address: address, - topics: [ - sha3('Unchanged(uint256,address,uint256)'), - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x000000000000000000000000'+ addressLowercase.replace('0x','') - ], - blockNumber: '0xa', - transactionHash: '0x1234', - transactionIndex: '0x0', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000005' - },{ - address: address, - topics: [ - sha3('Changed(address,uint256,uint256,uint256)'), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0xa', - transactionHash: '0x1234', - transactionIndex: '0x0', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - }] - }); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_unsubscribe'); - assert.deepEqual(payload.params, ['0x1234567']); - }); - provider.injectResult('0x321'); - - - var contract = contractFactory(abi, address, provider); - - contract.methods.mySend(address, 10).send({from: address2, gasPrice: '21345678654321'}) - .on('receipt', function (receipt) { - // console.log(receipt); - // console.log(receipt.events[0].raw); - // console.log(receipt.events[1].raw); - - // wont throw if it errors ?! - assert.deepEqual(receipt, { - contractAddress: null, - cumulativeGasUsed: 10, - transactionIndex: 3, - transactionHash: '0x1234', - blockNumber: 10, - blockHash: '0x1234', - gasUsed: 0, - events: { - Unchanged: { - address: address, - blockNumber: 10, - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: 4, - id: 'log_9ff24cb4', - transactionIndex: 0, - returnValues: { - 0: '2', - 1: address, - 2: '5', - value: '2', - addressFrom: address, - t1: '5' - }, - event: 'Unchanged', - signature: "0xf359668f205d0b5cfdc20d11353e05f633f83322e96f15486cbb007d210d66e5", - raw: { - topics: ['0xf359668f205d0b5cfdc20d11353e05f633f83322e96f15486cbb007d210d66e5', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x000000000000000000000000' + addressLowercase.replace('0x', '')], - data: '0x0000000000000000000000000000000000000000000000000000000000000005', - } - }, - Changed: { - address: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - blockNumber: 10, - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: 4, - id: 'log_9ff24cb4', - transactionIndex: 0, - returnValues: { - 0: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - 1: '1', - 2: '1', - 3: '8', - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - amount: '1', - t1: '1', - t2: '8' - }, - event: 'Changed', - signature: "0x792991ed5ba9322deaef76cff5051ce4bedaaa4d097585970f9ad8f09f54e651", - raw: { - topics: ['0x792991ed5ba9322deaef76cff5051ce4bedaaa4d097585970f9ad8f09f54e651', - '0x000000000000000000000000' + addressLowercase.replace('0x', ''), - '0x0000000000000000000000000000000000000000000000000000000000000001'], - data: '0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000008', - } - } - } - }); - - done(); - }); - - - }); - - it('should sendTransaction and check for receipts with formatted logs when multiple of same event', function (done) { - var provider = new FakeIpcProvider(); - var signature = sha3('mySend(address,uint256)').slice(0, 10); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: signature +'000000000000000000000000'+ addressLowercase.replace('0x','') +'000000000000000000000000000000000000000000000000000000000000000a', - from: address2, - to: addressLowercase, - gasPrice: "0x1369ed97fb71" - }]); - }); - provider.injectResult('0x1234000000000000000000000000000000000000000000000000000000056789'); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234000000000000000000000000000000000000000000000000000000056789']); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult('0x1234567'); - - // fake newBlock - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234000000000000000000000000000000000000000000000000000000056789']); - }); - provider.injectResult({ - contractAddress: null, - cumulativeGasUsed: '0xa', - transactionIndex: '0x3', - transactionHash: '0x1234', - blockNumber: '0xa', - blockHash: '0x1234', - gasUsed: '0x0', - logs: [{ - address: address, - topics: [ - sha3('Changed(address,uint256,uint256,uint256)'), - '0x000000000000000000000000' + addressLowercase.replace('0x', ''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0xa', - transactionHash: '0x1234', - transactionIndex: '0x0', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - },{ - address: address, - topics: [ - sha3('Changed(address,uint256,uint256,uint256)'), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000002' - ], - blockNumber: '0xa', - transactionHash: '0x1234', - transactionIndex: '0x0', - blockHash: '0x1345', - logIndex: '0x5', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - }] - }); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_unsubscribe'); - assert.deepEqual(payload.params, ['0x1234567']); - }); - provider.injectResult('0x321'); - - - var contract = contractFactory(abi, address, provider); - - contract.methods.mySend(address, 10).send({from: address2, gasPrice: '21345678654321'}) - .on('receipt', function (receipt) { - - // wont throw if it errors ?! nope: causes a timeout - assert.deepEqual(receipt, { - contractAddress: null, - cumulativeGasUsed: 10, - transactionIndex: 3, - transactionHash: '0x1234', - blockNumber: 10, - blockHash: '0x1234', - gasUsed: 0, - events: { - Changed: [ - { - address: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - blockNumber: 10, - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: 4, - id: 'log_9ff24cb4', - transactionIndex: 0, - returnValues: { - 0: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - 1: '1', - 2: '1', - 3: '8', - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - amount: '1', - t1: '1', - t2: '8' - }, - event: 'Changed', - signature: "0x792991ed5ba9322deaef76cff5051ce4bedaaa4d097585970f9ad8f09f54e651", - raw: { - topics: [ '0x792991ed5ba9322deaef76cff5051ce4bedaaa4d097585970f9ad8f09f54e651', - '0x000000000000000000000000' + addressLowercase.replace('0x', ''), - '0x0000000000000000000000000000000000000000000000000000000000000001' ], - data: '0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000008', - } - }, { - address: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - blockNumber: 10, - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: 5, - id: 'log_8b8a2b7f', - transactionIndex: 0, - returnValues: { - 0: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - 1: '2', - 2: '1', - 3: '8', - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - amount: '2', - t1: '1', - t2: '8' - }, - event: 'Changed', - signature: "0x792991ed5ba9322deaef76cff5051ce4bedaaa4d097585970f9ad8f09f54e651", - raw: { - topics: [ '0x792991ed5ba9322deaef76cff5051ce4bedaaa4d097585970f9ad8f09f54e651', - '0x000000000000000000000000' + addressLowercase.replace('0x', ''), - '0x0000000000000000000000000000000000000000000000000000000000000002' ], - data: '0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000008', - } - } - ] - } - }); - - done(); - }); - - - }); - - it('should sendTransaction and check for receipts with formatted logs using the HTTP provider', function (done) { - var provider = new FakeHttpProvider(); - var signature = sha3('mySend(address,uint256)').slice(0, 10); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: signature +'000000000000000000000000'+ addressLowercase.replace('0x','') +'000000000000000000000000000000000000000000000000000000000000000a', - from: address2, - to: addressLowercase, - gasPrice: "0x1369ed97fb71" - }]); - }); - provider.injectResult('0x1234000000000000000000000000000000000000000000000000000000056789'); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234000000000000000000000000000000000000000000000000000000056789']); - }); - provider.injectResult(null); - - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234000000000000000000000000000000000000000000000000000000056789']); - }); - provider.injectResult({ - contractAddress: null, - cumulativeGasUsed: '0xa', - transactionIndex: '0x3', - transactionHash: '0x1234', - blockNumber: '0xa', - blockHash: '0x43ffdd', - gasUsed: '0x0', - logs: [{ - address: address, - topics: [ - sha3('Unchanged(uint256,address,uint256)'), - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x000000000000000000000000'+ addressLowercase.replace('0x','') - ], - blockNumber: '0xa', - transactionHash: '0x1234', - transactionIndex: '0x0', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000005' - },{ - address: address, - topics: [ - sha3('Changed(address,uint256,uint256,uint256)'), - '0x000000000000000000000000'+ addressLowercase.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000001' - ], - blockNumber: '0xa', - transactionHash: '0x1234', - transactionIndex: '0x0', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - }] - }); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_unsubscribe'); - assert.deepEqual(payload.params, ['0x1234567']); - }); - provider.injectResult('0x321'); - - - var contract = contractFactory(abi, address, provider); - - contract.methods.mySend(address, 10).send({from: address2, gasPrice: '21345678654321'}) - .on('receipt', function (receipt) { - // console.log(receipt); - // console.log(receipt.events[0].raw); - // console.log(receipt.events[1].raw); - - // wont throw if it errors ?! - assert.deepEqual(receipt, { - contractAddress: null, - cumulativeGasUsed: 10, - transactionIndex: 3, - transactionHash: '0x1234', - blockNumber: 10, - blockHash: '0x43ffdd', - gasUsed: 0, - events: { - Unchanged: { - address: address, - blockNumber: 10, - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: 4, - id: 'log_9ff24cb4', - transactionIndex: 0, - returnValues: { - 0: '2', - 1: address, - 2: '5', - value: '2', - addressFrom: address, - t1: '5' - }, - event: 'Unchanged', - signature: '0xf359668f205d0b5cfdc20d11353e05f633f83322e96f15486cbb007d210d66e5', - raw: { - topics: ['0xf359668f205d0b5cfdc20d11353e05f633f83322e96f15486cbb007d210d66e5', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x000000000000000000000000' + addressLowercase.replace('0x', '')], - data: '0x0000000000000000000000000000000000000000000000000000000000000005', - } - }, - Changed: { - address: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - blockNumber: 10, - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: 4, - id: 'log_9ff24cb4', - transactionIndex: 0, - returnValues: { - 0: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - 1: '1', - 2: '1', - 3: '8', - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - amount: '1', - t1: '1', - t2: '8' - }, - event: 'Changed', - signature: '0x792991ed5ba9322deaef76cff5051ce4bedaaa4d097585970f9ad8f09f54e651', - raw: { - topics: ['0x792991ed5ba9322deaef76cff5051ce4bedaaa4d097585970f9ad8f09f54e651', - '0x000000000000000000000000' + addressLowercase.replace('0x', ''), - '0x0000000000000000000000000000000000000000000000000000000000000001'], - data: '0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000008', - } - } - } - }); - - done(); - }); - - - }); - - it('should sendTransaction and receive multiple confirmations', function(done){ - var provider = new FakeIpcProvider(); - var signature = sha3('mySend(address,uint256)').slice(0, 10); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: signature +'000000000000000000000000'+ addressLowercase.replace('0x','') +'000000000000000000000000000000000000000000000000000000000000000a', - from: address2, - to: addressLowercase, - gasPrice: "0x1369ed97fb71" - }]); - }); - provider.injectResult('0x1234000000000000000000000000000000000000000000000000000000056789'); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234000000000000000000000000000000000000000000000000000000056789']); - }); - - provider.injectResult({ - contractAddress: null, - cumulativeGasUsed: '0xa', - transactionIndex: '0x3', - transactionHash: '0x1234', - blockNumber: '0xa', - blockHash: '0x1234', - gasUsed: '0x0', - logs: [] - }); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult('0x1234567'); - - var contract = contractFactory(abi, address, provider); - - var count = 0; - contract.methods.mySend(address, 10) - .send({from: address2, gasPrice: '21345678654321'}) - .on('confirmation', function (confirmationNumber, receipt) { - count++; - if(count === 1) { - assert.deepEqual(receipt, { - contractAddress: null, - cumulativeGasUsed: 10, - transactionIndex: 3, - transactionHash: '0x1234', - blockNumber: 10, - blockHash: '0x1234', - gasUsed: 0, - events: {} - }); - - assert.equal(confirmationNumber, 0); - } - if(count === 2) { - assert.deepEqual(receipt, { - contractAddress: null, - cumulativeGasUsed: 10, - transactionIndex: 3, - transactionHash: '0x1234', - blockNumber: 10, - blockHash: '0x1234', - gasUsed: 0, - events: {} - }); - - assert.equal(confirmationNumber, 1); - done(); - } - }); - - // fake newBlocks - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }); - - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x11' - } - } - }); - }); - - it('should sendTransaction to contract function', function () { - var provider = new FakeIpcProvider(); - var signature = 'mySend(address,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + - '000000000000000000000000'+ addressLowercase.replace('0x','') + - '0000000000000000000000000000000000000000000000000000000000000011' , - from: addressLowercase, - to: addressLowercase, - gasPrice: "0x369d1f7fd2" - }]); - }); - - var contract = contractFactory(abi, address, provider); - - contract.methods.mySend(address, 17).send({from: address, gasPrice: '234564321234'}); - }); - - it('should throw error when trying to send ether to a non payable contract function', function () { - var provider = new FakeIpcProvider(); - - var contract = contractFactory(abi, address, provider); - - try{ - contract.methods.myDisallowedSend(address, 17).send({from: address, value: 123}) - .on('error', function (e) { - assert.isTrue(e instanceof Error, 'Should throw error'); - }) - .catch(function (e) { - assert.isTrue(e instanceof Error, 'Should throw error'); - }); - - } catch(e){ - assert.isTrue(e instanceof Error, 'Should throw error'); - } - }); - - it('should not throw error when trying to not send ether to a non payable contract function', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'myDisallowedSend(address,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + - '000000000000000000000000'+ addressLowercase.replace('0x','') + - '0000000000000000000000000000000000000000000000000000000000000011' , - from: addressLowercase, - to: addressLowercase, - gasPrice: "0x1555757ee6b1" - }]); - - done(); - }); - - var contract = contractFactory(abi, address, provider); - - try{ - contract.methods.myDisallowedSend(address, 17).send({from: address, gasPrice: '23456787654321'}) - .on('error', function (e) { - assert.isFalse(e instanceof Error, 'Should not throw error'); - }) - .catch(function (e) { - assert.isFalse(e instanceof Error, 'Should not throw error'); - }); - - } catch(e){ - assert.isFalse(e instanceof Error, 'Should not throw error'); - } - }); - - - it('should sendTransaction to contract function using the function namen incl. parameters', function () { - var provider = new FakeIpcProvider(); - var signature = sha3('mySend(address,uint256)').slice(0, 10); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: signature + - '000000000000000000000000'+ addressLowercase.replace('0x','') + - '0000000000000000000000000000000000000000000000000000000000000011' , - from: addressLowercase, - to: addressLowercase, - gasPrice: "0x1555757ee6b1" - }]); - }); - - var contract = contractFactory(abi, address, provider); - - contract.methods['mySend(address,uint256)'](address, 17).send({from: address, gasPrice: '23456787654321'}); - }); - - it('should sendTransaction to contract function using the signature', function () { - var provider = new FakeIpcProvider(); - var signature = sha3('mySend(address,uint256)').slice(0, 10); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: signature + - '000000000000000000000000'+ addressLowercase.replace('0x','') + - '0000000000000000000000000000000000000000000000000000000000000011' , - from: addressLowercase, - to: addressLowercase, - gasPrice: "0x49504f80" - }]); - }); - - var contract = contractFactory(abi, address, provider); - - contract.methods[signature](address, 17).send({from: address, gasPrice: '1230000000'}); - }); - - it('should throw when trying to create a tx object and wrong amount of params', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'mySend(address,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + - '000000000000000000000000'+ addressLowercase.replace('0x','') + - '0000000000000000000000000000000000000000000000000000000000000011' , - to: addressLowercase, - from: addressLowercase, - gas: '0xc350', - gasPrice: '0xbb8', - value: '0x2710' - }]); - - done(); - }); - - var contract = contractFactory(abi, address, provider); - - assert.throws(function () { - contract.methods.mySend(address); - }); - - setTimeout(done, 1); - }); - - it('should make a call with optional params', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'balance(address)'; - var count = 0; - - - provider.injectValidation(function (payload) { - count++; - if(count > 1) return; - - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '000000000000000000000000'+ addressLowercase.replace('0x',''), - to: addressLowercase, - from: addressLowercase, - gas: '0xc350' - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000032'); - - - var contract = contractFactory(abi, address, provider); - - contract.methods.balance(address).call({from: address, gas: 50000}) - .then(function (r) { - assert.deepEqual(r, '50'); - done(); - }); - }); - - it('should explicitly make a call with optional params', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'balance(address)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '000000000000000000000000'+ addressLowercase.replace('0x',''), - to: addressLowercase, - from: addressLowercase, - gas: '0xc350' - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000032'); - - var contract = contractFactory(abi, address, provider); - - contract.methods.balance(address).call({from: address, gas: 50000}) - .then(function (r) { - assert.deepEqual(r, '50'); - done(); - }); - - }); - - it('should explicitly make a call with optional params and defaultBlock', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'balance(address)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '000000000000000000000000'+ addressLowercase.replace('0x',''), - to: addressLowercase, - from: addressLowercase, - gas: '0xc350' - }, '0xb']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000032'); - - var contract = contractFactory(abi, address, provider); - - contract.methods.balance(address).call({from: address, gas: 50000}, 11) - .then(function (r) { - assert.deepEqual(r, '50'); - done(); - }); - - }); - - it('should sendTransaction with optional params', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'mySend(address,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + - '000000000000000000000000'+ addressLowercase.replace('0x','') + - '0000000000000000000000000000000000000000000000000000000000000011' , - to: addressLowercase, - from: addressLowercase, - gas: '0xc350', - gasPrice: '0xbb8', - value: '0x2710' - }]); - - done(); - }); - - var contract = contractFactory(abi, address, provider); - - contract.methods.mySend(address, 17).send({from: address, gas: 50000, gasPrice: 3000, value: 10000}); - }); - - it('should sendTransaction and fill in default gasPrice', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'mySend(address,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_gasPrice'); - assert.deepEqual(payload.params, []); - }); - - provider.injectResult('0x45656456456456'); - - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + - '000000000000000000000000'+ addressLowercase.replace('0x','') + - '0000000000000000000000000000000000000000000000000000000000000011' , - to: addressLowercase, - from: addressLowercase, - gasPrice: '0x45656456456456' - }]); - - done(); - }); - - var contract = contractFactory(abi, address, provider); - - contract.methods.mySend(address, 17).send({from: address}); - }); - - it('should explicitly sendTransaction with optional params', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'mySend(address,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + - '000000000000000000000000'+ addressLowercase.replace('0x','') + - '0000000000000000000000000000000000000000000000000000000000000011' , - to: addressLowercase, - from: addressLowercase, - gas: '0xc350', - gasPrice: '0xbb8', - value: '0x2710' - }]); - - done(); - }); - - var contract = contractFactory(abi, address, provider); - - contract.methods.mySend(address, 17).send({from: address, gas: 50000, gasPrice: 3000, value: 10000}); - }); - - - it('should explicitly call sendTransaction with optional params and call callback without error', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'mySend(address,uint256)'; - - provider.injectValidation(function (payload) { - - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + - '000000000000000000000000'+ addressLowercase.replace('0x','') + - '0000000000000000000000000000000000000000000000000000000000000011' , - to: addressLowercase, - from: addressLowercase, - gas: '0xc350', - gasPrice: '0xbb8', - value: '0x2710' - }]); - }); - - var contract = contractFactory(abi, address, provider); - - contract.methods.mySend(address, 17).send({from: address, gas: 50000, gasPrice: 3000, value: 10000}, function (err) { - assert.equal(err, null); - done(); - }); - }) - - it('should explicitly estimateGas with optional params', function () { - var provider = new FakeIpcProvider(); - var signature = 'mySend(address,uint256)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_estimateGas'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + - '000000000000000000000000' + addressLowercase.replace('0x','') + - '0000000000000000000000000000000000000000000000000000000000000011' , - to: addressLowercase, - from: addressLowercase, - gas: '0xc350', - gasPrice: '0xbb8', - value: '0x2710' - }]); - }); - - var contract = contractFactory(abi, address, provider); - - contract.methods.mySend(address, 17).estimateGas({from: address, gas: 50000, gasPrice: 3000, value: 10000}); - }); - - it('getPastEvents should get past events and format them correctly', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'testArr(int[])'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getLogs'); - assert.deepEqual(payload.params, [{ - address: addressLowercase, - topics: [ - "0x792991ed5ba9322deaef76cff5051ce4bedaaa4d097585970f9ad8f09f54e651", - "0x000000000000000000000000" + address2.replace('0x',''), - null - ] - }]); - }); - - var topic1 = [ - sha3(signature), - '0x000000000000000000000000'+ address.replace('0x',''), - '0x000000000000000000000000000000000000000000000000000000000000000a' - ]; - var topic2 = [ - sha3(signature), - '0x000000000000000000000000'+ address.replace('0x',''), - '0x0000000000000000000000000000000000000000000000000000000000000003' - ]; - - provider.injectResult([{ - address: address, - topics: topic1, - blockNumber: '0x3', - transactionHash: '0x1234', - transactionIndex: '0x0', - blockHash: '0x1345', - logIndex: '0x4', - data: '0x0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000009' - }, - { - address: address, - topics: topic2, - blockNumber: '0x4', - transactionHash: '0x1235', - transactionIndex: '0x0', - blockHash: '0x1346', - logIndex: '0x1', - data: '0x0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000005' - }]); - - var contract = contractFactory(abi, address, provider); - contract.getPastEvents('Changed', {filter: {from: address2}}) - .then(function (result) { - - assert.deepEqual(result, [{ - event: "Changed", - signature: "0xc00c1c37cc8b83163fb4fddc06c74d1d5c00d74648e7cb28c0ebada3e32fd62c", - id: "log_9ff24cb4", - address: address, - blockNumber: 3, - transactionHash: '0x1234', - blockHash: '0x1345', - logIndex: 4, - transactionIndex: 0, - raw: { - data: '0x0000000000000000000000000000000000000000000000000000000000000002' + - '0000000000000000000000000000000000000000000000000000000000000009', - topics: topic1 - }, - returnValues: { - 0: address, - 1: '10', - 2: '2', - 3: '9', - from: address, - amount: '10', - t1: '2', - t2: '9' - } - }, - { - event: "Changed", - signature: "0xc00c1c37cc8b83163fb4fddc06c74d1d5c00d74648e7cb28c0ebada3e32fd62c", - id: "log_29c93e15", - address: address, - blockNumber: 4, - transactionHash: '0x1235', - blockHash: '0x1346', - logIndex: 1, - transactionIndex: 0, - raw: { - data: '0x0000000000000000000000000000000000000000000000000000000000000004' + - '0000000000000000000000000000000000000000000000000000000000000005', - topics: topic2 - }, - returnValues: { - 0: address, - 1: '3', - 2: '4', - 3: '5', - from: address, - amount: '3', - t1: '4', - t2: '5' - } - }]); - - done(); - }).catch(done); - - }); - - it('should call testArr method and properly parse result', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'testArr(int[])'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + - '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003', - to: addressLowercase - }, - 'latest' - ]); - }); - - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000005'); - - var contract = contractFactory(abi, address, provider); - contract.methods.testArr([3]).call() - .then(function (result) { - assert.deepEqual(result, '5'); - done(); - }); - - }); - - it('should call testArr method, properly parse result and return the result in a callback', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'testArr(int[])'; - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + - '0000000000000000000000000000000000000000000000000000000000000020' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000003', - to: addressLowercase - }, - 'latest' - ]); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000005'); - - var contract = contractFactory(abi, address, provider); - - contract.methods.testArr([3]).call(function (err, result) { - assert.deepEqual(result, '5'); - done(); - }); - - }); - - it('should call owner method, properly', function (done) { - var provider = new FakeIpcProvider(); - var signature = 'owner()'; - - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10), - to: addressLowercase - }, - 'latest' - ]); - }); - provider.injectResult('0x000000000000000000000000'+ addressLowercase.replace('0x','')); - - var contract = contractFactory(abi, address, provider); - - contract.methods.owner().call(function (err, result) { - assert.deepEqual(result, address); - done(); - }); - - }); - - - it('should decode an struct correctly', function (done) { - var provider = new FakeIpcProvider(); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: '0x2a4aedd50000000000000000000000009cc9a2c777605af16872e0997b3aeb91d96d5d8c', - to: addressLowercase - }, - 'latest' - ]); - }); - - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - var contract = contractFactory(abi, address, provider); - - contract.methods.listOfNestedStructs('0x9CC9a2c777605Af16872E0997b3Aeb91d96D5D8c').call().then(function(result) { - var expectedArray = []; - expectedArray[0] = true; - expectedArray['status'] = true; - - assert.deepEqual(result, expectedArray); - done(); - }); - }); - - it('should call an contract method with an struct as parameter', function (done) { - var provider = new FakeIpcProvider(); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: '0x814a4d160000000000000000000000000000000000000000000000000000000000000001', - from: addressLowercase, - gas: '0xc350', - gasPrice: '0xbb8', - to: addressLowercase - }]); - - done(); - }); - - var contract = contractFactory(abi, address, provider); - - contract.methods.addStruct({status: true}).send({ - from: address, - gas: 50000, - gasPrice: 3000 - }); - }); - }); - describe('with data', function () { - it('should deploy a contract and use callback', function (done) { - var provider = new FakeIpcProvider(); - - provider.injectResult('0x1234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: '0x1234567000000000000000000000000555456789012345678901234567890123456789100000000000000000000000000000000000000000000000000000000000000c8' , - from: addressLowercase, - gas: '0xc350', - gasPrice: '0xbb8' - }]); - }); - - var contract = contractFactory(abi, provider); - - contract.deploy({ - data: '0x1234567', - arguments: ['0x5554567890123456789012345678901234567891', 200] - }).send({ - from: address, - gas: 50000, - gasPrice: 3000 - }, function (err, result) { - assert.equal(err, null); - assert.equal(result, '0x1234567'); - done(); - }); - }); - - it('should deploy a contract and use all promise steps', function (done) { - var provider = new FakeIpcProvider(); - - provider.injectValidation(function (payload) { - - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - data: '0x1234567000000000000000000000000'+ addressLowercase.replace('0x','') +'00000000000000000000000000000000000000000000000000000000000000c8' , - from: addressLowercase, - gas: '0xc350', - gasPrice: '0xbb8' - }]); - - }); - provider.injectResult('0x5550000000000000000000000000000000000000000000000000000000000032'); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x5550000000000000000000000000000000000000000000000000000000000032']); - }); - provider.injectResult(null); - - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult('0x1234567'); - - // fake newBlock - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x5550000000000000000000000000000000000000000000000000000000000032']); - }); - provider.injectResult({ - contractAddress: addressLowercase, - blockHash: '0xffdd' - }); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getCode'); - assert.deepEqual(payload.params, [addressLowercase, 'latest']); - }); - provider.injectResult('0x321'); - - - var contract = contractFactory(abi, provider); - - contract.deploy({ - data: '0x1234567', - arguments: [address, 200] - }).send({ - from: address, - gas: 50000, - gasPrice: 3000 - }) - .on('transactionHash', function (value) { - assert.equal('0x5550000000000000000000000000000000000000000000000000000000000032', value); - }) - .on('receipt', function (receipt) { - assert.equal(address, receipt.contractAddress); - assert.isNull(contract.options.address); - }) - .then(function(newContract) { - assert.equal(newContract.options.address, address); - assert.isTrue(newContract !== contract, 'contract objects shouldn\'t the same'); - - setTimeout(function () { - done(); - }, 1); - }); - // .on('error', function (value) { - // console.log('error', value); - // done(); - // }); - - }); - - }); -} - -describe('typical usage', function() { - runTests(getEthContractInstance); - - it('should update contract instance provider when assigned a provider to eth instance that contract instance came from', function () { - var provider1 = new FakeIpcProvider(); - var provider2 = new FakeHttpProvider(); - - var eth = new Eth(provider1); - var contract = new eth.Contract(abi, address); - assert.deepEqual(contract.currentProvider, provider1); - assert.deepEqual(eth.currentProvider, provider1); - - eth.setProvider(provider2); - assert.deepEqual(contract.currentProvider, provider2); - assert.deepEqual(eth.currentProvider, provider2); - }); - - it('should update contract instance provider when calling setProvider on itself', function () { - var provider1 = new FakeIpcProvider(); - var provider2 = new FakeHttpProvider(); - - var eth = new Eth(provider1); - var contract = new eth.Contract(abi, address); - assert.deepEqual(contract.currentProvider, provider1); - - contract.setProvider(provider2); - assert.deepEqual(contract.currentProvider, provider2); - }); - - it('errors when invoked without the "new" operator', function () { - try { - var provider = new FakeHttpProvider(); - var eth = new Eth(provider); - - eth.Contract(abi, address); - - assert.fail(); - } catch(err) { - assert(err.message.includes('the "new" keyword')); - } - }); - - it('should deploy a contract, sign transaction, and return contract instance', async function () { - var provider = new FakeIpcProvider(); - var eth = new Eth(provider); - eth.accounts.wallet.add(account.privateKey); - - const tx = await eth.accounts.wallet[0].signTransaction({ - data: '0x1234567000000000000000000000000' + account.address.toLowerCase().replace('0x', '') + '00000000000000000000000000000000000000000000000000000000000000c8', - from: account.address.toLowerCase(), - gas: '0xd658', - gasPrice: '0xbb8', - chainId: '0x1', - nonce: '0x1', - chain: 'mainnet', - hardfork: 'petersburg' - }); - - provider.injectValidation(function (payload) { - const expected = tx.rawTransaction; - assert.equal(payload.method, 'eth_sendRawTransaction'); - assert.deepEqual(payload.params, [expected]); - }); - - provider.injectResult('0x5550000000000000000000000000000000000000000000000000000000000032'); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x5550000000000000000000000000000000000000000000000000000000000032']); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult('0x1234567'); - - // fake newBlock - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x5550000000000000000000000000000000000000000000000000000000000032']); - }); - - provider.injectResult({ - contractAddress: addressLowercase, - blockHash: '0xffdd' - }); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getCode'); - assert.deepEqual(payload.params, [addressLowercase, 'latest']); - }); - provider.injectResult('0x321'); - - - var contract = new eth.Contract(abi); - - let heardTxHashEvent = false; - let heardReceiptEvent = false; - - await new Promise(function(resolve, reject){ - contract.deploy({ - data: '0x1234567', - arguments: [account.address, 200] - }).send({ - from: account.address, - gas: 54872, - gasPrice: 3000, - chainId: 1, - nonce: 1, - chain: 'mainnet', - hardfork: 'petersburg' - }) - .on('transactionHash', function (value) { - assert.equal('0x5550000000000000000000000000000000000000000000000000000000000032', value); - heardTxHashEvent = true; - }) - .on('receipt', function (receipt) { - assert.equal(address, receipt.contractAddress); - assert.isNull(contract.options.address); - heardReceiptEvent = true; - }) - .then(function (newContract) { - assert.equal(newContract.options.address, address); - assert.isTrue(newContract !== contract, 'contract objects shouldn\'t the same'); - assert.isTrue(heardTxHashEvent, 'transactionHash event should have fired'); - assert.isTrue(heardReceiptEvent, 'receipt event should have fired'); - resolve(); - }); - }); - }); - // TODO add error check -}); - -describe('standalone usage', function() { - runTests(getStandAloneContractInstance); -}); diff --git a/test/e2e.contract.deploy.js b/test/e2e.contract.deploy.js deleted file mode 100644 index 3301555887b..00000000000 --- a/test/e2e.contract.deploy.js +++ /dev/null @@ -1,291 +0,0 @@ -var assert = require('assert'); -var Basic = require('./sources/Basic'); -var Reverts = require('./sources/Reverts'); -var utils = require('./helpers/test.utils'); -var Web3 = utils.getWeb3(); - -describe('contract.deploy [ @E2E ]', function() { - var web3; - var accounts; - var basic; - var reverts; - var noBytecode; - var options; - - // Error message variants - var revertMessage = "revert"; - var couldNotBeStoredMessage = "code couldn't be stored"; - var creationWithoutDataMessage = "contract creation without any data provided"; - - var basicOptions = { - data: Basic.bytecode, - gasPrice: '1', - gas: 4000000 - }; - - var revertsOptions = { - data: Reverts.bytecode, - gasPrice: '1', - gas: 4000000 - } - - var noBytecodeOptions = { - data: '0x', - gasPrice: '1', - gas: 4000000 - } - - describe('http', function() { - before(async function(){ - web3 = new Web3('http://localhost:8545'); - accounts = await web3.eth.getAccounts(); - - basic = new web3.eth.Contract(Basic.abi, basicOptions); - reverts = new web3.eth.Contract(Reverts.abi, revertsOptions); - noBytecode = new web3.eth.Contract(Basic.abi, noBytecodeOptions); - }) - - it('returns an instance', async function(){ - var instance = await basic - .deploy() - .send({from: accounts[0]}); - - assert(web3.utils.isAddress(instance.options.address)); - }); - - // Clients reject this kind of OOG is early because - // the gas is obviously way too low. - it('errors on "intrinic gas too low" OOG', async function(){ - try { - await basic - .deploy() - .send({from: accounts[0], gas: 1000}); - - assert.fail(); - } catch(err){ - assert(err.message.includes('gas')) - assert(err.receipt === undefined); - } - }); - - // Clients reject this kind of OOG when the EVM runs out of gas - // while running the code. A contractAddress is set on the - // receipt, but the status will be false. - it('errors on OOG reached while running EVM', async function(){ - const estimate = await basic - .deploy() - .estimateGas({from: accounts[0]}) - - const gas = estimate - 1000; - - try { - await basic - .deploy() - .send({from: accounts[0], gas: gas}); - - assert.fail(); - } catch(err){ - assert(err.message.includes(couldNotBeStoredMessage)); - assert(err.receipt.status === false); - } - }); - - // Geth immediately rejects a zero length bytecode without mining, - // Ganache accepts and mines it, returning a receipt with status === true - it('errors deploying a zero length bytecode', async function(){ - try { - await noBytecode - .deploy() - .send({from: accounts[0]}); - - assert.fail(); - } catch(err){ - assert( - err.message.includes(creationWithoutDataMessage) || - err.message.includes(couldNotBeStoredMessage) - ); - } - }) - - it('errors on revert', async function(){ - try { - await reverts - .deploy() - .send({from: accounts[0]}); - - assert.fail(); - } catch(err){ - assert( - err.message.includes(couldNotBeStoredMessage) || - err.message.includes(revertMessage) - ); - - assert(err.receipt.status === false); - } - }); - - it('fires the confirmation handler', function(){ - // Http confirmations poll at 1s interval. - // Automine has a 2s interval. - if (!process.env.GETH_AUTOMINE) return; - - return new Promise(async (resolve, reject) => { - var startBlock = await web3.eth.getBlockNumber(); - - await basic - .deploy() - .send({from: accounts[0]}) - .on('confirmation', async (number, receipt, latestBlockHash) => { - assert(receipt.contractAddress); - - if (number === 1) { // Confirmation numbers are zero indexed - var endBlock = await web3.eth.getBlock('latest'); - assert(endBlock.number >= (startBlock + 2)); - assert(endBlock.hash === latestBlockHash); - resolve(); - } - }) - }); - }); - }); - - describe('ws', function() { - // Websockets extremely erratic for geth instamine... - if (process.env.GETH_INSTAMINE) return; - var port; - - before(async function(){ - port = utils.getWebsocketPort(); - - web3 = new Web3('ws://localhost:' + port); - accounts = await web3.eth.getAccounts(); - - basic = new web3.eth.Contract(Basic.abi, basicOptions); - reverts = new web3.eth.Contract(Reverts.abi, revertsOptions); - }) - - it('returns an instance', async function(){ - var instance = await basic - .deploy() - .send({from: accounts[0]}) - - assert(web3.utils.isAddress(instance.options.address)); - }); - - it('errors on OOG', async function(){ - try { - await basic - .deploy() - .send({from: accounts[0], gas: 1000}); - - assert.fail(); - } catch(err){ - assert(err.message.includes('gas')) - } - }); - - it('errors on revert', async function(){ - try { - await reverts - .deploy() - .send({from: accounts[0]}); - - assert.fail(); - } catch(err){ - assert( - err.message.includes(couldNotBeStoredMessage) || - err.message.includes(revertMessage) - ); - } - }); - - it('fires the sending event with the payload', function(done){ - basic - .deploy() - .send({from: accounts[0]}) - .on('sending', (payload) => { - assert(basic.options.data === payload.params[0].data) - done(); - }) - }); - - it('fires the sent event with the payload', function(done){ - basic - .deploy() - .send({from: accounts[0]}) - .on('sent', (payload) => { - assert(basic.options.data === payload.params[0].data) - done(); - }) - }); - - it('fires the transactionHash event', function(done){ - basic - .deploy() - .send({from: accounts[0]}) - .on('transactionHash', hash => { - assert(web3.utils.isHex(hash)) - done(); - }) - }); - - it('fires the receipt event', function(done){ - basic - .deploy() - .send({from: accounts[0]}) - .on('receipt', receipt => { - assert(web3.utils.isAddress(receipt.contractAddress)) - done(); - }) - }) - - it('fires the confirmation handler', function(){ - return new Promise(async (resolve, reject) => { - var startBlock = await web3.eth.getBlockNumber(); - - await basic - .deploy() - .send({from: accounts[0]}) - .on('confirmation', async (number, receipt, latestBlockHash) => { - if (number === 1) { // Confirmation numbers are zero indexed - var endBlock = await web3.eth.getBlock('latest'); - assert(endBlock.number >= (startBlock + 2)); - assert(endBlock.hash === latestBlockHash); - resolve(); - } - }) - - // Necessary for instamine, should not interfere with automine. - await utils.mine(web3, accounts[0]); - }); - }); - - it('fires the error handler on OOG', function(done){ - basic - .deploy() - .send({from: accounts[0], gas: 1000}) - .on('error', err => { - assert(err.message.includes('gas')) - done(); - }) - }) - - it('fires the error handler on revert', function(done){ - reverts - .deploy() - .send({from: accounts[0]}) - .on('error', err => { - assert( - err.message.includes(couldNotBeStoredMessage) || - err.message.includes(revertMessage) - ); - done(); - }) - }) - - it('can connect over wss with username:password header', function(){ - const _web3 = new Web3('wss://usr:psswrd@localhost:' + port); - }); - }); -}); - diff --git a/test/e2e.contract.events.js b/test/e2e.contract.events.js deleted file mode 100644 index 2b51a570694..00000000000 --- a/test/e2e.contract.events.js +++ /dev/null @@ -1,461 +0,0 @@ -var assert = require('assert'); -var Basic = require('./sources/Basic'); -var Child = require('./sources/Child'); -var Parent = require('./sources/Parent'); -var utils = require('./helpers/test.utils'); -var Web3 = utils.getWeb3(); - -describe('contract.events [ @E2E ]', function() { - // `getPastEvents` not working with Geth instamine over websockets. - if (process.env.GETH_INSTAMINE) return; - - var web3; - var accounts; - var basic; - var instance; - var port; - - var basicOptions = { - data: Basic.bytecode, - gasPrice: '1', - gas: 4000000 - }; - - beforeEach(async function(){ - port = utils.getWebsocketPort(); - - web3 = new Web3('ws://localhost:' + port); - accounts = await web3.eth.getAccounts(); - - basic = new web3.eth.Contract(Basic.abi, basicOptions); - instance = await basic.deploy().send({from: accounts[0]}); - }); - - it('contract.getPastEvents', async function(){ - await instance - .methods - .firesEvent(accounts[0], 1) - .send({from: accounts[0]}); - - await instance - .methods - .firesEvent(accounts[0], 2) - .send({from: accounts[0]}); - - const events = await instance.getPastEvents({ - fromBlock: 0, - toBlock: 'latest' - }); - - assert.equal(events.length, 2); - assert.equal(events[0].event, 'BasicEvent'); - assert.equal(events[1].event, 'BasicEvent'); - assert.notEqual(events[0].id, events[1].id); - }); - - it('contract.events.', function(){ - return new Promise(async resolve => { - instance - .events - .BasicEvent({ - fromBlock: 0 - }) - .on('data', function(event) { - assert.equal(event.event, 'BasicEvent'); - this.removeAllListeners(); - resolve(); - }); - - await instance - .methods - .firesEvent(accounts[0], 1) - .send({from: accounts[0]}); - }); - }); - - - it('works also when toBlock is passed to contract.events.', function () { - const originalWarn = console.warn - let message - console.warn = function(str) { message = str } - - return new Promise(async resolve => { - instance - .events - .BasicEvent({ - fromBlock: 0, - toBlock: 'latest' - }).on('data', function(event) { - assert.equal(event.event, 'BasicEvent'); - this.removeAllListeners(); - resolve(); - }); - - assert.equal(message, 'Invalid option: toBlock. Use getPastEvents for specific range.'); - console.warn = originalWarn - - await instance - .methods - .firesEvent(accounts[0], 1) - .send({from: accounts[0]}); - }); - }); - - it('works also when toBlock is passed to contract.events.allEvents', function () { - const originalWarn = console.warn - let message - console.warn = function(str) { message = str } - - return new Promise(async (resolve, reject) => { - instance - .events - .allEvents({ - fromBlock: 0, - toBlock: 'latest' - }).on('data', function(event) { - this.removeAllListeners(); - resolve(); - }); - - assert.equal(message, 'Invalid option: toBlock. Use getPastEvents for specific range.'); - console.warn = originalWarn - - await instance - .methods - .firesEvent(accounts[0], 1) - .send({ from: accounts[0] }); - }); - }); - - it('should not hear the error handler when connection.closed() called', function(){ - this.timeout(15000); - - let failed = false; - - return new Promise(async (resolve, reject) => { - instance - .events - .BasicEvent({ - fromBlock: 0 - }) - .on('error', function(err) { - failed = true; - this.removeAllListeners(); - reject(new Error('err listener should not hear connection.close')); - }); - - await instance - .methods - .firesEvent(accounts[0], 1) - .send({from: accounts[0]}); - - web3.currentProvider.connection.close(); - - // Resolve only if we haven't already rejected - setTimeout(() => { if(!failed) resolve() }, 2500) - }); - }); - - it('should not hear the error handler when provider.disconnect() called', function(){ - this.timeout(15000); - - let failed = false; - - return new Promise(async (resolve, reject) => { - instance - .events - .BasicEvent({ - fromBlock: 0 - }) - .on('error', function(err) { - failed = true; - this.removeAllListeners(); - reject(new Error('err listener should not hear provider.disconnect')); - }); - - await instance - .methods - .firesEvent(accounts[0], 1) - .send({from: accounts[0]}); - - web3.currentProvider.disconnect(); - - // Resolve only if we haven't already rejected - setTimeout(() => { if(!failed) resolve() }, 2500) - }); - }); - - // Regression test for a race-condition where a fresh web3 instance - // subscribing to past events would have its call parameters deleted while it - // made initial Websocket handshake and return an incorrect response. - it('can immediately listen for events in the past', async function(){ - this.timeout(15000); - - const first = await instance - .methods - .firesEvent(accounts[0], 1) - .send({from: accounts[0]}); - - const second = await instance - .methods - .firesEvent(accounts[0], 1) - .send({from: accounts[0]}); - - // Go forward one block... - await utils.mine(web3, accounts[0]); - const latestBlock = await web3.eth.getBlockNumber(); - - assert(first.blockNumber < latestBlock); - assert(second.blockNumber < latestBlock); - - // Re-instantiate web3 & instance to simulate - // subscribing to past events as first request - web3 = new Web3('ws://localhost:' + port); - const newInstance = new web3.eth.Contract(Basic.abi, instance.options.address); - - let counter = 0; - await new Promise(async resolve => { - newInstance - .events - .BasicEvent({ - fromBlock: 0 - }) - .on('data', function(event) { - counter++; - assert(event.blockNumber < latestBlock); - - if (counter === 2){ - this.removeAllListeners(); - resolve(); - } - }); - }); - }); - - it('hears events when subscribed to "logs" (emitter)', function(){ - return new Promise(async function(resolve, reject){ - - assert(typeof instance.options.address === 'string'); - assert(instance.options.address.length > 0); - - const subscription = web3.eth.subscribe( - "logs", - { - address: instance.options.address - }) - .once("data", function(log) { - assert.equal(log.address, instance.options.address); - subscription.unsubscribe(); - resolve(); - }); - - await instance - .methods - .firesEvent(accounts[0], 1) - .send({from: accounts[0]}); - }); - }); - - it('hears events when subscribed to "logs" (callback)', function(){ - return new Promise(async function(resolve, reject){ - - assert(typeof instance.options.address === 'string'); - assert(instance.options.address.length > 0); - - const subscription = web3.eth.subscribe( - "logs", - { - address: instance.options.address - }, - function(error, log) { - assert.equal(log.address, instance.options.address); - subscription.unsubscribe(); - resolve(); - }); - - await instance - .methods - .firesEvent(accounts[0], 1) - .send({from: accounts[0]}); - }); - }); - - // Test models event signature shadowing when one contract calls another. - // Child and parent contracts have an event named `similar` which has the same - // function signature but indexes arguments differently. - it('handles child events with shadowed signatures', async function(){ - this.timeout(25000); - - let contract; - - const options = { - gasPrice: '1', - gas: 4000000 - }; - - options.data = Child.bytecode; - contract = new web3.eth.Contract(Child.abi, options); - const child = await contract.deploy().send({from: accounts[0]}); - - options.data = Parent.bytecode; - contract = new web3.eth.Contract(Parent.abi, options); - const parent = await contract.deploy().send({from: accounts[0]}); - - await parent - .methods - .fireChildSimilarEvent(child.options.address) - .send({from: accounts[0]}); - - await parent - .methods - .fireChildIdenticalEvent(child.options.address) - .send({from: accounts[0]}); - - const childEvents = await child.getPastEvents({ - fromBlock: 0, - toBlock: 'latest' - }); - - const parentEvents = await parent.getPastEvents({ - fromBlock: 0, - toBlock: 'latest' - }); - - assert.equal(childEvents.length, 2); - assert.equal(parentEvents.length, 0); - - assert.equal(childEvents[0].event, 'Similar'); - assert.equal(typeof childEvents[0].returnValues._owner, 'string'); - - assert.equal(childEvents[1].event, 'Identical'); - assert.equal(typeof childEvents[1].returnValues.childA, 'string'); - }); - - // This test only runs against the ganache client launched in scripts/e2e.ganache.sh - // It's too complicated for geth auto-mining (we'd have to poll for blocks) - // and geth instamine's websockets connection is too fragile for the tests in this file. - it('backfills missed events when auto-reconnecting', function(){ - if(!process.env.GANACHE) return; - this.timeout(10000); - - let counter = 0; - const acc = accounts[0]; - - // Create a parallel connection & contract instance - // so we can trigger events while the WS provider is down... - const _web3 = new Web3('http://localhost:8545'); - const shadow = new _web3.eth.Contract(Basic.abi, instance.options.address); - - // Create a reconnect-enabled WS provider and set the default Web3 with it. - const provider = new Web3.providers.WebsocketProvider( - 'ws://localhost:' + port, - { - reconnect: { - auto: true, - delay: 4000, - maxAttempts: 1 - } - } - ); - - web3.setProvider(provider); - - return new Promise(async function (resolve) { - instance - .events - .BasicEvent() - .on('data', function(event) { - counter++; - - if (counter === 2){ - assert(finalBlock === event.blockNumber + 2); - this.removeAllListeners(); - resolve(); - } - }); - - // First: a regular event - const firstReceipt = await instance.methods.firesEvent(acc, 1).send({from: acc}); - - // Close connection and let it settle... - provider.connection.close(4000); - await utils.waitSeconds(1); - - // Submit another event on parallel connection and mine forward 2 blocks - const secondReceipt = await shadow.methods.firesEvent(acc, 1).send({from: acc}); - utils.mine(_web3, acc); - utils.mine(_web3, acc); - - const finalBlock = await _web3.eth.getBlockNumber(); - assert(finalBlock === secondReceipt.blockNumber + 2) - }); - }); - - it('when event param is a simple string', async function(){ - const msg = 'simplestring'; - - await instance - .methods - .firesStringEvent(msg) - .send({from: accounts[0]}); - - const events = await instance.getPastEvents({ - fromBlock: 0, - toBlock: 'latest' - }); - - assert.equal(events[0].returnValues.str, msg) - }); - - // Malformed utf-8 sequence in the following two tests comes from - // https://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html - // Section: 3.1.8 - it('when an invalid utf-8 string is passed in JS as param to emit', async function(){ - const msg = '�������'; - - await instance - .methods - .firesStringEvent(msg) - .send({from: accounts[0]}); - - const events = await instance.getPastEvents({ - fromBlock: 0, - toBlock: 'latest' - }); - - assert.equal(msg, events[0].returnValues.str) - }); - - it('when Solidity emits an invalid utf-8 string', async function(){ - await instance - .methods - .firesIllegalUtf8StringEvent() - .send({from: accounts[0]}); - - const events = await instance.getPastEvents({ - fromBlock: 0, - toBlock: 'latest' - }); - - assert.equal('�������', events[0].returnValues.str) - }); - - it('when wide unicode characters are passed in JS as param to emit', async function(){ - const msg = '💐'; - - await instance - .methods - .firesStringEvent(msg) - .send({from: accounts[0]}); - - const events = await instance.getPastEvents({ - fromBlock: 0, - toBlock: 'latest' - }); - - assert(msg.length > 'a'.length); - assert.equal(msg, events[0].returnValues.str) - }) - - -}); diff --git a/test/e2e.ens.js b/test/e2e.ens.js deleted file mode 100644 index 13b3cc4145d..00000000000 --- a/test/e2e.ens.js +++ /dev/null @@ -1,182 +0,0 @@ -const setupENS = require('../scripts/js/ens'); -const utils = require('./helpers/test.utils'); -const Web3 = utils.getWeb3(); -const assert = require('assert'); - -describe('ENS [ @E2E ]', function () { - this.timeout(50000); - - let web3; - let account; - let accounts; - let addresses; - let registryAddr; - let resolverAddr; - let options; - - before(async function(){ - web3 = new Web3('http://localhost:8545'); - accounts = await web3.eth.getAccounts(); - account = accounts[0]; - - addresses = await setupENS(web3); - registryAddr = addresses.registry; - resolverAddr = addresses.resolver; - web3.eth.ens.registryAddress = registryAddr; - - options = { - from: account, - gas: 4000000, - gasPrice: 1 - } - }); - - it('custom registry got defined in the ENS module', function () { - assert(web3.eth.ens.registryAddress, registryAddr); - }); - - it('should return the subnode owner of "resolver"', async function () { - const owner = await web3.eth.ens.registry.getOwner('resolver'); - - assert.equal( - owner, - account - ); - }); - - it('should fetch the registered resolver for the subnode "resolver"', async function () { - const resolver = await web3.eth.ens.registry.getResolver('resolver'); - assert.equal(resolver.options.address, resolverAddr); - }); - - it('should return the addr record for the subnode "resolver"', async function () { - const address = await web3.eth.ens.getAddress('resolver'); - - assert.equal( - address, - '0x0000000000000000000000000000000000000001' - ); - }); - - it('should get/set a publickey', async function(){ - const x = "0x3078303030303030303030303030303030303030303030303030303030303030"; - const y = "0x3030303030303030303030303030303030303030303030303030303030303030"; - - await web3.eth.ens.setPubkey('resolver', x, y, options); - const coords = await web3.eth.ens.getPubkey('resolver'); - - assert.equal(coords.x, x); - assert.equal(coords.y, y); - }); - - it('should error when calling "getContent" if resolver does not support it', async function () { - try { - await web3.eth.ens.getContent('resolver'); - assert.fail(); - } catch(err){ - assert(err.message.includes(resolverAddr)); - assert(err.message.includes('does not implement requested method: "content"')) - } - }) - - it('should error when calling "setContent" if resolver does not support it', async function () { - try { - await web3.eth.ens.setContent('resolver', web3.utils.sha3('test')); - assert.fail(); - } catch(err){ - assert(err.message.includes(resolverAddr)); - assert(err.message.includes('does not implement requested method: "setContent"')) - } - }); - - // This test must be run before any contentHashes are set - it('getContenthash return object keys are null if no contentHash is set', async function(){ - const val = await web3.eth.ens.getContenthash('resolver'); - - assert.equal(val.protocolType, null); - assert.equal(val.decoded, null); - assert.equal(val.error, null); - }); - - /** - * NB: hash values for these tests are borrowed from unit tests at @ensdomains/ui - * Link: https://github.com/ensdomains/ui/blob/3e62e440b53466eeec9dd1c63d73924eefbd88c1/src/utils/contents.test.js#L1-L151 - */ - it('should get/set an IPFS contenthash (ipfs://)', async function(){ - const prefix = "ipfs://" - const hash = "QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn"; - - await web3.eth.ens.setContenthash('resolver', prefix + hash, options); - const val = await web3.eth.ens.getContenthash('resolver'); - - assert.equal(val.protocolType, 'ipfs'); - assert.equal(val.decoded, hash); - }); - - it('should get/set an IPFS contenthash (/ipfs/)', async function(){ - const prefix = "/ipfs/" - const hash = "QmaEBknbGT4bTQiQoe2VNgBJbRfygQGktnaW5TbuKixjYL"; - - await web3.eth.ens.setContenthash('resolver', prefix + hash, options); - const val = await web3.eth.ens.getContenthash('resolver'); - - assert.equal(val.protocolType, 'ipfs'); - assert.equal(val.decoded, hash); - }); - - it('should get/set a bzz contenthash', async function(){ - const prefix = "bzz://"; - const hash = "d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162"; - - await web3.eth.ens.setContenthash('resolver', prefix + hash, options); - const val = await web3.eth.ens.getContenthash('resolver'); - - assert.equal(val.protocolType, 'bzz'); - assert.equal(val.decoded, hash); - }); - - it('should get/set an onion contenthash', async function(){ - const prefix = "onion://" - const hash = "3g2upl4pq6kufc4m"; - - await web3.eth.ens.setContenthash('resolver', prefix + hash, options); - const val = await web3.eth.ens.getContenthash('resolver'); - - assert.equal(val.protocolType, 'onion'); - assert.equal(val.decoded, hash); - }); - - it('should get/set an onion3 contenthash', async function(){ - const prefix = "onion3://" - const hash = "p53lf57qovyuvwsc6xnrppyply3vtqm7l6pcobkmyqsiofyeznfu5uqd"; - - await web3.eth.ens.setContenthash('resolver', prefix + hash, options); - const val = await web3.eth.ens.getContenthash('resolver'); - - assert.equal(val.protocolType, 'onion3'); - assert.equal(val.decoded, hash); - }); - - it('setContenthash errors when encoding an invalid contenthash (promise)', async function(){ - // Missing required protocol prefix - const hash = "p53lf57qovyuvwsc6xnrppyply3vtqm7l6pcobkmyqsiofyeznfu5uqd"; - - try { - await web3.eth.ens.setContenthash('resolver', hash, options); - assert.fail(); - } catch(err) { - assert(err.message.includes(`Could not encode ${hash}`)); - } - }); - - it('setContentHash errors when encoding an invalid contenthash (callback)', function(done){ - // Missing required protocol prefix - const hash = "p53lf57qovyuvwsc6xnrppyply3vtqm7l6pcobkmyqsiofyeznfu5uqd"; - - web3.eth.ens.setContenthash('resolver', hash, options, function(err, result){ - assert(err.message.includes(`Could not encode ${hash}`)); - done(); - }); - }); -}); - diff --git a/test/e2e.method.call.js b/test/e2e.method.call.js deleted file mode 100644 index c9641d13418..00000000000 --- a/test/e2e.method.call.js +++ /dev/null @@ -1,102 +0,0 @@ -var assert = require('assert'); -var Basic = require('./sources/Basic'); -var Misc = require('./sources/Misc'); -var utils = require('./helpers/test.utils'); -var Web3 = utils.getWeb3(); - -describe('method.call [ @E2E ]', function () { - var web3; - var accounts; - var basic; - var instance; - var options; - - var basicOptions = { - data: Basic.bytecode, - gasPrice: '1', - gas: 4000000 - }; - - var miscOptions = { - data: Misc.bytecode, - gasPrice: '1', - gas: 4000000 - }; - - describe('http', function () { - before(async function () { - web3 = new Web3('http://localhost:8545'); - accounts = await web3.eth.getAccounts(); - - basic = new web3.eth.Contract(Basic.abi, basicOptions); - instance = await basic.deploy().send({from: accounts[0]}); - }) - - it('retrieves a uint value', async function () { - var expected = '1'; - - await instance - .methods - .setValue(expected) - .send({from: accounts[0]}); - - var value = await instance - .methods - .getValue() - .call({from: accounts[0]}); - - assert.equal(value, expected); - }); - - it('errors correctly when abi and bytecode do not match', async function () { - // Misc n.eq Basic - var wrong = new web3.eth.Contract(Basic.abi, miscOptions); - var wrongInstance = await wrong.deploy().send({from: accounts[0]}); - - try { - await wrongInstance - .methods - .getValue() - .call({from: accounts[0]}); - - assert.fail(); - - } catch (err) { - // ganache | geth <= 1.9.13 - const nullDataResponse = err.message.includes("Returned values aren't valid") && - err.message.includes('the correct ABI'); - - // geth >= 1.9.15 - const gethErrResponse = err.message.includes("revert"); - - assert(nullDataResponse || gethErrResponse); - } - }) - }); - - describe('revert handling', function () { - before(async function () { - web3 = new Web3('http://localhost:8545'); - accounts = await web3.eth.getAccounts(); - - web3.eth.handleRevert = true; - basic = new web3.eth.Contract(Basic.abi, basicOptions); - instance = await basic.deploy().send({from: accounts[0]}); - }); - - it('returns the expected revert reason string', async function () { - try { - await instance - .methods - .reverts() - .call({from: accounts[0]}); - - assert.fail(); - } catch(error) { - assert(error.message.includes('reverted')); - assert.equal(error.reason, 'REVERTED WITH REVERT'); - assert.equal(error.signature, 'Error(String)'); - } - }); - }); -}); diff --git a/test/e2e.method.send.js b/test/e2e.method.send.js deleted file mode 100644 index b17fb403484..00000000000 --- a/test/e2e.method.send.js +++ /dev/null @@ -1,363 +0,0 @@ -var assert = require('assert'); -var Basic = require('./sources/Basic'); -var utils = require('./helpers/test.utils'); -var Web3 = utils.getWeb3(); - -describe('method.send [ @E2E ]', function () { - var web3; - var accounts; - var basic; - var instance; - var options; - - var basicOptions = { - data: Basic.bytecode, - gasPrice: '1', - gas: 4000000 - }; - - describe('http', function () { - before(async function () { - web3 = new Web3('http://localhost:8545'); - accounts = await web3.eth.getAccounts(); - - basic = new web3.eth.Contract(Basic.abi, basicOptions); - instance = await basic.deploy().send({from: accounts[0]}); - }); - - it('returns a receipt', async function () { - var receipt = await instance - .methods - .setValue('1') - .send({from: accounts[0]}); - - assert(receipt.status === true); - assert(web3.utils.isHexStrict(receipt.transactionHash)); - }); - - it('errors on OOG', async function () { - try { - await instance - .methods - .setValue('1') - .send({from: accounts[0], gas: 100}); - - assert.fail(); - - } catch (err) { - assert(err.message.includes('gas')); - } - }); - - it('errors on revert', async function () { - try { - await instance - .methods - .reverts() - .send({from: accounts[0]}); - - assert.fail(); - - } catch (err) { - var receipt = utils.extractReceipt(err.message); - - assert(err.message.includes('revert')); - assert(receipt.status === false); - } - }); - - describe('transactionPollingTimeout', function(){ - // Test requires a node auto mining at intervals - if(!process.env.GETH_AUTOMINE) return; - - // Geth interval is 2s so these txs w/ .25s polling timeouts - // should error before a single block resolves. - it('is configurable for web3.eth methods', async function(){ - web3.eth.transactionPollingTimeout = .25; - - try { - await web3.eth.sendTransaction({ - from: accounts[0], - to: accounts[1], - value: web3.utils.toWei('1', 'ether'), - gas: 21000, - gasPrice: 1 - }); - assert.fail(); - } catch(err){ - assert(err.message.includes('Transaction was not mined within 0.25 seconds')) - } - }); - - it('is configurable for contract methods', async function(){ - web3.eth.transactionPollingTimeout = .25; - - try { - await instance - .methods - .setValue('1') - .send({from: accounts[0]}); - assert.fail(); - } catch(err){ - assert(err.message.includes('Transaction was not mined within 0.25 seconds')) - } - }) - }); - }); - - describe('ws', function () { - // Websockets extremely erratic for geth instamine... - if (process.env.GETH_INSTAMINE) return; - - before(async function () { - var port = utils.getWebsocketPort(); - - web3 = new Web3('ws://localhost:' + port); - accounts = await web3.eth.getAccounts(); - - basic = new web3.eth.Contract(Basic.abi, basicOptions); - instance = await basic.deploy().send({from: accounts[0]}); - }) - - it('returns a receipt', async function () { - var receipt = await instance - .methods - .setValue('1') - .send({from: accounts[0]}); - - assert(receipt.status === true); - assert(web3.utils.isHexStrict(receipt.transactionHash)); - }); - - it('errors on OOG', async function () { - try { - await instance - .methods - .setValue('1') - .send({from: accounts[0], gas: 100}); - - assert.fail(); - - } catch (err) { - assert(err.message.includes('gas')); - } - }); - - it('errors on revert', async function () { - try { - await instance - .methods - .reverts() - .send({from: accounts[0]}); - - assert.fail(); - - } catch (err) { - var receipt = utils.extractReceipt(err.message); - - assert(err.message.includes('revert')); - assert(receipt.status === false); - } - }); - - it('fires the transactionHash event', function (done) { - instance - .methods - .setValue('1') - .send({from: accounts[0]}) - .on('transactionHash', hash => { - assert(web3.utils.isHex(hash)); - done(); - }); - }); - - it('fires the receipt event', function (done) { - instance - .methods - .setValue('1') - .send({from: accounts[0]}) - .on('receipt', receipt => { - assert(receipt.status === true); - done(); - }); - }); - - it('fires the confirmation handler', function () { - return new Promise(async (resolve, reject) => { - - var startBlock = await web3.eth.getBlockNumber(); - - await instance - .methods - .setValue('1') - .send({from: accounts[0]}) - .on('confirmation', async (number, receipt) => { - if (number === 1) { // Confirmation numbers are zero indexed - var endBlock = await web3.eth.getBlockNumber(); - assert(endBlock >= (startBlock + 2)); - resolve(); - } - }); - - // Necessary for instamine, should not interfere with automine. - await utils.mine(web3, accounts[0]); - }); - }); - - it('fires the error handler on OOG', function (done) { - instance - .methods - .setValue('1') - .send({from: accounts[0], gas: 100}) - .on('error', err => { - assert(err.message.includes('gas')); - done(); - }); - }); - - it('fires the error handler on revert', function (done) { - instance - .methods - .reverts() - .send({from: accounts[0]}) - .on('error', err => { - assert(err.message.includes('revert')); - done(); - }); - }); - }); - - describe('with revert handling activated', function () { - before(async function () { - web3 = new Web3('http://localhost:8545'); - accounts = await web3.eth.getAccounts(); - - web3.eth.handleRevert = true; - basic = new web3.eth.Contract(Basic.abi, basicOptions); - - instance = await basic.deploy().send({from: accounts[0]}); - }); - - it('errors on OOG', async function () { - try { - await instance - .methods - .setValue('1') - .send({from: accounts[0], gas: 100}); - - assert.fail(); - - } catch (err) { - assert(err.message.includes('gas')); - } - }); - - it('Promise throws on revert', async function () { - try { - await instance - .methods - .reverts() - .send({from: accounts[0]}); - - assert.fail(); - - } catch (err) { - assert.equal(err.signature, 'Error(String)'); - assert.equal(err.reason, 'REVERTED WITH REVERT'); - assert(err.message.includes('reverted')); - } - }); - - it('Promise throws on failing require with a revert reason given', async function () { - try { - await instance - .methods - .requireWithReason() - .send({from: accounts[0]}); - - assert.fail(); - - } catch (err) { - assert.equal(err.signature, 'Error(String)'); - assert.equal(err.reason, 'REVERTED WITH REQUIRE'); - assert(err.message.includes('reverted')); - } - }); - - it('Promise throws on failing require without a revert reason given', async function () { - try { - await instance - .methods - .requireWithoutReason() - .send({from: accounts[0]}); - - assert.fail(); - - } catch (err) { - var receipt = utils.extractReceipt(err.message); - - assert.equal(receipt.status, false); - assert.equal(err.signature, undefined); - assert.equal(err.reason, undefined); - assert(err.message.includes('EVM')); - } - }); - - it('fires the error handler on OOG', function (done) { - instance - .methods - .setValue('1') - .send({from: accounts[0], gas: 100}) - .on('error', err => { - assert(err.message.includes('gas')); - done(); - }); - }); - - it('fires the error handler on failing require without a revert reason given', function (done) { - instance - .methods - .requireWithoutReason() - .send({from: accounts[0]}) - .on('error', (err, receipt) => { - assert.equal(receipt.status, false); - assert.equal(err.signature, undefined); - assert.equal(err.reason, undefined); - assert(err.message.includes('EVM')); - - done(); - }); - }); - - it('fires the error handler on failing require with a revert reason given', function (done) { - instance - .methods - .requireWithReason() - .send({from: accounts[0]}) - .on('error', (err, receipt) => { - assert.equal(receipt.status, false); - assert.equal(err.signature, 'Error(String)'); - assert.equal(err.reason, 'REVERTED WITH REQUIRE'); - assert(err.message.includes('reverted')); - - done(); - }); - }); - - it('fires the error handler on revert', function (done) { - instance - .methods - .reverts() - .send({from: accounts[0]}) - .on('error', (err, receipt) => { - assert.equal(receipt.status, false); - assert.equal(err.signature, 'Error(String)'); - assert.equal(err.reason, 'REVERTED WITH REVERT'); - assert(err.message.includes('reverted')); - - done(); - }); - }); - }); -}); - diff --git a/test/e2e.method.signing.js b/test/e2e.method.signing.js deleted file mode 100644 index 3976a000606..00000000000 --- a/test/e2e.method.signing.js +++ /dev/null @@ -1,419 +0,0 @@ -var assert = require('assert'); -var EJSCommon = require('ethereumjs-common'); -var EJSTx = require('ethereumjs-tx'); -var Basic = require('./sources/Basic'); -var utils = require('./helpers/test.utils'); -var Web3 = utils.getWeb3(); - -describe('transaction and message signing [ @E2E ]', function() { - let web3; - let accounts; - let wallet; - let basic; - let instance; - - const basicOptions = { - data: Basic.bytecode, - gasPrice: '1', - gas: 4000000 - }; - - before(async function(){ - web3 = new Web3('http://localhost:8545'); - accounts = await web3.eth.getAccounts(); - - // Create a funded account w/ a private key - wallet = web3.eth.accounts.wallet.create(10); - - await web3.eth.sendTransaction({ - from: accounts[0], - to: wallet[0].address, - value: web3.utils.toWei('50', 'ether'), - }); - - basic = new web3.eth.Contract(Basic.abi, basicOptions); - instance = await basic.deploy().send({from: accounts[0]}); - }); - - it('sendSignedTransaction (with eth.signTransaction)', async function(){ - // ganache does not support eth_signTransaction - if (process.env.GANACHE || global.window ) return - - const destination = wallet[1].address; - const source = accounts[0]; // Unlocked geth-dev account - - const txCount = await web3.eth.getTransactionCount(source); - - const rawTx = { - nonce: web3.utils.toHex(txCount), - to: destination, - from: source, - value: web3.utils.toHex(web3.utils.toWei('0.1', 'ether')), - gasLimit: web3.utils.toHex(21000), - gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')) - }; - - const signed = await web3.eth.signTransaction(rawTx); - const receipt = await web3.eth.sendSignedTransaction(signed.raw); - - assert(receipt.status === true); - }); - - it('sendSignedTransaction (accounts.signTransaction with signing options)', async function(){ - const source = wallet[0].address; - const destination = wallet[1].address; - - const txCount = await web3.eth.getTransactionCount(source); - const networkId = await web3.eth.net.getId(); - const chainId = await web3.eth.getChainId(); - - - const customCommon = { - baseChain: 'mainnet', - customChain: { - name: 'custom-network', - networkId: networkId, - chainId: chainId, - }, - harfork: 'petersburg', - }; - - const txObject = { - nonce: web3.utils.toHex(txCount), - to: destination, - value: web3.utils.toHex(web3.utils.toWei('0.1', 'ether')), - gasLimit: web3.utils.toHex(21000), - gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')), - common: customCommon - }; - - const signed = await web3.eth.accounts.signTransaction(txObject, wallet[0].privateKey); - const receipt = await web3.eth.sendSignedTransaction(signed.rawTransaction); - - assert(receipt.status === true); - }); - - it('sendSignedTransaction (accounts.signTransaction / without signing options)', async function(){ - const source = wallet[0].address; - const destination = wallet[1].address; - - const txCount = await web3.eth.getTransactionCount(source); - - const txObject = { - nonce: web3.utils.toHex(txCount), - to: destination, - value: web3.utils.toHex(web3.utils.toWei('0.1', 'ether')), - gasLimit: web3.utils.toHex(21000), - gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')), - }; - - const signed = await web3.eth.accounts.signTransaction(txObject, wallet[0].privateKey); - const receipt = await web3.eth.sendSignedTransaction(signed.rawTransaction); - - assert(receipt.status === true); - }); - - it('accounts.signTransaction, (with callback, nonce not specified)', function(done){ - const source = wallet[0].address; - const destination = wallet[1].address; - - const txObject = { - to: destination, - value: web3.utils.toHex(web3.utils.toWei('0.1', 'ether')), - gasLimit: web3.utils.toHex(21000), - gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')), - }; - - web3.eth.accounts.signTransaction(txObject, wallet[0].privateKey, async function(err, signed){ - const receipt = await web3.eth.sendSignedTransaction(signed.rawTransaction); - assert(receipt.status === true); - done(); - }); - }); - - it('accounts.signTransaction errors when common, chain and hardfork all defined', async function(){ - const source = wallet[0].address; - const destination = wallet[1].address; - - const txCount = await web3.eth.getTransactionCount(source); - - const txObject = { - nonce: web3.utils.toHex(txCount), - to: destination, - value: web3.utils.toHex(web3.utils.toWei('0.1', 'ether')), - gasLimit: web3.utils.toHex(21000), - gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')), - chain: "ropsten", - common: {}, - hardfork: "istanbul" - }; - - try { - await web3.eth.accounts.signTransaction(txObject, wallet[0].privateKey); - assert.fail() - } catch (err) { - assert(err.message.includes('common object or the chain and hardfork')); - } - }); - - it('accounts.signTransaction errors when chain specified without hardfork', async function(){ - const source = wallet[0].address; - const destination = wallet[1].address; - - const txCount = await web3.eth.getTransactionCount(source); - - const txObject = { - nonce: web3.utils.toHex(txCount), - to: destination, - value: web3.utils.toHex(web3.utils.toWei('0.1', 'ether')), - gasLimit: web3.utils.toHex(21000), - gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')), - chain: "ropsten" - }; - - try { - await web3.eth.accounts.signTransaction(txObject, wallet[0].privateKey); - assert.fail() - } catch (err) { - assert(err.message.includes('both values must be defined')); - } - }); - - it('accounts.signTransaction errors when hardfork specified without chain', async function(){ - const source = wallet[0].address; - const destination = wallet[1].address; - - const txCount = await web3.eth.getTransactionCount(source); - - const txObject = { - nonce: web3.utils.toHex(txCount), - to: destination, - value: web3.utils.toHex(web3.utils.toWei('0.1', 'ether')), - gasLimit: web3.utils.toHex(21000), - gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')), - hardfork: "istanbul" - }; - - try { - await web3.eth.accounts.signTransaction(txObject, wallet[0].privateKey); - assert.fail() - } catch (err) { - assert(err.message.includes('both values must be defined')); - } - }); - - it('accounts.signTransaction errors when tx signing is invalid', async function(){ - const source = wallet[0].address; - const destination = wallet[1].address; - - const txCount = await web3.eth.getTransactionCount(source); - - // Using gas === 0 / ethereumjs-tx checks this wrt common baseFee - const txObject = { - nonce: web3.utils.toHex(txCount), - to: destination, - value: web3.utils.toHex(web3.utils.toWei('0.1', 'ether')), - gasLimit: web3.utils.toHex(0), - gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')), - hardfork: "istanbul", - chain: "ropsten", - }; - - try { - await web3.eth.accounts.signTransaction(txObject, wallet[0].privateKey); - assert.fail() - } catch (err) { - assert(err.message.includes('gas limit is too low')); - } - }) - - it('accounts.signTransaction errors when no transaction is passed', async function(){ - try { - await web3.eth.accounts.signTransaction(undefined, wallet[0].privateKey); - assert.fail() - } catch (err) { - assert(err.message.includes('No transaction object')); - } - }); - - it('wallet executes method call using chain & hardfork options', async function(){ - // Geth --dev errors with 'invalid sender' when using these options. - // Requires a custom common configuration (see next test). Ganache doesn't care - if(!process.env.GANACHE) return; - - basic = new web3.eth.Contract(Basic.abi, basicOptions); - basic.defaultChain = 'mainnet'; - basic.defaultHardfork = 'istanbul'; - - instance = await basic - .deploy() - .send({from: wallet[0].address}); - - const receipt = await instance - .methods - .setValue('1') - .send({from: wallet[0].address}); - - assert(receipt.status === true); - assert(web3.utils.isHexStrict(receipt.transactionHash)); - }); - - it('wallet executes method call using customCommon option', async function(){ - const networkId = await web3.eth.net.getId(); - const chainId = await web3.eth.getChainId(); - - const customCommon = { - baseChain: 'mainnet', - customChain: { - name: 'custom-network', - networkId: networkId, - chainId: chainId, - }, - harfork: 'istanbul', - }; - - basic = new web3.eth.Contract(Basic.abi, basicOptions); - basic.defaultCommon = customCommon; - - instance = await basic - .deploy() - .send({from: wallet[0].address}); - - const receipt = await instance - .methods - .setValue('1') - .send({from: wallet[0].address}); - - assert(receipt.status === true); - assert(web3.utils.isHexStrict(receipt.transactionHash)); - }); - - it('transactions sent with wallet throws error correctly (with receipt)', async function(){ - const data = instance - .methods - .reverts() - .encodeABI(); - - const tx = { - from: wallet[0], - to: instance.options.address, - data: data, - gasPrice: '1', - gas: 4000000 - } - - try { - await web3.eth.sendTransaction(tx); - assert.fail(); - } catch(err){ - var receipt = utils.extractReceipt(err.message); - - assert(err.message.includes('revert')) - assert(receipt.status === false); - } - }); - - it('sendSignedTransaction reverts with reason', async function(){ - const data = instance - .methods - .reverts() - .encodeABI(); - - const source = wallet[0].address; - const txCount = await web3.eth.getTransactionCount(source); - - const txObject = { - nonce: web3.utils.toHex(txCount), - to: instance.options.address, - gasLimit: web3.utils.toHex(400000), - gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')), - data: data - }; - - const signed = await web3.eth.accounts.signTransaction(txObject, wallet[0].privateKey); - - web3.eth.handleRevert = true; - try { - await web3.eth.sendSignedTransaction(signed.rawTransaction); - assert.fail(); - } catch(err){ - assert.equal(err.receipt.status, false); - assert.equal(err.reason, "REVERTED WITH REVERT"); - } - }); - - it('transactions sent with wallet error correctly (OOG)', function(done){ - const data = instance - .methods - .reverts() - .encodeABI(); - - const tx = { - from: wallet[0], - to: instance.options.address, - data: data, - gasPrice: '1', - gas: 10 - } - - web3 - .eth - .sendTransaction(tx) - .on('error', function(err){ - assert(err.message.includes('gas')) - done(); - }) - }); - - it('eth.personal.sign', async function(){ - // ganache does not support eth_sign - if (process.env.GANACHE || global.window ) return - - const message = 'hello'; - - const signature = await web3.eth.personal.sign( - message, - accounts[1], // Unlocked geth-dev acct - "left-hand-of-darkness" // Default password at geth-dev - ); - - const recovered = await web3.eth.personal.ecRecover(message, signature); - assert.equal(accounts[1].toLowerCase(), recovered.toLowerCase()); - }); - - it('eth.accounts.sign', async function(){ - if (process.env.GANACHE || global.window ) return - - const message = 'hello'; - - const signed = web3.eth.accounts.sign(message, wallet[0].privateKey); - const recovered = await web3.eth.personal.ecRecover(message, signed.signature); - assert.equal(wallet[0].address.toLowerCase(), recovered.toLowerCase()); - }) - - // Smoke test to validate browserify's buffer polyfills (feross/buffer@5) - // A companion regression test for Webpack & feross/buffer@4.9.2 exists at: - // test/eth.accounts.webpack.js - it("encrypt then decrypt wallet", function(done) { - this.timeout(20000); - try { - const password = "qwerty"; - const addressFromWallet = wallet[0].address; - - const keystore = wallet.encrypt(password); - - // Wallet created w/ 10 accounts in before block - assert.equal(keystore.length, 10); - - wallet.decrypt(keystore, password); - assert.equal(wallet.length, 10); - - const addressFromKeystore = wallet[0].address; - assert.equal(addressFromKeystore, addressFromWallet); - done() - } catch(error) { - done(error) - } - }); -}); - diff --git a/test/e2e.minified.js b/test/e2e.minified.js deleted file mode 100644 index d39aa6295c0..00000000000 --- a/test/e2e.minified.js +++ /dev/null @@ -1,11 +0,0 @@ -// Simple check to make sure window.web3 is defined for the karma min loading tests -describe('window.Web3 is defined', function () { - - // Referencing `process` throws w/out browserify. - // We want to be skipped during the browserified units tests here. - it("loads", function(){ - try { if (process) return } catch (e) {} - - if (!window.Web3) throw new Error('"window.Web3" was not defined'); - }); -}) diff --git a/test/errors.js b/test/errors.js deleted file mode 100644 index b983c65d9f4..00000000000 --- a/test/errors.js +++ /dev/null @@ -1,18 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; - -var errors = require('../packages/web3-core-helpers/src/errors.js'); - -describe('lib/web3/method', function () { - describe('getCall', function () { - - for(var key in errors) { - it('should return and error', function () { - - assert.instanceOf(errors[key](), Error); - }); - } - - }); -}); - diff --git a/test/eth.Iban.js b/test/eth.Iban.js deleted file mode 100644 index fca29a01137..00000000000 --- a/test/eth.Iban.js +++ /dev/null @@ -1,46 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Eth = require('../packages/web3-eth'); -var eth = new Eth(); - -var tests = [ - { - direct: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', - address: '0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8' // checksum address - }, - { - direct: 'XE1222Q908LN1QBBU6XUQSO1OHWJIOS46OO', - address: '0x11c5496AEE77c1bA1f0854206a26dDa82A81D6D8' - }, - { - direct: 'XE75JRZCTTLBSYEQBGAS7GID8DKR7QY0QA3', - address: '0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B' // checksum address - }, - { - error: true, - direct: 'XE81ETHXREGGAVOFYORK', - address: '0xHELLO' // checksum address - } -]; - -describe('eth', function () { - describe('Iban', function () { - tests.forEach(function (test) { - it('toAddress() should transform iban to address: ' + test.address, function () { - if(test.error) { - assert.throws(eth.Iban.toAddress.bind(eth.Iban, test.direct)); - } else { - assert.deepEqual(eth.Iban.toAddress(test.direct), test.address); - } - }); - it('toIban() should transform address to iban: ' + test.address, function () { - if(test.error) { - assert.throws(eth.Iban.toIban.bind(eth, test.address)); - } else { - assert.deepEqual(eth.Iban.toIban(test.address), test.direct); - } - }); - }); - }); -}); - diff --git a/test/eth.abi.decodeLog.js b/test/eth.abi.decodeLog.js deleted file mode 100644 index 1d71dabab9e..00000000000 --- a/test/eth.abi.decodeLog.js +++ /dev/null @@ -1,182 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Web3Abi = require('../packages/web3-eth-abi'); - -var tests = [{ - params: [[{ - type: 'string', - name: 'myString' - },{ - type: 'uint256', - name: 'myNumber', - indexed: true - },{ - type: 'uint8', - name: 'mySmallNumber', - indexed: true - }], '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000748656c6c6f252100000000000000000000000000000000000000000000000000', - ['0x000000000000000000000000000000000000000000000000000000000000f310', '0x0000000000000000000000000000000000000000000000000000000000000010']], - result: { - '0': 'Hello%!', - '1': '62224', - '2': '16', - myString: 'Hello%!', - myNumber: '62224', - mySmallNumber: '16', - "__length__": 3 - } -},{ - params: [[{ - type: 'bytes', - name: 'HelloBytes' - },{ - type: 'uint8', - name: 'myNumberWork', - indexed: true - }], '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000748656c6c6f252100000000000000000000000000000000000000000000000000', - ['0x00000000000000000000000000000000000000000000000000000000000000f3']], - result: { - '0': '0x48656c6c6f2521', - '1': '243', - HelloBytes: '0x48656c6c6f2521', - myNumberWork: '243', - "__length__": 2 - } -},{ - params: [[{ - type: 'bytes32', - name: 'HelloBytes', - indexed: true - },{ - type: 'bool', - name: 'IsTrue', - indexed: true - },{ - type: 'uint8', - name: 'myNumberWork', - indexed: true - }], '', - ['0xffdd0000000000000000000000000000000000000000000000000000000000f3','0x0000000000000000000000000000000000000000000000000000000000000001','0x00000000000000000000000000000000000000000000000000000000000000f3']], - result: { - '0': '0xffdd0000000000000000000000000000000000000000000000000000000000f3', - '1': true, - '2': '243', - HelloBytes: '0xffdd0000000000000000000000000000000000000000000000000000000000f3', - IsTrue: true, - myNumberWork: '243', - "__length__": 3 - } -},{ - params: [[{ - type: 'string', - name: 'MyString', - indexed: true - },{ - type: 'bool', - name: 'IsTrue', - indexed: true - },{ - type: 'uint8', - name: 'myNumberWork', - indexed: true - }], '', - ['0xffdd000000000000000000000000000000000000000000000000000000000003','0x0000000000000000000000000000000000000000000000000000000000000000','0x000000000000000000000000000000000000000000000000000000000000fd44']], - result: { - '0': '0xffdd000000000000000000000000000000000000000000000000000000000003', - '1': false, - '2': '68', - MyString: '0xffdd000000000000000000000000000000000000000000000000000000000003', - IsTrue: false, - myNumberWork: '68', - "__length__": 3 - } -},{ - params: [[{ - indexed: true, name: "from", type: "address" - }, - { - indexed: true, name: "to", type: "address" - }, - { - indexed: false, name: "amount", type: "uint256" - }, - { - indexed: false, name: "narrative", type: "string" - }], '0x0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000067465737420780000000000000000000000000000000000000000000000000000', - ['0x000000000000000000000000ae653250b4220835050b75d3bc91433246903a95', '0x00000000000000000000000094011c67bc1e6448ed4b8682047358ca6cd09470']], - result: { - '0': '0xae653250B4220835050B75D3bC91433246903A95', - '1': '0x94011c67BC1E6448ed4b8682047358ca6cD09470', - '2': '10000', - '3': 'test x', - from: '0xae653250B4220835050B75D3bC91433246903A95', - to: '0x94011c67BC1E6448ed4b8682047358ca6cD09470', - amount: '10000', - narrative: 'test x', - __length__: 4 - } -},{ - params: [[{ - indexed: true, name: "from", type: "address" - }, - { - indexed: true, name: "to", type: "address" - }, - { - indexed: false, name: "amount", type: "uint256" - }, - { - indexed: false, name: "narrative", type: "string" - }], '0x00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000', - ['0x000000000000000000000000ae653250b4220835050b75d3bc91433246903a95', '0x00000000000000000000000094011c67bc1e6448ed4b8682047358ca6cd09470']], - result: { - '0': '0xae653250B4220835050B75D3bC91433246903A95', - '1': '0x94011c67BC1E6448ed4b8682047358ca6cD09470', - '2': '10000', - '3': 'Hello!%!', - from: '0xae653250B4220835050B75D3bC91433246903A95', - to: '0x94011c67BC1E6448ed4b8682047358ca6cD09470', - amount: '10000', - narrative: 'Hello!%!', - __length__: 4 - } -},{ - params: [[ - { - indexed: false, - internalType: "function () external", - name: "fn", - type: "function" - }], "0xfba657cfc72d1933c9949b383a77a14b6ad29912c04062260000000000000000", - [] ], - result: { - "0": "0xfba657cfc72d1933c9949b383a77a14b6ad29912c0406226", - "fn": "0xfba657cfc72d1933c9949b383a77a14b6ad29912c0406226", - "__length__": 1 - } -},{ - params:[[ - { - type: 'string', - name: 'a', - },{ - type: 'string', - name: 'b' - }], '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000061000000000000000000000000000000000000000000000000000000000000000141000000000000000000000000000000000000000000000000000000000000000141', - ['0x0000000000000000000000000000000000000000000000000000000000000000']], - result: { - "0": "A", - "1": "A", - "a": "A", - "b": "A", - "__length__": 2 - } -}]; - -describe('decodeLog', function () { - tests.forEach(function (test) { - it('should convert correctly', function () { - assert.deepEqual(Web3Abi.decodeLog.apply(Web3Abi, test.params), test.result); - }); - }); -}); diff --git a/test/eth.abi.decodeParameter.js b/test/eth.abi.decodeParameter.js deleted file mode 100644 index 99d1bef5286..00000000000 --- a/test/eth.abi.decodeParameter.js +++ /dev/null @@ -1,19 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Abi = require('../packages/web3-eth-abi'); - -var tests = [{ - params: ['uint256', '0x0000000000000000000000000000000000000000000000000000000000000010'], - result: "16" -},{ - params: ['string', '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000'], - result: "Hello!%!" -}]; - -describe('decodeParameter', function () { - tests.forEach(function (test) { - it('should convert correctly', function () { - assert.equal(Abi.decodeParameter.apply(Abi, test.params), test.result); - }); - }); -}); diff --git a/test/eth.abi.decodeParameters.js b/test/eth.abi.decodeParameters.js deleted file mode 100644 index 6e32a9f55db..00000000000 --- a/test/eth.abi.decodeParameters.js +++ /dev/null @@ -1,91 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Abi = require('../packages/web3-eth-abi'); - -var tests = [{ - params: [['string', 'uint256'], '0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000ea000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000'], - result: { - '0': 'Hello!%!', - '1': '234', - "__length__": 2 - } -},{ - params: [[{ - type: 'string', - name: 'myString' - },{ - type: 'uint256', - name: 'myNumber' - }], '0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000ea000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000'], - result: { - '0': 'Hello!%!', - '1': '234', - myString: 'Hello!%!', - myNumber: '234', - "__length__": 2 - } -},{ - params: [['string'], '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'], - result: {'0': "", "__length__": 1} -},{ - params: [['int256'], '0x0000000000000000000000000000000000000000000000000000000000000000'], - result: {'0': "0", "__length__": 1} -},{ - params: [['uint256'], '0x0000000000000000000000000000000000000000000000000000000000000000'], - result: {'0': "0", "__length__": 1} -},{ - params: [['bytes'], '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'], - result: {'0': null, "__length__": 1} -},{ - params: [['address'], '0x0000000000000000000000000000000000000000000000000000000000000000'], - result: {'0': "0x0000000000000000000000000000000000000000", "__length__": 1} -},{ - params: [['bytes32'], '0x0000000000000000000000000000000000000000000000000000000000000000'], - result: {'0': "0x0000000000000000000000000000000000000000000000000000000000000000", "__length__": 1} -},{ - params: [['bool'], '0x0000000000000000000000000000000000000000000000000000000000000000'], - result: {'0': false, "__length__": 1} -}]; - -describe('decodeParameters', function () { - tests.forEach(function (test) { - it('should convert correctly', function () { - assert.deepEqual(Abi.decodeParameters.apply(Abi, test.params), test.result); - }); - }); -}); - - -var failures = [{ - params: [['string', 'uint256'], '0x'] -},{ - params: [[{ - type: 'string', - name: 'myString' - },{ - type: 'uint256', - name: 'myNumber' - }], '0x'] -},{ - params: [['string'], '0x'] -},{ - params: [['int256'], '0x'] -},{ - params: [['uint256'], '0x'] -},{ - params: [['bytes'], '0x'] -},{ - params: [['address'], '0x'] -},{ - params: [['bytes32'], '0x'] -},{ - params: [['bool'], '0x'] -}]; - -describe('decodeParameters', function () { - failures.forEach(function (test) { - it('should not convert '+test.params[1]+' to '+test.params[0], function () { - assert.throws(_ => {Abi.decodeParameters.apply(Abi, test.params)}); - }); - }); -}); diff --git a/test/eth.abi.encodeEventSignature.js b/test/eth.abi.encodeEventSignature.js deleted file mode 100644 index 76f69cdcaf4..00000000000 --- a/test/eth.abi.encodeEventSignature.js +++ /dev/null @@ -1,46 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Abi = require('../packages/web3-eth-abi'); - -var tests = [{ - params: [{ - name: 'myEvent', - type: 'event', - inputs: [{ - type: 'uint256', - name: 'myNumber' - },{ - type: 'bytes32', - name: 'myBytes' - }] - }], - result: '0xf2eeb729e636a8cb783be044acf6b7b1e2c5863735b60d6daae84c366ee87d97' -},{ - params: [{ - name: 'SomeEvent', - type: 'event', - inputs: [{ - type: 'bytes', - name: 'somebytes' - },{ - type: 'byte16', - name: 'myBytes' - }] - }], - result: '0xab132b6cdd50f8d4d2ea33c3f140a9b3cf40f451540c69765c4842508bb13838' -},{ - params: [{ - name: 'AnotherEvent', - type: 'event', - inputs: [] - }], - result: '0x601d819e31a3cd164f83f7a7cf9cb5042ab1acff87b773c68f63d059c0af2dc0' -}]; - -describe('encodeEventSignature', function () { - tests.forEach(function (test) { - it('should convert correctly', function () { - assert.equal(Abi.encodeEventSignature.apply(Abi, test.params), test.result); - }); - }); -}); diff --git a/test/eth.abi.encodeFunctionCall.js b/test/eth.abi.encodeFunctionCall.js deleted file mode 100644 index 719b3d21df6..00000000000 --- a/test/eth.abi.encodeFunctionCall.js +++ /dev/null @@ -1,52 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Abi = require('../packages/web3-eth-abi'); - -var tests = [{ - params: [{ - name: 'myMethod', - type: 'function', - inputs: [{ - type: 'uint256', - name: 'myNumber' - },{ - type: 'string', - name: 'myString' - }] - }, ['2345675643', 'Hello!%']], - result: '0x24ee0097000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000' -},{ - params: [{ - name: 'myOtherMethod', - type: 'function', - inputs: [{ - type: 'uint16', - name: 'myNumberdd' - },{ - type: 'bytes32', - name: 'myBytes' - }] - }, [2323, '0x234567432145678543213456']], - result: '0xed6d6f8500000000000000000000000000000000000000000000000000000000000009132345674321456785432134560000000000000000000000000000000000000000' -},{ - params: [{ - name: 'myMethod', - type: 'function', - inputs: [{ - type: 'uint256', - name: 'myNumber' - },{ - type: 'bytes', - name: 'myBytes' - }] - }, ['2345675643', '0x23456743214567854321ffffdddddd']], - result: '0x4c6a9980000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000f23456743214567854321ffffdddddd0000000000000000000000000000000000' -}]; - -describe('encodeFunctionCall', function () { - tests.forEach(function (test) { - it('should convert correctly', function () { - assert.equal(Abi.encodeFunctionCall.apply(Abi, test.params), test.result); - }); - }); -}); diff --git a/test/eth.abi.encodeFunctionSignature.js b/test/eth.abi.encodeFunctionSignature.js deleted file mode 100644 index 2182df00d53..00000000000 --- a/test/eth.abi.encodeFunctionSignature.js +++ /dev/null @@ -1,59 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Abi = require('../packages/web3-eth-abi'); - -var tests = [{ - params: [{ - name: 'myMethod', - type: 'function', - inputs: [{ - type: 'uint256', - name: 'myNumber' - },{ - type: 'string', - name: 'myString' - }] - }], - result: '0x24ee0097' -},{ - params: [{ - name: 'myMethod', - type: 'function', - inputs: [{ - type: 'string', - name: 'myNumber' - },{ - type: 'bytes8', - name: 'myString' - }] - }], - result: '0x27b00c93' -},{ - params: [{ - name: 'Somthing', - type: 'function', - inputs: [{ - type: 'uint16', - name: 'myNumber' - },{ - type: 'bytes', - name: 'myString' - }] - }], - result: '0x724ff7a1' -},{ - params: [{ - name: 'something', - type: 'function', - inputs: [] - }], - result: '0xa7a0d537' -}]; - -describe('encodeFunctionSignature', function () { - tests.forEach(function (test) { - it('should convert correctly', function () { - assert.equal(Abi.encodeFunctionSignature.apply(Abi, test.params), test.result); - }); - }); -}); diff --git a/test/eth.abi.encodeParameter.js b/test/eth.abi.encodeParameter.js deleted file mode 100644 index 4ba9548fd05..00000000000 --- a/test/eth.abi.encodeParameter.js +++ /dev/null @@ -1,22 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Abi = require('../packages/web3-eth-abi'); - -var tests = [{ - params: ['uint256', '2345675643'], - result: '0x000000000000000000000000000000000000000000000000000000008bd02b7b' -},{ - params: ['bytes32', '0xdf3234'], - result: '0xdf32340000000000000000000000000000000000000000000000000000000000' -},{ - params: ['bytes32[]', ['0xdf3234', '0xfdfd']], - result: '0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002df32340000000000000000000000000000000000000000000000000000000000fdfd000000000000000000000000000000000000000000000000000000000000' -}]; - -describe('encodeParameter', function () { - tests.forEach(function (test) { - it('should convert correctly', function () { - assert.equal(Abi.encodeParameter.apply(Abi, test.params), test.result); - }); - }); -}); diff --git a/test/eth.abi.encodeParameters.js b/test/eth.abi.encodeParameters.js deleted file mode 100644 index 2f7428f5323..00000000000 --- a/test/eth.abi.encodeParameters.js +++ /dev/null @@ -1,22 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Abi = require('../packages/web3-eth-abi'); - -var tests = [{ - params: [['uint256','string'], ['2345675643', 'Hello!%']], - result: '0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000' -},{ - params: [['uint64[]','bytes32'], [['34','434'], '0x324567dfff']], - result: '0x0000000000000000000000000000000000000000000000000000000000000040324567dfff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000001b2' -},{ - params: [['address','address','address', 'address'], ['0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1','0x10f8bf6a479f320ead074411a4b0e7944ea8c9c1','0xfff8bf6a479f320ead074411a4b0e7944ea8c9c1', '0xddd8bf6a479f320ead074411a4b0e7944ea8c9c1']], - result: '0x00000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c100000000000000000000000010f8bf6a479f320ead074411a4b0e7944ea8c9c1000000000000000000000000fff8bf6a479f320ead074411a4b0e7944ea8c9c1000000000000000000000000ddd8bf6a479f320ead074411a4b0e7944ea8c9c1' -}]; - -describe('encodeParameters', function () { - tests.forEach(function (test) { - it('should convert correctly', function () { - assert.equal(Abi.encodeParameters.apply(Abi, test.params), test.result); - }); - }); -}); diff --git a/test/eth.accounts.create.js b/test/eth.accounts.create.js deleted file mode 100644 index 4ca1317d276..00000000000 --- a/test/eth.accounts.create.js +++ /dev/null @@ -1,34 +0,0 @@ -var Accounts = require("./../packages/web3-eth-accounts"); -var ethers = require('ethers'); -var chai = require('chai'); -var assert = chai.assert; -var Web3 = require('../packages/web3'); -var web3 = new Web3(); - -var tests = []; -for (var i = 0; i < 1000; i++) { - tests.push(i); -} - - -describe("eth", function () { - describe("accounts", function () { - - tests.forEach(function (test, i) { - it("create eth.account, and compare to ethers wallet", function() { - var ethAccounts = new Accounts(); - - // create account - var acc = ethAccounts.create(); - - // create ethers wallet - var ethWall = new ethers.Wallet(acc.privateKey); - - // compare addresses and private keys - assert.equal(acc.address, ethWall.address); - assert.equal(acc.privateKey, ethWall.privateKey); - }); - - }); - }); -}); diff --git a/test/eth.accounts.encrypt-decrypt.js b/test/eth.accounts.encrypt-decrypt.js deleted file mode 100644 index 12545b7d825..00000000000 --- a/test/eth.accounts.encrypt-decrypt.js +++ /dev/null @@ -1,250 +0,0 @@ -var Accounts = require("./../packages/web3-eth-accounts/src/index.js"); -var ethers = require('ethers'); -var chai = require('chai'); -var assert = chai.assert; -var Web3 = require('../packages/web3'); -var web3 = new Web3(); - -var tests = []; -for (var i = 0; i < 50; i++) { - tests.push(i); -} -var n = 256; -var r = 8; -var p = 1; -var salt = '3a1012583f8be138537bc7cf8a50c925b6fcc01a9f7744c85a18fbdc07999f10'; -var iv = Buffer.from('653195c3e2791ac53f3f19b125c18f8c', 'hex'); -var uuid = Buffer.from('ff31ddc3e2791ac53f3f19b125c18fff', 'hex'); -var pw = 'test'; - -// tests from https://github.com/Gustav-Simonsson/go-ethereum/blob/7cc6b801e0967e5ebfa26b9f670675acea6e3a20/accounts/testdata/v3_test_vector.json -var staticTests = [ - { - "json": { - "crypto" : { - "cipher" : "aes-128-ctr", - "cipherparams" : { - "iv" : "83dbcc02d8ccb40e466191a123791e0e" - }, - "ciphertext" : "d172bf743a674da9cdad04534d56926ef8358534d458fffccd4e6ad2fbde479c", - "kdf" : "scrypt", - "kdfparams" : { - "dklen" : 32, - "n" : 262144, - "r" : 1, - "p" : 8, - "salt" : "ab0c7876052600dd703518d6fc3fe8984592145b591fc8fb5c6d43190334ba19" - }, - "mac" : "2103ac29920d71da29f15d75b4a16dbe95cfd7ff8faea1056c33131d846e3097" - }, - "id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6", - "version" : 3 - }, - "password": "testpassword", - "priv": "7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d" - }, { - "json": { - "crypto" : { - "cipher" : "aes-128-ctr", - "cipherparams" : { - "iv" : "6087dab2f9fdbbfaddc31a909735c1e6" - }, - "ciphertext" : "5318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46", - "kdf" : "pbkdf2", - "kdfparams" : { - "c" : 262144, - "dklen" : 32, - "prf" : "hmac-sha256", - "salt" : "ae3cd4e7013836a3df6bd7241b12db061dbe2c6785853cce422d148a624ce0bd" - }, - "mac" : "517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2" - }, - "id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6", - "version" : 3 - }, - "password": "testpassword", - "priv": "7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d" - }, { - "json": { - "crypto" : { - "cipher" : "aes-128-ctr", - "cipherparams" : { - "iv" : "e0c41130a323adc1446fc82f724bca2f" - }, - "ciphertext" : "9517cd5bdbe69076f9bf5057248c6c050141e970efa36ce53692d5d59a3984", - "kdf" : "scrypt", - "kdfparams" : { - "dklen" : 32, - "n" : 2, - "r" : 8, - "p" : 1, - "salt" : "711f816911c92d649fb4c84b047915679933555030b3552c1212609b38208c63" - }, - "mac" : "d5e116151c6aa71470e67a7d42c9620c75c4d23229847dcc127794f0732b0db5" - }, - "id" : "fecfc4ce-e956-48fd-953b-30f8b52ed66c", - "version" : 3 - }, - "password": "foo", - "priv": "fa7b3db73dc7dfdf8c5fbdb796d741e4488628c41fc4febd9160a866ba0f35" - },{ - "json": { - "crypto" : { - "cipher" : "aes-128-ctr", - "cipherparams" : { - "iv" : "3ca92af36ad7c2cd92454c59cea5ef00" - }, - "ciphertext" : "108b7d34f3442fc26ab1ab90ca91476ba6bfa8c00975a49ef9051dc675aa", - "kdf" : "scrypt", - "kdfparams" : { - "dklen" : 32, - "n" : 2, - "r" : 8, - "p" : 1, - "salt" : "d0769e608fb86cda848065642a9c6fa046845c928175662b8e356c77f914cd3b" - }, - "mac" : "75d0e6759f7b3cefa319c3be41680ab6beea7d8328653474bd06706d4cc67420" - }, - "id" : "a37e1559-5955-450d-8075-7b8931b392b2", - "version" : 3 - }, - "password": "foo", - "priv": "81c29e8142bb6a81bef5a92bda7a8328a5c85bb2f9542e76f9b0f94fc018" - } -]; - -describe("eth", function () { - describe("accounts", function () { - runTests(); - }); - - // Verify that `Buffer` in web3-eth-accounts is backwards - // compatible with a deprecated node Buffer substitute injected into - // builds by webpack (and React). - describe("with feross/buffer@4.9.1", function(){ - before(function(){ - original_Buffer = global.Buffer; - global.Buffer = require('buffer/').Buffer; - }); - - describe("accounts", function(){ - runTests(); - }); - - after(function(){ - global.Buffer = original_Buffer; - }); - }); -}); - -function runTests(){ - tests.forEach(function (test, i) { - it("encrypt eth.account, and compare to ethers wallet", async () => { - var ethAccounts = new Accounts(); - - // create account - var acc = ethAccounts.create(); - - // create ethers wallet - var ethWall = new ethers.Wallet(acc.privateKey); - - // compare addresses and private keys - assert.equal(acc.address, ethWall.address); - assert.equal(acc.privateKey, ethWall.privateKey); - - var encrypt = acc.encrypt( - pw, - {n: n, r: r, p: p, - salt: salt, iv: iv, uuid: uuid} - ); - - var ethWallEncrypt = JSON.parse((await ethWall.encrypt( - pw, - {scrypt: {N: n, r: r, p: p}, - salt: '0x' + salt, iv: '0x' + iv.toString('hex'), - uuid: '0x' + uuid.toString('hex')} - )).toLowerCase()); - - assert.deepEqual(encrypt, ethWallEncrypt); - }); - - it("encrypt eth.account, and decrypt with ethers wallet", async () => { - var ethAccounts = new Accounts(); - - // create account - var acc = ethAccounts.create(); - var encrypt = acc.encrypt(pw, {n: n}); - - // create ethers wallet - var ethWall = await ethers.Wallet.fromEncryptedJson(JSON.stringify(encrypt), pw); - - // compare addresses and private keys - assert.equal(acc.address, ethWall.address); - assert.equal(acc.privateKey, ethWall.privateKey); - }); - - it("encrypt ethers wallet, and decrypt with eth.account", async () => { - var ethAccounts = new Accounts(); - - // create ethers wallet - var ethWall = ethers.Wallet.createRandom(); - var encrypt = await ethWall.encrypt(pw, {scrypt: {N: n}}); - - // create account using encrypted json (nonStrict) - var acc = ethAccounts.decrypt(encrypt, pw, true); - - // compare addresses and private keys - assert.equal(acc.address, ethWall.address); - assert.equal(acc.privateKey, ethWall.privateKey); - }); - - it("decrypt static signature using ethers wallet and eth.account and compare", async () => { - var ethAccounts = new Accounts(); - - var encrypt = { version: 3, - id: '6dac4ae5-7604-498e-a2a2-e86cfb289d0c', - address: '143f8913e0417997304fc179b531ff4cb9cab582', - crypto: - { ciphertext: '8b20d7797fee1c36ec2fff176e1778170745794ad2f124862f7f4bfc028daa27', - cipherparams: { iv: 'c6170befc885c940e0d0553f3ba01c6a' }, - cipher: 'aes-128-ctr', - kdf: 'scrypt', - kdfparams: - { dklen: 32, - salt: 'd78584e30aaf56781b4432116b1de9b1560b3ca6f4624624c14fb6e6d5638a48', - n: 256, - r: 8, - p: 1 }, - mac: '23d4497c779a6bc421f5cc54358309228389597f594448c5c900ad747f97401b' } }; - - var acc = ethAccounts.decrypt(encrypt, pw); - var ethWall = await ethers.Wallet.fromEncryptedJson(JSON.stringify(encrypt), pw); - - // compare addresses - assert.equal(acc.address, ethWall.address); - assert.equal(web3.utils.toChecksumAddress('0x143f8913e0417997304fc179b531ff4cb9cab582'), acc.address); - assert.equal(web3.utils.toChecksumAddress('0x143f8913e0417997304fc179b531ff4cb9cab582'), ethWall.address); - assert.equal(ethers.utils.getAddress('0x143f8913e0417997304fc179b531ff4cb9cab582'), acc.address); - assert.equal(ethers.utils.getAddress('0x143f8913e0417997304fc179b531ff4cb9cab582'), ethWall.address); - - // compare private keys - assert.equal(acc.privateKey, ethWall.privateKey); - }); - }); - - staticTests.forEach(function (test, i) { - it("decrypt staticTests and compare to private key", function() { - // disable the test timeout - this.timeout(0); - - var ethAccounts = new Accounts(); - - // create account - var acc = ethAccounts.decrypt(test.json, test.password); - - // compare addresses - assert.equal(acc.privateKey, '0x'+ test.priv); - }); - }); -}; - diff --git a/test/eth.accounts.sign.js b/test/eth.accounts.sign.js deleted file mode 100644 index 292a79d8a7d..00000000000 --- a/test/eth.accounts.sign.js +++ /dev/null @@ -1,159 +0,0 @@ -var Accounts = require("./../packages/web3-eth-accounts"); -var chai = require('chai'); -var assert = chai.assert; -var Web3 = require('../packages/web3'); -var web3 = new Web3(); - -var tests = [ - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - data: 'Some data', - // signature done with personal_sign - signature: '0xa8037a6116c176a25e6fc224947fde9e79a2deaa0dd8b67b366fbdfdbffc01f953e41351267b20d4a89ebfe9c8f03c04de9b345add4a52f15bd026b63c8fb1501b' - }, { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - data: 'Some data!%$$%&@*', - // signature done with personal_sign - signature: '0x05252412b097c5d080c994d1ea12abcee6f1cae23feb225517a0b691a66e12866b3f54292f9cfef98f390670b4d010fc4af7fcd46e41d72870602c117b14921c1c' - }, { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - data: '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', - // signature done with personal_sign - signature: '0xddd493679d80c9c74e0e5abd256a496dfb31b51cd39ea2c7c9e8a2a07de94a90257107a00d9cb631bacb85b208d66bfa7a80c639536b34884505eff352677dd01c' - } -]; - - -describe("eth", function () { - describe("accounts", function () { - - tests.forEach(function (test, i) { - it("sign data using a string", function() { - var ethAccounts = new Accounts(); - - var data = ethAccounts.sign(test.data, test.privateKey); - - assert.equal(data.signature, test.signature); - }); - - it("sign data using a utf8 encoded hex string", function() { - var ethAccounts = new Accounts(); - - var data = web3.utils.isHexStrict(test.data) ? test.data : web3.utils.utf8ToHex(test.data); - var data = ethAccounts.sign(data, test.privateKey); - - assert.equal(data.signature, test.signature); - }); - - - it("recover signature using a string", function() { - var ethAccounts = new Accounts(); - - var address = ethAccounts.recover(test.data, test.signature); - - assert.equal(address, test.address); - }); - - it("recover signature using a string and preFixed", function() { - var ethAccounts = new Accounts(); - - var address = ethAccounts.recover(ethAccounts.hashMessage(test.data), test.signature, true); - - assert.equal(address, test.address); - }); - - it("recover signature using a hash and r s v values and preFixed", function() { - var ethAccounts = new Accounts(); - - var sig = ethAccounts.sign(test.data, test.privateKey); - var address = ethAccounts.recover(ethAccounts.hashMessage(test.data), sig.v, sig.r, sig.s, true); - - assert.equal(address, test.address); - }); - - it("recover signature (pre encoded) using a signature object", function() { - var ethAccounts = new Accounts(); - - var data = web3.utils.isHexStrict(test.data) ? test.data : web3.utils.utf8ToHex(test.data); - var sig = ethAccounts.sign(data, test.privateKey); - var address = ethAccounts.recover(sig); - - assert.equal(address, test.address); - }); - - it("recover signature using a signature object", function() { - var ethAccounts = new Accounts(); - - var sig = ethAccounts.sign(test.data, test.privateKey); - var address = ethAccounts.recover(sig); - - assert.equal(address, test.address); - }); - - it("recover signature (pre encoded) using a hash and r s v values", function() { - var ethAccounts = new Accounts(); - - var data = web3.utils.isHexStrict(test.data) ? test.data : web3.utils.utf8ToHex(test.data); - var sig = ethAccounts.sign(data, test.privateKey); - var address = ethAccounts.recover(test.data, sig.v, sig.r, sig.s); - - assert.equal(address, test.address); - }); - - it("recover signature using a hash and r s v values", function() { - var ethAccounts = new Accounts(); - - var sig = ethAccounts.sign(test.data, test.privateKey); - var address = ethAccounts.recover(test.data, sig.v, sig.r, sig.s); - - assert.equal(address, test.address); - }); - }); - }); - - it('should add the "0x" prefix and sign the given message correctly', function() { - assert.equal( - '0xa8037a6116c176a25e6fc224947fde9e79a2deaa0dd8b67b366fbdfdbffc01f953e41351267b20d4a89ebfe9c8f03c04de9b345add4a52f15bd026b63c8fb1501b', - new Accounts().sign('Some data', 'be6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728').signature - ); - }); - - it('should add the "0x" prefix to the privateKey', function() { - assert.equal( - '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - new Accounts().privateKeyToAccount('be6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728').privateKey - ); - }); - - it('should throw if a privateKey is given with a invalid length', function() { - try { - new Accounts().privateKeyToAccount('0000be6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728'); - assert.fail(); - } catch(err) { - assert(err.message.includes('Private key must be 32 bytes long')); - } - }); - - it('should throw if a privateKey is given with a invalid length', function() { - try { - new Accounts().sign('data', '00be6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728'); - assert.fail(); - } catch(err) { - assert(err.message.includes('Private key must be 32 bytes long')); - } - }); - - it('should sign data correctly using an emoji character', function() { - const message = '🤗' - const ethAccounts = new Accounts(); - - const hashMessage = ethAccounts.hashMessage(message) - assert.equal(hashMessage, '0x716ce69c5d2d629c168bc02e24a961456bdc5a362d366119305aea73978a0332') - - const hashMessageHex = ethAccounts.hashMessage(web3.utils.utf8ToHex(message)) - assert.equal(hashMessageHex, '0x716ce69c5d2d629c168bc02e24a961456bdc5a362d366119305aea73978a0332') - }); -}); diff --git a/test/eth.accounts.signTransaction.js b/test/eth.accounts.signTransaction.js deleted file mode 100644 index c9ab4776e86..00000000000 --- a/test/eth.accounts.signTransaction.js +++ /dev/null @@ -1,690 +0,0 @@ -var FakeHttpProvider = require('./helpers/FakeIpcProvider'); -var Web3 = require('../packages/web3'); -var Accounts = require("./../packages/web3-eth-accounts"); -var ethjsSigner = require("ethjs-signer"); -var chai = require('chai'); -var _ = require('underscore'); -var assert = chai.assert; - -var common = { - baseChain: 'mainnet', - customChain: { - name: 'custom-network', - networkId: 1, - chainId: 1, - }, - harfork: 'petersburg', -}; - -var clone = function (object) { return object ? _.clone(object) : []; }; - -var tests = [ - { - address: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', - iban: 'XE0556YCRTEZ9JALZBSCXOK4UJ5F3HN03DV', - privateKey: '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', - transaction: { - chainId: 1, - nonce: 0, - gasPrice: "20000000000", - gas: 21000, - to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', - toIban: 'XE04S1IRT2PR8A8422TPBL9SR6U0HODDCUT', // will be switched to "to" in the test - value: "1000000000", - data: "", - common: common - }, - // signature from eth_signTransaction - rawTransaction: "0xf868808504a817c80082520894f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008026a0afa02d193471bb974081585daabf8a751d4decbb519604ac7df612cc11e9226da04bf1bd55e82cebb2b09ed39bbffe35107ea611fa212c2d9a1f1ada4952077118", - oldSignature: "0xf868808504a817c80082520894f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008026a0afa02d193471bb974081585daabf8a751d4decbb519604ac7df612cc11e9226da04bf1bd55e82cebb2b09ed39bbffe35107ea611fa212c2d9a1f1ada4952077118", - transactionHash: "0xab0f71614c37231d71ae521ce188a9c7c9d5e976124a91f62f9f125348dd0326", - messageHash: "0x2c7903a33b55caf582d170f21595f1a7e598df3fa61b103ea0cd9d6b2a92565d" - }, - { - address: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', - iban: 'XE0556YCRTEZ9JALZBSCXOK4UJ5F3HN03DV', - privateKey: '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', - transaction: { - chainId: 1, - nonce: 0, - gasPrice: "0", - gas: 31853, - to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', - toIban: 'XE04S1IRT2PR8A8422TPBL9SR6U0HODDCUT', // will be switched to "to" in the test - value: "0", - data: "", - common: common - }, - // expected r and s values from signature - r: "0x22f17b38af35286ffbb0c6376c86ec91c20ecbad93f84913a0cc15e7580cd9", - s: "0x83d6e12e82e3544cb4439964d5087da78f74cefeec9a450b16ae179fd8fe20", - // signature from eth_signTransaction - rawTransaction: "0xf85d8080827c6d94f0109fc8df283027b6285cc889f5aa624eac1f558080269f22f17b38af35286ffbb0c6376c86ec91c20ecbad93f84913a0cc15e7580cd99f83d6e12e82e3544cb4439964d5087da78f74cefeec9a450b16ae179fd8fe20", - oldSignature: "0xf85d8080827c6d94f0109fc8df283027b6285cc889f5aa624eac1f558080269f22f17b38af35286ffbb0c6376c86ec91c20ecbad93f84913a0cc15e7580cd99f83d6e12e82e3544cb4439964d5087da78f74cefeec9a450b16ae179fd8fe20", - transactionHash: "0xb0c5e2c6b29eeb0b9c1d63eaa8b0f93c02ead18ae01cb7fc795b0612d3e9d55a", - messageHash: "0x21975b15072795e610d2937abcf15ed4aecd0650b8a62204274bef3b57a8501a" - }, - { - address: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', - iban: 'XE0556YCRTEZ9JALZBSCXOK4UJ5F3HN03DV', - privateKey: '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', - transaction: { - chainId: 1, - nonce: 0, - gasPrice: "234567897654321", - gas: 2000000, - to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', - toIban: 'XE04S1IRT2PR8A8422TPBL9SR6U0HODDCUT', // will be switched to "to" in the test - value: "1000000000", - data: "", - common: common - }, - // expected r and s values from signature - r: "0x9ebb6ca057a0535d6186462bc0b465b561c94a295bdb0621fc19208ab149a9c", - s: "0x440ffd775ce91a833ab410777204d5341a6f9fa91216a6f3ee2c051fea6a0428", - // signature from eth_signTransaction - rawTransaction: "0xf86a8086d55698372431831e848094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008025a009ebb6ca057a0535d6186462bc0b465b561c94a295bdb0621fc19208ab149a9ca0440ffd775ce91a833ab410777204d5341a6f9fa91216a6f3ee2c051fea6a0428", - oldSignature: "0xf86a8086d55698372431831e848094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008025a009ebb6ca057a0535d6186462bc0b465b561c94a295bdb0621fc19208ab149a9ca0440ffd775ce91a833ab410777204d5341a6f9fa91216a6f3ee2c051fea6a0428", - transactionHash: "0xd8f64a42b57be0d565f385378db2f6bf324ce14a594afc05de90436e9ce01f60", - messageHash: "0x6893a6ee8df79b0f5d64a180cd1ef35d030f3e296a5361cf04d02ce720d32ec5" - }, - { - address: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', - iban: 'XE0556YCRTEZ9JALZBSCXOK4UJ5F3HN03DV', - privateKey: '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', - transaction: { - chainId: 1, - nonce: 0, - gasPrice: "0", - gas: 31853, - to: '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', - toIban: 'XE04S1IRT2PR8A8422TPBL9SR6U0HODDCUT', // will be switched to "to" in the test - value: "0", - data: "", - common: common - }, - // expected r and s values from signature - r: "0x22f17b38af35286ffbb0c6376c86ec91c20ecbad93f84913a0cc15e7580cd9", - s: "0x83d6e12e82e3544cb4439964d5087da78f74cefeec9a450b16ae179fd8fe20", - // signature from eth_signTransaction - rawTransaction: "0xf85d8080827c6d94f0109fc8df283027b6285cc889f5aa624eac1f558080269f22f17b38af35286ffbb0c6376c86ec91c20ecbad93f84913a0cc15e7580cd99f83d6e12e82e3544cb4439964d5087da78f74cefeec9a450b16ae179fd8fe20", - oldSignature: "0xf85d8080827c6d94f0109fc8df283027b6285cc889f5aa624eac1f558080269f22f17b38af35286ffbb0c6376c86ec91c20ecbad93f84913a0cc15e7580cd99f83d6e12e82e3544cb4439964d5087da78f74cefeec9a450b16ae179fd8fe20", - transactionHash: "0xb0c5e2c6b29eeb0b9c1d63eaa8b0f93c02ead18ae01cb7fc795b0612d3e9d55a", - messageHash: "0x21975b15072795e610d2937abcf15ed4aecd0650b8a62204274bef3b57a8501a" - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - iban: 'XE25RG8S3H5TX5RD7QTL5UPVW90AHN2VYDC', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: 0, - gasPrice: "20000000000", - gas: 21000, - to: '0x3535353535353535353535353535353535353535', - toIban: 'XE4967QZMA14MI680T89KSPPJEJMU68MEYD', // will be switched to "to" in the test - value: "1000000000000000000", - data: "", - common: common - }, - // signature from eth_signTransaction - rawTransaction: "0xf86c808504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a04f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88da07e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0", - oldSignature: "0xf86c808504a817c800825208943535353535353535353535353535353535353535880de0b6b3a7640000801ba0300e0d8f83ac82943e468164fa80236fdfcff21f978f66dd038b875cea6faa51a05a8e4b38b819491a0bb4e1f5fb4fd203b6a1df19e2adbec2ebdddcbfaca555f0", - transactionHash: "0xda3be87732110de6c1354c83770aae630ede9ac308d9f7b399ecfba23d923384", - messageHash: "0x7dbc5644b83abd32d014d170ba9bdc855c126328c0cb41af0ed6422bef0bb32e" - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: 0, - gasPrice: "230000000000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - // web3.eth.signTransaction({from: "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0", gasPrice: "230000000000", gas: "50000", to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', value: "1000000000000000000", data: "0x0123abcd"}).then(console.log); - // signature from eth_signTransaction - rawTransaction: "0xf8708085358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd26a031bb05bd1535150d312dcaa870a4a69c130a51aa80537659c1f308bf1f180ac6a012c938a8e04ac4e279d0b7c29811609031a96e949ad98f1ca74ca6078910bede", - oldSignature: "0xf8708085358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd1ba081bba037015419ab5ce36e930b987da71b0ed5f0efb1849613223bf72399f598a05d2c1f109ad13f98a7693cfc35291e404ea8795755a176eb58a818de44f3756d", - transactionHash: "0xe86ab542020b3f386af1a1c79881d5db06f5fac58da79f697308f1d1e1799f2c", - messageHash: "0x044d45bc28c2126e98c9cd0103a6559f5a92e01ecc201f48472f1e10a4c3ae27" - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: 10, - gasPrice: "230000000000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - // web3.eth.signTransaction({from: "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0", gasPrice: "230000000000", gas: "50000", to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', value: "1000000000000000000", data: "0x0123abcd"}).then(console.log); - // signature from eth_signTransaction - rawTransaction: "0xf8700a85358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a0496e628e8348a24312ded09ee3d99d85b1b8f947725aa382dcf4003b7389d5aaa00c1b1cfdd66c510fd708d33279a1a61e53dff3c6ced67cf7f7b830862d6e2029", - oldSignature: "0xf8700a85358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a0496e628e8348a24312ded09ee3d99d85b1b8f947725aa382dcf4003b7389d5aaa00c1b1cfdd66c510fd708d33279a1a61e53dff3c6ced67cf7f7b830862d6e2029", - transactionHash: "0x42fb18cc20b10438c6b4bcb4f3fc777a72195caf3e8b6ddc671df4a249e84ba7", - messageHash: "0xa75c245723fedf4b739771f5eeedeb3dc6ecd3b9ea79277a33dc5ab27be0c911" - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: '0xa', - gasPrice: "230000000000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - // web3.eth.signTransaction({from: "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0", gasPrice: "230000000000", gas: "50000", to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', value: "1000000000000000000", data: "0x0123abcd"}).then(console.log); - // signature from eth_signTransaction - rawTransaction: "0xf8700a85358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a0496e628e8348a24312ded09ee3d99d85b1b8f947725aa382dcf4003b7389d5aaa00c1b1cfdd66c510fd708d33279a1a61e53dff3c6ced67cf7f7b830862d6e2029", - oldSignature: "0xf8700a85358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a0496e628e8348a24312ded09ee3d99d85b1b8f947725aa382dcf4003b7389d5aaa00c1b1cfdd66c510fd708d33279a1a61e53dff3c6ced67cf7f7b830862d6e2029", - transactionHash: "0x42fb18cc20b10438c6b4bcb4f3fc777a72195caf3e8b6ddc671df4a249e84ba7", - messageHash: "0xa75c245723fedf4b739771f5eeedeb3dc6ecd3b9ea79277a33dc5ab27be0c911" - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: '16', - gasPrice: "230000000000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - // web3.eth.signTransaction({from: "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0", gasPrice: "230000000000", gas: "50000", to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', value: "1000000000000000000", data: "0x0123abcd"}).then(console.log); - // signature from eth_signTransaction - rawTransaction: "0xf8701085358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a04ba217e16f62ac277698e8853bcc010db07285b457606e9f3487c70ccc5e6508a05c6cfaa17fc1a52bede0cf25c8bd2e024b4fb89ed205f62cb3e177a83654f29d", - oldSignature: "0xf8701085358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a04ba217e16f62ac277698e8853bcc010db07285b457606e9f3487c70ccc5e6508a05c6cfaa17fc1a52bede0cf25c8bd2e024b4fb89ed205f62cb3e177a83654f29d", - transactionHash: "0xa2db7be5398c250e3ecf569c573f222255d46c509199ff649cca5e806edf5212", - messageHash: "0x9c8c1fb88a95974c5ac75b6c58af2b5a62d9ccb9dffad7552a3182344bf37c27" - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: 16, - gasPrice: "230000000000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - // web3.eth.signTransaction({from: "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0", gasPrice: "230000000000", gas: "50000", to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', value: "1000000000000000000", data: "0x0123abcd"}).then(console.log); - // signature from eth_signTransaction - rawTransaction: "0xf8701085358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a04ba217e16f62ac277698e8853bcc010db07285b457606e9f3487c70ccc5e6508a05c6cfaa17fc1a52bede0cf25c8bd2e024b4fb89ed205f62cb3e177a83654f29d", - oldSignature: "0xf8701085358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a04ba217e16f62ac277698e8853bcc010db07285b457606e9f3487c70ccc5e6508a05c6cfaa17fc1a52bede0cf25c8bd2e024b4fb89ed205f62cb3e177a83654f29d", - transactionHash: "0xa2db7be5398c250e3ecf569c573f222255d46c509199ff649cca5e806edf5212", - messageHash: "0x9c8c1fb88a95974c5ac75b6c58af2b5a62d9ccb9dffad7552a3182344bf37c27" - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: '0x16', - gasPrice: "230000000000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - // web3.eth.signTransaction({from: "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0", gasPrice: "230000000000", gas: "50000", to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', value: "1000000000000000000", data: "0x0123abcd"}).then(console.log); - // signature from eth_signTransaction - rawTransaction: "0xf8701685358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd26a0e027ec9e9921975678b73de44f7d2cd6b987a6655b9d0291b2cdff15836c6efba051b4e20835793bf0cdf268339111a24d80a4a7bb141e975a66d0edbcc20542d0", - oldSignature: "0xf8701685358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd26a0e027ec9e9921975678b73de44f7d2cd6b987a6655b9d0291b2cdff15836c6efba051b4e20835793bf0cdf268339111a24d80a4a7bb141e975a66d0edbcc20542d0", - transactionHash: "0x3135f97ac8d534b4b487cc2965fb1dcf427b92fd233577900dab3420e7afca13", - messageHash: "0x77fd104f011a0085a9fa80f6f77cb213bce71fe8b4585d6fa9e3217117263a5b" - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: '0x16', - gasPrice: "230000000000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - input: "0x0123abcd", - common: common - }, - // web3.eth.signTransaction({from: "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0", gasPrice: "230000000000", gas: "50000", to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', value: "1000000000000000000", data: "0x0123abcd"}).then(console.log); - // signature from eth_signTransaction - rawTransaction: "0xf8701685358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd26a0e027ec9e9921975678b73de44f7d2cd6b987a6655b9d0291b2cdff15836c6efba051b4e20835793bf0cdf268339111a24d80a4a7bb141e975a66d0edbcc20542d0", - oldSignature: "0xf8701685358d117c0082c35094fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd26a0e027ec9e9921975678b73de44f7d2cd6b987a6655b9d0291b2cdff15836c6efba051b4e20835793bf0cdf268339111a24d80a4a7bb141e975a66d0edbcc20542d0", - transactionHash: "0x3135f97ac8d534b4b487cc2965fb1dcf427b92fd233577900dab3420e7afca13", - messageHash: "0x77fd104f011a0085a9fa80f6f77cb213bce71fe8b4585d6fa9e3217117263a5b" - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: 2, - gasPrice: "20000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - input: "0x0123abcd", - common: common - }, - error: true - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: 2, - gasPrice: "20000", - gas: 0, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - input: "0x0123abcd", - common: common - }, - error: true - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: 2, - gasPrice: "0A", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - error: true - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: 2, - gasPrice: "200000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "test", - common: common - }, - error: true - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: 2, - gasPrice: "A", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - error: true - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: 'a', - gasPrice: "230000000000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - error: true - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: -1, - nonce: 1, - gasPrice: "230000000000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - error: true - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: -1, - nonce: 0, - gasPrice: "230000000000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - error: true - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: -2, - gasPrice: "230000000000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - error: true - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: 0, - gasPrice: "-230000000000", - gas: 50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - error: true - }, - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - transaction: { - chainId: 1, - nonce: 0, - gasPrice: "230000000000", - gas: -50000, - to: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - toIban: 'XE63TIJX31ZHSLZ6F601ZPKVDKKYHMIK03G', // will be switched to "to" in the test - value: "1000000000000000000", - data: "0x0123abcd", - common: common - }, - error: true - }, -]; - -describe("eth", function () { - describe("accounts", function () { - - // For each test - tests.forEach(function (test, i) { - if (test.error) { - - it("signTransaction must error", function(done) { - var ethAccounts = new Accounts(); - - var testAccount = ethAccounts.privateKeyToAccount(test.privateKey); - assert.equal(testAccount.address, test.address); - - testAccount.signTransaction(test.transaction).catch(function (err) { - assert.instanceOf(err, Error); - done(); - }); - }); - - } else { - - it("signTransaction must compare to eth_signTransaction", function(done) { - var ethAccounts = new Accounts(); - - var testAccount = ethAccounts.privateKeyToAccount(test.privateKey); - assert.equal(testAccount.address, test.address); - - testAccount.signTransaction(test.transaction).then(function (tx) { - assert.equal(tx.messageHash, test.messageHash); - assert.equal(tx.transactionHash, test.transactionHash); - assert.equal(tx.rawTransaction, test.rawTransaction); - done(); - }); - }); - - it("signTransaction using the iban as \"to\" must compare to eth_signTransaction", function(done) { - var ethAccounts = new Accounts(); - - var testAccount = ethAccounts.privateKeyToAccount(test.privateKey); - assert.equal(testAccount.address, test.address); - - var transaction = clone(test.transaction); - transaction.to = transaction.toIban; - delete transaction.toIban; - testAccount.signTransaction(transaction).then(function (tx) { - assert.equal(tx.rawTransaction, test.rawTransaction); - done(); - }); - }); - - it("signTransaction will call for nonce", function(done) { - var provider = new FakeHttpProvider(); - var web3 = new Web3(provider); - - provider.injectResult('0xa'); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_getTransactionCount'); - assert.deepEqual(payload.params, [test.address, "latest"]); - }); - - var ethAccounts = new Accounts(web3); - - var testAccount = ethAccounts.privateKeyToAccount(test.privateKey); - assert.equal(testAccount.address, test.address); - - var transaction = clone(test.transaction); - delete transaction.nonce; - testAccount.signTransaction(transaction) - .then(function (tx) { - assert.isObject(tx); - assert.isString(tx.rawTransaction); - - done(); - }); - }); - - it("signTransaction will call for gasPrice", function(done) { - var provider = new FakeHttpProvider(); - var web3 = new Web3(provider); - - provider.injectResult('0x5022'); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_gasPrice'); - assert.deepEqual(payload.params, []); - }); - - var ethAccounts = new Accounts(web3); - - var testAccount = ethAccounts.privateKeyToAccount(test.privateKey); - assert.equal(testAccount.address, test.address); - - var transaction = clone(test.transaction); - delete transaction.gasPrice; - testAccount.signTransaction(transaction) - .then(function (tx) { - assert.isObject(tx); - assert.isString(tx.rawTransaction); - - done(); - }); - }); - - it("signTransaction will call for chainId", function(done) { - var provider = new FakeHttpProvider(); - var web3 = new Web3(provider); - - provider.injectResult(1); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_chainId'); - assert.deepEqual(payload.params, []); - }); - - var ethAccounts = new Accounts(web3); - - var testAccount = ethAccounts.privateKeyToAccount(test.privateKey); - assert.equal(testAccount.address, test.address); - - var transaction = clone(test.transaction); - delete transaction.chainId; - testAccount.signTransaction(transaction) - .then(function (tx) { - assert.isObject(tx); - assert.isString(tx.rawTransaction); - - done(); - }); - }); - - it("signTransaction will call for networkId", function(done) { - var provider = new FakeHttpProvider(); - var web3 = new Web3(provider); - - provider.injectResult(1); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_networkId'); - assert.deepEqual(payload.params, []); - }); - - var ethAccounts = new Accounts(web3); - - var testAccount = ethAccounts.privateKeyToAccount(test.privateKey); - assert.equal(testAccount.address, test.address); - - var transaction = clone(test.transaction); - delete transaction.common; - testAccount.signTransaction(transaction) - .then(function (tx) { - assert.isObject(tx); - assert.isString(tx.rawTransaction); - - done(); - }); - }); - - it("signTransaction will call for nonce, gasPrice, chainId and networkId", function(done) { - var provider = new FakeHttpProvider(); - var web3 = new Web3(provider); - - provider.injectResult(1); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_chainId'); - assert.deepEqual(payload.params, []); - }); - provider.injectResult(1); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_gasPrice'); - assert.deepEqual(payload.params, []); - }); - provider.injectResult(1); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_getTransactionCount'); - assert.deepEqual(payload.params, [test.address, "latest"]); - }); - provider.injectResult(1); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_networkId'); - assert.deepEqual(payload.params, []); - }); - - var ethAccounts = new Accounts(web3); - - var testAccount = ethAccounts.privateKeyToAccount(test.privateKey); - assert.equal(testAccount.address, test.address); - - var transaction = clone(test.transaction); - delete transaction.chainId; - delete transaction.gasPrice; - delete transaction.nonce; - delete transaction.common; - testAccount.signTransaction(transaction) - .then(function (tx) { - assert.isObject(tx); - assert.isString(tx.rawTransaction); - - done(); - }); - }); - - it("recoverTransaction, must recover signature", function() { - var ethAccounts = new Accounts(); - - var testAccount = ethAccounts.privateKeyToAccount(test.privateKey); - assert.equal(testAccount.address, test.address); - - testAccount.signTransaction(test.transaction).then(function (tx) { - assert.equal(ethAccounts.recoverTransaction(tx.rawTransaction), test.address); - }); - }); - - it("recoverTransaction, must also recover old signature from eth-signer", function() { - var ethAccounts = new Accounts(); - - var oldSignature = ethjsSigner.sign(test.transaction, test.privateKey); - - assert.equal(ethAccounts.recoverTransaction(oldSignature), test.address); - }); - } - }); - }); -}); diff --git a/test/eth.accounts.wallet.js b/test/eth.accounts.wallet.js deleted file mode 100644 index d27da2b417d..00000000000 --- a/test/eth.accounts.wallet.js +++ /dev/null @@ -1,321 +0,0 @@ -var Accounts = require("./../packages/web3-eth-accounts"); -var chai = require('chai'); -var assert = chai.assert; -var Web3 = require('../packages/web3'); -var web3 = new Web3(); - -var tests = [ - { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - data: 'Some data', - // signature done with personal_sign - signature: '0xa8037a6116c176a25e6fc224947fde9e79a2deaa0dd8b67b366fbdfdbffc01f953e41351267b20d4a89ebfe9c8f03c04de9b345add4a52f15bd026b63c8fb1501b' - }, { - address: '0xEB014f8c8B418Db6b45774c326A0E64C78914dC0', - privateKey: '0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728', - data: 'Some data!%$$%&@*', - // signature done with personal_sign - signature: '0x05252412b097c5d080c994d1ea12abcee6f1cae23feb225517a0b691a66e12866b3f54292f9cfef98f390670b4d010fc4af7fcd46e41d72870602c117b14921c1c' - } -]; - - -describe("eth", function () { - describe("accounts.wallet", function () { - - tests.forEach(function (test, i) { - it("creates the right number of wallets", function() { - var ethAccounts = new Accounts(); - - assert.equal(ethAccounts.wallet.length, 0); - - var wallet = ethAccounts.wallet.create(2, '542342f!@#$$'); - - assert.equal(ethAccounts.wallet.length, 2); - assert.equal(wallet.length, 2); - - wallet = ethAccounts.wallet.create(3); - - assert.equal(ethAccounts.wallet.length, 5); - assert.equal(wallet.length, 5); - - assert.isTrue(web3.utils.isAddress(wallet[1].address)); - assert.isTrue(web3.utils.isAddress(ethAccounts.wallet[2].address)); - }); - - it("add wallet using a privatekey", function() { - var ethAccounts = new Accounts(); - assert.equal(ethAccounts.wallet.length, 0); - - var wallet = ethAccounts.wallet.add(test.privateKey); - assert.equal(wallet.address, test.address); - assert.equal(wallet.privateKey, test.privateKey); - assert.isFunction(wallet.signTransaction); - assert.isFunction(wallet.sign); - assert.equal(wallet.index, 0); - - // test if its retrievabe via address and index - assert.equal(ethAccounts.wallet[test.address].address, test.address); - assert.equal(ethAccounts.wallet[test.address.toLowerCase()].address, test.address); - assert.equal(ethAccounts.wallet[0].address, test.address); - - assert.equal(ethAccounts.wallet.length, 1); - }); - - it("add wallet using an account", function() { - var ethAccounts = new Accounts(); - assert.equal(ethAccounts.wallet.length, 0); - - var wallet = ethAccounts.wallet.add({ - address: test.address, - privateKey: test.privateKey - }); - assert.equal(wallet.address, test.address); - assert.equal(wallet.privateKey, test.privateKey); - assert.isFunction(wallet.signTransaction); - assert.isFunction(wallet.sign); - assert.equal(wallet.index, 0); - - // test if its retrievabe via address and index - assert.equal(ethAccounts.wallet[test.address].address, test.address); - assert.equal(ethAccounts.wallet[test.address.toLowerCase()].address, test.address); - assert.equal(ethAccounts.wallet[0].address, test.address); - - assert.equal(ethAccounts.wallet.length, 1); - }); - - it("add wallet double shouldn't work", function() { - var ethAccounts = new Accounts(); - assert.equal(ethAccounts.wallet.length, 0); - - var wallet = ethAccounts.wallet.add({ - address: test.address, - privateKey: test.privateKey - }); - wallet = ethAccounts.wallet.add({ - address: test.address, - privateKey: test.privateKey - }); - wallet = ethAccounts.wallet.add(test.privateKey); - - assert.equal(wallet.address, test.address); - assert.equal(wallet.privateKey, test.privateKey); - assert.isFunction(wallet.signTransaction); - assert.isFunction(wallet.sign); - assert.equal(wallet.index, 0); - - // test if its retrievabe via address and index - assert.equal(ethAccounts.wallet[test.address].address, test.address); - assert.equal(ethAccounts.wallet[test.address.toLowerCase()].address, test.address); - assert.equal(ethAccounts.wallet[0].address, test.address); - - assert.equal(ethAccounts.wallet.length, 1); - }); - - it("remove wallet using an index", async function() { - var ethAccounts = new Accounts(); - assert.equal(ethAccounts.wallet.length, 0); - - var wallet = ethAccounts.wallet.add(test.privateKey); - assert.equal(ethAccounts.wallet.length, 1); - - // await setImmediate to fix wallet race condition when calling `wallet.remove` immediately after `wallet.add` - await new Promise(resolve => setImmediate(resolve)); - - ethAccounts.wallet.remove(0); - - assert.isUndefined(ethAccounts.wallet[0]); - assert.isUndefined(ethAccounts.wallet[wallet.address]); - assert.isUndefined(ethAccounts.wallet[wallet.address.toLowerCase()]); - - assert.equal(ethAccounts.wallet.length, 0); - - }); - - it("remove wallet using an address", async function() { - var ethAccounts = new Accounts(); - assert.equal(ethAccounts.wallet.length, 0); - - var wallet = ethAccounts.wallet.add(test.privateKey); - assert.equal(ethAccounts.wallet.length, 1); - - // await setImmediate to fix wallet race condition when calling `wallet.remove` immediately after `wallet.add` - await new Promise(resolve => setImmediate(resolve)); - - ethAccounts.wallet.remove(test.address); - - assert.isUndefined(ethAccounts.wallet[0]); - assert.isUndefined(ethAccounts.wallet[wallet.address]); - assert.isUndefined(ethAccounts.wallet[wallet.address.toLowerCase()]); - - assert.equal(ethAccounts.wallet.length, 0); - - }); - - it("remove wallet using an lowercase address", async function() { - var ethAccounts = new Accounts(); - assert.equal(ethAccounts.wallet.length, 0); - - var wallet = ethAccounts.wallet.add(test.privateKey); - assert.equal(ethAccounts.wallet.length, 1); - - // await setImmediate to fix wallet race condition when calling `wallet.remove` immediately after `wallet.add` - await new Promise(resolve => setImmediate(resolve)); - - ethAccounts.wallet.remove(test.address.toLowerCase()); - - assert.isUndefined(ethAccounts.wallet[0]); - assert.isUndefined(ethAccounts.wallet[wallet.address]); - assert.isUndefined(ethAccounts.wallet[wallet.address.toLowerCase()]); - - assert.equal(ethAccounts.wallet.length, 0); - - }); - - it("create 5 wallets, remove two, create two more and check for overwrites", async function() { - var count = 5; - var ethAccounts = new Accounts(); - assert.equal(ethAccounts.wallet.length, 0); - - var wallet = ethAccounts.wallet.create(count); - var initialAddresses = [0,1,2,3,4].map(function(n) { return wallet[n].address } ); - assert.equal(ethAccounts.wallet.length, count); - - var thirdAddress = ethAccounts.wallet[2].address; - var lastAddress = ethAccounts.wallet[4].address; - var remainingAddresses = [0,1,3]; - var beforeRemoval = remainingAddresses.map(function(n) { return wallet[n].address } ); - - // await setImmediate to fix wallet race condition when calling `wallet.remove` immediately after `wallet.add` - await new Promise(resolve => setImmediate(resolve)); - - ethAccounts.wallet.remove(2); - ethAccounts.wallet.remove(4); - - assert.isUndefined(ethAccounts.wallet[2]); - assert.isUndefined(ethAccounts.wallet[thirdAddress]); - assert.isUndefined(ethAccounts.wallet[thirdAddress.toLowerCase()]); - assert.isUndefined(ethAccounts.wallet[4]); - assert.isUndefined(ethAccounts.wallet[lastAddress]); - assert.isUndefined(ethAccounts.wallet[lastAddress.toLowerCase()]); - - var afterRemoval = remainingAddresses.map(function(n) { return wallet[n].address } ); - - assert.equal(ethAccounts.wallet._findSafeIndex(), 2); - assert.equal(ethAccounts.wallet.length, 3); - - ethAccounts.wallet.create(2); - assert.isTrue(web3.utils.isAddress(wallet[2].address)); - assert.isTrue(web3.utils.isAddress(wallet[4].address)); - assert.isUndefined(ethAccounts.wallet[5]); - - var afterMoreCreation = remainingAddresses.map(function(n) { return wallet[n].address } ); - var newAddresses = [0,1,2,3,4].map(function(n) { return wallet[n].address } ); - - // Checks for account overwrites - assert.sameOrderedMembers(beforeRemoval, afterMoreCreation, "same ordered members"); - assert.sameOrderedMembers(afterRemoval, afterMoreCreation, "same ordered members"); - assert.notSameMembers(initialAddresses, newAddresses, "not same members"); - - assert.equal(ethAccounts.wallet.length, count); - }); - - it("clear wallet", async function() { - this.timeout(10000); - - var count = 10; - var ethAccounts = new Accounts(); - assert.equal(ethAccounts.wallet.length, 0); - - var wallet = ethAccounts.wallet.create(count); - assert.equal(ethAccounts.wallet.length, count); - - var addresses = []; - for (var i = 0; i < count; i++) { - addresses.push(wallet[i].address); - } - - // await setImmediate to fix wallet race condition when calling `wallet.remove` immediately after `wallet.add` - await new Promise(resolve => setImmediate(resolve)); - - ethAccounts.wallet.clear(); - - for (var i = 0; i < count; i++) { - assert.isUndefined(ethAccounts.wallet[i]); - assert.isUndefined(ethAccounts.wallet[addresses[i]]); - assert.isUndefined(ethAccounts.wallet[addresses[i].toLowerCase()]); - } - - assert.equal(ethAccounts.wallet.length, 0); - }); - - it("remove accounts then clear wallet", async function() { - this.timeout(10000); - - var count = 10; - var ethAccounts = new Accounts(); - assert.equal(ethAccounts.wallet.length, 0); - - var wallet = ethAccounts.wallet.create(count); - assert.equal(ethAccounts.wallet.length, count); - - var addresses = []; - for (var i = 0; i < count; i++) { - addresses.push(wallet[i].address); - } - - // await setImmediate to fix wallet race condition when calling `wallet.remove` immediately after `wallet.add` - await new Promise(resolve => setImmediate(resolve)); - - ethAccounts.wallet.remove(0); - assert.isUndefined(ethAccounts.wallet[0]) - ethAccounts.wallet.remove(5); - assert.isUndefined(ethAccounts.wallet[5]) - - ethAccounts.wallet.clear(); - - await new Promise(resolve => setImmediate(resolve)); - - for (var i = 0; i < count; i++) { - assert.isUndefined(ethAccounts.wallet[i]); - assert.isUndefined(ethAccounts.wallet[addresses[i]]); - assert.isUndefined(ethAccounts.wallet[addresses[i].toLowerCase()]); - } - - assert.equal(ethAccounts.wallet.length, 0); - }); - - it("encrypt then decrypt wallet", async function() { - this.timeout(10000); - - var ethAccounts = new Accounts(); - var password = "qwerty"; - - assert.equal(ethAccounts.wallet.length, 0); - - var wallet = ethAccounts.wallet.create(5); - var addressFromWallet = ethAccounts.wallet[0].address; - assert.equal(ethAccounts.wallet.length, 5); - - // await setImmediate to fix wallet race condition when calling `wallet.remove` immediately after `wallet.add` - await new Promise(resolve => setImmediate(resolve)); - - ethAccounts.wallet.remove(2); - assert.equal(ethAccounts.wallet.length, 4); - - var keystore = ethAccounts.wallet.encrypt(password); - assert.equal(keystore.length, 4); - - ethAccounts.wallet.clear(); - assert.equal(ethAccounts.wallet.length, 0); - - ethAccounts.wallet.decrypt(keystore, password); - assert.equal(ethAccounts.wallet.length, 4); - - var addressFromKeystore = ethAccounts.wallet[0].address; - assert.equal(addressFromKeystore, addressFromWallet); - }); - }); - }); -}); diff --git a/test/eth.call.js b/test/eth.call.js deleted file mode 100644 index eea4b019cab..00000000000 --- a/test/eth.call.js +++ /dev/null @@ -1,40 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'call'; - -var tests = [{ - args: [{ - to: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', - data: '0x23455654', - gas: 11, - gasPrice: 11 - }], - formattedArgs: [{ - to: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', - data: '0x23455654', - gas: '0xb', - gasPrice: '0xb' - }, 'latest'], - result: '0x31981', - formattedResult: '0x31981', - call: 'eth_'+ method -},{ - args: [{ - to: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', - data: '0x23455654', - gas: 11, - gasPrice: 11 - }, 11], - formattedArgs: [{ - to: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', - data: '0x23455654', - gas: '0xb', - gasPrice: '0xb' - }, '0xb'], - result: '0x31981', - formattedResult: '0x31981', - call: 'eth_'+ method -}]; - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.defaultAccount.js b/test/eth.defaultAccount.js deleted file mode 100644 index 1e61dcea693..00000000000 --- a/test/eth.defaultAccount.js +++ /dev/null @@ -1,53 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Eth = require('../packages/web3-eth'); -var Web3 = require('../packages/web3'); - -var eth = new Eth(); - -var setValue = '0x47D33b27Bb249a2DBab4C0612BF9CaF4C1950855'; - -describe('web3.eth', function () { - describe('defaultAccount', function () { - it('should check if defaultAccount is set to proper value', function () { - assert.equal(eth.defaultAccount, null); - assert.equal(eth.personal.defaultAccount, null); - assert.equal(eth.Contract.defaultAccount, null); - assert.equal(eth.getCode.method.defaultAccount, null); - }); - it('should set defaultAccount for all sub packages is set to proper value, if Eth package is changed', function () { - eth.defaultAccount = setValue; - - assert.equal(eth.defaultAccount, setValue); - assert.equal(eth.personal.defaultAccount, setValue); - assert.equal(eth.Contract.defaultAccount, setValue); - assert.equal(eth.getCode.method.defaultAccount, setValue); - }); - it('should fail if address is invalid, wich is to be set to defaultAccount', function () { - - assert.throws(function(){ eth.defaultAccount = '0x17F33b27Bb249a2DBab4C0612BF9CaF4C1950855'; }); - - }); - it('should have different values for two Eth instances', function () { - - var eth1 = new Eth(); - eth1.defaultAccount = setValue; - assert.equal(eth1.defaultAccount, setValue); - - var eth2 = new Eth(); - assert.equal(eth2.defaultAccount, null); - - }); - it('should have different values for two Web3 instances', function () { - - var web31 = new Web3(); - web31.eth.defaultAccount = setValue; - assert.equal(web31.eth.defaultAccount, setValue); - - var web32 = new Web3(); - assert.equal(web32.eth.defaultAccount, null); - - }); - }); -}); - diff --git a/test/eth.defaultBlock.js b/test/eth.defaultBlock.js deleted file mode 100644 index b8dec964100..00000000000 --- a/test/eth.defaultBlock.js +++ /dev/null @@ -1,27 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Eth = require('../packages/web3-eth'); - -var eth = new Eth(); - -var setValue = 123; - -describe('web3.eth', function () { - describe('defaultBlock', function () { - it('should check if defaultBlock is set to proper value', function () { - assert.equal(eth.defaultBlock, 'latest'); - assert.equal(eth.personal.defaultBlock, 'latest'); - assert.equal(eth.Contract.defaultBlock, 'latest'); - assert.equal(eth.getCode.method.defaultBlock, 'latest'); - }); - it('should set defaultBlock for all sub packages is set to proper value, if Eth package is changed', function () { - eth.defaultBlock = setValue; - - assert.equal(eth.defaultBlock, setValue); - assert.equal(eth.personal.defaultBlock, setValue); - assert.equal(eth.Contract.defaultBlock, setValue); - assert.equal(eth.getCode.method.defaultBlock, setValue); - }); - }); -}); - diff --git a/test/eth.ens.js b/test/eth.ens.js deleted file mode 100644 index 5bf4f6a714b..00000000000 --- a/test/eth.ens.js +++ /dev/null @@ -1,2490 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var FakeIpcProvider = require('./helpers/FakeIpcProvider'); -var FakeHttpProvider = require('./helpers/FakeHttpProvider'); -var Web3 = require('../packages/web3'); -var sha3 = require('../packages/web3-utils').sha3; -var formatters = require('web3-core-helpers').formatters; -var abiCoder = require('web3-eth-abi'); -var utils = require('web3-utils'); -var namehash = require('eth-ens-namehash'); -var asciiToHex = require('../packages/web3-utils').asciiToHex; - -/** - * Injects the required validations and results for the `eth_sendTransaction` call - * - * @method prepareProviderForSetter - * - * @param {FakeIpcProvider} provider - * @param {String} signature - * @param {Array} types - * @param {Array} params - * @param {Boolean} error - * - * @returns {void} - */ -function prepareProviderForSetter(provider, signature, types, params, error) { - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual( - payload.params, - [{ - from: '0x0123456701234567012345670123456701234567', - gas: '0x64', - gasPrice: '0x64', - nonce: '0x1', - data: sha3(signature).slice(0, 10) + abiCoder.encodeParameters(types, params).substr(2), - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e' - }] - ); - }); - provider.injectResult('0x1234000000000000000000000000000000000000000000000000000000056789'); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234000000000000000000000000000000000000000000000000000000056789']); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult('0x1234567'); - - // fake newBlock - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234000000000000000000000000000000000000000000000000000000056789']); - }); - provider.injectResult({ - contractAddress: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - cumulativeGasUsed: '0xa', - transactionIndex: '0x3', - blockNumber: '0xa', - blockHash: '0xbf1234', - gasUsed: '0x0', - status: error ? '0x0' : '0x1' - }); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_unsubscribe'); - assert.deepEqual(payload.params, ['0x1234567']); - }); - provider.injectResult('0x321'); -} - -/** - * Checks if the receipt got mapped as expected and not manipulated in a strange way within the ENS module - * - * @method isExpectedReceipt - * - * @param {Object} receipt - * - * @returns {void} - */ -function isExpectedReceipt(receipt) { - assert.equal(receipt.contractAddress, '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'); - assert.equal(receipt.cumulativeGasUsed, 10); - assert.equal(receipt.transactionIndex, 3); - assert.equal(receipt.blockNumber, 10); - assert.equal(receipt.blockHash, '0xbf1234'); - assert.equal(receipt.gasUsed, 0); -} - -describe('ens', function () { - let provider; - let web3; - const hashedName = namehash.hash('foobar.eth'); - const name = 'foobar.eth'; - - describe('setters', function () { - beforeEach(function () { - provider = new FakeIpcProvider(); - web3 = new Web3(provider); - - provider.injectResult({ - timestamp: Math.floor(new Date() / 1000) - 60, - }); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_getBlockByNumber'); - assert.deepEqual(payload.params, ['latest', false]); - }); - - provider.injectResult(1); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'net_version'); - assert.deepEqual(payload.params, []); - }); - - provider.injectResult({ - hash: '0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3', - blockNumber: '0x0' - }); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_getBlockByNumber'); - assert.deepEqual(payload.params, ['0x0', false]); - }); - }); - - it('should set the property "registryAddress" to "null" and not throw any error', function() { - web3.eth.ens.registryAddress = null; - - assert.equal(web3.eth.ens.registryAddress, null); - }); - - it('should set the owner record for a name', async function () { - this.timeout(10000); - const signature = 'setOwner(bytes32,address)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'address'], - [hashedName, '0x0123456701234567012345670123456701234567'], - false - ); - - const receipt = await web3.eth.ens.setOwner( - name, - '0x0123456701234567012345670123456701234567', - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }); - - isExpectedReceipt(receipt); - }); - - it('should set the owner record for a name and throw the expected error (callback)', function (done) { - const signature = 'setOwner(bytes32,address)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'address'], - [hashedName, '0x0123456701234567012345670123456701234567'], - true - ); - - web3.eth.ens.setOwner( - name, - '0x0123456701234567012345670123456701234567', - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }, - function (error, result) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - assert.equal(result, null); - - done(); - } - ); - }); - - it('should set the owner record for a name and throw the expected error (promise)', async function () { - const signature = 'setOwner(bytes32,address)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'address'], - [hashedName, '0x0123456701234567012345670123456701234567'], - true - ); - - try { - await web3.eth.ens.setOwner( - name, - '0x0123456701234567012345670123456701234567', - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - } - ); - - assert.fail(); - } catch (error) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - } - }); - - it('should set the record for a name', async function () { - const signature = 'setRecord(bytes32,address,address,uint64)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'address', 'address', 'uint64'], - [ - hashedName, - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000 - ], - false - ); - - const receipt = await web3.eth.ens.setRecord( - name, - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000, - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }); - - isExpectedReceipt(receipt); - }); - - it('should set the record for a name and throw the expected error (callback)', function (done) { - const signature = 'setRecord(bytes32,address,address,uint64)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'address', 'address', 'uint64'], - [ - hashedName, - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000 - ], - true - ); - - web3.eth.ens.setRecord( - name, - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000, - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }, - function (error, result) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - assert.equal(result, null); - - done(); - } - ); - }); - - it('should set the record for a name and throw the expected error (promise)', async function () { - const signature = 'setRecord(bytes32,address,address,uint64)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'address', 'address', 'uint64'], - [ - hashedName, - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000 - ], - true - ); - - try { - await web3.eth.ens.setRecord( - name, - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000, - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - } - ); - - assert.fail(); - } catch (error) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - } - }); - - it('should set the owner, resolver, and ttl for a name', async function () { - const signature = 'setSubnodeRecord(bytes32,bytes32,address,address,uint64)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'bytes32', 'address', 'address', 'uint64'], - [ - hashedName, - utils.sha3('label'), - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000 - ], - false - ); - - const receipt = await web3.eth.ens.setSubnodeRecord( - name, - 'label', - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000, - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }); - - isExpectedReceipt(receipt); - }); - - it('should set the owner, resolver, and ttl for a name with already hashed label', async function () { - const signature = 'setSubnodeRecord(bytes32,bytes32,address,address,uint64)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'bytes32', 'address', 'address', 'uint64'], - [ - hashedName, - utils.sha3('label'), - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000 - ], - false - ); - - const receipt = await web3.eth.ens.setSubnodeRecord( - name, - utils.sha3('label'), - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000, - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }); - - isExpectedReceipt(receipt); - }); - - it('should set the owner, resolver, and ttl for a name and throw the expected error (callback)', function (done) { - const signature = 'setSubnodeRecord(bytes32,bytes32,address,address,uint64)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'bytes32', 'address', 'address', 'uint64'], - [ - hashedName, - utils.sha3('label'), - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000 - ], - true - ); - - web3.eth.ens.setSubnodeRecord( - name, - 'label', - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000, - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }, - function (error, result) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - assert.equal(result, null); - - done(); - } - ); - }); - - it('should set the owner, resolver, and ttl for a name and throw the expected error (promise)', async function () { - const signature = 'setSubnodeRecord(bytes32,bytes32,address,address,uint64)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'bytes32', 'address', 'address', 'uint64'], - [ - hashedName, - utils.sha3('label'), - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000 - ], - true - ); - - try { - await web3.eth.ens.setSubnodeRecord( - name, - 'label', - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - 10000, - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - } - ); - - assert.fail(); - } catch (error) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - } - }); - - it('should set an approval by the given operator', async function () { - const signature = 'setApprovalForAll(address,bool)'; - - prepareProviderForSetter( - provider, - signature, - ['address', 'bool'], - [ - '0x0123456701234567012345670123456701234567', - true - ], - false - ); - - const receipt = await web3.eth.ens.setApprovalForAll( - '0x0123456701234567012345670123456701234567', - true, - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }); - - isExpectedReceipt(receipt); - }); - - it('should set an approval by the given operator and throw the expected error (callback)', function (done) { - const signature = 'setApprovalForAll(address,bool)'; - - prepareProviderForSetter( - provider, - signature, - ['address', 'bool'], - [ - '0x0123456701234567012345670123456701234567', - true - ], - true - ); - - web3.eth.ens.setApprovalForAll( - '0x0123456701234567012345670123456701234567', - true, - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }, - function (error, result) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - assert.equal(result, null); - - done(); - } - ); - }); - - it('should set an approval by the given operator and throw the expected error (promise)', async function () { - const signature = 'setApprovalForAll(address,bool)'; - - prepareProviderForSetter( - provider, - signature, - ['address', 'bool'], - [ - '0x0123456701234567012345670123456701234567', - true - ], - true - ); - - try { - await web3.eth.ens.setApprovalForAll( - '0x0123456701234567012345670123456701234567', - true, - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - } - ); - - assert.fail(); - } catch (error) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - } - }); - - it('should set the owner, resolver, and TTL for an record', async function () { - const signature = 'setResolver(bytes32,address)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'address'], - [hashedName, '0x0123456701234567012345670123456701234567'], - false - ); - - const receipt = await web3.eth.ens.setResolver( - name, - '0x0123456701234567012345670123456701234567', - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }); - - isExpectedReceipt(receipt); - }); - - it('should set the owner, resolver, and TTL for an record and throw the expected error (callback)', function (done) { - const signature = 'setResolver(bytes32,address)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'address'], - [hashedName, '0x0123456701234567012345670123456701234567'], - true - ); - - web3.eth.ens.setResolver( - name, - '0x0123456701234567012345670123456701234567', - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }, - function (error, result) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - assert.equal(result, null); - - done(); - } - ); - }); - - it('should set the owner, resolver, and TTL for an record and throw the expected error (promise)', async function () { - const signature = 'setResolver(bytes32,address)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'address'], - [hashedName, '0x0123456701234567012345670123456701234567'], - true - ); - - try { - await web3.eth.ens.setResolver( - name, - '0x0123456701234567012345670123456701234567', - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - } - ); - - assert.fail(); - } catch (error) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - } - }); - - it('should set the TTL (caching time) record for a name', async function () { - const signature = 'setTTL(bytes32,uint64)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'uint64'], - [hashedName, '1'], - false - ); - - const receipt = await web3.eth.ens.setTTL( - name, - '1', - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }); - - isExpectedReceipt(receipt); - }); - - it('should call the TTL (caching time) record setter for a name and throw the expected error (callback)', function (done) { - const signature = 'setTTL(bytes32,uint64)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'uint64'], - [hashedName, '1'], - true - ); - - web3.eth.ens.setTTL( - name, - '1', - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }, - function (error, result) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - assert.equal(result, null); - - done(); - } - ); - }); - - it('should call the TTL (caching time) record setter for a name and throw the expected error (promise)', async function () { - const signature = 'setTTL(bytes32,uint64)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'uint64'], - [hashedName, '1'], - true - ); - - try { - await web3.eth.ens.setTTL( - name, - '1', - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - } - ); - - assert.fail(); - } catch (error) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - } - }); - - it('should create a new sub node with the specified label and owner', async function () { - const signature = 'setSubnodeOwner(bytes32,bytes32,address)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'bytes32', 'address'], - [hashedName, utils.sha3('label'), '0x0123456701234567012345670123456701234567'], - false - ); - - const receipt = await web3.eth.ens.setSubnodeOwner( - name, - 'label', - '0x0123456701234567012345670123456701234567', - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }); - - isExpectedReceipt(receipt); - }); - - it('should create a new sub node with the specified hashed label and owner', async function () { - const signature = 'setSubnodeOwner(bytes32,bytes32,address)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'bytes32', 'address'], - [hashedName, utils.sha3('label'), '0x0123456701234567012345670123456701234567'], - false - ); - - const receipt = await web3.eth.ens.setSubnodeOwner( - name, - utils.sha3('label'), - '0x0123456701234567012345670123456701234567', - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }); - - isExpectedReceipt(receipt); - }); - - it('should create a new sub node with the specified label and owner and throw the expected error (callback)', function (done) { - const signature = 'setSubnodeOwner(bytes32,bytes32,address)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'bytes32', 'address'], - [hashedName, utils.sha3('label'), '0x0123456701234567012345670123456701234567'], - true - ); - - web3.eth.ens.setSubnodeOwner( - name, - 'label', - '0x0123456701234567012345670123456701234567', - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - }, - function (error, result) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - assert.equal(result, null); - - done(); - } - ); - }); - - it('should create a new sub node with the specified label and owner and throw the expected error (promise)', async function () { - const signature = 'setSubnodeOwner(bytes32,bytes32,address)'; - - prepareProviderForSetter( - provider, - signature, - ['bytes32', 'bytes32', 'address'], - [hashedName, utils.sha3('label'), '0x0123456701234567012345670123456701234567'], - true - ); - - try { - await web3.eth.ens.setSubnodeOwner( - name, - 'label', - '0x0123456701234567012345670123456701234567', - { - from: '0x0123456701234567012345670123456701234567', - gas: 100, - gasPrice: 100, - nonce: 1 - } - ); - - assert.fail(); - } catch (error) { - assert(error.message.includes('Transaction has been reverted by the EVM')); - } - }); - }); - - describe('getters', function () { - beforeEach(function () { - provider = new FakeHttpProvider(); - web3 = new Web3(provider); - - provider.injectResult({ - timestamp: Math.floor(new Date() / 1000) - 60, - }); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_getBlockByNumber'); - assert.deepEqual(payload.params, ['latest', false]); - }); - - provider.injectResult(1); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'net_version'); - assert.deepEqual(payload.params, []); - }); - - provider.injectResult({ - hash: '0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3', - blockNumber: '0x0' - }); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_getBlockByNumber'); - assert.deepEqual(payload.params, ['0x0', false]); - }); - }); - - it('should call supportsInterface with the interfaceId and return "true" (promise)', async function () { - const resolverSignature = 'resolver(bytes32)'; - const supportsInterfaceSignature = 'supportsInterface(bytes4)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(supportsInterfaceSignature).slice(0, 10) + sha3('addr(bytes32)').slice(2, 10) + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - const owner = await web3.eth.ens.supportsInterface('foobar.eth', '0x3b3b57de'); - - assert.equal(owner, true); - }); - - it('should call supportsInterface with the interfaceId and return "true" (callback)', function (done) { - const resolverSignature = 'resolver(bytes32)'; - const supportsInterfaceSignature = 'supportsInterface(bytes4)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(supportsInterfaceSignature).slice(0, 10) + sha3('addr(bytes32)').slice(2, 10) + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - web3.eth.ens.supportsInterface('foobar.eth', '0x3b3b57de', function (error, owner) { - assert.equal(owner, true); - - done(); - }); - - }); - - it('should call supportsInterface with the signature and throw the expected error (callback)', function (done) { - const resolverSignature = 'resolver(bytes32)'; - const supportsInterfaceSignature = 'supportsInterface(bytes4)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSig).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(supportsInterfaceSignature).slice(0, 10) + sha3('addr(bytes32)').slice(2, 10) + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - provider.error.push(null); - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - web3.eth.ens.supportsInterface( - 'foobar.eth', - 'addr(bytes32)', - function (error, supported) { - assert.equal(supported, null); - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - - done(); - }); - }); - - it('should call supportsInterface with the signature and throw the expected error (promise)', async function () { - const resolverSignature = 'resolver(bytes32)'; - const supportsInterfaceSignature = 'supportsInterface(bytes4)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(supportsInterfaceSignature).slice(0, 10) + sha3('addr(bytes32)').slice(2, 10) + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - provider.error.push(null); - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - try { - await web3.eth.ens.supportsInterface('foobar.eth', 'addr(bytes32)'); - - assert.fail(); - } catch (error) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - } - }); - - it('should call getTTL and return the expected result (promise)', async function () { - const signature = 'ttl(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - const ttl = await web3.eth.ens.getTTL('foobar.eth'); - - assert.equal(ttl, 1); - }); - - it('should call getTTL and return the expected result (callback)', function (done) { - const signature = 'ttl(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - web3.eth.ens.getTTL('foobar.eth', function (error, ttl) { - assert.equal(ttl, 1); - - done(); - }); - - }); - - it('should call getTTL and throw the expected error (callback)', function (done) { - const signature = 'ttl(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - web3.eth.ens.getTTL( - 'foobar.eth', - function (error, ttl) { - assert.equal(ttl, null); - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - - done(); - }); - }); - - it('should call getTTL and throw the expected error (promise)', async function () { - const signature = 'ttl(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - try { - await web3.eth.ens.getTTL('foobar.eth'); - - assert.fail(); - } catch (error) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - } - }); - - it('should call isApprovedForAll and return the expected result (promise)', async function () { - const signature = 'isApprovedForAll(address,address)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '00000000000000000000000001234567012345670123456701234567012345670000000000000000000000000123456701234567012345670123456701234567', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - const isApproved = await web3.eth.ens.isApprovedForAll( - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567' - ); - - assert.equal(isApproved, true); - }); - - it('should call isApprovedForAll and return the expected result (callback)', function (done) { - const signature = 'isApprovedForAll(address,address)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '00000000000000000000000001234567012345670123456701234567012345670000000000000000000000000123456701234567012345670123456701234567', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - web3.eth.ens.isApprovedForAll( - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - function (error, isApproved) { - assert.equal(isApproved, true); - - done(); - } - ); - }); - - it('should call isApprovedForAll and throws the expected error (callback)', function (done) { - const signature = 'isApprovedForAll(address,address)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '00000000000000000000000001234567012345670123456701234567012345670000000000000000000000000123456701234567012345670123456701234567', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - web3.eth.ens.isApprovedForAll( - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567', - function (error, isApproved) { - assert.equal(isApproved, null); - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - - done(); - }); - }); - - it('should call isApprovedForAll and throws the expected error (promise)', async function () { - const signature = 'isApprovedForAll(address,address)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '00000000000000000000000001234567012345670123456701234567012345670000000000000000000000000123456701234567012345670', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - try { - await web3.eth.ens.isApprovedForAll( - '0x0123456701234567012345670123456701234567', - '0x0123456701234567012345670123456701234567' - ); - - assert.fail(); - } catch (error) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - } - }); - - it('should call recordExists and return the expected result (promise)', async function () { - const signature = 'recordExists(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - const exists = await web3.eth.ens.recordExists(name); - - assert.equal(exists, true); - }); - - it('should call recordExists and return the expected result (callback)', function (done) { - const signature = 'recordExists(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - web3.eth.ens.recordExists( - name, - function (error, exists) { - assert.equal(exists, true); - - done(); - } - ); - }); - - it('should call recordExists and throws the expected error (callback)', function (done) { - const signature = 'recordExists(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - web3.eth.ens.recordExists( - name, - function (error, isApproved) { - assert.equal(isApproved, null); - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - - done(); - }); - }); - - it('should call recordExists and throws the expected error (promise)', async function () { - const signature = 'recordExists(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - try { - await web3.eth.ens.recordExists(name); - - assert.fail(); - } catch (error) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - } - }); - - it('should return the owner record for a name (owner)', async function () { - const signature = 'owner(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - const owner = await web3.eth.ens.registry.getOwner('foobar.eth'); - - assert.equal(owner, '0x0123456701234567012345670123456701234567'); - }); - - it('should call getOwner and return the expected owner (promise)', async function () { - const signature = 'owner(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - const owner = await web3.eth.ens.getOwner('foobar.eth'); - - assert.equal(owner, '0x0123456701234567012345670123456701234567'); - }); - - it('should call getOwner and return the expected owner (callback)', function (done) { - const signature = 'owner(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - web3.eth.ens.getOwner('foobar.eth', function (error, owner) { - assert.equal(owner, '0x0123456701234567012345670123456701234567'); - assert.equal(error, '0x0123456701234567012345670123456701234567'); // For backward compatibility - done(); - }); - }); - - it('should call getOwner and throw the expected error (callback)', function (done) { - const signature = 'owner(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - web3.eth.ens.getOwner('foobar.eth', function (error, owner) { - assert.equal(owner, null); - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - - done(); - }); - }); - - it('should call getOwner and throw the error on requesting of registry contract (callback)', function (done) { - const signature = 'owner(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - web3.eth.ens.getOwner('foobar.eth', function (error, owner) { - assert.equal(owner, null); - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - - done(); - }); - }); - - it('should call getOwner and throw the error on requesting of registry contract (promise)', async function () { - const signature = 'owner(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - try { - await web3.eth.ens.getOwner('foobar.eth'); - - assert.fail(); - } catch (error) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - } - }); - - it('should call resolver and return the expected resolver (promise)', async function () { - const signature = 'resolver(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - const resolver = await web3.eth.ens.getResolver('foobar.eth'); - - assert.equal(resolver.options.address, '0x0123456701234567012345670123456701234567'); - }); - - it('should call resolver and return the expected resolver (callback)', function (done) { - const signature = 'resolver(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - web3.eth.ens.getResolver('foobar.eth', function (error, resolver) { - assert.equal(resolver.options.address, '0x0123456701234567012345670123456701234567'); - assert.equal(error.options.address, '0x0123456701234567012345670123456701234567'); // For backward compatibility - - done(); - }); - }); - - it('should call getResolver and return the expected resolver (promise)', async function () { - const signature = 'resolver(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - const resolver = await web3.eth.ens.getResolver('foobar.eth'); - - assert.equal(resolver.options.address, '0x0123456701234567012345670123456701234567'); - }); - - it('should call getResolver and throw the expected error (promise)', async function () { - const signature = 'resolver(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - try { - await web3.eth.ens.getResolver('foobar.eth'); - - assert.fail(); - } catch (error) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - } - }); - - it('should call getResolver and throw the expected error on the contract registry call (promise)', async function () { - const signature = 'resolver(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - try { - await web3.eth.ens.getResolver('foobar.eth'); - - assert.fail(); - } catch (error) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - } - }); - - it('should call getResolver and throw the expected error (callback)', function (done) { - const signature = 'resolver(bytes32)'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(signature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - web3.eth.ens.getResolver('foobar.eth', function (error, resolver) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - assert.equal(resolver, null); - - done(); - }); - }); - - it('should call getAddress and return the expected address (promise)', async function () { - const resolverSig = 'resolver(bytes32)'; - const addrSig = 'addr(bytes32)'; - const addrInterfaceId = "3b3b57de"; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSig).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + addrInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(addrSig).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000001234567012345670123456701234567012345670'); - - const addr = await web3.eth.ens.getAddress('foobar.eth'); - - assert.equal(addr, '0x1234567012345670123456701234567012345670'); - }); - - it('should call getAddress and return the expected address (callback)', function (done) { - const resolverSig = 'resolver(bytes32)'; - const addrSig = 'addr(bytes32)'; - const addrInterfaceId = "3b3b57de"; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSig).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + addrInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(addrSig).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000001234567012345670123456701234567012345670'); - - web3.eth.ens.getAddress('foobar.eth', function (error, addr) { - assert.equal(error, '0x1234567012345670123456701234567012345670'); // For backward compatibility - assert.equal(addr, '0x1234567012345670123456701234567012345670'); - - done(); - }); - }); - - it('should call getAddress and throw the expected error (promise)', async function () { - const resolverSig = 'resolver(bytes32)'; - const addrSig = 'addr(bytes32)'; - const addrInterfaceId = "3b3b57de"; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSig).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + addrInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(addrSig).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - try { - await web3.eth.ens.getAddress('foobar.eth'); - - assert.fail(); - } catch (error) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - } - - }); - - it('should call getAddress and throw the expected error (callback)', function (done) { - const resolverSig = 'resolver(bytes32)'; - const addrSig = 'addr(bytes32)'; - const addrInterfaceId = "3b3b57de"; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSig).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + addrInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(addrSig).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - web3.eth.ens.getAddress('foobar.eth', function (error, addr) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - assert.equal(addr, null); - - done(); - }); - }); - - it('should call getPubkey and return the expected X and Y value (promise)', async function () { - const resolverSignature = 'resolver(bytes32)'; - const pubkeySignature = 'pubkey(bytes32)'; - const pubkeyInterfaceId = "c8690233"; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + pubkeyInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(pubkeySignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - const pubkeyCoordinateAsHex = asciiToHex('0x0000000000000000000000000000000000000000000000000000000000000000'); - provider.injectResult([ - pubkeyCoordinateAsHex, - pubkeyCoordinateAsHex - ]); - - const result = await web3.eth.ens.getPubkey('foobar.eth'); - - assert.equal(result[0][0], '0x3078303030303030303030303030303030303030303030303030303030303030'); - assert.equal(result[0][1], '0x3030303030303030303030303030303030303030303030303030303030303030'); - }); - - it('should call getPubkey and return the expected X and Y value (callback)', function (done) { - const resolverSignature = 'resolver(bytes32)'; - const pubkeySignature = 'pubkey(bytes32)'; - const pubkeyInterfaceId = "c8690233"; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + pubkeyInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(pubkeySignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - const pubkeyCoordinateAsHex = asciiToHex('0x0000000000000000000000000000000000000000000000000000000000000000'); - provider.injectResult([ - pubkeyCoordinateAsHex, - pubkeyCoordinateAsHex - ]); - - web3.eth.ens.getPubkey( - 'foobar.eth', - function (error, result) { - assert.equal(result[0][0], '0x3078303030303030303030303030303030303030303030303030303030303030'); - assert.equal(result[0][1], '0x3030303030303030303030303030303030303030303030303030303030303030'); - assert.equal(error[0][0], '0x3078303030303030303030303030303030303030303030303030303030303030'); - assert.equal(error[0][1], '0x3030303030303030303030303030303030303030303030303030303030303030'); - - done(); - } - ); - - }); - - it('should call getPubkey and throw the expected error (callback)', function (done) { - const resolverSignature = 'resolver(bytes32)'; - const pubkeySignature = 'pubkey(bytes32)'; - const pubkeyInterfaceId = "c8690233"; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + pubkeyInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(pubkeySignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - const pubkeyCoordinateAsHex = asciiToHex('0x0000000000000000000000000000000000000000000000000000000000000000'); - provider.injectResult([ - pubkeyCoordinateAsHex, - pubkeyCoordinateAsHex - ]); - - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - web3.eth.ens.getPubkey( - 'foobar.eth', - function (error, result) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - assert.equal(result, null); - - done(); - } - ); - }); - - it('should call getPubkey and throw the expected error (promise)', async function () { - const resolverSignature = 'resolver(bytes32)'; - const pubkeySignature = 'pubkey(bytes32)'; - const pubkeyInterfaceId = "c8690233"; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + pubkeyInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(pubkeySignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - const pubkeyCoordinateAsHex = asciiToHex('0x0000000000000000000000000000000000000000000000000000000000000000'); - provider.injectResult([ - pubkeyCoordinateAsHex, - pubkeyCoordinateAsHex - ]); - - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - try { - await web3.eth.ens.getPubkey('foobar.eth'); - - assert.fail(); - } catch (error) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - } - }); - - it('should call getContent and return the expected content of the resolver (promise)', async function () { - const resolverSignature = 'resolver(bytes32)'; - const contentSignature = 'content(bytes32)'; - const contentInterfaceId = 'd8389dc5'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + contentInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(contentSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000000'); - - const result = await web3.eth.ens.getContent('foobar.eth'); - - assert.equal(result, '0x0000000000000000000000000000000000000000000000000000000000000000'); - }); - - it('should call getContent and return the expected content of the resolver (callback)', function () { - const resolverSignature = 'resolver(bytes32)'; - const contentSignature = 'content(bytes32)'; - const contentInterfaceId = 'd8389dc5'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + contentInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(contentSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000000'); - - web3.eth.ens.getContent( - 'foobar.eth', - function (error, result) { - assert.equal(result, '0x0000000000000000000000000000000000000000000000000000000000000000'); - assert.equal(error, '0x0000000000000000000000000000000000000000000000000000000000000000'); - - } - ); - }); - - it('should call getContent and throw the expected error (promise)', async function () { - const resolverSignature = 'resolver(bytes32)'; - const contentSignature = 'content(bytes32)'; - const contentInterfaceId = 'd8389dc5'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + contentInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(contentSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - try { - await web3.eth.ens.getContent('foobar.eth'); - - assert.fail(); - } catch (error) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - } - }); - - it('should call getContent and throw the expected error (callback)', function () { - const resolverSignature = 'resolver(bytes32)'; - const contentSignature = 'content(bytes32)'; - const contentInterfaceId = 'd8389dc5'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + contentInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000001'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(contentSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000000'); - - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - provider.error.push(null); - - provider.injectError({ - code: 1234, - message: 'ERROR' - }); - - web3.eth.ens.getContent( - 'foobar.eth', - function (error, result) { - assert.equal(error.code, 1234); - assert.equal(error.message, 'ERROR'); - assert.equal(result, null); - } - ); - }); - - it('should error if resolver ABI does not support contenthash (promise)', async function () { - const resolverSignature = 'resolver(bytes32)'; - const contentSignature = 'contenthash(bytes32)'; - const contenthashInterfaceId = 'bc1c58d1'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + contenthashInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000000'); - - try { - await web3.eth.ens.getContenthash('foobar.eth'); - - assert.fail(); - } catch (error) { - assert(error.message.includes('does not implement requested method: "contenthash"')); - } - }); - - it('should error if resolver ABI does not support contenthash (callback)', function (done) { - const resolverSignature = 'resolver(bytes32)'; - const contentSignature = 'contenthash(bytes32)'; - const contenthashInterfaceId = 'bc1c58d1'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + contenthashInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000000'); - - web3.eth.ens.getContenthash( - 'foobar.eth', - function (error, result) { - assert(error.message.includes('does not implement requested method: "contenthash"')); - assert.equal(result, null); - done(); - } - ); - }); - - it('should error if resolver ABI does not support setContenthash (promise)', async function () { - const resolverSignature = 'resolver(bytes32)'; - const contentSignature = 'setContenthash(bytes32)'; - const contenthashInterfaceId = 'bc1c58d1'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + contenthashInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000000'); - - try { - await web3.eth.ens.setContenthash( - 'foobar.eth', - 'ipfs://QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn' - ); - - assert.fail(); - } catch (error) { - assert(error.message.includes('does not implement requested method: "setContenthash"')); - } - }); - - it('should error if resolver ABI does not support setContenthash (callback)', function (done) { - const resolverSignature = 'resolver(bytes32)'; - const contentSignature = 'setContenthash(bytes32)'; - const contenthashInterfaceId = 'bc1c58d1'; - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3(resolverSignature).slice(0, 10) + '1757b5941987904c18c7594de32c1726cda093fdddacb738cfbc4a7cd1ef4370', - to: '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000123456701234567012345670123456701234567'); - - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - data: sha3('supportsInterface(bytes4)').slice(0, 10) + contenthashInterfaceId + '00000000000000000000000000000000000000000000000000000000', - to: '0x0123456701234567012345670123456701234567', - }, 'latest']); - }); - provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000000'); - - web3.eth.ens.setContenthash( - 'foobar.eth', - 'ipfs://QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn', - { - from: '0x0123456701234567012345670123456701234567', - gas: 4000000, - gasPrice: 1 - }, - function (error, result) { - assert(error.message.includes('does not implement requested method: "setContenthash"')); - assert.equal(result, null); - done(); - } - ); - }); - }); - - describe('checkNetwork', function () { - it("won't resolve on an unknown network", async function () { - provider = new FakeHttpProvider(); - web3 = new Web3(provider); - - provider.injectResult({ - timestamp: Math.floor(new Date() / 1000) - 60, - }); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_getBlockByNumber'); - assert.deepEqual(payload.params, ['latest', false]); - }); - - provider.injectResult(1); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'net_version'); - assert.deepEqual(payload.params, []); - }); - - provider.injectResult({ - hash: '0x0123456701234567012345670123456701234567012345670123456701234567', - blockNumber: '0x0' - }); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_getBlockByNumber'); - assert.deepEqual(payload.params, ['0x0', false]); - }); - - try { - await web3.eth.ens.getAddress('foobar.eth'); - assert.fail(); - } catch (err) { - assert.isTrue(err instanceof Error, 'Should throw error'); - } - }); - - it("won't resolve when out of date", async function () { - provider = new FakeHttpProvider(); - web3 = new Web3(provider); - - provider.injectResult({ - timestamp: Math.floor(new Date() / 1000) - 3660, - }); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_getBlockByNumber'); - assert.deepEqual(payload.params, ['latest', false]); - }); - - try { - await web3.eth.ens.getAddress('foobar.eth'); - assert.fail(); - } catch (err) { - assert.isTrue(err instanceof Error, 'Should throw error'); - } - }); - - it('should only check if the connected node is synced if at least a hour is gone', async function () { - provider = new FakeHttpProvider(); - web3 = new Web3(provider); - web3.eth.ens._lastSyncCheck = new Date() / 1000; - - try { - await web3.eth.ens.checkNetwork(); - - assert.fail(); - } catch (error) { - return true; - } - }); - }); - - describe('custom registry address', function () { - let web3; - let provider; - const address = '0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e'; - - beforeEach(function () { - provider = new FakeHttpProvider(); - - // getBlock in checkNetwork - provider.injectResult({ - timestamp: Math.floor(new Date() / 1000) - 60, - }); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_getBlockByNumber'); - assert.deepEqual(payload.params, ['latest', false]); - }); - - web3 = new Web3(provider); - web3.eth.ens.registryAddress = address; - }); - - it('should use the custom defined registry address in checkNetwork', async function () { - const currentRegistry = await web3.eth.ens.checkNetwork(); - - assert.equal(currentRegistry, formatters.inputAddressFormatter(address)); - assert.equal(web3.eth.ens.registryAddress, formatters.inputAddressFormatter(address)); - }); - - it('should keep the custom defined registry address if the provider changes', async function () { - web3.eth.setProvider(provider); - const currentRegistry = await web3.eth.ens.checkNetwork(); - - assert.equal(currentRegistry, formatters.inputAddressFormatter(address)); - assert.equal(web3.eth.ens.registryAddress, formatters.inputAddressFormatter(address)); - }); - }); -}); diff --git a/test/eth.estimateGas.js b/test/eth.estimateGas.js deleted file mode 100644 index 808f6828456..00000000000 --- a/test/eth.estimateGas.js +++ /dev/null @@ -1,24 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'estimateGas'; - -var tests = [{ - args: [{ - to: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', - data: '0x23455654', - gas: 11, - gasPrice: 11 - }], - formattedArgs: [{ - to: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b', - data: '0x23455654', - gas: '0xb', - gasPrice: '0xb' - }], - result: '0x31981', - formattedResult: 203137, - call: 'eth_'+ method -}]; - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.gasPrice.js b/test/eth.gasPrice.js deleted file mode 100644 index f58a3dbd844..00000000000 --- a/test/eth.gasPrice.js +++ /dev/null @@ -1,14 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getGasPrice'; -var methodCall = 'eth_gasPrice'; - -var tests = [{ - result: '0x15f90', - formattedResult: '90000', - call: methodCall -}]; - - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.getAccounts.js b/test/eth.getAccounts.js deleted file mode 100644 index 2b8e16e759e..00000000000 --- a/test/eth.getAccounts.js +++ /dev/null @@ -1,19 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getAccounts'; -var call = 'eth_accounts'; - -var tests = [{ - result: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae'], - formattedResult: ['0x47D33b27Bb249a2DBab4C0612BF9CaF4C1950855', '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe'], - call: call -}, -{ - result: ['0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe'], - formattedResult: ['0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe'], - call: call -}]; - - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.getBalance.js b/test/eth.getBalance.js deleted file mode 100644 index 77e8cfc8f14..00000000000 --- a/test/eth.getBalance.js +++ /dev/null @@ -1,93 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); -var Eth = require('../packages/web3-eth'); - -var eth = new Eth(); - -var method = 'getBalance'; - -var tests = [{ - args: ['0x000000000000000000000000000000000000012d', 2], - formattedArgs: ['0x000000000000000000000000000000000000012d', '0x2'], - result: '0x31981', - formattedResult: '203137', - call: 'eth_' + method -}, { - args: ['0x000000000000000000000000000000000000012d', '0x1'], - formattedArgs: ['0x000000000000000000000000000000000000012d', '0x1'], - result: '0x31981', - formattedResult: '203137', - call: 'eth_' + method -}, { - args: ['0x000000000000000000000000000000000000012d', 0x1], - formattedArgs: ['0x000000000000000000000000000000000000012d', '0x1'], - result: '0x31981', - formattedResult: '203137', - call: 'eth_' + method -}, { - args: ['0x000000000000000000000000000000000000012d'], - formattedArgs: ['0x000000000000000000000000000000000000012d', eth.defaultBlock], - result: '0x31981', - formattedResult: '203137', - call: 'eth_' + method -}, { - args: ['0XDBDBDB2CBD23B783741E8D7FCF51E459B497E4A6', 0x1], - formattedArgs: ['0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', '0x1'], - result: '0x31981', - formattedResult: '203137', - call: 'eth_' + method -}, { - args: ['0xdbdbdB2cBD23b783741e8d7fcF51e459b497e4a6', 0x1], // checksum address - formattedArgs: ['0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', '0x1'], - result: '0x31981', - formattedResult: '203137', - call: 'eth_' + method -}, -{ - args: ['0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', 0x1], - formattedArgs: ['0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', '0x1'], - result: '0x31981', - formattedResult: '203137', - call: 'eth_' + method -}, { - args: ['dbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', 0x1], - formattedArgs: ['0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', '0x1'], - result: '0x31981', - formattedResult: '203137', - call: 'eth_' + method -}, { - args: ['0x000000000000000000000000000000000000012d', 0x1], - formattedArgs: ['0x000000000000000000000000000000000000012d', '0x1'], - result: '0x31981', - formattedResult: '203137', - call: 'eth_' + method -}, { - args: ['0x000000000000000000000000000000000000012d'], - formattedArgs: ['0x000000000000000000000000000000000000012d', 'latest'], - result: '0x31981', - formattedResult: '203137', - call: 'eth_' + method -}, { - args: ['000000000000000000000000000000000000012d'], - formattedArgs: ['0x000000000000000000000000000000000000012d', 'latest'], - result: '0x31981', - formattedResult: '203137', - call: 'eth_' + method -}, { - args: ['XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'], // iban address - formattedArgs: ['0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', 'latest'], - result: '0x31981', - formattedResult: '203137', - call: 'eth_' + method -}, { - args: ['0x000000000000000000000000000000000000012d'], - formattedArgs: ['0x000000000000000000000000000000000000012d', '0x1'], - result: '0x31981', - formattedResult: '203137', - call: 'eth_' + method, - defaultOptions: [ - ['defaultBlock', 1] - ] -}]; - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.getBlock.js b/test/eth.getBlock.js deleted file mode 100644 index 1fe66a346da..00000000000 --- a/test/eth.getBlock.js +++ /dev/null @@ -1,133 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getBlock'; - -var blockResult = { - "number": "0x1b4", - "hash": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "parentHash": "0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5", - "nonce": "0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2", - "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot": "0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff", - "miner": "0x4e65fda2159562a496f9f3522f89122a3088497a", - "difficulty": "0x027f07", - "totalDifficulty": "0x027f07", - "size": "0x027f07", - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "0x9f759", - "gasUsed": "0x9f759", - "timestamp": "0x54e34e8e", - "transactions": ['0x460cfb8472af2c5fd05b5a2','0x460cfb8472af2c5fd05b5a2'], - "uncles": ["0x460cfb8472af2c5fd05b5a2", "0xd5460cfb8472af2c5fd05b5a2"] -}; -var formattedBlockResult = { - "number": 436, - "hash": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "parentHash": "0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5", - "nonce": "0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2", - "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot": "0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff", - "miner": "0x4E65FDa2159562a496F9f3522f89122A3088497a", - "difficulty": '163591', - "totalDifficulty": '163591', - "size": 163591, - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": 653145, - "gasUsed": 653145, - "timestamp": 1424182926, - "transactions": ['0x460cfb8472af2c5fd05b5a2','0x460cfb8472af2c5fd05b5a2'], - "uncles": ["0x460cfb8472af2c5fd05b5a2", "0xd5460cfb8472af2c5fd05b5a2"] -}; -var blockResultWithTx = { - "number": "0x1b4", - "hash": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "parentHash": "0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5", - "nonce": "0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2", - "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot": "0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff", - "miner": "0x4e65fda2159562a496f9f3522f89122a3088497a", - "difficulty": "0x027f07", - "totalDifficulty": "0x027f07", - "size": "0x027f07", - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "0x9f759", - "gasUsed": "0x9f759", - "timestamp": "0x54e34e8e", - "transactions": [{ - "status": "mined", - "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "nonce":"0x2", - "blockHash": "0x6fd9e2a26ab", - "blockNumber": "0x15df", - "transactionIndex": "0x1", - "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "to":"0x85f43d8a49eeb85d32cf465507dd71d507100c1d", - "value":"0x7f110", - "gas": "0x7f110", - "gasPrice":"0x09184e72a000", - "input":"0x603880600c6000396000f30060", - }], - "uncles": ["0x460cfb8472af2c5fd05b5a2", "0xd5460cfb8472af2c5fd05b5a2"] -}; -var formattedBlockResultWithTx = { - "number": 436, - "hash": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "parentHash": "0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5", - "nonce": "0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2", - "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot": "0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff", - "miner": "0x4E65FDa2159562a496F9f3522f89122A3088497a", - "difficulty": '163591', - "totalDifficulty": '163591', - "size": 163591, - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": 653145, - "gasUsed": 653145, - "timestamp": 1424182926, - "transactions": [{ - "status": "mined", - "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "nonce": 2, - "blockHash": "0x6fd9e2a26ab", - "blockNumber": 5599, - "transactionIndex": 1, - "from":"0x407D73d8a49eeb85D32Cf465507dd71d507100c1", - "to":"0x85F43D8a49eeB85d32Cf465507DD71d507100C1d", - "value": '520464', - "gas": 520464, - "gasPrice": '10000000000000', - "input":"0x603880600c6000396000f30060", - }], - "uncles": ["0x460cfb8472af2c5fd05b5a2", "0xd5460cfb8472af2c5fd05b5a2"] -}; - -var tests = [{ - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', false], - result: blockResult, - formattedResult: formattedBlockResult, - call: 'eth_'+ method + 'ByHash' -},{ - args: [436], - formattedArgs: ['0x1b4', false], - result: blockResult, - formattedResult: formattedBlockResult, - call: 'eth_'+ method + 'ByNumber' -},{ - args: [436, true], - formattedArgs: ['0x1b4', true], - result: blockResultWithTx, - formattedResult: formattedBlockResultWithTx, - call: 'eth_'+ method + 'ByNumber' -}]; - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.getBlockNumber.js b/test/eth.getBlockNumber.js deleted file mode 100644 index d5357dd09bd..00000000000 --- a/test/eth.getBlockNumber.js +++ /dev/null @@ -1,12 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getBlockNumber'; - -var tests = [{ - result: '0xb', - formattedResult: 11, - call: 'eth_blockNumber' -}]; - - -testMethod.runTests('eth', method, tests); diff --git a/test/eth.getBlockTransactionCount.js b/test/eth.getBlockTransactionCount.js deleted file mode 100644 index e443250d5d3..00000000000 --- a/test/eth.getBlockTransactionCount.js +++ /dev/null @@ -1,33 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getBlockTransactionCount'; - - -var tests = [{ - args: ['0x4e65fda2159562a496f9f3522f8922f89122a3088497a122a3088497a'], - formattedArgs: ['0x4e65fda2159562a496f9f3522f8922f89122a3088497a122a3088497a'], - result: '0xb', - formattedResult: 11, - call: 'eth_getBlockTransactionCountByHash' -},{ - args: ['0x47D33b27Bb249a2DBab4C0612BF9CaF4C1950855'], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], - result: '0xb', - formattedResult: 11, - call: 'eth_getBlockTransactionCountByHash' -},{ - args: [436], - formattedArgs: ['0x1b4'], - result: '0xb', - formattedResult: 11, - call: 'eth_getBlockTransactionCountByNumber' -},{ - args: ['pending'], - formattedArgs: ['pending'], - result: '0xb', - formattedResult: 11, - call: 'eth_getBlockTransactionCountByNumber' -}]; - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.getBlockUncleCount.js b/test/eth.getBlockUncleCount.js deleted file mode 100644 index 9561cc53e88..00000000000 --- a/test/eth.getBlockUncleCount.js +++ /dev/null @@ -1,25 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getBlockUncleCount'; - -var tests = [{ - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], - result: '0xb', - formattedResult: 11, - call: 'eth_getUncleCountByBlockHash' -},{ - args: [436], - formattedArgs: ['0x1b4'], - result: '0xb', - formattedResult: 11, - call: 'eth_getUncleCountByBlockNumber' -},{ - args: ['pending'], - formattedArgs: ['pending'], - result: '0xb', - formattedResult: 11, - call: 'eth_getUncleCountByBlockNumber' -}]; - -testMethod.runTests('eth', method, tests); diff --git a/test/eth.getChainId.js b/test/eth.getChainId.js deleted file mode 100644 index 42cd7adbd21..00000000000 --- a/test/eth.getChainId.js +++ /dev/null @@ -1,14 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getChainId'; -var methodCall = 'eth_chainId'; - -var tests = [{ - result: '0x01', - formattedResult: 1, - call: methodCall -}]; - - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.getCode.js b/test/eth.getCode.js deleted file mode 100644 index 548ecc04ac3..00000000000 --- a/test/eth.getCode.js +++ /dev/null @@ -1,30 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); -var Eth = require('../packages/web3-eth'); - -var eth = new Eth(); - -var method = 'getCode'; - - -var tests = [{ - args: ['0x4E65FDa2159562a496F9f3522f89122A3088497a'], // checksum address - formattedArgs: ['0x4e65fda2159562a496f9f3522f89122a3088497a', eth.defaultBlock], - result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - call: 'eth_'+ method -},{ - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', eth.defaultBlock], - result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - call: 'eth_'+ method -},{ - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 2], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0x2'], - result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - call: 'eth_'+ method -}]; - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.getCoinbase.js b/test/eth.getCoinbase.js deleted file mode 100644 index 122e288bde3..00000000000 --- a/test/eth.getCoinbase.js +++ /dev/null @@ -1,13 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getCoinbase'; - - -var tests = [{ - result: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', - formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', - call: 'eth_coinbase' -}]; - - -testMethod.runTests('eth', method, tests); diff --git a/test/eth.getHashRate.js b/test/eth.getHashRate.js deleted file mode 100644 index 12f7fa90d00..00000000000 --- a/test/eth.getHashRate.js +++ /dev/null @@ -1,14 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getHashrate'; - - -var tests = [{ - result: '0x788a8', - formattedResult: 493736, - call: 'eth_hashrate' -}]; - - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.getNodeVersion.js b/test/eth.getNodeVersion.js deleted file mode 100644 index 53d89ac39ad..00000000000 --- a/test/eth.getNodeVersion.js +++ /dev/null @@ -1,13 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getNodeInfo'; -var call = 'web3_clientVersion'; - -var tests = [{ - result: 'Geth/v1.6.7-stable-ab5646c5/darwin-amd64/go1.8.3', - formattedResult: 'Geth/v1.6.7-stable-ab5646c5/darwin-amd64/go1.8.3', - call: call -}]; - - -testMethod.runTests('eth', method, tests); diff --git a/test/eth.getPendingTransactions.js b/test/eth.getPendingTransactions.js deleted file mode 100644 index 5cccfd70c5f..00000000000 --- a/test/eth.getPendingTransactions.js +++ /dev/null @@ -1,44 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var unformattedTx = { - "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "nonce":"0x5", - "blockHash": "0x6fd9e2a26ab", - "blockNumber": "0x15df", - "transactionIndex": "0x1", - "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "to":"0x85f43d8a49eeb85d32cf465507dd71d507100c1d", - "value":"0x7f110", - "gas": "0x7f110", - "gasPrice":"0x09184e72a000", - "input":"0x603880600c6000396000f30060" -}; - -var result = [unformattedTx, unformattedTx]; - -var formattedTx = { - "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "nonce":5, - "blockHash": "0x6fd9e2a26ab", - "blockNumber": 5599, - "transactionIndex": 1, - "from":"0x407D73d8a49eeb85D32Cf465507dd71d507100c1", // checksum address - "to":"0x85F43D8a49eeB85d32Cf465507DD71d507100C1d", // checksum address - "value": '520464', - "gas": 520464, - "gasPrice": '10000000000000', - "input":"0x603880600c6000396000f30060" -}; - -var formattedResult = [formattedTx, formattedTx]; - -var tests = [{ - args: [], - formattedArgs: [], - result: result, - formattedResult: formattedResult, - call: 'eth_pendingTransactions' -}]; - -testMethod.runTests('eth', 'getPendingTransactions', tests); - diff --git a/test/eth.getProof.js b/test/eth.getProof.js deleted file mode 100644 index 412d9b27972..00000000000 --- a/test/eth.getProof.js +++ /dev/null @@ -1,96 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); -var Eth = require('../packages/web3-eth'); -var BigNumber = require('bignumber.js'); - -var eth = new Eth(); - -var method = 'getProof'; -var call = 'eth_getProof'; - -var proof = { - address: '0x4E65FDa2159562a496F9f3522f89122A3088497a', - balance: '0x1', - codeHash: '0x0', - nonce: '0x2', - storageHash: '0x0', - accountProof: ['0xf90211a090dcaf88c40c7bbc95a912cbdde67c175767b31173df9ee4b0d733bfdd511c43a0babe369f6b12092f49181ae04ca173fb68d1a5456f18d20fa32cba73954052bda0473ecf8a7e36a829e75039a3b055e51b8332cbf03324ab4af2066bbd6fbf0021a0bbda34753d7aa6c38e603f360244e8f59611921d9e1f128372fec0d586d4f9e0a04e44caecff45c9891f74f6a2156735886eedf6f1a733628ebc802ec79d844648a0a5f3f2f7542148c973977c8a1e154c4300fec92f755f7846f1b734d3ab1d90e7a0e823850f50bf72baae9d1733a36a444ab65d0a6faaba404f0583ce0ca4dad92da0f7a00cbe7d4b30b11faea3ae61b7f1f2b315b61d9f6bd68bfe587ad0eeceb721a07117ef9fc932f1a88e908eaead8565c19b5645dc9e5b1b6e841c5edbdfd71681a069eb2de283f32c11f859d7bcf93da23990d3e662935ed4d6b39ce3673ec84472a0203d26456312bbc4da5cd293b75b840fc5045e493d6f904d180823ec22bfed8ea09287b5c21f2254af4e64fca76acc5cd87399c7f1ede818db4326c98ce2dc2208a06fc2d754e304c48ce6a517753c62b1a9c1d5925b89707486d7fc08919e0a94eca07b1c54f15e299bd58bdfef9741538c7828b5d7d11a489f9c20d052b3471df475a051f9dd3739a927c89e357580a4c97b40234aa01ed3d5e0390dc982a7975880a0a089d613f26159af43616fd9455bb461f4869bfede26f2130835ed067a8b967bfb80'], - storageProof: [ - { - key: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', - value: '0x1', - proof: ['0x0'] - } - ] -}; - -var formattedProof = { - address: '0x4E65FDa2159562a496F9f3522f89122A3088497a', - balance: '1', - codeHash: '0x0', - nonce: '2', - storageHash: '0x0', - accountProof: ['0xf90211a090dcaf88c40c7bbc95a912cbdde67c175767b31173df9ee4b0d733bfdd511c43a0babe369f6b12092f49181ae04ca173fb68d1a5456f18d20fa32cba73954052bda0473ecf8a7e36a829e75039a3b055e51b8332cbf03324ab4af2066bbd6fbf0021a0bbda34753d7aa6c38e603f360244e8f59611921d9e1f128372fec0d586d4f9e0a04e44caecff45c9891f74f6a2156735886eedf6f1a733628ebc802ec79d844648a0a5f3f2f7542148c973977c8a1e154c4300fec92f755f7846f1b734d3ab1d90e7a0e823850f50bf72baae9d1733a36a444ab65d0a6faaba404f0583ce0ca4dad92da0f7a00cbe7d4b30b11faea3ae61b7f1f2b315b61d9f6bd68bfe587ad0eeceb721a07117ef9fc932f1a88e908eaead8565c19b5645dc9e5b1b6e841c5edbdfd71681a069eb2de283f32c11f859d7bcf93da23990d3e662935ed4d6b39ce3673ec84472a0203d26456312bbc4da5cd293b75b840fc5045e493d6f904d180823ec22bfed8ea09287b5c21f2254af4e64fca76acc5cd87399c7f1ede818db4326c98ce2dc2208a06fc2d754e304c48ce6a517753c62b1a9c1d5925b89707486d7fc08919e0a94eca07b1c54f15e299bd58bdfef9741538c7828b5d7d11a489f9c20d052b3471df475a051f9dd3739a927c89e357580a4c97b40234aa01ed3d5e0390dc982a7975880a0a089d613f26159af43616fd9455bb461f4869bfede26f2130835ed067a8b967bfb80'], - storageProof: [ - { - key: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', - value: '0x1', - proof: ['0x0'] - } - ] -}; - -var tests = [{ - args: ['0x4E65FDa2159562a496F9f3522f89122A3088497a', [2]], // checksum address - formattedArgs: ['0x4e65fda2159562a496f9f3522f89122a3088497a', ['0x2'], eth.defaultBlock], - result: proof, - formattedResult: formattedProof, - call: call -},{ - args: ['0x4E65FDa2159562a496F9f3522f89122A3088497a', [2], 0], - formattedArgs: ['0x4e65fda2159562a496f9f3522f89122a3088497a', ['0x2'], '0x0'], - result: proof, - formattedResult: formattedProof, - call: call -},{ - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', [0xb], 0x0], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', ['0xb'], '0x0'], - result: proof, - formattedResult: formattedProof, - call: call -}, { - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', [0xb], 'latest'], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', ['0xb'], 'latest'], - result: proof, - formattedResult: formattedProof, - call: call -}, { - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', ['0xb'], 'latest'], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', ['0xb'], 'latest'], - result: proof, - formattedResult: formattedProof, - call: call -}, { - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', ['11'], 'latest'], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', ['0xb'], 'latest'], - result: proof, - formattedResult: formattedProof, - call: call -}, { - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', [new BigNumber('11')], 'latest'], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', ['0xb'], 'latest'], - result: proof, - formattedResult: formattedProof, - call: call -} -// TODO: Fixing of test.method.js cloning of the arguments does destroy the BN object. Manually calling of utils.numberToHex with new BN('11'); does work. -// , { -// args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', [new BN('11')], 'latest'], -// formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0xb', 'latest'], -// result: proof', -// formattedResult: formattedProof', -// call: call -// } -]; - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.getStorageAt.js b/test/eth.getStorageAt.js deleted file mode 100644 index f8997131aaf..00000000000 --- a/test/eth.getStorageAt.js +++ /dev/null @@ -1,63 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); -var Eth = require('../packages/web3-eth'); -var BigNumber = require('bignumber.js'); - -var eth = new Eth(); - -var method = 'getStorageAt'; - -var tests = [{ - args: ['0x4E65FDa2159562a496F9f3522f89122A3088497a', 2], // checksum address - formattedArgs: ['0x4e65fda2159562a496f9f3522f89122a3088497a', '0x2', eth.defaultBlock], - result: '0x47d33b2', - formattedResult: '0x47d33b2', - call: 'eth_'+ method -},{ - args: ['0x4E65FDa2159562a496F9f3522f89122A3088497a', 2, 0], - formattedArgs: ['0x4e65fda2159562a496f9f3522f89122a3088497a', '0x2', '0x0'], - result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - call: 'eth_'+ method -},{ - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 0xb, 0x0], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0xb', '0x0'], - result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - call: 'eth_'+ method -}, { - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 0xb, 'latest'], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0xb', 'latest'], - result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - call: 'eth_'+ method -}, { - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0xb', 'latest'], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0xb', 'latest'], - result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - call: 'eth_'+ method -}, { - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '11', 'latest'], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0xb', 'latest'], - result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - call: 'eth_'+ method -}, { - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', new BigNumber('11'), 'latest'], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0xb', 'latest'], - result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', - call: 'eth_'+ method -} -// TODO: Fixing of test.method.js cloning of the arguments does destroy the BN object. Manually calling of utils.numberToHex with new BN('11'); does work. -// , { -// args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', new BN('11'), 'latest'], -// formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0xb', 'latest'], -// result: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', -// formattedResult: '0x47d33b27bb249a2dbab4c0612bf9caf4747d33b27bb249a2dbab4c0612bf9cafd33b27bb249a2dbab4c0612bf9caf4c1950855', -// call: 'eth_'+ method -// } -]; - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.getTransaction.js b/test/eth.getTransaction.js deleted file mode 100644 index d0fae0de54f..00000000000 --- a/test/eth.getTransaction.js +++ /dev/null @@ -1,41 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getTransaction'; - -var txResult = { - "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "nonce":"0x5", - "blockHash": "0x6fd9e2a26ab", - "blockNumber": "0x15df", - "transactionIndex": "0x1", - "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "to":"0x85f43d8a49eeb85d32cf465507dd71d507100c1d", - "value":"0x7f110", - "gas": "0x7f110", - "gasPrice":"0x09184e72a000", - "input":"0x603880600c6000396000f30060" -}; -var formattedTxResult = { - "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "nonce":5, - "blockHash": "0x6fd9e2a26ab", - "blockNumber": 5599, - "transactionIndex": 1, - "from":"0x407D73d8a49eeb85D32Cf465507dd71d507100c1", // checksum address - "to":"0x85F43D8a49eeB85d32Cf465507DD71d507100C1d", // checksum address - "value": '520464', - "gas": 520464, - "gasPrice": '10000000000000', - "input":"0x603880600c6000396000f30060" -}; - -var tests = [{ - args: ['0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b'], - formattedArgs: ['0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b'], - result: txResult, - formattedResult: formattedTxResult, - call: 'eth_'+ method + 'ByHash' -}]; - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.getTransactionFromBlock.js b/test/eth.getTransactionFromBlock.js deleted file mode 100644 index 32260659ac2..00000000000 --- a/test/eth.getTransactionFromBlock.js +++ /dev/null @@ -1,49 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getTransactionFromBlock'; - -var txResult = { - "status": "mined", - "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "nonce":"0xb", - "blockHash": "0x6fd9e2a26ab", - "blockNumber": "0x15df", - "transactionIndex": "0x1", - "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "to":"0x85f43d8a49eeb85d32cf465507dd71d507100c1d", - "value":"0x7f110", - "gas": "0x7f110", - "gasPrice":"0x09184e72a000", - "input":"0x603880600c6000396000f30060" -}; -var formattedTxResult = { - "status": "mined", - "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "nonce":11, - "blockHash": "0x6fd9e2a26ab", - "blockNumber": 5599, - "transactionIndex": 1, - "from":"0x407D73d8a49eeb85D32Cf465507dd71d507100c1", // checksum address - "to":"0x85F43D8a49eeB85d32Cf465507DD71d507100C1d", // checksum address - "value": '520464', - "gas": 520464, - "gasPrice": '10000000000000', - "input":"0x603880600c6000396000f30060" -}; - -var tests = [{ - args: ['0x2dbab4c0612bf9caf4c195085547dc0612bf9caf4c1950855', 2], - formattedArgs: ['0x2dbab4c0612bf9caf4c195085547dc0612bf9caf4c1950855', '0x2'], - result: txResult, - formattedResult: formattedTxResult, - call: 'eth_getTransactionByBlockHashAndIndex' -},{ - args: [436, 11], - formattedArgs: ['0x1b4', '0xb'], - result: txResult, - formattedResult: formattedTxResult, - call: 'eth_getTransactionByBlockNumberAndIndex' -}]; - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.getTransactionReceipt.js b/test/eth.getTransactionReceipt.js deleted file mode 100644 index dabb7f6bb64..00000000000 --- a/test/eth.getTransactionReceipt.js +++ /dev/null @@ -1,118 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getTransactionReceipt'; - -var txResult = { - "blockHash": "0x6fd9e2a26ab", - "blockNumber": "0x15df", - "transactionHash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "transactionIndex": "0x1", - "contractAddress":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "cumulativeGasUsed":"0x7f110", - "gasUsed": "0x7f110", - "logs": [{ - transactionIndex: '0x3e8', - logIndex: '0x3e8', - blockNumber: '0x3e8', - transactionHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - blockHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - data: '0x7b2274657374223a2274657374227', - topics: ['0x68656c6c6f','0x6d79746f70696373'] - },{ - transactionIndex: null, - logIndex: null, - blockNumber: null, - transactionHash: null, - blockHash: null, - data: '0x7cc274657374223a2274657374227', - topics: ['0x68656c6c6f'] - }] -}; -var formattedTxResult = { - "blockHash": "0x6fd9e2a26ab", - "blockNumber": 5599, - "transactionHash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "transactionIndex": 1, - "contractAddress":"0x407D73d8a49eeb85D32Cf465507dd71d507100c1", // checksum address - "cumulativeGasUsed": 520464, - "gasUsed": 520464, - "logs": [{ - id: "log_2b801386", - transactionIndex: 1000, - logIndex: 1000, - blockNumber: 1000, - transactionHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - blockHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - data: '0x7b2274657374223a2274657374227', - topics: ['0x68656c6c6f','0x6d79746f70696373'] - },{ - id: null, - transactionIndex: null, - logIndex: null, - blockNumber: null, - transactionHash: null, - blockHash: null, - data: '0x7cc274657374223a2274657374227', - topics: ['0x68656c6c6f'] - }] -}; - -var tests = [{ - args: ['0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265'], - formattedArgs: ['0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265'], - result: txResult, - formattedResult: formattedTxResult, - call: 'eth_'+ method -},{ - args: ['0xff960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265'], - formattedArgs: ['0xff960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265'], - result: { - "status": "0x1", - "blockHash": "0x6fd9e2a26ab", - "blockNumber": "0x15df", - "transactionHash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "transactionIndex": "0x1", - "contractAddress":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "cumulativeGasUsed":"0x7f110", - "gasUsed": "0x7f110", - }, - formattedResult: { - "status": true, - "blockHash": "0x6fd9e2a26ab", - "blockNumber": 5599, - "transactionHash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "transactionIndex": 1, - "contractAddress":"0x407D73d8a49eeb85D32Cf465507dd71d507100c1", // checksum address - "cumulativeGasUsed": 520464, - "gasUsed": 520464, - }, - call: 'eth_'+ method -},{ - args: ['0xdd960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265'], - formattedArgs: ['0xdd960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265'], - result: { - "status": "0x0", - "blockHash": "0x6fd9e2a26ab", - "blockNumber": "0x15df", - "transactionHash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "transactionIndex": "0x10", - "contractAddress":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "cumulativeGasUsed":"0x7f110", - "gasUsed": "0x7f110", - }, - formattedResult: { - "status": false, - "blockHash": "0x6fd9e2a26ab", - "blockNumber": 5599, - "transactionHash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "transactionIndex": 16, - "contractAddress":"0x407D73d8a49eeb85D32Cf465507dd71d507100c1", // checksum address - "cumulativeGasUsed": 520464, - "gasUsed": 520464, - }, - call: 'eth_'+ method -}]; - - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.getUncle.js b/test/eth.getUncle.js deleted file mode 100644 index 31c3a91a948..00000000000 --- a/test/eth.getUncle.js +++ /dev/null @@ -1,132 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getUncle'; - -var blockResult = { - "number": "0x1b4", - "hash": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "parentHash": "0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5", - "nonce": "0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2", - "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot": "0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff", - "miner": "0x4e65fda2159562a496f9f3522f89122a3088497a", - "difficulty": "0x027f07", - "totalDifficulty": "0x027f07", - "size": "0x027f07", - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "0x9f759", - "gasUsed": "0x9f759", - "timestamp": "0x54e34e8e", - "transactions": ['0x460cfb8472af2c5fd05b5a2','0x460cfb8472af2c5fd05b5a2'], - "uncles": ["0x460cfb8472af2c5fd05b5a2", "0xd5460cfb8472af2c5fd05b5a2"] -}; -var formattedBlockResult = { - "number": 436, - "hash": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "parentHash": "0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5", - "nonce": "0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2", - "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot": "0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff", - "miner": "0x4E65FDa2159562a496F9f3522f89122A3088497a", // checksum address - "difficulty": '163591', - "totalDifficulty": '163591', - "size": 163591, - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": 653145, - "gasUsed": 653145, - "timestamp": 1424182926, - "transactions": ['0x460cfb8472af2c5fd05b5a2','0x460cfb8472af2c5fd05b5a2'], - "uncles": ["0x460cfb8472af2c5fd05b5a2", "0xd5460cfb8472af2c5fd05b5a2"] -}; -var blockResultWithTx = { - "number": "0x1b4", - "hash": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "parentHash": "0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5", - "nonce": "0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2", - "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot": "0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff", - "miner": "0x4e65fda2159562a496f9f3522f89122a3088497a", - "difficulty": "0x027f07", - "totalDifficulty": "0x027f07", - "size": "0x027f07", - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "0x9f759", - "gasUsed": "0x9f759", - "timestamp": "0x54e34e8e", - "transactions": [{ - // "status": "mined", - "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "nonce":"0x2", - "blockHash": "0x6fd9e2a26ab", - "blockNumber": "0x15df", - "transactionIndex": "0x1", - "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "to":"0x85f43d8a49eeb85d32cf465507dd71d507100c1d", - "value":"0x7f110", - "gas": "0x7f110", - "gasPrice":"0x09184e72a000", - "input":"0x603880600c6000396000f30060", - }], - "uncles": ["0x460cfb8472af2c5fd05b5a2", "0xd5460cfb8472af2c5fd05b5a2"] -}; -var formattedBlockResultWithTx = { - "number": 436, - "hash": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "parentHash": "0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5", - "nonce": "0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2", - "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", - "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "stateRoot": "0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff", - "miner": "0x4E65FDa2159562a496F9f3522f89122A3088497a", // checksum address - "difficulty": '163591', - "totalDifficulty": '163591', - "size": 163591, - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": 653145, - "gasUsed": 653145, - "timestamp": 1424182926, - "transactions": [{ - // "status": "mined", - "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "nonce": 2, - "blockHash": "0x6fd9e2a26ab", - "blockNumber": 5599, - "transactionIndex": 1, - "from":"0x407D73d8a49eeb85D32Cf465507dd71d507100c1", // checksum address - "to":"0x85F43D8a49eeB85d32Cf465507DD71d507100C1d", // checksum address - "value": '520464', - "gas": 520464, - "gasPrice": '10000000000000', - "input":"0x603880600c6000396000f30060", - }], - "uncles": ["0x460cfb8472af2c5fd05b5a2", "0xd5460cfb8472af2c5fd05b5a2"] -}; - -var tests = [{ - args: ['0x47D33b27Bb249a2DBab4C0612BF9CaF4C1950855', 2], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0x2'], - result: blockResult, - formattedResult: formattedBlockResult, - call: 'eth_getUncleByBlockHashAndIndex' -},{ - args: [436, 1], - formattedArgs: ['0x1b4', '0x1'], - result: blockResult, - formattedResult: formattedBlockResult, - call: 'eth_getUncleByBlockNumberAndIndex' -},{ - args: [436, 1, true], - formattedArgs: ['0x1b4', '0x1'], - result: blockResultWithTx, - formattedResult: formattedBlockResultWithTx, - call: 'eth_getUncleByBlockNumberAndIndex' -}]; - -testMethod.runTests('eth', method, tests); diff --git a/test/eth.getWork.js b/test/eth.getWork.js deleted file mode 100644 index 1fb8259baea..00000000000 --- a/test/eth.getWork.js +++ /dev/null @@ -1,14 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getWork'; - -var tests = [{ - args: [], - formattedArgs: [], - result: true, - formattedResult: true, - call: 'eth_'+ method -}]; - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.handleRevert.js b/test/eth.handleRevert.js deleted file mode 100644 index eae3b8db9bd..00000000000 --- a/test/eth.handleRevert.js +++ /dev/null @@ -1,26 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Eth = require('../packages/web3-eth'); - -var eth = new Eth(); - -var setValue = true; - -describe('web3.eth', function () { - describe('handleRevert', function () { - it('should check if handleRevert is set to proper value', function () { - assert.equal(eth.handleRevert, false); - assert.equal(eth.Contract.handleRevert, false); - assert.equal(eth.getCode.method.handleRevert, false); - }); - - it('should set handleRevert for all sub packages', function () { - eth.handleRevert = setValue; - - assert.equal(eth.handleRevert, setValue); - assert.equal(eth.Contract.handleRevert, setValue); - assert.equal(eth.getCode.method.handleRevert, setValue); - }); - }); -}); - diff --git a/test/eth.isMining.js b/test/eth.isMining.js deleted file mode 100644 index 0486767e5b8..00000000000 --- a/test/eth.isMining.js +++ /dev/null @@ -1,13 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'isMining'; -var call = 'eth_mining'; - -var tests = [{ - result: true, - formattedResult: true, - call: call -}]; - - -testMethod.runTests('eth', method, tests); diff --git a/test/eth.maxListenersWarningThreshold.js b/test/eth.maxListenersWarningThreshold.js deleted file mode 100644 index 0f4bd016f8f..00000000000 --- a/test/eth.maxListenersWarningThreshold.js +++ /dev/null @@ -1,36 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Eth = require('../packages/web3-eth'); - -var setValue = 123; - -describe('web3.eth', function () { - describe('maxListenersWarningThreshold', function () { - var eth; - - beforeEach(function (){ - eth = new Eth(); - }) - it('should default to 100', function () { - assert.equal(eth.maxListenersWarningThreshold, 100); - }); - it('should set threshold to proper value', function () { - // Mock EventEmitter interface - eth.currentProvider = { - setMaxListeners: () => {} - } - eth.maxListenersWarningThreshold = setValue; - assert.equal(eth.maxListenersWarningThreshold, setValue); - }); - it('should *NOT* set threshold when there is no currentProvider', function () { - eth.maxListenersWarningThreshold = setValue; - assert.equal(eth.maxListenersWarningThreshold, 100); - }); - it('should *NOT* set threshold when currentProvider does not extend EventEmitter', function () { - eth.currentProvider = {} - eth.maxListenersWarningThreshold = setValue; - assert.equal(eth.maxListenersWarningThreshold, 100); - }); - }); -}); - diff --git a/test/eth.net.getNetworkType.js b/test/eth.net.getNetworkType.js deleted file mode 100644 index 132f44056e3..00000000000 --- a/test/eth.net.getNetworkType.js +++ /dev/null @@ -1,74 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var FakeHttpProvider = require('./helpers/FakeIpcProvider'); -var Web3 = require('../packages/web3'); - -var tests = [{ - hash: '0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3', - id: 1, - result: 'main' -},{ - hash: '0cd786a2425d16f152c658316c423e6ce1181e15c3295826d7c9904cba9ce303', - id: 2, - result: 'morden' -},{ - hash: '0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d', - id: 3, - result: 'ropsten' -},{ - hash: '0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177', - id: 4, - result: 'rinkeby' -},{ - hash: '0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a', - id: 5, - result: 'goerli' -},{ - hash: '0xffe56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3', - id: 42, - result: 'private' -},{ - hash: '0xffe56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3', - id: 1, - result: 'private' -},{ - hash: '0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3', - id: 42, - result: 'private' -}]; - -describe('getNetworkType', function () { - tests.forEach(function (test) { - it('should detect the '+ test.result +' net', function (done) { - var provider = new FakeHttpProvider(); - var web3 = new Web3(provider); - - provider.injectResult(test.id); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'net_version'); - assert.deepEqual(payload.params, []); - }); - - provider.injectResult({ - hash: test.hash, - blockNumber: '0x0' - }); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_getBlockByNumber'); - assert.deepEqual(payload.params, ['0x0', false]); - }); - - web3.eth.net.getNetworkType() - .then(function(res) { - assert.equal(res, test.result); - done(); - }) - .catch(function (err) { - throw err; - done(); - }); - }); - }); -}); diff --git a/test/eth.net.getPeerCount.js b/test/eth.net.getPeerCount.js deleted file mode 100644 index d8b00058a83..00000000000 --- a/test/eth.net.getPeerCount.js +++ /dev/null @@ -1,12 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getPeerCount'; - - -var tests = [{ - result: '0xf', - formattedResult: 15, - call: 'net_peerCount' -}]; - -testMethod.runTests(['eth','net'], method, tests); diff --git a/test/eth.net.isListening.js b/test/eth.net.isListening.js deleted file mode 100644 index e3e1beefe5f..00000000000 --- a/test/eth.net.isListening.js +++ /dev/null @@ -1,12 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'isListening'; - - -var tests = [{ - result: true, - formattedResult: true, - call: 'net_listening' -}]; - -testMethod.runTests(['eth','net'], method, tests); diff --git a/test/eth.net_methods.js b/test/eth.net_methods.js deleted file mode 100644 index b2f6663f1ee..00000000000 --- a/test/eth.net_methods.js +++ /dev/null @@ -1,14 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var u = require('./helpers/test.utils.js'); -var Eth = require('../packages/web3-eth'); -var eth = new Eth(); - -describe('web3.net', function() { - describe('methods', function() { - u.methodExists(eth.net, 'getId'); - u.methodExists(eth.net, 'getNetworkType'); - u.methodExists(eth.net, 'isListening'); - u.methodExists(eth.net, 'getPeerCount'); - }); -}); diff --git a/test/eth.protocolVersion.js b/test/eth.protocolVersion.js deleted file mode 100644 index 0aca61be569..00000000000 --- a/test/eth.protocolVersion.js +++ /dev/null @@ -1,13 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getProtocolVersion'; -var call = 'eth_protocolVersion'; - -var tests = [{ - result: '12345', - formattedResult: '12345', - call: call -}]; - - -testMethod.runTests('eth', method, tests); diff --git a/test/eth.requestAccounts.js b/test/eth.requestAccounts.js deleted file mode 100644 index ce0ba7cc572..00000000000 --- a/test/eth.requestAccounts.js +++ /dev/null @@ -1,19 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'requestAccounts'; -var call = 'eth_requestAccounts'; - -var tests = [{ - result: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae'], - formattedResult: ['0x47D33b27Bb249a2DBab4C0612BF9CaF4C1950855', '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe'], - call: call -}, -{ - result: ['0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe'], - formattedResult: ['0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe'], - call: call -}]; - - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.sendTransaction.js b/test/eth.sendTransaction.js deleted file mode 100644 index 4a77bd8e791..00000000000 --- a/test/eth.sendTransaction.js +++ /dev/null @@ -1,375 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); -var chai = require('chai'); -var assert = chai.assert; -var FakeHttpProvider = require('./helpers/FakeHttpProvider'); -var Web3 = require('../packages/web3'); - -var clone = function (object) { return object ? JSON.parse(JSON.stringify(object)) : []; }; - - -var method = 'sendTransaction'; - - -var tests = [{ - args: [{ - from: '0xdbdbdB2cBD23b783741e8d7fcF51e459b497e4a6', // checksum address - to: '0xdbdbdB2cBD23b783741e8d7fcF51e459b497e4a6', // checksum address - value: '1234567654321', - gasPrice: '324234234234' - }], - formattedArgs: [{ - from: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - to: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - value: "0x11f71f76bb1", - gasPrice: "0x4b7dddc97a" - }], - result: '0x1234567', - formattedResult: '0x1234567', - notification: { - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }, - call: 'eth_'+ method -}, -// test with gasPrice missing -{ - args: [{ - from: '0xdbdbdB2cBD23b783741e8d7fcF51e459b497e4a6', // checksum address - to: '0xdbdbdB2cBD23b783741e8d7fcF51e459b497e4a6', // checksum address - value: '1234567654321' - }], - notification: { - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }, - call: 'eth_gasPrice', - formattedArgs: [], - result: '0x1234567', - formattedResult: '0x1234567', - - call2: 'eth_'+ method, - formattedArgs2: [{ - from: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - to: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - value: "0x11f71f76bb1", - gasPrice: "0x1234567" - }], - result2: '0x1234567' -},{ - args: [{ - from: '0XDBDBDB2CBD23B783741E8D7FCF51E459B497E4A6', - to: '0XDBDBDB2CBD23B783741E8D7FCF51E459B497E4A6', - value: '1234567654321', - data: '0x213453ffffff', - gasPrice: '324234234234' - }], - formattedArgs: [{ - from: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - to: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - value: "0x11f71f76bb1", - data: '0x213453ffffff', - gasPrice: "0x4b7dddc97a" - }], - result: '0x12345678976543213456786543212345675432', - formattedResult: '0x12345678976543213456786543212345675432', - notification: { - method: 'eth_subscription', - params: { - subscription: '0x12345678976543213456786543212345675432', - result: { - blockNumber: '0x10' - } - } - }, - call: 'eth_'+ method -},{ - args: [{ - from: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', // iban address - to: '0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', - value: '1234567654321', - gasPrice: '324234234234' - }], - formattedArgs: [{ - from: "0x00c5496aee77c1ba1f0854206a26dda82a81d6d8", - to: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - value: "0x11f71f76bb1", - gasPrice: "0x4b7dddc97a" - }], - result: '0x12345678976543213456786543212345675432', - formattedResult: '0x12345678976543213456786543212345675432', - notification: { - method: 'eth_subscription', - params: { - subscription: '0x12345678976543213456786543212345675432', - result: { - blockNumber: '0x10' - } - } - }, - call: 'eth_'+ method - -// using local wallet -},{ - useLocalWallet: function (web3) { - web3.eth.accounts.wallet.add('0xd7d364e720c129acb940439a84a99185dd55af6f6d105018a8acfb7f8c008142'); - }, - walletFrom: '0x5af0838657202f865A4547b5eD28a64f799960DC', - args: [{ - from: '0x5af0838657202f865A4547b5eD28a64f799960DC', - to: '0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', - value: '1234567654321', - gasPrice: '324234234234', - gas: 500000, - chain: 'mainnet', - hardfork: 'petersburg' - }], - formattedArgs: ['0xf86b0a854b7dddc97a8307a12094dbdbdb2cbd23b783741e8d7fcf51e459b497e4a686011f71f76bb18026a0ce66ccabda889012314677073ded7bec9f763e564dfcff1135e7c6a3c5b89353a07bfa06fe1ba3f1804e4677295a5147e6c8b2224647cc2b7b62063081f6490bd3'], - result: '0x12345678976543213456786543212345675432', - formattedResult: '0x12345678976543213456786543212345675432', - notification: { - method: 'eth_subscription', - params: { - subscription: '0x12345678976543213456786543212345675432', - result: { - blockNumber: '0x10' - } - } - }, - call: 'eth_sendRawTransaction' -},{ - useLocalWallet: function (web3) { - web3.eth.accounts.wallet.add('0xf7d364e720c129acb940439a84a99185dd55af6f6d105018a8acfb7f8c008142'); - }, - walletFrom: '0xE2873A6bE9Bc50E70dE4295d968459d4aCF515C0', - args: [{ - from: 0, - to: '0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', - value: '1234567654321', - gasPrice: '324234234234', - gas: 500000, - chain: 'mainnet', - hardfork: 'petersburg' - }], - formattedArgs: ['0xf86b0a854b7dddc97a8307a12094dbdbdb2cbd23b783741e8d7fcf51e459b497e4a686011f71f76bb18026a0fe620c94cc14fdcdef494a40caf9e2860d1a5929d95730e1b7a6a2041c9c507fa01d3d22e7ab1010fa95a357322ad14a8ce1b1b631d3bb9c123922ff8042c8fc8b'], - result: '0x12345678976543213456786543212345675432', - formattedResult: '0x12345678976543213456786543212345675432', - notification: { - method: 'eth_subscription', - params: { - subscription: '0x12345678976543213456786543212345675432', - result: { - blockNumber: '0x10' - } - } - }, - call: 'eth_sendRawTransaction' -},{ - useLocalWallet: function (web3) { - web3.eth.accounts.wallet.add('0xa1d364e720c129acb940439a84a99185dd55af6f6d105018a8acfb7f8c008142'); - }, - walletFrom: '0xF65a29341Fd9F8357e060f2e21Bf3407062f2A46', - args: [{ - from: { - address: '0xF65a29341Fd9F8357e060f2e21Bf3407062f2A46', - privateKey: '0xa1d364e720c129acb940439a84a99185dd55af6f6d105018a8acfb7f8c008142' - }, - to: '0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', - value: '1234567654321', - gasPrice: '324234234234', - gas: 500000, - chain: 'mainnet', - hardfork: 'petersburg' - }], - formattedArgs: ['0xf86b0a854b7dddc97a8307a12094dbdbdb2cbd23b783741e8d7fcf51e459b497e4a686011f71f76bb18026a016a5bc4e1808e60a5d370f6b335be158673bd95c457ee7925dc8ae1bec69647fa03831c5e0a966a0aad0c67d6ddea55288f76ae1d73dfe11c6174a8682c2ec165d'], - result: '0x12345678976543213456786543212345675432', - formattedResult: '0x12345678976543213456786543212345675432', - notification: { - method: 'eth_subscription', - params: { - subscription: '0x12345678976543213456786543212345675432', - result: { - blockNumber: '0x10' - } - } - }, - call: 'eth_sendRawTransaction' -},{ - error: true, // only for testing - args: [{ - from: 'XE81ETHXREGGAVOFYORK', // iban address - to: '0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', - value: '1234567654321' - }], - call: 'eth_'+ method -}]; - -testMethod.runTests('eth', method, tests); - - -// Test HTTPProvider with interval -describe(method, function () { - tests.forEach(function (test, index) { - it('promise test: ' + index, function (done) { - - // given - var w3; - var result; - var provider = new FakeHttpProvider(); - var web3 = new Web3(provider); - - // skipp wallet tests - if(test.useLocalWallet) { - return done(); - } - - - provider.injectResult(clone(test.result)); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, test.call); - assert.deepEqual(payload.params, test.formattedArgs || []); - }); - - if (test.call2) { - provider.injectResult(clone(test.result2)); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, test.call2); - assert.deepEqual(payload.params, test.formattedArgs2 || []); - }); - } - - provider.injectResult(null); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - }); - - - // if notification its sendTransaction, which needs two more results, subscription and receipt - if(test.notification) { - // inject receipt - provider.injectResult({ - "blockHash": "0x6fd9e2a26ab", - "blockNumber": "0x15df", - "transactionHash": "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "transactionIndex": "0x1", - "contractAddress": "0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "cumulativeGasUsed": "0x7f110", - "gasUsed": "0x7f110" - }); - } - - var args = clone(test.args); - - if(test.error) { - - assert.throws(function(){ web3.eth[method].apply(web3, args); }); - done(); - - - } else { - - - result = web3.eth[method].apply(web3, args); - - result.then(function(result){ - if(test.notification) { - // test receipt - assert.deepEqual(result, { - "blockHash": "0x6fd9e2a26ab", - "blockNumber": 5599, - "transactionHash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "transactionIndex": 1, - "contractAddress":"0x407D73d8a49eeb85D32Cf465507dd71d507100c1", // checksum address - "cumulativeGasUsed": 520464, - "gasUsed": 520464 - }); - } else { - assert.deepEqual(result, test.formattedResult); - } - - done(); - }); - } - - }); - - it('callback test: ' + index, function (done) { - - // given - var w3; - var provider = new FakeHttpProvider(); - var web3 = new Web3(provider); - - // add a wallet - if(test.useLocalWallet) { - return done(); - } - - provider.injectResult(clone(test.result)); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, test.call); - assert.deepEqual(payload.params, test.formattedArgs || []); - }); - - if (test.call2) { - provider.injectResult(clone(test.result2)); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, test.call2); - assert.deepEqual(payload.params, test.formattedArgs2 || []); - }); - } - - - provider.injectResult(null); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - }); - - - // if notification its sendTransaction, which needs two more results, subscription and receipt - if(test.notification) { - // inject receipt - provider.injectResult({ - "blockHash": "0x6fd9e2a26ab", - "blockNumber": "0x15df", - "transactionHash": "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "transactionIndex": "0x1", - "contractAddress": "0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "cumulativeGasUsed": "0x7f110", - "gasUsed": "0x7f110" - }); - } - - var args = clone(test.args); - - if(test.error) { - assert.throws(function(){ web3.eth[method].apply(web3, args); }); - - done(); - - } else { - // add callback - args.push(function (err, result) { - assert.deepEqual(result, test.formattedResult); - - done(); - }); - - web3.eth[method].apply(web3, args); - } - }); - }); -}); diff --git a/test/eth.sendTransaction.revert.js b/test/eth.sendTransaction.revert.js deleted file mode 100644 index 6a352219dc9..00000000000 --- a/test/eth.sendTransaction.revert.js +++ /dev/null @@ -1,122 +0,0 @@ -var assert = require('chai').assert; -var FakeHttpProvider = require('./helpers/FakeHttpProvider'); -var Web3 = require('../packages/web3'); - -describe('sendTransaction revert:', function () { - var provider; - var web3; - - beforeEach(function () { - provider = new FakeHttpProvider(); - web3 = new Web3(provider); - web3.eth.handleRevert = true; - }); - - it('Errors without revert reason string', function (done) { - provider.injectResult('0x1234567'); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual( - payload.params, - [{ - from: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - to: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - value: "0x11f71f76bb1", - gasPrice: "0x4b7dddc97a" - }] - ); - }); - - provider.injectResult(null); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - }); - - - // inject receipt - provider.injectResult({ - "blockHash": "0x6fd9e2a26ab", - "blockNumber": "0x15df", - "transactionHash": "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "transactionIndex": "0x1", - "contractAddress": "0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "cumulativeGasUsed": "0x7f110", - "gasUsed": "0x7f110", - "status": "0x0" - }); - - var options = { - from: '0xdbdbdB2cBD23b783741e8d7fcF51e459b497e4a6', - to: '0xdbdbdB2cBD23b783741e8d7fcF51e459b497e4a6', - value: '1234567654321', - gasPrice: '324234234234' - }; - - web3.eth.sendTransaction(options).catch(function (error) { - assert.equal(error.receipt.status, false); - assert.equal(error.reason, undefined); - assert.equal(error.signature, undefined); - - done(); - }); - }); - - it('Errors with revert reason string', function (done) { - provider.injectResult('0x1234567'); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual( - payload.params, - [{ - from: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - to: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - value: "0x11f71f76bb1", - gasPrice: "0x4b7dddc97a" - }] - ); - }); - - provider.injectResult(null); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - }); - - - // inject receipt - provider.injectResult({ - "blockHash": "0x6fd9e2a26ab", - "blockNumber": "0x15df", - "transactionHash": "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "transactionIndex": "0x1", - "contractAddress": "0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "cumulativeGasUsed": "0x7f110", - "gasUsed": "0x7f110", - "status": "0x0" - }); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - }); - - provider.injectResult('0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a4e6f7420656e6f7567682045746865722070726f76696465642e000000000000'); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - }); - - var options = { - from: '0xdbdbdB2cBD23b783741e8d7fcF51e459b497e4a6', - to: '0xdbdbdB2cBD23b783741e8d7fcF51e459b497e4a6', - value: '1234567654321', - gasPrice: '324234234234' - }; - - web3.eth.sendTransaction(options).catch(function (error) { - assert.equal(error.receipt.status, false); - assert.equal(error.reason, 'Not enough Ether provided.'); - assert.equal(error.signature, 'Error(String)'); - - done(); - }); - }); -}); diff --git a/test/eth.sign.js b/test/eth.sign.js deleted file mode 100644 index e87d59ec0e2..00000000000 --- a/test/eth.sign.js +++ /dev/null @@ -1,42 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); -var Eth = require('../packages/web3-eth'); - -var eth = new Eth(); - -var method = 'sign'; - - -var tests = [{ - args: ['Hello World!$*', '0xeb014f8c8b418db6b45774c326a0e64c78914dc0'], - formattedArgs: ['0xeb014f8c8b418db6b45774c326a0e64c78914dc0', '0x48656c6c6f20576f726c6421242a'], - result: '0x5763ab346198e3e6cc4d53996ccdeca0c941cb6cb70d671d97711c421d3bf7922c77ef244ad40e5262d1721bf9638fb06bab8ed3c43bfaa80d6da0be9bbd33dc1b', - formattedResult: '0x5763ab346198e3e6cc4d53996ccdeca0c941cb6cb70d671d97711c421d3bf7922c77ef244ad40e5262d1721bf9638fb06bab8ed3c43bfaa80d6da0be9bbd33dc1b', - call: 'eth_'+ method -},{ - useLocalWallet: function (web3) { - web3.eth.accounts.wallet.add('0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728'); - }, - args: ['Hello World!$*', '0xeb014f8c8b418db6b45774c326a0e64c78914dc0'], - formattedArgs: ['0xeb014f8c8b418db6b45774c326a0e64c78914dc0', '0x48656c6c6f20576f726c6421242a'], - result: '0x5763ab346198e3e6cc4d53996ccdeca0c941cb6cb70d671d97711c421d3bf7922c77ef244ad40e5262d1721bf9638fb06bab8ed3c43bfaa80d6da0be9bbd33dc1b', - formattedResult: '0x5763ab346198e3e6cc4d53996ccdeca0c941cb6cb70d671d97711c421d3bf7922c77ef244ad40e5262d1721bf9638fb06bab8ed3c43bfaa80d6da0be9bbd33dc1b', - call: null -},{ - args: ['Hello Wolrd!$*', '0xeb014f8c8b418db6b45774c326a0e64c78914dc0'], - formattedArgs: ['0xeb014f8c8b418db6b45774c326a0e64c78914dc0', '0x48656c6c6f20576f6c726421242a'], - result: '0x680b2c019eb81d5476012ca453a1ac2248dec3d89c2ed20d78177e2e0550b72d702d42c40943f6140b3d2e9fc9981c7fdd428ff93623020969e33b6b406e26851b', - formattedResult: '0x680b2c019eb81d5476012ca453a1ac2248dec3d89c2ed20d78177e2e0550b72d702d42c40943f6140b3d2e9fc9981c7fdd428ff93623020969e33b6b406e26851b', - call: 'eth_'+ method -},{ - useLocalWallet: function (web3) { - web3.eth.accounts.wallet.add('0xbe6383dad004f233317e46ddb46ad31b16064d14447a95cc1d8c8d4bc61c3728'); - }, - args: ['Hello Wolrd!$*', '0xeb014f8c8b418db6b45774c326a0e64c78914dc0'], - formattedArgs: ['0xeb014f8c8b418db6b45774c326a0e64c78914dc0', '0x48656c6c6f20576f6c726421242a'], - result: '0x680b2c019eb81d5476012ca453a1ac2248dec3d89c2ed20d78177e2e0550b72d702d42c40943f6140b3d2e9fc9981c7fdd428ff93623020969e33b6b406e26851b', - formattedResult: '0x680b2c019eb81d5476012ca453a1ac2248dec3d89c2ed20d78177e2e0550b72d702d42c40943f6140b3d2e9fc9981c7fdd428ff93623020969e33b6b406e26851b', - call: null -}]; - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.submitWork.js b/test/eth.submitWork.js deleted file mode 100644 index 352fa109e7f..00000000000 --- a/test/eth.submitWork.js +++ /dev/null @@ -1,15 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'submitWork'; - -var tests = [ -{ - args: ['0x567890abcdef5555', '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', '0xcdef1234567890abcdef1234567890abcdef0x1234567890abcf1234567890ab'], - formattedArgs: ['0x567890abcdef5555', '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', '0xcdef1234567890abcdef1234567890abcdef0x1234567890abcf1234567890ab'], - result: true, - formattedResult: true, - call: 'eth_'+ method -}]; - -testMethod.runTests('eth', method, tests); - diff --git a/test/eth.subscribe.ganache.js b/test/eth.subscribe.ganache.js deleted file mode 100644 index a2dce67f9d0..00000000000 --- a/test/eth.subscribe.ganache.js +++ /dev/null @@ -1,319 +0,0 @@ -const assert = require('assert'); -const ganache = require('ganache-cli'); -const pify = require('pify'); -const { getWeb3, waitSeconds } = require('./helpers/test.utils'); - -describe('subscription connect/reconnect', function () { - let server; - let web3; - let accounts; - let subscription; - const port = 8545; - const Web3 = getWeb3(); - - beforeEach(async function () { - server = ganache.server({port: port, blockTime: 1}); - await pify(server.listen)(port); - web3 = new Web3('ws://localhost:' + port); - accounts = await web3.eth.getAccounts(); - }); - - afterEach(async function () { - // Might already be closed.. - try { - await pify(server.close)(); - } catch (err) { - } - }); - - it('subscribes (baseline)', function (done) { - web3.eth - .subscribe('newBlockHeaders') - .once('data', function (result) { - assert(result.parentHash); - done(); - }); - }); - - it('subscribes with a callback', function (done) { - subscription = web3.eth - .subscribe('newBlockHeaders', function (err, result) { - assert(result.parentHash); - subscription.unsubscribe(); // Stop listening.. - done(); - }); - }); - - it('subscription emits a connected event', function (done) { - subscription = web3.eth - .subscribe('newBlockHeaders') - .on('connected', function (result) { - assert(result); // First subscription - subscription.unsubscribe(); // Stop listening.. - done(); - }); - }); - - it('clearSubscriptions', async function() { - web3.eth.subscribe('newBlockHeaders'); - await waitSeconds(1); // Sub need a little time to set up - - assert.equal(1, web3.eth._requestManager.subscriptions.size); - assert.ok(web3.eth.clearSubscriptions()) - assert.equal(0, web3.eth._requestManager.subscriptions.size); - }); - - it('resubscribes to an existing subscription', function (done) { - this.timeout(5000); - - let stage = 0; - - subscription = web3.eth.subscribe('newBlockHeaders'); - - subscription.on('data', function (result) { - if (stage === 0) { - subscription.resubscribe(); - stage = 1; - return; - } - - assert(result.parentHash); - subscription.unsubscribe(); // Stop listening.. - done(); - }); - }); - - it('resubscribes after being unsubscribed', function (done) { - this.timeout(5000); - - let stage = 0; - - subscription = web3.eth - .subscribe('newBlockHeaders') - .on('data', function (result) { - assert(result.parentHash); - subscription.unsubscribe(); - stage = 1; - }); - - // Resubscribe from outside - let interval = setInterval(async function () { - if (stage === 1) { - clearInterval(interval); - subscription.resubscribe(); - subscription.on('data', function (result) { - assert(result.parentHash); - subscription.unsubscribe(); // Stop listening.. - done(); - }); - } - }, 500); - }); - - // The ganache unit tests are erroring under similar conditions - - it('does not error when client closes after disconnect', async function(){ - this.timeout(7000); - - return new Promise(async function(resolve, reject) { - web3.eth - .subscribe('newBlockHeaders') - .once("error", function (err) { - reject(new Error('Should not hear an error ')); - }); - - // Let a couple blocks mine.. - await waitSeconds(2) - web3.currentProvider.disconnect(); - - // This delay seems to be required (on Travis). - await waitSeconds(1); - - await pify(server.close)(); - - await waitSeconds(1) - resolve(); - }); - }); - - // Verify subscription cleanup on setProvider - it('does not hear old subscriptions after setting a new provider', async function(){ - this.timeout(7000); - let counter = 0; - - return new Promise(async function(resolve, reject) { - web3.eth - .subscribe('newBlockHeaders') - .on("data", function (_) { - counter++; - }); - - // Let a couple blocks mine.. - await waitSeconds(2) - assert(counter >= 1); - - // Connect to a different client; - const newServer = ganache.server({port: 8777, blockTime: 1}); - await pify(newServer.listen)(8777); - - const finalCount = counter; - web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:8777')); - - await waitSeconds(2); - assert.equal(counter, finalCount); - await pify(newServer.close)(); - resolve(); - }); - }) - - it('allows a subscription which does not exist', function () { - web3.eth.subscribe('subscription-does-not-exists'); - }); - - it('errors when zero params subscrip. is called with the wrong arguments', function () { - try { - web3.eth.subscribe('newBlockHeaders', 5); - assert.fail(); - } catch (err) { - assert(err.message.includes('Invalid number of parameters for "newHeads"')); - assert(err.message.includes('Got 1 expected 0')); - } - }); - - it('errors when the provider is not set (callback)', function (done) { - web3 = new Web3(); - - web3.eth.subscribe('newBlockHeaders', function (err, result) { - assert(err.message.includes('No provider set')); - done(); - }); - }); - - it('errors when the provider is not set (.on("error"))', function (done) { - web3 = new Web3(); - - web3.eth - .subscribe('newBlockHeaders') - .once("error", function (err) { - assert(err.message.includes('No provider set')); - done(); - }); - }); - - it('errors when the provider does not support subscriptions (callback)', function (done) { - web3 = new Web3('http://localhost:' + port); - - web3.eth.subscribe('newBlockHeaders', function (err, result) { - assert(err.message.includes("provider doesn't support subscriptions: HttpProvider")); - done(); - }); - }); - - it('errors when the provider does not support subscriptions (.on("error"))', function (done) { - web3 = new Web3('http://localhost:' + port); - - web3.eth - .subscribe('newBlockHeaders') - .once("error", function (err) { - assert(err.message.includes("provider doesn't support subscriptions: HttpProvider")); - done(); - }); - }); - - it('errors when the `eth_subscribe` request got send, the reponse isnt returned from the node, and the connection does get closed in the mean time', async function () { - await pify(server.close)(); - - return new Promise(async function (resolve) { - web3.eth - .subscribe('newBlockHeaders') - .once('error', function (err) { - assert(err.message.includes('CONNECTION ERROR: Couldn\'t connect to node on WS')); - resolve(); - }); - }); - }); - - it('errors when the subscription got established (is running) and the connection does get closed', function () { - this.timeout(5000); - let counter = 0; - - return new Promise(async function (resolve) { - web3.eth - .subscribe('newBlockHeaders') - .once('data', async function () { - await pify(server.close)(); - }) - - web3.eth.currentProvider.on('close', function (err) { - counter++; - assert(err.reason.includes('Connection dropped by remote peer.')); - assert(err.code === 1006); - }); - - // Make sure error handler doesn't fire twice - await waitSeconds(2); - assert.equal(counter, 1); - web3.eth.currentProvider.removeAllListeners(); - resolve(); - }); - }); - - it('auto reconnects and keeps the subscription running', function () { - this.timeout(6000); - - web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:' + port, {reconnect: {auto: true}})); - - return new Promise(async function (resolve) { - // Stage 0: - let stage = 0; - - web3.eth - .subscribe('newBlockHeaders') - .on('data', function (result) { - assert(result.parentHash); - - // Exit point, flag set below - if (stage === 1) { - web3.currentProvider.disconnect(); - this.removeAllListeners(); - resolve(); - } - }); - - // Stage 1: Close & re-open server - await pify(server.close)(); - server = ganache.server({port: port, blockTime: 1}); - await pify(server.listen)(port); - stage = 1; - }); - }); - - it('auto reconnects, keeps the subscription running and triggers the `connected` event listener twice', function () { - this.timeout(6000); - - web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:' + port, {reconnect: {auto: true}})); - - return new Promise(async function (resolve) { - // Stage 0: - let stage = 0; - - web3.eth - .subscribe('newBlockHeaders') - .on('connected', function (result) { - assert(result); - - // Exit point, flag set below - if (stage === 1) { - web3.currentProvider.disconnect(); - this.removeAllListeners(); - resolve(); - } - }); - - // Stage 1: Close & re-open server - await pify(server.close)(); - server = ganache.server({port: port, blockTime: 1}); - await pify(server.listen)(port); - stage = 1; - }); - }); -}); diff --git a/test/eth.subscribe.js b/test/eth.subscribe.js deleted file mode 100644 index 4f2db3b1308..00000000000 --- a/test/eth.subscribe.js +++ /dev/null @@ -1,478 +0,0 @@ -var testSubscription = require('./helpers/test.subscription.js'); - - // NEW HEADS -var tests = [{ - protocol: 'eth', - args: ['newBlockHeaders'], - firstResult: '0x1234', - firstPayload: { - method: "eth_subscribe", - params: ['newHeads'] - }, - secondResult: true, - secondPayload: { - method: "eth_unsubscribe" - }, - dataCount: 1, - subscriptions: [{ - subscription: '0x1234', - result: { - difficulty: "0x15d9223a23aa", - totalDifficulty: "0x15d9223a23aa", - extraData: "0xd983010305844765746887676f312e342e328777696e646f7773", - gasLimit: "0x47e7c4", - gasUsed: "0x38658", - hash: "0x950427f707bf395fda0092d4f5dcbcf32d632106fb08e397124d0726082693e6", - logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - miner: "0xf8b483dba2c3b7176a3da549ad41a48bb3121069", - nonce: "0x084149998194cc5f", - number: "0x1348c9", - size: "0x0", - parentHash: "0x7736fab79e05dc611604d22470dadad26f56fe494421b5b333de816ce1f25701", - receiptRoot: "0x2fab35823ad00c7bb388595cb46652fe7886e00660a01e867824d3dceb1c8d36", - sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - stateRoot: "0xb3346685172db67de536d8765c43c31009d0eb3bd9c501c9be3229203f15f378", - timestamp: "0x56ffeff8", - transactionsRoot: "0x0167ffa60e3ebc0b080cdb95f7c0087dd6c0e61413140e39d94d3468d7c9689f" - } - }], - subscriptionResults: [{ - difficulty: "24022326322090", - totalDifficulty: "24022326322090", - extraData: "0xd983010305844765746887676f312e342e328777696e646f7773", - gasLimit: 4712388, - gasUsed: 231000, - hash: "0x950427f707bf395fda0092d4f5dcbcf32d632106fb08e397124d0726082693e6", - logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - miner: "0xf8b483DbA2c3B7176a3Da549ad41A48BB3121069", // checksum address - nonce: "0x084149998194cc5f", - number: 1263817, - parentHash: "0x7736fab79e05dc611604d22470dadad26f56fe494421b5b333de816ce1f25701", - receiptRoot: "0x2fab35823ad00c7bb388595cb46652fe7886e00660a01e867824d3dceb1c8d36", - sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - stateRoot: "0xb3346685172db67de536d8765c43c31009d0eb3bd9c501c9be3229203f15f378", - timestamp: 1459613688, - transactionsRoot: "0x0167ffa60e3ebc0b080cdb95f7c0087dd6c0e61413140e39d94d3468d7c9689f", - size: 0 - }] -}, - // PENDING TRANSACTIONS -{ - protocol: 'eth', - args: ['pendingTransactions'], - firstResult: '0x1234', - firstPayload: { - method: "eth_subscribe", - params: ['newPendingTransactions'] - }, - secondResult: true, - secondPayload: { - method: "eth_unsubscribe" - }, - dataCount: 1, - subscriptions: [{ - subscription: '0x1234', - result: "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b" - }], - subscriptionResults: ["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b"] -}, - // LOGS -{ - protocol: 'eth', - args: ['logs',{}], - firstResult: '0x4444', - firstPayload: { - method: "eth_subscribe", - params: ['logs',{topics: []}] - }, - secondResult: true, - secondPayload: { - method: "eth_unsubscribe" - }, - subscriptions: [{ - subscription: '0x4444', - result: { - logIndex: '0x23', - transactionHash: '0x2345fdfdf', - blockHash: '0x43534ffddd', - transactionIndex: '0x1', - blockNumber: '0x3222', - address: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - }], - subscriptionResults: [{ - id: "log_d43624aa", - blockHash: "0x43534ffddd", - blockNumber: 12834, - logIndex: 35, - transactionHash: '0x2345fdfdf', - transactionIndex: 1, - address: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', // checksum address - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - }] -}, -{ - protocol: 'eth', - args: ['logs',{address: ['0xDdf4d0A3c12e86b4B5f39B213f7E19d048276dAE','0xAaf4D0a3C12e86B4B5f39b213f7E19d048276daE']}], - firstResult: '0x4444', - firstPayload: { - method: "eth_subscribe", - params: ['logs',{address: ['0xddf4d0a3c12e86b4b5f39b213f7e19d048276dae','0xaaf4d0a3c12e86b4b5f39b213f7e19d048276dae'], topics: []}] - }, - secondResult: true, - secondPayload: { - method: "eth_unsubscribe" - }, - subscriptions: [{ - subscription: '0x4444', - result: { - logIndex: '0x23', - transactionHash: '0x2345fdfdf', - blockHash: '0x43534ffddd', - transactionIndex: '0x1', - blockNumber: '0x3222', - address: '0xddf4d0a3c12e86b4b5f39b213f7e19d048276dae', - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - }], - subscriptionResults: [{ - id: "log_d43624aa", - blockHash: "0x43534ffddd", - blockNumber: 12834, - logIndex: 35, - transactionHash: '0x2345fdfdf', - transactionIndex: 1, - address: '0xDdf4d0A3c12e86b4B5f39B213f7E19d048276dAE', // checksum address - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - }] -}, - { - protocol: 'eth', - args: ['logs',{address: ['0xDdf4d0A3c12e86b4B5f39B213f7E19d048276dAE','0xAaf4D0a3C12e86B4B5f39b213f7E19d048276daE']}], - firstResult: '0x4444', - firstPayload: { - method: "eth_subscribe", - params: ['logs',{address: ['0xddf4d0a3c12e86b4b5f39b213f7e19d048276dae','0xaaf4d0a3c12e86b4b5f39b213f7e19d048276dae'], topics: []}] - }, - secondResult: true, - secondPayload: { - method: "eth_unsubscribe" - }, - subscriptions: [{ - subscription: '0x4444', - result: [{ - logIndex: '0x23', - transactionHash: '0x2345fdfdf', - blockHash: '0x43534ffddd', - transactionIndex: '0x1', - blockNumber: '0x3222', - address: '0xddf4d0a3c12e86b4b5f39b213f7e19d048276dae', - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - },{ - logIndex: '0x23', - transactionHash: '0x2345fdfdd', - blockHash: '0x43534ffddd', - transactionIndex: '0x1', - blockNumber: '0x3222', - address: '0xddf4d0a3c12e86b4b5f39b213f7e19d048276dae', - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - }] - }], - subscriptionResults: [{ - id: "log_d43624aa", - blockHash: "0x43534ffddd", - blockNumber: 12834, - logIndex: 35, - transactionHash: '0x2345fdfdf', - transactionIndex: 1, - address: '0xDdf4d0A3c12e86b4B5f39B213f7E19d048276dAE', // checksum address - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - },{ - id: "log_b20551f9", - blockHash: "0x43534ffddd", - blockNumber: 12834, - logIndex: 35, - transactionHash: '0x2345fdfdd', - transactionIndex: 1, - address: '0xDdf4d0A3c12e86b4B5f39B213f7E19d048276dAE', // checksum address - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - }] - }, -{ - protocol: 'eth', - args: ['logs',{address: ['0xDdf4d0A3c12e86b4B5f39B213f7E19d048276dAE','0xAaf4D0a3C12e86B4B5f39b213f7E19d048276daE']}], - firstResult: '0x4444', - firstPayload: { - method: "eth_subscribe", - params: ['logs',{address: ['0xddf4d0a3c12e86b4b5f39b213f7e19d048276dae','0xaaf4d0a3c12e86b4b5f39b213f7e19d048276dae'], topics: []}] - }, - secondResult: true, - secondPayload: { - method: "eth_unsubscribe" - }, - subscriptions: [{ - subscription: '0x4444', - result: [{ - logIndex: '0x23', - transactionHash: '0x2345fdfdf', - blockHash: '0x43534ffddd', - transactionIndex: '0x1', - blockNumber: '0x3222', - address: '0xddf4d0a3c12e86b4b5f39b213f7e19d048276dae', - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - },{ - logIndex: '0x23', - transactionHash: '0x2345fdfdd', - blockHash: '0x43534ffddd', - transactionIndex: '0x1', - blockNumber: '0x3222', - address: '0xddf4d0a3c12e86b4b5f39b213f7e19d048276dae', - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - }] - }], - subscriptionResults: [{ - id: "log_d43624aa", - blockHash: "0x43534ffddd", - blockNumber: 12834, - logIndex: 35, - transactionHash: '0x2345fdfdf', - transactionIndex: 1, - address: '0xDdf4d0A3c12e86b4B5f39B213f7E19d048276dAE', // checksum address - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - },{ - id: "log_b20551f9", - blockHash: "0x43534ffddd", - blockNumber: 12834, - logIndex: 35, - transactionHash: '0x2345fdfdd', - transactionIndex: 1, - address: '0xDdf4d0A3c12e86b4B5f39B213f7E19d048276dAE', // checksum address - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - }] -}, -{ - protocol: 'eth', - args: ['logs',{address: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', topics: ['0x23']}], // checksum address - firstResult: '0x555', - firstPayload: { - method: "eth_subscribe", - params: ['logs',{address: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', topics: ['0x23']}] - }, - secondResult: true, - secondPayload: { - method: "eth_unsubscribe" - }, - dataCount: 1, - subscriptions: [{ - subscription: '0x555', - result: { - logIndex: '0x23', - transactionHash: '0x2345fdfdf', - blockHash: '0x43534ffddd', - transactionIndex: '0x1', - blockNumber: '0x3222', - address: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - }], - subscriptionResults: [{ - id: "log_d43624aa", - blockHash: "0x43534ffddd", - blockNumber: 12834, - logIndex: 35, - transactionHash: '0x2345fdfdf', - transactionIndex: 1, - address: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', // checksum address - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - }] -}, -{ - protocol: 'eth', - args: ['logs',{address: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', topics: ['0x23']}], - firstResult: '0x5556666', - firstPayload: { - method: "eth_subscribe", - params: ['logs',{address: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', topics: ['0x23']}] - }, - secondResult: true, - secondPayload: { - method: "eth_unsubscribe" - }, - dataCount: 1, - changedCount: 1, - subscriptions: [{ - subscription: '0x5556666', - result: { - logIndex: '0x23', - transactionHash: '0x2345fdfdf', - blockHash: '0x43534ffddd', - transactionIndex: '0x1', - blockNumber: '0x3222', - address: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - },{ - subscription: '0x5556666', - result: { - logIndex: '0x23', - transactionHash: '0x2345fdfdf', - blockHash: '0x43534ffddd', - removed: true, - transactionIndex: '0x1', - blockNumber: '0x3222', - address: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - } - }], - subscriptionResults: [{ - id: "log_d43624aa", - blockHash: "0x43534ffddd", - blockNumber: 12834, - logIndex: 35, - transactionHash: '0x2345fdfdf', - transactionIndex: 1, - address: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', // checksum address - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - },{ - id: "log_d43624aa", - blockHash: "0x43534ffddd", - blockNumber: 12834, - removed: true, - logIndex: 35, - transactionHash: '0x2345fdfdf', - transactionIndex: 1, - address: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', // checksum address - topics: [ - '0x0000000000000000000000000000000000000000000000000000000005656565' - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000008' - }] -}, - // SYNCING -{ - protocol: 'eth', - args: ['syncing'], - firstResult: '0x666666', - firstPayload: { - method: "eth_subscribe", - params: ['syncing'] - }, - secondResult: true, - secondPayload: { - method: "eth_unsubscribe" - }, - dataCount: 2, - changedCount: 2, - subscriptions: [{ - subscription: '0x666666', - result: { - startingBlock: '0xbff23', - currentBlock: '0xbff11', - highestBlock: '0xadf23', - knownStates: '0xaaa23', - pulledStates: '0x23' - } - },{ - subscription: '0x666666', - result: { - startingBlock: '0xbff23', - currentBlock: '0xbff11', - highestBlock: '0xbff11', - knownStates: '0xaaa23', - pulledStates: '0x23' - } - } - ], - subscriptionResults: [ - true, - { - startingBlock: 786211, - currentBlock: 786193, - highestBlock: 712483, - knownStates: 698915, - pulledStates: 35 - }, - { - startingBlock: 786211, - currentBlock: 786193, - highestBlock: 786193, - knownStates: 698915, - pulledStates: 35 - }, - false - ] -}]; - - -testSubscription.runTests('eth', tests); - diff --git a/test/eth.transactionBlockTimeout.js b/test/eth.transactionBlockTimeout.js deleted file mode 100644 index 901930f789e..00000000000 --- a/test/eth.transactionBlockTimeout.js +++ /dev/null @@ -1,25 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Eth = require('../packages/web3-eth'); - -var eth = new Eth(); - -var setValue = 123; - -describe('web3.eth', function () { - describe('transactionBlockTimeout', function () { - it('should check if transactionBlockTimeout is set to proper value', function () { - assert.equal(eth.transactionBlockTimeout, 50); - assert.equal(eth.Contract.transactionBlockTimeout, 50); - assert.equal(eth.getCode.method.transactionBlockTimeout, 50); - }); - it('should set transactionBlockTimeout for all sub packages is set to proper value, if Eth package is changed', function () { - eth.transactionBlockTimeout = setValue; - - assert.equal(eth.transactionBlockTimeout, setValue); - assert.equal(eth.Contract.transactionBlockTimeout, setValue); - assert.equal(eth.getCode.method.transactionBlockTimeout, setValue); - }); - }); -}); - diff --git a/test/eth.transactionConfirmationBlocks.js b/test/eth.transactionConfirmationBlocks.js deleted file mode 100644 index abfb7065423..00000000000 --- a/test/eth.transactionConfirmationBlocks.js +++ /dev/null @@ -1,25 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Eth = require('../packages/web3-eth'); - -var eth = new Eth(); - -var setValue = 123; - -describe('web3.eth', function () { - describe('transactionConfirmationBlocks', function () { - it('should check if transactionConfirmationBlocks is set to proper value', function () { - assert.equal(eth.transactionConfirmationBlocks, 24); - assert.equal(eth.Contract.transactionConfirmationBlocks, 24); - assert.equal(eth.getCode.method.transactionConfirmationBlocks, 24); - }); - it('should set transactionConfirmationBlocks for all sub packages is set to proper value, if Eth package is changed', function () { - eth.transactionConfirmationBlocks = setValue; - - assert.equal(eth.transactionConfirmationBlocks, setValue); - assert.equal(eth.Contract.transactionConfirmationBlocks, setValue); - assert.equal(eth.getCode.method.transactionConfirmationBlocks, setValue); - }); - }); -}); - diff --git a/test/eth.transactionPollingTimeout.js b/test/eth.transactionPollingTimeout.js deleted file mode 100644 index bb8ab5569f3..00000000000 --- a/test/eth.transactionPollingTimeout.js +++ /dev/null @@ -1,25 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Eth = require('../packages/web3-eth'); - -var eth = new Eth(); - -var setValue = 123; - -describe('web3.eth', function () { - describe('transactionPollingTimeout', function () { - it('should check if transactionPollingTimeout is set to proper value', function () { - assert.equal(eth.transactionPollingTimeout, 750); - assert.equal(eth.Contract.transactionPollingTimeout, 750); - assert.equal(eth.getCode.method.transactionPollingTimeout, 750); - }); - it('should set transactionPollingTimeout for all sub packages is set to proper value, if Eth package is changed', function () { - eth.transactionPollingTimeout = setValue; - - assert.equal(eth.transactionPollingTimeout, setValue); - assert.equal(eth.Contract.transactionPollingTimeout, setValue); - assert.equal(eth.getCode.method.transactionPollingTimeout, setValue); - }); - }); -}); - diff --git a/test/eth_methods.js b/test/eth_methods.js deleted file mode 100644 index 839984f2f5b..00000000000 --- a/test/eth_methods.js +++ /dev/null @@ -1,52 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var u = require('./helpers/test.utils.js'); - -var Eth = require('../packages/web3-eth'); -var eth = new Eth(); - -describe('eth', function() { - describe('methods', function() { - u.methodExists(eth, 'getBalance'); - u.methodExists(eth, 'getStorageAt'); - u.methodExists(eth, 'getTransactionCount'); - u.methodExists(eth, 'getCode'); - u.methodExists(eth, 'isSyncing'); - u.methodExists(eth, 'sendTransaction'); - u.methodExists(eth, 'call'); - u.methodExists(eth, 'getBlock'); - u.methodExists(eth, 'getTransaction'); - u.methodExists(eth, 'getUncle'); - u.methodExists(eth, 'getBlockTransactionCount'); - u.methodExists(eth, 'getBlockUncleCount'); - u.methodExists(eth, 'subscribe'); - u.methodExists(eth, 'Contract'); - u.methodExists(eth, 'Iban'); - u.methodExists(eth, 'getChainId') - - u.methodExists(eth, 'isMining'); - u.methodExists(eth, 'getCoinbase'); - u.methodExists(eth, 'getGasPrice'); - u.methodExists(eth, 'getHashrate'); - u.methodExists(eth, 'getAccounts'); - u.methodExists(eth, 'getBlockNumber'); - - u.methodExists(eth, 'getProtocolVersion'); - - u.methodExists(eth, 'setProvider'); - u.propertyExists(eth, 'givenProvider'); - u.propertyExists(eth, 'defaultBlock'); - u.propertyExists(eth, 'defaultAccount'); - - u.propertyExists(eth, 'net'); - u.methodExists(eth.net, 'getId'); - u.methodExists(eth.net, 'isListening'); - u.methodExists(eth.net, 'getPeerCount'); - - u.propertyExists(eth, 'personal'); - u.methodExists(eth.personal, 'sendTransaction'); - u.methodExists(eth.personal, 'newAccount'); - u.methodExists(eth.personal, 'unlockAccount'); - }); -}); - diff --git a/test/event.decode.js b/test/event.decode.js deleted file mode 100644 index 619b4ed6d64..00000000000 --- a/test/event.decode.js +++ /dev/null @@ -1,227 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Eth = require('../packages/web3-eth/'); - - -var name = 'event1'; -var address = '0xffddb67890123456789012345678901234567890'; -var resultAddress = '0xffdDb67890123456789012345678901234567890'; - -var tests = [{ - abi: { - name: name, - type: 'event', - inputs: [] - }, - data: { - logIndex: '0x1', - transactionIndex: '0x10', - transactionHash: '0x1234567890', - address: address, - blockHash: '0x1234567890', - blockNumber: '0x1' - }, - expected: { - event: name, - signature: null, - returnValues: {}, - logIndex: 1, - transactionIndex: 16, - transactionHash: '0x1234567890', - address: resultAddress, - blockHash: '0x1234567890', - blockNumber: 1, - id: "log_c71f2e84", - raw: { - topics: [], - data: '' - } - } -}, { - abi: { - name: name, - inputs: [{ - name: 'a', - type: 'int', - indexed: false - }] - }, - data: { - logIndex: '0x1', - transactionIndex: '0x10', - transactionHash: '0x1234567890', - address: address, - blockHash: '0x1234567890', - blockNumber: '0x1', - data: '0x0000000000000000000000000000000000000000000000000000000000000001' - }, - expected: { - event: name, - signature: null, - returnValues: { - 0: '1', - a: '1' - }, - logIndex: 1, - transactionIndex: 16, - transactionHash: '0x1234567890', - address: resultAddress, - blockHash: '0x1234567890', - blockNumber: 1, - id: "log_c71f2e84", - raw: { - data: "0x0000000000000000000000000000000000000000000000000000000000000001", - topics: [] - } - } -}, { - abi: { - name: name, - inputs: [{ - name: 'a', - type: 'int', - indexed: false - }, { - name: 'b', - type: 'int', - indexed: true - }, { - name: 'c', - type: 'int', - indexed: false - }, { - name: 'd', - type: 'int', - indexed: true - }] - }, - data: { - logIndex: '0x1', - transactionIndex: '0x10', - transactionHash: '0x1234567890', - address: address, - blockHash: '0x1234567890', - blockNumber: '0x1', - data: '0x' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000004', - topics: [ - address, - '0x000000000000000000000000000000000000000000000000000000000000000a', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] - }, - expected: { - event: name, - signature: address, - returnValues: { - 0: '1', - 1: '10', - 2: '4', - 3: '16', - a: '1', - b: '10', - c: '4', - d: '16' - }, - logIndex: 1, - transactionIndex: 16, - transactionHash: '0x1234567890', - address: resultAddress, - blockHash: '0x1234567890', - blockNumber: 1, - id: "log_c71f2e84", - raw: { - data: '0x' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000004', - topics: [ - address, - '0x000000000000000000000000000000000000000000000000000000000000000a', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] - } - } -}, { - abi: { - name: name, - anonymous: true, - inputs: [{ - name: 'a', - type: 'int', - indexed: false - }, { - name: 'b', - type: 'int', - indexed: true - }, { - name: 'c', - type: 'int', - indexed: false - }, { - name: 'd', - type: 'int', - indexed: true - }] - }, - data: { - logIndex: '0x1', - transactionIndex: '0x10', - transactionHash: '0x1234567890', - address: resultAddress, - blockHash: '0x1234567890', - blockNumber: '0x1', - data: '0x' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000004', - topics: [ - '0x000000000000000000000000000000000000000000000000000000000000000a', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] - }, - expected: { - event: name, - signature: null, - returnValues: { - 0: '1', - 1: '10', - 2: '4', - 3: '16', - a: '1', - b: '10', - c: '4', - d: '16' - }, - logIndex: 1, - transactionIndex: 16, - transactionHash: '0x1234567890', - address: resultAddress, - blockHash: '0x1234567890', - blockNumber: 1, - id: "log_c71f2e84", - raw: { - data: '0x' + - '0000000000000000000000000000000000000000000000000000000000000001' + - '0000000000000000000000000000000000000000000000000000000000000004', - topics: [ - '0x000000000000000000000000000000000000000000000000000000000000000a', - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] - } - } -}]; - -describe('lib/web3/event', function () { - describe('decode', function () { - tests.forEach(function (test, index) { - it('test no: ' + index, function () { - var eth = new Eth(); - var contract = new eth.Contract([test.abi], address); - - var result = contract._decodeEventABI.call(test.abi, test.data); - assert.deepEqual(result, test.expected); - }); - }); - }); -}); - diff --git a/test/event.encode.js b/test/event.encode.js deleted file mode 100644 index b05158750d1..00000000000 --- a/test/event.encode.js +++ /dev/null @@ -1,248 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Eth = require('../packages/web3-eth'); - - -var address = '0x1234567890123456789012345678901234567890'; -var signature = '0xffff'; - -var tests = [{ - abi: { - name: 'event1', - inputs: [], - signature: signature - }, - options: {}, - expected: { - address: address, - topics: [ - signature - ] - } -}, { - abi: { - name: 'event1', - inputs: [{ - type: 'int', - name: 'a', - indexed: true - }], - signature: signature - }, - options: { - filter: { - a: 16 - }, - }, - expected: { - address: address, - topics: [ - signature, - '0x0000000000000000000000000000000000000000000000000000000000000010' - ] - } -},{ - abi: { - name: 'event1', - inputs: [{ - type: 'int', - name: 'a', - indexed: true - }, { - type: 'int', - name: 'b', - indexed: true - }, { - type: 'int', - name: 'c', - indexed: false - }, { - type: 'int', - name: 'd', - indexed: true - }], - signature: signature - }, - options: { - filter: { - b: 4 - } - }, - expected: { - address: address, - topics: [ - signature, // signature - null, // a - '0x0000000000000000000000000000000000000000000000000000000000000004', // b - null // d - ] - } -}, { - abi: { - name: 'event1', - inputs: [{ - type: 'int', - name: 'a', - indexed: true - }, { - type: 'int', - name: 'b', - indexed: true - }], - signature: signature - }, - options: { - filter: { - a: [16, 1], - b: 2 - } - }, - expected: { - address: address, - topics: [ - signature, - ['0x0000000000000000000000000000000000000000000000000000000000000010', '0x0000000000000000000000000000000000000000000000000000000000000001'], - '0x0000000000000000000000000000000000000000000000000000000000000002' - ] - } -}, { - abi: { - name: 'event1', - inputs: [{ - type: 'int', - name: 'a', - indexed: true - }], - signature: signature - }, - options: { - filter: { - a: null - } - }, - expected: { - address: address, - topics: [ - signature, - null - ] - } -}, { - abi: { - name: 'event1', - inputs: [{ - type: 'int', - name: 'a', - indexed: true - }], - signature: signature - }, - options: { - filter: { - a: 1 - }, - fromBlock: 'latest', - toBlock: 'pending' - }, - expected: { - address: address, - fromBlock: 'latest', - toBlock: 'pending', - topics: [ - signature, - '0x0000000000000000000000000000000000000000000000000000000000000001' - ] - } -}, -{ - abi: { - name: 'event1', - inputs: [{ - type: 'int', - name: 'a', - indexed: true - }], - signature: signature - }, - options: { - filter: { - a: 1 - }, - fromBlock: 4, - toBlock: 10 - }, - expected: { - address: address, - fromBlock: '0x4', - toBlock: '0xa', - topics: [ - signature, - '0x0000000000000000000000000000000000000000000000000000000000000001' - ] - } -}, { - abi: { - name: 'event1', - inputs: [{ - type: 'int', - name: 'a', - indexed: true - }], - anonymous: true, - signature: signature - }, - options: { - filter: { - a: 1 - } - }, - expected: { - address: address, - topics: [ - '0x0000000000000000000000000000000000000000000000000000000000000001' - ] - } -}, { - abi: { - name: 'event1', - inputs: [{ - type: 'int', - name: 'a', - indexed: true - }, { - type: 'int', - name: 'b', - indexed: true - }], - anonymous: true, - signature: signature - }, - options: { - filter: { - b: 1 - } - }, - expected: { - address: address, - topics: [ - null, - '0x0000000000000000000000000000000000000000000000000000000000000001' - ] - } -}]; - -describe('lib/web3/event', function () { - describe('encode', function () { - tests.forEach(function (test, index) { - it('test no: ' + index, function () { - var eth = new Eth(); - var contract = new eth.Contract([test.abi], address); - - - var result = contract._encodeEventABI(test.abi, test.options); - assert.deepEqual(result, test.expected); - }); - }); - }); -}); - diff --git a/test/extend.js b/test/extend.js deleted file mode 100644 index af992c1e11b..00000000000 --- a/test/extend.js +++ /dev/null @@ -1,93 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var FakeHttpProvider = require('./helpers/FakeIpcProvider'); -var Web3 = require('../packages/web3'); -var web3 = new Web3(); - - -var tests = [{ - methods: [{ - name: 'getGasPrice2', - call: 'eth_gasPrice', - outputFormatter: web3.extend.formatters.outputBigNumberFormatter - },{ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [web3.utils.toChecksumAddress, web3.extend.formatters.inputDefaultBlockNumberFormatter], - outputFormatter: web3.extend.formatters.outputBigNumberFormatter - }] -},{ - property: 'admin', - methods: [{ - name: 'getGasPrice3', - call: 'eth_gasPrice', - outputFormatter: web3.extend.formatters.outputBigNumberFormatter - },{ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [web3.utils.toChecksumAddress, web3.extend.formatters.inputDefaultBlockNumberFormatter], - outputFormatter: web3.extend.formatters.outputBigNumberFormatter - }] -},{ - error: true, - methods: [{ - name: 'getGasPrice4', - outputFormatter: web3.extend.formatters.outputBigNumberFormatter - }] -},{ - error: true, - methods: [{ - call: 'eth_gasPrice', - outputFormatter: web3.extend.formatters.outputBigNumberFormatter - }] -}]; - -describe('web3', function () { - describe('extend', function () { - tests.forEach(function (test, index) { - it('test no: ' + index, function (done) { - var count = 1; - - var provider = new FakeHttpProvider(); - web3.setProvider(provider); - - if(test.error) { - assert.throws(web3.extend.bind(web3,test)); - - return done(); - - } else { - web3.extend(test); - } - - if(test.methods) { - test.methods.forEach(function(property){ - - - provider.injectResult('0x1234'); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, property.call); - - if(test.methods.length === count) - done(); - else - count++; - }); - - if(test.property) { - assert.isFunction(web3[test.property][property.name]); - web3[test.property][property.name](); - } else { - assert.isFunction(web3[property.name]); - web3[property.name](); - } - }); - } - }); - }); - }); -}); - diff --git a/test/formatters.inputAddressFormatter.js b/test/formatters.inputAddressFormatter.js deleted file mode 100644 index 1c47f91f014..00000000000 --- a/test/formatters.inputAddressFormatter.js +++ /dev/null @@ -1,51 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var formatters = require('../packages/web3-core-helpers/src/formatters.js'); - -var tests = [ - { input: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', result: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8' }, - { input: 'XE75JRZCTTLBSYEQBGAS7GID8DKR7QY0QA3', result: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b'}, - { input: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', result: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8'}, - { input: '00c5496aee77c1ba1f0854206a26dda82a81d6d8', result: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8'}, - { input: '11f4d0a3c12e86b4b5f39b213f7e19d048276dae', result: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae' }, - { input: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', result: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae' }, - { input: '0x11F4D0A3C12E86B4B5F39B213F7E19D048276DAE', result: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae' }, - { input: '0X11F4D0A3C12E86B4B5F39B213F7E19D048276DAE', result: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae' }, - { input: '11F4D0A3C12E86B4B5F39B213F7E19D048276DAE', result: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae' }, - { input: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', result: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae' } -]; - -var errorTests = [ - '0x0c5496aee77c1ba1f0854206a26dda82a81d6d8', - '0x0c5496aee77c1ba1f0854206a26dda82a81d6d8', - '00c5496aee77c1ba1f0854206a26dda82a81d6d', - 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZE', - '0x', - '0x11f4d0a3c12e86B4b5F39b213f7E19D048276DAe', - {}, - [], - '' -]; - -describe('formatters', function () { - describe('inputAddressFormatter correct addresses', function () { - tests.forEach(function(test){ - it('should return the correct value', function () { - assert.deepEqual(formatters.inputAddressFormatter(test.input), test.result); - }); - }); - }); -}); - - -describe('formatters', function () { - describe('inputAddressFormatter wrong addresses', function () { - errorTests.forEach(function(test){ - it('should throw an exception', function () { - assert.throws(function () { - formatters.inputAddressFormatter(test); - }, null, null, 'Should throw:'+ test); - }); - }); - }); -}); diff --git a/test/formatters.inputDefaultBlockFormatter.js b/test/formatters.inputDefaultBlockFormatter.js deleted file mode 100644 index 41714929204..00000000000 --- a/test/formatters.inputDefaultBlockFormatter.js +++ /dev/null @@ -1,25 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var formatters = require('../packages/web3-core-helpers/src/formatters.js'); - -var tests = [ - { value: 'genesis', expected: '0x0' }, - { value: 'latest', expected: 'latest' }, - { value: 'pending', expected: 'pending' }, - { value: 'earliest', expected: 'earliest' }, - { value: 1, expected: '0x1' }, - { value: '0x1', expected: '0x1' } -]; - -describe('lib/web3/formatters', function () { - describe('inputDefaultBlockNumberFormatter', function () { - tests.forEach(function (test) { - it('should turn ' + test.value + ' to ' + test.expected, function () { - assert.strictEqual(formatters.inputDefaultBlockNumberFormatter(test.value), test.expected); - }); - }); - }); -}); - - - diff --git a/test/formatters.inputLogFormatter.js b/test/formatters.inputLogFormatter.js deleted file mode 100644 index eee62490e39..00000000000 --- a/test/formatters.inputLogFormatter.js +++ /dev/null @@ -1,108 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var formatters = require('../packages/web3-core-helpers/src/formatters.js'); - -describe('InputLogFormatterTest', function() { - - it('call inputLogFormatter with a valid log', function() { - var log = { - fromBlock: 'earliest', - toBlock: 'latest', - topics: ['0x0'], - address: '0x03C9A938fF7f54090d0d99e2c6f80380510Ea078' - }; - - assert.deepEqual(formatters.inputLogFormatter(log), { - fromBlock: 'earliest', - toBlock: 'latest', - topics: ['0x0'], - address: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078' - }); - }); - - it('call inputLogFormatter with numerical from/to blocks', function() { - var log = { - fromBlock: 1, - toBlock: 2, - topics: ['0x0'], - address: '0x03C9A938fF7f54090d0d99e2c6f80380510Ea078' - }; - - assert.deepEqual(formatters.inputLogFormatter(log), { - fromBlock: '0x1', - toBlock: '0x2', - topics: ['0x0'], - address: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078' - }); - }); - - it('call inputLogFormatter with zero valued from/to blocks', function() { - var log = { - fromBlock: 0, - toBlock: 0, - topics: ['0x0'], - address: '0x03C9A938fF7f54090d0d99e2c6f80380510Ea078' - }; - - assert.deepEqual(formatters.inputLogFormatter(log), { - fromBlock: '0x0', - toBlock: '0x0', - topics: ['0x0'], - address: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078' - }); - }); - - it('call inputLogFormatter with a array of addresses in the log', function() { - var log = { - fromBlock: 'earliest', - toBlock: 'latest', - topics: ['0x0'], - address: [ - '0x03C9A938fF7f54090d0d99e2c6f80380510Ea078', - '0x03C9A938fF7f54090d0d99e2c6f80380510Ea078' - ] - }; - - assert.deepEqual(formatters.inputLogFormatter(log), { - fromBlock: 'earliest', - toBlock: 'latest', - topics: ['0x0'], - address: [ - '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - '0x03c9a938ff7f54090d0d99e2c6f80380510ea078' - ] - }); - }); - - it('call inputLogFormatter with an topic item of null', function() { - var log = { - fromBlock: 'earliest', - toBlock: 'latest', - topics: [null], - address: '0x03C9A938fF7f54090d0d99e2c6f80380510Ea078' - }; - - assert.deepEqual(formatters.inputLogFormatter(log), { - fromBlock: 'earliest', - toBlock: 'latest', - topics: [null], - address: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078' - }); - }); - - it('call inputLogFormatter with an topic item that does not start with "0x"', function() { - var log = { - fromBlock: 'earliest', - toBlock: 'latest', - topics: ['00'], - address: '0x03C9A938fF7f54090d0d99e2c6f80380510Ea078' - }; - - assert.deepEqual(formatters.inputLogFormatter(log), { - fromBlock: 'earliest', - toBlock: 'latest', - topics: ['0x3030'], - address: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078' - }); - }); -}); diff --git a/test/formatters.inputPostFormatter.js b/test/formatters.inputPostFormatter.js deleted file mode 100644 index 5497eb437f8..00000000000 --- a/test/formatters.inputPostFormatter.js +++ /dev/null @@ -1,31 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var formatters = require('../packages/web3-core-helpers/src/formatters.js'); - -describe('formatters', function () { - describe('inputPostFormatter', function () { - it('should return the correct value', function () { - - // input as strings and numbers - assert.deepEqual(formatters.inputPostFormatter({ - from: '0x00000', - to: '0x00000', - payload: '0x7b2274657374223a2274657374227d',//{test: 'test'}, - ttl: 200, - priority: 1000, - topics: ['hello','mytopics'], - "workToProve": 1 - }), { - from: '0x00000', - to: '0x00000', - payload: '0x7b2274657374223a2274657374227d', - ttl: '0xc8', - priority: '0x3e8', - topics: ['0x68656c6c6f','0x6d79746f70696373'], - workToProve: '0x1' - }); - - }); - }); -}); - diff --git a/test/formatters.inputTransactionFormatter.js b/test/formatters.inputTransactionFormatter.js deleted file mode 100644 index 47c767e7c06..00000000000 --- a/test/formatters.inputTransactionFormatter.js +++ /dev/null @@ -1,111 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var formatters = require('../packages/web3-core-helpers/src/formatters.js'); - -var tests = [{ - input: { - data: '0x34234bf23bf4234', - value: '100', - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', // checksum address - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - nonce: 1000, - gas: 1000, - gasPrice: '1000' - }, - result: { - data: '0x34234bf23bf4234', - value: '0x64', - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - nonce: '0x3e8', - gas: '0x3e8', - gasPrice: '0x3e8' - } -},{ - input: { - data: '0x34234bf23bf4234', - value: '100', - from: '00c5496aee77c1ba1f0854206a26dda82a81d6d8', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe' // checksum address - }, - result: { - data: '0x34234bf23bf4234', - value: '0x64', - from: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae' - } -},{ - input: { - data: '0x34234bf23bf4234', - value: '100', - from: '00c5496aee77c1ba1f0854206a26dda82a81d6d8', - to: '00c5496aee77c1ba1f0854206a26dda82a81d6d8', - gas: '1000', - gasPrice: '1000' - }, - result: { - data: '0x34234bf23bf4234', - value: '0x64', - from: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', - to: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', - gas: '0x3e8', - gasPrice: '0x3e8' - }, -}, { - input: { - data: '0x34234bf23bf4234', - value: '100', - from: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', - to: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', - gas: '1000', - gasPrice: '1000' - }, - result: { - data: '0x34234bf23bf4234', - value: '0x64', - from: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', - to: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', - gas: '0x3e8', - gasPrice: '0x3e8' - }, -}, { - input: { - data: '0x34234bf23bf4234', - value: '100', - from: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', - gas: '1000', - gasPrice: '1000' - }, - result: { - data: '0x34234bf23bf4234', - value: '0x64', - from: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', - gas: '0x3e8', - gasPrice: '0x3e8' - } -}, { - input: { - data: '34234bf23bf4234', - value: '100', - from: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', - gas: '1000', - gasPrice: '1000' - }, - result: { - data: '0x34234bf23bf4234', - value: '0x64', - from: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', - gas: '0x3e8', - gasPrice: '0x3e8' - } -}]; - -describe('formatters', function () { - describe('inputTransactionFormatter', function () { - tests.forEach(function(test){ - it('should return the correct value', function () { - assert.deepEqual(formatters.inputTransactionFormatter(test.input), test.result); - }); - }); - }); -}); diff --git a/test/formatters.outputBlockFormatter.js b/test/formatters.outputBlockFormatter.js deleted file mode 100644 index d6bf27563de..00000000000 --- a/test/formatters.outputBlockFormatter.js +++ /dev/null @@ -1,81 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var formatters = require('../packages/web3-core-helpers/src/formatters.js'); - - -describe('formatters', function () { - describe('outputBlockFormatter', function () { - it('should return the correct value', function () { - - assert.deepEqual(formatters.outputBlockFormatter({ - hash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - parentHash: '0x83ffb245cfced97ccc5c75253d6960376d6c6dea93647397a543a72fdaea5265', - miner: '0xdcc6960376d6c6dea93647383ffb245cfced97cf', - stateRoot: '0x54dda68af07643f68739a6e9612ad157a26ae7e2ce81f77842bb5835fbcde583', - sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', - bloom: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - difficulty: '0x3e8', - totalDifficulty: '0x3e8', - number: '0x3e8', - gasLimit: '0x3e8', - gasUsed: '0x3e8', - timestamp: '0x3e8', - extraData: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - nonce: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - size: '0x3e8' - }), { - hash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - parentHash: '0x83ffb245cfced97ccc5c75253d6960376d6c6dea93647397a543a72fdaea5265', - miner: '0xDCc6960376d6C6dEa93647383FfB245CfCed97Cf', - stateRoot: '0x54dda68af07643f68739a6e9612ad157a26ae7e2ce81f77842bb5835fbcde583', - sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', - bloom: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - difficulty: '1000', - totalDifficulty: '1000', - number: 1000, - gasLimit: 1000, - gasUsed: 1000, - timestamp: 1000, - extraData: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - nonce: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - size: 1000 - }); - }); - it('should return the correct value, when null values are present', function () { - - assert.deepEqual(formatters.outputBlockFormatter({ - hash: null, - parentHash: '0x83ffb245cfced97ccc5c75253d6960376d6c6dea93647397a543a72fdaea5265', - miner: null, - stateRoot: '0x54dda68af07643f68739a6e9612ad157a26ae7e2ce81f77842bb5835fbcde583', - sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', - bloom: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - difficulty: '0x3e8', - totalDifficulty: '0x3e8', - number: null, - gasLimit: '0x3e8', - gasUsed: '0x3e8', - timestamp: '0x3e8', - extraData: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - nonce: null, - size: '0x3e8' - }), { - hash: null, - parentHash: '0x83ffb245cfced97ccc5c75253d6960376d6c6dea93647397a543a72fdaea5265', - miner: null, - stateRoot: '0x54dda68af07643f68739a6e9612ad157a26ae7e2ce81f77842bb5835fbcde583', - sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', - bloom: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - difficulty: '1000', - totalDifficulty: '1000', - number: null, - gasLimit: 1000, - gasUsed: 1000, - timestamp: 1000, - extraData: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - nonce: null, - size: 1000 - }); - }); - }); -}); diff --git a/test/formatters.outputLogFormatter.js b/test/formatters.outputLogFormatter.js deleted file mode 100644 index da692001512..00000000000 --- a/test/formatters.outputLogFormatter.js +++ /dev/null @@ -1,51 +0,0 @@ -var assert = require('assert'); -var formatters = require('../packages/web3-core-helpers/src/formatters.js'); - -describe('formatters', function () { - describe('outputLogFormatter', function () { - it('should return the correct value', function () { - - assert.deepEqual(formatters.outputLogFormatter({ - transactionIndex: '0x3e8', - logIndex: '0x3e8', - blockNumber: '0x3e8', - transactionHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - blockHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - data: '0x7b2274657374223a2274657374227', - address: "0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae", // lowercase address - topics: ['0x68656c6c6f','0x6d79746f70696373'] - }), { - transactionIndex: 1000, - logIndex: 1000, - blockNumber: 1000, - transactionHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - blockHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', - data: '0x7b2274657374223a2274657374227', - topics: ['0x68656c6c6f','0x6d79746f70696373'], - address: "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", // checksum address - id: "log_2b801386" - }); - }); - it('should return the correct value, when null values are present', function () { - - assert.deepEqual(formatters.outputLogFormatter({ - transactionIndex: null, - logIndex: null, - blockNumber: null, - transactionHash: null, - blockHash: null, - data: '0x7b2274657374223a2274657374227', - topics: ['0x68656c6c6f','0x6d79746f70696373'] - }), { - transactionIndex: null, - logIndex: null, - blockNumber: null, - transactionHash: null, - blockHash: null, - id: null, - data: '0x7b2274657374223a2274657374227', - topics: ['0x68656c6c6f','0x6d79746f70696373'] - }); - }); - }); -}); diff --git a/test/formatters.outputPostFormatter.js b/test/formatters.outputPostFormatter.js deleted file mode 100644 index 6db807e1f0d..00000000000 --- a/test/formatters.outputPostFormatter.js +++ /dev/null @@ -1,26 +0,0 @@ -var assert = require('assert'); -var formatters = require('../packages/web3-core-helpers/src/formatters.js'); - -describe('formatters', function () { - describe('outputPostFormatter', function () { - it('should return the correct value', function () { - - assert.deepEqual(formatters.outputPostFormatter({ - expiry: '0x3e8', - sent: '0x3e8', - ttl: '0x3e8', - workProved: '0x3e8', - payload: '0x7b2274657374223a2274657374227d', - topics: ['0x68656c6c6f','0x6d79746f70696373'] - }), { - expiry: 1000, - sent: 1000, - ttl: 1000, - workProved: 1000, - payload: '0x7b2274657374223a2274657374227d', //{test: 'test'}, - // payloadRaw: '0x7b2274657374223a2274657374227d', - topics: ['hello','mytopics'] - }); - }); - }); -}); diff --git a/test/formatters.outputTransactionFormatter.js b/test/formatters.outputTransactionFormatter.js deleted file mode 100644 index 38dede445de..00000000000 --- a/test/formatters.outputTransactionFormatter.js +++ /dev/null @@ -1,60 +0,0 @@ -var assert = require('assert'); -var formatters = require('../packages/web3-core-helpers/src/formatters.js'); - -describe('formatters', function () { - describe('outputTransactionFormatter', function () { - it('should return the correct value', function () { - - assert.deepEqual(formatters.outputTransactionFormatter({ - input: '0x3454645634534', - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - value: '0x3e8', - gas: '0x3e8', - gasPrice: '0x3e8', - nonce: '0xb', - transactionIndex: '0x1', - blockNumber: '0x3e8', - blockHash: '0xc9b9cdc2092a9d6589d96662b1fd6949611163fb3910cf8a173cd060f17702f9' - }), { - input: '0x3454645634534', - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - value: '1000', - gas: 1000, - gasPrice: '1000', - nonce: 11, - blockNumber: 1000, - blockHash: '0xc9b9cdc2092a9d6589d96662b1fd6949611163fb3910cf8a173cd060f17702f9', - transactionIndex: 1 - }); - }); - - it('should return the correct value, when null values are present', function () { - - assert.deepEqual(formatters.outputTransactionFormatter({ - input: '0x3454645634534', - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - to: null, - value: '0x3e8', - gas: '0x3e8', - gasPrice: '0x3e8', - nonce: '0xb', - transactionIndex: null, - blockNumber: null, - blockHash: null - }), { - input: '0x3454645634534', - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: null, - value: 1000, - gas: 1000, - gasPrice: '1000', - nonce: 11, - blockNumber: null, - blockHash: null, - transactionIndex: null - }); - }); - }); -}); diff --git a/test/formatters.outputTransactionReceiptFormatter.js b/test/formatters.outputTransactionReceiptFormatter.js deleted file mode 100644 index 7647d725d36..00000000000 --- a/test/formatters.outputTransactionReceiptFormatter.js +++ /dev/null @@ -1,122 +0,0 @@ -var assert = require('assert'); -var formatters = require('../packages/web3-core-helpers/src/formatters.js'); - -describe('outputTransactionReceiptFormatter', function() { - - it('call outputTransactionReceiptFormatter with a valid receipt', function() { - var receipt = { - status: '0x0', - cumulativeGasUsed: '0x100', - gasUsed: '0x100', - blockNumber: '0x100', - transactionIndex: '0xa', - to: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - from: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - contractAddress: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078' - }; - - assert.deepEqual(formatters.outputTransactionReceiptFormatter(receipt), { - status: false, - cumulativeGasUsed: 256, - gasUsed: 256, - blockNumber: 256, - transactionIndex: 10, - to: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - from: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - contractAddress: '0x03C9A938fF7f54090d0d99e2c6f80380510Ea078' - }); - }); - - it('call outputTransactionReceiptFormatter with a valid receipt and logs', function() { - var receipt = { - status: '0x0', - cumulativeGasUsed: '0x100', - gasUsed: '0x100', - blockNumber: '0x100', - transactionIndex: '0xa', - to: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - from: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - contractAddress: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - logs: [{}] - }; - - assert.deepEqual(formatters.outputTransactionReceiptFormatter(receipt), { - status: false, - cumulativeGasUsed: 256, - gasUsed: 256, - blockNumber: 256, - transactionIndex: 10, - to: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - from: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - contractAddress: '0x03C9A938fF7f54090d0d99e2c6f80380510Ea078', - logs: [ - { - blockNumber: undefined, - id: null, - logIndex: undefined, - transactionIndex: undefined - } - ] - }); - }); - - it('call outputTransactionReceiptFormatter when status is "0x1"', function() { - var receipt = { - status: '0x1', - cumulativeGasUsed: '0x100', - gasUsed: '0x100', - blockNumber: '0x100', - transactionIndex: '0xa', - to: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - from: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - contractAddress: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078' - }; - - assert.equal(formatters.outputTransactionReceiptFormatter(receipt).status, true) - }); - - it('call outputTransactionReceiptFormatter when status is "0x01"', function() { - var receipt = { - status: '0x01', - cumulativeGasUsed: '0x100', - gasUsed: '0x100', - blockNumber: '0x100', - transactionIndex: '0xa', - to: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - from: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - contractAddress: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078' - }; - - assert.equal(formatters.outputTransactionReceiptFormatter(receipt).status, true) - }); - - it('call outputTransactionReceiptFormatter when status is "undefined"', function() { - var receipt = { - status: undefined, - cumulativeGasUsed: '0x100', - gasUsed: '0x100', - blockNumber: '0x100', - transactionIndex: '0xa', - to: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - from: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - contractAddress: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078' - }; - - assert.equal(formatters.outputTransactionReceiptFormatter(receipt).status, undefined) - }); - - it('call outputTransactionReceiptFormatter when status is "null"', function() { - var receipt = { - status: null, - cumulativeGasUsed: '0x100', - gasUsed: '0x100', - blockNumber: '0x100', - transactionIndex: '0xa', - to: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - from: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078', - contractAddress: '0x03c9a938ff7f54090d0d99e2c6f80380510ea078' - }; - - assert.equal(formatters.outputTransactionReceiptFormatter(receipt).status, null) - }); -}); diff --git a/test/helpers/FakeHttpProvider.js b/test/helpers/FakeHttpProvider.js deleted file mode 100644 index bda5b37a7e7..00000000000 --- a/test/helpers/FakeHttpProvider.js +++ /dev/null @@ -1,126 +0,0 @@ -var chai = require('chai'); -var assert = require('assert'); -var _ = require('lodash'); - - - - -var FakeHttpProvider = function HttpProvider() { - var _this = this; - this.countId = 1; - this.getResponseStub = function () { - return { - jsonrpc: '2.0', - id: _this.countId, - result: null - }; - }; - this.getErrorStub = function () { - return { - jsonrpc: '2.0', - id: _this.countId, - error: { - code: 1234, - message: 'Stub error' - } - }; - }; - - this.response = []; - this.error = []; - this.validation = []; -}; - - -FakeHttpProvider.prototype.send = function (payload, callback) { - var _this = this; - - // set id - if(payload.id) - this.countId = payload.id; - // else - // this.countId++; - - assert.equal(_.isArray(payload) || _.isObject(payload), true); - assert.equal(_.isFunction(callback), true); - - var validation = this.validation.shift(); - - if (validation) { - // imitate plain json object - validation(JSON.parse(JSON.stringify(payload)), callback); - } - - var response = this.getResponseOrError('response', payload); - var error = this.getResponseOrError('error', payload); - - setTimeout(function(){ - callback(error, response); - }, 1); -}; - -FakeHttpProvider.prototype.getResponseOrError = function (type, payload) { - var _this = this; - var response; - - if(type === 'error') { - response = this.error.shift(); - } else { - response = this.response.shift() || this.getResponseStub(); - } - - - if(response) { - if(_.isArray(response)) { - response = response.map(function(resp, index) { - resp.id = payload[index] ? payload[index].id : _this.countId++; - return resp; - }); - } else - response.id = payload.id; - } - - return response; -}; - - -// FakeHttpProvider.prototype.injectResponse = function (response) { -// this.response = response; -// }; - - - -FakeHttpProvider.prototype.injectBatchResults = function (results, error) { - var _this = this; - this.response.push(results.map(function (r) { - if(error) { - var response = _this.getErrorStub(); - response.error.message = r; - } else { - var response = _this.getResponseStub(); - response.result = r; - } - return response; - })); -}; - -FakeHttpProvider.prototype.injectResult = function (result) { - var response = this.getResponseStub(); - response.result = result; - - this.response.push(response); -}; - -FakeHttpProvider.prototype.injectError = function (error) { - var errorStub = this.getErrorStub(); - errorStub.error = error; // message, code - - this.error.push(errorStub); -}; - -FakeHttpProvider.prototype.injectValidation = function (callback) { - this.validation.push(callback); -}; - -module.exports = FakeHttpProvider; - diff --git a/test/helpers/FakeIpcProvider.js b/test/helpers/FakeIpcProvider.js deleted file mode 100644 index 6f52cb6c667..00000000000 --- a/test/helpers/FakeIpcProvider.js +++ /dev/null @@ -1,150 +0,0 @@ -var chai = require('chai'); -var assert = require('assert'); -var _ = require('lodash'); - - - - -var FakeIpcProvider = function IpcProvider() { - var _this = this; - this.countId = 1; - this.notificationCount = 1; - this.getResponseStub = function () { - return { - jsonrpc: '2.0', - id: _this.countId, - result: null - }; - }; - this.getErrorStub = function () { - return { - jsonrpc: '2.0', - id: _this.countId, - error: { - code: 1234, - message: 'Stub error' - } - }; - }; - - this.response = []; - this.error = []; - this.validation = []; - this.notificationCallbacks = []; - this.connected = true; -}; - - -FakeIpcProvider.prototype.send = function (payload, callback) { - var _this = this; - - // set id - if(payload.id) - this.countId = payload.id; - // else - // this.countId++; - - assert.equal(_.isArray(payload) || _.isObject(payload), true); - assert.equal(_.isFunction(callback), true); - - var validation = this.validation.shift(); - - if (validation) { - // imitate plain json object - validation(JSON.parse(JSON.stringify(payload)), callback); - } - - var response = this.getResponseOrError('response', payload); - var error = this.getResponseOrError('error', payload); - - setTimeout(function(){ - callback(error, response); - }, 1); -}; - -FakeIpcProvider.prototype.on = function (type, callback) { - if(type === 'data') { - this.notificationCallbacks.push(callback); - } -}; - -FakeIpcProvider.prototype.reset = function () { - this.notificationCallbacks = []; -}; - -FakeIpcProvider.prototype.getResponseOrError = function (type, payload) { - var _this = this; - var response; - - if(type === 'error') { - response = this.error.shift(); - } else { - response = this.response.shift() || this.getResponseStub(); - } - - - if(response) { - if(_.isArray(response)) { - response = response.map(function(resp, index) { - resp.id = payload[index] ? payload[index].id : _this.countId++; - return resp; - }); - } else - response.id = payload.id; - } - - return response; -}; - -FakeIpcProvider.prototype.injectNotification = function (notification) { - var _this = this; - setTimeout(function(){ - _this.notificationCallbacks.forEach(function(cb){ - if(notification && cb) - cb(notification); - }); - }, 100 + this.notificationCount); - - this.notificationCount += 10; -}; - -// FakeHttpProvider.prototype.injectResponse = function (response) { -// this.response = response; -// }; - - - -FakeIpcProvider.prototype.injectBatchResults = function (results, error) { - var _this = this; - this.response.push(results.map(function (r) { - if(error) { - var response = _this.getErrorStub(); - response.error.message = r; - } else { - var response = _this.getResponseStub(); - response.result = r; - } - return response; - })); -}; - -FakeIpcProvider.prototype.injectResult = function (result) { - var response = this.getResponseStub(); - response.result = result; - - this.response.push(response); -}; - -FakeIpcProvider.prototype.injectError = function (error) { - var errorStub = this.getErrorStub(); - errorStub.error = error; // message, code - - this.error.push(errorStub); -}; - -FakeIpcProvider.prototype.injectValidation = function (callback) { - this.validation.push(callback); -}; - -module.exports = FakeIpcProvider; - diff --git a/test/helpers/FakeIpcProvider2.js b/test/helpers/FakeIpcProvider2.js deleted file mode 100644 index 682f206f5ef..00000000000 --- a/test/helpers/FakeIpcProvider2.js +++ /dev/null @@ -1,37 +0,0 @@ -var FakeHttpProvider = require('./FakeIpcProvider'); - -var FakeIpcProvider2 = function () { - this.counter = 0; - this.resultList = []; -}; - -FakeIpcProvider2.prototype = new FakeHttpProvider(); -FakeIpcProvider2.prototype.constructor = FakeIpcProvider2; - -FakeIpcProvider2.prototype.injectResultList = function (list) { - this.resultList = list; -}; - -FakeIpcProvider2.prototype.getResponse = function () { - var result = this.resultList[this.counter]; - this.counter++; - - // add fallback result value - if(!result) - result = { - result: undefined - }; - - if (result.type === 'batch') { - this.injectBatchResults(result.result); - } else { - this.injectResult(result.result); - } - - this.counter = 0; - - return this.response; -}; - -module.exports = FakeIpcProvider2; - diff --git a/test/helpers/FakeIpcRequest.js b/test/helpers/FakeIpcRequest.js deleted file mode 100644 index 653e6fde55b..00000000000 --- a/test/helpers/FakeIpcRequest.js +++ /dev/null @@ -1,43 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; - -var FakeIpcRequest = function () { - var _this = this; - this._handle = {fd: {}}; - this.listenerList = []; - - return this; -}; - -FakeIpcRequest.prototype.connect = function (path) { - assert.notEqual(path, undefined); - - return this; -}; - - -FakeIpcRequest.prototype.on = function (name, callback) { - if(name === 'data'){ - this.listenerList.push(callback); - } -}; - - -FakeIpcRequest.prototype.writeSync = function (payload) { - assert.equal(typeof payload, 'string'); - return payload; -}; - -FakeIpcRequest.prototype.write = function (payload) { - assert.equal(typeof payload, 'string'); - - this.listenerList.forEach(function(cb){ - setTimeout(function(){ - cb(payload); - }, 100); - }); - -}; - -module.exports = FakeIpcRequest; - diff --git a/test/helpers/FakeXHR2.js b/test/helpers/FakeXHR2.js deleted file mode 100644 index 92e63cf59fc..00000000000 --- a/test/helpers/FakeXHR2.js +++ /dev/null @@ -1,41 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; - - -var FakeXHR2 = function () { - this.responseText = undefined; - this.readyState = 4; - this.onreadystatechange = null; - this.async = true; - this.agents = {}; - this.headers = { - 'Content-Type': 'text/plain' - }; -}; - -FakeXHR2.prototype.nodejsSet = function (agents) { - this.agents = agents; -}; - -FakeXHR2.prototype.open = function (method, host, async) { - assert.equal(method, 'POST'); - assert.notEqual(host, null); - this.async = async; -}; - -FakeXHR2.prototype.setRequestHeader = function(name, value) { - this.headers[name] = value; -}; - -FakeXHR2.prototype.send = function (payload) { - - this.responseText = payload; - - assert.equal(typeof payload, 'string'); - if (this.async) { - assert.equal(typeof this.onreadystatechange, 'function'); - this.onreadystatechange(); - } -}; - -module.exports = {XMLHttpRequest: FakeXHR2}; diff --git a/test/helpers/test.method.js b/test/helpers/test.method.js deleted file mode 100644 index 3afa2958e5c..00000000000 --- a/test/helpers/test.method.js +++ /dev/null @@ -1,268 +0,0 @@ -var _ = require('underscore'); -var chai = require('chai'); -var assert = chai.assert; -var FakeIpcProvider = require('./FakeIpcProvider'); -var Web3 = require('../../packages/web3'); - -var clone = function (object) { return object ? JSON.parse(JSON.stringify(object)) : []; }; - -var useLocalWallet = function (test, provider, web3) { - - test.useLocalWallet(web3); - - provider.injectResult("0x1"); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_chainId'); - assert.deepEqual(payload.params, []); - }); - - provider.injectResult('0xa'); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, 'eth_getTransactionCount'); - assert.deepEqual(payload.params, [test.walletFrom, "latest"]); - }); -}; - - - -var runTests = function (obj, method, tests) { - var objName; - - if(_.isArray(obj)) { - objName = obj.join('.'); - } else { - objName = obj; - } - - var testName = objName ? 'web3.' + objName : 'web3'; - - describe(testName, function () { - describe(method, function () { - tests.forEach(function (test, index) { - it('promise test: ' + index, function (done) { - - // given - var w3; - var result; - var provider = new FakeIpcProvider(); - var web3 = new Web3(provider); - - // add a wallet - if(test.useLocalWallet) { - useLocalWallet(test, provider, web3); - } - - - provider.injectResult(clone(test.result)); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, test.call); - assert.deepEqual(payload.params, test.formattedArgs || []); - }); - - if (test.call2) { - provider.injectResult(clone(test.result2)); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, test.call2); - assert.deepEqual(payload.params, test.formattedArgs2 || []); - }); - } - - - // if notification its sendTransaction, which needs two more results, subscription and receipt - if(test.notification) { - provider.injectResult(null); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - }); - - provider.injectResult(clone(test.result)); - // inject receipt - provider.injectResult({ - "blockHash": "0x6fd9e2a26ab", - "blockNumber": "0x15df", - "transactionHash": "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "transactionIndex": "0x1", - "contractAddress": "0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "cumulativeGasUsed": "0x7f110", - "gasUsed": "0x7f110" - }); - // fake newBlock - provider.injectNotification(test.notification); - } - - var args = clone(test.args); - - if(test.error) { - if (obj) { - if(_.isArray(obj)) { - w3 = web3[obj[0]][obj[1]]; - } else { - w3 = web3[obj]; - } - - if (test.defaultOptions) { - test.defaultOptions.forEach(function(option) { - w3[option[0]] = option[1]; - }); - } - - assert.throws(function(){ w3[method].apply(w3, args); }); - } else { - if (test.defaultOptions) { - test.defaultOptions.forEach(function(option) { - w3[option[0]] = option[1]; - }); - } - - assert.throws(function(){ web3[method].apply(web3, args); }); - } - - done(); - - } else { - - if (obj) { - if(_.isArray(obj)) { - w3 = web3[obj[0]][obj[1]]; - } else { - w3 = web3[obj]; - } - - if (test.defaultOptions) { - test.defaultOptions.forEach(function(option) { - w3[option[0]] = option[1]; - }); - } - - result = w3[method].apply(w3, args); - } else { - if (test.defaultOptions) { - test.defaultOptions.forEach(function(option) { - w3[option[0]] = option[1]; - }); - } - - result = web3[method].apply(web3, args); - } - - result.then(function(result){ - if(test.notification) { - // test receipt - assert.deepEqual(result, { - "blockHash": "0x6fd9e2a26ab", - "blockNumber": 5599, - "transactionHash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", - "transactionIndex": 1, - "contractAddress":"0x407D73d8a49eeb85D32Cf465507dd71d507100c1", // checksum address - "cumulativeGasUsed": 520464, - "gasUsed": 520464 - }); - } else { - assert.deepEqual(result, test.formattedResult); - } - - done(); - }); - } - - }); - - it('callback test: ' + index, function (done) { - - // given - var w3; - var provider = new FakeIpcProvider(); - var web3 = new Web3(provider); - - // add a wallet - if(test.useLocalWallet) { - useLocalWallet(test, provider, web3); - } - - provider.injectResult(clone(test.result)); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, test.call); - assert.deepEqual(payload.params, test.formattedArgs || []); - }); - - if (test.call2) { - provider.injectResult(clone(test.result2)); - provider.injectValidation(function (payload) { - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, test.call2); - assert.deepEqual(payload.params, test.formattedArgs2 || []); - }); - } - - - var args = clone(test.args); - - if(test.error) { - if (obj) { - if(_.isArray(obj)) { - w3 = web3[obj[0]][obj[1]]; - } else { - w3 = web3[obj]; - } - - if (test.defaultOptions) { - test.defaultOptions.forEach(function(option) { - w3[option[0]] = option[1]; - }); - } - - assert.throws(function(){ w3[method].apply(w3, args); }); - } else { - assert.throws(function(){ web3[method].apply(web3, args); }); - } - - done(); - - } else { - // add callback - args.push(function (err, result) { - assert.deepEqual(result, test.formattedResult); - - done(); - }); - - // when - if (obj) { - if(_.isArray(obj)) { - w3 = web3[obj[0]][obj[1]]; - } else { - w3 = web3[obj]; - } - - if (test.defaultOptions) { - test.defaultOptions.forEach(function(option) { - w3[option[0]] = option[1]; - }); - } - - w3[method].apply(w3, args); - } else { - if (test.defaultOptions) { - test.defaultOptions.forEach(function(option) { - w3[option[0]] = option[1]; - }); - } - - web3[method].apply(web3, args); - } - } - }); - }); - }); - }); - -}; - -module.exports = { - runTests: runTests -}; diff --git a/test/helpers/test.subscription.js b/test/helpers/test.subscription.js deleted file mode 100644 index 651a92586dc..00000000000 --- a/test/helpers/test.subscription.js +++ /dev/null @@ -1,85 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var FakeHttpProvider = require('./FakeIpcProvider'); -var Web3 = require('../../packages/web3'); - - -var runTests = function (protocol, tests) { - - describe('web3.shh.subscribe', function () { - tests.forEach(function (test, index) { - it('should create a subscription for "'+ test.args[0] +'"', function (done) { - - // given - var sub; - var provider = new FakeHttpProvider(); - var web3 = new Web3(provider); - var dataCount = 0; - var changedCount = 0; - - provider.injectResult(test.firstResult); - provider.injectResult(test.datadResult); - - provider.injectValidation(function (payload) { - - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, protocol + '_subscribe'); - assert.deepEqual(payload.params, test.firstPayload.params); - }); - provider.injectValidation(function (payload) { - assert.equal(payload.method, test.secondPayload.method); - - done(); - - }); - - // add callback - test.args.push(function(err, result) { - if (test.err) { - // TODO add subscription error check - - } else if(test.subscriptionResults) { - var subRes = test.subscriptionResults.shift(); - - assert.deepEqual(result, subRes); - } - - if(!test.subscriptionResults || !test.subscriptionResults.length) { - - if(isFinite(test.dataCount)) - assert.equal(dataCount, test.dataCount); - if(isFinite(test.changedCount)) - assert.equal(changedCount, test.changedCount); - - sub.unsubscribe(); - } - - }); - - // when - sub = web3[test.protocol].subscribe.apply(web3[test.protocol], test.args) - .on('data', function () { - dataCount++; - }) - .on('changed', function () { - changedCount++; - }); - - - // fire subscriptions - test.subscriptions.forEach(function (subscription) { - provider.injectNotification({ - method: protocol + '_subscription', - params: subscription - }); - }); - - }); - }); - }); -}; - -module.exports = { - runTests: runTests -} - diff --git a/test/helpers/test.utils.js b/test/helpers/test.utils.js deleted file mode 100644 index 67922e03aff..00000000000 --- a/test/helpers/test.utils.js +++ /dev/null @@ -1,67 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -//var web3 = require('../../index'); - -var FakeHttpProvider = require('./FakeIpcProvider'); - -var methodExists = function (object, method) { - it('should have method ' + method + ' implemented', function() { - //web3.setProvider(null); - assert.equal('function', typeof object[method], 'method ' + method + ' is not implemented'); - }); -}; - -var propertyExists = function (object, property) { - it('should have property ' + property + ' implemented', function() { - // set dummy providor, to prevent error - // web3.setProvider(new FakeHttpProvider()); - assert.notEqual('undefined', typeof object[property], 'property ' + property + ' is not implemented'); - }); -}; - -// Runs a noop transaction to move instamine forward -// Useful for confirmation handler testing. -var mine = async function(web3, account) { - await web3.eth.sendTransaction({ - from: account, - to: account, - gasPrice: '1', - gas: 4000000, - value: web3.utils.toWei('0', 'ether'), - }); -} - -// Extracts a receipt object from 1.x error message -var extractReceipt = function(message){ - const receiptString = message.split("the EVM:")[1].trim(); - return JSON.parse(receiptString); -} - -// Conditionally requires web3: -// loads web3.min when running headless browser tests, the unbuilt web3 otherwise. -var getWeb3 = function(){ - return (global.window) - ? require('../../packages/web3/dist/web3.min') - : require('../../packages/web3'); -} - -// Gets correct websocket port for client. Ganache uses 8545 for both -// http and ws. It's run in e2e.ganache.sh and for all the headless browser tests -var getWebsocketPort = function(){ - return ( process.env.GANACHE || global.window ) ? 8545 : 8546; -} - -// Delay -var waitSeconds = async function(seconds = 0){ - return new Promise(resolve => setTimeout(() => resolve(), seconds * 1000)) -} - -module.exports = { - methodExists: methodExists, - propertyExists: propertyExists, - mine: mine, - extractReceipt: extractReceipt, - getWeb3: getWeb3, - getWebsocketPort: getWebsocketPort, - waitSeconds: waitSeconds -}; diff --git a/test/httpprovider.js b/test/httpprovider.js deleted file mode 100644 index 105cb022666..00000000000 --- a/test/httpprovider.js +++ /dev/null @@ -1,82 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var http = require('http'); -var https = require('https'); -var SandboxedModule = require('sandboxed-module'); - -SandboxedModule.registerBuiltInSourceTransformer('istanbul'); -var HttpProvider = SandboxedModule.require('../packages/web3-providers-http', { - requires: { - 'xhr2-cookies': require('./helpers/FakeXHR2'), - // 'xmlhttprequest': require('./helpers/FakeXMLHttpRequest') - }, - singleOnly: true -}); - -describe('web3-providers-http', function () { - describe('prepareRequest', function () { - let provider; - let result; - let options; - let agent; - - it('should set request header', function () { - provider = new HttpProvider('http://localhost:8545', {headers: [{name: 'Access-Control-Allow-Origin', value: '*'}]}); - result = provider._prepareRequest(); - - assert.equal(typeof result, 'object'); - assert.equal(result.headers['Access-Control-Allow-Origin'], '*'); - }); - - it('should use the passed custom http agent', function () { - agent = new http.Agent(); - options = {agent: {http: agent}}; - provider = new HttpProvider('http://localhost:8545', options); - result = provider._prepareRequest(); - - assert.equal(typeof result, 'object'); - assert.equal(result.agents.httpAgent, agent); - assert.equal(provider.httpAgent, undefined); - assert.equal(provider.httpsAgent, undefined); - assert.equal(provider.agent, options.agent); - }); - - it('should use the passed custom https agent', function () { - agent = new https.Agent(); - options = {agent: {https: agent}}; - provider = new HttpProvider('http://localhost:8545', options); - result = provider._prepareRequest(); - - assert.equal(typeof result, 'object'); - assert.equal(result.agents.httpsAgent, agent); - assert.equal(provider.httpAgent, undefined); - assert.equal(provider.httpsAgent, undefined); - assert.equal(provider.agent, options.agent); - }); - - it('should use the passed baseUrl', function () { - agent = new https.Agent(); - options = {agent: {https: agent, baseUrl: 'base'}}; - provider = new HttpProvider('http://localhost:8545', options); - result = provider._prepareRequest(); - - assert.equal(typeof result, 'object'); - assert.equal(result.agents.httpsAgent, agent); - assert.equal(result.agents.baseUrl, 'base'); - assert.equal(provider.httpAgent, undefined); - assert.equal(provider.httpsAgent, undefined); - assert.equal(provider.agent, options.agent); - }); - }); - - describe('send', function () { - it('should send basic async request', function (done) { - var provider = new HttpProvider(); - - provider.send({}, function (err, result) { - assert.equal(typeof result, 'object'); - done(); - }); - }); - }); -}); diff --git a/test/iban.createIndirect.js b/test/iban.createIndirect.js deleted file mode 100644 index b2ad45923ba..00000000000 --- a/test/iban.createIndirect.js +++ /dev/null @@ -1,21 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Iban = require('../packages/web3-eth-iban'); - -var tests = [ - { institution: 'XREG', identifier: 'GAVOFYORK', expected: 'XE81ETHXREGGAVOFYORK'} -]; - -describe('lib/web3/iban', function () { - describe('createIndirect', function () { - tests.forEach(function (test) { - it('shoud create indirect iban: ' + test.expected, function () { - assert.deepEqual(Iban.createIndirect({ - institution: test.institution, - identifier: test.identifier - }), new Iban(test.expected)); - }); - }); - }); -}); - diff --git a/test/iban.fromAddress.js b/test/iban.fromAddress.js deleted file mode 100644 index 097a5c432d3..00000000000 --- a/test/iban.fromAddress.js +++ /dev/null @@ -1,22 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Iban = require('../packages/web3-eth-iban'); - -var tests = [ - { address: '00c5496aee77c1ba1f0854206a26dda82a81d6d8', expected: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'}, - { address: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', expected: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'}, - { address: '0x11c5496aee77c1ba1f0854206a26dda82a81d6d8', expected: 'XE1222Q908LN1QBBU6XUQSO1OHWJIOS46OO'}, - { address: '0x52dc504a422f0e2a9e7632a34a50f1a82f8224c7', expected: 'XE499OG1EH8ZZI0KXC6N83EKGT1BM97P2O7'}, - { address: '0x0000a5327eab78357cbf2ae8f3d49fd9d90c7d22', expected: 'XE0600DQK33XDTYUCRI0KYM5ELAKXDWWF6'} -]; - -describe('lib/web3/iban', function () { - describe('fromAddress', function () { - tests.forEach(function (test) { - it('shoud create indirect iban: ' + test.expected, function () { - assert.deepEqual(Iban.fromAddress(test.address), new Iban(test.expected)); - }); - }); - }); -}); - diff --git a/test/iban.isValid.js b/test/iban.isValid.js deleted file mode 100644 index 5141eab1e34..00000000000 --- a/test/iban.isValid.js +++ /dev/null @@ -1,35 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Iban = require('../packages/web3-eth-iban'); - -var tests = [ - { obj: function () {}, is: false}, - { obj: new Function(), is: false}, - { obj: 'function', is: false}, - { obj: {}, is: false}, - { obj: '[]', is: false}, - { obj: '[1, 2]', is: false}, - { obj: '{}', is: false}, - { obj: '{"a": 123, "b" :3,}', is: false}, - { obj: '{"c" : 2}', is: false}, - { obj: 'XE81ETHXREGGAVOFYORK', is: true}, - { obj: 'XE82ETHXREGGAVOFYORK', is: false}, // control number is invalid - { obj: 'XE81ETCXREGGAVOFYORK', is: false}, - { obj: 'XE81ETHXREGGAVOFYORKD', is: false}, - { obj: 'XE81ETHXREGGaVOFYORK', is: false}, - { obj: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', is: true}, - { obj: 'XE7438O073KYGTWWZN0F2WZ0R8PX5ZPPZS', is: false}, // control number is invalid - { obj: 'XD7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', is: false}, - { obj: 'XE1222Q908LN1QBBU6XUQSO1OHWJIOS46OO', is: true} -]; - -describe('lib/web3/iban', function () { - describe('isValid', function () { - tests.forEach(function (test) { - it('shoud test if value ' + test.obj + ' is iban: ' + test.is, function () { - assert.equal(Iban.isValid(test.obj), test.is); - }); - }); - }); -}); - diff --git a/test/iban.toAddress.js b/test/iban.toAddress.js deleted file mode 100644 index db7208f52c0..00000000000 --- a/test/iban.toAddress.js +++ /dev/null @@ -1,26 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Iban = require('../packages/web3-eth-iban'); - -var tests = [ - { direct: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', address: '0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8'} -]; - -describe('lib/web3/iban', function () { - describe('Iban.toAddress()', function () { - tests.forEach(function (test) { - it('shoud transform iban to address: ' + test.address, function () { - assert.deepEqual(Iban.toAddress(test.direct), test.address); - }); - }); - }); - describe('iban instance address()', function () { - tests.forEach(function (test) { - it('shoud transform iban to address: ' + test.address, function () { - var iban = new Iban(test.direct); - assert.deepEqual(iban.toAddress(), test.address); - }); - }); - }); -}); - diff --git a/test/iban.toIban.js b/test/iban.toIban.js deleted file mode 100644 index 86c432ce8c3..00000000000 --- a/test/iban.toIban.js +++ /dev/null @@ -1,22 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Iban = require('../packages/web3-eth-iban'); - -var tests = [ - { address: '00c5496aee77c1ba1f0854206a26dda82a81d6d8', expected: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'}, - { address: '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8', expected: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'}, - { address: '0x11c5496aee77c1ba1f0854206a26dda82a81d6d8', expected: 'XE1222Q908LN1QBBU6XUQSO1OHWJIOS46OO'}, - { address: '0x52dc504a422f0e2a9e7632a34a50f1a82f8224c7', expected: 'XE499OG1EH8ZZI0KXC6N83EKGT1BM97P2O7'}, - { address: '0x0000a5327eab78357cbf2ae8f3d49fd9d90c7d22', expected: 'XE0600DQK33XDTYUCRI0KYM5ELAKXDWWF6'} -]; - -describe('lib/web3/iban', function () { - describe('fromAddress', function () { - tests.forEach(function (test) { - it('shoud create indirect iban: ' + test.expected, function () { - assert.deepEqual(Iban.toIban(test.address), test.expected); - }); - }); - }); -}); - diff --git a/test/ipcprovider.js b/test/ipcprovider.js deleted file mode 100644 index 93551b6f75c..00000000000 --- a/test/ipcprovider.js +++ /dev/null @@ -1,53 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var SandboxedModule = require('sandboxed-module'); - -var FakeIpcRequest = require('./helpers/FakeIpcRequest') -var net = new FakeIpcRequest(); - -SandboxedModule.registerBuiltInSourceTransformer('istanbul'); -var IpcProvider = SandboxedModule.require('../packages/web3-providers-ipc', { - requires: { - 'bn.js': require('bn.js'), - }, - singleOnly: true -}); - -describe('web3-providers-ipc', function () { - - // oboe.js DOESNT WORK with FakeIpcProvider - // describe('send', function () { - // it('should send basic async request', function (done) { - // var provider = new IpcProvider('', net); - // provider.send({id: 1, method: 'eth_test'}, function (err, result) { - // assert.isObject(result); - // done(); - // }); - // }); - // }); - - // describe('isConnected', function () { - // it('should return a boolean', function () { - // var provider = new IpcProvider('', net); - // - // assert.isBoolean(provider.isConnected()); - // }); - // - // it('should return false', function () { - // var provider = new IpcProvider('', net); - // - // provider.connection.writable = false; - // - // assert.isFalse(provider.isConnected()); - // }); - // - // it('should return true, when a net handle is set', function () { - // var provider = new IpcProvider('', net); - // - // provider.connection.writable = true; - // - // assert.isTrue(provider.isConnected()); - // }); - // }); -}); - diff --git a/test/jsonrpc.id.js b/test/jsonrpc.id.js deleted file mode 100644 index 74399fac64e..00000000000 --- a/test/jsonrpc.id.js +++ /dev/null @@ -1,21 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Jsonrpc = require('../packages/web3-core-requestmanager/src/jsonrpc'); - -describe('lib/web3/jsonrpc', function () { - describe('id', function () { - it('should increment the id', function () { - - // given - var method = 'm'; - - // when - var p1 = Jsonrpc.toPayload(method); - var p2 = Jsonrpc.toPayload(method); - - // then - assert.equal(p2.id, p1.id + 1); - }); - }); -}); - diff --git a/test/jsonrpc.isValidResponse.js b/test/jsonrpc.isValidResponse.js deleted file mode 100644 index 713440cb92c..00000000000 --- a/test/jsonrpc.isValidResponse.js +++ /dev/null @@ -1,159 +0,0 @@ -var assert = require('assert'); -var Jsonrpc = require('../packages/web3-core-requestmanager/src/jsonrpc'); - -describe('jsonrpc', function () { - describe('isValidResponse', function () { - it('should validate basic jsonrpc response', function () { - - // given - var response = { - jsonrpc: '2.0', - id: 1, - result: [] - }; - - // when - var valid = Jsonrpc.isValidResponse(response); - - // then - assert.equal(valid, true); - }); - - it('should validate basic undefined response', function () { - - // given - var response = undefined; - - // when - var valid = Jsonrpc.isValidResponse(response); - - // then - assert.equal(valid, false); - }); - - it('should validate jsonrpc response without jsonrpc field', function () { - - // given - var response = { - id: 1, - result: [] - }; - - // when - var valid = Jsonrpc.isValidResponse(response); - - // then - assert.equal(valid, false); - }); - - it('should validate jsonrpc response with wrong jsonrpc version', function () { - - // given - var response = { - jsonrpc: '1.0', - id: 1, - result: [] - }; - - // when - var valid = Jsonrpc.isValidResponse(response); - - // then - assert.equal(valid, false); - }); - - it('should validate jsonrpc response without id number', function () { - - // given - var response = { - jsonrpc: '2.0', - result: [] - }; - - // when - var valid = Jsonrpc.isValidResponse(response); - - // then - assert.equal(valid, false); - }); - - it('should validate jsonrpc response with string id field', function () { - - // given - var response = { - jsonrpc: '2.0', - id: 'x', - result: [] - }; - - // when - var valid = Jsonrpc.isValidResponse(response); - - // then - assert.equal(valid, true); - }); - - it('should validate jsonrpc response with string id field but as number', function () { - - // given - var response = { - jsonrpc: '2.0', - id: '23', - result: [] - }; - - // when - var valid = Jsonrpc.isValidResponse(response); - - // then - assert.equal(valid, true); - }); - - it('should validate jsonrpc response without result field', function () { - - // given - var response = { - jsonrpc: '2.0', - id: 1 - }; - - // when - var valid = Jsonrpc.isValidResponse(response); - - // then - assert.equal(valid, false); - }); - - it('should validate jsonrpc response with result field === false', function () { - - // given - var response = { - jsonrpc: '2.0', - id: 1, - result: false - }; - - // when - var valid = Jsonrpc.isValidResponse(response); - - // then - assert.equal(valid, true); - }); - - it('should validate jsonrpc response with result field === 0', function () { - - // given - var response = { - jsonrpc: '2.0', - id: 1, - result: 0 - }; - - // when - var valid = Jsonrpc.isValidResponse(response); - - // then - assert.equal(valid, true); - }); - }); -}); diff --git a/test/jsonrpc.toBatchPayload.js b/test/jsonrpc.toBatchPayload.js deleted file mode 100644 index 04aef2003c5..00000000000 --- a/test/jsonrpc.toBatchPayload.js +++ /dev/null @@ -1,47 +0,0 @@ -var assert = require('assert'); -var Jsonrpc = require('../packages/web3-core-requestmanager/src/jsonrpc'); - -describe('jsonrpc', function () { - describe('toBatchPayload', function () { - it('should create basic batch payload', function () { - - // given - var messages = [{ - method: 'helloworld' - }, { - method: 'test2', - params: [1] - }]; - - // when - var payload = Jsonrpc.toBatchPayload(messages); - - // then - assert.equal(Array.isArray(payload), true); - assert.equal(payload.length, 2); - assert.equal(payload[0].jsonrpc, '2.0'); - assert.equal(payload[1].jsonrpc, '2.0'); - assert.equal(payload[0].method, 'helloworld'); - assert.equal(payload[1].method, 'test2'); - assert.equal(Array.isArray(payload[0].params), true); - assert.equal(payload[1].params.length, 1); - assert.equal(payload[1].params[0], 1); - assert.equal(typeof payload[0].id, 'number'); - assert.equal(typeof payload[1].id, 'number'); - assert.equal(payload[0].id + 1, payload[1].id); - }); - - it('should create batch payload for empty input array', function () { - - // given - var messages = []; - - // when - var payload = Jsonrpc.toBatchPayload(messages); - - // then - assert.equal(Array.isArray(payload), true); - assert.equal(payload.length, 0); - }); - }); -}); diff --git a/test/jsonrpc.toPayload.js b/test/jsonrpc.toPayload.js deleted file mode 100644 index cc8359ba5ad..00000000000 --- a/test/jsonrpc.toPayload.js +++ /dev/null @@ -1,41 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Jsonrpc = require('../packages/web3-core-requestmanager/src/jsonrpc'); - -describe('jsonrpc', function () { - describe('toPayload', function () { - it('should create basic payload', function () { - - // given - var method = 'helloworld'; - - // when - var payload = Jsonrpc.toPayload(method); - - // then - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, method); - assert.equal(Array.isArray(payload.params), true); - assert.equal(payload.params.length, 0); - assert.equal(typeof payload.id, 'number'); - }); - - it('should create payload with params', function () { - - // given - var method = 'helloworld1'; - var params = [123, 'test']; - - // when - var payload = Jsonrpc.toPayload(method, params); - - // then - assert.equal(payload.jsonrpc, '2.0'); - assert.equal(payload.method, method); - assert.equal(payload.params.length, 2); - assert.equal(payload.params[0], params[0]); - assert.equal(payload.params[1], params[1]); - assert.equal(typeof payload.id, 'number'); - }); - }); -}); diff --git a/test/method.buildCall.js b/test/method.buildCall.js deleted file mode 100644 index f3b769117eb..00000000000 --- a/test/method.buildCall.js +++ /dev/null @@ -1,1042 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var formatters = require('../packages/web3-core-helpers/src/formatters.js'); -var FakeHttpProvider = require('./helpers/FakeHttpProvider'); -var FakeIpcProvider = require('./helpers/FakeIpcProvider'); -var Eth = require('../packages/web3-eth'); -var Method = require('../packages/web3-core-method'); - -var address = '0x1234567890123456789012345678901234567891'; - - -describe('lib/web3/method', function () { - describe('buildCall', function () { - it('should return a promise and resolve it', function (done) { - var provider = new FakeHttpProvider(); - var eth = new Eth(provider); - var method = new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter.bind({defaultBlock: 'latest'})] - }); - method.setRequestManager(eth._requestManager); - - // generate send function - var send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - data: '0xa123456' - }, "latest"]); - }); - provider.injectResult('0x1234567453543456321456321'); // tx hash - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: '0xa123456' - }).then(function (result) { - - assert.deepEqual(result, '0x1234567453543456321456321'); - - done(); - }); - - }); - it('should return a promise and fail it', function (done) { - var provider = new FakeHttpProvider(); - var eth = new Eth(provider); - var method = new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter.bind({defaultBlock: 'latest'})] - }); - method.setRequestManager(eth._requestManager); - - // generate send function - var send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - data: '0xa123456' - },"latest"]); - }); - provider.injectError({ - message: 'Wrong!', - code: 1234 - }); - - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: '0xa123456' - }) - .catch(function (error) { - assert.deepEqual(error, { - message: 'Wrong!', - code: 1234 - }); - - done(); - }); - - }); - - it('should return an error, if the outputFormatter returns an error', function (done) { - var provider = new FakeHttpProvider(); - var eth = new Eth(provider); - var method = new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter.bind({defaultBlock: 'latest'})], - outputFormatter: function (result) { - return new Error('Error!'); - } - }); - method.setRequestManager(eth._requestManager); - - // generate send function - var send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - data: '0xa123456' - }, "latest"]); - }); - provider.injectResult('0x1234567453543456321456321'); // tx hash - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: '0xa123456' - }, function (err, result) { - - assert.isTrue(err instanceof Error); - assert.isUndefined(result); - - done(); - }); - - }); - - it('should return an error, if the outputFormatter throws', function (done) { - var provider = new FakeHttpProvider(); - var eth = new Eth(provider); - var method = new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter.bind({defaultBlock: 'latest'})], - outputFormatter: function (result) { - throw new Error('Error!'); - } - }); - method.setRequestManager(eth._requestManager); - - // generate send function - var send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_call'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - data: '0xa123456' - }, "latest"]); - }); - provider.injectResult('0x1234567453543456321456321'); // tx hash - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: '0xa123456' - }, function (err, result) { - - assert.isTrue(err instanceof Error); - assert.isUndefined(result); - - done(); - }); - - }); - - it('should fill in gasPrice if not given', function (done) { - var provider = new FakeHttpProvider(); - var eth = new Eth(provider); - var method = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - method.setRequestManager(eth._requestManager, eth); - - // generate send function - var send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_gasPrice'); - assert.deepEqual(payload.params, []); - }); - provider.injectResult('0xffffdddd'); // gas price - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - data: '0xa123456', - gasPrice: '0xffffdddd' - }]); - - done(); - - }); - provider.injectResult('0x1234567453543456321456321'); // tx hash - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: '0xa123456' - }); - - }); - - var succeedOnReceipt = function () { - var provider = new FakeIpcProvider(); - var eth = new Eth(provider); - var method = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - method.setRequestManager(eth._requestManager, eth); - - // generate send function - var send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - value: '0xa', - gasPrice: "0x574d94bba" - }]); - }); - provider.injectResult('0x1234567453543456321456321'); // tx hash - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult('0x1234567'); // subscription id - - // fake newBlock - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }); - - // receipt - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234567453543456321456321']); - }); - provider.injectResult({ - contractAddress: address, - cumulativeGasUsed: '0xa', - transactionIndex: '0x3', - blockNumber: '0xa', - blockHash: '0xafff', - gasUsed: '0x0' - }); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_unsubscribe'); - assert.deepEqual(payload.params, ['0x1234567']); - }); - provider.injectResult(true); // unsubscribe result - - return send; - }; - - it('should use promise "then" when subscribing and checking for receipt if "sendTransaction"', function (done) { - - var send = succeedOnReceipt(); - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - value: '0xa', - gasPrice: '23435234234' - }).then(function (result) { - - - assert.deepEqual(result, { - contractAddress: address, - cumulativeGasUsed: 10, - transactionIndex: 3, - blockNumber: 10, - blockHash: '0xafff', - gasUsed: 0 - }); - - done(); - }); - - }); - it('should use on("receipt", ...) when subscribing and checking for receipt if "sendTransaction"', function (done) { - - var send = succeedOnReceipt(); - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - value: '0xa', - gasPrice: '23435234234' - }).on('receipt', function (result) { - - - assert.deepEqual(result, { - contractAddress: address, - cumulativeGasUsed: 10, - transactionIndex: 3, - blockNumber: 10, - blockHash: '0xafff', - gasUsed: 0 - }); - - done(); - }); - - }); - - - var succeedwhenDeploying = function () { - var provider = new FakeIpcProvider(); - var eth = new Eth(provider); - var method = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - method.setRequestManager(eth._requestManager); // second parameter accounts - - // generate send function - var send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - data: '0xa123456', - gasPrice: "0x574d94bba" - }]); - }); - provider.injectResult('0x1234567453543456321456321'); // tx hash - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult('0x1234567'); // subscription id - - // fake newBlock - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234567453543456321456321']); - }); - // receipt - provider.injectResult({ - contractAddress: address, - cumulativeGasUsed: '0xa', - transactionIndex: '0x3', - blockNumber: '0xa', - blockHash: '0xafff', - gasUsed: '0x0' - }); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getCode'); - assert.deepEqual(payload.params, [address, 'latest']); - }); - // code result - provider.injectResult('0x321'); - - return send; - }; - - it('should use promise "then" when subscribing and checking for receipt and code if "sendTransaction" deploying contract', function (done) { - - var send = succeedwhenDeploying(); - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: '0xa123456', - gasPrice: '23435234234' - }).then(function (result) { - - assert.deepEqual(result, { - contractAddress: address, - cumulativeGasUsed: 10, - transactionIndex: 3, - blockNumber: 10, - blockHash: '0xafff', - gasUsed: 0 - }); - - done(); - }); - - }); - - it('should use on("receipt", ...) when subscribing and checking for receipt and code if "sendTransaction" deploying contract', function (done) { - - var send = succeedwhenDeploying(); - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: '0xa123456', - gasPrice: '23435234234' - }).on('receipt', function (result) { - - assert.deepEqual(result, { - contractAddress: address, - cumulativeGasUsed: 10, - transactionIndex: 3, - blockNumber: 10, - blockHash: '0xafff', - gasUsed: 0 - }); - - done(); - }); - - }); - - var failOnCodeEmpty = function () { - var provider = new FakeIpcProvider(); - var eth = new Eth(provider); - var method = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - method.setRequestManager(eth._requestManager, eth); - - // generate send function - var send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - data: '0xa123456', - gasPrice: "0x574d94bba" - }]); - }); - provider.injectResult('0x1234567453543456321456321'); // tx hash - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult('0x1234567'); // subscription id - - // fake newBlock - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234567453543456321456321']); - }); - // receipt - provider.injectResult({ - contractAddress: address, - cumulativeGasUsed: '0xa', - transactionIndex: '0x3', - blockNumber: '0xa', - blockHash: '0xafff', - gasUsed: '0x0' - }); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getCode'); - assert.deepEqual(payload.params, [address, 'latest']); - }); - // code result - provider.injectResult('0x'); - - return send; - }; - - it('should fail on promise when subscribing and check for receipt and code if "sendTransaction" and deploying contract: error if code is empty', function (done) { - - var send = failOnCodeEmpty(); - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: '0xa123456', - gasPrice: '23435234234' - }).catch(function (error) { - assert.instanceOf(error, Error); - done(); - }); - - }); - - it('should fail with on("error", ...) when subscribing and check for receipt and code if "sendTransaction" and deploying contract: error if code is empty', function (done) { - - var send = failOnCodeEmpty(); - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: '0xa123456', - gasPrice: '23435234234' - }).on('error', function (error) { - assert.instanceOf(error, Error); - done(); - }); - - }); - - var failOnMissingAddress = function () { - var provider = new FakeIpcProvider(); - var eth = new Eth(provider); - var method = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - method.setRequestManager(eth._requestManager, eth); - - // generate send function - var send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - data: '0xa123456', - gasPrice: "0x574d94bba" - }]); - }); - provider.injectResult('0x1234567453543456321456321'); // tx hash - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult('0x1234567'); // subscription id - - // fake newBlock - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234567453543456321456321']); - }); - // receipt - provider.injectResult({ - contractAddress: null, - cumulativeGasUsed: '0xa', - transactionIndex: '0x3', - blockNumber: '0xa', - blockHash: '0xafff', - gasUsed: '0x0' - }); - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_unsubscribe'); - assert.deepEqual(payload.params, ['0x1234567']); - }); - // code result - provider.injectResult(true); - - return send; - }; - - it('should fail on promise when subscribing and check for receipt and code if "sendTransaction" and deploying contract: error if receipt has no contract address', function (done) { - var send = failOnMissingAddress(); - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: '0xa123456', - gasPrice: '23435234234' - }).catch(function (error) { - assert.instanceOf(error, Error); - done(); - }); - - }); - it('should fail with on("error", ...) when subscribing and check for receipt and code if "sendTransaction" and deploying contract: error if receipt has no contract address', function (done) { - var send = failOnMissingAddress(); - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: '0xa123456', - gasPrice: '23435234234' - }).on('error', function (error) { - assert.instanceOf(error, Error); - }).catch(function (error) { - // also run catch! - assert.instanceOf(error, Error); - done(); - }); - - }); - - var failOnTimeout = function () { - var provider = new FakeIpcProvider(); - var eth = new Eth(provider); - var method = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - method.setRequestManager(eth._requestManager, eth); - - // generate send function - var send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - data: '0xa123456', - gasPrice: "0x574d94bba" - }]); - }); - provider.injectResult('0x1234567453543456321456321'); // tx hash - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult('0x1234567'); // subscription id - - // fire 50 fake newBlocks - for (i = 0; i < 51; i++) { - setTimeout(function () { - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }); - },i); - - // receipt - provider.injectResult(null); - } - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234567453543456321456321']); - }); - - return send; - - }; - - it('should fail with promise when subscribing and check for receipt and code if "sendTransaction" and deploying contract: if not receipt after 50 blocks', function (done) { - var send = failOnTimeout(); - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: '0xa123456', - gasPrice: '23435234234' - }).catch(function (error) { - assert.instanceOf(error, Error); - done(); - }); - }); - it('should fail with on("error", ...) when subscribing and check for receipt and code if "sendTransaction" and deploying contract: if not receipt after 50 blocks', function (done) { - var send = failOnTimeout(); - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - data: '0xa123456', - gasPrice: '23435234234' - }).on('error', function (error) { - assert.instanceOf(error, Error); - done(); - }); - - }); - - it('should give confirmation receipts with on("confirmation", ...) when subscribing "sendTransaction"', function (done) { - var provider = new FakeIpcProvider(); - var eth = new Eth(provider); - var method = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - method.setRequestManager(eth._requestManager, eth); - - // generate send function - var send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - gasPrice: "0x574d94bba" - }]); - }); - provider.injectResult('0x1234567453543456321456321'); // tx hash - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult('0x1234567'); // subscription id - - // fire 50 fake newBlocks - for (i = 0; i < 30; i++) { - - setTimeout(function () { - provider.injectNotification({ - method: 'eth_subscription', - params: { - subscription: '0x1234567', - result: { - blockNumber: '0x10' - } - } - }); - }, i); - - // receipt - provider.injectResult({ - contractAddress: null, - cumulativeGasUsed: '0xa', - transactionIndex: '0x3', - blockNumber: '0xa', - blockHash: '0xafff', - gasUsed: '0x0' - }); - } - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234567453543456321456321']); - }); - - - var countConf = 0; - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - gasPrice: '23435234234' - }) - .on('transactionHash', function(result){ - assert.deepEqual(result, '0x1234567453543456321456321'); - }) - .on('receipt', function(result){ - - assert.deepEqual(result, { - contractAddress: null, - cumulativeGasUsed: 10, - transactionIndex: 3, - blockNumber: 10, - blockHash: '0xafff', - gasUsed: 0 - }); - - }) - .on('confirmation', function (conf, receipt) { - - assert.deepEqual(receipt, { - contractAddress: null, - cumulativeGasUsed: 10, - transactionIndex: 3, - blockNumber: 10, - blockHash: '0xafff', - gasUsed: 0 - }); - - assert.deepEqual(conf, countConf); - - countConf++; - - if(conf === 12) { - done(); - } - }); - - }); - - it('should subscribe to new blocks if using IpcProvider', function (done) { - const provider = new FakeIpcProvider(); - const eth = new Eth(provider); - - const method = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - method.setRequestManager(eth._requestManager, eth); - - // generate send function - const send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - value: '0xa', - gasPrice: "0x574d94bba" - }]); - }); - provider.injectResult('0x1234567453543456321456321'); // tx hash - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234567453543456321456321']); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - // here is the check. - // will be `eth_subscribe` if subscribing. - // will be `eth_getTransactionReceipt` if polling. - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - done(); - }); - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - value: '0xa', - gasPrice: '23435234234' - }) - }); - - it('should use polling if using HttpProvider', function (done) { - const provider = new FakeHttpProvider(); - const eth = new Eth(provider); - - const method = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - method.setRequestManager(eth._requestManager, eth); - - // generate send function - const send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - value: '0xa', - gasPrice: "0x574d94bba" - }]); - }); - provider.injectResult('0x1234567453543456321456321'); // tx hash - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234567453543456321456321']); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - // here is the check. - // will be `eth_subscribe` if subscribing. - // will be `eth_getTransactionReceipt` if polling. - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234567453543456321456321']); - done(); - }); - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - value: '0xa', - gasPrice: '23435234234' - }) - }); - - it('should use polling if using provider with method `on` but no subscription capabilities', function (done) { - this.timeout(5000); - - const provider = new FakeHttpProvider(); - // provider with method 'on' but no subscription capabilities should use polling - provider.on = (...args) => {} - const eth = new Eth(provider); - - const method = new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter] - }); - method.setRequestManager(eth._requestManager, eth); - - // generate send function - const send = method.buildCall(); - - // add results - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_sendTransaction'); - assert.deepEqual(payload.params, [{ - from: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', - value: '0xa', - gasPrice: "0x574d94bba" - }]); - }); - provider.injectResult('0x1234567453543456321456321'); // tx hash - - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234567453543456321456321']); - }); - provider.injectResult(null); - - provider.injectValidation(function (payload) { - // here is the check. - // first will try subscribing with `eth_subscribe`. - assert.equal(payload.method, 'eth_subscribe'); - assert.deepEqual(payload.params, ['newHeads']); - }); - provider.injectResult(null); - - // after failing with `eth_subscribe`, - // it should start polling with `eth_getTransactionReceipt` - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234567453543456321456321']); - }); - provider.injectResult(null); - - // second poll - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234567453543456321456321']); - }); - provider.injectResult(null); - - // third poll - provider.injectValidation(function (payload) { - assert.equal(payload.method, 'eth_getTransactionReceipt'); - assert.deepEqual(payload.params, ['0x1234567453543456321456321']); - done(); - }); - provider.injectResult(null); - - send({ - from: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', - value: '0xa', - gasPrice: '23435234234' - }) - }); - }); -}); - diff --git a/test/method.extractCallback.js b/test/method.extractCallback.js deleted file mode 100644 index e95759c3254..00000000000 --- a/test/method.extractCallback.js +++ /dev/null @@ -1,52 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Method = require('../packages/web3-core-method'); - -describe('lib/web3/method', function () { - describe('extractCallback', function () { - it('should extract callback', function () { - - // given - var method = new Method({name: 'something', call: 'eth_something'}); - var callback = function () { }; - var args = [1, callback] - - // when - var result = method.extractCallback(args); - - // then - assert.equal(args.length, 1); - assert.equal(callback, result); - }); - - it('should extract callback created using newFunction', function () { - - // given - var method = new Method({name: 'something', call: 'eth_something'}); - var callback = new Function (); - var args = [1, callback] - - // when - var result = method.extractCallback(args); - - // then - assert.equal(args.length, 1); - assert.equal(callback, result); - }); - - it('should not extract the callback', function () { - - // given - var method = new Method({name: 'something', call: 'eth_something'}); - var args = [1, 2] - - // when - var result = method.extractCallback(args); - - // then - assert.equal(args.length, 2); - assert.equal(result, null); - }); - }); -}); - diff --git a/test/method.formatInput.js b/test/method.formatInput.js deleted file mode 100644 index 2f11623d8f4..00000000000 --- a/test/method.formatInput.js +++ /dev/null @@ -1,42 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Method = require('../packages/web3-core-method'); - -describe('lib/web3/method', function () { - describe('formatInput', function () { - it('should format plain input', function () { - - // given - var star = function (arg) { - return arg + '*'; - }; - - var method = new Method({ - name: 'something', call: 'eth_something', - inputFormatter: [star, star, star] - }); - var args = ['1','2','3']; - var expectedArgs = ['1*', '2*', '3*']; - - // when - var result = method.formatInput(args); - - // then - assert.deepEqual(result, expectedArgs); - }); - - it('should do nothing if there is no formatter', function () { - - // given - var method = new Method({name: 'something', call: 'eth_something'}); - var args = [1,2,3]; - - // when - var result = method.formatInput(args); - - // then - assert.deepEqual(result, args); - }); - }); -}); - diff --git a/test/method.formatOutput.js b/test/method.formatOutput.js deleted file mode 100644 index ca55c1370f1..00000000000 --- a/test/method.formatOutput.js +++ /dev/null @@ -1,84 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Method = require('../packages/web3-core-method'); - -describe('lib/web3/method', function () { - describe('formatOutput', function () { - it('should format plain output', function () { - - // given - var formatter = function (arg) { - return arg + '*'; - }; - - var method = new Method({ - name: 'something', call: 'eth_something', - outputFormatter: formatter - }); - var args = '1'; - var expectedArgs = '1*'; - - // when - var result = method.formatOutput(args); - - // then - assert.deepEqual(result, expectedArgs); - }); - - it('should format plain output if array', function () { - - // given - var formatter = function (arg) { - return arg + '*'; - }; - - var method = new Method({ - name: 'something', call: 'eth_something', - outputFormatter: formatter - }); - var args = '1'; - var expectedArgs = ['1*', '1*']; - - // when - var result = method.formatOutput([args, args]); - - // then - assert.deepEqual(result, expectedArgs); - }); - - it('should format output arrays with the same formatter', function () { - - // given - var formatter = function (arg) { - return arg + '*'; - }; - - var method = new Method({ - name: 'something', call: 'eth_something', - outputFormatter: formatter - }); - var args = ['1','2','3']; - var expectedArgs = ['1*', '2*', '3*']; - - // when - var result = method.formatOutput(args); - - // then - assert.deepEqual(result, expectedArgs); - }); - - it('should do nothing if there is no formatter', function () { - - // given - var method = new Method({name: 'something', call: 'eth_something'}); - var args = [1,2,3]; - - // when - var result = method.formatOutput(args); - - // then - assert.deepEqual(result, args); - }); - }); -}); - diff --git a/test/method.getCall.js b/test/method.getCall.js deleted file mode 100644 index 41413bb6f69..00000000000 --- a/test/method.getCall.js +++ /dev/null @@ -1,48 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Method = require('../packages/web3-core-method'); - -describe('lib/web3/method', function () { - describe('getCall', function () { - it('should return call name', function () { - - // given - var call = 'hello_call_world'; - var method = new Method({ - name: 'something', - call: call - }); - - // when - var result = method.getCall(); - - // then - assert.equal(call, result); - }); - - it('should return call based on args', function () { - - // given - var call = function (args) { - return args ? args.length.toString() : '0'; - }; - - var method = new Method({ - name: 'something', - call: call - }); - - // when - var r0 = method.getCall(); - var r1 = method.getCall([1]); - var r2 = method.getCall([1, 2]); - - // then - assert.equal(r0, '0'); - assert.equal(r1, '1'); - assert.equal(r2, '2'); - - }); - }); -}); - diff --git a/test/method.validateArgs.js b/test/method.validateArgs.js deleted file mode 100644 index df9cfed75d3..00000000000 --- a/test/method.validateArgs.js +++ /dev/null @@ -1,49 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var Method = require('../packages/web3-core-method'); -var errors = require('../packages/web3-core-helpers/src/errors'); - -describe('lib/web3/method', function () { - describe('validateArgs', function () { - it('should pass', function () { - - // given - var method = new Method({ - name: 'something', call: 'eth_something', - params: 1 - }); - - var args = [1]; - var args2 = ['heloas']; - - // when - var test = function () { method.validateArgs(args); }; - var test2 = function () { method.validateArgs(args2); }; - - // then - assert.doesNotThrow(test); - assert.doesNotThrow(test2); - }); - - it('should return call based on args', function () { - - // given - var method = new Method({ - name: 'something', - call: 'eth_something', - params: 2 - }); - - var args = [1]; - var args2 = ['heloas', '12', 3]; - - // when - var test = function () { method.validateArgs(args); }; - var test2 = function () { method.validateArgs(args2); }; - - // then - assert.throws(test, errors.InvalidNumberOfParams(1, 2, 'something').message); - assert.throws(test2, errors.InvalidNumberOfParams(3, 2, 'something').message); - }); - }); -}); diff --git a/test/mocha.opts b/test/mocha.opts deleted file mode 100644 index ff593c4d252..00000000000 --- a/test/mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---reporter dot diff --git a/test/personal.getAccounts.js b/test/personal.getAccounts.js deleted file mode 100644 index 7f342fba133..00000000000 --- a/test/personal.getAccounts.js +++ /dev/null @@ -1,12 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'getAccounts'; - - -var tests = [{ - result: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], - formattedResult: ['0x47D33b27Bb249a2DBab4C0612BF9CaF4C1950855'], // checksum address - call: 'personal_listAccounts' -}]; - -testMethod.runTests(['eth','personal'], method, tests); diff --git a/test/personal.lockAccount.js b/test/personal.lockAccount.js deleted file mode 100644 index 14b838c0f4f..00000000000 --- a/test/personal.lockAccount.js +++ /dev/null @@ -1,20 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'lockAccount'; - - -var tests = [{ - args: ['0x47D33b27Bb249a2DBab4C0612BF9CaF4C1950855'], // checksum address - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], - result: true, - formattedResult: true, - call: 'personal_'+ method -},{ - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], - result: true, - formattedResult: true, - call: 'personal_'+ method -}]; - -testMethod.runTests(['eth','personal'], method, tests); diff --git a/test/personal.newAccount.js b/test/personal.newAccount.js deleted file mode 100644 index f7cbac3d6e4..00000000000 --- a/test/personal.newAccount.js +++ /dev/null @@ -1,15 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'newAccount'; - - -var tests = [{ - args: ['P@ssw0rd!'], - formattedArgs: ['P@ssw0rd!'], - result: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855'], - formattedResult: ['0x47D33b27Bb249a2DBab4C0612BF9CaF4C1950855'], // checksum address - call: 'personal_newAccount' -}]; - -testMethod.runTests(['eth','personal'], method, tests); - diff --git a/test/personal.sendTransaction.js b/test/personal.sendTransaction.js deleted file mode 100644 index 7f2a3494bfe..00000000000 --- a/test/personal.sendTransaction.js +++ /dev/null @@ -1,88 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'sendTransaction'; - - -var tests = [{ - args: [{ - from: '0xdbdbdB2cBD23b783741e8d7fcF51e459b497e4a6', // checksum address - to: '0xdbdbdB2cBD23b783741e8d7fcF51e459b497e4a6', // checksum address - value: '1234567654321', - gasPrice: '324234234234' - }, 'SomePass@Word!'], - formattedArgs: [{ - from: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - to: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - value: "0x11f71f76bb1", - gasPrice: '0x4b7dddc97a' - }, 'SomePass@Word!'], - result: '0xfff12345678976543213456786543212345675432', - formattedResult: '0xfff12345678976543213456786543212345675432', - // notification: { - // method: 'eth_subscription', - // params: { - // subscription: '0x1234567', - // result: '0x9ce59a13059e417087c02d3236a0b1cc' - // } - // }, - call: 'personal_'+ method -},{ - args: [{ - from: '0XDBDBDB2CBD23B783741E8D7FCF51E459B497E4A6', - to: '0XDBDBDB2CBD23B783741E8D7FCF51E459B497E4A6', - value: '1234567654321', - data: '0x213453ffffff', - gasPrice: '324234234234' - }, 'SomePass@Word!'], - formattedArgs: [{ - from: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - to: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - value: "0x11f71f76bb1", - data: '0x213453ffffff', - gasPrice: '0x4b7dddc97a' - }, 'SomePass@Word!'], - result: '0x12345678976543213456786543212345675432', - formattedResult: '0x12345678976543213456786543212345675432', - // notification: { - // method: 'eth_subscription', - // params: { - // subscription: '0x1234567', - // result: '0x9ce59a13059e417087c02d3236a0b1cc' - // } - // }, - call: 'personal_'+ method -},{ - args: [{ - from: 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS', // iban address - to: '0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', - value: '1234567654321', - gasPrice: '324234234234' - }, 'SomePass@Word!'], - formattedArgs: [{ - from: "0x00c5496aee77c1ba1f0854206a26dda82a81d6d8", - to: "0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6", - value: "0x11f71f76bb1", - gasPrice: '0x4b7dddc97a' - }, 'SomePass@Word!'], - result: '0x12345678976543213456786543212345675432', - formattedResult: '0x12345678976543213456786543212345675432', - // notification: { - // method: 'eth_subscription', - // params: { - // subscription: '0x1234567', - // result: '0x9ce59a13059e417087c02d3236a0b1cc' - // } - // }, - call: 'personal_'+ method -},{ - error: true, // only for testing - args: [{ - from: 'XE81ETHXREGGAVOFYORK', // iban address - to: '0xdbdbdb2cbd23b783741e8d7fcf51e459b497e4a6', - value: '1234567654321' - }, 'SomePass@Word!'], - call: 'personal_'+ method -}]; - -testMethod.runTests(['eth','personal'], method, tests); - diff --git a/test/personal.unlockAccount.js b/test/personal.unlockAccount.js deleted file mode 100644 index 0bbdf85420c..00000000000 --- a/test/personal.unlockAccount.js +++ /dev/null @@ -1,20 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); - -var method = 'unlockAccount'; - - -var tests = [{ - args: ['0x47D33b27Bb249a2DBab4C0612BF9CaF4C1950855', 'P@ssw0rd!'], // checksum address - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 'P@ssw0rd!', null], - result: true, - formattedResult: true, - call: 'personal_'+ method -},{ - args: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 'P@ssw0rd!', 10], - formattedArgs: ['0x47d33b27bb249a2dbab4c0612bf9caf4c1950855', 'P@ssw0rd!', 10], - result: true, - formattedResult: true, - call: 'personal_'+ method -}]; - -testMethod.runTests(['eth','personal'], method, tests); diff --git a/test/personal_methods.js b/test/personal_methods.js deleted file mode 100644 index 7fb7258a5bc..00000000000 --- a/test/personal_methods.js +++ /dev/null @@ -1,20 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var u = require('./helpers/test.utils.js'); -var Personal = require('../packages/web3-eth-personal'); -var personal = new Personal(); - -describe('web3.net', function() { - describe('methods', function() { - u.methodExists(personal, 'getAccounts'); - u.methodExists(personal, 'newAccount'); - u.methodExists(personal, 'unlockAccount'); - u.methodExists(personal, 'lockAccount'); - u.methodExists(personal, 'sendTransaction'); - - u.propertyExists(personal, 'net'); - u.methodExists(personal.net, 'getId'); - u.methodExists(personal.net, 'isListening'); - u.methodExists(personal.net, 'getPeerCount'); - }); -}); diff --git a/test/provider.js b/test/provider.js deleted file mode 100644 index 4badfb4ae55..00000000000 --- a/test/provider.js +++ /dev/null @@ -1,175 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var net = require('net'); - -var Eth = require('../packages/web3-eth'); -var Shh = require('../packages/web3-shh'); -var Net = require('../packages/web3-net'); -var Web3 = require('../packages/web3'); - - -var tests = [{ - providerParams: ['http://localhost:8545'], - providerType: 'HttpProvider', - package: Web3 -},{ - providerParams: ['HTTP://localhost:8545'], - providerType: 'HttpProvider', - package: Web3 -},{ - providerParams: ['ws://localhost:8546'], - providerType: 'WebsocketProvider', - package: Web3 -},{ - providerParams: ['WS://localhost:8546'], - providerType: 'WebsocketProvider', - package: Web3 -},{ - providerParams: ['wss://user1:passw0rd@localhost:8546'], - providerType: 'WebsocketProvider', - package: Web3 -},{ - providerParams: ['/.ethereum/my/path/geth.ipc', net], - providerType: 'IpcProvider', - package: Web3 -},{ - providerParams: ['\\\\.\\pipe\\geth.ipc', net], - providerType: 'IpcProvider', - package: Web3 -},{ - providerParams: ['://hello.com:1234'], - package: Web3, - error: true -}, - - { - providerParams: ['http://localhost:8545'], - providerType: 'HttpProvider', - package: Net - },{ - providerParams: ['HTTP://localhost:8545'], - providerType: 'HttpProvider', - package: Net - },{ - providerParams: ['ws://localhost:8546'], - providerType: 'WebsocketProvider', - package: Net - },{ - providerParams: ['WS://localhost:8546'], - providerType: 'WebsocketProvider', - package: Net - },{ - providerParams: ['/.ethereum/my/path/geth.ipc', net], - providerType: 'IpcProvider', - package: Net - },{ - providerParams: ['\\\\.\\pipe\\geth.ipc', net], - providerType: 'IpcProvider', - package: Net - },{ - providerParams: ['://hello.com:1234'], - package: Net, - error: true - }, - - { - providerParams: ['http://localhost:8545'], - providerType: 'HttpProvider', - package: Shh - },{ - providerParams: ['HTTP://localhost:8545'], - providerType: 'HttpProvider', - package: Shh - },{ - providerParams: ['ws://localhost:8546'], - providerType: 'WebsocketProvider', - package: Shh - },{ - providerParams: ['WS://localhost:8546'], - providerType: 'WebsocketProvider', - package: Shh - },{ - providerParams: ['/.ethereum/my/path/geth.ipc', net], - providerType: 'IpcProvider', - package: Shh - },{ - providerParams: ['\\\\.\\pipe\\geth.ipc', net], - providerType: 'IpcProvider', - package: Shh - },{ - providerParams: ['://hello.com:1234'], - package: Shh, - error: true - }, - - { - providerParams: ['http://localhost:8545'], - providerType: 'HttpProvider', - package: Eth - },{ - providerParams: ['HTTP://localhost:8545'], - providerType: 'HttpProvider', - package: Eth - },{ - providerParams: ['ws://localhost:8546'], - providerType: 'WebsocketProvider', - package: Eth - },{ - providerParams: ['WS://localhost:8546'], - providerType: 'WebsocketProvider', - package: Eth - },{ - providerParams: ['/.ethereum/my/path/geth.ipc', net], - providerType: 'IpcProvider', - package: Eth - },{ - providerParams: ['\\\\.\\pipe\\geth.ipc', net], - providerType: 'IpcProvider', - package: Eth - },{ - providerParams: ['://hello.com:1234'], - package: Eth, - error: true - }]; - -describe('web3', function () { - describe('automatic provider selection', function () { - tests.forEach(function (test, index) { - - if(!test.error) { - it('initiates on package level', function () { - - var pkg = new test.package(test.providerParams[0], test.providerParams[1]); - assert.equal(pkg.currentProvider.constructor.name, test.providerType); - - }); - - it('initiates using setProvider', function () { - - var pkg = new test.package(); - assert.equal(pkg.currentProvider, null); - - pkg.setProvider.apply(pkg, test.providerParams); - assert.equal(pkg.currentProvider.constructor.name, test.providerType); - - }); - - } else { - it('can\'t autodetect the provider', function () { - - assert.throws(function(){ new test.package(test.providerParams[0]); }); - - - }); - it('can\'t autodetect the provider when using setProvider', function () { - - var pkg = new test.package(); - assert.throws(function(){ pkg.setProvider(test.providerParams[0]); }); - - - }); - } - }); - }); -}); - diff --git a/test/requestmanager.js b/test/requestmanager.js deleted file mode 100644 index 05f7cf95a5c..00000000000 --- a/test/requestmanager.js +++ /dev/null @@ -1,28 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var FakeHttpProvider = require('./helpers/FakeIpcProvider'); -var requestManager = require('../packages/web3-core-requestmanager'); - -// TODO: handling errors! -// TODO: validation of params! - -describe('lib/web3/requestmanager', function () { - describe('send', function () { - it('should return expected result asynchronously', function (done) { - var provider = new FakeHttpProvider(); - var manager = new requestManager.Manager(provider); - var expected = 'hello_world'; - provider.injectResult(expected); - - manager.send({ - method: 'test', - params: [1,2,3] - }, function (error, result) { - assert.equal(error, null); - assert.equal(expected, result); - done(); - }); - }); - }); -}); - diff --git a/test/setProvider.js b/test/setProvider.js deleted file mode 100644 index b238d8c190a..00000000000 --- a/test/setProvider.js +++ /dev/null @@ -1,245 +0,0 @@ -var FakeIpcProvider = require('./helpers/FakeIpcProvider'); -var FakeHttpProvider = require('./helpers/FakeHttpProvider'); - -// // set the etheeumProvider -// var provider1 = new FakeHttpProvider(); -// var provider2 = new FakeIpcProvider(); -// provider1.bzz = 'http://givenProvider:8500'; -// provider2.bzz = 'http://swarm-gateways.net'; -// -// if (typeof window !== 'undefined') { -// global.ethereumProvider = provider1; -// } -// if (typeof window !== 'undefined') { -// window.ethereumProvider = provider1; -// } - - -var chai = require('chai'); -var assert = chai.assert; -var Web3 = require('../packages/web3'); -var Eth = require('../packages/web3-eth'); -var Shh = require('../packages/web3-shh'); -var Personal = require('../packages/web3-eth-personal'); -var Accounts = require('../packages/web3-eth-accounts'); -var Contract = require('../packages/web3-eth-contract'); -var Net = require('../packages/web3-net'); -var Bzz = require('../packages/web3-bzz'); - - -var tests = [{ - Lib: Web3 -},{ - Lib: Eth -},{ - Lib: Shh -},{ - Lib: Personal -},{ - Lib: Net -},{ - Lib: Accounts -},{ - Lib: Bzz, - swarm: true -}]; - - - -describe('lib/web3/setProvider', function () { - it('Web3 submodules should set the provider using constructor', function () { - - var provider1 = new FakeHttpProvider(); - var provider2 = new FakeIpcProvider(); - provider1.bzz = 'http://localhost:8500'; - provider2.bzz = 'http://swarm-gateways.net'; - - var provider3 = new FakeHttpProvider(); - provider3.bzz = 'http://localhost2:8500'; - - var lib = new Web3(provider1); - var lib2 = new Web3(provider3); - - assert.equal(lib.eth.currentProvider.constructor.name, provider1.constructor.name); - assert.equal(lib.eth.net.currentProvider.constructor.name, provider1.constructor.name); - assert.equal(lib.eth.personal.currentProvider.constructor.name, provider1.constructor.name); - assert.equal(lib.eth.Contract.currentProvider.constructor.name, provider1.constructor.name); - assert.equal(lib.eth.accounts.currentProvider.constructor.name, provider1.constructor.name); - assert.equal(lib.shh.currentProvider.constructor.name, provider1.constructor.name); - assert.equal(lib.bzz.currentProvider, provider1.bzz); - - assert.equal(lib.eth._requestManager.provider.constructor.name, provider1.constructor.name); - assert.equal(lib.eth.net._requestManager.provider.constructor.name, provider1.constructor.name); - assert.equal(lib.eth.personal._requestManager.provider.constructor.name, provider1.constructor.name); - assert.equal(lib.eth.Contract._requestManager.provider.constructor.name, provider1.constructor.name); - assert.equal(lib.eth.accounts._requestManager.provider.constructor.name, provider1.constructor.name); - assert.equal(lib.shh._requestManager.provider.constructor.name, provider1.constructor.name); - - assert.equal(lib2.eth.currentProvider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.net.currentProvider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.personal.currentProvider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.Contract.currentProvider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.accounts.currentProvider.constructor.name, provider3.constructor.name); - assert.equal(lib2.shh.currentProvider.constructor.name, provider3.constructor.name); - assert.equal(lib2.bzz.currentProvider, provider3.bzz); - - assert.equal(lib2.eth._requestManager.provider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.net._requestManager.provider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.personal._requestManager.provider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.Contract._requestManager.provider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.accounts._requestManager.provider.constructor.name, provider3.constructor.name); - assert.equal(lib2.shh._requestManager.provider.constructor.name, provider3.constructor.name); - - - lib.setProvider(provider2); - - assert.equal(lib.eth.currentProvider.constructor.name, provider2.constructor.name); - assert.equal(lib.eth.net.currentProvider.constructor.name, provider2.constructor.name); - assert.equal(lib.eth.personal.currentProvider.constructor.name, provider2.constructor.name); - assert.equal(lib.eth.Contract.currentProvider.constructor.name, provider2.constructor.name); - assert.equal(lib.eth.accounts.currentProvider.constructor.name, provider2.constructor.name); - assert.equal(lib.shh.currentProvider.constructor.name, provider2.constructor.name); - assert.equal(lib.bzz.currentProvider, provider2.bzz); - - assert.equal(lib.eth._requestManager.provider.constructor.name, provider2.constructor.name); - assert.equal(lib.eth.net._requestManager.provider.constructor.name, provider2.constructor.name); - assert.equal(lib.eth.personal._requestManager.provider.constructor.name, provider2.constructor.name); - assert.equal(lib.eth.Contract._requestManager.provider.constructor.name, provider2.constructor.name); - assert.equal(lib.eth.accounts._requestManager.provider.constructor.name, provider2.constructor.name); - assert.equal(lib.shh._requestManager.provider.constructor.name, provider2.constructor.name); - - assert.equal(lib2.eth.currentProvider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.net.currentProvider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.personal.currentProvider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.Contract.currentProvider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.accounts.currentProvider.constructor.name, provider3.constructor.name); - assert.equal(lib2.shh.currentProvider.constructor.name, provider3.constructor.name); - assert.equal(lib2.bzz.currentProvider, provider3.bzz); - - assert.equal(lib2.eth._requestManager.provider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.net._requestManager.provider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.personal._requestManager.provider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.Contract._requestManager.provider.constructor.name, provider3.constructor.name); - assert.equal(lib2.eth.accounts._requestManager.provider.constructor.name, provider3.constructor.name); - assert.equal(lib2.shh._requestManager.provider.constructor.name, provider3.constructor.name); - - - }); - - it('Bzz should set automatically to ethereumProvider', function () { - - var provider1 = new FakeHttpProvider(); - provider1.bzz = 'http://localhost:8500'; - var provider2 = new FakeIpcProvider(); - provider2.bzz = 'http://focalhost:8500'; - - // was set in test/1_givenProvider-ethereumProvider.js - var lib = new Bzz(provider1); - - assert.equal(lib.currentProvider, provider1.bzz); - - - lib.setProvider(provider2); - - assert.equal(lib.currentProvider, provider2.bzz); - - - }); - - tests.forEach(function (test) { - it(test.Lib.name +' should set the provider using constructor', function () { - - var provider1 = new FakeHttpProvider(); - var lib; - - - if(test.swarm) { - - lib = new test.Lib('http://localhost:8500'); - - assert.equal(lib.currentProvider, 'http://localhost:8500'); - - } else { - - lib = new test.Lib(provider1); - - assert.equal(lib.currentProvider.constructor.name, provider1.constructor.name); - assert.equal(lib._requestManager.provider.constructor.name, provider1.constructor.name); - } - - }); - it(test.Lib.name +' should set the provider using setProvider, after empty init', function () { - - var provider1 = new FakeHttpProvider(); - var lib = new test.Lib(); - - - - if(test.swarm) { - - assert.isNull(lib.currentProvider); - - lib.setProvider('http://localhost:8500'); - - assert.equal(lib.currentProvider, 'http://localhost:8500'); - - } else { - - assert.isNull(lib.currentProvider); - assert.isNull(lib._requestManager.provider); - - lib.setProvider(provider1); - - assert.equal(lib.currentProvider.constructor.name, provider1.constructor.name); - assert.equal(lib._requestManager.provider.constructor.name, provider1.constructor.name); - } - - }); - it(test.Lib.name +' should set the provider using constructor, and change later using setProvider', function () { - - var provider1 = new FakeHttpProvider(); - var provider2 = new FakeIpcProvider(); - var swarmProvider1 = 'http://localhost:8500'; - var swarmProvider2 = 'http://swarm-gateways.net'; - - var lib; - - - if(test.swarm) { - - lib = new test.Lib(swarmProvider1); - - assert.equal(lib.currentProvider, swarmProvider1); - - lib.setProvider(swarmProvider2); - - assert.equal(lib.currentProvider, swarmProvider2); - - lib.setProvider(swarmProvider1); - - assert.equal(lib.currentProvider, swarmProvider1); - - } else { - - lib = new test.Lib(provider1); - - assert.equal(lib.currentProvider.constructor.name, provider1.constructor.name); - assert.equal(lib._requestManager.provider.constructor.name, provider1.constructor.name); - - lib.setProvider(provider2); - - assert.equal(lib.currentProvider.constructor.name, provider2.constructor.name); - assert.equal(lib._requestManager.provider.constructor.name, provider2.constructor.name); - - lib.setProvider(provider1); - - assert.equal(lib.currentProvider.constructor.name, provider1.constructor.name); - assert.equal(lib._requestManager.provider.constructor.name, provider1.constructor.name); - } - - }); - }); - - -}); - diff --git a/test/shh.post.js b/test/shh.post.js deleted file mode 100644 index 5e270473305..00000000000 --- a/test/shh.post.js +++ /dev/null @@ -1,33 +0,0 @@ -var testMethod = require('./helpers/test.method.js'); -var utils = require('../packages/web3-utils'); - -var method = 'post'; - -var tests = [{ - args: [{ - symKeyID: '123123123ff', - sig: '44ffdd55', - topic: '0xffdd11', - payload: utils.numberToHex('12345'), - ttl: 100, - minPow: 0.5, - powTarget: 3, - padding: '0xffdd4455' - }], - formattedArgs: [{ - symKeyID: '123123123ff', - sig: '44ffdd55', - topic: '0xffdd11', - payload: utils.numberToHex('12345'), - ttl: 100, - minPow: 0.5, - powTarget: 3, - padding: '0xffdd4455' - }], - result: true, - formattedResult: true, - call: 'shh_'+ method -}]; - -testMethod.runTests('shh', method, tests); - diff --git a/test/shh.subscribe.js b/test/shh.subscribe.js deleted file mode 100644 index 507f74784df..00000000000 --- a/test/shh.subscribe.js +++ /dev/null @@ -1,59 +0,0 @@ -var testSubscription = require('./helpers/test.subscription.js'); - -// TODO discuss the whisper in and outputs with vlad! - -// NEW HEADS -var tests = [{ - protocol: 'shh', - args: ['messages', { - symKeyID: '0x234567432123423546532134536423134567865432', - minPow: 0.5, - topics: ['0x48656c6c','0x576f7264'], - allowP2P: false - }], - firstResult: '0x1234', - firstPayload: { - method: "shh_subscribe", - params: ['messages', { - symKeyID: '0x234567432123423546532134536423134567865432', - minPow: 0.5, - topics: ['0x48656c6c','0x576f7264'], - allowP2P: false - }] - }, - secondResult: true, - secondPayload: { - method: "shh_unsubscribe" - }, - subscriptions: [{ - subscription: '0x1234', - result: { - sig: "0x048229fb947363cf13bb9f9532e124f08840cd6287ecae6b537cda2947ec2b23dbdc3a07bdf7cd2bfb288c25c4d0d0461d91c719da736a22b7bebbcf912298d1e6", - ttl: 12, - timestamp: 1234567, - topic: "0x576f7264", - payload: "0x3456435243142fdf1d2312", - padding: "0xaaa3df1d231456435243142f456435243142f2", - pow: 0.4, - hash: "0xddaa3df1d231456435243142af45aa3df1d2314564352431426435243142f2", - recipientPublicKey: "0x04d1574d4eab8f3dde4d2dc7ed2c4d699d77cbbdd09167b8fffa0996" - } - }], - subscriptionResults: [{ - sig: "0x048229fb947363cf13bb9f9532e124f08840cd6287ecae6b537cda2947ec2b23dbdc3a07bdf7cd2bfb288c25c4d0d0461d91c719da736a22b7bebbcf912298d1e6", - ttl: 12, - timestamp: 1234567, - topic: "0x576f7264", - payload: "0x3456435243142fdf1d2312", - padding: "0xaaa3df1d231456435243142f456435243142f2", - pow: 0.4, - hash: "0xddaa3df1d231456435243142af45aa3df1d2314564352431426435243142f2", - recipientPublicKey: "0x04d1574d4eab8f3dde4d2dc7ed2c4d699d77cbbdd09167b8fffa0996" - }] -}]; - -testSubscription.runTests('shh', tests); - - - - diff --git a/test/shh_methods.js b/test/shh_methods.js deleted file mode 100644 index f8850459b13..00000000000 --- a/test/shh_methods.js +++ /dev/null @@ -1,32 +0,0 @@ -var u = require('./helpers/test.utils.js'); -var Shh = require('../packages/web3-shh'); -var shh = new Shh(); - -describe('shh', function() { - describe('methods', function() { - u.methodExists(shh, 'subscribe'); - - u.methodExists(shh, 'getVersion'); - u.methodExists(shh, 'getInfo'); - u.methodExists(shh, 'setMaxMessageSize'); - u.methodExists(shh, 'setMinPoW'); - u.methodExists(shh, 'markTrustedPeer'); - u.methodExists(shh, 'newKeyPair'); - u.methodExists(shh, 'addPrivateKey'); - u.methodExists(shh, 'deleteKeyPair'); - u.methodExists(shh, 'hasKeyPair'); - u.methodExists(shh, 'getPublicKey'); - u.methodExists(shh, 'getPrivateKey'); - u.methodExists(shh, 'newSymKey'); - u.methodExists(shh, 'addSymKey'); - u.methodExists(shh, 'generateSymKeyFromPassword'); - u.methodExists(shh, 'hasSymKey'); - u.methodExists(shh, 'getSymKey'); - u.methodExists(shh, 'deleteSymKey'); - u.methodExists(shh, 'newMessageFilter'); - u.methodExists(shh, 'getFilterMessages'); - u.methodExists(shh, 'deleteMessageFilter'); - u.methodExists(shh, 'post'); - }); -}); - diff --git a/test/sources/Basic.json b/test/sources/Basic.json deleted file mode 100644 index 14dcb5aa304..00000000000 --- a/test/sources/Basic.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "contractName": "Basic", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "val", - "type": "uint256" - } - ], - "name": "BasicEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "str", - "type": "string" - } - ], - "name": "IndexedStringEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "str", - "type": "string" - } - ], - "name": "StringEvent", - "type": "event" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "val", - "type": "uint256" - } - ], - "name": "firesEvent", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "firesIllegalUtf8StringEvent", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "string", - "name": "_str", - "type": "string" - } - ], - "name": "firesIndexedStringEvent", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "string", - "name": "_str", - "type": "string" - } - ], - "name": "firesStringEvent", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getValue", - "outputs": [ - { - "internalType": "uint256", - "name": "val", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "requireWithReason", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "requireWithoutReason", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "reverts", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - } - ], - "name": "setValue", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50610619806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c806360fea5e41161006657806360fea5e4146100f8578063844d6a32146101b357806385693803146101bd578063ae012ede1461020b578063b7a8238a1461021557610093565b806320965255146100985780633aebabe6146100b65780633bccbbc9146100c057806355241077146100ca575b600080fd5b6100a06102d0565b6040518082815260200191505060405180910390f35b6100be6102d9565b005b6100c8610343565b005b6100f6600480360360208110156100e057600080fd5b81019080803590602001909291905050506103b1565b005b6101b16004803603602081101561010e57600080fd5b810190808035906020019064010000000081111561012b57600080fd5b82018360208201111561013d57600080fd5b8035906020019184600183028401116401000000008311171561015f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506103bb565b005b6101bb61045a565b005b610209600480360360408110156101d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104d0565b005b610213610538565b005b6102ce6004803603602081101561022b57600080fd5b810190808035906020019064010000000081111561024857600080fd5b82018360208201111561025a57600080fd5b8035906020019184600183028401116401000000008311171561027c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610545565b005b60008054905090565b7f617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab6040518080602001828103825260158152602001807fefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbd000000000000000000000081525060200191505060405180910390a1565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f524556455254454420574954482052455645525400000000000000000000000081525060200191505060405180910390fd5b8060008190555050565b7f82dd7094dfd71d508c7a8ff013f3064664025068543bf228f7194a862cdfe3d7816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561041d578082015181840152602081019050610402565b50505050905090810190601f16801561044a5780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b60006104ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f524556455254454420574954482052455155495245000000000000000000000081525060200191505060405180910390fd5b565b807f929af6b98ce8455e51b1e90cceeeec03ce38d7c7396f1f0b0233d043c898a29c83604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25050565b600061054357600080fd5b565b7f617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab816040518080602001828103825283818151815260200191508051906020019080838360005b838110156105a757808201518184015260208101905061058c565b50505050905090810190601f1680156105d45780820380516001836020036101000a031916815260200191505b509250505060405180910390a15056fea265627a7a7231582069bac219e1bd2bb93a98f42a0d7aa83ba402f2168ab48df5ba385e348b9b3e8864736f6c634300050f0032", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c806360fea5e41161006657806360fea5e4146100f8578063844d6a32146101b357806385693803146101bd578063ae012ede1461020b578063b7a8238a1461021557610093565b806320965255146100985780633aebabe6146100b65780633bccbbc9146100c057806355241077146100ca575b600080fd5b6100a06102d0565b6040518082815260200191505060405180910390f35b6100be6102d9565b005b6100c8610343565b005b6100f6600480360360208110156100e057600080fd5b81019080803590602001909291905050506103b1565b005b6101b16004803603602081101561010e57600080fd5b810190808035906020019064010000000081111561012b57600080fd5b82018360208201111561013d57600080fd5b8035906020019184600183028401116401000000008311171561015f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506103bb565b005b6101bb61045a565b005b610209600480360360408110156101d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104d0565b005b610213610538565b005b6102ce6004803603602081101561022b57600080fd5b810190808035906020019064010000000081111561024857600080fd5b82018360208201111561025a57600080fd5b8035906020019184600183028401116401000000008311171561027c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610545565b005b60008054905090565b7f617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab6040518080602001828103825260158152602001807fefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbd000000000000000000000081525060200191505060405180910390a1565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f524556455254454420574954482052455645525400000000000000000000000081525060200191505060405180910390fd5b8060008190555050565b7f82dd7094dfd71d508c7a8ff013f3064664025068543bf228f7194a862cdfe3d7816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561041d578082015181840152602081019050610402565b50505050905090810190601f16801561044a5780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b60006104ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f524556455254454420574954482052455155495245000000000000000000000081525060200191505060405180910390fd5b565b807f929af6b98ce8455e51b1e90cceeeec03ce38d7c7396f1f0b0233d043c898a29c83604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25050565b600061054357600080fd5b565b7f617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab816040518080602001828103825283818151815260200191508051906020019080838360005b838110156105a757808201518184015260208101905061058c565b50505050905090810190601f1680156105d45780820380516001836020036101000a031916815260200191505b509250505060405180910390a15056fea265627a7a7231582069bac219e1bd2bb93a98f42a0d7aa83ba402f2168ab48df5ba385e348b9b3e8864736f6c634300050f0032", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/test/sources/Basic.sol b/test/sources/Basic.sol deleted file mode 100644 index 7d1871120c7..00000000000 --- a/test/sources/Basic.sol +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Source contract for Basic.json - */ -pragma solidity ^0.5.1; - -contract Basic { - - uint value; - event BasicEvent(address addr, uint indexed val); - event StringEvent(string str); - event IndexedStringEvent(string str); - - function getValue() public view returns (uint val) { - return value; - } - - function setValue(uint _value) public { - value = _value; - } - - function requireWithoutReason() public { - require(false); - } - - function requireWithReason() public { - require(false, 'REVERTED WITH REQUIRE'); - } - - function reverts() public { - revert('REVERTED WITH REVERT'); - } - - function firesEvent(address addr, uint val) public { - emit BasicEvent(addr, val); - } - - function firesStringEvent(string memory _str) public { - emit StringEvent(_str); - } - - function firesIndexedStringEvent(string memory _str) public { - emit IndexedStringEvent(_str); - } - - function firesIllegalUtf8StringEvent() public { - emit StringEvent('�������'); - } -} diff --git a/test/sources/Child.json b/test/sources/Child.json deleted file mode 100644 index b92d15b41f6..00000000000 --- a/test/sources/Child.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "contractName": "Child", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "childA", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "childB", - "type": "address" - } - ], - "name": "Identical", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "Similar", - "type": "event" - }, - { - "constant": false, - "inputs": [], - "name": "fireIdentical", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "fireSimilar", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50610142806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806339eb06131461003b578063e62f414814610045575b600080fd5b61004361004f565b005b61004d6100ad565b005b600073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f9b0c381f66eebc6aa094560f95fd7139c7d4e8c57ef35970d31529af03897b8960405160405180910390a3565b6001600073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb2cae8315bd3bec790522b2d91759938a5db9279c1ffabbc6a7d3575466245d160405160405180910390a456fea265627a7a7231582033099c95ce3ccb847b6cb79edc99bc8b6b78d98245a78a0dc5ae3c32796c54bf64736f6c634300050f0032", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806339eb06131461003b578063e62f414814610045575b600080fd5b61004361004f565b005b61004d6100ad565b005b600073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f9b0c381f66eebc6aa094560f95fd7139c7d4e8c57ef35970d31529af03897b8960405160405180910390a3565b6001600073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb2cae8315bd3bec790522b2d91759938a5db9279c1ffabbc6a7d3575466245d160405160405180910390a456fea265627a7a7231582033099c95ce3ccb847b6cb79edc99bc8b6b78d98245a78a0dc5ae3c32796c54bf64736f6c634300050f0032", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/test/sources/Misc.json b/test/sources/Misc.json deleted file mode 100644 index b56e47bce80..00000000000 --- a/test/sources/Misc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "contractName": "Misc", - "abi": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "bytecode": "0x6080604052348015600f57600080fd5b50603580601d6000396000f3fe6080604052600080fdfea165627a7a723058205b81906cade92d8eeda5d0627076490bd44b563a504fe790edbcd6afadbe359d0029", - "deployedBytecode": "0x6080604052600080fdfea165627a7a723058205b81906cade92d8eeda5d0627076490bd44b563a504fe790edbcd6afadbe359d0029", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/test/sources/Misc.sol b/test/sources/Misc.sol deleted file mode 100644 index 398114cee23..00000000000 --- a/test/sources/Misc.sol +++ /dev/null @@ -1,9 +0,0 @@ -pragma solidity ^0.5.1; - -contract Misc { - - string misc; - - constructor() public { - } -} diff --git a/test/sources/Parent.json b/test/sources/Parent.json deleted file mode 100644 index eddc62d2f83..00000000000 --- a/test/sources/Parent.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "contractName": "Parent", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "parentA", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "parentB", - "type": "address" - } - ], - "name": "Identical", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Similar", - "type": "event" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "a", - "type": "address" - } - ], - "name": "fireChildIdenticalEvent", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "a", - "type": "address" - } - ], - "name": "fireChildSimilarEvent", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806333953f3e1461003b578063cdaef7191461007f575b600080fd5b61007d6004803603602081101561005157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100c3565b005b6100c16004803603602081101561009557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610126565b005b8073ffffffffffffffffffffffffffffffffffffffff1663e62f41486040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561010b57600080fd5b505af115801561011f573d6000803e3d6000fd5b5050505050565b8073ffffffffffffffffffffffffffffffffffffffff166339eb06136040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561016e57600080fd5b505af1158015610182573d6000803e3d6000fd5b505050505056fea265627a7a723158201570ee9f18c1363a1ed9485e2163e981c47ef63669cd44ce420f350ed4949ad664736f6c634300050f0032", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806333953f3e1461003b578063cdaef7191461007f575b600080fd5b61007d6004803603602081101561005157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100c3565b005b6100c16004803603602081101561009557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610126565b005b8073ffffffffffffffffffffffffffffffffffffffff1663e62f41486040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561010b57600080fd5b505af115801561011f573d6000803e3d6000fd5b5050505050565b8073ffffffffffffffffffffffffffffffffffffffff166339eb06136040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561016e57600080fd5b505af1158015610182573d6000803e3d6000fd5b505050505056fea265627a7a723158201570ee9f18c1363a1ed9485e2163e981c47ef63669cd44ce420f350ed4949ad664736f6c634300050f0032", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/test/sources/ParentAndChild.sol b/test/sources/ParentAndChild.sol deleted file mode 100644 index f71b2796bf8..00000000000 --- a/test/sources/ParentAndChild.sol +++ /dev/null @@ -1,52 +0,0 @@ -pragma solidity ^0.5.0; - -// This contract models event signature shadowing when -// one contract calls another. Events `similar` and `identical` have -// the same signature but their arguments are processed differently -// because of indexing. - -contract Child { - // Three indexed args - event Similar( - address indexed _owner, - address indexed _approved, - uint256 indexed _tokenId - ); - - // Two indexed args - event Identical( - address indexed childA, - address indexed childB - ); - - function fireIdentical() public { - emit Identical(address(0), address(0)); - } - - function fireSimilar() public { - emit Similar(address(0), address(0), 1); - } -} - -contract Parent { - // Two (vs 3) indexed args, different names - event Similar( - address indexed owner, - address indexed spender, - uint256 value - ); - - // Two indexed args, named parent - event Identical( - address indexed parentA, - address indexed parentB - ); - - function fireChildIdenticalEvent(address a) public { - Child(a).fireIdentical(); - } - - function fireChildSimilarEvent(address a) public { - Child(a).fireSimilar(); - } -} diff --git a/test/sources/Reverts.json b/test/sources/Reverts.json deleted file mode 100644 index 1e42f067c20..00000000000 --- a/test/sources/Reverts.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "contractName": "Reverts", - "abi": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "bytecode": "0x6080604052348015600f57600080fd5b506000601a57600080fd5b603e8060276000396000f3fe6080604052600080fdfea265627a7a72315820fd31c994ac2f614e770a2ea9e63f6bc8f05f3e5aa1feb77ad79c3a778d594f4064736f6c634300050b0032", - "deployedBytecode": "0x6080604052600080fdfea265627a7a72315820fd31c994ac2f614e770a2ea9e63f6bc8f05f3e5aa1feb77ad79c3a778d594f4064736f6c634300050b0032", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/test/sources/Reverts.sol b/test/sources/Reverts.sol deleted file mode 100644 index ad79fd48cd7..00000000000 --- a/test/sources/Reverts.sol +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Source contract for Reverts.json - */ -pragma solidity ^0.5.1; - -contract Reverts { - - constructor() public { - require(false); - } -} diff --git a/test/utils.compareBlockNumbers.js b/test/utils.compareBlockNumbers.js deleted file mode 100644 index 71617da26b5..00000000000 --- a/test/utils.compareBlockNumbers.js +++ /dev/null @@ -1,58 +0,0 @@ -const chai = require('chai'); -const assert = chai.assert; -const BN = require('bn.js'); -const formatters = require('../packages/web3-utils/src/index.js'); - -const pending = "pending"; -const latest = "latest"; -const genesis = "genesis"; -const earliest = "earliest"; - -const tests = [ - // Base cases for numbers - { input: {a: 1, b: 1}, result: 0 }, - { input: {a: 1, b: 2}, result: -1 }, - { input: {a: 2, b: 1}, result: 1 }, - // Base cases for BN - { input: {a: new BN(1), b: new BN(1)}, result: 0 }, - { input: {a: new BN(1), b: new BN(2)}, result: -1 }, - { input: {a: new BN(2), b: new BN(1)}, result: 1 }, - // Base cases for numbers vs BN - { input: {a: new BN(1), b: 1}, result: 0 }, - { input: {a: new BN(1), b: 2}, result: -1 }, - { input: {a: new BN(2), b: 1}, result: 1 }, - // Base cases for strings (sanity) - { input: {a: genesis, b: earliest}, result: 0 }, - { input: {a: genesis, b: 0}, result: 0 }, - { input: {a: earliest, b: 0}, result: 0 }, - { input: {a: latest, b: latest}, result: 0 }, - { input: {a: pending, b: pending}, result: 0 }, - // Complex Strings - // Genesis - { input: {a: earliest, b: 2}, result: -1 }, - { input: {a: earliest, b: new BN(2)}, result: -1 }, - { input: {a: earliest, b: latest}, result: -1 }, - { input: {a: earliest, b: pending}, result: -1 }, - { input: {a: genesis, b: 2}, result: -1 }, - { input: {a: genesis, b: new BN(2)}, result: -1 }, - { input: {a: genesis, b: latest}, result: -1 }, - { input: {a: genesis, b: pending}, result: -1 }, - // latest - { input: {a: latest, b: 0}, result: 1 }, - { input: {a: latest, b: new BN(1)}, result: 1 }, - { input: {a: latest, b: pending}, result: -1 }, - // pending - { input: {a: pending, b: 0}, result: 1 }, - { input: {a: pending, b: new BN(1)}, result: 1 }, -]; - -describe('formatters', function () { - describe('compare blocknumbers', function () { - tests.forEach(function(test){ - it('should return the correct value', function () { - assert.deepEqual(formatters.compareBlockNumbers(test.input.a, test.input.b), test.result); - }); - }); - }); - -}); diff --git a/test/utils.encodePacked.js b/test/utils.encodePacked.js deleted file mode 100644 index a56f13d9609..00000000000 --- a/test/utils.encodePacked.js +++ /dev/null @@ -1,252 +0,0 @@ -var _ = require('underscore'); -var BN = require('bn.js'); -var BigNumber = require('bignumber.js'); -var chai = require('chai'); -var assert = chai.assert; -var utils = require('../packages/web3-utils'); - -// each "values" is one kind of parameter of the same type -var tests = [{ - values: [ - true, - {value: true, type: 'bool'}, - {v: true, t: 'bool'}, - {v: true, type: 'bool'}, - {value: true, t: 'bool'} - ], expected: '0x01' -},{ - values: [ - false, - {value: false, type: 'bool'}, - {v: false, t: 'bool'}, - {v: false, type: 'bool'}, - {value: false, t: 'bool'} - ], expected: '0x00' -},{ - values: [ - 'Hello!%', - {value: 'Hello!%', type: 'string'}, - {value: 'Hello!%', type: 'string'}, - {v: 'Hello!%', t: 'string'} - ], expected: '0x48656c6c6f2125' -},{ - values: [ - 2345676856, - '2345676856', - new BN('2345676856'), - new BigNumber('2345676856', 10), - {v: '2345676856', t: 'uint256'}, - {v: new BN('2345676856'), t: 'uint256'}, - {v: '2345676856', t: 'uint'} - ], expected: '0x000000000000000000000000000000000000000000000000000000008bd03038' -},{ - values: [ - '2342342342342342342345676856', - new BN('2342342342342342342345676856'), - new BigNumber('2342342342342342342345676856', 10), - {v: '2342342342342342342345676856', t: 'uint256'}, - {v: '2342342342342342342345676856', t: 'uint'} - ], expected: '0x000000000000000000000000000000000000000007918a48d0493ed3da6ed838' -// 5 -},{ - values: [ - {v: '56', t: 'uint8'} - ], expected: '0x38' -},{ - values: [ - {v: '256', t: 'uint16'} - ], expected: '0x0100' -},{ - values: [ - {v: '3256', t: 'uint32'} - ], expected: '0x00000cb8' -},{ - values: [ - {v: '454256', t: 'uint64'} - ], expected: '0x000000000006ee70' -},{ - values: [ - {v: '44454256', t: 'uint128'}, - {v: '44454256', t: 'int128'} // should be the same - ], expected: '0x00000000000000000000000002a65170' -},{ - values: [ - {v: '3435454256', t: 'uint160'} - ], expected: '0x00000000000000000000000000000000ccc4df30' -// 11 -},{ - values: [ - '0x2345435675432144555ffffffffdd222222222222224444556553522', - {v: '0x2345435675432144555ffffffffdd222222222222224444556553522', t: 'bytes'}, - {v: '2345435675432144555ffffffffdd222222222222224444556553522', t: 'bytes'}, - {error: true, v: '0x2345435675432144555ffffffffdd22222222222222444455655352', t: 'bytes'} - ], expected: '0x2345435675432144555ffffffffdd222222222222224444556553522' -},{ - values: [ - -3435454256, - new BN(-3435454256), - new BN('-3435454256'), - '-3435454256', - {v: '-3435454256', t: 'int'}, - {v: '-3435454256', t: 'int256'} - ], expected: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff333b20d0' -// 13 -},{ - values: [ - {v: '-36', t: 'int8'} - ], expected: '0xdc' -},{ - values: [ - {v: '0x22', t: 'bytes2'}, - {v: '22', t: 'bytes2'}, - {error: true, v: '0x222222', t: 'bytes2'} - ], expected: '0x2200' -},{ - values: [ - {v: '0x44222266', t: 'bytes4'}, - {v: '44222266', t: 'bytes4'} - ], expected: '0x44222266' -},{ - values: [ - {v: '0x44555ffffffffdd222222222222224444556553522', t: 'bytes32'}, - {v: '44555ffffffffdd222222222222224444556553522', t: 'bytes32'} - ], expected: '0x44555ffffffffdd2222222222222244445565535220000000000000000000000' -},{ - values: [ - '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', - '0x407d73d8a49eeb85D32Cf465507dd71d507100c1', // invalid checksum, should work as it is interpreted as address - {v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', t: 'address'}, - {error: true, v: '0x407d73d8a49eeb85D32Cf465507dd71d507100c1', t: 'address'}, - {v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', t: 'bytes'}, - {v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', t: 'bytes20'} - ], expected: '0x407d73d8a49eeb85d32cf465507dd71d507100c1' -// 18 -},{ - values: [ - {v: '36', t: 'int8'} - ], expected: '0x24' -},{ - values: [ - {v: '36', t: 'int256'} - ], expected: '0x0000000000000000000000000000000000000000000000000000000000000024' -},{ - values: [ - {v: [-12, 243], t: 'int[]'}, - {v: [-12, 243], t: 'int256[]'}, - {v: ['-12', '243'], t: 'int256[]'}, - {v: [new BN('-12'), new BN('243')], t: 'int256[]'}, - {v: ['-12', '243'], t: 'int256[2]'} - ], expected: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400000000000000000000000000000000000000000000000000000000000000f3' -},{ - values: [ - {v: [12, 243], t: 'uint[]'}, - {v: [12, 243], t: 'uint256[]'}, - {v: ['12', '243'], t: 'uint256[]'}, - {v: [new BN('12'), new BN('243')], t: 'uint256[]'}, - {v: ['12', '243'], t: 'uint256[2]'}, - {error: true, v: ['12', '243'], t: 'uint256[1]'} - ], expected: '0x000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000f3' -},{ - values: [ - {v: ['0x234656', '0x23434234234ffff456'], t: 'bytes32[]'}, - ], expected: '0x234656000000000000000000000000000000000000000000000000000000000023434234234ffff4560000000000000000000000000000000000000000000000' -},{ - values: [ - {v: '0x234656', t: 'bytes16'}, - {v: '234656', t: 'bytes16'} - ], expected: '0x23465600000000000000000000000000' -},{ - values: [ - {v: ['0x234656', '0x23434234234ffff456'], t: 'bytes16[]'}, - {v: ['234656', '23434234234ffff456'], t: 'bytes16[]'} - ], expected: '0x234656000000000000000000000000000000000000000000000000000000000023434234234ffff4560000000000000000000000000000000000000000000000' -},{ - values: [ - {v: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d'], t: 'address[]'}, - {v: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d'], t: 'address[2]'}, - {error: true, v: ['0x407d73d8a49eeb85D32Cf465507dd71d507100c1', '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d'], t: 'address[]'}, - {error: true, v: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d'], t: 'address[4]'} - ], expected: '0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c100000000000000000000000085f43d8a49eeb85d32cf465507dd71d507100c1d' -},{ - values: [ - {v: 0, t: 'uint'} - ], expected: '0x0000000000000000000000000000000000000000000000000000000000000000' -},{ - values: [ - ['someValue'] // should error - ], expected: '' -}]; - - -describe('web3.encodePacked', function () { - tests.forEach(function (test) { - test.values.forEach(function (value) { - it('should hash "'+ JSON.stringify(value) +'" into "'+ test.expected +'"', function() { - - if(value.error || _.isArray(value)) { - assert.throws(utils.encodePacked.bind(null, value)); - } else { - assert.deepEqual(utils.encodePacked(value), test.expected); - } - - }); - }); - }); - - it('should hash mixed boolean values in any order', function() { - - assert.deepEqual(utils.encodePacked( - tests[0].values[1], // true - tests[1].values[0], // false - tests[1].values[2], // false - tests[0].values[3] // true - ), '0x01000001'); - }); - - it('should hash mixed string and number values in any order', function() { - - assert.deepEqual(utils.encodePacked( - tests[2].values[0], // 'Hello!%' - tests[3].values[2], // 2345676856 - tests[4].values[2], // '2342342342342342342345676856' - tests[2].values[3], // 'Hello!%' - tests[1].values[2] // false - ), '0x48656c6c6f2125000000000000000000000000000000000000000000000000000000008bd03038000000000000000000000000000000000000000007918a48d0493ed3da6ed83848656c6c6f212500'); - }); - - it('should hash mixed number types in any order', function() { - - assert.deepEqual(utils.encodePacked( - tests[5].values[0], // v: '56', t: 'uint8' - tests[6].values[0], // v: '256', t: 'uint16' - tests[7].values[0], // v: '3256', t: 'uint32' - tests[8].values[0], // v: '454256', t: 'uint64' - tests[9].values[0], // v: '44454256', t: 'uint128' - tests[10].values[0] // v: '3435454256', t: 'uint160' - ), '0x38010000000cb8000000000006ee7000000000000000000000000002a6517000000000000000000000000000000000ccc4df30'); - }); - - it('should hash mixed number types addresses and boolean in any order', function() { - - assert.deepEqual(utils.encodePacked( - tests[5].values[0], // v: '56', t: 'uint8' - tests[13].values[0], // v: '-36', t: 'int8' - tests[15].values[0], // v: '0x44222266', t: 'bytes4' - tests[0].values[0], // true - tests[17].values[1] // v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', t: 'address' - ), '0x38dc4422226601407d73d8a49eeb85d32cf465507dd71d507100c1'); - }); - - it('should hash mixed number arrays addresses and boolean in any order', function() { - - assert.deepEqual(utils.encodePacked( - tests[15].values[1], // v: '0x44222266', t: 'bytes4' - tests[25].values[0], // address array - tests[0].values[0], // true - tests[13].values[0], // v: '-36', t: 'int8' - tests[12].values[5], // v: '-3435454256', t: 'int256' - tests[17].values[0], // 0x407D73d8a49eeb85D32Cf465507dd71d507100c1 - tests[17].values[1] // v: 0x407D73d8a49eeb85D32Cf465507dd71d507100c1 t: address - ), '0x44222266000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c100000000000000000000000085f43d8a49eeb85d32cf465507dd71d507100c1d01dcffffffffffffffffffffffffffffffffffffffffffffffffffffffff333b20d0407d73d8a49eeb85d32cf465507dd71d507100c1407d73d8a49eeb85d32cf465507dd71d507100c1'); - }); -}); diff --git a/test/utils.fromAscii.js b/test/utils.fromAscii.js deleted file mode 100644 index 7972919a0cd..00000000000 --- a/test/utils.fromAscii.js +++ /dev/null @@ -1,21 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var assert = chai.assert; - -var tests = [ - { value: 'myString', expected: '0x6d79537472696e67'}, - { value: 'myString\x00', expected: '0x6d79537472696e6700'}, - { value: '\u0003\u0000\u0000\u00005èÆÕL]\u0012|Î¾ž\u001a7«›\u00052\u0011(ЗY\n<\u0010\u0000\u0000\u0000\u0000\u0000\u0000e!ßd/ñõì\f:z¦Î¦±ç·÷Í¢Ëß\u00076*…\bŽ—ñžùC1ÉUÀé2\u001aӆBŒ', - expected: '0x0300000035e8c6d54c5d127c9dcebe9e1a37ab9b05321128d097590a3c100000000000006521df642ff1f5ec0c3a7aa6cea6b1e7b7f7cda2cbdf07362a85088e97f19ef94331c955c0e9321ad386428c'} -]; - -describe('lib/utils/utils', function () { - describe('asciiToHex', function () { - tests.forEach(function (test) { - it('should turn ' + test.value + ' to ' + test.expected, function () { - assert.strictEqual(utils.fromAscii(test.value), test.expected); - }); - }); - }); -}); diff --git a/test/utils.fromNumber.js b/test/utils.fromNumber.js deleted file mode 100644 index febbe5cc3bc..00000000000 --- a/test/utils.fromNumber.js +++ /dev/null @@ -1,45 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var assert = chai.assert; - -var tests = [ - { value: 1, expected: '0x1' }, - {value: '21345678976543214567869765432145647586', expected: '0x100f073a3d694d13d1615dc9bc3097e2'}, - { value: '1', expected: '0x1' }, - { value: '0x1', expected: '0x1'}, - { value: '0x01', expected: '0x1'}, - { value: 15, expected: '0xf'}, - { value: '15', expected: '0xf'}, - { value: '0xf', expected: '0xf'}, - { value: '0x0f', expected: '0xf'}, - { value: -1, expected: '-0x1'}, - { value: '-1', expected: '-0x1'}, - { value: '-0x1', expected: '-0x1'}, - { value: '-0x01', expected: '-0x1'}, - { value: -15, expected: '-0xf'}, - { value: '-15', expected: '-0xf'}, - { value: '-0xf', expected: '-0xf'}, - { value: '-0x0f', expected: '-0xf'}, - { value: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}, - { value: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd'}, - { value: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}, - { value: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd'}, - { value: 0, expected: '0x0'}, - { value: '0', expected: '0x0'}, - { value: '0x0', expected: '0x0'}, - { value: -0, expected: '0x0'}, - { value: '-0', expected: '0x0'}, - { value: '-0x0', expected: '0x0'} -]; - -describe('lib/utils/utils', function () { - describe('numberToHex', function () { - tests.forEach(function (test) { - it('should turn ' + test.value + ' to ' + test.expected, function () { - assert.equal(utils.numberToHex(test.value), test.expected); - }); - }); - }); -}); - diff --git a/test/utils.fromWei.js b/test/utils.fromWei.js deleted file mode 100644 index 13b37f9c76a..00000000000 --- a/test/utils.fromWei.js +++ /dev/null @@ -1,39 +0,0 @@ -var assert = require('assert'); -var utils = require('../packages/web3-utils'); - -describe('lib/utils/utils', function () { - describe('fromWei', function () { - it('should return the correct value', function () { - - assert.equal(utils.fromWei('1000000000000000000', 'wei'), '1000000000000000000'); - assert.equal(utils.fromWei('1000000000000000000', 'kwei'), '1000000000000000'); - assert.equal(utils.fromWei('1000000000000000000', 'mwei'), '1000000000000'); - assert.equal(utils.fromWei('1000000000000000000', 'gwei'), '1000000000'); - assert.equal(utils.fromWei('1000000000000000000', 'szabo'), '1000000'); - assert.equal(utils.fromWei('1000000000000000000', 'finney'), '1000'); - assert.equal(utils.fromWei('1000000000000000000', 'ether'), '1'); - assert.equal(utils.fromWei('1000000000000000000', 'kether'), '0.001'); - assert.equal(utils.fromWei('1000000000000000000', 'grand'), '0.001'); - assert.equal(utils.fromWei('1000000000000000000', 'mether'), '0.000001'); - assert.equal(utils.fromWei('1000000000000000000', 'gether'), '0.000000001'); - assert.equal(utils.fromWei('1000000000000000000', 'tether'), '0.000000000001'); - }); - - it('should verify "number" arg is string or BN', function () { - try { - utils.fromWei(100000000000, 'wei') - assert.fail(); - } catch (error) { - assert(error.message.includes('Please pass numbers as strings or BN objects')) - } - }) - // fromWei always returns string - it('should return the correct type', function(){ - var weiString = '100000000000000000'; - var weiBN = utils.toBN(weiString); - - assert(typeof utils.fromWei(weiString) === 'string'); - assert(typeof utils.fromWei(weiBN) === 'string'); - }) - }); -}); diff --git a/test/utils.isAddress.js b/test/utils.isAddress.js deleted file mode 100644 index d985f809340..00000000000 --- a/test/utils.isAddress.js +++ /dev/null @@ -1,28 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var assert = chai.assert; - -var tests = [ - { value: function () {}, is: false}, - { value: new Function(), is: false}, - { value: 'function', is: false}, - { value: {}, is: false}, - { value: '0xc6d9d2cd449a754c494264e1809c50e34d64562b', is: true }, - { value: 'c6d9d2cd449a754c494264e1809c50e34d64562b', is: true }, - { value: '0xE247A45c287191d435A8a5D72A7C8dc030451E9F', is: true }, - { value: '0xE247a45c287191d435A8a5D72A7C8dc030451E9F', is: false }, - { value: '0xe247a45c287191d435a8a5d72a7c8dc030451e9f', is: true }, - { value: '0xE247A45C287191D435A8A5D72A7C8DC030451E9F', is: true }, - { value: '0XE247A45C287191D435A8A5D72A7C8DC030451E9F', is: true } -]; - -describe('lib/utils/utils', function () { - describe('isAddress', function () { - tests.forEach(function (test) { - it('shoud test if value ' + test.value + ' is address: ' + test.is, function () { - assert.equal(utils.isAddress(test.value), test.is); - }); - }); - }); -}); diff --git a/test/utils.isBN.js b/test/utils.isBN.js deleted file mode 100644 index cc94a122ad4..00000000000 --- a/test/utils.isBN.js +++ /dev/null @@ -1,28 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var BigNumber = require('bn.js'); - -var assert = chai.assert; - -var tests = [ - { value: function () {}, is: false}, - { value: new Function(), is: false}, - { value: 'function', is: false}, - { value: {}, is: false}, - { value: new String('hello'), is: false}, - { value: new BigNumber(0), is: true}, - { value: 132, is: false}, - { value: '0x12', is: false}, - -]; - -describe('lib/utils/utils', function () { - describe('isBigNumber', function () { - tests.forEach(function (test) { - it('shoud test if value ' + test.func + ' is BigNumber: ' + test.is, function () { - assert.equal(utils.isBN(test.value), test.is); - }); - }); - }); -}); diff --git a/test/utils.isChecksumAddress.js b/test/utils.isChecksumAddress.js deleted file mode 100644 index c48659763bf..00000000000 --- a/test/utils.isChecksumAddress.js +++ /dev/null @@ -1,28 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var assert = chai.assert; - -var tests = [ - { value: '0x52908400098527886E0F7030069857D2E4169EE7', is: true }, - { value: '0x8617E340B3D01FA5F11F306F4090FD50E238070D', is: true }, - { value: '0xde709f2102306220921060314715629080e2fb77', is: true }, - { value: '0x27b1fdb04752bbc536007a920d24acb045561c26', is: true }, - { value: '0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed', is: true }, - { value: '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359', is: true }, - { value: '0xdbF03B407c01E7cD3CBea99509d93f8DDDC8C6FB', is: true }, - { value: '0xD1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb', is: true }, - { value: '0XD1220A0CF47C7B9BE7A2E6BA89F429762E7B9ADB', is: false }, - { value: '0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb', is: false } -]; - -describe('lib/utils/utils', function () { - describe('checkAddressChecksum', function () { - tests.forEach(function (test) { - it('shoud test if address ' + test.value + ' passes checksum: ' + test.is, function () { - assert.equal(utils.checkAddressChecksum(test.value), test.is); - }); - }); - }); -}); - diff --git a/test/utils.isHex.js b/test/utils.isHex.js deleted file mode 100644 index e5a868b9576..00000000000 --- a/test/utils.isHex.js +++ /dev/null @@ -1,34 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var BigNumber = require('bignumber.js'); -var BN = require('bn.js'); - -var assert = chai.assert; - -var tests = [ - { value: 1, expected: true }, - { value: '1', expected: true }, - { value: '0xH', expected: false}, - { value: 'H', expected: false}, - { value: [1,2,3,{test: 'data'}], expected: false}, - { value: {test: 'test'}, expected: false}, - { value: '{"test": "test"}', expected: false}, - { value: 'myString', expected: false}, - { value: 'myString 34534!', expected: false}, - { value: new BN(15), expected: false}, - { value: new BigNumber(15), expected: false}, - { value: 'Heeäööä👅D34ɝɣ24Єͽ-.,äü+#/', expected: false}, - { value: true, expected: false}, - { value: false, expected: false} -]; - -describe('lib/utils/utils', function () { - describe('isHex', function () { - tests.forEach(function (test) { - it('should return ' + test.expected + ' for input ' + test.value, function () { - assert.strictEqual(utils.isHex(test.value), test.expected); - }); - }); - }); -}); diff --git a/test/utils.isHexStrict.js b/test/utils.isHexStrict.js deleted file mode 100644 index 12c88b5f2a2..00000000000 --- a/test/utils.isHexStrict.js +++ /dev/null @@ -1,34 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var BigNumber = require('bignumber.js'); -var BN = require('bn.js'); - -var assert = chai.assert; - -var tests = [ - { value: 0x1, expected: false }, //0x1 would be tested as 1 - { value: '0x1', expected: true }, - { value: '0xH', expected: false}, - { value: 'H', expected: false}, - { value: [1,2,3,{test: 'data'}], expected: false}, - { value: {test: 'test'}, expected: false}, - { value: '{"test": "test"}', expected: false}, - { value: 'myString', expected: false}, - { value: 'myString 34534!', expected: false}, - { value: new BN(15), expected: false}, - { value: new BigNumber(15), expected: false}, - { value: 'Heeäööä👅D34ɝɣ24Єͽ-.,äü+#/', expected: false}, - { value: true, expected: false}, - { value: false, expected: false} -]; - -describe('lib/utils/utils', function () { - describe('isHexStrict', function () { - tests.forEach(function (test) { - it('should return ' + test.expected + ' for input ' + test.value, function () { - assert.strictEqual(utils.isHexStrict(test.value), test.expected); - }); - }); - }); -}); diff --git a/test/utils.randomHex.js b/test/utils.randomHex.js deleted file mode 100644 index 2eb4c7716fc..00000000000 --- a/test/utils.randomHex.js +++ /dev/null @@ -1,25 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var assert = chai.assert; - -// Expect 2 chars per bytes plus `0x` prefix -var tests = [ - { value: 0, expected: { prefix: '0x', type: 'string', length: 2 }}, - { value: 15, expected: { prefix: '0x', type: 'string', length: 32 }}, - { value: 16, expected: { prefix: '0x', type: 'string', length: 34 }} -]; - -describe('lib/utils/utils', function () { - describe('randomHex', function () { - tests.forEach(function (test) { - it('should turn ' + test.value + ' to ' + test.expected, function () { - var result = utils.randomHex(test.value); - - assert.strictEqual(typeof result, test.expected.type); - assert.strictEqual(result.slice(0,2), test.expected.prefix); - assert.strictEqual(result.length, test.expected.length); - }); - }); - }); -}); diff --git a/test/utils.sha3.js b/test/utils.sha3.js deleted file mode 100644 index 66e0bb9157c..00000000000 --- a/test/utils.sha3.js +++ /dev/null @@ -1,51 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var sha3 = require('../packages/web3-utils').sha3; -var CryptoJS = require('crypto-js'); -var cjsSha3 = require('crypto-js/sha3'); - - -describe('web3.sha3', function () { - it('should return sha3 with hex prefix', function() { - test1 = sha3('test123'); - test2 = sha3('test(int)'); - assert.deepEqual(test1, '0x' + cjsSha3('test123', { - outputLength: 256 - }).toString()); - assert.deepEqual(test2, '0x' + cjsSha3('test(int)', { - outputLength: 256 - }).toString()); - }); - it('should return sha3 with hex prefix when hex input', function() { - var sha3Hex = function(value){ - if (value.length > 2 && value.substr(0, 2) === '0x') { - value = value.substr(2); - } - value = CryptoJS.enc.Hex.parse(value); - - return cjsSha3(value, { - outputLength: 256 - }).toString(); - }; - - test3 = sha3('0x80'); - test4 = sha3('0x3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1'); - assert.deepEqual(test3, '0x' + sha3Hex('0x80')); - assert.deepEqual(test4, '0x' + sha3Hex('0x3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1')); - }); - it('should return sha3 with hex prefix when hex input', function() { - - var test = function (v, e, o) { - it('should encode ' + v + ' to ' + e, function () { - assert.equal(sha3(v, o), e); - }); - }; - - test('test123', '0xf81b517a242b218999ec8eec0ea6e2ddbef2a367a14e93f4a32a39e260f686ad'); - test('test(int)', '0xf4d03772bec1e62fbe8c5691e1a9101e520e8f8b5ca612123694632bf3cb51b1'); - test('0x80', '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'); - test('0x80', '0x6b03a5eef7706e3fb52a61c19ab1122fad7237726601ac665bd4def888f0e4a0'); - test('0x3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1', '0x82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28'); - - }); -}); diff --git a/test/utils.sha3Raw.js b/test/utils.sha3Raw.js deleted file mode 100644 index 097b34dc18f..00000000000 --- a/test/utils.sha3Raw.js +++ /dev/null @@ -1,22 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var cjsSha3 = require('crypto-js/sha3'); -var sha3Raw = require('../packages/web3-utils').sha3Raw; - -describe('web3.sha3Raw', function () { - it('should return the sha3 hash with hex prefix', function() { - assert.deepEqual(sha3Raw(''), '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'); - }); - - it('should return sha3 with hex prefix', function() { - assert.deepEqual( - sha3Raw('test123'), - '0x' + cjsSha3('test123', {outputLength: 256}).toString() - ); - - assert.deepEqual( - sha3Raw('test(int)'), - '0x' + cjsSha3('test(int)', {outputLength: 256}).toString() - ); - }); -}); diff --git a/test/utils.soliditySha3.js b/test/utils.soliditySha3.js deleted file mode 100644 index c40b1eb1fa0..00000000000 --- a/test/utils.soliditySha3.js +++ /dev/null @@ -1,252 +0,0 @@ -var _ = require('underscore'); -var BN = require('bn.js'); -var BigNumber = require('bignumber.js'); -var chai = require('chai'); -var assert = chai.assert; -var utils = require('../packages/web3-utils'); - -// each "values" is one kind of parameter of the same type -var tests = [{ - values: [ - true, - {value: true, type: 'bool'}, - {v: true, t: 'bool'}, - {v: true, type: 'bool'}, - {value: true, t: 'bool'} - ], expected: '0x5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2' -},{ - values: [ - false, - {value: false, type: 'bool'}, - {v: false, t: 'bool'}, - {v: false, type: 'bool'}, - {value: false, t: 'bool'} - ], expected: '0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a' -},{ - values: [ - 'Hello!%', - {value: 'Hello!%', type: 'string'}, - {value: 'Hello!%', type: 'string'}, - {v: 'Hello!%', t: 'string'} - ], expected: '0x661136a4267dba9ccdf6bfddb7c00e714de936674c4bdb065a531cf1cb15c7fc' -},{ - values: [ - 2345676856, - '2345676856', - new BN('2345676856'), - new BigNumber('2345676856', 10), - {v: '2345676856', t: 'uint256'}, - {v: new BN('2345676856'), t: 'uint256'}, - {v: '2345676856', t: 'uint'} - ], expected: '0xc0a8dac986ad882fff6b05a7792e1259f2fd8fa72d632fb48f54affea59af6fc' -},{ - values: [ - '2342342342342342342345676856', - new BN('2342342342342342342345676856'), - new BigNumber('2342342342342342342345676856', 10), - {v: '2342342342342342342345676856', t: 'uint256'}, - {v: '2342342342342342342345676856', t: 'uint'} - ], expected: '0x8ac2efaaee0058e1f1fbcb59643f6799c31c27096a347651e40f98daf1905094' -// 5 -},{ - values: [ - {v: '56', t: 'uint8'} - ], expected: '0xe4b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10' -},{ - values: [ - {v: '256', t: 'uint16'} - ], expected: '0x628bf3596747d233f1e6533345700066bf458fa48daedaf04a7be6c392902476' -},{ - values: [ - {v: '3256', t: 'uint32'} - ], expected: '0x720e835027b41b4b3e057ee9e6d4351ffc726d767652cdb0fc874869df88001c' -},{ - values: [ - {v: '454256', t: 'uint64'} - ], expected: '0x5ce6ff175acd532fb4dcef362c829e74a0ce1fde4a43885cca0d257b33d06d07' -},{ - values: [ - {v: '44454256', t: 'uint128'}, - {v: '44454256', t: 'int128'} // should be the same - ], expected: '0x372b694bc0f2dd9229f39b3892621a6ae3ffe111c5096a0a9253c34558a92ab8' -},{ - values: [ - {v: '3435454256', t: 'uint160'} - ], expected: '0x89e0942df3602c010e0252becbbe1b4053bd4a871a021c02d8ab9878f1194b6b' -// 11 -},{ - values: [ - '0x2345435675432144555ffffffffdd222222222222224444556553522', - {v: '0x2345435675432144555ffffffffdd222222222222224444556553522', t: 'bytes'}, - {v: '2345435675432144555ffffffffdd222222222222224444556553522', t: 'bytes'}, - {error: true, v: '0x2345435675432144555ffffffffdd22222222222222444455655352', t: 'bytes'} - ], expected: '0xb7ecb0d74e96b792a62b4a9dad28f5b1795417a89679562178b1987e0767e009' -},{ - values: [ - -3435454256, - new BN(-3435454256), - new BN('-3435454256'), - '-3435454256', - {v: '-3435454256', t: 'int'}, - {v: '-3435454256', t: 'int256'} - ], expected: '0x858d68fc4ad9f80dc5ee9571c7076298f8139d1d111e0955426de9381b10a061' -// 13 -},{ - values: [ - {v: '-36', t: 'int8'} - ], expected: '0xd1023f33bbf70407fe1e7011c03159e2efe16e44fa97b4a8d50bc4acbfd6ce23' -},{ - values: [ - {v: '0x22', t: 'bytes2'}, - {v: '22', t: 'bytes2'}, - {error: true, v: '0x222222', t: 'bytes2'} - ], expected: '0xb07fb0a3471486f9ccb02aab1d525df60d82925cb2d27860f923e655d76f35fc' -},{ - values: [ - {v: '0x44222266', t: 'bytes4'}, - {v: '44222266', t: 'bytes4'} - ], expected: '0x7cdb669d75710eb06b9b34618e77206db56f0cc71698f246433ce8339ed8075b' -},{ - values: [ - {v: '0x44555ffffffffdd222222222222224444556553522', t: 'bytes32'}, - {v: '44555ffffffffdd222222222222224444556553522', t: 'bytes32'} - ], expected: '0x5aac5a7501e071c3ee062ede777be470acb4cd05a2724146438d7e4518d91677' -},{ - values: [ - '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', - '0x407d73d8a49eeb85D32Cf465507dd71d507100c1', // invalid checksum, should work as it is interpreted as address - {v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', t: 'address'}, - {error: true, v: '0x407d73d8a49eeb85D32Cf465507dd71d507100c1', t: 'address'}, - {v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', t: 'bytes'}, - {v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', t: 'bytes20'} - ], expected: '0x4e8ebbefa452077428f93c9520d3edd60594ff452a29ac7d2ccc11d47f3ab95b' -// 18 -},{ - values: [ - {v: '36', t: 'int8'} - ], expected: '0xb104e6a8e5e1477c7a8346486401cbd4f10ab4840a4201066d9b59b747cb6f88' -},{ - values: [ - {v: '36', t: 'int256'} - ], expected: '0x7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec4' -},{ - values: [ - {v: [-12, 243], t: 'int[]'}, - {v: [-12, 243], t: 'int256[]'}, - {v: ['-12', '243'], t: 'int256[]'}, - {v: [new BN('-12'), new BN('243')], t: 'int256[]'}, - {v: ['-12', '243'], t: 'int256[2]'} - ], expected: '0xa9805b78a6ec1d71c3722498d521fde9d3913c92360e3aed06a9403db25f0351' -},{ - values: [ - {v: [12, 243], t: 'uint[]'}, - {v: [12, 243], t: 'uint256[]'}, - {v: ['12', '243'], t: 'uint256[]'}, - {v: [new BN('12'), new BN('243')], t: 'uint256[]'}, - {v: ['12', '243'], t: 'uint256[2]'}, - {error: true, v: ['12', '243'], t: 'uint256[1]'} - ], expected: '0x74282b2d1a7a1a70af6f3a43ab576cd6feeaa6ebaa5fb2033b90d5942bf48a60' -},{ - values: [ - {v: ['0x234656', '0x23434234234ffff456'], t: 'bytes32[]'}, - ], expected: '0x3f67732837541dd9e3aa29cb99d88839fceccf9486b3ec053d82d339d35c79d5' -},{ - values: [ - {v: '0x234656', t: 'bytes16'}, - {v: '234656', t: 'bytes16'} - ], expected: '0x5d0d56c5b556a2dfee96b3de4717b3bd0333b7ffa5932e208fdcc24a03bdf088' -},{ - values: [ - {v: ['0x234656', '0x23434234234ffff456'], t: 'bytes16[]'}, - {v: ['234656', '23434234234ffff456'], t: 'bytes16[]'} - ], expected: '0x3f67732837541dd9e3aa29cb99d88839fceccf9486b3ec053d82d339d35c79d5' -},{ - values: [ - {v: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d'], t: 'address[]'}, - {v: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d'], t: 'address[2]'}, - {error: true, v: ['0x407d73d8a49eeb85D32Cf465507dd71d507100c1', '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d'], t: 'address[]'}, - {error: true, v: ['0x407D73d8a49eeb85D32Cf465507dd71d507100c1', '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d'], t: 'address[4]'} - ], expected: '0x1dcd26e646452836052e2a57400510aa63e07aede06fa43660cb6054edacfce0' -},{ - values: [ - {v: 0, t: 'uint'} - ], expected: '0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563' -},{ - values: [ - ['someValue'] // should error - ], expected: '' -}]; - - -describe('web3.soliditySha3', function () { - tests.forEach(function (test) { - test.values.forEach(function (value) { - it('should hash "'+ JSON.stringify(value) +'" into "'+ test.expected +'"', function() { - - if(value.error || _.isArray(value)) { - assert.throws(utils.soliditySha3.bind(null, value)); - } else { - assert.deepEqual(utils.soliditySha3(value), test.expected); - } - - }); - }); - }); - - it('should hash mixed boolean values in any order', function() { - - assert.deepEqual(utils.soliditySha3( - tests[0].values[1], // true - tests[1].values[0], // false - tests[1].values[2], // false - tests[0].values[3] // true - ), '0x4ba958c4829ba5d3f9eaa61058ef208aba8bc25c0b6e33044015e0af9fb1c35d'); - }); - - it('should hash mixed string and number values in any order', function() { - - assert.deepEqual(utils.soliditySha3( - tests[2].values[0], // 'Hello!%' - tests[3].values[2], // 2345676856 - tests[4].values[2], // '2342342342342342342345676856' - tests[2].values[3], // 'Hello!%' - tests[1].values[2] // false - ), '0x7eb45eb9a0e1f6904514bc34c8b43e71c2e1f96f21b45ea284a0418cb351ec69'); - }); - - it('should hash mixed number types in any order', function() { - - assert.deepEqual(utils.soliditySha3( - tests[5].values[0], // v: '56', t: 'uint8' - tests[6].values[0], // v: '256', t: 'uint16' - tests[7].values[0], // v: '3256', t: 'uint32' - tests[8].values[0], // v: '454256', t: 'uint64' - tests[9].values[0], // v: '44454256', t: 'uint128' - tests[10].values[0] // v: '3435454256', t: 'uint160' - ), '0x31d6c48574796dfb1a652f2e5c5a261db0677e39fff5c3032449c50eade4b6b6'); - }); - - it('should hash mixed number types addresses and boolean in any order', function() { - - assert.deepEqual(utils.soliditySha3( - tests[5].values[0], // v: '56', t: 'uint8' - tests[13].values[0], // v: '-36', t: 'int8' - tests[15].values[0], // v: '0x44222266', t: 'bytes4' - tests[0].values[0], // true - tests[17].values[1] // v: '0x407D73d8a49eeb85D32Cf465507dd71d507100c1', t: 'address' - ), '0x334086a8fa05e16afb86bed41c614aa74e99ea32eefe8ce0026b4076ce217698'); - }); - - it('should hash mixed number arrays addresses and boolean in any order', function() { - - assert.deepEqual(utils.soliditySha3( - tests[15].values[1], // v: '0x44222266', t: 'bytes4' - tests[25].values[0], // address array - tests[0].values[0], // true - tests[13].values[0], // v: '-36', t: 'int8' - tests[12].values[5], // v: '-3435454256', t: 'int256' - tests[17].values[0], // 0x407D73d8a49eeb85D32Cf465507dd71d507100c1 - tests[17].values[1] // v: 0x407D73d8a49eeb85D32Cf465507dd71d507100c1 t: address - ), '0x61c62b29bbe21d8821a938f7331ac875859cc50331556b3383196b19cfc45aff'); - }); -}); diff --git a/test/utils.soliditySha3Raw.js b/test/utils.soliditySha3Raw.js deleted file mode 100644 index 6bfb7a699ce..00000000000 --- a/test/utils.soliditySha3Raw.js +++ /dev/null @@ -1,24 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var soliditySha3Raw = require('../packages/web3-utils').soliditySha3Raw; - -describe('web3.soliditySha3Raw', function () { - it('should return the sha3 hash of a empty string with hex prefix', function () { - assert.deepEqual( - soliditySha3Raw( - {t: 'string', v: ''} - ), - '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' - ); - }); - - it('should return the expected sha3 hash with hex prefix', function () { - assert.deepEqual(soliditySha3Raw( - 'Hello!%', - 2345676856, - '2342342342342342342345676856', - 'Hello!%', - false - ), '0x7eb45eb9a0e1f6904514bc34c8b43e71c2e1f96f21b45ea284a0418cb351ec69'); - }); -}); diff --git a/test/utils.stripHexPrefix.js b/test/utils.stripHexPrefix.js deleted file mode 100644 index 19b9e6877f4..00000000000 --- a/test/utils.stripHexPrefix.js +++ /dev/null @@ -1,54 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var BigNumber = require('bignumber.js'); -var BN = require('bn.js'); - -var assert = chai.assert; - -var tests = [ - { value: '1', expected: '1' }, - { value: '0x1', expected: '1'}, - { value: '0xf', expected: 'f'}, - { value: '-1', expected: '-1'}, - { value: '-0x1', expected: '-1'}, - { value: '-15', expected: '-15'}, - { value: '-0xf', expected: '-f'}, - { value: '0x657468657265756d', expected: '657468657265756d'}, - { value: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd'}, - { value: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}, - { value: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd'}, - { value: 0, expected: 0}, - { value: '0', expected: '0'}, - { value: '0x0', expected: '0'}, - { value: -0, expected: -0}, - { value: '-0', expected: '-0'}, - { value: '-0x0', expected: '-0'}, - { value: [1,2,3,{test: 'data'}], expected: [1,2,3,{test: 'data'}]}, - { value: {test: 'test'}, expected: {test: 'test'}}, - { value: '{"test": "test"}', expected: '{"test": "test"}'}, - { value: 'myString', expected: 'myString'}, - { value: 'myString 34534!', expected: 'myString 34534!'}, - { value: new BN(15), expected: new BN(15)}, - { value: new BigNumber(15), expected: new BigNumber(15)}, - { value: 'Heeäööä👅D34ɝɣ24Єͽ-.,äü+#/', expected: 'Heeäööä👅D34ɝɣ24Єͽ-.,äü+#/'}, - { value: true, expected: true}, - { value: false, expected: false}, - { value: 'ff\u0003\u0000\u0000\u00005èÆÕL]\u0012|Î¾ž\u001a7«›\u00052\u0011(ЗY\n<\u0010\u0000\u0000\u0000\u0000\u0000\u0000e!ßd/ñõì\f:z¦Î¦±ç·÷Í¢Ëß\u00076*…\bŽ—ñžùC1ÉUÀé2\u001aӆBŒ', - expected: 'ff\u0003\u0000\u0000\u00005èÆÕL]\u0012|Î¾ž\u001a7«›\u00052\u0011(ЗY\n<\u0010\u0000\u0000\u0000\u0000\u0000\u0000e!ßd/ñõì\f:z¦Î¦±ç·÷Í¢Ëß\u00076*…\bŽ—ñžùC1ÉUÀé2\u001aӆBŒ'}, - { value: '\u0003\u0000\u0000\u00005èÆÕL]\u0012|Î¾ž\u001a7«›\u00052\u0011(ЗY\n<\u0010\u0000\u0000\u0000\u0000\u0000\u0000e!ßd/ñõì\f:z¦Î¦±ç·÷Í¢Ëß\u00076*…\bŽ—ñžùC1ÉUÀé2\u001aӆBŒ', - expected: '\u0003\u0000\u0000\u00005èÆÕL]\u0012|Î¾ž\u001a7«›\u00052\u0011(ЗY\n<\u0010\u0000\u0000\u0000\u0000\u0000\u0000e!ßd/ñõì\f:z¦Î¦±ç·÷Í¢Ëß\u00076*…\bŽ—ñžùC1ÉUÀé2\u001aӆBŒ'}, - { value: '내가 제일 잘 나가', expected: '내가 제일 잘 나가'}, - { value: Buffer.from('100'), expected: Buffer.from('100')}, - { value: '0xfffff0x0fffffffffff0xffffff0x', expected: '0xfffff0x0fffffffffff0xffffff0x'} -]; - -describe('lib/utils/utils', function () { - describe('stripHexPrefix', function () { - tests.forEach(function (test) { - it('should turn ' + test.value + ' to ' + test.expected, function () { - assert.deepEqual(utils.stripHexPrefix(test.value), test.expected); - }); - }); - }); -}); diff --git a/test/utils.toAscii.js b/test/utils.toAscii.js deleted file mode 100644 index 1eb653ea98c..00000000000 --- a/test/utils.toAscii.js +++ /dev/null @@ -1,21 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var assert = chai.assert; - -var tests = [ - { value: '0x6d79537472696e67', expected: 'myString'}, - { value: '0x6d79537472696e6700', expected: 'myString\u0000'}, - { value: "0x0300000035e8c6d54c5d127c9dcebe9e1a37ab9b05321128d097590a3c100000000000006521df642ff1f5ec0c3a7aa6cea6b1e7b7f7cda2cbdf07362a85088e97f19ef94331c955c0e9321ad386428c", - expected: '\u0003\u0000\u0000\u00005èÆÕL]\u0012|Î¾ž\u001a7«›\u00052\u0011(ЗY\n<\u0010\u0000\u0000\u0000\u0000\u0000\u0000e!ßd/ñõì\f:z¦Î¦±ç·÷Í¢Ëß\u00076*…\bŽ—ñžùC1ÉUÀé2\u001aӆBŒ'} -]; - -describe('lib/utils/utils', function () { - describe('hexToAscii', function () { - tests.forEach(function (test) { - it('should turn ' + test.value + ' to ' + test.expected, function () { - assert.strictEqual(utils.toAscii(test.value), test.expected); - }); - }); - }); -}); diff --git a/test/utils.toBigNumber.js b/test/utils.toBigNumber.js deleted file mode 100644 index 064a6715051..00000000000 --- a/test/utils.toBigNumber.js +++ /dev/null @@ -1,47 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var BigNumber = require('bn.js'); - -var assert = chai.assert; - -var tests = [ - { value: 1, expected: '1' }, - { value: '1', expected: '1' }, - { value: '0x1', expected: '1'}, - { value: '0x01', expected: '1'}, - { value: 15, expected: '15'}, - { value: '15', expected: '15'}, - { value: '0xf', expected: '15'}, - { value: '0x0f', expected: '15'}, - { value: new BigNumber('f', 16), expected: '15'}, - { value: -1, expected: '-1'}, - { value: '-1', expected: '-1'}, - { value: '-0x1', expected: '-1'}, - { value: '-0x01', expected: '-1'}, - { value: -15, expected: '-15'}, - { value: '-15', expected: '-15'}, - { value: '-0xf', expected: '-15'}, - { value: '-0x0f', expected: '-15'}, - { value: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - { value: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - { value: 0, expected: '0'}, - { value: '0', expected: '0'}, - { value: '0x0', expected: '0'}, - { value: -0, expected: '0'}, - { value: '-0', expected: '0'}, - { value: '-0x0', expected: '0'}, - { value: new BigNumber(0), expected: '0'} -]; - -describe('lib/utils/utils', function () { - describe('toBN', function () { - tests.forEach(function (test) { - it('should turn ' + test.value + ' to ' + test.expected, function () { - assert.equal(utils.toBN(test.value).toString(10), test.expected); - }); - }); - }); -}); diff --git a/test/utils.toHex.js b/test/utils.toHex.js deleted file mode 100644 index 3b94f5f97df..00000000000 --- a/test/utils.toHex.js +++ /dev/null @@ -1,56 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var BigNumber = require('bignumber.js'); -var BN = require('bn.js'); - -var assert = chai.assert; - -var tests = [ - { value: 1, expected: '0x1' }, - { value: '1', expected: '0x1' }, - { value: '0x1', expected: '0x1'}, - { value: '15', expected: '0xf'}, - { value: '0xf', expected: '0xf'}, - { value: -1, expected: '-0x1'}, - { value: '-1', expected: '-0x1'}, - { value: '-0x1', expected: '-0x1'}, - { value: '-15', expected: '-0xf'}, - { value: '-0xf', expected: '-0xf'}, - { value: '0x657468657265756d', expected: '0x657468657265756d'}, - { value: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd'}, - { value: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'}, - { value: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd'}, - { value: 0, expected: '0x0'}, - { value: '0', expected: '0x0'}, - { value: '0x0', expected: '0x0'}, - { value: -0, expected: '0x0'}, - { value: '-0', expected: '0x0'}, - { value: '-0x0', expected: '0x0'}, - { value: [1,2,3,{test: 'data'}], expected: '0x5b312c322c332c7b2274657374223a2264617461227d5d'}, - { value: {test: 'test'}, expected: '0x7b2274657374223a2274657374227d'}, - { value: '{"test": "test"}', expected: '0x7b2274657374223a202274657374227d'}, - { value: 'myString', expected: '0x6d79537472696e67'}, - { value: 'myString 34534!', expected: '0x6d79537472696e6720333435333421'}, - { value: new BN(15), expected: '0xf'}, - { value: new BigNumber(15), expected: '0xf'}, - { value: 'Heeäööä👅D34ɝɣ24Єͽ-.,äü+#/', expected: '0x486565c3a4c3b6c3b6c3a4f09f9185443334c99dc9a33234d084cdbd2d2e2cc3a4c3bc2b232f'}, - { value: true, expected: '0x01'}, - { value: false, expected: '0x00'}, - { value: 'ff\u0003\u0000\u0000\u00005èÆÕL]\u0012|Î¾ž\u001a7«›\u00052\u0011(ЗY\n<\u0010\u0000\u0000\u0000\u0000\u0000\u0000e!ßd/ñõì\f:z¦Î¦±ç·÷Í¢Ëß\u00076*…\bŽ—ñžùC1ÉUÀé2\u001aӆBŒ', - expected: '0x66660300000035c3a8c386c3954c5d127cc29dc38ec2bec29e1a37c2abc29b05321128c390c297590a3c100000000000006521c39f642fc3b1c3b5c3ac0c3a7ac2a6c38ec2a6c2b1c3a7c2b7c3b7c38dc2a2c38bc39f07362ac28508c28ec297c3b1c29ec3b94331c38955c380c3a9321ac393c28642c28c'}, - { value: '\u0003\u0000\u0000\u00005èÆÕL]\u0012|Î¾ž\u001a7«›\u00052\u0011(ЗY\n<\u0010\u0000\u0000\u0000\u0000\u0000\u0000e!ßd/ñõì\f:z¦Î¦±ç·÷Í¢Ëß\u00076*…\bŽ—ñžùC1ÉUÀé2\u001aӆBŒ', - expected: '0x0300000035c3a8c386c3954c5d127cc29dc38ec2bec29e1a37c2abc29b05321128c390c297590a3c100000000000006521c39f642fc3b1c3b5c3ac0c3a7ac2a6c38ec2a6c2b1c3a7c2b7c3b7c38dc2a2c38bc39f07362ac28508c28ec297c3b1c29ec3b94331c38955c380c3a9321ac393c28642c28c'}, - { value: '내가 제일 잘 나가', expected:'0xeb82b4eab08020eca09cec9dbc20ec9e9820eb8298eab080'}, - { value: Buffer.from('100'), expected:'0x313030'} -]; - -describe('lib/utils/utils', function () { - describe('toHex', function () { - tests.forEach(function (test) { - it('should turn ' + test.value + ' to ' + test.expected, function () { - assert.strictEqual(utils.toHex(test.value), test.expected); - }); - }); - }); -}); diff --git a/test/utils.toNumber.js b/test/utils.toNumber.js deleted file mode 100644 index a1d7767557d..00000000000 --- a/test/utils.toNumber.js +++ /dev/null @@ -1,23 +0,0 @@ -var assert = require('assert'); -var utils = require('../packages/web3-utils'); - -describe('lib/utils/utils', function () { - describe('hexToNumber', function () { - it('should return the correct value', function () { - - assert.equal(utils.hexToNumber("0x3e8"), 1000); - assert.equal(utils.hexToNumber('0x1f0fe294a36'), 2134567897654); - // allow compatiblity - assert.equal(utils.hexToNumber(100000), 100000); - }); - - it('should validate hex strings', function() { - try { - utils.hexToNumber('100000'); - assert.fail(); - } catch (error){ - assert(error.message.includes('is not a valid hex string')) - } - }) - }); -}); diff --git a/test/utils.toNumberString.js b/test/utils.toNumberString.js deleted file mode 100644 index 6c4acaad9ee..00000000000 --- a/test/utils.toNumberString.js +++ /dev/null @@ -1,23 +0,0 @@ -var assert = require('assert'); -var utils = require('../packages/web3-utils'); - -describe('lib/utils/utils', function () { - describe('hexToNumberString', function () { - it('should return the correct value', function () { - - assert.equal(utils.hexToNumberString("0x3e8"), '1000'); - assert.equal(utils.hexToNumberString('0x1f0fe294a36'), '2134567897654'); - // allow compatiblity - assert.equal(utils.hexToNumberString(100000), '100000'); - }); - - it('should validate hex strings', function() { - try { - utils.hexToNumberString('100000'); - assert.fail(); - } catch (error){ - assert(error.message.includes('is not a valid hex string')) - } - }) - }); -}); diff --git a/test/utils.toTwosComplement.js b/test/utils.toTwosComplement.js deleted file mode 100644 index a00f7225f73..00000000000 --- a/test/utils.toTwosComplement.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Created by danielbruce on 2017-09-25. - */ -var chai = require('chai'); -var assert = chai.assert; -var utils = require('../packages/web3-utils/'); -var BigNumber = require('bignumber.js'); - -var tests = [ - { value: 1, expected: utils.padLeft(new BigNumber(1).integerValue().toString(16), 64) }, - { value: '1', expected: utils.padLeft(new BigNumber(1).toString(16), 64) }, - { value: '0x1', expected: utils.padLeft(new BigNumber(1).toString(16), 64) }, - { value: '15', expected: utils.padLeft(new BigNumber(15).toString(16), 64)}, - { value: '0xf', expected: utils.padLeft(new BigNumber(15).toString(16), 64)}, - { value: -1, expected: new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(new BigNumber(-1)).plus(1).toString(16)}, - { value: '-1', expected: new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(new BigNumber(-1)).plus(1).toString(16)}, - { value: '-0x1', expected: new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(new BigNumber(-1)).plus(1).toString(16)}, - { value: '-15', expected: new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(new BigNumber(-15)).plus(1).toString(16)}, - { value: '-0xf', expected: new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(new BigNumber(-15)).plus(1).toString(16)}, - { value: 0, expected: utils.padLeft(new BigNumber(0).toString(16), 64)}, - { value: '0', expected: utils.padLeft(new BigNumber(0).toString(16), 64)}, - { value: '0x0', expected: utils.padLeft(new BigNumber(0).toString(16), 64)}, - { value: -0, expected: utils.padLeft(new BigNumber(0).toString(16), 64)}, - { value: '-0', expected: utils.padLeft(new BigNumber(0).toString(16), 64)}, - { value: '-0x0', expected: utils.padLeft(new BigNumber(0).toString(16), 64)}, - { value: new BigNumber(15), expected: utils.padLeft(new BigNumber(15).toString(16), 64)} -]; - -describe('lib/utils/utils', function () { - describe('toTwosComplement', function () { - tests.forEach(function (test) { - it('printing ' + test.value, function () { - assert.equal(utils.toTwosComplement(test.value).replace('0x',''), test.expected); - }); - }); - }); -}); diff --git a/test/utils.toUtf8.js b/test/utils.toUtf8.js deleted file mode 100644 index 22914e8b052..00000000000 --- a/test/utils.toUtf8.js +++ /dev/null @@ -1,22 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var assert = chai.assert; - -var tests = [ - { value: '0x486565c3a4c3b6c3b6c3a4f09f9185443334c99dc9a33234d084cdbd2d2e2cc3a4c3bc2b232f', expected: 'Heeäööä👅D34ɝɣ24Єͽ-.,äü+#/'}, - { value: '0x6d79537472696e67', expected: 'myString'}, - { value: '0x6d79537472696e6700', expected: 'myString'}, - { value: '0x65787065637465642076616c7565000000000000000000000000000000000000', expected: 'expected value'}, - { value: '0x000000000000000000000000000000000000657870656374000065642076616c7565', expected: 'expect\u0000\u0000ed value'} -]; - -describe('lib/utils/utils', function () { - describe('hexToUtf8', function () { - tests.forEach(function (test) { - it('should turn ' + test.value + ' to ' + test.expected, function () { - assert.strictEqual(utils.toUtf8(test.value), test.expected); - }); - }); - }); -}); diff --git a/test/utils.toWei.js b/test/utils.toWei.js deleted file mode 100644 index ab7b6ff2b01..00000000000 --- a/test/utils.toWei.js +++ /dev/null @@ -1,59 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var assert = chai.assert; - -describe('lib/utils/utils', function () { - describe('toWei', function () { - it('should return the correct value', function () { - - assert.equal(utils.toWei('1', 'wei'), '1'); - assert.equal(utils.toWei('1', 'kwei'), '1000'); - assert.equal(utils.toWei('1', 'Kwei'), '1000'); - assert.equal(utils.toWei('1', 'babbage'), '1000'); - assert.equal(utils.toWei('1', 'mwei'), '1000000'); - assert.equal(utils.toWei('1', 'Mwei'), '1000000'); - assert.equal(utils.toWei('1', 'lovelace'), '1000000'); - assert.equal(utils.toWei('1', 'gwei'), '1000000000'); - assert.equal(utils.toWei('1', 'Gwei'), '1000000000'); - assert.equal(utils.toWei('1', 'shannon'), '1000000000'); - assert.equal(utils.toWei('1', 'szabo'), '1000000000000'); - assert.equal(utils.toWei('1', 'finney'), '1000000000000000'); - assert.equal(utils.toWei('1', 'ether'), '1000000000000000000'); - assert.equal(utils.toWei('1', 'kether'), '1000000000000000000000'); - assert.equal(utils.toWei('1', 'grand'), '1000000000000000000000'); - assert.equal(utils.toWei('1', 'mether'), '1000000000000000000000000'); - assert.equal(utils.toWei('1', 'gether'), '1000000000000000000000000000'); - assert.equal(utils.toWei('1', 'tether'), '1000000000000000000000000000000'); - - assert.equal(utils.toWei('1', 'kwei'), utils.toWei('1', 'femtoether')); - assert.equal(utils.toWei('1', 'szabo'), utils.toWei('1', 'microether')); - assert.equal(utils.toWei('1', 'finney'), utils.toWei('1', 'milliether')); - assert.equal(utils.toWei('1', 'milli'), utils.toWei('1', 'milliether')); - assert.equal(utils.toWei('1', 'milli'), utils.toWei('1000', 'micro')); - - assert.throws(function () {utils.toWei(1, 'wei1');}, Error); - }); - - - it('should verify "number" arg is string or BN', function () { - try { - utils.toWei(1, 'wei') - assert.fail(); - } catch (error) { - assert(error.message.includes('Please pass numbers as strings or BN objects')) - } - }); - - // toWei returns string when given string, BN when given BN - it('should return the correct type', function(){ - var weiString = '1'; - var weiBN = utils.toBN(weiString); - - var bn = utils.toWei(weiBN); - - assert(utils.isBN(bn)); - assert(typeof utils.toWei(weiString) === 'string'); - }) - }); -}); diff --git a/test/utils.utf8ToHex.js b/test/utils.utf8ToHex.js deleted file mode 100644 index 0b97ccd2f39..00000000000 --- a/test/utils.utf8ToHex.js +++ /dev/null @@ -1,24 +0,0 @@ -var chai = require('chai'); -var utils = require('../packages/web3-utils'); - -var assert = chai.assert; - -var tests = [ - { value: 'Heeäööä👅D34ɝɣ24Єͽ-.,äü+#/', expected: '0x486565c3a4c3b6c3b6c3a4f09f9185443334c99dc9a33234d084cdbd2d2e2cc3a4c3bc2b232f'}, - { value: 'myString', expected: '0x6d79537472696e67'}, - { value: 'myString\x00', expected: '0x6d79537472696e67'}, - { value: 'expected value\u0000\u0000\u0000', expected: '0x65787065637465642076616c7565'}, - { value: 'expect\u0000\u0000ed value\u0000\u0000\u0000', expected: '0x657870656374000065642076616c7565'}, - { value: '我能吞下玻璃而不伤身体。', expected: '0xe68891e883bde5909ee4b88be78ebbe79283e8808ce4b88de4bca4e8baabe4bd93e38082'}, - { value: '나는 유리를 먹을 수 있어요. 그래도 아프지 않아요', expected: '0xeb8298eb8a9420ec9ca0eba6aceba5bc20eba8b9ec9d8420ec889820ec9e88ec96b4ec9a942e20eab7b8eb9e98eb8f8420ec9584ed9484eca78020ec958aec9584ec9a94' }, -]; - -describe('lib/utils/utils', function () { - describe('utf8ToHex', function () { - tests.forEach(function (test) { - it('should turn ' + test.value + ' to ' + test.expected, function () { - assert.strictEqual(utils.utf8ToHex(test.value), test.expected); - }); - }); - }); -}); diff --git a/test/utils_methods.js b/test/utils_methods.js deleted file mode 100644 index 4fb8c676c67..00000000000 --- a/test/utils_methods.js +++ /dev/null @@ -1,19 +0,0 @@ -var u = require('./helpers/test.utils.js'); -var utils = require('../packages/web3-utils'); - -describe('utils', function() { - describe('methods', function () { - u.methodExists(utils, 'sha3'); - u.methodExists(utils, 'hexToAscii'); - u.methodExists(utils, 'asciiToHex'); - u.methodExists(utils, 'hexToNumberString'); - u.methodExists(utils, 'numberToHex'); - u.methodExists(utils, 'fromWei'); - u.methodExists(utils, 'toWei'); - u.methodExists(utils, 'toBN'); - u.methodExists(utils, 'isAddress'); - u.methodExists(utils, 'soliditySha3'); - u.methodExists(utils, 'encodePacked'); - u.methodExists(utils, 'stripHexPrefix'); - }); -}); diff --git a/test/web3_methods.js b/test/web3_methods.js deleted file mode 100644 index b06cf282eae..00000000000 --- a/test/web3_methods.js +++ /dev/null @@ -1,18 +0,0 @@ -var u = require('./helpers/test.utils.js'); -var Web3 = require('../packages/web3'); -var web3 = new Web3(); - -describe('web3', function() { - describe('methods', function () { - u.methodExists(web3, 'setProvider'); - - u.propertyExists(web3, 'givenProvider'); - - u.propertyExists(web3, 'eth'); - u.propertyExists(web3, 'bzz'); - u.propertyExists(web3, 'shh'); - - u.propertyExists(web3, 'utils'); - }); -}); - diff --git a/test/websocket.ganache.js b/test/websocket.ganache.js deleted file mode 100644 index 915847a6858..00000000000 --- a/test/websocket.ganache.js +++ /dev/null @@ -1,578 +0,0 @@ -const assert = require('assert'); -const ganache = require('ganache-cli'); -const pify = require('pify'); -const utils = require('./helpers/test.utils'); -const Web3 = utils.getWeb3(); - -describe('WebsocketProvider (ganache)', function () { - let web3; - let server; - const host = 'ws://localhost:'; - const port = 8545; - - afterEach(async function () { - // Might already be closed.. - try { - await pify(server.close)(); - } catch (err) { - } - }); - - // This test's error is fired by the request queue checker in the onClose handler - it('errors when there is no connection', async function () { - web3 = new Web3(host + 8777); - - try { - await web3.eth.getBlockNumber(); - assert.fail(); - } catch (err) { - assert(err.code, 1006); - assert(err.reason, 'connection failed'); - assert(err.message.includes('connection not open on send')); - } - }); - - it('"error" handler fires if the client closes unilaterally', async function(){ - this.timeout(5000); - - server = ganache.server({port: port}); - await pify(server.listen)(port); - - // Open and verify connection - web3 = new Web3(new Web3.providers.WebsocketProvider(host + port)); - await web3.eth.getBlockNumber(); - - await new Promise(async function(resolve){ - web3.currentProvider.on('close', function (err) { - assert(err.reason.includes('Connection dropped by remote peer.')); - assert(err.code === 1006); - resolve(); - }); - - await pify(server.close)(); - }) - }) - - it('"error" handler fires if Web3 disconnects with error code', async function(){ - this.timeout(5000); - - server = ganache.server({port: port}); - await pify(server.listen)(port); - - // Open and verify connection - web3 = new Web3(new Web3.providers.WebsocketProvider(host + port)); - await web3.eth.getBlockNumber(); - - await new Promise(async function(resolve){ - web3.currentProvider.on('close', function (err) { - assert(err.reason.includes('restart')); - assert(err.code === 1012); - resolve(); - }); - - web3.currentProvider.disconnect(1012, 'restart'); - }) - }) - - it('"error" handler *DOES NOT* fire if disconnection is clean', async function(){ - this.timeout(5000); - - server = ganache.server({port: port}); - await pify(server.listen)(port); - - // Open and verify connection - web3 = new Web3(new Web3.providers.WebsocketProvider(host + port)); - await web3.eth.getBlockNumber(); - - await new Promise(async function(resolve, reject){ - web3.currentProvider.once('error', function(err){ - reject('Should not fire error handler') - }); - - web3.currentProvider.disconnect(1000); - await utils.waitSeconds(2) - resolve(); - }) - }) - - it('"end" handler fires with close event object if client disconnect', async function(){ - this.timeout(5000); - - server = ganache.server({port: port}); - await pify(server.listen)(port); - - // Open and verify connection - web3 = new Web3(new Web3.providers.WebsocketProvider(host + port)); - await web3.eth.getBlockNumber(); - - await new Promise(async function(resolve){ - web3.currentProvider.on('close', function (err) { - assert.equal(err.type, 'close'); - assert.equal(err.wasClean, false); - resolve(); - }); - - await pify(server.close)(); - }) - }) - - it('"end" handler fires with close event object if Web3 disconnects', async function(){ - this.timeout(5000); - - server = ganache.server({port: port}); - await pify(server.listen)(port); - - // Open and verify connection - web3 = new Web3(new Web3.providers.WebsocketProvider(host + port)); - await web3.eth.getBlockNumber(); - - await new Promise(async function(resolve){ - web3.currentProvider.on('close', function (err) { - assert.equal(err.type, 'close'); - assert.equal(err.wasClean, true); - resolve(); - }); - - web3.currentProvider.disconnect(1000); - }) - }); - - // Here, the first error (try/caught) is fired by the request queue checker in - // the onClose handler. The second error is fired by the readyState check in .send - it('errors when requests continue after socket closed', async function () { - web3 = new Web3(host + 8777); - - try { await web3.eth.getBlockNumber(); } catch (err) { - assert(err.message.includes('connection not open on send')); - assert(err.code, 1006); - assert(err.reason, 'connection failed'); - - try { - await web3.eth.getBlockNumber(); - assert.fail(); - } catch (err){ - assert(err.message.includes('connection not open on send')); - assert(typeof err.code === 'undefined'); - assert(typeof err.reason === 'undefined'); - } - } - }); - - it('errors after client has disconnected', async function () { - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3(new Web3.providers.WebsocketProvider(host + port)); - - // Verify connection and disconnect - await web3.eth.getBlockNumber(); - web3.currentProvider.disconnect(); - - try { - await web3.eth.getBlockNumber(); - assert.fail(); - } catch(err){ - assert(err.message.includes('connection not open on send')); - assert(typeof err.code === 'undefined'); - assert(typeof err.reason === 'undefined'); - } - }); - - it('can connect after being disconnected', async function () { - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3(new Web3.providers.WebsocketProvider(host + port)); - - // Verify connection and disconnect - await web3.eth.getBlockNumber(); - web3.currentProvider.disconnect(); - - try { await web3.eth.getBlockNumber() } catch(e){} - - web3.currentProvider.connect(); - - // This test fails unless there's a brief delay after - // connecting again... - await new Promise(resolve => { - setTimeout(async function(){ - const blockNumber = await web3.eth.getBlockNumber(); - assert(blockNumber === 0); - resolve(); - },100) - }); - }); - - it('supports subscriptions', async function () { - assert(web3.eth.currentProvider.supportsSubscriptions()); - }); - - it('times out when connection is lost mid-chunk', async function () { - this.timeout(5000); - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3( - new Web3.providers.WebsocketProvider( - host + port, - {timeout: 1000} - ) - ); - - await new Promise(resolve => { - web3.currentProvider.once('error', function(err){ - assert(err.message.includes('CONNECTION TIMEOUT: timeout of 1000 ms achived')); - resolve(); - }); - - web3.currentProvider._parseResponse('abc|--|dedf'); - }); - }); - - it('manually reconnecting', function () { - this.timeout(6000); - - return new Promise(async function (resolve) { - let stage = 0; - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3(new Web3.providers.WebsocketProvider(host + port)); - - web3.currentProvider.on('connect', async function () { - if (stage === 0) { - web3.currentProvider.reconnect(); - stage = 1; - } else { - await pify(server.close)(); - this.removeAllListeners(); - resolve(); - } - }); - }); - }); - - it('calling of reconnect with auto-reconnecting activated', function () { - this.timeout(6000); - - return new Promise(async function (resolve) { - let stage = 0; - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3(new Web3.providers.WebsocketProvider( - host + port, {reconnect: {auto: true}} - ) - ); - - web3.currentProvider.on('connect', async function () { - if (stage === 0) { - web3.currentProvider.reconnect(); - stage = 1; - } else { - await pify(server.close)(); - this.removeAllListeners(); - resolve(); - } - }); - }); - }); - - it('automatically connects as soon as the WS socket of the node is running', function () { - return new Promise(async function (resolve) { - web3 = new Web3( - new Web3.providers.WebsocketProvider( - host + port, - {reconnect: {auto: true}} - ) - ); - - web3.currentProvider.once('connect', async function () { - await pify(server.close)(); - resolve(); - }); - - server = ganache.server({port: port}); - await pify(server.listen)(port); - }); - }); - - it('reached the max. configured attempts and throws the expected error', function () { - this.timeout(6000); - - return new Promise(async function (resolve) { - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3( - new Web3.providers.WebsocketProvider( - host + port, - {reconnect: {auto: true, maxAttempts: 1}} - ) - ); - - web3.currentProvider.once('connect', async function () { - await pify(server.close)(); - }); - - web3.currentProvider.once('error', function (error) { - assert(error.message.includes('Maximum number of reconnect attempts reached!')); - resolve(); - }); - }); - }); - - it('errors when call is made after max. configured attempts has elapsed', function () { - this.timeout(6000); - - return new Promise(async function (resolve) { - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3( - new Web3.providers.WebsocketProvider( - host + port, - {reconnect: {auto: true, maxAttempts: 1, delay: 1000,}} - ) - ); - - web3.currentProvider.once('connect', async function () { - await pify(server.close)(); - await utils.waitSeconds(2); - - try { - await web3.eth.getBlockNumber(); - } catch (err) { - assert(err.message.includes('connection not open on send()')); - resolve(); - } - }); - }); - }); - - it('does not auto reconnect after max. configured attempts has elapsed', function () { - this.timeout(6000); - - return new Promise(async function (resolve) { - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3( - new Web3.providers.WebsocketProvider( - host + port, - {reconnect: {auto: true, maxAttempts: 1, delay: 1000,}} - ) - ); - - web3.currentProvider.once('connect', async function () { - // Close and then re-open server after - // reconnection window has elapsed. - await pify(server.close)(); - await utils.waitSeconds(2); - await pify(server.listen)(port); - - try { - await web3.eth.getBlockNumber(); - } catch (err){ - assert(err.message.includes('connection not open on send()')); - resolve(); - } - - }); - }); - }); - - it('allows disconnection when reconnect is enabled', function () { - this.timeout(6000); - - return new Promise(async function (resolve, reject) { - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3( - new Web3.providers.WebsocketProvider( - host + port, - {reconnect: {auto: true, maxAttempts: 1}} - ) - ); - - web3.currentProvider.once('connect', async function () { - web3.currentProvider.disconnect(); - - try { - await web3.eth.getBlockNumber(); - assert.fail(); - } catch (err) { - await pify(server.close)(); - assert(err.message.includes('connection not open on send')); - assert(typeof err.code === 'undefined'); - assert(typeof err.reason === 'undefined'); - resolve(); - } - }); - }); - }); - - // This test fails - the logic running in reconnect timeout doesn't know about the disconnect? - it.skip('allows disconnection on lost connection, when reconnect is enabled', function () { - this.timeout(6000); - let stage = 0; - - return new Promise(async function (resolve, reject) { - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3( - new Web3.providers.WebsocketProvider( - host + port, - {reconnect: {auto: true, maxAttempts: 1}} - ) - ); - - //Shutdown server - web3.currentProvider.on('connect', async function () { - // Stay isolated, just in case; - if (stage === 0){ - await pify(server.close)(); - web3.currentProvider.disconnect(); - stage = 1; - } - }); - - web3.currentProvider.on('error', function (error) { - assert(error.message.includes('Maximum number of reconnect attempts reached!')); - reject(new Error('Could not disconnect...')); - }); - }); - }); - - it('uses the custom configured delay on re-connect', function () { - let timeout; - this.timeout(4000); - - return new Promise(async function (resolve, reject) { - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3( - new Web3.providers.WebsocketProvider( - host + port, - {reconnect: {auto: true, delay: 3000, maxAttempts: 1}} - ) - ); - - web3.currentProvider.once('connect', async function () { - await pify(server.close)(); - timeout = setTimeout(function () { - reject(new Error('Test Failed: Configured delay is not applied!')); - }, 3100); - }); - - web3.currentProvider.once('reconnect', function () { - clearTimeout(timeout); - resolve(); - }); - }); - }); - - - it('clears pending requests on maxAttempts failed reconnection', function () { - this.timeout(6000); - - return new Promise(async function (resolve) { - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3( - new Web3.providers.WebsocketProvider( - host + port, - {reconnect: {auto: true, maxAttempts: 1}} - ) - ); - - web3.currentProvider.once('connect', async function () { - await pify(server.close)(); - }); - - web3.currentProvider.once('reconnect', async function () { - try { - await web3.eth.getBlockNumber(); - assert.fail(); - } catch (err) { - assert(err.message.includes('Maximum number of reconnect attempts')); - resolve(); - } - }); - }); - }); - - it('queues requests made while connection is lost / executes on reconnect', function () { - this.timeout(10000); - let stage = 0; - - return new Promise(async function (resolve) { - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3( - new Web3.providers.WebsocketProvider( - host + port, - {reconnect: {auto: true, delay: 2000, maxAttempts: 5}} - ) - ); - - web3.currentProvider.on('connect', async function () { - if (stage === 0){ - await pify(server.close)(); - stage = 1; - } - }); - - setTimeout(async function(){ - assert(stage === 1); - - const deferred = web3.eth.getBlockNumber(); - - server = ganache.server({port: port}); - await pify(server.listen)(port); - - const blockNumber = await deferred; - assert(blockNumber === 0); - - web3.currentProvider.removeAllListeners(); - resolve(); - },2500); - }); - }); - - it('errors when failing to reconnect after data is lost mid-chunk', async function () { - this.timeout(7000); - server = ganache.server({port: port}); - await pify(server.listen)(port); - - web3 = new Web3( - new Web3.providers.WebsocketProvider( - host + port, - { - timeout: 1000, - reconnect: { - auto: true, - delay: 2000, - maxAttempts: 1, - onTimeout: true - } - } - ) - ); - - await new Promise(async resolve => { - web3.currentProvider.once('error', function(err){ - assert(err.message.includes('Maximum number of reconnect attempts reached')); - resolve(); - }); - - await pify(server.close)(); - web3.currentProvider._parseResponse('abc|--|dedf'); - }); - }); -}); diff --git a/tools/eslint-config-base-web3/.eslintignore b/tools/eslint-config-base-web3/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/tools/eslint-config-base-web3/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/tools/eslint-config-base-web3/.eslintrc.json b/tools/eslint-config-base-web3/.eslintrc.json new file mode 100644 index 00000000000..715a12f1966 --- /dev/null +++ b/tools/eslint-config-base-web3/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "./ts.js" +} diff --git a/tools/eslint-config-base-web3/.gitignore b/tools/eslint-config-base-web3/.gitignore new file mode 100644 index 00000000000..40b878db5b1 --- /dev/null +++ b/tools/eslint-config-base-web3/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/tools/eslint-config-base-web3/.npmignore b/tools/eslint-config-base-web3/.npmignore new file mode 100644 index 00000000000..12178debbf9 --- /dev/null +++ b/tools/eslint-config-base-web3/.npmignore @@ -0,0 +1,13 @@ +.babelrc +.eslintignore +.eslintrc.json +.eslintrc.js +.gitignore +.lintstagedrc.json +.nycrc +.prettierrc.json +.prettierignore +cypress.json +index.html +Jenkinsfile* +*.log diff --git a/tools/eslint-config-base-web3/.prettierignore b/tools/eslint-config-base-web3/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/tools/eslint-config-base-web3/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/tools/eslint-config-base-web3/CHANGELOG.md b/tools/eslint-config-base-web3/CHANGELOG.md new file mode 100644 index 00000000000..dc93264a3e0 --- /dev/null +++ b/tools/eslint-config-base-web3/CHANGELOG.md @@ -0,0 +1,36 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + diff --git a/tools/eslint-config-base-web3/package.json b/tools/eslint-config-base-web3/package.json new file mode 100644 index 00000000000..d8487f9f237 --- /dev/null +++ b/tools/eslint-config-base-web3/package.json @@ -0,0 +1,51 @@ +{ + "name": "eslint-config-base-web3", + "version": "0.1.0", + "description": "Base eslint config for Web3 project.", + "author": "ChainSafe Systems", + "private": true, + "license": "LGPL-3.0", + "keywords": [ + "eslint", + "ethereum", + "eth", + "web3", + "web3js", + "web3.js", + "blockchain" + ], + "homepage": "https://github.com/ChainSafe/web3.js#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/ChainSafe/web3.js.git" + }, + "bugs": { + "url": "https://github.com/ChainSafe/web3.js/issues" + }, + "engines": { + "node": ">=12", + "npm": ">=6.12.0" + }, + "main": "ts.js", + "scripts": { + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'" + }, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-plugin-import": "^2.26.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-jest": "^26.6.0", + "eslint-plugin-tsdoc": "^0.2.16", + "eslint-plugin-no-null": "^1.0.2" + }, + "devDependencies": { + "eslint-plugin-deprecation": "^1.3.2", + "eslint-plugin-header": "^3.1.1", + "typescript": "^4.7.4" + } +} diff --git a/tools/eslint-config-base-web3/ts-jest.js b/tools/eslint-config-base-web3/ts-jest.js new file mode 100644 index 00000000000..5de10d25add --- /dev/null +++ b/tools/eslint-config-base-web3/ts-jest.js @@ -0,0 +1,57 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +module.exports = { + parser: '@typescript-eslint/parser', + plugins: ['@typescript-eslint', 'jest', 'header', 'no-null'], + extends: ['./ts', 'plugin:jest/recommended', 'plugin:jest/style'], + env: { + 'jest/globals': true, + }, + rules: { + 'require-extensions/require-extensions': 'off', + 'jest/valid-title': ['error'], + 'jest/no-conditional-expect': ['error'], + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + 'jest/consistent-test-it': ['error'], + 'class-methods-use-this': ['error'], + '@typescript-eslint/no-magic-numbers': 'off', + '@typescript-eslint/unbound-method': 'off', + '@typescript-eslint/no-require-imports': ['error'], + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-call': ['error'], + '@typescript-eslint/no-unsafe-return': ['error'], + '@typescript-eslint/no-empty-function': ['error'], + '@typescript-eslint/ban-types': [ + 'error', + { + types: { + null: "Use 'undefined' instead of 'null'", + }, + }, + ], + '@typescript-eslint/require-await': ['warn'], + '@typescript-eslint/restrict-template-expressions': ['warn'], + 'dot-notation': 'off', + 'lines-between-class-members': 'off', + 'arrow-body-style': 'off', + 'no-underscore-dangle': 'off', + 'no-null/no-null': ['error'], + }, +}; diff --git a/tools/eslint-config-base-web3/ts.js b/tools/eslint-config-base-web3/ts.js new file mode 100644 index 00000000000..43584483178 --- /dev/null +++ b/tools/eslint-config-base-web3/ts.js @@ -0,0 +1,145 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +const license = [ + '', + 'This file is part of web3.js.', + '', + 'web3.js is free software: you can redistribute it and/or modify', + 'it under the terms of the GNU Lesser General Public License as published by', + 'the Free Software Foundation, either version 3 of the License, or', + '(at your option) any later version.', + '', + 'web3.js is distributed in the hope that it will be useful,', + 'but WITHOUT ANY WARRANTY; without even the implied warranty of', + 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the', + 'GNU Lesser General Public License for more details.', + '', + 'You should have received a copy of the GNU Lesser General Public License', + 'along with web3.js. If not, see .', + '', +]; + +module.exports = { + parser: '@typescript-eslint/parser', + plugins: [ + '@typescript-eslint', + 'header', + 'deprecation', + 'eslint-plugin-tsdoc', + 'no-null', + 'require-extensions', + ], + extends: [ + 'airbnb-base', + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/recommended-requiring-type-checking', + 'prettier', + 'plugin:import/errors', + 'plugin:import/warnings', + 'plugin:import/typescript', + ], + rules: { + 'require-extensions/require-extensions': 'error', + 'deprecation/deprecation': 'error', + 'header/header': [2, 'block', license, 1], + 'class-methods-use-this': ['error'], + 'no-unused-expressions': ['error'], + 'no-continue': 'off', + 'no-underscore-dangle': 'off', + 'import/prefer-default-export': 'off', + 'lines-between-class-members': 'off', + 'no-use-before-define': ['error'], + 'no-shadow': 'off', + '@typescript-eslint/no-shadow': ['error'], + 'no-console': ['error', { allow: ['error', 'info', 'warn'] }], + '@typescript-eslint/no-floating-promises': ['error'], + '@typescript-eslint/prefer-for-of': ['error'], + '@typescript-eslint/consistent-type-assertions': ['error'], + '@typescript-eslint/explicit-member-accessibility': ['error'], + '@typescript-eslint/member-delimiter-style': ['error'], + '@typescript-eslint/member-ordering': [ + 'error', + { default: ['public-static-field', 'public-instance-method'] }, + ], + '@typescript-eslint/no-extraneous-class': ['error'], + '@typescript-eslint/no-unnecessary-boolean-literal-compare': ['error'], + '@typescript-eslint/no-unnecessary-qualifier': ['error'], + '@typescript-eslint/no-unnecessary-type-arguments': ['error'], + '@typescript-eslint/prefer-function-type': ['error'], + '@typescript-eslint/prefer-includes': ['error'], + '@typescript-eslint/prefer-nullish-coalescing': ['error'], + '@typescript-eslint/prefer-optional-chain': ['error'], + '@typescript-eslint/prefer-readonly': ['error'], + '@typescript-eslint/prefer-reduce-type-parameter': ['error'], + '@typescript-eslint/prefer-string-starts-ends-with': ['error'], + '@typescript-eslint/prefer-ts-expect-error': ['error'], + '@typescript-eslint/promise-function-async': ['error'], + '@typescript-eslint/require-array-sort-compare': ['error'], + '@typescript-eslint/switch-exhaustiveness-check': ['error'], + '@typescript-eslint/type-annotation-spacing': ['error'], + // Multiple constructors are more readable + '@typescript-eslint/unified-signatures': 'off', + '@typescript-eslint/no-unused-expressions': ['error'], + '@typescript-eslint/no-useless-constructor': ['error'], + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/ban-types': [ + 'error', + { + types: { + null: "Use 'undefined' instead of 'null'", + }, + }, + ], + '@typescript-eslint/no-unused-vars': 'warn', + 'import/extensions': [ + 'error', + 'ignorePackages', + { + js: 'never', + jsx: 'never', + ts: 'never', + tsx: 'never', + }, + ], + 'no-await-in-loop': ['error'], + 'no-restricted-syntax': [ + 'error', + { + selector: 'ForInStatement', + message: + 'for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.', + }, + { + selector: 'LabeledStatement', + message: + 'Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.', + }, + { + selector: 'WithStatement', + message: + '`with` is disallowed in strict mode because it makes code impossible to predict and optimize.', + }, + ], + 'no-null/no-null': ['error'], + 'tsdoc/syntax': 'warn', + }, + globals: { + BigInt: true, + }, +}; diff --git a/tools/web3-packagetemplate/.eslintignore b/tools/web3-packagetemplate/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/tools/web3-packagetemplate/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/tools/web3-packagetemplate/.eslintrc.js b/tools/web3-packagetemplate/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/tools/web3-packagetemplate/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/tools/web3-packagetemplate/.gitignore b/tools/web3-packagetemplate/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tools/web3-packagetemplate/.npmignore b/tools/web3-packagetemplate/.npmignore new file mode 120000 index 00000000000..8a0be70f3ed --- /dev/null +++ b/tools/web3-packagetemplate/.npmignore @@ -0,0 +1 @@ +../../templates/.npmignore.tmpl \ No newline at end of file diff --git a/tools/web3-packagetemplate/.npmrc b/tools/web3-packagetemplate/.npmrc new file mode 120000 index 00000000000..5cc817c4313 --- /dev/null +++ b/tools/web3-packagetemplate/.npmrc @@ -0,0 +1 @@ +../../templates/.npmrc.tmpl \ No newline at end of file diff --git a/tools/web3-packagetemplate/.prettierignore b/tools/web3-packagetemplate/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/tools/web3-packagetemplate/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/tools/web3-packagetemplate/.prettierrc.json b/tools/web3-packagetemplate/.prettierrc.json new file mode 120000 index 00000000000..00ecd510aaf --- /dev/null +++ b/tools/web3-packagetemplate/.prettierrc.json @@ -0,0 +1 @@ +../../templates/.prettierrc.json.tmpl \ No newline at end of file diff --git a/tools/web3-packagetemplate/CHANGELOG.md b/tools/web3-packagetemplate/CHANGELOG.md new file mode 100644 index 00000000000..3366ab50bbd --- /dev/null +++ b/tools/web3-packagetemplate/CHANGELOG.md @@ -0,0 +1,49 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [1.1.1-rc.1] + +### Added + +- Added source files (#5956) +- Added hybrid build (ESM and CJS) of library (#5904) + +## [1.1.1] + +- Stable release + +## [Unreleased] diff --git a/tools/web3-packagetemplate/README.md b/tools/web3-packagetemplate/README.md new file mode 100644 index 00000000000..4fe1e0036b6 --- /dev/null +++ b/tools/web3-packagetemplate/README.md @@ -0,0 +1,59 @@ +

+ web3.js +

+ +# web3.js - Package Template + +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] + +This is a sub-package of [web3.js][repo]. + +`web3-packagetemplate` contains the ideal setup for a Web3.js package. + +## Installation + +You can install the package either using [NPM](https://www.npmjs.com/package/web3-packagetemplate) or using [Yarn](https://yarnpkg.com/package/web3-packagetemplate) + +### Using NPM + +```bash +npm install web3-packagetemplate +``` + +### Using Yarn + +```bash +yarn add web3-packagetemplate +``` + +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts + +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | + +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/tools/web3-packagetemplate +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=tools%2Fweb3-packagetemplate%2Fpackage.json +[npm-url]: https://npmjs.org/package/web3-packagetemplate +[downloads-image]: https://img.shields.io/npm/dm/web3-packagetemplate?label=npm%20downloads diff --git a/tools/web3-packagetemplate/assets/logo/web3js.ai b/tools/web3-packagetemplate/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/tools/web3-packagetemplate/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/tools/web3-packagetemplate/assets/logo/web3js.jpg b/tools/web3-packagetemplate/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/tools/web3-packagetemplate/assets/logo/web3js.jpg differ diff --git a/tools/web3-packagetemplate/assets/logo/web3js.svg b/tools/web3-packagetemplate/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/tools/web3-packagetemplate/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/tools/web3-packagetemplate/package.json b/tools/web3-packagetemplate/package.json new file mode 100644 index 00000000000..c9181be53a0 --- /dev/null +++ b/tools/web3-packagetemplate/package.json @@ -0,0 +1,50 @@ +{ + "name": "web3-packagetemplate", + "version": "1.1.1", + "description": "Package template for Web3 4.x.x", + "main": "lib/index.js", + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json", + "build:esm": "tsc --build tsconfig.esm.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + } +} diff --git a/tools/web3-packagetemplate/src/errors.ts b/tools/web3-packagetemplate/src/errors.ts new file mode 100644 index 00000000000..303b68944fe --- /dev/null +++ b/tools/web3-packagetemplate/src/errors.ts @@ -0,0 +1,16 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ diff --git a/tools/web3-packagetemplate/src/index.ts b/tools/web3-packagetemplate/src/index.ts new file mode 100644 index 00000000000..303b68944fe --- /dev/null +++ b/tools/web3-packagetemplate/src/index.ts @@ -0,0 +1,16 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ diff --git a/tools/web3-packagetemplate/src/types.ts b/tools/web3-packagetemplate/src/types.ts new file mode 100644 index 00000000000..303b68944fe --- /dev/null +++ b/tools/web3-packagetemplate/src/types.ts @@ -0,0 +1,16 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ diff --git a/tools/web3-packagetemplate/test/.eslintrc.js b/tools/web3-packagetemplate/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/tools/web3-packagetemplate/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/tools/web3-packagetemplate/test/config/jest.config.js b/tools/web3-packagetemplate/test/config/jest.config.js new file mode 120000 index 00000000000..b875b48129d --- /dev/null +++ b/tools/web3-packagetemplate/test/config/jest.config.js @@ -0,0 +1 @@ +../../../../templates/jest.config.js.tmpl \ No newline at end of file diff --git a/tools/web3-packagetemplate/test/config/setup.js b/tools/web3-packagetemplate/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/tools/web3-packagetemplate/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/tools/web3-packagetemplate/test/integration/jest.config.js b/tools/web3-packagetemplate/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/tools/web3-packagetemplate/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/tools/web3-packagetemplate/test/integration/setup.js b/tools/web3-packagetemplate/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/tools/web3-packagetemplate/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/tools/web3-packagetemplate/test/tsconfig.json b/tools/web3-packagetemplate/test/tsconfig.json new file mode 120000 index 00000000000..c73c54e77b4 --- /dev/null +++ b/tools/web3-packagetemplate/test/tsconfig.json @@ -0,0 +1 @@ +../../../templates/test/tsconfig.json.tmpl \ No newline at end of file diff --git a/tools/web3-packagetemplate/test/unit/constructor.test.ts b/tools/web3-packagetemplate/test/unit/constructor.test.ts new file mode 100644 index 00000000000..5d08d50bebc --- /dev/null +++ b/tools/web3-packagetemplate/test/unit/constructor.test.ts @@ -0,0 +1,37 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// import Web3ProviderBase from '../../src/index' +// import {ProviderOptions} from '../../types' + +describe('constructs a PLACEHOLDER instance with expected properties', () => { + // let providerOptions: ProviderOptions + + beforeEach(() => { + // providerOptions = { + // providerUrl: 'http://127.0.0.1:8545' + // } + }); + + it('should construct with expected properties', () => { + // const web3ProviderBase = new Web3ProviderBase(providerOptions) + // expect(web3ProviderBase).toMatchObject({ + // _providerUrl: providerOptions.providerUrl + // }) + expect(true).toBeTruthy(); + }); +}); diff --git a/tools/web3-packagetemplate/test/unit/jest.config.js b/tools/web3-packagetemplate/test/unit/jest.config.js new file mode 100644 index 00000000000..ceac341e332 --- /dev/null +++ b/tools/web3-packagetemplate/test/unit/jest.config.js @@ -0,0 +1,9 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '.coverage/unit', + collectCoverageFrom: ['src/**'], +}; diff --git a/tools/web3-packagetemplate/tsconfig.cjs.json b/tools/web3-packagetemplate/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/tools/web3-packagetemplate/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/tools/web3-packagetemplate/tsconfig.esm.json b/tools/web3-packagetemplate/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/tools/web3-packagetemplate/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/tools/web3-packagetemplate/tsconfig.types.json b/tools/web3-packagetemplate/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/tools/web3-packagetemplate/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/tools/web3-packagetemplate/tsdoc.json b/tools/web3-packagetemplate/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/tools/web3-packagetemplate/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/tools/web3-plugin-example/.eslintignore b/tools/web3-plugin-example/.eslintignore new file mode 100644 index 00000000000..a40b49b7ba2 --- /dev/null +++ b/tools/web3-plugin-example/.eslintignore @@ -0,0 +1,5 @@ +dist +lib +jest.config.js +webpack.config.js +.eslintrc.js diff --git a/tools/web3-plugin-example/.eslintrc.js b/tools/web3-plugin-example/.eslintrc.js new file mode 100644 index 00000000000..8b7fd410b8d --- /dev/null +++ b/tools/web3-plugin-example/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/tools/web3-plugin-example/.gitignore b/tools/web3-plugin-example/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tools/web3-plugin-example/.npmignore b/tools/web3-plugin-example/.npmignore new file mode 100644 index 00000000000..0b1a9d71c23 --- /dev/null +++ b/tools/web3-plugin-example/.npmignore @@ -0,0 +1,26 @@ +.babelrc +.eslintignore +.eslintrc.json +.eslintrc.js +.gitignore +.lintstagedrc.json +.nycrc +.prettierrc.json +.prettierignore +cypress.json +index.html +Jenkinsfile* +*.log + +.nyc_output/ +coverage/ +benchmark/ +.coverage/ +cypress/ +fixtures/ +tmp/ +logs/ +test/ +scripts/ +browsertest/ +examples/ diff --git a/tools/web3-plugin-example/.prettierignore b/tools/web3-plugin-example/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/tools/web3-plugin-example/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/tools/web3-plugin-example/.prettierrc.json b/tools/web3-plugin-example/.prettierrc.json new file mode 100644 index 00000000000..7b23ef55098 --- /dev/null +++ b/tools/web3-plugin-example/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": true, + "arrowParens": "avoid" +} diff --git a/tools/web3-plugin-example/CHANGELOG.md b/tools/web3-plugin-example/CHANGELOG.md new file mode 100644 index 00000000000..65e4434200c --- /dev/null +++ b/tools/web3-plugin-example/CHANGELOG.md @@ -0,0 +1,91 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [0.1.0-alpha.1] + +### Added + +- Example plugin for wrapping contract methods to provide custom functionality (#5393) +- Example plugin for custom RPC methods using the `requestManager` (#5393) + +## [0.1.0-alpha.2] + +### Changed + +- Updated dependencies (#5725) + +## [1.0.0-rc.0] + +### Changed + +- Updated dependencies + +## [1.0.0-rc.1] + +### Added + +- Added source files (#5956) + +## [1.0.0] + +- Stable release + +## [1.0.1] + +### Changed + +- Dependencies updated + +## [1.0.2] + +### Changed + +- Dependencies updated + +## [1.0.4] + +### Changed + +- Dependencies updated + +## [1.0.6] + +### Changed + +- Dependencies updated + +## [Unreleased] \ No newline at end of file diff --git a/tools/web3-plugin-example/README.md b/tools/web3-plugin-example/README.md new file mode 100644 index 00000000000..f06e2d7d065 --- /dev/null +++ b/tools/web3-plugin-example/README.md @@ -0,0 +1,57 @@ +

+ web3.js +

+ +# Web3 Plugin Example + +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] + +This is an example of a plugin implementation for [web3.js][repo]. + +## Installation + +You can install the package either using [NPM](https://www.npmjs.com/package/web3-plugin-example) or using [Yarn](https://yarnpkg.com/package/web3-plugin-example) + +### Using NPM + +```bash +npm install web3-plugin-example +``` + +### Using Yarn + +```bash +yarn add web3-plugin-example +``` + +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts + +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | + +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/tools/web3-plugin-example +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=tools%2Fweb3-plugin-example%2Fpackage.json +[npm-url]: https://npmjs.org/package/web3-plugin-example +[downloads-image]: https://img.shields.io/npm/dm/web3-plugin-example?label=npm%20downloads diff --git a/tools/web3-plugin-example/assets/logo/web3js.ai b/tools/web3-plugin-example/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/tools/web3-plugin-example/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/tools/web3-plugin-example/assets/logo/web3js.jpg b/tools/web3-plugin-example/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/tools/web3-plugin-example/assets/logo/web3js.jpg differ diff --git a/tools/web3-plugin-example/assets/logo/web3js.svg b/tools/web3-plugin-example/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/tools/web3-plugin-example/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/tools/web3-plugin-example/package.json b/tools/web3-plugin-example/package.json new file mode 100644 index 00000000000..6e5782e9f3d --- /dev/null +++ b/tools/web3-plugin-example/package.json @@ -0,0 +1,62 @@ +{ + "name": "web3-plugin-example", + "version": "1.0.6", + "description": "Example implementations of Web3.js' 4.x plugin system", + "repository": "https://github.com/ChainSafe/web3.js", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "keywords": [ + "Ethereum", + "JavaScript", + "API" + ], + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "tsc --build", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4", + "web3": "^4.2.1", + "web3-core": "^4.3.0", + "web3-eth-abi": "^4.1.4", + "web3-eth-contract": "^4.1.2", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" + }, + "peerDependencies": { + "web3-core": ">= 4.1.1 < 5", + "web3-eth-abi": ">= 4.1.1 < 5", + "web3-eth-contract": ">= 4.0.5 < 5", + "web3-types": ">= 1.1.1 < 5", + "web3-utils": ">= 4.0.5 < 5" + } +} diff --git a/tools/web3-plugin-example/src/ERC20Token.ts b/tools/web3-plugin-example/src/ERC20Token.ts new file mode 100644 index 00000000000..b13578a62d1 --- /dev/null +++ b/tools/web3-plugin-example/src/ERC20Token.ts @@ -0,0 +1,141 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const ERC20TokenAbi = [ + { + inputs: [{ internalType: 'uint256', name: 'initialSupply', type: 'uint256' }], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'owner', type: 'address' }, + { indexed: true, internalType: 'address', name: 'spender', type: 'address' }, + { indexed: false, internalType: 'uint256', name: 'value', type: 'uint256' }, + ], + name: 'Approval', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'from', type: 'address' }, + { indexed: true, internalType: 'address', name: 'to', type: 'address' }, + { indexed: false, internalType: 'uint256', name: 'value', type: 'uint256' }, + ], + name: 'Transfer', + type: 'event', + }, + { + inputs: [ + { internalType: 'address', name: 'owner', type: 'address' }, + { internalType: 'address', name: 'spender', type: 'address' }, + ], + name: 'allowance', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'spender', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'approve', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [{ internalType: 'address', name: 'account', type: 'address' }], + name: 'balanceOf', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'decimals', + outputs: [{ internalType: 'uint8', name: '', type: 'uint8' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'spender', type: 'address' }, + { internalType: 'uint256', name: 'subtractedValue', type: 'uint256' }, + ], + name: 'decreaseAllowance', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'spender', type: 'address' }, + { internalType: 'uint256', name: 'addedValue', type: 'uint256' }, + ], + name: 'increaseAllowance', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'name', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'symbol', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'totalSupply', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'transfer', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'from', type: 'address' }, + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'transferFrom', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'nonpayable', + type: 'function', + }, +] as const; +export const ERC20TokenBytecode = + '0x60806040523480156200001157600080fd5b50604051620017a8380380620017a8833981810160405281019062000037919062000362565b6040518060400160405280600481526020017f476f6c64000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f474c4400000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb92919062000272565b508060049080519060200190620000d492919062000272565b505050620000e93382620000f060201b60201c565b5062000535565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000162576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015990620003f5565b60405180910390fd5b62000176600083836200026860201b60201c565b80600260008282546200018a919062000446565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620001e1919062000446565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002489190620004b4565b60405180910390a362000264600083836200026d60201b60201c565b5050565b505050565b505050565b828054620002809062000500565b90600052602060002090601f016020900481019282620002a45760008555620002f0565b82601f10620002bf57805160ff1916838001178555620002f0565b82800160010185558215620002f0579182015b82811115620002ef578251825591602001919060010190620002d2565b5b509050620002ff919062000303565b5090565b5b808211156200031e57600081600090555060010162000304565b5090565b600080fd5b6000819050919050565b6200033c8162000327565b81146200034857600080fd5b50565b6000815190506200035c8162000331565b92915050565b6000602082840312156200037b576200037a62000322565b5b60006200038b848285016200034b565b91505092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620003dd601f8362000394565b9150620003ea82620003a5565b602082019050919050565b600060208201905081810360008301526200041081620003ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620004538262000327565b9150620004608362000327565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000498576200049762000417565b5b828201905092915050565b620004ae8162000327565b82525050565b6000602082019050620004cb6000830184620004a3565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200051957607f821691505b6020821081036200052f576200052e620004d1565b5b50919050565b61126380620005456000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b1e565b60405180910390f35b6100e660048036038101906100e19190610bd9565b610308565b6040516100f39190610c34565b60405180910390f35b61010461032b565b6040516101119190610c5e565b60405180910390f35b610134600480360381019061012f9190610c79565b610335565b6040516101419190610c34565b60405180910390f35b610152610364565b60405161015f9190610ce8565b60405180910390f35b610182600480360381019061017d9190610bd9565b61036d565b60405161018f9190610c34565b60405180910390f35b6101b260048036038101906101ad9190610d03565b6103a4565b6040516101bf9190610c5e565b60405180910390f35b6101d06103ec565b6040516101dd9190610b1e565b60405180910390f35b61020060048036038101906101fb9190610bd9565b61047e565b60405161020d9190610c34565b60405180910390f35b610230600480360381019061022b9190610bd9565b6104f5565b60405161023d9190610c34565b60405180910390f35b610260600480360381019061025b9190610d30565b610518565b60405161026d9190610c5e565b60405180910390f35b60606003805461028590610d9f565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610d9f565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b60008061031361059f565b90506103208185856105a7565b600191505092915050565b6000600254905090565b60008061034061059f565b905061034d858285610770565b6103588585856107fc565b60019150509392505050565b60006012905090565b60008061037861059f565b905061039981858561038a8589610518565b6103949190610dff565b6105a7565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610d9f565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610d9f565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b60008061048961059f565b905060006104978286610518565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610ec7565b60405180910390fd5b6104e982868684036105a7565b60019250505092915050565b60008061050061059f565b905061050d8185856107fc565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d90610f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c90610feb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107639190610c5e565b60405180910390a3505050565b600061077c8484610518565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107f657818110156107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90611057565b60405180910390fd5b6107f584848484036105a7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361086b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610862906110e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d19061117b565b60405180910390fd5b6108e5838383610a7b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561096b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109629061120d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109fe9190610dff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a629190610c5e565b60405180910390a3610a75848484610a80565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610abf578082015181840152602081019050610aa4565b83811115610ace576000848401525b50505050565b6000601f19601f8301169050919050565b6000610af082610a85565b610afa8185610a90565b9350610b0a818560208601610aa1565b610b1381610ad4565b840191505092915050565b60006020820190508181036000830152610b388184610ae5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b7082610b45565b9050919050565b610b8081610b65565b8114610b8b57600080fd5b50565b600081359050610b9d81610b77565b92915050565b6000819050919050565b610bb681610ba3565b8114610bc157600080fd5b50565b600081359050610bd381610bad565b92915050565b60008060408385031215610bf057610bef610b40565b5b6000610bfe85828601610b8e565b9250506020610c0f85828601610bc4565b9150509250929050565b60008115159050919050565b610c2e81610c19565b82525050565b6000602082019050610c496000830184610c25565b92915050565b610c5881610ba3565b82525050565b6000602082019050610c736000830184610c4f565b92915050565b600080600060608486031215610c9257610c91610b40565b5b6000610ca086828701610b8e565b9350506020610cb186828701610b8e565b9250506040610cc286828701610bc4565b9150509250925092565b600060ff82169050919050565b610ce281610ccc565b82525050565b6000602082019050610cfd6000830184610cd9565b92915050565b600060208284031215610d1957610d18610b40565b5b6000610d2784828501610b8e565b91505092915050565b60008060408385031215610d4757610d46610b40565b5b6000610d5585828601610b8e565b9250506020610d6685828601610b8e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610db757607f821691505b602082108103610dca57610dc9610d70565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e0a82610ba3565b9150610e1583610ba3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610e4a57610e49610dd0565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610eb1602583610a90565b9150610ebc82610e55565b604082019050919050565b60006020820190508181036000830152610ee081610ea4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000610f43602483610a90565b9150610f4e82610ee7565b604082019050919050565b60006020820190508181036000830152610f7281610f36565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000610fd5602283610a90565b9150610fe082610f79565b604082019050919050565b6000602082019050818103600083015261100481610fc8565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611041601d83610a90565b915061104c8261100b565b602082019050919050565b6000602082019050818103600083015261107081611034565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006110d3602583610a90565b91506110de82611077565b604082019050919050565b60006020820190508181036000830152611102816110c6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611165602383610a90565b915061117082611109565b604082019050919050565b6000602082019050818103600083015261119481611158565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006111f7602683610a90565b91506112028261119b565b604082019050919050565b60006020820190508181036000830152611226816111ea565b905091905056fea264697066735822122039c50588d39e359807efa398bd1b3aff1b082ef738dddcfa8475048e11f9024e64736f6c634300080d0033'; diff --git a/tools/web3-plugin-example/src/contract_method_wrappers.ts b/tools/web3-plugin-example/src/contract_method_wrappers.ts new file mode 100644 index 00000000000..c9b90a112fd --- /dev/null +++ b/tools/web3-plugin-example/src/contract_method_wrappers.ts @@ -0,0 +1,97 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3PluginBase } from 'web3-core'; +import Contract from 'web3-eth-contract'; +import { Address, ContractAbi, DataFormat, DEFAULT_RETURN_FORMAT, Numbers } from 'web3-types'; +import { format, numberToHex } from 'web3-utils'; +// eslint-disable-next-line require-extensions/require-extensions +import { ERC20TokenAbi } from './ERC20Token'; +// eslint-disable-next-line require-extensions/require-extensions +import { Web3Context } from './reexported_web3_context'; + +export class ContractMethodWrappersPlugin extends Web3PluginBase { + public pluginNamespace = 'contractMethodWrappersPlugin'; + + // This should be private, but it's public so _contract.requestManager.send can + // be mocked in contract_method_wrappers.test.ts + public readonly _contract: Contract; + + public constructor(abi: ContractAbi, address: Address) { + super(); + this._contract = new Contract(abi, address); + } + + /** + * This method overrides the inherited `link` method from `Web3PluginBase` + * to add to a configured `RequestManager` to our Contract instance + * when `Web3.registerPlugin` is called. + * + * @param parentContext - The context to be added to the instance of `ChainlinkPlugin`, + * and by extension, the instance of `Contract`. + */ + public link(parentContext: Web3Context) { + super.link(parentContext); + this._contract.link(parentContext); + } + + public async getFormattedBalance( + address: Address, + returnFormat: ReturnFormat, + ) { + return format( + { format: 'unit' }, + await this._contract.methods.balanceOf(address).call(), + returnFormat, + ); + } + + public async transferAndGetBalances( + sender: Address, + recipient: Address, + amount: Numbers, + returnFormat?: ReturnFormat, + ) { + await this._contract.methods + .transfer(recipient, numberToHex(amount)) + .send({ from: sender, type: 0 }); + return { + sender: { + address: sender, + balance: await this.getFormattedBalance( + sender, + returnFormat ?? DEFAULT_RETURN_FORMAT, + ), + }, + recipient: { + address: recipient, + balance: await this.getFormattedBalance( + recipient, + returnFormat ?? DEFAULT_RETURN_FORMAT, + ), + }, + }; + } +} + +// Module Augmentation +declare module './reexported_web3_context' { + interface Web3Context { + contractMethodWrappersPlugin: ContractMethodWrappersPlugin; + } +} + +export { Web3Context }; diff --git a/tools/web3-plugin-example/src/custom_rpc_methods.ts b/tools/web3-plugin-example/src/custom_rpc_methods.ts new file mode 100644 index 00000000000..101816a9c27 --- /dev/null +++ b/tools/web3-plugin-example/src/custom_rpc_methods.ts @@ -0,0 +1,51 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3PluginBase } from 'web3-core'; +// eslint-disable-next-line require-extensions/require-extensions +import { Web3Context } from './reexported_web3_context'; + +type CustomRpcApi = { + custom_rpc_method: () => string; + custom_rpc_method_with_parameters: (parameter1: string, parameter2: number) => string; +}; + +export class CustomRpcMethodsPlugin extends Web3PluginBase { + public pluginNamespace = 'customRpcMethods'; + + public async customRpcMethod() { + return this.requestManager.send({ + method: 'custom_rpc_method', + params: [], + }); + } + + public async customRpcMethodWithParameters(parameter1: string, parameter2: number) { + return this.requestManager.send({ + method: 'custom_rpc_method_with_parameters', + params: [parameter1, parameter2], + }); + } +} + +// Module Augmentation +declare module './reexported_web3_context' { + interface Web3Context { + customRpcMethods: CustomRpcMethodsPlugin; + } +} + +export { Web3Context }; diff --git a/tools/web3-plugin-example/src/reexported_web3_context.ts b/tools/web3-plugin-example/src/reexported_web3_context.ts new file mode 100644 index 00000000000..c9d87dafcb4 --- /dev/null +++ b/tools/web3-plugin-example/src/reexported_web3_context.ts @@ -0,0 +1,19 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; + +export { Web3Context }; diff --git a/tools/web3-plugin-example/test/.eslintrc.js b/tools/web3-plugin-example/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/tools/web3-plugin-example/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/tools/web3-plugin-example/test/config/jest.config.js b/tools/web3-plugin-example/test/config/jest.config.js new file mode 100644 index 00000000000..eaa5e9049da --- /dev/null +++ b/tools/web3-plugin-example/test/config/jest.config.js @@ -0,0 +1,40 @@ +module.exports = { + globals: { + 'ts-jest': { + tsconfig: './test/tsconfig.json', + }, + }, + rootDir: '../..', + testMatch: ['/test/**/?(*.)+(spec|test).+(ts|tsx|js)'], + setupFilesAfterEnv: ['/test/config/setup.js'], + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + verbose: false, + collectCoverage: false, + coverageReporters: ['json'], + coverageDirectory: '.coverage', + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, +}; diff --git a/tools/web3-plugin-example/test/config/setup.js b/tools/web3-plugin-example/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/tools/web3-plugin-example/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/tools/web3-plugin-example/test/tsconfig.json b/tools/web3-plugin-example/test/tsconfig.json new file mode 100644 index 00000000000..7b7b1624905 --- /dev/null +++ b/tools/web3-plugin-example/test/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig", + "compilerOptions": { + "declaration": false, + "declarationMap": false + }, + "include": ["./**/*", "../node_modules/jest-extended/types/**/*.ts"] +} diff --git a/tools/web3-plugin-example/test/unit/contract_method_wrappers.test.ts b/tools/web3-plugin-example/test/unit/contract_method_wrappers.test.ts new file mode 100644 index 00000000000..0f79df21e49 --- /dev/null +++ b/tools/web3-plugin-example/test/unit/contract_method_wrappers.test.ts @@ -0,0 +1,131 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3 from 'web3'; +import { DEFAULT_RETURN_FORMAT } from 'web3-types'; + +import { ContractMethodWrappersPlugin } from '../../src/contract_method_wrappers'; +import { ERC20TokenAbi } from '../../src/ERC20Token'; + +declare module '../web3_export_helper' { + interface Web3 { + contractMethodWrappersPlugin: ContractMethodWrappersPlugin; + } +} + +describe('ContractMethodWrappersPlugin', () => { + it('should register the plugin', () => { + const web3 = new Web3('http://127.0.0.1:8545'); + web3.registerPlugin( + new ContractMethodWrappersPlugin( + ERC20TokenAbi, + '0xdAC17F958D2ee523a2206206994597C13D831ec7', + ), + ); + expect(web3.contractMethodWrappersPlugin).toBeDefined(); + }); + + describe('methods', () => { + const contractAddress = '0xdAC17F958D2ee523a2206206994597C13D831ec7'; + const sender = '0x8da5e39ec14b57fb9bcd9aa2b4500e909119795d'; + const recipient = '0x4f641def1e7845caab95ac717c80416082430d0d'; + const amount = BigInt(42); + const expectedSenderBalance = + '0x0000000000000000000000000000000000000000000000000000000000000280'; + const expectedRecipientBalance = + '0x0000000000000000000000000000000000000000000000000000000000000120'; + let requestManagerSendSpy: jest.Mock; + + let web3: Web3; + + beforeAll(() => { + web3 = new Web3('http://127.0.0.1:8545'); + web3.registerPlugin(new ContractMethodWrappersPlugin(ERC20TokenAbi, contractAddress)); + }); + + beforeEach(() => { + requestManagerSendSpy = jest.fn(); + web3.contractMethodWrappersPlugin._contract.requestManager.send = requestManagerSendSpy; + }); + + it('should call `getFormattedBalance` with expected RPC object', async () => { + requestManagerSendSpy.mockResolvedValueOnce(expectedSenderBalance); + + await web3.contractMethodWrappersPlugin.getFormattedBalance( + sender, + DEFAULT_RETURN_FORMAT, + ); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_call', + params: [ + expect.objectContaining({ + input: '0x70a082310000000000000000000000008da5e39ec14b57fb9bcd9aa2b4500e909119795d', + to: '0xdAC17F958D2ee523a2206206994597C13D831ec7', + }), + 'latest', + ], + }); + }); + + it('should call `transferAndGetBalances` with expected RPC object', async () => { + const expectedGasPrice = '0x1ca14bd70'; + const expectedTransactionHash = + '0xc41b9a4f654c44552e135f770945916f57c069b80326f9a5f843e613491ab6b1'; + + requestManagerSendSpy.mockResolvedValueOnce(expectedGasPrice); + // Mocking block number for trySendTransaction call + requestManagerSendSpy.mockResolvedValueOnce('0x1'); + requestManagerSendSpy.mockResolvedValueOnce(expectedTransactionHash); + // Mocking response for getTransactionReceipt for waitForTransactionReceipt + requestManagerSendSpy.mockResolvedValueOnce({}); + // Mocking getBlockNumber for waitForTransactionReceipt + requestManagerSendSpy.mockResolvedValueOnce('0x2'); + requestManagerSendSpy.mockResolvedValueOnce(expectedSenderBalance); + requestManagerSendSpy.mockResolvedValueOnce(expectedRecipientBalance); + + const balances = await web3.contractMethodWrappersPlugin.transferAndGetBalances( + sender, + recipient, + amount, + ); + // The first call will be to `eth_gasPrice` and the second is to `eth_blockNumber`. And the third one will be to `eth_sendTransaction`: + expect(requestManagerSendSpy).toHaveBeenNthCalledWith(3, { + method: 'eth_sendTransaction', + params: [ + expect.objectContaining({ + input: '0xa9059cbb0000000000000000000000004f641def1e7845caab95ac717c80416082430d0d000000000000000000000000000000000000000000000000000000000000002a', + from: sender, + gasPrice: expectedGasPrice, + maxFeePerGas: undefined, + maxPriorityFeePerGas: undefined, + to: contractAddress, + }), + ], + }); + + expect(balances).toStrictEqual({ + sender: { + address: sender, + balance: BigInt(expectedSenderBalance), + }, + recipient: { + address: recipient, + balance: BigInt(expectedRecipientBalance), + }, + }); + }); + }); +}); diff --git a/tools/web3-plugin-example/test/unit/custom_rpc_methods.test.ts b/tools/web3-plugin-example/test/unit/custom_rpc_methods.test.ts new file mode 100644 index 00000000000..b65a23dad70 --- /dev/null +++ b/tools/web3-plugin-example/test/unit/custom_rpc_methods.test.ts @@ -0,0 +1,60 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3Context } from 'web3-core'; + +import { CustomRpcMethodsPlugin } from '../../src/custom_rpc_methods'; + +describe('CustomRpcMethodsPlugin', () => { + it('should register the plugin', () => { + const web3Context = new Web3Context('http://127.0.0.1:8545'); + web3Context.registerPlugin(new CustomRpcMethodsPlugin()); + expect(web3Context.customRpcMethods).toBeDefined(); + }); + + describe('methods', () => { + const requestManagerSendSpy = jest.fn(); + + let web3Context: Web3Context; + + beforeAll(() => { + web3Context = new Web3Context('http://127.0.0.1:8545'); + web3Context.registerPlugin(new CustomRpcMethodsPlugin()); + web3Context.requestManager.send = requestManagerSendSpy; + }); + + it('should call `customRpcMethod` with expected RPC object', async () => { + await web3Context.customRpcMethods.customRpcMethod(); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'custom_rpc_method', + params: [], + }); + }); + + it('should call `customRpcMethodWithParameters` with expected RPC object', async () => { + const parameter1 = 'myString'; + const parameter2 = 42; + await web3Context.customRpcMethods.customRpcMethodWithParameters( + parameter1, + parameter2, + ); + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'custom_rpc_method_with_parameters', + params: [parameter1, parameter2], + }); + }); + }); +}); diff --git a/tools/web3-plugin-example/test/unit/jest.config.js b/tools/web3-plugin-example/test/unit/jest.config.js new file mode 100644 index 00000000000..ceac341e332 --- /dev/null +++ b/tools/web3-plugin-example/test/unit/jest.config.js @@ -0,0 +1,9 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '.coverage/unit', + collectCoverageFrom: ['src/**'], +}; diff --git a/tools/web3-plugin-example/test/web3_export_helper.ts b/tools/web3-plugin-example/test/web3_export_helper.ts new file mode 100644 index 00000000000..848ef956ea4 --- /dev/null +++ b/tools/web3-plugin-example/test/web3_export_helper.ts @@ -0,0 +1,19 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import Web3 from 'web3'; + +export { Web3 }; diff --git a/tools/web3-plugin-example/tsconfig.json b/tools/web3-plugin-example/tsconfig.json new file mode 100644 index 00000000000..d0a348ec5ad --- /dev/null +++ b/tools/web3-plugin-example/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "lib", + "esModuleInterop": true, + "module": "commonjs", + "declaration": true, + "declarationMap": true + }, + "include": ["src/**/*"] +} diff --git a/tools/web3-plugin-example/tsdoc.json b/tools/web3-plugin-example/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/tools/web3-plugin-example/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 00000000000..5af026dc58b --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "target": "es2016", + "moduleResolution": "node", + "newLine": "lf", + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "pretty": true, + "removeComments": false, + "sourceMap": true, + "strict": true, + "strictNullChecks": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true + } +} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 025fa0089c2..00000000000 --- a/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "outDir": "./lib", - "allowJs": true, - "target": "esnext", - "pretty": true, - "module": "commonjs", - } -} diff --git a/tsdoc.json b/tsdoc.json new file mode 100644 index 00000000000..9f254efbdde --- /dev/null +++ b/tsdoc.json @@ -0,0 +1,87 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "tagDefinitions": [ + { + "tagName": "@alias", + "syntaxKind": "block", + "allowMultiple": true + }, + { + "tagName": "@function", + "syntaxKind": "inline", + "allowMultiple": false + }, + { + "tagName": "@doclink", + "syntaxKind": "inline", + "allowMultiple": true + }, + + // TODO: When following fix is released we can replace below configuration with `extend` + // https://github.com/TypeStrong/typedoc/issues/2015 + // "extends": ["typedoc/tsdoc.json"], + { + "tagName": "@module", + "syntaxKind": "block" + }, + { + "tagName": "@typedef", + "syntaxKind": "block" + }, + { + "tagName": "@callback", + "syntaxKind": "block" + }, + { + "tagName": "@prop", + "syntaxKind": "block", + "allowMultiple": true + }, + { + "tagName": "@property", + "syntaxKind": "block", + "allowMultiple": true + }, + { + "tagName": "@group", + "syntaxKind": "block", + "allowMultiple": true + }, + { + "tagName": "@category", + "syntaxKind": "block", + "allowMultiple": true + }, + { + "tagName": "@hidden", + "syntaxKind": "modifier" + }, + { + "tagName": "@ignore", + "syntaxKind": "modifier" + }, + { + "tagName": "@enum", + "syntaxKind": "modifier" + }, + { + "tagName": "@event", + "syntaxKind": "modifier" + }, + { + "tagName": "@template", + "syntaxKind": "block", + "allowMultiple": true + }, + { + "tagName": "@linkcode", + "syntaxKind": "inline", + "allowMultiple": true + }, + { + "tagName": "@linkplain", + "syntaxKind": "block", + "allowMultiple": true + } + ] +} diff --git a/verdaccio.yml b/verdaccio.yml index a928f2956f3..42ee34b7f26 100644 --- a/verdaccio.yml +++ b/verdaccio.yml @@ -28,4 +28,4 @@ packages: logs: - {type: stdout, format: pretty, level: warn} server: - keepAliveTimeout: 600 # specified in seconds \ No newline at end of file + keepAliveTimeout: 600 # specified in seconds diff --git a/webpack.base.config.js b/webpack.base.config.js new file mode 100644 index 00000000000..833b1e74aa9 --- /dev/null +++ b/webpack.base.config.js @@ -0,0 +1,75 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +const webpack = require('webpack'); +const path = require('path'); + +/** + * Shared webpack configuration for all packages + */ +function getWebPackConfig(packagePath, filename, library, entry, tsconf) { + return { + mode: 'production', + entry: path.resolve(packagePath, entry), + output: { + path: path.resolve(packagePath, 'dist'), + filename: filename, + library: library, + libraryExport: 'default', + libraryTarget: 'umd', + globalObject: 'this', + }, + + module: { + rules: [ + { + test: /\.ts$/, + loader: 'ts-loader', + options: { + configFile: path.resolve(packagePath, tsconf), + }, + exclude: ['/node_modules/', '/test/'], + }, + ], + }, + resolve: { + extensions: ['.ts', '.js'], + fallback: { + stream: require.resolve('readable-stream'), + }, + extensionAlias: { + '.js': ['.js', '.ts'], + }, + }, + devtool: 'source-map', + plugins: [ + new webpack.IgnorePlugin({ + checkResource(resource) { + // "@ethereumjs/common/genesisStates" consists ~800KB static files which are no more needed + return /(.*\/genesisStates\/.*\.json)/.test(resource); + }, + }), + new webpack.ProvidePlugin({ + process: 'process/browser', + }), + ], + }; +} + +module.exports = { + getWebPackConfig, +}; diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 0fc74e82798..00000000000 --- a/webpack.config.js +++ /dev/null @@ -1,53 +0,0 @@ -const path = require("path"); -const webpack = require("webpack"); -const { CleanWebpackPlugin } = require("clean-webpack-plugin"); - -module.exports = { - mode: "production", - entry: { - web3: "./packages/web3/lib/index.js", - }, - plugins: [ - new CleanWebpackPlugin(), - new webpack.SourceMapDevToolPlugin({ - filename: "[file].map", - }), - ], - resolve: { - modules: ["node_modules"], - }, - module: { - rules: [ - { - test: /\.m?js$/, - use: { - loader: "babel-loader", - options: { - presets: [ - [ - "@babel/preset-env", - { - useBuiltIns: "entry", - corejs: 3, - targets: { - ie: 10, - }, - }, - ], - ], - plugins: [ - "@babel/plugin-transform-runtime", - "@babel/plugin-transform-modules-commonjs", - ], - }, - }, - }, - ], - }, - output: { - filename: "[name].min.js", - path: path.resolve(__dirname, "dist"), - library: "Web3", - libraryTarget: "umd", - }, -}; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000000..a7b97e98173 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,12487 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adraffy/ens-normalize@^1.8.8": + version "1.8.8" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.8.8.tgz#c4540c532bee6d99cd30ab73a4302e8e3be3b222" + integrity sha512-QbJczL+zOCNUBkfjCww1DfhL+KNYgC/yCBApqT3d8b9BHg7CFw4O3bTY0BOogiMhw/vGnV2FD17bstxXWn61EA== + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/code-frame@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== + dependencies: + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.18.10", "@babel/generator@^7.7.2": + version "7.18.12" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" + integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== + dependencies: + "@babel/types" "^7.18.10" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/generator@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" + integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== + dependencies: + "@babel/types" "^7.23.0" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-define-polyfill-provider@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" + integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" + integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== + +"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" + integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-runtime@^7.5.5": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz#37d14d1fa810a368fd635d4d1476c0154144a96f" + integrity sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" + semver "^6.3.0" + +"@babel/runtime@^7.21.0": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" + integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/runtime@^7.5.5": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/template@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" + integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.0" + "@babel/types" "^7.23.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== + dependencies: + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" + integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@cypress/webpack-preprocessor@^5.12.0": + version "5.12.2" + resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-5.12.2.tgz#9cc623a5629980d7f2619569bffc8e3f05a701ae" + integrity sha512-t29wEFvI87IMnCd8taRunwStNsFjFWg138fGF0hPQOYgSj30fbzCEwFD9cAQLYMMcjjuXcnnw8yOfkzIZBBNVQ== + dependencies: + bluebird "3.7.1" + debug "^4.3.2" + lodash "^4.17.20" + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@droppedcode/typedoc-plugin-relative-includes@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@droppedcode/typedoc-plugin-relative-includes/-/typedoc-plugin-relative-includes-1.0.2.tgz#f418b7c117c8ae16a03f35022bb24768e2bf34fb" + integrity sha512-KsiQ0oC2Px4hh+DvqZu38NYJHAG+gvm19EVXBW+AWYzgPm5lLTXuW0+WArh7ngo+MUDcvo4ZYsxqKPz203/Cbw== + +"@eslint/eslintrc@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.3.2" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.6.4": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/tx@^3.3.0": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== + dependencies: + "@ethereumjs/common" "^2.6.4" + ethereumjs-util "^7.1.5" + +"@ethersproject/abi@^5.1.2": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@fastify/busboy@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8" + integrity sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ== + +"@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@humanwhocodes/config-array@^0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@humeris/boule@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@humeris/boule/-/boule-4.0.0.tgz#50eec1208f3d747585ecd6040b34641f0ba81931" + integrity sha512-kaD0eg61QZb8Qwymx/DW1bOoFwzuWiG9lW3ik3dD8//HDEvr15OSykXdJECLgQPfMrS4RuLGHU+lmJkrHk8XoA== + +"@humeris/espresso-shot@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@humeris/espresso-shot/-/espresso-shot-4.0.0.tgz#e720d2bd3d555a3118e788931a01a991308f8cfe" + integrity sha512-cVmyBfgrutiBmQcMIxfCVnTb2UBgl00dGIuwoOCjeeASOz9/rPtiXxbic9n+8RXXvTNt+mLfxssPMLf7yb7U5A== + dependencies: + "@humeris/boule" "^4.0.0" + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@isaacs/string-locale-compare@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" + integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== + dependencies: + "@jest/source-map" "^24.9.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/console@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + +"@jest/core@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.3.tgz#0ebf2bd39840f1233cd5f2d1e6fc8b71bd5a1ac7" + integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/reporters" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^28.1.3" + jest-config "^28.1.3" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-resolve-dependencies "^28.1.3" + jest-runner "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + jest-watcher "^28.1.3" + micromatch "^4.0.4" + pretty-format "^28.1.3" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" + integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== + dependencies: + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + dependencies: + jest-get-type "^28.0.2" + +"@jest/expect@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.3.tgz#9ac57e1d4491baca550f6bdbd232487177ad6a72" + integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== + dependencies: + expect "^28.1.3" + jest-snapshot "^28.1.3" + +"@jest/fake-timers@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" + integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== + dependencies: + "@jest/types" "^28.1.3" + "@sinonjs/fake-timers" "^9.1.2" + "@types/node" "*" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.3.tgz#a601d78ddc5fdef542728309894895b4a42dc333" + integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/types" "^28.1.3" + +"@jest/reporters@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.3.tgz#9adf6d265edafc5fc4a434cfb31e2df5a67a369a" + integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + jest-worker "^28.1.3" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + terminal-link "^2.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/schemas@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" + integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== + dependencies: + "@sinclair/typebox" "^0.25.16" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" + integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/source-map@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" + integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== + dependencies: + "@jridgewell/trace-mapping" "^0.3.13" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" + integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== + dependencies: + "@jest/console" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== + dependencies: + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz#9d0c283d906ac599c74bde464bc0d7e6a82886c3" + integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== + dependencies: + "@jest/test-result" "^28.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + slash "^3.0.0" + +"@jest/transform@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" + integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.1" + +"@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^13.0.0" + +"@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + dependencies: + "@jest/schemas" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.17": + version "0.3.19" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@lerna/child-process@6.6.2": + version "6.6.2" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-6.6.2.tgz#5d803c8dee81a4e013dc428292e77b365cba876c" + integrity sha512-QyKIWEnKQFnYu2ey+SAAm1A5xjzJLJJj3bhIZd3QKyXKKjaJ0hlxam/OsWSltxTNbcyH1jRJjC6Cxv31usv0Ag== + dependencies: + chalk "^4.1.0" + execa "^5.0.0" + strong-log-transformer "^2.1.0" + +"@lerna/create@6.6.2": + version "6.6.2" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-6.6.2.tgz#39a36d80cddb355340c297ed785aa76f4498177f" + integrity sha512-xQ+1Y7D+9etvUlE+unhG/TwmM6XBzGIdFBaNoW8D8kyOa9M2Jf3vdEtAxVa7mhRz66CENfhL/+I/QkVaa7pwbQ== + dependencies: + "@lerna/child-process" "6.6.2" + dedent "^0.7.0" + fs-extra "^9.1.0" + init-package-json "^3.0.2" + npm-package-arg "8.1.1" + p-reduce "^2.1.0" + pacote "15.1.1" + pify "^5.0.0" + semver "^7.3.4" + slash "^3.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^4.0.0" + yargs-parser "20.2.4" + +"@lerna/legacy-package-management@6.6.2": + version "6.6.2" + resolved "https://registry.yarnpkg.com/@lerna/legacy-package-management/-/legacy-package-management-6.6.2.tgz#411c395e72e563ab98f255df77e4068627a85bb0" + integrity sha512-0hZxUPKnHwehUO2xC4ldtdX9bW0W1UosxebDIQlZL2STnZnA2IFmIk2lJVUyFW+cmTPQzV93jfS0i69T9Z+teg== + dependencies: + "@npmcli/arborist" "6.2.3" + "@npmcli/run-script" "4.1.7" + "@nrwl/devkit" ">=15.5.2 < 16" + "@octokit/rest" "19.0.3" + byte-size "7.0.0" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "5.0.0" + columnify "1.6.0" + config-chain "1.1.12" + conventional-changelog-core "4.2.4" + conventional-recommended-bump "6.1.0" + cosmiconfig "7.0.0" + dedent "0.7.0" + dot-prop "6.0.1" + execa "5.0.0" + file-url "3.0.0" + find-up "5.0.0" + fs-extra "9.1.0" + get-port "5.1.1" + get-stream "6.0.0" + git-url-parse "13.1.0" + glob-parent "5.1.2" + globby "11.1.0" + graceful-fs "4.2.10" + has-unicode "2.0.1" + inquirer "8.2.4" + is-ci "2.0.0" + is-stream "2.0.0" + libnpmpublish "7.1.4" + load-json-file "6.2.0" + make-dir "3.1.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "8.1.1" + npm-packlist "5.1.1" + npm-registry-fetch "14.0.3" + npmlog "6.0.2" + p-map "4.0.0" + p-map-series "2.1.0" + p-queue "6.6.2" + p-waterfall "2.1.1" + pacote "15.1.1" + pify "5.0.0" + pretty-format "29.4.3" + read-cmd-shim "3.0.0" + read-package-json "5.0.1" + resolve-from "5.0.0" + semver "7.3.8" + signal-exit "3.0.7" + slash "3.0.0" + ssri "9.0.1" + strong-log-transformer "2.1.0" + tar "6.1.11" + temp-dir "1.0.0" + tempy "1.0.0" + upath "2.0.1" + uuid "8.3.2" + write-file-atomic "4.0.1" + write-pkg "4.0.0" + yargs "16.2.0" + +"@metamask/eth-sig-util@4.0.1", "@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@metamask/safe-event-emitter@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" + integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== + +"@microsoft/tsdoc-config@0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc-config/-/tsdoc-config-0.16.1.tgz#4de11976c1202854c4618f364bf499b4be33e657" + integrity sha512-2RqkwiD4uN6MLnHFljqBlZIXlt/SaUT6cuogU1w2ARw4nKuuppSmR0+s+NC+7kXBQykd9zzu0P4HtBpZT5zBpQ== + dependencies: + "@microsoft/tsdoc" "0.14.1" + ajv "~6.12.6" + jju "~1.4.0" + resolve "~1.19.0" + +"@microsoft/tsdoc@0.14.1": + version "0.14.1" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.14.1.tgz#155ef21065427901994e765da8a0ba0eaae8b8bd" + integrity sha512-6Wci+Tp3CgPt/B9B0a3J4s3yMgLNSku6w5TV6mN+61C71UqsRBv2FUibBf3tPGlNxebgPHMEUzKpb1ggE8KCKw== + +"@noble/curves@1.0.0", "@noble/curves@~1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.0.0.tgz#e40be8c7daf088aaf291887cbc73f43464a92932" + integrity sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw== + dependencies: + "@noble/hashes" "1.3.0" + +"@noble/curves@1.1.0", "@noble/curves@~1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" + integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== + dependencies: + "@noble/hashes" "1.3.1" + +"@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" + integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== + +"@noble/hashes@1.3.0", "@noble/hashes@~1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.0.tgz#085fd70f6d7d9d109671090ccae1d3bec62554a1" + integrity sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg== + +"@noble/hashes@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" + integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== + +"@noble/hashes@~1.3.1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" + integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nomicfoundation/ethereumjs-block@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz#fdd5c045e7baa5169abeed0e1202bf94e4481c49" + integrity sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA== + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-blockchain@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz#1a8c243a46d4d3691631f139bfb3a4a157187b0c" + integrity sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw== + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-ethash" "^2.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + abstract-level "^1.0.3" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + level "^8.0.0" + lru-cache "^5.1.1" + memory-level "^1.0.0" + +"@nomicfoundation/ethereumjs-common@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz#f6bcc7753994555e49ab3aa517fc8bcf89c280b9" + integrity sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA== + dependencies: + "@nomicfoundation/ethereumjs-util" "^8.0.0" + crc-32 "^1.2.0" + +"@nomicfoundation/ethereumjs-ethash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz#11539c32fe0990e1122ff987d1b84cfa34774e81" + integrity sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew== + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + abstract-level "^1.0.3" + bigint-crypto-utils "^3.0.23" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-evm@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz#99cd173c03b59107c156a69c5e215409098a370b" + integrity sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q== + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@types/async-eventemitter" "^0.2.1" + async-eventemitter "^0.2.4" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/ethereumjs-rlp@^4.0.0", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz#d9a9c5f0f10310c8849b6525101de455a53e771d" + integrity sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw== + +"@nomicfoundation/ethereumjs-statemanager@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz#14a9d4e1c828230368f7ab520c144c34d8721e4b" + integrity sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ== + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + functional-red-black-tree "^1.0.1" + +"@nomicfoundation/ethereumjs-trie@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz#dcfbe3be53a94bc061c9767a396c16702bc2f5b7" + integrity sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + ethereum-cryptography "0.1.3" + readable-stream "^3.6.0" + +"@nomicfoundation/ethereumjs-tx@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz#59dc7452b0862b30342966f7052ab9a1f7802f52" + integrity sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w== + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz#deb2b15d2c308a731e82977aefc4e61ca0ece6c5" + integrity sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-vm@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz#2bb50d332bf41790b01a3767ffec3987585d1de6" + integrity sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w== + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-evm" "^1.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@types/async-eventemitter" "^0.2.1" + async-eventemitter "^0.2.4" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz#83a7367342bd053a76d04bbcf4f373fef07cf760" + integrity sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz#1225f7da647ae1ad25a87125664704ecc0af6ccc" + integrity sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.0.tgz#dbc052dcdfd50ae50fd5ae1788b69b4e0fa40040" + integrity sha512-WFCZYMv86WowDA4GiJKnebMQRt3kCcFqHeIomW6NMyqiKqhK1kIZCxSLDYsxqlx396kKLPN1713Q1S8tu68GKg== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.0.tgz#e6b2eea633995b557e74e881d2a43eab4760903d" + integrity sha512-DTw6MNQWWlCgc71Pq7CEhEqkb7fZnS7oly13pujs4cMH1sR0JzNk90Mp1zpSCsCs4oKan2ClhMlLKtNat/XRKQ== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.0.tgz#af81107f5afa794f19988a368647727806e18dc4" + integrity sha512-wUpUnR/3GV5Da88MhrxXh/lhb9kxh9V3Jya2NpBEhKDIRCDmtXMSqPMXHZmOR9DfCwCvG6vLFPr/+YrPCnUN0w== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz#6877e1da1a06a9f08446070ab6e0a5347109f868" + integrity sha512-lR0AxK1x/MeKQ/3Pt923kPvwigmGX3OxeU5qNtQ9pj9iucgk4PzhbS3ruUeSpYhUxG50jN4RkIGwUMoev5lguw== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.0.tgz#bb6cd83a0c259eccef4183796b6329a66cf7ebd9" + integrity sha512-A1he/8gy/JeBD3FKvmI6WUJrGrI5uWJNr5Xb9WdV+DK0F8msuOqpEByLlnTdLkXMwW7nSl3awvLezOs9xBHJEg== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.0.tgz#9d4bca1cc9a1333fde985675083b0b7d165f6076" + integrity sha512-7x5SXZ9R9H4SluJZZP8XPN+ju7Mx+XeUMWZw7ZAqkdhP5mK19I4vz3x0zIWygmfE8RT7uQ5xMap0/9NPsO+ykw== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.0.tgz#0db5bfc6aa952bea4098d8d2c8947b4e5c4337ee" + integrity sha512-m7w3xf+hnE774YRXu+2mGV7RiF3QJtUoiYU61FascCkQhX3QMQavh7saH/vzb2jN5D24nT/jwvaHYX/MAM9zUw== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.0.tgz#2e0f39a2924dcd77db6b419828595e984fabcb33" + integrity sha512-xCuybjY0sLJQnJhupiFAXaek2EqF0AP0eBjgzaalPXSNvCEN6ZYHvUzdA50ENDVeSYFXcUsYf3+FsD3XKaeptA== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz#e5ddc43ad5c0aab96e5054520d8e16212e125f50" + integrity sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.0" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.0" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.0" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.0" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.0" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.0" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.0" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.0" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.0" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.0" + +"@npmcli/arborist@6.2.3": + version "6.2.3" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.2.3.tgz#31f8aed2588341864d3811151d929c01308f8e71" + integrity sha512-lpGOC2ilSJXcc2zfW9QtukcCTcMbl3fVI0z4wvFB2AFIl0C+Q6Wv7ccrpdrQa8rvJ1ZVuc6qkX7HVTyKlzGqKA== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/fs" "^3.1.0" + "@npmcli/installed-package-contents" "^2.0.0" + "@npmcli/map-workspaces" "^3.0.2" + "@npmcli/metavuln-calculator" "^5.0.0" + "@npmcli/name-from-folder" "^2.0.0" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^3.0.0" + "@npmcli/query" "^3.0.0" + "@npmcli/run-script" "^6.0.0" + bin-links "^4.0.1" + cacache "^17.0.4" + common-ancestor-path "^1.0.1" + hosted-git-info "^6.1.1" + json-parse-even-better-errors "^3.0.0" + json-stringify-nice "^1.1.4" + minimatch "^6.1.6" + nopt "^7.0.0" + npm-install-checks "^6.0.0" + npm-package-arg "^10.1.0" + npm-pick-manifest "^8.0.1" + npm-registry-fetch "^14.0.3" + npmlog "^7.0.1" + pacote "^15.0.8" + parse-conflict-json "^3.0.0" + proc-log "^3.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^1.0.1" + read-package-json-fast "^3.0.2" + semver "^7.3.7" + ssri "^10.0.1" + treeverse "^3.0.0" + walk-up-path "^1.0.0" + +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/fs@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== + dependencies: + semver "^7.3.5" + +"@npmcli/git@^4.0.0": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.0.4.tgz#cdf74f21b1d440c0756fb28159d935129d9daa33" + integrity sha512-5yZghx+u5M47LghaybLCkdSyFzV/w4OuH12d96HO389Ik9CDsLaDZJVynSGGVJOLn6gy/k7Dz5XYcplM3uxXRg== + dependencies: + "@npmcli/promise-spawn" "^6.0.0" + lru-cache "^7.4.4" + npm-pick-manifest "^8.0.0" + proc-log "^3.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^3.0.0" + +"@npmcli/installed-package-contents@^2.0.0", "@npmcli/installed-package-contents@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" + integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== + dependencies: + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +"@npmcli/map-workspaces@^3.0.2": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz#15ad7d854292e484f7ba04bc30187a8320dba799" + integrity sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg== + dependencies: + "@npmcli/name-from-folder" "^2.0.0" + glob "^10.2.2" + minimatch "^9.0.0" + read-package-json-fast "^3.0.0" + +"@npmcli/metavuln-calculator@^5.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz#426b3e524c2008bcc82dbc2ef390aefedd643d76" + integrity sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q== + dependencies: + cacache "^17.0.0" + json-parse-even-better-errors "^3.0.0" + pacote "^15.0.0" + semver "^7.3.5" + +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/name-from-folder@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" + integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== + +"@npmcli/node-gyp@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" + integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== + +"@npmcli/node-gyp@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" + integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== + +"@npmcli/package-json@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-3.1.0.tgz#d9eb34083be4275520f3844d17fc74926d47cae1" + integrity sha512-qNPy6Yf9ruFST99xcrl5EWAvrb7qFrwgVbwdzcTJlIgxbArKOq5e/bgZ6rTL1X9hDgAdPbvL8RWx/OTLSB0ToA== + dependencies: + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^5.0.0" + npm-normalize-package-bin "^3.0.1" + +"@npmcli/promise-spawn@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" + integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== + dependencies: + infer-owner "^1.0.4" + +"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" + integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== + dependencies: + which "^3.0.0" + +"@npmcli/query@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.0.0.tgz#51a0dfb85811e04f244171f164b6bc83b36113a7" + integrity sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA== + dependencies: + postcss-selector-parser "^6.0.10" + +"@npmcli/run-script@4.1.7": + version "4.1.7" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.1.7.tgz#b1a2f57568eb738e45e9ea3123fb054b400a86f7" + integrity sha512-WXr/MyM4tpKA4BotB81NccGAv8B48lNH0gRoILucbcAhTQXLCoi6HflMV3KdXubIqvP9SuLsFn68Z7r4jl+ppw== + dependencies: + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/promise-spawn" "^3.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^2.0.3" + which "^2.0.2" + +"@npmcli/run-script@^6.0.0": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885" + integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/promise-spawn" "^6.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^3.0.0" + which "^3.0.0" + +"@nrwl/cli@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-15.9.4.tgz#63b600dff1cdc126f234d16978a888f72c22a00c" + integrity sha512-FoiGFCLpb/r4HXCM3KYqT0xteP+MRV6bIHjz3bdPHIDLmBNQQnRRaV2K47jtJ6zjh1eOU5UHKyDtDDYf80Idpw== + dependencies: + nx "15.9.4" + +"@nrwl/devkit@>=15.5.2 < 16": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-15.9.4.tgz#3f0a43a9637fcd0a46c06df2a9c36012b27f006b" + integrity sha512-mUX1kXTuPMdTzFxIzH+MsSNvdppOmstPDOEtiGFZJTuJ625ki0HhNJILO3N2mJ7MeMrLqIlAiNdvelQaObxYsQ== + dependencies: + ejs "^3.1.7" + ignore "^5.0.4" + semver "7.3.4" + tmp "~0.2.1" + tslib "^2.3.0" + +"@nrwl/nx-darwin-arm64@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.9.4.tgz#e5a2f39d42a60397a01140a251f894788f5d1fda" + integrity sha512-XnvrnT9BJsgThY/4xUcYtE077ERq/img8CkRj7MOOBNOh0/nVcR4LGbBKDHtwE3HPk0ikyS/SxRyNa9msvi3QQ== + +"@nrwl/nx-darwin-x64@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.4.tgz#97a810d4ff6b4bf395a43e4740890c0def2372da" + integrity sha512-WKSfSlpVMLchpXkax0geeUNyhvNxwO7qUz/s0/HJWBekt8fizwKDwDj1gP7fOu+YWb/tHiSscbR1km8PtdjhQw== + +"@nrwl/nx-linux-arm-gnueabihf@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.9.4.tgz#b8dd23b8c755b7e640d744945ab2dec3fd3eda65" + integrity sha512-a/b4PP7lP/Cgrh0LjC4O2YTt5pyf4DQTGtuE8qlo8o486UiofCtk4QGJX72q80s23L0ejCaKY2ULKx/3zMLjuA== + +"@nrwl/nx-linux-arm64-gnu@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.9.4.tgz#5bc150c2bdb2e0a2eaf8721b3c5fdb2eb93f8739" + integrity sha512-ibBV8fMhSfLVd/2WzcDuUm32BoZsattuKkvMmOoyU6Pzoznc3AqyDjJR4xCIoAn5Rf+Nu1oeQONr5FAtb1Ugow== + +"@nrwl/nx-linux-arm64-musl@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.9.4.tgz#df2f18f813828000dc52f1b7668339947b1a0862" + integrity sha512-iIjvVYd7+uM4jVD461+PvU5XTALgSvJOODUaMRGOoDl0KlMuTe6pQZlw0eXjl5rcTd6paKaVFWT5j6awr8kj7w== + +"@nrwl/nx-linux-x64-gnu@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.9.4.tgz#55547b07e6aeb0c36a43e05bd07c15b013f2de9f" + integrity sha512-q4OyH72mdrE4KellBWtwpr5EwfxHKNoFP9//7FAILO68ROh0rpMd7YQMlTB7T04UEUHjKEEsFGTlVXIee3Viwg== + +"@nrwl/nx-linux-x64-musl@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.9.4.tgz#29cd644736f643566d9c0e1a1171c49a62a08c09" + integrity sha512-67+/XNMR1CgLPyeGX8jqSG6l8yYD0iiwUgcu1Vaxq6N05WwnqVisIW8XzLSRUtKt4WyVQgOWk3aspImpMVOG3Q== + +"@nrwl/nx-win32-arm64-msvc@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.9.4.tgz#55a38bf5dc201e9088729fb03e505dc63caf8b3a" + integrity sha512-2rEsq3eOGVCYpYJn2tTJkOGNJm/U8rP/FmqtZXYa6VJv/00XP3Gl00IXFEDaYV6rZo7SWqLxtEPUbjK5LwPzZA== + +"@nrwl/nx-win32-x64-msvc@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.9.4.tgz#56bb859bfe47d08d14f8d5822d9a31d9098d95a9" + integrity sha512-bogVju4Z/hy1jbppqaTNbmV1R4Kg0R5fKxXAXC2LaL7FL0dup31wPumdV+mXttXBNOBDjV8V/Oz1ZqdmxpOJUw== + +"@nrwl/tao@15.9.4": + version "15.9.4" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-15.9.4.tgz#5e384af06d1fb68e326eda2c6a5d8f99ce1583b8" + integrity sha512-m90iz8UsXx1rgPm1dxsBQjSrCViWYZIrp8bpwjSCW24j3kifyilYSXGuKaRwZwUn7eNmH/kZcI9/8qeGIPF4Sg== + dependencies: + nx "15.9.4" + +"@octokit/auth-token@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.1.tgz#88bc2baf5d706cb258474e722a720a8365dff2ec" + integrity sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA== + dependencies: + "@octokit/types" "^7.0.0" + +"@octokit/core@^4.0.0": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.0.5.tgz#589e68c0a35d2afdcd41dafceab072c2fbc6ab5f" + integrity sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA== + dependencies: + "@octokit/auth-token" "^3.0.0" + "@octokit/graphql" "^5.0.0" + "@octokit/request" "^6.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^7.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^7.0.0": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.1.tgz#cb0d03e62e8762f3c80e52b025179de81899a823" + integrity sha512-/wTXAJwt0HzJ2IeE4kQXO+mBScfzyCkI0hMtkIaqyXd9zg76OpOfNQfHL9FlaxAV2RsNiOXZibVWloy8EexENg== + dependencies: + "@octokit/types" "^7.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^5.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.1.tgz#a06982514ad131fb6fbb9da968653b2233fade9b" + integrity sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA== + dependencies: + "@octokit/request" "^6.0.0" + "@octokit/types" "^7.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^12.11.0": + version "12.11.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" + integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== + +"@octokit/openapi-types@^13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-13.1.0.tgz#30459b45e6dd388d48d72de166f2f08ee8ece5b6" + integrity sha512-Z7vzLqfTkoVQyoy/2iQla1N2I4Vav2wi4JbZK8QxIYAfBimhuflosFxmsqw5LTH7DkdNW46ZYpAcqJf0XaS8SQ== + +"@octokit/plugin-enterprise-rest@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + +"@octokit/plugin-paginate-rest@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz#86f8be759ce2d6d7c879a31490fd2f7410b731f0" + integrity sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA== + dependencies: + "@octokit/types" "^6.41.0" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@^6.0.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.3.0.tgz#81549334ce020169b84bd4a7fa2577e9d725d829" + integrity sha512-qEu2wn6E7hqluZwIEUnDxWROvKjov3zMIAi4H4d7cmKWNMeBprEXZzJe8pE5eStUYC1ysGhD0B7L6IeG1Rfb+g== + dependencies: + "@octokit/types" "^7.0.0" + deprecation "^2.3.1" + +"@octokit/request-error@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.1.tgz#3fd747913c06ab2195e52004a521889dadb4b295" + integrity sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ== + dependencies: + "@octokit/types" "^7.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^6.0.0": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.1.tgz#3ceeb22dab09a29595d96594b6720fc14495cf4e" + integrity sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ== + dependencies: + "@octokit/endpoint" "^7.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^7.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + +"@octokit/rest@19.0.3": + version "19.0.3" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.3.tgz#b9a4e8dc8d53e030d611c053153ee6045f080f02" + integrity sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ== + dependencies: + "@octokit/core" "^4.0.0" + "@octokit/plugin-paginate-rest" "^3.0.0" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^6.0.0" + +"@octokit/types@^6.41.0": + version "6.41.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" + integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== + dependencies: + "@octokit/openapi-types" "^12.11.0" + +"@octokit/types@^7.0.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-7.1.0.tgz#98e345dbc6eba326dad5cfa4074171d89abb9d84" + integrity sha512-+ClA0jRc9zGFj5mfQeQNfgTlelzhpAexbAueQG1t2Xn8yhgnsjkF8bgLcUUpwrpqkv296uXyiGwkqXRSU7KYzQ== + dependencies: + "@octokit/openapi-types" "^13.1.0" + +"@openzeppelin/contracts@^4.7.1": + version "4.9.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.3.tgz#00d7a8cf35a475b160b3f0293a6403c511099364" + integrity sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg== + +"@parcel/watcher@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" + integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== + dependencies: + node-addon-api "^3.2.1" + node-gyp-build "^4.3.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@pkgr/utils@^2.3.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.1.tgz#adf291d0357834c410ce80af16e711b56c7b1cd3" + integrity sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w== + dependencies: + cross-spawn "^7.0.3" + fast-glob "^3.2.12" + is-glob "^4.0.3" + open "^9.1.0" + picocolors "^1.0.0" + tslib "^2.5.0" + +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.21" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" + integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== + +"@scure/base@~1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" + integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + +"@scure/bip32@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.0.tgz#dea45875e7fbc720c2b4560325f1cf5d2246d95b" + integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== + dependencies: + "@noble/hashes" "~1.1.1" + "@noble/secp256k1" "~1.6.0" + "@scure/base" "~1.1.0" + +"@scure/bip32@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.0.tgz#6c8d980ef3f290987736acd0ee2e0f0d50068d87" + integrity sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q== + dependencies: + "@noble/curves" "~1.0.0" + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + +"@scure/bip32@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" + integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== + dependencies: + "@noble/curves" "~1.1.0" + "@noble/hashes" "~1.3.1" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" + integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== + dependencies: + "@noble/hashes" "~1.1.1" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.0.tgz#a207e2ef96de354de7d0002292ba1503538fc77b" + integrity sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sigstore/protobuf-specs@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz#957cb64ea2f5ce527cc9cf02a096baeb0d2b99b4" + integrity sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ== + +"@sinclair/typebox@^0.24.1": + version "0.24.28" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.28.tgz#15aa0b416f82c268b1573ab653e4413c965fe794" + integrity sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow== + +"@sinclair/typebox@^0.25.16": + version "0.25.24" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" + integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@sinonjs/fake-timers@^9.1.2": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@solidity-parser/parser@^0.14.3": + version "0.14.3" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.3.tgz#0d627427b35a40d8521aaa933cc3df7d07bfa36f" + integrity sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@truffle/hdwallet-provider@^2.0.12": + version "2.0.13" + resolved "https://registry.yarnpkg.com/@truffle/hdwallet-provider/-/hdwallet-provider-2.0.13.tgz#b7d9660985d7f32dc35dd5672c0156e3b9b39d32" + integrity sha512-5sGsi9sScB4VkKEuD6itqkrvtpJUNVv0NhI07Nn1JAMDvkJmAAuh2GtoBElDq54y+0JCD8SI0T9BLVZ9IWj6AQ== + dependencies: + "@ethereumjs/common" "^2.4.0" + "@ethereumjs/tx" "^3.3.0" + "@metamask/eth-sig-util" "4.0.1" + ethereum-cryptography "1.1.2" + ethereum-protocol "^1.0.1" + ethereumjs-util "^7.1.5" + ethereumjs-wallet "^1.0.2" + web3-provider-engine "16.0.3" + +"@trufflesuite/bigint-buffer@1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" + integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== + dependencies: + node-gyp-build "4.4.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@tufjs/canonical-json@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" + integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== + +"@tufjs/models@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" + integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== + dependencies: + "@tufjs/canonical-json" "1.0.0" + minimatch "^9.0.0" + +"@types/async-eventemitter@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" + integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== + +"@types/babel__core@^7.1.14": + version "7.1.19" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.0.tgz#8134fd78cb39567465be65b9fdc16d378095f41f" + integrity sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" + integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== + dependencies: + "@types/node" "*" + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.4.5" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.5.tgz#acdfb7dd36b91cc5d812d7c093811a8f3d9b31e4" + integrity sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/express-serve-static-core@^4.17.18": + version "4.17.30" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz#0f2f99617fa8f9696170c46152ccf7500b34ac04" + integrity sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@^4.17.13": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/graceful-fs@^4.1.3": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/http-proxy@^1.17.8": + version "1.17.9" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" + integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest-when@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@types/jest-when/-/jest-when-3.5.2.tgz#7e6225e827267d26f115dc97da6403a3b37556c5" + integrity sha512-1WP+wJDW7h4TYAVLoIebxRIVv8GPk66Qsq2nU7PkwKZ6usurnDQZgk0DfBNKAJ9gVzapCXSV53Vn/3nBHBNzAw== + dependencies: + "@types/jest" "*" + +"@types/jest@*", "@types/jest@^28.1.6": + version "28.1.7" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.7.tgz#a680c5d05b69634c2d54a63cb106d7fb1adaba16" + integrity sha512-acDN4VHD40V24tgu0iC44jchXavRNVFXQ/E6Z5XNsswgoSO/4NgsXoEYmPUGookKldlZQyIpmrEXsHI9cA3ZTA== + dependencies: + expect "^28.0.0" + pretty-format "^28.0.0" + +"@types/jsdom@^20.0.0": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" + integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + parse5 "^7.0.0" + +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/minimatch@*", "@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/minimist@^1.2.0": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + +"@types/morgan@^1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@types/morgan/-/morgan-1.9.3.tgz#ae04180dff02c437312bc0cfb1e2960086b2f540" + integrity sha512-BiLcfVqGBZCyNCnCH3F4o2GmDLrpy0HeBVnNlyZG4fo88ZiE9SoiBe3C+2ezuwbjlEyT+PDZ17//TAlRxAn75Q== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "18.7.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.6.tgz#31743bc5772b6ac223845e18c3fc26f042713c83" + integrity sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A== + +"@types/node@^18.11.9": + version "18.16.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.18.tgz#85da09bafb66d4bc14f7c899185336d0c1736390" + integrity sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.1.5": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" + integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/secp256k1@^4.0.1": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + dependencies: + "@types/node" "*" + +"@types/seedrandom@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" + integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== + +"@types/serve-static@*": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" + integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/tough-cookie@*": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.3.tgz#3d06b6769518450871fbc40770b7586334bdfd90" + integrity sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg== + +"@types/webpack@^5.28.0": + version "5.28.0" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-5.28.0.tgz#78dde06212f038d77e54116cfe69e88ae9ed2c03" + integrity sha512-8cP0CzcxUiFuA9xGJkfeVpqmWTk9nx6CWwamRGCj95ph1SmlRRk9KlCZ6avhCbZd4L68LvYT6l1kpdEnQXrF8w== + dependencies: + "@types/node" "*" + tapable "^2.2.0" + webpack "^5" + +"@types/ws@8.5.3": + version "8.5.3" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^13.0.0": + version "13.0.12" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092" + integrity sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^17.0.8": + version "17.0.11" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.11.tgz#5e10ca33e219807c0eee0f08b5efcba9b6a42c06" + integrity sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.30.7": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz#c0a480d05211660221eda963cc844732fe9b1714" + integrity sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ== + dependencies: + "@typescript-eslint/scope-manager" "5.33.1" + "@typescript-eslint/type-utils" "5.33.1" + "@typescript-eslint/utils" "5.33.1" + debug "^4.3.4" + functional-red-black-tree "^1.0.1" + ignore "^5.2.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@^5.0.0": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.33.1.tgz#5fa908addffb82ea8fb0e62cb47c387de1bff536" + integrity sha512-wk2o+4wojvKz/x3UCbsgjgXl0lyLPYQsfKP0MdRzj4jtsQr4bVtgWUWck6+N3GzThUTbUFyyKLduWPwePhh0xQ== + dependencies: + "@typescript-eslint/utils" "5.33.1" + +"@typescript-eslint/parser@^5.30.7": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.33.1.tgz#e4b253105b4d2a4362cfaa4e184e2d226c440ff3" + integrity sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA== + dependencies: + "@typescript-eslint/scope-manager" "5.33.1" + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/typescript-estree" "5.33.1" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.33.1": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz#8d31553e1b874210018ca069b3d192c6d23bc493" + integrity sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA== + dependencies: + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/visitor-keys" "5.33.1" + +"@typescript-eslint/type-utils@5.33.1": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz#1a14e94650a0ae39f6e3b77478baff002cec4367" + integrity sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g== + dependencies: + "@typescript-eslint/utils" "5.33.1" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.33.1": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.33.1.tgz#3faef41793d527a519e19ab2747c12d6f3741ff7" + integrity sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ== + +"@typescript-eslint/typescript-estree@5.33.1": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz#a573bd360790afdcba80844e962d8b2031984f34" + integrity sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA== + dependencies: + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/visitor-keys" "5.33.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.33.1", "@typescript-eslint/utils@^5.10.0": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.33.1.tgz#171725f924fe1fe82bb776522bb85bc034e88575" + integrity sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.33.1" + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/typescript-estree" "5.33.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/visitor-keys@5.33.1": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz#0155c7571c8cd08956580b880aea327d5c34a18b" + integrity sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg== + dependencies: + "@typescript-eslint/types" "5.33.1" + eslint-visitor-keys "^3.3.0" + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" + integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== + +"@webpack-cli/info@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" + integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== + dependencies: + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" + integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +"@yarnpkg/parsers@^3.0.0-rc.18": + version "3.0.0-rc.44" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.44.tgz#43bf7943c039681da8f343cc6d73c2ab3184978b" + integrity sha512-UVAt9Icc8zfGXioeYJ8XMoSTxOYVmlal2TRNxy9Uh91taS72kQFalK7LpIslcvEBKy4XtarmfIwcFIU3ZY64lw== + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@zkochan/js-yaml@0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" + integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== + dependencies: + argparse "^2.0.1" + +Base64@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028" + integrity sha512-reGEWshDmTDQDsCec/HduOO9Wyj6yMOupMfhIf3ugN1TDlK2NQW4DDJSqNNtp380SNcvRfXtO8HSCQot0d0SMw== + +JSONStream@^1.0.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== + +abitype@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.7.1.tgz#16db20abe67de80f6183cf75f3de1ff86453b745" + integrity sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abstract-level@1.0.3, abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@~2.6.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" + integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@~2.7.1: + version "2.7.2" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" + integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== + dependencies: + xtend "~4.0.0" + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== + dependencies: + acorn "^8.1.0" + acorn-walk "^8.0.2" + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.0.0, acorn-walk@^8.0.2, acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.0.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +acorn@^8.1.0, acorn@^8.8.1: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" + integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@~6.12.6: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz#3ff397dc14f08b52dd8b2a64d3cee154ab8760d2" + integrity sha512-nSXlV+u3vtVjRgihdTzbfWYzxPWGo424zPgQbHD0ZqIla3jqYAewDcvee0Ua2hjS5IfTAmjGlx1Jf0PKwjZDEw== + dependencies: + delegates "^1.0.0" + readable-stream "^4.1.0" + +are-we-there-yet@~1.1.2: + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-includes@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== + +array.prototype.flat@^1.2.5: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" + integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +assert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" + integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== + dependencies: + es6-object-assign "^1.1.0" + is-nan "^1.2.1" + object-is "^1.0.1" + util "^0.12.0" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== + +async-eventemitter@0.2.4, async-eventemitter@^0.2.2, async-eventemitter@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async-mutex@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.2.6.tgz#0d7a3deb978bc2b984d5908a2038e1ae2e54ff40" + integrity sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw== + dependencies: + tslib "^2.0.0" + +async@^1.4.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + +async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +async@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axios@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" + integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== + dependencies: + "@jest/transform" "^28.1.3" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^28.1.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" + integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" + integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.2" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" + integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.2" + core-js-compat "^3.21.0" + +babel-plugin-polyfill-regenerator@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" + integrity sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.2" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" + integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== + dependencies: + babel-plugin-jest-hoist "^28.1.3" + babel-preset-current-node-syntax "^1.0.0" + +backoff@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" + integrity sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA== + dependencies: + precond "0.2" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +before-after-hook@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" + integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== + +big-integer@^1.6.44: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + +bigint-crypto-utils@^3.0.23: + version "3.1.7" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz#c4c1b537c7c1ab7aadfaecf3edfd45416bf2c651" + integrity sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA== + dependencies: + bigint-mod-arith "^3.1.0" + +bigint-mod-arith@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz#658e416bc593a463d97b59766226d0a3021a76b1" + integrity sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ== + +bin-links@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.1.tgz#afeb0549e642f61ff889b58ea2f8dca78fb9d8d3" + integrity sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA== + dependencies: + cmd-shim "^6.0.0" + npm-normalize-package-bin "^3.0.0" + read-cmd-shim "^4.0.0" + write-file-atomic "^5.0.0" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bluebird@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" + integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== + +bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +body-parser@1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bplist-parser@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== + dependencies: + big-integer "^1.6.44" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserslist@^4.14.5, browserslist@^4.20.2, browserslist@^4.21.3: + version "4.21.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" + integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== + dependencies: + caniuse-lite "^1.0.30001370" + electron-to-chromium "^1.4.202" + node-releases "^2.0.6" + update-browserslist-db "^1.0.5" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bufferutil@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== + dependencies: + node-gyp-build "^4.3.0" + +bufferutil@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" + integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== + dependencies: + node-gyp-build "^4.3.0" + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +bundle-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" + integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== + dependencies: + run-applescript "^5.0.0" + +byte-size@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.0.tgz#36528cd1ca87d39bd9abd51f5715dc93b6ceb032" + integrity sha512-NNiBxKgxybMBtWdmvx7ZITJi4ZG+CYUgwOSZTfqB1qogkRHrhbQE/R2r5Fh94X+InN5MCYz6SvB/ejHMj/HbsQ== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^16.1.0: + version "16.1.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.2.tgz#a519519e9fc9e5e904575dcd3b77660cbf03f749" + integrity sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^1.1.1" + +cacache@^17.0.0, cacache@^17.0.4: + version "17.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044" + integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001370: + version "1.0.30001378" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz#3d2159bf5a8f9ca093275b0d3ecc717b00f27b67" + integrity sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +checkpoint-store@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/checkpoint-store/-/checkpoint-store-1.1.0.tgz#04e4cb516b91433893581e6d4601a78e9552ea06" + integrity sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg== + dependencies: + functional-red-black-tree "^1.0.1" + +chokidar@3.5.3, chokidar@^3.4.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.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" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" + integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== + +ci-info@^3.6.1: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classic-level@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.2.0.tgz#2d52bdec8e7a27f534e67fdeb890abef3e643c27" + integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +clean-webpack-plugin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz#72947d4403d452f38ed61a9ff0ada8122aacd729" + integrity sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w== + dependencies: + del "^4.1.1" + +cli-cursor@3.1.0, cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-spinners@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@4.0.1, clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +clone@^2.0.0, clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + +cmd-shim@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" + integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== + dependencies: + mkdirp-infer-owner "^2.0.0" + +cmd-shim@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" + integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colorette@^2.0.14: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +columnify@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +commander@^2.20.0, commander@^2.9.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^7.0.0, commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.1.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +concurrently@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.0.tgz#cdc9f621a4d913366600355d68254df2c5e782f3" + integrity sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA== + dependencies: + chalk "^4.1.2" + date-fns "^2.30.0" + lodash "^4.17.21" + rxjs "^7.8.1" + shell-quote "^1.8.1" + spawn-command "0.0.2" + supports-color "^8.1.1" + tree-kill "^1.2.2" + yargs "^17.7.2" + +config-chain@1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +confusing-browser-globals@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +conventional-changelog-angular@5.0.12: + version "5.0.12" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" + integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-core@4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" + integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^5.0.0" + conventional-commits-parser "^3.2.0" + dateformat "^3.0.0" + get-pkg-repo "^4.0.0" + git-raw-commits "^2.0.8" + git-remote-origin-url "^2.0.0" + git-semver-tags "^4.1.1" + lodash "^4.17.15" + normalize-package-data "^3.0.0" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^4.0.0" + +conventional-changelog-preset-loader@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" + integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== + dependencies: + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" + +conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.2.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +conventional-recommended-bump@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" + integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.3.4" + conventional-commits-filter "^2.0.7" + conventional-commits-parser "^3.2.0" + git-raw-commits "^2.0.8" + git-semver-tags "^4.1.1" + meow "^8.0.0" + q "^1.5.1" + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== + +core-js-compat@^3.21.0: + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.24.1.tgz#d1af84a17e18dfdd401ee39da9996f9a7ba887de" + integrity sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw== + dependencies: + browserslist "^4.21.3" + semver "7.0.0" + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +crc-32@^1.2.0, crc-32@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-fetch@^2.1.0: + version "2.2.6" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.6.tgz#2ef0bb39a24ac034787965c457368a28730e220a" + integrity sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA== + dependencies: + node-fetch "^2.6.7" + whatwg-fetch "^2.0.4" + +cross-fetch@^3.0.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-fetch@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" + integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== + dependencies: + node-fetch "^2.6.12" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssom@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +cypress-jest-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/cypress-jest-adapter/-/cypress-jest-adapter-0.1.1.tgz#d1aa9d84393b6a5007022d1d33b3cdd3ce9672af" + integrity sha512-5dSB03utqDTBG5pi1LaAvYQD5uSMtSwurSzodpM+3XS/RdrjR/644oPnFUxPRvX4FVBaIY8avRs/f/GmIAiu8w== + dependencies: + expect "^24.5.0" + jest-get-type "^24.3.0" + jest-jquery-matchers "^2.1.0" + jquery "^3.4.0" + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +data-urls@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== + dependencies: + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + +date-fns@^2.30.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decimal.js@^10.4.2: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +declaration-bundler-webpack-plugin@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/declaration-bundler-webpack-plugin/-/declaration-bundler-webpack-plugin-1.0.3.tgz#9fb5ae393c63ed4175e7b6de4b58bafde34f097a" + integrity sha512-bgeoSOZYTOOdiNUZd/U8K6Z+6IrM/X+DgUcm3/VI1l130lzOBeL+ObetjIkKksxcj0zUJbLaFRFumFGYDOQ9fg== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + +dedent@0.7.0, dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-browser-id@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" + integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== + dependencies: + bplist-parser "^0.2.0" + untildify "^4.0.0" + +default-browser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" + integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== + dependencies: + bundle-name "^3.0.0" + default-browser-id "^3.0.0" + execa "^7.1.1" + titleize "^3.0.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + dependencies: + clone "^1.0.2" + +deferred-leveldown@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" + integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA== + dependencies: + abstract-leveldown "~2.6.0" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +del@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" + integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== + +diff-sequences@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" + integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== + dependencies: + webidl-conversions "^7.0.0" + +dot-prop@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== + dependencies: + is-obj "^2.0.0" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv@~10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +duplexer@^0.1.1, duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.7: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.202: + version "1.4.222" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.222.tgz#2ba24bef613fc1985dbffea85df8f62f2dec6448" + integrity sha512-gEM2awN5HZknWdLbngk4uQCVfhucFAfFzuchP3wM3NN6eow1eDU0dFy2kts43FB20ZfhVFF0jmFSTb1h5OhyIg== + +elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" + integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== + +emittery@^0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + +emoji-regex@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.1.0.tgz#d50e383743c0f7a5945c47087295afc112e3cf66" + integrity sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.0.0, enhanced-resolve@^5.10.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" + integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +enhanced-resolve@^5.12.0: + version "5.14.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3" + integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +enquirer@^2.3.0, enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +envinfo@^7.7.3, envinfo@^7.7.4: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +errno@~0.1.1: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.0: + version "1.20.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + regexp.prototype.flags "^1.4.3" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" + integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-airbnb-base@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" + integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.5" + semver "^6.3.0" + +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-import-resolver-typescript@^3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d" + integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.12.0" + eslint-module-utils "^2.7.4" + get-tsconfig "^4.5.0" + globby "^13.1.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + synckit "^0.8.5" + +eslint-module-utils@^2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-module-utils@^2.7.4: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-deprecation@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.2.tgz#a8125d28c56158cdfa1a685197e6be8ed86f189e" + integrity sha512-z93wbx9w7H/E3ogPw6AZMkkNJ6m51fTZRNZPNQqxQLmx+KKt7aLkMU9wN67s71i+VVHN4tLOZ3zT3QLbnlC0Mg== + dependencies: + "@typescript-eslint/experimental-utils" "^5.0.0" + tslib "^2.3.1" + tsutils "^3.21.0" + +eslint-plugin-header@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz#6ce512432d57675265fac47292b50d1eff11acd6" + integrity sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg== + +eslint-plugin-import@^2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-jest@^26.6.0: + version "26.8.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.8.3.tgz#f5d9bb162636491c8f6f0cd2743fe67c86569338" + integrity sha512-2roWu1MkEiihQ/qEszPPoaoqVI1x2D8Jtadk5AmoXTdEeNVPMu01Dtz7jIuTOAmdW3L+tSkPZOtEtQroYJDt0A== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + +eslint-plugin-no-null@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-no-null/-/eslint-plugin-no-null-1.0.2.tgz#1236a812391390a1877ad4007c26e745341c951f" + integrity sha512-uRDiz88zCO/2rzGfgG15DBjNsgwWtWiSo4Ezy7zzajUgpnFIqd1TjepKeRmJZHEfBGu58o2a8S0D7vglvvhkVA== + +eslint-plugin-require-extensions@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/eslint-plugin-require-extensions/-/eslint-plugin-require-extensions-0.1.3.tgz#394aeab433f996797a6ceba0a3f75640d4846bc8" + integrity sha512-T3c1PZ9PIdI3hjV8LdunfYI8gj017UQjzAnCrxuo3wAjneDbTPHdE3oNWInOjMA+z/aBkUtlW5vC0YepYMZIug== + +eslint-plugin-tsdoc@^0.2.16: + version "0.2.16" + resolved "https://registry.yarnpkg.com/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.16.tgz#a3d31fb9c7955faa3c66a43dd43da7635f1c5e0d" + integrity sha512-F/RWMnyDQuGlg82vQEFHQtGyWi7++XJKdYNn0ulIbyMOFqYIjoJOUdE6olORxgwgLkpJxsCJpJbTHgxJ/ggfXw== + dependencies: + "@microsoft/tsdoc" "0.14.1" + "@microsoft/tsdoc-config" "0.16.1" + +eslint-scope@5.1.1, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.20.0: + version "8.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" + integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== + dependencies: + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.3" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^9.3.2, espree@^9.3.3: + version "9.3.3" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" + integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eth-block-tracker@^4.4.2: + version "4.4.3" + resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz#766a0a0eb4a52c867a28328e9ae21353812cf626" + integrity sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw== + dependencies: + "@babel/plugin-transform-runtime" "^7.5.5" + "@babel/runtime" "^7.5.5" + eth-query "^2.1.0" + json-rpc-random-id "^1.0.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + +eth-json-rpc-filters@^4.2.1: + version "4.2.2" + resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz#eb35e1dfe9357ace8a8908e7daee80b2cd60a10d" + integrity sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw== + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + async-mutex "^0.2.6" + eth-json-rpc-middleware "^6.0.0" + eth-query "^2.1.2" + json-rpc-engine "^6.1.0" + pify "^5.0.0" + +eth-json-rpc-infura@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz#e6da7dc47402ce64c54e7018170d89433c4e8fb6" + integrity sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow== + dependencies: + eth-json-rpc-middleware "^6.0.0" + eth-rpc-errors "^3.0.0" + json-rpc-engine "^5.3.0" + node-fetch "^2.6.0" + +eth-json-rpc-middleware@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz#4fe16928b34231a2537856f08a5ebbc3d0c31175" + integrity sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ== + dependencies: + btoa "^1.2.1" + clone "^2.1.1" + eth-query "^2.1.2" + eth-rpc-errors "^3.0.0" + eth-sig-util "^1.4.2" + ethereumjs-util "^5.1.2" + json-rpc-engine "^5.3.0" + json-stable-stringify "^1.0.1" + node-fetch "^2.6.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + +eth-query@^2.1.0, eth-query@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" + integrity sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA== + dependencies: + json-rpc-random-id "^1.0.0" + xtend "^4.0.1" + +eth-rpc-errors@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz#d7b22653c70dbf9defd4ef490fd08fe70608ca10" + integrity sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-rpc-errors@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz#6ddb6190a4bf360afda82790bb7d9d5e724f423a" + integrity sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-sig-util@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-1.4.2.tgz#8d958202c7edbaae839707fba6f09ff327606210" + integrity sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw== + dependencies: + ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" + ethereumjs-util "^5.1.1" + +ethereum-common@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca" + integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA== + +ethereum-common@^0.0.18: + version "0.0.18" + resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" + integrity sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ== + +ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@1.1.2, ethereum-cryptography@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz#74f2ac0f0f5fe79f012c889b3b8446a9a6264e6d" + integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== + dependencies: + "@noble/hashes" "1.1.2" + "@noble/secp256k1" "1.6.3" + "@scure/bip32" "1.1.0" + "@scure/bip39" "1.1.0" + +ethereum-cryptography@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.0.0.tgz#e052b49fa81affae29402e977b8d3a31f88612b6" + integrity sha512-g25m4EtfQGjstWgVE1aIz7XYYjf3kH5kG17ULWVB5dH6uLahsoltOhACzSxyDV+fhn4gbR4xRrOXGe6r2uh4Bg== + dependencies: + "@noble/curves" "1.0.0" + "@noble/hashes" "1.3.0" + "@scure/bip32" "1.3.0" + "@scure/bip39" "1.2.0" + +ethereum-cryptography@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz#18fa7108622e56481157a5cb7c01c0c6a672eb67" + integrity sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug== + dependencies: + "@noble/curves" "1.1.0" + "@noble/hashes" "1.3.1" + "@scure/bip32" "1.3.1" + "@scure/bip39" "1.2.1" + +ethereum-protocol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz#b7d68142f4105e0ae7b5e178cf42f8d4dc4b93cf" + integrity sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg== + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +"ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": + version "0.6.8" + resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0" + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-account@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz#eeafc62de544cb07b0ee44b10f572c9c49e00a84" + integrity sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA== + dependencies: + ethereumjs-util "^5.0.0" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-block@^1.2.2: + version "1.7.1" + resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz#78b88e6cc56de29a6b4884ee75379b6860333c3f" + integrity sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg== + dependencies: + async "^2.0.1" + ethereum-common "0.2.0" + ethereumjs-tx "^1.2.2" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-block@~2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965" + integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== + dependencies: + async "^2.0.1" + ethereumjs-common "^1.5.0" + ethereumjs-tx "^2.1.1" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-common@^1.1.0, ethereumjs-common@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" + integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== + +ethereumjs-tx@^1.2.2: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" + integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== + dependencies: + ethereum-common "^0.0.18" + ethereumjs-util "^5.0.0" + +ethereumjs-tx@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" + integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== + dependencies: + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^5.0.0, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.5: + version "5.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz#a833f0e5fca7e5b361384dc76301a721f537bf65" + integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== + dependencies: + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "^0.1.3" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethereumjs-vm@^2.3.4: + version "2.6.0" + resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz#76243ed8de031b408793ac33907fb3407fe400c6" + integrity sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw== + dependencies: + async "^2.1.2" + async-eventemitter "^0.2.2" + ethereumjs-account "^2.0.3" + ethereumjs-block "~2.2.0" + ethereumjs-common "^1.1.0" + ethereumjs-util "^6.0.0" + fake-merkle-patricia-tree "^1.0.1" + functional-red-black-tree "^1.0.1" + merkle-patricia-tree "^2.3.2" + rustbn.js "~0.2.0" + safe-buffer "^5.1.1" + +ethereumjs-wallet@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz#2c000504b4c71e8f3782dabe1113d192522e99b6" + integrity sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA== + dependencies: + aes-js "^3.1.2" + bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" + ethereumjs-util "^7.1.2" + randombytes "^2.1.0" + scrypt-js "^3.0.1" + utf8 "^3.0.0" + uuid "^8.3.2" + +ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter3@^4.0.0, eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0, events@^3.2.0, events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" + integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^24.5.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" + integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q== + dependencies: + "@jest/types" "^24.9.0" + ansi-styles "^3.2.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.9.0" + +expect@^28.0.0, expect@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== + dependencies: + "@jest/expect-utils" "^28.1.3" + jest-get-type "^28.0.2" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + +express@^4.18.1: + version "4.18.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.0" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.10.3" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fake-merkle-patricia-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3" + integrity sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA== + dependencies: + checkpoint-store "^1.1.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-glob@^3.2.11, fast-glob@^3.2.12: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-safe-stringify@^2.0.6: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +figures@3.2.0, figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-url@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/file-url/-/file-url-3.0.0.tgz#247a586a746ce9f7a8ed05560290968afc262a77" + integrity sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA== + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-up@5.0.0, find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" + integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== + +follow-redirects@^1.0.0, follow-redirects@^1.12.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@9.1.0, fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^11.1.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3" + integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g== + dependencies: + minipass "^5.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +ganache@^7.5.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.5.0.tgz#f7a36050b6ff85e5557d6511ddca470a0a40f37c" + integrity sha512-afNTJYBEaFrLPRrn7eUxH39TgnrffvHn/4T6THzQrc3rpfe4DOxw2nY2XEQxfsq1t4OqKSXtxomzyo26RZiOzw== + dependencies: + "@trufflesuite/bigint-buffer" "1.1.10" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "5.1.1" + "@types/seedrandom" "3.0.1" + emittery "0.10.0" + keccak "3.0.2" + leveldown "6.1.0" + secp256k1 "4.0.3" + optionalDependencies: + bufferutil "4.0.5" + utf-8-validate "5.0.7" + +ganache@^7.7.6: + version "7.7.7" + resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.7.7.tgz#19939a86799f0bcb7df02e88082944466394b913" + integrity sha512-kZUuOcgDQBtbxzs4iB3chg1iAc28s2ffdOdzyTTzo4vr9sb843w4PbWd5v1hsIqtcNjurcpLaW8XRp/cw2u++g== + dependencies: + "@trufflesuite/bigint-buffer" "1.1.10" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "5.1.1" + "@types/seedrandom" "3.0.1" + abstract-level "1.0.3" + abstract-leveldown "7.2.0" + async-eventemitter "0.2.4" + emittery "0.10.0" + keccak "3.0.2" + leveldown "6.1.0" + secp256k1 "4.0.3" + optionalDependencies: + bufferutil "4.0.5" + utf-8-validate "5.0.7" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gauge@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112" + integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^4.0.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-pkg-repo@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-port@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-stream@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + +get-stream@^6.0.0, get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-tsconfig@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.0.tgz#e977690993a42f3e320e932427502a40f7af6d05" + integrity sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg== + dependencies: + resolve-pkg-maps "^1.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +git-raw-commits@^2.0.8: + version "2.0.11" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" + integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" + integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== + dependencies: + meow "^8.0.0" + semver "^6.0.0" + +git-up@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" + integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== + dependencies: + is-ssh "^1.4.0" + parse-url "^8.1.0" + +git-url-parse@13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" + integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== + dependencies: + git-up "^7.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + dependencies: + ini "^1.3.2" + +glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + 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@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + 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@^10.2.2: + version "10.2.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.2.6.tgz#1e27edbb3bbac055cb97113e27a066c100a4e5e1" + integrity sha512-U/rnDpXJGF414QQQZv5uVsabTVxMSwzS5CH0p3DRCIV6ownl4f7PzGnkGmvlum2wB+9RlJWJZ6ACU1INnBqiPA== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.0.3" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2" + path-scurry "^1.7.0" + +glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.1: + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^9.2.0: + version "9.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + +globby@11.1.0, globby@^11.0.1, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.3: + version "13.1.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" + integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@4.2.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +handlebars@^4.7.7: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +hardhat@^2.12.2: + version "2.12.2" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.12.2.tgz#6ae985007b20c1f381c6573799d66c1438c4c802" + integrity sha512-f3ZhzXy1uyQv0UXnAQ8GCBOWjzv++WJNb7bnm10SsyC3dB7vlPpsMWBNhq7aoRxKrNhX9tCev81KFV3i5BTeMQ== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-evm" "^1.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-vm" "^6.0.0" + "@nomicfoundation/solidity-analyzer" "^0.1.0" + "@sentry/node" "^5.18.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + abort-controller "^3.0.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + keccak "^3.0.2" + lodash "^4.17.11" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + qs "^6.7.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + tsort "0.0.1" + undici "^5.4.0" + uuid "^8.3.2" + ws "^7.4.6" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-unicode@2.0.1, has-unicode@^2.0.0, has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^3.0.6: + version "3.0.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.1.0.tgz#9786123f92ef3627f24abc3f15c20d98ec4a6594" + integrity sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q== + dependencies: + lru-cache "^7.5.1" + +hosted-git-info@^6.0.0, hosted-git-info@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" + integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== + dependencies: + lru-cache "^7.5.1" + +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== + dependencies: + whatwg-encoding "^2.0.0" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-browserify@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/http-browserify/-/http-browserify-1.7.0.tgz#33795ade72df88acfbfd36773cefeda764735b20" + integrity sha512-Irf/LJXmE3cBzU1eaR4+NEX6bmVLqt1wkmDiA7kBwH7zmb0D8kBAXsDmQ88hhj/qv9iEZKlyGx/hrMcFi8sOHw== + dependencies: + Base64 "~0.2.0" + inherits "~2.0.1" + +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http-proxy-middleware@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== + +https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +husky@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@0.6.3, iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== + dependencies: + minimatch "^5.0.1" + +ignore-walk@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.3.tgz#0fcdb6decaccda35e308a7b0948645dd9523b7bb" + integrity sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA== + dependencies: + minimatch "^9.0.0" + +ignore@^5.0.4, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + +immutable@^4.0.0-rc.12: + version "4.1.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +in3@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/in3/-/in3-3.3.3.tgz#df3a850665b31ee0fbe540e5384ff3e13b56462b" + integrity sha512-cFGgzJcNS/hEJ9N19zo4gdzNdSPqEEGDkfmOI6IFA5gZIY2kUV9QGaczAayMmEbEq8/msrAycqQN03eHtwLUUA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.2, ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +init-package-json@3.0.2, init-package-json@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" + integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== + dependencies: + npm-package-arg "^9.0.1" + promzard "^0.3.0" + read "^1.0.7" + read-package-json "^5.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^4.0.0" + +inquirer@8.2.4, inquirer@^8.2.4: + version "8.2.4" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" + integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-ci@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.1.0, is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c" + integrity sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-nan@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-ssh@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" + integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== + dependencies: + protocols "^2.0.1" + +is-stream@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.9.tgz#246d77d2871e7d9f5aeb1d54b9f52c71329ece67" + integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isomorphic-ws@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" + integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f" + integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jackspeak@^2.0.3: + version "2.2.1" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" + integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-changed-files@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" + integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== + dependencies: + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.3.tgz#d14bd11cf8ee1a03d69902dc47b6bd4634ee00e4" + integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + p-limit "^3.1.0" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.3.tgz#558b33c577d06de55087b8448d373b9f654e46b2" + integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== + dependencies: + "@jest/core" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + prompts "^2.0.1" + yargs "^17.3.1" + +jest-config@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.3.tgz#e315e1f73df3cac31447eed8b8740a477392ec60" + integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^28.1.3" + "@jest/types" "^28.1.3" + babel-jest "^28.1.3" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^28.1.3" + jest-environment-node "^28.1.3" + jest-get-type "^28.0.2" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-runner "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^28.1.3" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" + integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== + dependencies: + chalk "^2.0.1" + diff-sequences "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-diff@^28.0.0, jest-diff@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== + dependencies: + chalk "^4.0.0" + diff-sequences "^28.1.1" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-docblock@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-28.1.1.tgz#6f515c3bf841516d82ecd57a62eed9204c2f42a8" + integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== + dependencies: + detect-newline "^3.0.0" + +jest-each@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.3.tgz#bdd1516edbe2b1f3569cfdad9acd543040028f81" + integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== + dependencies: + "@jest/types" "^28.1.3" + chalk "^4.0.0" + jest-get-type "^28.0.2" + jest-util "^28.1.3" + pretty-format "^28.1.3" + +jest-environment-jsdom@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz#d206fa3551933c3fd519e5dfdb58a0f5139a837f" + integrity sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/jsdom" "^20.0.0" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + jsdom "^20.0.0" + +jest-environment-node@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.3.tgz#7e74fe40eb645b9d56c0c4b70ca4357faa349be5" + integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +jest-extended@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jest-extended/-/jest-extended-3.0.2.tgz#f74ae82bdf280536552752b502f57f71e7d2fcf1" + integrity sha512-LnVZvwWLRV9AL8J7f4frKu0KHuTrbIFK15IqrvSwbFCYxalkuC5l7HfcofsksePrvlEJ2WAcfYNnu1+bEGvInA== + dependencies: + jest-diff "^28.0.0" + jest-get-type "^28.0.0" + +jest-fetch-mock@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz#31749c456ae27b8919d69824f1c2bd85fe0a1f3b" + integrity sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw== + dependencies: + cross-fetch "^3.0.4" + promise-polyfill "^8.1.3" + +jest-get-type@^24.3.0, jest-get-type@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" + integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== + +jest-get-type@^28.0.0, jest-get-type@^28.0.2: + version "28.0.2" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" + integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== + +jest-haste-map@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" + integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== + dependencies: + "@jest/types" "^28.1.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + jest-worker "^28.1.3" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-jquery-matchers@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/jest-jquery-matchers/-/jest-jquery-matchers-2.1.1.tgz#74c174b60bd0be550d285bf3ae65ffc5e19a8d30" + integrity sha512-WoYq+ZGvs2AS9PA7gD/obXn82RtjpQva2VZwq7PDLFz+6uXD5x/KMbVdMgeISeNcYWoDhuv9uTwW8qTNIrhUNQ== + +jest-leak-detector@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz#a6685d9b074be99e3adee816ce84fd30795e654d" + integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== + dependencies: + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-matcher-utils@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" + integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== + dependencies: + chalk "^2.0.1" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== + dependencies: + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-message-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" + integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/stack-utils" "^1.0.1" + chalk "^2.0.1" + micromatch "^3.1.10" + slash "^2.0.0" + stack-utils "^1.0.1" + +jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" + integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" + integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== + +jest-regex-util@^28.0.2: + version "28.0.2" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz#8c65d7583460df7275c6ea2791901fa975c1fe66" + integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== + dependencies: + jest-regex-util "^28.0.2" + jest-snapshot "^28.1.3" + +jest-resolve@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.3.tgz#cfb36100341ddbb061ec781426b3c31eb51aa0a8" + integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-pnp-resolver "^1.2.2" + jest-util "^28.1.3" + jest-validate "^28.1.3" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.3.tgz#5eee25febd730b4713a2cdfd76bdd5557840f9a1" + integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/environment" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.10.2" + graceful-fs "^4.2.9" + jest-docblock "^28.1.1" + jest-environment-node "^28.1.3" + jest-haste-map "^28.1.3" + jest-leak-detector "^28.1.3" + jest-message-util "^28.1.3" + jest-resolve "^28.1.3" + jest-runtime "^28.1.3" + jest-util "^28.1.3" + jest-watcher "^28.1.3" + jest-worker "^28.1.3" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.3.tgz#a57643458235aa53e8ec7821949e728960d0605f" + integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/globals" "^28.1.3" + "@jest/source-map" "^28.1.2" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.3.tgz#17467b3ab8ddb81e2f605db05583d69388fc0668" + integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^28.1.3" + graceful-fs "^4.2.9" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + jest-haste-map "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + natural-compare "^1.4.0" + pretty-format "^28.1.3" + semver "^7.3.5" + +jest-util@^28.0.0, jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.3.tgz#e322267fd5e7c64cea4629612c357bbda96229df" + integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== + dependencies: + "@jest/types" "^28.1.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^28.0.2" + leven "^3.1.0" + pretty-format "^28.1.3" + +jest-watcher@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== + dependencies: + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^28.1.3" + string-length "^4.0.1" + +jest-when@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/jest-when/-/jest-when-3.5.1.tgz#33ab6f923661cf878cd08fe9df64b507934603db" + integrity sha512-o+HiaIVCg1IC95sMDKHU9G5v5N5l3UHqXvJpf0PgAMThZeQo4Hf5Sgoj+wpCBRGg4/KtzSAZZZEKNiLqE0i4eQ== + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.3.tgz#e9c6a7eecdebe3548ca2b18894a50f45b36dfc6b" + integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== + dependencies: + "@jest/core" "^28.1.3" + "@jest/types" "^28.1.3" + import-local "^3.0.2" + jest-cli "^28.1.3" + +jju@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" + integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== + +jquery@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" + integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.1.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.10.0, js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsdom@^20.0.0: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" + integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== + dependencies: + abab "^2.0.6" + acorn "^8.8.1" + acorn-globals "^7.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + decimal.js "^10.4.2" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.1" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.11.0" + xml-name-validator "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-parse-even-better-errors@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" + integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== + +json-rpc-engine@^5.3.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz#75758609d849e1dba1e09021ae473f3ab63161e5" + integrity sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g== + dependencies: + eth-rpc-errors "^3.0.0" + safe-event-emitter "^1.0.1" + +json-rpc-engine@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz#bf5ff7d029e1c1bf20cb6c0e9f348dcd8be5a393" + integrity sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ== + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + eth-rpc-errors "^4.0.2" + +json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" + integrity sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg== + dependencies: + jsonify "~0.0.0" + +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonc-parser@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.1.0.tgz#73b8f0e5c940b83d03476bc2e51a20ef0932615d" + integrity sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg== + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA== + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +just-diff-apply@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.4.1.tgz#1debed059ad009863b4db0e8d8f333d743cdd83b" + integrity sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g== + +just-diff@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" + integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== + +keccak@3.0.2, keccak@^3.0.0, keccak@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + optionalDependencies: + graceful-fs "^4.1.9" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +lerna@^6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-6.6.2.tgz#ad921f913aca4e7307123a598768b6f15ca5804f" + integrity sha512-W4qrGhcdutkRdHEaDf9eqp7u4JvI+1TwFy5woX6OI8WPe4PYBdxuILAsvhp614fUG41rKSGDKlOh+AWzdSidTg== + dependencies: + "@lerna/child-process" "6.6.2" + "@lerna/create" "6.6.2" + "@lerna/legacy-package-management" "6.6.2" + "@npmcli/arborist" "6.2.3" + "@npmcli/run-script" "4.1.7" + "@nrwl/devkit" ">=15.5.2 < 16" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "19.0.3" + byte-size "7.0.0" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "5.0.0" + columnify "1.6.0" + config-chain "1.1.12" + conventional-changelog-angular "5.0.12" + conventional-changelog-core "4.2.4" + conventional-recommended-bump "6.1.0" + cosmiconfig "7.0.0" + dedent "0.7.0" + dot-prop "6.0.1" + envinfo "^7.7.4" + execa "5.0.0" + fs-extra "9.1.0" + get-port "5.1.1" + get-stream "6.0.0" + git-url-parse "13.1.0" + glob-parent "5.1.2" + globby "11.1.0" + graceful-fs "4.2.10" + has-unicode "2.0.1" + import-local "^3.0.2" + init-package-json "3.0.2" + inquirer "^8.2.4" + is-ci "2.0.0" + is-stream "2.0.0" + js-yaml "^4.1.0" + libnpmaccess "^6.0.3" + libnpmpublish "7.1.4" + load-json-file "6.2.0" + make-dir "3.1.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "8.1.1" + npm-packlist "5.1.1" + npm-registry-fetch "^14.0.3" + npmlog "^6.0.2" + nx ">=15.5.2 < 16" + p-map "4.0.0" + p-map-series "2.1.0" + p-pipe "3.1.0" + p-queue "6.6.2" + p-reduce "2.1.0" + p-waterfall "2.1.1" + pacote "15.1.1" + pify "5.0.0" + read-cmd-shim "3.0.0" + read-package-json "5.0.1" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.8" + signal-exit "3.0.7" + slash "3.0.0" + ssri "9.0.1" + strong-log-transformer "2.1.0" + tar "6.1.11" + temp-dir "1.0.0" + typescript "^3 || ^4" + upath "^2.0.1" + uuid "8.3.2" + validate-npm-package-license "3.0.4" + validate-npm-package-name "4.0.0" + write-file-atomic "4.0.1" + write-pkg "4.0.0" + yargs "16.2.0" + yargs-parser "20.2.4" + +level-codec@~7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" + integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== + +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-errors@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" + integrity sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w== + dependencies: + errno "~0.1.1" + +level-errors@~1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859" + integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig== + dependencies: + errno "~0.1.1" + +level-iterator-stream@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" + integrity sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw== + dependencies: + inherits "^2.0.1" + level-errors "^1.0.3" + readable-stream "^1.0.33" + xtend "^4.0.0" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-transcoder@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== + dependencies: + buffer "^6.0.3" + module-error "^1.0.1" + +level-ws@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" + integrity sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw== + dependencies: + readable-stream "~1.0.15" + xtend "~2.1.1" + +level@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" + integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== + dependencies: + browser-level "^1.0.1" + classic-level "^1.2.0" + +leveldown@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" + integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +levelup@^1.2.1: + version "1.3.9" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab" + integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ== + dependencies: + deferred-leveldown "~1.2.1" + level-codec "~7.0.0" + level-errors "~1.0.3" + level-iterator-stream "~1.3.0" + prr "~1.0.1" + semver "~5.4.1" + xtend "~4.0.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +libnpmaccess@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.3.tgz#473cc3e4aadb2bc713419d92e45d23b070d8cded" + integrity sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg== + dependencies: + aproba "^2.0.0" + minipass "^3.1.1" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + +libnpmpublish@7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.1.4.tgz#a0d138e00e52a0c71ffc82273acf0082fc2dfb36" + integrity sha512-mMntrhVwut5prP4rJ228eEbEyvIzLWhqFuY90j5QeXBCTT2pWSMno7Yo2S2qplPUr02zPurGH4heGLZ+wORczg== + dependencies: + ci-info "^3.6.1" + normalize-package-data "^5.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + proc-log "^3.0.0" + semver "^7.3.7" + sigstore "^1.4.0" + ssri "^10.0.1" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lines-and-columns@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" + integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== + +load-json-file@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== + dependencies: + graceful-fs "^4.1.15" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.1.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.14.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.0.tgz#21be64954a4680e303a09e9468f880b98a0b3c7f" + integrity sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ== + +lru-cache@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" + integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +ltgt@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== + +lunr@^2.3.9: + version "2.3.9" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" + integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== + +make-dir@3.1.0, make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== + dependencies: + object-visit "^1.0.0" + +marked@^4.0.18: + version "4.0.18" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.18.tgz#cd0ac54b2e5610cfb90e8fd46ccaa8292c9ed569" + integrity sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw== + +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memdown@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" + integrity sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w== + dependencies: + abstract-leveldown "~2.7.1" + functional-red-black-tree "^1.0.1" + immediate "^3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.1.1" + +memory-level@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" + integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== + dependencies: + abstract-level "^1.0.0" + functional-red-black-tree "^1.0.1" + module-error "^1.0.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" + integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== + dependencies: + async "^1.4.2" + ethereumjs-util "^5.0.0" + level-ws "0.0.0" + levelup "^1.2.1" + memdown "^1.0.0" + readable-stream "^2.0.0" + rlp "^2.0.0" + semaphore ">=1.0.1" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1, minimatch@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^6.1.6: + version "6.2.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-6.2.0.tgz#2b70fd13294178c69c04dfc05aebdb97a4e79e42" + integrity sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.0, minimatch@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253" + integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.1.tgz#9b39c047cf10af9bfa6f3a4d25ed88444be27a4c" + integrity sha512-/kgtXVGS10PTFET6dAbOBWQtgH+iDiI4NhRqAftojRlsOJhk0y45sVVxqCaRQC+AMFH7JkHiWpuKJKQ+mojKiA== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-fetch@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce" + integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ== + dependencies: + minipass "^5.0.0" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: + version "3.3.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +minipass@^4.0.0, minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" + integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== + +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp-infer-owner@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" + integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== + dependencies: + chownr "^2.0.0" + infer-owner "^1.0.4" + mkdirp "^1.0.3" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.1.0.tgz#dbf1114b7c3f9d0ca5de3133906aea3dfc89ef7a" + integrity sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multimatch@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.8, mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.0, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-addon-api@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^2.6.12: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" + integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + +node-gyp@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.1.0.tgz#c8d8e590678ea1f7b8097511dedf41fc126648f8" + integrity sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +nopt@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.1.0.tgz#91f6a3366182176e72ecab93a09c19b63b485f28" + integrity sha512-ZFPLe9Iu0tnx7oWhFxAo4s7QTn8+NNDDxYNaKLjE7Dp0tbakQ3M1QhQzsnzXHQBTUO3K9BmwaxnyO8Ayn2I95Q== + dependencies: + abbrev "^2.0.0" + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0, "normalize-package-data@~1.0.1 || ^2.0.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" + integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== + dependencies: + hosted-git-info "^5.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-package-data@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" + integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== + dependencies: + hosted-git-info "^6.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-auth-to-token@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/npm-auth-to-token/-/npm-auth-to-token-1.0.0.tgz#2567b34316b16e449c63dc0c9188d1f1cd11cf5e" + integrity sha512-rwf5Sb1P1/jZlYzwpTqT9BdYMaXRcMJ5ExPB7TdM0addBjAK7UbmHSfMwOeE/BVnpAoW9GQ/uDAywW2thbf0SA== + dependencies: + commander "^2.9.0" + npm-registry-client "^8.3.0" + +npm-bundled@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-bundled@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" + integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== + dependencies: + npm-normalize-package-bin "^3.0.0" + +npm-install-checks@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.1.1.tgz#b459b621634d06546664207fde16810815808db1" + integrity sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-normalize-package-bin@^3.0.0, npm-normalize-package-bin@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== + +npm-package-arg@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" + integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== + dependencies: + hosted-git-info "^3.0.6" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" + integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== + dependencies: + hosted-git-info "^6.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +"npm-package-arg@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0": + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.0.tgz#a60e9f1e7c03e4e3e4e994ea87fff8b90b522987" + integrity sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw== + dependencies: + hosted-git-info "^5.0.0" + proc-log "^2.0.1" + semver "^7.3.5" + validate-npm-package-name "^4.0.0" + +npm-packlist@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" + integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== + dependencies: + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^1.1.2" + npm-normalize-package-bin "^1.0.1" + +npm-packlist@^7.0.0: + version "7.0.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" + integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== + dependencies: + ignore-walk "^6.0.0" + +npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz#c6acd97d1ad4c5dbb80eac7b386b03ffeb289e5f" + integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== + dependencies: + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^10.0.0" + semver "^7.3.5" + +npm-registry-client@^8.3.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-8.6.0.tgz#7f1529f91450732e89f8518e0f21459deea3e4c4" + integrity sha512-Qs6P6nnopig+Y8gbzpeN/dkt+n7IyVd8f45NTMotGk6Qo7GfBmzwYx6jRLoOOgKiMnaQfYxsuyQlD8Mc3guBhg== + dependencies: + concat-stream "^1.5.2" + graceful-fs "^4.1.6" + normalize-package-data "~1.0.1 || ^2.0.0" + npm-package-arg "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + once "^1.3.3" + request "^2.74.0" + retry "^0.10.0" + safe-buffer "^5.1.1" + semver "2 >=2.2.1 || 3.x || 4 || 5" + slide "^1.1.3" + ssri "^5.2.4" + optionalDependencies: + npmlog "2 || ^3.1.0 || ^4.0.0" + +npm-registry-fetch@14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz#8545e321c2b36d2c6fe6e009e77e9f0e527f547b" + integrity sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA== + dependencies: + make-fetch-happen "^11.0.0" + minipass "^4.0.0" + minipass-fetch "^3.0.0" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^10.0.0" + proc-log "^3.0.0" + +npm-registry-fetch@^13.0.0: + version "13.3.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" + integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== + dependencies: + make-fetch-happen "^10.0.6" + minipass "^3.1.6" + minipass-fetch "^2.0.3" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^9.0.1" + proc-log "^2.0.0" + +npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3: + version "14.0.5" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" + integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== + dependencies: + make-fetch-happen "^11.0.0" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^10.0.0" + proc-log "^3.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + +"npmlog@2 || ^3.1.0 || ^4.0.0": + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +npmlog@6.0.2, npmlog@^6.0.0, npmlog@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +npmlog@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" + integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== + dependencies: + are-we-there-yet "^4.0.0" + console-control-strings "^1.1.0" + gauge "^5.0.0" + set-blocking "^2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + +nwsapi@^2.2.2: + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + +nx@15.9.4, "nx@>=15.5.2 < 16": + version "15.9.4" + resolved "https://registry.yarnpkg.com/nx/-/nx-15.9.4.tgz#1075bc33fe8ee6c6546c21ec6ffcfd2e000946c6" + integrity sha512-P1G4t59UvE/lkHyruLeSOB5ZuNyh01IwU0tTUOi8f9s/NbP7+OQ8MYVwDV74JHTr6mQgjlS+n+4Eox8tVm9itA== + dependencies: + "@nrwl/cli" "15.9.4" + "@nrwl/tao" "15.9.4" + "@parcel/watcher" "2.0.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "^3.0.0-rc.18" + "@zkochan/js-yaml" "0.0.6" + axios "^1.0.0" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^7.0.2" + dotenv "~10.0.0" + enquirer "~2.3.6" + fast-glob "3.2.7" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^11.1.0" + glob "7.1.4" + ignore "^5.0.4" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + lines-and-columns "~2.0.3" + minimatch "3.0.5" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.3.4" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nrwl/nx-darwin-arm64" "15.9.4" + "@nrwl/nx-darwin-x64" "15.9.4" + "@nrwl/nx-linux-arm-gnueabihf" "15.9.4" + "@nrwl/nx-linux-arm64-gnu" "15.9.4" + "@nrwl/nx-linux-arm64-musl" "15.9.4" + "@nrwl/nx-linux-x64-gnu" "15.9.4" + "@nrwl/nx-linux-x64-musl" "15.9.4" + "@nrwl/nx-win32-arm64-msvc" "15.9.4" + "@nrwl/nx-win32-x64-msvc" "15.9.4" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.12.0, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.2: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== + dependencies: + isobject "^3.0.1" + +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +obliterator@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.3, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +open@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" + integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== + dependencies: + default-browser "^4.0.0" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^2.2.0" + +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map-series@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" + integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== + +p-map@4.0.0, p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-pipe@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== + +p-queue@6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +p-waterfall@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" + integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== + dependencies: + p-reduce "^2.0.0" + +pacote@15.1.1: + version "15.1.1" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.1.1.tgz#94d8c6e0605e04d427610b3aacb0357073978348" + integrity sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ== + dependencies: + "@npmcli/git" "^4.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^6.0.1" + "@npmcli/run-script" "^6.0.0" + cacache "^17.0.0" + fs-minipass "^3.0.0" + minipass "^4.0.0" + npm-package-arg "^10.0.0" + npm-packlist "^7.0.0" + npm-pick-manifest "^8.0.0" + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" + promise-retry "^2.0.1" + read-package-json "^6.0.0" + read-package-json-fast "^3.0.0" + sigstore "^1.0.0" + ssri "^10.0.0" + tar "^6.1.11" + +pacote@^15.0.0, pacote@^15.0.8: + version "15.2.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" + integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== + dependencies: + "@npmcli/git" "^4.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^6.0.1" + "@npmcli/run-script" "^6.0.0" + cacache "^17.0.0" + fs-minipass "^3.0.0" + minipass "^5.0.0" + npm-package-arg "^10.0.0" + npm-packlist "^7.0.0" + npm-pick-manifest "^8.0.0" + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" + promise-retry "^2.0.1" + read-package-json "^6.0.0" + read-package-json-fast "^3.0.0" + sigstore "^1.3.0" + ssri "^10.0.0" + tar "^6.1.11" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-conflict-json@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" + integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== + dependencies: + json-parse-even-better-errors "^3.0.0" + just-diff "^6.0.0" + just-diff-apply "^5.2.0" + +parse-headers@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-path@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" + integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== + dependencies: + protocols "^2.0.0" + +parse-url@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" + integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== + dependencies: + parse-path "^7.0.0" + +parse5@^7.0.0, parse5@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.6.1, path-scurry@^1.7.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63" + integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg== + dependencies: + lru-cache "^9.1.1" + minipass "^5.0.0 || ^6.0.2" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@5.0.0, pify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== + +postcss-selector-parser@^6.0.10: + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +precond@0.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" + integrity sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-plugin-solidity@^1.0.0-beta.20: + version "1.0.0-beta.24" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.24.tgz#67573ca87098c14f7ccff3639ddd8a4cab2a87eb" + integrity sha512-6JlV5BBTWzmDSq4kZ9PTXc3eLOX7DF5HpbqmmaF+kloyUwOZbJ12hIYsUaZh2fVgZdV2t0vWcvY6qhILhlzgqg== + dependencies: + "@solidity-parser/parser" "^0.14.3" + emoji-regex "^10.1.0" + escape-string-regexp "^4.0.0" + semver "^7.3.7" + solidity-comments-extractor "^0.0.7" + string-width "^4.2.3" + +prettier@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +pretty-format@29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.3.tgz#25500ada21a53c9e8423205cf0337056b201244c" + integrity sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA== + dependencies: + "@jest/schemas" "^29.4.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +pretty-format@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" + integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== + dependencies: + "@jest/types" "^24.9.0" + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + react-is "^16.8.4" + +pretty-format@^28.0.0, pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + dependencies: + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +proc-log@^2.0.0, proc-log@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" + integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== + +proc-log@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" + integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-polyfill@^8.1.3: + version "8.2.3" + resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.2.3.tgz#2edc7e4b81aff781c88a0d577e5fe9da822107c6" + integrity sha512-Og0+jCRQetV84U8wVjMNccfGCnMQ9mGs9Hv78QFe+pSDD3gWTpz0y+1QCuxy5d/vBFuZ3iwP2eycAkvqIMPmWg== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +promise-to-callback@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" + integrity sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA== + dependencies: + is-fn "^1.0.0" + set-immediate-shim "^1.0.1" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== + dependencies: + read "1" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" + integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +psl@^1.1.28, psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qs@6.10.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" + +qs@^6.7.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1, raw-body@^2.4.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^16.8.4: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +read-cmd-shim@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" + integrity sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog== + +read-cmd-shim@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== + +read-package-json-fast@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" + integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== + dependencies: + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" + +read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== + dependencies: + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +read-package-json@5.0.1, read-package-json@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" + integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg== + dependencies: + glob "^8.0.1" + json-parse-even-better-errors "^2.3.1" + normalize-package-data "^4.0.0" + npm-normalize-package-bin "^1.0.1" + +read-package-json@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.3.tgz#726116b75e00eac2075240995f05681af4ca7122" + integrity sha512-4QbpReW4kxFgeBQ0vPAqh2y8sXEB3D4t3jsXbJKIhBiF80KT6XRo45reqwtftju5J6ru1ax06A2Gb/wM1qCOEQ== + dependencies: + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^5.0.0" + npm-normalize-package-bin "^3.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read@1, read@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== + dependencies: + mute-stream "~0.0.4" + +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^1.0.33: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^4.1.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.0.tgz#55ce132d60a988c460d75c631e9ccf6a7229b468" + integrity sha512-kDMOq0qLtxV9f/SQv522h8cxZBqNZXuXNyjyezmfAAuribMyVXziljpQ/uQhfE1XLg2/TLTW2DsnoE4VAi/krg== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + +readable-stream@~1.0.15: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== + dependencies: + resolve "^1.9.0" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +request@^2.74.0, request@^2.85.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== + +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.9.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@~1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.2.8, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" + integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== + dependencies: + glob "^9.2.0" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-applescript@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" + integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== + dependencies: + execa "^5.0.0" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +rxjs@^7.5.5: + version "7.5.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" + integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== + dependencies: + tslib "^2.1.0" + +rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-event-emitter@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz#5b692ef22329ed8f69fdce607e50ca734f6f20af" + integrity sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg== + dependencies: + events "^3.0.0" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + +schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@4.0.3, secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +semaphore@>=1.0.1, semaphore@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" + integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== + +"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +semver@7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.8: + version "7.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" + integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + dependencies: + lru-cache "^6.0.0" + +semver@~5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@6.0.0, serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ== + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +shiki@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14" + integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng== + dependencies: + jsonc-parser "^3.0.0" + vscode-oniguruma "^1.6.1" + vscode-textmate "5.2.0" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@3.0.7, signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" + integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== + +sigstore@^1.0.0, sigstore@^1.3.0, sigstore@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.5.2.tgz#8d4c2a549341211cb08c687999843edc48c1a94c" + integrity sha512-X95v6xAAooVpn7PaB94TDmFeSO5SBfCtB1R23fvzr36WTfjtkiiyOeei979nbTjc8nzh6FSLeltQZuODsm1EjQ== + dependencies: + "@sigstore/protobuf-specs" "^0.1.0" + make-fetch-happen "^11.0.1" + tuf-js "^1.1.3" + +sirv@^1.0.7: + version "1.0.19" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== + dependencies: + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@3.0.0, slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +slide@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw== + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.0" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.0.tgz#f9225acdb841e874dca25f870e9130990f3913d0" + integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +solc@^0.8.15: + version "0.8.16" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.16.tgz#120f992357e236d99e6cf3445bf2c2dca3384f96" + integrity sha512-6oZg7FAhIouj2zYLvoR3Q4fMP/+BGPR7sY7GcrEXKIp+DRd8RmpDEFO1LUBKpClUiaYguNgmthTFmnPl4MeiMQ== + dependencies: + command-exists "^1.2.8" + commander "^8.1.0" + follow-redirects "^1.12.1" + js-sha3 "0.8.0" + memorystream "^0.3.1" + semver "^5.5.0" + tmp "0.0.33" + +solidity-comments-extractor@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" + integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + dependencies: + is-plain-obj "^1.0.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.13, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spawn-command@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" + integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sshpk@^1.7.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@9.0.1, ssri@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + +ssri@^10.0.0, ssri@^10.0.1: + version "10.0.4" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6" + integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ== + dependencies: + minipass "^5.0.0" + +ssri@^5.2.4: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" + integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ== + dependencies: + safe-buffer "^5.1.1" + +stack-utils@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" + integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== + dependencies: + escape-string-regexp "^2.0.0" + +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +synckit@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" + integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== + dependencies: + "@pkgr/utils" "^2.3.1" + tslib "^2.5.0" + +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar-stream@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@6.1.11, tar@^6.1.11, tar@^6.1.2: + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + 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" + +temp-dir@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +tempy@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.0.tgz#4f192b3ee3328a2684d0e3fc5c491425395aab65" + integrity sha512-eLXG5B1G0mRPHmgH2WydPl5v4jH35qEn3y/rA/aahKhIa91Pn119SsU7n7v/433gtT9ONzC8ISvNHIh2JSTm0w== + dependencies: + del "^6.0.0" + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@^5.1.3: + version "5.3.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.5.tgz#f7d82286031f915a4f8fb81af4bd35d2e3c011bc" + integrity sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.14" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.14.1" + +terser@^5.14.1: + version "5.14.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" + integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +titleize@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" + integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== + +tmp@0.0.33, tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + +tough-cookie@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== + dependencies: + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +treeverse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" + integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +ts-jest@^28.0.7: + version "28.0.8" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-28.0.8.tgz#cd204b8e7a2f78da32cf6c95c9a6165c5b99cc73" + integrity sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^28.0.0" + json5 "^2.2.1" + lodash.memoize "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "^21.0.1" + +ts-loader@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.3.1.tgz#fe25cca56e3e71c1087fe48dc67f4df8c59b22d4" + integrity sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tslib@^2.4.0, tslib@^2.5.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +tuf-js@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.6.tgz#ad3e7a20237b83b51c2a8f9d1ddf093279a10fc2" + integrity sha512-CXwFVIsXGbVY4vFiWF7TJKWmlKJAT8TWkH4RmiohJRcDJInix++F0dznDmoVbtJNzZ8yLprKUG4YrDIhv3nBMg== + dependencies: + "@tufjs/models" "1.0.4" + debug "^4.3.4" + make-fetch-happen "^11.1.0" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typedoc-monorepo-link-types@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/typedoc-monorepo-link-types/-/typedoc-monorepo-link-types-0.0.4.tgz#d2875e5802a928738493f7d7e80265d547ef1970" + integrity sha512-fAxmfoJSp6cvT+I9/pN9pS2R8EoKUHaKU095E6H7FwN4tZUXPri5CZkxi9JLRlM5SV+pQwIlYnx9b+hnVP0nHA== + +typedoc-plugin-extras@^2.2.5: + version "2.3.0" + resolved "https://registry.yarnpkg.com/typedoc-plugin-extras/-/typedoc-plugin-extras-2.3.0.tgz#f2265256d6844d74ea40fe026d0a1b3d0277e9f5" + integrity sha512-XjzutqICAkSpl1vhyloYfd35mn0U6WwOQ7BttRkwGhmBQs/qFLz2K+AU0/lj2Cx4WY6AqVr4c/PzFbqI4fACqw== + +typedoc-plugin-mdn-links@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/typedoc-plugin-mdn-links/-/typedoc-plugin-mdn-links-2.0.0.tgz#b43893bc7bdbb94927091f66d465f31e8440ad6c" + integrity sha512-IGLuelXPOenGdmklr5DHgPPf/MfZj7aEYCxCMtPN8C1D0lA7w0YLahd0jhDDcOMU7zL1EPcM5pPnhZHltDhqGQ== + +typedoc@^0.23.9: + version "0.23.10" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.23.10.tgz#285d595a5f2e35ccdf6f38eba4dfe951d5bff461" + integrity sha512-03EUiu/ZuScUBMnY6p0lY+HTH8SwhzvRE3gImoemdPDWXPXlks83UGTx++lyquWeB1MTwm9D9Ca8RIjkK3AFfQ== + dependencies: + lunr "^2.3.9" + marked "^4.0.18" + minimatch "^5.1.0" + shiki "^0.10.1" + +"typescript@^3 || ^4": + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +typescript@^4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + +uglify-js@^3.1.4: + version "3.17.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.0.tgz#55bd6e9d19ce5eef0d5ad17cd1f587d85b180a85" + integrity sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici@^5.4.0: + version "5.26.3" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.26.3.tgz#ab3527b3d5bb25b12f898dfd22165d472dd71b79" + integrity sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw== + dependencies: + "@fastify/busboy" "^2.0.0" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + +upath@2.0.1, upath@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + +update-browserslist-db@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== + +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +utf-8-validate@5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== + dependencies: + node-gyp-build "^4.3.0" + +utf-8-validate@^5.0.9: + version "5.0.9" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" + integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== + dependencies: + node-gyp-build "^4.3.0" + +utf8@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.0: + version "0.12.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" + integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + +util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@8.3.2, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-compile-cache@2.3.0, v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + +validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@4.0.0, validate-npm-package-name@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" + integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== + dependencies: + builtins "^5.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" + +validate-npm-package-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" + integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== + dependencies: + builtins "^5.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vscode-oniguruma@^1.6.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz#aeb9771a2f1dbfc9083c8a7fdd9cccaa3f386607" + integrity sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA== + +vscode-textmate@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" + integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== + +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== + dependencies: + xml-name-validator "^4.0.0" + +walk-up-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" + integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +web3-provider-engine@16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-16.0.3.tgz#8ff93edf3a8da2f70d7f85c5116028c06a0d9f07" + integrity sha512-Q3bKhGqLfMTdLvkd4TtkGYJHcoVQ82D1l8jTIwwuJp/sAp7VHnRYb9YJ14SW/69VMWoOhSpPLZV2tWb9V0WJoA== + dependencies: + "@ethereumjs/tx" "^3.3.0" + async "^2.5.0" + backoff "^2.5.0" + clone "^2.0.0" + cross-fetch "^2.1.0" + eth-block-tracker "^4.4.2" + eth-json-rpc-filters "^4.2.1" + eth-json-rpc-infura "^5.1.0" + eth-json-rpc-middleware "^6.0.0" + eth-rpc-errors "^3.0.0" + eth-sig-util "^1.4.2" + ethereumjs-block "^1.2.2" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.85.0" + semaphore "^1.0.3" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +webpack-bundle-analyzer@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz#33c1c485a7fcae8627c547b5c3328b46de733c66" + integrity sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg== + dependencies: + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^7.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-cli@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" + integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.2.0" + "@webpack-cli/info" "^1.5.0" + "@webpack-cli/serve" "^1.7.0" + colorette "^2.0.14" + commander "^7.0.0" + cross-spawn "^7.0.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + webpack-merge "^5.7.3" + +webpack-merge@^5.7.3: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5, webpack@^5.73.0: + version "5.76.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.0.tgz#f9fb9fb8c4a7dbdcd0d56a98e56b8a942ee2692c" + integrity sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + +whatwg-fetch@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" + integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.2: + version "1.1.8" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.8.tgz#0cfd53401a6f334d90ed1125754a42ed663eb01f" + integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.9" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" + integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0, wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +word-wrap@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" + integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" + integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +write-file-atomic@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-pkg@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" + integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== + dependencies: + sort-keys "^2.0.0" + type-fest "^0.4.1" + write-json-file "^3.2.0" + +ws@^5.1.1: + version "5.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" + integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== + dependencies: + async-limiter "~1.0.0" + +ws@^7.3.1, ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.11.0: + version "8.14.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" + integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== + +ws@^8.8.1: + version "8.8.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" + integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== + +xhr@^2.2.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== + dependencies: + object-keys "~0.4.0" + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@21.1.1, yargs-parser@^21.0.0, yargs-parser@^21.0.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + 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@^17.3.1: + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + +yargs@^17.6.2, yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^3.21.4: + version "3.22.3" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.3.tgz#2fbc96118b174290d94e8896371c95629e87a060" + integrity sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==